diff --git a/.gitignore b/.gitignore index c20cd091..42ab5950 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,15 @@ scripts.pak .pack_dev_cere.bat output.txt output.log +/as_linter/build +/msc_transpiler/__pycache__ +/msc_transpiler/commands/__pycache__ +/msc_transpiler/tests/__pycache__ +/msc_transpiler/pipeline/__pycache__ +/msc_transpiler/output/__pycache__ +/msc_transpiler/expressions/__pycache__ +/angelscript_output +lint_report.json +lint_report.txt +transpiler_errors.log +/_tmp_as_fixcheck diff --git a/as_linter/CMakeLists.txt b/as_linter/CMakeLists.txt new file mode 100644 index 00000000..83b5e60a --- /dev/null +++ b/as_linter/CMakeLists.txt @@ -0,0 +1,66 @@ +cmake_minimum_required(VERSION 3.16) +project(as_linter LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Static MSVC runtime for standalone distribution +if(MSVC) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + add_compile_options(/W3 /EHsc) + add_compile_definitions(_CRT_SECURE_NO_WARNINGS) +endif() + +# Paths to AngelScript SDK and addons in the game repo +set(AS_ROOT "${CMAKE_SOURCE_DIR}/../../../Documents/GitHub/MSC/MasterSwordRebirth/thirdparty/angelscript") +set(ADDON_ROOT "${CMAKE_SOURCE_DIR}/../../../Documents/GitHub/MSC/MasterSwordRebirth/src/game/shared/ms/angelscript/addons") + +# Allow overriding from command line +if(DEFINED ANGELSCRIPT_ROOT) + set(AS_ROOT "${ANGELSCRIPT_ROOT}") +endif() +if(DEFINED ADDON_DIR) + set(ADDON_ROOT "${ADDON_DIR}") +endif() + +message(STATUS "AngelScript SDK: ${AS_ROOT}") +message(STATUS "Addons dir: ${ADDON_ROOT}") + +# Collect AngelScript SDK source files +file(GLOB AS_SDK_SOURCES "${AS_ROOT}/*.cpp") + +# Addon source files +set(ADDON_SOURCES + "${ADDON_ROOT}/scriptstdstring/scriptstdstring.cpp" + "${ADDON_ROOT}/scriptstdstring/scriptstdstring_utils.cpp" + "${ADDON_ROOT}/scriptarray/scriptarray.cpp" + "${ADDON_ROOT}/scriptdictionary/scriptdictionary.cpp" + "${ADDON_ROOT}/scriptbuilder/scriptbuilder.cpp" + "${ADDON_ROOT}/scriptmath/scriptmath.cpp" +) + +# Our linter source files +set(LINTER_SOURCES + src/main.cpp + src/linter_engine.cpp + src/linter_registration.cpp + src/linter_report.cpp + src/linter_include_handler.cpp +) + +add_executable(as_linter + ${LINTER_SOURCES} + ${AS_SDK_SOURCES} + ${ADDON_SOURCES} +) + +target_include_directories(as_linter PRIVATE + "${AS_ROOT}/include" + "${ADDON_ROOT}" + "${CMAKE_SOURCE_DIR}/src" +) + +# On Windows x86, AngelScript needs the asm caller +if(MSVC AND CMAKE_SIZEOF_VOID_P EQUAL 4) + target_compile_definitions(as_linter PRIVATE AS_MAX_PORTABILITY) +endif() diff --git a/as_linter/src/linter_base_script.h b/as_linter/src/linter_base_script.h new file mode 100644 index 00000000..2791d71b --- /dev/null +++ b/as_linter/src/linter_base_script.h @@ -0,0 +1,211 @@ +#pragma once + +// CGameScript base class defined as AngelScript source code. +// This is compiled into every module so transpiled scripts can inherit from it. +// It mirrors the CGameScript type registered in ASScriptClasses.cpp but as a +// script-defined class instead of a native type. +// +// Every method that transpiled scripts call on 'this' (implicitly or +// explicitly) must appear here so the AS compiler can resolve the symbol. + +static const char* g_BaseScript = R"AS( + +// Base class that all transpiled scripts inherit from +class CGameScript +{ + // Variable storage (simulated — in real game this uses C++ std::map) + dictionary@ m_vars; + + // Entity handle fields used by transpiled scripts + CBaseEntity@ m_hTarget; + CBaseEntity@ m_hLastCreated; + CBaseEntity@ m_hLastUsed; + CBaseEntity@ m_hLastStruck; + CBaseEntity@ m_hLastStruckByMe; + CBaseEntity@ m_hLastSeen; + CBaseEntity@ m_hAttackTarget; + + CGameScript() + { + @m_vars = dictionary(); + @m_hTarget = null; + @m_hLastCreated = null; + @m_hLastUsed = null; + @m_hLastStruck = null; + @m_hLastStruckByMe = null; + @m_hLastSeen = null; + @m_hAttackTarget = null; + } + + // ── Variable storage ────────────────────────────────────────── + void SetVar(const string &in name, const string &in value) + { + m_vars.set(name, value); + } + + void SetVar(const string &in name, float value) + { + m_vars.set(name, formatFloat(value, "", 0, 6)); + } + + void SetVar(const string &in name, int value) + { + m_vars.set(name, "" + value); + } + + string GetVar(const string &in name, const string &in defaultValue = "") + { + string result; + if (m_vars.get(name, result)) + return result; + return defaultValue; + } + + float GetVarFloat(const string &in name, float defaultValue = 0.0f) + { + string result; + if (m_vars.get(name, result)) + { + uint dummy; + return float(parseFloat(result, dummy)); + } + return defaultValue; + } + + int GetVarInt(const string &in name, int defaultValue = 0) + { + string result; + if (m_vars.get(name, result)) + { + uint dummy; + return int(parseInt(result, 10, dummy)); + } + return defaultValue; + } + + bool HasVar(const string &in name) + { + return m_vars.exists(name); + } + + void RemoveVar(const string &in name) + { + m_vars.delete(name); + } + + void ClearVars() + { + m_vars.deleteAll(); + } + + // ── Entity ownership ────────────────────────────────────────── + CBaseEntity@ GetOwner() { return null; } + void SetOwner(CBaseEntity@ pEntity) {} + bool IsValidOwner() { return false; } + + // ── Properties (called on self by transpiled scripts) ───────── + void SetHealth(float hp) {} + void SetHealth(int hp) {} + void SetMaxHealth(float hp) {} + void SetName(const string &in name) {} + void SetModel(const string &in model) {} + void SetInvincible(bool val) {} + void SetRace(const string &in race) {} + void SetWidth(float w) {} + void SetHeight(float h) {} + void SetWidth(int w) {} + void SetHeight(int h) {} + void SetRoam(bool val) {} + void SetRoam(int val) {} + void SetModelBody(int group, int body) {} + void SetSolid(int val) {} + void SetSolid(const string &in val) {} + void SetFly(bool val) {} + void SetFly(int val) {} + void SetNoPush(bool val) {} + void SetNoPush(int val) {} + void SetGravity(float val) {} + void SetGravity(int val) {} + void SetMoveAnim(const string &in anim) {} + void SetIdleAnim(const string &in anim) {} + void SetMoveDest(const string &in dest) {} + void SetMoveDest(const Vector3 &in dest) {} + void SetAngles(const string &in angles) {} + void SetAngles(const Vector3 &in angles) {} + void SetCallback(const string &in a) {} + void SetCallback(const string &in a, const string &in b) {} + void SetCallback(const string &in a, const string &in b, const string &in c) {} + void SetRepeatDelay(float delay) {} + void SetRepeatDelay(int delay) {} + void SetStat(const string &in stat, int val) {} + void SetStat(const string &in stat, const string &in val) {} + void SetMenuAutoOpen(bool val) {} + void SetMenuAutoOpen(int val) {} + void SetFOV(float fov) {} + void SetFOV(int fov) {} + void SetBloodType(const string &in type) {} + void SetSpeed(float speed) {} + void SetSpeed(int speed) {} + void SetBBox(const string &in mins, const string &in maxs) {} + void SetBBox(const Vector3 &in mins, const Vector3 &in maxs) {} + void SetScriptFlags(const string &in flags) {} + void SetScriptFlags(const string &in a, const string &in b) {} + void SetTarget(const string &in target) {} + void SetTarget(CBaseEntity@ target) {} + void SetDamageType(const string &in type) {} + void SetDamageType(const string &in type, const string &in extra) {} + + // ── Animation ──────────────────────────────────────────────── + void PlayAnim(const string &in anim) {} + void PlayAnim(const string &in anim, float framerate) {} + + // ── Script lifecycle ───────────────────────────────────────── + void RemoveScript() {} + void RemoveScript(const string &in script) {} + + // ── Virtual event callbacks ────────────────────────────────── + // These must be declared so that subclasses can use 'override' + void OnSpawn() {} + void OnThink() {} + void OnDamage(int amount) {} + void OnDeath(CBaseEntity@ attacker) {} + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) {} + void OnTouch(CBaseEntity@ other) {} + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) {} + void OnHitByAttack(CBaseEntity@ attacker, int damage) {} + void OnDeploy() {} + void OnPickup(CBaseEntity@ player) {} + void OnDrop() {} + void OnScriptSay(const string &in text) {} + void OnHeardSound(CBaseEntity@ source, Vector3 origin) {} + void OnDamagedOther(CBaseEntity@ victim, int damage) {} + void OnParry(CBaseEntity@ attacker) {} + void OnPostSpawn() {} + + // NPC-specific callbacks + void OnAttackTarget(CBaseEntity@ target) {} + void OnHuntTarget(CBaseEntity@ target) {} + void OnFlee() {} + void OnAttackDoDamage(CBaseEntity@ target) {} + void OnStruck(CBaseEntity@ attacker, int damage) {} + void OnFlinch() {} + void OnTargetValidate(CBaseEntity@ target) {} + void OnAidingAlly(CBaseEntity@ ally, CBaseEntity@ enemy) {} + void OnSuspendAI() {} + + // Timer callback + void OnRepeatTimer() {} +} + +// Interface for script-defined classes +interface IScriptInterface +{ +} + +// Factory function +CGameScript@ CreateScript(const string &in className) +{ + return CGameScript(); +} + +)AS"; diff --git a/as_linter/src/linter_engine.cpp b/as_linter/src/linter_engine.cpp new file mode 100644 index 00000000..ad436091 --- /dev/null +++ b/as_linter/src/linter_engine.cpp @@ -0,0 +1,51 @@ +#include "linter_engine.h" +#include "linter_registration.h" +#include + +// Thread-local message collection for the current file being compiled +static std::vector g_CurrentMessages; + +std::vector& GetCurrentMessages() { return g_CurrentMessages; } +void ClearCurrentMessages() { g_CurrentMessages.clear(); } + +// AngelScript message callback — collects messages into the vector +static void MessageCallback(const asSMessageInfo* msg, void* /*param*/) +{ + LinterMessage m; + m.section = msg->section ? msg->section : ""; + m.row = msg->row; + m.col = msg->col; + m.type = msg->type; + m.message = msg->message ? msg->message : ""; + g_CurrentMessages.push_back(m); +} + +asIScriptEngine* CreateLinterEngine() +{ + asIScriptEngine* engine = asCreateScriptEngine(); + if (!engine) + { + fprintf(stderr, "ERROR: Failed to create AngelScript engine.\n"); + return nullptr; + } + + // Set message callback + int r = engine->SetMessageCallback(asFUNCTION(MessageCallback), nullptr, asCALL_CDECL); + if (r < 0) + { + fprintf(stderr, "ERROR: Failed to set message callback.\n"); + engine->ShutDownAndRelease(); + return nullptr; + } + + // Match engine properties from CAngelScriptManager::Initialize() + engine->SetEngineProperty(asEP_MAX_STACK_SIZE, 1024 * 1024); // 1 MB + engine->SetEngineProperty(asEP_ALLOW_UNSAFE_REFERENCES, true); + engine->SetEngineProperty(asEP_OPTIMIZE_BYTECODE, true); + engine->SetEngineProperty(asEP_COPY_SCRIPT_SECTIONS, true); + + // Register all game bindings (types, methods, global functions, enums, etc.) + RegisterAllBindings(engine); + + return engine; +} diff --git a/as_linter/src/linter_engine.h b/as_linter/src/linter_engine.h new file mode 100644 index 00000000..d22d7de1 --- /dev/null +++ b/as_linter/src/linter_engine.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include +#include + +// Message info collected during compilation +struct LinterMessage { + std::string section; + int row; + int col; + int type; // asMSGTYPE_ERROR, asMSGTYPE_WARNING, asMSGTYPE_INFORMATION + std::string message; +}; + +// Initialize the AngelScript engine with all game bindings +asIScriptEngine* CreateLinterEngine(); + +// Get collected messages for the current file (cleared per-file) +std::vector& GetCurrentMessages(); +void ClearCurrentMessages(); diff --git a/as_linter/src/linter_include_handler.cpp b/as_linter/src/linter_include_handler.cpp new file mode 100644 index 00000000..f895a764 --- /dev/null +++ b/as_linter/src/linter_include_handler.cpp @@ -0,0 +1,104 @@ +#include "linter_include_handler.h" +#include +#include +#include + +#ifdef _WIN32 +#include +#define access _access +#define F_OK 0 +#else +#include +#endif + +static std::string g_RootDir; +static std::vector g_ExtraPaths; + +void SetIncludePaths(const std::string& rootDir, const std::vector& extraPaths) +{ + g_RootDir = rootDir; + // Ensure trailing separator + if (!g_RootDir.empty() && g_RootDir.back() != '/' && g_RootDir.back() != '\\') + g_RootDir += '/'; + + g_ExtraPaths = extraPaths; + for (auto& p : g_ExtraPaths) + { + if (!p.empty() && p.back() != '/' && p.back() != '\\') + p += '/'; + } +} + +static bool FileExists(const std::string& path) +{ + return access(path.c_str(), F_OK) == 0; +} + +// Extract directory portion of a path +static std::string DirOf(const std::string& path) +{ + size_t pos = path.find_last_of("/\\"); + if (pos == std::string::npos) return ""; + return path.substr(0, pos + 1); +} + +int LinterIncludeCallback(const char* include, const char* from, + CScriptBuilder* builder, void* /*userParam*/) +{ + if (!include || !builder) return -1; + + std::string incFile(include); + + // Search order: + // 1. Relative to the including file's directory + if (from && from[0]) + { + std::string candidate = DirOf(from) + incFile; + if (FileExists(candidate)) + { + return builder->AddSectionFromFile(candidate.c_str()); + } + } + + // 2. Relative to the root scripts directory + { + std::string candidate = g_RootDir + incFile; + if (FileExists(candidate)) + { + return builder->AddSectionFromFile(candidate.c_str()); + } + } + + // 3. Any additional include paths + for (const auto& dir : g_ExtraPaths) + { + std::string candidate = dir + incFile; + if (FileExists(candidate)) + { + return builder->AddSectionFromFile(candidate.c_str()); + } + } + + fprintf(stderr, " Include not found: %s (from %s)\n", include, from ? from : ""); + return -1; +} + +int LinterPragmaCallback(const std::string& pragmaText, + CScriptBuilder& /*builder*/, void* /*userParam*/) +{ + // Trim + size_t start = pragmaText.find_first_not_of(" \t\r\n"); + if (start == std::string::npos) return -1; + size_t end = pragmaText.find_last_not_of(" \t\r\n"); + std::string text = pragmaText.substr(start, end - start + 1); + + // Accept "#pragma context server|client|shared" silently + if (text.find("context") == 0) + { + return 0; // Accept + } + + // Unknown pragma — warn but don't fail + fprintf(stderr, " Unknown pragma: %s\n", text.c_str()); + return 0; +} diff --git a/as_linter/src/linter_include_handler.h b/as_linter/src/linter_include_handler.h new file mode 100644 index 00000000..a9889528 --- /dev/null +++ b/as_linter/src/linter_include_handler.h @@ -0,0 +1,16 @@ +#pragma once + +#include +#include +#include + +// Set the root scripts directory and additional include paths +void SetIncludePaths(const std::string& rootDir, const std::vector& extraPaths); + +// CScriptBuilder include callback +int LinterIncludeCallback(const char* include, const char* from, + CScriptBuilder* builder, void* userParam); + +// CScriptBuilder pragma callback — silently accepts #pragma context +int LinterPragmaCallback(const std::string& pragmaText, + CScriptBuilder& builder, void* userParam); diff --git a/as_linter/src/linter_registration.cpp b/as_linter/src/linter_registration.cpp new file mode 100644 index 00000000..8f1c1bcc --- /dev/null +++ b/as_linter/src/linter_registration.cpp @@ -0,0 +1,1147 @@ +//========================================================================== +// linter_registration.cpp +// +// Re-declares every AngelScript type, method, property, enum, and global +// function that the real game registers — but with dummy function pointers +// (asCALL_GENERIC + no-op). This lets the AS compiler validate transpiled +// .as files without any game engine dependency. +// +// Registration ORDER must match ASBindings::RegisterAll() exactly. +//========================================================================== + +#include "linter_registration.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +// ── Dummy generic callback used for every binding ──────────────────────── +static void DummyGeneric(asIScriptGeneric*) {} + +// ── Helpers to reduce boilerplate ──────────────────────────────────────── +#define REG_OBJ_TYPE(name, flags) \ + r = engine->RegisterObjectType(name, 0, flags); \ + if (r < 0) fprintf(stderr, "WARN: RegisterObjectType(%s) = %d\n", name, r) + +#define REG_OBJ_BEHAVE(type, beh, decl) \ + r = engine->RegisterObjectBehaviour(type, beh, decl, \ + asFUNCTION(DummyGeneric), asCALL_GENERIC); \ + if (r < 0) fprintf(stderr, "WARN: RegisterObjectBehaviour(%s, %s) = %d\n", type, decl, r) + +#define REG_OBJ_METHOD(type, decl) \ + r = engine->RegisterObjectMethod(type, decl, \ + asFUNCTION(DummyGeneric), asCALL_GENERIC); \ + if (r < 0) fprintf(stderr, "WARN: RegisterObjectMethod(%s, %s) = %d\n", type, decl, r) + +#define REG_OBJ_PROP(type, decl) \ + r = engine->RegisterObjectProperty(type, decl, 0); \ + if (r < 0) fprintf(stderr, "WARN: RegisterObjectProperty(%s, %s) = %d\n", type, decl, r) + +#define REG_GLOBAL_FUNC(decl) \ + r = engine->RegisterGlobalFunction(decl, \ + asFUNCTION(DummyGeneric), asCALL_GENERIC); \ + if (r < 0) fprintf(stderr, "WARN: RegisterGlobalFunction(%s) = %d\n", decl, r) + +#define REG_ENUM(name) \ + r = engine->RegisterEnum(name); \ + if (r < 0) fprintf(stderr, "WARN: RegisterEnum(%s) = %d\n", name, r) + +#define REG_ENUM_VAL(type, name, val) \ + r = engine->RegisterEnumValue(type, name, val); \ + if (r < 0) fprintf(stderr, "WARN: RegisterEnumValue(%s, %s) = %d\n", type, name, r) + +// Dummy global variable storage for const properties +static const float g_PI = 3.14159265358979323846f; +static const float g_E = 2.71828182845904523536f; +static const int g_kRenderNormal = 0; +static const int g_kRenderTransColor = 1; +static const int g_kRenderTransTexture = 2; +static const int g_kRenderGlow = 3; +static const int g_kRenderTransAlpha = 4; +static const int g_kRenderTransAdd = 5; +static const int g_DAMAGE_NO = 0; +static const int g_DAMAGE_YES = 1; +static const int g_DAMAGE_AIM = 2; + +// Dummy storage for param globals (string parameters passed to events) +static std::string g_param1, g_param2, g_param3, g_param4; +static std::string g_param5, g_param6, g_param7, g_param8; +// currentscript global +static std::string g_currentscript; + +//========================================================================== +// Step 2: Vector3 & Color value types (from ASCoreTypes.cpp) +//========================================================================== +static void RegisterCoreTypes(asIScriptEngine* engine) +{ + int r; + + // ── Vector3 (value type, 12 bytes: 3 floats) ──────────────────────── + r = engine->RegisterObjectType("Vector3", 12, + asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_ALLFLOATS | asOBJ_APP_CLASS_CAK); + if (r < 0) fprintf(stderr, "WARN: Vector3 type = %d\n", r); + + // Properties + REG_OBJ_PROP("Vector3", "float x"); // offset 0 + // re-register at proper offsets + r = engine->RegisterObjectProperty("Vector3", "float y", 4); + r = engine->RegisterObjectProperty("Vector3", "float z", 8); + + // Constructors / destructor + REG_OBJ_BEHAVE("Vector3", asBEHAVE_CONSTRUCT, "void f()"); + REG_OBJ_BEHAVE("Vector3", asBEHAVE_CONSTRUCT, "void f(float, float, float)"); + REG_OBJ_BEHAVE("Vector3", asBEHAVE_CONSTRUCT, "void f(const Vector3 &in)"); + REG_OBJ_BEHAVE("Vector3", asBEHAVE_DESTRUCT, "void f()"); + + // Methods + REG_OBJ_METHOD("Vector3", "float Length() const"); + REG_OBJ_METHOD("Vector3", "float Length2D() const"); + REG_OBJ_METHOD("Vector3", "Vector3 Normalize() const"); + + // Operators + REG_OBJ_METHOD("Vector3", "Vector3 opAdd(const Vector3 &in) const"); + REG_OBJ_METHOD("Vector3", "Vector3 opSub(const Vector3 &in) const"); + REG_OBJ_METHOD("Vector3", "Vector3 opMul(float) const"); + REG_OBJ_METHOD("Vector3", "Vector3 opDiv(float) const"); + REG_OBJ_METHOD("Vector3", "bool opEquals(const Vector3 &in) const"); + REG_OBJ_METHOD("Vector3", "Vector3& opAssign(const Vector3 &in)"); + REG_OBJ_METHOD("Vector3", "Vector3& opAddAssign(const Vector3 &in)"); + REG_OBJ_METHOD("Vector3", "Vector3& opSubAssign(const Vector3 &in)"); + REG_OBJ_METHOD("Vector3", "Vector3& opMulAssign(float)"); + + // Global Vector3 functions + REG_GLOBAL_FUNC("Vector3 CrossProduct(const Vector3 &in, const Vector3 &in)"); + + // ── Color (value type, 12 bytes: r, g, b as floats) ───────────────── + r = engine->RegisterObjectType("Color", 12, + asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_CDAK); + if (r < 0) fprintf(stderr, "WARN: Color type = %d\n", r); + + r = engine->RegisterObjectProperty("Color", "float r", 0); + r = engine->RegisterObjectProperty("Color", "float g", 4); + r = engine->RegisterObjectProperty("Color", "float b", 8); + + REG_OBJ_BEHAVE("Color", asBEHAVE_CONSTRUCT, "void f()"); + REG_OBJ_BEHAVE("Color", asBEHAVE_CONSTRUCT, "void f(float, float, float)"); + REG_OBJ_BEHAVE("Color", asBEHAVE_CONSTRUCT, "void f(const Color &in)"); + REG_OBJ_BEHAVE("Color", asBEHAVE_DESTRUCT, "void f()"); + + // ── Math functions ─────────────────────────────────────────────────── + REG_GLOBAL_FUNC("float sin(float)"); + REG_GLOBAL_FUNC("float cos(float)"); + REG_GLOBAL_FUNC("float sqrt(float)"); + REG_GLOBAL_FUNC("float abs(float)"); + REG_GLOBAL_FUNC("float min(float, float)"); + REG_GLOBAL_FUNC("float max(float, float)"); + + // Math constants + engine->RegisterGlobalProperty("const float PI", (void*)&g_PI); + engine->RegisterGlobalProperty("const float E", (void*)&g_E); +} + +//========================================================================== +// Step 3: CBaseEntity (ref type, nocount) — from ASEntityBindings.cpp +//========================================================================== +static void RegisterCBaseEntity(asIScriptEngine* engine) +{ + int r; + REG_OBJ_TYPE("CBaseEntity", asOBJ_REF | asOBJ_NOCOUNT); + + REG_OBJ_METHOD("CBaseEntity", "Vector3 GetOrigin()"); + REG_OBJ_METHOD("CBaseEntity", "string GetClassName()"); + REG_OBJ_METHOD("CBaseEntity", "void SetOrigin(const Vector3 &in)"); + REG_OBJ_METHOD("CBaseEntity", "float GetHealth()"); + REG_OBJ_METHOD("CBaseEntity", "void SetHealth(float)"); + REG_OBJ_METHOD("CBaseEntity", "bool IsAlive()"); + REG_OBJ_METHOD("CBaseEntity", "string DisplayName()"); + REG_OBJ_METHOD("CBaseEntity", "Vector3 Center()"); + REG_OBJ_METHOD("CBaseEntity", "float Volume()"); + REG_OBJ_METHOD("CBaseEntity", "float Weight()"); + REG_OBJ_METHOD("CBaseEntity", "bool IsPlayer()"); + REG_OBJ_METHOD("CBaseEntity", "void SetNetName(const string &in)"); + REG_OBJ_METHOD("CBaseEntity", "string GetNetName()"); + REG_OBJ_METHOD("CBaseEntity", "void SetRenderMode(int)"); + REG_OBJ_METHOD("CBaseEntity", "void SetRenderAmount(int)"); + REG_OBJ_METHOD("CBaseEntity", "void SetTakeDamage(int)"); + REG_OBJ_METHOD("CBaseEntity", "void SetGodMode(bool)"); +} + +//========================================================================== +// Step 4: CBaseAnimating, CBasePlayerItem, CBasePlayerWeapon +// (from ASItemBindings.cpp) +//========================================================================== +static void RegisterItemTypes(asIScriptEngine* engine) +{ + int r; + + // ── CBaseAnimating ────────────────────────────────────────────────── + REG_OBJ_TYPE("CBaseAnimating", asOBJ_REF | asOBJ_NOCOUNT); + REG_OBJ_METHOD("CBaseAnimating", "int LookupSequence(const string &in)"); + REG_OBJ_METHOD("CBaseAnimating", "void ResetSequenceInfo()"); + REG_OBJ_METHOD("CBaseAnimating", "void SetBodygroup(int, int)"); + REG_OBJ_METHOD("CBaseAnimating", "int GetBodygroup(int)"); + REG_OBJ_METHOD("CBaseAnimating", "float GetFrameRate() const"); + REG_OBJ_METHOD("CBaseAnimating", "bool IsSequenceFinished() const"); + REG_OBJ_METHOD("CBaseAnimating", "bool IsSequenceLooping() const"); + // Inherited CBaseEntity methods (asbind20 .base()) + REG_OBJ_METHOD("CBaseAnimating", "Vector3 GetOrigin()"); + REG_OBJ_METHOD("CBaseAnimating", "string GetClassName()"); + REG_OBJ_METHOD("CBaseAnimating", "void SetOrigin(const Vector3 &in)"); + REG_OBJ_METHOD("CBaseAnimating", "float GetHealth()"); + REG_OBJ_METHOD("CBaseAnimating", "void SetHealth(float)"); + REG_OBJ_METHOD("CBaseAnimating", "bool IsAlive()"); + REG_OBJ_METHOD("CBaseAnimating", "string DisplayName()"); + REG_OBJ_METHOD("CBaseAnimating", "Vector3 Center()"); + REG_OBJ_METHOD("CBaseAnimating", "float Volume()"); + REG_OBJ_METHOD("CBaseAnimating", "float Weight()"); + REG_OBJ_METHOD("CBaseAnimating", "bool IsPlayer()"); + REG_OBJ_METHOD("CBaseAnimating", "void SetNetName(const string &in)"); + REG_OBJ_METHOD("CBaseAnimating", "string GetNetName()"); + REG_OBJ_METHOD("CBaseAnimating", "void SetRenderMode(int)"); + REG_OBJ_METHOD("CBaseAnimating", "void SetRenderAmount(int)"); + REG_OBJ_METHOD("CBaseAnimating", "void SetTakeDamage(int)"); + REG_OBJ_METHOD("CBaseAnimating", "void SetGodMode(bool)"); + + // ── CBasePlayerItem ───────────────────────────────────────────────── + REG_OBJ_TYPE("CBasePlayerItem", asOBJ_REF | asOBJ_NOCOUNT); + REG_OBJ_METHOD("CBasePlayerItem", "string GetItemName() const"); + REG_OBJ_METHOD("CBasePlayerItem", "string GetWorldModel() const"); + REG_OBJ_METHOD("CBasePlayerItem", "string GetHandSpriteName() const"); + REG_OBJ_METHOD("CBasePlayerItem", "string GetTradeSpriteName() const"); + REG_OBJ_METHOD("CBasePlayerItem", "int GetItemID() const"); + REG_OBJ_METHOD("CBasePlayerItem", "uint GetValue() const"); + REG_OBJ_METHOD("CBasePlayerItem", "bool IsWielded() const"); + REG_OBJ_METHOD("CBasePlayerItem", "bool IsUseable() const"); + REG_OBJ_METHOD("CBasePlayerItem", "bool IsMSItem()"); + REG_OBJ_METHOD("CBasePlayerItem", "bool CanDrop()"); + REG_OBJ_METHOD("CBasePlayerItem", "bool Deploy()"); + REG_OBJ_METHOD("CBasePlayerItem", "void Holster()"); + REG_OBJ_METHOD("CBasePlayerItem", "void Materialize()"); + // Inherited from CBaseAnimating + CBaseEntity + REG_OBJ_METHOD("CBasePlayerItem", "int LookupSequence(const string &in)"); + REG_OBJ_METHOD("CBasePlayerItem", "void ResetSequenceInfo()"); + REG_OBJ_METHOD("CBasePlayerItem", "void SetBodygroup(int, int)"); + REG_OBJ_METHOD("CBasePlayerItem", "int GetBodygroup(int)"); + REG_OBJ_METHOD("CBasePlayerItem", "float GetFrameRate() const"); + REG_OBJ_METHOD("CBasePlayerItem", "bool IsSequenceFinished() const"); + REG_OBJ_METHOD("CBasePlayerItem", "bool IsSequenceLooping() const"); + REG_OBJ_METHOD("CBasePlayerItem", "Vector3 GetOrigin()"); + REG_OBJ_METHOD("CBasePlayerItem", "string GetClassName()"); + REG_OBJ_METHOD("CBasePlayerItem", "void SetOrigin(const Vector3 &in)"); + REG_OBJ_METHOD("CBasePlayerItem", "float GetHealth()"); + REG_OBJ_METHOD("CBasePlayerItem", "void SetHealth(float)"); + REG_OBJ_METHOD("CBasePlayerItem", "bool IsAlive()"); + REG_OBJ_METHOD("CBasePlayerItem", "string DisplayName()"); + REG_OBJ_METHOD("CBasePlayerItem", "Vector3 Center()"); + REG_OBJ_METHOD("CBasePlayerItem", "float Volume()"); + REG_OBJ_METHOD("CBasePlayerItem", "float Weight()"); + REG_OBJ_METHOD("CBasePlayerItem", "bool IsPlayer()"); + REG_OBJ_METHOD("CBasePlayerItem", "void SetNetName(const string &in)"); + REG_OBJ_METHOD("CBasePlayerItem", "string GetNetName()"); + REG_OBJ_METHOD("CBasePlayerItem", "void SetRenderMode(int)"); + REG_OBJ_METHOD("CBasePlayerItem", "void SetRenderAmount(int)"); + REG_OBJ_METHOD("CBasePlayerItem", "void SetTakeDamage(int)"); + REG_OBJ_METHOD("CBasePlayerItem", "void SetGodMode(bool)"); + + // ── CBasePlayerWeapon ─────────────────────────────────────────────── + REG_OBJ_TYPE("CBasePlayerWeapon", asOBJ_REF | asOBJ_NOCOUNT); + REG_OBJ_METHOD("CBasePlayerWeapon", "int GetClip() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SetClip(int)"); + REG_OBJ_METHOD("CBasePlayerWeapon", "int GetPrimaryAmmoType() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "int GetSecondaryAmmoType() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "float GetNextPrimaryAttack() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SetNextPrimaryAttack(float)"); + REG_OBJ_METHOD("CBasePlayerWeapon", "float GetNextSecondaryAttack() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SetNextSecondaryAttack(float)"); + REG_OBJ_METHOD("CBasePlayerWeapon", "float GetTimeWeaponIdle() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "bool IsInReload() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "bool CanDeploy()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "bool IsUseable()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SendWeaponAnim(int, int)"); + REG_OBJ_METHOD("CBasePlayerWeapon", "int PrimaryAmmoIndex()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "int SecondaryAmmoIndex()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "string pszAmmo1()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "string pszAmmo2()"); + // Inherited from CBasePlayerItem chain + REG_OBJ_METHOD("CBasePlayerWeapon", "string GetItemName() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "string GetWorldModel() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "string GetHandSpriteName() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "string GetTradeSpriteName() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "int GetItemID() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "uint GetValue() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "bool IsWielded() const"); + REG_OBJ_METHOD("CBasePlayerWeapon", "bool IsMSItem()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "bool CanDrop()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "bool Deploy()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void Holster()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void Materialize()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "Vector3 GetOrigin()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "string GetClassName()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SetOrigin(const Vector3 &in)"); + REG_OBJ_METHOD("CBasePlayerWeapon", "float GetHealth()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SetHealth(float)"); + REG_OBJ_METHOD("CBasePlayerWeapon", "bool IsAlive()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "string DisplayName()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "Vector3 Center()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "float Volume()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "float Weight()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "bool IsPlayer()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SetNetName(const string &in)"); + REG_OBJ_METHOD("CBasePlayerWeapon", "string GetNetName()"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SetRenderMode(int)"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SetRenderAmount(int)"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SetTakeDamage(int)"); + REG_OBJ_METHOD("CBasePlayerWeapon", "void SetGodMode(bool)"); +} + +//========================================================================== +// Step 5: Enums + CBaseMonster + CMSMonster + CBasePlayer +// (from ASMonsterBindings.cpp, ASEntityBindings.cpp) +//========================================================================== +static void RegisterMonsterEnums(asIScriptEngine* engine) +{ + int r; + // MessageColor + REG_ENUM("MessageColor"); + REG_ENUM_VAL("MessageColor", "White", 0); + REG_ENUM_VAL("MessageColor", "Gray", 1); + REG_ENUM_VAL("MessageColor", "Yellow", 2); + REG_ENUM_VAL("MessageColor", "Red", 3); + REG_ENUM_VAL("MessageColor", "Green", 4); + REG_ENUM_VAL("MessageColor", "Blue", 5); + + // Gender + REG_ENUM("Gender"); + REG_ENUM_VAL("Gender", "GENDER_MALE", 0); + REG_ENUM_VAL("Gender", "GENDER_FEMALE", 1); + REG_ENUM_VAL("Gender", "GENDER_UNKNOWN", 2); + + // SpeechType + REG_ENUM("SpeechType"); + REG_ENUM_VAL("SpeechType", "SPEECH_GLOBAL", 0); + REG_ENUM_VAL("SpeechType", "SPEECH_LOCAL", 1); + REG_ENUM_VAL("SpeechType", "SPEECH_PARTY", 2); + + // MonsterState + REG_ENUM("MonsterState"); + REG_ENUM_VAL("MonsterState", "MONSTERSTATE_NONE", 0); + REG_ENUM_VAL("MonsterState", "MONSTERSTATE_IDLE", 1); + REG_ENUM_VAL("MonsterState", "MONSTERSTATE_COMBAT", 2); + REG_ENUM_VAL("MonsterState", "MONSTERSTATE_ALERT", 3); + REG_ENUM_VAL("MonsterState", "MONSTERSTATE_HUNT", 4); + REG_ENUM_VAL("MonsterState", "MONSTERSTATE_PRONE", 5); + REG_ENUM_VAL("MonsterState", "MONSTERSTATE_SCRIPT", 6); + REG_ENUM_VAL("MonsterState", "MONSTERSTATE_PLAYDEAD", 7); + REG_ENUM_VAL("MonsterState", "MONSTERSTATE_DEAD", 8); + + // ScriptMode + REG_ENUM("ScriptMode"); + REG_ENUM_VAL("ScriptMode", "Legacy", 0); + REG_ENUM_VAL("ScriptMode", "Angel", 1); + REG_ENUM_VAL("ScriptMode", "Both", 2); +} + +static void RegisterCBaseMonster(asIScriptEngine* engine) +{ + int r; + REG_OBJ_TYPE("CBaseMonster", asOBJ_REF | asOBJ_NOCOUNT); + + // Properties + REG_OBJ_METHOD("CBaseMonster", "float get_m_flFieldOfView() const"); // fallback: use method style + // Direct properties registered via asbind20 .property() in real code — we use dummy offsets + // Since we use NOCOUNT and can't register real properties on opaque types, + // we register them as getter/setter methods instead. + // The transpiled scripts shouldn't access these directly though. + + // Complex property accessors + REG_OBJ_METHOD("CBaseMonster", "CBaseEntity@ get_Enemy() const"); + REG_OBJ_METHOD("CBaseMonster", "void set_Enemy(CBaseEntity@)"); + REG_OBJ_METHOD("CBaseMonster", "CBaseEntity@ get_TargetEnt() const"); + REG_OBJ_METHOD("CBaseMonster", "void set_TargetEnt(CBaseEntity@)"); + REG_OBJ_METHOD("CBaseMonster", "Vector3 get_EnemyLKP() const"); + REG_OBJ_METHOD("CBaseMonster", "void set_EnemyLKP(const Vector3 &in)"); + + // Methods + REG_OBJ_METHOD("CBaseMonster", "int BloodColor()"); + REG_OBJ_METHOD("CBaseMonster", "void Look(int)"); + REG_OBJ_METHOD("CBaseMonster", "void RunAI()"); + REG_OBJ_METHOD("CBaseMonster", "bool IsAlive()"); + REG_OBJ_METHOD("CBaseMonster", "void MonsterThink()"); + REG_OBJ_METHOD("CBaseMonster", "int IRelationship(CBaseEntity@)"); + REG_OBJ_METHOD("CBaseMonster", "void MonsterInit()"); + REG_OBJ_METHOD("CBaseMonster", "void StartMonster()"); + REG_OBJ_METHOD("CBaseMonster", "CBaseEntity@ BestVisibleEnemy()"); + REG_OBJ_METHOD("CBaseMonster", "bool FInViewCone(CBaseEntity@)"); + REG_OBJ_METHOD("CBaseMonster", "bool FInViewCone(const Vector3 &in)"); + REG_OBJ_METHOD("CBaseMonster", "void SetState(int)"); + REG_OBJ_METHOD("CBaseMonster", "void ReportAIState()"); + REG_OBJ_METHOD("CBaseMonster", "int CheckEnemy(CBaseEntity@)"); + REG_OBJ_METHOD("CBaseMonster", "void PushEnemy(CBaseEntity@, const Vector3 &in)"); + REG_OBJ_METHOD("CBaseMonster", "bool PopEnemy()"); + REG_OBJ_METHOD("CBaseMonster", "void ClearSchedule()"); + REG_OBJ_METHOD("CBaseMonster", "float ChangeYaw(int)"); + REG_OBJ_METHOD("CBaseMonster", "bool FacingIdeal()"); + REG_OBJ_METHOD("CBaseMonster", "Vector3 BodyTarget(const Vector3 &in)"); + REG_OBJ_METHOD("CBaseMonster", "void SetConditions(int)"); + REG_OBJ_METHOD("CBaseMonster", "void ClearConditions(int)"); + REG_OBJ_METHOD("CBaseMonster", "bool HasConditions(int)"); + REG_OBJ_METHOD("CBaseMonster", "bool HasAllConditions(int)"); + REG_OBJ_METHOD("CBaseMonster", "void Remember(int)"); + REG_OBJ_METHOD("CBaseMonster", "void Forget(int)"); + REG_OBJ_METHOD("CBaseMonster", "bool HasMemory(int)"); + REG_OBJ_METHOD("CBaseMonster", "bool HasAllMemories(int)"); + REG_OBJ_METHOD("CBaseMonster", "void TaskComplete()"); + REG_OBJ_METHOD("CBaseMonster", "void TaskFail()"); + REG_OBJ_METHOD("CBaseMonster", "void TaskBegin()"); + REG_OBJ_METHOD("CBaseMonster", "bool IsMoving()"); + REG_OBJ_METHOD("CBaseMonster", "void Stop()"); + + // Inherited CBaseEntity methods + REG_OBJ_METHOD("CBaseMonster", "Vector3 GetOrigin()"); + REG_OBJ_METHOD("CBaseMonster", "string GetClassName()"); + REG_OBJ_METHOD("CBaseMonster", "void SetOrigin(const Vector3 &in)"); + REG_OBJ_METHOD("CBaseMonster", "float GetHealth()"); + REG_OBJ_METHOD("CBaseMonster", "void SetHealth(float)"); + REG_OBJ_METHOD("CBaseMonster", "string DisplayName()"); + REG_OBJ_METHOD("CBaseMonster", "Vector3 Center()"); + REG_OBJ_METHOD("CBaseMonster", "float Volume()"); + REG_OBJ_METHOD("CBaseMonster", "float Weight()"); + REG_OBJ_METHOD("CBaseMonster", "bool IsPlayer()"); + REG_OBJ_METHOD("CBaseMonster", "void SetNetName(const string &in)"); + REG_OBJ_METHOD("CBaseMonster", "string GetNetName()"); + REG_OBJ_METHOD("CBaseMonster", "void SetRenderMode(int)"); + REG_OBJ_METHOD("CBaseMonster", "void SetRenderAmount(int)"); + REG_OBJ_METHOD("CBaseMonster", "void SetTakeDamage(int)"); + REG_OBJ_METHOD("CBaseMonster", "void SetGodMode(bool)"); +} + +static void RegisterCMSMonster(asIScriptEngine* engine) +{ + int r; + REG_OBJ_TYPE("CMSMonster", asOBJ_REF | asOBJ_NOCOUNT); + + // Property accessors (msstring types) + REG_OBJ_METHOD("CMSMonster", "string get_Title()"); + REG_OBJ_METHOD("CMSMonster", "void set_Title(const string &in)"); + REG_OBJ_METHOD("CMSMonster", "string get_ScriptName()"); + REG_OBJ_METHOD("CMSMonster", "void set_ScriptName(const string &in)"); + + // Lifecycle + REG_OBJ_METHOD("CMSMonster", "bool IsMSMonster()"); + REG_OBJ_METHOD("CMSMonster", "float MaxHP()"); + REG_OBJ_METHOD("CMSMonster", "float MaxMP()"); + REG_OBJ_METHOD("CMSMonster", "bool IsAlive()"); + + // Economy + REG_OBJ_METHOD("CMSMonster", "int GiveGold(int, bool)"); + REG_OBJ_METHOD("CMSMonster", "int GiveGold(int)"); + REG_OBJ_METHOD("CMSMonster", "float GiveHP(float)"); + REG_OBJ_METHOD("CMSMonster", "float GiveMP(float)"); + + // Stats + REG_OBJ_METHOD("CMSMonster", "int GetNatStat(int)"); + REG_OBJ_METHOD("CMSMonster", "int GetSkillStat(int)"); + REG_OBJ_METHOD("CMSMonster", "int GetSkillStatCount()"); + + // Movement + REG_OBJ_METHOD("CMSMonster", "float WalkSpeed()"); + REG_OBJ_METHOD("CMSMonster", "float RunSpeed()"); + REG_OBJ_METHOD("CMSMonster", "bool IsFlying()"); + + // Combat + REG_OBJ_METHOD("CMSMonster", "bool IsActing()"); + REG_OBJ_METHOD("CMSMonster", "bool IsShielding()"); + REG_OBJ_METHOD("CMSMonster", "void CancelAttack()"); + + // Misc + REG_OBJ_METHOD("CMSMonster", "float Weight()"); + REG_OBJ_METHOD("CMSMonster", "void SetSpeed()"); + + // Inherited CBaseMonster methods + REG_OBJ_METHOD("CMSMonster", "CBaseEntity@ get_Enemy() const"); + REG_OBJ_METHOD("CMSMonster", "void set_Enemy(CBaseEntity@)"); + REG_OBJ_METHOD("CMSMonster", "CBaseEntity@ get_TargetEnt() const"); + REG_OBJ_METHOD("CMSMonster", "void set_TargetEnt(CBaseEntity@)"); + REG_OBJ_METHOD("CMSMonster", "Vector3 get_EnemyLKP() const"); + REG_OBJ_METHOD("CMSMonster", "void set_EnemyLKP(const Vector3 &in)"); + REG_OBJ_METHOD("CMSMonster", "int BloodColor()"); + REG_OBJ_METHOD("CMSMonster", "void Look(int)"); + REG_OBJ_METHOD("CMSMonster", "void RunAI()"); + REG_OBJ_METHOD("CMSMonster", "void MonsterThink()"); + REG_OBJ_METHOD("CMSMonster", "int IRelationship(CBaseEntity@)"); + REG_OBJ_METHOD("CMSMonster", "void MonsterInit()"); + REG_OBJ_METHOD("CMSMonster", "void StartMonster()"); + REG_OBJ_METHOD("CMSMonster", "CBaseEntity@ BestVisibleEnemy()"); + REG_OBJ_METHOD("CMSMonster", "bool FInViewCone(CBaseEntity@)"); + REG_OBJ_METHOD("CMSMonster", "bool FInViewCone(const Vector3 &in)"); + REG_OBJ_METHOD("CMSMonster", "void SetState(int)"); + REG_OBJ_METHOD("CMSMonster", "void ReportAIState()"); + REG_OBJ_METHOD("CMSMonster", "int CheckEnemy(CBaseEntity@)"); + REG_OBJ_METHOD("CMSMonster", "void PushEnemy(CBaseEntity@, const Vector3 &in)"); + REG_OBJ_METHOD("CMSMonster", "bool PopEnemy()"); + REG_OBJ_METHOD("CMSMonster", "void ClearSchedule()"); + REG_OBJ_METHOD("CMSMonster", "float ChangeYaw(int)"); + REG_OBJ_METHOD("CMSMonster", "bool FacingIdeal()"); + REG_OBJ_METHOD("CMSMonster", "Vector3 BodyTarget(const Vector3 &in)"); + REG_OBJ_METHOD("CMSMonster", "void SetConditions(int)"); + REG_OBJ_METHOD("CMSMonster", "void ClearConditions(int)"); + REG_OBJ_METHOD("CMSMonster", "bool HasConditions(int)"); + REG_OBJ_METHOD("CMSMonster", "bool HasAllConditions(int)"); + REG_OBJ_METHOD("CMSMonster", "void Remember(int)"); + REG_OBJ_METHOD("CMSMonster", "void Forget(int)"); + REG_OBJ_METHOD("CMSMonster", "bool HasMemory(int)"); + REG_OBJ_METHOD("CMSMonster", "bool HasAllMemories(int)"); + REG_OBJ_METHOD("CMSMonster", "void TaskComplete()"); + REG_OBJ_METHOD("CMSMonster", "void TaskFail()"); + REG_OBJ_METHOD("CMSMonster", "void TaskBegin()"); + REG_OBJ_METHOD("CMSMonster", "bool IsMoving()"); + REG_OBJ_METHOD("CMSMonster", "void Stop()"); + // Inherited CBaseEntity + REG_OBJ_METHOD("CMSMonster", "Vector3 GetOrigin()"); + REG_OBJ_METHOD("CMSMonster", "string GetClassName()"); + REG_OBJ_METHOD("CMSMonster", "void SetOrigin(const Vector3 &in)"); + REG_OBJ_METHOD("CMSMonster", "float GetHealth()"); + REG_OBJ_METHOD("CMSMonster", "void SetHealth(float)"); + REG_OBJ_METHOD("CMSMonster", "string DisplayName()"); + REG_OBJ_METHOD("CMSMonster", "Vector3 Center()"); + REG_OBJ_METHOD("CMSMonster", "float Volume()"); + REG_OBJ_METHOD("CMSMonster", "bool IsPlayer()"); + REG_OBJ_METHOD("CMSMonster", "void SetNetName(const string &in)"); + REG_OBJ_METHOD("CMSMonster", "string GetNetName()"); + REG_OBJ_METHOD("CMSMonster", "void SetRenderMode(int)"); + REG_OBJ_METHOD("CMSMonster", "void SetRenderAmount(int)"); + REG_OBJ_METHOD("CMSMonster", "void SetTakeDamage(int)"); + REG_OBJ_METHOD("CMSMonster", "void SetGodMode(bool)"); +} + +static void RegisterCBasePlayer(asIScriptEngine* engine) +{ + int r; + REG_OBJ_TYPE("CBasePlayer", asOBJ_REF | asOBJ_NOCOUNT); + + // Identification + REG_OBJ_METHOD("CBasePlayer", "string DisplayName() const"); + REG_OBJ_METHOD("CBasePlayer", "string GetName() const"); + REG_OBJ_METHOD("CBasePlayer", "int GetEntIndex() const"); + + // State + REG_OBJ_METHOD("CBasePlayer", "bool IsConnected() const"); + REG_OBJ_METHOD("CBasePlayer", "bool IsAlive() const"); + REG_OBJ_METHOD("CBasePlayer", "bool IsAdmin() const"); + + // Position / health + REG_OBJ_METHOD("CBasePlayer", "Vector3 GetOrigin() const"); + REG_OBJ_METHOD("CBasePlayer", "float GetHealth() const"); + + // MS-specific + REG_OBJ_METHOD("CBasePlayer", "string GetTitle() const"); + REG_OBJ_METHOD("CBasePlayer", "float MaxHP() const"); + REG_OBJ_METHOD("CBasePlayer", "float MaxMP() const"); + REG_OBJ_METHOD("CBasePlayer", "bool IsElite() const"); + REG_OBJ_METHOD("CBasePlayer", "string GetPartyName() const"); + REG_OBJ_METHOD("CBasePlayer", "bool IsLocalHost() const"); + REG_OBJ_METHOD("CBasePlayer", "string GetSteamID() const"); + + // Inherited CBaseEntity + REG_OBJ_METHOD("CBasePlayer", "string GetClassName() const"); + REG_OBJ_METHOD("CBasePlayer", "void SetOrigin(const Vector3 &in)"); + REG_OBJ_METHOD("CBasePlayer", "void SetHealth(float)"); + REG_OBJ_METHOD("CBasePlayer", "Vector3 Center() const"); + REG_OBJ_METHOD("CBasePlayer", "float Volume() const"); + REG_OBJ_METHOD("CBasePlayer", "float Weight() const"); + REG_OBJ_METHOD("CBasePlayer", "bool IsPlayer() const"); + + // Sound / messaging + REG_OBJ_METHOD("CBasePlayer", "void PlaySound(const string &in)"); + REG_OBJ_METHOD("CBasePlayer", "void SendInfoMsg(const string &in)"); + REG_OBJ_METHOD("CBasePlayer", "void SendEventMsg(const string &in)"); + REG_OBJ_METHOD("CBasePlayer", "void SendColoredMessage(MessageColor, const string &in)"); + REG_OBJ_METHOD("CBasePlayer", "void SendHUDInfoMessage(const string &in, const string &in)"); + + // Map transition + REG_OBJ_METHOD("CBasePlayer", "void SetTransitionFields(const string &in, const string &in, const string &in)"); + REG_OBJ_METHOD("CBasePlayer", "string GetOldTransition() const"); + REG_OBJ_METHOD("CBasePlayer", "string GetNextMap() const"); + REG_OBJ_METHOD("CBasePlayer", "string GetNextTransition() const"); + REG_OBJ_METHOD("CBasePlayer", "int GetJoinType() const"); + REG_OBJ_METHOD("CBasePlayer", "void SetJoinType(int)"); + REG_OBJ_METHOD("CBasePlayer", "bool MoveToSpawnSpot()"); + REG_OBJ_METHOD("CBasePlayer", "void SetSpawnTransition(const string &in)"); + REG_OBJ_METHOD("CBasePlayer", "string GetSpawnTransition() const"); + + // Inventory + REG_OBJ_METHOD("CBasePlayer", "CBasePlayerItem@ GetItemBySlot(int) const"); + REG_OBJ_METHOD("CBasePlayer", "CBasePlayerWeapon@ GetActiveWeapon() const"); + REG_OBJ_METHOD("CBasePlayer", "array@ GetInventory()"); + REG_OBJ_METHOD("CBasePlayer", "bool HasItem(const string &in) const"); + + // Equality + REG_OBJ_METHOD("CBasePlayer", "bool opEquals(const CBasePlayer@ other) const"); +} + +//========================================================================== +// Step 6: Cross-references (CBasePlayerItem::GetOwnerPlayer etc.) +//========================================================================== +static void RegisterCrossReferences(asIScriptEngine* engine) +{ + int r; + REG_OBJ_METHOD("CBasePlayerItem", "CBasePlayer@ GetOwnerPlayer() const"); + // Also register GetOwnerMonster which exists in the real code + REG_OBJ_METHOD("CBasePlayerItem", "CMSMonster@ GetOwnerMonster() const"); +} + +//========================================================================== +// Step 7: Builtin functions (from ASBuiltinFunctions.cpp + ASEngineBindings.h +// + ASEntityBindings.cpp) +//========================================================================== +static void RegisterBuiltinFunctions(asIScriptEngine* engine) +{ + int r; + + // === Math (integer overloads from ASBuiltinFunctions) === + REG_GLOBAL_FUNC("int abs(int)"); + REG_GLOBAL_FUNC("int min(int, int)"); + REG_GLOBAL_FUNC("int max(int, int)"); + + // === Vector utilities === + REG_GLOBAL_FUNC("Vector3 CreateVector(float, float, float)"); + REG_GLOBAL_FUNC("float GetVectorX(const Vector3 &in)"); + REG_GLOBAL_FUNC("float GetVectorY(const Vector3 &in)"); + REG_GLOBAL_FUNC("float GetVectorZ(const Vector3 &in)"); + REG_GLOBAL_FUNC("float Distance(const Vector3 &in, const Vector3 &in)"); + REG_GLOBAL_FUNC("float DotProduct(const Vector3 &in, const Vector3 &in)"); + + // === String utilities === + REG_GLOBAL_FUNC("string formatFloat(float, const string &in, int, int)"); + REG_GLOBAL_FUNC("array@ split(const string &in, const string &in)"); + + // === Random === + REG_GLOBAL_FUNC("float Random(float, float)"); + REG_GLOBAL_FUNC("int RandomInt(int, int)"); + + // === Logging === + REG_GLOBAL_FUNC("void LogMessage(const string &in)"); + REG_GLOBAL_FUNC("void DeveloperMessage(int, const string &in)"); + REG_GLOBAL_FUNC("void MS_ANGEL_INFO(const string &in)"); + REG_GLOBAL_FUNC("void MS_ANGEL_DEBUG(const string &in)"); + REG_GLOBAL_FUNC("void MS_ANGEL_ERROR(const string &in)"); + + // === Angle functions === + REG_GLOBAL_FUNC("Vector3 CreateAngles(float, float, float)"); + REG_GLOBAL_FUNC("float GetAnglePitch(const Vector3 &in)"); + REG_GLOBAL_FUNC("float GetAngleYaw(const Vector3 &in)"); + REG_GLOBAL_FUNC("float GetAngleRoll(const Vector3 &in)"); + + // === Game state (ASEngineBindings.h) === + REG_GLOBAL_FUNC("float GetGameTime()"); + REG_GLOBAL_FUNC("string GetCvar(const string &in)"); + REG_GLOBAL_FUNC("string GetMapName()"); + REG_GLOBAL_FUNC("int GetMaxClients()"); + + // === Entity management (ASEngineBindings.h) === + REG_GLOBAL_FUNC("CBaseEntity@ CreateEntity(const string &in)"); + REG_GLOBAL_FUNC("void SetEntityOrigin(CBaseEntity@, const Vector3 &in)"); + REG_GLOBAL_FUNC("void SetEntityName(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void SetEntityTargetName(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void SetEntityHealth(CBaseEntity@, float)"); + REG_GLOBAL_FUNC("Vector3 GetEntityOrigin(CBaseEntity@)"); + REG_GLOBAL_FUNC("float GetEntityHealth(CBaseEntity@)"); + REG_GLOBAL_FUNC("int GetEntityDeadFlag(CBaseEntity@)"); + REG_GLOBAL_FUNC("string GetEntityClassName(CBaseEntity@)"); + REG_GLOBAL_FUNC("bool IsEntityDead(CBaseEntity@)"); + REG_GLOBAL_FUNC("bool IsEntityAlive(CBaseEntity@)"); + REG_GLOBAL_FUNC("bool IsValidEntity(CBaseEntity@)"); + + // === Player functions (ASEngineBindings.h + ASEntityBindings.cpp) === + REG_GLOBAL_FUNC("string GetPlayerAuthId(CBasePlayer@)"); + REG_GLOBAL_FUNC("string GetPlayerDisplayName(CBasePlayer@)"); + REG_GLOBAL_FUNC("string GetPlayerClientAddress(CBasePlayer@)"); + REG_GLOBAL_FUNC("int GetPlayerEntIndex(CBasePlayer@)"); + REG_GLOBAL_FUNC("bool IsValidPlayer(CBasePlayer@)"); + REG_GLOBAL_FUNC("void SendPlayerMessage(CBasePlayer@, const string &in)"); + + // === Convenience (ASEngineBindings.h) === + REG_GLOBAL_FUNC("bool TeleportEntity(CBaseEntity@, const Vector3 &in)"); + REG_GLOBAL_FUNC("void HealEntity(CBaseEntity@, float)"); + REG_GLOBAL_FUNC("void DamageEntity(CBaseEntity@, float)"); + REG_GLOBAL_FUNC("void KillEntity(CBaseEntity@)"); + REG_GLOBAL_FUNC("Vector3 GetPlayerPosition(CBasePlayer@)"); + REG_GLOBAL_FUNC("bool TeleportPlayer(CBasePlayer@, const Vector3 &in)"); + + // === Sound === + REG_GLOBAL_FUNC("void EmitSound(CBaseEntity@, int, const string &in, float, float, int, int)"); + REG_GLOBAL_FUNC("void EmitSound(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void EmitSound(CBaseEntity@, const string &in, float)"); + + // === Entity global functions (ASEntityBindings.cpp RegisterGlobalFunctions) === + REG_GLOBAL_FUNC("string GetTimestamp()"); + REG_GLOBAL_FUNC("void ChatLog(const string &in)"); + REG_GLOBAL_FUNC("string GetPlayerCurrentMap()"); + REG_GLOBAL_FUNC("int GetCurrentPlayerID()"); + REG_GLOBAL_FUNC("void SendPlayerMessage(const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("array@ GetAllPlayers()"); + REG_GLOBAL_FUNC("int GetPlayerCount()"); + REG_GLOBAL_FUNC("CBasePlayer@ PlayerByIndex(int)"); + REG_GLOBAL_FUNC("CBasePlayer@ PlayerBySteamID(const string &in)"); + REG_GLOBAL_FUNC("bool IsConnected(CBasePlayer@)"); + REG_GLOBAL_FUNC("string GetDisplayName(CBasePlayer@)"); + REG_GLOBAL_FUNC("string GetSteamID(CBasePlayer@)"); + REG_GLOBAL_FUNC("string GetPlayerSteamID(CBasePlayer@)"); + REG_GLOBAL_FUNC("bool IsAdmin(CBasePlayer@)"); + REG_GLOBAL_FUNC("string GetClientAddress(CBasePlayer@)"); + REG_GLOBAL_FUNC("string GetPlayerQuestData(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SetPlayerQuestData(const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void OpenVoteMenu(CBasePlayer@, const string &in, const array &in)"); + REG_GLOBAL_FUNC("CMSMonster@ SpawnNPC(const string &in, const Vector3 &in, const array@ = null, ScriptMode = Legacy)"); + REG_GLOBAL_FUNC("CBasePlayerItem@ SpawnItem(const string &in, const Vector3 &in, const array@ = null)"); + + // === Casting functions (ASEntityBindings + ASMonsterBindings) === + REG_GLOBAL_FUNC("CBaseEntity@ ToEntity(CBasePlayer@)"); + REG_GLOBAL_FUNC("CBasePlayer@ ToPlayer(CBaseEntity@)"); + REG_GLOBAL_FUNC("CBaseEntity@ StringToEntity(const string &in)"); + REG_GLOBAL_FUNC("CBasePlayer@ StringToPlayer(const string &in)"); + REG_GLOBAL_FUNC("CBaseMonster@ ToMonster(CBaseEntity@)"); + REG_GLOBAL_FUNC("CMSMonster@ ToMSMonster(CBaseEntity@)"); + REG_GLOBAL_FUNC("CMSMonster@ ToMSMonster(CBaseMonster@)"); + REG_GLOBAL_FUNC("CBaseEntity@ ToEntity(CBaseMonster@)"); + REG_GLOBAL_FUNC("CBaseEntity@ ToEntity(CMSMonster@)"); + + // === Render / damage constants === + engine->RegisterGlobalProperty("const int kRenderNormal", (void*)&g_kRenderNormal); + engine->RegisterGlobalProperty("const int kRenderTransColor", (void*)&g_kRenderTransColor); + engine->RegisterGlobalProperty("const int kRenderTransTexture", (void*)&g_kRenderTransTexture); + engine->RegisterGlobalProperty("const int kRenderGlow", (void*)&g_kRenderGlow); + engine->RegisterGlobalProperty("const int kRenderTransAlpha", (void*)&g_kRenderTransAlpha); + engine->RegisterGlobalProperty("const int kRenderTransAdd", (void*)&g_kRenderTransAdd); + engine->RegisterGlobalProperty("const int DAMAGE_NO", (void*)&g_DAMAGE_NO); + engine->RegisterGlobalProperty("const int DAMAGE_YES", (void*)&g_DAMAGE_YES); + engine->RegisterGlobalProperty("const int DAMAGE_AIM", (void*)&g_DAMAGE_AIM); + + // === GameMaster functions (ASBuiltinFunctions.cpp RegisterGameMasterFunctions) === + REG_GLOBAL_FUNC("void ExecuteServerCommand(const string &in)"); + REG_GLOBAL_FUNC("bool EngineMapExists(const string &in)"); + REG_GLOBAL_FUNC("void SendPlayerMessage(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SendConsoleMessage(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SendInfoMessageToAll(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SendMessageToAllPlayers(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void CallPlayerExternal(const string &in, const string &in, array@)"); + REG_GLOBAL_FUNC("void CallGameMasterExternal(const string &in, array@)"); + REG_GLOBAL_FUNC("bool MovePlayerToRandomSpawn(CBasePlayer@, float)"); + + // Advanced systems + REG_GLOBAL_FUNC("void InitializeAdvancedTriggerSystem()"); + REG_GLOBAL_FUNC("void InitializeHPSequenceTrigger()"); + REG_GLOBAL_FUNC("void InitializeEntitySpawner()"); + REG_GLOBAL_FUNC("void InitializeEntityCommunications()"); + REG_GLOBAL_FUNC("void ShutdownAdvancedTriggerSystem()"); + REG_GLOBAL_FUNC("void ShutdownHPSequenceTrigger()"); + REG_GLOBAL_FUNC("void ShutdownEntitySpawner()"); + REG_GLOBAL_FUNC("void ShutdownEntityCommunications()"); + REG_GLOBAL_FUNC("bool IsAdvancedTriggerSystemActive()"); + REG_GLOBAL_FUNC("bool IsHPSequenceSystemActive()"); + REG_GLOBAL_FUNC("bool IsEntitySpawnerActive()"); + REG_GLOBAL_FUNC("bool IsEntityCommSystemActive()"); + REG_GLOBAL_FUNC("int GetActiveTriggersCount()"); + REG_GLOBAL_FUNC("int GetActiveSequencesCount()"); +} + +//========================================================================== +// Step 8: CGameScript (from ASScriptClasses.cpp) +//========================================================================== +static void RegisterScriptClasses(asIScriptEngine* engine) +{ + // CGameScript is NOT registered as a native type here. + // It is injected as a script-defined class (from linter_base_script.h) + // into each module so that transpiled scripts can inherit from it. + // See main.cpp: the base script is added as a section before each file. + (void)engine; +} + +//========================================================================== +// Step 9: Coroutines (from ASCoroutines.cpp) +//========================================================================== +static void RegisterCoroutines(asIScriptEngine* engine) +{ + int r; + REG_GLOBAL_FUNC("int StartCoroutine(const string &in)"); + REG_GLOBAL_FUNC("void StopCoroutine(int)"); + REG_GLOBAL_FUNC("void DelaySeconds(float)"); + REG_GLOBAL_FUNC("void YieldFrame()"); + REG_GLOBAL_FUNC("bool IsCoroutineRunning(int)"); +} + +//========================================================================== +// Step 11: Module system (from ASModuleSystem.cpp) +//========================================================================== +static void RegisterModuleSystem(asIScriptEngine* engine) +{ + int r; + REG_GLOBAL_FUNC("bool LoadASModule(const string &in)"); + REG_GLOBAL_FUNC("bool UnloadModule(const string &in)"); + REG_GLOBAL_FUNC("bool ReloadModule(const string &in)"); + REG_GLOBAL_FUNC("bool HasModule(const string &in)"); + REG_GLOBAL_FUNC("bool ReloadAllScriptModules()"); + REG_GLOBAL_FUNC("bool ImportModule(const string &in)"); + REG_GLOBAL_FUNC("bool ImportModule(const string &in, const string &in)"); +} + +//========================================================================== +// Step 12: Engine events (from ASEngineEventManager.cpp) +//========================================================================== +static void RegisterEngineEvents(asIScriptEngine* engine) +{ + int r; + // RegisterEngineEvent uses asCALL_GENERIC with ?&in (generic type parameter) + // We register it directly since the macro uses asCALL_GENERIC anyway + r = engine->RegisterGlobalFunction("void RegisterEngineEvent(const string &in, ?&in)", + asFUNCTION(DummyGeneric), asCALL_GENERIC); + if (r < 0) fprintf(stderr, "WARN: RegisterEngineEvent = %d\n", r); + REG_GLOBAL_FUNC("void UnregisterEngineEvent(const string &in)"); + REG_GLOBAL_FUNC("void LogEngineEventHandlers()"); +} + +//========================================================================== +// Step 13: Transpiler-emitted global functions +// +// These are functions that MSCScript commands translate into. In the real +// game they are either methods on CScriptedEnt or global helpers. For the +// linter they need to be registered as global functions so the AS compiler +// can resolve them in transpiled scripts (which call them on 'this' via +// CGameScript base class methods, or as free functions). +//========================================================================== +static void RegisterTranspilerFunctions(asIScriptEngine* engine) +{ + int r; + + // ── ClientEffect (variadic — register multiple overloads) ──── + // Most common: ClientEffect("type", "subtype", "param", ...) + REG_GLOBAL_FUNC("void ClientEffect(const string &in)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, Vector3)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, Vector3, const string &in)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, Vector3, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, float)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, int)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, const string &in, float)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, const string &in, int)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, const string &in, Vector3)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, const string &in, const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEffect(const string &in, const string &in, const string &in, const string &in, const string &in, const string &in, const string &in, const string &in)"); + + // ── ScheduleDelayedEvent ───────────────────────────────────── + REG_GLOBAL_FUNC("void ScheduleDelayedEvent(float, const string &in)"); + REG_GLOBAL_FUNC("void ScheduleDelayedEvent(int, const string &in)"); + REG_GLOBAL_FUNC("void ScheduleDelayedEvent(float, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ScheduleDelayedEvent(float, const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ScheduleDelayedEvent(float, const string &in, const string &in, const string &in, const string &in)"); + + // ── SayText ────────────────────────────────────────────────── + REG_GLOBAL_FUNC("void SayText(const string &in)"); + REG_GLOBAL_FUNC("void SayText(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void SayText(const string &in, const string &in)"); + + // ── Say ────────────────────────────────────────────────────── + REG_GLOBAL_FUNC("void Say(const string &in)"); + REG_GLOBAL_FUNC("void Say(CBaseEntity@, const string &in)"); + + // ── SetProp ────────────────────────────────────────────────── + REG_GLOBAL_FUNC("void SetProp(CBaseEntity@, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SetProp(CBaseEntity@, const string &in, float)"); + REG_GLOBAL_FUNC("void SetProp(CBaseEntity@, const string &in, int)"); + REG_GLOBAL_FUNC("void SetProp(const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SetProp(const string &in, const string &in)"); + + // ── CallExternal ───────────────────────────────────────────── + REG_GLOBAL_FUNC("void CallExternal(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void CallExternal(CBaseEntity@, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void CallExternal(CBaseEntity@, const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void CallExternal(CBaseEntity@, const string &in, const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void CallExternal(CBaseEntity@, const string &in, const string &in, const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void CallExternal(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void CallExternal(const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void CallExternal(const string &in, const string &in, const string &in, const string &in)"); + + // ── Precache ───────────────────────────────────────────────── + REG_GLOBAL_FUNC("void Precache(const string &in)"); + REG_GLOBAL_FUNC("void PrecacheFile(const string &in)"); + + // ── CatchSpeech ────────────────────────────────────────────── + REG_GLOBAL_FUNC("void CatchSpeech(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void CatchSpeech(const string &in, const string &in, const string &in)"); + + // ── DeleteEntity ───────────────────────────────────────────── + REG_GLOBAL_FUNC("void DeleteEntity(CBaseEntity@)"); + REG_GLOBAL_FUNC("void DeleteEntity(CBaseEntity@, bool)"); + REG_GLOBAL_FUNC("void DeleteEntity(const string &in)"); + + // ── LogDebug ───────────────────────────────────────────────── + REG_GLOBAL_FUNC("void LogDebug(const string &in)"); + REG_GLOBAL_FUNC("void LogInfo(const string &in)"); + REG_GLOBAL_FUNC("void LogWarning(const string &in)"); + REG_GLOBAL_FUNC("void LogError(const string &in)"); + + // ── Token functions ────────────────────────────────────────── + REG_GLOBAL_FUNC("int GetTokenCount(const string &in, const string &in)"); + REG_GLOBAL_FUNC("int GetTokenCount(const string &in)"); + REG_GLOBAL_FUNC("string GetToken(const string &in, int, const string &in)"); + REG_GLOBAL_FUNC("string GetToken(const string &in, int)"); + + // ── UseTrigger ─────────────────────────────────────────────── + REG_GLOBAL_FUNC("void UseTrigger(const string &in)"); + REG_GLOBAL_FUNC("void UseTrigger(CBaseEntity@)"); + + // ── ClientEvent ────────────────────────────────────────────── + REG_GLOBAL_FUNC("void ClientEvent(const string &in)"); + REG_GLOBAL_FUNC("void ClientEvent(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEvent(const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEvent(const string &in, const string &in, const string &in, Vector3)"); + REG_GLOBAL_FUNC("void ClientEvent(const string &in, const string &in, const string &in, Vector3, const string &in)"); + REG_GLOBAL_FUNC("void ClientEvent(const string &in, const string &in, const string &in, Vector3, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEvent(const string &in, const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ClientEvent(const string &in, const string &in, const string &in, const string &in, const string &in)"); + + // ── EmitSound3D ────────────────────────────────────────────── + REG_GLOBAL_FUNC("void EmitSound3D(const string &in, Vector3, float)"); + REG_GLOBAL_FUNC("void EmitSound3D(const string &in, Vector3)"); + REG_GLOBAL_FUNC("void EmitSound3D(CBaseEntity@, const string &in, float)"); + REG_GLOBAL_FUNC("void EmitSound3D(CBaseEntity@, int, const string &in, float)"); + REG_GLOBAL_FUNC("void EmitSound3D(CBaseEntity@, const string &in)"); + // EmitSound overloads with int channel (transpiled scripts use these) + REG_GLOBAL_FUNC("void EmitSound(CBaseEntity@, int, const string &in, float)"); + REG_GLOBAL_FUNC("void EmitSound(CBaseEntity@, int, const string &in, int)"); + + // ── Entity property access ─────────────────────────────────── + REG_GLOBAL_FUNC("int GetEntityIndex(CBaseEntity@)"); + REG_GLOBAL_FUNC("string GetEntityProperty(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("string GetEntityProperty(const string &in, const string &in)"); + REG_GLOBAL_FUNC("string GetEntityName(CBaseEntity@)"); + REG_GLOBAL_FUNC("string GetEntityRace(CBaseEntity@)"); + REG_GLOBAL_FUNC("string GetEntityRace(const string &in)"); + + // ── Effect ─────────────────────────────────────────────────── + REG_GLOBAL_FUNC("void Effect(const string &in)"); + REG_GLOBAL_FUNC("void Effect(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void Effect(const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void Effect(const string &in, const string &in, const string &in, const string &in)"); + + // ── ApplyEffect ────────────────────────────────────────────── + REG_GLOBAL_FUNC("void ApplyEffect(CBaseEntity@, const string &in, float)"); + REG_GLOBAL_FUNC("void ApplyEffect(CBaseEntity@, const string &in, float, CBaseEntity@)"); + REG_GLOBAL_FUNC("void ApplyEffect(CBaseEntity@, const string &in, float, CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void ApplyEffect(CBaseEntity@, const string &in, float, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ApplyEffect(const string &in, const string &in, float, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void ApplyEffect(const string &in, const string &in, float)"); + + // ── Store commands ─────────────────────────────────────────── + REG_GLOBAL_FUNC("void AddStoreItem(const string &in)"); + REG_GLOBAL_FUNC("void AddStoreItem(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void AddStoreItem(const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void CreateStore(const string &in)"); + REG_GLOBAL_FUNC("void OfferStore(CBaseEntity@)"); + + // ── FindEntity functions ───────────────────────────────────── + REG_GLOBAL_FUNC("CBaseEntity@ FindEntityByName(const string &in)"); + REG_GLOBAL_FUNC("string FindEntitiesInSphere(const string &in, float)"); + REG_GLOBAL_FUNC("string FindEntitiesInSphere(const string &in, int)"); + + // ── SetGlobalVar ───────────────────────────────────────────── + REG_GLOBAL_FUNC("void SetGlobalVar(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SetGlobalVar(const string &in, float)"); + REG_GLOBAL_FUNC("void SetGlobalVar(const string &in, int)"); + REG_GLOBAL_FUNC("string GetGlobalVar(const string &in)"); + + // ── SendInfoMsg ────────────────────────────────────────────── + REG_GLOBAL_FUNC("void SendInfoMsg(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void SendInfoMsg(CBaseEntity@, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SendInfoMsg(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SendInfoMsgLong(CBaseEntity@, const string &in, const string &in)"); + + // ── SendColoredMessage (global overloads) ──────────────────── + REG_GLOBAL_FUNC("void SendColoredMessage(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void SendColoredMessage(CBaseEntity@, const string &in, const string &in)"); + + // ── ItemExists ─────────────────────────────────────────────── + REG_GLOBAL_FUNC("bool ItemExists(const string &in)"); + REG_GLOBAL_FUNC("bool ItemExists(CBaseEntity@, const string &in)"); + + // ── Misc transpiler-emitted functions ──────────────────────── + REG_GLOBAL_FUNC("void GiveExp(CBaseEntity@, int)"); + REG_GLOBAL_FUNC("void GiveExp(CBaseEntity@, const string &in, int)"); + REG_GLOBAL_FUNC("void GiveGold(CBaseEntity@, int)"); + REG_GLOBAL_FUNC("void SetSkillLevel(int)"); + REG_GLOBAL_FUNC("void SetSkillLevel(const string &in)"); + REG_GLOBAL_FUNC("void ClientCommand(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void ServerCommand(const string &in)"); + REG_GLOBAL_FUNC("void SetCvar(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SetTransition(const string &in)"); + REG_GLOBAL_FUNC("void SetTransition(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SetTransition(const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SetPvP(bool)"); + REG_GLOBAL_FUNC("void SetPvP(int)"); + REG_GLOBAL_FUNC("void SetPvP(const string &in)"); + REG_GLOBAL_FUNC("void GagPlayer(CBaseEntity@)"); + REG_GLOBAL_FUNC("void GagPlayer(const string &in)"); + REG_GLOBAL_FUNC("void SetEnvironment(const string &in)"); + REG_GLOBAL_FUNC("void SetEnvironment(const string &in, const string &in)"); + REG_GLOBAL_FUNC("void SetLights(const string &in)"); + REG_GLOBAL_FUNC("void SetPlayerQuestData(const string &in, const string &in)"); + + // ── Parsing helpers ───────────────────────────────────────────── + // NOTE: parseFloat/parseInt are already registered by scriptstdstring addon + // with signatures: double parseFloat(string, uint &out) and int64 parseInt(string, uint, uint &out) + // Do NOT re-register them here to avoid ambiguity. + REG_GLOBAL_FUNC("string formatInt(int, const string &in, int)"); + + // ── Movement ───────────────────────────────────────────────── + REG_GLOBAL_FUNC("void SetOrigin(CBaseEntity@, const Vector3 &in)"); + REG_GLOBAL_FUNC("void MoveToOrigin(CBaseEntity@, const Vector3 &in, float)"); + REG_GLOBAL_FUNC("void FaceTarget(CBaseEntity@, CBaseEntity@)"); + REG_GLOBAL_FUNC("void FaceTarget(CBaseEntity@, const Vector3 &in)"); + + // ── Creation ───────────────────────────────────────────────── + REG_GLOBAL_FUNC("CBaseEntity@ CreateItem(const string &in, const Vector3 &in)"); + REG_GLOBAL_FUNC("CBaseEntity@ CreateNPC(const string &in, const Vector3 &in)"); + + // ── Misc entity ────────────────────────────────────────────── + REG_GLOBAL_FUNC("void StripLineBreaks(string &inout)"); + REG_GLOBAL_FUNC("string ReplaceString(const string &in, const string &in, const string &in)"); + REG_GLOBAL_FUNC("int StringToInt(const string &in)"); + REG_GLOBAL_FUNC("float StringToFloat(const string &in)"); + REG_GLOBAL_FUNC("string IntToString(int)"); + REG_GLOBAL_FUNC("string FloatToString(float)"); + + // ── Property setters emitted by transpiler ─────────────────── + REG_GLOBAL_FUNC("void SetDescription(const string &in)"); + REG_GLOBAL_FUNC("void SetGold(int)"); + REG_GLOBAL_FUNC("void SetGold(CBaseEntity@, int)"); + REG_GLOBAL_FUNC("void SetWeight(float)"); + REG_GLOBAL_FUNC("void SetWeight(int)"); + REG_GLOBAL_FUNC("void SetVolume(float)"); + REG_GLOBAL_FUNC("void SetVolume(int)"); + REG_GLOBAL_FUNC("void SetMoveSpeed(float)"); + REG_GLOBAL_FUNC("void SetMoveSpeed(int)"); + REG_GLOBAL_FUNC("void SetStepSize(float)"); + REG_GLOBAL_FUNC("void SetStepSize(int)"); + REG_GLOBAL_FUNC("void SetSayTextRange(float)"); + REG_GLOBAL_FUNC("void SetSayTextRange(int)"); + REG_GLOBAL_FUNC("void SetHearingSensitivity(float)"); + REG_GLOBAL_FUNC("void SetInvisible(bool)"); + REG_GLOBAL_FUNC("void SetInvisible(int)"); + REG_GLOBAL_FUNC("void SetBlind(bool)"); + REG_GLOBAL_FUNC("void Respawn()"); + REG_GLOBAL_FUNC("void SetAlive(bool)"); + REG_GLOBAL_FUNC("void SetAlive(int)"); + REG_GLOBAL_FUNC("void SetAlive(const string &in)"); + REG_GLOBAL_FUNC("void ShowPopup(const string &in)"); + REG_GLOBAL_FUNC("void ShowPopup(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void ShowHelpTip(const string &in)"); + REG_GLOBAL_FUNC("void ShowHelpTip(CBaseEntity@, const string &in)"); + REG_GLOBAL_FUNC("void SetSoundVolume(float)"); + REG_GLOBAL_FUNC("void SetSoundVolume(int)"); + REG_GLOBAL_FUNC("void CallClientItemEvent(const string &in)"); + REG_GLOBAL_FUNC("void CallClientItemEvent(const string &in, const string &in)"); + + // ── SpawnNPC overloads the transpiler emits ────────────────── + REG_GLOBAL_FUNC("CMSMonster@ SpawnNPC(const string &in, const Vector3 &in, ScriptMode)"); + REG_GLOBAL_FUNC("CMSMonster@ SpawnNPC(const string &in, const string &in, ScriptMode)"); + + // ── SendInfoMessageToAll single-arg overload ───────────────── + REG_GLOBAL_FUNC("void SendInfoMessageToAll(const string &in)"); + + // ── GetOrigin as a standalone function ──────────────────────── + REG_GLOBAL_FUNC("Vector3 GetOrigin()"); + REG_GLOBAL_FUNC("Vector3 GetEntityOrigin(const string &in)"); +} + +//========================================================================== +// Step 14: Global parameter variables +// +// MSCScript passes event parameters as param1..param8 string globals. +// Transpiled scripts reference these directly. +//========================================================================== +static void RegisterParamGlobals(asIScriptEngine* engine) +{ + int r; + r = engine->RegisterGlobalProperty("string param1", &g_param1); + r = engine->RegisterGlobalProperty("string param2", &g_param2); + r = engine->RegisterGlobalProperty("string param3", &g_param3); + r = engine->RegisterGlobalProperty("string param4", &g_param4); + r = engine->RegisterGlobalProperty("string param5", &g_param5); + r = engine->RegisterGlobalProperty("string param6", &g_param6); + r = engine->RegisterGlobalProperty("string param7", &g_param7); + r = engine->RegisterGlobalProperty("string param8", &g_param8); + r = engine->RegisterGlobalProperty("string currentscript", &g_currentscript); + (void)r; +} + +//========================================================================== +// Master registration — mirrors ASBindings::RegisterAll() order exactly +//========================================================================== +void RegisterAllBindings(asIScriptEngine* engine) +{ + // Step 0: String type (MUST be first) + RegisterStdString(engine); + + // Step 1: Array type + RegisterScriptArray(engine, true); + + // Step 1.3: Dictionary type + RegisterScriptDictionary(engine); + + // Step 1.5: String utilities (depends on array) + RegisterStdStringUtils(engine); + + // Step 2: Core types (Vector3, Color, math) + RegisterCoreTypes(engine); + + // Step 3: CBaseEntity + RegisterCBaseEntity(engine); + + // Step 4: Item/weapon types (before CBasePlayer) + RegisterItemTypes(engine); + + // Step 5: Enums + monsters + CBasePlayer + RegisterMonsterEnums(engine); + RegisterCBaseMonster(engine); + RegisterCMSMonster(engine); + RegisterCBasePlayer(engine); + + // Step 6: Cross-references + RegisterCrossReferences(engine); + + // Step 7: Builtin functions + RegisterBuiltinFunctions(engine); + + // Step 8: Script classes (CGameScript) + RegisterScriptClasses(engine); + + // Step 9: Coroutines + RegisterCoroutines(engine); + + // Step 10: Memory optimization (no script-callable functions currently) + // (RegisterMemoryOptimizationFunctions is a no-op in the real game) + + // Step 11: Module system + RegisterModuleSystem(engine); + + // Step 12: Engine events + RegisterEngineEvents(engine); + + // Step 13: Transpiler-emitted functions + RegisterTranspilerFunctions(engine); + + // Step 14: Param globals + RegisterParamGlobals(engine); + + fprintf(stderr, "Linter: All bindings registered successfully.\n"); +} diff --git a/as_linter/src/linter_registration.h b/as_linter/src/linter_registration.h new file mode 100644 index 00000000..ed8b7d8a --- /dev/null +++ b/as_linter/src/linter_registration.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +// Register all game type/function bindings using dummy function pointers. +// This mirrors the exact interface the real game registers so transpiled +// .as files can be compiled against it. +void RegisterAllBindings(asIScriptEngine* engine); diff --git a/as_linter/src/linter_report.cpp b/as_linter/src/linter_report.cpp new file mode 100644 index 00000000..ec2a1b28 --- /dev/null +++ b/as_linter/src/linter_report.cpp @@ -0,0 +1,112 @@ +#include "linter_report.h" +#include +#include + +// Escape a string for JSON output +static std::string JsonEscape(const std::string& s) +{ + std::string out; + out.reserve(s.size() + 16); + for (char c : s) + { + switch (c) + { + case '"': out += "\\\""; break; + case '\\': out += "\\\\"; break; + case '\n': out += "\\n"; break; + case '\r': out += "\\r"; break; + case '\t': out += "\\t"; break; + default: out += c; break; + } + } + return out; +} + +static const char* MsgTypeStr(int type) +{ + switch (type) + { + case asMSGTYPE_ERROR: return "ERROR"; + case asMSGTYPE_WARNING: return "WARN"; + case asMSGTYPE_INFORMATION: return "INFO"; + default: return "???"; + } +} + +void PrintTextReport(const LintReport& report, FILE* out) +{ + fprintf(out, "=== AngelScript Compilation Report ===\n"); + fprintf(out, "Total: %d | Passed: %d | Failed: %d | Warnings: %d\n\n", + report.total, report.passed, report.failed, report.warnings); + + // Print failures first + for (const auto& fr : report.results) + { + if (fr.success) continue; + fprintf(out, "[FAIL] %s\n", fr.filePath.c_str()); + for (const auto& m : fr.messages) + { + fprintf(out, " (%d, %d) %s: %s\n", + m.row, m.col, MsgTypeStr(m.type), m.message.c_str()); + } + fprintf(out, "\n"); + } + + // Print files with warnings only + for (const auto& fr : report.results) + { + if (!fr.success) continue; + bool hasWarnings = false; + for (const auto& m : fr.messages) + if (m.type == asMSGTYPE_WARNING) { hasWarnings = true; break; } + if (!hasWarnings) continue; + + fprintf(out, "[WARN] %s\n", fr.filePath.c_str()); + for (const auto& m : fr.messages) + { + if (m.type == asMSGTYPE_WARNING) + fprintf(out, " (%d, %d): %s\n", m.row, m.col, m.message.c_str()); + } + fprintf(out, "\n"); + } + + if (report.total > 0) + { + float pct = 100.0f * report.passed / report.total; + fprintf(out, "Pass rate: %.1f%% (%d/%d)\n", pct, report.passed, report.total); + } +} + +void PrintJsonReport(const LintReport& report, FILE* out) +{ + fprintf(out, "{\n"); + fprintf(out, " \"total\": %d,\n", report.total); + fprintf(out, " \"passed\": %d,\n", report.passed); + fprintf(out, " \"failed\": %d,\n", report.failed); + fprintf(out, " \"warnings\": %d,\n", report.warnings); + fprintf(out, " \"results\": [\n"); + + for (size_t i = 0; i < report.results.size(); i++) + { + const auto& fr = report.results[i]; + fprintf(out, " {\n"); + fprintf(out, " \"file\": \"%s\",\n", JsonEscape(fr.filePath).c_str()); + fprintf(out, " \"success\": %s,\n", fr.success ? "true" : "false"); + fprintf(out, " \"messages\": [\n"); + + for (size_t j = 0; j < fr.messages.size(); j++) + { + const auto& m = fr.messages[j]; + fprintf(out, " {\"row\": %d, \"col\": %d, \"type\": \"%s\", \"message\": \"%s\"}%s\n", + m.row, m.col, MsgTypeStr(m.type), + JsonEscape(m.message).c_str(), + (j + 1 < fr.messages.size()) ? "," : ""); + } + + fprintf(out, " ]\n"); + fprintf(out, " }%s\n", (i + 1 < report.results.size()) ? "," : ""); + } + + fprintf(out, " ]\n"); + fprintf(out, "}\n"); +} diff --git a/as_linter/src/linter_report.h b/as_linter/src/linter_report.h new file mode 100644 index 00000000..a8735d95 --- /dev/null +++ b/as_linter/src/linter_report.h @@ -0,0 +1,22 @@ +#pragma once + +#include "linter_engine.h" +#include +#include + +struct FileResult { + std::string filePath; + bool success; + std::vector messages; +}; + +struct LintReport { + int total = 0; + int passed = 0; + int failed = 0; + int warnings = 0; + std::vector results; +}; + +void PrintTextReport(const LintReport& report, FILE* out); +void PrintJsonReport(const LintReport& report, FILE* out); diff --git a/as_linter/src/main.cpp b/as_linter/src/main.cpp new file mode 100644 index 00000000..f78ef461 --- /dev/null +++ b/as_linter/src/main.cpp @@ -0,0 +1,306 @@ +//========================================================================== +// as_linter — Standalone AngelScript Compilation Linter +// +// Initializes a real AngelScript engine with the game's type registrations +// (dummy function pointers) and batch-compiles transpiled .as files. +//========================================================================== + +#include "linter_engine.h" +#include "linter_report.h" +#include "linter_include_handler.h" +#include "linter_base_script.h" + +#include +#include + +#include +#include +#include +#include +#include + +namespace fs = std::filesystem; + +// ── CLI Options ────────────────────────────────────────────────────────── +struct Options { + std::vector files; // individual files + std::string directory; // recursive directory + std::string outputFile; // "" = stdout + std::string format; // "text" or "json" + std::vector includePaths; + bool stopOnError = false; + bool verbose = false; + bool showHelp = false; +}; + +static void PrintUsage() +{ + printf( + "as_linter — AngelScript Compilation Linter\n" + "\n" + "Usage:\n" + " as_linter [options] \n" + "\n" + "Options:\n" + " -f, --file Compile a single file\n" + " -d, --dir Compile all .as files recursively\n" + " -o, --output Write report to file (default: stdout)\n" + " --format text|json Report format (default: text)\n" + " --include-path Additional include search path (repeatable)\n" + " --stop-on-error Stop after first failure\n" + " --verbose Show per-file progress\n" + " -h, --help Show this help\n" + "\n" + "If a bare path is given without -f or -d, it is treated as a directory\n" + "if it exists as a directory, otherwise as a single file.\n" + ); +} + +static Options ParseArgs(int argc, char* argv[]) +{ + Options opts; + opts.format = "text"; + + for (int i = 1; i < argc; i++) + { + std::string arg = argv[i]; + + if (arg == "-h" || arg == "--help") { + opts.showHelp = true; + } + else if ((arg == "-f" || arg == "--file") && i + 1 < argc) { + opts.files.push_back(argv[++i]); + } + else if ((arg == "-d" || arg == "--dir") && i + 1 < argc) { + opts.directory = argv[++i]; + } + else if ((arg == "-o" || arg == "--output") && i + 1 < argc) { + opts.outputFile = argv[++i]; + } + else if (arg == "--format" && i + 1 < argc) { + opts.format = argv[++i]; + } + else if (arg == "--include-path" && i + 1 < argc) { + opts.includePaths.push_back(argv[++i]); + } + else if (arg == "--stop-on-error") { + opts.stopOnError = true; + } + else if (arg == "--verbose") { + opts.verbose = true; + } + else if (arg[0] != '-') { + // Bare path: detect file vs directory + if (fs::is_directory(arg)) + opts.directory = arg; + else + opts.files.push_back(arg); + } + else { + fprintf(stderr, "Unknown option: %s\n", arg.c_str()); + } + } + + return opts; +} + +// Collect .as files recursively +static std::vector CollectFiles(const std::string& dir) +{ + std::vector files; + for (const auto& entry : fs::recursive_directory_iterator(dir)) + { + if (entry.is_regular_file() && entry.path().extension() == ".as") + { + files.push_back(entry.path().string()); + } + } + return files; +} + +// Compile a single file, return result +static FileResult CompileFile(asIScriptEngine* engine, const std::string& filePath, + int fileIndex) +{ + FileResult result; + result.filePath = filePath; + + ClearCurrentMessages(); + + // Each file gets a unique module name so they don't conflict + char moduleName[64]; + snprintf(moduleName, sizeof(moduleName), "lint_%d", fileIndex); + + CScriptBuilder builder; + builder.SetIncludeCallback(LinterIncludeCallback, nullptr); + builder.SetPragmaCallback(LinterPragmaCallback, nullptr); + + int r = builder.StartNewModule(engine, moduleName); + if (r < 0) + { + result.success = false; + LinterMessage m; + m.section = filePath; + m.row = 0; m.col = 0; + m.type = asMSGTYPE_ERROR; + m.message = "Failed to start new module"; + result.messages.push_back(m); + return result; + } + + // Inject the CGameScript base class definition so scripts can inherit from it + r = builder.AddSectionFromMemory("__base_script__", g_BaseScript); + if (r < 0) + { + result.success = false; + LinterMessage m; + m.section = filePath; + m.row = 0; m.col = 0; + m.type = asMSGTYPE_ERROR; + m.message = "Failed to inject base script definitions"; + result.messages.push_back(m); + engine->DiscardModule(moduleName); + return result; + } + + r = builder.AddSectionFromFile(filePath.c_str()); + if (r < 0) + { + result.success = false; + // Collect any messages generated + result.messages = GetCurrentMessages(); + if (result.messages.empty()) + { + LinterMessage m; + m.section = filePath; + m.row = 0; m.col = 0; + m.type = asMSGTYPE_ERROR; + m.message = "Failed to load file"; + result.messages.push_back(m); + } + engine->DiscardModule(moduleName); + return result; + } + + r = builder.BuildModule(); + result.success = (r >= 0); + result.messages = GetCurrentMessages(); + + // Discard the module to free memory + engine->DiscardModule(moduleName); + + return result; +} + +int main(int argc, char* argv[]) +{ + Options opts = ParseArgs(argc, argv); + + if (opts.showHelp || (opts.files.empty() && opts.directory.empty())) + { + PrintUsage(); + return opts.showHelp ? 0 : 1; + } + + // Build full file list + std::vector allFiles = opts.files; + if (!opts.directory.empty()) + { + auto dirFiles = CollectFiles(opts.directory); + allFiles.insert(allFiles.end(), dirFiles.begin(), dirFiles.end()); + } + + if (allFiles.empty()) + { + fprintf(stderr, "No .as files found.\n"); + return 1; + } + + // Set up include paths (root = directory if given, else parent of first file) + std::string rootDir; + if (!opts.directory.empty()) + rootDir = opts.directory; + else + rootDir = fs::path(allFiles[0]).parent_path().string(); + + SetIncludePaths(rootDir, opts.includePaths); + + // Create engine + fprintf(stderr, "Initializing AngelScript engine...\n"); + asIScriptEngine* engine = CreateLinterEngine(); + if (!engine) + { + fprintf(stderr, "FATAL: Failed to create linter engine.\n"); + return 1; + } + + fprintf(stderr, "Compiling %d file(s)...\n\n", (int)allFiles.size()); + + // Compile all files + LintReport report; + report.total = (int)allFiles.size(); + + for (int i = 0; i < (int)allFiles.size(); i++) + { + if (opts.verbose) + fprintf(stderr, "[%d/%d] %s ... ", i + 1, report.total, allFiles[i].c_str()); + + FileResult fr = CompileFile(engine, allFiles[i], i); + + if (fr.success) + { + report.passed++; + if (opts.verbose) fprintf(stderr, "OK\n"); + } + else + { + report.failed++; + if (opts.verbose) + { + fprintf(stderr, "FAIL\n"); + for (const auto& m : fr.messages) + { + if (m.type == asMSGTYPE_ERROR) + fprintf(stderr, " (%d,%d): %s\n", m.row, m.col, m.message.c_str()); + } + } + } + + // Count warnings + for (const auto& m : fr.messages) + { + if (m.type == asMSGTYPE_WARNING) + report.warnings++; + } + + report.results.push_back(std::move(fr)); + + if (opts.stopOnError && report.failed > 0) + break; + } + + // Output report + FILE* out = stdout; + if (!opts.outputFile.empty()) + { + out = fopen(opts.outputFile.c_str(), "w"); + if (!out) + { + fprintf(stderr, "ERROR: Cannot open output file: %s\n", opts.outputFile.c_str()); + out = stdout; + } + } + + if (opts.format == "json") + PrintJsonReport(report, out); + else + PrintTextReport(report, out); + + if (out != stdout) + fclose(out); + + // Cleanup + engine->ShutDownAndRelease(); + + return report.failed > 0 ? 1 : 0; +} diff --git a/lint_report.json b/lint_report.json new file mode 100644 index 00000000..8b7a3a61 --- /dev/null +++ b/lint_report.json @@ -0,0 +1,48692 @@ +{ + "total": 2928, + "passed": 30, + "failed": 2898, + "warnings": 726, + "results": [ + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\!uuuuuuuuuuuuuuuugh.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Expected identifier"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Instead found reserved keyword '!'"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Expected '{'"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Instead found reserved keyword '!'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\a3TC1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\a3TC2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\a3TC3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\a3TC4.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\a3TC5.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\a3TC6.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\bookbat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\merc1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\nightmare_a3TC1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\nightmare_a3TC2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\nightmare_a3TC3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\nightmare_a3TC4.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\nightmare_a3TC5.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\nightmare_a3TC6.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\nightmare_TC_orcs.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\olof.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\rudolf.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\rudolfschest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\\TC_orcs.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aleyesu\\death_image.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::OnRepeatTimer()"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 34, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::OnSpawn()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching signatures to 'EmitSound(const int, const int, const string)'"}, + {"row": 59, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 59, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int)"}, + {"row": 59, "col": 3, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 59, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in)"}, + {"row": 59, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in, float)"}, + {"row": 59, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::say_stuff1()"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::say_stuff2()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::spinout_done()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching signatures to 'EmitSound(const int, const int, const string)'"}, + {"row": 78, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 78, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int)"}, + {"row": 78, "col": 3, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 78, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in)"}, + {"row": 78, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in, float)"}, + {"row": 78, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 79, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 84, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 85, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 85, "col": 3, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 85, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::remove_me1()"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::remove_me2()"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 98, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 100, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::setup_spinout()"}, + {"row": 107, "col": 29, "type": "ERROR", "message": "Expected expression value"}, + {"row": 107, "col": 29, "type": "ERROR", "message": "Instead found ''"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::spinout_loop()"}, + {"row": 117, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 117, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 141, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::game_dynamically_created()"}, + {"row": 143, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::client_activate()"}, + {"row": 150, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 160, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::glow_sprite()"}, + {"row": 162, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 164, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 165, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 166, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 168, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 169, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 170, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 171, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 174, "col": 2, "type": "INFO", "message": "Compiling void DeathImage::explode_sprite()"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 179, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 182, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 183, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aleyesu\\final_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aleyesu\\k_cult_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aleyesu\\snakeman_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aleyesu\\spider_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aluhandra\\sorc_loot.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aluhandra\\trio_loot.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/animals\\bats.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void Bats::OnRepeatTimer()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 14, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void Bats::OnSpawn()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMaxHealth'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/animals\\bunny.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Bunny::OnRepeatTimer()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void Bunny::OnSpawn()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMaxHealth'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\\charon.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void Charon::OnSpawn()"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void Charon::say_hi()"}, + {"row": 49, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 51, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 52, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 54, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 56, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 57, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 59, "col": 5, "type": "ERROR", "message": "No matching symbol 'face_speaker'"}, + {"row": 61, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(const string)'"}, + {"row": 61, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 61, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 61, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 63, "col": 5, "type": "ERROR", "message": "No matching symbol 'face_speaker'"}, + {"row": 65, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 66, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void Charon::say_orc()"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 73, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(const string)'"}, + {"row": 73, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 73, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 73, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 75, "col": 4, "type": "ERROR", "message": "No matching symbol 'face_speaker'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void Charon::game_menu_getoptions()"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 84, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 84, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void Charon::vote_deralia()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\\chest1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\\chest2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\\chest3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\\chest4.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\\chest5.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/badlands\\djinn_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/badlands\\random_cave.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void RandomCave::OnSpawn()"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/belmont\\bandit_extortionist.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/belmont\\bartender.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void Bartender::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/beta_date.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\atholo.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\atholo_statue.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling AtholoStatue::AtholoStatue()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void AtholoStatue::OnSpawn()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void AtholoStatue::spawn_atholo()"}, + {"row": 44, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 46, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 46, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void AtholoStatue::gibify()"}, + {"row": 54, "col": 65, "type": "ERROR", "message": "Expected expression value"}, + {"row": 54, "col": 65, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void AtholoStatue::summon_atholo()"}, + {"row": 60, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 52, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\chest_a1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\chest_a2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\chest_a3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\chest_a4.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\chest_a_base.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\chest_b1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\chest_b2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\chest_b3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\chest_b4.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\chest_b_base.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\key_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\protect_me.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void ProtectMe::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\ryza.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void Ryza::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\stone_trap.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void StoneTrap::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\trigger_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\trigger_cold.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\trigger_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\trigger_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\trigger_monitor.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling TriggerMonitor::TriggerMonitor()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void TriggerMonitor::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveSpeed'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void TriggerMonitor::monitor_triggers()"}, + {"row": 38, "col": 14, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 39, "col": 14, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 40, "col": 14, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 41, "col": 14, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 44, "col": 16, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 46, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void TriggerMonitor::trigger_on()"}, + {"row": 56, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 60, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 64, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 68, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void TriggerMonitor::trigger_off()"}, + {"row": 76, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 80, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 84, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 88, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\trigger_poison.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\\venevus.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodshrine\\base_sorc_friendly.as", + "success": false, + "messages": [ + {"row": 263, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodshrine\\game_master.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_bloodshrine_sorc_check()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching signatures to 'GetAllPlayers(int&)'"}, + {"row": 16, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 16, "col": 3, "type": "INFO", "message": "CBasePlayer@[]@ GetAllPlayers()"}, + {"row": 18, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 22, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 24, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 28, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_bloodshrine_sorc_door()"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 37, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 41, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 42, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::search_for_blood_drinker()"}, + {"row": 48, "col": 20, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 49, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 50, "col": 9, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_bloodshrine_boss_fx()"}, + {"row": 56, "col": 20, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 57, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 57, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 57, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 57, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_bloodshrine_sfs_dead()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_bloodshrine_fsorc_tele()"}, + {"row": 69, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'GM_INIT_TO_TELE'"}, + {"row": 71, "col": 24, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 72, "col": 24, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 73, "col": 24, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 75, "col": 18, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 75, "col": 18, "type": "INFO", "message": "Candidates are:"}, + {"row": 75, "col": 18, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 75, "col": 18, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 76, "col": 7, "type": "ERROR", "message": "No matching signatures to 'Distance(string, string)'"}, + {"row": 76, "col": 7, "type": "INFO", "message": "Candidates are:"}, + {"row": 76, "col": 7, "type": "INFO", "message": "float Distance(const Vector3&in, const Vector3&in)"}, + {"row": 76, "col": 7, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "'L_ORG' is already declared"}, + {"row": 81, "col": 7, "type": "ERROR", "message": "No matching signatures to 'Distance(string, string)'"}, + {"row": 81, "col": 7, "type": "INFO", "message": "Candidates are:"}, + {"row": 81, "col": 7, "type": "INFO", "message": "float Distance(const Vector3&in, const Vector3&in)"}, + {"row": 81, "col": 7, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "'L_ORG' is already declared"}, + {"row": 86, "col": 7, "type": "ERROR", "message": "No matching signatures to 'Distance(string, string)'"}, + {"row": 86, "col": 7, "type": "INFO", "message": "Candidates are:"}, + {"row": 86, "col": 7, "type": "INFO", "message": "float Distance(const Vector3&in, const Vector3&in)"}, + {"row": 86, "col": 7, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 90, "col": 9, "type": "ERROR", "message": "No matching symbol 'INIT_MOVE_TO_TELE'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_bloodshrine_hold_sfs()"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 97, "col": 21, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 98, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 98, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 98, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 98, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodshrine\\sorc_shaman_friendly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodshrine\\sorc_warrior2_friendly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodshrine\\sorc_warrior_friendly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/b_castle\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\base_riddler.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::OnRepeatTimer()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 22, "col": 8, "type": "ERROR", "message": "No matching symbol 'CanSee'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::OnSpawn()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle1()"}, + {"row": 47, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle2()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle3()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle()"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 67, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 68, "col": 12, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'riddle_question'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_answer()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'riddle_correct'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::death()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::kill_player()"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\blacksmith_construct_left.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\blacksmith_construct_right.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\cavebat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\cavespid.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\cavetroll.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\cavetroll2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\chest_qspider.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\corpse.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\corpse2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\corpse2_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\corpse_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\darkspid.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\fangtooth.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\livingdead.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\livingdead_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\rat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\reanimate.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\riddler1.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void Riddler1::riddle_question()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void Riddler1::riddle_question2()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void Riddler1::riddle_question3()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void Riddler1::riddle_correct()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::OnRepeatTimer()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 22, "col": 8, "type": "ERROR", "message": "No matching symbol 'CanSee'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::OnSpawn()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle1()"}, + {"row": 47, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle2()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle3()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle()"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 67, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 68, "col": 12, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'riddle_question'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_answer()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'riddle_correct'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::death()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::kill_player()"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\riddler2.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void Riddler2::riddle_question()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void Riddler2::riddle_question2()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void Riddler2::riddle_correct()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::OnRepeatTimer()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 22, "col": 8, "type": "ERROR", "message": "No matching symbol 'CanSee'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::OnSpawn()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle1()"}, + {"row": 47, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle2()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle3()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle()"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 67, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 68, "col": 12, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'riddle_question'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_answer()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'riddle_correct'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::death()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::kill_player()"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\riddler3.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void Riddler3::riddle_question()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void Riddler3::riddle_question2()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void Riddler3::riddle_question3()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void Riddler3::riddle_correct()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 36, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_VOICE'"}, + {"row": 36, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::OnRepeatTimer()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 22, "col": 8, "type": "ERROR", "message": "No matching symbol 'CanSee'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::OnSpawn()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle1()"}, + {"row": 47, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle2()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle3()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_riddle()"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 67, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 68, "col": 12, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'riddle_question'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::say_answer()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'riddle_correct'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::death()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BaseRiddler::kill_player()"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\spidqueen.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\TC_fangtooth.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\treasure_picker.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void TreasurePicker::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 20, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 25, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 27, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 32, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 34, "col": 6, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void TreasurePicker::create_treasure()"}, + {"row": 44, "col": 46, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\undeadwarrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\\undeadwarrior_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin2\\game_master.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::calruin2_trigger_touched()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::calruin2_reset_triggers()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin2\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin2\\multisource_fix.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void MultisourceFix::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/challs\\challsTC1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/challs\\challsTC2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/challs\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chapel\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\ara.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\bag_o_gold_10.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BagOGoldBase::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\bag_o_gold_25.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BagOGoldBase::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\bag_o_gold_50.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BagOGoldBase::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\bag_o_gold_base.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BagOGoldBase::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\bank1\\deposit.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Deposit::deposit_item()"}, + {"row": 12, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 12, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 15, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 15, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 23, "col": 57, "type": "ERROR", "message": "Expected expression value"}, + {"row": 23, "col": 57, "type": "ERROR", "message": "Instead found ''"}, + {"row": 24, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 24, "col": 52, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\bank1\\filter.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void Filter::func_filter_items()"}, + {"row": 18, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 19, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 20, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 22, "col": 4, "type": "ERROR", "message": "No matching signatures to 'Filter::filter_by_reject(string)'"}, + {"row": 22, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 22, "col": 4, "type": "INFO", "message": "void MS::Filter::filter_by_reject()"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "'L_ITEMS' is already declared"}, + {"row": 26, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 28, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 30, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 32, "col": 4, "type": "ERROR", "message": "No matching signatures to 'Filter::filter_by_space(string, string)'"}, + {"row": 32, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 32, "col": 4, "type": "INFO", "message": "void MS::Filter::filter_by_space()"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "'L_ITEMS' is already declared"}, + {"row": 36, "col": 3, "type": "WARN", "message": "Unreachable code"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void Filter::filter_by_reject()"}, + {"row": 41, "col": 23, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 42, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 44, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 47, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 49, "col": 4, "type": "ERROR", "message": "No matching signatures to 'Filter::reject_looper(string)'"}, + {"row": 49, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 49, "col": 4, "type": "INFO", "message": "void MS::Filter::reject_looper()"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void Filter::reject_looper()"}, + {"row": 56, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 58, "col": 30, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 59, "col": 28, "type": "ERROR", "message": "Both operands must be handles when comparing identity"}, + {"row": 61, "col": 8, "type": "WARN", "message": "Variable 'L_REMOVE' hides another variable of same name in outer scope"}, + {"row": 63, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 65, "col": 8, "type": "WARN", "message": "Variable 'L_REMOVE' hides another variable of same name in outer scope"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "'L_ITEM_SCRIPTNAME' is already declared"}, + {"row": 68, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 71, "col": 8, "type": "WARN", "message": "Variable 'L_REMOVE' hides another variable of same name in outer scope"}, + {"row": 73, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int'"}, + {"row": 75, "col": 4, "type": "ERROR", "message": "No matching symbol 'RemoveToken'"}, + {"row": 77, "col": 4, "type": "ERROR", "message": "Invalid 'break'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void Filter::filter_by_space()"}, + {"row": 93, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 37, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\bank1\\withdraw.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void Withdraw::withdraw_items()"}, + {"row": 13, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 15, "col": 25, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 24, "type": "ERROR", "message": "No matching symbol 'BANK_MAX'"}, + {"row": 20, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 26, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 27, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void Withdraw::build_stores()"}, + {"row": 33, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 34, "col": 47, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 37, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 39, "col": 5, "type": "ERROR", "message": "No matching signatures to 'Withdraw::add_to_chest(string)'"}, + {"row": 39, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 39, "col": 5, "type": "INFO", "message": "void MS::Withdraw::add_to_chest()"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void Withdraw::add_to_chest()"}, + {"row": 48, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void Withdraw::add_stack_to_chest()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void Withdraw::ext_player_got_item()"}, + {"row": 86, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 86, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 92, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 49, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\bank1.as", + "success": false, + "messages": [ + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void Bank1::OnSpawn()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 49, "col": 23, "type": "ERROR", "message": "No matching symbol 'BANK_MAX'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void Bank1::generate_bank_strings()"}, + {"row": 58, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void Bank1::game_menu_getoptions()"}, + {"row": 76, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 76, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 82, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 82, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 83, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 83, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 93, "col": 26, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 26, "type": "ERROR", "message": "Instead found ''"}, + {"row": 120, "col": 2, "type": "INFO", "message": "Compiling void Bank1::add_deposit_options()"}, + {"row": 124, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 124, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 134, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 134, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 150, "col": 2, "type": "INFO", "message": "Compiling void Bank1::erase_store()"}, + {"row": 152, "col": 3, "type": "ERROR", "message": "No matching symbol 'NpcStoreRemove'"}, + {"row": 155, "col": 2, "type": "INFO", "message": "Compiling void Bank1::game_dynamically_created()"}, + {"row": 169, "col": 60, "type": "ERROR", "message": "Expected expression value"}, + {"row": 169, "col": 60, "type": "ERROR", "message": "Instead found ''"}, + {"row": 175, "col": 31, "type": "ERROR", "message": "Expected expression value"}, + {"row": 175, "col": 31, "type": "ERROR", "message": "Instead found ''"}, + {"row": 180, "col": 2, "type": "INFO", "message": "Compiling void Bank1::spawn_in()"}, + {"row": 182, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 183, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 185, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 186, "col": 15, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 188, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 194, "col": 2, "type": "INFO", "message": "Compiling void Bank1::move_monsters()"}, + {"row": 200, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 200, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 201, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 201, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 204, "col": 2, "type": "INFO", "message": "Compiling void Bank1::fade_in_done()"}, + {"row": 206, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 207, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 210, "col": 2, "type": "INFO", "message": "Compiling void Bank1::open_chest()"}, + {"row": 212, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 213, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 216, "col": 2, "type": "INFO", "message": "Compiling void Bank1::close_chest()"}, + {"row": 218, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 221, "col": 2, "type": "INFO", "message": "Compiling void Bank1::func_get_free_bank()"}, + {"row": 223, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 224, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 225, "col": 23, "type": "ERROR", "message": "No matching symbol 'BANK_MAX'"}, + {"row": 227, "col": 4, "type": "ERROR", "message": "No matching signatures to 'Bank1::free_bank_looper(string, string)'"}, + {"row": 227, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 227, "col": 4, "type": "INFO", "message": "void MS::Bank1::free_bank_looper()"}, + {"row": 230, "col": 3, "type": "WARN", "message": "Unreachable code"}, + {"row": 233, "col": 2, "type": "INFO", "message": "Compiling void Bank1::free_bank_looper()"}, + {"row": 242, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 242, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 245, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 245, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 263, "col": 2, "type": "INFO", "message": "Compiling void Bank1::func_check_bank_has()"}, + {"row": 265, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 266, "col": 30, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 269, "col": 24, "type": "ERROR", "message": "No matching symbol 'BANK_MAX'"}, + {"row": 271, "col": 5, "type": "ERROR", "message": "No matching signatures to 'Bank1::bank_has_anything_loop(string)'"}, + {"row": 271, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 271, "col": 5, "type": "INFO", "message": "void MS::Bank1::bank_has_anything_loop()"}, + {"row": 276, "col": 24, "type": "ERROR", "message": "No matching symbol 'BANK_MAX'"}, + {"row": 278, "col": 5, "type": "ERROR", "message": "No matching signatures to 'Bank1::bank_has_item_loop(string, string)'"}, + {"row": 278, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 278, "col": 5, "type": "INFO", "message": "void MS::Bank1::bank_has_item_loop()"}, + {"row": 282, "col": 3, "type": "WARN", "message": "Unreachable code"}, + {"row": 285, "col": 2, "type": "INFO", "message": "Compiling void Bank1::bank_has_anything_loop()"}, + {"row": 287, "col": 7, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 291, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 292, "col": 47, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 296, "col": 4, "type": "ERROR", "message": "Invalid 'break'"}, + {"row": 300, "col": 2, "type": "INFO", "message": "Compiling void Bank1::bank_has_item_loop()"}, + {"row": 302, "col": 7, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 306, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 307, "col": 47, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 308, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 309, "col": 13, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 312, "col": 4, "type": "ERROR", "message": "Invalid 'break'"}, + {"row": 316, "col": 2, "type": "INFO", "message": "Compiling void Bank1::func_stack_quantity()"}, + {"row": 327, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 327, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 331, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 331, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 343, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 343, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 384, "col": 2, "type": "INFO", "message": "Compiling void Bank1::func_make_string()"}, + {"row": 386, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 387, "col": 30, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 389, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 391, "col": 11, "type": "WARN", "message": "Variable 'L_QUANTITY' hides another variable of same name in outer scope"}, + {"row": 391, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 392, "col": 21, "type": "ERROR", "message": "No matching symbol 'MAX_IN_ONE_TRANSACTION'"}, + {"row": 394, "col": 12, "type": "WARN", "message": "Variable 'L_QUANTITY' hides another variable of same name in outer scope"}, + {"row": 394, "col": 25, "type": "ERROR", "message": "No matching symbol 'MAX_IN_ONE_TRANSACTION'"}, + {"row": 399, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 401, "col": 12, "type": "WARN", "message": "Variable 'L_QUANTITY' hides another variable of same name in outer scope"}, + {"row": 401, "col": 25, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 410, "col": 3, "type": "WARN", "message": "Unreachable code"}, + {"row": 413, "col": 2, "type": "INFO", "message": "Compiling void Bank1::func_get_stored_quantity()"}, + {"row": 418, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 418, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 425, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 425, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void Filter::func_filter_items()"}, + {"row": 18, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 19, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 20, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 22, "col": 4, "type": "ERROR", "message": "No matching signatures to 'Filter::filter_by_reject(string)'"}, + {"row": 22, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 22, "col": 4, "type": "INFO", "message": "void MS::Filter::filter_by_reject()"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "'L_ITEMS' is already declared"}, + {"row": 26, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 28, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 30, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 32, "col": 4, "type": "ERROR", "message": "No matching signatures to 'Filter::filter_by_space(string, string)'"}, + {"row": 32, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 32, "col": 4, "type": "INFO", "message": "void MS::Filter::filter_by_space()"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "'L_ITEMS' is already declared"}, + {"row": 36, "col": 3, "type": "WARN", "message": "Unreachable code"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void Filter::filter_by_reject()"}, + {"row": 41, "col": 23, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 42, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 44, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 47, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 49, "col": 4, "type": "ERROR", "message": "No matching signatures to 'Filter::reject_looper(string)'"}, + {"row": 49, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 49, "col": 4, "type": "INFO", "message": "void MS::Filter::reject_looper()"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void Filter::reject_looper()"}, + {"row": 56, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 58, "col": 30, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 59, "col": 28, "type": "ERROR", "message": "Both operands must be handles when comparing identity"}, + {"row": 61, "col": 8, "type": "WARN", "message": "Variable 'L_REMOVE' hides another variable of same name in outer scope"}, + {"row": 63, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 65, "col": 8, "type": "WARN", "message": "Variable 'L_REMOVE' hides another variable of same name in outer scope"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "'L_ITEM_SCRIPTNAME' is already declared"}, + {"row": 68, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 71, "col": 8, "type": "WARN", "message": "Variable 'L_REMOVE' hides another variable of same name in outer scope"}, + {"row": 73, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int'"}, + {"row": 75, "col": 4, "type": "ERROR", "message": "No matching symbol 'RemoveToken'"}, + {"row": 77, "col": 4, "type": "ERROR", "message": "Invalid 'break'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void Filter::filter_by_space()"}, + {"row": 93, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Deposit::deposit_item()"}, + {"row": 12, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 12, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 15, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 15, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 23, "col": 57, "type": "ERROR", "message": "Expected expression value"}, + {"row": 23, "col": 57, "type": "ERROR", "message": "Instead found ''"}, + {"row": 24, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 24, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void Withdraw::withdraw_items()"}, + {"row": 13, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 15, "col": 25, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 24, "type": "ERROR", "message": "No matching symbol 'BANK_MAX'"}, + {"row": 20, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 26, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 27, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void Withdraw::build_stores()"}, + {"row": 33, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 34, "col": 47, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 37, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 39, "col": 5, "type": "ERROR", "message": "No matching signatures to 'Withdraw::add_to_chest(string)'"}, + {"row": 39, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 39, "col": 5, "type": "INFO", "message": "void MS::Withdraw::add_to_chest()"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void Withdraw::add_to_chest()"}, + {"row": 48, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void Withdraw::add_stack_to_chest()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void Withdraw::ext_player_got_item()"}, + {"row": 86, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 86, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 92, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 49, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\barnum_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\barnum_jump.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\base_quiver_of.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\base_treasurechest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\bloodshrine_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\catacombs_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\catacombs_mummy.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\chapel1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\chapel2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\chapel3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\chapel_bat.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\cleicert.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\cleicert_temple.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\cobra_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\demontemple1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\demontemple2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\deraliasewers2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\deraliasewers_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\deraliasewers_gloam.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\deraliasewers_swamp.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\dragooncaves1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\dragooncaves2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\dragooncaves_boss.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\dragooncaves_secret.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\fmines_spider.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\gold_1000.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BagOGoldBase::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\gold_25.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\gold_300.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\gold_50.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\health_greater_a.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\health_greater_b.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\health_greater_c.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\hemlock_crulak.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\highlands1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\hunderswamp1_borc.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\hunderswamp1_extra.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\hunderswamp1_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\hunderswamp_extra.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\ice_boss.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\ice_main.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\idemarks1_bandits.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\idemarks1_dayvans_gold.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\idemarks1_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\idemarks1_picnic.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\islesofdread1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\isle_goblins.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\isle_maze.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\isle_maze_secret.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\keledros.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\kroush_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\lodagond1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\lodagond2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\lodagond3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\lodagond4_array.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\lostcaverns2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\lostcaverns3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\m2_quest2_bigbonus.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\m2_quest2_extra.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\m2_quest2_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\nashalrath_extra.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\nashalrath_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\nashalrath_mid.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\olympus.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_archers1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_archers1_trap.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_archers2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_base.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_caves.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_final_easy.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_final_hard.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_gobtown1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_gobtown2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_orchuts1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\orcfor_tower.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\phlames_blacksmith.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\phlames_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\phlames_reaver.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\phobia_farm.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\phobia_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\phobia_storage.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_bluntwood.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_broadhead.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_fire.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_frost.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_frost_arrows.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_gpoison.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_jagged.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_lightning.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_poison.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_random_lesser.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_silver.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\quiver_of_wooden.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\rand_dynamic.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\rand_dynamic2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\rand_epic_new.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\rand_good.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\rand_good_new.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\rand_great.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\rmines_boss.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\rmines_gboss.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\sfor_fire1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\sfor_fire2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\sfor_wolf.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\shender_east_firegiant.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\shender_east_icebird.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\shender_east_morc.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\shender_east_telf.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\skycastle1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\skycastle2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\sorc_palace_chief.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\sorc_palace_library.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\sorc_palace_mscave.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\tundra_base.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\tundra_bear.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\tundra_boat.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\tundra_dzombs.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\tundra_guardian.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\tundra_morcs.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\tundra_polarhut.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\umulak_final.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_boss1a.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_boss1b.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_boss1c.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_boss2a.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_boss2b.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_boss2c.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_boss3a.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_boss3b.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_boss3c.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_chasm.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_chasmkill.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_sekrat.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_temple.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercliffs_town.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercrypts_quake1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercrypts_quake2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercrypts_quake3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercrypts_quake4.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercrypts_t1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercrypts_t2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\undercrypts_t3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\\ww3d.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/cleicert\\fpriest.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/cleicert\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/client\\VoteMenuClient.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/crest_dealer.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void CrestDealer::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void CrestDealer::game_dynamically_created()"}, + {"row": 19, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'OpenMenu'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void CrestDealer::game_menu_getoptions()"}, + {"row": 25, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void CrestDealer::build_crest_menu()"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 41, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void CrestDealer::give_crest()"}, + {"row": 48, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void CrestDealer::end_me()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dalya\\ferrin.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::say_hi()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::say_dangerous()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::say_orcs()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::say_blackhand()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::say_keep()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::say_homage()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::say_homage2()"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::say_homage3()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::say_picture()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::say_retrieve()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::give_picture()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ReceiveOffer'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void Ferrin::game_menu_getoptions()"}, + {"row": 96, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 98, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 98, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"}, + {"row": 101, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 101, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 107, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 14, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 14, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 126, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 126, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 127, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 127, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 128, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 128, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\\chestmaker.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Chestmaker::OnSpawn()"}, + {"row": 11, "col": 12, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 13, "col": 53, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 15, "col": 12, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 17, "col": 52, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\\chest_good.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\\chest_great.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\\door.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Door::alarm()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 12, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\\gob_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\\scorp_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\\spid_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\\spid_dude.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/demontemple\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\barguy.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void Barguy::OnRepeatTimer()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 28, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void Barguy::OnRepeatTimer_1()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void Barguy::OnSpawn()"}, + {"row": 55, "col": 19, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 19, "type": "ERROR", "message": "Instead found ''"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void Barguy::say_hi()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void Barguy::say_rumor()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 75, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 77, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 81, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void Barguy::helpeh()"}, + {"row": 87, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void Barguy::respond_no()"}, + {"row": 94, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void Barguy::say_job()"}, + {"row": 102, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 108, "col": 2, "type": "INFO", "message": "Compiling void Barguy::say_thief2()"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 114, "col": 2, "type": "INFO", "message": "Compiling void Barguy::say_thief3()"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 120, "col": 2, "type": "INFO", "message": "Compiling void Barguy::say_thief4()"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void Barguy::say_a_really_important()"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 133, "col": 2, "type": "INFO", "message": "Compiling void Barguy::give_hat()"}, + {"row": 135, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 136, "col": 3, "type": "ERROR", "message": "No matching symbol 'ReceiveOffer'"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 141, "col": 2, "type": "INFO", "message": "Compiling void Barguy::hat_2()"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void Barguy::game_menu_getoptions()"}, + {"row": 153, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 153, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 154, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 154, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 155, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 155, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 156, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 156, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 160, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 160, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 161, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 161, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 162, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 162, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 168, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 168, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 169, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 169, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 170, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 170, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\barkeep.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\blacksmith.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\blacksmith_hammer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\bob.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\boss_spider.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\commoner.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\commoner01.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\commoner_handrail.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\commoner_sitting.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\deraliateller.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseBanker::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\drunk.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\grocer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\guard_barracks.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\guard_gate.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\guard_warehouse.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\headguard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\healer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\healer02.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\hmaster.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::OnSpawn()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::idle()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 47, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_hi()"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::gossip_1()"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_rumour()"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_job()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_job2()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_ship()"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 83, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_ship2()"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_ship3()"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_ship4()"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::game_menu_getoptions()"}, + {"row": 102, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 107, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::vote_ara()"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 114, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_ara()"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 120, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_ara2()"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 126, "col": 2, "type": "INFO", "message": "Compiling void Hmaster::say_ara3()"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\idlesoldier.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\innkeeper.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\item_cupboard01.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\item_cupboard02.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\jacob.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\kayle.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\knight_foutpost.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\knight_lord.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\nalchemist.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\pat.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void Pat::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\Proffund.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\Slinker.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\storage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\thief.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\\Willem.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deraliasewers\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deraliasewers\\mummy_warrior2b.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/desert_temple\\orc_chatter1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/desert_temple\\orc_chatter2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/desert_temple\\thuldahr.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/developer\\devcmds.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::game_playercmd()"}, + {"row": 10, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 12, "col": 8, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 16, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 17, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 21, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "No matching symbol 'G_DEVELOPER_MODE'"}, + {"row": 27, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 28, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::dev_command()"}, + {"row": 37, "col": 21, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 21, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::tele()"}, + {"row": 47, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 48, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 49, "col": 19, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 52, "col": 40, "type": "ERROR", "message": "No matching signatures to 'Vector3(string, string, string)'"}, + {"row": 52, "col": 40, "type": "INFO", "message": "Candidates are:"}, + {"row": 52, "col": 40, "type": "INFO", "message": "Vector3::Vector3()"}, + {"row": 52, "col": 40, "type": "INFO", "message": "Vector3::Vector3(float, float, float)"}, + {"row": 52, "col": 40, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 52, "col": 40, "type": "INFO", "message": "Vector3::Vector3(const Vector3&in)"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::teledest()"}, + {"row": 57, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 58, "col": 15, "type": "ERROR", "message": "Both operands must be handles when comparing identity"}, + {"row": 60, "col": 41, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 60, "col": 41, "type": "INFO", "message": "Candidates are:"}, + {"row": 60, "col": 41, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 60, "col": 41, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::slayall()"}, + {"row": 66, "col": 24, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 67, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 70, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 75, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::usetrig()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::dumpquest()"}, + {"row": 88, "col": 71, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 88, "col": 71, "type": "ERROR", "message": "Instead found identifier 'ent_currentplayer'"}, + {"row": 91, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::newnpc()"}, + {"row": 96, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 96, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 97, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 97, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::newdyn()"}, + {"row": 110, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 110, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::newitem()"}, + {"row": 118, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 118, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 119, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 119, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 123, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::eventtarg()"}, + {"row": 125, "col": 94, "type": "ERROR", "message": "Expected expression value"}, + {"row": 125, "col": 94, "type": "ERROR", "message": "Instead found ''"}, + {"row": 128, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::eventme()"}, + {"row": 130, "col": 65, "type": "ERROR", "message": "Expected expression value"}, + {"row": 130, "col": 65, "type": "ERROR", "message": "Instead found ''"}, + {"row": 133, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::eventplayers()"}, + {"row": 135, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 135, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 138, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::eventgm()"}, + {"row": 140, "col": 57, "type": "ERROR", "message": "Expected expression value"}, + {"row": 140, "col": 57, "type": "ERROR", "message": "Instead found ''"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::eventall()"}, + {"row": 145, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 145, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::blamb()"}, + {"row": 153, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 155, "col": 11, "type": "WARN", "message": "Variable 'L_RADIUS' hides another variable of same name in outer scope"}, + {"row": 155, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 157, "col": 8, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 159, "col": 11, "type": "WARN", "message": "Variable 'L_DMG' hides another variable of same name in outer scope"}, + {"row": 159, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 161, "col": 8, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 163, "col": 11, "type": "WARN", "message": "Variable 'L_TYPE' hides another variable of same name in outer scope"}, + {"row": 163, "col": 20, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 166, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 169, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::setquest()"}, + {"row": 171, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 172, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 174, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 177, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::getquest()"}, + {"row": 179, "col": 65, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 183, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::setgold()"}, + {"row": 185, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 185, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 188, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::addhp()"}, + {"row": 190, "col": 66, "type": "ERROR", "message": "Expected expression value"}, + {"row": 190, "col": 66, "type": "ERROR", "message": "Instead found ''"}, + {"row": 193, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::addmp()"}, + {"row": 195, "col": 66, "type": "ERROR", "message": "Expected expression value"}, + {"row": 195, "col": 66, "type": "ERROR", "message": "Instead found ''"}, + {"row": 198, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::rat()"}, + {"row": 203, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 203, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 204, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 204, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 208, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::skele()"}, + {"row": 213, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 213, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 214, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 214, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 218, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::teleforward()"}, + {"row": 224, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 224, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 228, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::effectme()"}, + {"row": 231, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 234, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::effectmestack()"}, + {"row": 237, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 240, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::effecttarg()"}, + {"row": 242, "col": 101, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 242, "col": 101, "type": "ERROR", "message": "Instead found identifier 'ent_currentplayer'"}, + {"row": 246, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::effecttargstack()"}, + {"row": 248, "col": 101, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 248, "col": 101, "type": "ERROR", "message": "Instead found identifier 'ent_currentplayer'"}, + {"row": 252, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::testdmg()"}, + {"row": 254, "col": 98, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 254, "col": 98, "type": "ERROR", "message": "Instead found identifier 'ent_currentplayer'"}, + {"row": 257, "col": 2, "type": "INFO", "message": "Compiling void Devcmds::throw()"}, + {"row": 259, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/developer\\effects\\test_duration.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/developer\\game_master.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::GameMaster' is a class."}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::GameMaster' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/developer\\npcs\\mega_ice_wall.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void MegaIceWall::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/developer\\player\\externals.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Externals::ext_setstat()"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void Externals::ext_fullstats()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void Externals::ext_setstats()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\dq_base_menus.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void DqBaseMenus::game_menu_getoptions()"}, + {"row": 13, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 13, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 15, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 15, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 19, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 20, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 52, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void DqBaseMenus::build_quest_complete_menu()"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void DqBaseMenus::func_replace_string()"}, + {"row": 77, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 77, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 78, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 78, "col": 47, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\externals\\dq_adjust_damage.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqAdjustDamage::OnDamagedOther(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\externals\\dq_apply_callback_on_death.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqApplyCallbackOnDeath::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\externals\\dq_game_master.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void DqGameMaster::gm_dq_add_counter()"}, + {"row": 19, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'DQ_DEATH_CALLBACK_IDS'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void DqGameMaster::gm_dq_perish_counter()"}, + {"row": 29, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 49, "type": "ERROR", "message": "Instead found ''"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void DqGameMaster::gm_dq_add_death()"}, + {"row": 40, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 40, "col": 92, "type": "ERROR", "message": "Expected ';'"}, + {"row": 40, "col": 92, "type": "ERROR", "message": "Instead found ')'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void DqGameMaster::gm_dq_monster_death_callbacks()"}, + {"row": 48, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 39, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\externals\\dq_monster_externals.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqMonsterExternals::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\findlebind.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\murmur.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\quests\\bases\\dq_base_quests.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\quests\\dq_defend_me.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\quests\\dq_escort_to.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\quests\\dq_fetch_drop.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void DqFetchDrop::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\quests\\dq_fetch_items.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\quests\\dq_get_item_from_hands.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\quests\\dq_kill_target.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\quests\\dq_kill_type.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void DqKillType::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\quest_dwarf.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\templates\\bases\\dq_generic_chat.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void DqGenericChat::quest_intro()"}, + {"row": 10, "col": 7, "type": "ERROR", "message": "No matching symbol 'QUEST_INTRO_CHAT'"}, + {"row": 12, "col": 4, "type": "ERROR", "message": "No matching symbol 'chat_now'"}, + {"row": 13, "col": 4, "type": "ERROR", "message": "No matching symbol 'chat_convo_anim'"}, + {"row": 15, "col": 7, "type": "ERROR", "message": "No matching symbol 'QUEST_INTRO_SOUND'"}, + {"row": 17, "col": 29, "type": "ERROR", "message": "No matching symbol 'QUEST_INTRO_SOUND'"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void DqGenericChat::quest_activate()"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "No matching symbol 'QUEST_ACTIVATE_CHAT'"}, + {"row": 25, "col": 4, "type": "ERROR", "message": "No matching symbol 'chat_now'"}, + {"row": 26, "col": 4, "type": "ERROR", "message": "No matching symbol 'chat_convo_anim'"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "No matching symbol 'QUEST_ACTIVATE_SOUND'"}, + {"row": 30, "col": 29, "type": "ERROR", "message": "No matching symbol 'QUEST_ACTIVATE_SOUND'"}, + {"row": 30, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void DqGenericChat::quest_finished()"}, + {"row": 36, "col": 7, "type": "ERROR", "message": "No matching symbol 'QUEST_FINISHED_CHAT'"}, + {"row": 38, "col": 4, "type": "ERROR", "message": "No matching symbol 'chat_now'"}, + {"row": 39, "col": 4, "type": "ERROR", "message": "No matching symbol 'chat_convo_anim'"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "No matching symbol 'QUEST_FINISHED_SOUND'"}, + {"row": 43, "col": 29, "type": "ERROR", "message": "No matching symbol 'QUEST_FINISHED_SOUND'"}, + {"row": 43, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void DqGenericChat::quest_complete()"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "No matching symbol 'QUEST_COMPLETE_CHAT'"}, + {"row": 51, "col": 4, "type": "ERROR", "message": "No matching symbol 'chat_now'"}, + {"row": 52, "col": 4, "type": "ERROR", "message": "No matching symbol 'chat_convo_anim'"}, + {"row": 54, "col": 7, "type": "ERROR", "message": "No matching symbol 'QUEST_COMPLETE_SOUND'"}, + {"row": 56, "col": 29, "type": "ERROR", "message": "No matching symbol 'QUEST_COMPLETE_SOUND'"}, + {"row": 56, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\templates\\bases\\dq_generic_menus.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void DqGenericMenus::game_menu_getoptions()"}, + {"row": 13, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 13, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 15, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 15, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 16, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 16, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 24, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 15, "type": "ERROR", "message": "Expected ';'"}, + {"row": 41, "col": 15, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 45, "col": 15, "type": "ERROR", "message": "Expected ';'"}, + {"row": 45, "col": 15, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 14, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 14, "type": "ERROR", "message": "Instead found identifier 'reg'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\templates\\bases\\dq_generic_reward.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void DqGenericReward::quest_activate()"}, + {"row": 18, "col": 8, "type": "ERROR", "message": "No matching symbol 'QUEST_REWARD_ALL'"}, + {"row": 21, "col": 4, "type": "ERROR", "message": "No matching signatures to 'GetAllPlayers(string)'"}, + {"row": 21, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 21, "col": 4, "type": "INFO", "message": "CBasePlayer@[]@ GetAllPlayers()"}, + {"row": 22, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 24, "col": 5, "type": "ERROR", "message": "No matching signatures to 'DqGenericReward::get_quest_participants_loop(string)'"}, + {"row": 24, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 24, "col": 5, "type": "INFO", "message": "void MS::DqGenericReward::get_quest_participants_loop()"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void DqGenericReward::quest_taker_updated()"}, + {"row": 33, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void DqGenericReward::quest_complete()"}, + {"row": 48, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void DqGenericReward::quest_reward()"}, + {"row": 88, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 88, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void DqGenericReward::game_menu_getoptions()"}, + {"row": 112, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 112, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 120, "col": 2, "type": "INFO", "message": "Compiling void DqGenericReward::get_quest_participants_loop()"}, + {"row": 122, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching signatures to 'DqGenericReward::add_quest_participant(string)'"}, + {"row": 123, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 123, "col": 3, "type": "INFO", "message": "void MS::DqGenericReward::add_quest_participant()"}, + {"row": 126, "col": 2, "type": "INFO", "message": "Compiling void DqGenericReward::add_quest_participant()"}, + {"row": 128, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'A_QUEST_PARTICIPANTS'"}, + {"row": 132, "col": 2, "type": "INFO", "message": "Compiling void DqGenericReward::build_quest_complete_menu()"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 138, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 138, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 141, "col": 2, "type": "INFO", "message": "Compiling void DqGenericReward::clear_array_loop()"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'A_QUEST_PARTICIPANTS'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\templates\\dq_defend_me_template.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\templates\\dq_escort_to_template.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\templates\\dq_fetch_drop_template.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\templates\\dq_fetch_items_template.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\templates\\dq_get_item_from_hands_template.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\templates\\dq_kill_target_template.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\templates\\dq_kill_type_template.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\voldar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\voldararcher.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\voldararcher_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\voldaraxer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\voldarshaman.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\\voldarwarrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridje\\boss1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridje\\gloam_sitter.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void GloamSitter::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridje\\gloam_slayer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridje\\gloam_slayer_JM.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridmars_scripts_WIP\\deralia\\headguard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridmars_scripts_WIP\\deralia\\innkeeper.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridmars_scripts_WIP\\foutpost\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridmars_scripts_WIP\\mines\\rudolf.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\armorer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\armourer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\barwench.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\boarboss.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\boarhard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\bryan.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\clock_hourhand.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 9, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 67, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\clock_minutehand.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 9, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 67, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\Copy of fletcher.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\edanateller.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\edrin.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\eTC1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\fletcher.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\healer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\highpriest.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::OnRepeatTimer()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'CanSee'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::OnSpawn()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMaxHealth'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::say_hi()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::say_job()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::say_rumour()"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::say_rumour2()"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::say_rumour3()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::say_rumour4()"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::say_rumour5()"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::say_heal()"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::attack_1()"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Highpriest::game_menu_getoptions()"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 109, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 109, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\Hoguld.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\masterp.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\mayor.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void Mayor::OnSpawn()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void Mayor::say_hi()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void Mayor::say_suliban()"}, + {"row": 52, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 56, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 58, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 60, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 64, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 65, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 66, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void Mayor::guards()"}, + {"row": 73, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, Vector3, const ScriptMode)'"}, + {"row": 74, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 74, "col": 3, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 74, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 3"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, Vector3, const ScriptMode)'"}, + {"row": 75, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 75, "col": 3, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 75, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 3"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, Vector3, const ScriptMode)'"}, + {"row": 76, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 76, "col": 3, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 76, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 3"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 79, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void Mayor::say_suliban2()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void Mayor::say_know()"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveItem'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void Mayor::worldevent_evidence_found()"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 106, "col": 2, "type": "INFO", "message": "Compiling void Mayor::robbed()"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void Mayor::attack_1()"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'DoDamage'"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void Mayor::game_recvoffer_gold()"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ReceiveOffer'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void Mayor::say_job()"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\mayorguard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\mergur.as", + "success": false, + "messages": [ + {"row": 10, "col": 7, "type": "ERROR", "message": "Method 'void Mergur::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\msqguard.as", + "success": false, + "messages": [ + {"row": 94, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 196, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\oldman.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\packmerc.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\priest.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void Priest::OnSpawn()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMaxHealth'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'createmystore'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_hi()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_sembelbin()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_hall()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_job()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_job2()"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_rumour()"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_rumour2()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_rumour3()"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_rumour4()"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_rumour5()"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void FirstNpc::game_targeted_by_player()"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\rentaguard1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\rentaguard2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\rentaguard3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\shroom.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Shroom::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\suliban.as", + "success": false, + "messages": [ + {"row": 86, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\sumdale.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\towncrier.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::OnRepeatTimer()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 21, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::OnSpawn()"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::say_hi()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 51, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::say_adventure()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::say_adventure2()"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::say_rumour()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::say_rumour2()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::say_rumour3()"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::say_mayor()"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::resume()"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void Towncrier::worldevent_time()"}, + {"row": 106, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 108, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 110, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 112, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 114, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 116, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 118, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 120, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 122, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 124, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 126, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 128, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 130, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 132, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 134, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 136, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 138, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 140, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 142, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 144, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 146, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 148, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 150, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 152, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 154, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 156, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 158, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 162, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 164, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 166, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 168, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 170, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 172, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 174, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 176, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 178, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 180, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 182, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 184, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 186, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 188, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 190, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 192, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 194, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 196, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 198, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 200, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\trapper.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\tutorial.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\urdauf.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\\weaponsmith.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edanas\\sewerrat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edanasewers_old\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\add_dynamic_spawn.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\base_debuff.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\base_debuff_diminishing.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\base_dot.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\base_effect.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\debuff_acid.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\debuff_cold.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'float'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 27, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\debuff_defile.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\debuff_freeze.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'float'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "Expected identifier"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "Instead found '('"}, + {"row": 48, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\debuff_hold.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 45, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\debuff_lightning.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\debuff_stun.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 15, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'float'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 20, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 20, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 148, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\demon_blood.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_acid.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_bleed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_cold.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_cold_freeze.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_dark.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_holy.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_lightning_cage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_poison.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dot_poison_blind.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\dynamic_beam_cl.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void DynamicBeamCl::client_activate()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 21, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 22, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 23, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 27, "col": 19, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void DynamicBeamCl::dbeam_color()"}, + {"row": 33, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 34, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void DynamicBeamCl::dbeam_target()"}, + {"row": 52, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void DynamicBeamCl::dbeam_target_multi()"}, + {"row": 58, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 59, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void DynamicBeamCl::game_prerender()"}, + {"row": 70, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 70, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 75, "col": 66, "type": "ERROR", "message": "Expected expression value"}, + {"row": 75, "col": 66, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void DynamicBeamCl::multi_beam()"}, + {"row": 82, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 82, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 83, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void DynamicBeamCl::effect_die()"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_astral.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_beam_box.as", + "success": false, + "messages": [ + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling EffectBeamBox::EffectBeamBox()"}, + {"row": 40, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void EffectBeamBox::client_activate()"}, + {"row": 63, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 65, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 65, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 67, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 67, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 70, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 70, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 73, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 73, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 77, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 77, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 79, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 82, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 82, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 85, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 85, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void EffectBeamBox::do_the_beam_thing()"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 2, "type": "INFO", "message": "Compiling void EffectBeamBox::effect_die()"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_lightning_drunk.as", + "success": false, + "messages": [ + {"row": 9, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 9, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 10, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 11, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 22, "type": "ERROR", "message": "Expected identifier"}, + {"row": 14, "col": 22, "type": "ERROR", "message": "Instead found '('"}, + {"row": 82, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_nojump.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_push.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_quake.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_rejuv2.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_shardshield.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'float'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 16, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 16, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 49, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_slow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_spiderlatch.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_stamina_regen.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_stop.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_templock.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\effect_tempnomove.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\gauntlet_invalid.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\gib_explode.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling GibExplode::GibExplode()"}, + {"row": 15, "col": 32, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void GibExplode::OnSpawn()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void GibExplode::game_dynamically_created()"}, + {"row": 48, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 48, "col": 11, "type": "ERROR", "message": "Instead found identifier '_0'"}, + {"row": 49, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 49, "col": 11, "type": "ERROR", "message": "Instead found identifier '_5'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void GibExplode::explode()"}, + {"row": 55, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void GibExplode::remove_fx()"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void GibExplode::stop_bounce()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\goblin_latch.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\iceshield.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\lightning_disc.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void LightningDisc::OnRepeatTimer()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void LightningDisc::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMonsterClip'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void LightningDisc::game_dynamically_created()"}, + {"row": 44, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 45, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 46, "col": 12, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 47, "col": 14, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVelocity'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching signatures to 'EmitSound(const int, const int, const string)'"}, + {"row": 54, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 54, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int)"}, + {"row": 54, "col": 3, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 54, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in)"}, + {"row": 54, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in, float)"}, + {"row": 54, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void LightningDisc::disc_dodamage()"}, + {"row": 59, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void LightningDisc::wobble()"}, + {"row": 65, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 67, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 71, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityAngles'"}, + {"row": 72, "col": 12, "type": "ERROR", "message": "No matching signatures to 'Vector3(string, const int, const int)'"}, + {"row": 72, "col": 12, "type": "INFO", "message": "Candidates are:"}, + {"row": 72, "col": 12, "type": "INFO", "message": "Vector3::Vector3()"}, + {"row": 72, "col": 12, "type": "INFO", "message": "Vector3::Vector3(float, float, float)"}, + {"row": 72, "col": 12, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 72, "col": 12, "type": "INFO", "message": "Vector3::Vector3(const Vector3&in)"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void LightningDisc::fx_die()"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching signatures to 'EmitSound(const int, const int, const string)'"}, + {"row": 82, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 82, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int)"}, + {"row": 82, "col": 3, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 82, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in)"}, + {"row": 82, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in, float)"}, + {"row": 82, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\make_light.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void MakeLight::client_activate()"}, + {"row": 10, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 11, "col": 18, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 12, "col": 18, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 13, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_DUR(const string)'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void MakeLight::remove_me()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\manaring_portals.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void ManaringPortals::game_precache()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void ManaringPortals::client_activate()"}, + {"row": 32, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 33, "col": 22, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void ManaringPortals::spawn_a_portal()"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 67, "col": 5, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void ManaringPortals::setup_portal_sprite()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void ManaringPortals::update_portal_sprite()"}, + {"row": 87, "col": 29, "type": "ERROR", "message": "No conversion from 'const string' to 'int' available."}, + {"row": 89, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void ManaringPortals::kill_script()"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\poison_spore.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\protection.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 12, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 46, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\scarab_latch.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_acid_splash.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling SfxAcidSplash::SfxAcidSplash()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxAcidSplash::client_activate()"}, + {"row": 27, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 29, "col": 29, "type": "ERROR", "message": "No matching symbol 'PARAM'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void SfxAcidSplash::remove_me()"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void SfxAcidSplash::create_sprites()"}, + {"row": 53, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void SfxAcidSplash::update_ring_sprite()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 62, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void SfxAcidSplash::setup_ring_sprite()"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_attach_sprite.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SfxAttachSprite::client_activate()"}, + {"row": 33, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 41, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 85, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 47, "col": 85, "type": "ERROR", "message": "Instead found identifier 'attachment0'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void SfxAttachSprite::keep_sprite_pos()"}, + {"row": 65, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 65, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 69, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 73, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 73, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 77, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 77, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SfxAttachSprite::end_fx()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void SfxAttachSprite::remove_me()"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void SfxAttachSprite::game_prerender()"}, + {"row": 97, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 97, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void SfxAttachSprite::update_attach_sprite()"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 107, "col": 2, "type": "INFO", "message": "Compiling void SfxAttachSprite::setup_attach_sprite()"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 110, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 112, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_barrier.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void SfxBarrier::client_activate()"}, + {"row": 23, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 24, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 25, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 26, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 27, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::CL_DURATION(const string)'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void SfxBarrier::spriteify()"}, + {"row": 38, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void SfxBarrier::createsprite()"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"}, + {"row": 57, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SfxBarrier::setup_sprite1_sparkle()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void SfxBarrier::sprite_update()"}, + {"row": 82, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 82, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 86, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 86, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void SfxBarrier::clear_sprites()"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 106, "col": 2, "type": "INFO", "message": "Compiling void SfxBarrier::remove_me()"}, + {"row": 108, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 115, "col": 4, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_beam_cage.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamCage::client_activate()"}, + {"row": 27, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 29, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 30, "col": 27, "type": "ERROR", "message": "Expected expression value"}, + {"row": 30, "col": 27, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamCage::draw_coil_loop()"}, + {"row": 68, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 70, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 70, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 78, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 78, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamCage::end_fx()"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamCage::remove_fx()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_beam_sparks.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamSparks::client_activate()"}, + {"row": 23, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 24, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 26, "col": 18, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 27, "col": 14, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 28, "col": 17, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamSparks::end_fx()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamSparks::remove_me()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamSparks::target_sprites()"}, + {"row": 51, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamSparks::track_attach()"}, + {"row": 65, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 65, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamSparks::update_attach_sprite()"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamSparks::setup_attach_sprite()"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void SfxBeamSparks::setup_target_sprite()"}, + {"row": 100, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 100, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_bleed.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void SfxBleed::client_activate()"}, + {"row": 32, "col": 61, "type": "ERROR", "message": "Expected expression value"}, + {"row": 32, "col": 61, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void SfxBleed::spurt_blood()"}, + {"row": 42, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 46, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void SfxBleed::setup_temp_sprite()"}, + {"row": 54, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 54, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void SfxBleed::remove_me()"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_blue_flames.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void SfxBlueFlames::OnRepeatTimer()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SfxBlueFlames::game_precache()"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void SfxBlueFlames::client_activate()"}, + {"row": 31, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM1'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void SfxBlueFlames::createsprite()"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SfxBlueFlames::setup_sprite1_flame()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void SfxBlueFlames::effect_die()"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_bunny.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void SfxBunny::client_activate()"}, + {"row": 13, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 13, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SfxBunny::remove_script()"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void SfxBunny::update_bunny()"}, + {"row": 33, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void SfxBunny::setup_bunny()"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_burst_sphere.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void SfxBurstSphere::client_activate()"}, + {"row": 16, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SfxBurstSphere::update_bubble()"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "No matching symbol 'GROW_MODE'"}, + {"row": 32, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 35, "col": 5, "type": "ERROR", "message": "No matching symbol 'GROW_MODE'"}, + {"row": 37, "col": 9, "type": "ERROR", "message": "No matching symbol 'GROW_MODE'"}, + {"row": 41, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SfxBurstSphere::end_fx()"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void SfxBurstSphere::remove_fx()"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void SfxBurstSphere::setup_bubble()"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_circle_of_fire.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void SfxCircleOfFire::client_activate()"}, + {"row": 24, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 26, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 27, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SfxCircleOfFire::make_flames()"}, + {"row": 42, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void SfxCircleOfFire::remove_fx()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void SfxCircleOfFire::remove_me()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void SfxCircleOfFire::setup_seal1()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void SfxCircleOfFire::setup_seal2()"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void SfxCircleOfFire::setup_flame_sprite()"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_cloud.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SfxCloud::client_activate()"}, + {"row": 22, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 25, "col": 14, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 26, "col": 15, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 27, "col": 29, "type": "ERROR", "message": "No matching symbol 'PARAM'"}, + {"row": 31, "col": 28, "type": "ERROR", "message": "No matching symbol 'PARAM'"}, + {"row": 33, "col": 15, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void SfxCloud::smokes_loop()"}, + {"row": 49, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void SfxCloud::end_fx()"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SfxCloud::remove_me()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void SfxCloud::setup_smoke()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_cod.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void SfxCod::client_activate()"}, + {"row": 24, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 25, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 26, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 28, "col": 14, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 29, "col": 14, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void SfxCod::end_fx()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SfxCod::remove_me()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void SfxCod::setup_seal()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_dark_burst.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void SfxDarkBurst::client_activate()"}, + {"row": 16, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 17, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void SfxDarkBurst::game_prerender()"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void SfxDarkBurst::update_dark_burst()"}, + {"row": 47, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 50, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 54, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void SfxDarkBurst::end_fx()"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void SfxDarkBurst::remove_fx()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void SfxDarkBurst::setup_dark_burst()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_dburst.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void SfxDburst::OnRepeatTimer()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 26, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 29, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 33, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SfxDburst::client_activate()"}, + {"row": 41, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 42, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 44, "col": 8, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 46, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 54, "col": 4, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void SfxDburst::game_prerender()"}, + {"row": 71, "col": 68, "type": "ERROR", "message": "Expected expression value"}, + {"row": 71, "col": 68, "type": "ERROR", "message": "Instead found ''"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void SfxDburst::end_fx()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SfxDburst::remove_fx()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SfxDburst::update_aura()"}, + {"row": 107, "col": 76, "type": "ERROR", "message": "Expected expression value"}, + {"row": 107, "col": 76, "type": "ERROR", "message": "Instead found ''"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void SfxDburst::make_aura()"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_drunk.as", + "success": false, + "messages": [ + {"row": 9, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 9, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 10, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 15, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 16, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 16, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 17, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 17, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 19, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 19, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 20, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 20, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 21, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 21, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 145, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_explode.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SfxExplode::client_activate()"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 29, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 31, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 35, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 40, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void SfxExplode::remove_me()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void SfxExplode::create_sprites()"}, + {"row": 59, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void SfxExplode::update_sprite()"}, + {"row": 66, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void SfxExplode::setup_sprite()"}, + {"row": 90, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 90, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_fire_burst.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling SfxFireBurst::SfxFireBurst()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::client_activate()"}, + {"row": 27, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 29, "col": 20, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 30, "col": 23, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::remove_me()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::create_sprites()"}, + {"row": 52, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 52, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::setup_ring_sprite()"}, + {"row": 74, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_fire_staff.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void SfxFireStaff::client_activate()"}, + {"row": 10, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void SfxFireStaff::remove_fx()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SfxFireStaff::setup_seal()"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void SfxFireStaff::setup_fire_ring()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_fire_wave.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxFireWave::client_activate()"}, + {"row": 27, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void SfxFireWave::setup_fire_wave()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 40, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void SfxFireWave::setup_fire_sprites()"}, + {"row": 61, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 62, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void SfxFireWave::remove_fx()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void SfxFireWave::setup_fire_sprite()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_fire_wave2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling SfxFireWave2::SfxFireWave2()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling SfxIceWave2::SfxIceWave2()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void SfxIceWave2::client_activate()"}, + {"row": 33, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 34, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 35, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 38, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 44, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 46, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SfxIceWave2::make_sprites()"}, + {"row": 63, "col": 13, "type": "ERROR", "message": "Can't implicitly convert from 'string' to 'int&'."}, + {"row": 66, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 13, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void SfxIceWave2::remove_fx()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void SfxIceWave2::setup_ring_sprite()"}, + {"row": 86, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 86, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_fissure.as", + "success": false, + "messages": [ + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void SfxFissure::client_activate()"}, + {"row": 38, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 40, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 41, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 42, "col": 20, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 43, "col": 14, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 44, "col": 13, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void SfxFissure::end_fx()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void SfxFissure::remove_fx()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void SfxFissure::fissure_loop()"}, + {"row": 65, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'DRAWN_FISSURE_LENGTH'"}, + {"row": 69, "col": 7, "type": "ERROR", "message": "No matching symbol 'DRAWN_FISSURE_LENGTH'"}, + {"row": 71, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SfxFissure::fissure_debri()"}, + {"row": 102, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 102, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 111, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 111, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 119, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 119, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 120, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 120, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 128, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 128, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 129, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 129, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 137, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 137, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 138, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 138, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 146, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 146, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 147, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 147, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 160, "col": 2, "type": "INFO", "message": "Compiling void SfxFissure::update_rock()"}, + {"row": 164, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 165, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 166, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 168, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 169, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 172, "col": 2, "type": "INFO", "message": "Compiling void SfxFissure::setup_rock()"}, + {"row": 174, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 179, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 182, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 185, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 188, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 191, "col": 2, "type": "INFO", "message": "Compiling void SfxFissure::update_fire()"}, + {"row": 194, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 195, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 196, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 197, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 200, "col": 2, "type": "INFO", "message": "Compiling void SfxFissure::setup_fire()"}, + {"row": 202, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 203, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 204, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 205, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 206, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 207, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 208, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 209, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 210, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 213, "col": 13, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 215, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 217, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 220, "col": 14, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 222, "col": 5, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 225, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 226, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 227, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_flames.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling SfxFlames::SfxFlames()"}, + {"row": 23, "col": 16, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void SfxFlames::client_activate()"}, + {"row": 46, "col": 30, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 30, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void SfxFlames::drip_flames()"}, + {"row": 66, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void SfxFlames::game_prerender()"}, + {"row": 75, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 75, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void SfxFlames::effect_die()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void SfxFlames::setup_sprite1_flame()"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 96, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 98, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_flame_repulse.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void SfxFlameRepulse::client_activate()"}, + {"row": 12, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void SfxFlameRepulse::remove_fx()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SfxFlameRepulse::update_repulse_burst()"}, + {"row": 27, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void SfxFlameRepulse::setup_repulse_burst()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_follow_glow_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void SfxFollowGlowCl::client_activate()"}, + {"row": 19, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 19, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxFollowGlowCl::game_prerender()"}, + {"row": 27, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 28, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void SfxFollowGlowCl::remove_light()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_gib_burst.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxGibBurst::client_activate()"}, + {"row": 27, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 29, "col": 18, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 30, "col": 21, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 31, "col": 12, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 32, "col": 14, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 33, "col": 17, "type": "ERROR", "message": "No matching symbol 'param7'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void SfxGibBurst::start_gibs()"}, + {"row": 40, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void SfxGibBurst::create_gibs()"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void SfxGibBurst::setup_gib()"}, + {"row": 66, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void SfxGibBurst::remove_me()"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_hit_shield.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SfxHitShield::client_activate()"}, + {"row": 22, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 25, "col": 14, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 26, "col": 17, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void SfxHitShield::end_fx()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void SfxHitShield::remove_me()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SfxHitShield::setup_sprite()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void SfxHitShield::setup_sprite_negyaw()"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 68, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_icecage.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void SfxIcecage::client_activate()"}, + {"row": 18, "col": 77, "type": "ERROR", "message": "Expected expression value"}, + {"row": 18, "col": 77, "type": "ERROR", "message": "Instead found ''"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void SfxIcecage::end_cage_fx()"}, + {"row": 25, "col": 62, "type": "ERROR", "message": "Expected expression value"}, + {"row": 25, "col": 62, "type": "ERROR", "message": "Instead found ''"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void SfxIcecage::remove_fx()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SfxIcecage::do_gibs()"}, + {"row": 41, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 46, "col": 73, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 73, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SfxIcecage::update_icecage()"}, + {"row": 53, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 54, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 54, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 80, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 80, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void SfxIcecage::setup_icecage()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void SfxIcecage::setup_gibs()"}, + {"row": 113, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_icecage_old.as", + "success": false, + "messages": [ + {"row": 9, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 9, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 10, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 60, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_ice_burst.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling SfxIceBurst::SfxIceBurst()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling SfxFireBurst::SfxFireBurst()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::client_activate()"}, + {"row": 27, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 29, "col": 20, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 30, "col": 23, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::remove_me()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::create_sprites()"}, + {"row": 52, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 52, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::setup_ring_sprite()"}, + {"row": 74, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_ice_wave2.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling SfxIceWave2::SfxIceWave2()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void SfxIceWave2::client_activate()"}, + {"row": 33, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 34, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 35, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 38, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 44, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 46, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SfxIceWave2::make_sprites()"}, + {"row": 63, "col": 13, "type": "ERROR", "message": "Can't implicitly convert from 'string' to 'int&'."}, + {"row": 66, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 13, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void SfxIceWave2::remove_fx()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void SfxIceWave2::setup_ring_sprite()"}, + {"row": 86, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 86, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_jump_beams.as", + "success": false, + "messages": [ + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::OnSpawn()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::game_dynamically_created()"}, + {"row": 46, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 47, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::jump_beam()"}, + {"row": 59, "col": 17, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 59, "col": 17, "type": "INFO", "message": "Candidates are:"}, + {"row": 59, "col": 17, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 59, "col": 17, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 63, "col": 5, "type": "ERROR", "message": "No matching signatures to 'SfxJumpBeams::scan_target(string)'"}, + {"row": 63, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 63, "col": 5, "type": "INFO", "message": "void MS::SfxJumpBeams::scan_target()"}, + {"row": 69, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 73, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 76, "col": 20, "type": "ERROR", "message": "No matching symbol 'MAX_JUMPS'"}, + {"row": 78, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 82, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::scan_target()"}, + {"row": 96, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 96, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 120, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 120, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::beam_damage()"}, + {"row": 127, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetSkillLevel'"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 136, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::end_me_please()"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 142, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::func_is_ent()"}, + {"row": 145, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 147, "col": 8, "type": "WARN", "message": "Variable 'L_RETURN' hides another variable of same name in outer scope"}, + {"row": 150, "col": 3, "type": "WARN", "message": "Unreachable code"}, + {"row": 153, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::client_activate()"}, + {"row": 155, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 162, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 166, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::game_prerender()"}, + {"row": 172, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 172, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 174, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 174, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 177, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 177, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 181, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 181, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 185, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 185, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 190, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::fx_loop()"}, + {"row": 202, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 202, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 207, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::beam_jump()"}, + {"row": 216, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 216, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 225, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 225, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 263, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::end_fx()"}, + {"row": 266, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 269, "col": 2, "type": "INFO", "message": "Compiling void SfxJumpBeams::remove_fx()"}, + {"row": 272, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_lightning.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 9, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 10, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 11, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Expected identifier"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Instead found '('"}, + {"row": 83, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_lightning_cage.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningCage::client_activate()"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 16, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningCage::update_efield()"}, + {"row": 26, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningCage::end_fx()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningCage::remove_fx()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningCage::setup_efield()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_lightning_shield.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::client_activate()"}, + {"row": 19, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 20, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 21, "col": 21, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 22, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 23, "col": 24, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::SHIELD_DURATION(const string)'"}, + {"row": 26, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::lshield_on()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM1'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::lshield_loop()"}, + {"row": 48, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 62, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::remove_effect()"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_light_fade.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SfxLightFade::client_activate()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 18, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 19, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 25, "col": 9, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void SfxLightFade::game_prerender()"}, + {"row": 34, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void SfxLightFade::remove_fx()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_model_test.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void SfxModelTest::client_activate()"}, + {"row": 15, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 16, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 17, "col": 20, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 18, "col": 16, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching signatures to 'SfxModelTest::create_model(string)'"}, + {"row": 19, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 19, "col": 3, "type": "INFO", "message": "void MS::SfxModelTest::create_model()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void SfxModelTest::end_fx()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void SfxModelTest::remove_me()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void SfxModelTest::create_model()"}, + {"row": 35, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void SfxModelTest::setup_model()"}, + {"row": 41, "col": 76, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 76, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 78, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 78, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 75, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 75, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_motionblur.as", + "success": false, + "messages": [ + {"row": 9, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 9, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 10, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 75, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_motionblur_perm.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 76, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_motionblur_temp.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void SfxMotionblurTemp::client_activate()"}, + {"row": 19, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 20, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 21, "col": 16, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 22, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void SfxMotionblurTemp::end_fx()"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void SfxMotionblurTemp::remove_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SfxMotionblurTemp::game_prerender()"}, + {"row": 42, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void SfxMotionblurTemp::create_model()"}, + {"row": 58, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SfxMotionblurTemp::setup_model()"}, + {"row": 71, "col": 78, "type": "ERROR", "message": "Expected expression value"}, + {"row": 71, "col": 78, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 75, "type": "ERROR", "message": "Expected expression value"}, + {"row": 72, "col": 75, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_multi_lightning.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SfxMultiLightning::client_activate()"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxMultiLightning::remove_fx()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void SfxMultiLightning::zap_target()"}, + {"row": 33, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_poison_aura.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonAura::client_activate()"}, + {"row": 25, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 25, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 28, "col": 27, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 27, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 37, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonAura::game_prerender()"}, + {"row": 46, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 27, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 27, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonAura::end_fx()"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonAura::remove_me()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonAura::fx_loop()"}, + {"row": 70, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 70, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 71, "col": 27, "type": "ERROR", "message": "Expected expression value"}, + {"row": 71, "col": 27, "type": "ERROR", "message": "Instead found ''"}, + {"row": 76, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 76, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 79, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 82, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 82, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonAura::setup_smokes()"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_poison_burst.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling SfxPoisonBurst::SfxPoisonBurst()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonBurst::client_activate()"}, + {"row": 27, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 29, "col": 20, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 30, "col": 23, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonBurst::remove_me()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonBurst::create_sprites()"}, + {"row": 52, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 52, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonBurst::setup_ring_sprite()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_poison_cloud.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonCloud::client_activate()"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 29, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 30, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 33, "col": 15, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 44, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 46, "col": 8, "type": "WARN", "message": "Variable 'L_AOE_RATIO' hides another variable of same name in outer scope"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 51, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 52, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 56, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonCloud::end_fx()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonCloud::remove_fx()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonCloud::do_smokes()"}, + {"row": 79, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 79, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 85, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 85, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonCloud::update_smoke()"}, + {"row": 104, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 106, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 107, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 108, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 2, "type": "INFO", "message": "Compiling void SfxPoisonCloud::setup_smoke()"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 126, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_poison_explode.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling SfxPoisonExplode::SfxPoisonExplode()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SfxExplode::client_activate()"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 29, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 31, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 35, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 40, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void SfxExplode::remove_me()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void SfxExplode::create_sprites()"}, + {"row": 59, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void SfxExplode::update_sprite()"}, + {"row": 66, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void SfxExplode::setup_sprite()"}, + {"row": 90, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 90, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_prism_blast.as", + "success": false, + "messages": [ + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void SfxPrismBlast::OnRepeatTimer()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 37, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 41, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void SfxPrismBlast::client_activate()"}, + {"row": 49, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 50, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 51, "col": 20, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 53, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 54, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 56, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 60, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 64, "col": 8, "type": "ERROR", "message": "No matching symbol 'DO_SPRITES'"}, + {"row": 73, "col": 5, "type": "ERROR", "message": "No matching symbol 'setup_bawls'"}, + {"row": 79, "col": 25, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 81, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void SfxPrismBlast::game_prerender()"}, + {"row": 93, "col": 68, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 68, "type": "ERROR", "message": "Instead found ''"}, + {"row": 96, "col": 2, "type": "INFO", "message": "Compiling void SfxPrismBlast::do_circles()"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 114, "col": 2, "type": "INFO", "message": "Compiling void SfxPrismBlast::draw_circle_loop()"}, + {"row": 117, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 117, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 120, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 120, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 121, "col": 118, "type": "ERROR", "message": "Expected expression value"}, + {"row": 121, "col": 118, "type": "ERROR", "message": "Instead found ''"}, + {"row": 124, "col": 2, "type": "INFO", "message": "Compiling void SfxPrismBlast::end_fx()"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 130, "col": 2, "type": "INFO", "message": "Compiling void SfxPrismBlast::remove_fx()"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_pulse_sphere.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void SfxPulseSphere::client_activate()"}, + {"row": 41, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 84, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 84, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void SfxPulseSphere::end_fx()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void SfxPulseSphere::remove_fx()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void SfxPulseSphere::blur_loop()"}, + {"row": 80, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 80, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 81, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 81, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 82, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 82, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 83, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void SfxPulseSphere::setup_blur()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void SfxPulseSphere::setup_sphere()"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void SfxPulseSphere::update_sphere()"}, + {"row": 121, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 128, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 129, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 133, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_quake.as", + "success": false, + "messages": [ + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::client_activate()"}, + {"row": 46, "col": 15, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 46, "col": 15, "type": "ERROR", "message": "Instead found identifier '_5'"}, + {"row": 49, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::flaming_rocks_loop()"}, + {"row": 60, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 60, "col": 11, "type": "ERROR", "message": "Instead found identifier '_25'"}, + {"row": 63, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 72, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::cb_frock_land()"}, + {"row": 85, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 85, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::setup_frock()"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 106, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::update_frock()"}, + {"row": 108, "col": 23, "type": "ERROR", "message": "No conversion from 'const string' to 'float' available."}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::setup_frock_trail()"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 126, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::setup_frock_explode()"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 136, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 140, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::quake_loop()"}, + {"row": 146, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 146, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::do_circles()"}, + {"row": 168, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 168, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 177, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::do_rocks()"}, + {"row": 180, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 180, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 189, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::setup_rock()"}, + {"row": 191, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 192, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 193, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 194, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 195, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 196, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 197, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 198, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 199, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 200, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 201, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 202, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 203, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 206, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::update_rock()"}, + {"row": 222, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 222, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 232, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 232, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 240, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::end_fx()"}, + {"row": 243, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 246, "col": 2, "type": "INFO", "message": "Compiling void SfxQuake::remove_fx()"}, + {"row": 248, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_raura.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SfxRaura::client_activate()"}, + {"row": 22, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_DURATION(const string)'"}, + {"row": 28, "col": 18, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 28, "col": 18, "type": "INFO", "message": "Candidates are:"}, + {"row": 28, "col": 18, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 28, "col": 18, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void SfxRaura::remove_fx()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SfxRaura::remove_me()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SfxRaura::update_aura()"}, + {"row": 52, "col": 76, "type": "ERROR", "message": "Expected expression value"}, + {"row": 52, "col": 76, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 56, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 56, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void SfxRaura::make_aura()"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_repulse_burst.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SfxRepulseBurst::client_activate()"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 19, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 22, "col": 19, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 26, "col": 19, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SfxRepulseBurst::createsprite()"}, + {"row": 46, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void SfxRepulseBurst::setup_sprite1_sparkle()"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void SfxRepulseBurst::sprite_update()"}, + {"row": 67, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void SfxRepulseBurst::clear_sprites()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SfxRepulseBurst::remove_me()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_seal.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxSeal::client_activate()"}, + {"row": 27, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 29, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 30, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 31, "col": 20, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 35, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 4, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void SfxSeal::end_fx()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void SfxSeal::remove_fx()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void SfxSeal::make_snow()"}, + {"row": 75, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 75, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void SfxSeal::update_spider_seal()"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 110, "col": 2, "type": "INFO", "message": "Compiling void SfxSeal::setup_spider_seal()"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void SfxSeal::setup_seal1()"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 137, "col": 2, "type": "INFO", "message": "Compiling void SfxSeal::setup_seal2()"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 142, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 149, "col": 2, "type": "INFO", "message": "Compiling void SfxSeal::setup_snow()"}, + {"row": 151, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 152, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_seal_follow.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SfxSealFollow::client_activate()"}, + {"row": 38, "col": 67, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 67, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 39, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void SfxSealFollow::game_prerender()"}, + {"row": 45, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 46, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SfxSealFollow::remove_fx()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void SfxSealFollow::remove_me()"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SfxSealFollow::update_aura()"}, + {"row": 69, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 72, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void SfxSealFollow::make_aura()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_seal_instant.as", + "success": false, + "messages": [ + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::client_activate()"}, + {"row": 34, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 35, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 36, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 37, "col": 15, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 41, "col": 17, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 49, "col": 18, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 57, "col": 19, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 65, "col": 20, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::end_fx()"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::remove_fx()"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::setup_seal_instant()"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 106, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::fire_aura()"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::make_aura()"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 128, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::cold_aura()"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 133, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::setup_shpere()"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 136, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 142, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::create_beams()"}, + {"row": 161, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 161, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 168, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::poison_aura()"}, + {"row": 171, "col": 18, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 184, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::create_sprites()"}, + {"row": 187, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 187, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 192, "col": 2, "type": "INFO", "message": "Compiling void SfxSealInstant::setup_ring_sprite()"}, + {"row": 209, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 209, "col": 44, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_seal_warning.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SfxSealWarning::client_activate()"}, + {"row": 26, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 27, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 28, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 29, "col": 15, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 30, "col": 17, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 37, "col": 17, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 43, "col": 18, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 49, "col": 19, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 55, "col": 20, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void SfxSealWarning::end_fx()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void SfxSealWarning::remove_fx()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void SfxSealWarning::setup_seal_warn()"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void SfxSealWarning::update_seal_warn()"}, + {"row": 99, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 99, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 108, "col": 2, "type": "INFO", "message": "Compiling void SfxSealWarning::game_prerender()"}, + {"row": 112, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 112, "col": 47, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_sfaura.as", + "success": false, + "messages": [ + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void SfxSfaura::OnRepeatTimer()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 30, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 33, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 37, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 39, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SfxSfaura::client_activate()"}, + {"row": 58, "col": 82, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 82, "type": "ERROR", "message": "Instead found ''"}, + {"row": 59, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void SfxSfaura::game_prerender()"}, + {"row": 65, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 65, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void SfxSfaura::remove_fx()"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void SfxSfaura::remove_me()"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void SfxSfaura::update_aura()"}, + {"row": 88, "col": 76, "type": "ERROR", "message": "Expected expression value"}, + {"row": 88, "col": 76, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 92, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void SfxSfaura::make_aura()"}, + {"row": 114, "col": 75, "type": "ERROR", "message": "Expected expression value"}, + {"row": 114, "col": 75, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_shock_burst.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling SfxShockBurst::SfxShockBurst()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SfxShockBurst::client_activate()"}, + {"row": 22, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 20, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 25, "col": 23, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 26, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 28, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void SfxShockBurst::remove_me()"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void SfxShockBurst::create_beams()"}, + {"row": 50, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 50, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void SfxShockBurst::setup_seal()"}, + {"row": 60, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 62, "col": 8, "type": "WARN", "message": "Variable 'MODEL_BODY' hides another variable of same name in outer scope"}, + {"row": 64, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 66, "col": 8, "type": "WARN", "message": "Variable 'MODEL_BODY' hides another variable of same name in outer scope"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_splodie.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void SfxSplodie::client_activate()"}, + {"row": 18, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 19, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxSplodie::remove_me()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void SfxSplodie::setup_smoke()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_sprite.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void SfxSprite::client_activate()"}, + {"row": 13, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 14, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 15, "col": 18, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 16, "col": 21, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 19, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 22, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::F_DURATION(const string)'"}, + {"row": 26, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 27, "col": 4, "type": "ERROR", "message": "No matching symbol 'F_DURATION'"}, + {"row": 28, "col": 4, "type": "ERROR", "message": "No matching symbol 'F_DURATION'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void SfxSprite::update_temp_sprite()"}, + {"row": 35, "col": 33, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SfxSprite::remove_me()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SfxSprite::setup_temp_sprite()"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 52, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_sprite_in.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void SfxSpriteIn::client_activate()"}, + {"row": 18, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 19, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 20, "col": 19, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 21, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void SfxSpriteIn::remove_fx()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void SfxSpriteIn::setup_spawn_sprite()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_sprite_in_fancy.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void SfxSpriteInFancy::client_activate()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 20, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 21, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 22, "col": 19, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 23, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 25, "col": 16, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 26, "col": 14, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void SfxSpriteInFancy::game_prerender()"}, + {"row": 40, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void SfxSpriteInFancy::remove_fx()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void SfxSpriteInFancy::setup_spawn_sprite()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_stunring.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void SfxStunring::client_activate()"}, + {"row": 27, "col": 27, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 27, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 32, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void SfxStunring::end_fx()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SfxStunring::remove_fx()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SfxStunring::update_stun_ring()"}, + {"row": 51, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 70, "col": 95, "type": "ERROR", "message": "Expected expression value"}, + {"row": 70, "col": 95, "type": "ERROR", "message": "Instead found ''"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void SfxStunring::setup_stun_ring()"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_stunring_old.as", + "success": false, + "messages": [ + {"row": 9, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 9, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 10, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 16, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 16, "type": "ERROR", "message": "Instead found '('"}, + {"row": 77, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_stun_burst.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling SfxStunBurst::SfxStunBurst()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling SfxFireBurst::SfxFireBurst()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::client_activate()"}, + {"row": 27, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 29, "col": 20, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 30, "col": 23, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::remove_me()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::create_sprites()"}, + {"row": 52, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 52, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void SfxFireBurst::setup_ring_sprite()"}, + {"row": 74, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_summon_circle.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void SfxSummonCircle::client_activate()"}, + {"row": 18, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 19, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SfxSummonCircle::remove_me()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void SfxSummonCircle::setup_seal()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_viewheight.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 91, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_wave.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling SfxWave::SfxWave()"}, + {"row": 29, "col": 15, "type": "ERROR", "message": "'FX_DURATION' is already declared"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::OnSpawn()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'FX_DURATION'"}, + {"row": 42, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::game_dynamically_created()"}, + {"row": 47, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 48, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 49, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 50, "col": 14, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 51, "col": 31, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::burst_fx()"}, + {"row": 61, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::holywave_dodamage()"}, + {"row": 81, "col": 27, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 90, "col": 22, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 92, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 97, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_ENEMY'"}, + {"row": 99, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 103, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 104, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 108, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::ce_wave_do_heal()"}, + {"row": 114, "col": 25, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 122, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 124, "col": 8, "type": "WARN", "message": "Variable 'L_IS_ME' hides another variable of same name in outer scope"}, + {"row": 126, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 128, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 129, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int'"}, + {"row": 131, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 135, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 136, "col": 24, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 138, "col": 10, "type": "WARN", "message": "Variable 'L_ADD_DMG_POINTS' hides another variable of same name in outer scope"}, + {"row": 139, "col": 6, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 143, "col": 11, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 145, "col": 11, "type": "WARN", "message": "Variable 'L_ADD_DMG_POINTS' hides another variable of same name in outer scope"}, + {"row": 149, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int'"}, + {"row": 151, "col": 5, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::end_me_please()"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 159, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 162, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::client_activate()"}, + {"row": 175, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 175, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 182, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::trail_loop()"}, + {"row": 184, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 185, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 186, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 189, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::game_prerender()"}, + {"row": 201, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 201, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 205, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::fx_wave_update()"}, + {"row": 209, "col": 80, "type": "ERROR", "message": "Expected expression value"}, + {"row": 209, "col": 80, "type": "ERROR", "message": "Instead found ''"}, + {"row": 238, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::sfx_wave_explody()"}, + {"row": 241, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 244, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::fx_wave_setup()"}, + {"row": 254, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 254, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 264, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::fx_trail_setup()"}, + {"row": 272, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 272, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 281, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::end_fx()"}, + {"row": 284, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 287, "col": 2, "type": "INFO", "message": "Compiling void SfxWave::remove_fx()"}, + {"row": 290, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_webbed.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void SfxWebbed::client_activate()"}, + {"row": 28, "col": 75, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 75, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void SfxWebbed::ext_webbed()"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 36, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 38, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 40, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::FX_DECAY(const string)'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SfxWebbed::web_decay()"}, + {"row": 51, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 52, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 61, "col": 5, "type": "ERROR", "message": "No matching signatures to 'string::FX_DECAY(const string)'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void SfxWebbed::web_setup()"}, + {"row": 73, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 73, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 78, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 78, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 27, "type": "ERROR", "message": "Expected expression value"}, + {"row": 79, "col": 27, "type": "ERROR", "message": "Instead found ''"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void SfxWebbed::web_update()"}, + {"row": 96, "col": 76, "type": "ERROR", "message": "Expected expression value"}, + {"row": 96, "col": 76, "type": "ERROR", "message": "Instead found ''"}, + {"row": 99, "col": 80, "type": "ERROR", "message": "Expected expression value"}, + {"row": 99, "col": 80, "type": "ERROR", "message": "Instead found ''"}, + {"row": 121, "col": 2, "type": "INFO", "message": "Compiling void SfxWebbed::fx_die()"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void SfxWebbed::effect_die()"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 132, "col": 2, "type": "INFO", "message": "Compiling void SfxWebbed::func_get_new_pos()"}, + {"row": 134, "col": 27, "type": "ERROR", "message": "Expected expression value"}, + {"row": 134, "col": 27, "type": "ERROR", "message": "Instead found ''"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_whipflash.as", + "success": false, + "messages": [ + {"row": 9, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 9, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 34, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\sfx_zap_aura.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void SfxZapAura::client_activate()"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 16, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 17, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void SfxZapAura::fx_loop()"}, + {"row": 27, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 28, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void SfxZapAura::end_fx()"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void SfxZapAura::remove_fx()"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\soup.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 14, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 17, "col": 6, "type": "ERROR", "message": "Expected identifier"}, + {"row": 17, "col": 6, "type": "ERROR", "message": "Instead found '('"}, + {"row": 97, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\specialattack_haste.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\swords_gb\\gb_gib_explode.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void GbGibExplode::game_dynamically_created()"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 21, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling GibExplode::GibExplode()"}, + {"row": 15, "col": 32, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void GibExplode::OnSpawn()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void GibExplode::game_dynamically_created()"}, + {"row": 48, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 48, "col": 11, "type": "ERROR", "message": "Instead found identifier '_0'"}, + {"row": 49, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 49, "col": 11, "type": "ERROR", "message": "Instead found identifier '_5'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void GibExplode::explode()"}, + {"row": 55, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void GibExplode::remove_fx()"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void GibExplode::stop_bounce()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\swords_gb\\gut_buster.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\swords_gb\\sfx_gib_explode.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void SfxGibExplode::client_activate()"}, + {"row": 20, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 21, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void SfxGibExplode::setup_sprite()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 39, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\torch_flame.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\\webbed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling Effects::Effects()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/foutpost\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\dragoon.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\dragoon_boss.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\dragoon_boss_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\dragoon_elite.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_fire_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_fire_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_fire_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_fire_rand.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_fire_spear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_fire_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_fire_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_ice_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_ice_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_ice_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_ice_rand.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_ice_spear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_ice_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_ice_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_psn_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_psn_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_psn_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_psn_rand.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_psn_spear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_psn_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_psn_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_rand_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_rand_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_rand_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_rand_rand.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_rand_spear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_rand_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_rand_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_zap_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_zap_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_zap_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_zap_rand.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_zap_spear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_zap_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\e_zap_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\fire_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\fire_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\fire_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\fire_mage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\fire_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\fire_random_nm.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\fire_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\fire_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\ice_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\ice_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\ice_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\ice_mage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\ice_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\ice_random_nm.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\ice_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\ice_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\psn_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\psn_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\psn_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\psn_mage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\psn_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\psn_random_nm.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\psn_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\psn_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\random_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\random_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\random_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\random_mage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\random_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\random_random_nm.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\random_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\random_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\zap_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\zap_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\zap_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\zap_mage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\zap_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\zap_random_nm.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\zap_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\\dragoons\\zap_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/game_master\\dmgpoints.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void Dmgpoints::OnSpawn()"}, + {"row": 16, "col": 23, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 18, "col": 7, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 20, "col": 9, "type": "ERROR", "message": "No matching symbol 'G_DM_CODE'"}, + {"row": 22, "col": 9, "type": "WARN", "message": "Variable 'L_GENERATE_CODE' hides another variable of same name in outer scope"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int'"}, + {"row": 27, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void Dmgpoints::gm_find_strongest_player()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 38, "col": 4, "type": "ERROR", "message": "No matching signatures to 'GetAllPlayers(string)'"}, + {"row": 38, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 38, "col": 4, "type": "INFO", "message": "CBasePlayer@[]@ GetAllPlayers()"}, + {"row": 40, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 44, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveToken'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void Dmgpoints::find_strongest_player_loop()"}, + {"row": 57, "col": 20, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 58, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 60, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 61, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 63, "col": 27, "type": "ERROR", "message": "Can't implicitly convert from 'string' to 'int&'."}, + {"row": 64, "col": 20, "type": "ERROR", "message": "Can't implicitly convert from 'string' to 'int&'."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/game_master\\map_transitions.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void MapTransitions::game_transition_triggered()"}, + {"row": 16, "col": 24, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 17, "col": 18, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 18, "col": 26, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 19, "col": 19, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 20, "col": 9, "type": "ERROR", "message": "No matching symbol 'ValidateMapName'"}, + {"row": 22, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SendInfoMessageToAll(const string)'"}, + {"row": 22, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 22, "col": 4, "type": "INFO", "message": "void SendInfoMessageToAll(const string&in, const string&in)"}, + {"row": 22, "col": 4, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 26, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 31, "col": 5, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 35, "col": 5, "type": "ERROR", "message": "No matching signatures to 'MapTransitions::gm_manual_map_change(string)'"}, + {"row": 35, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 35, "col": 5, "type": "INFO", "message": "void MS::MapTransitions::gm_manual_map_change()"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void MapTransitions::gm_manual_map_change()"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 45, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 46, "col": 25, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 49, "col": 11, "type": "WARN", "message": "Variable 'L_DEST_SPAWN' hides another variable of same name in outer scope"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ServerCommand'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 59, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_SERVER_LOCKED'"}, + {"row": 61, "col": 11, "type": "WARN", "message": "Variable 'L_CMD' hides another variable of same name in outer scope"}, + {"row": 62, "col": 4, "type": "ERROR", "message": "No matching symbol 'ServerCommand'"}, + {"row": 66, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void MapTransitions::game_triggered()"}, + {"row": 81, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 81, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 90, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 90, "col": 50, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/game_master\\vote_generic.as", + "success": false, + "messages": [ + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_create_vote()"}, + {"row": 33, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 40, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 41, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 42, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 43, "col": 16, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 44, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 53, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_send_vote()"}, + {"row": 60, "col": 15, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 60, "col": 15, "type": "ERROR", "message": "Instead found reserved keyword '!'"}, + {"row": 64, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::get_voters()"}, + {"row": 75, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 75, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 75, "col": 79, "type": "ERROR", "message": "Expected ';'"}, + {"row": 75, "col": 79, "type": "ERROR", "message": "Instead found ')'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::get_voters_filter()"}, + {"row": 84, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_send_ballots()"}, + {"row": 95, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 95, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 95, "col": 79, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 79, "type": "ERROR", "message": "Instead found ')'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::send_menus()"}, + {"row": 103, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 103, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::game_menu_getoptions()"}, + {"row": 108, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 109, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 115, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_build_ballot()"}, + {"row": 123, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 123, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 124, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 127, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 127, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::game_menu_cancel()"}, + {"row": 133, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 133, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 144, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_gvote_count()"}, + {"row": 147, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 147, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 152, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 152, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 168, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_tally_votes()"}, + {"row": 173, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 173, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 174, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 174, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 175, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 175, "col": 49, "type": "ERROR", "message": "Instead found ''"}, + {"row": 180, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::func_get_vote_winner()"}, + {"row": 184, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 188, "col": 25, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 189, "col": 25, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 201, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHOOSE_LAST'"}, + {"row": 203, "col": 19, "type": "ERROR", "message": "Can't implicitly convert from 'string' to 'const int'."}, + {"row": 203, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'const int' available."}, + {"row": 205, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 210, "col": 3, "type": "WARN", "message": "Unreachable code"}, + {"row": 213, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::get_vote_winner()"}, + {"row": 215, "col": 25, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 216, "col": 25, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 217, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 24, "type": "ERROR", "message": "Can't implicitly convert from 'string' to 'int&'."}, + {"row": 224, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 232, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_votemap()"}, + {"row": 234, "col": 18, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 237, "col": 4, "type": "ERROR", "message": "No matching symbol 'gm_manual_map_change'"}, + {"row": 241, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_votepvp()"}, + {"row": 243, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 245, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 248, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 252, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 254, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 256, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'const string'"}, + {"row": 259, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 263, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 267, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_pvp()"}, + {"row": 269, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 271, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 272, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetPvP'"}, + {"row": 276, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 277, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetPvP'"}, + {"row": 281, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_votelock()"}, + {"row": 283, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 286, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 287, "col": 4, "type": "ERROR", "message": "No matching symbol 'ServerCommand'"}, + {"row": 290, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientCommand'"}, + {"row": 297, "col": 4, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"}, + {"row": 303, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 307, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_votekick()"}, + {"row": 309, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 310, "col": 25, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 312, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 313, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 314, "col": 79, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 315, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 316, "col": 3, "type": "ERROR", "message": "No matching symbol 'gm_ynvote'"}, + {"row": 319, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_voteban()"}, + {"row": 321, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 322, "col": 25, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 324, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 325, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 326, "col": 78, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 327, "col": 3, "type": "ERROR", "message": "No matching symbol 'gm_ynvote'"}, + {"row": 330, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_got_yes_vote()"}, + {"row": 332, "col": 8, "type": "ERROR", "message": "No matching symbol 'VOTE_OVER'"}, + {"row": 334, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 336, "col": 8, "type": "ERROR", "message": "No matching symbol 'VOTE_OVER'"}, + {"row": 338, "col": 3, "type": "ERROR", "message": "No matching symbol 'YES_VOTES'"}, + {"row": 339, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 341, "col": 9, "type": "ERROR", "message": "No matching symbol 'VOTE_QUIET_MODE'"}, + {"row": 343, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 345, "col": 8, "type": "ERROR", "message": "No matching symbol 'VOTE_QUIET_MODE'"}, + {"row": 347, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SendInfoMessageToAll(const string)'"}, + {"row": 347, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 347, "col": 4, "type": "INFO", "message": "void SendInfoMessageToAll(const string&in, const string&in)"}, + {"row": 347, "col": 4, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 351, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::gm_got_no_vote()"}, + {"row": 353, "col": 8, "type": "ERROR", "message": "No matching symbol 'VOTE_OVER'"}, + {"row": 355, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 357, "col": 8, "type": "ERROR", "message": "No matching symbol 'VOTE_OVER'"}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'NO_VOTES'"}, + {"row": 360, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 362, "col": 9, "type": "ERROR", "message": "No matching symbol 'VOTE_QUIET_MODE'"}, + {"row": 364, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'VOTE_QUIET_MODE'"}, + {"row": 368, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SendInfoMessageToAll(const string)'"}, + {"row": 368, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 368, "col": 4, "type": "INFO", "message": "void SendInfoMessageToAll(const string&in, const string&in)"}, + {"row": 368, "col": 4, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 372, "col": 2, "type": "INFO", "message": "Compiling void VoteGeneric::player_left()"}, + {"row": 384, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 384, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 385, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 385, "col": 33, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/game_master.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\armorer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\generalstore.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\grocer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\hunter.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\kendra.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void Kendra::OnSpawn()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMaxHealth'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFOV'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void Kendra::say_hi()"}, + {"row": 43, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void Kendra::say_rumor()"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void Kendra::say_upset()"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 68, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void Kendra::say_upset2()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void Kendra::say_upset3()"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 83, "col": 2, "type": "INFO", "message": "Compiling void Kendra::game_menu_getoptions()"}, + {"row": 90, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 91, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 92, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 92, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 93, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 93, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void Kendra::say_ending()"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Kendra::say_ending2()"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void Kendra::say_reward()"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 117, "col": 2, "type": "INFO", "message": "Compiling void Kendra::say_steambow()"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\magicshop.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\masterp.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void Masterp::OnSpawn()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFOV'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void Masterp::say_hi()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void Masterp::say_job()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void Masterp::say_rumor()"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void Masterp::say_temple()"}, + {"row": 53, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 56, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void Masterp::say_temple2()"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void FirstNpc::game_targeted_by_player()"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\mayor.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void Mayor::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\miner.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void Miner::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMaxHealth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFOV'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void Miner::say_hi()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void Miner::say_job()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void Miner::say_rumor()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void Miner::say_undermountains()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void Miner::say_undermountains2()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void Miner::say_undermountains3()"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\priest.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void Priest::OnSpawn()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFOV'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_hi()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_theobold()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_hall()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_job()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void Priest::say_job2()"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void FirstNpc::game_targeted_by_player()"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\storage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\tavern.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\\vendor.as", + "success": false, + "messages": [ + {"row": 236, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 50, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gertenheld_cave\\game_master.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::bgoblin_chief_died()"}, + {"row": 13, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'gold_spew'"}, + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::vgoblin_chief_died()"}, + {"row": 20, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'gold_spew'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gertenheld_cave\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/global\\server\\treasure.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling Treasure::Treasure()"}, + {"row": 32, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 32, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void Treasure::add_epic_array()"}, + {"row": 74, "col": 20, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 75, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 80, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 82, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 83, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void Treasure::add_epic_item()"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'GlobalArrayAdd'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/global\\sv_globals.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling SvGlobals::SvGlobals()"}, + {"row": 62, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 86, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 86, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 157, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 157, "col": 36, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/global.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling Global::Global()"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 36, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 37, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling Races::Races()"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 41, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 51, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 51, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 78, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 78, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 86, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 86, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 98, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 98, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 100, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 100, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 101, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 101, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 105, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 105, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 106, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 106, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 118, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 118, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 127, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 127, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 128, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 128, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 138, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 138, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling Effects::Effects()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling SvGlobals::SvGlobals()"}, + {"row": 62, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 86, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 86, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 157, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 157, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling Treasure::Treasure()"}, + {"row": 32, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 32, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void Treasure::add_epic_array()"}, + {"row": 74, "col": 20, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 75, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 80, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 82, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 83, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void Treasure::add_epic_item()"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'GlobalArrayAdd'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblintown\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\\chest2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\\chest3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\\chest4.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\\chest5.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\\chest6.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\\chest7.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\\chest8.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\\chest9.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\\prisoner.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void Prisoner::game_precache()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void Prisoner::OnSpawn()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMaxHealth'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void Prisoner::say_hi()"}, + {"row": 51, "col": 19, "type": "ERROR", "message": "No matching symbol 'HEARING_RANGE'"}, + {"row": 55, "col": 5, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 59, "col": 5, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void Prisoner::say_no()"}, + {"row": 67, "col": 19, "type": "ERROR", "message": "No matching symbol 'HEARING_RANGE'"}, + {"row": 71, "col": 5, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 75, "col": 5, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void Prisoner::say_yes()"}, + {"row": 83, "col": 19, "type": "ERROR", "message": "No matching symbol 'HEARING_RANGE'"}, + {"row": 87, "col": 5, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 92, "col": 5, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 93, "col": 5, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void Prisoner::ending()"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void Prisoner::ending2()"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 110, "col": 2, "type": "INFO", "message": "Compiling void Prisoner::reward()"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 116, "col": 2, "type": "INFO", "message": "Compiling void Prisoner::playerdist()"}, + {"row": 118, "col": 12, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 119, "col": 14, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 119, "col": 14, "type": "INFO", "message": "Candidates are:"}, + {"row": 119, "col": 14, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 119, "col": 14, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 120, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 121, "col": 11, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 121, "col": 11, "type": "INFO", "message": "Candidates are:"}, + {"row": 121, "col": 11, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 121, "col": 11, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 122, "col": 14, "type": "ERROR", "message": "No matching signatures to 'Distance(string, string)'"}, + {"row": 122, "col": 14, "type": "INFO", "message": "Candidates are:"}, + {"row": 122, "col": 14, "type": "INFO", "message": "float Distance(const Vector3&in, const Vector3&in)"}, + {"row": 122, "col": 14, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/hall_of_deralia\\king_of_deralia.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::OnSpawn()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 41, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_DAUGHTER_RESCUED'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'FREQ_MOURN'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::get_guard_id()"}, + {"row": 48, "col": 15, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 49, "col": 15, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::do_mourn()"}, + {"row": 54, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_DAUGHTER_RESCUED'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'FREQ_MOURN'"}, + {"row": 56, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 58, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 60, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 63, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 65, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 66, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 68, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 70, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::say_hi()"}, + {"row": 76, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 78, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 80, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 81, "col": 4, "type": "ERROR", "message": "No matching symbol 'face_speaker'"}, + {"row": 83, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(const string)'"}, + {"row": 83, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 83, "col": 8, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 83, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 85, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 86, "col": 4, "type": "ERROR", "message": "No matching symbol 'face_speaker'"}, + {"row": 88, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_DAUGHTER_RESCUED'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::say_daughter1()"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::say_daughter2()"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 107, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::say_daughter3()"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 114, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::say_daughter4()"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 123, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::say_daughter5()"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 126, "col": 3, "type": "ERROR", "message": "No matching symbol 'face_speaker'"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 131, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::say_daughter6()"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 137, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::say_daughter7()"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 149, "col": 2, "type": "INFO", "message": "Compiling void KingOfDeralia::game_menu_getoptions()"}, + {"row": 153, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 153, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 154, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 154, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 155, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 155, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\bandit_boss_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\blacksmith.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\default_human.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\dr_who.as", + "success": false, + "messages": [ + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling DrWho::DrWho()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void DrWho::hear_apple()"}, + {"row": 54, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void DrWho::scan_for_ally()"}, + {"row": 62, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 65, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void DrWho::say_hi()"}, + {"row": 72, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 74, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(const string)'"}, + {"row": 74, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 74, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 74, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 76, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 82, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 83, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 84, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 86, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 97, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 98, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 115, "col": 2, "type": "INFO", "message": "Compiling void DrWho::hear_no()"}, + {"row": 117, "col": 8, "type": "ERROR", "message": "No matching symbol 'TALKING'"}, + {"row": 118, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 123, "col": 2, "type": "INFO", "message": "Compiling void DrWho::open_portal()"}, + {"row": 125, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 137, "col": 2, "type": "INFO", "message": "Compiling void DrWho::game_menu_getoptions()"}, + {"row": 140, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 140, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 142, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 142, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 143, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 144, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 144, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 147, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 147, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 148, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 148, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 149, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 149, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 150, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 150, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 153, "col": 2, "type": "INFO", "message": "Compiling void DrWho::payment_failed()"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 157, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 159, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 161, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 163, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 167, "col": 2, "type": "INFO", "message": "Compiling void DrWho::timer_rant_loop()"}, + {"row": 169, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 171, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::RND_DELAY(const string)'"}, + {"row": 177, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_TALKING'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 181, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 185, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 189, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 193, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 197, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 201, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 205, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 209, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 213, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 217, "col": 2, "type": "INFO", "message": "Compiling void DrWho::chat_loop()"}, + {"row": 219, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 221, "col": 4, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 223, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 225, "col": 4, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 227, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 229, "col": 4, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 4, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 235, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 237, "col": 4, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\erkold.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void Erkold::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\game_master.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::OnSpawn()"}, + {"row": 10, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_OLDHELENA_AXE_PICKED'"}, + {"row": 12, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::helena_bandit_chest()"}, + {"row": 18, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'gm_createnpc'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\genstore.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\harry.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\helena.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void Helena::OnSpawn()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void Helena::check_for_raid()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 34, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void Helena::start_raid()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 46, "col": 18, "type": "ERROR", "message": "No matching symbol 'HPREQ_MEDIUM_WAVE'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 50, "col": 19, "type": "ERROR", "message": "No matching symbol 'HPREQ_MEDIUM_WAVE'"}, + {"row": 52, "col": 19, "type": "ERROR", "message": "No matching symbol 'HPREQ_STRONG_WAVE'"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 57, "col": 19, "type": "ERROR", "message": "No matching symbol 'HPREQ_STRONG_WAVE'"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void Helena::bandit_raid()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void Helena::bandit_raid2()"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void Helena::raid_done()"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void Helena::manual_start()"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 107, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\helena_fear.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void HelenaFear::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void HelenaFear::make_fear()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\helena_npc.as", + "success": false, + "messages": [ + {"row": 154, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\larva_chest1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\memorialguard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\merc.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\old_harry.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::OnRepeatTimer()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'CanSee'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::OnSpawn()"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::say_hi()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::say_hi2test()"}, + {"row": 76, "col": 12, "type": "ERROR", "message": "Can't implicitly convert from 'const string' to 'int&'."}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'setsayso'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::say_quiet()"}, + {"row": 89, "col": 93, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 89, "col": 93, "type": "ERROR", "message": "Instead found identifier 'deterioate'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::say_quiet2()"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 99, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::say_orcs()"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::say_dorfgan()"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 110, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::say_erkold()"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 116, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::say_serrold()"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 128, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::recv_enoughgold()"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'OFFER_AMT'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 136, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::recv_notenoughgold()"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'OFFER_AMT'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 144, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::playerused()"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 150, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::createmystore()"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 157, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::flee()"}, + {"row": 164, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 165, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 168, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 171, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::shiver()"}, + {"row": 173, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 176, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 187, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::scream()"}, + {"row": 190, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 193, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 195, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 196, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 209, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::struck()"}, + {"row": 211, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 212, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 216, "col": 2, "type": "INFO", "message": "Compiling void OldHarry::parry()"}, + {"row": 218, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\orcguard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\orcwarboss.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\orcwarboss_ghost.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\orcwarrior_hard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\OTTC1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\serrold.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void Serrold::OnRepeatTimer()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'CanSee'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void Serrold::OnSpawn()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void Serrold::greet_players()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void Serrold::say_hi()"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void Serrold::say_hi2()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void Serrold::say_orcs()"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 91, "col": 2, "type": "INFO", "message": "Compiling void Serrold::say_rumor()"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void Serrold::say_dorfgan()"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 103, "col": 2, "type": "INFO", "message": "Compiling void Serrold::say_erkold()"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 109, "col": 2, "type": "INFO", "message": "Compiling void Serrold::say_serrold()"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 115, "col": 2, "type": "INFO", "message": "Compiling void Serrold::say_harry()"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 121, "col": 2, "type": "INFO", "message": "Compiling void Serrold::say_innopen()"}, + {"row": 123, "col": 16, "type": "ERROR", "message": "Can't implicitly convert from 'const string' to 'int&'."}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 126, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 131, "col": 2, "type": "INFO", "message": "Compiling void Serrold::say_thanks()"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 137, "col": 2, "type": "INFO", "message": "Compiling void Serrold::robbed()"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void Serrold::recv_enoughgold()"}, + {"row": 150, "col": 3, "type": "ERROR", "message": "No matching symbol 'OFFER_AMT'"}, + {"row": 152, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void Serrold::recv_notenoughgold()"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'OFFER_AMT'"}, + {"row": 160, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 164, "col": 2, "type": "INFO", "message": "Compiling void Serrold::flee()"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 168, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 171, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 174, "col": 2, "type": "INFO", "message": "Compiling void Serrold::shiver()"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 179, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 190, "col": 2, "type": "INFO", "message": "Compiling void Serrold::scream()"}, + {"row": 193, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 196, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 198, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 199, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 212, "col": 2, "type": "INFO", "message": "Compiling void Serrold::struck()"}, + {"row": 214, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 215, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVolume'"}, + {"row": 216, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 220, "col": 2, "type": "INFO", "message": "Compiling void Serrold::parry()"}, + {"row": 222, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\spid_chest1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\stonewall.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Stonewall::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\storage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\structure.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Structure::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\towerarcher.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\troll.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\vendor.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\vendor8.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\weapstore.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\\woodenwall.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Woodenwall::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\\first_death.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void FirstDeath::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\\first_hireling.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void FirstHireling::game_targeted_by_player()"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\\first_marketsquare.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void FirstMarketsquare::game_targeted_by_player()"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\\first_monster.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\\first_npc.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void FirstNpc::game_targeted_by_player()"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\\first_party.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void FirstParty::game_party_join()"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\\first_skillgain.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void FirstSkillgain::game_learnskill()"}, + {"row": 10, "col": 9, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 11, "col": 9, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\\first_transition.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void FirstTransition::game_transition_entered()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 16, "col": 11, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"}, + {"row": 26, "col": 16, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 27, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 24, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 29, "col": 23, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void FirstTransition::trans_message()"}, + {"row": 36, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 41, "col": 32, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 45, "col": 32, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 58, "col": 16, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\\first_vendor.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void FirstVendor::game_targeted_by_player()"}, + {"row": 11, "col": 11, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void FirstVendor::help_vendor_magic()"}, + {"row": 19, "col": 11, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/heras\\GhorAsh.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/heras\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/heras\\TC_heras.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/highlands_msc\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/hunderswamp\\tubequeen.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\\base_book.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\\book_armor.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\\book_felewyn.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\\book_wand.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\\fragment_idemark.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\\game_master.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::OnSpawn()"}, + {"row": 12, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::game_triggered()"}, + {"row": 19, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 21, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 25, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 34, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 36, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 38, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 40, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 42, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 43, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 45, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 51, "col": 19, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 52, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 57, "col": 19, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 58, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 61, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 63, "col": 19, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 64, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetProp'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\\guard_leofing.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\\survivor_alfgar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\\wizard_ishmeea.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/island1\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_base.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_base_helmet.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_base_helmet_new.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_base_hybrid.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void ArmorBaseHybrid::OnDeploy()' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void ArmorBaseHybrid::OnDrop()' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void ArmorBaseHybrid::OnTakeDamage(CBaseEntity@, CBaseEntity@, int, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_base_new.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_belmont.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_body.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling ArmorBody::ArmorBody()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_dark.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_d_test.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_faura.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_faura_cl.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void ArmorFauraCl::client_activate()"}, + {"row": 34, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void ArmorFauraCl::game_prerender()"}, + {"row": 43, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 43, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void ArmorFauraCl::remove_fx()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void ArmorFauraCl::remove_fx2()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void ArmorFauraCl::update_flame_circle()"}, + {"row": 62, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 65, "col": 29, "type": "ERROR", "message": "Expected expression value"}, + {"row": 65, "col": 29, "type": "ERROR", "message": "Instead found ''"}, + {"row": 81, "col": 80, "type": "ERROR", "message": "Expected expression value"}, + {"row": 81, "col": 80, "type": "ERROR", "message": "Instead found ''"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void ArmorFauraCl::setup_flame_circle()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_fireliz.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_golden.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_alvo1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_barnum.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_bronze.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_dark.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_elyg.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_gaz1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_gaz2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_golden.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_gray.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_hat.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_knight.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_mongol.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_plate.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_helm_undead.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_knight.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_leather.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_leather_gaz1.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_leather_studded.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_leather_torn.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_mongol.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_paura.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_pheonix55.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_plate.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_rehab.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_rehab_cl.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void ArmorRehabCl::client_activate()"}, + {"row": 44, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void ArmorRehabCl::fx_loop()"}, + {"row": 53, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void ArmorRehabCl::end_fx()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void ArmorRehabCl::create_element_sprites()"}, + {"row": 74, "col": 56, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 56, "type": "ERROR", "message": "Instead found ''"}, + {"row": 75, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 75, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 77, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 77, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 79, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 81, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 81, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 83, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 85, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 85, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void ArmorRehabCl::setup_element_sprite()"}, + {"row": 104, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 104, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 105, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 106, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_rm.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_salamander.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\armor_venom.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_2haxe.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_axe.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_b.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_base_onehanded.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_base_twohanded.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_battleaxe.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_c.as", + "success": false, + "messages": [ + {"row": 275, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 275, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 349, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_c_cl.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void AxesCCl::client_activate()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void AxesCCl::update_caxe_sprite()"}, + {"row": 25, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 26, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void AxesCCl::game_prerender()"}, + {"row": 36, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 36, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 111, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 111, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void AxesCCl::end_fx()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void AxesCCl::remove_fx()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void AxesCCl::setup_caxe_sprite()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_df.as", + "success": false, + "messages": [ + {"row": 107, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 107, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 167, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_doubleaxe.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_dragon.as", + "success": false, + "messages": [ + {"row": 93, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 93, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 205, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_dragon_cl.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void AxesDragonCl::make_clouds()"}, + {"row": 22, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void AxesDragonCl::setup_cloud()"}, + {"row": 43, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 43, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void AxesDragonCl::end_fx()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void AxesDragonCl::remove_fx()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_golden.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_golden_ref.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_greataxe.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_gthunder11.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_poison1.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_rsmallaxe.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_runeaxe.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_scythe.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_smallaxe.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_sp.as", + "success": false, + "messages": [ + {"row": 165, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 165, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 279, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_ss.as", + "success": false, + "messages": [ + {"row": 91, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 91, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 161, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_td.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_tf.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_thunder11.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_ti.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_tl.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_tp.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\axes_vaxe.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_book.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_crest.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_crystal.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_drink.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_effect_armor.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseEffectArmor::OnDrop()' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseEffectArmor::OnDeploy()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_effect_weilded.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseEffectWeilded::OnDeploy()' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseEffectWeilded::OnDrop()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_elemental_resist.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseElementalResist::OnDrop()' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseElementalResist::OnDeploy()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_item.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_item_extras.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_kick.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void BaseKick::register_charge1()"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 29, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 30, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 31, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 32, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 37, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 38, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 38, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void BaseKick::kickatk_start()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void BaseKick::kick_go()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayViewAnim'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayOwnerAnim'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseKick::game_dodamage()"}, + {"row": 111, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 111, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 140, "col": 2, "type": "INFO", "message": "Compiling void BaseKick::restore_hands()"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_lighted.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 15, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 19, "col": 13, "type": "ERROR", "message": "Expected identifier"}, + {"row": 19, "col": 13, "type": "ERROR", "message": "Instead found '('"}, + {"row": 130, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_loopsnd.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling BaseLoopsnd::BaseLoopsnd()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void BaseLoopsnd::loopsnd_end()"}, + {"row": 34, "col": 13, "type": "ERROR", "message": "No matching symbol 'LOOPSND_CHANNEL'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BaseLoopsnd::loopsnd()"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 41, "col": 46, "type": "ERROR", "message": "No matching symbol 'LOOPSND_NAME'"}, + {"row": 41, "col": 30, "type": "ERROR", "message": "No matching symbol 'LOOPSND_VOLUME'"}, + {"row": 41, "col": 13, "type": "ERROR", "message": "No matching symbol 'LOOPSND_CHANNEL'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'LOOPSND_LENGTH'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_medal.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_melee.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_miscitem.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_ranged.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_scan_area.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling BaseScanArea::BaseScanArea()"}, + {"row": 12, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 12, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseScanArea::game_dynamically_Created()"}, + {"row": 17, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_scroll.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_sheath.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_ticket.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_tome.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_vampire.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseVampire::try_vampire_target()"}, + {"row": 13, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 13, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void BaseVampire::check_can_vampire()"}, + {"row": 21, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 22, "col": 21, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 23, "col": 27, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 24, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityRace'"}, + {"row": 25, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_varied_attacks.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void BaseVariedAttacks::check_attack_anim()"}, + {"row": 19, "col": 8, "type": "ERROR", "message": "No matching symbol 'BITEM_UNDERSKILLED'"}, + {"row": 20, "col": 8, "type": "ERROR", "message": "No matching symbol 'IsKeyDown'"}, + {"row": 24, "col": 8, "type": "ERROR", "message": "No matching symbol 'IsKeyDown'"}, + {"row": 28, "col": 8, "type": "ERROR", "message": "No matching symbol 'IsKeyDown'"}, + {"row": 32, "col": 8, "type": "ERROR", "message": "No matching symbol 'IsKeyDown'"}, + {"row": 36, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_STAB'"}, + {"row": 38, "col": 22, "type": "ERROR", "message": "No matching symbol 'BV_EXTRA_ANIM_STAB'"}, + {"row": 39, "col": 21, "type": "ERROR", "message": "No matching symbol 'MELEE_DMG'"}, + {"row": 40, "col": 21, "type": "ERROR", "message": "No matching symbol 'MELEE_ACCURACY'"}, + {"row": 41, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 42, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 43, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetAttackProp'"}, + {"row": 44, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetAttackProp'"}, + {"row": 47, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 48, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_SWIPE'"}, + {"row": 50, "col": 22, "type": "ERROR", "message": "No matching symbol 'BV_EXTRA_ANIM_SWIPE'"}, + {"row": 51, "col": 21, "type": "ERROR", "message": "No matching symbol 'MELEE_DMG'"}, + {"row": 52, "col": 21, "type": "ERROR", "message": "No matching symbol 'MELEE_ACCURACY'"}, + {"row": 53, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 54, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetAttackProp'"}, + {"row": 56, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetAttackProp'"}, + {"row": 59, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 60, "col": 21, "type": "ERROR", "message": "No matching symbol 'BV_REGULAR_ATTACK_ANIM'"}, + {"row": 61, "col": 20, "type": "ERROR", "message": "No matching symbol 'MELEE_DMG'"}, + {"row": 62, "col": 20, "type": "ERROR", "message": "No matching symbol 'MELEE_ACCURACY'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAttackProp'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAttackProp'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_weapon.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\base_weapon_new.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_af.as", + "success": false, + "messages": [ + {"row": 81, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 81, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 104, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_base_onehanded.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_base_twohanded.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_bf.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_bt.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_calrianmace.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_club.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_darkmaul.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_db.as", + "success": false, + "messages": [ + {"row": 69, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 69, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 272, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_eb.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_frost321.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_fs.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_gauntlets.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_gauntlets_bear.as", + "success": false, + "messages": [ + {"row": 163, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 163, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 318, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_gauntlets_demon.as", + "success": false, + "messages": [ + {"row": 204, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 204, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 285, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_gauntlets_fe1.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_gauntlets_fe2.as", + "success": false, + "messages": [ + {"row": 103, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 103, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 137, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_gauntlets_fire.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_gauntlets_ic.as", + "success": false, + "messages": [ + {"row": 204, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 204, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 285, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_gauntlets_leather.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_gauntlets_serpant.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_granitemace.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_granitemaul.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_greatmaul.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_hammer1.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_hammer2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_hammer3.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_hammer_dorfgan.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_lightning.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_lrod11.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_mace.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_maul.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_mithral.as", + "success": false, + "messages": [ + {"row": 69, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 69, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 272, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_ms1.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_ms2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_ms3.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_northmaul972.as", + "success": false, + "messages": [ + {"row": 65, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 65, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 318, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_ravenmace.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_rudolfsmace.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_rustyhammer2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_snake_staff.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_staff_a.as", + "success": false, + "messages": [ + {"row": 230, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 230, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 479, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_staff_a_charge_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffAChargeCl::client_activate()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 19, "col": 18, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffAChargeCl::add_charge_level()"}, + {"row": 63, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 71, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 71, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 72, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 73, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 73, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffAChargeCl::end_fx()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffAChargeCl::remove_fx()"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 90, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffAChargeCl::game_prerender()"}, + {"row": 101, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 101, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 104, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 104, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 108, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffAChargeCl::setup_thirdperson_flare()"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffAChargeCl::setup_eye()"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 126, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 129, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffAChargeCl::setup_eye_max()"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_staff_a_cl.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffACl::client_activate()"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffACl::fx_loop()"}, + {"row": 34, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 69, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffACl::end_fx()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffACl::remove_fx()"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffACl::game_prerender()"}, + {"row": 89, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 90, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 90, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 92, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 93, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 99, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffACl::setup_flare()"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_staff_f.as", + "success": false, + "messages": [ + {"row": 349, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 349, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 392, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_staff_f_old.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_staff_i.as", + "success": false, + "messages": [ + {"row": 211, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 211, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 508, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_staff_i_cl.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffICl::client_activate()"}, + {"row": 17, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 17, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 19, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 19, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffICl::end_fx()"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffICl::remove_fx()"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffICl::fx_loop()"}, + {"row": 38, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffICl::update_ice_sprite()"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void BluntStaffICl::setup_ice_sprite()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_test.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\blunt_warhammer.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_base.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_crossbow_heavy33.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_crossbow_light.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_firebird.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_frost.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_frost_cl.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void BowsFrostCl::client_activate()"}, + {"row": 24, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 27, "col": 13, "type": "ERROR", "message": "No matching symbol 'VOF_START'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void BowsFrostCl::remove_sprites()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void BowsFrostCl::remove_me()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void BowsFrostCl::make_sprites()"}, + {"row": 62, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void BowsFrostCl::update_sprite()"}, + {"row": 75, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 75, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 79, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 93, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 104, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 104, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 109, "col": 2, "type": "INFO", "message": "Compiling void BowsFrostCl::setup_sprite()"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_longbow.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_orcbow.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_orion1.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_orion1_cl.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void BowsOrion1Cl::client_activate()"}, + {"row": 19, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 19, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 21, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 21, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 22, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 22, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void BowsOrion1Cl::update_ball()"}, + {"row": 31, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 31, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 34, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void BowsOrion1Cl::add_charge()"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ACT_SCALE'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void BowsOrion1Cl::charge_release()"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void BowsOrion1Cl::remove_fx()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void BowsOrion1Cl::setup_ball()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_shortbow.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_swiftbow.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_sxbow.as", + "success": false, + "messages": [ + {"row": 153, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 153, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 309, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_telf1.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_telf2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_telf3.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_telf4.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_thornbow.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\bows_treebow.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\brokenkey_1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\brokenkey_2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\brokenkey_3.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_barnum.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_bou.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_cloak_blue.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_crew.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_crow.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_cwog.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_darktide.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_deralia.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_fellowship.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_fmu.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_forestcroth.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_gag.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_gow.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_hod.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_hov.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_justice.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_neko.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_noclicky.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_pathos.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_pirates.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_revenge.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_rip100.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_socialist.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_sor.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_tdk.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_tfl.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_torkalath.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_torkie.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_valor.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_wario.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_wildfire.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_wotn.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_w_1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_w_2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crest_yoku.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crossbow_heavy.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\crossbow_light.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\afflicter.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void Afflicter::try_applyeffect()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'find_beam_target'"}, + {"row": 26, "col": 23, "type": "ERROR", "message": "No matching symbol 'BEAM_TARGET'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void Afflicter::set_affliction()"}, + {"row": 35, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 42, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 49, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 63, "col": 11, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 70, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 80, "col": 22, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 81, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\ammo.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\archery.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\armor.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\arrows.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\axes.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\bluntarms.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\magic.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\martialarts.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\packs.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\polearms.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\potions.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\quest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\rings.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\smallarms.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\chests\\swords.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\copypaste.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void Copypaste::copy_target()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'find_beam_target'"}, + {"row": 29, "col": 7, "type": "ERROR", "message": "No matching symbol 'BEAM_TARGET'"}, + {"row": 33, "col": 22, "type": "ERROR", "message": "No matching symbol 'BEAM_TARGET'"}, + {"row": 37, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_NOTARG'"}, + {"row": 41, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 46, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetScriptName'"}, + {"row": 47, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 48, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 49, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 50, "col": 25, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 51, "col": 50, "type": "ERROR", "message": "No matching symbol 'GetEntityWidth'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void Copypaste::paste_target()"}, + {"row": 60, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 38, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\damager.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void Damager::try_damage()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'find_beam_target'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void Damager::set_damager()"}, + {"row": 23, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\effects\\loreldian_soup.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 9, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 11, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 11, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 40, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\menus\\beams.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void Beams::menu_listbeams()"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void Beams::set_beam_type()"}, + {"row": 37, "col": 60, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 60, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void Beams::menu_listafflicttype()"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 74, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 78, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 78, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 79, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 79, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 83, "col": 2, "type": "INFO", "message": "Compiling void Beams::menu_listafflictduration()"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 86, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 86, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 94, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 94, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 98, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 98, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 99, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 99, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 100, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 100, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 101, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 101, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Beams::menu_listafflictdmg()"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 109, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 109, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 114, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 114, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 118, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 118, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 127, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 127, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 128, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 128, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 134, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 134, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 139, "col": 2, "type": "INFO", "message": "Compiling void Beams::menu_damager_setdmg()"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 142, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 142, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 143, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 144, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 144, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 145, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 145, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 146, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 146, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 147, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 147, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 148, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 148, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 149, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 149, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 150, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 150, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 151, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 151, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 152, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 152, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 153, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 153, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 154, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 154, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 155, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 155, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 156, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 156, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 157, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 157, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 158, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 158, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 159, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 159, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 160, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 160, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 161, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 161, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 162, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 162, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 163, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 163, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 164, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 164, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 165, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 165, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 166, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 166, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 167, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 167, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 168, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 168, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 169, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 169, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 170, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 170, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 173, "col": 2, "type": "INFO", "message": "Compiling void Beams::set_afflict_type()"}, + {"row": 175, "col": 11, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 180, "col": 2, "type": "INFO", "message": "Compiling void Beams::set_afflict_duration()"}, + {"row": 182, "col": 11, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 187, "col": 2, "type": "INFO", "message": "Compiling void Beams::set_afflict_dmg()"}, + {"row": 189, "col": 11, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 190, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 193, "col": 2, "type": "INFO", "message": "Compiling void Beams::set_damager()"}, + {"row": 195, "col": 58, "type": "ERROR", "message": "Expected expression value"}, + {"row": 195, "col": 58, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\menus\\main.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void Main::OnSpawn()"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void Main::game_dynamically_created()"}, + {"row": 34, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 35, "col": 13, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void Main::game_menu_getoptions()"}, + {"row": 40, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_listbeams'"}, + {"row": 51, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_listafflicttype'"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_listafflictduration'"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_listafflictdmg'"}, + {"row": 63, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_playerlist'"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_playerlevels'"}, + {"row": 71, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_addgold'"}, + {"row": 75, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_treasure'"}, + {"row": 79, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_treasure_weapons'"}, + {"row": 83, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_trigger'"}, + {"row": 87, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_trigger_successful'"}, + {"row": 91, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_waypoint_save'"}, + {"row": 95, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_waypoint_load'"}, + {"row": 99, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_damager_setdmg'"}, + {"row": 103, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_tele_mode'"}, + {"row": 107, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_tele_player'"}, + {"row": 111, "col": 4, "type": "ERROR", "message": "No matching symbol 'menu_choose_waypoints'"}, + {"row": 115, "col": 2, "type": "INFO", "message": "Compiling void Main::menu_main()"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 118, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 118, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 123, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 127, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 127, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 128, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 128, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 131, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 134, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 134, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 135, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 135, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 138, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 138, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 139, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 139, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 140, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 140, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 142, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 142, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 143, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 146, "col": 2, "type": "INFO", "message": "Compiling void Main::set_menu_type()"}, + {"row": 148, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 149, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 152, "col": 2, "type": "INFO", "message": "Compiling void Main::ext_menu_open()"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'OpenMenu'"}, + {"row": 157, "col": 2, "type": "INFO", "message": "Compiling void Main::ext_menu_main()"}, + {"row": 160, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 163, "col": 2, "type": "INFO", "message": "Compiling void Main::spawn_galats()"}, + {"row": 168, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 168, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void Beams::menu_listbeams()"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void Beams::set_beam_type()"}, + {"row": 37, "col": 60, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 60, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void Beams::menu_listafflicttype()"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 74, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 78, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 78, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 79, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 79, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 83, "col": 2, "type": "INFO", "message": "Compiling void Beams::menu_listafflictduration()"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 86, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 86, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 94, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 94, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 98, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 98, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 99, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 99, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 100, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 100, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 101, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 101, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Beams::menu_listafflictdmg()"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 109, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 109, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 114, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 114, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 118, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 118, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 127, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 127, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 128, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 128, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 134, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 134, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 139, "col": 2, "type": "INFO", "message": "Compiling void Beams::menu_damager_setdmg()"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 142, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 142, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 143, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 144, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 144, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 145, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 145, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 146, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 146, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 147, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 147, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 148, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 148, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 149, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 149, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 150, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 150, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 151, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 151, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 152, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 152, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 153, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 153, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 154, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 154, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 155, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 155, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 156, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 156, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 157, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 157, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 158, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 158, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 159, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 159, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 160, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 160, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 161, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 161, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 162, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 162, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 163, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 163, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 164, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 164, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 165, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 165, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 166, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 166, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 167, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 167, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 168, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 168, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 169, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 169, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 170, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 170, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 173, "col": 2, "type": "INFO", "message": "Compiling void Beams::set_afflict_type()"}, + {"row": 175, "col": 11, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 180, "col": 2, "type": "INFO", "message": "Compiling void Beams::set_afflict_duration()"}, + {"row": 182, "col": 11, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 187, "col": 2, "type": "INFO", "message": "Compiling void Beams::set_afflict_dmg()"}, + {"row": 189, "col": 11, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 190, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 193, "col": 2, "type": "INFO", "message": "Compiling void Beams::set_damager()"}, + {"row": 195, "col": 58, "type": "ERROR", "message": "Expected expression value"}, + {"row": 195, "col": 58, "type": "ERROR", "message": "Instead found ''"}, + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Player::menu_playerlist()"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 19, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void Player::toggle_soup()"}, + {"row": 31, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 34, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 38, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 39, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void Player::toggle_notarget()"}, + {"row": 45, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 52, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 53, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void Player::menu_playerlevels()"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 62, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 70, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 70, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 74, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 78, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 78, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 79, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 79, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 82, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 82, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 84, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 84, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 86, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 86, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 90, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 94, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 94, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void Player::setlevels()"}, + {"row": 99, "col": 60, "type": "ERROR", "message": "Expected expression value"}, + {"row": 99, "col": 60, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Player::menu_addgold()"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 109, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 109, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 110, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 110, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 114, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 114, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 118, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 118, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 122, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void Player::addgold()"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 130, "col": 2, "type": "INFO", "message": "Compiling void Player::set_respawn()"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Treasure::menu_treasure()"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 13, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void Treasure::menu_treasure_weapons()"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 44, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 44, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 51, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 51, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 54, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 54, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void Treasure::create_treasure()"}, + {"row": 81, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 81, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void Trigger::menu_trigger()"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void Trigger::loop_trigger_history()"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void Trigger::use_trigger()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void Trigger::game_heardtext()"}, + {"row": 76, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 76, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void Trigger::stop_listening()"}, + {"row": 81, "col": 27, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void Trigger::menu_trigger_successful()"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void Waypoints::menu_choose_waypoints()"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void Waypoints::menu_waypoint_save()"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 33, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 37, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 44, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 44, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 45, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 45, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void Waypoints::save_waypoint()"}, + {"row": 54, "col": 43, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 57, "col": 11, "type": "WARN", "message": "Variable 'L_WAYPOINTS' hides another variable of same name in outer scope"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetToken'"}, + {"row": 60, "col": 22, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void Waypoints::menu_waypoint_load()"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 74, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 75, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 75, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 76, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 80, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 80, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 85, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 85, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 86, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 86, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 87, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 87, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 91, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 98, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 98, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 107, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 108, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 108, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 109, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 109, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 118, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 118, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 120, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 128, "col": 2, "type": "INFO", "message": "Compiling void Waypoints::load_waypoint()"}, + {"row": 130, "col": 43, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 131, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 132, "col": 19, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void WarpPlayer::menu_tele_mode()"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 21, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void WarpPlayer::set_tele_mode()"}, + {"row": 30, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'set_menu_type'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void WarpPlayer::menu_tele_player()"}, + {"row": 37, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 80, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 80, "type": "ERROR", "message": "Instead found ')'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void WarpPlayer::add_player_to_menu()"}, + {"row": 45, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 49, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 50, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 51, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 51, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void WarpPlayer::teleport_player()"}, + {"row": 59, "col": 46, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 59, "col": 20, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 63, "col": 44, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 63, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\menus\\player.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Player::menu_playerlist()"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 19, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void Player::toggle_soup()"}, + {"row": 31, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 34, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 38, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 39, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void Player::toggle_notarget()"}, + {"row": 45, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 52, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 53, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void Player::menu_playerlevels()"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 62, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 70, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 70, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 74, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 78, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 78, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 79, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 79, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 82, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 82, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 84, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 84, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 86, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 86, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 90, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 94, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 94, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void Player::setlevels()"}, + {"row": 99, "col": 60, "type": "ERROR", "message": "Expected expression value"}, + {"row": 99, "col": 60, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Player::menu_addgold()"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 109, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 109, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 110, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 110, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 114, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 114, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 118, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 118, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 122, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void Player::addgold()"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 130, "col": 2, "type": "INFO", "message": "Compiling void Player::set_respawn()"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\menus\\treasure.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Treasure::menu_treasure()"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 13, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 14, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void Treasure::menu_treasure_weapons()"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 44, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 44, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 51, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 51, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 54, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 54, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 64, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void Treasure::create_treasure()"}, + {"row": 81, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 81, "col": 36, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\menus\\trigger.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void Trigger::menu_trigger()"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void Trigger::loop_trigger_history()"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void Trigger::use_trigger()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void Trigger::game_heardtext()"}, + {"row": 76, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 76, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void Trigger::stop_listening()"}, + {"row": 81, "col": 27, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void Trigger::menu_trigger_successful()"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\menus\\warp_player.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void WarpPlayer::menu_tele_mode()"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 21, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 24, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void WarpPlayer::set_tele_mode()"}, + {"row": 30, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'set_menu_type'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void WarpPlayer::menu_tele_player()"}, + {"row": 37, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 80, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 80, "type": "ERROR", "message": "Instead found ')'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void WarpPlayer::add_player_to_menu()"}, + {"row": 45, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 49, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 50, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 51, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 51, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void WarpPlayer::teleport_player()"}, + {"row": 59, "col": 46, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 59, "col": 20, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 63, "col": 44, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 63, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\menus\\waypoints.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void Waypoints::menu_choose_waypoints()"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 19, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void Waypoints::menu_waypoint_save()"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 33, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 37, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 44, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 44, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 45, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 45, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void Waypoints::save_waypoint()"}, + {"row": 54, "col": 43, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 57, "col": 11, "type": "WARN", "message": "Variable 'L_WAYPOINTS' hides another variable of same name in outer scope"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetToken'"}, + {"row": 60, "col": 22, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void Waypoints::menu_waypoint_load()"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 74, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 75, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 75, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 76, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 80, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 80, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 85, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 85, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 86, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 86, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 87, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 87, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 91, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 98, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 98, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 107, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 108, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 108, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 109, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 109, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 118, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 118, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 120, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 128, "col": 2, "type": "INFO", "message": "Compiling void Waypoints::load_waypoint()"}, + {"row": 130, "col": 43, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 131, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 132, "col": 19, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\physgun.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void Physgun::try_physgun()"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 22, "col": 4, "type": "ERROR", "message": "No matching symbol 'find_beam_target'"}, + {"row": 25, "col": 9, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 25, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 25, "col": 9, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 25, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 28, "col": 61, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 28, "col": 61, "type": "INFO", "message": "Candidates are:"}, + {"row": 28, "col": 61, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 28, "col": 61, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 28, "col": 48, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 29, "col": 6, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void Physgun::update_physgun_target()"}, + {"row": 48, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void Physgun::game__attack1()"}, + {"row": 61, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff\\remover.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void Remover::try_remove()"}, + {"row": 29, "col": 76, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 29, "col": 76, "type": "ERROR", "message": "Instead found identifier 'name'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\dev_staff.as", + "success": false, + "messages": [ + {"row": 165, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\drink_ale.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\drink_forsuth.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\drink_mead.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\drink_wine.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\fist_bare.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gauntlets_normal.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gold_pouch_10.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GoldPouchBase::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDescription'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWorldModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimExt'"}, + {"row": 27, "col": 16, "type": "ERROR", "message": "No matching symbol 'GOLD_AMT'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gold_pouch_100.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GoldPouchBase::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDescription'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWorldModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimExt'"}, + {"row": 27, "col": 16, "type": "ERROR", "message": "No matching symbol 'GOLD_AMT'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gold_pouch_1000.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GoldPouchBase::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDescription'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWorldModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimExt'"}, + {"row": 27, "col": 16, "type": "ERROR", "message": "No matching symbol 'GOLD_AMT'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gold_pouch_200.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GoldPouchBase::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDescription'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWorldModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimExt'"}, + {"row": 27, "col": 16, "type": "ERROR", "message": "No matching symbol 'GOLD_AMT'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gold_pouch_25.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GoldPouchBase::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDescription'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWorldModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimExt'"}, + {"row": 27, "col": 16, "type": "ERROR", "message": "No matching symbol 'GOLD_AMT'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gold_pouch_5.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GoldPouchBase::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDescription'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWorldModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimExt'"}, + {"row": 27, "col": 16, "type": "ERROR", "message": "No matching symbol 'GOLD_AMT'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gold_pouch_50.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GoldPouchBase::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDescription'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWorldModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimExt'"}, + {"row": 27, "col": 16, "type": "ERROR", "message": "No matching symbol 'GOLD_AMT'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gold_pouch_500.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GoldPouchBase::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDescription'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWorldModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimExt'"}, + {"row": 27, "col": 16, "type": "ERROR", "message": "No matching symbol 'GOLD_AMT'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gold_pouch_base.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GoldPouchBase::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDescription'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetViewModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWorldModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimExt'"}, + {"row": 27, "col": 16, "type": "ERROR", "message": "No matching symbol 'GOLD_AMT'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\gown_edana.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\health_apple.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\health_lpotion.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\health_mpotion.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\health_spotion.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_bar_coffer.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_bearclaw.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_book_evil.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_book_latin.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_book_old.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_bracelet.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_bulge.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_cannon_ball.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_charm_w1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_charm_w2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_charm_w3.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_coin.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_crow_shard.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_crystal_reloc.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_crystal_return.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_debug.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void ItemDebug::item_debug2()"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void ItemDebug::item_debug_delay()"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 90, "col": 2, "type": "INFO", "message": "Compiling void ItemDebug::clitem_debug()"}, + {"row": 93, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 106, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 114, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 114, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 131, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 131, "col": 38, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_deed.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_devhousekey.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_djinn_fire.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 12, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 18, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 18, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 110, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_djinn_light.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 12, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 18, "col": 16, "type": "ERROR", "message": "Expected identifier"}, + {"row": 18, "col": 16, "type": "ERROR", "message": "Instead found '('"}, + {"row": 113, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_documents.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_eh.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_erkoldsnote.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_feather.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_fstatue.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_galat_note_10.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_galat_note_100.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_gaxe_handle.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_goblinhead.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_gwond.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_hat.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_housekey.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 12, "col": 14, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 14, "type": "ERROR", "message": "Instead found '('"}, + {"row": 34, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ikeletter.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ikelog.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_js.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_key_rusty.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_key_sewer.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ledger.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_letter.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_letter_almund.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_letter_mayor.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_light_crystal.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_lockpick.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_log.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_log_magic.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_manuscript.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_necro_note.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ore_lorel.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_picashlborn.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_precache.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling ItemPrecache::ItemPrecache()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ratskull.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_riddleanswers.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_riddleanswers2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ring.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ring_mana.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ring_percept.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ring_ryza.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ring_ryza_gem1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ring_ryza_gem2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ring_ryza_gem3.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_ring_thunder22.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_roland_letter.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_runicsymbol.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_runicsymbol2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_s1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_s2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_s3.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_s4.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_s5.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_sewernote.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_sorcv.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_sorcv_cl.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void ItemSorcvCl::client_activate()"}, + {"row": 19, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 21, "col": 12, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 22, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_DUR(const string)'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void ItemSorcvCl::update_sprite()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void ItemSorcvCl::update_flip_sprite()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void ItemSorcvCl::remove_me()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void ItemSorcvCl::setup_sprite()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void ItemSorcvCl::setup_flip_sprite()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 76, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_storageroomkey.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_summon_crystal.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_telfh1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_telfh2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_telfh3.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_telfh4.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_thiefmap.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_belmont.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_dark.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_faura.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_fireliz.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_golden.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_helm_bronze.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_helm_dark.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_helm_gaz1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_helm_gaz2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_helm_golden.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_helm_gray.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_helm_knight.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_helm_mongol.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_helm_plate.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_helm_undead.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_knight.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_leather.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_leather_gaz1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_leather_studded.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_leather_torn.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_mongol.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_paura.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_pheonix55.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_plate.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_salamander.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_armor_venom.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_2haxe.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_axe.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_battleaxe.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_doubleaxe.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_dragon.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_golden.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_golden_ref.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_greataxe.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_gthunder11.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_poison1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_rsmallaxe.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_runeaxe.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_scythe.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_smallaxe.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_td.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_tf.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_thunder11.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_ti.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_tl.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_tp.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_axes_vaxe.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_calrianmace.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_club.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_darkmaul.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_gauntlets.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_gauntlets_demon.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_gauntlets_fire.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_gauntlets_leather.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_gauntlets_serpant.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_granitemace.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_granitemaul.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_greatmaul.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_hammer1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_hammer2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_hammer3.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_hammer_dorfgan.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_lrod11.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_mace.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_maul.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_mithral.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_northmaul972.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_ravenmace.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_rudolfsmace.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_rustyhammer2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_snake_staff.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_blunt_warhammer.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_crossbow_heavy33.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_crossbow_light.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_firebird.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_frost.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_longbow.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_orcbow.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_orion1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_shortbow.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_swiftbow.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_thornbow.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_bows_treebow.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_gauntlets_normal.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_shields_buckler.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_shields_ironshield.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_shields_lironshield.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_shields_rune.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_shields_urdual.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_shields_wooden.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_bone_blade.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_craftedknife.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_craftedknife2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_craftedknife3.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_craftedknife4.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_dagger.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_dirk.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_fangstooth.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_flamelick.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_frozentongueonflagpole.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_huggerdagger.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_huggerdagger2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_huggerdagger3.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_huggerdagger4.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_knife.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_k_fire.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_nh.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_rknife.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_smallarms_royaldagger.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_bastardsword.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_blood_drinker.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_frostblade55.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_giceblade.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_iceblade.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_katana.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_katana2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_katana3.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_katana4.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_liceblade.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_longsword.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_lostblade.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_m2sword.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_msword.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_nkatana.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_novablade12.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_poison1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_rsword.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_rune_green.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_scimitar.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_shortsword.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_skullblade.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_skullblade2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_skullblade3.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_skullblade4.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_spiderblade.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_testskin.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_testsub.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_volcano.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_tk_swords_wolvesbane.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_torch.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_torch_light.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 15, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 19, "col": 13, "type": "ERROR", "message": "Expected identifier"}, + {"row": 19, "col": 13, "type": "ERROR", "message": "Instead found '('"}, + {"row": 130, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\item_warbosshead.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\key_blue.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\key_brass.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\key_crystal.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\key_forged.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\key_gold.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\key_green.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\key_ice.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\key_red.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\key_skeleton.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\key_treasury.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\lrod_cl.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 9, "col": 18, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 18, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 10, "col": 18, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 18, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 11, "col": 18, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 18, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 18, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 18, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 15, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 15, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected '('"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 16, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 16, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "Expected '('"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 19, "col": 8, "type": "ERROR", "message": "Expected identifier"}, + {"row": 19, "col": 8, "type": "ERROR", "message": "Instead found '('"}, + {"row": 236, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_acid_bolt.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 71, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_base.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_base_cl.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void MagicHandBaseCl::OnRepeatTimer()"}, + {"row": 34, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 40, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 41, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void MagicHandBaseCl::game_precache()"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void MagicHandBaseCl::client_activate()"}, + {"row": 56, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 56, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void MagicHandBaseCl::make_sprite_1()"}, + {"row": 62, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 63, "col": 65, "type": "ERROR", "message": "No matching symbol 'OFS_POS'"}, + {"row": 63, "col": 56, "type": "ERROR", "message": "No matching symbol 'OFS_NEG'"}, + {"row": 63, "col": 39, "type": "ERROR", "message": "No matching symbol 'OFS_POS'"}, + {"row": 63, "col": 30, "type": "ERROR", "message": "No matching symbol 'OFS_NEG'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void MagicHandBaseCl::setup_sprite_1()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void MagicHandBaseCl::create_light()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void MagicHandBaseCl::effect_die()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_blizzard.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 71, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_conjure_venom_claws.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_div_glow.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_div_rejuvenate.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_fire_ball.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 69, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_fire_dart.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 71, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_fire_wall.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_frost_bolt.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_healing_circle.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_healing_wave.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_holy_hammer.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_ice_blast.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 79, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_ice_lance.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_ice_shield.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_ice_shield_lesser.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_ice_wall.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_lightning_chain.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_lightning_chain_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void MagicHandLightningChainCl::client_activate()"}, + {"row": 15, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void MagicHandLightningChainCl::draw_beams()"}, + {"row": 22, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 22, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 34, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 39, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void MagicHandLightningChainCl::draw_beams_loop()"}, + {"row": 56, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 56, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 59, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 44, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_lightning_disc.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_lightning_storm.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_lightning_weak.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 24, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 24, "type": "ERROR", "message": "Instead found '('"}, + {"row": 110, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_lightning_weak_cl.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 11, "col": 18, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 18, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 18, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 18, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 13, "col": 18, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 18, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 18, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 18, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 16, "col": 26, "type": "ERROR", "message": "Expected identifier"}, + {"row": 16, "col": 26, "type": "ERROR", "message": "Instead found '('"}, + {"row": 157, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_poison.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_poison_cloud.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_summon_base.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_summon_bear1.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_summon_fangtooth.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_summon_guard.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_summon_rat.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_summon_undead.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 21, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_test_spell.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling MagicHandTestSpell::MagicHandTestSpell()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void MagicHandTestSpell::createsprite()"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"}, + {"row": 36, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 36, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void MagicHandTestSpell::client_activate()"}, + {"row": 42, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void MagicHandTestSpell::new_cast()"}, + {"row": 47, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void MagicHandTestSpell::setup_sprite1_sparkle()"}, + {"row": 63, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void MagicHandTestSpell::sprite_update()"}, + {"row": 78, "col": 17, "type": "ERROR", "message": "No matching symbol 'MY_OWNER_ORIGIN'"}, + {"row": 80, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_trollcano.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_turn_undead.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\magic_hand_volcano.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 14, "col": 18, "type": "ERROR", "message": "Expected identifier"}, + {"row": 14, "col": 18, "type": "ERROR", "message": "Instead found '('"}, + {"row": 81, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 207, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_bravery.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_demon_blood.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_faura.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_fbrand.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_flesheater1.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_flesheater2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_font.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_forget.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_gprotection.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_immune_cold.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_immune_fire.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_immune_lightning.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_immune_poison.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_leadfoot.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_lleadfoot.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_lsb.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_mpotion.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_paura.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_protection.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_prot_spiders.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_regen.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_resist_cold.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_resist_fire.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_sb.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_soup.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_speed.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_st.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\mana_vampire.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\pack_archersquiver.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\pack_bank.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void PackBank::OnDeploy()' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void PackBank::OnPickup(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\pack_base.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\pack_bigsack.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\pack_boh.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\pack_boh_lesser.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\pack_heavybackpack.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\pack_quiver.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\pack_sack.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\pack_xbowquiver.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_a.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_ba.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_base.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_dra.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_h.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_hal.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_har.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_nag.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_ph.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_ph_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhCl::client_activate()"}, + {"row": 23, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 23, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhCl::end_fx()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhCl::remove_fx()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhCl::do_lightning()"}, + {"row": 48, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 52, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 52, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhCl::update_fork_sprite()"}, + {"row": 67, "col": 77, "type": "ERROR", "message": "Expected expression value"}, + {"row": 67, "col": 77, "type": "ERROR", "message": "Instead found ''"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhCl::setup_fork_sprite()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_ph_spin_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhSpinCl::OnRepeatTimer()"}, + {"row": 19, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 19, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 20, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 20, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 21, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 21, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 24, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 24, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 28, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhSpinCl::client_activate()"}, + {"row": 42, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhSpinCl::end_fx()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhSpinCl::remove_fx()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhSpinCl::update_fork_sprite()"}, + {"row": 67, "col": 77, "type": "ERROR", "message": "Expected expression value"}, + {"row": 67, "col": 77, "type": "ERROR", "message": "Instead found ''"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void PolearmsPhSpinCl::setup_fork_sprite()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_qs.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_sl.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_sp.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_test.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 16, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 18, "col": 14, "type": "ERROR", "message": "Expected identifier"}, + {"row": 18, "col": 14, "type": "ERROR", "message": "Instead found '('"}, + {"row": 276, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 276, "col": 12, "type": "ERROR", "message": "Instead found '+'"}, + {"row": 335, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_ti.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\polearms_tri.as", + "success": false, + "messages": [ + {"row": 669, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 669, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 1103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_acid_bolt.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_acid_bomb.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_base.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_blunt.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_bluntwooden.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_broadhead.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_fbow.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_fire.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_fire_cl.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::client_activate()"}, + {"row": 29, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::transfer_owner()"}, + {"row": 45, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::owner_update()"}, + {"row": 53, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::game_prerender()"}, + {"row": 61, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::end_smoke()"}, + {"row": 78, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 78, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::do_smokes()"}, + {"row": 85, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 85, "col": 11, "type": "ERROR", "message": "Instead found identifier '_25'"}, + {"row": 88, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 88, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::end_fx()"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 103, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::remove_fx()"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 108, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::setup_smoke()"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::setup_fire_sprite()"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 126, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 134, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowFireCl::loop_sound()"}, + {"row": 136, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_fire_cl_old.as", + "success": false, + "messages": [ + {"row": 9, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 9, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 10, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 9, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 11, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 20, "type": "ERROR", "message": "Expected identifier"}, + {"row": 14, "col": 20, "type": "ERROR", "message": "Instead found '('"}, + {"row": 120, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_frost.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_generic.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_gholy.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_gpoison.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_holy.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_jagged.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_lightning.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_npc.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_npc_dyn.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_phx.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_phx_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling ProjArrowPhxCl::ProjArrowPhxCl()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowPhxCl::client_activate()"}, + {"row": 26, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 26, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 28, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowPhxCl::remove_fx()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowPhxCl::setup_flame_burst()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_poison.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_silvertipped.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_spiral.as", + "success": false, + "messages": [ + {"row": 111, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_spiral_cl.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowSpiralCl::client_activate()"}, + {"row": 34, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowSpiralCl::fx_loop()"}, + {"row": 50, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 50, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 54, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 54, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 56, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 56, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowSpiralCl::end_fx()"}, + {"row": 62, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowSpiralCl::remove_me()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowSpiralCl::game_prerender()"}, + {"row": 75, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 75, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 76, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 76, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void ProjArrowSpiralCl::setup_spiral_sprite()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_arrow_wooden.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_base.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_blizzard2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_bolt_fire.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_bolt_generic.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_bolt_iron.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_bolt_poison.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_bolt_silver.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_bolt_steel.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_bolt_wooden.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_cannon_ball.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_catapaultball.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_crescent.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_crescent_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ProjCrescentCl::client_activate()"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 13, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 19, "col": 13, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 20, "col": 13, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void ProjCrescentCl::sv_update_vel()"}, + {"row": 29, "col": 13, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 30, "col": 13, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 31, "col": 13, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void ProjCrescentCl::update_cre()"}, + {"row": 37, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 39, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 41, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void ProjCrescentCl::end_fx()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void ProjCrescentCl::remove_fx()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void ProjCrescentCl::setup_cre()"}, + {"row": 65, "col": 76, "type": "ERROR", "message": "Expected expression value"}, + {"row": 65, "col": 76, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_elemental_cl.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::OnRepeatTimer()"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::client_activate()"}, + {"row": 40, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::game_prerender()"}, + {"row": 54, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 54, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::sv_update_vel()"}, + {"row": 61, "col": 13, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 62, "col": 13, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 63, "col": 13, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::update_cloud()"}, + {"row": 69, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 72, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 74, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::proj_explode()"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::create_explode_sprites()"}, + {"row": 100, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 100, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::update_explode_sprite()"}, + {"row": 108, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 109, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::end_fx()"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 120, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::remove_fx()"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::setup_cloud()"}, + {"row": 127, "col": 76, "type": "ERROR", "message": "Expected expression value"}, + {"row": 127, "col": 76, "type": "ERROR", "message": "Instead found ''"}, + {"row": 142, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::spit_flames()"}, + {"row": 146, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 146, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 158, "col": 2, "type": "INFO", "message": "Compiling void ProjElementalCl::setup_explode_sprite()"}, + {"row": 162, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 162, "col": 44, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_elemental_guided.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_fire_ball.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_fire_ball2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_fire_bolt.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_fire_bomb.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_fire_bomb_sm.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_fire_dart.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_fire_dart_cl.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 9, "col": 15, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 15, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 10, "col": 15, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 15, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 16, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 16, "type": "ERROR", "message": "Instead found '('"}, + {"row": 94, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_fire_xolt.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_flamejet_guided_cl.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void ProjFlamejetGuidedCl::client_activate()"}, + {"row": 28, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void ProjFlamejetGuidedCl::game_prerender()"}, + {"row": 43, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 43, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void ProjFlamejetGuidedCl::sv_update_vel()"}, + {"row": 50, "col": 13, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 51, "col": 13, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 52, "col": 13, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void ProjFlamejetGuidedCl::update_cloud()"}, + {"row": 58, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 62, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 64, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void ProjFlamejetGuidedCl::proj_explode()"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 83, "col": 2, "type": "INFO", "message": "Compiling void ProjFlamejetGuidedCl::end_fx()"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void ProjFlamejetGuidedCl::remove_fx()"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void ProjFlamejetGuidedCl::setup_cloud()"}, + {"row": 96, "col": 76, "type": "ERROR", "message": "Expected expression value"}, + {"row": 96, "col": 76, "type": "ERROR", "message": "Instead found ''"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void ProjFlamejetGuidedCl::spit_flames()"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 124, "col": 2, "type": "INFO", "message": "Compiling void ProjFlamejetGuidedCl::update_flames()"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_flame_jet.as", + "success": false, + "messages": [ + {"row": 109, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_flame_jet2.as", + "success": false, + "messages": [ + {"row": 103, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_flame_jet_cl.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void ProjFlameJetCl::client_activate()"}, + {"row": 27, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void ProjFlameJetCl::fx_loop()"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void ProjFlameJetCl::end_fx()"}, + {"row": 44, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void ProjFlameJetCl::remove_me()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void ProjFlameJetCl::game_prerender()"}, + {"row": 57, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void ProjFlameJetCl::setup_sprite()"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_freezing_sphere.as", + "success": false, + "messages": [ + {"row": 86, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_gdragon_spit.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_glob.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_glob_dynamic.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_glob_guided.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_guided_base.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void ProjGuidedBase::game_tossprojectile()"}, + {"row": 14, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 15, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(const string)'"}, + {"row": 15, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 15, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 15, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 17, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 21, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 23, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 23, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 23, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 23, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 25, "col": 29, "type": "ERROR", "message": "No matching symbol 'GetEntityHeight'"}, + {"row": 26, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void ProjGuidedBase::gproj_home()"}, + {"row": 44, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 46, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 55, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_hit_wall.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_hold_person.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_icelance.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_ice_bolt.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_ice_bolt2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_k_knife.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_lava_rock.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_lightning_ball.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_lightning_ball_simple.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_lightning_storm.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void ProjLightningStorm::OnSpawn()"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void ProjLightningStorm::game_tossprojectile()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetUseable'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'game_fall'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void ProjLightningStorm::game_projectile_landed()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetExpireTime'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void ProjLightningStorm::projectile_spawn()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetValue'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGroupable'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHand'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void ProjLightningStorm::projectile_landed()"}, + {"row": 84, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 92, "col": 57, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 57, "type": "ERROR", "message": "Instead found ''"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void ProjLightningStorm::game_hitnpc()"}, + {"row": 105, "col": 57, "type": "ERROR", "message": "Expected expression value"}, + {"row": 105, "col": 57, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_mana.as", + "success": false, + "messages": [ + {"row": 214, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_mana2.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2::OnSpawn()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDescription'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMonsterClip'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2::game_dynamically_created()"}, + {"row": 48, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2::create_clfx()"}, + {"row": 61, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 65, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2::scan_cycle()"}, + {"row": 72, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityVelocity'"}, + {"row": 75, "col": 4, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 76, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2::ball_dodamage()"}, + {"row": 91, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 91, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2::remove_projectile()"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 107, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2::fake_precache()"}, + {"row": 110, "col": 19, "type": "ERROR", "message": "No matching symbol 'SOUND_ZAP'"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2::func_get_scan_size()"}, + {"row": 116, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 119, "col": 3, "type": "WARN", "message": "Unreachable code"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_mana2_cl.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2Cl::client_activate()"}, + {"row": 22, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 12, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 25, "col": 15, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2Cl::end_fx()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2Cl::remove_fx()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2Cl::reduce_size()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 46, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2Cl::update_arrow()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void ProjMana2Cl::setup_arrow()"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_mana_drainer.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void ProjManaDrainer::OnRepeatTimer()"}, + {"row": 23, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 23, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 24, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 24, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void ProjManaDrainer::OnRepeatTimer_1()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 41, "col": 19, "type": "ERROR", "message": "No matching symbol 'HOVER_SOUND'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void ProjManaDrainer::OnSpawn()"}, + {"row": 61, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 61, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 64, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 64, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 65, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 65, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 67, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 67, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 68, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 68, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void ProjManaDrainer::game_tossprojectile()"}, + {"row": 77, "col": 21, "type": "ERROR", "message": "No matching symbol 'MP_DRAIN_RATE'"}, + {"row": 78, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 84, "col": 19, "type": "ERROR", "message": "No matching symbol 'HOVER_SOUND'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void ProjManaDrainer::end_life()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 91, "col": 19, "type": "ERROR", "message": "No matching symbol 'HOVER_SOUND'"}, + {"row": 92, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_POP'"}, + {"row": 92, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 96, "col": 2, "type": "INFO", "message": "Compiling void ProjManaDrainer::remove_me()"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_meteor.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_mummy_pike.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_mummy_spear.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_poison.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_poison_cloud.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling ProjPoisonCloud::ProjPoisonCloud()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void ProjPoisonCloud::OnSpawn()"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 49, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 51, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 51, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void ProjPoisonCloud::game_tossprojectile()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetUseable'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'game_fall'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void ProjPoisonCloud::game_projectile_landed()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetExpireTime'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void ProjPoisonCloud::projectile_spawn()"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWeight'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSize'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetValue'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGroupable'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHUDSprite'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHand'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void ProjPoisonCloud::projectile_landed()"}, + {"row": 88, "col": 65, "type": "ERROR", "message": "Expected expression value"}, + {"row": 88, "col": 65, "type": "ERROR", "message": "Instead found ''"}, + {"row": 92, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void ProjPoisonCloud::game_hitnpc()"}, + {"row": 116, "col": 57, "type": "ERROR", "message": "Expected expression value"}, + {"row": 116, "col": 57, "type": "ERROR", "message": "Instead found ''"}, + {"row": 120, "col": 2, "type": "INFO", "message": "Compiling void ProjPoisonCloud::hitwall()"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_poison_cloud_cl.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 9, "col": 15, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 15, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 10, "col": 15, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 15, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 91, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_poison_spell.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_poison_spit2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_pole_a.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_pole_dra.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_pole_harpoon.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_pole_holy.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_pole_ph.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_pole_sl.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_pole_sl_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ProjPoleSlCl::client_activate()"}, + {"row": 18, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 18, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 20, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 20, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 22, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 22, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void ProjPoleSlCl::end_fx()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void ProjPoleSlCl::remove_fx()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void ProjPoleSlCl::do_sprites()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void ProjPoleSlCl::update_poof()"}, + {"row": 55, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 56, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void ProjPoleSlCl::setup_poof()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_pole_spear.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_pole_ti.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_pole_trident.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_server_arrow.as", + "success": false, + "messages": [ + {"row": 95, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_simple_cl.as", + "success": false, + "messages": [ + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::client_activate()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 42, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 43, "col": 18, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 44, "col": 26, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 45, "col": 19, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 46, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 47, "col": 23, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 48, "col": 16, "type": "ERROR", "message": "No matching symbol 'param7'"}, + {"row": 57, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 58, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 59, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 60, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 61, "col": 16, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 62, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 64, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'FX_MAX_DURATION' evaluates to the non-function type ''"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::end_fx()"}, + {"row": 74, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 76, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 80, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 84, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 88, "col": 9, "type": "ERROR", "message": "No matching symbol 'L_ABORT_REMOVE'"}, + {"row": 91, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'FX_FREMOVE_DELAY' evaluates to the non-function type ''"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::remove_fx()"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 103, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::ext_scale()"}, + {"row": 105, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 109, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::ext_lighten()"}, + {"row": 111, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 115, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::ext_touch()"}, + {"row": 117, "col": 27, "type": "ERROR", "message": "Expected expression value"}, + {"row": 117, "col": 27, "type": "ERROR", "message": "Instead found ''"}, + {"row": 121, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::ext_hitnpc()"}, + {"row": 123, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::ext_update()"}, + {"row": 129, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 131, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 132, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 133, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 136, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::make_clfx_proj()"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 142, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 145, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 147, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 151, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 159, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::update_clfx_proj()"}, + {"row": 193, "col": 31, "type": "ERROR", "message": "Expected expression value"}, + {"row": 193, "col": 31, "type": "ERROR", "message": "Instead found ''"}, + {"row": 229, "col": 7, "type": "ERROR", "message": "Expected expression value"}, + {"row": 229, "col": 7, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 247, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::fx_motion_blur()"}, + {"row": 250, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 253, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::setup_motion_blur()"}, + {"row": 255, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 256, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 257, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 258, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 259, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 260, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 261, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 262, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 265, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::collide_clfx_proj()"}, + {"row": 280, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 280, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 295, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 295, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 298, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 298, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 314, "col": 2, "type": "INFO", "message": "Compiling void ProjSimpleCl::find_nearest_bone()"}, + {"row": 318, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 318, "col": 46, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_slime_jet_cl.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void ProjSlimeJetCl::client_activate()"}, + {"row": 36, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 36, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void ProjSlimeJetCl::fx_loop()"}, + {"row": 54, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 54, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void ProjSlimeJetCl::end_fx()"}, + {"row": 60, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void ProjSlimeJetCl::remove_me()"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void ProjSlimeJetCl::game_prerender()"}, + {"row": 73, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 73, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void ProjSlimeJetCl::setup_sprite()"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_snow_ball.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_snow_ball2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_spore.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_sprite.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void ProjSprite::OnSpawn()"}, + {"row": 22, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 22, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 26, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void ProjSprite::game_tossprojectile()"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void ProjSprite::game_dodamage()"}, + {"row": 53, "col": 31, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 53, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 54, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 55, "col": 23, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 56, "col": 23, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 57, "col": 23, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void ProjSprite::proj_landed()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void ProjSprite::remove_me()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_sprite_cl.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void ProjSpriteCl::client_activate()"}, + {"row": 22, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 22, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 23, "col": 31, "type": "ERROR", "message": "Expected expression value"}, + {"row": 23, "col": 31, "type": "ERROR", "message": "Instead found ''"}, + {"row": 24, "col": 31, "type": "ERROR", "message": "Expected expression value"}, + {"row": 24, "col": 31, "type": "ERROR", "message": "Instead found ''"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void ProjSpriteCl::update_proj_sprite()"}, + {"row": 34, "col": 77, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 77, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void ProjSpriteCl::proj_landed()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void ProjSpriteCl::remove_fx()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void ProjSpriteCl::setup_proj_sprite()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_ss.as", + "success": false, + "messages": [ + {"row": 100, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_staff_fire_bomb.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_staff_icelance.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_staff_ice_bolt.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_staff_ice_bolt2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_stone.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_tele_fx.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_thorn.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_troll_lightning.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_troll_rock.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_troll_rock_fire.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_ub.as", + "success": false, + "messages": [ + {"row": 98, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_ub_cl.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void ProjUbCl::client_activate()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void ProjUbCl::remove_fx()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void ProjUbCl::make_sprite()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_volcano.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_volcano_fixed.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_volcano_svr.as", + "success": false, + "messages": [ + {"row": 100, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\proj_web.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\ring_light2.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_acid_xolt.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_blizzard.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_conjure_holy_hammer.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_conjure_venom_claws.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_fire_ball.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_fire_dart.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_fire_wall.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_frost_xolt.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_glow.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_healing_circle_920.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_healing_wave.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_ice_blast.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_ice_lance.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_ice_shield.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_ice_shield_lesser.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_ice_wall.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_lightning_chain.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_lightning_disc.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_lightning_storm.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_lightning_weak.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_poison.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_poison_cloud.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_rejuvenate.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_summon_bear1.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_summon_fangtooth.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_summon_guard.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_summon_rat.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_summon_undead.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_test_spell.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_trollcano.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_turn_undead.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll2_volcano.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_acid_xolt.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_blizzard.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_conjure_holy_hammer.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_conjure_venom_claws.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_fire_ball.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_fire_dart.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_fire_wall.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_glow.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_healing_circle.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_healing_wave.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_ice_blast.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_ice_bolt.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_ice_lance.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_ice_shield.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_ice_shield_lesser.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_ice_wall.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_ice_xolt.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_lightning_chain.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_lightning_disc.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_lightning_storm.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_lightning_weak.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_poison.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_poison_cloud.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_rejuvenate.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_summon_bear1.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_summon_fangtooth.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_summon_guard.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_summon_rat.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_summon_undead.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_turn_undead.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\scroll_volcano.as", + "success": false, + "messages": [ + {"row": 92, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_axe_snakeskin.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_back.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_back_holster.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_back_snakeskin.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_base.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_belt.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_belt_holster.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_belt_holster_snakeskin.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_belt_snakeskin.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_blunt_snakeskin.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_dagger.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_dagger_snakeskin.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_holster_snakeskin.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\sheath_spellbook.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\shields_base.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\shields_buckler.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\shields_f.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\shields_ironshield.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\shields_lironshield.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\shields_rune.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\shields_urdual.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\shields_wooden.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\skin_bear.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\skin_boar.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\skin_boar_heavy.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\skin_ratpelt.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_base.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_bone_blade.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_craftedknife.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_craftedknife2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_craftedknife3.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_craftedknife4.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_cre.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_crec.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_cref.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_crel.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_crep.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_dagger.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_dirk.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_eth.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_fangstooth.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_flamelick.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_frozentongueonflagpole.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_huggerdagger.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_huggerdagger2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_huggerdagger3.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_huggerdagger4.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_knife.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_k_fire.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_nh.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_nh_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling SmallarmsNhCl::SmallarmsNhCl()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhCl::client_activate()"}, + {"row": 22, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 22, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhCl::shadow_knife()"}, + {"row": 27, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 29, "col": 18, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 30, "col": 14, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 31, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhCl::shadow_knife_fx()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhCl::vanish_fx()"}, + {"row": 58, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 63, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 65, "col": 4, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhCl::vanish_sprite()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhCl::setup_knife()"}, + {"row": 99, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 99, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_nh_cl_alt.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling SmallarmsNhClAlt::SmallarmsNhClAlt()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhClAlt::client_activate()"}, + {"row": 22, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 22, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhClAlt::shadow_knife()"}, + {"row": 31, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 31, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhClAlt::shadow_knife_fx()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhClAlt::vanish_fx()"}, + {"row": 60, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 63, "col": 4, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 65, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 67, "col": 4, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhClAlt::vanish_sprite()"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void SmallarmsNhClAlt::setup_knife()"}, + {"row": 101, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 101, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_rd.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_rknife.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_royaldagger.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_stiletto.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\smallarms_vt.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\spell_dynamic.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_base_onehanded.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_base_twohanded.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_bastardsword.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_blood_drinker.as", + "success": false, + "messages": [ + {"row": 207, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 207, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 219, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_dynamic.as", + "success": false, + "messages": [ + {"row": 61, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 61, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 74, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_frostblade55.as", + "success": false, + "messages": [ + {"row": 188, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 188, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 247, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_fshard1.as", + "success": false, + "messages": [ + {"row": 235, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 235, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 290, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_fshard2.as", + "success": false, + "messages": [ + {"row": 235, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 235, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 290, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_fshard3.as", + "success": false, + "messages": [ + {"row": 235, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 235, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 290, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_fshard4.as", + "success": false, + "messages": [ + {"row": 235, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 235, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 290, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_fshard5.as", + "success": false, + "messages": [ + {"row": 235, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 235, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 290, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_gb.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_giceblade.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_iceblade.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_katana.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_katana2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_katana3.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_katana4.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_liceblade.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_longsword.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_lostblade.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling SwordsLostblade::SwordsLostblade()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_lostblade_placeholder.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_m2sword.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_msword.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_nkatana.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_novablade12.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_poison1.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_rsword.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_rune_green.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_scimitar.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_sf.as", + "success": false, + "messages": [ + {"row": 250, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 250, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 438, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_shortsword.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_skullblade.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_skullblade2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_skullblade3.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_skullblade4.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_spiderblade.as", + "success": false, + "messages": [ + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_testskin.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_testsub.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_ub.as", + "success": false, + "messages": [ + {"row": 207, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 207, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 369, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 162, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'void'"}, + {"row": 185, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_vb.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_volcano.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\swords_wolvesbane.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 10, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 141, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\tutorial_key.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\\unknown_item.as", + "success": false, + "messages": [ + {"row": 124, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 229, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 238, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 247, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/joe\\appatruth.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/joe\\bartifact.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/joe\\ignite.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\\bat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\\boar_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\\metalboar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\\metalspider.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\\spider_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\\stoneboar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\\stonespider.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\\troll_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\\troll_djinn.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude2\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\\keledros.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\\keledros_cl_cast.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 9, "col": 15, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 15, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 10, "col": 15, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 15, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 16, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 16, "type": "ERROR", "message": "Instead found '('"}, + {"row": 55, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\\spawner1.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling Spawner1::Spawner1()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void Spawner1::spawn_undead()"}, + {"row": 17, "col": 7, "type": "ERROR", "message": "No matching symbol 'ONE_IS_DEAD'"}, + {"row": 19, "col": 53, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SpawnerBase::make_undead()"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\\spawner2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling Spawner2::Spawner2()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void Spawner2::spawn_undead()"}, + {"row": 17, "col": 7, "type": "ERROR", "message": "No matching symbol 'TWO_IS_DEAD'"}, + {"row": 19, "col": 53, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SpawnerBase::make_undead()"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\\spawner3.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling Spawner3::Spawner3()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void Spawner3::spawn_undead()"}, + {"row": 17, "col": 7, "type": "ERROR", "message": "No matching symbol 'THREE_IS_DEAD'"}, + {"row": 19, "col": 53, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SpawnerBase::make_undead()"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\\spawner4.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling Spawner4::Spawner4()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void Spawner4::spawn_undead()"}, + {"row": 17, "col": 7, "type": "ERROR", "message": "No matching symbol 'FOUR_IS_DEAD'"}, + {"row": 19, "col": 53, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SpawnerBase::make_undead()"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\\spawner5.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling Spawner5::Spawner5()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void Spawner5::spawn_undead()"}, + {"row": 17, "col": 54, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SpawnerBase::make_undead()"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\\spawner6.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling Spawner6::Spawner6()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void Spawner6::spawn_undead()"}, + {"row": 17, "col": 54, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SpawnerBase::make_undead()"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\\spawner_base.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SpawnerBase::make_undead()"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/kfortress\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/kfortress\\nh_appear.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::client_activate()"}, + {"row": 31, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::spookie_sound()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::close_effect()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::ting_sound()"}, + {"row": 60, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::glitter_effect()"}, + {"row": 69, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::end_effect()"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::sprite_vacuum()"}, + {"row": 87, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 87, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::sprite_sphere()"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::setup_knife()"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::setup_vac_sprite()"}, + {"row": 127, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 127, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 137, "col": 2, "type": "INFO", "message": "Compiling void NhAppear::setup_glitter()"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 142, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 147, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 148, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/kfortress\\nh_appear_cl.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::client_activate()"}, + {"row": 29, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 34, "col": 27, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 39, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::spookie_sound()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::close_effect()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 58, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 60, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::glitter_effect()"}, + {"row": 69, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::ting_sound()"}, + {"row": 76, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 76, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::end_effect()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::sprite_vacuum()"}, + {"row": 95, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 95, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::sprite_sphere()"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 107, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::setup_knife()"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::setup_vac_sprite()"}, + {"row": 134, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 134, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 144, "col": 2, "type": "INFO", "message": "Compiling void NhAppearCl::setup_glitter()"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 147, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 148, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 149, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 150, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 151, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 152, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/littleg\\melanion.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void Melanion::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void Melanion::say_hi()"}, + {"row": 47, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 49, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 54, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 57, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 58, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 60, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 62, "col": 25, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 63, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void Melanion::say_job()"}, + {"row": 69, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 71, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 76, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 77, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 78, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 83, "col": 2, "type": "INFO", "message": "Compiling void Melanion::say_bothered1a()"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 90, "col": 2, "type": "INFO", "message": "Compiling void Melanion::story()"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void Melanion::say_story2()"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void Melanion::say_story3()"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void Melanion::say_story4()"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void Melanion::say_story5()"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void Melanion::say_story6()"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 132, "col": 2, "type": "INFO", "message": "Compiling void Melanion::say_story7()"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 139, "col": 2, "type": "INFO", "message": "Compiling void Melanion::give_book()"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ReceiveOffer'"}, + {"row": 142, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 145, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 147, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 150, "col": 2, "type": "INFO", "message": "Compiling void Melanion::recvbook_2()"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 159, "col": 2, "type": "INFO", "message": "Compiling void Melanion::game_menu_getoptions()"}, + {"row": 163, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 163, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 164, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 164, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 165, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 165, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 166, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 166, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 173, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 173, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 174, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 174, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 175, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 175, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/littleg\\salandria.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void Salandria::OnSpawn()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_job()"}, + {"row": 40, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 42, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 47, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_rumor()"}, + {"row": 53, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 55, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 60, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_hi()"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 68, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 73, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 74, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 78, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_thanx()"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_hi_normal()"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 96, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_hi2()"}, + {"row": 98, "col": 12, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_hi3()"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 110, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_hi4()"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 117, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_what()"}, + {"row": 119, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 124, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_what2()"}, + {"row": 126, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 130, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_what3()"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 135, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_huh()"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 145, "col": 2, "type": "INFO", "message": "Compiling void Salandria::say_rumour()"}, + {"row": 147, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 149, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 154, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 159, "col": 2, "type": "INFO", "message": "Compiling void Salandria::game_menu_getoptions()"}, + {"row": 163, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 163, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 164, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 164, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 165, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 165, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 170, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 170, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 171, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 171, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 172, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 172, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 176, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 176, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 177, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 177, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 178, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 178, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\\ice_mage_image.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::OnSpawn()"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching signatures to 'EmitSound(const int, const int, const string)'"}, + {"row": 33, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 33, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int)"}, + {"row": 33, "col": 3, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 33, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in)"}, + {"row": 33, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in, float)"}, + {"row": 33, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::game_dynamically_created()"}, + {"row": 39, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 40, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 43, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 44, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 49, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 53, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 54, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 58, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::straighten_up()"}, + {"row": 67, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::ext_convo2()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 76, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::ext_convo3()"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 83, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::ext_convo4()"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 90, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::ext_convo6()"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 97, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::ext_convo7()"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 104, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 107, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::ext_convo9()"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 111, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 114, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::ext_convo10()"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 118, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 121, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::ext_mage_go()"}, + {"row": 127, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 127, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 131, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::remove_me()"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 136, "col": 2, "type": "INFO", "message": "Compiling void IceMageImage::draw_beam()"}, + {"row": 139, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 139, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 142, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 142, "col": 36, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\\maldora.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\\maldora_fragment.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\\sorc_image.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SorcImage::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimFrameRate'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void SorcImage::ext_convo1()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 36, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void SorcImage::ext_convo5()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 44, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void SorcImage::ext_convo8()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 51, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void SorcImage::slow_down()"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimFrameRate'"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void SorcImage::game_dynamically_created()"}, + {"row": 70, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void SorcImage::set_yaw()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void SorcImage::sorc_in()"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void SorcImage::sorc_go()"}, + {"row": 89, "col": 56, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 56, "type": "ERROR", "message": "Instead found ''"}, + {"row": 91, "col": 66, "type": "ERROR", "message": "Expected expression value"}, + {"row": 91, "col": 66, "type": "ERROR", "message": "Instead found ''"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void SorcImage::remove_me()"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\\sorc_image_defeat.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void SorcImageDefeat::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\\sorc_image_final.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::OnSpawn()"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::say_hi()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'OpenMenu'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::game_menu_getoptions()"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::say_sword()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::say_sword2()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::say_sword3()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::say_sword4()"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::say_sword4b()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::say_sword5()"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::tele_out()"}, + {"row": 86, "col": 60, "type": "ERROR", "message": "Expected expression value"}, + {"row": 86, "col": 60, "type": "ERROR", "message": "Instead found ''"}, + {"row": 90, "col": 2, "type": "INFO", "message": "Compiling void SorcImageFinal::fade_away()"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\\sorc_intro.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling SorcIntro::SorcIntro()"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::OnRepeatTimer()"}, + {"row": 36, "col": 67, "type": "ERROR", "message": "Expected expression value"}, + {"row": 36, "col": 67, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::OnSpawn()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamageResistance'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::game_precache()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::spawn_image_sorc()"}, + {"row": 69, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::spawn_image1()"}, + {"row": 77, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 77, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::spawn_image2()"}, + {"row": 85, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 85, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 90, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::spawn_image3()"}, + {"row": 93, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::spawn_image4()"}, + {"row": 101, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 101, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::spawn_barrier()"}, + {"row": 108, "col": 27, "type": "ERROR", "message": "No matching symbol 'MAGE_RADIUS'"}, + {"row": 110, "col": 16, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 112, "col": 14, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 113, "col": 14, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 114, "col": 14, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 115, "col": 14, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::scan_for_players()"}, + {"row": 120, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 122, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_PLAYERS'"}, + {"row": 123, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 129, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::scan_loop()"}, + {"row": 131, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 132, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 133, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 138, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::do_intro1()"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 142, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 145, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::do_intro2()"}, + {"row": 147, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 148, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 149, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 152, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::do_intro3()"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 159, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::do_intro4()"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 162, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 166, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::do_intro5()"}, + {"row": 168, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 169, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 170, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 173, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::do_intro6()"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 180, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::do_intro_oops()"}, + {"row": 182, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 183, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 187, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::do_intro7()"}, + {"row": 189, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 190, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 191, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 194, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::do_intro8()"}, + {"row": 196, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 197, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 198, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 201, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::do_intro9()"}, + {"row": 203, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 204, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 214, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::spawn_sorc()"}, + {"row": 216, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 217, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 220, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::remove_me()"}, + {"row": 222, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 225, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::intro_complete()"}, + {"row": 228, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 229, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 230, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 233, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::intro_complete2()"}, + {"row": 235, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 236, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 239, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::intro_complete3()"}, + {"row": 241, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 242, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 245, "col": 2, "type": "INFO", "message": "Compiling void SorcIntro::intro_complete4()"}, + {"row": 247, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond-1\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond-2\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond-3\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond-4\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lostcastle_msc\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lowlands\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\\bgoblin_weak.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\\boar2_weak.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\\game_master.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_map_m2_quest_setmusic()"}, + {"row": 10, "col": 21, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 11, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 15, "col": 5, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 19, "col": 5, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\\goblin_needler.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\\pot.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void Pot::OnSpawn()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 21, "col": 16, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void Pot::glow_loop()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void Pot::ext_cooking()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 35, "col": 16, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\\sylphiel.as", + "success": false, + "messages": [ + {"row": 9, "col": 7, "type": "ERROR", "message": "Method 'void Sylphiel::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\\sylphiels_stuff.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void Qitem::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\\vgoblin_weak.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mercenaries\\archer.as", + "success": false, + "messages": [ + {"row": 204, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mercenaries\\archerf.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mercenaries\\merc1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mercenaries\\merc2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\\chestmaker.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Chestmaker::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void Chestmaker::make_chest()"}, + {"row": 20, "col": 12, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 22, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 23, "col": 50, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 27, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 28, "col": 49, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\\chest_good.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\\chest_great.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\\rudolf.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\\rudolfschest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\\bloodreaver.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\\bloodreaverminion.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\\flesheater.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\\flesheaterminion.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\\phlame.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\\titan.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\abaddon.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\abomination_bone.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\abomination_cl.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void AbominationCl::OnRepeatTimer()"}, + {"row": 20, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 20, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void AbominationCl::client_activate()"}, + {"row": 31, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 31, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void AbominationCl::game_prerender()"}, + {"row": 41, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void AbominationCl::breath_loop()"}, + {"row": 48, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void AbominationCl::make_cloud()"}, + {"row": 54, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 55, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 56, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 58, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void AbominationCl::end_fx()"}, + {"row": 72, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void AbominationCl::remove_fx()"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void AbominationCl::update_cloud()"}, + {"row": 85, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 88, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void AbominationCl::setup_cloud()"}, + {"row": 109, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void AbominationCl::setup_fire_cloud()"}, + {"row": 132, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 132, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\abomination_venom.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_archer_hard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_archer_hard_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_archer_hard_frost.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_archer_hard_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_archer_hard_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_archer_hard_poison.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_archer_hard_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_archer_hard_thunder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior_hard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior_hard_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior_hard_frost.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior_hard_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior_hard_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior_hard_poison.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior_hard_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior_hard_thunder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\anim_warrior_hard_venom.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ant_fire_cl.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void AntFireCl::client_activate()"}, + {"row": 22, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 20, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void AntFireCl::end_fx()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_DELAY_REMOVE(const string)'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void AntFireCl::remove_fx()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void AntFireCl::breath_loop()"}, + {"row": 47, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void AntFireCl::setup_cloud()"}, + {"row": 67, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 67, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ant_fire_flyer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ant_fire_warrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ant_red_warrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\attack_hack.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void AttackHack::npcatk_attackenemy()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'can_reach_nme'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'npc_attack'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'npc_selectattack'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 31, "col": 4, "type": "ERROR", "message": "No matching symbol 'DoDamage'"}, + {"row": 32, "col": 8, "type": "ERROR", "message": "No matching symbol 'ATTACK_HACK_STUN'"}, + {"row": 34, "col": 22, "type": "ERROR", "message": "No matching symbol 'ATTACK_HACK_STUNCHANCE'"}, + {"row": 36, "col": 6, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_boss.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_boss_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_boss_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_boss_dagger.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_boss_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_boss_nova.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_boss_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_boss_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_dagger.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_elite.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_elite_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_elite_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_elite_dagger.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_elite_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_elite_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_elite_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_elite_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_hard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_hard_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_hard_axe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_hard_dagger.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_hard_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_hard_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_hard_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_hard_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_mace.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_mage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bandit_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_aim_proj.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void BaseAimProj::baseaim_adjust_angles()"}, + {"row": 10, "col": 7, "type": "ERROR", "message": "No matching symbol 'ANGLE_ADJ_DIVIDER'"}, + {"row": 12, "col": 8, "type": "ERROR", "message": "No matching symbol 'ATTACK_SPEED'"}, + {"row": 14, "col": 5, "type": "ERROR", "message": "No matching symbol 'ANGLE_ADJ_DIVIDER'"}, + {"row": 16, "col": 8, "type": "ERROR", "message": "No matching symbol 'ATTACK_SPEED'"}, + {"row": 18, "col": 5, "type": "ERROR", "message": "No matching symbol 'ANGLE_ADJ_DIVIDER'"}, + {"row": 20, "col": 8, "type": "ERROR", "message": "No matching symbol 'ATTACK_SPEED'"}, + {"row": 22, "col": 5, "type": "ERROR", "message": "No matching symbol 'ANGLE_ADJ_DIVIDER'"}, + {"row": 24, "col": 8, "type": "ERROR", "message": "No matching symbol 'ATTACK_SPEED'"}, + {"row": 26, "col": 5, "type": "ERROR", "message": "No matching symbol 'ANGLE_ADJ_DIVIDER'"}, + {"row": 28, "col": 8, "type": "ERROR", "message": "No matching symbol 'ATTACK_SPEED'"}, + {"row": 30, "col": 5, "type": "ERROR", "message": "No matching symbol 'ANGLE_ADJ_DIVIDER'"}, + {"row": 32, "col": 8, "type": "ERROR", "message": "No matching symbol 'ATTACK_SPEED'"}, + {"row": 34, "col": 5, "type": "ERROR", "message": "No matching symbol 'ANGLE_ADJ_DIVIDER'"}, + {"row": 36, "col": 8, "type": "ERROR", "message": "No matching symbol 'ATTACK_SPEED'"}, + {"row": 38, "col": 5, "type": "ERROR", "message": "No matching symbol 'ANGLE_ADJ_DIVIDER'"}, + {"row": 41, "col": 39, "type": "ERROR", "message": "No matching symbol 'HUNT_LASTTARGET'"}, + {"row": 42, "col": 23, "type": "ERROR", "message": "No matching symbol 'HUNT_LASTTARGET'"}, + {"row": 44, "col": 25, "type": "ERROR", "message": "No matching symbol 'GetEntityHeight'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 48, "col": 45, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 49, "col": 18, "type": "ERROR", "message": "No matching symbol 'ANGLE_ADJ_DIVIDER'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_anti_stuck.as", + "success": false, + "messages": [ + {"row": 429, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_battle_ally.as", + "success": false, + "messages": [ + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling BaseBattleAlly::BaseBattleAlly()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void BaseBattleAlly::OnHuntTarget(CBaseEntity@)"}, + {"row": 97, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 97, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 154, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 154, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 180, "col": 2, "type": "INFO", "message": "Compiling void BaseBattleAlly::OnDamage(int)"}, + {"row": 182, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 187, "col": 2, "type": "INFO", "message": "Compiling void BaseBattleAlly::ally_follow_close()"}, + {"row": 189, "col": 26, "type": "ERROR", "message": "No matching symbol 'ALLY_FOLLOW_CLOSE_DIST'"}, + {"row": 192, "col": 2, "type": "INFO", "message": "Compiling void BaseBattleAlly::ally_follow_normal()"}, + {"row": 194, "col": 26, "type": "ERROR", "message": "No matching symbol 'ALLY_FOLLOW_NORM_DIST'"}, + {"row": 197, "col": 2, "type": "INFO", "message": "Compiling void BaseBattleAlly::ally_hop()"}, + {"row": 199, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 200, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_ALLY_JUMP'"}, + {"row": 200, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 201, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 202, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 204, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 206, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 207, "col": 3, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 208, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 210, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 214, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 215, "col": 40, "type": "ERROR", "message": "No matching symbol 'ALLY_LEADER_DEST'"}, + {"row": 216, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 218, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 219, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 222, "col": 2, "type": "INFO", "message": "Compiling void BaseBattleAlly::ally_jump_boost()"}, + {"row": 224, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 224, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 227, "col": 2, "type": "INFO", "message": "Compiling void BaseBattleAlly::ally_push_forward()"}, + {"row": 237, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 237, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 239, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 239, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 245, "col": 2, "type": "INFO", "message": "Compiling void BaseBattleAlly::ally_stuck_check()"}, + {"row": 283, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 283, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 289, "col": 2, "type": "INFO", "message": "Compiling void BaseBattleAlly::set_leader()"}, + {"row": 293, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_chat.as", + "success": false, + "messages": [ + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_chat_array.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_civilian.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseCivilian::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseCivilian::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_damage_stack.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseDamageStack::OnDamagedOther(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_fish2.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void BaseFish2::OnSpawn()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void BaseFish2::OnHuntTarget(CBaseEntity@)"}, + {"row": 60, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 69, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 48, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_flyer.as", + "success": false, + "messages": [ + {"row": 131, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_flyer_agro.as", + "success": false, + "messages": [ + {"row": 131, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_flyer_grav.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseFlyerGrav::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_glow.as", + "success": false, + "messages": [ + {"row": 47, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_guard.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseGuard::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_guard_friendly.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseGuardFriendly::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseGuardFriendly::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_guard_friendly_new.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseGuardFriendlyNew::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_ice_race.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void BaseIceRace::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamageResistance'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamageResistance'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_jumper.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void BaseJumper::OnHuntTarget(CBaseEntity@)"}, + {"row": 24, "col": 8, "type": "ERROR", "message": "No matching symbol 'SUSPEND_AI'"}, + {"row": 25, "col": 8, "type": "ERROR", "message": "No matching symbol 'NPC_MOVEMENT_SUSPENDED'"}, + {"row": 26, "col": 9, "type": "ERROR", "message": "No matching symbol 'm_hAttackTarget'"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 28, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 29, "col": 24, "type": "ERROR", "message": "No matching symbol 'FREQ_NPC_JUMP'"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "No matching symbol 'm_hAttackTarget'"}, + {"row": 34, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 37, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 38, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 39, "col": 23, "type": "ERROR", "message": "No matching symbol 'm_hAttackTarget'"}, + {"row": 41, "col": 5, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 44, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 45, "col": 17, "type": "ERROR", "message": "No matching symbol 'ATTACK_RANGE'"}, + {"row": 47, "col": 5, "type": "ERROR", "message": "No matching signatures to 'BaseJumper::npcatk_jump(string)'"}, + {"row": 47, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 47, "col": 5, "type": "INFO", "message": "void MS::BaseJumper::npcatk_jump()"}, + {"row": 51, "col": 11, "type": "WARN", "message": "Variable 'L_NEXT_JUMP' hides another variable of same name in outer scope"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_NEXT_JUMP(const string)'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseJumper::npcatk_jump()"}, + {"row": 61, "col": 7, "type": "ERROR", "message": "No matching symbol 'SOUND_NPC_JUMP'"}, + {"row": 63, "col": 29, "type": "ERROR", "message": "No matching symbol 'SOUND_NPC_JUMP'"}, + {"row": 63, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 65, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 66, "col": 22, "type": "ERROR", "message": "No matching symbol 'BJUMPER_FACTOR'"}, + {"row": 67, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 69, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 72, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 75, "col": 8, "type": "ERROR", "message": "No matching symbol 'BJUMPER_CUSTOM_BOOST'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseJumper::npcatk_jump_boost()"}, + {"row": 81, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 81, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void BaseJumper::npcatk_jump_forward_adj()"}, + {"row": 86, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 86, "col": 47, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_lightning_shield.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseLightningShield::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_monster.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_monster_explode.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void BaseMonsterExplode::do_explode()"}, + {"row": 19, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXPLOSION_DAMAGE'"}, + {"row": 21, "col": 4, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseMonsterExplode::beam_dodamage()"}, + {"row": 34, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 48, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_monster_new.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_monster_shared.as", + "success": false, + "messages": [ + {"row": 114, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 839, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 1161, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 1197, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 1281, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"}, + {"row": 429, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_noclip.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_npc.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_npc_attack.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_npc_attack_new.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_npc_attack_shared.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_npc_vendor.as", + "success": false, + "messages": [ + {"row": 50, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_npc_vendor_confirm.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling BaseNpcVendorConfirm::BaseNpcVendorConfirm()"}, + {"row": 23, "col": 23, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 24, "col": 7, "type": "ERROR", "message": "No matching symbol 'VEND_NEWBIE'"}, + {"row": 28, "col": 5, "type": "ERROR", "message": "No matching symbol 'VEND_NEWBIE'"}, + {"row": 32, "col": 5, "type": "ERROR", "message": "No matching symbol 'VEND_NEWBIE'"}, + {"row": 36, "col": 5, "type": "ERROR", "message": "No matching symbol 'VEND_NEWBIE'"}, + {"row": 40, "col": 5, "type": "ERROR", "message": "No matching symbol 'VEND_NEWBIE'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void BaseNpcVendorConfirm::OnSpawn()"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void BaseNpcVendorConfirm::vend_post_spawn()"}, + {"row": 54, "col": 8, "type": "ERROR", "message": "No matching symbol 'VEND_WEAPONS'"}, + {"row": 56, "col": 4, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 58, "col": 8, "type": "ERROR", "message": "No matching symbol 'VEND_CONTAINERS'"}, + {"row": 60, "col": 4, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void BaseNpcVendorConfirm::player_scan()"}, + {"row": 67, "col": 8, "type": "ERROR", "message": "No matching symbol 'NPC_REACTS'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 69, "col": 9, "type": "ERROR", "message": "No matching symbol 'CanSee'"}, + {"row": 70, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseNpcVendorConfirm::vendor_offerstore()"}, + {"row": 77, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseNpcVendorConfirm::vendor_offer_help()"}, + {"row": 83, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 84, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 86, "col": 21, "type": "ERROR", "message": "No matching symbol 'FREQ_HINT_TEXT'"}, + {"row": 87, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 88, "col": 8, "type": "ERROR", "message": "No matching symbol 'VEND_WEAPONS'"}, + {"row": 90, "col": 4, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "No matching symbol 'VEND_CONTAINERS'"}, + {"row": 94, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 95, "col": 4, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 97, "col": 8, "type": "ERROR", "message": "No matching symbol 'VEND_CONTAINERS'"}, + {"row": 99, "col": 4, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 100, "col": 4, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 101, "col": 10, "type": "ERROR", "message": "No matching symbol 'VEND_WEAPONS'"}, + {"row": 103, "col": 5, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 105, "col": 9, "type": "ERROR", "message": "No matching symbol 'VEND_WEAPONS'"}, + {"row": 108, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 110, "col": 8, "type": "ERROR", "message": "No matching symbol 'VEND_ARMORER'"}, + {"row": 112, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 114, "col": 5, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 115, "col": 5, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 119, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 122, "col": 5, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 123, "col": 5, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 124, "col": 5, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 129, "col": 2, "type": "INFO", "message": "Compiling void BaseNpcVendorConfirm::game_menu_getoptions()"}, + {"row": 136, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 136, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 137, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 137, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 138, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 138, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 143, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 144, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 144, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 145, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 145, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 156, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 156, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 157, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 157, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 158, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 158, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 159, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 159, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 160, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 160, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 161, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 161, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 162, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 162, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 163, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 163, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 164, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 164, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 165, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 165, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 166, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 166, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 167, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 167, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 168, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 168, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 169, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 169, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 170, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 170, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 171, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 171, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 172, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 172, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 173, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 173, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 174, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 174, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 175, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 175, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 176, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 176, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 177, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 177, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 178, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 178, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 179, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 179, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 180, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 180, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 181, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 181, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 182, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 182, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 183, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 183, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 184, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 184, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 185, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 185, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 186, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 186, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 187, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 187, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 197, "col": 2, "type": "INFO", "message": "Compiling void BaseNpcVendorConfirm::say_weapons()"}, + {"row": 200, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 201, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 201, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 201, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 201, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 203, "col": 16, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 205, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 208, "col": 2, "type": "INFO", "message": "Compiling void BaseNpcVendorConfirm::send_chat_menu()"}, + {"row": 210, "col": 3, "type": "ERROR", "message": "No matching symbol 'OpenMenu'"}, + {"row": 213, "col": 2, "type": "INFO", "message": "Compiling void BaseNpcVendorConfirm::say_weapon_desc()"}, + {"row": 216, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 217, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 225, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 232, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 238, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 245, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 252, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 259, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 266, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 274, "col": 3, "type": "ERROR", "message": "No matching symbol 'chat_loop'"}, + {"row": 277, "col": 2, "type": "INFO", "message": "Compiling void BaseNpcVendorConfirm::say_containers()"}, + {"row": 283, "col": 8, "type": "ERROR", "message": "No matching symbol 'VEND_SPEC_SHEATHS'"}, + {"row": 288, "col": 3, "type": "ERROR", "message": "No matching symbol 'chat_loop'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_pain.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePain::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_patrol_radius.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePatrolRadius::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_propelled.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_race_cold.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void BaseIceRace::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamageResistance'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamageResistance'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_react.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void BaseReact::OnRepeatTimer()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "No matching symbol 'CanSee'"}, + {"row": 25, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 28, "col": 28, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 31, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 33, "col": 5, "type": "ERROR", "message": "No matching symbol 'npcreact_targetsighted'"}, + {"row": 39, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 41, "col": 5, "type": "ERROR", "message": "No matching symbol 'npc_react_sightlost'"}, + {"row": 44, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_script_skills.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseScriptSkills::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_self_adjust.as", + "success": false, + "messages": [ + {"row": 651, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_stripped_ai.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_struck.as", + "success": false, + "messages": [ + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void BaseStruck::OnSpawn()"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void BaseStruck::set_material()"}, + {"row": 53, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 56, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 58, "col": 28, "type": "ERROR", "message": "No matching symbol 'NPC_MATERIAL_TYPE'"}, + {"row": 62, "col": 28, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 64, "col": 7, "type": "ERROR", "message": "No matching symbol 'SOUND_STRUCK1'"}, + {"row": 66, "col": 23, "type": "ERROR", "message": "No matching symbol 'SOUND_STRUCK1'"}, + {"row": 67, "col": 23, "type": "ERROR", "message": "No matching symbol 'SOUND_STRUCK2'"}, + {"row": 68, "col": 23, "type": "ERROR", "message": "No matching symbol 'SOUND_STRUCK3'"}, + {"row": 71, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 188, "col": 2, "type": "INFO", "message": "Compiling void BaseStruck::OnDamage(int)"}, + {"row": 209, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 209, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 306, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 306, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 406, "col": 2, "type": "INFO", "message": "Compiling void BaseStruck::OnHuntTarget(CBaseEntity@)"}, + {"row": 408, "col": 9, "type": "ERROR", "message": "No matching symbol 'NPC_USE_IDLE'"}, + {"row": 409, "col": 8, "type": "ERROR", "message": "No matching symbol 'NPC_IDLE_DISABLE'"}, + {"row": 410, "col": 9, "type": "ERROR", "message": "No matching symbol 'm_hAttackTarget'"}, + {"row": 411, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 413, "col": 20, "type": "ERROR", "message": "No matching symbol 'NPC_FREQ_IDLE'"}, + {"row": 415, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 417, "col": 46, "type": "ERROR", "message": "No matching symbol 'SOUND_IDLE1'"}, + {"row": 417, "col": 26, "type": "ERROR", "message": "No matching symbol 'NPC_STRUCK_CHANNEL'"}, + {"row": 417, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 419, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 421, "col": 46, "type": "ERROR", "message": "No matching symbol 'SOUND_IDLE2'"}, + {"row": 421, "col": 26, "type": "ERROR", "message": "No matching symbol 'NPC_STRUCK_CHANNEL'"}, + {"row": 421, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 423, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 425, "col": 46, "type": "ERROR", "message": "No matching symbol 'SOUND_IDLE3'"}, + {"row": 425, "col": 26, "type": "ERROR", "message": "No matching symbol 'NPC_STRUCK_CHANNEL'"}, + {"row": 425, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_temporary.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\base_xmass.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void BaseXmass::OnSpawn()"}, + {"row": 15, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_CHRISTMAS_MODE'"}, + {"row": 17, "col": 4, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 18, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityRace'"}, + {"row": 21, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseXmass::say_xmass()"}, + {"row": 27, "col": 9, "type": "ERROR", "message": "No matching symbol 'G_CHRISTMAS_MODE'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 30, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int'"}, + {"row": 38, "col": 8, "type": "ERROR", "message": "No matching symbol 'XMASS_OLD_GUY'"}, + {"row": 40, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 41, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 45, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 46, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 48, "col": 9, "type": "ERROR", "message": "No matching symbol 'IS_SNOWING'"}, + {"row": 50, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bat_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bat_giant.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bat_large.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bat_large2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bat_large_corpse_cl.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BatLargeCorpseCl::client_activate()"}, + {"row": 12, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 13, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void BatLargeCorpseCl::remove_script()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void BatLargeCorpseCl::setup_corpse()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bat_large_shreaker.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bat_large_shreaker_cl.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void BatLargeShreakerCl::client_activate()"}, + {"row": 41, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 84, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 84, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void BatLargeShreakerCl::end_fx()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void BatLargeShreakerCl::remove_fx()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void BatLargeShreakerCl::blur_loop()"}, + {"row": 80, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 80, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 81, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 81, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 82, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 82, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 83, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void BatLargeShreakerCl::setup_blur()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BatLargeShreakerCl::setup_sphere()"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void BatLargeShreakerCl::update_sphere()"}, + {"row": 121, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 128, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 129, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 133, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bat_large_vampire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bat_summon.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_base_giant.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_black.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_brown.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_cub_black.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_cub_brown.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_cub_polar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_giant_black.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_giant_brown.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_giant_polar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_god_black.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_god_brown.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_god_polar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_god_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_guard1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_kodiak.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bear_polar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\beetle_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\beetle_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\beetle_fire_giant.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\beetle_horned.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\beetle_horned_giant.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\beetle_venom.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\beetle_venom_cl.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void BeetleVenomCl::client_activate()"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 21, "col": 28, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_MAX_DURATION(const string)'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void BeetleVenomCl::remove_fx()"}, + {"row": 29, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BeetleVenomCl::remove_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void BeetleVenomCl::fart_loop()"}, + {"row": 43, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 43, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void BeetleVenomCl::setup_sprite()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\beetle_venom_giant.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\beetle_venom_giant_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void BeetleVenomGiantCl::client_activate()"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 16, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void BeetleVenomGiantCl::end_fx()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void BeetleVenomGiantCl::remove_me()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void BeetleVenomGiantCl::fx_loop()"}, + {"row": 37, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void BeetleVenomGiantCl::setup_cloud()"}, + {"row": 56, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 56, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bgoblin.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bgoblin_chief.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bgoblin_chief_cl.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void BgoblinChiefCl::client_activate()"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void BgoblinChiefCl::end_fx()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BgoblinChiefCl::remove_fx()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BgoblinChiefCl::breath_loop()"}, + {"row": 41, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void BgoblinChiefCl::setup_cloud()"}, + {"row": 62, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bgoblin_guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bgoblin_shaman.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bgoblin_skirmisher.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\blackbear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\blackbearcub.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz1_corrupt.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz1_corrupt_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz1_demon.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz1_demon_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz1_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz2_corrupt.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz2_corrupt_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz2_demon.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz2_demon_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz2_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\bludgeon_gaz_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar_base_cl_charge.as", + "success": false, + "messages": [ + {"row": 9, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 9, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 10, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 11, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 15, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 15, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 18, "type": "ERROR", "message": "Expected identifier"}, + {"row": 14, "col": 18, "type": "ERROR", "message": "Instead found '('"}, + {"row": 89, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar_base_cl_charge2.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar_base_remake.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar_hard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar_lava3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\boar_lava_cl.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void BoarLavaCl::client_activate()"}, + {"row": 23, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 25, "col": 22, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 26, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 32, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 38, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void BoarLavaCl::fx_loop()"}, + {"row": 53, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 56, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 56, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 59, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 60, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 67, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 67, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void BoarLavaCl::remove_fx()"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void BoarLavaCl::remove_fx2()"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 83, "col": 2, "type": "INFO", "message": "Compiling void BoarLavaCl::update_hoof_sprite()"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 87, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void BoarLavaCl::setup_hoof_sprite()"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 105, "col": 13, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 107, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 109, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 112, "col": 14, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 114, "col": 5, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\borc.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\brownbear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\brownbearcub.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\burning_one.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\burning_one_cl.as", + "success": false, + "messages": [ + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::client_activate()"}, + {"row": 66, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::end_fx()"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::REMOVE_DELAY(const string)'"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::remove_me()"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::hand_sprite_loop()"}, + {"row": 93, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 95, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 95, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 99, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::setup_hand_sprite()"}, + {"row": 103, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 103, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 115, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::ice_breath_loop()"}, + {"row": 119, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 119, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 129, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::setup_ice_breath_sprite()"}, + {"row": 143, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 143, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 144, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 144, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::palpatine_loop()"}, + {"row": 152, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 152, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 153, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 153, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 157, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 157, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 159, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 159, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 163, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 163, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 167, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::stun_burst_fx()"}, + {"row": 170, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 170, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 175, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::stunburst_flame()"}, + {"row": 195, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 195, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 201, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::head_flame()"}, + {"row": 204, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 204, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 218, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::setup_body_flames()"}, + {"row": 220, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 220, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 225, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::death_flame()"}, + {"row": 227, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 228, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 229, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 230, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 231, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 232, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 233, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 234, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 235, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 236, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 237, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 240, "col": 2, "type": "INFO", "message": "Compiling void BurningOneCl::death_flame_update()"}, + {"row": 243, "col": 76, "type": "ERROR", "message": "Expected expression value"}, + {"row": 243, "col": 76, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\burning_one_lshield_cl.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::client_activate()"}, + {"row": 19, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 20, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 21, "col": 21, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 22, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 23, "col": 24, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::SHIELD_DURATION(const string)'"}, + {"row": 26, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::lshield_on()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM1'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::lshield_loop()"}, + {"row": 48, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 62, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::remove_effect()"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\cadaver.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\cadaver_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\chumtoad.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\cl_corpse.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void ClCorpse::client_activate()"}, + {"row": 19, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 19, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 26, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 26, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 27, "col": 65, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 65, "type": "ERROR", "message": "Instead found ''"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void ClCorpse::remove_script()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void ClCorpse::setup_corpse()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 52, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\cobra.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\cold_lady.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\cold_one.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\cold_one_cl.as", + "success": false, + "messages": [ + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::client_activate()"}, + {"row": 66, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 90, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::end_fx()"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::REMOVE_DELAY(const string)'"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::remove_me()"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 103, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::hand_sprite_loop()"}, + {"row": 107, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 107, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 109, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::setup_hand_sprite()"}, + {"row": 117, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 117, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 129, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::ice_breath_loop()"}, + {"row": 133, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 133, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::setup_ice_breath_sprite()"}, + {"row": 157, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 157, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 158, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 158, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 162, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::palpatine_loop()"}, + {"row": 166, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 166, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 167, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 167, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 171, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 171, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 173, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 173, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 177, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 177, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 181, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::stun_burst_fx()"}, + {"row": 184, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 184, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 189, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::stunburst_flame()"}, + {"row": 209, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 209, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 215, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::head_flame()"}, + {"row": 218, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 218, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 232, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::setup_body_flames()"}, + {"row": 234, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 234, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 239, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::death_flame()"}, + {"row": 241, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 242, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 243, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 244, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 245, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 246, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 247, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 248, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 249, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 250, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 251, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 254, "col": 2, "type": "INFO", "message": "Compiling void ColdOneCl::death_flame_update()"}, + {"row": 257, "col": 76, "type": "ERROR", "message": "Expected expression value"}, + {"row": 257, "col": 76, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\cold_one_lshield_cl.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::client_activate()"}, + {"row": 19, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 20, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 21, "col": 21, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 22, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 23, "col": 24, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::SHIELD_DURATION(const string)'"}, + {"row": 26, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::lshield_on()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM1'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::lshield_loop()"}, + {"row": 48, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 62, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void SfxLightningShield::remove_effect()"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\base_companion.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 26, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 27, "col": 18, "type": "ERROR", "message": "Expected '('"}, + {"row": 27, "col": 18, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 29, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 29, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 476, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\bear_image.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void BearImage::OnSpawn()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBBox'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void BearImage::game_dynamically_created()"}, + {"row": 37, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 38, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFollow'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void BearImage::ext_attack()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void BearImage::player_left()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void BearImage::remove_bear()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void BearImage::ext_bear_die()"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFollow'"}, + {"row": 66, "col": 22, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 66, "col": 22, "type": "INFO", "message": "Candidates are:"}, + {"row": 66, "col": 22, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 66, "col": 22, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 68, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 69, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void BearImage::bear_fade()"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\body_maker.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void BodyMaker::remove_me()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\dridje.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Dridje::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\giver.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void Giver::game_dynamically_created()"}, + {"row": 19, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 20, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void Giver::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void Giver::grant_item()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void Giver::me_vanish()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\pet_crow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\pet_rat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\pet_wolf.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\pet_wolf_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\pet_wolf_shadow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\spell_maker_affliction.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "No matching symbol 'MODEL_OFSET'"}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 38, "col": 7, "type": "ERROR", "message": "No matching symbol 'ANIM_IDLE'"}, + {"row": 40, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 29, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 46, "col": 8, "type": "ERROR", "message": "No matching symbol 'FX_GLOW'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::game_dynamically_created()"}, + {"row": 54, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 55, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 58, "col": 22, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 59, "col": 22, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 60, "col": 21, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "No matching symbol 'SPAWNER_MODEL'"}, + {"row": 66, "col": 16, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'SHOW_FX'"}, + {"row": 72, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 76, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::show_fx()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::remove_scroll()"}, + {"row": 90, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::grant_spell()"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::me_vanish()"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::stick_to_owner()"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\spell_maker_base.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "No matching symbol 'MODEL_OFSET'"}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 38, "col": 7, "type": "ERROR", "message": "No matching symbol 'ANIM_IDLE'"}, + {"row": 40, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 29, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 46, "col": 8, "type": "ERROR", "message": "No matching symbol 'FX_GLOW'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::game_dynamically_created()"}, + {"row": 54, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 55, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 58, "col": 22, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 59, "col": 22, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 60, "col": 21, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "No matching symbol 'SPAWNER_MODEL'"}, + {"row": 66, "col": 16, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'SHOW_FX'"}, + {"row": 72, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 76, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::show_fx()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::remove_scroll()"}, + {"row": 90, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::grant_spell()"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::me_vanish()"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::stick_to_owner()"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\spell_maker_divination.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 13, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 15, "col": 22, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 22, "type": "ERROR", "message": "Instead found '('"}, + {"row": 87, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\spell_maker_fire.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling SpellMakerFire::SpellMakerFire()"}, + {"row": 20, "col": 16, "type": "ERROR", "message": "'SOUND_SPAWN' is already declared"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "No matching symbol 'MODEL_OFSET'"}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 38, "col": 7, "type": "ERROR", "message": "No matching symbol 'ANIM_IDLE'"}, + {"row": 40, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 29, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 46, "col": 8, "type": "ERROR", "message": "No matching symbol 'FX_GLOW'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::game_dynamically_created()"}, + {"row": 54, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 55, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 58, "col": 22, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 59, "col": 22, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 60, "col": 21, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "No matching symbol 'SPAWNER_MODEL'"}, + {"row": 66, "col": 16, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'SHOW_FX'"}, + {"row": 72, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 76, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::show_fx()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::remove_scroll()"}, + {"row": 90, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::grant_spell()"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::me_vanish()"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::stick_to_owner()"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\spell_maker_ice.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling SpellMakerIce::SpellMakerIce()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "No matching symbol 'MODEL_OFSET'"}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 38, "col": 7, "type": "ERROR", "message": "No matching symbol 'ANIM_IDLE'"}, + {"row": 40, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 29, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 46, "col": 8, "type": "ERROR", "message": "No matching symbol 'FX_GLOW'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::game_dynamically_created()"}, + {"row": 54, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 55, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 58, "col": 22, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 59, "col": 22, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 60, "col": 21, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "No matching symbol 'SPAWNER_MODEL'"}, + {"row": 66, "col": 16, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'SHOW_FX'"}, + {"row": 72, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 76, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::show_fx()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::remove_scroll()"}, + {"row": 90, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::grant_spell()"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::me_vanish()"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::stick_to_owner()"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\spell_maker_invisible.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "No matching symbol 'MODEL_OFSET'"}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 38, "col": 7, "type": "ERROR", "message": "No matching symbol 'ANIM_IDLE'"}, + {"row": 40, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 29, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 46, "col": 8, "type": "ERROR", "message": "No matching symbol 'FX_GLOW'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::game_dynamically_created()"}, + {"row": 54, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 55, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 58, "col": 22, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 59, "col": 22, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 60, "col": 21, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "No matching symbol 'SPAWNER_MODEL'"}, + {"row": 66, "col": 16, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'SHOW_FX'"}, + {"row": 72, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 76, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::show_fx()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::remove_scroll()"}, + {"row": 90, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::grant_spell()"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::me_vanish()"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::stick_to_owner()"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\spell_maker_lightning.as", + "success": false, + "messages": [ + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerLightning::client_activate()"}, + {"row": 44, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerLightning::setup_sprite1_sparkle()"}, + {"row": 69, "col": 22, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerLightning::sprite_update()"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerLightning::cl_make_beams()"}, + {"row": 105, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 105, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 120, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 120, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 130, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 130, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 140, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 140, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 147, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerLightning::remove_me()"}, + {"row": 149, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 152, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerLightning::svr_show_fx()"}, + {"row": 158, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 158, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 159, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 159, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 167, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 167, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 168, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 168, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 176, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 176, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 177, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 177, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 185, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 185, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 186, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 186, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 194, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 194, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 195, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 195, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 203, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerLightning::beam_silent()"}, + {"row": 210, "col": 75, "type": "ERROR", "message": "Expected expression value"}, + {"row": 210, "col": 75, "type": "ERROR", "message": "Instead found ''"}, + {"row": 213, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerLightning::center_beam()"}, + {"row": 218, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 218, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "No matching symbol 'MODEL_OFSET'"}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 38, "col": 7, "type": "ERROR", "message": "No matching symbol 'ANIM_IDLE'"}, + {"row": 40, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 29, "type": "ERROR", "message": "No matching symbol 'SOUND_SPAWN'"}, + {"row": 44, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 46, "col": 8, "type": "ERROR", "message": "No matching symbol 'FX_GLOW'"}, + {"row": 48, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::game_dynamically_created()"}, + {"row": 54, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 55, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 58, "col": 22, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 59, "col": 22, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 60, "col": 21, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "No matching symbol 'SPAWNER_MODEL'"}, + {"row": 66, "col": 16, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'SHOW_FX'"}, + {"row": 72, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 76, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'REMOVE_DELAY'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::show_fx()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::remove_scroll()"}, + {"row": 90, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::grant_spell()"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::me_vanish()"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void SpellMakerBase::stick_to_owner()"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 129, "col": 49, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\spell_maker_protection.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\companion\\spell_maker_summoning.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 13, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 15, "col": 21, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 21, "type": "ERROR", "message": "Instead found '('"}, + {"row": 83, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\corrupted_reaver.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\croc1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\debug.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void Debug::bd_debug()"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array()"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array_elements()"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\demonwing_giant_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\demonwing_giant_ice_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void DemonwingGiantIceCl::client_activate()"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 16, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void DemonwingGiantIceCl::fire_breath_loop()"}, + {"row": 26, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 26, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 27, "col": 73, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 73, "type": "ERROR", "message": "Instead found ''"}, + {"row": 28, "col": 73, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 73, "type": "ERROR", "message": "Instead found ''"}, + {"row": 29, "col": 73, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 73, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void DemonwingGiantIceCl::end_fx()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void DemonwingGiantIceCl::remove_fx()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void DemonwingGiantIceCl::update_fire_cloud()"}, + {"row": 46, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 49, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void DemonwingGiantIceCl::setup_fire_cloud()"}, + {"row": 69, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\demonwing_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\demonwing_venom.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\djinn_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\djinn_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\djinn_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\djinn_lightning_lesser.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\djinn_lightning_lesser_alt.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\djinn_lightning_lesser_cl.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::OnRepeatTimer()"}, + {"row": 28, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 29, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::client_activate()"}, + {"row": 38, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 40, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 41, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::game_prerender()"}, + {"row": 50, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 50, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::remove_fx()"}, + {"row": 56, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::remove_me()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::hand_sprite()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 69, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 70, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 74, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::hand_powerup()"}, + {"row": 84, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::update_rhand_sprite()"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 98, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 102, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 106, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 110, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 117, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::update_lhand_sprite()"}, + {"row": 124, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 126, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 130, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 134, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 138, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 142, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 145, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 150, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::setup_attack_sprite()"}, + {"row": 160, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 160, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 163, "col": 2, "type": "INFO", "message": "Compiling void DjinnLightningLesserCl::setup_hand_sprite()"}, + {"row": 165, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 166, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 168, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 169, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 170, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 171, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 172, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 173, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\djinn_lightning_troll.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\djinn_ogre_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\djinn_ogre_fire_cl.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::OnRepeatTimer()"}, + {"row": 28, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 29, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::client_activate()"}, + {"row": 38, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 40, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 41, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::game_prerender()"}, + {"row": 54, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 54, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::update_rhand_sprite()"}, + {"row": 60, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 62, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::update_lhand_sprite()"}, + {"row": 72, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 74, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::fire_storm_loop()"}, + {"row": 96, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 96, "col": 49, "type": "ERROR", "message": "Instead found ''"}, + {"row": 97, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 97, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::end_fx()"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 108, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::remove_fx()"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::make_cloud()"}, + {"row": 115, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 116, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::update_cloud()"}, + {"row": 123, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 126, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 127, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 131, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::setup_cloud()"}, + {"row": 147, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 147, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 151, "col": 2, "type": "INFO", "message": "Compiling void DjinnOgreFireCl::setup_hand_sprite()"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 157, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 159, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 160, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 162, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\djinn_troll_lesser_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\doom_plant1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\doom_plant2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\doom_plant3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\doom_plant_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void DoomPlantCl::client_activate()"}, + {"row": 15, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void DoomPlantCl::end_fx()"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void DoomPlantCl::remove_fx()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void DoomPlantCl::shoot_spur()"}, + {"row": 33, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 34, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 35, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void DoomPlantCl::update_spur()"}, + {"row": 41, "col": 25, "type": "ERROR", "message": "No matching symbol 'NEXT_SHADOW'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void DoomPlantCl::spur_trail()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void DoomPlantCl::setup_spur()"}, + {"row": 72, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 72, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\doom_plant_new.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dragonfly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dragonfly_queen.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dragon_guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dragon_guard_breath_cl.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void DragonGuardBreathCl::client_activate()"}, + {"row": 22, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'FX_DURATION'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void DragonGuardBreathCl::end_fx()"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void DragonGuardBreathCl::remove_fx()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void DragonGuardBreathCl::breath_loop()"}, + {"row": 60, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void DragonGuardBreathCl::setup_cloud_cold()"}, + {"row": 82, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 82, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void DragonGuardBreathCl::update_cloud()"}, + {"row": 89, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 92, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void DragonGuardBreathCl::setup_cloud_fire()"}, + {"row": 116, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 116, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 120, "col": 2, "type": "INFO", "message": "Compiling void DragonGuardBreathCl::setup_cloud_poison()"}, + {"row": 135, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 135, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_bomber.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_bomber_cl.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void DwarfBomberCl::client_activate()"}, + {"row": 27, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 31, "col": 16, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 32, "col": 16, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching signatures to 'DwarfBomberCl::set_hands(string, string)'"}, + {"row": 33, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 33, "col": 3, "type": "INFO", "message": "void MS::DwarfBomberCl::set_hands()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void DwarfBomberCl::sparks_loop()"}, + {"row": 42, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 42, "col": 11, "type": "ERROR", "message": "Instead found identifier '_1'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void DwarfBomberCl::game_prerender()"}, + {"row": 59, "col": 59, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 59, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 59, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 59, "type": "ERROR", "message": "Instead found ''"}, + {"row": 71, "col": 59, "type": "ERROR", "message": "Expected expression value"}, + {"row": 71, "col": 59, "type": "ERROR", "message": "Instead found ''"}, + {"row": 78, "col": 59, "type": "ERROR", "message": "Expected expression value"}, + {"row": 78, "col": 59, "type": "ERROR", "message": "Instead found ''"}, + {"row": 86, "col": 59, "type": "ERROR", "message": "Expected expression value"}, + {"row": 86, "col": 59, "type": "ERROR", "message": "Instead found ''"}, + {"row": 91, "col": 59, "type": "ERROR", "message": "Expected expression value"}, + {"row": 91, "col": 59, "type": "ERROR", "message": "Instead found ''"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void DwarfBomberCl::end_fx()"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 103, "col": 2, "type": "INFO", "message": "Compiling void DwarfBomberCl::remove_fx()"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 108, "col": 2, "type": "INFO", "message": "Compiling void DwarfBomberCl::set_hands()"}, + {"row": 114, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 114, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 119, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 119, "col": 52, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_bigaxe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_bloat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_bloat_cl.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling DwarfZombieBloatCl::DwarfZombieBloatCl()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatCl::client_activate()"}, + {"row": 21, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatCl::end_puke()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatCl::remove_me()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatCl::puke_loop()"}, + {"row": 42, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 43, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 43, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 46, "col": 69, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 69, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatCl::update_puke()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatCl::setup_puke()"}, + {"row": 73, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 73, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_bloat_light_cl.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatLightCl::client_activate()"}, + {"row": 23, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 23, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatLightCl::game_prerender()"}, + {"row": 42, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 43, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 43, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatLightCl::remove_light()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatLightCl::light_grow()"}, + {"row": 54, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 55, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatLightCl::light_shrink()"}, + {"row": 61, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 62, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void DwarfZombieBloatLightCl::do_flicker()"}, + {"row": 87, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 87, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 106, "col": 11, "type": "ERROR", "message": "Instead found identifier '_2'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_hbow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_pickaxe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_sbow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_smallaxe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\dwarf_zombie_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\eagle.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\eagle_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\eagle_demon.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\eagle_giant_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\eagle_giant_thunder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\eagle_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\eagle_metal.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\eagle_plague.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\eagle_stone.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_air0.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_air1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_air2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_earth1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_earth2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_earth3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_earth_cl.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::client_activate()"}, + {"row": 27, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 30, "col": 13, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 34, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 4, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 42, "col": 4, "type": "ERROR", "message": "No matching symbol 'PARAM3'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::setup_burst()"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::update_burst()"}, + {"row": 72, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 72, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 79, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::setup_rock()"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 103, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::update_rock()"}, + {"row": 111, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 111, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 123, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::collide_rock()"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 126, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 129, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::end_fx()"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 135, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::remove_fx()"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 140, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::shield_hit()"}, + {"row": 142, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 142, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 143, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 143, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 144, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 144, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 145, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 145, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 150, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::setup_shield()"}, + {"row": 152, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 157, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 159, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 160, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 164, "col": 2, "type": "INFO", "message": "Compiling void ElementalEarthCl::setup_shield_negyaw()"}, + {"row": 166, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 168, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 169, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 170, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 171, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 174, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 176, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 179, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_fire1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_fire2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_fire_guardian.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_fire_guardian2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_fire_guardian3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_fire_guardian_cl.as", + "success": false, + "messages": [ + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::client_activate()"}, + {"row": 30, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 31, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::guardian_death()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::end_fx()"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::remove_fx()"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::dress_sprite_loop()"}, + {"row": 59, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 60, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::staff_glow()"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::poison_storm_on()"}, + {"row": 80, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 80, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 107, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 107, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 110, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::make_poison_storm_ring()"}, + {"row": 112, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 112, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 115, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 115, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 126, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::poison_storm_loop()"}, + {"row": 128, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 129, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 134, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::staff_track_loop()"}, + {"row": 138, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 138, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 146, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::fire_projectile_miss_sound()"}, + {"row": 148, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 151, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::update_staff_glow()"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 156, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 158, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 159, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 161, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 163, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 167, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::setup_staff_glow()"}, + {"row": 169, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 170, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 171, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 172, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 173, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 174, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 179, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 182, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::setup_cloud()"}, + {"row": 208, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 208, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 217, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 217, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 222, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::update_cloud()"}, + {"row": 234, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 234, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 238, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::setup_storm_sprite()"}, + {"row": 240, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 241, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 242, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 243, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 244, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 245, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 246, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 247, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 248, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 249, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 250, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 251, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 254, "col": 2, "type": "INFO", "message": "Compiling void ElementalFireGuardianCl::update_storm_sprite()"}, + {"row": 265, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 265, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 267, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 267, "col": 34, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_ice1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_ice2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_ice_guardian.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_ice_guardian2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_ice_guardian3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_ice_guardian_cl.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::client_activate()"}, + {"row": 28, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 29, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::guardian_death()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::end_fx()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::remove_fx()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::dress_sprite_loop()"}, + {"row": 57, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::fire_projectile()"}, + {"row": 76, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 76, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::shock_storm_on()"}, + {"row": 89, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::shock_storm_loop()"}, + {"row": 104, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 105, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 110, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::staff_track_loop()"}, + {"row": 114, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 114, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::fire_projectile_miss_sound()"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::update_staff_glow()"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 132, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 134, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 135, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 137, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 139, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::setup_staff_glow()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 147, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 148, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 149, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 150, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 151, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 152, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 159, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::setup_projectile()"}, + {"row": 169, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 169, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 178, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::setup_cloud()"}, + {"row": 204, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 204, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 213, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 213, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 218, "col": 2, "type": "INFO", "message": "Compiling void ElementalIceGuardianCl::update_cloud()"}, + {"row": 230, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 230, "col": 34, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_pure_cl.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void ElementalPureCl::client_activate()"}, + {"row": 31, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 31, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void ElementalPureCl::end_fx()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void ElementalPureCl::remove_fx()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void ElementalPureCl::owner_death()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void ElementalPureCl::game_prerender()"}, + {"row": 57, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void ElementalPureCl::skeleton_sprite()"}, + {"row": 65, "col": 24, "type": "ERROR", "message": "No matching symbol 'MAX_BONE'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void ElementalPureCl::light_bones_fire()"}, + {"row": 76, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 76, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void ElementalPureCl::setup_bone_sprite()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 2, "type": "INFO", "message": "Compiling void ElementalPureCl::update_bone_sprite()"}, + {"row": 103, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 103, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void ElementalPureCl::setup_drip_sprite()"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 136, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elemental_pure_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elf_warrior_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elf_wizard_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elf_wizard_cl.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\elf_xbow_cl.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling ElfXbowCl::ElfXbowCl()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void ElfXbowCl::client_activate()"}, + {"row": 28, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_DUR(const string)'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void ElfXbowCl::fire_bolt()"}, + {"row": 46, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void ElfXbowCl::remove_fx()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void ElfXbowCl::shadow_bolts()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void ElfXbowCl::hit_wall()"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void ElfXbowCl::do_splodie()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void ElfXbowCl::explode_sprite()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void ElfXbowCl::setup_bolt()"}, + {"row": 93, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\externals.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\eye_drainer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fallen_armor.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fallen_armor_triggered.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\firegiantghoul.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\firegiantghoul1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\firegiantghoul1_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\firegiantghoul2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\firegiantghoul2_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\firegiantghoul3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\firegiantghoul3_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\firegiantghoul_greater.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\firegiantghoul_lesser.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fire_fist_cl.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void FireFistCl::client_activate()"}, + {"row": 25, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 25, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 26, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 26, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void FireFistCl::game_prerender()"}, + {"row": 34, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 36, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 36, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void FireFistCl::setup_flame()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fire_reaver.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fire_reaver_cl.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 14, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Expected identifier"}, + {"row": 16, "col": 14, "type": "ERROR", "message": "Instead found '('"}, + {"row": 121, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fire_reaver_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fish_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fish_demon.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fish_killie.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fish_leech.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fish_shark.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fish_shark_alt.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\flan_aqua.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\flan_blue.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\flan_green.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\flan_red.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\flan_yellow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fw_alcolyte.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\fw_elder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gabe_newell.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseFlyerGrav::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gabe_newell_cl.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void GabeNewellCl::client_activate()"}, + {"row": 22, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 22, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void GabeNewellCl::end_fx()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void GabeNewellCl::game_prerender()"}, + {"row": 37, "col": 59, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 59, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gbat_hunter.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gbear_black_hpoly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gbear_black_lpoly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gbear_brown_hpoly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gbear_brown_lpoly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gbear_polar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gbear_polar_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void GbearPolarCl::client_activate()"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 19, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM2'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void GbearPolarCl::end_fx()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void GbearPolarCl::remove_fx()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void GbearPolarCl::quick_breath()"}, + {"row": 39, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 39, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 40, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 41, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 75, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 75, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void GbearPolarCl::breath_loop()"}, + {"row": 67, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 67, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void GbearPolarCl::weather_snow_breath()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void GbearPolarCl::setup_cloud()"}, + {"row": 103, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 103, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 107, "col": 2, "type": "INFO", "message": "Compiling void GbearPolarCl::update_cloud()"}, + {"row": 110, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 113, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ghoul_greater.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ghoul_lesser.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\giantbat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\giantblackbear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\giantbrownbear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\giantbrwonbear.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Giantbrwonbear::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 12, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\giantpolarbear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\giantrat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\giantrat2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\giantspider.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\giant_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\giant_frost.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gloam1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gloam_ether.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\goblin.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\goblinchief.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\goblin_guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\goblin_pouncer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\goblin_thrower.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\grizzly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\gspider.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\guard2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\guardian_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\guardian_fire_cl.as", + "success": false, + "messages": [ + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling GuardianFireCl::GuardianFireCl()"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::OnRepeatTimer()"}, + {"row": 54, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 54, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 56, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 56, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 60, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::client_activate()"}, + {"row": 69, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::remove_fx()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::game_prerender()"}, + {"row": 83, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::sword_on()"}, + {"row": 107, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 107, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 110, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 110, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 111, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 111, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 112, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 112, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 114, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 114, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 115, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 115, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 116, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 116, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::sword_flicker_loop()"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 137, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::recharge_fx()"}, + {"row": 141, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 141, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 142, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 142, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 165, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::charger_fx_loop()"}, + {"row": 170, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 170, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 173, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 173, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 177, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::recharge_fx_spit_sprite()"}, + {"row": 180, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 180, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 183, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::grab_sprite_on()"}, + {"row": 185, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 185, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 188, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::grab_fx()"}, + {"row": 192, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 192, "col": 49, "type": "ERROR", "message": "Instead found ''"}, + {"row": 193, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 193, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 202, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::stomp_fx()"}, + {"row": 204, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 207, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 214, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::smash_fx()"}, + {"row": 216, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 219, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 224, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 227, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::make_stomp_flames()"}, + {"row": 230, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 230, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 235, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::update_grab_targ_sprite()"}, + {"row": 237, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 240, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::update_spit_sprite()"}, + {"row": 250, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 250, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 251, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 251, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 262, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::update_rhand_sprite()"}, + {"row": 264, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 267, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::update_lhand_sprite()"}, + {"row": 269, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 272, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::setup_stomp_sprite()"}, + {"row": 292, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 292, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 298, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::setup_grab_targ_sprite()"}, + {"row": 300, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 301, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 302, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 303, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 305, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 306, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 307, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 308, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 311, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::setup_charger_sprite()"}, + {"row": 313, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 314, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 315, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 316, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 317, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 318, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 319, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 320, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 323, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::setup_grab_sprite()"}, + {"row": 325, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 326, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 327, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 328, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 329, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 330, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 331, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 332, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::setup_charger_lhand_sprite()"}, + {"row": 338, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 339, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 340, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 341, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 342, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 343, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 344, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 345, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 348, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::setup_charger_rhand_sprite()"}, + {"row": 350, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 351, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 352, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 353, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 354, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 355, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 356, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 357, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 360, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::setup_spit_sprite()"}, + {"row": 362, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 363, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 364, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 365, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 366, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 367, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 368, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 369, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 370, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 371, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 374, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::setup_sword_sprite()"}, + {"row": 385, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 385, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 390, "col": 2, "type": "INFO", "message": "Compiling void GuardianFireCl::end_fx()"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\guardian_iron.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\guardian_iron_charger.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCharger::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCharger::mark_position()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\guardian_iron_cl.as", + "success": false, + "messages": [ + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling GuardianIronCl::GuardianIronCl()"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::OnRepeatTimer()"}, + {"row": 54, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 54, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 56, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 56, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 60, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::client_activate()"}, + {"row": 69, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::remove_fx()"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::game_prerender()"}, + {"row": 83, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::sword_on()"}, + {"row": 107, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 107, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 110, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 110, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 111, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 111, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 112, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 112, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 114, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 114, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 115, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 115, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 116, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 116, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::sword_flicker_loop()"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 137, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::recharge_fx()"}, + {"row": 141, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 141, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 142, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 142, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 165, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::charger_fx_loop()"}, + {"row": 170, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 170, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 173, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 173, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 177, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::recharge_fx_spit_sprite()"}, + {"row": 180, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 180, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 183, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::grab_sprite_on()"}, + {"row": 185, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 185, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 188, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::grab_fx()"}, + {"row": 192, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 192, "col": 49, "type": "ERROR", "message": "Instead found ''"}, + {"row": 193, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 193, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 202, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::stomp_fx()"}, + {"row": 204, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 207, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 214, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::smash_fx()"}, + {"row": 216, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 219, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 224, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 227, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::make_stomp_flames()"}, + {"row": 230, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 230, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 235, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::update_grab_sprite()"}, + {"row": 237, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 240, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::update_grab_targ_sprite()"}, + {"row": 242, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 245, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::update_spit_sprite()"}, + {"row": 255, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 255, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 256, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 256, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 267, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::update_rhand_sprite()"}, + {"row": 269, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 272, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::update_lhand_sprite()"}, + {"row": 274, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 277, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::setup_stomp_sprite()"}, + {"row": 297, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 297, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 303, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::setup_grab_targ_sprite()"}, + {"row": 305, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 306, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 307, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 308, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 309, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 310, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 311, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 312, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 313, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 316, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::setup_charger_sprite()"}, + {"row": 318, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 319, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 320, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 321, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 322, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 323, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 324, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 325, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 328, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::setup_grab_sprite()"}, + {"row": 330, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 331, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 332, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 334, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 335, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 336, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 337, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 340, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::setup_charger_lhand_sprite()"}, + {"row": 342, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 343, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 344, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 345, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 346, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 347, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 348, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 349, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 352, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::setup_charger_rhand_sprite()"}, + {"row": 354, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 355, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 356, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 357, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 358, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 360, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::setup_spit_sprite()"}, + {"row": 366, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 367, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 368, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 369, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 370, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 371, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 372, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 373, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 374, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 375, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 378, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::setup_sword_sprite()"}, + {"row": 389, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 389, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 394, "col": 2, "type": "INFO", "message": "Compiling void GuardianIronCl::end_fx()"}, + {"row": 397, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\hawk.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling Hawk::Hawk()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\hibari.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void Hibari::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\hobgoblin.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\hobgoblin_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\hobgoblin_berserker.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\horror.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\horror2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\horror_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\horror_fire2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\horror_fire2_ecaves.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\horror_gravfly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\horror_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\horror_lightning2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\horror_lightning_old.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\hunger.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\hunger_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\hungryrat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\hydra_fire_lesser.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\hydra_fire_lesser_cl.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::client_activate()"}, + {"row": 46, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::game_prerender()"}, + {"row": 59, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 60, "col": 57, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 57, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 65, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 65, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::end_fx()"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::remove_fx()"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::update_flame_circle()"}, + {"row": 88, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 88, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 96, "col": 80, "type": "ERROR", "message": "Expected expression value"}, + {"row": 96, "col": 80, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::setup_flame_circle()"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::cone_breath_on()"}, + {"row": 125, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 125, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 126, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 126, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 127, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 127, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 128, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 128, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 138, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::breath_sprites_loop()"}, + {"row": 141, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 141, "col": 11, "type": "ERROR", "message": "Instead found identifier '_1'"}, + {"row": 142, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 142, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 143, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 143, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 144, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 144, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 145, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 145, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 146, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 146, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 162, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::update_breath_sprite()"}, + {"row": 166, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 170, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::setup_breath_sprite()"}, + {"row": 172, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 173, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 174, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 179, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 182, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 183, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 186, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::update_breath_circle()"}, + {"row": 190, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 190, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 191, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 191, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 192, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 192, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 193, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 193, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 201, "col": 80, "type": "ERROR", "message": "Expected expression value"}, + {"row": 201, "col": 80, "type": "ERROR", "message": "Instead found ''"}, + {"row": 207, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::setup_breath_circle()"}, + {"row": 209, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 210, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 211, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 212, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 213, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 214, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 215, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 216, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 217, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 218, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 219, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 220, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 221, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 224, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::add_beam()"}, + {"row": 226, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 227, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 228, "col": 21, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 230, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 232, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 234, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM1'"}, + {"row": 237, "col": 2, "type": "INFO", "message": "Compiling void HydraFireLesserCl::remove_beams()"}, + {"row": 239, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ice_mage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ice_mage2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ice_reaver.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ice_reaver_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ice_troll.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ice_troll_lobber.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ice_troll_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\khaz_model_test.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void KhazModelTest::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBBox'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void KhazModelTest::ext_anim()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void KhazModelTest::npc_suicide()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void KhazModelTest::ext_faceme()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\kodiak.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_alcolyte.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_alcolyte_ambush.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_alcolyte_blue.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_alcolyte_blue_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_alcolyte_gray.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_alcolyte_green.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_alcolyte_green_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_alcolyte_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_alcolyte_red.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_childre.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_childre_black.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_childre_boss.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_childre_boss_cl.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling KChildreBossCl::KChildreBossCl()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void KChildreBossCl::spriteify()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void KChildreBossCl::remove_me()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void KChildreBossCl::createsprite()"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"}, + {"row": 41, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void KChildreBossCl::client_activate()"}, + {"row": 47, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void KChildreBossCl::new_cast()"}, + {"row": 53, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void KChildreBossCl::setup_sprite1_sparkle()"}, + {"row": 60, "col": 35, "type": "ERROR", "message": "No matching operator that takes the types 'string' and 'string' found"}, + {"row": 61, "col": 37, "type": "ERROR", "message": "'x' is not a member of 'string'"}, + {"row": 62, "col": 37, "type": "ERROR", "message": "'y' is not a member of 'string'"}, + {"row": 63, "col": 37, "type": "ERROR", "message": "'z' is not a member of 'string'"}, + {"row": 64, "col": 19, "type": "ERROR", "message": "No matching symbol 'SPRITE_VELOCITY'"}, + {"row": 65, "col": 19, "type": "ERROR", "message": "No matching symbol 'SPRITE_VELOCITY'"}, + {"row": 66, "col": 26, "type": "ERROR", "message": "No matching signatures to 'Vector3(string, string, string)'"}, + {"row": 66, "col": 26, "type": "INFO", "message": "Candidates are:"}, + {"row": 66, "col": 26, "type": "INFO", "message": "Vector3::Vector3()"}, + {"row": 66, "col": 26, "type": "INFO", "message": "Vector3::Vector3(float, float, float)"}, + {"row": 66, "col": 26, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 66, "col": 26, "type": "INFO", "message": "Vector3::Vector3(const Vector3&in)"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_childre_boss_jelly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_elder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_elder_cl.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling KElderCl::KElderCl()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void KElderCl::client_activate()"}, + {"row": 30, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 30, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void KElderCl::ke_maintain_script()"}, + {"row": 41, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void KElderCl::ke_update_knife_sprite()"}, + {"row": 57, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void KElderCl::ke_beam_loop()"}, + {"row": 68, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 69, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 71, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 71, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 72, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 73, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 73, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void KElderCl::ke_beam_on()"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 80, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 81, "col": 25, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 91, "col": 2, "type": "INFO", "message": "Compiling void KElderCl::ke_knife_sprite_on()"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void KElderCl::ke_setup_knife_sprite()"}, + {"row": 103, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 103, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void KElderCl::ke_spit_sparks()"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 128, "col": 2, "type": "INFO", "message": "Compiling void KElderCl::ke_end_effect()"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 135, "col": 2, "type": "INFO", "message": "Compiling void KElderCl::ke_remove_me()"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_hollow_one.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_hollow_one_cl.as", + "success": false, + "messages": [ + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::client_activate()"}, + {"row": 29, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::end_effect()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::spawn_drain_sprite_cl()"}, + {"row": 41, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 42, "col": 26, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 43, "col": 18, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 45, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 51, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 63, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 67, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 71, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 75, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::update_drainer()"}, + {"row": 81, "col": 26, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 82, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 84, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 85, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 87, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 89, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 91, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 93, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 95, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 97, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 99, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 101, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 103, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 105, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 107, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 109, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 111, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 113, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 117, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::update_drainer1()"}, + {"row": 119, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 119, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 131, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::update_drainer2()"}, + {"row": 133, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 133, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 145, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::update_drainer3()"}, + {"row": 147, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 147, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 159, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::update_drainer4()"}, + {"row": 161, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 161, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 173, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::update_drainer5()"}, + {"row": 175, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 175, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 187, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::update_drainer6()"}, + {"row": 189, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 189, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 201, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::update_drainer7()"}, + {"row": 203, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 203, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 215, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::update_drainer8()"}, + {"row": 217, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 217, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 229, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::sprite_popped()"}, + {"row": 231, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetToken'"}, + {"row": 234, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::sprite_splode()"}, + {"row": 236, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 237, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 238, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 239, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 240, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 241, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 244, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::setup_drainer()"}, + {"row": 255, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 255, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 260, "col": 2, "type": "INFO", "message": "Compiling void KHollowOneCl::setup_spark()"}, + {"row": 264, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 264, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_larva.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_larva_black.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\k_larva_black_cl.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling KLarvaBlackCl::KLarvaBlackCl()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void KLarvaBlackCl::client_activate()"}, + {"row": 21, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 22, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void KLarvaBlackCl::end_puke()"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void KLarvaBlackCl::remove_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void KLarvaBlackCl::puke_loop()"}, + {"row": 43, "col": 69, "type": "ERROR", "message": "Expected expression value"}, + {"row": 43, "col": 69, "type": "ERROR", "message": "Instead found ''"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void KLarvaBlackCl::setup_puke()"}, + {"row": 58, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lanskeleton.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lan_skeleton.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lighted_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void LightedCl::client_activate()"}, + {"row": 19, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 19, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void LightedCl::game_prerender()"}, + {"row": 26, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 26, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void LightedCl::remove_me()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lightning_worm.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lost_soul.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lost_soul_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lslime.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lslime_nr.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lumbering_dead.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure_1000hp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure_100hp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure_150hp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure_200hp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure_250hp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure_25hp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure_300hp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure_500hp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure_50hp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\lure_750hp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_gminion_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_gminion_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_gminion_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_gminion_poison.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_gminion_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_gminion_venom.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_minion_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_minion_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_minion_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_minion_poison.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_minion_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\maldora_minion_venom.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\minispider.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\monster_random.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void MonsterRandom::OnSpawn()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void MonsterRandom::game_postspawn()"}, + {"row": 29, "col": 13, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 34, "col": 27, "type": "ERROR", "message": "No matching symbol 'PARAM'"}, + {"row": 38, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_IN_MOBS'"}, + {"row": 40, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 43, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_IN_MOBS'"}, + {"row": 45, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 49, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 51, "col": 20, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 51, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 51, "col": 20, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 51, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "'RND_MOB' is already declared"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching signatures to 'MonsterRandom::spawn_mob(string)'"}, + {"row": 53, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 53, "col": 3, "type": "INFO", "message": "void MS::MonsterRandom::spawn_mob()"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void MonsterRandom::process_in_mobs()"}, + {"row": 58, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void MonsterRandom::spawn_mob()"}, + {"row": 75, "col": 36, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 75, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 76, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void MonsterRandom::monitor_spawn()"}, + {"row": 82, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 82, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 82, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 82, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 88, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void MonsterRandom::remove_me()"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'DoDamage'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\morc_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\morc_chief.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\morc_icewarrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\morc_ranger.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\morc_shaman_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\morc_shaman_ice_noblizz.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\morc_shaman_ice_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\morc_shaman_ice_turret_noblizz.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\morc_sniper.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\morc_warrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummies_getup.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void MummiesGetup::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_bile_attack_cl.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling MummyBileAttackCl::MummyBileAttackCl()"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void MummyBileAttackCl::client_activate()"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void MummyBileAttackCl::end_puke()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void MummyBileAttackCl::remove_me()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void MummyBileAttackCl::puke_loop()"}, + {"row": 41, "col": 69, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 69, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void MummyBileAttackCl::setup_puke()"}, + {"row": 56, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 56, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 59, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_cleric.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_cursed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_fodder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_ice_breath_cl.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void MummyIceBreathCl::client_activate()"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM2'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void MummyIceBreathCl::fx_end()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void MummyIceBreathCl::remove_me()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void MummyIceBreathCl::fx_loop()"}, + {"row": 34, "col": 75, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 75, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void MummyIceBreathCl::setup_sprite()"}, + {"row": 49, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 52, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 52, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_lightning_breath_cl.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void MummyLightningBreathCl::client_activate()"}, + {"row": 14, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 15, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void MummyLightningBreathCl::beam_loop()"}, + {"row": 25, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 25, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 27, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 29, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 30, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 30, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void MummyLightningBreathCl::end_fx()"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void MummyLightningBreathCl::remove_fx()"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void MummyLightningBreathCl::ke_spit_sparks()"}, + {"row": 58, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_necro.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_slave.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_storm_pharaoh.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_warrior1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_warrior1b.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_warrior1c.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_warrior2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_warrior2b.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\mummy_warrior2c.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ogre.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ogre_cave.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ogre_cave_thug.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ogre_cave_welp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ogre_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ogre_stone.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\ogre_swamp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orcarcher.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orcberserker.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orcbeserker.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orcflayer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orcranger.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orcwarrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_archer_blackhand.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_base_melee.as", + "success": false, + "messages": [ + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void OrcBaseMelee::orc_spawn()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void OrcBaseMelee::swing_axe()"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'baseorc_yell'"}, + {"row": 38, "col": 41, "type": "ERROR", "message": "No matching symbol 'ATTACK_DMG_HIGH'"}, + {"row": 38, "col": 25, "type": "ERROR", "message": "No matching symbol 'ATTACK_DMG_LOW'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void OrcBaseMelee::OnTargetValidate(CBaseEntity@)"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 51, "col": 23, "type": "ERROR", "message": "No matching symbol 'm_hAttackTarget'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void OrcBaseMelee::orc_jump_check()"}, + {"row": 58, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ORC_HOP_DELAY'"}, + {"row": 60, "col": 8, "type": "ERROR", "message": "No matching symbol 'IS_FLEEING'"}, + {"row": 61, "col": 9, "type": "ERROR", "message": "No matching symbol 'm_hAttackTarget'"}, + {"row": 62, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 63, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 64, "col": 25, "type": "ERROR", "message": "'z' is not a member of 'string'"}, + {"row": 65, "col": 39, "type": "ERROR", "message": "No matching symbol 'm_hAttackTarget'"}, + {"row": 66, "col": 33, "type": "ERROR", "message": "'z' is not a member of 'string'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 69, "col": 29, "type": "ERROR", "message": "No matching symbol 'ORC_JUMP_THRESH'"}, + {"row": 71, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 73, "col": 31, "type": "ERROR", "message": "No matching symbol 'ORC_JUMP_CUTOFF'"}, + {"row": 78, "col": 10, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 81, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 82, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void OrcBaseMelee::orc_hop()"}, + {"row": 101, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 101, "col": 47, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_base_ranged.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling OrcBaseRanged::OrcBaseRanged()"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "The member 'MOVE_RANGE' is accessed before the initialization"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "Both conditions must initialize member 'MOVE_RANGE'"}, + {"row": 21, "col": 17, "type": "ERROR", "message": "The member 'ATTACK_RANGE' is accessed before the initialization"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Both conditions must initialize member 'ATTACK_RANGE'"}, + {"row": 25, "col": 20, "type": "ERROR", "message": "The member 'ATTACK_HITRANGE' is accessed before the initialization"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "Both conditions must initialize member 'ATTACK_HITRANGE'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void OrcBaseRanged::orc_spawn()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void OrcBaseRanged::orc_death()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void OrcBaseRanged::grab_arrow()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void OrcBaseRanged::shoot_arrow()"}, + {"row": 53, "col": 56, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 56, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void OrcBaseRanged::npc_targetsighted()"}, + {"row": 60, "col": 8, "type": "ERROR", "message": "No matching symbol 'ALT_ATTACKS'"}, + {"row": 61, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 63, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_berserker.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_berserker_blackhand.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_brawler.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_cata_winder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_champion.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_chief.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_demonic.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_demonic_shaman.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_demonic_sniper.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_demonic_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_flayer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_ranger.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_scout.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_shaman_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_shaman_fire_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_sniper.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_unarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_warrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_warrior_blackhand.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\orc_weak.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\poison_fist_cl.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void PoisonFistCl::client_activate()"}, + {"row": 26, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 26, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 27, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void PoisonFistCl::game_prerender()"}, + {"row": 35, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void PoisonFistCl::setup_flame()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 20, "type": "ERROR", "message": "No matching symbol 'N_SPR_FRAMES'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\polarbear.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\polarbearcub.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\rabid_skele_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\rat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\rat_fangtooth.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\reavers_cl.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling ReaversCl::ReaversCl()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::client_activate()"}, + {"row": 29, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 30, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 31, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 32, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 33, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 35, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 37, "col": 4, "type": "ERROR", "message": "No matching signatures to 'ReaversCl::errupt_on(string)'"}, + {"row": 37, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 37, "col": 4, "type": "INFO", "message": "void MS::ReaversCl::errupt_on()"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 41, "col": 4, "type": "ERROR", "message": "No matching signatures to 'ReaversCl::breath_on(string)'"}, + {"row": 41, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 41, "col": 4, "type": "INFO", "message": "void MS::ReaversCl::breath_on()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::end_fx()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::remove_fx()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::errupt_on()"}, + {"row": 59, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 60, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::errupt_loop()"}, + {"row": 73, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 74, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 99, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::errupt_setup_puke()"}, + {"row": 101, "col": 69, "type": "ERROR", "message": "Expected expression value"}, + {"row": 101, "col": 69, "type": "ERROR", "message": "Instead found ''"}, + {"row": 109, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::errupt_setup_fire()"}, + {"row": 111, "col": 74, "type": "ERROR", "message": "Expected expression value"}, + {"row": 111, "col": 74, "type": "ERROR", "message": "Instead found ''"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::update_puke()"}, + {"row": 122, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 128, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::setup_puke()"}, + {"row": 142, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 142, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 146, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::setup_fire()"}, + {"row": 157, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 157, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::breath_on()"}, + {"row": 163, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 164, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 174, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::breath_loop()"}, + {"row": 179, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 179, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 182, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::make_cloud()"}, + {"row": 184, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 185, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 188, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 189, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 190, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 194, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 195, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 196, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 200, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::update_cloud()"}, + {"row": 203, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 206, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 207, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 211, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::setup_cloud()"}, + {"row": 227, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 227, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 231, "col": 2, "type": "INFO", "message": "Compiling void ReaversCl::setup_fire_cloud()"}, + {"row": 250, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 250, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\rogue.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scarab_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scarab_venom.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scorpion1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scorpion2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scorpion3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scorpion4.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scorpion5.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scorpion5_stone.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scorpion6.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scorpion6_stone.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scorpion7_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scream.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Scream::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\scream2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sgoblin.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sgoblin_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SgoblinCl::poof_fx()"}, + {"row": 17, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SgoblinCl::unpoof_fx()"}, + {"row": 28, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void SgoblinCl::unpoof_fx_loop()"}, + {"row": 39, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 39, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SgoblinCl::poof_sprite()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void SgoblinCl::unpoof_sprite()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\shadow_form.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\shadow_form_boss.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\shadow_form_boss_cl.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossCl::client_activate()"}, + {"row": 24, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossCl::end_fx()"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossCl::end_fx_post_boss()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossCl::remove_fx()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossCl::fx_loop()"}, + {"row": 51, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossCl::make_smokes()"}, + {"row": 80, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 80, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossCl::boss_died()"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 90, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossCl::update_shadows1()"}, + {"row": 95, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 95, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 97, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 97, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 125, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 125, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 130, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossCl::setup_shadows1()"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 136, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 142, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\shadow_form_boss_fx.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossFx::OnRepeatTimer()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossFx::OnSpawn()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossFx::remove_beams()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\shadow_form_boss_fx_cl.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossFxCl::client_activate()"}, + {"row": 13, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'do_tracker_loop'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossFxCl::end_fx()"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossFxCl::remove_fx()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossFxCl::do_smokes_loop()"}, + {"row": 35, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 39, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 41, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossFxCl::update_shadows2()"}, + {"row": 49, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 51, "col": 8, "type": "WARN", "message": "Variable 'CUR_FRAME' hides another variable of same name in outer scope"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 57, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 59, "col": 8, "type": "WARN", "message": "Variable 'CUR_SCALE' hides another variable of same name in outer scope"}, + {"row": 60, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormBossFxCl::setup_shadows2()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\shadow_form_cl.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormCl::client_activate()"}, + {"row": 29, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 30, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 30, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormCl::end_fx()"}, + {"row": 37, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormCl::remove_fx()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormCl::do_shadows()"}, + {"row": 51, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 61, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 61, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 63, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 67, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 67, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 69, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 73, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 73, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 75, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 75, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 79, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormCl::update_shadows()"}, + {"row": 88, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 88, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 93, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormCl::shadow_death()"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 126, "col": 2, "type": "INFO", "message": "Compiling void ShadowFormCl::setup_shadows()"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 136, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\shambler1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\shambler2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton2_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_fire1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_fire2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_ice1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_ice2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_lightning1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_lightning2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_poison1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_poison2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_stone1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_archer_stone2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_crystal1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_geric.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_gold.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_golden_guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_gstone1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_gstone1_noxp.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_guardian.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ice2_hammer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ice_enraged.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ice_enraged_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ice_lord.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ice_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ice_warrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ice_warrior_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_lightning_cl.as", + "success": false, + "messages": [ + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void SkeletonLightningCl::client_activate()"}, + {"row": 30, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 31, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 32, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 33, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 34, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 35, "col": 15, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::CL_DURATION(const string)'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SkeletonLightningCl::spriteify()"}, + {"row": 45, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void SkeletonLightningCl::createsprite()"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"}, + {"row": 64, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void SkeletonLightningCl::setup_sprite1_sparkle()"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void SkeletonLightningCl::sprite_update()"}, + {"row": 89, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 93, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void SkeletonLightningCl::clear_sprites()"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void SkeletonLightningCl::remove_me()"}, + {"row": 121, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 128, "col": 4, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 132, "col": 2, "type": "INFO", "message": "Compiling void SkeletonLightningCl::clear_beams()"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 137, "col": 2, "type": "INFO", "message": "Compiling void SkeletonLightningCl::add_beam()"}, + {"row": 154, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 154, "col": 47, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_mage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_mage_cl.as", + "success": false, + "messages": [ + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void SkeletonMageCl::client_activate()"}, + {"row": 38, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SkeletonMageCl::game_prerender()"}, + {"row": 46, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void SkeletonMageCl::end_effect()"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 96, "col": 2, "type": "INFO", "message": "Compiling void SkeletonMageCl::remove_effect()"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void SkeletonMageCl::show_orb()"}, + {"row": 104, "col": 73, "type": "ERROR", "message": "Expected expression value"}, + {"row": 104, "col": 73, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 105, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 117, "col": 2, "type": "INFO", "message": "Compiling void SkeletonMageCl::setup_orb_sprite()"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 126, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 130, "col": 2, "type": "INFO", "message": "Compiling void SkeletonMageCl::update_orb_sprite()"}, + {"row": 141, "col": 77, "type": "ERROR", "message": "Expected expression value"}, + {"row": 141, "col": 77, "type": "ERROR", "message": "Instead found ''"}, + {"row": 149, "col": 2, "type": "INFO", "message": "Compiling void SkeletonMageCl::show_seal_warning()"}, + {"row": 151, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 152, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 153, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 154, "col": 16, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 157, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 164, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 172, "col": 2, "type": "INFO", "message": "Compiling void SkeletonMageCl::setup_seal_warn()"}, + {"row": 174, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 179, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 182, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 183, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison4.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison5.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison6.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison_bolter.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison_bomber.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison_guarder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison_rager.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison_random.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison_sworder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_poison_vamper.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ravager.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ravager_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ravager_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_ravager_venom.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_soul_eater.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_spartaaa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_stone1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_stone2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skeleton_stone3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skels_deep_sleep.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void SkelsDeepSleep::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void SkelsDeepSleep::suicide_me()"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void SkelsDeepSleep::suicide_me2()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skels_normal.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SkelsNormal::OnSpawn()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void SkelsNormal::remove_sleeps()"}, + {"row": 30, "col": 26, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 31, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void SkelsNormal::remove_sleeps2()"}, + {"row": 38, "col": 26, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 39, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SkelsNormal::double_remove()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skels_sleep.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void SkelsSleep::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SkelsSleep::suicide_me()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void SkelsSleep::suicide_me2()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skels_wakeup.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void SkelsWakeup::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\skullcrab.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_black_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_black_huge.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_black_large.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_black_large2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_black_large_nr.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_black_small.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_black_small2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_bomber.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_ceriux1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_ceriux1_nr.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_fools_gold_small.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_frost.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_green.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_green_huge.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_green_large.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_lava_large.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_lava_small.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_magma_large.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_magma_small.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_mud_large.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\slime_mud_small.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_cobra.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_cobra_boss.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_cobra_boss_cl.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void SnakeCobraBossCl::make_cloud()"}, + {"row": 16, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void SnakeCobraBossCl::setup_cloud()"}, + {"row": 37, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 37, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_cobra_boss_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_cursed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_gcobra.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_gcobra_cl.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void SnakeGcobraCl::client_activate()"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SnakeGcobraCl::end_fx()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void SnakeGcobraCl::remove_fx()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void SnakeGcobraCl::make_clouds()"}, + {"row": 41, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void SnakeGcobraCl::setup_cloud()"}, + {"row": 62, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_gcobra_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_gcobra_fire_cl.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void SnakeGcobraFireCl::client_activate()"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SnakeGcobraFireCl::end_fx()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void SnakeGcobraFireCl::remove_fx()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void SnakeGcobraFireCl::make_clouds()"}, + {"row": 41, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void SnakeGcobraFireCl::setup_cloud()"}, + {"row": 62, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_gcobra_metal.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_gsidewinder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_lord.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_lord2.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snake_sidewinder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snowboar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snowboar1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snowboar2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\snowboar3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_archer1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_archer2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_archer3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_brawler.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_chief1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_chief2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_juggernaut.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_recruit.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_shaman_elder.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_shaman_lesser.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_telepoint1.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint1::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 9, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint1::special_reg()"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 30, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 32, "col": 35, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 33, "col": 36, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint1::remove_me()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint1::tele_used()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_telepoint2.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint2::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 9, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint2::special_reg()"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 30, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 32, "col": 35, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 33, "col": 36, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint2::remove_me()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint2::tele_used()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_telepoint3.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint3::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 9, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint3::special_reg()"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 30, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 32, "col": 35, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 33, "col": 36, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint3::remove_me()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint3::tele_used()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_telepoint4.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint4::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 9, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint4::special_reg()"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 30, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 32, "col": 35, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 33, "col": 36, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'G_RUNE_POINTS'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint4::remove_me()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint4::tele_used()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_warrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\sorc_warrior_lesser.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_base_new.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_cave.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_crystal.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_fire_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_fire_spitting.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_fire_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_giant.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_mini_poison.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_queen.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_snow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_spitting.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_spitting_clipped.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_thornlands.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spider_webber.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\spotter_hack.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SpotterHack::see_enemy()"}, + {"row": 20, "col": 27, "type": "ERROR", "message": "Expected expression value"}, + {"row": 20, "col": 27, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\acid_ball_guided.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void AcidBallGuided::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\affliction_lance.as", + "success": false, + "messages": [ + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLance::OnSpawn()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBlind'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLance::game_dynamically_created()"}, + {"row": 52, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 52, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLance::fix_pitch_loop()"}, + {"row": 69, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 71, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 73, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 77, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 79, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 84, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 85, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 88, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLance::aoe_affect_target()"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLance::aoe_end()"}, + {"row": 99, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 103, "col": 4, "type": "ERROR", "message": "No matching signatures to 'EmitSound(const int, const int, const string)'"}, + {"row": 103, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 103, "col": 4, "type": "INFO", "message": "void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int)"}, + {"row": 103, "col": 4, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 103, "col": 4, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in)"}, + {"row": 103, "col": 4, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in, float)"}, + {"row": 103, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 104, "col": 4, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 108, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLance::transfer_location()"}, + {"row": 114, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 118, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetScriptFlags'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::OnSpawn()"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dynamically_created()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_start()"}, + {"row": 39, "col": 22, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 16, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 43, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DURATION'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_scan_loop()"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_affect_targets()"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dodamage()"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::func_filter_targs()"}, + {"row": 104, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 106, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_FRIENDLY'"}, + {"row": 108, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 108, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Candidates are:"}, + {"row": 110, "col": 10, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 114, "col": 11, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 118, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 121, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 127, "col": 10, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "No matching symbol 'AOE_AFFECTS_WARY'"}, + {"row": 135, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 138, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_SCAN_TYPE'"}, + {"row": 140, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 141, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 142, "col": 24, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 146, "col": 8, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 149, "col": 3, "type": "WARN", "message": "Unreachable code"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\affliction_lance_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLanceCl::client_activate()"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLanceCl::end_fx()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 28, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLanceCl::remove_fx()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLanceCl::fx_loop()"}, + {"row": 42, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 43, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 43, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 50, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 50, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLanceCl::update_cloud()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void AfflictionLanceCl::setup_cloud()"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\bandit_boss_fire_wall.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\barrier.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void Barrier::game_dynamically_created()"}, + {"row": 25, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 26, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 36, "col": 7, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 40, "col": 7, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 42, "col": 21, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 44, "col": 7, "type": "ERROR", "message": "No matching symbol 'param7'"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "No matching symbol 'param8'"}, + {"row": 50, "col": 18, "type": "ERROR", "message": "No matching symbol 'param8'"}, + {"row": 51, "col": 18, "type": "ERROR", "message": "No matching symbol 'param8'"}, + {"row": 53, "col": 4, "type": "ERROR", "message": "No matching symbol 'PARAM8'"}, + {"row": 57, "col": 19, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 61, "col": 19, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 63, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 65, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void Barrier::OnSpawn()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void Barrier::scan_loop()"}, + {"row": 89, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 90, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 90, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 90, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 90, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 91, "col": 19, "type": "ERROR", "message": "Both operands must be handles when comparing identity"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 93, "col": 37, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 95, "col": 16, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 97, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 103, "col": 2, "type": "INFO", "message": "Compiling void Barrier::affect_targets()"}, + {"row": 124, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 124, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 129, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 129, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 132, "col": 2, "type": "INFO", "message": "Compiling void Barrier::remove_barrier()"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 136, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 138, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void Barrier::remove_me()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\barrier_cl.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 14, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 89, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\base_aoe.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::OnSpawn()"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::get_skill()"}, + {"row": 40, "col": 32, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "No matching symbol 'ACTIVE_SKILL'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_scan_loop()"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dmg_loop()"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad()"}, + {"row": 63, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 65, "col": 16, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 67, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 68, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 69, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 71, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 76, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 78, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_apply_loop()"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly()"}, + {"row": 95, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 100, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 102, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 102, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 107, "col": 9, "type": "ERROR", "message": "No matching symbol 'DO_EFFECT'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'apply_aoe_effect'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dodamage_rad()"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 116, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_end()"}, + {"row": 119, "col": 7, "type": "ERROR", "message": "No matching symbol 'MY_SCRIPT_IDX'"}, + {"row": 121, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\base_aoe2.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::OnSpawn()"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dynamically_created()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_start()"}, + {"row": 39, "col": 22, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 16, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 43, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DURATION'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_scan_loop()"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_affect_targets()"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dodamage()"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::func_filter_targs()"}, + {"row": 104, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 106, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_FRIENDLY'"}, + {"row": 108, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 108, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Candidates are:"}, + {"row": 110, "col": 10, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 114, "col": 11, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 118, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 121, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 127, "col": 10, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "No matching symbol 'AOE_AFFECTS_WARY'"}, + {"row": 135, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 138, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_SCAN_TYPE'"}, + {"row": 140, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 141, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 142, "col": 24, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 146, "col": 8, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 149, "col": 3, "type": "WARN", "message": "Unreachable code"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\base_summon.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\bear1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\blast.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Blast::game_dynamically_created()"}, + {"row": 17, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 17, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void Blast::remove_me()"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\blood_drinker.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void BloodDrinker::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\bludgeon_axe.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\chain_scanner.as", + "success": false, + "messages": [ + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void ChainScanner::game_dynamically_created()"}, + {"row": 31, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 32, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 32, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 32, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 32, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 33, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 34, "col": 21, "type": "ERROR", "message": "No matching symbol 'DAMAGE_ADJ'"}, + {"row": 37, "col": 7, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 39, "col": 19, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void ChainScanner::fire_bolts()"}, + {"row": 46, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'aoe_applyeffect_rad'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void ChainScanner::apply_aoe_effect()"}, + {"row": 59, "col": 37, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 60, "col": 19, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 60, "col": 19, "type": "INFO", "message": "Candidates are:"}, + {"row": 60, "col": 19, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 60, "col": 19, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 61, "col": 23, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 67, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_ZAP1'"}, + {"row": 67, "col": 40, "type": "ERROR", "message": "No matching symbol 'SOUND_ZAP2'"}, + {"row": 67, "col": 52, "type": "ERROR", "message": "No matching symbol 'SOUND_ZAP3'"}, + {"row": 68, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 69, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 73, "col": 22, "type": "ERROR", "message": "No matching symbol 'DAMAGE_ADJ'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void ChainScanner::heart_beat()"}, + {"row": 84, "col": 31, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 84, "col": 31, "type": "INFO", "message": "Candidates are:"}, + {"row": 84, "col": 31, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 84, "col": 31, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 84, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void ChainScanner::death_count()"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::OnSpawn()"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::get_skill()"}, + {"row": 40, "col": 32, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "No matching symbol 'ACTIVE_SKILL'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_scan_loop()"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dmg_loop()"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad()"}, + {"row": 63, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 65, "col": 16, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 67, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 68, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 69, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 71, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 76, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 78, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_apply_loop()"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly()"}, + {"row": 95, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 100, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 102, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 102, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 107, "col": 9, "type": "ERROR", "message": "No matching symbol 'DO_EFFECT'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'apply_aoe_effect'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dodamage_rad()"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 116, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_end()"}, + {"row": 119, "col": 7, "type": "ERROR", "message": "No matching symbol 'MY_SCRIPT_IDX'"}, + {"row": 121, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\chain_scanner_cl.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void ChainScannerCl::client_activate()"}, + {"row": 12, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 12, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 13, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 13, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 23, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 23, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 27, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 31, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 31, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 39, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 43, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 43, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 59, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void ChainScannerCl::remove_me()"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\circle_of_death.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void CircleOfDeath::game_precache()"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void CircleOfDeath::game_dynamically_created()"}, + {"row": 32, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 33, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 34, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 35, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 36, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 38, "col": 32, "type": "ERROR", "message": "No matching symbol 'PARAM'"}, + {"row": 42, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_PULSE'"}, + {"row": 42, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 43, "col": 37, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 45, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void CircleOfDeath::aoe_affect_target()"}, + {"row": 51, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void CircleOfDeath::aoe_end()"}, + {"row": 57, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_PULSE'"}, + {"row": 57, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::OnSpawn()"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dynamically_created()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_start()"}, + {"row": 39, "col": 22, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 16, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 43, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DURATION'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_scan_loop()"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_affect_targets()"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dodamage()"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::func_filter_targs()"}, + {"row": 104, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 106, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_FRIENDLY'"}, + {"row": 108, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 108, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Candidates are:"}, + {"row": 110, "col": 10, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 114, "col": 11, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 118, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 121, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 127, "col": 10, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "No matching symbol 'AOE_AFFECTS_WARY'"}, + {"row": 135, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 138, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_SCAN_TYPE'"}, + {"row": 140, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 141, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 142, "col": 24, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 146, "col": 8, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 149, "col": 3, "type": "WARN", "message": "Unreachable code"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\circle_of_death_cl.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void CircleOfDeathCl::client_activate()"}, + {"row": 23, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 24, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void CircleOfDeathCl::fx_loop()"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void CircleOfDeathCl::end_fx()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void CircleOfDeathCl::remove_me()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void CircleOfDeathCl::setup_seal()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void CircleOfDeathCl::setup_skull()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\circle_of_death_old.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\circle_of_fire.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 22, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 23, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 23, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 24, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 24, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 26, "col": 14, "type": "ERROR", "message": "Expected identifier"}, + {"row": 26, "col": 14, "type": "ERROR", "message": "Instead found '('"}, + {"row": 245, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\circle_of_healing.as", + "success": false, + "messages": [ + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void CircleOfHealing::game_dynamically_created()"}, + {"row": 34, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 35, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 36, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 37, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetSkillLevel'"}, + {"row": 38, "col": 34, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::MY_DURATION(const string)'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void CircleOfHealing::OnSpawn()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'DropToFloor'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 58, "col": 20, "type": "ERROR", "message": "No matching symbol 'SOUND_PULSE'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetScriptFlags'"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void CircleOfHealing::make_seal()"}, + {"row": 64, "col": 15, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 65, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void CircleOfHealing::check_if_near()"}, + {"row": 73, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 74, "col": 10, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 75, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void CircleOfHealing::apply_aoe_effect()"}, + {"row": 82, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 86, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 87, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 91, "col": 25, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 92, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 94, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 98, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 102, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_ADD_POINTS'"}, + {"row": 104, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 107, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void CircleOfHealing::aoe_end()"}, + {"row": 114, "col": 19, "type": "ERROR", "message": "No matching symbol 'SOUND_PULSE'"}, + {"row": 116, "col": 7, "type": "ERROR", "message": "No matching symbol 'MY_SCRIPT_IDX'"}, + {"row": 118, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::OnSpawn()"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::get_skill()"}, + {"row": 40, "col": 32, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "No matching symbol 'ACTIVE_SKILL'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_scan_loop()"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dmg_loop()"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad()"}, + {"row": 63, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 65, "col": 16, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 67, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 68, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 69, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 71, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 76, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 78, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_apply_loop()"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly()"}, + {"row": 95, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 100, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 102, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 102, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 107, "col": 9, "type": "ERROR", "message": "No matching symbol 'DO_EFFECT'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'apply_aoe_effect'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dodamage_rad()"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 116, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_end()"}, + {"row": 119, "col": 7, "type": "ERROR", "message": "No matching symbol 'MY_SCRIPT_IDX'"}, + {"row": 121, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\circle_of_ice_greater.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\circle_of_ice_lesser.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 24, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 26, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 26, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 28, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 28, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 197, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\circle_of_ice_player.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 24, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 26, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 26, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 28, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 28, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 197, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\circle_of_ice_sword.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 24, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 26, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 26, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 28, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 28, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 197, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\circle_of_lolth.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void CircleOfLolth::game_precache()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void CircleOfLolth::OnSpawn()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void CircleOfLolth::game_dynamically_created()"}, + {"row": 44, "col": 56, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 56, "type": "ERROR", "message": "Instead found ''"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void CircleOfLolth::aoe_scan_loop()"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void CircleOfLolth::aoe_affect_target()"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void CircleOfLolth::aoe_end()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::OnSpawn()"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dynamically_created()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_start()"}, + {"row": 39, "col": 22, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 16, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 43, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DURATION'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_scan_loop()"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_affect_targets()"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dodamage()"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::func_filter_targs()"}, + {"row": 104, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 106, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_FRIENDLY'"}, + {"row": 108, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 108, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Candidates are:"}, + {"row": 110, "col": 10, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 114, "col": 11, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 118, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 121, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 127, "col": 10, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "No matching symbol 'AOE_AFFECTS_WARY'"}, + {"row": 135, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 138, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_SCAN_TYPE'"}, + {"row": 140, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 141, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 142, "col": 24, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 146, "col": 8, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 149, "col": 3, "type": "WARN", "message": "Unreachable code"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\client_side_fireball.as", + "success": false, + "messages": [ + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::OnRepeatTimer()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 35, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::OnRepeatTimer_1()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::client_activate()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 52, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 53, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::update_fireball()"}, + {"row": 74, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::svr_update_fireball_vec()"}, + {"row": 79, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::setup_fireball()"}, + {"row": 89, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::spit_flames()"}, + {"row": 104, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 104, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::setup_kaboom()"}, + {"row": 125, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 125, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 140, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::fireball_explode()"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 148, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 150, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 152, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 155, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::fireball_end()"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::end_effect()"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\client_side_iceball.as", + "success": false, + "messages": [ + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::OnRepeatTimer()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 35, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::OnRepeatTimer_1()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::client_activate()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 52, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 53, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::update_fireball()"}, + {"row": 74, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 74, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::svr_update_fireball_vec()"}, + {"row": 79, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::setup_fireball()"}, + {"row": 89, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 100, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::spit_flames()"}, + {"row": 104, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 104, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::setup_kaboom()"}, + {"row": 125, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 125, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 140, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::fireball_explode()"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 148, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 150, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 152, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 155, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::fireball_end()"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void ClientSideFireball::end_effect()"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\client_side_lball.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void ClientSideLball::OnRepeatTimer()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void ClientSideLball::client_activate()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 35, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 36, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 38, "col": 19, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_BALL_DURATION(const string)'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void ClientSideLball::update_ball()"}, + {"row": 59, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void ClientSideLball::setup_ball()"}, + {"row": 67, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 67, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void ClientSideLball::ball_explode()"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void ClientSideLball::splodie_beams()"}, + {"row": 91, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 91, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 96, "col": 2, "type": "INFO", "message": "Compiling void ClientSideLball::svr_update_vec()"}, + {"row": 98, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void ClientSideLball::ball_end()"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 107, "col": 2, "type": "INFO", "message": "Compiling void ClientSideLball::end_effect()"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\doom_plant.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\dragonfly.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\fangtooth.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\felewyn_shard.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::game_dynamically_created()"}, + {"row": 26, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::OnSpawn()"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMonsterClip'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::do_intro()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::do_intro2()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::do_intro3()"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::do_intro4()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::do_intro5()"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 84, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::basenoclip_flight()"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::remove_me()"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 130, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::client_activate()"}, + {"row": 137, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 137, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 142, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::game_prerender()"}, + {"row": 144, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 144, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 155, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 155, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 159, "col": 2, "type": "INFO", "message": "Compiling void FelewynShard::glow_sprite()"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 162, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 164, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 165, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 166, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 168, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\fire_ball_guided.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void FireBallGuided::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\fire_wave.as", + "success": false, + "messages": [ + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void FireWave::OnRepeatTimer()"}, + {"row": 38, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void FireWave::OnRepeatTimer_1()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 51, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void FireWave::game_dynamically_created()"}, + {"row": 66, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void FireWave::remove_me()"}, + {"row": 77, "col": 36, "type": "ERROR", "message": "No matching symbol 'SOUND_BURN'"}, + {"row": 77, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 77, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void FireWave::remove_me2()"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void FireWave::OnSpawn()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 96, "col": 36, "type": "ERROR", "message": "No matching symbol 'SOUND_BURN'"}, + {"row": 96, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 96, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 99, "col": 2, "type": "INFO", "message": "Compiling void FireWave::active_loop()"}, + {"row": 104, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 104, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void FireWave::burn_targets()"}, + {"row": 115, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 115, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void FireWave::client_activate()"}, + {"row": 120, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 121, "col": 28, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 130, "col": 2, "type": "INFO", "message": "Compiling void FireWave::flames_shoot()"}, + {"row": 132, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 132, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 133, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 133, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 136, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 136, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 139, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 139, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 142, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 142, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 145, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 145, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 148, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 148, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 151, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 151, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void FireWave::setup_flames()"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 159, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 160, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 162, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 164, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 165, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\flame_burst.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void FlameBurst::game_dynamically_created()"}, + {"row": 22, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 34, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 24, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 27, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 29, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void FlameBurst::effect_die()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void FlameBurst::big_boom()"}, + {"row": 49, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void FlameBurst::game_dodamage()"}, + {"row": 54, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 55, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 56, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 58, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 61, "col": 23, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 66, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 67, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 69, "col": 10, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 72, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 74, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 76, "col": 4, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\flame_burst_cl.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void FlameBurstCl::client_activate()"}, + {"row": 16, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 16, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void FlameBurstCl::remove_me_cl()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void FlameBurstCl::create_flames()"}, + {"row": 33, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void FlameBurstCl::setup_flame()"}, + {"row": 45, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\flame_skull.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void FlameSkull::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\fx_manabolt.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void FxManabolt::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMonsterClip'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void FxManabolt::game_dynamically_created()"}, + {"row": 27, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void FxManabolt::stick_to_owner()"}, + {"row": 39, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 39, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 40, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void FxManabolt::set_size()"}, + {"row": 56, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 57, "col": 22, "type": "ERROR", "message": "Can't implicitly convert from 'string' to 'const int'."}, + {"row": 57, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'const int' available."}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\giant_rat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\guided_ball_cl.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void GuidedBallCl::client_activate()"}, + {"row": 22, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 22, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void GuidedBallCl::game_prerender()"}, + {"row": 29, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 37, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\guided_lball_alt.as", + "success": false, + "messages": [ + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void GuidedLballAlt::OnRepeatTimer()"}, + {"row": 41, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 44, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 45, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void GuidedLballAlt::OnSpawn()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBBox'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 88, "col": 19, "type": "ERROR", "message": "No matching symbol 'SOUND_LOOP'"}, + {"row": 91, "col": 2, "type": "INFO", "message": "Compiling void GuidedLballAlt::game_dynamically_created()"}, + {"row": 93, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 94, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 95, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 96, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 99, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 99, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 99, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 99, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 104, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 106, "col": 17, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void GuidedLballAlt::pick_target()"}, + {"row": 114, "col": 23, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 115, "col": 7, "type": "ERROR", "message": "No matching symbol 'NME_TOKEN'"}, + {"row": 117, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScrambleTokens'"}, + {"row": 118, "col": 16, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 120, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 120, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 120, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 120, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 122, "col": 16, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void GuidedLballAlt::sphere_explode()"}, + {"row": 129, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 132, "col": 19, "type": "ERROR", "message": "No matching symbol 'SOUND_LOOP'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 136, "col": 17, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 138, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 144, "col": 2, "type": "INFO", "message": "Compiling void GuidedLballAlt::affect_targets()"}, + {"row": 146, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 147, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 149, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 152, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 152, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 152, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 152, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 157, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void GuidedLballAlt::remove_me()"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\guided_lball_alt_cl.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void GuidedLballAltCl::client_activate()"}, + {"row": 19, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 20, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ball_end'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void GuidedLballAltCl::remove_fx()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void GuidedLballAltCl::splodie_beams()"}, + {"row": 42, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 35, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\guided_sphere_cl.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling GuidedSphereCl::GuidedSphereCl()"}, + {"row": 27, "col": 15, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::OnRepeatTimer()"}, + {"row": 46, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::OnRepeatTimer_1()"}, + {"row": 66, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::OnRepeatTimer_2()"}, + {"row": 76, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 76, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::OnRepeatTimer_3()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 90, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 96, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::client_activate()"}, + {"row": 98, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 99, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 100, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 101, "col": 14, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 103, "col": 21, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 104, "col": 15, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::update_fireball()"}, + {"row": 139, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 139, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 150, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 150, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 153, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::svr_update_fireball_vec()"}, + {"row": 158, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 158, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::setup_fireball()"}, + {"row": 168, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 168, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 179, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::spit_flames()"}, + {"row": 183, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 183, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 198, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::setup_kaboom()"}, + {"row": 204, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 204, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 219, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::fireball_end()"}, + {"row": 222, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 225, "col": 2, "type": "INFO", "message": "Compiling void GuidedSphereCl::end_effect()"}, + {"row": 227, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\horror_egg.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\horror_egg_lightning.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\ibarrier.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 24, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 236, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\ice_blast.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\ice_burst.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void IceBurst::game_dynamically_created()"}, + {"row": 24, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 25, "col": 34, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 27, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 28, "col": 18, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void IceBurst::effect_die()"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void IceBurst::big_boom()"}, + {"row": 47, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'aoe_applyeffect_rad'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void IceBurst::apply_aoe_effect()"}, + {"row": 54, "col": 24, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 56, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 58, "col": 24, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 60, "col": 24, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 62, "col": 5, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 64, "col": 24, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 66, "col": 5, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::OnSpawn()"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::get_skill()"}, + {"row": 40, "col": 32, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "No matching symbol 'ACTIVE_SKILL'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_scan_loop()"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dmg_loop()"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad()"}, + {"row": 63, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 65, "col": 16, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 67, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 68, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 69, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 71, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 76, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 78, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_apply_loop()"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly()"}, + {"row": 95, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 100, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 102, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 102, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 107, "col": 9, "type": "ERROR", "message": "No matching symbol 'DO_EFFECT'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'apply_aoe_effect'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dodamage_rad()"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 116, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_end()"}, + {"row": 119, "col": 7, "type": "ERROR", "message": "No matching symbol 'MY_SCRIPT_IDX'"}, + {"row": 121, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\ice_burst_cl.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void IceBurstCl::client_activate()"}, + {"row": 16, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 16, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void IceBurstCl::remove_me_cl()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void IceBurstCl::create_ice()"}, + {"row": 33, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void IceBurstCl::setup_ice()"}, + {"row": 45, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 41, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\ice_spikes.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void IceSpikes::game_dynamically_created()"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 21, "col": 13, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 22, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 23, "col": 16, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void IceSpikes::OnSpawn()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void IceSpikes::apply_damage()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 42, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 45, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void IceSpikes::remove_me()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void IceSpikes::remove_me2()"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void IceSpikes::client_activate()"}, + {"row": 62, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 63, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 64, "col": 16, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 65, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void IceSpikes::spawn_spikes()"}, + {"row": 76, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 76, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void IceSpikes::setup_spike()"}, + {"row": 86, "col": 23, "type": "ERROR", "message": "No matching signatures to 'Vector3(int, string, string)'"}, + {"row": 86, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 86, "col": 23, "type": "INFO", "message": "Vector3::Vector3()"}, + {"row": 86, "col": 23, "type": "INFO", "message": "Vector3::Vector3(float, float, float)"}, + {"row": 86, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 86, "col": 23, "type": "INFO", "message": "Vector3::Vector3(const Vector3&in)"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\ice_trail.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void IceTrail::game_dynamically_created()"}, + {"row": 18, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 19, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 20, "col": 16, "type": "ERROR", "message": "No matching symbol 'param3'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\ice_wave.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void IceWave::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\ice_wave_player.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\keledros_fire_wall.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\lesser_wraith.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\lesser_wraith_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void LesserWraithCl::client_activate()"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 16, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'beam_loop'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void LesserWraithCl::game_prerender()"}, + {"row": 27, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 31, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 31, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void LesserWraithCl::end_fx()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void LesserWraithCl::remove_me()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\lightning_ball_guided.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void FireBallGuided::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\lightning_repulse.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void LightningRepulse::OnRepeatTimer()"}, + {"row": 33, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void LightningRepulse::game_dynamically_created()"}, + {"row": 38, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 39, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 41, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 42, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 43, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 45, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 45, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 45, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 45, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::MY_DURATION(const string)'"}, + {"row": 49, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void LightningRepulse::OnSpawn()"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void LightningRepulse::game_dodamage()"}, + {"row": 102, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 102, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 110, "col": 2, "type": "INFO", "message": "Compiling void LightningRepulse::end_summon()"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 116, "col": 2, "type": "INFO", "message": "Compiling void LightningRepulse::remove_me()"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\lstrike.as", + "success": false, + "messages": [ + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void Lstrike::OnRepeatTimer()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 39, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void Lstrike::game_dynamically_created()"}, + {"row": 44, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 45, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 46, "col": 18, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'StoreEntity'"}, + {"row": 48, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 48, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 48, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 48, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'DropToFloor'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void Lstrike::OnSpawn()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'DropToFloor'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void Lstrike::summon_start()"}, + {"row": 69, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void Lstrike::start_secondary()"}, + {"row": 85, "col": 7, "type": "ERROR", "message": "No matching symbol 'getCount'"}, + {"row": 89, "col": 24, "type": "ERROR", "message": "No matching symbol 'getCount'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void Lstrike::lblast_mark_targets()"}, + {"row": 151, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 151, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 189, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 189, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 196, "col": 2, "type": "INFO", "message": "Compiling void Lstrike::damage_loop()"}, + {"row": 198, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 199, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 200, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 205, "col": 12, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD1'"}, + {"row": 208, "col": 5, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 208, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 208, "col": 5, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 208, "col": 5, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 209, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 209, "col": 5, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD1'"}, + {"row": 213, "col": 12, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD2'"}, + {"row": 216, "col": 5, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 216, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 216, "col": 5, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 216, "col": 5, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 217, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 217, "col": 5, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD2'"}, + {"row": 221, "col": 12, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD3'"}, + {"row": 224, "col": 5, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 224, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 224, "col": 5, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 224, "col": 5, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 225, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 225, "col": 5, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD3'"}, + {"row": 229, "col": 12, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD4'"}, + {"row": 232, "col": 5, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 232, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 232, "col": 5, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 232, "col": 5, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 233, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 233, "col": 5, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD5'"}, + {"row": 237, "col": 12, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD5'"}, + {"row": 240, "col": 5, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 240, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 240, "col": 5, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 240, "col": 5, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 241, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 241, "col": 5, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD5'"}, + {"row": 245, "col": 12, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD6'"}, + {"row": 248, "col": 5, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 248, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 248, "col": 5, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 248, "col": 5, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 249, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 249, "col": 5, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD6'"}, + {"row": 253, "col": 12, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD7'"}, + {"row": 256, "col": 5, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 256, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 256, "col": 5, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 256, "col": 5, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 257, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 257, "col": 5, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD7'"}, + {"row": 261, "col": 12, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD8'"}, + {"row": 264, "col": 5, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 264, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 264, "col": 5, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 264, "col": 5, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 265, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 265, "col": 5, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD8'"}, + {"row": 269, "col": 12, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD9'"}, + {"row": 272, "col": 5, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 272, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 272, "col": 5, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 272, "col": 5, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 273, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 273, "col": 5, "type": "ERROR", "message": "No matching symbol 'BLAST_CHILD9'"}, + {"row": 280, "col": 3, "type": "ERROR", "message": "No matching symbol 'DoDamage'"}, + {"row": 283, "col": 2, "type": "INFO", "message": "Compiling void Lstrike::summon_end()"}, + {"row": 286, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 289, "col": 2, "type": "INFO", "message": "Compiling void Lstrike::remove_me()"}, + {"row": 291, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 294, "col": 2, "type": "INFO", "message": "Compiling void Lstrike::debug_beam()"}, + {"row": 314, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 314, "col": 35, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\lstrike_child.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void LstrikeChild::OnRepeatTimer()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 19, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void LstrikeChild::game_dynamically_created()"}, + {"row": 24, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 25, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 26, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'StoreEntity'"}, + {"row": 28, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 28, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 28, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 28, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DropToFloor'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::MY_DURATION(const string)'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void LstrikeChild::OnSpawn()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'DropToFloor'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void LstrikeChild::summon_start()"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void LstrikeChild::damage_loop()"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 53, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'DoDamage'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void LstrikeChild::summon_end()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void LstrikeChild::remove_me()"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\magic_dart.as", + "success": false, + "messages": [ + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::game_dynamically_created()"}, + {"row": 53, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::OnSpawn()"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMonsterClip'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::setup_dart()"}, + {"row": 86, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 88, "col": 25, "type": "ERROR", "message": "Can't implicitly convert from 'string' to 'const int'."}, + {"row": 88, "col": 25, "type": "ERROR", "message": "No conversion from 'string' to 'const int' available."}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 90, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_SHOOT'"}, + {"row": 90, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::move_dart()"}, + {"row": 111, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 111, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 128, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::hit_target()"}, + {"row": 132, "col": 23, "type": "ERROR", "message": "No matching symbol 'getCount'"}, + {"row": 138, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::dmg_target()"}, + {"row": 143, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt1'"}, + {"row": 147, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt2'"}, + {"row": 151, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt3'"}, + {"row": 155, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt4'"}, + {"row": 159, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt5'"}, + {"row": 163, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt6'"}, + {"row": 167, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt7'"}, + {"row": 171, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt8'"}, + {"row": 175, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt9'"}, + {"row": 177, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 178, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 179, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 181, "col": 19, "type": "ERROR", "message": "No conversion from 'const string' to 'int' available."}, + {"row": 184, "col": 23, "type": "ERROR", "message": "No matching symbol 'CHECK_ENT'"}, + {"row": 189, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 190, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 191, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 194, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::debug_beam()"}, + {"row": 214, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 214, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 218, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::fiz_out()"}, + {"row": 220, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 224, "col": 27, "type": "ERROR", "message": "No matching symbol 'SOUND_ZAP1'"}, + {"row": 224, "col": 39, "type": "ERROR", "message": "No matching symbol 'SOUND_ZAP2'"}, + {"row": 224, "col": 51, "type": "ERROR", "message": "No matching symbol 'SOUND_ZAP3'"}, + {"row": 225, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 226, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 227, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 230, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::remove_me()"}, + {"row": 232, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 235, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::remove_me2()"}, + {"row": 237, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 244, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::game_movingto_dest()"}, + {"row": 246, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimMoveSpeed'"}, + {"row": 249, "col": 2, "type": "INFO", "message": "Compiling void MagicDart::game_stopmoving()"}, + {"row": 251, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimMoveSpeed'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\magic_dart_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void MagicDartCl::client_activate()"}, + {"row": 17, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 18, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void MagicDartCl::n_sprite()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void MagicDartCl::n_sprite_update()"}, + {"row": 47, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 28, "type": "ERROR", "message": "Expected expression value"}, + {"row": 51, "col": 28, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void MagicDartCl::remove_me()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\meteor_deployer.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void MeteorDeployer::OnSpawn()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void MeteorDeployer::game_dynamically_created()"}, + {"row": 35, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 36, "col": 18, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void MeteorDeployer::nuke_it()"}, + {"row": 48, "col": 62, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 62, "type": "ERROR", "message": "Instead found ''"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void MeteorDeployer::ext_fire_bomb()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 56, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 56, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 56, "col": 8, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 56, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 58, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetSkillLevel'"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 64, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 67, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 67, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 67, "col": 8, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 67, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 69, "col": 4, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 73, "col": 4, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void MeteorDeployer::remove_me()"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 83, "col": 2, "type": "INFO", "message": "Compiling void MeteorDeployer::game_dodamage()"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 86, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 87, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 89, "col": 23, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 94, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 95, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 96, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 96, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 96, "col": 8, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 96, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 98, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetSkillLevel'"}, + {"row": 99, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 103, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\npc_acid_cloud.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void NpcAcidCloud::aoe_scan_loop()"}, + {"row": 18, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 18, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::game_dynamically_created()"}, + {"row": 41, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::OnSpawn()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::spawn_sound()"}, + {"row": 65, "col": 28, "type": "ERROR", "message": "No matching symbol 'SPAWN_SOUND'"}, + {"row": 65, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::aoe_affect_target()"}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::aoe_end()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::client_activate()"}, + {"row": 81, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 83, "col": 21, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM3'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::poison_end_cl()"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::fx_loop()"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::smokes_shoot()"}, + {"row": 105, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 105, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 106, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 107, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 107, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 109, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::setup_smokes()"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::OnSpawn()"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dynamically_created()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_start()"}, + {"row": 39, "col": 22, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 16, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 43, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DURATION'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_scan_loop()"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_affect_targets()"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dodamage()"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::func_filter_targs()"}, + {"row": 104, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 106, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_FRIENDLY'"}, + {"row": 108, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 108, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Candidates are:"}, + {"row": 110, "col": 10, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 114, "col": 11, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 118, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 121, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 127, "col": 10, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "No matching symbol 'AOE_AFFECTS_WARY'"}, + {"row": 135, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 138, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_SCAN_TYPE'"}, + {"row": 140, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 141, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 142, "col": 24, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 146, "col": 8, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 149, "col": 3, "type": "WARN", "message": "Unreachable code"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\npc_poison_cloud.as", + "success": false, + "messages": [ + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::game_dynamically_created()"}, + {"row": 41, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::OnSpawn()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::spawn_sound()"}, + {"row": 65, "col": 28, "type": "ERROR", "message": "No matching symbol 'SPAWN_SOUND'"}, + {"row": 65, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::aoe_affect_target()"}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::aoe_end()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::client_activate()"}, + {"row": 81, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 83, "col": 21, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM3'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::poison_end_cl()"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::fx_loop()"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::smokes_shoot()"}, + {"row": 105, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 105, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 106, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 107, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 107, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 109, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::setup_smokes()"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::OnSpawn()"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dynamically_created()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_start()"}, + {"row": 39, "col": 22, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 16, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 43, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DURATION'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_scan_loop()"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_affect_targets()"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dodamage()"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::func_filter_targs()"}, + {"row": 104, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 106, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_FRIENDLY'"}, + {"row": 108, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 108, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Candidates are:"}, + {"row": 110, "col": 10, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 114, "col": 11, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 118, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 121, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 127, "col": 10, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "No matching symbol 'AOE_AFFECTS_WARY'"}, + {"row": 135, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 138, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_SCAN_TYPE'"}, + {"row": 140, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 141, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 142, "col": 24, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 146, "col": 8, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 149, "col": 3, "type": "WARN", "message": "Unreachable code"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\npc_poison_cloud2.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling NpcPoisonCloud2::NpcPoisonCloud2()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2::OnSpawn()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2::game_dynamically_created()"}, + {"row": 37, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 38, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 39, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 40, "col": 16, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::MY_DURATION(const string)'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2::cl_effects()"}, + {"row": 56, "col": 34, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2::do_scan()"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 65, "col": 34, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 67, "col": 16, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 69, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2::poison_targets()"}, + {"row": 77, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 78, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 80, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 82, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 84, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 86, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 88, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2::remove_me()"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\npc_poison_cloud2_cl.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2Cl::client_activate()"}, + {"row": 14, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 16, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 17, "col": 26, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 18, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 20, "col": 15, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 22, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 24, "col": 15, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 26, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 28, "col": 15, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2Cl::do_smokes()"}, + {"row": 38, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2Cl::do_smokes_loop()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2Cl::end_fx()"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2Cl::remove_fx()"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud2Cl::setup_smokes()"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\npc_poison_cloud_old.as", + "success": false, + "messages": [ + {"row": 146, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\npc_spore_cloud.as", + "success": false, + "messages": [ + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::game_dynamically_created()"}, + {"row": 41, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 41, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::OnSpawn()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::spawn_sound()"}, + {"row": 65, "col": 28, "type": "ERROR", "message": "No matching symbol 'SPAWN_SOUND'"}, + {"row": 65, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::aoe_affect_target()"}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::aoe_end()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::client_activate()"}, + {"row": 81, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 83, "col": 21, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM3'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::poison_end_cl()"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::fx_loop()"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::smokes_shoot()"}, + {"row": 105, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 105, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 106, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 107, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 107, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 109, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void NpcPoisonCloud::setup_smokes()"}, + {"row": 115, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::OnSpawn()"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dynamically_created()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_start()"}, + {"row": 39, "col": 22, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 16, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 43, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DURATION'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_scan_loop()"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_affect_targets()"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dodamage()"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::func_filter_targs()"}, + {"row": 104, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 106, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_FRIENDLY'"}, + {"row": 108, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 108, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Candidates are:"}, + {"row": 110, "col": 10, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 114, "col": 11, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 118, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 121, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 127, "col": 10, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "No matching symbol 'AOE_AFFECTS_WARY'"}, + {"row": 135, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 138, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_SCAN_TYPE'"}, + {"row": 140, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 141, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 142, "col": 24, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 146, "col": 8, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 149, "col": 3, "type": "WARN", "message": "Unreachable code"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\npc_volcano.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\poison_burst.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void PoisonBurst::game_dynamically_created()"}, + {"row": 20, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 21, "col": 34, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 22, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 25, "col": 20, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 27, "col": 20, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 28, "col": 12, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void PoisonBurst::do_aoe()"}, + {"row": 40, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void PoisonBurst::OnSpawn()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void PoisonBurst::effect_die()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void PoisonBurst::set_targets()"}, + {"row": 60, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 61, "col": 15, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 63, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void PoisonBurst::affect_targets()"}, + {"row": 89, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 91, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 91, "col": 46, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\poison_burst_cl.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void PoisonBurstCl::client_activate()"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void PoisonBurstCl::remove_me_cl()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void PoisonBurstCl::create_flames()"}, + {"row": 34, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void PoisonBurstCl::setup_flame()"}, + {"row": 59, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\poison_cloud.as", + "success": false, + "messages": [ + {"row": 201, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\poison_cloud2.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void PoisonCloud2::game_precache()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void PoisonCloud2::game_dynamically_created()"}, + {"row": 31, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 32, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 33, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 34, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 35, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 37, "col": 32, "type": "ERROR", "message": "No matching symbol 'PARAM'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void PoisonCloud2::aoe_end()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void PoisonCloud2::remove_me()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void PoisonCloud2::aoe_affect_target()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::OnSpawn()"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dynamically_created()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_start()"}, + {"row": 39, "col": 22, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 16, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 43, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_VULNERABLE'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DURATION'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_scan_loop()"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::aoe_affect_targets()"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 83, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 84, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::game_dodamage()"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 92, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe2::func_filter_targs()"}, + {"row": 104, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 106, "col": 9, "type": "ERROR", "message": "No matching symbol 'AOE_FRIENDLY'"}, + {"row": 108, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 108, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 108, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Candidates are:"}, + {"row": 110, "col": 10, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 110, "col": 10, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 114, "col": 11, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 118, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 121, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 127, "col": 10, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "No matching symbol 'AOE_AFFECTS_WARY'"}, + {"row": 135, "col": 9, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 138, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_SCAN_TYPE'"}, + {"row": 140, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 141, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 141, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 142, "col": 24, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 146, "col": 8, "type": "WARN", "message": "Variable 'L_DO_EFFECT' hides another variable of same name in outer scope"}, + {"row": 149, "col": 3, "type": "WARN", "message": "Unreachable code"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\preset_volcano.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling SummonVolcano::SummonVolcano()"}, + {"row": 33, "col": 16, "type": "ERROR", "message": "'MODEL_WORLD' is already declared"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::OnRepeatTimer()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 47, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 50, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::game_precache()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::OnSpawn()"}, + {"row": 78, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 78, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::game_dynamically_created()"}, + {"row": 83, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 84, "col": 18, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 86, "col": 21, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 87, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 87, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 87, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 87, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::EFFECT_DURATION(const string)'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::volcano_start()"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::aoe_loop()"}, + {"row": 103, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 109, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::fireball_loop()"}, + {"row": 111, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 119, "col": 42, "type": "ERROR", "message": "No matching symbol 'FORCE_OFFSET'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 121, "col": 38, "type": "ERROR", "message": "No matching symbol 'SOUND_SHOOT'"}, + {"row": 121, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_WEAPON'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'FIREBALL_FREQ'"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::volcano_dodamage()"}, + {"row": 127, "col": 21, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 128, "col": 18, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 129, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 130, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 130, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 130, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 130, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 131, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 132, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetSkillLevel'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 137, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::volcano_off()"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 144, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::volcano_die()"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 147, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 150, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::client_activate()"}, + {"row": 152, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 153, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::fx_start()"}, + {"row": 165, "col": 68, "type": "ERROR", "message": "Expected expression value"}, + {"row": 165, "col": 68, "type": "ERROR", "message": "Instead found ''"}, + {"row": 171, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::loop_sfx()"}, + {"row": 173, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 179, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::volcano_fire_create()"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 182, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 183, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 185, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 186, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 187, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 188, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 191, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::setup_flame_circle()"}, + {"row": 193, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 194, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 195, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 196, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 197, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 198, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 199, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 200, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 201, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 202, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 203, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 204, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 207, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::update_flame_circle()"}, + {"row": 211, "col": 77, "type": "ERROR", "message": "Expected expression value"}, + {"row": 211, "col": 77, "type": "ERROR", "message": "Instead found ''"}, + {"row": 219, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::setup_smoke()"}, + {"row": 221, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 222, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 223, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 224, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 225, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 226, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 227, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 228, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 229, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 230, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 233, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::update_smoke()"}, + {"row": 241, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 242, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 243, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 247, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::fx_end()"}, + {"row": 252, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 253, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 256, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::fx_die()"}, + {"row": 258, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 261, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::func_rockspawn()"}, + {"row": 269, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 269, "col": 41, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\rat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\rock.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void Rock::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 22, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 26, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 27, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveSpeed'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void Rock::game_dynamically_created()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 39, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 41, "col": 4, "type": "ERROR", "message": "No matching symbol 'StoreEntity'"}, + {"row": 43, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 44, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 46, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void Rock::toss_rock()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 56, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 57, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 58, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 60, "col": 4, "type": "ERROR", "message": "No matching symbol 'TossProjectile'"}, + {"row": 64, "col": 4, "type": "ERROR", "message": "No matching symbol 'TossProjectile'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void Rock::remove_me()"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\rock_storm.as", + "success": false, + "messages": [ + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::OnSpawn()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::game_dynamically_created()"}, + {"row": 69, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 69, "col": 49, "type": "ERROR", "message": "Instead found ''"}, + {"row": 99, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::rocks_begin()"}, + {"row": 104, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 104, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 121, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 121, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::setup_rockb()"}, + {"row": 130, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 130, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 135, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::setup_rockc()"}, + {"row": 138, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 138, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::setup_rockd()"}, + {"row": 146, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 146, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 151, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::levitate_noise()"}, + {"row": 153, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_LEVITATE'"}, + {"row": 153, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::rocks_raise()"}, + {"row": 219, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 219, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 231, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 231, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 243, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 243, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 255, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 255, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 260, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::spin_noise()"}, + {"row": 262, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_SPIN'"}, + {"row": 262, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 264, "col": 3, "type": "ERROR", "message": "No matching symbol 'DUR_SPIN'"}, + {"row": 267, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::rocks_spin()"}, + {"row": 289, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 289, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 301, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 301, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 313, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 313, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 325, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 325, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 330, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::find_targets()"}, + {"row": 332, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 332, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 332, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 332, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 334, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 335, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScrambleTokens'"}, + {"row": 336, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 342, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::pick_target()"}, + {"row": 344, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 345, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 345, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 345, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 345, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 346, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 348, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 351, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::rocka_throw()"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 356, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 356, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 356, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 357, "col": 22, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 357, "col": 22, "type": "INFO", "message": "Candidates are:"}, + {"row": 357, "col": 22, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 357, "col": 22, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 358, "col": 23, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 361, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 366, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 370, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::rockb_throw()"}, + {"row": 375, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 375, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 375, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 375, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 376, "col": 22, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 376, "col": 22, "type": "INFO", "message": "Candidates are:"}, + {"row": 376, "col": 22, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 376, "col": 22, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 377, "col": 23, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 382, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 387, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 391, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::rockc_throw()"}, + {"row": 396, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 396, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 396, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 396, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 397, "col": 22, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 397, "col": 22, "type": "INFO", "message": "Candidates are:"}, + {"row": 397, "col": 22, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 397, "col": 22, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 398, "col": 23, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 403, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 408, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 412, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::rockd_throw()"}, + {"row": 417, "col": 23, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 417, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 417, "col": 23, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 417, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 418, "col": 22, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 418, "col": 22, "type": "INFO", "message": "Candidates are:"}, + {"row": 418, "col": 22, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 418, "col": 22, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 419, "col": 23, "type": "ERROR", "message": "No matching symbol 'TraceLine'"}, + {"row": 424, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 429, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 433, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::force_all_rock_throw()"}, + {"row": 436, "col": 18, "type": "ERROR", "message": "Both operands must be handles when comparing identity"}, + {"row": 438, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 440, "col": 18, "type": "ERROR", "message": "Both operands must be handles when comparing identity"}, + {"row": 442, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 444, "col": 18, "type": "ERROR", "message": "Both operands must be handles when comparing identity"}, + {"row": 446, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 448, "col": 18, "type": "ERROR", "message": "Both operands must be handles when comparing identity"}, + {"row": 450, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 455, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::remove_me()"}, + {"row": 457, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 458, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 461, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::remove_me2()"}, + {"row": 463, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 466, "col": 2, "type": "INFO", "message": "Compiling void RockStorm::check_targ()"}, + {"row": 468, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 468, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 468, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 468, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 469, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 470, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 472, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 474, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 476, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 478, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 478, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 478, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 478, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 480, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\seal_maker.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void SealMaker::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\sfx_glassmaker.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SfxGlassmaker::OnSpawn()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void SfxGlassmaker::glass_splodie()"}, + {"row": 29, "col": 66, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 66, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void SfxGlassmaker::glass_splodie2()"}, + {"row": 35, "col": 66, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 66, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SfxGlassmaker::remove_sploder()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\sfx_icewave.as", + "success": false, + "messages": [ + {"row": 9, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 9, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 10, "col": 12, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 12, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 12, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 78, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\shock_beam.as", + "success": false, + "messages": [ + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::game_dynamically_created()"}, + {"row": 35, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 36, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 37, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 38, "col": 15, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 39, "col": 16, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 40, "col": 16, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 41, "col": 34, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 45, "col": 17, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::F_DURATION(const string)'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::OnSpawn()"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::make_thunder()"}, + {"row": 65, "col": 16, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 79, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::BEAM_DELAY(const string)'"}, + {"row": 80, "col": 29, "type": "ERROR", "message": "No matching symbol 'SOUND_WARNING'"}, + {"row": 80, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::make_lightning()"}, + {"row": 87, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_LIGHTNING'"}, + {"row": 87, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::more_noise()"}, + {"row": 96, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_THUNDER'"}, + {"row": 96, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 99, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::damage_loop()"}, + {"row": 102, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 102, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::game_dodamage()"}, + {"row": 108, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 110, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 113, "col": 23, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 118, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 119, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 120, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 124, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::end_effect()"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 131, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::remove_me()"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 136, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::client_activate()"}, + {"row": 138, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 139, "col": 18, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 140, "col": 19, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 141, "col": 16, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 142, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::CLBEAM_DUR(const string)'"}, + {"row": 147, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::shock_beam_endsprite()"}, + {"row": 149, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 150, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 151, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 152, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 157, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void ShockBeam::remove_cl()"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\shock_burst.as", + "success": false, + "messages": [ + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void ShockBurst::game_dynamically_created()"}, + {"row": 31, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 32, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 33, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 34, "col": 15, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 35, "col": 16, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 36, "col": 16, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 39, "col": 17, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 45, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 45, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 45, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 45, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 47, "col": 11, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void ShockBurst::OnSpawn()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void ShockBurst::define_bolts()"}, + {"row": 77, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 77, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void ShockBurst::move_bolts()"}, + {"row": 100, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 105, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 109, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 115, "col": 2, "type": "INFO", "message": "Compiling void ShockBurst::draw_bolts()"}, + {"row": 125, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 125, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 141, "col": 2, "type": "INFO", "message": "Compiling void ShockBurst::remove_bolts_loop()"}, + {"row": 143, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 145, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 147, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 149, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 151, "col": 27, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 152, "col": 24, "type": "ERROR", "message": "Both operands must be handles when comparing identity"}, + {"row": 154, "col": 4, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 159, "col": 2, "type": "INFO", "message": "Compiling void ShockBurst::remove_me()"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\shock_burst_child.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstChild::game_dynamically_created()"}, + {"row": 24, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 25, "col": 13, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 26, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 28, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 28, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 28, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 28, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 30, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 32, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'ACTIVE_DELAY' evaluates to the non-function type 'float'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'StoreEntity'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstChild::OnSpawn()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstChild::scan_loop()"}, + {"row": 54, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 54, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstChild::debug_beam()"}, + {"row": 99, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 99, "col": 35, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\shock_burst_two.as", + "success": false, + "messages": [ + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstTwo::game_dynamically_created()"}, + {"row": 35, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 36, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 37, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 38, "col": 15, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 39, "col": 16, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 40, "col": 16, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 44, "col": 17, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 50, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 50, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 50, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 50, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'StoreEntity'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 54, "col": 11, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 59, "col": 12, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 61, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstTwo::OnSpawn()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 75, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_THUNDER'"}, + {"row": 75, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstTwo::define_bolts()"}, + {"row": 80, "col": 7, "type": "ERROR", "message": "No matching symbol 'BOLT_LIST'"}, + {"row": 80, "col": 31, "type": "ERROR", "message": "No matching symbol 'BOLT_LIST'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'BOLT_LIST'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstTwo::rotate_bolts()"}, + {"row": 87, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 91, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 95, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstTwo::draw_bolts()"}, + {"row": 107, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 107, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 111, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 111, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 115, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstTwo::end_summon()"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 121, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstTwo::remove_me()"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 126, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstTwo::check_targ()"}, + {"row": 128, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 129, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 131, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 131, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 131, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 131, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 134, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 139, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void ShockBurstTwo::shock_targ()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 146, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 148, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 149, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\skeleton.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\skeleton_guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\slime_globe.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling SlimeGlobe::SlimeGlobe()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobe::OnSpawn()"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobe::game_dynamically_created()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 41, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 42, "col": 12, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 27, "type": "ERROR", "message": "No matching symbol 'ORBIT_SOUND1'"}, + {"row": 49, "col": 41, "type": "ERROR", "message": "No matching symbol 'ORBIT_SOUND2'"}, + {"row": 50, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobe::setup_cl()"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobe::shoot_slime()"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 66, "col": 22, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScrambleTokens'"}, + {"row": 69, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'TossProjectile'"}, + {"row": 73, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 75, "col": 27, "type": "ERROR", "message": "No matching symbol 'ORBIT_SOUND1'"}, + {"row": 75, "col": 41, "type": "ERROR", "message": "No matching symbol 'ORBIT_SOUND2'"}, + {"row": 76, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 77, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_SHOOT'"}, + {"row": 77, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobe::end_slime()"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobe::remove_me()"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobe::ext_glob_landed()"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobe::early_remove()"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\slime_globe_cl.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobeCl::client_activate()"}, + {"row": 14, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobeCl::start_shrink()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 25, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobeCl::remove_me()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobeCl::setup_slime_ball()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void SlimeGlobeCl::update_slime_ball()"}, + {"row": 59, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 63, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 66, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 72, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 73, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 76, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\snake_cursed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\sorc_axe.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\spiked_ball.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void SpikedBall::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\stun_burst.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void StunBurst::game_dynamically_created()"}, + {"row": 36, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 36, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void StunBurst::effect_die()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void StunBurst::big_boom()"}, + {"row": 62, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 63, "col": 15, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 65, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void StunBurst::affect_targets()"}, + {"row": 93, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 95, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 95, "col": 46, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\stun_burst_cl.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void StunBurstCl::client_activate()"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void StunBurstCl::remove_me_cl()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void StunBurstCl::create_flames()"}, + {"row": 34, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void StunBurstCl::setup_flame()"}, + {"row": 59, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 59, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\summon_blizzard.as", + "success": false, + "messages": [ + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling SummonBlizzard::SummonBlizzard()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void SummonBlizzard::OnRepeatTimer()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 45, "col": 21, "type": "ERROR", "message": "No matching symbol 'WIDTH'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "'NEGWIDTH' is already declared"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 49, "col": 34, "type": "ERROR", "message": "No matching symbol 'WIDTH'"}, + {"row": 50, "col": 34, "type": "ERROR", "message": "No matching symbol 'WIDTH'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "'NEGWIDTH' is already declared"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "'x' is already declared"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "'y' is already declared"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "'NEGWIDTH' is already declared"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "'x' is already declared"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "'y' is already declared"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void SummonBlizzard::game_dynamically_created()"}, + {"row": 93, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 93, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void SummonBlizzard::OnSpawn()"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 126, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 130, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'FREQ_NOISE'"}, + {"row": 134, "col": 2, "type": "INFO", "message": "Compiling void SummonBlizzard::do_noise()"}, + {"row": 136, "col": 9, "type": "ERROR", "message": "No matching symbol 'IS_ACTIVE'"}, + {"row": 137, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'FREQ_NOISE'"}, + {"row": 141, "col": 2, "type": "INFO", "message": "Compiling void SummonBlizzard::blizzard_death()"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 146, "col": 2, "type": "INFO", "message": "Compiling void SummonBlizzard::apply_aoe_effect()"}, + {"row": 148, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 149, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 152, "col": 2, "type": "INFO", "message": "Compiling void SummonBlizzard::client_activate()"}, + {"row": 154, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 155, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 156, "col": 30, "type": "ERROR", "message": "'z' is not a member of 'string'"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'PARAM2'"}, + {"row": 159, "col": 31, "type": "ERROR", "message": "'z' is not a member of 'string'"}, + {"row": 160, "col": 31, "type": "ERROR", "message": "'z' is not a member of 'string'"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 164, "col": 2, "type": "INFO", "message": "Compiling void SummonBlizzard::blizzard_end_cl()"}, + {"row": 166, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 169, "col": 2, "type": "INFO", "message": "Compiling void SummonBlizzard::setup_blizzardflake()"}, + {"row": 173, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 174, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 181, "col": 2, "type": "INFO", "message": "Compiling void SummonBlizzard::setup_hailshard()"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 185, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 186, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 187, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 188, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 189, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 190, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 191, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::OnSpawn()"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::get_skill()"}, + {"row": 40, "col": 32, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "No matching symbol 'ACTIVE_SKILL'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_scan_loop()"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dmg_loop()"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad()"}, + {"row": 63, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 65, "col": 16, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 67, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 68, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 69, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 71, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 76, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 78, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_apply_loop()"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly()"}, + {"row": 95, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 100, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 102, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 102, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 107, "col": 9, "type": "ERROR", "message": "No matching symbol 'DO_EFFECT'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'apply_aoe_effect'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dodamage_rad()"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 116, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_end()"}, + {"row": 119, "col": 7, "type": "ERROR", "message": "No matching symbol 'MY_SCRIPT_IDX'"}, + {"row": 121, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\summon_fire_wall.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling SummonFireWall::SummonFireWall()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::OnRepeatTimer()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 33, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 36, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 36, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::OnRepeatTimer_1()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::OnRepeatTimer_2()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 51, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::flames_start()"}, + {"row": 59, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 59, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::OnSpawn()"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 76, "col": 59, "type": "ERROR", "message": "No matching symbol 'TIME_LIVE'"}, + {"row": 76, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 76, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::game_dynamically_created()"}, + {"row": 81, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 82, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 82, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 82, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 82, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 84, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 86, "col": 19, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 87, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FIRE_DURATION(const string)'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'StoreEntity'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 99, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::flames_attack()"}, + {"row": 110, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 110, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 114, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 114, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 118, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 118, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 120, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 120, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 136, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::firewall_death()"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::client_activate()"}, + {"row": 145, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 146, "col": 28, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 147, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 148, "col": 3, "type": "ERROR", "message": "No matching symbol 'TIME_LIVE'"}, + {"row": 151, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::firewall_end_cl()"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::flames_shoot()"}, + {"row": 162, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 162, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 171, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 171, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 180, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 180, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 189, "col": 2, "type": "INFO", "message": "Compiling void SummonFireWall::setup_flames()"}, + {"row": 191, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 192, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 193, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 194, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 195, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 196, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 197, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\summon_ice_wall.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void SummonIceWall::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void SummonIceWall::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\summon_lightning_storm.as", + "success": false, + "messages": [ + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::game_precache()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::OnSpawn()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::game_dynamically_created()"}, + {"row": 64, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 72, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 72, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::do_storm()"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 86, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 91, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::apply_aoe_effect()"}, + {"row": 93, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 96, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 99, "col": 11, "type": "WARN", "message": "Variable 'L_ENT' hides another variable of same name in outer scope"}, + {"row": 99, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::sustain_storm()"}, + {"row": 106, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 107, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::check_death()"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 116, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 118, "col": 8, "type": "WARN", "message": "Variable 'L_REMOVE' hides another variable of same name in outer scope"}, + {"row": 120, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int'"}, + {"row": 122, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 123, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 124, "col": 4, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 128, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::client_activate()"}, + {"row": 130, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 131, "col": 28, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 132, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 135, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::smokes_shoot()"}, + {"row": 140, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 140, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 146, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::cl_pos_update()"}, + {"row": 148, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 149, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 150, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 153, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::cl_beam()"}, + {"row": 155, "col": 26, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void SummonLightningStorm::setup_smokes()"}, + {"row": 163, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 164, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 165, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 166, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 168, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 169, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 170, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 171, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 172, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::OnSpawn()"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 31, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 33, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::get_skill()"}, + {"row": 40, "col": 32, "type": "ERROR", "message": "No matching symbol 'MY_OWNER'"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "No matching symbol 'ACTIVE_SKILL'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_scan_loop()"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dmg_loop()"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_DMG_FREQ'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad()"}, + {"row": 63, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 65, "col": 16, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 67, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 68, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 69, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 71, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 76, "col": 7, "type": "ERROR", "message": "No matching symbol 'AOE_FRIEND_FOE'"}, + {"row": 78, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_apply_loop()"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 89, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly()"}, + {"row": 95, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 96, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 100, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 102, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 102, "col": 9, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 102, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 107, "col": 9, "type": "ERROR", "message": "No matching symbol 'DO_EFFECT'"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'apply_aoe_effect'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_dodamage_rad()"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 33, "type": "ERROR", "message": "Instead found ''"}, + {"row": 116, "col": 2, "type": "INFO", "message": "Compiling void BaseAoe::aoe_end()"}, + {"row": 119, "col": 7, "type": "ERROR", "message": "No matching symbol 'MY_SCRIPT_IDX'"}, + {"row": 121, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\summon_volcano.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling SummonVolcano::SummonVolcano()"}, + {"row": 33, "col": 16, "type": "ERROR", "message": "'MODEL_WORLD' is already declared"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::OnRepeatTimer()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 47, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 50, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::game_precache()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::OnSpawn()"}, + {"row": 78, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 78, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::game_dynamically_created()"}, + {"row": 83, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 84, "col": 18, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 86, "col": 21, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 87, "col": 20, "type": "ERROR", "message": "No matching signatures to 'IsValidPlayer(string)'"}, + {"row": 87, "col": 20, "type": "INFO", "message": "Candidates are:"}, + {"row": 87, "col": 20, "type": "INFO", "message": "bool IsValidPlayer(CBasePlayer@)"}, + {"row": 87, "col": 20, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::EFFECT_DURATION(const string)'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::volcano_start()"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::aoe_loop()"}, + {"row": 103, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'AOE_FREQ'"}, + {"row": 109, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::fireball_loop()"}, + {"row": 111, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 119, "col": 42, "type": "ERROR", "message": "No matching symbol 'FORCE_OFFSET'"}, + {"row": 120, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 121, "col": 38, "type": "ERROR", "message": "No matching symbol 'SOUND_SHOOT'"}, + {"row": 121, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_WEAPON'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'FIREBALL_FREQ'"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::volcano_dodamage()"}, + {"row": 127, "col": 21, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 128, "col": 18, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 129, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 130, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 130, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 130, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 130, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 131, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 132, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetSkillLevel'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 137, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::volcano_off()"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 144, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::volcano_die()"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 147, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 150, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::client_activate()"}, + {"row": 152, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 153, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::fx_start()"}, + {"row": 165, "col": 68, "type": "ERROR", "message": "Expected expression value"}, + {"row": 165, "col": 68, "type": "ERROR", "message": "Instead found ''"}, + {"row": 171, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::loop_sfx()"}, + {"row": 173, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 179, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::volcano_fire_create()"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 182, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 183, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 185, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 186, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 187, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 188, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 191, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::setup_flame_circle()"}, + {"row": 193, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 194, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 195, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 196, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 197, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 198, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 199, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 200, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 201, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 202, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 203, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 204, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 207, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::update_flame_circle()"}, + {"row": 211, "col": 77, "type": "ERROR", "message": "Expected expression value"}, + {"row": 211, "col": 77, "type": "ERROR", "message": "Instead found ''"}, + {"row": 219, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::setup_smoke()"}, + {"row": 221, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 222, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 223, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 224, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 225, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 226, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 227, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 228, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 229, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 230, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 233, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::update_smoke()"}, + {"row": 241, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 242, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 243, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 247, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::fx_end()"}, + {"row": 252, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 253, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 256, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::fx_die()"}, + {"row": 258, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 261, "col": 2, "type": "INFO", "message": "Compiling void SummonVolcano::func_rockspawn()"}, + {"row": 269, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 269, "col": 41, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\tnt_bomb.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TntBomb::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TntBomb::OnDamagedOther(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\tnt_bomb_cl.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void TntBombCl::client_activate()"}, + {"row": 26, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 26, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void TntBombCl::sparks_loop()"}, + {"row": 35, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 35, "col": 11, "type": "ERROR", "message": "Instead found identifier '_1'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void TntBombCl::game_prerender()"}, + {"row": 43, "col": 56, "type": "ERROR", "message": "Expected expression value"}, + {"row": 43, "col": 56, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 56, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 56, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void TntBombCl::end_fx()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void TntBombCl::remove_fx()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\tomahawk.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\tornado.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\uber_blizzard.as", + "success": false, + "messages": [ + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::OnRepeatTimer()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 30, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 33, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::game_dynamically_created()"}, + {"row": 47, "col": 101, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 101, "type": "ERROR", "message": "Instead found ''"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::OnSpawn()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::scan_attack()"}, + {"row": 65, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 68, "col": 9, "type": "ERROR", "message": "No matching symbol 'getCount'"}, + {"row": 70, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 70, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 70, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 70, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 71, "col": 23, "type": "ERROR", "message": "No matching symbol 'getCount'"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::check_attack()"}, + {"row": 82, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt1'"}, + {"row": 86, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt2'"}, + {"row": 90, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt3'"}, + {"row": 94, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt4'"}, + {"row": 98, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt5'"}, + {"row": 102, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt6'"}, + {"row": 106, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt7'"}, + {"row": 110, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt8'"}, + {"row": 114, "col": 23, "type": "ERROR", "message": "No matching symbol 'getEnt9'"}, + {"row": 116, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 117, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 119, "col": 19, "type": "ERROR", "message": "No conversion from 'const string' to 'int' available."}, + {"row": 122, "col": 23, "type": "ERROR", "message": "No matching symbol 'CHECK_ENT'"}, + {"row": 127, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 128, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 129, "col": 27, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 130, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 133, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::end_summon()"}, + {"row": 136, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 140, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::remove_me()"}, + {"row": 142, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 145, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::client_activate()"}, + {"row": 147, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 148, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 149, "col": 16, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 150, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 151, "col": 30, "type": "ERROR", "message": "'z' is not a member of 'string'"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 158, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::make_flakes()"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 162, "col": 14, "type": "ERROR", "message": "No matching signatures to 'RandomInt(string, string)'"}, + {"row": 162, "col": 14, "type": "INFO", "message": "Candidates are:"}, + {"row": 162, "col": 14, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 162, "col": 14, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 163, "col": 14, "type": "ERROR", "message": "No matching signatures to 'RandomInt(string, string)'"}, + {"row": 163, "col": 14, "type": "INFO", "message": "Candidates are:"}, + {"row": 163, "col": 14, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 163, "col": 14, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 164, "col": 3, "type": "ERROR", "message": "No matching symbol 'START_POS'"}, + {"row": 165, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 166, "col": 10, "type": "ERROR", "message": "'NEGBLIZ_WIDTH' is already declared"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 168, "col": 10, "type": "ERROR", "message": "'x' is already declared"}, + {"row": 169, "col": 10, "type": "ERROR", "message": "'y' is already declared"}, + {"row": 170, "col": 3, "type": "ERROR", "message": "No matching symbol 'START_POS'"}, + {"row": 171, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 174, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::setup_blizzardflake()"}, + {"row": 179, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 182, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 183, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 187, "col": 2, "type": "INFO", "message": "Compiling void UberBlizzard::setup_hailshard()"}, + {"row": 190, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 191, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 192, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 193, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 194, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 195, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 196, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\volcano_troll.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 20, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 21, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 21, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 22, "col": 14, "type": "ERROR", "message": "Expected '('"}, + {"row": 22, "col": 14, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 24, "col": 14, "type": "ERROR", "message": "Expected identifier"}, + {"row": 24, "col": 14, "type": "ERROR", "message": "Instead found '('"}, + {"row": 182, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\summon\\zy_eye.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\swampeye.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\swamp_keeper.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\swamp_ogre.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\swamp_reaver.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\swamp_tube.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\swamp_tube_cl.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void SwampTubeCl::client_activate()"}, + {"row": 14, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 14, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SwampTubeCl::remove_fx()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void SwampTubeCl::needle_collide()"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void SwampTubeCl::setup_needle()"}, + {"row": 42, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 42, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\swamp_vile.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\tcadaver.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\tcadaver_once.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_bow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_bow_cl.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowCl::client_activate()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 29, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 30, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 31, "col": 19, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 32, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 33, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 34, "col": 16, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 35, "col": 12, "type": "ERROR", "message": "No matching symbol 'param7'"}, + {"row": 36, "col": 14, "type": "ERROR", "message": "No matching symbol 'param8'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'MAX_DURATION'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowCl::fx_loop()"}, + {"row": 57, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 60, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowCl::end_fx()"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowCl::remove_me()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowCl::game_prerender()"}, + {"row": 78, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowCl::setup_tracker_sprite()"}, + {"row": 102, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 102, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowCl::setup_spiral_sprite()"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_bow_cl_new.as", + "success": false, + "messages": [ + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowClNew::client_activate()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 29, "col": 12, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 30, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 31, "col": 19, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 32, "col": 18, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 33, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 34, "col": 16, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 35, "col": 12, "type": "ERROR", "message": "No matching symbol 'param7'"}, + {"row": 36, "col": 14, "type": "ERROR", "message": "No matching symbol 'param8'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'MAX_DURATION'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowClNew::fx_loop()"}, + {"row": 57, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 60, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowClNew::end_fx()"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowClNew::remove_me()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowClNew::game_prerender()"}, + {"row": 78, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowClNew::setup_tracker_sprite()"}, + {"row": 102, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 102, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorBowClNew::setup_spiral_sprite()"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 110, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 112, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_bow_new.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_esword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_fmace_cl.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling TelfWarriorFmaceCl::TelfWarriorFmaceCl()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorFmaceCl::client_activate()"}, + {"row": 30, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 30, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorFmaceCl::fx_loop()"}, + {"row": 47, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 47, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorFmaceCl::end_fx()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorFmaceCl::remove_me()"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorFmaceCl::setup_weapon_sprite()"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_fmace_dshield.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_idagger.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_laxe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_laxe_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorLaxeCl::client_activate()"}, + {"row": 18, "col": 73, "type": "ERROR", "message": "Expected expression value"}, + {"row": 18, "col": 73, "type": "ERROR", "message": "Instead found ''"}, + {"row": 21, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 21, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorLaxeCl::fx_loop()"}, + {"row": 28, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorLaxeCl::end_fx()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorLaxeCl::remove_me()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorLaxeCl::update_weapon_sprite()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void TelfWarriorLaxeCl::setup_weapon_sprite()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_warrior_pdagger.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_wizard_novice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\telf_wizard_xbow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\test_skele.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void TestSkele::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\thornlandspider.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\trencherbeak.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll_armored.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll_ice_lobber.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll_ice_lobber_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll_ice_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll_lobber.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll_stone.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\troll_turret.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\uber_reaver.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\vgoblin.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\vgoblin_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\vgoblin_chief.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\vgoblin_chief_cl.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void VgoblinChiefCl::OnRepeatTimer()"}, + {"row": 27, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 29, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 32, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void VgoblinChiefCl::client_activate()"}, + {"row": 46, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void VgoblinChiefCl::game_prerender()"}, + {"row": 53, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 53, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void VgoblinChiefCl::setup_smokes()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void VgoblinChiefCl::dewm_plant_fx()"}, + {"row": 73, "col": 26, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void VgoblinChiefCl::plant_sprite()"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 2, "type": "INFO", "message": "Compiling void VgoblinChiefCl::stunburst_go_cl()"}, + {"row": 102, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 102, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 110, "col": 2, "type": "INFO", "message": "Compiling void VgoblinChiefCl::stun_burst_fx()"}, + {"row": 113, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void VgoblinChiefCl::stunburst_flame()"}, + {"row": 138, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 138, "col": 43, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\vgoblin_guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\vgoblin_shaman.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\vine_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\vine_poison.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wizard_normal.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wizard_strong.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wolf.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wolf_alpha.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wolf_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wolf_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wolf_ice_alpha.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wolf_shadow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\worm_abyssal.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\worm_abyssal_cl.as", + "success": false, + "messages": [ + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling WormAbyssalCl::WormAbyssalCl()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::client_activate()"}, + {"row": 48, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 49, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::dark_burst()"}, + {"row": 57, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 58, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::create_sprites()"}, + {"row": 73, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 73, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::setup_ring_sprite()"}, + {"row": 95, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 95, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::beam_charge()"}, + {"row": 116, "col": 73, "type": "ERROR", "message": "Expected expression value"}, + {"row": 116, "col": 73, "type": "ERROR", "message": "Instead found ''"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::game_prerender()"}, + {"row": 121, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 127, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 131, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 135, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::beam_fire()"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 142, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 150, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 151, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 154, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 155, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 158, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::setup_eye_beams()"}, + {"row": 161, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 161, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 173, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::eye_beam_fade_cycle()"}, + {"row": 178, "col": 68, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 178, "col": 68, "type": "ERROR", "message": "Instead found ';'"}, + {"row": 178, "col": 86, "type": "ERROR", "message": "Expected ';'"}, + {"row": 178, "col": 86, "type": "ERROR", "message": "Instead found ')'"}, + {"row": 187, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::eye_beam_fade_loop()"}, + {"row": 189, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 190, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 191, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 199, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::fade_beams_loop()"}, + {"row": 204, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 205, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 206, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 210, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 211, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 216, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::setup_beam_sprite()"}, + {"row": 218, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 219, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 220, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 221, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 222, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 223, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 224, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 225, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 226, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 227, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 228, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 229, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 232, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::setup_beam_end_sprite()"}, + {"row": 234, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 235, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 236, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 237, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 238, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 239, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 240, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 241, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 242, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 243, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 246, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::update_beam_sprite()"}, + {"row": 248, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 252, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 255, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 257, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 263, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 264, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 269, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 270, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 271, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 275, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::setup_sphere()"}, + {"row": 277, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 278, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 279, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 280, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 281, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 282, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 283, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 284, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 285, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 286, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 287, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 288, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 289, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 292, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::update_sphere()"}, + {"row": 294, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 297, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 301, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 306, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 315, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::end_fx()"}, + {"row": 321, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 324, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::follow_beams_off()"}, + {"row": 326, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 327, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 331, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalCl::remove_fx()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\worm_abyssal_head.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalHead::game_dynamically_created()"}, + {"row": 19, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalHead::OnSpawn()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalHead::debug_model()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalHead::snap_loop()"}, + {"row": 43, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 44, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 46, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 47, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_DEVELOPER_MODE'"}, + {"row": 49, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 50, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 52, "col": 76, "type": "ERROR", "message": "'z' is not a member of 'string'"}, + {"row": 52, "col": 61, "type": "ERROR", "message": "'y' is not a member of 'string'"}, + {"row": 52, "col": 46, "type": "ERROR", "message": "'x' is not a member of 'string'"}, + {"row": 54, "col": 76, "type": "ERROR", "message": "'z' is not a member of 'string'"}, + {"row": 54, "col": 61, "type": "ERROR", "message": "'y' is not a member of 'string'"}, + {"row": 54, "col": 46, "type": "ERROR", "message": "'x' is not a member of 'string'"}, + {"row": 56, "col": 76, "type": "ERROR", "message": "'z' is not a member of 'string'"}, + {"row": 56, "col": 61, "type": "ERROR", "message": "'y' is not a member of 'string'"}, + {"row": 56, "col": 46, "type": "ERROR", "message": "'x' is not a member of 'string'"}, + {"row": 57, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 58, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 61, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 61, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 61, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 61, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 64, "col": 4, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalHead::OnDamage(int)"}, + {"row": 72, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'Bleed'"}, + {"row": 74, "col": 25, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 75, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 77, "col": 10, "type": "WARN", "message": "Variable 'L_HIT_CHANCE' hides another variable of same name in outer scope"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamage'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamage'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ReturnData'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalHead::game_applyeffect()"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ReturnData'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void WormAbyssalHead::ext_playsound()"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 98, "col": 27, "type": "ERROR", "message": "No conversion from 'const string' to 'int' available."}, + {"row": 100, "col": 42, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 100, "col": 34, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 100, "col": 26, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 100, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 104, "col": 42, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 104, "col": 34, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 104, "col": 26, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 104, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wraith.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wraith_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void WraithCl::client_activate()"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 16, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'beam_loop'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void WraithCl::game_prerender()"}, + {"row": 27, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 31, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 31, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void WraithCl::end_fx()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void WraithCl::remove_me()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wraith_summoned.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\wyrm_fire.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zombie.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zombie_bile.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zombie_decayed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zombie_decayed_nr.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zombie_huge.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zombie_zygol.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zorc_archer1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zorc_archer2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zorc_warrior1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zorc_warrior2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\\zorc_warrior3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest10.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest11.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest12.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest13.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest3.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest4.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest5.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest6.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest7.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest8.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\cavechest9.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\darrelin-npc.as", + "success": false, + "messages": [ + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::OnSpawn()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMaxHealth'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGold'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::say_hi()"}, + {"row": 75, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 77, "col": 26, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 81, "col": 26, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 83, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 85, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_LAST_SPOKE'"}, + {"row": 87, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 88, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'chat_loop'"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::restore_mouth_move()"}, + {"row": 108, "col": 3, "type": "ERROR", "message": "No matching symbol 'bchat_auto_mouth_move'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::say_orc()"}, + {"row": 113, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 115, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 116, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 118, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 119, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'chat_loop'"}, + {"row": 135, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::say_myth()"}, + {"row": 137, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 139, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 140, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 142, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 143, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'chat_loop'"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::say_acting()"}, + {"row": 158, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 161, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 163, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 164, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 174, "col": 3, "type": "ERROR", "message": "No matching symbol 'chat_loop'"}, + {"row": 177, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::say_name()"}, + {"row": 179, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 181, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 182, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 184, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 185, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 205, "col": 3, "type": "ERROR", "message": "No matching symbol 'chat_loop'"}, + {"row": 208, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::say_goblins()"}, + {"row": 210, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 212, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 213, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 215, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 216, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 224, "col": 3, "type": "ERROR", "message": "No matching symbol 'chat_loop'"}, + {"row": 227, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::say_river()"}, + {"row": 229, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 231, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 232, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 234, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 235, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 241, "col": 3, "type": "ERROR", "message": "No matching symbol 'chat_loop'"}, + {"row": 244, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::give_manuscript()"}, + {"row": 246, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 248, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 251, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 253, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 254, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 256, "col": 8, "type": "ERROR", "message": "No matching symbol 'BUSY_CHATTING'"}, + {"row": 257, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 259, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 267, "col": 3, "type": "ERROR", "message": "No matching symbol 'chat_loop'"}, + {"row": 275, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::game_menu_getoptions()"}, + {"row": 277, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 277, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 278, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 278, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 279, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 279, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"}, + {"row": 282, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 282, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 288, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 288, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 294, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 294, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 300, "col": 14, "type": "ERROR", "message": "Expected ';'"}, + {"row": 300, "col": 14, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 307, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 307, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 308, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 308, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 309, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 309, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 310, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 310, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 314, "col": 2, "type": "INFO", "message": "Compiling void DarrelinNpc::chat_warning()"}, + {"row": 316, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 319, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\extra15a.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\extra15b.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\extra16.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\firecave.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\pillar.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling Pillar::Pillar()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void Pillar::OnSpawn()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void Pillar::say_release()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void Pillar::say_hail()"}, + {"row": 48, "col": 8, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 50, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 53, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 54, "col": 8, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 56, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 59, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void Pillar::game_menu_getoptions()"}, + {"row": 74, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 74, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 75, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 75, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 76, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 77, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 77, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 81, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 81, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 82, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 82, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 83, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 83, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 84, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 84, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 88, "col": 2, "type": "INFO", "message": "Compiling void Pillar::wrong_ring()"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 94, "col": 2, "type": "INFO", "message": "Compiling void Pillar::gave_ring()"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 103, "col": 2, "type": "INFO", "message": "Compiling void Pillar::spawnage()"}, + {"row": 105, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 107, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 111, "col": 2, "type": "INFO", "message": "Compiling void Pillar::gobyebye()"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\Shadahar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shadahar2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shadahar_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ShadaharCl::eye_beam_prep_cl()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void ShadaharCl::wand_prep_cl()"}, + {"row": 23, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void ShadaharCl::setup_eye_sprite()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void ShadaharCl::setup_wand_sprite()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shad_eye.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shad_taunter.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shad_tele1.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::game_postspawn()"}, + {"row": 17, "col": 25, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 18, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::remove_me()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shad_tele2.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::game_postspawn()"}, + {"row": 17, "col": 25, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 18, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::remove_me()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shad_tele3.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::game_postspawn()"}, + {"row": 17, "col": 25, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 18, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::remove_me()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shad_tele4.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::game_postspawn()"}, + {"row": 17, "col": 25, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 18, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::remove_me()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shad_tele5.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::game_postspawn()"}, + {"row": 17, "col": 25, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 18, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::remove_me()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shad_tele6.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::game_postspawn()"}, + {"row": 17, "col": 25, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 18, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::remove_me()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shad_tele7.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::game_postspawn()"}, + {"row": 17, "col": 25, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 18, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::remove_me()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\shad_tele_base.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::game_postspawn()"}, + {"row": 17, "col": 25, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 18, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void ShadTeleBase::remove_me()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\\skeleton2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/msc_tutorial\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_snow\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\\base_soccer.as", + "success": false, + "messages": [ + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling BaseSoccer::BaseSoccer()"}, + {"row": 36, "col": 13, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 37, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "Both conditions must initialize member 'SUSPEND_AI'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::OnSpawn()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::soccer_finalize()"}, + {"row": 57, "col": 13, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 58, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 59, "col": 19, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 60, "col": 19, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 60, "col": 19, "type": "INFO", "message": "Candidates are:"}, + {"row": 60, "col": 19, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 60, "col": 19, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 61, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 62, "col": 18, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 62, "col": 18, "type": "INFO", "message": "Candidates are:"}, + {"row": 62, "col": 18, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 62, "col": 18, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 63, "col": 20, "type": "ERROR", "message": "No matching symbol 'ATTACK_MOVERANGE'"}, + {"row": 85, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 87, "col": 11, "type": "WARN", "message": "Variable 'NAME_SUFFIX' hides another variable of same name in outer scope"}, + {"row": 89, "col": 8, "type": "ERROR", "message": "No matching symbol 'AM_LEADER'"}, + {"row": 91, "col": 11, "type": "WARN", "message": "Variable 'NAME_SUFFIX' hides another variable of same name in outer scope"}, + {"row": 93, "col": 8, "type": "ERROR", "message": "No matching symbol 'AM_GOALIE'"}, + {"row": 95, "col": 11, "type": "WARN", "message": "Variable 'NAME_SUFFIX' hides another variable of same name in outer scope"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'MY_NAME'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::game_menu_getoptions()"}, + {"row": 104, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 106, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 106, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 120, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 125, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 126, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 126, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 133, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 133, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 136, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 136, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 137, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 137, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 141, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 141, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 142, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 142, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 143, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 144, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 144, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 147, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 147, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 148, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 148, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 152, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::menu_faster()"}, + {"row": 154, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 156, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 157, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 161, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::menu_faster_all()"}, + {"row": 163, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 169, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 172, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::extsorc_make_team_faster()"}, + {"row": 174, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 178, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::make_faster()"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 183, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimMoveSpeed'"}, + {"row": 184, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimFrameRate'"}, + {"row": 189, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::menu_slower()"}, + {"row": 191, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 193, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 194, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 198, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::menu_slower_all()"}, + {"row": 200, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 204, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 206, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 209, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::extsorc_make_team_slower()"}, + {"row": 211, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 215, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::make_slower()"}, + {"row": 217, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 220, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimMoveSpeed'"}, + {"row": 221, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimFrameRate'"}, + {"row": 226, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::menu_remove()"}, + {"row": 228, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 229, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 231, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 233, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 234, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 237, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::menu_normal()"}, + {"row": 239, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 241, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 242, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 246, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::menu_normal_all()"}, + {"row": 248, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 252, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 254, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 257, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::extsorc_make_team_normal()"}, + {"row": 259, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 263, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::make_normal()"}, + {"row": 265, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 268, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimMoveSpeed'"}, + {"row": 269, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAnimFrameRate'"}, + {"row": 274, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::soc_spawn_stuck_check()"}, + {"row": 277, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 277, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 278, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 278, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 279, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 279, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 295, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::setsoc_blue()"}, + {"row": 298, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 302, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::setsoc_red()"}, + {"row": 305, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 309, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::setsoc_goalrad()"}, + {"row": 311, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 314, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::ext_soc_blue_remove()"}, + {"row": 317, "col": 3, "type": "ERROR", "message": "No matching symbol 'npc_suicide'"}, + {"row": 320, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::ext_soc_red_remove()"}, + {"row": 323, "col": 3, "type": "ERROR", "message": "No matching symbol 'npc_suicide'"}, + {"row": 331, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::OnHuntTarget(CBaseEntity@)"}, + {"row": 433, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 433, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 439, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::soc_kickball()"}, + {"row": 484, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 484, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 559, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 559, "col": 44, "type": "ERROR", "message": "Instead found ''"}, + {"row": 562, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::npc_selectattack()"}, + {"row": 564, "col": 21, "type": "ERROR", "message": "No matching signatures to 'GetEntityOrigin(string)'"}, + {"row": 564, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 564, "col": 21, "type": "INFO", "message": "Vector3 GetEntityOrigin(CBaseEntity@)"}, + {"row": 564, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 565, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 576, "col": 8, "type": "ERROR", "message": "No matching symbol 'AM_GOALIE'"}, + {"row": 578, "col": 50, "type": "ERROR", "message": "No matching symbol 'MY_GOAL_LOC'"}, + {"row": 579, "col": 46, "type": "ERROR", "message": "No matching symbol 'MY_GOAL_LOC'"}, + {"row": 582, "col": 18, "type": "ERROR", "message": "No matching symbol 'NPC_HOME_LOC'"}, + {"row": 584, "col": 11, "type": "ERROR", "message": "No matching symbol 'IsOnGround'"}, + {"row": 586, "col": 21, "type": "ERROR", "message": "No matching symbol 'ANIM_SCOOP_BALL'"}, + {"row": 586, "col": 7, "type": "ERROR", "message": "No matching symbol 'ANIM_ATTACK'"}, + {"row": 590, "col": 21, "type": "ERROR", "message": "No matching symbol 'ANIM_KICK'"}, + {"row": 590, "col": 7, "type": "ERROR", "message": "No matching symbol 'ANIM_ATTACK'"}, + {"row": 595, "col": 20, "type": "ERROR", "message": "No matching symbol 'ANIM_KICK'"}, + {"row": 595, "col": 6, "type": "ERROR", "message": "No matching symbol 'ANIM_ATTACK'"}, + {"row": 600, "col": 19, "type": "ERROR", "message": "No matching symbol 'ANIM_KICK'"}, + {"row": 600, "col": 5, "type": "ERROR", "message": "No matching symbol 'ANIM_ATTACK'"}, + {"row": 605, "col": 47, "type": "ERROR", "message": "No matching symbol 'TARG_ORG'"}, + {"row": 606, "col": 43, "type": "ERROR", "message": "No matching symbol 'TARG_ORG'"}, + {"row": 609, "col": 10, "type": "ERROR", "message": "No matching symbol 'IsOnGround'"}, + {"row": 618, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::extsoc_game_start()"}, + {"row": 620, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 622, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 623, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 626, "col": 3, "type": "ERROR", "message": "No matching symbol 'npcatk_resume_ai'"}, + {"row": 627, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 628, "col": 8, "type": "ERROR", "message": "No matching symbol 'AM_GOALIE'"}, + {"row": 629, "col": 3, "type": "ERROR", "message": "No matching symbol 'npcatk_settarget'"}, + {"row": 632, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::extsoc_reset()"}, + {"row": 635, "col": 3, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 639, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::extsoc_reset_loop()"}, + {"row": 644, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 644, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 645, "col": 45, "type": "ERROR", "message": "Expected expression value"}, + {"row": 645, "col": 45, "type": "ERROR", "message": "Instead found ''"}, + {"row": 646, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 646, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 656, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::extsoc_pause_game()"}, + {"row": 659, "col": 3, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 667, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::extsoc_score()"}, + {"row": 670, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 674, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 678, "col": 8, "type": "ERROR", "message": "No matching symbol 'GAME_OVER'"}, + {"row": 686, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 710, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::soc_round_win()"}, + {"row": 715, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 716, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 718, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 719, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 724, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 725, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 727, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 728, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 733, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::soc_round_lose()"}, + {"row": 738, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 739, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 741, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 742, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 747, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 748, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 750, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 751, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 756, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::soc_jump_over_ball()"}, + {"row": 758, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 759, "col": 3, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 760, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 761, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 764, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::soc_stop_movement()"}, + {"row": 766, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 767, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 770, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::npcatk_setmovedest()"}, + {"row": 790, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 790, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 794, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 794, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 858, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::soc_ball_scoop()"}, + {"row": 866, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 866, "col": 49, "type": "ERROR", "message": "Instead found ''"}, + {"row": 877, "col": 2, "type": "INFO", "message": "Compiling void BaseSoccer::soc_ball_release()"}, + {"row": 884, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 884, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 886, "col": 44, "type": "ERROR", "message": "Expected expression value"}, + {"row": 886, "col": 44, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\\game_master.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_soccer_blue_toggle()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 14, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 16, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 18, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 20, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 21, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 26, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 28, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_soccer_red_toggle()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 36, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 38, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 40, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 42, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 43, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 48, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 50, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 51, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\\goal_blue_ref.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void GoalBlueRef::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\\goal_red_ref.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void GoalRedRef::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\\push_goalie_blue.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void PushGoalieBlue::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 34, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void PushGoalieBlue::extsoc_del_blue_pushgoal()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\\push_goalie_red.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void PushGoalieRed::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 34, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void PushGoalieRed::extsoc_del_red_pushgoal()"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\\soccer_ball.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void SoccerBall::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\\sorc1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\\troll1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_underworldv2\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\\chest_maldora.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\\chest_voldar.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\\game_master.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::game_triggered()"}, + {"row": 10, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 12, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::sailor_moon()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\\maldora.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\\maldora_dead.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling MaldoraDead::MaldoraDead()"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::OnSpawn()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::game_precache()"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::make_barrier()"}, + {"row": 57, "col": 59, "type": "ERROR", "message": "Expected expression value"}, + {"row": 57, "col": 59, "type": "ERROR", "message": "Instead found ''"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::game_dynamically_created()"}, + {"row": 65, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 67, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 70, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 72, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 77, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 82, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 85, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 86, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 88, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 89, "col": 8, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 92, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 93, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::spawn_axe()"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 100, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 101, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 105, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 109, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 113, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 117, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 121, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 125, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::say_gaveyou1()"}, + {"row": 127, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 129, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 132, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::say_gaveyou2()"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 135, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 138, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::say_gaveyou3()"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 143, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 147, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 151, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 155, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 159, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 163, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 167, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 169, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 172, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::say_gaveyou4()"}, + {"row": 174, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 175, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 178, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::remove_me()"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 183, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::face_me()"}, + {"row": 185, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 186, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 189, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::straighten_up()"}, + {"row": 191, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 194, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::fly_out()"}, + {"row": 201, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 201, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 208, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::fly_out_loop()"}, + {"row": 210, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 211, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 212, "col": 11, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 214, "col": 31, "type": "ERROR", "message": "No matching signatures to 'Vector3(string, string, string)'"}, + {"row": 214, "col": 31, "type": "INFO", "message": "Candidates are:"}, + {"row": 214, "col": 31, "type": "INFO", "message": "Vector3::Vector3()"}, + {"row": 214, "col": 31, "type": "INFO", "message": "Vector3::Vector3(float, float, float)"}, + {"row": 214, "col": 31, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 214, "col": 31, "type": "INFO", "message": "Vector3::Vector3(const Vector3&in)"}, + {"row": 214, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 221, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 225, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::death_exit()"}, + {"row": 227, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 228, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 229, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 232, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::death_exit2()"}, + {"row": 234, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 235, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 236, "col": 23, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 239, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 243, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 247, "col": 2, "type": "INFO", "message": "Compiling void MaldoraDead::death_exit3()"}, + {"row": 249, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 250, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 251, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\\maldora_image.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\\orc_archer_image.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void OrcArcherImage::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void OrcArcherImage::say_excuse1()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 34, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void OrcArcherImage::say_whadup()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 41, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void OrcArcherImage::die()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 48, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void OrcArcherImage::remove_me()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void OrcArcherImage::face_me()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void OrcArcherImage::straighten_up()"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\\orc_champion_image.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void OrcChampionImage::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void OrcChampionImage::say_minions()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 26, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void OrcChampionImage::die()"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 33, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void OrcChampionImage::remove_me()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void OrcChampionImage::face_me()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void OrcChampionImage::straighten_up()"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\base_pillar_check.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_check_targets()"}, + {"row": 22, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_do_shake()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 29, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_do_boom()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_do_boom2()"}, + {"row": 39, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\base_storm_brush.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_show()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_hide()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_change_speed()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_in_loop()"}, + {"row": 47, "col": 19, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 49, "col": 17, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 51, "col": 14, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 55, "col": 19, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_out()"}, + {"row": 61, "col": 13, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_out_loop()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\brush_storm_cold.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling BrushStormCold::BrushStormCold()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_show()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_hide()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_change_speed()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_in_loop()"}, + {"row": 47, "col": 19, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 49, "col": 17, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 51, "col": 14, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 55, "col": 19, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_out()"}, + {"row": 61, "col": 13, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_out_loop()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\brush_storm_fire.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling BrushStormFire::BrushStormFire()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_show()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_hide()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_change_speed()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_in_loop()"}, + {"row": 47, "col": 19, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 49, "col": 17, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 51, "col": 14, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 55, "col": 19, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_out()"}, + {"row": 61, "col": 13, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_out_loop()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\brush_storm_lightning1.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling BrushStormLightning1::BrushStormLightning1()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_show()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_hide()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_change_speed()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_in_loop()"}, + {"row": 47, "col": 19, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 49, "col": 17, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 51, "col": 14, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 55, "col": 19, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_out()"}, + {"row": 61, "col": 13, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_out_loop()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\brush_storm_lightning2.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling BrushStormLightning2::BrushStormLightning2()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void BrushStormLightning2::do_flicker()"}, + {"row": 20, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 20, "col": 11, "type": "ERROR", "message": "Instead found identifier '_1'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_show()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_hide()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_change_speed()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_in_loop()"}, + {"row": 47, "col": 19, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 49, "col": 17, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 51, "col": 14, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 55, "col": 19, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_out()"}, + {"row": 61, "col": 13, "type": "ERROR", "message": "No matching symbol 'BASE_RENDERAMT'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void BaseStormBrush::storm_fade_out_loop()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\dragon_green_img.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\dragon_green_img_cl.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenImgCl::client_activate()"}, + {"row": 22, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 22, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 23, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 23, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenImgCl::breath_loop()"}, + {"row": 43, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 43, "col": 11, "type": "ERROR", "message": "Instead found identifier '_1'"}, + {"row": 44, "col": 73, "type": "ERROR", "message": "Expected expression value"}, + {"row": 44, "col": 73, "type": "ERROR", "message": "Instead found ''"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenImgCl::ext_breath_stop()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenImgCl::remove_fx()"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenImgCl::update_breath_sprite()"}, + {"row": 60, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 61, "col": 30, "type": "ERROR", "message": "'z' is not a member of 'const string'"}, + {"row": 63, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 69, "col": 30, "type": "ERROR", "message": "No conversion from 'const string' to 'int' available."}, + {"row": 72, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenImgCl::setup_breath_sprite()"}, + {"row": 87, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 87, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\dragon_green_mini.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\dragon_green_mini_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenMiniCl::client_activate()"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 16, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenMiniCl::breath_loop()"}, + {"row": 27, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 29, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenMiniCl::spit_rocks()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenMiniCl::end_fx()"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenMiniCl::remove_fx()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenMiniCl::setup_cloud()"}, + {"row": 70, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 70, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void DragonGreenMiniCl::setup_rock()"}, + {"row": 81, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 81, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\dragon_ice_storm_cl.as", + "success": false, + "messages": [ + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void DragonIceStormCl::client_activate()"}, + {"row": 24, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void DragonIceStormCl::fx_loop()"}, + {"row": 34, "col": 11, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 34, "col": 11, "type": "ERROR", "message": "Instead found identifier '_2'"}, + {"row": 38, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void DragonIceStormCl::shard_land()"}, + {"row": 48, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 50, "col": 4, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 54, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 56, "col": 5, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void DragonIceStormCl::setup_ice_spike()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 40, "type": "ERROR", "message": "No matching symbol 'MAX_SCALE'"}, + {"row": 73, "col": 29, "type": "ERROR", "message": "No matching symbol 'MIN_SCALE'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 2, "type": "INFO", "message": "Compiling void DragonIceStormCl::end_fx()"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void DragonIceStormCl::remove_fx()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\game_master.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_nash_tear()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 21, "col": 35, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 24, "col": 25, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 25, "col": 4, "type": "ERROR", "message": "No matching symbol 'RemoveToken'"}, + {"row": 30, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 32, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 34, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_nash_cryskey_found()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_crys_key_activate()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 51, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 52, "col": 22, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 53, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 55, "col": 9, "type": "ERROR", "message": "No matching symbol 'GM_NASH_KEY1_USED'"}, + {"row": 60, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 62, "col": 9, "type": "ERROR", "message": "No matching symbol 'GM_NASH_KEY2_USED'"}, + {"row": 67, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 68, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 70, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 72, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 77, "col": 10, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 82, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 83, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 87, "col": 8, "type": "ERROR", "message": "No matching symbol 'GM_NASH_KEYS_USED'"}, + {"row": 89, "col": 5, "type": "ERROR", "message": "No matching symbol 'GM_NASH_KEYS_USED'"}, + {"row": 91, "col": 4, "type": "ERROR", "message": "No matching symbol 'GM_NASH_KEYS_USED'"}, + {"row": 92, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 93, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 95, "col": 5, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 96, "col": 5, "type": "ERROR", "message": "No matching symbol 'GM_NASH_KEY1_USED'"}, + {"row": 98, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 100, "col": 5, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 101, "col": 5, "type": "ERROR", "message": "No matching symbol 'GM_NASH_KEY2_USED'"}, + {"row": 103, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 104, "col": 8, "type": "ERROR", "message": "No matching symbol 'GM_NASH_KEYS_USED'"}, + {"row": 107, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 109, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\kayrath.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\kayrath_cl.as", + "success": false, + "messages": [ + {"row": 119, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\lift_check_left.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling LiftCheckLeft::LiftCheckLeft()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_check_targets()"}, + {"row": 22, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_do_shake()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 29, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_do_boom()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_do_boom2()"}, + {"row": 39, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\lift_check_right.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling LiftCheckRight::LiftCheckRight()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_check_targets()"}, + {"row": 22, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_do_shake()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 29, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_do_boom()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void BasePillarCheck::ext_do_boom2()"}, + {"row": 39, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\lightning_strike_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void LightningStrikeCl::client_activate()"}, + {"row": 17, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 18, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_STRIKE_TIME(const string)'"}, + {"row": 22, "col": 24, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void LightningStrikeCl::game_prerender()"}, + {"row": 34, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void LightningStrikeCl::do_strike()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSoundVolume'"}, + {"row": 46, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 48, "col": 24, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void LightningStrikeCl::remove_fx()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void LightningStrikeCl::update_glow_sprite()"}, + {"row": 64, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 66, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void LightningStrikeCl::setup_glow_sprite()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void LightningStrikeCl::setup_spit_sprite()"}, + {"row": 97, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 97, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\\wind_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void WindCl::OnRepeatTimer()"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 16, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void WindCl::client_activate()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 25, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 26, "col": 14, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 27, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void WindCl::end_fx()"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void WindCl::remove_fx()"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void WindCl::update_wind()"}, + {"row": 47, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void WindCl::setup_wind()"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare\\bonus_item.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare\\edanateller.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare\\monsters\\deadboar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare\\monsters\\ghostrat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare\\monsters\\zombie.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare_thornlands\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\base_arrow_storage.as", + "success": false, + "messages": [ + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::game_menu_getoptions()"}, + {"row": 26, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 27, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 27, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 28, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 28, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 29, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 29, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 30, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 30, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 31, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 31, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 32, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 32, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 33, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 33, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 34, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 34, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 35, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 35, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 36, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 36, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 37, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 37, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 38, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 38, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 39, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 39, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 40, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 40, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)'"}, + {"row": 41, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 41, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::check_for_item()"}, + {"row": 42, "col": 9, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 44, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 45, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 47, "col": 17, "type": "ERROR", "message": "No matching symbol 'ARROW_NAMES'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "'N_NAMES' is already declared"}, + {"row": 51, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 53, "col": 17, "type": "ERROR", "message": "No matching symbol 'BOLT_NAMES'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_bolt_fire()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 59, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 59, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_bolt_iron()"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 64, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 64, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 67, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_bolt_silver()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 69, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 69, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_bolt_steel()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 74, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 74, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_bolt_wooden()"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 79, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 79, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 82, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_arrow_bluntwooden()"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 84, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 84, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_arrow_broadhead()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 89, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 89, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_arrow_fire()"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 94, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 94, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_arrow_frost()"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 99, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 99, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 102, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_arrow_gholy()"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 104, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 104, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 107, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_arrow_holy()"}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 109, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 109, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_arrow_jagged()"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 114, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 114, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 117, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_arrow_poison()"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 119, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 119, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_arrow_silvertipped()"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 124, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 124, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::gticket_proj_arrow_wooden()"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching signatures to 'BaseArrowStorage::give_ticket(const string)'"}, + {"row": 129, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 129, "col": 3, "type": "INFO", "message": "void MS::BaseArrowStorage::give_ticket()"}, + {"row": 132, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::give_ticket()"}, + {"row": 134, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 142, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::list_tickets()"}, + {"row": 150, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 150, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 151, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 151, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 152, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 152, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 153, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 153, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::redeem_ticket()"}, + {"row": 158, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 161, "col": 8, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 163, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 166, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 167, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 171, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 172, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 176, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::not_enough_arrows()"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 179, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 182, "col": 2, "type": "INFO", "message": "Compiling void BaseArrowStorage::check_for_item()"}, + {"row": 190, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 190, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 191, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 191, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 192, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 192, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 193, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 193, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 194, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 194, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\base_banker.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseBanker::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\base_fletcher.as", + "success": false, + "messages": [ + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void BaseFletcher::game_menu_getoptions()"}, + {"row": 47, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 49, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 50, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 51, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 51, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 52, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 53, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 53, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 54, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 54, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 58, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 59, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 59, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 60, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 60, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 61, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 61, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 62, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 63, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 63, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 64, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 64, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 65, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 65, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void BaseFletcher::bundle_arrows_menu()"}, + {"row": 91, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'OpenMenu'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void BaseFletcher::bundle_bolts_menu()"}, + {"row": 102, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 104, "col": 3, "type": "ERROR", "message": "No matching symbol 'OpenMenu'"}, + {"row": 105, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 106, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 109, "col": 2, "type": "INFO", "message": "Compiling void BaseFletcher::add_arrow_options()"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 2, "type": "INFO", "message": "Compiling void BaseFletcher::add_bolt_options()"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 142, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 142, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 143, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 144, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 144, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 145, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 145, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseFletcher::check_arrows()"}, + {"row": 150, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 152, "col": 22, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void BaseFletcher::check_bolts()"}, + {"row": 158, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 160, "col": 22, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 164, "col": 2, "type": "INFO", "message": "Compiling void BaseFletcher::not_enough_arrows()"}, + {"row": 166, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 167, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 268, "col": 2, "type": "INFO", "message": "Compiling void BaseFletcher::return_bundle()"}, + {"row": 270, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 275, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 276, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\base_storage.as", + "success": false, + "messages": [ + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling BaseStorage::BaseStorage()"}, + {"row": 45, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::OnSpawn()"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 91, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::create_bank()"}, + {"row": 93, "col": 28, "type": "ERROR", "message": "No matching symbol 'GALA_CHEST_POS'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::game_menu_getoptions()"}, + {"row": 112, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 112, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 114, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 114, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 115, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 115, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 120, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 125, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 126, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 126, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 127, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 127, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 133, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 133, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 134, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 134, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 135, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 135, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 136, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 136, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 137, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 137, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 164, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 164, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 165, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 165, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 166, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 166, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 167, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 167, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 168, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 168, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 174, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 174, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 179, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 179, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 186, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 186, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 187, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 187, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 188, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 188, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 189, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 189, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 190, "col": 9, "type": "ERROR", "message": "Expected '('"}, + {"row": 190, "col": 9, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 194, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 194, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 217, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::check_inventory()"}, + {"row": 242, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 242, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 243, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 243, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 244, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 244, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 245, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 245, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 246, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 246, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 276, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 276, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 277, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 277, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 278, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 278, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 279, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 279, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 280, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 280, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 304, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::activate_storage()"}, + {"row": 306, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 308, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 311, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::activate_tickets()"}, + {"row": 314, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 317, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::say_select_item()"}, + {"row": 319, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 322, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::return_ticket()"}, + {"row": 324, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 327, "col": 8, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 329, "col": 25, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 331, "col": 4, "type": "ERROR", "message": "No matching symbol 'bteller_give_ticket'"}, + {"row": 332, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 336, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 337, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 338, "col": 4, "type": "ERROR", "message": "No matching symbol 'bteller_error_no_item'"}, + {"row": 343, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::open_menu()"}, + {"row": 345, "col": 3, "type": "ERROR", "message": "No matching symbol 'OpenMenu'"}, + {"row": 361, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::cancel_trade()"}, + {"row": 363, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 368, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::display_abort()"}, + {"row": 370, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 370, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 371, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 371, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 372, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 372, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 373, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 373, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 376, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::redeem_ticket()"}, + {"row": 378, "col": 20, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 381, "col": 8, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 384, "col": 25, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 386, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 387, "col": 4, "type": "ERROR", "message": "No matching symbol 'bteller_ticket_redeemed'"}, + {"row": 391, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 392, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 393, "col": 4, "type": "ERROR", "message": "No matching symbol 'bteller_error_no_item'"}, + {"row": 398, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::enum_all()"}, + {"row": 401, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 402, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 404, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 404, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 404, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 407, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 408, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 410, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 410, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 410, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 413, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 414, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 416, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 416, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 416, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 419, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 420, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 422, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 422, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 422, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 425, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 426, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 428, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 428, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 428, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 431, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 432, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 434, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 434, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 434, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 437, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 438, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 440, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 440, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 440, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 443, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 444, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 446, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 446, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 446, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 449, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 450, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 452, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 452, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 452, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 455, "col": 17, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 456, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 458, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 458, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 458, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 460, "col": 9, "type": "ERROR", "message": "No matching symbol 'N_ADDITIONAL'"}, + {"row": 462, "col": 28, "type": "ERROR", "message": "No matching symbol 'ADDITIONAL_ITEMS_01'"}, + {"row": 463, "col": 30, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 464, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 466, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 466, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 466, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 468, "col": 9, "type": "ERROR", "message": "No matching symbol 'N_ADDITIONAL'"}, + {"row": 470, "col": 10, "type": "ERROR", "message": "'NEXT_CHECK_LIST' is already declared"}, + {"row": 471, "col": 10, "type": "ERROR", "message": "'CHECK_LIST_NITEMS' is already declared"}, + {"row": 472, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 474, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 474, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 474, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 476, "col": 9, "type": "ERROR", "message": "No matching symbol 'N_ADDITIONAL'"}, + {"row": 478, "col": 10, "type": "ERROR", "message": "'NEXT_CHECK_LIST' is already declared"}, + {"row": 479, "col": 10, "type": "ERROR", "message": "'CHECK_LIST_NITEMS' is already declared"}, + {"row": 480, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 482, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 482, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 482, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 484, "col": 9, "type": "ERROR", "message": "No matching symbol 'N_ADDITIONAL'"}, + {"row": 486, "col": 10, "type": "ERROR", "message": "'NEXT_CHECK_LIST' is already declared"}, + {"row": 487, "col": 10, "type": "ERROR", "message": "'CHECK_LIST_NITEMS' is already declared"}, + {"row": 488, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 490, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 490, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 490, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 492, "col": 9, "type": "ERROR", "message": "No matching symbol 'N_ADDITIONAL'"}, + {"row": 494, "col": 10, "type": "ERROR", "message": "'NEXT_CHECK_LIST' is already declared"}, + {"row": 495, "col": 10, "type": "ERROR", "message": "'CHECK_LIST_NITEMS' is already declared"}, + {"row": 496, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 498, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseStorage::check_inventory(const string, string)'"}, + {"row": 498, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 498, "col": 4, "type": "INFO", "message": "void MS::BaseStorage::check_inventory()"}, + {"row": 502, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::note_hundred()"}, + {"row": 504, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 505, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 509, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::note_ten()"}, + {"row": 511, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 512, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 516, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::open_betabank()"}, + {"row": 518, "col": 3, "type": "ERROR", "message": "No matching symbol 'Storage'"}, + {"row": 519, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 522, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::betabank_success()"}, + {"row": 524, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 525, "col": 3, "type": "ERROR", "message": "No matching symbol 'Storage'"}, + {"row": 528, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::betabank_failed()"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 531, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 532, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 535, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::bank_intro1()"}, + {"row": 537, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'Storage'"}, + {"row": 539, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 542, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::bank_intro2()"}, + {"row": 544, "col": 3, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 545, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 546, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 549, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::buy_scroll()"}, + {"row": 551, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 554, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 557, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::say_wondrous_cant_afford()"}, + {"row": 559, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 561, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 564, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::lchat_mouth_move()"}, + {"row": 569, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 573, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 574, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 578, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 579, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 583, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 584, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 587, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 588, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 589, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 592, "col": 2, "type": "INFO", "message": "Compiling void BaseStorage::lchat_close_mouth()"}, + {"row": 594, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 595, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\beggar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\crystal_keeper.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\default_dwarf.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\default_human.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\dwarf_hbow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\dwarf_lantern.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\dwarf_lantern_base.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void DwarfLanternBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\dwarf_lantern_cl.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling DwarfLanternCl::DwarfLanternCl()"}, + {"row": 17, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 17, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 18, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 18, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void DwarfLanternCl::client_activate()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 26, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 27, "col": 13, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 28, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 29, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 31, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 33, "col": 25, "type": "ERROR", "message": "No matching symbol 'RIGHT_HAND'"}, + {"row": 37, "col": 25, "type": "ERROR", "message": "No matching symbol 'LEFT_HAND'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void DwarfLanternCl::game_prerender()"}, + {"row": 47, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 48, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 50, "col": 25, "type": "ERROR", "message": "No matching symbol 'RIGHT_HAND'"}, + {"row": 54, "col": 25, "type": "ERROR", "message": "No matching symbol 'LEFT_HAND'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void DwarfLanternCl::end_fx()"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void DwarfLanternCl::remove_fx()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void DwarfLanternCl::update_lantern_sprite()"}, + {"row": 73, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void DwarfLanternCl::setup_lantern_sprite()"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\dwarf_lantern_still.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\dwarf_pickaxe.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\dwarf_sbow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\dwarf_warrior.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\feldagor.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\forsuth.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\guildmaster.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\g_adventurer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\human_guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\human_guard_archer.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\human_guard_sword.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\human_guard_towerarcher.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\james.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\lighthouse_keeper.as", + "success": false, + "messages": [ + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::OnRepeatTimer()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 52, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 56, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 57, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 57, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 57, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 57, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 59, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::OnSpawn()"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 91, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::get_yaw()"}, + {"row": 93, "col": 12, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 96, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::say_hi()"}, + {"row": 98, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 100, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 102, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 104, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 106, "col": 16, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 110, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::face_speaker()"}, + {"row": 113, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 117, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::say_intro()"}, + {"row": 119, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 120, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 123, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 130, "col": 23, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 131, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 133, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::NEXT_CHAT(const string)'"}, + {"row": 136, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 137, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 142, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::say_jobs()"}, + {"row": 144, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 152, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::build_task_string()"}, + {"row": 159, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 164, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 169, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 174, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 179, "col": 9, "type": "ERROR", "message": "No matching symbol 'QUESTS_LEFT'"}, + {"row": 182, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 186, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::say_spider()"}, + {"row": 188, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 189, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 191, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 192, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 195, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 196, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 198, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 200, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 202, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 204, "col": 16, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 205, "col": 26, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 207, "col": 16, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 210, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 211, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 211, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 211, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 211, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 213, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 216, "col": 4, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 218, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 219, "col": 17, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 231, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 232, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 235, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::say_grave()"}, + {"row": 237, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 238, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 240, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 241, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 242, "col": 4, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 245, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 246, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 248, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 250, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 252, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 254, "col": 16, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 255, "col": 26, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 257, "col": 16, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 260, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 261, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 261, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 261, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 261, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 263, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 265, "col": 4, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 268, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 269, "col": 17, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 285, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::say_crystal()"}, + {"row": 287, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 288, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 290, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 291, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 294, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 295, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 297, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 299, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 301, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 303, "col": 16, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 304, "col": 26, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 306, "col": 16, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 310, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 310, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 310, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 310, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 312, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 314, "col": 4, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 318, "col": 17, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 333, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::say_food()"}, + {"row": 335, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 336, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 338, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 339, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 342, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 343, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 345, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 347, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 349, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 351, "col": 16, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 352, "col": 26, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 354, "col": 16, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 357, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 358, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 358, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 358, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 358, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 360, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 362, "col": 4, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 364, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 365, "col": 17, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 378, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::accept_quest()"}, + {"row": 382, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 383, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 385, "col": 3, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 388, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 389, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 393, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 394, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 399, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 400, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 404, "col": 17, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 405, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 411, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::chat_loop()"}, + {"row": 416, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 418, "col": 5, "type": "ERROR", "message": "No matching symbol 'OpenMenu'"}, + {"row": 421, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 423, "col": 4, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 425, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 427, "col": 4, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 429, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 431, "col": 4, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 433, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 435, "col": 4, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 437, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 439, "col": 4, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 443, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::decline_quest()"}, + {"row": 446, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 447, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 448, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 449, "col": 3, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 453, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::game_menu_getoptions()"}, + {"row": 463, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 463, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 464, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 464, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 465, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 465, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 466, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 466, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 476, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 476, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 477, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 477, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 478, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 478, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 479, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 479, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 484, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 484, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 485, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 485, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 486, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 486, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 491, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 491, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 492, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 492, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 493, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 493, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 497, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 497, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 498, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 498, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 499, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 499, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 503, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 503, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 504, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 504, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 505, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 505, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 509, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 509, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 510, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 510, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 511, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 511, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 513, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 513, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 514, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 514, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 515, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 515, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 522, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 522, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 526, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 526, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 530, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 530, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 534, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 534, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 536, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 536, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 537, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 537, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 538, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 538, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 539, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 539, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 540, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 540, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 550, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 550, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 551, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 551, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 552, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 552, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 562, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 562, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 563, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 563, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 564, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 564, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 571, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 571, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 572, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 572, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 573, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 573, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 577, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::reward_spider()"}, + {"row": 579, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 580, "col": 3, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 582, "col": 25, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 583, "col": 3, "type": "ERROR", "message": "No matching signatures to 'LighthouseKeeper::offer_basic_reward(string)'"}, + {"row": 583, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 583, "col": 3, "type": "INFO", "message": "void MS::LighthouseKeeper::offer_basic_reward()"}, + {"row": 585, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 588, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 592, "col": 20, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 597, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 599, "col": 4, "type": "ERROR", "message": "No matching signatures to 'LighthouseKeeper::offer_basic_reward(string)'"}, + {"row": 599, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 599, "col": 4, "type": "INFO", "message": "void MS::LighthouseKeeper::offer_basic_reward()"}, + {"row": 601, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 602, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 603, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 606, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::reward_grave()"}, + {"row": 608, "col": 25, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 609, "col": 3, "type": "ERROR", "message": "No matching signatures to 'LighthouseKeeper::offer_basic_reward(string)'"}, + {"row": 609, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 609, "col": 3, "type": "INFO", "message": "void MS::LighthouseKeeper::offer_basic_reward()"}, + {"row": 610, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 611, "col": 3, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 613, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 614, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 615, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 618, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::reward_crystal()"}, + {"row": 620, "col": 25, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 621, "col": 3, "type": "ERROR", "message": "No matching signatures to 'LighthouseKeeper::offer_basic_reward(string)'"}, + {"row": 621, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 621, "col": 3, "type": "INFO", "message": "void MS::LighthouseKeeper::offer_basic_reward()"}, + {"row": 623, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 624, "col": 3, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 626, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 627, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 628, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 631, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::reward_food()"}, + {"row": 633, "col": 25, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 634, "col": 3, "type": "ERROR", "message": "No matching signatures to 'LighthouseKeeper::offer_basic_reward(string)'"}, + {"row": 634, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 634, "col": 3, "type": "INFO", "message": "void MS::LighthouseKeeper::offer_basic_reward()"}, + {"row": 636, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 637, "col": 3, "type": "ERROR", "message": "No matching symbol 'convo_anim'"}, + {"row": 639, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 640, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 641, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 649, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::clear_quest()"}, + {"row": 651, "col": 41, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 659, "col": 25, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 670, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 671, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 672, "col": 3, "type": "ERROR", "message": "No matching symbol 'bchat_mouth_move'"}, + {"row": 676, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::target_busy()"}, + {"row": 678, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 679, "col": 41, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 682, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 686, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 690, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 694, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 698, "col": 3, "type": "ERROR", "message": "No matching symbol 'OpenMenu'"}, + {"row": 711, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::offer_basic_reward()"}, + {"row": 713, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 714, "col": 23, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 714, "col": 23, "type": "INFO", "message": "Candidates are:"}, + {"row": 714, "col": 23, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 714, "col": 23, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 718, "col": 2, "type": "INFO", "message": "Compiling void LighthouseKeeper::say_forest()"}, + {"row": 720, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 721, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 723, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 725, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 727, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 729, "col": 16, "type": "ERROR", "message": "No matching symbol 'FACE_TARG'"}, + {"row": 74, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::OnSpawn()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::game_menu_getoptions()"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 89, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 104, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 13, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 12, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::face_speaker()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 148, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::chat_loop()"}, + {"row": 151, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'npc_chat_done'"}, + {"row": 164, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 166, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 168, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 169, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 170, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 179, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 181, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 182, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 183, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 192, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 194, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 195, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 196, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 205, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 207, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 208, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 209, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 218, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 220, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 221, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 222, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 231, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 234, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 235, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 244, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 246, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 247, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 248, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 257, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 259, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 260, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 261, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 270, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 272, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 273, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 274, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 283, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 285, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope"}, + {"row": 286, "col": 11, "type": "WARN", "message": "Variable 'L_ANIM' hides another variable of same name in outer scope"}, + {"row": 287, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 300, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_ANIM'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 307, "col": 11, "type": "WARN", "message": "Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope"}, + {"row": 307, "col": 26, "type": "ERROR", "message": "No matching symbol 'CHAT_DELAY'"}, + {"row": 309, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 313, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_EVENT'"}, + {"row": 315, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_CHAT_EVENT'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 321, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_SOUND'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 29, "type": "ERROR", "message": "No matching symbol 'L_CHAT_SOUND'"}, + {"row": 326, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 328, "col": 9, "type": "ERROR", "message": "No matching symbol 'NO_MOUTH_MOVE'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)'"}, + {"row": 330, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 330, "col": 4, "type": "INFO", "message": "void MS::BaseChat::bchat_auto_mouth_move()"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::L_CHAT_DELAY(const string)'"}, + {"row": 336, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_move()"}, + {"row": 341, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 345, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 346, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 350, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 351, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 355, "col": 10, "type": "ERROR", "message": "'M_TIME' is already declared"}, + {"row": 356, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 359, "col": 3, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 360, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 361, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type ''"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_auto_mouth_move()"}, + {"row": 366, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 372, "col": 30, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 373, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 375, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 381, "col": 4, "type": "ERROR", "message": "No matching symbol 'Say'"}, + {"row": 383, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 385, "col": 4, "type": "ERROR", "message": "No matching signatures to 'string::M_TIME(const string)'"}, + {"row": 389, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_mouth_twitch()"}, + {"row": 392, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 393, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 396, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_close_mouth()"}, + {"row": 398, "col": 8, "type": "ERROR", "message": "No matching symbol 'NO_CLOSE_MOUTH'"}, + {"row": 399, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 402, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::bchat_open_mouth()"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 407, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::give_runaround()"}, + {"row": 409, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 410, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 411, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 420, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 422, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 429, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 431, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 433, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 439, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 441, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 443, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 444, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 446, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 453, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 455, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 462, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 464, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 471, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 473, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 483, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 485, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 493, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 495, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 504, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 506, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 508, "col": 10, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 513, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 514, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 515, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 523, "col": 4, "type": "ERROR", "message": "No matching symbol 'npcatk_suspend_ai'"}, + {"row": 527, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::rquest_rub_my_back_first()"}, + {"row": 529, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 530, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 533, "col": 2, "type": "INFO", "message": "Compiling void BaseChat::convo_anim()"}, + {"row": 535, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 536, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 537, "col": 21, "type": "ERROR", "message": "No matching signatures to 'RandomInt(const int, string)'"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Candidates are:"}, + {"row": 537, "col": 21, "type": "INFO", "message": "int RandomInt(int, int)"}, + {"row": 537, "col": 21, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 538, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void Debug::bd_debug()"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array()"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array_elements()"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\script_assistant.as", + "success": false, + "messages": [ + {"row": 506, "col": 39, "type": "ERROR", "message": "Non-terminated string literal"}, + {"row": 512, "col": 1, "type": "ERROR", "message": "Unexpected end of file"}, + {"row": 6, "col": 1, "type": "INFO", "message": "While parsing namespace"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\stalker.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\storage.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\tao.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\thief.as", + "success": false, + "messages": [ + {"row": 173, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\tutorial_npc_req_item.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\tutorial_prisoner.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\\wall_of_text_guy.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void WallOfTextGuy::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void WallOfTextGuy::game_menu_getoptions()"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void WallOfTextGuy::do_text2()"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 41, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 43, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 44, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 44, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 53, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 53, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 54, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 54, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void WallOfTextGuy::do_text()"}, + {"row": 66, "col": 22, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void WallOfTextGuy::CB_TEST1()"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void WallOfTextGuy::CB_TEST2()"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oc\\bandit_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oc\\captians_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oc\\iceorcs_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oc\\ron.as", + "success": false, + "messages": [ + {"row": 50, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oc\\shunk_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oceancrossing\\game_master.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::OnSpawn()"}, + {"row": 10, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::game_triggered()"}, + {"row": 17, "col": 20, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 18, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 19, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 21, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 22, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 23, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 27, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 29, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 30, "col": 5, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 34, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 36, "col": 6, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 42, "col": 7, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 43, "col": 7, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 44, "col": 7, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 45, "col": 7, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 52, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 53, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::player_joined()"}, + {"row": 59, "col": 8, "type": "ERROR", "message": "No matching symbol 'LOCK_TO_NIGHT'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "No matching symbol 'LOCK_SKY'"}, + {"row": 65, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 69, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::game_think()"}, + {"row": 71, "col": 18, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 72, "col": 18, "type": "ERROR", "message": "No matching symbol 'RUN_NUM'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 76, "col": 18, "type": "ERROR", "message": "No matching signatures to 'sin(string)'"}, + {"row": 76, "col": 18, "type": "INFO", "message": "Candidates are:"}, + {"row": 76, "col": 18, "type": "INFO", "message": "float sin(float)"}, + {"row": 76, "col": 18, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'RUN_NUM'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\\base_old_helena_npc.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseOldHelenaNpc::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseOldHelenaNpc::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\\dorfgan.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\\dr_who1.as", + "success": false, + "messages": [ + {"row": 50, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\\erkold.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\\game_master.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::old_helena_warboss_died()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'gold_spew'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 12, "col": 30, "type": "ERROR", "message": "No matching symbol 'G_WARBOSS_ORIGIN'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\\genstore.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\\harry.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\\map_startup.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling MapStartup::MapStartup()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\\serrold.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\\track_gaxe_pickup.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 12, "type": "ERROR", "message": "Instead found '('"}, + {"row": 86, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orcplace2_beta\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\abomination_bone_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\bgoblin_archer_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\boar2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\djinn_ogre_fire_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\game_master.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_orcfor_sham_start()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 11, "col": 24, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\goblin_archer_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\goblin_base.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\goblin_pouncer_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\goblin_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\hgoblin_lshaman_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\orc_archer_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\orc_demonic_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\orc_flayer_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\orc_fshaman_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\orc_poisoner.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\orc_pshaman_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\orc_sniper_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\orc_summoner.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void OrcSummoner::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void OrcSummoner::ext_players_r_here()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void OrcSummoner::summon_fail()"}, + {"row": 41, "col": 22, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 42, "col": 23, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 43, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 43, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 43, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 43, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 47, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 47, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 47, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 47, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 49, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 50, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void OrcSummoner::ext_me_die()"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'DoDamage'"}, + {"row": 59, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void OrcSummoner::fade_out()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\orc_summoner_slaughter_cl.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void OrcSummonerSlaughterCl::OnRepeatTimer()"}, + {"row": 20, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 20, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void OrcSummonerSlaughterCl::client_activate()"}, + {"row": 36, "col": 30, "type": "ERROR", "message": "Expected expression value"}, + {"row": 36, "col": 30, "type": "ERROR", "message": "Instead found ''"}, + {"row": 40, "col": 35, "type": "ERROR", "message": "Expected expression value"}, + {"row": 40, "col": 35, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void OrcSummonerSlaughterCl::update_orc_corpse()"}, + {"row": 51, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 54, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void OrcSummonerSlaughterCl::collide_corpse()"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 71, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void OrcSummonerSlaughterCl::do_fling()"}, + {"row": 82, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void OrcSummonerSlaughterCl::remove_fx()"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 91, "col": 2, "type": "INFO", "message": "Compiling void OrcSummonerSlaughterCl::setup_orc_corpse()"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 96, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 100, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 102, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 103, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 106, "col": 2, "type": "INFO", "message": "Compiling void OrcSummonerSlaughterCl::setup_blood_spray()"}, + {"row": 118, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 118, "col": 79, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\orc_warrior_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\sgoblin_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\skeleton_archer_fire2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\test.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void Test::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\tiers1.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\tiers2.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\\vgoblin_archer_sa.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\base_item_detect.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void BaseItemDetect::OnRepeatTimer()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 20, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_PLAYERS'"}, + {"row": 21, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void BaseItemDetect::OnSpawn()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveSpeed'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void BaseItemDetect::post_spawn()"}, + {"row": 50, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void BaseItemDetect::reset_pos()"}, + {"row": 56, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 57, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void BaseItemDetect::check_near()"}, + {"row": 63, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 64, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 65, "col": 9, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'item_detected'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\base_keyhole.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\beta_date.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\boom_block.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void BoomBlock::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void BoomBlock::get_home_loc()"}, + {"row": 28, "col": 34, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void BoomBlock::do_boom()"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void BoomBlock::do_bob()"}, + {"row": 45, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void BoomBlock::reset_block()"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetVelocity'"}, + {"row": 51, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void BoomBlock::bury_block()"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 59, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\burn_1000.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Burn1000::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\cannon_manned.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void CannonManned::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void CannonManned::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\cannon_manned_fixed.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void CannonMannedFixed::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void CannonMannedFixed::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\catapault.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void Catapault::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void Catapault::OneBall()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching signatures to 'Catapault::Catapaults(const int)'"}, + {"row": 27, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 27, "col": 3, "type": "INFO", "message": "void MS::Catapault::Catapaults()"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void Catapault::FiveBalls()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching signatures to 'Catapault::Catapaults(const int)'"}, + {"row": 32, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 32, "col": 3, "type": "INFO", "message": "void MS::Catapault::Catapaults()"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void Catapault::Catapaults()"}, + {"row": 37, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void Catapault::FireCatapault()"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void Catapault::CatapaultShoot()"}, + {"row": 60, "col": 60, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 60, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\conflict_test.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\const_test.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling ConstTest::ConstTest()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void ConstTest::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void ConstTest::say_const()"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void ConstTest::ext_change_const()"}, + {"row": 32, "col": 57, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 32, "col": 57, "type": "ERROR", "message": "Instead found identifier 'scriptvar'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\const_test_inc.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\end_siege.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void EndSiege::OnSpawn()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\grave_watcher.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void GraveWatcher::item_detected()"}, + {"row": 21, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'OpenMenu'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void GraveWatcher::game_menu_getoptions()"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 34, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void GraveWatcher::statue_return()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 44, "col": 22, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void GraveWatcher::player_opted_out()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void GraveWatcher::payment_failed()"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void GraveWatcher::remove_me()"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void BaseItemDetect::OnRepeatTimer()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 20, "col": 17, "type": "ERROR", "message": "No matching symbol 'L_PLAYERS'"}, + {"row": 21, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void BaseItemDetect::OnSpawn()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveSpeed'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 48, "col": 2, "type": "INFO", "message": "Compiling void BaseItemDetect::post_spawn()"}, + {"row": 50, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void BaseItemDetect::reset_pos()"}, + {"row": 56, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 57, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void BaseItemDetect::check_near()"}, + {"row": 63, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 64, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 65, "col": 9, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'item_detected'"}, + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void Debug::bd_debug()"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array()"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array_elements()"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\hp_trigger_1000.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void HpTriggerBase::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\hp_trigger_200.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void HpTriggerBase::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\hp_trigger_300.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void HpTriggerBase::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\hp_trigger_base.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void HpTriggerBase::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\ice_wall.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void IceWall::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void IceWall::activate_wall()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 19, "col": 47, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 19, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 22, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void IceWall::spin_loop()"}, + {"row": 30, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void IceWall::deactivate_wall()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void IceWall::hide_wall()"}, + {"row": 48, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\idle_lure.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void IdleLure::OnRepeatTimer()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void IdleLure::OnSpawn()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void IdleLure::game_postspawn()"}, + {"row": 35, "col": 13, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 38, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 39, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 40, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void IdleLure::parse_params()"}, + {"row": 48, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void Debug::bd_debug()"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array()"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array_elements()"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole.as", + "success": false, + "messages": [ + {"row": 47, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_blue.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void KeyholeBlue::key_used()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_brass.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_crystal.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_forged.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void KeyholeForged::OnSpawn()"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void KeyholeForged::game_menu_getoptions()"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 33, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 34, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 34, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void KeyholeForged::key_used()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'ReceiveOffer'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_gold.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_green.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_ice.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_red.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_return.as", + "success": false, + "messages": [ + {"row": 49, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_rusty.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_sewer.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void KeyholeSewer::key_used()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_skeleton.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_storageroomkey.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_summon.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void KeyholeSummon::OnSpawn()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\keyhole_treasury.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\kill_all_monsters.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void KillAllMonsters::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\lure.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\make_glow.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\make_mons_dumb.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void MakeMonsDumb::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\make_mons_smart.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void MakeMonsSmart::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\metal_cave.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void MetalCave::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void MetalCave::refresh_cl_fx()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void MetalCave::ext_turn()"}, + {"row": 40, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void MetalCave::ext_clearout()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 52, "col": 17, "type": "ERROR", "message": "No matching symbol 'PLAYER_LIST'"}, + {"row": 53, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void MetalCave::tele_players()"}, + {"row": 61, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 62, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\metal_cave_cl.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void MetalCaveCl::client_activate()"}, + {"row": 32, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 32, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void MetalCaveCl::game_prerender()"}, + {"row": 79, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 79, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 83, "col": 2, "type": "INFO", "message": "Compiling void MetalCaveCl::remove_light()"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\monster_lure.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\mons_hate_me.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\no_extra_exp.as", + "success": false, + "messages": [ + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void NoExtraExp::OnSpawn()"}, + {"row": 16, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\oyster_breakable.as", + "success": false, + "messages": [ + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void OysterBreakable::OnSpawn()"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void OysterBreakable::OnDamage(int)"}, + {"row": 39, "col": 8, "type": "ERROR", "message": "No matching symbol 'AM_BROKE'"}, + {"row": 41, "col": 21, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 42, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 46, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 48, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'float' available."}, + {"row": 53, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 55, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_RESIST1'"}, + {"row": 55, "col": 43, "type": "ERROR", "message": "No matching symbol 'SOUND_RESIST2'"}, + {"row": 55, "col": 58, "type": "ERROR", "message": "No matching symbol 'SOUND_RESIST3'"}, + {"row": 56, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 58, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 60, "col": 8, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 62, "col": 30, "type": "ERROR", "message": "No matching symbol 'SOUND_BREAK'"}, + {"row": 62, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 63, "col": 5, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 64, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 65, "col": 5, "type": "ERROR", "message": "No matching symbol 'AM_BROKE'"}, + {"row": 66, "col": 5, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 71, "col": 29, "type": "ERROR", "message": "No matching symbol 'SOUND_STRUCK1'"}, + {"row": 71, "col": 44, "type": "ERROR", "message": "No matching symbol 'SOUND_STRUCK2'"}, + {"row": 71, "col": 59, "type": "ERROR", "message": "No matching symbol 'SOUND_STRUCK3'"}, + {"row": 72, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 73, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 74, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetDamage'"}, + {"row": 75, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void OysterBreakable::check_type()"}, + {"row": 82, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void OysterBreakable::remove_me()"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void Debug::bd_debug()"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array()"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array_elements()"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\qitem.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void Qitem::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\qitem_barrel.as", + "success": false, + "messages": [ + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::OnSpawn()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::game_postspawn()"}, + {"row": 54, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 55, "col": 23, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching signatures to 'QitemBarrel::setup_barrel(string)'"}, + {"row": 56, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 56, "col": 3, "type": "INFO", "message": "void MS::QitemBarrel::setup_barrel()"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::game_dynamically_created()"}, + {"row": 62, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching signatures to 'QitemBarrel::setup_barrel(string)'"}, + {"row": 63, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 63, "col": 3, "type": "INFO", "message": "void MS::QitemBarrel::setup_barrel()"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::setup_barrel()"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 70, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 71, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 72, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 73, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 75, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 77, "col": 5, "type": "ERROR", "message": "No matching symbol 'BARREL_REPEATS'"}, + {"row": 83, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 84, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 95, "col": 9, "type": "ERROR", "message": "No matching symbol 'L_TYPE_HANDLED'"}, + {"row": 97, "col": 4, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::update_name()"}, + {"row": 107, "col": 13, "type": "ERROR", "message": "Can't implicitly convert from 'string' to 'const int'."}, + {"row": 107, "col": 13, "type": "ERROR", "message": "No conversion from 'string' to 'const int' available."}, + {"row": 109, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 118, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::game_menu_getoptions()"}, + {"row": 124, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 124, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 128, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 128, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 129, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 129, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 139, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 139, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 140, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 140, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 144, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::add_items()"}, + {"row": 161, "col": 39, "type": "ERROR", "message": "Expected expression value"}, + {"row": 161, "col": 39, "type": "ERROR", "message": "Instead found ''"}, + {"row": 180, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::ext_setbody()"}, + {"row": 182, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 183, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 186, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::do_event()"}, + {"row": 188, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 190, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 194, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 198, "col": 8, "type": "ERROR", "message": "No matching symbol 'BARREL_REPEATS'"}, + {"row": 200, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to math type available."}, + {"row": 203, "col": 5, "type": "ERROR", "message": "No matching signatures to 'QitemBarrel::add_items(const int, const int)'"}, + {"row": 203, "col": 5, "type": "INFO", "message": "Candidates are:"}, + {"row": 203, "col": 5, "type": "INFO", "message": "void MS::QitemBarrel::add_items()"}, + {"row": 208, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 210, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 212, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 217, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::do_explode()"}, + {"row": 219, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 220, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 221, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 224, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::do_explode2()"}, + {"row": 226, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 227, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_EXPLODE'"}, + {"row": 227, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 228, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 229, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 230, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 231, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 234, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::push_loop_dodamage()"}, + {"row": 238, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 238, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 239, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 239, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 242, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::remove_me()"}, + {"row": 244, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 245, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 246, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 247, "col": 3, "type": "ERROR", "message": "No matching symbol 'DoDamage'"}, + {"row": 250, "col": 2, "type": "INFO", "message": "Compiling void QitemBarrel::set_scale()"}, + {"row": 252, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 253, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 254, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetEntityWidth'"}, + {"row": 255, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetEntityHeight'"}, + {"row": 256, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 257, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 258, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 259, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void Debug::bd_debug()"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array()"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 109, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 113, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void Debug::dbg_dump_array_elements()"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 127, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 131, "col": 46, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\quest_item.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void QuestItem::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\rock.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Rock::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\sfx_orbiting_light.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void SfxOrbitingLight::OnRepeatTimer()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void SfxOrbitingLight::OnSpawn()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching signatures to 'EmitSound(const int, const int, const string)'"}, + {"row": 31, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 31, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int)"}, + {"row": 31, "col": 3, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 31, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in)"}, + {"row": 31, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in, float)"}, + {"row": 31, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void SfxOrbitingLight::refresh_sound()"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching signatures to 'EmitSound(const int, const int, const string)'"}, + {"row": 37, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 37, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int)"}, + {"row": 37, "col": 3, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 37, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in)"}, + {"row": 37, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in, float)"}, + {"row": 37, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void SfxOrbitingLight::refresh_sound2()"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching signatures to 'EmitSound(const int, const int, const string)'"}, + {"row": 44, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 44, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int)"}, + {"row": 44, "col": 3, "type": "INFO", "message": "Rejected due to not enough parameters"}, + {"row": 44, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in)"}, + {"row": 44, "col": 3, "type": "INFO", "message": "void EmitSound(CBaseEntity@, const string&in, float)"}, + {"row": 44, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\sfx_orbiting_light_cl.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void SfxOrbitingLightCl::client_activate()"}, + {"row": 22, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 23, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 24, "col": 15, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 25, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 26, "col": 16, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 27, "col": 18, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCallback'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void SfxOrbitingLightCl::game_prerender()"}, + {"row": 46, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 46, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 50, "col": 2, "type": "INFO", "message": "Compiling void SfxOrbitingLightCl::update_sprite()"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void SfxOrbitingLightCl::end_fx()"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling void SfxOrbitingLightCl::remove_fx()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void SfxOrbitingLightCl::setup_sprite()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\sorc_telepoint.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint::OnSpawn()"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint::set_point()"}, + {"row": 21, "col": 12, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 21, "col": 12, "type": "ERROR", "message": "Instead found identifier '_0'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void SorcTelepoint::remove_me()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\spawn_point.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void SpawnPoint::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SpawnPoint::set_spawn_point()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 18, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SpawnPoint::remove_me()"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\summon_point1.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void SummonPoint1::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SummonPoint1::summon_used()"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\totalhp_trigger.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TotalhpTrigger::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\touch_test.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void TouchTest::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\trigger_avghp.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerAvghp::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\trigger_base.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerBase::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\trigger_burn.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerBase::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\trigger_cannon.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerCannon::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\trigger_damaged.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerDamaged::OnTakeDamage(CBaseEntity@, CBaseEntity@, int, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerDamaged::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerDamaged::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\trigger_if_evil.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerIfEvil::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\trigger_poison.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerBase::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\trigger_web.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Web::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\undamael_break.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void UndamaelBreak::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\undamael_hurt.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void UndamaelHurt::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\undamael_pitedge.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void UndamaelPitedge::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\\web.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Web::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/outpost\\final_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/outpost\\super.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\\corrupted_reaver.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\\phlame.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\\phlame_bird.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\\phlame_bird_cl.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void PhlameBirdCl::client_activate()"}, + {"row": 15, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 16, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::FX_DURATION(const string)'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void PhlameBirdCl::fire_breath_loop()"}, + {"row": 26, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 26, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 27, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 27, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 28, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 28, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 29, "col": 72, "type": "ERROR", "message": "Expected expression value"}, + {"row": 29, "col": 72, "type": "ERROR", "message": "Instead found ''"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void PhlameBirdCl::end_fx()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void PhlameBirdCl::remove_fx()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void PhlameBirdCl::update_fire_cloud()"}, + {"row": 46, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void PhlameBirdCl::setup_fire_cloud()"}, + {"row": 72, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 72, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\\phlame_cl.as", + "success": false, + "messages": [ + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::OnRepeatTimer()"}, + {"row": 38, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 38, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 39, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 39, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 42, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::OnRepeatTimer_1()"}, + {"row": 48, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 48, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::client_activate()"}, + {"row": 68, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 68, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::start_staff_sprite()"}, + {"row": 77, "col": 70, "type": "ERROR", "message": "Expected expression value"}, + {"row": 77, "col": 70, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::end_fx()"}, + {"row": 82, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 85, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 88, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::remove_fx()"}, + {"row": 95, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 98, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::game_prerender()"}, + {"row": 101, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 101, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::eye_beam_on()"}, + {"row": 121, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 132, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::update_eye_sprite()"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 136, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 140, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 143, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 144, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 146, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 149, "col": 4, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 150, "col": 17, "type": "ERROR", "message": "No conversion from 'string' to 'double' available."}, + {"row": 152, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 153, "col": 5, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 158, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::eye_beam_contact()"}, + {"row": 160, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 161, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 164, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::fire_breath_on()"}, + {"row": 166, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 176, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::fire_breath_loop()"}, + {"row": 180, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 180, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 186, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::repulse_attack()"}, + {"row": 188, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 188, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 194, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::do_transform()"}, + {"row": 197, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 202, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::transform_funnel_loop()"}, + {"row": 204, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 205, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 213, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::transform_funnel_make_sprite()"}, + {"row": 216, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 216, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 221, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::transform_finalize()"}, + {"row": 225, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 226, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 227, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 230, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::transform_return()"}, + {"row": 234, "col": 24, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 235, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 236, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 237, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 238, "col": 3, "type": "ERROR", "message": "No matching symbol 'EmitSound3D'"}, + {"row": 241, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::setup_bird_sprite()"}, + {"row": 243, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 244, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 245, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 246, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 247, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 248, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 249, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 250, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 251, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 254, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::update_funnel_sprite()"}, + {"row": 274, "col": 34, "type": "ERROR", "message": "Expected expression value"}, + {"row": 274, "col": 34, "type": "ERROR", "message": "Instead found ''"}, + {"row": 278, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::setup_funnel_sprite()"}, + {"row": 280, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 281, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 282, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 283, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 284, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 285, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 286, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 287, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 288, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 289, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 290, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 293, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::update_repulse_burst()"}, + {"row": 296, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 298, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 299, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 302, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::setup_repulse_burst()"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 305, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 306, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 307, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 308, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 309, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 310, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 311, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 312, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 313, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 314, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 315, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 316, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 317, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 318, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 321, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::update_staff_sprite()"}, + {"row": 324, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 327, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::setup_staff_sprite()"}, + {"row": 329, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 330, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 331, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 332, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 333, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 334, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 335, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 336, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 337, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 340, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::setup_eye_sprite()"}, + {"row": 342, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 343, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 344, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 345, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 346, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 347, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 348, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 349, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 350, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 351, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 352, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 355, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::setup_beam_contact()"}, + {"row": 364, "col": 79, "type": "ERROR", "message": "Expected expression value"}, + {"row": 364, "col": 79, "type": "ERROR", "message": "Instead found ''"}, + {"row": 368, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::update_fire_cloud()"}, + {"row": 371, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 373, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 374, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 377, "col": 2, "type": "INFO", "message": "Compiling void PhlameCl::setup_fire_cloud()"}, + {"row": 397, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 397, "col": 42, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phobia\\betor_ally.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phobia\\game_master.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_phobia_tele_bandits()"}, + {"row": 10, "col": 22, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 11, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 11, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 11, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 11, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 13, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 13, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 13, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 13, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "'BANDIT_ID' is already declared"}, + {"row": 16, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 16, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 16, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 16, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 18, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 18, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 18, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 18, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "'BANDIT_ID' is already declared"}, + {"row": 21, "col": 8, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(string)'"}, + {"row": 21, "col": 8, "type": "INFO", "message": "Candidates are:"}, + {"row": 21, "col": 8, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 21, "col": 8, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 23, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 23, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 23, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 23, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_phobia_bandit_lights()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phobia\\ralion_ally.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phobia\\skelr_ally.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\body.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void Body::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void Body::game_dynamically_created()"}, + {"row": 34, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void Body::do_latch()"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void Body::ext_bodyparts()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void Body::ext_skin()"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\client\\halos.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void Halos::game_prerender()"}, + {"row": 23, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 29, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void Halos::cl_set_halo()"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 42, "col": 8, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 47, "col": 35, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 48, "col": 8, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 53, "col": 21, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 58, "col": 8, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 63, "col": 21, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 64, "col": 8, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 66, "col": 5, "type": "ERROR", "message": "No matching symbol 'RemoveToken'"}, + {"row": 69, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 71, "col": 30, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 72, "col": 25, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 74, "col": 5, "type": "ERROR", "message": "No matching symbol 'RemoveToken'"}, + {"row": 75, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 80, "col": 11, "type": "ERROR", "message": "'L_HALO_TO_REMOVE' is already declared"}, + {"row": 81, "col": 25, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 83, "col": 5, "type": "ERROR", "message": "No matching symbol 'RemoveToken'"}, + {"row": 86, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void Halos::cl_track_halos()"}, + {"row": 102, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 102, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 114, "col": 2, "type": "INFO", "message": "Compiling void Halos::setup_cool()"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 117, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 118, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 119, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void Halos::setup_halo()"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 125, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 126, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\emote_idle.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\emote_no.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\emote_sit&stand.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\emote_yes.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\externals.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\health_bar.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_animation.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 11, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 13, "col": 17, "type": "ERROR", "message": "Expected identifier"}, + {"row": 13, "col": 17, "type": "ERROR", "message": "Instead found '('"}, + {"row": 283, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_cl_effects.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 13, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 13, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 15, "col": 17, "type": "ERROR", "message": "Expected identifier"}, + {"row": 15, "col": 17, "type": "ERROR", "message": "Instead found '('"}, + {"row": 94, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_cl_effects_levelup.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsLevelup::OnRepeatTimer()"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsLevelup::client_activate()"}, + {"row": 30, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 30, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsLevelup::end_effect()"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsLevelup::levelup_createsprite()"}, + {"row": 55, "col": 56, "type": "ERROR", "message": "Expected expression value"}, + {"row": 55, "col": 56, "type": "ERROR", "message": "Instead found ''"}, + {"row": 56, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 56, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 58, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 58, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 60, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 62, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 62, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 64, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 66, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 66, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsLevelup::setup_levelup_sprite()"}, + {"row": 74, "col": 24, "type": "ERROR", "message": "No matching signatures to 'Vector3(string, string, const int)'"}, + {"row": 74, "col": 24, "type": "INFO", "message": "Candidates are:"}, + {"row": 74, "col": 24, "type": "INFO", "message": "Vector3::Vector3()"}, + {"row": 74, "col": 24, "type": "INFO", "message": "Vector3::Vector3(float, float, float)"}, + {"row": 74, "col": 24, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 74, "col": 24, "type": "INFO", "message": "Vector3::Vector3(const Vector3&in)"}, + {"row": 85, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 86, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_cl_effects_special.as", + "success": false, + "messages": [ + {"row": 94, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 94, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 96, "col": 24, "type": "ERROR", "message": "Expected identifier"}, + {"row": 96, "col": 24, "type": "ERROR", "message": "Instead found '('"}, + {"row": 1555, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_cl_effects_water.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 9, "col": 13, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 13, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 11, "col": 22, "type": "ERROR", "message": "Expected identifier"}, + {"row": 11, "col": 22, "type": "ERROR", "message": "Instead found '('"}, + {"row": 76, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_cl_effects_weather.as", + "success": false, + "messages": [ + {"row": 61, "col": 2, "type": "INFO", "message": "Compiling PlayerClEffectsWeather::PlayerClEffectsWeather()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 136, "col": 23, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 140, "col": 28, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 154, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::OnRepeatTimer()"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 157, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 159, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 164, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 166, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 170, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 173, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 175, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 178, "col": 10, "type": "ERROR", "message": "No matching symbol 'DID_SKY_CHECK'"}, + {"row": 182, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 184, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 188, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 197, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_force_change()"}, + {"row": 199, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 204, "col": 3, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_clear(const string)'"}, + {"row": 204, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 204, "col": 3, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_clear()"}, + {"row": 205, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 206, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 209, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_force_change2()"}, + {"row": 211, "col": 3, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_finalize(string)'"}, + {"row": 211, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 211, "col": 3, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_finalize()"}, + {"row": 214, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_change()"}, + {"row": 216, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 219, "col": 11, "type": "WARN", "message": "Variable 'L_WEATHER' hides another variable of same name in outer scope"}, + {"row": 223, "col": 19, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 232, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_find_dest_fog()"}, + {"row": 236, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)'"}, + {"row": 236, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 236, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 240, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)'"}, + {"row": 240, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 240, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 244, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)'"}, + {"row": 244, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 244, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 248, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)'"}, + {"row": 248, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 248, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 252, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)'"}, + {"row": 252, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 252, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 256, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)'"}, + {"row": 256, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 256, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 260, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)'"}, + {"row": 260, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 260, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 264, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(string, const double, const int, const int, const int)'"}, + {"row": 264, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 264, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 268, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)'"}, + {"row": 268, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 268, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 272, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)'"}, + {"row": 272, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 272, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 277, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)'"}, + {"row": 277, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 277, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 281, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_clear()"}, + {"row": 285, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 290, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 295, "col": 8, "type": "ERROR", "message": "No matching symbol 'DO_SPIN_DOWN'"}, + {"row": 302, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetSoundVolume'"}, + {"row": 313, "col": 23, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 319, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 323, "col": 8, "type": "ERROR", "message": "No matching symbol 'CLEAR_FOG'"}, + {"row": 325, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 326, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 327, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 328, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 329, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 336, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 340, "col": 8, "type": "ERROR", "message": "No matching symbol 'CLEAR_TINT'"}, + {"row": 342, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 346, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_spin_down_sound()"}, + {"row": 348, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 349, "col": 30, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 351, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 353, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetSoundVolume'"}, + {"row": 355, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 357, "col": 5, "type": "ERROR", "message": "No matching symbol 'SetSoundVolume'"}, + {"row": 360, "col": 30, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 362, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 364, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 366, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetSoundVolume'"}, + {"row": 368, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 370, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetSoundVolume'"}, + {"row": 374, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_dest_fog()"}, + {"row": 376, "col": 28, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 377, "col": 30, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 378, "col": 28, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 379, "col": 26, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 380, "col": 29, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 383, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_set_fog()"}, + {"row": 385, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 386, "col": 25, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 387, "col": 23, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 388, "col": 21, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 389, "col": 29, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 390, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 392, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 397, "col": 9, "type": "ERROR", "message": "No matching symbol 'DELAY_FOG'"}, + {"row": 399, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 401, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 402, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 403, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 404, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 407, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 411, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 416, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_start_transition()"}, + {"row": 418, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 420, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_force_change(string)'"}, + {"row": 420, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 420, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_force_change()"}, + {"row": 423, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 424, "col": 8, "type": "ERROR", "message": "No matching symbol 'TOD_IN_TRANSITION'"}, + {"row": 426, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_force_change(string)'"}, + {"row": 426, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 426, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_force_change()"}, + {"row": 429, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 430, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 434, "col": 29, "type": "ERROR", "message": "Can't implicitly convert from 'Vector3' to 'string&'."}, + {"row": 449, "col": 43, "type": "ERROR", "message": "No matching symbol 'SOUND_RAIN_START'"}, + {"row": 449, "col": 26, "type": "ERROR", "message": "No matching symbol 'WEATHER_CHANNEL'"}, + {"row": 449, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 450, "col": 29, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_COLOR'"}, + {"row": 451, "col": 31, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_DENSITY'"}, + {"row": 452, "col": 29, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_START'"}, + {"row": 453, "col": 27, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_END'"}, + {"row": 455, "col": 34, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_DROP_MAXRATE'"}, + {"row": 456, "col": 28, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_MAXVOL'"}, + {"row": 461, "col": 25, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_DAY'"}, + {"row": 465, "col": 25, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_DUSK'"}, + {"row": 469, "col": 25, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_NIGHT'"}, + {"row": 471, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 478, "col": 43, "type": "ERROR", "message": "No matching symbol 'SOUND_RAIN_START'"}, + {"row": 478, "col": 26, "type": "ERROR", "message": "No matching symbol 'WEATHER_CHANNEL'"}, + {"row": 478, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 479, "col": 29, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_COLOR'"}, + {"row": 480, "col": 31, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_DENSITY'"}, + {"row": 481, "col": 29, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_START'"}, + {"row": 482, "col": 27, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_END'"}, + {"row": 484, "col": 34, "type": "ERROR", "message": "No matching symbol 'WEATHER_STORM_DROP_MAXRATE'"}, + {"row": 485, "col": 28, "type": "ERROR", "message": "No matching symbol 'WEATHER_STORM_MAXVOL'"}, + {"row": 491, "col": 25, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_DAY'"}, + {"row": 495, "col": 25, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_DUSK'"}, + {"row": 499, "col": 25, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_NIGHT'"}, + {"row": 501, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 508, "col": 29, "type": "ERROR", "message": "No matching symbol 'WEATHER_SNOW_FOG_COLOR'"}, + {"row": 511, "col": 31, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 513, "col": 27, "type": "ERROR", "message": "No matching symbol 'WEATHER_SNOW_FOG_END'"}, + {"row": 517, "col": 24, "type": "ERROR", "message": "No matching symbol 'WEATHER_SNOW_TINT'"}, + {"row": 521, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 531, "col": 43, "type": "ERROR", "message": "No matching symbol 'SOUND_RAIN'"}, + {"row": 531, "col": 26, "type": "ERROR", "message": "No matching symbol 'WEATHER_CHANNEL'"}, + {"row": 531, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 534, "col": 8, "type": "ERROR", "message": "No matching symbol 'DEST_FOG_ON'"}, + {"row": 536, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 539, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 540, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 541, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 542, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 543, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 544, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 554, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_transition_loop()"}, + {"row": 577, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 577, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 578, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 578, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 579, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 579, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 586, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 586, "col": 49, "type": "ERROR", "message": "Instead found ''"}, + {"row": 593, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 593, "col": 49, "type": "ERROR", "message": "Instead found ''"}, + {"row": 609, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 609, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 610, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 610, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 611, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 611, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 616, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 616, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 620, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 620, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 624, "col": 49, "type": "ERROR", "message": "Expected expression value"}, + {"row": 624, "col": 49, "type": "ERROR", "message": "Instead found ''"}, + {"row": 628, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_finalize()"}, + {"row": 631, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 633, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 641, "col": 24, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_COLOR'"}, + {"row": 642, "col": 26, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_DENSITY'"}, + {"row": 643, "col": 24, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_START'"}, + {"row": 644, "col": 22, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_END'"}, + {"row": 646, "col": 29, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_DROP_MAXRATE'"}, + {"row": 647, "col": 23, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_MAXVOL'"}, + {"row": 655, "col": 55, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_MAXVOL'"}, + {"row": 655, "col": 43, "type": "ERROR", "message": "No matching symbol 'SOUND_RAIN'"}, + {"row": 655, "col": 26, "type": "ERROR", "message": "No matching symbol 'WEATHER_CHANNEL'"}, + {"row": 655, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 656, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetSoundVolume'"}, + {"row": 662, "col": 20, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_DAY'"}, + {"row": 666, "col": 20, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_DUSK'"}, + {"row": 670, "col": 20, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_NIGHT'"}, + {"row": 676, "col": 24, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_COLOR'"}, + {"row": 677, "col": 26, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_DENSITY'"}, + {"row": 678, "col": 24, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_START'"}, + {"row": 679, "col": 22, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_FOG_END'"}, + {"row": 681, "col": 29, "type": "ERROR", "message": "No matching symbol 'WEATHER_STORM_DROP_MAXRATE'"}, + {"row": 682, "col": 23, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_MAXVOL'"}, + {"row": 690, "col": 55, "type": "ERROR", "message": "No matching symbol 'WEATHER_STORM_MAXVOL'"}, + {"row": 690, "col": 43, "type": "ERROR", "message": "No matching symbol 'SOUND_RAIN'"}, + {"row": 690, "col": 26, "type": "ERROR", "message": "No matching symbol 'WEATHER_CHANNEL'"}, + {"row": 690, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 691, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetSoundVolume'"}, + {"row": 697, "col": 20, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_DAY'"}, + {"row": 701, "col": 20, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_DUSK'"}, + {"row": 705, "col": 20, "type": "ERROR", "message": "No matching symbol 'WEATHER_RAIN_TINT_NIGHT'"}, + {"row": 711, "col": 24, "type": "ERROR", "message": "No matching symbol 'WEATHER_SNOW_FOG_COLOR'"}, + {"row": 712, "col": 26, "type": "WARN", "message": "Float value truncated in implicit conversion to integer"}, + {"row": 714, "col": 22, "type": "ERROR", "message": "No matching symbol 'WEATHER_SNOW_FOG_END'"}, + {"row": 725, "col": 31, "type": "ERROR", "message": "No matching symbol 'FREQ_WEATHER_SNOW_SOUND'"}, + {"row": 745, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_set_fog(string, int&, int&, int&, int&)'"}, + {"row": 745, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 745, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_set_fog()"}, + {"row": 747, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 749, "col": 10, "type": "ERROR", "message": "No matching symbol 'DID_FOG_SETUP'"}, + {"row": 752, "col": 4, "type": "ERROR", "message": "No matching signatures to 'PlayerClEffectsWeather::weather_set_fog(string, int&, int&, int&, int&)'"}, + {"row": 752, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 752, "col": 4, "type": "INFO", "message": "void MS::PlayerClEffectsWeather::weather_set_fog()"}, + {"row": 754, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetEnvironment'"}, + {"row": 757, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_loop_start()"}, + {"row": 759, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 764, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_loop()"}, + {"row": 766, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 767, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 768, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 770, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 777, "col": 24, "type": "ERROR", "message": "No matching symbol 'NEXT_RAIN_SOUND'"}, + {"row": 779, "col": 5, "type": "ERROR", "message": "No matching symbol 'NEXT_RAIN_SOUND'"}, + {"row": 780, "col": 24, "type": "ERROR", "message": "No matching symbol 'FREQ_WEATHER_RAIN_SOUND'"}, + {"row": 780, "col": 5, "type": "ERROR", "message": "No matching symbol 'NEXT_RAIN_SOUND'"}, + {"row": 781, "col": 44, "type": "ERROR", "message": "No matching symbol 'SOUND_RAIN'"}, + {"row": 781, "col": 27, "type": "ERROR", "message": "No matching symbol 'WEATHER_CHANNEL'"}, + {"row": 781, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 784, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 786, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 789, "col": 24, "type": "ERROR", "message": "No matching symbol 'WEATHER_SNOW_RATE'"}, + {"row": 793, "col": 24, "type": "ERROR", "message": "No matching symbol 'NEXT_SNOW_SOUND'"}, + {"row": 795, "col": 5, "type": "ERROR", "message": "No matching symbol 'NEXT_SNOW_SOUND'"}, + {"row": 796, "col": 24, "type": "ERROR", "message": "No matching symbol 'FREQ_WEATHER_SNOW_SOUND'"}, + {"row": 796, "col": 5, "type": "ERROR", "message": "No matching symbol 'NEXT_SNOW_SOUND'"}, + {"row": 797, "col": 44, "type": "ERROR", "message": "No matching symbol 'SOUND_SNOW'"}, + {"row": 797, "col": 27, "type": "ERROR", "message": "No matching symbol 'WEATHER_CHANNEL'"}, + {"row": 797, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 802, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_make_rain()"}, + {"row": 804, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 804, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 805, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 805, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 806, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 806, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 810, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 810, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 814, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_make_snow()"}, + {"row": 816, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 816, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 817, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 817, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 818, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 818, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 822, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 822, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 826, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_check_sky()"}, + {"row": 829, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 829, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 831, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 831, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 832, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 832, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 836, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 836, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 838, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 838, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 855, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_rain_makesprite()"}, + {"row": 857, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 858, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 859, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 860, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 861, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 862, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 863, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 864, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 867, "col": 30, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 870, "col": 24, "type": "ERROR", "message": "No matching symbol 'WEATHER_WIND_DIR'"}, + {"row": 871, "col": 18, "type": "ERROR", "message": "No matching symbol 'WEATHER_WIND_DIR'"}, + {"row": 872, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 874, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 877, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_drop_splash_Water()"}, + {"row": 879, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 880, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 881, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 882, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 883, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 884, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 885, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 886, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 887, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 888, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 889, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 890, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 891, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 894, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_drop_splash()"}, + {"row": 896, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 897, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 898, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 899, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 900, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 901, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 906, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 909, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_create_drop_mist()"}, + {"row": 911, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 912, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 913, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 914, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 915, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 916, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 917, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 918, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 921, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_make_snowflake()"}, + {"row": 923, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 924, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 925, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 926, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 927, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 928, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 931, "col": 2, "type": "INFO", "message": "Compiling void PlayerClEffectsWeather::weather_snow_breath()"}, + {"row": 933, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 934, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 935, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 936, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 937, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 938, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 939, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 940, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_cl_effects_world.as", + "success": false, + "messages": [ + {"row": 94, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 94, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 96, "col": 24, "type": "ERROR", "message": "Expected identifier"}, + {"row": 96, "col": 24, "type": "ERROR", "message": "Instead found '('"}, + {"row": 1555, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_cl_main.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void PlayerClMain::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_conartist.as", + "success": false, + "messages": [ + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void PlayerConartist::client_activate()"}, + {"row": 23, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 23, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 33, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 33, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 49, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void PlayerConartist::game_prerender()"}, + {"row": 60, "col": 37, "type": "ERROR", "message": "Expected expression value"}, + {"row": 60, "col": 37, "type": "ERROR", "message": "Instead found ''"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void PlayerConartist::sprite_spoog()"}, + {"row": 66, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void PlayerConartist::end_fx_levelup()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 76, "col": 2, "type": "INFO", "message": "Compiling void PlayerConartist::levelup_createsprite()"}, + {"row": 91, "col": 55, "type": "ERROR", "message": "Expected expression value"}, + {"row": 91, "col": 55, "type": "ERROR", "message": "Instead found ''"}, + {"row": 96, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 96, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 98, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 98, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 100, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 100, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 102, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 104, "col": 41, "type": "ERROR", "message": "Expected expression value"}, + {"row": 104, "col": 41, "type": "ERROR", "message": "Instead found ''"}, + {"row": 106, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 106, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 110, "col": 2, "type": "INFO", "message": "Compiling void PlayerConartist::setup_levelup_sprite()"}, + {"row": 114, "col": 24, "type": "ERROR", "message": "No matching signatures to 'Vector3(string, string, const int)'"}, + {"row": 114, "col": 24, "type": "INFO", "message": "Candidates are:"}, + {"row": 114, "col": 24, "type": "INFO", "message": "Vector3::Vector3()"}, + {"row": 114, "col": 24, "type": "INFO", "message": "Vector3::Vector3(float, float, float)"}, + {"row": 114, "col": 24, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 114, "col": 24, "type": "INFO", "message": "Vector3::Vector3(const Vector3&in)"}, + {"row": 126, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 128, "col": 11, "type": "WARN", "message": "Variable 'SCALE_SIZE' hides another variable of same name in outer scope"}, + {"row": 131, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 133, "col": 10, "type": "WARN", "message": "Variable 'DEATH_DELAY' hides another variable of same name in outer scope"}, + {"row": 135, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 136, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 138, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 141, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 142, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 143, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 144, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_corpse.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_main.as", + "success": false, + "messages": [ + {"row": 1081, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_sh_stats.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_sound.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling PlayerSound::PlayerSound()"}, + {"row": 10, "col": 30, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_statusflags.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 9, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected '('"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 14, "col": 19, "type": "ERROR", "message": "Expected identifier"}, + {"row": 14, "col": 19, "type": "ERROR", "message": "Instead found '('"}, + {"row": 59, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_sv_menu.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvMenu::OnSpawn()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvMenu::game_menu_getoptions()"}, + {"row": 19, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 25, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvMenu::menu_self()"}, + {"row": 33, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 33, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 41, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 44, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 44, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 45, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 45, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 46, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 49, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 50, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 51, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 51, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 52, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 53, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 53, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 54, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 54, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 55, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 55, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 59, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvMenu::menu_other()"}, + {"row": 82, "col": 9, "type": "ERROR", "message": "No matching symbol 'G_DEVELOPER_MODE'"}, + {"row": 89, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvMenu::list_summons()"}, + {"row": 99, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 99, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 114, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 114, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 118, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 118, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 119, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 119, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvMenu::list_summons_check_active()"}, + {"row": 125, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 132, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvMenu::list_unsummons()"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 139, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 139, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 140, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 140, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 141, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 144, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 144, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 145, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 145, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 149, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvMenu::plr_menu_emote()"}, + {"row": 152, "col": 17, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientCommand'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\player_sv_regen.as", + "success": false, + "messages": [ + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvRegen::calculate_new_regen()"}, + {"row": 31, "col": 25, "type": "ERROR", "message": "No matching symbol 'BASE_REGEN_RATE'"}, + {"row": 32, "col": 20, "type": "ERROR", "message": "No matching symbol 'BASE_REGEN_HP'"}, + {"row": 33, "col": 25, "type": "ERROR", "message": "No matching symbol 'BASE_REGEN_RATE'"}, + {"row": 34, "col": 20, "type": "ERROR", "message": "No matching symbol 'BASE_REGEN_MP'"}, + {"row": 35, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvRegen::calculate_manaring_bonus()"}, + {"row": 47, "col": 58, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 52, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvRegen::calculate_bloodstone_bonus()"}, + {"row": 54, "col": 60, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 59, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvRegen::player_regen_hp()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 62, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvRegen::player_regen_mp()"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'GiveMP'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvRegen::bloodstone_toggle()"}, + {"row": 73, "col": 25, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 77, "col": 2, "type": "INFO", "message": "Compiling void PlayerSvRegen::manaring_toggle()"}, + {"row": 79, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\server\\dmgpoints.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Dmgpoints::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Dmgpoints::OnDamagedOther(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\server\\element_resist.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void ElementResist::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\server\\meta_perks.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling MetaPerks::MetaPerks()"}, + {"row": 10, "col": 48, "type": "ERROR", "message": "Expected expression value"}, + {"row": 10, "col": 48, "type": "ERROR", "message": "Instead found ''"}, + {"row": 11, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 11, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 12, "col": 54, "type": "ERROR", "message": "Expected expression value"}, + {"row": 12, "col": 54, "type": "ERROR", "message": "Instead found ''"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void MetaPerks::list_cheaters()"}, + {"row": 17, "col": 8, "type": "ERROR", "message": "No matching symbol 'PLR_HAS_TROLLCANO'"}, + {"row": 19, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void MetaPerks::ext_keldorn_troll()"}, + {"row": 25, "col": 8, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void MetaPerks::game_player_putinworld()"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void MetaPerks::toggle_halo()"}, + {"row": 38, "col": 9, "type": "ERROR", "message": "No matching symbol 'PLR_DONATOR'"}, + {"row": 39, "col": 26, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 41, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 42, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 46, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 47, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void MetaPerks::toggle_dev_halo()"}, + {"row": 53, "col": 9, "type": "ERROR", "message": "No matching symbol 'PLR_DEVELOPER'"}, + {"row": 54, "col": 26, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 56, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 57, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 61, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 62, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 66, "col": 2, "type": "INFO", "message": "Compiling void MetaPerks::func_donator()"}, + {"row": 70, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 70, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 78, "col": 2, "type": "INFO", "message": "Compiling void MetaPerks::func_developer()"}, + {"row": 82, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 82, "col": 36, "type": "ERROR", "message": "Instead found ''"}, + {"row": 90, "col": 2, "type": "INFO", "message": "Compiling void MetaPerks::func_troll()"}, + {"row": 93, "col": 36, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 94, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_TROLLCANO_OWNERS'"}, + {"row": 96, "col": 8, "type": "WARN", "message": "Variable 'L_TROLL' hides another variable of same name in outer scope"}, + {"row": 99, "col": 3, "type": "WARN", "message": "Unreachable code"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\sfx_viewheight.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 12, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 103, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\\valid_spawn_new.as", + "success": false, + "messages": [ + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void ValidSpawnNew::validate_spawn()"}, + {"row": 30, "col": 52, "type": "ERROR", "message": "Expected expression value"}, + {"row": 30, "col": 52, "type": "ERROR", "message": "Instead found ''"}, + {"row": 34, "col": 47, "type": "ERROR", "message": "Expected expression value"}, + {"row": 34, "col": 47, "type": "ERROR", "message": "Instead found ''"}, + {"row": 35, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 35, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 43, "col": 104, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 43, "col": 104, "type": "ERROR", "message": "Instead found identifier 'm'"}, + {"row": 109, "col": 2, "type": "INFO", "message": "Compiling void ValidSpawnNew::premt_black()"}, + {"row": 111, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 114, "col": 2, "type": "INFO", "message": "Compiling void ValidSpawnNew::gauntlet_invalid_loop()"}, + {"row": 116, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 117, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_DEVELOPER_MODE'"}, + {"row": 119, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 121, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_VALID_SPAWN'"}, + {"row": 123, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 124, "col": 4, "type": "ERROR", "message": "No matching signatures to 'ValidSpawnNew::map_validated(const string)'"}, + {"row": 124, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 124, "col": 4, "type": "INFO", "message": "void MS::ValidSpawnNew::map_validated()"}, + {"row": 125, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 129, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 130, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 136, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 140, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 142, "col": 4, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"}, + {"row": 149, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 153, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 155, "col": 4, "type": "ERROR", "message": "No matching symbol 'ShowHelpTip'"}, + {"row": 156, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 158, "col": 5, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 161, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_VALID_SPAWN'"}, + {"row": 162, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 165, "col": 2, "type": "INFO", "message": "Compiling void ValidSpawnNew::start_vote()"}, + {"row": 167, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_VALID_SPAWN'"}, + {"row": 172, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 176, "col": 22, "type": "ERROR", "message": "No matching symbol 'RMAP_SERIES_START'"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 189, "col": 2, "type": "INFO", "message": "Compiling void ValidSpawnNew::reset_server()"}, + {"row": 191, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_VALID_SPAWN'"}, + {"row": 192, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 193, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 196, "col": 2, "type": "INFO", "message": "Compiling void ValidSpawnNew::manual_changelevel()"}, + {"row": 198, "col": 8, "type": "ERROR", "message": "No matching symbol 'G_VALID_SPAWN'"}, + {"row": 199, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 202, "col": 2, "type": "INFO", "message": "Compiling void ValidSpawnNew::check_from_valid()"}, + {"row": 204, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 205, "col": 20, "type": "ERROR", "message": "No matching symbol 'QUEST_LASTGAUNTLET'"}, + {"row": 209, "col": 2, "type": "INFO", "message": "Compiling void ValidSpawnNew::make_valid_map_list_english()"}, + {"row": 211, "col": 22, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 212, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 214, "col": 23, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 215, "col": 21, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 231, "col": 22, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 233, "col": 19, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 241, "col": 2, "type": "INFO", "message": "Compiling void ValidSpawnNew::map_validated()"}, + {"row": 243, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 244, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 245, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetOwner'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/races.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling Races::Races()"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 10, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 11, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 12, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 13, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 15, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 16, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 17, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 20, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 22, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 23, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 26, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 28, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 33, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 35, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 40, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 41, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 42, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 43, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 45, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 46, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 48, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 50, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 51, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 51, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 56, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 57, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 58, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 60, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 61, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 62, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 63, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 65, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 66, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 67, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 68, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 70, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 71, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 72, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 73, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 75, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 76, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 77, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 78, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 78, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 80, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 85, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 86, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 86, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 87, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 88, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 90, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 90, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 91, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 92, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 93, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 95, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 95, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 96, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 96, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 97, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 97, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 98, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 98, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 100, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 100, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 101, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 101, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 102, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 102, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 103, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 103, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 105, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 105, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 106, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 106, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 107, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 108, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 110, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 111, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 112, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 113, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 116, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 117, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 118, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 118, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 120, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 122, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 123, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 123, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 125, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 126, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 127, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 127, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 128, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 128, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 130, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 131, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 131, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 132, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 133, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 135, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 136, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 138, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 138, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/regorty\\fmines_merchant.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/roghan\\crystal.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/roghan\\slow_walk.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/roghan\\test_boss.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/roghan\\test_npc.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\admin\\AdminSystem.as", + "success": false, + "messages": [ + {"row": 62, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::ProcessCommand(CBasePlayer@, const string&in, const string[]&in)"}, + {"row": 67, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 69, "col": 67, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 77, "col": 43, "type": "ERROR", "message": "No matching symbol 'toLowerCase'"}, + {"row": 264, "col": 9, "type": "INFO", "message": "Compiling void AdminSystem::CheckDeveloperMode()"}, + {"row": 271, "col": 26, "type": "ERROR", "message": "No matching symbol 'find'"}, + {"row": 281, "col": 13, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 300, "col": 9, "type": "INFO", "message": "Compiling void AdminSystem::SetDeveloperPlayer(const string&in)"}, + {"row": 303, "col": 13, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 328, "col": 9, "type": "INFO", "message": "Compiling void AdminSystem::LogCommand(CBasePlayer@, const string&in, const string[]&in)"}, + {"row": 330, "col": 38, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 357, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleAddSpawnCommand(CBasePlayer@, const string[]&in)"}, + {"row": 371, "col": 87, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 371, "col": 65, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 371, "col": 43, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 374, "col": 17, "type": "ERROR", "message": "No matching symbol 'g_SpawnSystem'"}, + {"row": 376, "col": 82, "type": "ERROR", "message": "No matching symbol 'ToString'"}, + {"row": 389, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleListSpawnsCommand(CBasePlayer@, const string[]&in)"}, + {"row": 391, "col": 13, "type": "ERROR", "message": "No matching symbol 'g_SpawnSystem'"}, + {"row": 398, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleTestSpawnCommand(CBasePlayer@, const string[]&in)"}, + {"row": 408, "col": 17, "type": "ERROR", "message": "No matching symbol 'g_SpawnSystem'"}, + {"row": 423, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleClearSpawnsCommand(CBasePlayer@, const string[]&in)"}, + {"row": 425, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 431, "col": 13, "type": "ERROR", "message": "No matching symbol 'g_SpawnSystem'"}, + {"row": 439, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleKickCommand(CBasePlayer@, const string[]&in)"}, + {"row": 447, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 461, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleBanCommand(CBasePlayer@, const string[]&in)"}, + {"row": 463, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 483, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleListPlayersCommand(CBasePlayer@, const string[]&in)"}, + {"row": 485, "col": 43, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 493, "col": 68, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 494, "col": 25, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 508, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleDevModeCommand(CBasePlayer@, const string[]&in)"}, + {"row": 510, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 518, "col": 39, "type": "ERROR", "message": "No matching symbol 'toLowerCase'"}, + {"row": 522, "col": 21, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 528, "col": 21, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 548, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleSetDevCommand(CBasePlayer@, const string[]&in)"}, + {"row": 550, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 563, "col": 43, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 573, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleReloadCommand(CBasePlayer@, const string[]&in)"}, + {"row": 575, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 588, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleStatusCommand(CBasePlayer@, const string[]&in)"}, + {"row": 591, "col": 37, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 592, "col": 42, "type": "ERROR", "message": "No matching symbol 'g_SpawnSystem'"}, + {"row": 603, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleGiveCommand(CBasePlayer@, const string[]&in)"}, + {"row": 605, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 624, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleSpawnEntityCommand(CBasePlayer@, const string[]&in)"}, + {"row": 626, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 645, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleTeleportCommand(CBasePlayer@, const string[]&in)"}, + {"row": 651, "col": 71, "type": "ERROR", "message": "No matching symbol 'ToString'"}, + {"row": 670, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleGodModeCommand(CBasePlayer@, const string[]&in)"}, + {"row": 672, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 685, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleNoclipCommand(CBasePlayer@, const string[]&in)"}, + {"row": 687, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 700, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleCriticalNPCCommand(CBasePlayer@, const string[]&in)"}, + {"row": 718, "col": 17, "type": "ERROR", "message": "Identifier 'CriticalNPCManager' is not a data type"}, + {"row": 756, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleRespawnNPCCommand(CBasePlayer@, const string[]&in)"}, + {"row": 758, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 782, "col": 87, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 782, "col": 65, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 782, "col": 43, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 785, "col": 17, "type": "ERROR", "message": "No matching symbol 'respawn_critical_npc'"}, + {"row": 787, "col": 116, "type": "ERROR", "message": "No matching symbol 'ToString'"}, + {"row": 800, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleNPCStatusCommand(CBasePlayer@, const string[]&in)"}, + {"row": 808, "col": 13, "type": "ERROR", "message": "Identifier 'CriticalNPCManager' is not a data type"}, + {"row": 831, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleTestTriggerCommand(CBasePlayer@, const string[]&in)"}, + {"row": 833, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 848, "col": 92, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 848, "col": 70, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 848, "col": 48, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 850, "col": 27, "type": "ERROR", "message": "No matching symbol 'AdvancedTriggerSystem_EvaluateFilter'"}, + {"row": 860, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleCreateHPSeqCommand(CBasePlayer@, const string[]&in)"}, + {"row": 862, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 883, "col": 92, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 883, "col": 70, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 883, "col": 48, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 885, "col": 28, "type": "ERROR", "message": "No matching symbol 'CreateClassicHPSequence'"}, + {"row": 887, "col": 26, "type": "WARN", "message": "'seqIndex' is not initialized."}, + {"row": 903, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleResetHPSeqCommand(CBasePlayer@, const string[]&in)"}, + {"row": 921, "col": 17, "type": "ERROR", "message": "Identifier 'HPSequenceTrigger' is not a data type"}, + {"row": 941, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleListHPSeqCommand(CBasePlayer@, const string[]&in)"}, + {"row": 949, "col": 13, "type": "ERROR", "message": "Identifier 'HPSequenceTrigger' is not a data type"}, + {"row": 966, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleTriggerStatusCommand(CBasePlayer@, const string[]&in)"}, + {"row": 975, "col": 13, "type": "ERROR", "message": "Identifier 'HPSequenceTrigger' is not a data type"}, + {"row": 986, "col": 13, "type": "ERROR", "message": "Identifier 'AdvancedTriggerSystem' is not a data type"}, + {"row": 1003, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandlePartyInfoCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1011, "col": 13, "type": "ERROR", "message": "Identifier 'AdvancedTriggerSystem' is not a data type"}, + {"row": 1015, "col": 17, "type": "ERROR", "message": "Identifier 'PartyAnalysis' is not a data type"}, + {"row": 1039, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleTestPotionCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1041, "col": 18, "type": "ERROR", "message": "No matching symbol 'IsPlayerDeveloper'"}, + {"row": 1050, "col": 17, "type": "ERROR", "message": "No matching symbol 'MS::UsePotionOfForgetfulness'"}, + {"row": 1065, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleForgetSpellSelectCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1082, "col": 17, "type": "ERROR", "message": "No matching symbol 'MS::HandleForgetSpellCommand'"}, + {"row": 1097, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleConfirmForgetCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1100, "col": 17, "type": "ERROR", "message": "No matching symbol 'MS::HandleConfirmForgetCommand'"}, + {"row": 1115, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleCancelForgetCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1118, "col": 17, "type": "ERROR", "message": "No matching symbol 'MS::HandleCancelForgetCommand'"}, + {"row": 1133, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleListSpellsCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1141, "col": 17, "type": "ERROR", "message": "Identifier 'MagicSystem' is not a data type"}, + {"row": 1148, "col": 17, "type": "ERROR", "message": "Identifier 'SpellRegistry' is not a data type"}, + {"row": 1177, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleLearnSpellCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1192, "col": 17, "type": "ERROR", "message": "Identifier 'MagicSystem' is not a data type"}, + {"row": 1199, "col": 17, "type": "ERROR", "message": "Identifier 'SpellRegistry' is not a data type"}, + {"row": 1252, "col": 9, "type": "INFO", "message": "Compiling void AdminSystem::SendMessageToPlayer(CBasePlayer@, const string&in)"}, + {"row": 1258, "col": 54, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 1290, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleTreasureStatusCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1298, "col": 17, "type": "ERROR", "message": "Identifier 'TreasureManager' is not a data type"}, + {"row": 1314, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleScrambleTreasureCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1316, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 1322, "col": 13, "type": "ERROR", "message": "No matching symbol 'MS::ForceTreasureScramble'"}, + {"row": 1331, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleAddTreasureSpawnCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1376, "col": 17, "type": "ERROR", "message": "Identifier 'TreasureManager' is not a data type"}, + {"row": 1395, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleRespawnTreasuresCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1403, "col": 17, "type": "ERROR", "message": "Identifier 'TreasureManager' is not a data type"}, + {"row": 1420, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleClearFarmDataCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1434, "col": 17, "type": "ERROR", "message": "Identifier 'TreasureManager' is not a data type"}, + {"row": 1459, "col": 9, "type": "INFO", "message": "Compiling bool AdminSystem::HandleGenerateTreasureCommand(CBasePlayer@, const string[]&in)"}, + {"row": 1461, "col": 18, "type": "ERROR", "message": "No matching symbol 'g_PlayerManager'"}, + {"row": 1485, "col": 87, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 1485, "col": 65, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 1485, "col": 43, "type": "ERROR", "message": "'pev' is not a member of 'CBasePlayer'"}, + {"row": 1493, "col": 17, "type": "ERROR", "message": "No matching symbol 'MS::GenerateTreasureForPlayer'"}, + {"row": 1495, "col": 82, "type": "ERROR", "message": "No matching symbol 'ToString'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\admin\\CallExternalBridge.as", + "success": false, + "messages": [ + {"row": 40, "col": 35, "type": "ERROR", "message": "Identifier 'ICommunicationHandler' is not a data type in namespace 'MS' or parent"}, + {"row": 52, "col": 34, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 220, "col": 41, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 258, "col": 43, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 290, "col": 44, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 311, "col": 41, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 334, "col": 43, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 364, "col": 46, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 390, "col": 39, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 416, "col": 40, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 427, "col": 42, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 454, "col": 45, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 465, "col": 40, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 474, "col": 38, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 485, "col": 36, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 494, "col": 35, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 505, "col": 34, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 514, "col": 36, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 525, "col": 35, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 534, "col": 40, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 543, "col": 39, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 552, "col": 39, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 561, "col": 44, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"}, + {"row": 570, "col": 42, "type": "ERROR", "message": "Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\admin\\EntityCommunicationInit.as", + "success": false, + "messages": [ + {"row": 138, "col": 5, "type": "INFO", "message": "Compiling void TestCommunicationSystem()"}, + {"row": 155, "col": 106, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 155, "col": 106, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 160, "col": 9, "type": "ERROR", "message": "Expected expression value"}, + {"row": 160, "col": 9, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 168, "col": 102, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 168, "col": 102, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 173, "col": 9, "type": "ERROR", "message": "Expected expression value"}, + {"row": 173, "col": 9, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 181, "col": 107, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 181, "col": 107, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 186, "col": 9, "type": "ERROR", "message": "Expected expression value"}, + {"row": 186, "col": 9, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 196, "col": 120, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 196, "col": 120, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 197, "col": 121, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 197, "col": 121, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 336, "col": 5, "type": "INFO", "message": "Compiling bool SendQuestItemFound(const string&in, const string&in)"}, + {"row": 338, "col": 101, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 338, "col": 101, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 344, "col": 5, "type": "INFO", "message": "Compiling bool SendCriticalNPCDeath(const string&in, const string&in)"}, + {"row": 1, "col": 1, "type": "ERROR", "message": "Expression 'CBaseEntity' is a data type"}, + {"row": 346, "col": 16, "type": "ERROR", "message": "Failed while compiling default arg for parameter 6 in function 'bool CallExternal(const string&in, const string&in, const string&in = \"\", const string&in = \"\", const string&in = \"\", const string&in = \"\", CBaseEntity@ = CBaseEntity@())'"}, + {"row": 352, "col": 5, "type": "INFO", "message": "Compiling bool SendAdminCommand(const string&in, const string[]&in)"}, + {"row": 354, "col": 83, "type": "ERROR", "message": "Expected ')' or ','"}, + {"row": 354, "col": 83, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 360, "col": 5, "type": "INFO", "message": "Compiling bool SendTriggerActivation(const string&in, const string&in)"}, + {"row": 1, "col": 1, "type": "ERROR", "message": "Expression 'CBaseEntity' is a data type"}, + {"row": 362, "col": 16, "type": "ERROR", "message": "Failed while compiling default arg for parameter 6 in function 'bool CallExternal(const string&in, const string&in, const string&in = \"\", const string&in = \"\", const string&in = \"\", const string&in = \"\", CBaseEntity@ = CBaseEntity@())'"}, + {"row": 668, "col": 5, "type": "INFO", "message": "Compiling bool callexternal(const string&in, const string&in, const string&in = \"\", const string&in = \"\", const string&in = \"\", const string&in = \"\")"}, + {"row": 1, "col": 1, "type": "ERROR", "message": "Expression 'CBaseEntity' is a data type"}, + {"row": 672, "col": 16, "type": "ERROR", "message": "Failed while compiling default arg for parameter 6 in function 'bool CallExternal(const string&in, const string&in, const string&in = \"\", const string&in = \"\", const string&in = \"\", const string&in = \"\", CBaseEntity@ = CBaseEntity@())'"}, + {"row": 697, "col": 5, "type": "INFO", "message": "Compiling bool critical_npc_died(const string&in, const string&in)"}, + {"row": 1, "col": 1, "type": "ERROR", "message": "Expression 'CBaseEntity' is a data type"}, + {"row": 699, "col": 16, "type": "ERROR", "message": "Failed while compiling default arg for parameter 6 in function 'bool CallExternal(const string&in, const string&in, const string&in = \"\", const string&in = \"\", const string&in = \"\", const string&in = \"\", CBaseEntity@ = CBaseEntity@())'"}, + {"row": 30, "col": 5, "type": "INFO", "message": "Compiling void SendQuestPlayerMessage(const string&in, const string&in, const string&in)"}, + {"row": 33, "col": 9, "type": "ERROR", "message": "No matching symbol '::SendQuestPlayerMessage'"}, + {"row": 33, "col": 9, "type": "INFO", "message": "Compiling CommunicationMessage::CommunicationMessage()"}, + {"row": 37, "col": 34, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 34, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 43, "col": 9, "type": "INFO", "message": "Compiling CommunicationMessage::CommunicationMessage(const string&in, const string&in)"}, + {"row": 47, "col": 34, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 34, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 143, "col": 9, "type": "INFO", "message": "Compiling bool EntityCommunicationSystem::ProcessCommunication(const string&in, const string&in, const string[]&in, CBaseEntity@, const string&in = \"\")"}, + {"row": 151, "col": 29, "type": "ERROR", "message": "No appropriate opAssign method found in 'CBaseEntity' for value assignment"}, + {"row": 476, "col": 9, "type": "INFO", "message": "Compiling string EntityCommunicationSystem::GenerateSenderID(CBaseEntity@)"}, + {"row": 478, "col": 26, "type": "ERROR", "message": "No matching symbol 'IsValid'"}, + {"row": 220, "col": 9, "type": "INFO", "message": "Compiling bool GameMasterCommHandler::HandleQuestItemFound(const CommunicationMessage&in)"}, + {"row": 232, "col": 33, "type": "ERROR", "message": "No matching symbol 'IsValid'"}, + {"row": 581, "col": 9, "type": "INFO", "message": "Compiling string GameMasterCommHandler::GetPlayerIDFromEntity(CBaseEntity@)"}, + {"row": 583, "col": 26, "type": "ERROR", "message": "No matching symbol 'IsValid'"}, + {"row": 296, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::ParseLogicalExpression(const PartyAnalysis&in)"}, + {"row": 307, "col": 28, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 335, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::ParseCondition(const PartyAnalysis&in)"}, + {"row": 341, "col": 66, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 381, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::EvaluateCondition(const string&in, ComparisonOperator, const string&in, const PartyAnalysis&in)"}, + {"row": 383, "col": 39, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 438, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::EvaluateRaceCondition(const string&in, ComparisonOperator, const PartyAnalysis&in)"}, + {"row": 440, "col": 34, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 465, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::EvaluateClassCondition(const string&in, ComparisonOperator, const PartyAnalysis&in)"}, + {"row": 467, "col": 35, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 544, "col": 9, "type": "INFO", "message": "Compiling void AdvancedTriggerSystem::SkipWhitespace()"}, + {"row": 548, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 563, "col": 9, "type": "INFO", "message": "Compiling string AdvancedTriggerSystem::ParseIdentifier()"}, + {"row": 569, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 589, "col": 9, "type": "INFO", "message": "Compiling ComparisonOperator AdvancedTriggerSystem::ParseOperator()"}, + {"row": 596, "col": 25, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 598, "col": 23, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 642, "col": 9, "type": "INFO", "message": "Compiling string AdvancedTriggerSystem::ParseValue()"}, + {"row": 650, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 702, "col": 9, "type": "INFO", "message": "Compiling float AdvancedTriggerSystem::parseFloat(const string&in)"}, + {"row": 713, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\admin\\EntityCommunicationSystem.as", + "success": false, + "messages": [ + {"row": 33, "col": 9, "type": "INFO", "message": "Compiling CommunicationMessage::CommunicationMessage()"}, + {"row": 37, "col": 34, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 34, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 43, "col": 9, "type": "INFO", "message": "Compiling CommunicationMessage::CommunicationMessage(const string&in, const string&in)"}, + {"row": 47, "col": 34, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 34, "type": "ERROR", "message": "Instead found '@'"}, + {"row": 143, "col": 9, "type": "INFO", "message": "Compiling bool EntityCommunicationSystem::ProcessCommunication(const string&in, const string&in, const string[]&in, CBaseEntity@, const string&in = \"\")"}, + {"row": 151, "col": 29, "type": "ERROR", "message": "No appropriate opAssign method found in 'CBaseEntity' for value assignment"}, + {"row": 476, "col": 9, "type": "INFO", "message": "Compiling string EntityCommunicationSystem::GenerateSenderID(CBaseEntity@)"}, + {"row": 478, "col": 26, "type": "ERROR", "message": "No matching symbol 'IsValid'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\combat\\CombatSystem.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\commands\\CommandModule.as", + "success": false, + "messages": [ + {"row": 803, "col": 29, "type": "ERROR", "message": "Identifier 'VoteManager' is not a data type in namespace 'MS' or parent"}, + {"row": 811, "col": 35, "type": "ERROR", "message": "Identifier 'MapTransitionManager' is not a data type in namespace 'MS' or parent"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\commands\\CommandRegistry.as", + "success": false, + "messages": [ + {"row": 866, "col": 5, "type": "INFO", "message": "Compiling bool RegisterCommand(const string&in, CommandHandler@)"}, + {"row": 868, "col": 37, "type": "ERROR", "message": "No matching symbol 'GetCommandRegistry'"}, + {"row": 877, "col": 5, "type": "INFO", "message": "Compiling CommandResult ProcessCommand(CBasePlayer@, const string&in, const string[]&in)"}, + {"row": 879, "col": 37, "type": "ERROR", "message": "No matching symbol 'GetCommandRegistry'"}, + {"row": 888, "col": 5, "type": "INFO", "message": "Compiling CommandResult ProcessCommandString(CBasePlayer@, const string&in)"}, + {"row": 890, "col": 37, "type": "ERROR", "message": "No matching symbol 'GetCommandRegistry'"}, + {"row": 120, "col": 9, "type": "INFO", "message": "Compiling bool BaseCommandHandler::CheckPlayerPermission(CBasePlayer@, PermissionLevel)"}, + {"row": 125, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetCommandRegistry'"}, + {"row": 328, "col": 9, "type": "INFO", "message": "Compiling void CommandAlias::RegisterAlias(const string&in, const string&in)"}, + {"row": 332, "col": 41, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 332, "col": 23, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 339, "col": 9, "type": "INFO", "message": "Compiling string CommandAlias::ResolveAlias(const string&in)"}, + {"row": 341, "col": 35, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 355, "col": 9, "type": "INFO", "message": "Compiling bool CommandAlias::IsAlias(const string&in)"}, + {"row": 357, "col": 37, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 379, "col": 9, "type": "INFO", "message": "Compiling void CommandAlias::RemoveAlias(const string&in)"}, + {"row": 381, "col": 30, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 473, "col": 9, "type": "INFO", "message": "Compiling bool CommandRegistry::RegisterCommand(const string&in, CommandHandler@)"}, + {"row": 481, "col": 35, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 511, "col": 9, "type": "INFO", "message": "Compiling bool CommandRegistry::UnregisterCommand(const string&in)"}, + {"row": 513, "col": 35, "type": "ERROR", "message": "No matching symbol 'ToLower'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\commands\\VotingCommands.as", + "success": false, + "messages": [ + {"row": 803, "col": 29, "type": "ERROR", "message": "Identifier 'VoteManager' is not a data type in namespace 'MS' or parent"}, + {"row": 811, "col": 35, "type": "ERROR", "message": "Identifier 'MapTransitionManager' is not a data type in namespace 'MS' or parent"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\gamemaster\\GameMaster.as", + "success": false, + "messages": [ + {"row": 27, "col": 5, "type": "ERROR", "message": "Expected one of: get, set, }"}, + {"row": 27, "col": 5, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 283, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 283, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 459, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\gamemaster\\GameMasterDataStructures.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\gamemaster\\GameMasterEvents.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\gamemaster\\GameMasterMapTransitions.as", + "success": false, + "messages": [ + {"row": 502, "col": 5, "type": "INFO", "message": "Compiling void SetPlayerTransitionData(const string&in, const string&in, const string&in, const string&in)"}, + {"row": 524, "col": 29, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 637, "col": 5, "type": "INFO", "message": "Compiling void StartGenericVote(const string&in, const string[]&in, const string&in, const string&in)"}, + {"row": 651, "col": 24, "type": "ERROR", "message": "No matching symbol 'MS::gm_create_vote'"}, + {"row": 653, "col": 13, "type": "WARN", "message": "'success' is not initialized."}, + {"row": 750, "col": 5, "type": "INFO", "message": "Compiling void ScheduleDelayedEvent(float, const string&in)"}, + {"row": 757, "col": 25, "type": "ERROR", "message": "No matching symbol 'MS::g_Scheduler'"}, + {"row": 854, "col": 5, "type": "INFO", "message": "Compiling MessageColor StringToMessageColor(const string&in)"}, + {"row": 856, "col": 29, "type": "ERROR", "message": "No matching symbol 'ToLower'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\gamemaster\\GameMasterPlayerCommands.as", + "success": false, + "messages": [ + {"row": 803, "col": 29, "type": "ERROR", "message": "Identifier 'VoteManager' is not a data type in namespace 'MS' or parent"}, + {"row": 811, "col": 35, "type": "ERROR", "message": "Identifier 'MapTransitionManager' is not a data type in namespace 'MS' or parent"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\gamemaster\\GameMasterTest.as", + "success": false, + "messages": [ + {"row": 27, "col": 5, "type": "ERROR", "message": "Expected one of: get, set, }"}, + {"row": 27, "col": 5, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 283, "col": 15, "type": "ERROR", "message": "Expected identifier"}, + {"row": 283, "col": 15, "type": "ERROR", "message": "Instead found '('"}, + {"row": 459, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\gamemaster\\GameMasterUtils.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\gamemaster\\GameMasterVoting.as", + "success": false, + "messages": [ + {"row": 844, "col": 9, "type": "ERROR", "message": "Identifier 'VoteData' is not a data type in namespace 'MS' or parent"}, + {"row": 1104, "col": 43, "type": "ERROR", "message": "Identifier 'DelayedAction' is not a data type in namespace 'MS' or parent"}, + {"row": 1277, "col": 17, "type": "ERROR", "message": "Identifier 'PlayerVoteRecord' is not a data type in namespace 'MS' or parent"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\magic\\MagicCombatTest.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\magic\\MagicSystem.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\magic\\SpellRegistry.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\magic\\TestPotionOfForgetfulness.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\player\\PlayerManager.as", + "success": false, + "messages": [ + {"row": 23, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 23, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 40, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 40, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 161, "col": 37, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 161, "col": 37, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 178, "col": 32, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 178, "col": 32, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 224, "col": 31, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 224, "col": 31, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 261, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 352, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\player\\QuestItemIntegration.as", + "success": false, + "messages": [ + {"row": 22, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 22, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 346, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\player\\QuestTracker.as", + "success": false, + "messages": [ + {"row": 30, "col": 5, "type": "INFO", "message": "Compiling void SendQuestPlayerMessage(const string&in, const string&in, const string&in)"}, + {"row": 33, "col": 9, "type": "ERROR", "message": "No matching symbol '::SendQuestPlayerMessage'"}, + {"row": 43, "col": 5, "type": "INFO", "message": "Compiling void CallNPCReceiveQuestItem(const string&in, const string&in, const string&in)"}, + {"row": 51, "col": 29, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\CommunicationTests.as", + "success": false, + "messages": [ + {"row": 18, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 18, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 91, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 806, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\EngineIntegrationTests.as", + "success": false, + "messages": [ + {"row": 18, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 18, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 79, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 518, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\MasterTestSuite.as", + "success": false, + "messages": [ + {"row": 17, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 17, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 24, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 24, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 188, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 474, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\NPCManagerTests.as", + "success": false, + "messages": [ + {"row": 18, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 18, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 75, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 750, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\PerformanceTests.as", + "success": false, + "messages": [ + {"row": 18, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 18, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 72, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 915, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\PlayerManagementTests.as", + "success": false, + "messages": [ + {"row": 18, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 18, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 59, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 640, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\QuestSystemTests.as", + "success": false, + "messages": [ + {"row": 18, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 18, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 90, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 683, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\TestUtilities.as", + "success": false, + "messages": [ + {"row": 90, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 90, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 94, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 94, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 116, "col": 28, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 116, "col": 28, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 128, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 128, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 134, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 134, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 335, "col": 35, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 335, "col": 35, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 352, "col": 31, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 352, "col": 31, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 357, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 362, "col": 5, "type": "ERROR", "message": "Unexpected token '}'"}, + {"row": 531, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\test_engine_events.as", + "success": false, + "messages": [ + {"row": 11, "col": 1, "type": "INFO", "message": "Compiling void TestOnEnginePlayerConnect(const string&in, const string&in)"}, + {"row": 13, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 16, "col": 1, "type": "INFO", "message": "Compiling void TestOnEnginePlayerDisconnect(const string&in, const string&in)"}, + {"row": 18, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 21, "col": 1, "type": "INFO", "message": "Compiling void TestOnEngineMonsterKilled(const string&in, const string&in, const Vector3&in)"}, + {"row": 23, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 30, "col": 1, "type": "INFO", "message": "Compiling void TestOnEngineTreasureSpawned(const string&in, const Vector3&in)"}, + {"row": 32, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 39, "col": 1, "type": "INFO", "message": "Compiling void RegisterTestEventHandlers()"}, + {"row": 41, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 49, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 56, "col": 1, "type": "INFO", "message": "Compiling void UnregisterTestEventHandlers()"}, + {"row": 58, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 65, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 69, "col": 1, "type": "INFO", "message": "Compiling void TestEngineEventIntegration()"}, + {"row": 71, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 76, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 77, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"}, + {"row": 78, "col": 5, "type": "ERROR", "message": "No matching symbol 'LogInfo'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\test_player_iteration.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\tests\\test_quest_system.as", + "success": false, + "messages": [ + {"row": 15, "col": 5, "type": "INFO", "message": "Compiling void TestQuestSystem()"}, + {"row": 58, "col": 9, "type": "ERROR", "message": "Identifier 'QuestItemIntegration' is not a data type"}, + {"row": 76, "col": 5, "type": "INFO", "message": "Compiling void TestQuestPersistence()"}, + {"row": 80, "col": 9, "type": "ERROR", "message": "Identifier 'QuestTracker' is not a data type"}, + {"row": 97, "col": 5, "type": "INFO", "message": "Compiling void TestLegacyIntegration()"}, + {"row": 101, "col": 9, "type": "ERROR", "message": "Identifier 'QuestItemIntegration' is not a data type"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\triggers\\AdvancedTriggerSystem.as", + "success": false, + "messages": [ + {"row": 296, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::ParseLogicalExpression(const PartyAnalysis&in)"}, + {"row": 307, "col": 28, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 335, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::ParseCondition(const PartyAnalysis&in)"}, + {"row": 341, "col": 66, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 381, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::EvaluateCondition(const string&in, ComparisonOperator, const string&in, const PartyAnalysis&in)"}, + {"row": 383, "col": 39, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 438, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::EvaluateRaceCondition(const string&in, ComparisonOperator, const PartyAnalysis&in)"}, + {"row": 440, "col": 34, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 465, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::EvaluateClassCondition(const string&in, ComparisonOperator, const PartyAnalysis&in)"}, + {"row": 467, "col": 35, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 544, "col": 9, "type": "INFO", "message": "Compiling void AdvancedTriggerSystem::SkipWhitespace()"}, + {"row": 548, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 563, "col": 9, "type": "INFO", "message": "Compiling string AdvancedTriggerSystem::ParseIdentifier()"}, + {"row": 569, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 589, "col": 9, "type": "INFO", "message": "Compiling ComparisonOperator AdvancedTriggerSystem::ParseOperator()"}, + {"row": 596, "col": 25, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 598, "col": 23, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 642, "col": 9, "type": "INFO", "message": "Compiling string AdvancedTriggerSystem::ParseValue()"}, + {"row": 650, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 702, "col": 9, "type": "INFO", "message": "Compiling float AdvancedTriggerSystem::parseFloat(const string&in)"}, + {"row": 713, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\triggers\\HPSequenceTrigger.as", + "success": false, + "messages": [ + {"row": 296, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::ParseLogicalExpression(const PartyAnalysis&in)"}, + {"row": 307, "col": 28, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 335, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::ParseCondition(const PartyAnalysis&in)"}, + {"row": 341, "col": 66, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 381, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::EvaluateCondition(const string&in, ComparisonOperator, const string&in, const PartyAnalysis&in)"}, + {"row": 383, "col": 39, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 438, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::EvaluateRaceCondition(const string&in, ComparisonOperator, const PartyAnalysis&in)"}, + {"row": 440, "col": 34, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 465, "col": 9, "type": "INFO", "message": "Compiling bool AdvancedTriggerSystem::EvaluateClassCondition(const string&in, ComparisonOperator, const PartyAnalysis&in)"}, + {"row": 467, "col": 35, "type": "ERROR", "message": "No matching symbol 'ToLower'"}, + {"row": 544, "col": 9, "type": "INFO", "message": "Compiling void AdvancedTriggerSystem::SkipWhitespace()"}, + {"row": 548, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 563, "col": 9, "type": "INFO", "message": "Compiling string AdvancedTriggerSystem::ParseIdentifier()"}, + {"row": 569, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 589, "col": 9, "type": "INFO", "message": "Compiling ComparisonOperator AdvancedTriggerSystem::ParseOperator()"}, + {"row": 596, "col": 25, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 598, "col": 23, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 642, "col": 9, "type": "INFO", "message": "Compiling string AdvancedTriggerSystem::ParseValue()"}, + {"row": 650, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 702, "col": 9, "type": "INFO", "message": "Compiling float AdvancedTriggerSystem::parseFloat(const string&in)"}, + {"row": 713, "col": 34, "type": "ERROR", "message": "No matching symbol 'Mid'"}, + {"row": 401, "col": 9, "type": "INFO", "message": "Compiling void EntitySpawner::Update(float)"}, + {"row": 418, "col": 56, "type": "ERROR", "message": "No appropriate opAssign method found in 'CBaseEntity' for value assignment"}, + {"row": 457, "col": 9, "type": "INFO", "message": "Compiling void EntitySpawner::ProcessRespawnTracking()"}, + {"row": 470, "col": 62, "type": "ERROR", "message": "Can't implicitly convert from 'CBaseEntity@' to 'CBaseEntity&'."}, + {"row": 481, "col": 58, "type": "ERROR", "message": "Can't implicitly convert from 'CBaseEntity@' to 'CBaseEntity&'."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\triggers\\TriggerSystemExample.as", + "success": false, + "messages": [ + {"row": 40, "col": 5, "type": "INFO", "message": "Compiling void SetupSimpleHPTrigger()"}, + {"row": 46, "col": 24, "type": "ERROR", "message": "No matching symbol 'CreateClassicHPSequence'"}, + {"row": 48, "col": 22, "type": "WARN", "message": "'seqIndex' is not initialized."}, + {"row": 94, "col": 5, "type": "INFO", "message": "Compiling void SetupMultiZoneEncounters()"}, + {"row": 101, "col": 13, "type": "ERROR", "message": "No matching symbol 'AddHPThreshold'"}, + {"row": 102, "col": 13, "type": "ERROR", "message": "No matching symbol 'AddHPThreshold'"}, + {"row": 103, "col": 13, "type": "ERROR", "message": "No matching symbol 'AddHPThreshold'"}, + {"row": 110, "col": 13, "type": "ERROR", "message": "No matching symbol 'AddHPThreshold'"}, + {"row": 111, "col": 13, "type": "ERROR", "message": "No matching symbol 'AddHPThreshold'"}, + {"row": 112, "col": 13, "type": "ERROR", "message": "No matching symbol 'AddHPThreshold'"}, + {"row": 119, "col": 13, "type": "ERROR", "message": "No matching symbol 'AddHPThreshold'"}, + {"row": 120, "col": 13, "type": "ERROR", "message": "No matching symbol 'AddHPThreshold'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "No matching symbol 'AddHPThreshold'"}, + {"row": 133, "col": 5, "type": "INFO", "message": "Compiling int CreateCustomHPSequence(const string&in, const Vector3&in, float)"}, + {"row": 135, "col": 9, "type": "ERROR", "message": "Identifier 'HPSequenceTrigger' is not a data type"}, + {"row": 163, "col": 5, "type": "INFO", "message": "Compiling void ExampleMapScriptUsage()"}, + {"row": 168, "col": 13, "type": "ERROR", "message": "No matching symbol 'AdvancedTriggerSystem_EvaluateFilter'"}, + {"row": 175, "col": 13, "type": "ERROR", "message": "No matching symbol 'AdvancedTriggerSystem_EvaluateFilter'"}, + {"row": 180, "col": 18, "type": "ERROR", "message": "No matching symbol 'AdvancedTriggerSystem_EvaluateFilter'"}, + {"row": 187, "col": 13, "type": "ERROR", "message": "No matching symbol 'AdvancedTriggerSystem_EvaluateFilter'"}, + {"row": 194, "col": 13, "type": "ERROR", "message": "No matching symbol 'AdvancedTriggerSystem_EvaluateFilter'"}, + {"row": 204, "col": 5, "type": "INFO", "message": "Compiling void StressTriggerSystems()"}, + {"row": 222, "col": 27, "type": "ERROR", "message": "No matching symbol 'AdvancedTriggerSystem_EvaluateFilter'"}, + {"row": 223, "col": 87, "type": "WARN", "message": "'result' is not initialized."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\triggers\\TriggerSystemTests.as", + "success": false, + "messages": [ + {"row": 18, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 18, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 75, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 890, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\world\\CriticalNPCManager.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\world\\EntitySpawner.as", + "success": false, + "messages": [ + {"row": 401, "col": 9, "type": "INFO", "message": "Compiling void EntitySpawner::Update(float)"}, + {"row": 418, "col": 56, "type": "ERROR", "message": "No appropriate opAssign method found in 'CBaseEntity' for value assignment"}, + {"row": 457, "col": 9, "type": "INFO", "message": "Compiling void EntitySpawner::ProcessRespawnTracking()"}, + {"row": 470, "col": 62, "type": "ERROR", "message": "Can't implicitly convert from 'CBaseEntity@' to 'CBaseEntity&'."}, + {"row": 481, "col": 58, "type": "ERROR", "message": "Can't implicitly convert from 'CBaseEntity@' to 'CBaseEntity&'."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\world\\SpawnSystem.as", + "success": false, + "messages": [ + {"row": 23, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 23, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 46, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 46, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 328, "col": 35, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 328, "col": 35, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 336, "col": 37, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 336, "col": 37, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 465, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 682, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\world\\TreasureManager.as", + "success": false, + "messages": [ + {"row": 150, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 150, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 181, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 181, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 444, "col": 5, "type": "ERROR", "message": "Unexpected token 'private'"}, + {"row": 965, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\\world\\WorldSystem.as", + "success": false, + "messages": [ + {"row": 67, "col": 5, "type": "ERROR", "message": "Expected method or property"}, + {"row": 67, "col": 5, "type": "ERROR", "message": "Instead found reserved keyword 'private'"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Expected identifier"}, + {"row": 95, "col": 11, "type": "ERROR", "message": "Instead found ':'"}, + {"row": 242, "col": 36, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 242, "col": 36, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 267, "col": 42, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 267, "col": 42, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 404, "col": 38, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 404, "col": 38, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 412, "col": 42, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 412, "col": 42, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 420, "col": 36, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 420, "col": 36, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 428, "col": 33, "type": "ERROR", "message": "Expected ',' or ';'"}, + {"row": 428, "col": 33, "type": "ERROR", "message": "Instead found reserved keyword 'const'"}, + {"row": 502, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\atholo.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\Copy of undamael.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\game_master.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::undamael_reward_victor()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'gm_find_strongest_player'"}, + {"row": 13, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 14, "col": 26, "type": "ERROR", "message": "No matching symbol 'THE_CHOSEN_ONE'"}, + {"row": 18, "col": 7, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 22, "col": 8, "type": "ERROR", "message": "No matching symbol 'L_INVALID'"}, + {"row": 24, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 26, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 29, "col": 10, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 32, "col": 4, "type": "ERROR", "message": "No matching symbol 'gm_find_strongest_player'"}, + {"row": 34, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)'"}, + {"row": 38, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 38, "col": 3, "type": "INFO", "message": "CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy)"}, + {"row": 38, "col": 3, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 2"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::undamael_reward_victor2()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching signatures to 'GameMaster::undamael_reward_victor(string)'"}, + {"row": 43, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 43, "col": 3, "type": "INFO", "message": "void MS::GameMaster::undamael_reward_victor()"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\keyhole_1.as", + "success": false, + "messages": [ + {"row": 47, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\sforTC1.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\sforTC2.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\undamael.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\undamael2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\undamael_head.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\undamael_msc.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void UndamaelMsc::OnPostSpawn()' marked as override but does not replace any base class or interface method"}, + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void UndamaelMsc::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\wizard1.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void Wizard1::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void Wizard1::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\wizard2.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void WizardBase::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void WizardBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\wizard3.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void WizardBase::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void WizardBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\wizard4.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void WizardBase::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void WizardBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\wizard5.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void WizardBase::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void WizardBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\wizard_base.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void WizardBase::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method"}, + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void WizardBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\wizard_center.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void WizardCenter::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void WizardCenter::set_center_point()"}, + {"row": 17, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void WizardCenter::remove_me()"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\\wizard_cl.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void WizardCl::OnRepeatTimer()"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 15, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 20, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 24, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 25, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 26, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 30, "col": 2, "type": "INFO", "message": "Compiling void WizardCl::client_activate()"}, + {"row": 32, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void WizardCl::do_explode()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void WizardCl::glow_sprite()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 2, "type": "INFO", "message": "Compiling void WizardCl::explode_sprite()"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 70, "col": 2, "type": "INFO", "message": "Compiling void WizardCl::remove_script()"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shared\\Scheduler.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\burning_one.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\elemental_fire_guardian.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\elemental_fire_guardian2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\elemental_fire_guardian3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\elemental_ice_guardian.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\elemental_ice_guardian2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\elemental_ice_guardian3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\fish_killie.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\game_master.as", + "success": false, + "messages": [ + {"row": 12, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::map_shender_east_dream_win()"}, + {"row": 14, "col": 25, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 16, "col": 25, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching signatures to 'GetAllPlayers(string)'"}, + {"row": 20, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 20, "col": 3, "type": "INFO", "message": "CBasePlayer@[]@ GetAllPlayers()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::map_shender_east_win2()"}, + {"row": 31, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::map_shender_east_prepret()"}, + {"row": 39, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 40, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::map_shender_east_return()"}, + {"row": 46, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 47, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 55, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 55, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 55, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 59, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 59, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 59, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 59, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 63, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 63, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 63, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 63, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 67, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 67, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 67, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 71, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 71, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 71, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 71, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_shender_east_bunny()"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\telf_quest.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\telf_sleeping.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::OnRepeatTimer()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 20, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 26, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::OnSpawn()"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 43, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::game_precache()"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::game_menu_getoptions()"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 53, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 54, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 54, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::wake_elf()"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 62, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 63, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching signatures to 'GetAllPlayers(string)'"}, + {"row": 67, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 67, "col": 3, "type": "INFO", "message": "CBasePlayer@[]@ GetAllPlayers()"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::fade_players()"}, + {"row": 73, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 74, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::fade_players_go()"}, + {"row": 82, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 83, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::tele_players()"}, + {"row": 89, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 96, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::resume_idle()"}, + {"row": 98, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 99, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 103, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::tele_players_go()"}, + {"row": 105, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 106, "col": 9, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 121, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 121, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 121, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 121, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 125, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 125, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 125, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 125, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 129, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 129, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 129, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 129, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 133, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 133, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 133, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 133, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 137, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 137, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 137, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 137, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 141, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 141, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 141, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 141, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 145, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 145, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 145, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 145, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 149, "col": 4, "type": "ERROR", "message": "No matching signatures to 'SetEntityOrigin(string, Vector3)'"}, + {"row": 149, "col": 4, "type": "INFO", "message": "Candidates are:"}, + {"row": 149, "col": 4, "type": "INFO", "message": "void SetEntityOrigin(CBaseEntity@, const Vector3&in)"}, + {"row": 149, "col": 4, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 151, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 154, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::quest_fail()"}, + {"row": 157, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 158, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 159, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 160, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 163, "col": 2, "type": "INFO", "message": "Compiling void TelfSleeping::ext_quest_win()"}, + {"row": 165, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\\telf_win.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shops\\base_magic.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void BaseMagic::vendor_addstoreitems()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 22, "col": 2, "type": "INFO", "message": "Compiling void BaseMagic::bs_supplement()"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 29, "col": 9, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 31, "col": 4, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 34, "col": 9, "type": "ERROR", "message": "No matching symbol 'OVERCHARGE'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'AddStoreItem'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/skycastle\\game_master.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_bear_god_death()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_bear_god_death2()"}, + {"row": 15, "col": 62, "type": "ERROR", "message": "Expected expression value"}, + {"row": 15, "col": 62, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/skycastle\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\\lure.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void Lure::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 19, "col": 2, "type": "INFO", "message": "Compiling void Lure::slithar_run_loop()"}, + {"row": 21, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 23, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 24, "col": 26, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 25, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 26, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 27, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void Lure::slithar_made_it()"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\\lure_tele.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void LureTele::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void LureTele::slithar_run_loop()"}, + {"row": 22, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 24, "col": 23, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 25, "col": 26, "type": "ERROR", "message": "No matching symbol 'GetEntityRange'"}, + {"row": 26, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetMonsterProperty'"}, + {"row": 27, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 28, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 32, "col": 2, "type": "INFO", "message": "Compiling void LureTele::slithar_made_it()"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void LureTele::slithar_cant_make_it()"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 46, "col": 2, "type": "INFO", "message": "Compiling void LureTele::tele_slithar()"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 49, "col": 25, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 50, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\\resume.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void Resume::OnSpawn()"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 23, "col": 2, "type": "INFO", "message": "Compiling void Resume::send_resume()"}, + {"row": 25, "col": 23, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\\slithar.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\\stop.as", + "success": false, + "messages": [ + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void Stop::OnSpawn()"}, + {"row": 13, "col": 40, "type": "ERROR", "message": "Expected expression value"}, + {"row": 13, "col": 40, "type": "ERROR", "message": "Instead found ''"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::OnSpawn()"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'DEATH_DELAY'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void BaseTemporary::end_me()"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\\teleport.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void Teleport::OnSpawn()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void Teleport::lure_slithar()"}, + {"row": 22, "col": 23, "type": "ERROR", "message": "No matching symbol 'FindEntityByName'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/smugglers\\orc_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/smugglers\\orc_chest_rare.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/smugglers\\shark_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_palace\\sorc_chief.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_palace\\sorc_chief_cl.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void SorcChiefCl::client_activate()"}, + {"row": 19, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 20, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 21, "col": 14, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 22, "col": 17, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 23, "col": 18, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::CL_DURATION(const string)'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 2, "type": "INFO", "message": "Compiling void SorcChiefCl::createsprite()"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 39, "col": 10, "type": "ERROR", "message": "Instead found identifier 'l'"}, + {"row": 45, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 45, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SorcChiefCl::setup_sprite1_sparkle()"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 53, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 59, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 63, "col": 2, "type": "INFO", "message": "Compiling void SorcChiefCl::sprite_update()"}, + {"row": 65, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 72, "col": 2, "type": "INFO", "message": "Compiling void SorcChiefCl::clear_sprites()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void SorcChiefCl::remove_me()"}, + {"row": 81, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 88, "col": 4, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_palace\\thuldahr.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\finven.as", + "success": false, + "messages": [ + {"row": 50, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\game_master.as", + "success": false, + "messages": [ + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_init()"}, + {"row": 17, "col": 20, "type": "ERROR", "message": "No matching symbol 'G_SORCV_FRIENDLY'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 21, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 23, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 24, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 28, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 29, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 30, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 31, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 35, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_ogers()"}, + {"row": 37, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_a1()"}, + {"row": 43, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 49, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 53, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_a2()"}, + {"row": 55, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 57, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_a3()"}, + {"row": 67, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 69, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_shop1()"}, + {"row": 75, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 77, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 81, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_smith()"}, + {"row": 87, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 89, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 93, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 97, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_horrors1()"}, + {"row": 99, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 101, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_horrors2()"}, + {"row": 107, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 109, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 113, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorv_north()"}, + {"row": 115, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 117, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 121, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_shaman1()"}, + {"row": 123, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 125, "col": 4, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 129, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_give_medal()"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 132, "col": 8, "type": "ERROR", "message": "No matching symbol 'ItemExists'"}, + {"row": 134, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 135, "col": 48, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 136, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 137, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 139, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetToken'"}, + {"row": 140, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 144, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_start_challenge()"}, + {"row": 156, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 156, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 156, "col": 84, "type": "ERROR", "message": "Expected ';'"}, + {"row": 156, "col": 84, "type": "ERROR", "message": "Instead found ')'"}, + {"row": 163, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_make_player_list()"}, + {"row": 165, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 165, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 170, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_handle_medals()"}, + {"row": 172, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 172, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 177, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 177, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 184, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_achieve()"}, + {"row": 195, "col": 50, "type": "ERROR", "message": "Expected expression value"}, + {"row": 195, "col": 50, "type": "ERROR", "message": "Instead found ''"}, + {"row": 195, "col": 84, "type": "ERROR", "message": "Expected ';'"}, + {"row": 195, "col": 84, "type": "ERROR", "message": "Instead found ')'"}, + {"row": 201, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_update_achievements()"}, + {"row": 203, "col": 46, "type": "ERROR", "message": "Expected expression value"}, + {"row": 203, "col": 46, "type": "ERROR", "message": "Instead found ''"}, + {"row": 231, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_end_challenge()"}, + {"row": 233, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 234, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 237, "col": 2, "type": "INFO", "message": "Compiling void GameMaster::gm_sorcv_end_challenge2()"}, + {"row": 239, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 240, "col": 3, "type": "ERROR", "message": "No matching symbol 'SendInfoMsg'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\sfx_blacksmith.as", + "success": false, + "messages": [ + {"row": 13, "col": 2, "type": "INFO", "message": "Compiling void SfxBlacksmith::OnSpawn()"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 24, "col": 2, "type": "INFO", "message": "Compiling void SfxBlacksmith::do_spark()"}, + {"row": 26, "col": 38, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 27, "col": 28, "type": "ERROR", "message": "No matching symbol 'SOUND_ANVIL'"}, + {"row": 27, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 31, "col": 2, "type": "INFO", "message": "Compiling void SfxBlacksmith::do_forge_fx()"}, + {"row": 33, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 34, "col": 26, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 35, "col": 35, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 43, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 44, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 45, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 49, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 50, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 51, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 55, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 56, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 57, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 61, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 62, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 63, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 67, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 68, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 69, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 73, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 74, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 75, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 79, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 80, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 81, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SfxBlacksmith::do_forge_fx_end()"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 89, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 90, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 91, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 93, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 94, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\sorc_alchemist.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\sorc_blacksmith.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\sorc_chief_image.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\sorc_guard_friendly.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\sorc_idle.as", + "success": false, + "messages": [ + {"row": 21, "col": 2, "type": "INFO", "message": "Compiling void SorcIdle::OnSpawn()"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamageResistance'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 37, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 39, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void SorcIdle::game_postspawn()"}, + {"row": 47, "col": 19, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 48, "col": 9, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 49, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 55, "col": 2, "type": "INFO", "message": "Compiling void SorcIdle::npcatk_do_events()"}, + {"row": 57, "col": 20, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 58, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 60, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 62, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 65, "col": 14, "type": "ERROR", "message": "No matching symbol 'NEXT_EVENT'"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void SorcIdle::set_recline1()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void SorcIdle::game_menu_getoptions()"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 82, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 83, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void SorcIdle::say_hi()"}, + {"row": 90, "col": 4, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 91, "col": 4, "type": "ERROR", "message": "No matching symbol 'SayText'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\sorc_jugger_patrol.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void SorcJuggerPatrol::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamageResistance'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStepSize'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'CatchSpeech'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void SorcJuggerPatrol::game_menu_getoptions()"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 37, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 38, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void SorcJuggerPatrol::game_postspawn()"}, + {"row": 43, "col": 19, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 44, "col": 9, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 45, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void SorcJuggerPatrol::npcatk_do_events()"}, + {"row": 53, "col": 20, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 54, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 56, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 58, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 60, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 61, "col": 14, "type": "ERROR", "message": "No matching symbol 'NEXT_EVENT'"}, + {"row": 64, "col": 2, "type": "INFO", "message": "Compiling void SorcJuggerPatrol::say_hi()"}, + {"row": 66, "col": 22, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 68, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 69, "col": 18, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 73, "col": 9, "type": "ERROR", "message": "No matching signatures to 'IsEntityAlive(const string)'"}, + {"row": 73, "col": 9, "type": "INFO", "message": "Candidates are:"}, + {"row": 73, "col": 9, "type": "INFO", "message": "bool IsEntityAlive(CBaseEntity@)"}, + {"row": 73, "col": 9, "type": "INFO", "message": "Rejected due to type mismatch at positional parameter 1"}, + {"row": 76, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetMoveDest'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SayText'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\sorc_merc.as", + "success": false, + "messages": [ + {"row": 50, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\sorc_sitting.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void SorcSitting::OnRepeatTimer()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void SorcSitting::OnSpawn()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamageResistance'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetStat'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetIdleAnim'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMoveAnim'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "No matching symbol 'PlayAnim'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSayTextRange'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void SorcSitting::game_postspawn()"}, + {"row": 41, "col": 19, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 42, "col": 9, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 43, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 49, "col": 2, "type": "INFO", "message": "Compiling void SorcSitting::npcatk_do_events()"}, + {"row": 51, "col": 20, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 52, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 54, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 56, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 59, "col": 14, "type": "ERROR", "message": "No matching symbol 'NEXT_EVENT'"}, + {"row": 62, "col": 2, "type": "INFO", "message": "Compiling void SorcSitting::set_eating()"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 68, "col": 2, "type": "INFO", "message": "Compiling void SorcSitting::set_drinking()"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 72, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModelBody'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\\storage.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/test_scripts\\test_angelscript_integration.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_keep\\boss_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_keep\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\\elf_warrior_guard1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\\elf_warrior_guard2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\\elf_wizard_guard.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\\forsuth.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\\telf_leader1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\\telf_leader2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\\telf_leader3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\\telf_necro.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\\trigger_forsuth_mountains.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerForsuthMountains::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall2\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\\amaex.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\\bandit_trap_disarmed.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\\bgoblin_apple.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\\orcboss.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\\shifty_commoner.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\\tomb_guardian.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/titles.as", + "success": true, + "messages": [ + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\circle_of_death1.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void CircleOfDeath1::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\circle_of_death2.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void CircleOfDeath1::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\circle_of_death3.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Method 'void CircleOfDeath1::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\fire_burst.as", + "success": false, + "messages": [ + {"row": 11, "col": 2, "type": "INFO", "message": "Compiling void FireBurst::OnSpawn()"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void FireBurst::game_postspawn()"}, + {"row": 30, "col": 8, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 32, "col": 12, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 34, "col": 9, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamageMultiplier'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void FireBurst::do_explode()"}, + {"row": 44, "col": 40, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void FireBurst::explode_dodamage()"}, + {"row": 53, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 54, "col": 25, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 55, "col": 24, "type": "ERROR", "message": "No matching symbol 'L_TARG_HP'"}, + {"row": 56, "col": 7, "type": "ERROR", "message": "No matching symbol 'L_TARG_HP'"}, + {"row": 62, "col": 53, "type": "ERROR", "message": "No matching symbol 'L_TARG_HP'"}, + {"row": 65, "col": 3, "type": "WARN", "message": "Unreachable code"}, + {"row": 65, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 68, "col": 62, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 68, "col": 16, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void FireBurst::repel_target()"}, + {"row": 75, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 75, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 77, "col": 43, "type": "ERROR", "message": "Expected expression value"}, + {"row": 77, "col": 43, "type": "ERROR", "message": "Instead found ''"}, + {"row": 80, "col": 2, "type": "INFO", "message": "Compiling void FireBurst::npc_suicide()"}, + {"row": 82, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 84, "col": 3, "type": "ERROR", "message": "No matching symbol 'DoDamage'"}, + {"row": 87, "col": 2, "type": "INFO", "message": "Compiling void FireBurst::game_dynamically_created()"}, + {"row": 89, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 92, "col": 2, "type": "INFO", "message": "Compiling void FireBurst::set_aoe()"}, + {"row": 94, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\fire_wall.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling FireWall::FireWall()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void FireWall::OnRepeatTimer()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 30, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 33, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 33, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void FireWall::OnRepeatTimer_1()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void FireWall::OnRepeatTimer_2()"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void FireWall::flames_start()"}, + {"row": 56, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 56, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void FireWall::OnSpawn()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 73, "col": 59, "type": "ERROR", "message": "No matching symbol 'TIME_LIVE'"}, + {"row": 73, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 73, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 74, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'FIRE_DURATION'"}, + {"row": 77, "col": 24, "type": "ERROR", "message": "No matching symbol 'FIRE_DURATION'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::REMOVE_TIME(const string)'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void FireWall::remove_invul()"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void FireWall::flames_attack()"}, + {"row": 100, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 100, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 101, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 101, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 102, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void FireWall::game_dodamage()"}, + {"row": 107, "col": 22, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 109, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 111, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 113, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 117, "col": 2, "type": "INFO", "message": "Compiling void FireWall::firewall_death()"}, + {"row": 121, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'DoDamage'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void FireWall::client_activate()"}, + {"row": 129, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 130, "col": 28, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'TIME_LIVE'"}, + {"row": 135, "col": 2, "type": "INFO", "message": "Compiling void FireWall::firewall_end_cl()"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 140, "col": 2, "type": "INFO", "message": "Compiling void FireWall::flames_shoot()"}, + {"row": 146, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 146, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 155, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 155, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 164, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 164, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 173, "col": 2, "type": "INFO", "message": "Compiling void FireWall::setup_flames()"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 179, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\fire_wall2.as", + "success": false, + "messages": [ + {"row": 29, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::OnRepeatTimer()"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 32, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 35, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 35, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 38, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::OnRepeatTimer_1()"}, + {"row": 40, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 41, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::OnRepeatTimer_2()"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 56, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::game_dynamically_created()"}, + {"row": 59, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 60, "col": 15, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 62, "col": 17, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 63, "col": 8, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'StoreEntity'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 71, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::OnSpawn()"}, + {"row": 73, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 74, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 75, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'MY_DURATION'"}, + {"row": 83, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::define_vars()"}, + {"row": 85, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 87, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 88, "col": 15, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 90, "col": 16, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 92, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::activate_effect()"}, + {"row": 97, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 101, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 104, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::damage_cycle()"}, + {"row": 115, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 115, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 119, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 119, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 123, "col": 42, "type": "ERROR", "message": "Expected expression value"}, + {"row": 123, "col": 42, "type": "ERROR", "message": "Instead found ''"}, + {"row": 130, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::apply_aoe_effect()"}, + {"row": 132, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 133, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 136, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::end_effect()"}, + {"row": 139, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 140, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 143, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::final_remove()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 146, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 149, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::client_activate()"}, + {"row": 151, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 152, "col": 28, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 153, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 156, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::flames_start()"}, + {"row": 158, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 158, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 162, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::flames_shoot()"}, + {"row": 168, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 168, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 177, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 177, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 186, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 186, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 195, "col": 2, "type": "INFO", "message": "Compiling void FireWall2::setup_flames()"}, + {"row": 197, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 198, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 199, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 200, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 201, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 202, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 203, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\ice_wall.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\orc_fire_wall.as", + "success": false, + "messages": [ + {"row": 16, "col": 2, "type": "INFO", "message": "Compiling void OrcFireWall::OnSpawn()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 29, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 31, "col": 24, "type": "ERROR", "message": "No matching symbol 'FIRE_DURATION'"}, + {"row": 32, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 33, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::REMOVE_TIME(const string)'"}, + {"row": 34, "col": 3, "type": "ERROR", "message": "No matching symbol 'FIRE_DURATION'"}, + {"row": 35, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 36, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void OrcFireWall::game_dodamage()"}, + {"row": 42, "col": 22, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 44, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetRelationship'"}, + {"row": 46, "col": 5, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 51, "col": 2, "type": "INFO", "message": "Compiling void OrcFireWall::firewall_death()"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'firewall_end_cl'"}, + {"row": 55, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 55, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 58, "col": 3, "type": "ERROR", "message": "No matching symbol 'DeleteEntity'"}, + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling FireWall::FireWall()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 27, "col": 2, "type": "INFO", "message": "Compiling void FireWall::OnRepeatTimer()"}, + {"row": 29, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 30, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 33, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 33, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void FireWall::OnRepeatTimer_1()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 45, "col": 2, "type": "INFO", "message": "Compiling void FireWall::OnRepeatTimer_2()"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRepeatDelay'"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 54, "col": 2, "type": "INFO", "message": "Compiling void FireWall::flames_start()"}, + {"row": 56, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 56, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void FireWall::OnSpawn()"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 64, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 65, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 66, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 67, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSkillLevel'"}, + {"row": 68, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHearingSensitivity'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 71, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 73, "col": 59, "type": "ERROR", "message": "No matching symbol 'TIME_LIVE'"}, + {"row": 73, "col": 41, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 73, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 74, "col": 14, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'FIRE_DURATION'"}, + {"row": 77, "col": 24, "type": "ERROR", "message": "No matching symbol 'FIRE_DURATION'"}, + {"row": 78, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 79, "col": 3, "type": "ERROR", "message": "No matching signatures to 'string::REMOVE_TIME(const string)'"}, + {"row": 80, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAngles'"}, + {"row": 81, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 85, "col": 2, "type": "INFO", "message": "Compiling void FireWall::remove_invul()"}, + {"row": 87, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 88, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 95, "col": 2, "type": "INFO", "message": "Compiling void FireWall::flames_attack()"}, + {"row": 100, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 100, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 101, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 101, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 102, "col": 32, "type": "ERROR", "message": "Expected expression value"}, + {"row": 102, "col": 32, "type": "ERROR", "message": "Instead found ''"}, + {"row": 105, "col": 2, "type": "INFO", "message": "Compiling void FireWall::game_dodamage()"}, + {"row": 107, "col": 22, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 109, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 111, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 113, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 117, "col": 2, "type": "INFO", "message": "Compiling void FireWall::firewall_death()"}, + {"row": 121, "col": 25, "type": "ERROR", "message": "No matching symbol 'CHAN_ITEM'"}, + {"row": 121, "col": 13, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 122, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'DoDamage'"}, + {"row": 124, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetAlive'"}, + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void FireWall::client_activate()"}, + {"row": 129, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 130, "col": 28, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 131, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 132, "col": 3, "type": "ERROR", "message": "No matching symbol 'TIME_LIVE'"}, + {"row": 135, "col": 2, "type": "INFO", "message": "Compiling void FireWall::firewall_end_cl()"}, + {"row": 137, "col": 3, "type": "ERROR", "message": "No matching symbol 'RemoveScript'"}, + {"row": 140, "col": 2, "type": "INFO", "message": "Compiling void FireWall::flames_shoot()"}, + {"row": 146, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 146, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 155, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 155, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 164, "col": 38, "type": "ERROR", "message": "Expected expression value"}, + {"row": 164, "col": 38, "type": "ERROR", "message": "Instead found ''"}, + {"row": 173, "col": 2, "type": "INFO", "message": "Compiling void FireWall::setup_flames()"}, + {"row": 175, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 176, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 177, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 178, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 179, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 180, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"}, + {"row": 181, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEffect'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\poison_gas.as", + "success": false, + "messages": [ + {"row": 17, "col": 2, "type": "INFO", "message": "Compiling void PoisonGas::OnSpawn()"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 24, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 25, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 26, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 27, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 28, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 31, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 34, "col": 2, "type": "INFO", "message": "Compiling void PoisonGas::game_postspawn()"}, + {"row": 36, "col": 8, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 38, "col": 12, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 40, "col": 9, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 41, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetDamageMultiplier'"}, + {"row": 44, "col": 2, "type": "INFO", "message": "Compiling void PoisonGas::start_dot()"}, + {"row": 50, "col": 29, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void PoisonGas::dot_loop()"}, + {"row": 60, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 61, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'XDoDamage'"}, + {"row": 65, "col": 2, "type": "INFO", "message": "Compiling void PoisonGas::dot_dodamage()"}, + {"row": 67, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 68, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 69, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 70, "col": 3, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 73, "col": 2, "type": "INFO", "message": "Compiling void PoisonGas::dot_end()"}, + {"row": 76, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 79, "col": 2, "type": "INFO", "message": "Compiling void PoisonGas::npc_suicide()"}, + {"row": 81, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetOwner'"}, + {"row": 82, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 83, "col": 3, "type": "ERROR", "message": "No matching symbol 'DoDamage'"}, + {"row": 86, "col": 2, "type": "INFO", "message": "Compiling void PoisonGas::game_dynamically_created()"}, + {"row": 88, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 91, "col": 2, "type": "INFO", "message": "Compiling void PoisonGas::set_aoe()"}, + {"row": 93, "col": 14, "type": "ERROR", "message": "No matching symbol 'param1'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\quake.as", + "success": false, + "messages": [ + {"row": 28, "col": 2, "type": "INFO", "message": "Compiling void Quake::game_precache()"}, + {"row": 30, "col": 3, "type": "ERROR", "message": "No matching symbol 'Precache'"}, + {"row": 33, "col": 2, "type": "INFO", "message": "Compiling void Quake::fake_precache()"}, + {"row": 36, "col": 19, "type": "ERROR", "message": "No matching symbol 'SOUND_QUAKE_START'"}, + {"row": 38, "col": 19, "type": "ERROR", "message": "No matching symbol 'SOUND_QUAKE_LOOP'"}, + {"row": 41, "col": 2, "type": "INFO", "message": "Compiling void Quake::OnSpawn()"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 45, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHealth'"}, + {"row": 46, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 47, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 48, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 49, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGravity'"}, + {"row": 50, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 51, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetBloodType'"}, + {"row": 52, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 54, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 58, "col": 2, "type": "INFO", "message": "Compiling void Quake::game_postspawn()"}, + {"row": 60, "col": 15, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 65, "col": 7, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 71, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetDamageMultiplier'"}, + {"row": 75, "col": 2, "type": "INFO", "message": "Compiling void Quake::game_dynamically_created()"}, + {"row": 77, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 78, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 80, "col": 16, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 81, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 85, "col": 23, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 88, "col": 16, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 89, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetRace'"}, + {"row": 93, "col": 2, "type": "INFO", "message": "Compiling void Quake::handle_events()"}, + {"row": 95, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 101, "col": 2, "type": "INFO", "message": "Compiling void Quake::handle_events_loop()"}, + {"row": 103, "col": 20, "type": "ERROR", "message": "No matching symbol 'i'"}, + {"row": 104, "col": 22, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 105, "col": 45, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 107, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 109, "col": 13, "type": "ERROR", "message": "No matching symbol 'PARAM_OUT'"}, + {"row": 112, "col": 2, "type": "INFO", "message": "Compiling void Quake::set_aoe()"}, + {"row": 114, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 116, "col": 15, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 119, "col": 2, "type": "INFO", "message": "Compiling void Quake::set_dur()"}, + {"row": 121, "col": 10, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 122, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 123, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 126, "col": 2, "type": "INFO", "message": "Compiling void Quake::set_global()"}, + {"row": 128, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 142, "col": 2, "type": "INFO", "message": "Compiling void Quake::do_quake()"}, + {"row": 145, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 146, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 149, "col": 21, "type": "ERROR", "message": "No matching symbol 'SOUND_QUAKE_START'"}, + {"row": 151, "col": 21, "type": "ERROR", "message": "No matching symbol 'SOUND_QUAKE_LOOP'"}, + {"row": 156, "col": 3, "type": "ERROR", "message": "Expression doesn't form a function call. 'QUAKE_DURATION' evaluates to the non-function type ''"}, + {"row": 157, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 159, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 160, "col": 4, "type": "ERROR", "message": "No matching symbol 'Effect'"}, + {"row": 161, "col": 4, "type": "ERROR", "message": "No matching symbol 'ClientEvent'"}, + {"row": 165, "col": 4, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 166, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 170, "col": 2, "type": "INFO", "message": "Compiling void Quake::quake_loop()"}, + {"row": 172, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 173, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 174, "col": 17, "type": "ERROR", "message": "No matching symbol 'FindEntitiesInSphere'"}, + {"row": 176, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 182, "col": 2, "type": "INFO", "message": "Compiling void Quake::global_quake_loop()"}, + {"row": 184, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 185, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 187, "col": 3, "type": "ERROR", "message": "No matching signatures to 'GetAllPlayers(string)'"}, + {"row": 187, "col": 3, "type": "INFO", "message": "Candidates are:"}, + {"row": 187, "col": 3, "type": "INFO", "message": "CBasePlayer@[]@ GetAllPlayers()"}, + {"row": 189, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 195, "col": 2, "type": "INFO", "message": "Compiling void Quake::quake_applyeffect()"}, + {"row": 197, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 198, "col": 9, "type": "ERROR", "message": "No matching symbol 'IsOnGround'"}, + {"row": 199, "col": 18, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 200, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 201, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 203, "col": 8, "type": "WARN", "message": "Variable 'L_DMG' hides another variable of same name in outer scope"}, + {"row": 205, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"}, + {"row": 206, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 208, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 212, "col": 4, "type": "ERROR", "message": "No matching symbol 'ApplyEffect'"}, + {"row": 216, "col": 2, "type": "INFO", "message": "Compiling void Quake::quake_end()"}, + {"row": 218, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 221, "col": 20, "type": "ERROR", "message": "No matching symbol 'SOUND_QUAKE_LOOP'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\splodie_skull.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\splodie_skull_ice.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\\volcano.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\burn_1000.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::Burn1000' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\glow_block.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void GlowBlock::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\glow_unblock.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void GlowUnblock::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\totalhp_trigger.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::TotalhpTrigger' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\touch_test.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::TouchTest' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\trigger_avghp.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::TriggerAvghp' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\trigger_base.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::TriggerBase' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\trigger_burn.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::TriggerBurn' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\trigger_cannon.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::TriggerCannon' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\trigger_if_evil.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::TriggerIfEvil' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\trigger_poison.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::TriggerPoison' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\trigger_web.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void Web::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\trigger_zap.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void TriggerBase::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\undamael_break.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::UndamaelBreak' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\undamael_hurt.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::UndamaelHurt' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\\undamael_pitedge.as", + "success": false, + "messages": [ + {"row": 8, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::UndamaelPitedge' is a class."} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\\base_firepit.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\\firepit1.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\\firepit2.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\\firepit3.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\\firepit4.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\\chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\\keyhole.as", + "success": false, + "messages": [ + {"row": 20, "col": 2, "type": "INFO", "message": "Compiling void Keyhole::OnSpawn()"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 23, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetProp'"}, + {"row": 10, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::OnSpawn()"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetName'"}, + {"row": 13, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetWidth'"}, + {"row": 14, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetHeight'"}, + {"row": 15, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetRoam'"}, + {"row": 16, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetModel'"}, + {"row": 17, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetInvincible'"}, + {"row": 18, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetFly'"}, + {"row": 19, "col": 3, "type": "ERROR", "message": "Expression is not an l-value"}, + {"row": 20, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetSolid'"}, + {"row": 21, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetNoPush'"}, + {"row": 22, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetMenuAutoOpen'"}, + {"row": 25, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::game_menu_getoptions()"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 29, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 30, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 31, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 32, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 2, "type": "INFO", "message": "Compiling void BaseKeyhole::key_used()"}, + {"row": 38, "col": 3, "type": "ERROR", "message": "No matching symbol 'UseTrigger'"}, + {"row": 39, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'int&'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\\key_chest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\\prisoner.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\\rat.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\\slave.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\\slavemaster.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/undercrypts\\dq_undercrypts_tnt.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/undercrypts\\gesoth.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\\cl_world.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling void ClWorld::game_newlevel()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 11, "col": 20, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 14, "col": 2, "type": "INFO", "message": "Compiling void ClWorld::testmap_newlevel()"}, + {"row": 18, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 18, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 19, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 19, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 20, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 20, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 21, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 22, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 22, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 23, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 25, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 25, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 26, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 26, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 27, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 27, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 28, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 28, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 29, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 29, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 30, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 30, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 31, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 31, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 36, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 36, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 37, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 37, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 38, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 38, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 39, "col": 11, "type": "ERROR", "message": "Expected ';'"}, + {"row": 39, "col": 11, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 40, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 40, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 41, "col": 8, "type": "ERROR", "message": "Expected '('"}, + {"row": 41, "col": 8, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 44, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 44, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 45, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 45, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 46, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 46, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 47, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 48, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 49, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 52, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 53, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 53, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 54, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 54, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Expected ';'"}, + {"row": 55, "col": 10, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 56, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 56, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 57, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 57, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"}, + {"row": 58, "col": 7, "type": "ERROR", "message": "Expected '('"}, + {"row": 58, "col": 7, "type": "ERROR", "message": "Instead found identifier 'reg'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\\server\\commands.as", + "success": false, + "messages": [ + {"row": 25, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 25, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Expected identifier"}, + {"row": 27, "col": 10, "type": "ERROR", "message": "Instead found '('"}, + {"row": 759, "col": 58, "type": "ERROR", "message": "Non-terminated string literal"}, + {"row": 768, "col": 1, "type": "ERROR", "message": "Unexpected end of file"}, + {"row": 6, "col": 1, "type": "INFO", "message": "While parsing namespace"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\\server\\help.as", + "success": false, + "messages": [ + {"row": 127, "col": 2, "type": "INFO", "message": "Compiling void Help::game_playercmd()"}, + {"row": 129, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 133, "col": 28, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 138, "col": 9, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 140, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityMaxHealth'"}, + {"row": 141, "col": 14, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 143, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 144, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 148, "col": 15, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 150, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 152, "col": 8, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 153, "col": 8, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 155, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 157, "col": 8, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 158, "col": 8, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 160, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 162, "col": 8, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 163, "col": 8, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 165, "col": 16, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 167, "col": 8, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 168, "col": 8, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 178, "col": 5, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 179, "col": 5, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 180, "col": 9, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 182, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 183, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 185, "col": 9, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 187, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 188, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 190, "col": 9, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 192, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 193, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 195, "col": 9, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 197, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 198, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 200, "col": 9, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 202, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 203, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 205, "col": 9, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 207, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 208, "col": 6, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_STOP'"}, + {"row": 211, "col": 8, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 213, "col": 11, "type": "ERROR", "message": "No matching symbol 'L_LISTING_CUSTOM'"}, + {"row": 215, "col": 10, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 224, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 236, "col": 8, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 250, "col": 9, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 262, "col": 2, "type": "INFO", "message": "Compiling void Help::do_listmaps()"}, + {"row": 265, "col": 7, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 268, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 270, "col": 7, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 273, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 275, "col": 7, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 278, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 280, "col": 7, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 283, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 285, "col": 7, "type": "ERROR", "message": "No matching symbol 'LISTMAPS_START'"}, + {"row": 288, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 292, "col": 2, "type": "INFO", "message": "Compiling void Help::do_listmaps_low()"}, + {"row": 294, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 294, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 297, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 297, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 301, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 301, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 316, "col": 2, "type": "INFO", "message": "Compiling void Help::do_listmaps_medium()"}, + {"row": 318, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 318, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 321, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 321, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 325, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 325, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 340, "col": 2, "type": "INFO", "message": "Compiling void Help::do_listmaps_hard()"}, + {"row": 342, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 342, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 345, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 345, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 349, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 349, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 364, "col": 2, "type": "INFO", "message": "Compiling void Help::do_listmaps_vhard()"}, + {"row": 366, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 366, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 369, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 369, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 373, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 373, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 388, "col": 2, "type": "INFO", "message": "Compiling void Help::do_listmaps_epic()"}, + {"row": 390, "col": 53, "type": "ERROR", "message": "Expected expression value"}, + {"row": 390, "col": 53, "type": "ERROR", "message": "Instead found ''"}, + {"row": 393, "col": 51, "type": "ERROR", "message": "Expected expression value"}, + {"row": 393, "col": 51, "type": "ERROR", "message": "Instead found ''"}, + {"row": 397, "col": 3, "type": "ERROR", "message": "Expected expression value"}, + {"row": 397, "col": 3, "type": "ERROR", "message": "Instead found reserved keyword 'else'"}, + {"row": 403, "col": 2, "type": "INFO", "message": "Compiling void Help::list_custom_maps2()"}, + {"row": 405, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 406, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 407, "col": 9, "type": "ERROR", "message": "No matching symbol 'CUSTOM_COUNT'"}, + {"row": 408, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 409, "col": 8, "type": "ERROR", "message": "No matching symbol 'ValidateMapName'"}, + {"row": 413, "col": 7, "type": "ERROR", "message": "No matching symbol 'CUSTOM_COUNT'"}, + {"row": 419, "col": 3, "type": "ERROR", "message": "No matching symbol 'CUSTOM_COUNT'"}, + {"row": 420, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\\server\\maps.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling Maps::Maps()"}, + {"row": 18, "col": 36, "type": "ERROR", "message": "Expected expression value"}, + {"row": 18, "col": 36, "type": "ERROR", "message": "Instead found ''"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\\server\\player_vote.as", + "success": false, + "messages": [ + {"row": 18, "col": 2, "type": "INFO", "message": "Compiling void PlayerVote::game_playercmd()"}, + {"row": 20, "col": 24, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 21, "col": 24, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 22, "col": 24, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 23, "col": 24, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 24, "col": 24, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 27, "col": 11, "type": "WARN", "message": "Variable 'VOTE_PARAM1' hides another variable of same name in outer scope"}, + {"row": 27, "col": 25, "type": "ERROR", "message": "No matching symbol 'param3'"}, + {"row": 28, "col": 11, "type": "WARN", "message": "Variable 'VOTE_PARAM2' hides another variable of same name in outer scope"}, + {"row": 28, "col": 25, "type": "ERROR", "message": "No matching symbol 'param4'"}, + {"row": 29, "col": 11, "type": "WARN", "message": "Variable 'VOTE_PARAM3' hides another variable of same name in outer scope"}, + {"row": 29, "col": 25, "type": "ERROR", "message": "No matching symbol 'param5'"}, + {"row": 30, "col": 11, "type": "WARN", "message": "Variable 'VOTE_PARAM4' hides another variable of same name in outer scope"}, + {"row": 30, "col": 25, "type": "ERROR", "message": "No matching symbol 'param6'"}, + {"row": 31, "col": 11, "type": "WARN", "message": "Variable 'VOTE_PARAM5' hides another variable of same name in outer scope"}, + {"row": 31, "col": 25, "type": "ERROR", "message": "No matching symbol 'param7'"}, + {"row": 35, "col": 101, "type": "ERROR", "message": "No matching symbol 'VOTE_PARAM7'"}, + {"row": 35, "col": 88, "type": "ERROR", "message": "No matching symbol 'VOTE_PARAM6'"}, + {"row": 39, "col": 2, "type": "INFO", "message": "Compiling void PlayerVote::check_vote_options()"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'check_can_vote'"}, + {"row": 43, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 44, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 47, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 51, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 53, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 56, "col": 25, "type": "ERROR", "message": "No matching symbol 'param2'"}, + {"row": 57, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 59, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 62, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 66, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 68, "col": 8, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 73, "col": 11, "type": "ERROR", "message": "No matching symbol 'G_DEVELOPER_MODE'"}, + {"row": 78, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 81, "col": 10, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 84, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 86, "col": 7, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 88, "col": 9, "type": "ERROR", "message": "No matching symbol 'G_SERVER_LOCKED'"}, + {"row": 90, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 94, "col": 10, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 97, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 99, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 103, "col": 10, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 108, "col": 11, "type": "ERROR", "message": "No matching symbol 'G_DEVELOPER_MODE'"}, + {"row": 111, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 115, "col": 10, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 118, "col": 20, "type": "ERROR", "message": "No matching symbol 'GetEntityIndex'"}, + {"row": 122, "col": 2, "type": "INFO", "message": "Compiling void PlayerVote::player_votemap()"}, + {"row": 124, "col": 26, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 125, "col": 26, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 127, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 128, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'string'"}, + {"row": 131, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 134, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 137, "col": 10, "type": "ERROR", "message": "No matching symbol 'G_DEVELOPER_MODE'"}, + {"row": 140, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 144, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 147, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 148, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 153, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 156, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 158, "col": 23, "type": "ERROR", "message": "No matching symbol 'MAPS_FN1'"}, + {"row": 159, "col": 23, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 160, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 162, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 165, "col": 8, "type": "WARN", "message": "Variable 'LEGAL_FN_MAP' hides another variable of same name in outer scope"}, + {"row": 167, "col": 10, "type": "ERROR", "message": "'SEARCH_SET' is already declared"}, + {"row": 168, "col": 10, "type": "ERROR", "message": "'SEARCH_IDX' is already declared"}, + {"row": 169, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 171, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 174, "col": 8, "type": "WARN", "message": "Variable 'LEGAL_FN_MAP' hides another variable of same name in outer scope"}, + {"row": 176, "col": 10, "type": "ERROR", "message": "'SEARCH_SET' is already declared"}, + {"row": 177, "col": 10, "type": "ERROR", "message": "'SEARCH_IDX' is already declared"}, + {"row": 178, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 180, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 183, "col": 8, "type": "WARN", "message": "Variable 'LEGAL_FN_MAP' hides another variable of same name in outer scope"}, + {"row": 185, "col": 10, "type": "ERROR", "message": "'SEARCH_SET' is already declared"}, + {"row": 186, "col": 10, "type": "ERROR", "message": "'SEARCH_IDX' is already declared"}, + {"row": 187, "col": 18, "type": "ERROR", "message": "No conversion from 'string' to 'int' available."}, + {"row": 189, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 192, "col": 8, "type": "WARN", "message": "Variable 'LEGAL_FN_MAP' hides another variable of same name in outer scope"}, + {"row": 194, "col": 7, "type": "ERROR", "message": "Expression must be of boolean type, instead found 'const string'"}, + {"row": 196, "col": 8, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 199, "col": 8, "type": "WARN", "message": "Variable 'LEGAL_FN_MAP' hides another variable of same name in outer scope"}, + {"row": 200, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 204, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 210, "col": 9, "type": "WARN", "message": "Variable 'ALLOW_VOTE' hides another variable of same name in outer scope"}, + {"row": 214, "col": 9, "type": "WARN", "message": "Variable 'ALLOW_VOTE' hides another variable of same name in outer scope"}, + {"row": 218, "col": 9, "type": "WARN", "message": "Variable 'ALLOW_VOTE' hides another variable of same name in outer scope"}, + {"row": 220, "col": 8, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 222, "col": 9, "type": "WARN", "message": "Variable 'ALLOW_VOTE' hides another variable of same name in outer scope"}, + {"row": 224, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 227, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 231, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 232, "col": 7, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 234, "col": 8, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 237, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 241, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 242, "col": 7, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 247, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 251, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 256, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 257, "col": 7, "type": "ERROR", "message": "No matching symbol 'FindToken'"}, + {"row": 261, "col": 11, "type": "ERROR", "message": "No matching symbol 'L_NO_GAUNLET_MESSAGE'"}, + {"row": 267, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 271, "col": 5, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 276, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 277, "col": 9, "type": "ERROR", "message": "No matching symbol 'ValidateMapName'"}, + {"row": 279, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 283, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 284, "col": 7, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 286, "col": 8, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 289, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 293, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 298, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 301, "col": 2, "type": "INFO", "message": "Compiling void PlayerVote::list_custom_maps()"}, + {"row": 303, "col": 23, "type": "ERROR", "message": "No matching symbol 'GetTokenCount'"}, + {"row": 304, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 307, "col": 8, "type": "ERROR", "message": "No matching symbol 'MAPS_UNCONNECTEDS'"}, + {"row": 311, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 314, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 316, "col": 21, "type": "ERROR", "message": "No matching symbol 'GetToken'"}, + {"row": 317, "col": 8, "type": "ERROR", "message": "No matching symbol 'ValidateMapName'"}, + {"row": 322, "col": 3, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 325, "col": 2, "type": "INFO", "message": "Compiling void PlayerVote::player_votepvp()"}, + {"row": 327, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 330, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 333, "col": 8, "type": "ERROR", "message": "No matching symbol 'EXIT_SUB'"}, + {"row": 334, "col": 19, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 335, "col": 7, "type": "ERROR", "message": "Illegal operation on this datatype"}, + {"row": 339, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 345, "col": 24, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 347, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"}, + {"row": 350, "col": 2, "type": "INFO", "message": "Compiling void PlayerVote::player_votelock()"}, + {"row": 352, "col": 24, "type": "ERROR", "message": "No conversion from 'const string' to 'int' available."}, + {"row": 356, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 359, "col": 8, "type": "ERROR", "message": "No matching symbol 'GetEntityProperty'"}, + {"row": 363, "col": 4, "type": "ERROR", "message": "No matching symbol 'SendColoredMessage'"}, + {"row": 366, "col": 21, "type": "ERROR", "message": "No matching symbol 'param1'"}, + {"row": 368, "col": 19, "type": "ERROR", "message": "No matching symbol 'GetEntityName'"}, + {"row": 369, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\\server\\time.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 10, "col": 6, "type": "ERROR", "message": "Expected identifier"}, + {"row": 10, "col": 6, "type": "ERROR", "message": "Instead found '('"}, + {"row": 110, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\\server\\time_vote.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found identifier 'string'"}, + {"row": 55, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\\sv_world.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "INFO", "message": "Compiling SvWorld::SvWorld()"}, + {"row": 10, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 11, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 12, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 15, "col": 2, "type": "INFO", "message": "Compiling void SvWorld::OnSpawn()"}, + {"row": 17, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_OVERRIDE_WEATHER_CODE'"}, + {"row": 21, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_OVERRIDE_WEATHER_CODE'"}, + {"row": 25, "col": 8, "type": "ERROR", "message": "No matching symbol 'OVERRIDE_WEATHER'"}, + {"row": 27, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 31, "col": 4, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 33, "col": 23, "type": "ERROR", "message": "No matching symbol 'StringToLower'"}, + {"row": 36, "col": 4, "type": "ERROR", "message": "No matching symbol 'ScheduleDelayedEvent'"}, + {"row": 40, "col": 2, "type": "INFO", "message": "Compiling void SvWorld::set_pvp()"}, + {"row": 42, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 43, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetCvar'"}, + {"row": 44, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetPvP'"}, + {"row": 47, "col": 2, "type": "INFO", "message": "Compiling void SvWorld::game_playerjoin()"}, + {"row": 49, "col": 20, "type": "ERROR", "message": "No matching symbol 'G_WARN_HP'"}, + {"row": 50, "col": 7, "type": "ERROR", "message": "No matching symbol 'G_WARN_HP'"}, + {"row": 52, "col": 8, "type": "WARN", "message": "Variable 'HP_TICK' hides another variable of same name in outer scope"}, + {"row": 55, "col": 3, "type": "ERROR", "message": "Illegal operation on 'string'"}, + {"row": 56, "col": 3, "type": "ERROR", "message": "No matching symbol 'SetGlobalVar'"}, + {"row": 57, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 60, "col": 2, "type": "INFO", "message": "Compiling void SvWorld::game_playerleave()"}, + {"row": 62, "col": 3, "type": "ERROR", "message": "No matching symbol 'LogDebug'"}, + {"row": 63, "col": 3, "type": "ERROR", "message": "No matching symbol 'CallExternal'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world.as", + "success": false, + "messages": [ + {"row": 0, "col": 0, "type": "ERROR", "message": "Failed to load file"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/worlditems\\clock_base.as", + "success": false, + "messages": [ + {"row": 8, "col": 2, "type": "ERROR", "message": "Expected method or property"}, + {"row": 8, "col": 2, "type": "ERROR", "message": "Instead found reserved keyword 'int'"}, + {"row": 9, "col": 11, "type": "ERROR", "message": "Expected '('"}, + {"row": 9, "col": 11, "type": "ERROR", "message": "Instead found '.'"}, + {"row": 67, "col": 1, "type": "ERROR", "message": "Unexpected token '}'"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/worlditems\\map_startup.as", + "success": false, + "messages": [ + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/worlditems\\TC_sewer.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/worlditems\\treasurechest.as", + "success": false, + "messages": [ + {"row": 636, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ww1\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ww2b\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + }, + { + "file": "C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ww3d\\map_startup.as", + "success": false, + "messages": [ + {"row": 6, "col": 7, "type": "ERROR", "message": "Name conflict. 'MS::MapStartup' is a class."}, + {"row": 62, "col": 2, "type": "ERROR", "message": "A function with the same name and parameters already exists"} + ] + } + ] +} diff --git a/lint_report.txt b/lint_report.txt new file mode 100644 index 00000000..962b38a0 --- /dev/null +++ b/lint_report.txt @@ -0,0 +1,36916 @@ +=== AngelScript Compilation Report === +Total: 2928 | Passed: 30 | Failed: 2898 | Warnings: 726 + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\!uuuuuuuuuuuuuuuugh.as + (6, 7) ERROR: Expected identifier + (6, 7) ERROR: Instead found reserved keyword '!' + (6, 7) ERROR: Expected '{' + (6, 7) ERROR: Instead found reserved keyword '!' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\a3TC1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\a3TC2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\a3TC3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\a3TC4.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\a3TC5.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\a3TC6.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\bookbat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\merc1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\nightmare_a3TC1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\nightmare_a3TC2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\nightmare_a3TC3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\nightmare_a3TC4.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\nightmare_a3TC5.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\nightmare_a3TC6.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\nightmare_TC_orcs.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\olof.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\rudolfschest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/a3\TC_orcs.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aleyesu\death_image.as + (21, 2) INFO: Compiling void DeathImage::OnRepeatTimer() + (23, 3) ERROR: No matching symbol 'SetRepeatDelay' + (24, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (29, 4) ERROR: No matching symbol 'ClientEffect' + (33, 4) ERROR: No matching symbol 'ClientEffect' + (34, 4) ERROR: No matching symbol 'ClientEffect' + (35, 4) ERROR: No matching symbol 'ClientEffect' + (39, 2) INFO: Compiling void DeathImage::OnSpawn() + (41, 3) ERROR: No matching symbol 'SetName' + (42, 3) ERROR: No matching symbol 'SetModel' + (43, 3) ERROR: No matching symbol 'SetWidth' + (44, 3) ERROR: No matching symbol 'SetHeight' + (45, 3) ERROR: No matching symbol 'SetRoam' + (46, 3) ERROR: No matching symbol 'SetInvincible' + (48, 3) ERROR: No matching symbol 'SetIdleAnim' + (49, 3) ERROR: No matching symbol 'SetMoveAnim' + (50, 3) ERROR: No matching symbol 'SetSayTextRange' + (51, 3) ERROR: No matching symbol 'SetSolid' + (52, 3) ERROR: No matching symbol 'SetProp' + (53, 3) ERROR: No matching symbol 'SetProp' + (54, 3) ERROR: No matching symbol 'SetProp' + (55, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 3) ERROR: No matching signatures to 'EmitSound(const int, const int, const string)' + (59, 3) INFO: Candidates are: + (59, 3) INFO: void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int) + (59, 3) INFO: Rejected due to not enough parameters + (59, 3) INFO: void EmitSound(CBaseEntity@, const string&in) + (59, 3) INFO: void EmitSound(CBaseEntity@, const string&in, float) + (59, 3) INFO: Rejected due to type mismatch at positional parameter 1 + (62, 2) INFO: Compiling void DeathImage::say_stuff1() + (64, 3) ERROR: No matching symbol 'SayText' + (65, 3) ERROR: No matching symbol 'UseTrigger' + (66, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (69, 2) INFO: Compiling void DeathImage::say_stuff2() + (71, 3) ERROR: No matching symbol 'SayText' + (75, 2) INFO: Compiling void DeathImage::spinout_done() + (78, 3) ERROR: No matching signatures to 'EmitSound(const int, const int, const string)' + (78, 3) INFO: Candidates are: + (78, 3) INFO: void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int) + (78, 3) INFO: Rejected due to not enough parameters + (78, 3) INFO: void EmitSound(CBaseEntity@, const string&in) + (78, 3) INFO: void EmitSound(CBaseEntity@, const string&in, float) + (78, 3) INFO: Rejected due to type mismatch at positional parameter 1 + (79, 13) ERROR: No matching symbol 'GetOwner' + (80, 3) ERROR: No matching symbol 'SetProp' + (81, 3) ERROR: No matching symbol 'ClientEvent' + (82, 3) ERROR: No matching symbol 'Effect' + (83, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (84, 8) ERROR: No matching symbol 'GetEntityProperty' + (85, 3) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (85, 3) INFO: Candidates are: + (85, 3) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (85, 3) INFO: Rejected due to type mismatch at positional parameter 2 + (88, 2) INFO: Compiling void DeathImage::remove_me1() + (90, 3) ERROR: No matching symbol 'ClientEvent' + (91, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (94, 2) INFO: Compiling void DeathImage::remove_me2() + (96, 7) ERROR: Illegal operation on this datatype + (98, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (100, 7) ERROR: Illegal operation on this datatype + (101, 3) ERROR: No matching symbol 'DeleteEntity' + (104, 2) INFO: Compiling void DeathImage::setup_spinout() + (107, 29) ERROR: Expected expression value + (107, 29) ERROR: Instead found '' + (112, 2) INFO: Compiling void DeathImage::spinout_loop() + (117, 35) ERROR: Expected expression value + (117, 35) ERROR: Instead found '' + (141, 2) INFO: Compiling void DeathImage::game_dynamically_created() + (143, 19) ERROR: No matching symbol 'param1' + (144, 3) ERROR: No matching symbol 'ClientEvent' + (148, 2) INFO: Compiling void DeathImage::client_activate() + (150, 19) ERROR: No matching symbol 'param1' + (160, 2) INFO: Compiling void DeathImage::glow_sprite() + (162, 3) ERROR: No matching symbol 'ClientEffect' + (163, 3) ERROR: No matching symbol 'ClientEffect' + (164, 3) ERROR: No matching symbol 'ClientEffect' + (165, 3) ERROR: No matching symbol 'ClientEffect' + (166, 3) ERROR: No matching symbol 'ClientEffect' + (167, 3) ERROR: No matching symbol 'ClientEffect' + (168, 3) ERROR: No matching symbol 'ClientEffect' + (169, 3) ERROR: No matching symbol 'ClientEffect' + (170, 3) ERROR: No matching symbol 'ClientEffect' + (171, 3) ERROR: No matching symbol 'ClientEffect' + (174, 2) INFO: Compiling void DeathImage::explode_sprite() + (176, 3) ERROR: No matching symbol 'ClientEffect' + (177, 3) ERROR: No matching symbol 'ClientEffect' + (178, 3) ERROR: No matching symbol 'ClientEffect' + (179, 3) ERROR: No matching symbol 'ClientEffect' + (180, 3) ERROR: No matching symbol 'ClientEffect' + (181, 3) ERROR: No matching symbol 'ClientEffect' + (182, 3) ERROR: No matching symbol 'ClientEffect' + (183, 3) ERROR: No matching symbol 'ClientEffect' + (184, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aleyesu\final_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aleyesu\k_cult_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aleyesu\snakeman_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aleyesu\spider_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aluhandra\sorc_loot.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/aluhandra\trio_loot.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/animals\bats.as + (10, 2) INFO: Compiling void Bats::OnRepeatTimer() + (12, 3) ERROR: No matching symbol 'SetRepeatDelay' + (13, 3) ERROR: No matching symbol 'SetVolume' + (14, 13) ERROR: No matching symbol 'GetOwner' + (17, 2) INFO: Compiling void Bats::OnSpawn() + (19, 3) ERROR: No matching symbol 'SetHealth' + (20, 3) ERROR: No matching symbol 'SetMaxHealth' + (21, 3) ERROR: No matching symbol 'SetGold' + (22, 3) ERROR: No matching symbol 'SetWidth' + (23, 3) ERROR: No matching symbol 'SetHeight' + (24, 3) ERROR: No matching symbol 'SetRace' + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetRoam' + (27, 3) ERROR: No matching symbol 'SetFly' + (28, 3) ERROR: No matching symbol 'SetModel' + (29, 3) ERROR: No matching symbol 'SetIdleAnim' + (31, 3) ERROR: No matching symbol 'SetInvincible' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/animals\bunny.as + (8, 2) INFO: Compiling void Bunny::OnRepeatTimer() + (10, 3) ERROR: No matching symbol 'SetRepeatDelay' + (11, 3) ERROR: No matching symbol 'PlayAnim' + (14, 2) INFO: Compiling void Bunny::OnSpawn() + (16, 3) ERROR: No matching symbol 'SetHealth' + (17, 3) ERROR: No matching symbol 'SetMaxHealth' + (18, 3) ERROR: No matching symbol 'SetGold' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetRace' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetIdleAnim' + (26, 3) ERROR: No matching symbol 'SetInvincible' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\charon.as + (21, 2) INFO: Compiling void Charon::OnSpawn() + (23, 3) ERROR: No matching symbol 'SetHealth' + (24, 3) ERROR: No matching symbol 'SetName' + (25, 3) ERROR: No matching symbol 'SetWidth' + (26, 3) ERROR: No matching symbol 'SetHeight' + (27, 3) ERROR: No matching symbol 'SetRace' + (28, 3) ERROR: No matching symbol 'SetRoam' + (29, 3) ERROR: No matching symbol 'SetModel' + (30, 3) ERROR: No matching symbol 'SetInvincible' + (31, 3) ERROR: No matching symbol 'SetModelBody' + (32, 3) ERROR: No matching symbol 'SetModelBody' + (36, 3) ERROR: No matching symbol 'CatchSpeech' + (37, 3) ERROR: No matching symbol 'CatchSpeech' + (38, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (47, 2) INFO: Compiling void Charon::say_hi() + (49, 21) ERROR: No conversion from 'string' to 'float' available. + (51, 4) ERROR: No matching symbol 'PlayAnim' + (52, 4) ERROR: No matching symbol 'SayText' + (54, 21) ERROR: No conversion from 'string' to 'float' available. + (56, 4) ERROR: No matching symbol 'PlayAnim' + (57, 23) ERROR: No matching symbol 'param1' + (59, 5) ERROR: No matching symbol 'face_speaker' + (61, 9) ERROR: No matching signatures to 'IsEntityAlive(const string)' + (61, 9) INFO: Candidates are: + (61, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (61, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (63, 5) ERROR: No matching symbol 'face_speaker' + (65, 4) ERROR: No matching symbol 'SayText' + (66, 4) ERROR: No matching symbol 'SayText' + (70, 2) INFO: Compiling void Charon::say_orc() + (72, 3) ERROR: No matching symbol 'PlayAnim' + (73, 8) ERROR: No matching signatures to 'IsEntityAlive(const string)' + (73, 8) INFO: Candidates are: + (73, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (73, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (75, 4) ERROR: No matching symbol 'face_speaker' + (77, 3) ERROR: No matching symbol 'SayText' + (80, 2) INFO: Compiling void Charon::game_menu_getoptions() + (82, 10) ERROR: Expected ';' + (82, 10) ERROR: Instead found identifier 'reg' + (83, 10) ERROR: Expected ';' + (83, 10) ERROR: Instead found identifier 'reg' + (84, 10) ERROR: Expected ';' + (84, 10) ERROR: Instead found identifier 'reg' + (87, 2) INFO: Compiling void Charon::vote_deralia() + (89, 3) ERROR: No matching symbol 'SayText' + (90, 3) ERROR: No matching symbol 'UseTrigger' + (91, 3) ERROR: No matching symbol 'SendColoredMessage' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\chest1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\chest2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\chest3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\chest4.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\chest5.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ara\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/badlands\djinn_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/badlands\random_cave.as + (10, 2) INFO: Compiling void RandomCave::OnSpawn() + (15, 3) ERROR: No matching symbol 'UseTrigger' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/belmont\bandit_extortionist.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/belmont\bartender.as + (8, 7) ERROR: Method 'void Bartender::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\atholo.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\atholo_statue.as + (10, 2) INFO: Compiling AtholoStatue::AtholoStatue() + (13, 3) ERROR: No matching symbol 'Precache' + (14, 3) ERROR: No matching symbol 'Precache' + (15, 3) ERROR: No matching symbol 'Precache' + (16, 3) ERROR: No matching symbol 'Precache' + (17, 3) ERROR: No matching symbol 'Precache' + (18, 3) ERROR: No matching symbol 'Precache' + (19, 3) ERROR: No matching symbol 'Precache' + (20, 3) ERROR: No matching symbol 'Precache' + (21, 3) ERROR: No matching symbol 'Precache' + (22, 3) ERROR: No matching symbol 'Precache' + (23, 3) ERROR: No matching symbol 'Precache' + (24, 3) ERROR: No matching symbol 'Precache' + (25, 3) ERROR: No matching symbol 'Precache' + (26, 3) ERROR: No matching symbol 'Precache' + (31, 2) INFO: Compiling void AtholoStatue::OnSpawn() + (33, 3) ERROR: No matching symbol 'SetName' + (34, 3) ERROR: No matching symbol 'SetName' + (35, 3) ERROR: No matching symbol 'SetInvincible' + (36, 3) ERROR: No matching symbol 'SetWidth' + (37, 3) ERROR: No matching symbol 'SetHeight' + (38, 3) ERROR: No matching symbol 'SetSolid' + (39, 3) ERROR: No matching symbol 'SetModel' + (42, 2) INFO: Compiling void AtholoStatue::spawn_atholo() + (44, 17) ERROR: No matching symbol 'param1' + (45, 3) ERROR: No matching symbol 'Effect' + (46, 28) ERROR: No matching symbol 'SOUND_SPAWN' + (46, 13) ERROR: No matching symbol 'GetOwner' + (47, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (48, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (51, 2) INFO: Compiling void AtholoStatue::gibify() + (54, 65) ERROR: Expected expression value + (54, 65) ERROR: Instead found '' + (57, 2) INFO: Compiling void AtholoStatue::summon_atholo() + (60, 40) ERROR: Expected expression value + (60, 40) ERROR: Instead found '' + (61, 52) ERROR: Expected expression value + (61, 52) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\chest_a1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\chest_a2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\chest_a3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\chest_a4.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\chest_a_base.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\chest_b1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\chest_b2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\chest_b3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\chest_b4.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\chest_b_base.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\key_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\protect_me.as + (6, 7) ERROR: Method 'void ProtectMe::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\ryza.as + (8, 7) ERROR: Method 'void Ryza::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\stone_trap.as + (6, 7) ERROR: Method 'void StoneTrap::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\trigger_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\trigger_cold.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\trigger_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\trigger_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\trigger_monitor.as + (15, 2) INFO: Compiling TriggerMonitor::TriggerMonitor() + (17, 3) ERROR: No matching symbol 'SetGlobalVar' + (18, 3) ERROR: No matching symbol 'SetGlobalVar' + (19, 3) ERROR: No matching symbol 'SetGlobalVar' + (20, 3) ERROR: No matching symbol 'SetGlobalVar' + (23, 2) INFO: Compiling void TriggerMonitor::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetModel' + (27, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'SetFly' + (29, 3) ERROR: No matching symbol 'SetRoam' + (30, 3) ERROR: No matching symbol 'SetMoveSpeed' + (31, 3) ERROR: No matching symbol 'SetRace' + (32, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 2) INFO: Compiling void TriggerMonitor::monitor_triggers() + (38, 14) ERROR: No conversion from 'string' to math type available. + (39, 14) ERROR: No conversion from 'string' to math type available. + (40, 14) ERROR: No conversion from 'string' to math type available. + (41, 14) ERROR: No conversion from 'string' to math type available. + (44, 16) ERROR: No matching symbol 'FindEntityByName' + (45, 4) ERROR: No matching symbol 'CallExternal' + (46, 4) ERROR: No matching symbol 'UseTrigger' + (47, 4) ERROR: No matching symbol 'CallExternal' + (50, 7) ERROR: Expression must be of boolean type, instead found 'string' + (51, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (54, 2) INFO: Compiling void TriggerMonitor::trigger_on() + (56, 7) ERROR: No matching symbol 'param1' + (60, 7) ERROR: No matching symbol 'param1' + (64, 7) ERROR: No matching symbol 'param1' + (68, 7) ERROR: No matching symbol 'param1' + (74, 2) INFO: Compiling void TriggerMonitor::trigger_off() + (76, 7) ERROR: No matching symbol 'param1' + (80, 7) ERROR: No matching symbol 'param1' + (84, 7) ERROR: No matching symbol 'param1' + (88, 7) ERROR: No matching symbol 'param1' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\trigger_poison.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodrose\venevus.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodshrine\base_sorc_friendly.as + (263, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodshrine\game_master.as + (13, 2) INFO: Compiling void GameMaster::gm_bloodshrine_sorc_check() + (16, 3) ERROR: No matching signatures to 'GetAllPlayers(int&)' + (16, 3) INFO: Candidates are: + (16, 3) INFO: CBasePlayer@[]@ GetAllPlayers() + (18, 23) ERROR: No matching symbol 'GetTokenCount' + (22, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (24, 4) ERROR: No matching symbol 'UseTrigger' + (28, 4) ERROR: No matching symbol 'UseTrigger' + (32, 2) INFO: Compiling void GameMaster::gm_bloodshrine_sorc_door() + (34, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (36, 4) ERROR: No matching symbol 'UseTrigger' + (37, 4) ERROR: No matching symbol 'CallExternal' + (41, 4) ERROR: No matching symbol 'UseTrigger' + (42, 4) ERROR: No matching symbol 'UseTrigger' + (46, 2) INFO: Compiling void GameMaster::search_for_blood_drinker() + (48, 20) ERROR: No matching symbol 'i' + (49, 23) ERROR: No matching symbol 'GetToken' + (50, 9) ERROR: No matching symbol 'ItemExists' + (54, 2) INFO: Compiling void GameMaster::gm_bloodshrine_boss_fx() + (56, 20) ERROR: No matching symbol 'FindEntityByName' + (57, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (57, 9) INFO: Candidates are: + (57, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (57, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (58, 3) ERROR: No matching symbol 'CallExternal' + (61, 2) INFO: Compiling void GameMaster::gm_bloodshrine_sfs_dead() + (63, 3) ERROR: No matching symbol 'CallExternal' + (67, 2) INFO: Compiling void GameMaster::gm_bloodshrine_fsorc_tele() + (69, 7) ERROR: Illegal operation on this datatype + (70, 8) ERROR: No matching symbol 'GM_INIT_TO_TELE' + (71, 24) ERROR: No matching symbol 'FindEntityByName' + (72, 24) ERROR: No matching symbol 'FindEntityByName' + (73, 24) ERROR: No matching symbol 'FindEntityByName' + (75, 18) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (75, 18) INFO: Candidates are: + (75, 18) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (75, 18) INFO: Rejected due to type mismatch at positional parameter 1 + (76, 7) ERROR: No matching signatures to 'Distance(string, string)' + (76, 7) INFO: Candidates are: + (76, 7) INFO: float Distance(const Vector3&in, const Vector3&in) + (76, 7) INFO: Rejected due to type mismatch at positional parameter 1 + (80, 10) ERROR: 'L_ORG' is already declared + (81, 7) ERROR: No matching signatures to 'Distance(string, string)' + (81, 7) INFO: Candidates are: + (81, 7) INFO: float Distance(const Vector3&in, const Vector3&in) + (81, 7) INFO: Rejected due to type mismatch at positional parameter 1 + (85, 10) ERROR: 'L_ORG' is already declared + (86, 7) ERROR: No matching signatures to 'Distance(string, string)' + (86, 7) INFO: Candidates are: + (86, 7) INFO: float Distance(const Vector3&in, const Vector3&in) + (86, 7) INFO: Rejected due to type mismatch at positional parameter 1 + (90, 9) ERROR: No matching symbol 'INIT_MOVE_TO_TELE' + (91, 3) ERROR: No matching symbol 'CallExternal' + (94, 2) INFO: Compiling void GameMaster::gm_bloodshrine_hold_sfs() + (96, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (97, 21) ERROR: No matching symbol 'FindEntityByName' + (98, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (98, 9) INFO: Candidates are: + (98, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (98, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (100, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodshrine\sorc_shaman_friendly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodshrine\sorc_warrior2_friendly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/bloodshrine\sorc_warrior_friendly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/b_castle\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\base_riddler.as + (19, 2) INFO: Compiling void BaseRiddler::OnRepeatTimer() + (21, 3) ERROR: No matching symbol 'SetRepeatDelay' + (22, 8) ERROR: No matching symbol 'CanSee' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void BaseRiddler::OnSpawn() + (30, 3) ERROR: No matching symbol 'SetHealth' + (31, 3) ERROR: No matching symbol 'SetWidth' + (32, 3) ERROR: No matching symbol 'SetHeight' + (33, 3) ERROR: No matching symbol 'SetRace' + (34, 3) ERROR: No matching symbol 'SetName' + (35, 3) ERROR: No matching symbol 'SetRoam' + (36, 3) ERROR: No matching symbol 'SetModel' + (37, 3) ERROR: No matching symbol 'SetInvincible' + (38, 3) ERROR: No matching symbol 'SetNoPush' + (39, 3) ERROR: No matching symbol 'CatchSpeech' + (40, 3) ERROR: No matching symbol 'CatchSpeech' + (41, 3) ERROR: No matching symbol 'CatchSpeech' + (42, 3) ERROR: No matching symbol 'SetSolid' + (45, 2) INFO: Compiling void BaseRiddler::say_riddle1() + (47, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (49, 3) ERROR: No matching symbol 'SayText' + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void BaseRiddler::say_riddle2() + (55, 3) ERROR: No matching symbol 'SayText' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void BaseRiddler::say_riddle3() + (61, 3) ERROR: No matching symbol 'SayText' + (64, 2) INFO: Compiling void BaseRiddler::say_riddle() + (66, 7) ERROR: Illegal operation on this datatype + (67, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (68, 12) ERROR: No matching symbol 'GetEntityIndex' + (69, 3) ERROR: No matching symbol 'riddle_question' + (70, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (73, 2) INFO: Compiling void BaseRiddler::say_answer() + (76, 3) ERROR: No matching symbol 'riddle_correct' + (77, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (80, 2) INFO: Compiling void BaseRiddler::death() + (82, 3) ERROR: No matching symbol 'DeleteEntity' + (85, 2) INFO: Compiling void BaseRiddler::kill_player() + (91, 10) ERROR: Expected ';' + (91, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\blacksmith_construct_left.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\blacksmith_construct_right.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\cavebat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\cavespid.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\cavetroll.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\cavetroll2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\chest_qspider.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\corpse.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\corpse2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\corpse2_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\corpse_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\darkspid.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\fangtooth.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\livingdead.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\livingdead_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\rat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\reanimate.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\riddler1.as + (16, 2) INFO: Compiling void Riddler1::riddle_question() + (18, 3) ERROR: No matching symbol 'SayText' + (19, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (22, 2) INFO: Compiling void Riddler1::riddle_question2() + (24, 3) ERROR: No matching symbol 'SayText' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void Riddler1::riddle_question3() + (30, 3) ERROR: No matching symbol 'SayText' + (33, 2) INFO: Compiling void Riddler1::riddle_correct() + (35, 3) ERROR: No matching symbol 'SayText' + (36, 3) ERROR: No matching symbol 'UseTrigger' + (19, 2) INFO: Compiling void BaseRiddler::OnRepeatTimer() + (21, 3) ERROR: No matching symbol 'SetRepeatDelay' + (22, 8) ERROR: No matching symbol 'CanSee' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void BaseRiddler::OnSpawn() + (30, 3) ERROR: No matching symbol 'SetHealth' + (31, 3) ERROR: No matching symbol 'SetWidth' + (32, 3) ERROR: No matching symbol 'SetHeight' + (33, 3) ERROR: No matching symbol 'SetRace' + (34, 3) ERROR: No matching symbol 'SetName' + (35, 3) ERROR: No matching symbol 'SetRoam' + (36, 3) ERROR: No matching symbol 'SetModel' + (37, 3) ERROR: No matching symbol 'SetInvincible' + (38, 3) ERROR: No matching symbol 'SetNoPush' + (39, 3) ERROR: No matching symbol 'CatchSpeech' + (40, 3) ERROR: No matching symbol 'CatchSpeech' + (41, 3) ERROR: No matching symbol 'CatchSpeech' + (42, 3) ERROR: No matching symbol 'SetSolid' + (45, 2) INFO: Compiling void BaseRiddler::say_riddle1() + (47, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (49, 3) ERROR: No matching symbol 'SayText' + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void BaseRiddler::say_riddle2() + (55, 3) ERROR: No matching symbol 'SayText' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void BaseRiddler::say_riddle3() + (61, 3) ERROR: No matching symbol 'SayText' + (64, 2) INFO: Compiling void BaseRiddler::say_riddle() + (66, 7) ERROR: Illegal operation on this datatype + (67, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (68, 12) ERROR: No matching symbol 'GetEntityIndex' + (69, 3) ERROR: No matching symbol 'riddle_question' + (70, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (73, 2) INFO: Compiling void BaseRiddler::say_answer() + (76, 3) ERROR: No matching symbol 'riddle_correct' + (77, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (80, 2) INFO: Compiling void BaseRiddler::death() + (82, 3) ERROR: No matching symbol 'DeleteEntity' + (85, 2) INFO: Compiling void BaseRiddler::kill_player() + (91, 10) ERROR: Expected ';' + (91, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\riddler2.as + (16, 2) INFO: Compiling void Riddler2::riddle_question() + (18, 3) ERROR: No matching symbol 'SayText' + (19, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (22, 2) INFO: Compiling void Riddler2::riddle_question2() + (24, 3) ERROR: No matching symbol 'SayText' + (27, 2) INFO: Compiling void Riddler2::riddle_correct() + (29, 3) ERROR: No matching symbol 'SayText' + (30, 3) ERROR: No matching symbol 'UseTrigger' + (19, 2) INFO: Compiling void BaseRiddler::OnRepeatTimer() + (21, 3) ERROR: No matching symbol 'SetRepeatDelay' + (22, 8) ERROR: No matching symbol 'CanSee' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void BaseRiddler::OnSpawn() + (30, 3) ERROR: No matching symbol 'SetHealth' + (31, 3) ERROR: No matching symbol 'SetWidth' + (32, 3) ERROR: No matching symbol 'SetHeight' + (33, 3) ERROR: No matching symbol 'SetRace' + (34, 3) ERROR: No matching symbol 'SetName' + (35, 3) ERROR: No matching symbol 'SetRoam' + (36, 3) ERROR: No matching symbol 'SetModel' + (37, 3) ERROR: No matching symbol 'SetInvincible' + (38, 3) ERROR: No matching symbol 'SetNoPush' + (39, 3) ERROR: No matching symbol 'CatchSpeech' + (40, 3) ERROR: No matching symbol 'CatchSpeech' + (41, 3) ERROR: No matching symbol 'CatchSpeech' + (42, 3) ERROR: No matching symbol 'SetSolid' + (45, 2) INFO: Compiling void BaseRiddler::say_riddle1() + (47, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (49, 3) ERROR: No matching symbol 'SayText' + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void BaseRiddler::say_riddle2() + (55, 3) ERROR: No matching symbol 'SayText' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void BaseRiddler::say_riddle3() + (61, 3) ERROR: No matching symbol 'SayText' + (64, 2) INFO: Compiling void BaseRiddler::say_riddle() + (66, 7) ERROR: Illegal operation on this datatype + (67, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (68, 12) ERROR: No matching symbol 'GetEntityIndex' + (69, 3) ERROR: No matching symbol 'riddle_question' + (70, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (73, 2) INFO: Compiling void BaseRiddler::say_answer() + (76, 3) ERROR: No matching symbol 'riddle_correct' + (77, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (80, 2) INFO: Compiling void BaseRiddler::death() + (82, 3) ERROR: No matching symbol 'DeleteEntity' + (85, 2) INFO: Compiling void BaseRiddler::kill_player() + (91, 10) ERROR: Expected ';' + (91, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\riddler3.as + (16, 2) INFO: Compiling void Riddler3::riddle_question() + (18, 3) ERROR: No matching symbol 'SayText' + (19, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (22, 2) INFO: Compiling void Riddler3::riddle_question2() + (24, 3) ERROR: No matching symbol 'SayText' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void Riddler3::riddle_question3() + (30, 3) ERROR: No matching symbol 'SayText' + (33, 2) INFO: Compiling void Riddler3::riddle_correct() + (35, 3) ERROR: No matching symbol 'SayText' + (36, 25) ERROR: No matching symbol 'CHAN_VOICE' + (36, 13) ERROR: No matching symbol 'GetOwner' + (37, 3) ERROR: No matching symbol 'UseTrigger' + (19, 2) INFO: Compiling void BaseRiddler::OnRepeatTimer() + (21, 3) ERROR: No matching symbol 'SetRepeatDelay' + (22, 8) ERROR: No matching symbol 'CanSee' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void BaseRiddler::OnSpawn() + (30, 3) ERROR: No matching symbol 'SetHealth' + (31, 3) ERROR: No matching symbol 'SetWidth' + (32, 3) ERROR: No matching symbol 'SetHeight' + (33, 3) ERROR: No matching symbol 'SetRace' + (34, 3) ERROR: No matching symbol 'SetName' + (35, 3) ERROR: No matching symbol 'SetRoam' + (36, 3) ERROR: No matching symbol 'SetModel' + (37, 3) ERROR: No matching symbol 'SetInvincible' + (38, 3) ERROR: No matching symbol 'SetNoPush' + (39, 3) ERROR: No matching symbol 'CatchSpeech' + (40, 3) ERROR: No matching symbol 'CatchSpeech' + (41, 3) ERROR: No matching symbol 'CatchSpeech' + (42, 3) ERROR: No matching symbol 'SetSolid' + (45, 2) INFO: Compiling void BaseRiddler::say_riddle1() + (47, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (49, 3) ERROR: No matching symbol 'SayText' + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void BaseRiddler::say_riddle2() + (55, 3) ERROR: No matching symbol 'SayText' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void BaseRiddler::say_riddle3() + (61, 3) ERROR: No matching symbol 'SayText' + (64, 2) INFO: Compiling void BaseRiddler::say_riddle() + (66, 7) ERROR: Illegal operation on this datatype + (67, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (68, 12) ERROR: No matching symbol 'GetEntityIndex' + (69, 3) ERROR: No matching symbol 'riddle_question' + (70, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (73, 2) INFO: Compiling void BaseRiddler::say_answer() + (76, 3) ERROR: No matching symbol 'riddle_correct' + (77, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (80, 2) INFO: Compiling void BaseRiddler::death() + (82, 3) ERROR: No matching symbol 'DeleteEntity' + (85, 2) INFO: Compiling void BaseRiddler::kill_player() + (91, 10) ERROR: Expected ';' + (91, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\spidqueen.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\TC_fangtooth.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\treasure_picker.as + (10, 2) INFO: Compiling void TreasurePicker::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetInvincible' + (14, 3) ERROR: No matching symbol 'SetSolid' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (18, 19) ERROR: No conversion from 'string' to 'int' available. + (20, 4) ERROR: No matching symbol 'SendInfoMsg' + (25, 20) ERROR: No conversion from 'string' to 'int' available. + (27, 5) ERROR: No matching symbol 'SendInfoMsg' + (32, 21) ERROR: No conversion from 'string' to 'int' available. + (34, 6) ERROR: No matching symbol 'SendInfoMsg' + (39, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (42, 2) INFO: Compiling void TreasurePicker::create_treasure() + (44, 46) ERROR: No matching symbol 'GetOwner' + (45, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\undeadwarrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin\undeadwarrior_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin2\game_master.as + (10, 2) INFO: Compiling void GameMaster::calruin2_trigger_touched() + (14, 3) ERROR: No matching symbol 'UseTrigger' + (15, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (19, 2) INFO: Compiling void GameMaster::calruin2_reset_triggers() + (21, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin2\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/calruin2\multisource_fix.as + (6, 7) ERROR: Method 'void MultisourceFix::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/challs\challsTC1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/challs\challsTC2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/challs\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chapel\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\ara.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\bag_o_gold_10.as + (6, 7) ERROR: Method 'void BagOGoldBase::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\bag_o_gold_25.as + (6, 7) ERROR: Method 'void BagOGoldBase::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\bag_o_gold_50.as + (6, 7) ERROR: Method 'void BagOGoldBase::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\bag_o_gold_base.as + (6, 7) ERROR: Method 'void BagOGoldBase::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\bank1\deposit.as + (8, 2) INFO: Compiling void Deposit::deposit_item() + (12, 37) ERROR: Expected expression value + (12, 37) ERROR: Instead found '' + (15, 43) ERROR: Expected expression value + (15, 43) ERROR: Instead found '' + (23, 57) ERROR: Expected expression value + (23, 57) ERROR: Instead found '' + (24, 52) ERROR: Expected expression value + (24, 52) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\bank1\filter.as + (16, 2) INFO: Compiling void Filter::func_filter_items() + (18, 21) ERROR: No matching symbol 'param1' + (19, 20) ERROR: No matching symbol 'param2' + (20, 23) ERROR: No matching symbol 'GetTokenCount' + (22, 4) ERROR: No matching signatures to 'Filter::filter_by_reject(string)' + (22, 4) INFO: Candidates are: + (22, 4) INFO: void MS::Filter::filter_by_reject() + (24, 10) ERROR: 'L_ITEMS' is already declared + (26, 7) ERROR: Illegal operation on this datatype + (28, 4) ERROR: No matching symbol 'SendColoredMessage' + (30, 23) ERROR: No matching symbol 'GetTokenCount' + (32, 4) ERROR: No matching signatures to 'Filter::filter_by_space(string, string)' + (32, 4) INFO: Candidates are: + (32, 4) INFO: void MS::Filter::filter_by_space() + (34, 10) ERROR: 'L_ITEMS' is already declared + (36, 3) WARN: Unreachable code + (39, 2) INFO: Compiling void Filter::filter_by_reject() + (41, 23) ERROR: No matching symbol 'i' + (42, 18) ERROR: No conversion from 'string' to 'int' available. + (44, 20) ERROR: No matching symbol 'param1' + (47, 23) ERROR: No matching symbol 'GetTokenCount' + (49, 4) ERROR: No matching signatures to 'Filter::reject_looper(string)' + (49, 4) INFO: Candidates are: + (49, 4) INFO: void MS::Filter::reject_looper() + (53, 2) INFO: Compiling void Filter::reject_looper() + (56, 18) ERROR: No matching symbol 'param1' + (57, 3) ERROR: Illegal operation on 'string' + (58, 30) ERROR: No matching symbol 'GetToken' + (59, 28) ERROR: Both operands must be handles when comparing identity + (61, 8) WARN: Variable 'L_REMOVE' hides another variable of same name in outer scope + (63, 8) ERROR: No matching symbol 'GetEntityProperty' + (65, 8) WARN: Variable 'L_REMOVE' hides another variable of same name in outer scope + (67, 10) ERROR: 'L_ITEM_SCRIPTNAME' is already declared + (68, 21) ERROR: No matching symbol 'GetToken' + (71, 8) WARN: Variable 'L_REMOVE' hides another variable of same name in outer scope + (73, 7) ERROR: Expression must be of boolean type, instead found 'int' + (75, 4) ERROR: No matching symbol 'RemoveToken' + (77, 4) ERROR: Invalid 'break' + (81, 2) INFO: Compiling void Filter::filter_by_space() + (93, 37) ERROR: Expected expression value + (93, 37) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\bank1\withdraw.as + (11, 2) INFO: Compiling void Withdraw::withdraw_items() + (13, 7) ERROR: Illegal operation on this datatype + (15, 25) ERROR: No matching symbol 'param1' + (18, 24) ERROR: No matching symbol 'BANK_MAX' + (20, 18) ERROR: No matching symbol 'GetEntityIndex' + (26, 19) ERROR: No matching symbol 'GetEntityName' + (27, 4) ERROR: No matching symbol 'SendColoredMessage' + (31, 2) INFO: Compiling void Withdraw::build_stores() + (33, 19) ERROR: No matching symbol 'GetToken' + (34, 47) ERROR: No matching symbol 'param1' + (37, 24) ERROR: No matching symbol 'GetTokenCount' + (39, 5) ERROR: No matching signatures to 'Withdraw::add_to_chest(string)' + (39, 5) INFO: Candidates are: + (39, 5) INFO: void MS::Withdraw::add_to_chest() + (44, 2) INFO: Compiling void Withdraw::add_to_chest() + (48, 41) ERROR: Expected expression value + (48, 41) ERROR: Instead found '' + (51, 37) ERROR: Expected expression value + (51, 37) ERROR: Instead found '' + (55, 4) ERROR: Expected expression value + (55, 4) ERROR: Instead found reserved keyword 'else' + (76, 2) INFO: Compiling void Withdraw::add_stack_to_chest() + (78, 3) ERROR: No matching symbol 'AddStoreItem' + (81, 2) INFO: Compiling void Withdraw::ext_player_got_item() + (86, 43) ERROR: Expected expression value + (86, 43) ERROR: Instead found '' + (92, 49) ERROR: Expected expression value + (92, 49) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\bank1.as + (37, 2) INFO: Compiling void Bank1::OnSpawn() + (39, 3) ERROR: No matching symbol 'SetName' + (40, 3) ERROR: No matching symbol 'SetHealth' + (41, 3) ERROR: No matching symbol 'SetInvincible' + (42, 3) ERROR: No matching symbol 'SetWidth' + (43, 3) ERROR: No matching symbol 'SetHeight' + (44, 3) ERROR: No matching symbol 'SetModel' + (45, 3) ERROR: No matching symbol 'SetModelBody' + (46, 3) ERROR: No matching symbol 'SetIdleAnim' + (47, 3) ERROR: No matching symbol 'SetGravity' + (48, 3) ERROR: No matching symbol 'SetNoPush' + (49, 23) ERROR: No matching symbol 'BANK_MAX' + (53, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (56, 2) INFO: Compiling void Bank1::generate_bank_strings() + (58, 38) ERROR: Expected expression value + (58, 38) ERROR: Instead found '' + (70, 2) INFO: Compiling void Bank1::game_menu_getoptions() + (76, 38) ERROR: Expected expression value + (76, 38) ERROR: Instead found '' + (82, 12) ERROR: Expected ';' + (82, 12) ERROR: Instead found identifier 'reg' + (83, 12) ERROR: Expected ';' + (83, 12) ERROR: Instead found identifier 'reg' + (93, 26) ERROR: Expected expression value + (93, 26) ERROR: Instead found '' + (120, 2) INFO: Compiling void Bank1::add_deposit_options() + (124, 50) ERROR: Expected expression value + (124, 50) ERROR: Instead found '' + (132, 10) ERROR: Expected ';' + (132, 10) ERROR: Instead found identifier 'reg' + (133, 10) ERROR: Expected ';' + (133, 10) ERROR: Instead found identifier 'reg' + (134, 10) ERROR: Expected ';' + (134, 10) ERROR: Instead found identifier 'reg' + (135, 10) ERROR: Expected ';' + (135, 10) ERROR: Instead found identifier 'reg' + (150, 2) INFO: Compiling void Bank1::erase_store() + (152, 3) ERROR: No matching symbol 'NpcStoreRemove' + (155, 2) INFO: Compiling void Bank1::game_dynamically_created() + (169, 60) ERROR: Expected expression value + (169, 60) ERROR: Instead found '' + (175, 31) ERROR: Expected expression value + (175, 31) ERROR: Instead found '' + (180, 2) INFO: Compiling void Bank1::spawn_in() + (182, 18) ERROR: No matching symbol 'param1' + (183, 13) ERROR: No matching symbol 'GetOwner' + (184, 3) ERROR: No matching symbol 'SetAngles' + (185, 3) ERROR: No matching symbol 'CallExternal' + (186, 15) ERROR: No matching symbol 'FindEntitiesInSphere' + (188, 23) ERROR: No matching symbol 'GetTokenCount' + (194, 2) INFO: Compiling void Bank1::move_monsters() + (200, 41) ERROR: Expected expression value + (200, 41) ERROR: Instead found '' + (201, 45) ERROR: Expected expression value + (201, 45) ERROR: Instead found '' + (204, 2) INFO: Compiling void Bank1::fade_in_done() + (206, 3) ERROR: No matching symbol 'SetProp' + (207, 3) ERROR: No matching symbol 'SetProp' + (210, 2) INFO: Compiling void Bank1::open_chest() + (212, 13) ERROR: No matching symbol 'GetOwner' + (213, 3) ERROR: No matching symbol 'PlayAnim' + (216, 2) INFO: Compiling void Bank1::close_chest() + (218, 3) ERROR: No matching symbol 'PlayAnim' + (221, 2) INFO: Compiling void Bank1::func_get_free_bank() + (223, 21) ERROR: No matching symbol 'param1' + (224, 19) ERROR: No matching symbol 'param2' + (225, 23) ERROR: No matching symbol 'BANK_MAX' + (227, 4) ERROR: No matching signatures to 'Bank1::free_bank_looper(string, string)' + (227, 4) INFO: Candidates are: + (227, 4) INFO: void MS::Bank1::free_bank_looper() + (230, 3) WARN: Unreachable code + (233, 2) INFO: Compiling void Bank1::free_bank_looper() + (242, 44) ERROR: Expected expression value + (242, 44) ERROR: Instead found '' + (245, 50) ERROR: Expected expression value + (245, 50) ERROR: Instead found '' + (263, 2) INFO: Compiling void Bank1::func_check_bank_has() + (265, 21) ERROR: No matching symbol 'param1' + (266, 30) ERROR: No matching symbol 'param2' + (269, 24) ERROR: No matching symbol 'BANK_MAX' + (271, 5) ERROR: No matching signatures to 'Bank1::bank_has_anything_loop(string)' + (271, 5) INFO: Candidates are: + (271, 5) INFO: void MS::Bank1::bank_has_anything_loop() + (276, 24) ERROR: No matching symbol 'BANK_MAX' + (278, 5) ERROR: No matching signatures to 'Bank1::bank_has_item_loop(string, string)' + (278, 5) INFO: Candidates are: + (278, 5) INFO: void MS::Bank1::bank_has_item_loop() + (282, 3) WARN: Unreachable code + (285, 2) INFO: Compiling void Bank1::bank_has_anything_loop() + (287, 7) ERROR: No matching symbol 'i' + (291, 24) ERROR: No matching symbol 'GetToken' + (292, 47) ERROR: No matching symbol 'param1' + (296, 4) ERROR: Invalid 'break' + (300, 2) INFO: Compiling void Bank1::bank_has_item_loop() + (302, 7) ERROR: No matching symbol 'i' + (306, 24) ERROR: No matching symbol 'GetToken' + (307, 47) ERROR: No matching symbol 'param1' + (308, 18) ERROR: No matching symbol 'FindToken' + (309, 13) ERROR: No conversion from 'string' to 'int' available. + (312, 4) ERROR: Invalid 'break' + (316, 2) INFO: Compiling void Bank1::func_stack_quantity() + (327, 36) ERROR: Expected expression value + (327, 36) ERROR: Instead found '' + (331, 3) ERROR: Expected expression value + (331, 3) ERROR: Instead found reserved keyword 'else' + (343, 52) ERROR: Expected expression value + (343, 52) ERROR: Instead found '' + (384, 2) INFO: Compiling void Bank1::func_make_string() + (386, 19) ERROR: No matching symbol 'param1' + (387, 30) ERROR: No matching symbol 'GetEntityProperty' + (389, 8) ERROR: No matching symbol 'GetEntityProperty' + (391, 11) WARN: Variable 'L_QUANTITY' hides another variable of same name in outer scope + (391, 24) ERROR: No matching symbol 'GetEntityProperty' + (392, 21) ERROR: No matching symbol 'MAX_IN_ONE_TRANSACTION' + (394, 12) WARN: Variable 'L_QUANTITY' hides another variable of same name in outer scope + (394, 25) ERROR: No matching symbol 'MAX_IN_ONE_TRANSACTION' + (399, 9) ERROR: No matching symbol 'GetEntityProperty' + (401, 12) WARN: Variable 'L_QUANTITY' hides another variable of same name in outer scope + (401, 25) ERROR: No matching symbol 'GetEntityProperty' + (410, 3) WARN: Unreachable code + (413, 2) INFO: Compiling void Bank1::func_get_stored_quantity() + (418, 38) ERROR: Expected expression value + (418, 38) ERROR: Instead found '' + (425, 3) ERROR: Expected expression value + (425, 3) ERROR: Instead found reserved keyword 'else' + (16, 2) INFO: Compiling void Filter::func_filter_items() + (18, 21) ERROR: No matching symbol 'param1' + (19, 20) ERROR: No matching symbol 'param2' + (20, 23) ERROR: No matching symbol 'GetTokenCount' + (22, 4) ERROR: No matching signatures to 'Filter::filter_by_reject(string)' + (22, 4) INFO: Candidates are: + (22, 4) INFO: void MS::Filter::filter_by_reject() + (24, 10) ERROR: 'L_ITEMS' is already declared + (26, 7) ERROR: Illegal operation on this datatype + (28, 4) ERROR: No matching symbol 'SendColoredMessage' + (30, 23) ERROR: No matching symbol 'GetTokenCount' + (32, 4) ERROR: No matching signatures to 'Filter::filter_by_space(string, string)' + (32, 4) INFO: Candidates are: + (32, 4) INFO: void MS::Filter::filter_by_space() + (34, 10) ERROR: 'L_ITEMS' is already declared + (36, 3) WARN: Unreachable code + (39, 2) INFO: Compiling void Filter::filter_by_reject() + (41, 23) ERROR: No matching symbol 'i' + (42, 18) ERROR: No conversion from 'string' to 'int' available. + (44, 20) ERROR: No matching symbol 'param1' + (47, 23) ERROR: No matching symbol 'GetTokenCount' + (49, 4) ERROR: No matching signatures to 'Filter::reject_looper(string)' + (49, 4) INFO: Candidates are: + (49, 4) INFO: void MS::Filter::reject_looper() + (53, 2) INFO: Compiling void Filter::reject_looper() + (56, 18) ERROR: No matching symbol 'param1' + (57, 3) ERROR: Illegal operation on 'string' + (58, 30) ERROR: No matching symbol 'GetToken' + (59, 28) ERROR: Both operands must be handles when comparing identity + (61, 8) WARN: Variable 'L_REMOVE' hides another variable of same name in outer scope + (63, 8) ERROR: No matching symbol 'GetEntityProperty' + (65, 8) WARN: Variable 'L_REMOVE' hides another variable of same name in outer scope + (67, 10) ERROR: 'L_ITEM_SCRIPTNAME' is already declared + (68, 21) ERROR: No matching symbol 'GetToken' + (71, 8) WARN: Variable 'L_REMOVE' hides another variable of same name in outer scope + (73, 7) ERROR: Expression must be of boolean type, instead found 'int' + (75, 4) ERROR: No matching symbol 'RemoveToken' + (77, 4) ERROR: Invalid 'break' + (81, 2) INFO: Compiling void Filter::filter_by_space() + (93, 37) ERROR: Expected expression value + (93, 37) ERROR: Instead found '' + (8, 2) INFO: Compiling void Deposit::deposit_item() + (12, 37) ERROR: Expected expression value + (12, 37) ERROR: Instead found '' + (15, 43) ERROR: Expected expression value + (15, 43) ERROR: Instead found '' + (23, 57) ERROR: Expected expression value + (23, 57) ERROR: Instead found '' + (24, 52) ERROR: Expected expression value + (24, 52) ERROR: Instead found '' + (11, 2) INFO: Compiling void Withdraw::withdraw_items() + (13, 7) ERROR: Illegal operation on this datatype + (15, 25) ERROR: No matching symbol 'param1' + (18, 24) ERROR: No matching symbol 'BANK_MAX' + (20, 18) ERROR: No matching symbol 'GetEntityIndex' + (26, 19) ERROR: No matching symbol 'GetEntityName' + (27, 4) ERROR: No matching symbol 'SendColoredMessage' + (31, 2) INFO: Compiling void Withdraw::build_stores() + (33, 19) ERROR: No matching symbol 'GetToken' + (34, 47) ERROR: No matching symbol 'param1' + (37, 24) ERROR: No matching symbol 'GetTokenCount' + (39, 5) ERROR: No matching signatures to 'Withdraw::add_to_chest(string)' + (39, 5) INFO: Candidates are: + (39, 5) INFO: void MS::Withdraw::add_to_chest() + (44, 2) INFO: Compiling void Withdraw::add_to_chest() + (48, 41) ERROR: Expected expression value + (48, 41) ERROR: Instead found '' + (51, 37) ERROR: Expected expression value + (51, 37) ERROR: Instead found '' + (55, 4) ERROR: Expected expression value + (55, 4) ERROR: Instead found reserved keyword 'else' + (76, 2) INFO: Compiling void Withdraw::add_stack_to_chest() + (78, 3) ERROR: No matching symbol 'AddStoreItem' + (81, 2) INFO: Compiling void Withdraw::ext_player_got_item() + (86, 43) ERROR: Expected expression value + (86, 43) ERROR: Instead found '' + (92, 49) ERROR: Expected expression value + (92, 49) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\barnum_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\barnum_jump.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\base_quiver_of.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\base_treasurechest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\bloodshrine_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\catacombs_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\catacombs_mummy.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\chapel1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\chapel2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\chapel3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\chapel_bat.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\cleicert.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\cleicert_temple.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\cobra_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\demontemple1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\demontemple2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\deraliasewers2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\deraliasewers_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\deraliasewers_gloam.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\deraliasewers_swamp.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\dragooncaves1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\dragooncaves2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\dragooncaves_boss.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\dragooncaves_secret.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\fmines_spider.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\gold_1000.as + (6, 7) ERROR: Method 'void BagOGoldBase::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\gold_25.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\gold_300.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\gold_50.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\health_greater_a.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\health_greater_b.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\health_greater_c.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\hemlock_crulak.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\highlands1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\hunderswamp1_borc.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\hunderswamp1_extra.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\hunderswamp1_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\hunderswamp_extra.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\ice_boss.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\ice_main.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\idemarks1_bandits.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\idemarks1_dayvans_gold.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\idemarks1_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\idemarks1_picnic.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\islesofdread1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\isle_goblins.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\isle_maze.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\isle_maze_secret.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\keledros.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\kroush_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\lodagond1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\lodagond2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\lodagond3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\lodagond4_array.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\lostcaverns2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\lostcaverns3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\m2_quest2_bigbonus.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\m2_quest2_extra.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\m2_quest2_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\nashalrath_extra.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\nashalrath_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\nashalrath_mid.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\olympus.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_archers1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_archers1_trap.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_archers2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_base.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_caves.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_final_easy.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_final_hard.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_gobtown1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_gobtown2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_orchuts1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\orcfor_tower.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\phlames_blacksmith.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\phlames_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\phlames_reaver.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\phobia_farm.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\phobia_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\phobia_storage.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_bluntwood.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_broadhead.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_fire.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_frost.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_frost_arrows.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_gpoison.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_jagged.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_lightning.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_poison.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_random_lesser.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_silver.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\quiver_of_wooden.as + (6, 7) ERROR: Method 'void BaseQuiverOf::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\rand_dynamic.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\rand_dynamic2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\rand_epic_new.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\rand_good.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\rand_good_new.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\rand_great.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\rmines_boss.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\rmines_gboss.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\sfor_fire1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\sfor_fire2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\sfor_wolf.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\shender_east_firegiant.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\shender_east_icebird.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\shender_east_morc.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\shender_east_telf.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\skycastle1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\skycastle2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\sorc_palace_chief.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\sorc_palace_library.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\sorc_palace_mscave.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\tundra_base.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\tundra_bear.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\tundra_boat.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\tundra_dzombs.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\tundra_guardian.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\tundra_morcs.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\tundra_polarhut.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\umulak_final.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_boss1a.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_boss1b.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_boss1c.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_boss2a.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_boss2b.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_boss2c.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_boss3a.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_boss3b.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_boss3c.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_chasm.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_chasmkill.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_sekrat.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_temple.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercliffs_town.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercrypts_quake1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercrypts_quake2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercrypts_quake3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercrypts_quake4.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercrypts_t1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercrypts_t2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\undercrypts_t3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/chests\ww3d.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/cleicert\fpriest.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/cleicert\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/crest_dealer.as + (10, 2) INFO: Compiling void CrestDealer::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetModel' + (14, 3) ERROR: No matching symbol 'SetInvincible' + (17, 2) INFO: Compiling void CrestDealer::game_dynamically_created() + (19, 15) ERROR: No matching symbol 'param2' + (20, 3) ERROR: No matching symbol 'OpenMenu' + (23, 2) INFO: Compiling void CrestDealer::game_menu_getoptions() + (25, 23) ERROR: No matching symbol 'GetTokenCount' + (29, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void CrestDealer::build_crest_menu() + (40, 10) ERROR: Expected ';' + (40, 10) ERROR: Instead found identifier 'reg' + (41, 10) ERROR: Expected ';' + (41, 10) ERROR: Instead found identifier 'reg' + (42, 10) ERROR: Expected ';' + (42, 10) ERROR: Instead found identifier 'reg' + (43, 10) ERROR: Expected ';' + (43, 10) ERROR: Instead found identifier 'reg' + (46, 2) INFO: Compiling void CrestDealer::give_crest() + (48, 20) ERROR: No matching symbol 'param2' + (49, 3) ERROR: No matching symbol 'CallExternal' + (50, 3) ERROR: No matching symbol 'DeleteEntity' + (53, 2) INFO: Compiling void CrestDealer::end_me() + (55, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dalya\ferrin.as + (10, 2) INFO: Compiling void Ferrin::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetHealth' + (13, 3) ERROR: No matching symbol 'SetGold' + (14, 3) ERROR: No matching symbol 'SetName' + (15, 3) ERROR: No matching symbol 'SetWidth' + (16, 3) ERROR: No matching symbol 'SetHeight' + (17, 3) ERROR: No matching symbol 'SetRace' + (18, 3) ERROR: No matching symbol 'SetRoam' + (19, 3) ERROR: No matching symbol 'SetModel' + (20, 3) ERROR: No matching symbol 'SetInvincible' + (21, 3) ERROR: No matching symbol 'SetModelBody' + (23, 3) ERROR: No matching symbol 'CatchSpeech' + (24, 3) ERROR: No matching symbol 'CatchSpeech' + (25, 3) ERROR: No matching symbol 'CatchSpeech' + (26, 3) ERROR: No matching symbol 'CatchSpeech' + (27, 3) ERROR: No matching symbol 'CatchSpeech' + (28, 3) ERROR: No matching symbol 'CatchSpeech' + (29, 3) ERROR: No matching symbol 'CatchSpeech' + (30, 3) ERROR: No matching symbol 'CatchSpeech' + (33, 2) INFO: Compiling void Ferrin::say_hi() + (35, 3) ERROR: No matching symbol 'SayText' + (38, 2) INFO: Compiling void Ferrin::say_dangerous() + (40, 3) ERROR: No matching symbol 'SayText' + (43, 2) INFO: Compiling void Ferrin::say_orcs() + (45, 3) ERROR: No matching symbol 'SayText' + (48, 2) INFO: Compiling void Ferrin::say_blackhand() + (50, 3) ERROR: No matching symbol 'SayText' + (53, 2) INFO: Compiling void Ferrin::say_keep() + (55, 3) ERROR: No matching symbol 'SayText' + (58, 2) INFO: Compiling void Ferrin::say_homage() + (60, 3) ERROR: No matching symbol 'SayText' + (61, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (64, 2) INFO: Compiling void Ferrin::say_homage2() + (66, 3) ERROR: No matching symbol 'SayText' + (69, 2) INFO: Compiling void Ferrin::say_homage3() + (71, 3) ERROR: No matching symbol 'SayText' + (74, 2) INFO: Compiling void Ferrin::say_picture() + (76, 3) ERROR: No matching symbol 'SayText' + (79, 2) INFO: Compiling void Ferrin::say_retrieve() + (83, 3) ERROR: No matching symbol 'SayText' + (87, 2) INFO: Compiling void Ferrin::give_picture() + (89, 3) ERROR: No matching symbol 'ReceiveOffer' + (90, 3) ERROR: No matching symbol 'SayText' + (94, 2) INFO: Compiling void Ferrin::game_menu_getoptions() + (96, 10) ERROR: Expected ';' + (96, 10) ERROR: Instead found identifier 'reg' + (97, 10) ERROR: Expected ';' + (97, 10) ERROR: Instead found identifier 'reg' + (98, 10) ERROR: Expected ';' + (98, 10) ERROR: Instead found identifier 'l' + (101, 11) ERROR: Expected ';' + (101, 11) ERROR: Instead found identifier 'reg' + (107, 12) ERROR: Expected ';' + (107, 12) ERROR: Instead found identifier 'reg' + (113, 13) ERROR: Expected ';' + (113, 13) ERROR: Instead found identifier 'reg' + (119, 14) ERROR: Expected ';' + (119, 14) ERROR: Instead found identifier 'reg' + (126, 11) ERROR: Expected ';' + (126, 11) ERROR: Instead found identifier 'reg' + (127, 11) ERROR: Expected ';' + (127, 11) ERROR: Instead found identifier 'reg' + (128, 11) ERROR: Expected ';' + (128, 11) ERROR: Instead found identifier 'reg' + (129, 11) ERROR: Expected ';' + (129, 11) ERROR: Instead found identifier 'reg' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\chestmaker.as + (8, 2) INFO: Compiling void Chestmaker::OnSpawn() + (11, 12) ERROR: No conversion from 'string' to 'int' available. + (13, 53) ERROR: No matching symbol 'GetOwner' + (15, 12) ERROR: No conversion from 'string' to 'int' available. + (17, 52) ERROR: No matching symbol 'GetOwner' + (19, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\chest_good.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\chest_great.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\door.as + (8, 2) INFO: Compiling void Door::alarm() + (10, 3) ERROR: No matching symbol 'LogDebug' + (12, 13) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\gob_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\scorp_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\spid_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/daragoth\spid_dude.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/demontemple\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\barguy.as + (23, 2) INFO: Compiling void Barguy::OnRepeatTimer() + (25, 3) ERROR: No matching symbol 'SetRepeatDelay' + (28, 13) ERROR: No matching symbol 'GetOwner' + (31, 2) INFO: Compiling void Barguy::OnRepeatTimer_1() + (33, 3) ERROR: No matching symbol 'SetRepeatDelay' + (34, 3) ERROR: No matching symbol 'SayText' + (37, 2) INFO: Compiling void Barguy::OnSpawn() + (55, 19) ERROR: Expected expression value + (55, 19) ERROR: Instead found '' + (67, 2) INFO: Compiling void Barguy::say_hi() + (69, 3) ERROR: No matching symbol 'SayText' + (72, 2) INFO: Compiling void Barguy::say_rumor() + (74, 3) ERROR: No matching symbol 'SayText' + (75, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (77, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (81, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (85, 2) INFO: Compiling void Barguy::helpeh() + (87, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (88, 3) ERROR: No matching symbol 'SayText' + (92, 2) INFO: Compiling void Barguy::respond_no() + (94, 7) ERROR: Illegal operation on this datatype + (95, 3) ERROR: No matching symbol 'SayText' + (100, 2) INFO: Compiling void Barguy::say_job() + (102, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (103, 3) ERROR: No matching symbol 'PlayAnim' + (104, 3) ERROR: No matching symbol 'SayText' + (105, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (108, 2) INFO: Compiling void Barguy::say_thief2() + (110, 3) ERROR: No matching symbol 'SayText' + (111, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (114, 2) INFO: Compiling void Barguy::say_thief3() + (116, 3) ERROR: No matching symbol 'SayText' + (117, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (120, 2) INFO: Compiling void Barguy::say_thief4() + (122, 3) ERROR: No matching symbol 'PlayAnim' + (123, 3) ERROR: No matching symbol 'SayText' + (127, 2) INFO: Compiling void Barguy::say_a_really_important() + (129, 3) ERROR: No matching symbol 'PlayAnim' + (130, 3) ERROR: No matching symbol 'SayText' + (133, 2) INFO: Compiling void Barguy::give_hat() + (135, 18) ERROR: No matching symbol 'param1' + (136, 3) ERROR: No matching symbol 'ReceiveOffer' + (137, 3) ERROR: No matching symbol 'SayText' + (138, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (141, 2) INFO: Compiling void Barguy::hat_2() + (143, 3) ERROR: No matching symbol 'SayText' + (148, 2) INFO: Compiling void Barguy::game_menu_getoptions() + (153, 11) ERROR: Expected ';' + (153, 11) ERROR: Instead found identifier 'reg' + (154, 11) ERROR: Expected ';' + (154, 11) ERROR: Instead found identifier 'reg' + (155, 11) ERROR: Expected ';' + (155, 11) ERROR: Instead found identifier 'reg' + (156, 11) ERROR: Expected ';' + (156, 11) ERROR: Instead found identifier 'reg' + (160, 11) ERROR: Expected ';' + (160, 11) ERROR: Instead found identifier 'reg' + (161, 11) ERROR: Expected ';' + (161, 11) ERROR: Instead found identifier 'reg' + (162, 11) ERROR: Expected ';' + (162, 11) ERROR: Instead found identifier 'reg' + (168, 12) ERROR: Expected ';' + (168, 12) ERROR: Instead found identifier 'reg' + (169, 12) ERROR: Expected ';' + (169, 12) ERROR: Instead found identifier 'reg' + (170, 12) ERROR: Expected ';' + (170, 12) ERROR: Instead found identifier 'reg' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\barkeep.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\blacksmith.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\blacksmith_hammer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\bob.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\boss_spider.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\commoner.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\commoner01.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\commoner_handrail.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\commoner_sitting.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\deraliateller.as + (6, 7) ERROR: Method 'void BaseBanker::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\drunk.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\grocer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\guard_barracks.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\guard_gate.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\guard_warehouse.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\headguard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\healer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\healer02.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\hmaster.as + (14, 2) INFO: Compiling void Hmaster::OnSpawn() + (16, 3) ERROR: No matching symbol 'SetHealth' + (17, 3) ERROR: No matching symbol 'SetName' + (18, 3) ERROR: No matching symbol 'SetWidth' + (19, 3) ERROR: No matching symbol 'SetHeight' + (20, 3) ERROR: No matching symbol 'SetRace' + (21, 3) ERROR: No matching symbol 'SetRoam' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetInvincible' + (24, 3) ERROR: No matching symbol 'SetModelBody' + (25, 3) ERROR: No matching symbol 'SetModelBody' + (29, 3) ERROR: No matching symbol 'CatchSpeech' + (30, 3) ERROR: No matching symbol 'CatchSpeech' + (31, 3) ERROR: No matching symbol 'CatchSpeech' + (32, 3) ERROR: No matching symbol 'CatchSpeech' + (33, 3) ERROR: No matching symbol 'CatchSpeech' + (41, 2) INFO: Compiling void Hmaster::idle() + (43, 3) ERROR: No matching symbol 'SetRepeatDelay' + (44, 3) ERROR: No matching symbol 'SetVolume' + (47, 13) ERROR: No matching symbol 'GetOwner' + (50, 2) INFO: Compiling void Hmaster::say_hi() + (52, 3) ERROR: No matching symbol 'SayText' + (55, 2) INFO: Compiling void Hmaster::gossip_1() + (57, 3) ERROR: No matching symbol 'SayText' + (60, 2) INFO: Compiling void Hmaster::say_rumour() + (62, 3) ERROR: No matching symbol 'PlayAnim' + (63, 3) ERROR: No matching symbol 'SayText' + (66, 2) INFO: Compiling void Hmaster::say_job() + (68, 3) ERROR: No matching symbol 'SayText' + (69, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (72, 2) INFO: Compiling void Hmaster::say_job2() + (74, 3) ERROR: No matching symbol 'SayText' + (77, 2) INFO: Compiling void Hmaster::say_ship() + (79, 3) ERROR: No matching symbol 'SayText' + (80, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (83, 2) INFO: Compiling void Hmaster::say_ship2() + (85, 3) ERROR: No matching symbol 'SayText' + (86, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (89, 2) INFO: Compiling void Hmaster::say_ship3() + (91, 3) ERROR: No matching symbol 'SayText' + (92, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (95, 2) INFO: Compiling void Hmaster::say_ship4() + (97, 3) ERROR: No matching symbol 'SayText' + (100, 2) INFO: Compiling void Hmaster::game_menu_getoptions() + (102, 10) ERROR: Expected ';' + (102, 10) ERROR: Instead found identifier 'reg' + (103, 10) ERROR: Expected ';' + (103, 10) ERROR: Instead found identifier 'reg' + (104, 10) ERROR: Expected ';' + (104, 10) ERROR: Instead found identifier 'reg' + (107, 2) INFO: Compiling void Hmaster::vote_ara() + (109, 3) ERROR: No matching symbol 'SayText' + (110, 3) ERROR: No matching symbol 'CallExternal' + (111, 3) ERROR: No matching symbol 'CallExternal' + (114, 2) INFO: Compiling void Hmaster::say_ara() + (116, 3) ERROR: No matching symbol 'SayText' + (117, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (120, 2) INFO: Compiling void Hmaster::say_ara2() + (122, 3) ERROR: No matching symbol 'SayText' + (123, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (126, 2) INFO: Compiling void Hmaster::say_ara3() + (128, 3) ERROR: No matching symbol 'SayText' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\idlesoldier.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\innkeeper.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\item_cupboard01.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\item_cupboard02.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\jacob.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\kayle.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\knight_foutpost.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\knight_lord.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\nalchemist.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\pat.as + (8, 7) ERROR: Method 'void Pat::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\Proffund.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\Slinker.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\storage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\thief.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deralia\Willem.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deraliasewers\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/deraliasewers\mummy_warrior2b.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/desert_temple\orc_chatter1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/desert_temple\orc_chatter2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/desert_temple\thuldahr.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/developer\devcmds.as + (8, 2) INFO: Compiling void Devcmds::game_playercmd() + (10, 7) ERROR: No matching symbol 'param1' + (12, 8) ERROR: No matching symbol 'param2' + (16, 4) ERROR: No matching symbol 'SendInfoMsg' + (17, 4) ERROR: No matching symbol 'SetGlobalVar' + (21, 8) ERROR: No matching symbol 'param1' + (23, 10) ERROR: No matching symbol 'G_DEVELOPER_MODE' + (27, 5) ERROR: No matching symbol 'SendInfoMsg' + (28, 5) ERROR: No matching symbol 'SetGlobalVar' + (33, 2) INFO: Compiling void Devcmds::dev_command() + (37, 21) ERROR: Expected expression value + (37, 21) ERROR: Instead found '' + (45, 2) INFO: Compiling void Devcmds::tele() + (47, 19) ERROR: No matching symbol 'param1' + (48, 19) ERROR: No matching symbol 'param2' + (49, 19) ERROR: No matching symbol 'param3' + (52, 40) ERROR: No matching signatures to 'Vector3(string, string, string)' + (52, 40) INFO: Candidates are: + (52, 40) INFO: Vector3::Vector3() + (52, 40) INFO: Vector3::Vector3(float, float, float) + (52, 40) INFO: Rejected due to type mismatch at positional parameter 1 + (52, 40) INFO: Vector3::Vector3(const Vector3&in) + (55, 2) INFO: Compiling void Devcmds::teledest() + (57, 18) ERROR: No matching symbol 'FindEntityByName' + (58, 15) ERROR: Both operands must be handles when comparing identity + (60, 41) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (60, 41) INFO: Candidates are: + (60, 41) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (60, 41) INFO: Rejected due to type mismatch at positional parameter 1 + (64, 2) INFO: Compiling void Devcmds::slayall() + (66, 24) ERROR: No matching symbol 'param1' + (67, 7) ERROR: Expression must be of boolean type, instead found 'string' + (70, 4) ERROR: No matching symbol 'CallExternal' + (75, 4) ERROR: No matching symbol 'CallExternal' + (79, 2) INFO: Compiling void Devcmds::usetrig() + (82, 3) ERROR: No matching symbol 'UseTrigger' + (85, 2) INFO: Compiling void Devcmds::dumpquest() + (88, 71) ERROR: Expected ')' or ',' + (88, 71) ERROR: Instead found identifier 'ent_currentplayer' + (91, 2) INFO: Compiling void Devcmds::newnpc() + (96, 40) ERROR: Expected expression value + (96, 40) ERROR: Instead found '' + (97, 38) ERROR: Expected expression value + (97, 38) ERROR: Instead found '' + (101, 2) INFO: Compiling void Devcmds::newdyn() + (110, 38) ERROR: Expected expression value + (110, 38) ERROR: Instead found '' + (113, 2) INFO: Compiling void Devcmds::newitem() + (118, 40) ERROR: Expected expression value + (118, 40) ERROR: Instead found '' + (119, 38) ERROR: Expected expression value + (119, 38) ERROR: Instead found '' + (123, 2) INFO: Compiling void Devcmds::eventtarg() + (125, 94) ERROR: Expected expression value + (125, 94) ERROR: Instead found '' + (128, 2) INFO: Compiling void Devcmds::eventme() + (130, 65) ERROR: Expected expression value + (130, 65) ERROR: Instead found '' + (133, 2) INFO: Compiling void Devcmds::eventplayers() + (135, 55) ERROR: Expected expression value + (135, 55) ERROR: Instead found '' + (138, 2) INFO: Compiling void Devcmds::eventgm() + (140, 57) ERROR: Expected expression value + (140, 57) ERROR: Instead found '' + (143, 2) INFO: Compiling void Devcmds::eventall() + (145, 51) ERROR: Expected expression value + (145, 51) ERROR: Instead found '' + (148, 2) INFO: Compiling void Devcmds::blamb() + (153, 8) ERROR: No matching symbol 'param1' + (155, 11) WARN: Variable 'L_RADIUS' hides another variable of same name in outer scope + (155, 22) ERROR: No matching symbol 'param1' + (157, 8) ERROR: No matching symbol 'param2' + (159, 11) WARN: Variable 'L_DMG' hides another variable of same name in outer scope + (159, 19) ERROR: No matching symbol 'param2' + (161, 8) ERROR: No matching symbol 'param3' + (163, 11) WARN: Variable 'L_TYPE' hides another variable of same name in outer scope + (163, 20) ERROR: No matching symbol 'param3' + (166, 3) ERROR: No matching symbol 'XDoDamage' + (169, 2) INFO: Compiling void Devcmds::setquest() + (171, 20) ERROR: No matching symbol 'param1' + (172, 19) ERROR: No matching symbol 'param2' + (174, 22) ERROR: No matching symbol 'GetEntityIndex' + (177, 2) INFO: Compiling void Devcmds::getquest() + (179, 65) ERROR: No matching symbol 'param1' + (183, 2) INFO: Compiling void Devcmds::setgold() + (185, 70) ERROR: Expected expression value + (185, 70) ERROR: Instead found '' + (188, 2) INFO: Compiling void Devcmds::addhp() + (190, 66) ERROR: Expected expression value + (190, 66) ERROR: Instead found '' + (193, 2) INFO: Compiling void Devcmds::addmp() + (195, 66) ERROR: Expected expression value + (195, 66) ERROR: Instead found '' + (198, 2) INFO: Compiling void Devcmds::rat() + (203, 40) ERROR: Expected expression value + (203, 40) ERROR: Instead found '' + (204, 38) ERROR: Expected expression value + (204, 38) ERROR: Instead found '' + (208, 2) INFO: Compiling void Devcmds::skele() + (213, 40) ERROR: Expected expression value + (213, 40) ERROR: Instead found '' + (214, 38) ERROR: Expected expression value + (214, 38) ERROR: Instead found '' + (218, 2) INFO: Compiling void Devcmds::teleforward() + (224, 33) ERROR: Expected expression value + (224, 33) ERROR: Instead found '' + (228, 2) INFO: Compiling void Devcmds::effectme() + (231, 3) ERROR: No matching symbol 'ApplyEffect' + (234, 2) INFO: Compiling void Devcmds::effectmestack() + (237, 3) ERROR: No matching symbol 'ApplyEffect' + (240, 2) INFO: Compiling void Devcmds::effecttarg() + (242, 101) ERROR: Expected ')' or ',' + (242, 101) ERROR: Instead found identifier 'ent_currentplayer' + (246, 2) INFO: Compiling void Devcmds::effecttargstack() + (248, 101) ERROR: Expected ')' or ',' + (248, 101) ERROR: Instead found identifier 'ent_currentplayer' + (252, 2) INFO: Compiling void Devcmds::testdmg() + (254, 98) ERROR: Expected ')' or ',' + (254, 98) ERROR: Instead found identifier 'ent_currentplayer' + (257, 2) INFO: Compiling void Devcmds::throw() + (259, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/developer\effects\test_duration.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/developer\game_master.as + (6, 7) ERROR: Name conflict. 'MS::GameMaster' is a class. + (6, 7) ERROR: Name conflict. 'MS::GameMaster' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/developer\npcs\mega_ice_wall.as + (6, 7) ERROR: Method 'void MegaIceWall::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/developer\player\externals.as + (8, 2) INFO: Compiling void Externals::ext_setstat() + (11, 3) ERROR: No matching symbol 'SetStat' + (14, 2) INFO: Compiling void Externals::ext_fullstats() + (16, 3) ERROR: No matching symbol 'SetStat' + (17, 3) ERROR: No matching symbol 'SetStat' + (18, 3) ERROR: No matching symbol 'SetStat' + (19, 3) ERROR: No matching symbol 'SetStat' + (20, 3) ERROR: No matching symbol 'SetStat' + (21, 3) ERROR: No matching symbol 'SetStat' + (22, 3) ERROR: No matching symbol 'SetStat' + (23, 3) ERROR: No matching symbol 'SetStat' + (24, 3) ERROR: No matching symbol 'SetStat' + (25, 3) ERROR: No matching symbol 'SetStat' + (26, 3) ERROR: No matching symbol 'SetStat' + (27, 3) ERROR: No matching symbol 'SetStat' + (28, 3) ERROR: No matching symbol 'SetStat' + (29, 3) ERROR: No matching symbol 'SetStat' + (30, 3) ERROR: No matching symbol 'SetStat' + (31, 3) ERROR: No matching symbol 'SetStat' + (32, 3) ERROR: No matching symbol 'SetStat' + (33, 3) ERROR: No matching symbol 'SetStat' + (34, 3) ERROR: No matching symbol 'SetStat' + (35, 3) ERROR: No matching symbol 'SetStat' + (36, 3) ERROR: No matching symbol 'SetStat' + (37, 3) ERROR: No matching symbol 'SetStat' + (38, 3) ERROR: No matching symbol 'SetStat' + (39, 3) ERROR: No matching symbol 'SetStat' + (40, 3) ERROR: No matching symbol 'SetStat' + (41, 3) ERROR: No matching symbol 'SetStat' + (44, 2) INFO: Compiling void Externals::ext_setstats() + (46, 3) ERROR: No matching symbol 'SetStat' + (47, 3) ERROR: No matching symbol 'SetStat' + (48, 3) ERROR: No matching symbol 'SetStat' + (49, 3) ERROR: No matching symbol 'SetStat' + (50, 3) ERROR: No matching symbol 'SetStat' + (51, 3) ERROR: No matching symbol 'SetStat' + (52, 3) ERROR: No matching symbol 'SetStat' + (53, 3) ERROR: No matching symbol 'SetStat' + (54, 3) ERROR: No matching symbol 'SetStat' + (55, 3) ERROR: No matching symbol 'SetStat' + (56, 3) ERROR: No matching symbol 'SetStat' + (57, 3) ERROR: No matching symbol 'SetStat' + (58, 3) ERROR: No matching symbol 'SetStat' + (59, 3) ERROR: No matching symbol 'SetStat' + (60, 3) ERROR: No matching symbol 'SetStat' + (61, 3) ERROR: No matching symbol 'SetStat' + (62, 3) ERROR: No matching symbol 'SetStat' + (63, 3) ERROR: No matching symbol 'SetStat' + (64, 3) ERROR: No matching symbol 'SetStat' + (65, 3) ERROR: No matching symbol 'SetStat' + (66, 3) ERROR: No matching symbol 'SetStat' + (67, 3) ERROR: No matching symbol 'SetStat' + (68, 3) ERROR: No matching symbol 'SetStat' + (69, 3) ERROR: No matching symbol 'SetStat' + (70, 3) ERROR: No matching symbol 'SetStat' + (71, 3) ERROR: No matching symbol 'SetStat' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\dq_base_menus.as + (8, 2) INFO: Compiling void DqBaseMenus::game_menu_getoptions() + (13, 11) ERROR: Expected ';' + (13, 11) ERROR: Instead found identifier 'reg' + (14, 11) ERROR: Expected ';' + (14, 11) ERROR: Instead found identifier 'reg' + (15, 11) ERROR: Expected ';' + (15, 11) ERROR: Instead found identifier 'reg' + (19, 11) ERROR: Expected ';' + (19, 11) ERROR: Instead found identifier 'reg' + (20, 11) ERROR: Expected ';' + (20, 11) ERROR: Instead found identifier 'reg' + (21, 11) ERROR: Expected ';' + (21, 11) ERROR: Instead found identifier 'reg' + (22, 11) ERROR: Expected ';' + (22, 11) ERROR: Instead found identifier 'reg' + (29, 37) ERROR: Expected expression value + (29, 37) ERROR: Instead found '' + (33, 37) ERROR: Expected expression value + (33, 37) ERROR: Instead found '' + (35, 11) ERROR: Expected ';' + (35, 11) ERROR: Instead found identifier 'reg' + (36, 11) ERROR: Expected ';' + (36, 11) ERROR: Instead found identifier 'reg' + (52, 33) ERROR: Expected expression value + (52, 33) ERROR: Instead found '' + (63, 2) INFO: Compiling void DqBaseMenus::build_quest_complete_menu() + (66, 10) ERROR: Expected ';' + (66, 10) ERROR: Instead found identifier 'reg' + (67, 10) ERROR: Expected ';' + (67, 10) ERROR: Instead found identifier 'reg' + (68, 10) ERROR: Expected ';' + (68, 10) ERROR: Instead found identifier 'reg' + (69, 10) ERROR: Expected ';' + (69, 10) ERROR: Instead found identifier 'reg' + (72, 2) INFO: Compiling void DqBaseMenus::func_replace_string() + (77, 47) ERROR: Expected expression value + (77, 47) ERROR: Instead found '' + (78, 47) ERROR: Expected expression value + (78, 47) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\externals\dq_adjust_damage.as + (6, 7) ERROR: Method 'void DqAdjustDamage::OnDamagedOther(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\externals\dq_apply_callback_on_death.as + (6, 7) ERROR: Method 'void DqApplyCallbackOnDeath::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\externals\dq_game_master.as + (17, 2) INFO: Compiling void DqGameMaster::gm_dq_add_counter() + (19, 7) ERROR: Illegal operation on this datatype + (24, 3) ERROR: No matching symbol 'DQ_DEATH_CALLBACK_IDS' + (27, 2) INFO: Compiling void DqGameMaster::gm_dq_perish_counter() + (29, 49) ERROR: Expected expression value + (29, 49) ERROR: Instead found '' + (36, 2) INFO: Compiling void DqGameMaster::gm_dq_add_death() + (40, 50) ERROR: Expected expression value + (40, 50) ERROR: Instead found '' + (40, 92) ERROR: Expected ';' + (40, 92) ERROR: Instead found ')' + (46, 2) INFO: Compiling void DqGameMaster::gm_dq_monster_death_callbacks() + (48, 39) ERROR: Expected expression value + (48, 39) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\externals\dq_monster_externals.as + (6, 7) ERROR: Method 'void DqMonsterExternals::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\findlebind.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\murmur.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\quests\bases\dq_base_quests.as + (6, 7) ERROR: Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\quests\dq_defend_me.as + (6, 7) ERROR: Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\quests\dq_escort_to.as + (6, 7) ERROR: Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\quests\dq_fetch_drop.as + (8, 7) ERROR: Method 'void DqFetchDrop::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\quests\dq_fetch_items.as + (6, 7) ERROR: Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\quests\dq_get_item_from_hands.as + (6, 7) ERROR: Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\quests\dq_kill_target.as + (6, 7) ERROR: Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\quests\dq_kill_type.as + (8, 7) ERROR: Method 'void DqKillType::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void DqBaseQuests::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\quest_dwarf.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\templates\bases\dq_generic_chat.as + (8, 2) INFO: Compiling void DqGenericChat::quest_intro() + (10, 7) ERROR: No matching symbol 'QUEST_INTRO_CHAT' + (12, 4) ERROR: No matching symbol 'chat_now' + (13, 4) ERROR: No matching symbol 'chat_convo_anim' + (15, 7) ERROR: No matching symbol 'QUEST_INTRO_SOUND' + (17, 29) ERROR: No matching symbol 'QUEST_INTRO_SOUND' + (17, 14) ERROR: No matching symbol 'GetOwner' + (21, 2) INFO: Compiling void DqGenericChat::quest_activate() + (23, 7) ERROR: No matching symbol 'QUEST_ACTIVATE_CHAT' + (25, 4) ERROR: No matching symbol 'chat_now' + (26, 4) ERROR: No matching symbol 'chat_convo_anim' + (28, 7) ERROR: No matching symbol 'QUEST_ACTIVATE_SOUND' + (30, 29) ERROR: No matching symbol 'QUEST_ACTIVATE_SOUND' + (30, 14) ERROR: No matching symbol 'GetOwner' + (34, 2) INFO: Compiling void DqGenericChat::quest_finished() + (36, 7) ERROR: No matching symbol 'QUEST_FINISHED_CHAT' + (38, 4) ERROR: No matching symbol 'chat_now' + (39, 4) ERROR: No matching symbol 'chat_convo_anim' + (41, 7) ERROR: No matching symbol 'QUEST_FINISHED_SOUND' + (43, 29) ERROR: No matching symbol 'QUEST_FINISHED_SOUND' + (43, 14) ERROR: No matching symbol 'GetOwner' + (47, 2) INFO: Compiling void DqGenericChat::quest_complete() + (49, 7) ERROR: No matching symbol 'QUEST_COMPLETE_CHAT' + (51, 4) ERROR: No matching symbol 'chat_now' + (52, 4) ERROR: No matching symbol 'chat_convo_anim' + (54, 7) ERROR: No matching symbol 'QUEST_COMPLETE_SOUND' + (56, 29) ERROR: No matching symbol 'QUEST_COMPLETE_SOUND' + (56, 14) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\templates\bases\dq_generic_menus.as + (8, 2) INFO: Compiling void DqGenericMenus::game_menu_getoptions() + (13, 11) ERROR: Expected ';' + (13, 11) ERROR: Instead found identifier 'reg' + (14, 11) ERROR: Expected ';' + (14, 11) ERROR: Instead found identifier 'reg' + (15, 11) ERROR: Expected ';' + (15, 11) ERROR: Instead found identifier 'reg' + (16, 11) ERROR: Expected ';' + (16, 11) ERROR: Instead found identifier 'reg' + (22, 12) ERROR: Expected ';' + (22, 12) ERROR: Instead found identifier 'reg' + (23, 12) ERROR: Expected ';' + (23, 12) ERROR: Instead found identifier 'reg' + (24, 12) ERROR: Expected ';' + (24, 12) ERROR: Instead found identifier 'reg' + (25, 12) ERROR: Expected ';' + (25, 12) ERROR: Instead found identifier 'reg' + (41, 15) ERROR: Expected ';' + (41, 15) ERROR: Instead found identifier 'reg' + (45, 15) ERROR: Expected ';' + (45, 15) ERROR: Instead found identifier 'reg' + (47, 14) ERROR: Expected ';' + (47, 14) ERROR: Instead found identifier 'reg' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\templates\bases\dq_generic_reward.as + (16, 2) INFO: Compiling void DqGenericReward::quest_activate() + (18, 8) ERROR: No matching symbol 'QUEST_REWARD_ALL' + (21, 4) ERROR: No matching signatures to 'GetAllPlayers(string)' + (21, 4) INFO: Candidates are: + (21, 4) INFO: CBasePlayer@[]@ GetAllPlayers() + (22, 24) ERROR: No matching symbol 'GetTokenCount' + (24, 5) ERROR: No matching signatures to 'DqGenericReward::get_quest_participants_loop(string)' + (24, 5) INFO: Candidates are: + (24, 5) INFO: void MS::DqGenericReward::get_quest_participants_loop() + (29, 2) INFO: Compiling void DqGenericReward::quest_taker_updated() + (33, 52) ERROR: Expected expression value + (33, 52) ERROR: Instead found '' + (45, 2) INFO: Compiling void DqGenericReward::quest_complete() + (48, 52) ERROR: Expected expression value + (48, 52) ERROR: Instead found '' + (67, 2) INFO: Compiling void DqGenericReward::quest_reward() + (88, 34) ERROR: Expected expression value + (88, 34) ERROR: Instead found '' + (95, 2) INFO: Compiling void DqGenericReward::game_menu_getoptions() + (112, 36) ERROR: Expected expression value + (112, 36) ERROR: Instead found '' + (120, 2) INFO: Compiling void DqGenericReward::get_quest_participants_loop() + (122, 21) ERROR: No matching symbol 'GetToken' + (123, 3) ERROR: No matching signatures to 'DqGenericReward::add_quest_participant(string)' + (123, 3) INFO: Candidates are: + (123, 3) INFO: void MS::DqGenericReward::add_quest_participant() + (126, 2) INFO: Compiling void DqGenericReward::add_quest_participant() + (128, 21) ERROR: No matching symbol 'param1' + (129, 3) ERROR: No matching symbol 'A_QUEST_PARTICIPANTS' + (132, 2) INFO: Compiling void DqGenericReward::build_quest_complete_menu() + (135, 10) ERROR: Expected ';' + (135, 10) ERROR: Instead found identifier 'reg' + (136, 10) ERROR: Expected ';' + (136, 10) ERROR: Instead found identifier 'reg' + (137, 10) ERROR: Expected ';' + (137, 10) ERROR: Instead found identifier 'reg' + (138, 10) ERROR: Expected ';' + (138, 10) ERROR: Instead found identifier 'reg' + (141, 2) INFO: Compiling void DqGenericReward::clear_array_loop() + (143, 3) ERROR: No matching symbol 'A_QUEST_PARTICIPANTS' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\templates\dq_defend_me_template.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\templates\dq_escort_to_template.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\templates\dq_fetch_drop_template.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\templates\dq_fetch_items_template.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\templates\dq_get_item_from_hands_template.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\templates\dq_kill_target_template.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\templates\dq_kill_type_template.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\voldar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\voldararcher.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\voldararcher_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\voldaraxer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\voldarshaman.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dq\voldarwarrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridje\boss1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridje\gloam_sitter.as + (6, 7) ERROR: Method 'void GloamSitter::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridje\gloam_slayer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridje\gloam_slayer_JM.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridmars_scripts_WIP\deralia\headguard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridmars_scripts_WIP\deralia\innkeeper.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridmars_scripts_WIP\foutpost\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/dridmars_scripts_WIP\mines\rudolf.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\armorer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\armourer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\barwench.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\boarboss.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\boarhard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\bryan.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\clock_hourhand.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found reserved keyword 'int' + (9, 11) ERROR: Expected '(' + (9, 11) ERROR: Instead found '.' + (67, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\clock_minutehand.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found reserved keyword 'int' + (9, 11) ERROR: Expected '(' + (9, 11) ERROR: Instead found '.' + (67, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\Copy of fletcher.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\edanateller.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\edrin.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\eTC1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\fletcher.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\healer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\highpriest.as + (12, 2) INFO: Compiling void Highpriest::OnRepeatTimer() + (14, 3) ERROR: No matching symbol 'SetRepeatDelay' + (15, 3) ERROR: No matching symbol 'CanSee' + (16, 3) ERROR: No matching symbol 'SetMoveDest' + (19, 2) INFO: Compiling void Highpriest::OnSpawn() + (21, 3) ERROR: No matching symbol 'SetHealth' + (22, 3) ERROR: No matching symbol 'SetMaxHealth' + (23, 3) ERROR: No matching symbol 'SetGold' + (24, 3) ERROR: No matching symbol 'SetName' + (25, 3) ERROR: No matching symbol 'SetWidth' + (26, 3) ERROR: No matching symbol 'SetHeight' + (27, 3) ERROR: No matching symbol 'SetRace' + (28, 3) ERROR: No matching symbol 'SetRoam' + (29, 3) ERROR: No matching symbol 'SetModel' + (30, 3) ERROR: No matching symbol 'SetInvincible' + (34, 3) ERROR: No matching symbol 'CatchSpeech' + (35, 3) ERROR: No matching symbol 'CatchSpeech' + (36, 3) ERROR: No matching symbol 'CatchSpeech' + (37, 3) ERROR: No matching symbol 'CatchSpeech' + (38, 3) ERROR: No matching symbol 'CatchSpeech' + (39, 3) ERROR: No matching symbol 'CatchSpeech' + (40, 3) ERROR: No matching symbol 'CatchSpeech' + (41, 3) ERROR: No matching symbol 'CatchSpeech' + (42, 3) ERROR: No matching symbol 'CatchSpeech' + (43, 3) ERROR: No matching symbol 'CatchSpeech' + (44, 3) ERROR: No matching symbol 'CatchSpeech' + (45, 3) ERROR: No matching symbol 'CatchSpeech' + (46, 3) ERROR: No matching symbol 'CatchSpeech' + (47, 3) ERROR: No matching symbol 'CatchSpeech' + (48, 3) ERROR: No matching symbol 'CatchSpeech' + (49, 3) ERROR: No matching symbol 'CatchSpeech' + (52, 2) INFO: Compiling void Highpriest::say_hi() + (54, 3) ERROR: No matching symbol 'SetVolume' + (55, 3) ERROR: No matching symbol 'SayText' + (58, 2) INFO: Compiling void Highpriest::say_job() + (60, 3) ERROR: No matching symbol 'SetVolume' + (61, 3) ERROR: No matching symbol 'SayText' + (64, 2) INFO: Compiling void Highpriest::say_rumour() + (66, 3) ERROR: No matching symbol 'SayText' + (67, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (70, 2) INFO: Compiling void Highpriest::say_rumour2() + (72, 3) ERROR: No matching symbol 'SayText' + (73, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (76, 2) INFO: Compiling void Highpriest::say_rumour3() + (78, 3) ERROR: No matching symbol 'SayText' + (79, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (82, 2) INFO: Compiling void Highpriest::say_rumour4() + (84, 3) ERROR: No matching symbol 'SayText' + (85, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (88, 2) INFO: Compiling void Highpriest::say_rumour5() + (90, 3) ERROR: No matching symbol 'SayText' + (93, 2) INFO: Compiling void Highpriest::say_heal() + (95, 3) ERROR: No matching symbol 'SayText' + (96, 3) ERROR: No matching symbol 'PlayAnim' + (97, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (100, 2) INFO: Compiling void Highpriest::attack_1() + (102, 3) ERROR: No matching symbol 'ApplyEffect' + (105, 2) INFO: Compiling void Highpriest::game_menu_getoptions() + (107, 10) ERROR: Expected ';' + (107, 10) ERROR: Instead found identifier 'reg' + (108, 10) ERROR: Expected ';' + (108, 10) ERROR: Instead found identifier 'reg' + (109, 10) ERROR: Expected ';' + (109, 10) ERROR: Instead found identifier 'reg' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\Hoguld.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\masterp.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\mayor.as + (20, 2) INFO: Compiling void Mayor::OnSpawn() + (22, 3) ERROR: No matching symbol 'SetHealth' + (23, 3) ERROR: No matching symbol 'SetGold' + (24, 3) ERROR: No matching symbol 'SetName' + (25, 3) ERROR: No matching symbol 'SetWidth' + (26, 3) ERROR: No matching symbol 'SetHeight' + (27, 3) ERROR: No matching symbol 'SetRace' + (28, 3) ERROR: No matching symbol 'SetRoam' + (29, 3) ERROR: No matching symbol 'SetModel' + (30, 3) ERROR: No matching symbol 'SetInvincible' + (31, 3) ERROR: No matching symbol 'SetModelBody' + (35, 3) ERROR: No matching symbol 'CatchSpeech' + (36, 3) ERROR: No matching symbol 'CatchSpeech' + (37, 3) ERROR: No matching symbol 'CatchSpeech' + (38, 3) ERROR: No matching symbol 'CatchSpeech' + (39, 3) ERROR: No matching symbol 'CatchSpeech' + (40, 3) ERROR: No matching symbol 'CatchSpeech' + (41, 3) ERROR: No matching symbol 'Precache' + (44, 2) INFO: Compiling void Mayor::say_hi() + (46, 3) ERROR: No matching symbol 'SayText' + (50, 2) INFO: Compiling void Mayor::say_suliban() + (52, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (55, 4) ERROR: No matching symbol 'PlayAnim' + (56, 4) ERROR: No matching symbol 'SayText' + (58, 15) ERROR: No matching symbol 'GetEntityIndex' + (59, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (60, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (64, 4) ERROR: No matching symbol 'PlayAnim' + (65, 4) ERROR: No matching symbol 'SayText' + (66, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (71, 2) INFO: Compiling void Mayor::guards() + (73, 22) ERROR: No matching symbol 'GetEntityName' + (74, 3) ERROR: No matching signatures to 'SpawnNPC(const string, Vector3, const ScriptMode)' + (74, 3) INFO: Candidates are: + (74, 3) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (74, 3) INFO: Rejected due to type mismatch at positional parameter 3 + (75, 3) ERROR: No matching signatures to 'SpawnNPC(const string, Vector3, const ScriptMode)' + (75, 3) INFO: Candidates are: + (75, 3) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (75, 3) INFO: Rejected due to type mismatch at positional parameter 3 + (76, 3) ERROR: No matching signatures to 'SpawnNPC(const string, Vector3, const ScriptMode)' + (76, 3) INFO: Candidates are: + (76, 3) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (76, 3) INFO: Rejected due to type mismatch at positional parameter 3 + (77, 3) ERROR: No matching symbol 'SayText' + (78, 3) ERROR: No matching symbol 'SetVolume' + (79, 13) ERROR: No matching symbol 'GetOwner' + (87, 2) INFO: Compiling void Mayor::say_suliban2() + (89, 3) ERROR: No matching symbol 'SayText' + (90, 3) ERROR: No matching symbol 'CallExternal' + (94, 2) INFO: Compiling void Mayor::say_know() + (96, 3) ERROR: No matching symbol 'PlayAnim' + (97, 3) ERROR: No matching symbol 'SayText' + (98, 3) ERROR: No matching symbol 'RemoveItem' + (101, 2) INFO: Compiling void Mayor::worldevent_evidence_found() + (103, 3) ERROR: No matching symbol 'DeleteEntity' + (106, 2) INFO: Compiling void Mayor::robbed() + (108, 3) ERROR: No matching symbol 'SayText' + (109, 3) ERROR: No matching symbol 'PlayAnim' + (110, 3) ERROR: No matching symbol 'UseTrigger' + (113, 2) INFO: Compiling void Mayor::attack_1() + (115, 3) ERROR: No matching symbol 'DoDamage' + (118, 2) INFO: Compiling void Mayor::game_recvoffer_gold() + (120, 3) ERROR: No matching symbol 'ReceiveOffer' + (121, 3) ERROR: No matching symbol 'SayText' + (122, 3) ERROR: No matching symbol 'PlayAnim' + (125, 2) INFO: Compiling void Mayor::say_job() + (127, 3) ERROR: No matching symbol 'SayText' + (128, 3) ERROR: No matching symbol 'PlayAnim' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\mayorguard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\mergur.as + (10, 7) ERROR: Method 'void Mergur::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\msqguard.as + (94, 2) ERROR: A function with the same name and parameters already exists + (196, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\oldman.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\packmerc.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\priest.as + (12, 2) INFO: Compiling void Priest::OnSpawn() + (14, 3) ERROR: No matching symbol 'SetHealth' + (15, 3) ERROR: No matching symbol 'SetMaxHealth' + (16, 3) ERROR: No matching symbol 'SetGold' + (17, 3) ERROR: No matching symbol 'SetName' + (18, 3) ERROR: No matching symbol 'SetWidth' + (19, 3) ERROR: No matching symbol 'SetHeight' + (20, 3) ERROR: No matching symbol 'SetRace' + (21, 3) ERROR: No matching symbol 'SetRoam' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetInvincible' + (25, 3) ERROR: No matching symbol 'createmystore' + (26, 3) ERROR: No matching symbol 'CatchSpeech' + (27, 3) ERROR: No matching symbol 'CatchSpeech' + (28, 3) ERROR: No matching symbol 'CatchSpeech' + (29, 3) ERROR: No matching symbol 'CatchSpeech' + (30, 3) ERROR: No matching symbol 'CatchSpeech' + (31, 3) ERROR: No matching symbol 'CatchSpeech' + (32, 3) ERROR: No matching symbol 'CatchSpeech' + (33, 3) ERROR: No matching symbol 'CatchSpeech' + (34, 3) ERROR: No matching symbol 'CatchSpeech' + (35, 3) ERROR: No matching symbol 'CatchSpeech' + (36, 3) ERROR: No matching symbol 'CatchSpeech' + (37, 3) ERROR: No matching symbol 'CatchSpeech' + (38, 3) ERROR: No matching symbol 'CatchSpeech' + (39, 3) ERROR: No matching symbol 'CatchSpeech' + (40, 3) ERROR: No matching symbol 'CatchSpeech' + (43, 2) INFO: Compiling void Priest::say_hi() + (45, 3) ERROR: No matching symbol 'SetVolume' + (46, 3) ERROR: No matching symbol 'SayText' + (49, 2) INFO: Compiling void Priest::say_sembelbin() + (51, 3) ERROR: No matching symbol 'SayText' + (54, 2) INFO: Compiling void Priest::say_hall() + (56, 3) ERROR: No matching symbol 'SayText' + (59, 2) INFO: Compiling void Priest::say_job() + (61, 3) ERROR: No matching symbol 'SayText' + (62, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (65, 2) INFO: Compiling void Priest::say_job2() + (67, 3) ERROR: No matching symbol 'SayText' + (70, 2) INFO: Compiling void Priest::say_rumour() + (72, 3) ERROR: No matching symbol 'SayText' + (73, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (76, 2) INFO: Compiling void Priest::say_rumour2() + (78, 3) ERROR: No matching symbol 'SayText' + (79, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (82, 2) INFO: Compiling void Priest::say_rumour3() + (84, 3) ERROR: No matching symbol 'SayText' + (85, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (88, 2) INFO: Compiling void Priest::say_rumour4() + (90, 3) ERROR: No matching symbol 'SayText' + (91, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (94, 2) INFO: Compiling void Priest::say_rumour5() + (96, 3) ERROR: No matching symbol 'SayText' + (8, 2) INFO: Compiling void FirstNpc::game_targeted_by_player() + (11, 11) ERROR: No matching symbol 'GetMonsterProperty' + (13, 3) ERROR: No matching symbol 'ShowHelpTip' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\rentaguard1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\rentaguard2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\rentaguard3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\shroom.as + (8, 2) INFO: Compiling void Shroom::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetHealth' + (11, 3) ERROR: No matching symbol 'SetRace' + (12, 3) ERROR: No matching symbol 'SetWidth' + (13, 3) ERROR: No matching symbol 'SetHeight' + (14, 3) ERROR: No matching symbol 'SetRoam' + (15, 3) ERROR: No matching symbol 'SetName' + (16, 3) ERROR: No matching symbol 'SetIdleAnim' + (17, 3) ERROR: No matching symbol 'SetModel' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\suliban.as + (86, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\sumdale.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\towncrier.as + (18, 2) INFO: Compiling void Towncrier::OnRepeatTimer() + (20, 3) ERROR: No matching symbol 'SetRepeatDelay' + (21, 7) ERROR: Illegal operation on this datatype + (24, 3) ERROR: No matching symbol 'SetSayTextRange' + (25, 3) ERROR: No matching symbol 'SayText' + (26, 3) ERROR: No matching symbol 'SetSayTextRange' + (29, 2) INFO: Compiling void Towncrier::OnSpawn() + (31, 3) ERROR: No matching symbol 'SetHealth' + (32, 3) ERROR: No matching symbol 'SetName' + (33, 3) ERROR: No matching symbol 'SetWidth' + (34, 3) ERROR: No matching symbol 'SetHeight' + (35, 3) ERROR: No matching symbol 'SetRace' + (36, 3) ERROR: No matching symbol 'SetRoam' + (37, 3) ERROR: No matching symbol 'SetModel' + (38, 3) ERROR: No matching symbol 'SetInvincible' + (39, 3) ERROR: No matching symbol 'SetModelBody' + (41, 3) ERROR: No matching symbol 'CatchSpeech' + (42, 3) ERROR: No matching symbol 'CatchSpeech' + (43, 3) ERROR: No matching symbol 'CatchSpeech' + (44, 3) ERROR: No matching symbol 'CatchSpeech' + (47, 2) INFO: Compiling void Towncrier::say_hi() + (50, 3) ERROR: No matching symbol 'SayText' + (51, 9) ERROR: No matching symbol 'GetEntityProperty' + (52, 3) ERROR: No matching symbol 'SetMoveDest' + (53, 3) ERROR: No matching symbol 'SetRoam' + (54, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (57, 2) INFO: Compiling void Towncrier::say_adventure() + (59, 3) ERROR: No matching symbol 'SayText' + (60, 3) ERROR: No matching symbol 'SayText' + (61, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (64, 2) INFO: Compiling void Towncrier::say_adventure2() + (66, 3) ERROR: No matching symbol 'SayText' + (69, 2) INFO: Compiling void Towncrier::say_rumour() + (71, 3) ERROR: No matching symbol 'PlayAnim' + (72, 3) ERROR: No matching symbol 'SayText' + (73, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (76, 2) INFO: Compiling void Towncrier::say_rumour2() + (78, 3) ERROR: No matching symbol 'SayText' + (79, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (82, 2) INFO: Compiling void Towncrier::say_rumour3() + (84, 3) ERROR: No matching symbol 'SayText' + (87, 2) INFO: Compiling void Towncrier::say_mayor() + (90, 3) ERROR: No matching symbol 'SayText' + (98, 2) INFO: Compiling void Towncrier::resume() + (101, 3) ERROR: No matching symbol 'SetRoam' + (104, 2) INFO: Compiling void Towncrier::worldevent_time() + (106, 7) ERROR: No matching symbol 'param1' + (108, 4) ERROR: No matching symbol 'SayText' + (110, 7) ERROR: No matching symbol 'param1' + (112, 4) ERROR: No matching symbol 'SayText' + (114, 7) ERROR: No matching symbol 'param1' + (116, 4) ERROR: No matching symbol 'SayText' + (118, 7) ERROR: No matching symbol 'param1' + (120, 4) ERROR: No matching symbol 'SayText' + (122, 7) ERROR: No matching symbol 'param1' + (124, 4) ERROR: No matching symbol 'SayText' + (126, 7) ERROR: No matching symbol 'param1' + (128, 4) ERROR: No matching symbol 'SayText' + (130, 7) ERROR: No matching symbol 'param1' + (132, 4) ERROR: No matching symbol 'SayText' + (134, 7) ERROR: No matching symbol 'param1' + (136, 4) ERROR: No matching symbol 'SayText' + (138, 7) ERROR: No matching symbol 'param1' + (140, 4) ERROR: No matching symbol 'SayText' + (142, 7) ERROR: No matching symbol 'param1' + (144, 4) ERROR: No matching symbol 'SayText' + (146, 7) ERROR: No matching symbol 'param1' + (148, 4) ERROR: No matching symbol 'SayText' + (150, 7) ERROR: No matching symbol 'param1' + (152, 4) ERROR: No matching symbol 'SayText' + (154, 7) ERROR: No matching symbol 'param1' + (156, 4) ERROR: No matching symbol 'SayText' + (158, 7) ERROR: No matching symbol 'param1' + (160, 4) ERROR: No matching symbol 'SayText' + (162, 7) ERROR: No matching symbol 'param1' + (164, 4) ERROR: No matching symbol 'SayText' + (166, 7) ERROR: No matching symbol 'param1' + (168, 4) ERROR: No matching symbol 'SayText' + (170, 7) ERROR: No matching symbol 'param1' + (172, 4) ERROR: No matching symbol 'SayText' + (174, 7) ERROR: No matching symbol 'param1' + (176, 4) ERROR: No matching symbol 'SayText' + (178, 7) ERROR: No matching symbol 'param1' + (180, 4) ERROR: No matching symbol 'SayText' + (182, 7) ERROR: No matching symbol 'param1' + (184, 4) ERROR: No matching symbol 'SayText' + (186, 7) ERROR: No matching symbol 'param1' + (188, 4) ERROR: No matching symbol 'SayText' + (190, 7) ERROR: No matching symbol 'param1' + (192, 4) ERROR: No matching symbol 'SayText' + (194, 7) ERROR: No matching symbol 'param1' + (196, 4) ERROR: No matching symbol 'SayText' + (198, 7) ERROR: No matching symbol 'param1' + (200, 4) ERROR: No matching symbol 'SayText' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\trapper.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\tutorial.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\urdauf.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edana\weaponsmith.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edanas\sewerrat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/edanasewers_old\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\add_dynamic_spawn.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\base_debuff.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\base_debuff_diminishing.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\base_dot.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\base_effect.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\debuff_acid.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\debuff_cold.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'float' + (11, 10) ERROR: Expected '(' + (11, 10) ERROR: Instead found '.' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (27, 1) ERROR: Unexpected token '}' + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\debuff_defile.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\debuff_freeze.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found reserved keyword 'float' + (12, 10) ERROR: Expected '(' + (12, 10) ERROR: Instead found '.' + (13, 10) ERROR: Expected '(' + (13, 10) ERROR: Instead found '.' + (14, 10) ERROR: Expected '(' + (14, 10) ERROR: Instead found '.' + (15, 10) ERROR: Expected '(' + (15, 10) ERROR: Instead found '.' + (17, 14) ERROR: Expected identifier + (17, 14) ERROR: Instead found '(' + (48, 1) ERROR: Unexpected token '}' + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\debuff_hold.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (11, 10) ERROR: Expected '(' + (11, 10) ERROR: Instead found '.' + (12, 10) ERROR: Expected '(' + (12, 10) ERROR: Instead found '.' + (13, 10) ERROR: Expected '(' + (13, 10) ERROR: Instead found '.' + (15, 12) ERROR: Expected identifier + (15, 12) ERROR: Instead found '(' + (45, 1) ERROR: Unexpected token '}' + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\debuff_lightning.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\debuff_stun.as + (15, 2) ERROR: Expected method or property + (15, 2) ERROR: Instead found reserved keyword 'float' + (16, 10) ERROR: Expected '(' + (16, 10) ERROR: Instead found '.' + (17, 10) ERROR: Expected '(' + (17, 10) ERROR: Instead found '.' + (18, 10) ERROR: Expected '(' + (18, 10) ERROR: Instead found '.' + (20, 12) ERROR: Expected identifier + (20, 12) ERROR: Instead found '(' + (148, 1) ERROR: Unexpected token '}' + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\demon_blood.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_acid.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_bleed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_cold.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_cold_freeze.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_dark.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_holy.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_lightning_cage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_poison.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dot_poison_blind.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\dynamic_beam_cl.as + (18, 2) INFO: Compiling void DynamicBeamCl::client_activate() + (20, 3) ERROR: No matching symbol 'SetCallback' + (21, 17) ERROR: No matching symbol 'param1' + (22, 17) ERROR: No matching symbol 'param2' + (23, 17) ERROR: No matching symbol 'param3' + (24, 7) ERROR: No matching symbol 'param4' + (27, 19) ERROR: No matching symbol 'param4' + (31, 2) INFO: Compiling void DynamicBeamCl::dbeam_color() + (33, 17) ERROR: No matching symbol 'param1' + (34, 17) ERROR: No matching symbol 'param2' + (48, 2) INFO: Compiling void DynamicBeamCl::dbeam_target() + (52, 18) ERROR: No matching symbol 'param1' + (55, 2) INFO: Compiling void DynamicBeamCl::dbeam_target_multi() + (58, 23) ERROR: No matching symbol 'param1' + (59, 23) ERROR: No matching symbol 'GetTokenCount' + (65, 2) INFO: Compiling void DynamicBeamCl::game_prerender() + (70, 51) ERROR: Expected expression value + (70, 51) ERROR: Instead found '' + (74, 46) ERROR: Expected expression value + (74, 46) ERROR: Instead found '' + (75, 66) ERROR: Expected expression value + (75, 66) ERROR: Instead found '' + (79, 2) INFO: Compiling void DynamicBeamCl::multi_beam() + (82, 46) ERROR: Expected expression value + (82, 46) ERROR: Instead found '' + (83, 50) ERROR: Expected expression value + (83, 50) ERROR: Instead found '' + (86, 2) INFO: Compiling void DynamicBeamCl::effect_die() + (88, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_astral.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_beam_box.as + (38, 2) INFO: Compiling EffectBeamBox::EffectBeamBox() + (40, 47) ERROR: Expected expression value + (40, 47) ERROR: Instead found '' + (48, 2) INFO: Compiling void EffectBeamBox::client_activate() + (63, 42) ERROR: Expected expression value + (63, 42) ERROR: Instead found '' + (64, 42) ERROR: Expected expression value + (64, 42) ERROR: Instead found '' + (65, 42) ERROR: Expected expression value + (65, 42) ERROR: Instead found '' + (67, 42) ERROR: Expected expression value + (67, 42) ERROR: Instead found '' + (70, 42) ERROR: Expected expression value + (70, 42) ERROR: Instead found '' + (73, 42) ERROR: Expected expression value + (73, 42) ERROR: Instead found '' + (77, 42) ERROR: Expected expression value + (77, 42) ERROR: Instead found '' + (79, 42) ERROR: Expected expression value + (79, 42) ERROR: Instead found '' + (82, 42) ERROR: Expected expression value + (82, 42) ERROR: Instead found '' + (85, 42) ERROR: Expected expression value + (85, 42) ERROR: Instead found '' + (101, 2) INFO: Compiling void EffectBeamBox::do_the_beam_thing() + (103, 3) ERROR: No matching symbol 'ClientEffect' + (104, 3) ERROR: No matching symbol 'ClientEffect' + (105, 3) ERROR: No matching symbol 'ClientEffect' + (106, 3) ERROR: No matching symbol 'ClientEffect' + (107, 3) ERROR: No matching symbol 'ClientEffect' + (108, 3) ERROR: No matching symbol 'ClientEffect' + (109, 3) ERROR: No matching symbol 'ClientEffect' + (110, 3) ERROR: No matching symbol 'ClientEffect' + (111, 3) ERROR: No matching symbol 'ClientEffect' + (112, 3) ERROR: No matching symbol 'ClientEffect' + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (117, 2) INFO: Compiling void EffectBeamBox::effect_die() + (119, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_lightning_drunk.as + (9, 2) ERROR: Expected method or property + (9, 2) ERROR: Instead found identifier 'string' + (10, 13) ERROR: Expected '(' + (10, 13) ERROR: Instead found '.' + (11, 13) ERROR: Expected '(' + (11, 13) ERROR: Instead found '.' + (12, 13) ERROR: Expected '(' + (12, 13) ERROR: Instead found '.' + (14, 22) ERROR: Expected identifier + (14, 22) ERROR: Instead found '(' + (82, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_nojump.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_push.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_quake.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_rejuv2.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_shardshield.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'float' + (11, 10) ERROR: Expected '(' + (11, 10) ERROR: Instead found '.' + (12, 10) ERROR: Expected '(' + (12, 10) ERROR: Instead found '.' + (13, 10) ERROR: Expected '(' + (13, 10) ERROR: Instead found '.' + (14, 14) ERROR: Expected '(' + (14, 14) ERROR: Instead found '.' + (16, 19) ERROR: Expected identifier + (16, 19) ERROR: Instead found '(' + (49, 1) ERROR: Unexpected token '}' + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_slow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_spiderlatch.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_stamina_regen.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_stop.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_templock.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\effect_tempnomove.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\gauntlet_invalid.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\gib_explode.as + (13, 2) INFO: Compiling GibExplode::GibExplode() + (15, 32) ERROR: No matching symbol 'GetEntityIndex' + (19, 2) INFO: Compiling void GibExplode::OnSpawn() + (21, 3) ERROR: No matching symbol 'SetInvincible' + (22, 3) ERROR: No matching symbol 'SetRace' + (23, 3) ERROR: No matching symbol 'SetGravity' + (24, 3) ERROR: No matching symbol 'SetHeight' + (25, 3) ERROR: No matching symbol 'SetWidth' + (26, 3) ERROR: No matching symbol 'SetProp' + (27, 3) ERROR: No matching symbol 'SetProp' + (28, 3) ERROR: No matching symbol 'SetProp' + (29, 3) ERROR: No matching symbol 'SetAngles' + (32, 2) INFO: Compiling void GibExplode::game_dynamically_created() + (48, 11) ERROR: Expected ')' or ',' + (48, 11) ERROR: Instead found identifier '_0' + (49, 11) ERROR: Expected ')' or ',' + (49, 11) ERROR: Instead found identifier '_5' + (52, 2) INFO: Compiling void GibExplode::explode() + (55, 13) ERROR: No matching symbol 'GetOwner' + (56, 3) ERROR: No matching symbol 'XDoDamage' + (57, 3) ERROR: No matching symbol 'ClientEvent' + (58, 3) ERROR: No matching symbol 'SetModel' + (59, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (62, 2) INFO: Compiling void GibExplode::remove_fx() + (64, 3) ERROR: No matching symbol 'DeleteEntity' + (67, 2) INFO: Compiling void GibExplode::stop_bounce() + (69, 3) ERROR: No matching symbol 'SetProp' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\goblin_latch.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\iceshield.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\lightning_disc.as + (17, 2) INFO: Compiling void LightningDisc::OnRepeatTimer() + (19, 3) ERROR: No matching symbol 'SetRepeatDelay' + (20, 3) ERROR: No matching symbol 'XDoDamage' + (23, 2) INFO: Compiling void LightningDisc::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetModel' + (27, 3) ERROR: No matching symbol 'SetModelBody' + (28, 3) ERROR: No matching symbol 'SetProp' + (29, 3) ERROR: No matching symbol 'SetProp' + (30, 3) ERROR: No matching symbol 'SetProp' + (31, 3) ERROR: No matching symbol 'SetProp' + (32, 3) ERROR: No matching symbol 'SetWidth' + (33, 3) ERROR: No matching symbol 'SetHeight' + (34, 3) ERROR: No matching symbol 'SetInvincible' + (35, 3) ERROR: No matching symbol 'SetRace' + (36, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 3) ERROR: No matching symbol 'ClientEvent' + (39, 3) ERROR: No matching symbol 'SetMonsterClip' + (42, 2) INFO: Compiling void LightningDisc::game_dynamically_created() + (44, 14) ERROR: No matching symbol 'param1' + (45, 17) ERROR: No matching symbol 'param2' + (46, 12) ERROR: No matching symbol 'param3' + (47, 14) ERROR: No matching symbol 'param4' + (51, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (52, 3) ERROR: No matching symbol 'SetVelocity' + (54, 3) ERROR: No matching signatures to 'EmitSound(const int, const int, const string)' + (54, 3) INFO: Candidates are: + (54, 3) INFO: void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int) + (54, 3) INFO: Rejected due to not enough parameters + (54, 3) INFO: void EmitSound(CBaseEntity@, const string&in) + (54, 3) INFO: void EmitSound(CBaseEntity@, const string&in, float) + (54, 3) INFO: Rejected due to type mismatch at positional parameter 1 + (57, 2) INFO: Compiling void LightningDisc::disc_dodamage() + (59, 9) ERROR: No matching symbol 'param1' + (60, 3) ERROR: No matching symbol 'ApplyEffect' + (63, 2) INFO: Compiling void LightningDisc::wobble() + (65, 18) ERROR: No matching symbol 'GetToken' + (67, 18) ERROR: No matching symbol 'GetTokenCount' + (71, 18) ERROR: No matching symbol 'GetEntityAngles' + (72, 12) ERROR: No matching signatures to 'Vector3(string, const int, const int)' + (72, 12) INFO: Candidates are: + (72, 12) INFO: Vector3::Vector3() + (72, 12) INFO: Vector3::Vector3(float, float, float) + (72, 12) INFO: Rejected due to type mismatch at positional parameter 1 + (72, 12) INFO: Vector3::Vector3(const Vector3&in) + (73, 3) ERROR: No matching symbol 'SetAngles' + (75, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 2) INFO: Compiling void LightningDisc::fx_die() + (80, 3) ERROR: No matching symbol 'ClientEvent' + (82, 3) ERROR: No matching signatures to 'EmitSound(const int, const int, const string)' + (82, 3) INFO: Candidates are: + (82, 3) INFO: void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int) + (82, 3) INFO: Rejected due to not enough parameters + (82, 3) INFO: void EmitSound(CBaseEntity@, const string&in) + (82, 3) INFO: void EmitSound(CBaseEntity@, const string&in, float) + (82, 3) INFO: Rejected due to type mismatch at positional parameter 1 + (83, 3) ERROR: No matching symbol 'SetModel' + (84, 3) ERROR: No matching symbol 'DeleteEntity' + (85, 3) ERROR: No matching symbol 'ClientEvent' + (86, 3) ERROR: No matching symbol 'ClientEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\make_light.as + (8, 2) INFO: Compiling void MakeLight::client_activate() + (10, 18) ERROR: No matching symbol 'param1' + (11, 18) ERROR: No matching symbol 'param2' + (12, 18) ERROR: No matching symbol 'param3' + (13, 18) ERROR: No matching symbol 'param4' + (14, 3) ERROR: No matching symbol 'ClientEffect' + (16, 3) ERROR: No matching signatures to 'string::L_DUR(const string)' + (19, 2) INFO: Compiling void MakeLight::remove_me() + (21, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\manaring_portals.as + (22, 2) INFO: Compiling void ManaringPortals::game_precache() + (24, 3) ERROR: No matching symbol 'Precache' + (25, 3) ERROR: No matching symbol 'Precache' + (26, 3) ERROR: No matching symbol 'Precache' + (27, 3) ERROR: No matching symbol 'Precache' + (30, 2) INFO: Compiling void ManaringPortals::client_activate() + (32, 16) ERROR: No matching symbol 'param1' + (33, 22) ERROR: No matching symbol 'param2' + (35, 3) ERROR: No matching symbol 'EmitSound3D' + (36, 3) ERROR: No matching symbol 'EmitSound3D' + (40, 2) INFO: Compiling void ManaringPortals::spawn_a_portal() + (45, 4) ERROR: No matching symbol 'ClientEffect' + (49, 4) ERROR: No matching symbol 'ClientEffect' + (53, 4) ERROR: No matching symbol 'ClientEffect' + (57, 4) ERROR: No matching symbol 'ClientEffect' + (65, 8) ERROR: Illegal operation on this datatype + (67, 5) ERROR: No matching symbol 'ScheduleDelayedEvent' + (72, 2) INFO: Compiling void ManaringPortals::setup_portal_sprite() + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (85, 2) INFO: Compiling void ManaringPortals::update_portal_sprite() + (87, 29) ERROR: No conversion from 'const string' to 'int' available. + (89, 4) ERROR: No matching symbol 'ClientEffect' + (93, 2) INFO: Compiling void ManaringPortals::kill_script() + (95, 3) ERROR: No matching symbol 'EmitSound3D' + (96, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\poison_spore.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\protection.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found identifier 'string' + (12, 12) ERROR: Expected identifier + (12, 12) ERROR: Instead found '(' + (46, 1) ERROR: Unexpected token '}' + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\scarab_latch.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_acid_splash.as + (12, 2) INFO: Compiling SfxAcidSplash::SfxAcidSplash() + (22, 3) ERROR: No matching symbol 'Precache' + (25, 2) INFO: Compiling void SfxAcidSplash::client_activate() + (27, 15) ERROR: No matching symbol 'param1' + (28, 15) ERROR: No matching symbol 'param2' + (29, 29) ERROR: No matching symbol 'PARAM' + (35, 3) ERROR: No matching symbol 'ClientEffect' + (36, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (42, 3) ERROR: No matching symbol 'EmitSound3D' + (45, 2) INFO: Compiling void SfxAcidSplash::remove_me() + (47, 3) ERROR: No matching symbol 'RemoveScript' + (50, 2) INFO: Compiling void SfxAcidSplash::create_sprites() + (53, 34) ERROR: Expected expression value + (53, 34) ERROR: Instead found '' + (58, 2) INFO: Compiling void SfxAcidSplash::update_ring_sprite() + (61, 3) ERROR: Illegal operation on 'string' + (62, 18) ERROR: No conversion from 'string' to 'int' available. + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (67, 2) INFO: Compiling void SfxAcidSplash::setup_ring_sprite() + (83, 43) ERROR: Expected expression value + (83, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_attach_sprite.as + (20, 2) INFO: Compiling void SfxAttachSprite::client_activate() + (33, 36) ERROR: Expected expression value + (33, 36) ERROR: Instead found '' + (37, 36) ERROR: Expected expression value + (37, 36) ERROR: Instead found '' + (41, 36) ERROR: Expected expression value + (41, 36) ERROR: Instead found '' + (45, 36) ERROR: Expected expression value + (45, 36) ERROR: Instead found '' + (47, 85) ERROR: Expected ')' or ',' + (47, 85) ERROR: Instead found identifier 'attachment0' + (59, 2) INFO: Compiling void SfxAttachSprite::keep_sprite_pos() + (65, 36) ERROR: Expected expression value + (65, 36) ERROR: Instead found '' + (69, 36) ERROR: Expected expression value + (69, 36) ERROR: Instead found '' + (73, 36) ERROR: Expected expression value + (73, 36) ERROR: Instead found '' + (77, 36) ERROR: Expected expression value + (77, 36) ERROR: Instead found '' + (81, 2) INFO: Compiling void SfxAttachSprite::end_fx() + (83, 3) ERROR: No matching symbol 'LogDebug' + (85, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (88, 2) INFO: Compiling void SfxAttachSprite::remove_me() + (90, 3) ERROR: No matching symbol 'RemoveScript' + (93, 2) INFO: Compiling void SfxAttachSprite::game_prerender() + (97, 38) ERROR: Expected expression value + (97, 38) ERROR: Instead found '' + (102, 2) INFO: Compiling void SfxAttachSprite::update_attach_sprite() + (104, 3) ERROR: No matching symbol 'ClientEffect' + (107, 2) INFO: Compiling void SfxAttachSprite::setup_attach_sprite() + (109, 3) ERROR: No matching symbol 'ClientEffect' + (110, 7) ERROR: No matching symbol 'GetToken' + (112, 4) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_barrier.as + (21, 2) INFO: Compiling void SfxBarrier::client_activate() + (23, 15) ERROR: No matching symbol 'param1' + (24, 15) ERROR: No matching symbol 'param2' + (25, 14) ERROR: No matching symbol 'param3' + (26, 17) ERROR: No matching symbol 'param4' + (27, 18) ERROR: No matching symbol 'param5' + (28, 15) ERROR: No matching symbol 'param6' + (29, 3) ERROR: No matching symbol 'LogDebug' + (30, 3) ERROR: No matching signatures to 'string::CL_DURATION(const string)' + (32, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 2) INFO: Compiling void SfxBarrier::spriteify() + (38, 17) ERROR: No conversion from 'string' to 'int' available. + (53, 2) INFO: Compiling void SfxBarrier::createsprite() + (55, 10) ERROR: Expected ';' + (55, 10) ERROR: Instead found identifier 'l' + (57, 32) ERROR: Expected expression value + (57, 32) ERROR: Instead found '' + (61, 2) INFO: Compiling void SfxBarrier::setup_sprite1_sparkle() + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (75, 2) INFO: Compiling void SfxBarrier::sprite_update() + (82, 43) ERROR: Expected expression value + (82, 43) ERROR: Instead found '' + (86, 38) ERROR: Expected expression value + (86, 38) ERROR: Instead found '' + (98, 2) INFO: Compiling void SfxBarrier::clear_sprites() + (103, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (106, 2) INFO: Compiling void SfxBarrier::remove_me() + (108, 7) ERROR: Expression must be of boolean type, instead found 'string' + (115, 4) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_beam_cage.as + (25, 2) INFO: Compiling void SfxBeamCage::client_activate() + (27, 39) ERROR: Expected expression value + (27, 39) ERROR: Instead found '' + (28, 40) ERROR: Expected expression value + (28, 40) ERROR: Instead found '' + (29, 33) ERROR: Expected expression value + (29, 33) ERROR: Instead found '' + (30, 27) ERROR: Expected expression value + (30, 27) ERROR: Instead found '' + (51, 42) ERROR: Expected expression value + (51, 42) ERROR: Instead found '' + (61, 2) INFO: Compiling void SfxBeamCage::draw_coil_loop() + (68, 35) ERROR: Expected expression value + (68, 35) ERROR: Instead found '' + (70, 37) ERROR: Expected expression value + (70, 37) ERROR: Instead found '' + (78, 35) ERROR: Expected expression value + (78, 35) ERROR: Instead found '' + (82, 2) INFO: Compiling void SfxBeamCage::end_fx() + (84, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (87, 2) INFO: Compiling void SfxBeamCage::remove_fx() + (89, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_beam_sparks.as + (21, 2) INFO: Compiling void SfxBeamSparks::client_activate() + (23, 14) ERROR: No matching symbol 'param1' + (24, 15) ERROR: No matching symbol 'param2' + (26, 18) ERROR: No matching symbol 'param3' + (27, 14) ERROR: No matching symbol 'param4' + (28, 17) ERROR: No matching symbol 'param5' + (31, 3) ERROR: No matching symbol 'ClientEffect' + (33, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (36, 2) INFO: Compiling void SfxBeamSparks::end_fx() + (39, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (42, 2) INFO: Compiling void SfxBeamSparks::remove_me() + (44, 3) ERROR: No matching symbol 'RemoveScript' + (47, 2) INFO: Compiling void SfxBeamSparks::target_sprites() + (51, 40) ERROR: Expected expression value + (51, 40) ERROR: Instead found '' + (61, 2) INFO: Compiling void SfxBeamSparks::track_attach() + (65, 35) ERROR: Expected expression value + (65, 35) ERROR: Instead found '' + (68, 2) INFO: Compiling void SfxBeamSparks::update_attach_sprite() + (70, 3) ERROR: No matching symbol 'ClientEffect' + (73, 2) INFO: Compiling void SfxBeamSparks::setup_attach_sprite() + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (87, 2) INFO: Compiling void SfxBeamSparks::setup_target_sprite() + (100, 79) ERROR: Expected expression value + (100, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_bleed.as + (16, 2) INFO: Compiling void SfxBleed::client_activate() + (32, 61) ERROR: Expected expression value + (32, 61) ERROR: Instead found '' + (38, 2) INFO: Compiling void SfxBleed::spurt_blood() + (42, 38) ERROR: Expected expression value + (42, 38) ERROR: Instead found '' + (46, 38) ERROR: Expected expression value + (46, 38) ERROR: Instead found '' + (52, 2) INFO: Compiling void SfxBleed::setup_temp_sprite() + (54, 44) ERROR: Expected expression value + (54, 44) ERROR: Instead found '' + (57, 39) ERROR: Expected expression value + (57, 39) ERROR: Instead found '' + (58, 38) ERROR: Expected expression value + (58, 38) ERROR: Instead found '' + (78, 2) INFO: Compiling void SfxBleed::remove_me() + (80, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_blue_flames.as + (18, 2) INFO: Compiling void SfxBlueFlames::OnRepeatTimer() + (20, 3) ERROR: No matching symbol 'SetRepeatDelay' + (24, 2) INFO: Compiling void SfxBlueFlames::game_precache() + (26, 3) ERROR: No matching symbol 'Precache' + (29, 2) INFO: Compiling void SfxBlueFlames::client_activate() + (31, 12) ERROR: No matching symbol 'param2' + (32, 3) ERROR: No matching symbol 'PARAM1' + (35, 2) INFO: Compiling void SfxBlueFlames::createsprite() + (37, 10) ERROR: Expected ';' + (37, 10) ERROR: Instead found identifier 'l' + (42, 2) INFO: Compiling void SfxBlueFlames::setup_sprite1_flame() + (44, 3) ERROR: No matching symbol 'ClientEffect' + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (56, 2) INFO: Compiling void SfxBlueFlames::effect_die() + (58, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_bunny.as + (8, 2) INFO: Compiling void SfxBunny::client_activate() + (13, 34) ERROR: Expected expression value + (13, 34) ERROR: Instead found '' + (24, 2) INFO: Compiling void SfxBunny::remove_script() + (26, 3) ERROR: No matching symbol 'RemoveScript' + (29, 2) INFO: Compiling void SfxBunny::update_bunny() + (33, 34) ERROR: Expected expression value + (33, 34) ERROR: Instead found '' + (45, 2) INFO: Compiling void SfxBunny::setup_bunny() + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_burst_sphere.as + (14, 2) INFO: Compiling void SfxBurstSphere::client_activate() + (16, 15) ERROR: No matching symbol 'param1' + (22, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 3) ERROR: No matching symbol 'ClientEffect' + (26, 2) INFO: Compiling void SfxBurstSphere::update_bubble() + (28, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (30, 10) ERROR: No matching symbol 'GROW_MODE' + (32, 23) ERROR: No conversion from 'string' to 'float' available. + (35, 5) ERROR: No matching symbol 'GROW_MODE' + (37, 9) ERROR: No matching symbol 'GROW_MODE' + (41, 4) ERROR: No matching symbol 'ClientEffect' + (45, 4) ERROR: No matching symbol 'ClientEffect' + (49, 2) INFO: Compiling void SfxBurstSphere::end_fx() + (52, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (55, 2) INFO: Compiling void SfxBurstSphere::remove_fx() + (57, 3) ERROR: No matching symbol 'RemoveScript' + (60, 2) INFO: Compiling void SfxBurstSphere::setup_bubble() + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_circle_of_fire.as + (22, 2) INFO: Compiling void SfxCircleOfFire::client_activate() + (24, 15) ERROR: No matching symbol 'param1' + (25, 12) ERROR: No matching symbol 'param2' + (26, 14) ERROR: No matching symbol 'param3' + (27, 17) ERROR: No matching symbol 'param4' + (28, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (29, 3) ERROR: No matching symbol 'ClientEffect' + (30, 3) ERROR: No matching symbol 'ClientEffect' + (39, 2) INFO: Compiling void SfxCircleOfFire::make_flames() + (42, 37) ERROR: Expected expression value + (42, 37) ERROR: Instead found '' + (47, 2) INFO: Compiling void SfxCircleOfFire::remove_fx() + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void SfxCircleOfFire::remove_me() + (55, 3) ERROR: No matching symbol 'RemoveScript' + (58, 2) INFO: Compiling void SfxCircleOfFire::setup_seal1() + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (70, 2) INFO: Compiling void SfxCircleOfFire::setup_seal2() + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (82, 2) INFO: Compiling void SfxCircleOfFire::setup_flame_sprite() + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_cloud.as + (20, 2) INFO: Compiling void SfxCloud::client_activate() + (22, 15) ERROR: No matching symbol 'param1' + (23, 17) ERROR: No matching symbol 'param2' + (24, 15) ERROR: No matching symbol 'param3' + (25, 14) ERROR: No matching symbol 'param4' + (26, 15) ERROR: No matching symbol 'param5' + (27, 29) ERROR: No matching symbol 'PARAM' + (31, 28) ERROR: No matching symbol 'PARAM' + (33, 15) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (36, 3) ERROR: No matching symbol 'ClientEffect' + (38, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (40, 3) ERROR: No matching symbol 'EmitSound3D' + (43, 2) INFO: Compiling void SfxCloud::smokes_loop() + (49, 37) ERROR: Expected expression value + (49, 37) ERROR: Instead found '' + (51, 37) ERROR: Expected expression value + (51, 37) ERROR: Instead found '' + (55, 2) INFO: Compiling void SfxCloud::end_fx() + (58, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (61, 2) INFO: Compiling void SfxCloud::remove_me() + (63, 3) ERROR: No matching symbol 'RemoveScript' + (66, 2) INFO: Compiling void SfxCloud::setup_smoke() + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_cod.as + (22, 2) INFO: Compiling void SfxCod::client_activate() + (24, 15) ERROR: No matching symbol 'param1' + (25, 17) ERROR: No matching symbol 'param2' + (26, 15) ERROR: No matching symbol 'param3' + (28, 14) ERROR: No matching symbol 'param4' + (29, 14) ERROR: No matching symbol 'param5' + (30, 3) ERROR: No matching symbol 'LogDebug' + (31, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (32, 3) ERROR: No matching symbol 'ClientEffect' + (33, 3) ERROR: No matching symbol 'ClientEffect' + (36, 2) INFO: Compiling void SfxCod::end_fx() + (39, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (42, 2) INFO: Compiling void SfxCod::remove_me() + (44, 3) ERROR: No matching symbol 'RemoveScript' + (47, 2) INFO: Compiling void SfxCod::setup_seal() + (50, 3) ERROR: Illegal operation on 'string' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_dark_burst.as + (14, 2) INFO: Compiling void SfxDarkBurst::client_activate() + (16, 15) ERROR: No matching symbol 'param1' + (17, 17) ERROR: No matching symbol 'param2' + (19, 3) ERROR: No matching symbol 'EmitSound3D' + (20, 3) ERROR: No matching symbol 'EmitSound3D' + (21, 3) ERROR: No matching symbol 'SetCallback' + (23, 3) ERROR: No matching symbol 'ClientEffect' + (25, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (26, 3) ERROR: No matching symbol 'ClientEffect' + (29, 2) INFO: Compiling void SfxDarkBurst::game_prerender() + (31, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (33, 4) ERROR: No matching symbol 'ClientEffect' + (41, 4) ERROR: No matching symbol 'ClientEffect' + (45, 2) INFO: Compiling void SfxDarkBurst::update_dark_burst() + (47, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (50, 18) ERROR: No conversion from 'string' to 'double' available. + (54, 4) ERROR: No matching symbol 'ClientEffect' + (55, 4) ERROR: No matching symbol 'ClientEffect' + (57, 7) ERROR: Illegal operation on this datatype + (59, 4) ERROR: No matching symbol 'ClientEffect' + (63, 2) INFO: Compiling void SfxDarkBurst::end_fx() + (66, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (69, 2) INFO: Compiling void SfxDarkBurst::remove_fx() + (71, 3) ERROR: No matching symbol 'RemoveScript' + (74, 2) INFO: Compiling void SfxDarkBurst::setup_dark_burst() + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_dburst.as + (23, 2) INFO: Compiling void SfxDburst::OnRepeatTimer() + (25, 3) ERROR: No matching symbol 'SetRepeatDelay' + (26, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (29, 16) ERROR: No conversion from 'string' to 'int' available. + (33, 16) ERROR: No conversion from 'string' to 'int' available. + (39, 2) INFO: Compiling void SfxDburst::client_activate() + (41, 15) ERROR: No matching symbol 'param1' + (42, 12) ERROR: No matching symbol 'param2' + (44, 8) ERROR: No matching symbol 'param3' + (46, 15) ERROR: No conversion from 'string' to 'int' available. + (54, 4) ERROR: No matching symbol 'EmitSound3D' + (58, 3) ERROR: Illegal operation on 'string' + (60, 3) ERROR: No matching symbol 'SetCallback' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (68, 2) INFO: Compiling void SfxDburst::game_prerender() + (71, 68) ERROR: Expected expression value + (71, 68) ERROR: Instead found '' + (75, 2) INFO: Compiling void SfxDburst::end_fx() + (78, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (81, 2) INFO: Compiling void SfxDburst::remove_fx() + (83, 3) ERROR: No matching symbol 'RemoveScript' + (86, 2) INFO: Compiling void SfxDburst::update_aura() + (107, 76) ERROR: Expected expression value + (107, 76) ERROR: Instead found '' + (111, 2) INFO: Compiling void SfxDburst::make_aura() + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (122, 3) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'ClientEffect' + (124, 3) ERROR: No matching symbol 'ClientEffect' + (125, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_drunk.as + (9, 2) ERROR: Expected method or property + (9, 2) ERROR: Instead found identifier 'string' + (10, 13) ERROR: Expected '(' + (10, 13) ERROR: Instead found '.' + (11, 10) ERROR: Expected '(' + (11, 10) ERROR: Instead found '.' + (12, 10) ERROR: Expected '(' + (12, 10) ERROR: Instead found '.' + (13, 13) ERROR: Expected '(' + (13, 13) ERROR: Instead found '.' + (14, 10) ERROR: Expected '(' + (14, 10) ERROR: Instead found '.' + (15, 13) ERROR: Expected '(' + (15, 13) ERROR: Instead found '.' + (16, 13) ERROR: Expected '(' + (16, 13) ERROR: Instead found '.' + (17, 13) ERROR: Expected '(' + (17, 13) ERROR: Instead found '.' + (18, 10) ERROR: Expected '(' + (18, 10) ERROR: Instead found '.' + (19, 13) ERROR: Expected '(' + (19, 13) ERROR: Instead found '.' + (20, 13) ERROR: Expected '(' + (20, 13) ERROR: Instead found '.' + (21, 13) ERROR: Expected '(' + (21, 13) ERROR: Instead found '.' + (23, 10) ERROR: Expected identifier + (23, 10) ERROR: Instead found '(' + (145, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_explode.as + (26, 2) INFO: Compiling void SfxExplode::client_activate() + (28, 15) ERROR: No matching symbol 'param1' + (29, 15) ERROR: No matching symbol 'param2' + (31, 17) ERROR: No conversion from 'string' to 'int' available. + (35, 17) ERROR: No conversion from 'string' to 'int' available. + (40, 3) ERROR: Illegal operation on 'string' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (48, 3) ERROR: No matching symbol 'EmitSound3D' + (51, 2) INFO: Compiling void SfxExplode::remove_me() + (53, 3) ERROR: No matching symbol 'RemoveScript' + (56, 2) INFO: Compiling void SfxExplode::create_sprites() + (59, 34) ERROR: Expected expression value + (59, 34) ERROR: Instead found '' + (64, 2) INFO: Compiling void SfxExplode::update_sprite() + (66, 42) ERROR: Expected expression value + (66, 42) ERROR: Instead found '' + (74, 37) ERROR: Expected expression value + (74, 37) ERROR: Instead found '' + (77, 2) INFO: Compiling void SfxExplode::setup_sprite() + (90, 43) ERROR: Expected expression value + (90, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_fire_burst.as + (12, 2) INFO: Compiling SfxFireBurst::SfxFireBurst() + (22, 3) ERROR: No matching symbol 'Precache' + (25, 2) INFO: Compiling void SfxFireBurst::client_activate() + (27, 15) ERROR: No matching symbol 'param1' + (28, 15) ERROR: No matching symbol 'param2' + (29, 20) ERROR: No matching symbol 'param3' + (30, 23) ERROR: No matching symbol 'param4' + (31, 7) ERROR: Expression must be of boolean type, instead found 'string' + (33, 4) ERROR: No matching symbol 'ClientEffect' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (41, 3) ERROR: No matching symbol 'EmitSound3D' + (44, 2) INFO: Compiling void SfxFireBurst::remove_me() + (46, 3) ERROR: No matching symbol 'RemoveScript' + (49, 2) INFO: Compiling void SfxFireBurst::create_sprites() + (52, 34) ERROR: Expected expression value + (52, 34) ERROR: Instead found '' + (57, 2) INFO: Compiling void SfxFireBurst::setup_ring_sprite() + (74, 43) ERROR: Expected expression value + (74, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_fire_staff.as + (8, 2) INFO: Compiling void SfxFireStaff::client_activate() + (10, 22) ERROR: No matching symbol 'param1' + (11, 3) ERROR: No matching symbol 'EmitSound3D' + (12, 3) ERROR: No matching symbol 'ClientEffect' + (13, 3) ERROR: No matching symbol 'ClientEffect' + (15, 3) ERROR: No matching symbol 'ClientEffect' + (16, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (19, 2) INFO: Compiling void SfxFireStaff::remove_fx() + (21, 3) ERROR: No matching symbol 'RemoveScript' + (24, 2) INFO: Compiling void SfxFireStaff::setup_seal() + (26, 3) ERROR: No matching symbol 'ClientEffect' + (27, 3) ERROR: No matching symbol 'ClientEffect' + (28, 3) ERROR: No matching symbol 'ClientEffect' + (29, 3) ERROR: No matching symbol 'ClientEffect' + (30, 3) ERROR: No matching symbol 'ClientEffect' + (31, 3) ERROR: No matching symbol 'ClientEffect' + (32, 3) ERROR: No matching symbol 'ClientEffect' + (33, 3) ERROR: No matching symbol 'ClientEffect' + (36, 2) INFO: Compiling void SfxFireStaff::setup_fire_ring() + (38, 3) ERROR: No matching symbol 'ClientEffect' + (39, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching symbol 'ClientEffect' + (43, 3) ERROR: No matching symbol 'ClientEffect' + (44, 3) ERROR: No matching symbol 'ClientEffect' + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_fire_wave.as + (25, 2) INFO: Compiling void SfxFireWave::client_activate() + (27, 12) ERROR: No matching symbol 'param1' + (28, 12) ERROR: No matching symbol 'param2' + (29, 3) ERROR: No matching symbol 'ClientEffect' + (34, 2) INFO: Compiling void SfxFireWave::setup_fire_wave() + (39, 3) ERROR: Illegal operation on 'string' + (40, 21) ERROR: No conversion from 'string' to 'int' available. + (47, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void SfxFireWave::setup_fire_sprites() + (61, 34) ERROR: Expected expression value + (61, 34) ERROR: Instead found '' + (62, 54) ERROR: Expected expression value + (62, 54) ERROR: Instead found '' + (67, 2) INFO: Compiling void SfxFireWave::remove_fx() + (69, 3) ERROR: No matching symbol 'RemoveScript' + (72, 2) INFO: Compiling void SfxFireWave::setup_fire_sprite() + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_fire_wave2.as + (10, 2) INFO: Compiling SfxFireWave2::SfxFireWave2() + (21, 3) ERROR: No matching symbol 'Precache' + (17, 2) INFO: Compiling SfxIceWave2::SfxIceWave2() + (28, 3) ERROR: No matching symbol 'Precache' + (31, 2) INFO: Compiling void SfxIceWave2::client_activate() + (33, 15) ERROR: No matching symbol 'param1' + (34, 12) ERROR: No matching symbol 'param2' + (35, 14) ERROR: No matching symbol 'param3' + (37, 3) ERROR: Illegal operation on 'string' + (38, 17) ERROR: No conversion from 'string' to 'int' available. + (44, 17) ERROR: No conversion from 'string' to 'double' available. + (46, 4) ERROR: Illegal operation on 'string' + (51, 3) ERROR: Illegal operation on 'string' + (52, 3) ERROR: Illegal operation on 'string' + (53, 3) ERROR: No matching symbol 'EmitSound3D' + (58, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (61, 2) INFO: Compiling void SfxIceWave2::make_sprites() + (63, 13) ERROR: Can't implicitly convert from 'string' to 'int&'. + (66, 3) ERROR: Illegal operation on 'string' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 13) ERROR: No conversion from 'string' to math type available. + (71, 2) INFO: Compiling void SfxIceWave2::remove_fx() + (73, 3) ERROR: No matching symbol 'RemoveScript' + (76, 2) INFO: Compiling void SfxIceWave2::setup_ring_sprite() + (86, 43) ERROR: Expected expression value + (86, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_fissure.as + (36, 2) INFO: Compiling void SfxFissure::client_activate() + (38, 19) ERROR: No matching symbol 'param1' + (40, 17) ERROR: No matching symbol 'param2' + (41, 17) ERROR: No matching symbol 'param3' + (42, 20) ERROR: No matching symbol 'param4' + (43, 14) ERROR: No matching symbol 'param5' + (44, 13) ERROR: No matching symbol 'param6' + (49, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (52, 2) INFO: Compiling void SfxFissure::end_fx() + (55, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (58, 2) INFO: Compiling void SfxFissure::remove_fx() + (60, 3) ERROR: No matching symbol 'RemoveScript' + (63, 2) INFO: Compiling void SfxFissure::fissure_loop() + (65, 7) ERROR: Illegal operation on this datatype + (66, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (68, 3) ERROR: No matching symbol 'DRAWN_FISSURE_LENGTH' + (69, 7) ERROR: No matching symbol 'DRAWN_FISSURE_LENGTH' + (71, 4) ERROR: No matching symbol 'LogDebug' + (81, 2) INFO: Compiling void SfxFissure::fissure_debri() + (102, 39) ERROR: Expected expression value + (102, 39) ERROR: Instead found '' + (111, 39) ERROR: Expected expression value + (111, 39) ERROR: Instead found '' + (119, 40) ERROR: Expected expression value + (119, 40) ERROR: Instead found '' + (120, 39) ERROR: Expected expression value + (120, 39) ERROR: Instead found '' + (128, 40) ERROR: Expected expression value + (128, 40) ERROR: Instead found '' + (129, 39) ERROR: Expected expression value + (129, 39) ERROR: Instead found '' + (137, 40) ERROR: Expected expression value + (137, 40) ERROR: Instead found '' + (138, 39) ERROR: Expected expression value + (138, 39) ERROR: Instead found '' + (146, 40) ERROR: Expected expression value + (146, 40) ERROR: Instead found '' + (147, 39) ERROR: Expected expression value + (147, 39) ERROR: Instead found '' + (160, 2) INFO: Compiling void SfxFissure::update_rock() + (164, 18) ERROR: No conversion from 'string' to 'int' available. + (165, 23) ERROR: No conversion from 'string' to 'float' available. + (166, 3) ERROR: Illegal operation on 'string' + (167, 3) ERROR: No matching symbol 'ClientEffect' + (168, 3) ERROR: No matching symbol 'ClientEffect' + (169, 3) ERROR: No matching symbol 'ClientEffect' + (172, 2) INFO: Compiling void SfxFissure::setup_rock() + (174, 3) ERROR: No matching symbol 'ClientEffect' + (175, 3) ERROR: No matching symbol 'ClientEffect' + (176, 3) ERROR: No matching symbol 'ClientEffect' + (177, 3) ERROR: No matching symbol 'ClientEffect' + (178, 3) ERROR: No matching symbol 'ClientEffect' + (179, 3) ERROR: No matching symbol 'ClientEffect' + (180, 3) ERROR: No matching symbol 'ClientEffect' + (181, 3) ERROR: No matching symbol 'ClientEffect' + (182, 3) ERROR: No matching symbol 'ClientEffect' + (184, 3) ERROR: No matching symbol 'ClientEffect' + (185, 3) ERROR: No matching symbol 'ClientEffect' + (188, 3) ERROR: No matching symbol 'ClientEffect' + (191, 2) INFO: Compiling void SfxFissure::update_fire() + (194, 3) ERROR: Illegal operation on 'string' + (195, 18) ERROR: No conversion from 'string' to 'int' available. + (196, 3) ERROR: No matching symbol 'ClientEffect' + (197, 3) ERROR: No matching symbol 'ClientEffect' + (200, 2) INFO: Compiling void SfxFissure::setup_fire() + (202, 3) ERROR: No matching symbol 'ClientEffect' + (203, 3) ERROR: No matching symbol 'ClientEffect' + (204, 3) ERROR: No matching symbol 'ClientEffect' + (205, 3) ERROR: No matching symbol 'ClientEffect' + (206, 3) ERROR: No matching symbol 'ClientEffect' + (207, 3) ERROR: No matching symbol 'ClientEffect' + (208, 3) ERROR: No matching symbol 'ClientEffect' + (209, 3) ERROR: No matching symbol 'ClientEffect' + (210, 3) ERROR: No matching symbol 'ClientEffect' + (213, 13) ERROR: No conversion from 'string' to 'double' available. + (215, 4) ERROR: Illegal operation on 'string' + (217, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (220, 14) ERROR: No conversion from 'string' to 'double' available. + (222, 5) ERROR: Illegal operation on 'string' + (225, 3) ERROR: No matching symbol 'ClientEffect' + (226, 3) ERROR: No matching symbol 'ClientEffect' + (227, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_flames.as + (20, 2) INFO: Compiling SfxFlames::SfxFlames() + (23, 16) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (27, 2) INFO: Compiling void SfxFlames::client_activate() + (46, 30) ERROR: Expected expression value + (46, 30) ERROR: Instead found '' + (55, 52) ERROR: Expected expression value + (55, 52) ERROR: Instead found '' + (62, 2) INFO: Compiling void SfxFlames::drip_flames() + (66, 39) ERROR: Expected expression value + (66, 39) ERROR: Instead found '' + (71, 2) INFO: Compiling void SfxFlames::game_prerender() + (75, 37) ERROR: Expected expression value + (75, 37) ERROR: Instead found '' + (79, 2) INFO: Compiling void SfxFlames::effect_die() + (82, 3) ERROR: No matching symbol 'RemoveScript' + (85, 2) INFO: Compiling void SfxFlames::setup_sprite1_flame() + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (94, 7) ERROR: Expression must be of boolean type, instead found 'string' + (96, 4) ERROR: No matching symbol 'ClientEffect' + (97, 4) ERROR: No matching symbol 'ClientEffect' + (98, 4) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_flame_repulse.as + (10, 2) INFO: Compiling void SfxFlameRepulse::client_activate() + (12, 15) ERROR: No matching symbol 'param1' + (13, 3) ERROR: No matching symbol 'ClientEffect' + (14, 3) ERROR: No matching symbol 'ClientEffect' + (15, 3) ERROR: No matching symbol 'EmitSound3D' + (16, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (19, 2) INFO: Compiling void SfxFlameRepulse::remove_fx() + (21, 3) ERROR: No matching symbol 'RemoveScript' + (24, 2) INFO: Compiling void SfxFlameRepulse::update_repulse_burst() + (27, 19) ERROR: No conversion from 'string' to 'int' available. + (29, 3) ERROR: No matching symbol 'ClientEffect' + (30, 3) ERROR: No matching symbol 'ClientEffect' + (33, 2) INFO: Compiling void SfxFlameRepulse::setup_repulse_burst() + (35, 3) ERROR: No matching symbol 'ClientEffect' + (36, 3) ERROR: No matching symbol 'ClientEffect' + (37, 3) ERROR: No matching symbol 'ClientEffect' + (38, 3) ERROR: No matching symbol 'ClientEffect' + (39, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching symbol 'ClientEffect' + (43, 3) ERROR: No matching symbol 'ClientEffect' + (44, 3) ERROR: No matching symbol 'ClientEffect' + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_follow_glow_cl.as + (13, 2) INFO: Compiling void SfxFollowGlowCl::client_activate() + (19, 51) ERROR: Expected expression value + (19, 51) ERROR: Instead found '' + (25, 2) INFO: Compiling void SfxFollowGlowCl::game_prerender() + (27, 28) ERROR: Expected expression value + (27, 28) ERROR: Instead found '' + (28, 37) ERROR: Expected expression value + (28, 37) ERROR: Instead found '' + (32, 2) INFO: Compiling void SfxFollowGlowCl::remove_light() + (34, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_gib_burst.as + (25, 2) INFO: Compiling void SfxGibBurst::client_activate() + (27, 15) ERROR: No matching symbol 'param1' + (28, 15) ERROR: No matching symbol 'param2' + (29, 18) ERROR: No matching symbol 'param3' + (30, 21) ERROR: No matching symbol 'param4' + (31, 12) ERROR: No matching symbol 'param5' + (32, 14) ERROR: No matching symbol 'param6' + (33, 17) ERROR: No matching symbol 'param7' + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (38, 2) INFO: Compiling void SfxGibBurst::start_gibs() + (40, 21) ERROR: No conversion from 'string' to 'int' available. + (46, 2) INFO: Compiling void SfxGibBurst::create_gibs() + (48, 3) ERROR: No matching symbol 'ClientEffect' + (51, 2) INFO: Compiling void SfxGibBurst::setup_gib() + (66, 79) ERROR: Expected expression value + (66, 79) ERROR: Instead found '' + (82, 2) INFO: Compiling void SfxGibBurst::remove_me() + (84, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_hit_shield.as + (20, 2) INFO: Compiling void SfxHitShield::client_activate() + (22, 15) ERROR: No matching symbol 'param1' + (23, 12) ERROR: No matching symbol 'param2' + (24, 14) ERROR: No matching symbol 'param3' + (25, 14) ERROR: No matching symbol 'param4' + (26, 17) ERROR: No matching symbol 'param5' + (27, 3) ERROR: No matching symbol 'ClientEffect' + (28, 3) ERROR: No matching symbol 'ClientEffect' + (29, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (32, 2) INFO: Compiling void SfxHitShield::end_fx() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void SfxHitShield::remove_me() + (39, 3) ERROR: No matching symbol 'RemoveScript' + (42, 2) INFO: Compiling void SfxHitShield::setup_sprite() + (44, 3) ERROR: No matching symbol 'ClientEffect' + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (56, 2) INFO: Compiling void SfxHitShield::setup_sprite_negyaw() + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (66, 15) ERROR: No conversion from 'string' to 'double' available. + (68, 4) ERROR: Illegal operation on 'string' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_icecage.as + (12, 2) INFO: Compiling void SfxIcecage::client_activate() + (18, 77) ERROR: Expected expression value + (18, 77) ERROR: Instead found '' + (22, 2) INFO: Compiling void SfxIcecage::end_cage_fx() + (25, 62) ERROR: Expected expression value + (25, 62) ERROR: Instead found '' + (34, 2) INFO: Compiling void SfxIcecage::remove_fx() + (36, 3) ERROR: No matching symbol 'RemoveScript' + (39, 2) INFO: Compiling void SfxIcecage::do_gibs() + (41, 39) ERROR: Expected expression value + (41, 39) ERROR: Instead found '' + (42, 28) ERROR: Expected expression value + (42, 28) ERROR: Instead found '' + (46, 73) ERROR: Expected expression value + (46, 73) ERROR: Instead found '' + (49, 2) INFO: Compiling void SfxIcecage::update_icecage() + (53, 41) ERROR: Expected expression value + (53, 41) ERROR: Instead found '' + (54, 28) ERROR: Expected expression value + (54, 28) ERROR: Instead found '' + (58, 34) ERROR: Expected expression value + (58, 34) ERROR: Instead found '' + (68, 80) ERROR: Expected expression value + (68, 80) ERROR: Instead found '' + (74, 2) INFO: Compiling void SfxIcecage::setup_icecage() + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (94, 2) INFO: Compiling void SfxIcecage::setup_gibs() + (113, 79) ERROR: Expected expression value + (113, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_icecage_old.as + (9, 2) ERROR: Expected method or property + (9, 2) ERROR: Instead found identifier 'string' + (10, 12) ERROR: Expected '(' + (10, 12) ERROR: Instead found '.' + (60, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_ice_burst.as + (10, 2) INFO: Compiling SfxIceBurst::SfxIceBurst() + (14, 3) ERROR: No matching symbol 'Precache' + (12, 2) INFO: Compiling SfxFireBurst::SfxFireBurst() + (22, 3) ERROR: No matching symbol 'Precache' + (25, 2) INFO: Compiling void SfxFireBurst::client_activate() + (27, 15) ERROR: No matching symbol 'param1' + (28, 15) ERROR: No matching symbol 'param2' + (29, 20) ERROR: No matching symbol 'param3' + (30, 23) ERROR: No matching symbol 'param4' + (31, 7) ERROR: Expression must be of boolean type, instead found 'string' + (33, 4) ERROR: No matching symbol 'ClientEffect' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (41, 3) ERROR: No matching symbol 'EmitSound3D' + (44, 2) INFO: Compiling void SfxFireBurst::remove_me() + (46, 3) ERROR: No matching symbol 'RemoveScript' + (49, 2) INFO: Compiling void SfxFireBurst::create_sprites() + (52, 34) ERROR: Expected expression value + (52, 34) ERROR: Instead found '' + (57, 2) INFO: Compiling void SfxFireBurst::setup_ring_sprite() + (74, 43) ERROR: Expected expression value + (74, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_ice_wave2.as + (17, 2) INFO: Compiling SfxIceWave2::SfxIceWave2() + (28, 3) ERROR: No matching symbol 'Precache' + (31, 2) INFO: Compiling void SfxIceWave2::client_activate() + (33, 15) ERROR: No matching symbol 'param1' + (34, 12) ERROR: No matching symbol 'param2' + (35, 14) ERROR: No matching symbol 'param3' + (37, 3) ERROR: Illegal operation on 'string' + (38, 17) ERROR: No conversion from 'string' to 'int' available. + (44, 17) ERROR: No conversion from 'string' to 'double' available. + (46, 4) ERROR: Illegal operation on 'string' + (51, 3) ERROR: Illegal operation on 'string' + (52, 3) ERROR: Illegal operation on 'string' + (53, 3) ERROR: No matching symbol 'EmitSound3D' + (58, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (61, 2) INFO: Compiling void SfxIceWave2::make_sprites() + (63, 13) ERROR: Can't implicitly convert from 'string' to 'int&'. + (66, 3) ERROR: Illegal operation on 'string' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 13) ERROR: No conversion from 'string' to math type available. + (71, 2) INFO: Compiling void SfxIceWave2::remove_fx() + (73, 3) ERROR: No matching symbol 'RemoveScript' + (76, 2) INFO: Compiling void SfxIceWave2::setup_ring_sprite() + (86, 43) ERROR: Expected expression value + (86, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_jump_beams.as + (32, 2) INFO: Compiling void SfxJumpBeams::OnSpawn() + (34, 3) ERROR: No matching symbol 'SetName' + (35, 3) ERROR: No matching symbol 'SetModel' + (36, 3) ERROR: No matching symbol 'SetRace' + (37, 3) ERROR: No matching symbol 'SetInvincible' + (38, 3) ERROR: No matching symbol 'SetHeight' + (39, 3) ERROR: No matching symbol 'SetWidth' + (40, 3) ERROR: No matching symbol 'SetSolid' + (41, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (44, 2) INFO: Compiling void SfxJumpBeams::game_dynamically_created() + (46, 15) ERROR: No matching symbol 'param1' + (47, 14) ERROR: No matching symbol 'param2' + (48, 3) ERROR: No matching symbol 'ClientEvent' + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void SfxJumpBeams::jump_beam() + (59, 17) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (59, 17) INFO: Candidates are: + (59, 17) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (59, 17) INFO: Rejected due to type mismatch at positional parameter 1 + (63, 5) ERROR: No matching signatures to 'SfxJumpBeams::scan_target(string)' + (63, 5) INFO: Candidates are: + (63, 5) INFO: void MS::SfxJumpBeams::scan_target() + (69, 4) ERROR: No matching symbol 'ClientEvent' + (73, 4) ERROR: No matching symbol 'ClientEvent' + (76, 20) ERROR: No matching symbol 'MAX_JUMPS' + (78, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (82, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (86, 2) INFO: Compiling void SfxJumpBeams::scan_target() + (96, 50) ERROR: Expected expression value + (96, 50) ERROR: Instead found '' + (120, 37) ERROR: Expected expression value + (120, 37) ERROR: Instead found '' + (125, 2) INFO: Compiling void SfxJumpBeams::beam_damage() + (127, 18) ERROR: No matching symbol 'GetSkillLevel' + (129, 3) ERROR: Illegal operation on 'string' + (130, 3) ERROR: No matching symbol 'XDoDamage' + (132, 3) ERROR: Illegal operation on 'string' + (133, 3) ERROR: No matching symbol 'ApplyEffect' + (136, 2) INFO: Compiling void SfxJumpBeams::end_me_please() + (138, 3) ERROR: No matching symbol 'ClientEvent' + (139, 3) ERROR: No matching symbol 'DeleteEntity' + (142, 2) INFO: Compiling void SfxJumpBeams::func_is_ent() + (145, 8) ERROR: No matching symbol 'param1' + (147, 8) WARN: Variable 'L_RETURN' hides another variable of same name in outer scope + (150, 3) WARN: Unreachable code + (153, 2) INFO: Compiling void SfxJumpBeams::client_activate() + (155, 22) ERROR: No matching symbol 'param1' + (156, 3) ERROR: No matching symbol 'SetCallback' + (162, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (163, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (166, 2) INFO: Compiling void SfxJumpBeams::game_prerender() + (172, 41) ERROR: Expected expression value + (172, 41) ERROR: Instead found '' + (174, 41) ERROR: Expected expression value + (174, 41) ERROR: Instead found '' + (177, 42) ERROR: Expected expression value + (177, 42) ERROR: Instead found '' + (181, 42) ERROR: Expected expression value + (181, 42) ERROR: Instead found '' + (185, 37) ERROR: Expected expression value + (185, 37) ERROR: Instead found '' + (190, 2) INFO: Compiling void SfxJumpBeams::fx_loop() + (202, 37) ERROR: Expected expression value + (202, 37) ERROR: Instead found '' + (207, 2) INFO: Compiling void SfxJumpBeams::beam_jump() + (216, 34) ERROR: Expected expression value + (216, 34) ERROR: Instead found '' + (225, 42) ERROR: Expected expression value + (225, 42) ERROR: Instead found '' + (263, 2) INFO: Compiling void SfxJumpBeams::end_fx() + (266, 3) ERROR: No matching symbol 'RemoveScript' + (269, 2) INFO: Compiling void SfxJumpBeams::remove_fx() + (272, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_lightning.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found identifier 'string' + (9, 12) ERROR: Expected '(' + (9, 12) ERROR: Instead found '.' + (10, 12) ERROR: Expected '(' + (10, 12) ERROR: Instead found '.' + (11, 12) ERROR: Expected '(' + (11, 12) ERROR: Instead found '.' + (12, 12) ERROR: Expected '(' + (12, 12) ERROR: Instead found '.' + (13, 12) ERROR: Expected '(' + (13, 12) ERROR: Instead found '.' + (14, 12) ERROR: Expected '(' + (14, 12) ERROR: Instead found '.' + (16, 14) ERROR: Expected identifier + (16, 14) ERROR: Instead found '(' + (83, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_lightning_cage.as + (13, 2) INFO: Compiling void SfxLightningCage::client_activate() + (15, 3) ERROR: No matching symbol 'LogDebug' + (16, 17) ERROR: No matching symbol 'param1' + (17, 15) ERROR: No matching symbol 'param2' + (20, 3) ERROR: No matching symbol 'ClientEffect' + (21, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (24, 2) INFO: Compiling void SfxLightningCage::update_efield() + (26, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (27, 3) ERROR: No matching symbol 'ClientEffect' + (28, 3) ERROR: No matching symbol 'ClientEffect' + (31, 2) INFO: Compiling void SfxLightningCage::end_fx() + (33, 3) ERROR: No matching symbol 'LogDebug' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void SfxLightningCage::remove_fx() + (40, 3) ERROR: No matching symbol 'RemoveScript' + (43, 2) INFO: Compiling void SfxLightningCage::setup_efield() + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_lightning_shield.as + (17, 2) INFO: Compiling void SfxLightningShield::client_activate() + (19, 18) ERROR: No matching symbol 'param1' + (20, 19) ERROR: No matching symbol 'param2' + (21, 21) ERROR: No matching symbol 'param3' + (22, 17) ERROR: No matching symbol 'param4' + (23, 24) ERROR: No matching symbol 'param5' + (25, 3) ERROR: No matching signatures to 'string::SHIELD_DURATION(const string)' + (26, 7) ERROR: Expression must be of boolean type, instead found 'string' + (30, 2) INFO: Compiling void SfxLightningShield::lshield_on() + (36, 3) ERROR: No matching symbol 'PARAM1' + (39, 2) INFO: Compiling void SfxLightningShield::lshield_loop() + (48, 42) ERROR: Expected expression value + (48, 42) ERROR: Instead found '' + (49, 40) ERROR: Expected expression value + (49, 40) ERROR: Instead found '' + (55, 37) ERROR: Expected expression value + (55, 37) ERROR: Instead found '' + (58, 35) ERROR: Expected expression value + (58, 35) ERROR: Instead found '' + (61, 42) ERROR: Expected expression value + (61, 42) ERROR: Instead found '' + (62, 40) ERROR: Expected expression value + (62, 40) ERROR: Instead found '' + (63, 37) ERROR: Expected expression value + (63, 37) ERROR: Instead found '' + (66, 35) ERROR: Expected expression value + (66, 35) ERROR: Instead found '' + (75, 2) INFO: Compiling void SfxLightningShield::remove_effect() + (77, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_light_fade.as + (15, 2) INFO: Compiling void SfxLightFade::client_activate() + (17, 3) ERROR: No matching symbol 'SetCallback' + (18, 15) ERROR: No matching symbol 'param1' + (19, 16) ERROR: No matching symbol 'param2' + (20, 14) ERROR: No matching symbol 'param3' + (23, 3) ERROR: No matching symbol 'ClientEffect' + (25, 9) ERROR: No matching symbol 'param4' + (26, 3) ERROR: No matching symbol 'EmitSound3D' + (29, 2) INFO: Compiling void SfxLightFade::game_prerender() + (34, 40) ERROR: Expected expression value + (34, 40) ERROR: Instead found '' + (47, 2) INFO: Compiling void SfxLightFade::remove_fx() + (49, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_model_test.as + (13, 2) INFO: Compiling void SfxModelTest::client_activate() + (15, 12) ERROR: No matching symbol 'param1' + (16, 15) ERROR: No matching symbol 'param2' + (17, 20) ERROR: No matching symbol 'param3' + (18, 16) ERROR: No matching symbol 'param4' + (19, 3) ERROR: No matching signatures to 'SfxModelTest::create_model(string)' + (19, 3) INFO: Candidates are: + (19, 3) INFO: void MS::SfxModelTest::create_model() + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void SfxModelTest::end_fx() + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void SfxModelTest::remove_me() + (30, 3) ERROR: No matching symbol 'RemoveScript' + (33, 2) INFO: Compiling void SfxModelTest::create_model() + (35, 55) ERROR: Expected expression value + (35, 55) ERROR: Instead found '' + (38, 2) INFO: Compiling void SfxModelTest::setup_model() + (41, 76) ERROR: Expected expression value + (41, 76) ERROR: Instead found '' + (48, 78) ERROR: Expected expression value + (48, 78) ERROR: Instead found '' + (49, 75) ERROR: Expected expression value + (49, 75) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_motionblur.as + (9, 2) ERROR: Expected method or property + (9, 2) ERROR: Instead found identifier 'string' + (10, 11) ERROR: Expected '(' + (10, 11) ERROR: Instead found '.' + (11, 11) ERROR: Expected '(' + (11, 11) ERROR: Instead found '.' + (12, 12) ERROR: Expected '(' + (12, 12) ERROR: Instead found '.' + (75, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_motionblur_perm.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found identifier 'string' + (11, 11) ERROR: Expected '(' + (11, 11) ERROR: Instead found '.' + (12, 11) ERROR: Expected '(' + (12, 11) ERROR: Instead found '.' + (13, 12) ERROR: Expected '(' + (13, 12) ERROR: Instead found '.' + (76, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_motionblur_temp.as + (17, 2) INFO: Compiling void SfxMotionblurTemp::client_activate() + (19, 15) ERROR: No matching symbol 'param1' + (20, 20) ERROR: No matching symbol 'param2' + (21, 16) ERROR: No matching symbol 'param3' + (22, 17) ERROR: No matching symbol 'param4' + (23, 3) ERROR: No matching symbol 'SetCallback' + (25, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (28, 2) INFO: Compiling void SfxMotionblurTemp::end_fx() + (31, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (34, 2) INFO: Compiling void SfxMotionblurTemp::remove_me() + (36, 3) ERROR: No matching symbol 'RemoveScript' + (39, 2) INFO: Compiling void SfxMotionblurTemp::game_prerender() + (42, 39) ERROR: Expected expression value + (42, 39) ERROR: Instead found '' + (48, 33) ERROR: Expected expression value + (48, 33) ERROR: Instead found '' + (56, 2) INFO: Compiling void SfxMotionblurTemp::create_model() + (58, 55) ERROR: Expected expression value + (58, 55) ERROR: Instead found '' + (61, 2) INFO: Compiling void SfxMotionblurTemp::setup_model() + (71, 78) ERROR: Expected expression value + (71, 78) ERROR: Instead found '' + (72, 75) ERROR: Expected expression value + (72, 75) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_multi_lightning.as + (15, 2) INFO: Compiling void SfxMultiLightning::client_activate() + (17, 14) ERROR: No matching symbol 'param1' + (18, 23) ERROR: No matching symbol 'GetTokenCount' + (22, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (25, 2) INFO: Compiling void SfxMultiLightning::remove_fx() + (27, 3) ERROR: No matching symbol 'RemoveScript' + (30, 2) INFO: Compiling void SfxMultiLightning::zap_target() + (33, 42) ERROR: Expected expression value + (33, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_poison_aura.as + (21, 2) INFO: Compiling void SfxPoisonAura::client_activate() + (25, 33) ERROR: Expected expression value + (25, 33) ERROR: Instead found '' + (28, 27) ERROR: Expected expression value + (28, 27) ERROR: Instead found '' + (32, 3) ERROR: Expected expression value + (32, 3) ERROR: Instead found reserved keyword 'else' + (37, 51) ERROR: Expected expression value + (37, 51) ERROR: Instead found '' + (44, 2) INFO: Compiling void SfxPoisonAura::game_prerender() + (46, 28) ERROR: Expected expression value + (46, 28) ERROR: Instead found '' + (47, 37) ERROR: Expected expression value + (47, 37) ERROR: Instead found '' + (48, 27) ERROR: Expected expression value + (48, 27) ERROR: Instead found '' + (55, 2) INFO: Compiling void SfxPoisonAura::end_fx() + (58, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (61, 2) INFO: Compiling void SfxPoisonAura::remove_me() + (63, 3) ERROR: No matching symbol 'RemoveScript' + (66, 2) INFO: Compiling void SfxPoisonAura::fx_loop() + (70, 37) ERROR: Expected expression value + (70, 37) ERROR: Instead found '' + (71, 27) ERROR: Expected expression value + (71, 27) ERROR: Instead found '' + (76, 32) ERROR: Expected expression value + (76, 32) ERROR: Instead found '' + (79, 32) ERROR: Expected expression value + (79, 32) ERROR: Instead found '' + (82, 32) ERROR: Expected expression value + (82, 32) ERROR: Instead found '' + (86, 2) INFO: Compiling void SfxPoisonAura::setup_smokes() + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (94, 3) ERROR: No matching symbol 'ClientEffect' + (95, 3) ERROR: No matching symbol 'ClientEffect' + (96, 3) ERROR: No matching symbol 'ClientEffect' + (97, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_poison_burst.as + (12, 2) INFO: Compiling SfxPoisonBurst::SfxPoisonBurst() + (22, 3) ERROR: No matching symbol 'Precache' + (25, 2) INFO: Compiling void SfxPoisonBurst::client_activate() + (27, 15) ERROR: No matching symbol 'param1' + (28, 15) ERROR: No matching symbol 'param2' + (29, 20) ERROR: No matching symbol 'param3' + (30, 23) ERROR: No matching symbol 'param4' + (31, 7) ERROR: Expression must be of boolean type, instead found 'string' + (33, 4) ERROR: No matching symbol 'ClientEffect' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (41, 3) ERROR: No matching symbol 'EmitSound3D' + (44, 2) INFO: Compiling void SfxPoisonBurst::remove_me() + (46, 3) ERROR: No matching symbol 'RemoveScript' + (49, 2) INFO: Compiling void SfxPoisonBurst::create_sprites() + (52, 34) ERROR: Expected expression value + (52, 34) ERROR: Instead found '' + (57, 2) INFO: Compiling void SfxPoisonBurst::setup_ring_sprite() + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_poison_cloud.as + (26, 2) INFO: Compiling void SfxPoisonCloud::client_activate() + (28, 15) ERROR: No matching symbol 'param1' + (29, 12) ERROR: No matching symbol 'param2' + (30, 17) ERROR: No matching symbol 'param3' + (31, 7) ERROR: No matching symbol 'param4' + (33, 15) ERROR: No matching symbol 'param4' + (41, 3) ERROR: Illegal operation on 'string' + (42, 3) ERROR: No matching symbol 'ClientEffect' + (44, 19) ERROR: No conversion from 'string' to 'int' available. + (46, 8) WARN: Variable 'L_AOE_RATIO' hides another variable of same name in outer scope + (48, 3) ERROR: Illegal operation on 'string' + (51, 20) ERROR: No conversion from 'string' to math type available. + (52, 20) ERROR: No conversion from 'string' to math type available. + (55, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (56, 7) ERROR: Illegal operation on this datatype + (57, 3) ERROR: No matching symbol 'EmitSound3D' + (60, 2) INFO: Compiling void SfxPoisonCloud::end_fx() + (63, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (66, 2) INFO: Compiling void SfxPoisonCloud::remove_fx() + (68, 3) ERROR: No matching symbol 'RemoveScript' + (71, 2) INFO: Compiling void SfxPoisonCloud::do_smokes() + (79, 32) ERROR: Expected expression value + (79, 32) ERROR: Instead found '' + (85, 44) ERROR: Expected expression value + (85, 44) ERROR: Instead found '' + (101, 2) INFO: Compiling void SfxPoisonCloud::update_smoke() + (104, 17) ERROR: No conversion from 'string' to 'double' available. + (106, 4) ERROR: Illegal operation on 'string' + (107, 4) ERROR: No matching symbol 'ClientEffect' + (108, 4) ERROR: No matching symbol 'ClientEffect' + (112, 4) ERROR: No matching symbol 'ClientEffect' + (116, 2) INFO: Compiling void SfxPoisonCloud::setup_smoke() + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (122, 3) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'ClientEffect' + (124, 3) ERROR: No matching symbol 'ClientEffect' + (125, 3) ERROR: No matching symbol 'ClientEffect' + (126, 3) ERROR: No matching symbol 'ClientEffect' + (127, 3) ERROR: No matching symbol 'ClientEffect' + (128, 3) ERROR: No matching symbol 'ClientEffect' + (129, 3) ERROR: No matching symbol 'ClientEffect' + (130, 3) ERROR: No matching symbol 'ClientEffect' + (131, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_poison_explode.as + (10, 2) INFO: Compiling SfxPoisonExplode::SfxPoisonExplode() + (20, 3) ERROR: No matching symbol 'Precache' + (26, 2) INFO: Compiling void SfxExplode::client_activate() + (28, 15) ERROR: No matching symbol 'param1' + (29, 15) ERROR: No matching symbol 'param2' + (31, 17) ERROR: No conversion from 'string' to 'int' available. + (35, 17) ERROR: No conversion from 'string' to 'int' available. + (40, 3) ERROR: Illegal operation on 'string' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (48, 3) ERROR: No matching symbol 'EmitSound3D' + (51, 2) INFO: Compiling void SfxExplode::remove_me() + (53, 3) ERROR: No matching symbol 'RemoveScript' + (56, 2) INFO: Compiling void SfxExplode::create_sprites() + (59, 34) ERROR: Expected expression value + (59, 34) ERROR: Instead found '' + (64, 2) INFO: Compiling void SfxExplode::update_sprite() + (66, 42) ERROR: Expected expression value + (66, 42) ERROR: Instead found '' + (74, 37) ERROR: Expected expression value + (74, 37) ERROR: Instead found '' + (77, 2) INFO: Compiling void SfxExplode::setup_sprite() + (90, 43) ERROR: Expected expression value + (90, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_prism_blast.as + (31, 2) INFO: Compiling void SfxPrismBlast::OnRepeatTimer() + (33, 3) ERROR: No matching symbol 'SetRepeatDelay' + (34, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (37, 16) ERROR: No conversion from 'string' to 'int' available. + (41, 16) ERROR: No conversion from 'string' to 'int' available. + (47, 2) INFO: Compiling void SfxPrismBlast::client_activate() + (49, 15) ERROR: No matching symbol 'param1' + (50, 12) ERROR: No matching symbol 'param2' + (51, 20) ERROR: No matching symbol 'param3' + (53, 18) ERROR: No matching symbol 'FindToken' + (54, 14) ERROR: No matching symbol 'GetToken' + (56, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (59, 4) ERROR: No matching symbol 'SetCallback' + (60, 4) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'EmitSound3D' + (64, 8) ERROR: No matching symbol 'DO_SPRITES' + (73, 5) ERROR: No matching symbol 'setup_bawls' + (79, 25) ERROR: No matching symbol 'GetTokenCount' + (81, 4) ERROR: Illegal operation on 'string' + (86, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (89, 2) INFO: Compiling void SfxPrismBlast::game_prerender() + (93, 68) ERROR: Expected expression value + (93, 68) ERROR: Instead found '' + (96, 2) INFO: Compiling void SfxPrismBlast::do_circles() + (99, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (114, 2) INFO: Compiling void SfxPrismBlast::draw_circle_loop() + (117, 39) ERROR: Expected expression value + (117, 39) ERROR: Instead found '' + (120, 37) ERROR: Expected expression value + (120, 37) ERROR: Instead found '' + (121, 118) ERROR: Expected expression value + (121, 118) ERROR: Instead found '' + (124, 2) INFO: Compiling void SfxPrismBlast::end_fx() + (127, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (130, 2) INFO: Compiling void SfxPrismBlast::remove_fx() + (132, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_pulse_sphere.as + (19, 2) INFO: Compiling void SfxPulseSphere::client_activate() + (41, 41) ERROR: Expected expression value + (41, 41) ERROR: Instead found '' + (45, 41) ERROR: Expected expression value + (45, 41) ERROR: Instead found '' + (49, 41) ERROR: Expected expression value + (49, 41) ERROR: Instead found '' + (53, 41) ERROR: Expected expression value + (53, 41) ERROR: Instead found '' + (57, 84) ERROR: Expected expression value + (57, 84) ERROR: Instead found '' + (66, 2) INFO: Compiling void SfxPulseSphere::end_fx() + (69, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (72, 2) INFO: Compiling void SfxPulseSphere::remove_fx() + (74, 3) ERROR: No matching symbol 'RemoveScript' + (77, 2) INFO: Compiling void SfxPulseSphere::blur_loop() + (80, 33) ERROR: Expected expression value + (80, 33) ERROR: Instead found '' + (81, 34) ERROR: Expected expression value + (81, 34) ERROR: Instead found '' + (82, 55) ERROR: Expected expression value + (82, 55) ERROR: Instead found '' + (83, 34) ERROR: Expected expression value + (83, 34) ERROR: Instead found '' + (84, 55) ERROR: Expected expression value + (84, 55) ERROR: Instead found '' + (87, 2) INFO: Compiling void SfxPulseSphere::setup_blur() + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (94, 3) ERROR: No matching symbol 'ClientEffect' + (95, 3) ERROR: No matching symbol 'ClientEffect' + (96, 3) ERROR: No matching symbol 'ClientEffect' + (97, 3) ERROR: No matching symbol 'ClientEffect' + (98, 3) ERROR: No matching symbol 'ClientEffect' + (99, 3) ERROR: No matching symbol 'ClientEffect' + (102, 2) INFO: Compiling void SfxPulseSphere::setup_sphere() + (104, 3) ERROR: No matching symbol 'ClientEffect' + (105, 3) ERROR: No matching symbol 'ClientEffect' + (106, 3) ERROR: No matching symbol 'ClientEffect' + (107, 3) ERROR: No matching symbol 'ClientEffect' + (108, 3) ERROR: No matching symbol 'ClientEffect' + (109, 3) ERROR: No matching symbol 'ClientEffect' + (110, 3) ERROR: No matching symbol 'ClientEffect' + (111, 3) ERROR: No matching symbol 'ClientEffect' + (112, 3) ERROR: No matching symbol 'ClientEffect' + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (119, 2) INFO: Compiling void SfxPulseSphere::update_sphere() + (121, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (128, 4) ERROR: No matching symbol 'ClientEffect' + (129, 4) ERROR: No matching symbol 'ClientEffect' + (133, 4) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_quake.as + (28, 2) INFO: Compiling void SfxQuake::client_activate() + (46, 15) ERROR: Expected ')' or ',' + (46, 15) ERROR: Instead found identifier '_5' + (49, 42) ERROR: Expected expression value + (49, 42) ERROR: Instead found '' + (51, 35) ERROR: Expected expression value + (51, 35) ERROR: Instead found '' + (57, 2) INFO: Compiling void SfxQuake::flaming_rocks_loop() + (60, 11) ERROR: Expected ')' or ',' + (60, 11) ERROR: Instead found identifier '_25' + (63, 35) ERROR: Expected expression value + (63, 35) ERROR: Instead found '' + (72, 39) ERROR: Expected expression value + (72, 39) ERROR: Instead found '' + (76, 2) INFO: Compiling void SfxQuake::cb_frock_land() + (85, 41) ERROR: Expected expression value + (85, 41) ERROR: Instead found '' + (89, 2) INFO: Compiling void SfxQuake::setup_frock() + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (94, 3) ERROR: No matching symbol 'ClientEffect' + (95, 3) ERROR: No matching symbol 'ClientEffect' + (96, 3) ERROR: No matching symbol 'ClientEffect' + (97, 3) ERROR: No matching symbol 'ClientEffect' + (98, 3) ERROR: No matching symbol 'ClientEffect' + (99, 3) ERROR: No matching symbol 'ClientEffect' + (100, 3) ERROR: No matching symbol 'ClientEffect' + (101, 3) ERROR: No matching symbol 'ClientEffect' + (102, 3) ERROR: No matching symbol 'ClientEffect' + (103, 3) ERROR: No matching symbol 'ClientEffect' + (106, 2) INFO: Compiling void SfxQuake::update_frock() + (108, 23) ERROR: No conversion from 'const string' to 'float' available. + (109, 3) ERROR: No matching symbol 'ClientEffect' + (110, 3) ERROR: No matching symbol 'ClientEffect' + (113, 2) INFO: Compiling void SfxQuake::setup_frock_trail() + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (122, 3) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'ClientEffect' + (126, 2) INFO: Compiling void SfxQuake::setup_frock_explode() + (128, 3) ERROR: No matching symbol 'ClientEffect' + (129, 3) ERROR: No matching symbol 'ClientEffect' + (130, 3) ERROR: No matching symbol 'ClientEffect' + (131, 3) ERROR: No matching symbol 'ClientEffect' + (132, 3) ERROR: No matching symbol 'ClientEffect' + (133, 3) ERROR: No matching symbol 'ClientEffect' + (134, 3) ERROR: No matching symbol 'ClientEffect' + (135, 3) ERROR: No matching symbol 'ClientEffect' + (136, 3) ERROR: No matching symbol 'ClientEffect' + (137, 3) ERROR: No matching symbol 'ClientEffect' + (140, 2) INFO: Compiling void SfxQuake::quake_loop() + (146, 35) ERROR: Expected expression value + (146, 35) ERROR: Instead found '' + (161, 2) INFO: Compiling void SfxQuake::do_circles() + (168, 40) ERROR: Expected expression value + (168, 40) ERROR: Instead found '' + (177, 2) INFO: Compiling void SfxQuake::do_rocks() + (180, 32) ERROR: Expected expression value + (180, 32) ERROR: Instead found '' + (189, 2) INFO: Compiling void SfxQuake::setup_rock() + (191, 3) ERROR: No matching symbol 'ClientEffect' + (192, 3) ERROR: No matching symbol 'ClientEffect' + (193, 3) ERROR: No matching symbol 'ClientEffect' + (194, 3) ERROR: No matching symbol 'ClientEffect' + (195, 3) ERROR: No matching symbol 'ClientEffect' + (196, 3) ERROR: No matching symbol 'ClientEffect' + (197, 3) ERROR: No matching symbol 'ClientEffect' + (198, 3) ERROR: No matching symbol 'ClientEffect' + (199, 3) ERROR: No matching symbol 'ClientEffect' + (200, 3) ERROR: No matching symbol 'ClientEffect' + (201, 3) ERROR: No matching symbol 'ClientEffect' + (202, 3) ERROR: No matching symbol 'ClientEffect' + (203, 3) ERROR: No matching symbol 'ClientEffect' + (206, 2) INFO: Compiling void SfxQuake::update_rock() + (222, 39) ERROR: Expected expression value + (222, 39) ERROR: Instead found '' + (232, 40) ERROR: Expected expression value + (232, 40) ERROR: Instead found '' + (240, 2) INFO: Compiling void SfxQuake::end_fx() + (243, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (246, 2) INFO: Compiling void SfxQuake::remove_fx() + (248, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_raura.as + (20, 2) INFO: Compiling void SfxRaura::client_activate() + (22, 14) ERROR: No matching symbol 'param1' + (23, 17) ERROR: No matching symbol 'param2' + (24, 3) ERROR: No matching symbol 'LogDebug' + (27, 3) ERROR: No matching signatures to 'string::L_DURATION(const string)' + (28, 18) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (28, 18) INFO: Candidates are: + (28, 18) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (28, 18) INFO: Rejected due to type mismatch at positional parameter 1 + (30, 3) ERROR: No matching symbol 'ClientEffect' + (33, 2) INFO: Compiling void SfxRaura::remove_fx() + (36, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (39, 2) INFO: Compiling void SfxRaura::remove_me() + (41, 3) ERROR: No matching symbol 'RemoveScript' + (44, 2) INFO: Compiling void SfxRaura::update_aura() + (52, 76) ERROR: Expected expression value + (52, 76) ERROR: Instead found '' + (53, 38) ERROR: Expected expression value + (53, 38) ERROR: Instead found '' + (56, 34) ERROR: Expected expression value + (56, 34) ERROR: Instead found '' + (64, 2) INFO: Compiling void SfxRaura::make_aura() + (66, 3) ERROR: No matching symbol 'LogDebug' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_repulse_burst.as + (15, 2) INFO: Compiling void SfxRepulseBurst::client_activate() + (17, 15) ERROR: No matching symbol 'param1' + (18, 15) ERROR: No matching symbol 'param2' + (19, 17) ERROR: No matching symbol 'param3' + (20, 7) ERROR: No matching symbol 'param4' + (22, 19) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (26, 19) ERROR: No matching symbol 'param4' + (30, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (31, 3) ERROR: No matching symbol 'EmitSound3D' + (42, 2) INFO: Compiling void SfxRepulseBurst::createsprite() + (46, 37) ERROR: Expected expression value + (46, 37) ERROR: Instead found '' + (50, 2) INFO: Compiling void SfxRepulseBurst::setup_sprite1_sparkle() + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (65, 2) INFO: Compiling void SfxRepulseBurst::sprite_update() + (67, 7) ERROR: Illegal operation on this datatype + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (74, 2) INFO: Compiling void SfxRepulseBurst::clear_sprites() + (78, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (81, 2) INFO: Compiling void SfxRepulseBurst::remove_me() + (83, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_seal.as + (25, 2) INFO: Compiling void SfxSeal::client_activate() + (27, 15) ERROR: No matching symbol 'param1' + (28, 12) ERROR: No matching symbol 'param2' + (29, 14) ERROR: No matching symbol 'param3' + (30, 17) ERROR: No matching symbol 'param4' + (31, 20) ERROR: No matching symbol 'param5' + (32, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (35, 4) ERROR: No matching symbol 'ClientEffect' + (36, 4) ERROR: No matching symbol 'ClientEffect' + (40, 4) ERROR: No matching symbol 'ClientEffect' + (46, 4) ERROR: No matching symbol 'EmitSound3D' + (47, 4) ERROR: No matching symbol 'ClientEffect' + (48, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void SfxSeal::end_fx() + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void SfxSeal::remove_fx() + (61, 3) ERROR: No matching symbol 'RemoveScript' + (64, 2) INFO: Compiling void SfxSeal::make_snow() + (75, 34) ERROR: Expected expression value + (75, 34) ERROR: Instead found '' + (84, 2) INFO: Compiling void SfxSeal::update_spider_seal() + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (91, 8) ERROR: Expression must be of boolean type, instead found 'int&' + (110, 2) INFO: Compiling void SfxSeal::setup_spider_seal() + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (122, 3) ERROR: No matching symbol 'ClientEffect' + (125, 2) INFO: Compiling void SfxSeal::setup_seal1() + (127, 3) ERROR: No matching symbol 'ClientEffect' + (128, 3) ERROR: No matching symbol 'ClientEffect' + (129, 3) ERROR: No matching symbol 'ClientEffect' + (130, 3) ERROR: No matching symbol 'ClientEffect' + (131, 3) ERROR: No matching symbol 'ClientEffect' + (132, 3) ERROR: No matching symbol 'ClientEffect' + (133, 3) ERROR: No matching symbol 'ClientEffect' + (134, 3) ERROR: No matching symbol 'ClientEffect' + (137, 2) INFO: Compiling void SfxSeal::setup_seal2() + (139, 3) ERROR: No matching symbol 'ClientEffect' + (140, 3) ERROR: No matching symbol 'ClientEffect' + (141, 3) ERROR: No matching symbol 'ClientEffect' + (142, 3) ERROR: No matching symbol 'ClientEffect' + (143, 3) ERROR: No matching symbol 'ClientEffect' + (144, 3) ERROR: No matching symbol 'ClientEffect' + (145, 3) ERROR: No matching symbol 'ClientEffect' + (146, 3) ERROR: No matching symbol 'ClientEffect' + (149, 2) INFO: Compiling void SfxSeal::setup_snow() + (151, 3) ERROR: No matching symbol 'ClientEffect' + (152, 3) ERROR: No matching symbol 'ClientEffect' + (153, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_seal_follow.as + (24, 2) INFO: Compiling void SfxSealFollow::client_activate() + (38, 67) ERROR: Expected expression value + (38, 67) ERROR: Instead found '' + (39, 51) ERROR: Expected expression value + (39, 51) ERROR: Instead found '' + (43, 2) INFO: Compiling void SfxSealFollow::game_prerender() + (45, 28) ERROR: Expected expression value + (45, 28) ERROR: Instead found '' + (46, 54) ERROR: Expected expression value + (46, 54) ERROR: Instead found '' + (49, 2) INFO: Compiling void SfxSealFollow::remove_fx() + (51, 3) ERROR: No matching symbol 'LogDebug' + (53, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (56, 2) INFO: Compiling void SfxSealFollow::remove_me() + (58, 3) ERROR: No matching symbol 'RemoveScript' + (61, 2) INFO: Compiling void SfxSealFollow::update_aura() + (69, 38) ERROR: Expected expression value + (69, 38) ERROR: Instead found '' + (72, 34) ERROR: Expected expression value + (72, 34) ERROR: Instead found '' + (80, 2) INFO: Compiling void SfxSealFollow::make_aura() + (82, 3) ERROR: No matching symbol 'LogDebug' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_seal_instant.as + (32, 2) INFO: Compiling void SfxSealInstant::client_activate() + (34, 15) ERROR: No matching symbol 'param1' + (35, 15) ERROR: No matching symbol 'param2' + (36, 14) ERROR: No matching symbol 'param3' + (37, 15) ERROR: No matching symbol 'param4' + (41, 17) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (49, 18) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (57, 19) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (65, 20) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (73, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (75, 3) ERROR: No matching symbol 'EmitSound3D' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: Illegal operation on 'string' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (82, 2) INFO: Compiling void SfxSealInstant::end_fx() + (85, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (88, 2) INFO: Compiling void SfxSealInstant::remove_fx() + (90, 3) ERROR: No matching symbol 'RemoveScript' + (93, 2) INFO: Compiling void SfxSealInstant::setup_seal_instant() + (95, 3) ERROR: No matching symbol 'ClientEffect' + (96, 3) ERROR: No matching symbol 'ClientEffect' + (97, 3) ERROR: No matching symbol 'ClientEffect' + (98, 3) ERROR: No matching symbol 'ClientEffect' + (99, 3) ERROR: No matching symbol 'ClientEffect' + (100, 3) ERROR: No matching symbol 'ClientEffect' + (101, 3) ERROR: No matching symbol 'ClientEffect' + (102, 3) ERROR: No matching symbol 'ClientEffect' + (103, 3) ERROR: No matching symbol 'ClientEffect' + (106, 2) INFO: Compiling void SfxSealInstant::fire_aura() + (108, 3) ERROR: No matching symbol 'ClientEffect' + (111, 2) INFO: Compiling void SfxSealInstant::make_aura() + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (122, 3) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'ClientEffect' + (124, 3) ERROR: No matching symbol 'ClientEffect' + (125, 3) ERROR: No matching symbol 'ClientEffect' + (128, 2) INFO: Compiling void SfxSealInstant::cold_aura() + (130, 3) ERROR: No matching symbol 'ClientEffect' + (133, 2) INFO: Compiling void SfxSealInstant::setup_shpere() + (135, 3) ERROR: No matching symbol 'ClientEffect' + (136, 3) ERROR: No matching symbol 'ClientEffect' + (137, 3) ERROR: No matching symbol 'ClientEffect' + (138, 3) ERROR: No matching symbol 'ClientEffect' + (139, 3) ERROR: No matching symbol 'ClientEffect' + (140, 3) ERROR: No matching symbol 'ClientEffect' + (141, 3) ERROR: No matching symbol 'ClientEffect' + (142, 3) ERROR: No matching symbol 'ClientEffect' + (143, 3) ERROR: No matching symbol 'ClientEffect' + (144, 3) ERROR: No matching symbol 'ClientEffect' + (156, 2) INFO: Compiling void SfxSealInstant::create_beams() + (161, 40) ERROR: Expected expression value + (161, 40) ERROR: Instead found '' + (168, 2) INFO: Compiling void SfxSealInstant::poison_aura() + (171, 18) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (184, 2) INFO: Compiling void SfxSealInstant::create_sprites() + (187, 34) ERROR: Expected expression value + (187, 34) ERROR: Instead found '' + (192, 2) INFO: Compiling void SfxSealInstant::setup_ring_sprite() + (209, 44) ERROR: Expected expression value + (209, 44) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_seal_warning.as + (24, 2) INFO: Compiling void SfxSealWarning::client_activate() + (26, 15) ERROR: No matching symbol 'param1' + (27, 15) ERROR: No matching symbol 'param2' + (28, 14) ERROR: No matching symbol 'param3' + (29, 15) ERROR: No matching symbol 'param4' + (30, 17) ERROR: No matching symbol 'param5' + (34, 3) ERROR: No matching symbol 'SetCallback' + (37, 17) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (43, 18) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (49, 19) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (55, 20) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (60, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (62, 3) ERROR: No matching symbol 'EmitSound3D' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (68, 2) INFO: Compiling void SfxSealWarning::end_fx() + (71, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (74, 2) INFO: Compiling void SfxSealWarning::remove_fx() + (76, 3) ERROR: No matching symbol 'RemoveScript' + (79, 2) INFO: Compiling void SfxSealWarning::setup_seal_warn() + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (93, 2) INFO: Compiling void SfxSealWarning::update_seal_warn() + (99, 45) ERROR: Expected expression value + (99, 45) ERROR: Instead found '' + (108, 2) INFO: Compiling void SfxSealWarning::game_prerender() + (112, 47) ERROR: Expected expression value + (112, 47) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_sfaura.as + (27, 2) INFO: Compiling void SfxSfaura::OnRepeatTimer() + (29, 3) ERROR: No matching symbol 'SetRepeatDelay' + (30, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (33, 16) ERROR: No conversion from 'string' to 'double' available. + (37, 16) ERROR: No conversion from 'string' to 'double' available. + (39, 4) ERROR: No matching symbol 'LogDebug' + (44, 2) INFO: Compiling void SfxSfaura::client_activate() + (58, 82) ERROR: Expected expression value + (58, 82) ERROR: Instead found '' + (59, 51) ERROR: Expected expression value + (59, 51) ERROR: Instead found '' + (63, 2) INFO: Compiling void SfxSfaura::game_prerender() + (65, 28) ERROR: Expected expression value + (65, 28) ERROR: Instead found '' + (66, 54) ERROR: Expected expression value + (66, 54) ERROR: Instead found '' + (69, 2) INFO: Compiling void SfxSfaura::remove_fx() + (72, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (75, 2) INFO: Compiling void SfxSfaura::remove_me() + (77, 3) ERROR: No matching symbol 'RemoveScript' + (80, 2) INFO: Compiling void SfxSfaura::update_aura() + (88, 76) ERROR: Expected expression value + (88, 76) ERROR: Instead found '' + (89, 38) ERROR: Expected expression value + (89, 38) ERROR: Instead found '' + (92, 34) ERROR: Expected expression value + (92, 34) ERROR: Instead found '' + (100, 2) INFO: Compiling void SfxSfaura::make_aura() + (114, 75) ERROR: Expected expression value + (114, 75) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_shock_burst.as + (12, 2) INFO: Compiling SfxShockBurst::SfxShockBurst() + (16, 3) ERROR: No matching symbol 'Precache' + (17, 3) ERROR: No matching symbol 'Precache' + (20, 2) INFO: Compiling void SfxShockBurst::client_activate() + (22, 15) ERROR: No matching symbol 'param1' + (23, 15) ERROR: No matching symbol 'param2' + (24, 20) ERROR: No matching symbol 'param3' + (25, 23) ERROR: No matching symbol 'param4' + (26, 7) ERROR: Expression must be of boolean type, instead found 'string' + (28, 4) ERROR: No matching symbol 'ClientEffect' + (30, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (36, 3) ERROR: No matching symbol 'ClientEffect' + (37, 3) ERROR: No matching symbol 'EmitSound3D' + (40, 2) INFO: Compiling void SfxShockBurst::remove_me() + (42, 3) ERROR: No matching symbol 'RemoveScript' + (45, 2) INFO: Compiling void SfxShockBurst::create_beams() + (50, 40) ERROR: Expected expression value + (50, 40) ERROR: Instead found '' + (57, 2) INFO: Compiling void SfxShockBurst::setup_seal() + (60, 17) ERROR: No conversion from 'string' to 'int' available. + (62, 8) WARN: Variable 'MODEL_BODY' hides another variable of same name in outer scope + (64, 17) ERROR: No conversion from 'string' to 'int' available. + (66, 8) WARN: Variable 'MODEL_BODY' hides another variable of same name in outer scope + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_splodie.as + (16, 2) INFO: Compiling void SfxSplodie::client_activate() + (18, 18) ERROR: No matching symbol 'param1' + (19, 15) ERROR: No matching symbol 'param2' + (20, 3) ERROR: No matching symbol 'ClientEffect' + (21, 3) ERROR: No matching symbol 'EmitSound3D' + (22, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (25, 2) INFO: Compiling void SfxSplodie::remove_me() + (27, 3) ERROR: No matching symbol 'RemoveScript' + (28, 3) ERROR: No matching symbol 'DeleteEntity' + (31, 2) INFO: Compiling void SfxSplodie::setup_smoke() + (33, 3) ERROR: No matching symbol 'ClientEffect' + (34, 3) ERROR: No matching symbol 'ClientEffect' + (35, 3) ERROR: No matching symbol 'ClientEffect' + (36, 3) ERROR: No matching symbol 'ClientEffect' + (37, 3) ERROR: No matching symbol 'ClientEffect' + (38, 3) ERROR: No matching symbol 'ClientEffect' + (39, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching symbol 'ClientEffect' + (43, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_sprite.as + (11, 2) INFO: Compiling void SfxSprite::client_activate() + (13, 23) ERROR: No matching symbol 'param1' + (14, 24) ERROR: No matching symbol 'param2' + (15, 18) ERROR: No matching symbol 'param3' + (16, 21) ERROR: No matching symbol 'param4' + (19, 4) ERROR: No matching symbol 'ClientEffect' + (22, 4) ERROR: No matching signatures to 'string::F_DURATION(const string)' + (26, 4) ERROR: No matching symbol 'ClientEffect' + (27, 4) ERROR: No matching symbol 'F_DURATION' + (28, 4) ERROR: No matching symbol 'F_DURATION' + (29, 4) ERROR: No matching symbol 'LogDebug' + (33, 2) INFO: Compiling void SfxSprite::update_temp_sprite() + (35, 33) ERROR: No matching symbol 'GetToken' + (39, 2) INFO: Compiling void SfxSprite::remove_me() + (41, 3) ERROR: No matching symbol 'RemoveScript' + (44, 2) INFO: Compiling void SfxSprite::setup_temp_sprite() + (48, 4) ERROR: No matching symbol 'ClientEffect' + (50, 7) ERROR: No matching symbol 'GetToken' + (52, 4) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_sprite_in.as + (16, 2) INFO: Compiling void SfxSpriteIn::client_activate() + (18, 19) ERROR: No matching symbol 'param1' + (19, 24) ERROR: No matching symbol 'param2' + (20, 19) ERROR: No matching symbol 'param3' + (21, 18) ERROR: No matching symbol 'param4' + (22, 3) ERROR: No matching symbol 'EmitSound3D' + (23, 3) ERROR: No matching symbol 'ClientEffect' + (24, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (27, 2) INFO: Compiling void SfxSpriteIn::remove_fx() + (29, 3) ERROR: No matching symbol 'RemoveScript' + (32, 2) INFO: Compiling void SfxSpriteIn::setup_spawn_sprite() + (34, 3) ERROR: No matching symbol 'ClientEffect' + (35, 3) ERROR: No matching symbol 'ClientEffect' + (36, 3) ERROR: No matching symbol 'ClientEffect' + (37, 3) ERROR: No matching symbol 'ClientEffect' + (38, 3) ERROR: No matching symbol 'ClientEffect' + (39, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_sprite_in_fancy.as + (17, 2) INFO: Compiling void SfxSpriteInFancy::client_activate() + (19, 3) ERROR: No matching symbol 'SetCallback' + (20, 12) ERROR: No matching symbol 'param1' + (21, 24) ERROR: No matching symbol 'param2' + (22, 19) ERROR: No matching symbol 'param3' + (23, 18) ERROR: No matching symbol 'param4' + (24, 3) ERROR: No matching symbol 'ClientEffect' + (25, 16) ERROR: No matching symbol 'param5' + (26, 14) ERROR: No matching symbol 'param6' + (29, 3) ERROR: No matching symbol 'ClientEffect' + (31, 3) ERROR: No matching symbol 'EmitSound3D' + (32, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 2) INFO: Compiling void SfxSpriteInFancy::game_prerender() + (40, 40) ERROR: Expected expression value + (40, 40) ERROR: Instead found '' + (53, 2) INFO: Compiling void SfxSpriteInFancy::remove_fx() + (55, 3) ERROR: No matching symbol 'RemoveScript' + (58, 2) INFO: Compiling void SfxSpriteInFancy::setup_spawn_sprite() + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_stunring.as + (19, 2) INFO: Compiling void SfxStunring::client_activate() + (27, 27) ERROR: Expected expression value + (27, 27) ERROR: Instead found '' + (32, 42) ERROR: Expected expression value + (32, 42) ERROR: Instead found '' + (38, 2) INFO: Compiling void SfxStunring::end_fx() + (41, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (44, 2) INFO: Compiling void SfxStunring::remove_fx() + (46, 3) ERROR: No matching symbol 'RemoveScript' + (49, 2) INFO: Compiling void SfxStunring::update_stun_ring() + (51, 42) ERROR: Expected expression value + (51, 42) ERROR: Instead found '' + (70, 95) ERROR: Expected expression value + (70, 95) ERROR: Instead found '' + (73, 2) INFO: Compiling void SfxStunring::setup_stun_ring() + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: Illegal operation on 'string' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_stunring_old.as + (9, 2) ERROR: Expected method or property + (9, 2) ERROR: Instead found identifier 'string' + (10, 12) ERROR: Expected '(' + (10, 12) ERROR: Instead found '.' + (12, 16) ERROR: Expected identifier + (12, 16) ERROR: Instead found '(' + (77, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_stun_burst.as + (10, 2) INFO: Compiling SfxStunBurst::SfxStunBurst() + (14, 3) ERROR: No matching symbol 'Precache' + (12, 2) INFO: Compiling SfxFireBurst::SfxFireBurst() + (22, 3) ERROR: No matching symbol 'Precache' + (25, 2) INFO: Compiling void SfxFireBurst::client_activate() + (27, 15) ERROR: No matching symbol 'param1' + (28, 15) ERROR: No matching symbol 'param2' + (29, 20) ERROR: No matching symbol 'param3' + (30, 23) ERROR: No matching symbol 'param4' + (31, 7) ERROR: Expression must be of boolean type, instead found 'string' + (33, 4) ERROR: No matching symbol 'ClientEffect' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (41, 3) ERROR: No matching symbol 'EmitSound3D' + (44, 2) INFO: Compiling void SfxFireBurst::remove_me() + (46, 3) ERROR: No matching symbol 'RemoveScript' + (49, 2) INFO: Compiling void SfxFireBurst::create_sprites() + (52, 34) ERROR: Expected expression value + (52, 34) ERROR: Instead found '' + (57, 2) INFO: Compiling void SfxFireBurst::setup_ring_sprite() + (74, 43) ERROR: Expected expression value + (74, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_summon_circle.as + (16, 2) INFO: Compiling void SfxSummonCircle::client_activate() + (18, 15) ERROR: No matching symbol 'param1' + (19, 14) ERROR: No matching symbol 'param2' + (20, 3) ERROR: No matching symbol 'ClientEffect' + (21, 3) ERROR: No matching symbol 'EmitSound3D' + (22, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (25, 2) INFO: Compiling void SfxSummonCircle::remove_me() + (27, 3) ERROR: No matching symbol 'RemoveScript' + (30, 2) INFO: Compiling void SfxSummonCircle::setup_seal() + (32, 3) ERROR: No matching symbol 'ClientEffect' + (33, 3) ERROR: No matching symbol 'ClientEffect' + (34, 3) ERROR: No matching symbol 'ClientEffect' + (35, 3) ERROR: No matching symbol 'ClientEffect' + (36, 3) ERROR: No matching symbol 'ClientEffect' + (37, 3) ERROR: No matching symbol 'ClientEffect' + (38, 3) ERROR: No matching symbol 'ClientEffect' + (39, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_viewheight.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found identifier 'string' + (91, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_wave.as + (24, 2) INFO: Compiling SfxWave::SfxWave() + (29, 15) ERROR: 'FX_DURATION' is already declared + (33, 2) INFO: Compiling void SfxWave::OnSpawn() + (35, 3) ERROR: No matching symbol 'SetName' + (36, 3) ERROR: No matching symbol 'SetModel' + (37, 3) ERROR: No matching symbol 'SetInvincible' + (38, 3) ERROR: No matching symbol 'SetHeight' + (39, 3) ERROR: No matching symbol 'SetWidth' + (40, 3) ERROR: No matching symbol 'SetSolid' + (41, 3) ERROR: No matching symbol 'FX_DURATION' + (42, 13) ERROR: No matching symbol 'GetOwner' + (45, 2) INFO: Compiling void SfxWave::game_dynamically_created() + (47, 14) ERROR: No matching symbol 'param1' + (48, 12) ERROR: No matching symbol 'param2' + (49, 14) ERROR: No matching symbol 'param3' + (50, 14) ERROR: No matching symbol 'param4' + (51, 31) ERROR: No matching symbol 'GetOwner' + (53, 3) ERROR: No matching symbol 'ClientEvent' + (55, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (58, 2) INFO: Compiling void SfxWave::burst_fx() + (61, 32) ERROR: Expected expression value + (61, 32) ERROR: Instead found '' + (79, 2) INFO: Compiling void SfxWave::holywave_dodamage() + (81, 27) ERROR: No matching symbol 'GetRelationship' + (90, 22) ERROR: No matching symbol 'param2' + (92, 8) ERROR: Illegal operation on this datatype + (97, 8) ERROR: No matching symbol 'L_ENEMY' + (99, 9) ERROR: No matching symbol 'param1' + (103, 4) ERROR: Illegal operation on 'string' + (104, 4) ERROR: No matching symbol 'ApplyEffect' + (108, 20) ERROR: No matching symbol 'GetEntityIndex' + (112, 2) INFO: Compiling void SfxWave::ce_wave_do_heal() + (114, 25) ERROR: No matching symbol 'param1' + (118, 3) ERROR: Illegal operation on 'string' + (119, 3) ERROR: Illegal operation on 'string' + (121, 3) ERROR: No matching symbol 'Effect' + (122, 7) ERROR: No matching symbol 'GetEntityIndex' + (124, 8) WARN: Variable 'L_IS_ME' hides another variable of same name in outer scope + (126, 23) ERROR: No matching symbol 'param1' + (128, 15) ERROR: No matching symbol 'param1' + (129, 8) ERROR: Expression must be of boolean type, instead found 'int' + (131, 5) ERROR: No matching symbol 'SendColoredMessage' + (135, 5) ERROR: No matching symbol 'SendColoredMessage' + (136, 24) ERROR: No matching symbol 'param1' + (138, 10) WARN: Variable 'L_ADD_DMG_POINTS' hides another variable of same name in outer scope + (139, 6) ERROR: No matching symbol 'SendColoredMessage' + (143, 11) ERROR: No matching symbol 'GetEntityProperty' + (145, 11) WARN: Variable 'L_ADD_DMG_POINTS' hides another variable of same name in outer scope + (149, 8) ERROR: Expression must be of boolean type, instead found 'int' + (151, 5) ERROR: No matching symbol 'CallExternal' + (156, 2) INFO: Compiling void SfxWave::end_me_please() + (158, 3) ERROR: No matching symbol 'ClientEvent' + (159, 3) ERROR: No matching symbol 'DeleteEntity' + (162, 2) INFO: Compiling void SfxWave::client_activate() + (175, 41) ERROR: Expected expression value + (175, 41) ERROR: Instead found '' + (182, 2) INFO: Compiling void SfxWave::trail_loop() + (184, 7) ERROR: Illegal operation on this datatype + (185, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (186, 3) ERROR: No matching symbol 'ClientEffect' + (189, 2) INFO: Compiling void SfxWave::game_prerender() + (201, 41) ERROR: Expected expression value + (201, 41) ERROR: Instead found '' + (205, 2) INFO: Compiling void SfxWave::fx_wave_update() + (209, 80) ERROR: Expected expression value + (209, 80) ERROR: Instead found '' + (238, 2) INFO: Compiling void SfxWave::sfx_wave_explody() + (241, 3) ERROR: No matching symbol 'EmitSound3D' + (244, 2) INFO: Compiling void SfxWave::fx_wave_setup() + (254, 79) ERROR: Expected expression value + (254, 79) ERROR: Instead found '' + (264, 2) INFO: Compiling void SfxWave::fx_trail_setup() + (272, 79) ERROR: Expected expression value + (272, 79) ERROR: Instead found '' + (281, 2) INFO: Compiling void SfxWave::end_fx() + (284, 3) ERROR: No matching symbol 'RemoveScript' + (287, 2) INFO: Compiling void SfxWave::remove_fx() + (290, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_webbed.as + (21, 2) INFO: Compiling void SfxWebbed::client_activate() + (28, 75) ERROR: Expected expression value + (28, 75) ERROR: Instead found '' + (32, 2) INFO: Compiling void SfxWebbed::ext_webbed() + (34, 7) ERROR: Expression must be of boolean type, instead found 'string' + (36, 19) ERROR: No conversion from 'string' to 'int' available. + (38, 15) ERROR: No matching symbol 'param1' + (40, 4) ERROR: No matching signatures to 'string::FX_DECAY(const string)' + (45, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 2) INFO: Compiling void SfxWebbed::web_decay() + (51, 7) ERROR: Expression must be of boolean type, instead found 'string' + (52, 21) ERROR: No conversion from 'string' to 'float' available. + (61, 5) ERROR: No matching signatures to 'string::FX_DECAY(const string)' + (66, 2) INFO: Compiling void SfxWebbed::web_setup() + (73, 79) ERROR: Expected expression value + (73, 79) ERROR: Instead found '' + (78, 38) ERROR: Expected expression value + (78, 38) ERROR: Instead found '' + (79, 27) ERROR: Expected expression value + (79, 27) ERROR: Instead found '' + (92, 2) INFO: Compiling void SfxWebbed::web_update() + (96, 76) ERROR: Expected expression value + (96, 76) ERROR: Instead found '' + (99, 80) ERROR: Expected expression value + (99, 80) ERROR: Instead found '' + (121, 2) INFO: Compiling void SfxWebbed::fx_die() + (124, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (127, 2) INFO: Compiling void SfxWebbed::effect_die() + (129, 3) ERROR: No matching symbol 'RemoveScript' + (132, 2) INFO: Compiling void SfxWebbed::func_get_new_pos() + (134, 27) ERROR: Expected expression value + (134, 27) ERROR: Instead found '' + (139, 3) ERROR: Expected expression value + (139, 3) ERROR: Instead found reserved keyword 'else' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_whipflash.as + (9, 2) ERROR: Expected method or property + (9, 2) ERROR: Instead found identifier 'string' + (34, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\sfx_zap_aura.as + (13, 2) INFO: Compiling void SfxZapAura::client_activate() + (15, 14) ERROR: No matching symbol 'param1' + (16, 15) ERROR: No matching symbol 'param2' + (17, 17) ERROR: No matching symbol 'param3' + (19, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (23, 2) INFO: Compiling void SfxZapAura::fx_loop() + (27, 42) ERROR: Expected expression value + (27, 42) ERROR: Instead found '' + (28, 28) ERROR: Expected expression value + (28, 28) ERROR: Instead found '' + (35, 35) ERROR: Expected expression value + (35, 35) ERROR: Instead found '' + (37, 39) ERROR: Expected expression value + (37, 39) ERROR: Instead found '' + (42, 35) ERROR: Expected expression value + (42, 35) ERROR: Instead found '' + (44, 39) ERROR: Expected expression value + (44, 39) ERROR: Instead found '' + (48, 2) INFO: Compiling void SfxZapAura::end_fx() + (50, 7) ERROR: Illegal operation on this datatype + (52, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (55, 2) INFO: Compiling void SfxZapAura::remove_fx() + (57, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\soup.as + (14, 2) ERROR: Expected method or property + (14, 2) ERROR: Instead found identifier 'string' + (15, 10) ERROR: Expected '(' + (15, 10) ERROR: Instead found '.' + (17, 6) ERROR: Expected identifier + (17, 6) ERROR: Instead found '(' + (97, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\specialattack_haste.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\swords_gb\gb_gib_explode.as + (18, 2) INFO: Compiling void GbGibExplode::game_dynamically_created() + (20, 14) ERROR: No matching symbol 'param6' + (21, 15) ERROR: No matching symbol 'GetEntityProperty' + (13, 2) INFO: Compiling GibExplode::GibExplode() + (15, 32) ERROR: No matching symbol 'GetEntityIndex' + (19, 2) INFO: Compiling void GibExplode::OnSpawn() + (21, 3) ERROR: No matching symbol 'SetInvincible' + (22, 3) ERROR: No matching symbol 'SetRace' + (23, 3) ERROR: No matching symbol 'SetGravity' + (24, 3) ERROR: No matching symbol 'SetHeight' + (25, 3) ERROR: No matching symbol 'SetWidth' + (26, 3) ERROR: No matching symbol 'SetProp' + (27, 3) ERROR: No matching symbol 'SetProp' + (28, 3) ERROR: No matching symbol 'SetProp' + (29, 3) ERROR: No matching symbol 'SetAngles' + (32, 2) INFO: Compiling void GibExplode::game_dynamically_created() + (48, 11) ERROR: Expected ')' or ',' + (48, 11) ERROR: Instead found identifier '_0' + (49, 11) ERROR: Expected ')' or ',' + (49, 11) ERROR: Instead found identifier '_5' + (52, 2) INFO: Compiling void GibExplode::explode() + (55, 13) ERROR: No matching symbol 'GetOwner' + (56, 3) ERROR: No matching symbol 'XDoDamage' + (57, 3) ERROR: No matching symbol 'ClientEvent' + (58, 3) ERROR: No matching symbol 'SetModel' + (59, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (62, 2) INFO: Compiling void GibExplode::remove_fx() + (64, 3) ERROR: No matching symbol 'DeleteEntity' + (67, 2) INFO: Compiling void GibExplode::stop_bounce() + (69, 3) ERROR: No matching symbol 'SetProp' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\swords_gb\gut_buster.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\swords_gb\sfx_gib_explode.as + (18, 2) INFO: Compiling void SfxGibExplode::client_activate() + (20, 18) ERROR: No matching symbol 'param1' + (21, 24) ERROR: No matching symbol 'param2' + (30, 3) ERROR: No matching symbol 'ClientEffect' + (31, 3) ERROR: No matching symbol 'RemoveScript' + (34, 2) INFO: Compiling void SfxGibExplode::setup_sprite() + (36, 3) ERROR: No matching symbol 'ClientEffect' + (37, 7) ERROR: No matching symbol 'GetToken' + (39, 4) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching symbol 'ClientEffect' + (43, 3) ERROR: No matching symbol 'ClientEffect' + (44, 3) ERROR: No matching symbol 'ClientEffect' + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\torch_flame.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects\webbed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/effects.as + (8, 2) INFO: Compiling Effects::Effects() + (10, 3) ERROR: No matching symbol 'Precache' + (11, 3) ERROR: No matching symbol 'Precache' + (12, 3) ERROR: No matching symbol 'Precache' + (13, 3) ERROR: No matching symbol 'Precache' + (14, 3) ERROR: No matching symbol 'Precache' + (15, 3) ERROR: No matching symbol 'Precache' + (16, 3) ERROR: No matching symbol 'Precache' + (17, 3) ERROR: No matching symbol 'Precache' + (18, 3) ERROR: No matching symbol 'Precache' + (19, 3) ERROR: No matching symbol 'Precache' + (20, 3) ERROR: No matching symbol 'Precache' + (21, 3) ERROR: No matching symbol 'Precache' + (22, 3) ERROR: No matching symbol 'Precache' + (23, 3) ERROR: No matching symbol 'Precache' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/foutpost\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\dragoon.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\dragoon_boss.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\dragoon_boss_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\dragoon_elite.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_fire_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_fire_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_fire_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_fire_rand.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_fire_spear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_fire_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_fire_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_ice_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_ice_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_ice_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_ice_rand.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_ice_spear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_ice_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_ice_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_psn_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_psn_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_psn_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_psn_rand.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_psn_spear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_psn_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_psn_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_rand_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_rand_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_rand_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_rand_rand.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_rand_spear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_rand_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_rand_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_zap_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_zap_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_zap_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_zap_rand.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_zap_spear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_zap_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\e_zap_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\fire_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\fire_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\fire_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\fire_mage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\fire_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\fire_random_nm.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\fire_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\fire_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\ice_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\ice_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\ice_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\ice_mage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\ice_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\ice_random_nm.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\ice_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\ice_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\psn_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\psn_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\psn_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\psn_mage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\psn_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\psn_random_nm.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\psn_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\psn_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\random_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\random_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\random_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\random_mage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\random_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\random_random_nm.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\random_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\random_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\zap_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\zap_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\zap_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\zap_mage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\zap_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\zap_random_nm.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\zap_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/furion\dragoons\zap_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/game_master\dmgpoints.as + (14, 2) INFO: Compiling void Dmgpoints::OnSpawn() + (16, 23) ERROR: No matching symbol 'StringToLower' + (18, 7) ERROR: No matching symbol 'FindToken' + (20, 9) ERROR: No matching symbol 'G_DM_CODE' + (22, 9) WARN: Variable 'L_GENERATE_CODE' hides another variable of same name in outer scope + (25, 7) ERROR: Expression must be of boolean type, instead found 'int' + (27, 4) ERROR: No matching symbol 'SetGlobalVar' + (31, 2) INFO: Compiling void Dmgpoints::gm_find_strongest_player() + (33, 3) ERROR: No matching symbol 'LogDebug' + (38, 4) ERROR: No matching signatures to 'GetAllPlayers(string)' + (38, 4) INFO: Candidates are: + (38, 4) INFO: CBasePlayer@[]@ GetAllPlayers() + (40, 23) ERROR: No matching symbol 'GetTokenCount' + (44, 20) ERROR: No matching symbol 'GetToken' + (46, 3) ERROR: No matching symbol 'RemoveToken' + (55, 2) INFO: Compiling void Dmgpoints::find_strongest_player_loop() + (57, 20) ERROR: No matching symbol 'i' + (58, 23) ERROR: No matching symbol 'GetToken' + (59, 3) ERROR: No matching symbol 'CallExternal' + (60, 24) ERROR: No matching symbol 'GetEntityProperty' + (61, 19) ERROR: No conversion from 'string' to 'int' available. + (63, 27) ERROR: Can't implicitly convert from 'string' to 'int&'. + (64, 20) ERROR: Can't implicitly convert from 'string' to 'int&'. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/game_master\map_transitions.as + (14, 2) INFO: Compiling void MapTransitions::game_transition_triggered() + (16, 24) ERROR: No matching symbol 'param1' + (17, 18) ERROR: No matching symbol 'param2' + (18, 26) ERROR: No matching symbol 'param3' + (19, 19) ERROR: No matching symbol 'param4' + (20, 9) ERROR: No matching symbol 'ValidateMapName' + (22, 4) ERROR: No matching signatures to 'SendInfoMessageToAll(const string)' + (22, 4) INFO: Candidates are: + (22, 4) INFO: void SendInfoMessageToAll(const string&in, const string&in) + (22, 4) INFO: Rejected due to not enough parameters + (26, 4) ERROR: No matching symbol 'CallExternal' + (31, 5) ERROR: No matching symbol 'CallExternal' + (35, 5) ERROR: No matching signatures to 'MapTransitions::gm_manual_map_change(string)' + (35, 5) INFO: Candidates are: + (35, 5) INFO: void MS::MapTransitions::gm_manual_map_change() + (40, 2) INFO: Compiling void MapTransitions::gm_manual_map_change() + (42, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (45, 14) ERROR: No matching symbol 'param1' + (46, 25) ERROR: No matching symbol 'param2' + (49, 11) WARN: Variable 'L_DEST_SPAWN' hides another variable of same name in outer scope + (51, 3) ERROR: No matching symbol 'CallExternal' + (53, 3) ERROR: No matching symbol 'ServerCommand' + (54, 3) ERROR: No matching symbol 'SetGlobalVar' + (55, 3) ERROR: No matching symbol 'SetGlobalVar' + (56, 3) ERROR: No matching symbol 'SetGlobalVar' + (57, 3) ERROR: No matching symbol 'SetGlobalVar' + (58, 3) ERROR: No matching symbol 'SetGlobalVar' + (59, 8) ERROR: No matching symbol 'G_SERVER_LOCKED' + (61, 11) WARN: Variable 'L_CMD' hides another variable of same name in outer scope + (62, 4) ERROR: No matching symbol 'ServerCommand' + (66, 4) ERROR: No matching symbol 'CallExternal' + (69, 3) ERROR: No matching symbol 'SendInfoMsg' + (71, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (74, 2) INFO: Compiling void MapTransitions::game_triggered() + (81, 50) ERROR: Expected expression value + (81, 50) ERROR: Instead found '' + (90, 50) ERROR: Expected expression value + (90, 50) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/game_master\vote_generic.as + (31, 2) INFO: Compiling void VoteGeneric::gm_create_vote() + (33, 7) ERROR: Illegal operation on this datatype + (40, 17) ERROR: No matching symbol 'param1' + (41, 19) ERROR: No matching symbol 'param2' + (42, 17) ERROR: No matching symbol 'param3' + (43, 16) ERROR: No matching symbol 'param4' + (44, 18) ERROR: No matching symbol 'param5' + (53, 4) ERROR: No matching symbol 'CallExternal' + (58, 2) INFO: Compiling void VoteGeneric::gm_send_vote() + (60, 15) ERROR: Expected ')' or ',' + (60, 15) ERROR: Instead found reserved keyword '!' + (64, 46) ERROR: Expected expression value + (64, 46) ERROR: Instead found '' + (70, 2) INFO: Compiling void VoteGeneric::get_voters() + (75, 50) ERROR: Expected expression value + (75, 50) ERROR: Instead found '' + (75, 79) ERROR: Expected ';' + (75, 79) ERROR: Instead found ')' + (81, 2) INFO: Compiling void VoteGeneric::get_voters_filter() + (84, 44) ERROR: Expected expression value + (84, 44) ERROR: Instead found '' + (92, 2) INFO: Compiling void VoteGeneric::gm_send_ballots() + (95, 50) ERROR: Expected expression value + (95, 50) ERROR: Instead found '' + (95, 79) ERROR: Expected ';' + (95, 79) ERROR: Instead found ')' + (101, 2) INFO: Compiling void VoteGeneric::send_menus() + (103, 35) ERROR: Expected expression value + (103, 35) ERROR: Instead found '' + (106, 2) INFO: Compiling void VoteGeneric::game_menu_getoptions() + (108, 7) ERROR: Illegal operation on this datatype + (109, 23) ERROR: No matching symbol 'GetTokenCount' + (115, 2) INFO: Compiling void VoteGeneric::gm_build_ballot() + (123, 46) ERROR: Expected expression value + (123, 46) ERROR: Instead found '' + (124, 10) ERROR: Expected ';' + (124, 10) ERROR: Instead found identifier 'reg' + (125, 10) ERROR: Expected ';' + (125, 10) ERROR: Instead found identifier 'reg' + (126, 10) ERROR: Expected ';' + (126, 10) ERROR: Instead found identifier 'reg' + (127, 10) ERROR: Expected ';' + (127, 10) ERROR: Instead found identifier 'reg' + (130, 2) INFO: Compiling void VoteGeneric::game_menu_cancel() + (133, 45) ERROR: Expected expression value + (133, 45) ERROR: Instead found '' + (144, 2) INFO: Compiling void VoteGeneric::gm_gvote_count() + (147, 45) ERROR: Expected expression value + (147, 45) ERROR: Instead found '' + (152, 50) ERROR: Expected expression value + (152, 50) ERROR: Instead found '' + (168, 2) INFO: Compiling void VoteGeneric::gm_tally_votes() + (173, 39) ERROR: Expected expression value + (173, 39) ERROR: Instead found '' + (174, 50) ERROR: Expected expression value + (174, 50) ERROR: Instead found '' + (175, 49) ERROR: Expected expression value + (175, 49) ERROR: Instead found '' + (180, 2) INFO: Compiling void VoteGeneric::func_get_vote_winner() + (184, 23) ERROR: No matching symbol 'GetTokenCount' + (188, 25) ERROR: No matching symbol 'GetTokenCount' + (189, 25) ERROR: No matching symbol 'GetTokenCount' + (201, 8) ERROR: No matching symbol 'L_CHOOSE_LAST' + (203, 19) ERROR: Can't implicitly convert from 'string' to 'const int'. + (203, 19) ERROR: No conversion from 'string' to 'const int' available. + (205, 20) ERROR: No conversion from 'string' to 'int' available. + (207, 19) ERROR: No matching symbol 'GetToken' + (210, 3) WARN: Unreachable code + (213, 2) INFO: Compiling void VoteGeneric::get_vote_winner() + (215, 25) ERROR: No matching symbol 'GetToken' + (216, 25) ERROR: No matching symbol 'i' + (217, 20) ERROR: No conversion from 'string' to 'int' available. + (220, 24) ERROR: Can't implicitly convert from 'string' to 'int&'. + (224, 21) ERROR: No conversion from 'string' to 'int' available. + (232, 2) INFO: Compiling void VoteGeneric::gm_votemap() + (234, 18) ERROR: No matching symbol 'param2' + (237, 4) ERROR: No matching symbol 'gm_manual_map_change' + (241, 2) INFO: Compiling void VoteGeneric::gm_votepvp() + (243, 7) ERROR: No matching symbol 'param2' + (245, 8) ERROR: Illegal operation on this datatype + (248, 4) ERROR: No matching symbol 'SendInfoMsg' + (252, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (254, 7) ERROR: No matching symbol 'param2' + (256, 8) ERROR: Expression must be of boolean type, instead found 'const string' + (259, 4) ERROR: No matching symbol 'SendInfoMsg' + (263, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (267, 2) INFO: Compiling void VoteGeneric::gm_pvp() + (269, 7) ERROR: Illegal operation on this datatype + (271, 4) ERROR: No matching symbol 'SendInfoMsg' + (272, 4) ERROR: No matching symbol 'SetPvP' + (276, 4) ERROR: No matching symbol 'SendInfoMsg' + (277, 4) ERROR: No matching symbol 'SetPvP' + (281, 2) INFO: Compiling void VoteGeneric::gm_votelock() + (283, 7) ERROR: No matching symbol 'param2' + (286, 4) ERROR: No matching symbol 'SetGlobalVar' + (287, 4) ERROR: No matching symbol 'ServerCommand' + (290, 4) ERROR: No matching symbol 'ClientCommand' + (297, 4) ERROR: No matching symbol 'ShowHelpTip' + (303, 4) ERROR: No matching symbol 'SendInfoMsg' + (307, 2) INFO: Compiling void VoteGeneric::gm_votekick() + (309, 21) ERROR: No matching symbol 'param1' + (310, 25) ERROR: No matching symbol 'param2' + (312, 19) ERROR: No matching symbol 'GetEntityName' + (313, 24) ERROR: No matching symbol 'GetEntityName' + (314, 79) ERROR: No matching symbol 'GetEntityName' + (315, 3) ERROR: No matching symbol 'SendInfoMsg' + (316, 3) ERROR: No matching symbol 'gm_ynvote' + (319, 2) INFO: Compiling void VoteGeneric::gm_voteban() + (321, 21) ERROR: No matching symbol 'param1' + (322, 25) ERROR: No matching symbol 'param2' + (324, 19) ERROR: No matching symbol 'GetEntityName' + (325, 24) ERROR: No matching symbol 'GetEntityName' + (326, 78) ERROR: No matching symbol 'GetEntityName' + (327, 3) ERROR: No matching symbol 'gm_ynvote' + (330, 2) INFO: Compiling void VoteGeneric::gm_got_yes_vote() + (332, 8) ERROR: No matching symbol 'VOTE_OVER' + (334, 4) ERROR: No matching symbol 'SendColoredMessage' + (336, 8) ERROR: No matching symbol 'VOTE_OVER' + (338, 3) ERROR: No matching symbol 'YES_VOTES' + (339, 23) ERROR: No matching symbol 'GetEntityName' + (341, 9) ERROR: No matching symbol 'VOTE_QUIET_MODE' + (343, 4) ERROR: No matching symbol 'SendInfoMsg' + (345, 8) ERROR: No matching symbol 'VOTE_QUIET_MODE' + (347, 4) ERROR: No matching signatures to 'SendInfoMessageToAll(const string)' + (347, 4) INFO: Candidates are: + (347, 4) INFO: void SendInfoMessageToAll(const string&in, const string&in) + (347, 4) INFO: Rejected due to not enough parameters + (351, 2) INFO: Compiling void VoteGeneric::gm_got_no_vote() + (353, 8) ERROR: No matching symbol 'VOTE_OVER' + (355, 4) ERROR: No matching symbol 'SendColoredMessage' + (357, 8) ERROR: No matching symbol 'VOTE_OVER' + (359, 3) ERROR: No matching symbol 'NO_VOTES' + (360, 23) ERROR: No matching symbol 'GetEntityName' + (362, 9) ERROR: No matching symbol 'VOTE_QUIET_MODE' + (364, 4) ERROR: No matching symbol 'SendInfoMsg' + (366, 8) ERROR: No matching symbol 'VOTE_QUIET_MODE' + (368, 4) ERROR: No matching signatures to 'SendInfoMessageToAll(const string)' + (368, 4) INFO: Candidates are: + (368, 4) INFO: void SendInfoMessageToAll(const string&in, const string&in) + (368, 4) INFO: Rejected due to not enough parameters + (372, 2) INFO: Compiling void VoteGeneric::player_left() + (384, 33) ERROR: Expected expression value + (384, 33) ERROR: Instead found '' + (385, 33) ERROR: Expected expression value + (385, 33) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/game_master.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\armorer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\generalstore.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\grocer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\hunter.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\kendra.as + (12, 2) INFO: Compiling void Kendra::OnSpawn() + (14, 3) ERROR: No matching symbol 'SetHealth' + (15, 3) ERROR: No matching symbol 'SetMaxHealth' + (16, 3) ERROR: No matching symbol 'SetGold' + (17, 3) ERROR: No matching symbol 'SetName' + (18, 3) ERROR: No matching symbol 'SetFOV' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetRace' + (22, 3) ERROR: No matching symbol 'SetRoam' + (23, 3) ERROR: No matching symbol 'SetModel' + (24, 3) ERROR: No matching symbol 'SetInvincible' + (25, 3) ERROR: No matching symbol 'SetModelBody' + (26, 3) ERROR: No matching symbol 'SetModelBody' + (28, 3) ERROR: No matching symbol 'CatchSpeech' + (29, 3) ERROR: No matching symbol 'CatchSpeech' + (30, 3) ERROR: No matching symbol 'CatchSpeech' + (31, 3) ERROR: No matching symbol 'CatchSpeech' + (39, 2) INFO: Compiling void Kendra::say_hi() + (43, 4) ERROR: No matching symbol 'SayText' + (47, 4) ERROR: No matching symbol 'SayText' + (51, 2) INFO: Compiling void Kendra::say_rumor() + (55, 4) ERROR: No matching symbol 'SayText' + (59, 4) ERROR: No matching symbol 'SayText' + (63, 2) INFO: Compiling void Kendra::say_upset() + (67, 4) ERROR: No matching symbol 'SayText' + (68, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (72, 2) INFO: Compiling void Kendra::say_upset2() + (74, 3) ERROR: No matching symbol 'SayText' + (75, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 2) INFO: Compiling void Kendra::say_upset3() + (80, 3) ERROR: No matching symbol 'SayText' + (83, 2) INFO: Compiling void Kendra::game_menu_getoptions() + (90, 12) ERROR: Expected ';' + (90, 12) ERROR: Instead found identifier 'reg' + (91, 12) ERROR: Expected ';' + (91, 12) ERROR: Instead found identifier 'reg' + (92, 12) ERROR: Expected ';' + (92, 12) ERROR: Instead found identifier 'reg' + (93, 12) ERROR: Expected ';' + (93, 12) ERROR: Instead found identifier 'reg' + (98, 2) INFO: Compiling void Kendra::say_ending() + (101, 3) ERROR: No matching symbol 'SayText' + (102, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (105, 2) INFO: Compiling void Kendra::say_ending2() + (107, 3) ERROR: No matching symbol 'SayText' + (108, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (111, 2) INFO: Compiling void Kendra::say_reward() + (113, 3) ERROR: No matching symbol 'SayText' + (117, 2) INFO: Compiling void Kendra::say_steambow() + (119, 3) ERROR: No matching symbol 'SayText' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\magicshop.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\masterp.as + (14, 2) INFO: Compiling void Masterp::OnSpawn() + (16, 3) ERROR: No matching symbol 'SetHealth' + (17, 3) ERROR: No matching symbol 'SetGold' + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetFOV' + (20, 3) ERROR: No matching symbol 'SetWidth' + (21, 3) ERROR: No matching symbol 'SetHeight' + (22, 3) ERROR: No matching symbol 'SetRace' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'CatchSpeech' + (29, 3) ERROR: No matching symbol 'CatchSpeech' + (30, 3) ERROR: No matching symbol 'CatchSpeech' + (31, 3) ERROR: No matching symbol 'CatchSpeech' + (34, 2) INFO: Compiling void Masterp::say_hi() + (36, 3) ERROR: No matching symbol 'SayText' + (39, 2) INFO: Compiling void Masterp::say_job() + (41, 3) ERROR: No matching symbol 'SayText' + (42, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (45, 2) INFO: Compiling void Masterp::say_rumor() + (47, 3) ERROR: No matching symbol 'SayText' + (51, 2) INFO: Compiling void Masterp::say_temple() + (53, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (55, 4) ERROR: No matching symbol 'SayText' + (56, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (60, 2) INFO: Compiling void Masterp::say_temple2() + (62, 3) ERROR: No matching symbol 'SayText' + (63, 3) ERROR: No matching symbol 'SayText' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + (8, 2) INFO: Compiling void FirstNpc::game_targeted_by_player() + (11, 11) ERROR: No matching symbol 'GetMonsterProperty' + (13, 3) ERROR: No matching symbol 'ShowHelpTip' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\mayor.as + (8, 7) ERROR: Method 'void Mayor::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\miner.as + (10, 2) INFO: Compiling void Miner::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetHealth' + (13, 3) ERROR: No matching symbol 'SetMaxHealth' + (14, 3) ERROR: No matching symbol 'SetGold' + (15, 3) ERROR: No matching symbol 'SetName' + (16, 3) ERROR: No matching symbol 'SetFOV' + (17, 3) ERROR: No matching symbol 'SetWidth' + (18, 3) ERROR: No matching symbol 'SetHeight' + (19, 3) ERROR: No matching symbol 'SetRace' + (20, 3) ERROR: No matching symbol 'SetRoam' + (21, 3) ERROR: No matching symbol 'SetModel' + (22, 3) ERROR: No matching symbol 'SetModelBody' + (23, 3) ERROR: No matching symbol 'SetModelBody' + (24, 3) ERROR: No matching symbol 'SetInvincible' + (25, 3) ERROR: No matching symbol 'SetModelBody' + (26, 3) ERROR: No matching symbol 'SetModelBody' + (27, 3) ERROR: No matching symbol 'CatchSpeech' + (28, 3) ERROR: No matching symbol 'CatchSpeech' + (29, 3) ERROR: No matching symbol 'CatchSpeech' + (30, 3) ERROR: No matching symbol 'CatchSpeech' + (33, 2) INFO: Compiling void Miner::say_hi() + (35, 3) ERROR: No matching symbol 'SayText' + (38, 2) INFO: Compiling void Miner::say_job() + (40, 3) ERROR: No matching symbol 'SayText' + (43, 2) INFO: Compiling void Miner::say_rumor() + (45, 3) ERROR: No matching symbol 'SayText' + (48, 2) INFO: Compiling void Miner::say_undermountains() + (50, 3) ERROR: No matching symbol 'SayText' + (51, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (54, 2) INFO: Compiling void Miner::say_undermountains2() + (56, 3) ERROR: No matching symbol 'SayText' + (57, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (60, 2) INFO: Compiling void Miner::say_undermountains3() + (62, 3) ERROR: No matching symbol 'SayText' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\priest.as + (19, 2) INFO: Compiling void Priest::OnSpawn() + (21, 3) ERROR: No matching symbol 'SetHealth' + (22, 3) ERROR: No matching symbol 'SetGold' + (23, 3) ERROR: No matching symbol 'SetName' + (24, 3) ERROR: No matching symbol 'SetFOV' + (25, 3) ERROR: No matching symbol 'SetWidth' + (26, 3) ERROR: No matching symbol 'SetHeight' + (27, 3) ERROR: No matching symbol 'SetRace' + (28, 3) ERROR: No matching symbol 'SetRoam' + (29, 3) ERROR: No matching symbol 'SetModel' + (30, 3) ERROR: No matching symbol 'SetInvincible' + (32, 3) ERROR: No matching symbol 'CatchSpeech' + (33, 3) ERROR: No matching symbol 'CatchSpeech' + (34, 3) ERROR: No matching symbol 'CatchSpeech' + (35, 3) ERROR: No matching symbol 'CatchSpeech' + (38, 2) INFO: Compiling void Priest::say_hi() + (40, 3) ERROR: No matching symbol 'SetVolume' + (41, 3) ERROR: No matching symbol 'SayText' + (44, 2) INFO: Compiling void Priest::say_theobold() + (46, 3) ERROR: No matching symbol 'SayText' + (49, 2) INFO: Compiling void Priest::say_hall() + (51, 3) ERROR: No matching symbol 'SayText' + (54, 2) INFO: Compiling void Priest::say_job() + (56, 3) ERROR: No matching symbol 'SayText' + (57, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (60, 2) INFO: Compiling void Priest::say_job2() + (62, 3) ERROR: No matching symbol 'SayText' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + (8, 2) INFO: Compiling void FirstNpc::game_targeted_by_player() + (11, 11) ERROR: No matching symbol 'GetMonsterProperty' + (13, 3) ERROR: No matching symbol 'ShowHelpTip' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\storage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\tavern.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gatecity\vendor.as + (236, 2) ERROR: A function with the same name and parameters already exists + (50, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gertenheld_cave\game_master.as + (11, 2) INFO: Compiling void GameMaster::bgoblin_chief_died() + (13, 22) ERROR: No matching symbol 'param1' + (14, 3) ERROR: No matching symbol 'gold_spew' + (18, 2) INFO: Compiling void GameMaster::vgoblin_chief_died() + (20, 22) ERROR: No matching symbol 'param1' + (21, 3) ERROR: No matching symbol 'gold_spew' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/gertenheld_cave\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/global\server\treasure.as + (11, 2) INFO: Compiling Treasure::Treasure() + (32, 36) ERROR: Expected expression value + (32, 36) ERROR: Instead found '' + (72, 2) INFO: Compiling void Treasure::add_epic_array() + (74, 20) ERROR: No matching symbol 'i' + (75, 14) ERROR: No matching symbol 'GetToken' + (80, 8) ERROR: No matching symbol 'EXIT_SUB' + (82, 21) ERROR: No matching symbol 'GetToken' + (83, 21) ERROR: No conversion from 'string' to 'int' available. + (89, 2) INFO: Compiling void Treasure::add_epic_item() + (91, 3) ERROR: No matching symbol 'GlobalArrayAdd' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/global\sv_globals.as + (8, 2) INFO: Compiling SvGlobals::SvGlobals() + (62, 36) ERROR: Expected expression value + (62, 36) ERROR: Instead found '' + (86, 36) ERROR: Expected expression value + (86, 36) ERROR: Instead found '' + (157, 36) ERROR: Expected expression value + (157, 36) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/global.as + (14, 2) INFO: Compiling Global::Global() + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (24, 10) ERROR: Expected ';' + (24, 10) ERROR: Instead found identifier 'reg' + (25, 7) ERROR: Expected '(' + (25, 7) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (27, 10) ERROR: Expected ';' + (27, 10) ERROR: Instead found identifier 'reg' + (28, 10) ERROR: Expected ';' + (28, 10) ERROR: Instead found identifier 'reg' + (29, 10) ERROR: Expected ';' + (29, 10) ERROR: Instead found identifier 'reg' + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'reg' + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 10) ERROR: Expected ';' + (32, 10) ERROR: Instead found identifier 'reg' + (33, 10) ERROR: Expected ';' + (33, 10) ERROR: Instead found identifier 'reg' + (34, 10) ERROR: Expected ';' + (34, 10) ERROR: Instead found identifier 'reg' + (35, 10) ERROR: Expected ';' + (35, 10) ERROR: Instead found identifier 'reg' + (36, 9) ERROR: Expected '(' + (36, 9) ERROR: Instead found identifier 'reg' + (37, 9) ERROR: Expected '(' + (37, 9) ERROR: Instead found identifier 'reg' + (8, 2) INFO: Compiling Races::Races() + (10, 10) ERROR: Expected ';' + (10, 10) ERROR: Instead found identifier 'reg' + (11, 10) ERROR: Expected ';' + (11, 10) ERROR: Instead found identifier 'reg' + (12, 10) ERROR: Expected ';' + (12, 10) ERROR: Instead found identifier 'reg' + (13, 10) ERROR: Expected ';' + (13, 10) ERROR: Instead found identifier 'reg' + (15, 10) ERROR: Expected ';' + (15, 10) ERROR: Instead found identifier 'reg' + (16, 10) ERROR: Expected ';' + (16, 10) ERROR: Instead found identifier 'reg' + (17, 10) ERROR: Expected ';' + (17, 10) ERROR: Instead found identifier 'reg' + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (20, 10) ERROR: Expected ';' + (20, 10) ERROR: Instead found identifier 'reg' + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (25, 10) ERROR: Expected ';' + (25, 10) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (27, 10) ERROR: Expected ';' + (27, 10) ERROR: Instead found identifier 'reg' + (28, 10) ERROR: Expected ';' + (28, 10) ERROR: Instead found identifier 'reg' + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'reg' + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 10) ERROR: Expected ';' + (32, 10) ERROR: Instead found identifier 'reg' + (33, 10) ERROR: Expected ';' + (33, 10) ERROR: Instead found identifier 'reg' + (35, 10) ERROR: Expected ';' + (35, 10) ERROR: Instead found identifier 'reg' + (36, 10) ERROR: Expected ';' + (36, 10) ERROR: Instead found identifier 'reg' + (37, 10) ERROR: Expected ';' + (37, 10) ERROR: Instead found identifier 'reg' + (38, 10) ERROR: Expected ';' + (38, 10) ERROR: Instead found identifier 'reg' + (40, 10) ERROR: Expected ';' + (40, 10) ERROR: Instead found identifier 'reg' + (41, 10) ERROR: Expected ';' + (41, 10) ERROR: Instead found identifier 'reg' + (42, 10) ERROR: Expected ';' + (42, 10) ERROR: Instead found identifier 'reg' + (43, 10) ERROR: Expected ';' + (43, 10) ERROR: Instead found identifier 'reg' + (45, 10) ERROR: Expected ';' + (45, 10) ERROR: Instead found identifier 'reg' + (46, 10) ERROR: Expected ';' + (46, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 10) ERROR: Expected ';' + (48, 10) ERROR: Instead found identifier 'reg' + (50, 10) ERROR: Expected ';' + (50, 10) ERROR: Instead found identifier 'reg' + (51, 10) ERROR: Expected ';' + (51, 10) ERROR: Instead found identifier 'reg' + (52, 10) ERROR: Expected ';' + (52, 10) ERROR: Instead found identifier 'reg' + (53, 10) ERROR: Expected ';' + (53, 10) ERROR: Instead found identifier 'reg' + (55, 10) ERROR: Expected ';' + (55, 10) ERROR: Instead found identifier 'reg' + (56, 10) ERROR: Expected ';' + (56, 10) ERROR: Instead found identifier 'reg' + (57, 10) ERROR: Expected ';' + (57, 10) ERROR: Instead found identifier 'reg' + (58, 10) ERROR: Expected ';' + (58, 10) ERROR: Instead found identifier 'reg' + (60, 10) ERROR: Expected ';' + (60, 10) ERROR: Instead found identifier 'reg' + (61, 10) ERROR: Expected ';' + (61, 10) ERROR: Instead found identifier 'reg' + (62, 10) ERROR: Expected ';' + (62, 10) ERROR: Instead found identifier 'reg' + (63, 10) ERROR: Expected ';' + (63, 10) ERROR: Instead found identifier 'reg' + (65, 10) ERROR: Expected ';' + (65, 10) ERROR: Instead found identifier 'reg' + (66, 10) ERROR: Expected ';' + (66, 10) ERROR: Instead found identifier 'reg' + (67, 10) ERROR: Expected ';' + (67, 10) ERROR: Instead found identifier 'reg' + (68, 10) ERROR: Expected ';' + (68, 10) ERROR: Instead found identifier 'reg' + (70, 10) ERROR: Expected ';' + (70, 10) ERROR: Instead found identifier 'reg' + (71, 10) ERROR: Expected ';' + (71, 10) ERROR: Instead found identifier 'reg' + (72, 10) ERROR: Expected ';' + (72, 10) ERROR: Instead found identifier 'reg' + (73, 10) ERROR: Expected ';' + (73, 10) ERROR: Instead found identifier 'reg' + (75, 10) ERROR: Expected ';' + (75, 10) ERROR: Instead found identifier 'reg' + (76, 10) ERROR: Expected ';' + (76, 10) ERROR: Instead found identifier 'reg' + (77, 10) ERROR: Expected ';' + (77, 10) ERROR: Instead found identifier 'reg' + (78, 10) ERROR: Expected ';' + (78, 10) ERROR: Instead found identifier 'reg' + (80, 10) ERROR: Expected ';' + (80, 10) ERROR: Instead found identifier 'reg' + (81, 10) ERROR: Expected ';' + (81, 10) ERROR: Instead found identifier 'reg' + (82, 10) ERROR: Expected ';' + (82, 10) ERROR: Instead found identifier 'reg' + (83, 10) ERROR: Expected ';' + (83, 10) ERROR: Instead found identifier 'reg' + (85, 10) ERROR: Expected ';' + (85, 10) ERROR: Instead found identifier 'reg' + (86, 10) ERROR: Expected ';' + (86, 10) ERROR: Instead found identifier 'reg' + (87, 10) ERROR: Expected ';' + (87, 10) ERROR: Instead found identifier 'reg' + (88, 10) ERROR: Expected ';' + (88, 10) ERROR: Instead found identifier 'reg' + (90, 10) ERROR: Expected ';' + (90, 10) ERROR: Instead found identifier 'reg' + (91, 10) ERROR: Expected ';' + (91, 10) ERROR: Instead found identifier 'reg' + (92, 10) ERROR: Expected ';' + (92, 10) ERROR: Instead found identifier 'reg' + (93, 10) ERROR: Expected ';' + (93, 10) ERROR: Instead found identifier 'reg' + (95, 10) ERROR: Expected ';' + (95, 10) ERROR: Instead found identifier 'reg' + (96, 10) ERROR: Expected ';' + (96, 10) ERROR: Instead found identifier 'reg' + (97, 10) ERROR: Expected ';' + (97, 10) ERROR: Instead found identifier 'reg' + (98, 10) ERROR: Expected ';' + (98, 10) ERROR: Instead found identifier 'reg' + (100, 10) ERROR: Expected ';' + (100, 10) ERROR: Instead found identifier 'reg' + (101, 10) ERROR: Expected ';' + (101, 10) ERROR: Instead found identifier 'reg' + (102, 10) ERROR: Expected ';' + (102, 10) ERROR: Instead found identifier 'reg' + (103, 10) ERROR: Expected ';' + (103, 10) ERROR: Instead found identifier 'reg' + (105, 10) ERROR: Expected ';' + (105, 10) ERROR: Instead found identifier 'reg' + (106, 10) ERROR: Expected ';' + (106, 10) ERROR: Instead found identifier 'reg' + (107, 10) ERROR: Expected ';' + (107, 10) ERROR: Instead found identifier 'reg' + (108, 10) ERROR: Expected ';' + (108, 10) ERROR: Instead found identifier 'reg' + (110, 10) ERROR: Expected ';' + (110, 10) ERROR: Instead found identifier 'reg' + (111, 10) ERROR: Expected ';' + (111, 10) ERROR: Instead found identifier 'reg' + (112, 10) ERROR: Expected ';' + (112, 10) ERROR: Instead found identifier 'reg' + (113, 10) ERROR: Expected ';' + (113, 10) ERROR: Instead found identifier 'reg' + (115, 10) ERROR: Expected ';' + (115, 10) ERROR: Instead found identifier 'reg' + (116, 10) ERROR: Expected ';' + (116, 10) ERROR: Instead found identifier 'reg' + (117, 10) ERROR: Expected ';' + (117, 10) ERROR: Instead found identifier 'reg' + (118, 10) ERROR: Expected ';' + (118, 10) ERROR: Instead found identifier 'reg' + (120, 10) ERROR: Expected ';' + (120, 10) ERROR: Instead found identifier 'reg' + (121, 10) ERROR: Expected ';' + (121, 10) ERROR: Instead found identifier 'reg' + (122, 10) ERROR: Expected ';' + (122, 10) ERROR: Instead found identifier 'reg' + (123, 10) ERROR: Expected ';' + (123, 10) ERROR: Instead found identifier 'reg' + (125, 10) ERROR: Expected ';' + (125, 10) ERROR: Instead found identifier 'reg' + (126, 10) ERROR: Expected ';' + (126, 10) ERROR: Instead found identifier 'reg' + (127, 10) ERROR: Expected ';' + (127, 10) ERROR: Instead found identifier 'reg' + (128, 10) ERROR: Expected ';' + (128, 10) ERROR: Instead found identifier 'reg' + (130, 10) ERROR: Expected ';' + (130, 10) ERROR: Instead found identifier 'reg' + (131, 10) ERROR: Expected ';' + (131, 10) ERROR: Instead found identifier 'reg' + (132, 10) ERROR: Expected ';' + (132, 10) ERROR: Instead found identifier 'reg' + (133, 10) ERROR: Expected ';' + (133, 10) ERROR: Instead found identifier 'reg' + (135, 10) ERROR: Expected ';' + (135, 10) ERROR: Instead found identifier 'reg' + (136, 10) ERROR: Expected ';' + (136, 10) ERROR: Instead found identifier 'reg' + (137, 10) ERROR: Expected ';' + (137, 10) ERROR: Instead found identifier 'reg' + (138, 10) ERROR: Expected ';' + (138, 10) ERROR: Instead found identifier 'reg' + (8, 2) INFO: Compiling Effects::Effects() + (10, 3) ERROR: No matching symbol 'Precache' + (11, 3) ERROR: No matching symbol 'Precache' + (12, 3) ERROR: No matching symbol 'Precache' + (13, 3) ERROR: No matching symbol 'Precache' + (14, 3) ERROR: No matching symbol 'Precache' + (15, 3) ERROR: No matching symbol 'Precache' + (16, 3) ERROR: No matching symbol 'Precache' + (17, 3) ERROR: No matching symbol 'Precache' + (18, 3) ERROR: No matching symbol 'Precache' + (19, 3) ERROR: No matching symbol 'Precache' + (20, 3) ERROR: No matching symbol 'Precache' + (21, 3) ERROR: No matching symbol 'Precache' + (22, 3) ERROR: No matching symbol 'Precache' + (23, 3) ERROR: No matching symbol 'Precache' + (8, 2) INFO: Compiling SvGlobals::SvGlobals() + (62, 36) ERROR: Expected expression value + (62, 36) ERROR: Instead found '' + (86, 36) ERROR: Expected expression value + (86, 36) ERROR: Instead found '' + (157, 36) ERROR: Expected expression value + (157, 36) ERROR: Instead found '' + (11, 2) INFO: Compiling Treasure::Treasure() + (32, 36) ERROR: Expected expression value + (32, 36) ERROR: Instead found '' + (72, 2) INFO: Compiling void Treasure::add_epic_array() + (74, 20) ERROR: No matching symbol 'i' + (75, 14) ERROR: No matching symbol 'GetToken' + (80, 8) ERROR: No matching symbol 'EXIT_SUB' + (82, 21) ERROR: No matching symbol 'GetToken' + (83, 21) ERROR: No conversion from 'string' to 'int' available. + (89, 2) INFO: Compiling void Treasure::add_epic_item() + (91, 3) ERROR: No matching symbol 'GlobalArrayAdd' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblintown\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\chest2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\chest3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\chest4.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\chest5.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\chest6.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\chest7.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\chest8.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\chest9.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/goblin_town\prisoner.as + (23, 2) INFO: Compiling void Prisoner::game_precache() + (25, 3) ERROR: No matching symbol 'Precache' + (28, 2) INFO: Compiling void Prisoner::OnSpawn() + (30, 3) ERROR: No matching symbol 'SetHealth' + (31, 3) ERROR: No matching symbol 'SetMaxHealth' + (32, 3) ERROR: No matching symbol 'SetGold' + (33, 3) ERROR: No matching symbol 'SetName' + (34, 3) ERROR: No matching symbol 'SetWidth' + (35, 3) ERROR: No matching symbol 'SetHeight' + (36, 3) ERROR: No matching symbol 'SetRace' + (37, 3) ERROR: No matching symbol 'SetRoam' + (38, 3) ERROR: No matching symbol 'SetModel' + (39, 3) ERROR: No matching symbol 'SetInvincible' + (40, 3) ERROR: No matching symbol 'SetModelBody' + (43, 3) ERROR: No matching symbol 'CatchSpeech' + (44, 3) ERROR: No matching symbol 'CatchSpeech' + (45, 3) ERROR: No matching symbol 'CatchSpeech' + (48, 2) INFO: Compiling void Prisoner::say_hi() + (51, 19) ERROR: No matching symbol 'HEARING_RANGE' + (55, 5) ERROR: No matching symbol 'SayText' + (59, 5) ERROR: No matching symbol 'SayText' + (64, 2) INFO: Compiling void Prisoner::say_no() + (67, 19) ERROR: No matching symbol 'HEARING_RANGE' + (71, 5) ERROR: No matching symbol 'SayText' + (75, 5) ERROR: No matching symbol 'SayText' + (80, 2) INFO: Compiling void Prisoner::say_yes() + (83, 19) ERROR: No matching symbol 'HEARING_RANGE' + (87, 5) ERROR: No matching symbol 'SayText' + (92, 5) ERROR: No matching symbol 'SayText' + (93, 5) ERROR: No matching symbol 'ScheduleDelayedEvent' + (98, 2) INFO: Compiling void Prisoner::ending() + (100, 3) ERROR: No matching symbol 'SayText' + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (104, 2) INFO: Compiling void Prisoner::ending2() + (106, 3) ERROR: No matching symbol 'SayText' + (107, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (110, 2) INFO: Compiling void Prisoner::reward() + (112, 3) ERROR: No matching symbol 'SayText' + (116, 2) INFO: Compiling void Prisoner::playerdist() + (118, 12) ERROR: No matching symbol 'GetEntityIndex' + (119, 14) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (119, 14) INFO: Candidates are: + (119, 14) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (119, 14) INFO: Rejected due to type mismatch at positional parameter 1 + (120, 9) ERROR: No matching symbol 'GetEntityIndex' + (121, 11) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (121, 11) INFO: Candidates are: + (121, 11) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (121, 11) INFO: Rejected due to type mismatch at positional parameter 1 + (122, 14) ERROR: No matching signatures to 'Distance(string, string)' + (122, 14) INFO: Candidates are: + (122, 14) INFO: float Distance(const Vector3&in, const Vector3&in) + (122, 14) INFO: Rejected due to type mismatch at positional parameter 1 + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/hall_of_deralia\king_of_deralia.as + (26, 2) INFO: Compiling void KingOfDeralia::OnSpawn() + (28, 3) ERROR: No matching symbol 'SetName' + (29, 3) ERROR: No matching symbol 'SetName' + (30, 3) ERROR: No matching symbol 'SetHealth' + (31, 3) ERROR: No matching symbol 'SetInvincible' + (32, 3) ERROR: No matching symbol 'SetModel' + (33, 3) ERROR: No matching symbol 'SetWidth' + (34, 3) ERROR: No matching symbol 'SetHeight' + (35, 3) ERROR: No matching symbol 'SetSayTextRange' + (36, 3) ERROR: No matching symbol 'SetIdleAnim' + (37, 3) ERROR: No matching symbol 'PlayAnim' + (38, 3) ERROR: No matching symbol 'CatchSpeech' + (40, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (41, 8) ERROR: No matching symbol 'G_DAUGHTER_RESCUED' + (43, 3) ERROR: No matching symbol 'FREQ_MOURN' + (46, 2) INFO: Compiling void KingOfDeralia::get_guard_id() + (48, 15) ERROR: No matching symbol 'FindEntityByName' + (49, 15) ERROR: No matching symbol 'FindEntityByName' + (52, 2) INFO: Compiling void KingOfDeralia::do_mourn() + (54, 8) ERROR: No matching symbol 'G_DAUGHTER_RESCUED' + (55, 3) ERROR: No matching symbol 'FREQ_MOURN' + (56, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (58, 17) ERROR: No conversion from 'string' to 'int' available. + (60, 4) ERROR: No matching symbol 'SayText' + (61, 4) ERROR: No matching symbol 'CallExternal' + (63, 17) ERROR: No conversion from 'string' to 'int' available. + (65, 4) ERROR: No matching symbol 'SayText' + (66, 4) ERROR: No matching symbol 'CallExternal' + (68, 17) ERROR: No conversion from 'string' to 'int' available. + (70, 4) ERROR: No matching symbol 'SayText' + (74, 2) INFO: Compiling void KingOfDeralia::say_hi() + (76, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (78, 22) ERROR: No matching symbol 'param1' + (80, 22) ERROR: No matching symbol 'GetEntityIndex' + (81, 4) ERROR: No matching symbol 'face_speaker' + (83, 8) ERROR: No matching signatures to 'IsValidPlayer(const string)' + (83, 8) INFO: Candidates are: + (83, 8) INFO: bool IsValidPlayer(CBasePlayer@) + (83, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (85, 22) ERROR: No matching symbol 'GetEntityIndex' + (86, 4) ERROR: No matching symbol 'face_speaker' + (88, 8) ERROR: No matching symbol 'G_DAUGHTER_RESCUED' + (90, 3) ERROR: No matching symbol 'CallExternal' + (91, 3) ERROR: No matching symbol 'CHAT_DELAY' + (94, 2) INFO: Compiling void KingOfDeralia::say_daughter1() + (96, 3) ERROR: No matching symbol 'SayText' + (97, 3) ERROR: No matching symbol 'CHAT_DELAY' + (100, 2) INFO: Compiling void KingOfDeralia::say_daughter2() + (102, 3) ERROR: No matching symbol 'PlayAnim' + (103, 3) ERROR: No matching symbol 'SayText' + (104, 3) ERROR: No matching symbol 'CHAT_DELAY' + (107, 2) INFO: Compiling void KingOfDeralia::say_daughter3() + (109, 3) ERROR: No matching symbol 'SayText' + (110, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (111, 3) ERROR: No matching symbol 'CallExternal' + (114, 2) INFO: Compiling void KingOfDeralia::say_daughter4() + (116, 3) ERROR: No matching symbol 'SayText' + (117, 3) ERROR: No matching symbol 'PlayAnim' + (118, 3) ERROR: No matching symbol 'CallExternal' + (119, 3) ERROR: No matching symbol 'SetMoveDest' + (120, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (123, 2) INFO: Compiling void KingOfDeralia::say_daughter5() + (125, 3) ERROR: No matching symbol 'PlayAnim' + (126, 3) ERROR: No matching symbol 'face_speaker' + (127, 3) ERROR: No matching symbol 'SayText' + (128, 3) ERROR: No matching symbol 'CHAT_DELAY' + (131, 2) INFO: Compiling void KingOfDeralia::say_daughter6() + (133, 3) ERROR: No matching symbol 'SayText' + (134, 3) ERROR: No matching symbol 'CHAT_DELAY' + (137, 2) INFO: Compiling void KingOfDeralia::say_daughter7() + (139, 3) ERROR: No matching symbol 'PlayAnim' + (140, 3) ERROR: No matching symbol 'SayText' + (141, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (149, 2) INFO: Compiling void KingOfDeralia::game_menu_getoptions() + (153, 11) ERROR: Expected ';' + (153, 11) ERROR: Instead found identifier 'reg' + (154, 11) ERROR: Expected ';' + (154, 11) ERROR: Instead found identifier 'reg' + (155, 11) ERROR: Expected ';' + (155, 11) ERROR: Instead found identifier 'reg' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\bandit_boss_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\blacksmith.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\default_human.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\dr_who.as + (29, 2) INFO: Compiling DrWho::DrWho() + (34, 3) ERROR: No matching symbol 'SetName' + (35, 3) ERROR: No matching symbol 'SetHealth' + (36, 3) ERROR: No matching symbol 'SetInvincible' + (37, 3) ERROR: No matching symbol 'SetNoPush' + (38, 3) ERROR: No matching symbol 'SetRace' + (39, 3) ERROR: No matching symbol 'SetRoam' + (40, 3) ERROR: No matching symbol 'SetModel' + (41, 3) ERROR: No matching symbol 'SetWidth' + (42, 3) ERROR: No matching symbol 'SetHeight' + (43, 3) ERROR: No matching symbol 'SetSayTextRange' + (44, 3) ERROR: No matching symbol 'SetIdleAnim' + (45, 3) ERROR: No matching symbol 'CatchSpeech' + (46, 3) ERROR: No matching symbol 'CatchSpeech' + (47, 3) ERROR: No matching symbol 'CatchSpeech' + (49, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (52, 2) INFO: Compiling void DrWho::hear_apple() + (54, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (55, 3) ERROR: No matching symbol 'PlayAnim' + (56, 3) ERROR: No matching symbol 'SayText' + (60, 2) INFO: Compiling void DrWho::scan_for_ally() + (62, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (63, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (65, 9) ERROR: No matching symbol 'GetEntityRange' + (70, 2) INFO: Compiling void DrWho::say_hi() + (72, 23) ERROR: No matching symbol 'param1' + (74, 9) ERROR: No matching signatures to 'IsEntityAlive(const string)' + (74, 9) INFO: Candidates are: + (74, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (74, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (76, 9) ERROR: No matching symbol 'GetEntityRange' + (82, 8) ERROR: No matching symbol 'EXIT_SUB' + (83, 7) ERROR: Expression must be of boolean type, instead found 'string' + (84, 7) ERROR: Illegal operation on this datatype + (86, 4) ERROR: No matching symbol 'PlayAnim' + (97, 8) ERROR: No matching symbol 'EXIT_SUB' + (98, 7) ERROR: Expression must be of boolean type, instead found 'string' + (115, 2) INFO: Compiling void DrWho::hear_no() + (117, 8) ERROR: No matching symbol 'TALKING' + (118, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (119, 3) ERROR: No matching symbol 'SayText' + (123, 2) INFO: Compiling void DrWho::open_portal() + (125, 21) ERROR: No matching symbol 'GetEntityName' + (127, 3) ERROR: No matching symbol 'SayText' + (129, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (130, 3) ERROR: No matching symbol 'SetProp' + (131, 3) ERROR: No matching symbol 'SetProp' + (132, 3) ERROR: No matching symbol 'SetSolid' + (134, 3) ERROR: No matching symbol 'UseTrigger' + (137, 2) INFO: Compiling void DrWho::game_menu_getoptions() + (140, 10) ERROR: Expected ';' + (140, 10) ERROR: Instead found identifier 'reg' + (141, 10) ERROR: Expected ';' + (141, 10) ERROR: Instead found identifier 'reg' + (142, 10) ERROR: Expected ';' + (142, 10) ERROR: Instead found identifier 'reg' + (143, 10) ERROR: Expected ';' + (143, 10) ERROR: Instead found identifier 'reg' + (144, 10) ERROR: Expected ';' + (144, 10) ERROR: Instead found identifier 'reg' + (147, 10) ERROR: Expected ';' + (147, 10) ERROR: Instead found identifier 'reg' + (148, 10) ERROR: Expected ';' + (148, 10) ERROR: Instead found identifier 'reg' + (149, 10) ERROR: Expected ';' + (149, 10) ERROR: Instead found identifier 'reg' + (150, 10) ERROR: Expected ';' + (150, 10) ERROR: Instead found identifier 'reg' + (153, 2) INFO: Compiling void DrWho::payment_failed() + (155, 3) ERROR: No matching symbol 'PlayAnim' + (157, 16) ERROR: No conversion from 'string' to 'int' available. + (159, 4) ERROR: No matching symbol 'SayText' + (161, 16) ERROR: No conversion from 'string' to 'int' available. + (163, 4) ERROR: No matching symbol 'SayText' + (167, 2) INFO: Compiling void DrWho::timer_rant_loop() + (169, 3) ERROR: No matching symbol 'SetSayTextRange' + (171, 3) ERROR: No matching signatures to 'string::RND_DELAY(const string)' + (177, 8) ERROR: No matching symbol 'BUSY_TALKING' + (178, 3) ERROR: No matching symbol 'convo_anim' + (181, 4) ERROR: No matching symbol 'SayText' + (185, 4) ERROR: No matching symbol 'SayText' + (189, 4) ERROR: No matching symbol 'SayText' + (193, 4) ERROR: No matching symbol 'SayText' + (197, 4) ERROR: No matching symbol 'SayText' + (201, 4) ERROR: No matching symbol 'SayText' + (205, 4) ERROR: No matching symbol 'SayText' + (209, 4) ERROR: No matching symbol 'SayText' + (213, 4) ERROR: No matching symbol 'SayText' + (217, 2) INFO: Compiling void DrWho::chat_loop() + (219, 17) ERROR: No conversion from 'string' to 'int' available. + (221, 4) ERROR: No matching symbol 'convo_anim' + (223, 17) ERROR: No conversion from 'string' to 'int' available. + (225, 4) ERROR: No matching symbol 'convo_anim' + (227, 17) ERROR: No conversion from 'string' to 'int' available. + (229, 4) ERROR: No matching symbol 'convo_anim' + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 4) ERROR: No matching symbol 'convo_anim' + (235, 17) ERROR: No conversion from 'string' to 'int' available. + (237, 4) ERROR: No matching symbol 'convo_anim' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\erkold.as + (8, 7) ERROR: Method 'void Erkold::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\game_master.as + (8, 2) INFO: Compiling void GameMaster::OnSpawn() + (10, 8) ERROR: No matching symbol 'G_OLDHELENA_AXE_PICKED' + (12, 4) ERROR: No matching symbol 'UseTrigger' + (16, 2) INFO: Compiling void GameMaster::helena_bandit_chest() + (18, 20) ERROR: No matching symbol 'param1' + (19, 3) ERROR: No matching symbol 'gm_createnpc' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\genstore.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\harry.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\helena.as + (17, 2) INFO: Compiling void Helena::OnSpawn() + (19, 3) ERROR: No matching symbol 'SetName' + (20, 3) ERROR: No matching symbol 'SetName' + (21, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (22, 3) ERROR: No matching symbol 'SetInvincible' + (23, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetAlive' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'LogDebug' + (30, 2) INFO: Compiling void Helena::check_for_raid() + (33, 3) ERROR: No matching symbol 'LogDebug' + (34, 18) ERROR: No conversion from 'string' to 'int' available. + (36, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 20) ERROR: No conversion from 'string' to 'int' available. + (42, 2) INFO: Compiling void Helena::start_raid() + (45, 3) ERROR: No matching symbol 'LogDebug' + (46, 18) ERROR: No matching symbol 'HPREQ_MEDIUM_WAVE' + (48, 4) ERROR: No matching symbol 'UseTrigger' + (50, 19) ERROR: No matching symbol 'HPREQ_MEDIUM_WAVE' + (52, 19) ERROR: No matching symbol 'HPREQ_STRONG_WAVE' + (55, 4) ERROR: No matching symbol 'UseTrigger' + (57, 19) ERROR: No matching symbol 'HPREQ_STRONG_WAVE' + (59, 4) ERROR: No matching symbol 'UseTrigger' + (61, 3) ERROR: No matching symbol 'SendInfoMsg' + (62, 3) ERROR: No matching symbol 'CallExternal' + (63, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (66, 2) INFO: Compiling void Helena::bandit_raid() + (68, 3) ERROR: No matching symbol 'LogDebug' + (69, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (70, 3) ERROR: No matching symbol 'UseTrigger' + (73, 2) INFO: Compiling void Helena::bandit_raid2() + (75, 3) ERROR: No matching symbol 'SendInfoMsg' + (76, 3) ERROR: No matching symbol 'CallExternal' + (77, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (95, 2) INFO: Compiling void Helena::raid_done() + (97, 3) ERROR: No matching symbol 'LogDebug' + (98, 3) ERROR: No matching symbol 'CallExternal' + (99, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (100, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (104, 2) INFO: Compiling void Helena::manual_start() + (106, 3) ERROR: No matching symbol 'LogDebug' + (107, 14) ERROR: No matching symbol 'param1' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\helena_fear.as + (15, 2) INFO: Compiling void HelenaFear::OnSpawn() + (17, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (20, 2) INFO: Compiling void HelenaFear::make_fear() + (22, 3) ERROR: No matching symbol 'CallExternal' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\helena_npc.as + (154, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\larva_chest1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\memorialguard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\merc.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\old_harry.as + (23, 2) INFO: Compiling void OldHarry::OnRepeatTimer() + (25, 3) ERROR: No matching symbol 'SetRepeatDelay' + (26, 3) ERROR: No matching symbol 'CanSee' + (35, 2) INFO: Compiling void OldHarry::OnSpawn() + (37, 3) ERROR: No matching symbol 'SetHealth' + (38, 3) ERROR: No matching symbol 'SetGold' + (39, 3) ERROR: No matching symbol 'SetName' + (40, 3) ERROR: No matching symbol 'SetWidth' + (41, 3) ERROR: No matching symbol 'SetHeight' + (42, 3) ERROR: No matching symbol 'SetRace' + (43, 3) ERROR: No matching symbol 'SetRoam' + (44, 3) ERROR: No matching symbol 'SetModel' + (45, 3) ERROR: No matching symbol 'SetModelBody' + (53, 3) ERROR: No matching symbol 'CatchSpeech' + (54, 3) ERROR: No matching symbol 'CatchSpeech' + (55, 3) ERROR: No matching symbol 'CatchSpeech' + (56, 3) ERROR: No matching symbol 'CatchSpeech' + (57, 3) ERROR: No matching symbol 'CatchSpeech' + (58, 3) ERROR: No matching symbol 'CatchSpeech' + (59, 3) ERROR: No matching symbol 'CatchSpeech' + (60, 3) ERROR: No matching symbol 'CatchSpeech' + (61, 3) ERROR: No matching symbol 'CatchSpeech' + (62, 3) ERROR: No matching symbol 'CatchSpeech' + (63, 3) ERROR: No matching symbol 'CatchSpeech' + (64, 3) ERROR: No matching symbol 'CatchSpeech' + (67, 2) INFO: Compiling void OldHarry::say_hi() + (69, 3) ERROR: No matching symbol 'PlayAnim' + (70, 3) ERROR: No matching symbol 'SayText' + (71, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (74, 2) INFO: Compiling void OldHarry::say_hi2test() + (76, 12) ERROR: Can't implicitly convert from 'const string' to 'int&'. + (77, 3) ERROR: No matching symbol 'SayText' + (78, 3) ERROR: No matching symbol 'setsayso' + (86, 2) INFO: Compiling void OldHarry::say_quiet() + (89, 93) ERROR: Expected ')' or ',' + (89, 93) ERROR: Instead found identifier 'deterioate' + (93, 2) INFO: Compiling void OldHarry::say_quiet2() + (95, 3) ERROR: No matching symbol 'PlayAnim' + (96, 3) ERROR: No matching symbol 'SayText' + (99, 2) INFO: Compiling void OldHarry::say_orcs() + (101, 3) ERROR: No matching symbol 'SayText' + (104, 2) INFO: Compiling void OldHarry::say_dorfgan() + (106, 3) ERROR: No matching symbol 'PlayAnim' + (107, 3) ERROR: No matching symbol 'SayText' + (110, 2) INFO: Compiling void OldHarry::say_erkold() + (112, 3) ERROR: No matching symbol 'PlayAnim' + (113, 3) ERROR: No matching symbol 'SayText' + (116, 2) INFO: Compiling void OldHarry::say_serrold() + (118, 3) ERROR: No matching symbol 'PlayAnim' + (119, 3) ERROR: No matching symbol 'SayText' + (128, 2) INFO: Compiling void OldHarry::recv_enoughgold() + (130, 3) ERROR: No matching symbol 'OFFER_AMT' + (132, 3) ERROR: No matching symbol 'SayText' + (133, 3) ERROR: No matching symbol 'PlayAnim' + (136, 2) INFO: Compiling void OldHarry::recv_notenoughgold() + (138, 3) ERROR: No matching symbol 'OFFER_AMT' + (140, 3) ERROR: No matching symbol 'SayText' + (141, 3) ERROR: No matching symbol 'PlayAnim' + (144, 2) INFO: Compiling void OldHarry::playerused() + (146, 3) ERROR: No matching symbol 'SetVolume' + (150, 2) INFO: Compiling void OldHarry::createmystore() + (153, 3) ERROR: No matching symbol 'AddStoreItem' + (154, 3) ERROR: No matching symbol 'AddStoreItem' + (155, 3) ERROR: No matching symbol 'AddStoreItem' + (156, 3) ERROR: No matching symbol 'AddStoreItem' + (157, 3) ERROR: No matching symbol 'AddStoreItem' + (158, 3) ERROR: No matching symbol 'AddStoreItem' + (161, 2) INFO: Compiling void OldHarry::flee() + (164, 3) ERROR: No matching symbol 'SetMoveAnim' + (165, 3) ERROR: No matching symbol 'SetMoveDest' + (168, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (171, 2) INFO: Compiling void OldHarry::shiver() + (173, 3) ERROR: No matching symbol 'PlayAnim' + (175, 3) ERROR: No matching symbol 'SetVolume' + (176, 13) ERROR: No matching symbol 'GetOwner' + (177, 3) ERROR: No matching symbol 'Say' + (178, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (187, 2) INFO: Compiling void OldHarry::scream() + (190, 3) ERROR: No matching symbol 'SetVolume' + (193, 13) ERROR: No matching symbol 'GetOwner' + (195, 3) ERROR: No matching symbol 'Say' + (196, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (209, 2) INFO: Compiling void OldHarry::struck() + (211, 3) ERROR: No matching symbol 'SetVolume' + (212, 13) ERROR: No matching symbol 'GetOwner' + (216, 2) INFO: Compiling void OldHarry::parry() + (218, 3) ERROR: No matching symbol 'PlayAnim' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\orcguard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\orcwarboss.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\orcwarboss_ghost.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\orcwarrior_hard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\OTTC1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\serrold.as + (22, 2) INFO: Compiling void Serrold::OnRepeatTimer() + (24, 3) ERROR: No matching symbol 'SetRepeatDelay' + (25, 3) ERROR: No matching symbol 'CanSee' + (34, 2) INFO: Compiling void Serrold::OnSpawn() + (36, 3) ERROR: No matching symbol 'SetHealth' + (37, 3) ERROR: No matching symbol 'SetGold' + (38, 3) ERROR: No matching symbol 'SetName' + (39, 3) ERROR: No matching symbol 'SetWidth' + (40, 3) ERROR: No matching symbol 'SetHeight' + (41, 3) ERROR: No matching symbol 'SetRace' + (42, 3) ERROR: No matching symbol 'SetRoam' + (43, 3) ERROR: No matching symbol 'SetModel' + (44, 3) ERROR: No matching symbol 'SetModelBody' + (50, 3) ERROR: No matching symbol 'CatchSpeech' + (51, 3) ERROR: No matching symbol 'CatchSpeech' + (52, 3) ERROR: No matching symbol 'CatchSpeech' + (53, 3) ERROR: No matching symbol 'CatchSpeech' + (54, 3) ERROR: No matching symbol 'CatchSpeech' + (55, 3) ERROR: No matching symbol 'CatchSpeech' + (56, 3) ERROR: No matching symbol 'CatchSpeech' + (57, 3) ERROR: No matching symbol 'CatchSpeech' + (58, 3) ERROR: No matching symbol 'CatchSpeech' + (59, 3) ERROR: No matching symbol 'CatchSpeech' + (60, 3) ERROR: No matching symbol 'CatchSpeech' + (61, 3) ERROR: No matching symbol 'CatchSpeech' + (62, 3) ERROR: No matching symbol 'CatchSpeech' + (63, 3) ERROR: No matching symbol 'CatchSpeech' + (64, 3) ERROR: No matching symbol 'CatchSpeech' + (67, 2) INFO: Compiling void Serrold::greet_players() + (69, 3) ERROR: No matching symbol 'SetVolume' + (70, 3) ERROR: No matching symbol 'Say' + (73, 2) INFO: Compiling void Serrold::say_hi() + (75, 3) ERROR: No matching symbol 'PlayAnim' + (76, 3) ERROR: No matching symbol 'SayText' + (77, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (80, 2) INFO: Compiling void Serrold::say_hi2() + (82, 3) ERROR: No matching symbol 'SayText' + (85, 2) INFO: Compiling void Serrold::say_orcs() + (87, 3) ERROR: No matching symbol 'PlayAnim' + (88, 3) ERROR: No matching symbol 'SayText' + (91, 2) INFO: Compiling void Serrold::say_rumor() + (93, 3) ERROR: No matching symbol 'PlayAnim' + (94, 3) ERROR: No matching symbol 'SayText' + (97, 2) INFO: Compiling void Serrold::say_dorfgan() + (99, 3) ERROR: No matching symbol 'PlayAnim' + (100, 3) ERROR: No matching symbol 'SayText' + (103, 2) INFO: Compiling void Serrold::say_erkold() + (105, 3) ERROR: No matching symbol 'PlayAnim' + (106, 3) ERROR: No matching symbol 'SayText' + (109, 2) INFO: Compiling void Serrold::say_serrold() + (111, 3) ERROR: No matching symbol 'PlayAnim' + (112, 3) ERROR: No matching symbol 'SayText' + (115, 2) INFO: Compiling void Serrold::say_harry() + (117, 3) ERROR: No matching symbol 'PlayAnim' + (118, 3) ERROR: No matching symbol 'SayText' + (121, 2) INFO: Compiling void Serrold::say_innopen() + (123, 16) ERROR: Can't implicitly convert from 'const string' to 'int&'. + (125, 3) ERROR: No matching symbol 'PlayAnim' + (126, 3) ERROR: No matching symbol 'SayText' + (131, 2) INFO: Compiling void Serrold::say_thanks() + (133, 3) ERROR: No matching symbol 'PlayAnim' + (134, 3) ERROR: No matching symbol 'SayText' + (137, 2) INFO: Compiling void Serrold::robbed() + (139, 3) ERROR: No matching symbol 'PlayAnim' + (148, 2) INFO: Compiling void Serrold::recv_enoughgold() + (150, 3) ERROR: No matching symbol 'OFFER_AMT' + (152, 3) ERROR: No matching symbol 'SayText' + (153, 3) ERROR: No matching symbol 'PlayAnim' + (156, 2) INFO: Compiling void Serrold::recv_notenoughgold() + (158, 3) ERROR: No matching symbol 'OFFER_AMT' + (160, 3) ERROR: No matching symbol 'SayText' + (161, 3) ERROR: No matching symbol 'PlayAnim' + (164, 2) INFO: Compiling void Serrold::flee() + (167, 3) ERROR: No matching symbol 'SetMoveAnim' + (168, 3) ERROR: No matching symbol 'SetMoveDest' + (171, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (174, 2) INFO: Compiling void Serrold::shiver() + (176, 3) ERROR: No matching symbol 'PlayAnim' + (178, 3) ERROR: No matching symbol 'SetVolume' + (179, 13) ERROR: No matching symbol 'GetOwner' + (180, 3) ERROR: No matching symbol 'Say' + (181, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (190, 2) INFO: Compiling void Serrold::scream() + (193, 3) ERROR: No matching symbol 'SetVolume' + (196, 13) ERROR: No matching symbol 'GetOwner' + (198, 3) ERROR: No matching symbol 'Say' + (199, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (212, 2) INFO: Compiling void Serrold::struck() + (214, 3) ERROR: No matching symbol 'SetRoam' + (215, 3) ERROR: No matching symbol 'SetVolume' + (216, 13) ERROR: No matching symbol 'GetOwner' + (220, 2) INFO: Compiling void Serrold::parry() + (222, 3) ERROR: No matching symbol 'PlayAnim' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\spid_chest1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\stonewall.as + (6, 7) ERROR: Method 'void Stonewall::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\storage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\structure.as + (6, 7) ERROR: Method 'void Structure::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\towerarcher.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\troll.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\vendor.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\vendor8.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\weapstore.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/helena\woodenwall.as + (6, 7) ERROR: Method 'void Woodenwall::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\first_death.as + (6, 7) ERROR: Method 'void FirstDeath::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\first_hireling.as + (8, 2) INFO: Compiling void FirstHireling::game_targeted_by_player() + (11, 11) ERROR: No matching symbol 'GetMonsterProperty' + (13, 3) ERROR: No matching symbol 'ShowHelpTip' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\first_marketsquare.as + (8, 2) INFO: Compiling void FirstMarketsquare::game_targeted_by_player() + (11, 11) ERROR: No matching symbol 'GetMonsterProperty' + (13, 3) ERROR: No matching symbol 'ShowHelpTip' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\first_npc.as + (8, 2) INFO: Compiling void FirstNpc::game_targeted_by_player() + (11, 11) ERROR: No matching symbol 'GetMonsterProperty' + (13, 3) ERROR: No matching symbol 'ShowHelpTip' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\first_party.as + (8, 2) INFO: Compiling void FirstParty::game_party_join() + (11, 11) ERROR: No matching symbol 'param1' + (17, 3) ERROR: No matching symbol 'ShowHelpTip' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\first_skillgain.as + (8, 2) INFO: Compiling void FirstSkillgain::game_learnskill() + (10, 9) ERROR: No matching symbol 'param2' + (11, 9) ERROR: No matching symbol 'param3' + (17, 3) ERROR: No matching symbol 'ShowHelpTip' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\first_transition.as + (12, 2) INFO: Compiling void FirstTransition::game_transition_entered() + (14, 3) ERROR: No matching symbol 'LogDebug' + (16, 11) ERROR: No matching symbol 'param1' + (25, 3) ERROR: No matching symbol 'ShowHelpTip' + (26, 16) ERROR: No matching symbol 'StringToLower' + (27, 16) ERROR: No matching symbol 'param1' + (28, 24) ERROR: No matching symbol 'param3' + (29, 23) ERROR: No matching symbol 'param4' + (30, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (31, 3) ERROR: No matching symbol 'CallExternal' + (34, 2) INFO: Compiling void FirstTransition::trans_message() + (36, 23) ERROR: No conversion from 'string' to 'float' available. + (41, 32) ERROR: No conversion from 'string' to 'int' available. + (45, 32) ERROR: No conversion from 'string' to 'int' available. + (58, 16) ERROR: No matching symbol 'StringToLower' + (60, 3) ERROR: No matching symbol 'SendInfoMsg' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/help\first_vendor.as + (8, 2) INFO: Compiling void FirstVendor::game_targeted_by_player() + (11, 11) ERROR: No matching symbol 'GetMonsterProperty' + (13, 3) ERROR: No matching symbol 'ShowHelpTip' + (16, 2) INFO: Compiling void FirstVendor::help_vendor_magic() + (19, 11) ERROR: No matching symbol 'GetMonsterProperty' + (21, 3) ERROR: No matching symbol 'ShowHelpTip' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/heras\GhorAsh.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/heras\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/heras\TC_heras.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/highlands_msc\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/hunderswamp\tubequeen.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\base_book.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\book_armor.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\book_felewyn.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\book_wand.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\fragment_idemark.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\game_master.as + (10, 2) INFO: Compiling void GameMaster::OnSpawn() + (12, 18) ERROR: No matching symbol 'FindEntityByName' + (13, 3) ERROR: No matching symbol 'SetProp' + (17, 2) INFO: Compiling void GameMaster::game_triggered() + (19, 7) ERROR: No matching symbol 'param1' + (21, 4) ERROR: No matching symbol 'CallExternal' + (23, 7) ERROR: No matching symbol 'param1' + (25, 4) ERROR: No matching symbol 'CallExternal' + (27, 7) ERROR: No matching symbol 'param1' + (29, 4) ERROR: No matching symbol 'CallExternal' + (31, 7) ERROR: No matching symbol 'param1' + (33, 4) ERROR: No matching symbol 'CallExternal' + (34, 4) ERROR: No matching symbol 'CallExternal' + (36, 7) ERROR: No matching symbol 'param1' + (38, 4) ERROR: No matching symbol 'CallExternal' + (40, 7) ERROR: No matching symbol 'param1' + (42, 4) ERROR: No matching symbol 'CallExternal' + (43, 4) ERROR: No matching symbol 'CallExternal' + (45, 7) ERROR: No matching symbol 'param1' + (47, 4) ERROR: No matching symbol 'CallExternal' + (49, 7) ERROR: No matching symbol 'param1' + (51, 19) ERROR: No matching symbol 'FindEntityByName' + (52, 4) ERROR: No matching symbol 'SetProp' + (55, 7) ERROR: No matching symbol 'param1' + (57, 19) ERROR: No matching symbol 'FindEntityByName' + (58, 4) ERROR: No matching symbol 'SetProp' + (61, 7) ERROR: No matching symbol 'param1' + (63, 19) ERROR: No matching symbol 'FindEntityByName' + (64, 4) ERROR: No matching symbol 'SetProp' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\guard_leofing.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\survivor_alfgar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/idemarks_tower\wizard_ishmeea.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/island1\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_base.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_base_helmet.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_base_helmet_new.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_base_hybrid.as + (6, 7) ERROR: Method 'void ArmorBaseHybrid::OnDeploy()' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void ArmorBaseHybrid::OnDrop()' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void ArmorBaseHybrid::OnTakeDamage(CBaseEntity@, CBaseEntity@, int, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_base_new.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_belmont.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_body.as + (8, 2) INFO: Compiling ArmorBody::ArmorBody() + (10, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_dark.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_d_test.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_faura.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_faura_cl.as + (24, 2) INFO: Compiling void ArmorFauraCl::client_activate() + (34, 35) ERROR: Expected expression value + (34, 35) ERROR: Instead found '' + (37, 51) ERROR: Expected expression value + (37, 51) ERROR: Instead found '' + (41, 2) INFO: Compiling void ArmorFauraCl::game_prerender() + (43, 28) ERROR: Expected expression value + (43, 28) ERROR: Instead found '' + (44, 54) ERROR: Expected expression value + (44, 54) ERROR: Instead found '' + (47, 2) INFO: Compiling void ArmorFauraCl::remove_fx() + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void ArmorFauraCl::remove_fx2() + (55, 3) ERROR: No matching symbol 'RemoveScript' + (58, 2) INFO: Compiling void ArmorFauraCl::update_flame_circle() + (62, 36) ERROR: Expected expression value + (62, 36) ERROR: Instead found '' + (65, 29) ERROR: Expected expression value + (65, 29) ERROR: Instead found '' + (81, 80) ERROR: Expected expression value + (81, 80) ERROR: Instead found '' + (87, 2) INFO: Compiling void ArmorFauraCl::setup_flame_circle() + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (94, 3) ERROR: No matching symbol 'ClientEffect' + (95, 3) ERROR: No matching symbol 'ClientEffect' + (96, 3) ERROR: No matching symbol 'ClientEffect' + (97, 3) ERROR: No matching symbol 'ClientEffect' + (98, 3) ERROR: No matching symbol 'ClientEffect' + (99, 3) ERROR: No matching symbol 'ClientEffect' + (100, 3) ERROR: No matching symbol 'ClientEffect' + (101, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_fireliz.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_golden.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_alvo1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_barnum.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_bronze.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_dark.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_elyg.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_gaz1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_gaz2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_golden.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_gray.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_hat.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_knight.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_mongol.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_plate.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_helm_undead.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_knight.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_leather.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_leather_gaz1.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_leather_studded.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_leather_torn.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_mongol.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_paura.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_pheonix55.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_plate.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_rehab.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_rehab_cl.as + (19, 2) INFO: Compiling void ArmorRehabCl::client_activate() + (44, 51) ERROR: Expected expression value + (44, 51) ERROR: Instead found '' + (51, 2) INFO: Compiling void ArmorRehabCl::fx_loop() + (53, 7) ERROR: Illegal operation on this datatype + (54, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (58, 2) INFO: Compiling void ArmorRehabCl::end_fx() + (61, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (69, 2) INFO: Compiling void ArmorRehabCl::create_element_sprites() + (74, 56) ERROR: Expected expression value + (74, 56) ERROR: Instead found '' + (75, 41) ERROR: Expected expression value + (75, 41) ERROR: Instead found '' + (77, 36) ERROR: Expected expression value + (77, 36) ERROR: Instead found '' + (79, 41) ERROR: Expected expression value + (79, 41) ERROR: Instead found '' + (81, 36) ERROR: Expected expression value + (81, 36) ERROR: Instead found '' + (83, 41) ERROR: Expected expression value + (83, 41) ERROR: Instead found '' + (85, 36) ERROR: Expected expression value + (85, 36) ERROR: Instead found '' + (89, 2) INFO: Compiling void ArmorRehabCl::setup_element_sprite() + (104, 38) ERROR: Expected expression value + (104, 38) ERROR: Instead found '' + (105, 38) ERROR: Expected expression value + (105, 38) ERROR: Instead found '' + (106, 79) ERROR: Expected expression value + (106, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_rm.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_salamander.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\armor_venom.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_2haxe.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_axe.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_b.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_base_onehanded.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_base_twohanded.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_battleaxe.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_c.as + (275, 2) ERROR: Expected method or property + (275, 2) ERROR: Instead found reserved keyword 'void' + (349, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_c_cl.as + (18, 2) INFO: Compiling void AxesCCl::client_activate() + (20, 3) ERROR: No matching symbol 'SetCallback' + (23, 2) INFO: Compiling void AxesCCl::update_caxe_sprite() + (25, 18) ERROR: No matching symbol 'FindToken' + (26, 23) ERROR: No matching symbol 'GetToken' + (28, 3) ERROR: No matching symbol 'LogDebug' + (31, 2) INFO: Compiling void AxesCCl::game_prerender() + (36, 37) ERROR: Expected expression value + (36, 37) ERROR: Instead found '' + (38, 111) ERROR: Expected expression value + (38, 111) ERROR: Instead found '' + (42, 2) INFO: Compiling void AxesCCl::end_fx() + (45, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (48, 2) INFO: Compiling void AxesCCl::remove_fx() + (50, 3) ERROR: No matching symbol 'RemoveScript' + (53, 2) INFO: Compiling void AxesCCl::setup_caxe_sprite() + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_df.as + (107, 2) ERROR: Expected method or property + (107, 2) ERROR: Instead found reserved keyword 'void' + (167, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_doubleaxe.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_dragon.as + (93, 2) ERROR: Expected method or property + (93, 2) ERROR: Instead found reserved keyword 'void' + (205, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_dragon_cl.as + (20, 2) INFO: Compiling void AxesDragonCl::make_clouds() + (22, 22) ERROR: No matching symbol 'param1' + (23, 15) ERROR: No matching symbol 'param2' + (24, 3) ERROR: No matching symbol 'ClientEffect' + (25, 3) ERROR: No matching symbol 'ClientEffect' + (26, 3) ERROR: No matching symbol 'ClientEffect' + (29, 2) INFO: Compiling void AxesDragonCl::setup_cloud() + (43, 42) ERROR: Expected expression value + (43, 42) ERROR: Instead found '' + (47, 2) INFO: Compiling void AxesDragonCl::end_fx() + (49, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (52, 2) INFO: Compiling void AxesDragonCl::remove_fx() + (54, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_golden.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_golden_ref.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_greataxe.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_gthunder11.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_poison1.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_rsmallaxe.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_runeaxe.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_scythe.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_smallaxe.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_sp.as + (165, 2) ERROR: Expected method or property + (165, 2) ERROR: Instead found reserved keyword 'void' + (279, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_ss.as + (91, 2) ERROR: Expected method or property + (91, 2) ERROR: Instead found reserved keyword 'void' + (161, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_td.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_tf.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_thunder11.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_ti.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_tl.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_tp.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\axes_vaxe.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_book.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_crest.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_crystal.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_drink.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_effect_armor.as + (6, 7) ERROR: Method 'void BaseEffectArmor::OnDrop()' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void BaseEffectArmor::OnDeploy()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_effect_weilded.as + (6, 7) ERROR: Method 'void BaseEffectWeilded::OnDeploy()' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void BaseEffectWeilded::OnDrop()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_elemental_resist.as + (6, 7) ERROR: Method 'void BaseElementalResist::OnDrop()' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void BaseElementalResist::OnDeploy()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_item.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_item_extras.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_kick.as + (19, 2) INFO: Compiling void BaseKick::register_charge1() + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 7) ERROR: Expected '(' + (23, 7) ERROR: Instead found identifier 'reg' + (24, 7) ERROR: Expected '(' + (24, 7) ERROR: Instead found identifier 'reg' + (25, 7) ERROR: Expected '(' + (25, 7) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (27, 7) ERROR: Expected '(' + (27, 7) ERROR: Instead found identifier 'reg' + (28, 10) ERROR: Expected ';' + (28, 10) ERROR: Instead found identifier 'reg' + (29, 9) ERROR: Expected '(' + (29, 9) ERROR: Instead found identifier 'reg' + (30, 7) ERROR: Expected '(' + (30, 7) ERROR: Instead found identifier 'reg' + (31, 9) ERROR: Expected '(' + (31, 9) ERROR: Instead found identifier 'reg' + (32, 9) ERROR: Expected '(' + (32, 9) ERROR: Instead found identifier 'reg' + (33, 10) ERROR: Expected ';' + (33, 10) ERROR: Instead found identifier 'reg' + (34, 10) ERROR: Expected ';' + (34, 10) ERROR: Instead found identifier 'reg' + (35, 10) ERROR: Expected ';' + (35, 10) ERROR: Instead found identifier 'reg' + (36, 10) ERROR: Expected ';' + (36, 10) ERROR: Instead found identifier 'reg' + (37, 9) ERROR: Expected '(' + (37, 9) ERROR: Instead found identifier 'reg' + (38, 7) ERROR: Expected '(' + (38, 7) ERROR: Instead found identifier 'reg' + (42, 2) INFO: Compiling void BaseKick::kickatk_start() + (45, 3) ERROR: No matching symbol 'SetViewModel' + (46, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 19) ERROR: No matching symbol 'GetEntityProperty' + (52, 2) INFO: Compiling void BaseKick::kick_go() + (54, 3) ERROR: No matching symbol 'PlayViewAnim' + (55, 3) ERROR: No matching symbol 'PlayOwnerAnim' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void BaseKick::game_dodamage() + (111, 35) ERROR: Expected expression value + (111, 35) ERROR: Instead found '' + (113, 42) ERROR: Expected expression value + (113, 42) ERROR: Instead found '' + (140, 2) INFO: Compiling void BaseKick::restore_hands() + (143, 3) ERROR: No matching symbol 'SetViewModel' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_lighted.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found identifier 'string' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (14, 11) ERROR: Expected '(' + (14, 11) ERROR: Instead found '.' + (15, 11) ERROR: Expected '(' + (15, 11) ERROR: Instead found '.' + (16, 14) ERROR: Expected '(' + (16, 14) ERROR: Instead found '.' + (17, 14) ERROR: Expected '(' + (17, 14) ERROR: Instead found '.' + (19, 13) ERROR: Expected identifier + (19, 13) ERROR: Instead found '(' + (130, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_loopsnd.as + (10, 2) INFO: Compiling BaseLoopsnd::BaseLoopsnd() + (16, 3) ERROR: No matching symbol 'Precache' + (30, 2) INFO: Compiling void BaseLoopsnd::loopsnd_end() + (34, 13) ERROR: No matching symbol 'LOOPSND_CHANNEL' + (37, 2) INFO: Compiling void BaseLoopsnd::loopsnd() + (39, 7) ERROR: Illegal operation on this datatype + (41, 46) ERROR: No matching symbol 'LOOPSND_NAME' + (41, 30) ERROR: No matching symbol 'LOOPSND_VOLUME' + (41, 13) ERROR: No matching symbol 'LOOPSND_CHANNEL' + (42, 3) ERROR: No matching symbol 'LOOPSND_LENGTH' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_medal.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_melee.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_miscitem.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_ranged.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_scan_area.as + (10, 2) INFO: Compiling BaseScanArea::BaseScanArea() + (12, 51) ERROR: Expected expression value + (12, 51) ERROR: Instead found '' + (15, 2) INFO: Compiling void BaseScanArea::game_dynamically_Created() + (17, 17) ERROR: No matching symbol 'param1' + (18, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_scroll.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_sheath.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_ticket.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_tome.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_vampire.as + (10, 2) INFO: Compiling void BaseVampire::try_vampire_target() + (13, 39) ERROR: Expected expression value + (13, 39) ERROR: Instead found '' + (19, 2) INFO: Compiling void BaseVampire::check_can_vampire() + (21, 22) ERROR: No matching symbol 'param1' + (22, 21) ERROR: No matching symbol 'param2' + (23, 27) ERROR: No matching symbol 'GetRelationship' + (24, 9) ERROR: No matching symbol 'GetEntityRace' + (25, 8) ERROR: No matching symbol 'GetEntityProperty' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_varied_attacks.as + (17, 2) INFO: Compiling void BaseVariedAttacks::check_attack_anim() + (19, 8) ERROR: No matching symbol 'BITEM_UNDERSKILLED' + (20, 8) ERROR: No matching symbol 'IsKeyDown' + (24, 8) ERROR: No matching symbol 'IsKeyDown' + (28, 8) ERROR: No matching symbol 'IsKeyDown' + (32, 8) ERROR: No matching symbol 'IsKeyDown' + (36, 8) ERROR: No matching symbol 'L_STAB' + (38, 22) ERROR: No matching symbol 'BV_EXTRA_ANIM_STAB' + (39, 21) ERROR: No matching symbol 'MELEE_DMG' + (40, 21) ERROR: No matching symbol 'MELEE_ACCURACY' + (41, 4) ERROR: Illegal operation on 'string' + (42, 4) ERROR: Illegal operation on 'string' + (43, 4) ERROR: No matching symbol 'SetAttackProp' + (44, 4) ERROR: No matching symbol 'SetAttackProp' + (47, 8) ERROR: No matching symbol 'EXIT_SUB' + (48, 8) ERROR: No matching symbol 'L_SWIPE' + (50, 22) ERROR: No matching symbol 'BV_EXTRA_ANIM_SWIPE' + (51, 21) ERROR: No matching symbol 'MELEE_DMG' + (52, 21) ERROR: No matching symbol 'MELEE_ACCURACY' + (53, 4) ERROR: Illegal operation on 'string' + (54, 4) ERROR: Illegal operation on 'string' + (55, 4) ERROR: No matching symbol 'SetAttackProp' + (56, 4) ERROR: No matching symbol 'SetAttackProp' + (59, 8) ERROR: No matching symbol 'EXIT_SUB' + (60, 21) ERROR: No matching symbol 'BV_REGULAR_ATTACK_ANIM' + (61, 20) ERROR: No matching symbol 'MELEE_DMG' + (62, 20) ERROR: No matching symbol 'MELEE_ACCURACY' + (63, 3) ERROR: No matching symbol 'SetAttackProp' + (64, 3) ERROR: No matching symbol 'SetAttackProp' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_weapon.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\base_weapon_new.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_af.as + (81, 2) ERROR: Expected method or property + (81, 2) ERROR: Instead found reserved keyword 'void' + (104, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_base_onehanded.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_base_twohanded.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_bf.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_bt.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_calrianmace.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_club.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_darkmaul.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_db.as + (69, 2) ERROR: Expected method or property + (69, 2) ERROR: Instead found reserved keyword 'void' + (272, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_eb.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_fs.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_gauntlets.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_gauntlets_bear.as + (163, 2) ERROR: Expected method or property + (163, 2) ERROR: Instead found reserved keyword 'void' + (318, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_gauntlets_demon.as + (204, 2) ERROR: Expected method or property + (204, 2) ERROR: Instead found reserved keyword 'void' + (285, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_gauntlets_fe1.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_gauntlets_fe2.as + (103, 2) ERROR: Expected method or property + (103, 2) ERROR: Instead found reserved keyword 'void' + (137, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_gauntlets_fire.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_gauntlets_ic.as + (204, 2) ERROR: Expected method or property + (204, 2) ERROR: Instead found reserved keyword 'void' + (285, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_gauntlets_leather.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_gauntlets_serpant.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_granitemace.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_granitemaul.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_greatmaul.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_hammer1.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_hammer2.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_hammer3.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_hammer_dorfgan.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_lrod11.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_mace.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_maul.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_mithral.as + (69, 2) ERROR: Expected method or property + (69, 2) ERROR: Instead found reserved keyword 'void' + (272, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_ms1.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_ms2.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_ms3.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_northmaul972.as + (65, 2) ERROR: Expected method or property + (65, 2) ERROR: Instead found reserved keyword 'void' + (318, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_ravenmace.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_rudolfsmace.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_rustyhammer2.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_snake_staff.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_staff_a.as + (230, 2) ERROR: Expected method or property + (230, 2) ERROR: Instead found reserved keyword 'void' + (479, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_staff_a_charge_cl.as + (15, 2) INFO: Compiling void BluntStaffAChargeCl::client_activate() + (17, 3) ERROR: No matching symbol 'LogDebug' + (19, 18) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (20, 14) ERROR: No matching symbol 'param1' + (24, 3) ERROR: No matching symbol 'SetCallback' + (26, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (29, 2) INFO: Compiling void BluntStaffAChargeCl::add_charge_level() + (63, 45) ERROR: Expected expression value + (63, 45) ERROR: Instead found '' + (64, 45) ERROR: Expected expression value + (64, 45) ERROR: Instead found '' + (71, 40) ERROR: Expected expression value + (71, 40) ERROR: Instead found '' + (72, 42) ERROR: Expected expression value + (72, 42) ERROR: Instead found '' + (73, 40) ERROR: Expected expression value + (73, 40) ERROR: Instead found '' + (74, 35) ERROR: Expected expression value + (74, 35) ERROR: Instead found '' + (79, 2) INFO: Compiling void BluntStaffAChargeCl::end_fx() + (82, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (85, 2) INFO: Compiling void BluntStaffAChargeCl::remove_fx() + (87, 3) ERROR: No matching symbol 'RemoveScript' + (90, 2) INFO: Compiling void BluntStaffAChargeCl::game_prerender() + (101, 40) ERROR: Expected expression value + (101, 40) ERROR: Instead found '' + (104, 39) ERROR: Expected expression value + (104, 39) ERROR: Instead found '' + (108, 2) INFO: Compiling void BluntStaffAChargeCl::setup_thirdperson_flare() + (110, 3) ERROR: No matching symbol 'ClientEffect' + (111, 3) ERROR: No matching symbol 'ClientEffect' + (112, 3) ERROR: No matching symbol 'ClientEffect' + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (120, 2) INFO: Compiling void BluntStaffAChargeCl::setup_eye() + (122, 3) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'ClientEffect' + (124, 3) ERROR: No matching symbol 'ClientEffect' + (125, 3) ERROR: No matching symbol 'ClientEffect' + (126, 3) ERROR: No matching symbol 'ClientEffect' + (129, 2) INFO: Compiling void BluntStaffAChargeCl::setup_eye_max() + (131, 3) ERROR: No matching symbol 'ClientEffect' + (132, 3) ERROR: No matching symbol 'ClientEffect' + (133, 3) ERROR: No matching symbol 'ClientEffect' + (134, 3) ERROR: No matching symbol 'ClientEffect' + (135, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_staff_a_cl.as + (18, 2) INFO: Compiling void BluntStaffACl::client_activate() + (20, 14) ERROR: No matching symbol 'param1' + (21, 3) ERROR: No matching symbol 'SetCallback' + (26, 2) INFO: Compiling void BluntStaffACl::fx_loop() + (34, 43) ERROR: Expected expression value + (34, 43) ERROR: Instead found '' + (35, 41) ERROR: Expected expression value + (35, 41) ERROR: Instead found '' + (37, 47) ERROR: Expected expression value + (37, 47) ERROR: Instead found '' + (38, 36) ERROR: Expected expression value + (38, 36) ERROR: Instead found '' + (66, 42) ERROR: Expected expression value + (66, 42) ERROR: Instead found '' + (68, 46) ERROR: Expected expression value + (68, 46) ERROR: Instead found '' + (69, 35) ERROR: Expected expression value + (69, 35) ERROR: Instead found '' + (73, 2) INFO: Compiling void BluntStaffACl::end_fx() + (76, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (79, 2) INFO: Compiling void BluntStaffACl::remove_fx() + (81, 3) ERROR: No matching symbol 'RemoveScript' + (84, 2) INFO: Compiling void BluntStaffACl::game_prerender() + (89, 42) ERROR: Expected expression value + (89, 42) ERROR: Instead found '' + (90, 40) ERROR: Expected expression value + (90, 40) ERROR: Instead found '' + (92, 46) ERROR: Expected expression value + (92, 46) ERROR: Instead found '' + (93, 35) ERROR: Expected expression value + (93, 35) ERROR: Instead found '' + (99, 2) INFO: Compiling void BluntStaffACl::setup_flare() + (101, 3) ERROR: No matching symbol 'ClientEffect' + (102, 3) ERROR: No matching symbol 'ClientEffect' + (103, 3) ERROR: No matching symbol 'ClientEffect' + (104, 3) ERROR: No matching symbol 'ClientEffect' + (105, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_staff_f.as + (349, 2) ERROR: Expected method or property + (349, 2) ERROR: Instead found reserved keyword 'void' + (392, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_staff_f_old.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_staff_i.as + (211, 2) ERROR: Expected method or property + (211, 2) ERROR: Instead found reserved keyword 'void' + (508, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_staff_i_cl.as + (11, 2) INFO: Compiling void BluntStaffICl::client_activate() + (17, 39) ERROR: Expected expression value + (17, 39) ERROR: Instead found '' + (19, 48) ERROR: Expected expression value + (19, 48) ERROR: Instead found '' + (22, 2) INFO: Compiling void BluntStaffICl::end_fx() + (24, 7) ERROR: Illegal operation on this datatype + (26, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (29, 2) INFO: Compiling void BluntStaffICl::remove_fx() + (31, 3) ERROR: No matching symbol 'RemoveScript' + (34, 2) INFO: Compiling void BluntStaffICl::fx_loop() + (38, 39) ERROR: Expected expression value + (38, 39) ERROR: Instead found '' + (42, 48) ERROR: Expected expression value + (42, 48) ERROR: Instead found '' + (45, 2) INFO: Compiling void BluntStaffICl::update_ice_sprite() + (48, 3) ERROR: No matching symbol 'ClientEffect' + (51, 2) INFO: Compiling void BluntStaffICl::setup_ice_sprite() + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_test.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\blunt_warhammer.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_base.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_crossbow_heavy33.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_crossbow_light.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_firebird.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_frost.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_frost_cl.as + (22, 2) INFO: Compiling void BowsFrostCl::client_activate() + (24, 14) ERROR: No matching symbol 'param1' + (27, 13) ERROR: No matching symbol 'VOF_START' + (33, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (48, 2) INFO: Compiling void BowsFrostCl::remove_sprites() + (51, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (54, 2) INFO: Compiling void BowsFrostCl::remove_me() + (56, 3) ERROR: No matching symbol 'LogDebug' + (57, 3) ERROR: No matching symbol 'RemoveScript' + (60, 2) INFO: Compiling void BowsFrostCl::make_sprites() + (62, 42) ERROR: Expected expression value + (62, 42) ERROR: Instead found '' + (63, 37) ERROR: Expected expression value + (63, 37) ERROR: Instead found '' + (68, 2) INFO: Compiling void BowsFrostCl::update_sprite() + (75, 42) ERROR: Expected expression value + (75, 42) ERROR: Instead found '' + (79, 38) ERROR: Expected expression value + (79, 38) ERROR: Instead found '' + (93, 38) ERROR: Expected expression value + (93, 38) ERROR: Instead found '' + (104, 38) ERROR: Expected expression value + (104, 38) ERROR: Instead found '' + (109, 2) INFO: Compiling void BowsFrostCl::setup_sprite() + (111, 3) ERROR: No matching symbol 'ClientEffect' + (112, 3) ERROR: No matching symbol 'ClientEffect' + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_longbow.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_orcbow.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_orion1.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_orion1_cl.as + (16, 2) INFO: Compiling void BowsOrion1Cl::client_activate() + (19, 41) ERROR: Expected expression value + (19, 41) ERROR: Instead found '' + (21, 40) ERROR: Expected expression value + (21, 40) ERROR: Instead found '' + (22, 36) ERROR: Expected expression value + (22, 36) ERROR: Instead found '' + (27, 2) INFO: Compiling void BowsOrion1Cl::update_ball() + (31, 42) ERROR: Expected expression value + (31, 42) ERROR: Instead found '' + (33, 41) ERROR: Expected expression value + (33, 41) ERROR: Instead found '' + (34, 37) ERROR: Expected expression value + (34, 37) ERROR: Instead found '' + (50, 2) INFO: Compiling void BowsOrion1Cl::add_charge() + (52, 3) ERROR: No matching symbol 'ACT_SCALE' + (55, 2) INFO: Compiling void BowsOrion1Cl::charge_release() + (58, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (61, 2) INFO: Compiling void BowsOrion1Cl::remove_fx() + (63, 3) ERROR: No matching symbol 'RemoveScript' + (66, 2) INFO: Compiling void BowsOrion1Cl::setup_ball() + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_shortbow.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_swiftbow.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_sxbow.as + (153, 2) ERROR: Expected method or property + (153, 2) ERROR: Instead found reserved keyword 'void' + (309, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_telf1.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_telf2.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_telf3.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_telf4.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_thornbow.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\bows_treebow.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\brokenkey_1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\brokenkey_2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\brokenkey_3.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_barnum.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_bou.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_cloak_blue.as + (162, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_crew.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_crow.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_cwog.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_darktide.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_deralia.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_fellowship.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_fmu.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_forestcroth.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_gag.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_gow.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_hod.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_hov.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_justice.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_neko.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_noclicky.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_pathos.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_pirates.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_revenge.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_rip100.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_socialist.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_sor.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_tdk.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_tfl.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_torkalath.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_torkie.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_valor.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_wario.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_wildfire.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_wotn.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_w_1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_w_2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crest_yoku.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crossbow_heavy.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\crossbow_light.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\afflicter.as + (23, 2) INFO: Compiling void Afflicter::try_applyeffect() + (25, 3) ERROR: No matching symbol 'find_beam_target' + (26, 23) ERROR: No matching symbol 'BEAM_TARGET' + (30, 3) ERROR: No matching symbol 'ApplyEffect' + (33, 2) INFO: Compiling void Afflicter::set_affliction() + (35, 7) ERROR: No matching symbol 'param1' + (42, 8) ERROR: No matching symbol 'param1' + (49, 9) ERROR: No matching symbol 'param1' + (56, 10) ERROR: No matching symbol 'param1' + (63, 11) ERROR: No matching symbol 'param1' + (70, 12) ERROR: No matching symbol 'param1' + (80, 22) ERROR: No matching symbol 'param2' + (81, 17) ERROR: No matching symbol 'param3' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\ammo.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\archery.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\armor.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\arrows.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\axes.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\bluntarms.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\magic.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\martialarts.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\packs.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\polearms.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\potions.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\quest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\rings.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\smallarms.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\chests\swords.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\copypaste.as + (26, 2) INFO: Compiling void Copypaste::copy_target() + (28, 3) ERROR: No matching symbol 'find_beam_target' + (29, 7) ERROR: No matching symbol 'BEAM_TARGET' + (33, 22) ERROR: No matching symbol 'BEAM_TARGET' + (37, 8) ERROR: No matching symbol 'L_NOTARG' + (41, 5) ERROR: No matching symbol 'SendColoredMessage' + (46, 19) ERROR: No matching symbol 'GetScriptName' + (47, 20) ERROR: No matching symbol 'GetEntityProperty' + (48, 24) ERROR: No matching symbol 'GetEntityProperty' + (49, 23) ERROR: No matching symbol 'GetEntityProperty' + (50, 25) ERROR: No matching symbol 'GetEntityProperty' + (51, 50) ERROR: No matching symbol 'GetEntityWidth' + (52, 3) ERROR: No matching symbol 'SendColoredMessage' + (55, 2) INFO: Compiling void Copypaste::paste_target() + (60, 38) ERROR: Expected expression value + (60, 38) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\damager.as + (15, 2) INFO: Compiling void Damager::try_damage() + (17, 3) ERROR: No matching symbol 'find_beam_target' + (18, 3) ERROR: No matching symbol 'XDoDamage' + (21, 2) INFO: Compiling void Damager::set_damager() + (23, 17) ERROR: No matching symbol 'param1' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\effects\loreldian_soup.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found identifier 'string' + (9, 10) ERROR: Expected '(' + (9, 10) ERROR: Instead found '.' + (11, 15) ERROR: Expected identifier + (11, 15) ERROR: Instead found '(' + (40, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\menus\beams.as + (13, 2) INFO: Compiling void Beams::menu_listbeams() + (15, 10) ERROR: Expected ';' + (15, 10) ERROR: Instead found identifier 'reg' + (16, 10) ERROR: Expected ';' + (16, 10) ERROR: Instead found identifier 'reg' + (17, 10) ERROR: Expected ';' + (17, 10) ERROR: Instead found identifier 'reg' + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (19, 10) ERROR: Expected ';' + (19, 10) ERROR: Instead found identifier 'reg' + (20, 7) ERROR: Expected '(' + (20, 7) ERROR: Instead found identifier 'reg' + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (24, 7) ERROR: Expected '(' + (24, 7) ERROR: Instead found identifier 'reg' + (25, 10) ERROR: Expected ';' + (25, 10) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (27, 10) ERROR: Expected ';' + (27, 10) ERROR: Instead found identifier 'reg' + (28, 7) ERROR: Expected '(' + (28, 7) ERROR: Instead found identifier 'reg' + (29, 10) ERROR: Expected ';' + (29, 10) ERROR: Instead found identifier 'reg' + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'reg' + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 7) ERROR: Expected '(' + (32, 7) ERROR: Instead found identifier 'reg' + (35, 2) INFO: Compiling void Beams::set_beam_type() + (37, 60) ERROR: Expected expression value + (37, 60) ERROR: Instead found '' + (53, 2) INFO: Compiling void Beams::menu_listafflicttype() + (55, 10) ERROR: Expected ';' + (55, 10) ERROR: Instead found identifier 'reg' + (56, 10) ERROR: Expected ';' + (56, 10) ERROR: Instead found identifier 'reg' + (57, 10) ERROR: Expected ';' + (57, 10) ERROR: Instead found identifier 'reg' + (58, 10) ERROR: Expected ';' + (58, 10) ERROR: Instead found identifier 'reg' + (59, 10) ERROR: Expected ';' + (59, 10) ERROR: Instead found identifier 'reg' + (60, 10) ERROR: Expected ';' + (60, 10) ERROR: Instead found identifier 'reg' + (61, 10) ERROR: Expected ';' + (61, 10) ERROR: Instead found identifier 'reg' + (62, 10) ERROR: Expected ';' + (62, 10) ERROR: Instead found identifier 'reg' + (63, 10) ERROR: Expected ';' + (63, 10) ERROR: Instead found identifier 'reg' + (64, 10) ERROR: Expected ';' + (64, 10) ERROR: Instead found identifier 'reg' + (65, 10) ERROR: Expected ';' + (65, 10) ERROR: Instead found identifier 'reg' + (66, 10) ERROR: Expected ';' + (66, 10) ERROR: Instead found identifier 'reg' + (67, 10) ERROR: Expected ';' + (67, 10) ERROR: Instead found identifier 'reg' + (68, 10) ERROR: Expected ';' + (68, 10) ERROR: Instead found identifier 'reg' + (69, 10) ERROR: Expected ';' + (69, 10) ERROR: Instead found identifier 'reg' + (70, 10) ERROR: Expected ';' + (70, 10) ERROR: Instead found identifier 'reg' + (71, 10) ERROR: Expected ';' + (71, 10) ERROR: Instead found identifier 'reg' + (72, 10) ERROR: Expected ';' + (72, 10) ERROR: Instead found identifier 'reg' + (73, 10) ERROR: Expected ';' + (73, 10) ERROR: Instead found identifier 'reg' + (74, 10) ERROR: Expected ';' + (74, 10) ERROR: Instead found identifier 'reg' + (75, 10) ERROR: Expected ';' + (75, 10) ERROR: Instead found identifier 'reg' + (76, 10) ERROR: Expected ';' + (76, 10) ERROR: Instead found identifier 'reg' + (77, 10) ERROR: Expected ';' + (77, 10) ERROR: Instead found identifier 'reg' + (78, 10) ERROR: Expected ';' + (78, 10) ERROR: Instead found identifier 'reg' + (79, 10) ERROR: Expected ';' + (79, 10) ERROR: Instead found identifier 'reg' + (80, 10) ERROR: Expected ';' + (80, 10) ERROR: Instead found identifier 'reg' + (83, 2) INFO: Compiling void Beams::menu_listafflictduration() + (85, 10) ERROR: Expected ';' + (85, 10) ERROR: Instead found identifier 'reg' + (86, 10) ERROR: Expected ';' + (86, 10) ERROR: Instead found identifier 'reg' + (87, 10) ERROR: Expected ';' + (87, 10) ERROR: Instead found identifier 'reg' + (88, 10) ERROR: Expected ';' + (88, 10) ERROR: Instead found identifier 'reg' + (89, 10) ERROR: Expected ';' + (89, 10) ERROR: Instead found identifier 'reg' + (90, 10) ERROR: Expected ';' + (90, 10) ERROR: Instead found identifier 'reg' + (91, 10) ERROR: Expected ';' + (91, 10) ERROR: Instead found identifier 'reg' + (92, 10) ERROR: Expected ';' + (92, 10) ERROR: Instead found identifier 'reg' + (93, 10) ERROR: Expected ';' + (93, 10) ERROR: Instead found identifier 'reg' + (94, 10) ERROR: Expected ';' + (94, 10) ERROR: Instead found identifier 'reg' + (95, 10) ERROR: Expected ';' + (95, 10) ERROR: Instead found identifier 'reg' + (96, 10) ERROR: Expected ';' + (96, 10) ERROR: Instead found identifier 'reg' + (97, 10) ERROR: Expected ';' + (97, 10) ERROR: Instead found identifier 'reg' + (98, 10) ERROR: Expected ';' + (98, 10) ERROR: Instead found identifier 'reg' + (99, 10) ERROR: Expected ';' + (99, 10) ERROR: Instead found identifier 'reg' + (100, 10) ERROR: Expected ';' + (100, 10) ERROR: Instead found identifier 'reg' + (101, 10) ERROR: Expected ';' + (101, 10) ERROR: Instead found identifier 'reg' + (102, 10) ERROR: Expected ';' + (102, 10) ERROR: Instead found identifier 'reg' + (105, 2) INFO: Compiling void Beams::menu_listafflictdmg() + (107, 10) ERROR: Expected ';' + (107, 10) ERROR: Instead found identifier 'reg' + (108, 10) ERROR: Expected ';' + (108, 10) ERROR: Instead found identifier 'reg' + (109, 10) ERROR: Expected ';' + (109, 10) ERROR: Instead found identifier 'reg' + (110, 10) ERROR: Expected ';' + (110, 10) ERROR: Instead found identifier 'reg' + (111, 10) ERROR: Expected ';' + (111, 10) ERROR: Instead found identifier 'reg' + (112, 10) ERROR: Expected ';' + (112, 10) ERROR: Instead found identifier 'reg' + (113, 10) ERROR: Expected ';' + (113, 10) ERROR: Instead found identifier 'reg' + (114, 10) ERROR: Expected ';' + (114, 10) ERROR: Instead found identifier 'reg' + (115, 10) ERROR: Expected ';' + (115, 10) ERROR: Instead found identifier 'reg' + (116, 10) ERROR: Expected ';' + (116, 10) ERROR: Instead found identifier 'reg' + (117, 10) ERROR: Expected ';' + (117, 10) ERROR: Instead found identifier 'reg' + (118, 10) ERROR: Expected ';' + (118, 10) ERROR: Instead found identifier 'reg' + (119, 10) ERROR: Expected ';' + (119, 10) ERROR: Instead found identifier 'reg' + (120, 10) ERROR: Expected ';' + (120, 10) ERROR: Instead found identifier 'reg' + (121, 10) ERROR: Expected ';' + (121, 10) ERROR: Instead found identifier 'reg' + (122, 10) ERROR: Expected ';' + (122, 10) ERROR: Instead found identifier 'reg' + (123, 10) ERROR: Expected ';' + (123, 10) ERROR: Instead found identifier 'reg' + (124, 10) ERROR: Expected ';' + (124, 10) ERROR: Instead found identifier 'reg' + (125, 10) ERROR: Expected ';' + (125, 10) ERROR: Instead found identifier 'reg' + (126, 10) ERROR: Expected ';' + (126, 10) ERROR: Instead found identifier 'reg' + (127, 10) ERROR: Expected ';' + (127, 10) ERROR: Instead found identifier 'reg' + (128, 10) ERROR: Expected ';' + (128, 10) ERROR: Instead found identifier 'reg' + (129, 10) ERROR: Expected ';' + (129, 10) ERROR: Instead found identifier 'reg' + (130, 10) ERROR: Expected ';' + (130, 10) ERROR: Instead found identifier 'reg' + (131, 10) ERROR: Expected ';' + (131, 10) ERROR: Instead found identifier 'reg' + (132, 10) ERROR: Expected ';' + (132, 10) ERROR: Instead found identifier 'reg' + (133, 10) ERROR: Expected ';' + (133, 10) ERROR: Instead found identifier 'reg' + (134, 10) ERROR: Expected ';' + (134, 10) ERROR: Instead found identifier 'reg' + (135, 10) ERROR: Expected ';' + (135, 10) ERROR: Instead found identifier 'reg' + (136, 10) ERROR: Expected ';' + (136, 10) ERROR: Instead found identifier 'reg' + (139, 2) INFO: Compiling void Beams::menu_damager_setdmg() + (141, 10) ERROR: Expected ';' + (141, 10) ERROR: Instead found identifier 'reg' + (142, 10) ERROR: Expected ';' + (142, 10) ERROR: Instead found identifier 'reg' + (143, 10) ERROR: Expected ';' + (143, 10) ERROR: Instead found identifier 'reg' + (144, 10) ERROR: Expected ';' + (144, 10) ERROR: Instead found identifier 'reg' + (145, 10) ERROR: Expected ';' + (145, 10) ERROR: Instead found identifier 'reg' + (146, 10) ERROR: Expected ';' + (146, 10) ERROR: Instead found identifier 'reg' + (147, 10) ERROR: Expected ';' + (147, 10) ERROR: Instead found identifier 'reg' + (148, 10) ERROR: Expected ';' + (148, 10) ERROR: Instead found identifier 'reg' + (149, 10) ERROR: Expected ';' + (149, 10) ERROR: Instead found identifier 'reg' + (150, 10) ERROR: Expected ';' + (150, 10) ERROR: Instead found identifier 'reg' + (151, 10) ERROR: Expected ';' + (151, 10) ERROR: Instead found identifier 'reg' + (152, 10) ERROR: Expected ';' + (152, 10) ERROR: Instead found identifier 'reg' + (153, 10) ERROR: Expected ';' + (153, 10) ERROR: Instead found identifier 'reg' + (154, 10) ERROR: Expected ';' + (154, 10) ERROR: Instead found identifier 'reg' + (155, 10) ERROR: Expected ';' + (155, 10) ERROR: Instead found identifier 'reg' + (156, 10) ERROR: Expected ';' + (156, 10) ERROR: Instead found identifier 'reg' + (157, 10) ERROR: Expected ';' + (157, 10) ERROR: Instead found identifier 'reg' + (158, 10) ERROR: Expected ';' + (158, 10) ERROR: Instead found identifier 'reg' + (159, 10) ERROR: Expected ';' + (159, 10) ERROR: Instead found identifier 'reg' + (160, 10) ERROR: Expected ';' + (160, 10) ERROR: Instead found identifier 'reg' + (161, 10) ERROR: Expected ';' + (161, 10) ERROR: Instead found identifier 'reg' + (162, 10) ERROR: Expected ';' + (162, 10) ERROR: Instead found identifier 'reg' + (163, 10) ERROR: Expected ';' + (163, 10) ERROR: Instead found identifier 'reg' + (164, 10) ERROR: Expected ';' + (164, 10) ERROR: Instead found identifier 'reg' + (165, 10) ERROR: Expected ';' + (165, 10) ERROR: Instead found identifier 'reg' + (166, 10) ERROR: Expected ';' + (166, 10) ERROR: Instead found identifier 'reg' + (167, 10) ERROR: Expected ';' + (167, 10) ERROR: Instead found identifier 'reg' + (168, 10) ERROR: Expected ';' + (168, 10) ERROR: Instead found identifier 'reg' + (169, 10) ERROR: Expected ';' + (169, 10) ERROR: Instead found identifier 'reg' + (170, 10) ERROR: Expected ';' + (170, 10) ERROR: Instead found identifier 'reg' + (173, 2) INFO: Compiling void Beams::set_afflict_type() + (175, 11) ERROR: No matching symbol 'param2' + (177, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (180, 2) INFO: Compiling void Beams::set_afflict_duration() + (182, 11) ERROR: No matching symbol 'param2' + (184, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (187, 2) INFO: Compiling void Beams::set_afflict_dmg() + (189, 11) ERROR: No matching symbol 'param2' + (190, 3) ERROR: No matching symbol 'CallExternal' + (193, 2) INFO: Compiling void Beams::set_damager() + (195, 58) ERROR: Expected expression value + (195, 58) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\menus\main.as + (24, 2) INFO: Compiling void Main::OnSpawn() + (26, 3) ERROR: No matching symbol 'SetName' + (27, 3) ERROR: No matching symbol 'SetModel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetInvincible' + (32, 2) INFO: Compiling void Main::game_dynamically_created() + (34, 14) ERROR: No matching symbol 'param1' + (35, 13) ERROR: No matching symbol 'param2' + (38, 2) INFO: Compiling void Main::game_menu_getoptions() + (40, 9) ERROR: No matching symbol 'param1' + (47, 4) ERROR: No matching symbol 'menu_listbeams' + (51, 4) ERROR: No matching symbol 'menu_listafflicttype' + (55, 4) ERROR: No matching symbol 'menu_listafflictduration' + (59, 4) ERROR: No matching symbol 'menu_listafflictdmg' + (63, 4) ERROR: No matching symbol 'menu_playerlist' + (67, 4) ERROR: No matching symbol 'menu_playerlevels' + (71, 4) ERROR: No matching symbol 'menu_addgold' + (75, 4) ERROR: No matching symbol 'menu_treasure' + (79, 4) ERROR: No matching symbol 'menu_treasure_weapons' + (83, 4) ERROR: No matching symbol 'menu_trigger' + (87, 4) ERROR: No matching symbol 'menu_trigger_successful' + (91, 4) ERROR: No matching symbol 'menu_waypoint_save' + (95, 4) ERROR: No matching symbol 'menu_waypoint_load' + (99, 4) ERROR: No matching symbol 'menu_damager_setdmg' + (103, 4) ERROR: No matching symbol 'menu_tele_mode' + (107, 4) ERROR: No matching symbol 'menu_tele_player' + (111, 4) ERROR: No matching symbol 'menu_choose_waypoints' + (115, 2) INFO: Compiling void Main::menu_main() + (117, 10) ERROR: Expected ';' + (117, 10) ERROR: Instead found identifier 'reg' + (118, 10) ERROR: Expected ';' + (118, 10) ERROR: Instead found identifier 'reg' + (119, 10) ERROR: Expected ';' + (119, 10) ERROR: Instead found identifier 'reg' + (120, 10) ERROR: Expected ';' + (120, 10) ERROR: Instead found identifier 'reg' + (121, 10) ERROR: Expected ';' + (121, 10) ERROR: Instead found identifier 'reg' + (122, 10) ERROR: Expected ';' + (122, 10) ERROR: Instead found identifier 'reg' + (123, 7) ERROR: Expected '(' + (123, 7) ERROR: Instead found identifier 'reg' + (124, 10) ERROR: Expected ';' + (124, 10) ERROR: Instead found identifier 'reg' + (125, 10) ERROR: Expected ';' + (125, 10) ERROR: Instead found identifier 'reg' + (126, 10) ERROR: Expected ';' + (126, 10) ERROR: Instead found identifier 'reg' + (127, 7) ERROR: Expected '(' + (127, 7) ERROR: Instead found identifier 'reg' + (128, 10) ERROR: Expected ';' + (128, 10) ERROR: Instead found identifier 'reg' + (129, 10) ERROR: Expected ';' + (129, 10) ERROR: Instead found identifier 'reg' + (130, 10) ERROR: Expected ';' + (130, 10) ERROR: Instead found identifier 'reg' + (131, 7) ERROR: Expected '(' + (131, 7) ERROR: Instead found identifier 'reg' + (132, 10) ERROR: Expected ';' + (132, 10) ERROR: Instead found identifier 'reg' + (133, 10) ERROR: Expected ';' + (133, 10) ERROR: Instead found identifier 'reg' + (134, 10) ERROR: Expected ';' + (134, 10) ERROR: Instead found identifier 'reg' + (135, 7) ERROR: Expected '(' + (135, 7) ERROR: Instead found identifier 'reg' + (136, 10) ERROR: Expected ';' + (136, 10) ERROR: Instead found identifier 'reg' + (137, 10) ERROR: Expected ';' + (137, 10) ERROR: Instead found identifier 'reg' + (138, 10) ERROR: Expected ';' + (138, 10) ERROR: Instead found identifier 'reg' + (139, 7) ERROR: Expected '(' + (139, 7) ERROR: Instead found identifier 'reg' + (140, 10) ERROR: Expected ';' + (140, 10) ERROR: Instead found identifier 'reg' + (141, 10) ERROR: Expected ';' + (141, 10) ERROR: Instead found identifier 'reg' + (142, 10) ERROR: Expected ';' + (142, 10) ERROR: Instead found identifier 'reg' + (143, 7) ERROR: Expected '(' + (143, 7) ERROR: Instead found identifier 'reg' + (146, 2) INFO: Compiling void Main::set_menu_type() + (148, 15) ERROR: No matching symbol 'param2' + (149, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (152, 2) INFO: Compiling void Main::ext_menu_open() + (154, 3) ERROR: No matching symbol 'OpenMenu' + (157, 2) INFO: Compiling void Main::ext_menu_main() + (160, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (163, 2) INFO: Compiling void Main::spawn_galats() + (168, 36) ERROR: Expected expression value + (168, 36) ERROR: Instead found '' + (13, 2) INFO: Compiling void Beams::menu_listbeams() + (15, 10) ERROR: Expected ';' + (15, 10) ERROR: Instead found identifier 'reg' + (16, 10) ERROR: Expected ';' + (16, 10) ERROR: Instead found identifier 'reg' + (17, 10) ERROR: Expected ';' + (17, 10) ERROR: Instead found identifier 'reg' + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (19, 10) ERROR: Expected ';' + (19, 10) ERROR: Instead found identifier 'reg' + (20, 7) ERROR: Expected '(' + (20, 7) ERROR: Instead found identifier 'reg' + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (24, 7) ERROR: Expected '(' + (24, 7) ERROR: Instead found identifier 'reg' + (25, 10) ERROR: Expected ';' + (25, 10) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (27, 10) ERROR: Expected ';' + (27, 10) ERROR: Instead found identifier 'reg' + (28, 7) ERROR: Expected '(' + (28, 7) ERROR: Instead found identifier 'reg' + (29, 10) ERROR: Expected ';' + (29, 10) ERROR: Instead found identifier 'reg' + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'reg' + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 7) ERROR: Expected '(' + (32, 7) ERROR: Instead found identifier 'reg' + (35, 2) INFO: Compiling void Beams::set_beam_type() + (37, 60) ERROR: Expected expression value + (37, 60) ERROR: Instead found '' + (53, 2) INFO: Compiling void Beams::menu_listafflicttype() + (55, 10) ERROR: Expected ';' + (55, 10) ERROR: Instead found identifier 'reg' + (56, 10) ERROR: Expected ';' + (56, 10) ERROR: Instead found identifier 'reg' + (57, 10) ERROR: Expected ';' + (57, 10) ERROR: Instead found identifier 'reg' + (58, 10) ERROR: Expected ';' + (58, 10) ERROR: Instead found identifier 'reg' + (59, 10) ERROR: Expected ';' + (59, 10) ERROR: Instead found identifier 'reg' + (60, 10) ERROR: Expected ';' + (60, 10) ERROR: Instead found identifier 'reg' + (61, 10) ERROR: Expected ';' + (61, 10) ERROR: Instead found identifier 'reg' + (62, 10) ERROR: Expected ';' + (62, 10) ERROR: Instead found identifier 'reg' + (63, 10) ERROR: Expected ';' + (63, 10) ERROR: Instead found identifier 'reg' + (64, 10) ERROR: Expected ';' + (64, 10) ERROR: Instead found identifier 'reg' + (65, 10) ERROR: Expected ';' + (65, 10) ERROR: Instead found identifier 'reg' + (66, 10) ERROR: Expected ';' + (66, 10) ERROR: Instead found identifier 'reg' + (67, 10) ERROR: Expected ';' + (67, 10) ERROR: Instead found identifier 'reg' + (68, 10) ERROR: Expected ';' + (68, 10) ERROR: Instead found identifier 'reg' + (69, 10) ERROR: Expected ';' + (69, 10) ERROR: Instead found identifier 'reg' + (70, 10) ERROR: Expected ';' + (70, 10) ERROR: Instead found identifier 'reg' + (71, 10) ERROR: Expected ';' + (71, 10) ERROR: Instead found identifier 'reg' + (72, 10) ERROR: Expected ';' + (72, 10) ERROR: Instead found identifier 'reg' + (73, 10) ERROR: Expected ';' + (73, 10) ERROR: Instead found identifier 'reg' + (74, 10) ERROR: Expected ';' + (74, 10) ERROR: Instead found identifier 'reg' + (75, 10) ERROR: Expected ';' + (75, 10) ERROR: Instead found identifier 'reg' + (76, 10) ERROR: Expected ';' + (76, 10) ERROR: Instead found identifier 'reg' + (77, 10) ERROR: Expected ';' + (77, 10) ERROR: Instead found identifier 'reg' + (78, 10) ERROR: Expected ';' + (78, 10) ERROR: Instead found identifier 'reg' + (79, 10) ERROR: Expected ';' + (79, 10) ERROR: Instead found identifier 'reg' + (80, 10) ERROR: Expected ';' + (80, 10) ERROR: Instead found identifier 'reg' + (83, 2) INFO: Compiling void Beams::menu_listafflictduration() + (85, 10) ERROR: Expected ';' + (85, 10) ERROR: Instead found identifier 'reg' + (86, 10) ERROR: Expected ';' + (86, 10) ERROR: Instead found identifier 'reg' + (87, 10) ERROR: Expected ';' + (87, 10) ERROR: Instead found identifier 'reg' + (88, 10) ERROR: Expected ';' + (88, 10) ERROR: Instead found identifier 'reg' + (89, 10) ERROR: Expected ';' + (89, 10) ERROR: Instead found identifier 'reg' + (90, 10) ERROR: Expected ';' + (90, 10) ERROR: Instead found identifier 'reg' + (91, 10) ERROR: Expected ';' + (91, 10) ERROR: Instead found identifier 'reg' + (92, 10) ERROR: Expected ';' + (92, 10) ERROR: Instead found identifier 'reg' + (93, 10) ERROR: Expected ';' + (93, 10) ERROR: Instead found identifier 'reg' + (94, 10) ERROR: Expected ';' + (94, 10) ERROR: Instead found identifier 'reg' + (95, 10) ERROR: Expected ';' + (95, 10) ERROR: Instead found identifier 'reg' + (96, 10) ERROR: Expected ';' + (96, 10) ERROR: Instead found identifier 'reg' + (97, 10) ERROR: Expected ';' + (97, 10) ERROR: Instead found identifier 'reg' + (98, 10) ERROR: Expected ';' + (98, 10) ERROR: Instead found identifier 'reg' + (99, 10) ERROR: Expected ';' + (99, 10) ERROR: Instead found identifier 'reg' + (100, 10) ERROR: Expected ';' + (100, 10) ERROR: Instead found identifier 'reg' + (101, 10) ERROR: Expected ';' + (101, 10) ERROR: Instead found identifier 'reg' + (102, 10) ERROR: Expected ';' + (102, 10) ERROR: Instead found identifier 'reg' + (105, 2) INFO: Compiling void Beams::menu_listafflictdmg() + (107, 10) ERROR: Expected ';' + (107, 10) ERROR: Instead found identifier 'reg' + (108, 10) ERROR: Expected ';' + (108, 10) ERROR: Instead found identifier 'reg' + (109, 10) ERROR: Expected ';' + (109, 10) ERROR: Instead found identifier 'reg' + (110, 10) ERROR: Expected ';' + (110, 10) ERROR: Instead found identifier 'reg' + (111, 10) ERROR: Expected ';' + (111, 10) ERROR: Instead found identifier 'reg' + (112, 10) ERROR: Expected ';' + (112, 10) ERROR: Instead found identifier 'reg' + (113, 10) ERROR: Expected ';' + (113, 10) ERROR: Instead found identifier 'reg' + (114, 10) ERROR: Expected ';' + (114, 10) ERROR: Instead found identifier 'reg' + (115, 10) ERROR: Expected ';' + (115, 10) ERROR: Instead found identifier 'reg' + (116, 10) ERROR: Expected ';' + (116, 10) ERROR: Instead found identifier 'reg' + (117, 10) ERROR: Expected ';' + (117, 10) ERROR: Instead found identifier 'reg' + (118, 10) ERROR: Expected ';' + (118, 10) ERROR: Instead found identifier 'reg' + (119, 10) ERROR: Expected ';' + (119, 10) ERROR: Instead found identifier 'reg' + (120, 10) ERROR: Expected ';' + (120, 10) ERROR: Instead found identifier 'reg' + (121, 10) ERROR: Expected ';' + (121, 10) ERROR: Instead found identifier 'reg' + (122, 10) ERROR: Expected ';' + (122, 10) ERROR: Instead found identifier 'reg' + (123, 10) ERROR: Expected ';' + (123, 10) ERROR: Instead found identifier 'reg' + (124, 10) ERROR: Expected ';' + (124, 10) ERROR: Instead found identifier 'reg' + (125, 10) ERROR: Expected ';' + (125, 10) ERROR: Instead found identifier 'reg' + (126, 10) ERROR: Expected ';' + (126, 10) ERROR: Instead found identifier 'reg' + (127, 10) ERROR: Expected ';' + (127, 10) ERROR: Instead found identifier 'reg' + (128, 10) ERROR: Expected ';' + (128, 10) ERROR: Instead found identifier 'reg' + (129, 10) ERROR: Expected ';' + (129, 10) ERROR: Instead found identifier 'reg' + (130, 10) ERROR: Expected ';' + (130, 10) ERROR: Instead found identifier 'reg' + (131, 10) ERROR: Expected ';' + (131, 10) ERROR: Instead found identifier 'reg' + (132, 10) ERROR: Expected ';' + (132, 10) ERROR: Instead found identifier 'reg' + (133, 10) ERROR: Expected ';' + (133, 10) ERROR: Instead found identifier 'reg' + (134, 10) ERROR: Expected ';' + (134, 10) ERROR: Instead found identifier 'reg' + (135, 10) ERROR: Expected ';' + (135, 10) ERROR: Instead found identifier 'reg' + (136, 10) ERROR: Expected ';' + (136, 10) ERROR: Instead found identifier 'reg' + (139, 2) INFO: Compiling void Beams::menu_damager_setdmg() + (141, 10) ERROR: Expected ';' + (141, 10) ERROR: Instead found identifier 'reg' + (142, 10) ERROR: Expected ';' + (142, 10) ERROR: Instead found identifier 'reg' + (143, 10) ERROR: Expected ';' + (143, 10) ERROR: Instead found identifier 'reg' + (144, 10) ERROR: Expected ';' + (144, 10) ERROR: Instead found identifier 'reg' + (145, 10) ERROR: Expected ';' + (145, 10) ERROR: Instead found identifier 'reg' + (146, 10) ERROR: Expected ';' + (146, 10) ERROR: Instead found identifier 'reg' + (147, 10) ERROR: Expected ';' + (147, 10) ERROR: Instead found identifier 'reg' + (148, 10) ERROR: Expected ';' + (148, 10) ERROR: Instead found identifier 'reg' + (149, 10) ERROR: Expected ';' + (149, 10) ERROR: Instead found identifier 'reg' + (150, 10) ERROR: Expected ';' + (150, 10) ERROR: Instead found identifier 'reg' + (151, 10) ERROR: Expected ';' + (151, 10) ERROR: Instead found identifier 'reg' + (152, 10) ERROR: Expected ';' + (152, 10) ERROR: Instead found identifier 'reg' + (153, 10) ERROR: Expected ';' + (153, 10) ERROR: Instead found identifier 'reg' + (154, 10) ERROR: Expected ';' + (154, 10) ERROR: Instead found identifier 'reg' + (155, 10) ERROR: Expected ';' + (155, 10) ERROR: Instead found identifier 'reg' + (156, 10) ERROR: Expected ';' + (156, 10) ERROR: Instead found identifier 'reg' + (157, 10) ERROR: Expected ';' + (157, 10) ERROR: Instead found identifier 'reg' + (158, 10) ERROR: Expected ';' + (158, 10) ERROR: Instead found identifier 'reg' + (159, 10) ERROR: Expected ';' + (159, 10) ERROR: Instead found identifier 'reg' + (160, 10) ERROR: Expected ';' + (160, 10) ERROR: Instead found identifier 'reg' + (161, 10) ERROR: Expected ';' + (161, 10) ERROR: Instead found identifier 'reg' + (162, 10) ERROR: Expected ';' + (162, 10) ERROR: Instead found identifier 'reg' + (163, 10) ERROR: Expected ';' + (163, 10) ERROR: Instead found identifier 'reg' + (164, 10) ERROR: Expected ';' + (164, 10) ERROR: Instead found identifier 'reg' + (165, 10) ERROR: Expected ';' + (165, 10) ERROR: Instead found identifier 'reg' + (166, 10) ERROR: Expected ';' + (166, 10) ERROR: Instead found identifier 'reg' + (167, 10) ERROR: Expected ';' + (167, 10) ERROR: Instead found identifier 'reg' + (168, 10) ERROR: Expected ';' + (168, 10) ERROR: Instead found identifier 'reg' + (169, 10) ERROR: Expected ';' + (169, 10) ERROR: Instead found identifier 'reg' + (170, 10) ERROR: Expected ';' + (170, 10) ERROR: Instead found identifier 'reg' + (173, 2) INFO: Compiling void Beams::set_afflict_type() + (175, 11) ERROR: No matching symbol 'param2' + (177, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (180, 2) INFO: Compiling void Beams::set_afflict_duration() + (182, 11) ERROR: No matching symbol 'param2' + (184, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (187, 2) INFO: Compiling void Beams::set_afflict_dmg() + (189, 11) ERROR: No matching symbol 'param2' + (190, 3) ERROR: No matching symbol 'CallExternal' + (193, 2) INFO: Compiling void Beams::set_damager() + (195, 58) ERROR: Expected expression value + (195, 58) ERROR: Instead found '' + (8, 2) INFO: Compiling void Player::menu_playerlist() + (10, 10) ERROR: Expected ';' + (10, 10) ERROR: Instead found identifier 'reg' + (11, 10) ERROR: Expected ';' + (11, 10) ERROR: Instead found identifier 'reg' + (12, 10) ERROR: Expected ';' + (12, 10) ERROR: Instead found identifier 'reg' + (13, 10) ERROR: Expected ';' + (13, 10) ERROR: Instead found identifier 'reg' + (14, 10) ERROR: Expected ';' + (14, 10) ERROR: Instead found identifier 'reg' + (15, 10) ERROR: Expected ';' + (15, 10) ERROR: Instead found identifier 'reg' + (16, 10) ERROR: Expected ';' + (16, 10) ERROR: Instead found identifier 'reg' + (17, 10) ERROR: Expected ';' + (17, 10) ERROR: Instead found identifier 'reg' + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (19, 7) ERROR: Expected '(' + (19, 7) ERROR: Instead found identifier 'reg' + (20, 10) ERROR: Expected ';' + (20, 10) ERROR: Instead found identifier 'reg' + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 7) ERROR: Expected '(' + (23, 7) ERROR: Instead found identifier 'reg' + (24, 10) ERROR: Expected ';' + (24, 10) ERROR: Instead found identifier 'reg' + (25, 10) ERROR: Expected ';' + (25, 10) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (29, 2) INFO: Compiling void Player::toggle_soup() + (31, 8) ERROR: No matching symbol 'GetEntityProperty' + (33, 4) ERROR: No matching symbol 'SendColoredMessage' + (34, 4) ERROR: No matching symbol 'CallExternal' + (38, 4) ERROR: No matching symbol 'SendColoredMessage' + (39, 4) ERROR: No matching symbol 'ApplyEffect' + (43, 2) INFO: Compiling void Player::toggle_notarget() + (45, 8) ERROR: No matching symbol 'GetEntityProperty' + (47, 4) ERROR: No matching symbol 'SendColoredMessage' + (48, 4) ERROR: No matching symbol 'CallExternal' + (52, 4) ERROR: No matching symbol 'SendColoredMessage' + (53, 4) ERROR: No matching symbol 'CallExternal' + (57, 2) INFO: Compiling void Player::menu_playerlevels() + (59, 10) ERROR: Expected ';' + (59, 10) ERROR: Instead found identifier 'reg' + (60, 10) ERROR: Expected ';' + (60, 10) ERROR: Instead found identifier 'reg' + (61, 10) ERROR: Expected ';' + (61, 10) ERROR: Instead found identifier 'reg' + (62, 7) ERROR: Expected '(' + (62, 7) ERROR: Instead found identifier 'reg' + (63, 10) ERROR: Expected ';' + (63, 10) ERROR: Instead found identifier 'reg' + (64, 10) ERROR: Expected ';' + (64, 10) ERROR: Instead found identifier 'reg' + (65, 10) ERROR: Expected ';' + (65, 10) ERROR: Instead found identifier 'reg' + (66, 7) ERROR: Expected '(' + (66, 7) ERROR: Instead found identifier 'reg' + (67, 10) ERROR: Expected ';' + (67, 10) ERROR: Instead found identifier 'reg' + (68, 10) ERROR: Expected ';' + (68, 10) ERROR: Instead found identifier 'reg' + (69, 10) ERROR: Expected ';' + (69, 10) ERROR: Instead found identifier 'reg' + (70, 7) ERROR: Expected '(' + (70, 7) ERROR: Instead found identifier 'reg' + (71, 10) ERROR: Expected ';' + (71, 10) ERROR: Instead found identifier 'reg' + (72, 10) ERROR: Expected ';' + (72, 10) ERROR: Instead found identifier 'reg' + (73, 10) ERROR: Expected ';' + (73, 10) ERROR: Instead found identifier 'reg' + (74, 7) ERROR: Expected '(' + (74, 7) ERROR: Instead found identifier 'reg' + (75, 10) ERROR: Expected ';' + (75, 10) ERROR: Instead found identifier 'reg' + (76, 10) ERROR: Expected ';' + (76, 10) ERROR: Instead found identifier 'reg' + (77, 10) ERROR: Expected ';' + (77, 10) ERROR: Instead found identifier 'reg' + (78, 7) ERROR: Expected '(' + (78, 7) ERROR: Instead found identifier 'reg' + (79, 10) ERROR: Expected ';' + (79, 10) ERROR: Instead found identifier 'reg' + (80, 10) ERROR: Expected ';' + (80, 10) ERROR: Instead found identifier 'reg' + (81, 10) ERROR: Expected ';' + (81, 10) ERROR: Instead found identifier 'reg' + (82, 7) ERROR: Expected '(' + (82, 7) ERROR: Instead found identifier 'reg' + (83, 10) ERROR: Expected ';' + (83, 10) ERROR: Instead found identifier 'reg' + (84, 10) ERROR: Expected ';' + (84, 10) ERROR: Instead found identifier 'reg' + (85, 10) ERROR: Expected ';' + (85, 10) ERROR: Instead found identifier 'reg' + (86, 7) ERROR: Expected '(' + (86, 7) ERROR: Instead found identifier 'reg' + (87, 10) ERROR: Expected ';' + (87, 10) ERROR: Instead found identifier 'reg' + (88, 10) ERROR: Expected ';' + (88, 10) ERROR: Instead found identifier 'reg' + (89, 10) ERROR: Expected ';' + (89, 10) ERROR: Instead found identifier 'reg' + (90, 7) ERROR: Expected '(' + (90, 7) ERROR: Instead found identifier 'reg' + (91, 10) ERROR: Expected ';' + (91, 10) ERROR: Instead found identifier 'reg' + (92, 10) ERROR: Expected ';' + (92, 10) ERROR: Instead found identifier 'reg' + (93, 10) ERROR: Expected ';' + (93, 10) ERROR: Instead found identifier 'reg' + (94, 7) ERROR: Expected '(' + (94, 7) ERROR: Instead found identifier 'reg' + (97, 2) INFO: Compiling void Player::setlevels() + (99, 60) ERROR: Expected expression value + (99, 60) ERROR: Instead found '' + (105, 2) INFO: Compiling void Player::menu_addgold() + (107, 10) ERROR: Expected ';' + (107, 10) ERROR: Instead found identifier 'reg' + (108, 10) ERROR: Expected ';' + (108, 10) ERROR: Instead found identifier 'reg' + (109, 10) ERROR: Expected ';' + (109, 10) ERROR: Instead found identifier 'reg' + (110, 7) ERROR: Expected '(' + (110, 7) ERROR: Instead found identifier 'reg' + (111, 10) ERROR: Expected ';' + (111, 10) ERROR: Instead found identifier 'reg' + (112, 10) ERROR: Expected ';' + (112, 10) ERROR: Instead found identifier 'reg' + (113, 10) ERROR: Expected ';' + (113, 10) ERROR: Instead found identifier 'reg' + (114, 7) ERROR: Expected '(' + (114, 7) ERROR: Instead found identifier 'reg' + (115, 10) ERROR: Expected ';' + (115, 10) ERROR: Instead found identifier 'reg' + (116, 10) ERROR: Expected ';' + (116, 10) ERROR: Instead found identifier 'reg' + (117, 10) ERROR: Expected ';' + (117, 10) ERROR: Instead found identifier 'reg' + (118, 7) ERROR: Expected '(' + (118, 7) ERROR: Instead found identifier 'reg' + (119, 10) ERROR: Expected ';' + (119, 10) ERROR: Instead found identifier 'reg' + (120, 10) ERROR: Expected ';' + (120, 10) ERROR: Instead found identifier 'reg' + (121, 10) ERROR: Expected ';' + (121, 10) ERROR: Instead found identifier 'reg' + (122, 7) ERROR: Expected '(' + (122, 7) ERROR: Instead found identifier 'reg' + (125, 2) INFO: Compiling void Player::addgold() + (127, 3) ERROR: No matching symbol 'CallExternal' + (130, 2) INFO: Compiling void Player::set_respawn() + (132, 3) ERROR: No matching symbol 'CallExternal' + (133, 3) ERROR: No matching symbol 'SendColoredMessage' + (8, 2) INFO: Compiling void Treasure::menu_treasure() + (10, 10) ERROR: Expected ';' + (10, 10) ERROR: Instead found identifier 'reg' + (11, 10) ERROR: Expected ';' + (11, 10) ERROR: Instead found identifier 'reg' + (12, 10) ERROR: Expected ';' + (12, 10) ERROR: Instead found identifier 'reg' + (13, 7) ERROR: Expected '(' + (13, 7) ERROR: Instead found identifier 'reg' + (14, 10) ERROR: Expected ';' + (14, 10) ERROR: Instead found identifier 'reg' + (15, 10) ERROR: Expected ';' + (15, 10) ERROR: Instead found identifier 'reg' + (16, 10) ERROR: Expected ';' + (16, 10) ERROR: Instead found identifier 'reg' + (17, 10) ERROR: Expected ';' + (17, 10) ERROR: Instead found identifier 'reg' + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (19, 10) ERROR: Expected ';' + (19, 10) ERROR: Instead found identifier 'reg' + (20, 10) ERROR: Expected ';' + (20, 10) ERROR: Instead found identifier 'reg' + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (24, 10) ERROR: Expected ';' + (24, 10) ERROR: Instead found identifier 'reg' + (25, 10) ERROR: Expected ';' + (25, 10) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (27, 10) ERROR: Expected ';' + (27, 10) ERROR: Instead found identifier 'reg' + (28, 10) ERROR: Expected ';' + (28, 10) ERROR: Instead found identifier 'reg' + (29, 10) ERROR: Expected ';' + (29, 10) ERROR: Instead found identifier 'reg' + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'reg' + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 10) ERROR: Expected ';' + (32, 10) ERROR: Instead found identifier 'reg' + (33, 10) ERROR: Expected ';' + (33, 10) ERROR: Instead found identifier 'reg' + (34, 10) ERROR: Expected ';' + (34, 10) ERROR: Instead found identifier 'reg' + (35, 10) ERROR: Expected ';' + (35, 10) ERROR: Instead found identifier 'reg' + (36, 10) ERROR: Expected ';' + (36, 10) ERROR: Instead found identifier 'reg' + (37, 10) ERROR: Expected ';' + (37, 10) ERROR: Instead found identifier 'reg' + (40, 2) INFO: Compiling void Treasure::menu_treasure_weapons() + (42, 10) ERROR: Expected ';' + (42, 10) ERROR: Instead found identifier 'reg' + (43, 10) ERROR: Expected ';' + (43, 10) ERROR: Instead found identifier 'reg' + (44, 10) ERROR: Expected ';' + (44, 10) ERROR: Instead found identifier 'reg' + (45, 10) ERROR: Expected ';' + (45, 10) ERROR: Instead found identifier 'reg' + (46, 10) ERROR: Expected ';' + (46, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 10) ERROR: Expected ';' + (48, 10) ERROR: Instead found identifier 'reg' + (49, 10) ERROR: Expected ';' + (49, 10) ERROR: Instead found identifier 'reg' + (50, 10) ERROR: Expected ';' + (50, 10) ERROR: Instead found identifier 'reg' + (51, 10) ERROR: Expected ';' + (51, 10) ERROR: Instead found identifier 'reg' + (52, 10) ERROR: Expected ';' + (52, 10) ERROR: Instead found identifier 'reg' + (53, 10) ERROR: Expected ';' + (53, 10) ERROR: Instead found identifier 'reg' + (54, 10) ERROR: Expected ';' + (54, 10) ERROR: Instead found identifier 'reg' + (55, 10) ERROR: Expected ';' + (55, 10) ERROR: Instead found identifier 'reg' + (56, 10) ERROR: Expected ';' + (56, 10) ERROR: Instead found identifier 'reg' + (57, 10) ERROR: Expected ';' + (57, 10) ERROR: Instead found identifier 'reg' + (58, 10) ERROR: Expected ';' + (58, 10) ERROR: Instead found identifier 'reg' + (59, 10) ERROR: Expected ';' + (59, 10) ERROR: Instead found identifier 'reg' + (60, 10) ERROR: Expected ';' + (60, 10) ERROR: Instead found identifier 'reg' + (61, 10) ERROR: Expected ';' + (61, 10) ERROR: Instead found identifier 'reg' + (62, 10) ERROR: Expected ';' + (62, 10) ERROR: Instead found identifier 'reg' + (63, 10) ERROR: Expected ';' + (63, 10) ERROR: Instead found identifier 'reg' + (64, 10) ERROR: Expected ';' + (64, 10) ERROR: Instead found identifier 'reg' + (65, 10) ERROR: Expected ';' + (65, 10) ERROR: Instead found identifier 'reg' + (66, 10) ERROR: Expected ';' + (66, 10) ERROR: Instead found identifier 'reg' + (67, 10) ERROR: Expected ';' + (67, 10) ERROR: Instead found identifier 'reg' + (68, 10) ERROR: Expected ';' + (68, 10) ERROR: Instead found identifier 'reg' + (69, 10) ERROR: Expected ';' + (69, 10) ERROR: Instead found identifier 'reg' + (70, 10) ERROR: Expected ';' + (70, 10) ERROR: Instead found identifier 'reg' + (71, 10) ERROR: Expected ';' + (71, 10) ERROR: Instead found identifier 'reg' + (72, 10) ERROR: Expected ';' + (72, 10) ERROR: Instead found identifier 'reg' + (73, 10) ERROR: Expected ';' + (73, 10) ERROR: Instead found identifier 'reg' + (76, 2) INFO: Compiling void Treasure::create_treasure() + (81, 36) ERROR: Expected expression value + (81, 36) ERROR: Instead found '' + (19, 2) INFO: Compiling void Trigger::menu_trigger() + (25, 10) ERROR: Expected ';' + (25, 10) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (43, 2) INFO: Compiling void Trigger::loop_trigger_history() + (46, 10) ERROR: Expected ';' + (46, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 10) ERROR: Expected ';' + (48, 10) ERROR: Instead found identifier 'reg' + (49, 10) ERROR: Expected ';' + (49, 10) ERROR: Instead found identifier 'reg' + (52, 2) INFO: Compiling void Trigger::use_trigger() + (54, 3) ERROR: No matching symbol 'UseTrigger' + (57, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (58, 3) ERROR: No matching symbol 'CallExternal' + (61, 2) INFO: Compiling void Trigger::game_heardtext() + (76, 43) ERROR: Expected expression value + (76, 43) ERROR: Instead found '' + (79, 2) INFO: Compiling void Trigger::stop_listening() + (81, 27) ERROR: No conversion from 'string' to 'float' available. + (85, 2) INFO: Compiling void Trigger::menu_trigger_successful() + (87, 10) ERROR: Expected ';' + (87, 10) ERROR: Instead found identifier 'reg' + (88, 10) ERROR: Expected ';' + (88, 10) ERROR: Instead found identifier 'reg' + (15, 2) INFO: Compiling void Waypoints::menu_choose_waypoints() + (17, 10) ERROR: Expected ';' + (17, 10) ERROR: Instead found identifier 'reg' + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (19, 10) ERROR: Expected ';' + (19, 10) ERROR: Instead found identifier 'reg' + (20, 7) ERROR: Expected '(' + (20, 7) ERROR: Instead found identifier 'reg' + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (24, 7) ERROR: Expected '(' + (24, 7) ERROR: Instead found identifier 'reg' + (27, 2) INFO: Compiling void Waypoints::menu_waypoint_save() + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'reg' + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 10) ERROR: Expected ';' + (32, 10) ERROR: Instead found identifier 'reg' + (33, 7) ERROR: Expected '(' + (33, 7) ERROR: Instead found identifier 'reg' + (34, 10) ERROR: Expected ';' + (34, 10) ERROR: Instead found identifier 'reg' + (35, 10) ERROR: Expected ';' + (35, 10) ERROR: Instead found identifier 'reg' + (36, 10) ERROR: Expected ';' + (36, 10) ERROR: Instead found identifier 'reg' + (37, 7) ERROR: Expected '(' + (37, 7) ERROR: Instead found identifier 'reg' + (38, 10) ERROR: Expected ';' + (38, 10) ERROR: Instead found identifier 'reg' + (39, 10) ERROR: Expected ';' + (39, 10) ERROR: Instead found identifier 'reg' + (40, 10) ERROR: Expected ';' + (40, 10) ERROR: Instead found identifier 'reg' + (41, 7) ERROR: Expected '(' + (41, 7) ERROR: Instead found identifier 'reg' + (42, 10) ERROR: Expected ';' + (42, 10) ERROR: Instead found identifier 'reg' + (43, 10) ERROR: Expected ';' + (43, 10) ERROR: Instead found identifier 'reg' + (44, 10) ERROR: Expected ';' + (44, 10) ERROR: Instead found identifier 'reg' + (45, 7) ERROR: Expected '(' + (45, 7) ERROR: Instead found identifier 'reg' + (46, 10) ERROR: Expected ';' + (46, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 10) ERROR: Expected ';' + (48, 10) ERROR: Instead found identifier 'reg' + (49, 7) ERROR: Expected '(' + (49, 7) ERROR: Instead found identifier 'reg' + (52, 2) INFO: Compiling void Waypoints::save_waypoint() + (54, 43) ERROR: No matching symbol 'MY_OWNER' + (57, 11) WARN: Variable 'L_WAYPOINTS' hides another variable of same name in outer scope + (59, 3) ERROR: No matching symbol 'SetToken' + (60, 22) ERROR: No matching symbol 'MY_OWNER' + (61, 3) ERROR: No matching symbol 'SendColoredMessage' + (64, 2) INFO: Compiling void Waypoints::menu_waypoint_load() + (71, 10) ERROR: Expected ';' + (71, 10) ERROR: Instead found identifier 'reg' + (74, 11) ERROR: Expected ';' + (74, 11) ERROR: Instead found identifier 'reg' + (75, 11) ERROR: Expected ';' + (75, 11) ERROR: Instead found identifier 'reg' + (76, 8) ERROR: Expected '(' + (76, 8) ERROR: Instead found identifier 'reg' + (80, 11) ERROR: Expected ';' + (80, 11) ERROR: Instead found identifier 'reg' + (82, 10) ERROR: Expected ';' + (82, 10) ERROR: Instead found identifier 'reg' + (85, 11) ERROR: Expected ';' + (85, 11) ERROR: Instead found identifier 'reg' + (86, 11) ERROR: Expected ';' + (86, 11) ERROR: Instead found identifier 'reg' + (87, 8) ERROR: Expected '(' + (87, 8) ERROR: Instead found identifier 'reg' + (91, 11) ERROR: Expected ';' + (91, 11) ERROR: Instead found identifier 'reg' + (93, 10) ERROR: Expected ';' + (93, 10) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (98, 8) ERROR: Expected '(' + (98, 8) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (104, 10) ERROR: Expected ';' + (104, 10) ERROR: Instead found identifier 'reg' + (107, 11) ERROR: Expected ';' + (107, 11) ERROR: Instead found identifier 'reg' + (108, 11) ERROR: Expected ';' + (108, 11) ERROR: Instead found identifier 'reg' + (109, 8) ERROR: Expected '(' + (109, 8) ERROR: Instead found identifier 'reg' + (113, 11) ERROR: Expected ';' + (113, 11) ERROR: Instead found identifier 'reg' + (115, 10) ERROR: Expected ';' + (115, 10) ERROR: Instead found identifier 'reg' + (118, 11) ERROR: Expected ';' + (118, 11) ERROR: Instead found identifier 'reg' + (119, 11) ERROR: Expected ';' + (119, 11) ERROR: Instead found identifier 'reg' + (120, 8) ERROR: Expected '(' + (120, 8) ERROR: Instead found identifier 'reg' + (124, 11) ERROR: Expected ';' + (124, 11) ERROR: Instead found identifier 'reg' + (128, 2) INFO: Compiling void Waypoints::load_waypoint() + (130, 43) ERROR: No matching symbol 'MY_OWNER' + (131, 20) ERROR: No matching symbol 'GetToken' + (132, 19) ERROR: No matching symbol 'MY_OWNER' + (133, 3) ERROR: No matching symbol 'SendColoredMessage' + (16, 2) INFO: Compiling void WarpPlayer::menu_tele_mode() + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (19, 10) ERROR: Expected ';' + (19, 10) ERROR: Instead found identifier 'reg' + (20, 10) ERROR: Expected ';' + (20, 10) ERROR: Instead found identifier 'reg' + (21, 7) ERROR: Expected '(' + (21, 7) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (24, 10) ERROR: Expected ';' + (24, 10) ERROR: Instead found identifier 'reg' + (25, 7) ERROR: Expected '(' + (25, 7) ERROR: Instead found identifier 'reg' + (28, 2) INFO: Compiling void WarpPlayer::set_tele_mode() + (30, 19) ERROR: No matching symbol 'param2' + (31, 3) ERROR: No matching symbol 'set_menu_type' + (34, 2) INFO: Compiling void WarpPlayer::menu_tele_player() + (37, 50) ERROR: Expected expression value + (37, 50) ERROR: Instead found '' + (37, 80) ERROR: Expected ';' + (37, 80) ERROR: Instead found ')' + (43, 2) INFO: Compiling void WarpPlayer::add_player_to_menu() + (45, 44) ERROR: Expected expression value + (45, 44) ERROR: Instead found '' + (48, 11) ERROR: Expected ';' + (48, 11) ERROR: Instead found identifier 'reg' + (49, 11) ERROR: Expected ';' + (49, 11) ERROR: Instead found identifier 'reg' + (50, 11) ERROR: Expected ';' + (50, 11) ERROR: Instead found identifier 'reg' + (51, 11) ERROR: Expected ';' + (51, 11) ERROR: Instead found identifier 'reg' + (55, 2) INFO: Compiling void WarpPlayer::teleport_player() + (59, 46) ERROR: No matching symbol 'param2' + (59, 20) ERROR: No matching symbol 'MY_OWNER' + (63, 44) ERROR: No matching symbol 'MY_OWNER' + (63, 20) ERROR: No matching symbol 'param2' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\menus\player.as + (8, 2) INFO: Compiling void Player::menu_playerlist() + (10, 10) ERROR: Expected ';' + (10, 10) ERROR: Instead found identifier 'reg' + (11, 10) ERROR: Expected ';' + (11, 10) ERROR: Instead found identifier 'reg' + (12, 10) ERROR: Expected ';' + (12, 10) ERROR: Instead found identifier 'reg' + (13, 10) ERROR: Expected ';' + (13, 10) ERROR: Instead found identifier 'reg' + (14, 10) ERROR: Expected ';' + (14, 10) ERROR: Instead found identifier 'reg' + (15, 10) ERROR: Expected ';' + (15, 10) ERROR: Instead found identifier 'reg' + (16, 10) ERROR: Expected ';' + (16, 10) ERROR: Instead found identifier 'reg' + (17, 10) ERROR: Expected ';' + (17, 10) ERROR: Instead found identifier 'reg' + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (19, 7) ERROR: Expected '(' + (19, 7) ERROR: Instead found identifier 'reg' + (20, 10) ERROR: Expected ';' + (20, 10) ERROR: Instead found identifier 'reg' + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 7) ERROR: Expected '(' + (23, 7) ERROR: Instead found identifier 'reg' + (24, 10) ERROR: Expected ';' + (24, 10) ERROR: Instead found identifier 'reg' + (25, 10) ERROR: Expected ';' + (25, 10) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (29, 2) INFO: Compiling void Player::toggle_soup() + (31, 8) ERROR: No matching symbol 'GetEntityProperty' + (33, 4) ERROR: No matching symbol 'SendColoredMessage' + (34, 4) ERROR: No matching symbol 'CallExternal' + (38, 4) ERROR: No matching symbol 'SendColoredMessage' + (39, 4) ERROR: No matching symbol 'ApplyEffect' + (43, 2) INFO: Compiling void Player::toggle_notarget() + (45, 8) ERROR: No matching symbol 'GetEntityProperty' + (47, 4) ERROR: No matching symbol 'SendColoredMessage' + (48, 4) ERROR: No matching symbol 'CallExternal' + (52, 4) ERROR: No matching symbol 'SendColoredMessage' + (53, 4) ERROR: No matching symbol 'CallExternal' + (57, 2) INFO: Compiling void Player::menu_playerlevels() + (59, 10) ERROR: Expected ';' + (59, 10) ERROR: Instead found identifier 'reg' + (60, 10) ERROR: Expected ';' + (60, 10) ERROR: Instead found identifier 'reg' + (61, 10) ERROR: Expected ';' + (61, 10) ERROR: Instead found identifier 'reg' + (62, 7) ERROR: Expected '(' + (62, 7) ERROR: Instead found identifier 'reg' + (63, 10) ERROR: Expected ';' + (63, 10) ERROR: Instead found identifier 'reg' + (64, 10) ERROR: Expected ';' + (64, 10) ERROR: Instead found identifier 'reg' + (65, 10) ERROR: Expected ';' + (65, 10) ERROR: Instead found identifier 'reg' + (66, 7) ERROR: Expected '(' + (66, 7) ERROR: Instead found identifier 'reg' + (67, 10) ERROR: Expected ';' + (67, 10) ERROR: Instead found identifier 'reg' + (68, 10) ERROR: Expected ';' + (68, 10) ERROR: Instead found identifier 'reg' + (69, 10) ERROR: Expected ';' + (69, 10) ERROR: Instead found identifier 'reg' + (70, 7) ERROR: Expected '(' + (70, 7) ERROR: Instead found identifier 'reg' + (71, 10) ERROR: Expected ';' + (71, 10) ERROR: Instead found identifier 'reg' + (72, 10) ERROR: Expected ';' + (72, 10) ERROR: Instead found identifier 'reg' + (73, 10) ERROR: Expected ';' + (73, 10) ERROR: Instead found identifier 'reg' + (74, 7) ERROR: Expected '(' + (74, 7) ERROR: Instead found identifier 'reg' + (75, 10) ERROR: Expected ';' + (75, 10) ERROR: Instead found identifier 'reg' + (76, 10) ERROR: Expected ';' + (76, 10) ERROR: Instead found identifier 'reg' + (77, 10) ERROR: Expected ';' + (77, 10) ERROR: Instead found identifier 'reg' + (78, 7) ERROR: Expected '(' + (78, 7) ERROR: Instead found identifier 'reg' + (79, 10) ERROR: Expected ';' + (79, 10) ERROR: Instead found identifier 'reg' + (80, 10) ERROR: Expected ';' + (80, 10) ERROR: Instead found identifier 'reg' + (81, 10) ERROR: Expected ';' + (81, 10) ERROR: Instead found identifier 'reg' + (82, 7) ERROR: Expected '(' + (82, 7) ERROR: Instead found identifier 'reg' + (83, 10) ERROR: Expected ';' + (83, 10) ERROR: Instead found identifier 'reg' + (84, 10) ERROR: Expected ';' + (84, 10) ERROR: Instead found identifier 'reg' + (85, 10) ERROR: Expected ';' + (85, 10) ERROR: Instead found identifier 'reg' + (86, 7) ERROR: Expected '(' + (86, 7) ERROR: Instead found identifier 'reg' + (87, 10) ERROR: Expected ';' + (87, 10) ERROR: Instead found identifier 'reg' + (88, 10) ERROR: Expected ';' + (88, 10) ERROR: Instead found identifier 'reg' + (89, 10) ERROR: Expected ';' + (89, 10) ERROR: Instead found identifier 'reg' + (90, 7) ERROR: Expected '(' + (90, 7) ERROR: Instead found identifier 'reg' + (91, 10) ERROR: Expected ';' + (91, 10) ERROR: Instead found identifier 'reg' + (92, 10) ERROR: Expected ';' + (92, 10) ERROR: Instead found identifier 'reg' + (93, 10) ERROR: Expected ';' + (93, 10) ERROR: Instead found identifier 'reg' + (94, 7) ERROR: Expected '(' + (94, 7) ERROR: Instead found identifier 'reg' + (97, 2) INFO: Compiling void Player::setlevels() + (99, 60) ERROR: Expected expression value + (99, 60) ERROR: Instead found '' + (105, 2) INFO: Compiling void Player::menu_addgold() + (107, 10) ERROR: Expected ';' + (107, 10) ERROR: Instead found identifier 'reg' + (108, 10) ERROR: Expected ';' + (108, 10) ERROR: Instead found identifier 'reg' + (109, 10) ERROR: Expected ';' + (109, 10) ERROR: Instead found identifier 'reg' + (110, 7) ERROR: Expected '(' + (110, 7) ERROR: Instead found identifier 'reg' + (111, 10) ERROR: Expected ';' + (111, 10) ERROR: Instead found identifier 'reg' + (112, 10) ERROR: Expected ';' + (112, 10) ERROR: Instead found identifier 'reg' + (113, 10) ERROR: Expected ';' + (113, 10) ERROR: Instead found identifier 'reg' + (114, 7) ERROR: Expected '(' + (114, 7) ERROR: Instead found identifier 'reg' + (115, 10) ERROR: Expected ';' + (115, 10) ERROR: Instead found identifier 'reg' + (116, 10) ERROR: Expected ';' + (116, 10) ERROR: Instead found identifier 'reg' + (117, 10) ERROR: Expected ';' + (117, 10) ERROR: Instead found identifier 'reg' + (118, 7) ERROR: Expected '(' + (118, 7) ERROR: Instead found identifier 'reg' + (119, 10) ERROR: Expected ';' + (119, 10) ERROR: Instead found identifier 'reg' + (120, 10) ERROR: Expected ';' + (120, 10) ERROR: Instead found identifier 'reg' + (121, 10) ERROR: Expected ';' + (121, 10) ERROR: Instead found identifier 'reg' + (122, 7) ERROR: Expected '(' + (122, 7) ERROR: Instead found identifier 'reg' + (125, 2) INFO: Compiling void Player::addgold() + (127, 3) ERROR: No matching symbol 'CallExternal' + (130, 2) INFO: Compiling void Player::set_respawn() + (132, 3) ERROR: No matching symbol 'CallExternal' + (133, 3) ERROR: No matching symbol 'SendColoredMessage' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\menus\treasure.as + (8, 2) INFO: Compiling void Treasure::menu_treasure() + (10, 10) ERROR: Expected ';' + (10, 10) ERROR: Instead found identifier 'reg' + (11, 10) ERROR: Expected ';' + (11, 10) ERROR: Instead found identifier 'reg' + (12, 10) ERROR: Expected ';' + (12, 10) ERROR: Instead found identifier 'reg' + (13, 7) ERROR: Expected '(' + (13, 7) ERROR: Instead found identifier 'reg' + (14, 10) ERROR: Expected ';' + (14, 10) ERROR: Instead found identifier 'reg' + (15, 10) ERROR: Expected ';' + (15, 10) ERROR: Instead found identifier 'reg' + (16, 10) ERROR: Expected ';' + (16, 10) ERROR: Instead found identifier 'reg' + (17, 10) ERROR: Expected ';' + (17, 10) ERROR: Instead found identifier 'reg' + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (19, 10) ERROR: Expected ';' + (19, 10) ERROR: Instead found identifier 'reg' + (20, 10) ERROR: Expected ';' + (20, 10) ERROR: Instead found identifier 'reg' + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (24, 10) ERROR: Expected ';' + (24, 10) ERROR: Instead found identifier 'reg' + (25, 10) ERROR: Expected ';' + (25, 10) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (27, 10) ERROR: Expected ';' + (27, 10) ERROR: Instead found identifier 'reg' + (28, 10) ERROR: Expected ';' + (28, 10) ERROR: Instead found identifier 'reg' + (29, 10) ERROR: Expected ';' + (29, 10) ERROR: Instead found identifier 'reg' + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'reg' + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 10) ERROR: Expected ';' + (32, 10) ERROR: Instead found identifier 'reg' + (33, 10) ERROR: Expected ';' + (33, 10) ERROR: Instead found identifier 'reg' + (34, 10) ERROR: Expected ';' + (34, 10) ERROR: Instead found identifier 'reg' + (35, 10) ERROR: Expected ';' + (35, 10) ERROR: Instead found identifier 'reg' + (36, 10) ERROR: Expected ';' + (36, 10) ERROR: Instead found identifier 'reg' + (37, 10) ERROR: Expected ';' + (37, 10) ERROR: Instead found identifier 'reg' + (40, 2) INFO: Compiling void Treasure::menu_treasure_weapons() + (42, 10) ERROR: Expected ';' + (42, 10) ERROR: Instead found identifier 'reg' + (43, 10) ERROR: Expected ';' + (43, 10) ERROR: Instead found identifier 'reg' + (44, 10) ERROR: Expected ';' + (44, 10) ERROR: Instead found identifier 'reg' + (45, 10) ERROR: Expected ';' + (45, 10) ERROR: Instead found identifier 'reg' + (46, 10) ERROR: Expected ';' + (46, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 10) ERROR: Expected ';' + (48, 10) ERROR: Instead found identifier 'reg' + (49, 10) ERROR: Expected ';' + (49, 10) ERROR: Instead found identifier 'reg' + (50, 10) ERROR: Expected ';' + (50, 10) ERROR: Instead found identifier 'reg' + (51, 10) ERROR: Expected ';' + (51, 10) ERROR: Instead found identifier 'reg' + (52, 10) ERROR: Expected ';' + (52, 10) ERROR: Instead found identifier 'reg' + (53, 10) ERROR: Expected ';' + (53, 10) ERROR: Instead found identifier 'reg' + (54, 10) ERROR: Expected ';' + (54, 10) ERROR: Instead found identifier 'reg' + (55, 10) ERROR: Expected ';' + (55, 10) ERROR: Instead found identifier 'reg' + (56, 10) ERROR: Expected ';' + (56, 10) ERROR: Instead found identifier 'reg' + (57, 10) ERROR: Expected ';' + (57, 10) ERROR: Instead found identifier 'reg' + (58, 10) ERROR: Expected ';' + (58, 10) ERROR: Instead found identifier 'reg' + (59, 10) ERROR: Expected ';' + (59, 10) ERROR: Instead found identifier 'reg' + (60, 10) ERROR: Expected ';' + (60, 10) ERROR: Instead found identifier 'reg' + (61, 10) ERROR: Expected ';' + (61, 10) ERROR: Instead found identifier 'reg' + (62, 10) ERROR: Expected ';' + (62, 10) ERROR: Instead found identifier 'reg' + (63, 10) ERROR: Expected ';' + (63, 10) ERROR: Instead found identifier 'reg' + (64, 10) ERROR: Expected ';' + (64, 10) ERROR: Instead found identifier 'reg' + (65, 10) ERROR: Expected ';' + (65, 10) ERROR: Instead found identifier 'reg' + (66, 10) ERROR: Expected ';' + (66, 10) ERROR: Instead found identifier 'reg' + (67, 10) ERROR: Expected ';' + (67, 10) ERROR: Instead found identifier 'reg' + (68, 10) ERROR: Expected ';' + (68, 10) ERROR: Instead found identifier 'reg' + (69, 10) ERROR: Expected ';' + (69, 10) ERROR: Instead found identifier 'reg' + (70, 10) ERROR: Expected ';' + (70, 10) ERROR: Instead found identifier 'reg' + (71, 10) ERROR: Expected ';' + (71, 10) ERROR: Instead found identifier 'reg' + (72, 10) ERROR: Expected ';' + (72, 10) ERROR: Instead found identifier 'reg' + (73, 10) ERROR: Expected ';' + (73, 10) ERROR: Instead found identifier 'reg' + (76, 2) INFO: Compiling void Treasure::create_treasure() + (81, 36) ERROR: Expected expression value + (81, 36) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\menus\trigger.as + (19, 2) INFO: Compiling void Trigger::menu_trigger() + (25, 10) ERROR: Expected ';' + (25, 10) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (43, 2) INFO: Compiling void Trigger::loop_trigger_history() + (46, 10) ERROR: Expected ';' + (46, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 10) ERROR: Expected ';' + (48, 10) ERROR: Instead found identifier 'reg' + (49, 10) ERROR: Expected ';' + (49, 10) ERROR: Instead found identifier 'reg' + (52, 2) INFO: Compiling void Trigger::use_trigger() + (54, 3) ERROR: No matching symbol 'UseTrigger' + (57, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (58, 3) ERROR: No matching symbol 'CallExternal' + (61, 2) INFO: Compiling void Trigger::game_heardtext() + (76, 43) ERROR: Expected expression value + (76, 43) ERROR: Instead found '' + (79, 2) INFO: Compiling void Trigger::stop_listening() + (81, 27) ERROR: No conversion from 'string' to 'float' available. + (85, 2) INFO: Compiling void Trigger::menu_trigger_successful() + (87, 10) ERROR: Expected ';' + (87, 10) ERROR: Instead found identifier 'reg' + (88, 10) ERROR: Expected ';' + (88, 10) ERROR: Instead found identifier 'reg' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\menus\warp_player.as + (16, 2) INFO: Compiling void WarpPlayer::menu_tele_mode() + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (19, 10) ERROR: Expected ';' + (19, 10) ERROR: Instead found identifier 'reg' + (20, 10) ERROR: Expected ';' + (20, 10) ERROR: Instead found identifier 'reg' + (21, 7) ERROR: Expected '(' + (21, 7) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (24, 10) ERROR: Expected ';' + (24, 10) ERROR: Instead found identifier 'reg' + (25, 7) ERROR: Expected '(' + (25, 7) ERROR: Instead found identifier 'reg' + (28, 2) INFO: Compiling void WarpPlayer::set_tele_mode() + (30, 19) ERROR: No matching symbol 'param2' + (31, 3) ERROR: No matching symbol 'set_menu_type' + (34, 2) INFO: Compiling void WarpPlayer::menu_tele_player() + (37, 50) ERROR: Expected expression value + (37, 50) ERROR: Instead found '' + (37, 80) ERROR: Expected ';' + (37, 80) ERROR: Instead found ')' + (43, 2) INFO: Compiling void WarpPlayer::add_player_to_menu() + (45, 44) ERROR: Expected expression value + (45, 44) ERROR: Instead found '' + (48, 11) ERROR: Expected ';' + (48, 11) ERROR: Instead found identifier 'reg' + (49, 11) ERROR: Expected ';' + (49, 11) ERROR: Instead found identifier 'reg' + (50, 11) ERROR: Expected ';' + (50, 11) ERROR: Instead found identifier 'reg' + (51, 11) ERROR: Expected ';' + (51, 11) ERROR: Instead found identifier 'reg' + (55, 2) INFO: Compiling void WarpPlayer::teleport_player() + (59, 46) ERROR: No matching symbol 'param2' + (59, 20) ERROR: No matching symbol 'MY_OWNER' + (63, 44) ERROR: No matching symbol 'MY_OWNER' + (63, 20) ERROR: No matching symbol 'param2' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\menus\waypoints.as + (15, 2) INFO: Compiling void Waypoints::menu_choose_waypoints() + (17, 10) ERROR: Expected ';' + (17, 10) ERROR: Instead found identifier 'reg' + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (19, 10) ERROR: Expected ';' + (19, 10) ERROR: Instead found identifier 'reg' + (20, 7) ERROR: Expected '(' + (20, 7) ERROR: Instead found identifier 'reg' + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (24, 7) ERROR: Expected '(' + (24, 7) ERROR: Instead found identifier 'reg' + (27, 2) INFO: Compiling void Waypoints::menu_waypoint_save() + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'reg' + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 10) ERROR: Expected ';' + (32, 10) ERROR: Instead found identifier 'reg' + (33, 7) ERROR: Expected '(' + (33, 7) ERROR: Instead found identifier 'reg' + (34, 10) ERROR: Expected ';' + (34, 10) ERROR: Instead found identifier 'reg' + (35, 10) ERROR: Expected ';' + (35, 10) ERROR: Instead found identifier 'reg' + (36, 10) ERROR: Expected ';' + (36, 10) ERROR: Instead found identifier 'reg' + (37, 7) ERROR: Expected '(' + (37, 7) ERROR: Instead found identifier 'reg' + (38, 10) ERROR: Expected ';' + (38, 10) ERROR: Instead found identifier 'reg' + (39, 10) ERROR: Expected ';' + (39, 10) ERROR: Instead found identifier 'reg' + (40, 10) ERROR: Expected ';' + (40, 10) ERROR: Instead found identifier 'reg' + (41, 7) ERROR: Expected '(' + (41, 7) ERROR: Instead found identifier 'reg' + (42, 10) ERROR: Expected ';' + (42, 10) ERROR: Instead found identifier 'reg' + (43, 10) ERROR: Expected ';' + (43, 10) ERROR: Instead found identifier 'reg' + (44, 10) ERROR: Expected ';' + (44, 10) ERROR: Instead found identifier 'reg' + (45, 7) ERROR: Expected '(' + (45, 7) ERROR: Instead found identifier 'reg' + (46, 10) ERROR: Expected ';' + (46, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 10) ERROR: Expected ';' + (48, 10) ERROR: Instead found identifier 'reg' + (49, 7) ERROR: Expected '(' + (49, 7) ERROR: Instead found identifier 'reg' + (52, 2) INFO: Compiling void Waypoints::save_waypoint() + (54, 43) ERROR: No matching symbol 'MY_OWNER' + (57, 11) WARN: Variable 'L_WAYPOINTS' hides another variable of same name in outer scope + (59, 3) ERROR: No matching symbol 'SetToken' + (60, 22) ERROR: No matching symbol 'MY_OWNER' + (61, 3) ERROR: No matching symbol 'SendColoredMessage' + (64, 2) INFO: Compiling void Waypoints::menu_waypoint_load() + (71, 10) ERROR: Expected ';' + (71, 10) ERROR: Instead found identifier 'reg' + (74, 11) ERROR: Expected ';' + (74, 11) ERROR: Instead found identifier 'reg' + (75, 11) ERROR: Expected ';' + (75, 11) ERROR: Instead found identifier 'reg' + (76, 8) ERROR: Expected '(' + (76, 8) ERROR: Instead found identifier 'reg' + (80, 11) ERROR: Expected ';' + (80, 11) ERROR: Instead found identifier 'reg' + (82, 10) ERROR: Expected ';' + (82, 10) ERROR: Instead found identifier 'reg' + (85, 11) ERROR: Expected ';' + (85, 11) ERROR: Instead found identifier 'reg' + (86, 11) ERROR: Expected ';' + (86, 11) ERROR: Instead found identifier 'reg' + (87, 8) ERROR: Expected '(' + (87, 8) ERROR: Instead found identifier 'reg' + (91, 11) ERROR: Expected ';' + (91, 11) ERROR: Instead found identifier 'reg' + (93, 10) ERROR: Expected ';' + (93, 10) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (98, 8) ERROR: Expected '(' + (98, 8) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (104, 10) ERROR: Expected ';' + (104, 10) ERROR: Instead found identifier 'reg' + (107, 11) ERROR: Expected ';' + (107, 11) ERROR: Instead found identifier 'reg' + (108, 11) ERROR: Expected ';' + (108, 11) ERROR: Instead found identifier 'reg' + (109, 8) ERROR: Expected '(' + (109, 8) ERROR: Instead found identifier 'reg' + (113, 11) ERROR: Expected ';' + (113, 11) ERROR: Instead found identifier 'reg' + (115, 10) ERROR: Expected ';' + (115, 10) ERROR: Instead found identifier 'reg' + (118, 11) ERROR: Expected ';' + (118, 11) ERROR: Instead found identifier 'reg' + (119, 11) ERROR: Expected ';' + (119, 11) ERROR: Instead found identifier 'reg' + (120, 8) ERROR: Expected '(' + (120, 8) ERROR: Instead found identifier 'reg' + (124, 11) ERROR: Expected ';' + (124, 11) ERROR: Instead found identifier 'reg' + (128, 2) INFO: Compiling void Waypoints::load_waypoint() + (130, 43) ERROR: No matching symbol 'MY_OWNER' + (131, 20) ERROR: No matching symbol 'GetToken' + (132, 19) ERROR: No matching symbol 'MY_OWNER' + (133, 3) ERROR: No matching symbol 'SendColoredMessage' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\physgun.as + (18, 2) INFO: Compiling void Physgun::try_physgun() + (20, 7) ERROR: Illegal operation on this datatype + (22, 4) ERROR: No matching symbol 'find_beam_target' + (25, 9) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (25, 9) INFO: Candidates are: + (25, 9) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (25, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (28, 61) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (28, 61) INFO: Candidates are: + (28, 61) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (28, 61) INFO: Rejected due to type mismatch at positional parameter 1 + (28, 48) ERROR: No matching symbol 'GetOwner' + (29, 6) ERROR: No matching symbol 'SendColoredMessage' + (40, 2) INFO: Compiling void Physgun::update_physgun_target() + (48, 43) ERROR: Expected expression value + (48, 43) ERROR: Instead found '' + (59, 2) INFO: Compiling void Physgun::game__attack1() + (61, 7) ERROR: Illegal operation on this datatype + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff\remover.as + (16, 2) INFO: Compiling void Remover::try_remove() + (29, 76) ERROR: Expected ')' or ',' + (29, 76) ERROR: Instead found identifier 'name' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\dev_staff.as + (165, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\drink_ale.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\drink_forsuth.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\drink_mead.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\drink_wine.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\fist_bare.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gauntlets_normal.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gold_pouch_10.as + (16, 2) INFO: Compiling void GoldPouchBase::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetDescription' + (20, 3) ERROR: No matching symbol 'SetViewModel' + (21, 3) ERROR: No matching symbol 'SetWorldModel' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetWeight' + (24, 3) ERROR: No matching symbol 'SetSize' + (25, 3) ERROR: No matching symbol 'SetHUDSprite' + (26, 3) ERROR: No matching symbol 'SetAnimExt' + (27, 16) ERROR: No matching symbol 'GOLD_AMT' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gold_pouch_100.as + (16, 2) INFO: Compiling void GoldPouchBase::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetDescription' + (20, 3) ERROR: No matching symbol 'SetViewModel' + (21, 3) ERROR: No matching symbol 'SetWorldModel' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetWeight' + (24, 3) ERROR: No matching symbol 'SetSize' + (25, 3) ERROR: No matching symbol 'SetHUDSprite' + (26, 3) ERROR: No matching symbol 'SetAnimExt' + (27, 16) ERROR: No matching symbol 'GOLD_AMT' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gold_pouch_1000.as + (16, 2) INFO: Compiling void GoldPouchBase::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetDescription' + (20, 3) ERROR: No matching symbol 'SetViewModel' + (21, 3) ERROR: No matching symbol 'SetWorldModel' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetWeight' + (24, 3) ERROR: No matching symbol 'SetSize' + (25, 3) ERROR: No matching symbol 'SetHUDSprite' + (26, 3) ERROR: No matching symbol 'SetAnimExt' + (27, 16) ERROR: No matching symbol 'GOLD_AMT' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gold_pouch_200.as + (16, 2) INFO: Compiling void GoldPouchBase::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetDescription' + (20, 3) ERROR: No matching symbol 'SetViewModel' + (21, 3) ERROR: No matching symbol 'SetWorldModel' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetWeight' + (24, 3) ERROR: No matching symbol 'SetSize' + (25, 3) ERROR: No matching symbol 'SetHUDSprite' + (26, 3) ERROR: No matching symbol 'SetAnimExt' + (27, 16) ERROR: No matching symbol 'GOLD_AMT' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gold_pouch_25.as + (16, 2) INFO: Compiling void GoldPouchBase::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetDescription' + (20, 3) ERROR: No matching symbol 'SetViewModel' + (21, 3) ERROR: No matching symbol 'SetWorldModel' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetWeight' + (24, 3) ERROR: No matching symbol 'SetSize' + (25, 3) ERROR: No matching symbol 'SetHUDSprite' + (26, 3) ERROR: No matching symbol 'SetAnimExt' + (27, 16) ERROR: No matching symbol 'GOLD_AMT' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gold_pouch_5.as + (16, 2) INFO: Compiling void GoldPouchBase::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetDescription' + (20, 3) ERROR: No matching symbol 'SetViewModel' + (21, 3) ERROR: No matching symbol 'SetWorldModel' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetWeight' + (24, 3) ERROR: No matching symbol 'SetSize' + (25, 3) ERROR: No matching symbol 'SetHUDSprite' + (26, 3) ERROR: No matching symbol 'SetAnimExt' + (27, 16) ERROR: No matching symbol 'GOLD_AMT' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gold_pouch_50.as + (16, 2) INFO: Compiling void GoldPouchBase::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetDescription' + (20, 3) ERROR: No matching symbol 'SetViewModel' + (21, 3) ERROR: No matching symbol 'SetWorldModel' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetWeight' + (24, 3) ERROR: No matching symbol 'SetSize' + (25, 3) ERROR: No matching symbol 'SetHUDSprite' + (26, 3) ERROR: No matching symbol 'SetAnimExt' + (27, 16) ERROR: No matching symbol 'GOLD_AMT' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gold_pouch_500.as + (16, 2) INFO: Compiling void GoldPouchBase::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetDescription' + (20, 3) ERROR: No matching symbol 'SetViewModel' + (21, 3) ERROR: No matching symbol 'SetWorldModel' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetWeight' + (24, 3) ERROR: No matching symbol 'SetSize' + (25, 3) ERROR: No matching symbol 'SetHUDSprite' + (26, 3) ERROR: No matching symbol 'SetAnimExt' + (27, 16) ERROR: No matching symbol 'GOLD_AMT' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gold_pouch_base.as + (16, 2) INFO: Compiling void GoldPouchBase::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetDescription' + (20, 3) ERROR: No matching symbol 'SetViewModel' + (21, 3) ERROR: No matching symbol 'SetWorldModel' + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetWeight' + (24, 3) ERROR: No matching symbol 'SetSize' + (25, 3) ERROR: No matching symbol 'SetHUDSprite' + (26, 3) ERROR: No matching symbol 'SetAnimExt' + (27, 16) ERROR: No matching symbol 'GOLD_AMT' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\gown_edana.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\health_apple.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\health_lpotion.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\health_mpotion.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\health_spotion.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_bar_coffer.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_bearclaw.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_book_evil.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_book_latin.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_book_old.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_bracelet.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_bulge.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_cannon_ball.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_charm_w1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_charm_w2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_charm_w3.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_coin.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_crow_shard.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_crystal_reloc.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_crystal_return.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_debug.as + (11, 2) INFO: Compiling void ItemDebug::item_debug2() + (28, 40) ERROR: Expected expression value + (28, 40) ERROR: Instead found '' + (85, 2) INFO: Compiling void ItemDebug::item_debug_delay() + (87, 3) ERROR: No matching symbol 'CallExternal' + (90, 2) INFO: Compiling void ItemDebug::clitem_debug() + (93, 28) ERROR: Expected expression value + (93, 28) ERROR: Instead found '' + (106, 40) ERROR: Expected expression value + (106, 40) ERROR: Instead found '' + (114, 36) ERROR: Expected expression value + (114, 36) ERROR: Instead found '' + (131, 38) ERROR: Expected expression value + (131, 38) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_deed.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_devhousekey.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_djinn_fire.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (12, 14) ERROR: Expected '(' + (12, 14) ERROR: Instead found '.' + (13, 11) ERROR: Expected '(' + (13, 11) ERROR: Instead found '.' + (14, 11) ERROR: Expected '(' + (14, 11) ERROR: Instead found '.' + (15, 14) ERROR: Expected '(' + (15, 14) ERROR: Instead found '.' + (16, 14) ERROR: Expected '(' + (16, 14) ERROR: Instead found '.' + (18, 15) ERROR: Expected identifier + (18, 15) ERROR: Instead found '(' + (110, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_djinn_light.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (12, 14) ERROR: Expected '(' + (12, 14) ERROR: Instead found '.' + (13, 11) ERROR: Expected '(' + (13, 11) ERROR: Instead found '.' + (14, 11) ERROR: Expected '(' + (14, 11) ERROR: Instead found '.' + (15, 14) ERROR: Expected '(' + (15, 14) ERROR: Instead found '.' + (16, 14) ERROR: Expected '(' + (16, 14) ERROR: Instead found '.' + (18, 16) ERROR: Expected identifier + (18, 16) ERROR: Instead found '(' + (113, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_documents.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_eh.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_erkoldsnote.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_feather.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_fstatue.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_galat_note_10.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_galat_note_100.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_gaxe_handle.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_goblinhead.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_gwond.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_hat.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_housekey.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found identifier 'string' + (12, 14) ERROR: Expected identifier + (12, 14) ERROR: Instead found '(' + (34, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ikeletter.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ikelog.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_js.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_key_rusty.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_key_sewer.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ledger.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_letter.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_letter_almund.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_letter_mayor.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_light_crystal.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_lockpick.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_log.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_log_magic.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_manuscript.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_necro_note.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ore_lorel.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_picashlborn.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_precache.as + (8, 2) INFO: Compiling ItemPrecache::ItemPrecache() + (10, 3) ERROR: No matching symbol 'Precache' + (11, 3) ERROR: No matching symbol 'Precache' + (12, 3) ERROR: No matching symbol 'Precache' + (13, 3) ERROR: No matching symbol 'Precache' + (14, 3) ERROR: No matching symbol 'Precache' + (15, 3) ERROR: No matching symbol 'Precache' + (16, 3) ERROR: No matching symbol 'Precache' + (17, 3) ERROR: No matching symbol 'Precache' + (18, 3) ERROR: No matching symbol 'Precache' + (19, 3) ERROR: No matching symbol 'Precache' + (20, 3) ERROR: No matching symbol 'Precache' + (21, 3) ERROR: No matching symbol 'Precache' + (22, 3) ERROR: No matching symbol 'Precache' + (23, 3) ERROR: No matching symbol 'Precache' + (24, 3) ERROR: No matching symbol 'Precache' + (25, 3) ERROR: No matching symbol 'Precache' + (26, 3) ERROR: No matching symbol 'Precache' + (27, 3) ERROR: No matching symbol 'Precache' + (28, 3) ERROR: No matching symbol 'Precache' + (29, 3) ERROR: No matching symbol 'Precache' + (30, 3) ERROR: No matching symbol 'Precache' + (31, 3) ERROR: No matching symbol 'Precache' + (32, 3) ERROR: No matching symbol 'Precache' + (33, 3) ERROR: No matching symbol 'Precache' + (34, 3) ERROR: No matching symbol 'Precache' + (35, 3) ERROR: No matching symbol 'Precache' + (36, 3) ERROR: No matching symbol 'Precache' + (37, 3) ERROR: No matching symbol 'Precache' + (38, 3) ERROR: No matching symbol 'Precache' + (39, 3) ERROR: No matching symbol 'Precache' + (40, 3) ERROR: No matching symbol 'Precache' + (41, 3) ERROR: No matching symbol 'Precache' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ratskull.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_riddleanswers.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_riddleanswers2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ring.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ring_mana.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ring_percept.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ring_ryza.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ring_ryza_gem1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ring_ryza_gem2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ring_ryza_gem3.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_ring_thunder22.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_roland_letter.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_runicsymbol.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_runicsymbol2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_s1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_s2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_s3.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_s4.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_s5.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_sewernote.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_sorcv.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_sorcv_cl.as + (17, 2) INFO: Compiling void ItemSorcvCl::client_activate() + (19, 12) ERROR: No matching symbol 'param1' + (20, 14) ERROR: No matching symbol 'param2' + (21, 12) ERROR: No matching symbol 'param3' + (22, 17) ERROR: No matching symbol 'param4' + (23, 3) ERROR: No matching symbol 'SetCallback' + (24, 3) ERROR: No matching symbol 'EmitSound3D' + (25, 3) ERROR: No matching symbol 'ClientEffect' + (26, 3) ERROR: No matching symbol 'ClientEffect' + (29, 3) ERROR: No matching signatures to 'string::L_DUR(const string)' + (32, 2) INFO: Compiling void ItemSorcvCl::update_sprite() + (34, 3) ERROR: No matching symbol 'ClientEffect' + (37, 2) INFO: Compiling void ItemSorcvCl::update_flip_sprite() + (39, 3) ERROR: No matching symbol 'ClientEffect' + (42, 2) INFO: Compiling void ItemSorcvCl::remove_me() + (44, 3) ERROR: No matching symbol 'RemoveScript' + (47, 2) INFO: Compiling void ItemSorcvCl::setup_sprite() + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (61, 2) INFO: Compiling void ItemSorcvCl::setup_flip_sprite() + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (74, 15) ERROR: No conversion from 'string' to 'double' available. + (76, 4) ERROR: Illegal operation on 'string' + (78, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_storageroomkey.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_summon_crystal.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_telfh1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_telfh2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_telfh3.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_telfh4.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_thiefmap.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_belmont.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_dark.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_faura.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_fireliz.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_golden.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_helm_bronze.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_helm_dark.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_helm_gaz1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_helm_gaz2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_helm_golden.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_helm_gray.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_helm_knight.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_helm_mongol.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_helm_plate.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_helm_undead.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_knight.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_leather.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_leather_gaz1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_leather_studded.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_leather_torn.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_mongol.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_paura.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_pheonix55.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_plate.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_salamander.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_armor_venom.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_2haxe.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_axe.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_battleaxe.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_doubleaxe.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_dragon.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_golden.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_golden_ref.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_greataxe.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_gthunder11.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_poison1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_rsmallaxe.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_runeaxe.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_scythe.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_smallaxe.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_td.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_tf.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_thunder11.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_ti.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_tl.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_tp.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_axes_vaxe.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_calrianmace.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_club.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_darkmaul.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_gauntlets.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_gauntlets_demon.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_gauntlets_fire.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_gauntlets_leather.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_gauntlets_serpant.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_granitemace.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_granitemaul.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_greatmaul.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_hammer1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_hammer2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_hammer3.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_hammer_dorfgan.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_lrod11.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_mace.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_maul.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_mithral.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_northmaul972.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_ravenmace.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_rudolfsmace.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_rustyhammer2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_snake_staff.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_blunt_warhammer.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_crossbow_heavy33.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_crossbow_light.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_firebird.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_frost.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_longbow.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_orcbow.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_orion1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_shortbow.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_swiftbow.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_thornbow.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_bows_treebow.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_gauntlets_normal.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_shields_buckler.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_shields_ironshield.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_shields_lironshield.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_shields_rune.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_shields_urdual.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_shields_wooden.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_bone_blade.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_craftedknife.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_craftedknife2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_craftedknife3.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_craftedknife4.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_dagger.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_dirk.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_fangstooth.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_flamelick.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_frozentongueonflagpole.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_huggerdagger.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_huggerdagger2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_huggerdagger3.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_huggerdagger4.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_knife.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_k_fire.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_nh.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_rknife.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_smallarms_royaldagger.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_bastardsword.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_blood_drinker.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_frostblade55.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_giceblade.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_iceblade.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_katana.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_katana2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_katana3.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_katana4.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_liceblade.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_longsword.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_lostblade.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_m2sword.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_msword.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_nkatana.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_novablade12.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_poison1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_rsword.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_rune_green.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_scimitar.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_shortsword.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_skullblade.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_skullblade2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_skullblade3.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_skullblade4.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_spiderblade.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_testskin.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_testsub.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_volcano.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_tk_swords_wolvesbane.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_torch.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_torch_light.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found identifier 'string' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (14, 11) ERROR: Expected '(' + (14, 11) ERROR: Instead found '.' + (15, 11) ERROR: Expected '(' + (15, 11) ERROR: Instead found '.' + (16, 14) ERROR: Expected '(' + (16, 14) ERROR: Instead found '.' + (17, 14) ERROR: Expected '(' + (17, 14) ERROR: Instead found '.' + (19, 13) ERROR: Expected identifier + (19, 13) ERROR: Instead found '(' + (130, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\item_warbosshead.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\key_blue.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\key_brass.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\key_crystal.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\key_forged.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\key_gold.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\key_green.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\key_ice.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\key_red.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\key_skeleton.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\key_treasury.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\lrod_cl.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found identifier 'string' + (9, 18) ERROR: Expected '(' + (9, 18) ERROR: Instead found '.' + (10, 18) ERROR: Expected '(' + (10, 18) ERROR: Instead found '.' + (11, 18) ERROR: Expected '(' + (11, 18) ERROR: Instead found '.' + (12, 18) ERROR: Expected '(' + (12, 18) ERROR: Instead found '.' + (13, 15) ERROR: Expected '(' + (13, 15) ERROR: Instead found '.' + (14, 12) ERROR: Expected '(' + (14, 12) ERROR: Instead found '.' + (15, 15) ERROR: Expected '(' + (15, 15) ERROR: Instead found '.' + (16, 12) ERROR: Expected '(' + (16, 12) ERROR: Instead found '.' + (17, 15) ERROR: Expected '(' + (17, 15) ERROR: Instead found '.' + (19, 8) ERROR: Expected identifier + (19, 8) ERROR: Instead found '(' + (236, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_acid_bolt.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found reserved keyword 'int' + (13, 19) ERROR: Expected identifier + (13, 19) ERROR: Instead found '(' + (71, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_base.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_base_cl.as + (21, 2) INFO: Compiling void MagicHandBaseCl::OnRepeatTimer() + (34, 37) ERROR: Expected expression value + (34, 37) ERROR: Instead found '' + (35, 37) ERROR: Expected expression value + (35, 37) ERROR: Instead found '' + (40, 37) ERROR: Expected expression value + (40, 37) ERROR: Instead found '' + (41, 37) ERROR: Expected expression value + (41, 37) ERROR: Instead found '' + (45, 2) INFO: Compiling void MagicHandBaseCl::game_precache() + (47, 3) ERROR: No matching symbol 'Precache' + (50, 2) INFO: Compiling void MagicHandBaseCl::client_activate() + (56, 35) ERROR: Expected expression value + (56, 35) ERROR: Instead found '' + (59, 2) INFO: Compiling void MagicHandBaseCl::make_sprite_1() + (62, 18) ERROR: No matching symbol 'param1' + (63, 65) ERROR: No matching symbol 'OFS_POS' + (63, 56) ERROR: No matching symbol 'OFS_NEG' + (63, 39) ERROR: No matching symbol 'OFS_POS' + (63, 30) ERROR: No matching symbol 'OFS_NEG' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (67, 2) INFO: Compiling void MagicHandBaseCl::setup_sprite_1() + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (76, 2) INFO: Compiling void MagicHandBaseCl::create_light() + (78, 3) ERROR: No matching symbol 'ClientEffect' + (81, 2) INFO: Compiling void MagicHandBaseCl::effect_die() + (83, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_blizzard.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found reserved keyword 'int' + (13, 19) ERROR: Expected identifier + (13, 19) ERROR: Instead found '(' + (71, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_conjure_venom_claws.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_div_glow.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_div_rejuvenate.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_fire_ball.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found reserved keyword 'int' + (13, 19) ERROR: Expected identifier + (13, 19) ERROR: Instead found '(' + (69, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_fire_dart.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found reserved keyword 'int' + (13, 19) ERROR: Expected identifier + (13, 19) ERROR: Instead found '(' + (71, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_fire_wall.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_frost_bolt.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_healing_circle.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_healing_wave.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_holy_hammer.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_ice_blast.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found reserved keyword 'int' + (13, 19) ERROR: Expected identifier + (13, 19) ERROR: Instead found '(' + (79, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_ice_lance.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_ice_shield.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_ice_shield_lesser.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_ice_wall.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_lightning_chain.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_lightning_chain_cl.as + (13, 2) INFO: Compiling void MagicHandLightningChainCl::client_activate() + (15, 18) ERROR: No matching symbol 'param1' + (18, 2) INFO: Compiling void MagicHandLightningChainCl::draw_beams() + (22, 48) ERROR: Expected expression value + (22, 48) ERROR: Instead found '' + (33, 34) ERROR: Expected expression value + (33, 34) ERROR: Instead found '' + (34, 34) ERROR: Expected expression value + (34, 34) ERROR: Instead found '' + (38, 41) ERROR: Expected expression value + (38, 41) ERROR: Instead found '' + (39, 41) ERROR: Expected expression value + (39, 41) ERROR: Instead found '' + (49, 2) INFO: Compiling void MagicHandLightningChainCl::draw_beams_loop() + (56, 43) ERROR: Expected expression value + (56, 43) ERROR: Instead found '' + (59, 44) ERROR: Expected expression value + (59, 44) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_lightning_disc.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_lightning_storm.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_lightning_weak.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected '(' + (13, 12) ERROR: Instead found '.' + (15, 24) ERROR: Expected identifier + (15, 24) ERROR: Instead found '(' + (110, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_lightning_weak_cl.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found identifier 'string' + (11, 18) ERROR: Expected '(' + (11, 18) ERROR: Instead found '.' + (12, 18) ERROR: Expected '(' + (12, 18) ERROR: Instead found '.' + (13, 18) ERROR: Expected '(' + (13, 18) ERROR: Instead found '.' + (14, 18) ERROR: Expected '(' + (14, 18) ERROR: Instead found '.' + (16, 26) ERROR: Expected identifier + (16, 26) ERROR: Instead found '(' + (157, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_poison.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_poison_cloud.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_summon_base.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 21) ERROR: Expected identifier + (12, 21) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_summon_bear1.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 21) ERROR: Expected identifier + (12, 21) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_summon_fangtooth.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 21) ERROR: Expected identifier + (12, 21) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_summon_guard.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 21) ERROR: Expected identifier + (12, 21) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_summon_rat.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 21) ERROR: Expected identifier + (12, 21) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_summon_undead.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 21) ERROR: Expected identifier + (12, 21) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_test_spell.as + (11, 2) INFO: Compiling MagicHandTestSpell::MagicHandTestSpell() + (14, 3) ERROR: No matching symbol 'Precache' + (28, 2) INFO: Compiling void MagicHandTestSpell::createsprite() + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'l' + (36, 32) ERROR: Expected expression value + (36, 32) ERROR: Instead found '' + (40, 2) INFO: Compiling void MagicHandTestSpell::client_activate() + (42, 34) ERROR: Expected expression value + (42, 34) ERROR: Instead found '' + (45, 2) INFO: Compiling void MagicHandTestSpell::new_cast() + (47, 34) ERROR: Expected expression value + (47, 34) ERROR: Instead found '' + (50, 2) INFO: Compiling void MagicHandTestSpell::setup_sprite1_sparkle() + (63, 44) ERROR: Expected expression value + (63, 44) ERROR: Instead found '' + (76, 2) INFO: Compiling void MagicHandTestSpell::sprite_update() + (78, 17) ERROR: No matching symbol 'MY_OWNER_ORIGIN' + (80, 4) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_trollcano.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_turn_undead.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\magic_hand_volcano.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (14, 18) ERROR: Expected identifier + (14, 18) ERROR: Instead found '(' + (81, 1) ERROR: Unexpected token '}' + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found reserved keyword 'int' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (15, 15) ERROR: Expected identifier + (15, 15) ERROR: Instead found '(' + (207, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_bravery.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_demon_blood.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_faura.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_fbrand.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_flesheater1.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_flesheater2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_font.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_forget.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_gprotection.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_immune_cold.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_immune_fire.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_immune_lightning.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_immune_poison.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_leadfoot.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_lleadfoot.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_lsb.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_mpotion.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_paura.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_protection.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_prot_spiders.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_regen.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_resist_cold.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_resist_fire.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_sb.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_soup.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_speed.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_st.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\mana_vampire.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\pack_archersquiver.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\pack_bank.as + (6, 7) ERROR: Method 'void PackBank::OnDeploy()' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void PackBank::OnPickup(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\pack_base.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\pack_bigsack.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\pack_boh.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\pack_boh_lesser.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\pack_heavybackpack.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\pack_quiver.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\pack_sack.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\pack_xbowquiver.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_a.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_ba.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_base.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_dra.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_h.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_hal.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_har.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_nag.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_ph.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_ph_cl.as + (13, 2) INFO: Compiling void PolearmsPhCl::client_activate() + (23, 41) ERROR: Expected expression value + (23, 41) ERROR: Instead found '' + (30, 2) INFO: Compiling void PolearmsPhCl::end_fx() + (33, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (36, 2) INFO: Compiling void PolearmsPhCl::remove_fx() + (38, 3) ERROR: No matching symbol 'RemoveScript' + (41, 2) INFO: Compiling void PolearmsPhCl::do_lightning() + (48, 44) ERROR: Expected expression value + (48, 44) ERROR: Instead found '' + (52, 44) ERROR: Expected expression value + (52, 44) ERROR: Instead found '' + (57, 43) ERROR: Expected expression value + (57, 43) ERROR: Instead found '' + (62, 2) INFO: Compiling void PolearmsPhCl::update_fork_sprite() + (67, 77) ERROR: Expected expression value + (67, 77) ERROR: Instead found '' + (71, 2) INFO: Compiling void PolearmsPhCl::setup_fork_sprite() + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_ph_spin_cl.as + (13, 2) INFO: Compiling void PolearmsPhSpinCl::OnRepeatTimer() + (19, 42) ERROR: Expected expression value + (19, 42) ERROR: Instead found '' + (20, 42) ERROR: Expected expression value + (20, 42) ERROR: Instead found '' + (21, 37) ERROR: Expected expression value + (21, 37) ERROR: Instead found '' + (24, 35) ERROR: Expected expression value + (24, 35) ERROR: Instead found '' + (28, 35) ERROR: Expected expression value + (28, 35) ERROR: Instead found '' + (32, 2) INFO: Compiling void PolearmsPhSpinCl::client_activate() + (42, 41) ERROR: Expected expression value + (42, 41) ERROR: Instead found '' + (47, 2) INFO: Compiling void PolearmsPhSpinCl::end_fx() + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void PolearmsPhSpinCl::remove_fx() + (55, 3) ERROR: No matching symbol 'RemoveScript' + (58, 2) INFO: Compiling void PolearmsPhSpinCl::update_fork_sprite() + (67, 77) ERROR: Expected expression value + (67, 77) ERROR: Instead found '' + (71, 2) INFO: Compiling void PolearmsPhSpinCl::setup_fork_sprite() + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_qs.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_sl.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_sp.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_test.as + (16, 2) ERROR: Expected method or property + (16, 2) ERROR: Instead found reserved keyword 'int' + (18, 14) ERROR: Expected identifier + (18, 14) ERROR: Instead found '(' + (276, 12) ERROR: Expected '(' + (276, 12) ERROR: Instead found '+' + (335, 1) ERROR: Unexpected token '}' + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_ti.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\polearms_tri.as + (669, 2) ERROR: Expected method or property + (669, 2) ERROR: Instead found reserved keyword 'void' + (1103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_acid_bolt.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_acid_bomb.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_base.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_blunt.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_bluntwooden.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_broadhead.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_fbow.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_fire.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_fire_cl.as + (25, 2) INFO: Compiling void ProjArrowFireCl::client_activate() + (29, 34) ERROR: Expected expression value + (29, 34) ERROR: Instead found '' + (41, 2) INFO: Compiling void ProjArrowFireCl::transfer_owner() + (45, 34) ERROR: Expected expression value + (45, 34) ERROR: Instead found '' + (49, 2) INFO: Compiling void ProjArrowFireCl::owner_update() + (53, 34) ERROR: Expected expression value + (53, 34) ERROR: Instead found '' + (56, 2) INFO: Compiling void ProjArrowFireCl::game_prerender() + (61, 38) ERROR: Expected expression value + (61, 38) ERROR: Instead found '' + (74, 2) INFO: Compiling void ProjArrowFireCl::end_smoke() + (78, 34) ERROR: Expected expression value + (78, 34) ERROR: Instead found '' + (82, 2) INFO: Compiling void ProjArrowFireCl::do_smokes() + (85, 11) ERROR: Expected ')' or ',' + (85, 11) ERROR: Instead found identifier '_25' + (88, 38) ERROR: Expected expression value + (88, 38) ERROR: Instead found '' + (97, 2) INFO: Compiling void ProjArrowFireCl::end_fx() + (100, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (103, 2) INFO: Compiling void ProjArrowFireCl::remove_fx() + (105, 3) ERROR: No matching symbol 'RemoveScript' + (108, 2) INFO: Compiling void ProjArrowFireCl::setup_smoke() + (110, 3) ERROR: No matching symbol 'ClientEffect' + (111, 3) ERROR: No matching symbol 'ClientEffect' + (112, 3) ERROR: No matching symbol 'ClientEffect' + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (122, 2) INFO: Compiling void ProjArrowFireCl::setup_fire_sprite() + (124, 3) ERROR: No matching symbol 'ClientEffect' + (125, 3) ERROR: No matching symbol 'ClientEffect' + (126, 3) ERROR: No matching symbol 'ClientEffect' + (127, 3) ERROR: No matching symbol 'ClientEffect' + (128, 3) ERROR: No matching symbol 'ClientEffect' + (129, 3) ERROR: No matching symbol 'ClientEffect' + (130, 3) ERROR: No matching symbol 'ClientEffect' + (131, 3) ERROR: No matching symbol 'ClientEffect' + (134, 2) INFO: Compiling void ProjArrowFireCl::loop_sound() + (136, 7) ERROR: Illegal operation on this datatype + (137, 3) ERROR: No matching symbol 'EmitSound3D' + (138, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_fire_cl_old.as + (9, 2) ERROR: Expected method or property + (9, 2) ERROR: Instead found identifier 'string' + (10, 9) ERROR: Expected '(' + (10, 9) ERROR: Instead found '.' + (11, 12) ERROR: Expected '(' + (11, 12) ERROR: Instead found '.' + (12, 12) ERROR: Expected '(' + (12, 12) ERROR: Instead found '.' + (14, 20) ERROR: Expected identifier + (14, 20) ERROR: Instead found '(' + (120, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_frost.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_generic.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_gholy.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_gpoison.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_holy.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_jagged.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_lightning.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_npc.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_npc_dyn.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_phx.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_phx_cl.as + (13, 2) INFO: Compiling ProjArrowPhxCl::ProjArrowPhxCl() + (16, 3) ERROR: No matching symbol 'Precache' + (19, 2) INFO: Compiling void ProjArrowPhxCl::client_activate() + (26, 36) ERROR: Expected expression value + (26, 36) ERROR: Instead found '' + (28, 37) ERROR: Expected expression value + (28, 37) ERROR: Instead found '' + (39, 2) INFO: Compiling void ProjArrowPhxCl::remove_fx() + (41, 3) ERROR: No matching symbol 'RemoveScript' + (48, 2) INFO: Compiling void ProjArrowPhxCl::setup_flame_burst() + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_poison.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_silvertipped.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_spiral.as + (111, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_spiral_cl.as + (24, 2) INFO: Compiling void ProjArrowSpiralCl::client_activate() + (34, 51) ERROR: Expected expression value + (34, 51) ERROR: Instead found '' + (41, 2) INFO: Compiling void ProjArrowSpiralCl::fx_loop() + (50, 42) ERROR: Expected expression value + (50, 42) ERROR: Instead found '' + (51, 37) ERROR: Expected expression value + (51, 37) ERROR: Instead found '' + (53, 42) ERROR: Expected expression value + (53, 42) ERROR: Instead found '' + (54, 37) ERROR: Expected expression value + (54, 37) ERROR: Instead found '' + (56, 28) ERROR: Expected expression value + (56, 28) ERROR: Instead found '' + (60, 2) INFO: Compiling void ProjArrowSpiralCl::end_fx() + (62, 7) ERROR: Illegal operation on this datatype + (64, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (67, 2) INFO: Compiling void ProjArrowSpiralCl::remove_me() + (69, 3) ERROR: No matching symbol 'RemoveScript' + (72, 2) INFO: Compiling void ProjArrowSpiralCl::game_prerender() + (75, 28) ERROR: Expected expression value + (75, 28) ERROR: Instead found '' + (76, 37) ERROR: Expected expression value + (76, 37) ERROR: Instead found '' + (80, 2) INFO: Compiling void ProjArrowSpiralCl::setup_spiral_sprite() + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_arrow_wooden.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_base.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_blizzard2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_bolt_fire.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_bolt_generic.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_bolt_iron.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_bolt_poison.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_bolt_silver.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_bolt_steel.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_bolt_wooden.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_cannon_ball.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_catapaultball.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_crescent.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_crescent_cl.as + (15, 2) INFO: Compiling void ProjCrescentCl::client_activate() + (17, 14) ERROR: No matching symbol 'param1' + (18, 13) ERROR: No matching symbol 'param2' + (19, 13) ERROR: No matching symbol 'param3' + (20, 13) ERROR: No matching symbol 'param4' + (21, 3) ERROR: No matching symbol 'SetCallback' + (23, 3) ERROR: No matching symbol 'ClientEffect' + (24, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (27, 2) INFO: Compiling void ProjCrescentCl::sv_update_vel() + (29, 13) ERROR: No matching symbol 'param1' + (30, 13) ERROR: No matching symbol 'param2' + (31, 13) ERROR: No matching symbol 'param3' + (35, 2) INFO: Compiling void ProjCrescentCl::update_cre() + (37, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (39, 8) ERROR: Expression must be of boolean type, instead found 'int&' + (41, 5) ERROR: No matching symbol 'ClientEffect' + (42, 5) ERROR: No matching symbol 'ClientEffect' + (48, 4) ERROR: No matching symbol 'ClientEffect' + (52, 2) INFO: Compiling void ProjCrescentCl::end_fx() + (55, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (58, 2) INFO: Compiling void ProjCrescentCl::remove_fx() + (60, 3) ERROR: No matching symbol 'RemoveScript' + (63, 2) INFO: Compiling void ProjCrescentCl::setup_cre() + (65, 76) ERROR: Expected expression value + (65, 76) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_elemental_cl.as + (21, 2) INFO: Compiling void ProjElementalCl::OnRepeatTimer() + (23, 3) ERROR: No matching symbol 'SetRepeatDelay' + (24, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (27, 3) ERROR: No matching symbol 'ClientEffect' + (28, 3) ERROR: No matching symbol 'ClientEffect' + (29, 3) ERROR: No matching symbol 'ClientEffect' + (32, 2) INFO: Compiling void ProjElementalCl::client_activate() + (40, 32) ERROR: Expected expression value + (40, 32) ERROR: Instead found '' + (45, 51) ERROR: Expected expression value + (45, 51) ERROR: Instead found '' + (52, 2) INFO: Compiling void ProjElementalCl::game_prerender() + (54, 28) ERROR: Expected expression value + (54, 28) ERROR: Instead found '' + (55, 37) ERROR: Expected expression value + (55, 37) ERROR: Instead found '' + (59, 2) INFO: Compiling void ProjElementalCl::sv_update_vel() + (61, 13) ERROR: No matching symbol 'param1' + (62, 13) ERROR: No matching symbol 'param2' + (63, 13) ERROR: No matching symbol 'param3' + (67, 2) INFO: Compiling void ProjElementalCl::update_cloud() + (69, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (72, 8) ERROR: Expression must be of boolean type, instead found 'int&' + (74, 5) ERROR: No matching symbol 'ClientEffect' + (75, 5) ERROR: No matching symbol 'ClientEffect' + (81, 4) ERROR: No matching symbol 'ClientEffect' + (85, 2) INFO: Compiling void ProjElementalCl::proj_explode() + (88, 3) ERROR: No matching symbol 'ClientEffect' + (94, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (97, 2) INFO: Compiling void ProjElementalCl::create_explode_sprites() + (100, 34) ERROR: Expected expression value + (100, 34) ERROR: Instead found '' + (105, 2) INFO: Compiling void ProjElementalCl::update_explode_sprite() + (108, 18) ERROR: No conversion from 'string' to 'double' available. + (109, 3) ERROR: Illegal operation on 'string' + (110, 3) ERROR: No matching symbol 'ClientEffect' + (111, 3) ERROR: No matching symbol 'ClientEffect' + (114, 2) INFO: Compiling void ProjElementalCl::end_fx() + (117, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (120, 2) INFO: Compiling void ProjElementalCl::remove_fx() + (122, 3) ERROR: No matching symbol 'RemoveScript' + (125, 2) INFO: Compiling void ProjElementalCl::setup_cloud() + (127, 76) ERROR: Expected expression value + (127, 76) ERROR: Instead found '' + (142, 2) INFO: Compiling void ProjElementalCl::spit_flames() + (146, 79) ERROR: Expected expression value + (146, 79) ERROR: Instead found '' + (158, 2) INFO: Compiling void ProjElementalCl::setup_explode_sprite() + (162, 44) ERROR: Expected expression value + (162, 44) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_elemental_guided.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_fire_ball.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_fire_ball2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_fire_bolt.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_fire_bomb.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_fire_bomb_sm.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_fire_dart.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_fire_dart_cl.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found reserved keyword 'int' + (9, 15) ERROR: Expected '(' + (9, 15) ERROR: Instead found '.' + (10, 15) ERROR: Expected '(' + (10, 15) ERROR: Instead found '.' + (12, 16) ERROR: Expected identifier + (12, 16) ERROR: Instead found '(' + (94, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_fire_xolt.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_flamejet_guided_cl.as + (20, 2) INFO: Compiling void ProjFlamejetGuidedCl::client_activate() + (28, 32) ERROR: Expected expression value + (28, 32) ERROR: Instead found '' + (33, 51) ERROR: Expected expression value + (33, 51) ERROR: Instead found '' + (41, 2) INFO: Compiling void ProjFlamejetGuidedCl::game_prerender() + (43, 28) ERROR: Expected expression value + (43, 28) ERROR: Instead found '' + (44, 37) ERROR: Expected expression value + (44, 37) ERROR: Instead found '' + (48, 2) INFO: Compiling void ProjFlamejetGuidedCl::sv_update_vel() + (50, 13) ERROR: No matching symbol 'param1' + (51, 13) ERROR: No matching symbol 'param2' + (52, 13) ERROR: No matching symbol 'param3' + (56, 2) INFO: Compiling void ProjFlamejetGuidedCl::update_cloud() + (58, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (61, 4) ERROR: No matching symbol 'LogDebug' + (62, 8) ERROR: Expression must be of boolean type, instead found 'int&' + (64, 5) ERROR: No matching symbol 'ClientEffect' + (65, 5) ERROR: No matching symbol 'ClientEffect' + (68, 4) ERROR: No matching symbol 'ClientEffect' + (72, 4) ERROR: No matching symbol 'ClientEffect' + (76, 2) INFO: Compiling void ProjFlamejetGuidedCl::proj_explode() + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (83, 2) INFO: Compiling void ProjFlamejetGuidedCl::end_fx() + (86, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (89, 2) INFO: Compiling void ProjFlamejetGuidedCl::remove_fx() + (91, 3) ERROR: No matching symbol 'RemoveScript' + (94, 2) INFO: Compiling void ProjFlamejetGuidedCl::setup_cloud() + (96, 76) ERROR: Expected expression value + (96, 76) ERROR: Instead found '' + (111, 2) INFO: Compiling void ProjFlamejetGuidedCl::spit_flames() + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (124, 2) INFO: Compiling void ProjFlamejetGuidedCl::update_flames() + (127, 3) ERROR: Illegal operation on 'string' + (128, 3) ERROR: No matching symbol 'ClientEffect' + (129, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_flame_jet.as + (109, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_flame_jet2.as + (103, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_flame_jet_cl.as + (21, 2) INFO: Compiling void ProjFlameJetCl::client_activate() + (27, 51) ERROR: Expected expression value + (27, 51) ERROR: Instead found '' + (34, 2) INFO: Compiling void ProjFlameJetCl::fx_loop() + (38, 42) ERROR: Expected expression value + (38, 42) ERROR: Instead found '' + (42, 2) INFO: Compiling void ProjFlameJetCl::end_fx() + (44, 7) ERROR: Illegal operation on this datatype + (46, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 2) INFO: Compiling void ProjFlameJetCl::remove_me() + (51, 3) ERROR: No matching symbol 'RemoveScript' + (54, 2) INFO: Compiling void ProjFlameJetCl::game_prerender() + (57, 37) ERROR: Expected expression value + (57, 37) ERROR: Instead found '' + (58, 28) ERROR: Expected expression value + (58, 28) ERROR: Instead found '' + (62, 2) INFO: Compiling void ProjFlameJetCl::setup_sprite() + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_freezing_sphere.as + (86, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_gdragon_spit.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_glob.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_glob_dynamic.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_glob_guided.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_guided_base.as + (12, 2) INFO: Compiling void ProjGuidedBase::game_tossprojectile() + (14, 9) ERROR: No matching symbol 'GetEntityProperty' + (15, 9) ERROR: No matching signatures to 'IsValidPlayer(const string)' + (15, 9) INFO: Candidates are: + (15, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (15, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (17, 19) ERROR: No matching symbol 'GetEntityProperty' + (21, 19) ERROR: No matching symbol 'GetEntityProperty' + (23, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (23, 9) INFO: Candidates are: + (23, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (23, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (25, 29) ERROR: No matching symbol 'GetEntityHeight' + (26, 4) ERROR: Illegal operation on 'string' + (33, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (36, 2) INFO: Compiling void ProjGuidedBase::gproj_home() + (44, 48) ERROR: Expected expression value + (44, 48) ERROR: Instead found '' + (46, 55) ERROR: Expected expression value + (46, 55) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_hit_wall.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_hold_person.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_icelance.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_ice_bolt.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_ice_bolt2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_k_knife.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_lava_rock.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_lightning_ball.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_lightning_ball_simple.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_lightning_storm.as + (26, 2) INFO: Compiling void ProjLightningStorm::OnSpawn() + (45, 10) ERROR: Expected ';' + (45, 10) ERROR: Instead found identifier 'reg' + (46, 10) ERROR: Expected ';' + (46, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 10) ERROR: Expected ';' + (48, 10) ERROR: Instead found identifier 'reg' + (49, 10) ERROR: Expected ';' + (49, 10) ERROR: Instead found identifier 'reg' + (50, 10) ERROR: Expected ';' + (50, 10) ERROR: Instead found identifier 'reg' + (54, 2) INFO: Compiling void ProjLightningStorm::game_tossprojectile() + (56, 3) ERROR: No matching symbol 'SetUseable' + (57, 3) ERROR: No matching symbol 'game_fall' + (60, 2) INFO: Compiling void ProjLightningStorm::game_projectile_landed() + (63, 3) ERROR: No matching symbol 'SetExpireTime' + (67, 2) INFO: Compiling void ProjLightningStorm::projectile_spawn() + (69, 3) ERROR: No matching symbol 'SetName' + (70, 3) ERROR: No matching symbol 'SetWeight' + (71, 3) ERROR: No matching symbol 'SetSize' + (72, 3) ERROR: No matching symbol 'SetValue' + (73, 3) ERROR: No matching symbol 'SetGravity' + (74, 3) ERROR: No matching symbol 'SetGroupable' + (75, 3) ERROR: No matching symbol 'SetHUDSprite' + (76, 3) ERROR: No matching symbol 'SetHUDSprite' + (77, 3) ERROR: No matching symbol 'SetHand' + (80, 2) INFO: Compiling void ProjLightningStorm::projectile_landed() + (84, 48) ERROR: Expected expression value + (84, 48) ERROR: Instead found '' + (92, 57) ERROR: Expected expression value + (92, 57) ERROR: Instead found '' + (98, 2) INFO: Compiling void ProjLightningStorm::game_hitnpc() + (105, 57) ERROR: Expected expression value + (105, 57) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_mana.as + (214, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_mana2.as + (26, 2) INFO: Compiling void ProjMana2::OnSpawn() + (28, 3) ERROR: No matching symbol 'SetName' + (29, 3) ERROR: No matching symbol 'SetDescription' + (30, 3) ERROR: No matching symbol 'SetWidth' + (31, 3) ERROR: No matching symbol 'SetHeight' + (32, 3) ERROR: No matching symbol 'SetWeight' + (33, 3) ERROR: No matching symbol 'SetGravity' + (34, 3) ERROR: No matching symbol 'SetMonsterClip' + (35, 3) ERROR: No matching symbol 'SetInvincible' + (36, 3) ERROR: No matching symbol 'SetRace' + (37, 3) ERROR: No matching symbol 'SetModel' + (38, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (41, 2) INFO: Compiling void ProjMana2::game_dynamically_created() + (48, 33) ERROR: Expected expression value + (48, 33) ERROR: Instead found '' + (59, 2) INFO: Compiling void ProjMana2::create_clfx() + (61, 7) ERROR: Illegal operation on this datatype + (65, 4) ERROR: No matching symbol 'ClientEvent' + (70, 2) INFO: Compiling void ProjMana2::scan_cycle() + (72, 18) ERROR: No matching symbol 'GetEntityVelocity' + (75, 4) ERROR: No matching symbol 'XDoDamage' + (76, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (84, 2) INFO: Compiling void ProjMana2::ball_dodamage() + (91, 34) ERROR: Expected expression value + (91, 34) ERROR: Instead found '' + (100, 2) INFO: Compiling void ProjMana2::remove_projectile() + (102, 3) ERROR: No matching symbol 'EmitSound3D' + (103, 3) ERROR: No matching symbol 'ClientEvent' + (104, 3) ERROR: No matching symbol 'DeleteEntity' + (107, 2) INFO: Compiling void ProjMana2::fake_precache() + (110, 19) ERROR: No matching symbol 'SOUND_ZAP' + (113, 2) INFO: Compiling void ProjMana2::func_get_scan_size() + (116, 15) ERROR: No conversion from 'string' to math type available. + (119, 3) WARN: Unreachable code + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_mana2_cl.as + (20, 2) INFO: Compiling void ProjMana2Cl::client_activate() + (22, 15) ERROR: No matching symbol 'param1' + (23, 12) ERROR: No matching symbol 'param2' + (24, 12) ERROR: No matching symbol 'param3' + (25, 15) ERROR: No matching symbol 'param4' + (27, 3) ERROR: No matching symbol 'ClientEffect' + (28, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (31, 2) INFO: Compiling void ProjMana2Cl::end_fx() + (34, 3) ERROR: No matching symbol 'RemoveScript' + (37, 2) INFO: Compiling void ProjMana2Cl::remove_fx() + (40, 3) ERROR: No matching symbol 'RemoveScript' + (43, 2) INFO: Compiling void ProjMana2Cl::reduce_size() + (45, 3) ERROR: Illegal operation on 'string' + (46, 17) ERROR: No conversion from 'string' to 'int' available. + (52, 2) INFO: Compiling void ProjMana2Cl::update_arrow() + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (61, 4) ERROR: No matching symbol 'ClientEffect' + (65, 2) INFO: Compiling void ProjMana2Cl::setup_arrow() + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_mana_drainer.as + (19, 2) INFO: Compiling void ProjManaDrainer::OnRepeatTimer() + (23, 47) ERROR: Expected expression value + (23, 47) ERROR: Instead found '' + (24, 50) ERROR: Expected expression value + (24, 50) ERROR: Instead found '' + (37, 2) INFO: Compiling void ProjManaDrainer::OnRepeatTimer_1() + (39, 3) ERROR: No matching symbol 'SetRepeatDelay' + (41, 19) ERROR: No matching symbol 'HOVER_SOUND' + (48, 2) INFO: Compiling void ProjManaDrainer::OnSpawn() + (61, 7) ERROR: Expected '(' + (61, 7) ERROR: Instead found identifier 'reg' + (62, 10) ERROR: Expected ';' + (62, 10) ERROR: Instead found identifier 'reg' + (63, 7) ERROR: Expected '(' + (63, 7) ERROR: Instead found identifier 'reg' + (64, 7) ERROR: Expected '(' + (64, 7) ERROR: Instead found identifier 'reg' + (65, 7) ERROR: Expected '(' + (65, 7) ERROR: Instead found identifier 'reg' + (66, 7) ERROR: Expected '(' + (66, 7) ERROR: Instead found identifier 'reg' + (67, 7) ERROR: Expected '(' + (67, 7) ERROR: Instead found identifier 'reg' + (68, 7) ERROR: Expected '(' + (68, 7) ERROR: Instead found identifier 'reg' + (74, 2) INFO: Compiling void ProjManaDrainer::game_tossprojectile() + (77, 21) ERROR: No matching symbol 'MP_DRAIN_RATE' + (78, 23) ERROR: No matching symbol 'GetEntityProperty' + (84, 19) ERROR: No matching symbol 'HOVER_SOUND' + (87, 2) INFO: Compiling void ProjManaDrainer::end_life() + (89, 3) ERROR: No matching symbol 'CallExternal' + (91, 19) ERROR: No matching symbol 'HOVER_SOUND' + (92, 28) ERROR: No matching symbol 'SOUND_POP' + (92, 13) ERROR: No matching symbol 'GetOwner' + (93, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (96, 2) INFO: Compiling void ProjManaDrainer::remove_me() + (98, 3) ERROR: No matching symbol 'DeleteEntity' + (99, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_meteor.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_mummy_pike.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_mummy_spear.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_poison.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_poison_cloud.as + (23, 2) INFO: Compiling ProjPoisonCloud::ProjPoisonCloud() + (25, 3) ERROR: No matching symbol 'Precache' + (28, 2) INFO: Compiling void ProjPoisonCloud::OnSpawn() + (46, 10) ERROR: Expected ';' + (46, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 10) ERROR: Expected ';' + (48, 10) ERROR: Instead found identifier 'reg' + (49, 10) ERROR: Expected ';' + (49, 10) ERROR: Instead found identifier 'reg' + (50, 10) ERROR: Expected ';' + (50, 10) ERROR: Instead found identifier 'reg' + (51, 10) ERROR: Expected ';' + (51, 10) ERROR: Instead found identifier 'reg' + (58, 2) INFO: Compiling void ProjPoisonCloud::game_tossprojectile() + (60, 3) ERROR: No matching symbol 'ClientEvent' + (62, 3) ERROR: No matching symbol 'SetUseable' + (63, 3) ERROR: No matching symbol 'game_fall' + (66, 2) INFO: Compiling void ProjPoisonCloud::game_projectile_landed() + (69, 3) ERROR: No matching symbol 'SetExpireTime' + (73, 2) INFO: Compiling void ProjPoisonCloud::projectile_spawn() + (75, 3) ERROR: No matching symbol 'SetName' + (76, 3) ERROR: No matching symbol 'SetWeight' + (77, 3) ERROR: No matching symbol 'SetSize' + (78, 3) ERROR: No matching symbol 'SetValue' + (79, 3) ERROR: No matching symbol 'SetGravity' + (80, 3) ERROR: No matching symbol 'SetGroupable' + (81, 3) ERROR: No matching symbol 'SetHUDSprite' + (82, 3) ERROR: No matching symbol 'SetHUDSprite' + (83, 3) ERROR: No matching symbol 'SetHand' + (86, 2) INFO: Compiling void ProjPoisonCloud::projectile_landed() + (88, 65) ERROR: Expected expression value + (88, 65) ERROR: Instead found '' + (92, 48) ERROR: Expected expression value + (92, 48) ERROR: Instead found '' + (105, 2) INFO: Compiling void ProjPoisonCloud::game_hitnpc() + (116, 57) ERROR: Expected expression value + (116, 57) ERROR: Instead found '' + (120, 2) INFO: Compiling void ProjPoisonCloud::hitwall() + (124, 13) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_poison_cloud_cl.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found reserved keyword 'int' + (9, 15) ERROR: Expected '(' + (9, 15) ERROR: Instead found '.' + (10, 15) ERROR: Expected '(' + (10, 15) ERROR: Instead found '.' + (12, 19) ERROR: Expected identifier + (12, 19) ERROR: Instead found '(' + (91, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_poison_spell.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_poison_spit2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_pole_a.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_pole_dra.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_pole_harpoon.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_pole_holy.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_pole_ph.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_pole_sl.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_pole_sl_cl.as + (15, 2) INFO: Compiling void ProjPoleSlCl::client_activate() + (18, 32) ERROR: Expected expression value + (18, 32) ERROR: Instead found '' + (20, 36) ERROR: Expected expression value + (20, 36) ERROR: Instead found '' + (22, 39) ERROR: Expected expression value + (22, 39) ERROR: Instead found '' + (32, 2) INFO: Compiling void ProjPoleSlCl::end_fx() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void ProjPoleSlCl::remove_fx() + (39, 3) ERROR: No matching symbol 'RemoveScript' + (42, 2) INFO: Compiling void ProjPoleSlCl::do_sprites() + (46, 3) ERROR: Illegal operation on 'string' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (52, 2) INFO: Compiling void ProjPoleSlCl::update_poof() + (55, 21) ERROR: No conversion from 'string' to 'int' available. + (56, 3) ERROR: Illegal operation on 'string' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (61, 2) INFO: Compiling void ProjPoleSlCl::setup_poof() + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_pole_spear.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_pole_ti.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_pole_trident.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_server_arrow.as + (95, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_simple_cl.as + (39, 2) INFO: Compiling void ProjSimpleCl::client_activate() + (41, 3) ERROR: No matching symbol 'SetCallback' + (42, 14) ERROR: No matching symbol 'param1' + (43, 18) ERROR: No matching symbol 'param2' + (44, 26) ERROR: No matching symbol 'param3' + (45, 19) ERROR: No matching symbol 'param4' + (46, 18) ERROR: No matching symbol 'param5' + (47, 23) ERROR: No matching symbol 'param6' + (48, 16) ERROR: No matching symbol 'param7' + (57, 15) ERROR: No matching symbol 'GetToken' + (58, 15) ERROR: No matching symbol 'GetToken' + (59, 17) ERROR: No matching symbol 'GetToken' + (60, 17) ERROR: No matching symbol 'GetToken' + (61, 16) ERROR: No matching symbol 'GetToken' + (62, 17) ERROR: No matching symbol 'GetToken' + (64, 19) ERROR: No conversion from 'string' to 'int' available. + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: Expression doesn't form a function call. 'FX_MAX_DURATION' evaluates to the non-function type '' + (72, 2) INFO: Compiling void ProjSimpleCl::end_fx() + (74, 7) ERROR: Expression must be of boolean type, instead found 'string' + (76, 8) ERROR: No matching symbol 'param1' + (80, 8) ERROR: No matching symbol 'param1' + (84, 8) ERROR: No matching symbol 'param1' + (88, 9) ERROR: No matching symbol 'L_ABORT_REMOVE' + (91, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (95, 3) ERROR: Expression doesn't form a function call. 'FX_FREMOVE_DELAY' evaluates to the non-function type '' + (98, 2) INFO: Compiling void ProjSimpleCl::remove_fx() + (100, 3) ERROR: No matching symbol 'RemoveScript' + (103, 2) INFO: Compiling void ProjSimpleCl::ext_scale() + (105, 14) ERROR: No matching symbol 'param1' + (109, 2) INFO: Compiling void ProjSimpleCl::ext_lighten() + (111, 16) ERROR: No matching symbol 'param1' + (115, 2) INFO: Compiling void ProjSimpleCl::ext_touch() + (117, 27) ERROR: Expected expression value + (117, 27) ERROR: Instead found '' + (121, 2) INFO: Compiling void ProjSimpleCl::ext_hitnpc() + (123, 21) ERROR: No matching symbol 'param1' + (127, 2) INFO: Compiling void ProjSimpleCl::ext_update() + (129, 7) ERROR: Illegal operation on this datatype + (131, 15) ERROR: No matching symbol 'param1' + (132, 15) ERROR: No matching symbol 'param2' + (133, 17) ERROR: No matching symbol 'param3' + (136, 2) INFO: Compiling void ProjSimpleCl::make_clfx_proj() + (138, 3) ERROR: No matching symbol 'ClientEffect' + (139, 3) ERROR: No matching symbol 'ClientEffect' + (140, 3) ERROR: No matching symbol 'ClientEffect' + (141, 3) ERROR: No matching symbol 'ClientEffect' + (142, 3) ERROR: No matching symbol 'ClientEffect' + (143, 3) ERROR: No matching symbol 'ClientEffect' + (144, 3) ERROR: No matching symbol 'ClientEffect' + (145, 7) ERROR: Expression must be of boolean type, instead found 'string' + (147, 4) ERROR: No matching symbol 'ClientEffect' + (151, 4) ERROR: No matching symbol 'ClientEffect' + (153, 3) ERROR: No matching symbol 'ClientEffect' + (154, 3) ERROR: No matching symbol 'ClientEffect' + (155, 3) ERROR: No matching symbol 'ClientEffect' + (156, 3) ERROR: No matching symbol 'ClientEffect' + (159, 2) INFO: Compiling void ProjSimpleCl::update_clfx_proj() + (193, 31) ERROR: Expected expression value + (193, 31) ERROR: Instead found '' + (229, 7) ERROR: Expected expression value + (229, 7) ERROR: Instead found reserved keyword 'else' + (247, 2) INFO: Compiling void ProjSimpleCl::fx_motion_blur() + (250, 3) ERROR: No matching symbol 'ClientEffect' + (253, 2) INFO: Compiling void ProjSimpleCl::setup_motion_blur() + (255, 3) ERROR: No matching symbol 'ClientEffect' + (256, 3) ERROR: No matching symbol 'ClientEffect' + (257, 3) ERROR: No matching symbol 'ClientEffect' + (258, 3) ERROR: No matching symbol 'ClientEffect' + (259, 3) ERROR: No matching symbol 'ClientEffect' + (260, 3) ERROR: No matching symbol 'ClientEffect' + (261, 3) ERROR: No matching symbol 'ClientEffect' + (262, 3) ERROR: No matching symbol 'ClientEffect' + (265, 2) INFO: Compiling void ProjSimpleCl::collide_clfx_proj() + (280, 42) ERROR: Expected expression value + (280, 42) ERROR: Instead found '' + (295, 46) ERROR: Expected expression value + (295, 46) ERROR: Instead found '' + (298, 47) ERROR: Expected expression value + (298, 47) ERROR: Instead found '' + (314, 2) INFO: Compiling void ProjSimpleCl::find_nearest_bone() + (318, 46) ERROR: Expected expression value + (318, 46) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_slime_jet_cl.as + (22, 2) INFO: Compiling void ProjSlimeJetCl::client_activate() + (36, 51) ERROR: Expected expression value + (36, 51) ERROR: Instead found '' + (50, 2) INFO: Compiling void ProjSlimeJetCl::fx_loop() + (54, 42) ERROR: Expected expression value + (54, 42) ERROR: Instead found '' + (58, 2) INFO: Compiling void ProjSlimeJetCl::end_fx() + (60, 7) ERROR: Illegal operation on this datatype + (62, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (65, 2) INFO: Compiling void ProjSlimeJetCl::remove_me() + (67, 3) ERROR: No matching symbol 'RemoveScript' + (70, 2) INFO: Compiling void ProjSlimeJetCl::game_prerender() + (73, 37) ERROR: Expected expression value + (73, 37) ERROR: Instead found '' + (74, 28) ERROR: Expected expression value + (74, 28) ERROR: Instead found '' + (78, 2) INFO: Compiling void ProjSlimeJetCl::setup_sprite() + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_snow_ball.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_snow_ball2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_spore.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_sprite.as + (10, 2) INFO: Compiling void ProjSprite::OnSpawn() + (22, 7) ERROR: Expected '(' + (22, 7) ERROR: Instead found identifier 'reg' + (23, 7) ERROR: Expected '(' + (23, 7) ERROR: Instead found identifier 'reg' + (24, 7) ERROR: Expected '(' + (24, 7) ERROR: Instead found identifier 'reg' + (25, 7) ERROR: Expected '(' + (25, 7) ERROR: Instead found identifier 'reg' + (26, 7) ERROR: Expected '(' + (26, 7) ERROR: Instead found identifier 'reg' + (27, 7) ERROR: Expected '(' + (27, 7) ERROR: Instead found identifier 'reg' + (28, 7) ERROR: Expected '(' + (28, 7) ERROR: Instead found identifier 'reg' + (35, 2) INFO: Compiling void ProjSprite::game_tossprojectile() + (37, 3) ERROR: No matching symbol 'ClientEvent' + (51, 2) INFO: Compiling void ProjSprite::game_dodamage() + (53, 31) ERROR: No matching symbol 'param4' + (53, 19) ERROR: No matching symbol 'GetOwner' + (54, 23) ERROR: No matching symbol 'param1' + (55, 23) ERROR: No matching symbol 'param2' + (56, 23) ERROR: No matching symbol 'param3' + (57, 23) ERROR: No matching symbol 'param4' + (58, 3) ERROR: No matching symbol 'CallExternal' + (61, 2) INFO: Compiling void ProjSprite::proj_landed() + (63, 3) ERROR: No matching symbol 'ClientEvent' + (64, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (67, 2) INFO: Compiling void ProjSprite::remove_me() + (69, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_sprite_cl.as + (19, 2) INFO: Compiling void ProjSpriteCl::client_activate() + (22, 34) ERROR: Expected expression value + (22, 34) ERROR: Instead found '' + (23, 31) ERROR: Expected expression value + (23, 31) ERROR: Instead found '' + (24, 31) ERROR: Expected expression value + (24, 31) ERROR: Instead found '' + (30, 2) INFO: Compiling void ProjSpriteCl::update_proj_sprite() + (34, 77) ERROR: Expected expression value + (34, 77) ERROR: Instead found '' + (35, 79) ERROR: Expected expression value + (35, 79) ERROR: Instead found '' + (43, 2) INFO: Compiling void ProjSpriteCl::proj_landed() + (46, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 2) INFO: Compiling void ProjSpriteCl::remove_fx() + (51, 3) ERROR: No matching symbol 'RemoveScript' + (54, 2) INFO: Compiling void ProjSpriteCl::setup_proj_sprite() + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_ss.as + (100, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_staff_fire_bomb.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_staff_icelance.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_staff_ice_bolt.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_staff_ice_bolt2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_stone.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_tele_fx.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_thorn.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_troll_lightning.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_troll_rock.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_troll_rock_fire.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_ub.as + (98, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_ub_cl.as + (14, 2) INFO: Compiling void ProjUbCl::client_activate() + (16, 3) ERROR: No matching symbol 'ClientEffect' + (17, 3) ERROR: No matching symbol 'ClientEffect' + (18, 3) ERROR: No matching symbol 'EmitSound3D' + (19, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (22, 2) INFO: Compiling void ProjUbCl::remove_fx() + (24, 3) ERROR: No matching symbol 'RemoveScript' + (27, 2) INFO: Compiling void ProjUbCl::make_sprite() + (29, 3) ERROR: No matching symbol 'ClientEffect' + (30, 3) ERROR: No matching symbol 'ClientEffect' + (31, 3) ERROR: No matching symbol 'ClientEffect' + (32, 3) ERROR: No matching symbol 'ClientEffect' + (33, 3) ERROR: No matching symbol 'ClientEffect' + (34, 3) ERROR: No matching symbol 'ClientEffect' + (35, 3) ERROR: No matching symbol 'ClientEffect' + (36, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_volcano.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_volcano_fixed.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_volcano_svr.as + (100, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\proj_web.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\ring_light2.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_acid_xolt.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_blizzard.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_conjure_holy_hammer.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_conjure_venom_claws.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_fire_ball.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_fire_dart.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_fire_wall.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_frost_xolt.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_glow.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_healing_circle_920.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_healing_wave.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_ice_blast.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_ice_lance.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_ice_shield.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_ice_shield_lesser.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_ice_wall.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_lightning_chain.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_lightning_disc.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_lightning_storm.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_lightning_weak.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_poison.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_poison_cloud.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_rejuvenate.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_summon_bear1.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_summon_fangtooth.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_summon_guard.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_summon_rat.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_summon_undead.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_test_spell.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_trollcano.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_turn_undead.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll2_volcano.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_acid_xolt.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_blizzard.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_conjure_holy_hammer.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_conjure_venom_claws.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_fire_ball.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_fire_dart.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_fire_wall.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_glow.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_healing_circle.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_healing_wave.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_ice_blast.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_ice_bolt.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_ice_lance.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_ice_shield.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_ice_shield_lesser.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_ice_wall.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_ice_xolt.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_lightning_chain.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_lightning_disc.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_lightning_storm.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_lightning_weak.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_poison.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_poison_cloud.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_rejuvenate.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_summon_bear1.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_summon_fangtooth.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_summon_guard.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_summon_rat.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_summon_undead.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_turn_undead.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\scroll_volcano.as + (92, 2) ERROR: A function with the same name and parameters already exists + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_axe_snakeskin.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_back.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_back_holster.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_back_snakeskin.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_base.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_belt.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_belt_holster.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_belt_holster_snakeskin.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_belt_snakeskin.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_blunt_snakeskin.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_dagger.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_dagger_snakeskin.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_holster_snakeskin.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\sheath_spellbook.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\shields_base.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\shields_buckler.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\shields_f.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\shields_ironshield.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\shields_lironshield.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\shields_rune.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\shields_urdual.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\shields_wooden.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\skin_bear.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\skin_boar.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\skin_boar_heavy.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\skin_ratpelt.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_base.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_bone_blade.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_craftedknife.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_craftedknife2.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_craftedknife3.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_craftedknife4.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_cre.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_crec.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_cref.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_crel.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_crep.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_dagger.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_dirk.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_eth.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_fangstooth.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_flamelick.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_frozentongueonflagpole.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_huggerdagger.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_huggerdagger2.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_huggerdagger3.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_huggerdagger4.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_knife.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_k_fire.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_nh.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_nh_cl.as + (15, 2) INFO: Compiling SmallarmsNhCl::SmallarmsNhCl() + (17, 3) ERROR: No matching symbol 'Precache' + (20, 2) INFO: Compiling void SmallarmsNhCl::client_activate() + (22, 33) ERROR: Expected expression value + (22, 33) ERROR: Instead found '' + (25, 2) INFO: Compiling void SmallarmsNhCl::shadow_knife() + (27, 18) ERROR: No matching symbol 'param1' + (28, 15) ERROR: No matching symbol 'param2' + (29, 18) ERROR: No matching symbol 'param3' + (30, 14) ERROR: No matching symbol 'param4' + (31, 18) ERROR: No matching symbol 'param5' + (33, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (36, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (39, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (40, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (41, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (42, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (45, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 2) INFO: Compiling void SmallarmsNhCl::shadow_knife_fx() + (51, 3) ERROR: No matching symbol 'ClientEffect' + (54, 2) INFO: Compiling void SmallarmsNhCl::vanish_fx() + (58, 21) ERROR: No conversion from 'string' to 'double' available. + (61, 4) ERROR: No matching symbol 'EmitSound3D' + (63, 20) ERROR: No conversion from 'string' to 'double' available. + (65, 4) ERROR: No matching symbol 'EmitSound3D' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (76, 2) INFO: Compiling void SmallarmsNhCl::vanish_sprite() + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (91, 2) INFO: Compiling void SmallarmsNhCl::setup_knife() + (99, 79) ERROR: Expected expression value + (99, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_nh_cl_alt.as + (15, 2) INFO: Compiling SmallarmsNhClAlt::SmallarmsNhClAlt() + (17, 3) ERROR: No matching symbol 'Precache' + (20, 2) INFO: Compiling void SmallarmsNhClAlt::client_activate() + (22, 33) ERROR: Expected expression value + (22, 33) ERROR: Instead found '' + (25, 2) INFO: Compiling void SmallarmsNhClAlt::shadow_knife() + (31, 37) ERROR: Expected expression value + (31, 37) ERROR: Instead found '' + (51, 2) INFO: Compiling void SmallarmsNhClAlt::shadow_knife_fx() + (53, 3) ERROR: No matching symbol 'ClientEffect' + (56, 2) INFO: Compiling void SmallarmsNhClAlt::vanish_fx() + (60, 21) ERROR: No conversion from 'string' to 'double' available. + (63, 4) ERROR: No matching symbol 'EmitSound3D' + (65, 20) ERROR: No conversion from 'string' to 'double' available. + (67, 4) ERROR: No matching symbol 'EmitSound3D' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (78, 2) INFO: Compiling void SmallarmsNhClAlt::vanish_sprite() + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (93, 2) INFO: Compiling void SmallarmsNhClAlt::setup_knife() + (101, 79) ERROR: Expected expression value + (101, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_rd.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_rknife.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_royaldagger.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_stiletto.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\smallarms_vt.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_base_onehanded.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_base_twohanded.as + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_bastardsword.as + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_blood_drinker.as + (207, 2) ERROR: Expected method or property + (207, 2) ERROR: Instead found reserved keyword 'void' + (219, 1) ERROR: Unexpected token '}' + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_dynamic.as + (61, 2) ERROR: Expected method or property + (61, 2) ERROR: Instead found reserved keyword 'void' + (74, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_frostblade55.as + (188, 2) ERROR: Expected method or property + (188, 2) ERROR: Instead found reserved keyword 'void' + (247, 1) ERROR: Unexpected token '}' + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_fshard1.as + (235, 2) ERROR: Expected method or property + (235, 2) ERROR: Instead found reserved keyword 'void' + (290, 1) ERROR: Unexpected token '}' + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_fshard2.as + (235, 2) ERROR: Expected method or property + (235, 2) ERROR: Instead found reserved keyword 'void' + (290, 1) ERROR: Unexpected token '}' + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_fshard3.as + (235, 2) ERROR: Expected method or property + (235, 2) ERROR: Instead found reserved keyword 'void' + (290, 1) ERROR: Unexpected token '}' + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_fshard4.as + (235, 2) ERROR: Expected method or property + (235, 2) ERROR: Instead found reserved keyword 'void' + (290, 1) ERROR: Unexpected token '}' + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_fshard5.as + (235, 2) ERROR: Expected method or property + (235, 2) ERROR: Instead found reserved keyword 'void' + (290, 1) ERROR: Unexpected token '}' + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_gb.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_giceblade.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_iceblade.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_katana.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_katana2.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_katana3.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_katana4.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_liceblade.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_longsword.as + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_lostblade.as + (8, 2) INFO: Compiling SwordsLostblade::SwordsLostblade() + (10, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_m2sword.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_msword.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_nkatana.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_novablade12.as + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_poison1.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_rsword.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_rune_green.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_scimitar.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_sf.as + (250, 2) ERROR: Expected method or property + (250, 2) ERROR: Instead found reserved keyword 'void' + (438, 1) ERROR: Unexpected token '}' + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_shortsword.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_skullblade.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_skullblade2.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_skullblade3.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_skullblade4.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_spiderblade.as + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_testskin.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_testsub.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_ub.as + (207, 2) ERROR: Expected method or property + (207, 2) ERROR: Instead found reserved keyword 'void' + (369, 1) ERROR: Unexpected token '}' + (162, 2) ERROR: Expected method or property + (162, 2) ERROR: Instead found reserved keyword 'void' + (185, 1) ERROR: Unexpected token '}' + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_vb.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_volcano.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\swords_wolvesbane.as + (10, 2) ERROR: Expected method or property + (10, 2) ERROR: Instead found reserved keyword 'int' + (12, 10) ERROR: Expected identifier + (12, 10) ERROR: Instead found '(' + (141, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\tutorial_key.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/items\unknown_item.as + (124, 2) ERROR: A function with the same name and parameters already exists + (229, 2) ERROR: A function with the same name and parameters already exists + (238, 2) ERROR: A function with the same name and parameters already exists + (247, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/joe\appatruth.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/joe\bartifact.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/joe\ignite.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\bat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\boar_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\metalboar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\metalspider.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\spider_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\stoneboar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\stonespider.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\troll_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude\troll_djinn.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosprelude2\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\keledros.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\keledros_cl_cast.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found identifier 'string' + (9, 15) ERROR: Expected '(' + (9, 15) ERROR: Instead found '.' + (10, 15) ERROR: Expected '(' + (10, 15) ERROR: Instead found '.' + (12, 16) ERROR: Expected identifier + (12, 16) ERROR: Instead found '(' + (55, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\spawner1.as + (10, 2) INFO: Compiling Spawner1::Spawner1() + (12, 3) ERROR: No matching symbol 'SetName' + (15, 2) INFO: Compiling void Spawner1::spawn_undead() + (17, 7) ERROR: No matching symbol 'ONE_IS_DEAD' + (19, 53) ERROR: No matching symbol 'GetOwner' + (21, 3) ERROR: No matching symbol 'CallExternal' + (15, 2) INFO: Compiling void SpawnerBase::make_undead() + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\spawner2.as + (10, 2) INFO: Compiling Spawner2::Spawner2() + (12, 3) ERROR: No matching symbol 'SetName' + (15, 2) INFO: Compiling void Spawner2::spawn_undead() + (17, 7) ERROR: No matching symbol 'TWO_IS_DEAD' + (19, 53) ERROR: No matching symbol 'GetOwner' + (21, 3) ERROR: No matching symbol 'CallExternal' + (15, 2) INFO: Compiling void SpawnerBase::make_undead() + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\spawner3.as + (10, 2) INFO: Compiling Spawner3::Spawner3() + (12, 3) ERROR: No matching symbol 'SetName' + (15, 2) INFO: Compiling void Spawner3::spawn_undead() + (17, 7) ERROR: No matching symbol 'THREE_IS_DEAD' + (19, 53) ERROR: No matching symbol 'GetOwner' + (21, 3) ERROR: No matching symbol 'CallExternal' + (15, 2) INFO: Compiling void SpawnerBase::make_undead() + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\spawner4.as + (10, 2) INFO: Compiling Spawner4::Spawner4() + (12, 3) ERROR: No matching symbol 'SetName' + (15, 2) INFO: Compiling void Spawner4::spawn_undead() + (17, 7) ERROR: No matching symbol 'FOUR_IS_DEAD' + (19, 53) ERROR: No matching symbol 'GetOwner' + (21, 3) ERROR: No matching symbol 'CallExternal' + (15, 2) INFO: Compiling void SpawnerBase::make_undead() + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\spawner5.as + (10, 2) INFO: Compiling Spawner5::Spawner5() + (12, 3) ERROR: No matching symbol 'SetName' + (15, 2) INFO: Compiling void Spawner5::spawn_undead() + (17, 54) ERROR: No matching symbol 'GetOwner' + (15, 2) INFO: Compiling void SpawnerBase::make_undead() + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\spawner6.as + (10, 2) INFO: Compiling Spawner6::Spawner6() + (12, 3) ERROR: No matching symbol 'SetName' + (15, 2) INFO: Compiling void Spawner6::spawn_undead() + (17, 54) ERROR: No matching symbol 'GetOwner' + (15, 2) INFO: Compiling void SpawnerBase::make_undead() + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/keledrosruins\spawner_base.as + (15, 2) INFO: Compiling void SpawnerBase::make_undead() + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'l' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/kfortress\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/kfortress\nh_appear.as + (26, 2) INFO: Compiling void NhAppear::client_activate() + (31, 12) ERROR: No matching symbol 'param1' + (34, 3) ERROR: No matching symbol 'ClientEffect' + (35, 3) ERROR: No matching symbol 'ClientEffect' + (38, 3) ERROR: No matching symbol 'EmitSound3D' + (39, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (40, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (43, 2) INFO: Compiling void NhAppear::spookie_sound() + (45, 3) ERROR: No matching symbol 'EmitSound3D' + (48, 2) INFO: Compiling void NhAppear::close_effect() + (51, 3) ERROR: No matching symbol 'EmitSound3D' + (53, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (54, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (57, 2) INFO: Compiling void NhAppear::ting_sound() + (60, 52) ERROR: Expected expression value + (60, 52) ERROR: Instead found '' + (65, 2) INFO: Compiling void NhAppear::glitter_effect() + (69, 38) ERROR: Expected expression value + (69, 38) ERROR: Instead found '' + (73, 2) INFO: Compiling void NhAppear::end_effect() + (75, 3) ERROR: No matching symbol 'RemoveScript' + (78, 2) INFO: Compiling void NhAppear::sprite_vacuum() + (87, 37) ERROR: Expected expression value + (87, 37) ERROR: Instead found '' + (95, 2) INFO: Compiling void NhAppear::sprite_sphere() + (97, 3) ERROR: No matching symbol 'ClientEffect' + (100, 2) INFO: Compiling void NhAppear::setup_knife() + (102, 3) ERROR: No matching symbol 'ClientEffect' + (103, 3) ERROR: No matching symbol 'ClientEffect' + (104, 3) ERROR: No matching symbol 'ClientEffect' + (105, 3) ERROR: No matching symbol 'ClientEffect' + (106, 3) ERROR: No matching symbol 'ClientEffect' + (107, 3) ERROR: No matching symbol 'ClientEffect' + (108, 3) ERROR: No matching symbol 'ClientEffect' + (109, 3) ERROR: No matching symbol 'ClientEffect' + (112, 2) INFO: Compiling void NhAppear::setup_vac_sprite() + (127, 79) ERROR: Expected expression value + (127, 79) ERROR: Instead found '' + (137, 2) INFO: Compiling void NhAppear::setup_glitter() + (139, 3) ERROR: No matching symbol 'ClientEffect' + (140, 3) ERROR: No matching symbol 'ClientEffect' + (141, 3) ERROR: No matching symbol 'ClientEffect' + (142, 3) ERROR: No matching symbol 'ClientEffect' + (143, 3) ERROR: No matching symbol 'ClientEffect' + (144, 3) ERROR: No matching symbol 'ClientEffect' + (145, 3) ERROR: No matching symbol 'ClientEffect' + (146, 3) ERROR: No matching symbol 'ClientEffect' + (147, 3) ERROR: No matching symbol 'ClientEffect' + (148, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/kfortress\nh_appear_cl.as + (25, 2) INFO: Compiling void NhAppearCl::client_activate() + (29, 12) ERROR: No matching symbol 'param1' + (32, 7) ERROR: No matching symbol 'param2' + (34, 27) ERROR: No matching symbol 'param2' + (36, 3) ERROR: No matching symbol 'ClientEffect' + (37, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (39, 4) ERROR: No matching symbol 'ClientEffect' + (43, 3) ERROR: No matching symbol 'EmitSound3D' + (44, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (45, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (48, 2) INFO: Compiling void NhAppearCl::spookie_sound() + (50, 3) ERROR: No matching symbol 'EmitSound3D' + (53, 2) INFO: Compiling void NhAppearCl::close_effect() + (56, 3) ERROR: No matching symbol 'EmitSound3D' + (58, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (60, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (62, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (65, 2) INFO: Compiling void NhAppearCl::glitter_effect() + (69, 38) ERROR: Expected expression value + (69, 38) ERROR: Instead found '' + (73, 2) INFO: Compiling void NhAppearCl::ting_sound() + (76, 52) ERROR: Expected expression value + (76, 52) ERROR: Instead found '' + (81, 2) INFO: Compiling void NhAppearCl::end_effect() + (83, 3) ERROR: No matching symbol 'RemoveScript' + (86, 2) INFO: Compiling void NhAppearCl::sprite_vacuum() + (95, 37) ERROR: Expected expression value + (95, 37) ERROR: Instead found '' + (102, 2) INFO: Compiling void NhAppearCl::sprite_sphere() + (104, 3) ERROR: No matching symbol 'ClientEffect' + (107, 2) INFO: Compiling void NhAppearCl::setup_knife() + (109, 3) ERROR: No matching symbol 'ClientEffect' + (110, 3) ERROR: No matching symbol 'ClientEffect' + (111, 3) ERROR: No matching symbol 'ClientEffect' + (112, 3) ERROR: No matching symbol 'ClientEffect' + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (119, 2) INFO: Compiling void NhAppearCl::setup_vac_sprite() + (134, 79) ERROR: Expected expression value + (134, 79) ERROR: Instead found '' + (144, 2) INFO: Compiling void NhAppearCl::setup_glitter() + (146, 3) ERROR: No matching symbol 'ClientEffect' + (147, 3) ERROR: No matching symbol 'ClientEffect' + (148, 3) ERROR: No matching symbol 'ClientEffect' + (149, 3) ERROR: No matching symbol 'ClientEffect' + (150, 3) ERROR: No matching symbol 'ClientEffect' + (151, 3) ERROR: No matching symbol 'ClientEffect' + (152, 3) ERROR: No matching symbol 'ClientEffect' + (153, 3) ERROR: No matching symbol 'ClientEffect' + (154, 3) ERROR: No matching symbol 'ClientEffect' + (155, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/littleg\melanion.as + (23, 2) INFO: Compiling void Melanion::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetHealth' + (27, 3) ERROR: No matching symbol 'SetGold' + (28, 3) ERROR: No matching symbol 'SetName' + (29, 3) ERROR: No matching symbol 'SetWidth' + (30, 3) ERROR: No matching symbol 'SetHeight' + (31, 3) ERROR: No matching symbol 'SetRace' + (32, 3) ERROR: No matching symbol 'SetRoam' + (33, 3) ERROR: No matching symbol 'SetModel' + (34, 3) ERROR: No matching symbol 'SetInvincible' + (36, 3) ERROR: No matching symbol 'CatchSpeech' + (37, 3) ERROR: No matching symbol 'CatchSpeech' + (45, 2) INFO: Compiling void Melanion::say_hi() + (47, 7) ERROR: No matching symbol 'param1' + (49, 8) ERROR: No matching symbol 'GetEntityRange' + (54, 8) ERROR: No matching symbol 'EXIT_SUB' + (55, 7) ERROR: Illegal operation on this datatype + (57, 4) ERROR: No matching symbol 'PlayAnim' + (58, 4) ERROR: No matching symbol 'SayText' + (60, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (62, 25) ERROR: No matching symbol 'GetEntityName' + (63, 4) ERROR: No matching symbol 'SayText' + (67, 2) INFO: Compiling void Melanion::say_job() + (69, 7) ERROR: No matching symbol 'param1' + (71, 8) ERROR: No matching symbol 'GetEntityRange' + (76, 8) ERROR: No matching symbol 'EXIT_SUB' + (77, 7) ERROR: Illegal operation on this datatype + (78, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (79, 3) ERROR: No matching symbol 'SayText' + (80, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (83, 2) INFO: Compiling void Melanion::say_bothered1a() + (85, 3) ERROR: No matching symbol 'PlayAnim' + (86, 3) ERROR: No matching symbol 'SayText' + (87, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (90, 2) INFO: Compiling void Melanion::story() + (92, 3) ERROR: No matching symbol 'PlayAnim' + (93, 3) ERROR: No matching symbol 'SayText' + (94, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (97, 2) INFO: Compiling void Melanion::say_story2() + (99, 3) ERROR: No matching symbol 'PlayAnim' + (100, 3) ERROR: No matching symbol 'SayText' + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (104, 2) INFO: Compiling void Melanion::say_story3() + (106, 3) ERROR: No matching symbol 'PlayAnim' + (107, 3) ERROR: No matching symbol 'SayText' + (108, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (111, 2) INFO: Compiling void Melanion::say_story4() + (113, 3) ERROR: No matching symbol 'PlayAnim' + (114, 3) ERROR: No matching symbol 'SayText' + (115, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (118, 2) INFO: Compiling void Melanion::say_story5() + (120, 3) ERROR: No matching symbol 'PlayAnim' + (121, 3) ERROR: No matching symbol 'SayText' + (122, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (125, 2) INFO: Compiling void Melanion::say_story6() + (127, 3) ERROR: No matching symbol 'PlayAnim' + (128, 3) ERROR: No matching symbol 'SayText' + (129, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (132, 2) INFO: Compiling void Melanion::say_story7() + (134, 3) ERROR: No matching symbol 'PlayAnim' + (135, 3) ERROR: No matching symbol 'SayText' + (139, 2) INFO: Compiling void Melanion::give_book() + (141, 3) ERROR: No matching symbol 'ReceiveOffer' + (142, 3) ERROR: No matching symbol 'PlayAnim' + (143, 3) ERROR: No matching symbol 'SayText' + (144, 3) ERROR: No matching symbol 'Say' + (145, 21) ERROR: No matching symbol 'param1' + (147, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (150, 2) INFO: Compiling void Melanion::recvbook_2() + (153, 3) ERROR: No matching symbol 'CallExternal' + (154, 3) ERROR: No matching symbol 'SayText' + (159, 2) INFO: Compiling void Melanion::game_menu_getoptions() + (163, 11) ERROR: Expected ';' + (163, 11) ERROR: Instead found identifier 'reg' + (164, 11) ERROR: Expected ';' + (164, 11) ERROR: Instead found identifier 'reg' + (165, 11) ERROR: Expected ';' + (165, 11) ERROR: Instead found identifier 'reg' + (166, 11) ERROR: Expected ';' + (166, 11) ERROR: Instead found identifier 'reg' + (173, 11) ERROR: Expected ';' + (173, 11) ERROR: Instead found identifier 'reg' + (174, 11) ERROR: Expected ';' + (174, 11) ERROR: Instead found identifier 'reg' + (175, 11) ERROR: Expected ';' + (175, 11) ERROR: Instead found identifier 'reg' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/littleg\salandria.as + (20, 2) INFO: Compiling void Salandria::OnSpawn() + (22, 3) ERROR: No matching symbol 'SetHealth' + (23, 3) ERROR: No matching symbol 'SetGold' + (24, 3) ERROR: No matching symbol 'SetName' + (25, 3) ERROR: No matching symbol 'SetWidth' + (26, 3) ERROR: No matching symbol 'SetHeight' + (27, 3) ERROR: No matching symbol 'SetRace' + (28, 3) ERROR: No matching symbol 'SetRoam' + (29, 3) ERROR: No matching symbol 'SetModel' + (30, 3) ERROR: No matching symbol 'SetInvincible' + (32, 3) ERROR: No matching symbol 'CatchSpeech' + (33, 3) ERROR: No matching symbol 'CatchSpeech' + (34, 3) ERROR: No matching symbol 'CatchSpeech' + (35, 3) ERROR: No matching symbol 'CatchSpeech' + (38, 2) INFO: Compiling void Salandria::say_job() + (40, 7) ERROR: No matching symbol 'param1' + (42, 8) ERROR: No matching symbol 'GetEntityRange' + (47, 8) ERROR: No matching symbol 'EXIT_SUB' + (51, 2) INFO: Compiling void Salandria::say_rumor() + (53, 7) ERROR: No matching symbol 'param1' + (55, 8) ERROR: No matching symbol 'GetEntityRange' + (60, 8) ERROR: No matching symbol 'EXIT_SUB' + (64, 2) INFO: Compiling void Salandria::say_hi() + (66, 7) ERROR: No matching symbol 'param1' + (68, 8) ERROR: No matching symbol 'GetEntityRange' + (73, 8) ERROR: No matching symbol 'EXIT_SUB' + (74, 7) ERROR: Illegal operation on this datatype + (78, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (84, 2) INFO: Compiling void Salandria::say_thanx() + (86, 3) ERROR: No matching symbol 'SayText' + (89, 2) INFO: Compiling void Salandria::say_hi_normal() + (91, 3) ERROR: No matching symbol 'SayText' + (92, 3) ERROR: No matching symbol 'SetName' + (93, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (96, 2) INFO: Compiling void Salandria::say_hi2() + (98, 12) ERROR: No matching symbol 'FindEntityByName' + (99, 3) ERROR: No matching symbol 'CallExternal' + (100, 3) ERROR: No matching symbol 'SayText' + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (104, 2) INFO: Compiling void Salandria::say_hi3() + (106, 3) ERROR: No matching symbol 'SayText' + (107, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (110, 2) INFO: Compiling void Salandria::say_hi4() + (112, 3) ERROR: No matching symbol 'SayText' + (113, 3) ERROR: No matching symbol 'SayText' + (117, 2) INFO: Compiling void Salandria::say_what() + (119, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (120, 3) ERROR: No matching symbol 'SayText' + (121, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (124, 2) INFO: Compiling void Salandria::say_what2() + (126, 3) ERROR: No matching symbol 'SayText' + (127, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (130, 2) INFO: Compiling void Salandria::say_what3() + (132, 3) ERROR: No matching symbol 'SayText' + (135, 2) INFO: Compiling void Salandria::say_huh() + (137, 3) ERROR: No matching symbol 'SayText' + (145, 2) INFO: Compiling void Salandria::say_rumour() + (147, 7) ERROR: No matching symbol 'param1' + (149, 8) ERROR: No matching symbol 'GetEntityRange' + (154, 8) ERROR: No matching symbol 'EXIT_SUB' + (155, 3) ERROR: No matching symbol 'PlayAnim' + (156, 3) ERROR: No matching symbol 'SayText' + (159, 2) INFO: Compiling void Salandria::game_menu_getoptions() + (163, 11) ERROR: Expected ';' + (163, 11) ERROR: Instead found identifier 'reg' + (164, 11) ERROR: Expected ';' + (164, 11) ERROR: Instead found identifier 'reg' + (165, 11) ERROR: Expected ';' + (165, 11) ERROR: Instead found identifier 'reg' + (170, 11) ERROR: Expected ';' + (170, 11) ERROR: Instead found identifier 'reg' + (171, 11) ERROR: Expected ';' + (171, 11) ERROR: Instead found identifier 'reg' + (172, 11) ERROR: Expected ';' + (172, 11) ERROR: Instead found identifier 'reg' + (176, 11) ERROR: Expected ';' + (176, 11) ERROR: Instead found identifier 'reg' + (177, 11) ERROR: Expected ';' + (177, 11) ERROR: Instead found identifier 'reg' + (178, 11) ERROR: Expected ';' + (178, 11) ERROR: Instead found identifier 'reg' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\ice_mage_image.as + (21, 2) INFO: Compiling void IceMageImage::OnSpawn() + (23, 3) ERROR: No matching symbol 'SetModel' + (24, 3) ERROR: No matching symbol 'SetName' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetWidth' + (28, 3) ERROR: No matching symbol 'SetHeight' + (29, 3) ERROR: No matching symbol 'SetProp' + (30, 3) ERROR: No matching symbol 'SetNoPush' + (31, 3) ERROR: No matching symbol 'SetSayTextRange' + (33, 3) ERROR: No matching signatures to 'EmitSound(const int, const int, const string)' + (33, 3) INFO: Candidates are: + (33, 3) INFO: void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int) + (33, 3) INFO: Rejected due to not enough parameters + (33, 3) INFO: void EmitSound(CBaseEntity@, const string&in) + (33, 3) INFO: void EmitSound(CBaseEntity@, const string&in, float) + (33, 3) INFO: Rejected due to type mismatch at positional parameter 1 + (34, 3) ERROR: No matching symbol 'SetIdleAnim' + (37, 2) INFO: Compiling void IceMageImage::game_dynamically_created() + (39, 14) ERROR: No matching symbol 'param1' + (40, 15) ERROR: No matching symbol 'param2' + (43, 4) ERROR: No matching symbol 'SetName' + (44, 4) ERROR: No matching symbol 'SetName' + (48, 4) ERROR: No matching symbol 'SetName' + (49, 4) ERROR: No matching symbol 'SetName' + (53, 4) ERROR: No matching symbol 'SetName' + (54, 4) ERROR: No matching symbol 'SetName' + (58, 4) ERROR: No matching symbol 'SetName' + (59, 4) ERROR: No matching symbol 'SetName' + (61, 3) ERROR: No matching symbol 'SetAngles' + (62, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (65, 2) INFO: Compiling void IceMageImage::straighten_up() + (67, 19) ERROR: No matching symbol 'GetMonsterProperty' + (68, 3) ERROR: No matching symbol 'SetAngles' + (69, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (72, 2) INFO: Compiling void IceMageImage::ext_convo2() + (74, 3) ERROR: No matching symbol 'PlayAnim' + (75, 3) ERROR: No matching symbol 'SayText' + (76, 13) ERROR: No matching symbol 'GetOwner' + (79, 2) INFO: Compiling void IceMageImage::ext_convo3() + (81, 3) ERROR: No matching symbol 'PlayAnim' + (82, 3) ERROR: No matching symbol 'SayText' + (83, 13) ERROR: No matching symbol 'GetOwner' + (86, 2) INFO: Compiling void IceMageImage::ext_convo4() + (88, 3) ERROR: No matching symbol 'PlayAnim' + (89, 3) ERROR: No matching symbol 'SayText' + (90, 13) ERROR: No matching symbol 'GetOwner' + (93, 2) INFO: Compiling void IceMageImage::ext_convo6() + (95, 3) ERROR: No matching symbol 'PlayAnim' + (96, 3) ERROR: No matching symbol 'SayText' + (97, 13) ERROR: No matching symbol 'GetOwner' + (100, 2) INFO: Compiling void IceMageImage::ext_convo7() + (102, 3) ERROR: No matching symbol 'PlayAnim' + (103, 3) ERROR: No matching symbol 'SayText' + (104, 13) ERROR: No matching symbol 'GetOwner' + (107, 2) INFO: Compiling void IceMageImage::ext_convo9() + (109, 3) ERROR: No matching symbol 'PlayAnim' + (110, 3) ERROR: No matching symbol 'SayText' + (111, 13) ERROR: No matching symbol 'GetOwner' + (114, 2) INFO: Compiling void IceMageImage::ext_convo10() + (116, 3) ERROR: No matching symbol 'PlayAnim' + (117, 3) ERROR: No matching symbol 'SayText' + (118, 13) ERROR: No matching symbol 'GetOwner' + (121, 2) INFO: Compiling void IceMageImage::ext_mage_go() + (127, 53) ERROR: Expected expression value + (127, 53) ERROR: Instead found '' + (131, 2) INFO: Compiling void IceMageImage::remove_me() + (133, 3) ERROR: No matching symbol 'DeleteEntity' + (136, 2) INFO: Compiling void IceMageImage::draw_beam() + (139, 40) ERROR: Expected expression value + (139, 40) ERROR: Instead found '' + (142, 36) ERROR: Expected expression value + (142, 36) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\maldora.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\maldora_fragment.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\sorc_image.as + (15, 2) INFO: Compiling void SorcImage::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetModelBody' + (19, 3) ERROR: No matching symbol 'SetModelBody' + (20, 3) ERROR: No matching symbol 'SetModelBody' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetInvincible' + (23, 3) ERROR: No matching symbol 'SetSolid' + (24, 3) ERROR: No matching symbol 'SetRace' + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetSayTextRange' + (28, 3) ERROR: No matching symbol 'SetAnimFrameRate' + (29, 3) ERROR: No matching symbol 'Effect' + (32, 2) INFO: Compiling void SorcImage::ext_convo1() + (34, 3) ERROR: No matching symbol 'SetSayTextRange' + (35, 3) ERROR: No matching symbol 'SayText' + (36, 13) ERROR: No matching symbol 'GetOwner' + (37, 3) ERROR: No matching symbol 'PlayAnim' + (38, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (41, 2) INFO: Compiling void SorcImage::ext_convo5() + (43, 3) ERROR: No matching symbol 'PlayAnim' + (44, 13) ERROR: No matching symbol 'GetOwner' + (45, 3) ERROR: No matching symbol 'SayText' + (48, 2) INFO: Compiling void SorcImage::ext_convo8() + (50, 3) ERROR: No matching symbol 'PlayAnim' + (51, 13) ERROR: No matching symbol 'GetOwner' + (52, 3) ERROR: No matching symbol 'SayText' + (55, 2) INFO: Compiling void SorcImage::slow_down() + (58, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (64, 3) ERROR: No matching symbol 'LogDebug' + (65, 3) ERROR: No matching symbol 'SetAnimFrameRate' + (68, 2) INFO: Compiling void SorcImage::game_dynamically_created() + (70, 14) ERROR: No matching symbol 'param1' + (71, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (74, 2) INFO: Compiling void SorcImage::set_yaw() + (76, 3) ERROR: No matching symbol 'SetAngles' + (79, 2) INFO: Compiling void SorcImage::sorc_in() + (81, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (84, 2) INFO: Compiling void SorcImage::sorc_go() + (89, 56) ERROR: Expected expression value + (89, 56) ERROR: Instead found '' + (91, 66) ERROR: Expected expression value + (91, 66) ERROR: Instead found '' + (95, 2) INFO: Compiling void SorcImage::remove_me() + (97, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\sorc_image_defeat.as + (6, 7) ERROR: Method 'void SorcImageDefeat::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\sorc_image_final.as + (13, 2) INFO: Compiling void SorcImageFinal::OnSpawn() + (15, 3) ERROR: No matching symbol 'SetModel' + (16, 3) ERROR: No matching symbol 'SetWidth' + (17, 3) ERROR: No matching symbol 'SetHeight' + (18, 3) ERROR: No matching symbol 'SetModelBody' + (19, 3) ERROR: No matching symbol 'SetModelBody' + (20, 3) ERROR: No matching symbol 'SetModelBody' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetInvincible' + (23, 3) ERROR: No matching symbol 'SetRace' + (24, 3) ERROR: No matching symbol 'SetName' + (25, 3) ERROR: No matching symbol 'SetSayTextRange' + (26, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (27, 3) ERROR: No matching symbol 'CatchSpeech' + (30, 2) INFO: Compiling void SorcImageFinal::say_hi() + (32, 3) ERROR: No matching symbol 'SayText' + (33, 3) ERROR: No matching symbol 'OpenMenu' + (36, 2) INFO: Compiling void SorcImageFinal::game_menu_getoptions() + (38, 10) ERROR: Expected ';' + (38, 10) ERROR: Instead found identifier 'reg' + (39, 10) ERROR: Expected ';' + (39, 10) ERROR: Instead found identifier 'reg' + (40, 10) ERROR: Expected ';' + (40, 10) ERROR: Instead found identifier 'reg' + (43, 2) INFO: Compiling void SorcImageFinal::say_sword() + (45, 3) ERROR: No matching symbol 'SayText' + (46, 3) ERROR: No matching symbol 'SetModelBody' + (47, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (51, 2) INFO: Compiling void SorcImageFinal::say_sword2() + (53, 3) ERROR: No matching symbol 'SayText' + (54, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (57, 2) INFO: Compiling void SorcImageFinal::say_sword3() + (59, 3) ERROR: No matching symbol 'SayText' + (60, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (63, 2) INFO: Compiling void SorcImageFinal::say_sword4() + (65, 3) ERROR: No matching symbol 'SayText' + (66, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (69, 2) INFO: Compiling void SorcImageFinal::say_sword4b() + (71, 3) ERROR: No matching symbol 'SayText' + (72, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (75, 2) INFO: Compiling void SorcImageFinal::say_sword5() + (77, 3) ERROR: No matching symbol 'SayText' + (78, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (81, 2) INFO: Compiling void SorcImageFinal::tele_out() + (86, 60) ERROR: Expected expression value + (86, 60) ERROR: Instead found '' + (90, 2) INFO: Compiling void SorcImageFinal::fade_away() + (92, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond\sorc_intro.as + (18, 2) INFO: Compiling SorcIntro::SorcIntro() + (26, 3) ERROR: No matching symbol 'Precache' + (27, 3) ERROR: No matching symbol 'Precache' + (30, 2) INFO: Compiling void SorcIntro::OnRepeatTimer() + (36, 67) ERROR: Expected expression value + (36, 67) ERROR: Instead found '' + (39, 2) INFO: Compiling void SorcIntro::OnSpawn() + (41, 3) ERROR: No matching symbol 'SetName' + (42, 3) ERROR: No matching symbol 'SetFly' + (43, 3) ERROR: No matching symbol 'SetGravity' + (44, 3) ERROR: No matching symbol 'SetInvincible' + (45, 3) ERROR: No matching symbol 'SetModel' + (46, 3) ERROR: No matching symbol 'SetNoPush' + (47, 3) ERROR: No matching symbol 'SetRace' + (48, 3) ERROR: No matching symbol 'SetWidth' + (49, 3) ERROR: No matching symbol 'SetHeight' + (50, 3) ERROR: No matching symbol 'SetModel' + (51, 3) ERROR: No matching symbol 'SetDamageResistance' + (52, 3) ERROR: No matching symbol 'SetGravity' + (53, 3) ERROR: No matching symbol 'SetName' + (55, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void SorcIntro::game_precache() + (61, 3) ERROR: No matching symbol 'Precache' + (62, 3) ERROR: No matching symbol 'Precache' + (63, 3) ERROR: No matching symbol 'Precache' + (64, 3) ERROR: No matching symbol 'Precache' + (67, 2) INFO: Compiling void SorcIntro::spawn_image_sorc() + (69, 42) ERROR: Expected expression value + (69, 42) ERROR: Instead found '' + (74, 2) INFO: Compiling void SorcIntro::spawn_image1() + (77, 36) ERROR: Expected expression value + (77, 36) ERROR: Instead found '' + (82, 2) INFO: Compiling void SorcIntro::spawn_image2() + (85, 36) ERROR: Expected expression value + (85, 36) ERROR: Instead found '' + (90, 2) INFO: Compiling void SorcIntro::spawn_image3() + (93, 36) ERROR: Expected expression value + (93, 36) ERROR: Instead found '' + (98, 2) INFO: Compiling void SorcIntro::spawn_image4() + (101, 36) ERROR: Expected expression value + (101, 36) ERROR: Instead found '' + (106, 2) INFO: Compiling void SorcIntro::spawn_barrier() + (108, 27) ERROR: No matching symbol 'MAGE_RADIUS' + (110, 16) ERROR: No matching symbol 'GetEntityIndex' + (112, 14) ERROR: No matching symbol 'FindEntityByName' + (113, 14) ERROR: No matching symbol 'FindEntityByName' + (114, 14) ERROR: No matching symbol 'FindEntityByName' + (115, 14) ERROR: No matching symbol 'FindEntityByName' + (118, 2) INFO: Compiling void SorcIntro::scan_for_players() + (120, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (121, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (122, 17) ERROR: No matching symbol 'L_PLAYERS' + (123, 23) ERROR: No matching symbol 'GetTokenCount' + (129, 2) INFO: Compiling void SorcIntro::scan_loop() + (131, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (132, 23) ERROR: No matching symbol 'GetToken' + (133, 9) ERROR: No matching symbol 'GetEntityRange' + (138, 2) INFO: Compiling void SorcIntro::do_intro1() + (140, 3) ERROR: No matching symbol 'CallExternal' + (141, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (142, 3) ERROR: No matching symbol 'UseTrigger' + (145, 2) INFO: Compiling void SorcIntro::do_intro2() + (147, 3) ERROR: No matching symbol 'CallExternal' + (148, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (149, 3) ERROR: No matching symbol 'UseTrigger' + (152, 2) INFO: Compiling void SorcIntro::do_intro3() + (154, 3) ERROR: No matching symbol 'CallExternal' + (155, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (156, 3) ERROR: No matching symbol 'UseTrigger' + (159, 2) INFO: Compiling void SorcIntro::do_intro4() + (161, 3) ERROR: No matching symbol 'CallExternal' + (162, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (163, 3) ERROR: No matching symbol 'UseTrigger' + (166, 2) INFO: Compiling void SorcIntro::do_intro5() + (168, 3) ERROR: No matching symbol 'CallExternal' + (169, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (170, 3) ERROR: No matching symbol 'UseTrigger' + (173, 2) INFO: Compiling void SorcIntro::do_intro6() + (175, 3) ERROR: No matching symbol 'CallExternal' + (176, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (177, 3) ERROR: No matching symbol 'UseTrigger' + (180, 2) INFO: Compiling void SorcIntro::do_intro_oops() + (182, 3) ERROR: No matching symbol 'CallExternal' + (183, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (184, 3) ERROR: No matching symbol 'UseTrigger' + (187, 2) INFO: Compiling void SorcIntro::do_intro7() + (189, 3) ERROR: No matching symbol 'CallExternal' + (190, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (191, 3) ERROR: No matching symbol 'UseTrigger' + (194, 2) INFO: Compiling void SorcIntro::do_intro8() + (196, 3) ERROR: No matching symbol 'CallExternal' + (197, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (198, 3) ERROR: No matching symbol 'UseTrigger' + (201, 2) INFO: Compiling void SorcIntro::do_intro9() + (203, 3) ERROR: No matching symbol 'CallExternal' + (204, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (214, 2) INFO: Compiling void SorcIntro::spawn_sorc() + (216, 3) ERROR: No matching symbol 'CallExternal' + (217, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (220, 2) INFO: Compiling void SorcIntro::remove_me() + (222, 3) ERROR: No matching symbol 'DeleteEntity' + (225, 2) INFO: Compiling void SorcIntro::intro_complete() + (228, 3) ERROR: No matching symbol 'CallExternal' + (229, 3) ERROR: No matching symbol 'CallExternal' + (230, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (233, 2) INFO: Compiling void SorcIntro::intro_complete2() + (235, 3) ERROR: No matching symbol 'CallExternal' + (236, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (239, 2) INFO: Compiling void SorcIntro::intro_complete3() + (241, 3) ERROR: No matching symbol 'CallExternal' + (242, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (245, 2) INFO: Compiling void SorcIntro::intro_complete4() + (247, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond-1\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond-2\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond-3\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lodagond-4\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lostcastle_msc\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/lowlands\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\bgoblin_weak.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\boar2_weak.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\game_master.as + (8, 2) INFO: Compiling void GameMaster::gm_map_m2_quest_setmusic() + (10, 21) ERROR: No matching symbol 'FindEntityByName' + (11, 8) ERROR: No matching symbol 'GetEntityProperty' + (13, 10) ERROR: No matching symbol 'GetEntityProperty' + (15, 5) ERROR: No matching symbol 'CallExternal' + (19, 5) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\goblin_needler.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\pot.as + (12, 2) INFO: Compiling void Pot::OnSpawn() + (14, 3) ERROR: No matching symbol 'SetName' + (15, 3) ERROR: No matching symbol 'SetInvincible' + (17, 3) ERROR: No matching symbol 'SetNoPush' + (18, 3) ERROR: No matching symbol 'SetWidth' + (19, 3) ERROR: No matching symbol 'SetHeight' + (20, 3) ERROR: No matching symbol 'SetModel' + (21, 16) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void Pot::glow_loop() + (28, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (29, 3) ERROR: No matching symbol 'ClientEvent' + (32, 2) INFO: Compiling void Pot::ext_cooking() + (34, 3) ERROR: No matching symbol 'SetModelBody' + (35, 16) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\sylphiel.as + (9, 7) ERROR: Method 'void Sylphiel::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\sylphiels_stuff.as + (8, 7) ERROR: Method 'void Qitem::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/m2_quest\vgoblin_weak.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mercenaries\archer.as + (204, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mercenaries\archerf.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mercenaries\merc1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mercenaries\merc2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\chestmaker.as + (8, 2) INFO: Compiling void Chestmaker::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetName' + (11, 3) ERROR: No matching symbol 'SetFly' + (12, 3) ERROR: No matching symbol 'SetInvincible' + (13, 3) ERROR: No matching symbol 'LogDebug' + (14, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (17, 2) INFO: Compiling void Chestmaker::make_chest() + (20, 12) ERROR: No conversion from 'string' to 'int' available. + (22, 4) ERROR: No matching symbol 'LogDebug' + (23, 50) ERROR: No matching symbol 'GetOwner' + (25, 12) ERROR: No conversion from 'string' to 'int' available. + (27, 4) ERROR: No matching symbol 'LogDebug' + (28, 49) ERROR: No matching symbol 'GetOwner' + (30, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\chest_good.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\chest_great.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\rudolf.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mines\rudolfschest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\bloodreaver.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\bloodreaverminion.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\flesheater.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\flesheaterminion.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\phlame.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/minibosses\titan.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\abaddon.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\abomination_bone.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\abomination_cl.as + (14, 2) INFO: Compiling void AbominationCl::OnRepeatTimer() + (20, 39) ERROR: Expected expression value + (20, 39) ERROR: Instead found '' + (23, 2) INFO: Compiling void AbominationCl::client_activate() + (31, 51) ERROR: Expected expression value + (31, 51) ERROR: Instead found '' + (38, 2) INFO: Compiling void AbominationCl::game_prerender() + (41, 37) ERROR: Expected expression value + (41, 37) ERROR: Instead found '' + (45, 2) INFO: Compiling void AbominationCl::breath_loop() + (48, 33) ERROR: Expected expression value + (48, 33) ERROR: Instead found '' + (52, 2) INFO: Compiling void AbominationCl::make_cloud() + (54, 22) ERROR: No matching symbol 'param1' + (55, 15) ERROR: No matching symbol 'param2' + (56, 19) ERROR: No conversion from 'string' to 'int' available. + (58, 4) ERROR: No matching symbol 'ClientEffect' + (59, 4) ERROR: No matching symbol 'ClientEffect' + (60, 4) ERROR: No matching symbol 'ClientEffect' + (64, 4) ERROR: No matching symbol 'ClientEffect' + (65, 4) ERROR: No matching symbol 'ClientEffect' + (66, 4) ERROR: No matching symbol 'ClientEffect' + (70, 2) INFO: Compiling void AbominationCl::end_fx() + (72, 7) ERROR: Illegal operation on this datatype + (74, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (77, 2) INFO: Compiling void AbominationCl::remove_fx() + (79, 3) ERROR: No matching symbol 'RemoveScript' + (82, 2) INFO: Compiling void AbominationCl::update_cloud() + (85, 17) ERROR: No conversion from 'string' to 'int' available. + (88, 4) ERROR: No matching symbol 'ClientEffect' + (89, 4) ERROR: No matching symbol 'ClientEffect' + (93, 2) INFO: Compiling void AbominationCl::setup_cloud() + (109, 42) ERROR: Expected expression value + (109, 42) ERROR: Instead found '' + (113, 2) INFO: Compiling void AbominationCl::setup_fire_cloud() + (132, 42) ERROR: Expected expression value + (132, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\abomination_venom.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_archer_hard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_archer_hard_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_archer_hard_frost.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_archer_hard_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_archer_hard_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_archer_hard_poison.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_archer_hard_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_archer_hard_thunder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior_hard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior_hard_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior_hard_frost.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior_hard_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior_hard_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior_hard_poison.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior_hard_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior_hard_thunder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\anim_warrior_hard_venom.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ant_fire_cl.as + (20, 2) INFO: Compiling void AntFireCl::client_activate() + (22, 14) ERROR: No matching symbol 'param1' + (23, 17) ERROR: No matching symbol 'param2' + (24, 20) ERROR: No matching symbol 'param3' + (27, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (30, 2) INFO: Compiling void AntFireCl::end_fx() + (34, 3) ERROR: Illegal operation on 'string' + (35, 3) ERROR: No matching signatures to 'string::L_DELAY_REMOVE(const string)' + (38, 2) INFO: Compiling void AntFireCl::remove_fx() + (40, 3) ERROR: No matching symbol 'RemoveScript' + (43, 2) INFO: Compiling void AntFireCl::breath_loop() + (47, 41) ERROR: Expected expression value + (47, 41) ERROR: Instead found '' + (48, 34) ERROR: Expected expression value + (48, 34) ERROR: Instead found '' + (53, 2) INFO: Compiling void AntFireCl::setup_cloud() + (67, 42) ERROR: Expected expression value + (67, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ant_fire_flyer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ant_fire_warrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ant_red_warrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\attack_hack.as + (12, 2) INFO: Compiling void AttackHack::npcatk_attackenemy() + (22, 3) ERROR: No matching symbol 'can_reach_nme' + (23, 3) ERROR: No matching symbol 'npc_attack' + (24, 3) ERROR: No matching symbol 'npc_selectattack' + (25, 3) ERROR: No matching symbol 'SetMoveDest' + (26, 3) ERROR: No matching symbol 'PlayAnim' + (27, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (31, 4) ERROR: No matching symbol 'DoDamage' + (32, 8) ERROR: No matching symbol 'ATTACK_HACK_STUN' + (34, 22) ERROR: No matching symbol 'ATTACK_HACK_STUNCHANCE' + (36, 6) ERROR: No matching symbol 'ApplyEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_boss.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_boss_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_boss_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_boss_dagger.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_boss_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_boss_nova.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_boss_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_boss_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_dagger.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_elite.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_elite_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_elite_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_elite_dagger.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_elite_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_elite_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_elite_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_elite_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_hard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_hard_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_hard_axe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_hard_dagger.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_hard_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_hard_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_hard_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_hard_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_mace.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_mage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bandit_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_aim_proj.as + (8, 2) INFO: Compiling void BaseAimProj::baseaim_adjust_angles() + (10, 7) ERROR: No matching symbol 'ANGLE_ADJ_DIVIDER' + (12, 8) ERROR: No matching symbol 'ATTACK_SPEED' + (14, 5) ERROR: No matching symbol 'ANGLE_ADJ_DIVIDER' + (16, 8) ERROR: No matching symbol 'ATTACK_SPEED' + (18, 5) ERROR: No matching symbol 'ANGLE_ADJ_DIVIDER' + (20, 8) ERROR: No matching symbol 'ATTACK_SPEED' + (22, 5) ERROR: No matching symbol 'ANGLE_ADJ_DIVIDER' + (24, 8) ERROR: No matching symbol 'ATTACK_SPEED' + (26, 5) ERROR: No matching symbol 'ANGLE_ADJ_DIVIDER' + (28, 8) ERROR: No matching symbol 'ATTACK_SPEED' + (30, 5) ERROR: No matching symbol 'ANGLE_ADJ_DIVIDER' + (32, 8) ERROR: No matching symbol 'ATTACK_SPEED' + (34, 5) ERROR: No matching symbol 'ANGLE_ADJ_DIVIDER' + (36, 8) ERROR: No matching symbol 'ATTACK_SPEED' + (38, 5) ERROR: No matching symbol 'ANGLE_ADJ_DIVIDER' + (41, 39) ERROR: No matching symbol 'HUNT_LASTTARGET' + (42, 23) ERROR: No matching symbol 'HUNT_LASTTARGET' + (44, 25) ERROR: No matching symbol 'GetEntityHeight' + (45, 4) ERROR: Illegal operation on 'string' + (48, 45) ERROR: No matching symbol 'GetMonsterProperty' + (49, 18) ERROR: No matching symbol 'ANGLE_ADJ_DIVIDER' + (50, 3) ERROR: No matching symbol 'SetAngles' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_anti_stuck.as + (429, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_battle_ally.as + (27, 2) INFO: Compiling BaseBattleAlly::BaseBattleAlly() + (32, 3) ERROR: No matching symbol 'SetSayTextRange' + (51, 2) INFO: Compiling void BaseBattleAlly::OnHuntTarget(CBaseEntity@) + (97, 50) ERROR: Expected expression value + (97, 50) ERROR: Instead found '' + (154, 41) ERROR: Expected expression value + (154, 41) ERROR: Instead found '' + (180, 2) INFO: Compiling void BaseBattleAlly::OnDamage(int) + (182, 9) ERROR: No matching symbol 'GetRelationship' + (187, 2) INFO: Compiling void BaseBattleAlly::ally_follow_close() + (189, 26) ERROR: No matching symbol 'ALLY_FOLLOW_CLOSE_DIST' + (192, 2) INFO: Compiling void BaseBattleAlly::ally_follow_normal() + (194, 26) ERROR: No matching symbol 'ALLY_FOLLOW_NORM_DIST' + (197, 2) INFO: Compiling void BaseBattleAlly::ally_hop() + (199, 3) ERROR: No matching symbol 'LogDebug' + (200, 28) ERROR: No matching symbol 'SOUND_ALLY_JUMP' + (200, 13) ERROR: No matching symbol 'GetOwner' + (201, 19) ERROR: No matching symbol 'param1' + (202, 21) ERROR: No conversion from 'string' to 'int' available. + (204, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (206, 3) ERROR: Illegal operation on 'string' + (207, 3) ERROR: No matching symbol 'npcatk_suspend_ai' + (208, 7) ERROR: Illegal operation on this datatype + (210, 24) ERROR: No matching symbol 'GetEntityRange' + (214, 35) ERROR: No matching symbol 'GetOwner' + (215, 40) ERROR: No matching symbol 'ALLY_LEADER_DEST' + (216, 4) ERROR: No matching symbol 'LogDebug' + (218, 3) ERROR: No matching symbol 'PlayAnim' + (219, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (222, 2) INFO: Compiling void BaseBattleAlly::ally_jump_boost() + (224, 47) ERROR: Expected expression value + (224, 47) ERROR: Instead found '' + (227, 2) INFO: Compiling void BaseBattleAlly::ally_push_forward() + (237, 47) ERROR: Expected expression value + (237, 47) ERROR: Instead found '' + (239, 54) ERROR: Expected expression value + (239, 54) ERROR: Instead found '' + (245, 2) INFO: Compiling void BaseBattleAlly::ally_stuck_check() + (283, 37) ERROR: Expected expression value + (283, 37) ERROR: Instead found '' + (289, 2) INFO: Compiling void BaseBattleAlly::set_leader() + (293, 7) ERROR: No matching symbol 'param1' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_chat.as + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_chat_array.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_civilian.as + (6, 7) ERROR: Method 'void BaseCivilian::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void BaseCivilian::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_damage_stack.as + (6, 7) ERROR: Method 'void BaseDamageStack::OnDamagedOther(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_fish2.as + (19, 2) INFO: Compiling void BaseFish2::OnSpawn() + (21, 3) ERROR: No matching symbol 'SetGravity' + (24, 2) INFO: Compiling void BaseFish2::OnHuntTarget(CBaseEntity@) + (60, 48) ERROR: Expected expression value + (60, 48) ERROR: Instead found '' + (69, 48) ERROR: Expected expression value + (69, 48) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_flyer.as + (131, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_flyer_agro.as + (131, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_flyer_grav.as + (6, 7) ERROR: Method 'void BaseFlyerGrav::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_glow.as + (47, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_guard.as + (6, 7) ERROR: Method 'void BaseGuard::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_guard_friendly.as + (6, 7) ERROR: Method 'void BaseGuardFriendly::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void BaseGuardFriendly::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_guard_friendly_new.as + (6, 7) ERROR: Method 'void BaseGuardFriendlyNew::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_ice_race.as + (8, 2) INFO: Compiling void BaseIceRace::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetDamageResistance' + (11, 3) ERROR: No matching symbol 'SetDamageResistance' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_jumper.as + (22, 2) INFO: Compiling void BaseJumper::OnHuntTarget(CBaseEntity@) + (24, 8) ERROR: No matching symbol 'SUSPEND_AI' + (25, 8) ERROR: No matching symbol 'NPC_MOVEMENT_SUSPENDED' + (26, 9) ERROR: No matching symbol 'm_hAttackTarget' + (27, 7) ERROR: Illegal operation on this datatype + (28, 23) ERROR: No conversion from 'string' to 'float' available. + (29, 24) ERROR: No matching symbol 'FREQ_NPC_JUMP' + (32, 7) ERROR: No matching symbol 'm_hAttackTarget' + (34, 8) ERROR: No matching symbol 'GetEntityRange' + (37, 18) ERROR: No matching symbol 'GetEntityProperty' + (38, 20) ERROR: No matching symbol 'GetEntityProperty' + (39, 23) ERROR: No matching symbol 'm_hAttackTarget' + (41, 5) ERROR: Illegal operation on 'string' + (44, 4) ERROR: Illegal operation on 'string' + (45, 17) ERROR: No matching symbol 'ATTACK_RANGE' + (47, 5) ERROR: No matching signatures to 'BaseJumper::npcatk_jump(string)' + (47, 5) INFO: Candidates are: + (47, 5) INFO: void MS::BaseJumper::npcatk_jump() + (51, 11) WARN: Variable 'L_NEXT_JUMP' hides another variable of same name in outer scope + (56, 3) ERROR: No matching signatures to 'string::L_NEXT_JUMP(const string)' + (59, 2) INFO: Compiling void BaseJumper::npcatk_jump() + (61, 7) ERROR: No matching symbol 'SOUND_NPC_JUMP' + (63, 29) ERROR: No matching symbol 'SOUND_NPC_JUMP' + (63, 14) ERROR: No matching symbol 'GetOwner' + (65, 21) ERROR: No matching symbol 'param1' + (66, 22) ERROR: No matching symbol 'BJUMPER_FACTOR' + (67, 23) ERROR: No conversion from 'string' to 'int' available. + (69, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (71, 3) ERROR: No matching symbol 'npcatk_suspend_ai' + (72, 22) ERROR: No matching symbol 'GetEntityRange' + (73, 3) ERROR: No matching symbol 'PlayAnim' + (75, 8) ERROR: No matching symbol 'BJUMPER_CUSTOM_BOOST' + (76, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (79, 2) INFO: Compiling void BaseJumper::npcatk_jump_boost() + (81, 47) ERROR: Expected expression value + (81, 47) ERROR: Instead found '' + (84, 2) INFO: Compiling void BaseJumper::npcatk_jump_forward_adj() + (86, 47) ERROR: Expected expression value + (86, 47) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_lightning_shield.as + (6, 7) ERROR: Method 'void BaseLightningShield::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_monster.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_monster_explode.as + (17, 2) INFO: Compiling void BaseMonsterExplode::do_explode() + (19, 8) ERROR: No matching symbol 'EXPLOSION_DAMAGE' + (21, 4) ERROR: No matching symbol 'XDoDamage' + (25, 2) INFO: Compiling void BaseMonsterExplode::beam_dodamage() + (34, 41) ERROR: Expected expression value + (34, 41) ERROR: Instead found '' + (35, 48) ERROR: Expected expression value + (35, 48) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_monster_new.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_monster_shared.as + (114, 2) ERROR: A function with the same name and parameters already exists + (839, 2) ERROR: A function with the same name and parameters already exists + (1161, 2) ERROR: A function with the same name and parameters already exists + (1197, 2) ERROR: A function with the same name and parameters already exists + (1281, 2) ERROR: A function with the same name and parameters already exists + (429, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_noclip.as + (6, 7) ERROR: Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_npc.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_npc_attack.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_npc_attack_new.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_npc_vendor.as + (50, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_npc_vendor_confirm.as + (19, 2) INFO: Compiling BaseNpcVendorConfirm::BaseNpcVendorConfirm() + (23, 23) ERROR: No matching symbol 'StringToLower' + (24, 7) ERROR: No matching symbol 'VEND_NEWBIE' + (28, 5) ERROR: No matching symbol 'VEND_NEWBIE' + (32, 5) ERROR: No matching symbol 'VEND_NEWBIE' + (36, 5) ERROR: No matching symbol 'VEND_NEWBIE' + (40, 5) ERROR: No matching symbol 'VEND_NEWBIE' + (46, 2) INFO: Compiling void BaseNpcVendorConfirm::OnSpawn() + (48, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (52, 2) INFO: Compiling void BaseNpcVendorConfirm::vend_post_spawn() + (54, 8) ERROR: No matching symbol 'VEND_WEAPONS' + (56, 4) ERROR: No matching symbol 'CatchSpeech' + (58, 8) ERROR: No matching symbol 'VEND_CONTAINERS' + (60, 4) ERROR: No matching symbol 'CatchSpeech' + (65, 2) INFO: Compiling void BaseNpcVendorConfirm::player_scan() + (67, 8) ERROR: No matching symbol 'NPC_REACTS' + (68, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (69, 9) ERROR: No matching symbol 'CanSee' + (70, 9) ERROR: No matching symbol 'GetEntityMaxHealth' + (74, 2) INFO: Compiling void BaseNpcVendorConfirm::vendor_offerstore() + (77, 21) ERROR: No matching symbol 'GetEntityIndex' + (80, 2) INFO: Compiling void BaseNpcVendorConfirm::vendor_offer_help() + (83, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (84, 23) ERROR: No conversion from 'string' to 'float' available. + (86, 21) ERROR: No matching symbol 'FREQ_HINT_TEXT' + (87, 9) ERROR: No matching symbol 'GetEntityMaxHealth' + (88, 8) ERROR: No matching symbol 'VEND_WEAPONS' + (90, 4) ERROR: No matching symbol 'CatchSpeech' + (91, 10) ERROR: No matching symbol 'VEND_CONTAINERS' + (94, 4) ERROR: No matching symbol 'SayText' + (95, 4) ERROR: No matching symbol 'bchat_mouth_move' + (97, 8) ERROR: No matching symbol 'VEND_CONTAINERS' + (99, 4) ERROR: No matching symbol 'CatchSpeech' + (100, 4) ERROR: No matching symbol 'bchat_mouth_move' + (101, 10) ERROR: No matching symbol 'VEND_WEAPONS' + (103, 5) ERROR: No matching symbol 'SayText' + (105, 9) ERROR: No matching symbol 'VEND_WEAPONS' + (108, 4) ERROR: No matching symbol 'SayText' + (110, 8) ERROR: No matching symbol 'VEND_ARMORER' + (112, 8) ERROR: No matching symbol 'GetEntityProperty' + (114, 5) ERROR: No matching symbol 'SayText' + (115, 5) ERROR: No matching symbol 'bchat_mouth_move' + (119, 9) ERROR: No matching symbol 'GetEntityProperty' + (122, 5) ERROR: No matching symbol 'SayText' + (123, 5) ERROR: No matching symbol 'SayText' + (124, 5) ERROR: No matching symbol 'bchat_mouth_move' + (129, 2) INFO: Compiling void BaseNpcVendorConfirm::game_menu_getoptions() + (136, 12) ERROR: Expected ';' + (136, 12) ERROR: Instead found identifier 'reg' + (137, 12) ERROR: Expected ';' + (137, 12) ERROR: Instead found identifier 'reg' + (138, 12) ERROR: Expected ';' + (138, 12) ERROR: Instead found identifier 'reg' + (143, 12) ERROR: Expected ';' + (143, 12) ERROR: Instead found identifier 'reg' + (144, 12) ERROR: Expected ';' + (144, 12) ERROR: Instead found identifier 'reg' + (145, 12) ERROR: Expected ';' + (145, 12) ERROR: Instead found identifier 'reg' + (156, 11) ERROR: Expected ';' + (156, 11) ERROR: Instead found identifier 'reg' + (157, 11) ERROR: Expected ';' + (157, 11) ERROR: Instead found identifier 'reg' + (158, 11) ERROR: Expected ';' + (158, 11) ERROR: Instead found identifier 'reg' + (159, 11) ERROR: Expected ';' + (159, 11) ERROR: Instead found identifier 'reg' + (160, 11) ERROR: Expected ';' + (160, 11) ERROR: Instead found identifier 'reg' + (161, 11) ERROR: Expected ';' + (161, 11) ERROR: Instead found identifier 'reg' + (162, 11) ERROR: Expected ';' + (162, 11) ERROR: Instead found identifier 'reg' + (163, 11) ERROR: Expected ';' + (163, 11) ERROR: Instead found identifier 'reg' + (164, 11) ERROR: Expected ';' + (164, 11) ERROR: Instead found identifier 'reg' + (165, 11) ERROR: Expected ';' + (165, 11) ERROR: Instead found identifier 'reg' + (166, 11) ERROR: Expected ';' + (166, 11) ERROR: Instead found identifier 'reg' + (167, 11) ERROR: Expected ';' + (167, 11) ERROR: Instead found identifier 'reg' + (168, 11) ERROR: Expected ';' + (168, 11) ERROR: Instead found identifier 'reg' + (169, 11) ERROR: Expected ';' + (169, 11) ERROR: Instead found identifier 'reg' + (170, 11) ERROR: Expected ';' + (170, 11) ERROR: Instead found identifier 'reg' + (171, 11) ERROR: Expected ';' + (171, 11) ERROR: Instead found identifier 'reg' + (172, 11) ERROR: Expected ';' + (172, 11) ERROR: Instead found identifier 'reg' + (173, 11) ERROR: Expected ';' + (173, 11) ERROR: Instead found identifier 'reg' + (174, 11) ERROR: Expected ';' + (174, 11) ERROR: Instead found identifier 'reg' + (175, 11) ERROR: Expected ';' + (175, 11) ERROR: Instead found identifier 'reg' + (176, 11) ERROR: Expected ';' + (176, 11) ERROR: Instead found identifier 'reg' + (177, 11) ERROR: Expected ';' + (177, 11) ERROR: Instead found identifier 'reg' + (178, 11) ERROR: Expected ';' + (178, 11) ERROR: Instead found identifier 'reg' + (179, 11) ERROR: Expected ';' + (179, 11) ERROR: Instead found identifier 'reg' + (180, 11) ERROR: Expected ';' + (180, 11) ERROR: Instead found identifier 'reg' + (181, 11) ERROR: Expected ';' + (181, 11) ERROR: Instead found identifier 'reg' + (182, 11) ERROR: Expected ';' + (182, 11) ERROR: Instead found identifier 'reg' + (183, 11) ERROR: Expected ';' + (183, 11) ERROR: Instead found identifier 'reg' + (184, 11) ERROR: Expected ';' + (184, 11) ERROR: Instead found identifier 'reg' + (185, 11) ERROR: Expected ';' + (185, 11) ERROR: Instead found identifier 'reg' + (186, 11) ERROR: Expected ';' + (186, 11) ERROR: Instead found identifier 'reg' + (187, 11) ERROR: Expected ';' + (187, 11) ERROR: Instead found identifier 'reg' + (197, 2) INFO: Compiling void BaseNpcVendorConfirm::say_weapons() + (200, 15) ERROR: No matching symbol 'param1' + (201, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (201, 9) INFO: Candidates are: + (201, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (201, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (203, 16) ERROR: No matching symbol 'GetEntityIndex' + (205, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (208, 2) INFO: Compiling void BaseNpcVendorConfirm::send_chat_menu() + (210, 3) ERROR: No matching symbol 'OpenMenu' + (213, 2) INFO: Compiling void BaseNpcVendorConfirm::say_weapon_desc() + (216, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (217, 7) ERROR: No matching symbol 'param2' + (225, 7) ERROR: No matching symbol 'param2' + (232, 7) ERROR: No matching symbol 'param2' + (238, 7) ERROR: No matching symbol 'param2' + (245, 7) ERROR: No matching symbol 'param2' + (252, 7) ERROR: No matching symbol 'param2' + (259, 7) ERROR: No matching symbol 'param2' + (266, 7) ERROR: No matching symbol 'param2' + (274, 3) ERROR: No matching symbol 'chat_loop' + (277, 2) INFO: Compiling void BaseNpcVendorConfirm::say_containers() + (283, 8) ERROR: No matching symbol 'VEND_SPEC_SHEATHS' + (288, 3) ERROR: No matching symbol 'chat_loop' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_pain.as + (6, 7) ERROR: Method 'void BasePain::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_patrol_radius.as + (6, 7) ERROR: Method 'void BasePatrolRadius::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_propelled.as + (6, 7) ERROR: Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_race_cold.as + (8, 2) INFO: Compiling void BaseIceRace::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetDamageResistance' + (11, 3) ERROR: No matching symbol 'SetDamageResistance' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_react.as + (20, 2) INFO: Compiling void BaseReact::OnRepeatTimer() + (22, 3) ERROR: No matching symbol 'SetRepeatDelay' + (23, 8) ERROR: No matching symbol 'CanSee' + (25, 8) ERROR: No matching symbol 'GetEntityIndex' + (28, 28) ERROR: No matching symbol 'GetEntityIndex' + (31, 8) ERROR: Illegal operation on this datatype + (33, 5) ERROR: No matching symbol 'npcreact_targetsighted' + (39, 8) ERROR: Expression must be of boolean type, instead found 'string' + (41, 5) ERROR: No matching symbol 'npc_react_sightlost' + (44, 22) ERROR: No conversion from 'string' to 'float' available. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_script_skills.as + (6, 7) ERROR: Method 'void BaseScriptSkills::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_self_adjust.as + (651, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_stripped_ai.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_struck.as + (46, 2) INFO: Compiling void BaseStruck::OnSpawn() + (48, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (51, 2) INFO: Compiling void BaseStruck::set_material() + (53, 24) ERROR: No matching symbol 'GetEntityMaxHealth' + (54, 3) ERROR: Illegal operation on 'string' + (56, 8) ERROR: No matching symbol 'param1' + (58, 28) ERROR: No matching symbol 'NPC_MATERIAL_TYPE' + (62, 28) ERROR: No matching symbol 'param1' + (64, 7) ERROR: No matching symbol 'SOUND_STRUCK1' + (66, 23) ERROR: No matching symbol 'SOUND_STRUCK1' + (67, 23) ERROR: No matching symbol 'SOUND_STRUCK2' + (68, 23) ERROR: No matching symbol 'SOUND_STRUCK3' + (71, 8) ERROR: No matching symbol 'EXIT_SUB' + (188, 2) INFO: Compiling void BaseStruck::OnDamage(int) + (209, 33) ERROR: Expected expression value + (209, 33) ERROR: Instead found '' + (306, 33) ERROR: Expected expression value + (306, 33) ERROR: Instead found '' + (406, 2) INFO: Compiling void BaseStruck::OnHuntTarget(CBaseEntity@) + (408, 9) ERROR: No matching symbol 'NPC_USE_IDLE' + (409, 8) ERROR: No matching symbol 'NPC_IDLE_DISABLE' + (410, 9) ERROR: No matching symbol 'm_hAttackTarget' + (411, 23) ERROR: No conversion from 'string' to 'float' available. + (413, 20) ERROR: No matching symbol 'NPC_FREQ_IDLE' + (415, 19) ERROR: No conversion from 'string' to 'int' available. + (417, 46) ERROR: No matching symbol 'SOUND_IDLE1' + (417, 26) ERROR: No matching symbol 'NPC_STRUCK_CHANNEL' + (417, 14) ERROR: No matching symbol 'GetOwner' + (419, 19) ERROR: No conversion from 'string' to 'int' available. + (421, 46) ERROR: No matching symbol 'SOUND_IDLE2' + (421, 26) ERROR: No matching symbol 'NPC_STRUCK_CHANNEL' + (421, 14) ERROR: No matching symbol 'GetOwner' + (423, 19) ERROR: No conversion from 'string' to 'int' available. + (425, 46) ERROR: No matching symbol 'SOUND_IDLE3' + (425, 26) ERROR: No matching symbol 'NPC_STRUCK_CHANNEL' + (425, 14) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_temporary.as + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\base_xmass.as + (13, 2) INFO: Compiling void BaseXmass::OnSpawn() + (15, 8) ERROR: No matching symbol 'G_CHRISTMAS_MODE' + (17, 4) ERROR: No matching symbol 'CatchSpeech' + (18, 8) ERROR: No matching symbol 'GetEntityRace' + (21, 4) ERROR: No matching symbol 'SetModelBody' + (25, 2) INFO: Compiling void BaseXmass::say_xmass() + (27, 9) ERROR: No matching symbol 'G_CHRISTMAS_MODE' + (28, 3) ERROR: No matching symbol 'PlayAnim' + (29, 3) ERROR: No matching symbol 'SayText' + (30, 7) ERROR: Expression must be of boolean type, instead found 'int' + (38, 8) ERROR: No matching symbol 'XMASS_OLD_GUY' + (40, 14) ERROR: No matching symbol 'GetOwner' + (41, 4) ERROR: No matching symbol 'Say' + (45, 14) ERROR: No matching symbol 'GetOwner' + (46, 4) ERROR: No matching symbol 'Say' + (48, 9) ERROR: No matching symbol 'IS_SNOWING' + (50, 4) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bat_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bat_giant.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bat_large.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bat_large2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bat_large_corpse_cl.as + (10, 2) INFO: Compiling void BatLargeCorpseCl::client_activate() + (12, 14) ERROR: No matching symbol 'param2' + (13, 22) ERROR: No matching symbol 'param1' + (14, 3) ERROR: No matching symbol 'ClientEffect' + (15, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (18, 2) INFO: Compiling void BatLargeCorpseCl::remove_script() + (20, 3) ERROR: No matching symbol 'RemoveScript' + (23, 2) INFO: Compiling void BatLargeCorpseCl::setup_corpse() + (25, 3) ERROR: No matching symbol 'ClientEffect' + (26, 3) ERROR: No matching symbol 'ClientEffect' + (27, 3) ERROR: No matching symbol 'ClientEffect' + (28, 3) ERROR: No matching symbol 'ClientEffect' + (29, 3) ERROR: No matching symbol 'ClientEffect' + (30, 3) ERROR: No matching symbol 'ClientEffect' + (31, 3) ERROR: No matching symbol 'ClientEffect' + (32, 3) ERROR: No matching symbol 'ClientEffect' + (33, 3) ERROR: No matching symbol 'ClientEffect' + (34, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bat_large_shreaker.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bat_large_shreaker_cl.as + (19, 2) INFO: Compiling void BatLargeShreakerCl::client_activate() + (41, 41) ERROR: Expected expression value + (41, 41) ERROR: Instead found '' + (45, 41) ERROR: Expected expression value + (45, 41) ERROR: Instead found '' + (49, 41) ERROR: Expected expression value + (49, 41) ERROR: Instead found '' + (53, 41) ERROR: Expected expression value + (53, 41) ERROR: Instead found '' + (57, 84) ERROR: Expected expression value + (57, 84) ERROR: Instead found '' + (66, 2) INFO: Compiling void BatLargeShreakerCl::end_fx() + (69, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (72, 2) INFO: Compiling void BatLargeShreakerCl::remove_fx() + (74, 3) ERROR: No matching symbol 'RemoveScript' + (77, 2) INFO: Compiling void BatLargeShreakerCl::blur_loop() + (80, 33) ERROR: Expected expression value + (80, 33) ERROR: Instead found '' + (81, 34) ERROR: Expected expression value + (81, 34) ERROR: Instead found '' + (82, 55) ERROR: Expected expression value + (82, 55) ERROR: Instead found '' + (83, 34) ERROR: Expected expression value + (83, 34) ERROR: Instead found '' + (84, 55) ERROR: Expected expression value + (84, 55) ERROR: Instead found '' + (87, 2) INFO: Compiling void BatLargeShreakerCl::setup_blur() + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (94, 3) ERROR: No matching symbol 'ClientEffect' + (95, 3) ERROR: No matching symbol 'ClientEffect' + (96, 3) ERROR: No matching symbol 'ClientEffect' + (97, 3) ERROR: No matching symbol 'ClientEffect' + (98, 3) ERROR: No matching symbol 'ClientEffect' + (99, 3) ERROR: No matching symbol 'ClientEffect' + (102, 2) INFO: Compiling void BatLargeShreakerCl::setup_sphere() + (104, 3) ERROR: No matching symbol 'ClientEffect' + (105, 3) ERROR: No matching symbol 'ClientEffect' + (106, 3) ERROR: No matching symbol 'ClientEffect' + (107, 3) ERROR: No matching symbol 'ClientEffect' + (108, 3) ERROR: No matching symbol 'ClientEffect' + (109, 3) ERROR: No matching symbol 'ClientEffect' + (110, 3) ERROR: No matching symbol 'ClientEffect' + (111, 3) ERROR: No matching symbol 'ClientEffect' + (112, 3) ERROR: No matching symbol 'ClientEffect' + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (119, 2) INFO: Compiling void BatLargeShreakerCl::update_sphere() + (121, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (128, 4) ERROR: No matching symbol 'ClientEffect' + (129, 4) ERROR: No matching symbol 'ClientEffect' + (133, 4) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bat_large_vampire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bat_summon.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_base_giant.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_black.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_brown.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_cub_black.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_cub_brown.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_cub_polar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_giant_black.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_giant_brown.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_giant_polar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_god_black.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_god_brown.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_god_polar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_god_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_guard1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_kodiak.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bear_polar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\beetle_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\beetle_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\beetle_fire_giant.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\beetle_horned.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\beetle_horned_giant.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\beetle_venom.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\beetle_venom_cl.as + (18, 2) INFO: Compiling void BeetleVenomCl::client_activate() + (20, 14) ERROR: No matching symbol 'param1' + (21, 28) ERROR: No matching symbol 'param2' + (24, 3) ERROR: No matching signatures to 'string::FX_MAX_DURATION(const string)' + (27, 2) INFO: Compiling void BeetleVenomCl::remove_fx() + (29, 7) ERROR: Illegal operation on this datatype + (31, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (34, 2) INFO: Compiling void BeetleVenomCl::remove_me() + (36, 3) ERROR: No matching symbol 'RemoveScript' + (39, 2) INFO: Compiling void BeetleVenomCl::fart_loop() + (43, 42) ERROR: Expected expression value + (43, 42) ERROR: Instead found '' + (44, 41) ERROR: Expected expression value + (44, 41) ERROR: Instead found '' + (45, 37) ERROR: Expected expression value + (45, 37) ERROR: Instead found '' + (49, 2) INFO: Compiling void BeetleVenomCl::setup_sprite() + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\beetle_venom_giant.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\beetle_venom_giant_cl.as + (13, 2) INFO: Compiling void BeetleVenomGiantCl::client_activate() + (15, 14) ERROR: No matching symbol 'param1' + (16, 17) ERROR: No matching symbol 'param2' + (19, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (22, 2) INFO: Compiling void BeetleVenomGiantCl::end_fx() + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void BeetleVenomGiantCl::remove_me() + (30, 3) ERROR: No matching symbol 'RemoveScript' + (33, 2) INFO: Compiling void BeetleVenomGiantCl::fx_loop() + (37, 41) ERROR: Expected expression value + (37, 41) ERROR: Instead found '' + (38, 34) ERROR: Expected expression value + (38, 34) ERROR: Instead found '' + (42, 2) INFO: Compiling void BeetleVenomGiantCl::setup_cloud() + (56, 42) ERROR: Expected expression value + (56, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bgoblin.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bgoblin_chief.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bgoblin_chief_cl.as + (18, 2) INFO: Compiling void BgoblinChiefCl::client_activate() + (20, 14) ERROR: No matching symbol 'param1' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void BgoblinChiefCl::end_fx() + (29, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (32, 2) INFO: Compiling void BgoblinChiefCl::remove_fx() + (34, 3) ERROR: No matching symbol 'RemoveScript' + (37, 2) INFO: Compiling void BgoblinChiefCl::breath_loop() + (41, 41) ERROR: Expected expression value + (41, 41) ERROR: Instead found '' + (42, 34) ERROR: Expected expression value + (42, 34) ERROR: Instead found '' + (48, 2) INFO: Compiling void BgoblinChiefCl::setup_cloud() + (62, 42) ERROR: Expected expression value + (62, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bgoblin_guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bgoblin_shaman.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bgoblin_skirmisher.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\blackbear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\blackbearcub.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz1_corrupt.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz1_corrupt_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz1_demon.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz1_demon_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz1_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz2_corrupt.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz2_corrupt_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz2_demon.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz2_demon_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz2_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\bludgeon_gaz_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\boar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\boar1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\boar2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\boar3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\boar_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\boar_base_cl_charge.as + (9, 2) ERROR: Expected method or property + (9, 2) ERROR: Instead found identifier 'string' + (10, 12) ERROR: Expected '(' + (10, 12) ERROR: Instead found '.' + (11, 12) ERROR: Expected '(' + (11, 12) ERROR: Instead found '.' + (12, 15) ERROR: Expected '(' + (12, 15) ERROR: Instead found '.' + (14, 18) ERROR: Expected identifier + (14, 18) ERROR: Instead found '(' + (89, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\boar_base_remake.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\boar_hard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\boar_lava3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\boar_lava_cl.as + (21, 2) INFO: Compiling void BoarLavaCl::client_activate() + (23, 14) ERROR: No matching symbol 'param1' + (25, 22) ERROR: No matching symbol 'param2' + (26, 17) ERROR: No conversion from 'string' to 'int' available. + (32, 17) ERROR: No conversion from 'string' to 'int' available. + (38, 17) ERROR: No conversion from 'string' to 'int' available. + (44, 3) ERROR: No matching symbol 'LogDebug' + (46, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 2) INFO: Compiling void BoarLavaCl::fx_loop() + (53, 34) ERROR: Expected expression value + (53, 34) ERROR: Instead found '' + (55, 42) ERROR: Expected expression value + (55, 42) ERROR: Instead found '' + (56, 37) ERROR: Expected expression value + (56, 37) ERROR: Instead found '' + (58, 42) ERROR: Expected expression value + (58, 42) ERROR: Instead found '' + (59, 40) ERROR: Expected expression value + (59, 40) ERROR: Instead found '' + (60, 37) ERROR: Expected expression value + (60, 37) ERROR: Instead found '' + (63, 42) ERROR: Expected expression value + (63, 42) ERROR: Instead found '' + (64, 37) ERROR: Expected expression value + (64, 37) ERROR: Instead found '' + (66, 42) ERROR: Expected expression value + (66, 42) ERROR: Instead found '' + (67, 40) ERROR: Expected expression value + (67, 40) ERROR: Instead found '' + (68, 37) ERROR: Expected expression value + (68, 37) ERROR: Instead found '' + (72, 2) INFO: Compiling void BoarLavaCl::remove_fx() + (75, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 2) INFO: Compiling void BoarLavaCl::remove_fx2() + (80, 3) ERROR: No matching symbol 'RemoveScript' + (83, 2) INFO: Compiling void BoarLavaCl::update_hoof_sprite() + (86, 3) ERROR: Illegal operation on 'string' + (87, 18) ERROR: No conversion from 'string' to 'int' available. + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (92, 2) INFO: Compiling void BoarLavaCl::setup_hoof_sprite() + (94, 3) ERROR: No matching symbol 'ClientEffect' + (95, 3) ERROR: No matching symbol 'ClientEffect' + (96, 3) ERROR: No matching symbol 'ClientEffect' + (97, 3) ERROR: No matching symbol 'ClientEffect' + (98, 3) ERROR: No matching symbol 'ClientEffect' + (99, 3) ERROR: No matching symbol 'ClientEffect' + (100, 3) ERROR: No matching symbol 'ClientEffect' + (101, 3) ERROR: No matching symbol 'ClientEffect' + (102, 3) ERROR: No matching symbol 'ClientEffect' + (105, 13) ERROR: No conversion from 'string' to 'double' available. + (107, 4) ERROR: Illegal operation on 'string' + (109, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (112, 14) ERROR: No conversion from 'string' to 'double' available. + (114, 5) ERROR: Illegal operation on 'string' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\borc.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\brownbear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\brownbearcub.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\burning_one.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\burning_one_cl.as + (29, 2) INFO: Compiling void BurningOneCl::client_activate() + (66, 55) ERROR: Expected expression value + (66, 55) ERROR: Instead found '' + (76, 2) INFO: Compiling void BurningOneCl::end_fx() + (81, 3) ERROR: No matching signatures to 'string::REMOVE_DELAY(const string)' + (84, 2) INFO: Compiling void BurningOneCl::remove_me() + (86, 3) ERROR: No matching symbol 'RemoveScript' + (89, 2) INFO: Compiling void BurningOneCl::hand_sprite_loop() + (93, 41) ERROR: Expected expression value + (93, 41) ERROR: Instead found '' + (95, 41) ERROR: Expected expression value + (95, 41) ERROR: Instead found '' + (99, 2) INFO: Compiling void BurningOneCl::setup_hand_sprite() + (103, 79) ERROR: Expected expression value + (103, 79) ERROR: Instead found '' + (115, 2) INFO: Compiling void BurningOneCl::ice_breath_loop() + (119, 41) ERROR: Expected expression value + (119, 41) ERROR: Instead found '' + (129, 2) INFO: Compiling void BurningOneCl::setup_ice_breath_sprite() + (143, 38) ERROR: Expected expression value + (143, 38) ERROR: Instead found '' + (144, 42) ERROR: Expected expression value + (144, 42) ERROR: Instead found '' + (148, 2) INFO: Compiling void BurningOneCl::palpatine_loop() + (152, 41) ERROR: Expected expression value + (152, 41) ERROR: Instead found '' + (153, 42) ERROR: Expected expression value + (153, 42) ERROR: Instead found '' + (157, 35) ERROR: Expected expression value + (157, 35) ERROR: Instead found '' + (159, 42) ERROR: Expected expression value + (159, 42) ERROR: Instead found '' + (163, 35) ERROR: Expected expression value + (163, 35) ERROR: Instead found '' + (167, 2) INFO: Compiling void BurningOneCl::stun_burst_fx() + (170, 36) ERROR: Expected expression value + (170, 36) ERROR: Instead found '' + (175, 2) INFO: Compiling void BurningOneCl::stunburst_flame() + (195, 43) ERROR: Expected expression value + (195, 43) ERROR: Instead found '' + (201, 2) INFO: Compiling void BurningOneCl::head_flame() + (204, 41) ERROR: Expected expression value + (204, 41) ERROR: Instead found '' + (218, 2) INFO: Compiling void BurningOneCl::setup_body_flames() + (220, 41) ERROR: Expected expression value + (220, 41) ERROR: Instead found '' + (225, 2) INFO: Compiling void BurningOneCl::death_flame() + (227, 3) ERROR: No matching symbol 'ClientEffect' + (228, 3) ERROR: No matching symbol 'ClientEffect' + (229, 3) ERROR: No matching symbol 'ClientEffect' + (230, 3) ERROR: No matching symbol 'ClientEffect' + (231, 3) ERROR: No matching symbol 'ClientEffect' + (232, 3) ERROR: No matching symbol 'ClientEffect' + (233, 3) ERROR: No matching symbol 'ClientEffect' + (234, 3) ERROR: No matching symbol 'ClientEffect' + (235, 3) ERROR: No matching symbol 'ClientEffect' + (236, 3) ERROR: No matching symbol 'ClientEffect' + (237, 3) ERROR: No matching symbol 'ClientEffect' + (240, 2) INFO: Compiling void BurningOneCl::death_flame_update() + (243, 76) ERROR: Expected expression value + (243, 76) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\burning_one_lshield_cl.as + (17, 2) INFO: Compiling void SfxLightningShield::client_activate() + (19, 18) ERROR: No matching symbol 'param1' + (20, 19) ERROR: No matching symbol 'param2' + (21, 21) ERROR: No matching symbol 'param3' + (22, 17) ERROR: No matching symbol 'param4' + (23, 24) ERROR: No matching symbol 'param5' + (25, 3) ERROR: No matching signatures to 'string::SHIELD_DURATION(const string)' + (26, 7) ERROR: Expression must be of boolean type, instead found 'string' + (30, 2) INFO: Compiling void SfxLightningShield::lshield_on() + (36, 3) ERROR: No matching symbol 'PARAM1' + (39, 2) INFO: Compiling void SfxLightningShield::lshield_loop() + (48, 42) ERROR: Expected expression value + (48, 42) ERROR: Instead found '' + (49, 40) ERROR: Expected expression value + (49, 40) ERROR: Instead found '' + (55, 37) ERROR: Expected expression value + (55, 37) ERROR: Instead found '' + (58, 35) ERROR: Expected expression value + (58, 35) ERROR: Instead found '' + (61, 42) ERROR: Expected expression value + (61, 42) ERROR: Instead found '' + (62, 40) ERROR: Expected expression value + (62, 40) ERROR: Instead found '' + (63, 37) ERROR: Expected expression value + (63, 37) ERROR: Instead found '' + (66, 35) ERROR: Expected expression value + (66, 35) ERROR: Instead found '' + (75, 2) INFO: Compiling void SfxLightningShield::remove_effect() + (77, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\cadaver.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\cadaver_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\chumtoad.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\cl_corpse.as + (16, 2) INFO: Compiling void ClCorpse::client_activate() + (19, 40) ERROR: Expected expression value + (19, 40) ERROR: Instead found '' + (26, 34) ERROR: Expected expression value + (26, 34) ERROR: Instead found '' + (27, 65) ERROR: Expected expression value + (27, 65) ERROR: Instead found '' + (31, 2) INFO: Compiling void ClCorpse::remove_script() + (33, 3) ERROR: No matching symbol 'RemoveScript' + (36, 2) INFO: Compiling void ClCorpse::setup_corpse() + (38, 3) ERROR: No matching symbol 'ClientEffect' + (39, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching symbol 'ClientEffect' + (43, 3) ERROR: No matching symbol 'ClientEffect' + (44, 3) ERROR: No matching symbol 'ClientEffect' + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 19) ERROR: No conversion from 'string' to 'int' available. + (52, 4) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\cobra.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\cold_lady.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\cold_one.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\cold_one_cl.as + (29, 2) INFO: Compiling void ColdOneCl::client_activate() + (66, 55) ERROR: Expected expression value + (66, 55) ERROR: Instead found '' + (90, 2) INFO: Compiling void ColdOneCl::end_fx() + (95, 3) ERROR: No matching signatures to 'string::REMOVE_DELAY(const string)' + (98, 2) INFO: Compiling void ColdOneCl::remove_me() + (100, 3) ERROR: No matching symbol 'RemoveScript' + (103, 2) INFO: Compiling void ColdOneCl::hand_sprite_loop() + (107, 41) ERROR: Expected expression value + (107, 41) ERROR: Instead found '' + (109, 41) ERROR: Expected expression value + (109, 41) ERROR: Instead found '' + (113, 2) INFO: Compiling void ColdOneCl::setup_hand_sprite() + (117, 79) ERROR: Expected expression value + (117, 79) ERROR: Instead found '' + (129, 2) INFO: Compiling void ColdOneCl::ice_breath_loop() + (133, 41) ERROR: Expected expression value + (133, 41) ERROR: Instead found '' + (143, 2) INFO: Compiling void ColdOneCl::setup_ice_breath_sprite() + (157, 38) ERROR: Expected expression value + (157, 38) ERROR: Instead found '' + (158, 42) ERROR: Expected expression value + (158, 42) ERROR: Instead found '' + (162, 2) INFO: Compiling void ColdOneCl::palpatine_loop() + (166, 41) ERROR: Expected expression value + (166, 41) ERROR: Instead found '' + (167, 42) ERROR: Expected expression value + (167, 42) ERROR: Instead found '' + (171, 35) ERROR: Expected expression value + (171, 35) ERROR: Instead found '' + (173, 42) ERROR: Expected expression value + (173, 42) ERROR: Instead found '' + (177, 35) ERROR: Expected expression value + (177, 35) ERROR: Instead found '' + (181, 2) INFO: Compiling void ColdOneCl::stun_burst_fx() + (184, 36) ERROR: Expected expression value + (184, 36) ERROR: Instead found '' + (189, 2) INFO: Compiling void ColdOneCl::stunburst_flame() + (209, 43) ERROR: Expected expression value + (209, 43) ERROR: Instead found '' + (215, 2) INFO: Compiling void ColdOneCl::head_flame() + (218, 41) ERROR: Expected expression value + (218, 41) ERROR: Instead found '' + (232, 2) INFO: Compiling void ColdOneCl::setup_body_flames() + (234, 41) ERROR: Expected expression value + (234, 41) ERROR: Instead found '' + (239, 2) INFO: Compiling void ColdOneCl::death_flame() + (241, 3) ERROR: No matching symbol 'ClientEffect' + (242, 3) ERROR: No matching symbol 'ClientEffect' + (243, 3) ERROR: No matching symbol 'ClientEffect' + (244, 3) ERROR: No matching symbol 'ClientEffect' + (245, 3) ERROR: No matching symbol 'ClientEffect' + (246, 3) ERROR: No matching symbol 'ClientEffect' + (247, 3) ERROR: No matching symbol 'ClientEffect' + (248, 3) ERROR: No matching symbol 'ClientEffect' + (249, 3) ERROR: No matching symbol 'ClientEffect' + (250, 3) ERROR: No matching symbol 'ClientEffect' + (251, 3) ERROR: No matching symbol 'ClientEffect' + (254, 2) INFO: Compiling void ColdOneCl::death_flame_update() + (257, 76) ERROR: Expected expression value + (257, 76) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\cold_one_lshield_cl.as + (17, 2) INFO: Compiling void SfxLightningShield::client_activate() + (19, 18) ERROR: No matching symbol 'param1' + (20, 19) ERROR: No matching symbol 'param2' + (21, 21) ERROR: No matching symbol 'param3' + (22, 17) ERROR: No matching symbol 'param4' + (23, 24) ERROR: No matching symbol 'param5' + (25, 3) ERROR: No matching signatures to 'string::SHIELD_DURATION(const string)' + (26, 7) ERROR: Expression must be of boolean type, instead found 'string' + (30, 2) INFO: Compiling void SfxLightningShield::lshield_on() + (36, 3) ERROR: No matching symbol 'PARAM1' + (39, 2) INFO: Compiling void SfxLightningShield::lshield_loop() + (48, 42) ERROR: Expected expression value + (48, 42) ERROR: Instead found '' + (49, 40) ERROR: Expected expression value + (49, 40) ERROR: Instead found '' + (55, 37) ERROR: Expected expression value + (55, 37) ERROR: Instead found '' + (58, 35) ERROR: Expected expression value + (58, 35) ERROR: Instead found '' + (61, 42) ERROR: Expected expression value + (61, 42) ERROR: Instead found '' + (62, 40) ERROR: Expected expression value + (62, 40) ERROR: Instead found '' + (63, 37) ERROR: Expected expression value + (63, 37) ERROR: Instead found '' + (66, 35) ERROR: Expected expression value + (66, 35) ERROR: Instead found '' + (75, 2) INFO: Compiling void SfxLightningShield::remove_effect() + (77, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\base_companion.as + (26, 2) ERROR: Expected method or property + (26, 2) ERROR: Instead found identifier 'string' + (27, 18) ERROR: Expected '(' + (27, 18) ERROR: Instead found '.' + (29, 15) ERROR: Expected identifier + (29, 15) ERROR: Instead found '(' + (476, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\bear_image.as + (20, 2) INFO: Compiling void BearImage::OnSpawn() + (22, 3) ERROR: No matching symbol 'SetModel' + (23, 3) ERROR: No matching symbol 'SetModelBody' + (25, 3) ERROR: No matching symbol 'SetSolid' + (26, 3) ERROR: No matching symbol 'SetBBox' + (27, 3) ERROR: No matching symbol 'SetIdleAnim' + (28, 3) ERROR: No matching symbol 'SetMoveAnim' + (29, 3) ERROR: No matching symbol 'SetInvincible' + (30, 3) ERROR: No matching symbol 'SetGravity' + (31, 3) ERROR: No matching symbol 'SetRoam' + (32, 3) ERROR: No matching symbol 'SetRace' + (35, 2) INFO: Compiling void BearImage::game_dynamically_created() + (37, 14) ERROR: No matching symbol 'param1' + (38, 22) ERROR: No matching symbol 'GetEntityProperty' + (39, 3) ERROR: No matching symbol 'SetAngles' + (40, 3) ERROR: No matching symbol 'SetFollow' + (43, 2) INFO: Compiling void BearImage::ext_attack() + (45, 3) ERROR: No matching symbol 'PlayAnim' + (48, 2) INFO: Compiling void BearImage::player_left() + (50, 3) ERROR: No matching symbol 'LogDebug' + (51, 3) ERROR: No matching symbol 'DeleteEntity' + (54, 2) INFO: Compiling void BearImage::remove_bear() + (56, 3) ERROR: No matching symbol 'LogDebug' + (57, 3) ERROR: No matching symbol 'DeleteEntity' + (60, 2) INFO: Compiling void BearImage::ext_bear_die() + (62, 3) ERROR: No matching symbol 'LogDebug' + (63, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (65, 3) ERROR: No matching symbol 'SetFollow' + (66, 22) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (66, 22) INFO: Candidates are: + (66, 22) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (66, 22) INFO: Rejected due to type mismatch at positional parameter 1 + (68, 19) ERROR: No matching symbol 'GetOwner' + (69, 22) ERROR: No matching symbol 'GetEntityProperty' + (70, 3) ERROR: No matching symbol 'SetAngles' + (71, 3) ERROR: No matching symbol 'SetIdleAnim' + (72, 3) ERROR: No matching symbol 'SetMoveAnim' + (73, 3) ERROR: No matching symbol 'PlayAnim' + (74, 3) ERROR: No matching symbol 'PlayAnim' + (75, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 2) INFO: Compiling void BearImage::bear_fade() + (80, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\body_maker.as + (12, 2) INFO: Compiling void BodyMaker::remove_me() + (14, 3) ERROR: No matching symbol 'RemoveScript' + (15, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\dridje.as + (6, 7) ERROR: Method 'void Dridje::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\giver.as + (17, 2) INFO: Compiling void Giver::game_dynamically_created() + (19, 14) ERROR: No matching symbol 'param1' + (20, 19) ERROR: No matching symbol 'param2' + (23, 2) INFO: Compiling void Giver::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetModel' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (30, 2) INFO: Compiling void Giver::grant_item() + (33, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (36, 2) INFO: Compiling void Giver::me_vanish() + (38, 3) ERROR: No matching symbol 'SetAlive' + (39, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\pet_crow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\pet_rat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\pet_wolf.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\pet_wolf_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\pet_wolf_shadow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\spell_maker_affliction.as + (23, 2) INFO: Compiling void SpellMakerBase::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'SetFly' + (29, 3) ERROR: No matching symbol 'SetGravity' + (30, 3) ERROR: No matching symbol 'SetModel' + (31, 3) ERROR: No matching symbol 'SetSolid' + (32, 3) ERROR: No matching symbol 'SetIdleAnim' + (33, 3) ERROR: No matching symbol 'SetMoveAnim' + (34, 7) ERROR: No matching symbol 'MODEL_OFSET' + (36, 4) ERROR: No matching symbol 'SetModelBody' + (38, 7) ERROR: No matching symbol 'ANIM_IDLE' + (40, 4) ERROR: No matching symbol 'PlayAnim' + (42, 7) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 29) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 14) ERROR: No matching symbol 'GetOwner' + (46, 8) ERROR: No matching symbol 'FX_GLOW' + (48, 4) ERROR: No matching symbol 'Effect' + (52, 2) INFO: Compiling void SpellMakerBase::game_dynamically_created() + (54, 14) ERROR: No matching symbol 'GetEntityIndex' + (55, 20) ERROR: No matching symbol 'param2' + (58, 22) ERROR: No matching symbol 'param3' + (59, 22) ERROR: No matching symbol 'param4' + (60, 21) ERROR: No matching symbol 'param5' + (61, 4) ERROR: No matching symbol 'SetAngles' + (63, 7) ERROR: No matching symbol 'SPAWNER_MODEL' + (66, 16) ERROR: No matching symbol 'REMOVE_DELAY' + (67, 4) ERROR: Illegal operation on 'string' + (70, 8) ERROR: No matching symbol 'SHOW_FX' + (72, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (76, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 3) ERROR: No matching symbol 'REMOVE_DELAY' + (81, 2) INFO: Compiling void SpellMakerBase::show_fx() + (83, 3) ERROR: No matching symbol 'ClientEvent' + (86, 2) INFO: Compiling void SpellMakerBase::remove_scroll() + (90, 4) ERROR: No matching symbol 'CallExternal' + (92, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (95, 2) INFO: Compiling void SpellMakerBase::grant_spell() + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (112, 2) INFO: Compiling void SpellMakerBase::me_vanish() + (114, 3) ERROR: No matching symbol 'SetAlive' + (115, 3) ERROR: No matching symbol 'DeleteEntity' + (118, 2) INFO: Compiling void SpellMakerBase::stick_to_owner() + (129, 49) ERROR: Expected expression value + (129, 49) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\spell_maker_base.as + (23, 2) INFO: Compiling void SpellMakerBase::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'SetFly' + (29, 3) ERROR: No matching symbol 'SetGravity' + (30, 3) ERROR: No matching symbol 'SetModel' + (31, 3) ERROR: No matching symbol 'SetSolid' + (32, 3) ERROR: No matching symbol 'SetIdleAnim' + (33, 3) ERROR: No matching symbol 'SetMoveAnim' + (34, 7) ERROR: No matching symbol 'MODEL_OFSET' + (36, 4) ERROR: No matching symbol 'SetModelBody' + (38, 7) ERROR: No matching symbol 'ANIM_IDLE' + (40, 4) ERROR: No matching symbol 'PlayAnim' + (42, 7) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 29) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 14) ERROR: No matching symbol 'GetOwner' + (46, 8) ERROR: No matching symbol 'FX_GLOW' + (48, 4) ERROR: No matching symbol 'Effect' + (52, 2) INFO: Compiling void SpellMakerBase::game_dynamically_created() + (54, 14) ERROR: No matching symbol 'GetEntityIndex' + (55, 20) ERROR: No matching symbol 'param2' + (58, 22) ERROR: No matching symbol 'param3' + (59, 22) ERROR: No matching symbol 'param4' + (60, 21) ERROR: No matching symbol 'param5' + (61, 4) ERROR: No matching symbol 'SetAngles' + (63, 7) ERROR: No matching symbol 'SPAWNER_MODEL' + (66, 16) ERROR: No matching symbol 'REMOVE_DELAY' + (67, 4) ERROR: Illegal operation on 'string' + (70, 8) ERROR: No matching symbol 'SHOW_FX' + (72, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (76, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 3) ERROR: No matching symbol 'REMOVE_DELAY' + (81, 2) INFO: Compiling void SpellMakerBase::show_fx() + (83, 3) ERROR: No matching symbol 'ClientEvent' + (86, 2) INFO: Compiling void SpellMakerBase::remove_scroll() + (90, 4) ERROR: No matching symbol 'CallExternal' + (92, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (95, 2) INFO: Compiling void SpellMakerBase::grant_spell() + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (112, 2) INFO: Compiling void SpellMakerBase::me_vanish() + (114, 3) ERROR: No matching symbol 'SetAlive' + (115, 3) ERROR: No matching symbol 'DeleteEntity' + (118, 2) INFO: Compiling void SpellMakerBase::stick_to_owner() + (129, 49) ERROR: Expected expression value + (129, 49) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\spell_maker_divination.as + (13, 2) ERROR: Expected method or property + (13, 2) ERROR: Instead found identifier 'string' + (15, 22) ERROR: Expected identifier + (15, 22) ERROR: Instead found '(' + (87, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\spell_maker_fire.as + (10, 2) INFO: Compiling SpellMakerFire::SpellMakerFire() + (20, 16) ERROR: 'SOUND_SPAWN' is already declared + (23, 2) INFO: Compiling void SpellMakerBase::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'SetFly' + (29, 3) ERROR: No matching symbol 'SetGravity' + (30, 3) ERROR: No matching symbol 'SetModel' + (31, 3) ERROR: No matching symbol 'SetSolid' + (32, 3) ERROR: No matching symbol 'SetIdleAnim' + (33, 3) ERROR: No matching symbol 'SetMoveAnim' + (34, 7) ERROR: No matching symbol 'MODEL_OFSET' + (36, 4) ERROR: No matching symbol 'SetModelBody' + (38, 7) ERROR: No matching symbol 'ANIM_IDLE' + (40, 4) ERROR: No matching symbol 'PlayAnim' + (42, 7) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 29) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 14) ERROR: No matching symbol 'GetOwner' + (46, 8) ERROR: No matching symbol 'FX_GLOW' + (48, 4) ERROR: No matching symbol 'Effect' + (52, 2) INFO: Compiling void SpellMakerBase::game_dynamically_created() + (54, 14) ERROR: No matching symbol 'GetEntityIndex' + (55, 20) ERROR: No matching symbol 'param2' + (58, 22) ERROR: No matching symbol 'param3' + (59, 22) ERROR: No matching symbol 'param4' + (60, 21) ERROR: No matching symbol 'param5' + (61, 4) ERROR: No matching symbol 'SetAngles' + (63, 7) ERROR: No matching symbol 'SPAWNER_MODEL' + (66, 16) ERROR: No matching symbol 'REMOVE_DELAY' + (67, 4) ERROR: Illegal operation on 'string' + (70, 8) ERROR: No matching symbol 'SHOW_FX' + (72, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (76, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 3) ERROR: No matching symbol 'REMOVE_DELAY' + (81, 2) INFO: Compiling void SpellMakerBase::show_fx() + (83, 3) ERROR: No matching symbol 'ClientEvent' + (86, 2) INFO: Compiling void SpellMakerBase::remove_scroll() + (90, 4) ERROR: No matching symbol 'CallExternal' + (92, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (95, 2) INFO: Compiling void SpellMakerBase::grant_spell() + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (112, 2) INFO: Compiling void SpellMakerBase::me_vanish() + (114, 3) ERROR: No matching symbol 'SetAlive' + (115, 3) ERROR: No matching symbol 'DeleteEntity' + (118, 2) INFO: Compiling void SpellMakerBase::stick_to_owner() + (129, 49) ERROR: Expected expression value + (129, 49) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\spell_maker_ice.as + (12, 2) INFO: Compiling SpellMakerIce::SpellMakerIce() + (25, 3) ERROR: No matching symbol 'Precache' + (23, 2) INFO: Compiling void SpellMakerBase::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'SetFly' + (29, 3) ERROR: No matching symbol 'SetGravity' + (30, 3) ERROR: No matching symbol 'SetModel' + (31, 3) ERROR: No matching symbol 'SetSolid' + (32, 3) ERROR: No matching symbol 'SetIdleAnim' + (33, 3) ERROR: No matching symbol 'SetMoveAnim' + (34, 7) ERROR: No matching symbol 'MODEL_OFSET' + (36, 4) ERROR: No matching symbol 'SetModelBody' + (38, 7) ERROR: No matching symbol 'ANIM_IDLE' + (40, 4) ERROR: No matching symbol 'PlayAnim' + (42, 7) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 29) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 14) ERROR: No matching symbol 'GetOwner' + (46, 8) ERROR: No matching symbol 'FX_GLOW' + (48, 4) ERROR: No matching symbol 'Effect' + (52, 2) INFO: Compiling void SpellMakerBase::game_dynamically_created() + (54, 14) ERROR: No matching symbol 'GetEntityIndex' + (55, 20) ERROR: No matching symbol 'param2' + (58, 22) ERROR: No matching symbol 'param3' + (59, 22) ERROR: No matching symbol 'param4' + (60, 21) ERROR: No matching symbol 'param5' + (61, 4) ERROR: No matching symbol 'SetAngles' + (63, 7) ERROR: No matching symbol 'SPAWNER_MODEL' + (66, 16) ERROR: No matching symbol 'REMOVE_DELAY' + (67, 4) ERROR: Illegal operation on 'string' + (70, 8) ERROR: No matching symbol 'SHOW_FX' + (72, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (76, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 3) ERROR: No matching symbol 'REMOVE_DELAY' + (81, 2) INFO: Compiling void SpellMakerBase::show_fx() + (83, 3) ERROR: No matching symbol 'ClientEvent' + (86, 2) INFO: Compiling void SpellMakerBase::remove_scroll() + (90, 4) ERROR: No matching symbol 'CallExternal' + (92, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (95, 2) INFO: Compiling void SpellMakerBase::grant_spell() + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (112, 2) INFO: Compiling void SpellMakerBase::me_vanish() + (114, 3) ERROR: No matching symbol 'SetAlive' + (115, 3) ERROR: No matching symbol 'DeleteEntity' + (118, 2) INFO: Compiling void SpellMakerBase::stick_to_owner() + (129, 49) ERROR: Expected expression value + (129, 49) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\spell_maker_invisible.as + (23, 2) INFO: Compiling void SpellMakerBase::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'SetFly' + (29, 3) ERROR: No matching symbol 'SetGravity' + (30, 3) ERROR: No matching symbol 'SetModel' + (31, 3) ERROR: No matching symbol 'SetSolid' + (32, 3) ERROR: No matching symbol 'SetIdleAnim' + (33, 3) ERROR: No matching symbol 'SetMoveAnim' + (34, 7) ERROR: No matching symbol 'MODEL_OFSET' + (36, 4) ERROR: No matching symbol 'SetModelBody' + (38, 7) ERROR: No matching symbol 'ANIM_IDLE' + (40, 4) ERROR: No matching symbol 'PlayAnim' + (42, 7) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 29) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 14) ERROR: No matching symbol 'GetOwner' + (46, 8) ERROR: No matching symbol 'FX_GLOW' + (48, 4) ERROR: No matching symbol 'Effect' + (52, 2) INFO: Compiling void SpellMakerBase::game_dynamically_created() + (54, 14) ERROR: No matching symbol 'GetEntityIndex' + (55, 20) ERROR: No matching symbol 'param2' + (58, 22) ERROR: No matching symbol 'param3' + (59, 22) ERROR: No matching symbol 'param4' + (60, 21) ERROR: No matching symbol 'param5' + (61, 4) ERROR: No matching symbol 'SetAngles' + (63, 7) ERROR: No matching symbol 'SPAWNER_MODEL' + (66, 16) ERROR: No matching symbol 'REMOVE_DELAY' + (67, 4) ERROR: Illegal operation on 'string' + (70, 8) ERROR: No matching symbol 'SHOW_FX' + (72, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (76, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 3) ERROR: No matching symbol 'REMOVE_DELAY' + (81, 2) INFO: Compiling void SpellMakerBase::show_fx() + (83, 3) ERROR: No matching symbol 'ClientEvent' + (86, 2) INFO: Compiling void SpellMakerBase::remove_scroll() + (90, 4) ERROR: No matching symbol 'CallExternal' + (92, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (95, 2) INFO: Compiling void SpellMakerBase::grant_spell() + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (112, 2) INFO: Compiling void SpellMakerBase::me_vanish() + (114, 3) ERROR: No matching symbol 'SetAlive' + (115, 3) ERROR: No matching symbol 'DeleteEntity' + (118, 2) INFO: Compiling void SpellMakerBase::stick_to_owner() + (129, 49) ERROR: Expected expression value + (129, 49) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\spell_maker_lightning.as + (41, 2) INFO: Compiling void SpellMakerLightning::client_activate() + (44, 37) ERROR: Expected expression value + (44, 37) ERROR: Instead found '' + (53, 42) ERROR: Expected expression value + (53, 42) ERROR: Instead found '' + (67, 2) INFO: Compiling void SpellMakerLightning::setup_sprite1_sparkle() + (69, 22) ERROR: No matching symbol 'DEATH_DELAY' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (84, 2) INFO: Compiling void SpellMakerLightning::sprite_update() + (86, 3) ERROR: No matching symbol 'ClientEffect' + (90, 4) ERROR: No matching symbol 'ClientEffect' + (91, 4) ERROR: No matching symbol 'ClientEffect' + (100, 2) INFO: Compiling void SpellMakerLightning::cl_make_beams() + (105, 37) ERROR: Expected expression value + (105, 37) ERROR: Instead found '' + (120, 36) ERROR: Expected expression value + (120, 36) ERROR: Instead found '' + (130, 36) ERROR: Expected expression value + (130, 36) ERROR: Instead found '' + (140, 36) ERROR: Expected expression value + (140, 36) ERROR: Instead found '' + (147, 2) INFO: Compiling void SpellMakerLightning::remove_me() + (149, 3) ERROR: No matching symbol 'RemoveScript' + (152, 2) INFO: Compiling void SpellMakerLightning::svr_show_fx() + (158, 35) ERROR: Expected expression value + (158, 35) ERROR: Instead found '' + (159, 47) ERROR: Expected expression value + (159, 47) ERROR: Instead found '' + (167, 35) ERROR: Expected expression value + (167, 35) ERROR: Instead found '' + (168, 47) ERROR: Expected expression value + (168, 47) ERROR: Instead found '' + (176, 35) ERROR: Expected expression value + (176, 35) ERROR: Instead found '' + (177, 47) ERROR: Expected expression value + (177, 47) ERROR: Instead found '' + (185, 35) ERROR: Expected expression value + (185, 35) ERROR: Instead found '' + (186, 47) ERROR: Expected expression value + (186, 47) ERROR: Instead found '' + (194, 35) ERROR: Expected expression value + (194, 35) ERROR: Instead found '' + (195, 47) ERROR: Expected expression value + (195, 47) ERROR: Instead found '' + (203, 2) INFO: Compiling void SpellMakerLightning::beam_silent() + (210, 75) ERROR: Expected expression value + (210, 75) ERROR: Instead found '' + (213, 2) INFO: Compiling void SpellMakerLightning::center_beam() + (218, 72) ERROR: Expected expression value + (218, 72) ERROR: Instead found '' + (23, 2) INFO: Compiling void SpellMakerBase::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'SetFly' + (29, 3) ERROR: No matching symbol 'SetGravity' + (30, 3) ERROR: No matching symbol 'SetModel' + (31, 3) ERROR: No matching symbol 'SetSolid' + (32, 3) ERROR: No matching symbol 'SetIdleAnim' + (33, 3) ERROR: No matching symbol 'SetMoveAnim' + (34, 7) ERROR: No matching symbol 'MODEL_OFSET' + (36, 4) ERROR: No matching symbol 'SetModelBody' + (38, 7) ERROR: No matching symbol 'ANIM_IDLE' + (40, 4) ERROR: No matching symbol 'PlayAnim' + (42, 7) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 29) ERROR: No matching symbol 'SOUND_SPAWN' + (44, 14) ERROR: No matching symbol 'GetOwner' + (46, 8) ERROR: No matching symbol 'FX_GLOW' + (48, 4) ERROR: No matching symbol 'Effect' + (52, 2) INFO: Compiling void SpellMakerBase::game_dynamically_created() + (54, 14) ERROR: No matching symbol 'GetEntityIndex' + (55, 20) ERROR: No matching symbol 'param2' + (58, 22) ERROR: No matching symbol 'param3' + (59, 22) ERROR: No matching symbol 'param4' + (60, 21) ERROR: No matching symbol 'param5' + (61, 4) ERROR: No matching symbol 'SetAngles' + (63, 7) ERROR: No matching symbol 'SPAWNER_MODEL' + (66, 16) ERROR: No matching symbol 'REMOVE_DELAY' + (67, 4) ERROR: Illegal operation on 'string' + (70, 8) ERROR: No matching symbol 'SHOW_FX' + (72, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (76, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 3) ERROR: No matching symbol 'REMOVE_DELAY' + (81, 2) INFO: Compiling void SpellMakerBase::show_fx() + (83, 3) ERROR: No matching symbol 'ClientEvent' + (86, 2) INFO: Compiling void SpellMakerBase::remove_scroll() + (90, 4) ERROR: No matching symbol 'CallExternal' + (92, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (95, 2) INFO: Compiling void SpellMakerBase::grant_spell() + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (112, 2) INFO: Compiling void SpellMakerBase::me_vanish() + (114, 3) ERROR: No matching symbol 'SetAlive' + (115, 3) ERROR: No matching symbol 'DeleteEntity' + (118, 2) INFO: Compiling void SpellMakerBase::stick_to_owner() + (129, 49) ERROR: Expected expression value + (129, 49) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\spell_maker_protection.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\companion\spell_maker_summoning.as + (13, 2) ERROR: Expected method or property + (13, 2) ERROR: Instead found identifier 'string' + (15, 21) ERROR: Expected identifier + (15, 21) ERROR: Instead found '(' + (83, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\corrupted_reaver.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\croc1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\debug.as + (12, 2) INFO: Compiling void Debug::bd_debug() + (28, 40) ERROR: Expected expression value + (28, 40) ERROR: Instead found '' + (38, 42) ERROR: Expected expression value + (38, 42) ERROR: Instead found '' + (105, 2) INFO: Compiling void Debug::dbg_dump_array() + (109, 55) ERROR: Expected expression value + (109, 55) ERROR: Instead found '' + (113, 53) ERROR: Expected expression value + (113, 53) ERROR: Instead found '' + (122, 2) INFO: Compiling void Debug::dbg_dump_array_elements() + (127, 48) ERROR: Expected expression value + (127, 48) ERROR: Instead found '' + (131, 46) ERROR: Expected expression value + (131, 46) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\demonwing_giant_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\demonwing_giant_ice_cl.as + (13, 2) INFO: Compiling void DemonwingGiantIceCl::client_activate() + (15, 14) ERROR: No matching symbol 'param1' + (16, 17) ERROR: No matching symbol 'param2' + (19, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (22, 2) INFO: Compiling void DemonwingGiantIceCl::fire_breath_loop() + (26, 34) ERROR: Expected expression value + (26, 34) ERROR: Instead found '' + (27, 73) ERROR: Expected expression value + (27, 73) ERROR: Instead found '' + (28, 73) ERROR: Expected expression value + (28, 73) ERROR: Instead found '' + (29, 73) ERROR: Expected expression value + (29, 73) ERROR: Instead found '' + (32, 2) INFO: Compiling void DemonwingGiantIceCl::end_fx() + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void DemonwingGiantIceCl::remove_fx() + (40, 3) ERROR: No matching symbol 'RemoveScript' + (43, 2) INFO: Compiling void DemonwingGiantIceCl::update_fire_cloud() + (46, 17) ERROR: No conversion from 'string' to 'int' available. + (49, 4) ERROR: No matching symbol 'ClientEffect' + (50, 4) ERROR: No matching symbol 'ClientEffect' + (54, 2) INFO: Compiling void DemonwingGiantIceCl::setup_fire_cloud() + (69, 42) ERROR: Expected expression value + (69, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\demonwing_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\demonwing_venom.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\djinn_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\djinn_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\djinn_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\djinn_lightning_lesser.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\djinn_lightning_lesser_alt.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\djinn_lightning_lesser_cl.as + (25, 2) INFO: Compiling void DjinnLightningLesserCl::OnRepeatTimer() + (28, 39) ERROR: Expected expression value + (28, 39) ERROR: Instead found '' + (29, 38) ERROR: Expected expression value + (29, 38) ERROR: Instead found '' + (32, 2) INFO: Compiling void DjinnLightningLesserCl::client_activate() + (38, 51) ERROR: Expected expression value + (38, 51) ERROR: Instead found '' + (40, 39) ERROR: Expected expression value + (40, 39) ERROR: Instead found '' + (41, 38) ERROR: Expected expression value + (41, 38) ERROR: Instead found '' + (47, 2) INFO: Compiling void DjinnLightningLesserCl::game_prerender() + (50, 37) ERROR: Expected expression value + (50, 37) ERROR: Instead found '' + (54, 2) INFO: Compiling void DjinnLightningLesserCl::remove_fx() + (56, 7) ERROR: Illegal operation on this datatype + (58, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (61, 2) INFO: Compiling void DjinnLightningLesserCl::remove_me() + (63, 3) ERROR: No matching symbol 'RemoveScript' + (66, 2) INFO: Compiling void DjinnLightningLesserCl::hand_sprite() + (68, 3) ERROR: No matching symbol 'LogDebug' + (69, 17) ERROR: No matching symbol 'param1' + (70, 7) ERROR: No matching symbol 'param2' + (74, 7) ERROR: No matching symbol 'param2' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (81, 2) INFO: Compiling void DjinnLightningLesserCl::hand_powerup() + (84, 20) ERROR: No matching symbol 'param1' + (86, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (94, 2) INFO: Compiling void DjinnLightningLesserCl::update_rhand_sprite() + (96, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (98, 4) ERROR: No matching symbol 'ClientEffect' + (102, 4) ERROR: No matching symbol 'ClientEffect' + (106, 23) ERROR: No conversion from 'string' to 'int' available. + (110, 4) ERROR: No matching symbol 'ClientEffect' + (114, 23) ERROR: No conversion from 'string' to 'int' available. + (117, 4) ERROR: No matching symbol 'ClientEffect' + (122, 2) INFO: Compiling void DjinnLightningLesserCl::update_lhand_sprite() + (124, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (126, 4) ERROR: No matching symbol 'ClientEffect' + (130, 4) ERROR: No matching symbol 'ClientEffect' + (134, 23) ERROR: No conversion from 'string' to 'int' available. + (138, 4) ERROR: No matching symbol 'ClientEffect' + (142, 23) ERROR: No conversion from 'string' to 'int' available. + (145, 4) ERROR: No matching symbol 'ClientEffect' + (150, 2) INFO: Compiling void DjinnLightningLesserCl::setup_attack_sprite() + (160, 79) ERROR: Expected expression value + (160, 79) ERROR: Instead found '' + (163, 2) INFO: Compiling void DjinnLightningLesserCl::setup_hand_sprite() + (165, 3) ERROR: No matching symbol 'ClientEffect' + (166, 3) ERROR: No matching symbol 'ClientEffect' + (167, 3) ERROR: No matching symbol 'ClientEffect' + (168, 3) ERROR: No matching symbol 'ClientEffect' + (169, 3) ERROR: No matching symbol 'ClientEffect' + (170, 3) ERROR: No matching symbol 'ClientEffect' + (171, 3) ERROR: No matching symbol 'ClientEffect' + (172, 3) ERROR: No matching symbol 'ClientEffect' + (173, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\djinn_lightning_troll.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\djinn_ogre_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\djinn_ogre_fire_cl.as + (25, 2) INFO: Compiling void DjinnOgreFireCl::OnRepeatTimer() + (28, 39) ERROR: Expected expression value + (28, 39) ERROR: Instead found '' + (29, 38) ERROR: Expected expression value + (29, 38) ERROR: Instead found '' + (32, 2) INFO: Compiling void DjinnOgreFireCl::client_activate() + (38, 51) ERROR: Expected expression value + (38, 51) ERROR: Instead found '' + (40, 39) ERROR: Expected expression value + (40, 39) ERROR: Instead found '' + (41, 38) ERROR: Expected expression value + (41, 38) ERROR: Instead found '' + (51, 2) INFO: Compiling void DjinnOgreFireCl::game_prerender() + (54, 37) ERROR: Expected expression value + (54, 37) ERROR: Instead found '' + (58, 2) INFO: Compiling void DjinnOgreFireCl::update_rhand_sprite() + (60, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (62, 4) ERROR: No matching symbol 'ClientEffect' + (66, 4) ERROR: No matching symbol 'ClientEffect' + (70, 2) INFO: Compiling void DjinnOgreFireCl::update_lhand_sprite() + (72, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (74, 4) ERROR: No matching symbol 'ClientEffect' + (78, 4) ERROR: No matching symbol 'ClientEffect' + (93, 2) INFO: Compiling void DjinnOgreFireCl::fire_storm_loop() + (96, 49) ERROR: Expected expression value + (96, 49) ERROR: Instead found '' + (97, 48) ERROR: Expected expression value + (97, 48) ERROR: Instead found '' + (101, 2) INFO: Compiling void DjinnOgreFireCl::end_fx() + (105, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (108, 2) INFO: Compiling void DjinnOgreFireCl::remove_fx() + (110, 3) ERROR: No matching symbol 'RemoveScript' + (113, 2) INFO: Compiling void DjinnOgreFireCl::make_cloud() + (115, 22) ERROR: No matching symbol 'param1' + (116, 15) ERROR: No matching symbol 'param2' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (120, 2) INFO: Compiling void DjinnOgreFireCl::update_cloud() + (123, 17) ERROR: No conversion from 'string' to 'int' available. + (126, 4) ERROR: No matching symbol 'ClientEffect' + (127, 4) ERROR: No matching symbol 'ClientEffect' + (131, 2) INFO: Compiling void DjinnOgreFireCl::setup_cloud() + (147, 42) ERROR: Expected expression value + (147, 42) ERROR: Instead found '' + (151, 2) INFO: Compiling void DjinnOgreFireCl::setup_hand_sprite() + (153, 3) ERROR: No matching symbol 'ClientEffect' + (154, 3) ERROR: No matching symbol 'ClientEffect' + (155, 3) ERROR: No matching symbol 'ClientEffect' + (156, 3) ERROR: No matching symbol 'ClientEffect' + (157, 3) ERROR: No matching symbol 'ClientEffect' + (158, 3) ERROR: No matching symbol 'ClientEffect' + (159, 3) ERROR: No matching symbol 'ClientEffect' + (160, 3) ERROR: No matching symbol 'ClientEffect' + (161, 3) ERROR: No matching symbol 'ClientEffect' + (162, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\djinn_troll_lesser_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\doom_plant1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\doom_plant2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\doom_plant3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\doom_plant_cl.as + (13, 2) INFO: Compiling void DoomPlantCl::client_activate() + (15, 17) ERROR: No matching symbol 'param1' + (17, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (20, 2) INFO: Compiling void DoomPlantCl::end_fx() + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void DoomPlantCl::remove_fx() + (28, 3) ERROR: No matching symbol 'RemoveScript' + (31, 2) INFO: Compiling void DoomPlantCl::shoot_spur() + (33, 7) ERROR: Illegal operation on this datatype + (34, 23) ERROR: No matching symbol 'param1' + (35, 14) ERROR: No matching symbol 'param2' + (36, 3) ERROR: No matching symbol 'ClientEffect' + (39, 2) INFO: Compiling void DoomPlantCl::update_spur() + (41, 25) ERROR: No matching symbol 'NEXT_SHADOW' + (44, 3) ERROR: No matching symbol 'ClientEffect' + (47, 2) INFO: Compiling void DoomPlantCl::spur_trail() + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (62, 2) INFO: Compiling void DoomPlantCl::setup_spur() + (72, 79) ERROR: Expected expression value + (72, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\doom_plant_new.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dragonfly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dragonfly_queen.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dragon_guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dragon_guard_breath_cl.as + (20, 2) INFO: Compiling void DragonGuardBreathCl::client_activate() + (22, 14) ERROR: No matching symbol 'param1' + (23, 17) ERROR: No matching symbol 'param2' + (24, 3) ERROR: No matching symbol 'LogDebug' + (25, 3) ERROR: No matching symbol 'FX_DURATION' + (45, 2) INFO: Compiling void DragonGuardBreathCl::end_fx() + (48, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (51, 2) INFO: Compiling void DragonGuardBreathCl::remove_fx() + (53, 3) ERROR: No matching symbol 'RemoveScript' + (56, 2) INFO: Compiling void DragonGuardBreathCl::breath_loop() + (60, 41) ERROR: Expected expression value + (60, 41) ERROR: Instead found '' + (61, 34) ERROR: Expected expression value + (61, 34) ERROR: Instead found '' + (67, 2) INFO: Compiling void DragonGuardBreathCl::setup_cloud_cold() + (82, 42) ERROR: Expected expression value + (82, 42) ERROR: Instead found '' + (86, 2) INFO: Compiling void DragonGuardBreathCl::update_cloud() + (89, 17) ERROR: No conversion from 'string' to 'double' available. + (92, 4) ERROR: No matching symbol 'ClientEffect' + (93, 4) ERROR: No matching symbol 'ClientEffect' + (97, 2) INFO: Compiling void DragonGuardBreathCl::setup_cloud_fire() + (116, 42) ERROR: Expected expression value + (116, 42) ERROR: Instead found '' + (120, 2) INFO: Compiling void DragonGuardBreathCl::setup_cloud_poison() + (135, 42) ERROR: Expected expression value + (135, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_bomber.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_bomber_cl.as + (25, 2) INFO: Compiling void DwarfBomberCl::client_activate() + (27, 14) ERROR: No matching symbol 'param1' + (28, 17) ERROR: No matching symbol 'param2' + (31, 16) ERROR: No matching symbol 'param3' + (32, 16) ERROR: No matching symbol 'param4' + (33, 3) ERROR: No matching signatures to 'DwarfBomberCl::set_hands(string, string)' + (33, 3) INFO: Candidates are: + (33, 3) INFO: void MS::DwarfBomberCl::set_hands() + (35, 3) ERROR: No matching symbol 'SetCallback' + (36, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (39, 2) INFO: Compiling void DwarfBomberCl::sparks_loop() + (42, 11) ERROR: Expected ')' or ',' + (42, 11) ERROR: Instead found identifier '_1' + (53, 2) INFO: Compiling void DwarfBomberCl::game_prerender() + (59, 59) ERROR: Expected expression value + (59, 59) ERROR: Instead found '' + (66, 59) ERROR: Expected expression value + (66, 59) ERROR: Instead found '' + (71, 59) ERROR: Expected expression value + (71, 59) ERROR: Instead found '' + (78, 59) ERROR: Expected expression value + (78, 59) ERROR: Instead found '' + (86, 59) ERROR: Expected expression value + (86, 59) ERROR: Instead found '' + (91, 59) ERROR: Expected expression value + (91, 59) ERROR: Instead found '' + (97, 2) INFO: Compiling void DwarfBomberCl::end_fx() + (100, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (103, 2) INFO: Compiling void DwarfBomberCl::remove_fx() + (105, 3) ERROR: No matching symbol 'RemoveScript' + (108, 2) INFO: Compiling void DwarfBomberCl::set_hands() + (114, 52) ERROR: Expected expression value + (114, 52) ERROR: Instead found '' + (119, 52) ERROR: Expected expression value + (119, 52) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_bigaxe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_bloat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_bloat_cl.as + (12, 2) INFO: Compiling DwarfZombieBloatCl::DwarfZombieBloatCl() + (16, 3) ERROR: No matching symbol 'Precache' + (19, 2) INFO: Compiling void DwarfZombieBloatCl::client_activate() + (21, 14) ERROR: No matching symbol 'param1' + (24, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (27, 2) INFO: Compiling void DwarfZombieBloatCl::end_puke() + (30, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (33, 2) INFO: Compiling void DwarfZombieBloatCl::remove_me() + (35, 3) ERROR: No matching symbol 'RemoveScript' + (38, 2) INFO: Compiling void DwarfZombieBloatCl::puke_loop() + (42, 42) ERROR: Expected expression value + (42, 42) ERROR: Instead found '' + (43, 42) ERROR: Expected expression value + (43, 42) ERROR: Instead found '' + (44, 35) ERROR: Expected expression value + (44, 35) ERROR: Instead found '' + (45, 36) ERROR: Expected expression value + (45, 36) ERROR: Instead found '' + (46, 69) ERROR: Expected expression value + (46, 69) ERROR: Instead found '' + (49, 2) INFO: Compiling void DwarfZombieBloatCl::update_puke() + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (57, 2) INFO: Compiling void DwarfZombieBloatCl::setup_puke() + (73, 42) ERROR: Expected expression value + (73, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_bloat_light_cl.as + (17, 2) INFO: Compiling void DwarfZombieBloatLightCl::client_activate() + (23, 51) ERROR: Expected expression value + (23, 51) ERROR: Instead found '' + (29, 2) INFO: Compiling void DwarfZombieBloatLightCl::game_prerender() + (42, 28) ERROR: Expected expression value + (42, 28) ERROR: Instead found '' + (43, 37) ERROR: Expected expression value + (43, 37) ERROR: Instead found '' + (47, 2) INFO: Compiling void DwarfZombieBloatLightCl::remove_light() + (49, 3) ERROR: No matching symbol 'RemoveScript' + (52, 2) INFO: Compiling void DwarfZombieBloatLightCl::light_grow() + (54, 18) ERROR: No matching symbol 'param1' + (55, 20) ERROR: No matching symbol 'param2' + (59, 2) INFO: Compiling void DwarfZombieBloatLightCl::light_shrink() + (61, 18) ERROR: No matching symbol 'param1' + (62, 20) ERROR: No matching symbol 'param2' + (72, 2) INFO: Compiling void DwarfZombieBloatLightCl::do_flicker() + (87, 41) ERROR: Expected expression value + (87, 41) ERROR: Instead found '' + (106, 11) ERROR: Expected ')' or ',' + (106, 11) ERROR: Instead found identifier '_2' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_hbow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_pickaxe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_sbow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_smallaxe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\dwarf_zombie_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\eagle.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\eagle_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\eagle_demon.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\eagle_giant_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\eagle_giant_thunder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\eagle_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\eagle_metal.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\eagle_plague.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\eagle_stone.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_air0.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_air1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_air2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_earth1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_earth2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_earth3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_earth_cl.as + (25, 2) INFO: Compiling void ElementalEarthCl::client_activate() + (27, 14) ERROR: No matching symbol 'param1' + (28, 7) ERROR: No matching symbol 'param2' + (30, 13) ERROR: No matching symbol 'param3' + (33, 4) ERROR: No matching symbol 'ClientEffect' + (34, 4) ERROR: No matching symbol 'ClientEffect' + (35, 4) ERROR: No matching symbol 'EmitSound3D' + (36, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 7) ERROR: No matching symbol 'param2' + (42, 4) ERROR: No matching symbol 'PARAM3' + (46, 2) INFO: Compiling void ElementalEarthCl::setup_burst() + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (65, 2) INFO: Compiling void ElementalEarthCl::update_burst() + (72, 42) ERROR: Expected expression value + (72, 42) ERROR: Instead found '' + (79, 40) ERROR: Expected expression value + (79, 40) ERROR: Instead found '' + (85, 2) INFO: Compiling void ElementalEarthCl::setup_rock() + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (94, 3) ERROR: No matching symbol 'ClientEffect' + (95, 3) ERROR: No matching symbol 'ClientEffect' + (96, 3) ERROR: No matching symbol 'ClientEffect' + (97, 3) ERROR: No matching symbol 'ClientEffect' + (98, 3) ERROR: No matching symbol 'ClientEffect' + (100, 3) ERROR: No matching symbol 'ClientEffect' + (103, 2) INFO: Compiling void ElementalEarthCl::update_rock() + (111, 41) ERROR: Expected expression value + (111, 41) ERROR: Instead found '' + (123, 2) INFO: Compiling void ElementalEarthCl::collide_rock() + (125, 3) ERROR: No matching symbol 'EmitSound3D' + (126, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (129, 2) INFO: Compiling void ElementalEarthCl::end_fx() + (132, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (135, 2) INFO: Compiling void ElementalEarthCl::remove_fx() + (137, 3) ERROR: No matching symbol 'RemoveScript' + (140, 2) INFO: Compiling void ElementalEarthCl::shield_hit() + (142, 37) ERROR: Expected expression value + (142, 37) ERROR: Instead found '' + (143, 44) ERROR: Expected expression value + (143, 44) ERROR: Instead found '' + (144, 40) ERROR: Expected expression value + (144, 40) ERROR: Instead found '' + (145, 32) ERROR: Expected expression value + (145, 32) ERROR: Instead found '' + (150, 2) INFO: Compiling void ElementalEarthCl::setup_shield() + (152, 3) ERROR: No matching symbol 'ClientEffect' + (153, 3) ERROR: No matching symbol 'ClientEffect' + (154, 3) ERROR: No matching symbol 'ClientEffect' + (155, 3) ERROR: No matching symbol 'ClientEffect' + (156, 3) ERROR: No matching symbol 'ClientEffect' + (157, 3) ERROR: No matching symbol 'ClientEffect' + (158, 3) ERROR: No matching symbol 'ClientEffect' + (159, 3) ERROR: No matching symbol 'ClientEffect' + (160, 3) ERROR: No matching symbol 'ClientEffect' + (161, 3) ERROR: No matching symbol 'ClientEffect' + (164, 2) INFO: Compiling void ElementalEarthCl::setup_shield_negyaw() + (166, 3) ERROR: No matching symbol 'ClientEffect' + (167, 3) ERROR: No matching symbol 'ClientEffect' + (168, 3) ERROR: No matching symbol 'ClientEffect' + (169, 3) ERROR: No matching symbol 'ClientEffect' + (170, 3) ERROR: No matching symbol 'ClientEffect' + (171, 3) ERROR: No matching symbol 'ClientEffect' + (174, 15) ERROR: No conversion from 'string' to 'double' available. + (176, 4) ERROR: Illegal operation on 'string' + (178, 3) ERROR: No matching symbol 'ClientEffect' + (179, 3) ERROR: No matching symbol 'ClientEffect' + (180, 3) ERROR: No matching symbol 'ClientEffect' + (181, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_fire1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_fire2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_fire_guardian.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_fire_guardian2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_fire_guardian3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_fire_guardian_cl.as + (28, 2) INFO: Compiling void ElementalFireGuardianCl::client_activate() + (30, 14) ERROR: No matching symbol 'param1' + (31, 14) ERROR: No matching symbol 'param2' + (32, 3) ERROR: No matching symbol 'LogDebug' + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void ElementalFireGuardianCl::guardian_death() + (41, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (44, 2) INFO: Compiling void ElementalFireGuardianCl::end_fx() + (47, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (50, 2) INFO: Compiling void ElementalFireGuardianCl::remove_fx() + (52, 3) ERROR: No matching symbol 'RemoveScript' + (55, 2) INFO: Compiling void ElementalFireGuardianCl::dress_sprite_loop() + (59, 39) ERROR: Expected expression value + (59, 39) ERROR: Instead found '' + (60, 34) ERROR: Expected expression value + (60, 34) ERROR: Instead found '' + (68, 2) INFO: Compiling void ElementalFireGuardianCl::staff_glow() + (70, 3) ERROR: No matching symbol 'ClientEffect' + (73, 2) INFO: Compiling void ElementalFireGuardianCl::poison_storm_on() + (80, 39) ERROR: Expected expression value + (80, 39) ERROR: Instead found '' + (107, 51) ERROR: Expected expression value + (107, 51) ERROR: Instead found '' + (110, 2) INFO: Compiling void ElementalFireGuardianCl::make_poison_storm_ring() + (112, 39) ERROR: Expected expression value + (112, 39) ERROR: Instead found '' + (115, 34) ERROR: Expected expression value + (115, 34) ERROR: Instead found '' + (126, 2) INFO: Compiling void ElementalFireGuardianCl::poison_storm_loop() + (128, 7) ERROR: Illegal operation on this datatype + (129, 7) ERROR: Illegal operation on this datatype + (130, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (131, 3) ERROR: No matching symbol 'ClientEffect' + (134, 2) INFO: Compiling void ElementalFireGuardianCl::staff_track_loop() + (138, 34) ERROR: Expected expression value + (138, 34) ERROR: Instead found '' + (146, 2) INFO: Compiling void ElementalFireGuardianCl::fire_projectile_miss_sound() + (148, 3) ERROR: No matching symbol 'EmitSound3D' + (151, 2) INFO: Compiling void ElementalFireGuardianCl::update_staff_glow() + (153, 3) ERROR: No matching symbol 'ClientEffect' + (155, 3) ERROR: Illegal operation on 'string' + (156, 16) ERROR: No conversion from 'string' to 'int' available. + (158, 4) ERROR: No matching symbol 'ClientEffect' + (159, 4) ERROR: No matching symbol 'ClientEffect' + (161, 16) ERROR: No conversion from 'string' to 'int' available. + (163, 4) ERROR: No matching symbol 'ClientEffect' + (167, 2) INFO: Compiling void ElementalFireGuardianCl::setup_staff_glow() + (169, 3) ERROR: No matching symbol 'ClientEffect' + (170, 3) ERROR: No matching symbol 'ClientEffect' + (171, 3) ERROR: No matching symbol 'ClientEffect' + (172, 3) ERROR: No matching symbol 'ClientEffect' + (173, 3) ERROR: No matching symbol 'ClientEffect' + (174, 3) ERROR: No matching symbol 'ClientEffect' + (175, 3) ERROR: No matching symbol 'ClientEffect' + (176, 3) ERROR: No matching symbol 'ClientEffect' + (177, 3) ERROR: No matching symbol 'ClientEffect' + (178, 3) ERROR: No matching symbol 'ClientEffect' + (179, 3) ERROR: No matching symbol 'ClientEffect' + (182, 2) INFO: Compiling void ElementalFireGuardianCl::setup_cloud() + (208, 37) ERROR: Expected expression value + (208, 37) ERROR: Instead found '' + (217, 37) ERROR: Expected expression value + (217, 37) ERROR: Instead found '' + (222, 2) INFO: Compiling void ElementalFireGuardianCl::update_cloud() + (234, 34) ERROR: Expected expression value + (234, 34) ERROR: Instead found '' + (238, 2) INFO: Compiling void ElementalFireGuardianCl::setup_storm_sprite() + (240, 3) ERROR: No matching symbol 'ClientEffect' + (241, 3) ERROR: No matching symbol 'ClientEffect' + (242, 3) ERROR: No matching symbol 'ClientEffect' + (243, 3) ERROR: No matching symbol 'ClientEffect' + (244, 3) ERROR: No matching symbol 'ClientEffect' + (245, 3) ERROR: No matching symbol 'ClientEffect' + (246, 3) ERROR: No matching symbol 'ClientEffect' + (247, 3) ERROR: No matching symbol 'ClientEffect' + (248, 3) ERROR: No matching symbol 'ClientEffect' + (249, 3) ERROR: No matching symbol 'ClientEffect' + (250, 3) ERROR: No matching symbol 'ClientEffect' + (251, 3) ERROR: No matching symbol 'ClientEffect' + (254, 2) INFO: Compiling void ElementalFireGuardianCl::update_storm_sprite() + (265, 39) ERROR: Expected expression value + (265, 39) ERROR: Instead found '' + (267, 34) ERROR: Expected expression value + (267, 34) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_ice1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_ice2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_ice_guardian.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_ice_guardian2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_ice_guardian3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_ice_guardian_cl.as + (26, 2) INFO: Compiling void ElementalIceGuardianCl::client_activate() + (28, 14) ERROR: No matching symbol 'param1' + (29, 14) ERROR: No matching symbol 'param2' + (30, 3) ERROR: No matching symbol 'LogDebug' + (32, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (36, 2) INFO: Compiling void ElementalIceGuardianCl::guardian_death() + (39, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (42, 2) INFO: Compiling void ElementalIceGuardianCl::end_fx() + (45, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (48, 2) INFO: Compiling void ElementalIceGuardianCl::remove_fx() + (50, 3) ERROR: No matching symbol 'RemoveScript' + (53, 2) INFO: Compiling void ElementalIceGuardianCl::dress_sprite_loop() + (57, 39) ERROR: Expected expression value + (57, 39) ERROR: Instead found '' + (58, 34) ERROR: Expected expression value + (58, 34) ERROR: Instead found '' + (66, 2) INFO: Compiling void ElementalIceGuardianCl::fire_projectile() + (76, 39) ERROR: Expected expression value + (76, 39) ERROR: Instead found '' + (87, 2) INFO: Compiling void ElementalIceGuardianCl::shock_storm_on() + (89, 7) ERROR: Illegal operation on this datatype + (102, 2) INFO: Compiling void ElementalIceGuardianCl::shock_storm_loop() + (104, 7) ERROR: Illegal operation on this datatype + (105, 7) ERROR: Illegal operation on this datatype + (106, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (107, 3) ERROR: No matching symbol 'ClientEffect' + (110, 2) INFO: Compiling void ElementalIceGuardianCl::staff_track_loop() + (114, 34) ERROR: Expected expression value + (114, 34) ERROR: Instead found '' + (122, 2) INFO: Compiling void ElementalIceGuardianCl::fire_projectile_miss_sound() + (124, 3) ERROR: No matching symbol 'EmitSound3D' + (127, 2) INFO: Compiling void ElementalIceGuardianCl::update_staff_glow() + (129, 3) ERROR: No matching symbol 'ClientEffect' + (131, 3) ERROR: Illegal operation on 'string' + (132, 16) ERROR: No conversion from 'string' to 'int' available. + (134, 4) ERROR: No matching symbol 'ClientEffect' + (135, 4) ERROR: No matching symbol 'ClientEffect' + (137, 16) ERROR: No conversion from 'string' to 'int' available. + (139, 4) ERROR: No matching symbol 'ClientEffect' + (143, 2) INFO: Compiling void ElementalIceGuardianCl::setup_staff_glow() + (145, 3) ERROR: No matching symbol 'ClientEffect' + (146, 3) ERROR: No matching symbol 'ClientEffect' + (147, 3) ERROR: No matching symbol 'ClientEffect' + (148, 3) ERROR: No matching symbol 'ClientEffect' + (149, 3) ERROR: No matching symbol 'ClientEffect' + (150, 3) ERROR: No matching symbol 'ClientEffect' + (151, 3) ERROR: No matching symbol 'ClientEffect' + (152, 3) ERROR: No matching symbol 'ClientEffect' + (153, 3) ERROR: No matching symbol 'ClientEffect' + (154, 3) ERROR: No matching symbol 'ClientEffect' + (155, 3) ERROR: No matching symbol 'ClientEffect' + (156, 3) ERROR: No matching symbol 'ClientEffect' + (159, 2) INFO: Compiling void ElementalIceGuardianCl::setup_projectile() + (169, 79) ERROR: Expected expression value + (169, 79) ERROR: Instead found '' + (178, 2) INFO: Compiling void ElementalIceGuardianCl::setup_cloud() + (204, 37) ERROR: Expected expression value + (204, 37) ERROR: Instead found '' + (213, 37) ERROR: Expected expression value + (213, 37) ERROR: Instead found '' + (218, 2) INFO: Compiling void ElementalIceGuardianCl::update_cloud() + (230, 34) ERROR: Expected expression value + (230, 34) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_pure_cl.as + (22, 2) INFO: Compiling void ElementalPureCl::client_activate() + (31, 51) ERROR: Expected expression value + (31, 51) ERROR: Instead found '' + (37, 2) INFO: Compiling void ElementalPureCl::end_fx() + (40, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (43, 2) INFO: Compiling void ElementalPureCl::remove_fx() + (45, 3) ERROR: No matching symbol 'RemoveScript' + (48, 2) INFO: Compiling void ElementalPureCl::owner_death() + (51, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (54, 2) INFO: Compiling void ElementalPureCl::game_prerender() + (57, 54) ERROR: Expected expression value + (57, 54) ERROR: Instead found '' + (60, 2) INFO: Compiling void ElementalPureCl::skeleton_sprite() + (65, 24) ERROR: No matching symbol 'MAX_BONE' + (72, 2) INFO: Compiling void ElementalPureCl::light_bones_fire() + (76, 37) ERROR: Expected expression value + (76, 37) ERROR: Instead found '' + (80, 2) INFO: Compiling void ElementalPureCl::setup_bone_sprite() + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (96, 2) INFO: Compiling void ElementalPureCl::update_bone_sprite() + (103, 39) ERROR: Expected expression value + (103, 39) ERROR: Instead found '' + (127, 2) INFO: Compiling void ElementalPureCl::setup_drip_sprite() + (129, 3) ERROR: No matching symbol 'ClientEffect' + (130, 3) ERROR: No matching symbol 'ClientEffect' + (131, 3) ERROR: No matching symbol 'ClientEffect' + (132, 3) ERROR: No matching symbol 'ClientEffect' + (133, 3) ERROR: No matching symbol 'ClientEffect' + (134, 3) ERROR: No matching symbol 'ClientEffect' + (135, 3) ERROR: No matching symbol 'ClientEffect' + (136, 3) ERROR: No matching symbol 'ClientEffect' + (137, 3) ERROR: No matching symbol 'ClientEffect' + (138, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elemental_pure_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elf_warrior_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elf_wizard_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\elf_xbow_cl.as + (14, 2) INFO: Compiling ElfXbowCl::ElfXbowCl() + (20, 3) ERROR: No matching symbol 'Precache' + (21, 3) ERROR: No matching symbol 'Precache' + (22, 3) ERROR: No matching symbol 'Precache' + (23, 3) ERROR: No matching symbol 'Precache' + (26, 2) INFO: Compiling void ElfXbowCl::client_activate() + (28, 18) ERROR: No matching symbol 'param1' + (30, 3) ERROR: No matching signatures to 'string::L_DUR(const string)' + (33, 2) INFO: Compiling void ElfXbowCl::fire_bolt() + (46, 39) ERROR: Expected expression value + (46, 39) ERROR: Instead found '' + (53, 2) INFO: Compiling void ElfXbowCl::remove_fx() + (55, 3) ERROR: No matching symbol 'RemoveScript' + (58, 2) INFO: Compiling void ElfXbowCl::shadow_bolts() + (60, 3) ERROR: No matching symbol 'ClientEffect' + (64, 2) INFO: Compiling void ElfXbowCl::hit_wall() + (66, 3) ERROR: No matching symbol 'EmitSound3D' + (69, 2) INFO: Compiling void ElfXbowCl::do_splodie() + (71, 3) ERROR: No matching symbol 'EmitSound3D' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (76, 2) INFO: Compiling void ElfXbowCl::explode_sprite() + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (87, 2) INFO: Compiling void ElfXbowCl::setup_bolt() + (93, 79) ERROR: Expected expression value + (93, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\externals.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\eye_drainer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fallen_armor.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fallen_armor_triggered.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\firegiantghoul.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\firegiantghoul1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\firegiantghoul1_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\firegiantghoul2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\firegiantghoul2_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\firegiantghoul3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\firegiantghoul3_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\firegiantghoul_greater.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\firegiantghoul_lesser.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fire_fist_cl.as + (20, 2) INFO: Compiling void FireFistCl::client_activate() + (25, 51) ERROR: Expected expression value + (25, 51) ERROR: Instead found '' + (26, 70) ERROR: Expected expression value + (26, 70) ERROR: Instead found '' + (32, 2) INFO: Compiling void FireFistCl::game_prerender() + (34, 37) ERROR: Expected expression value + (34, 37) ERROR: Instead found '' + (36, 70) ERROR: Expected expression value + (36, 70) ERROR: Instead found '' + (39, 2) INFO: Compiling void FireFistCl::setup_flame() + (43, 3) ERROR: No matching symbol 'ClientEffect' + (44, 3) ERROR: No matching symbol 'ClientEffect' + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fire_reaver.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fire_reaver_cl.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found identifier 'string' + (13, 14) ERROR: Expected '(' + (13, 14) ERROR: Instead found '.' + (14, 14) ERROR: Expected '(' + (14, 14) ERROR: Instead found '.' + (16, 14) ERROR: Expected identifier + (16, 14) ERROR: Instead found '(' + (121, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fire_reaver_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fish_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fish_demon.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fish_killie.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fish_leech.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fish_shark.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fish_shark_alt.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\flan_aqua.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\flan_blue.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\flan_green.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\flan_red.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\flan_yellow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fw_alcolyte.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\fw_elder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gabe_newell.as + (6, 7) ERROR: Method 'void BaseFlyerGrav::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gabe_newell_cl.as + (12, 2) INFO: Compiling void GabeNewellCl::client_activate() + (22, 51) ERROR: Expected expression value + (22, 51) ERROR: Instead found '' + (26, 2) INFO: Compiling void GabeNewellCl::end_fx() + (28, 3) ERROR: No matching symbol 'RemoveScript' + (31, 2) INFO: Compiling void GabeNewellCl::game_prerender() + (37, 59) ERROR: Expected expression value + (37, 59) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gbat_hunter.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gbear_black_hpoly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gbear_black_lpoly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gbear_brown_hpoly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gbear_brown_lpoly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gbear_polar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gbear_polar_cl.as + (15, 2) INFO: Compiling void GbearPolarCl::client_activate() + (17, 14) ERROR: No matching symbol 'param1' + (18, 17) ERROR: No matching symbol 'param2' + (19, 15) ERROR: No matching symbol 'param3' + (20, 7) ERROR: Expression must be of boolean type, instead found 'string' + (24, 3) ERROR: No matching symbol 'PARAM2' + (27, 2) INFO: Compiling void GbearPolarCl::end_fx() + (29, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (32, 2) INFO: Compiling void GbearPolarCl::remove_fx() + (34, 3) ERROR: No matching symbol 'RemoveScript' + (37, 2) INFO: Compiling void GbearPolarCl::quick_breath() + (39, 35) ERROR: Expected expression value + (39, 35) ERROR: Instead found '' + (40, 35) ERROR: Expected expression value + (40, 35) ERROR: Instead found '' + (41, 37) ERROR: Expected expression value + (41, 37) ERROR: Instead found '' + (42, 75) ERROR: Expected expression value + (42, 75) ERROR: Instead found '' + (63, 2) INFO: Compiling void GbearPolarCl::breath_loop() + (67, 41) ERROR: Expected expression value + (67, 41) ERROR: Instead found '' + (68, 34) ERROR: Expected expression value + (68, 34) ERROR: Instead found '' + (74, 2) INFO: Compiling void GbearPolarCl::weather_snow_breath() + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (88, 2) INFO: Compiling void GbearPolarCl::setup_cloud() + (103, 42) ERROR: Expected expression value + (103, 42) ERROR: Instead found '' + (107, 2) INFO: Compiling void GbearPolarCl::update_cloud() + (110, 17) ERROR: No conversion from 'string' to 'int' available. + (113, 4) ERROR: No matching symbol 'ClientEffect' + (114, 4) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ghoul_greater.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ghoul_lesser.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\giantbat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\giantblackbear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\giantbrownbear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\giantbrwonbear.as + (8, 2) INFO: Compiling void Giantbrwonbear::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetInvincible' + (11, 3) ERROR: No matching symbol 'SetHealth' + (12, 19) ERROR: No matching symbol 'GetOwner' + (13, 3) ERROR: No matching symbol 'SetName' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\giantpolarbear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\giantrat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\giantrat2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\giantspider.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\giant_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\giant_frost.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gloam1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gloam_ether.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\goblin.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\goblinchief.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\goblin_guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\goblin_pouncer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\goblin_thrower.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\grizzly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\gspider.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\guard2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\guardian_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\guardian_fire_cl.as + (29, 2) INFO: Compiling GuardianFireCl::GuardianFireCl() + (48, 3) ERROR: No matching symbol 'Precache' + (51, 2) INFO: Compiling void GuardianFireCl::OnRepeatTimer() + (54, 34) ERROR: Expected expression value + (54, 34) ERROR: Instead found '' + (55, 34) ERROR: Expected expression value + (55, 34) ERROR: Instead found '' + (56, 34) ERROR: Expected expression value + (56, 34) ERROR: Instead found '' + (60, 38) ERROR: Expected expression value + (60, 38) ERROR: Instead found '' + (63, 2) INFO: Compiling void GuardianFireCl::client_activate() + (69, 51) ERROR: Expected expression value + (69, 51) ERROR: Instead found '' + (76, 2) INFO: Compiling void GuardianFireCl::remove_fx() + (78, 3) ERROR: No matching symbol 'RemoveScript' + (81, 2) INFO: Compiling void GuardianFireCl::game_prerender() + (83, 28) ERROR: Expected expression value + (83, 28) ERROR: Instead found '' + (87, 3) ERROR: Expected expression value + (87, 3) ERROR: Instead found reserved keyword 'else' + (104, 2) INFO: Compiling void GuardianFireCl::sword_on() + (107, 51) ERROR: Expected expression value + (107, 51) ERROR: Instead found '' + (110, 70) ERROR: Expected expression value + (110, 70) ERROR: Instead found '' + (111, 70) ERROR: Expected expression value + (111, 70) ERROR: Instead found '' + (112, 70) ERROR: Expected expression value + (112, 70) ERROR: Instead found '' + (113, 70) ERROR: Expected expression value + (113, 70) ERROR: Instead found '' + (114, 70) ERROR: Expected expression value + (114, 70) ERROR: Instead found '' + (115, 70) ERROR: Expected expression value + (115, 70) ERROR: Instead found '' + (116, 70) ERROR: Expected expression value + (116, 70) ERROR: Instead found '' + (125, 2) INFO: Compiling void GuardianFireCl::sword_flicker_loop() + (133, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (137, 2) INFO: Compiling void GuardianFireCl::recharge_fx() + (141, 72) ERROR: Expected expression value + (141, 72) ERROR: Instead found '' + (142, 72) ERROR: Expected expression value + (142, 72) ERROR: Instead found '' + (165, 2) INFO: Compiling void GuardianFireCl::charger_fx_loop() + (170, 40) ERROR: Expected expression value + (170, 40) ERROR: Instead found '' + (173, 40) ERROR: Expected expression value + (173, 40) ERROR: Instead found '' + (177, 2) INFO: Compiling void GuardianFireCl::recharge_fx_spit_sprite() + (180, 72) ERROR: Expected expression value + (180, 72) ERROR: Instead found '' + (183, 2) INFO: Compiling void GuardianFireCl::grab_sprite_on() + (185, 72) ERROR: Expected expression value + (185, 72) ERROR: Instead found '' + (188, 2) INFO: Compiling void GuardianFireCl::grab_fx() + (192, 49) ERROR: Expected expression value + (192, 49) ERROR: Instead found '' + (193, 70) ERROR: Expected expression value + (193, 70) ERROR: Instead found '' + (202, 2) INFO: Compiling void GuardianFireCl::stomp_fx() + (204, 15) ERROR: No matching symbol 'param1' + (207, 3) ERROR: No matching symbol 'EmitSound3D' + (214, 2) INFO: Compiling void GuardianFireCl::smash_fx() + (216, 15) ERROR: No matching symbol 'param1' + (219, 3) ERROR: No matching symbol 'EmitSound3D' + (224, 3) ERROR: No matching symbol 'LogDebug' + (227, 2) INFO: Compiling void GuardianFireCl::make_stomp_flames() + (230, 36) ERROR: Expected expression value + (230, 36) ERROR: Instead found '' + (235, 2) INFO: Compiling void GuardianFireCl::update_grab_targ_sprite() + (237, 3) ERROR: No matching symbol 'ClientEffect' + (240, 2) INFO: Compiling void GuardianFireCl::update_spit_sprite() + (250, 42) ERROR: Expected expression value + (250, 42) ERROR: Instead found '' + (251, 37) ERROR: Expected expression value + (251, 37) ERROR: Instead found '' + (262, 2) INFO: Compiling void GuardianFireCl::update_rhand_sprite() + (264, 3) ERROR: No matching symbol 'ClientEffect' + (267, 2) INFO: Compiling void GuardianFireCl::update_lhand_sprite() + (269, 3) ERROR: No matching symbol 'ClientEffect' + (272, 2) INFO: Compiling void GuardianFireCl::setup_stomp_sprite() + (292, 43) ERROR: Expected expression value + (292, 43) ERROR: Instead found '' + (298, 2) INFO: Compiling void GuardianFireCl::setup_grab_targ_sprite() + (300, 3) ERROR: No matching symbol 'ClientEffect' + (301, 3) ERROR: No matching symbol 'ClientEffect' + (302, 3) ERROR: No matching symbol 'ClientEffect' + (303, 3) ERROR: No matching symbol 'ClientEffect' + (304, 3) ERROR: No matching symbol 'ClientEffect' + (305, 3) ERROR: No matching symbol 'ClientEffect' + (306, 3) ERROR: No matching symbol 'ClientEffect' + (307, 3) ERROR: No matching symbol 'ClientEffect' + (308, 3) ERROR: No matching symbol 'ClientEffect' + (311, 2) INFO: Compiling void GuardianFireCl::setup_charger_sprite() + (313, 3) ERROR: No matching symbol 'ClientEffect' + (314, 3) ERROR: No matching symbol 'ClientEffect' + (315, 3) ERROR: No matching symbol 'ClientEffect' + (316, 3) ERROR: No matching symbol 'ClientEffect' + (317, 3) ERROR: No matching symbol 'ClientEffect' + (318, 3) ERROR: No matching symbol 'ClientEffect' + (319, 3) ERROR: No matching symbol 'ClientEffect' + (320, 3) ERROR: No matching symbol 'ClientEffect' + (323, 2) INFO: Compiling void GuardianFireCl::setup_grab_sprite() + (325, 3) ERROR: No matching symbol 'ClientEffect' + (326, 3) ERROR: No matching symbol 'ClientEffect' + (327, 3) ERROR: No matching symbol 'ClientEffect' + (328, 3) ERROR: No matching symbol 'ClientEffect' + (329, 3) ERROR: No matching symbol 'ClientEffect' + (330, 3) ERROR: No matching symbol 'ClientEffect' + (331, 3) ERROR: No matching symbol 'ClientEffect' + (332, 3) ERROR: No matching symbol 'ClientEffect' + (333, 3) ERROR: No matching symbol 'ClientEffect' + (336, 2) INFO: Compiling void GuardianFireCl::setup_charger_lhand_sprite() + (338, 3) ERROR: No matching symbol 'ClientEffect' + (339, 3) ERROR: No matching symbol 'ClientEffect' + (340, 3) ERROR: No matching symbol 'ClientEffect' + (341, 3) ERROR: No matching symbol 'ClientEffect' + (342, 3) ERROR: No matching symbol 'ClientEffect' + (343, 3) ERROR: No matching symbol 'ClientEffect' + (344, 3) ERROR: No matching symbol 'ClientEffect' + (345, 3) ERROR: No matching symbol 'ClientEffect' + (348, 2) INFO: Compiling void GuardianFireCl::setup_charger_rhand_sprite() + (350, 3) ERROR: No matching symbol 'ClientEffect' + (351, 3) ERROR: No matching symbol 'ClientEffect' + (352, 3) ERROR: No matching symbol 'ClientEffect' + (353, 3) ERROR: No matching symbol 'ClientEffect' + (354, 3) ERROR: No matching symbol 'ClientEffect' + (355, 3) ERROR: No matching symbol 'ClientEffect' + (356, 3) ERROR: No matching symbol 'ClientEffect' + (357, 3) ERROR: No matching symbol 'ClientEffect' + (360, 2) INFO: Compiling void GuardianFireCl::setup_spit_sprite() + (362, 3) ERROR: No matching symbol 'ClientEffect' + (363, 3) ERROR: No matching symbol 'ClientEffect' + (364, 3) ERROR: No matching symbol 'ClientEffect' + (365, 3) ERROR: No matching symbol 'ClientEffect' + (366, 3) ERROR: No matching symbol 'ClientEffect' + (367, 3) ERROR: No matching symbol 'ClientEffect' + (368, 3) ERROR: No matching symbol 'ClientEffect' + (369, 3) ERROR: No matching symbol 'ClientEffect' + (370, 3) ERROR: No matching symbol 'ClientEffect' + (371, 3) ERROR: No matching symbol 'ClientEffect' + (374, 2) INFO: Compiling void GuardianFireCl::setup_sword_sprite() + (385, 79) ERROR: Expected expression value + (385, 79) ERROR: Instead found '' + (390, 2) INFO: Compiling void GuardianFireCl::end_fx() + (393, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\guardian_iron.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\guardian_iron_charger.as + (10, 2) INFO: Compiling void GuardianIronCharger::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetGravity' + (13, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (16, 2) INFO: Compiling void GuardianIronCharger::mark_position() + (18, 3) ERROR: No matching symbol 'SetGlobalVar' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\guardian_iron_cl.as + (29, 2) INFO: Compiling GuardianIronCl::GuardianIronCl() + (48, 3) ERROR: No matching symbol 'Precache' + (51, 2) INFO: Compiling void GuardianIronCl::OnRepeatTimer() + (54, 34) ERROR: Expected expression value + (54, 34) ERROR: Instead found '' + (55, 34) ERROR: Expected expression value + (55, 34) ERROR: Instead found '' + (56, 34) ERROR: Expected expression value + (56, 34) ERROR: Instead found '' + (60, 38) ERROR: Expected expression value + (60, 38) ERROR: Instead found '' + (63, 2) INFO: Compiling void GuardianIronCl::client_activate() + (69, 51) ERROR: Expected expression value + (69, 51) ERROR: Instead found '' + (76, 2) INFO: Compiling void GuardianIronCl::remove_fx() + (78, 3) ERROR: No matching symbol 'RemoveScript' + (81, 2) INFO: Compiling void GuardianIronCl::game_prerender() + (83, 28) ERROR: Expected expression value + (83, 28) ERROR: Instead found '' + (87, 3) ERROR: Expected expression value + (87, 3) ERROR: Instead found reserved keyword 'else' + (104, 2) INFO: Compiling void GuardianIronCl::sword_on() + (107, 51) ERROR: Expected expression value + (107, 51) ERROR: Instead found '' + (110, 70) ERROR: Expected expression value + (110, 70) ERROR: Instead found '' + (111, 70) ERROR: Expected expression value + (111, 70) ERROR: Instead found '' + (112, 70) ERROR: Expected expression value + (112, 70) ERROR: Instead found '' + (113, 70) ERROR: Expected expression value + (113, 70) ERROR: Instead found '' + (114, 70) ERROR: Expected expression value + (114, 70) ERROR: Instead found '' + (115, 70) ERROR: Expected expression value + (115, 70) ERROR: Instead found '' + (116, 70) ERROR: Expected expression value + (116, 70) ERROR: Instead found '' + (125, 2) INFO: Compiling void GuardianIronCl::sword_flicker_loop() + (133, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (137, 2) INFO: Compiling void GuardianIronCl::recharge_fx() + (141, 72) ERROR: Expected expression value + (141, 72) ERROR: Instead found '' + (142, 72) ERROR: Expected expression value + (142, 72) ERROR: Instead found '' + (165, 2) INFO: Compiling void GuardianIronCl::charger_fx_loop() + (170, 40) ERROR: Expected expression value + (170, 40) ERROR: Instead found '' + (173, 40) ERROR: Expected expression value + (173, 40) ERROR: Instead found '' + (177, 2) INFO: Compiling void GuardianIronCl::recharge_fx_spit_sprite() + (180, 72) ERROR: Expected expression value + (180, 72) ERROR: Instead found '' + (183, 2) INFO: Compiling void GuardianIronCl::grab_sprite_on() + (185, 72) ERROR: Expected expression value + (185, 72) ERROR: Instead found '' + (188, 2) INFO: Compiling void GuardianIronCl::grab_fx() + (192, 49) ERROR: Expected expression value + (192, 49) ERROR: Instead found '' + (193, 70) ERROR: Expected expression value + (193, 70) ERROR: Instead found '' + (202, 2) INFO: Compiling void GuardianIronCl::stomp_fx() + (204, 15) ERROR: No matching symbol 'param1' + (207, 3) ERROR: No matching symbol 'EmitSound3D' + (214, 2) INFO: Compiling void GuardianIronCl::smash_fx() + (216, 15) ERROR: No matching symbol 'param1' + (219, 3) ERROR: No matching symbol 'EmitSound3D' + (224, 3) ERROR: No matching symbol 'LogDebug' + (227, 2) INFO: Compiling void GuardianIronCl::make_stomp_flames() + (230, 36) ERROR: Expected expression value + (230, 36) ERROR: Instead found '' + (235, 2) INFO: Compiling void GuardianIronCl::update_grab_sprite() + (237, 3) ERROR: No matching symbol 'ClientEffect' + (240, 2) INFO: Compiling void GuardianIronCl::update_grab_targ_sprite() + (242, 3) ERROR: No matching symbol 'ClientEffect' + (245, 2) INFO: Compiling void GuardianIronCl::update_spit_sprite() + (255, 42) ERROR: Expected expression value + (255, 42) ERROR: Instead found '' + (256, 37) ERROR: Expected expression value + (256, 37) ERROR: Instead found '' + (267, 2) INFO: Compiling void GuardianIronCl::update_rhand_sprite() + (269, 3) ERROR: No matching symbol 'ClientEffect' + (272, 2) INFO: Compiling void GuardianIronCl::update_lhand_sprite() + (274, 3) ERROR: No matching symbol 'ClientEffect' + (277, 2) INFO: Compiling void GuardianIronCl::setup_stomp_sprite() + (297, 43) ERROR: Expected expression value + (297, 43) ERROR: Instead found '' + (303, 2) INFO: Compiling void GuardianIronCl::setup_grab_targ_sprite() + (305, 3) ERROR: No matching symbol 'ClientEffect' + (306, 3) ERROR: No matching symbol 'ClientEffect' + (307, 3) ERROR: No matching symbol 'ClientEffect' + (308, 3) ERROR: No matching symbol 'ClientEffect' + (309, 3) ERROR: No matching symbol 'ClientEffect' + (310, 3) ERROR: No matching symbol 'ClientEffect' + (311, 3) ERROR: No matching symbol 'ClientEffect' + (312, 3) ERROR: No matching symbol 'ClientEffect' + (313, 3) ERROR: No matching symbol 'ClientEffect' + (316, 2) INFO: Compiling void GuardianIronCl::setup_charger_sprite() + (318, 3) ERROR: No matching symbol 'ClientEffect' + (319, 3) ERROR: No matching symbol 'ClientEffect' + (320, 3) ERROR: No matching symbol 'ClientEffect' + (321, 3) ERROR: No matching symbol 'ClientEffect' + (322, 3) ERROR: No matching symbol 'ClientEffect' + (323, 3) ERROR: No matching symbol 'ClientEffect' + (324, 3) ERROR: No matching symbol 'ClientEffect' + (325, 3) ERROR: No matching symbol 'ClientEffect' + (328, 2) INFO: Compiling void GuardianIronCl::setup_grab_sprite() + (330, 3) ERROR: No matching symbol 'ClientEffect' + (331, 3) ERROR: No matching symbol 'ClientEffect' + (332, 3) ERROR: No matching symbol 'ClientEffect' + (333, 3) ERROR: No matching symbol 'ClientEffect' + (334, 3) ERROR: No matching symbol 'ClientEffect' + (335, 3) ERROR: No matching symbol 'ClientEffect' + (336, 3) ERROR: No matching symbol 'ClientEffect' + (337, 3) ERROR: No matching symbol 'ClientEffect' + (340, 2) INFO: Compiling void GuardianIronCl::setup_charger_lhand_sprite() + (342, 3) ERROR: No matching symbol 'ClientEffect' + (343, 3) ERROR: No matching symbol 'ClientEffect' + (344, 3) ERROR: No matching symbol 'ClientEffect' + (345, 3) ERROR: No matching symbol 'ClientEffect' + (346, 3) ERROR: No matching symbol 'ClientEffect' + (347, 3) ERROR: No matching symbol 'ClientEffect' + (348, 3) ERROR: No matching symbol 'ClientEffect' + (349, 3) ERROR: No matching symbol 'ClientEffect' + (352, 2) INFO: Compiling void GuardianIronCl::setup_charger_rhand_sprite() + (354, 3) ERROR: No matching symbol 'ClientEffect' + (355, 3) ERROR: No matching symbol 'ClientEffect' + (356, 3) ERROR: No matching symbol 'ClientEffect' + (357, 3) ERROR: No matching symbol 'ClientEffect' + (358, 3) ERROR: No matching symbol 'ClientEffect' + (359, 3) ERROR: No matching symbol 'ClientEffect' + (360, 3) ERROR: No matching symbol 'ClientEffect' + (361, 3) ERROR: No matching symbol 'ClientEffect' + (364, 2) INFO: Compiling void GuardianIronCl::setup_spit_sprite() + (366, 3) ERROR: No matching symbol 'ClientEffect' + (367, 3) ERROR: No matching symbol 'ClientEffect' + (368, 3) ERROR: No matching symbol 'ClientEffect' + (369, 3) ERROR: No matching symbol 'ClientEffect' + (370, 3) ERROR: No matching symbol 'ClientEffect' + (371, 3) ERROR: No matching symbol 'ClientEffect' + (372, 3) ERROR: No matching symbol 'ClientEffect' + (373, 3) ERROR: No matching symbol 'ClientEffect' + (374, 3) ERROR: No matching symbol 'ClientEffect' + (375, 3) ERROR: No matching symbol 'ClientEffect' + (378, 2) INFO: Compiling void GuardianIronCl::setup_sword_sprite() + (389, 79) ERROR: Expected expression value + (389, 79) ERROR: Instead found '' + (394, 2) INFO: Compiling void GuardianIronCl::end_fx() + (397, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\hawk.as + (8, 2) INFO: Compiling Hawk::Hawk() + (10, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\hibari.as + (10, 2) INFO: Compiling void Hibari::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetModel' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRace' + (17, 3) ERROR: No matching symbol 'SetHealth' + (18, 3) ERROR: No matching symbol 'SetIdleAnim' + (19, 3) ERROR: No matching symbol 'SetMoveAnim' + (20, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\hobgoblin.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\hobgoblin_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\hobgoblin_berserker.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\horror.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\horror2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\horror_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\horror_fire2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\horror_fire2_ecaves.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\horror_gravfly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\horror_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\horror_lightning2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\horror_lightning_old.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\hunger.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\hunger_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\hungryrat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\hydra_fire_lesser.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\hydra_fire_lesser_cl.as + (26, 2) INFO: Compiling void HydraFireLesserCl::client_activate() + (46, 34) ERROR: Expected expression value + (46, 34) ERROR: Instead found '' + (53, 51) ERROR: Expected expression value + (53, 51) ERROR: Instead found '' + (57, 2) INFO: Compiling void HydraFireLesserCl::game_prerender() + (59, 28) ERROR: Expected expression value + (59, 28) ERROR: Instead found '' + (60, 57) ERROR: Expected expression value + (60, 57) ERROR: Instead found '' + (63, 45) ERROR: Expected expression value + (63, 45) ERROR: Instead found '' + (64, 44) ERROR: Expected expression value + (64, 44) ERROR: Instead found '' + (65, 46) ERROR: Expected expression value + (65, 46) ERROR: Instead found '' + (66, 40) ERROR: Expected expression value + (66, 40) ERROR: Instead found '' + (71, 2) INFO: Compiling void HydraFireLesserCl::end_fx() + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (79, 2) INFO: Compiling void HydraFireLesserCl::remove_fx() + (81, 3) ERROR: No matching symbol 'RemoveScript' + (84, 2) INFO: Compiling void HydraFireLesserCl::update_flame_circle() + (88, 35) ERROR: Expected expression value + (88, 35) ERROR: Instead found '' + (96, 80) ERROR: Expected expression value + (96, 80) ERROR: Instead found '' + (102, 2) INFO: Compiling void HydraFireLesserCl::setup_flame_circle() + (104, 3) ERROR: No matching symbol 'ClientEffect' + (105, 3) ERROR: No matching symbol 'ClientEffect' + (106, 3) ERROR: No matching symbol 'ClientEffect' + (107, 3) ERROR: No matching symbol 'ClientEffect' + (108, 3) ERROR: No matching symbol 'ClientEffect' + (109, 3) ERROR: No matching symbol 'ClientEffect' + (110, 3) ERROR: No matching symbol 'ClientEffect' + (111, 3) ERROR: No matching symbol 'ClientEffect' + (112, 3) ERROR: No matching symbol 'ClientEffect' + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (119, 2) INFO: Compiling void HydraFireLesserCl::cone_breath_on() + (125, 44) ERROR: Expected expression value + (125, 44) ERROR: Instead found '' + (126, 43) ERROR: Expected expression value + (126, 43) ERROR: Instead found '' + (127, 45) ERROR: Expected expression value + (127, 45) ERROR: Instead found '' + (128, 39) ERROR: Expected expression value + (128, 39) ERROR: Instead found '' + (138, 2) INFO: Compiling void HydraFireLesserCl::breath_sprites_loop() + (141, 11) ERROR: Expected ')' or ',' + (141, 11) ERROR: Instead found identifier '_1' + (142, 44) ERROR: Expected expression value + (142, 44) ERROR: Instead found '' + (143, 43) ERROR: Expected expression value + (143, 43) ERROR: Instead found '' + (144, 45) ERROR: Expected expression value + (144, 45) ERROR: Instead found '' + (145, 39) ERROR: Expected expression value + (145, 39) ERROR: Instead found '' + (146, 39) ERROR: Expected expression value + (146, 39) ERROR: Instead found '' + (162, 2) INFO: Compiling void HydraFireLesserCl::update_breath_sprite() + (166, 3) ERROR: No matching symbol 'ClientEffect' + (167, 3) ERROR: No matching symbol 'ClientEffect' + (170, 2) INFO: Compiling void HydraFireLesserCl::setup_breath_sprite() + (172, 3) ERROR: No matching symbol 'ClientEffect' + (173, 3) ERROR: No matching symbol 'ClientEffect' + (174, 3) ERROR: No matching symbol 'ClientEffect' + (175, 3) ERROR: No matching symbol 'ClientEffect' + (176, 3) ERROR: No matching symbol 'ClientEffect' + (177, 3) ERROR: No matching symbol 'ClientEffect' + (178, 3) ERROR: No matching symbol 'ClientEffect' + (179, 3) ERROR: No matching symbol 'ClientEffect' + (180, 3) ERROR: No matching symbol 'ClientEffect' + (181, 3) ERROR: No matching symbol 'ClientEffect' + (182, 3) ERROR: No matching symbol 'ClientEffect' + (183, 3) ERROR: No matching symbol 'ClientEffect' + (186, 2) INFO: Compiling void HydraFireLesserCl::update_breath_circle() + (190, 45) ERROR: Expected expression value + (190, 45) ERROR: Instead found '' + (191, 44) ERROR: Expected expression value + (191, 44) ERROR: Instead found '' + (192, 46) ERROR: Expected expression value + (192, 46) ERROR: Instead found '' + (193, 40) ERROR: Expected expression value + (193, 40) ERROR: Instead found '' + (201, 80) ERROR: Expected expression value + (201, 80) ERROR: Instead found '' + (207, 2) INFO: Compiling void HydraFireLesserCl::setup_breath_circle() + (209, 3) ERROR: No matching symbol 'ClientEffect' + (210, 3) ERROR: No matching symbol 'ClientEffect' + (211, 3) ERROR: No matching symbol 'ClientEffect' + (212, 3) ERROR: No matching symbol 'ClientEffect' + (213, 3) ERROR: No matching symbol 'ClientEffect' + (214, 3) ERROR: No matching symbol 'ClientEffect' + (215, 3) ERROR: No matching symbol 'ClientEffect' + (216, 3) ERROR: No matching symbol 'ClientEffect' + (217, 3) ERROR: No matching symbol 'ClientEffect' + (218, 3) ERROR: No matching symbol 'ClientEffect' + (219, 3) ERROR: No matching symbol 'ClientEffect' + (220, 3) ERROR: No matching symbol 'ClientEffect' + (221, 3) ERROR: No matching symbol 'ClientEffect' + (224, 2) INFO: Compiling void HydraFireLesserCl::add_beam() + (226, 3) ERROR: No matching symbol 'LogDebug' + (227, 18) ERROR: No matching symbol 'param1' + (228, 21) ERROR: No matching symbol 'param2' + (230, 3) ERROR: No matching symbol 'ClientEffect' + (232, 3) ERROR: No matching symbol 'ClientEffect' + (234, 3) ERROR: No matching symbol 'PARAM1' + (237, 2) INFO: Compiling void HydraFireLesserCl::remove_beams() + (239, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ice_mage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ice_mage2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ice_reaver.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ice_reaver_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ice_troll.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ice_troll_lobber.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ice_troll_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\khaz_model_test.as + (8, 2) INFO: Compiling void KhazModelTest::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetModel' + (11, 3) ERROR: No matching symbol 'SetInvincible' + (12, 3) ERROR: No matching symbol 'SetRace' + (13, 3) ERROR: No matching symbol 'SetSolid' + (14, 3) ERROR: No matching symbol 'SetBBox' + (17, 2) INFO: Compiling void KhazModelTest::ext_anim() + (19, 3) ERROR: No matching symbol 'PlayAnim' + (22, 2) INFO: Compiling void KhazModelTest::npc_suicide() + (24, 3) ERROR: No matching symbol 'DeleteEntity' + (27, 2) INFO: Compiling void KhazModelTest::ext_faceme() + (29, 3) ERROR: No matching symbol 'LogDebug' + (30, 3) ERROR: No matching symbol 'SetMoveDest' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\kodiak.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_alcolyte.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_alcolyte_ambush.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_alcolyte_blue.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_alcolyte_blue_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_alcolyte_gray.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_alcolyte_green.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_alcolyte_green_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_alcolyte_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_alcolyte_red.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_childre.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_childre_black.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_childre_boss.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_childre_boss_cl.as + (11, 2) INFO: Compiling KChildreBossCl::KChildreBossCl() + (14, 3) ERROR: No matching symbol 'Precache' + (19, 2) INFO: Compiling void KChildreBossCl::spriteify() + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void KChildreBossCl::remove_me() + (30, 3) ERROR: No matching symbol 'RemoveScript' + (33, 2) INFO: Compiling void KChildreBossCl::createsprite() + (35, 10) ERROR: Expected ';' + (35, 10) ERROR: Instead found identifier 'l' + (41, 32) ERROR: Expected expression value + (41, 32) ERROR: Instead found '' + (45, 2) INFO: Compiling void KChildreBossCl::client_activate() + (47, 34) ERROR: Expected expression value + (47, 34) ERROR: Instead found '' + (51, 2) INFO: Compiling void KChildreBossCl::new_cast() + (53, 34) ERROR: Expected expression value + (53, 34) ERROR: Instead found '' + (57, 2) INFO: Compiling void KChildreBossCl::setup_sprite1_sparkle() + (60, 35) ERROR: No matching operator that takes the types 'string' and 'string' found + (61, 37) ERROR: 'x' is not a member of 'string' + (62, 37) ERROR: 'y' is not a member of 'string' + (63, 37) ERROR: 'z' is not a member of 'string' + (64, 19) ERROR: No matching symbol 'SPRITE_VELOCITY' + (65, 19) ERROR: No matching symbol 'SPRITE_VELOCITY' + (66, 26) ERROR: No matching signatures to 'Vector3(string, string, string)' + (66, 26) INFO: Candidates are: + (66, 26) INFO: Vector3::Vector3() + (66, 26) INFO: Vector3::Vector3(float, float, float) + (66, 26) INFO: Rejected due to type mismatch at positional parameter 1 + (66, 26) INFO: Vector3::Vector3(const Vector3&in) + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_childre_boss_jelly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_elder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_elder_cl.as + (16, 2) INFO: Compiling KElderCl::KElderCl() + (21, 3) ERROR: No matching symbol 'Precache' + (24, 2) INFO: Compiling void KElderCl::client_activate() + (30, 45) ERROR: Expected expression value + (30, 45) ERROR: Instead found '' + (38, 2) INFO: Compiling void KElderCl::ke_maintain_script() + (41, 45) ERROR: Expected expression value + (41, 45) ERROR: Instead found '' + (46, 2) INFO: Compiling void KElderCl::ke_update_knife_sprite() + (57, 46) ERROR: Expected expression value + (57, 46) ERROR: Instead found '' + (64, 2) INFO: Compiling void KElderCl::ke_beam_loop() + (68, 41) ERROR: Expected expression value + (68, 41) ERROR: Instead found '' + (69, 36) ERROR: Expected expression value + (69, 36) ERROR: Instead found '' + (71, 42) ERROR: Expected expression value + (71, 42) ERROR: Instead found '' + (72, 40) ERROR: Expected expression value + (72, 40) ERROR: Instead found '' + (73, 35) ERROR: Expected expression value + (73, 35) ERROR: Instead found '' + (77, 2) INFO: Compiling void KElderCl::ke_beam_on() + (79, 3) ERROR: No matching symbol 'LogDebug' + (80, 22) ERROR: No matching symbol 'param1' + (81, 25) ERROR: No matching symbol 'param2' + (91, 2) INFO: Compiling void KElderCl::ke_knife_sprite_on() + (93, 3) ERROR: No matching symbol 'LogDebug' + (97, 2) INFO: Compiling void KElderCl::ke_setup_knife_sprite() + (103, 79) ERROR: Expected expression value + (103, 79) ERROR: Instead found '' + (113, 2) INFO: Compiling void KElderCl::ke_spit_sparks() + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (122, 3) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'ClientEffect' + (124, 3) ERROR: No matching symbol 'ClientEffect' + (125, 3) ERROR: No matching symbol 'ClientEffect' + (128, 2) INFO: Compiling void KElderCl::ke_end_effect() + (130, 3) ERROR: No matching symbol 'LogDebug' + (132, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (135, 2) INFO: Compiling void KElderCl::ke_remove_me() + (137, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_hollow_one.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_hollow_one_cl.as + (27, 2) INFO: Compiling void KHollowOneCl::client_activate() + (29, 14) ERROR: No matching symbol 'param1' + (31, 3) ERROR: No matching symbol 'LogDebug' + (34, 2) INFO: Compiling void KHollowOneCl::end_effect() + (36, 3) ERROR: No matching symbol 'RemoveScript' + (39, 2) INFO: Compiling void KHollowOneCl::spawn_drain_sprite_cl() + (41, 22) ERROR: No matching symbol 'param1' + (42, 26) ERROR: No matching symbol 'param2' + (43, 18) ERROR: No matching symbol 'param3' + (44, 3) ERROR: No matching symbol 'LogDebug' + (45, 21) ERROR: No conversion from 'string' to 'int' available. + (47, 4) ERROR: No matching symbol 'ClientEffect' + (49, 21) ERROR: No conversion from 'string' to 'int' available. + (51, 4) ERROR: No matching symbol 'ClientEffect' + (53, 21) ERROR: No conversion from 'string' to 'int' available. + (55, 4) ERROR: No matching symbol 'ClientEffect' + (57, 21) ERROR: No conversion from 'string' to 'int' available. + (59, 4) ERROR: No matching symbol 'ClientEffect' + (61, 21) ERROR: No conversion from 'string' to 'int' available. + (63, 4) ERROR: No matching symbol 'ClientEffect' + (65, 21) ERROR: No conversion from 'string' to 'int' available. + (67, 4) ERROR: No matching symbol 'ClientEffect' + (69, 21) ERROR: No conversion from 'string' to 'int' available. + (71, 4) ERROR: No matching symbol 'ClientEffect' + (73, 21) ERROR: No conversion from 'string' to 'int' available. + (75, 4) ERROR: No matching symbol 'ClientEffect' + (79, 2) INFO: Compiling void KHollowOneCl::update_drainer() + (81, 26) ERROR: No matching symbol 'param1' + (82, 21) ERROR: No conversion from 'string' to 'int' available. + (84, 20) ERROR: No matching symbol 'param2' + (85, 4) ERROR: No matching symbol 'LogDebug' + (87, 21) ERROR: No conversion from 'string' to 'int' available. + (89, 20) ERROR: No matching symbol 'param2' + (91, 21) ERROR: No conversion from 'string' to 'int' available. + (93, 20) ERROR: No matching symbol 'param2' + (95, 21) ERROR: No conversion from 'string' to 'int' available. + (97, 20) ERROR: No matching symbol 'param2' + (99, 21) ERROR: No conversion from 'string' to 'int' available. + (101, 20) ERROR: No matching symbol 'param2' + (103, 21) ERROR: No conversion from 'string' to 'int' available. + (105, 20) ERROR: No matching symbol 'param2' + (107, 21) ERROR: No conversion from 'string' to 'int' available. + (109, 20) ERROR: No matching symbol 'param2' + (111, 21) ERROR: No conversion from 'string' to 'int' available. + (113, 20) ERROR: No matching symbol 'param2' + (117, 2) INFO: Compiling void KHollowOneCl::update_drainer1() + (119, 79) ERROR: Expected expression value + (119, 79) ERROR: Instead found '' + (131, 2) INFO: Compiling void KHollowOneCl::update_drainer2() + (133, 79) ERROR: Expected expression value + (133, 79) ERROR: Instead found '' + (145, 2) INFO: Compiling void KHollowOneCl::update_drainer3() + (147, 79) ERROR: Expected expression value + (147, 79) ERROR: Instead found '' + (159, 2) INFO: Compiling void KHollowOneCl::update_drainer4() + (161, 79) ERROR: Expected expression value + (161, 79) ERROR: Instead found '' + (173, 2) INFO: Compiling void KHollowOneCl::update_drainer5() + (175, 79) ERROR: Expected expression value + (175, 79) ERROR: Instead found '' + (187, 2) INFO: Compiling void KHollowOneCl::update_drainer6() + (189, 79) ERROR: Expected expression value + (189, 79) ERROR: Instead found '' + (201, 2) INFO: Compiling void KHollowOneCl::update_drainer7() + (203, 79) ERROR: Expected expression value + (203, 79) ERROR: Instead found '' + (215, 2) INFO: Compiling void KHollowOneCl::update_drainer8() + (217, 79) ERROR: Expected expression value + (217, 79) ERROR: Instead found '' + (229, 2) INFO: Compiling void KHollowOneCl::sprite_popped() + (231, 3) ERROR: No matching symbol 'SetToken' + (234, 2) INFO: Compiling void KHollowOneCl::sprite_splode() + (236, 22) ERROR: No matching symbol 'param1' + (237, 3) ERROR: No matching symbol 'ClientEffect' + (238, 3) ERROR: No matching symbol 'ClientEffect' + (239, 3) ERROR: No matching symbol 'ClientEffect' + (240, 3) ERROR: No matching symbol 'ClientEffect' + (241, 3) ERROR: No matching symbol 'EmitSound3D' + (244, 2) INFO: Compiling void KHollowOneCl::setup_drainer() + (255, 79) ERROR: Expected expression value + (255, 79) ERROR: Instead found '' + (260, 2) INFO: Compiling void KHollowOneCl::setup_spark() + (264, 79) ERROR: Expected expression value + (264, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_larva.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_larva_black.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\k_larva_black_cl.as + (12, 2) INFO: Compiling KLarvaBlackCl::KLarvaBlackCl() + (16, 3) ERROR: No matching symbol 'Precache' + (19, 2) INFO: Compiling void KLarvaBlackCl::client_activate() + (21, 14) ERROR: No matching symbol 'param1' + (22, 14) ERROR: No matching symbol 'param2' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void KLarvaBlackCl::end_puke() + (31, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (34, 2) INFO: Compiling void KLarvaBlackCl::remove_me() + (36, 3) ERROR: No matching symbol 'RemoveScript' + (39, 2) INFO: Compiling void KLarvaBlackCl::puke_loop() + (43, 69) ERROR: Expected expression value + (43, 69) ERROR: Instead found '' + (46, 2) INFO: Compiling void KLarvaBlackCl::setup_puke() + (58, 41) ERROR: Expected expression value + (58, 41) ERROR: Instead found '' + (61, 42) ERROR: Expected expression value + (61, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lanskeleton.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lan_skeleton.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lighted_cl.as + (13, 2) INFO: Compiling void LightedCl::client_activate() + (19, 51) ERROR: Expected expression value + (19, 51) ERROR: Instead found '' + (24, 2) INFO: Compiling void LightedCl::game_prerender() + (26, 37) ERROR: Expected expression value + (26, 37) ERROR: Instead found '' + (30, 2) INFO: Compiling void LightedCl::remove_me() + (32, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lightning_worm.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lost_soul.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lost_soul_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lslime.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lslime_nr.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lumbering_dead.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure_1000hp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure_100hp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure_150hp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure_200hp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure_250hp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure_25hp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure_300hp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure_500hp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure_50hp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\lure_750hp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_gminion_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_gminion_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_gminion_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_gminion_poison.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_gminion_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_gminion_venom.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_minion_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_minion_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_minion_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_minion_poison.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_minion_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\maldora_minion_venom.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\minispider.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\monster_random.as + (13, 2) INFO: Compiling void MonsterRandom::OnSpawn() + (16, 3) ERROR: No matching symbol 'SetInvincible' + (17, 3) ERROR: No matching symbol 'SetGravity' + (18, 3) ERROR: No matching symbol 'SetNoPush' + (19, 3) ERROR: No matching symbol 'SetFly' + (20, 3) ERROR: No matching symbol 'SetHealth' + (21, 3) ERROR: No matching symbol 'SetModel' + (22, 3) ERROR: No matching symbol 'SetWidth' + (23, 3) ERROR: No matching symbol 'SetHeight' + (24, 3) ERROR: No matching symbol 'SetSolid' + (27, 2) INFO: Compiling void MonsterRandom::game_postspawn() + (29, 13) ERROR: No matching symbol 'param4' + (34, 27) ERROR: No matching symbol 'PARAM' + (38, 8) ERROR: No matching symbol 'NO_IN_MOBS' + (40, 4) ERROR: No matching symbol 'SendInfoMsg' + (43, 8) ERROR: No matching symbol 'NO_IN_MOBS' + (45, 23) ERROR: No matching symbol 'GetTokenCount' + (49, 19) ERROR: No matching symbol 'GetTokenCount' + (50, 3) ERROR: Illegal operation on 'string' + (51, 20) ERROR: No matching signatures to 'RandomInt(const int, string)' + (51, 20) INFO: Candidates are: + (51, 20) INFO: int RandomInt(int, int) + (51, 20) INFO: Rejected due to type mismatch at positional parameter 2 + (52, 10) ERROR: 'RND_MOB' is already declared + (53, 3) ERROR: No matching signatures to 'MonsterRandom::spawn_mob(string)' + (53, 3) INFO: Candidates are: + (53, 3) INFO: void MS::MonsterRandom::spawn_mob() + (56, 2) INFO: Compiling void MonsterRandom::process_in_mobs() + (58, 20) ERROR: No matching symbol 'GetToken' + (73, 2) INFO: Compiling void MonsterRandom::spawn_mob() + (75, 36) ERROR: No matching symbol 'GetOwner' + (75, 12) ERROR: No matching symbol 'param1' + (76, 14) ERROR: No matching symbol 'GetEntityIndex' + (77, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (80, 2) INFO: Compiling void MonsterRandom::monitor_spawn() + (82, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (82, 9) INFO: Candidates are: + (82, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (82, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (88, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (92, 2) INFO: Compiling void MonsterRandom::remove_me() + (94, 3) ERROR: No matching symbol 'SetInvincible' + (95, 3) ERROR: No matching symbol 'SetRace' + (96, 3) ERROR: No matching symbol 'DoDamage' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\morc_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\morc_chief.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\morc_icewarrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\morc_ranger.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\morc_shaman_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\morc_shaman_ice_noblizz.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\morc_shaman_ice_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\morc_shaman_ice_turret_noblizz.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\morc_sniper.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\morc_warrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummies_getup.as + (10, 2) INFO: Compiling void MummiesGetup::OnSpawn() + (12, 3) ERROR: No matching symbol 'CallExternal' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_bile_attack_cl.as + (11, 2) INFO: Compiling MummyBileAttackCl::MummyBileAttackCl() + (15, 3) ERROR: No matching symbol 'Precache' + (18, 2) INFO: Compiling void MummyBileAttackCl::client_activate() + (20, 14) ERROR: No matching symbol 'param1' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void MummyBileAttackCl::end_puke() + (29, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (32, 2) INFO: Compiling void MummyBileAttackCl::remove_me() + (34, 3) ERROR: No matching symbol 'RemoveScript' + (37, 2) INFO: Compiling void MummyBileAttackCl::puke_loop() + (41, 69) ERROR: Expected expression value + (41, 69) ERROR: Instead found '' + (44, 2) INFO: Compiling void MummyBileAttackCl::setup_puke() + (56, 41) ERROR: Expected expression value + (56, 41) ERROR: Instead found '' + (59, 42) ERROR: Expected expression value + (59, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_cleric.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_cursed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_fodder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_ice_breath_cl.as + (11, 2) INFO: Compiling void MummyIceBreathCl::client_activate() + (13, 14) ERROR: No matching symbol 'param1' + (16, 3) ERROR: No matching symbol 'PARAM2' + (19, 2) INFO: Compiling void MummyIceBreathCl::fx_end() + (22, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (25, 2) INFO: Compiling void MummyIceBreathCl::remove_me() + (27, 3) ERROR: No matching symbol 'RemoveScript' + (30, 2) INFO: Compiling void MummyIceBreathCl::fx_loop() + (34, 75) ERROR: Expected expression value + (34, 75) ERROR: Instead found '' + (37, 2) INFO: Compiling void MummyIceBreathCl::setup_sprite() + (49, 41) ERROR: Expected expression value + (49, 41) ERROR: Instead found '' + (52, 42) ERROR: Expected expression value + (52, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_lightning_breath_cl.as + (12, 2) INFO: Compiling void MummyLightningBreathCl::client_activate() + (14, 14) ERROR: No matching symbol 'param1' + (15, 17) ERROR: No matching symbol 'param2' + (18, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (21, 2) INFO: Compiling void MummyLightningBreathCl::beam_loop() + (25, 41) ERROR: Expected expression value + (25, 41) ERROR: Instead found '' + (27, 42) ERROR: Expected expression value + (27, 42) ERROR: Instead found '' + (29, 40) ERROR: Expected expression value + (29, 40) ERROR: Instead found '' + (30, 35) ERROR: Expected expression value + (30, 35) ERROR: Instead found '' + (34, 2) INFO: Compiling void MummyLightningBreathCl::end_fx() + (37, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (40, 2) INFO: Compiling void MummyLightningBreathCl::remove_fx() + (42, 3) ERROR: No matching symbol 'RemoveScript' + (45, 2) INFO: Compiling void MummyLightningBreathCl::ke_spit_sparks() + (58, 41) ERROR: Expected expression value + (58, 41) ERROR: Instead found '' + (61, 42) ERROR: Expected expression value + (61, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_necro.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_slave.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_storm_pharaoh.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_warrior1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_warrior1b.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_warrior1c.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_warrior2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_warrior2b.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\mummy_warrior2c.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ogre.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ogre_cave.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ogre_cave_thug.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ogre_cave_welp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ogre_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ogre_stone.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\ogre_swamp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orcarcher.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orcberserker.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orcbeserker.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orcflayer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orcranger.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orcwarrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_archer_blackhand.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_base_melee.as + (28, 2) INFO: Compiling void OrcBaseMelee::orc_spawn() + (30, 3) ERROR: No matching symbol 'SetWidth' + (31, 3) ERROR: No matching symbol 'SetHeight' + (32, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (35, 2) INFO: Compiling void OrcBaseMelee::swing_axe() + (37, 3) ERROR: No matching symbol 'baseorc_yell' + (38, 41) ERROR: No matching symbol 'ATTACK_DMG_HIGH' + (38, 25) ERROR: No matching symbol 'ATTACK_DMG_LOW' + (39, 3) ERROR: No matching symbol 'XDoDamage' + (47, 2) INFO: Compiling void OrcBaseMelee::OnTargetValidate(CBaseEntity@) + (49, 7) ERROR: Illegal operation on this datatype + (50, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (51, 23) ERROR: No matching symbol 'm_hAttackTarget' + (53, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (56, 2) INFO: Compiling void OrcBaseMelee::orc_jump_check() + (58, 7) ERROR: Illegal operation on this datatype + (59, 3) ERROR: No matching symbol 'ORC_HOP_DELAY' + (60, 8) ERROR: No matching symbol 'IS_FLEEING' + (61, 9) ERROR: No matching symbol 'm_hAttackTarget' + (62, 9) ERROR: No matching symbol 'GetEntityRange' + (63, 19) ERROR: No matching symbol 'GetMonsterProperty' + (64, 25) ERROR: 'z' is not a member of 'string' + (65, 39) ERROR: No matching symbol 'm_hAttackTarget' + (66, 33) ERROR: 'z' is not a member of 'string' + (68, 3) ERROR: Illegal operation on 'string' + (69, 29) ERROR: No matching symbol 'ORC_JUMP_THRESH' + (71, 8) ERROR: Illegal operation on this datatype + (73, 31) ERROR: No matching symbol 'ORC_JUMP_CUTOFF' + (78, 10) ERROR: No matching symbol 'EXIT_SUB' + (81, 4) ERROR: No matching symbol 'PlayAnim' + (82, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (86, 2) INFO: Compiling void OrcBaseMelee::orc_hop() + (101, 47) ERROR: Expected expression value + (101, 47) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_base_ranged.as + (13, 2) INFO: Compiling OrcBaseRanged::OrcBaseRanged() + (17, 15) ERROR: The member 'MOVE_RANGE' is accessed before the initialization + (15, 3) ERROR: Both conditions must initialize member 'MOVE_RANGE' + (21, 17) ERROR: The member 'ATTACK_RANGE' is accessed before the initialization + (19, 3) ERROR: Both conditions must initialize member 'ATTACK_RANGE' + (25, 20) ERROR: The member 'ATTACK_HITRANGE' is accessed before the initialization + (23, 3) ERROR: Both conditions must initialize member 'ATTACK_HITRANGE' + (30, 2) INFO: Compiling void OrcBaseRanged::orc_spawn() + (32, 3) ERROR: No matching symbol 'SetWidth' + (33, 3) ERROR: No matching symbol 'SetHeight' + (36, 2) INFO: Compiling void OrcBaseRanged::orc_death() + (38, 3) ERROR: No matching symbol 'SetModelBody' + (41, 2) INFO: Compiling void OrcBaseRanged::grab_arrow() + (43, 3) ERROR: No matching symbol 'SetModelBody' + (46, 2) INFO: Compiling void OrcBaseRanged::shoot_arrow() + (53, 56) ERROR: Expected expression value + (53, 56) ERROR: Instead found '' + (58, 2) INFO: Compiling void OrcBaseRanged::npc_targetsighted() + (60, 8) ERROR: No matching symbol 'ALT_ATTACKS' + (61, 7) ERROR: No matching symbol 'GetEntityRange' + (63, 4) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_berserker.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_berserker_blackhand.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_brawler.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_cata_winder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_champion.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_chief.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_demonic.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_demonic_shaman.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_demonic_sniper.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_demonic_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_flayer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_ranger.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_scout.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_shaman_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_shaman_fire_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_sniper.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_unarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_warrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_warrior_blackhand.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\orc_weak.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\poison_fist_cl.as + (21, 2) INFO: Compiling void PoisonFistCl::client_activate() + (26, 51) ERROR: Expected expression value + (26, 51) ERROR: Instead found '' + (27, 70) ERROR: Expected expression value + (27, 70) ERROR: Instead found '' + (33, 2) INFO: Compiling void PoisonFistCl::game_prerender() + (35, 37) ERROR: Expected expression value + (35, 37) ERROR: Instead found '' + (37, 70) ERROR: Expected expression value + (37, 70) ERROR: Instead found '' + (40, 2) INFO: Compiling void PoisonFistCl::setup_flame() + (44, 3) ERROR: No matching symbol 'ClientEffect' + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (51, 20) ERROR: No matching symbol 'N_SPR_FRAMES' + (55, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\polarbear.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\polarbearcub.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\rabid_skele_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\rat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\rat_fangtooth.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\reavers_cl.as + (20, 2) INFO: Compiling ReaversCl::ReaversCl() + (24, 3) ERROR: No matching symbol 'Precache' + (27, 2) INFO: Compiling void ReaversCl::client_activate() + (29, 14) ERROR: No matching symbol 'param1' + (30, 17) ERROR: No matching symbol 'param2' + (31, 17) ERROR: No matching symbol 'param3' + (32, 18) ERROR: No matching symbol 'param4' + (33, 18) ERROR: No matching symbol 'param5' + (35, 7) ERROR: Expression must be of boolean type, instead found 'string' + (37, 4) ERROR: No matching signatures to 'ReaversCl::errupt_on(string)' + (37, 4) INFO: Candidates are: + (37, 4) INFO: void MS::ReaversCl::errupt_on() + (39, 7) ERROR: Expression must be of boolean type, instead found 'string' + (41, 4) ERROR: No matching signatures to 'ReaversCl::breath_on(string)' + (41, 4) INFO: Candidates are: + (41, 4) INFO: void MS::ReaversCl::breath_on() + (43, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (46, 2) INFO: Compiling void ReaversCl::end_fx() + (49, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (52, 2) INFO: Compiling void ReaversCl::remove_fx() + (54, 3) ERROR: No matching symbol 'RemoveScript' + (57, 2) INFO: Compiling void ReaversCl::errupt_on() + (59, 7) ERROR: Illegal operation on this datatype + (60, 17) ERROR: No matching symbol 'param1' + (71, 2) INFO: Compiling void ReaversCl::errupt_loop() + (73, 7) ERROR: Illegal operation on this datatype + (74, 7) ERROR: Illegal operation on this datatype + (75, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (99, 2) INFO: Compiling void ReaversCl::errupt_setup_puke() + (101, 69) ERROR: Expected expression value + (101, 69) ERROR: Instead found '' + (109, 2) INFO: Compiling void ReaversCl::errupt_setup_fire() + (111, 74) ERROR: Expected expression value + (111, 74) ERROR: Instead found '' + (119, 2) INFO: Compiling void ReaversCl::update_puke() + (122, 18) ERROR: No conversion from 'string' to 'double' available. + (124, 3) ERROR: No matching symbol 'ClientEffect' + (125, 3) ERROR: No matching symbol 'ClientEffect' + (128, 2) INFO: Compiling void ReaversCl::setup_puke() + (142, 42) ERROR: Expected expression value + (142, 42) ERROR: Instead found '' + (146, 2) INFO: Compiling void ReaversCl::setup_fire() + (157, 42) ERROR: Expected expression value + (157, 42) ERROR: Instead found '' + (161, 2) INFO: Compiling void ReaversCl::breath_on() + (163, 7) ERROR: Illegal operation on this datatype + (164, 17) ERROR: No matching symbol 'param1' + (174, 2) INFO: Compiling void ReaversCl::breath_loop() + (179, 33) ERROR: Expected expression value + (179, 33) ERROR: Instead found '' + (182, 2) INFO: Compiling void ReaversCl::make_cloud() + (184, 22) ERROR: No matching symbol 'param1' + (185, 15) ERROR: No matching symbol 'param2' + (188, 4) ERROR: No matching symbol 'ClientEffect' + (189, 4) ERROR: No matching symbol 'ClientEffect' + (190, 4) ERROR: No matching symbol 'ClientEffect' + (194, 4) ERROR: No matching symbol 'ClientEffect' + (195, 4) ERROR: No matching symbol 'ClientEffect' + (196, 4) ERROR: No matching symbol 'ClientEffect' + (200, 2) INFO: Compiling void ReaversCl::update_cloud() + (203, 17) ERROR: No conversion from 'string' to 'double' available. + (206, 4) ERROR: No matching symbol 'ClientEffect' + (207, 4) ERROR: No matching symbol 'ClientEffect' + (211, 2) INFO: Compiling void ReaversCl::setup_cloud() + (227, 42) ERROR: Expected expression value + (227, 42) ERROR: Instead found '' + (231, 2) INFO: Compiling void ReaversCl::setup_fire_cloud() + (250, 42) ERROR: Expected expression value + (250, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\rogue.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scarab_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scarab_venom.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scorpion1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scorpion2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scorpion3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scorpion4.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scorpion5.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scorpion5_stone.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scorpion6.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scorpion6_stone.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scorpion7_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scream.as + (8, 2) INFO: Compiling void Scream::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetHealth' + (11, 3) ERROR: No matching symbol 'SetWidth' + (12, 3) ERROR: No matching symbol 'SetHeight' + (13, 3) ERROR: No matching symbol 'SetRoam' + (14, 3) ERROR: No matching symbol 'SetName' + (15, 3) ERROR: No matching symbol 'SetIdleAnim' + (16, 3) ERROR: No matching symbol 'SetModel' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\scream2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sgoblin.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sgoblin_cl.as + (15, 2) INFO: Compiling void SgoblinCl::poof_fx() + (17, 19) ERROR: No matching symbol 'param1' + (18, 3) ERROR: No matching symbol 'ClientEffect' + (19, 3) ERROR: No matching symbol 'ClientEffect' + (20, 3) ERROR: No matching symbol 'ClientEffect' + (21, 3) ERROR: No matching symbol 'ClientEffect' + (22, 3) ERROR: No matching symbol 'ClientEffect' + (23, 3) ERROR: No matching symbol 'ClientEffect' + (26, 2) INFO: Compiling void SgoblinCl::unpoof_fx() + (28, 19) ERROR: No matching symbol 'param1' + (36, 2) INFO: Compiling void SgoblinCl::unpoof_fx_loop() + (39, 36) ERROR: Expected expression value + (39, 36) ERROR: Instead found '' + (44, 2) INFO: Compiling void SgoblinCl::poof_sprite() + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (58, 2) INFO: Compiling void SgoblinCl::unpoof_sprite() + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\shadow_form.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\shadow_form_boss.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\shadow_form_boss_cl.as + (22, 2) INFO: Compiling void ShadowFormBossCl::client_activate() + (24, 14) ERROR: No matching symbol 'param1' + (26, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (30, 2) INFO: Compiling void ShadowFormBossCl::end_fx() + (32, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void ShadowFormBossCl::end_fx_post_boss() + (40, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (43, 2) INFO: Compiling void ShadowFormBossCl::remove_fx() + (45, 3) ERROR: No matching symbol 'RemoveScript' + (48, 2) INFO: Compiling void ShadowFormBossCl::fx_loop() + (51, 34) ERROR: Expected expression value + (51, 34) ERROR: Instead found '' + (75, 2) INFO: Compiling void ShadowFormBossCl::make_smokes() + (80, 34) ERROR: Expected expression value + (80, 34) ERROR: Instead found '' + (84, 2) INFO: Compiling void ShadowFormBossCl::boss_died() + (87, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (90, 2) INFO: Compiling void ShadowFormBossCl::update_shadows1() + (95, 41) ERROR: Expected expression value + (95, 41) ERROR: Instead found '' + (97, 35) ERROR: Expected expression value + (97, 35) ERROR: Instead found '' + (125, 34) ERROR: Expected expression value + (125, 34) ERROR: Instead found '' + (130, 2) INFO: Compiling void ShadowFormBossCl::setup_shadows1() + (132, 3) ERROR: No matching symbol 'ClientEffect' + (133, 3) ERROR: No matching symbol 'ClientEffect' + (134, 3) ERROR: No matching symbol 'ClientEffect' + (135, 3) ERROR: No matching symbol 'ClientEffect' + (136, 3) ERROR: No matching symbol 'ClientEffect' + (137, 3) ERROR: No matching symbol 'ClientEffect' + (138, 3) ERROR: No matching symbol 'ClientEffect' + (139, 3) ERROR: No matching symbol 'ClientEffect' + (140, 3) ERROR: No matching symbol 'ClientEffect' + (141, 3) ERROR: No matching symbol 'ClientEffect' + (142, 3) ERROR: No matching symbol 'ClientEffect' + (143, 3) ERROR: No matching symbol 'ClientEffect' + (144, 3) ERROR: No matching symbol 'ClientEffect' + (145, 3) ERROR: No matching symbol 'ClientEffect' + (146, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\shadow_form_boss_fx.as + (8, 2) INFO: Compiling void ShadowFormBossFx::OnRepeatTimer() + (10, 3) ERROR: No matching symbol 'SetRepeatDelay' + (11, 3) ERROR: No matching symbol 'PlayAnim' + (12, 3) ERROR: No matching symbol 'Effect' + (13, 3) ERROR: No matching symbol 'Effect' + (14, 3) ERROR: No matching symbol 'Effect' + (15, 3) ERROR: No matching symbol 'Effect' + (18, 2) INFO: Compiling void ShadowFormBossFx::OnSpawn() + (20, 3) ERROR: No matching symbol 'SetNoPush' + (21, 3) ERROR: No matching symbol 'SetInvincible' + (22, 3) ERROR: No matching symbol 'SetFly' + (23, 3) ERROR: No matching symbol 'SetGravity' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetIdleAnim' + (26, 3) ERROR: No matching symbol 'SetMoveAnim' + (27, 3) ERROR: No matching symbol 'SetSolid' + (28, 3) ERROR: No matching symbol 'PlayAnim' + (31, 2) INFO: Compiling void ShadowFormBossFx::remove_beams() + (33, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\shadow_form_boss_fx_cl.as + (11, 2) INFO: Compiling void ShadowFormBossFxCl::client_activate() + (13, 14) ERROR: No matching symbol 'param1' + (15, 3) ERROR: No matching symbol 'do_tracker_loop' + (17, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (20, 2) INFO: Compiling void ShadowFormBossFxCl::end_fx() + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void ShadowFormBossFxCl::remove_fx() + (28, 3) ERROR: No matching symbol 'RemoveScript' + (31, 2) INFO: Compiling void ShadowFormBossFxCl::do_smokes_loop() + (35, 39) ERROR: Expected expression value + (35, 39) ERROR: Instead found '' + (37, 39) ERROR: Expected expression value + (37, 39) ERROR: Instead found '' + (39, 39) ERROR: Expected expression value + (39, 39) ERROR: Instead found '' + (41, 39) ERROR: Expected expression value + (41, 39) ERROR: Instead found '' + (45, 2) INFO: Compiling void ShadowFormBossFxCl::update_shadows2() + (49, 17) ERROR: No conversion from 'string' to 'int' available. + (51, 8) WARN: Variable 'CUR_FRAME' hides another variable of same name in outer scope + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: Illegal operation on 'string' + (57, 17) ERROR: No conversion from 'string' to 'double' available. + (59, 8) WARN: Variable 'CUR_SCALE' hides another variable of same name in outer scope + (60, 4) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (66, 2) INFO: Compiling void ShadowFormBossFxCl::setup_shadows2() + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\shadow_form_cl.as + (24, 2) INFO: Compiling void ShadowFormCl::client_activate() + (29, 35) ERROR: Expected expression value + (29, 35) ERROR: Instead found '' + (30, 36) ERROR: Expected expression value + (30, 36) ERROR: Instead found '' + (35, 2) INFO: Compiling void ShadowFormCl::end_fx() + (37, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (39, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (42, 2) INFO: Compiling void ShadowFormCl::remove_fx() + (44, 3) ERROR: No matching symbol 'RemoveScript' + (47, 2) INFO: Compiling void ShadowFormCl::do_shadows() + (51, 39) ERROR: Expected expression value + (51, 39) ERROR: Instead found '' + (55, 34) ERROR: Expected expression value + (55, 34) ERROR: Instead found '' + (57, 39) ERROR: Expected expression value + (57, 39) ERROR: Instead found '' + (61, 34) ERROR: Expected expression value + (61, 34) ERROR: Instead found '' + (63, 39) ERROR: Expected expression value + (63, 39) ERROR: Instead found '' + (67, 34) ERROR: Expected expression value + (67, 34) ERROR: Instead found '' + (69, 39) ERROR: Expected expression value + (69, 39) ERROR: Instead found '' + (73, 34) ERROR: Expected expression value + (73, 34) ERROR: Instead found '' + (75, 39) ERROR: Expected expression value + (75, 39) ERROR: Instead found '' + (79, 34) ERROR: Expected expression value + (79, 34) ERROR: Instead found '' + (84, 2) INFO: Compiling void ShadowFormCl::update_shadows() + (88, 40) ERROR: Expected expression value + (88, 40) ERROR: Instead found '' + (93, 35) ERROR: Expected expression value + (93, 35) ERROR: Instead found '' + (119, 2) INFO: Compiling void ShadowFormCl::shadow_death() + (123, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (126, 2) INFO: Compiling void ShadowFormCl::setup_shadows() + (129, 3) ERROR: No matching symbol 'ClientEffect' + (130, 3) ERROR: No matching symbol 'ClientEffect' + (131, 3) ERROR: No matching symbol 'ClientEffect' + (132, 3) ERROR: No matching symbol 'ClientEffect' + (133, 3) ERROR: No matching symbol 'ClientEffect' + (134, 3) ERROR: No matching symbol 'ClientEffect' + (135, 3) ERROR: No matching symbol 'ClientEffect' + (136, 3) ERROR: No matching symbol 'ClientEffect' + (137, 3) ERROR: No matching symbol 'ClientEffect' + (138, 3) ERROR: No matching symbol 'ClientEffect' + (139, 3) ERROR: No matching symbol 'ClientEffect' + (140, 3) ERROR: No matching symbol 'ClientEffect' + (141, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\shambler1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\shambler2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton2_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_fire1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_fire2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_ice1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_ice2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_lightning1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_lightning2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_poison1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_poison2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_stone1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_archer_stone2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_crystal1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_geric.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_gold.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_golden_guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_gstone1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_gstone1_noxp.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_guardian.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ice2_hammer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ice_enraged.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ice_enraged_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ice_lord.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ice_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ice_warrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ice_warrior_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_lightning_cl.as + (28, 2) INFO: Compiling void SkeletonLightningCl::client_activate() + (30, 15) ERROR: No matching symbol 'param1' + (31, 15) ERROR: No matching symbol 'param2' + (32, 14) ERROR: No matching symbol 'param3' + (33, 17) ERROR: No matching symbol 'param4' + (34, 18) ERROR: No matching symbol 'param5' + (35, 15) ERROR: No matching symbol 'param6' + (36, 3) ERROR: No matching symbol 'LogDebug' + (37, 3) ERROR: No matching signatures to 'string::CL_DURATION(const string)' + (39, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (42, 2) INFO: Compiling void SkeletonLightningCl::spriteify() + (45, 17) ERROR: No conversion from 'string' to 'int' available. + (60, 2) INFO: Compiling void SkeletonLightningCl::createsprite() + (62, 10) ERROR: Expected ';' + (62, 10) ERROR: Instead found identifier 'l' + (64, 32) ERROR: Expected expression value + (64, 32) ERROR: Instead found '' + (68, 2) INFO: Compiling void SkeletonLightningCl::setup_sprite1_sparkle() + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (82, 2) INFO: Compiling void SkeletonLightningCl::sprite_update() + (89, 43) ERROR: Expected expression value + (89, 43) ERROR: Instead found '' + (93, 38) ERROR: Expected expression value + (93, 38) ERROR: Instead found '' + (111, 2) INFO: Compiling void SkeletonLightningCl::clear_sprites() + (116, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (119, 2) INFO: Compiling void SkeletonLightningCl::remove_me() + (121, 7) ERROR: Expression must be of boolean type, instead found 'string' + (128, 4) ERROR: No matching symbol 'RemoveScript' + (132, 2) INFO: Compiling void SkeletonLightningCl::clear_beams() + (134, 3) ERROR: No matching symbol 'ClientEffect' + (137, 2) INFO: Compiling void SkeletonLightningCl::add_beam() + (154, 47) ERROR: Expected expression value + (154, 47) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_mage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_mage_cl.as + (33, 2) INFO: Compiling void SkeletonMageCl::client_activate() + (38, 51) ERROR: Expected expression value + (38, 51) ERROR: Instead found '' + (44, 2) INFO: Compiling void SkeletonMageCl::game_prerender() + (46, 28) ERROR: Expected expression value + (46, 28) ERROR: Instead found '' + (47, 37) ERROR: Expected expression value + (47, 37) ERROR: Instead found '' + (89, 2) INFO: Compiling void SkeletonMageCl::end_effect() + (93, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (96, 2) INFO: Compiling void SkeletonMageCl::remove_effect() + (98, 3) ERROR: No matching symbol 'RemoveScript' + (101, 2) INFO: Compiling void SkeletonMageCl::show_orb() + (104, 73) ERROR: Expected expression value + (104, 73) ERROR: Instead found '' + (105, 51) ERROR: Expected expression value + (105, 51) ERROR: Instead found '' + (117, 2) INFO: Compiling void SkeletonMageCl::setup_orb_sprite() + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (122, 3) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'ClientEffect' + (124, 3) ERROR: No matching symbol 'ClientEffect' + (125, 3) ERROR: No matching symbol 'ClientEffect' + (126, 3) ERROR: No matching symbol 'ClientEffect' + (127, 3) ERROR: No matching symbol 'ClientEffect' + (130, 2) INFO: Compiling void SkeletonMageCl::update_orb_sprite() + (141, 77) ERROR: Expected expression value + (141, 77) ERROR: Instead found '' + (149, 2) INFO: Compiling void SkeletonMageCl::show_seal_warning() + (151, 17) ERROR: No matching symbol 'param1' + (152, 14) ERROR: No matching symbol 'param2' + (153, 14) ERROR: No matching symbol 'param3' + (154, 16) ERROR: No matching symbol 'param4' + (155, 3) ERROR: No matching symbol 'ClientEffect' + (157, 3) ERROR: Illegal operation on 'string' + (161, 3) ERROR: No matching symbol 'ClientEffect' + (163, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (164, 3) ERROR: No matching symbol 'EmitSound3D' + (172, 2) INFO: Compiling void SkeletonMageCl::setup_seal_warn() + (174, 3) ERROR: No matching symbol 'ClientEffect' + (175, 3) ERROR: No matching symbol 'ClientEffect' + (176, 3) ERROR: No matching symbol 'ClientEffect' + (177, 3) ERROR: No matching symbol 'ClientEffect' + (178, 3) ERROR: No matching symbol 'ClientEffect' + (179, 3) ERROR: No matching symbol 'ClientEffect' + (180, 3) ERROR: No matching symbol 'ClientEffect' + (181, 3) ERROR: No matching symbol 'ClientEffect' + (182, 3) ERROR: No matching symbol 'ClientEffect' + (183, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison4.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison5.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison6.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison_bolter.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison_bomber.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison_guarder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison_rager.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison_random.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison_sworder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_poison_vamper.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ravager.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ravager_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ravager_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_ravager_venom.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_soul_eater.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_spartaaa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_stone1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_stone2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skeleton_stone3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skels_deep_sleep.as + (10, 2) INFO: Compiling void SkelsDeepSleep::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetRace' + (13, 3) ERROR: No matching symbol 'SetInvincible' + (14, 3) ERROR: No matching symbol 'SetName' + (15, 3) ERROR: No matching symbol 'SetFly' + (16, 3) ERROR: No matching symbol 'SetHealth' + (18, 3) ERROR: No matching symbol 'LogDebug' + (21, 2) INFO: Compiling void SkelsDeepSleep::suicide_me() + (23, 3) ERROR: No matching symbol 'LogDebug' + (24, 3) ERROR: No matching symbol 'SetRace' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetAlive' + (27, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (30, 2) INFO: Compiling void SkelsDeepSleep::suicide_me2() + (32, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skels_normal.as + (20, 2) INFO: Compiling void SkelsNormal::OnSpawn() + (22, 3) ERROR: No matching symbol 'SetInvincible' + (23, 3) ERROR: No matching symbol 'SetFly' + (24, 3) ERROR: No matching symbol 'SetHealth' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void SkelsNormal::remove_sleeps() + (30, 26) ERROR: No matching symbol 'FindEntityByName' + (31, 24) ERROR: No matching symbol 'GetEntityIndex' + (32, 3) ERROR: No matching symbol 'CallExternal' + (33, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (36, 2) INFO: Compiling void SkelsNormal::remove_sleeps2() + (38, 26) ERROR: No matching symbol 'FindEntityByName' + (39, 24) ERROR: No matching symbol 'GetEntityIndex' + (40, 3) ERROR: No matching symbol 'CallExternal' + (41, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (44, 2) INFO: Compiling void SkelsNormal::double_remove() + (46, 3) ERROR: No matching symbol 'DeleteEntity' + (47, 3) ERROR: No matching symbol 'DeleteEntity' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skels_sleep.as + (10, 2) INFO: Compiling void SkelsSleep::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetRace' + (13, 3) ERROR: No matching symbol 'SetInvincible' + (14, 3) ERROR: No matching symbol 'SetName' + (15, 3) ERROR: No matching symbol 'SetFly' + (16, 3) ERROR: No matching symbol 'SetHealth' + (20, 2) INFO: Compiling void SkelsSleep::suicide_me() + (22, 3) ERROR: No matching symbol 'SetRace' + (23, 3) ERROR: No matching symbol 'SetInvincible' + (24, 3) ERROR: No matching symbol 'SetAlive' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void SkelsSleep::suicide_me2() + (30, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skels_wakeup.as + (10, 2) INFO: Compiling void SkelsWakeup::OnSpawn() + (12, 3) ERROR: No matching symbol 'CallExternal' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\skullcrab.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_black_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_black_huge.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_black_large.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_black_large2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_black_large_nr.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_black_small.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_black_small2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_bomber.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_ceriux1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_ceriux1_nr.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_fools_gold_small.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_green.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_green_huge.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_green_large.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_lava_large.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_lava_small.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_magma_large.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_magma_small.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_mud_large.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\slime_mud_small.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_cobra.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_cobra_boss.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_cobra_boss_cl.as + (14, 2) INFO: Compiling void SnakeCobraBossCl::make_cloud() + (16, 22) ERROR: No matching symbol 'param1' + (17, 15) ERROR: No matching symbol 'param2' + (18, 3) ERROR: No matching symbol 'ClientEffect' + (19, 3) ERROR: No matching symbol 'ClientEffect' + (20, 3) ERROR: No matching symbol 'ClientEffect' + (23, 2) INFO: Compiling void SnakeCobraBossCl::setup_cloud() + (37, 42) ERROR: Expected expression value + (37, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_cobra_boss_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_cursed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_gcobra.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_gcobra_cl.as + (18, 2) INFO: Compiling void SnakeGcobraCl::client_activate() + (20, 14) ERROR: No matching symbol 'param1' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void SnakeGcobraCl::end_fx() + (29, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (32, 2) INFO: Compiling void SnakeGcobraCl::remove_fx() + (34, 3) ERROR: No matching symbol 'RemoveScript' + (37, 2) INFO: Compiling void SnakeGcobraCl::make_clouds() + (41, 41) ERROR: Expected expression value + (41, 41) ERROR: Instead found '' + (42, 34) ERROR: Expected expression value + (42, 34) ERROR: Instead found '' + (48, 2) INFO: Compiling void SnakeGcobraCl::setup_cloud() + (62, 42) ERROR: Expected expression value + (62, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_gcobra_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_gcobra_fire_cl.as + (18, 2) INFO: Compiling void SnakeGcobraFireCl::client_activate() + (20, 14) ERROR: No matching symbol 'param1' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void SnakeGcobraFireCl::end_fx() + (29, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (32, 2) INFO: Compiling void SnakeGcobraFireCl::remove_fx() + (34, 3) ERROR: No matching symbol 'RemoveScript' + (37, 2) INFO: Compiling void SnakeGcobraFireCl::make_clouds() + (41, 41) ERROR: Expected expression value + (41, 41) ERROR: Instead found '' + (42, 34) ERROR: Expected expression value + (42, 34) ERROR: Instead found '' + (48, 2) INFO: Compiling void SnakeGcobraFireCl::setup_cloud() + (62, 42) ERROR: Expected expression value + (62, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_gcobra_metal.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_gsidewinder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_lord.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snake_sidewinder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snowboar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snowboar1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snowboar2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\snowboar3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_archer1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_archer2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_archer3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_brawler.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_chief1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_chief2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_juggernaut.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_recruit.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_shaman_elder.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_shaman_lesser.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_telepoint1.as + (11, 2) INFO: Compiling void SorcTelepoint1::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetName' + (14, 3) ERROR: No matching symbol 'SetFly' + (15, 3) ERROR: No matching symbol 'SetGravity' + (16, 3) ERROR: No matching symbol 'SetInvincible' + (17, 3) ERROR: No matching symbol 'SetRace' + (19, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 9) ERROR: No matching symbol 'StringToLower' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void SorcTelepoint1::special_reg() + (28, 7) ERROR: No matching symbol 'G_RUNE_POINTS' + (30, 4) ERROR: No matching symbol 'SetGlobalVar' + (32, 7) ERROR: No matching symbol 'G_RUNE_POINTS' + (32, 35) ERROR: No matching symbol 'G_RUNE_POINTS' + (33, 36) ERROR: No matching symbol 'GetOwner' + (33, 3) ERROR: No matching symbol 'G_RUNE_POINTS' + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void SorcTelepoint1::remove_me() + (39, 3) ERROR: No matching symbol 'DeleteEntity' + (42, 2) INFO: Compiling void SorcTelepoint1::tele_used() + (45, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_telepoint2.as + (11, 2) INFO: Compiling void SorcTelepoint2::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetName' + (14, 3) ERROR: No matching symbol 'SetFly' + (15, 3) ERROR: No matching symbol 'SetGravity' + (16, 3) ERROR: No matching symbol 'SetInvincible' + (17, 3) ERROR: No matching symbol 'SetRace' + (19, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 9) ERROR: No matching symbol 'StringToLower' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void SorcTelepoint2::special_reg() + (28, 7) ERROR: No matching symbol 'G_RUNE_POINTS' + (30, 4) ERROR: No matching symbol 'SetGlobalVar' + (32, 7) ERROR: No matching symbol 'G_RUNE_POINTS' + (32, 35) ERROR: No matching symbol 'G_RUNE_POINTS' + (33, 36) ERROR: No matching symbol 'GetOwner' + (33, 3) ERROR: No matching symbol 'G_RUNE_POINTS' + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void SorcTelepoint2::remove_me() + (39, 3) ERROR: No matching symbol 'DeleteEntity' + (42, 2) INFO: Compiling void SorcTelepoint2::tele_used() + (45, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_telepoint3.as + (11, 2) INFO: Compiling void SorcTelepoint3::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetName' + (14, 3) ERROR: No matching symbol 'SetFly' + (15, 3) ERROR: No matching symbol 'SetGravity' + (16, 3) ERROR: No matching symbol 'SetInvincible' + (17, 3) ERROR: No matching symbol 'SetRace' + (19, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 9) ERROR: No matching symbol 'StringToLower' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void SorcTelepoint3::special_reg() + (28, 7) ERROR: No matching symbol 'G_RUNE_POINTS' + (30, 4) ERROR: No matching symbol 'SetGlobalVar' + (32, 7) ERROR: No matching symbol 'G_RUNE_POINTS' + (32, 35) ERROR: No matching symbol 'G_RUNE_POINTS' + (33, 36) ERROR: No matching symbol 'GetOwner' + (33, 3) ERROR: No matching symbol 'G_RUNE_POINTS' + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void SorcTelepoint3::remove_me() + (39, 3) ERROR: No matching symbol 'DeleteEntity' + (42, 2) INFO: Compiling void SorcTelepoint3::tele_used() + (45, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_telepoint4.as + (11, 2) INFO: Compiling void SorcTelepoint4::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetName' + (14, 3) ERROR: No matching symbol 'SetFly' + (15, 3) ERROR: No matching symbol 'SetGravity' + (16, 3) ERROR: No matching symbol 'SetInvincible' + (17, 3) ERROR: No matching symbol 'SetRace' + (19, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 9) ERROR: No matching symbol 'StringToLower' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void SorcTelepoint4::special_reg() + (28, 7) ERROR: No matching symbol 'G_RUNE_POINTS' + (30, 4) ERROR: No matching symbol 'SetGlobalVar' + (32, 7) ERROR: No matching symbol 'G_RUNE_POINTS' + (32, 35) ERROR: No matching symbol 'G_RUNE_POINTS' + (33, 36) ERROR: No matching symbol 'GetOwner' + (33, 3) ERROR: No matching symbol 'G_RUNE_POINTS' + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void SorcTelepoint4::remove_me() + (39, 3) ERROR: No matching symbol 'DeleteEntity' + (42, 2) INFO: Compiling void SorcTelepoint4::tele_used() + (45, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_warrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\sorc_warrior_lesser.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_base_new.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_cave.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_crystal.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_fire_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_fire_spitting.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_fire_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_giant.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_mini_poison.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_queen.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_snow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_spitting.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_spitting_clipped.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_thornlands.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spider_webber.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\spotter_hack.as + (15, 2) INFO: Compiling void SpotterHack::see_enemy() + (20, 27) ERROR: Expected expression value + (20, 27) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\acid_ball_guided.as + (6, 7) ERROR: Method 'void AcidBallGuided::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\affliction_lance.as + (28, 2) INFO: Compiling void AfflictionLance::OnSpawn() + (30, 3) ERROR: No matching symbol 'SetNoPush' + (31, 3) ERROR: No matching symbol 'SetWidth' + (32, 3) ERROR: No matching symbol 'SetHeight' + (33, 3) ERROR: No matching symbol 'SetSolid' + (35, 3) ERROR: No matching symbol 'SetBlind' + (36, 3) ERROR: No matching symbol 'SetFly' + (37, 3) ERROR: No matching symbol 'SetGravity' + (40, 2) INFO: Compiling void AfflictionLance::game_dynamically_created() + (52, 38) ERROR: Expected expression value + (52, 38) ERROR: Instead found '' + (67, 2) INFO: Compiling void AfflictionLance::fix_pitch_loop() + (69, 17) ERROR: No conversion from 'string' to 'int' available. + (71, 4) ERROR: Illegal operation on 'string' + (73, 17) ERROR: No conversion from 'string' to 'int' available. + (77, 17) ERROR: No conversion from 'string' to 'int' available. + (79, 18) ERROR: No conversion from 'string' to 'int' available. + (84, 19) ERROR: No matching symbol 'GetEntityProperty' + (85, 20) ERROR: No matching symbol 'GetEntityProperty' + (86, 3) ERROR: No matching symbol 'SetAngles' + (87, 3) ERROR: No matching symbol 'LogDebug' + (88, 19) ERROR: No conversion from 'string' to 'int' available. + (89, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (92, 2) INFO: Compiling void AfflictionLance::aoe_affect_target() + (94, 3) ERROR: No matching symbol 'ApplyEffect' + (97, 2) INFO: Compiling void AfflictionLance::aoe_end() + (99, 21) ERROR: No conversion from 'string' to 'float' available. + (103, 4) ERROR: No matching signatures to 'EmitSound(const int, const int, const string)' + (103, 4) INFO: Candidates are: + (103, 4) INFO: void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int) + (103, 4) INFO: Rejected due to not enough parameters + (103, 4) INFO: void EmitSound(CBaseEntity@, const string&in) + (103, 4) INFO: void EmitSound(CBaseEntity@, const string&in, float) + (103, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (104, 4) ERROR: No matching symbol 'DeleteEntity' + (108, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (112, 2) INFO: Compiling void AfflictionLance::transfer_location() + (114, 22) ERROR: No matching symbol 'param1' + (116, 3) ERROR: No matching symbol 'ClientEvent' + (118, 19) ERROR: No matching symbol 'GetOwner' + (119, 3) ERROR: No matching symbol 'SetScriptFlags' + (21, 2) INFO: Compiling void BaseAoe2::OnSpawn() + (23, 8) ERROR: No matching symbol 'AOE_VULNERABLE' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetNoPush' + (28, 3) ERROR: No matching symbol 'SetGravity' + (32, 2) INFO: Compiling void BaseAoe2::game_dynamically_created() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BaseAoe2::aoe_start() + (39, 22) ERROR: No matching symbol 'MY_OWNER' + (41, 16) ERROR: No matching symbol 'MY_OWNER' + (43, 9) ERROR: No matching symbol 'AOE_VULNERABLE' + (45, 4) ERROR: No matching symbol 'SetRace' + (49, 3) ERROR: No matching symbol 'AOE_DURATION' + (52, 2) INFO: Compiling void BaseAoe2::aoe_scan_loop() + (58, 33) ERROR: Expected expression value + (58, 33) ERROR: Instead found '' + (64, 48) ERROR: Expected expression value + (64, 48) ERROR: Instead found '' + (68, 48) ERROR: Expected expression value + (68, 48) ERROR: Instead found '' + (80, 2) INFO: Compiling void BaseAoe2::aoe_affect_targets() + (83, 43) ERROR: Expected expression value + (83, 43) ERROR: Instead found '' + (84, 42) ERROR: Expected expression value + (84, 42) ERROR: Instead found '' + (89, 2) INFO: Compiling void BaseAoe2::game_dodamage() + (92, 42) ERROR: Expected expression value + (92, 42) ERROR: Instead found '' + (102, 2) INFO: Compiling void BaseAoe2::func_filter_targs() + (104, 19) ERROR: No matching symbol 'param1' + (106, 9) ERROR: No matching symbol 'AOE_FRIENDLY' + (108, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (108, 9) INFO: Candidates are: + (108, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (108, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (110, 10) ERROR: No matching signatures to 'IsValidPlayer(string)' + (110, 10) INFO: Candidates are: + (110, 10) INFO: bool IsValidPlayer(CBasePlayer@) + (110, 10) INFO: Rejected due to type mismatch at positional parameter 1 + (112, 10) ERROR: Illegal operation on this datatype + (114, 11) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (118, 22) ERROR: No matching symbol 'GetRelationship' + (121, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (127, 10) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (130, 10) ERROR: No matching symbol 'AOE_AFFECTS_WARY' + (135, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (138, 7) ERROR: No matching symbol 'AOE_SCAN_TYPE' + (140, 41) ERROR: No matching symbol 'GetOwner' + (141, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (141, 23) INFO: Candidates are: + (141, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (141, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (142, 24) ERROR: No matching symbol 'TraceLine' + (146, 8) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (149, 3) WARN: Unreachable code + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\affliction_lance_cl.as + (15, 2) INFO: Compiling void AfflictionLanceCl::client_activate() + (17, 14) ERROR: No matching symbol 'param1' + (18, 17) ERROR: No matching symbol 'param2' + (25, 2) INFO: Compiling void AfflictionLanceCl::end_fx() + (27, 3) ERROR: No matching symbol 'SetRepeatDelay' + (28, 23) ERROR: No conversion from 'string' to 'float' available. + (30, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (33, 2) INFO: Compiling void AfflictionLanceCl::remove_fx() + (35, 3) ERROR: No matching symbol 'RemoveScript' + (38, 2) INFO: Compiling void AfflictionLanceCl::fx_loop() + (42, 39) ERROR: Expected expression value + (42, 39) ERROR: Instead found '' + (43, 41) ERROR: Expected expression value + (43, 41) ERROR: Instead found '' + (44, 40) ERROR: Expected expression value + (44, 40) ERROR: Instead found '' + (47, 35) ERROR: Expected expression value + (47, 35) ERROR: Instead found '' + (50, 35) ERROR: Expected expression value + (50, 35) ERROR: Instead found '' + (57, 2) INFO: Compiling void AfflictionLanceCl::update_cloud() + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (65, 2) INFO: Compiling void AfflictionLanceCl::setup_cloud() + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\bandit_boss_fire_wall.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\barrier.as + (23, 2) INFO: Compiling void Barrier::game_dynamically_created() + (25, 14) ERROR: No matching symbol 'param1' + (26, 15) ERROR: No matching symbol 'param2' + (28, 7) ERROR: No matching symbol 'param3' + (32, 7) ERROR: No matching symbol 'param4' + (36, 7) ERROR: No matching symbol 'param5' + (40, 7) ERROR: No matching symbol 'param6' + (42, 21) ERROR: No matching symbol 'param6' + (44, 7) ERROR: No matching symbol 'param7' + (48, 7) ERROR: No matching symbol 'param8' + (50, 18) ERROR: No matching symbol 'param8' + (51, 18) ERROR: No matching symbol 'param8' + (53, 4) ERROR: No matching symbol 'PARAM8' + (57, 19) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (61, 19) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (63, 7) ERROR: Illegal operation on this datatype + (65, 4) ERROR: No matching symbol 'ClientEvent' + (69, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (72, 2) INFO: Compiling void Barrier::OnSpawn() + (74, 3) ERROR: No matching symbol 'SetName' + (75, 3) ERROR: No matching symbol 'SetModel' + (76, 3) ERROR: No matching symbol 'SetIdleAnim' + (77, 3) ERROR: No matching symbol 'SetNoPush' + (78, 3) ERROR: No matching symbol 'SetHealth' + (79, 3) ERROR: No matching symbol 'SetInvincible' + (80, 3) ERROR: No matching symbol 'SetWidth' + (81, 3) ERROR: No matching symbol 'SetHeight' + (82, 3) ERROR: No matching symbol 'SetSolid' + (83, 3) ERROR: No matching symbol 'SetRace' + (87, 2) INFO: Compiling void Barrier::scan_loop() + (89, 7) ERROR: Illegal operation on this datatype + (90, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (90, 9) INFO: Candidates are: + (90, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (90, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (91, 19) ERROR: Both operands must be handles when comparing identity + (92, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (93, 37) ERROR: No matching symbol 'GetOwner' + (95, 16) ERROR: No matching symbol 'FindEntitiesInSphere' + (97, 23) ERROR: No matching symbol 'GetTokenCount' + (103, 2) INFO: Compiling void Barrier::affect_targets() + (124, 41) ERROR: Expected expression value + (124, 41) ERROR: Instead found '' + (129, 47) ERROR: Expected expression value + (129, 47) ERROR: Instead found '' + (132, 2) INFO: Compiling void Barrier::remove_barrier() + (135, 3) ERROR: No matching symbol 'ClientEvent' + (136, 7) ERROR: Illegal operation on this datatype + (138, 14) ERROR: No matching symbol 'GetOwner' + (140, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (143, 2) INFO: Compiling void Barrier::remove_me() + (145, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\barrier_cl.as + (14, 2) ERROR: Expected method or property + (14, 2) ERROR: Instead found identifier 'string' + (89, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\base_aoe.as + (23, 2) INFO: Compiling void BaseAoe::OnSpawn() + (27, 7) ERROR: No matching symbol 'AOE_FREQ' + (29, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (31, 7) ERROR: No matching symbol 'AOE_DMG_FREQ' + (33, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void BaseAoe::get_skill() + (40, 32) ERROR: No matching symbol 'MY_OWNER' + (41, 7) ERROR: No matching symbol 'ACTIVE_SKILL' + (46, 2) INFO: Compiling void BaseAoe::aoe_scan_loop() + (48, 7) ERROR: Illegal operation on this datatype + (49, 3) ERROR: No matching symbol 'AOE_FREQ' + (53, 2) INFO: Compiling void BaseAoe::aoe_dmg_loop() + (55, 7) ERROR: Illegal operation on this datatype + (56, 3) ERROR: No matching symbol 'AOE_DMG_FREQ' + (60, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad() + (63, 41) ERROR: No matching symbol 'GetOwner' + (65, 16) ERROR: No matching symbol 'FindEntitiesInSphere' + (67, 21) ERROR: No matching symbol 'GetTokenCount' + (68, 18) ERROR: No conversion from 'string' to 'int' available. + (69, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (71, 22) ERROR: No conversion from 'string' to 'int' available. + (76, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (78, 22) ERROR: No conversion from 'string' to 'int' available. + (85, 2) INFO: Compiling void BaseAoe::aoe_apply_loop() + (89, 33) ERROR: Expected expression value + (89, 33) ERROR: Instead found '' + (93, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly() + (95, 23) ERROR: No matching symbol 'GetToken' + (96, 7) ERROR: No matching symbol 'GetRelationship' + (100, 7) ERROR: Expression must be of boolean type, instead found 'string' + (102, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (102, 9) INFO: Candidates are: + (102, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (102, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (107, 9) ERROR: No matching symbol 'DO_EFFECT' + (108, 3) ERROR: No matching symbol 'apply_aoe_effect' + (111, 2) INFO: Compiling void BaseAoe::aoe_dodamage_rad() + (113, 33) ERROR: Expected expression value + (113, 33) ERROR: Instead found '' + (116, 2) INFO: Compiling void BaseAoe::aoe_end() + (119, 7) ERROR: No matching symbol 'MY_SCRIPT_IDX' + (121, 4) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\base_aoe2.as + (21, 2) INFO: Compiling void BaseAoe2::OnSpawn() + (23, 8) ERROR: No matching symbol 'AOE_VULNERABLE' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetNoPush' + (28, 3) ERROR: No matching symbol 'SetGravity' + (32, 2) INFO: Compiling void BaseAoe2::game_dynamically_created() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BaseAoe2::aoe_start() + (39, 22) ERROR: No matching symbol 'MY_OWNER' + (41, 16) ERROR: No matching symbol 'MY_OWNER' + (43, 9) ERROR: No matching symbol 'AOE_VULNERABLE' + (45, 4) ERROR: No matching symbol 'SetRace' + (49, 3) ERROR: No matching symbol 'AOE_DURATION' + (52, 2) INFO: Compiling void BaseAoe2::aoe_scan_loop() + (58, 33) ERROR: Expected expression value + (58, 33) ERROR: Instead found '' + (64, 48) ERROR: Expected expression value + (64, 48) ERROR: Instead found '' + (68, 48) ERROR: Expected expression value + (68, 48) ERROR: Instead found '' + (80, 2) INFO: Compiling void BaseAoe2::aoe_affect_targets() + (83, 43) ERROR: Expected expression value + (83, 43) ERROR: Instead found '' + (84, 42) ERROR: Expected expression value + (84, 42) ERROR: Instead found '' + (89, 2) INFO: Compiling void BaseAoe2::game_dodamage() + (92, 42) ERROR: Expected expression value + (92, 42) ERROR: Instead found '' + (102, 2) INFO: Compiling void BaseAoe2::func_filter_targs() + (104, 19) ERROR: No matching symbol 'param1' + (106, 9) ERROR: No matching symbol 'AOE_FRIENDLY' + (108, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (108, 9) INFO: Candidates are: + (108, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (108, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (110, 10) ERROR: No matching signatures to 'IsValidPlayer(string)' + (110, 10) INFO: Candidates are: + (110, 10) INFO: bool IsValidPlayer(CBasePlayer@) + (110, 10) INFO: Rejected due to type mismatch at positional parameter 1 + (112, 10) ERROR: Illegal operation on this datatype + (114, 11) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (118, 22) ERROR: No matching symbol 'GetRelationship' + (121, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (127, 10) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (130, 10) ERROR: No matching symbol 'AOE_AFFECTS_WARY' + (135, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (138, 7) ERROR: No matching symbol 'AOE_SCAN_TYPE' + (140, 41) ERROR: No matching symbol 'GetOwner' + (141, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (141, 23) INFO: Candidates are: + (141, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (141, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (142, 24) ERROR: No matching symbol 'TraceLine' + (146, 8) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (149, 3) WARN: Unreachable code + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\base_summon.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\bear1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\blast.as + (8, 2) INFO: Compiling void Blast::game_dynamically_created() + (17, 32) ERROR: Expected expression value + (17, 32) ERROR: Instead found '' + (21, 2) INFO: Compiling void Blast::remove_me() + (23, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\blood_drinker.as + (8, 7) ERROR: Method 'void BloodDrinker::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\bludgeon_axe.as + (6, 7) ERROR: Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\chain_scanner.as + (29, 2) INFO: Compiling void ChainScanner::game_dynamically_created() + (31, 14) ERROR: No matching symbol 'param1' + (32, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (32, 20) INFO: Candidates are: + (32, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (32, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (33, 20) ERROR: No matching symbol 'param2' + (34, 21) ERROR: No matching symbol 'DAMAGE_ADJ' + (37, 7) ERROR: No matching symbol 'param3' + (39, 19) ERROR: No matching symbol 'param3' + (44, 2) INFO: Compiling void ChainScanner::fire_bolts() + (46, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (48, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 3) ERROR: No matching symbol 'aoe_applyeffect_rad' + (57, 2) INFO: Compiling void ChainScanner::apply_aoe_effect() + (59, 37) ERROR: No matching symbol 'param1' + (60, 19) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (60, 19) INFO: Candidates are: + (60, 19) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (60, 19) INFO: Rejected due to type mismatch at positional parameter 1 + (61, 23) ERROR: No matching symbol 'TraceLine' + (63, 7) ERROR: Illegal operation on this datatype + (67, 28) ERROR: No matching symbol 'SOUND_ZAP1' + (67, 40) ERROR: No matching symbol 'SOUND_ZAP2' + (67, 52) ERROR: No matching symbol 'SOUND_ZAP3' + (68, 14) ERROR: No matching symbol 'GetOwner' + (69, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (71, 3) ERROR: No matching symbol 'ClientEvent' + (73, 22) ERROR: No matching symbol 'DAMAGE_ADJ' + (74, 3) ERROR: No matching symbol 'XDoDamage' + (82, 2) INFO: Compiling void ChainScanner::heart_beat() + (84, 31) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (84, 31) INFO: Candidates are: + (84, 31) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (84, 31) INFO: Rejected due to type mismatch at positional parameter 1 + (84, 19) ERROR: No matching symbol 'GetOwner' + (88, 2) INFO: Compiling void ChainScanner::death_count() + (90, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (93, 3) ERROR: No matching symbol 'DeleteEntity' + (23, 2) INFO: Compiling void BaseAoe::OnSpawn() + (27, 7) ERROR: No matching symbol 'AOE_FREQ' + (29, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (31, 7) ERROR: No matching symbol 'AOE_DMG_FREQ' + (33, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void BaseAoe::get_skill() + (40, 32) ERROR: No matching symbol 'MY_OWNER' + (41, 7) ERROR: No matching symbol 'ACTIVE_SKILL' + (46, 2) INFO: Compiling void BaseAoe::aoe_scan_loop() + (48, 7) ERROR: Illegal operation on this datatype + (49, 3) ERROR: No matching symbol 'AOE_FREQ' + (53, 2) INFO: Compiling void BaseAoe::aoe_dmg_loop() + (55, 7) ERROR: Illegal operation on this datatype + (56, 3) ERROR: No matching symbol 'AOE_DMG_FREQ' + (60, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad() + (63, 41) ERROR: No matching symbol 'GetOwner' + (65, 16) ERROR: No matching symbol 'FindEntitiesInSphere' + (67, 21) ERROR: No matching symbol 'GetTokenCount' + (68, 18) ERROR: No conversion from 'string' to 'int' available. + (69, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (71, 22) ERROR: No conversion from 'string' to 'int' available. + (76, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (78, 22) ERROR: No conversion from 'string' to 'int' available. + (85, 2) INFO: Compiling void BaseAoe::aoe_apply_loop() + (89, 33) ERROR: Expected expression value + (89, 33) ERROR: Instead found '' + (93, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly() + (95, 23) ERROR: No matching symbol 'GetToken' + (96, 7) ERROR: No matching symbol 'GetRelationship' + (100, 7) ERROR: Expression must be of boolean type, instead found 'string' + (102, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (102, 9) INFO: Candidates are: + (102, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (102, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (107, 9) ERROR: No matching symbol 'DO_EFFECT' + (108, 3) ERROR: No matching symbol 'apply_aoe_effect' + (111, 2) INFO: Compiling void BaseAoe::aoe_dodamage_rad() + (113, 33) ERROR: Expected expression value + (113, 33) ERROR: Instead found '' + (116, 2) INFO: Compiling void BaseAoe::aoe_end() + (119, 7) ERROR: No matching symbol 'MY_SCRIPT_IDX' + (121, 4) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\chain_scanner_cl.as + (10, 2) INFO: Compiling void ChainScannerCl::client_activate() + (12, 45) ERROR: Expected expression value + (12, 45) ERROR: Instead found '' + (13, 43) ERROR: Expected expression value + (13, 43) ERROR: Instead found '' + (23, 43) ERROR: Expected expression value + (23, 43) ERROR: Instead found '' + (27, 43) ERROR: Expected expression value + (27, 43) ERROR: Instead found '' + (31, 43) ERROR: Expected expression value + (31, 43) ERROR: Instead found '' + (35, 43) ERROR: Expected expression value + (35, 43) ERROR: Instead found '' + (39, 43) ERROR: Expected expression value + (39, 43) ERROR: Instead found '' + (43, 43) ERROR: Expected expression value + (43, 43) ERROR: Instead found '' + (47, 43) ERROR: Expected expression value + (47, 43) ERROR: Instead found '' + (51, 43) ERROR: Expected expression value + (51, 43) ERROR: Instead found '' + (55, 43) ERROR: Expected expression value + (55, 43) ERROR: Instead found '' + (59, 43) ERROR: Expected expression value + (59, 43) ERROR: Instead found '' + (68, 2) INFO: Compiling void ChainScannerCl::remove_me() + (70, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\circle_of_death.as + (24, 2) INFO: Compiling void CircleOfDeath::game_precache() + (26, 3) ERROR: No matching symbol 'Precache' + (27, 3) ERROR: No matching symbol 'Precache' + (30, 2) INFO: Compiling void CircleOfDeath::game_dynamically_created() + (32, 15) ERROR: No matching symbol 'param1' + (33, 16) ERROR: No matching symbol 'param2' + (34, 14) ERROR: No matching symbol 'param3' + (35, 18) ERROR: No matching symbol 'param4' + (36, 18) ERROR: No matching symbol 'param5' + (38, 32) ERROR: No matching symbol 'PARAM' + (42, 28) ERROR: No matching symbol 'SOUND_PULSE' + (42, 13) ERROR: No matching symbol 'GetOwner' + (43, 37) ERROR: No matching symbol 'GetOwner' + (45, 19) ERROR: No matching symbol 'GetOwner' + (46, 3) ERROR: No matching symbol 'ClientEvent' + (49, 2) INFO: Compiling void CircleOfDeath::aoe_affect_target() + (51, 21) ERROR: No matching symbol 'param1' + (52, 3) ERROR: No matching symbol 'XDoDamage' + (55, 2) INFO: Compiling void CircleOfDeath::aoe_end() + (57, 28) ERROR: No matching symbol 'SOUND_PULSE' + (57, 13) ERROR: No matching symbol 'GetOwner' + (58, 3) ERROR: No matching symbol 'DeleteEntity' + (21, 2) INFO: Compiling void BaseAoe2::OnSpawn() + (23, 8) ERROR: No matching symbol 'AOE_VULNERABLE' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetNoPush' + (28, 3) ERROR: No matching symbol 'SetGravity' + (32, 2) INFO: Compiling void BaseAoe2::game_dynamically_created() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BaseAoe2::aoe_start() + (39, 22) ERROR: No matching symbol 'MY_OWNER' + (41, 16) ERROR: No matching symbol 'MY_OWNER' + (43, 9) ERROR: No matching symbol 'AOE_VULNERABLE' + (45, 4) ERROR: No matching symbol 'SetRace' + (49, 3) ERROR: No matching symbol 'AOE_DURATION' + (52, 2) INFO: Compiling void BaseAoe2::aoe_scan_loop() + (58, 33) ERROR: Expected expression value + (58, 33) ERROR: Instead found '' + (64, 48) ERROR: Expected expression value + (64, 48) ERROR: Instead found '' + (68, 48) ERROR: Expected expression value + (68, 48) ERROR: Instead found '' + (80, 2) INFO: Compiling void BaseAoe2::aoe_affect_targets() + (83, 43) ERROR: Expected expression value + (83, 43) ERROR: Instead found '' + (84, 42) ERROR: Expected expression value + (84, 42) ERROR: Instead found '' + (89, 2) INFO: Compiling void BaseAoe2::game_dodamage() + (92, 42) ERROR: Expected expression value + (92, 42) ERROR: Instead found '' + (102, 2) INFO: Compiling void BaseAoe2::func_filter_targs() + (104, 19) ERROR: No matching symbol 'param1' + (106, 9) ERROR: No matching symbol 'AOE_FRIENDLY' + (108, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (108, 9) INFO: Candidates are: + (108, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (108, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (110, 10) ERROR: No matching signatures to 'IsValidPlayer(string)' + (110, 10) INFO: Candidates are: + (110, 10) INFO: bool IsValidPlayer(CBasePlayer@) + (110, 10) INFO: Rejected due to type mismatch at positional parameter 1 + (112, 10) ERROR: Illegal operation on this datatype + (114, 11) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (118, 22) ERROR: No matching symbol 'GetRelationship' + (121, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (127, 10) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (130, 10) ERROR: No matching symbol 'AOE_AFFECTS_WARY' + (135, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (138, 7) ERROR: No matching symbol 'AOE_SCAN_TYPE' + (140, 41) ERROR: No matching symbol 'GetOwner' + (141, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (141, 23) INFO: Candidates are: + (141, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (141, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (142, 24) ERROR: No matching symbol 'TraceLine' + (146, 8) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (149, 3) WARN: Unreachable code + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\circle_of_death_cl.as + (21, 2) INFO: Compiling void CircleOfDeathCl::client_activate() + (23, 15) ERROR: No matching symbol 'param1' + (24, 17) ERROR: No matching symbol 'param2' + (26, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (27, 3) ERROR: No matching symbol 'ClientEffect' + (28, 3) ERROR: No matching symbol 'ClientEffect' + (32, 2) INFO: Compiling void CircleOfDeathCl::fx_loop() + (34, 7) ERROR: Illegal operation on this datatype + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 3) ERROR: No matching symbol 'ClientEffect' + (41, 2) INFO: Compiling void CircleOfDeathCl::end_fx() + (44, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (47, 2) INFO: Compiling void CircleOfDeathCl::remove_me() + (49, 3) ERROR: No matching symbol 'RemoveScript' + (52, 2) INFO: Compiling void CircleOfDeathCl::setup_seal() + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (66, 2) INFO: Compiling void CircleOfDeathCl::setup_skull() + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\circle_of_death_old.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\circle_of_fire.as + (22, 2) ERROR: Expected method or property + (22, 2) ERROR: Instead found identifier 'string' + (23, 12) ERROR: Expected '(' + (23, 12) ERROR: Instead found '.' + (24, 12) ERROR: Expected '(' + (24, 12) ERROR: Instead found '.' + (26, 14) ERROR: Expected identifier + (26, 14) ERROR: Instead found '(' + (245, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\circle_of_healing.as + (32, 2) INFO: Compiling void CircleOfHealing::game_dynamically_created() + (34, 14) ERROR: No matching symbol 'param1' + (35, 17) ERROR: No matching symbol 'param2' + (36, 14) ERROR: No matching symbol 'param3' + (37, 15) ERROR: No matching symbol 'GetSkillLevel' + (38, 34) ERROR: No matching symbol 'param1' + (39, 3) ERROR: No matching signatures to 'string::MY_DURATION(const string)' + (42, 2) INFO: Compiling void CircleOfHealing::OnSpawn() + (44, 3) ERROR: No matching symbol 'SetName' + (45, 3) ERROR: No matching symbol 'SetHealth' + (46, 3) ERROR: No matching symbol 'SetInvincible' + (47, 3) ERROR: No matching symbol 'SetRace' + (48, 3) ERROR: No matching symbol 'SetGravity' + (49, 3) ERROR: No matching symbol 'SetBloodType' + (50, 3) ERROR: No matching symbol 'SetModel' + (51, 3) ERROR: No matching symbol 'SetModelBody' + (52, 3) ERROR: No matching symbol 'SetSolid' + (53, 3) ERROR: No matching symbol 'DropToFloor' + (54, 3) ERROR: No matching symbol 'SetNoPush' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (58, 20) ERROR: No matching symbol 'SOUND_PULSE' + (59, 3) ERROR: No matching symbol 'SetScriptFlags' + (62, 2) INFO: Compiling void CircleOfHealing::make_seal() + (64, 15) ERROR: No matching symbol 'FindEntitiesInSphere' + (65, 23) ERROR: No matching symbol 'GetTokenCount' + (71, 2) INFO: Compiling void CircleOfHealing::check_if_near() + (73, 20) ERROR: No matching symbol 'GetToken' + (74, 10) ERROR: No matching symbol 'GetEntityName' + (75, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (77, 3) ERROR: No matching symbol 'SendColoredMessage' + (80, 2) INFO: Compiling void CircleOfHealing::apply_aoe_effect() + (82, 8) ERROR: No matching symbol 'GetEntityName' + (86, 8) ERROR: No matching symbol 'EXIT_SUB' + (87, 8) ERROR: No matching symbol 'GetEntityProperty' + (91, 25) ERROR: No matching symbol 'param1' + (92, 8) ERROR: No matching symbol 'GetEntityProperty' + (93, 3) ERROR: No matching symbol 'ApplyEffect' + (94, 22) ERROR: No matching symbol 'param1' + (98, 8) ERROR: No matching symbol 'GetEntityProperty' + (102, 8) ERROR: No matching symbol 'L_ADD_POINTS' + (104, 8) ERROR: No matching symbol 'param1' + (107, 4) ERROR: No matching symbol 'CallExternal' + (111, 2) INFO: Compiling void CircleOfHealing::aoe_end() + (114, 19) ERROR: No matching symbol 'SOUND_PULSE' + (116, 7) ERROR: No matching symbol 'MY_SCRIPT_IDX' + (118, 4) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'DeleteEntity' + (23, 2) INFO: Compiling void BaseAoe::OnSpawn() + (27, 7) ERROR: No matching symbol 'AOE_FREQ' + (29, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (31, 7) ERROR: No matching symbol 'AOE_DMG_FREQ' + (33, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void BaseAoe::get_skill() + (40, 32) ERROR: No matching symbol 'MY_OWNER' + (41, 7) ERROR: No matching symbol 'ACTIVE_SKILL' + (46, 2) INFO: Compiling void BaseAoe::aoe_scan_loop() + (48, 7) ERROR: Illegal operation on this datatype + (49, 3) ERROR: No matching symbol 'AOE_FREQ' + (53, 2) INFO: Compiling void BaseAoe::aoe_dmg_loop() + (55, 7) ERROR: Illegal operation on this datatype + (56, 3) ERROR: No matching symbol 'AOE_DMG_FREQ' + (60, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad() + (63, 41) ERROR: No matching symbol 'GetOwner' + (65, 16) ERROR: No matching symbol 'FindEntitiesInSphere' + (67, 21) ERROR: No matching symbol 'GetTokenCount' + (68, 18) ERROR: No conversion from 'string' to 'int' available. + (69, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (71, 22) ERROR: No conversion from 'string' to 'int' available. + (76, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (78, 22) ERROR: No conversion from 'string' to 'int' available. + (85, 2) INFO: Compiling void BaseAoe::aoe_apply_loop() + (89, 33) ERROR: Expected expression value + (89, 33) ERROR: Instead found '' + (93, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly() + (95, 23) ERROR: No matching symbol 'GetToken' + (96, 7) ERROR: No matching symbol 'GetRelationship' + (100, 7) ERROR: Expression must be of boolean type, instead found 'string' + (102, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (102, 9) INFO: Candidates are: + (102, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (102, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (107, 9) ERROR: No matching symbol 'DO_EFFECT' + (108, 3) ERROR: No matching symbol 'apply_aoe_effect' + (111, 2) INFO: Compiling void BaseAoe::aoe_dodamage_rad() + (113, 33) ERROR: Expected expression value + (113, 33) ERROR: Instead found '' + (116, 2) INFO: Compiling void BaseAoe::aoe_end() + (119, 7) ERROR: No matching symbol 'MY_SCRIPT_IDX' + (121, 4) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\circle_of_ice_greater.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\circle_of_ice_lesser.as + (24, 2) ERROR: Expected method or property + (24, 2) ERROR: Instead found identifier 'string' + (25, 12) ERROR: Expected '(' + (25, 12) ERROR: Instead found '.' + (26, 12) ERROR: Expected '(' + (26, 12) ERROR: Instead found '.' + (28, 19) ERROR: Expected identifier + (28, 19) ERROR: Instead found '(' + (197, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\circle_of_ice_player.as + (24, 2) ERROR: Expected method or property + (24, 2) ERROR: Instead found identifier 'string' + (25, 12) ERROR: Expected '(' + (25, 12) ERROR: Instead found '.' + (26, 12) ERROR: Expected '(' + (26, 12) ERROR: Instead found '.' + (28, 19) ERROR: Expected identifier + (28, 19) ERROR: Instead found '(' + (197, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\circle_of_ice_sword.as + (24, 2) ERROR: Expected method or property + (24, 2) ERROR: Instead found identifier 'string' + (25, 12) ERROR: Expected '(' + (25, 12) ERROR: Instead found '.' + (26, 12) ERROR: Expected '(' + (26, 12) ERROR: Instead found '.' + (28, 19) ERROR: Expected identifier + (28, 19) ERROR: Instead found '(' + (197, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\circle_of_lolth.as + (25, 2) INFO: Compiling void CircleOfLolth::game_precache() + (27, 3) ERROR: No matching symbol 'Precache' + (30, 2) INFO: Compiling void CircleOfLolth::OnSpawn() + (32, 3) ERROR: No matching symbol 'SetNoPush' + (33, 3) ERROR: No matching symbol 'SetInvincible' + (37, 2) INFO: Compiling void CircleOfLolth::game_dynamically_created() + (44, 56) ERROR: Expected expression value + (44, 56) ERROR: Instead found '' + (55, 2) INFO: Compiling void CircleOfLolth::aoe_scan_loop() + (57, 3) ERROR: No matching symbol 'ClientEvent' + (60, 2) INFO: Compiling void CircleOfLolth::aoe_affect_target() + (62, 3) ERROR: No matching symbol 'XDoDamage' + (63, 3) ERROR: No matching symbol 'ApplyEffect' + (66, 2) INFO: Compiling void CircleOfLolth::aoe_end() + (68, 3) ERROR: No matching symbol 'DeleteEntity' + (21, 2) INFO: Compiling void BaseAoe2::OnSpawn() + (23, 8) ERROR: No matching symbol 'AOE_VULNERABLE' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetNoPush' + (28, 3) ERROR: No matching symbol 'SetGravity' + (32, 2) INFO: Compiling void BaseAoe2::game_dynamically_created() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BaseAoe2::aoe_start() + (39, 22) ERROR: No matching symbol 'MY_OWNER' + (41, 16) ERROR: No matching symbol 'MY_OWNER' + (43, 9) ERROR: No matching symbol 'AOE_VULNERABLE' + (45, 4) ERROR: No matching symbol 'SetRace' + (49, 3) ERROR: No matching symbol 'AOE_DURATION' + (52, 2) INFO: Compiling void BaseAoe2::aoe_scan_loop() + (58, 33) ERROR: Expected expression value + (58, 33) ERROR: Instead found '' + (64, 48) ERROR: Expected expression value + (64, 48) ERROR: Instead found '' + (68, 48) ERROR: Expected expression value + (68, 48) ERROR: Instead found '' + (80, 2) INFO: Compiling void BaseAoe2::aoe_affect_targets() + (83, 43) ERROR: Expected expression value + (83, 43) ERROR: Instead found '' + (84, 42) ERROR: Expected expression value + (84, 42) ERROR: Instead found '' + (89, 2) INFO: Compiling void BaseAoe2::game_dodamage() + (92, 42) ERROR: Expected expression value + (92, 42) ERROR: Instead found '' + (102, 2) INFO: Compiling void BaseAoe2::func_filter_targs() + (104, 19) ERROR: No matching symbol 'param1' + (106, 9) ERROR: No matching symbol 'AOE_FRIENDLY' + (108, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (108, 9) INFO: Candidates are: + (108, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (108, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (110, 10) ERROR: No matching signatures to 'IsValidPlayer(string)' + (110, 10) INFO: Candidates are: + (110, 10) INFO: bool IsValidPlayer(CBasePlayer@) + (110, 10) INFO: Rejected due to type mismatch at positional parameter 1 + (112, 10) ERROR: Illegal operation on this datatype + (114, 11) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (118, 22) ERROR: No matching symbol 'GetRelationship' + (121, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (127, 10) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (130, 10) ERROR: No matching symbol 'AOE_AFFECTS_WARY' + (135, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (138, 7) ERROR: No matching symbol 'AOE_SCAN_TYPE' + (140, 41) ERROR: No matching symbol 'GetOwner' + (141, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (141, 23) INFO: Candidates are: + (141, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (141, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (142, 24) ERROR: No matching symbol 'TraceLine' + (146, 8) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (149, 3) WARN: Unreachable code + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\client_side_fireball.as + (32, 2) INFO: Compiling void ClientSideFireball::OnRepeatTimer() + (34, 3) ERROR: No matching symbol 'SetRepeatDelay' + (35, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (38, 3) ERROR: No matching symbol 'ClientEffect' + (39, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (43, 2) INFO: Compiling void ClientSideFireball::OnRepeatTimer_1() + (45, 3) ERROR: No matching symbol 'SetRepeatDelay' + (46, 3) ERROR: No matching symbol 'EmitSound3D' + (49, 2) INFO: Compiling void ClientSideFireball::client_activate() + (51, 3) ERROR: No matching symbol 'LogDebug' + (52, 19) ERROR: No matching symbol 'param1' + (53, 15) ERROR: No matching symbol 'param2' + (56, 3) ERROR: No matching symbol 'LogDebug' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'EmitSound3D' + (59, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (62, 2) INFO: Compiling void ClientSideFireball::update_fireball() + (74, 79) ERROR: Expected expression value + (74, 79) ERROR: Instead found '' + (77, 2) INFO: Compiling void ClientSideFireball::svr_update_fireball_vec() + (79, 16) ERROR: No matching symbol 'param1' + (82, 2) INFO: Compiling void ClientSideFireball::setup_fireball() + (89, 79) ERROR: Expected expression value + (89, 79) ERROR: Instead found '' + (100, 2) INFO: Compiling void ClientSideFireball::spit_flames() + (104, 79) ERROR: Expected expression value + (104, 79) ERROR: Instead found '' + (119, 2) INFO: Compiling void ClientSideFireball::setup_kaboom() + (125, 79) ERROR: Expected expression value + (125, 79) ERROR: Instead found '' + (140, 2) INFO: Compiling void ClientSideFireball::fireball_explode() + (144, 3) ERROR: No matching symbol 'ClientEffect' + (146, 3) ERROR: No matching symbol 'ClientEffect' + (148, 3) ERROR: No matching symbol 'ClientEffect' + (150, 3) ERROR: No matching symbol 'ClientEffect' + (152, 3) ERROR: No matching symbol 'EmitSound3D' + (155, 2) INFO: Compiling void ClientSideFireball::fireball_end() + (158, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (161, 2) INFO: Compiling void ClientSideFireball::end_effect() + (163, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\client_side_iceball.as + (32, 2) INFO: Compiling void ClientSideFireball::OnRepeatTimer() + (34, 3) ERROR: No matching symbol 'SetRepeatDelay' + (35, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (38, 3) ERROR: No matching symbol 'ClientEffect' + (39, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (43, 2) INFO: Compiling void ClientSideFireball::OnRepeatTimer_1() + (45, 3) ERROR: No matching symbol 'SetRepeatDelay' + (46, 3) ERROR: No matching symbol 'EmitSound3D' + (49, 2) INFO: Compiling void ClientSideFireball::client_activate() + (51, 3) ERROR: No matching symbol 'LogDebug' + (52, 19) ERROR: No matching symbol 'param1' + (53, 15) ERROR: No matching symbol 'param2' + (56, 3) ERROR: No matching symbol 'LogDebug' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'EmitSound3D' + (59, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (62, 2) INFO: Compiling void ClientSideFireball::update_fireball() + (74, 79) ERROR: Expected expression value + (74, 79) ERROR: Instead found '' + (77, 2) INFO: Compiling void ClientSideFireball::svr_update_fireball_vec() + (79, 16) ERROR: No matching symbol 'param1' + (82, 2) INFO: Compiling void ClientSideFireball::setup_fireball() + (89, 79) ERROR: Expected expression value + (89, 79) ERROR: Instead found '' + (100, 2) INFO: Compiling void ClientSideFireball::spit_flames() + (104, 79) ERROR: Expected expression value + (104, 79) ERROR: Instead found '' + (119, 2) INFO: Compiling void ClientSideFireball::setup_kaboom() + (125, 79) ERROR: Expected expression value + (125, 79) ERROR: Instead found '' + (140, 2) INFO: Compiling void ClientSideFireball::fireball_explode() + (144, 3) ERROR: No matching symbol 'ClientEffect' + (146, 3) ERROR: No matching symbol 'ClientEffect' + (148, 3) ERROR: No matching symbol 'ClientEffect' + (150, 3) ERROR: No matching symbol 'ClientEffect' + (152, 3) ERROR: No matching symbol 'EmitSound3D' + (155, 2) INFO: Compiling void ClientSideFireball::fireball_end() + (158, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (161, 2) INFO: Compiling void ClientSideFireball::end_effect() + (163, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\client_side_lball.as + (26, 2) INFO: Compiling void ClientSideLball::OnRepeatTimer() + (28, 3) ERROR: No matching symbol 'SetRepeatDelay' + (29, 3) ERROR: No matching symbol 'EmitSound3D' + (32, 2) INFO: Compiling void ClientSideLball::client_activate() + (34, 3) ERROR: No matching symbol 'LogDebug' + (35, 19) ERROR: No matching symbol 'param1' + (36, 15) ERROR: No matching symbol 'param2' + (38, 19) ERROR: No matching symbol 'param3' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'EmitSound3D' + (44, 3) ERROR: No matching signatures to 'string::L_BALL_DURATION(const string)' + (47, 2) INFO: Compiling void ClientSideLball::update_ball() + (59, 79) ERROR: Expected expression value + (59, 79) ERROR: Instead found '' + (62, 2) INFO: Compiling void ClientSideLball::setup_ball() + (67, 79) ERROR: Expected expression value + (67, 79) ERROR: Instead found '' + (74, 2) INFO: Compiling void ClientSideLball::ball_explode() + (83, 3) ERROR: No matching symbol 'EmitSound3D' + (86, 2) INFO: Compiling void ClientSideLball::splodie_beams() + (91, 35) ERROR: Expected expression value + (91, 35) ERROR: Instead found '' + (96, 2) INFO: Compiling void ClientSideLball::svr_update_vec() + (98, 16) ERROR: No matching symbol 'param1' + (101, 2) INFO: Compiling void ClientSideLball::ball_end() + (104, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (107, 2) INFO: Compiling void ClientSideLball::end_effect() + (109, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\doom_plant.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\dragonfly.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\fangtooth.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\felewyn_shard.as + (24, 2) INFO: Compiling void FelewynShard::game_dynamically_created() + (26, 15) ERROR: No matching symbol 'param1' + (29, 2) INFO: Compiling void FelewynShard::OnSpawn() + (31, 3) ERROR: No matching symbol 'SetName' + (32, 3) ERROR: No matching symbol 'SetInvincible' + (33, 3) ERROR: No matching symbol 'SetWidth' + (34, 3) ERROR: No matching symbol 'SetHeight' + (35, 3) ERROR: No matching symbol 'SetGravity' + (36, 3) ERROR: No matching symbol 'SetModel' + (37, 3) ERROR: No matching symbol 'SetModelBody' + (38, 3) ERROR: No matching symbol 'SetIdleAnim' + (39, 3) ERROR: No matching symbol 'PlayAnim' + (40, 3) ERROR: No matching symbol 'SetProp' + (41, 3) ERROR: No matching symbol 'SetProp' + (42, 3) ERROR: No matching symbol 'SetSolid' + (43, 3) ERROR: No matching symbol 'ClientEvent' + (45, 3) ERROR: No matching symbol 'SetMonsterClip' + (46, 3) ERROR: No matching symbol 'SetFly' + (47, 3) ERROR: No matching symbol 'SetSayTextRange' + (48, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (51, 2) INFO: Compiling void FelewynShard::do_intro() + (53, 3) ERROR: No matching symbol 'SayText' + (54, 3) ERROR: No matching symbol 'CHAT_DELAY' + (57, 2) INFO: Compiling void FelewynShard::do_intro2() + (59, 3) ERROR: No matching symbol 'SayText' + (60, 3) ERROR: No matching symbol 'CHAT_DELAY' + (63, 2) INFO: Compiling void FelewynShard::do_intro3() + (65, 3) ERROR: No matching symbol 'SayText' + (66, 3) ERROR: No matching symbol 'CHAT_DELAY' + (69, 2) INFO: Compiling void FelewynShard::do_intro4() + (71, 3) ERROR: No matching symbol 'SayText' + (72, 3) ERROR: No matching symbol 'CHAT_DELAY' + (75, 2) INFO: Compiling void FelewynShard::do_intro5() + (77, 3) ERROR: No matching symbol 'SayText' + (78, 3) ERROR: No matching symbol 'CHAT_DELAY' + (79, 3) ERROR: No matching symbol 'SetMoveDest' + (81, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (84, 2) INFO: Compiling void FelewynShard::basenoclip_flight() + (89, 33) ERROR: Expected expression value + (89, 33) ERROR: Instead found '' + (125, 2) INFO: Compiling void FelewynShard::remove_me() + (127, 3) ERROR: No matching symbol 'DeleteEntity' + (130, 2) INFO: Compiling void FelewynShard::client_activate() + (137, 51) ERROR: Expected expression value + (137, 51) ERROR: Instead found '' + (142, 2) INFO: Compiling void FelewynShard::game_prerender() + (144, 37) ERROR: Expected expression value + (144, 37) ERROR: Instead found '' + (155, 32) ERROR: Expected expression value + (155, 32) ERROR: Instead found '' + (159, 2) INFO: Compiling void FelewynShard::glow_sprite() + (161, 3) ERROR: No matching symbol 'ClientEffect' + (162, 3) ERROR: No matching symbol 'ClientEffect' + (163, 3) ERROR: No matching symbol 'ClientEffect' + (164, 3) ERROR: No matching symbol 'ClientEffect' + (165, 3) ERROR: No matching symbol 'ClientEffect' + (166, 3) ERROR: No matching symbol 'ClientEffect' + (167, 3) ERROR: No matching symbol 'ClientEffect' + (168, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\fire_ball_guided.as + (6, 7) ERROR: Method 'void FireBallGuided::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\fire_wave.as + (32, 2) INFO: Compiling void FireWave::OnRepeatTimer() + (38, 37) ERROR: Expected expression value + (38, 37) ERROR: Instead found '' + (48, 2) INFO: Compiling void FireWave::OnRepeatTimer_1() + (50, 3) ERROR: No matching symbol 'SetRepeatDelay' + (51, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (57, 2) INFO: Compiling void FireWave::game_dynamically_created() + (66, 42) ERROR: Expected expression value + (66, 42) ERROR: Instead found '' + (74, 2) INFO: Compiling void FireWave::remove_me() + (77, 36) ERROR: No matching symbol 'SOUND_BURN' + (77, 25) ERROR: No matching symbol 'CHAN_ITEM' + (77, 13) ERROR: No matching symbol 'GetOwner' + (78, 3) ERROR: No matching symbol 'ClientEvent' + (79, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (82, 2) INFO: Compiling void FireWave::remove_me2() + (84, 3) ERROR: No matching symbol 'DeleteEntity' + (87, 2) INFO: Compiling void FireWave::OnSpawn() + (89, 3) ERROR: No matching symbol 'SetName' + (90, 3) ERROR: No matching symbol 'SetWidth' + (91, 3) ERROR: No matching symbol 'SetHeight' + (92, 3) ERROR: No matching symbol 'SetModel' + (93, 3) ERROR: No matching symbol 'SetSolid' + (95, 3) ERROR: No matching symbol 'SetInvincible' + (96, 36) ERROR: No matching symbol 'SOUND_BURN' + (96, 25) ERROR: No matching symbol 'CHAN_ITEM' + (96, 13) ERROR: No matching symbol 'GetOwner' + (99, 2) INFO: Compiling void FireWave::active_loop() + (104, 33) ERROR: Expected expression value + (104, 33) ERROR: Instead found '' + (111, 2) INFO: Compiling void FireWave::burn_targets() + (115, 47) ERROR: Expected expression value + (115, 47) ERROR: Instead found '' + (118, 2) INFO: Compiling void FireWave::client_activate() + (120, 17) ERROR: No matching symbol 'param1' + (121, 28) ERROR: No matching symbol 'param2' + (130, 2) INFO: Compiling void FireWave::flames_shoot() + (132, 39) ERROR: Expected expression value + (132, 39) ERROR: Instead found '' + (133, 38) ERROR: Expected expression value + (133, 38) ERROR: Instead found '' + (136, 38) ERROR: Expected expression value + (136, 38) ERROR: Instead found '' + (139, 38) ERROR: Expected expression value + (139, 38) ERROR: Instead found '' + (142, 38) ERROR: Expected expression value + (142, 38) ERROR: Instead found '' + (145, 38) ERROR: Expected expression value + (145, 38) ERROR: Instead found '' + (148, 38) ERROR: Expected expression value + (148, 38) ERROR: Instead found '' + (151, 38) ERROR: Expected expression value + (151, 38) ERROR: Instead found '' + (156, 2) INFO: Compiling void FireWave::setup_flames() + (158, 3) ERROR: No matching symbol 'ClientEffect' + (159, 3) ERROR: No matching symbol 'ClientEffect' + (160, 3) ERROR: No matching symbol 'ClientEffect' + (161, 3) ERROR: No matching symbol 'ClientEffect' + (162, 3) ERROR: No matching symbol 'ClientEffect' + (163, 3) ERROR: No matching symbol 'ClientEffect' + (164, 3) ERROR: No matching symbol 'ClientEffect' + (165, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\flame_burst.as + (20, 2) INFO: Compiling void FlameBurst::game_dynamically_created() + (22, 14) ERROR: No matching symbol 'param1' + (23, 34) ERROR: No matching symbol 'param1' + (24, 20) ERROR: No matching symbol 'param2' + (25, 7) ERROR: No matching symbol 'param3' + (27, 15) ERROR: No matching symbol 'param3' + (29, 18) ERROR: No matching symbol 'param4' + (34, 3) ERROR: No matching symbol 'ClientEvent' + (36, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (40, 2) INFO: Compiling void FlameBurst::effect_die() + (43, 3) ERROR: No matching symbol 'DeleteEntity' + (46, 2) INFO: Compiling void FlameBurst::big_boom() + (49, 32) ERROR: Expected expression value + (49, 32) ERROR: Instead found '' + (52, 2) INFO: Compiling void FlameBurst::game_dodamage() + (54, 9) ERROR: No matching symbol 'param1' + (55, 9) ERROR: No matching symbol 'GetRelationship' + (56, 7) ERROR: Expression must be of boolean type, instead found 'string' + (58, 8) ERROR: Illegal operation on this datatype + (61, 23) ERROR: No matching symbol 'param2' + (66, 8) ERROR: No matching symbol 'EXIT_SUB' + (67, 7) ERROR: Illegal operation on this datatype + (69, 10) ERROR: No matching symbol 'GetEntityProperty' + (72, 4) ERROR: No matching symbol 'ApplyEffect' + (74, 7) ERROR: Expression must be of boolean type, instead found 'string' + (76, 4) ERROR: No matching symbol 'XDoDamage' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\flame_burst_cl.as + (11, 2) INFO: Compiling void FlameBurstCl::client_activate() + (16, 34) ERROR: Expected expression value + (16, 34) ERROR: Instead found '' + (25, 2) INFO: Compiling void FlameBurstCl::remove_me_cl() + (27, 3) ERROR: No matching symbol 'RemoveScript' + (30, 2) INFO: Compiling void FlameBurstCl::create_flames() + (33, 36) ERROR: Expected expression value + (33, 36) ERROR: Instead found '' + (38, 2) INFO: Compiling void FlameBurstCl::setup_flame() + (45, 43) ERROR: Expected expression value + (45, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\flame_skull.as + (6, 7) ERROR: Method 'void FlameSkull::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\fx_manabolt.as + (11, 2) INFO: Compiling void FxManabolt::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetModel' + (14, 3) ERROR: No matching symbol 'SetSolid' + (15, 3) ERROR: No matching symbol 'SetModelBody' + (16, 3) ERROR: No matching symbol 'SetRace' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: No matching symbol 'SetGravity' + (20, 3) ERROR: No matching symbol 'SetMonsterClip' + (21, 3) ERROR: No matching symbol 'SetProp' + (22, 3) ERROR: No matching symbol 'SetProp' + (25, 2) INFO: Compiling void FxManabolt::game_dynamically_created() + (27, 14) ERROR: No matching symbol 'GetEntityIndex' + (28, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (31, 2) INFO: Compiling void FxManabolt::stick_to_owner() + (39, 43) ERROR: Expected expression value + (39, 43) ERROR: Instead found '' + (40, 34) ERROR: Expected expression value + (40, 34) ERROR: Instead found '' + (54, 2) INFO: Compiling void FxManabolt::set_size() + (56, 20) ERROR: No matching symbol 'param1' + (57, 22) ERROR: Can't implicitly convert from 'string' to 'const int'. + (57, 22) ERROR: No conversion from 'string' to 'const int' available. + (59, 3) ERROR: No matching symbol 'SetModelBody' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\giant_rat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\guided_ball_cl.as + (17, 2) INFO: Compiling void GuidedBallCl::client_activate() + (22, 51) ERROR: Expected expression value + (22, 51) ERROR: Instead found '' + (27, 2) INFO: Compiling void GuidedBallCl::game_prerender() + (29, 37) ERROR: Expected expression value + (29, 37) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\guided_lball_alt.as + (29, 2) INFO: Compiling void GuidedLballAlt::OnRepeatTimer() + (41, 46) ERROR: Expected expression value + (41, 46) ERROR: Instead found '' + (44, 35) ERROR: Expected expression value + (44, 35) ERROR: Instead found '' + (45, 47) ERROR: Expected expression value + (45, 47) ERROR: Instead found '' + (72, 2) INFO: Compiling void GuidedLballAlt::OnSpawn() + (74, 3) ERROR: No matching symbol 'SetName' + (75, 3) ERROR: No matching symbol 'SetModel' + (76, 3) ERROR: No matching symbol 'SetModelBody' + (77, 3) ERROR: No matching symbol 'SetWidth' + (78, 3) ERROR: No matching symbol 'SetHeight' + (79, 3) ERROR: No matching symbol 'SetSolid' + (80, 3) ERROR: No matching symbol 'SetBBox' + (81, 3) ERROR: No matching symbol 'SetRoam' + (82, 3) ERROR: No matching symbol 'SetGravity' + (83, 3) ERROR: No matching symbol 'SetIdleAnim' + (84, 3) ERROR: No matching symbol 'SetMoveAnim' + (86, 3) ERROR: No matching symbol 'SetInvincible' + (88, 19) ERROR: No matching symbol 'SOUND_LOOP' + (91, 2) INFO: Compiling void GuidedLballAlt::game_dynamically_created() + (93, 14) ERROR: No matching symbol 'param1' + (94, 12) ERROR: No matching symbol 'param2' + (95, 15) ERROR: No matching symbol 'param3' + (96, 18) ERROR: No matching symbol 'param4' + (98, 3) ERROR: Illegal operation on 'string' + (99, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (99, 20) INFO: Candidates are: + (99, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (99, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (104, 7) ERROR: Expression must be of boolean type, instead found 'string' + (106, 17) ERROR: No matching symbol 'param5' + (108, 3) ERROR: No matching symbol 'SetRace' + (109, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (112, 2) INFO: Compiling void GuidedLballAlt::pick_target() + (114, 23) ERROR: No matching symbol 'FindEntitiesInSphere' + (115, 7) ERROR: No matching symbol 'NME_TOKEN' + (117, 4) ERROR: No matching symbol 'ScrambleTokens' + (118, 16) ERROR: No matching symbol 'GetToken' + (120, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (120, 9) INFO: Candidates are: + (120, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (120, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (122, 16) ERROR: No matching symbol 'GetEntityProperty' + (127, 2) INFO: Compiling void GuidedLballAlt::sphere_explode() + (129, 7) ERROR: Illegal operation on this datatype + (132, 19) ERROR: No matching symbol 'SOUND_LOOP' + (133, 3) ERROR: No matching symbol 'ClientEvent' + (134, 3) ERROR: No matching symbol 'XDoDamage' + (135, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (136, 17) ERROR: No matching symbol 'FindEntitiesInSphere' + (138, 23) ERROR: No matching symbol 'GetTokenCount' + (144, 2) INFO: Compiling void GuidedLballAlt::affect_targets() + (146, 21) ERROR: No matching symbol 'GetToken' + (147, 7) ERROR: Expression must be of boolean type, instead found 'string' + (149, 8) ERROR: Illegal operation on this datatype + (152, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (152, 9) INFO: Candidates are: + (152, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (152, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (157, 8) ERROR: No matching symbol 'EXIT_SUB' + (158, 3) ERROR: No matching symbol 'ApplyEffect' + (161, 2) INFO: Compiling void GuidedLballAlt::remove_me() + (163, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\guided_lball_alt_cl.as + (17, 2) INFO: Compiling void GuidedLballAltCl::client_activate() + (19, 12) ERROR: No matching symbol 'param1' + (20, 15) ERROR: No matching symbol 'param2' + (21, 3) ERROR: Illegal operation on 'string' + (27, 3) ERROR: No matching symbol 'ball_end' + (28, 3) ERROR: No matching symbol 'EmitSound3D' + (29, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (32, 2) INFO: Compiling void GuidedLballAltCl::remove_fx() + (34, 3) ERROR: No matching symbol 'RemoveScript' + (37, 2) INFO: Compiling void GuidedLballAltCl::splodie_beams() + (42, 35) ERROR: Expected expression value + (42, 35) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\guided_sphere_cl.as + (21, 2) INFO: Compiling GuidedSphereCl::GuidedSphereCl() + (27, 15) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (39, 2) INFO: Compiling void GuidedSphereCl::OnRepeatTimer() + (46, 38) ERROR: Expected expression value + (46, 38) ERROR: Instead found '' + (63, 2) INFO: Compiling void GuidedSphereCl::OnRepeatTimer_1() + (66, 38) ERROR: Expected expression value + (66, 38) ERROR: Instead found '' + (70, 2) INFO: Compiling void GuidedSphereCl::OnRepeatTimer_2() + (76, 40) ERROR: Expected expression value + (76, 40) ERROR: Instead found '' + (87, 2) INFO: Compiling void GuidedSphereCl::OnRepeatTimer_3() + (89, 3) ERROR: No matching symbol 'SetRepeatDelay' + (90, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (93, 3) ERROR: No matching symbol 'EmitSound3D' + (96, 2) INFO: Compiling void GuidedSphereCl::client_activate() + (98, 19) ERROR: No matching symbol 'param1' + (99, 16) ERROR: No matching symbol 'param2' + (100, 17) ERROR: No matching symbol 'param3' + (101, 14) ERROR: No matching symbol 'param4' + (103, 21) ERROR: No matching symbol 'param5' + (104, 15) ERROR: No matching symbol 'param6' + (105, 3) ERROR: No matching symbol 'LogDebug' + (108, 3) ERROR: No matching symbol 'ClientEffect' + (109, 3) ERROR: No matching symbol 'EmitSound3D' + (110, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (113, 2) INFO: Compiling void GuidedSphereCl::update_fireball() + (139, 46) ERROR: Expected expression value + (139, 46) ERROR: Instead found '' + (150, 79) ERROR: Expected expression value + (150, 79) ERROR: Instead found '' + (153, 2) INFO: Compiling void GuidedSphereCl::svr_update_fireball_vec() + (158, 38) ERROR: Expected expression value + (158, 38) ERROR: Instead found '' + (161, 2) INFO: Compiling void GuidedSphereCl::setup_fireball() + (168, 79) ERROR: Expected expression value + (168, 79) ERROR: Instead found '' + (179, 2) INFO: Compiling void GuidedSphereCl::spit_flames() + (183, 79) ERROR: Expected expression value + (183, 79) ERROR: Instead found '' + (198, 2) INFO: Compiling void GuidedSphereCl::setup_kaboom() + (204, 79) ERROR: Expected expression value + (204, 79) ERROR: Instead found '' + (219, 2) INFO: Compiling void GuidedSphereCl::fireball_end() + (222, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (225, 2) INFO: Compiling void GuidedSphereCl::end_effect() + (227, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\horror_egg.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\horror_egg_lightning.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\ibarrier.as + (24, 2) ERROR: Expected method or property + (24, 2) ERROR: Instead found identifier 'string' + (26, 10) ERROR: Expected identifier + (26, 10) ERROR: Instead found '(' + (236, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\ice_blast.as + (6, 7) ERROR: Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\ice_burst.as + (22, 2) INFO: Compiling void IceBurst::game_dynamically_created() + (24, 14) ERROR: No matching symbol 'param1' + (25, 34) ERROR: No matching symbol 'param1' + (27, 20) ERROR: No matching symbol 'param2' + (28, 18) ERROR: No matching symbol 'param3' + (33, 3) ERROR: No matching symbol 'ClientEvent' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (36, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (39, 2) INFO: Compiling void IceBurst::effect_die() + (42, 3) ERROR: No matching symbol 'DeleteEntity' + (45, 2) INFO: Compiling void IceBurst::big_boom() + (47, 13) ERROR: No matching symbol 'GetOwner' + (48, 3) ERROR: No matching symbol 'aoe_applyeffect_rad' + (51, 2) INFO: Compiling void IceBurst::apply_aoe_effect() + (54, 24) ERROR: No conversion from 'string' to 'int' available. + (56, 4) ERROR: No matching symbol 'ApplyEffect' + (58, 24) ERROR: No conversion from 'string' to 'int' available. + (60, 24) ERROR: No matching symbol 'param1' + (62, 5) ERROR: No matching symbol 'ApplyEffect' + (64, 24) ERROR: No matching symbol 'param1' + (66, 5) ERROR: No matching symbol 'ApplyEffect' + (23, 2) INFO: Compiling void BaseAoe::OnSpawn() + (27, 7) ERROR: No matching symbol 'AOE_FREQ' + (29, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (31, 7) ERROR: No matching symbol 'AOE_DMG_FREQ' + (33, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void BaseAoe::get_skill() + (40, 32) ERROR: No matching symbol 'MY_OWNER' + (41, 7) ERROR: No matching symbol 'ACTIVE_SKILL' + (46, 2) INFO: Compiling void BaseAoe::aoe_scan_loop() + (48, 7) ERROR: Illegal operation on this datatype + (49, 3) ERROR: No matching symbol 'AOE_FREQ' + (53, 2) INFO: Compiling void BaseAoe::aoe_dmg_loop() + (55, 7) ERROR: Illegal operation on this datatype + (56, 3) ERROR: No matching symbol 'AOE_DMG_FREQ' + (60, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad() + (63, 41) ERROR: No matching symbol 'GetOwner' + (65, 16) ERROR: No matching symbol 'FindEntitiesInSphere' + (67, 21) ERROR: No matching symbol 'GetTokenCount' + (68, 18) ERROR: No conversion from 'string' to 'int' available. + (69, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (71, 22) ERROR: No conversion from 'string' to 'int' available. + (76, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (78, 22) ERROR: No conversion from 'string' to 'int' available. + (85, 2) INFO: Compiling void BaseAoe::aoe_apply_loop() + (89, 33) ERROR: Expected expression value + (89, 33) ERROR: Instead found '' + (93, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly() + (95, 23) ERROR: No matching symbol 'GetToken' + (96, 7) ERROR: No matching symbol 'GetRelationship' + (100, 7) ERROR: Expression must be of boolean type, instead found 'string' + (102, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (102, 9) INFO: Candidates are: + (102, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (102, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (107, 9) ERROR: No matching symbol 'DO_EFFECT' + (108, 3) ERROR: No matching symbol 'apply_aoe_effect' + (111, 2) INFO: Compiling void BaseAoe::aoe_dodamage_rad() + (113, 33) ERROR: Expected expression value + (113, 33) ERROR: Instead found '' + (116, 2) INFO: Compiling void BaseAoe::aoe_end() + (119, 7) ERROR: No matching symbol 'MY_SCRIPT_IDX' + (121, 4) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\ice_burst_cl.as + (11, 2) INFO: Compiling void IceBurstCl::client_activate() + (16, 34) ERROR: Expected expression value + (16, 34) ERROR: Instead found '' + (25, 2) INFO: Compiling void IceBurstCl::remove_me_cl() + (27, 3) ERROR: No matching symbol 'RemoveScript' + (30, 2) INFO: Compiling void IceBurstCl::create_ice() + (33, 34) ERROR: Expected expression value + (33, 34) ERROR: Instead found '' + (38, 2) INFO: Compiling void IceBurstCl::setup_ice() + (45, 41) ERROR: Expected expression value + (45, 41) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\ice_spikes.as + (18, 2) INFO: Compiling void IceSpikes::game_dynamically_created() + (20, 14) ERROR: No matching symbol 'param1' + (21, 13) ERROR: No matching symbol 'param2' + (22, 15) ERROR: No matching symbol 'param3' + (23, 16) ERROR: No matching symbol 'param4' + (24, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (27, 2) INFO: Compiling void IceSpikes::OnSpawn() + (29, 3) ERROR: No matching symbol 'SetName' + (30, 3) ERROR: No matching symbol 'SetSolid' + (31, 3) ERROR: No matching symbol 'SetWidth' + (32, 3) ERROR: No matching symbol 'SetHeight' + (33, 3) ERROR: No matching symbol 'SetRace' + (35, 3) ERROR: No matching symbol 'SetInvincible' + (38, 2) INFO: Compiling void IceSpikes::apply_damage() + (40, 3) ERROR: No matching symbol 'ClientEvent' + (42, 20) ERROR: No matching symbol 'GetMonsterProperty' + (43, 3) ERROR: No matching symbol 'CallExternal' + (44, 3) ERROR: No matching symbol 'XDoDamage' + (45, 13) ERROR: No matching symbol 'GetOwner' + (46, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 2) INFO: Compiling void IceSpikes::remove_me() + (51, 3) ERROR: No matching symbol 'ClientEvent' + (52, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (55, 2) INFO: Compiling void IceSpikes::remove_me2() + (57, 3) ERROR: No matching symbol 'DeleteEntity' + (60, 2) INFO: Compiling void IceSpikes::client_activate() + (62, 18) ERROR: No matching symbol 'param1' + (63, 15) ERROR: No matching symbol 'param2' + (64, 16) ERROR: No matching symbol 'param3' + (65, 21) ERROR: No conversion from 'string' to 'int' available. + (71, 2) INFO: Compiling void IceSpikes::spawn_spikes() + (76, 36) ERROR: Expected expression value + (76, 36) ERROR: Instead found '' + (80, 2) INFO: Compiling void IceSpikes::setup_spike() + (86, 23) ERROR: No matching signatures to 'Vector3(int, string, string)' + (86, 23) INFO: Candidates are: + (86, 23) INFO: Vector3::Vector3() + (86, 23) INFO: Vector3::Vector3(float, float, float) + (86, 23) INFO: Rejected due to type mismatch at positional parameter 2 + (86, 23) INFO: Vector3::Vector3(const Vector3&in) + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (94, 3) ERROR: No matching symbol 'ClientEffect' + (95, 3) ERROR: No matching symbol 'ClientEffect' + (96, 3) ERROR: No matching symbol 'ClientEffect' + (97, 3) ERROR: No matching symbol 'ClientEffect' + (98, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\ice_trail.as + (16, 2) INFO: Compiling void IceTrail::game_dynamically_created() + (18, 14) ERROR: No matching symbol 'param1' + (19, 16) ERROR: No matching symbol 'param2' + (20, 16) ERROR: No matching symbol 'param3' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\ice_wave.as + (6, 7) ERROR: Method 'void IceWave::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\ice_wave_player.as + (6, 7) ERROR: Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\keledros_fire_wall.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\lesser_wraith.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\lesser_wraith_cl.as + (13, 2) INFO: Compiling void LesserWraithCl::client_activate() + (15, 14) ERROR: No matching symbol 'param1' + (16, 15) ERROR: No matching symbol 'param2' + (17, 15) ERROR: No matching symbol 'param3' + (19, 3) ERROR: No matching symbol 'beam_loop' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (21, 3) ERROR: No matching symbol 'SetCallback' + (24, 2) INFO: Compiling void LesserWraithCl::game_prerender() + (27, 38) ERROR: Expected expression value + (27, 38) ERROR: Instead found '' + (28, 40) ERROR: Expected expression value + (28, 40) ERROR: Instead found '' + (31, 41) ERROR: Expected expression value + (31, 41) ERROR: Instead found '' + (33, 41) ERROR: Expected expression value + (33, 41) ERROR: Instead found '' + (46, 2) INFO: Compiling void LesserWraithCl::end_fx() + (49, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (52, 2) INFO: Compiling void LesserWraithCl::remove_me() + (54, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\lightning_ball_guided.as + (6, 7) ERROR: Method 'void FireBallGuided::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\lightning_repulse.as + (26, 2) INFO: Compiling void LightningRepulse::OnRepeatTimer() + (33, 32) ERROR: Expected expression value + (33, 32) ERROR: Instead found '' + (36, 2) INFO: Compiling void LightningRepulse::game_dynamically_created() + (38, 14) ERROR: No matching symbol 'param1' + (39, 14) ERROR: No matching symbol 'param2' + (40, 3) ERROR: No matching symbol 'SetRace' + (41, 17) ERROR: No matching symbol 'param3' + (42, 17) ERROR: No matching symbol 'param4' + (43, 17) ERROR: No matching symbol 'GetEntityMaxHealth' + (44, 3) ERROR: Illegal operation on 'string' + (45, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (45, 20) INFO: Candidates are: + (45, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (45, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (48, 3) ERROR: No matching signatures to 'string::MY_DURATION(const string)' + (49, 18) ERROR: No matching symbol 'param5' + (56, 2) INFO: Compiling void LightningRepulse::OnSpawn() + (58, 3) ERROR: No matching symbol 'SetName' + (59, 3) ERROR: No matching symbol 'SetInvincible' + (60, 3) ERROR: No matching symbol 'SetWidth' + (61, 3) ERROR: No matching symbol 'SetHeight' + (62, 3) ERROR: No matching symbol 'SetSolid' + (66, 2) INFO: Compiling void LightningRepulse::game_dodamage() + (102, 43) ERROR: Expected expression value + (102, 43) ERROR: Instead found '' + (110, 2) INFO: Compiling void LightningRepulse::end_summon() + (113, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (116, 2) INFO: Compiling void LightningRepulse::remove_me() + (118, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\lstrike.as + (36, 2) INFO: Compiling void Lstrike::OnRepeatTimer() + (38, 3) ERROR: No matching symbol 'SetRepeatDelay' + (39, 13) ERROR: No matching symbol 'GetOwner' + (42, 2) INFO: Compiling void Lstrike::game_dynamically_created() + (44, 14) ERROR: No matching symbol 'param1' + (45, 12) ERROR: No matching symbol 'param2' + (46, 18) ERROR: No matching symbol 'param3' + (47, 3) ERROR: No matching symbol 'StoreEntity' + (48, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (48, 20) INFO: Candidates are: + (48, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (48, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (50, 3) ERROR: No matching symbol 'DropToFloor' + (51, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (54, 2) INFO: Compiling void Lstrike::OnSpawn() + (56, 3) ERROR: No matching symbol 'SetName' + (57, 3) ERROR: No matching symbol 'SetInvincible' + (58, 3) ERROR: No matching symbol 'SetHealth' + (60, 3) ERROR: No matching symbol 'DropToFloor' + (63, 2) INFO: Compiling void Lstrike::summon_start() + (69, 51) ERROR: Expected expression value + (69, 51) ERROR: Instead found '' + (82, 2) INFO: Compiling void Lstrike::start_secondary() + (85, 7) ERROR: No matching symbol 'getCount' + (89, 24) ERROR: No matching symbol 'getCount' + (97, 2) INFO: Compiling void Lstrike::lblast_mark_targets() + (151, 55) ERROR: Expected expression value + (151, 55) ERROR: Instead found '' + (189, 50) ERROR: Expected expression value + (189, 50) ERROR: Instead found '' + (196, 2) INFO: Compiling void Lstrike::damage_loop() + (198, 7) ERROR: Illegal operation on this datatype + (199, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (200, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (205, 12) ERROR: No matching symbol 'BLAST_CHILD1' + (208, 5) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (208, 5) INFO: Candidates are: + (208, 5) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (208, 5) INFO: Rejected due to type mismatch at positional parameter 2 + (209, 20) ERROR: No matching symbol 'GetEntityIndex' + (209, 5) ERROR: No matching symbol 'BLAST_CHILD1' + (213, 12) ERROR: No matching symbol 'BLAST_CHILD2' + (216, 5) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (216, 5) INFO: Candidates are: + (216, 5) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (216, 5) INFO: Rejected due to type mismatch at positional parameter 2 + (217, 20) ERROR: No matching symbol 'GetEntityIndex' + (217, 5) ERROR: No matching symbol 'BLAST_CHILD2' + (221, 12) ERROR: No matching symbol 'BLAST_CHILD3' + (224, 5) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (224, 5) INFO: Candidates are: + (224, 5) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (224, 5) INFO: Rejected due to type mismatch at positional parameter 2 + (225, 20) ERROR: No matching symbol 'GetEntityIndex' + (225, 5) ERROR: No matching symbol 'BLAST_CHILD3' + (229, 12) ERROR: No matching symbol 'BLAST_CHILD4' + (232, 5) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (232, 5) INFO: Candidates are: + (232, 5) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (232, 5) INFO: Rejected due to type mismatch at positional parameter 2 + (233, 20) ERROR: No matching symbol 'GetEntityIndex' + (233, 5) ERROR: No matching symbol 'BLAST_CHILD5' + (237, 12) ERROR: No matching symbol 'BLAST_CHILD5' + (240, 5) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (240, 5) INFO: Candidates are: + (240, 5) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (240, 5) INFO: Rejected due to type mismatch at positional parameter 2 + (241, 20) ERROR: No matching symbol 'GetEntityIndex' + (241, 5) ERROR: No matching symbol 'BLAST_CHILD5' + (245, 12) ERROR: No matching symbol 'BLAST_CHILD6' + (248, 5) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (248, 5) INFO: Candidates are: + (248, 5) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (248, 5) INFO: Rejected due to type mismatch at positional parameter 2 + (249, 20) ERROR: No matching symbol 'GetEntityIndex' + (249, 5) ERROR: No matching symbol 'BLAST_CHILD6' + (253, 12) ERROR: No matching symbol 'BLAST_CHILD7' + (256, 5) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (256, 5) INFO: Candidates are: + (256, 5) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (256, 5) INFO: Rejected due to type mismatch at positional parameter 2 + (257, 20) ERROR: No matching symbol 'GetEntityIndex' + (257, 5) ERROR: No matching symbol 'BLAST_CHILD7' + (261, 12) ERROR: No matching symbol 'BLAST_CHILD8' + (264, 5) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (264, 5) INFO: Candidates are: + (264, 5) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (264, 5) INFO: Rejected due to type mismatch at positional parameter 2 + (265, 20) ERROR: No matching symbol 'GetEntityIndex' + (265, 5) ERROR: No matching symbol 'BLAST_CHILD8' + (269, 12) ERROR: No matching symbol 'BLAST_CHILD9' + (272, 5) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (272, 5) INFO: Candidates are: + (272, 5) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (272, 5) INFO: Rejected due to type mismatch at positional parameter 2 + (273, 20) ERROR: No matching symbol 'GetEntityIndex' + (273, 5) ERROR: No matching symbol 'BLAST_CHILD9' + (280, 3) ERROR: No matching symbol 'DoDamage' + (283, 2) INFO: Compiling void Lstrike::summon_end() + (286, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (289, 2) INFO: Compiling void Lstrike::remove_me() + (291, 3) ERROR: No matching symbol 'DeleteEntity' + (294, 2) INFO: Compiling void Lstrike::debug_beam() + (314, 35) ERROR: Expected expression value + (314, 35) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\lstrike_child.as + (16, 2) INFO: Compiling void LstrikeChild::OnRepeatTimer() + (18, 3) ERROR: No matching symbol 'SetRepeatDelay' + (19, 13) ERROR: No matching symbol 'GetOwner' + (22, 2) INFO: Compiling void LstrikeChild::game_dynamically_created() + (24, 14) ERROR: No matching symbol 'param1' + (25, 12) ERROR: No matching symbol 'param2' + (26, 17) ERROR: No matching symbol 'param3' + (27, 3) ERROR: No matching symbol 'StoreEntity' + (28, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (28, 20) INFO: Candidates are: + (28, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (28, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (30, 3) ERROR: No matching symbol 'DropToFloor' + (33, 3) ERROR: No matching signatures to 'string::MY_DURATION(const string)' + (36, 2) INFO: Compiling void LstrikeChild::OnSpawn() + (38, 3) ERROR: No matching symbol 'SetName' + (39, 3) ERROR: No matching symbol 'SetInvincible' + (40, 3) ERROR: No matching symbol 'SetHealth' + (42, 3) ERROR: No matching symbol 'DropToFloor' + (45, 2) INFO: Compiling void LstrikeChild::summon_start() + (47, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (50, 2) INFO: Compiling void LstrikeChild::damage_loop() + (52, 3) ERROR: No matching symbol 'SetRepeatDelay' + (53, 7) ERROR: Illegal operation on this datatype + (54, 3) ERROR: No matching symbol 'DoDamage' + (57, 2) INFO: Compiling void LstrikeChild::summon_end() + (60, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (63, 2) INFO: Compiling void LstrikeChild::remove_me() + (65, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\magic_dart.as + (34, 2) INFO: Compiling void MagicDart::game_dynamically_created() + (53, 36) ERROR: Expected expression value + (53, 36) ERROR: Instead found '' + (64, 2) INFO: Compiling void MagicDart::OnSpawn() + (66, 3) ERROR: No matching symbol 'SetName' + (67, 3) ERROR: No matching symbol 'SetModel' + (68, 3) ERROR: No matching symbol 'SetProp' + (69, 3) ERROR: No matching symbol 'SetProp' + (70, 3) ERROR: No matching symbol 'SetWidth' + (71, 3) ERROR: No matching symbol 'SetHeight' + (72, 3) ERROR: No matching symbol 'SetSolid' + (73, 3) ERROR: No matching symbol 'SetBloodType' + (74, 3) ERROR: No matching symbol 'SetInvincible' + (75, 3) ERROR: No matching symbol 'SetRace' + (76, 3) ERROR: No matching symbol 'SetMonsterClip' + (77, 3) ERROR: No matching symbol 'SetFly' + (78, 3) ERROR: No matching symbol 'SetGravity' + (79, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (82, 2) INFO: Compiling void MagicDart::setup_dart() + (86, 13) ERROR: No matching symbol 'GetMonsterProperty' + (87, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (88, 25) ERROR: Can't implicitly convert from 'string' to 'const int'. + (88, 25) ERROR: No conversion from 'string' to 'const int' available. + (89, 3) ERROR: No matching symbol 'SetMoveDest' + (90, 28) ERROR: No matching symbol 'SOUND_SHOOT' + (90, 13) ERROR: No matching symbol 'GetOwner' + (93, 2) INFO: Compiling void MagicDart::move_dart() + (111, 36) ERROR: Expected expression value + (111, 36) ERROR: Instead found '' + (128, 2) INFO: Compiling void MagicDart::hit_target() + (132, 23) ERROR: No matching symbol 'getCount' + (138, 2) INFO: Compiling void MagicDart::dmg_target() + (143, 23) ERROR: No matching symbol 'getEnt1' + (147, 23) ERROR: No matching symbol 'getEnt2' + (151, 23) ERROR: No matching symbol 'getEnt3' + (155, 23) ERROR: No matching symbol 'getEnt4' + (159, 23) ERROR: No matching symbol 'getEnt5' + (163, 23) ERROR: No matching symbol 'getEnt6' + (167, 23) ERROR: No matching symbol 'getEnt7' + (171, 23) ERROR: No matching symbol 'getEnt8' + (175, 23) ERROR: No matching symbol 'getEnt9' + (177, 9) ERROR: No matching symbol 'GetRelationship' + (178, 9) ERROR: No matching symbol 'GetEntityIndex' + (179, 7) ERROR: Expression must be of boolean type, instead found 'string' + (181, 19) ERROR: No conversion from 'const string' to 'int' available. + (184, 23) ERROR: No matching symbol 'CHECK_ENT' + (189, 8) ERROR: No matching symbol 'EXIT_SUB' + (190, 3) ERROR: No matching symbol 'XDoDamage' + (191, 3) ERROR: No matching symbol 'Effect' + (194, 2) INFO: Compiling void MagicDart::debug_beam() + (214, 35) ERROR: Expected expression value + (214, 35) ERROR: Instead found '' + (218, 2) INFO: Compiling void MagicDart::fiz_out() + (220, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (224, 27) ERROR: No matching symbol 'SOUND_ZAP1' + (224, 39) ERROR: No matching symbol 'SOUND_ZAP2' + (224, 51) ERROR: No matching symbol 'SOUND_ZAP3' + (225, 13) ERROR: No matching symbol 'GetOwner' + (226, 3) ERROR: No matching symbol 'ClientEvent' + (227, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (230, 2) INFO: Compiling void MagicDart::remove_me() + (232, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (235, 2) INFO: Compiling void MagicDart::remove_me2() + (237, 3) ERROR: No matching symbol 'DeleteEntity' + (244, 2) INFO: Compiling void MagicDart::game_movingto_dest() + (246, 3) ERROR: No matching symbol 'SetAnimMoveSpeed' + (249, 2) INFO: Compiling void MagicDart::game_stopmoving() + (251, 3) ERROR: No matching symbol 'SetAnimMoveSpeed' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\magic_dart_cl.as + (15, 2) INFO: Compiling void MagicDartCl::client_activate() + (17, 14) ERROR: No matching symbol 'param1' + (18, 18) ERROR: No matching symbol 'param2' + (20, 3) ERROR: No matching symbol 'SetCallback' + (22, 3) ERROR: No matching symbol 'ClientEffect' + (30, 2) INFO: Compiling void MagicDartCl::n_sprite() + (32, 3) ERROR: No matching symbol 'ClientEffect' + (33, 3) ERROR: No matching symbol 'ClientEffect' + (34, 3) ERROR: No matching symbol 'ClientEffect' + (35, 3) ERROR: No matching symbol 'ClientEffect' + (36, 3) ERROR: No matching symbol 'ClientEffect' + (37, 3) ERROR: No matching symbol 'ClientEffect' + (38, 3) ERROR: No matching symbol 'ClientEffect' + (39, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching symbol 'ClientEffect' + (45, 2) INFO: Compiling void MagicDartCl::n_sprite_update() + (47, 40) ERROR: Expected expression value + (47, 40) ERROR: Instead found '' + (51, 28) ERROR: Expected expression value + (51, 28) ERROR: Instead found '' + (72, 2) INFO: Compiling void MagicDartCl::remove_me() + (74, 3) ERROR: No matching symbol 'RemoveScript' + (75, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\meteor_deployer.as + (14, 2) INFO: Compiling void MeteorDeployer::OnSpawn() + (16, 3) ERROR: No matching symbol 'SetName' + (17, 3) ERROR: No matching symbol 'LogDebug' + (18, 3) ERROR: No matching symbol 'SetModel' + (19, 3) ERROR: No matching symbol 'SetModelBody' + (20, 3) ERROR: No matching symbol 'SetWidth' + (21, 3) ERROR: No matching symbol 'SetHeight' + (22, 3) ERROR: No matching symbol 'SetSolid' + (23, 3) ERROR: No matching symbol 'SetGravity' + (24, 3) ERROR: No matching symbol 'SetRace' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetNoPush' + (29, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (30, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (33, 2) INFO: Compiling void MeteorDeployer::game_dynamically_created() + (35, 14) ERROR: No matching symbol 'param1' + (36, 18) ERROR: No matching symbol 'param2' + (39, 3) ERROR: No matching symbol 'LogDebug' + (42, 2) INFO: Compiling void MeteorDeployer::nuke_it() + (48, 62) ERROR: Expected expression value + (48, 62) ERROR: Instead found '' + (53, 2) INFO: Compiling void MeteorDeployer::ext_fire_bomb() + (55, 3) ERROR: No matching symbol 'LogDebug' + (56, 8) ERROR: No matching signatures to 'IsValidPlayer(string)' + (56, 8) INFO: Candidates are: + (56, 8) INFO: bool IsValidPlayer(CBasePlayer@) + (56, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (58, 19) ERROR: No matching symbol 'GetSkillLevel' + (59, 4) ERROR: Illegal operation on 'string' + (64, 19) ERROR: No matching symbol 'GetEntityProperty' + (67, 8) ERROR: No matching signatures to 'IsValidPlayer(string)' + (67, 8) INFO: Candidates are: + (67, 8) INFO: bool IsValidPlayer(CBasePlayer@) + (67, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (69, 4) ERROR: No matching symbol 'XDoDamage' + (73, 4) ERROR: No matching symbol 'XDoDamage' + (75, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (78, 2) INFO: Compiling void MeteorDeployer::remove_me() + (80, 3) ERROR: No matching symbol 'DeleteEntity' + (83, 2) INFO: Compiling void MeteorDeployer::game_dodamage() + (85, 3) ERROR: No matching symbol 'LogDebug' + (86, 8) ERROR: No matching symbol 'GetEntityProperty' + (87, 7) ERROR: Illegal operation on this datatype + (89, 23) ERROR: No matching symbol 'param2' + (94, 8) ERROR: No matching symbol 'EXIT_SUB' + (95, 9) ERROR: No matching symbol 'GetRelationship' + (96, 8) ERROR: No matching signatures to 'IsValidPlayer(string)' + (96, 8) INFO: Candidates are: + (96, 8) INFO: bool IsValidPlayer(CBasePlayer@) + (96, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (98, 22) ERROR: No matching symbol 'GetSkillLevel' + (99, 4) ERROR: Illegal operation on 'string' + (103, 22) ERROR: No matching symbol 'GetEntityProperty' + (105, 3) ERROR: No matching symbol 'ApplyEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\npc_acid_cloud.as + (16, 2) INFO: Compiling void NpcAcidCloud::aoe_scan_loop() + (18, 33) ERROR: Expected expression value + (18, 33) ERROR: Instead found '' + (33, 2) INFO: Compiling void NpcPoisonCloud::game_dynamically_created() + (41, 53) ERROR: Expected expression value + (41, 53) ERROR: Instead found '' + (57, 2) INFO: Compiling void NpcPoisonCloud::OnSpawn() + (59, 3) ERROR: No matching symbol 'SetName' + (60, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (63, 2) INFO: Compiling void NpcPoisonCloud::spawn_sound() + (65, 28) ERROR: No matching symbol 'SPAWN_SOUND' + (65, 13) ERROR: No matching symbol 'GetOwner' + (68, 2) INFO: Compiling void NpcPoisonCloud::aoe_affect_target() + (70, 8) ERROR: No matching symbol 'GetEntityProperty' + (71, 3) ERROR: No matching symbol 'ApplyEffect' + (74, 2) INFO: Compiling void NpcPoisonCloud::aoe_end() + (76, 3) ERROR: No matching symbol 'DeleteEntity' + (79, 2) INFO: Compiling void NpcPoisonCloud::client_activate() + (81, 15) ERROR: No matching symbol 'param1' + (83, 21) ERROR: No matching symbol 'param2' + (85, 3) ERROR: No matching symbol 'PARAM3' + (88, 2) INFO: Compiling void NpcPoisonCloud::poison_end_cl() + (91, 3) ERROR: No matching symbol 'RemoveScript' + (94, 2) INFO: Compiling void NpcPoisonCloud::fx_loop() + (96, 7) ERROR: Illegal operation on this datatype + (97, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (101, 2) INFO: Compiling void NpcPoisonCloud::smokes_shoot() + (105, 40) ERROR: Expected expression value + (105, 40) ERROR: Instead found '' + (106, 54) ERROR: Expected expression value + (106, 54) ERROR: Instead found '' + (107, 38) ERROR: Expected expression value + (107, 38) ERROR: Instead found '' + (109, 35) ERROR: Expected expression value + (109, 35) ERROR: Instead found '' + (113, 2) INFO: Compiling void NpcPoisonCloud::setup_smokes() + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (122, 3) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'ClientEffect' + (124, 3) ERROR: No matching symbol 'ClientEffect' + (21, 2) INFO: Compiling void BaseAoe2::OnSpawn() + (23, 8) ERROR: No matching symbol 'AOE_VULNERABLE' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetNoPush' + (28, 3) ERROR: No matching symbol 'SetGravity' + (32, 2) INFO: Compiling void BaseAoe2::game_dynamically_created() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BaseAoe2::aoe_start() + (39, 22) ERROR: No matching symbol 'MY_OWNER' + (41, 16) ERROR: No matching symbol 'MY_OWNER' + (43, 9) ERROR: No matching symbol 'AOE_VULNERABLE' + (45, 4) ERROR: No matching symbol 'SetRace' + (49, 3) ERROR: No matching symbol 'AOE_DURATION' + (52, 2) INFO: Compiling void BaseAoe2::aoe_scan_loop() + (58, 33) ERROR: Expected expression value + (58, 33) ERROR: Instead found '' + (64, 48) ERROR: Expected expression value + (64, 48) ERROR: Instead found '' + (68, 48) ERROR: Expected expression value + (68, 48) ERROR: Instead found '' + (80, 2) INFO: Compiling void BaseAoe2::aoe_affect_targets() + (83, 43) ERROR: Expected expression value + (83, 43) ERROR: Instead found '' + (84, 42) ERROR: Expected expression value + (84, 42) ERROR: Instead found '' + (89, 2) INFO: Compiling void BaseAoe2::game_dodamage() + (92, 42) ERROR: Expected expression value + (92, 42) ERROR: Instead found '' + (102, 2) INFO: Compiling void BaseAoe2::func_filter_targs() + (104, 19) ERROR: No matching symbol 'param1' + (106, 9) ERROR: No matching symbol 'AOE_FRIENDLY' + (108, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (108, 9) INFO: Candidates are: + (108, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (108, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (110, 10) ERROR: No matching signatures to 'IsValidPlayer(string)' + (110, 10) INFO: Candidates are: + (110, 10) INFO: bool IsValidPlayer(CBasePlayer@) + (110, 10) INFO: Rejected due to type mismatch at positional parameter 1 + (112, 10) ERROR: Illegal operation on this datatype + (114, 11) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (118, 22) ERROR: No matching symbol 'GetRelationship' + (121, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (127, 10) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (130, 10) ERROR: No matching symbol 'AOE_AFFECTS_WARY' + (135, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (138, 7) ERROR: No matching symbol 'AOE_SCAN_TYPE' + (140, 41) ERROR: No matching symbol 'GetOwner' + (141, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (141, 23) INFO: Candidates are: + (141, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (141, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (142, 24) ERROR: No matching symbol 'TraceLine' + (146, 8) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (149, 3) WARN: Unreachable code + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\npc_poison_cloud.as + (33, 2) INFO: Compiling void NpcPoisonCloud::game_dynamically_created() + (41, 53) ERROR: Expected expression value + (41, 53) ERROR: Instead found '' + (57, 2) INFO: Compiling void NpcPoisonCloud::OnSpawn() + (59, 3) ERROR: No matching symbol 'SetName' + (60, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (63, 2) INFO: Compiling void NpcPoisonCloud::spawn_sound() + (65, 28) ERROR: No matching symbol 'SPAWN_SOUND' + (65, 13) ERROR: No matching symbol 'GetOwner' + (68, 2) INFO: Compiling void NpcPoisonCloud::aoe_affect_target() + (70, 8) ERROR: No matching symbol 'GetEntityProperty' + (71, 3) ERROR: No matching symbol 'ApplyEffect' + (74, 2) INFO: Compiling void NpcPoisonCloud::aoe_end() + (76, 3) ERROR: No matching symbol 'DeleteEntity' + (79, 2) INFO: Compiling void NpcPoisonCloud::client_activate() + (81, 15) ERROR: No matching symbol 'param1' + (83, 21) ERROR: No matching symbol 'param2' + (85, 3) ERROR: No matching symbol 'PARAM3' + (88, 2) INFO: Compiling void NpcPoisonCloud::poison_end_cl() + (91, 3) ERROR: No matching symbol 'RemoveScript' + (94, 2) INFO: Compiling void NpcPoisonCloud::fx_loop() + (96, 7) ERROR: Illegal operation on this datatype + (97, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (101, 2) INFO: Compiling void NpcPoisonCloud::smokes_shoot() + (105, 40) ERROR: Expected expression value + (105, 40) ERROR: Instead found '' + (106, 54) ERROR: Expected expression value + (106, 54) ERROR: Instead found '' + (107, 38) ERROR: Expected expression value + (107, 38) ERROR: Instead found '' + (109, 35) ERROR: Expected expression value + (109, 35) ERROR: Instead found '' + (113, 2) INFO: Compiling void NpcPoisonCloud::setup_smokes() + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (122, 3) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'ClientEffect' + (124, 3) ERROR: No matching symbol 'ClientEffect' + (21, 2) INFO: Compiling void BaseAoe2::OnSpawn() + (23, 8) ERROR: No matching symbol 'AOE_VULNERABLE' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetNoPush' + (28, 3) ERROR: No matching symbol 'SetGravity' + (32, 2) INFO: Compiling void BaseAoe2::game_dynamically_created() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BaseAoe2::aoe_start() + (39, 22) ERROR: No matching symbol 'MY_OWNER' + (41, 16) ERROR: No matching symbol 'MY_OWNER' + (43, 9) ERROR: No matching symbol 'AOE_VULNERABLE' + (45, 4) ERROR: No matching symbol 'SetRace' + (49, 3) ERROR: No matching symbol 'AOE_DURATION' + (52, 2) INFO: Compiling void BaseAoe2::aoe_scan_loop() + (58, 33) ERROR: Expected expression value + (58, 33) ERROR: Instead found '' + (64, 48) ERROR: Expected expression value + (64, 48) ERROR: Instead found '' + (68, 48) ERROR: Expected expression value + (68, 48) ERROR: Instead found '' + (80, 2) INFO: Compiling void BaseAoe2::aoe_affect_targets() + (83, 43) ERROR: Expected expression value + (83, 43) ERROR: Instead found '' + (84, 42) ERROR: Expected expression value + (84, 42) ERROR: Instead found '' + (89, 2) INFO: Compiling void BaseAoe2::game_dodamage() + (92, 42) ERROR: Expected expression value + (92, 42) ERROR: Instead found '' + (102, 2) INFO: Compiling void BaseAoe2::func_filter_targs() + (104, 19) ERROR: No matching symbol 'param1' + (106, 9) ERROR: No matching symbol 'AOE_FRIENDLY' + (108, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (108, 9) INFO: Candidates are: + (108, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (108, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (110, 10) ERROR: No matching signatures to 'IsValidPlayer(string)' + (110, 10) INFO: Candidates are: + (110, 10) INFO: bool IsValidPlayer(CBasePlayer@) + (110, 10) INFO: Rejected due to type mismatch at positional parameter 1 + (112, 10) ERROR: Illegal operation on this datatype + (114, 11) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (118, 22) ERROR: No matching symbol 'GetRelationship' + (121, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (127, 10) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (130, 10) ERROR: No matching symbol 'AOE_AFFECTS_WARY' + (135, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (138, 7) ERROR: No matching symbol 'AOE_SCAN_TYPE' + (140, 41) ERROR: No matching symbol 'GetOwner' + (141, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (141, 23) INFO: Candidates are: + (141, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (141, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (142, 24) ERROR: No matching symbol 'TraceLine' + (146, 8) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (149, 3) WARN: Unreachable code + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\npc_poison_cloud2.as + (17, 2) INFO: Compiling NpcPoisonCloud2::NpcPoisonCloud2() + (20, 3) ERROR: No matching symbol 'Precache' + (23, 2) INFO: Compiling void NpcPoisonCloud2::OnSpawn() + (25, 3) ERROR: No matching symbol 'SetName' + (26, 3) ERROR: No matching symbol 'SetNoPush' + (27, 3) ERROR: No matching symbol 'SetInvincible' + (29, 3) ERROR: No matching symbol 'SetWidth' + (30, 3) ERROR: No matching symbol 'SetHeight' + (31, 3) ERROR: No matching symbol 'SetModel' + (32, 3) ERROR: No matching symbol 'SetSolid' + (35, 2) INFO: Compiling void NpcPoisonCloud2::game_dynamically_created() + (37, 14) ERROR: No matching symbol 'param1' + (38, 16) ERROR: No matching symbol 'param2' + (39, 17) ERROR: No matching symbol 'param3' + (40, 16) ERROR: No matching symbol 'param4' + (45, 3) ERROR: No matching symbol 'LogDebug' + (46, 3) ERROR: No matching symbol 'SetRace' + (49, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (51, 3) ERROR: No matching signatures to 'string::MY_DURATION(const string)' + (54, 2) INFO: Compiling void NpcPoisonCloud2::cl_effects() + (56, 34) ERROR: No matching symbol 'GetOwner' + (58, 3) ERROR: No matching symbol 'ClientEvent' + (61, 2) INFO: Compiling void NpcPoisonCloud2::do_scan() + (63, 7) ERROR: Illegal operation on this datatype + (64, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (65, 34) ERROR: No matching symbol 'GetOwner' + (67, 16) ERROR: No matching symbol 'FindEntitiesInSphere' + (69, 23) ERROR: No matching symbol 'GetTokenCount' + (75, 2) INFO: Compiling void NpcPoisonCloud2::poison_targets() + (77, 21) ERROR: No matching symbol 'GetToken' + (78, 18) ERROR: No conversion from 'string' to 'int' available. + (80, 4) ERROR: No matching symbol 'ApplyEffect' + (82, 18) ERROR: No conversion from 'string' to 'int' available. + (84, 4) ERROR: No matching symbol 'ApplyEffect' + (86, 18) ERROR: No conversion from 'string' to 'int' available. + (88, 4) ERROR: No matching symbol 'ApplyEffect' + (92, 2) INFO: Compiling void NpcPoisonCloud2::remove_me() + (95, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\npc_poison_cloud2_cl.as + (12, 2) INFO: Compiling void NpcPoisonCloud2Cl::client_activate() + (14, 15) ERROR: No matching symbol 'param1' + (16, 24) ERROR: No matching symbol 'param2' + (17, 26) ERROR: No matching symbol 'param3' + (18, 21) ERROR: No conversion from 'string' to 'int' available. + (20, 15) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (22, 21) ERROR: No conversion from 'string' to 'int' available. + (24, 15) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (26, 21) ERROR: No conversion from 'string' to 'int' available. + (28, 15) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (30, 3) ERROR: No matching symbol 'LogDebug' + (33, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (36, 2) INFO: Compiling void NpcPoisonCloud2Cl::do_smokes() + (38, 7) ERROR: Illegal operation on this datatype + (39, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (46, 2) INFO: Compiling void NpcPoisonCloud2Cl::do_smokes_loop() + (51, 3) ERROR: No matching symbol 'ClientEffect' + (54, 2) INFO: Compiling void NpcPoisonCloud2Cl::end_fx() + (57, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (60, 2) INFO: Compiling void NpcPoisonCloud2Cl::remove_fx() + (62, 3) ERROR: No matching symbol 'RemoveScript' + (65, 2) INFO: Compiling void NpcPoisonCloud2Cl::setup_smokes() + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\npc_poison_cloud_old.as + (146, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\npc_spore_cloud.as + (33, 2) INFO: Compiling void NpcPoisonCloud::game_dynamically_created() + (41, 53) ERROR: Expected expression value + (41, 53) ERROR: Instead found '' + (57, 2) INFO: Compiling void NpcPoisonCloud::OnSpawn() + (59, 3) ERROR: No matching symbol 'SetName' + (60, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (63, 2) INFO: Compiling void NpcPoisonCloud::spawn_sound() + (65, 28) ERROR: No matching symbol 'SPAWN_SOUND' + (65, 13) ERROR: No matching symbol 'GetOwner' + (68, 2) INFO: Compiling void NpcPoisonCloud::aoe_affect_target() + (70, 8) ERROR: No matching symbol 'GetEntityProperty' + (71, 3) ERROR: No matching symbol 'ApplyEffect' + (74, 2) INFO: Compiling void NpcPoisonCloud::aoe_end() + (76, 3) ERROR: No matching symbol 'DeleteEntity' + (79, 2) INFO: Compiling void NpcPoisonCloud::client_activate() + (81, 15) ERROR: No matching symbol 'param1' + (83, 21) ERROR: No matching symbol 'param2' + (85, 3) ERROR: No matching symbol 'PARAM3' + (88, 2) INFO: Compiling void NpcPoisonCloud::poison_end_cl() + (91, 3) ERROR: No matching symbol 'RemoveScript' + (94, 2) INFO: Compiling void NpcPoisonCloud::fx_loop() + (96, 7) ERROR: Illegal operation on this datatype + (97, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (101, 2) INFO: Compiling void NpcPoisonCloud::smokes_shoot() + (105, 40) ERROR: Expected expression value + (105, 40) ERROR: Instead found '' + (106, 54) ERROR: Expected expression value + (106, 54) ERROR: Instead found '' + (107, 38) ERROR: Expected expression value + (107, 38) ERROR: Instead found '' + (109, 35) ERROR: Expected expression value + (109, 35) ERROR: Instead found '' + (113, 2) INFO: Compiling void NpcPoisonCloud::setup_smokes() + (115, 3) ERROR: No matching symbol 'ClientEffect' + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (120, 3) ERROR: No matching symbol 'ClientEffect' + (121, 3) ERROR: No matching symbol 'ClientEffect' + (122, 3) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'ClientEffect' + (124, 3) ERROR: No matching symbol 'ClientEffect' + (21, 2) INFO: Compiling void BaseAoe2::OnSpawn() + (23, 8) ERROR: No matching symbol 'AOE_VULNERABLE' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetNoPush' + (28, 3) ERROR: No matching symbol 'SetGravity' + (32, 2) INFO: Compiling void BaseAoe2::game_dynamically_created() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BaseAoe2::aoe_start() + (39, 22) ERROR: No matching symbol 'MY_OWNER' + (41, 16) ERROR: No matching symbol 'MY_OWNER' + (43, 9) ERROR: No matching symbol 'AOE_VULNERABLE' + (45, 4) ERROR: No matching symbol 'SetRace' + (49, 3) ERROR: No matching symbol 'AOE_DURATION' + (52, 2) INFO: Compiling void BaseAoe2::aoe_scan_loop() + (58, 33) ERROR: Expected expression value + (58, 33) ERROR: Instead found '' + (64, 48) ERROR: Expected expression value + (64, 48) ERROR: Instead found '' + (68, 48) ERROR: Expected expression value + (68, 48) ERROR: Instead found '' + (80, 2) INFO: Compiling void BaseAoe2::aoe_affect_targets() + (83, 43) ERROR: Expected expression value + (83, 43) ERROR: Instead found '' + (84, 42) ERROR: Expected expression value + (84, 42) ERROR: Instead found '' + (89, 2) INFO: Compiling void BaseAoe2::game_dodamage() + (92, 42) ERROR: Expected expression value + (92, 42) ERROR: Instead found '' + (102, 2) INFO: Compiling void BaseAoe2::func_filter_targs() + (104, 19) ERROR: No matching symbol 'param1' + (106, 9) ERROR: No matching symbol 'AOE_FRIENDLY' + (108, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (108, 9) INFO: Candidates are: + (108, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (108, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (110, 10) ERROR: No matching signatures to 'IsValidPlayer(string)' + (110, 10) INFO: Candidates are: + (110, 10) INFO: bool IsValidPlayer(CBasePlayer@) + (110, 10) INFO: Rejected due to type mismatch at positional parameter 1 + (112, 10) ERROR: Illegal operation on this datatype + (114, 11) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (118, 22) ERROR: No matching symbol 'GetRelationship' + (121, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (127, 10) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (130, 10) ERROR: No matching symbol 'AOE_AFFECTS_WARY' + (135, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (138, 7) ERROR: No matching symbol 'AOE_SCAN_TYPE' + (140, 41) ERROR: No matching symbol 'GetOwner' + (141, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (141, 23) INFO: Candidates are: + (141, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (141, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (142, 24) ERROR: No matching symbol 'TraceLine' + (146, 8) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (149, 3) WARN: Unreachable code + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\npc_volcano.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\poison_burst.as + (18, 2) INFO: Compiling void PoisonBurst::game_dynamically_created() + (20, 14) ERROR: No matching symbol 'param1' + (21, 34) ERROR: No matching symbol 'param1' + (22, 16) ERROR: No matching symbol 'param2' + (23, 7) ERROR: No matching symbol 'param3' + (25, 20) ERROR: No matching symbol 'param3' + (27, 20) ERROR: No matching symbol 'param4' + (28, 12) ERROR: No matching symbol 'param5' + (29, 3) ERROR: No matching symbol 'SetAngles' + (30, 3) ERROR: No matching symbol 'SetRace' + (31, 3) ERROR: No matching symbol 'ClientEvent' + (33, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void PoisonBurst::do_aoe() + (40, 33) ERROR: Expected expression value + (40, 33) ERROR: Instead found '' + (43, 2) INFO: Compiling void PoisonBurst::OnSpawn() + (45, 3) ERROR: No matching symbol 'SetFly' + (46, 3) ERROR: No matching symbol 'SetGravity' + (47, 3) ERROR: No matching symbol 'SetNoPush' + (48, 3) ERROR: No matching symbol 'SetInvincible' + (52, 2) INFO: Compiling void PoisonBurst::effect_die() + (54, 3) ERROR: No matching symbol 'ClientEvent' + (55, 3) ERROR: No matching symbol 'DeleteEntity' + (58, 2) INFO: Compiling void PoisonBurst::set_targets() + (60, 13) ERROR: No matching symbol 'GetOwner' + (61, 15) ERROR: No matching symbol 'FindEntitiesInSphere' + (63, 23) ERROR: No matching symbol 'GetTokenCount' + (69, 2) INFO: Compiling void PoisonBurst::affect_targets() + (89, 41) ERROR: Expected expression value + (89, 41) ERROR: Instead found '' + (91, 46) ERROR: Expected expression value + (91, 46) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\poison_burst_cl.as + (12, 2) INFO: Compiling void PoisonBurstCl::client_activate() + (17, 15) ERROR: No matching symbol 'param1' + (18, 15) ERROR: No matching symbol 'param2' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void PoisonBurstCl::remove_me_cl() + (28, 3) ERROR: No matching symbol 'RemoveScript' + (31, 2) INFO: Compiling void PoisonBurstCl::create_flames() + (34, 36) ERROR: Expected expression value + (34, 36) ERROR: Instead found '' + (39, 2) INFO: Compiling void PoisonBurstCl::setup_flame() + (59, 43) ERROR: Expected expression value + (59, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\poison_cloud.as + (201, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\poison_cloud2.as + (23, 2) INFO: Compiling void PoisonCloud2::game_precache() + (25, 3) ERROR: No matching symbol 'Precache' + (26, 3) ERROR: No matching symbol 'Precache' + (29, 2) INFO: Compiling void PoisonCloud2::game_dynamically_created() + (31, 15) ERROR: No matching symbol 'param1' + (32, 16) ERROR: No matching symbol 'param2' + (33, 14) ERROR: No matching symbol 'param3' + (34, 18) ERROR: No matching symbol 'param4' + (35, 18) ERROR: No matching symbol 'param5' + (37, 32) ERROR: No matching symbol 'PARAM' + (41, 3) ERROR: No matching symbol 'ClientEvent' + (44, 2) INFO: Compiling void PoisonCloud2::aoe_end() + (46, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 2) INFO: Compiling void PoisonCloud2::remove_me() + (51, 3) ERROR: No matching symbol 'DeleteEntity' + (54, 2) INFO: Compiling void PoisonCloud2::aoe_affect_target() + (56, 3) ERROR: No matching symbol 'ApplyEffect' + (21, 2) INFO: Compiling void BaseAoe2::OnSpawn() + (23, 8) ERROR: No matching symbol 'AOE_VULNERABLE' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetRace' + (27, 3) ERROR: No matching symbol 'SetNoPush' + (28, 3) ERROR: No matching symbol 'SetGravity' + (32, 2) INFO: Compiling void BaseAoe2::game_dynamically_created() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BaseAoe2::aoe_start() + (39, 22) ERROR: No matching symbol 'MY_OWNER' + (41, 16) ERROR: No matching symbol 'MY_OWNER' + (43, 9) ERROR: No matching symbol 'AOE_VULNERABLE' + (45, 4) ERROR: No matching symbol 'SetRace' + (49, 3) ERROR: No matching symbol 'AOE_DURATION' + (52, 2) INFO: Compiling void BaseAoe2::aoe_scan_loop() + (58, 33) ERROR: Expected expression value + (58, 33) ERROR: Instead found '' + (64, 48) ERROR: Expected expression value + (64, 48) ERROR: Instead found '' + (68, 48) ERROR: Expected expression value + (68, 48) ERROR: Instead found '' + (80, 2) INFO: Compiling void BaseAoe2::aoe_affect_targets() + (83, 43) ERROR: Expected expression value + (83, 43) ERROR: Instead found '' + (84, 42) ERROR: Expected expression value + (84, 42) ERROR: Instead found '' + (89, 2) INFO: Compiling void BaseAoe2::game_dodamage() + (92, 42) ERROR: Expected expression value + (92, 42) ERROR: Instead found '' + (102, 2) INFO: Compiling void BaseAoe2::func_filter_targs() + (104, 19) ERROR: No matching symbol 'param1' + (106, 9) ERROR: No matching symbol 'AOE_FRIENDLY' + (108, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (108, 9) INFO: Candidates are: + (108, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (108, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (110, 10) ERROR: No matching signatures to 'IsValidPlayer(string)' + (110, 10) INFO: Candidates are: + (110, 10) INFO: bool IsValidPlayer(CBasePlayer@) + (110, 10) INFO: Rejected due to type mismatch at positional parameter 1 + (112, 10) ERROR: Illegal operation on this datatype + (114, 11) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (118, 22) ERROR: No matching symbol 'GetRelationship' + (121, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (127, 10) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (130, 10) ERROR: No matching symbol 'AOE_AFFECTS_WARY' + (135, 9) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (138, 7) ERROR: No matching symbol 'AOE_SCAN_TYPE' + (140, 41) ERROR: No matching symbol 'GetOwner' + (141, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (141, 23) INFO: Candidates are: + (141, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (141, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (142, 24) ERROR: No matching symbol 'TraceLine' + (146, 8) WARN: Variable 'L_DO_EFFECT' hides another variable of same name in outer scope + (149, 3) WARN: Unreachable code + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\preset_volcano.as + (22, 2) INFO: Compiling SummonVolcano::SummonVolcano() + (33, 16) ERROR: 'MODEL_WORLD' is already declared + (44, 2) INFO: Compiling void SummonVolcano::OnRepeatTimer() + (46, 3) ERROR: No matching symbol 'SetRepeatDelay' + (47, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (50, 4) ERROR: No matching symbol 'ClientEffect' + (55, 4) ERROR: No matching symbol 'ClientEffect' + (59, 2) INFO: Compiling void SummonVolcano::game_precache() + (61, 3) ERROR: No matching symbol 'Precache' + (64, 2) INFO: Compiling void SummonVolcano::OnSpawn() + (78, 45) ERROR: Expected expression value + (78, 45) ERROR: Instead found '' + (81, 2) INFO: Compiling void SummonVolcano::game_dynamically_created() + (83, 14) ERROR: No matching symbol 'param1' + (84, 18) ERROR: No matching symbol 'param2' + (86, 21) ERROR: No matching symbol 'param3' + (87, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (87, 20) INFO: Candidates are: + (87, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (87, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (88, 3) ERROR: No matching symbol 'ClientEvent' + (90, 3) ERROR: No matching signatures to 'string::EFFECT_DURATION(const string)' + (93, 2) INFO: Compiling void SummonVolcano::volcano_start() + (96, 3) ERROR: No matching symbol 'ClientEvent' + (101, 2) INFO: Compiling void SummonVolcano::aoe_loop() + (103, 7) ERROR: Illegal operation on this datatype + (105, 3) ERROR: No matching symbol 'XDoDamage' + (106, 3) ERROR: No matching symbol 'AOE_FREQ' + (109, 2) INFO: Compiling void SummonVolcano::fireball_loop() + (111, 7) ERROR: Illegal operation on this datatype + (119, 42) ERROR: No matching symbol 'FORCE_OFFSET' + (120, 3) ERROR: No matching symbol 'CallExternal' + (121, 38) ERROR: No matching symbol 'SOUND_SHOOT' + (121, 25) ERROR: No matching symbol 'CHAN_WEAPON' + (121, 13) ERROR: No matching symbol 'GetOwner' + (122, 3) ERROR: No matching symbol 'FIREBALL_FREQ' + (125, 2) INFO: Compiling void SummonVolcano::volcano_dodamage() + (127, 21) ERROR: No matching symbol 'param2' + (128, 18) ERROR: No matching symbol 'param6' + (129, 9) ERROR: No matching symbol 'param1' + (130, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (130, 9) INFO: Candidates are: + (130, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (130, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (131, 15) ERROR: No conversion from 'string' to 'int' available. + (132, 23) ERROR: No matching symbol 'GetSkillLevel' + (133, 3) ERROR: Illegal operation on 'string' + (134, 3) ERROR: No matching symbol 'ApplyEffect' + (137, 2) INFO: Compiling void SummonVolcano::volcano_off() + (140, 3) ERROR: No matching symbol 'PlayAnim' + (141, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (144, 2) INFO: Compiling void SummonVolcano::volcano_die() + (146, 3) ERROR: No matching symbol 'ClientEvent' + (147, 3) ERROR: No matching symbol 'DeleteEntity' + (150, 2) INFO: Compiling void SummonVolcano::client_activate() + (152, 15) ERROR: No matching symbol 'param1' + (153, 17) ERROR: No matching symbol 'param2' + (155, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (158, 3) ERROR: No matching symbol 'EmitSound3D' + (161, 2) INFO: Compiling void SummonVolcano::fx_start() + (165, 68) ERROR: Expected expression value + (165, 68) ERROR: Instead found '' + (171, 2) INFO: Compiling void SummonVolcano::loop_sfx() + (173, 7) ERROR: Illegal operation on this datatype + (175, 3) ERROR: No matching symbol 'EmitSound3D' + (176, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (179, 2) INFO: Compiling void SummonVolcano::volcano_fire_create() + (181, 3) ERROR: No matching symbol 'ClientEffect' + (182, 3) ERROR: No matching symbol 'ClientEffect' + (183, 3) ERROR: No matching symbol 'ClientEffect' + (184, 3) ERROR: No matching symbol 'ClientEffect' + (185, 3) ERROR: No matching symbol 'ClientEffect' + (186, 3) ERROR: No matching symbol 'ClientEffect' + (187, 3) ERROR: No matching symbol 'ClientEffect' + (188, 3) ERROR: No matching symbol 'ClientEffect' + (191, 2) INFO: Compiling void SummonVolcano::setup_flame_circle() + (193, 3) ERROR: No matching symbol 'ClientEffect' + (194, 3) ERROR: No matching symbol 'ClientEffect' + (195, 3) ERROR: No matching symbol 'ClientEffect' + (196, 3) ERROR: No matching symbol 'ClientEffect' + (197, 3) ERROR: No matching symbol 'ClientEffect' + (198, 3) ERROR: No matching symbol 'ClientEffect' + (199, 3) ERROR: No matching symbol 'ClientEffect' + (200, 3) ERROR: No matching symbol 'ClientEffect' + (201, 3) ERROR: No matching symbol 'ClientEffect' + (202, 3) ERROR: No matching symbol 'ClientEffect' + (203, 3) ERROR: No matching symbol 'ClientEffect' + (204, 3) ERROR: No matching symbol 'ClientEffect' + (207, 2) INFO: Compiling void SummonVolcano::update_flame_circle() + (211, 77) ERROR: Expected expression value + (211, 77) ERROR: Instead found '' + (219, 2) INFO: Compiling void SummonVolcano::setup_smoke() + (221, 3) ERROR: No matching symbol 'ClientEffect' + (222, 3) ERROR: No matching symbol 'ClientEffect' + (223, 3) ERROR: No matching symbol 'ClientEffect' + (224, 3) ERROR: No matching symbol 'ClientEffect' + (225, 3) ERROR: No matching symbol 'ClientEffect' + (226, 3) ERROR: No matching symbol 'ClientEffect' + (227, 3) ERROR: No matching symbol 'ClientEffect' + (228, 3) ERROR: No matching symbol 'ClientEffect' + (229, 3) ERROR: No matching symbol 'ClientEffect' + (230, 3) ERROR: No matching symbol 'ClientEffect' + (233, 2) INFO: Compiling void SummonVolcano::update_smoke() + (241, 4) ERROR: No matching symbol 'ClientEffect' + (242, 4) ERROR: No matching symbol 'ClientEffect' + (243, 4) ERROR: No matching symbol 'ClientEffect' + (247, 2) INFO: Compiling void SummonVolcano::fx_end() + (252, 3) ERROR: No matching symbol 'EmitSound3D' + (253, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (256, 2) INFO: Compiling void SummonVolcano::fx_die() + (258, 3) ERROR: No matching symbol 'RemoveScript' + (261, 2) INFO: Compiling void SummonVolcano::func_rockspawn() + (269, 41) ERROR: Expected expression value + (269, 41) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\rat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\rock.as + (16, 2) INFO: Compiling void Rock::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetSolid' + (19, 3) ERROR: No matching symbol 'SetModel' + (20, 7) ERROR: Illegal operation on this datatype + (22, 4) ERROR: No matching symbol 'SetModelBody' + (26, 4) ERROR: No matching symbol 'SetModelBody' + (27, 4) ERROR: No matching symbol 'Effect' + (29, 3) ERROR: No matching symbol 'SetFly' + (30, 3) ERROR: No matching symbol 'SetGravity' + (31, 3) ERROR: No matching symbol 'SetMoveSpeed' + (32, 3) ERROR: No matching symbol 'SetRoam' + (33, 3) ERROR: No matching symbol 'SetInvincible' + (36, 2) INFO: Compiling void Rock::game_dynamically_created() + (38, 3) ERROR: No matching symbol 'SetRace' + (39, 23) ERROR: No matching symbol 'param1' + (41, 4) ERROR: No matching symbol 'StoreEntity' + (43, 16) ERROR: No matching symbol 'param1' + (44, 7) ERROR: No matching symbol 'param2' + (46, 4) ERROR: No matching symbol 'SetModelBody' + (47, 4) ERROR: No matching symbol 'Effect' + (52, 2) INFO: Compiling void Rock::toss_rock() + (54, 3) ERROR: No matching symbol 'SetProp' + (55, 3) ERROR: No matching symbol 'SetProp' + (56, 22) ERROR: No matching symbol 'param1' + (57, 24) ERROR: No matching symbol 'param2' + (58, 7) ERROR: Illegal operation on this datatype + (60, 4) ERROR: No matching symbol 'TossProjectile' + (64, 4) ERROR: No matching symbol 'TossProjectile' + (66, 3) ERROR: No matching symbol 'CallExternal' + (67, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (70, 2) INFO: Compiling void Rock::remove_me() + (72, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\rock_storm.as + (51, 2) INFO: Compiling void RockStorm::OnSpawn() + (53, 3) ERROR: No matching symbol 'SetModel' + (54, 3) ERROR: No matching symbol 'SetInvincible' + (55, 3) ERROR: No matching symbol 'SetNoPush' + (56, 3) ERROR: No matching symbol 'SetWidth' + (57, 3) ERROR: No matching symbol 'SetHeight' + (58, 3) ERROR: No matching symbol 'SetSolid' + (62, 2) INFO: Compiling void RockStorm::game_dynamically_created() + (69, 49) ERROR: Expected expression value + (69, 49) ERROR: Instead found '' + (99, 2) INFO: Compiling void RockStorm::rocks_begin() + (104, 39) ERROR: Expected expression value + (104, 39) ERROR: Instead found '' + (121, 45) ERROR: Expected expression value + (121, 45) ERROR: Instead found '' + (127, 2) INFO: Compiling void RockStorm::setup_rockb() + (130, 38) ERROR: Expected expression value + (130, 38) ERROR: Instead found '' + (135, 2) INFO: Compiling void RockStorm::setup_rockc() + (138, 38) ERROR: Expected expression value + (138, 38) ERROR: Instead found '' + (143, 2) INFO: Compiling void RockStorm::setup_rockd() + (146, 38) ERROR: Expected expression value + (146, 38) ERROR: Instead found '' + (151, 2) INFO: Compiling void RockStorm::levitate_noise() + (153, 28) ERROR: No matching symbol 'SOUND_LEVITATE' + (153, 13) ERROR: No matching symbol 'GetOwner' + (156, 2) INFO: Compiling void RockStorm::rocks_raise() + (219, 37) ERROR: Expected expression value + (219, 37) ERROR: Instead found '' + (231, 37) ERROR: Expected expression value + (231, 37) ERROR: Instead found '' + (243, 37) ERROR: Expected expression value + (243, 37) ERROR: Instead found '' + (255, 37) ERROR: Expected expression value + (255, 37) ERROR: Instead found '' + (260, 2) INFO: Compiling void RockStorm::spin_noise() + (262, 28) ERROR: No matching symbol 'SOUND_SPIN' + (262, 13) ERROR: No matching symbol 'GetOwner' + (264, 3) ERROR: No matching symbol 'DUR_SPIN' + (267, 2) INFO: Compiling void RockStorm::rocks_spin() + (289, 37) ERROR: Expected expression value + (289, 37) ERROR: Instead found '' + (301, 37) ERROR: Expected expression value + (301, 37) ERROR: Instead found '' + (313, 37) ERROR: Expected expression value + (313, 37) ERROR: Instead found '' + (325, 37) ERROR: Expected expression value + (325, 37) ERROR: Instead found '' + (330, 2) INFO: Compiling void RockStorm::find_targets() + (332, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (332, 8) INFO: Candidates are: + (332, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (332, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (334, 18) ERROR: No matching symbol 'FindEntitiesInSphere' + (335, 3) ERROR: No matching symbol 'ScrambleTokens' + (336, 23) ERROR: No matching symbol 'GetTokenCount' + (342, 2) INFO: Compiling void RockStorm::pick_target() + (344, 20) ERROR: No matching symbol 'GetToken' + (345, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (345, 9) INFO: Candidates are: + (345, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (345, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (346, 9) ERROR: No matching symbol 'GetRelationship' + (348, 3) ERROR: No matching symbol 'LogDebug' + (351, 2) INFO: Compiling void RockStorm::rocka_throw() + (356, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (356, 23) INFO: Candidates are: + (356, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (356, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (357, 22) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (357, 22) INFO: Candidates are: + (357, 22) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (357, 22) INFO: Rejected due to type mismatch at positional parameter 1 + (358, 23) ERROR: No matching symbol 'TraceLine' + (361, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (366, 4) ERROR: No matching symbol 'CallExternal' + (370, 2) INFO: Compiling void RockStorm::rockb_throw() + (375, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (375, 23) INFO: Candidates are: + (375, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (375, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (376, 22) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (376, 22) INFO: Candidates are: + (376, 22) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (376, 22) INFO: Rejected due to type mismatch at positional parameter 1 + (377, 23) ERROR: No matching symbol 'TraceLine' + (382, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (387, 4) ERROR: No matching symbol 'CallExternal' + (391, 2) INFO: Compiling void RockStorm::rockc_throw() + (396, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (396, 23) INFO: Candidates are: + (396, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (396, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (397, 22) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (397, 22) INFO: Candidates are: + (397, 22) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (397, 22) INFO: Rejected due to type mismatch at positional parameter 1 + (398, 23) ERROR: No matching symbol 'TraceLine' + (403, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (408, 4) ERROR: No matching symbol 'CallExternal' + (412, 2) INFO: Compiling void RockStorm::rockd_throw() + (417, 23) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (417, 23) INFO: Candidates are: + (417, 23) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (417, 23) INFO: Rejected due to type mismatch at positional parameter 1 + (418, 22) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (418, 22) INFO: Candidates are: + (418, 22) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (418, 22) INFO: Rejected due to type mismatch at positional parameter 1 + (419, 23) ERROR: No matching symbol 'TraceLine' + (424, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (429, 4) ERROR: No matching symbol 'CallExternal' + (433, 2) INFO: Compiling void RockStorm::force_all_rock_throw() + (436, 18) ERROR: Both operands must be handles when comparing identity + (438, 4) ERROR: No matching symbol 'CallExternal' + (440, 18) ERROR: Both operands must be handles when comparing identity + (442, 4) ERROR: No matching symbol 'CallExternal' + (444, 18) ERROR: Both operands must be handles when comparing identity + (446, 4) ERROR: No matching symbol 'CallExternal' + (448, 18) ERROR: Both operands must be handles when comparing identity + (450, 4) ERROR: No matching symbol 'CallExternal' + (455, 2) INFO: Compiling void RockStorm::remove_me() + (457, 3) ERROR: No matching symbol 'CallExternal' + (458, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (461, 2) INFO: Compiling void RockStorm::remove_me2() + (463, 3) ERROR: No matching symbol 'DeleteEntity' + (466, 2) INFO: Compiling void RockStorm::check_targ() + (468, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (468, 8) INFO: Candidates are: + (468, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (468, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (469, 3) ERROR: No matching symbol 'LogDebug' + (470, 7) ERROR: Expression must be of boolean type, instead found 'string' + (472, 21) ERROR: No matching symbol 'GetEntityProperty' + (474, 7) ERROR: Illegal operation on this datatype + (476, 21) ERROR: No matching symbol 'GetEntityProperty' + (478, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (478, 9) INFO: Candidates are: + (478, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (478, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (480, 21) ERROR: No matching symbol 'GetEntityProperty' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\seal_maker.as + (6, 7) ERROR: Method 'void SealMaker::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\sfx_glassmaker.as + (20, 2) INFO: Compiling void SfxGlassmaker::OnSpawn() + (22, 3) ERROR: No matching symbol 'SetRace' + (23, 3) ERROR: No matching symbol 'SetInvincible' + (24, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (27, 2) INFO: Compiling void SfxGlassmaker::glass_splodie() + (29, 66) ERROR: Expected expression value + (29, 66) ERROR: Instead found '' + (33, 2) INFO: Compiling void SfxGlassmaker::glass_splodie2() + (35, 66) ERROR: Expected expression value + (35, 66) ERROR: Instead found '' + (39, 2) INFO: Compiling void SfxGlassmaker::remove_sploder() + (41, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\sfx_icewave.as + (9, 2) ERROR: Expected method or property + (9, 2) ERROR: Instead found identifier 'string' + (10, 12) ERROR: Expected '(' + (10, 12) ERROR: Instead found '.' + (12, 12) ERROR: Expected identifier + (12, 12) ERROR: Instead found '(' + (78, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\shock_beam.as + (33, 2) INFO: Compiling void ShockBeam::game_dynamically_created() + (35, 14) ERROR: No matching symbol 'param1' + (36, 15) ERROR: No matching symbol 'param2' + (37, 17) ERROR: No matching symbol 'param3' + (38, 15) ERROR: No matching symbol 'param4' + (39, 16) ERROR: No matching symbol 'param5' + (40, 16) ERROR: No matching symbol 'param6' + (41, 34) ERROR: No matching symbol 'param1' + (45, 17) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (52, 3) ERROR: No matching signatures to 'string::F_DURATION(const string)' + (55, 2) INFO: Compiling void ShockBeam::OnSpawn() + (57, 3) ERROR: No matching symbol 'SetInvincible' + (59, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (62, 2) INFO: Compiling void ShockBeam::make_thunder() + (65, 16) ERROR: No matching symbol 'GetMonsterProperty' + (79, 4) ERROR: No matching signatures to 'string::BEAM_DELAY(const string)' + (80, 29) ERROR: No matching symbol 'SOUND_WARNING' + (80, 14) ERROR: No matching symbol 'GetOwner' + (82, 3) ERROR: No matching symbol 'ClientEvent' + (85, 2) INFO: Compiling void ShockBeam::make_lightning() + (87, 28) ERROR: No matching symbol 'SOUND_LIGHTNING' + (87, 13) ERROR: No matching symbol 'GetOwner' + (88, 3) ERROR: No matching symbol 'Effect' + (90, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (94, 2) INFO: Compiling void ShockBeam::more_noise() + (96, 28) ERROR: No matching symbol 'SOUND_THUNDER' + (96, 13) ERROR: No matching symbol 'GetOwner' + (99, 2) INFO: Compiling void ShockBeam::damage_loop() + (102, 32) ERROR: Expected expression value + (102, 32) ERROR: Instead found '' + (106, 2) INFO: Compiling void ShockBeam::game_dodamage() + (108, 16) ERROR: No conversion from 'string' to 'int' available. + (110, 8) ERROR: Expression must be of boolean type, instead found 'string' + (113, 23) ERROR: No matching symbol 'param2' + (118, 8) ERROR: No matching symbol 'EXIT_SUB' + (119, 9) ERROR: No matching symbol 'GetRelationship' + (120, 8) ERROR: No matching symbol 'GetEntityProperty' + (121, 3) ERROR: No matching symbol 'ApplyEffect' + (124, 2) INFO: Compiling void ShockBeam::end_effect() + (127, 3) ERROR: No matching symbol 'ClientEvent' + (128, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (131, 2) INFO: Compiling void ShockBeam::remove_me() + (133, 3) ERROR: No matching symbol 'DeleteEntity' + (136, 2) INFO: Compiling void ShockBeam::client_activate() + (138, 19) ERROR: No matching symbol 'param1' + (139, 18) ERROR: No matching symbol 'param2' + (140, 19) ERROR: No matching symbol 'param3' + (141, 16) ERROR: No matching symbol 'param4' + (142, 3) ERROR: No matching symbol 'ClientEffect' + (143, 3) ERROR: No matching symbol 'ClientEffect' + (144, 3) ERROR: No matching signatures to 'string::CLBEAM_DUR(const string)' + (147, 2) INFO: Compiling void ShockBeam::shock_beam_endsprite() + (149, 3) ERROR: No matching symbol 'ClientEffect' + (150, 3) ERROR: No matching symbol 'ClientEffect' + (151, 3) ERROR: No matching symbol 'ClientEffect' + (152, 3) ERROR: No matching symbol 'ClientEffect' + (153, 3) ERROR: No matching symbol 'ClientEffect' + (154, 3) ERROR: No matching symbol 'ClientEffect' + (155, 3) ERROR: No matching symbol 'ClientEffect' + (156, 3) ERROR: No matching symbol 'ClientEffect' + (157, 3) ERROR: No matching symbol 'ClientEffect' + (158, 3) ERROR: No matching symbol 'ClientEffect' + (161, 2) INFO: Compiling void ShockBeam::remove_cl() + (163, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\shock_burst.as + (29, 2) INFO: Compiling void ShockBurst::game_dynamically_created() + (31, 14) ERROR: No matching symbol 'param1' + (32, 12) ERROR: No matching symbol 'param2' + (33, 15) ERROR: No matching symbol 'param3' + (34, 15) ERROR: No matching symbol 'param4' + (35, 16) ERROR: No matching symbol 'param5' + (36, 16) ERROR: No matching symbol 'param6' + (39, 17) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (45, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (45, 20) INFO: Candidates are: + (45, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (45, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (47, 11) ERROR: No conversion from 'string' to math type available. + (51, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (54, 2) INFO: Compiling void ShockBurst::OnSpawn() + (56, 3) ERROR: No matching symbol 'SetName' + (57, 3) ERROR: No matching symbol 'SetRace' + (58, 3) ERROR: No matching symbol 'SetHealth' + (59, 3) ERROR: No matching symbol 'SetInvincible' + (63, 2) INFO: Compiling void ShockBurst::define_bolts() + (77, 39) ERROR: Expected expression value + (77, 39) ERROR: Instead found '' + (98, 2) INFO: Compiling void ShockBurst::move_bolts() + (100, 7) ERROR: Illegal operation on this datatype + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (105, 21) ERROR: No conversion from 'string' to 'int' available. + (109, 15) ERROR: No conversion from 'string' to 'int' available. + (115, 2) INFO: Compiling void ShockBurst::draw_bolts() + (125, 37) ERROR: Expected expression value + (125, 37) ERROR: Instead found '' + (141, 2) INFO: Compiling void ShockBurst::remove_bolts_loop() + (143, 18) ERROR: No conversion from 'string' to 'int' available. + (145, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (147, 18) ERROR: No conversion from 'string' to 'int' available. + (149, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (151, 27) ERROR: No matching symbol 'GetToken' + (152, 24) ERROR: Both operands must be handles when comparing identity + (154, 4) ERROR: No matching symbol 'DeleteEntity' + (159, 2) INFO: Compiling void ShockBurst::remove_me() + (161, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\shock_burst_child.as + (22, 2) INFO: Compiling void ShockBurstChild::game_dynamically_created() + (24, 15) ERROR: No matching symbol 'param1' + (25, 13) ERROR: No matching symbol 'param2' + (26, 15) ERROR: No matching symbol 'param3' + (28, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (28, 20) INFO: Candidates are: + (28, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (28, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (30, 16) ERROR: No conversion from 'string' to math type available. + (32, 3) ERROR: Expression doesn't form a function call. 'ACTIVE_DELAY' evaluates to the non-function type 'float' + (33, 3) ERROR: No matching symbol 'StoreEntity' + (36, 2) INFO: Compiling void ShockBurstChild::OnSpawn() + (38, 3) ERROR: No matching symbol 'SetName' + (39, 3) ERROR: No matching symbol 'SetRace' + (40, 3) ERROR: No matching symbol 'SetHealth' + (41, 3) ERROR: No matching symbol 'SetInvincible' + (50, 2) INFO: Compiling void ShockBurstChild::scan_loop() + (54, 47) ERROR: Expected expression value + (54, 47) ERROR: Instead found '' + (79, 2) INFO: Compiling void ShockBurstChild::debug_beam() + (99, 35) ERROR: Expected expression value + (99, 35) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\shock_burst_two.as + (33, 2) INFO: Compiling void ShockBurstTwo::game_dynamically_created() + (35, 14) ERROR: No matching symbol 'param1' + (36, 12) ERROR: No matching symbol 'param2' + (37, 15) ERROR: No matching symbol 'param3' + (38, 15) ERROR: No matching symbol 'param4' + (39, 16) ERROR: No matching symbol 'param5' + (40, 16) ERROR: No matching symbol 'param6' + (44, 17) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (50, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (50, 20) INFO: Candidates are: + (50, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (50, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (51, 3) ERROR: No matching symbol 'StoreEntity' + (52, 3) ERROR: No matching symbol 'SetRace' + (54, 11) ERROR: No conversion from 'string' to math type available. + (59, 12) ERROR: No conversion from 'string' to math type available. + (61, 21) ERROR: No conversion from 'string' to 'int' available. + (69, 2) INFO: Compiling void ShockBurstTwo::OnSpawn() + (71, 3) ERROR: No matching symbol 'SetName' + (72, 3) ERROR: No matching symbol 'SetHealth' + (73, 3) ERROR: No matching symbol 'SetInvincible' + (75, 28) ERROR: No matching symbol 'SOUND_THUNDER' + (75, 13) ERROR: No matching symbol 'GetOwner' + (78, 2) INFO: Compiling void ShockBurstTwo::define_bolts() + (80, 7) ERROR: No matching symbol 'BOLT_LIST' + (80, 31) ERROR: No matching symbol 'BOLT_LIST' + (81, 3) ERROR: No matching symbol 'BOLT_LIST' + (85, 2) INFO: Compiling void ShockBurstTwo::rotate_bolts() + (87, 7) ERROR: Illegal operation on this datatype + (88, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (91, 21) ERROR: No conversion from 'string' to 'int' available. + (95, 15) ERROR: No conversion from 'string' to 'int' available. + (101, 2) INFO: Compiling void ShockBurstTwo::draw_bolts() + (107, 37) ERROR: Expected expression value + (107, 37) ERROR: Instead found '' + (111, 40) ERROR: Expected expression value + (111, 40) ERROR: Instead found '' + (115, 2) INFO: Compiling void ShockBurstTwo::end_summon() + (118, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (121, 2) INFO: Compiling void ShockBurstTwo::remove_me() + (123, 3) ERROR: No matching symbol 'DeleteEntity' + (126, 2) INFO: Compiling void ShockBurstTwo::check_targ() + (128, 9) ERROR: No matching symbol 'GetRelationship' + (129, 7) ERROR: Expression must be of boolean type, instead found 'string' + (131, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (131, 9) INFO: Candidates are: + (131, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (131, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (134, 17) ERROR: No conversion from 'string' to 'int' available. + (139, 8) ERROR: No matching symbol 'EXIT_SUB' + (143, 2) INFO: Compiling void ShockBurstTwo::shock_targ() + (145, 3) ERROR: No matching symbol 'ApplyEffect' + (146, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (148, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (149, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\skeleton.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\skeleton_guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\slime_globe.as + (16, 2) INFO: Compiling SlimeGlobe::SlimeGlobe() + (18, 3) ERROR: No matching symbol 'Precache' + (24, 2) INFO: Compiling void SlimeGlobe::OnSpawn() + (26, 3) ERROR: No matching symbol 'SetName' + (27, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'SetNoPush' + (29, 3) ERROR: No matching symbol 'SetGravity' + (30, 3) ERROR: No matching symbol 'SetFly' + (31, 3) ERROR: No matching symbol 'SetModel' + (32, 3) ERROR: No matching symbol 'SetWidth' + (33, 3) ERROR: No matching symbol 'SetHeight' + (35, 3) ERROR: No matching symbol 'SetSolid' + (38, 2) INFO: Compiling void SlimeGlobe::game_dynamically_created() + (40, 3) ERROR: No matching symbol 'LogDebug' + (41, 14) ERROR: No matching symbol 'param1' + (42, 12) ERROR: No matching symbol 'param2' + (43, 3) ERROR: No matching symbol 'SetRace' + (44, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (46, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (47, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 27) ERROR: No matching symbol 'ORBIT_SOUND1' + (49, 41) ERROR: No matching symbol 'ORBIT_SOUND2' + (50, 13) ERROR: No matching symbol 'GetOwner' + (55, 2) INFO: Compiling void SlimeGlobe::setup_cl() + (57, 3) ERROR: No matching symbol 'ClientEvent' + (61, 2) INFO: Compiling void SlimeGlobe::shoot_slime() + (63, 7) ERROR: Illegal operation on this datatype + (64, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (66, 22) ERROR: No matching symbol 'FindEntitiesInSphere' + (68, 3) ERROR: No matching symbol 'ScrambleTokens' + (69, 21) ERROR: No matching symbol 'GetToken' + (71, 3) ERROR: No matching symbol 'SetMoveDest' + (72, 3) ERROR: No matching symbol 'TossProjectile' + (73, 23) ERROR: No conversion from 'string' to 'float' available. + (75, 27) ERROR: No matching symbol 'ORBIT_SOUND1' + (75, 41) ERROR: No matching symbol 'ORBIT_SOUND2' + (76, 13) ERROR: No matching symbol 'GetOwner' + (77, 28) ERROR: No matching symbol 'SOUND_SHOOT' + (77, 13) ERROR: No matching symbol 'GetOwner' + (82, 2) INFO: Compiling void SlimeGlobe::end_slime() + (85, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (88, 2) INFO: Compiling void SlimeGlobe::remove_me() + (90, 3) ERROR: No matching symbol 'DeleteEntity' + (93, 2) INFO: Compiling void SlimeGlobe::ext_glob_landed() + (95, 3) ERROR: No matching symbol 'XDoDamage' + (98, 2) INFO: Compiling void SlimeGlobe::early_remove() + (100, 3) ERROR: No matching symbol 'ClientEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\slime_globe_cl.as + (12, 2) INFO: Compiling void SlimeGlobeCl::client_activate() + (14, 17) ERROR: No matching symbol 'param2' + (17, 3) ERROR: No matching symbol 'LogDebug' + (18, 3) ERROR: No matching symbol 'ClientEffect' + (19, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (22, 2) INFO: Compiling void SlimeGlobeCl::start_shrink() + (24, 3) ERROR: No matching symbol 'LogDebug' + (25, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (28, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (36, 2) INFO: Compiling void SlimeGlobeCl::remove_me() + (38, 3) ERROR: No matching symbol 'RemoveScript' + (41, 2) INFO: Compiling void SlimeGlobeCl::setup_slime_ball() + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (57, 2) INFO: Compiling void SlimeGlobeCl::update_slime_ball() + (59, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (63, 17) ERROR: No conversion from 'string' to 'double' available. + (66, 4) ERROR: No matching symbol 'ClientEffect' + (67, 4) ERROR: No matching symbol 'ClientEffect' + (69, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (72, 4) ERROR: Illegal operation on 'string' + (73, 17) ERROR: No conversion from 'string' to 'int' available. + (76, 4) ERROR: No matching symbol 'ClientEffect' + (77, 4) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\snake_cursed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\sorc_axe.as + (6, 7) ERROR: Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\spiked_ball.as + (6, 7) ERROR: Method 'void SpikedBall::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\stun_burst.as + (17, 2) INFO: Compiling void StunBurst::game_dynamically_created() + (36, 36) ERROR: Expected expression value + (36, 36) ERROR: Instead found '' + (54, 2) INFO: Compiling void StunBurst::effect_die() + (56, 3) ERROR: No matching symbol 'ClientEvent' + (57, 3) ERROR: No matching symbol 'DeleteEntity' + (60, 2) INFO: Compiling void StunBurst::big_boom() + (62, 13) ERROR: No matching symbol 'GetOwner' + (63, 15) ERROR: No matching symbol 'FindEntitiesInSphere' + (65, 23) ERROR: No matching symbol 'GetTokenCount' + (71, 2) INFO: Compiling void StunBurst::affect_targets() + (93, 41) ERROR: Expected expression value + (93, 41) ERROR: Instead found '' + (95, 46) ERROR: Expected expression value + (95, 46) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\stun_burst_cl.as + (12, 2) INFO: Compiling void StunBurstCl::client_activate() + (17, 15) ERROR: No matching symbol 'param1' + (18, 15) ERROR: No matching symbol 'param2' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void StunBurstCl::remove_me_cl() + (28, 3) ERROR: No matching symbol 'RemoveScript' + (31, 2) INFO: Compiling void StunBurstCl::create_flames() + (34, 36) ERROR: Expected expression value + (34, 36) ERROR: Instead found '' + (39, 2) INFO: Compiling void StunBurstCl::setup_flame() + (59, 43) ERROR: Expected expression value + (59, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\summon_blizzard.as + (28, 2) INFO: Compiling SummonBlizzard::SummonBlizzard() + (35, 3) ERROR: No matching symbol 'Precache' + (36, 3) ERROR: No matching symbol 'Precache' + (42, 2) INFO: Compiling void SummonBlizzard::OnRepeatTimer() + (44, 3) ERROR: No matching symbol 'SetRepeatDelay' + (45, 21) ERROR: No matching symbol 'WIDTH' + (46, 3) ERROR: Illegal operation on 'string' + (47, 10) ERROR: 'NEGWIDTH' is already declared + (48, 3) ERROR: Illegal operation on 'string' + (49, 34) ERROR: No matching symbol 'WIDTH' + (50, 34) ERROR: No matching symbol 'WIDTH' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 10) ERROR: 'NEGWIDTH' is already declared + (54, 3) ERROR: Illegal operation on 'string' + (55, 10) ERROR: 'x' is already declared + (56, 10) ERROR: 'y' is already declared + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 10) ERROR: 'NEGWIDTH' is already declared + (60, 3) ERROR: Illegal operation on 'string' + (61, 10) ERROR: 'x' is already declared + (62, 10) ERROR: 'y' is already declared + (64, 3) ERROR: No matching symbol 'ClientEffect' + (72, 2) INFO: Compiling void SummonBlizzard::game_dynamically_created() + (93, 36) ERROR: Expected expression value + (93, 36) ERROR: Instead found '' + (118, 2) INFO: Compiling void SummonBlizzard::OnSpawn() + (120, 3) ERROR: No matching symbol 'SetName' + (121, 3) ERROR: No matching symbol 'SetInvincible' + (122, 3) ERROR: No matching symbol 'SetRace' + (123, 3) ERROR: No matching symbol 'SetModel' + (124, 3) ERROR: No matching symbol 'SetSolid' + (126, 3) ERROR: No matching symbol 'SetNoPush' + (127, 3) ERROR: No matching symbol 'SetGravity' + (128, 3) ERROR: No matching symbol 'SetRoam' + (130, 13) ERROR: No matching symbol 'GetOwner' + (131, 3) ERROR: No matching symbol 'FREQ_NOISE' + (134, 2) INFO: Compiling void SummonBlizzard::do_noise() + (136, 9) ERROR: No matching symbol 'IS_ACTIVE' + (137, 13) ERROR: No matching symbol 'GetOwner' + (138, 3) ERROR: No matching symbol 'FREQ_NOISE' + (141, 2) INFO: Compiling void SummonBlizzard::blizzard_death() + (143, 3) ERROR: No matching symbol 'DeleteEntity' + (146, 2) INFO: Compiling void SummonBlizzard::apply_aoe_effect() + (148, 8) ERROR: No matching symbol 'GetEntityProperty' + (149, 3) ERROR: No matching symbol 'ApplyEffect' + (152, 2) INFO: Compiling void SummonBlizzard::client_activate() + (154, 17) ERROR: No matching symbol 'param1' + (155, 17) ERROR: No matching symbol 'param3' + (156, 30) ERROR: 'z' is not a member of 'string' + (158, 3) ERROR: No matching symbol 'PARAM2' + (159, 31) ERROR: 'z' is not a member of 'string' + (160, 31) ERROR: 'z' is not a member of 'string' + (161, 3) ERROR: Illegal operation on 'string' + (164, 2) INFO: Compiling void SummonBlizzard::blizzard_end_cl() + (166, 3) ERROR: No matching symbol 'RemoveScript' + (169, 2) INFO: Compiling void SummonBlizzard::setup_blizzardflake() + (173, 3) ERROR: No matching symbol 'ClientEffect' + (174, 3) ERROR: No matching symbol 'ClientEffect' + (175, 3) ERROR: No matching symbol 'ClientEffect' + (176, 3) ERROR: No matching symbol 'ClientEffect' + (177, 3) ERROR: No matching symbol 'ClientEffect' + (178, 3) ERROR: No matching symbol 'ClientEffect' + (181, 2) INFO: Compiling void SummonBlizzard::setup_hailshard() + (184, 3) ERROR: No matching symbol 'ClientEffect' + (185, 3) ERROR: No matching symbol 'ClientEffect' + (186, 3) ERROR: No matching symbol 'ClientEffect' + (187, 3) ERROR: No matching symbol 'ClientEffect' + (188, 3) ERROR: No matching symbol 'ClientEffect' + (189, 3) ERROR: No matching symbol 'ClientEffect' + (190, 3) ERROR: No matching symbol 'ClientEffect' + (191, 3) ERROR: No matching symbol 'ClientEffect' + (23, 2) INFO: Compiling void BaseAoe::OnSpawn() + (27, 7) ERROR: No matching symbol 'AOE_FREQ' + (29, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (31, 7) ERROR: No matching symbol 'AOE_DMG_FREQ' + (33, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void BaseAoe::get_skill() + (40, 32) ERROR: No matching symbol 'MY_OWNER' + (41, 7) ERROR: No matching symbol 'ACTIVE_SKILL' + (46, 2) INFO: Compiling void BaseAoe::aoe_scan_loop() + (48, 7) ERROR: Illegal operation on this datatype + (49, 3) ERROR: No matching symbol 'AOE_FREQ' + (53, 2) INFO: Compiling void BaseAoe::aoe_dmg_loop() + (55, 7) ERROR: Illegal operation on this datatype + (56, 3) ERROR: No matching symbol 'AOE_DMG_FREQ' + (60, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad() + (63, 41) ERROR: No matching symbol 'GetOwner' + (65, 16) ERROR: No matching symbol 'FindEntitiesInSphere' + (67, 21) ERROR: No matching symbol 'GetTokenCount' + (68, 18) ERROR: No conversion from 'string' to 'int' available. + (69, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (71, 22) ERROR: No conversion from 'string' to 'int' available. + (76, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (78, 22) ERROR: No conversion from 'string' to 'int' available. + (85, 2) INFO: Compiling void BaseAoe::aoe_apply_loop() + (89, 33) ERROR: Expected expression value + (89, 33) ERROR: Instead found '' + (93, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly() + (95, 23) ERROR: No matching symbol 'GetToken' + (96, 7) ERROR: No matching symbol 'GetRelationship' + (100, 7) ERROR: Expression must be of boolean type, instead found 'string' + (102, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (102, 9) INFO: Candidates are: + (102, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (102, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (107, 9) ERROR: No matching symbol 'DO_EFFECT' + (108, 3) ERROR: No matching symbol 'apply_aoe_effect' + (111, 2) INFO: Compiling void BaseAoe::aoe_dodamage_rad() + (113, 33) ERROR: Expected expression value + (113, 33) ERROR: Instead found '' + (116, 2) INFO: Compiling void BaseAoe::aoe_end() + (119, 7) ERROR: No matching symbol 'MY_SCRIPT_IDX' + (121, 4) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\summon_fire_wall.as + (21, 2) INFO: Compiling SummonFireWall::SummonFireWall() + (25, 3) ERROR: No matching symbol 'Precache' + (30, 2) INFO: Compiling void SummonFireWall::OnRepeatTimer() + (32, 3) ERROR: No matching symbol 'SetRepeatDelay' + (33, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (36, 25) ERROR: No matching symbol 'CHAN_ITEM' + (36, 13) ERROR: No matching symbol 'GetOwner' + (39, 2) INFO: Compiling void SummonFireWall::OnRepeatTimer_1() + (41, 3) ERROR: No matching symbol 'SetRepeatDelay' + (42, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (48, 2) INFO: Compiling void SummonFireWall::OnRepeatTimer_2() + (50, 3) ERROR: No matching symbol 'SetRepeatDelay' + (51, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (57, 2) INFO: Compiling void SummonFireWall::flames_start() + (59, 25) ERROR: No matching symbol 'CHAN_ITEM' + (59, 13) ERROR: No matching symbol 'GetOwner' + (64, 2) INFO: Compiling void SummonFireWall::OnSpawn() + (67, 3) ERROR: No matching symbol 'SetName' + (68, 3) ERROR: No matching symbol 'SetHealth' + (69, 3) ERROR: No matching symbol 'SetInvincible' + (70, 3) ERROR: No matching symbol 'SetRoam' + (71, 3) ERROR: No matching symbol 'SetSkillLevel' + (72, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (73, 3) ERROR: No matching symbol 'SetBloodType' + (74, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (76, 59) ERROR: No matching symbol 'TIME_LIVE' + (76, 41) ERROR: No matching symbol 'GetOwner' + (76, 13) ERROR: No matching symbol 'GetOwner' + (79, 2) INFO: Compiling void SummonFireWall::game_dynamically_created() + (81, 14) ERROR: No matching symbol 'param1' + (82, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (82, 20) INFO: Candidates are: + (82, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (82, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (84, 17) ERROR: No matching symbol 'param3' + (85, 3) ERROR: Illegal operation on 'string' + (86, 19) ERROR: No matching symbol 'param4' + (87, 18) ERROR: No matching symbol 'param5' + (92, 3) ERROR: No matching signatures to 'string::FIRE_DURATION(const string)' + (93, 3) ERROR: No matching symbol 'StoreEntity' + (94, 3) ERROR: No matching symbol 'SetAngles' + (95, 3) ERROR: No matching symbol 'ClientEvent' + (99, 2) INFO: Compiling void SummonFireWall::flames_attack() + (110, 42) ERROR: Expected expression value + (110, 42) ERROR: Instead found '' + (114, 42) ERROR: Expected expression value + (114, 42) ERROR: Instead found '' + (118, 42) ERROR: Expected expression value + (118, 42) ERROR: Instead found '' + (120, 50) ERROR: Expected expression value + (120, 50) ERROR: Instead found '' + (136, 2) INFO: Compiling void SummonFireWall::firewall_death() + (140, 3) ERROR: No matching symbol 'DeleteEntity' + (143, 2) INFO: Compiling void SummonFireWall::client_activate() + (145, 20) ERROR: No matching symbol 'param1' + (146, 28) ERROR: No matching symbol 'param2' + (147, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (148, 3) ERROR: No matching symbol 'TIME_LIVE' + (151, 2) INFO: Compiling void SummonFireWall::firewall_end_cl() + (153, 3) ERROR: No matching symbol 'RemoveScript' + (156, 2) INFO: Compiling void SummonFireWall::flames_shoot() + (162, 38) ERROR: Expected expression value + (162, 38) ERROR: Instead found '' + (171, 38) ERROR: Expected expression value + (171, 38) ERROR: Instead found '' + (180, 38) ERROR: Expected expression value + (180, 38) ERROR: Instead found '' + (189, 2) INFO: Compiling void SummonFireWall::setup_flames() + (191, 3) ERROR: No matching symbol 'ClientEffect' + (192, 3) ERROR: No matching symbol 'ClientEffect' + (193, 3) ERROR: No matching symbol 'ClientEffect' + (194, 3) ERROR: No matching symbol 'ClientEffect' + (195, 3) ERROR: No matching symbol 'ClientEffect' + (196, 3) ERROR: No matching symbol 'ClientEffect' + (197, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\summon_ice_wall.as + (6, 7) ERROR: Method 'void SummonIceWall::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void SummonIceWall::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\summon_lightning_storm.as + (37, 2) INFO: Compiling void SummonLightningStorm::game_precache() + (39, 3) ERROR: No matching symbol 'Precache' + (40, 3) ERROR: No matching symbol 'Precache' + (41, 3) ERROR: No matching symbol 'Precache' + (44, 2) INFO: Compiling void SummonLightningStorm::OnSpawn() + (46, 3) ERROR: No matching symbol 'SetName' + (47, 3) ERROR: No matching symbol 'SetInvincible' + (48, 3) ERROR: No matching symbol 'SetNoPush' + (49, 3) ERROR: No matching symbol 'SetGravity' + (54, 2) INFO: Compiling void SummonLightningStorm::game_dynamically_created() + (64, 32) ERROR: Expected expression value + (64, 32) ERROR: Instead found '' + (72, 54) ERROR: Expected expression value + (72, 54) ERROR: Instead found '' + (80, 2) INFO: Compiling void SummonLightningStorm::do_storm() + (82, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (86, 14) ERROR: No matching symbol 'GetOwner' + (91, 2) INFO: Compiling void SummonLightningStorm::apply_aoe_effect() + (93, 8) ERROR: No matching symbol 'GetEntityProperty' + (96, 8) ERROR: No matching symbol 'GetEntityProperty' + (99, 11) WARN: Variable 'L_ENT' hides another variable of same name in outer scope + (99, 19) ERROR: No matching symbol 'GetEntityProperty' + (101, 3) ERROR: No matching symbol 'ApplyEffect' + (104, 2) INFO: Compiling void SummonLightningStorm::sustain_storm() + (106, 18) ERROR: No matching symbol 'param1' + (107, 19) ERROR: No matching symbol 'GetOwner' + (108, 3) ERROR: No matching symbol 'ClientEvent' + (112, 2) INFO: Compiling void SummonLightningStorm::check_death() + (114, 3) ERROR: No matching symbol 'SetRepeatDelay' + (116, 21) ERROR: No conversion from 'string' to 'float' available. + (118, 8) WARN: Variable 'L_REMOVE' hides another variable of same name in outer scope + (120, 7) ERROR: Expression must be of boolean type, instead found 'int' + (122, 4) ERROR: No matching symbol 'ClientEvent' + (123, 4) ERROR: No matching symbol 'CallExternal' + (124, 4) ERROR: No matching symbol 'DeleteEntity' + (128, 2) INFO: Compiling void SummonLightningStorm::client_activate() + (130, 20) ERROR: No matching symbol 'param1' + (131, 28) ERROR: No matching symbol 'param2' + (132, 14) ERROR: No matching symbol 'param3' + (135, 2) INFO: Compiling void SummonLightningStorm::smokes_shoot() + (140, 38) ERROR: Expected expression value + (140, 38) ERROR: Instead found '' + (146, 2) INFO: Compiling void SummonLightningStorm::cl_pos_update() + (148, 20) ERROR: No matching symbol 'param1' + (149, 15) ERROR: No matching symbol 'param1' + (150, 3) ERROR: Illegal operation on 'string' + (153, 2) INFO: Compiling void SummonLightningStorm::cl_beam() + (155, 26) ERROR: No matching symbol 'param1' + (158, 3) ERROR: No matching symbol 'ClientEffect' + (161, 2) INFO: Compiling void SummonLightningStorm::setup_smokes() + (163, 3) ERROR: No matching symbol 'ClientEffect' + (164, 3) ERROR: No matching symbol 'ClientEffect' + (165, 3) ERROR: No matching symbol 'ClientEffect' + (166, 3) ERROR: No matching symbol 'ClientEffect' + (167, 3) ERROR: No matching symbol 'ClientEffect' + (168, 3) ERROR: No matching symbol 'ClientEffect' + (169, 3) ERROR: No matching symbol 'ClientEffect' + (170, 3) ERROR: No matching symbol 'ClientEffect' + (171, 3) ERROR: No matching symbol 'ClientEffect' + (172, 3) ERROR: No matching symbol 'ClientEffect' + (23, 2) INFO: Compiling void BaseAoe::OnSpawn() + (27, 7) ERROR: No matching symbol 'AOE_FREQ' + (29, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (31, 7) ERROR: No matching symbol 'AOE_DMG_FREQ' + (33, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void BaseAoe::get_skill() + (40, 32) ERROR: No matching symbol 'MY_OWNER' + (41, 7) ERROR: No matching symbol 'ACTIVE_SKILL' + (46, 2) INFO: Compiling void BaseAoe::aoe_scan_loop() + (48, 7) ERROR: Illegal operation on this datatype + (49, 3) ERROR: No matching symbol 'AOE_FREQ' + (53, 2) INFO: Compiling void BaseAoe::aoe_dmg_loop() + (55, 7) ERROR: Illegal operation on this datatype + (56, 3) ERROR: No matching symbol 'AOE_DMG_FREQ' + (60, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad() + (63, 41) ERROR: No matching symbol 'GetOwner' + (65, 16) ERROR: No matching symbol 'FindEntitiesInSphere' + (67, 21) ERROR: No matching symbol 'GetTokenCount' + (68, 18) ERROR: No conversion from 'string' to 'int' available. + (69, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (71, 22) ERROR: No conversion from 'string' to 'int' available. + (76, 7) ERROR: No matching symbol 'AOE_FRIEND_FOE' + (78, 22) ERROR: No conversion from 'string' to 'int' available. + (85, 2) INFO: Compiling void BaseAoe::aoe_apply_loop() + (89, 33) ERROR: Expected expression value + (89, 33) ERROR: Instead found '' + (93, 2) INFO: Compiling void BaseAoe::aoe_applyeffect_rad_check_friendly() + (95, 23) ERROR: No matching symbol 'GetToken' + (96, 7) ERROR: No matching symbol 'GetRelationship' + (100, 7) ERROR: Expression must be of boolean type, instead found 'string' + (102, 9) ERROR: No matching signatures to 'IsValidPlayer(string)' + (102, 9) INFO: Candidates are: + (102, 9) INFO: bool IsValidPlayer(CBasePlayer@) + (102, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (107, 9) ERROR: No matching symbol 'DO_EFFECT' + (108, 3) ERROR: No matching symbol 'apply_aoe_effect' + (111, 2) INFO: Compiling void BaseAoe::aoe_dodamage_rad() + (113, 33) ERROR: Expected expression value + (113, 33) ERROR: Instead found '' + (116, 2) INFO: Compiling void BaseAoe::aoe_end() + (119, 7) ERROR: No matching symbol 'MY_SCRIPT_IDX' + (121, 4) ERROR: No matching symbol 'ClientEffect' + (123, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\summon_volcano.as + (22, 2) INFO: Compiling SummonVolcano::SummonVolcano() + (33, 16) ERROR: 'MODEL_WORLD' is already declared + (44, 2) INFO: Compiling void SummonVolcano::OnRepeatTimer() + (46, 3) ERROR: No matching symbol 'SetRepeatDelay' + (47, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (50, 4) ERROR: No matching symbol 'ClientEffect' + (55, 4) ERROR: No matching symbol 'ClientEffect' + (59, 2) INFO: Compiling void SummonVolcano::game_precache() + (61, 3) ERROR: No matching symbol 'Precache' + (64, 2) INFO: Compiling void SummonVolcano::OnSpawn() + (78, 45) ERROR: Expected expression value + (78, 45) ERROR: Instead found '' + (81, 2) INFO: Compiling void SummonVolcano::game_dynamically_created() + (83, 14) ERROR: No matching symbol 'param1' + (84, 18) ERROR: No matching symbol 'param2' + (86, 21) ERROR: No matching symbol 'param3' + (87, 20) ERROR: No matching signatures to 'IsValidPlayer(string)' + (87, 20) INFO: Candidates are: + (87, 20) INFO: bool IsValidPlayer(CBasePlayer@) + (87, 20) INFO: Rejected due to type mismatch at positional parameter 1 + (88, 3) ERROR: No matching symbol 'ClientEvent' + (90, 3) ERROR: No matching signatures to 'string::EFFECT_DURATION(const string)' + (93, 2) INFO: Compiling void SummonVolcano::volcano_start() + (96, 3) ERROR: No matching symbol 'ClientEvent' + (101, 2) INFO: Compiling void SummonVolcano::aoe_loop() + (103, 7) ERROR: Illegal operation on this datatype + (105, 3) ERROR: No matching symbol 'XDoDamage' + (106, 3) ERROR: No matching symbol 'AOE_FREQ' + (109, 2) INFO: Compiling void SummonVolcano::fireball_loop() + (111, 7) ERROR: Illegal operation on this datatype + (119, 42) ERROR: No matching symbol 'FORCE_OFFSET' + (120, 3) ERROR: No matching symbol 'CallExternal' + (121, 38) ERROR: No matching symbol 'SOUND_SHOOT' + (121, 25) ERROR: No matching symbol 'CHAN_WEAPON' + (121, 13) ERROR: No matching symbol 'GetOwner' + (122, 3) ERROR: No matching symbol 'FIREBALL_FREQ' + (125, 2) INFO: Compiling void SummonVolcano::volcano_dodamage() + (127, 21) ERROR: No matching symbol 'param2' + (128, 18) ERROR: No matching symbol 'param6' + (129, 9) ERROR: No matching symbol 'param1' + (130, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (130, 9) INFO: Candidates are: + (130, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (130, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (131, 15) ERROR: No conversion from 'string' to 'int' available. + (132, 23) ERROR: No matching symbol 'GetSkillLevel' + (133, 3) ERROR: Illegal operation on 'string' + (134, 3) ERROR: No matching symbol 'ApplyEffect' + (137, 2) INFO: Compiling void SummonVolcano::volcano_off() + (140, 3) ERROR: No matching symbol 'PlayAnim' + (141, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (144, 2) INFO: Compiling void SummonVolcano::volcano_die() + (146, 3) ERROR: No matching symbol 'ClientEvent' + (147, 3) ERROR: No matching symbol 'DeleteEntity' + (150, 2) INFO: Compiling void SummonVolcano::client_activate() + (152, 15) ERROR: No matching symbol 'param1' + (153, 17) ERROR: No matching symbol 'param2' + (155, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (158, 3) ERROR: No matching symbol 'EmitSound3D' + (161, 2) INFO: Compiling void SummonVolcano::fx_start() + (165, 68) ERROR: Expected expression value + (165, 68) ERROR: Instead found '' + (171, 2) INFO: Compiling void SummonVolcano::loop_sfx() + (173, 7) ERROR: Illegal operation on this datatype + (175, 3) ERROR: No matching symbol 'EmitSound3D' + (176, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (179, 2) INFO: Compiling void SummonVolcano::volcano_fire_create() + (181, 3) ERROR: No matching symbol 'ClientEffect' + (182, 3) ERROR: No matching symbol 'ClientEffect' + (183, 3) ERROR: No matching symbol 'ClientEffect' + (184, 3) ERROR: No matching symbol 'ClientEffect' + (185, 3) ERROR: No matching symbol 'ClientEffect' + (186, 3) ERROR: No matching symbol 'ClientEffect' + (187, 3) ERROR: No matching symbol 'ClientEffect' + (188, 3) ERROR: No matching symbol 'ClientEffect' + (191, 2) INFO: Compiling void SummonVolcano::setup_flame_circle() + (193, 3) ERROR: No matching symbol 'ClientEffect' + (194, 3) ERROR: No matching symbol 'ClientEffect' + (195, 3) ERROR: No matching symbol 'ClientEffect' + (196, 3) ERROR: No matching symbol 'ClientEffect' + (197, 3) ERROR: No matching symbol 'ClientEffect' + (198, 3) ERROR: No matching symbol 'ClientEffect' + (199, 3) ERROR: No matching symbol 'ClientEffect' + (200, 3) ERROR: No matching symbol 'ClientEffect' + (201, 3) ERROR: No matching symbol 'ClientEffect' + (202, 3) ERROR: No matching symbol 'ClientEffect' + (203, 3) ERROR: No matching symbol 'ClientEffect' + (204, 3) ERROR: No matching symbol 'ClientEffect' + (207, 2) INFO: Compiling void SummonVolcano::update_flame_circle() + (211, 77) ERROR: Expected expression value + (211, 77) ERROR: Instead found '' + (219, 2) INFO: Compiling void SummonVolcano::setup_smoke() + (221, 3) ERROR: No matching symbol 'ClientEffect' + (222, 3) ERROR: No matching symbol 'ClientEffect' + (223, 3) ERROR: No matching symbol 'ClientEffect' + (224, 3) ERROR: No matching symbol 'ClientEffect' + (225, 3) ERROR: No matching symbol 'ClientEffect' + (226, 3) ERROR: No matching symbol 'ClientEffect' + (227, 3) ERROR: No matching symbol 'ClientEffect' + (228, 3) ERROR: No matching symbol 'ClientEffect' + (229, 3) ERROR: No matching symbol 'ClientEffect' + (230, 3) ERROR: No matching symbol 'ClientEffect' + (233, 2) INFO: Compiling void SummonVolcano::update_smoke() + (241, 4) ERROR: No matching symbol 'ClientEffect' + (242, 4) ERROR: No matching symbol 'ClientEffect' + (243, 4) ERROR: No matching symbol 'ClientEffect' + (247, 2) INFO: Compiling void SummonVolcano::fx_end() + (252, 3) ERROR: No matching symbol 'EmitSound3D' + (253, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (256, 2) INFO: Compiling void SummonVolcano::fx_die() + (258, 3) ERROR: No matching symbol 'RemoveScript' + (261, 2) INFO: Compiling void SummonVolcano::func_rockspawn() + (269, 41) ERROR: Expected expression value + (269, 41) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\tnt_bomb.as + (6, 7) ERROR: Method 'void TntBomb::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void TntBomb::OnDamagedOther(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\tnt_bomb_cl.as + (19, 2) INFO: Compiling void TntBombCl::client_activate() + (26, 51) ERROR: Expected expression value + (26, 51) ERROR: Instead found '' + (32, 2) INFO: Compiling void TntBombCl::sparks_loop() + (35, 11) ERROR: Expected ')' or ',' + (35, 11) ERROR: Instead found identifier '_1' + (39, 2) INFO: Compiling void TntBombCl::game_prerender() + (43, 56) ERROR: Expected expression value + (43, 56) ERROR: Instead found '' + (47, 56) ERROR: Expected expression value + (47, 56) ERROR: Instead found '' + (51, 2) INFO: Compiling void TntBombCl::end_fx() + (54, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (57, 2) INFO: Compiling void TntBombCl::remove_fx() + (59, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\tomahawk.as + (6, 7) ERROR: Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\tornado.as + (6, 7) ERROR: Method 'void BasePropelled::OnPostSpawn()' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\uber_blizzard.as + (27, 2) INFO: Compiling void UberBlizzard::OnRepeatTimer() + (29, 3) ERROR: No matching symbol 'SetRepeatDelay' + (30, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (33, 21) ERROR: No conversion from 'string' to 'int' available. + (39, 2) INFO: Compiling void UberBlizzard::game_dynamically_created() + (47, 101) ERROR: Expected expression value + (47, 101) ERROR: Instead found '' + (54, 2) INFO: Compiling void UberBlizzard::OnSpawn() + (56, 3) ERROR: No matching symbol 'SetName' + (57, 3) ERROR: No matching symbol 'SetRace' + (58, 3) ERROR: No matching symbol 'SetInvincible' + (59, 3) ERROR: No matching symbol 'SetHealth' + (63, 2) INFO: Compiling void UberBlizzard::scan_attack() + (65, 7) ERROR: Illegal operation on this datatype + (66, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (68, 9) ERROR: No matching symbol 'getCount' + (70, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (70, 9) INFO: Candidates are: + (70, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (70, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (71, 23) ERROR: No matching symbol 'getCount' + (77, 2) INFO: Compiling void UberBlizzard::check_attack() + (82, 23) ERROR: No matching symbol 'getEnt1' + (86, 23) ERROR: No matching symbol 'getEnt2' + (90, 23) ERROR: No matching symbol 'getEnt3' + (94, 23) ERROR: No matching symbol 'getEnt4' + (98, 23) ERROR: No matching symbol 'getEnt5' + (102, 23) ERROR: No matching symbol 'getEnt6' + (106, 23) ERROR: No matching symbol 'getEnt7' + (110, 23) ERROR: No matching symbol 'getEnt8' + (114, 23) ERROR: No matching symbol 'getEnt9' + (116, 9) ERROR: No matching symbol 'GetRelationship' + (117, 7) ERROR: Expression must be of boolean type, instead found 'string' + (119, 19) ERROR: No conversion from 'const string' to 'int' available. + (122, 23) ERROR: No matching symbol 'CHECK_ENT' + (127, 8) ERROR: No matching symbol 'EXIT_SUB' + (128, 9) ERROR: No matching symbol 'GetEntityRange' + (129, 27) ERROR: No conversion from 'string' to 'int' available. + (130, 3) ERROR: No matching symbol 'ApplyEffect' + (133, 2) INFO: Compiling void UberBlizzard::end_summon() + (136, 3) ERROR: No matching symbol 'ClientEvent' + (137, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (140, 2) INFO: Compiling void UberBlizzard::remove_me() + (142, 3) ERROR: No matching symbol 'DeleteEntity' + (145, 2) INFO: Compiling void UberBlizzard::client_activate() + (147, 17) ERROR: No matching symbol 'param1' + (148, 17) ERROR: No matching symbol 'param2' + (149, 16) ERROR: No matching symbol 'param3' + (150, 18) ERROR: No matching symbol 'param4' + (151, 30) ERROR: 'z' is not a member of 'string' + (154, 3) ERROR: Illegal operation on 'string' + (158, 2) INFO: Compiling void UberBlizzard::make_flakes() + (161, 3) ERROR: Illegal operation on 'string' + (162, 14) ERROR: No matching signatures to 'RandomInt(string, string)' + (162, 14) INFO: Candidates are: + (162, 14) INFO: int RandomInt(int, int) + (162, 14) INFO: Rejected due to type mismatch at positional parameter 1 + (163, 14) ERROR: No matching signatures to 'RandomInt(string, string)' + (163, 14) INFO: Candidates are: + (163, 14) INFO: int RandomInt(int, int) + (163, 14) INFO: Rejected due to type mismatch at positional parameter 1 + (164, 3) ERROR: No matching symbol 'START_POS' + (165, 3) ERROR: No matching symbol 'ClientEffect' + (166, 10) ERROR: 'NEGBLIZ_WIDTH' is already declared + (167, 3) ERROR: Illegal operation on 'string' + (168, 10) ERROR: 'x' is already declared + (169, 10) ERROR: 'y' is already declared + (170, 3) ERROR: No matching symbol 'START_POS' + (171, 3) ERROR: No matching symbol 'ClientEffect' + (174, 2) INFO: Compiling void UberBlizzard::setup_blizzardflake() + (179, 3) ERROR: No matching symbol 'ClientEffect' + (180, 3) ERROR: No matching symbol 'ClientEffect' + (181, 3) ERROR: No matching symbol 'ClientEffect' + (182, 3) ERROR: No matching symbol 'ClientEffect' + (183, 3) ERROR: No matching symbol 'ClientEffect' + (184, 3) ERROR: No matching symbol 'ClientEffect' + (187, 2) INFO: Compiling void UberBlizzard::setup_hailshard() + (190, 3) ERROR: No matching symbol 'ClientEffect' + (191, 3) ERROR: No matching symbol 'ClientEffect' + (192, 3) ERROR: No matching symbol 'ClientEffect' + (193, 3) ERROR: No matching symbol 'ClientEffect' + (194, 3) ERROR: No matching symbol 'ClientEffect' + (195, 3) ERROR: No matching symbol 'ClientEffect' + (196, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\volcano_troll.as + (20, 2) ERROR: Expected method or property + (20, 2) ERROR: Instead found identifier 'string' + (21, 14) ERROR: Expected '(' + (21, 14) ERROR: Instead found '.' + (22, 14) ERROR: Expected '(' + (22, 14) ERROR: Instead found '.' + (24, 14) ERROR: Expected identifier + (24, 14) ERROR: Instead found '(' + (182, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\summon\zy_eye.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\swampeye.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\swamp_keeper.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\swamp_ogre.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\swamp_reaver.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\swamp_tube.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\swamp_tube_cl.as + (11, 2) INFO: Compiling void SwampTubeCl::client_activate() + (14, 48) ERROR: Expected expression value + (14, 48) ERROR: Instead found '' + (20, 2) INFO: Compiling void SwampTubeCl::remove_fx() + (22, 3) ERROR: No matching symbol 'RemoveScript' + (29, 2) INFO: Compiling void SwampTubeCl::needle_collide() + (31, 3) ERROR: No matching symbol 'EmitSound3D' + (34, 2) INFO: Compiling void SwampTubeCl::setup_needle() + (42, 79) ERROR: Expected expression value + (42, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\swamp_vile.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\tcadaver.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\tcadaver_once.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_bow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_bow_cl.as + (26, 2) INFO: Compiling void TelfWarriorBowCl::client_activate() + (28, 3) ERROR: No matching symbol 'SetCallback' + (29, 12) ERROR: No matching symbol 'param1' + (30, 17) ERROR: No matching symbol 'param2' + (31, 19) ERROR: No matching symbol 'param3' + (32, 18) ERROR: No matching symbol 'param4' + (33, 18) ERROR: No matching symbol 'param5' + (34, 16) ERROR: No matching symbol 'param6' + (35, 12) ERROR: No matching symbol 'param7' + (36, 14) ERROR: No matching symbol 'param8' + (37, 3) ERROR: No matching symbol 'LogDebug' + (38, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (44, 3) ERROR: No matching symbol 'MAX_DURATION' + (47, 2) INFO: Compiling void TelfWarriorBowCl::fx_loop() + (57, 37) ERROR: Expected expression value + (57, 37) ERROR: Instead found '' + (60, 37) ERROR: Expected expression value + (60, 37) ERROR: Instead found '' + (64, 2) INFO: Compiling void TelfWarriorBowCl::end_fx() + (66, 7) ERROR: Illegal operation on this datatype + (68, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (71, 2) INFO: Compiling void TelfWarriorBowCl::remove_me() + (73, 3) ERROR: No matching symbol 'RemoveScript' + (76, 2) INFO: Compiling void TelfWarriorBowCl::game_prerender() + (78, 7) ERROR: Illegal operation on this datatype + (79, 3) ERROR: No matching symbol 'ClientEffect' + (92, 2) INFO: Compiling void TelfWarriorBowCl::setup_tracker_sprite() + (102, 44) ERROR: Expected expression value + (102, 44) ERROR: Instead found '' + (106, 2) INFO: Compiling void TelfWarriorBowCl::setup_spiral_sprite() + (108, 3) ERROR: No matching symbol 'ClientEffect' + (109, 3) ERROR: No matching symbol 'ClientEffect' + (110, 3) ERROR: No matching symbol 'ClientEffect' + (111, 3) ERROR: No matching symbol 'ClientEffect' + (112, 3) ERROR: No matching symbol 'ClientEffect' + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_bow_cl_new.as + (26, 2) INFO: Compiling void TelfWarriorBowClNew::client_activate() + (28, 3) ERROR: No matching symbol 'SetCallback' + (29, 12) ERROR: No matching symbol 'param1' + (30, 17) ERROR: No matching symbol 'param2' + (31, 19) ERROR: No matching symbol 'param3' + (32, 18) ERROR: No matching symbol 'param4' + (33, 18) ERROR: No matching symbol 'param5' + (34, 16) ERROR: No matching symbol 'param6' + (35, 12) ERROR: No matching symbol 'param7' + (36, 14) ERROR: No matching symbol 'param8' + (37, 3) ERROR: No matching symbol 'LogDebug' + (38, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (44, 3) ERROR: No matching symbol 'MAX_DURATION' + (47, 2) INFO: Compiling void TelfWarriorBowClNew::fx_loop() + (57, 37) ERROR: Expected expression value + (57, 37) ERROR: Instead found '' + (60, 37) ERROR: Expected expression value + (60, 37) ERROR: Instead found '' + (64, 2) INFO: Compiling void TelfWarriorBowClNew::end_fx() + (66, 7) ERROR: Illegal operation on this datatype + (68, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (71, 2) INFO: Compiling void TelfWarriorBowClNew::remove_me() + (73, 3) ERROR: No matching symbol 'RemoveScript' + (76, 2) INFO: Compiling void TelfWarriorBowClNew::game_prerender() + (78, 7) ERROR: Illegal operation on this datatype + (79, 3) ERROR: No matching symbol 'ClientEffect' + (92, 2) INFO: Compiling void TelfWarriorBowClNew::setup_tracker_sprite() + (102, 44) ERROR: Expected expression value + (102, 44) ERROR: Instead found '' + (106, 2) INFO: Compiling void TelfWarriorBowClNew::setup_spiral_sprite() + (108, 3) ERROR: No matching symbol 'ClientEffect' + (109, 3) ERROR: No matching symbol 'ClientEffect' + (110, 3) ERROR: No matching symbol 'ClientEffect' + (111, 3) ERROR: No matching symbol 'ClientEffect' + (112, 3) ERROR: No matching symbol 'ClientEffect' + (113, 3) ERROR: No matching symbol 'ClientEffect' + (114, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_bow_new.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_esword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_fmace_cl.as + (14, 2) INFO: Compiling TelfWarriorFmaceCl::TelfWarriorFmaceCl() + (18, 3) ERROR: No matching symbol 'Precache' + (21, 2) INFO: Compiling void TelfWarriorFmaceCl::client_activate() + (30, 51) ERROR: Expected expression value + (30, 51) ERROR: Instead found '' + (33, 2) INFO: Compiling void TelfWarriorFmaceCl::fx_loop() + (47, 42) ERROR: Expected expression value + (47, 42) ERROR: Instead found '' + (48, 37) ERROR: Expected expression value + (48, 37) ERROR: Instead found '' + (52, 2) INFO: Compiling void TelfWarriorFmaceCl::end_fx() + (55, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (58, 2) INFO: Compiling void TelfWarriorFmaceCl::remove_me() + (60, 3) ERROR: No matching symbol 'RemoveScript' + (63, 2) INFO: Compiling void TelfWarriorFmaceCl::setup_weapon_sprite() + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_fmace_dshield.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_idagger.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_laxe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_laxe_cl.as + (13, 2) INFO: Compiling void TelfWarriorLaxeCl::client_activate() + (18, 73) ERROR: Expected expression value + (18, 73) ERROR: Instead found '' + (21, 51) ERROR: Expected expression value + (21, 51) ERROR: Instead found '' + (24, 2) INFO: Compiling void TelfWarriorLaxeCl::fx_loop() + (28, 35) ERROR: Expected expression value + (28, 35) ERROR: Instead found '' + (33, 35) ERROR: Expected expression value + (33, 35) ERROR: Instead found '' + (37, 2) INFO: Compiling void TelfWarriorLaxeCl::end_fx() + (40, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (43, 2) INFO: Compiling void TelfWarriorLaxeCl::remove_me() + (45, 3) ERROR: No matching symbol 'RemoveScript' + (48, 2) INFO: Compiling void TelfWarriorLaxeCl::update_weapon_sprite() + (50, 3) ERROR: No matching symbol 'ClientEffect' + (53, 2) INFO: Compiling void TelfWarriorLaxeCl::setup_weapon_sprite() + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_warrior_pdagger.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_wizard_novice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\telf_wizard_xbow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\test_skele.as + (8, 2) INFO: Compiling void TestSkele::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetHealth' + (11, 3) ERROR: No matching symbol 'SetModel' + (12, 3) ERROR: No matching symbol 'SetWidth' + (13, 3) ERROR: No matching symbol 'SetHeight' + (14, 3) ERROR: No matching symbol 'SetRace' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\thornlandspider.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\trencherbeak.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll_armored.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll_ice_lobber.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll_ice_lobber_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll_ice_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll_lobber.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll_stone.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\troll_turret.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\uber_reaver.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\vgoblin.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\vgoblin_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\vgoblin_chief.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\vgoblin_chief_cl.as + (24, 2) INFO: Compiling void VgoblinChiefCl::OnRepeatTimer() + (27, 37) ERROR: Expected expression value + (27, 37) ERROR: Instead found '' + (29, 32) ERROR: Expected expression value + (29, 32) ERROR: Instead found '' + (32, 32) ERROR: Expected expression value + (32, 32) ERROR: Instead found '' + (35, 32) ERROR: Expected expression value + (35, 32) ERROR: Instead found '' + (38, 32) ERROR: Expected expression value + (38, 32) ERROR: Instead found '' + (42, 2) INFO: Compiling void VgoblinChiefCl::client_activate() + (46, 51) ERROR: Expected expression value + (46, 51) ERROR: Instead found '' + (51, 2) INFO: Compiling void VgoblinChiefCl::game_prerender() + (53, 37) ERROR: Expected expression value + (53, 37) ERROR: Instead found '' + (57, 2) INFO: Compiling void VgoblinChiefCl::setup_smokes() + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (71, 2) INFO: Compiling void VgoblinChiefCl::dewm_plant_fx() + (73, 26) ERROR: No matching symbol 'param1' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (82, 2) INFO: Compiling void VgoblinChiefCl::plant_sprite() + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (96, 2) INFO: Compiling void VgoblinChiefCl::stunburst_go_cl() + (102, 54) ERROR: Expected expression value + (102, 54) ERROR: Instead found '' + (110, 2) INFO: Compiling void VgoblinChiefCl::stun_burst_fx() + (113, 36) ERROR: Expected expression value + (113, 36) ERROR: Instead found '' + (118, 2) INFO: Compiling void VgoblinChiefCl::stunburst_flame() + (138, 43) ERROR: Expected expression value + (138, 43) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\vgoblin_guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\vgoblin_shaman.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\vine_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\vine_poison.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wizard_normal.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wizard_strong.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wolf.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wolf_alpha.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wolf_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wolf_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wolf_ice_alpha.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wolf_shadow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\worm_abyssal.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\worm_abyssal_cl.as + (32, 2) INFO: Compiling WormAbyssalCl::WormAbyssalCl() + (43, 3) ERROR: No matching symbol 'SetCallback' + (46, 2) INFO: Compiling void WormAbyssalCl::client_activate() + (48, 14) ERROR: No matching symbol 'param1' + (49, 17) ERROR: No matching symbol 'param2' + (52, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (55, 2) INFO: Compiling void WormAbyssalCl::dark_burst() + (57, 15) ERROR: No matching symbol 'param1' + (58, 15) ERROR: No matching symbol 'param2' + (60, 3) ERROR: Illegal operation on 'string' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'EmitSound3D' + (70, 2) INFO: Compiling void WormAbyssalCl::create_sprites() + (73, 36) ERROR: Expected expression value + (73, 36) ERROR: Instead found '' + (78, 2) INFO: Compiling void WormAbyssalCl::setup_ring_sprite() + (95, 43) ERROR: Expected expression value + (95, 43) ERROR: Instead found '' + (101, 2) INFO: Compiling void WormAbyssalCl::beam_charge() + (116, 73) ERROR: Expected expression value + (116, 73) ERROR: Instead found '' + (119, 2) INFO: Compiling void WormAbyssalCl::game_prerender() + (121, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (127, 4) ERROR: No matching symbol 'ClientEffect' + (131, 4) ERROR: No matching symbol 'ClientEffect' + (135, 2) INFO: Compiling void WormAbyssalCl::beam_fire() + (141, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (142, 15) ERROR: No matching symbol 'param1' + (150, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (151, 3) ERROR: No matching symbol 'EmitSound3D' + (153, 3) ERROR: No matching symbol 'ClientEffect' + (154, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (155, 3) ERROR: No matching symbol 'ClientEffect' + (158, 2) INFO: Compiling void WormAbyssalCl::setup_eye_beams() + (161, 37) ERROR: Expected expression value + (161, 37) ERROR: Instead found '' + (173, 2) INFO: Compiling void WormAbyssalCl::eye_beam_fade_cycle() + (178, 68) ERROR: Expected ')' or ',' + (178, 68) ERROR: Instead found ';' + (178, 86) ERROR: Expected ';' + (178, 86) ERROR: Instead found ')' + (187, 2) INFO: Compiling void WormAbyssalCl::eye_beam_fade_loop() + (189, 21) ERROR: No matching symbol 'GetToken' + (190, 3) ERROR: No matching symbol 'LogDebug' + (191, 3) ERROR: No matching symbol 'ClientEffect' + (199, 2) INFO: Compiling void WormAbyssalCl::fade_beams_loop() + (204, 4) ERROR: No matching symbol 'ClientEffect' + (205, 4) ERROR: No matching symbol 'ClientEffect' + (206, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (210, 4) ERROR: No matching symbol 'ClientEffect' + (211, 4) ERROR: No matching symbol 'ClientEffect' + (216, 2) INFO: Compiling void WormAbyssalCl::setup_beam_sprite() + (218, 3) ERROR: No matching symbol 'ClientEffect' + (219, 3) ERROR: No matching symbol 'ClientEffect' + (220, 3) ERROR: No matching symbol 'ClientEffect' + (221, 3) ERROR: No matching symbol 'ClientEffect' + (222, 3) ERROR: No matching symbol 'ClientEffect' + (223, 3) ERROR: No matching symbol 'ClientEffect' + (224, 3) ERROR: No matching symbol 'ClientEffect' + (225, 3) ERROR: No matching symbol 'ClientEffect' + (226, 3) ERROR: No matching symbol 'ClientEffect' + (227, 3) ERROR: No matching symbol 'ClientEffect' + (228, 3) ERROR: No matching symbol 'ClientEffect' + (229, 3) ERROR: No matching symbol 'ClientEffect' + (232, 2) INFO: Compiling void WormAbyssalCl::setup_beam_end_sprite() + (234, 3) ERROR: No matching symbol 'ClientEffect' + (235, 3) ERROR: No matching symbol 'ClientEffect' + (236, 3) ERROR: No matching symbol 'ClientEffect' + (237, 3) ERROR: No matching symbol 'ClientEffect' + (238, 3) ERROR: No matching symbol 'ClientEffect' + (239, 3) ERROR: No matching symbol 'ClientEffect' + (240, 3) ERROR: No matching symbol 'ClientEffect' + (241, 3) ERROR: No matching symbol 'ClientEffect' + (242, 3) ERROR: No matching symbol 'ClientEffect' + (243, 3) ERROR: No matching symbol 'ClientEffect' + (246, 2) INFO: Compiling void WormAbyssalCl::update_beam_sprite() + (248, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (252, 8) ERROR: Expression must be of boolean type, instead found 'int&' + (255, 5) ERROR: No matching symbol 'ClientEffect' + (257, 20) ERROR: No conversion from 'string' to 'int' available. + (263, 5) ERROR: No matching symbol 'ClientEffect' + (264, 5) ERROR: No matching symbol 'ClientEffect' + (269, 4) ERROR: No matching symbol 'ClientEffect' + (270, 4) ERROR: No matching symbol 'ClientEffect' + (271, 4) ERROR: No matching symbol 'ClientEffect' + (275, 2) INFO: Compiling void WormAbyssalCl::setup_sphere() + (277, 3) ERROR: No matching symbol 'ClientEffect' + (278, 3) ERROR: No matching symbol 'ClientEffect' + (279, 3) ERROR: No matching symbol 'ClientEffect' + (280, 3) ERROR: No matching symbol 'ClientEffect' + (281, 3) ERROR: No matching symbol 'ClientEffect' + (282, 3) ERROR: No matching symbol 'ClientEffect' + (283, 3) ERROR: No matching symbol 'ClientEffect' + (284, 3) ERROR: No matching symbol 'ClientEffect' + (285, 3) ERROR: No matching symbol 'ClientEffect' + (286, 3) ERROR: No matching symbol 'ClientEffect' + (287, 3) ERROR: No matching symbol 'ClientEffect' + (288, 3) ERROR: No matching symbol 'ClientEffect' + (289, 3) ERROR: No matching symbol 'ClientEffect' + (292, 2) INFO: Compiling void WormAbyssalCl::update_sphere() + (294, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (297, 18) ERROR: No conversion from 'string' to 'float' available. + (301, 4) ERROR: No matching symbol 'ClientEffect' + (302, 4) ERROR: No matching symbol 'ClientEffect' + (306, 4) ERROR: No matching symbol 'ClientEffect' + (315, 2) INFO: Compiling void WormAbyssalCl::end_fx() + (321, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (324, 2) INFO: Compiling void WormAbyssalCl::follow_beams_off() + (326, 7) ERROR: Illegal operation on this datatype + (327, 3) ERROR: No matching symbol 'ClientEffect' + (331, 2) INFO: Compiling void WormAbyssalCl::remove_fx() + (333, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\worm_abyssal_head.as + (17, 2) INFO: Compiling void WormAbyssalHead::game_dynamically_created() + (19, 14) ERROR: No matching symbol 'param1' + (20, 3) ERROR: No matching symbol 'SetRace' + (25, 2) INFO: Compiling void WormAbyssalHead::OnSpawn() + (27, 3) ERROR: No matching symbol 'SetName' + (28, 3) ERROR: No matching symbol 'SetModel' + (29, 3) ERROR: No matching symbol 'SetWidth' + (30, 3) ERROR: No matching symbol 'SetHeight' + (31, 3) ERROR: No matching symbol 'SetFly' + (32, 3) ERROR: No matching symbol 'SetGravity' + (33, 3) ERROR: No matching symbol 'SetHealth' + (36, 2) INFO: Compiling void WormAbyssalHead::debug_model() + (38, 3) ERROR: No matching symbol 'SetModelBody' + (41, 2) INFO: Compiling void WormAbyssalHead::snap_loop() + (43, 7) ERROR: Illegal operation on this datatype + (44, 18) ERROR: No matching symbol 'GetEntityProperty' + (46, 19) ERROR: No matching symbol 'GetOwner' + (47, 8) ERROR: No matching symbol 'G_DEVELOPER_MODE' + (49, 23) ERROR: No matching symbol 'GetEntityProperty' + (50, 23) ERROR: No matching symbol 'GetEntityProperty' + (52, 76) ERROR: 'z' is not a member of 'string' + (52, 61) ERROR: 'y' is not a member of 'string' + (52, 46) ERROR: 'x' is not a member of 'string' + (54, 76) ERROR: 'z' is not a member of 'string' + (54, 61) ERROR: 'y' is not a member of 'string' + (54, 46) ERROR: 'x' is not a member of 'string' + (56, 76) ERROR: 'z' is not a member of 'string' + (56, 61) ERROR: 'y' is not a member of 'string' + (56, 46) ERROR: 'x' is not a member of 'string' + (57, 4) ERROR: No matching symbol 'Effect' + (58, 4) ERROR: No matching symbol 'Effect' + (59, 4) ERROR: No matching symbol 'Effect' + (61, 9) ERROR: No matching signatures to 'IsEntityAlive(string)' + (61, 9) INFO: Candidates are: + (61, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (61, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (64, 4) ERROR: No matching symbol 'DeleteEntity' + (66, 7) ERROR: Illegal operation on this datatype + (67, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (70, 2) INFO: Compiling void WormAbyssalHead::OnDamage(int) + (72, 9) ERROR: No matching symbol 'GetRelationship' + (73, 3) ERROR: No matching symbol 'Bleed' + (74, 25) ERROR: No matching symbol 'param4' + (75, 8) ERROR: No matching symbol 'GetEntityProperty' + (77, 10) WARN: Variable 'L_HIT_CHANCE' hides another variable of same name in outer scope + (79, 3) ERROR: No matching symbol 'XDoDamage' + (80, 3) ERROR: No matching symbol 'SetDamage' + (81, 3) ERROR: No matching symbol 'SetDamage' + (82, 3) ERROR: No matching symbol 'ReturnData' + (85, 2) INFO: Compiling void WormAbyssalHead::game_applyeffect() + (87, 3) ERROR: No matching symbol 'LogDebug' + (88, 3) ERROR: No matching symbol 'LogDebug' + (92, 3) ERROR: No matching symbol 'ReturnData' + (95, 2) INFO: Compiling void WormAbyssalHead::ext_playsound() + (97, 3) ERROR: No matching symbol 'LogDebug' + (98, 27) ERROR: No conversion from 'const string' to 'int' available. + (100, 42) ERROR: No matching symbol 'param2' + (100, 34) ERROR: No matching symbol 'param3' + (100, 26) ERROR: No matching symbol 'param1' + (100, 14) ERROR: No matching symbol 'GetOwner' + (104, 42) ERROR: No matching symbol 'param2' + (104, 34) ERROR: No matching symbol 'param3' + (104, 26) ERROR: No matching symbol 'param1' + (104, 14) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wraith.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wraith_cl.as + (13, 2) INFO: Compiling void WraithCl::client_activate() + (15, 14) ERROR: No matching symbol 'param1' + (16, 15) ERROR: No matching symbol 'param2' + (17, 15) ERROR: No matching symbol 'param3' + (19, 3) ERROR: No matching symbol 'beam_loop' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (21, 3) ERROR: No matching symbol 'SetCallback' + (24, 2) INFO: Compiling void WraithCl::game_prerender() + (27, 38) ERROR: Expected expression value + (27, 38) ERROR: Instead found '' + (28, 40) ERROR: Expected expression value + (28, 40) ERROR: Instead found '' + (31, 41) ERROR: Expected expression value + (31, 41) ERROR: Instead found '' + (33, 41) ERROR: Expected expression value + (33, 41) ERROR: Instead found '' + (46, 2) INFO: Compiling void WraithCl::end_fx() + (49, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (52, 2) INFO: Compiling void WraithCl::remove_me() + (54, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wraith_summoned.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\wyrm_fire.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zombie.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zombie_bile.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zombie_decayed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zombie_decayed_nr.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zombie_huge.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zombie_zygol.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zorc_archer1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zorc_archer2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zorc_warrior1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zorc_warrior2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/monsters\zorc_warrior3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest10.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest11.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest12.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest13.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest3.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest4.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest5.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest6.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest7.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest8.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\cavechest9.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\darrelin-npc.as + (46, 2) INFO: Compiling void DarrelinNpc::OnSpawn() + (49, 3) ERROR: No matching symbol 'SetHealth' + (50, 3) ERROR: No matching symbol 'SetMaxHealth' + (51, 3) ERROR: No matching symbol 'SetGold' + (52, 3) ERROR: No matching symbol 'SetName' + (53, 3) ERROR: No matching symbol 'SetWidth' + (54, 3) ERROR: No matching symbol 'SetHeight' + (55, 3) ERROR: No matching symbol 'SetRace' + (56, 3) ERROR: No matching symbol 'SetRoam' + (57, 3) ERROR: No matching symbol 'SetModel' + (58, 3) ERROR: No matching symbol 'SetMoveAnim' + (59, 3) ERROR: No matching symbol 'SetInvincible' + (61, 3) ERROR: No matching symbol 'CatchSpeech' + (62, 3) ERROR: No matching symbol 'CatchSpeech' + (63, 3) ERROR: No matching symbol 'CatchSpeech' + (64, 3) ERROR: No matching symbol 'CatchSpeech' + (65, 3) ERROR: No matching symbol 'CatchSpeech' + (66, 3) ERROR: No matching symbol 'CatchSpeech' + (67, 3) ERROR: No matching symbol 'CatchSpeech' + (68, 3) ERROR: No matching symbol 'CatchSpeech' + (69, 3) ERROR: No matching symbol 'CatchSpeech' + (70, 3) ERROR: No matching symbol 'CatchSpeech' + (73, 2) INFO: Compiling void DarrelinNpc::say_hi() + (75, 22) ERROR: No matching symbol 'param1' + (77, 26) ERROR: No matching symbol 'param1' + (81, 26) ERROR: No matching symbol 'GetEntityIndex' + (83, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (85, 17) ERROR: No matching symbol 'L_LAST_SPOKE' + (87, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (88, 13) ERROR: No matching symbol 'GetOwner' + (90, 3) ERROR: No matching symbol 'Say' + (94, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (102, 3) ERROR: No matching symbol 'chat_loop' + (105, 2) INFO: Compiling void DarrelinNpc::restore_mouth_move() + (108, 3) ERROR: No matching symbol 'bchat_auto_mouth_move' + (111, 2) INFO: Compiling void DarrelinNpc::say_orc() + (113, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (115, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (116, 17) ERROR: No matching symbol 'GetEntityIndex' + (118, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (119, 13) ERROR: No matching symbol 'GetOwner' + (132, 3) ERROR: No matching symbol 'chat_loop' + (135, 2) INFO: Compiling void DarrelinNpc::say_myth() + (137, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (139, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (140, 17) ERROR: No matching symbol 'GetEntityIndex' + (142, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (143, 13) ERROR: No matching symbol 'GetOwner' + (153, 3) ERROR: No matching symbol 'chat_loop' + (156, 2) INFO: Compiling void DarrelinNpc::say_acting() + (158, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (160, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (161, 17) ERROR: No matching symbol 'GetEntityIndex' + (163, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (164, 13) ERROR: No matching symbol 'GetOwner' + (174, 3) ERROR: No matching symbol 'chat_loop' + (177, 2) INFO: Compiling void DarrelinNpc::say_name() + (179, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (181, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (182, 17) ERROR: No matching symbol 'GetEntityIndex' + (184, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (185, 13) ERROR: No matching symbol 'GetOwner' + (205, 3) ERROR: No matching symbol 'chat_loop' + (208, 2) INFO: Compiling void DarrelinNpc::say_goblins() + (210, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (212, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (213, 17) ERROR: No matching symbol 'GetEntityIndex' + (215, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (216, 13) ERROR: No matching symbol 'GetOwner' + (224, 3) ERROR: No matching symbol 'chat_loop' + (227, 2) INFO: Compiling void DarrelinNpc::say_river() + (229, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (231, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (232, 17) ERROR: No matching symbol 'GetEntityIndex' + (234, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (235, 13) ERROR: No matching symbol 'GetOwner' + (241, 3) ERROR: No matching symbol 'chat_loop' + (244, 2) INFO: Compiling void DarrelinNpc::give_manuscript() + (246, 22) ERROR: No matching symbol 'param1' + (248, 22) ERROR: No matching symbol 'param1' + (251, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (253, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (254, 17) ERROR: No matching symbol 'GetEntityIndex' + (256, 8) ERROR: No matching symbol 'BUSY_CHATTING' + (257, 13) ERROR: No matching symbol 'GetOwner' + (259, 17) ERROR: No matching symbol 'GetEntityName' + (267, 3) ERROR: No matching symbol 'chat_loop' + (275, 2) INFO: Compiling void DarrelinNpc::game_menu_getoptions() + (277, 10) ERROR: Expected ';' + (277, 10) ERROR: Instead found identifier 'reg' + (278, 10) ERROR: Expected ';' + (278, 10) ERROR: Instead found identifier 'reg' + (279, 10) ERROR: Expected ';' + (279, 10) ERROR: Instead found identifier 'l' + (282, 11) ERROR: Expected ';' + (282, 11) ERROR: Instead found identifier 'reg' + (288, 12) ERROR: Expected ';' + (288, 12) ERROR: Instead found identifier 'reg' + (294, 13) ERROR: Expected ';' + (294, 13) ERROR: Instead found identifier 'reg' + (300, 14) ERROR: Expected ';' + (300, 14) ERROR: Instead found identifier 'reg' + (307, 11) ERROR: Expected ';' + (307, 11) ERROR: Instead found identifier 'reg' + (308, 11) ERROR: Expected ';' + (308, 11) ERROR: Instead found identifier 'reg' + (309, 11) ERROR: Expected ';' + (309, 11) ERROR: Instead found identifier 'reg' + (310, 11) ERROR: Expected ';' + (310, 11) ERROR: Instead found identifier 'reg' + (314, 2) INFO: Compiling void DarrelinNpc::chat_warning() + (316, 23) ERROR: No conversion from 'string' to 'float' available. + (319, 3) ERROR: No matching symbol 'SendColoredMessage' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\extra15a.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\extra15b.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\extra16.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\firecave.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\pillar.as + (12, 2) INFO: Compiling Pillar::Pillar() + (14, 3) ERROR: No matching symbol 'Precache' + (15, 3) ERROR: No matching symbol 'Precache' + (16, 3) ERROR: No matching symbol 'Precache' + (17, 3) ERROR: No matching symbol 'Precache' + (18, 3) ERROR: No matching symbol 'Precache' + (19, 3) ERROR: No matching symbol 'Precache' + (20, 3) ERROR: No matching symbol 'Precache' + (21, 3) ERROR: No matching symbol 'Precache' + (22, 3) ERROR: No matching symbol 'Precache' + (25, 2) INFO: Compiling void Pillar::OnSpawn() + (27, 3) ERROR: No matching symbol 'SetHealth' + (28, 3) ERROR: No matching symbol 'SetName' + (29, 3) ERROR: No matching symbol 'SetWidth' + (30, 3) ERROR: No matching symbol 'SetHeight' + (31, 3) ERROR: No matching symbol 'SetRoam' + (32, 3) ERROR: No matching symbol 'SetRace' + (33, 3) ERROR: No matching symbol 'SetModel' + (35, 3) ERROR: No matching symbol 'SetInvincible' + (36, 3) ERROR: No matching symbol 'CatchSpeech' + (37, 3) ERROR: No matching symbol 'CatchSpeech' + (38, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (41, 2) INFO: Compiling void Pillar::say_release() + (43, 3) ERROR: No matching symbol 'SayText' + (46, 2) INFO: Compiling void Pillar::say_hail() + (48, 8) ERROR: No matching symbol 'ItemExists' + (50, 4) ERROR: No matching symbol 'SayText' + (53, 8) ERROR: No matching symbol 'EXIT_SUB' + (54, 8) ERROR: No matching symbol 'ItemExists' + (56, 4) ERROR: No matching symbol 'SayText' + (59, 8) ERROR: No matching symbol 'EXIT_SUB' + (60, 3) ERROR: No matching symbol 'SayText' + (63, 2) INFO: Compiling void Pillar::game_menu_getoptions() + (74, 11) ERROR: Expected ';' + (74, 11) ERROR: Instead found identifier 'reg' + (75, 11) ERROR: Expected ';' + (75, 11) ERROR: Instead found identifier 'reg' + (76, 11) ERROR: Expected ';' + (76, 11) ERROR: Instead found identifier 'reg' + (77, 11) ERROR: Expected ';' + (77, 11) ERROR: Instead found identifier 'reg' + (81, 11) ERROR: Expected ';' + (81, 11) ERROR: Instead found identifier 'reg' + (82, 11) ERROR: Expected ';' + (82, 11) ERROR: Instead found identifier 'reg' + (83, 11) ERROR: Expected ';' + (83, 11) ERROR: Instead found identifier 'reg' + (84, 11) ERROR: Expected ';' + (84, 11) ERROR: Instead found identifier 'reg' + (88, 2) INFO: Compiling void Pillar::wrong_ring() + (90, 3) ERROR: No matching symbol 'SayText' + (94, 2) INFO: Compiling void Pillar::gave_ring() + (96, 3) ERROR: No matching symbol 'SetModelBody' + (98, 3) ERROR: No matching symbol 'UseTrigger' + (99, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (100, 3) ERROR: No matching symbol 'SayText' + (103, 2) INFO: Compiling void Pillar::spawnage() + (105, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (106, 3) ERROR: No matching symbol 'UseTrigger' + (107, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (111, 2) INFO: Compiling void Pillar::gobyebye() + (113, 3) ERROR: No matching symbol 'UseTrigger' + (114, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\Shadahar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\shadahar2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\shadahar_cl.as + (15, 2) INFO: Compiling void ShadaharCl::eye_beam_prep_cl() + (17, 3) ERROR: No matching symbol 'ClientEffect' + (18, 3) ERROR: No matching symbol 'ClientEffect' + (21, 2) INFO: Compiling void ShadaharCl::wand_prep_cl() + (23, 16) ERROR: No matching symbol 'param2' + (24, 3) ERROR: No matching symbol 'ClientEffect' + (27, 2) INFO: Compiling void ShadaharCl::setup_eye_sprite() + (29, 3) ERROR: No matching symbol 'ClientEffect' + (30, 3) ERROR: No matching symbol 'ClientEffect' + (31, 3) ERROR: No matching symbol 'ClientEffect' + (32, 3) ERROR: No matching symbol 'ClientEffect' + (33, 3) ERROR: No matching symbol 'ClientEffect' + (34, 3) ERROR: No matching symbol 'ClientEffect' + (37, 2) INFO: Compiling void ShadaharCl::setup_wand_sprite() + (39, 3) ERROR: No matching symbol 'ClientEffect' + (40, 3) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching symbol 'ClientEffect' + (43, 3) ERROR: No matching symbol 'ClientEffect' + (44, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\shad_tele1.as + (8, 2) INFO: Compiling void ShadTeleBase::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetFly' + (11, 3) ERROR: No matching symbol 'SetRoam' + (12, 3) ERROR: No matching symbol 'SetGravity' + (15, 2) INFO: Compiling void ShadTeleBase::game_postspawn() + (17, 25) ERROR: No matching symbol 'param4' + (18, 35) ERROR: No matching symbol 'GetOwner' + (19, 3) ERROR: No matching symbol 'CallExternal' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void ShadTeleBase::remove_me() + (25, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\shad_tele2.as + (8, 2) INFO: Compiling void ShadTeleBase::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetFly' + (11, 3) ERROR: No matching symbol 'SetRoam' + (12, 3) ERROR: No matching symbol 'SetGravity' + (15, 2) INFO: Compiling void ShadTeleBase::game_postspawn() + (17, 25) ERROR: No matching symbol 'param4' + (18, 35) ERROR: No matching symbol 'GetOwner' + (19, 3) ERROR: No matching symbol 'CallExternal' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void ShadTeleBase::remove_me() + (25, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\shad_tele3.as + (8, 2) INFO: Compiling void ShadTeleBase::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetFly' + (11, 3) ERROR: No matching symbol 'SetRoam' + (12, 3) ERROR: No matching symbol 'SetGravity' + (15, 2) INFO: Compiling void ShadTeleBase::game_postspawn() + (17, 25) ERROR: No matching symbol 'param4' + (18, 35) ERROR: No matching symbol 'GetOwner' + (19, 3) ERROR: No matching symbol 'CallExternal' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void ShadTeleBase::remove_me() + (25, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\shad_tele4.as + (8, 2) INFO: Compiling void ShadTeleBase::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetFly' + (11, 3) ERROR: No matching symbol 'SetRoam' + (12, 3) ERROR: No matching symbol 'SetGravity' + (15, 2) INFO: Compiling void ShadTeleBase::game_postspawn() + (17, 25) ERROR: No matching symbol 'param4' + (18, 35) ERROR: No matching symbol 'GetOwner' + (19, 3) ERROR: No matching symbol 'CallExternal' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void ShadTeleBase::remove_me() + (25, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\shad_tele5.as + (8, 2) INFO: Compiling void ShadTeleBase::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetFly' + (11, 3) ERROR: No matching symbol 'SetRoam' + (12, 3) ERROR: No matching symbol 'SetGravity' + (15, 2) INFO: Compiling void ShadTeleBase::game_postspawn() + (17, 25) ERROR: No matching symbol 'param4' + (18, 35) ERROR: No matching symbol 'GetOwner' + (19, 3) ERROR: No matching symbol 'CallExternal' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void ShadTeleBase::remove_me() + (25, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\shad_tele6.as + (8, 2) INFO: Compiling void ShadTeleBase::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetFly' + (11, 3) ERROR: No matching symbol 'SetRoam' + (12, 3) ERROR: No matching symbol 'SetGravity' + (15, 2) INFO: Compiling void ShadTeleBase::game_postspawn() + (17, 25) ERROR: No matching symbol 'param4' + (18, 35) ERROR: No matching symbol 'GetOwner' + (19, 3) ERROR: No matching symbol 'CallExternal' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void ShadTeleBase::remove_me() + (25, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\shad_tele7.as + (8, 2) INFO: Compiling void ShadTeleBase::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetFly' + (11, 3) ERROR: No matching symbol 'SetRoam' + (12, 3) ERROR: No matching symbol 'SetGravity' + (15, 2) INFO: Compiling void ShadTeleBase::game_postspawn() + (17, 25) ERROR: No matching symbol 'param4' + (18, 35) ERROR: No matching symbol 'GetOwner' + (19, 3) ERROR: No matching symbol 'CallExternal' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void ShadTeleBase::remove_me() + (25, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\shad_tele_base.as + (8, 2) INFO: Compiling void ShadTeleBase::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetFly' + (11, 3) ERROR: No matching symbol 'SetRoam' + (12, 3) ERROR: No matching symbol 'SetGravity' + (15, 2) INFO: Compiling void ShadTeleBase::game_postspawn() + (17, 25) ERROR: No matching symbol 'param4' + (18, 35) ERROR: No matching symbol 'GetOwner' + (19, 3) ERROR: No matching symbol 'CallExternal' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void ShadTeleBase::remove_me() + (25, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/mscave\skeleton2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/msc_tutorial\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_snow\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\base_soccer.as + (34, 2) INFO: Compiling BaseSoccer::BaseSoccer() + (36, 13) ERROR: No matching symbol 'FindEntityByName' + (37, 8) ERROR: No matching symbol 'GetEntityProperty' + (37, 3) ERROR: Both conditions must initialize member 'SUSPEND_AI' + (47, 2) INFO: Compiling void BaseSoccer::OnSpawn() + (49, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (55, 2) INFO: Compiling void BaseSoccer::soccer_finalize() + (57, 13) ERROR: No matching symbol 'FindEntityByName' + (58, 15) ERROR: No matching symbol 'GetEntityProperty' + (59, 19) ERROR: No matching symbol 'FindEntityByName' + (60, 19) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (60, 19) INFO: Candidates are: + (60, 19) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (60, 19) INFO: Rejected due to type mismatch at positional parameter 1 + (61, 18) ERROR: No matching symbol 'FindEntityByName' + (62, 18) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (62, 18) INFO: Candidates are: + (62, 18) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (62, 18) INFO: Rejected due to type mismatch at positional parameter 1 + (63, 20) ERROR: No matching symbol 'ATTACK_MOVERANGE' + (85, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (87, 11) WARN: Variable 'NAME_SUFFIX' hides another variable of same name in outer scope + (89, 8) ERROR: No matching symbol 'AM_LEADER' + (91, 11) WARN: Variable 'NAME_SUFFIX' hides another variable of same name in outer scope + (93, 8) ERROR: No matching symbol 'AM_GOALIE' + (95, 11) WARN: Variable 'NAME_SUFFIX' hides another variable of same name in outer scope + (97, 3) ERROR: No matching symbol 'MY_NAME' + (98, 3) ERROR: No matching symbol 'SetName' + (99, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (102, 2) INFO: Compiling void BaseSoccer::game_menu_getoptions() + (104, 10) ERROR: Expected ';' + (104, 10) ERROR: Instead found identifier 'reg' + (106, 10) ERROR: Expected ';' + (106, 10) ERROR: Instead found identifier 'reg' + (107, 10) ERROR: Expected ';' + (107, 10) ERROR: Instead found identifier 'reg' + (119, 11) ERROR: Expected ';' + (119, 11) ERROR: Instead found identifier 'reg' + (120, 11) ERROR: Expected ';' + (120, 11) ERROR: Instead found identifier 'reg' + (121, 11) ERROR: Expected ';' + (121, 11) ERROR: Instead found identifier 'reg' + (122, 11) ERROR: Expected ';' + (122, 11) ERROR: Instead found identifier 'reg' + (125, 11) ERROR: Expected ';' + (125, 11) ERROR: Instead found identifier 'reg' + (126, 11) ERROR: Expected ';' + (126, 11) ERROR: Instead found identifier 'reg' + (130, 11) ERROR: Expected ';' + (130, 11) ERROR: Instead found identifier 'reg' + (131, 11) ERROR: Expected ';' + (131, 11) ERROR: Instead found identifier 'reg' + (132, 11) ERROR: Expected ';' + (132, 11) ERROR: Instead found identifier 'reg' + (133, 11) ERROR: Expected ';' + (133, 11) ERROR: Instead found identifier 'reg' + (136, 11) ERROR: Expected ';' + (136, 11) ERROR: Instead found identifier 'reg' + (137, 11) ERROR: Expected ';' + (137, 11) ERROR: Instead found identifier 'reg' + (141, 11) ERROR: Expected ';' + (141, 11) ERROR: Instead found identifier 'reg' + (142, 11) ERROR: Expected ';' + (142, 11) ERROR: Instead found identifier 'reg' + (143, 11) ERROR: Expected ';' + (143, 11) ERROR: Instead found identifier 'reg' + (144, 11) ERROR: Expected ';' + (144, 11) ERROR: Instead found identifier 'reg' + (147, 11) ERROR: Expected ';' + (147, 11) ERROR: Instead found identifier 'reg' + (148, 11) ERROR: Expected ';' + (148, 11) ERROR: Instead found identifier 'reg' + (152, 2) INFO: Compiling void BaseSoccer::menu_faster() + (154, 20) ERROR: No matching symbol 'GetEntityName' + (156, 14) ERROR: No matching symbol 'GetEntityName' + (157, 3) ERROR: No matching symbol 'SendInfoMsg' + (161, 2) INFO: Compiling void BaseSoccer::menu_faster_all() + (163, 20) ERROR: No matching symbol 'GetEntityName' + (167, 3) ERROR: No matching symbol 'SendInfoMsg' + (169, 3) ERROR: No matching symbol 'CallExternal' + (172, 2) INFO: Compiling void BaseSoccer::extsorc_make_team_faster() + (174, 20) ERROR: No matching symbol 'param1' + (178, 2) INFO: Compiling void BaseSoccer::make_faster() + (180, 3) ERROR: No matching symbol 'PlayAnim' + (183, 3) ERROR: No matching symbol 'SetAnimMoveSpeed' + (184, 3) ERROR: No matching symbol 'SetAnimFrameRate' + (189, 2) INFO: Compiling void BaseSoccer::menu_slower() + (191, 20) ERROR: No matching symbol 'GetEntityName' + (193, 14) ERROR: No matching symbol 'GetEntityName' + (194, 3) ERROR: No matching symbol 'SendInfoMsg' + (198, 2) INFO: Compiling void BaseSoccer::menu_slower_all() + (200, 20) ERROR: No matching symbol 'GetEntityName' + (204, 3) ERROR: No matching symbol 'SendInfoMsg' + (206, 3) ERROR: No matching symbol 'CallExternal' + (209, 2) INFO: Compiling void BaseSoccer::extsorc_make_team_slower() + (211, 20) ERROR: No matching symbol 'param1' + (215, 2) INFO: Compiling void BaseSoccer::make_slower() + (217, 3) ERROR: No matching symbol 'PlayAnim' + (220, 3) ERROR: No matching symbol 'SetAnimMoveSpeed' + (221, 3) ERROR: No matching symbol 'SetAnimFrameRate' + (226, 2) INFO: Compiling void BaseSoccer::menu_remove() + (228, 19) ERROR: No matching symbol 'GetOwner' + (229, 20) ERROR: No matching symbol 'GetEntityName' + (231, 14) ERROR: No matching symbol 'GetEntityName' + (233, 3) ERROR: No matching symbol 'SendInfoMsg' + (234, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (237, 2) INFO: Compiling void BaseSoccer::menu_normal() + (239, 20) ERROR: No matching symbol 'GetEntityName' + (241, 14) ERROR: No matching symbol 'GetEntityName' + (242, 3) ERROR: No matching symbol 'SendInfoMsg' + (246, 2) INFO: Compiling void BaseSoccer::menu_normal_all() + (248, 20) ERROR: No matching symbol 'GetEntityName' + (252, 3) ERROR: No matching symbol 'SendInfoMsg' + (254, 3) ERROR: No matching symbol 'CallExternal' + (257, 2) INFO: Compiling void BaseSoccer::extsorc_make_team_normal() + (259, 20) ERROR: No matching symbol 'param1' + (263, 2) INFO: Compiling void BaseSoccer::make_normal() + (265, 3) ERROR: No matching symbol 'PlayAnim' + (268, 3) ERROR: No matching symbol 'SetAnimMoveSpeed' + (269, 3) ERROR: No matching symbol 'SetAnimFrameRate' + (274, 2) INFO: Compiling void BaseSoccer::soc_spawn_stuck_check() + (277, 10) ERROR: Expected ';' + (277, 10) ERROR: Instead found identifier 'reg' + (278, 45) ERROR: Expected expression value + (278, 45) ERROR: Instead found '' + (279, 7) ERROR: Expected '(' + (279, 7) ERROR: Instead found identifier 'reg' + (295, 2) INFO: Compiling void BaseSoccer::setsoc_blue() + (298, 3) ERROR: No matching symbol 'SetProp' + (302, 2) INFO: Compiling void BaseSoccer::setsoc_red() + (305, 3) ERROR: No matching symbol 'SetProp' + (309, 2) INFO: Compiling void BaseSoccer::setsoc_goalrad() + (311, 14) ERROR: No matching symbol 'param1' + (314, 2) INFO: Compiling void BaseSoccer::ext_soc_blue_remove() + (317, 3) ERROR: No matching symbol 'npc_suicide' + (320, 2) INFO: Compiling void BaseSoccer::ext_soc_red_remove() + (323, 3) ERROR: No matching symbol 'npc_suicide' + (331, 2) INFO: Compiling void BaseSoccer::OnHuntTarget(CBaseEntity@) + (433, 48) ERROR: Expected expression value + (433, 48) ERROR: Instead found '' + (439, 2) INFO: Compiling void BaseSoccer::soc_kickball() + (484, 41) ERROR: Expected expression value + (484, 41) ERROR: Instead found '' + (559, 44) ERROR: Expected expression value + (559, 44) ERROR: Instead found '' + (562, 2) INFO: Compiling void BaseSoccer::npc_selectattack() + (564, 21) ERROR: No matching signatures to 'GetEntityOrigin(string)' + (564, 21) INFO: Candidates are: + (564, 21) INFO: Vector3 GetEntityOrigin(CBaseEntity@) + (564, 21) INFO: Rejected due to type mismatch at positional parameter 1 + (565, 35) ERROR: No matching symbol 'GetOwner' + (576, 8) ERROR: No matching symbol 'AM_GOALIE' + (578, 50) ERROR: No matching symbol 'MY_GOAL_LOC' + (579, 46) ERROR: No matching symbol 'MY_GOAL_LOC' + (582, 18) ERROR: No matching symbol 'NPC_HOME_LOC' + (584, 11) ERROR: No matching symbol 'IsOnGround' + (586, 21) ERROR: No matching symbol 'ANIM_SCOOP_BALL' + (586, 7) ERROR: No matching symbol 'ANIM_ATTACK' + (590, 21) ERROR: No matching symbol 'ANIM_KICK' + (590, 7) ERROR: No matching symbol 'ANIM_ATTACK' + (595, 20) ERROR: No matching symbol 'ANIM_KICK' + (595, 6) ERROR: No matching symbol 'ANIM_ATTACK' + (600, 19) ERROR: No matching symbol 'ANIM_KICK' + (600, 5) ERROR: No matching symbol 'ANIM_ATTACK' + (605, 47) ERROR: No matching symbol 'TARG_ORG' + (606, 43) ERROR: No matching symbol 'TARG_ORG' + (609, 10) ERROR: No matching symbol 'IsOnGround' + (618, 2) INFO: Compiling void BaseSoccer::extsoc_game_start() + (620, 7) ERROR: Expression must be of boolean type, instead found 'string' + (622, 4) ERROR: No matching symbol 'SetIdleAnim' + (623, 4) ERROR: No matching symbol 'SetMoveAnim' + (626, 3) ERROR: No matching symbol 'npcatk_resume_ai' + (627, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (628, 8) ERROR: No matching symbol 'AM_GOALIE' + (629, 3) ERROR: No matching symbol 'npcatk_settarget' + (632, 2) INFO: Compiling void BaseSoccer::extsoc_reset() + (635, 3) ERROR: No matching symbol 'npcatk_suspend_ai' + (639, 2) INFO: Compiling void BaseSoccer::extsoc_reset_loop() + (644, 10) ERROR: Expected ';' + (644, 10) ERROR: Instead found identifier 'reg' + (645, 45) ERROR: Expected expression value + (645, 45) ERROR: Instead found '' + (646, 7) ERROR: Expected '(' + (646, 7) ERROR: Instead found identifier 'reg' + (656, 2) INFO: Compiling void BaseSoccer::extsoc_pause_game() + (659, 3) ERROR: No matching symbol 'npcatk_suspend_ai' + (667, 2) INFO: Compiling void BaseSoccer::extsoc_score() + (670, 7) ERROR: No matching symbol 'GetEntityProperty' + (674, 7) ERROR: No matching symbol 'GetEntityProperty' + (678, 8) ERROR: No matching symbol 'GAME_OVER' + (686, 7) ERROR: No matching symbol 'param1' + (710, 2) INFO: Compiling void BaseSoccer::soc_round_win() + (715, 4) ERROR: No matching symbol 'PlayAnim' + (716, 8) ERROR: Expression must be of boolean type, instead found 'string' + (718, 5) ERROR: No matching symbol 'SetIdleAnim' + (719, 5) ERROR: No matching symbol 'SetMoveAnim' + (724, 4) ERROR: No matching symbol 'PlayAnim' + (725, 8) ERROR: Expression must be of boolean type, instead found 'string' + (727, 5) ERROR: No matching symbol 'SetIdleAnim' + (728, 5) ERROR: No matching symbol 'SetMoveAnim' + (733, 2) INFO: Compiling void BaseSoccer::soc_round_lose() + (738, 4) ERROR: No matching symbol 'PlayAnim' + (739, 8) ERROR: Expression must be of boolean type, instead found 'string' + (741, 5) ERROR: No matching symbol 'SetIdleAnim' + (742, 5) ERROR: No matching symbol 'SetMoveAnim' + (747, 4) ERROR: No matching symbol 'PlayAnim' + (748, 8) ERROR: Expression must be of boolean type, instead found 'string' + (750, 5) ERROR: No matching symbol 'SetIdleAnim' + (751, 5) ERROR: No matching symbol 'SetMoveAnim' + (756, 2) INFO: Compiling void BaseSoccer::soc_jump_over_ball() + (758, 3) ERROR: No matching symbol 'PlayAnim' + (759, 3) ERROR: No matching symbol 'npcatk_suspend_ai' + (760, 3) ERROR: No matching symbol 'SetMoveDest' + (761, 3) ERROR: No matching symbol 'PlayAnim' + (764, 2) INFO: Compiling void BaseSoccer::soc_stop_movement() + (766, 3) ERROR: No matching symbol 'SetMoveDest' + (767, 3) ERROR: No matching symbol 'SetRoam' + (770, 2) INFO: Compiling void BaseSoccer::npcatk_setmovedest() + (790, 35) ERROR: Expected expression value + (790, 35) ERROR: Instead found '' + (794, 35) ERROR: Expected expression value + (794, 35) ERROR: Instead found '' + (858, 2) INFO: Compiling void BaseSoccer::soc_ball_scoop() + (866, 49) ERROR: Expected expression value + (866, 49) ERROR: Instead found '' + (877, 2) INFO: Compiling void BaseSoccer::soc_ball_release() + (884, 42) ERROR: Expected expression value + (884, 42) ERROR: Instead found '' + (886, 44) ERROR: Expected expression value + (886, 44) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\game_master.as + (11, 2) INFO: Compiling void GameMaster::gm_soccer_blue_toggle() + (13, 3) ERROR: No matching symbol 'LogDebug' + (14, 7) ERROR: Illegal operation on this datatype + (16, 4) ERROR: No matching symbol 'CallExternal' + (18, 21) ERROR: No matching symbol 'GetEntityName' + (20, 4) ERROR: No matching symbol 'SendInfoMsg' + (21, 4) ERROR: No matching symbol 'UseTrigger' + (26, 21) ERROR: No matching symbol 'GetEntityName' + (28, 4) ERROR: No matching symbol 'SendInfoMsg' + (29, 4) ERROR: No matching symbol 'CallExternal' + (33, 2) INFO: Compiling void GameMaster::gm_soccer_red_toggle() + (35, 3) ERROR: No matching symbol 'LogDebug' + (36, 7) ERROR: Illegal operation on this datatype + (38, 4) ERROR: No matching symbol 'CallExternal' + (40, 21) ERROR: No matching symbol 'GetEntityName' + (42, 4) ERROR: No matching symbol 'SendInfoMsg' + (43, 4) ERROR: No matching symbol 'UseTrigger' + (48, 21) ERROR: No matching symbol 'GetEntityName' + (50, 4) ERROR: No matching symbol 'SendInfoMsg' + (51, 4) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\goal_blue_ref.as + (8, 2) INFO: Compiling void GoalBlueRef::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetModel' + (11, 3) ERROR: No matching symbol 'SetWidth' + (12, 3) ERROR: No matching symbol 'SetHeight' + (13, 3) ERROR: No matching symbol 'SetGravity' + (14, 3) ERROR: No matching symbol 'SetNoPush' + (15, 3) ERROR: No matching symbol 'SetInvincible' + (16, 3) ERROR: No matching symbol 'SetName' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\goal_red_ref.as + (8, 2) INFO: Compiling void GoalRedRef::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetModel' + (11, 3) ERROR: No matching symbol 'SetWidth' + (12, 3) ERROR: No matching symbol 'SetHeight' + (13, 3) ERROR: No matching symbol 'SetGravity' + (14, 3) ERROR: No matching symbol 'SetNoPush' + (15, 3) ERROR: No matching symbol 'SetInvincible' + (16, 3) ERROR: No matching symbol 'SetName' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\push_goalie_blue.as + (10, 2) INFO: Compiling void PushGoalieBlue::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 34) ERROR: No matching symbol 'GetOwner' + (14, 3) ERROR: No matching symbol 'LogDebug' + (15, 3) ERROR: No matching symbol 'SetAlive' + (16, 3) ERROR: No matching symbol 'SetCallback' + (19, 2) INFO: Compiling void PushGoalieBlue::extsoc_del_blue_pushgoal() + (21, 3) ERROR: No matching symbol 'DeleteEntity' + (22, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\push_goalie_red.as + (10, 2) INFO: Compiling void PushGoalieRed::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 34) ERROR: No matching symbol 'GetOwner' + (14, 3) ERROR: No matching symbol 'LogDebug' + (15, 3) ERROR: No matching symbol 'SetAlive' + (16, 3) ERROR: No matching symbol 'SetCallback' + (19, 2) INFO: Compiling void PushGoalieRed::extsoc_del_red_pushgoal() + (21, 3) ERROR: No matching symbol 'DeleteEntity' + (22, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\soccer_ball.as + (8, 7) ERROR: Method 'void SoccerBall::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\sorc1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_soccer\troll1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_underworldv2\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\chest_maldora.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\chest_voldar.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\game_master.as + (8, 2) INFO: Compiling void GameMaster::game_triggered() + (10, 7) ERROR: No matching symbol 'param1' + (12, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (16, 2) INFO: Compiling void GameMaster::sailor_moon() + (19, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\maldora.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\maldora_dead.as + (18, 2) INFO: Compiling MaldoraDead::MaldoraDead() + (23, 3) ERROR: No matching symbol 'Precache' + (26, 3) ERROR: No matching symbol 'Precache' + (27, 3) ERROR: No matching symbol 'Precache' + (30, 2) INFO: Compiling void MaldoraDead::OnSpawn() + (32, 3) ERROR: No matching symbol 'SetName' + (33, 3) ERROR: No matching symbol 'SetHealth' + (34, 3) ERROR: No matching symbol 'SetRace' + (35, 3) ERROR: No matching symbol 'SetInvincible' + (36, 3) ERROR: No matching symbol 'SetModel' + (37, 3) ERROR: No matching symbol 'SetProp' + (38, 3) ERROR: No matching symbol 'SetProp' + (39, 3) ERROR: No matching symbol 'SetSolid' + (40, 3) ERROR: No matching symbol 'SetWidth' + (41, 3) ERROR: No matching symbol 'SetHeight' + (42, 3) ERROR: No matching symbol 'SetBloodType' + (43, 3) ERROR: No matching symbol 'SetRoam' + (44, 3) ERROR: No matching symbol 'SetSayTextRange' + (45, 3) ERROR: No matching symbol 'SetName' + (46, 3) ERROR: No matching symbol 'SetIdleAnim' + (47, 3) ERROR: No matching symbol 'SetMoveAnim' + (50, 2) INFO: Compiling void MaldoraDead::game_precache() + (52, 3) ERROR: No matching symbol 'Precache' + (55, 2) INFO: Compiling void MaldoraDead::make_barrier() + (57, 59) ERROR: Expected expression value + (57, 59) ERROR: Instead found '' + (62, 2) INFO: Compiling void MaldoraDead::game_dynamically_created() + (65, 7) ERROR: No matching symbol 'param1' + (67, 8) ERROR: No matching symbol 'param1' + (70, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (72, 7) ERROR: No matching symbol 'param1' + (77, 7) ERROR: No matching symbol 'param1' + (82, 7) ERROR: No matching symbol 'param1' + (85, 4) ERROR: No matching symbol 'SetProp' + (86, 4) ERROR: No matching symbol 'SetProp' + (88, 4) ERROR: No matching symbol 'LogDebug' + (89, 8) ERROR: No matching symbol 'param2' + (92, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (93, 15) ERROR: No matching symbol 'param2' + (97, 2) INFO: Compiling void MaldoraDead::spawn_axe() + (99, 3) ERROR: No matching symbol 'SayText' + (100, 13) ERROR: No matching symbol 'GetOwner' + (101, 16) ERROR: No conversion from 'string' to 'int' available. + (105, 16) ERROR: No conversion from 'string' to 'int' available. + (109, 16) ERROR: No conversion from 'string' to 'int' available. + (113, 16) ERROR: No conversion from 'string' to 'int' available. + (117, 16) ERROR: No conversion from 'string' to 'int' available. + (121, 3) ERROR: No matching symbol 'SetProp' + (122, 3) ERROR: No matching symbol 'CallExternal' + (125, 2) INFO: Compiling void MaldoraDead::say_gaveyou1() + (127, 3) ERROR: No matching symbol 'PlayAnim' + (128, 3) ERROR: No matching symbol 'SayText' + (129, 13) ERROR: No matching symbol 'GetOwner' + (132, 2) INFO: Compiling void MaldoraDead::say_gaveyou2() + (134, 3) ERROR: No matching symbol 'SayText' + (135, 13) ERROR: No matching symbol 'GetOwner' + (138, 2) INFO: Compiling void MaldoraDead::say_gaveyou3() + (140, 3) ERROR: No matching symbol 'PlayAnim' + (143, 4) ERROR: No matching symbol 'SayText' + (147, 4) ERROR: No matching symbol 'SayText' + (151, 4) ERROR: No matching symbol 'SayText' + (155, 4) ERROR: No matching symbol 'SayText' + (159, 4) ERROR: No matching symbol 'SayText' + (163, 4) ERROR: No matching symbol 'SayText' + (167, 4) ERROR: No matching symbol 'SayText' + (169, 13) ERROR: No matching symbol 'GetOwner' + (172, 2) INFO: Compiling void MaldoraDead::say_gaveyou4() + (174, 3) ERROR: No matching symbol 'SayText' + (175, 13) ERROR: No matching symbol 'GetOwner' + (178, 2) INFO: Compiling void MaldoraDead::remove_me() + (180, 3) ERROR: No matching symbol 'DeleteEntity' + (183, 2) INFO: Compiling void MaldoraDead::face_me() + (185, 3) ERROR: No matching symbol 'SetAngles' + (186, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (189, 2) INFO: Compiling void MaldoraDead::straighten_up() + (191, 3) ERROR: No matching symbol 'SetAngles' + (194, 2) INFO: Compiling void MaldoraDead::fly_out() + (201, 42) ERROR: Expected expression value + (201, 42) ERROR: Instead found '' + (208, 2) INFO: Compiling void MaldoraDead::fly_out_loop() + (210, 18) ERROR: No matching symbol 'GetMonsterProperty' + (211, 18) ERROR: No matching symbol 'GetMonsterProperty' + (212, 11) ERROR: No matching symbol 'GetMonsterProperty' + (214, 31) ERROR: No matching signatures to 'Vector3(string, string, string)' + (214, 31) INFO: Candidates are: + (214, 31) INFO: Vector3::Vector3() + (214, 31) INFO: Vector3::Vector3(float, float, float) + (214, 31) INFO: Rejected due to type mismatch at positional parameter 1 + (214, 31) INFO: Vector3::Vector3(const Vector3&in) + (214, 19) ERROR: No matching symbol 'GetOwner' + (221, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (225, 2) INFO: Compiling void MaldoraDead::death_exit() + (227, 3) ERROR: No matching symbol 'SayText' + (228, 13) ERROR: No matching symbol 'GetOwner' + (229, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (232, 2) INFO: Compiling void MaldoraDead::death_exit2() + (234, 3) ERROR: No matching symbol 'SayText' + (235, 13) ERROR: No matching symbol 'GetOwner' + (236, 23) ERROR: No matching symbol 'StringToLower' + (239, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (243, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (247, 2) INFO: Compiling void MaldoraDead::death_exit3() + (249, 3) ERROR: No matching symbol 'SayText' + (250, 13) ERROR: No matching symbol 'GetOwner' + (251, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\maldora_image.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\orc_archer_image.as + (8, 2) INFO: Compiling void OrcArcherImage::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetName' + (11, 3) ERROR: No matching symbol 'SetRace' + (12, 3) ERROR: No matching symbol 'SetInvincible' + (13, 3) ERROR: No matching symbol 'SetName' + (14, 3) ERROR: No matching symbol 'SetModel' + (15, 3) ERROR: No matching symbol 'SetSolid' + (16, 3) ERROR: No matching symbol 'SetSayTextRange' + (17, 3) ERROR: No matching symbol 'SetModelBody' + (18, 3) ERROR: No matching symbol 'SetModelBody' + (19, 3) ERROR: No matching symbol 'SetModelBody' + (22, 2) INFO: Compiling void OrcArcherImage::say_excuse1() + (24, 3) ERROR: No matching symbol 'PlayAnim' + (33, 3) ERROR: No matching symbol 'SayText' + (34, 13) ERROR: No matching symbol 'GetOwner' + (37, 2) INFO: Compiling void OrcArcherImage::say_whadup() + (39, 3) ERROR: No matching symbol 'PlayAnim' + (40, 3) ERROR: No matching symbol 'SayText' + (41, 13) ERROR: No matching symbol 'GetOwner' + (44, 2) INFO: Compiling void OrcArcherImage::die() + (46, 3) ERROR: No matching symbol 'SetIdleAnim' + (47, 3) ERROR: No matching symbol 'SetMoveAnim' + (48, 13) ERROR: No matching symbol 'GetOwner' + (49, 3) ERROR: No matching symbol 'PlayAnim' + (50, 3) ERROR: No matching symbol 'Effect' + (51, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (54, 2) INFO: Compiling void OrcArcherImage::remove_me() + (56, 3) ERROR: No matching symbol 'DeleteEntity' + (59, 2) INFO: Compiling void OrcArcherImage::face_me() + (61, 3) ERROR: No matching symbol 'SetAngles' + (62, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (65, 2) INFO: Compiling void OrcArcherImage::straighten_up() + (67, 3) ERROR: No matching symbol 'SetAngles' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ms_wicardoven\orc_champion_image.as + (8, 2) INFO: Compiling void OrcChampionImage::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetName' + (11, 3) ERROR: No matching symbol 'SetRace' + (12, 3) ERROR: No matching symbol 'SetInvincible' + (13, 3) ERROR: No matching symbol 'SetName' + (14, 3) ERROR: No matching symbol 'SetModel' + (15, 3) ERROR: No matching symbol 'SetSolid' + (16, 3) ERROR: No matching symbol 'SetSayTextRange' + (17, 3) ERROR: No matching symbol 'SetModelBody' + (18, 3) ERROR: No matching symbol 'SetModelBody' + (19, 3) ERROR: No matching symbol 'SetModelBody' + (22, 2) INFO: Compiling void OrcChampionImage::say_minions() + (24, 3) ERROR: No matching symbol 'PlayAnim' + (25, 3) ERROR: No matching symbol 'SayText' + (26, 13) ERROR: No matching symbol 'GetOwner' + (29, 2) INFO: Compiling void OrcChampionImage::die() + (31, 3) ERROR: No matching symbol 'SetIdleAnim' + (32, 3) ERROR: No matching symbol 'SetMoveAnim' + (33, 13) ERROR: No matching symbol 'GetOwner' + (34, 3) ERROR: No matching symbol 'PlayAnim' + (35, 3) ERROR: No matching symbol 'Effect' + (36, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (39, 2) INFO: Compiling void OrcChampionImage::remove_me() + (41, 3) ERROR: No matching symbol 'DeleteEntity' + (44, 2) INFO: Compiling void OrcChampionImage::face_me() + (46, 3) ERROR: No matching symbol 'SetAngles' + (47, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (50, 2) INFO: Compiling void OrcChampionImage::straighten_up() + (52, 3) ERROR: No matching symbol 'SetAngles' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\base_pillar_check.as + (11, 2) INFO: Compiling void BasePillarCheck::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetInvincible' + (14, 3) ERROR: No matching symbol 'SetNoPush' + (16, 3) ERROR: No matching symbol 'SetSolid' + (17, 3) ERROR: No matching symbol 'SetModel' + (20, 2) INFO: Compiling void BasePillarCheck::ext_check_targets() + (22, 18) ERROR: No matching symbol 'FindEntitiesInSphere' + (25, 2) INFO: Compiling void BasePillarCheck::ext_do_shake() + (28, 3) ERROR: No matching symbol 'Effect' + (29, 13) ERROR: No matching symbol 'GetOwner' + (32, 2) INFO: Compiling void BasePillarCheck::ext_do_boom() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BasePillarCheck::ext_do_boom2() + (39, 13) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\base_storm_brush.as + (16, 2) INFO: Compiling void BaseStormBrush::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetProp' + (19, 3) ERROR: No matching symbol 'SetProp' + (22, 2) INFO: Compiling void BaseStormBrush::storm_show() + (24, 3) ERROR: No matching symbol 'SetProp' + (25, 3) ERROR: No matching symbol 'SetProp' + (28, 2) INFO: Compiling void BaseStormBrush::storm_hide() + (30, 3) ERROR: No matching symbol 'SetProp' + (31, 3) ERROR: No matching symbol 'SetProp' + (34, 2) INFO: Compiling void BaseStormBrush::storm_change_speed() + (36, 3) ERROR: No matching symbol 'SetProp' + (45, 2) INFO: Compiling void BaseStormBrush::storm_fade_in_loop() + (47, 19) ERROR: No matching symbol 'BASE_RENDERAMT' + (49, 17) ERROR: No matching symbol 'BASE_RENDERAMT' + (51, 14) ERROR: No matching symbol 'BASE_RENDERAMT' + (53, 3) ERROR: No matching symbol 'SetProp' + (54, 3) ERROR: No matching symbol 'SetProp' + (55, 19) ERROR: No matching symbol 'BASE_RENDERAMT' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void BaseStormBrush::storm_fade_out() + (61, 13) ERROR: No matching symbol 'BASE_RENDERAMT' + (65, 2) INFO: Compiling void BaseStormBrush::storm_fade_out_loop() + (73, 3) ERROR: No matching symbol 'SetProp' + (74, 3) ERROR: No matching symbol 'SetProp' + (76, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\brush_storm_cold.as + (10, 2) INFO: Compiling BrushStormCold::BrushStormCold() + (12, 3) ERROR: No matching symbol 'SetName' + (16, 2) INFO: Compiling void BaseStormBrush::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetProp' + (19, 3) ERROR: No matching symbol 'SetProp' + (22, 2) INFO: Compiling void BaseStormBrush::storm_show() + (24, 3) ERROR: No matching symbol 'SetProp' + (25, 3) ERROR: No matching symbol 'SetProp' + (28, 2) INFO: Compiling void BaseStormBrush::storm_hide() + (30, 3) ERROR: No matching symbol 'SetProp' + (31, 3) ERROR: No matching symbol 'SetProp' + (34, 2) INFO: Compiling void BaseStormBrush::storm_change_speed() + (36, 3) ERROR: No matching symbol 'SetProp' + (45, 2) INFO: Compiling void BaseStormBrush::storm_fade_in_loop() + (47, 19) ERROR: No matching symbol 'BASE_RENDERAMT' + (49, 17) ERROR: No matching symbol 'BASE_RENDERAMT' + (51, 14) ERROR: No matching symbol 'BASE_RENDERAMT' + (53, 3) ERROR: No matching symbol 'SetProp' + (54, 3) ERROR: No matching symbol 'SetProp' + (55, 19) ERROR: No matching symbol 'BASE_RENDERAMT' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void BaseStormBrush::storm_fade_out() + (61, 13) ERROR: No matching symbol 'BASE_RENDERAMT' + (65, 2) INFO: Compiling void BaseStormBrush::storm_fade_out_loop() + (73, 3) ERROR: No matching symbol 'SetProp' + (74, 3) ERROR: No matching symbol 'SetProp' + (76, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\brush_storm_fire.as + (10, 2) INFO: Compiling BrushStormFire::BrushStormFire() + (12, 3) ERROR: No matching symbol 'SetName' + (16, 2) INFO: Compiling void BaseStormBrush::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetProp' + (19, 3) ERROR: No matching symbol 'SetProp' + (22, 2) INFO: Compiling void BaseStormBrush::storm_show() + (24, 3) ERROR: No matching symbol 'SetProp' + (25, 3) ERROR: No matching symbol 'SetProp' + (28, 2) INFO: Compiling void BaseStormBrush::storm_hide() + (30, 3) ERROR: No matching symbol 'SetProp' + (31, 3) ERROR: No matching symbol 'SetProp' + (34, 2) INFO: Compiling void BaseStormBrush::storm_change_speed() + (36, 3) ERROR: No matching symbol 'SetProp' + (45, 2) INFO: Compiling void BaseStormBrush::storm_fade_in_loop() + (47, 19) ERROR: No matching symbol 'BASE_RENDERAMT' + (49, 17) ERROR: No matching symbol 'BASE_RENDERAMT' + (51, 14) ERROR: No matching symbol 'BASE_RENDERAMT' + (53, 3) ERROR: No matching symbol 'SetProp' + (54, 3) ERROR: No matching symbol 'SetProp' + (55, 19) ERROR: No matching symbol 'BASE_RENDERAMT' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void BaseStormBrush::storm_fade_out() + (61, 13) ERROR: No matching symbol 'BASE_RENDERAMT' + (65, 2) INFO: Compiling void BaseStormBrush::storm_fade_out_loop() + (73, 3) ERROR: No matching symbol 'SetProp' + (74, 3) ERROR: No matching symbol 'SetProp' + (76, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\brush_storm_lightning1.as + (10, 2) INFO: Compiling BrushStormLightning1::BrushStormLightning1() + (12, 3) ERROR: No matching symbol 'SetName' + (16, 2) INFO: Compiling void BaseStormBrush::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetProp' + (19, 3) ERROR: No matching symbol 'SetProp' + (22, 2) INFO: Compiling void BaseStormBrush::storm_show() + (24, 3) ERROR: No matching symbol 'SetProp' + (25, 3) ERROR: No matching symbol 'SetProp' + (28, 2) INFO: Compiling void BaseStormBrush::storm_hide() + (30, 3) ERROR: No matching symbol 'SetProp' + (31, 3) ERROR: No matching symbol 'SetProp' + (34, 2) INFO: Compiling void BaseStormBrush::storm_change_speed() + (36, 3) ERROR: No matching symbol 'SetProp' + (45, 2) INFO: Compiling void BaseStormBrush::storm_fade_in_loop() + (47, 19) ERROR: No matching symbol 'BASE_RENDERAMT' + (49, 17) ERROR: No matching symbol 'BASE_RENDERAMT' + (51, 14) ERROR: No matching symbol 'BASE_RENDERAMT' + (53, 3) ERROR: No matching symbol 'SetProp' + (54, 3) ERROR: No matching symbol 'SetProp' + (55, 19) ERROR: No matching symbol 'BASE_RENDERAMT' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void BaseStormBrush::storm_fade_out() + (61, 13) ERROR: No matching symbol 'BASE_RENDERAMT' + (65, 2) INFO: Compiling void BaseStormBrush::storm_fade_out_loop() + (73, 3) ERROR: No matching symbol 'SetProp' + (74, 3) ERROR: No matching symbol 'SetProp' + (76, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\brush_storm_lightning2.as + (10, 2) INFO: Compiling BrushStormLightning2::BrushStormLightning2() + (12, 3) ERROR: No matching symbol 'SetName' + (17, 2) INFO: Compiling void BrushStormLightning2::do_flicker() + (20, 11) ERROR: Expected ')' or ',' + (20, 11) ERROR: Instead found identifier '_1' + (16, 2) INFO: Compiling void BaseStormBrush::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetProp' + (19, 3) ERROR: No matching symbol 'SetProp' + (22, 2) INFO: Compiling void BaseStormBrush::storm_show() + (24, 3) ERROR: No matching symbol 'SetProp' + (25, 3) ERROR: No matching symbol 'SetProp' + (28, 2) INFO: Compiling void BaseStormBrush::storm_hide() + (30, 3) ERROR: No matching symbol 'SetProp' + (31, 3) ERROR: No matching symbol 'SetProp' + (34, 2) INFO: Compiling void BaseStormBrush::storm_change_speed() + (36, 3) ERROR: No matching symbol 'SetProp' + (45, 2) INFO: Compiling void BaseStormBrush::storm_fade_in_loop() + (47, 19) ERROR: No matching symbol 'BASE_RENDERAMT' + (49, 17) ERROR: No matching symbol 'BASE_RENDERAMT' + (51, 14) ERROR: No matching symbol 'BASE_RENDERAMT' + (53, 3) ERROR: No matching symbol 'SetProp' + (54, 3) ERROR: No matching symbol 'SetProp' + (55, 19) ERROR: No matching symbol 'BASE_RENDERAMT' + (56, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (59, 2) INFO: Compiling void BaseStormBrush::storm_fade_out() + (61, 13) ERROR: No matching symbol 'BASE_RENDERAMT' + (65, 2) INFO: Compiling void BaseStormBrush::storm_fade_out_loop() + (73, 3) ERROR: No matching symbol 'SetProp' + (74, 3) ERROR: No matching symbol 'SetProp' + (76, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\dragon_green_img.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\dragon_green_img_cl.as + (18, 2) INFO: Compiling void DragonGreenImgCl::client_activate() + (22, 35) ERROR: Expected expression value + (22, 35) ERROR: Instead found '' + (23, 37) ERROR: Expected expression value + (23, 37) ERROR: Instead found '' + (40, 2) INFO: Compiling void DragonGreenImgCl::breath_loop() + (43, 11) ERROR: Expected ')' or ',' + (43, 11) ERROR: Instead found identifier '_1' + (44, 73) ERROR: Expected expression value + (44, 73) ERROR: Instead found '' + (47, 2) INFO: Compiling void DragonGreenImgCl::ext_breath_stop() + (50, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (53, 2) INFO: Compiling void DragonGreenImgCl::remove_fx() + (55, 3) ERROR: No matching symbol 'RemoveScript' + (58, 2) INFO: Compiling void DragonGreenImgCl::update_breath_sprite() + (60, 7) ERROR: Illegal operation on this datatype + (61, 30) ERROR: 'z' is not a member of 'const string' + (63, 4) ERROR: No matching symbol 'ClientEffect' + (64, 4) ERROR: No matching symbol 'ClientEffect' + (65, 4) ERROR: No matching symbol 'LogDebug' + (69, 30) ERROR: No conversion from 'const string' to 'int' available. + (72, 4) ERROR: No matching symbol 'ClientEffect' + (75, 19) ERROR: No conversion from 'string' to 'int' available. + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (81, 2) INFO: Compiling void DragonGreenImgCl::setup_breath_sprite() + (87, 79) ERROR: Expected expression value + (87, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\dragon_green_mini.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\dragon_green_mini_cl.as + (13, 2) INFO: Compiling void DragonGreenMiniCl::client_activate() + (15, 14) ERROR: No matching symbol 'param1' + (16, 7) ERROR: No matching symbol 'param2' + (23, 2) INFO: Compiling void DragonGreenMiniCl::breath_loop() + (27, 34) ERROR: Expected expression value + (27, 34) ERROR: Instead found '' + (29, 34) ERROR: Expected expression value + (29, 34) ERROR: Instead found '' + (38, 2) INFO: Compiling void DragonGreenMiniCl::spit_rocks() + (40, 3) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching symbol 'ClientEffect' + (45, 2) INFO: Compiling void DragonGreenMiniCl::end_fx() + (48, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (51, 2) INFO: Compiling void DragonGreenMiniCl::remove_fx() + (53, 3) ERROR: No matching symbol 'RemoveScript' + (56, 2) INFO: Compiling void DragonGreenMiniCl::setup_cloud() + (70, 42) ERROR: Expected expression value + (70, 42) ERROR: Instead found '' + (74, 2) INFO: Compiling void DragonGreenMiniCl::setup_rock() + (81, 42) ERROR: Expected expression value + (81, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\dragon_ice_storm_cl.as + (22, 2) INFO: Compiling void DragonIceStormCl::client_activate() + (24, 15) ERROR: No matching symbol 'param1' + (31, 2) INFO: Compiling void DragonIceStormCl::fx_loop() + (34, 11) ERROR: Expected ')' or ',' + (34, 11) ERROR: Instead found identifier '_2' + (38, 32) ERROR: Expected expression value + (38, 32) ERROR: Instead found '' + (42, 2) INFO: Compiling void DragonIceStormCl::shard_land() + (48, 17) ERROR: No conversion from 'string' to 'int' available. + (50, 4) ERROR: No matching symbol 'EmitSound3D' + (54, 18) ERROR: No conversion from 'string' to 'int' available. + (56, 5) ERROR: No matching symbol 'EmitSound3D' + (61, 2) INFO: Compiling void DragonIceStormCl::setup_ice_spike() + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 40) ERROR: No matching symbol 'MAX_SCALE' + (73, 29) ERROR: No matching symbol 'MIN_SCALE' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (81, 2) INFO: Compiling void DragonIceStormCl::end_fx() + (84, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (87, 2) INFO: Compiling void DragonIceStormCl::remove_fx() + (89, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\game_master.as + (14, 2) INFO: Compiling void GameMaster::gm_nash_tear() + (16, 3) ERROR: No matching symbol 'CallExternal' + (21, 35) ERROR: No matching symbol 'param1' + (23, 4) ERROR: No matching symbol 'SendColoredMessage' + (24, 25) ERROR: No matching symbol 'FindToken' + (25, 4) ERROR: No matching symbol 'RemoveToken' + (30, 4) ERROR: No matching symbol 'SendColoredMessage' + (32, 8) ERROR: No matching symbol 'EXIT_SUB' + (34, 22) ERROR: No matching symbol 'param1' + (35, 3) ERROR: No matching symbol 'SendInfoMsg' + (38, 2) INFO: Compiling void GameMaster::gm_nash_cryskey_found() + (45, 3) ERROR: No matching symbol 'SendInfoMsg' + (48, 2) INFO: Compiling void GameMaster::gm_crys_key_activate() + (50, 3) ERROR: No matching symbol 'LogDebug' + (51, 7) ERROR: Expression must be of boolean type, instead found 'string' + (52, 22) ERROR: No matching symbol 'param2' + (53, 17) ERROR: No conversion from 'string' to 'int' available. + (55, 9) ERROR: No matching symbol 'GM_NASH_KEY1_USED' + (60, 17) ERROR: No conversion from 'string' to 'int' available. + (62, 9) ERROR: No matching symbol 'GM_NASH_KEY2_USED' + (67, 8) ERROR: No matching symbol 'EXIT_SUB' + (68, 20) ERROR: No conversion from 'string' to 'int' available. + (70, 8) ERROR: No matching symbol 'param1' + (72, 23) ERROR: No conversion from 'string' to 'float' available. + (77, 10) ERROR: No matching symbol 'EXIT_SUB' + (82, 21) ERROR: No matching symbol 'param1' + (83, 4) ERROR: No matching symbol 'SendInfoMsg' + (87, 8) ERROR: No matching symbol 'GM_NASH_KEYS_USED' + (89, 5) ERROR: No matching symbol 'GM_NASH_KEYS_USED' + (91, 4) ERROR: No matching symbol 'GM_NASH_KEYS_USED' + (92, 4) ERROR: Illegal operation on 'string' + (93, 18) ERROR: No conversion from 'string' to 'int' available. + (95, 5) ERROR: No matching symbol 'UseTrigger' + (96, 5) ERROR: No matching symbol 'GM_NASH_KEY1_USED' + (98, 18) ERROR: No conversion from 'string' to 'int' available. + (100, 5) ERROR: No matching symbol 'UseTrigger' + (101, 5) ERROR: No matching symbol 'GM_NASH_KEY2_USED' + (103, 4) ERROR: No matching symbol 'SendColoredMessage' + (104, 8) ERROR: No matching symbol 'GM_NASH_KEYS_USED' + (107, 4) ERROR: No matching symbol 'UseTrigger' + (109, 4) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\kayrath.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\kayrath_cl.as + (119, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\lift_check_left.as + (10, 2) INFO: Compiling LiftCheckLeft::LiftCheckLeft() + (12, 3) ERROR: No matching symbol 'SetName' + (11, 2) INFO: Compiling void BasePillarCheck::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetInvincible' + (14, 3) ERROR: No matching symbol 'SetNoPush' + (16, 3) ERROR: No matching symbol 'SetSolid' + (17, 3) ERROR: No matching symbol 'SetModel' + (20, 2) INFO: Compiling void BasePillarCheck::ext_check_targets() + (22, 18) ERROR: No matching symbol 'FindEntitiesInSphere' + (25, 2) INFO: Compiling void BasePillarCheck::ext_do_shake() + (28, 3) ERROR: No matching symbol 'Effect' + (29, 13) ERROR: No matching symbol 'GetOwner' + (32, 2) INFO: Compiling void BasePillarCheck::ext_do_boom() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BasePillarCheck::ext_do_boom2() + (39, 13) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\lift_check_right.as + (10, 2) INFO: Compiling LiftCheckRight::LiftCheckRight() + (12, 3) ERROR: No matching symbol 'SetName' + (11, 2) INFO: Compiling void BasePillarCheck::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetInvincible' + (14, 3) ERROR: No matching symbol 'SetNoPush' + (16, 3) ERROR: No matching symbol 'SetSolid' + (17, 3) ERROR: No matching symbol 'SetModel' + (20, 2) INFO: Compiling void BasePillarCheck::ext_check_targets() + (22, 18) ERROR: No matching symbol 'FindEntitiesInSphere' + (25, 2) INFO: Compiling void BasePillarCheck::ext_do_shake() + (28, 3) ERROR: No matching symbol 'Effect' + (29, 13) ERROR: No matching symbol 'GetOwner' + (32, 2) INFO: Compiling void BasePillarCheck::ext_do_boom() + (34, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void BasePillarCheck::ext_do_boom2() + (39, 13) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\lightning_strike_cl.as + (15, 2) INFO: Compiling void LightningStrikeCl::client_activate() + (17, 15) ERROR: No matching symbol 'param1' + (18, 20) ERROR: No matching symbol 'param2' + (21, 3) ERROR: No matching signatures to 'string::FX_STRIKE_TIME(const string)' + (22, 24) ERROR: No conversion from 'string' to 'int' available. + (24, 3) ERROR: No matching symbol 'ClientEffect' + (26, 3) ERROR: No matching symbol 'SetCallback' + (27, 3) ERROR: No matching symbol 'EmitSound3D' + (29, 3) ERROR: No matching symbol 'ClientEffect' + (32, 2) INFO: Compiling void LightningStrikeCl::game_prerender() + (34, 7) ERROR: Illegal operation on this datatype + (39, 3) ERROR: No matching symbol 'ClientEffect' + (42, 2) INFO: Compiling void LightningStrikeCl::do_strike() + (44, 3) ERROR: No matching symbol 'ClientEffect' + (45, 3) ERROR: No matching symbol 'SetSoundVolume' + (46, 13) ERROR: No matching symbol 'GetOwner' + (47, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (48, 24) ERROR: No conversion from 'string' to 'int' available. + (49, 3) ERROR: No matching symbol 'EmitSound3D' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (57, 2) INFO: Compiling void LightningStrikeCl::remove_fx() + (59, 3) ERROR: No matching symbol 'RemoveScript' + (62, 2) INFO: Compiling void LightningStrikeCl::update_glow_sprite() + (64, 7) ERROR: Illegal operation on this datatype + (66, 19) ERROR: No conversion from 'string' to 'int' available. + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (72, 2) INFO: Compiling void LightningStrikeCl::setup_glow_sprite() + (74, 3) ERROR: No matching symbol 'ClientEffect' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (77, 3) ERROR: No matching symbol 'ClientEffect' + (78, 3) ERROR: No matching symbol 'ClientEffect' + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (85, 2) INFO: Compiling void LightningStrikeCl::setup_spit_sprite() + (97, 79) ERROR: Expected expression value + (97, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nashalrath\wind_cl.as + (13, 2) INFO: Compiling void WindCl::OnRepeatTimer() + (15, 3) ERROR: No matching symbol 'SetRepeatDelay' + (16, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (19, 3) ERROR: No matching symbol 'EmitSound3D' + (22, 2) INFO: Compiling void WindCl::client_activate() + (24, 3) ERROR: No matching symbol 'LogDebug' + (25, 15) ERROR: No matching symbol 'param1' + (26, 14) ERROR: No matching symbol 'param2' + (27, 17) ERROR: No matching symbol 'param3' + (29, 3) ERROR: No matching symbol 'EmitSound3D' + (30, 3) ERROR: No matching symbol 'ClientEffect' + (31, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (34, 2) INFO: Compiling void WindCl::end_fx() + (37, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (40, 2) INFO: Compiling void WindCl::remove_fx() + (42, 3) ERROR: No matching symbol 'RemoveScript' + (45, 2) INFO: Compiling void WindCl::update_wind() + (47, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (51, 2) INFO: Compiling void WindCl::setup_wind() + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare\edanateller.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare\monsters\deadboar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare\monsters\ghostrat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare\monsters\zombie.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/nightmare_thornlands\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\base_arrow_storage.as + (24, 2) INFO: Compiling void BaseArrowStorage::game_menu_getoptions() + (26, 17) ERROR: No matching symbol 'param1' + (27, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (27, 3) INFO: Candidates are: + (27, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (28, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (28, 3) INFO: Candidates are: + (28, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (29, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (29, 3) INFO: Candidates are: + (29, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (30, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (30, 3) INFO: Candidates are: + (30, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (31, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (31, 3) INFO: Candidates are: + (31, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (32, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (32, 3) INFO: Candidates are: + (32, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (33, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (33, 3) INFO: Candidates are: + (33, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (34, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (34, 3) INFO: Candidates are: + (34, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (35, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (35, 3) INFO: Candidates are: + (35, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (36, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (36, 3) INFO: Candidates are: + (36, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (37, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (37, 3) INFO: Candidates are: + (37, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (38, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (38, 3) INFO: Candidates are: + (38, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (39, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (39, 3) INFO: Candidates are: + (39, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (40, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (40, 3) INFO: Candidates are: + (40, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (41, 3) ERROR: No matching signatures to 'BaseArrowStorage::check_for_item(const string, const int)' + (41, 3) INFO: Candidates are: + (41, 3) INFO: void MS::BaseArrowStorage::check_for_item() + (42, 9) ERROR: No matching symbol 'ItemExists' + (44, 20) ERROR: No matching symbol 'GetTokenCount' + (45, 21) ERROR: No conversion from 'string' to 'int' available. + (47, 17) ERROR: No matching symbol 'ARROW_NAMES' + (50, 10) ERROR: 'N_NAMES' is already declared + (51, 21) ERROR: No conversion from 'string' to 'int' available. + (53, 17) ERROR: No matching symbol 'BOLT_NAMES' + (57, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_bolt_fire() + (59, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (59, 3) INFO: Candidates are: + (59, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (62, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_bolt_iron() + (64, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (64, 3) INFO: Candidates are: + (64, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (67, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_bolt_silver() + (69, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (69, 3) INFO: Candidates are: + (69, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (72, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_bolt_steel() + (74, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (74, 3) INFO: Candidates are: + (74, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (77, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_bolt_wooden() + (79, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (79, 3) INFO: Candidates are: + (79, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (82, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_arrow_bluntwooden() + (84, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (84, 3) INFO: Candidates are: + (84, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (87, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_arrow_broadhead() + (89, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (89, 3) INFO: Candidates are: + (89, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (92, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_arrow_fire() + (94, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (94, 3) INFO: Candidates are: + (94, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (97, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_arrow_frost() + (99, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (99, 3) INFO: Candidates are: + (99, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (102, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_arrow_gholy() + (104, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (104, 3) INFO: Candidates are: + (104, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (107, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_arrow_holy() + (109, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (109, 3) INFO: Candidates are: + (109, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (112, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_arrow_jagged() + (114, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (114, 3) INFO: Candidates are: + (114, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (117, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_arrow_poison() + (119, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (119, 3) INFO: Candidates are: + (119, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (122, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_arrow_silvertipped() + (124, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (124, 3) INFO: Candidates are: + (124, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (127, 2) INFO: Compiling void BaseArrowStorage::gticket_proj_arrow_wooden() + (129, 3) ERROR: No matching signatures to 'BaseArrowStorage::give_ticket(const string)' + (129, 3) INFO: Candidates are: + (129, 3) INFO: void MS::BaseArrowStorage::give_ticket() + (132, 2) INFO: Compiling void BaseArrowStorage::give_ticket() + (134, 22) ERROR: No matching symbol 'param1' + (138, 3) ERROR: No matching symbol 'PlayAnim' + (139, 3) ERROR: No matching symbol 'SayText' + (142, 2) INFO: Compiling void BaseArrowStorage::list_tickets() + (150, 10) ERROR: Expected ';' + (150, 10) ERROR: Instead found identifier 'reg' + (151, 10) ERROR: Expected ';' + (151, 10) ERROR: Instead found identifier 'reg' + (152, 10) ERROR: Expected ';' + (152, 10) ERROR: Instead found identifier 'reg' + (153, 10) ERROR: Expected ';' + (153, 10) ERROR: Instead found identifier 'reg' + (156, 2) INFO: Compiling void BaseArrowStorage::redeem_ticket() + (158, 20) ERROR: No matching symbol 'param2' + (161, 8) ERROR: No matching symbol 'ItemExists' + (163, 4) ERROR: No matching symbol 'PlayAnim' + (164, 25) ERROR: No matching symbol 'ItemExists' + (166, 4) ERROR: No matching symbol 'PlayAnim' + (167, 4) ERROR: No matching symbol 'SayText' + (171, 4) ERROR: No matching symbol 'SayText' + (172, 4) ERROR: No matching symbol 'PlayAnim' + (176, 2) INFO: Compiling void BaseArrowStorage::not_enough_arrows() + (178, 3) ERROR: No matching symbol 'PlayAnim' + (179, 3) ERROR: No matching symbol 'SayText' + (182, 2) INFO: Compiling void BaseArrowStorage::check_for_item() + (190, 10) ERROR: Expected ';' + (190, 10) ERROR: Instead found identifier 'reg' + (191, 10) ERROR: Expected ';' + (191, 10) ERROR: Instead found identifier 'reg' + (192, 10) ERROR: Expected ';' + (192, 10) ERROR: Instead found identifier 'reg' + (193, 10) ERROR: Expected ';' + (193, 10) ERROR: Instead found identifier 'reg' + (194, 10) ERROR: Expected ';' + (194, 10) ERROR: Instead found identifier 'reg' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\base_banker.as + (6, 7) ERROR: Method 'void BaseBanker::OnUse(CBaseEntity@, CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\base_fletcher.as + (30, 2) INFO: Compiling void BaseFletcher::game_menu_getoptions() + (47, 12) ERROR: Expected ';' + (47, 12) ERROR: Instead found identifier 'reg' + (48, 12) ERROR: Expected ';' + (48, 12) ERROR: Instead found identifier 'reg' + (49, 9) ERROR: Expected '(' + (49, 9) ERROR: Instead found identifier 'reg' + (50, 12) ERROR: Expected ';' + (50, 12) ERROR: Instead found identifier 'reg' + (51, 12) ERROR: Expected ';' + (51, 12) ERROR: Instead found identifier 'reg' + (52, 12) ERROR: Expected ';' + (52, 12) ERROR: Instead found identifier 'reg' + (53, 9) ERROR: Expected '(' + (53, 9) ERROR: Instead found identifier 'reg' + (54, 12) ERROR: Expected ';' + (54, 12) ERROR: Instead found identifier 'reg' + (58, 12) ERROR: Expected ';' + (58, 12) ERROR: Instead found identifier 'reg' + (59, 12) ERROR: Expected ';' + (59, 12) ERROR: Instead found identifier 'reg' + (60, 9) ERROR: Expected '(' + (60, 9) ERROR: Instead found identifier 'reg' + (61, 12) ERROR: Expected ';' + (61, 12) ERROR: Instead found identifier 'reg' + (62, 12) ERROR: Expected ';' + (62, 12) ERROR: Instead found identifier 'reg' + (63, 12) ERROR: Expected ';' + (63, 12) ERROR: Instead found identifier 'reg' + (64, 9) ERROR: Expected '(' + (64, 9) ERROR: Instead found identifier 'reg' + (65, 12) ERROR: Expected ';' + (65, 12) ERROR: Instead found identifier 'reg' + (87, 2) INFO: Compiling void BaseFletcher::bundle_arrows_menu() + (91, 16) ERROR: No matching symbol 'param2' + (93, 3) ERROR: No matching symbol 'OpenMenu' + (94, 3) ERROR: No matching symbol 'PlayAnim' + (95, 3) ERROR: No matching symbol 'SayText' + (98, 2) INFO: Compiling void BaseFletcher::bundle_bolts_menu() + (102, 16) ERROR: No matching symbol 'param2' + (104, 3) ERROR: No matching symbol 'OpenMenu' + (105, 3) ERROR: No matching symbol 'PlayAnim' + (106, 3) ERROR: No matching symbol 'SayText' + (109, 2) INFO: Compiling void BaseFletcher::add_arrow_options() + (122, 10) ERROR: Expected ';' + (122, 10) ERROR: Instead found identifier 'reg' + (123, 10) ERROR: Expected ';' + (123, 10) ERROR: Instead found identifier 'reg' + (124, 10) ERROR: Expected ';' + (124, 10) ERROR: Instead found identifier 'reg' + (125, 10) ERROR: Expected ';' + (125, 10) ERROR: Instead found identifier 'reg' + (126, 10) ERROR: Expected ';' + (126, 10) ERROR: Instead found identifier 'reg' + (129, 2) INFO: Compiling void BaseFletcher::add_bolt_options() + (141, 10) ERROR: Expected ';' + (141, 10) ERROR: Instead found identifier 'reg' + (142, 10) ERROR: Expected ';' + (142, 10) ERROR: Instead found identifier 'reg' + (143, 10) ERROR: Expected ';' + (143, 10) ERROR: Instead found identifier 'reg' + (144, 10) ERROR: Expected ';' + (144, 10) ERROR: Instead found identifier 'reg' + (145, 10) ERROR: Expected ';' + (145, 10) ERROR: Instead found identifier 'reg' + (148, 2) INFO: Compiling void BaseFletcher::check_arrows() + (150, 21) ERROR: No matching symbol 'GetToken' + (152, 22) ERROR: No matching symbol 'ItemExists' + (156, 2) INFO: Compiling void BaseFletcher::check_bolts() + (158, 21) ERROR: No matching symbol 'GetToken' + (160, 22) ERROR: No matching symbol 'ItemExists' + (164, 2) INFO: Compiling void BaseFletcher::not_enough_arrows() + (166, 3) ERROR: No matching symbol 'PlayAnim' + (167, 3) ERROR: No matching symbol 'SayText' + (268, 2) INFO: Compiling void BaseFletcher::return_bundle() + (270, 3) ERROR: No matching symbol 'LogDebug' + (275, 3) ERROR: No matching symbol 'PlayAnim' + (276, 3) ERROR: No matching symbol 'SayText' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\base_storage.as + (43, 2) INFO: Compiling BaseStorage::BaseStorage() + (45, 53) ERROR: Expected expression value + (45, 53) ERROR: Instead found '' + (86, 2) INFO: Compiling void BaseStorage::OnSpawn() + (88, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (91, 2) INFO: Compiling void BaseStorage::create_bank() + (93, 28) ERROR: No matching symbol 'GALA_CHEST_POS' + (95, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (98, 2) INFO: Compiling void BaseStorage::game_menu_getoptions() + (112, 12) ERROR: Expected ';' + (112, 12) ERROR: Instead found identifier 'reg' + (113, 12) ERROR: Expected ';' + (113, 12) ERROR: Instead found identifier 'reg' + (114, 12) ERROR: Expected ';' + (114, 12) ERROR: Instead found identifier 'reg' + (115, 12) ERROR: Expected ';' + (115, 12) ERROR: Instead found identifier 'reg' + (119, 12) ERROR: Expected ';' + (119, 12) ERROR: Instead found identifier 'reg' + (120, 12) ERROR: Expected ';' + (120, 12) ERROR: Instead found identifier 'reg' + (121, 12) ERROR: Expected ';' + (121, 12) ERROR: Instead found identifier 'reg' + (122, 12) ERROR: Expected ';' + (122, 12) ERROR: Instead found identifier 'reg' + (124, 11) ERROR: Expected ';' + (124, 11) ERROR: Instead found identifier 'reg' + (125, 11) ERROR: Expected ';' + (125, 11) ERROR: Instead found identifier 'reg' + (126, 11) ERROR: Expected ';' + (126, 11) ERROR: Instead found identifier 'reg' + (127, 11) ERROR: Expected ';' + (127, 11) ERROR: Instead found identifier 'reg' + (130, 11) ERROR: Expected ';' + (130, 11) ERROR: Instead found identifier 'reg' + (131, 11) ERROR: Expected ';' + (131, 11) ERROR: Instead found identifier 'reg' + (133, 11) ERROR: Expected ';' + (133, 11) ERROR: Instead found identifier 'reg' + (134, 11) ERROR: Expected ';' + (134, 11) ERROR: Instead found identifier 'reg' + (135, 11) ERROR: Expected ';' + (135, 11) ERROR: Instead found identifier 'reg' + (136, 11) ERROR: Expected ';' + (136, 11) ERROR: Instead found identifier 'reg' + (137, 11) ERROR: Expected ';' + (137, 11) ERROR: Instead found identifier 'reg' + (164, 11) ERROR: Expected ';' + (164, 11) ERROR: Instead found identifier 'reg' + (165, 11) ERROR: Expected ';' + (165, 11) ERROR: Instead found identifier 'reg' + (166, 11) ERROR: Expected ';' + (166, 11) ERROR: Instead found identifier 'reg' + (167, 11) ERROR: Expected ';' + (167, 11) ERROR: Instead found identifier 'reg' + (168, 11) ERROR: Expected ';' + (168, 11) ERROR: Instead found identifier 'reg' + (174, 12) ERROR: Expected ';' + (174, 12) ERROR: Instead found identifier 'reg' + (179, 12) ERROR: Expected ';' + (179, 12) ERROR: Instead found identifier 'reg' + (186, 12) ERROR: Expected ';' + (186, 12) ERROR: Instead found identifier 'reg' + (187, 12) ERROR: Expected ';' + (187, 12) ERROR: Instead found identifier 'reg' + (188, 12) ERROR: Expected ';' + (188, 12) ERROR: Instead found identifier 'reg' + (189, 12) ERROR: Expected ';' + (189, 12) ERROR: Instead found identifier 'reg' + (190, 9) ERROR: Expected '(' + (190, 9) ERROR: Instead found identifier 'reg' + (194, 10) ERROR: Expected ';' + (194, 10) ERROR: Instead found identifier 'reg' + (217, 2) INFO: Compiling void BaseStorage::check_inventory() + (242, 12) ERROR: Expected ';' + (242, 12) ERROR: Instead found identifier 'reg' + (243, 12) ERROR: Expected ';' + (243, 12) ERROR: Instead found identifier 'reg' + (244, 12) ERROR: Expected ';' + (244, 12) ERROR: Instead found identifier 'reg' + (245, 12) ERROR: Expected ';' + (245, 12) ERROR: Instead found identifier 'reg' + (246, 12) ERROR: Expected ';' + (246, 12) ERROR: Instead found identifier 'reg' + (276, 11) ERROR: Expected ';' + (276, 11) ERROR: Instead found identifier 'reg' + (277, 11) ERROR: Expected ';' + (277, 11) ERROR: Instead found identifier 'reg' + (278, 11) ERROR: Expected ';' + (278, 11) ERROR: Instead found identifier 'reg' + (279, 11) ERROR: Expected ';' + (279, 11) ERROR: Instead found identifier 'reg' + (280, 11) ERROR: Expected ';' + (280, 11) ERROR: Instead found identifier 'reg' + (304, 2) INFO: Compiling void BaseStorage::activate_storage() + (306, 3) ERROR: No matching symbol 'SayText' + (308, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (311, 2) INFO: Compiling void BaseStorage::activate_tickets() + (314, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (317, 2) INFO: Compiling void BaseStorage::say_select_item() + (319, 3) ERROR: No matching symbol 'SayText' + (322, 2) INFO: Compiling void BaseStorage::return_ticket() + (324, 20) ERROR: No matching symbol 'param2' + (327, 8) ERROR: No matching symbol 'ItemExists' + (329, 25) ERROR: No matching symbol 'ItemExists' + (331, 4) ERROR: No matching symbol 'bteller_give_ticket' + (332, 4) ERROR: No matching symbol 'SayText' + (336, 4) ERROR: No matching symbol 'SayText' + (337, 4) ERROR: No matching symbol 'PlayAnim' + (338, 4) ERROR: No matching symbol 'bteller_error_no_item' + (343, 2) INFO: Compiling void BaseStorage::open_menu() + (345, 3) ERROR: No matching symbol 'OpenMenu' + (361, 2) INFO: Compiling void BaseStorage::cancel_trade() + (363, 3) ERROR: No matching symbol 'SayText' + (368, 2) INFO: Compiling void BaseStorage::display_abort() + (370, 10) ERROR: Expected ';' + (370, 10) ERROR: Instead found identifier 'reg' + (371, 10) ERROR: Expected ';' + (371, 10) ERROR: Instead found identifier 'reg' + (372, 10) ERROR: Expected ';' + (372, 10) ERROR: Instead found identifier 'reg' + (373, 10) ERROR: Expected ';' + (373, 10) ERROR: Instead found identifier 'reg' + (376, 2) INFO: Compiling void BaseStorage::redeem_ticket() + (378, 20) ERROR: No matching symbol 'param2' + (381, 8) ERROR: No matching symbol 'ItemExists' + (383, 4) ERROR: No matching symbol 'PlayAnim' + (384, 25) ERROR: No matching symbol 'ItemExists' + (386, 4) ERROR: No matching symbol 'SayText' + (387, 4) ERROR: No matching symbol 'bteller_ticket_redeemed' + (391, 4) ERROR: No matching symbol 'SayText' + (392, 4) ERROR: No matching symbol 'PlayAnim' + (393, 4) ERROR: No matching symbol 'bteller_error_no_item' + (398, 2) INFO: Compiling void BaseStorage::enum_all() + (401, 17) ERROR: No matching symbol 'GetTokenCount' + (402, 21) ERROR: No conversion from 'string' to 'int' available. + (404, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (404, 4) INFO: Candidates are: + (404, 4) INFO: void MS::BaseStorage::check_inventory() + (407, 17) ERROR: No matching symbol 'GetTokenCount' + (408, 21) ERROR: No conversion from 'string' to 'int' available. + (410, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (410, 4) INFO: Candidates are: + (410, 4) INFO: void MS::BaseStorage::check_inventory() + (413, 15) ERROR: No matching symbol 'GetTokenCount' + (414, 21) ERROR: No conversion from 'string' to 'int' available. + (416, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (416, 4) INFO: Candidates are: + (416, 4) INFO: void MS::BaseStorage::check_inventory() + (419, 17) ERROR: No matching symbol 'GetTokenCount' + (420, 21) ERROR: No conversion from 'string' to 'int' available. + (422, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (422, 4) INFO: Candidates are: + (422, 4) INFO: void MS::BaseStorage::check_inventory() + (425, 15) ERROR: No matching symbol 'GetTokenCount' + (426, 21) ERROR: No conversion from 'string' to 'int' available. + (428, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (428, 4) INFO: Candidates are: + (428, 4) INFO: void MS::BaseStorage::check_inventory() + (431, 20) ERROR: No matching symbol 'GetTokenCount' + (432, 21) ERROR: No conversion from 'string' to 'int' available. + (434, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (434, 4) INFO: Candidates are: + (434, 4) INFO: void MS::BaseStorage::check_inventory() + (437, 20) ERROR: No matching symbol 'GetTokenCount' + (438, 21) ERROR: No conversion from 'string' to 'int' available. + (440, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (440, 4) INFO: Candidates are: + (440, 4) INFO: void MS::BaseStorage::check_inventory() + (443, 20) ERROR: No matching symbol 'GetTokenCount' + (444, 21) ERROR: No conversion from 'string' to 'int' available. + (446, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (446, 4) INFO: Candidates are: + (446, 4) INFO: void MS::BaseStorage::check_inventory() + (449, 17) ERROR: No matching symbol 'GetTokenCount' + (450, 21) ERROR: No conversion from 'string' to 'int' available. + (452, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (452, 4) INFO: Candidates are: + (452, 4) INFO: void MS::BaseStorage::check_inventory() + (455, 17) ERROR: No matching symbol 'GetTokenCount' + (456, 21) ERROR: No conversion from 'string' to 'int' available. + (458, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (458, 4) INFO: Candidates are: + (458, 4) INFO: void MS::BaseStorage::check_inventory() + (460, 9) ERROR: No matching symbol 'N_ADDITIONAL' + (462, 28) ERROR: No matching symbol 'ADDITIONAL_ITEMS_01' + (463, 30) ERROR: No matching symbol 'GetTokenCount' + (464, 21) ERROR: No conversion from 'string' to 'int' available. + (466, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (466, 4) INFO: Candidates are: + (466, 4) INFO: void MS::BaseStorage::check_inventory() + (468, 9) ERROR: No matching symbol 'N_ADDITIONAL' + (470, 10) ERROR: 'NEXT_CHECK_LIST' is already declared + (471, 10) ERROR: 'CHECK_LIST_NITEMS' is already declared + (472, 21) ERROR: No conversion from 'string' to 'int' available. + (474, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (474, 4) INFO: Candidates are: + (474, 4) INFO: void MS::BaseStorage::check_inventory() + (476, 9) ERROR: No matching symbol 'N_ADDITIONAL' + (478, 10) ERROR: 'NEXT_CHECK_LIST' is already declared + (479, 10) ERROR: 'CHECK_LIST_NITEMS' is already declared + (480, 21) ERROR: No conversion from 'string' to 'int' available. + (482, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (482, 4) INFO: Candidates are: + (482, 4) INFO: void MS::BaseStorage::check_inventory() + (484, 9) ERROR: No matching symbol 'N_ADDITIONAL' + (486, 10) ERROR: 'NEXT_CHECK_LIST' is already declared + (487, 10) ERROR: 'CHECK_LIST_NITEMS' is already declared + (488, 21) ERROR: No conversion from 'string' to 'int' available. + (490, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (490, 4) INFO: Candidates are: + (490, 4) INFO: void MS::BaseStorage::check_inventory() + (492, 9) ERROR: No matching symbol 'N_ADDITIONAL' + (494, 10) ERROR: 'NEXT_CHECK_LIST' is already declared + (495, 10) ERROR: 'CHECK_LIST_NITEMS' is already declared + (496, 21) ERROR: No conversion from 'string' to 'int' available. + (498, 4) ERROR: No matching signatures to 'BaseStorage::check_inventory(const string, string)' + (498, 4) INFO: Candidates are: + (498, 4) INFO: void MS::BaseStorage::check_inventory() + (502, 2) INFO: Compiling void BaseStorage::note_hundred() + (504, 3) ERROR: No matching symbol 'SayText' + (505, 3) ERROR: No matching symbol 'PlayAnim' + (509, 2) INFO: Compiling void BaseStorage::note_ten() + (511, 3) ERROR: No matching symbol 'SayText' + (512, 3) ERROR: No matching symbol 'PlayAnim' + (516, 2) INFO: Compiling void BaseStorage::open_betabank() + (518, 3) ERROR: No matching symbol 'Storage' + (519, 15) ERROR: No matching symbol 'param1' + (522, 2) INFO: Compiling void BaseStorage::betabank_success() + (524, 3) ERROR: No matching symbol 'SayText' + (525, 3) ERROR: No matching symbol 'Storage' + (528, 2) INFO: Compiling void BaseStorage::betabank_failed() + (530, 3) ERROR: No matching symbol 'convo_anim' + (531, 3) ERROR: No matching symbol 'SayText' + (532, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (535, 2) INFO: Compiling void BaseStorage::bank_intro1() + (537, 3) ERROR: No matching symbol 'SayText' + (538, 3) ERROR: No matching symbol 'Storage' + (539, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (542, 2) INFO: Compiling void BaseStorage::bank_intro2() + (544, 3) ERROR: No matching symbol 'convo_anim' + (545, 3) ERROR: No matching symbol 'SayText' + (546, 3) ERROR: No matching symbol 'SendInfoMsg' + (549, 2) INFO: Compiling void BaseStorage::buy_scroll() + (551, 3) ERROR: No matching symbol 'SayText' + (554, 3) ERROR: No matching symbol 'PlayAnim' + (557, 2) INFO: Compiling void BaseStorage::say_wondrous_cant_afford() + (559, 3) ERROR: No matching symbol 'SayText' + (561, 3) ERROR: No matching symbol 'PlayAnim' + (564, 2) INFO: Compiling void BaseStorage::lchat_mouth_move() + (569, 23) ERROR: No conversion from 'string' to math type available. + (573, 10) ERROR: 'M_TIME' is already declared + (574, 23) ERROR: No conversion from 'string' to math type available. + (578, 10) ERROR: 'M_TIME' is already declared + (579, 23) ERROR: No conversion from 'string' to math type available. + (583, 10) ERROR: 'M_TIME' is already declared + (584, 23) ERROR: No conversion from 'string' to math type available. + (587, 3) ERROR: No matching symbol 'Say' + (588, 26) WARN: Float value truncated in implicit conversion to integer + (589, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (592, 2) INFO: Compiling void BaseStorage::lchat_close_mouth() + (594, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (595, 3) ERROR: No matching symbol 'SetProp' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\beggar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\crystal_keeper.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\default_dwarf.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\default_human.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\dwarf_hbow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\dwarf_lantern.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\dwarf_lantern_base.as + (6, 7) ERROR: Method 'void DwarfLanternBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\dwarf_lantern_cl.as + (15, 2) INFO: Compiling DwarfLanternCl::DwarfLanternCl() + (17, 48) ERROR: Expected expression value + (17, 48) ERROR: Instead found '' + (18, 47) ERROR: Expected expression value + (18, 47) ERROR: Instead found '' + (23, 2) INFO: Compiling void DwarfLanternCl::client_activate() + (25, 3) ERROR: No matching symbol 'SetCallback' + (26, 14) ERROR: No matching symbol 'param1' + (27, 13) ERROR: No matching symbol 'param2' + (28, 14) ERROR: No matching symbol 'param3' + (29, 17) ERROR: No matching symbol 'param4' + (31, 15) ERROR: No conversion from 'string' to 'int' available. + (33, 25) ERROR: No matching symbol 'RIGHT_HAND' + (37, 25) ERROR: No matching symbol 'LEFT_HAND' + (39, 3) ERROR: No matching symbol 'ClientEffect' + (41, 3) ERROR: No matching symbol 'ClientEffect' + (42, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (45, 2) INFO: Compiling void DwarfLanternCl::game_prerender() + (47, 7) ERROR: Illegal operation on this datatype + (48, 15) ERROR: No conversion from 'string' to 'int' available. + (50, 25) ERROR: No matching symbol 'RIGHT_HAND' + (54, 25) ERROR: No matching symbol 'LEFT_HAND' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (59, 2) INFO: Compiling void DwarfLanternCl::end_fx() + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (66, 2) INFO: Compiling void DwarfLanternCl::remove_fx() + (68, 3) ERROR: No matching symbol 'RemoveScript' + (71, 2) INFO: Compiling void DwarfLanternCl::update_lantern_sprite() + (73, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (74, 3) ERROR: No matching symbol 'ClientEffect' + (77, 2) INFO: Compiling void DwarfLanternCl::setup_lantern_sprite() + (79, 3) ERROR: No matching symbol 'ClientEffect' + (80, 3) ERROR: No matching symbol 'ClientEffect' + (81, 3) ERROR: No matching symbol 'ClientEffect' + (82, 3) ERROR: No matching symbol 'ClientEffect' + (83, 3) ERROR: No matching symbol 'ClientEffect' + (84, 3) ERROR: No matching symbol 'ClientEffect' + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\dwarf_lantern_still.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\dwarf_pickaxe.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\dwarf_sbow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\dwarf_warrior.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\feldagor.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\forsuth.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\guildmaster.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\g_adventurer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\human_guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\human_guard_archer.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\human_guard_sword.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\human_guard_towerarcher.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\james.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\lighthouse_keeper.as + (49, 2) INFO: Compiling void LighthouseKeeper::OnRepeatTimer() + (51, 3) ERROR: No matching symbol 'SetRepeatDelay' + (52, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (55, 3) ERROR: No matching symbol 'SetAngles' + (56, 20) ERROR: No matching symbol 'GetTokenCount' + (57, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (57, 21) INFO: Candidates are: + (57, 21) INFO: int RandomInt(int, int) + (57, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (58, 3) ERROR: Illegal operation on 'string' + (59, 22) ERROR: No matching symbol 'GetToken' + (60, 3) ERROR: No matching symbol 'SetIdleAnim' + (61, 3) ERROR: No matching symbol 'SetMoveAnim' + (64, 2) INFO: Compiling void LighthouseKeeper::OnSpawn() + (66, 3) ERROR: No matching symbol 'SetName' + (67, 3) ERROR: No matching symbol 'SetName' + (68, 3) ERROR: No matching symbol 'SetHealth' + (69, 3) ERROR: No matching symbol 'SetInvincible' + (70, 3) ERROR: No matching symbol 'SetWidth' + (71, 3) ERROR: No matching symbol 'SetHeight' + (72, 3) ERROR: No matching symbol 'SetRace' + (73, 3) ERROR: No matching symbol 'SetModel' + (74, 3) ERROR: No matching symbol 'SetModelBody' + (75, 3) ERROR: No matching symbol 'SetModelBody' + (76, 3) ERROR: No matching symbol 'SetRoam' + (77, 3) ERROR: No matching symbol 'SetMoveAnim' + (78, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (79, 3) ERROR: No matching symbol 'SetSayTextRange' + (80, 3) ERROR: No matching symbol 'SetNoPush' + (82, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (84, 3) ERROR: No matching symbol 'CatchSpeech' + (85, 3) ERROR: No matching symbol 'CatchSpeech' + (86, 3) ERROR: No matching symbol 'CatchSpeech' + (87, 3) ERROR: No matching symbol 'CatchSpeech' + (88, 3) ERROR: No matching symbol 'CatchSpeech' + (91, 2) INFO: Compiling void LighthouseKeeper::get_yaw() + (93, 12) ERROR: No matching symbol 'GetMonsterProperty' + (96, 2) INFO: Compiling void LighthouseKeeper::say_hi() + (98, 23) ERROR: No matching symbol 'param1' + (100, 23) ERROR: No matching symbol 'GetEntityIndex' + (102, 22) ERROR: No matching symbol 'param1' + (104, 23) ERROR: No matching symbol 'GetEntityIndex' + (106, 16) ERROR: No matching symbol 'FACE_TARG' + (110, 2) INFO: Compiling void LighthouseKeeper::face_speaker() + (113, 3) ERROR: No matching symbol 'SetIdleAnim' + (114, 3) ERROR: No matching symbol 'SetMoveAnim' + (117, 2) INFO: Compiling void LighthouseKeeper::say_intro() + (119, 7) ERROR: Expression must be of boolean type, instead found 'string' + (120, 7) ERROR: Illegal operation on this datatype + (123, 4) ERROR: No matching symbol 'PlayAnim' + (130, 23) ERROR: No matching symbol 'CHAT_DELAY' + (131, 4) ERROR: Illegal operation on 'string' + (133, 4) ERROR: No matching signatures to 'string::NEXT_CHAT(const string)' + (136, 8) ERROR: No matching symbol 'EXIT_SUB' + (137, 7) ERROR: Illegal operation on this datatype + (138, 3) ERROR: No matching symbol 'PlayAnim' + (142, 2) INFO: Compiling void LighthouseKeeper::say_jobs() + (144, 7) ERROR: Expression must be of boolean type, instead found 'string' + (152, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (156, 2) INFO: Compiling void LighthouseKeeper::build_task_string() + (159, 7) ERROR: Illegal operation on this datatype + (164, 7) ERROR: Illegal operation on this datatype + (169, 7) ERROR: Illegal operation on this datatype + (174, 7) ERROR: Illegal operation on this datatype + (179, 9) ERROR: No matching symbol 'QUESTS_LEFT' + (182, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (186, 2) INFO: Compiling void LighthouseKeeper::say_spider() + (188, 7) ERROR: Expression must be of boolean type, instead found 'string' + (189, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (191, 4) ERROR: No matching symbol 'PlayAnim' + (192, 4) ERROR: No matching symbol 'SayText' + (195, 8) ERROR: No matching symbol 'EXIT_SUB' + (196, 23) ERROR: No matching symbol 'param1' + (198, 23) ERROR: No matching symbol 'GetEntityIndex' + (200, 22) ERROR: No matching symbol 'param1' + (202, 23) ERROR: No matching symbol 'GetEntityIndex' + (204, 16) ERROR: No matching symbol 'FACE_TARG' + (205, 26) ERROR: No matching symbol 'FACE_TARG' + (207, 16) ERROR: No matching symbol 'FACE_TARG' + (210, 8) ERROR: No matching symbol 'EXIT_SUB' + (211, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (211, 8) INFO: Candidates are: + (211, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (211, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (213, 4) ERROR: No matching symbol 'SayText' + (216, 4) ERROR: No matching symbol 'bchat_mouth_move' + (218, 8) ERROR: No matching symbol 'EXIT_SUB' + (219, 17) ERROR: No matching symbol 'FACE_TARG' + (231, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (232, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (235, 2) INFO: Compiling void LighthouseKeeper::say_grave() + (237, 7) ERROR: Expression must be of boolean type, instead found 'string' + (238, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (240, 4) ERROR: No matching symbol 'PlayAnim' + (241, 4) ERROR: No matching symbol 'SayText' + (242, 4) ERROR: No matching symbol 'bchat_mouth_move' + (245, 8) ERROR: No matching symbol 'EXIT_SUB' + (246, 23) ERROR: No matching symbol 'param1' + (248, 23) ERROR: No matching symbol 'GetEntityIndex' + (250, 22) ERROR: No matching symbol 'param1' + (252, 23) ERROR: No matching symbol 'GetEntityIndex' + (254, 16) ERROR: No matching symbol 'FACE_TARG' + (255, 26) ERROR: No matching symbol 'FACE_TARG' + (257, 16) ERROR: No matching symbol 'FACE_TARG' + (260, 8) ERROR: No matching symbol 'EXIT_SUB' + (261, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (261, 8) INFO: Candidates are: + (261, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (261, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (263, 4) ERROR: No matching symbol 'SayText' + (265, 4) ERROR: No matching symbol 'bchat_mouth_move' + (268, 8) ERROR: No matching symbol 'EXIT_SUB' + (269, 17) ERROR: No matching symbol 'FACE_TARG' + (285, 2) INFO: Compiling void LighthouseKeeper::say_crystal() + (287, 7) ERROR: Expression must be of boolean type, instead found 'string' + (288, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (290, 4) ERROR: No matching symbol 'PlayAnim' + (291, 4) ERROR: No matching symbol 'SayText' + (294, 8) ERROR: No matching symbol 'EXIT_SUB' + (295, 23) ERROR: No matching symbol 'param1' + (297, 23) ERROR: No matching symbol 'GetEntityIndex' + (299, 22) ERROR: No matching symbol 'param1' + (301, 23) ERROR: No matching symbol 'GetEntityIndex' + (303, 16) ERROR: No matching symbol 'FACE_TARG' + (304, 26) ERROR: No matching symbol 'FACE_TARG' + (306, 16) ERROR: No matching symbol 'FACE_TARG' + (309, 8) ERROR: No matching symbol 'EXIT_SUB' + (310, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (310, 8) INFO: Candidates are: + (310, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (310, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (312, 4) ERROR: No matching symbol 'SayText' + (314, 4) ERROR: No matching symbol 'bchat_mouth_move' + (317, 8) ERROR: No matching symbol 'EXIT_SUB' + (318, 17) ERROR: No matching symbol 'FACE_TARG' + (333, 2) INFO: Compiling void LighthouseKeeper::say_food() + (335, 7) ERROR: Expression must be of boolean type, instead found 'string' + (336, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (338, 4) ERROR: No matching symbol 'PlayAnim' + (339, 4) ERROR: No matching symbol 'SayText' + (342, 8) ERROR: No matching symbol 'EXIT_SUB' + (343, 23) ERROR: No matching symbol 'param1' + (345, 23) ERROR: No matching symbol 'GetEntityIndex' + (347, 22) ERROR: No matching symbol 'param1' + (349, 23) ERROR: No matching symbol 'GetEntityIndex' + (351, 16) ERROR: No matching symbol 'FACE_TARG' + (352, 26) ERROR: No matching symbol 'FACE_TARG' + (354, 16) ERROR: No matching symbol 'FACE_TARG' + (357, 8) ERROR: No matching symbol 'EXIT_SUB' + (358, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (358, 8) INFO: Candidates are: + (358, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (358, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (360, 4) ERROR: No matching symbol 'SayText' + (362, 4) ERROR: No matching symbol 'bchat_mouth_move' + (364, 8) ERROR: No matching symbol 'EXIT_SUB' + (365, 17) ERROR: No matching symbol 'FACE_TARG' + (378, 2) INFO: Compiling void LighthouseKeeper::accept_quest() + (382, 3) ERROR: No matching symbol 'UseTrigger' + (383, 22) ERROR: No matching symbol 'param1' + (385, 3) ERROR: No matching symbol 'convo_anim' + (388, 19) ERROR: No matching symbol 'param1' + (389, 4) ERROR: No matching symbol 'SayText' + (393, 18) ERROR: No matching symbol 'param1' + (394, 4) ERROR: No matching symbol 'SayText' + (399, 20) ERROR: No matching symbol 'param1' + (400, 4) ERROR: No matching symbol 'SayText' + (404, 17) ERROR: No matching symbol 'param1' + (405, 4) ERROR: No matching symbol 'SayText' + (411, 2) INFO: Compiling void LighthouseKeeper::chat_loop() + (416, 18) ERROR: No conversion from 'string' to 'int' available. + (418, 5) ERROR: No matching symbol 'OpenMenu' + (421, 17) ERROR: No conversion from 'string' to 'int' available. + (423, 4) ERROR: No matching symbol 'convo_anim' + (425, 17) ERROR: No conversion from 'string' to 'int' available. + (427, 4) ERROR: No matching symbol 'convo_anim' + (429, 17) ERROR: No conversion from 'string' to 'int' available. + (431, 4) ERROR: No matching symbol 'convo_anim' + (433, 17) ERROR: No conversion from 'string' to 'int' available. + (435, 4) ERROR: No matching symbol 'convo_anim' + (437, 17) ERROR: No conversion from 'string' to 'int' available. + (439, 4) ERROR: No matching symbol 'convo_anim' + (443, 2) INFO: Compiling void LighthouseKeeper::decline_quest() + (446, 22) ERROR: No matching symbol 'param1' + (447, 3) ERROR: No matching symbol 'PlayAnim' + (448, 3) ERROR: No matching symbol 'SayText' + (449, 3) ERROR: No matching symbol 'bchat_mouth_move' + (453, 2) INFO: Compiling void LighthouseKeeper::game_menu_getoptions() + (463, 12) ERROR: Expected ';' + (463, 12) ERROR: Instead found identifier 'reg' + (464, 12) ERROR: Expected ';' + (464, 12) ERROR: Instead found identifier 'reg' + (465, 12) ERROR: Expected ';' + (465, 12) ERROR: Instead found identifier 'reg' + (466, 12) ERROR: Expected ';' + (466, 12) ERROR: Instead found identifier 'reg' + (476, 12) ERROR: Expected ';' + (476, 12) ERROR: Instead found identifier 'reg' + (477, 12) ERROR: Expected ';' + (477, 12) ERROR: Instead found identifier 'reg' + (478, 12) ERROR: Expected ';' + (478, 12) ERROR: Instead found identifier 'reg' + (479, 12) ERROR: Expected ';' + (479, 12) ERROR: Instead found identifier 'reg' + (484, 11) ERROR: Expected ';' + (484, 11) ERROR: Instead found identifier 'reg' + (485, 11) ERROR: Expected ';' + (485, 11) ERROR: Instead found identifier 'reg' + (486, 11) ERROR: Expected ';' + (486, 11) ERROR: Instead found identifier 'reg' + (491, 13) ERROR: Expected ';' + (491, 13) ERROR: Instead found identifier 'reg' + (492, 13) ERROR: Expected ';' + (492, 13) ERROR: Instead found identifier 'reg' + (493, 13) ERROR: Expected ';' + (493, 13) ERROR: Instead found identifier 'reg' + (497, 13) ERROR: Expected ';' + (497, 13) ERROR: Instead found identifier 'reg' + (498, 13) ERROR: Expected ';' + (498, 13) ERROR: Instead found identifier 'reg' + (499, 13) ERROR: Expected ';' + (499, 13) ERROR: Instead found identifier 'reg' + (503, 13) ERROR: Expected ';' + (503, 13) ERROR: Instead found identifier 'reg' + (504, 13) ERROR: Expected ';' + (504, 13) ERROR: Instead found identifier 'reg' + (505, 13) ERROR: Expected ';' + (505, 13) ERROR: Instead found identifier 'reg' + (509, 13) ERROR: Expected ';' + (509, 13) ERROR: Instead found identifier 'reg' + (510, 13) ERROR: Expected ';' + (510, 13) ERROR: Instead found identifier 'reg' + (511, 13) ERROR: Expected ';' + (511, 13) ERROR: Instead found identifier 'reg' + (513, 12) ERROR: Expected ';' + (513, 12) ERROR: Instead found identifier 'reg' + (514, 12) ERROR: Expected ';' + (514, 12) ERROR: Instead found identifier 'reg' + (515, 12) ERROR: Expected ';' + (515, 12) ERROR: Instead found identifier 'reg' + (522, 12) ERROR: Expected ';' + (522, 12) ERROR: Instead found identifier 'reg' + (526, 12) ERROR: Expected ';' + (526, 12) ERROR: Instead found identifier 'reg' + (530, 12) ERROR: Expected ';' + (530, 12) ERROR: Instead found identifier 'reg' + (534, 12) ERROR: Expected ';' + (534, 12) ERROR: Instead found identifier 'reg' + (536, 11) ERROR: Expected ';' + (536, 11) ERROR: Instead found identifier 'reg' + (537, 11) ERROR: Expected ';' + (537, 11) ERROR: Instead found identifier 'reg' + (538, 11) ERROR: Expected ';' + (538, 11) ERROR: Instead found identifier 'reg' + (539, 11) ERROR: Expected ';' + (539, 11) ERROR: Instead found identifier 'reg' + (540, 11) ERROR: Expected ';' + (540, 11) ERROR: Instead found identifier 'reg' + (550, 11) ERROR: Expected ';' + (550, 11) ERROR: Instead found identifier 'reg' + (551, 11) ERROR: Expected ';' + (551, 11) ERROR: Instead found identifier 'reg' + (552, 11) ERROR: Expected ';' + (552, 11) ERROR: Instead found identifier 'reg' + (562, 11) ERROR: Expected ';' + (562, 11) ERROR: Instead found identifier 'reg' + (563, 11) ERROR: Expected ';' + (563, 11) ERROR: Instead found identifier 'reg' + (564, 11) ERROR: Expected ';' + (564, 11) ERROR: Instead found identifier 'reg' + (571, 11) ERROR: Expected ';' + (571, 11) ERROR: Instead found identifier 'reg' + (572, 11) ERROR: Expected ';' + (572, 11) ERROR: Instead found identifier 'reg' + (573, 11) ERROR: Expected ';' + (573, 11) ERROR: Instead found identifier 'reg' + (577, 2) INFO: Compiling void LighthouseKeeper::reward_spider() + (579, 16) ERROR: No matching symbol 'param1' + (580, 3) ERROR: No matching symbol 'convo_anim' + (582, 25) ERROR: No matching symbol 'param1' + (583, 3) ERROR: No matching signatures to 'LighthouseKeeper::offer_basic_reward(string)' + (583, 3) INFO: Candidates are: + (583, 3) INFO: void MS::LighthouseKeeper::offer_basic_reward() + (585, 21) ERROR: No conversion from 'string' to 'int' available. + (588, 20) ERROR: No conversion from 'string' to 'int' available. + (592, 20) ERROR: No conversion from 'string' to 'int' available. + (597, 21) ERROR: No conversion from 'string' to 'int' available. + (599, 4) ERROR: No matching signatures to 'LighthouseKeeper::offer_basic_reward(string)' + (599, 4) INFO: Candidates are: + (599, 4) INFO: void MS::LighthouseKeeper::offer_basic_reward() + (601, 3) ERROR: No matching symbol 'SayText' + (602, 22) ERROR: No matching symbol 'param1' + (603, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (606, 2) INFO: Compiling void LighthouseKeeper::reward_grave() + (608, 25) ERROR: No matching symbol 'param1' + (609, 3) ERROR: No matching signatures to 'LighthouseKeeper::offer_basic_reward(string)' + (609, 3) INFO: Candidates are: + (609, 3) INFO: void MS::LighthouseKeeper::offer_basic_reward() + (610, 16) ERROR: No matching symbol 'param1' + (611, 3) ERROR: No matching symbol 'convo_anim' + (613, 3) ERROR: No matching symbol 'SayText' + (614, 22) ERROR: No matching symbol 'param1' + (615, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (618, 2) INFO: Compiling void LighthouseKeeper::reward_crystal() + (620, 25) ERROR: No matching symbol 'param1' + (621, 3) ERROR: No matching signatures to 'LighthouseKeeper::offer_basic_reward(string)' + (621, 3) INFO: Candidates are: + (621, 3) INFO: void MS::LighthouseKeeper::offer_basic_reward() + (623, 16) ERROR: No matching symbol 'param1' + (624, 3) ERROR: No matching symbol 'convo_anim' + (626, 3) ERROR: No matching symbol 'SayText' + (627, 22) ERROR: No matching symbol 'param1' + (628, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (631, 2) INFO: Compiling void LighthouseKeeper::reward_food() + (633, 25) ERROR: No matching symbol 'param1' + (634, 3) ERROR: No matching signatures to 'LighthouseKeeper::offer_basic_reward(string)' + (634, 3) INFO: Candidates are: + (634, 3) INFO: void MS::LighthouseKeeper::offer_basic_reward() + (636, 16) ERROR: No matching symbol 'param1' + (637, 3) ERROR: No matching symbol 'convo_anim' + (639, 3) ERROR: No matching symbol 'SayText' + (640, 22) ERROR: No matching symbol 'param1' + (641, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (649, 2) INFO: Compiling void LighthouseKeeper::clear_quest() + (651, 41) ERROR: No matching symbol 'param1' + (659, 25) ERROR: No matching symbol 'ItemExists' + (670, 22) ERROR: No matching symbol 'param1' + (671, 3) ERROR: No matching symbol 'SayText' + (672, 3) ERROR: No matching symbol 'bchat_mouth_move' + (676, 2) INFO: Compiling void LighthouseKeeper::target_busy() + (678, 3) ERROR: No matching symbol 'PlayAnim' + (679, 41) ERROR: No matching symbol 'param1' + (682, 4) ERROR: No matching symbol 'SayText' + (686, 4) ERROR: No matching symbol 'SayText' + (690, 4) ERROR: No matching symbol 'SayText' + (694, 4) ERROR: No matching symbol 'SayText' + (698, 3) ERROR: No matching symbol 'OpenMenu' + (711, 2) INFO: Compiling void LighthouseKeeper::offer_basic_reward() + (713, 22) ERROR: No matching symbol 'GetTokenCount' + (714, 23) ERROR: No matching signatures to 'RandomInt(const int, string)' + (714, 23) INFO: Candidates are: + (714, 23) INFO: int RandomInt(int, int) + (714, 23) INFO: Rejected due to type mismatch at positional parameter 2 + (718, 2) INFO: Compiling void LighthouseKeeper::say_forest() + (720, 7) ERROR: Expression must be of boolean type, instead found 'string' + (721, 23) ERROR: No matching symbol 'param1' + (723, 23) ERROR: No matching symbol 'GetEntityIndex' + (725, 22) ERROR: No matching symbol 'param1' + (727, 23) ERROR: No matching symbol 'GetEntityIndex' + (729, 16) ERROR: No matching symbol 'FACE_TARG' + (74, 2) INFO: Compiling void BaseChat::OnSpawn() + (76, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (79, 2) INFO: Compiling void BaseChat::game_menu_getoptions() + (88, 11) ERROR: Expected ';' + (88, 11) ERROR: Instead found identifier 'reg' + (89, 11) ERROR: Expected ';' + (89, 11) ERROR: Instead found identifier 'reg' + (90, 11) ERROR: Expected ';' + (90, 11) ERROR: Instead found identifier 'reg' + (95, 11) ERROR: Expected ';' + (95, 11) ERROR: Instead found identifier 'reg' + (96, 11) ERROR: Expected ';' + (96, 11) ERROR: Instead found identifier 'reg' + (97, 11) ERROR: Expected ';' + (97, 11) ERROR: Instead found identifier 'reg' + (102, 11) ERROR: Expected ';' + (102, 11) ERROR: Instead found identifier 'reg' + (103, 11) ERROR: Expected ';' + (103, 11) ERROR: Instead found identifier 'reg' + (104, 11) ERROR: Expected ';' + (104, 11) ERROR: Instead found identifier 'reg' + (121, 13) ERROR: Expected ';' + (121, 13) ERROR: Instead found identifier 'reg' + (122, 13) ERROR: Expected ';' + (122, 13) ERROR: Instead found identifier 'reg' + (123, 13) ERROR: Expected ';' + (123, 13) ERROR: Instead found identifier 'reg' + (124, 13) ERROR: Expected ';' + (124, 13) ERROR: Instead found identifier 'reg' + (129, 12) ERROR: Expected ';' + (129, 12) ERROR: Instead found identifier 'reg' + (130, 12) ERROR: Expected ';' + (130, 12) ERROR: Instead found identifier 'reg' + (131, 12) ERROR: Expected ';' + (131, 12) ERROR: Instead found identifier 'reg' + (132, 12) ERROR: Expected ';' + (132, 12) ERROR: Instead found identifier 'reg' + (143, 2) INFO: Compiling void BaseChat::face_speaker() + (145, 3) ERROR: No matching symbol 'SetMoveDest' + (148, 2) INFO: Compiling void BaseChat::chat_loop() + (151, 7) ERROR: Illegal operation on this datatype + (160, 4) ERROR: No matching symbol 'npc_chat_done' + (164, 25) ERROR: No matching symbol 'CHAT_DELAY' + (166, 17) ERROR: No conversion from 'string' to 'int' available. + (168, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (169, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (170, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (179, 17) ERROR: No conversion from 'string' to 'int' available. + (181, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (182, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (183, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (192, 17) ERROR: No conversion from 'string' to 'int' available. + (194, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (195, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (196, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (205, 17) ERROR: No conversion from 'string' to 'int' available. + (207, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (208, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (209, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (218, 17) ERROR: No conversion from 'string' to 'int' available. + (220, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (221, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (222, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (231, 17) ERROR: No conversion from 'string' to 'int' available. + (233, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (234, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (235, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (244, 17) ERROR: No conversion from 'string' to 'int' available. + (246, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (247, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (248, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (257, 17) ERROR: No conversion from 'string' to 'int' available. + (259, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (260, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (261, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (270, 17) ERROR: No conversion from 'string' to 'int' available. + (272, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (273, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (274, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (283, 17) ERROR: No conversion from 'string' to 'int' available. + (285, 11) WARN: Variable 'L_CHAT_TEXT' hides another variable of same name in outer scope + (286, 11) WARN: Variable 'L_ANIM' hides another variable of same name in outer scope + (287, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (300, 9) ERROR: No matching symbol 'NO_ANIM' + (302, 4) ERROR: No matching symbol 'PlayAnim' + (304, 3) ERROR: No matching symbol 'SayText' + (307, 11) WARN: Variable 'L_CHAT_DELAY' hides another variable of same name in outer scope + (307, 26) ERROR: No matching symbol 'CHAT_DELAY' + (309, 8) ERROR: No matching symbol 'L_CHAT_EVENT' + (313, 9) ERROR: No matching symbol 'NO_EVENT' + (315, 17) ERROR: No matching symbol 'L_CHAT_EVENT' + (317, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (321, 9) ERROR: No matching symbol 'NO_SOUND' + (323, 8) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 29) ERROR: No matching symbol 'L_CHAT_SOUND' + (326, 14) ERROR: No matching symbol 'GetOwner' + (328, 9) ERROR: No matching symbol 'NO_MOUTH_MOVE' + (330, 4) ERROR: No matching signatures to 'BaseChat::bchat_auto_mouth_move(string)' + (330, 4) INFO: Candidates are: + (330, 4) INFO: void MS::BaseChat::bchat_auto_mouth_move() + (333, 3) ERROR: No matching signatures to 'string::L_CHAT_DELAY(const string)' + (336, 2) INFO: Compiling void BaseChat::bchat_mouth_move() + (341, 23) ERROR: No conversion from 'string' to math type available. + (345, 10) ERROR: 'M_TIME' is already declared + (346, 23) ERROR: No conversion from 'string' to math type available. + (350, 10) ERROR: 'M_TIME' is already declared + (351, 23) ERROR: No conversion from 'string' to math type available. + (355, 10) ERROR: 'M_TIME' is already declared + (356, 23) ERROR: No conversion from 'string' to math type available. + (359, 3) ERROR: No matching symbol 'Say' + (360, 26) WARN: Float value truncated in implicit conversion to integer + (361, 3) ERROR: Expression doesn't form a function call. 'BC_TOTAL_MOUTH_TIME' evaluates to the non-function type '' + (364, 2) INFO: Compiling void BaseChat::bchat_auto_mouth_move() + (366, 8) ERROR: No matching symbol 'param1' + (372, 30) ERROR: No matching symbol 'param1' + (373, 4) ERROR: Illegal operation on 'string' + (375, 21) ERROR: No conversion from 'string' to 'float' available. + (381, 4) ERROR: No matching symbol 'Say' + (383, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (385, 4) ERROR: No matching signatures to 'string::M_TIME(const string)' + (389, 2) INFO: Compiling void BaseChat::bchat_mouth_twitch() + (392, 3) ERROR: No matching symbol 'LogDebug' + (393, 3) ERROR: No matching symbol 'SetProp' + (396, 2) INFO: Compiling void BaseChat::bchat_close_mouth() + (398, 8) ERROR: No matching symbol 'NO_CLOSE_MOUTH' + (399, 3) ERROR: No matching symbol 'SetProp' + (402, 2) INFO: Compiling void BaseChat::bchat_open_mouth() + (404, 3) ERROR: No matching symbol 'SetProp' + (407, 2) INFO: Compiling void BaseChat::give_runaround() + (409, 7) ERROR: Expression must be of boolean type, instead found 'string' + (410, 24) ERROR: No matching symbol 'param2' + (411, 19) ERROR: No conversion from 'string' to 'int' available. + (420, 23) ERROR: No matching symbol 'param1' + (422, 19) ERROR: No conversion from 'string' to 'int' available. + (429, 23) ERROR: No matching symbol 'param1' + (431, 19) ERROR: No conversion from 'string' to 'int' available. + (433, 14) ERROR: No matching symbol 'GetOwner' + (439, 23) ERROR: No matching symbol 'param1' + (441, 19) ERROR: No conversion from 'string' to 'int' available. + (443, 4) ERROR: No matching symbol 'SayText' + (444, 4) ERROR: No matching symbol 'SayText' + (446, 19) ERROR: No conversion from 'string' to 'int' available. + (453, 23) ERROR: No matching symbol 'param1' + (455, 19) ERROR: No conversion from 'string' to 'int' available. + (462, 23) ERROR: No matching symbol 'param1' + (464, 19) ERROR: No conversion from 'string' to 'int' available. + (471, 23) ERROR: No matching symbol 'param1' + (473, 19) ERROR: No conversion from 'string' to 'int' available. + (483, 23) ERROR: No matching symbol 'param1' + (485, 19) ERROR: No conversion from 'string' to 'int' available. + (493, 23) ERROR: No matching symbol 'param1' + (495, 19) ERROR: No conversion from 'string' to 'int' available. + (504, 23) ERROR: No matching symbol 'param1' + (506, 19) ERROR: No conversion from 'string' to 'int' available. + (508, 10) ERROR: No matching symbol 'ItemExists' + (513, 4) ERROR: No matching symbol 'SetMoveAnim' + (514, 4) ERROR: No matching symbol 'SetRoam' + (515, 4) ERROR: No matching symbol 'SetMoveDest' + (523, 4) ERROR: No matching symbol 'npcatk_suspend_ai' + (527, 2) INFO: Compiling void BaseChat::rquest_rub_my_back_first() + (529, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (530, 3) ERROR: No matching symbol 'SayText' + (533, 2) INFO: Compiling void BaseChat::convo_anim() + (535, 20) ERROR: No matching symbol 'GetTokenCount' + (536, 3) ERROR: Illegal operation on 'string' + (537, 21) ERROR: No matching signatures to 'RandomInt(const int, string)' + (537, 21) INFO: Candidates are: + (537, 21) INFO: int RandomInt(int, int) + (537, 21) INFO: Rejected due to type mismatch at positional parameter 2 + (538, 3) ERROR: No matching symbol 'PlayAnim' + (12, 2) INFO: Compiling void Debug::bd_debug() + (28, 40) ERROR: Expected expression value + (28, 40) ERROR: Instead found '' + (38, 42) ERROR: Expected expression value + (38, 42) ERROR: Instead found '' + (105, 2) INFO: Compiling void Debug::dbg_dump_array() + (109, 55) ERROR: Expected expression value + (109, 55) ERROR: Instead found '' + (113, 53) ERROR: Expected expression value + (113, 53) ERROR: Instead found '' + (122, 2) INFO: Compiling void Debug::dbg_dump_array_elements() + (127, 48) ERROR: Expected expression value + (127, 48) ERROR: Instead found '' + (131, 46) ERROR: Expected expression value + (131, 46) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\script_assistant.as + (506, 39) ERROR: Non-terminated string literal + (512, 1) ERROR: Unexpected end of file + (6, 1) INFO: While parsing namespace + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\stalker.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\storage.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\tao.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\thief.as + (173, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\tutorial_npc_req_item.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\tutorial_prisoner.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/NPCs\wall_of_text_guy.as + (10, 2) INFO: Compiling void WallOfTextGuy::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetModel' + (14, 3) ERROR: No matching symbol 'SetRace' + (15, 3) ERROR: No matching symbol 'SetInvincible' + (17, 3) ERROR: No matching symbol 'SetWidth' + (18, 3) ERROR: No matching symbol 'SetHeight' + (19, 3) ERROR: No matching symbol 'SetIdleAnim' + (20, 3) ERROR: No matching symbol 'SetMoveAnim' + (21, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (24, 2) INFO: Compiling void WallOfTextGuy::game_menu_getoptions() + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (27, 10) ERROR: Expected ';' + (27, 10) ERROR: Instead found identifier 'reg' + (28, 10) ERROR: Expected ';' + (28, 10) ERROR: Instead found identifier 'reg' + (29, 10) ERROR: Expected ';' + (29, 10) ERROR: Instead found identifier 'reg' + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'reg' + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 10) ERROR: Expected ';' + (32, 10) ERROR: Instead found identifier 'reg' + (33, 10) ERROR: Expected ';' + (33, 10) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void WallOfTextGuy::do_text2() + (39, 10) ERROR: Expected ';' + (39, 10) ERROR: Instead found identifier 'reg' + (41, 10) ERROR: Expected ';' + (41, 10) ERROR: Instead found identifier 'reg' + (42, 7) ERROR: Expected '(' + (42, 7) ERROR: Instead found identifier 'reg' + (43, 7) ERROR: Expected '(' + (43, 7) ERROR: Instead found identifier 'reg' + (44, 7) ERROR: Expected '(' + (44, 7) ERROR: Instead found identifier 'reg' + (45, 10) ERROR: Expected ';' + (45, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 7) ERROR: Expected '(' + (48, 7) ERROR: Instead found identifier 'reg' + (49, 7) ERROR: Expected '(' + (49, 7) ERROR: Instead found identifier 'reg' + (50, 7) ERROR: Expected '(' + (50, 7) ERROR: Instead found identifier 'reg' + (52, 10) ERROR: Expected ';' + (52, 10) ERROR: Instead found identifier 'reg' + (53, 7) ERROR: Expected '(' + (53, 7) ERROR: Instead found identifier 'reg' + (54, 7) ERROR: Expected '(' + (54, 7) ERROR: Instead found identifier 'reg' + (55, 7) ERROR: Expected '(' + (55, 7) ERROR: Instead found identifier 'reg' + (56, 10) ERROR: Expected ';' + (56, 10) ERROR: Instead found identifier 'reg' + (58, 10) ERROR: Expected ';' + (58, 10) ERROR: Instead found identifier 'reg' + (59, 10) ERROR: Expected ';' + (59, 10) ERROR: Instead found identifier 'reg' + (64, 2) INFO: Compiling void WallOfTextGuy::do_text() + (66, 22) ERROR: No matching symbol 'param2' + (67, 3) ERROR: No matching symbol 'PlayAnim' + (68, 3) ERROR: No matching symbol 'SayText' + (69, 3) ERROR: No matching symbol 'ClientEvent' + (72, 2) INFO: Compiling void WallOfTextGuy::CB_TEST1() + (74, 3) ERROR: No matching symbol 'SayText' + (78, 2) INFO: Compiling void WallOfTextGuy::CB_TEST2() + (80, 3) ERROR: No matching symbol 'SayText' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oc\bandit_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oc\captians_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oc\iceorcs_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oc\ron.as + (50, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oc\shunk_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/oceancrossing\game_master.as + (8, 2) INFO: Compiling void GameMaster::OnSpawn() + (10, 18) ERROR: No matching symbol 'FindEntityByName' + (11, 3) ERROR: No matching symbol 'SetProp' + (12, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (15, 2) INFO: Compiling void GameMaster::game_triggered() + (17, 20) ERROR: No matching symbol 'FindEntityByName' + (18, 18) ERROR: No matching symbol 'FindEntityByName' + (19, 7) ERROR: No matching symbol 'param1' + (21, 4) ERROR: No matching symbol 'SetProp' + (22, 4) ERROR: No matching symbol 'SetProp' + (23, 4) ERROR: No matching symbol 'UseTrigger' + (27, 8) ERROR: No matching symbol 'param1' + (29, 5) ERROR: No matching symbol 'SetProp' + (30, 5) ERROR: No matching symbol 'UseTrigger' + (34, 9) ERROR: No matching symbol 'param1' + (36, 6) ERROR: No matching symbol 'SetProp' + (40, 10) ERROR: No matching symbol 'param1' + (42, 7) ERROR: No matching symbol 'SetGlobalVar' + (43, 7) ERROR: No matching symbol 'CallExternal' + (44, 7) ERROR: No matching symbol 'SetProp' + (45, 7) ERROR: No matching symbol 'SetProp' + (50, 7) ERROR: No matching symbol 'param1' + (52, 4) ERROR: No matching symbol 'SetProp' + (53, 4) ERROR: No matching symbol 'CallExternal' + (57, 2) INFO: Compiling void GameMaster::player_joined() + (59, 8) ERROR: No matching symbol 'LOCK_TO_NIGHT' + (61, 4) ERROR: No matching symbol 'CallExternal' + (63, 7) ERROR: No matching symbol 'LOCK_SKY' + (65, 4) ERROR: No matching symbol 'CallExternal' + (69, 2) INFO: Compiling void GameMaster::game_think() + (71, 18) ERROR: No matching symbol 'FindEntityByName' + (72, 18) ERROR: No matching symbol 'RUN_NUM' + (73, 3) ERROR: Illegal operation on 'string' + (74, 3) ERROR: Illegal operation on 'string' + (75, 3) ERROR: Illegal operation on 'string' + (76, 18) ERROR: No matching signatures to 'sin(string)' + (76, 18) INFO: Candidates are: + (76, 18) INFO: float sin(float) + (76, 18) INFO: Rejected due to type mismatch at positional parameter 1 + (77, 3) ERROR: No matching symbol 'SetProp' + (78, 3) ERROR: No matching symbol 'RUN_NUM' + (79, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\base_old_helena_npc.as + (6, 7) ERROR: Method 'void BaseOldHelenaNpc::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void BaseOldHelenaNpc::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\dorfgan.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\dr_who1.as + (50, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\erkold.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\game_master.as + (8, 2) INFO: Compiling void GameMaster::old_helena_warboss_died() + (10, 3) ERROR: No matching symbol 'gold_spew' + (11, 3) ERROR: No matching symbol 'SendInfoMsg' + (12, 30) ERROR: No matching symbol 'G_WARBOSS_ORIGIN' + (13, 3) ERROR: No matching symbol 'ApplyEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\genstore.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\harry.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\map_startup.as + (8, 2) INFO: Compiling MapStartup::MapStartup() + (10, 3) ERROR: No matching symbol 'SetGlobalVar' + (11, 3) ERROR: No matching symbol 'SetGlobalVar' + (12, 3) ERROR: No matching symbol 'SetGlobalVar' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\serrold.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/old_helena\track_gaxe_pickup.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found identifier 'string' + (13, 12) ERROR: Expected identifier + (13, 12) ERROR: Instead found '(' + (86, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orcplace2_beta\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\abomination_bone_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\bgoblin_archer_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\boar2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\djinn_ogre_fire_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\game_master.as + (8, 2) INFO: Compiling void GameMaster::gm_orcfor_sham_start() + (10, 3) ERROR: No matching symbol 'LogDebug' + (11, 24) ERROR: No matching symbol 'FindEntityByName' + (12, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\goblin_archer_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\goblin_base.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\goblin_pouncer_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\goblin_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\hgoblin_lshaman_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\orc_archer_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\orc_demonic_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\orc_flayer_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\orc_fshaman_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\orc_poisoner.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\orc_pshaman_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\orc_sniper_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\orc_summoner.as + (10, 2) INFO: Compiling void OrcSummoner::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetName' + (14, 3) ERROR: No matching symbol 'SetInvincible' + (15, 3) ERROR: No matching symbol 'SetRace' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetProp' + (18, 3) ERROR: No matching symbol 'SetWidth' + (19, 3) ERROR: No matching symbol 'SetHeight' + (20, 3) ERROR: No matching symbol 'SetHealth' + (21, 3) ERROR: No matching symbol 'SetBloodType' + (22, 3) ERROR: No matching symbol 'SetIdleAnim' + (23, 3) ERROR: No matching symbol 'SetMoveAnim' + (24, 3) ERROR: No matching symbol 'PlayAnim' + (26, 3) ERROR: No matching symbol 'SetModelBody' + (27, 3) ERROR: No matching symbol 'SetModelBody' + (28, 3) ERROR: No matching symbol 'SetModelBody' + (29, 3) ERROR: No matching symbol 'SetSayTextRange' + (32, 2) INFO: Compiling void OrcSummoner::ext_players_r_here() + (34, 3) ERROR: No matching symbol 'SayText' + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void OrcSummoner::summon_fail() + (41, 22) ERROR: No matching symbol 'FindEntityByName' + (42, 23) ERROR: No matching symbol 'FindEntityByName' + (43, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (43, 8) INFO: Candidates are: + (43, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (43, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (45, 4) ERROR: No matching symbol 'CallExternal' + (47, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (47, 8) INFO: Candidates are: + (47, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (47, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (49, 14) ERROR: No matching symbol 'GetOwner' + (50, 4) ERROR: No matching symbol 'CallExternal' + (52, 3) ERROR: No matching symbol 'UseTrigger' + (55, 2) INFO: Compiling void OrcSummoner::ext_me_die() + (57, 3) ERROR: No matching symbol 'SetInvincible' + (58, 3) ERROR: No matching symbol 'DoDamage' + (59, 13) ERROR: No matching symbol 'GetOwner' + (60, 3) ERROR: No matching symbol 'PlayAnim' + (61, 3) ERROR: No matching symbol 'PlayAnim' + (62, 3) ERROR: No matching symbol 'SetSolid' + (63, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (66, 2) INFO: Compiling void OrcSummoner::fade_out() + (68, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\orc_summoner_slaughter_cl.as + (17, 2) INFO: Compiling void OrcSummonerSlaughterCl::OnRepeatTimer() + (20, 35) ERROR: Expected expression value + (20, 35) ERROR: Instead found '' + (33, 2) INFO: Compiling void OrcSummonerSlaughterCl::client_activate() + (36, 30) ERROR: Expected expression value + (36, 30) ERROR: Instead found '' + (40, 35) ERROR: Expected expression value + (40, 35) ERROR: Instead found '' + (49, 2) INFO: Compiling void OrcSummonerSlaughterCl::update_orc_corpse() + (51, 7) ERROR: Illegal operation on this datatype + (54, 4) ERROR: No matching symbol 'ClientEffect' + (58, 4) ERROR: No matching symbol 'ClientEffect' + (59, 4) ERROR: No matching symbol 'ClientEffect' + (60, 4) ERROR: No matching symbol 'ClientEffect' + (63, 7) ERROR: Illegal operation on this datatype + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (68, 2) INFO: Compiling void OrcSummonerSlaughterCl::collide_corpse() + (70, 3) ERROR: No matching symbol 'LogDebug' + (71, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (75, 3) ERROR: No matching symbol 'ClientEffect' + (76, 3) ERROR: No matching symbol 'ClientEffect' + (79, 2) INFO: Compiling void OrcSummonerSlaughterCl::do_fling() + (82, 15) ERROR: No matching symbol 'param1' + (83, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (86, 2) INFO: Compiling void OrcSummonerSlaughterCl::remove_fx() + (88, 3) ERROR: No matching symbol 'RemoveScript' + (91, 2) INFO: Compiling void OrcSummonerSlaughterCl::setup_orc_corpse() + (93, 3) ERROR: No matching symbol 'ClientEffect' + (94, 3) ERROR: No matching symbol 'ClientEffect' + (95, 3) ERROR: No matching symbol 'ClientEffect' + (96, 3) ERROR: No matching symbol 'ClientEffect' + (97, 3) ERROR: No matching symbol 'ClientEffect' + (98, 3) ERROR: No matching symbol 'ClientEffect' + (99, 3) ERROR: No matching symbol 'ClientEffect' + (100, 3) ERROR: No matching symbol 'ClientEffect' + (101, 3) ERROR: No matching symbol 'ClientEffect' + (102, 3) ERROR: No matching symbol 'ClientEffect' + (103, 3) ERROR: No matching symbol 'ClientEffect' + (106, 2) INFO: Compiling void OrcSummonerSlaughterCl::setup_blood_spray() + (118, 79) ERROR: Expected expression value + (118, 79) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\orc_warrior_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\sgoblin_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\skeleton_archer_fire2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\test.as + (8, 7) ERROR: Method 'void Test::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/orc_for\vgoblin_archer_sa.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\base_item_detect.as + (17, 2) INFO: Compiling void BaseItemDetect::OnRepeatTimer() + (19, 3) ERROR: No matching symbol 'SetRepeatDelay' + (20, 17) ERROR: No matching symbol 'L_PLAYERS' + (21, 23) ERROR: No matching symbol 'GetTokenCount' + (27, 2) INFO: Compiling void BaseItemDetect::OnSpawn() + (29, 3) ERROR: No matching symbol 'SetRace' + (30, 3) ERROR: No matching symbol 'SetBloodType' + (31, 3) ERROR: No matching symbol 'SetModel' + (32, 3) ERROR: No matching symbol 'SetInvincible' + (33, 3) ERROR: No matching symbol 'SetHealth' + (34, 3) ERROR: No matching symbol 'SetFly' + (35, 3) ERROR: No matching symbol 'SetWidth' + (36, 3) ERROR: No matching symbol 'SetHeight' + (37, 3) ERROR: No matching symbol 'SetSolid' + (38, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (39, 3) ERROR: No matching symbol 'SetRoam' + (40, 3) ERROR: No matching symbol 'SetMoveSpeed' + (41, 3) ERROR: No matching symbol 'SetNoPush' + (42, 3) ERROR: No matching symbol 'SetIdleAnim' + (43, 3) ERROR: No matching symbol 'SetMoveAnim' + (45, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (48, 2) INFO: Compiling void BaseItemDetect::post_spawn() + (50, 14) ERROR: No matching symbol 'GetMonsterProperty' + (51, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (54, 2) INFO: Compiling void BaseItemDetect::reset_pos() + (56, 9) ERROR: No matching symbol 'GetMonsterProperty' + (57, 19) ERROR: No matching symbol 'GetOwner' + (58, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (61, 2) INFO: Compiling void BaseItemDetect::check_near() + (63, 23) ERROR: No matching symbol 'GetToken' + (64, 9) ERROR: No matching symbol 'GetEntityRange' + (65, 9) ERROR: No matching symbol 'ItemExists' + (66, 3) ERROR: No matching symbol 'item_detected' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\base_keyhole.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\boom_block.as + (16, 2) INFO: Compiling void BoomBlock::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetInvincible' + (19, 3) ERROR: No matching symbol 'SetRace' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetNoPush' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (26, 2) INFO: Compiling void BoomBlock::get_home_loc() + (28, 34) ERROR: No matching symbol 'GetOwner' + (31, 2) INFO: Compiling void BoomBlock::do_boom() + (38, 42) ERROR: Expected expression value + (38, 42) ERROR: Instead found '' + (43, 2) INFO: Compiling void BoomBlock::do_bob() + (45, 47) ERROR: Expected expression value + (45, 47) ERROR: Instead found '' + (48, 2) INFO: Compiling void BoomBlock::reset_block() + (50, 3) ERROR: No matching symbol 'SetVelocity' + (51, 19) ERROR: No matching symbol 'GetOwner' + (54, 2) INFO: Compiling void BoomBlock::bury_block() + (56, 3) ERROR: No matching symbol 'SetSolid' + (59, 19) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\burn_1000.as + (6, 7) ERROR: Method 'void Burn1000::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\cannon_manned.as + (6, 7) ERROR: Method 'void CannonManned::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void CannonManned::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\cannon_manned_fixed.as + (6, 7) ERROR: Method 'void CannonMannedFixed::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void CannonMannedFixed::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\catapault.as + (10, 2) INFO: Compiling void Catapault::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetFly' + (14, 3) ERROR: No matching symbol 'SetGravity' + (15, 3) ERROR: No matching symbol 'SetInvincible' + (16, 3) ERROR: No matching symbol 'SetNoPush' + (17, 3) ERROR: No matching symbol 'SetRace' + (18, 3) ERROR: No matching symbol 'SetWidth' + (19, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetIdleAnim' + (22, 3) ERROR: No matching symbol 'SetMoveAnim' + (25, 2) INFO: Compiling void Catapault::OneBall() + (27, 3) ERROR: No matching signatures to 'Catapault::Catapaults(const int)' + (27, 3) INFO: Candidates are: + (27, 3) INFO: void MS::Catapault::Catapaults() + (30, 2) INFO: Compiling void Catapault::FiveBalls() + (32, 3) ERROR: No matching signatures to 'Catapault::Catapaults(const int)' + (32, 3) INFO: Candidates are: + (32, 3) INFO: void MS::Catapault::Catapaults() + (35, 2) INFO: Compiling void Catapault::Catapaults() + (37, 23) ERROR: No matching symbol 'param1' + (41, 3) ERROR: No matching symbol 'CallExternal' + (44, 2) INFO: Compiling void Catapault::FireCatapault() + (46, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 2) INFO: Compiling void Catapault::CatapaultShoot() + (60, 60) ERROR: Expected expression value + (60, 60) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\conflict_test.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\const_test.as + (10, 2) INFO: Compiling ConstTest::ConstTest() + (13, 3) ERROR: No matching symbol 'Precache' + (16, 2) INFO: Compiling void ConstTest::OnSpawn() + (18, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (19, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (22, 2) INFO: Compiling void ConstTest::say_const() + (24, 3) ERROR: No matching symbol 'SayText' + (27, 2) INFO: Compiling void ConstTest::ext_change_const() + (32, 57) ERROR: Expected ')' or ',' + (32, 57) ERROR: Instead found identifier 'scriptvar' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\end_siege.as + (16, 2) INFO: Compiling void EndSiege::OnSpawn() + (18, 3) ERROR: No matching symbol 'SetGlobalVar' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\grave_watcher.as + (19, 2) INFO: Compiling void GraveWatcher::item_detected() + (21, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (22, 3) ERROR: No matching symbol 'SetName' + (24, 3) ERROR: No matching symbol 'OpenMenu' + (27, 2) INFO: Compiling void GraveWatcher::game_menu_getoptions() + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 10) ERROR: Expected ';' + (32, 10) ERROR: Instead found identifier 'reg' + (33, 10) ERROR: Expected ';' + (33, 10) ERROR: Instead found identifier 'reg' + (34, 10) ERROR: Expected ';' + (34, 10) ERROR: Instead found identifier 'reg' + (35, 10) ERROR: Expected ';' + (35, 10) ERROR: Instead found identifier 'reg' + (36, 10) ERROR: Expected ';' + (36, 10) ERROR: Instead found identifier 'reg' + (37, 10) ERROR: Expected ';' + (37, 10) ERROR: Instead found identifier 'reg' + (38, 10) ERROR: Expected ';' + (38, 10) ERROR: Instead found identifier 'reg' + (41, 2) INFO: Compiling void GraveWatcher::statue_return() + (43, 3) ERROR: No matching symbol 'UseTrigger' + (44, 22) ERROR: No matching symbol 'FindEntityByName' + (45, 3) ERROR: No matching symbol 'CallExternal' + (46, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (49, 2) INFO: Compiling void GraveWatcher::player_opted_out() + (51, 3) ERROR: No matching symbol 'UseTrigger' + (52, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (55, 2) INFO: Compiling void GraveWatcher::payment_failed() + (57, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (65, 2) INFO: Compiling void GraveWatcher::remove_me() + (67, 3) ERROR: No matching symbol 'DeleteEntity' + (17, 2) INFO: Compiling void BaseItemDetect::OnRepeatTimer() + (19, 3) ERROR: No matching symbol 'SetRepeatDelay' + (20, 17) ERROR: No matching symbol 'L_PLAYERS' + (21, 23) ERROR: No matching symbol 'GetTokenCount' + (27, 2) INFO: Compiling void BaseItemDetect::OnSpawn() + (29, 3) ERROR: No matching symbol 'SetRace' + (30, 3) ERROR: No matching symbol 'SetBloodType' + (31, 3) ERROR: No matching symbol 'SetModel' + (32, 3) ERROR: No matching symbol 'SetInvincible' + (33, 3) ERROR: No matching symbol 'SetHealth' + (34, 3) ERROR: No matching symbol 'SetFly' + (35, 3) ERROR: No matching symbol 'SetWidth' + (36, 3) ERROR: No matching symbol 'SetHeight' + (37, 3) ERROR: No matching symbol 'SetSolid' + (38, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (39, 3) ERROR: No matching symbol 'SetRoam' + (40, 3) ERROR: No matching symbol 'SetMoveSpeed' + (41, 3) ERROR: No matching symbol 'SetNoPush' + (42, 3) ERROR: No matching symbol 'SetIdleAnim' + (43, 3) ERROR: No matching symbol 'SetMoveAnim' + (45, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (48, 2) INFO: Compiling void BaseItemDetect::post_spawn() + (50, 14) ERROR: No matching symbol 'GetMonsterProperty' + (51, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (54, 2) INFO: Compiling void BaseItemDetect::reset_pos() + (56, 9) ERROR: No matching symbol 'GetMonsterProperty' + (57, 19) ERROR: No matching symbol 'GetOwner' + (58, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (61, 2) INFO: Compiling void BaseItemDetect::check_near() + (63, 23) ERROR: No matching symbol 'GetToken' + (64, 9) ERROR: No matching symbol 'GetEntityRange' + (65, 9) ERROR: No matching symbol 'ItemExists' + (66, 3) ERROR: No matching symbol 'item_detected' + (12, 2) INFO: Compiling void Debug::bd_debug() + (28, 40) ERROR: Expected expression value + (28, 40) ERROR: Instead found '' + (38, 42) ERROR: Expected expression value + (38, 42) ERROR: Instead found '' + (105, 2) INFO: Compiling void Debug::dbg_dump_array() + (109, 55) ERROR: Expected expression value + (109, 55) ERROR: Instead found '' + (113, 53) ERROR: Expected expression value + (113, 53) ERROR: Instead found '' + (122, 2) INFO: Compiling void Debug::dbg_dump_array_elements() + (127, 48) ERROR: Expected expression value + (127, 48) ERROR: Instead found '' + (131, 46) ERROR: Expected expression value + (131, 46) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\hp_trigger_1000.as + (6, 7) ERROR: Method 'void HpTriggerBase::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\hp_trigger_200.as + (6, 7) ERROR: Method 'void HpTriggerBase::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\hp_trigger_300.as + (6, 7) ERROR: Method 'void HpTriggerBase::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\hp_trigger_base.as + (6, 7) ERROR: Method 'void HpTriggerBase::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\ice_wall.as + (11, 2) INFO: Compiling void IceWall::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetInvincible' + (16, 2) INFO: Compiling void IceWall::activate_wall() + (18, 3) ERROR: No matching symbol 'LogDebug' + (19, 47) ERROR: No matching symbol 'param1' + (19, 19) ERROR: No matching symbol 'GetOwner' + (20, 3) ERROR: No matching symbol 'SetProp' + (21, 3) ERROR: No matching symbol 'SetProp' + (22, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (28, 2) INFO: Compiling void IceWall::spin_loop() + (30, 7) ERROR: Illegal operation on this datatype + (36, 3) ERROR: No matching symbol 'SetAngles' + (37, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (40, 2) INFO: Compiling void IceWall::deactivate_wall() + (43, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (46, 2) INFO: Compiling void IceWall::hide_wall() + (48, 19) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\idle_lure.as + (15, 2) INFO: Compiling void IdleLure::OnRepeatTimer() + (17, 3) ERROR: No matching symbol 'SetRepeatDelay' + (22, 3) ERROR: No matching symbol 'CallExternal' + (25, 2) INFO: Compiling void IdleLure::OnSpawn() + (27, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'SetFly' + (29, 3) ERROR: No matching symbol 'SetNoPush' + (33, 2) INFO: Compiling void IdleLure::game_postspawn() + (35, 13) ERROR: No matching symbol 'param4' + (38, 19) ERROR: No matching symbol 'GetTokenCount' + (39, 16) ERROR: No conversion from 'string' to 'int' available. + (40, 21) ERROR: No conversion from 'string' to 'int' available. + (46, 2) INFO: Compiling void IdleLure::parse_params() + (48, 22) ERROR: No matching symbol 'GetToken' + (12, 2) INFO: Compiling void Debug::bd_debug() + (28, 40) ERROR: Expected expression value + (28, 40) ERROR: Instead found '' + (38, 42) ERROR: Expected expression value + (38, 42) ERROR: Instead found '' + (105, 2) INFO: Compiling void Debug::dbg_dump_array() + (109, 55) ERROR: Expected expression value + (109, 55) ERROR: Instead found '' + (113, 53) ERROR: Expected expression value + (113, 53) ERROR: Instead found '' + (122, 2) INFO: Compiling void Debug::dbg_dump_array_elements() + (127, 48) ERROR: Expected expression value + (127, 48) ERROR: Instead found '' + (131, 46) ERROR: Expected expression value + (131, 46) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole.as + (47, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_blue.as + (20, 2) INFO: Compiling void KeyholeBlue::key_used() + (22, 3) ERROR: No matching symbol 'UseTrigger' + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_brass.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_crystal.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_forged.as + (14, 2) INFO: Compiling void KeyholeForged::OnSpawn() + (16, 3) ERROR: No matching symbol 'SetName' + (17, 3) ERROR: No matching symbol 'SetWidth' + (18, 3) ERROR: No matching symbol 'SetHeight' + (19, 3) ERROR: No matching symbol 'SetRoam' + (20, 3) ERROR: No matching symbol 'SetModel' + (21, 3) ERROR: No matching symbol 'SetModelBody' + (22, 3) ERROR: No matching symbol 'SetInvincible' + (23, 3) ERROR: No matching symbol 'SetFly' + (24, 3) ERROR: Expression is not an l-value + (25, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (28, 2) INFO: Compiling void KeyholeForged::game_menu_getoptions() + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (33, 11) ERROR: Expected ';' + (33, 11) ERROR: Instead found identifier 'reg' + (34, 11) ERROR: Expected ';' + (34, 11) ERROR: Instead found identifier 'reg' + (35, 11) ERROR: Expected ';' + (35, 11) ERROR: Instead found identifier 'reg' + (39, 2) INFO: Compiling void KeyholeForged::key_used() + (41, 3) ERROR: No matching symbol 'ReceiveOffer' + (42, 3) ERROR: No matching symbol 'SetModelBody' + (43, 3) ERROR: No matching symbol 'UseTrigger' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_gold.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_green.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_ice.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_red.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_return.as + (49, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_rusty.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_sewer.as + (20, 2) INFO: Compiling void KeyholeSewer::key_used() + (22, 3) ERROR: No matching symbol 'UseTrigger' + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_skeleton.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_storageroomkey.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_summon.as + (20, 2) INFO: Compiling void KeyholeSummon::OnSpawn() + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetWidth' + (24, 3) ERROR: No matching symbol 'SetHeight' + (25, 3) ERROR: No matching symbol 'SetRoam' + (26, 3) ERROR: No matching symbol 'SetModel' + (27, 3) ERROR: No matching symbol 'SetInvincible' + (28, 3) ERROR: No matching symbol 'SetFly' + (29, 3) ERROR: No matching symbol 'SetProp' + (30, 3) ERROR: No matching symbol 'SetProp' + (31, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\keyhole_treasury.as + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\kill_all_monsters.as + (10, 2) INFO: Compiling void KillAllMonsters::OnSpawn() + (12, 3) ERROR: No matching symbol 'CallExternal' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\lure.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\make_glow.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\make_mons_dumb.as + (8, 2) INFO: Compiling void MakeMonsDumb::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetGlobalVar' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\make_mons_smart.as + (8, 2) INFO: Compiling void MakeMonsSmart::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetGlobalVar' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\metal_cave.as + (11, 2) INFO: Compiling void MetalCave::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetModel' + (14, 3) ERROR: No matching symbol 'SetName' + (15, 3) ERROR: No matching symbol 'SetSolid' + (16, 3) ERROR: No matching symbol 'SetInvincible' + (17, 3) ERROR: No matching symbol 'SetNoPush' + (18, 3) ERROR: No matching symbol 'SetGravity' + (19, 3) ERROR: No matching symbol 'SetFly' + (20, 3) ERROR: No matching symbol 'SetName' + (21, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetAngles' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void MetalCave::refresh_cl_fx() + (30, 3) ERROR: No matching symbol 'ClientEvent' + (38, 2) INFO: Compiling void MetalCave::ext_turn() + (40, 7) ERROR: No matching symbol 'param1' + (45, 3) ERROR: No matching symbol 'SetAngles' + (46, 3) ERROR: No matching symbol 'LogDebug' + (49, 2) INFO: Compiling void MetalCave::ext_clearout() + (51, 3) ERROR: No matching symbol 'ClientEvent' + (52, 17) ERROR: No matching symbol 'PLAYER_LIST' + (53, 23) ERROR: No matching symbol 'GetTokenCount' + (59, 2) INFO: Compiling void MetalCave::tele_players() + (61, 21) ERROR: No matching symbol 'GetToken' + (62, 7) ERROR: No matching symbol 'GetEntityProperty' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\metal_cave_cl.as + (19, 2) INFO: Compiling void MetalCaveCl::client_activate() + (32, 51) ERROR: Expected expression value + (32, 51) ERROR: Instead found '' + (37, 2) INFO: Compiling void MetalCaveCl::game_prerender() + (79, 37) ERROR: Expected expression value + (79, 37) ERROR: Instead found '' + (83, 2) INFO: Compiling void MetalCaveCl::remove_light() + (85, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\monster_lure.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\mons_hate_me.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\no_extra_exp.as + (14, 2) INFO: Compiling void NoExtraExp::OnSpawn() + (16, 7) ERROR: Illegal operation on this datatype + (17, 3) ERROR: No matching symbol 'SetGlobalVar' + (18, 3) ERROR: No matching symbol 'SendInfoMsg' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\oyster_breakable.as + (30, 2) INFO: Compiling void OysterBreakable::OnSpawn() + (32, 3) ERROR: No matching symbol 'SetHealth' + (33, 3) ERROR: No matching symbol 'SetName' + (37, 2) INFO: Compiling void OysterBreakable::OnDamage(int) + (39, 8) ERROR: No matching symbol 'AM_BROKE' + (41, 21) ERROR: No matching symbol 'param3' + (42, 23) ERROR: No matching symbol 'GetTokenCount' + (46, 7) ERROR: Illegal operation on this datatype + (48, 22) ERROR: No conversion from 'string' to 'float' available. + (53, 4) ERROR: No matching symbol 'SendColoredMessage' + (55, 28) ERROR: No matching symbol 'SOUND_RESIST1' + (55, 43) ERROR: No matching symbol 'SOUND_RESIST2' + (55, 58) ERROR: No matching symbol 'SOUND_RESIST3' + (56, 14) ERROR: No matching symbol 'GetOwner' + (58, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (60, 8) ERROR: No matching symbol 'param2' + (62, 30) ERROR: No matching symbol 'SOUND_BREAK' + (62, 15) ERROR: No matching symbol 'GetOwner' + (63, 5) ERROR: No matching symbol 'UseTrigger' + (64, 5) ERROR: No matching symbol 'SetInvincible' + (65, 5) ERROR: No matching symbol 'AM_BROKE' + (66, 5) ERROR: No matching symbol 'ScheduleDelayedEvent' + (71, 29) ERROR: No matching symbol 'SOUND_STRUCK1' + (71, 44) ERROR: No matching symbol 'SOUND_STRUCK2' + (71, 59) ERROR: No matching symbol 'SOUND_STRUCK3' + (72, 15) ERROR: No matching symbol 'GetOwner' + (73, 5) ERROR: No matching symbol 'SendColoredMessage' + (74, 5) ERROR: No matching symbol 'SetDamage' + (75, 5) ERROR: No matching symbol 'SetHealth' + (80, 2) INFO: Compiling void OysterBreakable::check_type() + (82, 21) ERROR: No matching symbol 'GetToken' + (87, 2) INFO: Compiling void OysterBreakable::remove_me() + (89, 3) ERROR: No matching symbol 'DeleteEntity' + (90, 3) ERROR: No matching symbol 'RemoveScript' + (12, 2) INFO: Compiling void Debug::bd_debug() + (28, 40) ERROR: Expected expression value + (28, 40) ERROR: Instead found '' + (38, 42) ERROR: Expected expression value + (38, 42) ERROR: Instead found '' + (105, 2) INFO: Compiling void Debug::dbg_dump_array() + (109, 55) ERROR: Expected expression value + (109, 55) ERROR: Instead found '' + (113, 53) ERROR: Expected expression value + (113, 53) ERROR: Instead found '' + (122, 2) INFO: Compiling void Debug::dbg_dump_array_elements() + (127, 48) ERROR: Expected expression value + (127, 48) ERROR: Instead found '' + (131, 46) ERROR: Expected expression value + (131, 46) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\qitem.as + (8, 7) ERROR: Method 'void Qitem::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\qitem_barrel.as + (36, 2) INFO: Compiling void QitemBarrel::OnSpawn() + (38, 3) ERROR: No matching symbol 'SetModel' + (39, 3) ERROR: No matching symbol 'SetWidth' + (40, 3) ERROR: No matching symbol 'SetHeight' + (41, 3) ERROR: No matching symbol 'SetModelBody' + (42, 3) ERROR: No matching symbol 'SetProp' + (43, 3) ERROR: No matching symbol 'SetNoPush' + (44, 3) ERROR: No matching symbol 'SetInvincible' + (46, 3) ERROR: No matching symbol 'SetName' + (48, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (52, 2) INFO: Compiling void QitemBarrel::game_postspawn() + (54, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (55, 23) ERROR: No matching symbol 'param4' + (56, 3) ERROR: No matching signatures to 'QitemBarrel::setup_barrel(string)' + (56, 3) INFO: Candidates are: + (56, 3) INFO: void MS::QitemBarrel::setup_barrel() + (59, 2) INFO: Compiling void QitemBarrel::game_dynamically_created() + (62, 23) ERROR: No matching symbol 'param1' + (63, 3) ERROR: No matching signatures to 'QitemBarrel::setup_barrel(string)' + (63, 3) INFO: Candidates are: + (63, 3) INFO: void MS::QitemBarrel::setup_barrel() + (66, 2) INFO: Compiling void QitemBarrel::setup_barrel() + (69, 3) ERROR: No matching symbol 'LogDebug' + (70, 15) ERROR: No matching symbol 'GetToken' + (71, 14) ERROR: No matching symbol 'GetToken' + (72, 18) ERROR: No matching symbol 'GetToken' + (73, 7) ERROR: No matching symbol 'GetTokenCount' + (75, 8) ERROR: No matching symbol 'GetToken' + (77, 5) ERROR: No matching symbol 'BARREL_REPEATS' + (83, 4) ERROR: No matching symbol 'SetName' + (84, 4) ERROR: No matching symbol 'SetProp' + (95, 9) ERROR: No matching symbol 'L_TYPE_HANDLED' + (97, 4) ERROR: No matching symbol 'LogDebug' + (101, 2) INFO: Compiling void QitemBarrel::update_name() + (107, 13) ERROR: Can't implicitly convert from 'string' to 'const int'. + (107, 13) ERROR: No conversion from 'string' to 'const int' available. + (109, 3) ERROR: No matching symbol 'SetName' + (118, 2) INFO: Compiling void QitemBarrel::game_menu_getoptions() + (124, 11) ERROR: Expected ';' + (124, 11) ERROR: Instead found identifier 'reg' + (128, 11) ERROR: Expected ';' + (128, 11) ERROR: Instead found identifier 'reg' + (129, 11) ERROR: Expected ';' + (129, 11) ERROR: Instead found identifier 'reg' + (130, 11) ERROR: Expected ';' + (130, 11) ERROR: Instead found identifier 'reg' + (139, 11) ERROR: Expected ';' + (139, 11) ERROR: Instead found identifier 'reg' + (140, 11) ERROR: Expected ';' + (140, 11) ERROR: Instead found identifier 'reg' + (144, 2) INFO: Compiling void QitemBarrel::add_items() + (161, 39) ERROR: Expected expression value + (161, 39) ERROR: Instead found '' + (180, 2) INFO: Compiling void QitemBarrel::ext_setbody() + (182, 3) ERROR: No matching symbol 'LogDebug' + (183, 3) ERROR: No matching symbol 'SetModelBody' + (186, 2) INFO: Compiling void QitemBarrel::do_event() + (188, 7) ERROR: Illegal operation on this datatype + (190, 4) ERROR: No matching symbol 'UseTrigger' + (194, 4) ERROR: No matching symbol 'SetMenuAutoOpen' + (198, 8) ERROR: No matching symbol 'BARREL_REPEATS' + (200, 15) ERROR: No conversion from 'string' to math type available. + (203, 5) ERROR: No matching signatures to 'QitemBarrel::add_items(const int, const int)' + (203, 5) INFO: Candidates are: + (203, 5) INFO: void MS::QitemBarrel::add_items() + (208, 4) ERROR: No matching symbol 'SetMenuAutoOpen' + (210, 8) ERROR: Illegal operation on this datatype + (212, 5) ERROR: No matching symbol 'SetModelBody' + (217, 2) INFO: Compiling void QitemBarrel::do_explode() + (219, 13) ERROR: No matching symbol 'GetOwner' + (220, 3) ERROR: No matching symbol 'ClientEvent' + (221, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (224, 2) INFO: Compiling void QitemBarrel::do_explode2() + (226, 3) ERROR: No matching symbol 'UseTrigger' + (227, 28) ERROR: No matching symbol 'SOUND_EXPLODE' + (227, 13) ERROR: No matching symbol 'GetOwner' + (228, 3) ERROR: No matching symbol 'Effect' + (229, 3) ERROR: No matching symbol 'SetModel' + (230, 3) ERROR: No matching symbol 'XDoDamage' + (231, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (234, 2) INFO: Compiling void QitemBarrel::push_loop_dodamage() + (238, 41) ERROR: Expected expression value + (238, 41) ERROR: Instead found '' + (239, 47) ERROR: Expected expression value + (239, 47) ERROR: Instead found '' + (242, 2) INFO: Compiling void QitemBarrel::remove_me() + (244, 19) ERROR: No matching symbol 'GetOwner' + (245, 3) ERROR: No matching symbol 'SetInvincible' + (246, 3) ERROR: No matching symbol 'SetRace' + (247, 3) ERROR: No matching symbol 'DoDamage' + (250, 2) INFO: Compiling void QitemBarrel::set_scale() + (252, 9) ERROR: No matching symbol 'param1' + (253, 3) ERROR: No matching symbol 'SetProp' + (254, 21) ERROR: No matching symbol 'GetEntityWidth' + (255, 22) ERROR: No matching symbol 'GetEntityHeight' + (256, 15) ERROR: No matching symbol 'param1' + (257, 16) ERROR: No matching symbol 'param1' + (258, 3) ERROR: No matching symbol 'SetWidth' + (259, 3) ERROR: No matching symbol 'SetHeight' + (12, 2) INFO: Compiling void Debug::bd_debug() + (28, 40) ERROR: Expected expression value + (28, 40) ERROR: Instead found '' + (38, 42) ERROR: Expected expression value + (38, 42) ERROR: Instead found '' + (105, 2) INFO: Compiling void Debug::dbg_dump_array() + (109, 55) ERROR: Expected expression value + (109, 55) ERROR: Instead found '' + (113, 53) ERROR: Expected expression value + (113, 53) ERROR: Instead found '' + (122, 2) INFO: Compiling void Debug::dbg_dump_array_elements() + (127, 48) ERROR: Expected expression value + (127, 48) ERROR: Instead found '' + (131, 46) ERROR: Expected expression value + (131, 46) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\quest_item.as + (6, 7) ERROR: Method 'void QuestItem::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\rock.as + (6, 7) ERROR: Method 'void Rock::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\sfx_orbiting_light.as + (10, 2) INFO: Compiling void SfxOrbitingLight::OnRepeatTimer() + (12, 3) ERROR: No matching symbol 'SetRepeatDelay' + (14, 3) ERROR: No matching symbol 'ClientEvent' + (17, 2) INFO: Compiling void SfxOrbitingLight::OnSpawn() + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetRace' + (22, 3) ERROR: No matching symbol 'SetHealth' + (23, 3) ERROR: No matching symbol 'SetInvincible' + (25, 3) ERROR: No matching symbol 'SetNoPush' + (26, 3) ERROR: No matching symbol 'SetSolid' + (27, 3) ERROR: No matching symbol 'SetGravity' + (28, 3) ERROR: No matching symbol 'SetProp' + (29, 3) ERROR: No matching symbol 'ClientEvent' + (31, 3) ERROR: No matching signatures to 'EmitSound(const int, const int, const string)' + (31, 3) INFO: Candidates are: + (31, 3) INFO: void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int) + (31, 3) INFO: Rejected due to not enough parameters + (31, 3) INFO: void EmitSound(CBaseEntity@, const string&in) + (31, 3) INFO: void EmitSound(CBaseEntity@, const string&in, float) + (31, 3) INFO: Rejected due to type mismatch at positional parameter 1 + (34, 2) INFO: Compiling void SfxOrbitingLight::refresh_sound() + (37, 3) ERROR: No matching signatures to 'EmitSound(const int, const int, const string)' + (37, 3) INFO: Candidates are: + (37, 3) INFO: void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int) + (37, 3) INFO: Rejected due to not enough parameters + (37, 3) INFO: void EmitSound(CBaseEntity@, const string&in) + (37, 3) INFO: void EmitSound(CBaseEntity@, const string&in, float) + (37, 3) INFO: Rejected due to type mismatch at positional parameter 1 + (38, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (41, 2) INFO: Compiling void SfxOrbitingLight::refresh_sound2() + (44, 3) ERROR: No matching signatures to 'EmitSound(const int, const int, const string)' + (44, 3) INFO: Candidates are: + (44, 3) INFO: void EmitSound(CBaseEntity@, int, const string&in, float, float, int, int) + (44, 3) INFO: Rejected due to not enough parameters + (44, 3) INFO: void EmitSound(CBaseEntity@, const string&in) + (44, 3) INFO: void EmitSound(CBaseEntity@, const string&in, float) + (44, 3) INFO: Rejected due to type mismatch at positional parameter 1 + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\sfx_orbiting_light_cl.as + (20, 2) INFO: Compiling void SfxOrbitingLightCl::client_activate() + (22, 15) ERROR: No matching symbol 'param1' + (23, 17) ERROR: No matching symbol 'param2' + (24, 15) ERROR: No matching symbol 'param3' + (25, 17) ERROR: No matching symbol 'param4' + (26, 16) ERROR: No matching symbol 'param5' + (27, 18) ERROR: No matching symbol 'param6' + (28, 3) ERROR: No matching symbol 'SetCallback' + (31, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (32, 3) ERROR: No matching symbol 'ClientEffect' + (34, 3) ERROR: No matching symbol 'ClientEffect' + (37, 2) INFO: Compiling void SfxOrbitingLightCl::game_prerender() + (46, 34) ERROR: Expected expression value + (46, 34) ERROR: Instead found '' + (50, 2) INFO: Compiling void SfxOrbitingLightCl::update_sprite() + (52, 3) ERROR: No matching symbol 'ClientEffect' + (55, 2) INFO: Compiling void SfxOrbitingLightCl::end_fx() + (58, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (61, 2) INFO: Compiling void SfxOrbitingLightCl::remove_fx() + (63, 3) ERROR: No matching symbol 'RemoveScript' + (66, 2) INFO: Compiling void SfxOrbitingLightCl::setup_sprite() + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (70, 3) ERROR: No matching symbol 'ClientEffect' + (71, 3) ERROR: No matching symbol 'ClientEffect' + (72, 3) ERROR: No matching symbol 'ClientEffect' + (73, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\sorc_telepoint.as + (8, 2) INFO: Compiling void SorcTelepoint::OnSpawn() + (11, 3) ERROR: No matching symbol 'SetGravity' + (12, 3) ERROR: No matching symbol 'SetModel' + (13, 3) ERROR: No matching symbol 'SetInvincible' + (14, 3) ERROR: No matching symbol 'SetRace' + (17, 2) INFO: Compiling void SorcTelepoint::set_point() + (21, 12) ERROR: Expected ')' or ',' + (21, 12) ERROR: Instead found identifier '_0' + (28, 2) INFO: Compiling void SorcTelepoint::remove_me() + (30, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\spawn_point.as + (8, 2) INFO: Compiling void SpawnPoint::OnSpawn() + (10, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (11, 3) ERROR: No matching symbol 'SetFly' + (12, 3) ERROR: No matching symbol 'SetGravity' + (15, 2) INFO: Compiling void SpawnPoint::set_spawn_point() + (17, 3) ERROR: No matching symbol 'SetGlobalVar' + (18, 35) ERROR: No matching symbol 'GetOwner' + (20, 3) ERROR: No matching symbol 'CallExternal' + (21, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (24, 2) INFO: Compiling void SpawnPoint::remove_me() + (26, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\summon_point1.as + (11, 2) INFO: Compiling void SummonPoint1::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetName' + (14, 3) ERROR: No matching symbol 'SetFly' + (15, 3) ERROR: No matching symbol 'SetGravity' + (16, 3) ERROR: No matching symbol 'SetInvincible' + (17, 3) ERROR: No matching symbol 'SetRace' + (19, 3) ERROR: No matching symbol 'SetSolid' + (20, 3) ERROR: No matching symbol 'SetNoPush' + (24, 2) INFO: Compiling void SummonPoint1::summon_used() + (27, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\totalhp_trigger.as + (6, 7) ERROR: Method 'void TotalhpTrigger::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\touch_test.as + (8, 7) ERROR: Method 'void TouchTest::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\trigger_avghp.as + (6, 7) ERROR: Method 'void TriggerAvghp::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\trigger_base.as + (6, 7) ERROR: Method 'void TriggerBase::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\trigger_burn.as + (6, 7) ERROR: Method 'void TriggerBase::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\trigger_cannon.as + (6, 7) ERROR: Method 'void TriggerCannon::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\trigger_damaged.as + (6, 7) ERROR: Method 'void TriggerDamaged::OnTakeDamage(CBaseEntity@, CBaseEntity@, int, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void TriggerDamaged::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void TriggerDamaged::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\trigger_if_evil.as + (6, 7) ERROR: Method 'void TriggerIfEvil::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\trigger_poison.as + (6, 7) ERROR: Method 'void TriggerBase::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\trigger_web.as + (6, 7) ERROR: Method 'void Web::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\undamael_break.as + (8, 7) ERROR: Method 'void UndamaelBreak::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\undamael_hurt.as + (8, 7) ERROR: Method 'void UndamaelHurt::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\undamael_pitedge.as + (8, 7) ERROR: Method 'void UndamaelPitedge::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/other\web.as + (6, 7) ERROR: Method 'void Web::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/outpost\final_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/outpost\super.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\corrupted_reaver.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\phlame.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\phlame_bird.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\phlame_bird_cl.as + (13, 2) INFO: Compiling void PhlameBirdCl::client_activate() + (15, 14) ERROR: No matching symbol 'param1' + (16, 17) ERROR: No matching symbol 'param2' + (19, 3) ERROR: No matching signatures to 'string::FX_DURATION(const string)' + (22, 2) INFO: Compiling void PhlameBirdCl::fire_breath_loop() + (26, 34) ERROR: Expected expression value + (26, 34) ERROR: Instead found '' + (27, 72) ERROR: Expected expression value + (27, 72) ERROR: Instead found '' + (28, 72) ERROR: Expected expression value + (28, 72) ERROR: Instead found '' + (29, 72) ERROR: Expected expression value + (29, 72) ERROR: Instead found '' + (32, 2) INFO: Compiling void PhlameBirdCl::end_fx() + (35, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (38, 2) INFO: Compiling void PhlameBirdCl::remove_fx() + (40, 3) ERROR: No matching symbol 'RemoveScript' + (43, 2) INFO: Compiling void PhlameBirdCl::update_fire_cloud() + (46, 19) ERROR: No conversion from 'string' to 'int' available. + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (52, 2) INFO: Compiling void PhlameBirdCl::setup_fire_cloud() + (72, 42) ERROR: Expected expression value + (72, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phlames\phlame_cl.as + (35, 2) INFO: Compiling void PhlameCl::OnRepeatTimer() + (38, 34) ERROR: Expected expression value + (38, 34) ERROR: Instead found '' + (39, 32) ERROR: Expected expression value + (39, 32) ERROR: Instead found '' + (42, 2) INFO: Compiling void PhlameCl::OnRepeatTimer_1() + (48, 70) ERROR: Expected expression value + (48, 70) ERROR: Instead found '' + (51, 2) INFO: Compiling void PhlameCl::client_activate() + (68, 51) ERROR: Expected expression value + (68, 51) ERROR: Instead found '' + (75, 2) INFO: Compiling void PhlameCl::start_staff_sprite() + (77, 70) ERROR: Expected expression value + (77, 70) ERROR: Instead found '' + (80, 2) INFO: Compiling void PhlameCl::end_fx() + (82, 7) ERROR: Expression must be of boolean type, instead found 'string' + (85, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (88, 8) ERROR: No matching symbol 'EXIT_SUB' + (90, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (93, 2) INFO: Compiling void PhlameCl::remove_fx() + (95, 3) ERROR: No matching symbol 'RemoveScript' + (98, 2) INFO: Compiling void PhlameCl::game_prerender() + (101, 37) ERROR: Expected expression value + (101, 37) ERROR: Instead found '' + (119, 2) INFO: Compiling void PhlameCl::eye_beam_on() + (121, 7) ERROR: Illegal operation on this datatype + (124, 3) ERROR: No matching symbol 'ClientEffect' + (132, 2) INFO: Compiling void PhlameCl::update_eye_sprite() + (135, 3) ERROR: No matching symbol 'ClientEffect' + (136, 7) ERROR: Expression must be of boolean type, instead found 'string' + (140, 17) ERROR: No conversion from 'string' to 'double' available. + (143, 4) ERROR: No matching symbol 'ClientEffect' + (144, 4) ERROR: No matching symbol 'ClientEffect' + (146, 7) ERROR: Illegal operation on this datatype + (149, 4) ERROR: Illegal operation on 'string' + (150, 17) ERROR: No conversion from 'string' to 'double' available. + (152, 5) ERROR: No matching symbol 'ClientEffect' + (153, 5) ERROR: No matching symbol 'ClientEffect' + (158, 2) INFO: Compiling void PhlameCl::eye_beam_contact() + (160, 22) ERROR: No matching symbol 'param1' + (161, 3) ERROR: No matching symbol 'ClientEffect' + (164, 2) INFO: Compiling void PhlameCl::fire_breath_on() + (166, 7) ERROR: Illegal operation on this datatype + (176, 2) INFO: Compiling void PhlameCl::fire_breath_loop() + (180, 34) ERROR: Expected expression value + (180, 34) ERROR: Instead found '' + (186, 2) INFO: Compiling void PhlameCl::repulse_attack() + (188, 41) ERROR: Expected expression value + (188, 41) ERROR: Instead found '' + (194, 2) INFO: Compiling void PhlameCl::do_transform() + (197, 22) ERROR: No matching symbol 'param1' + (202, 2) INFO: Compiling void PhlameCl::transform_funnel_loop() + (204, 7) ERROR: Illegal operation on this datatype + (205, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (213, 2) INFO: Compiling void PhlameCl::transform_funnel_make_sprite() + (216, 34) ERROR: Expected expression value + (216, 34) ERROR: Instead found '' + (221, 2) INFO: Compiling void PhlameCl::transform_finalize() + (225, 21) ERROR: No matching symbol 'param1' + (226, 3) ERROR: No matching symbol 'ClientEffect' + (227, 3) ERROR: No matching symbol 'EmitSound3D' + (230, 2) INFO: Compiling void PhlameCl::transform_return() + (234, 24) ERROR: No matching symbol 'param1' + (235, 24) ERROR: No matching symbol 'param2' + (236, 3) ERROR: No matching symbol 'ClientEffect' + (237, 3) ERROR: No matching symbol 'ClientEffect' + (238, 3) ERROR: No matching symbol 'EmitSound3D' + (241, 2) INFO: Compiling void PhlameCl::setup_bird_sprite() + (243, 3) ERROR: No matching symbol 'ClientEffect' + (244, 3) ERROR: No matching symbol 'ClientEffect' + (245, 3) ERROR: No matching symbol 'ClientEffect' + (246, 3) ERROR: No matching symbol 'ClientEffect' + (247, 3) ERROR: No matching symbol 'ClientEffect' + (248, 3) ERROR: No matching symbol 'ClientEffect' + (249, 3) ERROR: No matching symbol 'ClientEffect' + (250, 3) ERROR: No matching symbol 'ClientEffect' + (251, 3) ERROR: No matching symbol 'ClientEffect' + (254, 2) INFO: Compiling void PhlameCl::update_funnel_sprite() + (274, 34) ERROR: Expected expression value + (274, 34) ERROR: Instead found '' + (278, 2) INFO: Compiling void PhlameCl::setup_funnel_sprite() + (280, 3) ERROR: No matching symbol 'ClientEffect' + (281, 3) ERROR: No matching symbol 'ClientEffect' + (282, 3) ERROR: No matching symbol 'ClientEffect' + (283, 3) ERROR: No matching symbol 'ClientEffect' + (284, 3) ERROR: No matching symbol 'ClientEffect' + (285, 3) ERROR: No matching symbol 'ClientEffect' + (286, 3) ERROR: No matching symbol 'ClientEffect' + (287, 3) ERROR: No matching symbol 'ClientEffect' + (288, 3) ERROR: No matching symbol 'ClientEffect' + (289, 3) ERROR: No matching symbol 'ClientEffect' + (290, 3) ERROR: No matching symbol 'ClientEffect' + (293, 2) INFO: Compiling void PhlameCl::update_repulse_burst() + (296, 19) ERROR: No conversion from 'string' to 'int' available. + (298, 3) ERROR: No matching symbol 'ClientEffect' + (299, 3) ERROR: No matching symbol 'ClientEffect' + (302, 2) INFO: Compiling void PhlameCl::setup_repulse_burst() + (304, 3) ERROR: No matching symbol 'ClientEffect' + (305, 3) ERROR: No matching symbol 'ClientEffect' + (306, 3) ERROR: No matching symbol 'ClientEffect' + (307, 3) ERROR: No matching symbol 'ClientEffect' + (308, 3) ERROR: No matching symbol 'ClientEffect' + (309, 3) ERROR: No matching symbol 'ClientEffect' + (310, 3) ERROR: No matching symbol 'ClientEffect' + (311, 3) ERROR: No matching symbol 'ClientEffect' + (312, 3) ERROR: No matching symbol 'ClientEffect' + (313, 3) ERROR: No matching symbol 'ClientEffect' + (314, 3) ERROR: No matching symbol 'ClientEffect' + (315, 3) ERROR: No matching symbol 'ClientEffect' + (316, 3) ERROR: No matching symbol 'ClientEffect' + (317, 3) ERROR: No matching symbol 'ClientEffect' + (318, 3) ERROR: No matching symbol 'ClientEffect' + (321, 2) INFO: Compiling void PhlameCl::update_staff_sprite() + (324, 3) ERROR: No matching symbol 'ClientEffect' + (327, 2) INFO: Compiling void PhlameCl::setup_staff_sprite() + (329, 3) ERROR: No matching symbol 'ClientEffect' + (330, 3) ERROR: No matching symbol 'ClientEffect' + (331, 3) ERROR: No matching symbol 'ClientEffect' + (332, 3) ERROR: No matching symbol 'ClientEffect' + (333, 3) ERROR: No matching symbol 'ClientEffect' + (334, 3) ERROR: No matching symbol 'ClientEffect' + (335, 3) ERROR: No matching symbol 'ClientEffect' + (336, 3) ERROR: No matching symbol 'ClientEffect' + (337, 3) ERROR: No matching symbol 'ClientEffect' + (340, 2) INFO: Compiling void PhlameCl::setup_eye_sprite() + (342, 3) ERROR: No matching symbol 'ClientEffect' + (343, 3) ERROR: No matching symbol 'ClientEffect' + (344, 3) ERROR: No matching symbol 'ClientEffect' + (345, 3) ERROR: No matching symbol 'ClientEffect' + (346, 3) ERROR: No matching symbol 'ClientEffect' + (347, 3) ERROR: No matching symbol 'ClientEffect' + (348, 3) ERROR: No matching symbol 'ClientEffect' + (349, 3) ERROR: No matching symbol 'ClientEffect' + (350, 3) ERROR: No matching symbol 'ClientEffect' + (351, 3) ERROR: No matching symbol 'ClientEffect' + (352, 3) ERROR: No matching symbol 'ClientEffect' + (355, 2) INFO: Compiling void PhlameCl::setup_beam_contact() + (364, 79) ERROR: Expected expression value + (364, 79) ERROR: Instead found '' + (368, 2) INFO: Compiling void PhlameCl::update_fire_cloud() + (371, 19) ERROR: No conversion from 'string' to 'int' available. + (373, 3) ERROR: No matching symbol 'ClientEffect' + (374, 3) ERROR: No matching symbol 'ClientEffect' + (377, 2) INFO: Compiling void PhlameCl::setup_fire_cloud() + (397, 42) ERROR: Expected expression value + (397, 42) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phobia\betor_ally.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phobia\game_master.as + (8, 2) INFO: Compiling void GameMaster::gm_phobia_tele_bandits() + (10, 22) ERROR: No matching symbol 'FindEntityByName' + (11, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (11, 8) INFO: Candidates are: + (11, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (11, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (13, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (13, 4) INFO: Candidates are: + (13, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (13, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (15, 10) ERROR: 'BANDIT_ID' is already declared + (16, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (16, 8) INFO: Candidates are: + (16, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (16, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (18, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (18, 4) INFO: Candidates are: + (18, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (18, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (20, 10) ERROR: 'BANDIT_ID' is already declared + (21, 8) ERROR: No matching signatures to 'IsEntityAlive(string)' + (21, 8) INFO: Candidates are: + (21, 8) INFO: bool IsEntityAlive(CBaseEntity@) + (21, 8) INFO: Rejected due to type mismatch at positional parameter 1 + (23, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (23, 4) INFO: Candidates are: + (23, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (23, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (27, 2) INFO: Compiling void GameMaster::gm_phobia_bandit_lights() + (29, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phobia\ralion_ally.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/phobia\skelr_ally.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\body.as + (15, 2) INFO: Compiling void Body::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetName' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetModelBody' + (22, 3) ERROR: No matching symbol 'SetModelBody' + (23, 3) ERROR: No matching symbol 'SetModelBody' + (24, 3) ERROR: No matching symbol 'SetModelBody' + (25, 3) ERROR: No matching symbol 'SetModelBody' + (26, 3) ERROR: No matching symbol 'SetRace' + (28, 3) ERROR: No matching symbol 'SetInvincible' + (29, 3) ERROR: No matching symbol 'SetProp' + (32, 2) INFO: Compiling void Body::game_dynamically_created() + (34, 14) ERROR: No matching symbol 'param1' + (35, 3) ERROR: No matching symbol 'SetName' + (36, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (39, 2) INFO: Compiling void Body::do_latch() + (41, 3) ERROR: No matching symbol 'Effect' + (42, 3) ERROR: No matching symbol 'Effect' + (43, 3) ERROR: No matching symbol 'SetProp' + (44, 3) ERROR: No matching symbol 'SetProp' + (47, 2) INFO: Compiling void Body::ext_bodyparts() + (49, 3) ERROR: No matching symbol 'SetModelBody' + (50, 3) ERROR: No matching symbol 'SetModelBody' + (51, 3) ERROR: No matching symbol 'SetModelBody' + (52, 3) ERROR: No matching symbol 'SetModelBody' + (53, 3) ERROR: No matching symbol 'SetModelBody' + (56, 2) INFO: Compiling void Body::ext_skin() + (58, 3) ERROR: No matching symbol 'SetProp' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\client\halos.as + (21, 2) INFO: Compiling void Halos::game_prerender() + (23, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (29, 24) ERROR: No matching symbol 'GetTokenCount' + (37, 2) INFO: Compiling void Halos::cl_set_halo() + (39, 7) ERROR: No matching symbol 'param1' + (42, 8) ERROR: No matching symbol 'FindToken' + (47, 35) ERROR: No matching symbol 'param2' + (48, 8) ERROR: No matching symbol 'FindToken' + (53, 21) ERROR: No matching symbol 'param2' + (55, 7) ERROR: No matching symbol 'param1' + (58, 8) ERROR: No matching symbol 'FindToken' + (63, 21) ERROR: No matching symbol 'param2' + (64, 8) ERROR: No matching symbol 'FindToken' + (66, 5) ERROR: No matching symbol 'RemoveToken' + (69, 7) ERROR: No matching symbol 'param1' + (71, 30) ERROR: No matching symbol 'FindToken' + (72, 25) ERROR: No conversion from 'string' to 'int' available. + (74, 5) ERROR: No matching symbol 'RemoveToken' + (75, 9) ERROR: No matching symbol 'GetTokenCount' + (80, 11) ERROR: 'L_HALO_TO_REMOVE' is already declared + (81, 25) ERROR: No conversion from 'string' to 'int' available. + (83, 5) ERROR: No matching symbol 'RemoveToken' + (86, 7) ERROR: No matching symbol 'GetTokenCount' + (92, 2) INFO: Compiling void Halos::cl_track_halos() + (102, 42) ERROR: Expected expression value + (102, 42) ERROR: Instead found '' + (114, 2) INFO: Compiling void Halos::setup_cool() + (116, 3) ERROR: No matching symbol 'ClientEffect' + (117, 3) ERROR: No matching symbol 'ClientEffect' + (118, 3) ERROR: No matching symbol 'ClientEffect' + (119, 3) ERROR: No matching symbol 'ClientEffect' + (122, 2) INFO: Compiling void Halos::setup_halo() + (124, 3) ERROR: No matching symbol 'ClientEffect' + (125, 3) ERROR: No matching symbol 'ClientEffect' + (126, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\emote_idle.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\emote_no.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\emote_sit&stand.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\emote_yes.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\externals.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_animation.as + (11, 2) ERROR: Expected method or property + (11, 2) ERROR: Instead found reserved keyword 'int' + (13, 17) ERROR: Expected identifier + (13, 17) ERROR: Instead found '(' + (283, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_cl_effects.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found identifier 'string' + (13, 13) ERROR: Expected '(' + (13, 13) ERROR: Instead found '.' + (15, 17) ERROR: Expected identifier + (15, 17) ERROR: Instead found '(' + (94, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_cl_effects_levelup.as + (16, 2) INFO: Compiling void PlayerClEffectsLevelup::OnRepeatTimer() + (18, 3) ERROR: No matching symbol 'SetRepeatDelay' + (22, 2) INFO: Compiling void PlayerClEffectsLevelup::client_activate() + (30, 51) ERROR: Expected expression value + (30, 51) ERROR: Instead found '' + (35, 2) INFO: Compiling void PlayerClEffectsLevelup::end_effect() + (37, 3) ERROR: No matching symbol 'RemoveScript' + (40, 2) INFO: Compiling void PlayerClEffectsLevelup::levelup_createsprite() + (55, 56) ERROR: Expected expression value + (55, 56) ERROR: Instead found '' + (56, 41) ERROR: Expected expression value + (56, 41) ERROR: Instead found '' + (58, 36) ERROR: Expected expression value + (58, 36) ERROR: Instead found '' + (60, 41) ERROR: Expected expression value + (60, 41) ERROR: Instead found '' + (62, 36) ERROR: Expected expression value + (62, 36) ERROR: Instead found '' + (64, 41) ERROR: Expected expression value + (64, 41) ERROR: Instead found '' + (66, 36) ERROR: Expected expression value + (66, 36) ERROR: Instead found '' + (70, 2) INFO: Compiling void PlayerClEffectsLevelup::setup_levelup_sprite() + (74, 24) ERROR: No matching signatures to 'Vector3(string, string, const int)' + (74, 24) INFO: Candidates are: + (74, 24) INFO: Vector3::Vector3() + (74, 24) INFO: Vector3::Vector3(float, float, float) + (74, 24) INFO: Rejected due to type mismatch at positional parameter 1 + (74, 24) INFO: Vector3::Vector3(const Vector3&in) + (85, 3) ERROR: No matching symbol 'ClientEffect' + (86, 3) ERROR: No matching symbol 'ClientEffect' + (87, 3) ERROR: No matching symbol 'ClientEffect' + (88, 3) ERROR: No matching symbol 'ClientEffect' + (89, 3) ERROR: No matching symbol 'ClientEffect' + (90, 3) ERROR: No matching symbol 'ClientEffect' + (91, 3) ERROR: No matching symbol 'ClientEffect' + (92, 3) ERROR: No matching symbol 'ClientEffect' + (93, 3) ERROR: No matching symbol 'ClientEffect' + (94, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_cl_effects_special.as + (94, 2) ERROR: Expected method or property + (94, 2) ERROR: Instead found identifier 'string' + (96, 24) ERROR: Expected identifier + (96, 24) ERROR: Instead found '(' + (1555, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_cl_effects_water.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found identifier 'string' + (9, 13) ERROR: Expected '(' + (9, 13) ERROR: Instead found '.' + (11, 22) ERROR: Expected identifier + (11, 22) ERROR: Instead found '(' + (76, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_cl_effects_weather.as + (61, 2) INFO: Compiling PlayerClEffectsWeather::PlayerClEffectsWeather() + (71, 3) ERROR: No matching symbol 'Precache' + (136, 23) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (140, 28) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (154, 2) INFO: Compiling void PlayerClEffectsWeather::OnRepeatTimer() + (156, 3) ERROR: No matching symbol 'SetRepeatDelay' + (157, 7) ERROR: Illegal operation on this datatype + (159, 8) ERROR: Expression must be of boolean type, instead found 'int&' + (164, 8) ERROR: Expression must be of boolean type, instead found 'string' + (166, 5) ERROR: No matching symbol 'SetEnvironment' + (170, 5) ERROR: No matching symbol 'SetEnvironment' + (173, 7) ERROR: Illegal operation on this datatype + (175, 8) ERROR: Expression must be of boolean type, instead found 'int&' + (178, 10) ERROR: No matching symbol 'DID_SKY_CHECK' + (182, 8) ERROR: Expression must be of boolean type, instead found 'string' + (184, 5) ERROR: No matching symbol 'SetEnvironment' + (188, 5) ERROR: No matching symbol 'SetEnvironment' + (197, 2) INFO: Compiling void PlayerClEffectsWeather::weather_force_change() + (199, 7) ERROR: No matching symbol 'param1' + (204, 3) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_clear(const string)' + (204, 3) INFO: Candidates are: + (204, 3) INFO: void MS::PlayerClEffectsWeather::weather_clear() + (205, 22) ERROR: No matching symbol 'param1' + (206, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (209, 2) INFO: Compiling void PlayerClEffectsWeather::weather_force_change2() + (211, 3) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_finalize(string)' + (211, 3) INFO: Candidates are: + (211, 3) INFO: void MS::PlayerClEffectsWeather::weather_finalize() + (214, 2) INFO: Compiling void PlayerClEffectsWeather::weather_change() + (216, 22) ERROR: No matching symbol 'param1' + (219, 11) WARN: Variable 'L_WEATHER' hides another variable of same name in outer scope + (223, 19) ERROR: No matching symbol 'param2' + (232, 2) INFO: Compiling void PlayerClEffectsWeather::weather_find_dest_fog() + (236, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)' + (236, 4) INFO: Candidates are: + (236, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (240, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)' + (240, 4) INFO: Candidates are: + (240, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (244, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)' + (244, 4) INFO: Candidates are: + (244, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (248, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)' + (248, 4) INFO: Candidates are: + (248, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (252, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)' + (252, 4) INFO: Candidates are: + (252, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (256, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)' + (256, 4) INFO: Candidates are: + (256, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (260, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)' + (260, 4) INFO: Candidates are: + (260, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (264, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(string, const double, const int, const int, const int)' + (264, 4) INFO: Candidates are: + (264, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (268, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)' + (268, 4) INFO: Candidates are: + (268, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (272, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)' + (272, 4) INFO: Candidates are: + (272, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (277, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_dest_fog(const string, const double, const int, const int, const int)' + (277, 4) INFO: Candidates are: + (277, 4) INFO: void MS::PlayerClEffectsWeather::weather_dest_fog() + (281, 2) INFO: Compiling void PlayerClEffectsWeather::weather_clear() + (285, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (290, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (295, 8) ERROR: No matching symbol 'DO_SPIN_DOWN' + (302, 4) ERROR: No matching symbol 'SetSoundVolume' + (313, 23) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (319, 7) ERROR: No matching symbol 'param1' + (323, 8) ERROR: No matching symbol 'CLEAR_FOG' + (325, 4) ERROR: No matching symbol 'SetEnvironment' + (326, 4) ERROR: No matching symbol 'SetEnvironment' + (327, 4) ERROR: No matching symbol 'SetEnvironment' + (328, 4) ERROR: No matching symbol 'SetEnvironment' + (329, 4) ERROR: No matching symbol 'SetEnvironment' + (330, 4) ERROR: No matching symbol 'SetEnvironment' + (336, 7) ERROR: No matching symbol 'param1' + (340, 8) ERROR: No matching symbol 'CLEAR_TINT' + (342, 4) ERROR: No matching symbol 'SetEnvironment' + (346, 2) INFO: Compiling void PlayerClEffectsWeather::weather_spin_down_sound() + (348, 3) ERROR: Illegal operation on 'string' + (349, 30) ERROR: No conversion from 'string' to 'int' available. + (351, 8) ERROR: Expression must be of boolean type, instead found 'int&' + (353, 5) ERROR: No matching symbol 'SetSoundVolume' + (355, 8) ERROR: Expression must be of boolean type, instead found 'int&' + (357, 5) ERROR: No matching symbol 'SetSoundVolume' + (360, 30) ERROR: No conversion from 'string' to 'int' available. + (362, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (364, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (366, 4) ERROR: No matching symbol 'SetSoundVolume' + (368, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (370, 4) ERROR: No matching symbol 'SetSoundVolume' + (374, 2) INFO: Compiling void PlayerClEffectsWeather::weather_dest_fog() + (376, 28) ERROR: No matching symbol 'param1' + (377, 30) ERROR: No matching symbol 'param2' + (378, 28) ERROR: No matching symbol 'param3' + (379, 26) ERROR: No matching symbol 'param4' + (380, 29) ERROR: No matching symbol 'param5' + (383, 2) INFO: Compiling void PlayerClEffectsWeather::weather_set_fog() + (385, 23) ERROR: No matching symbol 'param1' + (386, 25) ERROR: No matching symbol 'param2' + (387, 23) ERROR: No matching symbol 'param3' + (388, 21) ERROR: No matching symbol 'param4' + (389, 29) ERROR: No matching symbol 'param5' + (390, 7) ERROR: Illegal operation on this datatype + (392, 8) ERROR: Expression must be of boolean type, instead found 'string' + (397, 9) ERROR: No matching symbol 'DELAY_FOG' + (399, 4) ERROR: No matching symbol 'SetEnvironment' + (401, 3) ERROR: No matching symbol 'SetEnvironment' + (402, 3) ERROR: No matching symbol 'SetEnvironment' + (403, 3) ERROR: No matching symbol 'SetEnvironment' + (404, 3) ERROR: No matching symbol 'SetEnvironment' + (407, 4) ERROR: No matching symbol 'SetEnvironment' + (411, 4) ERROR: No matching symbol 'SetEnvironment' + (416, 2) INFO: Compiling void PlayerClEffectsWeather::weather_start_transition() + (418, 7) ERROR: Expression must be of boolean type, instead found 'string' + (420, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_force_change(string)' + (420, 4) INFO: Candidates are: + (420, 4) INFO: void MS::PlayerClEffectsWeather::weather_force_change() + (423, 8) ERROR: No matching symbol 'EXIT_SUB' + (424, 8) ERROR: No matching symbol 'TOD_IN_TRANSITION' + (426, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_force_change(string)' + (426, 4) INFO: Candidates are: + (426, 4) INFO: void MS::PlayerClEffectsWeather::weather_force_change() + (429, 8) ERROR: No matching symbol 'EXIT_SUB' + (430, 7) ERROR: Expression must be of boolean type, instead found 'string' + (434, 29) ERROR: Can't implicitly convert from 'Vector3' to 'string&'. + (449, 43) ERROR: No matching symbol 'SOUND_RAIN_START' + (449, 26) ERROR: No matching symbol 'WEATHER_CHANNEL' + (449, 14) ERROR: No matching symbol 'GetOwner' + (450, 29) ERROR: No matching symbol 'WEATHER_RAIN_FOG_COLOR' + (451, 31) ERROR: No matching symbol 'WEATHER_RAIN_FOG_DENSITY' + (452, 29) ERROR: No matching symbol 'WEATHER_RAIN_FOG_START' + (453, 27) ERROR: No matching symbol 'WEATHER_RAIN_FOG_END' + (455, 34) ERROR: No matching symbol 'WEATHER_RAIN_DROP_MAXRATE' + (456, 28) ERROR: No matching symbol 'WEATHER_RAIN_MAXVOL' + (461, 25) ERROR: No matching symbol 'WEATHER_RAIN_TINT_DAY' + (465, 25) ERROR: No matching symbol 'WEATHER_RAIN_TINT_DUSK' + (469, 25) ERROR: No matching symbol 'WEATHER_RAIN_TINT_NIGHT' + (471, 8) ERROR: Illegal operation on this datatype + (478, 43) ERROR: No matching symbol 'SOUND_RAIN_START' + (478, 26) ERROR: No matching symbol 'WEATHER_CHANNEL' + (478, 14) ERROR: No matching symbol 'GetOwner' + (479, 29) ERROR: No matching symbol 'WEATHER_RAIN_FOG_COLOR' + (480, 31) ERROR: No matching symbol 'WEATHER_RAIN_FOG_DENSITY' + (481, 29) ERROR: No matching symbol 'WEATHER_RAIN_FOG_START' + (482, 27) ERROR: No matching symbol 'WEATHER_RAIN_FOG_END' + (484, 34) ERROR: No matching symbol 'WEATHER_STORM_DROP_MAXRATE' + (485, 28) ERROR: No matching symbol 'WEATHER_STORM_MAXVOL' + (491, 25) ERROR: No matching symbol 'WEATHER_RAIN_TINT_DAY' + (495, 25) ERROR: No matching symbol 'WEATHER_RAIN_TINT_DUSK' + (499, 25) ERROR: No matching symbol 'WEATHER_RAIN_TINT_NIGHT' + (501, 8) ERROR: Illegal operation on this datatype + (508, 29) ERROR: No matching symbol 'WEATHER_SNOW_FOG_COLOR' + (511, 31) WARN: Float value truncated in implicit conversion to integer + (513, 27) ERROR: No matching symbol 'WEATHER_SNOW_FOG_END' + (517, 24) ERROR: No matching symbol 'WEATHER_SNOW_TINT' + (521, 8) ERROR: Illegal operation on this datatype + (531, 43) ERROR: No matching symbol 'SOUND_RAIN' + (531, 26) ERROR: No matching symbol 'WEATHER_CHANNEL' + (531, 14) ERROR: No matching symbol 'GetOwner' + (534, 8) ERROR: No matching symbol 'DEST_FOG_ON' + (536, 8) ERROR: Illegal operation on this datatype + (539, 4) ERROR: No matching symbol 'SetEnvironment' + (540, 4) ERROR: No matching symbol 'SetEnvironment' + (541, 4) ERROR: No matching symbol 'SetEnvironment' + (542, 4) ERROR: No matching symbol 'SetEnvironment' + (543, 4) ERROR: No matching symbol 'SetEnvironment' + (544, 4) ERROR: No matching symbol 'SetEnvironment' + (554, 2) INFO: Compiling void PlayerClEffectsWeather::weather_transition_loop() + (577, 36) ERROR: Expected expression value + (577, 36) ERROR: Instead found '' + (578, 36) ERROR: Expected expression value + (578, 36) ERROR: Instead found '' + (579, 36) ERROR: Expected expression value + (579, 36) ERROR: Instead found '' + (586, 49) ERROR: Expected expression value + (586, 49) ERROR: Instead found '' + (593, 49) ERROR: Expected expression value + (593, 49) ERROR: Instead found '' + (609, 36) ERROR: Expected expression value + (609, 36) ERROR: Instead found '' + (610, 36) ERROR: Expected expression value + (610, 36) ERROR: Instead found '' + (611, 36) ERROR: Expected expression value + (611, 36) ERROR: Instead found '' + (616, 53) ERROR: Expected expression value + (616, 53) ERROR: Instead found '' + (620, 51) ERROR: Expected expression value + (620, 51) ERROR: Instead found '' + (624, 49) ERROR: Expected expression value + (624, 49) ERROR: Instead found '' + (628, 2) INFO: Compiling void PlayerClEffectsWeather::weather_finalize() + (631, 7) ERROR: No matching symbol 'param1' + (633, 19) ERROR: No matching symbol 'param1' + (641, 24) ERROR: No matching symbol 'WEATHER_RAIN_FOG_COLOR' + (642, 26) ERROR: No matching symbol 'WEATHER_RAIN_FOG_DENSITY' + (643, 24) ERROR: No matching symbol 'WEATHER_RAIN_FOG_START' + (644, 22) ERROR: No matching symbol 'WEATHER_RAIN_FOG_END' + (646, 29) ERROR: No matching symbol 'WEATHER_RAIN_DROP_MAXRATE' + (647, 23) ERROR: No matching symbol 'WEATHER_RAIN_MAXVOL' + (655, 55) ERROR: No matching symbol 'WEATHER_RAIN_MAXVOL' + (655, 43) ERROR: No matching symbol 'SOUND_RAIN' + (655, 26) ERROR: No matching symbol 'WEATHER_CHANNEL' + (655, 14) ERROR: No matching symbol 'GetOwner' + (656, 4) ERROR: No matching symbol 'SetSoundVolume' + (662, 20) ERROR: No matching symbol 'WEATHER_RAIN_TINT_DAY' + (666, 20) ERROR: No matching symbol 'WEATHER_RAIN_TINT_DUSK' + (670, 20) ERROR: No matching symbol 'WEATHER_RAIN_TINT_NIGHT' + (676, 24) ERROR: No matching symbol 'WEATHER_RAIN_FOG_COLOR' + (677, 26) ERROR: No matching symbol 'WEATHER_RAIN_FOG_DENSITY' + (678, 24) ERROR: No matching symbol 'WEATHER_RAIN_FOG_START' + (679, 22) ERROR: No matching symbol 'WEATHER_RAIN_FOG_END' + (681, 29) ERROR: No matching symbol 'WEATHER_STORM_DROP_MAXRATE' + (682, 23) ERROR: No matching symbol 'WEATHER_RAIN_MAXVOL' + (690, 55) ERROR: No matching symbol 'WEATHER_STORM_MAXVOL' + (690, 43) ERROR: No matching symbol 'SOUND_RAIN' + (690, 26) ERROR: No matching symbol 'WEATHER_CHANNEL' + (690, 14) ERROR: No matching symbol 'GetOwner' + (691, 4) ERROR: No matching symbol 'SetSoundVolume' + (697, 20) ERROR: No matching symbol 'WEATHER_RAIN_TINT_DAY' + (701, 20) ERROR: No matching symbol 'WEATHER_RAIN_TINT_DUSK' + (705, 20) ERROR: No matching symbol 'WEATHER_RAIN_TINT_NIGHT' + (711, 24) ERROR: No matching symbol 'WEATHER_SNOW_FOG_COLOR' + (712, 26) WARN: Float value truncated in implicit conversion to integer + (714, 22) ERROR: No matching symbol 'WEATHER_SNOW_FOG_END' + (725, 31) ERROR: No matching symbol 'FREQ_WEATHER_SNOW_SOUND' + (745, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_set_fog(string, int&, int&, int&, int&)' + (745, 4) INFO: Candidates are: + (745, 4) INFO: void MS::PlayerClEffectsWeather::weather_set_fog() + (747, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (749, 10) ERROR: No matching symbol 'DID_FOG_SETUP' + (752, 4) ERROR: No matching signatures to 'PlayerClEffectsWeather::weather_set_fog(string, int&, int&, int&, int&)' + (752, 4) INFO: Candidates are: + (752, 4) INFO: void MS::PlayerClEffectsWeather::weather_set_fog() + (754, 3) ERROR: No matching symbol 'SetEnvironment' + (757, 2) INFO: Compiling void PlayerClEffectsWeather::weather_loop_start() + (759, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (764, 2) INFO: Compiling void PlayerClEffectsWeather::weather_loop() + (766, 7) ERROR: Illegal operation on this datatype + (767, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (768, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (770, 8) ERROR: Illegal operation on this datatype + (777, 24) ERROR: No matching symbol 'NEXT_RAIN_SOUND' + (779, 5) ERROR: No matching symbol 'NEXT_RAIN_SOUND' + (780, 24) ERROR: No matching symbol 'FREQ_WEATHER_RAIN_SOUND' + (780, 5) ERROR: No matching symbol 'NEXT_RAIN_SOUND' + (781, 44) ERROR: No matching symbol 'SOUND_RAIN' + (781, 27) ERROR: No matching symbol 'WEATHER_CHANNEL' + (781, 15) ERROR: No matching symbol 'GetOwner' + (784, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (786, 8) ERROR: Illegal operation on this datatype + (789, 24) ERROR: No matching symbol 'WEATHER_SNOW_RATE' + (793, 24) ERROR: No matching symbol 'NEXT_SNOW_SOUND' + (795, 5) ERROR: No matching symbol 'NEXT_SNOW_SOUND' + (796, 24) ERROR: No matching symbol 'FREQ_WEATHER_SNOW_SOUND' + (796, 5) ERROR: No matching symbol 'NEXT_SNOW_SOUND' + (797, 44) ERROR: No matching symbol 'SOUND_SNOW' + (797, 27) ERROR: No matching symbol 'WEATHER_CHANNEL' + (797, 15) ERROR: No matching symbol 'GetOwner' + (802, 2) INFO: Compiling void PlayerClEffectsWeather::weather_make_rain() + (804, 40) ERROR: Expected expression value + (804, 40) ERROR: Instead found '' + (805, 47) ERROR: Expected expression value + (805, 47) ERROR: Instead found '' + (806, 47) ERROR: Expected expression value + (806, 47) ERROR: Instead found '' + (810, 36) ERROR: Expected expression value + (810, 36) ERROR: Instead found '' + (814, 2) INFO: Compiling void PlayerClEffectsWeather::weather_make_snow() + (816, 40) ERROR: Expected expression value + (816, 40) ERROR: Instead found '' + (817, 47) ERROR: Expected expression value + (817, 47) ERROR: Instead found '' + (818, 47) ERROR: Expected expression value + (818, 47) ERROR: Instead found '' + (822, 36) ERROR: Expected expression value + (822, 36) ERROR: Instead found '' + (826, 2) INFO: Compiling void PlayerClEffectsWeather::weather_check_sky() + (829, 38) ERROR: Expected expression value + (829, 38) ERROR: Instead found '' + (831, 50) ERROR: Expected expression value + (831, 50) ERROR: Instead found '' + (832, 38) ERROR: Expected expression value + (832, 38) ERROR: Instead found '' + (836, 36) ERROR: Expected expression value + (836, 36) ERROR: Instead found '' + (838, 50) ERROR: Expected expression value + (838, 50) ERROR: Instead found '' + (855, 2) INFO: Compiling void PlayerClEffectsWeather::weather_rain_makesprite() + (857, 3) ERROR: No matching symbol 'ClientEffect' + (858, 3) ERROR: No matching symbol 'ClientEffect' + (859, 3) ERROR: No matching symbol 'ClientEffect' + (860, 3) ERROR: No matching symbol 'ClientEffect' + (861, 3) ERROR: No matching symbol 'ClientEffect' + (862, 3) ERROR: No matching symbol 'ClientEffect' + (863, 3) ERROR: No matching symbol 'ClientEffect' + (864, 3) ERROR: No matching symbol 'ClientEffect' + (867, 30) ERROR: No conversion from 'string' to 'int' available. + (870, 24) ERROR: No matching symbol 'WEATHER_WIND_DIR' + (871, 18) ERROR: No matching symbol 'WEATHER_WIND_DIR' + (872, 4) ERROR: No matching symbol 'ClientEffect' + (874, 3) ERROR: No matching symbol 'ClientEffect' + (877, 2) INFO: Compiling void PlayerClEffectsWeather::weather_drop_splash_Water() + (879, 3) ERROR: No matching symbol 'ClientEffect' + (880, 3) ERROR: No matching symbol 'ClientEffect' + (881, 3) ERROR: No matching symbol 'ClientEffect' + (882, 3) ERROR: No matching symbol 'ClientEffect' + (883, 3) ERROR: No matching symbol 'ClientEffect' + (884, 3) ERROR: No matching symbol 'ClientEffect' + (885, 3) ERROR: No matching symbol 'ClientEffect' + (886, 3) ERROR: No matching symbol 'ClientEffect' + (887, 3) ERROR: No matching symbol 'ClientEffect' + (888, 3) ERROR: No matching symbol 'ClientEffect' + (889, 3) ERROR: No matching symbol 'ClientEffect' + (890, 3) ERROR: No matching symbol 'ClientEffect' + (891, 3) ERROR: No matching symbol 'ClientEffect' + (894, 2) INFO: Compiling void PlayerClEffectsWeather::weather_drop_splash() + (896, 3) ERROR: No matching symbol 'ClientEffect' + (897, 3) ERROR: No matching symbol 'ClientEffect' + (898, 3) ERROR: No matching symbol 'ClientEffect' + (899, 3) ERROR: No matching symbol 'ClientEffect' + (900, 3) ERROR: No matching symbol 'ClientEffect' + (901, 3) ERROR: No matching symbol 'ClientEffect' + (906, 3) ERROR: No matching symbol 'ClientEffect' + (909, 2) INFO: Compiling void PlayerClEffectsWeather::weather_create_drop_mist() + (911, 3) ERROR: No matching symbol 'ClientEffect' + (912, 3) ERROR: No matching symbol 'ClientEffect' + (913, 3) ERROR: No matching symbol 'ClientEffect' + (914, 3) ERROR: No matching symbol 'ClientEffect' + (915, 3) ERROR: No matching symbol 'ClientEffect' + (916, 3) ERROR: No matching symbol 'ClientEffect' + (917, 3) ERROR: No matching symbol 'ClientEffect' + (918, 3) ERROR: No matching symbol 'ClientEffect' + (921, 2) INFO: Compiling void PlayerClEffectsWeather::weather_make_snowflake() + (923, 3) ERROR: No matching symbol 'ClientEffect' + (924, 3) ERROR: No matching symbol 'ClientEffect' + (925, 3) ERROR: No matching symbol 'ClientEffect' + (926, 3) ERROR: No matching symbol 'ClientEffect' + (927, 3) ERROR: No matching symbol 'ClientEffect' + (928, 3) ERROR: No matching symbol 'ClientEffect' + (931, 2) INFO: Compiling void PlayerClEffectsWeather::weather_snow_breath() + (933, 3) ERROR: No matching symbol 'ClientEffect' + (934, 3) ERROR: No matching symbol 'ClientEffect' + (935, 3) ERROR: No matching symbol 'ClientEffect' + (936, 3) ERROR: No matching symbol 'ClientEffect' + (937, 3) ERROR: No matching symbol 'ClientEffect' + (938, 3) ERROR: No matching symbol 'ClientEffect' + (939, 3) ERROR: No matching symbol 'ClientEffect' + (940, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_cl_effects_world.as + (94, 2) ERROR: Expected method or property + (94, 2) ERROR: Instead found identifier 'string' + (96, 24) ERROR: Expected identifier + (96, 24) ERROR: Instead found '(' + (1555, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_cl_main.as + (6, 7) ERROR: Method 'void PlayerClMain::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_conartist.as + (19, 2) INFO: Compiling void PlayerConartist::client_activate() + (23, 52) ERROR: Expected expression value + (23, 52) ERROR: Instead found '' + (33, 52) ERROR: Expected expression value + (33, 52) ERROR: Instead found '' + (49, 52) ERROR: Expected expression value + (49, 52) ERROR: Instead found '' + (57, 2) INFO: Compiling void PlayerConartist::game_prerender() + (60, 37) ERROR: Expected expression value + (60, 37) ERROR: Instead found '' + (64, 2) INFO: Compiling void PlayerConartist::sprite_spoog() + (66, 7) ERROR: Illegal operation on this datatype + (68, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (71, 2) INFO: Compiling void PlayerConartist::end_fx_levelup() + (73, 3) ERROR: No matching symbol 'RemoveScript' + (76, 2) INFO: Compiling void PlayerConartist::levelup_createsprite() + (91, 55) ERROR: Expected expression value + (91, 55) ERROR: Instead found '' + (96, 41) ERROR: Expected expression value + (96, 41) ERROR: Instead found '' + (98, 36) ERROR: Expected expression value + (98, 36) ERROR: Instead found '' + (100, 41) ERROR: Expected expression value + (100, 41) ERROR: Instead found '' + (102, 36) ERROR: Expected expression value + (102, 36) ERROR: Instead found '' + (104, 41) ERROR: Expected expression value + (104, 41) ERROR: Instead found '' + (106, 36) ERROR: Expected expression value + (106, 36) ERROR: Instead found '' + (110, 2) INFO: Compiling void PlayerConartist::setup_levelup_sprite() + (114, 24) ERROR: No matching signatures to 'Vector3(string, string, const int)' + (114, 24) INFO: Candidates are: + (114, 24) INFO: Vector3::Vector3() + (114, 24) INFO: Vector3::Vector3(float, float, float) + (114, 24) INFO: Rejected due to type mismatch at positional parameter 1 + (114, 24) INFO: Vector3::Vector3(const Vector3&in) + (126, 7) ERROR: Expression must be of boolean type, instead found 'string' + (128, 11) WARN: Variable 'SCALE_SIZE' hides another variable of same name in outer scope + (131, 7) ERROR: Expression must be of boolean type, instead found 'string' + (133, 10) WARN: Variable 'DEATH_DELAY' hides another variable of same name in outer scope + (135, 3) ERROR: No matching symbol 'ClientEffect' + (136, 3) ERROR: No matching symbol 'ClientEffect' + (137, 3) ERROR: No matching symbol 'ClientEffect' + (138, 3) ERROR: No matching symbol 'ClientEffect' + (139, 3) ERROR: No matching symbol 'ClientEffect' + (140, 3) ERROR: No matching symbol 'ClientEffect' + (141, 3) ERROR: No matching symbol 'ClientEffect' + (142, 3) ERROR: No matching symbol 'ClientEffect' + (143, 3) ERROR: No matching symbol 'ClientEffect' + (144, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_main.as + (1081, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_sound.as + (8, 2) INFO: Compiling PlayerSound::PlayerSound() + (10, 30) ERROR: No matching symbol 'GetEntityProperty' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_statusflags.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found reserved keyword 'int' + (9, 10) ERROR: Expected '(' + (9, 10) ERROR: Instead found '.' + (10, 10) ERROR: Expected '(' + (10, 10) ERROR: Instead found '.' + (11, 10) ERROR: Expected '(' + (11, 10) ERROR: Instead found '.' + (12, 10) ERROR: Expected '(' + (12, 10) ERROR: Instead found '.' + (14, 19) ERROR: Expected identifier + (14, 19) ERROR: Instead found '(' + (59, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_sv_menu.as + (12, 2) INFO: Compiling void PlayerSvMenu::OnSpawn() + (14, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (17, 2) INFO: Compiling void PlayerSvMenu::game_menu_getoptions() + (19, 7) ERROR: No matching symbol 'GetEntityIndex' + (25, 15) ERROR: No matching symbol 'param1' + (29, 2) INFO: Compiling void PlayerSvMenu::menu_self() + (33, 11) ERROR: Expected ';' + (33, 11) ERROR: Instead found identifier 'reg' + (37, 11) ERROR: Expected ';' + (37, 11) ERROR: Instead found identifier 'reg' + (39, 10) ERROR: Expected ';' + (39, 10) ERROR: Instead found identifier 'reg' + (40, 10) ERROR: Expected ';' + (40, 10) ERROR: Instead found identifier 'reg' + (41, 10) ERROR: Expected ';' + (41, 10) ERROR: Instead found identifier 'reg' + (44, 11) ERROR: Expected ';' + (44, 11) ERROR: Instead found identifier 'reg' + (45, 11) ERROR: Expected ';' + (45, 11) ERROR: Instead found identifier 'reg' + (46, 11) ERROR: Expected ';' + (46, 11) ERROR: Instead found identifier 'reg' + (47, 11) ERROR: Expected ';' + (47, 11) ERROR: Instead found identifier 'reg' + (48, 11) ERROR: Expected ';' + (48, 11) ERROR: Instead found identifier 'reg' + (49, 11) ERROR: Expected ';' + (49, 11) ERROR: Instead found identifier 'reg' + (50, 11) ERROR: Expected ';' + (50, 11) ERROR: Instead found identifier 'reg' + (51, 11) ERROR: Expected ';' + (51, 11) ERROR: Instead found identifier 'reg' + (52, 11) ERROR: Expected ';' + (52, 11) ERROR: Instead found identifier 'reg' + (53, 11) ERROR: Expected ';' + (53, 11) ERROR: Instead found identifier 'reg' + (54, 11) ERROR: Expected ';' + (54, 11) ERROR: Instead found identifier 'reg' + (55, 11) ERROR: Expected ';' + (55, 11) ERROR: Instead found identifier 'reg' + (57, 10) ERROR: Expected ';' + (57, 10) ERROR: Instead found identifier 'reg' + (58, 10) ERROR: Expected ';' + (58, 10) ERROR: Instead found identifier 'reg' + (59, 10) ERROR: Expected ';' + (59, 10) ERROR: Instead found identifier 'reg' + (60, 10) ERROR: Expected ';' + (60, 10) ERROR: Instead found identifier 'reg' + (61, 10) ERROR: Expected ';' + (61, 10) ERROR: Instead found identifier 'reg' + (62, 10) ERROR: Expected ';' + (62, 10) ERROR: Instead found identifier 'reg' + (80, 2) INFO: Compiling void PlayerSvMenu::menu_other() + (82, 9) ERROR: No matching symbol 'G_DEVELOPER_MODE' + (89, 2) INFO: Compiling void PlayerSvMenu::list_summons() + (99, 10) ERROR: Expected ';' + (99, 10) ERROR: Instead found identifier 'reg' + (113, 10) ERROR: Expected ';' + (113, 10) ERROR: Instead found identifier 'reg' + (114, 10) ERROR: Expected ';' + (114, 10) ERROR: Instead found identifier 'reg' + (115, 10) ERROR: Expected ';' + (115, 10) ERROR: Instead found identifier 'reg' + (118, 11) ERROR: Expected ';' + (118, 11) ERROR: Instead found identifier 'reg' + (119, 11) ERROR: Expected ';' + (119, 11) ERROR: Instead found identifier 'reg' + (123, 2) INFO: Compiling void PlayerSvMenu::list_summons_check_active() + (125, 23) ERROR: No matching symbol 'GetToken' + (132, 2) INFO: Compiling void PlayerSvMenu::list_unsummons() + (137, 10) ERROR: Expected ';' + (137, 10) ERROR: Instead found identifier 'reg' + (139, 10) ERROR: Expected ';' + (139, 10) ERROR: Instead found identifier 'reg' + (140, 10) ERROR: Expected ';' + (140, 10) ERROR: Instead found identifier 'reg' + (141, 10) ERROR: Expected ';' + (141, 10) ERROR: Instead found identifier 'reg' + (144, 11) ERROR: Expected ';' + (144, 11) ERROR: Instead found identifier 'reg' + (145, 11) ERROR: Expected ';' + (145, 11) ERROR: Instead found identifier 'reg' + (149, 2) INFO: Compiling void PlayerSvMenu::plr_menu_emote() + (152, 17) ERROR: No matching symbol 'param2' + (153, 3) ERROR: No matching symbol 'ClientCommand' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\player_sv_regen.as + (29, 2) INFO: Compiling void PlayerSvRegen::calculate_new_regen() + (31, 25) ERROR: No matching symbol 'BASE_REGEN_RATE' + (32, 20) ERROR: No matching symbol 'BASE_REGEN_HP' + (33, 25) ERROR: No matching symbol 'BASE_REGEN_RATE' + (34, 20) ERROR: No matching symbol 'BASE_REGEN_MP' + (35, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (45, 2) INFO: Compiling void PlayerSvRegen::calculate_manaring_bonus() + (47, 58) ERROR: No matching symbol 'GetEntityProperty' + (48, 3) ERROR: Illegal operation on 'string' + (52, 2) INFO: Compiling void PlayerSvRegen::calculate_bloodstone_bonus() + (54, 60) ERROR: No matching symbol 'GetEntityMaxHealth' + (55, 3) ERROR: Illegal operation on 'string' + (59, 2) INFO: Compiling void PlayerSvRegen::player_regen_hp() + (61, 3) ERROR: No matching symbol 'SetRepeatDelay' + (62, 14) ERROR: No matching symbol 'GetOwner' + (65, 2) INFO: Compiling void PlayerSvRegen::player_regen_mp() + (67, 3) ERROR: No matching symbol 'SetRepeatDelay' + (68, 3) ERROR: No matching symbol 'GiveMP' + (71, 2) INFO: Compiling void PlayerSvRegen::bloodstone_toggle() + (73, 25) ERROR: No matching symbol 'param1' + (77, 2) INFO: Compiling void PlayerSvRegen::manaring_toggle() + (79, 23) ERROR: No matching symbol 'param1' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\server\dmgpoints.as + (6, 7) ERROR: Method 'void Dmgpoints::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void Dmgpoints::OnDamagedOther(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\server\element_resist.as + (6, 7) ERROR: Method 'void ElementResist::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\server\meta_perks.as + (8, 2) INFO: Compiling MetaPerks::MetaPerks() + (10, 48) ERROR: Expected expression value + (10, 48) ERROR: Instead found '' + (11, 50) ERROR: Expected expression value + (11, 50) ERROR: Instead found '' + (12, 54) ERROR: Expected expression value + (12, 54) ERROR: Instead found '' + (15, 2) INFO: Compiling void MetaPerks::list_cheaters() + (17, 8) ERROR: No matching symbol 'PLR_HAS_TROLLCANO' + (19, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void MetaPerks::ext_keldorn_troll() + (25, 8) ERROR: No matching symbol 'ItemExists' + (26, 3) ERROR: No matching symbol 'CallExternal' + (29, 2) INFO: Compiling void MetaPerks::game_player_putinworld() + (31, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (36, 2) INFO: Compiling void MetaPerks::toggle_halo() + (38, 9) ERROR: No matching symbol 'PLR_DONATOR' + (39, 26) ERROR: No matching symbol 'GetOwner' + (41, 23) ERROR: No matching symbol 'GetOwner' + (42, 4) ERROR: No matching symbol 'ClientEvent' + (46, 23) ERROR: No matching symbol 'GetOwner' + (47, 4) ERROR: No matching symbol 'ClientEvent' + (51, 2) INFO: Compiling void MetaPerks::toggle_dev_halo() + (53, 9) ERROR: No matching symbol 'PLR_DEVELOPER' + (54, 26) ERROR: No matching symbol 'GetOwner' + (56, 23) ERROR: No matching symbol 'GetOwner' + (57, 4) ERROR: No matching symbol 'ClientEvent' + (61, 23) ERROR: No matching symbol 'GetOwner' + (62, 4) ERROR: No matching symbol 'ClientEvent' + (66, 2) INFO: Compiling void MetaPerks::func_donator() + (70, 36) ERROR: Expected expression value + (70, 36) ERROR: Instead found '' + (78, 2) INFO: Compiling void MetaPerks::func_developer() + (82, 36) ERROR: Expected expression value + (82, 36) ERROR: Instead found '' + (90, 2) INFO: Compiling void MetaPerks::func_troll() + (93, 36) ERROR: No matching symbol 'GetOwner' + (94, 8) ERROR: No matching symbol 'G_TROLLCANO_OWNERS' + (96, 8) WARN: Variable 'L_TROLL' hides another variable of same name in outer scope + (99, 3) WARN: Unreachable code + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\sfx_viewheight.as + (12, 2) ERROR: Expected method or property + (12, 2) ERROR: Instead found identifier 'string' + (103, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/player\valid_spawn_new.as + (23, 2) INFO: Compiling void ValidSpawnNew::validate_spawn() + (30, 52) ERROR: Expected expression value + (30, 52) ERROR: Instead found '' + (34, 47) ERROR: Expected expression value + (34, 47) ERROR: Instead found '' + (35, 50) ERROR: Expected expression value + (35, 50) ERROR: Instead found '' + (43, 104) ERROR: Expected ')' or ',' + (43, 104) ERROR: Instead found identifier 'm' + (109, 2) INFO: Compiling void ValidSpawnNew::premt_black() + (111, 3) ERROR: No matching symbol 'Effect' + (114, 2) INFO: Compiling void ValidSpawnNew::gauntlet_invalid_loop() + (116, 3) ERROR: No matching symbol 'LogDebug' + (117, 8) ERROR: No matching symbol 'G_DEVELOPER_MODE' + (119, 4) ERROR: No matching symbol 'SetGlobalVar' + (121, 8) ERROR: No matching symbol 'G_VALID_SPAWN' + (123, 4) ERROR: No matching symbol 'SendInfoMsg' + (124, 4) ERROR: No matching signatures to 'ValidSpawnNew::map_validated(const string)' + (124, 4) INFO: Candidates are: + (124, 4) INFO: void MS::ValidSpawnNew::map_validated() + (125, 20) ERROR: No matching symbol 'GetOwner' + (128, 3) ERROR: No matching symbol 'ApplyEffect' + (129, 3) ERROR: No matching symbol 'Effect' + (130, 19) ERROR: No matching symbol 'GetOwner' + (136, 23) ERROR: No matching symbol 'GetOwner' + (140, 23) ERROR: No matching symbol 'GetOwner' + (142, 4) ERROR: No matching symbol 'ShowHelpTip' + (149, 23) ERROR: No matching symbol 'GetOwner' + (153, 23) ERROR: No matching symbol 'GetOwner' + (155, 4) ERROR: No matching symbol 'ShowHelpTip' + (156, 8) ERROR: Illegal operation on this datatype + (158, 5) ERROR: No matching symbol 'ScheduleDelayedEvent' + (161, 8) ERROR: No matching symbol 'G_VALID_SPAWN' + (162, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (165, 2) INFO: Compiling void ValidSpawnNew::start_vote() + (167, 8) ERROR: No matching symbol 'G_VALID_SPAWN' + (172, 22) ERROR: No matching symbol 'GetToken' + (176, 22) ERROR: No matching symbol 'RMAP_SERIES_START' + (180, 3) ERROR: No matching symbol 'UseTrigger' + (181, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (189, 2) INFO: Compiling void ValidSpawnNew::reset_server() + (191, 8) ERROR: No matching symbol 'G_VALID_SPAWN' + (192, 3) ERROR: No matching symbol 'UseTrigger' + (193, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (196, 2) INFO: Compiling void ValidSpawnNew::manual_changelevel() + (198, 8) ERROR: No matching symbol 'G_VALID_SPAWN' + (199, 3) ERROR: No matching symbol 'CallExternal' + (202, 2) INFO: Compiling void ValidSpawnNew::check_from_valid() + (204, 20) ERROR: No matching symbol 'GetToken' + (205, 20) ERROR: No matching symbol 'QUEST_LASTGAUNTLET' + (209, 2) INFO: Compiling void ValidSpawnNew::make_valid_map_list_english() + (211, 22) ERROR: No matching symbol 'i' + (212, 23) ERROR: No matching symbol 'GetToken' + (214, 23) ERROR: No conversion from 'string' to 'int' available. + (215, 21) ERROR: No conversion from 'string' to 'int' available. + (231, 22) ERROR: No conversion from 'string' to 'int' available. + (233, 19) ERROR: No conversion from 'string' to 'int' available. + (241, 2) INFO: Compiling void ValidSpawnNew::map_validated() + (243, 3) ERROR: No matching symbol 'LogDebug' + (244, 3) ERROR: No matching symbol 'SetGlobalVar' + (245, 22) ERROR: No matching symbol 'GetOwner' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/races.as + (8, 2) INFO: Compiling Races::Races() + (10, 10) ERROR: Expected ';' + (10, 10) ERROR: Instead found identifier 'reg' + (11, 10) ERROR: Expected ';' + (11, 10) ERROR: Instead found identifier 'reg' + (12, 10) ERROR: Expected ';' + (12, 10) ERROR: Instead found identifier 'reg' + (13, 10) ERROR: Expected ';' + (13, 10) ERROR: Instead found identifier 'reg' + (15, 10) ERROR: Expected ';' + (15, 10) ERROR: Instead found identifier 'reg' + (16, 10) ERROR: Expected ';' + (16, 10) ERROR: Instead found identifier 'reg' + (17, 10) ERROR: Expected ';' + (17, 10) ERROR: Instead found identifier 'reg' + (18, 10) ERROR: Expected ';' + (18, 10) ERROR: Instead found identifier 'reg' + (20, 10) ERROR: Expected ';' + (20, 10) ERROR: Instead found identifier 'reg' + (21, 10) ERROR: Expected ';' + (21, 10) ERROR: Instead found identifier 'reg' + (22, 10) ERROR: Expected ';' + (22, 10) ERROR: Instead found identifier 'reg' + (23, 10) ERROR: Expected ';' + (23, 10) ERROR: Instead found identifier 'reg' + (25, 10) ERROR: Expected ';' + (25, 10) ERROR: Instead found identifier 'reg' + (26, 10) ERROR: Expected ';' + (26, 10) ERROR: Instead found identifier 'reg' + (27, 10) ERROR: Expected ';' + (27, 10) ERROR: Instead found identifier 'reg' + (28, 10) ERROR: Expected ';' + (28, 10) ERROR: Instead found identifier 'reg' + (30, 10) ERROR: Expected ';' + (30, 10) ERROR: Instead found identifier 'reg' + (31, 10) ERROR: Expected ';' + (31, 10) ERROR: Instead found identifier 'reg' + (32, 10) ERROR: Expected ';' + (32, 10) ERROR: Instead found identifier 'reg' + (33, 10) ERROR: Expected ';' + (33, 10) ERROR: Instead found identifier 'reg' + (35, 10) ERROR: Expected ';' + (35, 10) ERROR: Instead found identifier 'reg' + (36, 10) ERROR: Expected ';' + (36, 10) ERROR: Instead found identifier 'reg' + (37, 10) ERROR: Expected ';' + (37, 10) ERROR: Instead found identifier 'reg' + (38, 10) ERROR: Expected ';' + (38, 10) ERROR: Instead found identifier 'reg' + (40, 10) ERROR: Expected ';' + (40, 10) ERROR: Instead found identifier 'reg' + (41, 10) ERROR: Expected ';' + (41, 10) ERROR: Instead found identifier 'reg' + (42, 10) ERROR: Expected ';' + (42, 10) ERROR: Instead found identifier 'reg' + (43, 10) ERROR: Expected ';' + (43, 10) ERROR: Instead found identifier 'reg' + (45, 10) ERROR: Expected ';' + (45, 10) ERROR: Instead found identifier 'reg' + (46, 10) ERROR: Expected ';' + (46, 10) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 10) ERROR: Expected ';' + (48, 10) ERROR: Instead found identifier 'reg' + (50, 10) ERROR: Expected ';' + (50, 10) ERROR: Instead found identifier 'reg' + (51, 10) ERROR: Expected ';' + (51, 10) ERROR: Instead found identifier 'reg' + (52, 10) ERROR: Expected ';' + (52, 10) ERROR: Instead found identifier 'reg' + (53, 10) ERROR: Expected ';' + (53, 10) ERROR: Instead found identifier 'reg' + (55, 10) ERROR: Expected ';' + (55, 10) ERROR: Instead found identifier 'reg' + (56, 10) ERROR: Expected ';' + (56, 10) ERROR: Instead found identifier 'reg' + (57, 10) ERROR: Expected ';' + (57, 10) ERROR: Instead found identifier 'reg' + (58, 10) ERROR: Expected ';' + (58, 10) ERROR: Instead found identifier 'reg' + (60, 10) ERROR: Expected ';' + (60, 10) ERROR: Instead found identifier 'reg' + (61, 10) ERROR: Expected ';' + (61, 10) ERROR: Instead found identifier 'reg' + (62, 10) ERROR: Expected ';' + (62, 10) ERROR: Instead found identifier 'reg' + (63, 10) ERROR: Expected ';' + (63, 10) ERROR: Instead found identifier 'reg' + (65, 10) ERROR: Expected ';' + (65, 10) ERROR: Instead found identifier 'reg' + (66, 10) ERROR: Expected ';' + (66, 10) ERROR: Instead found identifier 'reg' + (67, 10) ERROR: Expected ';' + (67, 10) ERROR: Instead found identifier 'reg' + (68, 10) ERROR: Expected ';' + (68, 10) ERROR: Instead found identifier 'reg' + (70, 10) ERROR: Expected ';' + (70, 10) ERROR: Instead found identifier 'reg' + (71, 10) ERROR: Expected ';' + (71, 10) ERROR: Instead found identifier 'reg' + (72, 10) ERROR: Expected ';' + (72, 10) ERROR: Instead found identifier 'reg' + (73, 10) ERROR: Expected ';' + (73, 10) ERROR: Instead found identifier 'reg' + (75, 10) ERROR: Expected ';' + (75, 10) ERROR: Instead found identifier 'reg' + (76, 10) ERROR: Expected ';' + (76, 10) ERROR: Instead found identifier 'reg' + (77, 10) ERROR: Expected ';' + (77, 10) ERROR: Instead found identifier 'reg' + (78, 10) ERROR: Expected ';' + (78, 10) ERROR: Instead found identifier 'reg' + (80, 10) ERROR: Expected ';' + (80, 10) ERROR: Instead found identifier 'reg' + (81, 10) ERROR: Expected ';' + (81, 10) ERROR: Instead found identifier 'reg' + (82, 10) ERROR: Expected ';' + (82, 10) ERROR: Instead found identifier 'reg' + (83, 10) ERROR: Expected ';' + (83, 10) ERROR: Instead found identifier 'reg' + (85, 10) ERROR: Expected ';' + (85, 10) ERROR: Instead found identifier 'reg' + (86, 10) ERROR: Expected ';' + (86, 10) ERROR: Instead found identifier 'reg' + (87, 10) ERROR: Expected ';' + (87, 10) ERROR: Instead found identifier 'reg' + (88, 10) ERROR: Expected ';' + (88, 10) ERROR: Instead found identifier 'reg' + (90, 10) ERROR: Expected ';' + (90, 10) ERROR: Instead found identifier 'reg' + (91, 10) ERROR: Expected ';' + (91, 10) ERROR: Instead found identifier 'reg' + (92, 10) ERROR: Expected ';' + (92, 10) ERROR: Instead found identifier 'reg' + (93, 10) ERROR: Expected ';' + (93, 10) ERROR: Instead found identifier 'reg' + (95, 10) ERROR: Expected ';' + (95, 10) ERROR: Instead found identifier 'reg' + (96, 10) ERROR: Expected ';' + (96, 10) ERROR: Instead found identifier 'reg' + (97, 10) ERROR: Expected ';' + (97, 10) ERROR: Instead found identifier 'reg' + (98, 10) ERROR: Expected ';' + (98, 10) ERROR: Instead found identifier 'reg' + (100, 10) ERROR: Expected ';' + (100, 10) ERROR: Instead found identifier 'reg' + (101, 10) ERROR: Expected ';' + (101, 10) ERROR: Instead found identifier 'reg' + (102, 10) ERROR: Expected ';' + (102, 10) ERROR: Instead found identifier 'reg' + (103, 10) ERROR: Expected ';' + (103, 10) ERROR: Instead found identifier 'reg' + (105, 10) ERROR: Expected ';' + (105, 10) ERROR: Instead found identifier 'reg' + (106, 10) ERROR: Expected ';' + (106, 10) ERROR: Instead found identifier 'reg' + (107, 10) ERROR: Expected ';' + (107, 10) ERROR: Instead found identifier 'reg' + (108, 10) ERROR: Expected ';' + (108, 10) ERROR: Instead found identifier 'reg' + (110, 10) ERROR: Expected ';' + (110, 10) ERROR: Instead found identifier 'reg' + (111, 10) ERROR: Expected ';' + (111, 10) ERROR: Instead found identifier 'reg' + (112, 10) ERROR: Expected ';' + (112, 10) ERROR: Instead found identifier 'reg' + (113, 10) ERROR: Expected ';' + (113, 10) ERROR: Instead found identifier 'reg' + (115, 10) ERROR: Expected ';' + (115, 10) ERROR: Instead found identifier 'reg' + (116, 10) ERROR: Expected ';' + (116, 10) ERROR: Instead found identifier 'reg' + (117, 10) ERROR: Expected ';' + (117, 10) ERROR: Instead found identifier 'reg' + (118, 10) ERROR: Expected ';' + (118, 10) ERROR: Instead found identifier 'reg' + (120, 10) ERROR: Expected ';' + (120, 10) ERROR: Instead found identifier 'reg' + (121, 10) ERROR: Expected ';' + (121, 10) ERROR: Instead found identifier 'reg' + (122, 10) ERROR: Expected ';' + (122, 10) ERROR: Instead found identifier 'reg' + (123, 10) ERROR: Expected ';' + (123, 10) ERROR: Instead found identifier 'reg' + (125, 10) ERROR: Expected ';' + (125, 10) ERROR: Instead found identifier 'reg' + (126, 10) ERROR: Expected ';' + (126, 10) ERROR: Instead found identifier 'reg' + (127, 10) ERROR: Expected ';' + (127, 10) ERROR: Instead found identifier 'reg' + (128, 10) ERROR: Expected ';' + (128, 10) ERROR: Instead found identifier 'reg' + (130, 10) ERROR: Expected ';' + (130, 10) ERROR: Instead found identifier 'reg' + (131, 10) ERROR: Expected ';' + (131, 10) ERROR: Instead found identifier 'reg' + (132, 10) ERROR: Expected ';' + (132, 10) ERROR: Instead found identifier 'reg' + (133, 10) ERROR: Expected ';' + (133, 10) ERROR: Instead found identifier 'reg' + (135, 10) ERROR: Expected ';' + (135, 10) ERROR: Instead found identifier 'reg' + (136, 10) ERROR: Expected ';' + (136, 10) ERROR: Instead found identifier 'reg' + (137, 10) ERROR: Expected ';' + (137, 10) ERROR: Instead found identifier 'reg' + (138, 10) ERROR: Expected ';' + (138, 10) ERROR: Instead found identifier 'reg' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/regorty\fmines_merchant.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/roghan\crystal.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/roghan\slow_walk.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/roghan\test_boss.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/roghan\test_npc.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\admin\AdminSystem.as + (62, 9) INFO: Compiling bool AdminSystem::ProcessCommand(CBasePlayer@, const string&in, const string[]&in) + (67, 18) ERROR: No matching symbol 'g_PlayerManager' + (69, 67) ERROR: 'pev' is not a member of 'CBasePlayer' + (77, 43) ERROR: No matching symbol 'toLowerCase' + (264, 9) INFO: Compiling void AdminSystem::CheckDeveloperMode() + (271, 26) ERROR: No matching symbol 'find' + (281, 13) ERROR: No matching symbol 'g_PlayerManager' + (300, 9) INFO: Compiling void AdminSystem::SetDeveloperPlayer(const string&in) + (303, 13) ERROR: No matching symbol 'g_PlayerManager' + (328, 9) INFO: Compiling void AdminSystem::LogCommand(CBasePlayer@, const string&in, const string[]&in) + (330, 38) ERROR: 'pev' is not a member of 'CBasePlayer' + (357, 9) INFO: Compiling bool AdminSystem::HandleAddSpawnCommand(CBasePlayer@, const string[]&in) + (371, 87) ERROR: 'pev' is not a member of 'CBasePlayer' + (371, 65) ERROR: 'pev' is not a member of 'CBasePlayer' + (371, 43) ERROR: 'pev' is not a member of 'CBasePlayer' + (374, 17) ERROR: No matching symbol 'g_SpawnSystem' + (376, 82) ERROR: No matching symbol 'ToString' + (389, 9) INFO: Compiling bool AdminSystem::HandleListSpawnsCommand(CBasePlayer@, const string[]&in) + (391, 13) ERROR: No matching symbol 'g_SpawnSystem' + (398, 9) INFO: Compiling bool AdminSystem::HandleTestSpawnCommand(CBasePlayer@, const string[]&in) + (408, 17) ERROR: No matching symbol 'g_SpawnSystem' + (423, 9) INFO: Compiling bool AdminSystem::HandleClearSpawnsCommand(CBasePlayer@, const string[]&in) + (425, 18) ERROR: No matching symbol 'g_PlayerManager' + (431, 13) ERROR: No matching symbol 'g_SpawnSystem' + (439, 9) INFO: Compiling bool AdminSystem::HandleKickCommand(CBasePlayer@, const string[]&in) + (447, 18) ERROR: No matching symbol 'g_PlayerManager' + (461, 9) INFO: Compiling bool AdminSystem::HandleBanCommand(CBasePlayer@, const string[]&in) + (463, 18) ERROR: No matching symbol 'g_PlayerManager' + (483, 9) INFO: Compiling bool AdminSystem::HandleListPlayersCommand(CBasePlayer@, const string[]&in) + (485, 43) ERROR: No matching symbol 'g_PlayerManager' + (493, 68) ERROR: 'pev' is not a member of 'CBasePlayer' + (494, 25) ERROR: No matching symbol 'g_PlayerManager' + (508, 9) INFO: Compiling bool AdminSystem::HandleDevModeCommand(CBasePlayer@, const string[]&in) + (510, 18) ERROR: No matching symbol 'g_PlayerManager' + (518, 39) ERROR: No matching symbol 'toLowerCase' + (522, 21) ERROR: No matching symbol 'g_PlayerManager' + (528, 21) ERROR: No matching symbol 'g_PlayerManager' + (548, 9) INFO: Compiling bool AdminSystem::HandleSetDevCommand(CBasePlayer@, const string[]&in) + (550, 18) ERROR: No matching symbol 'g_PlayerManager' + (563, 43) ERROR: 'pev' is not a member of 'CBasePlayer' + (573, 9) INFO: Compiling bool AdminSystem::HandleReloadCommand(CBasePlayer@, const string[]&in) + (575, 18) ERROR: No matching symbol 'g_PlayerManager' + (588, 9) INFO: Compiling bool AdminSystem::HandleStatusCommand(CBasePlayer@, const string[]&in) + (591, 37) ERROR: No matching symbol 'g_PlayerManager' + (592, 42) ERROR: No matching symbol 'g_SpawnSystem' + (603, 9) INFO: Compiling bool AdminSystem::HandleGiveCommand(CBasePlayer@, const string[]&in) + (605, 18) ERROR: No matching symbol 'g_PlayerManager' + (624, 9) INFO: Compiling bool AdminSystem::HandleSpawnEntityCommand(CBasePlayer@, const string[]&in) + (626, 18) ERROR: No matching symbol 'g_PlayerManager' + (645, 9) INFO: Compiling bool AdminSystem::HandleTeleportCommand(CBasePlayer@, const string[]&in) + (651, 71) ERROR: No matching symbol 'ToString' + (670, 9) INFO: Compiling bool AdminSystem::HandleGodModeCommand(CBasePlayer@, const string[]&in) + (672, 18) ERROR: No matching symbol 'g_PlayerManager' + (685, 9) INFO: Compiling bool AdminSystem::HandleNoclipCommand(CBasePlayer@, const string[]&in) + (687, 18) ERROR: No matching symbol 'g_PlayerManager' + (700, 9) INFO: Compiling bool AdminSystem::HandleCriticalNPCCommand(CBasePlayer@, const string[]&in) + (718, 17) ERROR: Identifier 'CriticalNPCManager' is not a data type + (756, 9) INFO: Compiling bool AdminSystem::HandleRespawnNPCCommand(CBasePlayer@, const string[]&in) + (758, 18) ERROR: No matching symbol 'g_PlayerManager' + (782, 87) ERROR: 'pev' is not a member of 'CBasePlayer' + (782, 65) ERROR: 'pev' is not a member of 'CBasePlayer' + (782, 43) ERROR: 'pev' is not a member of 'CBasePlayer' + (785, 17) ERROR: No matching symbol 'respawn_critical_npc' + (787, 116) ERROR: No matching symbol 'ToString' + (800, 9) INFO: Compiling bool AdminSystem::HandleNPCStatusCommand(CBasePlayer@, const string[]&in) + (808, 13) ERROR: Identifier 'CriticalNPCManager' is not a data type + (831, 9) INFO: Compiling bool AdminSystem::HandleTestTriggerCommand(CBasePlayer@, const string[]&in) + (833, 18) ERROR: No matching symbol 'g_PlayerManager' + (848, 92) ERROR: 'pev' is not a member of 'CBasePlayer' + (848, 70) ERROR: 'pev' is not a member of 'CBasePlayer' + (848, 48) ERROR: 'pev' is not a member of 'CBasePlayer' + (850, 27) ERROR: No matching symbol 'AdvancedTriggerSystem_EvaluateFilter' + (860, 9) INFO: Compiling bool AdminSystem::HandleCreateHPSeqCommand(CBasePlayer@, const string[]&in) + (862, 18) ERROR: No matching symbol 'g_PlayerManager' + (883, 92) ERROR: 'pev' is not a member of 'CBasePlayer' + (883, 70) ERROR: 'pev' is not a member of 'CBasePlayer' + (883, 48) ERROR: 'pev' is not a member of 'CBasePlayer' + (885, 28) ERROR: No matching symbol 'CreateClassicHPSequence' + (887, 26) WARN: 'seqIndex' is not initialized. + (903, 9) INFO: Compiling bool AdminSystem::HandleResetHPSeqCommand(CBasePlayer@, const string[]&in) + (921, 17) ERROR: Identifier 'HPSequenceTrigger' is not a data type + (941, 9) INFO: Compiling bool AdminSystem::HandleListHPSeqCommand(CBasePlayer@, const string[]&in) + (949, 13) ERROR: Identifier 'HPSequenceTrigger' is not a data type + (966, 9) INFO: Compiling bool AdminSystem::HandleTriggerStatusCommand(CBasePlayer@, const string[]&in) + (975, 13) ERROR: Identifier 'HPSequenceTrigger' is not a data type + (986, 13) ERROR: Identifier 'AdvancedTriggerSystem' is not a data type + (1003, 9) INFO: Compiling bool AdminSystem::HandlePartyInfoCommand(CBasePlayer@, const string[]&in) + (1011, 13) ERROR: Identifier 'AdvancedTriggerSystem' is not a data type + (1015, 17) ERROR: Identifier 'PartyAnalysis' is not a data type + (1039, 9) INFO: Compiling bool AdminSystem::HandleTestPotionCommand(CBasePlayer@, const string[]&in) + (1041, 18) ERROR: No matching symbol 'IsPlayerDeveloper' + (1050, 17) ERROR: No matching symbol 'MS::UsePotionOfForgetfulness' + (1065, 9) INFO: Compiling bool AdminSystem::HandleForgetSpellSelectCommand(CBasePlayer@, const string[]&in) + (1082, 17) ERROR: No matching symbol 'MS::HandleForgetSpellCommand' + (1097, 9) INFO: Compiling bool AdminSystem::HandleConfirmForgetCommand(CBasePlayer@, const string[]&in) + (1100, 17) ERROR: No matching symbol 'MS::HandleConfirmForgetCommand' + (1115, 9) INFO: Compiling bool AdminSystem::HandleCancelForgetCommand(CBasePlayer@, const string[]&in) + (1118, 17) ERROR: No matching symbol 'MS::HandleCancelForgetCommand' + (1133, 9) INFO: Compiling bool AdminSystem::HandleListSpellsCommand(CBasePlayer@, const string[]&in) + (1141, 17) ERROR: Identifier 'MagicSystem' is not a data type + (1148, 17) ERROR: Identifier 'SpellRegistry' is not a data type + (1177, 9) INFO: Compiling bool AdminSystem::HandleLearnSpellCommand(CBasePlayer@, const string[]&in) + (1192, 17) ERROR: Identifier 'MagicSystem' is not a data type + (1199, 17) ERROR: Identifier 'SpellRegistry' is not a data type + (1252, 9) INFO: Compiling void AdminSystem::SendMessageToPlayer(CBasePlayer@, const string&in) + (1258, 54) ERROR: 'pev' is not a member of 'CBasePlayer' + (1290, 9) INFO: Compiling bool AdminSystem::HandleTreasureStatusCommand(CBasePlayer@, const string[]&in) + (1298, 17) ERROR: Identifier 'TreasureManager' is not a data type + (1314, 9) INFO: Compiling bool AdminSystem::HandleScrambleTreasureCommand(CBasePlayer@, const string[]&in) + (1316, 18) ERROR: No matching symbol 'g_PlayerManager' + (1322, 13) ERROR: No matching symbol 'MS::ForceTreasureScramble' + (1331, 9) INFO: Compiling bool AdminSystem::HandleAddTreasureSpawnCommand(CBasePlayer@, const string[]&in) + (1376, 17) ERROR: Identifier 'TreasureManager' is not a data type + (1395, 9) INFO: Compiling bool AdminSystem::HandleRespawnTreasuresCommand(CBasePlayer@, const string[]&in) + (1403, 17) ERROR: Identifier 'TreasureManager' is not a data type + (1420, 9) INFO: Compiling bool AdminSystem::HandleClearFarmDataCommand(CBasePlayer@, const string[]&in) + (1434, 17) ERROR: Identifier 'TreasureManager' is not a data type + (1459, 9) INFO: Compiling bool AdminSystem::HandleGenerateTreasureCommand(CBasePlayer@, const string[]&in) + (1461, 18) ERROR: No matching symbol 'g_PlayerManager' + (1485, 87) ERROR: 'pev' is not a member of 'CBasePlayer' + (1485, 65) ERROR: 'pev' is not a member of 'CBasePlayer' + (1485, 43) ERROR: 'pev' is not a member of 'CBasePlayer' + (1493, 17) ERROR: No matching symbol 'MS::GenerateTreasureForPlayer' + (1495, 82) ERROR: No matching symbol 'ToString' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\admin\CallExternalBridge.as + (40, 35) ERROR: Identifier 'ICommunicationHandler' is not a data type in namespace 'MS' or parent + (52, 34) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (220, 41) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (258, 43) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (290, 44) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (311, 41) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (334, 43) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (364, 46) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (390, 39) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (416, 40) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (427, 42) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (454, 45) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (465, 40) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (474, 38) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (485, 36) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (494, 35) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (505, 34) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (514, 36) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (525, 35) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (534, 40) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (543, 39) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (552, 39) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (561, 44) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + (570, 42) ERROR: Identifier 'CommunicationMessage' is not a data type in namespace 'MS' or parent + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\admin\EntityCommunicationInit.as + (138, 5) INFO: Compiling void TestCommunicationSystem() + (155, 106) ERROR: Expected ')' or ',' + (155, 106) ERROR: Instead found '@' + (160, 9) ERROR: Expected expression value + (160, 9) ERROR: Instead found reserved keyword 'else' + (168, 102) ERROR: Expected ')' or ',' + (168, 102) ERROR: Instead found '@' + (173, 9) ERROR: Expected expression value + (173, 9) ERROR: Instead found reserved keyword 'else' + (181, 107) ERROR: Expected ')' or ',' + (181, 107) ERROR: Instead found '@' + (186, 9) ERROR: Expected expression value + (186, 9) ERROR: Instead found reserved keyword 'else' + (196, 120) ERROR: Expected ')' or ',' + (196, 120) ERROR: Instead found '@' + (197, 121) ERROR: Expected ')' or ',' + (197, 121) ERROR: Instead found '@' + (336, 5) INFO: Compiling bool SendQuestItemFound(const string&in, const string&in) + (338, 101) ERROR: Expected ')' or ',' + (338, 101) ERROR: Instead found '@' + (344, 5) INFO: Compiling bool SendCriticalNPCDeath(const string&in, const string&in) + (1, 1) ERROR: Expression 'CBaseEntity' is a data type + (346, 16) ERROR: Failed while compiling default arg for parameter 6 in function 'bool CallExternal(const string&in, const string&in, const string&in = "", const string&in = "", const string&in = "", const string&in = "", CBaseEntity@ = CBaseEntity@())' + (352, 5) INFO: Compiling bool SendAdminCommand(const string&in, const string[]&in) + (354, 83) ERROR: Expected ')' or ',' + (354, 83) ERROR: Instead found '@' + (360, 5) INFO: Compiling bool SendTriggerActivation(const string&in, const string&in) + (1, 1) ERROR: Expression 'CBaseEntity' is a data type + (362, 16) ERROR: Failed while compiling default arg for parameter 6 in function 'bool CallExternal(const string&in, const string&in, const string&in = "", const string&in = "", const string&in = "", const string&in = "", CBaseEntity@ = CBaseEntity@())' + (668, 5) INFO: Compiling bool callexternal(const string&in, const string&in, const string&in = "", const string&in = "", const string&in = "", const string&in = "") + (1, 1) ERROR: Expression 'CBaseEntity' is a data type + (672, 16) ERROR: Failed while compiling default arg for parameter 6 in function 'bool CallExternal(const string&in, const string&in, const string&in = "", const string&in = "", const string&in = "", const string&in = "", CBaseEntity@ = CBaseEntity@())' + (697, 5) INFO: Compiling bool critical_npc_died(const string&in, const string&in) + (1, 1) ERROR: Expression 'CBaseEntity' is a data type + (699, 16) ERROR: Failed while compiling default arg for parameter 6 in function 'bool CallExternal(const string&in, const string&in, const string&in = "", const string&in = "", const string&in = "", const string&in = "", CBaseEntity@ = CBaseEntity@())' + (30, 5) INFO: Compiling void SendQuestPlayerMessage(const string&in, const string&in, const string&in) + (33, 9) ERROR: No matching symbol '::SendQuestPlayerMessage' + (33, 9) INFO: Compiling CommunicationMessage::CommunicationMessage() + (37, 34) ERROR: Expected ';' + (37, 34) ERROR: Instead found '@' + (43, 9) INFO: Compiling CommunicationMessage::CommunicationMessage(const string&in, const string&in) + (47, 34) ERROR: Expected ';' + (47, 34) ERROR: Instead found '@' + (143, 9) INFO: Compiling bool EntityCommunicationSystem::ProcessCommunication(const string&in, const string&in, const string[]&in, CBaseEntity@, const string&in = "") + (151, 29) ERROR: No appropriate opAssign method found in 'CBaseEntity' for value assignment + (476, 9) INFO: Compiling string EntityCommunicationSystem::GenerateSenderID(CBaseEntity@) + (478, 26) ERROR: No matching symbol 'IsValid' + (220, 9) INFO: Compiling bool GameMasterCommHandler::HandleQuestItemFound(const CommunicationMessage&in) + (232, 33) ERROR: No matching symbol 'IsValid' + (581, 9) INFO: Compiling string GameMasterCommHandler::GetPlayerIDFromEntity(CBaseEntity@) + (583, 26) ERROR: No matching symbol 'IsValid' + (296, 9) INFO: Compiling bool AdvancedTriggerSystem::ParseLogicalExpression(const PartyAnalysis&in) + (307, 28) ERROR: No matching symbol 'Mid' + (335, 9) INFO: Compiling bool AdvancedTriggerSystem::ParseCondition(const PartyAnalysis&in) + (341, 66) ERROR: No matching symbol 'Mid' + (381, 9) INFO: Compiling bool AdvancedTriggerSystem::EvaluateCondition(const string&in, ComparisonOperator, const string&in, const PartyAnalysis&in) + (383, 39) ERROR: No matching symbol 'ToLower' + (438, 9) INFO: Compiling bool AdvancedTriggerSystem::EvaluateRaceCondition(const string&in, ComparisonOperator, const PartyAnalysis&in) + (440, 34) ERROR: No matching symbol 'ToLower' + (465, 9) INFO: Compiling bool AdvancedTriggerSystem::EvaluateClassCondition(const string&in, ComparisonOperator, const PartyAnalysis&in) + (467, 35) ERROR: No matching symbol 'ToLower' + (544, 9) INFO: Compiling void AdvancedTriggerSystem::SkipWhitespace() + (548, 34) ERROR: No matching symbol 'Mid' + (563, 9) INFO: Compiling string AdvancedTriggerSystem::ParseIdentifier() + (569, 34) ERROR: No matching symbol 'Mid' + (589, 9) INFO: Compiling ComparisonOperator AdvancedTriggerSystem::ParseOperator() + (596, 25) ERROR: No matching symbol 'Mid' + (598, 23) ERROR: No matching symbol 'Mid' + (642, 9) INFO: Compiling string AdvancedTriggerSystem::ParseValue() + (650, 34) ERROR: No matching symbol 'Mid' + (702, 9) INFO: Compiling float AdvancedTriggerSystem::parseFloat(const string&in) + (713, 34) ERROR: No matching symbol 'Mid' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\admin\EntityCommunicationSystem.as + (33, 9) INFO: Compiling CommunicationMessage::CommunicationMessage() + (37, 34) ERROR: Expected ';' + (37, 34) ERROR: Instead found '@' + (43, 9) INFO: Compiling CommunicationMessage::CommunicationMessage(const string&in, const string&in) + (47, 34) ERROR: Expected ';' + (47, 34) ERROR: Instead found '@' + (143, 9) INFO: Compiling bool EntityCommunicationSystem::ProcessCommunication(const string&in, const string&in, const string[]&in, CBaseEntity@, const string&in = "") + (151, 29) ERROR: No appropriate opAssign method found in 'CBaseEntity' for value assignment + (476, 9) INFO: Compiling string EntityCommunicationSystem::GenerateSenderID(CBaseEntity@) + (478, 26) ERROR: No matching symbol 'IsValid' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\combat\CombatSystem.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\commands\CommandModule.as + (803, 29) ERROR: Identifier 'VoteManager' is not a data type in namespace 'MS' or parent + (811, 35) ERROR: Identifier 'MapTransitionManager' is not a data type in namespace 'MS' or parent + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\commands\CommandRegistry.as + (866, 5) INFO: Compiling bool RegisterCommand(const string&in, CommandHandler@) + (868, 37) ERROR: No matching symbol 'GetCommandRegistry' + (877, 5) INFO: Compiling CommandResult ProcessCommand(CBasePlayer@, const string&in, const string[]&in) + (879, 37) ERROR: No matching symbol 'GetCommandRegistry' + (888, 5) INFO: Compiling CommandResult ProcessCommandString(CBasePlayer@, const string&in) + (890, 37) ERROR: No matching symbol 'GetCommandRegistry' + (120, 9) INFO: Compiling bool BaseCommandHandler::CheckPlayerPermission(CBasePlayer@, PermissionLevel) + (125, 41) ERROR: No matching symbol 'GetCommandRegistry' + (328, 9) INFO: Compiling void CommandAlias::RegisterAlias(const string&in, const string&in) + (332, 41) ERROR: No matching symbol 'ToLower' + (332, 23) ERROR: No matching symbol 'ToLower' + (339, 9) INFO: Compiling string CommandAlias::ResolveAlias(const string&in) + (341, 35) ERROR: No matching symbol 'ToLower' + (355, 9) INFO: Compiling bool CommandAlias::IsAlias(const string&in) + (357, 37) ERROR: No matching symbol 'ToLower' + (379, 9) INFO: Compiling void CommandAlias::RemoveAlias(const string&in) + (381, 30) ERROR: No matching symbol 'ToLower' + (473, 9) INFO: Compiling bool CommandRegistry::RegisterCommand(const string&in, CommandHandler@) + (481, 35) ERROR: No matching symbol 'ToLower' + (511, 9) INFO: Compiling bool CommandRegistry::UnregisterCommand(const string&in) + (513, 35) ERROR: No matching symbol 'ToLower' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\commands\VotingCommands.as + (803, 29) ERROR: Identifier 'VoteManager' is not a data type in namespace 'MS' or parent + (811, 35) ERROR: Identifier 'MapTransitionManager' is not a data type in namespace 'MS' or parent + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\gamemaster\GameMaster.as + (27, 5) ERROR: Expected one of: get, set, } + (27, 5) ERROR: Instead found identifier 'string' + (283, 15) ERROR: Expected identifier + (283, 15) ERROR: Instead found '(' + (459, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\gamemaster\GameMasterMapTransitions.as + (502, 5) INFO: Compiling void SetPlayerTransitionData(const string&in, const string&in, const string&in, const string&in) + (524, 29) ERROR: No matching symbol 'ToLower' + (637, 5) INFO: Compiling void StartGenericVote(const string&in, const string[]&in, const string&in, const string&in) + (651, 24) ERROR: No matching symbol 'MS::gm_create_vote' + (653, 13) WARN: 'success' is not initialized. + (750, 5) INFO: Compiling void ScheduleDelayedEvent(float, const string&in) + (757, 25) ERROR: No matching symbol 'MS::g_Scheduler' + (854, 5) INFO: Compiling MessageColor StringToMessageColor(const string&in) + (856, 29) ERROR: No matching symbol 'ToLower' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\gamemaster\GameMasterPlayerCommands.as + (803, 29) ERROR: Identifier 'VoteManager' is not a data type in namespace 'MS' or parent + (811, 35) ERROR: Identifier 'MapTransitionManager' is not a data type in namespace 'MS' or parent + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\gamemaster\GameMasterTest.as + (27, 5) ERROR: Expected one of: get, set, } + (27, 5) ERROR: Instead found identifier 'string' + (283, 15) ERROR: Expected identifier + (283, 15) ERROR: Instead found '(' + (459, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\gamemaster\GameMasterVoting.as + (844, 9) ERROR: Identifier 'VoteData' is not a data type in namespace 'MS' or parent + (1104, 43) ERROR: Identifier 'DelayedAction' is not a data type in namespace 'MS' or parent + (1277, 17) ERROR: Identifier 'PlayerVoteRecord' is not a data type in namespace 'MS' or parent + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\magic\MagicCombatTest.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\magic\MagicSystem.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\magic\SpellRegistry.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\magic\TestPotionOfForgetfulness.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\player\PlayerManager.as + (23, 5) ERROR: Expected method or property + (23, 5) ERROR: Instead found reserved keyword 'private' + (40, 11) ERROR: Expected identifier + (40, 11) ERROR: Instead found ':' + (161, 37) ERROR: Expected ',' or ';' + (161, 37) ERROR: Instead found reserved keyword 'const' + (178, 32) ERROR: Expected ',' or ';' + (178, 32) ERROR: Instead found reserved keyword 'const' + (224, 31) ERROR: Expected ',' or ';' + (224, 31) ERROR: Instead found reserved keyword 'const' + (261, 5) ERROR: Unexpected token 'private' + (352, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\player\QuestItemIntegration.as + (22, 5) ERROR: Expected method or property + (22, 5) ERROR: Instead found reserved keyword 'private' + (31, 11) ERROR: Expected identifier + (31, 11) ERROR: Instead found ':' + (346, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\player\QuestTracker.as + (30, 5) INFO: Compiling void SendQuestPlayerMessage(const string&in, const string&in, const string&in) + (33, 9) ERROR: No matching symbol '::SendQuestPlayerMessage' + (43, 5) INFO: Compiling void CallNPCReceiveQuestItem(const string&in, const string&in, const string&in) + (51, 29) ERROR: No matching symbol 'FindEntityByName' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\tests\CommunicationTests.as + (18, 5) ERROR: Expected method or property + (18, 5) ERROR: Instead found reserved keyword 'private' + (21, 11) ERROR: Expected identifier + (21, 11) ERROR: Instead found ':' + (91, 5) ERROR: Unexpected token 'private' + (806, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\tests\EngineIntegrationTests.as + (18, 5) ERROR: Expected method or property + (18, 5) ERROR: Instead found reserved keyword 'private' + (21, 11) ERROR: Expected identifier + (21, 11) ERROR: Instead found ':' + (79, 5) ERROR: Unexpected token 'private' + (518, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\tests\MasterTestSuite.as + (17, 5) ERROR: Expected method or property + (17, 5) ERROR: Instead found reserved keyword 'private' + (24, 11) ERROR: Expected identifier + (24, 11) ERROR: Instead found ':' + (188, 5) ERROR: Unexpected token 'private' + (474, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\tests\NPCManagerTests.as + (18, 5) ERROR: Expected method or property + (18, 5) ERROR: Instead found reserved keyword 'private' + (21, 11) ERROR: Expected identifier + (21, 11) ERROR: Instead found ':' + (75, 5) ERROR: Unexpected token 'private' + (750, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\tests\PerformanceTests.as + (18, 5) ERROR: Expected method or property + (18, 5) ERROR: Instead found reserved keyword 'private' + (21, 11) ERROR: Expected identifier + (21, 11) ERROR: Instead found ':' + (72, 5) ERROR: Unexpected token 'private' + (915, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\tests\PlayerManagementTests.as + (18, 5) ERROR: Expected method or property + (18, 5) ERROR: Instead found reserved keyword 'private' + (21, 11) ERROR: Expected identifier + (21, 11) ERROR: Instead found ':' + (59, 5) ERROR: Unexpected token 'private' + (640, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\tests\QuestSystemTests.as + (18, 5) ERROR: Expected method or property + (18, 5) ERROR: Instead found reserved keyword 'private' + (21, 11) ERROR: Expected identifier + (21, 11) ERROR: Instead found ':' + (90, 5) ERROR: Unexpected token 'private' + (683, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\tests\TestUtilities.as + (90, 5) ERROR: Expected method or property + (90, 5) ERROR: Instead found reserved keyword 'private' + (94, 11) ERROR: Expected identifier + (94, 11) ERROR: Instead found ':' + (116, 28) ERROR: Expected ',' or ';' + (116, 28) ERROR: Instead found reserved keyword 'const' + (128, 5) ERROR: Expected method or property + (128, 5) ERROR: Instead found reserved keyword 'private' + (134, 11) ERROR: Expected identifier + (134, 11) ERROR: Instead found ':' + (335, 35) ERROR: Expected ',' or ';' + (335, 35) ERROR: Instead found reserved keyword 'const' + (352, 31) ERROR: Expected ',' or ';' + (352, 31) ERROR: Instead found reserved keyword 'const' + (357, 5) ERROR: Unexpected token 'private' + (362, 5) ERROR: Unexpected token '}' + (531, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\tests\test_engine_events.as + (11, 1) INFO: Compiling void TestOnEnginePlayerConnect(const string&in, const string&in) + (13, 5) ERROR: No matching symbol 'LogInfo' + (16, 1) INFO: Compiling void TestOnEnginePlayerDisconnect(const string&in, const string&in) + (18, 5) ERROR: No matching symbol 'LogInfo' + (21, 1) INFO: Compiling void TestOnEngineMonsterKilled(const string&in, const string&in, const Vector3&in) + (23, 5) ERROR: No matching symbol 'LogInfo' + (30, 1) INFO: Compiling void TestOnEngineTreasureSpawned(const string&in, const Vector3&in) + (32, 5) ERROR: No matching symbol 'LogInfo' + (39, 1) INFO: Compiling void RegisterTestEventHandlers() + (41, 5) ERROR: No matching symbol 'LogInfo' + (49, 5) ERROR: No matching symbol 'LogInfo' + (56, 1) INFO: Compiling void UnregisterTestEventHandlers() + (58, 5) ERROR: No matching symbol 'LogInfo' + (65, 5) ERROR: No matching symbol 'LogInfo' + (69, 1) INFO: Compiling void TestEngineEventIntegration() + (71, 5) ERROR: No matching symbol 'LogInfo' + (76, 5) ERROR: No matching symbol 'LogInfo' + (77, 5) ERROR: No matching symbol 'LogInfo' + (78, 5) ERROR: No matching symbol 'LogInfo' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\tests\test_quest_system.as + (15, 5) INFO: Compiling void TestQuestSystem() + (58, 9) ERROR: Identifier 'QuestItemIntegration' is not a data type + (76, 5) INFO: Compiling void TestQuestPersistence() + (80, 9) ERROR: Identifier 'QuestTracker' is not a data type + (97, 5) INFO: Compiling void TestLegacyIntegration() + (101, 9) ERROR: Identifier 'QuestItemIntegration' is not a data type + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\triggers\AdvancedTriggerSystem.as + (296, 9) INFO: Compiling bool AdvancedTriggerSystem::ParseLogicalExpression(const PartyAnalysis&in) + (307, 28) ERROR: No matching symbol 'Mid' + (335, 9) INFO: Compiling bool AdvancedTriggerSystem::ParseCondition(const PartyAnalysis&in) + (341, 66) ERROR: No matching symbol 'Mid' + (381, 9) INFO: Compiling bool AdvancedTriggerSystem::EvaluateCondition(const string&in, ComparisonOperator, const string&in, const PartyAnalysis&in) + (383, 39) ERROR: No matching symbol 'ToLower' + (438, 9) INFO: Compiling bool AdvancedTriggerSystem::EvaluateRaceCondition(const string&in, ComparisonOperator, const PartyAnalysis&in) + (440, 34) ERROR: No matching symbol 'ToLower' + (465, 9) INFO: Compiling bool AdvancedTriggerSystem::EvaluateClassCondition(const string&in, ComparisonOperator, const PartyAnalysis&in) + (467, 35) ERROR: No matching symbol 'ToLower' + (544, 9) INFO: Compiling void AdvancedTriggerSystem::SkipWhitespace() + (548, 34) ERROR: No matching symbol 'Mid' + (563, 9) INFO: Compiling string AdvancedTriggerSystem::ParseIdentifier() + (569, 34) ERROR: No matching symbol 'Mid' + (589, 9) INFO: Compiling ComparisonOperator AdvancedTriggerSystem::ParseOperator() + (596, 25) ERROR: No matching symbol 'Mid' + (598, 23) ERROR: No matching symbol 'Mid' + (642, 9) INFO: Compiling string AdvancedTriggerSystem::ParseValue() + (650, 34) ERROR: No matching symbol 'Mid' + (702, 9) INFO: Compiling float AdvancedTriggerSystem::parseFloat(const string&in) + (713, 34) ERROR: No matching symbol 'Mid' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\triggers\HPSequenceTrigger.as + (296, 9) INFO: Compiling bool AdvancedTriggerSystem::ParseLogicalExpression(const PartyAnalysis&in) + (307, 28) ERROR: No matching symbol 'Mid' + (335, 9) INFO: Compiling bool AdvancedTriggerSystem::ParseCondition(const PartyAnalysis&in) + (341, 66) ERROR: No matching symbol 'Mid' + (381, 9) INFO: Compiling bool AdvancedTriggerSystem::EvaluateCondition(const string&in, ComparisonOperator, const string&in, const PartyAnalysis&in) + (383, 39) ERROR: No matching symbol 'ToLower' + (438, 9) INFO: Compiling bool AdvancedTriggerSystem::EvaluateRaceCondition(const string&in, ComparisonOperator, const PartyAnalysis&in) + (440, 34) ERROR: No matching symbol 'ToLower' + (465, 9) INFO: Compiling bool AdvancedTriggerSystem::EvaluateClassCondition(const string&in, ComparisonOperator, const PartyAnalysis&in) + (467, 35) ERROR: No matching symbol 'ToLower' + (544, 9) INFO: Compiling void AdvancedTriggerSystem::SkipWhitespace() + (548, 34) ERROR: No matching symbol 'Mid' + (563, 9) INFO: Compiling string AdvancedTriggerSystem::ParseIdentifier() + (569, 34) ERROR: No matching symbol 'Mid' + (589, 9) INFO: Compiling ComparisonOperator AdvancedTriggerSystem::ParseOperator() + (596, 25) ERROR: No matching symbol 'Mid' + (598, 23) ERROR: No matching symbol 'Mid' + (642, 9) INFO: Compiling string AdvancedTriggerSystem::ParseValue() + (650, 34) ERROR: No matching symbol 'Mid' + (702, 9) INFO: Compiling float AdvancedTriggerSystem::parseFloat(const string&in) + (713, 34) ERROR: No matching symbol 'Mid' + (401, 9) INFO: Compiling void EntitySpawner::Update(float) + (418, 56) ERROR: No appropriate opAssign method found in 'CBaseEntity' for value assignment + (457, 9) INFO: Compiling void EntitySpawner::ProcessRespawnTracking() + (470, 62) ERROR: Can't implicitly convert from 'CBaseEntity@' to 'CBaseEntity&'. + (481, 58) ERROR: Can't implicitly convert from 'CBaseEntity@' to 'CBaseEntity&'. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\triggers\TriggerSystemExample.as + (40, 5) INFO: Compiling void SetupSimpleHPTrigger() + (46, 24) ERROR: No matching symbol 'CreateClassicHPSequence' + (48, 22) WARN: 'seqIndex' is not initialized. + (94, 5) INFO: Compiling void SetupMultiZoneEncounters() + (101, 13) ERROR: No matching symbol 'AddHPThreshold' + (102, 13) ERROR: No matching symbol 'AddHPThreshold' + (103, 13) ERROR: No matching symbol 'AddHPThreshold' + (110, 13) ERROR: No matching symbol 'AddHPThreshold' + (111, 13) ERROR: No matching symbol 'AddHPThreshold' + (112, 13) ERROR: No matching symbol 'AddHPThreshold' + (119, 13) ERROR: No matching symbol 'AddHPThreshold' + (120, 13) ERROR: No matching symbol 'AddHPThreshold' + (121, 13) ERROR: No matching symbol 'AddHPThreshold' + (133, 5) INFO: Compiling int CreateCustomHPSequence(const string&in, const Vector3&in, float) + (135, 9) ERROR: Identifier 'HPSequenceTrigger' is not a data type + (163, 5) INFO: Compiling void ExampleMapScriptUsage() + (168, 13) ERROR: No matching symbol 'AdvancedTriggerSystem_EvaluateFilter' + (175, 13) ERROR: No matching symbol 'AdvancedTriggerSystem_EvaluateFilter' + (180, 18) ERROR: No matching symbol 'AdvancedTriggerSystem_EvaluateFilter' + (187, 13) ERROR: No matching symbol 'AdvancedTriggerSystem_EvaluateFilter' + (194, 13) ERROR: No matching symbol 'AdvancedTriggerSystem_EvaluateFilter' + (204, 5) INFO: Compiling void StressTriggerSystems() + (222, 27) ERROR: No matching symbol 'AdvancedTriggerSystem_EvaluateFilter' + (223, 87) WARN: 'result' is not initialized. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\triggers\TriggerSystemTests.as + (18, 5) ERROR: Expected method or property + (18, 5) ERROR: Instead found reserved keyword 'private' + (21, 11) ERROR: Expected identifier + (21, 11) ERROR: Instead found ':' + (75, 5) ERROR: Unexpected token 'private' + (890, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\world\EntitySpawner.as + (401, 9) INFO: Compiling void EntitySpawner::Update(float) + (418, 56) ERROR: No appropriate opAssign method found in 'CBaseEntity' for value assignment + (457, 9) INFO: Compiling void EntitySpawner::ProcessRespawnTracking() + (470, 62) ERROR: Can't implicitly convert from 'CBaseEntity@' to 'CBaseEntity&'. + (481, 58) ERROR: Can't implicitly convert from 'CBaseEntity@' to 'CBaseEntity&'. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\world\SpawnSystem.as + (23, 5) ERROR: Expected method or property + (23, 5) ERROR: Instead found reserved keyword 'private' + (46, 11) ERROR: Expected identifier + (46, 11) ERROR: Instead found ':' + (328, 35) ERROR: Expected ',' or ';' + (328, 35) ERROR: Instead found reserved keyword 'const' + (336, 37) ERROR: Expected ',' or ';' + (336, 37) ERROR: Instead found reserved keyword 'const' + (465, 5) ERROR: Unexpected token 'private' + (682, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\world\TreasureManager.as + (150, 5) ERROR: Expected method or property + (150, 5) ERROR: Instead found reserved keyword 'private' + (181, 11) ERROR: Expected identifier + (181, 11) ERROR: Instead found ':' + (444, 5) ERROR: Unexpected token 'private' + (965, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/server\world\WorldSystem.as + (67, 5) ERROR: Expected method or property + (67, 5) ERROR: Instead found reserved keyword 'private' + (95, 11) ERROR: Expected identifier + (95, 11) ERROR: Instead found ':' + (242, 36) ERROR: Expected ',' or ';' + (242, 36) ERROR: Instead found reserved keyword 'const' + (267, 42) ERROR: Expected ',' or ';' + (267, 42) ERROR: Instead found reserved keyword 'const' + (404, 38) ERROR: Expected ',' or ';' + (404, 38) ERROR: Instead found reserved keyword 'const' + (412, 42) ERROR: Expected ',' or ';' + (412, 42) ERROR: Instead found reserved keyword 'const' + (420, 36) ERROR: Expected ',' or ';' + (420, 36) ERROR: Instead found reserved keyword 'const' + (428, 33) ERROR: Expected ',' or ';' + (428, 33) ERROR: Instead found reserved keyword 'const' + (502, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\atholo.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\Copy of undamael.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\game_master.as + (10, 2) INFO: Compiling void GameMaster::undamael_reward_victor() + (12, 3) ERROR: No matching symbol 'gm_find_strongest_player' + (13, 22) ERROR: No matching symbol 'param1' + (14, 26) ERROR: No matching symbol 'THE_CHOSEN_ONE' + (18, 7) ERROR: No matching symbol 'GetEntityMaxHealth' + (22, 8) ERROR: No matching symbol 'L_INVALID' + (24, 8) ERROR: No matching symbol 'GetTokenCount' + (26, 5) ERROR: No matching symbol 'SendInfoMsg' + (29, 10) ERROR: No matching symbol 'EXIT_SUB' + (32, 4) ERROR: No matching symbol 'gm_find_strongest_player' + (34, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 8) ERROR: No matching symbol 'EXIT_SUB' + (38, 3) ERROR: No matching signatures to 'SpawnNPC(const string, string, const ScriptMode)' + (38, 3) INFO: Candidates are: + (38, 3) INFO: CMSMonster@ SpawnNPC(const string&in, const Vector3&in, const string[]@ = null, ScriptMode = Legacy) + (38, 3) INFO: Rejected due to type mismatch at positional parameter 2 + (41, 2) INFO: Compiling void GameMaster::undamael_reward_victor2() + (43, 3) ERROR: No matching signatures to 'GameMaster::undamael_reward_victor(string)' + (43, 3) INFO: Candidates are: + (43, 3) INFO: void MS::GameMaster::undamael_reward_victor() + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\keyhole_1.as + (47, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\sforTC1.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\sforTC2.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\undamael.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\undamael2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\undamael_head.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\undamael_msc.as + (8, 7) ERROR: Method 'void UndamaelMsc::OnPostSpawn()' marked as override but does not replace any base class or interface method + (8, 7) ERROR: Method 'void UndamaelMsc::OnHeardSound(CBaseEntity@, Vector3)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\wizard1.as + (8, 7) ERROR: Method 'void Wizard1::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (8, 7) ERROR: Method 'void Wizard1::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\wizard2.as + (6, 7) ERROR: Method 'void WizardBase::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void WizardBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\wizard3.as + (6, 7) ERROR: Method 'void WizardBase::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void WizardBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\wizard4.as + (6, 7) ERROR: Method 'void WizardBase::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void WizardBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\wizard5.as + (6, 7) ERROR: Method 'void WizardBase::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void WizardBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\wizard_base.as + (6, 7) ERROR: Method 'void WizardBase::OnHitByAttack(CBaseEntity@, int)' marked as override but does not replace any base class or interface method + (6, 7) ERROR: Method 'void WizardBase::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\wizard_center.as + (8, 2) INFO: Compiling void WizardCenter::OnSpawn() + (10, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (11, 3) ERROR: No matching symbol 'SetFly' + (12, 3) ERROR: No matching symbol 'SetGravity' + (15, 2) INFO: Compiling void WizardCenter::set_center_point() + (17, 35) ERROR: No matching symbol 'GetOwner' + (19, 3) ERROR: No matching symbol 'CallExternal' + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void WizardCenter::remove_me() + (25, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sfor\wizard_cl.as + (12, 2) INFO: Compiling void WizardCl::OnRepeatTimer() + (14, 3) ERROR: No matching symbol 'SetRepeatDelay' + (15, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (20, 4) ERROR: No matching symbol 'ClientEffect' + (24, 4) ERROR: No matching symbol 'ClientEffect' + (25, 4) ERROR: No matching symbol 'ClientEffect' + (26, 4) ERROR: No matching symbol 'ClientEffect' + (30, 2) INFO: Compiling void WizardCl::client_activate() + (32, 19) ERROR: No matching symbol 'param1' + (37, 2) INFO: Compiling void WizardCl::do_explode() + (40, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (43, 2) INFO: Compiling void WizardCl::glow_sprite() + (45, 3) ERROR: No matching symbol 'ClientEffect' + (46, 3) ERROR: No matching symbol 'ClientEffect' + (47, 3) ERROR: No matching symbol 'ClientEffect' + (48, 3) ERROR: No matching symbol 'ClientEffect' + (49, 3) ERROR: No matching symbol 'ClientEffect' + (50, 3) ERROR: No matching symbol 'ClientEffect' + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (57, 2) INFO: Compiling void WizardCl::explode_sprite() + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (61, 3) ERROR: No matching symbol 'ClientEffect' + (62, 3) ERROR: No matching symbol 'ClientEffect' + (63, 3) ERROR: No matching symbol 'ClientEffect' + (64, 3) ERROR: No matching symbol 'ClientEffect' + (65, 3) ERROR: No matching symbol 'ClientEffect' + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (70, 2) INFO: Compiling void WizardCl::remove_script() + (72, 3) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\burning_one.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\elemental_fire_guardian.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\elemental_fire_guardian2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\elemental_fire_guardian3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\elemental_ice_guardian.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\elemental_ice_guardian2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\elemental_ice_guardian3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\fish_killie.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\game_master.as + (12, 2) INFO: Compiling void GameMaster::map_shender_east_dream_win() + (14, 25) ERROR: No matching symbol 'FindEntityByName' + (15, 3) ERROR: No matching symbol 'CallExternal' + (16, 25) ERROR: No matching symbol 'FindEntityByName' + (17, 3) ERROR: No matching symbol 'CallExternal' + (18, 3) ERROR: No matching symbol 'UseTrigger' + (20, 3) ERROR: No matching signatures to 'GetAllPlayers(string)' + (20, 3) INFO: Candidates are: + (20, 3) INFO: CBasePlayer@[]@ GetAllPlayers() + (22, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 23) ERROR: No matching symbol 'GetTokenCount' + (29, 2) INFO: Compiling void GameMaster::map_shender_east_win2() + (31, 23) ERROR: No matching symbol 'GetTokenCount' + (37, 2) INFO: Compiling void GameMaster::map_shender_east_prepret() + (39, 21) ERROR: No matching symbol 'GetToken' + (40, 9) ERROR: No matching symbol 'GetEntityProperty' + (41, 3) ERROR: No matching symbol 'Effect' + (44, 2) INFO: Compiling void GameMaster::map_shender_east_return() + (46, 21) ERROR: No matching symbol 'GetToken' + (47, 9) ERROR: No matching symbol 'GetEntityProperty' + (55, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (55, 4) INFO: Candidates are: + (55, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (55, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (59, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (59, 4) INFO: Candidates are: + (59, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (59, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (63, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (63, 4) INFO: Candidates are: + (63, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (63, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (67, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (67, 4) INFO: Candidates are: + (67, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (67, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (71, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (71, 4) INFO: Candidates are: + (71, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (71, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (75, 2) INFO: Compiling void GameMaster::gm_shender_east_bunny() + (77, 3) ERROR: No matching symbol 'SendInfoMsg' + (79, 3) ERROR: No matching symbol 'ClientEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\telf_quest.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\telf_sleeping.as + (17, 2) INFO: Compiling void TelfSleeping::OnRepeatTimer() + (19, 3) ERROR: No matching symbol 'SetRepeatDelay' + (20, 7) ERROR: Illegal operation on this datatype + (23, 3) ERROR: No matching symbol 'ClientEvent' + (26, 2) INFO: Compiling void TelfSleeping::OnSpawn() + (28, 3) ERROR: No matching symbol 'SetName' + (29, 3) ERROR: No matching symbol 'SetName' + (30, 3) ERROR: No matching symbol 'SetModel' + (31, 3) ERROR: No matching symbol 'SetWidth' + (32, 3) ERROR: No matching symbol 'SetHeight' + (33, 3) ERROR: No matching symbol 'SetHealth' + (34, 3) ERROR: No matching symbol 'SetInvincible' + (35, 3) ERROR: No matching symbol 'SetIdleAnim' + (36, 3) ERROR: No matching symbol 'SetMoveAnim' + (37, 3) ERROR: No matching symbol 'PlayAnim' + (38, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (40, 3) ERROR: No matching symbol 'SetProp' + (43, 2) INFO: Compiling void TelfSleeping::game_precache() + (45, 3) ERROR: No matching symbol 'Precache' + (46, 3) ERROR: No matching symbol 'Precache' + (49, 2) INFO: Compiling void TelfSleeping::game_menu_getoptions() + (53, 10) ERROR: Expected ';' + (53, 10) ERROR: Instead found identifier 'reg' + (54, 10) ERROR: Expected ';' + (54, 10) ERROR: Instead found identifier 'reg' + (55, 10) ERROR: Expected ';' + (55, 10) ERROR: Instead found identifier 'reg' + (58, 2) INFO: Compiling void TelfSleeping::wake_elf() + (61, 3) ERROR: No matching symbol 'PlayAnim' + (62, 13) ERROR: No matching symbol 'GetOwner' + (63, 13) ERROR: No matching symbol 'GetOwner' + (64, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (65, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (67, 3) ERROR: No matching signatures to 'GetAllPlayers(string)' + (67, 3) INFO: Candidates are: + (67, 3) INFO: CBasePlayer@[]@ GetAllPlayers() + (68, 3) ERROR: No matching symbol 'SetProp' + (71, 2) INFO: Compiling void TelfSleeping::fade_players() + (73, 13) ERROR: No matching symbol 'GetOwner' + (74, 23) ERROR: No matching symbol 'GetTokenCount' + (80, 2) INFO: Compiling void TelfSleeping::fade_players_go() + (82, 21) ERROR: No matching symbol 'GetToken' + (83, 9) ERROR: No matching symbol 'GetEntityRange' + (84, 3) ERROR: No matching symbol 'Effect' + (87, 2) INFO: Compiling void TelfSleeping::tele_players() + (89, 23) ERROR: No matching symbol 'GetTokenCount' + (93, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (96, 2) INFO: Compiling void TelfSleeping::resume_idle() + (98, 3) ERROR: No matching symbol 'PlayAnim' + (99, 3) ERROR: No matching symbol 'SetProp' + (103, 2) INFO: Compiling void TelfSleeping::tele_players_go() + (105, 21) ERROR: No matching symbol 'GetToken' + (106, 9) ERROR: No matching symbol 'GetEntityRange' + (121, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (121, 4) INFO: Candidates are: + (121, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (121, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (125, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (125, 4) INFO: Candidates are: + (125, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (125, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (129, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (129, 4) INFO: Candidates are: + (129, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (129, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (133, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (133, 4) INFO: Candidates are: + (133, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (133, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (137, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (137, 4) INFO: Candidates are: + (137, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (137, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (141, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (141, 4) INFO: Candidates are: + (141, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (141, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (145, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (145, 4) INFO: Candidates are: + (145, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (145, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (149, 4) ERROR: No matching signatures to 'SetEntityOrigin(string, Vector3)' + (149, 4) INFO: Candidates are: + (149, 4) INFO: void SetEntityOrigin(CBaseEntity@, const Vector3&in) + (149, 4) INFO: Rejected due to type mismatch at positional parameter 1 + (151, 3) ERROR: No matching symbol 'CallExternal' + (154, 2) INFO: Compiling void TelfSleeping::quest_fail() + (157, 3) ERROR: No matching symbol 'PlayAnim' + (158, 3) ERROR: No matching symbol 'SetIdleAnim' + (159, 3) ERROR: No matching symbol 'SetMoveAnim' + (160, 3) ERROR: No matching symbol 'SetName' + (163, 2) INFO: Compiling void TelfSleeping::ext_quest_win() + (165, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shender_east\telf_win.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/shops\base_magic.as + (17, 2) INFO: Compiling void BaseMagic::vendor_addstoreitems() + (19, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (22, 2) INFO: Compiling void BaseMagic::bs_supplement() + (28, 7) ERROR: Illegal operation on this datatype + (29, 9) ERROR: No matching symbol 'ItemExists' + (31, 4) ERROR: No matching symbol 'AddStoreItem' + (34, 9) ERROR: No matching symbol 'OVERCHARGE' + (35, 3) ERROR: No matching symbol 'AddStoreItem' + (36, 3) ERROR: No matching symbol 'AddStoreItem' + (37, 3) ERROR: No matching symbol 'AddStoreItem' + (38, 3) ERROR: No matching symbol 'AddStoreItem' + (39, 3) ERROR: No matching symbol 'AddStoreItem' + (40, 3) ERROR: No matching symbol 'AddStoreItem' + (41, 3) ERROR: No matching symbol 'AddStoreItem' + (42, 3) ERROR: No matching symbol 'AddStoreItem' + (43, 3) ERROR: No matching symbol 'AddStoreItem' + (44, 3) ERROR: No matching symbol 'AddStoreItem' + (45, 3) ERROR: No matching symbol 'AddStoreItem' + (46, 3) ERROR: No matching symbol 'AddStoreItem' + (47, 3) ERROR: No matching symbol 'AddStoreItem' + (48, 3) ERROR: No matching symbol 'AddStoreItem' + (49, 3) ERROR: No matching symbol 'AddStoreItem' + (50, 3) ERROR: No matching symbol 'AddStoreItem' + (51, 3) ERROR: No matching symbol 'AddStoreItem' + (52, 3) ERROR: No matching symbol 'AddStoreItem' + (53, 3) ERROR: No matching symbol 'AddStoreItem' + (54, 3) ERROR: No matching symbol 'AddStoreItem' + (55, 3) ERROR: No matching symbol 'AddStoreItem' + (56, 3) ERROR: No matching symbol 'AddStoreItem' + (57, 3) ERROR: No matching symbol 'AddStoreItem' + (58, 3) ERROR: No matching symbol 'AddStoreItem' + (59, 3) ERROR: No matching symbol 'AddStoreItem' + (60, 3) ERROR: No matching symbol 'AddStoreItem' + (61, 3) ERROR: No matching symbol 'AddStoreItem' + (62, 3) ERROR: No matching symbol 'AddStoreItem' + (63, 3) ERROR: No matching symbol 'AddStoreItem' + (64, 3) ERROR: No matching symbol 'AddStoreItem' + (65, 3) ERROR: No matching symbol 'AddStoreItem' + (66, 3) ERROR: No matching symbol 'AddStoreItem' + (67, 3) ERROR: No matching symbol 'AddStoreItem' + (68, 3) ERROR: No matching symbol 'AddStoreItem' + (69, 3) ERROR: No matching symbol 'AddStoreItem' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/skycastle\game_master.as + (8, 2) INFO: Compiling void GameMaster::gm_bear_god_death() + (10, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (13, 2) INFO: Compiling void GameMaster::gm_bear_god_death2() + (15, 62) ERROR: Expected expression value + (15, 62) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/skycastle\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\lure.as + (10, 2) INFO: Compiling void Lure::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetModel' + (13, 3) ERROR: No matching symbol 'SetSolid' + (14, 3) ERROR: No matching symbol 'SetInvincible' + (15, 3) ERROR: No matching symbol 'SetRace' + (16, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (19, 2) INFO: Compiling void Lure::slithar_run_loop() + (21, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (22, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 23) ERROR: No matching symbol 'FindEntityByName' + (24, 26) ERROR: No matching symbol 'GetEntityRange' + (25, 19) ERROR: No matching symbol 'GetMonsterProperty' + (26, 18) ERROR: No matching symbol 'GetEntityIndex' + (27, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (28, 3) ERROR: No matching symbol 'CallExternal' + (31, 2) INFO: Compiling void Lure::slithar_made_it() + (34, 3) ERROR: No matching symbol 'SetAlive' + (35, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\lure_tele.as + (10, 2) INFO: Compiling void LureTele::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetModel' + (13, 3) ERROR: No matching symbol 'SetSolid' + (14, 3) ERROR: No matching symbol 'SetInvincible' + (15, 3) ERROR: No matching symbol 'SetRace' + (16, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (17, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (20, 2) INFO: Compiling void LureTele::slithar_run_loop() + (22, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (23, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (24, 23) ERROR: No matching symbol 'FindEntityByName' + (25, 26) ERROR: No matching symbol 'GetEntityRange' + (26, 19) ERROR: No matching symbol 'GetMonsterProperty' + (27, 18) ERROR: No matching symbol 'GetEntityIndex' + (28, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (29, 3) ERROR: No matching symbol 'CallExternal' + (32, 2) INFO: Compiling void LureTele::slithar_made_it() + (35, 3) ERROR: No matching symbol 'SetAlive' + (36, 3) ERROR: No matching symbol 'DeleteEntity' + (39, 2) INFO: Compiling void LureTele::slithar_cant_make_it() + (41, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (46, 2) INFO: Compiling void LureTele::tele_slithar() + (48, 3) ERROR: No matching symbol 'SetName' + (49, 25) ERROR: No matching symbol 'FindEntityByName' + (50, 23) ERROR: No matching symbol 'GetEntityIndex' + (51, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\resume.as + (18, 2) INFO: Compiling void Resume::OnSpawn() + (20, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (23, 2) INFO: Compiling void Resume::send_resume() + (25, 23) ERROR: No matching symbol 'FindEntityByName' + (26, 3) ERROR: No matching symbol 'CallExternal' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\slithar.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\stop.as + (10, 2) INFO: Compiling void Stop::OnSpawn() + (13, 40) ERROR: Expected expression value + (13, 40) ERROR: Instead found '' + (15, 2) INFO: Compiling void BaseTemporary::OnSpawn() + (17, 3) ERROR: No matching symbol 'SetModel' + (18, 3) ERROR: No matching symbol 'SetHealth' + (19, 3) ERROR: No matching symbol 'SetWidth' + (20, 3) ERROR: No matching symbol 'SetHeight' + (21, 3) ERROR: No matching symbol 'SetSolid' + (22, 3) ERROR: No matching symbol 'SetName' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetFly' + (25, 3) ERROR: No matching symbol 'SetInvincible' + (26, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (27, 3) ERROR: No matching symbol 'SetSkillLevel' + (28, 3) ERROR: No matching symbol 'SetRace' + (29, 3) ERROR: No matching symbol 'SetBloodType' + (30, 3) ERROR: No matching symbol 'DEATH_DELAY' + (34, 2) INFO: Compiling void BaseTemporary::end_me() + (36, 3) ERROR: No matching symbol 'DeleteEntity' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/slithar\teleport.as + (8, 2) INFO: Compiling void Teleport::OnSpawn() + (10, 3) ERROR: No matching symbol 'SetName' + (11, 3) ERROR: No matching symbol 'SetModel' + (12, 3) ERROR: No matching symbol 'SetInvincible' + (13, 3) ERROR: No matching symbol 'SetRace' + (14, 3) ERROR: No matching symbol 'SetFly' + (15, 3) ERROR: Expression is not an l-value + (16, 3) ERROR: No matching symbol 'SetGravity' + (17, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (20, 2) INFO: Compiling void Teleport::lure_slithar() + (22, 23) ERROR: No matching symbol 'FindEntityByName' + (23, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/smugglers\orc_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/smugglers\orc_chest_rare.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/smugglers\shark_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_palace\sorc_chief.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_palace\sorc_chief_cl.as + (17, 2) INFO: Compiling void SorcChiefCl::client_activate() + (19, 15) ERROR: No matching symbol 'param1' + (20, 15) ERROR: No matching symbol 'param2' + (21, 14) ERROR: No matching symbol 'param3' + (22, 17) ERROR: No matching symbol 'param4' + (23, 18) ERROR: No matching symbol 'param5' + (24, 3) ERROR: No matching signatures to 'string::CL_DURATION(const string)' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 2) INFO: Compiling void SorcChiefCl::createsprite() + (39, 10) ERROR: Expected ';' + (39, 10) ERROR: Instead found identifier 'l' + (45, 32) ERROR: Expected expression value + (45, 32) ERROR: Instead found '' + (49, 2) INFO: Compiling void SorcChiefCl::setup_sprite1_sparkle() + (51, 3) ERROR: No matching symbol 'ClientEffect' + (52, 3) ERROR: No matching symbol 'ClientEffect' + (53, 3) ERROR: No matching symbol 'ClientEffect' + (54, 3) ERROR: No matching symbol 'ClientEffect' + (55, 3) ERROR: No matching symbol 'ClientEffect' + (56, 3) ERROR: No matching symbol 'ClientEffect' + (57, 3) ERROR: No matching symbol 'ClientEffect' + (58, 3) ERROR: No matching symbol 'ClientEffect' + (59, 3) ERROR: No matching symbol 'ClientEffect' + (60, 3) ERROR: No matching symbol 'ClientEffect' + (63, 2) INFO: Compiling void SorcChiefCl::sprite_update() + (65, 7) ERROR: Illegal operation on this datatype + (66, 3) ERROR: No matching symbol 'ClientEffect' + (67, 3) ERROR: No matching symbol 'ClientEffect' + (68, 3) ERROR: No matching symbol 'ClientEffect' + (69, 3) ERROR: No matching symbol 'ClientEffect' + (72, 2) INFO: Compiling void SorcChiefCl::clear_sprites() + (76, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (79, 2) INFO: Compiling void SorcChiefCl::remove_me() + (81, 7) ERROR: Expression must be of boolean type, instead found 'string' + (88, 4) ERROR: No matching symbol 'RemoveScript' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_palace\thuldahr.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\finven.as + (50, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\game_master.as + (15, 2) INFO: Compiling void GameMaster::gm_sorcv_init() + (17, 20) ERROR: No matching symbol 'G_SORCV_FRIENDLY' + (19, 3) ERROR: No matching symbol 'SetGlobalVar' + (20, 3) ERROR: No matching symbol 'LogDebug' + (21, 7) ERROR: Expression must be of boolean type, instead found 'string' + (23, 4) ERROR: No matching symbol 'UseTrigger' + (24, 4) ERROR: No matching symbol 'SetGlobalVar' + (28, 4) ERROR: No matching symbol 'UseTrigger' + (29, 4) ERROR: No matching symbol 'SetGlobalVar' + (30, 4) ERROR: No matching symbol 'SetGlobalVar' + (31, 4) ERROR: No matching symbol 'SetGlobalVar' + (35, 2) INFO: Compiling void GameMaster::gm_sorcv_ogers() + (37, 23) ERROR: No matching symbol 'param1' + (38, 3) ERROR: No matching symbol 'CallExternal' + (41, 2) INFO: Compiling void GameMaster::gm_sorcv_a1() + (43, 7) ERROR: Expression must be of boolean type, instead found 'string' + (45, 4) ERROR: No matching symbol 'UseTrigger' + (49, 4) ERROR: No matching symbol 'UseTrigger' + (53, 2) INFO: Compiling void GameMaster::gm_sorcv_a2() + (55, 7) ERROR: Expression must be of boolean type, instead found 'string' + (57, 4) ERROR: No matching symbol 'UseTrigger' + (61, 4) ERROR: No matching symbol 'UseTrigger' + (65, 2) INFO: Compiling void GameMaster::gm_sorcv_a3() + (67, 7) ERROR: Illegal operation on this datatype + (69, 4) ERROR: No matching symbol 'UseTrigger' + (73, 2) INFO: Compiling void GameMaster::gm_sorcv_shop1() + (75, 7) ERROR: Expression must be of boolean type, instead found 'string' + (77, 4) ERROR: No matching symbol 'UseTrigger' + (81, 4) ERROR: No matching symbol 'UseTrigger' + (85, 2) INFO: Compiling void GameMaster::gm_sorcv_smith() + (87, 7) ERROR: Expression must be of boolean type, instead found 'string' + (89, 4) ERROR: No matching symbol 'UseTrigger' + (93, 4) ERROR: No matching symbol 'UseTrigger' + (97, 2) INFO: Compiling void GameMaster::gm_sorcv_horrors1() + (99, 7) ERROR: Illegal operation on this datatype + (101, 4) ERROR: No matching symbol 'UseTrigger' + (105, 2) INFO: Compiling void GameMaster::gm_sorcv_horrors2() + (107, 7) ERROR: Illegal operation on this datatype + (109, 4) ERROR: No matching symbol 'UseTrigger' + (113, 2) INFO: Compiling void GameMaster::gm_sorv_north() + (115, 7) ERROR: Illegal operation on this datatype + (117, 4) ERROR: No matching symbol 'UseTrigger' + (121, 2) INFO: Compiling void GameMaster::gm_sorcv_shaman1() + (123, 7) ERROR: Illegal operation on this datatype + (125, 4) ERROR: No matching symbol 'UseTrigger' + (129, 2) INFO: Compiling void GameMaster::gm_sorcv_give_medal() + (131, 3) ERROR: No matching symbol 'LogDebug' + (132, 8) ERROR: No matching symbol 'ItemExists' + (134, 3) ERROR: No matching symbol 'CallExternal' + (135, 48) ERROR: No matching symbol 'param1' + (136, 23) ERROR: No matching symbol 'GetToken' + (137, 18) ERROR: No conversion from 'string' to 'int' available. + (139, 4) ERROR: No matching symbol 'SetToken' + (140, 23) ERROR: No matching symbol 'param1' + (144, 2) INFO: Compiling void GameMaster::gm_sorcv_start_challenge() + (156, 50) ERROR: Expected expression value + (156, 50) ERROR: Instead found '' + (156, 84) ERROR: Expected ';' + (156, 84) ERROR: Instead found ')' + (163, 2) INFO: Compiling void GameMaster::gm_sorcv_make_player_list() + (165, 46) ERROR: Expected expression value + (165, 46) ERROR: Instead found '' + (170, 2) INFO: Compiling void GameMaster::gm_sorcv_handle_medals() + (172, 46) ERROR: Expected expression value + (172, 46) ERROR: Instead found '' + (177, 51) ERROR: Expected expression value + (177, 51) ERROR: Instead found '' + (184, 2) INFO: Compiling void GameMaster::gm_sorcv_achieve() + (195, 50) ERROR: Expected expression value + (195, 50) ERROR: Instead found '' + (195, 84) ERROR: Expected ';' + (195, 84) ERROR: Instead found ')' + (201, 2) INFO: Compiling void GameMaster::gm_sorcv_update_achievements() + (203, 46) ERROR: Expected expression value + (203, 46) ERROR: Instead found '' + (231, 2) INFO: Compiling void GameMaster::gm_sorcv_end_challenge() + (233, 3) ERROR: No matching symbol 'UseTrigger' + (234, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (237, 2) INFO: Compiling void GameMaster::gm_sorcv_end_challenge2() + (239, 3) ERROR: No matching symbol 'CallExternal' + (240, 3) ERROR: No matching symbol 'SendInfoMsg' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\sfx_blacksmith.as + (13, 2) INFO: Compiling void SfxBlacksmith::OnSpawn() + (15, 3) ERROR: No matching symbol 'SetName' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetIdleAnim' + (18, 3) ERROR: No matching symbol 'SetModelBody' + (19, 3) ERROR: No matching symbol 'SetInvincible' + (20, 3) ERROR: No matching symbol 'SetNoPush' + (21, 3) ERROR: No matching symbol 'SetAngles' + (24, 2) INFO: Compiling void SfxBlacksmith::do_spark() + (26, 38) ERROR: No matching symbol 'GetOwner' + (27, 28) ERROR: No matching symbol 'SOUND_ANVIL' + (27, 13) ERROR: No matching symbol 'GetOwner' + (28, 3) ERROR: No matching symbol 'ClientEvent' + (31, 2) INFO: Compiling void SfxBlacksmith::do_forge_fx() + (33, 23) ERROR: No matching symbol 'param1' + (34, 26) ERROR: No matching symbol 'param2' + (35, 35) ERROR: No matching symbol 'GetOwner' + (36, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (37, 3) ERROR: No matching symbol 'Precache' + (38, 3) ERROR: No matching symbol 'Precache' + (39, 3) ERROR: No matching symbol 'SetProp' + (40, 3) ERROR: No matching symbol 'SetProp' + (43, 4) ERROR: No matching symbol 'SetModel' + (44, 4) ERROR: No matching symbol 'SetIdleAnim' + (45, 4) ERROR: No matching symbol 'SetModelBody' + (49, 4) ERROR: No matching symbol 'SetModel' + (50, 4) ERROR: No matching symbol 'SetIdleAnim' + (51, 4) ERROR: No matching symbol 'SetModelBody' + (55, 4) ERROR: No matching symbol 'SetModel' + (56, 4) ERROR: No matching symbol 'SetIdleAnim' + (57, 4) ERROR: No matching symbol 'SetModelBody' + (61, 4) ERROR: No matching symbol 'SetModel' + (62, 4) ERROR: No matching symbol 'SetIdleAnim' + (63, 4) ERROR: No matching symbol 'SetModelBody' + (67, 4) ERROR: No matching symbol 'SetModel' + (68, 4) ERROR: No matching symbol 'SetIdleAnim' + (69, 4) ERROR: No matching symbol 'SetModelBody' + (73, 4) ERROR: No matching symbol 'SetModel' + (74, 4) ERROR: No matching symbol 'SetIdleAnim' + (75, 4) ERROR: No matching symbol 'SetModelBody' + (79, 4) ERROR: No matching symbol 'SetModel' + (80, 4) ERROR: No matching symbol 'SetIdleAnim' + (81, 4) ERROR: No matching symbol 'SetModelBody' + (83, 3) ERROR: No matching symbol 'ClientEvent' + (86, 2) INFO: Compiling void SfxBlacksmith::do_forge_fx_end() + (88, 3) ERROR: No matching symbol 'ClientEvent' + (89, 3) ERROR: No matching symbol 'SetModel' + (90, 3) ERROR: No matching symbol 'SetIdleAnim' + (91, 3) ERROR: No matching symbol 'SetModelBody' + (92, 3) ERROR: No matching symbol 'SetAngles' + (93, 3) ERROR: No matching symbol 'SetProp' + (94, 3) ERROR: No matching symbol 'SetProp' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\sorc_alchemist.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\sorc_blacksmith.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\sorc_chief_image.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\sorc_guard_friendly.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\sorc_idle.as + (21, 2) INFO: Compiling void SorcIdle::OnSpawn() + (23, 3) ERROR: No matching symbol 'SetName' + (24, 3) ERROR: No matching symbol 'SetModel' + (25, 3) ERROR: No matching symbol 'SetHealth' + (26, 3) ERROR: No matching symbol 'SetDamageResistance' + (27, 3) ERROR: No matching symbol 'SetStat' + (28, 3) ERROR: No matching symbol 'SetInvincible' + (29, 3) ERROR: No matching symbol 'SetRace' + (30, 3) ERROR: No matching symbol 'SetNoPush' + (31, 3) ERROR: No matching symbol 'SetRoam' + (32, 3) ERROR: No matching symbol 'SetWidth' + (33, 3) ERROR: No matching symbol 'SetHeight' + (34, 3) ERROR: No matching symbol 'SetIdleAnim' + (35, 3) ERROR: No matching symbol 'SetMoveAnim' + (36, 3) ERROR: No matching symbol 'PlayAnim' + (37, 3) ERROR: No matching symbol 'SetModelBody' + (38, 3) ERROR: No matching symbol 'SetModelBody' + (39, 3) ERROR: No matching symbol 'SetModelBody' + (40, 3) ERROR: No matching symbol 'CatchSpeech' + (41, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (42, 3) ERROR: No matching symbol 'SetSayTextRange' + (45, 2) INFO: Compiling void SorcIdle::game_postspawn() + (47, 19) ERROR: No matching symbol 'param4' + (48, 9) ERROR: No matching symbol 'param4' + (49, 23) ERROR: No matching symbol 'GetTokenCount' + (55, 2) INFO: Compiling void SorcIdle::npcatk_do_events() + (57, 20) ERROR: No matching symbol 'i' + (58, 23) ERROR: No matching symbol 'GetToken' + (60, 18) ERROR: No matching symbol 'GetTokenCount' + (62, 24) ERROR: No matching symbol 'GetToken' + (64, 3) ERROR: No matching symbol 'LogDebug' + (65, 14) ERROR: No matching symbol 'NEXT_EVENT' + (68, 2) INFO: Compiling void SorcIdle::set_recline1() + (71, 3) ERROR: No matching symbol 'SetModelBody' + (72, 3) ERROR: No matching symbol 'SetModelBody' + (73, 3) ERROR: No matching symbol 'SetModelBody' + (74, 3) ERROR: No matching symbol 'SetIdleAnim' + (75, 3) ERROR: No matching symbol 'SetMoveAnim' + (76, 3) ERROR: No matching symbol 'PlayAnim' + (79, 2) INFO: Compiling void SorcIdle::game_menu_getoptions() + (81, 10) ERROR: Expected ';' + (81, 10) ERROR: Instead found identifier 'reg' + (82, 10) ERROR: Expected ';' + (82, 10) ERROR: Instead found identifier 'reg' + (83, 10) ERROR: Expected ';' + (83, 10) ERROR: Instead found identifier 'reg' + (86, 2) INFO: Compiling void SorcIdle::say_hi() + (90, 4) ERROR: No matching symbol 'PlayAnim' + (91, 4) ERROR: No matching symbol 'SayText' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\sorc_jugger_patrol.as + (11, 2) INFO: Compiling void SorcJuggerPatrol::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetName' + (14, 3) ERROR: No matching symbol 'SetModel' + (15, 3) ERROR: No matching symbol 'SetHealth' + (16, 3) ERROR: No matching symbol 'SetDamageResistance' + (17, 3) ERROR: No matching symbol 'SetStat' + (18, 3) ERROR: No matching symbol 'SetWidth' + (19, 3) ERROR: No matching symbol 'SetHeight' + (20, 3) ERROR: No matching symbol 'SetNoPush' + (21, 3) ERROR: No matching symbol 'SetRoam' + (22, 3) ERROR: No matching symbol 'SetRace' + (23, 3) ERROR: No matching symbol 'SetInvincible' + (24, 3) ERROR: No matching symbol 'SetStepSize' + (25, 3) ERROR: No matching symbol 'SetMoveAnim' + (26, 3) ERROR: No matching symbol 'SetIdleAnim' + (27, 3) ERROR: No matching symbol 'SetModelBody' + (28, 3) ERROR: No matching symbol 'SetModelBody' + (29, 3) ERROR: No matching symbol 'SetModelBody' + (30, 3) ERROR: No matching symbol 'CatchSpeech' + (31, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (34, 2) INFO: Compiling void SorcJuggerPatrol::game_menu_getoptions() + (36, 10) ERROR: Expected ';' + (36, 10) ERROR: Instead found identifier 'reg' + (37, 10) ERROR: Expected ';' + (37, 10) ERROR: Instead found identifier 'reg' + (38, 10) ERROR: Expected ';' + (38, 10) ERROR: Instead found identifier 'reg' + (41, 2) INFO: Compiling void SorcJuggerPatrol::game_postspawn() + (43, 19) ERROR: No matching symbol 'param4' + (44, 9) ERROR: No matching symbol 'param4' + (45, 23) ERROR: No matching symbol 'GetTokenCount' + (51, 2) INFO: Compiling void SorcJuggerPatrol::npcatk_do_events() + (53, 20) ERROR: No matching symbol 'i' + (54, 23) ERROR: No matching symbol 'GetToken' + (56, 18) ERROR: No matching symbol 'GetTokenCount' + (58, 24) ERROR: No matching symbol 'GetToken' + (60, 3) ERROR: No matching symbol 'LogDebug' + (61, 14) ERROR: No matching symbol 'NEXT_EVENT' + (64, 2) INFO: Compiling void SorcJuggerPatrol::say_hi() + (66, 22) ERROR: No matching symbol 'param1' + (68, 4) ERROR: No matching symbol 'SetMoveDest' + (69, 18) ERROR: No matching symbol 'param1' + (73, 9) ERROR: No matching signatures to 'IsEntityAlive(const string)' + (73, 9) INFO: Candidates are: + (73, 9) INFO: bool IsEntityAlive(CBaseEntity@) + (73, 9) INFO: Rejected due to type mismatch at positional parameter 1 + (76, 4) ERROR: No matching symbol 'SetMoveDest' + (78, 3) ERROR: No matching symbol 'SayText' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\sorc_merc.as + (50, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\sorc_sitting.as + (11, 2) INFO: Compiling void SorcSitting::OnRepeatTimer() + (13, 3) ERROR: No matching symbol 'SetRepeatDelay' + (14, 3) ERROR: No matching symbol 'PlayAnim' + (17, 2) INFO: Compiling void SorcSitting::OnSpawn() + (19, 3) ERROR: No matching symbol 'SetName' + (20, 3) ERROR: No matching symbol 'SetModel' + (21, 3) ERROR: No matching symbol 'SetHealth' + (22, 3) ERROR: No matching symbol 'SetDamageResistance' + (23, 3) ERROR: No matching symbol 'SetStat' + (24, 3) ERROR: No matching symbol 'SetInvincible' + (25, 3) ERROR: No matching symbol 'SetRace' + (26, 3) ERROR: No matching symbol 'SetNoPush' + (27, 3) ERROR: No matching symbol 'SetRoam' + (28, 3) ERROR: No matching symbol 'SetWidth' + (29, 3) ERROR: No matching symbol 'SetHeight' + (30, 3) ERROR: No matching symbol 'SetIdleAnim' + (31, 3) ERROR: No matching symbol 'SetMoveAnim' + (32, 3) ERROR: No matching symbol 'PlayAnim' + (33, 3) ERROR: No matching symbol 'SetModelBody' + (34, 3) ERROR: No matching symbol 'SetModelBody' + (35, 3) ERROR: No matching symbol 'SetModelBody' + (36, 3) ERROR: No matching symbol 'SetSayTextRange' + (39, 2) INFO: Compiling void SorcSitting::game_postspawn() + (41, 19) ERROR: No matching symbol 'param4' + (42, 9) ERROR: No matching symbol 'param4' + (43, 23) ERROR: No matching symbol 'GetTokenCount' + (49, 2) INFO: Compiling void SorcSitting::npcatk_do_events() + (51, 20) ERROR: No matching symbol 'i' + (52, 23) ERROR: No matching symbol 'GetToken' + (54, 18) ERROR: No matching symbol 'GetTokenCount' + (56, 24) ERROR: No matching symbol 'GetToken' + (58, 3) ERROR: No matching symbol 'LogDebug' + (59, 14) ERROR: No matching symbol 'NEXT_EVENT' + (62, 2) INFO: Compiling void SorcSitting::set_eating() + (65, 3) ERROR: No matching symbol 'SetModelBody' + (68, 2) INFO: Compiling void SorcSitting::set_drinking() + (71, 3) ERROR: No matching symbol 'SetModelBody' + (72, 3) ERROR: No matching symbol 'SetModelBody' + (73, 3) ERROR: No matching symbol 'SetModelBody' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/sorc_villa\storage.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/test_scripts\test_angelscript_integration.as + (16, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_keep\boss_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_keep\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\elf_warrior_guard1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\elf_warrior_guard2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\elf_wizard_guard.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\forsuth.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\telf_leader1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\telf_leader2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\telf_leader3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\telf_necro.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall\trigger_forsuth_mountains.as + (6, 7) ERROR: Method 'void TriggerForsuthMountains::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/the_wall2\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\amaex.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\bandit_trap_disarmed.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\bgoblin_apple.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\orcboss.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\shifty_commoner.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/thornlands_north\tomb_guardian.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\circle_of_death1.as + (8, 7) ERROR: Method 'void CircleOfDeath1::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\circle_of_death2.as + (8, 7) ERROR: Method 'void CircleOfDeath1::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\circle_of_death3.as + (8, 7) ERROR: Method 'void CircleOfDeath1::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\fire_burst.as + (11, 2) INFO: Compiling void FireBurst::OnSpawn() + (13, 3) ERROR: No matching symbol 'SetName' + (14, 3) ERROR: No matching symbol 'SetModel' + (15, 3) ERROR: No matching symbol 'SetHealth' + (16, 3) ERROR: No matching symbol 'SetWidth' + (17, 3) ERROR: No matching symbol 'SetHeight' + (18, 3) ERROR: No matching symbol 'SetInvincible' + (19, 3) ERROR: No matching symbol 'SetGravity' + (20, 3) ERROR: No matching symbol 'SetFly' + (21, 3) ERROR: No matching symbol 'SetBloodType' + (22, 3) ERROR: No matching symbol 'SetRace' + (24, 3) ERROR: No matching symbol 'SetNoPush' + (25, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (28, 2) INFO: Compiling void FireBurst::game_postspawn() + (30, 8) ERROR: No matching symbol 'param4' + (32, 12) ERROR: No matching symbol 'GetToken' + (34, 9) ERROR: No matching symbol 'param2' + (35, 3) ERROR: No matching symbol 'SetDamageMultiplier' + (38, 2) INFO: Compiling void FireBurst::do_explode() + (44, 40) ERROR: No matching symbol 'GetOwner' + (46, 3) ERROR: No matching symbol 'XDoDamage' + (47, 3) ERROR: No matching symbol 'ClientEvent' + (48, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (51, 2) INFO: Compiling void FireBurst::explode_dodamage() + (53, 9) ERROR: No matching symbol 'param1' + (54, 25) ERROR: No matching symbol 'GetEntityMaxHealth' + (55, 24) ERROR: No matching symbol 'L_TARG_HP' + (56, 7) ERROR: No matching symbol 'L_TARG_HP' + (62, 53) ERROR: No matching symbol 'L_TARG_HP' + (65, 3) WARN: Unreachable code + (65, 18) ERROR: No matching symbol 'GetEntityMaxHealth' + (66, 3) ERROR: Illegal operation on 'string' + (67, 3) ERROR: No matching symbol 'ApplyEffect' + (68, 62) ERROR: No matching symbol 'GetOwner' + (68, 16) ERROR: No matching symbol 'GetEntityIndex' + (71, 2) INFO: Compiling void FireBurst::repel_target() + (75, 43) ERROR: Expected expression value + (75, 43) ERROR: Instead found '' + (77, 43) ERROR: Expected expression value + (77, 43) ERROR: Instead found '' + (80, 2) INFO: Compiling void FireBurst::npc_suicide() + (82, 19) ERROR: No matching symbol 'GetOwner' + (83, 3) ERROR: No matching symbol 'SetInvincible' + (84, 3) ERROR: No matching symbol 'DoDamage' + (87, 2) INFO: Compiling void FireBurst::game_dynamically_created() + (89, 14) ERROR: No matching symbol 'param1' + (92, 2) INFO: Compiling void FireBurst::set_aoe() + (94, 14) ERROR: No matching symbol 'param1' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\fire_wall.as + (17, 2) INFO: Compiling FireWall::FireWall() + (22, 3) ERROR: No matching symbol 'Precache' + (27, 2) INFO: Compiling void FireWall::OnRepeatTimer() + (29, 3) ERROR: No matching symbol 'SetRepeatDelay' + (30, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (33, 25) ERROR: No matching symbol 'CHAN_ITEM' + (33, 13) ERROR: No matching symbol 'GetOwner' + (36, 2) INFO: Compiling void FireWall::OnRepeatTimer_1() + (38, 3) ERROR: No matching symbol 'SetRepeatDelay' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (45, 2) INFO: Compiling void FireWall::OnRepeatTimer_2() + (47, 3) ERROR: No matching symbol 'SetRepeatDelay' + (48, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (54, 2) INFO: Compiling void FireWall::flames_start() + (56, 25) ERROR: No matching symbol 'CHAN_ITEM' + (56, 13) ERROR: No matching symbol 'GetOwner' + (60, 2) INFO: Compiling void FireWall::OnSpawn() + (63, 3) ERROR: No matching symbol 'SetName' + (64, 3) ERROR: No matching symbol 'SetHealth' + (65, 3) ERROR: No matching symbol 'SetInvincible' + (66, 3) ERROR: No matching symbol 'SetRoam' + (67, 3) ERROR: No matching symbol 'SetSkillLevel' + (68, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (69, 3) ERROR: No matching symbol 'SetModel' + (71, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (73, 59) ERROR: No matching symbol 'TIME_LIVE' + (73, 41) ERROR: No matching symbol 'GetOwner' + (73, 13) ERROR: No matching symbol 'GetOwner' + (74, 14) ERROR: No matching symbol 'GetEntityIndex' + (76, 3) ERROR: No matching symbol 'FIRE_DURATION' + (77, 24) ERROR: No matching symbol 'FIRE_DURATION' + (78, 3) ERROR: Illegal operation on 'string' + (79, 3) ERROR: No matching signatures to 'string::REMOVE_TIME(const string)' + (80, 3) ERROR: No matching symbol 'SetAngles' + (81, 3) ERROR: No matching symbol 'ClientEvent' + (85, 2) INFO: Compiling void FireWall::remove_invul() + (87, 3) ERROR: No matching symbol 'SetRace' + (88, 3) ERROR: No matching symbol 'SetInvincible' + (95, 2) INFO: Compiling void FireWall::flames_attack() + (100, 32) ERROR: Expected expression value + (100, 32) ERROR: Instead found '' + (101, 32) ERROR: Expected expression value + (101, 32) ERROR: Instead found '' + (102, 32) ERROR: Expected expression value + (102, 32) ERROR: Instead found '' + (105, 2) INFO: Compiling void FireWall::game_dodamage() + (107, 22) ERROR: No matching symbol 'param2' + (109, 4) ERROR: No matching symbol 'ApplyEffect' + (111, 8) ERROR: No matching symbol 'GetEntityProperty' + (113, 4) ERROR: No matching symbol 'ApplyEffect' + (117, 2) INFO: Compiling void FireWall::firewall_death() + (121, 25) ERROR: No matching symbol 'CHAN_ITEM' + (121, 13) ERROR: No matching symbol 'GetOwner' + (122, 3) ERROR: No matching symbol 'ClientEvent' + (123, 3) ERROR: No matching symbol 'DoDamage' + (124, 3) ERROR: No matching symbol 'SetAlive' + (127, 2) INFO: Compiling void FireWall::client_activate() + (129, 20) ERROR: No matching symbol 'param1' + (130, 28) ERROR: No matching symbol 'param2' + (131, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (132, 3) ERROR: No matching symbol 'TIME_LIVE' + (135, 2) INFO: Compiling void FireWall::firewall_end_cl() + (137, 3) ERROR: No matching symbol 'RemoveScript' + (140, 2) INFO: Compiling void FireWall::flames_shoot() + (146, 38) ERROR: Expected expression value + (146, 38) ERROR: Instead found '' + (155, 38) ERROR: Expected expression value + (155, 38) ERROR: Instead found '' + (164, 38) ERROR: Expected expression value + (164, 38) ERROR: Instead found '' + (173, 2) INFO: Compiling void FireWall::setup_flames() + (175, 3) ERROR: No matching symbol 'ClientEffect' + (176, 3) ERROR: No matching symbol 'ClientEffect' + (177, 3) ERROR: No matching symbol 'ClientEffect' + (178, 3) ERROR: No matching symbol 'ClientEffect' + (179, 3) ERROR: No matching symbol 'ClientEffect' + (180, 3) ERROR: No matching symbol 'ClientEffect' + (181, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\fire_wall2.as + (29, 2) INFO: Compiling void FireWall2::OnRepeatTimer() + (31, 3) ERROR: No matching symbol 'SetRepeatDelay' + (32, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (35, 25) ERROR: No matching symbol 'CHAN_ITEM' + (35, 13) ERROR: No matching symbol 'GetOwner' + (38, 2) INFO: Compiling void FireWall2::OnRepeatTimer_1() + (40, 3) ERROR: No matching symbol 'SetRepeatDelay' + (41, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (47, 2) INFO: Compiling void FireWall2::OnRepeatTimer_2() + (49, 3) ERROR: No matching symbol 'SetRepeatDelay' + (50, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (56, 2) INFO: Compiling void FireWall2::game_dynamically_created() + (59, 14) ERROR: No matching symbol 'param1' + (60, 15) ERROR: No matching symbol 'param2' + (61, 3) ERROR: No matching symbol 'SetAngles' + (62, 17) ERROR: No matching symbol 'param3' + (63, 8) ERROR: No matching symbol 'param3' + (67, 3) ERROR: No matching symbol 'StoreEntity' + (68, 3) ERROR: No matching symbol 'SetRace' + (71, 2) INFO: Compiling void FireWall2::OnSpawn() + (73, 3) ERROR: No matching symbol 'SetName' + (74, 3) ERROR: No matching symbol 'SetHealth' + (75, 3) ERROR: No matching symbol 'SetInvincible' + (77, 3) ERROR: No matching symbol 'SetNoPush' + (78, 3) ERROR: No matching symbol 'SetModel' + (79, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (80, 3) ERROR: No matching symbol 'MY_DURATION' + (83, 2) INFO: Compiling void FireWall2::define_vars() + (85, 7) ERROR: Illegal operation on this datatype + (87, 4) ERROR: No matching symbol 'SetRace' + (88, 15) ERROR: No matching symbol 'GetEntityIndex' + (90, 16) ERROR: No matching symbol 'GetEntityProperty' + (92, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (95, 2) INFO: Compiling void FireWall2::activate_effect() + (97, 3) ERROR: No matching symbol 'ClientEvent' + (101, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (104, 2) INFO: Compiling void FireWall2::damage_cycle() + (115, 42) ERROR: Expected expression value + (115, 42) ERROR: Instead found '' + (119, 42) ERROR: Expected expression value + (119, 42) ERROR: Instead found '' + (123, 42) ERROR: Expected expression value + (123, 42) ERROR: Instead found '' + (130, 2) INFO: Compiling void FireWall2::apply_aoe_effect() + (132, 23) ERROR: No matching symbol 'GetToken' + (133, 3) ERROR: No matching symbol 'ApplyEffect' + (136, 2) INFO: Compiling void FireWall2::end_effect() + (139, 3) ERROR: No matching symbol 'ClientEvent' + (140, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (143, 2) INFO: Compiling void FireWall2::final_remove() + (145, 3) ERROR: No matching symbol 'RemoveScript' + (146, 3) ERROR: No matching symbol 'DeleteEntity' + (149, 2) INFO: Compiling void FireWall2::client_activate() + (151, 20) ERROR: No matching symbol 'param1' + (152, 28) ERROR: No matching symbol 'param2' + (153, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (156, 2) INFO: Compiling void FireWall2::flames_start() + (158, 25) ERROR: No matching symbol 'CHAN_ITEM' + (158, 13) ERROR: No matching symbol 'GetOwner' + (162, 2) INFO: Compiling void FireWall2::flames_shoot() + (168, 38) ERROR: Expected expression value + (168, 38) ERROR: Instead found '' + (177, 38) ERROR: Expected expression value + (177, 38) ERROR: Instead found '' + (186, 38) ERROR: Expected expression value + (186, 38) ERROR: Instead found '' + (195, 2) INFO: Compiling void FireWall2::setup_flames() + (197, 3) ERROR: No matching symbol 'ClientEffect' + (198, 3) ERROR: No matching symbol 'ClientEffect' + (199, 3) ERROR: No matching symbol 'ClientEffect' + (200, 3) ERROR: No matching symbol 'ClientEffect' + (201, 3) ERROR: No matching symbol 'ClientEffect' + (202, 3) ERROR: No matching symbol 'ClientEffect' + (203, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\ice_wall.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\orc_fire_wall.as + (16, 2) INFO: Compiling void OrcFireWall::OnSpawn() + (19, 3) ERROR: No matching symbol 'SetName' + (20, 3) ERROR: No matching symbol 'SetHealth' + (21, 3) ERROR: No matching symbol 'SetRace' + (22, 3) ERROR: No matching symbol 'SetInvincible' + (23, 3) ERROR: No matching symbol 'SetRoam' + (24, 3) ERROR: No matching symbol 'SetSkillLevel' + (25, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (26, 3) ERROR: No matching symbol 'SetModel' + (28, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (29, 14) ERROR: No matching symbol 'GetEntityIndex' + (31, 24) ERROR: No matching symbol 'FIRE_DURATION' + (32, 3) ERROR: Illegal operation on 'string' + (33, 3) ERROR: No matching signatures to 'string::REMOVE_TIME(const string)' + (34, 3) ERROR: No matching symbol 'FIRE_DURATION' + (35, 3) ERROR: No matching symbol 'SetAngles' + (36, 3) ERROR: No matching symbol 'ClientEvent' + (40, 2) INFO: Compiling void OrcFireWall::game_dodamage() + (42, 22) ERROR: No matching symbol 'param2' + (44, 8) ERROR: No matching symbol 'GetRelationship' + (46, 5) ERROR: No matching symbol 'ApplyEffect' + (51, 2) INFO: Compiling void OrcFireWall::firewall_death() + (54, 3) ERROR: No matching symbol 'firewall_end_cl' + (55, 25) ERROR: No matching symbol 'CHAN_ITEM' + (55, 13) ERROR: No matching symbol 'GetOwner' + (56, 3) ERROR: No matching symbol 'ClientEvent' + (57, 3) ERROR: No matching symbol 'RemoveScript' + (58, 3) ERROR: No matching symbol 'DeleteEntity' + (17, 2) INFO: Compiling FireWall::FireWall() + (22, 3) ERROR: No matching symbol 'Precache' + (27, 2) INFO: Compiling void FireWall::OnRepeatTimer() + (29, 3) ERROR: No matching symbol 'SetRepeatDelay' + (30, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (33, 25) ERROR: No matching symbol 'CHAN_ITEM' + (33, 13) ERROR: No matching symbol 'GetOwner' + (36, 2) INFO: Compiling void FireWall::OnRepeatTimer_1() + (38, 3) ERROR: No matching symbol 'SetRepeatDelay' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (45, 2) INFO: Compiling void FireWall::OnRepeatTimer_2() + (47, 3) ERROR: No matching symbol 'SetRepeatDelay' + (48, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (54, 2) INFO: Compiling void FireWall::flames_start() + (56, 25) ERROR: No matching symbol 'CHAN_ITEM' + (56, 13) ERROR: No matching symbol 'GetOwner' + (60, 2) INFO: Compiling void FireWall::OnSpawn() + (63, 3) ERROR: No matching symbol 'SetName' + (64, 3) ERROR: No matching symbol 'SetHealth' + (65, 3) ERROR: No matching symbol 'SetInvincible' + (66, 3) ERROR: No matching symbol 'SetRoam' + (67, 3) ERROR: No matching symbol 'SetSkillLevel' + (68, 3) ERROR: No matching symbol 'SetHearingSensitivity' + (69, 3) ERROR: No matching symbol 'SetModel' + (71, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (73, 59) ERROR: No matching symbol 'TIME_LIVE' + (73, 41) ERROR: No matching symbol 'GetOwner' + (73, 13) ERROR: No matching symbol 'GetOwner' + (74, 14) ERROR: No matching symbol 'GetEntityIndex' + (76, 3) ERROR: No matching symbol 'FIRE_DURATION' + (77, 24) ERROR: No matching symbol 'FIRE_DURATION' + (78, 3) ERROR: Illegal operation on 'string' + (79, 3) ERROR: No matching signatures to 'string::REMOVE_TIME(const string)' + (80, 3) ERROR: No matching symbol 'SetAngles' + (81, 3) ERROR: No matching symbol 'ClientEvent' + (85, 2) INFO: Compiling void FireWall::remove_invul() + (87, 3) ERROR: No matching symbol 'SetRace' + (88, 3) ERROR: No matching symbol 'SetInvincible' + (95, 2) INFO: Compiling void FireWall::flames_attack() + (100, 32) ERROR: Expected expression value + (100, 32) ERROR: Instead found '' + (101, 32) ERROR: Expected expression value + (101, 32) ERROR: Instead found '' + (102, 32) ERROR: Expected expression value + (102, 32) ERROR: Instead found '' + (105, 2) INFO: Compiling void FireWall::game_dodamage() + (107, 22) ERROR: No matching symbol 'param2' + (109, 4) ERROR: No matching symbol 'ApplyEffect' + (111, 8) ERROR: No matching symbol 'GetEntityProperty' + (113, 4) ERROR: No matching symbol 'ApplyEffect' + (117, 2) INFO: Compiling void FireWall::firewall_death() + (121, 25) ERROR: No matching symbol 'CHAN_ITEM' + (121, 13) ERROR: No matching symbol 'GetOwner' + (122, 3) ERROR: No matching symbol 'ClientEvent' + (123, 3) ERROR: No matching symbol 'DoDamage' + (124, 3) ERROR: No matching symbol 'SetAlive' + (127, 2) INFO: Compiling void FireWall::client_activate() + (129, 20) ERROR: No matching symbol 'param1' + (130, 28) ERROR: No matching symbol 'param2' + (131, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (132, 3) ERROR: No matching symbol 'TIME_LIVE' + (135, 2) INFO: Compiling void FireWall::firewall_end_cl() + (137, 3) ERROR: No matching symbol 'RemoveScript' + (140, 2) INFO: Compiling void FireWall::flames_shoot() + (146, 38) ERROR: Expected expression value + (146, 38) ERROR: Instead found '' + (155, 38) ERROR: Expected expression value + (155, 38) ERROR: Instead found '' + (164, 38) ERROR: Expected expression value + (164, 38) ERROR: Instead found '' + (173, 2) INFO: Compiling void FireWall::setup_flames() + (175, 3) ERROR: No matching symbol 'ClientEffect' + (176, 3) ERROR: No matching symbol 'ClientEffect' + (177, 3) ERROR: No matching symbol 'ClientEffect' + (178, 3) ERROR: No matching symbol 'ClientEffect' + (179, 3) ERROR: No matching symbol 'ClientEffect' + (180, 3) ERROR: No matching symbol 'ClientEffect' + (181, 3) ERROR: No matching symbol 'ClientEffect' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\poison_gas.as + (17, 2) INFO: Compiling void PoisonGas::OnSpawn() + (19, 3) ERROR: No matching symbol 'SetName' + (20, 3) ERROR: No matching symbol 'SetModel' + (21, 3) ERROR: No matching symbol 'SetHealth' + (22, 3) ERROR: No matching symbol 'SetWidth' + (23, 3) ERROR: No matching symbol 'SetHeight' + (24, 3) ERROR: No matching symbol 'SetInvincible' + (25, 3) ERROR: No matching symbol 'SetGravity' + (26, 3) ERROR: No matching symbol 'SetFly' + (27, 3) ERROR: No matching symbol 'SetBloodType' + (28, 3) ERROR: No matching symbol 'SetRace' + (30, 3) ERROR: No matching symbol 'SetNoPush' + (31, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (34, 2) INFO: Compiling void PoisonGas::game_postspawn() + (36, 8) ERROR: No matching symbol 'param4' + (38, 12) ERROR: No matching symbol 'GetToken' + (40, 9) ERROR: No matching symbol 'param2' + (41, 3) ERROR: No matching symbol 'SetDamageMultiplier' + (44, 2) INFO: Compiling void PoisonGas::start_dot() + (50, 29) ERROR: No matching symbol 'GetOwner' + (52, 3) ERROR: No matching symbol 'ClientEvent' + (55, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (58, 2) INFO: Compiling void PoisonGas::dot_loop() + (60, 7) ERROR: Illegal operation on this datatype + (61, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (62, 3) ERROR: No matching symbol 'XDoDamage' + (65, 2) INFO: Compiling void PoisonGas::dot_dodamage() + (67, 9) ERROR: No matching symbol 'param1' + (68, 18) ERROR: No matching symbol 'GetEntityMaxHealth' + (69, 3) ERROR: Illegal operation on 'string' + (70, 3) ERROR: No matching symbol 'ApplyEffect' + (73, 2) INFO: Compiling void PoisonGas::dot_end() + (76, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (79, 2) INFO: Compiling void PoisonGas::npc_suicide() + (81, 19) ERROR: No matching symbol 'GetOwner' + (82, 3) ERROR: No matching symbol 'SetInvincible' + (83, 3) ERROR: No matching symbol 'DoDamage' + (86, 2) INFO: Compiling void PoisonGas::game_dynamically_created() + (88, 14) ERROR: No matching symbol 'param1' + (91, 2) INFO: Compiling void PoisonGas::set_aoe() + (93, 14) ERROR: No matching symbol 'param1' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\quake.as + (28, 2) INFO: Compiling void Quake::game_precache() + (30, 3) ERROR: No matching symbol 'Precache' + (33, 2) INFO: Compiling void Quake::fake_precache() + (36, 19) ERROR: No matching symbol 'SOUND_QUAKE_START' + (38, 19) ERROR: No matching symbol 'SOUND_QUAKE_LOOP' + (41, 2) INFO: Compiling void Quake::OnSpawn() + (43, 3) ERROR: No matching symbol 'SetName' + (44, 3) ERROR: No matching symbol 'SetModel' + (45, 3) ERROR: No matching symbol 'SetHealth' + (46, 3) ERROR: No matching symbol 'SetWidth' + (47, 3) ERROR: No matching symbol 'SetHeight' + (48, 3) ERROR: No matching symbol 'SetInvincible' + (49, 3) ERROR: No matching symbol 'SetGravity' + (50, 3) ERROR: No matching symbol 'SetFly' + (51, 3) ERROR: No matching symbol 'SetBloodType' + (52, 3) ERROR: No matching symbol 'SetRace' + (54, 3) ERROR: No matching symbol 'SetNoPush' + (55, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (58, 2) INFO: Compiling void Quake::game_postspawn() + (60, 15) ERROR: No matching symbol 'param4' + (65, 7) ERROR: No matching symbol 'param2' + (71, 4) ERROR: No matching symbol 'SetDamageMultiplier' + (75, 2) INFO: Compiling void Quake::game_dynamically_created() + (77, 3) ERROR: No matching symbol 'LogDebug' + (78, 7) ERROR: No matching symbol 'param1' + (80, 16) ERROR: No matching symbol 'param2' + (81, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (85, 23) ERROR: No matching symbol 'param1' + (88, 16) ERROR: No matching symbol 'param1' + (89, 4) ERROR: No matching symbol 'SetRace' + (93, 2) INFO: Compiling void Quake::handle_events() + (95, 23) ERROR: No matching symbol 'GetTokenCount' + (101, 2) INFO: Compiling void Quake::handle_events_loop() + (103, 20) ERROR: No matching symbol 'i' + (104, 22) ERROR: No matching symbol 'GetToken' + (105, 45) ERROR: No matching symbol 'GetTokenCount' + (107, 23) ERROR: No matching symbol 'GetToken' + (109, 13) ERROR: No matching symbol 'PARAM_OUT' + (112, 2) INFO: Compiling void Quake::set_aoe() + (114, 3) ERROR: No matching symbol 'LogDebug' + (115, 10) ERROR: No matching symbol 'param1' + (116, 15) ERROR: No matching symbol 'param1' + (119, 2) INFO: Compiling void Quake::set_dur() + (121, 10) ERROR: No matching symbol 'param1' + (122, 20) ERROR: No matching symbol 'param1' + (123, 3) ERROR: No matching symbol 'LogDebug' + (126, 2) INFO: Compiling void Quake::set_global() + (128, 3) ERROR: No matching symbol 'LogDebug' + (142, 2) INFO: Compiling void Quake::do_quake() + (145, 3) ERROR: No matching symbol 'LogDebug' + (146, 7) ERROR: Illegal operation on this datatype + (149, 21) ERROR: No matching symbol 'SOUND_QUAKE_START' + (151, 21) ERROR: No matching symbol 'SOUND_QUAKE_LOOP' + (156, 3) ERROR: Expression doesn't form a function call. 'QUAKE_DURATION' evaluates to the non-function type '' + (157, 7) ERROR: Illegal operation on this datatype + (159, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (160, 4) ERROR: No matching symbol 'Effect' + (161, 4) ERROR: No matching symbol 'ClientEvent' + (165, 4) ERROR: No matching symbol 'CallExternal' + (166, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (170, 2) INFO: Compiling void Quake::quake_loop() + (172, 7) ERROR: Illegal operation on this datatype + (173, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (174, 17) ERROR: No matching symbol 'FindEntitiesInSphere' + (176, 23) ERROR: No matching symbol 'GetTokenCount' + (182, 2) INFO: Compiling void Quake::global_quake_loop() + (184, 7) ERROR: Illegal operation on this datatype + (185, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (187, 3) ERROR: No matching signatures to 'GetAllPlayers(string)' + (187, 3) INFO: Candidates are: + (187, 3) INFO: CBasePlayer@[]@ GetAllPlayers() + (189, 23) ERROR: No matching symbol 'GetTokenCount' + (195, 2) INFO: Compiling void Quake::quake_applyeffect() + (197, 21) ERROR: No matching symbol 'GetToken' + (198, 9) ERROR: No matching symbol 'IsOnGround' + (199, 18) ERROR: No matching symbol 'GetEntityMaxHealth' + (200, 3) ERROR: Illegal operation on 'string' + (201, 7) ERROR: Expression must be of boolean type, instead found 'string' + (203, 8) WARN: Variable 'L_DMG' hides another variable of same name in outer scope + (205, 7) ERROR: Expression must be of boolean type, instead found 'int&' + (206, 7) ERROR: Illegal operation on this datatype + (208, 4) ERROR: No matching symbol 'ApplyEffect' + (212, 4) ERROR: No matching symbol 'ApplyEffect' + (216, 2) INFO: Compiling void Quake::quake_end() + (218, 7) ERROR: Illegal operation on this datatype + (221, 20) ERROR: No matching symbol 'SOUND_QUAKE_LOOP' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\splodie_skull.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\splodie_skull_ice.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/traps\volcano.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\burn_1000.as + (6, 7) ERROR: Name conflict. 'MS::Burn1000' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\glow_block.as + (6, 7) ERROR: Method 'void GlowBlock::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\glow_unblock.as + (6, 7) ERROR: Method 'void GlowUnblock::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\totalhp_trigger.as + (6, 7) ERROR: Name conflict. 'MS::TotalhpTrigger' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\touch_test.as + (8, 7) ERROR: Name conflict. 'MS::TouchTest' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\trigger_avghp.as + (6, 7) ERROR: Name conflict. 'MS::TriggerAvghp' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\trigger_base.as + (6, 7) ERROR: Name conflict. 'MS::TriggerBase' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\trigger_burn.as + (8, 7) ERROR: Name conflict. 'MS::TriggerBurn' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\trigger_cannon.as + (6, 7) ERROR: Name conflict. 'MS::TriggerCannon' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\trigger_if_evil.as + (6, 7) ERROR: Name conflict. 'MS::TriggerIfEvil' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\trigger_poison.as + (8, 7) ERROR: Name conflict. 'MS::TriggerPoison' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\trigger_web.as + (6, 7) ERROR: Method 'void Web::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\trigger_zap.as + (6, 7) ERROR: Method 'void TriggerBase::OnTouch(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\undamael_break.as + (8, 7) ERROR: Name conflict. 'MS::UndamaelBreak' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\undamael_hurt.as + (8, 7) ERROR: Name conflict. 'MS::UndamaelHurt' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/triggers\undamael_pitedge.as + (8, 7) ERROR: Name conflict. 'MS::UndamaelPitedge' is a class. + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\base_firepit.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\firepit1.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\firepit2.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\firepit3.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\firepit4.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tundra\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\keyhole.as + (20, 2) INFO: Compiling void Keyhole::OnSpawn() + (22, 3) ERROR: No matching symbol 'SetProp' + (23, 3) ERROR: No matching symbol 'SetProp' + (10, 2) INFO: Compiling void BaseKeyhole::OnSpawn() + (12, 3) ERROR: No matching symbol 'SetName' + (13, 3) ERROR: No matching symbol 'SetWidth' + (14, 3) ERROR: No matching symbol 'SetHeight' + (15, 3) ERROR: No matching symbol 'SetRoam' + (16, 3) ERROR: No matching symbol 'SetModel' + (17, 3) ERROR: No matching symbol 'SetInvincible' + (18, 3) ERROR: No matching symbol 'SetFly' + (19, 3) ERROR: Expression is not an l-value + (20, 3) ERROR: No matching symbol 'SetSolid' + (21, 3) ERROR: No matching symbol 'SetNoPush' + (22, 3) ERROR: No matching symbol 'SetMenuAutoOpen' + (25, 2) INFO: Compiling void BaseKeyhole::game_menu_getoptions() + (29, 11) ERROR: Expected ';' + (29, 11) ERROR: Instead found identifier 'reg' + (30, 11) ERROR: Expected ';' + (30, 11) ERROR: Instead found identifier 'reg' + (31, 11) ERROR: Expected ';' + (31, 11) ERROR: Instead found identifier 'reg' + (32, 11) ERROR: Expected ';' + (32, 11) ERROR: Instead found identifier 'reg' + (36, 2) INFO: Compiling void BaseKeyhole::key_used() + (38, 3) ERROR: No matching symbol 'UseTrigger' + (39, 7) ERROR: Expression must be of boolean type, instead found 'int&' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\key_chest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\prisoner.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\rat.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\slave.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/tutorial\slavemaster.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/undercrypts\dq_undercrypts_tnt.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/undercrypts\gesoth.as + (6, 7) ERROR: Method 'void BaseChatArray::OnDeath(CBaseEntity@)' marked as override but does not replace any base class or interface method + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\cl_world.as + (8, 2) INFO: Compiling void ClWorld::game_newlevel() + (10, 3) ERROR: No matching symbol 'SetGlobalVar' + (11, 20) ERROR: No matching symbol 'param1' + (14, 2) INFO: Compiling void ClWorld::testmap_newlevel() + (18, 11) ERROR: Expected ';' + (18, 11) ERROR: Instead found identifier 'reg' + (19, 8) ERROR: Expected '(' + (19, 8) ERROR: Instead found identifier 'reg' + (20, 8) ERROR: Expected '(' + (20, 8) ERROR: Instead found identifier 'reg' + (21, 11) ERROR: Expected ';' + (21, 11) ERROR: Instead found identifier 'reg' + (22, 8) ERROR: Expected '(' + (22, 8) ERROR: Instead found identifier 'reg' + (23, 8) ERROR: Expected '(' + (23, 8) ERROR: Instead found identifier 'reg' + (25, 11) ERROR: Expected ';' + (25, 11) ERROR: Instead found identifier 'reg' + (26, 8) ERROR: Expected '(' + (26, 8) ERROR: Instead found identifier 'reg' + (27, 8) ERROR: Expected '(' + (27, 8) ERROR: Instead found identifier 'reg' + (28, 11) ERROR: Expected ';' + (28, 11) ERROR: Instead found identifier 'reg' + (29, 8) ERROR: Expected '(' + (29, 8) ERROR: Instead found identifier 'reg' + (30, 8) ERROR: Expected '(' + (30, 8) ERROR: Instead found identifier 'reg' + (31, 8) ERROR: Expected '(' + (31, 8) ERROR: Instead found identifier 'reg' + (36, 11) ERROR: Expected ';' + (36, 11) ERROR: Instead found identifier 'reg' + (37, 8) ERROR: Expected '(' + (37, 8) ERROR: Instead found identifier 'reg' + (38, 8) ERROR: Expected '(' + (38, 8) ERROR: Instead found identifier 'reg' + (39, 11) ERROR: Expected ';' + (39, 11) ERROR: Instead found identifier 'reg' + (40, 8) ERROR: Expected '(' + (40, 8) ERROR: Instead found identifier 'reg' + (41, 8) ERROR: Expected '(' + (41, 8) ERROR: Instead found identifier 'reg' + (44, 10) ERROR: Expected ';' + (44, 10) ERROR: Instead found identifier 'reg' + (45, 7) ERROR: Expected '(' + (45, 7) ERROR: Instead found identifier 'reg' + (46, 7) ERROR: Expected '(' + (46, 7) ERROR: Instead found identifier 'reg' + (47, 10) ERROR: Expected ';' + (47, 10) ERROR: Instead found identifier 'reg' + (48, 7) ERROR: Expected '(' + (48, 7) ERROR: Instead found identifier 'reg' + (49, 7) ERROR: Expected '(' + (49, 7) ERROR: Instead found identifier 'reg' + (50, 7) ERROR: Expected '(' + (50, 7) ERROR: Instead found identifier 'reg' + (52, 10) ERROR: Expected ';' + (52, 10) ERROR: Instead found identifier 'reg' + (53, 7) ERROR: Expected '(' + (53, 7) ERROR: Instead found identifier 'reg' + (54, 7) ERROR: Expected '(' + (54, 7) ERROR: Instead found identifier 'reg' + (55, 10) ERROR: Expected ';' + (55, 10) ERROR: Instead found identifier 'reg' + (56, 7) ERROR: Expected '(' + (56, 7) ERROR: Instead found identifier 'reg' + (57, 7) ERROR: Expected '(' + (57, 7) ERROR: Instead found identifier 'reg' + (58, 7) ERROR: Expected '(' + (58, 7) ERROR: Instead found identifier 'reg' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\server\commands.as + (25, 2) ERROR: Expected method or property + (25, 2) ERROR: Instead found identifier 'string' + (27, 10) ERROR: Expected identifier + (27, 10) ERROR: Instead found '(' + (759, 58) ERROR: Non-terminated string literal + (768, 1) ERROR: Unexpected end of file + (6, 1) INFO: While parsing namespace + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\server\help.as + (127, 2) INFO: Compiling void Help::game_playercmd() + (129, 7) ERROR: No matching symbol 'param1' + (133, 28) ERROR: No matching symbol 'GetEntityIndex' + (138, 9) ERROR: No matching symbol 'param2' + (140, 19) ERROR: No matching symbol 'GetEntityMaxHealth' + (141, 14) ERROR: No conversion from 'string' to 'int' available. + (143, 6) ERROR: No matching symbol 'LISTMAPS_START' + (144, 6) ERROR: No matching symbol 'LISTMAPS_STOP' + (148, 15) ERROR: No conversion from 'string' to 'int' available. + (150, 16) ERROR: No conversion from 'string' to 'int' available. + (152, 8) ERROR: No matching symbol 'LISTMAPS_START' + (153, 8) ERROR: No matching symbol 'LISTMAPS_STOP' + (155, 16) ERROR: No conversion from 'string' to 'int' available. + (157, 8) ERROR: No matching symbol 'LISTMAPS_START' + (158, 8) ERROR: No matching symbol 'LISTMAPS_STOP' + (160, 16) ERROR: No conversion from 'string' to 'int' available. + (162, 8) ERROR: No matching symbol 'LISTMAPS_START' + (163, 8) ERROR: No matching symbol 'LISTMAPS_STOP' + (165, 16) ERROR: No conversion from 'string' to 'int' available. + (167, 8) ERROR: No matching symbol 'LISTMAPS_START' + (168, 8) ERROR: No matching symbol 'LISTMAPS_STOP' + (178, 5) ERROR: No matching symbol 'LISTMAPS_START' + (179, 5) ERROR: No matching symbol 'LISTMAPS_STOP' + (180, 9) ERROR: No matching symbol 'param2' + (182, 6) ERROR: No matching symbol 'LISTMAPS_START' + (183, 6) ERROR: No matching symbol 'LISTMAPS_STOP' + (185, 9) ERROR: No matching symbol 'param2' + (187, 6) ERROR: No matching symbol 'LISTMAPS_START' + (188, 6) ERROR: No matching symbol 'LISTMAPS_STOP' + (190, 9) ERROR: No matching symbol 'param2' + (192, 6) ERROR: No matching symbol 'LISTMAPS_START' + (193, 6) ERROR: No matching symbol 'LISTMAPS_STOP' + (195, 9) ERROR: No matching symbol 'param2' + (197, 6) ERROR: No matching symbol 'LISTMAPS_START' + (198, 6) ERROR: No matching symbol 'LISTMAPS_STOP' + (200, 9) ERROR: No matching symbol 'param2' + (202, 6) ERROR: No matching symbol 'LISTMAPS_START' + (203, 6) ERROR: No matching symbol 'LISTMAPS_STOP' + (205, 9) ERROR: No matching symbol 'param2' + (207, 6) ERROR: No matching symbol 'LISTMAPS_START' + (208, 6) ERROR: No matching symbol 'LISTMAPS_STOP' + (211, 8) ERROR: No matching symbol 'LISTMAPS_START' + (213, 11) ERROR: No matching symbol 'L_LISTING_CUSTOM' + (215, 10) ERROR: No matching symbol 'param2' + (224, 23) ERROR: No matching symbol 'GetEntityIndex' + (236, 8) ERROR: No matching symbol 'param1' + (250, 9) ERROR: No matching symbol 'param1' + (262, 2) INFO: Compiling void Help::do_listmaps() + (265, 7) ERROR: No matching symbol 'LISTMAPS_START' + (268, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (270, 7) ERROR: No matching symbol 'LISTMAPS_START' + (273, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (275, 7) ERROR: No matching symbol 'LISTMAPS_START' + (278, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (280, 7) ERROR: No matching symbol 'LISTMAPS_START' + (283, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (285, 7) ERROR: No matching symbol 'LISTMAPS_START' + (288, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (292, 2) INFO: Compiling void Help::do_listmaps_low() + (294, 53) ERROR: Expected expression value + (294, 53) ERROR: Instead found '' + (297, 51) ERROR: Expected expression value + (297, 51) ERROR: Instead found '' + (301, 3) ERROR: Expected expression value + (301, 3) ERROR: Instead found reserved keyword 'else' + (316, 2) INFO: Compiling void Help::do_listmaps_medium() + (318, 53) ERROR: Expected expression value + (318, 53) ERROR: Instead found '' + (321, 51) ERROR: Expected expression value + (321, 51) ERROR: Instead found '' + (325, 3) ERROR: Expected expression value + (325, 3) ERROR: Instead found reserved keyword 'else' + (340, 2) INFO: Compiling void Help::do_listmaps_hard() + (342, 53) ERROR: Expected expression value + (342, 53) ERROR: Instead found '' + (345, 51) ERROR: Expected expression value + (345, 51) ERROR: Instead found '' + (349, 3) ERROR: Expected expression value + (349, 3) ERROR: Instead found reserved keyword 'else' + (364, 2) INFO: Compiling void Help::do_listmaps_vhard() + (366, 53) ERROR: Expected expression value + (366, 53) ERROR: Instead found '' + (369, 51) ERROR: Expected expression value + (369, 51) ERROR: Instead found '' + (373, 3) ERROR: Expected expression value + (373, 3) ERROR: Instead found reserved keyword 'else' + (388, 2) INFO: Compiling void Help::do_listmaps_epic() + (390, 53) ERROR: Expected expression value + (390, 53) ERROR: Instead found '' + (393, 51) ERROR: Expected expression value + (393, 51) ERROR: Instead found '' + (397, 3) ERROR: Expected expression value + (397, 3) ERROR: Instead found reserved keyword 'else' + (403, 2) INFO: Compiling void Help::list_custom_maps2() + (405, 23) ERROR: No matching symbol 'GetTokenCount' + (406, 3) ERROR: Illegal operation on 'string' + (407, 9) ERROR: No matching symbol 'CUSTOM_COUNT' + (408, 21) ERROR: No matching symbol 'GetToken' + (409, 8) ERROR: No matching symbol 'ValidateMapName' + (413, 7) ERROR: No matching symbol 'CUSTOM_COUNT' + (419, 3) ERROR: No matching symbol 'CUSTOM_COUNT' + (420, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\server\maps.as + (8, 2) INFO: Compiling Maps::Maps() + (18, 36) ERROR: Expected expression value + (18, 36) ERROR: Instead found '' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\server\player_vote.as + (18, 2) INFO: Compiling void PlayerVote::game_playercmd() + (20, 24) ERROR: No matching symbol 'param1' + (21, 24) ERROR: No matching symbol 'param2' + (22, 24) ERROR: No matching symbol 'param3' + (23, 24) ERROR: No matching symbol 'param4' + (24, 24) ERROR: No matching symbol 'param5' + (27, 11) WARN: Variable 'VOTE_PARAM1' hides another variable of same name in outer scope + (27, 25) ERROR: No matching symbol 'param3' + (28, 11) WARN: Variable 'VOTE_PARAM2' hides another variable of same name in outer scope + (28, 25) ERROR: No matching symbol 'param4' + (29, 11) WARN: Variable 'VOTE_PARAM3' hides another variable of same name in outer scope + (29, 25) ERROR: No matching symbol 'param5' + (30, 11) WARN: Variable 'VOTE_PARAM4' hides another variable of same name in outer scope + (30, 25) ERROR: No matching symbol 'param6' + (31, 11) WARN: Variable 'VOTE_PARAM5' hides another variable of same name in outer scope + (31, 25) ERROR: No matching symbol 'param7' + (35, 101) ERROR: No matching symbol 'VOTE_PARAM7' + (35, 88) ERROR: No matching symbol 'VOTE_PARAM6' + (39, 2) INFO: Compiling void PlayerVote::check_vote_options() + (42, 3) ERROR: No matching symbol 'check_can_vote' + (43, 7) ERROR: Illegal operation on this datatype + (44, 7) ERROR: No matching symbol 'param1' + (47, 8) ERROR: Illegal operation on this datatype + (51, 5) ERROR: No matching symbol 'SendColoredMessage' + (53, 8) ERROR: Expression must be of boolean type, instead found 'string' + (56, 25) ERROR: No matching symbol 'param2' + (57, 19) ERROR: No matching symbol 'GetEntityIndex' + (59, 7) ERROR: No matching symbol 'param1' + (62, 8) ERROR: Illegal operation on this datatype + (66, 5) ERROR: No matching symbol 'SendColoredMessage' + (68, 8) ERROR: Expression must be of boolean type, instead found 'string' + (73, 11) ERROR: No matching symbol 'G_DEVELOPER_MODE' + (78, 5) ERROR: No matching symbol 'SendColoredMessage' + (81, 10) ERROR: No matching symbol 'EXIT_SUB' + (84, 19) ERROR: No matching symbol 'GetEntityIndex' + (86, 7) ERROR: No matching symbol 'param1' + (88, 9) ERROR: No matching symbol 'G_SERVER_LOCKED' + (90, 5) ERROR: No matching symbol 'SendColoredMessage' + (94, 10) ERROR: No matching symbol 'EXIT_SUB' + (97, 8) ERROR: Illegal operation on this datatype + (99, 5) ERROR: No matching symbol 'SendColoredMessage' + (103, 10) ERROR: No matching symbol 'EXIT_SUB' + (108, 11) ERROR: No matching symbol 'G_DEVELOPER_MODE' + (111, 5) ERROR: No matching symbol 'SendColoredMessage' + (115, 10) ERROR: No matching symbol 'EXIT_SUB' + (118, 20) ERROR: No matching symbol 'GetEntityIndex' + (122, 2) INFO: Compiling void PlayerVote::player_votemap() + (124, 26) ERROR: No matching symbol 'param1' + (125, 26) ERROR: No matching symbol 'StringToLower' + (127, 24) ERROR: No matching symbol 'GetEntityProperty' + (128, 7) ERROR: Expression must be of boolean type, instead found 'string' + (131, 4) ERROR: No matching symbol 'SendColoredMessage' + (134, 8) ERROR: No matching symbol 'EXIT_SUB' + (137, 10) ERROR: No matching symbol 'G_DEVELOPER_MODE' + (140, 4) ERROR: No matching symbol 'SendColoredMessage' + (144, 8) ERROR: No matching symbol 'EXIT_SUB' + (147, 4) ERROR: No matching symbol 'SendColoredMessage' + (148, 4) ERROR: No matching symbol 'SendColoredMessage' + (153, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (156, 8) ERROR: No matching symbol 'EXIT_SUB' + (158, 23) ERROR: No matching symbol 'MAPS_FN1' + (159, 23) ERROR: No matching symbol 'FindToken' + (160, 18) ERROR: No conversion from 'string' to 'int' available. + (162, 8) ERROR: No matching symbol 'GetToken' + (165, 8) WARN: Variable 'LEGAL_FN_MAP' hides another variable of same name in outer scope + (167, 10) ERROR: 'SEARCH_SET' is already declared + (168, 10) ERROR: 'SEARCH_IDX' is already declared + (169, 18) ERROR: No conversion from 'string' to 'int' available. + (171, 8) ERROR: No matching symbol 'GetToken' + (174, 8) WARN: Variable 'LEGAL_FN_MAP' hides another variable of same name in outer scope + (176, 10) ERROR: 'SEARCH_SET' is already declared + (177, 10) ERROR: 'SEARCH_IDX' is already declared + (178, 18) ERROR: No conversion from 'string' to 'int' available. + (180, 8) ERROR: No matching symbol 'GetToken' + (183, 8) WARN: Variable 'LEGAL_FN_MAP' hides another variable of same name in outer scope + (185, 10) ERROR: 'SEARCH_SET' is already declared + (186, 10) ERROR: 'SEARCH_IDX' is already declared + (187, 18) ERROR: No conversion from 'string' to 'int' available. + (189, 8) ERROR: No matching symbol 'GetToken' + (192, 8) WARN: Variable 'LEGAL_FN_MAP' hides another variable of same name in outer scope + (194, 7) ERROR: Expression must be of boolean type, instead found 'const string' + (196, 8) ERROR: No matching symbol 'FindToken' + (199, 8) WARN: Variable 'LEGAL_FN_MAP' hides another variable of same name in outer scope + (200, 4) ERROR: No matching symbol 'SendColoredMessage' + (204, 8) ERROR: No matching symbol 'EXIT_SUB' + (210, 9) WARN: Variable 'ALLOW_VOTE' hides another variable of same name in outer scope + (214, 9) WARN: Variable 'ALLOW_VOTE' hides another variable of same name in outer scope + (218, 9) WARN: Variable 'ALLOW_VOTE' hides another variable of same name in outer scope + (220, 8) ERROR: No matching symbol 'FindToken' + (222, 9) WARN: Variable 'ALLOW_VOTE' hides another variable of same name in outer scope + (224, 8) ERROR: Illegal operation on this datatype + (227, 4) ERROR: No matching symbol 'SendColoredMessage' + (231, 8) ERROR: No matching symbol 'EXIT_SUB' + (232, 7) ERROR: No matching symbol 'FindToken' + (234, 8) ERROR: No matching symbol 'StringToLower' + (237, 4) ERROR: No matching symbol 'SendColoredMessage' + (241, 8) ERROR: No matching symbol 'EXIT_SUB' + (242, 7) ERROR: No matching symbol 'FindToken' + (247, 5) ERROR: No matching symbol 'SendColoredMessage' + (251, 5) ERROR: No matching symbol 'SendColoredMessage' + (256, 8) ERROR: No matching symbol 'EXIT_SUB' + (257, 7) ERROR: No matching symbol 'FindToken' + (261, 11) ERROR: No matching symbol 'L_NO_GAUNLET_MESSAGE' + (267, 5) ERROR: No matching symbol 'SendColoredMessage' + (271, 5) ERROR: No matching symbol 'SendColoredMessage' + (276, 8) ERROR: No matching symbol 'EXIT_SUB' + (277, 9) ERROR: No matching symbol 'ValidateMapName' + (279, 4) ERROR: No matching symbol 'SendColoredMessage' + (283, 8) ERROR: No matching symbol 'EXIT_SUB' + (284, 7) ERROR: No matching symbol 'StringToLower' + (286, 8) ERROR: Illegal operation on this datatype + (289, 4) ERROR: No matching symbol 'SendColoredMessage' + (293, 8) ERROR: No matching symbol 'EXIT_SUB' + (298, 3) ERROR: No matching symbol 'CallExternal' + (301, 2) INFO: Compiling void PlayerVote::list_custom_maps() + (303, 23) ERROR: No matching symbol 'GetTokenCount' + (304, 3) ERROR: Illegal operation on 'string' + (307, 8) ERROR: No matching symbol 'MAPS_UNCONNECTEDS' + (311, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (314, 8) ERROR: No matching symbol 'EXIT_SUB' + (316, 21) ERROR: No matching symbol 'GetToken' + (317, 8) ERROR: No matching symbol 'ValidateMapName' + (322, 3) ERROR: No matching symbol 'ScheduleDelayedEvent' + (325, 2) INFO: Compiling void PlayerVote::player_votepvp() + (327, 8) ERROR: No matching symbol 'GetEntityProperty' + (330, 4) ERROR: No matching symbol 'SendColoredMessage' + (333, 8) ERROR: No matching symbol 'EXIT_SUB' + (334, 19) ERROR: No matching symbol 'param1' + (335, 7) ERROR: Illegal operation on this datatype + (339, 24) ERROR: No matching symbol 'GetEntityName' + (345, 24) ERROR: No matching symbol 'GetEntityName' + (347, 3) ERROR: No matching symbol 'CallExternal' + (350, 2) INFO: Compiling void PlayerVote::player_votelock() + (352, 24) ERROR: No conversion from 'const string' to 'int' available. + (356, 4) ERROR: No matching symbol 'SendColoredMessage' + (359, 8) ERROR: No matching symbol 'GetEntityProperty' + (363, 4) ERROR: No matching symbol 'SendColoredMessage' + (366, 21) ERROR: No matching symbol 'param1' + (368, 19) ERROR: No matching symbol 'GetEntityName' + (369, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\server\time.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found identifier 'string' + (10, 6) ERROR: Expected identifier + (10, 6) ERROR: Instead found '(' + (110, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\server\time_vote.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found identifier 'string' + (55, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world\sv_world.as + (8, 2) INFO: Compiling SvWorld::SvWorld() + (10, 3) ERROR: No matching symbol 'SetGlobalVar' + (11, 3) ERROR: No matching symbol 'SetGlobalVar' + (12, 3) ERROR: No matching symbol 'SetGlobalVar' + (15, 2) INFO: Compiling void SvWorld::OnSpawn() + (17, 7) ERROR: No matching symbol 'G_OVERRIDE_WEATHER_CODE' + (21, 7) ERROR: No matching symbol 'G_OVERRIDE_WEATHER_CODE' + (25, 8) ERROR: No matching symbol 'OVERRIDE_WEATHER' + (27, 4) ERROR: No matching symbol 'SetGlobalVar' + (31, 4) ERROR: No matching symbol 'SetGlobalVar' + (33, 23) ERROR: No matching symbol 'StringToLower' + (36, 4) ERROR: No matching symbol 'ScheduleDelayedEvent' + (40, 2) INFO: Compiling void SvWorld::set_pvp() + (42, 3) ERROR: No matching symbol 'LogDebug' + (43, 3) ERROR: No matching symbol 'SetCvar' + (44, 3) ERROR: No matching symbol 'SetPvP' + (47, 2) INFO: Compiling void SvWorld::game_playerjoin() + (49, 20) ERROR: No matching symbol 'G_WARN_HP' + (50, 7) ERROR: No matching symbol 'G_WARN_HP' + (52, 8) WARN: Variable 'HP_TICK' hides another variable of same name in outer scope + (55, 3) ERROR: Illegal operation on 'string' + (56, 3) ERROR: No matching symbol 'SetGlobalVar' + (57, 3) ERROR: No matching symbol 'LogDebug' + (60, 2) INFO: Compiling void SvWorld::game_playerleave() + (62, 3) ERROR: No matching symbol 'LogDebug' + (63, 3) ERROR: No matching symbol 'CallExternal' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/world.as + (0, 0) ERROR: Failed to load file + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/worlditems\clock_base.as + (8, 2) ERROR: Expected method or property + (8, 2) ERROR: Instead found reserved keyword 'int' + (9, 11) ERROR: Expected '(' + (9, 11) ERROR: Instead found '.' + (67, 1) ERROR: Unexpected token '}' + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/worlditems\map_startup.as + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/worlditems\TC_sewer.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/worlditems\treasurechest.as + (636, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ww1\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ww2b\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +[FAIL] C:/Users/Rhetoric/Desktop/MSCScripts/scripts/angelscript/ww3d\map_startup.as + (6, 7) ERROR: Name conflict. 'MS::MapStartup' is a class. + (62, 2) ERROR: A function with the same name and parameters already exists + +Pass rate: 1.0% (30/2928) diff --git a/msc_transpiler/__init__.py b/msc_transpiler/__init__.py new file mode 100644 index 00000000..596a7fdf --- /dev/null +++ b/msc_transpiler/__init__.py @@ -0,0 +1,3 @@ +"""MSCScript to AngelScript Transpiler""" + +__version__ = "0.1.0" diff --git a/msc_transpiler/__main__.py b/msc_transpiler/__main__.py new file mode 100644 index 00000000..c77f278d --- /dev/null +++ b/msc_transpiler/__main__.py @@ -0,0 +1,126 @@ +"""CLI entry point: python -m msc_transpiler """ + +from __future__ import annotations + +import sys +import time +from pathlib import Path + +from .config import TranspilerConfig, parse_args +from .errors import ErrorCollector +from .output.file_writer import mirror_path, write_output +from .pipeline.preprocessor import preprocess +from .pipeline.lexer import lex_file +from .pipeline.parser import parse_script +from .pipeline.analyzer import analyze +from .pipeline.codegen import generate + + +def transpile_file(input_path: Path, errors: ErrorCollector) -> str: + """Transpile a single .script file to AngelScript source.""" + source = input_path.read_text(encoding="utf-8", errors="replace") + filename = str(input_path) + + # Pipeline: preprocess → lex → parse → analyze → codegen + preprocessed = preprocess(source, filename) + lexed = lex_file(preprocessed) + ast = parse_script(lexed, preprocessed, errors) + ast = analyze(ast, errors) + output = generate(ast, errors) + + return output + + +def run(config: TranspilerConfig) -> int: + """Run the transpiler with the given configuration.""" + errors = ErrorCollector() + start_time = time.time() + + # Collect input files + if config.single_file: + input_files = [config.single_file] + else: + input_files = sorted(config.input_dir.rglob("*.script")) + if config.filter_pattern: + import fnmatch + input_files = [ + f for f in input_files + if fnmatch.fnmatch(str(f), f"*{config.filter_pattern}*") + ] + + if not input_files: + print(f"No .script files found in {config.input_dir}") + return 1 + + print(f"Found {len(input_files)} .script files") + + success_count = 0 + error_count = 0 + total_commands = 0 + unconverted_commands = 0 + + for input_file in input_files: + file_errors = ErrorCollector() + try: + output = transpile_file(input_file, file_errors) + + # Count TODO: UNCONVERTED lines + for line in output.split("\n"): + if "TODO: UNCONVERTED" in line: + unconverted_commands += 1 + elif line.strip() and not line.strip().startswith("//"): + total_commands += 1 + + if not config.dry_run: + output_path = mirror_path(input_file, config.input_dir, config.output_dir) + write_output(output, output_path) + + if config.verbose: + status = "OK" if not file_errors.has_errors else "WARN" + print(f" [{status}] {input_file.name} ({file_errors.summary()})") + + success_count += 1 + + except Exception as e: + error_count += 1 + errors.error(f"Failed to transpile: {e}", str(input_file)) + if config.verbose: + print(f" [ERR] {input_file.name}: {e}") + + # Merge file errors + errors.messages.extend(file_errors.messages) + + elapsed = time.time() - start_time + + # Summary + print(f"\n{'='*60}") + print(f"Transpilation complete in {elapsed:.1f}s") + print(f" Files: {success_count}/{len(input_files)} succeeded, {error_count} failed") + converted = total_commands + total = total_commands + unconverted_commands + if total > 0: + pct = converted / total * 100 + print(f" Commands: {converted}/{total} converted ({pct:.1f}%)") + else: + print(f" Commands: 0 total") + print(f" {errors.summary()}") + + if not config.dry_run: + print(f" Output: {config.output_dir}") + + # Write error log + if errors.messages: + log_content = errors.dump() + config.log_file.write_text(log_content, encoding="utf-8") + print(f" Error log: {config.log_file}") + + return 0 if not errors.has_errors else 1 + + +def main(): + config = parse_args() + sys.exit(run(config)) + + +if __name__ == "__main__": + main() diff --git a/msc_transpiler/ast_nodes.py b/msc_transpiler/ast_nodes.py new file mode 100644 index 00000000..3e58961a --- /dev/null +++ b/msc_transpiler/ast_nodes.py @@ -0,0 +1,168 @@ +"""AST node definitions for the MSCScript transpiler.""" + +from __future__ import annotations +from dataclasses import dataclass, field +from typing import Optional, Union + + +# ── Expressions ────────────────────────────────────────────── + +@dataclass +class Literal: + """A literal value: int, float, string, or unquoted token.""" + value: str + line: int = 0 + + def __repr__(self): + return f"Literal({self.value!r})" + + +@dataclass +class VectorLiteral: + """A vector literal like (1,2,3).""" + x: str + y: str + z: str + line: int = 0 + + def __repr__(self): + return f"Vector({self.x},{self.y},{self.z})" + + +@dataclass +class DollarFunc: + """A $function call like $rand(1,10) or $get(ent_me,hp).""" + name: str + args: list[Expression] + line: int = 0 + + def __repr__(self): + return f"${self.name}({', '.join(repr(a) for a in self.args)})" + + +@dataclass +class VariableRef: + """A reference to a variable (PARAM1, ent_me, MY_VAR, game.time, etc.).""" + name: str + line: int = 0 + + def __repr__(self): + return f"Var({self.name})" + + +@dataclass +class Concatenation: + """Implicit string concatenation of multiple expressions.""" + parts: list[Expression] + line: int = 0 + + +# Union of all expression types +Expression = Union[Literal, VectorLiteral, DollarFunc, VariableRef, Concatenation] + + +# ── Conditions ─────────────────────────────────────────────── + +@dataclass +class Condition: + """A condition expression like 'X equals Y' or 'X > Y'.""" + left: Expression + operator: str # equals, isnot, <, >, <=, >=, ==, !=, contains, startswith + right: Expression + negated: bool = False + line: int = 0 + + +@dataclass +class CompoundCondition: + """Multiple conditions combined with && or ||.""" + conditions: list[Union[Condition, "CompoundCondition"]] + operator: str = "&&" # && or || + line: int = 0 + + +# ── Statements ─────────────────────────────────────────────── + +@dataclass +class Command: + """A single command statement like 'hp 50' or 'setmodel monsters/orc.mdl'.""" + name: str + args: list[Expression] + line: int = 0 + raw_line: str = "" # Original source line for fallback + + +@dataclass +class IfBlock: + """An if/else block. + + guard_style: True if this is a bare 'if X equals Y' without braces + (means: if NOT condition, skip rest of event) + """ + condition: Union[Condition, CompoundCondition] + body: list[Statement] + else_body: list[Statement] = field(default_factory=list) + guard_style: bool = False + line: int = 0 + + +@dataclass +class Comment: + """A comment line.""" + text: str + line: int = 0 + + +@dataclass +class RawLine: + """An unconverted raw line (fallback).""" + text: str + line: int = 0 + + +# Union of all statement types +Statement = Union[Command, IfBlock, Comment, RawLine] + + +# ── Top-Level Structures ──────────────────────────────────── + +@dataclass +class EventBlock: + """An event block like { game_spawn ... }.""" + name: str # e.g. "game_spawn", "npc_struck", "" for unnamed init blocks + scope: str = "" # "server", "client", "shared", or "" + body: list[Statement] = field(default_factory=list) + line: int = 0 + is_init: bool = False # True for unnamed initialization blocks + + +@dataclass +class IncludeDirective: + """A #include directive.""" + path: str + scope: str = "" # Optional scope tag like [server] + line: int = 0 + + +@dataclass +class ScopeDirective: + """A #scope directive.""" + scope: str # "server", "client", "shared" + line: int = 0 + + +@dataclass +class ScriptFile: + """Root AST node representing an entire .script file.""" + filename: str + scope_directive: Optional[ScopeDirective] = None + includes: list[IncludeDirective] = field(default_factory=list) + events: list[EventBlock] = field(default_factory=list) + + @property + def init_blocks(self) -> list[EventBlock]: + return [e for e in self.events if e.is_init] + + @property + def named_events(self) -> list[EventBlock]: + return [e for e in self.events if not e.is_init] diff --git a/msc_transpiler/commands/__init__.py b/msc_transpiler/commands/__init__.py new file mode 100644 index 00000000..1b98dfac --- /dev/null +++ b/msc_transpiler/commands/__init__.py @@ -0,0 +1 @@ +"""Command translators for MSCScript commands.""" diff --git a/msc_transpiler/commands/animation_cmds.py b/msc_transpiler/commands/animation_cmds.py new file mode 100644 index 00000000..f78b177c --- /dev/null +++ b/msc_transpiler/commands/animation_cmds.py @@ -0,0 +1,47 @@ +"""Animation commands: playanim, setidleanim, setmoveanim, etc.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class PlayAnimTranslator(CommandTranslator): + """playanim TYPE ANIM_NAME.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + anim_type = ctx.expr_raw(cmd.args[0]) + anim_name = ctx.translate_expr(cmd.args[1]) + w.line(f'PlayAnim("{anim_type}", {anim_name});') + elif cmd.args: + anim_name = ctx.translate_expr(cmd.args[0]) + w.line(f'PlayAnim("once", {anim_name});') + return True + + +class SetIdleAnimTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetIdleAnim({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetMoveAnimTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetMoveAnim({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetAnimFrameRateTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetAnimFrameRate({ctx.translate_expr(cmd.args[0])});") + return True + + +def register_commands(): + register("playanim", PlayAnimTranslator()) + register("setidleanim", SetIdleAnimTranslator()) + register("setmoveanim", SetMoveAnimTranslator()) + register("setanim.framerate", SetAnimFrameRateTranslator()) + register("splayviewanim", CommandTranslator()) diff --git a/msc_transpiler/commands/array_cmds.py b/msc_transpiler/commands/array_cmds.py new file mode 100644 index 00000000..af63eac8 --- /dev/null +++ b/msc_transpiler/commands/array_cmds.py @@ -0,0 +1,159 @@ +"""Array commands: array.*, g_array.*.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class ArrayCreateTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if cmd.args: + name = ctx.expr_raw(cmd.args[0]) + if self.is_global: + w.line(f'CreateGlobalArray("{name}");') + else: + w.line(f"array {name};") + return True + + +class ArrayAddTranslator(CommandTranslator): + def __init__(self, is_global: bool = False, unique: bool = False): + self.is_global = is_global + self.unique = unique + + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + name = ctx.expr_raw(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + if self.is_global: + if self.unique: + w.line(f'GlobalArrayAddUnique("{name}", {val});') + else: + w.line(f'GlobalArrayAdd("{name}", {val});') + else: + if self.unique: + w.line(f"ArrayAddUnique({name}, {val});") + else: + w.line(f"{name}.insertLast({val});") + return True + + +class ArraySetTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 3: + name = ctx.expr_raw(cmd.args[0]) + idx = ctx.translate_expr(cmd.args[1]) + val = ctx.translate_expr(cmd.args[2]) + if self.is_global: + w.line(f'GlobalArraySet("{name}", {idx}, {val});') + else: + w.line(f"{name}[{idx}] = {val};") + return True + + +class ArrayDelTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + name = ctx.expr_raw(cmd.args[0]) + idx = ctx.translate_expr(cmd.args[1]) + if self.is_global: + w.line(f'GlobalArrayDel("{name}", {idx});') + else: + w.line(f"{name}.removeAt({idx});") + return True + + +class ArrayClearTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if cmd.args: + name = ctx.expr_raw(cmd.args[0]) + if self.is_global: + w.line(f'GlobalArrayClear("{name}");') + else: + w.line(f"{name}.resize(0);") + return True + + +class ArrayCopyTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + dest = ctx.expr_raw(cmd.args[0]) + src = ctx.expr_raw(cmd.args[1]) + if self.is_global: + w.line(f'GlobalArrayCopy("{dest}", "{src}");') + else: + w.line(f"{dest} = {src};") + return True + + +class ArrayRemoveTranslator(CommandTranslator): + """Remove element by value (find index first, then removeAt).""" + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + name = ctx.expr_raw(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + if self.is_global: + w.line(f'GlobalArrayRemove("{name}", {val});') + else: + # Find and remove: int idx = ArrayFind(arr, val, 0); if (idx >= 0) arr.removeAt(idx); + w.line("{") + w.line(f" int _rmIdx = ArrayFind({name}, {val}, 0);") + w.line(f" if (_rmIdx >= 0) {name}.removeAt(_rmIdx);") + w.line("}") + return True + + +class ArrayEraseTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if cmd.args: + name = ctx.expr_raw(cmd.args[0]) + if self.is_global: + w.line(f'GlobalArrayErase("{name}");') + else: + w.line(f"{name}.resize(0);") + return True + + +def register_commands(): + # Local arrays + register("array.create", ArrayCreateTranslator(False)) + register("array.add", ArrayAddTranslator(False)) + register("array.add_unique", ArrayAddTranslator(False, unique=True)) + register("array.set", ArraySetTranslator(False)) + register("array.del", ArrayDelTranslator(False)) + register("array.clear", ArrayClearTranslator(False)) + register("array.copy", ArrayCopyTranslator(False)) + register("array.remove", ArrayRemoveTranslator(False)) + register("array.erase", ArrayEraseTranslator(False)) + + # Global arrays + register("g_array.create", ArrayCreateTranslator(True)) + register("g_array.add", ArrayAddTranslator(True)) + register("g_array.add_unique", ArrayAddTranslator(True, unique=True)) + register("g_array.set", ArraySetTranslator(True)) + register("g_array.del", ArrayDelTranslator(True)) + register("g_array.clear", ArrayClearTranslator(True)) + register("g_array.copy", ArrayCopyTranslator(True)) + register("g_array.remove", ArrayRemoveTranslator(True)) + register("g_array.erase", ArrayEraseTranslator(True)) diff --git a/msc_transpiler/commands/combat_cmds.py b/msc_transpiler/commands/combat_cmds.py new file mode 100644 index 00000000..177e8f95 --- /dev/null +++ b/msc_transpiler/commands/combat_cmds.py @@ -0,0 +1,160 @@ +"""Combat commands: dodamage, xdodamage, takedmg, applyeffect, etc.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class DoDamageTranslator(CommandTranslator): + """dodamage TARGET RANGE DAMAGE HITCHANCE [TYPE].""" + def translate(self, cmd, ctx, w): + args = [ctx.translate_expr(a) for a in cmd.args] + if len(args) >= 4: + target = args[0] + range_val = args[1] + damage = args[2] + hitchance = args[3] + dmg_type = args[4] if len(args) > 4 else '"slash"' + w.line(f"DoDamage({target}, {range_val}, {damage}, {hitchance}, {dmg_type});") + else: + w.comment(f"WARN: dodamage with insufficient args: {cmd.raw_line}") + return True + + +class XDoDamageTranslator(CommandTranslator): + """xdodamage — extended damage with more params.""" + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"XDoDamage({args});") + return True + + +class TakeDmgTranslator(CommandTranslator): + """takedmg TYPE MULTIPLIER.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + dmg_type = ctx.translate_expr(cmd.args[0]) + multi = ctx.translate_expr(cmd.args[1]) + w.line(f'SetDamageResistance({dmg_type}, {multi});') + return True + + +class ApplyEffectTranslator(CommandTranslator): + """applyeffect TARGET EFFECT DURATION.""" + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"ApplyEffect({args});") + return True + + +class RemoveEffectTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"RemoveEffect({args});") + return True + + +class HitMultiTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetHitMultiplier({ctx.translate_expr(cmd.args[0])});") + return True + + +class DmgMultiTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetDamageMultiplier({ctx.translate_expr(cmd.args[0])});") + return True + + +class GiveHpTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + amount = ctx.translate_expr(cmd.args[1]) + w.line(f"HealEntity({target}, {amount});") + elif cmd.args: + w.line(f"HealEntity(GetOwner(), {ctx.translate_expr(cmd.args[0])});") + return True + + +class GiveMpTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"GiveMP({ctx.translate_expr(cmd.args[0])});") + return True + + +class DrainHpTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + amount = ctx.translate_expr(cmd.args[1]) + w.line(f"DamageEntity({target}, {amount});") + elif cmd.args: + w.line(f"DamageEntity(GetOwner(), {ctx.translate_expr(cmd.args[0])});") + return True + + +class DrainStaminaTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"DrainStamina({ctx.translate_expr(cmd.args[0])});") + return True + + +class KillTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"KillEntity({ctx.translate_expr(cmd.args[0])});") + else: + w.line("KillEntity(GetOwner());") + return True + + +class BleedTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"Bleed({args});") + return True + + +class AttackPropTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + prop = ctx.expr_raw(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + w.line(f'SetAttackProp("{prop}", {val});') + return True + + +class SetStatTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + stat = ctx.expr_raw(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + w.line(f'SetStat("{stat}", {val});') + return True + + +def register_commands(): + register("dodamage", DoDamageTranslator()) + register("xdodamage", XDoDamageTranslator()) + register("takedmg", TakeDmgTranslator()) + register("applyeffect", ApplyEffectTranslator()) + register("removeeffect", RemoveEffectTranslator()) + register("hitmulti", HitMultiTranslator()) + register("dmgmulti", DmgMultiTranslator()) + register("givehp", GiveHpTranslator()) + register("givemp", GiveMpTranslator()) + register("drainhp", DrainHpTranslator()) + register("drainstamina", DrainStaminaTranslator()) + register("kill", KillTranslator()) + register("bleed", BleedTranslator()) + register("attackprop", AttackPropTranslator()) + register("setstat", SetStatTranslator()) + register("setexpstat", SetStatTranslator()) + register("markdmg", CommandTranslator()) # TODO + register("clearplayerhits", CommandTranslator()) # TODO + register("setatkspeed", CommandTranslator()) # TODO diff --git a/msc_transpiler/commands/communication_cmds.py b/msc_transpiler/commands/communication_cmds.py new file mode 100644 index 00000000..8cf63b90 --- /dev/null +++ b/msc_transpiler/commands/communication_cmds.py @@ -0,0 +1,138 @@ +"""Communication commands: saytext, infomsg, messageall, etc.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +def _build_message_expr(args, ctx) -> str: + """Build a concatenated message expression that correctly handles variable + references and $func calls as unquoted expressions rather than string literals. + + Examples: + [VariableRef("OFFER_TEXT")] → OFFER_TEXT + [Lit("Lead"), Lit("on,"), VarRef("FOO")] → "Lead on, " + FOO + [Lit("I"), Lit("have"), DFunc("int",...), Lit("hp")] → "I have " + int(HP) + " hp" + """ + from ..ast_nodes import VariableRef, DollarFunc + + def _is_dynamic(arg) -> bool: + if isinstance(arg, VariableRef): + name = arg.name + return name.isupper() or (name.upper() == name and "_" in name) + return isinstance(arg, DollarFunc) + + result_parts: list[str] = [] + pending_strings: list[str] = [] + prev_was_dynamic = False + + for arg in args: + if _is_dynamic(arg): + if pending_strings: + # Flush accumulated string tokens with trailing space separator + text = " ".join(pending_strings) + " " + result_parts.append(f'"{text}"') + pending_strings = [] + result_parts.append(ctx.translate_expr(arg)) + prev_was_dynamic = True + else: + pending_strings.append(ctx.expr_raw(arg)) + prev_was_dynamic = False + + if pending_strings: + text = " ".join(pending_strings) + if result_parts: + text = " " + text # Leading space after a dynamic part + result_parts.append(f'"{text}"') + + if not result_parts: + return '""' + return " + ".join(result_parts) + + +class PlayerMessageTranslator(CommandTranslator): + """playermessage/rplayermessage/etc TARGET MESSAGE.""" + def __init__(self, func: str = "SendPlayerMessage"): + self.func = func + + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + msg = _build_message_expr(cmd.args[1:], ctx) + w.line(f'{self.func}({target}, {msg});') + elif cmd.args: + msg = _build_message_expr(cmd.args, ctx) + w.line(f'{self.func}(GetOwner(), {msg});') + return True + + +class InfoMsgTranslator(CommandTranslator): + """infomsg TARGET MESSAGE.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + msg = _build_message_expr(cmd.args[1:], ctx) + w.line(f'SendInfoMsg({target}, {msg});') + elif cmd.args: + msg = _build_message_expr(cmd.args, ctx) + w.line(f'SendInfoMsg(GetOwner(), {msg});') + return True + + +class MessageAllTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + msg = _build_message_expr(cmd.args, ctx) + w.line(f'SendInfoMessageToAll({msg});') + return True + + +class SayTextTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + msg = _build_message_expr(cmd.args, ctx) + w.line(f'SayText({msg});') + return True + + +class ConsoleMsgTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + msg = _build_message_expr(cmd.args, ctx) + w.line(f'LogMessage({msg});') + return True + + +class ErrorMessageTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + msg = _build_message_expr(cmd.args, ctx) + w.line(f'LogError({msg});') + return True + + +class PopupTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"ShowPopup({args});") + return True + + +class HelpTipTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"ShowHelpTip({args});") + return True + + +def register_commands(): + register("playermessage", PlayerMessageTranslator()) + register("rplayermessage", PlayerMessageTranslator("SendColoredMessage")) + register("gplayermessage", PlayerMessageTranslator("SendColoredMessage")) + register("bplayermessage", PlayerMessageTranslator("SendColoredMessage")) + register("yplayermessage", PlayerMessageTranslator("SendColoredMessage")) + register("dplayermessage", PlayerMessageTranslator("SendColoredMessage")) + register("infomsg", InfoMsgTranslator()) + register("messageall", MessageAllTranslator()) + register("saytext", SayTextTranslator()) + register("consolemsg", ConsoleMsgTranslator()) + register("errormessage", ErrorMessageTranslator()) + register("popup", PopupTranslator()) + register("helptip", HelpTipTranslator()) diff --git a/msc_transpiler/commands/creation_cmds.py b/msc_transpiler/commands/creation_cmds.py new file mode 100644 index 00000000..c9355ba6 --- /dev/null +++ b/msc_transpiler/commands/creation_cmds.py @@ -0,0 +1,77 @@ +"""Entity creation/deletion commands: createnpc, createitem, deleteent, etc.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class CreateNpcTranslator(CommandTranslator): + """createnpc SCRIPT ORIGIN [PARAMS].""" + def translate(self, cmd, ctx, w): + if not cmd.args: + return True + script = ctx.translate_expr(cmd.args[0]) + origin = ctx.translate_expr(cmd.args[1]) if len(cmd.args) > 1 else "GetOrigin()" + params = ", ".join(ctx.translate_expr(a) for a in cmd.args[2:]) if len(cmd.args) > 2 else "" + if params: + w.line(f"SpawnNPC({script}, {origin}, ScriptMode::Legacy); // params: {params}") + else: + w.line(f"SpawnNPC({script}, {origin}, ScriptMode::Legacy);") + return True + + +class CreateItemTranslator(CommandTranslator): + """createitem SCRIPT ORIGIN.""" + def translate(self, cmd, ctx, w): + if not cmd.args: + return True + script = ctx.translate_expr(cmd.args[0]) + origin = ctx.translate_expr(cmd.args[1]) if len(cmd.args) > 1 else "GetOrigin()" + w.line(f"SpawnItem({script}, {origin});") + return True + + +class DeleteEntTranslator(CommandTranslator): + """deleteent TARGET [fade].""" + def translate(self, cmd, ctx, w): + if not cmd.args: + return True + target = ctx.translate_expr(cmd.args[0]) + fade = len(cmd.args) > 1 and ctx.expr_raw(cmd.args[1]).lower() == "fade" + if fade: + w.line(f"DeleteEntity({target}, true); // fade out") + else: + w.line(f"DeleteEntity({target});") + return True + + +class DeleteMeTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + fade = cmd.args and ctx.expr_raw(cmd.args[0]).lower() == "fade" + if fade: + w.line("DeleteEntity(GetOwner(), true); // fade out") + else: + w.line("DeleteEntity(GetOwner());") + return True + + +class RespawnTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + w.line("Respawn();") + return True + + +class SetAliveTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetAlive({ctx.translate_expr(cmd.args[0])});") + return True + + +def register_commands(): + register("createnpc", CreateNpcTranslator()) + register("createitem", CreateItemTranslator()) + register("deleteent", DeleteEntTranslator()) + register("deleteme", DeleteMeTranslator()) + register("respawn", RespawnTranslator()) + register("setalive", SetAliveTranslator()) diff --git a/msc_transpiler/commands/event_cmds.py b/msc_transpiler/commands/event_cmds.py new file mode 100644 index 00000000..5386f695 --- /dev/null +++ b/msc_transpiler/commands/event_cmds.py @@ -0,0 +1,140 @@ +"""Event commands: callevent, callexternal, calleventloop, repeatdelay, etc.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class CallEventTranslator(CommandTranslator): + """callevent [DELAY] EVENT_NAME [PARAMS...].""" + def translate(self, cmd, ctx, w): + if not cmd.args: + return True + + # Check if first arg is a delay (number or float) + first_raw = ctx.expr_raw(cmd.args[0]) + is_delay = False + try: + float(first_raw) + is_delay = True + except ValueError: + pass + + if is_delay and len(cmd.args) >= 2: + delay = ctx.translate_expr(cmd.args[0]) + event_name = ctx.expr_raw(cmd.args[1]) + params = [ctx.translate_expr(a) for a in cmd.args[2:]] + safe_name = _sanitize_event_name(event_name) + if params: + w.line(f'ScheduleDelayedEvent({delay}, "{safe_name}", {", ".join(params)});') + else: + w.line(f'ScheduleDelayedEvent({delay}, "{safe_name}");') + else: + event_name = ctx.expr_raw(cmd.args[0]) + params = [ctx.translate_expr(a) for a in cmd.args[1:]] + safe_name = _sanitize_event_name(event_name) + if params: + w.line(f'{safe_name}({", ".join(params)});') + else: + w.line(f'{safe_name}();') + + return True + + +class CallExternalTranslator(CommandTranslator): + """callexternal TARGET EVENT_NAME [PARAMS...].""" + def translate(self, cmd, ctx, w): + if len(cmd.args) < 2: + return True + target = ctx.translate_expr(cmd.args[0]) + event_name = ctx.expr_raw(cmd.args[1]) + params = [ctx.translate_expr(a) for a in cmd.args[2:]] + safe_name = _sanitize_event_name(event_name) + if params: + w.line(f'CallExternal({target}, "{safe_name}", {", ".join(params)});') + else: + w.line(f'CallExternal({target}, "{safe_name}");') + return True + + +class CallEventLoopTranslator(CommandTranslator): + """calleventloop COUNT EVENT_NAME [PARAMS...].""" + def translate(self, cmd, ctx, w): + if len(cmd.args) < 2: + return True + count = ctx.translate_expr(cmd.args[0]) + event_name = ctx.expr_raw(cmd.args[1]) + params = [ctx.translate_expr(a) for a in cmd.args[2:]] + safe_name = _sanitize_event_name(event_name) + w.line(f"for (int i = 0; i < {count}; i++)") + w.line("{") + w.indent() + if params: + w.line(f'{safe_name}({", ".join(params)});') + else: + w.line(f'{safe_name}();') + w.dedent() + w.line("}") + return True + + +class CallEventTimedTranslator(CommandTranslator): + """calleventtimed DELAY EVENT_NAME [PARAMS...].""" + def translate(self, cmd, ctx, w): + if len(cmd.args) < 2: + return True + delay = ctx.translate_expr(cmd.args[0]) + event_name = ctx.expr_raw(cmd.args[1]) + params = [ctx.translate_expr(a) for a in cmd.args[2:]] + safe_name = _sanitize_event_name(event_name) + if params: + w.line(f'ScheduleDelayedEvent({delay}, "{safe_name}", {", ".join(params)});') + else: + w.line(f'ScheduleDelayedEvent({delay}, "{safe_name}");') + return True + + +class RepeatDelayTranslator(CommandTranslator): + """repeatdelay SECONDS — re-calls this event periodically.""" + def translate(self, cmd, ctx, w): + if cmd.args: + delay = ctx.translate_expr(cmd.args[0]) + w.line(f"SetRepeatDelay({delay});") + return True + + +class ExitEventTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + w.line("return;") + return True + + +class BreakLoopTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + w.line("break;") + return True + + +class CallClItemEventTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"CallClientItemEvent({args});") + return True + + +def _sanitize_event_name(name: str) -> str: + """Make event name a valid AngelScript identifier.""" + return name.replace(".", "_").replace("-", "_") + + +def register_commands(): + register("callevent", CallEventTranslator()) + register("callexternal", CallExternalTranslator()) + register("calleventloop", CallEventLoopTranslator()) + register("calleventtimed", CallEventTimedTranslator()) + register("repeatdelay", RepeatDelayTranslator()) + register("exitevent", ExitEventTranslator()) + register("return", ExitEventTranslator()) + register("breakloop", BreakLoopTranslator()) + register("resetloop", CommandTranslator()) + register("callclitemevent", CallClItemEventTranslator()) diff --git a/msc_transpiler/commands/hashmap_cmds.py b/msc_transpiler/commands/hashmap_cmds.py new file mode 100644 index 00000000..f6fee4d4 --- /dev/null +++ b/msc_transpiler/commands/hashmap_cmds.py @@ -0,0 +1,113 @@ +"""Hashmap and set commands: hashmap.*, g_hashmap.*, set.*, g_set.*.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class HashmapCreateTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if cmd.args: + name = ctx.expr_raw(cmd.args[0]) + if self.is_global: + w.line(f'CreateGlobalDictionary("{name}");') + else: + w.line(f"dictionary {name};") + return True + + +class HashmapSetTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 3: + name = ctx.expr_raw(cmd.args[0]) + key = ctx.translate_expr(cmd.args[1]) + val = ctx.translate_expr(cmd.args[2]) + if self.is_global: + w.line(f'GlobalDictionarySet("{name}", {key}, {val});') + else: + w.line(f"{name}.set({key}, {val});") + return True + + +class HashmapDelTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + name = ctx.expr_raw(cmd.args[0]) + key = ctx.translate_expr(cmd.args[1]) + if self.is_global: + w.line(f'GlobalDictionaryDel("{name}", {key});') + else: + w.line(f"{name}.delete({key});") + return True + + +class HashmapEraseTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if cmd.args: + name = ctx.expr_raw(cmd.args[0]) + if self.is_global: + w.line(f'GlobalDictionaryErase("{name}");') + else: + w.line(f"{name}.deleteAll();") + return True + + +class HashmapClearTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if cmd.args: + name = ctx.expr_raw(cmd.args[0]) + if self.is_global: + w.line(f'GlobalDictionaryClear("{name}");') + else: + w.line(f"{name}.deleteAll();") + return True + + +class HashmapCopyTranslator(CommandTranslator): + def __init__(self, is_global: bool = False): + self.is_global = is_global + + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + dest = ctx.expr_raw(cmd.args[0]) + src = ctx.expr_raw(cmd.args[1]) + if self.is_global: + w.line(f'GlobalDictionaryCopy("{dest}", "{src}");') + else: + w.line(f"{dest} = {src};") + return True + + +def register_commands(): + # Hashmap + for prefix, is_global in [("hashmap", False), ("g_hashmap", True)]: + register(f"{prefix}.create", HashmapCreateTranslator(is_global)) + register(f"{prefix}.set", HashmapSetTranslator(is_global)) + register(f"{prefix}.del", HashmapDelTranslator(is_global)) + register(f"{prefix}.erase", HashmapEraseTranslator(is_global)) + register(f"{prefix}.clear", HashmapClearTranslator(is_global)) + register(f"{prefix}.copy", HashmapCopyTranslator(is_global)) + + # Set (same as hashmap but keys-only) + for prefix, is_global in [("set", False), ("g_set", True)]: + register(f"{prefix}.create", HashmapCreateTranslator(is_global)) + register(f"{prefix}.add", HashmapSetTranslator(is_global)) + register(f"{prefix}.del", HashmapDelTranslator(is_global)) + register(f"{prefix}.erase", HashmapEraseTranslator(is_global)) + register(f"{prefix}.clear", HashmapClearTranslator(is_global)) + register(f"{prefix}.copy", HashmapCopyTranslator(is_global)) diff --git a/msc_transpiler/commands/math_cmds.py b/msc_transpiler/commands/math_cmds.py new file mode 100644 index 00000000..821619ab --- /dev/null +++ b/msc_transpiler/commands/math_cmds.py @@ -0,0 +1,87 @@ +"""Math commands: add, subtract, multiply, divide, mod, inc, dec, capvar.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class BinaryMathTranslator(CommandTranslator): + """Translates add/subtract/multiply/divide to +=, -=, *=, /=.""" + def __init__(self, operator: str): + self.operator = operator + + def translate(self, cmd, ctx, w): + if len(cmd.args) < 2: + return False + var = ctx.expr_raw(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + w.line(f"{var} {self.operator} {val};") + return True + + +class IncDecTranslator(CommandTranslator): + """Translates inc/dec to ++/--.""" + def __init__(self, operator: str): + self.operator = operator + + def translate(self, cmd, ctx, w): + if not cmd.args: + return False + var = ctx.expr_raw(cmd.args[0]) + w.line(f"{var}{self.operator};") + return True + + +class CapVarTranslator(CommandTranslator): + """capvar VAR MIN MAX → var = Math::Max(MIN, Math::Min(MAX, var)).""" + def translate(self, cmd, ctx, w): + if len(cmd.args) < 3: + return False + var = ctx.expr_raw(cmd.args[0]) + lo = ctx.translate_expr(cmd.args[1]) + hi = ctx.translate_expr(cmd.args[2]) + w.line(f"{var} = max({lo}, min({hi}, {var}));") + return True + + +class MathSetTranslator(CommandTranslator): + """mathset VAR EXPR → var = expr.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) < 2: + return False + var = ctx.expr_raw(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + w.line(f"{var} = {val};") + return True + + +class VectorMathTranslator(CommandTranslator): + """vectoradd/vectormultiply VAR VALUE.""" + def __init__(self, operator: str): + self.operator = operator + + def translate(self, cmd, ctx, w): + if len(cmd.args) < 2: + return False + var = ctx.expr_raw(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + w.line(f"{var} {self.operator} {val};") + return True + + +def register_commands(): + register("add", BinaryMathTranslator("+=")) + register("subtract", BinaryMathTranslator("-=")) + register("multiply", BinaryMathTranslator("*=")) + register("divide", BinaryMathTranslator("/=")) + register("mod", BinaryMathTranslator("%=")) + register("inc", IncDecTranslator("++")) + register("dec", IncDecTranslator("--")) + register("incvar", BinaryMathTranslator("+=")) + register("decvar", BinaryMathTranslator("-=")) + register("capvar", CapVarTranslator()) + register("mathset", MathSetTranslator()) + register("vectoradd", VectorMathTranslator("+=")) + register("vectormultiply", VectorMathTranslator("*=")) + register("vectorscale", VectorMathTranslator("*=")) + register("vectorset", MathSetTranslator()) diff --git a/msc_transpiler/commands/misc_cmds.py b/msc_transpiler/commands/misc_cmds.py new file mode 100644 index 00000000..7e31e6d7 --- /dev/null +++ b/msc_transpiler/commands/misc_cmds.py @@ -0,0 +1,387 @@ +"""Miscellaneous commands that don't fit other categories.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class PrecacheTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"Precache({ctx.translate_expr(cmd.args[0])});") + return True + + +class ChangeLevelTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"ServerCommand(\"changelevel \" + {ctx.translate_expr(cmd.args[0])});") + return True + + +class UseTriggerTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"UseTrigger({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetPropTranslator(CommandTranslator): + """setprop TARGET PROPERTY VALUE.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 3: + target = ctx.translate_expr(cmd.args[0]) + prop = ctx.expr_raw(cmd.args[1]) + val = ctx.translate_expr(cmd.args[2]) + w.line(f'SetProp({target}, "{prop}", {val});') + return True + + +class SetSolidTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetSolid({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetBBoxTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + mins = ctx.translate_expr(cmd.args[0]) + maxs = ctx.translate_expr(cmd.args[1]) + w.line(f"SetBBox({mins}, {maxs});") + return True + + +class BloodTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + val = ctx.expr_raw(cmd.args[0]) + if val.lower() == "none": + w.line('SetBloodType("none");') + else: + w.line(f'SetBloodType({ctx.translate_expr(cmd.args[0])});') + return True + + +class SetCallbackTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"SetCallback({args});") + return True + + +class ScriptFlagsTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"SetScriptFlags({args});") + return True + + +class DebugPrintTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = [ctx.expr_raw(a) for a in cmd.args] + w.line(f'LogDebug("{" ".join(args)}");') + return True + + +class QuestTranslator(CommandTranslator): + """quest set/get NAME VALUE.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 3: + action = ctx.expr_raw(cmd.args[0]).lower() + name = ctx.translate_expr(cmd.args[1]) + val = ctx.translate_expr(cmd.args[2]) + if action == "set": + w.line(f"SetPlayerQuestData({name}, {val});") + else: + w.line(f"// quest {action} {name} {val}") + return True + + +class GiveExpTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"GiveExp({args});") + return True + + +class SkillLevelTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetSkillLevel({ctx.translate_expr(cmd.args[0])});") + return True + + +class ClientCmdTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + command = ctx.translate_expr(cmd.args[1]) + w.line(f"ClientCommand({target}, {command});") + elif cmd.args: + w.line(f"ClientCommand(GetOwner(), {ctx.translate_expr(cmd.args[0])});") + return True + + +class ServerCmdTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = " ".join(ctx.expr_raw(a) for a in cmd.args) + w.line(f'ServerCommand("{args}");') + return True + + +class SetCvarTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + name = ctx.translate_expr(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + w.line(f"SetCvar({name}, {val});") + return True + + +class ClientEventTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"ClientEvent({args});") + return True + + +class EffectTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"Effect({args});") + return True + + +class ClEffectTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"ClientEffect({args});") + return True + + +class SetTransTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"SetTransition({args});") + return True + + +class SetPvPTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetPvP({ctx.translate_expr(cmd.args[0])});") + return True + + +class GetPlayersTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"GetAllPlayers({args});") + return True + + +class RemoveScriptTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"RemoveScript({ctx.translate_expr(cmd.args[0])});") + else: + w.line("RemoveScript();") + return True + + +class GagPlayerTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"GagPlayer({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetEnvTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"SetEnvironment({args});") + return True + + +class SetLightsTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetLights({ctx.translate_expr(cmd.args[0])});") + return True + + +class NopTranslator(CommandTranslator): + """Commands that have no AngelScript equivalent — emit nothing.""" + def translate(self, cmd, ctx, w): + return True # Silently consumed + + +class SetLockTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + strength = ctx.translate_expr(cmd.args[1]) + w.line(f"SetItemLockStrength({target}, {strength});") + elif cmd.args: + w.line(f"SetItemLockStrength(GetOwner(), {ctx.translate_expr(cmd.args[0])});") + else: + return False + return True + + +class SolidifyProjectileTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SolidifyProjectile({ctx.translate_expr(cmd.args[0])});") + else: + w.line("SolidifyProjectile(GetOwner());") + return True + + +class LightGammaTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if not cmd.args: + return False + w.line(f"SetWorldLightGamma({ctx.translate_expr(cmd.args[0])});") + return True + + +def register_commands(): + register("precache", PrecacheTranslator()) + register("precachefile", PrecacheTranslator()) + register("changelevel", ChangeLevelTranslator()) + register("usetrigger", UseTriggerTranslator()) + register("setprop", SetPropTranslator()) + register("setsolid", SetSolidTranslator()) + register("setbbox", SetBBoxTranslator()) + register("blood", BloodTranslator()) + register("setcallback", SetCallbackTranslator()) + register("scriptflags", ScriptFlagsTranslator()) + register("dbg", DebugPrintTranslator()) + register("debugprint", DebugPrintTranslator()) + register("quest", QuestTranslator()) + register("giveexp", GiveExpTranslator()) + register("skilllevel", SkillLevelTranslator()) + register("clientcmd", ClientCmdTranslator()) + register("servercmd", ServerCmdTranslator()) + register("setcvar", SetCvarTranslator()) + register("clientevent", ClientEventTranslator()) + register("effect", EffectTranslator()) + register("cleffect", ClEffectTranslator()) + register("settrans", SetTransTranslator()) + register("setpvp", SetPvPTranslator()) + register("getplayers", GetPlayersTranslator()) + register("getplayersarray", GetPlayersTranslator()) + register("getplayersnb", GetPlayersTranslator()) + register("getplayer", GetPlayersTranslator()) + register("removescript", RemoveScriptTranslator()) + register("gagplayer", GagPlayerTranslator()) + register("setenv", SetEnvTranslator()) + register("setlights", SetLightsTranslator()) + register("setlock", SetLockTranslator()) + register("solidifyprojectile", SolidifyProjectileTranslator()) + register("lightgamma", LightGammaTranslator()) + register("companion", CommandTranslator()) + register("endgame", CommandTranslator()) + register("resetglobals", CommandTranslator()) + register("conflictcheck", NopTranslator()) + register("forcesend", NopTranslator()) + register("nosend", NopTranslator()) + + # Register commands + register("registerrace", CommandTranslator()) + register("registertitle", CommandTranslator()) + register("registerdefaults", CommandTranslator()) + register("registereffect", CommandTranslator()) + register("registertexture", CommandTranslator()) + + # Debug commands — map to LogDebug + for dbg_cmd in [ + "dbg_all", "dbg_npcs", "dbg_target", "dbg_items", + "dbg_hand_active", "dbg_hand_off", "dbg_players", + "dbg_world", "dbg_gm", "dbg_index", "dbg_scriptname", + ]: + register(dbg_cmd, DebugPrintTranslator()) + + # HUD commands + register("hud.addstatusicon", CommandTranslator()) + register("hud.addimgicon", CommandTranslator()) + register("hud.killicons", CommandTranslator()) + register("hud.killstatusicon", CommandTranslator()) + register("hud.killimgicon", CommandTranslator()) + register("hud.setfnconnection", CommandTranslator()) + + # Local menu commands + for menu_cmd in [ + "localmenu.reset", "localmenu.open", "localmenu.close", + "registerlocal.menu", "registerlocal.button", + "registerlocal.paragraph", "registerlocal.image", + ]: + register(menu_cmd, CommandTranslator()) + + # Item commands + register("projectilesize", CommandTranslator()) + register("itemrestrict", CommandTranslator()) + register("syncitem", CommandTranslator()) + register("displaydesc", CommandTranslator()) + register("setquality", CommandTranslator()) + register("setquantity", CommandTranslator()) + register("setwearpos", CommandTranslator()) + register("setviewmodelprop", CommandTranslator()) + register("overwritespell", CommandTranslator()) + register("wipespell", CommandTranslator()) + + # File I/O + register("erasefile", CommandTranslator()) + register("writeline", CommandTranslator()) + register("chatlog", CommandTranslator()) + + # Store commands + register("createstore", CommandTranslator()) + register("offerstore", CommandTranslator()) + register("addstoreitem", CommandTranslator()) + register("offer", CommandTranslator()) + + # Effects + register("darkenbloom", CommandTranslator()) + register("getents", CommandTranslator()) + register("getitemarray", CommandTranslator()) + + register("kick", CommandTranslator()) + register("playername", CommandTranslator()) + register("playertitle", CommandTranslator()) + + # Registration/definition commands — emit as TODO comments + register("reg", CommandTranslator()) + register("registerarmor", CommandTranslator()) + register("registercontainer", CommandTranslator()) + register("registerspell", CommandTranslator()) + + # Movement/AI commands + register("movetype", CommandTranslator()) + register("setgaitspeed", CommandTranslator()) + register("maxslope", CommandTranslator()) + register("roamdelay", CommandTranslator()) + register("tospawn", CommandTranslator()) + + # Player/entity state + register("setstatus", CommandTranslator()) + register("setrender", CommandTranslator()) + register("removesetvar", CommandTranslator()) + register("setrvard", CommandTranslator()) + + # Item/projectile + register("projectiletouch", CommandTranslator()) + + # Sound + register("playmp3", CommandTranslator()) + register("splayviewanim", CommandTranslator()) + register("playermessagecl", CommandTranslator()) + + # DLLFunc + register("dllfunc", CommandTranslator()) + + # Menu + register("menu.autopen", CommandTranslator()) diff --git a/msc_transpiler/commands/movement_cmds.py b/msc_transpiler/commands/movement_cmds.py new file mode 100644 index 00000000..7b13cfbc --- /dev/null +++ b/msc_transpiler/commands/movement_cmds.py @@ -0,0 +1,92 @@ +"""Movement commands: setorigin, setvelocity, addvelocity, etc.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class SetOriginTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + origin = ctx.translate_expr(cmd.args[1]) + w.line(f"SetEntityOrigin({target}, {origin});") + elif cmd.args: + w.line(f"SetOrigin({ctx.translate_expr(cmd.args[0])});") + return True + + +class AddOriginTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + offset = ctx.translate_expr(cmd.args[1]) + w.line(f"TeleportEntity({target}, GetEntityOrigin({target}) + {offset});") + elif cmd.args: + w.line(f"SetOrigin(GetOrigin() + {ctx.translate_expr(cmd.args[0])});") + return True + + +class SetVelocityTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + vel = ctx.translate_expr(cmd.args[1]) + w.line(f"SetVelocity({target}, {vel});") + elif cmd.args: + w.line(f"SetVelocity(GetOwner(), {ctx.translate_expr(cmd.args[0])});") + return True + + +class AddVelocityTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + vel = ctx.translate_expr(cmd.args[1]) + w.line(f"AddVelocity({target}, {vel});") + elif cmd.args: + w.line(f"AddVelocity(GetOwner(), {ctx.translate_expr(cmd.args[0])});") + return True + + +class DropToFloorTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + w.line("DropToFloor();") + return True + + +class NpcMoveTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"NpcMove({args});") + return True + + +class SetFollowTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetFollow({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetAngleTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetAngles({ctx.translate_expr(cmd.args[0])});") + return True + + +def register_commands(): + register("setorigin", SetOriginTranslator()) + register("addorigin", AddOriginTranslator()) + register("setvelocity", SetVelocityTranslator()) + register("addvelocity", AddVelocityTranslator()) + register("drop_to_floor", DropToFloorTranslator()) + register("npcmove", NpcMoveTranslator()) + register("setfollow", SetFollowTranslator()) + register("setangle", SetAngleTranslator()) + register("setgaitspeed", CommandTranslator()) + register("tospawn", CommandTranslator()) + register("torandomspawn", CommandTranslator()) + register("teleportdest", CommandTranslator()) + register("movetype", CommandTranslator()) diff --git a/msc_transpiler/commands/player_cmds.py b/msc_transpiler/commands/player_cmds.py new file mode 100644 index 00000000..49c7ff00 --- /dev/null +++ b/msc_transpiler/commands/player_cmds.py @@ -0,0 +1,452 @@ +"""Player-specific commands: giveitem, offer, menu, store, etc.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class SetMovedestTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + target = ctx.translate_expr(cmd.args[0]) + w.line(f"SetMoveDest({target});") + return True + + +class MenuItemRegisterTranslator(CommandTranslator): + """menuitem.register EVENT_NAME DISPLAY_TEXT.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + event = ctx.translate_expr(cmd.args[0]) + text = " ".join(ctx.expr_raw(a) for a in cmd.args[1:]) + w.line(f'RegisterMenuItem({event}, "{text}");') + elif cmd.args: + w.line(f"RegisterMenuItem({ctx.translate_expr(cmd.args[0])});") + return True + + +class MenuItemRemoveTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"RemoveMenuItem({ctx.translate_expr(cmd.args[0])});") + else: + w.line("RemoveAllMenuItems();") + return True + + +class MenuOpenTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"OpenMenu({ctx.translate_expr(cmd.args[0])});") + else: + w.line("OpenMenu();") + return True + + +class MenuAutoOpenTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetMenuAutoOpen({ctx.translate_expr(cmd.args[0])});") + return True + + +class AddStoreItemTranslator(CommandTranslator): + """addstoreitem ITEM_SCRIPT [PRICE] [FLAGS].""" + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"AddStoreItem({args});") + return True + + +class CatchSpeechTranslator(CommandTranslator): + """catchspeech EVENT KEYWORD.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + event = ctx.translate_expr(cmd.args[0]) + keyword = ctx.translate_expr(cmd.args[1]) + w.line(f"CatchSpeech({event}, {keyword});") + return True + + +class SayTranslator(CommandTranslator): + """say TEXT — NPC speech.""" + def translate(self, cmd, ctx, w): + if cmd.args: + text = " ".join(ctx.expr_raw(a) for a in cmd.args) + w.line(f'Say("{text}");') + return True + + +class LookTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"LookAt({ctx.translate_expr(cmd.args[0])});") + else: + w.line("LookAt(GetOwner());") + return True + + +class SeeTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"CanSee({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetHudSpriteTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"SetHUDSprite({args});") + return True + + +class ValueTranslator(CommandTranslator): + """value AMOUNT — set item value.""" + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetValue({ctx.translate_expr(cmd.args[0])});") + return True + + +class SizeTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetSize({ctx.translate_expr(cmd.args[0])});") + return True + + +class PlayViewAnimTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + anim_type = ctx.expr_raw(cmd.args[0]) + anim_name = ctx.translate_expr(cmd.args[1]) + w.line(f'PlayViewAnim("{anim_type}", {anim_name});') + elif cmd.args: + w.line(f"PlayViewAnim({ctx.translate_expr(cmd.args[0])});") + return True + + +class TossProjectileTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"TossProjectile({args});") + return True + + +class PlayOwnerAnimTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + anim_type = ctx.expr_raw(cmd.args[0]) + anim_name = ctx.translate_expr(cmd.args[1]) + w.line(f'PlayOwnerAnim("{anim_type}", {anim_name});') + elif cmd.args: + w.line(f"PlayOwnerAnim({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetDmgTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetDamage({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetHandTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetHand({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetViewModelTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetViewModel({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetWorldModelTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetWorldModel({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetAnimMoveSpeedTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetAnimMoveSpeed({ctx.translate_expr(cmd.args[0])});") + return True + + +class RecvOfferTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"ReceiveOffer({ctx.translate_expr(cmd.args[0])});") + return True + + +class RegisterAttackTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"RegisterAttack({args});") + return True + + +class SetActionAnimTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetActionAnim({ctx.translate_expr(cmd.args[0])});") + return True + + +class WearableTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetWearable({ctx.translate_expr(cmd.args[0])});") + return True + + +class GroupableTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetGroupable({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetMonsterClipTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetMonsterClip({ctx.translate_expr(cmd.args[0])});") + return True + + +class FovTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetFOV({ctx.translate_expr(cmd.args[0])});") + return True + + +class GiveItemTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + target = ctx.translate_expr(cmd.args[0]) + item = ctx.translate_expr(cmd.args[1]) + w.line(f"GiveItem({target}, {item});") + elif cmd.args: + w.line(f"GiveItem(GetOwner(), {ctx.translate_expr(cmd.args[0])});") + return True + + +class SetAnimExtTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetAnimExt({ctx.translate_expr(cmd.args[0])});") + return True + + +class SetAnimLegsTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetAnimLegs(GetOwner(), {ctx.translate_expr(cmd.args[0])});") + return True + + +class GaitFramerateTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetGaitFrameRate(GetOwner(), {ctx.translate_expr(cmd.args[0])});") + return True + + +class ReturnDataTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"ReturnData({args});") + return True + + +class RegisterDrinkTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"RegisterDrink({args});") + return True + + +class StoreEntityTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"StoreEntity({ctx.translate_expr(cmd.args[0])});") + return True + + +class ClearFxTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + w.line("ClearFX();") + return True + + +class CancelAttackTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + w.line("CancelAttack();") + return True + + +class ExpireTimeTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetExpireTime({ctx.translate_expr(cmd.args[0])});") + return True + + +class UseableTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetUseable({ctx.translate_expr(cmd.args[0])});") + return True + + +class CallOwnerEventTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + event = ctx.expr_raw(cmd.args[0]) + params = [ctx.translate_expr(a) for a in cmd.args[1:]] + if params: + w.line(f'CallOwnerEvent("{event}", {", ".join(params)});') + else: + w.line(f'CallOwnerEvent("{event}");') + return True + + +class SetPModelTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetPlayerModel({ctx.translate_expr(cmd.args[0])});") + return True + + +class FloatTranslator(CommandTranslator): + """float VAR — convert var to float.""" + def translate(self, cmd, ctx, w): + if cmd.args: + var = ctx.expr_raw(cmd.args[0]) + w.line(f"{var} = float({var});") + return True + + +class SetTurnRateTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetTurnRate({ctx.translate_expr(cmd.args[0])});") + return True + + +class RegisterProjectileTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"RegisterProjectile({args});") + return True + + +class ExpAdjTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"AdjustExp({ctx.translate_expr(cmd.args[0])});") + return True + + +class RemoveItemTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"RemoveItem({ctx.translate_expr(cmd.args[0])});") + return True + + +class NpcStoreTranslator(CommandTranslator): + def __init__(self, action: str): + self.action = action + + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"NpcStore{self.action}({args});") + return True + + +class StorageTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"Storage({args});") + return True + + +class QualityTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetQuality({ctx.translate_expr(cmd.args[0])});") + return True + + +class VarTranslator(CommandTranslator): + """var NAME VALUE — alias for setvar.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + name = ctx.expr_raw(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + w.line(f"{name} = {val};") + return True + + +def register_commands(): + register("setmovedest", SetMovedestTranslator()) + register("menuitem.register", MenuItemRegisterTranslator()) + register("menuitem.remove", MenuItemRemoveTranslator()) + register("menu.open", MenuOpenTranslator()) + register("menu.autoopen", MenuAutoOpenTranslator()) + register("addstoreitem", AddStoreItemTranslator()) + register("catchspeech", CatchSpeechTranslator()) + register("say", SayTranslator()) + register("look", LookTranslator()) + register("see", SeeTranslator()) + register("sethudsprite", SetHudSpriteTranslator()) + register("value", ValueTranslator()) + register("size", SizeTranslator()) + register("playviewanim", PlayViewAnimTranslator()) + register("tossprojectile", TossProjectileTranslator()) + register("playowneranim", PlayOwnerAnimTranslator()) + register("setdmg", SetDmgTranslator()) + register("sethand", SetHandTranslator()) + register("setviewmodel", SetViewModelTranslator()) + register("setworldmodel", SetWorldModelTranslator()) + register("setanim.movespeed", SetAnimMoveSpeedTranslator()) + register("recvoffer", RecvOfferTranslator()) + register("registerattack", RegisterAttackTranslator()) + register("setactionanim", SetActionAnimTranslator()) + register("wearable", WearableTranslator()) + register("groupable", GroupableTranslator()) + register("setmonsterclip", SetMonsterClipTranslator()) + register("fov", FovTranslator()) + register("giveitem", GiveItemTranslator()) + register("setanimext", SetAnimExtTranslator()) + register("setanimlegs", SetAnimLegsTranslator()) + register("gaitframerate", GaitFramerateTranslator()) + register("returndata", ReturnDataTranslator()) + register("registerdrink", RegisterDrinkTranslator()) + register("storeentity", StoreEntityTranslator()) + register("clearfx", ClearFxTranslator()) + register("cancelattack", CancelAttackTranslator()) + register("expiretime", ExpireTimeTranslator()) + register("useable", UseableTranslator()) + register("callownerevent", CallOwnerEventTranslator()) + register("setpmodel", SetPModelTranslator()) + register("float", FloatTranslator()) + register("setturnrate", SetTurnRateTranslator()) + register("registerprojectile", RegisterProjectileTranslator()) + register("expadj", ExpAdjTranslator()) + register("removeitem", RemoveItemTranslator()) + register("npcstore.create", NpcStoreTranslator("Create")) + register("npcstore.offer", NpcStoreTranslator("Offer")) + register("npcstore.remove", NpcStoreTranslator("Remove")) + register("storage", StorageTranslator()) + register("quality", QualityTranslator()) + register("var", VarTranslator()) diff --git a/msc_transpiler/commands/property_cmds.py b/msc_transpiler/commands/property_cmds.py new file mode 100644 index 00000000..30b0c15b --- /dev/null +++ b/msc_transpiler/commands/property_cmds.py @@ -0,0 +1,156 @@ +"""Property-setting commands: hp, gold, name, race, model, etc.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class HpTranslator(CommandTranslator): + """hp VALUE or hp VALUE/VALUE.""" + def translate(self, cmd, ctx, w): + if not cmd.args: + return False + val = ctx.expr_raw(cmd.args[0]) + # Handle hp literal like "50/50" + if "/" in val and not val.startswith("$") and not val.startswith('"'): + parts = val.split("/") + w.line(f"SetHealth({parts[0]});") + w.line(f"SetMaxHealth({parts[1]});") + else: + expr = ctx.translate_expr(cmd.args[0]) + w.line(f"SetHealth({expr});") + return True + + +class NameTranslator(CommandTranslator): + """name VALUE [VALUE...] — set entity name, may be multi-word.""" + def translate(self, cmd, ctx, w): + if not cmd.args: + return False + # Join all args as the name + parts = [ctx.translate_expr(a) for a in cmd.args] + if len(parts) == 1: + w.line(f'SetName({parts[0]});') + else: + # Multi-word name — join with spaces + name_parts = [ctx.expr_raw(a) for a in cmd.args] + w.line(f'SetName("{" ".join(name_parts)}");') + return True + + +class RaceTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if not cmd.args: + return False + val = ctx.translate_expr(cmd.args[0]) + w.line(f'SetRace({val});') + return True + + +class SetModelTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if not cmd.args: + return False + val = ctx.translate_expr(cmd.args[0]) + w.line(f'SetModel({val});') + return True + + +class SetModelBodyTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) < 2: + return False + group = ctx.translate_expr(cmd.args[0]) + body = ctx.translate_expr(cmd.args[1]) + w.line(f'SetModelBody({group}, {body});') + return True + + +class DescTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if not cmd.args: + return False + parts = [ctx.expr_raw(a) for a in cmd.args] + w.line(f'SetDescription("{" ".join(parts)}");') + return True + + +class SetSkinTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if not cmd.args: + return False + val = ctx.translate_expr(cmd.args[0]) + w.line(f"SetEntitySkin(GetOwner(), {val});") + return True + + +class SetModelSkinTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if not cmd.args: + return False + val = ctx.translate_expr(cmd.args[0]) + w.line(f"SetEntityModelSkin(GetOwner(), {val});") + return True + + +class BoolPropertyTranslator(CommandTranslator): + """Translates boolean property commands like invincible, invisible, etc.""" + def __init__(self, func_name: str): + self.func_name = func_name + + def translate(self, cmd, ctx, w): + if cmd.args: + val = ctx.expr_raw(cmd.args[0]) + if val in ("1", "true"): + w.line(f'{self.func_name}(true);') + elif val in ("0", "false"): + w.line(f'{self.func_name}(false);') + else: + w.line(f'{self.func_name}({ctx.translate_expr(cmd.args[0])});') + else: + w.line(f'{self.func_name}(true);') + return True + + +class NumericPropertyTranslator(CommandTranslator): + """Translates numeric property commands like width, height, gravity.""" + def __init__(self, func_name: str): + self.func_name = func_name + + def translate(self, cmd, ctx, w): + if not cmd.args: + return False + val = ctx.translate_expr(cmd.args[0]) + w.line(f'{self.func_name}({val});') + return True + + +def register_commands(): + register("hp", HpTranslator()) + register("gold", NumericPropertyTranslator("SetGold")) + register("name", NameTranslator()) + register("name_prefix", NameTranslator()) # TODO: proper prefix handling + register("name_unique", NameTranslator()) + register("race", RaceTranslator()) + register("setmodel", SetModelTranslator()) + register("setmodelbody", SetModelBodyTranslator()) + register("setskin", SetSkinTranslator()) + register("setmodelskin", SetModelSkinTranslator()) + register("desc", DescTranslator()) + register("width", NumericPropertyTranslator("SetWidth")) + register("height", NumericPropertyTranslator("SetHeight")) + register("gravity", NumericPropertyTranslator("SetGravity")) + register("weight", NumericPropertyTranslator("SetWeight")) + register("volume", NumericPropertyTranslator("SetVolume")) + register("movespeed", NumericPropertyTranslator("SetMoveSpeed")) + register("stepsize", NumericPropertyTranslator("SetStepSize")) + register("saytextrange", NumericPropertyTranslator("SetSayTextRange")) + register("hearingsensitivity", NumericPropertyTranslator("SetHearingSensitivity")) + + # Boolean properties + register("roam", BoolPropertyTranslator("SetRoam")) + register("fly", BoolPropertyTranslator("SetFly")) + register("invincible", BoolPropertyTranslator("SetInvincible")) + register("invisible", BoolPropertyTranslator("SetInvisible")) + register("blind", BoolPropertyTranslator("SetBlind")) + register("nopush", BoolPropertyTranslator("SetNoPush")) diff --git a/msc_transpiler/commands/registry.py b/msc_transpiler/commands/registry.py new file mode 100644 index 00000000..44bd67cf --- /dev/null +++ b/msc_transpiler/commands/registry.py @@ -0,0 +1,202 @@ +"""Central command registry mapping MSCScript commands to translators.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ..ast_nodes import Command, Expression + from ..output.code_writer import CodeWriter + from ..pipeline.codegen import CodeGenContext + + +class CommandTranslator: + """Base class for command translators. + + Default implementation emits a TODO comment. Subclasses override for real translation. + """ + + def translate(self, cmd: "Command", ctx: "CodeGenContext", w: "CodeWriter") -> bool: + """Translate command, writing to CodeWriter. Return True if handled.""" + args = " ".join(ctx.expr_raw(a) for a in cmd.args) if cmd.args else "" + w.comment(f"TODO: {cmd.name} {args}".strip()) + return True + + +class SimplePropertyTranslator(CommandTranslator): + """Translates a simple property-setting command like 'hp 50'.""" + + def __init__(self, as_func: str, arg_count: int = 1): + self.as_func = as_func + self.arg_count = arg_count + + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args[:self.arg_count]) + w.line(f"{self.as_func}({args});") + return True + + +class SimpleMethodTranslator(CommandTranslator): + """Translates to a method call on an entity.""" + + def __init__(self, target: str, method: str, arg_count: int = -1): + self.target = target + self.method = method + self.arg_count = arg_count # -1 = all args + + def translate(self, cmd, ctx, w): + args_list = cmd.args if self.arg_count == -1 else cmd.args[:self.arg_count] + args = ", ".join(ctx.translate_expr(a) for a in args_list) + if self.target: + w.line(f"{self.target}.{self.method}({args});") + else: + w.line(f"{self.method}({args});") + return True + + +class SetVarTranslator(CommandTranslator): + """Handles setvard/setvar/setvarg/local/const.""" + def __init__(self, var_type: str): + self.var_type = var_type # "setvard", "setvar", "setvarg", "local", "const" + + def translate(self, cmd, ctx, w): + if len(cmd.args) < 1: + w.comment(f"WARN: {self.var_type} with no args") + return True + + var_name = ctx.expr_raw(cmd.args[0]) + + if len(cmd.args) >= 2: + value = ctx.translate_expr(cmd.args[1]) + else: + value = '""' + + if self.var_type == "const": + # In constructor context (no named event), consts promoted to class members + # — emit as plain assignment rather than re-declaring with const + if not ctx.current_event and var_name in ctx.member_vars: + w.line(f"{var_name} = {value};") + else: + type_str = _infer_type_from_value(value) + w.line(f"const {type_str} {var_name} = {value};") + elif self.var_type == "local": + type_str = _infer_type_from_value(value) + ctx.register_local(var_name, type_str) + w.line(f"{type_str} {var_name} = {value};") + elif self.var_type == "setvarg": + w.line(f'SetGlobalVar("{var_name}", {value});') + elif self.var_type == "setvard": + ctx.register_member(var_name) + w.line(f"{var_name} = {value};") + else: # setvar + ctx.register_member(var_name) + w.line(f"{var_name} = {value};") + + return True + + +def _infer_type_from_value(value: str) -> str: + """Infer AngelScript type from a literal value string.""" + stripped = value.strip() + + # Check for Vector3 + if stripped.startswith("Vector3("): + return "Vector3" + + # Translated forms from DollarFunc translation (e.g. $rand → RandomInt, $randf → Random) + if stripped.startswith("RandomInt("): + return "int" + if stripped.startswith("Random("): + return "float" + if stripped.startswith("int("): + return "int" + if stripped.startswith("float("): + return "float" + if stripped.startswith("Distance(") or stripped.startswith("Distance2D("): + return "float" + if stripped.startswith("GetGameTime("): + return "float" + + # Check for quoted string + if stripped.startswith('"') or stripped.startswith("'"): + return "string" + + # Check for float (has decimal point) + if "." in stripped: + try: + float(stripped) + return "float" + except ValueError: + pass + + # Check for percentage (convert to float) + if stripped.endswith("%"): + return "float" + + # Check for int + try: + int(stripped) + return "int" + except ValueError: + pass + + # Default to auto/string + return "string" + + +# ── Registry ───────────────────────────────────────────────── + +_REGISTRY: dict[str, CommandTranslator] = {} + +# Common legacy typos and alternate spellings. +_COMMAND_ALIASES: dict[str, str] = { + "subract": "subtract", + "infomessage": "infomsg", + "clienteffect": "cleffect", + "usetrig": "usetrigger", + "cosnt": "const", + "setvarad": "setvard", + "removesetvard": "removesetvar", + "playrandomsoundcl": "playrandomsound", + "hearingsensetivity": "hearingsensitivity", + "hearingsensitivty": "hearingsensitivity", +} + + +def normalize_command_name(name: str) -> str: + lower = name.lower() + return _COMMAND_ALIASES.get(lower, lower) + + +def register(name: str, translator: CommandTranslator): + """Register a command translator.""" + _REGISTRY[normalize_command_name(name)] = translator + + +def get_translator(name: str) -> CommandTranslator | None: + """Look up translator for a command name.""" + return _REGISTRY.get(normalize_command_name(name)) + + +def register_all(): + """Register all built-in command translators.""" + from . import property_cmds, combat_cmds, movement_cmds, sound_cmds + from . import creation_cmds, communication_cmds, variable_cmds, math_cmds + from . import event_cmds, animation_cmds, misc_cmds + from . import string_cmds, array_cmds, hashmap_cmds, player_cmds + + property_cmds.register_commands() + combat_cmds.register_commands() + movement_cmds.register_commands() + sound_cmds.register_commands() + creation_cmds.register_commands() + communication_cmds.register_commands() + variable_cmds.register_commands() + math_cmds.register_commands() + event_cmds.register_commands() + animation_cmds.register_commands() + misc_cmds.register_commands() + string_cmds.register_commands() + array_cmds.register_commands() + hashmap_cmds.register_commands() + player_cmds.register_commands() diff --git a/msc_transpiler/commands/sound_cmds.py b/msc_transpiler/commands/sound_cmds.py new file mode 100644 index 00000000..4414807c --- /dev/null +++ b/msc_transpiler/commands/sound_cmds.py @@ -0,0 +1,89 @@ +"""Sound commands: playsound, playrandomsound, svplaysound, etc.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class PlaySoundTranslator(CommandTranslator): + """playsound CHANNEL VOLUME SOUND or playsound CHANNEL SOUND.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 3: + chan = ctx.translate_expr(cmd.args[0]) + vol = ctx.translate_expr(cmd.args[1]) + sound = ctx.translate_expr(cmd.args[2]) + w.line(f"EmitSound(GetOwner(), {chan}, {sound}, {vol});") + elif len(cmd.args) >= 2: + chan = ctx.translate_expr(cmd.args[0]) + sound = ctx.translate_expr(cmd.args[1]) + w.line(f"EmitSound(GetOwner(), {sound});") + return True + + +class PlayRandomSoundTranslator(CommandTranslator): + """playrandomsound CHANNEL VOLUME SOUND1 SOUND2 ... or playrandomsound CHANNEL SOUND1 ...""" + def translate(self, cmd, ctx, w): + if len(cmd.args) < 2: + return True + + # First arg is channel, second could be volume (number) or first sound + chan = ctx.translate_expr(cmd.args[0]) + + # Try to detect if second arg is volume (numeric) or sound file + raw_second = ctx.expr_raw(cmd.args[1]) + has_volume = False + try: + float(raw_second) + has_volume = True + except ValueError: + pass + + if has_volume and len(cmd.args) >= 3: + vol = ctx.translate_expr(cmd.args[1]) + sounds = [ctx.translate_expr(a) for a in cmd.args[2:]] + else: + vol = "10" + sounds = [ctx.translate_expr(a) for a in cmd.args[1:]] + + # Filter out 'none' sounds + sound_list = ", ".join(s for s in sounds if s.strip('"') != "none") + w.line(f"// PlayRandomSound from: {sound_list}") + w.line(f"array sounds = {{{sound_list}}};") + w.line(f"EmitSound(GetOwner(), {chan}, sounds[RandomInt(0, sounds.length() - 1)], {vol});") + return True + + +class SvPlaySoundTranslator(CommandTranslator): + """svplaysound — server-verified playsound with more control.""" + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"// svplaysound: {cmd.raw_line.strip()}") + w.line(f"EmitSound({args});") + return True + + +class Sound3DTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + args = ", ".join(ctx.translate_expr(a) for a in cmd.args) + w.line(f"EmitSound3D({args});") + return True + + +class SoundVolumeTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + w.line(f"SetSoundVolume({ctx.translate_expr(cmd.args[0])});") + return True + + +def register_commands(): + register("playsound", PlaySoundTranslator()) + register("playrandomsound", PlayRandomSoundTranslator()) + register("svplaysound", SvPlaySoundTranslator()) + register("svplayrandomsound", PlayRandomSoundTranslator()) + register("sound.play3d", Sound3DTranslator()) + register("svsound.play3d", Sound3DTranslator()) + register("sound.pm_play", Sound3DTranslator()) + register("sound.setvolume", SoundVolumeTranslator()) + register("emitsound", SvPlaySoundTranslator()) + register("playmp3", CommandTranslator()) diff --git a/msc_transpiler/commands/string_cmds.py b/msc_transpiler/commands/string_cmds.py new file mode 100644 index 00000000..117f1c0c --- /dev/null +++ b/msc_transpiler/commands/string_cmds.py @@ -0,0 +1,72 @@ +"""String commands: stradd, strconc, token operations.""" + +from __future__ import annotations + +from .registry import register, CommandTranslator + + +class StrAddTranslator(CommandTranslator): + """stradd VAR VALUE — append to string.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + var = ctx.expr_raw(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + w.line(f"{var} += {val};") + return True + + +class StrConcTranslator(CommandTranslator): + """strconc VAR VAL1 VAL2 ... — concatenate multiple values.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + var = ctx.expr_raw(cmd.args[0]) + parts = [ctx.translate_expr(a) for a in cmd.args[1:]] + w.line(f'{var} = {" + ".join(parts)};') + return True + + +class TokenAddTranslator(CommandTranslator): + """token.add VAR VALUE — add token to delimited string.""" + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + var = ctx.expr_raw(cmd.args[0]) + val = ctx.translate_expr(cmd.args[1]) + w.line(f'if ({var}.length() > 0) {var} += ";";') + w.line(f"{var} += {val};") + return True + + +class TokenDelTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 2: + var = ctx.expr_raw(cmd.args[0]) + idx = ctx.translate_expr(cmd.args[1]) + w.line(f'RemoveToken({var}, {idx}, ";");') + return True + + +class TokenSetTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if len(cmd.args) >= 3: + var = ctx.expr_raw(cmd.args[0]) + idx = ctx.translate_expr(cmd.args[1]) + val = ctx.translate_expr(cmd.args[2]) + w.line(f'SetToken({var}, {idx}, {val}, ";");') + return True + + +class TokenScrambleTranslator(CommandTranslator): + def translate(self, cmd, ctx, w): + if cmd.args: + var = ctx.expr_raw(cmd.args[0]) + w.line(f'ScrambleTokens({var}, ";");') + return True + + +def register_commands(): + register("stradd", StrAddTranslator()) + register("strconc", StrConcTranslator()) + register("token.add", TokenAddTranslator()) + register("token.del", TokenDelTranslator()) + register("token.set", TokenSetTranslator()) + register("token.scramble", TokenScrambleTranslator()) diff --git a/msc_transpiler/commands/variable_cmds.py b/msc_transpiler/commands/variable_cmds.py new file mode 100644 index 00000000..f504baf4 --- /dev/null +++ b/msc_transpiler/commands/variable_cmds.py @@ -0,0 +1,11 @@ +"""Variable commands: setvar, setvard, setvarg, local, const.""" + +from .registry import register, SetVarTranslator + + +def register_commands(): + register("setvar", SetVarTranslator("setvar")) + register("setvard", SetVarTranslator("setvard")) + register("setvarg", SetVarTranslator("setvarg")) + register("local", SetVarTranslator("local")) + register("const", SetVarTranslator("const")) diff --git a/msc_transpiler/config.py b/msc_transpiler/config.py new file mode 100644 index 00000000..a7b377a7 --- /dev/null +++ b/msc_transpiler/config.py @@ -0,0 +1,65 @@ +"""CLI configuration and argument parsing.""" + +import argparse +from dataclasses import dataclass, field +from pathlib import Path +from typing import Optional + + +@dataclass +class TranspilerConfig: + input_dir: Path = field(default_factory=lambda: Path(".")) + output_dir: Path = field(default_factory=lambda: Path("./angelscript")) + verbose: bool = False + dry_run: bool = False + filter_pattern: Optional[str] = None + single_file: Optional[Path] = None + log_file: Path = field(default_factory=lambda: Path("transpiler_errors.log")) + + +def parse_args(argv: list[str] | None = None) -> TranspilerConfig: + parser = argparse.ArgumentParser( + prog="msc_transpiler", + description="Transpile MSCScript .script files to AngelScript .as files", + ) + parser.add_argument( + "input_dir", + nargs="?", + default=".", + help="Input directory containing .script files", + ) + parser.add_argument( + "output_dir", + nargs="?", + default=None, + help="Output directory for .as files (default: /angelscript)", + ) + parser.add_argument("-v", "--verbose", action="store_true", help="Verbose logging") + parser.add_argument( + "--dry-run", action="store_true", help="Analyze without writing files" + ) + parser.add_argument( + "--filter", dest="filter_pattern", help="Only process files matching pattern" + ) + parser.add_argument( + "-f", "--file", dest="single_file", help="Transpile a single file" + ) + parser.add_argument( + "--log-file", + default="transpiler_errors.log", + help="Error log file path", + ) + + args = parser.parse_args(argv) + input_dir = Path(args.input_dir) + output_dir = Path(args.output_dir) if args.output_dir else input_dir / "angelscript" + + return TranspilerConfig( + input_dir=input_dir, + output_dir=output_dir, + verbose=args.verbose, + dry_run=args.dry_run, + filter_pattern=args.filter_pattern, + single_file=Path(args.single_file) if args.single_file else None, + log_file=Path(args.log_file), + ) diff --git a/msc_transpiler/errors.py b/msc_transpiler/errors.py new file mode 100644 index 00000000..03f833b9 --- /dev/null +++ b/msc_transpiler/errors.py @@ -0,0 +1,60 @@ +"""Error and warning collection for the transpiler pipeline.""" + +from dataclasses import dataclass, field +from enum import Enum +from typing import Optional + + +class Severity(Enum): + INFO = "info" + WARNING = "warning" + ERROR = "error" + + +@dataclass +class TranspilerMessage: + severity: Severity + message: str + file: str = "" + line: int = 0 + column: int = 0 + + def __str__(self): + loc = f"{self.file}:{self.line}" if self.file else f"line {self.line}" + return f"[{self.severity.value.upper()}] {loc}: {self.message}" + + +class ErrorCollector: + """Collects errors and warnings across the transpiler pipeline.""" + + def __init__(self): + self.messages: list[TranspilerMessage] = [] + + def error(self, msg: str, file: str = "", line: int = 0): + self.messages.append(TranspilerMessage(Severity.ERROR, msg, file, line)) + + def warning(self, msg: str, file: str = "", line: int = 0): + self.messages.append(TranspilerMessage(Severity.WARNING, msg, file, line)) + + def info(self, msg: str, file: str = "", line: int = 0): + self.messages.append(TranspilerMessage(Severity.INFO, msg, file, line)) + + @property + def errors(self) -> list[TranspilerMessage]: + return [m for m in self.messages if m.severity == Severity.ERROR] + + @property + def warnings(self) -> list[TranspilerMessage]: + return [m for m in self.messages if m.severity == Severity.WARNING] + + @property + def has_errors(self) -> bool: + return any(m.severity == Severity.ERROR for m in self.messages) + + def summary(self) -> str: + errs = len(self.errors) + warns = len(self.warnings) + return f"{errs} error(s), {warns} warning(s)" + + def dump(self) -> str: + return "\n".join(str(m) for m in self.messages) diff --git a/msc_transpiler/expressions/__init__.py b/msc_transpiler/expressions/__init__.py new file mode 100644 index 00000000..e04fe40e --- /dev/null +++ b/msc_transpiler/expressions/__init__.py @@ -0,0 +1 @@ +"""Expression translators for $functions and conditions.""" diff --git a/msc_transpiler/expressions/conditions.py b/msc_transpiler/expressions/conditions.py new file mode 100644 index 00000000..1d545663 --- /dev/null +++ b/msc_transpiler/expressions/conditions.py @@ -0,0 +1,57 @@ +"""Condition operator translation.""" + +from __future__ import annotations + + +# Map MSCScript condition operators to AngelScript +OPERATOR_MAP = { + "equals": "==", + "==": "==", + "isnot": "!=", + "!=": "!=", + "<": "<", + ">": ">", + "<=": "<=", + ">=": ">=", + "less": "<", + "greater": ">", +} + + +def translate_condition_op(op: str, left: str, right: str, negated: bool = False) -> str: + """Translate a condition to AngelScript expression string.""" + op_lower = op.lower() + + # Truthy check: if VAR or if !VAR + if op_lower == "truthy": + if negated: + return f"!({left})" + # Check for uninitialized variable pattern: VAR equals 'VAR' + return f"({left})" + + # Special operators + if op_lower == "contains": + expr = f'({left}).findFirst({right}) >= 0' + return f"!({expr})" if negated else expr + + if op_lower == "startswith": + expr = f'({left}).findFirst({right}) == 0' + return f"!({expr})" if negated else expr + + if op_lower == "endswith": + expr = f'EndsWith({left}, {right})' + return f"!({expr})" if negated else expr + + # Check for uninitialized variable pattern: VAR equals 'VAR' + # In MSCScript, if a variable hasn't been set, its value is the variable name itself + if op_lower in ("equals", "==") and right.startswith("'") and right.endswith("'"): + var_name = right[1:-1] + if var_name == left: + # This means "if variable is uninitialized" + expr = f'!HasVar("{left}")' + return f"!({expr})" if negated else expr + + # Standard operators + as_op = OPERATOR_MAP.get(op_lower, op) + expr = f"{left} {as_op} {right}" + return f"!({expr})" if negated else expr diff --git a/msc_transpiler/expressions/dollar_funcs.py b/msc_transpiler/expressions/dollar_funcs.py new file mode 100644 index 00000000..9e5910c8 --- /dev/null +++ b/msc_transpiler/expressions/dollar_funcs.py @@ -0,0 +1,529 @@ +"""$function translators: $rand, $randf, $vec, $get, $dist, etc.""" + +from __future__ import annotations + +from typing import Callable + + +# Map of $function name → translator function +# Each translator takes (func_name, args_list_as_strings) → AngelScript expression string +_DOLLAR_FUNC_MAP: dict[str, Callable[[str, list[str]], str]] = {} + + +def register_dollar_func(name: str, translator: Callable[[str, list[str]], str]): + _DOLLAR_FUNC_MAP[name.lower()] = translator + + +def translate_dollar_func(name: str, args: list[str]) -> str: + """Translate a $function call to AngelScript.""" + translator = _DOLLAR_FUNC_MAP.get(name.lower()) + if translator: + return translator(name, args) + # Unknown $function — emit as-is with comment + args_str = ", ".join(args) + return f"/* TODO: ${name} */ ${name}({args_str})" + + +# ── Registrations ──────────────────────────────────────────── + +def _rand(name, args): + if len(args) >= 2: + return f"RandomInt({args[0]}, {args[1]})" + return f"RandomInt(0, {args[0]})" if args else "RandomInt(0, 100)" + + +def _randf(name, args): + if len(args) >= 2: + return f"Random({args[0]}, {args[1]})" + return f"Random(0.0, {args[0]})" if args else "Random(0.0, 1.0)" + + +def _vec(name, args): + if len(args) >= 3: + return f"Vector3({args[0]}, {args[1]}, {args[2]})" + return "Vector3(0, 0, 0)" + + +def _dist(name, args): + if len(args) >= 2: + return f"Distance({args[0]}, {args[1]})" + return "Distance(Vector3(0,0,0), Vector3(0,0,0))" + + +def _dist2d(name, args): + if len(args) >= 2: + return f"Distance2D({args[0]}, {args[1]})" + return "0.0" + + +def _dir(name, args): + if len(args) >= 2: + return f"({args[1]} - {args[0]}).Normalize()" + return "Vector3(0, 0, 0)" + + +def _veclen(name, args): + if args: + return f"({args[0]}).Length()" + return "0.0" + + +def _veclen2d(name, args): + if args: + return f"({args[0]}).Length2D()" + return "0.0" + + +def _vec_x(name, args): + if args: + return f"({args[0]}).x" + return "0.0" + + +def _vec_y(name, args): + if args: + return f"({args[0]}).y" + return "0.0" + + +def _vec_z(name, args): + if args: + return f"({args[0]}).z" + return "0.0" + + +def _int_cast(name, args): + if args: + return f"int({args[0]})" + return "0" + + +def _float_cast(name, args): + if args: + return f"float({args[0]})" + return "0.0" + + +def _len(name, args): + if args: + return f"({args[0]}).length()" + return "0" + + +def _lcase(name, args): + if args: + return f"StringToLower({args[0]})" + return '""' + + +def _ucase(name, args): + if args: + return f"StringToUpper({args[0]})" + return '""' + + +def _mid(name, args): + if len(args) >= 3: + return f"({args[0]}).substr({args[1]}, {args[2]})" + if len(args) >= 2: + return f"({args[0]}).substr({args[1]})" + return '""' + + +def _left(name, args): + if len(args) >= 2: + return f"({args[0]}).substr(0, {args[1]})" + return '""' + + +def _right(name, args): + if len(args) >= 2: + return f"({args[0]}).substr(({args[0]}).length() - {args[1]})" + return '""' + + +def _search_string(name, args): + if len(args) >= 2: + return f"({args[0]}).findFirst({args[1]})" + return "-1" + + +def _subst(name, args): + if len(args) >= 3: + return f"StringReplace({args[0]}, {args[1]}, {args[2]})" + return '""' + + +def _cap_first(name, args): + if args: + return f"CapitalizeFirst({args[0]})" + return '""' + + +def _get_token(name, args): + if len(args) >= 2: + return f'GetToken({args[0]}, {args[1]}, ";")' + return '""' + + +def _get_token_amt(name, args): + if args: + return f'GetTokenCount({args[0]}, ";")' + return "0" + + +def _get_find_token(name, args): + if len(args) >= 2: + return f'FindToken({args[0]}, {args[1]}, ";")' + return "-1" + + +def _get_random_token(name, args): + if args: + return f'GetRandomToken({args[0]}, ";")' + return '""' + + +def _pass(name, args): + """$pass(value) → passthrough: returns the first argument as-is.""" + return args[0] if args else "" + + +def _func(name, args): + """$func(funcname, arg1, arg2, ...) ? funcname(arg1, arg2, ...)""" + if args: + # First arg is the target function name. It may arrive quoted when + # parsed as a lowercase identifier; strip only matching wrapper quotes. + target = args[0].strip() + if len(target) >= 2 and target[0] == target[-1] and target[0] in ('"', "'"): + target = target[1:-1] + return f"{target}({', '.join(args[1:])})" + return "" + +def _math(name, args): + if len(args) >= 3: + func = args[0].strip('"').lower() + a, b = args[1], args[2] + binary_map = { + "add": f"({a} + {b})", + "subtract": f"({a} - {b})", + "multiply": f"({a} * {b})", + "divide": f"({a} / {b})", + "modulo": f"({a} % {b})", + "mod": f"({a} % {b})", + "pow": f"pow({a}, {b})", + "max": f"max({a}, {b})", + "min": f"min({a}, {b})", + } + result = binary_map.get(func) + if result: + return result + # Unknown binary op — fall through to unary handling with first operand + if len(args) >= 2: + func = args[0].strip('"').lower() + val = args[1] + math_map = { + "sqrt": f"sqrt({val})", + "sin": f"sin({val})", + "cos": f"cos({val})", + "tan": f"tan({val})", + "abs": f"abs({val})", + "asin": f"asin({val})", + "acos": f"acos({val})", + "atan": f"atan({val})", + "ceil": f"ceil({val})", + "floor": f"floor({val})", + "round": f"round({val})", + "log": f"log({val})", + "exp": f"exp({val})", + } + return math_map.get(func, f"/* TODO: $math({func}) */ {val}") + return "0" + + +def _timestamp(name, args): + return "GetTimestamp()" + + +def _gametime(name, args): + return "GetGameTime()" + + +def _cansee(name, args): + if len(args) >= 2: + return f"CanSee({args[0]}, {args[1]})" + return "false" + + +def _get_by_name(name, args): + if args: + return f'FindEntityByName({args[0]})' + return "null" + + +def _item_exists(name, args): + if len(args) >= 2: + return f"ItemExists({args[0]}, {args[1]})" + return "false" + + +def _inrange(name, args): + if len(args) >= 3: + return f"InRange({args[0]}, {args[1]}, {args[2]})" + return "false" + + +def _within_cone2d(name, args): + if len(args) >= 3: + return f"WithinCone2D({args[0]}, {args[1]}, {args[2]})" + return "false" + + +def _get_quest_data(name, args): + if len(args) >= 2: + return f"GetPlayerQuestData({args[0]}, {args[1]})" + return '""' + + +def _map_exists(name, args): + if args: + return f"ValidateMapName({args[0]})" + return "false" + + +def _get_cvar(name, args): + if args: + return f"GetCvar({args[0]})" + return '""' + + +def _random_of_set(name, args): + if args: + items = ", ".join(args) + return f"RandomOfSet({{{items}}})" + return '""' + + +# ── $get() — the big one ──────────────────────────────────── + +# Property mappings for $get(entity, property) +_GET_PROPERTY_MAP = { + "origin": ("GetEntityOrigin({e})", "Vector3"), + "angles": ("GetEntityAngles({e})", "Vector3"), + "velocity": ("GetEntityVelocity({e})", "Vector3"), + "hp": ("GetEntityHealth({e})", "int"), + "maxhp": ("GetEntityMaxHealth({e})", "int"), + "mp": ("GetEntityMP({e})", "int"), + "name": ("GetEntityName({e})", "string"), + "displayname": ("GetEntityDisplayName({e})", "string"), + "isplayer": ("IsValidPlayer({e})", "bool"), + "isalive": ("IsEntityAlive({e})", "bool"), + "exists": ("({e} !is null)", "bool"), + "id": ("GetEntityIndex({e})", "int"), + "index": ("GetEntityIndex({e})", "int"), + "model": ("GetEntityModel({e})", "string"), + "speed": ("GetEntitySpeed({e})", "float"), + "height": ("GetEntityHeight({e})", "float"), + "width": ("GetEntityWidth({e})", "float"), + "onground": ("IsOnGround({e})", "bool"), + "inwater": ("IsInWater({e})", "bool"), + "race": ("GetEntityRace({e})", "string"), + "gold": ("GetEntityGold({e})", "int"), + "relationship": ("GetRelationship({e})", "string"), + "range": ("GetEntityRange({e})", "float"), + "dist": ("GetEntityDist({e})", "float"), + "steamid": ("GetPlayerAuthId({e})", "string"), + "ducking": ("IsDucking({e})", "bool"), + "canattack": ("CanAttack({e})", "bool"), + "jumping": ("IsJumping({e})", "bool"), + "gender": ("GetGender({e})", "int"), + "ip": ("GetPlayerClientAddress({e})", "string"), + "active_item": ("GetActiveItem({e})", "string"), + "stamina": ("GetStamina({e})", "float"), + "xp": ("GetXP({e})", "int"), + "spawner": ("GetSpawner({e})", "string"), + "roam": ("GetRoam({e})", "bool"), + "walkspeed": ("GetWalkSpeed({e})", "float"), + "runspeed": ("GetRunSpeed({e})", "float"), + "scriptname": ("GetScriptName({e})", "string"), + "skin": ("GetSkin({e})", "int"), +} + + +def _get(name, args): + """$get(entity, property) → appropriate getter call.""" + if len(args) < 2: + return "/* TODO: $get with insufficient args */ null" + + entity = args[0] + prop = args[1].strip('"').strip("'").lower() + + # Check for sub-properties like skill.swordsmanship + if prop.startswith("skill."): + skill_name = prop[6:] + return f'GetSkillLevel({entity}, "{skill_name}")' + if prop.startswith("stat."): + stat_name = prop[5:] + return f'GetStat({entity}, "{stat_name}")' + if prop.startswith("keydown"): + key = args[2] if len(args) > 2 else '""' + return f"IsKeyDown({entity}, {key})" + + mapping = _GET_PROPERTY_MAP.get(prop) + if mapping: + template, _ = mapping + return template.format(e=entity) + + # Unknown property + return f'GetEntityProperty({entity}, "{prop}")' + + +def _get_tsphere(name, args): + """$get_tsphere(origin, radius, ...) → entity search.""" + if len(args) >= 2: + return f"FindEntitiesInSphere({args[0]}, {args[1]})" + return "null" + + +def _get_traceline(name, args): + if len(args) >= 2: + return f"TraceLine({args[0]}, {args[1]})" + return "null" + + +def _currentmap(name, args): + return "GetMapName()" + + +# ── $get_array / $g_get_array — local & global array access ── + +def _get_array(name, args): + """$get_array(array_name, idx) → array_name[int(idx)]""" + if len(args) >= 2: + arr = args[0] + idx = args[1] + return f"{arr}[int({idx})]" + return '""' + + +def _get_arrayfind(name, args): + """$get_arrayfind(array_name, search, [start_idx]) → ArrayFind(array, search, start)""" + if len(args) >= 3: + return f"ArrayFind({args[0]}, {args[1]}, int({args[2]}))" + if len(args) >= 2: + return f"ArrayFind({args[0]}, {args[1]}, 0)" + return "-1" + + +def _get_array_amt(name, args): + """$get_array_amt(array_name) → int(array_name.length())""" + if args: + return f"int({args[0]}.length())" + return "0" + + +def _get_array_exists(name, args): + """$get_array_exists(array_name) → ArrayExists(array_name) + For local arrays this is always true if the variable is declared, + but we emit a function call for safety.""" + if args: + return f"({args[0]}.length() >= 0)" + return "false" + + +def _g_get_array(name, args): + """$g_get_array(array_name, idx) → GetGlobalArray("name", int(idx))""" + if len(args) >= 2: + arr_name = args[0] + idx = args[1] + return f"GetGlobalArray({arr_name}, int({idx}))" + return '""' + + +def _g_get_arrayfind(name, args): + """$g_get_arrayfind(array_name, search, [start_idx]) → FindInGlobalArray(name, search, start)""" + if len(args) >= 3: + return f"FindInGlobalArray({args[0]}, {args[1]}, int({args[2]}))" + if len(args) >= 2: + return f"FindInGlobalArray({args[0]}, {args[1]}, 0)" + return "-1" + + +def _g_get_array_amt(name, args): + """$g_get_array_amt(array_name) → GetGlobalArrayLength("name")""" + if args: + return f"GetGlobalArrayLength({args[0]})" + return "0" + + +def _g_get_array_exists(name, args): + """$g_get_array_exists(array_name) → GlobalArrayExists("name")""" + if args: + return f"GlobalArrayExists({args[0]})" + return "false" + + +def register_all(): + """Register all $function translators.""" + register_dollar_func("rand", _rand) + register_dollar_func("randf", _randf) + register_dollar_func("vec", _vec) + register_dollar_func("dist", _dist) + register_dollar_func("dist2D", _dist2d) + register_dollar_func("dir", _dir) + register_dollar_func("veclen", _veclen) + register_dollar_func("veclen2D", _veclen2d) + register_dollar_func("vec.x", _vec_x) + register_dollar_func("vec.y", _vec_y) + register_dollar_func("vec.z", _vec_z) + register_dollar_func("int", _int_cast) + register_dollar_func("float", _float_cast) + register_dollar_func("len", _len) + register_dollar_func("lcase", _lcase) + register_dollar_func("ucase", _ucase) + register_dollar_func("mid", _mid) + register_dollar_func("left", _left) + register_dollar_func("right", _right) + register_dollar_func("search_string", _search_string) + register_dollar_func("subst", _subst) + register_dollar_func("cap_first", _cap_first) + register_dollar_func("get_token", _get_token) + register_dollar_func("get_token_amt", _get_token_amt) + register_dollar_func("get_find_token", _get_find_token) + register_dollar_func("get_random_token", _get_random_token) + register_dollar_func("math", _math) + register_dollar_func("timestamp", _timestamp) + register_dollar_func("gametime", _gametime) + register_dollar_func("cansee", _cansee) + register_dollar_func("get_by_name", _get_by_name) + register_dollar_func("item_exists", _item_exists) + register_dollar_func("inrange", _inrange) + register_dollar_func("within_cone2D", _within_cone2d) + register_dollar_func("get_quest_data", _get_quest_data) + register_dollar_func("map_exists", _map_exists) + register_dollar_func("get_cvar", _get_cvar) + register_dollar_func("get", _get) + register_dollar_func("get_tsphere", _get_tsphere) + register_dollar_func("get_traceline", _get_traceline) + register_dollar_func("currentmap", _currentmap) + register_dollar_func("random_of_set", _random_of_set) + + # Local array access functions + register_dollar_func("get_array", _get_array) + register_dollar_func("get_arrayfind", _get_arrayfind) + register_dollar_func("get_array_amt", _get_array_amt) + register_dollar_func("get_array_exists", _get_array_exists) + + # Global array access functions + register_dollar_func("g_get_array", _g_get_array) + register_dollar_func("g_get_arrayfind", _g_get_arrayfind) + register_dollar_func("g_get_array_amt", _g_get_array_amt) + register_dollar_func("g_get_array_exists", _g_get_array_exists) + + # Passthrough / indirect call + register_dollar_func("pass", _pass) + register_dollar_func("func", _func) + + +# Auto-register on import +register_all() diff --git a/msc_transpiler/expressions/game_properties.py b/msc_transpiler/expressions/game_properties.py new file mode 100644 index 00000000..673762c8 --- /dev/null +++ b/msc_transpiler/expressions/game_properties.py @@ -0,0 +1,38 @@ +"""Game property expression translation (game.time, game.players, etc.).""" + +from __future__ import annotations + + +# Map game.* property references to AngelScript +GAME_PROPERTY_MAP = { + "game.time": "GetGameTime()", + "game.players": "GetPlayerCount()", + "game.map.name": "GetMapName()", + "game.maxplayers": "GetMaxClients()", + "game.serverside": "true", + "game.clientside": "false", + "game.sound.voice": "CHAN_VOICE", + "game.monster.hp": "GetMonsterHP()", + "game.monster.maxhp": "GetMonsterMaxHP()", + "game.script.iteration": "i", # Loop iteration variable +} + + +def translate_game_property(name: str) -> str | None: + """Translate a game.* property reference. Returns None if not a game property.""" + lower = name.lower() + result = GAME_PROPERTY_MAP.get(lower) + if result: + return result + + # game.cvar.* pattern + if lower.startswith("game.cvar."): + cvar_name = name[10:] + return f'GetCvar("{cvar_name}")' + + # game.monster.* pattern + if lower.startswith("game.monster."): + prop = name[13:] + return f'GetMonsterProperty("{prop}")' + + return None diff --git a/msc_transpiler/includes/__init__.py b/msc_transpiler/includes/__init__.py new file mode 100644 index 00000000..a0fc72f6 --- /dev/null +++ b/msc_transpiler/includes/__init__.py @@ -0,0 +1 @@ +"""Include resolution and dependency graph.""" diff --git a/msc_transpiler/linter.py b/msc_transpiler/linter.py new file mode 100644 index 00000000..f04a3948 --- /dev/null +++ b/msc_transpiler/linter.py @@ -0,0 +1,215 @@ +"""Wrapper for the as_linter.exe AngelScript compilation checker. + +Provides functions to compile AngelScript source strings or files through +the real AS engine with the game's type registrations, catching type errors +and bad signatures that the transpiler's text-level checks cannot see. +""" + +from __future__ import annotations + +import json +import os +import subprocess +import tempfile +from dataclasses import dataclass, field +from pathlib import Path +from typing import Optional + +# Default linter executable location (sibling to the transpiler package) +_DEFAULT_LINTER = Path(__file__).resolve().parent.parent / "as_linter" / "build" / "Release" / "as_linter.exe" + +# Environment variable override +_LINTER_EXE = os.environ.get("AS_LINTER_EXE", str(_DEFAULT_LINTER)) + + +@dataclass +class CompileMessage: + row: int = 0 + col: int = 0 + type: str = "" # "ERROR", "WARN", "INFO" + message: str = "" + + +@dataclass +class CompileResult: + success: bool = False + messages: list[CompileMessage] = field(default_factory=list) + file_path: str = "" + + @property + def errors(self) -> list[CompileMessage]: + return [m for m in self.messages if m.type == "ERROR"] + + @property + def warnings(self) -> list[CompileMessage]: + return [m for m in self.messages if m.type == "WARN"] + + def error_summary(self) -> str: + errs = self.errors + if not errs: + return "no errors" + lines = [] + for e in errs[:5]: + lines.append(f" ({e.row},{e.col}): {e.message}") + if len(errs) > 5: + lines.append(f" ... and {len(errs) - 5} more") + return "\n".join(lines) + + +@dataclass +class LintReport: + total: int = 0 + passed: int = 0 + failed: int = 0 + warnings: int = 0 + results: list[CompileResult] = field(default_factory=list) + + +def get_linter_path() -> Path: + """Return the path to as_linter.exe, or raise if not found.""" + p = Path(_LINTER_EXE) + if not p.exists(): + raise FileNotFoundError( + f"as_linter.exe not found at {p}. " + f"Build it with CMake or set AS_LINTER_EXE env var." + ) + return p + + +def linter_available() -> bool: + """Check if the linter executable exists.""" + return Path(_LINTER_EXE).exists() + + +def compile_source(source: str, include_paths: Optional[list[str]] = None) -> CompileResult: + """Compile an AngelScript source string through the linter. + + Writes the source to a temp file, runs as_linter, parses JSON output. + Returns a CompileResult with success/failure and any error messages. + """ + linter = get_linter_path() + + with tempfile.NamedTemporaryFile( + mode="w", suffix=".as", delete=False, encoding="utf-8" + ) as f: + f.write(source) + tmp_path = f.name + + try: + cmd = [str(linter), "-f", tmp_path, "--format", "json"] + if include_paths: + for p in include_paths: + cmd.extend(["--include-path", p]) + + proc = subprocess.run( + cmd, + capture_output=True, + text=True, + timeout=30, + ) + + return _parse_json_result(proc.stdout, tmp_path) + except subprocess.TimeoutExpired: + result = CompileResult(file_path=tmp_path, success=False) + result.messages.append(CompileMessage(0, 0, "ERROR", "Linter timed out")) + return result + except Exception as e: + result = CompileResult(file_path=tmp_path, success=False) + result.messages.append(CompileMessage(0, 0, "ERROR", f"Linter error: {e}")) + return result + finally: + try: + os.unlink(tmp_path) + except OSError: + pass + + +def compile_file(file_path: str | Path, include_paths: Optional[list[str]] = None) -> CompileResult: + """Compile a single .as file through the linter.""" + linter = get_linter_path() + + cmd = [str(linter), "-f", str(file_path), "--format", "json"] + if include_paths: + for p in include_paths: + cmd.extend(["--include-path", p]) + + proc = subprocess.run(cmd, capture_output=True, text=True, timeout=30) + return _parse_json_result(proc.stdout, str(file_path)) + + +def compile_directory( + dir_path: str | Path, + include_paths: Optional[list[str]] = None, +) -> LintReport: + """Compile all .as files in a directory through the linter.""" + linter = get_linter_path() + + cmd = [str(linter), "-d", str(dir_path), "--format", "json"] + if include_paths: + for p in include_paths: + cmd.extend(["--include-path", p]) + + proc = subprocess.run(cmd, capture_output=True, text=True, timeout=600) + return _parse_json_report(proc.stdout) + + +def _parse_json_result(json_str: str, file_path: str) -> CompileResult: + """Parse a single-file result from the linter's JSON output.""" + try: + data = json.loads(json_str) + except (json.JSONDecodeError, ValueError): + result = CompileResult(file_path=file_path, success=False) + result.messages.append( + CompileMessage(0, 0, "ERROR", "Failed to parse linter JSON output") + ) + return result + + if "results" in data and data["results"]: + entry = data["results"][0] + result = CompileResult( + file_path=entry.get("file", file_path), + success=entry.get("success", False), + ) + for msg in entry.get("messages", []): + result.messages.append(CompileMessage( + row=msg.get("row", 0), + col=msg.get("col", 0), + type=msg.get("type", "ERROR"), + message=msg.get("message", ""), + )) + return result + + # Fallback: top-level summary only + result = CompileResult(file_path=file_path, success=data.get("passed", 0) > 0) + return result + + +def _parse_json_report(json_str: str) -> LintReport: + """Parse a full batch report from the linter's JSON output.""" + try: + data = json.loads(json_str) + except (json.JSONDecodeError, ValueError): + return LintReport() + + report = LintReport( + total=data.get("total", 0), + passed=data.get("passed", 0), + failed=data.get("failed", 0), + warnings=data.get("warnings", 0), + ) + + for entry in data.get("results", []): + cr = CompileResult( + file_path=entry.get("file", ""), + success=entry.get("success", False), + ) + for msg in entry.get("messages", []): + cr.messages.append(CompileMessage( + row=msg.get("row", 0), + col=msg.get("col", 0), + type=msg.get("type", "ERROR"), + message=msg.get("message", ""), + )) + report.results.append(cr) + + return report diff --git a/msc_transpiler/output/__init__.py b/msc_transpiler/output/__init__.py new file mode 100644 index 00000000..5aee2b83 --- /dev/null +++ b/msc_transpiler/output/__init__.py @@ -0,0 +1 @@ +"""Output formatting and file writing.""" diff --git a/msc_transpiler/output/code_writer.py b/msc_transpiler/output/code_writer.py new file mode 100644 index 00000000..f2f5ecb1 --- /dev/null +++ b/msc_transpiler/output/code_writer.py @@ -0,0 +1,61 @@ +"""Indentation-aware code emitter for AngelScript output.""" + +from __future__ import annotations + + +class CodeWriter: + """Builds AngelScript source with proper indentation.""" + + def __init__(self, indent_str: str = "\t"): + self._lines: list[str] = [] + self._indent: int = 0 + self._indent_str: str = indent_str + + def line(self, text: str = ""): + """Write a line at current indentation.""" + if text: + self._lines.append(f"{self._indent_str * self._indent}{text}") + else: + self._lines.append("") + + def raw_line(self, text: str): + """Write a line with no indentation adjustment.""" + self._lines.append(text) + + def indent(self): + """Increase indent level.""" + self._indent += 1 + + def dedent(self): + """Decrease indent level.""" + self._indent = max(0, self._indent - 1) + + def open_brace(self, prefix: str = ""): + """Write 'prefix {' and indent.""" + if prefix: + self.line(f"{prefix}") + self.line("{") + else: + self.line("{") + self.indent() + + def close_brace(self, suffix: str = ""): + """Dedent and write '}'.""" + self.dedent() + self.line(f"}}{suffix}") + + def blank(self): + """Write a blank line.""" + self._lines.append("") + + def comment(self, text: str): + """Write a comment line.""" + self.line(f"// {text}") + + def todo(self, text: str): + """Write a TODO comment.""" + self.line(f"// TODO: {text}") + + def build(self) -> str: + """Return the complete source string.""" + return "\n".join(self._lines) + "\n" diff --git a/msc_transpiler/output/file_writer.py b/msc_transpiler/output/file_writer.py new file mode 100644 index 00000000..5ff83b7f --- /dev/null +++ b/msc_transpiler/output/file_writer.py @@ -0,0 +1,25 @@ +"""File output with directory mirroring.""" + +from __future__ import annotations + +from pathlib import Path + + +def write_output(content: str, output_path: Path, dry_run: bool = False) -> bool: + """Write transpiled content to output path, creating directories as needed.""" + if dry_run: + return True + + output_path.parent.mkdir(parents=True, exist_ok=True) + output_path.write_text(content, encoding="utf-8") + return True + + +def mirror_path(input_file: Path, input_dir: Path, output_dir: Path) -> Path: + """Compute output path that mirrors the input directory structure.""" + try: + rel = input_file.relative_to(input_dir) + except ValueError: + rel = Path(input_file.name) + + return output_dir / rel.with_suffix(".as") diff --git a/msc_transpiler/pipeline/__init__.py b/msc_transpiler/pipeline/__init__.py new file mode 100644 index 00000000..63e1bbed --- /dev/null +++ b/msc_transpiler/pipeline/__init__.py @@ -0,0 +1 @@ +"""Pipeline stages for the MSCScript transpiler.""" diff --git a/msc_transpiler/pipeline/analyzer.py b/msc_transpiler/pipeline/analyzer.py new file mode 100644 index 00000000..918e0efd --- /dev/null +++ b/msc_transpiler/pipeline/analyzer.py @@ -0,0 +1,66 @@ +"""Analyzer: type inference, scope resolution, validation. + +Phase 1 implementation is minimal — just validates the AST structure. +More sophisticated analysis will be added in later phases. +""" + +from __future__ import annotations + +from ..ast_nodes import ScriptFile, EventBlock, IfBlock, Command, Statement +from ..errors import ErrorCollector + + +def analyze(script: ScriptFile, errors: ErrorCollector) -> ScriptFile: + """Analyze and validate a parsed script AST. Returns the (possibly modified) AST.""" + _validate_events(script, errors) + _resolve_guard_ifs(script, errors) + return script + + +def _validate_events(script: ScriptFile, errors: ErrorCollector): + """Check for common issues in event blocks.""" + event_names = set() + for event in script.named_events: + if event.name in event_names: + errors.warning( + f"Duplicate event name '{event.name}'", + script.filename, event.line, + ) + event_names.add(event.name) + + if not event.body: + errors.info( + f"Empty event block '{event.name}'", + script.filename, event.line, + ) + + +def _resolve_guard_ifs(script: ScriptFile, errors: ErrorCollector): + """Resolve guard-style if blocks by collecting subsequent statements into the guard body. + + A guard-style `if` in MSCScript means: if the condition is FALSE, skip + the rest of the statements until the next guard or end of block. + + We convert this to: `if (!condition) return;` and leave subsequent + statements outside the if block. + """ + for event in script.events: + event.body = _process_guards(event.body) + + +def _process_guards(stmts: list[Statement]) -> list[Statement]: + """Process guard-style if blocks in a statement list. + + Guard-style ifs with empty bodies just become guard checks. + The code generator handles emitting them as `if (!cond) return;`. + """ + result: list[Statement] = [] + + for stmt in stmts: + if isinstance(stmt, IfBlock) and not stmt.guard_style: + # Recurse into block-style if bodies + stmt.body = _process_guards(stmt.body) + stmt.else_body = _process_guards(stmt.else_body) + result.append(stmt) + + return result diff --git a/msc_transpiler/pipeline/codegen.py b/msc_transpiler/pipeline/codegen.py new file mode 100644 index 00000000..b196bd5c --- /dev/null +++ b/msc_transpiler/pipeline/codegen.py @@ -0,0 +1,563 @@ +"""Code generator: emits AngelScript from the AST.""" + +from __future__ import annotations + +from ..ast_nodes import ( + Command, Comment, Concatenation, Condition, DollarFunc, EventBlock, + Expression, IfBlock, Literal, RawLine, ScriptFile, Statement, + VariableRef, VectorLiteral, +) +from ..commands.registry import get_translator, register_all as register_commands +from ..errors import ErrorCollector +from ..expressions.conditions import translate_condition_op +from ..expressions.dollar_funcs import translate_dollar_func +from ..expressions.game_properties import translate_game_property +from ..output.code_writer import CodeWriter + + +# ── Event name → AngelScript callback mapping ──────────────── + +EVENT_CALLBACK_MAP = { + "spawn": ("void OnSpawn()", True), # eventname spawn + "game_spawn": ("void OnSpawn()", True), + "npc_spawn": ("void OnSpawn()", True), + "game_death": ("void OnDeath(CBaseEntity@ attacker)", True), + "npc_death": ("void OnDeath(CBaseEntity@ attacker)", True), + "game_damaged": ("void OnDamage(int damage)", True), + "game_takedamage": ("void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType)", True), + "game_touch": ("void OnTouch(CBaseEntity@ other)", True), + "game_playerused": ("void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType)", True), + "game_struck": ("void OnHitByAttack(CBaseEntity@ attacker, int damage)", True), + "game_deploy": ("void OnDeploy()", True), + "game_pickup": ("void OnPickup(CBaseEntity@ player)", True), + "game_drop": ("void OnDrop()", True), + "game_playerspeak": ("void OnScriptSay(const string &in text)", True), + "game_heardsound": ("void OnHeardSound(CBaseEntity@ source, Vector3 origin)", True), + "game_damaged_other": ("void OnDamagedOther(CBaseEntity@ victim, int damage)", True), + "game_parry": ("void OnParry(CBaseEntity@ attacker)", True), + "npc_post_spawn": ("void OnPostSpawn()", True), + "npcatk_target": ("void OnAttackTarget(CBaseEntity@ target)", False), + "npcatk_hunt": ("void OnHuntTarget(CBaseEntity@ target)", False), + "npcatk_flee": ("void OnFlee()", False), + "npcatk_dodamage": ("void OnAttackDoDamage(CBaseEntity@ target)", False), + "npc_struck": ("void OnStruck(CBaseEntity@ attacker, int damage)", False), + "npc_flinch": ("void OnFlinch()", False), + "npcatk_targetvalidate": ("void OnTargetValidate(CBaseEntity@ target)", False), + "npc_aiding_ally": ("void OnAidingAlly(CBaseEntity@ ally, CBaseEntity@ enemy)", False), + "npcatk_suspend_ai": ("void OnSuspendAI()", False), +} + +# Entity reference mapping +ENTITY_REF_MAP = { + "ent_me": "GetOwner()", + "ent_owner": "GetOwner()", + "ent_target": "m_hTarget", + "ent_lastcreated": "m_hLastCreated", + "ent_lastused": "m_hLastUsed", + "ent_laststruck": "m_hLastStruck", + "ent_laststruckbyme": "m_hLastStruckByMe", + "ent_lastseen": "m_hLastSeen", + "npcatk_target": "m_hAttackTarget", +} + +# Parameter mapping +PARAM_MAP = {f"PARAM{i}": f"param{i}" for i in range(1, 21)} +PARAM_MAP["GET_COUNT"] = "getCount" +for i in range(1, 10): + PARAM_MAP[f"GET_ENT{i}"] = f"getEnt{i}" + + +class CodeGenContext: + """Context for code generation, tracking variables and state.""" + + def __init__(self, errors: ErrorCollector, filename: str = ""): + self.errors = errors + self.filename = filename + self.member_vars: dict[str, str] = {} # name → type + self.local_vars: set[str] = set() + self.current_event: str = "" + + def register_member(self, name: str, type_str: str = "string"): + if name not in self.member_vars: + self.member_vars[name] = type_str + + def register_local(self, name: str, type_str: str = "string"): + self.local_vars.add(name) + + def translate_expr(self, expr: Expression) -> str: + """Translate an AST expression to AngelScript code.""" + if isinstance(expr, Literal): + return self._translate_literal(expr) + if isinstance(expr, VariableRef): + return self._translate_var_ref(expr) + if isinstance(expr, DollarFunc): + return self._translate_dollar_func(expr) + if isinstance(expr, VectorLiteral): + return f"Vector3({expr.x}, {expr.y}, {expr.z})" + if isinstance(expr, Concatenation): + parts = [self.translate_expr(p) for p in expr.parts] + # If all parts are string-like, join with + + return " + ".join(parts) if len(parts) > 1 else parts[0] + return str(expr) + + def expr_raw(self, expr: Expression) -> str: + """Get raw text of an expression (for variable names, etc.).""" + if isinstance(expr, Literal): + val = expr.value + # Strip quotes for raw usage + if val.startswith('"') and val.endswith('"'): + return val[1:-1] + if val.startswith('`') and val.endswith('`'): + return val[1:-1] + return val + if isinstance(expr, VariableRef): + return expr.name + if isinstance(expr, DollarFunc): + return self._translate_dollar_func(expr) + if isinstance(expr, VectorLiteral): + return f"({expr.x},{expr.y},{expr.z})" + if isinstance(expr, Concatenation): + return " ".join(self.expr_raw(p) for p in expr.parts) + return str(expr) + + def _translate_literal(self, lit: Literal) -> str: + val = lit.value + + # HP literal: "50/50" → just use first number + if "/" in val and not val.startswith('"'): + parts = val.split("/") + try: + int(parts[0]) + int(parts[1]) + return parts[0] # Return hp value + except ValueError: + pass + + # Percentage: "60%" → 0.6 + if val.endswith("%"): + try: + num = float(val[:-1]) / 100.0 + return str(num) + except ValueError: + pass + + # Quoted string — keep as-is + if val.startswith('"') and val.endswith('"'): + return val + + # Backtick string → regular string + if val.startswith('`') and val.endswith('`'): + return f'"{val[1:-1]}"' + + # Number + try: + int(val) + return val + except ValueError: + pass + try: + float(val) + return val + except ValueError: + pass + + # Unquoted string that looks like a path + if "/" in val or val.endswith(".mdl") or val.endswith(".wav") or val.endswith(".spr"): + return f'"{val}"' + + # Could be a variable name or a string literal — keep as-is + # (will be resolved by var ref translation if it's a VariableRef) + return f'"{val}"' + + def _translate_var_ref(self, ref: VariableRef) -> str: + name = ref.name + + # Negation + if name.startswith("!"): + inner = name[1:] + return f"!{self._resolve_var_name(inner)}" + + # $ prefix reference + if name.startswith("$"): + # Game properties + gp = translate_game_property(name[1:]) + if gp: + return gp + return name[1:] # Strip $ for simple references + + return self._resolve_var_name(name) + + def _resolve_var_name(self, name: str) -> str: + """Resolve a variable name to its AngelScript equivalent.""" + # Game properties + gp = translate_game_property(name) + if gp: + return gp + + # Entity references + lower = name.lower() + if lower in ENTITY_REF_MAP: + return ENTITY_REF_MAP[lower] + + # Parameters + if name in PARAM_MAP: + return PARAM_MAP[name] + + # Known member/local variables + if name in self.member_vars or name in self.local_vars: + return name + + # ALL_CAPS identifiers are likely variable names (MSCScript convention) + if name.isupper() or (name.upper() == name and "_" in name): + return name + + # Mixed case or lowercase identifiers that aren't known — likely string literals + # Quote them + return f'"{name}"' + + def _translate_dollar_func(self, func: DollarFunc) -> str: + args = [self.translate_expr(a) for a in func.args] + return translate_dollar_func(func.name, args) + + +def generate(script: ScriptFile, errors: ErrorCollector) -> str: + """Generate AngelScript source from a parsed script AST.""" + # Ensure commands are registered + _ensure_registered() + + ctx = CodeGenContext(errors, script.filename) + w = CodeWriter() + + # File header + scope = "server" + if script.scope_directive: + scope = script.scope_directive.scope + w.raw_line(f"#pragma context {scope}") + w.blank() + + # Includes + for inc in script.includes: + inc_path = inc.path + if not inc_path.endswith(".as"): + inc_path += ".as" + w.raw_line(f'#include "{inc_path}"') + if script.includes: + w.blank() + + # Namespace + w.raw_line("namespace MS") + w.raw_line("{") + w.blank() + + # Script class name from filename + class_name = _class_name_from_file(script.filename) + + # First pass: collect member variables from init blocks (including consts) + for event in script.init_blocks: + _collect_members(event, ctx, collect_consts=True) + + # Also collect from named events (setvard commands, but not consts — local scope) + for event in script.named_events: + _collect_members(event, ctx) + + # Class declaration + w.raw_line(f"class {class_name} : CGameScript") + w.raw_line("{") + w.indent() + + # Member variable declarations + if ctx.member_vars: + for var_name, var_type in sorted(ctx.member_vars.items()): + w.line(f"{var_type} {var_name};") + w.blank() + + # Separate true init blocks from unnamed timer blocks + true_init_blocks = [] + timer_blocks = [] + for event in script.init_blocks: + if _is_timer_block(event): + timer_blocks.append(event) + else: + true_init_blocks.append(event) + + # Constructor — emit init block contents + if true_init_blocks: + w.line(f"{class_name}()") + w.line("{") + w.indent() + for event in true_init_blocks: + for stmt in event.body: + _emit_statement(stmt, ctx, w) + w.dedent() + w.line("}") + w.blank() + + # Timer blocks — emit as OnRepeatTimer methods + for i, timer in enumerate(timer_blocks): + suffix = f"_{i}" if i > 0 else "" + w.line(f"void OnRepeatTimer{suffix}()") + w.line("{") + w.indent() + for stmt in timer.body: + _emit_statement(stmt, ctx, w) + w.dedent() + w.line("}") + w.blank() + + # Event methods — merge duplicates (same event name → combine bodies) + merged_events = _merge_duplicate_events(script.named_events) + for event in merged_events: + _emit_event(event, ctx, w) + w.blank() + + # Close class and namespace + w.dedent() + w.raw_line("}") # class + w.blank() + w.raw_line("}") # namespace + + return w.build() + + +def _merge_duplicate_events(events: list[EventBlock]) -> list[EventBlock]: + """Merge events with duplicate names by combining their bodies. + + In MSCScript, the same event can appear multiple times (e.g. from + included files or multiple definitions). We merge them into one. + """ + seen: dict[str, EventBlock] = {} + merged: list[EventBlock] = [] + for event in events: + key = event.name.lower() + if key in seen: + # Append body to the existing event + seen[key].body.extend(event.body) + else: + seen[key] = event + merged.append(event) + return merged + + +def _emit_event(event: EventBlock, ctx: CodeGenContext, w: CodeWriter): + """Emit an event block as an AngelScript method.""" + ctx.current_event = event.name + ctx.local_vars.clear() + + # Determine signature + callback = EVENT_CALLBACK_MAP.get(event.name.lower()) + if callback: + signature, is_override = callback + override = " override" if is_override else "" + w.line(f"{signature}{override}") + else: + # Custom event — private method + w.line(f"void {_sanitize_name(event.name)}()") + + w.line("{") + w.indent() + + # Emit body with guard-style if handling + _emit_body_with_guards(event.body, ctx, w) + + w.dedent() + w.line("}") + + +def _emit_body_with_guards(stmts: list[Statement], ctx: CodeGenContext, w: CodeWriter): + """Emit a list of statements, handling guard-style if blocks. + + A guard-style if affects all subsequent statements until the end + of the block or the next guard-style if. + """ + i = 0 + while i < len(stmts): + stmt = stmts[i] + + if isinstance(stmt, IfBlock) and stmt.guard_style: + # Guard: if condition, the rest executes only if condition is met + # In AngelScript: if (!condition) return; + cond_str = _translate_condition(stmt.condition, ctx, negate=True) + w.line(f"if ({cond_str}) return;") + + # If the guard has a body (inline command after the guard), + # those execute as normal after the guard + if stmt.body: + for s in stmt.body: + _emit_statement(s, ctx, w) + else: + _emit_statement(stmt, ctx, w) + + i += 1 + + +def _emit_statement(stmt: Statement, ctx: CodeGenContext, w: CodeWriter): + """Emit a single statement.""" + if isinstance(stmt, Command): + _emit_command(stmt, ctx, w) + elif isinstance(stmt, IfBlock): + _emit_if(stmt, ctx, w) + elif isinstance(stmt, Comment): + w.comment(stmt.text) + elif isinstance(stmt, RawLine): + w.comment(f"UNCONVERTED: {stmt.text}") + else: + w.comment(f"Unknown statement: {stmt}") + + +def _emit_command(cmd: Command, ctx: CodeGenContext, w: CodeWriter): + """Emit a command statement.""" + translator = get_translator(cmd.name) + if translator: + try: + result = translator.translate(cmd, ctx, w) + if not result: + # Translator returned False — couldn't handle it + w.comment(f"TODO: UNCONVERTED: {cmd.raw_line.strip()}") + ctx.errors.warning( + f"Command '{cmd.name}' translator returned False", + ctx.filename, cmd.line, + ) + except Exception as e: + w.comment(f"TODO: UNCONVERTED (error): {cmd.raw_line.strip()}") + ctx.errors.error( + f"Error translating '{cmd.name}': {e}", + ctx.filename, cmd.line, + ) + else: + # No translator found + w.comment(f"TODO: UNCONVERTED: {cmd.raw_line.strip()}") + ctx.errors.warning( + f"No translator for command '{cmd.name}'", + ctx.filename, cmd.line, + ) + + +def _emit_if(ifb: IfBlock, ctx: CodeGenContext, w: CodeWriter): + """Emit an if/else block.""" + cond_str = _translate_condition(ifb.condition, ctx) + w.line(f"if ({cond_str})") + w.line("{") + w.indent() + for stmt in ifb.body: + _emit_statement(stmt, ctx, w) + w.dedent() + w.line("}") + + if ifb.else_body: + w.line("else") + w.line("{") + w.indent() + for stmt in ifb.else_body: + _emit_statement(stmt, ctx, w) + w.dedent() + w.line("}") + + +def _translate_condition(cond: Condition, ctx: CodeGenContext, negate: bool = False) -> str: + """Translate a condition to AngelScript.""" + left = ctx.translate_expr(cond.left) + right = ctx.translate_expr(cond.right) if cond.right else "" + negated = cond.negated ^ negate # XOR with external negation + return translate_condition_op(cond.operator, left, right, negated) + + +def _collect_members(event: EventBlock, ctx: CodeGenContext, collect_consts: bool = False): + """Pre-scan event body to collect member variable declarations.""" + collect_names = {"setvard", "setvar"} + if collect_consts: + collect_names.add("const") + + for stmt in event.body: + if isinstance(stmt, Command): + name_lower = stmt.name.lower() + if name_lower in collect_names: + if stmt.args: + var_name = ctx.expr_raw(stmt.args[0]) + # Try to infer type from value + if len(stmt.args) >= 2: + val = ctx.expr_raw(stmt.args[1]) + type_str = _infer_member_type(val) + else: + type_str = "string" + ctx.register_member(var_name, type_str) + elif isinstance(stmt, IfBlock): + # Recurse into if bodies + for s in stmt.body: + if isinstance(s, Command) and s.name.lower() in collect_names: + if s.args: + var_name = ctx.expr_raw(s.args[0]) + ctx.register_member(var_name) + for s in stmt.else_body: + if isinstance(s, Command) and s.name.lower() in collect_names: + if s.args: + var_name = ctx.expr_raw(s.args[0]) + ctx.register_member(var_name) + + +def _infer_member_type(value: str) -> str: + """Infer type from a raw value string.""" + # Translated forms (expr_raw translates DollarFunc nodes) + if value.startswith("RandomInt("): + return "int" + if value.startswith("Random("): + return "float" + if value.startswith("int("): + return "int" + if value.startswith("float("): + return "float" + if value.startswith("Distance(") or value.startswith("Distance2D("): + return "float" + if value.startswith("GetGameTime("): + return "float" + + # Legacy $-prefix checks (keep for safety) + if value.startswith("$rand(") or value.startswith("$randf("): + return "float" if "randf" in value else "int" + + try: + int(value) + return "int" + except ValueError: + pass + try: + float(value) + return "float" + except ValueError: + pass + + if value.endswith("%"): + return "float" + + return "string" + + +def _is_timer_block(event: EventBlock) -> bool: + """Check if an unnamed block is a timer/repeat block (contains repeatdelay).""" + for stmt in event.body: + if isinstance(stmt, Command) and stmt.name.lower() == "repeatdelay": + return True + return False + + +def _class_name_from_file(filename: str) -> str: + """Generate class name from filename.""" + import os + base = os.path.splitext(os.path.basename(filename))[0] + # Convert to PascalCase + parts = base.replace("-", "_").replace(".", "_").split("_") + return "".join(p.capitalize() for p in parts if p) + + +def _sanitize_name(name: str) -> str: + """Make a name a valid AngelScript identifier.""" + return name.replace(".", "_").replace("-", "_").replace(" ", "_") + + +_registered = False + + +def _ensure_registered(): + global _registered + if not _registered: + register_commands() + _registered = True diff --git a/msc_transpiler/pipeline/lexer.py b/msc_transpiler/pipeline/lexer.py new file mode 100644 index 00000000..4c37b830 --- /dev/null +++ b/msc_transpiler/pipeline/lexer.py @@ -0,0 +1,255 @@ +"""Line-oriented lexer for MSCScript. + +MSCScript is fundamentally line-oriented: each line is either a structural +element ({, }, eventname, scope tag) or a command with arguments. The lexer +splits each line into tokens suitable for the parser. +""" + +from __future__ import annotations + +import re +from dataclasses import dataclass, field +from enum import Enum, auto + +from .preprocessor import PreprocessedFile, PreprocessedLine + + +class TokenType(Enum): + OPEN_BRACE = auto() # { + CLOSE_BRACE = auto() # } + OPEN_PAREN = auto() # ( + CLOSE_PAREN = auto() # ) + SCOPE_TAG = auto() # [server], [client], [shared] + EVENTNAME_KW = auto() # 'eventname' keyword + REPEATDELAY_KW = auto() # 'repeatdelay' keyword + IF_KW = auto() # 'if' keyword + ELSE_KW = auto() # 'else' keyword + IDENTIFIER = auto() # command names, variable names + NUMBER = auto() # integer or float literal + PERCENTAGE = auto() # e.g. 60% + STRING = auto() # quoted string + BACKTICK_STRING = auto() # `backtick string` + DOLLAR_FUNC = auto() # $funcname + DOLLAR_REF = auto() # $variable (no parens follow) + VECTOR = auto() # (x,y,z) vector literal (detected in context) + HP_LITERAL = auto() # 50/50 style hp literal + COMMA = auto() # , + OPERATOR = auto() # ==, !=, <, >, <=, >= + BANG = auto() # ! + NEWLINE = auto() # end of logical line + EOF = auto() + + +@dataclass +class Token: + type: TokenType + value: str + line: int = 0 + col: int = 0 + + def __repr__(self): + return f"Token({self.type.name}, {self.value!r}, L{self.line})" + + +@dataclass +class LexedLine: + """A single logical line broken into tokens.""" + tokens: list[Token] + line_number: int + raw: str # Original text + + @property + def is_empty(self) -> bool: + return not self.tokens or all(t.type == TokenType.NEWLINE for t in self.tokens) + + +@dataclass +class LexedFile: + """All lexed lines from a file.""" + filename: str + lines: list[LexedLine] = field(default_factory=list) + + +# Scope tag pattern +_SCOPE_TAG_RE = re.compile(r"^\[(\w+)\]$") + +# $function pattern +_DOLLAR_FUNC_RE = re.compile(r"^\$(\w[\w.]*)\(") + +# HP literal pattern (e.g., 50/50, 200/200) +_HP_LITERAL_RE = re.compile(r"^\d+/\d+$") + +# Percentage pattern +_PERCENTAGE_RE = re.compile(r"^\d+(?:\.\d+)?%$") + +# Number pattern +_NUMBER_RE = re.compile(r"^-?\d+(?:\.\d+)?$") + +# Comparison operators +_OPERATORS = {"==", "!=", "<", ">", "<=", ">="} + +# MSCScript condition keywords (treated as operators in conditions) +CONDITION_KEYWORDS = { + "equals", "isnot", "contains", "startswith", "endswith", + "less", "greater", +} + + +def lex_file(preprocessed: PreprocessedFile) -> LexedFile: + """Lex all preprocessed lines into token streams.""" + result = LexedFile(filename=preprocessed.filename) + for pline in preprocessed.lines: + lexed = lex_line(pline) + if not lexed.is_empty: + result.lines.append(lexed) + return result + + +def lex_line(pline: PreprocessedLine) -> LexedLine: + """Tokenize a single preprocessed line.""" + tokens: list[Token] = [] + text = pline.text + i = 0 + line_num = pline.line_number + + while i < len(text): + ch = text[i] + + # Skip whitespace + if ch in (' ', '\t'): + i += 1 + continue + + # Single character tokens + if ch == '{': + tokens.append(Token(TokenType.OPEN_BRACE, "{", line_num, i)) + i += 1 + continue + if ch == '}': + tokens.append(Token(TokenType.CLOSE_BRACE, "}", line_num, i)) + i += 1 + continue + if ch == ',': + tokens.append(Token(TokenType.COMMA, ",", line_num, i)) + i += 1 + continue + + # Scope tags: [server], [client], [shared] + if ch == '[': + end = text.find(']', i) + if end != -1: + tag = text[i:end + 1] + m = _SCOPE_TAG_RE.match(tag) + if m: + tokens.append(Token(TokenType.SCOPE_TAG, m.group(1).lower(), line_num, i)) + i = end + 1 + continue + # Not a scope tag, treat [ as part of identifier + pass + + # Operators: ==, !=, <=, >=, <, > + if ch in '<>': + if i + 1 < len(text) and text[i + 1] == '=': + tokens.append(Token(TokenType.OPERATOR, text[i:i + 2], line_num, i)) + i += 2 + continue + tokens.append(Token(TokenType.OPERATOR, ch, line_num, i)) + i += 1 + continue + if ch == '=' and i + 1 < len(text) and text[i + 1] == '=': + tokens.append(Token(TokenType.OPERATOR, "==", line_num, i)) + i += 2 + continue + if ch == '!' and i + 1 < len(text) and text[i + 1] == '=': + tokens.append(Token(TokenType.OPERATOR, "!=", line_num, i)) + i += 2 + continue + if ch == '!': + tokens.append(Token(TokenType.BANG, "!", line_num, i)) + i += 1 + continue + + # Quoted strings + if ch == '"' or ch == "'": + end = text.find(ch, i + 1) + if end == -1: + end = len(text) + val = text[i + 1:end] + tokens.append(Token(TokenType.STRING, val, line_num, i)) + i = end + 1 + continue + + # Backtick strings + if ch == '`': + end = text.find('`', i + 1) + if end == -1: + end = len(text) + val = text[i + 1:end] + tokens.append(Token(TokenType.BACKTICK_STRING, val, line_num, i)) + i = end + 1 + continue + + # $function or $variable + if ch == '$': + # Collect the $name + j = i + 1 + while j < len(text) and (text[j].isalnum() or text[j] in ('_', '.')): + j += 1 + name = text[i + 1:j] + if j < len(text) and text[j] == '(': + # $func(...) — collect the full balanced parens + tokens.append(Token(TokenType.DOLLAR_FUNC, name, line_num, i)) + tokens.append(Token(TokenType.OPEN_PAREN, "(", line_num, j)) + i = j + 1 + continue + else: + # $variable reference + tokens.append(Token(TokenType.DOLLAR_REF, name, line_num, i)) + i = j + continue + + # Parenthesized expression — could be vector or grouping + if ch == '(': + tokens.append(Token(TokenType.OPEN_PAREN, "(", line_num, i)) + i += 1 + continue + if ch == ')': + tokens.append(Token(TokenType.CLOSE_PAREN, ")", line_num, i)) + i += 1 + continue + + # Words/identifiers/numbers — collect until whitespace or special char + j = i + while j < len(text) and text[j] not in (' ', '\t', '{', '}', '(', ')', ',', '"', "'", '`'): + # Allow $ inside words only if it's at the start + if text[j] == '$' and j > i: + break + j += 1 + word = text[i:j] + + if not word: + i += 1 + continue + + # Classify the word + if _HP_LITERAL_RE.match(word): + tokens.append(Token(TokenType.HP_LITERAL, word, line_num, i)) + elif _PERCENTAGE_RE.match(word): + tokens.append(Token(TokenType.PERCENTAGE, word, line_num, i)) + elif _NUMBER_RE.match(word): + tokens.append(Token(TokenType.NUMBER, word, line_num, i)) + elif word.lower() == "eventname": + tokens.append(Token(TokenType.EVENTNAME_KW, word, line_num, i)) + elif word.lower() == "repeatdelay": + tokens.append(Token(TokenType.REPEATDELAY_KW, word, line_num, i)) + elif word.lower() == "if": + tokens.append(Token(TokenType.IF_KW, word, line_num, i)) + elif word.lower() == "else": + tokens.append(Token(TokenType.ELSE_KW, word, line_num, i)) + else: + tokens.append(Token(TokenType.IDENTIFIER, word, line_num, i)) + + i = j + + tokens.append(Token(TokenType.NEWLINE, "\n", line_num, len(text))) + return LexedLine(tokens=tokens, line_number=line_num, raw=pline.text) diff --git a/msc_transpiler/pipeline/parser.py b/msc_transpiler/pipeline/parser.py new file mode 100644 index 00000000..6eb81e42 --- /dev/null +++ b/msc_transpiler/pipeline/parser.py @@ -0,0 +1,675 @@ +"""Parser: builds AST from lexed lines. + +MSCScript structure: + - Event blocks: { eventname NAME [scope] ... statements ... } + - Init blocks: { ... const/setvar/setvard statements ... } (no eventname) + - Statements: commands, if/else, comments + - If blocks: bare guards and parenthesized blocks with braces +""" + +from __future__ import annotations + +from ..ast_nodes import ( + Command, Comment, Condition, DollarFunc, EventBlock, Expression, + IfBlock, Literal, RawLine, ScriptFile, Statement, VariableRef, + VectorLiteral, Concatenation, +) +from ..errors import ErrorCollector +from .lexer import LexedFile, LexedLine, Token, TokenType +from .preprocessor import PreprocessedFile + + +class Parser: + """Parses lexed MSCScript into an AST.""" + + def __init__(self, lexed: LexedFile, preprocessed: PreprocessedFile, errors: ErrorCollector): + self.lexed = lexed + self.preprocessed = preprocessed + self.errors = errors + self.filename = lexed.filename + self.pos = 0 # Current line index + + def parse(self) -> ScriptFile: + script = ScriptFile(filename=self.filename) + script.scope_directive = self.preprocessed.scope_directive + script.includes = list(self.preprocessed.includes) + + while self.pos < len(self.lexed.lines): + line = self.current_line() + + # Look for opening brace + if self._line_starts_with(line, TokenType.OPEN_BRACE): + event = self._parse_event_block() + if event: + script.events.append(event) + else: + # Top-level line outside any block — skip with warning + self.errors.warning( + f"Line outside event block: {line.raw}", + self.filename, line.line_number, + ) + self.pos += 1 + + return script + + def current_line(self) -> LexedLine: + return self.lexed.lines[self.pos] + + def _line_starts_with(self, line: LexedLine, tt: TokenType) -> bool: + for t in line.tokens: + if t.type == TokenType.NEWLINE: + return False + if t.type == tt: + return True + return False + return False + + def _non_newline_tokens(self, line: LexedLine) -> list[Token]: + return [t for t in line.tokens if t.type != TokenType.NEWLINE] + + def _parse_event_block(self) -> EventBlock | None: + """Parse { eventname NAME [scope] ... } block.""" + line = self.current_line() + tokens = self._non_newline_tokens(line) + + if not tokens or tokens[0].type != TokenType.OPEN_BRACE: + self.pos += 1 + return None + + block_line = line.line_number + event_name = "" + scope = "" + is_init = True + + # Check if event name / scope tag is on the same line as { + rest = tokens[1:] + if rest: + event_name, scope, rest = self._extract_event_header(rest) + if event_name: + is_init = False + + self.pos += 1 + + body_statements: list[Statement] = [] + found_close = False + + while self.pos < len(self.lexed.lines): + line = self.current_line() + tokens = self._non_newline_tokens(line) + + if not tokens: + self.pos += 1 + continue + + # Closing brace for the event block + if tokens[0].type == TokenType.CLOSE_BRACE: + self.pos += 1 + found_close = True + break + + # Check for eventname keyword + if tokens[0].type == TokenType.EVENTNAME_KW: + if len(tokens) > 1: + event_name = tokens[1].value + is_init = False + if len(tokens) > 2 and tokens[2].type == TokenType.SCOPE_TAG: + scope = tokens[2].value + self.pos += 1 + continue + + # Check for repeatdelay + if tokens[0].type == TokenType.REPEATDELAY_KW: + stmt = self._parse_command(tokens, line) + if stmt: + body_statements.append(stmt) + self.pos += 1 + continue + + # Scope tag on its own line + if tokens[0].type == TokenType.SCOPE_TAG and len(tokens) == 1: + scope = tokens[0].value + self.pos += 1 + continue + + # Parse statement — this may advance self.pos for multi-line constructs + stmts = self._parse_statements_at_current() + body_statements.extend(stmts) + + if not found_close: + self.errors.warning( + f"Unclosed event block starting at line {block_line}", + self.filename, block_line, + ) + + # Determine event name from first identifier if still unnamed + if is_init and event_name == "" and rest: + for t in rest: + if t.type == TokenType.IDENTIFIER and t.value.lower() not in _INIT_COMMANDS: + event_name = t.value + is_init = False + break + + return EventBlock( + name=event_name, + scope=scope, + body=body_statements, + line=block_line, + is_init=is_init, + ) + + def _extract_event_header(self, tokens: list[Token]) -> tuple[str, str, list[Token]]: + """Extract event name and scope from tokens after {.""" + name = "" + scope = "" + rest = list(tokens) + + if rest and rest[0].type == TokenType.SCOPE_TAG: + scope = rest[0].value + rest = rest[1:] + + if rest and rest[0].type == TokenType.IDENTIFIER: + candidate = rest[0].value + if candidate.lower() not in _INIT_COMMANDS: + name = candidate + rest = rest[1:] + + if rest and rest[0].type == TokenType.SCOPE_TAG: + scope = rest[0].value + rest = rest[1:] + + return name, scope, rest + + def _parse_statements_at_current(self) -> list[Statement]: + """Parse one or more statements starting at self.pos. + + Advances self.pos past all consumed lines. + Returns list of statements parsed. + """ + line = self.current_line() + tokens = self._non_newline_tokens(line) + + if not tokens: + self.pos += 1 + return [] + + first = tokens[0] + + # If statement — may consume multiple lines + if first.type == TokenType.IF_KW: + result = self._parse_if_statement() + return [result] if result else [] + + # Else — stray else (should have been consumed by if parsing) + if first.type == TokenType.ELSE_KW: + self.pos += 1 + return [] + + # Open brace on its own — could be a stray brace block (skip it) + if first.type == TokenType.OPEN_BRACE: + # Parse as a nested brace block and return the contents + stmts = self._consume_brace_block() + return stmts + + # Regular command + stmt = self._parse_command(tokens, line) + self.pos += 1 + return [stmt] if stmt else [] + + def _parse_if_statement(self) -> IfBlock | None: + """Parse an if statement starting at self.pos. + + Handles: + - Guard style: if COND (bare, no braces) + - Inline: if ( COND ) command + - Block: if ( COND ) { ... } else { ... } + - if(...) { ... } else { ... } + + Advances self.pos past all consumed lines. + """ + line = self.current_line() + tokens = self._non_newline_tokens(line) + # tokens[0] is IF_KW + rest = tokens[1:] + + # Determine if parenthesized + is_paren = rest and rest[0].type == TokenType.OPEN_PAREN + + if is_paren: + cond_tokens, after_cond = self._extract_paren_group(rest) + condition = self._parse_condition(cond_tokens) + inline_tokens = self._tokens_after_condition(after_cond) + + if inline_tokens: + # Inline: if ( cond ) command — on same line + body_stmt = self._parse_command(inline_tokens, line) + body = [body_stmt] if body_stmt else [] + self.pos += 1 # consume the if line + + # Check for else + else_body = self._try_parse_else() + + return IfBlock( + condition=condition, + body=body, + else_body=else_body, + guard_style=False, + line=line.line_number, + ) + + self.pos += 1 # consume the if line + + # Check if next line starts with { + if self.pos < len(self.lexed.lines): + next_tokens = self._non_newline_tokens(self.lexed.lines[self.pos]) + if next_tokens and next_tokens[0].type == TokenType.OPEN_BRACE: + body = self._consume_brace_block() + else_body = self._try_parse_else() + return IfBlock( + condition=condition, + body=body, + else_body=else_body, + guard_style=False, + line=line.line_number, + ) + + # No braces and no inline — guard style + return IfBlock( + condition=condition, + body=[], + guard_style=True, + line=line.line_number, + ) + else: + # Bare if: if VAR equals VALUE or if !VAR + condition = self._parse_condition(rest) + self.pos += 1 # consume the if line + + # Guard-style + return IfBlock( + condition=condition, + body=[], + guard_style=True, + line=line.line_number, + ) + + def _try_parse_else(self) -> list[Statement]: + """Try to parse an else clause. Advances self.pos if else found.""" + if self.pos >= len(self.lexed.lines): + return [] + + line = self.current_line() + tokens = self._non_newline_tokens(line) + + if not tokens or tokens[0].type != TokenType.ELSE_KW: + return [] + + rest = tokens[1:] + + # else if (...) + if rest and rest[0].type == TokenType.IF_KW: + # Don't consume this line — _parse_if_statement will consume it + # But we need to adjust: the "else" is on this line, "if" is too + # Synthesize: consume this line, re-parse as if + self.pos += 1 # consume "else" + # But wait, the if is on the same line as else + # We need to create a synthetic if from the rest tokens + # Actually, let's back up: the entire "else if (...)" is on one line + # We need to parse the if part + inner_cond_tokens = rest[1:] # skip the IF_KW + is_paren = inner_cond_tokens and inner_cond_tokens[0].type == TokenType.OPEN_PAREN + if is_paren: + cond_tokens, after_cond = self._extract_paren_group(inner_cond_tokens) + condition = self._parse_condition(cond_tokens) + inline = self._tokens_after_condition(after_cond) + + if inline: + body_stmt = self._parse_command(inline, line) + body = [body_stmt] if body_stmt else [] + else_body = self._try_parse_else() + return [IfBlock(condition=condition, body=body, else_body=else_body, line=line.line_number)] + + # Check for { on next line + if self.pos < len(self.lexed.lines): + next_tokens = self._non_newline_tokens(self.lexed.lines[self.pos]) + if next_tokens and next_tokens[0].type == TokenType.OPEN_BRACE: + body = self._consume_brace_block() + else_body = self._try_parse_else() + return [IfBlock(condition=condition, body=body, else_body=else_body, line=line.line_number)] + + return [IfBlock(condition=condition, body=[], guard_style=True, line=line.line_number)] + else: + condition = self._parse_condition(inner_cond_tokens) + return [IfBlock(condition=condition, body=[], guard_style=True, line=line.line_number)] + + # else { ... } + if not rest: + self.pos += 1 # consume "else" line + if self.pos < len(self.lexed.lines): + next_tokens = self._non_newline_tokens(self.lexed.lines[self.pos]) + if next_tokens and next_tokens[0].type == TokenType.OPEN_BRACE: + return self._consume_brace_block() + return [] + + # else command (inline) + self.pos += 1 + cmd = self._parse_command(rest, line) + return [cmd] if cmd else [] + + def _consume_brace_block(self) -> list[Statement]: + """Consume a { ... } block, returning the statements inside. + + Expects self.pos to point at the line containing {. + Advances self.pos past the closing }. + """ + if self.pos >= len(self.lexed.lines): + return [] + + line = self.current_line() + tokens = self._non_newline_tokens(line) + if not tokens or tokens[0].type != TokenType.OPEN_BRACE: + return [] + + self.pos += 1 # skip { + stmts: list[Statement] = [] + + while self.pos < len(self.lexed.lines): + line = self.current_line() + tokens = self._non_newline_tokens(line) + + if not tokens: + self.pos += 1 + continue + + # Closing brace + if tokens[0].type == TokenType.CLOSE_BRACE: + self.pos += 1 + break + + # Parse statements (may be multi-line if/else) + new_stmts = self._parse_statements_at_current() + stmts.extend(new_stmts) + + return stmts + + def _parse_condition(self, tokens: list[Token]) -> Condition: + """Parse condition from tokens.""" + if not tokens: + return Condition(left=Literal("true"), operator="equals", right=Literal("true")) + + # Handle negation: !VAR + negated = False + if tokens[0].type == TokenType.BANG: + negated = True + tokens = tokens[1:] + + if not tokens: + return Condition(left=Literal("true"), operator="equals", right=Literal("true"), negated=negated) + + # Single token: if VAR or if !VAR + if len(tokens) == 1: + left = self._token_to_expression(tokens[0]) + return Condition(left=left, operator="truthy", right=Literal(""), negated=negated) + + # Find operator token + op_idx = -1 + for i, t in enumerate(tokens): + if t.type == TokenType.OPERATOR: + op_idx = i + break + if t.type == TokenType.IDENTIFIER and t.value.lower() in CONDITION_KEYWORDS: + op_idx = i + break + + if op_idx == -1: + left = self._tokens_to_expression(tokens) + return Condition(left=left, operator="truthy", right=Literal(""), negated=negated) + + left_tokens = tokens[:op_idx] + op_token = tokens[op_idx] + right_tokens = tokens[op_idx + 1:] + + left = self._tokens_to_expression(left_tokens) + right = self._tokens_to_expression(right_tokens) if right_tokens else Literal("") + op = op_token.value.lower() if op_token.type == TokenType.IDENTIFIER else op_token.value + + return Condition(left=left, operator=op, right=right, negated=negated, line=tokens[0].line if tokens else 0) + + def _parse_command(self, tokens: list[Token], line: LexedLine) -> Command: + """Parse a command from tokens.""" + first = tokens[0] + cmd_name = first.value + args: list[Expression] = [] + + i = 1 + while i < len(tokens): + t = tokens[i] + if t.type == TokenType.NEWLINE: + break + expr, new_i = self._parse_expression_at(tokens, i) + if expr: + args.append(expr) + i = new_i if new_i > i else i + 1 + + return Command(name=cmd_name, args=args, line=line.line_number, raw_line=line.raw) + + def _parse_expression_at(self, tokens: list[Token], i: int) -> tuple[Expression | None, int]: + """Parse an expression starting at token index i.""" + if i >= len(tokens): + return None, i + + t = tokens[i] + + if t.type == TokenType.NEWLINE: + return None, i + + if t.type == TokenType.DOLLAR_FUNC: + return self._parse_dollar_func(tokens, i) + + if t.type == TokenType.DOLLAR_REF: + return VariableRef(f"${t.value}", line=t.line), i + 1 + + if t.type == TokenType.OPEN_PAREN: + return self._parse_paren_expr(tokens, i) + + if t.type in (TokenType.NUMBER, TokenType.HP_LITERAL, TokenType.PERCENTAGE): + return Literal(t.value, line=t.line), i + 1 + + if t.type == TokenType.STRING: + return Literal(f'"{t.value}"', line=t.line), i + 1 + + if t.type == TokenType.BACKTICK_STRING: + return Literal(f"`{t.value}`", line=t.line), i + 1 + + if t.type == TokenType.IDENTIFIER: + return VariableRef(t.value, line=t.line), i + 1 + + if t.type == TokenType.BANG: + expr, ni = self._parse_expression_at(tokens, i + 1) + if expr: + return VariableRef(f"!{_expr_text(expr)}", line=t.line), ni + return None, i + 1 + + if t.type == TokenType.SCOPE_TAG: + return Literal(f"[{t.value}]", line=t.line), i + 1 + + return Literal(t.value, line=t.line), i + 1 + + def _parse_dollar_func(self, tokens: list[Token], i: int) -> tuple[DollarFunc, int]: + """Parse $func(...) starting at the DOLLAR_FUNC token.""" + func_name = tokens[i].value + line = tokens[i].line + i += 1 + if i >= len(tokens) or tokens[i].type != TokenType.OPEN_PAREN: + return DollarFunc(func_name, [], line=line), i + + i += 1 # skip ( + args: list[Expression] = [] + depth = 1 + + while i < len(tokens) and depth > 0: + t = tokens[i] + if t.type == TokenType.NEWLINE: + break + if t.type == TokenType.OPEN_PAREN: + depth += 1 + i += 1 + continue + if t.type == TokenType.CLOSE_PAREN: + depth -= 1 + if depth == 0: + i += 1 + break + i += 1 + continue + if t.type == TokenType.COMMA and depth == 1: + i += 1 + continue + + expr, ni = self._parse_expression_at(tokens, i) + if expr: + args.append(expr) + i = ni if ni > i else i + 1 + + return DollarFunc(func_name, args, line=line), i + + def _parse_paren_expr(self, tokens: list[Token], i: int) -> tuple[Expression, int]: + """Parse (x,y,z) vector or parenthesized expression.""" + start = i + i += 1 # skip ( + inner_tokens: list[Token] = [] + depth = 1 + + while i < len(tokens) and depth > 0: + t = tokens[i] + if t.type == TokenType.NEWLINE: + break + if t.type == TokenType.OPEN_PAREN: + depth += 1 + elif t.type == TokenType.CLOSE_PAREN: + depth -= 1 + if depth == 0: + i += 1 + break + inner_tokens.append(t) + i += 1 + + # Check if it's a vector: (X, Y, Z) + comma_count = sum(1 for t in inner_tokens if t.type == TokenType.COMMA) + if comma_count == 2: + parts: list[list[Token]] = [] + current: list[Token] = [] + for t in inner_tokens: + if t.type == TokenType.COMMA: + parts.append(current) + current = [] + else: + current.append(t) + parts.append(current) + + if len(parts) == 3: + x = self._tokens_to_expression(parts[0]) if parts[0] else Literal("0") + y = self._tokens_to_expression(parts[1]) if parts[1] else Literal("0") + z = self._tokens_to_expression(parts[2]) if parts[2] else Literal("0") + return VectorLiteral( + x=_expr_text(x), y=_expr_text(y), z=_expr_text(z), + line=tokens[start].line, + ), i + + if inner_tokens: + expr = self._tokens_to_expression(inner_tokens) + return expr, i + + return Literal("()", line=tokens[start].line), i + + def _tokens_to_expression(self, tokens: list[Token]) -> Expression: + """Convert a sequence of tokens to a single expression.""" + clean = [t for t in tokens if t.type != TokenType.NEWLINE] + if not clean: + return Literal("") + + if len(clean) == 1: + expr, _ = self._parse_expression_at(clean, 0) + return expr or Literal(clean[0].value) + + parts: list[Expression] = [] + i = 0 + while i < len(clean): + expr, ni = self._parse_expression_at(clean, i) + if expr: + parts.append(expr) + i = ni if ni > i else i + 1 + + if len(parts) == 1: + return parts[0] + return Concatenation(parts=parts, line=clean[0].line) + + def _extract_paren_group(self, tokens: list[Token]) -> tuple[list[Token], list[Token]]: + """Extract tokens inside balanced parens. Returns (inner, after).""" + if not tokens or tokens[0].type != TokenType.OPEN_PAREN: + return tokens, [] + + depth = 0 + inner: list[Token] = [] + for i, t in enumerate(tokens): + if t.type == TokenType.OPEN_PAREN: + depth += 1 + if depth == 1: + continue + elif t.type == TokenType.CLOSE_PAREN: + depth -= 1 + if depth == 0: + return inner, tokens[i + 1:] + if depth >= 1: + inner.append(t) + + return inner, [] + + def _tokens_after_condition(self, tokens: list[Token]) -> list[Token]: + """Get non-newline tokens after condition close paren.""" + return [t for t in tokens if t.type != TokenType.NEWLINE] + + def _token_to_expression(self, t: Token) -> Expression: + if t.type == TokenType.NUMBER: + return Literal(t.value, line=t.line) + if t.type == TokenType.STRING: + return Literal(f'"{t.value}"', line=t.line) + if t.type == TokenType.BACKTICK_STRING: + return Literal(f"`{t.value}`", line=t.line) + if t.type == TokenType.PERCENTAGE: + return Literal(t.value, line=t.line) + return VariableRef(t.value, line=t.line) + + +def _expr_text(expr: Expression) -> str: + if isinstance(expr, Literal): + return expr.value + if isinstance(expr, VariableRef): + return expr.name + if isinstance(expr, DollarFunc): + args = ", ".join(_expr_text(a) for a in expr.args) + return f"${expr.name}({args})" + if isinstance(expr, VectorLiteral): + return f"({expr.x},{expr.y},{expr.z})" + if isinstance(expr, Concatenation): + return " ".join(_expr_text(p) for p in expr.parts) + return str(expr) + + +from .lexer import CONDITION_KEYWORDS # noqa: E402 + +# Commands that appear in init blocks (not event names) +_INIT_COMMANDS = { + "const", "setvar", "setvard", "setvarg", "local", + "precache", "setmodel", "setidleanim", "setmoveanim", + "name", "hp", "gold", "race", "roam", "fly", + "width", "height", "gravity", "invincible", + "hearingsensitivity", "setmodelbody", "blood", + "volume", "weight", "desc", "movespeed", "stepsize", +} + + +def parse_script(lexed: LexedFile, preprocessed: PreprocessedFile, + errors: ErrorCollector) -> ScriptFile: + """Parse a lexed MSCScript file into an AST.""" + parser = Parser(lexed, preprocessed, errors) + return parser.parse() diff --git a/msc_transpiler/pipeline/preprocessor.py b/msc_transpiler/pipeline/preprocessor.py new file mode 100644 index 00000000..7615598b --- /dev/null +++ b/msc_transpiler/pipeline/preprocessor.py @@ -0,0 +1,86 @@ +"""Preprocessor: strips comments, extracts #include/#scope directives.""" + +from __future__ import annotations + +import re +from dataclasses import dataclass, field + +from ..ast_nodes import IncludeDirective, ScopeDirective + + +@dataclass +class PreprocessedLine: + """A source line after preprocessing.""" + text: str + original: str + line_number: int + + +@dataclass +class PreprocessedFile: + """Result of preprocessing a .script file.""" + filename: str + lines: list[PreprocessedLine] = field(default_factory=list) + includes: list[IncludeDirective] = field(default_factory=list) + scope_directive: ScopeDirective | None = None + + +_INCLUDE_RE = re.compile( + r"^#include\s+(?:\[(\w+)\]\s+)?(.+)$", re.IGNORECASE +) +_SCOPE_RE = re.compile(r"^#scope\s+(\w+)$", re.IGNORECASE) + + +def preprocess(source: str, filename: str = "") -> PreprocessedFile: + """Preprocess MSCScript source: strip comments, extract directives.""" + result = PreprocessedFile(filename=filename) + raw_lines = source.replace("\r\n", "\n").replace("\r", "\n").split("\n") + + for i, raw in enumerate(raw_lines, start=1): + original = raw + # Strip inline comments (// not inside quotes) + line = _strip_comment(raw) + stripped = line.strip() + + if not stripped: + continue + + # Check for #scope directive + m = _SCOPE_RE.match(stripped) + if m: + result.scope_directive = ScopeDirective(scope=m.group(1).lower(), line=i) + continue + + # Check for #include directive + m = _INCLUDE_RE.match(stripped) + if m: + scope = m.group(1) or "" + path = m.group(2).strip() + result.includes.append( + IncludeDirective(path=path, scope=scope.lower(), line=i) + ) + continue + + result.lines.append(PreprocessedLine(text=stripped, original=original, line_number=i)) + + return result + + +def _strip_comment(line: str) -> str: + """Strip // comments, but not inside quoted strings.""" + in_quote = False + quote_char = None + i = 0 + while i < len(line): + ch = line[i] + if in_quote: + if ch == quote_char: + in_quote = False + else: + if ch in ('"', "'", '`'): + in_quote = True + quote_char = ch + elif ch == '/' and i + 1 < len(line) and line[i + 1] == '/': + return line[:i] + i += 1 + return line diff --git a/msc_transpiler/tests/__init__.py b/msc_transpiler/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/msc_transpiler/tests/conftest.py b/msc_transpiler/tests/conftest.py new file mode 100644 index 00000000..a13b379c --- /dev/null +++ b/msc_transpiler/tests/conftest.py @@ -0,0 +1,27 @@ +"""Test fixtures for the MSCScript transpiler.""" + +import pytest +from pathlib import Path + +from msc_transpiler.errors import ErrorCollector +from msc_transpiler.pipeline.preprocessor import preprocess +from msc_transpiler.pipeline.lexer import lex_file +from msc_transpiler.pipeline.parser import parse_script +from msc_transpiler.pipeline.analyzer import analyze +from msc_transpiler.pipeline.codegen import generate + + +@pytest.fixture +def errors(): + return ErrorCollector() + + +def transpile_source(source: str, filename: str = "test.script") -> tuple[str, ErrorCollector]: + """Helper to transpile a source string and return (output, errors).""" + errors = ErrorCollector() + preprocessed = preprocess(source, filename) + lexed = lex_file(preprocessed) + ast = parse_script(lexed, preprocessed, errors) + ast = analyze(ast, errors) + output = generate(ast, errors) + return output, errors diff --git a/msc_transpiler/tests/test_as_compile.py b/msc_transpiler/tests/test_as_compile.py new file mode 100644 index 00000000..1a9ec99f --- /dev/null +++ b/msc_transpiler/tests/test_as_compile.py @@ -0,0 +1,310 @@ +"""AngelScript compilation tests — end-to-end transpile + compile. + +These tests take MSCScript source, run it through the full transpiler +pipeline, then compile the resulting AngelScript through the real AS +engine (via as_linter.exe) to catch type mismatches, bad signatures, +and other issues the text-level tests cannot see. + +Requires: as_linter.exe built at as_linter/build/Release/as_linter.exe + (or set AS_LINTER_EXE environment variable) +""" + +import pytest + +from msc_transpiler.linter import compile_source, linter_available +from .conftest import transpile_source + + +# Skip the entire module if the linter executable isn't available +pytestmark = pytest.mark.skipif( + not linter_available(), + reason="as_linter.exe not found — build it or set AS_LINTER_EXE", +) + + +def _transpile_and_compile(mscscript: str, filename: str = "test.script") -> tuple: + """Transpile MSCScript source, then compile the result through AS engine. + + Returns (as_source, compile_result, transpiler_errors). + """ + as_source, transpiler_errors = transpile_source(mscscript, filename) + compile_result = compile_source(as_source) + return as_source, compile_result, transpiler_errors + + +# ========================================================================= +# Basic structure tests — ensure the transpiler's output compiles at all +# ========================================================================= + +class TestBasicCompilation: + """Verify that fundamental transpiler output structures compile.""" + + def test_empty_script(self): + """A minimal script with just an init block should compile.""" + src, result, _ = _transpile_and_compile("{\nconst MY_VAL 42\n}") + assert result.success, f"Empty script failed:\n{result.error_summary()}\n\nSource:\n{src}" + + @pytest.mark.xfail(reason="SetHealth/SetMaxHealth/SetName not yet methods on CGameScript") + def test_spawn_event(self): + """A simple spawn event with hp/name should compile.""" + msc = """\ +{ +eventname spawn +hp 50/50 +name TestMonster +}""" + src, result, _ = _transpile_and_compile(msc) + assert result.success, f"Spawn event failed:\n{result.error_summary()}\n\nSource:\n{src}" + + @pytest.mark.xfail(reason="SetHealth not yet a method on CGameScript") + def test_namespace_and_class(self): + """Output should have namespace MS and class inheriting CGameScript.""" + msc = "{ game_spawn\nhp 50\n}" + src, result, _ = _transpile_and_compile(msc, "test_monster.script") + assert result.success, f"Namespace/class failed:\n{result.error_summary()}\n\nSource:\n{src}" + assert "namespace MS" in src + assert "CGameScript" in src + + +# ========================================================================= +# Variable system tests +# ========================================================================= + +class TestVariables: + """Verify that variable declarations and usage compile correctly.""" + + def test_const_int(self): + msc = "{\nconst DAMAGE 10\n}" + src, result, _ = _transpile_and_compile(msc) + assert result.success, f"const int failed:\n{result.error_summary()}\n\nSource:\n{src}" + + def test_const_string(self): + msc = '{\nconst SOUND monsters/hit.wav\n}' + src, result, _ = _transpile_and_compile(msc) + assert result.success, f"const string failed:\n{result.error_summary()}\n\nSource:\n{src}" + + def test_setvard(self): + msc = "{\nsetvard MY_VAR 42\nsetvard MY_STR hello\n}" + src, result, _ = _transpile_and_compile(msc) + assert result.success, f"setvard failed:\n{result.error_summary()}\n\nSource:\n{src}" + + def test_local_variable(self): + msc = "{ game_spawn\nlocal MY_LOCAL 42\n}" + src, result, _ = _transpile_and_compile(msc) + assert result.success, f"local var failed:\n{result.error_summary()}\n\nSource:\n{src}" + + +# ========================================================================= +# Control flow tests +# ========================================================================= + +class TestControlFlow: + """Verify if/else and other control flow compiles.""" + + @pytest.mark.xfail(reason="HEALTH/SetHealth symbols not on CGameScript yet") + def test_if_else(self): + msc = """\ +{ test_event +if ( HEALTH equals 0 ) +{ +hp 50 +} +else +{ +hp 100 +} +}""" + src, result, _ = _transpile_and_compile(msc) + assert result.success, f"if/else failed:\n{result.error_summary()}\n\nSource:\n{src}" + + +# ========================================================================= +# Math and expressions +# ========================================================================= + +class TestExpressions: + """Verify math operations and dollar functions compile.""" + + def test_math_ops(self): + msc = """\ +{ game_spawn +setvard X 10 +add X 5 +subtract X 2 +multiply X 3 +}""" + src, result, _ = _transpile_and_compile(msc) + assert result.success, f"Math ops failed:\n{result.error_summary()}\n\nSource:\n{src}" + + def test_dollar_rand(self): + msc = "{\nsetvard MY_VAR $rand(1,10)\n}" + src, result, _ = _transpile_and_compile(msc) + assert result.success, f"$rand failed:\n{result.error_summary()}\n\nSource:\n{src}" + + +# ========================================================================= +# Game API usage tests +# ========================================================================= + +class TestGameAPI: + """Verify that generated calls to registered game APIs compile.""" + + @pytest.mark.xfail(reason="GetOwner() not a method on CGameScript yet") + def test_vector_literal(self): + msc = "{ game_spawn\nsetorigin ent_me (100,200,300)\n}" + src, result, _ = _transpile_and_compile(msc) + assert result.success, f"Vector literal failed:\n{result.error_summary()}\n\nSource:\n{src}" + + @pytest.mark.xfail(reason="callevent generates call to undefined method") + def test_callevent(self): + msc = "{ game_spawn\ncallevent my_custom_event\n}" + src, result, _ = _transpile_and_compile(msc) + assert result.success, f"callevent failed:\n{result.error_summary()}\n\nSource:\n{src}" + + +# ========================================================================= +# Raw AngelScript compilation tests (no transpiler — test linter directly) +# ========================================================================= + +class TestRawAngelScript: + """Compile hand-written AngelScript to verify the linter's bindings.""" + + def test_minimal_script(self): + """Bare minimum AS file should compile.""" + result = compile_source("void main() {}") + assert result.success, f"Minimal script failed:\n{result.error_summary()}" + + def test_vector3_usage(self): + """Vector3 type and methods should be available.""" + src = """\ +void main() { + Vector3 v(1.0f, 2.0f, 3.0f); + float len = v.Length(); + Vector3 n = v.Normalize(); + Vector3 sum = v + n; +} +""" + result = compile_source(src) + assert result.success, f"Vector3 usage failed:\n{result.error_summary()}" + + def test_math_functions(self): + """Math functions and constants should be available.""" + src = """\ +void main() { + float s = sin(PI / 2.0f); + float c = cos(0.0f); + float r = sqrt(4.0f); + float a = abs(-5.0f); + float lo = min(1.0f, 2.0f); + float hi = max(1.0f, 2.0f); +} +""" + result = compile_source(src) + assert result.success, f"Math functions failed:\n{result.error_summary()}" + + def test_string_functions(self): + """String type and utilities should work.""" + src = """\ +void main() { + string s = "hello world"; + int len = s.length(); + string upper = s; +} +""" + result = compile_source(src) + assert result.success, f"String functions failed:\n{result.error_summary()}" + + def test_game_api_types(self): + """Core game types should be declared.""" + src = """\ +void main() { + float t = GetGameTime(); + string map = GetMapName(); + int pc = GetPlayerCount(); +} +""" + result = compile_source(src) + assert result.success, f"Game API types failed:\n{result.error_summary()}" + + def test_entity_types_declared(self): + """Entity type hierarchy should be available for declaration.""" + src = """\ +void main() { + CBaseEntity@ ent = null; + CBasePlayer@ player = null; + CBaseMonster@ monster = null; + CMSMonster@ msmon = null; + CBasePlayerItem@ item = null; + CBasePlayerWeapon@ weapon = null; +} +""" + result = compile_source(src) + assert result.success, f"Entity types failed:\n{result.error_summary()}" + + def test_cgamescript_inheritance(self): + """Scripts should be able to inherit from CGameScript.""" + src = """\ +class MyScript : CGameScript { + MyScript() { + SetVar("test", "value"); + } + + void OnSpawn() override { + string val = GetVar("test"); + } +} +""" + result = compile_source(src) + assert result.success, f"CGameScript inheritance failed:\n{result.error_summary()}" + + def test_enums_available(self): + """Game enums should be available.""" + src = """\ +void main() { + MessageColor c = White; + MonsterState s = MONSTERSTATE_IDLE; + Gender g = GENDER_MALE; + ScriptMode m = Legacy; +} +""" + result = compile_source(src) + assert result.success, f"Enums failed:\n{result.error_summary()}" + + def test_coroutine_functions(self): + """Coroutine functions should be declared.""" + src = """\ +void main() { + int id = StartCoroutine("MyCoroutine"); + bool running = IsCoroutineRunning(id); + StopCoroutine(id); +} +""" + result = compile_source(src) + assert result.success, f"Coroutine functions failed:\n{result.error_summary()}" + + def test_casting_functions(self): + """Casting functions should be declared.""" + src = """\ +void main() { + CBaseEntity@ ent = null; + CBasePlayer@ player = ToPlayer(ent); + CBaseMonster@ monster = ToMonster(ent); + CMSMonster@ msmon = ToMSMonster(ent); + CBaseEntity@ back = ToEntity(player); +} +""" + result = compile_source(src) + assert result.success, f"Casting functions failed:\n{result.error_summary()}" + + def test_render_constants(self): + """Render and damage constants should be available.""" + src = """\ +void main() { + int rm = kRenderNormal; + int rt = kRenderTransTexture; + int dn = DAMAGE_NO; + int dy = DAMAGE_YES; +} +""" + result = compile_source(src) + assert result.success, f"Render constants failed:\n{result.error_summary()}" diff --git a/msc_transpiler/tests/test_codegen.py b/msc_transpiler/tests/test_codegen.py new file mode 100644 index 00000000..d31ce2ca --- /dev/null +++ b/msc_transpiler/tests/test_codegen.py @@ -0,0 +1,214 @@ +"""Tests for the code generation stage.""" + +from .conftest import transpile_source + + +def test_simple_spawn(): + source = """\ +{ +eventname spawn +hp 50/50 +name Bunny +race neutral +}""" + output, errors = transpile_source(source) + assert "void OnSpawn() override" in output + assert "SetHealth(50)" in output + assert "SetMaxHealth(50)" in output + assert 'SetName("Bunny")' in output + assert 'SetRace("neutral")' in output + assert not errors.has_errors + + +def test_member_variables(): + source = """\ +{ +setvard MY_VAR 42 +setvard MY_STR hello +} +{ game_spawn +hp MY_VAR +}""" + output, errors = transpile_source(source) + assert "int MY_VAR;" in output + assert "string MY_STR;" in output + + +def test_const_declaration(): + source = """\ +{ +const DAMAGE 10 +const SOUND monsters/hit.wav +}""" + output, errors = transpile_source(source) + assert "DAMAGE = 10;" in output + assert 'SOUND = "monsters/hit.wav";' in output + + +def test_local_variable(): + source = """\ +{ game_spawn +local MY_LOCAL 42 +}""" + output, errors = transpile_source(source) + assert "int MY_LOCAL = 42;" in output + + +def test_if_else_codegen(): + source = """\ +{ test_event +if ( X equals Y ) +{ +hp 50 +} +else +{ +hp 100 +} +}""" + output, errors = transpile_source(source) + assert "if (" in output + assert "else" in output + + +def test_dollar_rand(): + source = """\ +{ +setvard MY_VAR $rand(1,10) +}""" + output, errors = transpile_source(source) + assert "RandomInt(1, 10)" in output + + +def test_include_output(): + source = """\ +#include monsters/base_monster +{ game_spawn +hp 50 +}""" + output, errors = transpile_source(source) + assert '#include "monsters/base_monster.as"' in output + + +def test_namespace_and_class(): + output, errors = transpile_source("{ game_spawn\nhp 50\n}", "bunny.script") + assert "namespace MS" in output + assert "class Bunny : CGameScript" in output + + +def test_callevent(): + source = """\ +{ game_spawn +callevent my_custom_event +}""" + output, errors = transpile_source(source) + assert "my_custom_event();" in output + + +def test_callevent_with_delay(): + source = """\ +{ game_spawn +callevent 2.0 my_event +}""" + output, errors = transpile_source(source) + assert 'ScheduleDelayedEvent(2.0, "my_event")' in output + + +def test_math_operations(): + source = """\ +{ game_spawn +add MY_VAR 5 +subtract MY_VAR 2 +multiply MY_VAR 3 +}""" + output, errors = transpile_source(source) + assert "MY_VAR += 5;" in output + assert "MY_VAR -= 2;" in output + assert "MY_VAR *= 3;" in output + + +def test_entity_references(): + source = """\ +{ game_spawn +deleteent ent_me +}""" + output, errors = transpile_source(source) + assert "GetOwner()" in output + + +def test_repeatdelay_timer(): + source = """\ +{ +repeatdelay 4 +playanim once hop +}""" + output, errors = transpile_source(source) + assert "OnRepeatTimer" in output + assert "SetRepeatDelay(4)" in output + + +def test_vec_literal(): + source = """\ +{ game_spawn +setorigin ent_me (100,200,300) +}""" + output, errors = transpile_source(source) + assert "Vector3(100, 200, 300)" in output + + + +def test_command_aliases(): + source = """\ +{ game_spawn +subract COUNT 2 +infomessage all test +clienteffect remove all 7 +usetrig foo +cosnt TEST_CONST 1 +setvarad FOO 1 +removesetvard BAR +playrandomsoundcl 0 sound/a.wav +hearingsensetivity 10 +hearingsensitivty 11 +}""" + output, _ = transpile_source(source) + assert "COUNT -= 2;" in output + assert 'SendInfoMsg("all", "test")' in output + assert "ClientEffect(" in output + assert 'UseTrigger("foo")' in output + assert "const int TEST_CONST = 1;" in output + assert "FOO = 1;" in output + assert "TODO: removesetvard BAR" in output + assert "EmitSound(GetOwner(), 0," in output + assert "SetHearingSensitivity(10);" in output + assert "SetHearingSensitivity(11);" in output + + +def test_new_top_frequency_translators(): + source = """\ +{ game_spawn +setlock ent_me 1 +solidifyprojectile +setskin 3 +setmodelskin 4 +setanimlegs run +gaitframerate 0.5 +lightgamma 2 +}""" + output, _ = transpile_source(source) + assert "SetItemLockStrength(GetOwner(), 1);" in output + assert "SolidifyProjectile(GetOwner());" in output + assert "SetEntitySkin(GetOwner(), 3);" in output + assert "SetEntityModelSkin(GetOwner(), 4);" in output + assert 'SetAnimLegs(GetOwner(), "run");' in output + assert "SetGaitFrameRate(GetOwner(), 0.5);" in output + assert "SetWorldLightGamma(2);" in output + +def test_dollar_func_unquotes_function_name(): + source = """\ +{ +setvard RESULT $func(func_check_ammo_strings,DQ_ITEM_REQUIREMENT) +}""" + output, _ = transpile_source(source) + assert 'RESULT = func_check_ammo_strings(DQ_ITEM_REQUIREMENT);' in output + assert '"func_check_ammo_strings"(' not in output diff --git a/msc_transpiler/tests/test_lexer.py b/msc_transpiler/tests/test_lexer.py new file mode 100644 index 00000000..13b45ee6 --- /dev/null +++ b/msc_transpiler/tests/test_lexer.py @@ -0,0 +1,91 @@ +"""Tests for the lexer stage.""" + +from msc_transpiler.pipeline.preprocessor import preprocess +from msc_transpiler.pipeline.lexer import lex_file, TokenType + + +def lex(source: str): + pp = preprocess(source, "test.script") + return lex_file(pp) + + +def test_empty(): + result = lex("") + assert len(result.lines) == 0 + + +def test_simple_command(): + result = lex("hp 50") + assert len(result.lines) == 1 + tokens = [t for t in result.lines[0].tokens if t.type != TokenType.NEWLINE] + assert tokens[0].type == TokenType.IDENTIFIER + assert tokens[0].value == "hp" + assert tokens[1].type == TokenType.NUMBER + assert tokens[1].value == "50" + + +def test_hp_literal(): + result = lex("hp 50/50") + tokens = [t for t in result.lines[0].tokens if t.type != TokenType.NEWLINE] + assert tokens[1].type == TokenType.HP_LITERAL + assert tokens[1].value == "50/50" + + +def test_percentage(): + result = lex("const CHANCE 75%") + tokens = [t for t in result.lines[0].tokens if t.type != TokenType.NEWLINE] + assert tokens[2].type == TokenType.PERCENTAGE + assert tokens[2].value == "75%" + + +def test_dollar_func(): + result = lex("local X $rand(1,10)") + tokens = [t for t in result.lines[0].tokens if t.type != TokenType.NEWLINE] + assert tokens[2].type == TokenType.DOLLAR_FUNC + assert tokens[2].value == "rand" + + +def test_scope_tag(): + result = lex("[server]") + tokens = [t for t in result.lines[0].tokens if t.type != TokenType.NEWLINE] + assert tokens[0].type == TokenType.SCOPE_TAG + assert tokens[0].value == "server" + + +def test_if_keyword(): + result = lex("if X equals Y") + tokens = [t for t in result.lines[0].tokens if t.type != TokenType.NEWLINE] + assert tokens[0].type == TokenType.IF_KW + + +def test_braces(): + result = lex("{ game_spawn") + tokens = [t for t in result.lines[0].tokens if t.type != TokenType.NEWLINE] + assert tokens[0].type == TokenType.OPEN_BRACE + assert tokens[1].type == TokenType.IDENTIFIER + assert tokens[1].value == "game_spawn" + + +def test_quoted_string(): + result = lex('name "Skeleton Warrior"') + tokens = [t for t in result.lines[0].tokens if t.type != TokenType.NEWLINE] + assert tokens[1].type == TokenType.STRING + assert tokens[1].value == "Skeleton Warrior" + + +def test_comment_stripping(): + pp = preprocess("hp 50 // comment here", "test.script") + assert pp.lines[0].text == "hp 50" + + +def test_include_extraction(): + pp = preprocess("#include monsters/base_monster", "test.script") + assert len(pp.includes) == 1 + assert pp.includes[0].path == "monsters/base_monster" + assert len(pp.lines) == 0 + + +def test_scope_directive(): + pp = preprocess("#scope server", "test.script") + assert pp.scope_directive is not None + assert pp.scope_directive.scope == "server" diff --git a/msc_transpiler/tests/test_parser.py b/msc_transpiler/tests/test_parser.py new file mode 100644 index 00000000..f142c233 --- /dev/null +++ b/msc_transpiler/tests/test_parser.py @@ -0,0 +1,105 @@ +"""Tests for the parser stage.""" + +from msc_transpiler.errors import ErrorCollector +from msc_transpiler.pipeline.preprocessor import preprocess +from msc_transpiler.pipeline.lexer import lex_file +from msc_transpiler.pipeline.parser import parse_script +from msc_transpiler.ast_nodes import Command, IfBlock + + +def parse(source: str): + errors = ErrorCollector() + pp = preprocess(source, "test.script") + lexed = lex_file(pp) + return parse_script(lexed, pp, errors), errors + + +def test_simple_event_block(): + ast, errors = parse("{ game_spawn\nhp 50\n}") + assert len(ast.events) == 1 + assert ast.events[0].name == "game_spawn" + assert len(ast.events[0].body) == 1 + + +def test_init_block(): + ast, errors = parse("{\nconst HP 50\nsetvard GOLD 10\n}") + assert len(ast.events) == 1 + assert ast.events[0].is_init + + +def test_eventname_keyword(): + ast, errors = parse("{\neventname spawn\nhp 50\n}") + assert ast.events[0].name == "spawn" + + +def test_include_preserved(): + ast, errors = parse("#include monsters/base\n{ game_spawn\n}") + assert len(ast.includes) == 1 + assert ast.includes[0].path == "monsters/base" + + +def test_if_block_with_braces(): + source = """\ +{ test_event +if ( X equals Y ) +{ +hp 50 +} +}""" + ast, errors = parse(source) + assert len(ast.events) == 1 + body = ast.events[0].body + assert len(body) >= 1 + assert isinstance(body[0], IfBlock) + assert not body[0].guard_style + + +def test_if_else_block(): + source = """\ +{ test_event +if ( X equals Y ) +{ +hp 50 +} +else +{ +hp 100 +} +}""" + ast, errors = parse(source) + body = ast.events[0].body + assert isinstance(body[0], IfBlock) + assert len(body[0].body) >= 1 + assert len(body[0].else_body) >= 1 + + +def test_guard_style_if(): + source = """\ +{ test_event +if X equals Y +hp 50 +}""" + ast, errors = parse(source) + body = ast.events[0].body + assert isinstance(body[0], IfBlock) + assert body[0].guard_style + + +def test_multiple_events(): + source = """\ +{ game_spawn +hp 50 +} +{ game_death +gold 10 +}""" + ast, errors = parse(source) + assert len(ast.events) == 2 + assert ast.events[0].name == "game_spawn" + assert ast.events[1].name == "game_death" + + +def test_scope_directive(): + ast, errors = parse("#scope server\n{ game_spawn\n}") + assert ast.scope_directive is not None + assert ast.scope_directive.scope == "server" diff --git a/msc_transpiler/types/__init__.py b/msc_transpiler/types/__init__.py new file mode 100644 index 00000000..213d8efd --- /dev/null +++ b/msc_transpiler/types/__init__.py @@ -0,0 +1 @@ +"""Type system for the transpiler.""" diff --git a/scripts/angelscript/NPCs/base_arrow_storage.as b/scripts/angelscript/NPCs/base_arrow_storage.as new file mode 100644 index 00000000..ef1375fa --- /dev/null +++ b/scripts/angelscript/NPCs/base_arrow_storage.as @@ -0,0 +1,208 @@ +#pragma context server + +namespace MS +{ + +class BaseArrowStorage : CGameScript +{ + string ANIM_CHAT; + string ANIM_NO; + string ANIM_YES; + string ARROW_NAMES; + string BOLT_NAMES; + int CHECK_LOOP; + string CUSTOMER_ID; + string SAYTEXT_GIVE_TICKET; + string SAYTEXT_NOTICKET; + string SAYTEXT_NOT_ENOUGH; + string SAYTEXT_REDEEMTICKET; + + BaseArrowStorage() + { + ARROW_NAMES = "proj_arrow_bluntwooden;proj_arrow_broadhead;proj_arrow_fire;proj_arrow_frost;proj_arrow_gholy;proj_arrow_holy;proj_arrow_jagged;proj_arrow_poison;proj_arrow_silvertipped;proj_arrow_wooden;"; + BOLT_NAMES = "proj_bolt_fire;proj_bolt_iron;proj_bolt_silver;proj_bolt_steel;proj_bolt_wooden"; + SAYTEXT_GIVE_TICKET = "There you go. You can redeem that ticket with most any fletcher in the land."; + SAYTEXT_REDEEMTICKET = "Okay, here's your ammo."; + SAYTEXT_NOT_ENOUGH = "Sorry, you don't have enough of those for me to sell you the ticket."; + SAYTEXT_NOTICKET = "Sorry, I did not recieve the ticket."; + ANIM_CHAT = "none"; + ANIM_YES = "none"; + ANIM_NO = "none"; + } + + void game_menu_getoptions() + { + CUSTOMER_ID = param1; + check_for_item("proj_arrow_bluntwooden", 1); + check_for_item("proj_arrow_broadhead", 1); + check_for_item("proj_arrow_fire", 2); + check_for_item("proj_arrow_frost", 10); + check_for_item("proj_arrow_gholy", 20); + check_for_item("proj_arrow_holy", 5); + check_for_item("proj_arrow_jagged", 5); + check_for_item("proj_arrow_poison", 5); + check_for_item("proj_arrow_silvertipped", 1); + check_for_item("proj_arrow_wooden", 1); + check_for_item("proj_bolt_fire", 30); + check_for_item("proj_bolt_iron", 10); + check_for_item("proj_bolt_silver", 20); + check_for_item("proj_bolt_steel", 10); + check_for_item("proj_bolt_wooden", 1); + if (!(ItemExists(param1, "item_tk_proj"))) return; + CHECK_LOOP = 0; + string N_NAMES = GetTokenCount(ARROW_NAMES, ";"); + for (int i = 0; i < N_NAMES; i++) + { + list_tickets(ARROW_NAMES); + } + CHECK_LOOP = 0; + string N_NAMES = GetTokenCount(BOLT_NAMES, ";"); + for (int i = 0; i < N_NAMES; i++) + { + list_tickets(BOLT_NAMES); + } + } + + void gticket_proj_bolt_fire() + { + give_ticket("proj_bolt_fire"); + } + + void gticket_proj_bolt_iron() + { + give_ticket("proj_bolt_iron"); + } + + void gticket_proj_bolt_silver() + { + give_ticket("proj_bolt_silver"); + } + + void gticket_proj_bolt_steel() + { + give_ticket("proj_bolt_steel"); + } + + void gticket_proj_bolt_wooden() + { + give_ticket("proj_bolt_wooden"); + } + + void gticket_proj_arrow_bluntwooden() + { + give_ticket("proj_arrow_bluntwooden"); + } + + void gticket_proj_arrow_broadhead() + { + give_ticket("proj_arrow_broadhead"); + } + + void gticket_proj_arrow_fire() + { + give_ticket("proj_arrow_fire"); + } + + void gticket_proj_arrow_frost() + { + give_ticket("proj_arrow_frost"); + } + + void gticket_proj_arrow_gholy() + { + give_ticket("proj_arrow_gholy"); + } + + void gticket_proj_arrow_holy() + { + give_ticket("proj_arrow_holy"); + } + + void gticket_proj_arrow_jagged() + { + give_ticket("proj_arrow_jagged"); + } + + void gticket_proj_arrow_poison() + { + give_ticket("proj_arrow_poison"); + } + + void gticket_proj_arrow_silvertipped() + { + give_ticket("proj_arrow_silvertipped"); + } + + void gticket_proj_arrow_wooden() + { + give_ticket("proj_arrow_wooden"); + } + + void give_ticket() + { + string ITEM_TYPE = param1; + string TICKET_NAME = "item_tk_"; + // TODO: UNCONVERTED: addstr TICKET_NAME ITEM_TYPE + // TODO: offer CUSTOMER_ID TICKET_NAME + PlayAnim("critical", ANIM_YES); + SayText(SAYTEXT_GIVE_TICKET); + } + + void list_tickets() + { + string CHECK_STRING = param2; + string SEARCH_ITEM = GetToken(CHECK_STRING, CHECK_LOOP, ";"); + string SEARCH_TICKET = "item_tk_"; + SEARCH_TICKET += SEARCH_ITEM; + if (!(ItemExists(CUSTOMER_ID, SEARCH_TICKET))) return; + string TICKET_NAME = ItemExists(CUSTOMER_ID, SEARCH_TICKET); + string reg.mitem.title = "Redeem "; + string reg.mitem.type = "callback"; + string reg.mitem.data = SEARCH_ITEM; + string reg.mitem.callback = "redeem_ticket"; + } + + void redeem_ticket() + { + string ITEM_IN = param2; + string TICKET_NAME = "item_tk_"; + TICKET_NAME += ITEM_IN; + if ((ItemExists(param1, TICKET_NAME))) + { + PlayAnim("critical", ANIM_STORE); + string METHOD_HACK = ItemExists(param1, TICKET_NAME); + // TODO: offer PARAM1 ITEM_IN:150 + PlayAnim("critical", ANIM_YES); + SayText(SAYTEXT_REDEEMTICKET); + } + else + { + SayText(SAYTEXT_NOTICKET); + PlayAnim("critical", ANIM_NO); + } + } + + void not_enough_arrows() + { + PlayAnim("critical", ANIM_NO); + SayText(SAYTEXT_NOT_ENOUGH); + } + + void check_for_item() + { + string SEARCH_ITEM = param1; + string STORAGE_FEE = PARAM; + if (!(ItemExists(param1, SEARCH_ITEM))) return; + string CALLBACK = "gticket_"; + CALLBACK += SEARCH_ITEM; + string ITEM_NAME = ItemExists(param1, SEARCH_NAME); + string reg.mitem.title = "Store: 150 "; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + string reg.mitem.callback = CALLBACK; + string reg.mitem.cb_failed = "not_enough_arrows"; + } + +} + +} diff --git a/scripts/angelscript/NPCs/base_banker.as b/scripts/angelscript/NPCs/base_banker.as new file mode 100644 index 00000000..3b4f34b4 --- /dev/null +++ b/scripts/angelscript/NPCs/base_banker.as @@ -0,0 +1,116 @@ +#pragma context server + +namespace MS +{ + +class BaseBanker : CGameScript +{ + int CHECK_REASON; + int STORAGE_ACCOUNT_COST; + string STORAGE_DISPLAYNAME; + float STORAGE_FEERATIO; + string STORAGE_NAME; + + BaseBanker() + { + STORAGE_DISPLAYNAME = "Edana Bank"; + STORAGE_NAME = "edanastorage"; + STORAGE_FEERATIO = 0.10; + STORAGE_ACCOUNT_COST = 20; + DeleteEntity(GetOwner()); + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + CHECK_REASON = 0; + Storage("checkaccount", STORAGE_NAME, m_hLastUsed, "used_checkaccount"); + } + + void used_checkaccount_success() + { + bank_trade(m_hLastUsed); + } + + void used_checkaccount_failed() + { + SayText("Sorry , you don t have an account with us"); + OpenMenu(m_hLastUsed); + ScheduleDelayedEvent(1, "speech_makeaccount"); + } + + void speech_makeaccount() + { + SayText("You can create an account with this bank for " + STORAGE_ACCOUNT_COST + " gold"); + } + + void game_recvoffer_gold() + { + Storage("checkaccount", STORAGE_NAME, m_hLastUsed, "offer_checkacct"); + } + + void offer_checkacct_success() + { + ReceiveOffer("reject"); + SayText("You already have an account with us."); + } + + void offer_checkacct_failed() + { + if ("game.offer.gold" >= STORAGE_ACCOUNT_COST) + { + ReceiveOffer("accept"); + bank_openaccount("ent_lastgave"); + } + else + { + ReceiveOffer("reject"); + bank_openaccount_failed("ent_lastgave"); + } + } + + void game_menu_getoptions() + { + Storage("checkaccount", STORAGE_NAME, param1, "menuitem_checkacct"); + } + + void menuitem_checkacct_failed() + { + string reg.mitem.id = "payment"; + string reg.mitem.title = "Open Account"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + string reg.mitem.callback = "bank_openaccount"; + string reg.mitem.cb_failed = "menu_recv_payment_failed"; + } + + void menuitem_checkacct_succes() + { + string reg.mitem.id = "bank"; + string reg.mitem.title = "Bank"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "gold:"; + string reg.mitem.callback = "bank_trade"; + string reg.mitem.cb_failed = ""; + } + + void bank_trade() + { + Storage("trade", STORAGE_NAME, param1, STORAGE_FEERATIO, STORAGE_DISPLAYNAME); + } + + void bank_openaccount() + { + Storage("openaccount", STORAGE_NAME, param1); + SayText("Thank you! Your new account with " + STORAGE_DISPLAYNAME + " is open!"); + PlayAnim("once", "yes"); + } + + void bank_openaccount_failed() + { + SayText(I + " m sorry, we have a business to run. An Account costs STORAGE_ACCOUNT_COST gold."); + PlayAnim("once", "no"); + } + +} + +} diff --git a/scripts/angelscript/NPCs/base_fletcher.as b/scripts/angelscript/NPCs/base_fletcher.as new file mode 100644 index 00000000..2f543282 --- /dev/null +++ b/scripts/angelscript/NPCs/base_fletcher.as @@ -0,0 +1,291 @@ +#pragma context server + +namespace MS +{ + +class BaseFletcher : CGameScript +{ + string ANIM_CONVO; + string ANIM_DONE; + string ANIM_NO; + int ARROW_MENU; + string ARROW_STACK_TYPES; + int BOLT_MENU; + string BOLT_STACK_TYPES; + string BUNDLE_AMT; + int BUNDLE_MENU; + string BUNDLE_TYPE; + string CUSTOMER_ID; + string GIVE_ITEM; + string LOOP_COUNT; + string SAYTEXT_BUNDLE; + string SAYTEXT_BUNDLE_DONE; + string SAYTEXT_NOT_ENOUGH; + int VENDOR_MENU_OFF; + + BaseFletcher() + { + ARROW_STACK_TYPES = "proj_arrow_bluntwooden;proj_arrow_broadhead;proj_arrow_fire;proj_arrow_frost;proj_arrow_gholy;proj_arrow_gpoison;proj_arrow_holy;proj_arrow_jagged;proj_arrow_poison;proj_arrow_silvertipped;proj_arrow_wooden;"; + BOLT_STACK_TYPES = "proj_bolt_fire;proj_bolt_iron;proj_bolt_silver;proj_bolt_steel;proj_bolt_wooden;"; + SAYTEXT_NOT_ENOUGH = "You do not have enough of that type of projectile."; + SAYTEXT_BUNDLE_DONE = "There you go, all bundled up."; + SAYTEXT_BUNDLE = "I can tie your arrows and bolts into neat bundles for quicker access, if you have enough to make such bundles. No charge for this."; + ANIM_DONE = "pull_needle"; + ANIM_NO = "no"; + ANIM_CONVO = "converse1"; + } + + void game_menu_getoptions() + { + CUSTOMER_ID = param1; + if (!(BUNDLE_MENU)) + { + LOOP_COUNT = 0; + for (int i = 0; i < GetTokenCount(ARROW_STACK_TYPES, ";"); i++) + { + check_arrows(); + } + LOOP_COUNT = 0; + for (int i = 0; i < GetTokenCount(ARROW_STACK_TYPES, ";"); i++) + { + check_bolts(); + } + if ((ARROW_MENU)) + { + string reg.mitem.title = "Bundle Arrows (120)"; + string reg.mitem.type = "callback"; + int reg.mitem.data = 120; + string reg.mitem.callback = "bundle_arrows_menu"; + string reg.mitem.title = "Bundle Arrows (240)"; + string reg.mitem.type = "callback"; + int reg.mitem.data = 120; + string reg.mitem.callback = "bundle_arrows_menu"; + } + if ((BOLT_MENU)) + { + string reg.mitem.title = "Bundle Bolts (200)"; + string reg.mitem.type = "callback"; + int reg.mitem.data = 200; + string reg.mitem.callback = "bundle_bolts_menu"; + string reg.mitem.title = "Bundle Bolts (400)"; + string reg.mitem.type = "callback"; + int reg.mitem.data = 400; + string reg.mitem.callback = "bundle_bolts_menu"; + } + } + if (!(BUNDLE_MENU)) return; + if (BUNDLE_TYPE == "arrows") + { + LOOP_COUNT = 0; + for (int i = 0; i < GetTokenCount(ARROW_STACK_TYPES, ";"); i++) + { + add_arrow_options(); + } + } + if (BUNDLE_TYPE == "bolts") + { + LOOP_COUNT = 0; + for (int i = 0; i < GetTokenCount(BOLT_STACK_TYPES, ";"); i++) + { + add_bolt_options(); + } + } + } + + void bundle_arrows_menu() + { + BUNDLE_MENU = 1; + VENDOR_MENU_OFF = 1; + BUNDLE_AMT = param2; + BUNDLE_TYPE = "arrows"; + OpenMenu(CUSTOMER_ID); + PlayAnim("critical", ANIM_CONVO); + SayText(SAYTEXT_BUNDLE); + } + + void bundle_bolts_menu() + { + BUNDLE_MENU = 1; + VENDOR_MENU_OFF = 1; + BUNDLE_AMT = param2; + BUNDLE_TYPE = "bolts"; + OpenMenu(CUSTOMER_ID); + PlayAnim("critical", ANIM_CONVO); + SayText(SAYTEXT_BUNDLE); + } + + void add_arrow_options() + { + string CUR_ITEM = GetToken(ARROW_STACK_TYPES, i, ";"); + string STACK_STRING = CUR_ITEM; + STACK_STRING += ":"; + STACK_STRING += BUNDLE_AMT; + string CALLBACK_STRING = "give_bundle_"; + CALLBACK_STRING += CUR_ITEM; + string TITLE_STRING = "bundle "; + TITLE_STRING += ItemExists(CUSTOMER_ID, CUR_ITEM); + TITLE_STRING += "s"; + LogDebug("adding_menu item CUR_ITEM title TITLE_STRING data STACK_STRING callback CALLBACK_STRING"); + if (!(ItemExists(CUSTOMER_ID, CUR_ITEM))) return; + string reg.mitem.title = TITLE_STRING; + string reg.mitem.type = "payment"; + string reg.mitem.data = STACK_STRING; + string reg.mitem.callback = CALLBACK_STRING; + string reg.mitem.cb_failed = "not_enough_arrows"; + } + + void add_bolt_options() + { + LogDebug("iteration game.script.iteration"); + string CUR_ITEM = GetToken(BOLT_STACK_TYPES, LOOP_COUNT, ";"); + LOOP_COUNT += 1; + string STACK_STRING = CUR_ITEM; + STACK_STRING += ":"; + STACK_STRING += BUNDLE_AMT; + string CALLBACK_STRING = "give_bundle_"; + CALLBACK_STRING += CUR_ITEM; + if (!(ItemExists(CUSTOMER_ID, CUR_ITEM))) return; + string ITEM_NAME = ItemExists(CUSTOMER_ID, CUR_ITEM); + string reg.mitem.title = "Bundle "; + string reg.mitem.type = "payment"; + string reg.mitem.data = STACK_STRING; + string reg.mitem.callback = CALLBACK_STRING; + string reg.mitem.cb_failed = "not_enough_arrows"; + } + + void check_arrows() + { + string CUR_ITEM = GetToken(ARROW_STACK_TYPES, LOOP_COUNT, ";"); + LOOP_COUNT += 1; + string ITEM_NAME = ItemExists(CUSTOMER_ID, CUR_ITEM); + ARROW_MENU = 1; + } + + void check_bolts() + { + string CUR_ITEM = GetToken(ARROW_STACK_TYPES, LOOP_COUNT, ";"); + LOOP_COUNT += 1; + string ITEM_NAME = ItemExists(CUSTOMER_ID, CUR_ITEM); + BOLT_MENU = 1; + } + + void not_enough_arrows() + { + PlayAnim("critical", ANIM_NO); + SayText(SAYTEXT_NOT_ENOUGH); + BUNDLE_MENU = 0; + VENDOR_MENU_OFF = 0; + } + + void give_bundle_proj_arrow_bluntwooden() + { + GIVE_ITEM = "proj_arrow_bluntwooden"; + return_bundle(); + } + + void give_bundle_proj_arrow_broadhead() + { + GIVE_ITEM = "proj_arrow_broadhead"; + return_bundle(); + } + + void give_bundle_proj_arrow_fire() + { + GIVE_ITEM = "proj_arrow_fire"; + return_bundle(); + } + + void give_bundle_proj_arrow_frost() + { + GIVE_ITEM = "proj_arrow_frost"; + return_bundle(); + } + + void give_bundle_proj_arrow_gholy() + { + GIVE_ITEM = "proj_arrow_gholy"; + return_bundle(); + } + + void give_bundle_proj_arrow_gpoison() + { + GIVE_ITEM = "proj_arrow_gpoison"; + return_bundle(); + } + + void give_bundle_proj_arrow_holy() + { + GIVE_ITEM = "proj_arrow_holy"; + return_bundle(); + } + + void give_bundle_proj_arrow_jagged() + { + GIVE_ITEM = "proj_arrow_jagged"; + return_bundle(); + } + + void give_bundle_proj_arrow_poison() + { + GIVE_ITEM = "proj_arrow_poison"; + return_bundle(); + } + + void give_bundle_proj_arrow_silvertipped() + { + GIVE_ITEM = "proj_arrow_silvertipped"; + return_bundle(); + } + + void give_bundle_proj_arrow_wooden() + { + GIVE_ITEM = "proj_arrow_wooden"; + return_bundle(); + } + + void give_bundle_proj_bolt_fire() + { + GIVE_ITEM = "proj_bolt_fire"; + return_bundle(); + } + + void give_bundle_proj_bolt_iron() + { + GIVE_ITEM = "proj_bolt_iron"; + return_bundle(); + } + + void give_bundle_proj_bolt_silver() + { + GIVE_ITEM = "proj_bolt_silver"; + return_bundle(); + } + + void give_bundle_proj_bolt_steel() + { + GIVE_ITEM = "proj_bolt_steel"; + return_bundle(); + } + + void give_bundle_proj_bolt_wooden() + { + GIVE_ITEM = "proj_bolt_wooden"; + return_bundle(); + } + + void return_bundle() + { + LogDebug("return_bundle"); + string BUNDLE_STRING = GIVE_ITEM; + BUNDLE_STRING += ":"; + BUNDLE_STRING += BUNDLE_AMT; + // TODO: offer CUSTOMER_ID BUNDLE_STRING + PlayAnim("critical", ANIM_DONE); + SayText(SAYTEXT_BUNDLE_DONE); + BUNDLE_MENU = 0; + VENDOR_MENU_OFF = 0; + } + +} + +} diff --git a/scripts/angelscript/NPCs/base_storage.as b/scripts/angelscript/NPCs/base_storage.as new file mode 100644 index 00000000..84545e34 --- /dev/null +++ b/scripts/angelscript/NPCs/base_storage.as @@ -0,0 +1,627 @@ +#pragma context server + +namespace MS +{ + +class BaseStorage : CGameScript +{ + string ADDITIONAL_ITEMS_01; + string ADDITIONAL_ITEMS_02; + string ADDITIONAL_ITEMS_03; + string ANIM_CHAT; + string ANIM_NO; + string ANIM_STORE; + string ARMOR_STRING1; + string ARMOR_STRING2; + string ARMOR_TYPES; + string AXE_STRING; + string AXE_TYPES; + string BANK_USER; + int BC_TOTAL_MOUTH_TIME; + string BLUNT_STRING; + string BLUNT_TYPES; + string BOW_STRING; + string BOW_TYPES; + int CHECK_LOOP; + string CUSTOMER_ID; + float FEE_HP_RATIO; + int FOUND_IN_HANDS; + string GALA_CHEST_POS; + int GALA_SCROLL_PRICE; + string GAUNTLET_STRING; + string GAUNTLET_TYPES; + int GAVE_HAND_WARNING; + int GAVE_SELECT_TICKET_TEXT; + int N_ADDITIONAL; + string REGISTER_ITEMS; + string REGISTER_TICKETS; + string SAYTEXT_BANKOPEN; + string SAYTEXT_BANK_NOTE; + string SAYTEXT_GIVETICKET; + string SAYTEXT_HAND_WARN; + string SAYTEXT_ITEMS_HANDS; + string SAYTEXT_NOITEM; + string SAYTEXT_NOSTORABLES; + string SAYTEXT_NOTICKET; + string SAYTEXT_REDEEMTICKET; + string SAYTEXT_REFUND; + string SAYTEXT_SELECT_CAT; + string SAYTEXT_SELECT_ITEM; + string SAYTEXT_SELECT_TICKET; + string SAYTEXT_wondrous_NOFUNDS; + string SAYTEXT_wondrous_PURCHASED; + string SMALLARM_STRING1; + string SMALLARM_STRING2; + string SMALLARM_TYPES; + int STORAGE_ACCOUNT_COST; + int STORAGE_ACTIVE; + string STORAGE_DISPLAYNAME; + float STORAGE_FEERATIO; + string STORAGE_NAME; + string STORAGE_TYPE; + string SWORD_STRING1; + string SWORD_STRING2; + string SWORD_TYPES; + int TICKETS_ACTIVE; + int TICKET_COUNT; + int TOTAL_COUNT; + string USE_FEE; + + BaseStorage() + { + GALA_CHEST_POS = /* TODO: $relpos */ $relpos(0, 64, 64); + GALA_SCROLL_PRICE = 5000; + SAYTEXT_wondrous_NOFUNDS = "We're sorry, but you seem to lack the funds to purchase Galat's Wondrous Scroll."; + SAYTEXT_wondrous_PURCHASED = "Here you go. It's only good for one use, so be sure you have room to use it."; + STORAGE_DISPLAYNAME = "Galat's Storage"; + STORAGE_NAME = "main_bank"; + STORAGE_FEERATIO = 0.01; + STORAGE_ACCOUNT_COST = 5; + SAYTEXT_BANKOPEN = "There, that should be your stuff."; + FEE_HP_RATIO = 0.1; + AXE_STRING = "axes_2haxe;axes_axe;axes_battleaxe;axes_doubleaxe;axes_greataxe;axes_rsmallaxe;axes_runeaxe;axes_scythe;axes_smallaxe;axes_golden;axes_golden_ref;"; + BLUNT_STRING = "blunt_calrianmace;blunt_club;blunt_darkmaul;blunt_granitemace;blunt_granitemaul;blunt_greatmaul;blunt_hammer_dorfgan;blunt_hammer1;blunt_hammer2;blunt_hammer3;blunt_mace;blunt_maul;blunt_ravenmace;blunt_rudolfsmace;blunt_rustyhammer2;blunt_warhammer;"; + BOW_STRING = "bows_crossbow_light;bows_longbow;bows_orcbow;bows_shortbow;bows_swiftbow;bows_treebow;bows_orion1;"; + GAUNTLET_STRING = "blunt_gauntlets;blunt_gauntlets_fire;gauntlets_normal;blunt_snake_staff;"; + ARMOR_STRING1 = "armor_dark;armor_golden;armor_helm_dark;armor_helm_gaz1;armor_helm_gaz2;armor_helm_golden;armor_helm_knight;armor_helm_mongol;armor_helm_plate;armor_knight;armor_leather;armor_leather_studded;armor_leather_torn;armor_mongol;armor_plate;"; + ARMOR_STRING2 = "armor_helm_gray;armor_helm_bronze;"; + SMALLARM_STRING1 = "smallarms_bone_blade;smallarms_craftedknife;smallarms_craftedknife2;smallarms_craftedknife3;smallarms_craftedknife4;smallarms_dagger;smallarms_dirk;smallarms_fangstooth;smallarms_flamelick;smallarms_huggerdagger;smallarms_huggerdagger2;"; + SMALLARM_STRING2 = "smallarms_huggerdagger3;smallarms_huggerdagger4;smallarms_knife;smallarms_rknife;smallarms_royaldagger;"; + SWORD_STRING1 = "swords_bastardsword;swords_giceblade;swords_iceblade;swords_katana;swords_katana2;swords_katana3;swords_katana4;swords_liceblade;swords_longsword;swords_lostblade;swords_m2sword;swords_msword;swords_nkatana;swords_poison1;swords_rsword;swords_scimitar;"; + SWORD_STRING2 = "swords_shortsword;swords_skullblade;swords_skullblade2;swords_skullblade3;swords_skullblade4;swords_spiderblade;swords_testskin;swords_testsub;swords_volcano;swords_rune_green;"; + N_ADDITIONAL = 3; + ADDITIONAL_ITEMS_01 = "blunt_gauntlets_serpant;blunt_gauntlets_leather;blunt_gauntlets_demon;bows_orion1;swords_novablade12;armor_pheonix55;axes_poison1;axes_vaxe;axes_thunder11;axes_gthunder11;blunt_lrod11;bows_thornbow;bows_crossbow_heavy33;armor_helm_undead;"; + ADDITIONAL_ITEMS_02 = "blunt_northmaul972;smallarms_frozentongueonflagpole;swords_frostblade55;armor_belmont;armor_belmont;blunt_mithral;armor_salamander;armor_fireliz;swords_wolvesbane;swords_blood_drinker;armor_leather_gaz1;axes_td;axes_tf;axes_ti;axes_tp;"; + ADDITIONAL_ITEMS_03 = "axes_dragon;smallarms_nh;bows_firebird;bows_frost;armor_faura;armor_paura;armor_venom;smallarms_k_fire;axes_tl;"; + SAYTEXT_REFUND = "No pressure, here's your fee back. Come back anytime."; + SAYTEXT_SELECT_ITEM = "Please select the specific item you would like to store."; + SAYTEXT_SELECT_CAT = SAYTEXT_SELECT_ITEM; + SAYTEXT_NOITEM = "Sorry, I did not recieve the item."; + SAYTEXT_NOTICKET = "Sorry, I did not recieve the ticket."; + SAYTEXT_NOSTORABLES = "I'm sorry, you've no items we can store for you."; + SAYTEXT_GIVETICKET = "Here's your ticket! Remember, you can redeem that at any Galat outlet."; + SAYTEXT_SELECT_TICKET = "Please select which ticket you wish to redeem."; + SAYTEXT_HAND_WARN = "Please place tickets in your hands before you attempt to redeem them."; + SAYTEXT_REDEEMTICKET = "There ya go! Thank you for using Galat Storage, please come again!"; + SAYTEXT_ITEMS_HANDS = "Remember, I can only store items held forth in your hands."; + SAYTEXT_BANK_NOTE = "Ah, a you wish to cash a Galat bank note. Yes, we can do that here."; + ANIM_CHAT = "talkright"; + ANIM_NO = "deskidle"; + ANIM_STORE = "portal"; + } + + void OnSpawn() override + { + ScheduleDelayedEvent(1.0, "create_bank"); + } + + void create_bank() + { + SpawnNPC("chests/bank1", GALA_CHEST_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + storage_reset(); + SetMenuAutoOpen(1); + } + + void game_menu_getoptions() + { + RemoveMenuItem("abort_option"); + CUSTOMER_ID = GetEntityIndex(param1); + if ((TICKETS_ACTIVE)) + { + REGISTER_ITEMS = 0; + REGISTER_TICKETS = 1; + } + if (!(STORAGE_ACTIVE)) + { + count_items(CUSTOMER_ID); + if ((ItemExists(param1, "item_galat_note_100"))) + { + string reg.mitem.title = "Redeem Bank Note [100]"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_galat_note_100"; + string reg.mitem.callback = "note_hundred"; + } + if ((ItemExists(param1, "item_galat_note_10"))) + { + string reg.mitem.title = "Redeem Bank Note [10]"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_galat_note_10"; + string reg.mitem.callback = "note_ten"; + } + string reg.mitem.title = "About storage chest"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_storage_chest"; + string reg.mitem.title = "Buy Wondrous Scroll ("; + reg.mitem.title += GALA_SCROLL_PRICE; + reg.mitem.title += "gp)"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + reg.mitem.data += GALA_SCROLL_PRICE; + string reg.mitem.callback = "buy_scroll"; + string reg.mitem.cb_failed = "say_wondrous_cant_afford"; + string reg.mitem.title = "About Wondrous Scroll"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_wondrous"; + } + if (!(FOUND_IN_HANDS)) + { + if (TOTAL_COUNT > 0) + { + } + SayText(SAYTEXT_ITEMS_HANDS); + bteller_hand_warn(); + } + if ((TICKETS_ACTIVE)) + { + if (!(GAVE_SELECT_TICKET_TEXT)) + { + } + ScheduleDelayedEvent(0.5, "storage_reset"); + } + if ((TICKETS_ACTIVE)) return; + if (!(STORAGE_ACTIVE)) + { + USE_FEE = GetEntityMaxHealth(param1); + USE_FEE *= FEE_HP_RATIO; + USE_FEE = int(USE_FEE); + if (USE_FEE < 25) + { + USE_FEE = 25; + } + string reg.mitem.id = "a_storage"; + string reg.mitem.title = "Store an Item: "; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + string reg.mitem.callback = "activate_storage"; + if (TOTAL_COUNT == 0) + { + PlayAnim("critical", ANIM_NO); + SayText(SAYTEXT_NOSTORABLES); + bteller_store_error(); + string reg.mitem.type = "disabled"; + RemoveMenuItem("a_storage"); + } + if (!(FOUND_IN_HANDS)) + { + string reg.mitem.type = "disabled"; + } + if ((FOUND_IN_HANDS)) + { + } + if (TICKET_COUNT > 0) + { + string reg.mitem.id = "a_ticket"; + string reg.mitem.title = "Redeem a ticket"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "activate_tickets"; + int reg.mitem.disable = 0; + } + } + if (!(STORAGE_ACTIVE)) return; + string reg.mitem.cb_failed = "storage_reset"; + FOUND_IN_HANDS = 0; + TOTAL_COUNT = 0; + REGISTER_ITEMS = 1; + REGISTER_TICKETS = 0; + enum_all(); + if (FOUND_IN_HANDS == 0) + { + bteller_hand_warn(); + SayText(SAYTEXT_ITEMS_HANDS); + } + display_abort(); + } + + void count_items() + { + FOUND_IN_HANDS = 0; + TOTAL_COUNT = 0; + TICKET_COUNT = 0; + REGISTER_ITEMS = 0; + enum_all(); + } + + void check_inventory() + { + string CHECK_STRING = param2; + string SEARCH_ITEM = GetToken(CHECK_STRING, CHECK_LOOP, ";"); + if ((ItemExists(CUSTOMER_ID, SEARCH_ITEM))) + { + if (!(REGISTER_TICKETS)) + { + } + int FOUND_ITEM = 1; + if ((ItemExists(CUSTOMER_ID, SEARCH_ITEM))) + { + } + string NOT_IN_HANDS = ItemExists(CUSTOMER_ID, SEARCH_ITEM); + if (!(NOT_IN_HANDS)) + { + FOUND_IN_HANDS = 1; + } + TOTAL_COUNT += 1; + if ((REGISTER_ITEMS)) + { + if (!(NOT_IN_HANDS)) + { + } + string ITEM_NAME = ItemExists(CUSTOMER_ID, SEARCH_ITEM); + string reg.mitem.title = "Store "; + string reg.mitem.type = "callback"; + string reg.mitem.data = SEARCH_ITEM; + string reg.mitem.callback = "return_ticket"; + string reg.mitem.cb_failed = "storage_reset"; + } + } + if ((REGISTER_TICKETS)) + { + string SEARCH_TICKET = "item_tk_"; + SEARCH_TICKET += SEARCH_ITEM; + if ((ItemExists(CUSTOMER_ID, SEARCH_TICKET))) + { + } + string NOT_IN_HANDS = ItemExists(CUSTOMER_ID, SEARCH_TICKET); + if ((NOT_IN_HANDS)) + { + if (!(GAVE_HAND_WARNING)) + { + } + SayText(SAYTEXT_HAND_WARN); + bteller_ticket_warn(); + GAVE_HAND_WARNING = 1; + } + if (!(NOT_IN_HANDS)) + { + } + if (!(GAVE_SELECT_TICKET_TEXT)) + { + SayText(SAYTEXT_SELECT_TICKET); + GAVE_SELECT_TICKET_TEXT = 1; + bteller_select_ticket(); + } + string TICKET_NAME = ItemExists(CUSTOMER_ID, SEARCH_TICKET); + string reg.mitem.title = TICKET_NAME; + string reg.mitem.type = "callback"; + string reg.mitem.data = SEARCH_ITEM; + string reg.mitem.callback = "redeem_ticket"; + string reg.mitem.cb_failed = "storage_reset"; + } + if (!(REGISTER_ITEMS)) + { + string SEARCH_TICKET = "item_tk_"; + SEARCH_TICKET += SEARCH_ITEM; + if ((ItemExists(CUSTOMER_ID, SEARCH_TICKET))) + { + TICKET_COUNT += 1; + string NOT_IN_HANDS = ItemExists(CUSTOMER_ID, SEARCH_ITEM); + if ((NOT_IN_HANDS)) + { + if (!(GAVE_HAND_WARNING)) + { + } + SayText(SAYTEXT_HAND_WARN); + bteller_ticket_warn(); + GAVE_HAND_WARNING = 1; + } + } + } + CHECK_LOOP += 1; + } + + void activate_storage() + { + SayText(SAYTEXT_SELECT_CAT); + STORAGE_ACTIVE = 1; + ScheduleDelayedEvent(0.5, "open_menu", param1); + } + + void activate_tickets() + { + TICKETS_ACTIVE = 1; + ScheduleDelayedEvent(0.5, "open_menu", param1); + } + + void say_select_item() + { + SayText(SAYTEXT_SELECT_ITEM); + } + + void return_ticket() + { + string ITEM_IN = param2; + string TICKET_NAME = "item_tk_"; + TICKET_NAME += ITEM_IN; + if ((ItemExists(param1, ITEM_IN))) + { + string METHOD_HACK = ItemExists(param1, ITEM_IN); + // TODO: offer PARAM1 TICKET_NAME + bteller_give_ticket(); + SayText(SAYTEXT_GIVETICKET); + } + else + { + SayText(SAYTEXT_NOITEM); + PlayAnim("critical", ANIM_NO); + bteller_error_no_item(); + } + storage_reset(); + } + + void open_menu() + { + OpenMenu(CUSTOMER_ID); + } + + void storage_reset() + { + STORAGE_TYPE = "unset"; + STORAGE_ACTIVE = 0; + TICKETS_ACTIVE = 0; + REGISTER_TICKETS = 0; + REGISTER_ITEMS = 0; + FOUND_IN_HANDS = 0; + TOTAL_COUNT = 0; + GAVE_SELECT_TICKET_TEXT = 0; + GAVE_HAND_WARNING = 0; + } + + void cancel_trade() + { + SayText(SAYTEXT_REFUND); + // TODO: offer PARAM1 gold USE_FEE + storage_reset(); + } + + void display_abort() + { + string reg.mitem.id = "abort_option"; + string reg.mitem.title = "Abort Transaction"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "cancel_trade"; + } + + void redeem_ticket() + { + string ITEM_IN = param2; + string TICKET_NAME = "item_tk_"; + TICKET_NAME += ITEM_IN; + if ((ItemExists(param1, TICKET_NAME))) + { + PlayAnim("critical", ANIM_STORE); + string METHOD_HACK = ItemExists(param1, TICKET_NAME); + // TODO: offer PARAM1 ITEM_IN + SayText(SAYTEXT_REDEEMTICKET); + bteller_ticket_redeemed(); + } + else + { + SayText(SAYTEXT_NOTICKET); + PlayAnim("critical", ANIM_NO); + bteller_error_no_item(); + } + storage_reset(); + } + + void enum_all() + { + CHECK_LOOP = 0; + ARMOR_TYPES = GetTokenCount(ARMOR_STRING1, ";"); + for (int i = 0; i < ARMOR_TYPES; i++) + { + check_inventory("armor", ARMOR_STRING1); + } + CHECK_LOOP = 0; + ARMOR_TYPES = GetTokenCount(ARMOR_STRING2, ";"); + for (int i = 0; i < ARMOR_TYPES; i++) + { + check_inventory("armor", ARMOR_STRING2); + } + CHECK_LOOP = 0; + AXE_TYPES = GetTokenCount(AXE_STRING, ";"); + for (int i = 0; i < AXE_TYPES; i++) + { + check_inventory("axe", AXE_STRING); + } + CHECK_LOOP = 0; + BLUNT_TYPES = GetTokenCount(BLUNT_STRING, ";"); + for (int i = 0; i < BLUNT_TYPES; i++) + { + check_inventory("blunt", BLUNT_STRING); + } + CHECK_LOOP = 0; + BOW_TYPES = GetTokenCount(BOW_STRING, ";"); + for (int i = 0; i < BOW_TYPES; i++) + { + check_inventory("bow", BOW_STRING); + } + CHECK_LOOP = 0; + GAUNTLET_TYPES = GetTokenCount(GAUNTLET_STRING, ";"); + for (int i = 0; i < GAUNTLET_TYPES; i++) + { + check_inventory("gauntlet", GAUNTLET_STRING); + } + CHECK_LOOP = 0; + SMALLARM_TYPES = GetTokenCount(SMALLARM_STRING1, ";"); + for (int i = 0; i < SMALLARM_TYPES; i++) + { + check_inventory("smallarm", SMALLARM_STRING1); + } + CHECK_LOOP = 0; + SMALLARM_TYPES = GetTokenCount(SMALLARM_STRING2, ";"); + for (int i = 0; i < SMALLARM_TYPES; i++) + { + check_inventory("smallarm", SMALLARM_STRING2); + } + CHECK_LOOP = 0; + SWORD_TYPES = GetTokenCount(SWORD_STRING1, ";"); + for (int i = 0; i < SWORD_TYPES; i++) + { + check_inventory("sword", SWORD_STRING1); + } + CHECK_LOOP = 0; + SWORD_TYPES = GetTokenCount(SWORD_STRING2, ";"); + for (int i = 0; i < SWORD_TYPES; i++) + { + check_inventory("sword", SWORD_STRING2); + } + if (!(N_ADDITIONAL >= 1)) return; + CHECK_LOOP = 0; + string NEXT_CHECK_LIST = ADDITIONAL_ITEMS_01; + string CHECK_LIST_NITEMS = GetTokenCount(NEXT_CHECK_LIST, ";"); + for (int i = 0; i < CHECK_LIST_NITEMS; i++) + { + check_inventory("other", NEXT_CHECK_LIST); + } + if (!(N_ADDITIONAL >= 2)) return; + CHECK_LOOP = 0; + string NEXT_CHECK_LIST = ADDITIONAL_ITEMS_02; + string CHECK_LIST_NITEMS = GetTokenCount(NEXT_CHECK_LIST, ";"); + for (int i = 0; i < CHECK_LIST_NITEMS; i++) + { + check_inventory("other", NEXT_CHECK_LIST); + } + if (!(N_ADDITIONAL >= 3)) return; + CHECK_LOOP = 0; + string NEXT_CHECK_LIST = ADDITIONAL_ITEMS_03; + string CHECK_LIST_NITEMS = GetTokenCount(NEXT_CHECK_LIST, ";"); + for (int i = 0; i < CHECK_LIST_NITEMS; i++) + { + check_inventory("other", NEXT_CHECK_LIST); + } + if (!(N_ADDITIONAL >= 4)) return; + CHECK_LOOP = 0; + string NEXT_CHECK_LIST = ADDITIONAL_ITEMS_04; + string CHECK_LIST_NITEMS = GetTokenCount(NEXT_CHECK_LIST, ";"); + for (int i = 0; i < CHECK_LIST_NITEMS; i++) + { + check_inventory("other", NEXT_CHECK_LIST); + } + if (!(N_ADDITIONAL >= 5)) return; + CHECK_LOOP = 0; + string NEXT_CHECK_LIST = ADDITIONAL_ITEMS_05; + string CHECK_LIST_NITEMS = GetTokenCount(NEXT_CHECK_LIST, ";"); + for (int i = 0; i < CHECK_LIST_NITEMS; i++) + { + check_inventory("other", NEXT_CHECK_LIST); + } + } + + void note_hundred() + { + SayText(SAYTEXT_BANK_NOTE); + PlayAnim("once", ANIM_CHAT); + // TODO: offer PARAM1 gold 100 + } + + void note_ten() + { + SayText(SAYTEXT_BANK_NOTE); + PlayAnim("once", ANIM_CHAT); + // TODO: offer PARAM1 gold 10 + } + + void open_betabank() + { + Storage("checkaccount", STORAGE_NAME, m_hLastUsed, "betabank"); + BANK_USER = param1; + } + + void betabank_success() + { + SayText(SAYTEXT_BANKOPEN); + Storage("trade", STORAGE_NAME, BANK_USER, STORAGE_FEERATIO, STORAGE_DISPLAYNAME); + } + + void betabank_failed() + { + convo_anim(); + SayText("We have this eh , mystic portal to the vaults. It seems to be working okay , but it s still a little experimental."); + ScheduleDelayedEvent(2.0, "bank_intro1"); + } + + void bank_intro1() + { + SayText("You can use it for a minimal fee. Just beware that it is at the moment at your own risk - at least until the wizards get the kinks worked out."); + Storage("openaccount", STORAGE_NAME, BANK_USER); + ScheduleDelayedEvent(2.0, "bank_intro2"); + } + + void bank_intro2() + { + convo_anim(); + SayText("You can store more items in the betabank , and you don t have to deal with tickets. Also, usually cheaper - the cost is based on the value of the item."); + SendInfoMsg(BANK_USER, "BETA BANK ACCOUNT OPEN Choose Open Betabank again to start using the betabank."); + } + + void buy_scroll() + { + SayText("SAYTEXT_wondrous_PURCHASED"); + lchat_mouth_move(); + // TODO: offer PARAM1 item_gwond + PlayAnim("once", "return_needle"); + } + + void say_wondrous_cant_afford() + { + SayText("SAYTEXT_wondrous_NOFUNDS"); + lchat_mouth_move(); + PlayAnim("once", "no"); + } + + void lchat_mouth_move() + { + BC_TOTAL_MOUTH_TIME = 0; + string RND_SAY1 = "["; + float M_TIME = Random(0.1, 0.3); + BC_TOTAL_MOUTH_TIME += M_TIME; + RND_SAY1 += M_TIME; + RND_SAY1 += "]"; + string RND_SAY2 = "["; + float M_TIME = Random(0.1, 0.3); + BC_TOTAL_MOUTH_TIME += M_TIME; + RND_SAY2 += M_TIME; + RND_SAY2 += "]"; + string RND_SAY3 = "["; + float M_TIME = Random(0.1, 0.3); + BC_TOTAL_MOUTH_TIME += M_TIME; + RND_SAY3 += M_TIME; + RND_SAY3 += "]"; + string RND_SAY4 = "["; + float M_TIME = Random(0.1, 0.3); + BC_TOTAL_MOUTH_TIME += M_TIME; + RND_SAY4 += M_TIME; + RND_SAY4 += "]"; + Say("RND_SAY1 RND_SAY2 RND_SAY3 RND_SAY4"); + BC_TOTAL_MOUTH_TIME += 1.0; + BC_TOTAL_MOUTH_TIME("bchat_close_mouth"); + } + + void lchat_close_mouth() + { + if ((NO_CLOSE_MOUTH)) return; + SetProp(GetOwner(), "controller1", 0); + } + +} + +} diff --git a/scripts/angelscript/NPCs/beggar.as b/scripts/angelscript/NPCs/beggar.as new file mode 100644 index 00000000..2a496bb1 --- /dev/null +++ b/scripts/angelscript/NPCs/beggar.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class Beggar : CGameScript +{ + void OnRepeatTimer() + { + SetRepeatDelay(30); + CanSee("ally"); + SetVolume(2); + Say("chitchat[50] *[20] *[55] *[55] *[23] *[22]"); + SayText("Alms for the poor..."); + ScheduleDelayedEvent(2, "say_alms"); + } + + void OnSpawn() override + { + SetHealth(1); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Beggar"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, RandomInt(0, 5)); + SetIdleAnim("cowering_in_corner"); + SetInvincible(true); + } + + void say_alms() + { + SayText("Please... save a beggar a few coins..."); + } + + void recvoffer_gold() + { + ReceiveOffer("accept"); + SayText("Thank you..."); + } + +} + +} diff --git a/scripts/angelscript/NPCs/crystal_keeper.as b/scripts/angelscript/NPCs/crystal_keeper.as new file mode 100644 index 00000000..e2fa2460 --- /dev/null +++ b/scripts/angelscript/NPCs/crystal_keeper.as @@ -0,0 +1,209 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class CrystalKeeper : CGameScript +{ + string ANIM_GIVE; + string ANIM_MAGIC; + float CHAT_SPEED; + string DUNGEON_NAME; + int GAVE_KEY; + int IN_CHAT; + string JOB_STEP; + string MONSTER_MODEL; + int NO_RUMOR; + string PLAYER_NAME; + string QUEST_WINNER; + string SHARDS_LEFT; + int SHARDS_RECIEVED; + int SHARDS_REQ; + string SHARD_SUFFIX; + + CrystalKeeper() + { + SHARDS_REQ = 10; + ANIM_MAGIC = "kneel"; + ANIM_GIVE = "gluonshow"; + DUNGEON_NAME = "Crows dungeon name"; + MONSTER_MODEL = "npc/balancepriest1.mdl"; + Precache(MONSTER_MODEL); + CHAT_SPEED = 5.0; + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetName("Tal thul, the High Priest"); + SetHealth(100); + SetRace("human"); + SetInvincible(true); + Precache(MONSTER_MODEL); + SetModel(MONSTER_MODEL); + SetModelBody(1, 3); + SetWidth(32); + SetHeight(72); + GiveItem(GetOwner(), "ring_light2"); + SHARDS_RECIEVED = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "crystal"); + CatchSpeech("say_where", "where"); + } + + void say_job() + { + if ((IN_CHAT)) return; + IN_CHAT = 1; + say_job_loop(); + } + + void say_job_loop() + { + if ((GAVE_KEY)) return; + JOB_STEP += 1; + if (JOB_STEP == 1) + { + SayText("The door to this temple requires a crystal key , but the key has been shattered."); + } + if (JOB_STEP == 2) + { + SayText("If warriors of light cannot penetrate inside , the evil therein will simply grow without end."); + } + if (JOB_STEP == 3) + { + SayText(I + "have some of the shards... " + I + "think if " + I + "had the rest " + I + " could re-forge the key."); + } + if (JOB_STEP == 4) + { + SayText("They are scattered throughout " + DUNGEON_NAME + "but " + I + " lack the power to gather the rest."); + } + if (JOB_STEP == 5) + { + SayText("If you can bring me " + SHARDS_REQ + "shards , " + I + " can re-forge magical key that opens this door."); + } + if (JOB_STEP == 6) + { + SayText("Be sure to bring them to me all at once , for " + I + " must have all the pieces on hand at the same time."); + } + if (JOB_STEP < 6) + { + CHAT_SPEED("say_job_loop"); + } + if (JOB_STEP == 6) + { + JOB_STEP = 0; + IN_CHAT = 0; + } + } + + void say_hi() + { + if ((IN_CHAT)) return; + if (SHARDS_RECIEVED > 0) + { + SayText(I + "still need " + SHARDS_LEFT + " shards to re-forge the key to the temple door."); + } + if (!(SHARDS_RECIEVED == 0)) return; + if (!(GAVE_KEY)) + { + SayText("Greetings warrior , " + I + " am Tal thul, priest of Felewyn."); + } + if ((GAVE_KEY)) + { + SayText("Thank you for your work , now hurry , use the key to enter the temple before it s too late."); + } + CHAT_SPEED("say_job"); + } + + void say_where() + { + if ((IN_CHAT)) return; + SayText(I + "am uncertain as to where exactally , " + I + "only barely survived finding the first three pieces in " + DUNGEON_NAME.); + } + + void gave_shard() + { + QUEST_WINNER = GetEntityIndex(param1); + PLAYER_NAME = GetEntityName(QUEST_WINNER); + PLAYER_NAME += ","; + SHARDS_RECIEVED += 1; + SHARDS_LEFT = SHARDS_REQ; + SHARDS_LEFT -= SHARDS_RECIEVED; + SHARDS_LEFT = int(SHARDS_LEFT); + SHARD_SUFFIX = "shards."; + if (SHARDS_LEFT == 1) + { + string SHARD_SUFFIX = "shard."; + } + if (SHARDS_LEFT == 0) + { + give_key(); + } + if (!(SHARDS_LEFT > 0)) return; + int RANDOM_CHAT = RandomInt(1, 4); + if (RANDOM_CHAT == 1) + { + SayText("Excellent , " + PLAYER_NAME + I + "only need " + SHARDS_LEFT + "more " + SHARD_SUFFIX); + } + if (RANDOM_CHAT == 2) + { + SayText("Good work , " + PLAYER_NAME + I + "only need " + SHARDS_LEFT + "more " + SHARD_SUFFIX); + } + if (RANDOM_CHAT == 3) + { + SayText("Keep them coming , " + PLAYER_NAME + I + "only need " + SHARDS_LEFT + "more " + SHARD_SUFFIX); + } + if (RANDOM_CHAT == 4) + { + SayText("Alright , " + PLAYER_NAME + I + "only need " + SHARDS_LEFT + "more " + SHARD_SUFFIX); + } + } + + void game_menu_getoptions() + { + if ((GAVE_KEY)) return; + if ((ItemExists(param1, "item_crow_shard"))) + { + string reg.mitem.id = "payment"; + string reg.mitem.title = "Give Crystal Shard"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_crow_shard"; + string reg.mitem.callback = "gave_shard"; + } + } + + void give_key() + { + SayText("Truly you are a warrior of the light " + PLAYER_NAME + "one moment while " + I + " perform the incantation."); + SpawnNPC("monsters/companion/spell_maker_divination", /* TODO: $relpos */ $relpos(0, 0, 40), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "none", "none", 50 + PlayAnim("once", ANIM_MAGIC); + ScheduleDelayedEvent(2.0, "give_key2"); + } + + void give_key2() + { + PlayAnim("once", ANIM_GIVE); + SayText("Here , take it quickly and use it to enter the foul temple and expunge the evil therein!"); + // TODO: offer QUEST_WINNER key_crystal + GAVE_KEY = 1; + ScheduleDelayedEvent(5.0, "return_home"); + } + + void return_home() + { + SayText(I + " ve done all I can here, so I am using my return scroll s magic now."); + ScheduleDelayedEvent(2.0, "return_home2"); + } + + void return_home2() + { + SayText(I + " wish you luck in your quest!"); + ScheduleDelayedEvent(0.1, "npc_fade_away"); + } + +} + +} diff --git a/scripts/angelscript/NPCs/default_dwarf.as b/scripts/angelscript/NPCs/default_dwarf.as new file mode 100644 index 00000000..31e2fb5e --- /dev/null +++ b/scripts/angelscript/NPCs/default_dwarf.as @@ -0,0 +1,116 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_civilian.as" +#include "NPCs/dwarf_lantern_base.as" + +namespace MS +{ + +class DefaultDwarf : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK1_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + float FLEE_CHANCE; + int FLEE_HEALTH; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_DELAY; + int HUNT_AGRO; + int MOVE_RANGE; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + float RETALIATE_CHANGETARGET_CHANCE; + + DefaultDwarf() + { + MOVE_RANGE = 32; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ATTACK1_DAMAGE = 1; + ANIM_DEATH = "diesimple"; + CAN_HUNT = 0; + HUNT_AGRO = 0; + CAN_ATTACK = 0; + ATTACK_RANGE = 48; + ATTACK_HITRANGE = 80; + CAN_FLEE = 1; + FLEE_HEALTH = 25; + FLEE_CHANCE = 1.0; + CAN_HEAR = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_FLINCH = 1; + FLINCH_ANIM = "flinch1"; + FLINCH_CHANCE = 0.5; + FLINCH_DELAY = 1; + NO_JOB = 1; + NO_HAIL = 1; + NO_RUMOR = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(30); + if ((LANTERN_ON)) + { + npcatk_hunt(); + } + if ((CanSee("ally", 180))) + { + } + SetMoveDest(m_hLastSeen); + EmitSound(GetOwner(), 0, "npc/dwarfchitchat.wav", 2); + } + + void OnSpawn() override + { + SetHealth(25); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Commoner"); + SetRoam(true); + SetModel("dwarf/male1.mdl"); + SetModelBody(1, 0); + SetMoveAnim("walk"); + SetProp(GetOwner(), "skin", RandomInt(1, 6)); + ScheduleDelayedEvent(1.0, "do_lantern"); + } + + void do_lantern() + { + if ((LANTERN_SET)) return; + if (RandomInt(1, 2) == 1) + { + set_lantern(); + } + } + + void attack_1() + { + DoDamage(m_hLastStruck, ATTACK_HITRANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "blunt"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + SetMoveDest(m_hLastStruck); + PlayAnim("critical", ANIM_ATTACK); + } + +} + +} diff --git a/scripts/angelscript/NPCs/default_human.as b/scripts/angelscript/NPCs/default_human.as new file mode 100644 index 00000000..09ee0057 --- /dev/null +++ b/scripts/angelscript/NPCs/default_human.as @@ -0,0 +1,144 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_civilian.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class DefaultHuman : CGameScript +{ + int AM_SCARED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + float FLEE_CHANCE; + int FLEE_HEALTH; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_DELAY; + int HUNT_AGRO; + int MOVE_RANGE; + int NO_CHAT; + float RETALIATE_CHANGETARGET_CHANCE; + + DefaultHuman() + { + ANIM_DEATH = "diesimple"; + MOVE_RANGE = 64; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "beatdoor"; + ANIM_DEATH = "diesimple"; + CAN_HUNT = 0; + HUNT_AGRO = 0; + CAN_ATTACK = 0; + ATTACK_RANGE = 90; + CAN_FLEE = 1; + FLEE_HEALTH = 25; + FLEE_CHANCE = 1.0; + CAN_HEAR = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_FLINCH = 1; + FLINCH_ANIM = "flinch1"; + FLINCH_CHANCE = 0.5; + FLINCH_DELAY = 1; + NO_CHAT = 1; + AM_SCARED = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(RandomInt(25, 35)); + if (!(AM_SCARED)) + { + } + if ((CanSee("ally", 180))) + { + } + SetMoveDest(m_hLastSeen); + SetVolume(2); + if (!(G_CHRISTMAS_MODE)) + { + Say("chitchat[.5] [.2] [.55] [.55] [.23] [.22]"); + } + if ((G_CHRISTMAS_MODE)) + { + Say("xmass_male[.5] [.2] [.55] [.55] [.23] [.22]"); + } + } + + void OnSpawn() override + { + SetHealth(25); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Commoner"); + SetRoam(true); + SetBloodType("red"); + SetModel("npc/human1.mdl"); + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, RandomInt(0, 5)); + SetMoveAnim("walk"); + SetHearingSensitivity(4); + SetSkillLevel(-10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + SetMoveDest(m_hLastStruck); + SetMoveAnim(ANIM_RUN); + AM_SCARED = 1; + ScheduleDelayedEvent(20.0, "calm_down1"); + } + + void calm_down1() + { + SetMoveAnim("walk_scared"); + ScheduleDelayedEvent(10.0, "calm_down2"); + } + + void calm_down2() + { + SetMoveAnim(ANIM_WALK); + AM_SCARED = 0; + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if ((IsValidPlayer(LAST_HEARD))) return; + if (!(GetRelationship(GetOwner()) == "enemy")) return; + SetMoveDest(LAST_HEARD); + call_for_help(LAST_HEARD); + AM_SCARED = 1; + ScheduleDelayedEvent(20.0, "calm_down1"); + } + + void say_xmass() + { + if (!(G_CHRISTMAS_MODE)) return; + PlayAnim("critical", "wave"); + SayText(A + " happy Hogswatch to you too!"); + // TODO: playmp3 all system xmass_annoy.mp3 + Say("xmass_male[.20] [.20] [.30] [.10] [.20] [.10] [.10] [.10] [.10]"); + if (!(IS_SNOWING)) + { + CallExternal("players", "ext_weather_change", "snow"); + } + } + +} + +} diff --git a/scripts/angelscript/NPCs/dwarf_hbow.as b/scripts/angelscript/NPCs/dwarf_hbow.as new file mode 100644 index 00000000..e6fa2ea2 --- /dev/null +++ b/scripts/angelscript/NPCs/dwarf_hbow.as @@ -0,0 +1,83 @@ +#pragma context server + +#include "monsters/dwarf_zombie_hbow.as" +#include "monsters/base_battle_ally.as" + +namespace MS +{ + +class DwarfHbow : CGameScript +{ + string ACT_ANIM_RUN; + int ALLY_FOLLOW_ON; + string ANIM_ALLY_JUMP; + string LANTERN_COLOR; + int LANTERN_HAND_INDEX; + int LANTERN_HAND_SUBMODEL; + int NPC_BASE_EXP; + int NPC_NO_PLAYER_DMG; + int NPC_USE_IDLE; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_ALLY_JUMP; + string SOUND_DEATH; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_FLINCH3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + + DwarfHbow() + { + NPC_BASE_EXP = 0; + NPC_NO_PLAYER_DMG = 1; + ALLY_FOLLOW_ON = 0; + ANIM_ALLY_JUMP = "anim_roll_back"; + NPC_USE_IDLE = 0; + SOUND_ALLY_JUMP = "voices/dwarf/vs_nx0drogm_hit2.wav"; + ACT_ANIM_RUN = "run"; + SOUND_PAIN1 = "voices/dwarf/vs_ndwarfm1_hit1.wav"; + SOUND_PAIN2 = "voices/dwarf/vs_ndwarfm1_bat1.wav"; + SOUND_PAIN3 = "voices/dwarf/vs_ndwarfm1_hit3.wav"; + SOUND_FLINCH1 = "voices/dwarf/vs_nx0drogm_heal.wav"; + SOUND_FLINCH2 = "voices/dwarf/vs_nx0drogm_help.wav"; + SOUND_FLINCH3 = "voices/dwarf/vs_nx0drogm_hit1.wav"; + SOUND_DEATH = "voices/dwarf/vs_nx0drogm_hit3.wav"; + SOUND_ALERT1 = "voices/dwarf/voices/dwarf/vs_nx0drogm_bat3.wav"; + SOUND_ALERT2 = "voices/dwarf/voices/dwarf/vs_nx0drogm_bat1.wav"; + SOUND_ALERT3 = "voices/dwarf/voices/dwarf/vs_ndwarfm1_bat3.wav"; + LANTERN_HAND_SUBMODEL = 2; + LANTERN_HAND_INDEX = 0; + LANTERN_COLOR = Vector3(128, 64, 0); + } + + void darcher_spawn() + { + SetName("Dwarven Bowman"); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 0); + SetProp(GetOwner(), "skin", RandomInt(0, 6)); + SetModelBody(1, 7); + SetWidth(32); + SetHeight(48); + SetRoam(true); + SetHealth(300); + SetRace("human"); + SetHearingSensitivity(8); + } + + void set_follower() + { + ALLY_FOLLOW_ON = 1; + } + + void frame_roll_back_push() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 100, 0)); + } + +} + +} diff --git a/scripts/angelscript/NPCs/dwarf_lantern.as b/scripts/angelscript/NPCs/dwarf_lantern.as new file mode 100644 index 00000000..3a03caf7 --- /dev/null +++ b/scripts/angelscript/NPCs/dwarf_lantern.as @@ -0,0 +1,152 @@ +#pragma context server + +#include "monsters/base_npc_attack.as" +#include "monsters/base_civilian.as" + +namespace MS +{ + +class DwarfLantern : CGameScript +{ + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + float FLEE_CHANCE; + int FLEE_HEALTH; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_DELAY; + string GLOW_COLOR; + int GLOW_RAD; + int HUNT_AGRO; + int I_R_GLOWING; + string MONSTER_MODEL; + int MOVE_RANGE; + string MY_LIGHT_SCRIPT; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + float RETALIATE_CHANGETARGET_CHANCE; + string SKEL_ID; + string SKEL_LIGHT_ID; + + DwarfLantern() + { + MOVE_RANGE = 64; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_DEATH = "diesimple"; + CAN_HUNT = 0; + HUNT_AGRO = 0; + CAN_ATTACK = 0; + ATTACK_RANGE = 90; + CAN_FLEE = 1; + FLEE_HEALTH = 25; + FLEE_CHANCE = 1.0; + CAN_HEAR = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_FLINCH = 1; + FLINCH_ANIM = "flinch1"; + FLINCH_CHANCE = 0.5; + FLINCH_DELAY = 1; + NO_JOB = 1; + NO_HAIL = 1; + NO_RUMOR = 1; + MONSTER_MODEL = "npc/dwarf_lantern.mdl"; + GLOW_COLOR = Vector3(255, 255, 128); + GLOW_RAD = 200; + } + + void OnRepeatTimer() + { + SetRepeatDelay(30); + if ((CanSee("ally", 180))) + { + } + SetMoveDest(m_hLastSeen); + EmitSound(GetOwner(), 0, "npc/dwarfchitchat.wav", 2); + } + + void OnSpawn() override + { + SetHealth(25); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Dwarven Miner"); + if (!(NO_WANDER)) + { + SetRoam(true); + } + if ((NO_WANDER)) + { + SetRoam(false); + } + SetModel(MONSTER_MODEL); + SetModelBody(0, RandomInt(0, 1)); + SetModelBody(1, 4); + SetMoveAnim("walk"); + if ((true)) + { + ScheduleDelayedEvent(3.0, "light_on"); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + npcatk_flee(GetEntityIndex(m_hLastStruck), 4096, 20.0); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + + void client_activate() + { + SKEL_ID = param1; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + light_loop(); + } + + void light_loop() + { + if ((GetMonsterProperty("isalive"))) + { + ScheduleDelayedEvent(0.2, "light_loop"); + } + if (!(GetMonsterProperty("isalive"))) + { + ClientEffect("light", SKEL_LIGHT_ID, "remove"); + } + if (!(GetMonsterProperty("isalive"))) return; + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + } + + void light_on() + { + if ((I_R_GLOWING)) return; + I_R_GLOWING = 1; + ClientEvent("persist", "all", currentscript, GetEntityIndex(GetOwner())); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + +} + +} diff --git a/scripts/angelscript/NPCs/dwarf_lantern_base.as b/scripts/angelscript/NPCs/dwarf_lantern_base.as new file mode 100644 index 00000000..32bde404 --- /dev/null +++ b/scripts/angelscript/NPCs/dwarf_lantern_base.as @@ -0,0 +1,82 @@ +#pragma context server + +namespace MS +{ + +class DwarfLanternBase : CGameScript +{ + string CUSTOM_LANTERN_COLOR; + float FREQ_LANTERNCL_REFRESH; + string LANTERN_ACTIVE; + string LANTERN_CL_IDX; + string LANTERN_COLOR; + int LANTERN_HAND_INDEX; + int LANTERN_HAND_SUBMODEL; + int LANTERN_ON; + int LANTERN_SET; + string NEXT_LANTERNCL_REFRESH; + + DwarfLanternBase() + { + FREQ_LANTERNCL_REFRESH = 30.0; + LANTERN_HAND_SUBMODEL = 1; + LANTERN_HAND_INDEX = 1; + LANTERN_COLOR = Vector3(128, 64, 0); + } + + void game_precache() + { + Precache("3dmflagry.spr"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(LANTERN_ON)) return; + if (!(GetGameTime() > NEXT_LANTERNCL_REFRESH)) return; + NEXT_LANTERNCL_REFRESH = GetGameTime(); + NEXT_LANTERNCL_REFRESH += FREQ_LANTERNCL_REFRESH; + if (!(LANTERN_ACTIVE)) + { + LANTERN_ACTIVE = 1; + SetModelBody(2, LANTERN_HAND_SUBMODEL); + } + if (CUSTOM_LANTERN_COLOR != "CUSTOM_LANTERN_COLOR") + { + string L_LANTERN_COLOR = CUSTOM_LANTERN_COLOR; + } + else + { + string L_LANTERN_COLOR = LANTERN_COLOR; + } + ClientEvent("new", "all", "NPCs/dwarf_lantern_cl", GetEntityIndex(GetOwner()), LANTERN_HAND_INDEX, L_LANTERN_COLOR, FREQ_LANTERNCL_REFRESH); + LANTERN_CL_IDX = "game.script.last_sent_id"; + } + + void set_lantern() + { + LANTERN_ON = 1; + LANTERN_SET = 1; + if (param1 == 0) + { + ClientEvent("update", "all", LANTERN_CL_IDX, "end_fx"); + SetModelBody(2, 0); + LANTERN_ON = 0; + LANTERN_ACTIVE = 0; + } + else + { + if ((param1).findFirst("(") == 0) + { + } + CUSTOM_LANTERN_COLOR = param1; + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("update", "all", LANTERN_CL_IDX, "end_fx"); + } + +} + +} diff --git a/scripts/angelscript/NPCs/dwarf_lantern_cl.as b/scripts/angelscript/NPCs/dwarf_lantern_cl.as new file mode 100644 index 00000000..d0d714ec --- /dev/null +++ b/scripts/angelscript/NPCs/dwarf_lantern_cl.as @@ -0,0 +1,97 @@ +#pragma context client + +namespace MS +{ + +class DwarfLanternCl : CGameScript +{ + int FX_ACTIVE; + string FX_COLOR; + string FX_DURATION; + string FX_HAND; + string FX_OWNER; + int GLOW_RAD; + string LEFT_HAND; + string LIGHT_ID; + string RIGHT_HAND; + string SPRITE_NAME; + + DwarfLanternCl() + { + RIGHT_HAND = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + LEFT_HAND = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + GLOW_RAD = 128; + SPRITE_NAME = "3dmflagry.spr"; + } + + void client_activate() + { + SetCallback("render", "enable"); + FX_OWNER = param1; + FX_HAND = param2; + FX_COLOR = param3; + FX_DURATION = param4; + FX_ACTIVE = 1; + if (FX_HAND == 0) + { + string L_LIGHT_LOC = RIGHT_HAND; + } + else + { + string L_LIGHT_LOC = LEFT_HAND; + } + ClientEffect("light", "new", L_LIGHT_LOC, GLOW_RAD, FX_COLOR, FX_DURATION); + LIGHT_ID = "game.script.last_light_id"; + ClientEffect("tempent", "sprite", SPRITE_NAME, L_LIGHT_LOC, "setup_lantern_sprite", "update_lantern_sprite"); + FX_DURATION("end_fx"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + if (FX_HAND == 0) + { + string L_LIGHT_LOC = RIGHT_HAND; + } + else + { + string L_LIGHT_LOC = LEFT_HAND; + } + ClientEffect("light", LIGHT_ID, L_LIGHT_LOC, GLOW_RAD, FX_COLOR, FX_DURATION); + } + + void end_fx() + { + FX_ACTIVE = 0; + ClientEffect("light", LIGHT_ID, L_LIGHT_LOC, GLOW_RAD, Vector3(0, 0, 0), 0.1); + ScheduleDelayedEvent(0.5, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_lantern_sprite() + { + if ((FX_ACTIVE)) return; + ClientEffect("tempent", "set_current_prop", "origin", Vector3(8000, 8000, 8000)); + } + + void setup_lantern_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "framerate", 4); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 0.75); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_COLOR); + ClientEffect("tempent", "set_current_prop", "follow", FX_OWNER, FX_HAND); + } + +} + +} diff --git a/scripts/angelscript/NPCs/dwarf_lantern_still.as b/scripts/angelscript/NPCs/dwarf_lantern_still.as new file mode 100644 index 00000000..da68347d --- /dev/null +++ b/scripts/angelscript/NPCs/dwarf_lantern_still.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "NPCs/dwarf_lantern.as" + +namespace MS +{ + +class DwarfLanternStill : CGameScript +{ + int NO_WANDER; + + DwarfLanternStill() + { + NO_WANDER = 1; + } + + void dwarf_spawn() + { + SetRoam(false); + set_npc_turret(); + } + +} + +} diff --git a/scripts/angelscript/NPCs/dwarf_pickaxe.as b/scripts/angelscript/NPCs/dwarf_pickaxe.as new file mode 100644 index 00000000..a09e08dd --- /dev/null +++ b/scripts/angelscript/NPCs/dwarf_pickaxe.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "monsters/base_battle_ally.as" +#include "monsters/base_monster_new.as" +#include "monsters/base_struck.as" +#include "NPCs/dwarf_lantern_base.as" + +namespace MS +{ + +class DwarfPickaxe : CGameScript +{ + int ALLY_FOLLOW_ON; + int ALLY_MOVE_AWAY_DIST; + string ANIM_ALLY_JUMP; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK2_ACCURACY; + int ATTACK2_CHANCE; + int ATTACK2_DAMAGE; + int ATTACK_ACCURACY; + int ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int NPC_BASE_EXP; + string NPC_MATERIAL_TYPE; + int NPC_NO_PLAYER_DMG; + int NPC_USE_FLINCH; + int NPC_USE_IDLE; + int NPC_USE_PAIN; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_ALLY_JUMP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3voices/dwarf/voices/dwarf/vs_nx0drogm_atk3.wav; + string SOUND_DEATH; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_FLINCH3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + + DwarfPickaxe() + { + ALLY_FOLLOW_ON = 0; + ANIM_ALLY_JUMP = "anim_roll_back"; + SOUND_ALLY_JUMP = "voices/dwarf/vs_nx0drogm_hit2.wav"; + ALLY_MOVE_AWAY_DIST = 128; + NPC_MATERIAL_TYPE = "flesh"; + NPC_USE_PAIN = 1; + NPC_USE_IDLE = 0; + NPC_USE_FLINCH = 1; + SOUND_PAIN1 = "voices/dwarf/vs_ndwarfm1_hit1.wav"; + SOUND_PAIN2 = "voices/dwarf/vs_ndwarfm1_bat1.wav"; + SOUND_PAIN3 = "voices/dwarf/vs_ndwarfm1_hit3.wav"; + SOUND_FLINCH1 = "voices/dwarf/vs_nx0drogm_heal.wav"; + SOUND_FLINCH2 = "voices/dwarf/vs_nx0drogm_help.wav"; + SOUND_FLINCH3 = "voices/dwarf/vs_nx0drogm_hit1.wav"; + SOUND_DEATH = "voices/dwarf/vs_nx0drogm_hit3.wav"; + SOUND_ALERT1 = "voices/dwarf/voices/dwarf/vs_nx0drogm_bat3.wav"; + SOUND_ALERT2 = "voices/dwarf/voices/dwarf/vs_nx0drogm_bat1.wav"; + SOUND_ALERT3 = "voices/dwarf/voices/dwarf/vs_ndwarfm1_bat3.wav"; + SOUND_ATTACK1 = "voices/dwarf/voices/dwarf/vs_nx0drogm_atk1.wav"; + SOUND_ATTACK2 = "voices/dwarf/voices/dwarf/vs_nx0drogm_atk2.wav"; + SOUND_ATTACK3voices/dwarf/voices/dwarf/vs_nx0drogm_atk3.wav = ""; + ANIM_FLINCH = "anim_xbow_flinch"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "attack"; + NPC_BASE_EXP = 0; + NPC_NO_PLAYER_DMG = 1; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 100; + ATTACK_MOVERANGE = 48; + ATTACK_DAMAGE = 50; + ATTACK2_DAMAGE = 150; + ATTACK2_CHANCE = 30; + ATTACK_ACCURACY = 80; + ATTACK2_ACCURACY = 90; + } + + void OnSpawn() override + { + dwarf_spawn(); + } + + void dwarf_spawn() + { + SetName("Dwarven Miner"); + SetModel("dwarf/male1.mdl"); + SetProp(GetOwner(), "skin", RandomInt(0, 6)); + SetModelBody(1, 8); + SetWidth(32); + SetHeight(48); + SetRoam(true); + SetHealth(400); + SetRace("human"); + SetHearingSensitivity(8); + } + + void frame_roll_back_push() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 100, 0)); + } + + void attack_1() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, "slash"); + if (RandomInt(1, 100) < ATTACK2_CHANCE) + { + ANIM_ATTACK = "attack2"; + } + } + + void attack_2() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK2_DAMAGE, ATTACK2_ACCURACY, "slash"); + ANIM_ATTACK = "attack"; + if (!(GetEntityRange(m_hLastStruckByMe) <= ATTACK_HITRANGE)) return; + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/debuff_stun", RandomInt(2, 8), GetEntityIndex(GetOwner())); + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/effect_push", 2, /* TODO: $relvel */ $relvel(10, -200, 10), 0); + } + + void set_leader() + { + if (param1 != 0) + { + SetMoveSpeed(2.5); + SetAnimMoveSpeed(2.5); + } + else + { + SetMoveSpeed(1.0); + SetAnimMoveSpeed(1.0); + } + } + +} + +} diff --git a/scripts/angelscript/NPCs/dwarf_sbow.as b/scripts/angelscript/NPCs/dwarf_sbow.as new file mode 100644 index 00000000..216012fb --- /dev/null +++ b/scripts/angelscript/NPCs/dwarf_sbow.as @@ -0,0 +1,96 @@ +#pragma context server + +#include "monsters/dwarf_zombie_sbow.as" +#include "monsters/base_battle_ally.as" + +namespace MS +{ + +class DwarfSbow : CGameScript +{ + string ACT_ANIM_RUN; + int ALLY_FOLLOW_ON; + int ALLY_MIN_DISTANCE; + int ALLY_MOVE_AWAY_DIST; + string ANIM_ALLY_JUMP; + string LANTERN_COLOR; + int LANTERN_HAND_INDEX; + int LANTERN_HAND_SUBMODEL; + int NPC_BASE_EXP; + int NPC_NO_PLAYER_DMG; + int NPC_USE_IDLE; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_ALLY_JUMP; + string SOUND_DEATH; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_FLINCH3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + + DwarfSbow() + { + NPC_BASE_EXP = 0; + NPC_NO_PLAYER_DMG = 1; + ALLY_FOLLOW_ON = 0; + ANIM_ALLY_JUMP = "anim_roll_back"; + NPC_USE_IDLE = 0; + SOUND_ALLY_JUMP = "voices/dwarf/vs_nx0drogm_hit2.wav"; + ALLY_MOVE_AWAY_DIST = 128; + ALLY_MIN_DISTANCE = 64; + ACT_ANIM_RUN = "run"; + SOUND_PAIN1 = "voices/dwarf/vs_ndwarfm1_hit1.wav"; + SOUND_PAIN2 = "voices/dwarf/vs_ndwarfm1_bat1.wav"; + SOUND_PAIN3 = "voices/dwarf/vs_ndwarfm1_hit3.wav"; + SOUND_FLINCH1 = "voices/dwarf/vs_nx0drogm_heal.wav"; + SOUND_FLINCH2 = "voices/dwarf/vs_nx0drogm_help.wav"; + SOUND_FLINCH3 = "voices/dwarf/vs_nx0drogm_hit1.wav"; + SOUND_DEATH = "voices/dwarf/vs_nx0drogm_hit3.wav"; + SOUND_ALERT1 = "voices/dwarf/voices/dwarf/vs_nx0drogm_bat3.wav"; + SOUND_ALERT2 = "voices/dwarf/voices/dwarf/vs_nx0drogm_bat1.wav"; + SOUND_ALERT3 = "voices/dwarf/voices/dwarf/vs_ndwarfm1_bat3.wav"; + LANTERN_HAND_SUBMODEL = 2; + LANTERN_HAND_INDEX = 0; + LANTERN_COLOR = Vector3(100, 75, 0); + } + + void darcher_spawn() + { + SetName("Dwarven Elite Bowman"); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, RandomInt(0, 1)); + SetProp(GetOwner(), "skin", RandomInt(0, 6)); + SetModelBody(1, 6); + SetWidth(32); + SetHeight(48); + SetRoam(true); + SetHealth(300); + SetRace("human"); + SetHearingSensitivity(8); + } + + void frame_roll_back_push() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 100, 0)); + } + + void set_leader() + { + if (param1 != 0) + { + SetMoveSpeed(2.5); + SetAnimMoveSpeed(2.5); + } + else + { + SetMoveSpeed(1.0); + SetAnimMoveSpeed(1.0); + } + } + +} + +} diff --git a/scripts/angelscript/NPCs/dwarf_warrior.as b/scripts/angelscript/NPCs/dwarf_warrior.as new file mode 100644 index 00000000..bd4da49c --- /dev/null +++ b/scripts/angelscript/NPCs/dwarf_warrior.as @@ -0,0 +1,72 @@ +#pragma context server + +#include "NPCs/dwarf_pickaxe.as" + +namespace MS +{ + +class DwarfWarrior : CGameScript +{ + string ATTACK2_CHANCE; + string ATTACK2_DAMAGE; + string ATTACK_DAMAGE; + string WEAPON_CHOICE; + + void dwarf_spawn() + { + SetName("Dwarven Warrior"); + SetModel("dwarf/male1.mdl"); + SetModelBody(1, 0); + SetProp(GetOwner(), "skin", RandomInt(0, 6)); + SetProp(GetOwner(), "scale", 1.2); + SetWidth(38); + SetHeight(50); + SetRoam(true); + SetHealth(700); + SetRace("human"); + SetHearingSensitivity(8); + ScheduleDelayedEvent(1.0, "select_weapon"); + } + + void select_weapon() + { + if (WEAPON_CHOICE == "WEAPON_CHOICE") + { + WEAPON_CHOICE = RandomInt(1, 4); + } + SetModelBody(1, WEAPON_CHOICE); + if (WEAPON_CHOICE == 1) + { + ATTACK_DAMAGE = 40; + ATTACK2_DAMAGE = 150; + ATTACK2_CHANCE = 15; + } + if (WEAPON_CHOICE == 2) + { + ATTACK_DAMAGE = 50; + ATTACK2_DAMAGE = 150; + ATTACK2_CHANCE = 25; + } + if (WEAPON_CHOICE == 3) + { + ATTACK_DAMAGE = 40; + ATTACK2_DAMAGE = 150; + ATTACK2_CHANCE = 15; + } + if (WEAPON_CHOICE == 4) + { + ATTACK_DAMAGE = 50; + ATTACK2_DAMAGE = 150; + ATTACK2_CHANCE = 25; + } + } + + void set_weapon() + { + LogDebug("set_weapon PARAM1"); + WEAPON_CHOICE = param1; + } + +} + +} diff --git a/scripts/angelscript/NPCs/feldagor.as b/scripts/angelscript/NPCs/feldagor.as new file mode 100644 index 00000000..d18e3218 --- /dev/null +++ b/scripts/angelscript/NPCs/feldagor.as @@ -0,0 +1,92 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class Feldagor : CGameScript +{ + int HIRE_PRICE; + int SAID_HI; + + Feldagor() + { + SAID_HI = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + if (!(SAID_HI)) + { + } + SetRace("human"); + if ((false)) + { + } + SetVolume(2); + SAID_HI = 1; + PlayAnim("once", "eye_weep"); + SayText("Huh?...an adventurer?"); + ScheduleDelayedEvent(2, "say_hi"); + } + + void OnSpawn() override + { + SetHealth(1); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Feldagor the wise"); + SetRoam(false); + SetModel("monsters/bludgeon_warrior.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 1); + SetIdleAnim("stand"); + SetInvincible(true); + HIRE_PRICE = RandomInt(1, 10); + string reg.mitem.id = "hire"; + string reg.mitem.access = "all"; + string reg.mitem.title = "Offer: "; + reg.mitem.title += HIRE_PRICE; + reg.mitem.title += " gold"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + reg.mitem.data += HIRE_PRICE; + string reg.mitem.callback = "recvoffer_gold"; + CatchSpeech("say_hi", "hail"); + } + + void say_hi() + { + SayText("Hello...i am Feldagor the wise...i have been living down here for over 120 years...yes i got a spell so the undead cant see me"); + ScheduleDelayedEvent(2, "say_hi2"); + } + + void say_hi2() + { + PlayAnim("once", "pondering2"); + SayText("This was once our capital...before Lor Malgoriand...enslaved us...only a few escaped...give me gold and il tell you something."); + } + + void recvoffer_gold() + { + ReceiveOffer("accept"); + PlayAnim("once", "yes"); + SayText("Thank you...anyway further down the hallway is a big room...it has a chest with valuable items...but it is guarded by the remains of our king."); + } + + void game_menu_getoptions() + { + string reg.mitem.id = "payment"; + string reg.mitem.title = "Offer "; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + string reg.mitem.callback = "menu_recv_payment"; + string reg.mitem.cb_failed = "menu_recv_payment_failed"; + } + +} + +} diff --git a/scripts/angelscript/NPCs/forsuth.as b/scripts/angelscript/NPCs/forsuth.as new file mode 100644 index 00000000..47857fba --- /dev/null +++ b/scripts/angelscript/NPCs/forsuth.as @@ -0,0 +1,592 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/base_npc_vendor.as" + +namespace MS +{ + +class Forsuth : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + int ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_CHAT; + int CAN_HEAR; + float CHAT_SPEED; + int CLOSE_SHOP; + int DID_HAIL; + string DID_PLAYER; + string DID_WARCRY; + string FACE_TARG; + int HUNT_AGRO; + string HUNT_LASTTARGET; + int ICE_LORD_PLOT_STEP; + int INVITED; + int IN_CHAT; + int JOB_PLOT_STEP; + int MONSTER_WIDTH; + string MY_START; + int NO_ROTATE; + int NO_STUCK_CHECKS; + int ORC_STEP; + string SOUND_SWING; + string STORE_NAME; + int STORE_RESTOCK; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VENDOR_NOT_ON_USE; + + Forsuth() + { + SOUND_SWING = "weapons/swingsmall.wav"; + ATTACK_DAMAGE = 30; + ATTACK_RANGE = 50; + ATTACK_HITRANGE = 100; + ATTACK_ACCURACY = 0.7; + MONSTER_WIDTH = 32; + NO_STUCK_CHECKS = 1; + STORE_RESTOCK = 0; + CHAT_SPEED = 5.0; + HUNT_AGRO = 0; + VENDOR_NOT_ON_USE = 1; + ANIM_IDLE = "idle"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "attack"; + STORE_NAME = "forsuths_store"; + STORE_TRIGGERTEXT = "drink shop store cold ale bitter"; + STORE_SELLMENU = 1; + CAN_HEAR = 0; + } + + void OnSpawn() override + { + ANIM_WALK = "idle"; + ANIM_RUN = "idle"; + SetHealth(200); + SetGold(10); + SetName("Forsuth , the Frosty"); + SetWidth(32); + SetHeight(72); + SetHearingSensitivity(8); + SetRace("human"); + SetRoam(false); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetMoveSpeed(0.0); + SetHearingSensitivity(6); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + CatchSpeech("npc_say_store", "drink"); + CatchSpeech("say_orcs", "marogar"); + CatchSpeech("lor_lore", "malgoriand"); + CatchSpeech("debug_props", "debug"); + SetDamageResistance("cold", 0.0); + CAN_CHAT = 1; + SetMenuAutoOpen(1); + ScheduleDelayedEvent(1.0, "get_pos"); + ScheduleDelayedEvent(1.0, "watch_for_friends"); + } + + void debug_props() + { + SayText("Izhunting " + IS_HUNTING); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(IsValidPlayer("ent_lastheard"))) return; + if (!(GetEntityRange("ent_lastheard") < 100)) return; + SetMoveDest(GetEntityIndex("ent_lastheard")); + } + + void get_pos() + { + MY_START = GetEntityOrigin(GetOwner()); + } + + void reset_chat() + { + if ((IN_CHAT)) + { + ScheduleDelayedEvent(6.0, "reset_chat"); + } + if ((IN_CHAT)) return; + ORC_STEP = 0; + ICE_LORD_PLOT_STEP = 0; + JOB_PLOT_STEP = 0; + } + + void watch_for_friends() + { + if ((INVITED)) return; + ScheduleDelayedEvent(5.0, "watch_for_friends"); + if (!(false)) return; + FACE_TARG = GetEntityIndex(m_hLastSeen); + SetSayTextRange(2048); + SayText("By Urdual s beard! Get in here where it s warm , ya young fool!"); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/get_in_here.wav", 10); + INVITED = 1; + start_facing_targ(); + ScheduleDelayedEvent(4.0, "invite_in"); + } + + void start_facing_targ() + { + SetRepeatDelay(5.0); + if ((NO_ROTATE)) return; + if ((CLOSE_STORE)) return; + SetMoveDest(FACE_TARG); + } + + void invite_in() + { + SayText("That s better! You ll catch yer death of cold out there!"); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/thats_better.wav", 10); + PlayAnim("critical", ANIM_IDLE); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + if (!(DID_HAIL)) return; + string reg.mitem.title = "The Marogar?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_orcs"; + string reg.mitem.title = "Ice Lord?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_rumor"; + string reg.mitem.title = "Any jobs?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + } + + void say_hi() + { + DID_HAIL = 1; + if ((IsValidPlayer("ent_lastspoke"))) + { + FACE_TARG = "ent_lastspoke"; + } + reset_chat(); + PlayAnim("once", "nod"); + if ((IN_CHAT)) return; + IN_CHAT = 1; + SayText("Hello thar , they call me Frosty. Forsuth the Frosty."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/hallo_thar.wav", 10); + CHAT_SPEED = 4.4; + ScheduleDelayedEvent(CHAT_SPEED, "hailed2"); + } + + void hailed2() + { + SayText("Thar be all sorts of nasty things out in that thar cold."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/there_be_all_sorts.wav", 10); + CHAT_SPEED = 3.8; + ScheduleDelayedEvent(CHAT_SPEED, "hailed3"); + } + + void hailed3() + { + SayText("Didn t used to be this way though."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/didnt_used_to_be.wav", 10); + CHAT_SPEED = 2.0; + ScheduleDelayedEvent(CHAT_SPEED, "hailed4"); + } + + void hailed4() + { + SayText("Not until the [Ice Lord] woke up... And the [marogar] ain t be helping much either."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/not_until_the_ice_lord.wav", 10); + CHAT_SPEED = 4.5; + ScheduleDelayedEvent(CHAT_SPEED, "hailed5"); + } + + void hailed5() + { + PlayAnim("critical", ANIM_IDLE); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/but_nevermind_that.wav", 10); + CHAT_SPEED = 3.8; + IN_CHAT = 0; + SayText("...but never mind ye that , " + I + " ve got some things er that ll warm ya right up!"); + } + + void say_rumor() + { + if ((IN_CHAT)) + { + SayText("...Just a second , ask me about that when " + I + " m done... Anyways... Where was I? Oh yes..."); + EmitSound(GetOwner(), 2, "voices/ms_snow/forsuth/just_a_second.wav", 10); + } + if ((IN_CHAT)) return; + IN_CHAT = 1; + say_icequeen_loop(); + } + + void say_icequeen_loop() + { + if ((IsValidPlayer("ent_lastspoke"))) + { + FACE_TARG = "ent_lastspoke"; + } + ICE_LORD_PLOT_STEP += 1; + if (ICE_LORD_PLOT_STEP == 1) + { + PlayAnim("once", "nod"); + SayText("Well , truth be told , that thing , it s been here longer than I."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/well_truth_be.wav", 10); + CHAT_SPEED = 4.7; + } + if (ICE_LORD_PLOT_STEP == 2) + { + SayText("Longer than me folks too , who be long gone , and let it be known that " + I + " am a might older than you..."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/older_than_me_folks_too.wav", 10); + CHAT_SPEED = 6.3; + } + if (ICE_LORD_PLOT_STEP == 3) + { + SayText("But before that beast s arrival, you had to go quite a bit further north before it got cold."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/before_that_beasts_arrival.wav", 10); + CHAT_SPEED = 5.1; + } + if (ICE_LORD_PLOT_STEP == 4) + { + SayText("It s old, so very old, no one remembers its name - and it ain t tellin neither."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/its_old_so_old.wav", 10); + CHAT_SPEED = 6.2; + } + if (ICE_LORD_PLOT_STEP == 5) + { + SayText("Legends been told that it was once a toy of the Loreldians themselves, the masters of Fate."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/legends_have_been_told.wav", 10); + CHAT_SPEED = 6.1; + } + if (ICE_LORD_PLOT_STEP == 6) + { + PlayAnim("once", "nod"); + SayText("Now it plagues the livin in retribution for its abandonment, or so it s said."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/now_it_plagues.wav", 10); + CHAT_SPEED = 5.1; + } + if (ICE_LORD_PLOT_STEP == 7) + { + SayText("We call it the Ice Bone Lord , but truth be told " + I + " know not whether it be lord or lady.. or somethin else."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/we_call_it.wav", 10); + CHAT_SPEED = 7.5; + } + if (ICE_LORD_PLOT_STEP == 8) + { + SayText("Best be careful round these parts, lest you find yourselves face to face with it."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/best_be_careful.wav", 10); + CHAT_SPEED = 4.6; + } + if (ICE_LORD_PLOT_STEP == 9) + { + SayText("Thar s certainly no helpin runnin into its creations."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/theres_certainly.wav", 10); + CHAT_SPEED = 3.5; + } + if (ICE_LORD_PLOT_STEP == 10) + { + SayText("But " + I + " shant complain , that s why I keep this shop here..."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/but_i_shant_complain.wav", 10); + CHAT_SPEED = 3.3; + } + if (ICE_LORD_PLOT_STEP == 11) + { + PlayAnim("critical", ANIM_IDLE); + SayText("People need my wares just to survive in these parts!"); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/people_need_my.wav", 10); + CHAT_SPEED = 3.4; + IN_CHAT = 0; + } + if (ICE_LORD_PLOT_STEP < 11) + { + CHAT_SPEED("say_icequeen_loop"); + } + if (ICE_LORD_PLOT_STEP == 11) + { + ICE_LORD_PLOT_STEP = 0; + } + } + + void say_job() + { + if ((IN_CHAT)) + { + SayText("...Just a second , ask me about that when " + I + " m done... Anyways... Where was I? Oh yes..."); + EmitSound(GetOwner(), 2, "voices/ms_snow/forsuth/just_a_second.wav", 10); + } + if ((IN_CHAT)) return; + IN_CHAT = 1; + say_job_loop(); + } + + void say_job_loop() + { + if ((IsValidPlayer("ent_lastspoke"))) + { + FACE_TARG = "ent_lastspoke"; + } + JOB_PLOT_STEP += 1; + if (JOB_PLOT_STEP == 1) + { + PlayAnim("once", "nod"); + SayText("Well , thar is one thing ye could do for me."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/well_theres_one.wav", 10); + CHAT_SPEED = 2.5; + } + if (JOB_PLOT_STEP == 2) + { + SayText("Out thar , in the colder parts , thar be some orcs. Talnorgah s boys, the [Marogar]."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/out_there_there.wav", 10); + CHAT_SPEED = 4.2; + } + if (JOB_PLOT_STEP == 3) + { + SayText("The stronger of em get have these beautiful ice blades."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/the_stronger_ones.wav", 10); + CHAT_SPEED = 4.0; + } + if (JOB_PLOT_STEP == 4) + { + SayText("They aren t nuthin too fancy - " + I + " can t sell the really good ones..."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/they_aint.wav", 10); + CHAT_SPEED = 3.4; + } + if (JOB_PLOT_STEP == 5) + { + SayText("But these orc ish ones - they sell like hotcakes when I visit Deralia, I ll tell ya that."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/but_these_orcish_ones.wav", 10); + CHAT_SPEED = 5.1; + } + if (JOB_PLOT_STEP == 6) + { + SayText("Bring some to me , and " + I + " ll give you a fair shake for em."); + PlayAnim("critical", ANIM_IDLE); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/bring_some_to_me.wav", 10); + CHAT_SPEED = 3.1; + IN_CHAT = 0; + } + if (JOB_PLOT_STEP < 6) + { + CHAT_SPEED("say_job_loop"); + } + if (JOB_PLOT_STEP == 6) + { + JOB_PLOT_STEP = 0; + } + } + + void say_orcs() + { + if ((IN_CHAT)) + { + SayText("...Just a second , ask me about that when " + I + " m done... Anyways... Where was I? Oh yes..."); + EmitSound(GetOwner(), 2, "voices/ms_snow/forsuth/just_a_second.wav", 10); + } + if ((IN_CHAT)) return; + IN_CHAT = 1; + say_orc_loop(); + } + + void say_orc_loop() + { + if ((IsValidPlayer("ent_lastspoke"))) + { + FACE_TARG = "ent_lastspoke"; + } + ORC_STEP += 1; + if (ORC_STEP == 1) + { + PlayAnim("once", "nod"); + SayText("Ya look like ye are from down south , so let me warn ye..."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/you_look_like.wav", 10); + CHAT_SPEED = 3.2; + } + if (ORC_STEP == 2) + { + SayText("The orcs here , are not like the orcs where ye come from , these are the Marogar tribe."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/these_orcs_here.wav", 10); + CHAT_SPEED = 4.9; + } + if (ORC_STEP == 3) + { + SayText("When Lor Malgoriand setup , it was cold , so these were his first... Not the worst , but still the first."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/when_lor.wav", 10); + CHAT_SPEED = 6.6; + } + if (ORC_STEP == 4) + { + SayText("They dun like the heat , and they certainly dun like fire."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/they_dont_like_heat.wav", 10); + CHAT_SPEED = 3.1; + } + if (ORC_STEP == 5) + { + SayText("Ya can usually keep em at bay with it."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/you_can_usually.wav", 10); + CHAT_SPEED = 2.2; + } + if (ORC_STEP == 6) + { + SayText("Still , they ve got shamans, and some good warriors."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/still_theyve.wav", 10); + CHAT_SPEED = 3.2; + } + if (ORC_STEP == 7) + { + SayText("Their chief , Talnorgah , is a beast indeed. Slow , but strong."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/their_chief_talnorgah.wav", 10); + CHAT_SPEED = 5.1; + } + if (ORC_STEP == 8) + { + SayText("Word has it that he s waitin on the return of Lor Malgoriand himself!"); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/word_has_it.wav", 10); + CHAT_SPEED = 4.4; + } + if (ORC_STEP == 9) + { + SayText("So my advice to you is , if ya see him , keep running!"); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/so_my_advice.wav", 10); + CHAT_SPEED = 4.4; + PlayAnim("critical", ANIM_IDLE); + IN_CHAT = 0; + } + if (ORC_STEP < 9) + { + CHAT_SPEED("say_orc_loop"); + } + if (ORC_STEP == 9) + { + ORC_STEP = 0; + } + } + + void lor_lore() + { + if ((IN_CHAT)) + { + SayText("...Just a second , ask me about that when " + I + " m done... Anyways... Where was I? Oh yes..."); + EmitSound(GetOwner(), 2, "voices/ms_snow/forsuth/just_a_second.wav", 10); + } + if ((IN_CHAT)) return; + SayText("Hmmm... Already said too much about that. Better to ask a priest , for all " + I + " know of gods and demons."); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/ive_already_said.wav", 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(false)) return; + if (!(GetEntityRange(m_hLastSeen) < 200)) return; + SetMoveDest(m_hLastSeen); + SetMoveSpeed(1.0); + CLOSE_SHOP = 1; + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + SayText("We ll be havin none of that in here!"); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/well_be_having.wav", 10); + } + if ((IS_HUNTING)) return; + if (!(GetEntityRange(param1) > 100)) return; + HUNT_LASTTARGET = �NONE�; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + SetMoveSpeed(1.0); + CLOSE_SHOP = 1; + SetMoveAnim(ANIM_RUN); + if (!(IsValidPlayer(m_hLastStruck))) return; + if (!(DID_PLAYER)) + { + DID_PLAYER = 1; + SetRace("hguard"); + SayText("Argh! " + GetEntityName(m_hLastStruck) + " !Yer no better than the orcs!"); + HUNT_LASTTARGET = GetEntityIndex(m_hLastStruck); + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/gah_youre_no_better.wav", 10); + } + } + + void my_target_died() + { + if ((false)) return; + SayText("There now , nice and peaceful again."); + SetMoveDest(MY_START); + CLOSE_SHOP = 0; + EmitSound(GetOwner(), 0, "voices/ms_snow/forsuth/there_now_nice.wav", 10); + } + + void attack_1() + { + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, "slash"); + } + + void vendor_offerstore() + { + if ((CLOSE_SHOP)) return; + if ((IN_CHAT)) return; + SayText("What can " + I + " do ye for?"); + NO_ROTATE = 1; + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "drink_mead", 20, 100, 2.0); + AddStoreItem(STORE_NAME, "drink_ale", 20, 100, 2.0); + AddStoreItem(STORE_NAME, "drink_wine", 0, 100, 2.0); + AddStoreItem(STORE_NAME, "drink_forsuth", 10, 100, 0); + AddStoreItem(STORE_NAME, "swords_liceblade", 1, 400, 0.5); + AddStoreItem(STORE_NAME, "swords_iceblade", 0, 150, 0.2); + AddStoreItem(STORE_NAME, "mana_resist_cold", 5, 150, 0); + AddStoreItem(STORE_NAME, "mana_immune_cold", 1, 150, 0); + AddStoreItem(STORE_NAME, "mana_mpotion", 1, 300, 0); + AddStoreItem(STORE_NAME, "item_crystal_reloc", 5, 300, 0); + AddStoreItem(STORE_NAME, "item_crystal_return", 10, 300, 0); + AddStoreItem(STORE_NAME, "health_spotion", 1, 200, 0); + AddStoreItem(STORE_NAME, "health_mpotion", 1, 200, 0); + AddStoreItem(STORE_NAME, "scroll2_frost_xolt", 1, 400, 0); + AddStoreItem(STORE_NAME, "sheath_spellbook", 1, 150, 0); + AddStoreItem(STORE_NAME, "proj_arrow_fire", 180, 400, 0, 60); + AddStoreItem(STORE_NAME, "item_torch", 180, 800, 0); + } + + void trade_success() + { + ScheduleDelayedEvent(60.0, "restore_rotate"); + } + + void restore_rotate() + { + NO_ROTATE = 0; + } + + void npcatk_faceattacker() + { + if ((IS_FLEEING)) return; + if (!(IS_HUNTING)) return; + SetMoveDest(GetEntityIndex(param1)); + LookAt(1024); + } + +} + +} diff --git a/scripts/angelscript/NPCs/g_adventurer.as b/scripts/angelscript/NPCs/g_adventurer.as new file mode 100644 index 00000000..af0d7122 --- /dev/null +++ b/scripts/angelscript/NPCs/g_adventurer.as @@ -0,0 +1,434 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class GAdventurer : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BATTLE_OVER; + int BATTLLE_OVER; + string CHAT_DELAY_STEP1; + string CHAT_DELAY_STEP2; + string CHAT_DELAY_STEP3; + string CHAT_SOUND1; + string CHAT_SOUND2; + string CHAT_SOUND3; + string CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEPS; + string CONVO_TYPE; + string CURRENT_SPEAKER; + string DID_INTRO; + int FORCED_MOVE_DEST; + float FREQ_FF_WARN; + int IN_BATTLE; + int MAX_REWARDS_TOGIVE; + string MENU_TARGET; + int MOVE_RANGE; + string NEXT_FF_WARNING; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int NPC_NO_PLAYER_DMG; + int N_REWARDS_GIVEN; + string QUEST_WINNER; + string REWARD_LIST; + string REWARD_NAMES; + string SAID_REWARD; + string SOUND_DEATH; + string SOUND_STRUCK; + + GAdventurer() + { + FREQ_FF_WARN = 10.0; + REWARD_LIST = "axes_poison1;swords_poison1;swords_liceblade;gauntlets_normal;mana_leadfoot;scroll2_summon_rat;bows_swiftbow;item_charm_w1"; + REWARD_NAMES = "an Envenomed Axe;a Envenomed Shortsword;a Lesser Ice Blade;a set of Gauntlets;a Potion of Stability;a Summon Rat Scroll;an Elven Bow;a Wolf Charm"; + N_REWARDS_GIVEN = 0; + MAX_REWARDS_TOGIVE = 0; + SOUND_STRUCK = "body/flesh1.wav"; + SOUND_DEATH = "voices/human/male_die.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "diebackward"; + ANIM_ATTACK = "swordswing1_l"; + MOVE_RANGE = 32; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE = "$randf(5.0,8.0)"; + NPC_GIVE_EXP = 0; + NPC_NO_PLAYER_DMG = 1; + NO_JOB = 1; + NO_RUMOR = 1; + NO_HAIL = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(10.0); + if ((BATTLE_OVER)) + { + if (!(GAVE_REWARD)) + { + } + SetMoveDest(QUEST_WINNER); + } + if (Distance(GetMonsterProperty("origin"), NPC_HOME_LOC) > 800) + { + } + npcatk_suspend_ai(2.0); + NPC_FORCED_MOVEDEST = 1; + npcatk_setmovedest(NPC_HOME_LOC, 32); + SetMoveDest(NPC_HOME_LOC); + if (m_hAttackTarget != "unset") + { + npcatk_run(); + } + } + + void OnSpawn() override + { + SetName("Jerdid the Adventurer"); + SetInvincible(true); + ScheduleDelayedEvent(0.1, "stay_invuln_damnit"); + SetRace("human"); + SetWidth(32); + SetHeight(96); + SetHealth(300); + SetSayTextRange(800); + SetHearingSensitivity(8); + SetModel("npc/royal_guard1.mdl"); + SetModelBody(1, 3); + ScheduleDelayedEvent(1.0, "critical_npc"); + SetIdleAnim("idle1"); + SetMoveAnim("walk"); + CatchSpeech("say_hi", "hi"); + } + + void stay_invuln_damnit() + { + SetInvincible(true); + } + + void OnDamage(int damage) override + { + if ((BATTLE_OVER)) + { + SetDamage("dmg"); + SetDamage("hit"); + return; + int EXIT_SUB = 1; + } + if (!(IN_BATTLE)) + { + SetDamage("dmg"); + SetDamage("hit"); + return; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + EmitSound(GetOwner(), 0, SOUND_STRUCK, 5); + if (!(IsValidPlayer(param1))) return; + if (!(GetGameTime() > NEXT_FF_WARNING)) return; + NEXT_FF_WARNING = GetGameTime(); + NEXT_FF_WARNING += FREQ_FF_WARN; + string L_ITEM_NAME = GetEntityProperty(param1, "scriptvar"); + string L_ITEM_NAME = GetEntityProperty(L_ITEM_NAME, "itemname"); + if ((L_ITEM_NAME).findFirst("magic_hand") == 0) + { + int IS_SPELL = 1; + } + if ((L_ITEM_NAME).findFirst("blunt_staff") == 0) + { + int IS_SPELL = 1; + } + if ((IS_SPELL)) + { + SayText("Watch where you cast your spells!"); + int RND_SPELL = RandomInt(1, 2); + if (RND_SPELL == 1) + { + EmitSound(GetOwner(), 0, "voices/jerdid/Jerdid_8.wav", 10); + } + else + { + EmitSound(GetOwner(), 0, "voices/jerdid/Jerdid_8_2.wav", 10); + } + } + if (!(IS_SPELL)) + { + SayText("Hey there! Careful where you swing that!"); + EmitSound(GetOwner(), 0, "voices/jerdid/Jerdid_9.wav", 10); + } + } + + void say_hi() + { + if ((IN_BATTLE)) return; + if ((BUSY_CHATTING)) return; + if ((IsValidPlayer(param1))) + { + CURRENT_SPEAKER = GetEntityIndex(param1); + face_speaker(CURRENT_SPEAKER); + } + if ((IsValidPlayer("ent_lastspoke"))) + { + CURRENT_SPEAKER = GetEntityIndex("ent_lastspoke"); + face_speaker(CURRENT_SPEAKER); + } + if (!(BATTLE_OVER)) + { + DID_INTRO = 1; + PlayAnim("critical", "lean"); + ScheduleDelayedEvent(2.0, "fix_anims"); + CONVO_TYPE = "intro"; + CHAT_STEPS = 3; + CHAT_STEP = 0; + CHAT_STEP1 = "Ah, hello there. I've been honing my skills here for awhile now."; + CHAT_DELAY_STEP1 = 5.01; + CHAT_SOUND1 = "voices/jerdid/Jerdid_1.wav"; + CHAT_STEP2 = "However, I'm hearing far more howls than I'd feel comfortable dealing with... Should there be wolves attached to them all."; + CHAT_DELAY_STEP2 = 8.19; + CHAT_SOUND2 = "voices/jerdid/Jerdid_2.wav"; + CHAT_STEP3 = "If you'd be so kind as to stay a moment and assist me, I'd would be forever grateful."; + CHAT_DELAY_STEP3 = 6.33; + CHAT_SOUND3 = "voices/jerdid/Jerdid_3.wav"; + chat_loop(); + } + if ((BATTLE_OVER)) + { + PlayAnim("critical", "yes"); + ScheduleDelayedEvent(2.0, "fix_anims"); + SayText("Thanks again for your assistance."); + EmitSound(GetOwner(), 0, "voices/jerdid/Jerdid_10.wav", 10); + } + } + + void chat_loop() + { + if (CHAT_STEP == 2) + { + if (CONVO_TYPE == "intro") + { + } + SetMoveDest(/* TODO: $relpos */ $relpos(0, -8000, 0)); + UseTrigger("distant_howl"); + PlayAnim("critical", "panic"); + ScheduleDelayedEvent(2.0, "fix_anims"); + } + if (CHAT_STEP == 3) + { + if (CONVO_TYPE == "intro") + { + } + SetMoveDest(CURRENT_SPEAKER); + PlayAnim("critical", "converse2"); + NO_HAIL = 1; + ScheduleDelayedEvent(2.0, "open_menu"); + } + } + + void open_menu() + { + OpenMenu(CURRENT_SPEAKER); + } + + void game_menu_getoptions() + { + LogDebug("game_menu_getoptions conv: CONVO_TYPE"); + if (CONVO_TYPE == "intro") + { + string reg.mitem.title = "Yes, I'll help."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "player_accept"; + string reg.mitem.title = "Sorry, busy."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "player_deny"; + } + if ((BATTLE_OVER)) + { + LogDebug("game_menu_getoptions bat BATTLE_OVER"); + if (CONVO_TYPE != "give_list") + { + } + if (!(GetEntityProperty(param1, "scriptvar"))) + { + } + string reg.mitem.title = "Collect reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_reward"; + } + if (CONVO_TYPE == "give_list") + { + if (!(GetEntityProperty(param1, "scriptvar"))) + { + } + for (int i = 0; i < GetTokenCount(REWARD_LIST, ";"); i++) + { + add_rewards(); + } + CONVO_TYPE = "none"; + NO_HAIL = 0; + } + } + + void add_rewards() + { + if (!(RandomInt(1, 2) == 1)) return; + string CUR_IDX = i; + string CUR_REWARD = GetToken(REWARD_LIST, CUR_IDX, ";"); + string CUR_NAME = GetToken(REWARD_NAMES, CUR_IDX, ";"); + string reg.mitem.title = CUR_NAME; + string reg.mitem.type = "callback"; + string reg.mitem.data = CUR_IDX; + string reg.mitem.cb_failed = "no_want"; + string reg.mitem.callback = "give_selected_reward"; + LogDebug("add_rewards reg.mitem.title reg.mitem.callback"); + } + + void give_selected_reward() + { + LogDebug("give_selected_reward GetEntityName(param1) PARAM2"); + N_REWARDS_GIVEN += 1; + // TODO: offer PARAM1 GetToken(REWARD_LIST, param2, ";") + CallExternal(param1, "ext_set_reward", 1); + } + + void player_accept() + { + cycle_up("manual_override"); + CONVO_TYPE = "none"; + QUEST_WINNER = param1; + PlayAnim("critical", "yes"); + SayText("Your assistance is greatly appreciated! Now stand-fast and be ready... " + I + " m sure they ve caught our scent by now."); + EmitSound(GetOwner(), 0, "voices/jerdid/Jerdid_5.wav", 10); + IN_BATTLE = 1; + UseTrigger("wolves_go"); + SetInvincible(false); + SetRoam(true); + } + + void player_deny() + { + NO_HAIL = 0; + CONVO_TYPE = "none"; + PlayAnim("critical", "eye_wipe"); + SayText(I... + "Undestand... " + A + "powerful warrior like yourself must be busy... Quite often , " + I + " suppose..."); + EmitSound(GetOwner(), 0, "voices/jerdid/Jerdid_4.wav", 10); + SetRoam(true); + } + + void wolf_raid_over() + { + MAX_REWARDS_TOGIVE = "game.playersnb"; + BATTLE_OVER = 1; + NO_HAIL = 0; + npcatk_clear_targets(); + BATTLLE_OVER = 1; + IN_BATTLE = 0; + FORCED_MOVE_DEST = 1; + SetMoveDest(QUEST_WINNER); + SetInvincible(true); + ScheduleDelayedEvent(1.0, "hunt_quest_winner_loop"); + } + + void hunt_quest_winner_loop() + { + if ((GetEntityProperty(QUEST_WINNER, "scriptvar"))) return; + ScheduleDelayedEvent(1.0, "hunt_quest_winner_loop"); + NPC_FORCED_MOVEDEST = 1; + if ((CanSee(QUEST_WINNER, 128))) + { + if (!(SAID_REWARD)) + { + } + SAID_REWARD = 1; + ScheduleDelayedEvent(0.1, "give_reward"); + } + else + { + SetMoveDest(QUEST_WINNER); + } + } + + void give_reward() + { + if (N_REWARDS_GIVEN >= MAX_REWARDS_TOGIVE) + { + SayText("Sorry , " + I + " ve nothing left to offer."); + EmitSound(GetOwner(), 0, "voices/jerdid/Jerdid_7.wav", 10); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + NPC_FORCED_MOVEDEST = 1; + PlayAnim("critical", "yes"); + if ((IsEntityAlive(param1))) + { + SetMoveDest(param1); + } + ScheduleDelayedEvent(2.0, "fix_anims"); + if ((GetEntityProperty(param1, "scriptvar"))) return; + SayText("Thank you ever-so-much for your assistance! Please select a reward for your aid."); + EmitSound(GetOwner(), 0, "voices/jerdid/Jerdid_6.wav", 10); + CONVO_TYPE = "give_list"; + NO_HAIL = 1; + if ((IsEntityAlive(param1))) + { + MENU_TARGET = param1; + } + if (!(IsEntityAlive(param1))) + { + MENU_TARGET = QUEST_WINNER; + } + ScheduleDelayedEvent(0.1, "send_menu"); + } + + void send_menu() + { + OpenMenu(MENU_TARGET); + } + + void fix_anims() + { + SetMoveAnim("walk"); + SetIdleAnim("idle1"); + PlayAnim("once", "idle1"); + } + + void game_menu_cancel() + { + NO_HAIL = 0; + CONVO_TYPE = "none"; + } + + void attack_1() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE); + } + + void npc_suicide() + { + LogDebug("No suicide for me"); + } + +} + +} diff --git a/scripts/angelscript/NPCs/guard.as b/scripts/angelscript/NPCs/guard.as new file mode 100644 index 00000000..6075a82e --- /dev/null +++ b/scripts/angelscript/NPCs/guard.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "monsters/base_npc_attack.as" + +namespace MS +{ + +class Guard : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_HUNT; + int CAN_RETALIATE; + int CAN_STTACK; + int MOVE_RANGE; + float RETALIATE_CHANGETARGET_CHANCE; + + Guard() + { + ATTACK_RANGE = 150; + MOVE_RANGE = 90; + CAN_ATTACK = 0; + ATTACK_PERCENTAGE = 0.95; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + CAN_HUNT = 0; + CAN_FLEE = 0; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + } + + void OnRepeatTimer() + { + SetRepeatDelay(30); + CanSee("ally"); + SetMoveDest(m_hLastSeen); + SetVolume(2); + Say("hello1[50] *[20] *[55] *[55] *[23] *[22]"); + } + + void OnSpawn() override + { + SetHealth(100); + SetMaxHealth(100); + SetGold(10); + SetWidth(32); + SetHeight(72); + SetRace("neutral"); + SetName("Guard"); + SetRoam(true); + SetModel("npc/guard1.mdl"); + SetMoveAnim("walk"); + SetInvincible(false); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, Random(5.0, 8.0), ATTACK_PERCENTAGE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + CAN_STTACK = 1; + } + +} + +} diff --git a/scripts/angelscript/NPCs/guildmaster.as b/scripts/angelscript/NPCs/guildmaster.as new file mode 100644 index 00000000..d776fbb3 --- /dev/null +++ b/scripts/angelscript/NPCs/guildmaster.as @@ -0,0 +1,144 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class Guildmaster : CGameScript +{ + int CANCHAT; + string CUR_SKILL; + string NERF_PLR; + string PROP_TOKENS; + int PROXY_SPOKE; + string SKILL_TOKENS; + + Guildmaster() + { + if (!(PROXY_SPOKE)) + { + } + if (CanSee("player", 512) == 1) + { + say_hi(); + } + PROXY_SPOKE = 1; + } + + void OnSpawn() override + { + SetHealth(1); + SetGold(0); + SetName("Fenrin , the Crest Keeper"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + CANCHAT = 1; + SetSayTextRange(1024); + CatchSpeech("say_hi", "hello"); + CatchSpeech("cheater_guessing", "edana"); + CatchSpeech("give_orochi", "krizarid"); + Precache("npc/balancepriest1.mdl"); + Precache("voices/human/male_idle2.wav"); + PROXY_SPOKE = 0; + ScheduleDelayedEvent(0.1, "check_central"); + } + + void check_central() + { + if (!("game.central" == 0)) return; + if ((G_DEVELOPER_MODE)) return; + SendInfoMsg("all", FENRIN_FN_ONLY + " You must be connected to [FN] to use the Guild Master"); + DeleteEntity(GetOwner()); + } + + void say_hi() + { + SetVolume(10); + SayText("Greetings , " + I + " am Fenrin , the Master of Guilds."); + PlayAnim("once", "talkleft"); + ScheduleDelayedEvent(5, "say_hi2"); + } + + void say_hi2() + { + if ((GetEntityName("ent_lastspoke")).findFirst("dridje") >= 0) + { + if (("game.central")) + { + } + hi_dridge(); + return; + } + SetVolume(10); + SayText("Or " + I + "was , now " + I + " just kinda sit here looking over this gaudy map fragment."); + ScheduleDelayedEvent(5.0, "say_hi3"); + } + + void say_hi3() + { + PlayAnim("once", "retina"); + SayText("By the gods , this is gaudy. Who built this monstrosity anyways?"); + ScheduleDelayedEvent(5.0, "say_hi4"); + } + + void say_hi4() + { + SayText("Oh , if you re here for a crest, that system is changed. You should hit up the forums and send Thothie a PM."); + ScheduleDelayedEvent(5.0, "say_hi5"); + } + + void say_hi5() + { + PlayAnim("once", "nod"); + SayText("The forums being at www.msremake.com , of course."); + } + + void hi_dridge() + { + PlayAnim("once", "nod"); + SayText("Oh hi there Dridje..."); + ScheduleDelayedEvent(3.0, "hi_dridge2"); + } + + void hi_dridge2() + { + PlayAnim("once", "retina"); + NERF_PLR = GetEntityIndex("ent_lastspoke"); + SayText("Enjoy your rollback."); + SKILL_TOKENS = "archery;bluntarms;axehandling;swordsmanship;polearms;smallarms;spellcasting"; + PROP_TOKENS = "proficiency;power;balance"; + for (int i = 0; i < GetTokenCount(SKILL_TOKENS, ";"); i++) + { + do_nerf(); + } + } + + void do_nerf() + { + string CUR_IDX = i; + CUR_SKILL = GetToken(SKILL_TOKENS, CUR_IDX, ";"); + for (int i = 0; i < GetTokenCount(PROP_TOKENS, ";"); i++) + { + do_nerf_props(); + } + } + + void do_nerf_props() + { + string CUR_SKILL_NAME = CUR_SKILL; + CUR_SKILL_NAME += "."; + CUR_SKILL_NAME += GetToken(PROP_TOKENS, i, ";"); + string L_GRAB_SKILL = "skill."; + L_GRAB_SKILL += CUR_SKILL_NAME; + string L_SKILL_LEVEL = GetEntityProperty(NERF_PLR, "l_grab_skill"); + L_SKILL_LEVEL *= 0.5; + } + +} + +} diff --git a/scripts/angelscript/NPCs/human_guard.as b/scripts/angelscript/NPCs/human_guard.as new file mode 100644 index 00000000..325600f6 --- /dev/null +++ b/scripts/angelscript/NPCs/human_guard.as @@ -0,0 +1,101 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_guard_friendly_new.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class HumanGuard : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_HUNT; + int CAN_RETALIATE; + int HUNT_AGRO; + int MOVE_RANGE; + int NPC_GIVE_EXP; + int NPC_NO_PLAYER_DMG; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_STRUCK; + string SOUND_WARCRY; + + HumanGuard() + { + SOUND_STRUCK = "body/flesh1.wav"; + SOUND_WARCRY = "voices/human/male_guard_shout2.wav"; + SOUND_DEATH = "voices/human/male_die.wav"; + SOUND_ATTACK = "weapons/cbar_miss1.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "diebackward"; + ANIM_ATTACK = "swordswing1_l"; + MOVE_RANGE = 65; + ATTACK_RANGE = 85; + ATTACK_HITRANGE = 130; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE = "$randf(5.0,8.0)"; + CAN_HUNT = 1; + CAN_ATTACK = 1; + HUNT_AGRO = 1; + CAN_RETALIATE = 1; + NPC_GIVE_EXP = 0; + } + + void OnSpawn() override + { + SetName("Guard"); + SetHealth(170); + SetHearingSensitivity(12); + SetWidth(32); + SetHeight(85); + SetRace("hguard"); + SetRoam(false); + SetBloodType("red"); + SetModel("npc/guard1.mdl"); + SetDamageResistance("all", ".9"); + SetStat("parry", 10); + CatchSpeech("say_xmass", "christmas"); + if (!(true)) return; + if (!(StringToLower(GetMapName()) == "foutpost")) return; + SetRace("human"); + NPC_NO_PLAYER_DMG = 1; + } + + void attack_1() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK, 8); + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + EmitSound(GetOwner(), 0, SOUND_STRUCK, 3); + } + + void baseguard_tobattle() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + } + + void game_dodamage() + { + if (!(param1)) return; + EmitSound(GetOwner(), 0, SOUND_STRUCK, 10); + } + +} + +} diff --git a/scripts/angelscript/NPCs/human_guard_archer.as b/scripts/angelscript/NPCs/human_guard_archer.as new file mode 100644 index 00000000..f9e8ea83 --- /dev/null +++ b/scripts/angelscript/NPCs/human_guard_archer.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_guard_friendly_new.as" + +namespace MS +{ + +class HumanGuardArcher : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_COF; + int ATTACK_DAMAGE; + string ATTACK_HITRANGE; + string ATTACK_RANGE; + int ATTACK_SPEED; + int CAN_ATTACK; + int CAN_HUNT; + int CAN_RETALIATE; + int HUNT_AGRO; + string MOVE_RANGE; + int NPC_GIVE_EXP; + int NPC_NO_PLAYER_DMG; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_STRUCK; + string SOUND_WARCRY; + + HumanGuardArcher() + { + SOUND_STRUCK = "body/flesh1.wav"; + SOUND_WARCRY = "voices/human/male_guard_shout.wav"; + SOUND_ATTACK = "weapons/bow/bowslow.wav"; + SOUND_DEATH = "voices/human/male_die.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die_fallback"; + ANIM_ATTACK = "shootorcbow"; + ATTACK_SPEED = 500; + MOVE_RANGE = ATTACK_SPEED; + ATTACK_RANGE = ATTACK_SPEED; + ATTACK_HITRANGE = ATTACK_SPEED; + ATTACK_DAMAGE = "$rand(8,12)"; + ATTACK_COF = 0; + CAN_HUNT = 1; + CAN_ATTACK = 1; + HUNT_AGRO = 1; + CAN_RETALIATE = 1; + NPC_GIVE_EXP = 0; + } + + void OnSpawn() override + { + SetName("Human Archer"); + SetHealth(120); + SetHearingSensitivity(12); + SetWidth(32); + SetHeight(85); + SetRace("hguard"); + SetRoam(false); + SetModel("npc/archer.mdl"); + SetDamageResistance("all", ".9"); + SetModelBody(2, 2); + SetStat("parry", 2); + SetMoveSpeed(0.0); + if (!(true)) return; + if (!(StringToLower(GetMapName()) == "foutpost")) return; + SetDamageResistance("all", 0.25); + SetRace("human"); + NPC_NO_PLAYER_DMG = 1; + } + + void shoot_arrow() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK, 10); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (!(IsValidPlayer(TARG_ORG))) + { + TARG_ORG += "z"; + } + float TARG_DIST = Distance(TARG_ORG, GetMonsterProperty("origin")); + TARG_DIST /= 25; + SetAngles("add_view.pitch"); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 3), "none", ATTACK_SPEED, ATTACK_DAMAGE, ATTACK_COF, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + EmitSound(GetOwner(), 0, SOUND_STRUCK, 5); + } + + void baseguard_tobattle() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + } + +} + +} diff --git a/scripts/angelscript/NPCs/human_guard_sword.as b/scripts/angelscript/NPCs/human_guard_sword.as new file mode 100644 index 00000000..47473670 --- /dev/null +++ b/scripts/angelscript/NPCs/human_guard_sword.as @@ -0,0 +1,99 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_guard_friendly_new.as" + +namespace MS +{ + +class HumanGuardSword : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_HUNT; + int CAN_RETALIATE; + string FINAL_DAMAGE; + string FINAL_HITCHANCE; + int HUNT_AGRO; + int MOVE_RANGE; + int NPC_GIVE_EXP; + int NPC_NO_PLAYER_DMG; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_STRUCK; + string SOUND_WARCRY; + + HumanGuardSword() + { + SOUND_STRUCK = "body/flesh1.wav"; + SOUND_WARCRY = "voices/human/male_guard_shout2.wav"; + SOUND_ATTACK = "weapons/bow/bowslow.wav"; + SOUND_DEATH = "voices/human/male_die.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "diebackward"; + ANIM_ATTACK = "swordswing1_l"; + MOVE_RANGE = 65; + ATTACK_RANGE = 85; + ATTACK_HITRANGE = 130; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE = "$randf(5.0,8.0)"; + CAN_HUNT = 1; + CAN_ATTACK = 1; + HUNT_AGRO = 1; + CAN_RETALIATE = 1; + NPC_GIVE_EXP = 0; + } + + void OnSpawn() override + { + if ((CUSTOM_GUARD)) return; + SetName("Guard"); + SetHealth(170); + SetHearingSensitivity(12); + SetWidth(32); + SetHeight(85); + SetRace("hguard"); + SetRoam(false); + SetModel("npc/guard1.mdl"); + SetDamageResistance("all", ".9"); + SetModelBody(2, 2); + SetStat("parry", 10); + SetMoveSpeed(0.0); + if (!(true)) return; + if (!(StringToLower(GetMapName()) == "foutpost")) return; + SetRace("human"); + NPC_NO_PLAYER_DMG = 1; + } + + void attack_1() + { + FINAL_HITCHANCE = ATTACK_HITRANGE; + FINAL_DAMAGE = ATTACK_DAMAGE; + basenpc_adj_attack(); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, FINAL_DAMAGE, FINAL_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + EmitSound(GetOwner(), 0, SOUND_STRUCK, 5); + } + + void baseguard_tobattle() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + } + +} + +} diff --git a/scripts/angelscript/NPCs/human_guard_towerarcher.as b/scripts/angelscript/NPCs/human_guard_towerarcher.as new file mode 100644 index 00000000..aaf592e2 --- /dev/null +++ b/scripts/angelscript/NPCs/human_guard_towerarcher.as @@ -0,0 +1,155 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class HumanGuardTowerarcher : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string ARROW_TARGET; + string ARROW_TYPE; + int ATTACK_COF; + int ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int CAN_ATTACK; + int CAN_HUNT; + int CAN_RETALIATE; + int HUNT_AGRO; + string MOVE_RANGE; + string NPCATK_TARGET; + int NPC_GIVE_EXP; + int NPC_NO_PLAYER_DMG; + int PLAYING_DEAD; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_STRUCK; + string SOUND_WARCRY; + + HumanGuardTowerarcher() + { + SOUND_STRUCK = "body/flesh1.wav"; + SOUND_WARCRY = "voices/human/male_guard_shout.wav"; + SOUND_ATTACK = "weapons/bow/bowslow.wav"; + SOUND_DEATH = "voices/human/male_die.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die_fallback"; + ANIM_ATTACK = "shootorcbow"; + ATTACK_SPEED = 900; + ARROW_TYPE = "proj_arrow_jagged"; + MOVE_RANGE = ATTACK_SPEED; + ATTACK_RANGE = 2000; + ATTACK_HITRANGE = 2000; + ATTACK_DAMAGE = "$rand(8,12)"; + ATTACK_COF = 5; + CAN_HUNT = 1; + CAN_ATTACK = 1; + HUNT_AGRO = 1; + CAN_RETALIATE = 1; + NPC_GIVE_EXP = 0; + } + + void OnSpawn() override + { + SetName("Human Archer"); + SetHealth(120); + SetHearingSensitivity(12); + SetWidth(32); + SetHeight(85); + SetBlind(true); + SetRace("hguard"); + SetRoam(false); + SetModel("npc/archer.mdl"); + SetDamageResistance("all", ".9"); + SetModelBody(2, 2); + SetStat("parry", 2); + SetMoveSpeed(0.0); + SetAnimMoveSpeed(0.0); + npcatk_suspend_ai(); + ScheduleDelayedEvent(1.0, "scan_for_nme"); + PLAYING_DEAD = 1; + if (!(true)) return; + if (!(StringToLower(GetMapName()) == "foutpost")) return; + SetRace("human"); + NPC_NO_PLAYER_DMG = 1; + } + + void scan_for_nme() + { + ScheduleDelayedEvent(1.0, "scan_for_nme"); + string T_BOX = /* TODO: $get_tbox */ $get_tbox("enemy", 1800); + if (!(T_BOX != "none")) return; + string T_BOX = /* TODO: $sort_entlist */ $sort_entlist(T_BOX, "range"); + ARROW_TARGET = GetToken(T_BOX, 0, ";"); + if (GetEntityRace(ARROW_TARGET) == "human") + { + ARROW_TARGET = "unset"; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + shoot_target(); + } + + void shoot_target() + { + SetMoveDest(ARROW_TARGET); + PlayAnim("once", ANIM_ATTACK); + } + + void shoot_arrow() + { + NPCATK_TARGET = ARROW_TARGET; + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (!(IsValidPlayer(TARG_ORG))) + { + TARG_ORG += "z"; + } + float TARG_DIST = Distance(TARG_ORG, GetMonsterProperty("origin")); + TARG_DIST /= 15; + SetAngles("add_view.pitch"); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 30), "none", 400, ATTACK_DAMAGE, 0, "none"); + EmitSound(GetOwner(), 0, SOUND_ATTACK, 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + ARROW_TARGET = GetEntityIndex(m_hLastStruck); + shoot_target(); + EmitSound(GetOwner(), 0, SOUND_STRUCK, 5); + } + + void baseguard_tobattle() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + } + + void catapults_fire() + { + int RAND = RandomInt(1, 100); + if (RAND > 60) + { + SetSayTextRange(1024); + if (RAND < 85) + { + SayText("Take cover!"); + } + else + { + SayText("Projectiles inbound!"); + } + } + } + +} + +} diff --git a/scripts/angelscript/NPCs/james.as b/scripts/angelscript/NPCs/james.as new file mode 100644 index 00000000..966eee45 --- /dev/null +++ b/scripts/angelscript/NPCs/james.as @@ -0,0 +1,124 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class James : CGameScript +{ + int BUSY_CHATTING; + float CHAT_DELAY; + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + int CHAT_STEPS; + int CONGRATS_MSG; + string DID_CONGRATS; + int NO_JOB; + int NO_RUMOR; + int SAID_HI; + + James() + { + NO_JOB = 1; + NO_RUMOR = 1; + CHAT_DELAY = 3.0; + } + + void OnSpawn() override + { + SetName("Jae em"); + SetHealth(1); + SetInvincible(true); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetModel("npc/human1.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 5); + SetRoam(false); + SetMoveAnim("idle1"); + SetHearingSensitivity(10); + SetSayTextRange(1024); + CatchSpeech("say_hi", "hi"); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if (!(IsValidPlayer(LAST_HEARD))) return; + if (!(false)) return; + if (!(GetEntityRange(LAST_HEARD) < 200)) return; + if ((CONGRATS_MSG)) + { + face_speaker(LAST_HEARD); + if (!(DID_CONGRATS)) + { + } + say_hi(); + } + if ((SAID_HI)) return; + face_speaker(LAST_HEARD); + say_hi(); + } + + void say_hi() + { + if ((IsValidPlayer(param1))) + { + face_speaker(GetEntityIndex(param1)); + } + if ((IsValidPlayer("ent_lastspoke"))) + { + face_speaker(GetEntityIndex("ent_lastspoke")); + } + SAID_HI = 1; + if ((CONGRATS_MSG)) + { + DID_CONGRATS = 1; + PlayAnim("critical", "eye_wipe"); + bchat_mouth_move(); + SayText("Thank you for driving the orcs away! " + I + " hope our people will return soon..."); + ScheduleDelayedEvent(2.0, "fix_anims"); + } + if ((CONGRATS_MSG)) return; + if ((BUSY_CHATTING)) return; + PlayAnim("critical", "fear1"); + CHAT_STEPS = 5; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + EmitSound(GetOwner(), 0, "npc/oldvillager2.wav", 10); + CHAT_STEP1 = "Please help us! The orcs have taken over our town!"; + CHAT_STEP2 = "Most of the town's people fled but Taol and I got trapped here."; + CHAT_STEP3 = "I've been hiding in this room and Taol has locked himself in the room below."; + CHAT_STEP4 = "He won't let anyone in until the orcs are gone."; + CHAT_STEP5 = "If you slay the orcs, I'll open two of the city gates for you and perhaps we'll get to see Taol again."; + chat_loop(); + } + + void wavend() + { + CONGRATS_MSG = 1; + string NEARBY_PLAYER = /* TODO: $get_insphere */ $get_insphere("player", 512); + if (NEARBY_PLAYER != 0) + { + face_speaker(NEARBY_PLAYER); + say_hi(); + } + } + + void fix_anims() + { + SetMoveAnim("idle1"); + SetIdleAnim("idle1"); + PlayAnim("critical", "idle1"); + } + +} + +} diff --git a/scripts/angelscript/NPCs/lighthouse_keeper.as b/scripts/angelscript/NPCs/lighthouse_keeper.as new file mode 100644 index 00000000..8c84fd2e --- /dev/null +++ b/scripts/angelscript/NPCs/lighthouse_keeper.as @@ -0,0 +1,756 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "monsters/debug.as" + +namespace MS +{ + +class LighthouseKeeper : CGameScript +{ + string ANIM_IDLE_CHAT; + string APPLE_QUEST_ACTIVE; + string BASIC_REWARDS; + string BUSY_CHATTING; + float CHAT_DELAY; + string CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEPS; + int CONFIRM_STEP; + int DONE_CRYSTAL; + int DONE_FOOD; + int DONE_GRAVE; + int DONE_SPIDER; + string HIRED_CRYSTAL; + string HIRED_FOOD; + string HIRED_GRAVE; + string HIRED_SPIDER; + string MENU_MODE; + string MENU_QUEST; + string MENU_TARGET; + string MY_YAW; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + string TASK_STRING; + int TENDING_HOUSE; + string TEND_ANIMS; + string WAS_STARTLED; + + LighthouseKeeper() + { + TEND_ANIMS = "console;dryhands;writeboard;studycart;lean;pondering;pondering2;pondering3;buysoda;console;console;console;console;console;"; + BASIC_REWARDS = "smallarms_huggerdagger3;smallarms_craftedknife3;smallarms_stiletto;swords_katana;axes_scythe;axes_doubleaxe;blunt_greatmaul;blunt_mace;bows_longbow;scroll_summon_rat;armor_leather_studded;armor_helm_knight;"; + NO_HAIL = 1; + NO_JOB = 1; + NO_RUMOR = 1; + CHAT_DELAY = 4.5; + ANIM_IDLE_CHAT = "idle1"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(3, 5)); + if ((TENDING_HOUSE)) + { + } + SetAngles("face"); + string N_IDLES = GetTokenCount(TEND_ANIMS, ";"); + int RND_IDLE = RandomInt(1, N_IDLES); + RND_IDLE -= 1; + string IDLE_ANIM = GetToken(TEND_ANIMS, RND_IDLE, ";"); + SetIdleAnim(IDLE_ANIM); + SetMoveAnim(IDLE_ANIM); + } + + void OnSpawn() override + { + SetName("lkeeper"); + SetName("Hyehold , the Lighthouse Keep"); + SetHealth(1); + SetInvincible(true); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetModel("npc/human1.mdl"); + SetModelBody(0, 3); + SetModelBody(1, 5); + SetRoam(false); + SetMoveAnim("idle1"); + SetHearingSensitivity(10); + SetSayTextRange(1024); + SetNoPush(true); + TENDING_HOUSE = 1; + ScheduleDelayedEvent(0.1, "get_yaw"); + MENU_MODE = "normal"; + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_food", "food"); + CatchSpeech("say_crystal", "crystal"); + CatchSpeech("say_grave", "grave"); + CatchSpeech("say_spider", "spider"); + } + + void get_yaw() + { + MY_YAW = GetMonsterProperty("angles.yaw"); + } + + void say_hi() + { + if (!(IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex("ent_lastspoke"); + } + if ((IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex(param1); + } + face_speaker(FACE_TARG); + say_intro(); + } + + void face_speaker() + { + TENDING_HOUSE = 0; + SetIdleAnim(ANIM_IDLE_CHAT); + SetMoveAnim(ANIM_IDLE_CHAT); + } + + void say_intro() + { + if ((BUSY_CHATTING)) return; + if (!(WAS_STARTLED)) + { + WAS_STARTLED = 1; + PlayAnim("critical", "eye_wipe"); + CHAT_STEPS = 2; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Oh! Hello there!"; + CHAT_STEP2 = "Sorry for being so startled. It's not very often I get visitors way up here."; + chat_loop(); + string NEXT_CHAT = CHAT_DELAY; + NEXT_CHAT *= CHAT_STEPS; + NEXT_CHAT += 0.5; + NEXT_CHAT("say_jobs"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(WAS_STARTLED)) return; + PlayAnim("critical", ANIM_IDLE_CHAT); + say_jobs(); + } + + void say_jobs() + { + if ((BUSY_CHATTING)) return; + CHAT_STEPS = 2; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "It's just me up here, and I'm getting on in years, so I often neglect many tasks..."; + build_task_string(); + CHAT_STEP2 = TASK_STRING; + chat_loop(); + ScheduleDelayedEvent(2.0, "convo_anim"); + MENU_MODE = "pick_quest"; + } + + void build_task_string() + { + TASK_STRING = "For instance, "; + if (!(DONE_SPIDER)) + { + TASK_STRING += "killing those darn [spiders], "; + int QUESTS_LEFT = 1; + } + if (!(DONE_GRAVE)) + { + TASK_STRING += "tending Feldar's [grave], "; + int QUESTS_LEFT = 1; + } + if (!(DONE_CRYSTAL)) + { + TASK_STRING += "gathering lighthouse [crystals], "; + int QUESTS_LEFT = 1; + } + if (!(DONE_FOOD)) + { + TASK_STRING += "not to mention simply getting some [food]!"; + int QUESTS_LEFT = 1; + } + if (!(QUESTS_LEFT)) + { + TASK_STRING = "But good young lads like yourself come and fix me up from time to time - so - I've nothing that needs doing just now."; + ScheduleDelayedEvent(2.0, "resume_tending"); + } + } + + void say_spider() + { + if ((BUSY_CHATTING)) return; + if ((DONE_SPIDER)) + { + PlayAnim("critical", "wave"); + SayText("Oh , someone already got rid of those for me. Thank you anyways."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex("ent_lastspoke"); + } + if ((IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex(param1); + } + face_speaker(FACE_TARG); + if (GetPlayerQuestData(FACE_TARG, "l") != 0) + { + target_busy(FACE_TARG); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((IsEntityAlive(HIRED_SPIDER))) + { + SayText(GetEntityName(HIRED_SPIDER) + " is already working on that for me."); + int EXIT_SUB = 1; + TENDING_HOUSE = 1; + bchat_mouth_move(); + } + if ((EXIT_SUB)) return; + MENU_TARGET = FACE_TARG; + CHAT_STEPS = 4; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Well, there's a spider infestation in the caves below. I've put it off for far too long, so..."; + CHAT_STEP2 = "...I figure by now there's got to be a nest and some very sizable eggs."; + CHAT_STEP3 = "If those hatch I could be in for more than a little trouble!"; + CHAT_STEP4 = "Think you could go down there and take care of that for me? I'd be ever so grateful."; + MENU_MODE = "confirm"; + MENU_QUEST = "spider"; + CONFIRM_STEP = 4; + chat_loop(); + ScheduleDelayedEvent(2.0, "convo_anim"); + ScheduleDelayedEvent(6.0, "convo_anim"); + } + + void say_grave() + { + if ((BUSY_CHATTING)) return; + if ((DONE_GRAVE)) + { + PlayAnim("critical", "wave"); + SayText("Oh , someone already delivered that for me , thanks."); + bchat_mouth_move(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex("ent_lastspoke"); + } + if ((IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex(param1); + } + face_speaker(FACE_TARG); + if (GetPlayerQuestData(FACE_TARG, "l") != 0) + { + target_busy(FACE_TARG); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((IsEntityAlive(HIRED_GRAVE))) + { + SayText(GetEntityName(HIRED_GRAVE) + " is already working on that for me."); + int EXIT_SUB = 1; + bchat_mouth_move(); + TENDING_HOUSE = 1; + } + if ((EXIT_SUB)) return; + MENU_TARGET = FACE_TARG; + CHAT_STEPS = 6; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Well, my old friend Feldar, always the good samaritan, was out escorting some fresh adventurers around the Thornlands."; + CHAT_STEP2 = "Near as the constable could tell, it turns out they were actually bandits, and they assasinated the kindhearted old fool."; + CHAT_STEP3 = "He loved this old place, so we made his grave just around the back, ... I used to visit it quite often, but lately it's been... Strange."; + CHAT_STEP4 = "He had a favorite figurine of The Goddess Felewyn, you see. His widow brought it to me recently. I think he wanted it buried with him..."; + CHAT_STEP5 = "Or at least that would explain the... Unrest... Outside."; + CHAT_STEP6 = "You look like you might be able to brave the denizens around there. If you could bring this statuette there, I'm sure it'd all quiet down."; + MENU_MODE = "confirm"; + MENU_QUEST = "grave"; + CONFIRM_STEP = 6; + chat_loop(); + } + + void say_crystal() + { + if ((BUSY_CHATTING)) return; + if ((DONE_CRYSTAL)) + { + PlayAnim("critical", "wave"); + SayText("Oh , someone already got those for me , thanks."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex("ent_lastspoke"); + } + if ((IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex(param1); + } + face_speaker(FACE_TARG); + if (GetPlayerQuestData(FACE_TARG, "l") != 0) + { + target_busy(FACE_TARG); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((IsEntityAlive(HIRED_CRYSTAL))) + { + SayText(GetEntityName(HIRED_CRYSTAL) + " is already working on that for me."); + int EXIT_SUB = 1; + bchat_mouth_move(); + TENDING_HOUSE = 1; + } + if ((EXIT_SUB)) return; + MENU_TARGET = FACE_TARG; + CHAT_STEPS = 5; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Ah, well... The lighthouse here's been a bit flickery as of late - I think she needs some new crystals."; + CHAT_STEP2 = "The light crystals that power the magic core are fairly common in these parts..."; + CHAT_STEP3 = "But with all the things I've seen crawling about lately, I just don't feel up to grabbing them myself!"; + CHAT_STEP4 = "If you could find me a good set, I'll reward ye handsomely."; + CHAT_STEP5 = "Otherwise we could wind up with a boat smashed up on the rocks, and that'd be bad for business!"; + MENU_MODE = "confirm"; + MENU_QUEST = "crystal"; + CONFIRM_STEP = 4; + chat_loop(); + } + + void say_food() + { + if ((BUSY_CHATTING)) return; + if ((DONE_FOOD)) + { + PlayAnim("critical", "wave"); + SayText("Oh, someone already got me some - I'm quite sated, thanks."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex("ent_lastspoke"); + } + if ((IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex(param1); + } + face_speaker(FACE_TARG); + if (GetPlayerQuestData(FACE_TARG, "l") != 0) + { + target_busy(FACE_TARG); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((IsEntityAlive(HIRED_FOOD))) + { + SayText(GetEntityName(HIRED_FOOD) + " is already working on that for me."); + int EXIT_SUB = 1; + bchat_mouth_move(); + } + if ((EXIT_SUB)) return; + MENU_TARGET = FACE_TARG; + CHAT_STEPS = 3; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "I... I don't think I've actually eaten a thing in a week, now that I think of it..."; + CHAT_STEP2 = "...and I really try not to, believe me. Too busy for food and all..."; + CHAT_STEP3 = "If you could just bring me an apple or two, anything really, I'd be so very grateful."; + MENU_MODE = "confirm"; + MENU_QUEST = "food"; + CONFIRM_STEP = 3; + chat_loop(); + } + + void accept_quest() + { + string TRIG_STR = "quest_"; + TRIG_STR += MENU_QUEST; + UseTrigger(TRIG_STR); + SetPlayerQuestData(param1, "l"); + MENU_MODE = "normal"; + convo_anim(); + if (MENU_QUEST == "spider") + { + HIRED_SPIDER = param1; + SayText("Thank you , oh so much. Come back here when ya clear out those pests."); + } + if (MENU_QUEST == "grave") + { + HIRED_GRAVE = param1; + SayText("Thank you , oh so much. Come back here when you ve done the deed and I ll reward you."); + // TODO: offer PARAM1 item_fstatue + } + if (MENU_QUEST == "crystal") + { + HIRED_CRYSTAL = param1; + SayText("Thank you , oh so much. Be careful with those crystals by the way - they are quite fragile!"); + } + if (MENU_QUEST == "food") + { + HIRED_FOOD = param1; + SayText("Oh yes, please bring me something, I'd be grateful beyond words."); + APPLE_QUEST_ACTIVE = 1; + } + TENDING_HOUSE = 1; + } + + void chat_loop() + { + WAS_STARTLED = 1; + if (MENU_MODE == "confirm") + { + if (CHAT_STEP == CONFIRM_STEP) + { + OpenMenu(MENU_TARGET); + } + } + if (CHAT_STEP == 2) + { + convo_anim(); + } + if (CHAT_STEP == 4) + { + convo_anim(); + } + if (CHAT_STEP == 6) + { + convo_anim(); + } + if (CHAT_STEP == 8) + { + convo_anim(); + } + if (CHAT_STEP == 10) + { + convo_anim(); + } + } + + void decline_quest() + { + MENU_MODE = "normal"; + SetPlayerQuestData(param1, "l"); + PlayAnim("critical", "no"); + SayText("Well... That's alright. At least you're some company... I guess."); + bchat_mouth_move(); + TENDING_HOUSE = 1; + } + + void game_menu_getoptions() + { + string CUR_QUEST = GetPlayerQuestData(param1, "l"); + if (MENU_MODE != "confirm") + { + if ((ItemExists(param1, "item_light_crystal"))) + { + if (!(DONE_CRYSTAL)) + { + } + string reg.mitem.title = "Offer Light Crystal"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_light_crystal"; + string reg.mitem.callback = "reward_crystal"; + } + if ((ItemExists(param1, "health_apple"))) + { + if ((APPLE_QUEST_ACTIVE)) + { + } + if (!(DONE_FOOD)) + { + } + string reg.mitem.title = "Offer Apple"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "health_apple"; + string reg.mitem.callback = "reward_food"; + } + if (CUR_QUEST == 0) + { + } + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + if ((WAS_STARTLED)) + { + if (!(DONE_SPIDER)) + { + string reg.mitem.title = "Ask about spiders"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_spider"; + } + if (!(DONE_GRAVE)) + { + string reg.mitem.title = "Ask about Feldar's Grave"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_grave"; + } + if (!(DONE_CRYSTAL)) + { + string reg.mitem.title = "Ask about crystals"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_crystal"; + } + if (!(DONE_FOOD)) + { + string reg.mitem.title = "Ask about food"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_food"; + } + string reg.mitem.title = "Ask about forest"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_forest"; + } + } + if (MENU_MODE == "confirm") + { + if (MENU_QUEST == "spider") + { + string reg.mitem.title = "I'll clear the eggs."; + } + if (MENU_QUEST == "grave") + { + string reg.mitem.title = "I'll visit the grave."; + } + if (MENU_QUEST == "crystal") + { + string reg.mitem.title = "I'll get the crystals."; + } + if (MENU_QUEST == "food") + { + string reg.mitem.title = "I'll bring some apples."; + } + string reg.mitem.type = "callback"; + string reg.mitem.callback = "accept_quest"; + string reg.mitem.title = "Sorry. I'm busy."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "decline_quest"; + } + if ((DONE_SPIDER)) + { + if (param1 == HIRED_SPIDER) + { + } + if (CUR_QUEST == "spider") + { + } + string reg.mitem.title = "Collect Spider Quest Reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "reward_spider"; + } + if ((DONE_GRAVE)) + { + if (param1 == HIRED_GRAVE) + { + } + if (CUR_QUEST == "grave") + { + } + string reg.mitem.title = "Collect Grave Quest Reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "reward_grave"; + } + if (CUR_QUEST != 0) + { + string REMIND_STR = "Cancel "; + REMIND_STR += CUR_QUEST; + REMIND_STR += " quest"; + string reg.mitem.title = REMIND_STR; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "clear_quest"; + } + } + + void reward_spider() + { + face_speaker(param1); + convo_anim(); + // TODO: offer PARAM1 gold RandomInt(10, 20) + string BASIC_WINNER = param1; + offer_basic_reward(BASIC_WINNER); + int SCROLL_CHANCE = RandomInt(1, 2); + if (SCROLL_CHANCE == 1) + { + int SCROLL_TOME = RandomInt(1, 2); + if (SCROLL_TOME == 1) + { + // TODO: offer PARAM1 scroll2_ice_shield_lesser + } + if (SCROLL_TOME == 2) + { + // TODO: offer PARAM1 scroll_ice_shield_lesser + } + } + if (SCROLL_CHANCE == 2) + { + offer_basic_reward(BASIC_WINNER); + } + SayText("Thank you so very much. I'd hate to have a swarm of eight leggeds creeping up here."); + SetPlayerQuestData(param1, "l"); + ScheduleDelayedEvent(2.0, "resume_tending"); + } + + void reward_grave() + { + string BASIC_WINNER = param1; + offer_basic_reward(BASIC_WINNER); + face_speaker(param1); + convo_anim(); + // TODO: offer PARAM1 gold RandomInt(10, 15) + SayText("Thank you so very much. I'm sure he'll rest easier now."); + SetPlayerQuestData(param1, "l"); + ScheduleDelayedEvent(2.0, "resume_tending"); + } + + void reward_crystal() + { + string BASIC_WINNER = param1; + offer_basic_reward(BASIC_WINNER); + DONE_CRYSTAL = 1; + face_speaker(param1); + convo_anim(); + // TODO: offer PARAM1 gold RandomInt(10, 20) + SayText("A crystal! Thank goodness! I'm sure they'd hang me if we had another... Accident."); + SetPlayerQuestData(param1, "l"); + ScheduleDelayedEvent(2.0, "resume_tending"); + } + + void reward_food() + { + string BASIC_WINNER = param1; + offer_basic_reward(BASIC_WINNER); + DONE_FOOD = 1; + face_speaker(param1); + convo_anim(); + // TODO: offer PARAM1 gold 5 + SayText("I thank ye! My stomach, doubly so!"); + SetPlayerQuestData(param1, "l"); + ScheduleDelayedEvent(2.0, "resume_tending"); + } + + void resume_tending() + { + TENDING_HOUSE = 1; + } + + void clear_quest() + { + string CUR_QUEST = GetPlayerQuestData(param1, "l"); + if (CUR_QUEST == "spider") + { + HIRED_SPIDER = 0; + } + if (CUR_QUEST == "grave") + { + HIRED_GRAVE = 0; + string METHOD_HACK = ItemExists(param1, "item_fstatue"); + } + if (CUR_QUEST == "crystal") + { + HIRED_CRYSTAL = 0; + } + if (CUR_QUEST == "food") + { + HIRED_FOOD = 0; + } + MENU_MODE = "normal"; + SetPlayerQuestData(param1, "l"); + SayText("That's alright. There's plenty else to do around here too, if you're interested."); + bchat_mouth_move(); + TENDING_HOUSE = 1; + } + + void target_busy() + { + PlayAnim("critical", "pondering3"); + string CUR_QUEST = GetPlayerQuestData(param1, "l"); + if (CUR_QUEST == "spider") + { + SayText("Didn't you say you were going to kill some spiders for me?"); + } + if (CUR_QUEST == "grave") + { + SayText("Didn't you say you were going to tend Feldar's grave for me?"); + } + if (CUR_QUEST == "crystal") + { + SayText("Didn't you say you were going to get some crystals for me?"); + } + if (CUR_QUEST == "food") + { + SayText("Didn't you say you were going to get me some food?"); + } + MENU_MODE = "confirm"; + MENU_QUEST = CUR_QUEST; + OpenMenu(param1); + } + + void quest_done_spider() + { + DONE_SPIDER = 1; + } + + void quest_done_grave() + { + DONE_GRAVE = 1; + } + + void offer_basic_reward() + { + string N_REWARDS = GetTokenCount(BASIC_REWARDS, ";"); + int RND_REWARD = RandomInt(0, N_REWARDS); + // TODO: offer PARAM1 GetToken(BASIC_REWARDS, RND_REWARD, ";") + } + + void say_forest() + { + if ((BUSY_CHATTING)) return; + if (!(IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex("ent_lastspoke"); + } + if ((IsValidPlayer(param1))) + { + string FACE_TARG = GetEntityIndex(param1); + } + face_speaker(FACE_TARG); + CHAT_STEPS = 4; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Oh, that forest over there. Lots of wolves in that forest. Nasty place."; + CHAT_STEP2 = "A young adventurer wandered into there the other day. He looked a bit green around the ears, if you catch my meaning."; + CHAT_STEP3 = "I tried to stop him, but he wouldn't listen."; + if (GetPlayerCount() == 1) + { + CHAT_STEP4 = "You look like a strapping young lad. You might want to go in there and check on him."; + } + if (GetPlayerCount() > 1) + { + CHAT_STEP4 = "You look like strapping young lads. You might want to go in there and check on him."; + } + chat_loop(); + } + +} + +} diff --git a/scripts/angelscript/NPCs/script_assistant.as b/scripts/angelscript/NPCs/script_assistant.as new file mode 100644 index 00000000..7cdbc585 --- /dev/null +++ b/scripts/angelscript/NPCs/script_assistant.as @@ -0,0 +1,516 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class ScriptAssistant : CGameScript +{ + string ADDED_SUMMON; + string CHAT_CURRENT_SPEAKER; + int CHAT_NO_CLOSE_MOUTH; + int CHAT_USE_CONV_ANIMS; + string CONTROLLER_HEAD_LR; + string CONTROLLER_HEAD_UD; + string CVAR_SCRIPTS; + string DEV_SCRIPTS; + int DID_INTRO; + int MAP_SHIELD_ON; + int MENU_MODE; + string MENU_TARGET; + int N_SUMMONS; + string PLAYER_LIST; + string SCRIPT_POS; + int SUMMON_ANG; + int SUMMON_DIST; + int SUMMON_SCRIPT; + int WATER_OPEN; + + ScriptAssistant() + { + CONTROLLER_HEAD_LR = "controller0"; + CONTROLLER_HEAD_UD = "controller1"; + CHAT_USE_CONV_ANIMS = 0; + CHAT_NO_CLOSE_MOUTH = 1; + array PROBLEM_LIST; + array ARRAY_SUMMONS; + SUMMON_SCRIPT = 0; + N_SUMMONS = 0; + MAP_SHIELD_ON = 1; + WATER_OPEN = 0; + SUMMON_ANG = 90; + SUMMON_DIST = 256; + MENU_MODE = 0; + } + + void OnSpawn() override + { + SetName("Dungeon Master's Assistant"); + SetModel("monsters/venevus.mdl"); + SetWidth(32); + SetHeight(72); + SetHealth(1); + SetInvincible(true); + SetRace("beloved"); + SetSayTextRange(1024); + SetProp(GetOwner(), "scale", 0.75); + CatchSpeech("menu_whoami", "hi"); + CatchSpeech("menu_list_problems", "problem"); + CatchSpeech("menu_map_help", "help"); + CatchSpeech("menu_toggle_water", "water"); + CatchSpeech("menu_toggle_shield", "shield"); + CatchSpeech("summon", "send_menu"); + CatchSpeech("menu_remove_all", "remove"); + ScheduleDelayedEvent(0.1, "scan_for_master"); + ScheduleDelayedEvent(0.05, "check_problems"); + } + + void check_problems() + { + string L_CVAR_DEV = GetCvar("ms_dev_mode"); + CVAR_SCRIPTS = GetCvar("ms_dynamicnpc"); + if (!(L_CVAR_DEV)) + { + PROBLEM_LIST.insertLast("ms_dev_mode is not set to 1 in the listenserver.cfg!"); + } + if ((CVAR_SCRIPTS).length() < 2) + { + PROBLEM_LIST.insertLast("ms_dynamicnpc does not seem to be set in the listenserver.cfg!"); + } + DEV_SCRIPTS = ""; + for (int i = 0; i < GetTokenCount(CVAR_SCRIPTS, ";"); i++) + { + parse_ms_dynamicnpc(); + } + } + + void scan_for_master() + { + if ((DID_INTRO)) return; + PLAYER_LIST = ""; + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + check_players(); + } + if ((DID_INTRO)) return; + ScheduleDelayedEvent(1.0, "scan_for_master"); + } + + void check_players() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if ((DID_INTRO)) return; + if (!(GetEntityRange(CUR_TARG) < 256)) return; + DID_INTRO = 1; + CHAT_CURRENT_SPEAKER = CUR_TARG; + ScheduleDelayedEvent(2.0, "do_intro"); + } + + void do_intro() + { + if (int(PROBLEM_LIST.length()) > 0) + { + chat_now("Master! Something is wrong!", 2.0, "none", "none", "add_to_que"); + for (int i = 0; i < int(PROBLEM_LIST.length()); i++) + { + list_problems(); + } + if (int(PROBLEM_LIST.length()) > 1) + { + chat_now("I'm afraid this will have to be fixed before we can continue.", 4.0, "none", "none", "add_to_que"); + } + else + { + chat_now("These problems will have to be remedied before we can continue.", 4.0, "none", "none", "add_to_que"); + } + } + else + { + chat_now("Master... We are ready to begin.", 2.0, "none", "none", "add_to_que"); + } + } + + void list_problems() + { + string CUR_PROB = PROBLEM_LIST[int(i)]; + LogDebug("list_problems CUR_PROB"); + if (i == 1) + { + chat_now("Also...", 1.0, "none", "none", "add_to_que"); + } + string L_PROB_LEN_RATIO = (CUR_PROB).length(); + if (L_PROB_LEN_RATIO > 60) + { + int L_PROB_LEN_RATIO = 60; + } + L_PROB_LEN_RATIO /= 60; + LogDebug("list_problems lineratio L_PROB_LEN_RATIO"); + string L_CHAT_TIME = /* TODO: $ratio */ $ratio(L_PROB_LEN_RATIO, 2.0, 4.5); + chat_now(CUR_PROB, L_PROB_LEN_RATIO, "none", "none", "add_to_que"); + } + + void parse_ms_dynamicnpc() + { + string L_CUR_SCRIPT = GetToken(CVAR_SCRIPTS, i, ";"); + if ((L_CUR_SCRIPT).findFirst("test_scripts") == 0) + { + if ((L_CUR_SCRIPT).findFirst(".script") >= 0) + { + PROBLEM_LIST.insertLast("A script in ms_dynamicnpc has a .script extention..."); + PROBLEM_LIST.insertLast("...Extentions should not be included in script names."); + int L_SCRIPT_INVALID = 1; + } + if ((L_CUR_SCRIPT).findFirst("\") >= 0) + { + PROBLEM_LIST.insertLast("A script in has a back slash (\) in its name - please only use forward slahes (/) - usually under the question mark."); + int L_SCRIPT_INVALID = 1; + } + if (!(L_SCRIPT_INVALID)) + { + } + if (DEV_SCRIPTS.length() > 0) DEV_SCRIPTS += ";"; + DEV_SCRIPTS += L_CUR_SCRIPT; + } + else + { + PROBLEM_LIST.insertLast("There is a script not prefixed with test_scripts/ in ms_dynamicnpc..."); + PROBLEM_LIST.insertLast("I can only summon scripts found in the msc/test_scripts folder."); + } + } + + void game_menu_getoptions() + { + if (MENU_MODE == 0) + { + if (int(PROBLEM_LIST.length()) == 0) + { + if ((DEV_SCRIPTS).length() > 12) + { + string reg.mitem.title = "[Summon] a creation..."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_summon"; + } + if (N_SUMMONS > 0) + { + string reg.mitem.title = "Remove a creation..."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_remove_specific"; + string reg.mitem.title = "[Remove] all creations."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_remove_all"; + } + } + else + { + show_help(); + } + if (!(WATER_OPEN)) + { + string reg.mitem.title = "Open the [water] ways."; + } + else + { + string reg.mitem.title = "Close the [water] ways."; + } + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_toggle_water"; + if (!(MAP_SHIELD_ON)) + { + string reg.mitem.title = "Raise the [shield]."; + } + else + { + string reg.mitem.title = "Lower the [shield]."; + } + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_toggle_shield"; + if (int(PROBLEM_LIST.length()) == 0) + { + show_help(); + } + } + if (MENU_MODE == "summon") + { + chat_now("Which of your creations shall I summon?", 4.0, "none", "none", "add_to_que", "clear_que"); + for (int i = 0; i < GetTokenCount(DEV_SCRIPTS, ";"); i++) + { + list_summon_options(); + } + MENU_MODE = 0; + } + if (MENU_MODE == "remove_specific") + { + chat_now("Which of your creations shall I remove?", 4.0, "none", "none", "add_to_que", "clear_que"); + for (int i = 0; i < int(ARRAY_SUMMONS.length()); i++) + { + list_summons_loop(); + } + MENU_MODE = 0; + } + } + + void list_summons_loop() + { + string CUR_IDX = i; + string CUR_SUM = ARRAY_SUMMONS[int(CUR_IDX)]; + if (!(IsEntityAlive(CUR_SUM))) return; + string reg.mitem.title = GetEntityName(CUR_SUM); + string reg.mitem.type = "callback"; + string reg.mitem.data = CUR_IDX; + string reg.mitem.callback = "menu_remove_by_idx"; + } + + void menu_remove_by_idx() + { + PlayAnim("critical", "castspell"); + string CUR_SUM = ARRAY_SUMMONS[int(param2)]; + SetMoveDest(GetEntityOrigin(CUR_SUM)); + string L_CHAT_TEXT = GetEntityProperty(CUR_SUM, "name.full.capital"); + L_CHAT_TEXT += " has been removed."; + chat_now(L_CHAT_TEXT, 3.0, "none", "none", "add_to_que", "clear_que"); + ARRAY_SUMMONS[param2] = 0; + DeleteEntity(CUR_SUM, true); // fade out + N_SUMMONS -= 1; + } + + void show_help() + { + string reg.mitem.title = "What is this place?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_map_help"; + string reg.mitem.title = "Who are you?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_whoami"; + if (int(PROBLEM_LIST.length()) > 0) + { + string reg.mitem.title = "What were the [problems] again?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_list_problems"; + } + } + + void list_summon_options() + { + string CUR_IDX = i; + string reg.mitem.title = GetToken(DEV_SCRIPTS, CUR_IDX, ";"); + string reg.mitem.type = "callback"; + string reg.mitem.data = GetToken(DEV_SCRIPTS, CUR_IDX, ";"); + string reg.mitem.callback = "menu_summon_script"; + } + + void menu_list_problems() + { + chat_clear_que(); + for (int i = 0; i < int(PROBLEM_LIST.length()); i++) + { + list_problems(); + } + } + + void menu_map_help() + { + chat_now("This map is for testing your creations, my master!", 3.0, "castspell", "none", "clear_que", "add_to_que"); + chat_now("Here, you can safely summon creatures, and your other creations...", 4.0, "none", "none", "add_to_que"); + chat_now("Scripts you created in the test_scripts/ folder.", 3.0, "none", "none", "add_to_que"); + chat_now("I can summon any such script here, and offer various tools to help you in their testing.", 5.0, "none", "none", "add_to_que"); + explain_cvars(); + if (int(PROBLEM_LIST.length()) > 0) + { + chat_now("I could start summoning your creations right now, but alas, there are these [problems]...", 5.0, "none", "none", "add_to_que"); + } + } + + void menu_whoami() + { + chat_now("I, am your humble assistant...", 2.0, "castspell", "none", "clear_que", "add_to_que"); + chat_now("It is my task to aid in the testing of your creations.", 4.0, "none", "none", "add_to_que"); + chat_now("I can summon your creations, remove them, and provide aid in a few other methods of testing.", 4.0, "none", "none", "add_to_que"); + explain_cvars(); + if (int(PROBLEM_LIST.length()) > 0) + { + chat_now("I could start assisiting you right now, but alas, there are these [problems]...", 5.0, "none", "none", "add_to_que"); + } + } + + void explain_cvars() + { + chat_now("Such creations must be scripts in the test_scripts/ folder...", 3.0, "none", "none", "add_to_que"); + chat_now("And added to ms_dynamicnpc cvar, set in your listenserver.cfg.", "none", "none", "add_to_que"); + chat_now("You can add multiple creations, by adding their script names, and seperating them by semi-colons (;).", 4.0, "none", "none", "add_to_que"); + chat_now("For instance...", 2.0, "none", "none", "add_to_que"); + chat_now("ms_dynamic_npc test_scripts/test_spider;test_scripts/test_orc", 4.0, "none", "none", "add_to_que"); + chat_now("Lastly, the server must be in developer mode, so ms_dev_mode must be set to 1 in the listenserver.cfg as well.", 5.0, "none", "none", "add_to_que"); + } + + void menu_summon() + { + MENU_MODE = "summon"; + MENU_TARGET = param1; + ScheduleDelayedEvent(0.1, "send_menu"); + } + + void send_menu() + { + if (!(IsEntityAlive(MENU_TARGET))) + { + MENU_TARGET = GetEntityIndex("ent_lastspoke"); + } + OpenMenu(MENU_TARGET); + } + + void menu_summon_script() + { + SUMMON_SCRIPT = param2; + PlayAnim("critical", "castspell"); + face_summon(); + SUMMON_ANG += 90; + if (SUMMON_ANG > 359) + { + SUMMON_ANG = 0; + } + MENU_MODE = 0; + } + + void castspell() + { + LogDebug("castspell SUMMON_SCRIPT"); + if (!(SUMMON_SCRIPT != 0)) return; + SpawnNPC(SUMMON_SCRIPT, SCRIPT_POS, ScriptMode::Legacy); + SUMMON_SCRIPT = 0; + N_SUMMONS += 1; + ClientEvent("new", "all", "effects/sfx_summon_circle", SCRIPT_POS, 3); + ScheduleDelayedEvent(1.0, "name_summon"); + } + + void name_summon() + { + string L_SUMMON_NAME = GetEntityProperty(m_hLastCreated, "name.full.capital"); + string L_CHAT_STR = L_SUMMON_NAME; + L_CHAT_STR += " has been summoned."; + chat_now(L_CHAT_STR, 3.0, "none", "none", "add_to_que"); + if ((GetEntityProperty(m_hLastCreated, "scriptvar"))) + { + if (!(WATER_OPEN)) + { + } + chat_now("This appears to be a fish, so I shall open the [water] ways.", 3.0, "none", "none", "add_to_que"); + menu_toggle_water(); + ScheduleDelayedEvent(1.0, "dunk_it"); + } + AddVelocity(m_hLastCreated, /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, -1000))); + if (int(ARRAY_SUMMONS.length()) > 1) + { + ADDED_SUMMON = 0; + for (int i = 0; i < int(ARRAY_SUMMONS.length()); i++) + { + add_summon_loop(); + } + if (!(ADDED_SUMMON)) + { + } + ARRAY_SUMMONS.insertLast(GetEntityIndex(m_hLastCreated)); + } + else + { + ARRAY_SUMMONS.insertLast(GetEntityIndex(m_hLastCreated)); + } + } + + void add_summon_loop() + { + if ((ADDED_SUMMON)) return; + string CUR_SUM = ARRAY_SUMMONS[int(i)]; + if ((IsEntityAlive(CUR_SUM))) return; + ARRAY_SUMMONS[i] = GetEntityIndex(m_hLastCreated); + ADDED_SUMMON = 1; + } + + void menu_toggle_shield() + { + face_summon(); + PlayAnim("critical", "castspell"); + UseTrigger("twal_shield"); + if ((MAP_SHIELD_ON)) + { + MAP_SHIELD_ON = 0; + chat_now("The [shield] is lowered.", 3.0, "none", "none", "add_to_que"); + } + else + { + MAP_SHIELD_ON = 1; + chat_now("The [shield] is raised.", 3.0, "none", "none", "add_to_que"); + } + } + + void menu_toggle_water() + { + face_summon(); + PlayAnim("critical", "castspell"); + UseTrigger("door_water"); + if ((WATER_OPEN)) + { + WATER_OPEN = 0; + chat_now("The [water] ways are sealed.", 3.0, "none", "none", "add_to_que"); + } + else + { + WATER_OPEN = 1; + chat_now("The [water] ways are opened.", 3.0, "none", "none", "add_to_que"); + } + } + + void face_summon() + { + SCRIPT_POS = GetEntityOrigin(GetOwner()); + SCRIPT_POS += /* TODO: $relpos */ $relpos(Vector3(0, SUMMON_ANG, 0), Vector3(0, SUMMON_DIST, 0)); + SetMoveDest(SCRIPT_POS); + } + + void menu_remove_all() + { + PlayAnim("critical", "castspell"); + face_summon(); + chat_now("All your creations have been removed...", 3.0, "none", "none", "add_to_que"); + N_SUMMONS = 0; + if (int(ARRAY_SUMMONS.length()) > 1) + { + for (int i = 0; i < int(ARRAY_SUMMONS.length()); i++) + { + remove_summons_loop(); + } + } + else + { + if (ARRAY_SUMMONS[int(0)] != 0) + { + DeleteEntity(ARRAY_SUMMONS[int(0)], true); // fade out + } + if (ARRAY_SUMMONS[int(1)] != 0) + { + DeleteEntity(ARRAY_SUMMONS[int(1)], true); // fade out + } + ARRAY_SUMMONS[0] = 0; + ARRAY_SUMMONS[1] = 0; + } + } + + void remove_summons_loop() + { + string CUR_SUM = ARRAY_SUMMONS[int(i)]; + if (!(IsEntityAlive(CUR_SUM))) return; + DeleteEntity(CUR_SUM, true); // fade out + ARRAY_SUMMONS[i] = 0; + } + + void menu_remove_specific() + { + MENU_MODE = "remove_specific"; + MENU_TARGET = param1; + ScheduleDelayedEvent(0.1, "send_menu"); + } + +} + +} diff --git a/scripts/angelscript/NPCs/stalker.as b/scripts/angelscript/NPCs/stalker.as new file mode 100644 index 00000000..5d09d883 --- /dev/null +++ b/scripts/angelscript/NPCs/stalker.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class Stalker : CGameScript +{ + void OnRepeatTimer() + { + SetRepeatDelay(0.5); + CanSee("ally"); + SetMoveDest(m_hLastSeen); + } + + void OnSpawn() override + { + SetHealth(45); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetSkillLevel(-5); + SetName("Strange Person"); + SetRoam(true); + SetModel("npc/human1.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 5); + SetMoveAnim("walk_scared"); + } + +} + +} diff --git a/scripts/angelscript/NPCs/storage.as b/scripts/angelscript/NPCs/storage.as new file mode 100644 index 00000000..dfd84dc0 --- /dev/null +++ b/scripts/angelscript/NPCs/storage.as @@ -0,0 +1,76 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "NPCs/base_storage.as" + +namespace MS +{ + +class Storage : CGameScript +{ + int PLACEHOLDER; + + Storage() + { + PLACEHOLDER = 0; + } + + void OnSpawn() override + { + SetName("Edric of Galat s Storage"); + SetHealth(1); + SetInvincible(true); + SetRace("beloved"); + SetWidth(28); + SetHeight(96); + SetModel("npc/balancepriest1.mdl"); + SetModelBody(1, 1); + SetSayTextRange(1024); + CatchSpeech("heard_hi", "hail"); + CatchSpeech("heard_rumor", "job"); + CatchSpeech("heard_store", "shop"); + } + + void heard_hi() + { + PlayAnim("critical", "talkright"); + SayText("Greetings , welcome to Galat s Weapon and Armor Storage..."); + ScheduleDelayedEvent(5.0, "heard_hi2"); + } + + void heard_hi2() + { + SayText("For a nominal fee , we can store your items here for you."); + ScheduleDelayedEvent(5.0, "heard_hi3"); + } + + void heard_hi3() + { + SayText("We ll give you a ticket in exchange for any item we can store."); + ScheduleDelayedEvent(5.0, "heard_hi4"); + } + + void heard_hi4() + { + SayText("Thanks to our contacts with the Felewyn wizards , you can redeem this ticket at any Galat outlet."); + ScheduleDelayedEvent(5.0, "heard_hi5"); + } + + void heard_hi5() + { + SayText("Galat has outlets in Deralia , Gatecity , Kray Eldorad , and now , even in Helena!"); + } + + void heard_rurmor() + { + SayText("Look , " + I + "just work here , " + I + " don t live here. You got an item to store, or what?"); + } + + void heard_store() + { + OpenMenu(GetEntityIndex("ent_lastheard")); + } + +} + +} diff --git a/scripts/angelscript/NPCs/tao.as b/scripts/angelscript/NPCs/tao.as new file mode 100644 index 00000000..4c8e1a88 --- /dev/null +++ b/scripts/angelscript/NPCs/tao.as @@ -0,0 +1,139 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Tao : CGameScript +{ + int BUSY_CHATTING; + float CHAT_DELAY; + string CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEP7; + string CHAT_STEPS; + int CONGRATS_MSG; + string DID_CONGRATS; + int NO_JOB; + int NO_RUMOR; + int SAID_HI; + + Tao() + { + NO_JOB = 1; + NO_RUMOR = 1; + CHAT_DELAY = 3.0; + } + + void OnSpawn() override + { + SetName("Tao l"); + SetHealth(1); + SetInvincible(true); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetModel("npc/human1.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 0); + SetRoam(false); + SetMoveAnim("idle1"); + SetHearingSensitivity(10); + SetSayTextRange(1024); + CatchSpeech("say_hi", "hi"); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if (!(IsValidPlayer(LAST_HEARD))) return; + if (!(false)) return; + if (!(GetEntityRange(LAST_HEARD) < 200)) return; + if ((CONGRATS_MSG)) + { + face_speaker(LAST_HEARD); + if (!(DID_CONGRATS)) + { + } + say_hi(); + } + if ((SAID_HI)) return; + face_speaker(LAST_HEARD); + say_hi(); + } + + void say_hi() + { + if ((IsValidPlayer(param1))) + { + face_speaker(GetEntityIndex(param1)); + } + if ((IsValidPlayer("ent_lastspoke"))) + { + face_speaker(GetEntityIndex("ent_lastspoke")); + } + SAID_HI = 1; + if ((CONGRATS_MSG)) + { + DID_CONGRATS = 1; + PlayAnim("critical", "eye_wipe"); + CHAT_STEPS = 2; + CHAT_STEP = 0; + CHAT_STEP1 = "Thank you for bringing us the key."; + CHAT_STEP2 = "If you find something of interest in the cellar, feel free to have that too!"; + chat_loop(); + ScheduleDelayedEvent(2.0, "fix_anims"); + } + if ((CONGRATS_MSG)) return; + if ((BUSY_CHATTING)) return; + if ((IsValidPlayer(param1))) + { + face_speaker(GetEntityIndex(param1)); + } + if ((IsValidPlayer("ent_lastspoke"))) + { + face_speaker(GetEntityIndex("ent_lastspoke")); + } + PlayAnim("critical", "converse1"); + CHAT_STEPS = 7; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Thank you so much for killing the orcs!"; + CHAT_STEP2 = "Take anything you want from my chest as a reward."; + CHAT_STEP3 = "If you want to continue your journey, you can travel to the forest behind the rocks but be careful..."; + CHAT_STEP4 = "...there might be more orcs near the town and in the forest too!"; + CHAT_STEP5 = "Oh, also, the town cellar door is locked and we don't have the key."; + CHAT_STEP6 = "I think it was left in the shed near the field when the orcs attacked..."; + CHAT_STEP7 = "Please, see if you can find it for us."; + chat_loop(); + ScheduleDelayedEvent(2.0, "fix_anims"); + } + + void dungeon() + { + CONGRATS_MSG = 1; + string NEARBY_PLAYER = /* TODO: $get_insphere */ $get_insphere("player", 512); + if (NEARBY_PLAYER != 0) + { + face_speaker(NEARBY_PLAYER); + say_hi(); + } + } + + void fix_anims() + { + SetMoveAnim("idle1"); + SetIdleAnim("idle1"); + PlayAnim("once", "idle1"); + } + +} + +} diff --git a/scripts/angelscript/NPCs/thief.as b/scripts/angelscript/NPCs/thief.as new file mode 100644 index 00000000..81b982c0 --- /dev/null +++ b/scripts/angelscript/NPCs/thief.as @@ -0,0 +1,177 @@ +#pragma context server + +namespace MS +{ + +class Thief : CGameScript +{ + int ATTACK1_DAMAGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + string CURRENT_ENEMY; + float FLEE_CHANCE; + int FLEE_HEALTH; + int IS_FLEEING; + int SEE_ENEMY; + int STEAL; + int STEALING; + int THIEF; + + Thief() + { + if (STEAL == 1) + { + } + SetVolume(8); + Say("hello1[50] *[20] *[55] *[55] *[23] *[22]"); + SetRoam(false); + ScheduleDelayedEvent(4, "resumeroam"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(4); + CanSee("enemy"); + SetMoveDest(m_hLastSeen); + if (STEAL == 0) + { + } + STEALING = RandomInt(-40, -20); + // TODO: offer ent_lastseen gold STEALING + gold += STEALING; + PlayAnim("once", "return_needle"); + SetRoam(false); + ScheduleDelayedEvent(4, "resumeroam"); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.2); + CanSee(CURRENT_ENEMY); + SetMoveAnim("run"); + SetMoveDest(m_hLastSeen); + SEE_ENEMY = 1; + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(0.3); + CanSee(CURRENT_ENEMY); + SetMoveDest(m_hLastSeen); + PlayAnim("once", "beatdoor"); + } + + void OnSpawn() override + { + SetHealth(45); + SetMaxHealth(45); + SetGold(10); + SetWidth(32); + SetHeight(72); + SetRace("orc"); + SetName("Shifty Person"); + SetRoam(true); + SetModel("npc/human1.mdl"); + SetDamageResistance("all", ".9"); + SetModelBody(0, 1); + SetModelBody(1, 5); + SetMoveAnim("walk"); + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = 5; + ATTACK_PERCENTAGE = 0.6; + THIEF = 0; + STEAL = 0; + FLEE_HEALTH = 40; + FLEE_CHANCE = 1.0; + IS_FLEEING = 0; + CatchSpeech("say_gold", "gold"); + CatchSpeech("say_gold", "money"); + CatchSpeech("say_gold", "thief"); + CatchSpeech("say_gold", "bandit"); + CatchSpeech("say_gold", "back"); + CatchSpeech("say_gold2", "gold"); + CatchSpeech("say_gold2", "money"); + CatchSpeech("say_gold2", "thief"); + CatchSpeech("say_gold2", "bandit"); + CatchSpeech("say_gold2", "back"); + CatchSpeech("say_thief", "lock"); + CatchSpeech("say_thief", "kill"); + CatchSpeech("say_thief", "execute"); + CatchSpeech("say_thief", "execution"); + CatchSpeech("say_thief", "prison"); + } + + void resumeroam() + { + SetRoam(true); + } + + void robbed() + { + CURRENT_ENEMY = "ent_laststole"; + SayText("Aha! Thief!"); + SetMoveDest("ent_laststole"); + } + + void wander() + { + SetMoveAnim("walk"); + SEE_ENEMY = 0; + ScheduleDelayedEvent(12, "losethief"); + } + + void losethief() + { + SEE_ENEMY = "equals"; + CURRENT_ENEMY = "noenemy"; + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + + void struck() + { + if (!(CURRENT_HEALTH <= FLEE_HEALTH)) return; + if (!(RandomInt(0, 100) <= FLEE_CHANCE)) return; + SetMoveAnim("run"); + SetMoveDest("flee"); + IS_FLEEING = 1; + ScheduleDelayedEvent(0.5, "stopflee"); + } + + void say_gold() + { + if (!(THIEF == 0)) return; + THIEF = 1; + SayText(I + " don t know what you re talking about."); + if (!(THIEF == 3)) return; + SayText("Go away."); + } + + void say_gold2() + { + if (!(THIEF == 1)) return; + THIEF = 2; + SayText("Look , " + I + " don t know what you re talking about. With guards around , nobody would dare to steal."); + } + + void say_thief() + { + if (!(THIEF == 2)) return; + THIEF = 3; + STEAL = 1; + SayText("Oh... he told you that , did he? Look , if you don t report me, I ll give you this."); + ScheduleDelayedEvent(4, "say_thief2"); + } + + void say_thief2() + { + SayText("It s a map of where the band is. I m just a nobody among those. If you want to catch real thieves , go for them , not me."); + // TODO: offer ent_lastspoke item_thiefmap + } + +} + +} diff --git a/scripts/angelscript/NPCs/tutorial_npc_req_item.as b/scripts/angelscript/NPCs/tutorial_npc_req_item.as new file mode 100644 index 00000000..cb08cb7a --- /dev/null +++ b/scripts/angelscript/NPCs/tutorial_npc_req_item.as @@ -0,0 +1,111 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class TutorialNpcReqItem : CGameScript +{ + string ANIM_IDLE; + string ANIM_OPEN_DOOR; + int GOT_RAT_SKULL; + + TutorialNpcReqItem() + { + ANIM_IDLE = "idle1"; + ANIM_OPEN_DOOR = "gluonshow"; + } + + void OnSpawn() override + { + SetName("Old Hag"); + SetModel("npc/human2.mdl"); + SetHealth(1); + SetWidth(32); + SetHeight(96); + SetInvincible(true); + SetNoPush(true); + SetRace("beloved"); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + SetSayTextRange(1024); + SetMenuAutoOpen(1); + CatchSpeech("say_hail", "hail"); + CatchSpeech("say_pretty", "pretty"); + } + + void game_menu_getoptions() + { + if ((GOT_RAT_SKULL)) return; + if ((ItemExists(param1, "item_ratskull"))) + { + SayText("My my , what a pretty skull you ve found there..."); + move_mouth(); + string reg.mitem.title = "Offer Golden Rat Skull"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_ratskull"; + string reg.mitem.callback = "got_rat_skull"; + } + else + { + SayText("No one gets by this door until " + I + " get my [pretty]"); + move_mouth(); + string reg.mitem.title = "Your pretty?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_pretty"; + } + } + + void say_hail() + { + if (!(GOT_RAT_SKULL)) + { + SayText("No one gets by this door until " + I + " get my [pretty]"); + move_mouth(); + } + else + { + SayText("Thank you for returning my pretty... " + I + " ll be sure to keep it safe, this time."); + } + } + + void say_pretty() + { + if (!(GOT_RAT_SKULL)) + { + SayText("Yes! My golden rat skull. Bloody thing grew legs and wandered off... Again!"); + SayText("Find it for me , and " + I + " ll open this door - but not before!"); + move_mouth(); + } + else + { + SayText("Thank you. " + I + " ve got my good eye on it now... It ll not wander off again."); + } + } + + void move_mouth() + { + Say("[0.2] [0.2] [0.3] [0.1] [0.1] [0.2] [0.1] [0.1]"); + } + + void got_rat_skull() + { + GOT_RAT_SKULL = 1; + SayText("Finally! My pretty rat skull is returned to me! Alright... Here we go..."); + move_mouth(); + PlayAnim("critical", ANIM_OPEN_DOOR); + ScheduleDelayedEvent(0.25, "open_door"); + SetMenuAutoOpen(0); + } + + void open_door() + { + UseTrigger("hag_door"); + } + +} + +} diff --git a/scripts/angelscript/NPCs/tutorial_prisoner.as b/scripts/angelscript/NPCs/tutorial_prisoner.as new file mode 100644 index 00000000..2c6c0bb4 --- /dev/null +++ b/scripts/angelscript/NPCs/tutorial_prisoner.as @@ -0,0 +1,228 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class TutorialPrisoner : CGameScript +{ + string ANIM_IDLE; + string ANIM_WALK; + int GET_YE_TORCH; + int GOT_YE_TORCH; + int NO_JOB; + int NO_RUMOR; + string NPC_MODEL; + int SAID_GREETING; + int WALL_BROKEN; + + TutorialPrisoner() + { + NPC_MODEL = "npc/femhuman2.mdl"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "idle1"; + Precache(NPC_MODEL); + NO_JOB = 1; + NO_RUMOR = 1; + GOT_YE_TORCH = 0; + } + + void OnSpawn() override + { + SetName("Kyra"); + SetHealth(1); + SetInvincible(true); + SetNoPush(true); + SetRace("beloved"); + SetModel(NPC_MODEL); + SetModelBody(0, 0); + SetWidth(30); + SetHeight(96); + SetSayTextRange(1024); + SetHearingSensitivity(10); + CatchSpeech("say_hi", "hail"); + // TODO: menu.autopen 1 + ScheduleDelayedEvent(0.1, "face_player"); + } + + void face_player() + { + GetAllPlayers(TOKEN_LIST); + string PLAYER_ID = GetToken(TOKEN_LIST, 0, ";"); + if (!(IsEntityAlive(PLAYER_ID))) return; + face_speaker(PLAYER_ID); + ScheduleDelayedEvent(0.5, "face_player"); + } + + void game_menu_getoptions() + { + if (!(GOT_YE_TORCH)) + { + if ((GET_YE_TORCH)) + { + } + string reg.mitem.title = "Ask for torch"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_torch"; + } + if ((IsValidPlayer(param1))) + { + face_speaker(GetEntityIndex(param1)); + } + if ((IsValidPlayer("ent_lastspoke"))) + { + face_speaker(GetEntityIndex("ent_lastspoke")); + } + } + + void say_torch() + { + convo_anim(); + string TORCH_RECIPIENT = param1; + SayText("Here , you can have it."); + SayText("Maybe you ll have better luck lighting it."); + PlayAnim("once", "give_shot"); + // TODO: offer TORCH_RECIPIENT item_torch + GOT_YE_TORCH = 1; + ScheduleDelayedEvent(1, "say_torch2"); + } + + void say_torch2() + { + convo_anim(); + SayText("Great! That s better."); + ScheduleDelayedEvent(4, "say_torch3"); + } + + void say_torch3() + { + convo_anim(); + SayText(I + " was feeling around the walls here"); + ScheduleDelayedEvent(2, "say_torch4"); + } + + void say_torch4() + { + convo_anim(); + SayText("One area felt cracked , and made a hollow noise when " + I + " knocked on it."); + ScheduleDelayedEvent(3, "say_torch5"); + } + + void say_torch5() + { + convo_anim(); + SayText("Find it , and give it a whack with that torch!"); + } + + void say_hi() + { + if (!(SAID_GREETING)) + { + player_greeting(); + } + else + { + if (!(WALL_BROKEN)) + { + face_speaker(); + SayText("You have the torch , Adventurer. Find the weak spot."); + } + else + { + face_speaker(); + SayText("Hurry! The guards will be along soon!"); + SendInfoMessageToAll("green (She shoos you towards the hole in the wall)"); + } + } + } + + void player_spawned() + { + ScheduleDelayedEvent(5, "player_greeting"); + } + + void player_greeting() + { + convo_anim(); + if ((SAID_GREETING)) return; + SayText("Hello , Adventurer!"); + SAID_GREETING = 1; + GET_YE_TORCH = 1; + ScheduleDelayedEvent(2, "player_greeting2"); + } + + void player_greeting2() + { + convo_anim(); + SayText(I + " woke up a few minutes ago , with you on the other side of the cell."); + ScheduleDelayedEvent(2, "player_greeting3"); + } + + void player_greeting3() + { + convo_anim(); + SayText("You ve been out for quite a while."); + ScheduleDelayedEvent(5, "player_greeting4"); + } + + void player_greeting4() + { + convo_anim(); + SayText("We re in a holding cell, as you can see."); + ScheduleDelayedEvent(5, "player_greeting5"); + } + + void player_greeting5() + { + convo_anim(); + SayText("Last " + I + "saw were bandits before " + I + " was clocked on the head."); + ScheduleDelayedEvent(10, "player_greeting6"); + } + + void player_greeting6() + { + SayText("It s so dark in here!"); + PlayAnim("once", "pondering2"); + ScheduleDelayedEvent(4, "player_greeting7"); + } + + void player_greeting7() + { + convo_anim(); + SayText(I + "found this [torch] in a corner , but " + I + " can t seem to light it!"); + SendInfoMessageToAll("green Press the use key (Default 'e') on Kyra to bring up her chat menu"); + } + + void wall_broken() + { + convo_anim(); + SayText("Great job! Now we can get out of here."); + ScheduleDelayedEvent(2, "wall_broken2"); + WALL_BROKEN = 1; + } + + void wall_broken2() + { + convo_anim(); + SayText("Though " + I + "think " + I + " ll hold back for now"); + ScheduleDelayedEvent(2, "wall_broken3"); + } + + void wall_broken3() + { + convo_anim(); + SayText(I + " ll distract the guards should they return."); + ScheduleDelayedEvent(4, "wall_broken4"); + } + + void wall_broken4() + { + convo_anim(); + SayText("Go on! " + I + " ll be fine!"); + } + +} + +} diff --git a/scripts/angelscript/NPCs/wall_of_text_guy.as b/scripts/angelscript/NPCs/wall_of_text_guy.as new file mode 100644 index 00000000..7d830920 --- /dev/null +++ b/scripts/angelscript/NPCs/wall_of_text_guy.as @@ -0,0 +1,85 @@ +#pragma context server + +namespace MS +{ + +class WallOfTextGuy : CGameScript +{ + int PLAYING_DEAD; + + void OnSpawn() override + { + SetName("Wall of Text Guy"); + SetModel("npc/human1.mdl"); + SetRace("beloved"); + SetInvincible(true); + PLAYING_DEAD = 1; + SetWidth(32); + SetHeight(96); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + SetMenuAutoOpen(1); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Show me Text1"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "text1"; + string reg.mitem.callback = "do_text"; + string reg.mitem.title = "Show me Text2"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "text2"; + string reg.mitem.callback = "do_text2"; + } + + void do_text2() + { + // TODO: localmenu.reset PARAM1 + string reg.local.menu.title = "Test title"; + // TODO: registerlocal.menu PARAM1 + string reg.local.button.text = "Button1"; + int reg.local.button.closeonclick = 0; + int reg.local.button.enabled = 1; + int reg.local.button.docallback = 1; + string reg.local.button.callback = "CB_TEST1"; + // TODO: registerlocal.button PARAM1 + string reg.local.button.text = "Button2"; + int reg.local.button.closeonclick = 1; + int reg.local.button.enabled = 0; + int reg.local.button.docallback = 0; + // TODO: registerlocal.button PARAM1 + string reg.local.button.text = "Button3"; + int reg.local.button.closeonclick = 1; + int reg.local.button.enabled = 1; + int reg.local.button.docallback = 0; + string reg.local.button.callback = "CB_TEST2"; + // TODO: registerlocal.button PARAM1 + string reg.local.paragraph.source.type = "file"; + string reg.local.paragraph.source = "Credits_Original"; + // TODO: registerlocal.paragraph PARAM1 + // TODO: localmenu.open PARAM1 + } + + void do_text() + { + string PARAM_OUT = param2; + PlayAnim("once", "give_shot"); + SayText("Take a look at wall of text: " + PARAM_OUT); + ClientEvent("update", param1, "const.localplayer.scriptID", "cl_show_text", PARAM_OUT); + } + + void CB_TEST1() + { + SayText(CB_TEST1 + param1); + // TODO: localmenu.close PARAM1 + } + + void CB_TEST2() + { + SayText(CB_TEST2 + param1); + } + +} + +} diff --git a/scripts/angelscript/a3/!uuuuuuuuuuuuuuuugh.as b/scripts/angelscript/a3/!uuuuuuuuuuuuuuuugh.as new file mode 100644 index 00000000..8e419782 --- /dev/null +++ b/scripts/angelscript/a3/!uuuuuuuuuuuuuuuugh.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class !uuuuuuuuuuuuuuuugh : CGameScript +{ +} + +} diff --git a/scripts/angelscript/a3/TC_orcs.as b/scripts/angelscript/a3/TC_orcs.as new file mode 100644 index 00000000..048b989b --- /dev/null +++ b/scripts/angelscript/a3/TC_orcs.as @@ -0,0 +1,33 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class TcOrcs : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "health_mpotion", RandomInt(1, 6), 0); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "armor_leather", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_jagged", 15, 0, 0, 15); + } + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "bows_swiftbow", 1, 0); + } + else + { + AddStoreItem(STORENAME, "bows_orcbow", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/a3/a3TC1.as b/scripts/angelscript/a3/a3TC1.as new file mode 100644 index 00000000..472bc205 --- /dev/null +++ b/scripts/angelscript/a3/a3TC1.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class A3tc1 : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("health_lpotion", 25); + tc_add_artifact("armor_leather_torn", 50); + } + + void chest_additems() + { + add_gold(RandomInt(4, 15)); + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "health_apple", RandomInt(1, 2), 0); + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORENAME, "blunt_hammer1", 1, 0); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORENAME, "smallarms_dirk", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + add_noob_item(); + } + if (RandomInt(1, 20) == 1) + { + add_noob_item(); + } + } + +} + +} diff --git a/scripts/angelscript/a3/a3TC2.as b/scripts/angelscript/a3/a3TC2.as new file mode 100644 index 00000000..e52c5827 --- /dev/null +++ b/scripts/angelscript/a3/a3TC2.as @@ -0,0 +1,30 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class A3tc2 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(17, 30)); + AddStoreItem(STORENAME, "axes_axe", 1, 0); + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + int L_ARROW_QUANT = 30; + L_ARROW_QUANT *= RandomInt(1, 2); + AddStoreItem(STORENAME, "proj_arrow_silvertipped", L_ARROW_QUANT, 0, 0, 30); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "pack_archersquiver", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + add_noob_item(); + } + } + +} + +} diff --git a/scripts/angelscript/a3/a3TC3.as b/scripts/angelscript/a3/a3TC3.as new file mode 100644 index 00000000..a17e86f0 --- /dev/null +++ b/scripts/angelscript/a3/a3TC3.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class A3tc3 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "drink_ale", 2, 0); + AddStoreItem(STORENAME, "drink_mead", 1, 0); + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "swords_skullblade", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "swords_skullblade2", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/a3/a3TC4.as b/scripts/angelscript/a3/a3TC4.as new file mode 100644 index 00000000..02dcbc43 --- /dev/null +++ b/scripts/angelscript/a3/a3TC4.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class A3tc4 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "item_book_old", 1, 0); + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "blunt_club", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "swords_bastardsword", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/a3/a3TC5.as b/scripts/angelscript/a3/a3TC5.as new file mode 100644 index 00000000..39ea9826 --- /dev/null +++ b/scripts/angelscript/a3/a3TC5.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class A3tc5 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 50)); + AddStoreItem(STORENAME, "blunt_maul", 1, 0); + AddStoreItem(STORENAME, "bows_shortbow", 1, 0); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_broadhead", 60, 0, 0, 30); + } + if (RandomInt(1, 5) == 1) + { + add_noob_item(); + } + } + +} + +} diff --git a/scripts/angelscript/a3/a3TC6.as b/scripts/angelscript/a3/a3TC6.as new file mode 100644 index 00000000..416bd63b --- /dev/null +++ b/scripts/angelscript/a3/a3TC6.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class A3tc6 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 50)); + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "blunt_hammer2", 1, 0); + AddStoreItem(STORENAME, "bows_longbow", 1, 0); + AddStoreItem(STORENAME, "swords_bastardsword", 1, 0); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "swords_katana2", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "swords_katana3", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "blunt_hammer1", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "sheath_belt_snakeskin", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "swords_skullblade", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "swords_skullblade2", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_silvertipped", 30, 0, 0, 15); + } + if (RandomInt(1, 5) == 1) + { + add_good_item(); + } + } + +} + +} diff --git a/scripts/angelscript/a3/bookbat.as b/scripts/angelscript/a3/bookbat.as new file mode 100644 index 00000000..81ff2bdb --- /dev/null +++ b/scripts/angelscript/a3/bookbat.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "keledrosprelude/bat.as" + +namespace MS +{ + +class Bookbat : CGameScript +{ + void OnSpawn() override + { + SetName("Lesser Firebat"); + SetHealth(25); + } + +} + +} diff --git a/scripts/angelscript/a3/merc1.as b/scripts/angelscript/a3/merc1.as new file mode 100644 index 00000000..4e755e8e --- /dev/null +++ b/scripts/angelscript/a3/merc1.as @@ -0,0 +1,337 @@ +#pragma context server + +#include "monsters/summon/base_summon.as" +#include "help/first_hireling.as" + +namespace MS +{ + +class Merc1 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SITIDLE; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int CONVERSE_PLAYER; + int DMG_MAX; + int DMG_MIN; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int HIRE_PRICE; + int IS_HIRED; + string MASTER_NAME; + int MERC_RESTING; + int MOVE_RANGE; + int NO_STUCK_CHECKS; + float RETALIATE_CHANGETARGET_CHANCE; + int SEE_ENEMY; + int SEE_PLAYER_NOW; + string SOUND_ALERT1; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SUMMON_MASTER; + int SUMMON_VICINITY; + string SUM_REPORT_SUFFIX; + string SUM_SAY_ATTACK; + string SUM_SAY_COME; + string SUM_SAY_DEATH; + string SUM_SAY_DEFEND; + string SUM_SAY_HUNT; + int VOLUME; + + Merc1() + { + SUM_SAY_COME = "On my way, sir."; + SUM_SAY_ATTACK = "On it!"; + SUM_SAY_HUNT = "There'll be some good eatin's tonight!"; + SUM_SAY_DEFEND = "Got yer back."; + SUM_SAY_DEATH = "I really need to charge more for this."; + SUM_REPORT_SUFFIX = ", sir."; + ANIM_DEATH = "dieforward1"; + ANIM_SITIDLE = "sitidle"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "swordswing1_L"; + MOVE_RANGE = 64; + ATTACK_RANGE = 72; + ATTACK_HITRANGE = 120; + DMG_MIN = 1; + DMG_MAX = 3; + ATTACK_HITCHANCE = 0.8; + SOUND_ALERT1 = "npc/prepdie.wav"; + SOUND_ATTACK1 = "weapons/swingsmall.wav"; + SOUND_ATTACK2 = "weapons/swingsmall.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_PAIN2 = "player/armhit1.wav"; + VOLUME = 5; + CAN_RETALIATE = 1; + CAN_ATTACK = 0; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_FLEE = 0; + CAN_HUNT = 0; + CAN_HEAR = 1; + CAN_FLINCH = 1; + FLINCH_ANIM = "raflinch"; + FLINCH_CHANCE = 0.1; + SUMMON_VICINITY = 360; + NO_STUCK_CHECKS = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(2); + if (!(IS_HIRED)) + { + } + SetRace("human"); + if ((false)) + { + } + standandtalk(); + } + + void summon_spawn() + { + SetHealth(35); + SetName("Holden , the Guide"); + SetWidth(32); + SetHeight(64); + SetRoam(false); + SetHearingSensitivity(3); + SetSkillLevel(0); + SetRace("neutral"); + SetModel("npc/guard1.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_SITIDLE); + SetMoveAnim(ANIM_WALK); + IS_HIRED = 0; + CONVERSE_PLAYER = 0; + SEE_PLAYER_NOW = 0; + SEE_ENEMY = 0; + SetStat("parry", 10); + HIRE_PRICE = RandomInt(4, 16); + string reg.mitem.id = "hire"; + string reg.mitem.access = "all"; + string reg.mitem.title = "Hire for "; + reg.mitem.title += HIRE_PRICE; + reg.mitem.title += " gold"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + reg.mitem.data += HIRE_PRICE; + string reg.mitem.callback = "hired_by_player"; + npcatk_suspend_ai(); + basesummon_attackall(); + } + + void hired_by_player() + { + RemoveMenuItem("hire"); + IS_HIRED = 1; + CAN_HUNT = 1; + npcatk_resume_ai(); + ANIM_IDLE = "idle1"; + SUMMON_MASTER = param1; + MASTER_NAME = GetEntityName(SUMMON_MASTER); + CAN_ATTACK = 1; + SetRace("human"); + SayText("Lead on , " + MASTER_NAME); + bs_set_defend_mode(); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", "yes"); + } + + void npc_targetsighted() + { + if (HUNT_LASTTARGET == SUMMON_MASTER) + { + if (GetEntityDist(HUNT_LASTTARGET) < 256) + { + } + SetMoveAnim(ANIM_WALK); + } + else + { + if (GetEntityIndex(m_hLastSeen) != HUNT_LASTTARGET) + { + // PlayRandomSound from: VOLUME, SOUND_ALERT1 + array sounds = {VOLUME, SOUND_ALERT1}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + } + + void attack_1() + { + EmitSound(GetOwner(), "game.sound.weapon", SOUND_ATTACK1, VOLUME); + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, Random(DMG_MIN, DMG_MAX), ATTACK_HITCHANCE); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: VOLUME, SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {VOLUME, SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((IS_HIRED)) + { + rest_getup(); + } + } + + void standandtalk() + { + if (!(CONVERSE_PLAYER == 0)) return; + if (!(CanSee("ally", 90))) return; + CONVERSE_PLAYER = 1; + PlayAnim("once", "sitstand"); + SetIdleAnim("idle1"); + ScheduleDelayedEvent(5, "offer_1"); + } + + void offer_1() + { + SayText("You shouldn't be alone here."); + Say("[30] [30] [30] [30] [20] [20] [30]"); + ScheduleDelayedEvent(2, "offer_2"); + } + + void offer_2() + { + string OFFER_TEXT = "I'll show you around these plains, if you pay me "; + OFFER_TEXT += int(HIRE_PRICE); + OFFER_TEXT += " gold."; + SayText(OFFER_TEXT); + Say("[30] [30] [30] [30] [30] [30] [30] [30] [30]"); + PlayAnim("once", "yes"); + ScheduleDelayedEvent(5, "sitdown"); + } + + void sitdown() + { + if ((IS_HIRED)) return; + SEE_PLAYER_NOW = 0; + sitdownlater(); + sitdownnow(); + } + + void sitdownlater() + { + SetRace("human"); + LookAt(256); + sitdownlater2(); + } + + void sitdownlater2() + { + LookAt(256); + if (!(CanSee("player", 128))) return; + SEE_PLAYER_NOW = 1; + ScheduleDelayedEvent(5, "sitdown"); + } + + void sitdownnow() + { + if (!(SEE_PLAYER_NOW == 0)) return; + CONVERSE_PLAYER = 0; + SetIdleAnim(ANIM_IDLE); + } + + void npcatk_target_lost() + { + if ((MERC_RESTING)) return; + RandomInt(2, 5)("rest_checksit"); + } + + void game_movingto_dest() + { + if (!(MERC_RESTING)) return; + rest_getup(); + } + + void rest_checksit() + { + if ((IS_HUNTING)) return; + if ((IS_ATTACKING)) return; + if ((SUMMON_RETURNING)) return; + if (!(GetMonsterHP() < GetMonsterMaxHP())) return; + MERC_RESTING = 1; + SetIdleAnim(ANIM_SITIDLE); + HealEntity(GetOwner(), 1); + ScheduleDelayedEvent(5, "rest_checksit"); + if (!(GetMonsterHP() >= GetMonsterMaxHP())) return; + ScheduleDelayedEvent(3, "rest_getup"); + } + + void rest_getup() + { + SetIdleAnim(ANIM_IDLE); + MERC_RESTING = 0; + } + + void menu_recv_payment() + { + if (!(CONVERSE_PLAYER == 1)) return; + ReceiveOffer("accept"); + hired_by_player(param1); + } + + void menu_recv_payment_failed() + { + ReceiveOffer("reject"); + SayText(I + "will not be persuaded for a lower price! " + int(HIRE_PRICE) + " . Nothing more , nothing less."); + Say("[10] [10] [10] [6] [12] [4] [20] [10] [10]"); + PlayAnim("once", "no"); + } + + void menu_disband() + { + SayText(I + " guess this is where we part ways. It was a pleasure working for you."); + PlayAnim("once", "yes"); + MASTER_NAME = \/NULL\/; + SetRace("neutral"); + SetHealth(35); + IS_HIRED = 0; + } + + void game_menu_getoptions() + { + if (!(IS_HIRED)) + { + string reg.mitem.id = "payment"; + string reg.mitem.title = "Pay "; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + string reg.mitem.callback = "menu_recv_payment"; + string reg.mitem.cb_failed = "menu_recv_payment_failed"; + } + if ((IS_HIRED)) + { + string reg.mitem.id = "disband"; + string reg.mitem.title = "Disband"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_disband"; + } + } + +} + +} diff --git a/scripts/angelscript/a3/nightmare_TC_orcs.as b/scripts/angelscript/a3/nightmare_TC_orcs.as new file mode 100644 index 00000000..c2921a7c --- /dev/null +++ b/scripts/angelscript/a3/nightmare_TC_orcs.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class NightmareTcOrcs : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "health_mpotion", RandomInt(1, 2), 0); + AddStoreItem(STORENAME, "bows_orcbow", 1, 0); + AddStoreItem(STORENAME, "proj_arrow_jagged", 60, 0, 0, 15); + AddStoreItem(STORENAME, "proj_arrow_fire", 60, 0, 0, 15); + AddStoreItem(STORENAME, "armor_leather_studded", 1, 0); + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "bows_swiftbow", 1, 0); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "mana_speed", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "mana_protection", 1, 0); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "blunt_gauntlets_fire", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/a3/nightmare_a3TC1.as b/scripts/angelscript/a3/nightmare_a3TC1.as new file mode 100644 index 00000000..4fa448cd --- /dev/null +++ b/scripts/angelscript/a3/nightmare_a3TC1.as @@ -0,0 +1,22 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class NightmareA3tc1 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(20, 100)); + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "health_apple", 1, 0); + AddStoreItem(STORENAME, "blunt_warhammer", 1, 0); + AddStoreItem(STORENAME, "armor_plate", 1, 0); + AddStoreItem(STORENAME, "scroll2_glow", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/a3/nightmare_a3TC2.as b/scripts/angelscript/a3/nightmare_a3TC2.as new file mode 100644 index 00000000..8cd21cd3 --- /dev/null +++ b/scripts/angelscript/a3/nightmare_a3TC2.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class NightmareA3tc2 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(20, 100)); + AddStoreItem(STORENAME, "pack_archersquiver", 1, 0); + AddStoreItem(STORENAME, "proj_arrow_poison", 30, 0, 0, 15); + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "proj_arrow_gpoison", 15, 0, 0, 15); + } + } + +} + +} diff --git a/scripts/angelscript/a3/nightmare_a3TC3.as b/scripts/angelscript/a3/nightmare_a3TC3.as new file mode 100644 index 00000000..c1586e28 --- /dev/null +++ b/scripts/angelscript/a3/nightmare_a3TC3.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class NightmareA3tc3 : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "drink_ale", 1, 0); + AddStoreItem(STORENAME, "proj_bolt_silver", 25, 0, 0, 25); + AddStoreItem(STORENAME, "swords_skullblade4", 1, 0); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "scroll2_turn_undead", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "scroll2_summon_undead", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/a3/nightmare_a3TC4.as b/scripts/angelscript/a3/nightmare_a3TC4.as new file mode 100644 index 00000000..8221b5a3 --- /dev/null +++ b/scripts/angelscript/a3/nightmare_a3TC4.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class NightmareA3tc4 : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "item_book_old", 1, 0); + AddStoreItem(STORENAME, "blunt_club", 1, 0); + AddStoreItem(STORENAME, "armor_leather_studded", 1, 0); + AddStoreItem(STORENAME, "drink_forsuth", 1, 0); + AddStoreItem(STORENAME, "proj_arrow_holy", 30, 0, 0, 30); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "proj_bolt_silver", 25, 0, 0, 25); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "mana_immune_poison", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/a3/nightmare_a3TC5.as b/scripts/angelscript/a3/nightmare_a3TC5.as new file mode 100644 index 00000000..b2e18fe6 --- /dev/null +++ b/scripts/angelscript/a3/nightmare_a3TC5.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class NightmareA3tc5 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 20)); + AddStoreItem(STORENAME, "blunt_maul", RandomInt(0, 1), 0); + AddStoreItem(STORENAME, "bows_shortbow", RandomInt(0, 1), 0); + AddStoreItem(STORENAME, "proj_arrow_poison", 30, 0, 0, 15); + if (RandomInt(1, 5) == 1) + { + add_good_item(); + } + if (RandomInt(1, 5) == 1) + { + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/a3/nightmare_a3TC6.as b/scripts/angelscript/a3/nightmare_a3TC6.as new file mode 100644 index 00000000..3866b65f --- /dev/null +++ b/scripts/angelscript/a3/nightmare_a3TC6.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class NightmareA3tc6 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(20, 100)); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "mana_resist_fire", 1, 0); + AddStoreItem(STORENAME, "swords_spiderblade", 1, 0); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "item_crystal_reloc", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "item_crystal_return", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "mana_speed", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/a3/olof.as b/scripts/angelscript/a3/olof.as new file mode 100644 index 00000000..6beef8e2 --- /dev/null +++ b/scripts/angelscript/a3/olof.as @@ -0,0 +1,688 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Olof : CGameScript +{ + int AM_SCREAMING; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_STEP1; + string ANIM_STEP2; + string ANIM_STEP3; + string ANIM_STEP4; + string ANIM_WALK; + string CALMER_ID; + int CANT_TURN; + float CHAT_DELAY_STEP1; + float CHAT_DELAY_STEP2; + float CHAT_DELAY_STEP3; + float CHAT_DELAY_STEP4; + float CHAT_DELAY_STEP5; + string CHAT_EVENT_STEP4; + string CHAT_EVENT_STEP5; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + int CHAT_STEPS; + int HAVE_RING; + string HI_PLAYER; + int MENTIONED_CURSE; + string NEXT_STORE_CHATTER; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int NO_STUCK_CHECKS; + int NPC_NO_ATTACK; + int NPC_NO_PLAYER_DMG; + string QUEST_WINNER; + string SAW_FIRST_PLAYER; + string SHOPPER_ID; + string SND_SCREAM1; + string SND_SCREAM2; + string SND_SCREAM3; + int STORE_BUYMENU; + string STORE_NAME; + int STORE_SELLMENU; + int VENDOR_MENU_OFF; + int VENDOR_NOT_ON_USE; + string VENDOR_TARGET; + string VERIFY_TARGET; + + Olof() + { + ANIM_RUN = "run1"; + ANIM_WALK = "walk_scared"; + ANIM_DEATH = "diesimple"; + ANIM_IDLE = "idle1"; + NPC_NO_PLAYER_DMG = 1; + NO_STUCK_CHECKS = 1; + NPC_NO_ATTACK = 1; + CANT_TURN = 1; + NO_HAIL = 1; + NO_JOB = 1; + NO_RUMOR = 1; + STORE_NAME = "olof_shop"; + VENDOR_MENU_OFF = 1; + VENDOR_NOT_ON_USE = 1; + STORE_SELLMENU = 1; + STORE_BUYMENU = 1; + SND_SCREAM1 = "scientist/scream7.wav"; + SND_SCREAM2 = "scientist/scream17.wav"; + SND_SCREAM3 = "scientist/scream07.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if ((CanSee("player", 128))) + { + } + string PLAYER_ID = GetEntityIndex(m_hLastSeen); + check_player_status(PLAYER_ID, 1); + } + + void OnSpawn() override + { + SetName("Olof Odlaren"); + SetModel("npc/human1.mdl"); + SetHealth(30); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetIdleAnim("idle1"); + SetNoPush(true); + CatchSpeech("say_yes", "yes"); + CatchSpeech("say_no", "no"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_curse", "curse"); + if (!(true)) return; + SHOPPER_ID = "none"; + } + + void check_player_status() + { + string PLAYER_ID = param1; + string DO_REACT = param2; + string PLAYER_STATUS = GetEntityProperty(PLAYER_ID, "scriptvar"); + if (PLAYER_STATUS == "PLR_OLOF_STATUS") + { + if (GetPlayerQuestData(param1, "r") > 0) + { + CallExternal(param1, "ext_olof_setstatus", "friendly"); + if ((DO_REACT)) + { + } + calm_down("ring_quest_started", PLAYER_ID); + } + else + { + if ((ItemExists(param1, "item_ring_percept"))) + { + CallExternal(param1, "ext_olof_setstatus", "friendly"); + calm_down("ring_percept", PLAYER_ID); + } + else + { + if ((ItemExists(param1, "item_ring"))) + { + CallExternal(param1, "ext_olof_setstatus", "friendly"); + calm_down("my_ring", PLAYER_ID); + } + else + { + CallExternal(param1, "ext_olof_setstatus", "unknown"); + if ((DO_REACT)) + { + } + verify_friendly(PLAYER_ID, 0); + } + } + } + } + else + { + if ((DO_REACT)) + { + } + if (PLAYER_STATUS == "evil") + { + if (!(AM_SCREAMING)) + { + } + start_screaming(); + SayText("Get away from me you evil monster from hell!"); + Say("[0.5] [0.2] [0.1] [0.1] [0.1] [0.1] [0.1]"); + } + } + } + + void verify_friendly() + { + VERIFY_TARGET = param1; + string FROM_MENU = param2; + CallExternal(param1, "ext_olof_setstatus", "unknown"); + if (!(SAW_FIRST_PLAYER)) + { + SayText("Halt! Are you one of the undead monsters?"); + Say("[0.5] [0.2] [0.1] [0.1] [0.1] [0.1] [0.1]"); + SAW_FIRST_PLAYER = 1; + } + else + { + SayText("And you? ...are " + YOU + " one of the evil ones?"); + Say("[0.5] [0.2] [0.1] [0.1] [0.1] [0.1] [0.1]"); + } + PlayAnim("once", "panic"); + if ((FROM_MENU)) return; + OpenMenu(param1); + } + + void game_menu_getoptions() + { + SetMoveDest(param1); + VENDOR_TARGET = param1; + string PLAYER_STATUS = GetEntityProperty(param1, "scriptvar"); + if (PLAYER_STATUS == "PLR_OLOF_STATUS") + { + check_player_status(GetEntityIndex(param1), 0); + string PLAYER_STATUS = GetEntityProperty(param1, "scriptvar"); + } + if (param1 != VERIFY_TARGET) + { + if (PLAYER_STATUS == "unknown") + { + verify_friendly(GetEntityIndex(param1), 1); + } + } + if (param1 == VERIFY_TARGET) + { + string reg.mitem.title = "Yes!"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_yes"; + string reg.mitem.title = "No!"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_no"; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (PLAYER_STATUS == "evil") + { + if ((AM_SCREAMING)) + { + } + string reg.mitem.title = "Wait! I'm NOT evil!"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_no"; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (PLAYER_STATUS == "friendly") + { + string reg.mitem.title = "Hail?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + string reg.mitem.title = "You have wares?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "vendor_offerstore"; + if ((MENTIONED_CURSE)) + { + string reg.mitem.title = "Cursed?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_curse"; + } + if ((ItemExists(param1, "item_ring"))) + { + if (GetPlayerQuestData(param1, "r") == 0) + { + } + if ((HAVE_RING)) + { + int SECOND_RING = 1; + } + if (RING_BOY_ID == "RING_BOY_ID") + { + int SECOND_RING = 1; + } + if (!(SECOND_RING)) + { + if (!(ItemExists(param1, "item_ring_percept"))) + { + RING_BOY_ID = param1; + not_my_ring(); + return; + } + else + { + string reg.mitem.title = "Return ring"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_ring"; + string reg.mitem.callback = "got_ring"; + } + } + else + { + string reg.mitem.title = "Return ring"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "second_ring"; + } + } + if ((AM_SCREAMING)) + { + } + calm_down("friendly_used", GetEntityIndex(param1)); + } + } + + void game_menu_cancel() + { + if (!(param1 == VERIFY_TARGET)) return; + SayText("I... I won't talk until you answer me!"); + Say("[0.5] [0.2] [0.1] [0.1] [0.1] [0.1] [0.1]"); + PlayAnim("once", "panic"); + } + + void say_yes() + { + if ((IsEntityAlive(param1))) + { + string PLAYER_ID = param1; + } + else + { + string PLAYER_ID = GetEntityIndex("ent_lastspoke"); + } + VERIFY_TARGET = 0; + CallExternal(PLAYER_ID, "ext_olof_setstatus", "evil"); + SayText(AAAAAAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHH!!!!!!!!); + PlayAnim("once", "fear2"); + Say("[2]"); + AM_SCREAMING = 1; + ScheduleDelayedEvent(2.0, "do_screaming"); + } + + void say_no() + { + if ((IsEntityAlive(param1))) + { + string PLAYER_ID = param1; + } + else + { + string PLAYER_ID = GetEntityIndex("ent_lastspoke"); + } + CALMER_ID = PLAYER_ID; + CallExternal(PLAYER_ID, "ext_olof_setstatus", "friendly"); + VERIFY_TARGET = 0; + AM_SCREAMING = 0; + PlayAnim("once", "lean"); + SetMenuAutoOpen(1); + ScheduleDelayedEvent(3, "say_no2"); + } + + void say_no2() + { + calm_down("said_no", CALMER_ID); + VERIFY_TARGET = 0; + } + + void start_screaming() + { + AM_SCREAMING = 1; + do_screaming(); + } + + void do_screaming() + { + if (!(AM_SCREAMING)) return; + int RND_ANIM = RandomInt(1, 4); + if (RND_ANIM == 1) + { + PlayAnim("once", "fear1"); + } + if (RND_ANIM == 2) + { + PlayAnim("once", "fear2"); + } + if (RND_ANIM == 3) + { + PlayAnim("once", "crouch_idle2"); + } + if (RND_ANIM == 4) + { + PlayAnim("once", "crouch_idle2"); + } + // PlayRandomSound from: SND_SCREAM1, SND_SCREAM2, SND_SCREAM3 + array sounds = {SND_SCREAM1, SND_SCREAM2, SND_SCREAM3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 8); + SetIdleAnim("crouch_idle"); + Random(5_0, 10_0)("do_screaming"); + } + + void calm_down() + { + string REASON_CALM = param1; + SetRoam(false); + AM_SCREAMING = 0; + SetIdleAnim("idle1"); + if (REASON_CALM == "ring_quest_started") + { + SayText("Oh, it's you... I hope you got that ring back to Galan."); + bchat_auto_mouth_move(3.0); + } + if (REASON_CALM == "my_ring") + { + string L_NAME = GetEntityName(param2); + L_NAME += ","; + SayText(L_NAME + " have you found the ring yet?"); + Say("[0.5] [0.1] [0.1] [0.1] [0.1] [0.1] [0.2]"); + PlayAnim("once", "pondering3"); + } + if (REASON_CALM == "skull_blade") + { + string L_NAME = GetEntityName(param2); + L_NAME += ","; + SayText("Ah , " + L_NAME + " Thank you for the nice ring."); + Say("[0.5] [0.1] [0.1] [0.1] [0.1] [0.1] [0.2]"); + PlayAnim("once", "yes"); + } + if (REASON_CALM == "friendly_used") + { + SayText("Oh! It... It's you... What can I do for you?"); + bchat_auto_mouth_move(3.0); + } + if (REASON_CALM == "said_no") + { + SayText("...Ok , " + I + " believe you... for now..."); + Say("[0.2] [0.2] [0.1] [0.2] [0.1] [0.1]"); + } + if (REASON_CALM == "ring_percept") + { + SayText("I... I see you worked things out with Galan's ring."); + Say("[0.2] [0.2] [0.1] [0.2] [0.1] [0.1]"); + } + if (REASON_CALM == "ring_boy") + { + not_my_ring(); + } + } + + void say_hi() + { + if ((IsEntityAlive(param1))) + { + string PLAYER_ID = param1; + } + else + { + string PLAYER_ID = GetEntityIndex("ent_lastspoke"); + } + string PLAYER_STATUS = GetEntityProperty(PLAYER_ID, "scriptvar"); + if (!(IsEntityAlive(PLAYER_ID))) return; + if (PLAYER_STATUS == "PLR_OLOF_STATUS") + { + string PLAYER_STATUS = "unknown"; + } + if (PLAYER_STATUS == "unknown") + { + SayText("Stay away from me! You look like evil! Are you evil?!?"); + Say("[0.2] [0.1] [0.05] [0.05] [0.05] [0.05] [0.05] [0.1]"); + PlayAnim("once", "panic"); + verify_friendly(PLAYER_ID, 0); + } + if (PLAYER_STATUS == "evil") + { + SayText("The evil fiend tried to talk to me!!! No , my ears have been cursed!"); + Say("[0.2] [0.1] [0.1] [0.1] [0.1] [0.1] [0.1] [0.1]"); + PlayAnim("once", "fear1"); + } + if (PLAYER_STATUS == "friendly") + { + HI_PLAYER = PLAYER_ID; + say_hi2(); + } + } + + void say_hi2() + { + if ((BUSY_CHATTING)) + { + SendColoredMessage(HI_PLAYER, "Olof is busy babbling about something else..."); + } + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "..Are you really sure you are no monster? "; + ANIM_STEP1 = "pondering3"; + CHAT_DELAY_STEP1 = 3.0; + CHAT_STEP2 = "There is too much evil these days.."; + ANIM_STEP2 = "c1a0_catwalkidle"; + CHAT_DELAY_STEP2 = 2.0; + CHAT_STEP3 = "If you really are a shining light, maybe you could help me?"; + CHAT_DELAY_STEP3 = 4.0; + CHAT_STEP4 = "All of the people in this town have been [cursed]!"; + CHAT_DELAY_STEP4 = 3.0; + ANIM_STEP4 = "startle"; + MENTIONED_CURSE = 1; + CHAT_STEPS = 4; + chat_loop(); + } + + void say_curse() + { + if ((IsEntityAlive(param1))) + { + string PLAYER_ID = param1; + } + else + { + string PLAYER_ID = GetEntityIndex("ent_lastspoke"); + } + string PLAYER_STATUS = GetEntityProperty(PLAYER_ID, "scriptvar"); + if (!(PLAYER_STATUS == "friendly")) return; + if ((BUSY_CHATTING)) + { + SendColoredMessage(PLAYER_ID, "Olof is busy babbling about something else..."); + } + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Yeah, horrible isn't it? "; + ANIM_STEP1 = "eye_wipe"; + CHAT_DELAY_STEP1 = 2.0; + CHAT_STEP2 = "The evil Lord Undamael has turned all the people in my town into books!"; + CHAT_DELAY_STEP2 = 4.0; + CHAT_STEP3 = "I will need my ring to turn them back to normal again."; + ANIM_STEP3 = "yes"; + CHAT_DELAY_STEP3 = 3.0; + CHAT_STEP4 = "I will reward you if you find it, but you won't.. because I lost it in the.."; + ANIM_STEP4 = "no"; + CHAT_DELAY_STEP4 = 3.0; + CHAT_EVENT_STEP4 = "say_curse2"; + CHAT_STEPS = 4; + chat_loop(); + } + + void say_curse2() + { + PlayAnim("critical", "fear1"); + ScheduleDelayedEvent(1.0, "say_curse3"); + } + + void say_curse3() + { + SayText(..H-A-U-N-T-E-D + " forest!"); + Say("[1] [0.2] [1] [0.2]"); + } + + void vendor_offerstore() + { + string PLAYER_STATUS = GetEntityProperty(param1, "scriptvar"); + if (!(PLAYER_STATUS == "friendly")) return; + if (!(SHOPPER_ID == "none")) return; + if (GetGameTime() > NEXT_STORE_CHATTER) + { + int RND_CHAT = RandomInt(1, 5); + if (RND_CHAT == 1) + { + SayText("Demons leave the most interesting stuff lying around..."); + } + if (RND_CHAT == 2) + { + SayText("Don t tell anyone, but there s more downstairs..."); + } + if (RND_CHAT == 3) + { + SayText("All this stuff is cursed , you know..."); + } + if (RND_CHAT == 4) + { + SayText(I + " don t sell to demons, but I suppose you re ok."); + } + if (RND_CHAT == 5) + { + SayText("I'll buy skins if ya have em, they keeps the demons away."); + } + bchat_auto_mouth_move(3.0); + NEXT_STORE_CHATTER = GetGameTime(); + NEXT_STORE_CHATTER += 10.0; + } + SHOPPER_ID = param1; + ScheduleDelayedEvent(2.0, "give_store"); + } + + void give_store() + { + basevendor_offerstore(SHOPPER_ID); + SHOPPER_ID = "none"; + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_mpotion", RandomInt(10, 20), 105); + AddStoreItem(STORE_NAME, "health_apple", RandomInt(15, 25), 100); + AddStoreItem(STORE_NAME, "proj_arrow_wooden", 120, 100, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_poison", 120, 75, 0, 30); + AddStoreItem(STORE_NAME, "proj_arrow_broadhead", 120, 100, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_silvertipped", 120, 100, 0, 60); + AddStoreItem(STORE_NAME, "pack_heavybackpack", RandomInt(0, 1), 110); + AddStoreItem(STORE_NAME, "item_torch", RandomInt(10, 20), 75); + AddStoreItem(STORE_NAME, "axes_scythe", RandomInt(0, 1), 90); + AddStoreItem(STORE_NAME, "scroll2_glow", RandomInt(0, 1), 100); + AddStoreItem(STORE_NAME, "scroll_glow", RandomInt(0, 1), 100); + AddStoreItem(STORE_NAME, "scroll2_fire_dart", RandomInt(0, 1), 120); + AddStoreItem(STORE_NAME, "sheath_spellbook", 2, 80); + AddStoreItem(STORE_NAME, "skin_boar", 0, 150, 1.5); + AddStoreItem(STORE_NAME, "skin_ratpelt", 0, 250, 2.5); + AddStoreItem(STORE_NAME, "skin_bear", 0, 150, 1.5); + AddStoreItem(STORE_NAME, "skin_boar_heavy", 0, 150, 1.5); + if (!(RandomInt(1, 3) == 1)) return; + AddStoreItem(STORE_NAME, "sheath_back_holster", 1, 100, SELL_RATIO); + } + + void closetskel() + { + SetMoveAnim("run1"); + SetIdleAnim("walk_scared"); + } + + void OnDamage(int damage) override + { + if ((IsValidPlayer(param1))) return; + SetIdleAnim("walk_scared"); + SetRoam(true); + SetMenuAutoOpen(0); + npcatk_flee(GetEntityIndex(param1), 9999, 8.0); + // PlayRandomSound from: SND_SCREAM1, SND_SCREAM2, SND_SCREAM3 + array sounds = {SND_SCREAM1, SND_SCREAM2, SND_SCREAM3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npcatk_settarget() + { + } + + void got_ring() + { + HAVE_RING = 1; + SayText("What's that? Ohh, nice ring!"); + PlayAnim("once", "return_needle"); + Say("[0.2] [0.2] [0.05] [0.05] [0.05] [0.05]"); + QUEST_WINNER = param1; + ScheduleDelayedEvent(2, "got_ring2"); + } + + void got_ring2() + { + SayText("Don't know who it belongs to, but I'll trade it for one of my swords!"); + PlayAnim("once", "pull_needle"); + Say("[0.2 [0.2] [0.1] [0.1] [0.1] [0.2] [0.2] [0.2]"); + ScheduleDelayedEvent(2, "give_sword"); + } + + void give_sword() + { + // TODO: offer QUEST_WINNER swords_skullblade4 + } + + void second_ring() + { + SayText("Another... Ring? So..."); + PlayAnim("once", "dryhands"); + Say("[1]"); + ScheduleDelayedEvent(1.5, "second_ring2"); + } + + void second_ring2() + { + SayText("pretty...."); + Say("[1]"); + ScheduleDelayedEvent(2, "second_ring3"); + } + + void second_ring3() + { + SayText("No! I musn't be tempted!"); + Say("[0.2] [0.2] [0.2] [0.2]"); + PlayAnim("critical", "rflinch1"); + } + + void not_my_ring() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "not_my_ring"); + } + if ((BUSY_CHATTING)) return; + SetMoveDest(RING_BOY_ID); + CHAT_STEP1 = "Hey, that rr.r....ring you have there..."; + ANIM_STEP1 = "eye_wipe"; + CHAT_DELAY_STEP1 = 3.0; + CHAT_STEP2 = "That one's not mine!"; + CHAT_DELAY_STEP2 = 2.0; + CHAT_STEP3 = "But I bet I know who would know whose it is!"; + CHAT_DELAY_STEP3 = 3.0; + CHAT_STEP4 = "Galan! In Gatecity..."; + CHAT_DELAY_STEP4 = 2.0; + CHAT_STEP5 = "He and I were friends... Before... You know... The b..books...."; + CHAT_DELAY_STEP5 = 4.0; + CHAT_EVENT_STEP5 = "not_my_ring2"; + CHAT_STEPS = 5; + chat_loop(); + } + + void not_my_ring2() + { + SetPlayerQuestData(RING_BOY_ID, "r"); + } + +} + +} diff --git a/scripts/angelscript/a3/rudolf.as b/scripts/angelscript/a3/rudolf.as new file mode 100644 index 00000000..c801629b --- /dev/null +++ b/scripts/angelscript/a3/rudolf.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class Rudolf : CGameScript +{ +} + +} diff --git a/scripts/angelscript/a3/rudolfschest.as b/scripts/angelscript/a3/rudolfschest.as new file mode 100644 index 00000000..d643a67e --- /dev/null +++ b/scripts/angelscript/a3/rudolfschest.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "a3/a3TC1.as" + +namespace MS +{ + +class Rudolfschest : CGameScript +{ +} + +} diff --git a/scripts/angelscript/aleyesu/death_image.as b/scripts/angelscript/aleyesu/death_image.as new file mode 100644 index 00000000..1b688f6e --- /dev/null +++ b/scripts/angelscript/aleyesu/death_image.as @@ -0,0 +1,189 @@ +#pragma context server + +namespace MS +{ + +class DeathImage : CGameScript +{ + float DIST_VORTEX; + int FOUNTAIN_ACTIVE; + int FOUNTAIN_MODE; + int IS_ACTIVE; + string MY_CL_IDX; + int PLAYING_DEAD; + int REND_COUNT; + string ROT; + int SPEECH_DONE; + string SPRITE_CENTER; + string VEC_DEST; + string VORTEX_CENTER; + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + if ((FOUNTAIN_ACTIVE)) + { + } + if (FOUNTAIN_MODE == 1) + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "glow_sprite"); + } + if (FOUNTAIN_MODE == 2) + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "explode_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "explode_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "explode_sprite"); + } + } + + void OnSpawn() override + { + SetName("Younger Keledros"); + SetModel("monsters/venevus.mdl"); + SetWidth(32); + SetHeight(80); + SetRoam(false); + SetInvincible(true); + PLAYING_DEAD = 1; + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + SetSayTextRange(2048); + SetSolid("none"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "renderfx", 16); + ScheduleDelayedEvent(0.1, "say_stuff1"); + IS_ACTIVE = 1; + setup_spinout(); + // svplaysound: svplaysound 2 10 ambience/alien_chatter.wav + EmitSound(2, 10, "ambience/alien_chatter.wav"); + } + + void say_stuff1() + { + SayText("Ahck! No! " + I + " m too weak to maintain phase in this time!"); + UseTrigger("timeroom_death"); + ScheduleDelayedEvent(3.0, "say_stuff2"); + } + + void say_stuff2() + { + SayText("Mark my words , this isn t the first time you had seen of meeeee...!"); + SPEECH_DONE = 1; + } + + void spinout_done() + { + // svplaysound: svplaysound 2 0 ambience/alien_chatter.wav + EmitSound(2, 0, "ambience/alien_chatter.wav"); + EmitSound(GetOwner(), 0, "ambience/alien_humongo.wav", 10); + SetProp(GetOwner(), "renderamt", 0); + ClientEvent("update", "all", MY_CL_IDX, "do_explode"); + Effect("screenfade", "all", 3, 1, Vector3(255, 255, 255), 200, "fadein"); + ScheduleDelayedEvent(1.0, "remove_me1"); + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) return; + SpawnNPC("aleyesu/final_chest", VORTEX_CENTER, ScriptMode::Legacy); + } + + void remove_me1() + { + ClientEvent("remove", "all", MY_CL_IDX); + ScheduleDelayedEvent(0.1, "remove_me2"); + } + + void remove_me2() + { + if (!(SPEECH_DONE)) + { + ScheduleDelayedEvent(1.0, "remove_me2"); + } + if (!(SPEECH_DONE)) return; + DeleteEntity(GetOwner()); + } + + void setup_spinout() + { + DIST_VORTEX = Distance(GetMonsterProperty("origin"), VORTEX_CENTER); + ROT = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), VORTEX_CENTER); + REND_COUNT = 0; + ScheduleDelayedEvent(0.1, "spinout_loop"); + } + + void spinout_loop() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "spinout_loop"); + VEC_DEST = VORTEX_CENTER; + VEC_DEST += /* TODO: $relpos */ $relpos(Vector3(0, ROT, 0), Vector3(0, DIST_VORTEX, 0)); + ROT += 10; + if (ROT > 359) + { + ROT -= 359; + } + if (DIST_VORTEX > 0) + { + DIST_VORTEX -= 5; + } + if (DIST_VORTEX > 1024) + { + DIST_VORTEX = 1024; + } + if (DIST_VORTEX <= 0) + { + IS_ACTIVE = 0; + spinout_done(); + } + int RND_AMT = RandomInt(128, 255); + SetProp(GetOwner(), "renderamt", RND_AMT); + SetEntityOrigin(GetOwner(), VEC_DEST); + } + + void game_dynamically_created() + { + VORTEX_CENTER = param1; + ClientEvent("new", "all", currentscript, VORTEX_CENTER); + MY_CL_IDX = "game.script.last_sent_id"; + } + + void client_activate() + { + SPRITE_CENTER = param1; + FOUNTAIN_ACTIVE = 1; + FOUNTAIN_MODE = 1; + } + + void do_explode() + { + FOUNTAIN_MODE = 2; + } + + void glow_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-200, 200), Random(-200, 200), Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 1); + ClientEffect("tempent", "set_current_prop", "gravity", Random(-1.1, -1.6)); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + } + + void explode_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 20); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-200, 200), Random(-200, 200), Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 3); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + } + +} + +} diff --git a/scripts/angelscript/aleyesu/final_chest.as b/scripts/angelscript/aleyesu/final_chest.as new file mode 100644 index 00000000..2d9dd959 --- /dev/null +++ b/scripts/angelscript/aleyesu/final_chest.as @@ -0,0 +1,68 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class FinalChest : CGameScript +{ + string SCROLL_LIST; + string TOME_LIST; + + FinalChest() + { + TOME_LIST = "scroll_fire_wall;scroll_lightning_storm;scroll_acid_xolt;scroll_ice_blast;scroll_volcano;scroll_healing_wave"; + SCROLL_LIST = "scroll2_fire_wall;scroll2_lightning_storm;scroll2_acid_xolt;scroll2_ice_blast;scroll2_volcano;scroll2_healing_wave"; + } + + void chest_additems() + { + add_gold(800); + offer_felewyn_symbol(100); + AddStoreItem(STORENAME, "item_charm_w2", 1, 0); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "armor_paura", 1, 0); + } + add_epic_item(); + add_random_spell(); + if (RandomInt(1, 8) == 1) + { + add_random_spell(); + } + if (RandomInt(1, 8) == 1) + { + add_random_spell(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + } + + void add_random_spell() + { + int L_LIST = RandomInt(0, 1); + if (L_LIST == 0) + { + string L_LIST = TOME_LIST; + } + else + { + string L_LIST = SCROLL_LIST; + } + string N_SCROLLS = GetTokenCount(L_LIST, ";"); + N_SCROLLS -= 1; + int RND_PICK = RandomInt(0, N_SCROLLS); + string SCROLL_NAME = GetToken(L_LIST, RND_PICK, ";"); + AddStoreItem(STORENAME, SCROLL_NAME, 1, 0); + } + +} + +} diff --git a/scripts/angelscript/aleyesu/k_cult_chest.as b/scripts/angelscript/aleyesu/k_cult_chest.as new file mode 100644 index 00000000..7425b685 --- /dev/null +++ b/scripts/angelscript/aleyesu/k_cult_chest.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class KCultChest : CGameScript +{ + void chest_additems() + { + add_good_item(); + add_good_item(); + add_great_item(); + if (!(RandomInt(0, 1))) return; + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/aleyesu/snakeman_chest.as b/scripts/angelscript/aleyesu/snakeman_chest.as new file mode 100644 index 00000000..8742e27b --- /dev/null +++ b/scripts/angelscript/aleyesu/snakeman_chest.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SnakemanChest : CGameScript +{ + string SCROLL_LIST; + + SnakemanChest() + { + SCROLL_LIST = "scroll2_fire_ball;scroll2_blizzard;scroll2_poison;scroll2_frost_xolt;scroll2_fire_wall;scroll2_lightning_storm;scroll_summon_undead"; + } + + void chest_additems() + { + add_gold(RandomInt(25, 300)); + AddStoreItem(STORENAME, "key_blue", 1, 0); + add_a_spell(); + if ((RandomInt(0, 1))) + { + add_a_spell(); + } + if (RandomInt(1, 4) == 1) + { + add_a_spell(); + } + } + + void add_a_spell() + { + string N_SCROLLS = GetTokenCount(SCROLL_LIST, ";"); + N_SCROLLS -= 1; + int RND_PICK = RandomInt(0, SCROLL_LIST); + string SCROLL_NAME = GetToken(SCROLL_LIST, RND_PICK, ";"); + AddStoreItem(STORENAME, SCROLL_NAME, 1, 0); + } + +} + +} diff --git a/scripts/angelscript/aleyesu/spider_chest.as b/scripts/angelscript/aleyesu/spider_chest.as new file mode 100644 index 00000000..1b2424dd --- /dev/null +++ b/scripts/angelscript/aleyesu/spider_chest.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SpiderChest : CGameScript +{ + void chest_additems() + { + add_gold(20); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_spiderblade", 1, 0); + } + AddStoreItem(STORENAME, "blunt_warhammer", 1, 0); + AddStoreItem(STORENAME, "drink_ale", 4, 0); + AddStoreItem(STORENAME, "smallarms_huggerdagger3", 1, 0); + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "shields_lironshield", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "armor_knight", 1, 0); + } + AddStoreItem(STORENAME, "proj_bolt_steel", 50, 0, 0, 50); + AddStoreItem(STORENAME, "mana_prot_spiders", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/aluhandra/sorc_loot.as b/scripts/angelscript/aluhandra/sorc_loot.as new file mode 100644 index 00000000..45544395 --- /dev/null +++ b/scripts/angelscript/aluhandra/sorc_loot.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SorcLoot : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("armor_pheonix55", 8); + } + + void chest_additems() + { + add_gold(RandomInt(100, 600)); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "item_charm_w2", 1, 0); + add_epic_item(); + add_epic_item(); + add_great_item(); + add_epic_item(); + add_epic_item(); + AddStoreItem(STORENAME, "mana_speed", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/aluhandra/trio_loot.as b/scripts/angelscript/aluhandra/trio_loot.as new file mode 100644 index 00000000..f39b04f6 --- /dev/null +++ b/scripts/angelscript/aluhandra/trio_loot.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class TrioLoot : CGameScript +{ + void chest_additems() + { + add_gold(1000); + add_epic_item(); + if (RandomInt(1, 3) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 3) == 1) + { + add_epic_item(); + } + } + +} + +} diff --git a/scripts/angelscript/animals/bats.as b/scripts/angelscript/animals/bats.as new file mode 100644 index 00000000..ff31f429 --- /dev/null +++ b/scripts/angelscript/animals/bats.as @@ -0,0 +1,36 @@ +#pragma context server + +namespace MS +{ + +class Bats : CGameScript +{ + string SOUND_IDLE1; + + void OnRepeatTimer() + { + SetRepeatDelay(8); + SetVolume(10); + EmitSound(GetOwner(), SOUND_IDLE1); + } + + void OnSpawn() override + { + SetHealth(20); + SetMaxHealth(20); + SetGold(0); + SetWidth(0); + SetHeight(0); + SetRace("neutral"); + SetName("Bats"); + SetRoam(true); + SetFly(true); + SetModel("animals/bats.mdl"); + SetIdleAnim("flappin"); + SOUND_IDLE1 = "monsters/bats/bats.wav"; + SetInvincible(true); + } + +} + +} diff --git a/scripts/angelscript/animals/bunny.as b/scripts/angelscript/animals/bunny.as new file mode 100644 index 00000000..941b7d3b --- /dev/null +++ b/scripts/angelscript/animals/bunny.as @@ -0,0 +1,31 @@ +#pragma context server + +namespace MS +{ + +class Bunny : CGameScript +{ + void OnRepeatTimer() + { + SetRepeatDelay(4); + PlayAnim("once", "hop"); + } + + void OnSpawn() override + { + SetHealth(20); + SetMaxHealth(20); + SetGold(0); + SetWidth(0); + SetHeight(0); + SetRace("neutral"); + SetName("Bunny"); + SetRoam(true); + SetModel("animals/bunny.mdl"); + SetIdleAnim("idle"); + SetInvincible(true); + } + +} + +} diff --git a/scripts/angelscript/ara/charon.as b/scripts/angelscript/ara/charon.as new file mode 100644 index 00000000..4ba06d7b --- /dev/null +++ b/scripts/angelscript/ara/charon.as @@ -0,0 +1,98 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Charon : CGameScript +{ + int NO_JOB; + int NO_RUMOR; + string ORC_TIME; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + + Charon() + { + NO_RUMOR = 1; + NO_JOB = 1; + } + + void OnSpawn() override + { + SetHealth(1); + SetName("Captain Charon"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(0, 1); + SetModelBody(1, 2); + SOUND_IDLE1 = "voices/human/male_idle4.wav"; + SOUND_IDLE2 = "voices/human/male_idle5.wav"; + SOUND_IDLE3 = "voices/human/male_idle6.wav"; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_orc", "orc"); + ScheduleDelayedEvent(0.1, "post_spawn"); + } + + void post_spawn() + { + ORC_TIME = GetGameTime(); + ORC_TIME += 120.0; + } + + void say_hi() + { + if (GetGameTime() < ORC_TIME) + { + PlayAnim("critical", "pondering"); + SayText("Oh , " + I + "don t like this. It s far too quiet... No one in sight. Something is up , something " + BAD.); + } + if (GetGameTime() >= ORC_TIME) + { + PlayAnim("once", "checktie"); + if ((IsEntityAlive(param1))) + { + face_speaker(param1); + } + if ((IsEntityAlive("ent_lastspoke"))) + { + face_speaker(GetEntityIndex("ent_lastspoke")); + } + SayText("Orcs!? Blast! Get in there and see if you can save any potential customers!"); + SayText(I + " ll stay here and guard the ship."); + } + } + + void say_orc() + { + PlayAnim("critical", "pondering2"); + if ((IsEntityAlive("ent_lastheard"))) + { + face_speaker(GetEntityIndex("ent_lastspoke")); + } + SayText("Awfully brazen these days. Orcs in Helena is one thing... Orcs in Ara is unheard of!"); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Sail Back to Deralia"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "vote_deralia"; + } + + void vote_deralia() + { + SayText(I + " suppose this town is a bust - sorry for wasting your time."); + UseTrigger("touch_trans_deralia"); + SendColoredMessage(param1, "Starting " + AMX + " vote for Deralia..."); + } + +} + +} diff --git a/scripts/angelscript/ara/chest1.as b/scripts/angelscript/ara/chest1.as new file mode 100644 index 00000000..41fed74b --- /dev/null +++ b/scripts/angelscript/ara/chest1.as @@ -0,0 +1,20 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest1 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 100)); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "proj_arrows_jagged", 60, 0, 0, 60); + } + +} + +} diff --git a/scripts/angelscript/ara/chest2.as b/scripts/angelscript/ara/chest2.as new file mode 100644 index 00000000..35585a91 --- /dev/null +++ b/scripts/angelscript/ara/chest2.as @@ -0,0 +1,58 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest2 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 100)); + add_good_item(); + if ((RandomInt(0, 1))) + { + add_good_item(); + } + if ((RandomInt(0, 1))) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 4) == 1) + { + add_good_item(); + } + if (RandomInt(1, 4) == 1) + { + add_good_item(); + } + if (RandomInt(1, 5) == 1) + { + add_good_item(); + } + if (RandomInt(1, 5) == 1) + { + add_great_item(); + } + if (RandomInt(1, 6) == 1) + { + add_great_item(); + } + if (RandomInt(1, 7) == 1) + { + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/ara/chest3.as b/scripts/angelscript/ara/chest3.as new file mode 100644 index 00000000..28e8f996 --- /dev/null +++ b/scripts/angelscript/ara/chest3.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest3 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 100)); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/ara/chest4.as b/scripts/angelscript/ara/chest4.as new file mode 100644 index 00000000..30b01fb2 --- /dev/null +++ b/scripts/angelscript/ara/chest4.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "chests/ara.as" + +namespace MS +{ + +class Chest4 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/ara/chest5.as b/scripts/angelscript/ara/chest5.as new file mode 100644 index 00000000..2d35832d --- /dev/null +++ b/scripts/angelscript/ara/chest5.as @@ -0,0 +1,20 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest5 : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "proj_bolt_wooden", 50, 0, 0, 50); + AddStoreItem(STORENAME, "proj_bolt_iron", 50, 0, 0, 50); + AddStoreItem(STORENAME, "proj_bolt_silver", 50, 0, 0, 50); + AddStoreItem(STORENAME, "proj_bolt_fire", 50, 0, 0, 50); + } + +} + +} diff --git a/scripts/angelscript/ara/map_startup.as b/scripts/angelscript/ara/map_startup.as new file mode 100644 index 00000000..e1a63c75 --- /dev/null +++ b/scripts/angelscript/ara/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "ara"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "Occupied Ara by J"); + SetGlobalVar("G_MAP_DESC", "The port town of Ara has fallen to an army of Orcs!"); + SetGlobalVar("G_MAP_DIFF", "Levels 25-30 / 400-600hp"); + SetGlobalVar("G_WARN_HP", 400); + } + +} + +} diff --git a/scripts/angelscript/b_castle/map_startup.as b/scripts/angelscript/b_castle/map_startup.as new file mode 100644 index 00000000..92d2dc2c --- /dev/null +++ b/scripts/angelscript/b_castle/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "b_castle"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "The Castle by P.Barnum"); + SetGlobalVar("G_MAP_DESC", "The warriors of this cursed castle are animated by an ancient magic."); + SetGlobalVar("G_MAP_DIFF", "Levels 25-35 / 450-700hp"); + SetGlobalVar("G_WARN_HP", 450); + } + +} + +} diff --git a/scripts/angelscript/badlands/djinn_fire.as b/scripts/angelscript/badlands/djinn_fire.as new file mode 100644 index 00000000..91f32620 --- /dev/null +++ b/scripts/angelscript/badlands/djinn_fire.as @@ -0,0 +1,127 @@ +#pragma context server + +#include "monsters/djinn_fire.as" + +namespace MS +{ + +class DjinnFire : CGameScript +{ + int AIM_RATIO; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_CONE_OF_FIRE; + int ATTACK_SPEED; + int BURN_DAMAGE; + int CANT_FLEE; + int CAN_FLEE; + int DO_NADDA; + int FIRE_BALL_DAMAGE; + int FIRE_BALL_DELAY; + float FIRE_BALL_FREQ; + int FIRE_BALL_RANGE; + int IS_FLEEING; + int NO_STUCK_CHECKS; + int PURE_FLEE; + int PUSH_CHANCE; + string SOUND_FIRESHOOT; + string SOUND_WARCRY; + float WARCRY_FREQ; + + DjinnFire() + { + SOUND_FIRESHOOT = "magic/fireball_strike.wav"; + FIRE_BALL_FREQ = 2.5; + AIM_RATIO = 50; + ATTACK_SPEED = 500; + ATTACK_CONE_OF_FIRE = 2; + FIRE_BALL_DAMAGE = 400; + FIRE_BALL_RANGE = 4000; + SOUND_WARCRY = "monsters/troll/trollidle2.wav"; + WARCRY_FREQ = 60.0; + PUSH_CHANCE = 5; + BURN_DAMAGE = "$rand(20,50)"; + CAN_FLEE = 0; + CANT_FLEE = 1; + ANIM_WALK = "idle0"; + ANIM_RUN = "idle1"; + NO_STUCK_CHECKS = 1; + Precache("monsters/djinn_fire"); + } + + void OnSpawn() override + { + SetName("Fire Djinn Val-sul"); + SetMoveSpeed(0.0); + // TODO: UNCONVERTED: moveanim idle1 + SetRoam(false); + SetHealth(4500); + SetDamageResistance("all", 0.6); + SetDamageResistance("cold", 1.25); + SetDamageResistance("stun", 0); + SetGravity(100); + WARCRY_FREQ("do_warcry"); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((FIRE_BALL_DELAY)) return; + if (!(false)) return; + if (!(GetEntityRange(m_hLastSeen) > ATTACK_RANGE)) return; + PlayAnim("once", "idle2"); + throw_fire_ball_start(); + FIRE_BALL_FREQ("reset_fire_ball_delay"); + } + + void reset_fire_ball_delay() + { + FIRE_BALL_DELAY = 0; + } + + void throw_fire_ball_start() + { + if ((IS_FLEEING)) return; + FIRE_BALL_DELAY = 1; + npcatk_faceattacker(GetEntityIndex(m_hLastSeen)); + PlayAnim("critical", "throw_rock"); + } + + void rock_throw() + { + EmitSound(GetOwner(), 0, SOUND_FIRESHOOT, 10); + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 0, 46), GetEntityIndex(m_hLastSeen), ATTACK_SPEED, FIRE_BALL_DAMAGE, ATTACK_CONE_OF_FIRE, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "lighten", BURN_DAMAGE); + } + + void summon_firetroll() + { + DO_NADDA = 1; + } + + void do_warcry() + { + IS_FLEEING = 1; + PURE_FLEE = 1; + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + PlayAnim("critical", "idle2"); + WARCRY_FREQ("do_warcry"); + ScheduleDelayedEvent(2.0, "restore_attacks"); + } + + void restore_attacks() + { + IS_FLEEING = 0; + PURE_FLEE = 0; + } + + void warcry() + { + UseTrigger("djinn_push"); + } + +} + +} diff --git a/scripts/angelscript/badlands/random_cave.as b/scripts/angelscript/badlands/random_cave.as new file mode 100644 index 00000000..0409ffb6 --- /dev/null +++ b/scripts/angelscript/badlands/random_cave.as @@ -0,0 +1,20 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class RandomCave : CGameScript +{ + void OnSpawn() override + { + int RND_TRIG = RandomInt(1, 3); + string TRIG_STRING = "caveent"; + TRIG_STRING += RND_TRIG; + UseTrigger(TRIG_STRING); + } + +} + +} diff --git a/scripts/angelscript/belmont/bandit_extortionist.as b/scripts/angelscript/belmont/bandit_extortionist.as new file mode 100644 index 00000000..93c20dea --- /dev/null +++ b/scripts/angelscript/belmont/bandit_extortionist.as @@ -0,0 +1,116 @@ +#pragma context server + +#include "monsters/bandit_elite_dagger.as" + +namespace MS +{ + +class BanditExtortionist : CGameScript +{ + string BAR_ID; + string STARTED_SCENE; + + BanditExtortionist() + { + SetName("extorter"); + SetSayTextRange(1024); + } + + void OnPostSpawn() override + { + SetRoam(false); + npcatk_suspend_ai(); + ScheduleDelayedEvent(1.0, "get_bar_id"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((SUSPEND_AI)) + { + npcatk_resume_ai(); + } + } + + void get_bar_id() + { + BAR_ID = FindEntityByName("bartender"); + scan_for_players(); + } + + void scan_for_players() + { + if ((false)) + { + if ((IsValidPlayer(m_hLastSeen))) + { + } + STARTED_SCENE = 1; + start_scene(); + } + if ((STARTED_SCENE)) return; + ScheduleDelayedEvent(1.0, "scan_for_players"); + } + + void start_scene() + { + SetMoveDest(BAR_ID); + SayText("Helga , your payment is late , again. " + I + " warned you this this would be the last time."); + ScheduleDelayedEvent(3.0, "helga_respond1"); + } + + void helga_respond1() + { + CallExternal(BAR_ID, "ext_harass1"); + ScheduleDelayedEvent(3.0, "me_harass2"); + } + + void me_harass2() + { + SayText("Come now , you surely have made enough for the payment by now."); + ScheduleDelayedEvent(3.0, "helga_respond2"); + } + + void helga_respond2() + { + CallExternal(BAR_ID, "ext_harass2"); + ScheduleDelayedEvent(3.0, "me_harass3"); + } + + void me_harass3() + { + SayText("We have to keep the riff-raff , in line... We have to set... An example."); + PlayAnim("hold", "stand_squatwalk1_L"); + ScheduleDelayedEvent(3.0, "helga_respond3"); + } + + void helga_respond3() + { + CallExternal(BAR_ID, "ext_harass3"); + ScheduleDelayedEvent(6.0, "me_kill_da_bitch"); + } + + void me_kill_da_bitch() + { + PlayAnim("critical", ANIM_ATTACK); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + CallExternal(BAR_ID, "npc_suicide"); + ScheduleDelayedEvent(2.0, "warn_all"); + } + + void warn_all() + { + SayText("Let that be a lesson to the rest of you. Do not defy the [insert name of bandit mafia here]!"); + PlayAnim("critical", "aim_punch1"); + SetRoam(true); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(IsEntityAlive(BAR_ID))) return; + CallExternal(BAR_ID, "extorter_slain", GetEntityIndex(m_hLastStruck)); + } + +} + +} diff --git a/scripts/angelscript/belmont/bartender.as b/scripts/angelscript/belmont/bartender.as new file mode 100644 index 00000000..aecdbf38 --- /dev/null +++ b/scripts/angelscript/belmont/bartender.as @@ -0,0 +1,167 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Bartender : CGameScript +{ + string BAR_ID; + string MY_SAVIOR; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int QUESTS_ACTIVE; + int SKEL_RESPAWN_TIMES; + string SOUND_DEATH; + + Bartender() + { + SOUND_DEATH = "xxx"; + NO_HAIL = 1; + NO_JOB = 1; + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetName("bartender"); + SetHealth(30); + SetInvincible(true); + SetName("Helga , The Barkeep"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetModel("npc/human1.mdl"); + SetIdleAnim("idle1"); + PlayAnim("once", "idle1"); + SetSayTextRange(1024); + SetModelBody(0, 4); + CatchSpeech("say_yes", "yes"); + CatchSpeech("say_no", "no"); + CatchSpeech("say_hi", "hi"); + ScheduleDelayedEvent(2.0, "get_extorter_id"); + } + + void get_extorter_id() + { + BAR_ID = FindEntityByName("extorter"); + } + + void say_hi() + { + if (!(QUESTS_ACTIVE)) return; + convo_anim(); + SayText(I + " m glad you saved me and all, but he has a lot of nasty friends who will follow."); + ScheduleDelayedEvent(3.0, "say_hi2"); + } + + void say_hi2() + { + convo_anim(); + SayText(I + " d just get up and leave here, but they have all my money."); + ScheduleDelayedEvent(3.0, "say_hi2b"); + } + + void say_hi2b() + { + SayText("It was all sealed in a magic coffer. " + I + " doubt they ll be able to open it anytime soon. But so long as they have it, I can t go anywhere."); + ScheduleDelayedEvent(3.0, "say_hi3"); + } + + void say_hi3() + { + convo_anim(); + SayText("If you could get it back for me , " + I + " d be sure to give you a handsom portion before I run off to Deralia!"); + } + + void ext_harass1() + { + SayText("For the last time , " + I + " told you , we don t have that kind of money. You already took everything we had!"); + PlayAnim("critical", "converse1"); + } + + void ext_harass2() + { + SayText("How could we possibly have made the money with your thugs scaring away all the customers?"); + PlayAnim("critical", "converse2"); + } + + void ext_harass3() + { + SayText(NO! + PLEASE + DON + " T!!!"); + PlayAnim("critical", "fear"); + } + + void npc_suicide() + { + if (param1 == "no_pets") + { + if ((I_R_PET)) + { + } + int EXIT_SUB = 1; + } + if (param1 == "only_bad") + { + if (GetEntityRace(GetOwner()) == "human") + { + int EXIT_SUB = 1; + } + if (GetEntityRace(GetOwner()) == "hguard") + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + SetInvincible(false); + SetRace("hated"); + SKEL_RESPAWN_TIMES = 99; + DoDamage(GetOwner(), "direct", 30000, 100, GAME_MASTER); + } + + void OnDeath(CBaseEntity@ attacker) override + { + PlayAnim("critical", "diesimple"); + EmitSound(GetOwner(), 0, SOUND_DEATH, 10); + } + + void extorter_slain() + { + MY_SAVIOR = GetEntityIndex(param1); + SayText("Thank Felewyn! You ve saved my life!"); + QUESTS_ACTIVE = 1; + NO_JOB = 0; + } + + void say_job() + { + say_hi(); + } + + void game_menu_getoptions() + { + if (!(ItemExists(param1, "item_bar_coffer"))) return; + string reg.mitem.title = "Return Coffer"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_bar_coffer"; + string reg.mitem.callback = "return_coffer"; + } + + void return_coffer() + { + SayText("Thank you so very much! Now maybe " + I + " can setup some place more reputable..."); + UseTrigger("coffer_returned"); + // TODO: offer PARAM1 gold 200 + ScheduleDelayedEvent(3.0, "next_quest"); + } + + void next_quest() + { + SayText("[Insert text for next quest here]."); + } + +} + +} diff --git a/scripts/angelscript/beta_date.as b/scripts/angelscript/beta_date.as new file mode 100644 index 00000000..7cd8d98e --- /dev/null +++ b/scripts/angelscript/beta_date.as @@ -0,0 +1,17 @@ +#pragma context server + +namespace MS +{ + +class BetaDate : CGameScript +{ + string BETA_TIMESTAMP; + + BetaDate() + { + BETA_TIMESTAMP = "CANARY: Thu 02/19/2026 17:24:29.54"; + } + +} + +} diff --git a/scripts/angelscript/bloodrose/atholo.as b/scripts/angelscript/bloodrose/atholo.as new file mode 100644 index 00000000..614350e5 --- /dev/null +++ b/scripts/angelscript/bloodrose/atholo.as @@ -0,0 +1,453 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Atholo : CGameScript +{ + string ANIM_ATTACK; + string ANIM_CAST; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SLASH; + string ANIM_SMASH; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float BURST_FREQ; + int CAN_FLINCH; + string CHOSEN_ONE; + int DAMAGE_ATTACK1; + int DAMAGE_ATTACK2; + int FIREBALL_DELAY; + string FIREBALL_TARGET; + int FIRE_ATTACK; + int FIRE_DAMAGE; + float FIRE_DURATION; + int FREEZE_DAMAGE; + float FREEZE_DURATION; + string GLOW_COLOR; + int GLOW_RAD; + int I_AM_TURNABLE; + int I_R_GLOWING; + int MISS_ATTACK; + string MONSTER_MODEL; + int MOVE_RANGE; + string MY_LIGHT_SCRIPT; + int NO_LOOP_DETECT; + int NO_STEP_ADJ; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_BOSS_REGEN_RATE; + int NPC_BOSS_RESTORATION; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int NPC_MUST_SEE_TARGET; + int REGEN_AMT; + float REGEN_RATE; + int ROAM_ON; + string SKEL_ID; + string SKEL_LIGHT_ID; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_PISSED; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_TAUNT; + int SWIPES_COUNT; + string VENGENCE_TARGET; + + Atholo() + { + if (StringToLower(GetMapName()) == "bloodrose") + { + NPC_GIVE_EXP = 5000; + NPC_IS_BOSS = 1; + } + else + { + NPC_GIVE_EXP = 1500; + } + NPC_BOSS_REGEN_RATE = 0; + NPC_BOSS_RESTORATION = 0; + REGEN_AMT = 60; + REGEN_RATE = 5.0; + NPC_BOSS_REGEN_RATE = 0; + NPC_ALLY_RESPONSE_RANGE = 6000; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "controller/con_pain2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_PISSED = "garg/gar_die1.wav"; + SOUND_DEATH = "garg/gar_die2.wav"; + SOUND_TAUNT = "nihilanth/nil_die.wav"; + SOUND_IDLE = "garg/gar_idle2.wav"; + ATTACK_HITRANGE = 240; + ATTACK_RANGE = 180; + MOVE_RANGE = 50; + ATTACK_MOVERANGE = 64; + ATTACK_HITCHANCE = 0.9; + DAMAGE_ATTACK1 = RandomInt(50, 90); + DAMAGE_ATTACK2 = RandomInt(100, 200); + FIRE_DAMAGE = RandomInt(50, 100); + FIRE_DURATION = 5.0; + FREEZE_DAMAGE = RandomInt(25, 50); + FREEZE_DURATION = 5.0; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_SLASH = "attack1"; + ANIM_SMASH = "attack2"; + ANIM_CAST = "castspell"; + ANIM_DEATH = "dieforward"; + NO_STEP_ADJ = 1; + BURST_FREQ = 15.0; + Precache(SOUND_DEATH); + MONSTER_MODEL = "monsters/skeleton_boss2.mdl"; + Precache(MONSTER_MODEL); + I_AM_TURNABLE = 0; + MISS_ATTACK = 0; + NPC_MUST_SEE_TARGET = 0; + GLOW_COLOR = Vector3(255, 255, 128); + GLOW_RAD = 200; + NO_LOOP_DETECT = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(REGEN_RATE); + if (GetMonsterHP() < GetMonsterMaxHP()) + { + } + string HP_GIVE = REGEN_AMT; + string GIVE_TEST = GetMonsterMaxHP(); + GIVE_TEST -= REGEN_AMT; + if (GetMonsterHP() < GIVE_TEST) + { + } + HealEntity(GetOwner(), REGEN_AMT); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 96, 1, 1); + } + + void game_precache() + { + Precache("kfortress/nh_appear_cl"); + } + + void game_dynamically_created() + { + SetAngles("face"); + VENGENCE_TARGET = param2; + ScheduleDelayedEvent(0.1, "set_vengence"); + } + + void set_vengence() + { + if (GetEntityRange(VENGENCE_TARGET) < 2048) + { + npcatk_settarget(VENGENCE_TARGET); + } + } + + void OnSpawn() override + { + SetName("boss_atholo"); + SetName("|Atholo"); + SetInvincible(true); + SetHealth(7000); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.5); + SetDamageResistance("dark", 0.75); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.2); + SetDamageResistance("lightning", 0.5); + SetWidth(40); + SetHeight(128); + SetRace("undead"); + SetRoam(false); + SetHearingSensitivity(6); + SetModel(MONSTER_MODEL); + SetModelBody(0, 9); + SetModelBody(1, 6); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ANIM_ATTACK = "attack1"; + SetMoveSpeed(1.0); + SetStepSize(64); + // TODO: maxslope 90 + EmitSound(GetOwner(), 0, SOUND_TAUNT, 10); + SWIPES_COUNT = 0; + ScheduleDelayedEvent(2.0, "rt_adj_stepsize"); + ScheduleDelayedEvent(30.0, "return_home"); + } + + void rt_adj_stepsize() + { + ScheduleDelayedEvent(2.0, "rt_adj_stepsize"); + if (!(IsValidPlayer(HUNT_LASTTARGET))) return; + string MY_ORG = GetMonsterProperty("origin"); + string MY_Z = (MY_ORG).z; + string TARG_ORG = GetEntityOrigin(HUNT_LASTTARGET); + string TARG_Z = (TARG_ORG).z; + TARG_Z += PLAYER_HALF_HEIGHT; + int DIFF = 0; + if (TARG_Z > MY_Z) + { + string DIFF = TARG_Z; + DIFF -= MY_Z; + } + if (TARG_Z < MY_Z) + { + string DIFF = MY_Z; + DIFF -= TARG_Z; + } + if (DIFF > 64) + { + SetStepSize(300); + } + if (DIFF <= 64) + { + SetStepSize(64); + } + } + + void attack_1() + { + MISS_ATTACK += 1; + if (MISS_ATTACK > 5) + { + MISS_ATTACK = 0; + chicken_run(3.0); + } + if (GetEntityRange(HUNT_LASTTARGET) < ATTACK_HITRANGE) + { + XDoDamage(HUNT_LASTTARGET, "direct", DAMAGE_ATTACK1, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()), "none", "slash", "dmgevent:swing"); + } + FIRE_ATTACK = 1; + SWIPES_COUNT += 1; + if (!(SWIPES_COUNT > 20)) return; + SWIPES_COUNT = 0; + ANIM_ATTACK = ANIM_SMASH; + } + + void attack_2() + { + MISS_ATTACK += 1; + if (MISS_ATTACK > 5) + { + MISS_ATTACK = 0; + chicken_run(3.0); + } + if (GetEntityRange(HUNT_LASTTARGET) < ATTACK_HITRANGE) + { + XDoDamage(HUNT_LASTTARGET, "direct", DAMAGE_ATTACK1, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()), "none", "slash", "dmgevent:swing"); + } + FIRE_ATTACK = 2; + ANIM_ATTACK = ANIM_SLASH; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + if (!(GetEntityRange(m_hLastStruck) > 200)) return; + if ((FIREBALL_DELAY)) return; + FIREBALL_DELAY = 1; + SetAngles("face_origin"); + FIREBALL_TARGET = GetEntityIndex(m_hLastStruck); + ScheduleDelayedEvent(0.1, "throw_fireball"); + } + + void throw_fireball() + { + string MY_ANG = GetMonsterProperty("angles"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANG); + SetAngles("face"); + PlayAnim("critical", "attack3"); + EmitSound(GetOwner(), 0, "magic/fireball_strike.wav", 10); + string DIST = GetEntityRange(FIREBALL_TARGET); + npcatk_suspend_ai(0.3); + act_toss(); + if (DIST > 300) + { + ScheduleDelayedEvent(0.1, "act_toss"); + } + if (DIST > 400) + { + ScheduleDelayedEvent(0.2, "act_toss"); + } + ScheduleDelayedEvent(5.0, "reset_fireball_delay"); + } + + void act_toss() + { + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 48, 32), FIREBALL_TARGET, 400, 400, 10, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0); + SetProp("ent_lastprojectile", "rendermode", 5); + SetProp("ent_lastprojectile", "renderamt", 255); + } + + void reset_fireball_delay() + { + FIREBALL_DELAY = 0; + } + + void taunt() + { + SetRepeatDelay(RandomInt(15, 60)); + if (!(GetMonsterProperty("isalive"))) return; + EmitSound(GetOwner(), 2, SOUND_TAUNT, 10); + } + + void vulnerable() + { + SetInvincible(false); + EmitSound(GetOwner(), 0, SOUND_PISSED, 10); + SetSayTextRange(1024); + CAN_FLINCH = 1; + SayText("Fools! " + I + " shall destroy you all!"); + } + + void my_target_died() + { + EmitSound(GetOwner(), 0, SOUND_TAUNT, 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + UseTrigger("atholo_died"); + string RYZA_NAME = FindEntityByName("ryza"); + string RYZA_ID = GetEntityIndex(RYZA_NAME); + CallExternal(RYZA_ID, "atholo_done"); + } + + void cycle_up() + { + if ((true)) + { + light_on(); + } + if ((ROAM_ON)) return; + ROAM_ON = 1; + BURST_FREQ("flame_burst_check"); + SetRoam(true); + } + + void swing_dodamage() + { + MISS_ATTACK = 0; + if (!(param1)) return; + if (FIRE_ATTACK == 1) + { + ApplyEffect(param2, "effects/dot_fire", FIRE_DURATION, GetEntityIndex(GetOwner()), FIRE_DAMAGE); + } + if (FIRE_ATTACK == 2) + { + ApplyEffect(param2, "effects/dot_cold_freeze", FREEZE_DURATION, GetEntityIndex(GetOwner()), FREEZE_DAMAGE); + } + FIRE_ATTACK = 0; + } + + void client_activate() + { + SKEL_ID = param1; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + string L_ORIGIN = "(63,1776,-3519)"; + for (int i = 0; i < GetPlayerCount(); i++) + { + get_chosen_one(); + } + if (CHOSEN_ONE != "CHOSEN_ONE") + { + ClientEvent("new", "all", "kfortress/nh_appear_cl", L_ORIGIN, 0); + SpawnItem("item_ring_ryza", L_ORIGIN); + CallExternal(m_hLastCreated, "bitem_reserve", CHOSEN_ONE); + } + } + + void get_chosen_one() + { + if (i == 0) + { + CallExternal(GAME_MASTER, "gm_find_strongest_reset"); + } + else + { + CallExternal(GAME_MASTER, "gm_find_strongest_player"); + } + string L_STRONGEST = GetEntityProperty(GAME_MASTER, "scriptvar"); + string L_QUEST = GetPlayerQuestData(L_STRONGEST, "manaring"); + string L_ITEM = ItemExists(L_STRONGEST, "item_ring_ryza"); + if (L_QUEST != "0") + { + return; + } + if ((L_ITEM)) + { + return; + } + CHOSEN_ONE = L_STRONGEST; + break; + } + + void light_on() + { + if ((I_R_GLOWING)) return; + I_R_GLOWING = 1; + ClientEvent("persist", "all", currentscript, GetEntityIndex(GetOwner())); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + + void flame_burst_check() + { + BURST_FREQ("flame_burst_check"); + if (!(CanSee("enemy", 128))) return; + PlayAnim("once", "break"); + npcatk_suspend_ai(1.0); + ScheduleDelayedEvent(0.1, "flame_burst"); + } + + void flame_burst() + { + PlayAnim("critical", ANIM_CAST); + SpawnNPC("monsters/summon/flame_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), FLAME_BURST_DAMAGE + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 512, 0.0, 1.0, 0.0); + ScheduleDelayedEvent(0.2, "stop_throwing"); + } + + void return_home() + { + ScheduleDelayedEvent(15.0, "return_home"); + if (!(HUNT_LASTTARGET == �NONE�)) return; + SetMoveDest(NPC_SPAWN_LOC); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/atholo_statue.as b/scripts/angelscript/bloodrose/atholo_statue.as new file mode 100644 index 00000000..4749569d --- /dev/null +++ b/scripts/angelscript/bloodrose/atholo_statue.as @@ -0,0 +1,70 @@ +#pragma context server + +namespace MS +{ + +class AtholoStatue : CGameScript +{ + string MONSTER_MODEL; + string PASS_TARGET; + string SOUND_ROCKS; + string SOUND_SPAWN; + + AtholoStatue() + { + MONSTER_MODEL = "props/atholo_statue.mdl"; + Precache(MONSTER_MODEL); + Precache("rockgibs.mdl"); + Precache("weapons/cbar_hitbod1.wav"); + Precache("weapons/cbar_hitbod2.wav"); + Precache("weapons/cbar_hitbod3.wav"); + Precache("controller/con_pain2.wav"); + Precache("zombie/claw_miss1.wav"); + Precache("zombie/claw_miss2.wav"); + Precache("garg/gar_die1.wav"); + Precache("garg/gar_die2.wav"); + Precache("nihilanth/nil_die.wav"); + Precache("garg/gar_idle2.wav"); + Precache("magic/fireball_strike.wav"); + Precache("monsters/skeleton_boss2.mdl"); + SOUND_SPAWN = "magic/spawn_loud.wav"; + SOUND_ROCKS = "debris/bustconcrete2.wav"; + } + + void OnSpawn() override + { + SetName(""); + SetName("atholo_statue"); + SetInvincible(true); + SetWidth(40); + SetHeight(100); + SetSolid("npcsize"); + SetModel(MONSTER_MODEL); + } + + void spawn_atholo() + { + PASS_TARGET = param1; + Effect("glow", GetOwner(), Vector3(255, 0, 255), 512, 2, 2); + EmitSound(GetOwner(), 0, SOUND_SPAWN, 10); + ScheduleDelayedEvent(1.9, "gibify"); + ScheduleDelayedEvent(2.0, "summon_atholo"); + } + + void gibify() + { + EmitSound(GetOwner(), 0, SOUND_ROCKS, 10); + Effect("tempent", "gibs", "rockgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1, 5, 15, 20, 5); + } + + void summon_atholo() + { + string MY_ANGLES = GetEntityAngles(GetOwner()); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SpawnNPC("bloodrose/atholo", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: MY_YAW, PASS_TARGET + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/chest_a1.as b/scripts/angelscript/bloodrose/chest_a1.as new file mode 100644 index 00000000..3f16dc02 --- /dev/null +++ b/scripts/angelscript/bloodrose/chest_a1.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "bloodrose/chest_a_base.as" + +namespace MS +{ + +class ChestA1 : CGameScript +{ + int FOAMY_CHEST_TYPE; + + ChestA1() + { + FOAMY_CHEST_TYPE = 1; + } + +} + +} diff --git a/scripts/angelscript/bloodrose/chest_a2.as b/scripts/angelscript/bloodrose/chest_a2.as new file mode 100644 index 00000000..ba860a96 --- /dev/null +++ b/scripts/angelscript/bloodrose/chest_a2.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "bloodrose/chest_a_base.as" + +namespace MS +{ + +class ChestA2 : CGameScript +{ + int FOAMY_CHEST_TYPE; + + ChestA2() + { + FOAMY_CHEST_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/bloodrose/chest_a3.as b/scripts/angelscript/bloodrose/chest_a3.as new file mode 100644 index 00000000..0e57af01 --- /dev/null +++ b/scripts/angelscript/bloodrose/chest_a3.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "bloodrose/chest_a_base.as" + +namespace MS +{ + +class ChestA3 : CGameScript +{ + int FOAMY_CHEST_TYPE; + + ChestA3() + { + FOAMY_CHEST_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/bloodrose/chest_a4.as b/scripts/angelscript/bloodrose/chest_a4.as new file mode 100644 index 00000000..1fae4114 --- /dev/null +++ b/scripts/angelscript/bloodrose/chest_a4.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "bloodrose/chest_a_base.as" + +namespace MS +{ + +class ChestA4 : CGameScript +{ + int FOAMY_CHEST_TYPE; + + ChestA4() + { + FOAMY_CHEST_TYPE = 4; + } + +} + +} diff --git a/scripts/angelscript/bloodrose/chest_a_base.as b/scripts/angelscript/bloodrose/chest_a_base.as new file mode 100644 index 00000000..6adc3cf2 --- /dev/null +++ b/scripts/angelscript/bloodrose/chest_a_base.as @@ -0,0 +1,58 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ChestABase : CGameScript +{ + string SCROLL_TOME; + + void chest_additems() + { + add_gold(RandomInt(50, 500)); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "item_log", 1, 0); + AddStoreItem(STORENAME, "item_crystal_return", 1, 0); + if (FOAMY_CHEST_TYPE == 1) + { + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "mana_gprotection", 1, 0); + } + else + { + AddStoreItem(STORENAME, "mana_protection", 1, 0); + } + SCROLL_TOME = GetRandomToken("scroll_poison_cloud;scroll2_poison_cloud;scroll_acid_xolt;scroll2_acid_xolt;scroll_poison;scroll2_poison", ";"); + AddStoreItem(STORENAME, SCROLL_TOME, 1, 0); + } + if (FOAMY_CHEST_TYPE == 2) + { + add_great_item(); + AddStoreItem(STORENAME, "smallarms_fangstooth", 1, 0); + } + if (FOAMY_CHEST_TYPE == 3) + { + AddStoreItem(STORENAME, "swords_nkatana", 1, 0); + AddStoreItem(STORENAME, "mana_speed", 1, 0); + } + if (FOAMY_CHEST_TYPE == 4) + { + AddStoreItem(STORENAME, "armor_helm_bronze", 1, 0); + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "armor_salamander", 1, 0); + } + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "mana_immune_poison", 1, 0); + } + } + } + +} + +} diff --git a/scripts/angelscript/bloodrose/chest_b1.as b/scripts/angelscript/bloodrose/chest_b1.as new file mode 100644 index 00000000..142483c8 --- /dev/null +++ b/scripts/angelscript/bloodrose/chest_b1.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "bloodrose/chest_b_base.as" + +namespace MS +{ + +class ChestB1 : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("item_log_magic", 100); + tc_add_artifact("swords_rune_green", 30); + tc_add_artifact("shields_rune", 30); + } + + void chest_additems() + { + AddStoreItem(STORENAME, "mana_speed", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/chest_b2.as b/scripts/angelscript/bloodrose/chest_b2.as new file mode 100644 index 00000000..273e4582 --- /dev/null +++ b/scripts/angelscript/bloodrose/chest_b2.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "bloodrose/chest_b_base.as" + +namespace MS +{ + +class ChestB2 : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "item_crystal_reloc", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/chest_b3.as b/scripts/angelscript/bloodrose/chest_b3.as new file mode 100644 index 00000000..3ca94de7 --- /dev/null +++ b/scripts/angelscript/bloodrose/chest_b3.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "bloodrose/chest_b_base.as" + +namespace MS +{ + +class ChestB3 : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "mana_gprotection", 1, 0); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "mana_regen", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/bloodrose/chest_b4.as b/scripts/angelscript/bloodrose/chest_b4.as new file mode 100644 index 00000000..f4c2c8f5 --- /dev/null +++ b/scripts/angelscript/bloodrose/chest_b4.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "bloodrose/chest_b_base.as" + +namespace MS +{ + +class ChestB4 : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + } + offer_felewyn_symbol(100); + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/chest_b_base.as b/scripts/angelscript/bloodrose/chest_b_base.as new file mode 100644 index 00000000..df8db486 --- /dev/null +++ b/scripts/angelscript/bloodrose/chest_b_base.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ChestBBase : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(80, 100)); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "item_log", 1, 0); + AddStoreItem(STORENAME, "item_crystal_return", 1, 0); + add_great_item(); + add_epic_arrows(30); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/key_chest.as b/scripts/angelscript/bloodrose/key_chest.as new file mode 100644 index 00000000..2e20fcbd --- /dev/null +++ b/scripts/angelscript/bloodrose/key_chest.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class KeyChest : CGameScript +{ + string ANIM_CLOSE; + string ANIM_IDLE; + string ANIM_OPEN; + + KeyChest() + { + ANIM_OPEN = "seq-name"; + ANIM_CLOSE = "seq-name"; + ANIM_IDLE = "seq-name"; + } + + void OnSpawn() override + { + SetName("Old Dresser"); + SetModel("props/Xen_furniture2.mdl"); + SetIdleAnim(ANIM_IDLE); + } + + void trade_success() + { + // PlayRandomSound from: "items/creak.wav" + array sounds = {"items/creak.wav"}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void chest_additems() + { + add_gold(RandomInt(13, 26)); + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + AddStoreItem(STORENAME, "key_red", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/map_startup.as b/scripts/angelscript/bloodrose/map_startup.as new file mode 100644 index 00000000..b59c0cce --- /dev/null +++ b/scripts/angelscript/bloodrose/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "bloodrose"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "Bloodrose Valley"); + SetGlobalVar("G_MAP_DESC", "This rose shaped valley nexus connects the northern and southern lands."); + SetGlobalVar("G_MAP_DIFF", "Levels 15-40 / 150-700hp"); + SetGlobalVar("G_WARN_HP", 150); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/protect_me.as b/scripts/angelscript/bloodrose/protect_me.as new file mode 100644 index 00000000..0b0be405 --- /dev/null +++ b/scripts/angelscript/bloodrose/protect_me.as @@ -0,0 +1,31 @@ +#pragma context server + +namespace MS +{ + +class ProtectMe : CGameScript +{ + void OnSpawn() override + { + SetHealth(4000); + SetRoam(false); + SetRace("undead"); + SetName("Crystal Shield"); + SetBloodType("none"); + SetSkillLevel(0); + SetModel("null.mdl"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + CallExternal("all", "npcatk_ally_alert", GetEntityIndex(m_hLastStruck), GetEntityIndex(GetOwner()), "crystal_hit"); + } + + void OnDamage(int damage) override + { + CallExternal("all", "npcatk_ally_alert", GetEntityIndex(m_hLastStruck), GetEntityIndex(GetOwner()), "crystal_hit"); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/ryza.as b/scripts/angelscript/bloodrose/ryza.as new file mode 100644 index 00000000..028aad1e --- /dev/null +++ b/scripts/angelscript/bloodrose/ryza.as @@ -0,0 +1,351 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class Ryza : CGameScript +{ + int ASKED_ATHOLO; + int ATHOLO_DEAD; + float CHAT_DELAY; + int CHAT_TEMP_NO_AUTO_FACE; + string CL_FX; + string DID_INTRO; + int EMOTES_ENABLED; + int EMOTE_COUNT; + string EMOTE_DELAY; + float EMOTE_FREQ; + int FADE_COUNT; + int FLICK_COUNT; + int GAVE_CRYSTALS; + string JUST_MENTION_LOCATION; + string MONSTER_MODEL; + int NO_JOB; + int NO_RUMOR; + string PORTAL_FX_POS; + int TRIGGER_RANGE; + + Ryza() + { + MONSTER_MODEL = "npc/femhuman2.mdl"; + NO_RUMOR = 1; + NO_JOB = 1; + CHAT_DELAY = 3.5; + EMOTE_FREQ = 20.0; + Precache(MONSTER_MODEL); + PORTAL_FX_POS = "(175,-605,-3503)"; + } + + void OnSpawn() override + { + SetName("Ghost of|Ryza , Priestess of Felewyn"); + SetName("ryza"); + SetHealth(9999); + SetInvincible(true); + SetRoam(false); + SetRace("beloved"); + SetModel(MONSTER_MODEL); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetHearingSensitivity(10); + SetMoveSpeed(0.0); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + CatchSpeech("say_atholo", "atholo"); + CatchSpeech("say_felewyn", "felewyn"); + CatchSpeech("say_ring", "ring"); + ScheduleDelayedEvent(0.1, "scan_for_players"); + EMOTE_COUNT = 0; + FLICK_COUNT = 0; + GAVE_CRYSTALS = 0; + ASKED_ATHOLO = 0; + TRIGGER_RANGE = 128; + UseTrigger("ryza_shield"); + SetSayTextRange(1024); + make_speech(); + } + + void make_speech() + { + chat_add_text("hi", "Greetings, I am the priestess Ryza...", CHAT_DELAY, "pull_needle"); + chat_add_text("hi", "My soul was bound here, for we knew one day Venevus would awaken Atholo.", CHAT_DELAY, "none", !"do_flicker"); + chat_add_text("hi", "We also knew that one day heroes, who could defeat both Venvus and Atholo, would come!"); + chat_add_text("hi", "I pray you are they, for my magic can only hold Atholo in his tomb for so long."); + chat_add_text("hi", "Use the portals quickly, for there is not much time before the magic that holds me to this mortal plane fails!", CHAT_DELAY, "eye_wipe", !"do_flicker"); + chat_add_text("emote1", "Atholo is protected by ancient magics, but this source of his power is sealed in that tomb with him!", CHAT_DELAY, "pondering2"); + chat_add_text("emote2", "You must hurry, my magic cannot last forever!", CHAT_DELAY, "retina", !"do_flicker"); + chat_add_text("emote3", "Do not hesitate! Hurry through the portals!", CHAT_DELAY, "gluonshow"); + chat_add_text("emote4", "If that beast escapes, all of Daragoth is doomed!", CHAT_DELAY, "fear1"); + chat_add_text("emote5", "Hurry! I cannot hold on much longer!", CHAT_DELAY, "checktie", !"do_flicker"); + chat_add_text("emote6", "You CAN defeat him! It has been foretold!", CHAT_DELAY, "lean"); + chat_add_text("emote7", "You are amongst the chosen ones... you must not be defeated, or all is lost!", CHAT_DELAY, "yes"); + chat_add_text("emote8", "Continue the battle! I shall hold the beast inside for as long as I can!", CHAT_DELAY, "quicklook"); + chat_add_text("emote9", "Remember! I can use some of my magic to change your Return Crystals to Crystals of Relocation!", CHAT_DELAY, "pondering3"); + chat_add_text("emote10", "Great Felewyn, I beseech thee, watch over these heroes who fight so valiantly!", CHAT_DELAY, "kneel"); + chat_add_text("atholo", "Atholo is the one of the great lords of darkness that fought along side Lor Malgoriand, servant of the Fallen.", CHAT_DELAY, "converse2"); + chat_add_text("atholo", "Atholo was sealed here at the end of the war, but Venevus made his home here, and my order could not defeat the wizard.", CHAT_DELAY, "converse2"); + chat_add_text("atholo", "We knew what was to come, so my soul was bound here to prevent the release of Atholo. But both he, and his magic, remain within.", CHAT_DELAY, "converse2"); + chat_add_text("atholo", "Atholo's magic, like mine, is bound up in crystals and the elements.", CHAT_DELAY, "converse2"); + chat_add_text("atholo", "That is all I know of The Beast, you MUST defeat him!", CHAT_DELAY, "converse2"); + chat_add_text("crystal_got", "This will aid you in your battle, but use it wisely. I can only enchant so many.", CHAT_DELAY, "dryhands"); + chat_add_text("crystal_no", "I am sorry, the last of my magic MUST be used to maintain this barrier!", CHAT_DELAY, "no", !"do_flicker"); + chat_add_text("crystal_mention", "I can use some of my magic to convert your Crystals of Return to those of Relocation.", CHAT_DELAY, "yes"); + chat_add_text("felewyn_no", "There is not enough time to explain the grandeur of my goddess, just know that she watches over you and your valiant battle!", CHAT_DELAY, "push_button", !"do_flicker"); + chat_add_text("dying", "I salute you all for defeating the great evil, it is indeed as foretold!", CHAT_DELAY, "franticbutton"); + chat_add_text("dying", "This is but the first of the Great Evils you shall encounter in your lives.", CHAT_DELAY, "no"); + chat_add_text("dying", "But I can say no more..."); + chat_add_text("dying", "I will pray for you, great adventurers! Take heart, for Felewyn watches over you all!", CHAT_DELAY, "kneel", "do_fade"); + chat_add_text("player_has_ring", "That was the magical trinket used to bind me to your realm to ensure Atholo's defeat.", 4.7, "franticbutton"); + chat_add_text("player_has_ring", "The magics have long since dissipated as the focusing lenses have gone missing, alongside its base structure.", 6.2); + chat_add_text("player_has_ring", "Perhaps you may find them and restore the [ring] to its former glory?", CHAT_DELAY, 4.5, !"do_flicker"); + chat_add_text("artifact_locations", "I fear Venevus has removed the focusing lenses and its original base, and scattered them across the world.", 5.5); + chat_add_text("artifact_locations", "Give me a moment, I may be able to channel the last remaining energy in the ring to find the missing artifacts.", 7, "none", "say_locations"); + chat_add_text("artifact_locations2", "It seems one has made its way into the cursed coffers of a crystal-protected bandit's stronghold, nestled deep in a lush grove.", 9.1, "pondering"); + chat_add_text("artifact_locations2", "You may need to find yet more crystals, however.", 4, "yes", "swap_portal"); + chat_add_text("artifact_locations2", "Another was given to a powerful crystalline wizard who was so apt at the arcane, they could split their very being into elemental fragments.", 8.1, "none", "swap_portal"); + chat_add_text("artifact_locations2", "The final jewel has recessed deep under the cliffs, to the possession of a dimensional arachnid.", 8.5, "no", "swap_portal"); + chat_add_text("artifact_locations2", "Lastly, the base of the trinket was once a gift to Felewyn's devout followers to light their way during dark times.", 8, "none", "swap_portal"); + chat_add_text("artifact_locations2", "Even if you were able to retrieve all these lost ancient artifacts...", 4.5, "none", "swap_portal"); + chat_add_text("artifact_locations2", "I fear those with the knowledge of attuning such powerful relics have been lost to time."); + chat_add_text("artifact_locations2", "If you were able to find someone so attuned to Felewyn's influence, perhaps you may be able to restore the latent energies within the leyline ring."); + chat_add_text("artifact_locations2", "Good luck, heroes. May Felewyn's grace, and Idemark's guidance, bless you once more."); + } + + void scan_for_players() + { + ScheduleDelayedEvent(0.7, "scan_for_players"); + if ((CanSee("player", TRIGGER_RANGE))) + { + player_spotted(); + } + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(GetEntityRange("ent_lastheard") < TRIGGER_RANGE)) return; + if (!(IsValidPlayer("ent_lastheard"))) return; + player_spotted(); + } + + void player_spotted() + { + if ((DOING_EXIT)) return; + if (!(DID_INTRO)) + { + if (!(ATHOLO_DEAD)) + { + say_hi(); + } + DID_INTRO = 1; + } + if ((DID_INTRO)) + { + if (!(ATHOLO_DEAD)) + { + } + if (!(EMOTE_DELAY)) + { + } + EMOTE_DELAY = 1; + EMOTE_FREQ("emote_reset"); + say_emote(); + } + } + + void emote_reset() + { + EMOTE_DELAY = 0; + } + + void say_hi() + { + chat_start_sequence("hi"); + } + + void say_emote() + { + int L_RAND = RandomInt(1, 10); + if (L_RAND == 9) + { + if (GAVE_CRYSTALS >= 4) + { + int L_RAND = 10; + } + } + string L_STR = "emote"; + chat_start_sequence(L_STR); + } + + void game_menu_getoptions() + { + if (!(DID_INTRO)) return; + if (!(ATHOLO_DEAD)) + { + if (GAVE_CRYSTALS < 4) + { + chat_start_sequence("crystal_mention"); + } + if ((ItemExists(param1, "item_crystal_return"))) + { + } + string reg.mitem.title = "Enchant my crystal"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_crystal_return"; + string reg.mitem.callback = "got_crystal"; + } + else + { + string L_QUEST = GetPlayerQuestData(param1, "manaring"); + if ((ItemExists(param1, "item_ring_ryza"))) + { + } + if (L_QUEST == "0") + { + } + if (!(JUST_MENTION_LOCATION)) + { + string reg.mitem.title = "Show Ryza's Trinket"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_trinket"; + } + else + { + string reg.mitem.title = "Ask about Ring"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_ring"; + } + } + } + + void say_trinket() + { + if ((CHAT_BUSY)) return; + if (!(JUST_MENTION_LOCATION)) + { + chat_start_sequence("player_has_ring"); + JUST_MENTION_LOCATION = 1; + } + } + + void say_ring() + { + if ((CHAT_BUSY)) return; + if (!(JUST_MENTION_LOCATION)) return; + chat_start_sequence("artifact_locations"); + } + + void say_locations() + { + CHAT_TEMP_NO_AUTO_FACE = 1; + SetAngles("face_origin"); + SetAngles("face"); + PlayAnim("critical", "writeboard"); + ScheduleDelayedEvent(4, "create_portal"); + ScheduleDelayedEvent(7, "say_locations_delay"); + } + + void create_portal() + { + ClientEvent("new", "all", "effects/manaring_portals", PORTAL_FX_POS, 1); + CL_FX = "game.script.last_sent_id"; + } + + void swap_portal() + { + ClientEvent("update", "all", CL_FX, "spawn_a_portal"); + } + + void say_locations_delay() + { + CHAT_TEMP_NO_AUTO_FACE = 0; + chat_start_sequence("artifact_locations2"); + } + + void got_crystal() + { + string CRYSTAL_GIVER = param1; + if ((ATHOLO_DEAD)) return; + if (GAVE_CRYSTALS >= 4) + { + // TODO: offer CRYSTAL_GIVER item_crystal_return + chat_start_sequence("crystal_no"); + } + if (GAVE_CRYSTALS < 4) + { + // TODO: offer CRYSTAL_GIVER item_crystal_reloc + chat_start_sequence("crystal_got"); + GAVE_CRYSTALS += 1; + } + } + + void atholo_done() + { + TRIGGER_RANGE = 64; + ATHOLO_DEAD = 1; + EMOTES_ENABLED = 0; + UseTrigger("ryza_shield"); + } + + void do_flicker() + { + FLICK_COUNT += 1; + if (FLICK_COUNT < 20) + { + int FLICKER_AMT = RandomInt(10, 180); + SetProp(GetOwner(), "renderamt", FLICKER_AMT); + ScheduleDelayedEvent(0.1, "do_flicker"); + } + if (!(FLICK_COUNT == 20)) return; + FLICK_COUNT = 0; + SetProp(GetOwner(), "renderamt", 255); + } + + void say_felewyn() + { + chat_start_sequence("felewyn_no"); + } + + void say_atholo() + { + chat_start_sequence("atholo"); + } + + void do_exit() + { + SetMenuAutoOpen(0); + chat_start_sequence("dying"); + } + + void do_fade() + { + SetSolid("none"); + FADE_COUNT = 200; + fade_loop(); + } + + void fade_loop() + { + FADE_COUNT -= 3; + string L_FADE = FADE_COUNT; + if (FADE_COUNT >= 0) + { + SetProp(GetOwner(), "renderamt", L_FADE); + } + if (FADE_COUNT <= 0) + { + ScheduleDelayedEvent(0.2, "remove_me"); + } + if (!(FADE_COUNT > 0)) return; + ScheduleDelayedEvent(0.1, "fade_loop"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/stone_trap.as b/scripts/angelscript/bloodrose/stone_trap.as new file mode 100644 index 00000000..93ad0b31 --- /dev/null +++ b/scripts/angelscript/bloodrose/stone_trap.as @@ -0,0 +1,153 @@ +#pragma context server + +namespace MS +{ + +class StoneTrap : CGameScript +{ + int DID_INTRO; + int GAVE_ANSWER; + int SKELS_ON; + int TRIGGER_RANGE; + + StoneTrap() + { + TRIGGER_RANGE = 256; + } + + void OnSpawn() override + { + SetRace("beloved"); + SetBloodType("none"); + SetModel("null.mdl"); + SetInvincible(true); + SetHealth(1); + SetFly(true); + SetWidth(32); + SetHeight(32); + SetSolid("none"); + SetHearingSensitivity(11); + ScheduleDelayedEvent(0.1, "scan_for_players"); + SetIdleAnim(""); + SetMoveAnim(""); + } + + void scan_for_players() + { + if ((DID_INTRO)) return; + ScheduleDelayedEvent(0.25, "scan_for_players"); + if (!(FindEntitiesInSphere("player", TRIGGER_RANGE) != "none")) return; + do_intro(); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((DID_INTRO)) return; + if (!(IsValidPlayer("ent_lastheard"))) return; + if (!(GetEntityRange("ent_lastheard") < TRIGGER_RANGE)) return; + do_intro(); + } + + void do_intro() + { + if ((DID_INTRO)) return; + DID_INTRO = 1; + SetName("The Skeletal Statue"); + SetSayTextRange(2048); + SayText("Identify yourself mortal! Only our masters may pass!"); + EmitSound(GetOwner(), 0, "monsters/stoners/identify.wav", 10); + CatchSpeech("say_smart", "slithar"); + CatchSpeech("say_dumb", "venevus"); + ScheduleDelayedEvent(30.0, "times_up"); + string OUT_SOUND = "monsters/stoners/identify.wav"; + CallExternal("all", "ext_playsound", OUT_SOUND, GetMonsterProperty("origin"), 1024); + } + + void say_dumb() + { + if ((SKELS_ON)) return; + if ((GAVE_ANSWER)) return; + SetSayTextRange(2048); + SayText("Venevus is already in his chamber! Imposter!"); + EmitSound(GetOwner(), 0, "monsters/stoners/alreadyin.wav", 10); + ScheduleDelayedEvent(3.0, "kill_intruder"); + ScheduleDelayedEvent(4.0, "clear_out"); + string OUT_SOUND = "monsters/stoners/alreadyin.wav"; + CallExternal("all", "ext_playsound", OUT_SOUND, GetMonsterProperty("origin"), 1024); + } + + void times_up() + { + if ((SKELS_ON)) return; + if ((GAVE_ANSWER)) return; + SetSayTextRange(2048); + EmitSound(GetOwner(), 0, "monsters/stoners/killtheintruder.wav", 10); + SayText("Your time has expired, and now, so shall you."); + ScheduleDelayedEvent(1.0, "kill_intruder"); + ScheduleDelayedEvent(2.0, "clear_out"); + string OUT_SOUND = "monsters/stoners/killtheintruder.wav"; + CallExternal("all", "ext_playsound", OUT_SOUND, GetMonsterProperty("origin"), 1024); + } + + void say_smart() + { + GAVE_ANSWER = 1; + UseTrigger("player_smart"); + EmitSound(GetOwner(), 0, "monsters/stoners/youmaypass.wav", 10); + SetSayTextRange(2048); + SayText("You may pass."); + ScheduleDelayedEvent(1.0, "clear_out"); + string OUT_SOUND = "monsters/stoners/youmaypass.wav"; + CallExternal("all", "ext_playsound", OUT_SOUND, GetMonsterProperty("origin"), 1024); + } + + void clear_out() + { + ScheduleDelayedEvent(0.1, "suicide_debug"); + SetInvincible(false); + SetRace("hated"); + ScheduleDelayedEvent(0.2, "clear_out2"); + } + + void clear_out2() + { + DoDamage(GetEntityIndex(GetOwner()), "direct", 1000, 1.0, GetEntityIndex(GetOwner())); + } + + void suicide_debug() + { + ScheduleDelayedEvent(2.0, "suicide_debug"); + } + + void kill_intruder() + { + if ((SKELS_ON)) return; + SKELS_ON = 1; + UseTrigger("player_dumb"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 256, 50, 3.0, 512); + EmitSound(GetOwner(), 0, "ambience/rocketrumble1.wav", 10); + ScheduleDelayedEvent(0.1, "rumble_sound2"); + ScheduleDelayedEvent(0.3, "wakie_wakie"); + } + + void rumble_sound2() + { + EmitSound(GetOwner(), 0, "ambience/rocket_groan1.wav", 10); + } + + void wakie_wakie() + { + EmitSound(GetOwner(), 0, "monsters/stoners/dieintruder.wav", 10); + ScheduleDelayedEvent(0.1, "wakie_wakie2"); + string OUT_SOUND = "monsters/stoners/dieintruder.wav"; + CallExternal("all", "ext_playsound", OUT_SOUND, GetMonsterProperty("origin"), 1024); + } + + void wakie_wakie2() + { + CallExternal("all", "skeleton_wakeup_call"); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/trigger_base.as b/scripts/angelscript/bloodrose/trigger_base.as new file mode 100644 index 00000000..5364e56c --- /dev/null +++ b/scripts/angelscript/bloodrose/trigger_base.as @@ -0,0 +1,166 @@ +#pragma context server + +#include "monsters/externals.as" + +namespace MS +{ + +class TriggerBase : CGameScript +{ + float HOME_DELAY; + string HOME_POS; + int IAM_ON; + int PLAYING_DEAD; + float RESET_DELAY; + int TAKE_IT; + string TRIGGER_STRING; + string TRIG_DELAY; + + TriggerBase() + { + HOME_DELAY = Random(10, 20); + RESET_DELAY = 30.0; + } + + void OnSpawn() override + { + SetNoPush(true); + SetHealth(1500); + TAKE_IT = 0; + SetName("Elemental Shard"); + SetRace("demon"); + SetModel("crystal.mdl"); + SetWidth(15); + SetHeight(60); + SetMoveSpeed(0.0); + SetBloodType("none"); + SetGravity(0); + SetFly(true); + TRIGGER_STRING = "toggle_"; + TRIGGER_STRING += ELEMENT_TYPE; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + ScheduleDelayedEvent(1.0, "get_origin"); + SetMoveAnim("spin"); + SetIdleAnim("spin"); + SetDamageResistance("all", 0.33); + SetDamageResistance("stun", 0); + PLAYING_DEAD = 1; + HOME_DELAY("reset_pos"); + glow_loop(); + trigger_spawn(); + } + + void glow_loop() + { + ScheduleDelayedEvent(5.3, "glow_loop"); + if (getCount > 0) + { + CallExternal("all", "npcatk_ally_alert", getEnt1, GetEntityIndex(GetOwner()), "crystal_alert"); + } + if (ELEMENT_TYPE == "lightning") + { + Effect("glow", GetOwner(), Vector3(255, 255, 0), 128, 10, 10); + } + if (ELEMENT_TYPE == "cold") + { + Effect("glow", GetOwner(), Vector3(4, 50, 128), 128, 10, 10); + } + if (ELEMENT_TYPE == "fire") + { + Effect("glow", GetOwner(), Vector3(255, 0, 0), 128, 10, 10); + } + if (ELEMENT_TYPE == "poison") + { + Effect("glow", GetOwner(), Vector3(0, 255, 0), 128, 10, 10); + } + } + + void get_origin() + { + HOME_POS = GetMonsterProperty("origin"); + } + + void reset_pos() + { + SetEntityOrigin(GetOwner(), HOME_POS); + ScheduleDelayedEvent(11.0, "reset_pos"); + } + + void OnDamage(int damage) override + { + if (GetMonsterHP() < GetMonsterMaxHP()) + { + string DIFF = GetMonsterMaxHP(); + DIFF -= GetMonsterHP(); + HealEntity(GetOwner(), DIFF); + } + SetEntityOrigin(GetOwner(), HOME_POS); + string DMG_TYPE = param3; + SetDamage("dmg"); + check_damage_type(DMG_TYPE); + } + + void check_damage_type() + { + int L_DAMAGED = 0; + if ((ELEMENT_TYPE).findFirst(param1) >= 0) + { + int L_DAMAGED = 1; + } + if ((param1).findFirst("acid") >= 0) + { + if ((ELEMENT_TYPE).findFirst("poison") >= 0) + { + int L_DAMAGED = 1; + } + } + if (!(L_DAMAGED)) return; + if (!(TRIG_DELAY)) + { + TRIG_DELAY = 1; + } + element_on(); + } + + void trig_reset() + { + IAM_ON = 0; + SetEntityOrigin(GetOwner(), HOME_POS); + TRIG_DELAY = 0; + string MON_NAME = FindEntityByName("ele_monitor"); + string MON_ID = GetEntityIndex(MON_NAME); + if (!(TRIG_DELAY)) + { + CallExternal(MON_ID, "trigger_off", ELEMENT_TYPE); + } + UseTrigger(TRIGGER_STRING); + } + + void element_trigs_remove() + { + DeleteEntity(GetOwner()); + } + + void element_on() + { + if ((IAM_ON)) return; + IAM_ON = 1; + string MON_ID = FindEntityByName("ele_monitor"); + CallExternal(MON_ID, "trigger_on", ELEMENT_TYPE); + UseTrigger(TRIGGER_STRING); + } + + void effect_damage() + { + check_damage_type(param4); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SendInfoMsg("all", OMFG_WTF + " MAJOR MAP ERROR - AN A ELEMENTAL CRYSTAL DIED! WTF!?"); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/trigger_cold.as b/scripts/angelscript/bloodrose/trigger_cold.as new file mode 100644 index 00000000..f390aa64 --- /dev/null +++ b/scripts/angelscript/bloodrose/trigger_cold.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "bloodrose/trigger_base.as" + +namespace MS +{ + +class TriggerCold : CGameScript +{ + string ELEMENT_TYPE; + int TRIG_DELAY; + + TriggerCold() + { + SetGlobalVar("COLD_TRIG", 0); + ELEMENT_TYPE = "cold"; + } + + void trigger_spawn() + { + SetName("Elemental Shard of Ice"); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("slash", 0.0); + SetDamageResistance("blunt", 0.0); + SetDamageResistance("pierce", 0.0); + SetDamageResistance("holy", 0.0); + } + + void freeze_solid() + { + TRIG_DELAY = 1; + SetGlobalVar("COLD_TRIG", 1); + RESET_DELAY("trig_reset"); + UseTrigger(TRIGGER_STRING); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/trigger_fire.as b/scripts/angelscript/bloodrose/trigger_fire.as new file mode 100644 index 00000000..72ffffb3 --- /dev/null +++ b/scripts/angelscript/bloodrose/trigger_fire.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "bloodrose/trigger_base.as" + +namespace MS +{ + +class TriggerFire : CGameScript +{ + string ELEMENT_TYPE; + + TriggerFire() + { + SetGlobalVar("FIRE_TRIG", 0); + ELEMENT_TYPE = "fire"; + } + + void trigger_spawn() + { + SetName("Elemental Shard of Fire"); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("fire", 1.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("slash", 0.0); + SetDamageResistance("blunt", 0.0); + SetDamageResistance("pierce", 0.0); + SetDamageResistance("holy", 0.0); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/trigger_lightning.as b/scripts/angelscript/bloodrose/trigger_lightning.as new file mode 100644 index 00000000..c3460bd1 --- /dev/null +++ b/scripts/angelscript/bloodrose/trigger_lightning.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "bloodrose/trigger_base.as" + +namespace MS +{ + +class TriggerLightning : CGameScript +{ + string ELEMENT_TYPE; + int MAX_HP; + float RESET_DELAY; + + TriggerLightning() + { + SetGlobalVar("LIGHTNING_TRIG", 0); + MAX_HP = 9999; + ELEMENT_TYPE = "lightning"; + RESET_DELAY = 20.0; + } + + void trigger_spawn() + { + SetName("Elemental Shard of Lightning"); + SetDamageResistance("lightning", 1.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("slash", 0.0); + SetDamageResistance("blunt", 0.0); + SetDamageResistance("pierce", 0.0); + SetDamageResistance("holy", 0.0); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/trigger_monitor.as b/scripts/angelscript/bloodrose/trigger_monitor.as new file mode 100644 index 00000000..f6bccf31 --- /dev/null +++ b/scripts/angelscript/bloodrose/trigger_monitor.as @@ -0,0 +1,96 @@ +#pragma context server + +namespace MS +{ + +class TriggerMonitor : CGameScript +{ + string ATHOLO_ID; + string COLD_ON; + string FIRE_ON; + string LIGHTNING_ON; + string MON_DONE; + string POISON_ON; + + TriggerMonitor() + { + SetGlobalVar("COLD_TRIG", 0); + SetGlobalVar("FIRE_TRIG", 0); + SetGlobalVar("LIGHTNING_TRIG", 0); + SetGlobalVar("POISON_TRIG", 0); + } + + void OnSpawn() override + { + SetName("ele_monitor"); + SetModel("null.mdl"); + SetInvincible(true); + SetFly(true); + SetRoam(false); + SetMoveSpeed(0.0); + SetRace("beloved"); + ScheduleDelayedEvent(1.0, "monitor_triggers"); + } + + void monitor_triggers() + { + int FOUR_TRIGS = 0; + FOUR_TRIGS += COLD_ON; + FOUR_TRIGS += FIRE_ON; + FOUR_TRIGS += POISON_ON; + FOUR_TRIGS += LIGHTNING_ON; + if (FOUR_TRIGS == 4) + { + ATHOLO_ID = FindEntityByName("boss_atholo"); + CallExternal(ATHOLO_ID, "vulnerable"); + UseTrigger("monitor_triggered"); + CallExternal("all", "element_trigs_remove"); + MON_DONE = 1; + } + if ((MON_DONE)) return; + ScheduleDelayedEvent(0.5, "monitor_triggers"); + } + + void trigger_on() + { + if (param1 == "cold") + { + COLD_ON = 1; + } + if (param1 == "fire") + { + FIRE_ON = 1; + } + if (param1 == "poison") + { + POISON_ON = 1; + } + if (param1 == "lightning") + { + LIGHTNING_ON = 1; + } + } + + void trigger_off() + { + if (param1 == "cold") + { + COLD_ON = 0; + } + if (param1 == "fire") + { + FIRE_ON = 0; + } + if (param1 == "poison") + { + POISON_ON = 0; + } + if (param1 == "lightning") + { + LIGHTNING_ON = 0; + } + } + +} + +} diff --git a/scripts/angelscript/bloodrose/trigger_poison.as b/scripts/angelscript/bloodrose/trigger_poison.as new file mode 100644 index 00000000..241ffd16 --- /dev/null +++ b/scripts/angelscript/bloodrose/trigger_poison.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "bloodrose/trigger_base.as" + +namespace MS +{ + +class TriggerPoison : CGameScript +{ + string ELEMENT_TYPE; + + TriggerPoison() + { + SetGlobalVar("POISON_TRIG", 0); + ELEMENT_TYPE = "poison"; + } + + void trigger_spawn() + { + SetName("Elemental Shard of Affliction"); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 1.0); + SetDamageResistance("acid", 1.0); + SetDamageResistance("slash", 0.0); + SetDamageResistance("blunt", 0.0); + SetDamageResistance("pierce", 0.0); + SetDamageResistance("holy", 0.0); + } + +} + +} diff --git a/scripts/angelscript/bloodrose/venevus.as b/scripts/angelscript/bloodrose/venevus.as new file mode 100644 index 00000000..fc8f1657 --- /dev/null +++ b/scripts/angelscript/bloodrose/venevus.as @@ -0,0 +1,862 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class Venevus : CGameScript +{ + int ACID_BOLT_DAMAGE; + int ACTIVE_VOLCANO; + int AIM_RATIO; + string ANIM_CAST; + string ANIM_DEAD; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string BEAM_ID; + int BEING_SPLOITED_DMG; + int BEING_SPLOITED_THRESHOLD; + int BOLT_DELAY; + int CASTING_SPELL_DELAY; + int CHANGE_RETURN_POINT; + int CKN_MY_OLD_POS; + string DID_ALE_INTRO; + int DMG_VOLCANO; + string DO_ACID_BOLTS; + string DO_DAMAGE_SITE; + string DO_HOLY_MSG; + string DO_LIGHTNING; + string FIRE_AT; + string HOLY_OFFENDER; + int IR_DEADSKI; + int IS_UNHOLY; + int I_AM_TURNABLE; + int KILLED_A_PLAYER; + string LAST_STUCK_CHECK_POS; + int LIGHTNING_BOLT_DAMAGE; + string LIGHTNING_SPRITE; + int MAX_RANGE; + string MAX_TELE_RANGE; + string MONSTER_MODEL; + string MOVE_LASTPOS; + string MURDER_A_PLAYER; + string NEXT_SPELL; + int NO_STUCK_CHECKS; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + string NPC_SPAWN_LOC; + int OFFSET_FIRE; + int OFFSET_ICE; + int OFFSET_LIGHTNING; + int OFFSET_POISON; + string OUTSPELL; + string OUT_SPELL; + float POISON_ALL_FREQ; + float POISON_CLOUD_DAMAGE; + string POISON_CLOUD_DURATION; + int POISON_EM; + string POISON_SITE; + string PRESET_TARGET; + int SHOCK_DAMAGE; + int SHOCK_DURATION; + float SNOWBALL_DURATION; + string SOUND_ACID_CHARGE; + string SOUND_BOOM; + string SOUND_FIRE_WALL; + string SOUND_ICEBLAST; + string SOUND_LAUGH; + string SOUND_POWERUP; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_SNOWBALL; + string SOUND_STEAM; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_THROW; + float SPELL_FREQ; + int SPELL_SELECT; + string SPELL_TARGET; + int SPLOITED_CHECKED; + string SPOTTING; + string STATUE_ID; + string STRUCK_BY_HOLY; + int TELED_OUT; + string THIS_MUST_DIE; + int THROW_CHANCE; + + Venevus() + { + IS_UNHOLY = 1; + if (StringToLower(GetMapName()) == "bloodrose") + { + NPC_GIVE_EXP = 3000; + NPC_IS_BOSS = 1; + } + else + { + if (StringToLower(GetMapName()) == "aleyesu") + { + NPC_GIVE_EXP = 5000; + NPC_IS_BOSS = 1; + } + else + { + NPC_GIVE_EXP = 1000; + } + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 0.5; + MAX_RANGE = 2048; + ANIM_CAST = "castspell"; + ANIM_RUN = "walk"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + ANIM_DEATH = "castspell"; + ANIM_DEAD = "lying_on_stomach"; + SNOWBALL_DURATION = 10.0; + SPELL_FREQ = 6.0; + POISON_ALL_FREQ = 200.0; + SOUND_LAUGH = "monsters/skeleton/cal_laugh.wav"; + SOUND_POWERUP = "ambience/particle_suck2.wav"; + SOUND_STEAM = "ambience/steamburst1.wav"; + SOUND_BOOM = "ambience/flameburst1.wav"; + SOUND_ACID_CHARGE = "bullchicken/bc_attack1.wav"; + SOUND_STRUCK1 = "zombie/zo_pain2.wav"; + SOUND_STRUCK2 = "zombie/zo_pain2.wav"; + SOUND_STRUCK3 = "zombie/zo_pain2.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + SOUND_SNOWBALL = "zombie/claw_miss1.wav"; + SOUND_ICEBLAST = "magic/temple.wav"; + SOUND_THROW = "debris/beamstart5.wav"; + SOUND_FIRE_WALL = "magic/fireball_strike.wav"; + POISON_CLOUD_DAMAGE = 40.0; + POISON_CLOUD_DURATION = SPELL_FREQ; + AIM_RATIO = 50; + OFFSET_LIGHTNING = 100; + OFFSET_POISON = 100; + OFFSET_ICE = 100; + OFFSET_FIRE = 100; + ACID_BOLT_DAMAGE = 600; + LIGHTNING_BOLT_DAMAGE = 40; + SHOCK_DAMAGE = 30; + SHOCK_DURATION = 1; + NO_STUCK_CHECKS = 1; + BEING_SPLOITED_THRESHOLD = 500; + I_AM_TURNABLE = 0; + MONSTER_MODEL = "monsters/venevus.mdl"; + LIGHTNING_SPRITE = "lgtning.spr"; + Precache(MONSTER_MODEL); + Precache(LIGHTNING_SPRITE); + } + + void OnSpawn() override + { + if (!(AM_GENERIC)) + { + SetName("Venevus , the Corruptor"); + } + if ((AM_GENERIC)) + { + SetName("Evil Necromancer"); + } + SetHealth(3000); + SetFOV(359); + SetWidth(40); + SetHeight(80); + SetRoam(false); + SetRace("demon"); + Precache(MONSTER_MODEL); + SetModel(MONSTER_MODEL); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetGold(200); + SetDamageResistance("all", 0.4); + SetDamageResistance("slash", 0.0); + SetDamageResistance("pierce", 0.0); + SetDamageResistance("blunt", 0.0); + SetDamageResistance("fire", 0.25); + SetDamageResistance("holy", 2.0); + SetDamageResistance("dark", 0.5); + SetDamageResistance("acid", 0.25); + SetDamageResistance("poison", 0); + SetDamageResistance("lightning", 1.2); + SPELL_SELECT = 0; + THROW_CHANCE = 0; + ScheduleDelayedEvent(1.1, "post_spawn_props"); + if (!(AM_GENERIC)) + { + scan_for_intro(); + } + if ((AM_GENERIC)) + { + ScheduleDelayedEvent(0.1, "pre_mortal_kombat"); + } + if (!(AM_GENERIC)) + { + SetInvincible(true); + } + ScheduleDelayedEvent(0.1, "init_beam"); + ACTIVE_VOLCANO = 0; + DMG_VOLCANO = 50; + } + + void post_spawn_props() + { + SetDamageResistance("holy", 2.0); + NPC_SPAWN_LOC = GetMonsterProperty("origin"); + LAST_STUCK_CHECK_POS = GetMonsterProperty("origin"); + if ((StringToLower(GetMapName())).findFirst("aleyesu") >= 0) + { + MAX_TELE_RANGE = 768; + } + else + { + MAX_TELE_RANGE = 2048; + } + } + + void scan_for_intro() + { + if ((CanSee("enemy", 600))) + { + SetSayTextRange(2048); + SetMoveDest(m_hLastSeen); + SayText("My my, so you've shown your faces after all..."); + ScheduleDelayedEvent(3.0, "pre_mortal_kombat"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ScheduleDelayedEvent(0.5, "scan_for_intro"); + } + + void pre_mortal_kombat() + { + SetSayTextRange(2048); + if (!(AM_GENERIC)) + { + SayText("And here I took you for cowards... But obviously..."); + } + ScheduleDelayedEvent(3.0, "let_mortal_kombat_begin"); + ScheduleDelayedEvent(2.0, "green_blast"); + } + + void let_mortal_kombat_begin() + { + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + SetSayTextRange(2048); + if (!(AM_GENERIC)) + { + SayText("...You are simply FOOLS!"); + } + SetInvincible(false); + SetRoam(true); + ScheduleDelayedEvent(5.0, "select_random_spell"); + ScheduleDelayedEvent(10.0, "stuck_checks"); + } + + void green_blast() + { + PlayAnim("critical", ANIM_CAST); + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + OUT_SPELL = "poison_all"; + Effect("glow", GetOwner(), Vector3(0, 255, 0), 100, 5, 5); + POISON_ALL_FREQ("poison_all_again"); + } + + void poison_all_again() + { + POISON_EM = 1; + } + + void select_random_spell() + { + SPELL_SELECT += 1; + if (SPELL_SELECT > 7) + { + SPELL_SELECT = 1; + } + if (SPELL_SELECT == 1) + { + NEXT_SPELL = "poison_cloud"; + } + if (SPELL_SELECT == 2) + { + NEXT_SPELL = "chain_lightning"; + } + if (SPELL_SELECT == 3) + { + NEXT_SPELL = "fire_wall"; + } + if (SPELL_SELECT == 4) + { + NEXT_SPELL = "snow_ball"; + } + if (SPELL_SELECT == 5) + { + NEXT_SPELL = "freezing_sphere"; + } + if (SPELL_SELECT == 6) + { + NEXT_SPELL = "acid_bolt"; + } + if (SPELL_SELECT == 7) + { + NEXT_SPELL = "volcano"; + } + if (POISON_EM == 1) + { + NEXT_SPELL = "poison_all"; + } + SPELL_FREQ("select_random_spell"); + SPELL_FREQ("setup_spell"); + } + + void setup_spell() + { + if ((IR_DEADSKI)) return; + if ((TELED_OUT)) return; + CASTING_SPELL_DELAY = 1; + CKN_MY_OLD_POS = 0; + if (NEXT_SPELL == "poison_all") + { + green_blast(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + OUT_SPELL = NEXT_SPELL; + PlayAnim("critical", ANIM_CAST); + if ((false)) + { + SPELL_TARGET = GetEntityIndex(m_hLastSeen); + SetMoveDest(SPELL_TARGET); + } + if (OUT_SPELL == "poison_cloud") + { + Effect("glow", GetOwner(), Vector3(0, 255, 0), 100, 5, 5); + SpawnNPC("monsters/companion/spell_maker_affliction", /* TODO: $relpos */ $relpos(0, 0, 40), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "none", "none", OFFSET_POISON + } + if (OUT_SPELL == "volcano") + { + Effect("glow", GetOwner(), Vector3(255, 0, 0), 256, 5, 5); + SpawnNPC("monsters/companion/spell_maker_fire", /* TODO: $relpos */ $relpos(0, 0, 40), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "none", "none", OFFSET_FIRE + } + if (OUT_SPELL == "fire_wall") + { + Effect("glow", GetOwner(), Vector3(255, 80, 80), 100, 5, 5); + SpawnNPC("monsters/companion/spell_maker_fire", /* TODO: $relpos */ $relpos(0, 0, 40), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "none", "none", OFFSET_FIRE + } + if (OUT_SPELL == "snow_ball") + { + Effect("glow", GetOwner(), Vector3(80, 80, 255), 100, 5, 5); + SpawnNPC("monsters/companion/spell_maker_ice", /* TODO: $relpos */ $relpos(0, 0, 40), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "none", "none", OFFSET_ICE + } + if (OUT_SPELL == "freezing_sphere") + { + Effect("glow", GetOwner(), Vector3(128, 128, 255), 512, 5, 5); + SpawnNPC("monsters/companion/spell_maker_ice", /* TODO: $relpos */ $relpos(0, 0, 40), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "none", "none", OFFSET_ICE + } + if (OUT_SPELL == "acid_bolt") + { + Effect("glow", GetOwner(), Vector3(0, 255, 0), 200, 5, 5); + EmitSound(GetOwner(), 0, SOUND_ACID_CHARGE, 10); + } + if (OUT_SPELL == "chain_lightning") + { + Effect("glow", GetOwner(), Vector3(255, 255, 0), 200, 5, 5); + SpawnNPC("monsters/companion/spell_maker_lightning", /* TODO: $relpos */ $relpos(0, 0, 40), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "none", "none", OFFSET_LIGHTNING + } + if (OUT_SPELL == "kill") + { + Effect("glow", GetOwner(), Vector3(255, 255, 255), 200, 5, 5); + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + } + } + + void castspell() + { + if (!(DID_ALE_INTRO)) + { + DID_ALE_INTRO = 1; + if ((StringToLower(GetMapName())).findFirst("aleyesu") >= 0) + { + } + do_ale_intro(); + } + if ((IR_DEADSKI)) return; + SetMoveDest(SPELL_TARGET); + if (OUT_SPELL == "poison_all") + { + EmitSound(GetOwner(), 0, SOUND_BOOM, 10); + Effect("screenfade", "all", 3, 1, Vector3(0, 255, 0), 255, "fadein"); + FIRE_AT = "unset"; + POISON_SITE = 1; + SPOTTING = 1; + DO_DAMAGE_SITE = 1; + spot_targets(); + ScheduleDelayedEvent(1.0, "stop_spotting"); + ScheduleDelayedEvent(1.0, "reset_poison_site"); + POISON_EM = 0; + } + if (OUT_SPELL == "kill") + { + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + Effect("screenfade", "all", 3, 1, Vector3(255, 255, 255), 255, "fadein"); + ScheduleDelayedEvent(0.1, "kill_a_player"); + } + if (OUT_SPELL == "poison_cloud") + { + if ((false)) + { + string SPELL_TARG = GetEntityOrigin(m_hLastSeen); + } + if (GetRelationship(m_hLastSeen) == "enemy") + { + string NME_POS = "get"; + float NME_DIST = Distance(NME_POS, GetMonsterProperty("origin")); + if (NME_DIST < MAX_RANGE) + { + string SPELL_TARG = GetEntityOrigin(m_hLastSeen); + } + if (NME_DIST > MAX_RANGE) + { + string SPELL_TARG = /* TODO: $relpos */ $relpos(0, 200, 0); + } + } + if (SPELL_TARG == "SPELL_TARG") + { + string SPELL_TARG = /* TODO: $relpos */ $relpos(0, 10, 50); + } + EmitSound(GetOwner(), 0, SOUND_STEAM, 10); + SpawnNPC("monsters/summon/npc_poison_cloud2", SPELL_TARG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), POISON_CLOUD_DAMAGE, POISON_CLOUD_DURATION + } + if (OUT_SPELL == "snow_ball") + { + if ((false)) + { + string SPELL_TARG = GetEntityOrigin(m_hLastSeen); + } + if (SPELL_TARG == "SPELL_TARG") + { + string SPELL_TARG = /* TODO: $relpos */ $relpos(0, 640, 0); + } + float AIM_ANGLE = Distance(GetMonsterProperty("origin"), SPELL_TARG); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + EmitSound(GetOwner(), 0, SOUND_SNOWBALL, 10); + TossProjectile("proj_snow_ball", /* TODO: $relpos */ $relpos(0, 52, 8), SPELL_TARG, 300, SNOWBALL_DAMAGE, 2, "none"); + } + if (OUT_SPELL == "freezing_sphere") + { + string BALL_DEST = /* TODO: $relpos */ $relpos(0, 2000, 0); + EmitSound(GetOwner(), 0, SOUND_ICEBLAST, 10); + SpawnNPC("monsters/summon/ice_blast", /* TODO: $relpos */ $relpos(0, 64, 32), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 10.0, BALL_DEST + } + if (OUT_SPELL == "volcano") + { + if ((false)) + { + string pos = GetEntityOrigin(m_hLastSeen); + } + if (GetRelationship(m_hLastSeen) == "enemy") + { + string pos = GetEntityOrigin(m_hLastSeen); + } + if (!(false)) + { + if (Distance(GetMonsterProperty("origin"), pos) > MAX_RANGE) + { + } + Vector3 pos = Vector3(0, 0, 0); + pos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 500, 0)); + string pos = TraceLine(GetMonsterProperty("origin"), pos); + } + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + SetGlobalVar("VOLCANO_DMG", 2); + string VOLCANO_DURATION = SPELL_FREQ; + VOLCANO_DURATION *= 6; + SpawnNPC("monsters/summon/npc_volcano", pos, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 150, VOLCANO_DURATION + ACTIVE_VOLCANO += 1; + VOLCANO_DURATION("reset_active_volcano"); + } + if (OUT_SPELL == "fire_wall") + { + if ((false)) + { + string pos = GetEntityOrigin(m_hLastSeen); + } + if (GetRelationship(m_hLastSeen) == "enemy") + { + string pos = GetEntityOrigin(m_hLastSeen); + } + if (!(false)) + { + if (Distance(pos, GetMonsterProperty("origin")) > MAX_RANGE) + { + } + string pos = /* TODO: $relpos */ $relpos(0, 256, 0); + } + EmitSound(GetOwner(), 0, SOUND_FIRE_WALL, 10); + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + int SET_DAMAGE = 80; + string SET_DURATION = SPELL_FREQ; + SpawnNPC("monsters/summon/keledros_fire_wall", pos, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), SET_DAMAGE, SET_DURATION + } + if (OUT_SPELL == "acid_bolt") + { + FIRE_AT = "unset"; + DO_ACID_BOLTS = 1; + SPOTTING = 1; + DO_DAMAGE_SITE = 0; + spot_targets(); + ScheduleDelayedEvent(2.0, "stop_spotting"); + ScheduleDelayedEvent(2.0, "reset_acid_bolt"); + } + if (OUT_SPELL == "chain_lightning") + { + FIRE_AT = "unset"; + DO_LIGHTNING = 1; + SPOTTING = 1; + DO_DAMAGE_SITE = 0; + spot_targets(); + Effect("beam", "update", BEAM_ID, "brightness", 150); + ScheduleDelayedEvent(3.0, "stop_spotting"); + ScheduleDelayedEvent(3.0, "reset_lightning"); + } + CASTING_SPELL_DELAY = 0; + OUTSPELL = "unset"; + } + + void reset_lightning() + { + DO_LIGHTNING = 0; + Effect("beam", "update", BEAM_ID, "brightness", 0); + Effect("beam", "update", BEAM_ID, "end_target", GetOwner(), 2); + } + + void reset_acid_bolt() + { + DO_ACID_BOLTS = 0; + } + + void stop_spotting() + { + SPOTTING = 0; + } + + void reset_poison_site() + { + POISON_SITE = 0; + } + + void spot_targets() + { + if (!(SPOTTING)) return; + ScheduleDelayedEvent(0.1, "spot_targets"); + DO_DAMAGE_SITE += 1; + if (DO_DAMAGE_SITE > 10) + { + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 2048, 0, 1.0, 0); + } + if (!(false)) return; + string OLD_FIRE_AT = FIRE_AT; + FIRE_AT = GetEntityIndex(m_hLastSeen); + if ((DO_ACID_BOLTS)) + { + throw_acid_bolt(); + } + if ((DO_LIGHTNING)) + { + throw_lightning(); + if (OLD_FIRE_AT != FIRE_AT) + { + } + LogDebug("spot_targets beam [ BEAM_ID ] @ GetEntityName(FIRE_AT)"); + Effect("beam", "update", BEAM_ID, "end_target", GetEntityIndex(FIRE_AT), 1); + Effect("beam", "update", BEAM_ID, "brightness", 255); + } + if ((POISON_SITE)) + { + ApplyEffect(FIRE_AT, "effects/dot_poison", 90.0, GetEntityIndex(GetOwner()), 1.0); + } + } + + void throw_lightning() + { + if ((BOLT_DELAY)) return; + BOLT_DELAY = 1; + ScheduleDelayedEvent(0.1, "reset_bolt_delay"); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + string BEAM_END = GetEntityOrigin(FIRE_AT); + if (!(/* TODO: $get_takedmg */ $get_takedmg(FIRE_AT, "lightning") != 0)) return; + DoDamage(FIRE_AT, "direct", LIGHTNING_BOLT_DAMAGE, 1.0, GetOwner()); + if ((GetEntityProperty(FIRE_AT, "haseffect"))) return; + ApplyEffect(FIRE_AT, "effects/dot_lightning", SHOCK_DURATION, GetEntityIndex(GetOwner()), SHOCK_DAMAGE); + } + + void throw_acid_bolt() + { + if ((BOLT_DELAY)) return; + BOLT_DELAY = 1; + ScheduleDelayedEvent(0.2, "reset_bolt_delay"); + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 10, 10), GetEntityIndex(FIRE_AT), 300, ACID_BOLT_DAMAGE, 1, "none"); + } + + void reset_bolt_delay() + { + BOLT_DELAY = 0; + } + + void game_dodamage() + { + if ((POISON_SITE)) + { + ApplyEffect(param2, "effects/dot_poison", 90.0, GetEntityIndex(GetOwner()), 1.0); + } + if ((DO_ACID_BOLTS)) + { + string CHECK_TARG = GetEntityIndex(param2); + FIRE_AT = CHECK_TARG; + throw_acid_bolt(); + } + if ((DO_LIGHTNING)) + { + string CHECK_TARG = GetEntityIndex(param2); + FIRE_AT = CHECK_TARG; + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + Effect("beam", "update", BEAM_ID, "remove", 0); + if ((AM_GENERIC)) + { + SetAnimFrameRate(0.1); + PlayAnim("critical", "dieforward"); + EmitSound(GetOwner(), 0, "x/x_die1.wav", 10); + } + if ((AM_GENERIC)) return; + IR_DEADSKI = 1; + SetAlive(1); + SetInvincible(true); + SetSolid("none"); + SetIdleAnim(ANIM_CAST); + SetMoveAnim(ANIM_CAST); + SetFly(true); + STATUE_ID = FindEntityByName("atholo_statue"); + Effect("glow", GetEntityIndex(STATUE_ID), Vector3(255, 0, 0), 255, 5, 5); + SetProp(GetOwner(), "solid", 0); + SetProp(GetOwner(), "movetype", "const.movetype.noclip"); + SetAnimMoveSpeed(200); + SetMoveDest(GetEntityIndex(STATUE_ID)); + SetSayTextRange(2048); + SayText("I sacrifice my wretched life to release the greatest evil in this world..."); + MOVE_LASTPOS = GetMonsterProperty("origin"); + ScheduleDelayedEvent(0.1, "cycle_move"); + ScheduleDelayedEvent(6.0, "game_over"); + } + + void cycle_move() + { + SetMoveDest(GetEntityIndex(STATUE_ID)); + SetAnimMoveSpeed(200); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(-1, 100, 40)); + ScheduleDelayedEvent(0.2, "cycle_move"); + } + + void game_over() + { + SetSayTextRange(2048); + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + CallExternal(STATUE_ID, "spawn_atholo", GetEntityIndex(m_hLastStruck)); + SayText("With my blood I bring you the legendary evil! ATHOLO!"); + UseTrigger("atholo_door"); + SetAlive(0); + DeleteEntity(GetOwner(), true); // fade out + } + + void reset_active_volcano() + { + ACTIVE_VOLCANO -= 1; + } + + void OnDamage(int damage) override + { + if (!(GetRelationship(param1) == "enemy")) return; + string INC_DMG = param2; + BEING_SPLOITED_DMG += INC_DMG; + INC_DMG *= 0.15; + THROW_CHANCE += INC_DMG; + if (GetMonsterHP() < 500) + { + if (KILLED_A_PLAYER == 0) + { + MURDER_A_PLAYER = 1; + } + } + if (param3 == "holy") + { + int DID_THROW = 1; + SetMoveDest(m_hLastStruck); + EmitSound(GetOwner(), 0, SOUND_THROW, 10); + AddVelocity(m_hLastStruck, /* TODO: $relvel */ $relvel(0, 500, 200)); + THROW_CHANCE = 0; + if (INC_DMG > 200) + { + } + STRUCK_BY_HOLY += 1; + if (STRUCK_BY_HOLY > 2) + { + } + STRUCK_BY_HOLY = 0; + DO_HOLY_MSG = 1; + MURDER_A_PLAYER = 1; + PRESET_TARGET = 1; + HOLY_OFFENDER = GetEntityIndex(m_hLastStruck); + } + if (RandomInt(1, 100) <= THROW_CHANCE) + { + if (!(DID_THROW)) + { + } + if (GetEntityRange(m_hLastStruck) < 200) + { + } + SetMoveDest(m_hLastStruck); + EmitSound(GetOwner(), 0, SOUND_THROW, 10); + AddVelocity(m_hLastStruck, /* TODO: $relvel */ $relvel(0, 500, 200)); + THROW_CHANCE = 0; + } + if ((SPLOITED_CHECKED)) return; + SPLOITED_CHECKED = 1; + ScheduleDelayedEvent(5.0, "check_if_sploited"); + } + + void check_if_sploited() + { + if (BEING_SPLOITED_DMG > BEING_SPLOITED_THRESHOLD) + { + MURDER_A_PLAYER = 1; + } + BEING_SPLOITED_DMG = 0; + SPLOITED_CHECKED = 0; + } + + void kill_a_player() + { + TELED_OUT = 1; + KILLED_A_PLAYER = 1; + EmitSound(GetOwner(), 0, SOUND_BOOM, 10); + SayText("Oh me oh my , where did he go..."); + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + if (!(PRESET_TARGET)) + { + THIS_MUST_DIE = GetEntityIndex(m_hLastStruck); + } + if ((PRESET_TARGET)) + { + THIS_MUST_DIE = HOLY_OFFENDER; + PRESET_TARGET = 0; + } + CHANGE_RETURN_POINT = 0; + ScheduleDelayedEvent(8.0, "murder_return"); + scan_for_death(); + } + + void scan_for_death() + { + if (!(TELED_OUT)) return; + if (!(IsEntityAlive(THIS_MUST_DIE))) + { + CHANGE_RETURN_POINT = 1; + } + string KILL_TARG_ORIGIN = GetEntityOrigin(THIS_MUST_DIE); + if (Distance(KILL_TARG_ORIGIN, NPC_SPAWN_LOC) > MAX_TELE_RANGE) + { + CHANGE_RETURN_POINT = 1; + } + if ((CHANGE_RETURN_POINT)) return; + ScheduleDelayedEvent(0.1, "scan_for_death"); + } + + void murder_return() + { + TELED_OUT = 0; + MURDER_A_PLAYER = 0; + SPELL_SELECT = 0; + if ((DO_HOLY_MSG)) + { + DO_HOLY_MSG = 0; + SendInfoMsg("all", BEWARE! + " Venevus uses death magic to counter holy magic!"); + } + EmitSound(GetOwner(), 0, SOUND_BOOM, 10); + Effect("screenfade", "all", 3, 1, Vector3(255, 255, 255), 255, "fadein"); + string RETURN_POINT = GetEntityOrigin(THIS_MUST_DIE); + if ((CHANGE_RETURN_POINT)) + { + string RETURN_POINT = NPC_SPAWN_LOC; + } + if (!(CHANGE_RETURN_POINT)) + { + ScheduleDelayedEvent(0.1, "kill_target"); + } + SetEntityOrigin(GetOwner(), RETURN_POINT); + ScheduleDelayedEvent(0.2, "murder_done"); + } + + void murder_done() + { + SetSayTextRange(2048); + SayText("Who's next?"); + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + } + + void kill_target() + { + string TARGET_ORG = GetEntityOrigin(THIS_MUST_DIE); + if (!(Distance(GetMonsterProperty("origin"), TARGET_ORG) < 100)) return; + if (!(IsEntityAlive(THIS_MUST_DIE))) return; + DoDamage(THIS_MUST_DIE, "direct", 10000, 1.0, GetOwner()); + ScheduleDelayedEvent(0.11, "kill_target"); + } + + void stuck_checks() + { + if (Distance(GetMonsterProperty("origin"), LAST_STUCK_CHECK_POS) == 0) + { + MURDER_A_PLAYER = 1; + } + LAST_STUCK_CHECK_POS = GetMonsterProperty("origin"); + ScheduleDelayedEvent(25.0, "stuck_checks"); + } + + void init_beam() + { + Effect("beam", "ents", LIGHTNING_SPRITE, 80, GetOwner(), 1, GetOwner(), 2, Vector3(255, 255, 255), 0, 50, -1); + BEAM_ID = GetEntityIndex(m_hLastCreated); + } + + void die_fast() + { + SetHealth(10); + } + +} + +} diff --git a/scripts/angelscript/bloodshrine/base_sorc_friendly.as b/scripts/angelscript/bloodshrine/base_sorc_friendly.as new file mode 100644 index 00000000..95f15dcf --- /dev/null +++ b/scripts/angelscript/bloodshrine/base_sorc_friendly.as @@ -0,0 +1,497 @@ +#pragma context server + +namespace MS +{ + +class BaseSorcFriendly : CGameScript +{ + string AM_HUMILIATED; + int BFSORC_DID_TELE; + string BFSORC_GOING_TELE; + int BFSORC_MOVE_TELE; + float CYCLE_TIME; + int FOLLOW_PLR_DIST; + string FOLLOW_PLR_ID; + string FPLAYER_LIST; + int FSORC_DMG_POINTS; + int FSORC_DMG_REQ; + string FSORC_HIT_BY_BOSS; + int FSORC_ON; + float FSORC_TELE_HOME_DELAY; + string FWD_JUMP_STR; + int F_AS_UNSTUCK_ANG; + int F_STUCK_COUNT; + string NEXT_FAS_CHECK; + string NEXT_FOLLOW_CHECK; + string NEXT_REGEN; + string NEXT_SORCJUMP; + string NEXT_TEAM_ALERT; + int NO_STUCK_CHECKS; + string NPCATK_TARGET; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_BATTLE_ALLY; + int NPC_FIGHTS_NPCS; + int NPC_NO_PLAYER_DMG; + string OLD_DIST; + int REWARD_MODE; + string SBOSS_ID; + string SBOSS_ORG; + string SETUP_QUALIFICATIONS; + string SORC_FINAL_TELEDEST; + string TC_HALF_AVG_DMG_PTS; + int TC_QUAL_PLAYERS; + string TO_SBOSS_TELE_POINT; + string T_LEADER_ID; + string T_SECOND_ID; + string T_SHAMAN_ID; + string UP_SORCJUMP_STR; + int USER_QUALIFIES; + int WAIT_MODE; + string WAIT_POINT; + string ZOMBIE_ID; + + BaseSorcFriendly() + { + NPC_NO_PLAYER_DMG = 1; + NPC_BATTLE_ALLY = 1; + NPC_FIGHTS_NPCS = 1; + FOLLOW_PLR_DIST = 128; + SetSayTextRange(4096); + NO_STUCK_CHECKS = 1; + FSORC_DMG_POINTS = 0; + NPC_ALLY_RESPONSE_RANGE = 4096; + TO_SBOSS_TELE_POINT = Vector3(512, 128, -16); + F_STUCK_COUNT = 0; + F_AS_UNSTUCK_ANG = 0; + FSORC_DMG_REQ = 0; + } + + void ext_fsorc_init() + { + FSORC_ON = 1; + } + + void OnPostSpawn() override + { + SetMenuAutoOpen(0); + ScheduleDelayedEvent(2.0, "fix_step_size"); + } + + void fix_step_size() + { + SetStepSize(48); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) return; + if (!(FSORC_ON)) return; + float GAME_TIME = GetGameTime(); + CYCLE_TIME = 0.1; + if (m_hAttackTarget != "unset") + { + NO_STUCK_CHECKS = 0; + if (!(WAIT_MODE)) + { + } + if (GAME_TIME > NEXT_TEAM_ALERT) + { + } + NEXT_TEAM_ALERT = GAME_TIME; + NEXT_TEAM_ALERT += 10.0; + if (!(IsEntityAlive(m_hAttackTarget))) + { + NPCATK_TARGET = "unset"; + } + else + { + do_team_alert(); + } + } + if (!(m_hAttackTarget == "unset")) return; + if (GAME_TIME > NEXT_FAS_CHECK) + { + NEXT_FAS_CHECK = GetGameTime(); + NEXT_FAS_CHECK += 0.5; + fsorc_friendly_stuck_check(); + } + if ((SUSPEND_AI)) return; + if ((BFSORC_MOVE_TELE)) + { + if (!(BFSORC_DID_TELE)) + { + } + if (!(BFSORC_GOING_TELE)) + { + } + string MY_ORG = GetEntityOrigin(GetOwner()); + if (Distance(MY_ORG, TO_SBOSS_TELE_POINT) < 600) + { + } + BFSORC_GOING_TELE = 1; + NO_STUCK_CHECKS = 0; + fsorc_wait(TO_SBOSS_TELE_POINT); + } + if (GAME_TIME > NEXT_REGEN) + { + if (GetEntityHealth(GetOwner()) < GetEntityMaxHealth(GetOwner())) + { + } + string REGEN_AMT = GetEntityMaxHealth(GetOwner()); + REGEN_AMT *= 0.1; + HealEntity(GetOwner(), REGEN_AMT); + NEXT_REGEN = GAME_TIME; + NEXT_REGEN += 1.0; + } + if (!(GetPlayerCount() > 0)) return; + if (GAME_TIME > NEXT_FOLLOW_CHECK) + { + int FIND_NEW_FOLLOW = 1; + } + if (!(IsEntityAlive(FOLLOW_PLR_ID))) + { + int FIND_NEW_FOLLOW = 1; + } + if ((FIND_NEW_FOLLOW)) + { + NEXT_FOLLOW_CHECK = GAME_TIME; + NEXT_FOLLOW_CHECK += 10.0; + FPLAYER_LIST = 0; + GetAllPlayers(FPLAYER_LIST); + FPLAYER_LIST = /* TODO: $sort_entlist */ $sort_entlist(FPLAYER_LIST, "range"); + FOLLOW_PLR_ID = GetToken(FPLAYER_LIST, 0, ";"); + } + if (GetEntityRange(FOLLOW_PLR_ID) > 200) + { + SetMoveAnim(ANIM_RUN); + } + else + { + SetMoveAnim(ANIM_WALK); + } + if (!(WAIT_MODE)) + { + if (GetEntityRange(FOLLOW_PLR_ID) > 42) + { + SetMoveDest(FOLLOW_PLR_ID); + } + else + { + SetMoveDest(FOLLOW_PLR_ID); + } + } + if ((WAIT_MODE)) + { + SetMoveDest(WAIT_POINT); + } + if (!(GAME_TIME > NEXT_SORCJUMP)) return; + LogDebug("jumprange SORC_MAX_JUMP_RANGE ANIM_SORCJUMP"); + if (!(GetEntityRange(FOLLOW_PLR_ID) < SORC_MAX_JUMP_RANGE)) return; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARG_Z = GetEntityProperty(FOLLOW_PLR_ID, "origin.z"); + TARG_Z -= 38; + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > ATTACK_RANGE) + { + sorc_hop_friendly(Z_DIFF); + int EXIT_SUB = 1; + NEXT_SORCJUMP = GAME_TIME; + NEXT_SORCJUMP += FREQ_SORCJUMP; + } + } + + void OnDamage(int damage) override + { + if (!(GetRelationship(param1) == "enemy")) return; + NEXT_REGEN = GetGameTime(); + NEXT_REGEN += 20.0; + if (param1 == SBOSS_ID) + { + FSORC_HIT_BY_BOSS = 1; + } + if (GetEntityRange(SBOSS_ID) < 256) + { + FSORC_HIT_BY_BOSS = 1; + } + } + + void bfsorc_follow_close() + { + FOLLOW_PLR_DIST = 60; + } + + void bfsorc_follow_normal() + { + FOLLOW_PLR_DIST = 128; + } + + void sorc_hop_friendly() + { + EmitSound(GetOwner(), 0, "monsters/orc/attack1.wav", 10); + UP_SORCJUMP_STR = param1; + if (UP_SORCJUMP_STR > 100) + { + ScheduleDelayedEvent(0.5, "push_forward"); + } + UP_SORCJUMP_STR *= 5; + npcatk_suspend_ai(1.0); + FWD_JUMP_STR = GetEntityRange(FOLLOW_PLR_ID); + PlayAnim("critical", ANIM_SORCJUMP); + ScheduleDelayedEvent(0.1, "sorc_jump_boost"); + } + + void push_forward() + { + SetMoveDest(FOLLOW_PLR_ID); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 110, 0)); + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string GROUND_POS = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + MY_Z -= GROUND_POS; + if (!(MY_Z > 20)) return; + ScheduleDelayedEvent(0.1, "push_forward"); + } + + void fsorc_wait() + { + WAIT_MODE = 1; + WAIT_POINT = param1; + } + + void fsorc_unwait() + { + WAIT_MODE = 0; + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + FSORC_DMG_POINTS += param2; + if (FSORC_DMG_POINTS > 10000) + { + FSORC_DMG_POINTS = 10000; + } + } + + void fsorc_zombie_alert() + { + SetMoveAnim(ANIM_RUN); + ZOMBIE_ID = param1; + npcatk_settarget(ZOMBIE_ID); + NPCATK_TARGET = ZOMBIE_ID; + SetMoveDest(ZOMBIE_ID); + } + + void ext_shadowform_boss() + { + SBOSS_ID = FindEntityByName("shadowform_boss"); + SBOSS_ORG = GetEntityOrigin(L_SBOSS_ID); + } + + void fsorc_move_tele() + { + BFSORC_MOVE_TELE = 1; + } + + void fsorc_did_tele() + { + BFSORC_DID_TELE = 1; + BFSORC_MOVE_TELE = 0; + ScheduleDelayedEvent(1.0, "fsorc_unwait"); + } + + void got_team_alert() + { + if ((WAIT_MODE)) return; + if (!(m_hAttackTarget == "unset")) return; + npcatk_settarget(m_hAttackTarget); + } + + void do_team_alert() + { + T_SHAMAN_ID = FindEntityByName("fsorc_shaman"); + T_LEADER_ID = FindEntityByName("fsorc_leader"); + T_SECOND_ID = FindEntityByName("fsorc_second"); + if ((IsEntityAlive(T_SHAMAN_ID))) + { + if (T_SHAMAN_ID != GetEntityIndex(GetOwner())) + { + } + CallExternal(T_SHAMAN_ID, "got_team_alert", m_hAttackTarget); + } + if ((IsEntityAlive(T_LEADER_ID))) + { + if (T_LEADER_ID != GetEntityIndex(GetOwner())) + { + } + CallExternal(T_LEADER_ID, "got_team_alert", m_hAttackTarget); + } + if ((IsEntityAlive(T_SECOND_ID))) + { + if (T_SECOND_ID != GetEntityIndex(GetOwner())) + { + } + CallExternal(T_SECOND_ID, "got_team_alert", m_hAttackTarget); + } + } + + void fsorc_friendly_stuck_check() + { + string MY_ORG = GetEntityOrigin(GetOwner()); + string MY_DEST = GetMonsterProperty("movedest.origin"); + float CUR_DIST = Distance(MY_ORG, MY_DEST); + if (!(CUR_DIST >= GetMonsterProperty("movedest.prox"))) return; + if (CUR_DIST >= OLD_DIST) + { + if (OLD_DIST != 0) + { + } + F_STUCK_COUNT += 1; + } + else + { + F_STUCK_COUNT = 0; + F_AS_UNSTUCK_ANG = Random(-15.0, 15.0); + OLD_DIST = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + OLD_DIST = CUR_DIST; + if (F_STUCK_COUNT > 1) + { + LogDebug("fsorc_friendly_stuck_check no_progress"); + string MOVE_DEST = MY_ORG; + npcatk_suspend_ai(Random(0.5, 1.0)); + F_AS_UNSTUCK_ANG += 36; + if (F_AS_UNSTUCK_ANG > 359) + { + F_AS_UNSTUCK_ANG = 0; + } + string MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + MY_YAW += F_AS_UNSTUCK_ANG; + if (MY_YAW > 359) + { + MY_YAW = 0; + } + MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 200, 0)); + SetMoveDest(MOVE_DEST); + F_STUCK_COUNT = 0; + } + } + + void ext_boss_dead() + { + REWARD_MODE = 1; + FOLLOW_PLR_DIST = 9999; + SetMenuAutoOpen(1); + } + + void reward_test() + { + FSORC_HIT_BY_BOSS = 1; + FSORC_DMG_POINTS = 99999; + ext_boss_dead(); + } + + void game_menu_getoptions() + { + if (!(REWARD_MODE)) return; + if (FSORC_DMG_POINTS < FSORC_DMG_REQ) + { + AM_HUMILIATED = 1; + } + if (!(FSORC_HIT_BY_BOSS)) + { + AM_HUMILIATED = 1; + } + if ((AM_HUMILIATED)) + { + string reg.mitem.title = "Humiliated"; + string reg.mitem.type = "disabled"; + chat_now("Seeing my humiliation, being saved by humans, without my having lifted a finger to save myself, should be payment enough.", 3.0, "neigh", "add_to_que"); + ScheduleDelayedEvent(6.0, "ready_to_go"); + } + if ((AM_HUMILIATED)) return; + if (!(SETUP_QUALIFICATIONS)) + { + SETUP_QUALIFICATIONS = 1; + check_qualify(); + } + string USER_PTS = GetEntityProperty(param1, "scriptvar"); + USER_QUALIFIES = 0; + if (USER_PTS >= TC_HALF_AVG_DMG_PTS) + { + USER_QUALIFIES = 1; + } + LogDebug("check_qualify req: TC_HALF_AVG_DMG_PTS has USER_PTS [ USER_QUALIFIES ]"); + if ((USER_QUALIFIES)) + { + give_reward_options(GetEntityIndex(param1)); + } + else + { + chat_now("I would reward you, but I find your performance as a warrior, wanting.", 3.0, "neigh", "add_to_que"); + } + } + + void check_qualify() + { + TC_QUAL_PLAYERS = 0; + GetAllPlayers(TC_QUAL_PLAYERS); + for (int i = 0; i < GetTokenCount(TC_QUAL_PLAYERS, ";"); i++) + { + tc_get_averages(); + } + TC_AVG_DMG_PTS /= GetPlayerCount(); + TC_HALF_AVG_DMG_PTS = TC_AVG_DMG_PTS; + TC_HALF_AVG_DMG_PTS *= 0.5; + } + + void tc_get_averages() + { + string CUR_PLAYER = GetToken(TC_QUAL_PLAYERS, i, ";"); + TC_AVG_DMG_PTS += GetEntityProperty(CUR_PLAYER, "scriptvar"); + } + + void ready_to_go() + { + SetMenuAutoOpen(0); + REWARD_MODE = 0; + ready_to_go_comment(); + FSORC_TELE_HOME_DELAY("tele_home"); + } + + void tele_home() + { + string REPULSE_AOE = GetMonsterProperty("moveprox"); + REPULSE_AOE *= 1.5; + SORC_FINAL_TELEDEST = GetEntityOrigin(GetOwner()); + ClientEvent("new", "all", "effects/sfx_repulse_burst", SORC_FINAL_TELEDEST, REPULSE_AOE, 1.0); + npcatk_suspend_ai(); + DeleteEntity(GetOwner(), true); // fade out + } + + void ready_to_go_comment() + { + T_SHAMAN_ID = FindEntityByName("fsorc_shaman"); + T_LEADER_ID = FindEntityByName("fsorc_leader"); + T_SECOND_ID = FindEntityByName("fsorc_second"); + FSORC_TELE_HOME_DELAY = 3.0; + if (T_SHAMAN_ID == GetEntityIndex(GetOwner())) + { + FSORC_TELE_HOME_DELAY = 7.0; + chat_now("With the beast slain dead, we may now return home...", 3.0, "add_to_que"); + chat_now("Maybe the Great Father Torkalath was wrong to forsake your kind.", 3.0, "warcry", "add_to_que"); + } + if (T_LEADER_ID == GetEntityIndex(GetOwner())) + { + chat_now("The tale of your bravery shall not go untold among the Shadahar.", 3.0, "warcry", "add_to_que"); + } + if (T_SECOND_ID == GetEntityIndex(GetOwner())) + { + chat_now("Thank you, once more, mighty warriors.", 3.0, "warcry", "add_to_que"); + } + } + +} + +} diff --git a/scripts/angelscript/bloodshrine/game_master.as b/scripts/angelscript/bloodshrine/game_master.as new file mode 100644 index 00000000..f29b9a3a --- /dev/null +++ b/scripts/angelscript/bloodshrine/game_master.as @@ -0,0 +1,105 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + int GM_BLOOD_DRINKER_FOUND; + int GM_DID_SFS_ALERT; + int GM_SFS_DEAD; + int PLAYER_LIST; + + void gm_bloodshrine_sorc_check() + { + PLAYER_LIST = 0; + GetAllPlayers(PLAYER_LIST); + GM_BLOOD_DRINKER_FOUND = 0; + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + search_for_blood_drinker(); + } + if ((GM_BLOOD_DRINKER_FOUND)) + { + UseTrigger("spawn_zorcs_friendly"); + } + else + { + UseTrigger("spawn_zorcs_hostile"); + } + } + + void gm_bloodshrine_sorc_door() + { + if ((GM_BLOOD_DRINKER_FOUND)) + { + UseTrigger("sorc_door1"); + CallExternal("all", "ext_fsorc_init"); + } + else + { + UseTrigger("sorc_door1"); + UseTrigger("sorc_door2"); + } + } + + void search_for_blood_drinker() + { + string CUR_IDX = i; + string CUR_PLAYER = GetToken(PLAYER_LIST, CUR_IDX, ";"); + if (!(ItemExists(CUR_PLAYER, "swords_blood_drinker"))) return; + GM_BLOOD_DRINKER_FOUND = 1; + } + + void gm_bloodshrine_boss_fx() + { + string BOSS_ID = FindEntityByName("shadowform_boss"); + if (!(IsEntityAlive(BOSS_ID))) return; + CallExternal(BOSS_ID, "ext_cl_fx_update"); + } + + void gm_bloodshrine_sfs_dead() + { + CallExternal("all", "fsorc_unwait"); + GM_SFS_DEAD = 1; + } + + void gm_bloodshrine_fsorc_tele() + { + if (!(GM_SFS_DEAD)) return; + if ((GM_INIT_TO_TELE)) return; + string L_SHAMAN_ID = FindEntityByName("fsorc_shaman"); + string L_LEADER_ID = FindEntityByName("fsorc_leader"); + string L_SECOND_ID = FindEntityByName("fsorc_second"); + Vector3 TELE_POINT = Vector3(512, 128, -16); + string L_ORG = GetEntityOrigin(L_SHAMAN_ID); + if (Distance(L_ORG, L_ORG) < 600) + { + int INIT_MOVE_TO_TELE = 1; + } + string L_ORG = GetEntityOrigin(L_LEADER_ID); + if (Distance(L_ORG, L_ORG) < 600) + { + int INIT_MOVE_TO_TELE = 1; + } + string L_ORG = GetEntityOrigin(L_SECOND_ID); + if (Distance(L_ORG, L_ORG) < 600) + { + int INIT_MOVE_TO_TELE = 1; + } + if (!(INIT_MOVE_TO_TELE)) return; + CallExternal("all", "fsorc_move_tele"); + } + + void gm_bloodshrine_hold_sfs() + { + if ((GM_DID_SFS_ALERT)) return; + string L_SHAMAN = FindEntityByName("fsorc_shaman"); + if (!(IsEntityAlive(L_SHAMAN))) return; + GM_DID_SFS_ALERT = 1; + CallExternal(L_SHAMAN, "ext_wait_sfs_loop"); + } + +} + +} diff --git a/scripts/angelscript/bloodshrine/sorc_shaman_friendly.as b/scripts/angelscript/bloodshrine/sorc_shaman_friendly.as new file mode 100644 index 00000000..832d7b87 --- /dev/null +++ b/scripts/angelscript/bloodshrine/sorc_shaman_friendly.as @@ -0,0 +1,375 @@ +#pragma context server + +#include "monsters/sorc_shaman_elder.as" +#include "monsters/sorc_base.as" +#include "bloodshrine/base_sorc_friendly.as" +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class SorcShamanFriendly : CGameScript +{ + string BALL_TYPE; + int CHAT_NEVER_INTERRUPT; + int CHAT_NO_CLOSE_MOUTH; + int CHAT_USE_CONV_ANIMS; + int DID_SHADOWFORM; + int DOING_SWITCH_PAGE; + int FOLLOW_PLR_DIST; + string FOLLOW_PLR_ID; + int FROST_BOLT_DAMAGE; + int FROST_STRIKE_DAMAGE; + string LEADER_ID; + int NO_SUMMON; + string PLAYERS_TO_REWARD; + int REWARDS_LEFT; + string SECOND_ID; + string SETUP_QUALIFICATIONS; + string SFORC_MENU_TARGET; + string SFS_ENTRANCE_POINT; + int SKILL_PAGE; + int SWIPE_DAMAGE; + string T_LEADER_ID; + string T_SECOND_ID; + + SorcShamanFriendly() + { + CHAT_USE_CONV_ANIMS = 0; + CHAT_NO_CLOSE_MOUTH = 1; + CHAT_NEVER_INTERRUPT = 1; + NO_SUMMON = 1; + SWIPE_DAMAGE = "$rand(50,120)"; + FROST_BOLT_DAMAGE = "$rand(80,175)"; + FROST_STRIKE_DAMAGE = "$rand(60,120)"; + FOLLOW_PLR_DIST = 256; + SFS_ENTRANCE_POINT = Vector3(1584, -1152, -128); + SKILL_PAGE = 1; + } + + void orc_spawn() + { + SetName("Meshkhar , the Elder"); + SetName("fsorc_shaman"); + SetHealth(8000); + SetHearingSensitivity(8); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("poison", 2.0); + SetRace("human"); + SetRoam(false); + SetWidth(32); + SetHeight(96); + SetModel("monsters/sorc.mdl"); + SetModelBody(1, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + } + + void ext_shaman_lines() + { + LEADER_ID = FindEntityByName("fsorc_leader"); + FOLLOW_PLR_ID = GetEntityProperty(LEADER_ID, "scriptvar"); + bfsorc_follow_close(); + chat_now("Yes... And then some of us, began to change, and were taken away.", 5.0, "nod_yes", "release_zorc", "add_to_que"); + chat_now("We were once a force of nine, but now, we are but four...", 5.0, "neigh", "add_to_que"); + } + + void release_zorc() + { + bfsorc_follow_normal(); + UseTrigger("sorc_door2"); + ScheduleDelayedEvent(5.0, "release_zorc2"); + } + + void release_zorc2() + { + SECOND_ID = FindEntityByName("fsorc_second"); + CallExternal(SECOND_ID, "ext_zombie_react"); + } + + void alert_shadowforms() + { + if ((DID_SHADOWFORM)) return; + T_LEADER_ID = FindEntityByName("fsorc_leader"); + T_SECOND_ID = FindEntityByName("fsorc_second"); + DID_SHADOWFORM = 1; + chat_now("Wait... This scent...", 5.0, "add_to_que"); + chat_now("One of the old dark ones lairs here...", 4.0, "warcry", "add_to_que"); + if ((IsEntityAlive(T_LEADER_ID))) + { + int LEADER_ALIVE = 1; + } + if ((IsEntityAlive(T_SECOND_ID))) + { + int SECOND_ALIVE = 1; + } + if ((LEADER_ALIVE)) + { + if (!(SECOND_ALIVE)) + { + chat_now("Brindahr, wait here. Your weapon will be useless against it.", 4.0, "add_to_que"); + } + if ((SECOND_ALIVE)) + { + chat_now("You two wait here. Your weapons will be useless against it.", 4.0, "add_to_que"); + } + } + if (!(LEADER_ALIVE)) + { + if ((SECOND_ALIVE)) + { + chat_now("Vurinahr, wait here. Your weapon will be useless against it.", 4.0, "add_to_que"); + } + } + if ((LEADER_ALIVE)) + { + int DO_READY_COMMENT = 1; + } + if ((SECOND_ALIVE)) + { + int DO_READY_COMMENT = 1; + } + if ((DO_READY_COMMENT)) + { + chat_now("I, on the other hand, have a trick or two for just such creatures.", 4.0, "none", "set_warrior_wait", "add_to_que"); + } + else + { + chat_now("I have a trick or two for just such creatures...", 4.0, "none", "set_warrior_wait", "add_to_que"); + } + } + + void set_warrior_wait() + { + LEADER_ID = FindEntityByName("fsorc_leader"); + SECOND_ID = FindEntityByName("fsorc_second"); + CallExternal(LEADER_ID, "fsorc_wait", Vector3(1616, -1348, -128)); + CallExternal(SECOND_ID, "fsorc_wait", Vector3(1616, -1428, -128)); + } + + void ext_shadowform_boss() + { + BALL_DMG /= 3; + ScheduleDelayedEvent(10.0, "ext_shadowform_boss2"); + } + + void ext_shadowform_boss2() + { + T_LEADER_ID = FindEntityByName("fsorc_leader"); + T_SECOND_ID = FindEntityByName("fsorc_second"); + chat_now("This creature is immune to our weaponry - you must use holy weapons and banishing magics!", 5.0, "add_to_que"); + chat_now("It's only vulnerable when the eye looks upon us! BEWARE THE EYE!", 5.0, "add_to_que"); + if ((IsEntityAlive(T_LEADER_ID))) + { + int LEADER_ALIVE = 1; + } + if ((IsEntityAlive(T_SECOND_ID))) + { + int SECOND_ALIVE = 1; + } + if ((LEADER_ALIVE)) + { + if (!(SECOND_ALIVE)) + { + chat_now("Brindahr - concentrate on the undead! The humans and I will strike at the eye of the beast!", 5.0, "add_to_que"); + } + if ((SECOND_ALIVE)) + { + chat_now("Shadahar warriors - concentrate on the undead! The humans and I will strike at the eye of the beast!", 5.0, "add_to_que"); + } + } + if (!(LEADER_ALIVE)) + { + if ((SECOND_ALIVE)) + { + chat_now("Vurinahr - concentrate on the undead! The humans and I will strike at the eye of the beast!", 5.0, "add_to_que"); + } + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + BALL_TYPE = "lightning"; + if (/* TODO: $get_takedmg */ $get_takedmg(m_hAttackTarget, "lightning") == 0) + { + BALL_TYPE = "holy"; + } + } + + void ext_return_comment() + { + chat_now("If we can find the source of evil in this place, and destroy it, we should be able to return home through the ways.", 5.0, "nod_yes", "add_to_que"); + } + + void ext_wait_sfs_loop() + { + if ((DID_SHADOWFORM)) return; + string MY_ORG = GetEntityOrigin(GetOwner()); + if (Distance(SFS_ENTRANCE_POINT, MY_ORG) < 256) + { + alert_shadowforms(); + } + if ((DID_SHADOWFORM)) return; + ScheduleDelayedEvent(0.1, "ext_wait_sfs_loop"); + } + + void give_reward_options() + { + LogDebug("give_reward_options REWARDS_LEFT vs REWARDS_TOTAL list PLAYERS_TO_REWARD vs PARAM1"); + if (!(REWARDS_LEFT > 0)) return; + if (!((PLAYERS_TO_REWARD).findFirst(param1) >= 0)) return; + if (!(DOING_SWITCH_PAGE)) + { + chat_now("I can use my magics to enhance one of your skills, please select which one.", 3.0, "neigh", "add_to_que"); + } + DOING_SWITCH_PAGE = 0; + if (SKILL_PAGE == 1) + { + string reg.mitem.title = "Archery"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "archery"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Axe Handling"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "axehandling"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Bluntarms"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "bluntarms"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Martial Arts"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "martialarts"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Polearms"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "polearms"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Smallarms"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "smallarms"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Swordsmanship"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "swordsmanship"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Spellcasting..."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "switch_page2"; + } + if (SKILL_PAGE == 2) + { + string reg.mitem.title = "Fire"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "spellcasting.fire"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Ice"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "spellcasting.ice"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Lightning"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "spellcasting.lightning"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Affliction"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "spellcasting.affliction"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "Divination"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "spellcasting.divination"; + string reg.mitem.callback = "enhance_skill"; + string reg.mitem.title = "(previous)"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "switch_page1"; + } + } + + void switch_page2() + { + DOING_SWITCH_PAGE = 1; + SKILL_PAGE = 2; + SFORC_MENU_TARGET = param1; + ScheduleDelayedEvent(0.5, "sforc_offer_menu"); + } + + void switch_page1() + { + DOING_SWITCH_PAGE = 1; + SKILL_PAGE = 1; + SFORC_MENU_TARGET = param1; + ScheduleDelayedEvent(0.5, "sforc_offer_menu"); + } + + void enhance_skill() + { + chat_now("So be it. It is done.", 3.0, "warcry", "add_to_que"); + string FIND_INDX = FindToken(PLAYERS_TO_REWARD, param1, ";"); + RemoveToken(PLAYERS_TO_REWARD, FIND_INDX, ";"); + REWARDS_LEFT -= 1; + Effect("glow", GetOwner(), "glow", Vector3(255, 255, 0), 64, 1, 1); + if (param2 != "spellcasting.lightning") + { + int XP_GAIN = 5000; + string PLR_ADJ = "game.playersnb"; + PLR_ADJ -= 1; + PLR_ADJ *= 0.25; + PLR_ADJ += 1; + XP_GAIN *= PLR_ADJ; + GiveExp(param1, param2, int(XP_GAIN)); + SendColoredMessage(param1, "* " + int(XP_GAIN) + XP + "Awarded " + param2); + } + else + { + int XP_GAIN = 10000; + string PLR_ADJ = "game.playersnb"; + PLR_ADJ -= 1; + PLR_ADJ *= 0.25; + PLR_ADJ += 1; + XP_GAIN *= PLR_ADJ; + GiveExp(param1, param2, int(XP_GAIN)); + SendColoredMessage(param1, "* " + int(XP_GAIN) + XP + "Awarded " + param2); + } + if (!(REWARDS_LEFT == 0)) return; + ScheduleDelayedEvent(6.0, "ready_to_go"); + } + + void sforc_offer_menu() + { + OpenMenu(SFORC_MENU_TARGET); + } + + void ext_boss_dead() + { + REWARDS_LEFT = 0; + PLAYERS_TO_REWARD = ""; + GetAllPlayers(REWARD_PLAYER_LIST); + if (!(SETUP_QUALIFICATIONS)) + { + SETUP_QUALIFICATIONS = 1; + check_qualify(); + } + for (int i = 0; i < GetTokenCount(REWARD_PLAYER_LIST, ";"); i++) + { + gather_reward_players(); + } + } + + void gather_reward_players() + { + string CUR_PLAYER = GetToken(REWARD_PLAYER_LIST, i, ";"); + string DMG_PTS = GetEntityProperty(CUR_PLAYER, "scriptvar"); + if (DMG_PTS >= TC_HALF_AVG_DMG_PTS) + { + int PLR_QUALIFIED = 1; + } + if (!(PLR_QUALIFIED)) return; + if (PLAYERS_TO_REWARD.length() > 0) PLAYERS_TO_REWARD += ";"; + PLAYERS_TO_REWARD += CUR_PLAYER; + REWARDS_LEFT += 1; + } + +} + +} diff --git a/scripts/angelscript/bloodshrine/sorc_warrior2_friendly.as b/scripts/angelscript/bloodshrine/sorc_warrior2_friendly.as new file mode 100644 index 00000000..7e6d3d4d --- /dev/null +++ b/scripts/angelscript/bloodshrine/sorc_warrior2_friendly.as @@ -0,0 +1,146 @@ +#pragma context server + +#include "monsters/sorc_warrior.as" +#include "bloodshrine/base_sorc_friendly.as" +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class SorcWarrior2Friendly : CGameScript +{ + string CHAT_CURRENT_SPEAKER; + int CHAT_NEVER_INTERRUPT; + int CHAT_NO_CLOSE_MOUTH; + int CHAT_USE_CONV_ANIMS; + int DID_ASHINKAHR; + string DID_INTRO; + int DMG_KICK; + int DMG_SWORD; + float DOT_SHOCK; + float DOT_THROW_SHOCK; + string FOLLOW_PLR_DIST; + string FOLLOW_PLR_ID; + int GAVE_REWARD; + string LEADER_ID; + string NPCATK_TARGET; + int NPC_EXTRA_VALIDATIONS; + string ZOMBIE_ID; + + SorcWarrior2Friendly() + { + DMG_SWORD = RandomInt(200, 300); + DOT_THROW_SHOCK = 120.0; + DOT_SHOCK = 60.0; + DMG_KICK = RandomInt(40, 100); + CHAT_USE_CONV_ANIMS = 0; + CHAT_NO_CLOSE_MOUTH = 1; + CHAT_NEVER_INTERRUPT = 1; + NPC_EXTRA_VALIDATIONS = 1; + } + + void orc_spawn() + { + SetName("Shadahar Lieutenant"); + SetName("fsorc_second"); + SetModel("monsters/sorc.mdl"); + SetHealth(8000); + SetDamageResistance("all", 0.5); + SetStat("parry", 110); + SetRace("human"); + SetRoam(false); + SetWidth(32); + SetHeight(96); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 7); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(DID_INTRO)) + { + if ((false)) + { + } + CHAT_CURRENT_SPEAKER = GetEntityIndex(m_hLastSeen); + if (!(IsEntityAlive(m_hLastSeen))) + { + CHAT_CURRENT_SPEAKER = FindEntitiesInSphere("player", 512); + CHAT_CURRENT_SPEAKER = /* TODO: $sort_entlist */ $sort_entlist(CHAT_CURRENT_SPEAKER, "range"); + CHAT_CURRENT_SPEAKER = GetToken(CHAT_CURRENT_SPEAKER, 0, ";"); + } + FOLLOW_PLR_ID = CHAT_CURRENT_SPEAKER; + FOLLOW_PLR_DIST = 200; + DID_INTRO = 1; + do_intro(); + } + } + + void do_intro() + { + chat_now("Humans!? Attack!!!", 3.0, ANIM_ATTACK, "add_to_que"); + ScheduleDelayedEvent(1.0, "leader_interrupt"); + } + + void leader_interrupt() + { + LEADER_ID = FindEntityByName("fsorc_leader"); + SetMoveDest(LEADER_ID); + CallExternal(LEADER_ID, "ext_do_leader_intro"); + } + + void ext_zombie_react() + { + SetName("Vurinahr , the Lieutenant"); + string FIND_ZOMBIE = FindEntitiesInSphere("enemy", 1024); + ZOMBIE_ID = GetToken(FIND_ZOMBIE, 0, ";"); + npcatk_settarget(ZOMBIE_ID); + NPCATK_TARGET = ZOMBIE_ID; + SetMoveDest(ZOMBIE_ID); + ScheduleDelayedEvent(1.5, "alert_others"); + bfsorc_follow_normal(); + chat_now("Make that three! Ashinkahr has changed!", 3.0, ANIM_ATTACK, "add_to_que"); + } + + void alert_others() + { + CallExternal("all", "fsorc_zombie_alert", ZOMBIE_ID); + } + + void my_target_died() + { + if ((DID_ASHINKAHR)) return; + DID_ASHINKAHR = 1; + npcatk_suspend_ai(3.0); + chat_now("That should put him to rest once and for all.", 3.0, "add_to_que"); + CallExternal(LEADER_ID, "ext_leader_ash"); + } + + void npc_targetvalidate() + { + if (m_hAttackTarget == SBOSS_ID) + { + NPCATK_TARGET = "unset"; + } + } + + void give_reward_options() + { + if ((GAVE_REWARD)) return; + string reg.mitem.title = "Gather Reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_reward"; + } + + void give_reward() + { + GAVE_REWARD = 1; + // TODO: offer PARAM1 axes_thunder11 + chat_now("It's a meager reward, for bravery, but I'm sure you'll find one who make use of it.", 3.0, "nod_yes"); + ScheduleDelayedEvent(6.0, "ready_to_go"); + } + +} + +} diff --git a/scripts/angelscript/bloodshrine/sorc_warrior_friendly.as b/scripts/angelscript/bloodshrine/sorc_warrior_friendly.as new file mode 100644 index 00000000..59c5b4d6 --- /dev/null +++ b/scripts/angelscript/bloodshrine/sorc_warrior_friendly.as @@ -0,0 +1,175 @@ +#pragma context server + +#include "monsters/sorc_warrior.as" +#include "bloodshrine/base_sorc_friendly.as" +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class SorcWarriorFriendly : CGameScript +{ + int CHAT_NEVER_INTERRUPT; + int CHAT_NO_CLOSE_MOUTH; + int CHAT_TEMP_NO_AUTO_FACE; + int CHAT_USE_CONV_ANIMS; + int DID_ASHINKAHR; + int DID_WAIT_COMMENT; + int DMG_KICK; + int DMG_SWORD; + float DOT_SHOCK; + float DOT_THROW_SHOCK; + int GAVE_REWARD; + string NPCATK_TARGET; + int NPC_EXTRA_VALIDATIONS; + string SECOND_ID; + string SHAMAN_ID; + string ZOMBIE_ID; + + SorcWarriorFriendly() + { + DMG_SWORD = RandomInt(200, 300); + DOT_THROW_SHOCK = 120.0; + DOT_SHOCK = 60.0; + DMG_KICK = RandomInt(40, 100); + CHAT_USE_CONV_ANIMS = 0; + CHAT_NO_CLOSE_MOUTH = 1; + CHAT_NEVER_INTERRUPT = 1; + NPC_EXTRA_VALIDATIONS = 1; + } + + void orc_spawn() + { + SetName("Brindahr , the Warleader"); + SetName("fsorc_leader"); + SetModel("monsters/sorc.mdl"); + SetHealth(8000); + SetDamageResistance("all", 0.5); + SetStat("parry", 110); + SetRace("human"); + SetRoam(false); + SetWidth(32); + SetHeight(96); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 7); + } + + void ext_do_leader_intro() + { + chat_now("Wait!", 3.0, "neigh", "bfsorc_follow_close", "add_to_que"); + chat_now("I know you... You are of the humans who fought beside Chief Runegahr!", 5.0, "none", "face_second", "add_to_que"); + chat_now("Surely they will help us escape this accursed place!", 3.0, "none", "add_to_que"); + chat_now("We were exploring, outside these ruins, when a great shadow fell upon us.", 4.0, "add_to_que"); + chat_now("When we awoke, we found ourselves imprisoned here...", 4.0, "none", "call_shaman_lines", "add_to_que"); + } + + void face_second() + { + SECOND_ID = FindEntityByName("fsorc_second"); + CHAT_TEMP_NO_AUTO_FACE = 1; + SetMoveDest(SECOND_ID); + npcatk_suspend_ai(); + ScheduleDelayedEvent(0.1, "shew_second"); + ScheduleDelayedEvent(2.0, "resume_faceing_speaker"); + ScheduleDelayedEvent(2.5, "chat_face_speaker"); + bfsorc_follow_normal(); + } + + void resume_faceing_speaker() + { + CHAT_TEMP_NO_AUTO_FACE = 0; + } + + void shew_second() + { + SetMoveDest(SECOND_ID); + PlayAnim("critical", "swordswing1_L"); + } + + void call_shaman_lines() + { + ScheduleDelayedEvent(1.0, "call_shaman_lines2"); + } + + void call_shaman_lines2() + { + SHAMAN_ID = FindEntityByName("fsorc_shaman"); + SetMoveDest(SHAMAN_ID); + ScheduleDelayedEvent(2.5, "chat_face_speaker"); + CallExternal(SHAMAN_ID, "ext_shaman_lines"); + } + + void fsorc_zombie_alert() + { + npcatk_resume_ai(); + ScheduleDelayedEvent(3.0, "ash_comment"); + SetMoveAnim(ANIM_RUN); + ZOMBIE_ID = param1; + npcatk_settarget(ZOMBIE_ID); + NPCATK_TARGET = ZOMBIE_ID; + SetMoveDest(ZOMBIE_ID); + } + + void ash_comment() + { + chat_now("To battle! Rend his cursed corpse until it ceases to move!", 3.0, "warcry", "add_to_que"); + } + + void ext_leader_ash() + { + if ((DID_ASHINKAHR)) return; + DID_ASHINKAHR = 1; + ScheduleDelayedEvent(3.0, "ext_leader_ash2"); + } + + void ext_leader_ash2() + { + chat_now("Yes... Lead on, we shall follow.", 3.0, "add_to_que"); + ScheduleDelayedEvent(3.0, "sham_comment"); + } + + void sham_comment() + { + CallExternal(SHAMAN_ID, "ext_return_comment"); + } + + void npc_targetvalidate() + { + if (m_hAttackTarget == SBOSS_ID) + { + NPCATK_TARGET = "unset"; + } + } + + void fsorc_wait() + { + if ((DID_WAIT_COMMENT)) return; + DID_WAIT_COMMENT = 1; + ScheduleDelayedEvent(1.0, "fsorc_wait_comment"); + } + + void fsorc_wait_comment() + { + chat_now("Very well. We trust in your judgement, elder.", 3.0, "nod_yes"); + } + + void give_reward_options() + { + if ((GAVE_REWARD)) return; + string reg.mitem.title = "Gather Reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_reward"; + } + + void give_reward() + { + GAVE_REWARD = 1; + // TODO: offer PARAM1 axes_gthunder11 + chat_now("It's a meager reward, for such a warrior, but I'm sure you'll make good use of it.", 3.0, "nod_yes"); + ScheduleDelayedEvent(6.0, "ready_to_go"); + } + +} + +} diff --git a/scripts/angelscript/calruin/TC_fangtooth.as b/scripts/angelscript/calruin/TC_fangtooth.as new file mode 100644 index 00000000..2b0718a1 --- /dev/null +++ b/scripts/angelscript/calruin/TC_fangtooth.as @@ -0,0 +1,33 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class TcFangtooth : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(3, 9)); + AddStoreItem(STORENAME, "health_lpotion", RandomInt(1, 5), 0); + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "proj_arrow_fire", 60, 0, 0, 30); + addrandomitems(); + } + + void addrandomitems() + { + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "axes_scythe", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "blunt_greatmaul", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/calruin/base_riddler.as b/scripts/angelscript/calruin/base_riddler.as new file mode 100644 index 00000000..6b5e9cf6 --- /dev/null +++ b/scripts/angelscript/calruin/base_riddler.as @@ -0,0 +1,106 @@ +#pragma context server + +namespace MS +{ + +class BaseRiddler : CGameScript +{ + int INTRODUCED; + int NTRODUCED; + int RIDDLE_ANSWERED; + string VICTIM; + + BaseRiddler() + { + RIDDLE_ANSWERED = 0; + NTRODUCED = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1); + if ((CanSee("player", 128))) + { + } + ScheduleDelayedEvent(2, "say_riddle1"); + } + + void OnSpawn() override + { + SetHealth(1); + SetWidth(32); + SetHeight(72); + SetRace("undead"); + SetName("Riddlemaster"); + SetRoam(false); + SetModel("monsters/riddler.mdl"); + SetInvincible(true); + SetNoPush(true); + CatchSpeech("say_riddle1", "hi"); + CatchSpeech("say_riddle", "yes"); + CatchSpeech("say_answer", RIDDLE_ANSWER); + SetSolid("none"); + } + + void say_riddle1() + { + if ((INTRODUCED)) return; + INTRODUCED = 1; + SayText("Halt! You may not proceed until you answer a riddle!"); + ScheduleDelayedEvent(4, "say_riddle2"); + } + + void say_riddle2() + { + SayText("Take my advice and leave, for if you fail to answer, you will die!"); + ScheduleDelayedEvent(4, "say_riddle3"); + } + + void say_riddle3() + { + SayText("Despite the risk, are you willing to try?"); + } + + void say_riddle() + { + if (!(INTRODUCED)) return; + if ((RIDDLE_ANSWERED)) return; + VICTIM = GetEntityIndex("ent_lastspoke"); + riddle_question(); + ScheduleDelayedEvent(30, "kill_player"); + } + + void say_answer() + { + RIDDLE_ANSWERED = 1; + riddle_correct(); + ScheduleDelayedEvent(2, "death"); + } + + void death() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void kill_player() + { + if ((RIDDLE_ANSWERED)) return; + string MY_TARGET_POS = GetEntityOrigin(VICTIM); + MY_TARGET_POS += Vector3(0, 0, 16); + SayText(FAILED_MSG); + string l.sky = MY_TARGET_POS; + l.sky += Vector3(0, 0, 4096); + EmitSound3D("weather/Storm_exclamation.wav", 10, MY_TARGET_POS); + ClientEvent("new", "all_in_sight", "effects/sfx_lightning", MY_TARGET_POS, l.sky, 1, 1); + DoDamage(VICTIM, "direct", 10000, 1.0, GetOwner()); + ScheduleDelayedEvent(5, "restart"); + } + + void restart() + { + INTRODUCED = 0; + } + +} + +} diff --git a/scripts/angelscript/calruin/blacksmith_construct_left.as b/scripts/angelscript/calruin/blacksmith_construct_left.as new file mode 100644 index 00000000..cb1fde9d --- /dev/null +++ b/scripts/angelscript/calruin/blacksmith_construct_left.as @@ -0,0 +1,109 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class BlacksmithConstructLeft : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_GIVE_EXP; + int NPC_IS_BOSS; + int SKEL_HEIGHT; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + int SKEL_WIDTH; + string SOUND_PUSH; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int STONE_SKELETON; + int STUN_ATK_CHANCE; + int STUN_ATTACK; + + BlacksmithConstructLeft() + { + NPC_IS_BOSS = 1; + NPC_ALLY_RESPONSE_RANGE = 6000; + ANIM_RUN = "run"; + SKEL_HP = 2000; + SKEL_WIDTH = 64; + SKEL_HEIGHT = 180; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 180; + ATTACK_HITCHANCE = 0.95; + ATTACK_DAMAGE_LOW = 40; + ATTACK_DAMAGE_HIGH = 60; + NPC_GIVE_EXP = 1200; + DROP_GOLD = 1; + DROP_GOLD_MIN = 100; + DROP_GOLD_MAX = 250; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + SOUND_PUSH = "monsters/skeleton/calrain3.wav"; + STUN_ATK_CHANCE = 10; + STONE_SKELETON = 1; + Precache("monsters/skeleton_boss1.mdl"); + } + + void skeleton_spawn() + { + SetModel("monsters/skeleton_boss1.mdl"); + SetModelBody(0, 7); + SetModelBody(1, 4); + SetProp(GetOwner(), "scale", 2.0); + SetName("Blacksmith s Construct"); + SetBloodType("none"); + SetDamageResistance("all", 0.6); + SetDamageResistance("holy", 1.5); + SetDamageResistance("fire", 0.25); + SetDamageResistance("cold", 0.25); + SetDamageResistance("stun", 0.6); + SetDamageResistance("blunt", 1.25); + ANIM_ATTACK = "attack3"; + SetHearingSensitivity(3); + } + + void attack_1() + { + STUN_ATTACK = 1; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = "attack3"; + } + + void attack_3() + { + STUN_ATTACK = 0; + attack_snd(); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + if (!(RandomInt(1, 100) < STUN_ATK_CHANCE)) return; + ANIM_ATTACK = "attack1"; + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(STUN_ATTACK)) return; + EmitSound(GetOwner(), 0, SOUND_PUSH, 10); + ApplyEffect(param2, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + STUN_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/calruin/blacksmith_construct_right.as b/scripts/angelscript/calruin/blacksmith_construct_right.as new file mode 100644 index 00000000..96a9ca8a --- /dev/null +++ b/scripts/angelscript/calruin/blacksmith_construct_right.as @@ -0,0 +1,117 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class BlacksmithConstructRight : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int DOT_FIRE; + float DOT_TIME; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string GLOW_SHELL; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_GIVE_EXP; + int NPC_IS_BOSS; + int SKEL_HEIGHT; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + int SKEL_WIDTH; + string SOUND_PUSH; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int STONE_SKELETON; + int STUN_ATK_CHANCE; + int STUN_ATTACK; + + BlacksmithConstructRight() + { + NPC_IS_BOSS = 1; + NPC_ALLY_RESPONSE_RANGE = 6000; + ANIM_RUN = "run"; + SKEL_HP = 3000; + SKEL_WIDTH = 64; + SKEL_HEIGHT = 180; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 180; + ATTACK_HITCHANCE = 0.95; + ATTACK_DAMAGE_LOW = 40; + ATTACK_DAMAGE_HIGH = 60; + NPC_GIVE_EXP = 1500; + DOT_FIRE = 10; + DOT_TIME = 5.0; + DROP_GOLD = 1; + DROP_GOLD_MIN = 100; + DROP_GOLD_MAX = 250; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + SOUND_PUSH = "monsters/skeleton/calrain3.wav"; + STUN_ATK_CHANCE = 10; + GLOW_SHELL = Vector3(255, 75, 0); + STONE_SKELETON = 1; + Precache("monsters/skeleton_boss1.mdl"); + } + + void skeleton_spawn() + { + SetModel("monsters/skeleton_boss1.mdl"); + SetModelBody(0, 7); + SetModelBody(1, 4); + SetProp(GetOwner(), "scale", 2.0); + Effect("glow", GetOwner(), GLOW_SHELL, 4, -1, 0); + SetName("Unstable Blacksmith s Construct"); + SetBloodType("none"); + SetDamageResistance("all", 0.6); + SetDamageResistance("holy", 1.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.4); + SetDamageResistance("stun", 0.6); + SetDamageResistance("blunt", 1.25); + ANIM_ATTACK = "attack3"; + SetHearingSensitivity(3); + } + + void attack_1() + { + STUN_ATTACK = 1; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = "attack3"; + } + + void attack_3() + { + STUN_ATTACK = 0; + attack_snd(); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + if (!(RandomInt(1, 100) < STUN_ATK_CHANCE)) return; + ANIM_ATTACK = "attack1"; + } + + void game_dodamage() + { + ApplyEffect(param2, "effects/dot_fire", DOT_TIME, GetEntityIndex(GetOwner()), DOT_FIRE); + if (!(param1)) return; + if (!(STUN_ATTACK)) return; + EmitSound(GetOwner(), 0, SOUND_PUSH, 10); + ApplyEffect(param2, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + STUN_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/calruin/cavebat.as b/scripts/angelscript/calruin/cavebat.as new file mode 100644 index 00000000..b9ea619e --- /dev/null +++ b/scripts/angelscript/calruin/cavebat.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "monsters/bat.as" + +namespace MS +{ + +class Cavebat : CGameScript +{ + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int NPC_GIVE_EXP; + + Cavebat() + { + ATTACK_DAMAGE = "$randf(5,15)"; + } + + void bat_spawn() + { + SetName("Cave bat"); + NPC_GIVE_EXP = 25; + ATTACK_HITCHANCE = 0.85; + SetMoveSpeed(2); + SetWidth(16); + SetHeight(16); + SetHearingSensitivity(3.5); + SetVolume(5); + SetModel("monsters/bat.mdl"); + } + +} + +} diff --git a/scripts/angelscript/calruin/cavespid.as b/scripts/angelscript/calruin/cavespid.as new file mode 100644 index 00000000..a7e8cf2e --- /dev/null +++ b/scripts/angelscript/calruin/cavespid.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "monsters/spider.as" + +namespace MS +{ + +class Cavespid : CGameScript +{ + int FIN_EXP; + string SPIDER_MODEL; + + Cavespid() + { + FIN_EXP = 20; + SPIDER_MODEL = "monsters/fer_spider.mdl"; + } + + void OnSpawn() override + { + SetHealth(85); + SetName("Cave Spider"); + if ((StringToLower(GetMapName())).findFirst("calruin") >= 0) + { + SetName("Maisculus Araneu"); + } + if ((StringToLower(GetMapName())).findFirst("deralia") >= 0) + { + SetName("Maisculus Araneu"); + } + SetModelBody(0, 0); + } + +} + +} diff --git a/scripts/angelscript/calruin/cavetroll.as b/scripts/angelscript/calruin/cavetroll.as new file mode 100644 index 00000000..852ccc6d --- /dev/null +++ b/scripts/angelscript/calruin/cavetroll.as @@ -0,0 +1,341 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Cavetroll : CGameScript +{ + string ALT_MODEL; + int AM_GERIC; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FULLRUN; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SLASH; + string ANIM_SMASH; + string ANIM_THROW; + string ANIM_WALK; + string ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + string ATTACK_RANGE; + string CAN_FLINCH; + string DELAY_NEXT_THROW; + int I_AM_TURNABLE; + string MAIN_MODEL; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + string NPC_EXP_MULTI; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int NPC_MUST_SEE_TARGET; + int ROAM_ON; + string SET_GREEK; + int SLASH_HITRANGE; + int SLASH_RANGE; + int SMASH_HITRANGE; + int SMASH_RANGE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_FALL; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_PUSH; + string SOUND_SPAWN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + int STUN_ATTACK; + int THROW_COUNT; + string THROW_DELAY; + float THROW_FREQ; + int THROW_RANGE; + string THROW_TARGET; + string THROW_TIME; + + Cavetroll() + { + if (StringToLower(GetMapName()) == "calruin2") + { + NPC_IS_BOSS = 1; + } + if (StringToLower(GetMapName()) == "calruin") + { + NPC_IS_BOSS = 1; + } + if (StringToLower(GetMapName()) == "ww3d") + { + NPC_IS_BOSS = 1; + } + if (!(NPC_IS_BOSS)) + { + NPC_EXP_MULTI = 0.25; + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 1.0; + ANIM_DEATH = "diesimple"; + SOUND_STRUCK1 = "controller/con_pain2.wav"; + SOUND_STRUCK2 = "controller/con_pain3.wav"; + SOUND_ATTACK1 = "zombie/claw_strike1.wav"; + SOUND_ATTACK2 = "zombie/claw_strike2.wav"; + SOUND_ATTACK3 = "zombie/claw_strike3.wav"; + SOUND_DEATH = "garg/gar_die2.wav"; + SOUND_SPAWN = "garg/gar_alert2.wav"; + SOUND_FLINCH1 = "garg/gar_pain3.wav"; + SOUND_FLINCH2 = "garg/gar_pain2.wav"; + SOUND_PUSH = "garg/gar_attack3.wav"; + SOUND_FALL = "weapons/mortarhit.wav"; + ANIM_RUN = "walk"; + ANIM_FULLRUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_SMASH = "attack2"; + ANIM_SLASH = "attack1"; + ANIM_ATTACK = ANIM_SLASH; + SLASH_RANGE = 150; + SMASH_RANGE = 100; + SLASH_HITRANGE = 200; + SMASH_HITRANGE = 125; + THROW_RANGE = 250; + ATTACK_RANGE = SMASH_RANGE; + ATTACK_MOVERANGE = 50; + ATTACK_HITRANGE = SLASH_HITRANGE; + THROW_FREQ = 10.0; + NPC_MUST_SEE_TARGET = 0; + MAIN_MODEL = "monsters/skeleton_hood.mdl"; + ALT_MODEL = "monsters/skeleton_boss2.mdl"; + Precache(ALT_MODEL); + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + string L_MAP_NAME = StringToLower(GetMapName()); + I_AM_TURNABLE = 0; + if (L_MAP_NAME == "ww3d") + { + geric_mode(); + } + if ((FORCE_GERIC)) + { + geric_mode(); + } + if (!(AM_GERIC)) + { + SetName("Garonhroth the Blacksmith"); + SetModel(MAIN_MODEL); + ANIM_THROW = "throw_scientist"; + THROW_TIME = 15; + THROW_DELAY = 2.0; + THROW_FREQ = 20.0; + if ((NPC_IS_BOSS)) + { + NPC_GIVE_EXP = 2000; + } + if (!(NPC_IS_BOSS)) + { + NPC_GIVE_EXP = 1000; + } + } + SetHealth(6000); + SetGold(RandomInt(100, 300)); + SetWidth(40); + SetHeight(120); + SetRace("undead"); + SetSolid("box"); + SetRoam(false); + SetHearingSensitivity(12); + string CURRENT_MAP = GetMapName(); + if (CURRENT_MAP == "calruin2") + { + SetModelBody(0, 1); + } + if (CURRENT_MAP == "calruin2_1") + { + SetModelBody(0, 1); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + PlayAnim("once", ANIM_IDLE); + SetDamageResistance("all", 0.6); + SetDamageResistance("holy", 1.5); + SetDamageResistance("poison", 0.0); + THROW_COUNT = 0; + EmitSound(GetOwner(), 0, SOUND_SPAWN, 10); + } + + void npcatk_get_postspawn_properties() + { + if (!(AM_GERIC)) return; + ANIM_RUN = ANIM_FULLRUN; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((ROAM_ON)) return; + ROAM_ON = 1; + SetRoam(true); + } + + void attack_1() + { + if (GetEntityRange(m_hAttackTarget) < SLASH_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", Random(40.0, 55.0), 0.75, GetEntityIndex(GetOwner()), "slash"); + } + if (!(RandomInt(1, 10) == 1)) return; + ANIM_ATTACK = ANIM_SMASH; + ATTACK_RANGE = SMASH_RANGE; + ATTACK_HITRANGE = SMASH_HITRANGE; + } + + void attack_2() + { + if (GetEntityRange(m_hAttackTarget) < SMASH_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", Random(30.0, 40.0), 1.0, GetEntityIndex(GetOwner()), "blunt"); + } + STUN_ATTACK = 1; + EmitSound(GetOwner(), 0, SOUND_ATTACK1, 10); + ANIM_ATTACK = ANIM_SLASH; + ATTACK_RANGE = SLASH_RANGE; + ATTACK_HITRANGE = SLASH_HITRANGE; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_CURRENT_HP = GetEntityHealth(GetOwner()); + if (MY_CURRENT_HP < 2000) + { + CAN_FLINCH = 1; + } + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnFlinch() + { + if (!(CAN_FLINCH)) return; + PlayAnim("critical", ANIM_FLINCH); + // PlayRandomSound from: SOUND_FLINCH1, SOUND_FLINCH2 + array sounds = {SOUND_FLINCH1, SOUND_FLINCH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (StringToLower(GetMapName()) == "ww3d") + { + CallExternal("players", "ext_clear_valid_gauntlets"); + } + kaboom_bs(); + } + + void kaboom_bs() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 50, 10, 2, 1024); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_FALL, 10); + } + + void give_clubs() + { + SetModelBody(0, 1); + } + + void invincible_on() + { + SetInvincible(true); + } + + void vulnerable() + { + SetInvincible(false); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(ANIM_ATTACK == "attack1")) return; + THROW_COUNT += 1; + if (THROW_COUNT > THROW_TIME) + { + THROW_COUNT = 0; + if (!(DELAY_NEXT_THROW)) + { + } + DELAY_NEXT_THROW = 1; + THROW_FREQ("reset_throw"); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_THROW); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_PUSH, 10); + THROW_TARGET = param2; + npcatk_suspend_ai(2.0); + THROW_DELAY("throw_chummer"); + } + } + + void reset_throw() + { + DELAY_NEXT_THROW = 0; + } + + void throw_chummer() + { + if (!(GetEntityRange(THROW_TARGET) < THROW_RANGE)) return; + ApplyEffect(THROW_TARGET, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 800, 800), 0); + } + + void geric_mode() + { + AM_GERIC = 1; + THROW_TIME = 10; + ANIM_THROW = "bigflinch"; + THROW_DELAY = 0.5; + THROW_FREQ = 8.0; + SetMoveSpeed(2.0); + SetName("The Dread Knight Sir Geric"); + SetDamageResistance("fire", 0.1); + SetModel(ALT_MODEL); + SetModelBody(0, 9); + SetModelBody(1, 4); + ANIM_RUN = ANIM_FULLRUN; + SetStat("parry", 100); + if ((NPC_IS_BOSS)) + { + NPC_GIVE_EXP = 5000; + } + if (!(NPC_IS_BOSS)) + { + NPC_GIVE_EXP = 800; + } + SetRoam(true); + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(STUN_ATTACK)) return; + STUN_ATTACK = 0; + ApplyEffect(param1, "effects/effect_push", 1, /* TODO: $relvel */ $relvel(0, 200, 30), 0); + } + + void go_greek() + { + SetModelBody(0, 10); + SET_GREEK = 1; + } + +} + +} diff --git a/scripts/angelscript/calruin/cavetroll2.as b/scripts/angelscript/calruin/cavetroll2.as new file mode 100644 index 00000000..8e1a7a37 --- /dev/null +++ b/scripts/angelscript/calruin/cavetroll2.as @@ -0,0 +1,70 @@ +#pragma context server + +#include "monsters/troll.as" + +namespace MS +{ + +class Cavetroll2 : CGameScript +{ + int ATTACK1_RANGE; + int ATTACK2_RANGE; + int ATTACK_RANGE; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int MOVE_RANGE; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + string PUSH_VEL; + + Cavetroll2() + { + NPC_BASE_EXP = 200; + DROP_GOLD_MIN = 50; + DROP_GOLD_MAX = 85; + ATTACK_RANGE = 130; + ATTACK1_RANGE = 210; + ATTACK2_RANGE = 160; + MOVE_RANGE = 130; + NPC_GIVE_EXP = 200; + } + + void troll_spawn() + { + SetHealth(800); + SetName("Hideous Cave Troll"); + SetRoam(false); + SetHearingSensitivity(8); + } + + void attack_1() + { + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 200, 10); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", Random(25.0, 40.0), 0.9, "blunt"); + } + attack_sound(); + } + + void attack_2() + { + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 200, 10); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", Random(30.0, 40.0), 1.0, "blunt"); + } + attack_sound(); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/calruin/chest_qspider.as b/scripts/angelscript/calruin/chest_qspider.as new file mode 100644 index 00000000..651b4b92 --- /dev/null +++ b/scripts/angelscript/calruin/chest_qspider.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ChestQspider : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(4, 10)); + AddStoreItem(STORENAME, "health_lpotion", RandomInt(1, 5), 0); + AddStoreItem(STORENAME, "item_torch", RandomInt(1, 2), 0); + AddStoreItem(STORENAME, "swords_scimitar", 1, 0); + AddStoreItem(STORENAME, "pack_archersquiver", 1, 0); + AddStoreItem(STORENAME, "bows_longbow", 1, 0); + AddStoreItem(STORENAME, "proj_arrow_jagged", 30, 0, 0, 15); + if (RandomInt(1, 25) == 1) + { + AddStoreItem(STORENAME, "bows_swiftbow", 1, 0); + } + if (!(RandomInt(1, 25) == 1)) return; + AddStoreItem(STORENAME, "proj_arrow_gholy", 15, 0, 0, 15); + } + +} + +} diff --git a/scripts/angelscript/calruin/corpse.as b/scripts/angelscript/calruin/corpse.as new file mode 100644 index 00000000..ccf7d31f --- /dev/null +++ b/scripts/angelscript/calruin/corpse.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Corpse : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + Corpse() + { + SKEL_HP = 100; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 4; + ATTACK_DAMAGE_HIGH = 5; + NPC_GIVE_EXP = 35; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 2; + DROP_GOLD_MAX = 9; + SKEL_RESPAWN_CHANCE = 0.75; + SKEL_RESPAWN_LIVES = 3; + } + + void skeleton_spawn() + { + SetName("Awakened Guardian"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/calruin/corpse2.as b/scripts/angelscript/calruin/corpse2.as new file mode 100644 index 00000000..42c4cfdf --- /dev/null +++ b/scripts/angelscript/calruin/corpse2.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Corpse2 : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + Corpse2() + { + SKEL_HP = 100; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 9; + ATTACK_DAMAGE_HIGH = 11; + NPC_GIVE_EXP = 35; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 2; + DROP_GOLD_MAX = 11; + SKEL_RESPAWN_CHANCE = 0.75; + SKEL_RESPAWN_LIVES = 3; + } + + void skeleton_spawn() + { + SetName("Enraged Skeleton"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/calruin/corpse2_once.as b/scripts/angelscript/calruin/corpse2_once.as new file mode 100644 index 00000000..b26b8af2 --- /dev/null +++ b/scripts/angelscript/calruin/corpse2_once.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Corpse2Once : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + + Corpse2Once() + { + SKEL_HP = 100; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 9; + ATTACK_DAMAGE_HIGH = 11; + NPC_GIVE_EXP = 35; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 2; + DROP_GOLD_MAX = 11; + } + + void skeleton_spawn() + { + SetName("Enraged Skeleton"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/calruin/corpse_once.as b/scripts/angelscript/calruin/corpse_once.as new file mode 100644 index 00000000..0e7717ec --- /dev/null +++ b/scripts/angelscript/calruin/corpse_once.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class CorpseOnce : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + + CorpseOnce() + { + SKEL_HP = 100; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 4; + ATTACK_DAMAGE_HIGH = 5; + NPC_GIVE_EXP = 35; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 2; + DROP_GOLD_MAX = 9; + } + + void skeleton_spawn() + { + SetName("Awakened Guardian"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/calruin/darkspid.as b/scripts/angelscript/calruin/darkspid.as new file mode 100644 index 00000000..471dcc50 --- /dev/null +++ b/scripts/angelscript/calruin/darkspid.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "monsters/spider_spitting.as" + +namespace MS +{ + +class Darkspid : CGameScript +{ + void OnSpawn() override + { + SetHealth(150); + if (!(AM_CLIPPED)) + { + SetWidth(64); + SetHeight(64); + } + if ((AM_CLIPPED)) + { + SetWidth(32); + SetHeight(20); + } + SetName("Veneficus Umbra"); + SetHearingSensitivity(7); + SetModel("monsters/fer_spider_large.mdl"); + SetModelBody(0, 2); + SetDamageResistance("all", ".8"); + } + +} + +} diff --git a/scripts/angelscript/calruin/fangtooth.as b/scripts/angelscript/calruin/fangtooth.as new file mode 100644 index 00000000..1f099359 --- /dev/null +++ b/scripts/angelscript/calruin/fangtooth.as @@ -0,0 +1,105 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Fangtooth : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_RANGE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int CAN_FLEE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int FLEE_HEALTH; + int NPC_GIVE_EXP; + string NPC_MOVE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Fangtooth() + { + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + ATTACK_DAMAGE = 5; + ATTACK_RANGE = 90; + ATTACK_HITCHANCE = 0.65; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_ATTACK1 = "monsters/rat/squeak2.wav"; + SOUND_ATTACK2 = "monsters/orc/attack2.wav"; + SOUND_ATTACK3 = "monsters/orc/attack3.wav"; + SOUND_IDLE1 = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + NPC_MOVE_TARGET = "enemy"; + CAN_FLEE = 1; + FLEE_HEALTH = 2; + FLEE_CHANCE = 0.3; + DROP_ITEM1 = "smallarms_fangstooth"; + DROP_ITEM1_CHANCE = 0.03; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetHealth(65); + SetWidth(32); + SetHeight(32); + SetName("Fang Tooth"); + SetRoam(true); + SetHearingSensitivity(3); + NPC_GIVE_EXP = 30; + SetRace("vermin"); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetAnimMoveSpeed(2.0); + SetAnimFrameRate(2.0); + BASE_FRAMERATE = 2.0; + BASE_MOVESPEED = 2.0; + } + + void bite1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, Random(4.5, 6.0), ATTACK_HITCHANCE, "slash"); + int random = RandomInt(1, 3); + if (random == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", 5, GetEntityIndex(GetOwner()), RandomInt(3, 5)); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/calruin/livingdead.as b/scripts/angelscript/calruin/livingdead.as new file mode 100644 index 00000000..457f47c8 --- /dev/null +++ b/scripts/angelscript/calruin/livingdead.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Livingdead : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + Livingdead() + { + SKEL_HP = 120; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 4; + ATTACK_DAMAGE_HIGH = 7; + NPC_GIVE_EXP = 40; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 3; + DROP_GOLD_MAX = 9; + SKEL_RESPAWN_CHANCE = 0.75; + SKEL_RESPAWN_LIVES = 2; + } + + void skeleton_spawn() + { + SetName("Living Dead"); + SetRoam(true); + SetHearingSensitivity(4); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/calruin/livingdead_once.as b/scripts/angelscript/calruin/livingdead_once.as new file mode 100644 index 00000000..cdb88958 --- /dev/null +++ b/scripts/angelscript/calruin/livingdead_once.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class LivingdeadOnce : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + + LivingdeadOnce() + { + SKEL_HP = 120; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 4; + ATTACK_DAMAGE_HIGH = 7; + NPC_GIVE_EXP = 40; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 3; + DROP_GOLD_MAX = 9; + } + + void skeleton_spawn() + { + SetName("Living Dead"); + SetRoam(true); + SetHearingSensitivity(4); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/calruin/rat.as b/scripts/angelscript/calruin/rat.as new file mode 100644 index 00000000..1483fb41 --- /dev/null +++ b/scripts/angelscript/calruin/rat.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "monsters/giantrat.as" + +namespace MS +{ + +class Rat : CGameScript +{ + float ATTACK_HITCHANCE; + int ATTACK_RANGE; + int MOVE_RANGE; + string MY_ENEMY; + int NPC_GIVE_EXP; + + Rat() + { + MOVE_RANGE = 50; + ATTACK_RANGE = 75; + ATTACK_HITCHANCE = 0.55; + MY_ENEMY = "enemy"; + } + + void OnSpawn() override + { + SetHealth(45); + SetFOV(270); + SetWidth(32); + SetHeight(32); + SetName("Corpse eater"); + SetRoam(true); + SetHearingSensitivity(4); + NPC_GIVE_EXP = 20; + SetRace("vermin"); + SetStepSize(16); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void bite1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, Random(3.5, 5.0), ATTACK_HITCHANCE, "slash"); + } + +} + +} diff --git a/scripts/angelscript/calruin/reanimate.as b/scripts/angelscript/calruin/reanimate.as new file mode 100644 index 00000000..8ce254cf --- /dev/null +++ b/scripts/angelscript/calruin/reanimate.as @@ -0,0 +1,276 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Reanimate : CGameScript +{ + string ANIM_ATTACK; + string ANIM_FLINCH; + string ANIM_GETUP; + string ANIM_IDLE; + string ANIM_IDLE_NORM; + string ANIM_RUN; + string ANIM_SIT; + string ANIM_SWING; + string ANIM_THROW; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string CYCLE_TIME; + string DID_PUSH; + int I_AM_TURNABLE; + int LAST_STOLE_HP; + int LEGIT_MAP; + string MONSTER_MODEL; + int MOVE_RANGE; + int NPC_BOSS_REGEN_RATE; + string NPC_EXP_MULTI; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + int NPC_NO_MOVE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_BROTHER; + string SOUND_HEAL; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_PUSH; + string SOUND_SPAWN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int THROW_CHANCE; + + Reanimate() + { + if ((StringToLower(GetMapName())).findFirst("calruin") == 0) + { + NPC_IS_BOSS = 1; + } + if (!(NPC_IS_BOSS)) + { + NPC_EXP_MULTI = 0.25; + } + NPC_BOSS_REGEN_RATE = 0; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_SIT = "sitidle"; + ANIM_IDLE_NORM = "idle1"; + ANIM_GETUP = "sitstand"; + ANIM_SWING = "attack3"; + ANIM_THROW = "attack2"; + ANIM_ATTACK = ANIM_SWING; + ATTACK_DAMAGE = 30; + ATTACK_RANGE = 140; + MOVE_RANGE = 65; + ATTACK_HITRANGE = 175; + ATTACK_HITCHANCE = 0.85; + ANIM_IDLE = ANIM_IDLE_NORM; + SOUND_STRUCK1 = "controller/con_pain3.wav"; + SOUND_STRUCK2 = "controller/con_pain3.wav"; + SOUND_STRUCK3 = "none"; + SOUND_PAIN = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_HEAL = "monsters/skeleton/calrian2.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_BROTHER = "monsters/skeleton/calrian.wav"; + SOUND_IDLE1 = "controller/con_attack3.wav"; + SOUND_SPAWN = "monsters/skeleton/calrian2.wav"; + SOUND_PUSH = "monsters/skeleton/calrain3.wav"; + ANIM_FLINCH = "laflinch"; + THROW_CHANCE = 30; + Precache(SOUND_DEATH); + Precache(SOUND_SPAWN); + MONSTER_MODEL = "monsters/skeleton_boss1.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + SetHealth(2000); + SetWidth(32); + SetHeight(80); + SetName("the re-animated bones of|Lord Calrian"); + SetRoam(false); + SetHearingSensitivity(8); + NPC_GIVE_EXP = 1000; + SetRace("undead"); + SetModel(MONSTER_MODEL); + SetModelBody(0, 1); + SetModelBody(1, 1); + SetDamageResistance("all", 0.65); + SetIdleAnim(ANIM_SIT); + SetMoveAnim(ANIM_SIT); + SetInvincible(true); + SetDamageResistance("holy", 1.5); + SetDamageResistance("fire", 0.25); + SetDamageResistance("cold", 0.25); + SetDamageResistance("stun", 0.6); + string MAP_NAME = GetMapName(); + LEGIT_MAP = 0; + if (MAP_NAME == "calruin") + { + LEGIT_MAP = 1; + } + if (MAP_NAME == "calruin2") + { + LEGIT_MAP = 1; + } + if ((LEGIT_MAP)) + { + int CHANCE = RandomInt(1, 3); + if (CHANCE == 1) + { + GiveItem(GetOwner(), "scroll_summon_undead"); + } + if (CHANCE == 2) + { + GiveItem(GetOwner(), "scroll2_summon_undead"); + } + if (CHANCE == 3) + { + GiveItem(GetOwner(), "scroll2_turn_undead"); + } + GiveItem(GetOwner(), "blunt_calrianmace"); + } + LAST_STOLE_HP = 10; + npcatk_suspend_ai(); + ScheduleDelayedEvent(8.0, "bring_it_on"); + } + + void bring_it_on() + { + PlayAnim("critical", ANIM_GETUP); + EmitSound(GetOwner(), 0, "x/x_recharge1.wav", 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (m_hAttackTarget == "unset") + { + if ((CanSee("enemy", 700))) + { + npcatk_settarget(GetEntityIndex(m_hLastSeen), "saw_new_enemy"); + } + } + } + + void stand_complete() + { + SetInvincible(false); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + NPC_NO_MOVE = 0; + CYCLE_TIME = CYCLE_TIME_BATTLE; + npcatk_resume_ai(); + LookAt(GetOwner()); + } + + void attack_3() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE); + if (LAST_STOLE_HP > 0) + { + LAST_STOLE_HP -= 1; + } + if (DID_PUSH == 1) + { + DID_PUSH = 0; + int I_DID_PUSH = 1; + } + if ((I_DID_PUSH)) return; + if (RandomInt(0, 1) == 0) + { + if (LAST_STOLE_HP < 3) + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + UseTrigger("endboss"); + if (!(LEGIT_MAP)) return; + EmitSound(GetOwner(), 2, SOUND_BROTHER, 10); + bm_gold_spew(10, 3, 40, 4, 20); + SayText("You're too late! ... My brother is already here!"); + } + + void game_dodamage() + { + if (!(param1)) return; + if (RandomInt(1, THROW_CHANCE) == 1) + { + PlayAnim("critical", ANIM_THROW); + EmitSound(GetOwner(), 2, SOUND_PUSH, 10); + string MY_LOC = GetMonsterProperty("origin"); + string NME_LOC = GetEntityOrigin(m_hLastStruckByMe); + float NME_DISTANCE = Distance(MY_LOC, NME_LOC); + if (NME_DISTANCE < ATTACK_HITRANGE) + { + ApplyEffect(param2, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + } + DID_PUSH = 1; + } + } + + void OnDamage(int damage) override + { + if (!((param3).findFirst("fire") >= 0)) return; + if (!(THROW_CHANCE != 10)) return; + THROW_CHANCE = 10; + ScheduleDelayedEvent(3.0, "throw_reset"); + } + + void my_target_died() + { + if (!(SOUL_TARGET == GetEntityIndex(param1))) return; + if (!(LAST_STOLE_HP == 0)) return; + string ENEMY_MAXHP = GetEntityMaxHealth(param1); + string ICE_CREAM_NAME = "Ice Wall"; + string NME_NAME = GetEntityName(m_hLastStruckByMe); + SendInfoMsg(param1, "Lord_Calrian Beware, Lord Calrian gains double your max health when he slays you!"); + SetSayTextRange(1024); + if (NME_NAME == ICE_CREAM_NAME) + { + SayText("Mmmmmmm... Ice cream!"); + } + if (NME_NAME != ICE_CREAM_NAME) + { + SayText("Not even death can save you from me!"); + } + EmitSound(GetOwner(), 2, SOUND_HEAL, 10); + ENEMY_MAXHP *= 2.0; + if (GetMonsterHP() < GetMonsterMaxHP()) + { + HealEntity(GetOwner(), ENEMY_MAXHP); + } + Effect("glow", GetOwner(), Vector3(0, 255, 0), 255, 2, 2); + LAST_STOLE_HP = 10; + } + + void throw_reset() + { + THROW_CHANCE = 30; + } + +} + +} diff --git a/scripts/angelscript/calruin/riddler1.as b/scripts/angelscript/calruin/riddler1.as new file mode 100644 index 00000000..a0760597 --- /dev/null +++ b/scripts/angelscript/calruin/riddler1.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "calruin/base_riddler.as" + +namespace MS +{ + +class Riddler1 : CGameScript +{ + string FAILED_MSG; + string RIDDLE_ANSWER; + + Riddler1() + { + FAILED_MSG = "...And here I thought *MY* death was disturbing."; + RIDDLE_ANSWER = "dark"; + } + + void riddle_question() + { + SayText("It cannot be seen, cannot be heard, cannot be felt, cannot be smelt..."); + ScheduleDelayedEvent(1, "riddle_question2"); + } + + void riddle_question2() + { + SayText("It lies behind stars and under hills and empty holes it fills..."); + ScheduleDelayedEvent(1, "riddle_question3"); + } + + void riddle_question3() + { + SayText("It comes first and follows after. It ends life, kills laughter."); + } + + void riddle_correct() + { + SayText("You may pass..."); + UseTrigger("spikedoor1"); + } + +} + +} diff --git a/scripts/angelscript/calruin/riddler2.as b/scripts/angelscript/calruin/riddler2.as new file mode 100644 index 00000000..d735ff99 --- /dev/null +++ b/scripts/angelscript/calruin/riddler2.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "calruin/base_riddler.as" + +namespace MS +{ + +class Riddler2 : CGameScript +{ + string FAILED_MSG; + string RIDDLE_ANSWER; + + Riddler2() + { + FAILED_MSG = "So very disapointing..."; + RIDDLE_ANSWER = "river"; + } + + void riddle_question() + { + SayText("What can run, yet never walks, has a mouth, yet never talks..."); + ScheduleDelayedEvent(1, "riddle_question2"); + } + + void riddle_question2() + { + SayText("...has a head, but never weeps, has a bed, but never sleeps?"); + } + + void riddle_correct() + { + SayText("Smarter than I had thought. Or are you...?"); + UseTrigger("spikedoor2"); + } + +} + +} diff --git a/scripts/angelscript/calruin/riddler3.as b/scripts/angelscript/calruin/riddler3.as new file mode 100644 index 00000000..b7eaf163 --- /dev/null +++ b/scripts/angelscript/calruin/riddler3.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "calruin/base_riddler.as" + +namespace MS +{ + +class Riddler3 : CGameScript +{ + string FAILED_MSG; + string RIDDLE_ANSWER; + + Riddler3() + { + FAILED_MSG = "Your link, strong as the others it is not, goodbye."; + RIDDLE_ANSWER = "time"; + } + + void riddle_question() + { + SayText("This thing, all things devours: the birds, the beasts, the trees, the flowers..."); + ScheduleDelayedEvent(1, "riddle_question2"); + } + + void riddle_question2() + { + SayText("It gnaws iron and bites steel. It grinds hard stones to meal..."); + ScheduleDelayedEvent(1, "riddle_question3"); + } + + void riddle_question3() + { + SayText("It slays kings, and ruins town, and beats high mountain down!"); + } + + void riddle_correct() + { + SayText("You are man... He is not man... For you he waits... For you..."); + EmitSound(GetOwner(), CHAN_VOICE, "nihilanth/nil_man_notman.wav", 10); + UseTrigger("calriandoor"); + } + +} + +} diff --git a/scripts/angelscript/calruin/spidqueen.as b/scripts/angelscript/calruin/spidqueen.as new file mode 100644 index 00000000..fe593beb --- /dev/null +++ b/scripts/angelscript/calruin/spidqueen.as @@ -0,0 +1,120 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Spidqueen : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_ACCURACY; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int MOVE_RANGE; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Spidqueen() + { + if ((StringToLower(GetMapName())).findFirst("calruin") == 0) + { + NPC_GIVE_EXP = 500; + NPC_IS_BOSS = 1; + } + else + { + NPC_GIVE_EXP = 200; + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 1.0; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ATTACK_DAMAGE = Random(8.5, 10.0); + ATTACK_RANGE = 250; + ATTACK_HITRANGE = 350; + MOVE_RANGE = 50; + ATTACK_ACCURACY = 0; + ATTACK_HITCHANCE = 1.0; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + CAN_FLEE = 0; + DROP_GOLD = 1; + DROP_GOLD_MIN = 25; + DROP_GOLD_MAX = 50; + Precache(SOUND_STRUCK1); + Precache(SOUND_STRUCK2); + Precache(SOUND_STRUCK3); + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetHealth(900); + SetWidth(120); + SetHeight(80); + SetName("Veneficus Arachnidia"); + SetRoam(true); + SetHearingSensitivity(6); + SetRace("spider"); + if (StringToLower(GetMapName()) != "helena") + { + SetModel("monsters/fer_spider_giant.mdl"); + SetModelBody(0, 2); + } + else + { + SetModel("monsters/giant_spider.mdl"); + } + SetIdleAnim("idle"); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("all", ".7"); + } + + void bite1() + { + if (RandomInt(0, 1) == 0) + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + DoDamage(m_hLastSeen, ATTACK_HITRANGE, Random(9.5, 11.0), ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/calruin/treasure_picker.as b/scripts/angelscript/calruin/treasure_picker.as new file mode 100644 index 00000000..050fa145 --- /dev/null +++ b/scripts/angelscript/calruin/treasure_picker.as @@ -0,0 +1,50 @@ +#pragma context server + +namespace MS +{ + +class TreasurePicker : CGameScript +{ + string TREASURE_CHOICE; + + void OnSpawn() override + { + SetName("Treasure Picker"); + SetInvincible(true); + SetSolid("none"); + SetRoam(false); + SetModel("none"); + int TRES_CHOICE = RandomInt(1, 100); + if (TRES_CHOICE > 50) + { + SendInfoMsg("all", "CRITICAL_ITEM_DROPPED The hellforge has summoned forth a Granite Maul"); + TREASURE_CHOICE = "blunt_granitemaul"; + } + else + { + if (TRES_CHOICE <= 15) + { + SendInfoMsg("all", "CRITICAL_ITEM_DROPPED The hellforge has summoned forth a Raven Mace"); + TREASURE_CHOICE = "blunt_ravenmace"; + } + else + { + if (TRES_CHOICE > 15) + { + SendInfoMsg("all", "CRITICAL_ITEM_DROPPED The hellforge has summoned forth a Dark Maul"); + TREASURE_CHOICE = "blunt_darkmaul"; + } + } + } + ScheduleDelayedEvent(0.1, "create_treasure"); + } + + void create_treasure() + { + SpawnItem(TREASURE_CHOICE, GetEntityOrigin(GetOwner())); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/calruin/undeadwarrior.as b/scripts/angelscript/calruin/undeadwarrior.as new file mode 100644 index 00000000..0d6f6a1b --- /dev/null +++ b/scripts/angelscript/calruin/undeadwarrior.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Undeadwarrior : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + Undeadwarrior() + { + SKEL_HP = 350; + ATTACK_HITCHANCE = 1.0; + ATTACK_DAMAGE_LOW = 10; + ATTACK_DAMAGE_HIGH = 13; + NPC_GIVE_EXP = 80; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 19; + SKEL_RESPAWN_CHANCE = 0.75; + SKEL_RESPAWN_LIVES = 3; + } + + void skeleton_spawn() + { + SetName("Fallen Knight"); + SetRoam(true); + SetHearingSensitivity(6); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/calruin/undeadwarrior_once.as b/scripts/angelscript/calruin/undeadwarrior_once.as new file mode 100644 index 00000000..752ffe72 --- /dev/null +++ b/scripts/angelscript/calruin/undeadwarrior_once.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class UndeadwarriorOnce : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + + UndeadwarriorOnce() + { + SKEL_HP = 350; + ATTACK_HITCHANCE = 1.0; + ATTACK_DAMAGE_LOW = 10; + ATTACK_DAMAGE_HIGH = 13; + NPC_GIVE_EXP = 80; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 19; + } + + void skeleton_spawn() + { + SetName("Fallen Knight"); + SetRoam(true); + SetHearingSensitivity(6); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/calruin2/game_master.as b/scripts/angelscript/calruin2/game_master.as new file mode 100644 index 00000000..d47bd08e --- /dev/null +++ b/scripts/angelscript/calruin2/game_master.as @@ -0,0 +1,26 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + int TRIGGER_COUNT; + + void calruin2_trigger_touched() + { + TRIGGER_COUNT += 1; + if (!(TRIGGER_COUNT > 1)) return; + UseTrigger("combo_on"); + ScheduleDelayedEvent(30.0, "calruin2_reset_triggers"); + TRIGGER_COUNT = 0; + } + + void calruin2_reset_triggers() + { + CallExternal("all", "calruin2_trigger_reset"); + } + +} + +} diff --git a/scripts/angelscript/calruin2/map_startup.as b/scripts/angelscript/calruin2/map_startup.as new file mode 100644 index 00000000..86ba6d00 --- /dev/null +++ b/scripts/angelscript/calruin2/map_startup.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "calruin2"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("global.map.allownight", 0); + SetGlobalVar("G_MAP_NAME", "The Calrian Ruins"); + SetGlobalVar("G_MAP_DESC", "This ruined temple is host to a great evil."); + SetGlobalVar("G_MAP_DIFF", "Levels 20-30 / HP 200-500"); + SetGlobalVar("G_WARN_HP", 200); + } + + void game_newlevel() + { + string reg.texture.name = "reflective"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.2"; + int reg.texture.reflect.range = 256; + int reg.texture.reflect.world = 1; + int reg.texture.water = 0; + // TODO: registertexture + } + +} + +} diff --git a/scripts/angelscript/calruin2/multisource_fix.as b/scripts/angelscript/calruin2/multisource_fix.as new file mode 100644 index 00000000..3ef37586 --- /dev/null +++ b/scripts/angelscript/calruin2/multisource_fix.as @@ -0,0 +1,36 @@ +#pragma context server + +namespace MS +{ + +class MultisourceFix : CGameScript +{ + string LAST_TOUCHED; + int ME_ACTIVE; + + MultisourceFix() + { + SetCallback("touch", "enable"); + SetProp(GetOwner(), "solid", 1); + } + + void OnTouch(CBaseEntity@ other) override + { + if ((ME_ACTIVE)) return; + if (!(IsValidPlayer(param1))) return; + float TIME_DIFF = GetGameTime(); + TIME_DIFF -= LAST_TOUCHED; + if (!(TIME_DIFF > 2.0)) return; + LAST_TOUCHED = GetGameTime(); + ME_ACTIVE = 1; + CallExternal(GAME_MASTER, "calruin2_trigger_touched"); + } + + void calruin2_trigger_reset() + { + ME_ACTIVE = 0; + } + +} + +} diff --git a/scripts/angelscript/challs/challsTC1.as b/scripts/angelscript/challs/challsTC1.as new file mode 100644 index 00000000..75e4186d --- /dev/null +++ b/scripts/angelscript/challs/challsTC1.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Challstc1 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(8, 13)); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "swords_bastardsword", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "mana_regen", 1, 0); + } + AddStoreItem(STORENAME, "health_lpotion", 2, 0); + AddStoreItem(STORENAME, "proj_bolt_silver", 25, 0, 0, 25); + } + +} + +} diff --git a/scripts/angelscript/challs/challsTC2.as b/scripts/angelscript/challs/challsTC2.as new file mode 100644 index 00000000..17c9234c --- /dev/null +++ b/scripts/angelscript/challs/challsTC2.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Challstc2 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(6, 12)); + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "blunt_greatmaul", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_katana2", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "swords_katana3", 1, 0); + } + AddStoreItem(STORENAME, "proj_bolt_iron", 25, 0, 0, 25); + if (RandomInt(1, 8) == 1) + { + int SCROLL_TOME = RandomInt(1, 2); + if (SCROLL_TIME == 1) + { + AddStoreItem(STORENAME, "scroll2_volcano", 1, 0); + } + if (SCROLL_TIME == 2) + { + AddStoreItem(STORENAME, "scroll_volcano", 1, 0); + } + } + } + +} + +} diff --git a/scripts/angelscript/challs/map_startup.as b/scripts/angelscript/challs/map_startup.as new file mode 100644 index 00000000..c3775287 --- /dev/null +++ b/scripts/angelscript/challs/map_startup.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "challs"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Halls of Charthane"); + SetGlobalVar("G_MAP_DESC", "Once a hall of heroes, now a den of evi.l"); + SetGlobalVar("G_MAP_DIFF", "Levels 15-25 / 200-450hp"); + SetGlobalVar("G_WARN_HP", 200); + } + + void game_newlevel() + { + SetGlobalVar("global.map.allownight", 0); + } + +} + +} diff --git a/scripts/angelscript/chapel/map_startup.as b/scripts/angelscript/chapel/map_startup.as new file mode 100644 index 00000000..c3348418 --- /dev/null +++ b/scripts/angelscript/chapel/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "chapel"; + MAP_WEATHER = "clear;clear;clear;storm;clear;rain"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "The Chapel by CSS"); + SetGlobalVar("G_MAP_DESC", "Winding wildlands conceal a fallen temple."); + SetGlobalVar("G_MAP_DIFF", "Levels 5-15 / 35-200hp"); + SetGlobalVar("G_WARN_HP", 0); + } + +} + +} diff --git a/scripts/angelscript/chests/ara.as b/scripts/angelscript/chests/ara.as new file mode 100644 index 00000000..6d92405d --- /dev/null +++ b/scripts/angelscript/chests/ara.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Ara : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("armor_helm_undead", 12); + } + + void chest_additems() + { + add_gold((50 * "game.playersnb")); + chest_add_hpot_mpot(); + add_good_item(); + add_great_item(); + if (RandomInt(1, 6) == 1) + { + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/bag_o_gold_10.as b/scripts/angelscript/chests/bag_o_gold_10.as new file mode 100644 index 00000000..dc68ecbb --- /dev/null +++ b/scripts/angelscript/chests/bag_o_gold_10.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "chests/bag_o_gold_base.as" + +namespace MS +{ + +class BagOGold10 : CGameScript +{ + int GOLD_AMT; + + BagOGold10() + { + GOLD_AMT = RandomInt(7, 10); + } + +} + +} diff --git a/scripts/angelscript/chests/bag_o_gold_25.as b/scripts/angelscript/chests/bag_o_gold_25.as new file mode 100644 index 00000000..2f0eb878 --- /dev/null +++ b/scripts/angelscript/chests/bag_o_gold_25.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "chests/bag_o_gold_base.as" + +namespace MS +{ + +class BagOGold25 : CGameScript +{ + int GOLD_AMT; + + BagOGold25() + { + GOLD_AMT = RandomInt(20, 25); + } + +} + +} diff --git a/scripts/angelscript/chests/bag_o_gold_50.as b/scripts/angelscript/chests/bag_o_gold_50.as new file mode 100644 index 00000000..b524c2b8 --- /dev/null +++ b/scripts/angelscript/chests/bag_o_gold_50.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "chests/bag_o_gold_base.as" + +namespace MS +{ + +class BagOGold50 : CGameScript +{ + int GOLD_AMT; + + BagOGold50() + { + GOLD_AMT = RandomInt(40, 50); + } + +} + +} diff --git a/scripts/angelscript/chests/bag_o_gold_base.as b/scripts/angelscript/chests/bag_o_gold_base.as new file mode 100644 index 00000000..8fe61c00 --- /dev/null +++ b/scripts/angelscript/chests/bag_o_gold_base.as @@ -0,0 +1,104 @@ +#pragma context server + +namespace MS +{ + +class BagOGoldBase : CGameScript +{ + string ANIM_CLOSE; + string ANIM_IDLE; + string ANIM_OPEN; + string GOLD_AMT; + string NEW_NAME; + string NPC_DO_EVENTS; + int WAS_USED; + + BagOGoldBase() + { + ANIM_OPEN = "idle"; + ANIM_CLOSE = "idle"; + ANIM_IDLE = "idle"; + } + + void game_dynamically_created() + { + ScheduleDelayedEvent(90.0, "fade_away"); + if (!(param1 != "PARAM1")) return; + GOLD_AMT = param1; + } + + void OnSpawn() override + { + SetName("Bag of Gold"); + SetModel("misc/treasure.mdl"); + SetModelBody(0, 3); + SetSolid("none"); + SetHealth(1); + SetInvincible(2); + SetWidth(20); + SetHeight(30); + SetIdleAnim(ANIM_IDLE); + EmitSound(GetOwner(), 0, "misc/gold.wav", 10); + Effect("glow", GetOwner(), Vector3(230, 210, 80), 64, 3, 3); + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + if ((WAS_USED)) return; + WAS_USED = 1; + CallExternal(param1, "ext_addgold", GOLD_AMT); + EmitSound(GetOwner(), 0, "misc/gold.wav", 10); + remove_me(); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void game_postspawn() + { + NEW_NAME = param1; + if (NEW_NAME != "default") + { + SetName(NEW_NAME); + } + if ((param4).findFirst(PARAM) == 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + NPC_DO_EVENTS = param4; + ScheduleDelayedEvent(0.01, "run_addparams"); + } + + void run_addparams() + { + for (int i = 0; i < GetTokenCount(NPC_DO_EVENTS, ";"); i++) + { + npcatk_do_events(); + } + } + + void npcatk_do_events() + { + string N_EVENT = i; + string EVENT_NAME = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + N_EVENT += 1; + if (N_EVENT <= GetTokenCount(NPC_DO_EVENTS, ";")) + { + string NEXT_EVENT = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + } + LogDebug("doing token event EVENT_NAME"); + EVENT_NAME(NEXT_EVENT); + } + + void fade_away() + { + if ((BAG_NO_DELETE)) return; + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/chests/bank1.as b/scripts/angelscript/chests/bank1.as new file mode 100644 index 00000000..5a97e5e6 --- /dev/null +++ b/scripts/angelscript/chests/bank1.as @@ -0,0 +1,444 @@ +#pragma context server + +#include "chests/bank1/filter.as" +#include "chests/bank1/deposit.as" +#include "chests/bank1/withdraw.as" + +namespace MS +{ + +class Bank1 : CGameScript +{ + string ANIM_CLOSE; + string ANIM_IDLE; + string ANIM_OPEN; + string BANK_HAS; + int BANK_MAX; + string BANK_PREFIX; + string BANK_STRINGS; + string FREE_BANK; + int MAX_AMMO_IN_ONE_SLOT; + int MAX_BANK_STRING; + int MAX_IN_ONE_TRANSACTION; + int MAX_SWIGS_IN_ONE_SLOT; + int NPC_ECHO_ITEMS; + int NPC_NO_REPORT_ITEMS; + int PLAYER_WITHDRAWING; + string SCAN_AREA; + string STACK_REMAINDER; + + Bank1() + { + ANIM_IDLE = "idle"; + ANIM_CLOSE = "close"; + ANIM_OPEN = "open"; + BANK_PREFIX = "b"; + BANK_MAX = 10; + MAX_BANK_STRING = 255; + MAX_IN_ONE_TRANSACTION = 100; + MAX_AMMO_IN_ONE_SLOT = 9999; + MAX_SWIGS_IN_ONE_SLOT = 20; + NPC_ECHO_ITEMS = 1; + NPC_NO_REPORT_ITEMS = 1; + PLAYER_WITHDRAWING = 0; + } + + void OnSpawn() override + { + SetName("Galat's Wondrous Chest of Storage"); + SetHealth(1); + SetInvincible(true); + SetWidth(20); + SetHeight(30); + SetModel("misc/treasure.mdl"); + SetModelBody(0, 2); + SetIdleAnim(ANIM_IDLE); + SetGravity(0.1); + SetNoPush(true); + for (int i = 0; i < BANK_MAX; i++) + { + generate_bank_strings(); + } + SetMenuAutoOpen(1); + } + + void generate_bank_strings() + { + string L_STR = /* TODO: $stradd */ $stradd(BANK_PREFIX, i); + if (BANK_STRINGS == "BANK_STRINGS") + { + BANK_STRINGS = L_STR; + } + else + { + if (BANK_STRINGS.length() > 0) BANK_STRINGS += ";"; + BANK_STRINGS += L_STR; + } + } + + void game_menu_getoptions() + { + string L_PLAYER = param1; + string L_ITEMS = GetEntityProperty(L_PLAYER, "scriptvar"); + if (L_ITEMS.length() > 0) L_ITEMS += ";"; + L_ITEMS += GetEntityProperty(L_PLAYER, "scriptvar"); + string L_ITEMS = "func_filter_items"(L_PLAYER, L_ITEMS); + if (L_ITEMS == "0") + { + SendInfoMsg(L_PLAYER, "Galat's wondrous Chest of Storage Be sure to place any items you wish to store in your hands."); + if (NUM_REMOVED > 0) + { + string reg.mitem.title = "Chest is Full"; + string reg.mitem.type = "disabled"; + } + } + else + { + for (int i = 0; i < GetTokenCount(L_ITEMS, ";"); i++) + { + add_deposit_options(L_ITEMS); + } + } + if (("func_check_bank_has"(L_PLAYER))) + { + if (GetEntityProperty(L_PLAYER, "numitems") >= G_MAX_ITEMS) + { + SendInfoMsg(L_PLAYER, "Can't Withdaw Items Your inventory is full."); + string reg.mitem.title = "(Inventory Full)"; + string reg.mitem.type = "disabled"; + } + else + { + if (!(PLAYER_WITHDRAWING)) + { + string reg.mitem.title = "Withdraw Items"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "withdraw_items"; + } + else + { + string L_MSG = GetEntityName(GetOwner()); + SendColoredMessage(GetEntityIndex(L_PLAYER), L_MSG); + string reg.mitem.title = "Withdraw Items"; + string reg.mitem.type = "disabled"; + } + } + } + } + + void add_deposit_options() + { + string L_ITEM = GetToken(param1, i, ";"); + string L_ITEM_TITLE = "Deposit "; + string L_SCRIPTNAME_STRING = "func_make_string"(L_ITEM); + string L_DEPOSIT_AMT = GetToken(L_SCRIPTNAME_STRING, 1, ";"); + if (L_DEPOSIT_AMT > 0) + { + L_ITEM_TITLE += " ("; + L_ITEM_TITLE += L_DEPOSIT_AMT; + L_ITEM_TITLE += ")"; + } + string reg.mitem.title = L_ITEM_TITLE; + string reg.mitem.type = "callback"; + string reg.mitem.data = L_ITEM; + string reg.mitem.callback = "deposit_item"; + } + + void trade_success() + { + open_chest(); + } + + void trade_done() + { + close_chest(); + erase_store(); + PLAYER_WITHDRAWING = 0; + } + + void erase_store() + { + NpcStoreRemove(STORENAME); + } + + void game_dynamically_created() + { + string L_YAW = GetEntityProperty(param1, "angles.yaw"); + SetSolid("none"); + if (!(IsValidPlayer(param1))) + { + spawn_in(L_YAW); + } + else + { + string OTHER_CHEST = FindEntityByName("galat_bank1"); + if (((OTHER_CHEST !is null))) + { + SetEntityOrigin(OTHER_CHEST, GetEntityOrigin(GetOwner())); + CallExternal(OTHER_CHEST, "spawn_in", /* TODO: $neg */ $neg(L_YAW)); + DeleteEntity(GetOwner()); + } + else + { + SetName("galat_bank1"); + spawn_in(/* TODO: $neg */ $neg(L_YAW)); + } + } + } + + void spawn_in() + { + string L_YAW = param1; + EmitSound(GetOwner(), 0, "magic/spawn.wav", 7); + SetAngles("face"); + CallExternal(GAME_MASTER, "gm_fade_in", GetEntityIndex(GetOwner()), 5); + SCAN_AREA = FindEntitiesInSphere("any", 64); + if (!(SCAN_AREA != "none")) return; + for (int i = 0; i < GetTokenCount(SCAN_AREA, ";"); i++) + { + move_monsters(); + } + } + + void move_monsters() + { + string CUR_TARG = GetToken(SCAN_AREA, i, ";"); + if ((IsValidPlayer(CUR_TARG))) return; + if ((GetEntityProperty(CUR_TARG, "scriptvar"))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 110))); + } + + void fade_in_done() + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + + void open_chest() + { + EmitSound(GetOwner(), 2, "Items/creak.wav", 10); + PlayAnim("hold", ANIM_OPEN); + } + + void close_chest() + { + PlayAnim("once", ANIM_CLOSE); + } + + void func_get_free_bank() + { + string L_PLAYER = param1; + string L_ITEM = param2; + for (int i = 0; i < BANK_MAX; i++) + { + free_bank_looper(L_PLAYER, L_ITEM); + } + return; + return; + } + + void free_bank_looper() + { + if (i == 0) + { + FREE_BANK = 0; + } + string L_PLAYER = param1; + string L_ITEM = param2; + string L_ITEM_SCRIPTNAME = GetEntityProperty(param2, "itemname"); + string L_ITEM_STRING = "func_make_string"(L_ITEM); + string L_BANK = GetToken(BANK_STRINGS, i, ";"); + string L_BANK_CONTENTS = GetPlayerQuestData(L_PLAYER, L_BANK); + string L_NEW_BANK_CONTENTS = "func_stack_quantity"(L_BANK_CONTENTS, L_ITEM_STRING); + if (L_NEW_BANK_CONTENTS != L_BANK_CONTENTS) + { + FREE_BANK = L_BANK; + break; + } + else + { + string L_RESULT = ((L_BANK_CONTENTS).length() + (L_ITEM_STRING).length()); + L_RESULT += 1; + if (L_RESULT <= MAX_BANK_STRING) + { + FREE_BANK = L_BANK; + break; + } + } + } + + void func_check_bank_has() + { + string L_PLAYER = param1; + string L_ITEM_SCRIPTNAME = param2; + if (L_ITEM_SCRIPTNAME == "PARAM2") + { + for (int i = 0; i < BANK_MAX; i++) + { + bank_has_anything_loop(L_PLAYER); + } + } + else + { + for (int i = 0; i < BANK_MAX; i++) + { + bank_has_item_loop(L_PLAYER, L_ITEM_SCRIPTNAME); + } + } + return; + return; + } + + void bank_has_anything_loop() + { + if (i == 0) + { + BANK_HAS = 0; + } + string L_BANK_SLOT = GetToken(BANK_STRINGS, i, ";"); + string L_BANK_CONTENTS = GetPlayerQuestData(param1, L_BANK_SLOT); + if ((L_BANK_CONTENTS).length() > 1) + { + BANK_HAS = 1; + break; + } + } + + void bank_has_item_loop() + { + if (i == 0) + { + BANK_HAS = 0; + } + string L_BANK_SLOT = GetToken(BANK_STRINGS, i, ";"); + string L_BANK_CONTENTS = GetPlayerQuestData(param1, L_BANK_SLOT); + string L_IDX = FindToken(L_BANK_CONTENTS, param2, ";"); + if (L_IDX != -1) + { + BANK_HAS = L_BANK_SLOT; + break; + } + } + + void func_stack_quantity() + { + string L_BANK_CONTENTS = param1; + string L_SCRIPTNAME_STRING = param2; + STACK_REMAINDER = GetToken(L_SCRIPTNAME_STRING, 1, ";"); + if (STACK_REMAINDER == 0) + { + STACK_REMAINDER = 1; + } + string L_ITEM_SCRIPTNAME = GetToken(L_SCRIPTNAME_STRING, 0, ";"); + int L_MAX_QUANTITY = 1; + if ((/* TODO: $get_item_table */ $get_item_table(L_ITEM_SCRIPTNAME, "is_projectile"))) + { + string L_MAX_QUANTITY = MAX_AMMO_IN_ONE_SLOT; + } + else + { + if ((/* TODO: $get_item_table */ $get_item_table(L_ITEM_SCRIPTNAME, "is_drinkable"))) + { + string L_MAX_QUANTITY = MAX_SWIGS_IN_ONE_SLOT; + } + } + if (L_MAX_QUANTITY > 1) + { + string L_EXISTING_IDX = FindToken(L_BANK_CONTENTS, L_ITEM_SCRIPTNAME, ";"); + if (L_EXISTING_IDX != -1) + { + string L_EXISTING_QUANTITY = "func_get_stored_quantity"(L_BANK_CONTENTS, L_EXISTING_IDX); + if (L_EXISTING_QUANTITY < L_MAX_QUANTITY) + { + int L_INSERT_QUANTITY = 1; + string L_EXISTING_SCRIPTNAME_STRING = L_ITEM_SCRIPTNAME; + if (L_EXISTING_QUANTITY != 1) + { + int L_INSERT_QUANTITY = 0; + if (L_EXISTING_SCRIPTNAME_STRING.length() > 0) L_EXISTING_SCRIPTNAME_STRING += ";"; + L_EXISTING_SCRIPTNAME_STRING += GetToken(L_BANK_CONTENTS, (L_EXISTING_IDX + 1), ";"); + } + L_EXISTING_QUANTITY += STACK_REMAINDER; + int L_REMAINDER = 0; + if (L_EXISTING_QUANTITY > L_MAX_QUANTITY) + { + string L_REMAINDER = (L_EXISTING_QUANTITY - L_MAX_QUANTITY); + string L_EXISTING_QUANTITY = L_MAX_QUANTITY; + } + string L_NEW_SCRIPTNAME_STRING = L_ITEM_SCRIPTNAME; + string L_BANK_CONTENTS_LEN = (L_BANK_CONTENTS).length(); + L_BANK_CONTENTS_LEN -= (L_EXISTING_SCRIPTNAME_STRING).length(); + L_BANK_CONTENTS_LEN += (L_NEW_SCRIPTNAME_STRING).length(); + if (L_BANK_CONTENTS_LEN <= MAX_BANK_STRING) + { + if ((L_INSERT_QUANTITY)) + { + SetToken(L_BANK_CONTENTS, L_EXISTING_IDX, L_NEW_SCRIPTNAME_STRING, ";"); + } + else + { + SetToken(L_BANK_CONTENTS, (L_EXISTING_IDX + 1), int(L_EXISTING_QUANTITY), ";"); + } + STACK_REMAINDER = L_REMAINDER; + } + } + } + } + return; + return; + } + + void func_make_string() + { + string L_ITEM = param1; + string L_ITEM_SCRIPTNAME = GetEntityProperty(param1, "itemname"); + int L_QUANTITY = 1; + if ((GetEntityProperty(L_ITEM, "is_projectile"))) + { + string L_QUANTITY = GetEntityProperty(L_ITEM, "quantity"); + if (L_QUANTITY > MAX_IN_ONE_TRANSACTION) + { + string L_QUANTITY = MAX_IN_ONE_TRANSACTION; + } + } + else + { + if ((GetEntityProperty(L_ITEM, "is_drinkable"))) + { + string L_QUANTITY = GetEntityProperty(L_ITEM, "quality"); + } + } + if (L_QUANTITY > 1) + { + if (L_ITEM_SCRIPTNAME.length() > 0) L_ITEM_SCRIPTNAME += ";"; + L_ITEM_SCRIPTNAME += L_QUANTITY; + } + return; + return; + } + + void func_get_stored_quantity() + { + string L_BANK_CONTENTS = param1; + string L_QUANTITY = (param2 + 1); + string L_QUANTITY = GetToken(L_BANK_CONTENTS, L_QUANTITY, ";"); + if (L_QUANTITY == /* TODO: $num */ $num(L_QUANTITY)) + { + if (L_QUANTITY == 0) + { + int L_QUANTITY = 1; + } + } + else + { + int L_QUANTITY = 1; + } + return; + return; + } + +} + +} diff --git a/scripts/angelscript/chests/bank1/deposit.as b/scripts/angelscript/chests/bank1/deposit.as new file mode 100644 index 00000000..e43f5241 --- /dev/null +++ b/scripts/angelscript/chests/bank1/deposit.as @@ -0,0 +1,103 @@ +#pragma context server + +namespace MS +{ + +class Deposit : CGameScript +{ + void deposit_item() + { + string L_PLAYER = param1; + string L_ITEM = param2; + string L_ITEM = "func_filter_items"(L_PLAYER, L_ITEM); + if (L_ITEM != "0") + { + string L_FREE_BANK = "func_get_free_bank"(L_PLAYER, L_ITEM); + if (L_FREE_BANK != "0") + { + string L_BANK_CONTENTS = GetPlayerQuestData(L_PLAYER, L_FREE_BANK); + if ((L_BANK_CONTENTS).length() == 0) + { + int L_BANK_CONTENTS = 0; + } + string L_ITEM_SCRIPTNAME_STRING = "func_make_string"(L_ITEM); + string L_NEW_BANK_CONTENTS = "func_stack_quantity"(L_BANK_CONTENTS, L_ITEM_SCRIPTNAME_STRING); + if (L_NEW_BANK_CONTENTS != L_BANK_CONTENTS) + { + string L_BANK_CONTENTS = L_NEW_BANK_CONTENTS; + } + else + { + if (L_BANK_CONTENTS == "0") + { + string L_BANK_CONTENTS = L_ITEM_SCRIPTNAME_STRING; + } + else + { + if (L_BANK_CONTENTS.length() > 0) L_BANK_CONTENTS += ";"; + L_BANK_CONTENTS += L_ITEM_SCRIPTNAME_STRING; + } + } + string L_NUM_STORING = GetToken(L_ITEM_SCRIPTNAME_STRING, 1, ";"); + if (L_NUM_STORING == 0) + { + int L_NUM_STORING = 1; + } + if (STACK_REMAINDER != L_NUM_STORING) + { + string L_NUM_STORING = (L_NUM_STORING - STACK_REMAINDER); + } + if ((GetEntityProperty(L_ITEM, "is_projectile"))) + { + string L_FINAL_AMT = GetEntityProperty(L_ITEM, "quantity"); + L_FINAL_AMT -= L_NUM_STORING; + string L_STR = "You add "; + SendColoredMessage(L_PLAYER, L_STR); + if (L_FINAL_AMT > 0) + { + // TODO: setquantity L_ITEM L_FINAL_AMT + } + else + { + DeleteEntity(L_ITEM); + } + } + else + { + if ((GetEntityProperty(L_ITEM, "is_drinkable"))) + { + string L_FINAL_AMT = GetEntityProperty(L_ITEM, "quality"); + L_FINAL_AMT -= L_NUM_STORING; + string L_SWIGS = "swig"; + if (L_NUM_STORING > 1) + { + L_SWIGS += "s"; + } + string L_STR = "You add "; + SendColoredMessage(L_PLAYER, L_STR); + if (L_FINAL_AMT > 0) + { + // TODO: setquality L_ITEM L_FINAL_AMT + } + else + { + DeleteEntity(L_ITEM); + } + } + else + { + DeleteEntity(L_ITEM); + } + } + SetPlayerQuestData(L_PLAYER, L_FREE_BANK); + string L_MSG = "You add your "; + SendInfoMsg(L_PLAYER, GetEntityName(GetOwner()) + L_MSG); + ScheduleDelayedEvent(0.1, "open_chest"); + ScheduleDelayedEvent(0.55, "close_chest"); + } + } + } + +} + +} diff --git a/scripts/angelscript/chests/bank1/filter.as b/scripts/angelscript/chests/bank1/filter.as new file mode 100644 index 00000000..9d78c28a --- /dev/null +++ b/scripts/angelscript/chests/bank1/filter.as @@ -0,0 +1,106 @@ +#pragma context server + +namespace MS +{ + +class Filter : CGameScript +{ + string FILTER_REJECTS; + string FILTER_RESULT; + int NUM_REMOVED; + + Filter() + { + FILTER_REJECTS = "fist_bare;pack_;sheath_;magic_hand_;item_tk_"; + } + + void func_filter_items() + { + string L_PLAYER = param1; + string L_ITEMS = param2; + for (int i = 0; i < GetTokenCount(L_ITEMS, ";"); i++) + { + filter_by_reject(L_ITEMS); + } + string L_ITEMS = FILTER_RESULT; + NUM_REMOVED = 0; + if (!((L_ITEMS).length())) + { + SendColoredMessage(L_PLAYER, "Galat's Storage cannot deposit tickets or containers."); + } + for (int i = 0; i < GetTokenCount(L_ITEMS, ";"); i++) + { + filter_by_space(L_PLAYER, L_ITEMS); + } + string L_ITEMS = FILTER_RESULT; + return; + return; + } + + void filter_by_reject() + { + string L_ITEM_IDX = i; + if (L_ITEM_IDX == 0) + { + FILTER_RESULT = param1; + NUM_REMOVED = 0; + } + for (int i = 0; i < GetTokenCount(FILTER_REJECTS, ";"); i++) + { + reject_looper(L_ITEM_IDX); + } + } + + void reject_looper() + { + int L_REMOVE = 0; + string L_IDX = param1; + L_IDX -= NUM_REMOVED; + string L_ITEM_SCRIPTNAME = GetToken(FILTER_RESULT, L_IDX, ";"); + if (!((L_ITEM_SCRIPTNAME !is null))) + { + int L_REMOVE = 1; + } + if ((GetEntityProperty(L_ITEM_SCRIPTNAME, "scriptvar"))) + { + int L_REMOVE = 1; + } + string L_ITEM_SCRIPTNAME = GetEntityProperty(L_ITEM_SCRIPTNAME, "itemname"); + string L_FILTER = GetToken(FILTER_REJECTS, i, ";"); + if ((L_ITEM_SCRIPTNAME).findFirst(L_FILTER) >= 0) + { + int L_REMOVE = 1; + } + if ((L_REMOVE)) + { + RemoveToken(FILTER_RESULT, L_IDX, ";"); + NUM_REMOVED += 1; + break; + } + } + + void filter_by_space() + { + string L_ITEM_IDX = i; + if (L_ITEM_IDX == 0) + { + FILTER_RESULT = param2; + NUM_REMOVED = 0; + } + L_ITEM_IDX -= NUM_REMOVED; + int L_REMOVE = 0; + string L_PLAYER = param1; + string L_ITEM = GetToken(FILTER_RESULT, L_ITEM_IDX, ";"); + string L_BANK = "func_get_free_bank"(L_PLAYER, L_ITEM); + if (L_BANK == "0") + { + string L_STR = "Your bank is too full to fit "; + SendColoredMessage(L_PLAYER, L_STR); + RemoveToken(FILTER_RESULT, L_ITEM_IDX, ";"); + NUM_REMOVED += 1; + } + } + +} + +} diff --git a/scripts/angelscript/chests/bank1/withdraw.as b/scripts/angelscript/chests/bank1/withdraw.as new file mode 100644 index 00000000..0e412253 --- /dev/null +++ b/scripts/angelscript/chests/bank1/withdraw.as @@ -0,0 +1,151 @@ +#pragma context server + +namespace MS +{ + +class Withdraw : CGameScript +{ + string PLAYER_WITHDRAWING; + string STORENAME; + + void withdraw_items() + { + if (!(PLAYER_WITHDRAWING)) + { + PLAYER_WITHDRAWING = param1; + STORENAME = "galat_"; + // TODO: createstore STORENAME + for (int i = 0; i < BANK_MAX; i++) + { + build_stores(GetEntityIndex(param1)); + } + // TODO: offerstore STORENAME GetEntityIndex(param1) inv trade + } + else + { + string L_MSG = GetEntityName(GetOwner()); + SendColoredMessage(GetEntityIndex(param1), L_MSG); + } + } + + void build_stores() + { + string L_BANK = GetToken(BANK_STRINGS, i, ";"); + string L_BANK_CONTENTS = GetPlayerQuestData(param1, L_BANK); + if ((L_BANK_CONTENTS).length() > 1) + { + for (int i = 0; i < GetTokenCount(L_BANK_CONTENTS, ";"); i++) + { + add_to_chest(L_BANK_CONTENTS); + } + } + } + + void add_to_chest() + { + string L_BANK_CONTENTS = param1; + string L_ITEM_SCRIPTNAME = GetToken(L_BANK_CONTENTS, i, ";"); + string L_QUANTITY = "func_get_stored_quantity"(L_BANK_CONTENTS, i); + if (L_QUANTITY > 1) + { + if ((/* TODO: $get_item_table */ $get_item_table(L_ITEM_SCRIPTNAME, "is_projectile"))) + { + string L_MAX_STACK = MAX_IN_ONE_TRANSACTION; + } + else + { + string L_MAX_STACK = /* TODO: $get_item_table */ $get_item_table(L_ITEM_SCRIPTNAME, "quality"); + } + string L_STACKS = (L_QUANTITY / L_MAX_STACK); + if (L_STACKS > int(L_STACKS)) + { + L_QUANTITY %= L_MAX_STACK; + AddStoreItem(STORENAME, L_ITEM_SCRIPTNAME, L_QUANTITY, 0, 0, L_QUANTITY); + } + for (int i = 0; i < int(L_STACKS); i++) + { + add_stack_to_chest(L_ITEM_SCRIPTNAME, L_MAX_STACK); + } + } + else + { + AddStoreItem(STORENAME, L_ITEM_SCRIPTNAME, L_QUANTITY, 0, 0, L_QUANTITY); + } + } + + void add_stack_to_chest() + { + AddStoreItem(STORENAME, param1, param2, 0, 0, param2); + } + + void ext_player_got_item() + { + string L_ITEM = param1; + string L_ITEM_SCRIPTNAME = GetEntityProperty(L_ITEM, "itemname"); + string L_PLAYER = param2; + string L_ITEM_FOUND = "func_check_bank_has"(L_PLAYER, L_ITEM_SCRIPTNAME); + if (L_ITEM_FOUND != "0") + { + string L_BANK = GetToken(L_ITEM_FOUND, 0, ";"); + string L_BANK_STR = GetPlayerQuestData(L_PLAYER, L_BANK); + string L_ITEM_IDX = GetToken(L_ITEM_FOUND, 1, ";"); + string L_QUANTITY_STORED = "func_get_stored_quantity"(L_BANK_STR, L_ITEM_IDX); + string L_QUANTITY_WITHDRAWING = L_QUANTITY_STORED; + if (L_QUANTITY_STORED > 1) + { + string L_MAX_TRANSACTION = MAX_IN_ONE_TRANSACTION; + if ((GetEntityProperty(L_ITEM, "is_drinkable"))) + { + string L_MAX_TRANSACTION = GetEntityProperty(L_ITEM, "quality"); + } + if (L_QUANTITY_WITHDRAWING > L_MAX_TRANSACTION) + { + string L_QUANTITY_WITHDRAWING = L_MAX_TRANSACTION; + } + L_QUANTITY_STORED -= L_QUANTITY_WITHDRAWING; + if (L_QUANTITY_STORED > 1) + { + SetToken(L_BANK_STR, (L_ITEM_IDX + 1), int(L_QUANTITY_STORED), ";"); + } + else + { + if (L_QUANTITY_STORED == 1) + { + RemoveToken(L_BANK_STR, (L_ITEM_IDX + 1), ";"); + } + else + { + RemoveToken(L_BANK_STR, L_ITEM_IDX, ";"); + RemoveToken(L_BANK_STR, L_ITEM_IDX, ";"); + } + } + } + else + { + RemoveToken(L_BANK_STR, L_ITEM_IDX, ";"); + } + if ((GetEntityProperty(L_ITEM, "is_projectile"))) + { + // TODO: setquantity L_ITEM L_QUANTITY_WITHDRAWING + } + else + { + if ((GetEntityProperty(L_ITEM, "is_drinkable"))) + { + // TODO: setquality L_ITEM L_QUANTITY_WITHDRAWING + // TODO: setquantity L_ITEM 1 + } + } + SetPlayerQuestData(L_PLAYER, L_BANK); + } + else + { + LogDebug("Couldn't find item!"); + CallExternal(L_ITEM, "item_banked"); + DeleteEntity(L_ITEM); + } + } + +} + +} diff --git a/scripts/angelscript/chests/barnum_final.as b/scripts/angelscript/chests/barnum_final.as new file mode 100644 index 00000000..e35fbd47 --- /dev/null +++ b/scripts/angelscript/chests/barnum_final.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class BarnumFinal : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("swords_volcano", 15); + tc_add_artifact("shields_urdual", 15); + } + + void chest_additems() + { + add_gold((50 * "game.playersnb")); + chest_add_hpot_mpot(); + add_good_item(); + add_good_item(); + if (RandomInt(1, 2) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_great_item(); + } + if (RandomInt(1, 4) == 1) + { + add_great_item(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/barnum_jump.as b/scripts/angelscript/chests/barnum_jump.as new file mode 100644 index 00000000..5c9ec06c --- /dev/null +++ b/scripts/angelscript/chests/barnum_jump.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class BarnumJump : CGameScript +{ + void chest_additems() + { + SetGold((50 * "game.playersnb")); + chest_add_hpot_mpot(); + add_good_item(); + add_good_item(); + AddStoreItem(STORENAME, "mana_resist_fire", 1, 0); + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + add_good_item(); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORENAME, "mana_immune_poison", 1, 0); + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/base_quiver_of.as b/scripts/angelscript/chests/base_quiver_of.as new file mode 100644 index 00000000..f12d8aca --- /dev/null +++ b/scripts/angelscript/chests/base_quiver_of.as @@ -0,0 +1,120 @@ +#pragma context server + +namespace MS +{ + +class BaseQuiverOf : CGameScript +{ + string BQ_BUNDLE_SIZE; + int BQ_CUSTOM; + string BQ_QUIVER_TYPE; + int IS_QUIVER; + string NEW_NAME; + string NPC_DO_EVENTS; + + BaseQuiverOf() + { + IS_QUIVER = 1; + } + + void OnSpawn() override + { + SetHealth(1); + SetInvincible(2); + SetName("Quiver"); + SetWidth(20); + SetHeight(30); + SetModel("weapons/bows/quiver_floor.mdl"); + SetSolid("trigger"); + EmitSound(GetOwner(), 0, "player/hitground2.wav", 10); + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + if (BQ_QUIVER_TYPE == "BQ_QUIVER_TYPE") + { + int IS_ERROR = 1; + } + if ((BQ_QUIVER_TYPE).findFirst(PARAM) == 0) + { + int IS_ERROR = 1; + } + if ((IS_ERROR)) + { + string OUT_MSG = "Quiver type invalid or not set ("; + OUT_MSG += BQ_QUIVER_TYPE; + OUT_MSG += ")"; + SendInfoMsg(param1, "QUIVER ERROR " + OUT_MSG); + } + // TODO: offer PARAM1 BQ_QUIVER_TYPE BQ_BUNDLE_SIZE + DeleteEntity(GetOwner()); + } + + void fade_away() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void game_dynamically_created() + { + if ((param1).findFirst(PARAM) == 0) + { + set_type(param1, param2); + } + ScheduleDelayedEvent(30.0, "fade_away"); + } + + void game_postspawn() + { + NEW_NAME = param1; + if (NEW_NAME != "default") + { + SetName(NEW_NAME); + } + if ((param4).findFirst(PARAM) == 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + NPC_DO_EVENTS = param4; + ScheduleDelayedEvent(0.01, "run_addparams"); + } + + void run_addparams() + { + for (int i = 0; i < GetTokenCount(NPC_DO_EVENTS, ";"); i++) + { + npcatk_do_events(); + } + } + + void npcatk_do_events() + { + string N_EVENT = i; + string EVENT_NAME = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + N_EVENT += 1; + if (N_EVENT <= GetTokenCount(NPC_DO_EVENTS, ";")) + { + string NEXT_EVENT = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + } + LogDebug("doing token event EVENT_NAME"); + EVENT_NAME(NEXT_EVENT); + } + + void set_type() + { + BQ_CUSTOM = 1; + BQ_QUIVER_TYPE = param1; + if ((param2).findFirst(PARAM) == 0) + { + BQ_BUNDLE_SIZE = param2; + } + else + { + BQ_BUNDLE_SIZE = 30; + } + } + +} + +} diff --git a/scripts/angelscript/chests/base_treasurechest.as b/scripts/angelscript/chests/base_treasurechest.as new file mode 100644 index 00000000..167bb364 --- /dev/null +++ b/scripts/angelscript/chests/base_treasurechest.as @@ -0,0 +1,776 @@ +#pragma context server + +namespace MS +{ + +class BaseTreasurechest : CGameScript +{ + string ANIM_CLOSE; + string ANIM_IDLE; + string ANIM_OPEN; + int BC_GAVE_PICK; + string BC_HAS_PICK_CHANCE; + string BC_TRAPPED; + string BC_TRAP_LIST; + string BC_TRAP_TYPE; + string BC_USE_TRACKER; + int BS_DID_NAME; + string CHEST_AVG_LEVELS; + string CHEST_DO_EVENTS; + int CHEST_LOCKED; + string CHEST_USER; + int GAVE_ARTIFACTS; + string NEXT_EXPLAIN; + string NPC_DO_EVENTS; + int NPC_NO_TRADE_REPORT; + string NUM_REMOVED; + int PLAYING_DEAD; + string SOUND_CHEST_LOCKED; + string SOUND_OPEN; + string STORENAME; + float STORE_SUFFIX; + int TC_ALL_DMGPOINTS; + string TC_HIGHEST_DMGPOINTS; + + BaseTreasurechest() + { + NPC_NO_TRADE_REPORT = 1; + SOUND_OPEN = "Items/creak.wav"; + SOUND_CHEST_LOCKED = "buttons/latchlocked1.wav"; + BC_TRAP_LIST = "explode;gas"; + ANIM_IDLE = "idle"; + ANIM_CLOSE = "close"; + ANIM_OPEN = "open"; + } + + void OnSpawn() override + { + SetName("Treasure Chest"); + SetHealth(1); + SetInvincible(true); + SetModel("misc/treasure.mdl"); + SetHeight(30); + SetWidth(30); + SetIdleAnim(ANIM_IDLE); + SetGravity(0.1); + PLAYING_DEAD = 1; + SetNoPush(true); + STORE_SUFFIX = Random(-10000.00, 10000.00); + array TC_STORE_ARRAY; + array TC_ARTIFACT; + array TC_ARTIFACT_CHANCE; + array TC_STORE_GOLDS; + } + + void game_targeted_by_player() + { + if (!(GetPlayerCount() > 1)) return; + if (!(GetGameTime() > NEXT_EXPLAIN)) return; + NEXT_EXPLAIN = GetGameTime(); + NEXT_EXPLAIN += 60.0; + ShowHelpTip(param1, "generic", "INDIVIDUALIZED TREASURE CHEST", "This chest displays a unique inventory to each player."); + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + if (!(IsEntityAlive(param1))) return; + CallExternal(param1, "ext_remove_afk"); + if ((BC_TRAPPED)) + { + do_trap(); + SendInfoMsg(param1, "THE CHEST IS TRAPPED! It's a trap!"); + BC_TRAPPED = 0; + return; + } + if ((CHEST_LOCKED)) + { + if ((BC_REQ_PICK)) + { + SendInfoMsg(param1, "THIS CHEST REQUIRES A LOCK PICK This lock will need to be picked."); + } + EmitSound(GetOwner(), 0, SOUND_CHEST_LOCKED, 10); + return; + } + tc_artifacts(); + tc_open(param1); + } + + void tc_open() + { + CHEST_USER = param1; + STORENAME = "func_make_store_string"(CHEST_USER); + string STORE_STATE = ArrayFind(TC_STORE_ARRAY, STORENAME, 0); + if (STORE_STATE == -1) + { + tc_make_and_populate_store(); + } + string L_GOLD_STORE_IDX = ArrayFind(TC_STORE_ARRAY, STORENAME, 0); + SetGold(TC_STORE_GOLDS[int(L_GOLD_STORE_IDX)]); + // TODO: offerstore STORENAME CHEST_USER inv trade + } + + void add_gold() + { + string L_GOLD_STORE_IDX = ArrayFind(TC_STORE_ARRAY, STORENAME, 0); + string L_GOLD = TC_STORE_GOLDS[int(L_GOLD_STORE_IDX)]; + L_GOLD += param1; + TC_STORE_GOLDS[L_GOLD_STORE_IDX] = int(L_GOLD); + } + + void game_gave_gold() + { + string L_PLAYER_ID = param1; + string L_STORE_STR = "func_make_store_string"(L_PLAYER_ID); + string L_GOLD_STORE_IDX = ArrayFind(TC_STORE_ARRAY, L_STORE_STR, 0); + TC_STORE_GOLDS[L_GOLD_STORE_IDX] = 0; + } + + void tc_make_and_populate_store() + { + // TODO: createstore STORENAME + TC_STORE_ARRAY.insertLast(STORENAME); + TC_STORE_GOLDS.insertLast(0); + CallExternal(GAME_MASTER, "gm_find_strongest_reset"); + string L_HIGHEST_DMGPOINTS = GetEntityProperty(GAME_MASTER, "scriptvar"); + CallExternal(CHEST_USER, "ext_get_dmgpoints"); + string L_MY_PTS = GetEntityProperty(CHEST_USER, "scriptvar"); + if ((L_HIGHEST_DMGPOINTS / 10) <= L_MY_PTS) + { + chest_additems(); + } + else + { + chest_newb(); + } + } + + void trade_success() + { + if (!(PLAYERS_WITHDRAWING)) + { + EmitSound(GetOwner(), 2, SOUND_OPEN, 10); + PlayAnim("hold", ANIM_OPEN); + } + PLAYERS_WITHDRAWING += 1; + } + + void trade_done() + { + PLAYERS_WITHDRAWING -= 1; + if ((PLAYERS_WITHDRAWING)) return; + PlayAnim("once", ANIM_CLOSE); + SetIdleAnim(ANIM_IDLE); + } + + void chest_additems() + { + if (!(NO_ORE)) + { + if ((ItemExists(CHEST_USER, "item_gaxe_handle"))) + { + } + if (!(ItemExists(CHEST_USER, "item_ore_lorel"))) + { + } + if (RandomInt(1, 200) <= 1) + { + } + AddStoreItem(STORENAME, "item_ore_lorel", 1, 0); + } + } + + void chest_add_hpot_mpot() + { + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + } + + void offer_felewyn_symbol() + { + string L_FEL_QUEST = GetPlayerQuestData(CHEST_USER, "f"); + if (!(L_FEL_QUEST != "complete")) return; + if (!(GetToken(L_FEL_QUEST, 0, ";") == 1)) return; + if (!(RandomInt(1, 100) <= param1)) return; + string RND_ITEM = "item_s"; + if (FindToken(L_FEL_QUEST, RND_ITEM, ";") == -1) + { + AddStoreItem(STORENAME, RND_ITEM, 1, 0); + if (L_FEL_QUEST.length() > 0) L_FEL_QUEST += ";"; + L_FEL_QUEST += RND_ITEM; + SetPlayerQuestData(CHEST_USER, "f"); + } + } + + void tc_add_artifact() + { + SetModelBody(0, 1); + TC_ARTIFACT.insertLast(param1); + TC_ARTIFACT_CHANCE.insertLast(param2); + } + + void tc_artifacts() + { + if ((GAVE_ARTIFACTS)) return; + GAVE_ARTIFACTS = 1; + if (!(int(TC_ARTIFACT.length()) > 0)) return; + GetAllPlayers(TC_ARTIFACT_WINNERS); + CallExternal(GAME_MASTER, "gm_find_strongest_reset"); + TC_HIGHEST_DMGPOINTS = GetEntityProperty(GAME_MASTER, "scriptvar"); + TC_ALL_DMGPOINTS = 0; + for (int i = 0; i < int(TC_ARTIFACT_WINNERS.length()); i++) + { + tc_filter_winner_by_pts(); + } + for (int i = 0; i < int(TC_ARTIFACT_WINNERS.length()); i++) + { + tc_filter_winner_by_roll(); + } + } + + void tc_filter_winner_by_pts() + { + if (i == 0) + { + NUM_REMOVED = 0; + } + string L_IDX = (i - NUM_REMOVED); + string L_PLAYER_ID = TC_ARTIFACT_WINNERS[int(L_IDX)]; + CallExternal(L_PLAYER_ID, "ext_get_dmgpoints"); + string L_MY_PTS = GetEntityProperty(L_PLAYER_ID, "scriptvar"); + if ((TC_HIGHEST_DMGPOINTS / 100) <= L_MY_PTS) + { + TC_ALL_DMGPOINTS += L_MY_PTS; + } + else + { + TC_ARTIFACT_WINNERS.removeAt(L_IDX); + NUM_REMOVED += 1; + } + } + + void tc_filter_winner_by_roll() + { + string L_IDX = i; + string L_PLAYER_ID = TC_ARTIFACT_WINNERS[int(L_IDX)]; + CallExternal(L_PLAYER_ID, "ext_get_dmgpoints"); + string L_ROLL_MULTIPLIER = GetEntityProperty(L_PLAYER_ID, "scriptvar"); + L_ROLL_MULTIPLIER /= TC_ALL_DMGPOINTS; + int L_RAND_IDX = int(TC_ARTIFACT.length()); + L_RAND_IDX -= 1; + int L_RAND_IDX = RandomInt(0, L_RAND_IDX); + string L_CHANCE = TC_ARTIFACT_CHANCE[int(L_RAND_IDX)]; + if (TC_ALL_DMGPOINTS != 0) + { + if (L_CHANCE != 100) + { + L_CHANCE *= L_ROLL_MULTIPLIER; + } + } + if (Random(0, 100) <= L_CHANCE) + { + STORENAME = "func_make_store_string"(L_PLAYER_ID); + CHEST_USER = L_PLAYER_ID; + tc_make_and_populate_store(); + AddStoreItem(STORENAME, TC_ARTIFACT[int(L_RAND_IDX)], 1, 0); + } + } + + void add_noob_item() + { + int RND_LIST = RandomInt(1, G_NOOB_SETS); + if (RND_LIST == 1) + { + string ITEM_LIST = G_NOOB_ITEMS1; + } + if (RND_LIST == 2) + { + string ITEM_LIST = G_NOOB_ITEMS2; + } + if (RND_LIST == 3) + { + string ITEM_LIST = G_NOOB_ITEMS3; + } + if (RND_LIST == 4) + { + string ITEM_LIST = G_NOOB_ITEMS4; + } + if (RND_LIST == 5) + { + string ITEM_LIST = G_NOOB_ITEMS5; + } + if (RND_LIST == 6) + { + string ITEM_LIST = G_NOOB_ITEMS6; + } + if (RND_LIST == 7) + { + string ITEM_LIST = G_NOOB_ITEMS7; + } + if (RND_LIST == 8) + { + string ITEM_LIST = G_NOOB_ITEMS8; + } + if (RND_LIST == 9) + { + string ITEM_LIST = G_NOOB_ITEMS9; + } + string N_ITEMS = GetTokenCount(ITEM_LIST, ";"); + N_ITEMS -= 1; + int R_ITEM = RandomInt(0, N_ITEMS); + string P_ITEM = GetToken(ITEM_LIST, R_ITEM, ";"); + AddStoreItem(STORENAME, P_ITEM, 1, 0); + } + + void add_good_item() + { + int RND_LIST = RandomInt(1, G_GOOD_SETS); + if (RND_LIST == 1) + { + string ITEM_LIST = G_GOOD_ITEMS1; + } + if (RND_LIST == 2) + { + string ITEM_LIST = G_GOOD_ITEMS2; + } + if (RND_LIST == 3) + { + string ITEM_LIST = G_GOOD_ITEMS3; + } + if (RND_LIST == 4) + { + string ITEM_LIST = G_GOOD_ITEMS4; + } + if (RND_LIST == 5) + { + string ITEM_LIST = G_GOOD_ITEMS5; + } + if (RND_LIST == 6) + { + string ITEM_LIST = G_GOOD_ITEMS6; + } + if (RND_LIST == 7) + { + string ITEM_LIST = G_GOOD_ITEMS7; + } + if (RND_LIST == 8) + { + string ITEM_LIST = G_GOOD_ITEMS8; + } + if (RND_LIST == 9) + { + string ITEM_LIST = G_GOOD_ITEMS9; + } + string N_ITEMS = GetTokenCount(ITEM_LIST, ";"); + N_ITEMS -= 1; + int R_ITEM = RandomInt(0, N_ITEMS); + string P_ITEM = GetToken(ITEM_LIST, R_ITEM, ";"); + AddStoreItem(STORENAME, P_ITEM, 1, 0); + } + + void add_great_item() + { + int RND_LIST = RandomInt(1, G_GREAT_SETS); + if (RND_LIST == 1) + { + string ITEM_LIST = G_GREAT_ITEMS1; + } + else + { + if (RND_LIST == 2) + { + string ITEM_LIST = G_GREAT_ITEMS2; + } + else + { + if (RND_LIST == 3) + { + string ITEM_LIST = G_GREAT_ITEMS3; + } + } + } + string N_ITEMS = GetTokenCount(ITEM_LIST, ";"); + N_ITEMS -= 1; + int R_ITEM = RandomInt(0, N_ITEMS); + string P_ITEM = GetToken(ITEM_LIST, R_ITEM, ";"); + AddStoreItem(STORENAME, P_ITEM, 1, 0); + } + + void add_epic_item() + { + string N_EPICS = GetGlobalArrayLength(G_ARRAY_EPIC); + N_EPICS -= 1; + int RND_PICK = RandomInt(0, N_EPICS); + string RND_ITEM = GetGlobalArray(G_ARRAY_EPIC, int(RND_PICK)); + AddStoreItem(STORENAME, RND_ITEM, 1, 0); + } + + void add_noob_arrows() + { + string ARROW_LIST = G_NOOB_ARROWS; + string BUNDLE_SIZE = param1; + if (BUNDLE_SIZE == "PARAM1") + { + string BUNDLE_SIZE = (15 * RandomInt(1, 3)); + } + string N_ARROW_NAMES = GetTokenCount(ARROW_LIST, ";"); + N_ARROW_NAMES -= 1; + string ARROW_NAME = GetToken(ARROW_LIST, RandomInt(0, N_ARROW_NAMES), ";"); + AddStoreItem(STORENAME, ARROW_NAME, BUNDLE_SIZE, 0, 0, BUNDLE_SIZE); + } + + void add_good_arrows() + { + string ARROW_LIST = G_GOOD_ARROWS; + string BUNDLE_SIZE = param1; + if (BUNDLE_SIZE == "PARAM1") + { + string BUNDLE_SIZE = (15 * RandomInt(1, 3)); + } + string N_ARROW_NAMES = GetTokenCount(ARROW_LIST, ";"); + N_ARROW_NAMES -= 1; + string ARROW_NAME = GetToken(ARROW_LIST, RandomInt(0, N_ARROW_NAMES), ";"); + AddStoreItem(STORENAME, ARROW_NAME, BUNDLE_SIZE, 0, 0, BUNDLE_SIZE); + } + + void add_great_arrows() + { + string ARROW_LIST = G_GREAT_ARROWS; + string BUNDLE_SIZE = param1; + if (BUNDLE_SIZE == "PARAM1") + { + string BUNDLE_SIZE = (15 * RandomInt(1, 3)); + } + string N_ARROW_NAMES = GetTokenCount(ARROW_LIST, ";"); + N_ARROW_NAMES -= 1; + string ARROW_NAME = GetToken(ARROW_LIST, RandomInt(0, N_ARROW_NAMES), ";"); + AddStoreItem(STORENAME, ARROW_NAME, BUNDLE_SIZE, 0, 0, BUNDLE_SIZE); + } + + void add_epic_arrows() + { + string ARROW_LIST = G_EPIC_ARROWS; + string BUNDLE_SIZE = param1; + if (BUNDLE_SIZE == "PARAM1") + { + string BUNDLE_SIZE = (15 * RandomInt(1, 3)); + } + string N_ARROW_NAMES = GetTokenCount(ARROW_LIST, ";"); + N_ARROW_NAMES -= 1; + string ARROW_NAME = GetToken(ARROW_LIST, RandomInt(0, N_ARROW_NAMES), ";"); + AddStoreItem(STORENAME, ARROW_NAME, BUNDLE_SIZE, 0, 0, BUNDLE_SIZE); + } + + void add_noob_pot() + { + string N_ITEMS = GetTokenCount(G_NOOB_POTS, ";"); + N_ITEMS -= 1; + int R_ITEM = RandomInt(0, N_ITEMS); + string P_ITEM = GetToken(G_NOOB_POTS, R_ITEM, ";"); + AddStoreItem(STORENAME, P_ITEM, 1, 0); + } + + void add_good_pot() + { + string N_ITEMS = GetTokenCount(G_GOOD_POTS, ";"); + N_ITEMS -= 1; + int R_ITEM = RandomInt(0, N_ITEMS); + string P_ITEM = GetToken(G_GOOD_POTS, R_ITEM, ";"); + AddStoreItem(STORENAME, P_ITEM, 1, 0); + } + + void add_great_pot() + { + string N_ITEMS = GetTokenCount(G_GREAT_POTS, ";"); + N_ITEMS -= 1; + int R_ITEM = RandomInt(0, N_ITEMS); + string P_ITEM = GetToken(G_GREAT_POTS, R_ITEM, ";"); + AddStoreItem(STORENAME, P_ITEM, 1, 0); + } + + void add_epic_pot() + { + string N_ITEMS = GetTokenCount(G_EPIC_POTS, ";"); + N_ITEMS -= 1; + int R_ITEM = RandomInt(0, N_ITEMS); + string P_ITEM = GetToken(G_EPIC_POTS, R_ITEM, ";"); + AddStoreItem(STORENAME, P_ITEM, 1, 0); + } + + void func_make_store_string() + { + string L_RETURN = GetPlayerAuthId(param1); + return; + return; + } + + void game_postspawn() + { + if (param4 != "none") + { + CHEST_DO_EVENTS = param4; + bc_setup_addparams(); + } + if ((param4).findFirst("set_chest_sprite_in") >= 0) + { + ScheduleDelayedEvent(0.1, "chest_sprite_in"); + } + if ((BC_SPRITE_IN)) + { + ScheduleDelayedEvent(0.1, "chest_sprite_in"); + } + if ((param4).findFirst("set_num_chests") >= 0) + { + BC_USE_TRACKER = 1; + } + if ((param4).findFirst("set_chest_glow") >= 0) + { + ScheduleDelayedEvent(0.1, "chest_glow"); + } + if ((param4).findFirst("set_glowshell") >= 0) + { + ScheduleDelayedEvent(0.1, "chest_glowshell"); + } + if ((BC_GLOWSHELL)) + { + ScheduleDelayedEvent(0.1, "chest_glowshell"); + } + } + + void bc_calc_avg_levels() + { + string TOTAL_KILLS = G_SADJ_DEATHS; + string TOTAL_LEVELS = G_SADJ_LEVELS; + CHEST_AVG_LEVELS = TOTAL_LEVELS; + CHEST_AVG_LEVELS /= TOTAL_KILLS; + if ((BS_DID_NAME)) return; + BS_DID_NAME = 1; + if (BS_NEW_NAME_PREFIX == "BS_NEW_NAME_PREFIX") + { + string L_NAME = BS_DEF_NAME_PREFIX; + } + else + { + string L_NAME = BS_NEW_NAME_PREFIX; + } + L_NAME += "|"; + if (BS_NEW_NAME == "BS_NEW_NAME") + { + L_NAME += BS_DEF_NAME; + } + else + { + L_NAME += BS_NEW_NAME; + } + LogDebug("bc_calc_avg_levels pre L_NAME"); + if (CHEST_AVG_LEVELS >= 6) + { + L_NAME += " VI (Multi)"; + } + else + { + if (CHEST_AVG_LEVELS >= 5) + { + L_NAME += " V (Multi)"; + } + else + { + if (CHEST_AVG_LEVELS >= 4) + { + L_NAME += " IV (Multi)"; + } + else + { + if (CHEST_AVG_LEVELS >= 3) + { + L_NAME += " III (Multi)"; + } + else + { + if (CHEST_AVG_LEVELS >= 2) + { + L_NAME += " II (Multi)"; + } + else + { + if (CHEST_AVG_LEVELS < 2) + { + L_NAME += " I (Multi)"; + } + } + } + } + } + } + LogDebug("bc_calc_avg_levels post L_NAME"); + SetName(L_NAME); + } + + void chest_sprite_in() + { + ClientEvent("new", "all", "effects/sfx_sprite_in", GetEntityOrigin(GetOwner()), "xflare1.spr", 20, 4.0); + EmitSound(GetOwner(), 0, "amb/quest1.wav", 10); + } + + void ext_unlock() + { + CHEST_LOCKED = 0; + } + + void chest_glow() + { + LogDebug("chest_glow"); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 255), 96, 120.0); + } + + void chest_glowshell() + { + Effect("glow", GetOwner(), BC_GLOWSHELL_COLOR, 16, -1, -1); + } + + void game_gave_player() + { + LogDebug("game_gave_player PARAM1 PARAM2 GetEntityName(param2) GetEntityProperty(param2, "itemname")"); + } + + void game_dynamically_created() + { + if (!(param1 == "events")) return; + NPC_DO_EVENTS = param2; + ScheduleDelayedEvent(0.01, "npcatk_setup_addparams"); + if (param1 == "events") + { + LogDebug("game_dynamically_created events PARAM2"); + CHEST_DO_EVENTS = param2; + bc_setup_addparams(); + } + } + + void bc_setup_addparams() + { + LogDebug("bc_setup_addparams GetTokenCount(CHEST_DO_EVENTS, ";") CHEST_DO_EVENTS"); + for (int i = 0; i < GetTokenCount(CHEST_DO_EVENTS, ";"); i++) + { + bc_do_events(); + } + } + + void bc_do_events() + { + string CUR_IDX = i; + string CUR_PARAM = GetToken(CHEST_DO_EVENTS, CUR_IDX, ";"); + LogDebug("bc_do_events CUR_PARAM "func_param_isnum"(CUR_PARAM)"); + if (("func_param_isnum"(CUR_PARAM))) return; + if (CUR_IDX < (GetTokenCount(CHEST_DO_EVENTS, ";") - 1)) + { + string PARAM_NEXT = GetToken(CHEST_DO_EVENTS, (CUR_IDX + 1), ";"); + CUR_PARAM(PARAM_NEXT); + } + else + { + CUR_PARAM(); + } + } + + void func_param_isnum() + { + string L_FIRST_CHAR = (param1).substr(0, 1); + int L_IS_NUM = 0; + string L_NUMCHARS = "0123456789.)($"; + if ((L_NUMCHARS).findFirst(L_FIRST_CHAR) > -1) + { + LogDebug("func_do_events_isnum PARAM1 seems to be a parameter , skipping"); + int L_IS_NUM = 1; + } + return; + } + + void set_req_pick() + { + LogDebug("set_req_pick PARAM1"); + if (param1 > 0) + { + if (RandomInt(1, 100) > param1) + { + } + return; + } + } + + void set_trap() + { + LogDebug("set_trap PARAM1"); + BC_TRAP_TYPE = param1; + if (FindToken(BC_TRAP_LIST, BC_TRAP_TYPE, ";") == -1) + { + string L_N_TRAPS = GetTokenCount(BC_TRAP_LIST, ";"); + L_N_TRAPS -= 1; + int L_RND_TRAP = RandomInt(0, L_N_TRAPS); + BC_TRAP_TYPE = GetToken(BC_TRAP_LIST, L_RND_TRAP, ";"); + } + } + + void set_locked() + { + CHEST_LOCKED = 1; + } + + void set_chance_haspick() + { + LogDebug("set_chance_haspick PARAM1"); + BC_GAVE_PICK = 0; + BC_HAS_PICK_CHANCE = param1; + if (param1 == 0) + { + BC_HAS_PICK_CHANCE = 1.0; + } + } + + void set_chance_trapped() + { + string L_TRAP_CHANCE = param1; + if (param1 == 0) + { + float L_TRAP_CHANCE = 1.0; + } + if (!(RandomInt(1, 100) <= L_TRAP_CHANCE)) return; + set_trap(); + } + + void do_trap() + { + LogDebug("do_trap BC_TRAP_TYPE"); + if (BC_TRAP_TYPE == "explode") + { + SpawnNPC("traps/fire_burst", /* TODO: $relpos */ $relpos(0, 0, 32), ScriptMode::Legacy); // params: 256 + } + if (BC_TRAP_TYPE == "gas") + { + SpawnNPC("traps/poison_gas", /* TODO: $relpos */ $relpos(0, 0, 32), ScriptMode::Legacy); // params: 128 + } + } + + void ext_picked() + { + EmitSound(GetOwner(), 1, "doors/door_unlocked.wav", 10); + if ((BC_TRAPPED)) + { + if ((CHEST_LOCKED)) + { + SendColoredMessage(param1, "You disarm the trap and unlock the chest."); + } + if (!(CHEST_LOCKED)) + { + SendColoredMessage(param1, "You disarm the trap."); + } + } + else + { + SendColoredMessage(param1, "You successfully unlock the chest."); + } + CHEST_LOCKED = 0; + BC_TRAPPED = 0; + } + +} + +} diff --git a/scripts/angelscript/chests/bloodshrine_final.as b/scripts/angelscript/chests/bloodshrine_final.as new file mode 100644 index 00000000..c4e61ea7 --- /dev/null +++ b/scripts/angelscript/chests/bloodshrine_final.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class BloodshrineFinal : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("polearms_a", 8); + } + + void chest_additems() + { + add_gold((1000 * "game.playersnb")); + AddStoreItem(STORENAME, "proj_arrow_holy", 30, 0, 0, 30); + AddStoreItem(STORENAME, "proj_arrow_gholy", 30, 0, 0, 30); + AddStoreItem(STORENAME, "proj_bolt_silver", 30, 0, 0, 30); + string GAME_PLAYERS = "game.playersnb"; + add_epic_item(); + if (RandomInt(1, 3) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + } + add_epic_pot(); + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORENAME, "mana_sb", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/catacombs_final.as b/scripts/angelscript/chests/catacombs_final.as new file mode 100644 index 00000000..0f50a31b --- /dev/null +++ b/scripts/angelscript/chests/catacombs_final.as @@ -0,0 +1,81 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class CatacombsFinal : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("scroll_summon_guard", 5); + tc_add_artifact("scroll_summon_bear1", 5); + } + + void chest_additems() + { + add_great_item(); + add_great_arrows(); + add_epic_item(); + if (RandomInt(1, 100) <= 3) + { + AddStoreItem(STORENAME, "blunt_ms3", 1, 0); + } + if (RandomInt(1, 100) <= 5) + { + AddStoreItem(STORENAME, "blunt_ms2", 1, 0); + } + if (RandomInt(1, 100) <= 8) + { + AddStoreItem(STORENAME, "blunt_ms1", 1, 0); + } + if (RandomInt(1, 100) <= 8) + { + AddStoreItem(STORENAME, "scroll_summon_fangtooth", 1, 0); + } + if (RandomInt(1, 100) <= 5) + { + AddStoreItem(STORENAME, "scroll_acid_xolt", 1, 0); + } + if (RandomInt(1, 100) <= 5) + { + AddStoreItem(STORENAME, "scroll_poison_cloud", 1, 0); + } + if (RandomInt(1, 100) <= 5) + { + AddStoreItem(STORENAME, "scroll_ice_blast", 1, 0); + } + if (RandomInt(1, 100) <= 5) + { + AddStoreItem(STORENAME, "scroll_ice_xolt", 1, 0); + } + if (RandomInt(1, 100) <= 5) + { + AddStoreItem(STORENAME, "scroll_healing_circle", 1, 0); + } + if (RandomInt(1, 2) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 3) == 1) + { + add_epic_item(); + add_epic_arrows(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_item(); + add_epic_arrows(); + } + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + add_epic_arrows(); + } + add_gold((500 * RandomInt(1, 3))); + } + +} + +} diff --git a/scripts/angelscript/chests/catacombs_mummy.as b/scripts/angelscript/chests/catacombs_mummy.as new file mode 100644 index 00000000..32b7eb9d --- /dev/null +++ b/scripts/angelscript/chests/catacombs_mummy.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class CatacombsMummy : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("blunt_ms3", 4); + tc_add_artifact("blunt_ms2", 5); + tc_add_artifact("blunt_ms1", 6); + } + + void chest_additems() + { + add_epic_item(); + add_epic_arrows(); + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "scroll_turn_undead", 1, 0); + } + if (RandomInt(1, 4) == 1) + { + add_epic_arrows(); + } + add_gold((100 * RandomInt(1, 3))); + } + +} + +} diff --git a/scripts/angelscript/chests/chapel1.as b/scripts/angelscript/chests/chapel1.as new file mode 100644 index 00000000..fbc08a9a --- /dev/null +++ b/scripts/angelscript/chests/chapel1.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chapel1 : CGameScript +{ + void chest_additems() + { + add_gold(10); + add_noob_item(); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_fire", 30, 0, 0, 30); + } + AddStoreItem(STORENAME, "proj_arrow_broadhead", 30, 0, 0, 30); + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_holy", 30, 0, 0, 30); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "bows_longbow", 1, 0); + } + else + { + AddStoreItem(STORENAME, "bows_orcbow", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/chapel2.as b/scripts/angelscript/chests/chapel2.as new file mode 100644 index 00000000..525ab770 --- /dev/null +++ b/scripts/angelscript/chests/chapel2.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chapel2 : CGameScript +{ + void chest_additems() + { + add_gold(25); + AddStoreItem(STORENAME, "ring_light2", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/chapel3.as b/scripts/angelscript/chests/chapel3.as new file mode 100644 index 00000000..2aa6cdf3 --- /dev/null +++ b/scripts/angelscript/chests/chapel3.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chapel3 : CGameScript +{ + void chest_additems() + { + add_gold(100); + add_noob_item(); + add_noob_item(); + if (!("game.playersnb" > 1)) return; + add_noob_item(); + if (!("game.playersnb" > 2)) return; + add_good_item(); + if (!("game.playersnb" > 3)) return; + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/chapel_bat.as b/scripts/angelscript/chests/chapel_bat.as new file mode 100644 index 00000000..d410b443 --- /dev/null +++ b/scripts/angelscript/chests/chapel_bat.as @@ -0,0 +1,70 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ChapelBat : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 40)); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + } + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "health_spotion", 1, 0); + } + AddStoreItem(STORENAME, "swords_bastardsword", 1, 0); + if (RandomInt(1, 2) == 1) + { + add_noob_item(); + } + if (RandomInt(1, 2) == 1) + { + add_noob_item(); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_katana2", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "blunt_hammer1", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_longsword", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_katana2", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_katana3", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "blunt_hammer1", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_skullblade", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_skullblade2", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_silvertipped", 300, 0, 0, 60); + } + } + +} + +} diff --git a/scripts/angelscript/chests/cleicert.as b/scripts/angelscript/chests/cleicert.as new file mode 100644 index 00000000..2805f56f --- /dev/null +++ b/scripts/angelscript/chests/cleicert.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cleicert : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("axes_gthunder11", 10); + tc_add_artifact("item_ring_thunder22", 10); + tc_add_artifact("blunt_lrod11", 14); + } + + void chest_additems() + { + add_gold(RandomInt(600, 1200)); + chest_add_hpot_mpot(); + AddStoreItem(STORENAME, "mana_immune_lightning", 1, 0); + int L_QUANTITY = RandomInt(15, 100); + AddStoreItem(STORENAME, "proj_arrow_lightning", L_QUANTITY, 0, 0, L_QUANTITY); + if (RandomInt(1, 3) == 1) + { + add_great_pot(); + add_great_arrows(); + } + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "axes_thunder11", 1, 0); + } + offer_felewyn_symbol(50); + } + +} + +} diff --git a/scripts/angelscript/chests/cleicert_temple.as b/scripts/angelscript/chests/cleicert_temple.as new file mode 100644 index 00000000..99921f80 --- /dev/null +++ b/scripts/angelscript/chests/cleicert_temple.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class CleicertTemple : CGameScript +{ + void chest_additems() + { + add_gold(50); + chest_add_hpot_mpot(); + add_good_item(100); + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 4) == 1) + { + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/cobra_chest.as b/scripts/angelscript/chests/cobra_chest.as new file mode 100644 index 00000000..4b78a2d6 --- /dev/null +++ b/scripts/angelscript/chests/cobra_chest.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class CobraChest : CGameScript +{ + void OnSpawn() override + { + int L_DAXE_CHANCE = 5; + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + L_DAXE_CHANCE_MULT += 4; + } + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + L_DAXE_CHANCE_MULT += 4; + } + tc_add_artifact("axes_dragon", L_DAXE_CHANCE); + } + + void chest_additems() + { + add_gold(RandomInt(500, 1000)); + add_epic_item(); + if (RandomInt(1, 8) <= "game.playersnb") + { + add_epic_item(); + } + add_great_item(); + add_great_item(); + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/demontemple1.as b/scripts/angelscript/chests/demontemple1.as new file mode 100644 index 00000000..0333e4c9 --- /dev/null +++ b/scripts/angelscript/chests/demontemple1.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Demontemple1 : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("blunt_gauntlets_demon", 4); + tc_add_artifact("blunt_gauntlets_serpant", 10); + } + + void chest_additems() + { + add_gold(50); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + add_good_item(); + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + if (!("game.playersnb" > 2)) return; + add_good_item(); + if (!("game.playersnb" > 3)) return; + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/demontemple2.as b/scripts/angelscript/chests/demontemple2.as new file mode 100644 index 00000000..83621f9d --- /dev/null +++ b/scripts/angelscript/chests/demontemple2.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Demontemple2 : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("smallarms_k_fire", 20); + tc_add_artifact("axes_vaxe", 10); + } + + void chest_additems() + { + offer_felewyn_symbol(5); + add_gold(120); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + add_good_item(); + add_good_item(); + if (!("game.playersnb" > 2)) return; + add_great_item(); + if (!("game.playersnb" > 3)) return; + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/deraliasewers2.as b/scripts/angelscript/chests/deraliasewers2.as new file mode 100644 index 00000000..ee814a9f --- /dev/null +++ b/scripts/angelscript/chests/deraliasewers2.as @@ -0,0 +1,95 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Deraliasewers2 : CGameScript +{ + string GAVE_KEY; + + void chest_additems() + { + if (!(GAVE_KEY)) + { + GAVE_KEY = 1; + AddStoreItem(STORENAME, "item_key_sewer", 1, 0); + } + else + { + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "item_key_sewer", 1, 0); + } + } + add_gold(RandomInt(200, 1200)); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "mana_immune_poison", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "armor_salamander", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + add_good_item(); + add_great_item(); + if (RandomInt(1, 10) <= "game.playersnb") + { + add_epic_item(); + } + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_great_item(); + add_great_item(); + if (RandomInt(1, 10) <= "game.playersnb") + { + add_epic_item(); + } + if (RandomInt(1, 10) <= "game.playersnb") + { + add_epic_item(); + } + add_epic_arrows(); + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_great_item(); + add_epic_item(); + if (RandomInt(1, 10) <= "game.playersnb") + { + add_epic_item(); + } + if (RandomInt(1, 10) <= "game.playersnb") + { + add_epic_item(); + } + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_item(); + add_epic_item(); + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_item(); + add_epic_arrows(); + if (RandomInt(1, 10) <= "game.playersnb") + { + AddStoreItem(STORENAME, "mana_immune_poison", 1, 0); + } + } + } + +} + +} diff --git a/scripts/angelscript/chests/deraliasewers_final.as b/scripts/angelscript/chests/deraliasewers_final.as new file mode 100644 index 00000000..f3a83dfd --- /dev/null +++ b/scripts/angelscript/chests/deraliasewers_final.as @@ -0,0 +1,80 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class DeraliasewersFinal : CGameScript +{ + string POT_LIST; + + DeraliasewersFinal() + { + POT_LIST = "mana_speed;mana_immune_poison;mana_immune_cold;mana_immune_fire;mana_demon_blood;mana_gprotection;mana_bravery;mana_fbrand;mana_faura;mana_paura"; + } + + void OnSpawn() override + { + tc_add_artifact("armor_helm_elyg", 10); + tc_add_artifact("armor_venom", 15); + tc_add_artifact("blunt_eb", 10); + } + + void chest_additems() + { + add_gold(RandomInt(500, 2000)); + add_epic_arrows(); + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "mana_immune_poison", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "armor_salamander", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_good_item(); + add_great_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + add_great_item(); + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + add_epic_arrows(); + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + add_epic_arrows(); + } + l_add_epic_potion(); + } + + void l_add_epic_potion() + { + string N_POTS = GetTokenCount(POT_LIST, ";"); + N_POTS -= 1; + int RND_PICK = RandomInt(0, N_POTS); + string RND_POT = GetToken(POT_LIST, RND_PICK, ";"); + AddStoreItem(STORENAME, RND_POT, 1, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/deraliasewers_gloam.as b/scripts/angelscript/chests/deraliasewers_gloam.as new file mode 100644 index 00000000..1bdb27ef --- /dev/null +++ b/scripts/angelscript/chests/deraliasewers_gloam.as @@ -0,0 +1,52 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class DeraliasewersGloam : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(501, 1999)); + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + add_great_item(); + } + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + add_great_item(); + } + if (RandomInt(1, 5) == 1) + { + add_potion(); + } + } + + void add_potion() + { + int RND_POT = RandomInt(1, 4); + if (RND_POT == 1) + { + AddStoreItem(STORENAME, "mana_immune_poison", 1, 0); + } + if (RND_POT == 2) + { + AddStoreItem(STORENAME, "mana_immune_cold", 1, 0); + } + if (RND_POT == 3) + { + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + } + if (RND_POT == 4) + { + AddStoreItem(STORENAME, "mana_speed", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/deraliasewers_swamp.as b/scripts/angelscript/chests/deraliasewers_swamp.as new file mode 100644 index 00000000..9932b914 --- /dev/null +++ b/scripts/angelscript/chests/deraliasewers_swamp.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class DeraliasewersSwamp : CGameScript +{ + string POT_LIST; + + DeraliasewersSwamp() + { + POT_LIST = "mana_speed;mana_immune_poison;mana_immune_cold;mana_immune_fire;mana_demon_blood;mana_gprotection;mana_bravery;mana_fbrand;mana_faura;mana_paura"; + } + + void chest_additems() + { + l_add_epic_potion(); + if (RandomInt(1, 4) == 1) + { + l_add_epic_potion(); + } + if (RandomInt(1, 4) == 1) + { + l_add_epic_potion(); + } + } + + void l_add_epic_potion() + { + string N_POTS = GetTokenCount(POT_LIST, ";"); + N_POTS -= 1; + int RND_PICK = RandomInt(0, N_POTS); + string RND_POT = GetToken(POT_LIST, RND_PICK, ";"); + AddStoreItem(STORENAME, RND_POT, 1, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/dragooncaves1.as b/scripts/angelscript/chests/dragooncaves1.as new file mode 100644 index 00000000..745f1cdd --- /dev/null +++ b/scripts/angelscript/chests/dragooncaves1.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Dragooncaves1 : CGameScript +{ + void chest_additems() + { + add_gold(150); + add_great_item(); + add_noob_item(); + add_good_item(); + add_great_item(); + add_great_item(); + if (RandomInt(1, 20) == 1) + { + add_epic_item(); + } + add_great_arrows(); + add_epic_arrows(); + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/dragooncaves2.as b/scripts/angelscript/chests/dragooncaves2.as new file mode 100644 index 00000000..6ce1e1a5 --- /dev/null +++ b/scripts/angelscript/chests/dragooncaves2.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Dragooncaves2 : CGameScript +{ + void chest_additems() + { + add_gold(300); + add_great_item(); + add_good_item(); + add_good_item(); + add_great_item(); + add_great_item(); + if (RandomInt(1, 20) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_item(); + } + add_great_arrows(); + add_epic_arrows(); + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/dragooncaves_boss.as b/scripts/angelscript/chests/dragooncaves_boss.as new file mode 100644 index 00000000..39b0af3f --- /dev/null +++ b/scripts/angelscript/chests/dragooncaves_boss.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class DragooncavesBoss : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("polearms_dra", 10); + } + + void chest_additems() + { + add_gold((500 * "game.playersnb")); + add_great_item(); + add_great_item(); + add_great_item(); + add_great_item(); + add_epic_item(); + add_epic_item(); + if (RandomInt(1, 20) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "blunt_ms2", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "blunt_ms3", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "scroll_turn_undead", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "scroll_ice_xolt", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/dragooncaves_secret.as b/scripts/angelscript/chests/dragooncaves_secret.as new file mode 100644 index 00000000..902c91ef --- /dev/null +++ b/scripts/angelscript/chests/dragooncaves_secret.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class DragooncavesSecret : CGameScript +{ + string EPIC_POTION_LIST; + string GOOD_POTION_LIST; + + DragooncavesSecret() + { + EPIC_POTION_LIST = "mana_faura;mana_paura;mana_speed;mana_gprotection;mana_immune_cold;mana_immune_fire;mana_immune_poison;mana_demon_blood;mana_regen;mana_leadfoot;mana_immune_lightning"; + GOOD_POTION_LIST = "mana_resist_cold;mana_resist_cold;mana_resist_fire;mana_vampire;mana_prot_spiders"; + } + + void chest_additems() + { + add_gold(550); + add_noob_item(); + dra_add_random_pot(); + dra_add_random_pot(); + string N_POTIONS = GetTokenCount(EPIC_POTION_LIST, ";"); + N_POTIONS -= 1; + int RND_POTION = RandomInt(0, N_POTIONS); + AddStoreItem(STORENAME, GetToken(EPIC_POTION_LIST, RND_POTION, ";"), 1, 0); + if (!(RandomInt(1, 3) == 1)) return; + dra_add_random_pot(); + } + + void dra_add_random_pot() + { + string N_POTIONS = GetTokenCount(GOOD_POTION_LIST, ";"); + N_POTIONS -= 1; + int RND_POTION = RandomInt(0, N_POTIONS); + AddStoreItem(STORENAME, GetToken(GOOD_POTION_LIST, RND_POTION, ";"), 1, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/fmines_spider.as b/scripts/angelscript/chests/fmines_spider.as new file mode 100644 index 00000000..bca41041 --- /dev/null +++ b/scripts/angelscript/chests/fmines_spider.as @@ -0,0 +1,70 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class FminesSpider : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("smallarms_cre", 5); + tc_add_artifact("armor_faura", 5); + tc_add_artifact("armor_helm_gaz2", 5); + tc_add_artifact("armor_helm_gray", 5); + tc_add_artifact("armor_helm_undead", 5); + tc_add_artifact("armor_paura", 5); + } + + void chest_additems() + { + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= "game.playersnb"; + L_GOLD_TO_ADD *= 10; + add_gold(L_GOLD_TO_ADD); + add_epic_arrows(); + add_epic_arrows(); + if (RandomInt(1, 3) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_item(); + add_epic_arrows(); + } + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + } + if (RandomInt(1, 6) == 1) + { + add_epic_item(); + add_epic_arrows(); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "mana_paura", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "mana_faura", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "mana_fbrand", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "mana_font", 1, 0); + } + offer_felewyn_symbol(10); + } + +} + +} diff --git a/scripts/angelscript/chests/gold_1000.as b/scripts/angelscript/chests/gold_1000.as new file mode 100644 index 00000000..3a981449 --- /dev/null +++ b/scripts/angelscript/chests/gold_1000.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "chests/bag_o_gold_base.as" + +namespace MS +{ + +class Gold1000 : CGameScript +{ + int GOLD_AMT; + + Gold1000() + { + GOLD_AMT = 1000; + } + +} + +} diff --git a/scripts/angelscript/chests/gold_25.as b/scripts/angelscript/chests/gold_25.as new file mode 100644 index 00000000..20f8da46 --- /dev/null +++ b/scripts/angelscript/chests/gold_25.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Gold25 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(15, 25)); + } + +} + +} diff --git a/scripts/angelscript/chests/gold_300.as b/scripts/angelscript/chests/gold_300.as new file mode 100644 index 00000000..6a41bef7 --- /dev/null +++ b/scripts/angelscript/chests/gold_300.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Gold300 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(200, 300)); + } + +} + +} diff --git a/scripts/angelscript/chests/gold_50.as b/scripts/angelscript/chests/gold_50.as new file mode 100644 index 00000000..8a39596d --- /dev/null +++ b/scripts/angelscript/chests/gold_50.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Gold50 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(25, 50)); + } + +} + +} diff --git a/scripts/angelscript/chests/health_greater_a.as b/scripts/angelscript/chests/health_greater_a.as new file mode 100644 index 00000000..8f0b8eb4 --- /dev/null +++ b/scripts/angelscript/chests/health_greater_a.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class HealthGreaterA : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "health_spotion", 2, 0); + AddStoreItem(STORENAME, "mana_mpotion", 2, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/health_greater_b.as b/scripts/angelscript/chests/health_greater_b.as new file mode 100644 index 00000000..faf18878 --- /dev/null +++ b/scripts/angelscript/chests/health_greater_b.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class HealthGreaterB : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "health_spotion", 2, 0); + AddStoreItem(STORENAME, "mana_mpotion", 2, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/health_greater_c.as b/scripts/angelscript/chests/health_greater_c.as new file mode 100644 index 00000000..e4549ec2 --- /dev/null +++ b/scripts/angelscript/chests/health_greater_c.as @@ -0,0 +1,47 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class HealthGreaterC : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "health_spotion", 4, 0); + AddStoreItem(STORENAME, "mana_mpotion", 4, 0); + string L_MAP_NAME = StringToLower(GetMapName()); + if (!(L_MAP_NAME == "b_castle")) return; + add_gold(200); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + add_good_item(); + AddStoreItem(STORENAME, "mana_resist_fire", 1, 0); + if (RandomInt(1, 3) == 1) + { + add_good_item(100); + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "mana_immune_poison", 1, 0); + add_great_item(50); + } + } + +} + +} diff --git a/scripts/angelscript/chests/hemlock_crulak.as b/scripts/angelscript/chests/hemlock_crulak.as new file mode 100644 index 00000000..ff9ba1b4 --- /dev/null +++ b/scripts/angelscript/chests/hemlock_crulak.as @@ -0,0 +1,55 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class HemlockCrulak : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(4000, 5000)); + if ((ItemExists(CHEST_USER, "item_ring_ryza"))) + { + if (GetPlayerQuestData(CHEST_USER, "manaring") == "0") + { + if (!(ItemExists(CHEST_USER, "item_ring_ryza_gem2"))) + { + AddStoreItem(STORENAME, "item_ring_ryza_gem2", 1, 0); + } + } + } + add_great_item(); + add_epic_item(); + add_epic_item(); + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + if (RandomInt(1, 5) <= 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 5) <= 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 5) <= 1) + { + add_epic_arrows(); + } + add_epic_pot(); + add_epic_pot(); + if (RandomInt(1, 5) <= 1) + { + add_epic_pot(); + } + if (RandomInt(1, 5) <= 1) + { + add_epic_pot(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/highlands1.as b/scripts/angelscript/chests/highlands1.as new file mode 100644 index 00000000..05d539b1 --- /dev/null +++ b/scripts/angelscript/chests/highlands1.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Highlands1 : CGameScript +{ + void chest_additems() + { + add_gold(50); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_spiderblade", 1, 0); + } + AddStoreItem(STORENAME, "blunt_warhammer", 1, 0); + AddStoreItem(STORENAME, "drink_ale", 4, 0); + AddStoreItem("smallarms_huggerdagger3", 1, 0); + string N_PLAYERS = "game.playersnb"; + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "shields_lironshield", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "armor_knight", 1, 0); + } + AddStoreItem(STORENAME, "proj_bolt_iron", 50, 0, 0, 25); + if (RandomInt(1, 12) == 1) + { + AddStoreItem(STORENAME, "swords_katana4", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "swords_katana3", 1, 0); + } + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "swords_katana2", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "swords_katana1", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/hunderswamp1_borc.as b/scripts/angelscript/chests/hunderswamp1_borc.as new file mode 100644 index 00000000..c509d9f8 --- /dev/null +++ b/scripts/angelscript/chests/hunderswamp1_borc.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Hunderswamp1Borc : CGameScript +{ + void OnSpawn() override + { + ScheduleDelayedEvent(0.1, "chest_sprite_in"); + } + + void chest_sprite_in() + { + SetSolid("trigger"); + } + + void chest_additems() + { + add_epic_item(); + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/hunderswamp1_extra.as b/scripts/angelscript/chests/hunderswamp1_extra.as new file mode 100644 index 00000000..8462d748 --- /dev/null +++ b/scripts/angelscript/chests/hunderswamp1_extra.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Hunderswamp1Extra : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("smallarms_crep", 10); + ScheduleDelayedEvent(0.1, "chest_sprite_in"); + } + + void chest_sprite_in() + { + SetSolid("trigger"); + } + + void chest_additems() + { + add_epic_item(); + if (RandomInt(1, 8) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/hunderswamp1_final.as b/scripts/angelscript/chests/hunderswamp1_final.as new file mode 100644 index 00000000..280a4258 --- /dev/null +++ b/scripts/angelscript/chests/hunderswamp1_final.as @@ -0,0 +1,77 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Hunderswamp1Final : CGameScript +{ + void OnSpawn() override + { + SetProp(GetOwner(), "scale", 2.0); + SetWidth(40); + SetHeight(60); + tc_add_artifact("blunt_staff_a", 8); + } + + void chest_additems() + { + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_great_item(); + } + if (RandomInt(1, 8) == 1) + { + add_great_item(); + } + add_gold(RandomInt(3000, 5000)); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "mana_sb", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "armor_helm_gray", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "swords_rune_green", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "scroll2_acid_xolt", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/hunderswamp_extra.as b/scripts/angelscript/chests/hunderswamp_extra.as new file mode 100644 index 00000000..e9814fba --- /dev/null +++ b/scripts/angelscript/chests/hunderswamp_extra.as @@ -0,0 +1,22 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class HunderswampExtra : CGameScript +{ + void chest_additems() + { + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + +} + +} diff --git a/scripts/angelscript/chests/ice_boss.as b/scripts/angelscript/chests/ice_boss.as new file mode 100644 index 00000000..47efd382 --- /dev/null +++ b/scripts/angelscript/chests/ice_boss.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class IceBoss : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("swords_iceblade", 25); + } + + void chest_additems() + { + add_gold(RandomInt(200, 400)); + chest_add_hpot_mpot(); + AddStoreItem(STORENAME, "proj_arrow_frost", 120, 0, 0, 120); + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "scroll_ice_shield", 1, 0); + } + else + { + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "scroll2_ice_shield", 1, 0); + } + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "mana_immune_cold", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "swords_liceblade", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/ice_main.as b/scripts/angelscript/chests/ice_main.as new file mode 100644 index 00000000..60bc51a7 --- /dev/null +++ b/scripts/angelscript/chests/ice_main.as @@ -0,0 +1,59 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class IceMain : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("bows_frost", 10); + tc_add_artifact("armor_helm_gaz2", 10); + } + + void chest_additems() + { + add_gold(546); + AddStoreItem(STORENAME, "proj_arrow_frost", 120, 0, 0, 60); + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "mana_immune_cold", 1, 0); + } + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "swords_liceblade", 1, 0); + } + AddStoreItem(STORENAME, "mana_forget", 1, 0); + if (RandomInt(1, 100) <= 2) + { + AddStoreItem(STORENAME, "scroll2_ice_blast", 1, 0); + } + int SCROLL_TOME = RandomInt(1, 2); + if (SCROLL_TOME == 1) + { + AddStoreItem(STORENAME, "scroll_ice_shield", 1, 0); + } + if (SCROLL_TOME == 2) + { + AddStoreItem(STORENAME, "scroll2_ice_shield", 1, 0); + } + if (RandomInt(1, 100) <= 10) + { + int SCROLL_TOME = RandomInt(1, 2); + if (SCROLL_TOME == 1) + { + AddStoreItem(STORENAME, "scroll_blizzard", 1, 0); + } + if (SCROLL_TOME == 2) + { + AddStoreItem(STORENAME, "scroll2_blizzard", 1, 0); + } + } + } + +} + +} diff --git a/scripts/angelscript/chests/idemarks1_bandits.as b/scripts/angelscript/chests/idemarks1_bandits.as new file mode 100644 index 00000000..e074da71 --- /dev/null +++ b/scripts/angelscript/chests/idemarks1_bandits.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Idemarks1Bandits : CGameScript +{ + void chest_additems() + { + add_gold(400); + add_good_item(); + if (RandomInt(1, 4) == 1) + { + add_great_item(); + } + if (RandomInt(1, 4) == 1) + { + add_good_arrows(); + } + if (RandomInt(1, 4) == 1) + { + add_great_arrows(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 4) == 1) + { + add_great_pot(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/idemarks1_dayvans_gold.as b/scripts/angelscript/chests/idemarks1_dayvans_gold.as new file mode 100644 index 00000000..d6637c03 --- /dev/null +++ b/scripts/angelscript/chests/idemarks1_dayvans_gold.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Idemarks1DayvansGold : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(850, 2000)); + AddStoreItem(STORENAME, "item_crystal_return", 1, 0); + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "scroll_turn_undead", 1, 0); + AddStoreItem(STORENAME, "item_crystal_reloc", 1, 0); + } + else + { + AddStoreItem(STORENAME, "scroll2_turn_undead", 1, 0); + } + add_epic_item(); + add_epic_pot(); + } + +} + +} diff --git a/scripts/angelscript/chests/idemarks1_final.as b/scripts/angelscript/chests/idemarks1_final.as new file mode 100644 index 00000000..80908aae --- /dev/null +++ b/scripts/angelscript/chests/idemarks1_final.as @@ -0,0 +1,55 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Idemarks1Final : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("armor_rehab", 9); + } + + void chest_additems() + { + add_gold(3000); + add_epic_item(); + if (RandomInt(1, 4) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_pot(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_pot(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/idemarks1_picnic.as b/scripts/angelscript/chests/idemarks1_picnic.as new file mode 100644 index 00000000..fcee2c12 --- /dev/null +++ b/scripts/angelscript/chests/idemarks1_picnic.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Idemarks1Picnic : CGameScript +{ + void chest_additems() + { + add_gold(400); + add_great_item(); + if (RandomInt(1, 3) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 3) == 1) + { + add_epic_arrows(); + } + AddStoreItem(STORENAME, "item_crystal_reloc", 1, 0); + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "mana_fbrand", 1, 0); + } + AddStoreItem(STORENAME, "polearms_nag", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/isle_goblins.as b/scripts/angelscript/chests/isle_goblins.as new file mode 100644 index 00000000..21b0c444 --- /dev/null +++ b/scripts/angelscript/chests/isle_goblins.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class IsleGoblins : CGameScript +{ + void chest_additems() + { + add_gold(100); + if (RandomInt(1, 2) == 1) + { + add_noob_item(); + } + if (RandomInt(1, 2) == 1) + { + add_noob_item(); + } + if (RandomInt(1, 2) == 1) + { + add_good_item(); + } + if (RandomInt(1, 2) == 1) + { + add_good_item(); + } + if (RandomInt(1, 2) == 1) + { + add_good_item(); + } + int RND_ARROW = RandomInt(1, 4); + if (RND_ARROW == 1) + { + AddStoreItem(STORENAME, "proj_arrow_broadhead", 60, 0, 0, 60); + } + if (RND_ARROW == 2) + { + AddStoreItem(STORENAME, "proj_arrow_fire", 60, 0, 0, 60); + } + if (RND_ARROW == 3) + { + AddStoreItem(STORENAME, "proj_arrow_jagged", 60, 0, 0, 60); + } + if (RND_ARROW == 4) + { + AddStoreItem(STORENAME, "proj_arrow_poison", 60, 0, 0, 60); + } + } + +} + +} diff --git a/scripts/angelscript/chests/isle_maze.as b/scripts/angelscript/chests/isle_maze.as new file mode 100644 index 00000000..ea454c53 --- /dev/null +++ b/scripts/angelscript/chests/isle_maze.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class IsleMaze : CGameScript +{ + void chest_additems() + { + add_gold(150); + add_noob_item(); + add_good_item(); + add_great_item(); + int RND_ARROW = RandomInt(1, 4); + if (RND_ARROW == 1) + { + AddStoreItem(STORENAME, "proj_arrow_frost", 60, 0, 0, 60); + } + if (RND_ARROW == 2) + { + AddStoreItem(STORENAME, "proj_arrow_holy", 60, 0, 0, 60); + } + if (RND_ARROW == 3) + { + AddStoreItem(STORENAME, "proj_arrow_gpoison", 60, 0, 0, 60); + } + if (RND_ARROW == 4) + { + AddStoreItem(STORENAME, "proj_arrow_lightning", 60, 0, 0, 60); + } + } + +} + +} diff --git a/scripts/angelscript/chests/isle_maze_secret.as b/scripts/angelscript/chests/isle_maze_secret.as new file mode 100644 index 00000000..85804a8e --- /dev/null +++ b/scripts/angelscript/chests/isle_maze_secret.as @@ -0,0 +1,20 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class IsleMazeSecret : CGameScript +{ + void chest_additems() + { + add_gold(150); + add_noob_item(); + add_good_item(); + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/islesofdread1.as b/scripts/angelscript/chests/islesofdread1.as new file mode 100644 index 00000000..eb7805ff --- /dev/null +++ b/scripts/angelscript/chests/islesofdread1.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Islesofdread1 : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("armor_paura", 5); + } + + void chest_additems() + { + add_gold(1000); + if (RandomInt(1, 4) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 4) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 4) == 1) + { + add_great_item(); + } + if (RandomInt(1, 4) == 1) + { + add_great_item(); + } + if (RandomInt(1, 4) == 1) + { + add_good_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/keledros.as b/scripts/angelscript/chests/keledros.as new file mode 100644 index 00000000..7ba215c3 --- /dev/null +++ b/scripts/angelscript/chests/keledros.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Keledros : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("scroll_lightning_storm", 100); + tc_add_artifact("scroll_volcano", 100); + tc_add_artifact("scroll_fire_wall", 100); + tc_add_artifact("scroll_fire_ball", 100); + tc_add_artifact("scroll_blizzard", 100); + tc_add_artifact("scroll2_lightning_storm", 100); + tc_add_artifact("scroll2_volcano", 100); + tc_add_artifact("scroll2_fire_wall", 100); + tc_add_artifact("scroll2_fire_ball", 100); + tc_add_artifact("scroll2_blizzard", 100); + } + + void chest_additems() + { + add_gold(100); + } + +} + +} diff --git a/scripts/angelscript/chests/kroush_final.as b/scripts/angelscript/chests/kroush_final.as new file mode 100644 index 00000000..102e4402 --- /dev/null +++ b/scripts/angelscript/chests/kroush_final.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class KroushFinal : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("smallarms_frozentongueonflagpole", 10); + tc_add_artifact("armor_helm_gaz2", 10); + tc_add_artifact("scroll_ice_lance", 10); + tc_add_artifact("scroll2_ice_lance", 10); + } + + void chest_additems() + { + if ((ItemExists(CHEST_USER, "item_ring_ryza"))) + { + if (GetPlayerQuestData(CHEST_USER, "manaring") == "0") + { + if (!(ItemExists(CHEST_USER, "item_ring_ryza_gem1"))) + { + AddStoreItem(STORENAME, "item_ring_ryza_gem1", 1, 0); + } + } + } + add_gold(RandomInt(999, 2001)); + add_epic_arrows(); + add_epic_arrows(); + add_epic_item(); + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/lodagond1.as b/scripts/angelscript/chests/lodagond1.as new file mode 100644 index 00000000..cc88799f --- /dev/null +++ b/scripts/angelscript/chests/lodagond1.as @@ -0,0 +1,47 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Lodagond1 : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("smallarms_frozentongueonflagpole", 10); + tc_add_artifact("swords_iceblade", 50); + } + + void chest_additems() + { + add_gold(100); + chest_add_hpot_mpot(); + int SCROLL_TOME = RandomInt(1, 2); + if (SCROLL_TOME == 1) + { + AddStoreItem(STORENAME, "scroll_ice_shield", 1, 0); + } + if (SCROLL_TOME == 2) + { + AddStoreItem(STORENAME, "scroll2_ice_shield", 1, 0); + } + AddStoreItem(STORENAME, "item_crystal_reloc", 1, 0); + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/lodagond2.as b/scripts/angelscript/chests/lodagond2.as new file mode 100644 index 00000000..6672b87e --- /dev/null +++ b/scripts/angelscript/chests/lodagond2.as @@ -0,0 +1,62 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Lodagond2 : CGameScript +{ + void OnSpawn() override + { + SetName("Lodagond Chest 2"); + } + + void chest_additems() + { + add_gold(300); + chest_add_hpot_mpot(); + AddStoreItem(STORENAME, "item_crystal_reloc", 1, 0); + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 12) == 1) + { + int SCROLL_TOME = RandomInt(1, 2); + if (SCROLL_TOME == 1) + { + AddStoreItem(STORENAME, "scroll_lightning_storm", 1, 0); + } + if (SCROLL_TOME == 2) + { + AddStoreItem(STORENAME, "scroll2_lightning_storm", 1, 0); + } + } + if (RandomInt(1, 6) == 1) + { + add_epic_item(); + AddStoreItem(STORENAME, "mana_immune_cold", 1, 0); + } + if (RandomInt(1, 7) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 9) == 1) + { + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/lodagond3.as b/scripts/angelscript/chests/lodagond3.as new file mode 100644 index 00000000..022ffbe4 --- /dev/null +++ b/scripts/angelscript/chests/lodagond3.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Lodagond3 : CGameScript +{ + void OnSpawn() override + { + SetName("Lodagond Bonus Chest 1"); + } + + void chest_additems() + { + add_gold(RandomInt(100, 200)); + chest_add_hpot_mpot(); + add_epic_item(); + add_great_item(); + if (!("game.playersnb" > 1)) return; + add_epic_item(); + if (!("game.playersnb" > 2)) return; + add_epic_item(); + if (!("game.playersnb" > 3)) return; + add_great_item(); + add_great_item(); + add_epic_item(); + AddStoreItem(STORENAME, "mana_speed", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/lodagond4_array.as b/scripts/angelscript/chests/lodagond4_array.as new file mode 100644 index 00000000..04615d7c --- /dev/null +++ b/scripts/angelscript/chests/lodagond4_array.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Lodagond4Array : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("smallarms_frozentongueonflagpole", 100); + tc_add_artifact("bows_thornbow", 100); + tc_add_artifact("scroll2_lightning_chain", 100); + tc_add_artifact("blunt_mithral", 100); + tc_add_artifact("mana_leadfoot", 100); + tc_add_artifact("armor_belmont", 100); + tc_add_artifact("armor_helm_gaz2", 100); + tc_add_artifact("swords_frostblade55", 100); + } + + void chest_additems() + { + add_gold(RandomInt(800, 1400)); + AddStoreItem(STORENAME, "item_crystal_reloc", 1, 0); + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + } + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "mana_resist_fire", 1, 0); + } + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "mana_protection", 1, 0); + } + if (RandomInt(1, 12) == 1) + { + AddStoreItem(STORENAME, "mana_gprotection", 1, 0); + } + if (RandomInt(1, 12) == 1) + { + AddStoreItem(STORENAME, "mana_speed", 1, 0); + } + if (RandomInt(1, 12) == 1) + { + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + } + if (RandomInt(1, 12) == 1) + { + AddStoreItem(STORENAME, "mana_gprotection", 1, 0); + } + if (RandomInt(1, 12) == 1) + { + AddStoreItem(STORENAME, "mana_speed", 1, 0); + } + if (RandomInt(1, 12) == 1) + { + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/lostcaverns2.as b/scripts/angelscript/chests/lostcaverns2.as new file mode 100644 index 00000000..1541a30f --- /dev/null +++ b/scripts/angelscript/chests/lostcaverns2.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Lostcaverns2 : CGameScript +{ + void chest_additems() + { + add_gold(400); + add_good_item(); + add_good_item(); + add_great_item(); + if (!("game.playersnb" > 1)) return; + add_great_item(); + if (!("game.playersnb" > 2)) return; + add_great_item(); + if (!("game.playersnb" > 3)) return; + add_great_item(); + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/lostcaverns3.as b/scripts/angelscript/chests/lostcaverns3.as new file mode 100644 index 00000000..ee0104ba --- /dev/null +++ b/scripts/angelscript/chests/lostcaverns3.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Lostcaverns3 : CGameScript +{ + void chest_additems() + { + offer_felewyn_symbol(50); + add_gold(200); + add_good_item(); + add_good_item(); + add_great_item(); + add_epic_item(); + if (!("game.playersnb" > 1)) return; + add_great_item(); + add_epic_item(); + if (!("game.playersnb" > 2)) return; + add_great_item(); + if (!("game.playersnb" > 3)) return; + add_great_item(); + add_great_item(); + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/m2_quest2_bigbonus.as b/scripts/angelscript/chests/m2_quest2_bigbonus.as new file mode 100644 index 00000000..959175f2 --- /dev/null +++ b/scripts/angelscript/chests/m2_quest2_bigbonus.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class M2Quest2Bigbonus : CGameScript +{ + void chest_additems() + { + add_noob_item(); + add_noob_item(); + add_good_item(); + add_good_item(); + add_good_item(); + add_good_item(); + if ("game.playersnb" > 2) + { + add_great_item(); + } + if ("game.playersnb" > 4) + { + add_great_item(); + } + add_gold(200); + AddStoreItem(STORENAME, "proj_arrow_blunt", 45, 0, 0, 15); + } + +} + +} diff --git a/scripts/angelscript/chests/m2_quest2_extra.as b/scripts/angelscript/chests/m2_quest2_extra.as new file mode 100644 index 00000000..d9421688 --- /dev/null +++ b/scripts/angelscript/chests/m2_quest2_extra.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class M2Quest2Extra : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "item_torch", 1, 0); + add_noob_item(); + add_good_item(); + string L_NPLAYERS = "game.playersnb"; + if (L_NPLAYERS > 2) + { + add_great_item(); + } + if (L_NPLAYERS > 4) + { + add_great_item(); + } + if (RandomInt(1, 5) < L_NPLAYERS) + { + add_noob_arrows(); + } + string GOLD_AMT = L_NPLAYERS; + GOLD_AMT *= 25; + add_gold(GOLD_AMT); + } + +} + +} diff --git a/scripts/angelscript/chests/m2_quest2_final.as b/scripts/angelscript/chests/m2_quest2_final.as new file mode 100644 index 00000000..f4eb8a21 --- /dev/null +++ b/scripts/angelscript/chests/m2_quest2_final.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class M2Quest2Final : CGameScript +{ + int TOLD_SYPH; + + void chest_additems() + { + AddStoreItem(STORENAME, "swords_spiderblade", 1, 0); + AddStoreItem(STORENAME, "mana_prot_spiders", 1, 0); + add_noob_item(); + add_noob_item(); + add_good_item(); + add_good_item(); + add_great_item(); + if ("game.playersnb" > 1) + { + add_great_item(); + } + add_gold(200); + AddStoreItem(STORENAME, "proj_arrow_blunt", 15, 0, 0, 15); + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + if ((TOLD_SYPH)) return; + TOLD_SYPH = 1; + CallExternal(FindEntityByName("sylphiel"), "ext_saw_chest"); + } + +} + +} diff --git a/scripts/angelscript/chests/nashalrath_extra.as b/scripts/angelscript/chests/nashalrath_extra.as new file mode 100644 index 00000000..b214e79f --- /dev/null +++ b/scripts/angelscript/chests/nashalrath_extra.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class NashalrathExtra : CGameScript +{ + void chest_additems() + { + add_gold(2000); + chest_add_hpot_mpot(); + add_good_item(); + add_great_item(); + add_epic_arrows(15); + add_great_arrows(15); + add_noob_arrows(15); + AddStoreItem(STORENAME, "mana_immune_poison", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/nashalrath_final.as b/scripts/angelscript/chests/nashalrath_final.as new file mode 100644 index 00000000..c7a799e4 --- /dev/null +++ b/scripts/angelscript/chests/nashalrath_final.as @@ -0,0 +1,68 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class NashalrathFinal : CGameScript +{ + string DID_FIRST_OPEN; + + void OnSpawn() override + { + tc_add_artifact("shields_f", 8); + tc_add_artifact("swords_vb", 8); + tc_add_artifact("swords_gb", 8); + SetName("Jaminporlant's Generosity (multi)"); + SetProp(GetOwner(), "scale", 2.0); + } + + void tc_open() + { + if (!(DID_FIRST_OPEN)) + { + DID_FIRST_OPEN = 1; + CallExternal(FindEntityByName("gdragon_img"), "ext_exit_sequence"); + } + } + + void chest_additems() + { + add_gold(5000); + add_epic_item(); + add_epic_item(); + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + AddStoreItem(STORENAME, "mana_resist_fire", 1, 0); + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + } + if (RandomInt(1, 24) == 1) + { + AddStoreItem(STORENAME, "armor_faura", 1, 0); + } + if (RandomInt(1, 24) == 1) + { + AddStoreItem(STORENAME, "item_charm_w2", 1, 0); + } + if (RandomInt(1, 24) == 1) + { + AddStoreItem(STORENAME, GetRandomToken("smallarms_cre;smallarms_cre;smallarms_crel;smallarms_cref", ";"), 1, 0); + } + if ("game.players.totalhp" > 4000) + { + add_epic_item(); + add_epic_item(); + } + add_great_item(); + add_great_item(); + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/nashalrath_mid.as b/scripts/angelscript/chests/nashalrath_mid.as new file mode 100644 index 00000000..6e3e09bf --- /dev/null +++ b/scripts/angelscript/chests/nashalrath_mid.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class NashalrathMid : CGameScript +{ + void chest_additems() + { + add_gold(5000); + add_epic_item(); + AddStoreItem(STORENAME, "mana_resist_fire", 1, 0); + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + } + add_great_item(); + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/olympus.as b/scripts/angelscript/chests/olympus.as new file mode 100644 index 00000000..14223edb --- /dev/null +++ b/scripts/angelscript/chests/olympus.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Olympus : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("polearms_ti", 10); + } + + void chest_additems() + { + add_gold(500); + add_epic_item(); + add_epic_item(); + add_epic_arrows(15); + add_great_arrows(15); + add_epic_arrows(15); + add_great_arrows(15); + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 20) == 1) + { + add_epic_arrows(15); + add_great_arrows(15); + AddStoreItem(STORENAME, "armor_venom", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "item_charm_w2", 1, 0); + } + if ("game.players.totalhp" > 4000) + { + add_epic_item(100, 300); + } + add_great_item(); + add_great_item(); + add_great_item(); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "polearms_hal", 1, 0); + } + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_archers1.as b/scripts/angelscript/chests/orcfor_archers1.as new file mode 100644 index 00000000..b7da909f --- /dev/null +++ b/scripts/angelscript/chests/orcfor_archers1.as @@ -0,0 +1,62 @@ +#pragma context server + +#include "chests/orcfor_base.as" + +namespace MS +{ + +class OrcforArchers1 : CGameScript +{ + void chest_additems() + { + add_gold((100 * G_GAVE_ARTI1)); + if (G_GAVE_ARTI1 == 1) + { + add_noob_item(); + add_good_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 2) + { + add_noob_item(); + add_good_item(); + add_great_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 3) + { + add_good_item(); + add_great_item(); + add_great_item(); + } + if (G_GAVE_ARTI1 == 4) + { + add_good_item(); + add_great_item(); + add_great_arrows(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 5) + { + add_great_item(); + add_great_item(); + add_epic_item(); + add_great_arrows(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 > 5) + { + add_great_item(); + add_epic_item(); + add_epic_item(); + add_great_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_archers1_trap.as b/scripts/angelscript/chests/orcfor_archers1_trap.as new file mode 100644 index 00000000..d53ea737 --- /dev/null +++ b/scripts/angelscript/chests/orcfor_archers1_trap.as @@ -0,0 +1,62 @@ +#pragma context server + +#include "chests/orcfor_base.as" + +namespace MS +{ + +class OrcforArchers1Trap : CGameScript +{ + int SET_TRAP; + + void chest_additems() + { + add_gold((100 * G_GAVE_ARTI1)); + if (G_GAVE_ARTI1 == 1) + { + add_good_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 2) + { + add_great_item(); + add_great_arrows(); + } + if (G_GAVE_ARTI1 == 3) + { + add_great_item(); + add_great_arrows(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 4) + { + add_epic_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 5) + { + add_epic_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 > 5) + { + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + if ((SET_TRAP)) return; + SET_TRAP = 1; + string MSG_TITLE = GetEntityName(param1); + MSG_TITLE += " has triggered a trap!"; + SendInfoMsg("all", MSG_TITLE + " Oh noes!"); + UseTrigger("spawn_archers1_trap"); + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_archers2.as b/scripts/angelscript/chests/orcfor_archers2.as new file mode 100644 index 00000000..c175d165 --- /dev/null +++ b/scripts/angelscript/chests/orcfor_archers2.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "chests/orcfor_base.as" + +namespace MS +{ + +class OrcforArchers2 : CGameScript +{ + void chest_additems() + { + add_gold((100 * G_GAVE_ARTI1)); + if (G_GAVE_ARTI1 == 1) + { + add_noob_item(); + add_good_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 2) + { + add_noob_item(); + add_good_item(); + add_great_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 3) + { + add_good_item(); + add_great_item(); + add_great_item(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 4) + { + add_good_item(); + add_great_item(); + add_great_arrows(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 5) + { + add_great_item(); + add_great_item(); + add_great_arrows(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 > 5) + { + add_great_item(); + add_great_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_base.as b/scripts/angelscript/chests/orcfor_base.as new file mode 100644 index 00000000..2ebb2499 --- /dev/null +++ b/scripts/angelscript/chests/orcfor_base.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class OrcforBase : CGameScript +{ + float ARTI_CHANCE; + string ORCFOR_CHEST_FOUND; + + OrcforBase() + { + ARTI_CHANCE = 0.55; + } + + void OnSpawn() override + { + if (!(ORCFOR_CHEST_FOUND)) + { + ORCFOR_CHEST_FOUND = 1; + G_GAVE_ARTI1 += 1; + } + ARTI_CHANCE = (ARTI_CHANCE * G_GAVE_ARTI1); + tc_add_artifact("bows_sxbow", ARTI_CHANCE); + } + + void chest_additems() + { + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "blunt_ms1", 1, 0); + } + else + { + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "blunt_ms2", 1, 0); + } + else + { + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "blunt_ms3", 1, 0); + } + } + } + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_caves.as b/scripts/angelscript/chests/orcfor_caves.as new file mode 100644 index 00000000..630e715a --- /dev/null +++ b/scripts/angelscript/chests/orcfor_caves.as @@ -0,0 +1,30 @@ +#pragma context server + +#include "chests/orcfor_base.as" + +namespace MS +{ + +class OrcforCaves : CGameScript +{ + int SET_TRAP; + + void chest_additems() + { + add_gold((100 * G_GAVE_ARTI1)); + add_epic_item(); + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + if ((SET_TRAP)) return; + SET_TRAP = 1; + string MSG_TITLE = GetEntityName(param1); + MSG_TITLE += " has triggered a trap!"; + SendInfoMsg("all", MSG_TITLE + " Oh noes!"); + UseTrigger("spawn_cave_trap"); + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_final_easy.as b/scripts/angelscript/chests/orcfor_final_easy.as new file mode 100644 index 00000000..28a858d3 --- /dev/null +++ b/scripts/angelscript/chests/orcfor_final_easy.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "chests/orcfor_base.as" + +namespace MS +{ + +class OrcforFinalEasy : CGameScript +{ + void chest_additems() + { + add_gold((500 * G_GAVE_ARTI1)); + if (G_GAVE_ARTI1 == 1) + { + add_great_item(); + add_great_item(); + add_great_arrows(); + add_great_arrows(); + } + if (G_GAVE_ARTI1 == 2) + { + add_great_item(); + add_epic_item(); + add_great_arrows(); + add_great_arrows(); + } + if (G_GAVE_ARTI1 == 3) + { + add_great_item(); + add_epic_item(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 4) + { + add_epic_item(); + add_epic_item(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 >= 5) + { + add_epic_item(); + add_epic_item(); + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_final_hard.as b/scripts/angelscript/chests/orcfor_final_hard.as new file mode 100644 index 00000000..74ce86e7 --- /dev/null +++ b/scripts/angelscript/chests/orcfor_final_hard.as @@ -0,0 +1,85 @@ +#pragma context server + +#include "chests/orcfor_base.as" + +namespace MS +{ + +class OrcforFinalHard : CGameScript +{ + void chest_additems() + { + add_gold((500 * G_GAVE_ARTI1)); + if (G_GAVE_ARTI1 == 1) + { + add_great_item(); + add_epic_item(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 2) + { + add_epic_item(); + add_epic_item(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 3) + { + add_epic_item(); + add_epic_item(); + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 4) + { + add_epic_item(); + add_epic_item(); + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 5) + { + add_epic_item(); + add_epic_item(); + add_epic_item(); + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 > 5) + { + add_epic_item(); + add_epic_item(); + add_epic_item(); + add_epic_item(); + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "mana_paura", 1, 0); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "mana_faura", 1, 0); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "mana_fbrand", 1, 0); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "mana_font", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_gobtown1.as b/scripts/angelscript/chests/orcfor_gobtown1.as new file mode 100644 index 00000000..d3a73b80 --- /dev/null +++ b/scripts/angelscript/chests/orcfor_gobtown1.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "chests/orcfor_base.as" + +namespace MS +{ + +class OrcforGobtown1 : CGameScript +{ + void chest_additems() + { + add_gold((100 * G_GAVE_ARTI1)); + if (G_GAVE_ARTI1 == 1) + { + add_noob_item(); + add_good_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 2) + { + add_great_item(); + add_great_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 3) + { + add_great_item(); + add_epic_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 4) + { + add_great_item(); + add_epic_item(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 5) + { + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 > 5) + { + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_gobtown2.as b/scripts/angelscript/chests/orcfor_gobtown2.as new file mode 100644 index 00000000..a20bf998 --- /dev/null +++ b/scripts/angelscript/chests/orcfor_gobtown2.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "chests/orcfor_base.as" + +namespace MS +{ + +class OrcforGobtown2 : CGameScript +{ + void chest_additems() + { + add_gold((100 * G_GAVE_ARTI1)); + if (G_GAVE_ARTI1 == 1) + { + add_noob_item(); + add_good_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 2) + { + add_great_item(); + add_great_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 3) + { + add_great_item(); + add_epic_item(); + add_good_arrows(); + } + if (G_GAVE_ARTI1 == 4) + { + add_great_item(); + add_epic_item(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 5) + { + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 > 5) + { + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_orchuts1.as b/scripts/angelscript/chests/orcfor_orchuts1.as new file mode 100644 index 00000000..5ab90a87 --- /dev/null +++ b/scripts/angelscript/chests/orcfor_orchuts1.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "chests/orcfor_base.as" + +namespace MS +{ + +class OrcforOrchuts1 : CGameScript +{ + void chest_additems() + { + add_gold((200 * G_GAVE_ARTI1)); + if (G_GAVE_ARTI1 == 1) + { + add_noob_item(); + add_good_arrows(); + add_good_arrows(); + add_great_item(); + } + if (G_GAVE_ARTI1 == 2) + { + add_noob_item(); + add_great_item(); + add_good_arrows(); + add_great_arrows(); + } + if (G_GAVE_ARTI1 == 3) + { + add_great_item(); + add_epic_item(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 4) + { + add_epic_item(); + add_great_arrows(); + add_great_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 5) + { + add_epic_item(); + add_great_arrows(); + add_great_arrows(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 > 5) + { + add_epic_item(); + add_epic_item(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/orcfor_tower.as b/scripts/angelscript/chests/orcfor_tower.as new file mode 100644 index 00000000..106719bc --- /dev/null +++ b/scripts/angelscript/chests/orcfor_tower.as @@ -0,0 +1,50 @@ +#pragma context server + +#include "chests/orcfor_base.as" + +namespace MS +{ + +class OrcforTower : CGameScript +{ + void chest_additems() + { + add_gold((200 * G_GAVE_ARTI1)); + if (G_GAVE_ARTI1 == 1) + { + add_great_arrows(); + } + if (G_GAVE_ARTI1 == 2) + { + add_great_arrows(); + add_great_arrows(); + } + if (G_GAVE_ARTI1 == 3) + { + add_great_arrows(); + add_great_arrows(); + add_great_arrows(); + } + if (G_GAVE_ARTI1 == 4) + { + add_great_arrows(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 == 5) + { + add_great_arrows(); + add_great_arrows(); + add_epic_arrows(); + } + if (G_GAVE_ARTI1 > 5) + { + add_great_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/phlames_blacksmith.as b/scripts/angelscript/chests/phlames_blacksmith.as new file mode 100644 index 00000000..4c31ef17 --- /dev/null +++ b/scripts/angelscript/chests/phlames_blacksmith.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class PhlamesBlacksmith : CGameScript +{ + void OnSpawn() override + { + SetName("Treasure Chest"); + } + + void chest_additems() + { + string L_GOLD = "game.players.totalhp"; + if (L_GOLD < 2000) + { + int L_GOLD = 2000; + } + add_gold(L_GOLD); + add_epic_item(); + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "blunt_darkmaul", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "blunt_gauntlets_fire", 1, 0); + } + if (RandomInt(1, 15) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + } + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + if (RandomInt(1, 25) == 1) + { + AddStoreItem(STORENAME, "blunt_fs", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "mana_fbrand", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "mana_fbrand", 1, 0); + } + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "mana_faura", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/phlames_final.as b/scripts/angelscript/chests/phlames_final.as new file mode 100644 index 00000000..e68a187f --- /dev/null +++ b/scripts/angelscript/chests/phlames_final.as @@ -0,0 +1,91 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class PhlamesFinal : CGameScript +{ + string SOME_POTS; + + PhlamesFinal() + { + SOME_POTS = "mana_paura;mana_faura;mana_fbrand;mana_font;mana_immune_cold;mana_resist_cold;mana_immune_lightning"; + } + + void OnSpawn() override + { + SetName("Treasure Chest"); + tc_add_artifact("blunt_staff_f", 7); + } + + void chest_additems() + { + add_gold(500); + AddStoreItem(STORENAME, "mana_immune_cold", 1, 0); + AddStoreItem(STORENAME, "item_gwond", 1, 0); + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "item_charm_w3", 1, 0); + } + AddStoreItem(STORENAME, "item_eh", 1, 0); + offer_felewyn_symbol(100); + add_epic_item(); + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "blunt_gauntlets_demon", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + powshuns_i_got_powshuns(); + } + add_epic_item(); + add_epic_item(); + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "polearms_nag", 1, 0); + } + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "armor_fireliz", 1, 0); + } + if (RandomInt(1, 15) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 25) == 1) + { + AddStoreItem(STORENAME, "bows_firebird", 1, 0); + } + if (RandomInt(1, 15) == 1) + { + powshuns_i_got_powshuns(); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "axes_dragon", 1, 0); + } + if (RandomInt(1, 15) == 1) + { + add_epic_item(); + } + add_epic_arrows(60); + if (RandomInt(1, 8) == 1) + { + powshuns_i_got_powshuns(); + } + } + + void powshuns_i_got_powshuns() + { + string N_POTS = GetTokenCount(SOME_POTS, ";"); + N_POTS -= 1; + int RND_POT_IDX = RandomInt(SOME_POTS, N_POTS); + string RND_POT = GetToken(SOME_POTS, RND_POT_IDX, ";"); + AddStoreItem(STORENAME, RND_POT, 1, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/phlames_reaver.as b/scripts/angelscript/chests/phlames_reaver.as new file mode 100644 index 00000000..93c5e139 --- /dev/null +++ b/scripts/angelscript/chests/phlames_reaver.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class PhlamesReaver : CGameScript +{ + void OnSpawn() override + { + SetName("Treasure Chest"); + } + + void chest_additems() + { + add_gold(500); + add_epic_arrows(); + add_epic_item(); + if (RandomInt(1, 3) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 3) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 3) == 1) + { + add_epic_arrows(); + } + AddStoreItem(STORENAME, "mana_resist_cold", 1, 0); + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "item_charm_w3", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "mana_fbrand", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "mana_faura", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "mana_immune_cold", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "item_charm_w2", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "mana_immune_lightning", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "smallarms_k_fire", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/phobia_farm.as b/scripts/angelscript/chests/phobia_farm.as new file mode 100644 index 00000000..65b35b79 --- /dev/null +++ b/scripts/angelscript/chests/phobia_farm.as @@ -0,0 +1,20 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class PhobiaFarm : CGameScript +{ + void chest_additems() + { + add_gold(100); + add_great_arrows(); + add_epic_arrows(); + add_epic_arrows(); + } + +} + +} diff --git a/scripts/angelscript/chests/phobia_final.as b/scripts/angelscript/chests/phobia_final.as new file mode 100644 index 00000000..39be1795 --- /dev/null +++ b/scripts/angelscript/chests/phobia_final.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class PhobiaFinal : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("scroll2_summon_bear1", 5); + tc_add_artifact("scroll2_conjure_venom_claws", 10); + tc_add_artifact("scroll_conjure_venom_claws", 10); + } + + void chest_additems() + { + add_epic_item(); + add_epic_item(); + add_good_arrows(); + add_epic_arrows(); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "mana_sb", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "swords_novablade12", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/phobia_storage.as b/scripts/angelscript/chests/phobia_storage.as new file mode 100644 index 00000000..e7069272 --- /dev/null +++ b/scripts/angelscript/chests/phobia_storage.as @@ -0,0 +1,20 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class PhobiaStorage : CGameScript +{ + void chest_additems() + { + add_gold(50); + add_great_item(); + add_good_item(); + add_good_arrows(); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_bluntwood.as b/scripts/angelscript/chests/quiver_of_bluntwood.as new file mode 100644 index 00000000..68bdcee0 --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_bluntwood.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfBluntwood : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfBluntwood() + { + BQ_QUIVER_TYPE = "proj_arrow_bluntwooden"; + BQ_BUNDLE_SIZE = 60; + } + + void OnSpawn() override + { + SetName("Quiver of Blunt Arrows"); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_broadhead.as b/scripts/angelscript/chests/quiver_of_broadhead.as new file mode 100644 index 00000000..1b8d8367 --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_broadhead.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfBroadhead : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfBroadhead() + { + BQ_QUIVER_TYPE = "proj_arrow_broadhead"; + BQ_BUNDLE_SIZE = 60; + } + + void OnSpawn() override + { + SetName("Quiver of Broadhead Arrows"); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_fire.as b/scripts/angelscript/chests/quiver_of_fire.as new file mode 100644 index 00000000..6179e981 --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_fire.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfFire : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfFire() + { + BQ_QUIVER_TYPE = "proj_arrow_fire"; + BQ_BUNDLE_SIZE = 60; + } + + void OnSpawn() override + { + SetName("Quiver of Fire Arrows"); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_frost.as b/scripts/angelscript/chests/quiver_of_frost.as new file mode 100644 index 00000000..88963d4a --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_frost.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfFrost : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfFrost() + { + BQ_QUIVER_TYPE = "proj_arrow_frost"; + BQ_BUNDLE_SIZE = 60; + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_frost_arrows.as b/scripts/angelscript/chests/quiver_of_frost_arrows.as new file mode 100644 index 00000000..5f6d9901 --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_frost_arrows.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfFrostArrows : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfFrostArrows() + { + BQ_QUIVER_TYPE = "proj_arrow_frost"; + BQ_BUNDLE_SIZE = 60; + } + + void OnSpawn() override + { + SetName("Quiver of Frost Arrows"); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_gpoison.as b/scripts/angelscript/chests/quiver_of_gpoison.as new file mode 100644 index 00000000..ed21dcb2 --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_gpoison.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfGpoison : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfGpoison() + { + BQ_QUIVER_TYPE = "proj_arrow_gpoison"; + BQ_BUNDLE_SIZE = 60; + } + + void OnSpawn() override + { + SetName("Quiver of Deadly Arrows"); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_jagged.as b/scripts/angelscript/chests/quiver_of_jagged.as new file mode 100644 index 00000000..457d1cdf --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_jagged.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfJagged : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfJagged() + { + BQ_QUIVER_TYPE = "proj_arrow_jagged"; + BQ_BUNDLE_SIZE = 60; + } + + void OnSpawn() override + { + SetName("Quiver of Jagged Arrows"); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_lightning.as b/scripts/angelscript/chests/quiver_of_lightning.as new file mode 100644 index 00000000..c53a56d0 --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_lightning.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfLightning : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfLightning() + { + BQ_QUIVER_TYPE = "proj_arrow_lightning"; + BQ_BUNDLE_SIZE = 60; + } + + void OnSpawn() override + { + SetName("Quiver of Lightning Arrows"); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_poison.as b/scripts/angelscript/chests/quiver_of_poison.as new file mode 100644 index 00000000..08a4c1ef --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_poison.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfPoison : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfPoison() + { + BQ_QUIVER_TYPE = "proj_arrow_poison"; + BQ_BUNDLE_SIZE = 60; + } + + void OnSpawn() override + { + SetName("Quiver of Envenomed Arrows"); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_random_lesser.as b/scripts/angelscript/chests/quiver_of_random_lesser.as new file mode 100644 index 00000000..e9e5094d --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_random_lesser.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfRandomLesser : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfRandomLesser() + { + BQ_QUIVER_TYPE = "proj_arrow_silvertipped"; + BQ_BUNDLE_SIZE = 60; + } + + void OnSpawn() override + { + SetName("Quiver of Arrows"); + ScheduleDelayedEvent(0.1, "pick_random_type"); + } + + void pick_random_type() + { + int ARROW_QUALITY = RandomInt(1, 3); + if (ARROW_QUALITY < 3) + { + string ARROW_LIST = G_NOOB_ARROWS; + } + else + { + string ARROW_LIST = G_GOOD_ARROWS; + } + string N_ARROWS = GetTokenCount(ARROW_LIST, ";"); + N_ARROWS -= 1; + int RND_ARROW = RandomInt(0, N_ARROWS); + BQ_QUIVER_TYPE = GetToken(ARROW_LIST, RND_ARROW, ";"); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_silver.as b/scripts/angelscript/chests/quiver_of_silver.as new file mode 100644 index 00000000..a8ae20f7 --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_silver.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfSilver : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfSilver() + { + BQ_QUIVER_TYPE = "proj_arrow_silvertipped"; + BQ_BUNDLE_SIZE = 60; + } + + void OnSpawn() override + { + SetName("Quiver of Elven Arrows"); + } + +} + +} diff --git a/scripts/angelscript/chests/quiver_of_wooden.as b/scripts/angelscript/chests/quiver_of_wooden.as new file mode 100644 index 00000000..81f3e272 --- /dev/null +++ b/scripts/angelscript/chests/quiver_of_wooden.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_quiver_of.as" + +namespace MS +{ + +class QuiverOfWooden : CGameScript +{ + int BQ_BUNDLE_SIZE; + string BQ_QUIVER_TYPE; + + QuiverOfWooden() + { + BQ_QUIVER_TYPE = "proj_arrow_wooden"; + BQ_BUNDLE_SIZE = 30; + } + + void OnSpawn() override + { + SetName("Quiver of Wooden Arrows"); + } + +} + +} diff --git a/scripts/angelscript/chests/rand_dynamic.as b/scripts/angelscript/chests/rand_dynamic.as new file mode 100644 index 00000000..60d06d10 --- /dev/null +++ b/scripts/angelscript/chests/rand_dynamic.as @@ -0,0 +1,90 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class RandDynamic : CGameScript +{ + int HP_REQ; + int MAX_GOLD_AMT; + + RandDynamic() + { + HP_REQ = 500; + MAX_GOLD_AMT = 200; + } + + void chest_additems() + { + add_gold_by_hp(MAX_GOLD_AMT); + if (GetEntityMaxHealth(CHEST_USER) < 10) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 0; + } + if (GetEntityMaxHealth(CHEST_USER) >= 50) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 5; + } + if (GetEntityMaxHealth(CHEST_USER) >= 100) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 10; + } + if (GetEntityMaxHealth(CHEST_USER) >= 400) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 20; + } + if (GetEntityMaxHealth(CHEST_USER) >= 600) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 50; + } + if (GetEntityMaxHealth(CHEST_USER) >= 800) + { + int MIN_ITEM_LEVEL = 2; + int UPGRADE_CHANCE = 75; + } + if (GetEntityMaxHealth(CHEST_USER) >= 1000) + { + int MIN_ITEM_LEVEL = 3; + int UPGRADE_CHANCE = 0; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (MIN_ITEM_LEVEL > 3) + { + int MIN_ITEM_LEVEL = 3; + } + if (MIN_ITEM_LEVEL == 0) + { + string ITEM_EVENT = "add_noob_item"; + } + if (MIN_ITEM_LEVEL == 1) + { + string ITEM_EVENT = "add_good_item"; + } + if (MIN_ITEM_LEVEL == 2) + { + string ITEM_EVENT = "add_great_item"; + } + if (MIN_ITEM_LEVEL == 3) + { + string ITEM_EVENT = "add_epic_item"; + } + ITEM_EVENT(100); + } + +} + +} diff --git a/scripts/angelscript/chests/rand_dynamic2.as b/scripts/angelscript/chests/rand_dynamic2.as new file mode 100644 index 00000000..24216628 --- /dev/null +++ b/scripts/angelscript/chests/rand_dynamic2.as @@ -0,0 +1,211 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class RandDynamic2 : CGameScript +{ + string CHEST_TIER; + + void chest_additems() + { + CHEST_TIER = GetEntityMaxHealth(CHEST_USER); + CHEST_TIER /= 500; + if (("game.central")) + { + string L_NPLAYERS = "game.playersnb"; + if (L_NPLAYERS > 1) + { + } + L_NPLAYERS *= 0.5; + CHEST_TIER += L_NPLAYERS; + } + LogDebug("chest_additems chest_tier CHEST_TIER"); + if ((BC_USE_TRACKER)) + { + if (!(CHEST_FOUND)) + { + CHEST_FOUND = 1; + G_CHEST_TRACKER += 1; + } + string L_GMULTI = (G_CHEST_TRACKER * 2); + } + else + { + string L_GMULTI = CHEST_TIER; + } + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= L_GMULTI; + if (("game.central")) + { + L_GOLD_TO_ADD *= "game.playersnb"; + } + LogDebug("rand_self_adj gold: int(L_GOLD_TO_ADD)"); + add_gold(int(L_GOLD_TO_ADD)); + if ((BC_USE_TRACKER)) + { + for (int i = 0; i < G_CHEST_TRACKER; i++) + { + add_items_self_adj(); + } + } + else + { + for (int i = 0; i < int(CHEST_TIER); i++) + { + add_items_self_adj(); + } + } + } + + void add_items_self_adj() + { + LogDebug("add_items_self_adj CHEST_TIER"); + if (CHEST_TIER < 2) + { + string L_TYPE = "get_type"(30, 30, 30); + if (L_TYPE == 1) + { + add_great_item(1.0); + } + else + { + if (L_TYPE == 2) + { + add_good_pot(1.0); + } + else + { + if (L_TYPE == 3) + { + add_good_arrows(1.0); + } + } + } + } + if (CHEST_TIER >= 2) + { + if (CHEST_TIER < 3) + { + } + string L_TYPE = "get_type"(10, 25, 65); + if (L_TYPE == 1) + { + add_good_pot(1.0); + } + else + { + if (L_TYPE == 2) + { + add_epic_item(1.0); + } + else + { + if (L_TYPE == 3) + { + add_great_arrows(1.0); + } + } + } + } + if (CHEST_TIER >= 3) + { + if (CHEST_TIER < 4) + { + } + string L_TYPE = "get_type"(10, 35, 55); + if (L_TYPE == 1) + { + add_great_pot(1.0); + } + else + { + if (L_TYPE == 2) + { + add_epic_item(1.0); + } + else + { + if (L_TYPE == 3) + { + add_epic_arrows(1.0); + } + } + } + } + if (CHEST_TIER >= 4) + { + if (CHEST_TIER < 5) + { + } + string L_TYPE = "get_type"(5, 40, 55); + if (L_TYPE == 1) + { + add_epic_pot(1.0); + } + else + { + if (L_TYPE == 2) + { + add_epic_item(1.0); + } + else + { + if (L_TYPE == 3) + { + add_epic_arrows(1.0); + } + } + } + } + if (CHEST_TIER >= 5) + { + string L_TYPE = "get_type"(10, 40, 50); + if (L_TYPE == 1) + { + add_epic_pot(1.0); + } + else + { + if (L_TYPE == 2) + { + add_epic_item(1.0); + } + else + { + if (L_TYPE == 3) + { + add_epic_arrows(1.0); + } + } + } + } + } + + void get_type() + { + int L_ROLL = RandomInt(1, 100); + if (L_ROLL <= param1) + { + return; + LogDebug("get_type [ PARAM1 PARAM2 PARAM3 ] L_ROLL = 1"); + return; + } + if (L_ROLL > param1) + { + if (L_ROLL <= param2) + { + } + LogDebug("get_type [ PARAM1 PARAM2 PARAM3 ] L_ROLL = 2"); + return; + return; + } + LogDebug("get_type [ PARAM1 PARAM2 PARAM3 ] L_ROLL = 3"); + return; + } + +} + +} diff --git a/scripts/angelscript/chests/rand_epic_new.as b/scripts/angelscript/chests/rand_epic_new.as new file mode 100644 index 00000000..f1613ce5 --- /dev/null +++ b/scripts/angelscript/chests/rand_epic_new.as @@ -0,0 +1,33 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class RandEpicNew : CGameScript +{ + int HP_REQ; + string ITEM_EVENT; + int MAX_GOLD_AMT; + + RandEpicNew() + { + ITEM_EVENT = "add_epic_item"; + HP_REQ = 500; + MAX_GOLD_AMT = 200; + } + + void chest_additems() + { + add_gold_by_hp(MAX_GOLD_AMT); + ITEM_EVENT(100, HP_REQ); + if ((G_DEVELOPER_MODE)) + { + SayText(ITEM_EVENT + HP_REQ); + } + } + +} + +} diff --git a/scripts/angelscript/chests/rand_good.as b/scripts/angelscript/chests/rand_good.as new file mode 100644 index 00000000..8d5429a8 --- /dev/null +++ b/scripts/angelscript/chests/rand_good.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class RandGood : CGameScript +{ + string ITEM_EVENT; + + RandGood() + { + ITEM_EVENT = "add_good_item"; + } + + void chest_additems() + { + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + add_gold(10, 200, 10); + ITEM_EVENT(100); + string N_PLAYERS = "game.playersnb"; + if (!(N_PLAYERS > 1)) return; + if (N_PLAYERS > 4) + { + int N_PLAYERS = 4; + } + for (int i = 0; i < N_PLAYERS; i++) + { + add_extra_items(); + } + } + + void add_extra_items() + { + ITEM_EVENT(100); + } + +} + +} diff --git a/scripts/angelscript/chests/rand_good_new.as b/scripts/angelscript/chests/rand_good_new.as new file mode 100644 index 00000000..982c10bb --- /dev/null +++ b/scripts/angelscript/chests/rand_good_new.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class RandGoodNew : CGameScript +{ + int HP_REQ; + string ITEM_EVENT; + int MAX_GOLD_AMT; + + RandGoodNew() + { + ITEM_EVENT = "add_good_item"; + HP_REQ = 200; + MAX_GOLD_AMT = 50; + } + + void chest_additems() + { + add_gold_by_hp(MAX_GOLD_AMT); + ITEM_EVENT(100, HP_REQ); + } + +} + +} diff --git a/scripts/angelscript/chests/rand_great.as b/scripts/angelscript/chests/rand_great.as new file mode 100644 index 00000000..b1ff7d2e --- /dev/null +++ b/scripts/angelscript/chests/rand_great.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class RandGreat : CGameScript +{ + string ITEM_EVENT; + + RandGreat() + { + ITEM_EVENT = "add_great_item"; + } + + void chest_additems() + { + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + add_gold(25, 500, 25); + ITEM_EVENT(100); + string N_PLAYERS = "game.playersnb"; + if (!(N_PLAYERS > 1)) return; + if (N_PLAYERS > 4) + { + int N_PLAYERS = 4; + } + for (int i = 0; i < N_PLAYERS; i++) + { + add_extra_items(); + } + } + + void add_extra_items() + { + ITEM_EVENT(100); + } + +} + +} diff --git a/scripts/angelscript/chests/rmines_boss.as b/scripts/angelscript/chests/rmines_boss.as new file mode 100644 index 00000000..69514a92 --- /dev/null +++ b/scripts/angelscript/chests/rmines_boss.as @@ -0,0 +1,190 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class RminesBoss : CGameScript +{ + string ANIM_CLOSE; + string ANIM_IDLE; + string ANIM_OPEN; + string SOUND_OPEN; + + RminesBoss() + { + ANIM_IDLE = "base"; + ANIM_CLOSE = "base"; + ANIM_OPEN = "base"; + SOUND_OPEN = "debris/flesh5.wav"; + } + + void OnSpawn() override + { + SetName("Abyssal Nest"); + SetModel("tiod/ornest.mdl"); + SetProp(GetOwner(), "scale", 3.0); + SetWidth(96); + SetHeight(48); + tc_add_artifact("polearms_sl", 5); + tc_add_artifact("axes_c", 5); + } + + void chest_additems() + { + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= "game.playersnb"; + L_GOLD_TO_ADD *= 10; + add_gold(int(L_GOLD_TO_ADD)); + AddStoreItem(STORENAME, "proj_bolt_poison", 25, 0, 0, 25); + add_great_item(); + add_epic_item(); + add_great_arrows(); + add_epic_arrows(); + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_great_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 10) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "mana_paura", 1, 0); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "mana_faura", 1, 0); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "mana_fbrand", 1, 0); + } + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "mana_font", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "proj_bolt_poison", 75, 0, 0, 25); + } + offer_felewyn_symbol(20); + } + +} + +} diff --git a/scripts/angelscript/chests/rmines_gboss.as b/scripts/angelscript/chests/rmines_gboss.as new file mode 100644 index 00000000..4fadfa0e --- /dev/null +++ b/scripts/angelscript/chests/rmines_gboss.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class RminesGboss : CGameScript +{ + void chest_additems() + { + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= "game.playersnb"; + L_GOLD_TO_ADD *= 10; + add_gold(int(L_GOLD_TO_ADD)); + AddStoreItem(STORENAME, "proj_bolt_poison", 25, 0, 0, 25); + add_great_item(); + add_epic_item(); + add_great_arrows(); + if (RandomInt(1, 8) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 25) == 1) + { + AddStoreItem(STORENAME, "mana_bravery", 1, 0); + } + if (RandomInt(1, 25) == 1) + { + AddStoreItem(STORENAME, "mana_paura", 1, 0); + } + if (RandomInt(1, 25) == 1) + { + AddStoreItem(STORENAME, "mana_faura", 1, 0); + } + if (RandomInt(1, 25) == 1) + { + AddStoreItem(STORENAME, "mana_fbrand", 1, 0); + } + if (RandomInt(1, 25) == 1) + { + AddStoreItem(STORENAME, "mana_font", 1, 0); + } + AddStoreItem(STORENAME, "proj_bolt_poison", 25, 0, 0, 25); + } + +} + +} diff --git a/scripts/angelscript/chests/sfor_fire1.as b/scripts/angelscript/chests/sfor_fire1.as new file mode 100644 index 00000000..496c4cf7 --- /dev/null +++ b/scripts/angelscript/chests/sfor_fire1.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SforFire1 : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("smallarms_flamelick", 4); + } + + void chest_additems() + { + add_gold(50); + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "mana_resist_fire", 1, 0); + add_noob_item(); + add_noob_item(); + add_noob_item(); + if (RandomInt(1, 8) == 1) + { + add_good_item(); + } + if (RandomInt(1, 8) == 1) + { + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/sfor_fire2.as b/scripts/angelscript/chests/sfor_fire2.as new file mode 100644 index 00000000..5f914ea6 --- /dev/null +++ b/scripts/angelscript/chests/sfor_fire2.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "chests/sfor_fire1.as" + +namespace MS +{ + +class SforFire2 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/chests/sfor_wolf.as b/scripts/angelscript/chests/sfor_wolf.as new file mode 100644 index 00000000..1c6c3cb5 --- /dev/null +++ b/scripts/angelscript/chests/sfor_wolf.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SforWolf : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("swords_wolvesbane", 15); + } + + void chest_additems() + { + add_gold(50); + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/chests/shender_east_firegiant.as b/scripts/angelscript/chests/shender_east_firegiant.as new file mode 100644 index 00000000..779412a7 --- /dev/null +++ b/scripts/angelscript/chests/shender_east_firegiant.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ShenderEastFiregiant : CGameScript +{ + void OnSpawn() override + { + SetName("Fire Giant Chest"); + G_GAVE_TOME7 += 1; + tc_add_artifact("blunt_bf", 8); + tc_add_artifact("blunt_bt", 8); + } + + void chest_additems() + { + if (RandomInt(1, 16) <= 1) + { + AddStoreItem(STORENAME, "shields_f", 1, 0); + } + add_epic_item(); + for (int i = 0; i < "game.playersnb"; i++) + { + add_epics(); + } + add_great_item(); + add_great_item(); + add_great_item(); + add_gold(500); + if ("game.players.totalhp" > 2000) + { + add_epic_item(); + } + } + + void add_epics() + { + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/shender_east_icebird.as b/scripts/angelscript/chests/shender_east_icebird.as new file mode 100644 index 00000000..70e83621 --- /dev/null +++ b/scripts/angelscript/chests/shender_east_icebird.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ShenderEastIcebird : CGameScript +{ + string BC_FARTIFACTS; + + ShenderEastIcebird() + { + BC_FARTIFACTS = "mana_faura;mana_fbrand;scroll_ice_blast"; + } + + void OnSpawn() override + { + SetName("Icewing Chest"); + tc_add_artifact("mana_faura", 50); + tc_add_artifact("mana_fbrand", 50); + tc_add_artifact("scroll_ice_blast", 15); + } + + void chest_additems() + { + if ("game.players.totalhp" >= 2000) + { + for (int i = 0; i < 2; i++) + { + add_epics(); + } + } + add_epic_item(); + for (int i = 0; i < "game.playersnb"; i++) + { + add_greats(); + } + add_gold(500); + } + + void add_greats() + { + add_great_item(); + } + + void add_epics() + { + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/shender_east_morc.as b/scripts/angelscript/chests/shender_east_morc.as new file mode 100644 index 00000000..77852177 --- /dev/null +++ b/scripts/angelscript/chests/shender_east_morc.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ShenderEastMorc : CGameScript +{ + void OnSpawn() override + { + G_GAVE_ARTI1 += 1; + } + + void chest_additems() + { + if (G_GAVE_ARTI1 == 1) + { + add_epic_arrows(); + string GOLD_AMT = GetPlayerCount(); + GOLD_AMT *= 50; + add_gold(GOLD_AMT); + } + if (G_GAVE_ARTI1 == 2) + { + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + string GOLD_AMT = "game.playersnb"; + GOLD_AMT *= 500; + add_gold(GOLD_AMT); + } + if (G_GAVE_ARTI1 == 3) + { + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + add_epic_arrows(); + AddStoreItem(STORENAME, "mana_faura", 1, 0); + if ("game.playersnb" > 1) + { + AddStoreItem(STORENAME, "mana_immune_cold", 1, 0); + } + string GOLD_AMT = "game.playersnb"; + GOLD_AMT *= 2000; + add_gold(GOLD_AMT); + } + } + +} + +} diff --git a/scripts/angelscript/chests/shender_east_telf.as b/scripts/angelscript/chests/shender_east_telf.as new file mode 100644 index 00000000..a53502cf --- /dev/null +++ b/scripts/angelscript/chests/shender_east_telf.as @@ -0,0 +1,68 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ShenderEastTelf : CGameScript +{ + int CHEST_LOCKED; + + ShenderEastTelf() + { + CHEST_LOCKED = 1; + } + + void OnSpawn() override + { + SetName("Fedrosh's Lockbox"); + SetName("telf_chest"); + tc_add_artifact("smallarms_crec", 17); + } + + void ext_unlock() + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 255), 64, 90.0); + } + + void chest_additems() + { + if (RandomInt(1, 16) <= "game.playersnb") + { + AddStoreItem(STORENAME, "swords_katana4", 1, 0); + } + add_epic_item(); + for (int i = 0; i < "game.playersnb"; i++) + { + add_epics(); + } + if ("game.players.totalhp" >= 2000) + { + for (int i = 0; i < 2; i++) + { + add_epics(); + } + } + if ("game.players.totalhp" >= 4000) + { + for (int i = 0; i < 4; i++) + { + add_epics(); + } + } + add_great_item(); + add_great_item(); + add_great_item(); + add_great_pot(); + add_epic_pot(); + } + + void add_epics() + { + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/skycastle1.as b/scripts/angelscript/chests/skycastle1.as new file mode 100644 index 00000000..16e974c7 --- /dev/null +++ b/scripts/angelscript/chests/skycastle1.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Skycastle1 : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("armor_golden", 10); + tc_add_artifact("blunt_gauntlets_demon", 10); + } + + void chest_additems() + { + add_gold(1000); + AddStoreItem(STORENAME, "skin_bear", 50, 0); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "armor_plate", 1, 0); + AddStoreItem(STORENAME, "item_crystal_reloc", 1, 0); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "scroll_ice_shield", 1, 0); + } + string H_ARROWS = "game.playersnb"; + H_ARROWS *= 15; + add_epic_item(); + add_epic_item(); + AddStoreItem(STORENAME, "proj_arrow_gholy", H_ARROWS, 0, 0, 15); + } + +} + +} diff --git a/scripts/angelscript/chests/skycastle2.as b/scripts/angelscript/chests/skycastle2.as new file mode 100644 index 00000000..1ddbaede --- /dev/null +++ b/scripts/angelscript/chests/skycastle2.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Skycastle2 : CGameScript +{ + void chest_additems() + { + string P_ARROWS = "game.playersnb"; + string H_ARROWS = "game.playersnb"; + P_ARROWS *= 60; + H_ARROWS *= 15; + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "proj_arrow_poison", P_ARROWS, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_gholy", H_ARROWS, 0, 0, 15); + AddStoreItem(STORENAME, "skin_bear", 50, 0); + AddStoreItem(STORENAME, "item_crystal_return", TC_NPLAYERS, 0); + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/sorc_palace_chief.as b/scripts/angelscript/chests/sorc_palace_chief.as new file mode 100644 index 00000000..c0b54bd6 --- /dev/null +++ b/scripts/angelscript/chests/sorc_palace_chief.as @@ -0,0 +1,50 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SorcPalaceChief : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("scroll_lightning_disc", 5); + tc_add_artifact("scroll2_lightning_disc", 5); + } + + void chest_additems() + { + add_gold(1500); + add_epic_item(); + add_epic_item(); + add_epic_arrows(15); + add_great_arrows(15); + if (RandomInt(1, 16) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "item_charm_w2", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "mana_immune_lightning", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 8) == 1) + { + add_epic_item(); + } + add_great_item(); + add_great_item(); + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/sorc_palace_library.as b/scripts/angelscript/chests/sorc_palace_library.as new file mode 100644 index 00000000..c1fac262 --- /dev/null +++ b/scripts/angelscript/chests/sorc_palace_library.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SorcPalaceLibrary : CGameScript +{ + void chest_additems() + { + add_gold(1000); + AddStoreItem(STORENAME, "scroll_lightning_weak", 1, 0); + AddStoreItem(STORENAME, "scroll2_lightning_weak", 1, 0); + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "scroll_lightning_storm", 1, 0); + AddStoreItem(STORENAME, "scroll2_lightning_storm", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "scroll_lightning_chain", 1, 0); + AddStoreItem(STORENAME, "scroll2_lightning_chain", 1, 0); + } + if (RandomInt(1, 16) == 1) + { + AddStoreItem(STORENAME, "scroll_volcano", 1, 0); + AddStoreItem(STORENAME, "scroll2_volcano", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/sorc_palace_mscave.as b/scripts/angelscript/chests/sorc_palace_mscave.as new file mode 100644 index 00000000..f75a1642 --- /dev/null +++ b/scripts/angelscript/chests/sorc_palace_mscave.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SorcPalaceMscave : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("scroll_lightning_disc", 5); + tc_add_artifact("scroll2_lightning_disc", 5); + } + + void chest_additems() + { + add_gold(500); + add_epic_item(); + add_epic_item(); + offer_felewyn_symbol(25); + add_epic_arrows(30); + add_epic_arrows(30); + if ("game.players.totalhp" > 2000) + { + add_epic_item(); + add_epic_item(); + } + add_great_item(); + add_great_item(); + add_great_item(); + if (RandomInt(1, 8) == 1) + { + add_epic_item(100, 300); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "item_charm_w2", 1, 0); + } + if (RandomInt(1, 16) == 1) + { + AddStoreItem(STORENAME, "armor_faura", 1, 0); + } + if (RandomInt(1, 16) == 1) + { + AddStoreItem(STORENAME, "armor_paura", 1, 0); + } + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "mana_immune_lightning", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/chests/tundra_base.as b/scripts/angelscript/chests/tundra_base.as new file mode 100644 index 00000000..271bc7ee --- /dev/null +++ b/scripts/angelscript/chests/tundra_base.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class TundraBase : CGameScript +{ + void OnSpawn() override + { + G_GAVE_ARTI1 += 1; + tc_add_artifact("blunt_staff_i", (G_GAVE_ARTI1 * 1)); + } + +} + +} diff --git a/scripts/angelscript/chests/tundra_bear.as b/scripts/angelscript/chests/tundra_bear.as new file mode 100644 index 00000000..3f4bc539 --- /dev/null +++ b/scripts/angelscript/chests/tundra_bear.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "chests/tundra_base.as" + +namespace MS +{ + +class TundraBear : CGameScript +{ + void chest_additems() + { + add_gold(500); + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + add_epic_item(); + add_epic_item(); + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/chests/tundra_boat.as b/scripts/angelscript/chests/tundra_boat.as new file mode 100644 index 00000000..3330be6e --- /dev/null +++ b/scripts/angelscript/chests/tundra_boat.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "chests/tundra_base.as" + +namespace MS +{ + +class TundraBoat : CGameScript +{ + void chest_additems() + { + add_gold(500); + add_epic_item(); + add_epic_pot(); + } + +} + +} diff --git a/scripts/angelscript/chests/tundra_dzombs.as b/scripts/angelscript/chests/tundra_dzombs.as new file mode 100644 index 00000000..40ed2479 --- /dev/null +++ b/scripts/angelscript/chests/tundra_dzombs.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "chests/tundra_base.as" + +namespace MS +{ + +class TundraDzombs : CGameScript +{ + void chest_additems() + { + add_gold(500); + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + AddStoreItem(STORENAME, "axes_doubleaxe", 1, 0); + AddStoreItem(STORENAME, "proj_bolt_fire", 50, 0, 0, 50); + add_epic_item(); + add_epic_item(); + if ((RandomInt(1, 3))) + { + add_epic_item(); + } + if ((RandomInt(1, 3))) + { + add_epic_item(); + } + if ((RandomInt(1, 3))) + { + add_epic_item(); + } + if ((RandomInt(1, 3))) + { + add_epic_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/tundra_guardian.as b/scripts/angelscript/chests/tundra_guardian.as new file mode 100644 index 00000000..d3fcb525 --- /dev/null +++ b/scripts/angelscript/chests/tundra_guardian.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "chests/tundra_base.as" + +namespace MS +{ + +class TundraGuardian : CGameScript +{ + void chest_additems() + { + add_gold(500); + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + offer_felewyn_symbol(100); + add_epic_item(); + add_epic_item(); + if ((RandomInt(1, 30))) + { + AddStoreItem(STORENAME, "item_charm_w2", 1, 0); + } + if ((RandomInt(1, 30))) + { + AddStoreItem(STORENAME, "scroll2_ice_blast", 1, 0); + } + if ((RandomInt(1, 30))) + { + AddStoreItem(STORENAME, "mana_font", 1, 0); + } + if ((RandomInt(1, 30))) + { + AddStoreItem(STORENAME, "scroll2_healing_circle_920", 1, 0); + } + if ((RandomInt(1, 10))) + { + add_epic_item(); + } + if ((RandomInt(1, 10))) + { + add_epic_item(); + } + if ((RandomInt(1, 10))) + { + add_epic_item(); + } + if ((RandomInt(1, 10))) + { + add_epic_item(); + } + add_epic_pot(); + } + +} + +} diff --git a/scripts/angelscript/chests/tundra_morcs.as b/scripts/angelscript/chests/tundra_morcs.as new file mode 100644 index 00000000..c6b43e55 --- /dev/null +++ b/scripts/angelscript/chests/tundra_morcs.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "chests/tundra_base.as" + +namespace MS +{ + +class TundraMorcs : CGameScript +{ + void chest_additems() + { + add_gold(500); + add_epic_item(); + add_epic_pot(); + } + +} + +} diff --git a/scripts/angelscript/chests/tundra_polarhut.as b/scripts/angelscript/chests/tundra_polarhut.as new file mode 100644 index 00000000..010abffc --- /dev/null +++ b/scripts/angelscript/chests/tundra_polarhut.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "chests/tundra_base.as" + +namespace MS +{ + +class TundraPolarhut : CGameScript +{ + void chest_additems() + { + add_gold(500); + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + AddStoreItem(STORENAME, "mana_resist_fire", 1, 0); + if ((RandomInt(1, 30))) + { + AddStoreItem(STORENAME, "item_charm_w2", 1, 0); + } + if ((RandomInt(1, 30))) + { + AddStoreItem(STORENAME, "scroll2_ice_blast", 1, 0); + } + if ((RandomInt(1, 30))) + { + AddStoreItem(STORENAME, "scroll_ice_blast", 1, 0); + } + if ((RandomInt(1, 30))) + { + AddStoreItem(STORENAME, "scroll2_healing_circle_920", 1, 0); + } + add_epic_item(); + add_epic_item(); + if ((RandomInt(1, 10))) + { + add_epic_item(); + } + if ((RandomInt(1, 10))) + { + add_epic_item(); + } + if ((RandomInt(1, 10))) + { + add_epic_item(); + } + if ((RandomInt(1, 10))) + { + add_epic_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/umulak_final.as b/scripts/angelscript/chests/umulak_final.as new file mode 100644 index 00000000..900bb0dd --- /dev/null +++ b/scripts/angelscript/chests/umulak_final.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UmulakFinal : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("polearms_ph", 12); + tc_add_artifact("bows_telf4", 12); + tc_add_artifact("blunt_lrod11", 20); + } + + void chest_additems() + { + add_gold(1500); + add_epic_item(); + add_epic_item(); + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + } + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "mana_immune_poison", 1, 0); + } + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "mana_immune_cold", 1, 0); + } + if (RandomInt(1, 16) == 1) + { + AddStoreItem(STORENAME, "scroll2_ice_blast", 1, 0); + } + if (RandomInt(1, 16) == 1) + { + add_epic_item(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/undercliffs_boss1a.as b/scripts/angelscript/chests/undercliffs_boss1a.as new file mode 100644 index 00000000..8cb87ea9 --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_boss1a.as @@ -0,0 +1,78 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercliffsBoss1a : CGameScript +{ + int BC_GLOWSHELL; + string BC_GLOWSHELL_COLOR; + int BC_SPRITE_IN; + + UndercliffsBoss1a() + { + BC_SPRITE_IN = 1; + BC_GLOWSHELL = 1; + BC_GLOWSHELL_COLOR = Vector3(128, 0, 128); + } + + void OnSpawn() override + { + SetName("Widow Chest"); + SetMonsterClip(0); + } + + void chest_additems() + { + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= 2; + L_GOLD_TO_ADD *= "game.playersnb"; + if (L_GOLD_TO_ADD > 25000) + { + int L_GOLD_TO_ADD = 25000; + } + add_gold(int(L_GOLD_TO_ADD)); + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + } + AddStoreItem(STORENAME, "mana_prot_spiders", 1, 0); + for (int i = 0; i < RandomInt(1, 2); i++) + { + add_items_self_adj(); + } + } + + void add_items_self_adj() + { + int L_RAND = RandomInt(1, 5); + if (L_RAND == 1) + { + add_great_pot(); + } + if (L_RAND == 2) + { + add_great_pot(); + add_great_pot(); + } + if (L_RAND == 3) + { + add_epic_pot(); + } + if (L_RAND == 4) + { + add_great_pot(); + add_epic_pot(); + } + if (L_RAND == 5) + { + add_epic_pot(); + add_epic_pot(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/undercliffs_boss1b.as b/scripts/angelscript/chests/undercliffs_boss1b.as new file mode 100644 index 00000000..7d54a028 --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_boss1b.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "chests/undercliffs_boss1a.as" + +namespace MS +{ + +class UndercliffsBoss1b : CGameScript +{ +} + +} diff --git a/scripts/angelscript/chests/undercliffs_boss1c.as b/scripts/angelscript/chests/undercliffs_boss1c.as new file mode 100644 index 00000000..a764ff5e --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_boss1c.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "chests/undercliffs_boss1a.as" + +namespace MS +{ + +class UndercliffsBoss1c : CGameScript +{ +} + +} diff --git a/scripts/angelscript/chests/undercliffs_boss2a.as b/scripts/angelscript/chests/undercliffs_boss2a.as new file mode 100644 index 00000000..9a4a21d6 --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_boss2a.as @@ -0,0 +1,81 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercliffsBoss2a : CGameScript +{ + int BC_GLOWSHELL; + string BC_GLOWSHELL_COLOR; + int BC_SPRITE_IN; + + UndercliffsBoss2a() + { + BC_SPRITE_IN = 1; + BC_GLOWSHELL = 1; + BC_GLOWSHELL_COLOR = Vector3(128, 96, 0); + } + + void OnSpawn() override + { + SetName("Adamantium Chest"); + SetMonsterClip(0); + tc_add_artifact("scroll2_summon_guard", 4); + tc_add_artifact("axes_sp", 4); + } + + void chest_additems() + { + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= 2; + L_GOLD_TO_ADD *= "game.playersnb"; + if (L_GOLD_TO_ADD > 25000) + { + int L_GOLD_TO_ADD = 25000; + } + add_gold(int(L_GOLD_TO_ADD)); + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + } + AddStoreItem(STORENAME, "mana_prot_spiders", 1, 0); + for (int i = 0; i < RandomInt(1, 2); i++) + { + add_items_self_adj(); + } + } + + void add_items_self_adj() + { + int L_RAND = RandomInt(1, 5); + if (L_RAND == 1) + { + add_great_arrows(50); + } + if (L_RAND == 2) + { + add_great_arrows(50); + add_epic_arrows(25); + } + if (L_RAND == 3) + { + add_great_arrows(100); + add_epic_arrows(50); + } + if (L_RAND == 4) + { + add_epic_arrows(50); + add_epic_arrows(50); + } + if (L_RAND == 5) + { + add_epic_arrows(75); + add_epic_arrows(75); + } + } + +} + +} diff --git a/scripts/angelscript/chests/undercliffs_boss2b.as b/scripts/angelscript/chests/undercliffs_boss2b.as new file mode 100644 index 00000000..f01b8e72 --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_boss2b.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "chests/undercliffs_boss2a.as" + +namespace MS +{ + +class UndercliffsBoss2b : CGameScript +{ +} + +} diff --git a/scripts/angelscript/chests/undercliffs_boss2c.as b/scripts/angelscript/chests/undercliffs_boss2c.as new file mode 100644 index 00000000..174fb18b --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_boss2c.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "chests/undercliffs_boss2a.as" + +namespace MS +{ + +class UndercliffsBoss2c : CGameScript +{ +} + +} diff --git a/scripts/angelscript/chests/undercliffs_boss3a.as b/scripts/angelscript/chests/undercliffs_boss3a.as new file mode 100644 index 00000000..66239532 --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_boss3a.as @@ -0,0 +1,113 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercliffsBoss3a : CGameScript +{ + int BC_GLOWSHELL; + string BC_GLOWSHELL_COLOR; + int BC_SPRITE_IN; + + UndercliffsBoss3a() + { + BC_SPRITE_IN = 1; + BC_GLOWSHELL = 1; + BC_GLOWSHELL_COLOR = Vector3(255, 255, 255); + } + + void OnSpawn() override + { + SetName("Prismatic Chest"); + SetMonsterClip(0); + tc_add_artifact("axes_b", 4); + tc_add_artifact("axes_c", 4); + } + + void chest_additems() + { + if ((ItemExists(CHEST_USER, "item_ring_ryza"))) + { + if (GetPlayerQuestData(CHEST_USER, "manaring") == "0") + { + if (!(ItemExists(CHEST_USER, "item_ring_ryza_gem3"))) + { + AddStoreItem(STORENAME, "item_ring_ryza_gem3", 1, 0); + } + } + } + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= 2; + L_GOLD_TO_ADD *= "game.playersnb"; + if (L_GOLD_TO_ADD > 25000) + { + int L_GOLD_TO_ADD = 25000; + } + add_gold(int(L_GOLD_TO_ADD)); + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + } + AddStoreItem(STORENAME, "item_crystal_reloc", 1, 0); + AddStoreItem(STORENAME, "item_crystal_return", 1, 0); + AddStoreItem(STORENAME, "mana_speed", 1, 0); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "mana_font", 1, 0); + } + for (int i = 0; i < RandomInt(1, 2); i++) + { + add_items_self_adj(); + } + } + + void add_items_self_adj() + { + int L_RAND = RandomInt(1, 5); + if (L_RAND == 1) + { + add_great_arrows(50); + add_great_pot(); + add_great_item(); + } + if (L_RAND == 2) + { + add_great_arrows(50); + add_great_pot(); + add_great_item(); + add_epic_item(); + } + if (L_RAND == 3) + { + add_great_arrows(50); + add_great_pot(); + add_great_item(); + add_epic_item(); + add_epic_arrows(50); + add_epic_pot(); + } + if (L_RAND == 4) + { + add_great_arrows(75); + add_great_pot(); + add_great_item(); + add_epic_item(); + add_epic_arrows(75); + add_epic_pot(); + } + if (L_RAND == 5) + { + add_great_arrows(80); + add_great_pot(); + add_great_item(); + add_epic_item(); + add_epic_arrows(80); + add_epic_pot(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/undercliffs_boss3b.as b/scripts/angelscript/chests/undercliffs_boss3b.as new file mode 100644 index 00000000..3ded0850 --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_boss3b.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "chests/undercliffs_boss3a.as" + +namespace MS +{ + +class UndercliffsBoss3b : CGameScript +{ +} + +} diff --git a/scripts/angelscript/chests/undercliffs_boss3c.as b/scripts/angelscript/chests/undercliffs_boss3c.as new file mode 100644 index 00000000..ccf6ddad --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_boss3c.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "chests/undercliffs_boss3a.as" + +namespace MS +{ + +class UndercliffsBoss3c : CGameScript +{ +} + +} diff --git a/scripts/angelscript/chests/undercliffs_chasm.as b/scripts/angelscript/chests/undercliffs_chasm.as new file mode 100644 index 00000000..1d124bcd --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_chasm.as @@ -0,0 +1,67 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercliffsChasm : CGameScript +{ + int BC_SPRITE_IN; + + UndercliffsChasm() + { + BC_SPRITE_IN = 1; + } + + void OnSpawn() override + { + SetMonsterClip(0); + } + + void chest_additems() + { + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= 2; + L_GOLD_TO_ADD *= "game.playersnb"; + if (L_GOLD_TO_ADD > 25000) + { + int L_GOLD_TO_ADD = 25000; + } + add_gold(int(L_GOLD_TO_ADD)); + for (int i = 0; i < RandomInt(1, 2); i++) + { + add_items_self_adj(); + } + } + + void add_items_self_adj() + { + int L_RAND = RandomInt(1, 5); + if (L_RAND == 1) + { + add_noob_item(); + } + if (L_RAND == 2) + { + add_great_item(); + } + if (L_RAND == 3) + { + add_epic_item(); + } + if (L_RAND == 4) + { + add_epic_item(); + add_epic_arrows(15); + } + if (L_RAND == 5) + { + add_epic_item(); + add_epic_arrows(30); + } + } + +} + +} diff --git a/scripts/angelscript/chests/undercliffs_chasmkill.as b/scripts/angelscript/chests/undercliffs_chasmkill.as new file mode 100644 index 00000000..6bb00674 --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_chasmkill.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "chests/undercliffs_chasm.as" + +namespace MS +{ + +class UndercliffsChasmkill : CGameScript +{ +} + +} diff --git a/scripts/angelscript/chests/undercliffs_sekrat.as b/scripts/angelscript/chests/undercliffs_sekrat.as new file mode 100644 index 00000000..9744e9f4 --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_sekrat.as @@ -0,0 +1,78 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercliffsSekrat : CGameScript +{ + int BC_SPRITE_IN; + + UndercliffsSekrat() + { + BC_SPRITE_IN = 1; + } + + void OnSpawn() override + { + SetMonsterClip(0); + tc_add_artifact("armor_helm_gaz2", 6); + tc_add_artifact("armor_helm_gray", 6); + tc_add_artifact("axes_tp", 6); + } + + void chest_additems() + { + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= 2; + L_GOLD_TO_ADD *= "game.playersnb"; + if (L_GOLD_TO_ADD > 25000) + { + int L_GOLD_TO_ADD = 25000; + } + add_gold(int(L_GOLD_TO_ADD)); + for (int i = 0; i < RandomInt(1, 2); i++) + { + add_items_self_adj(); + } + } + + void add_items_self_adj() + { + int L_RAND = RandomInt(1, 5); + if (L_RAND == 1) + { + add_great_item(); + add_good_pot(); + } + if (L_RAND == 2) + { + add_epic_item(); + add_good_pot(); + add_great_pot(); + } + if (L_RAND == 3) + { + add_epic_item(); + add_great_pot(); + add_epic_pot(); + } + if (L_RAND == 4) + { + add_epic_item(); + add_epic_arrows(15); + add_epic_pot(); + } + if (L_RAND == 5) + { + add_epic_item(); + add_epic_arrows(30); + add_great_pot(); + add_epic_pot(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/undercliffs_temple.as b/scripts/angelscript/chests/undercliffs_temple.as new file mode 100644 index 00000000..8d7e0673 --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_temple.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercliffsTemple : CGameScript +{ + int BC_SPRITE_IN; + + UndercliffsTemple() + { + BC_SPRITE_IN = 1; + } + + void OnSpawn() override + { + SetMonsterClip(0); + } + + void chest_additems() + { + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= 2; + L_GOLD_TO_ADD *= "game.playersnb"; + if (L_GOLD_TO_ADD > 25000) + { + int L_GOLD_TO_ADD = 25000; + } + add_gold(int(L_GOLD_TO_ADD)); + offer_felewyn_symbol(25); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_holy", 15, 0, 0, 15); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_gholy", 15, 0, 0, 15); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "proj_bolt_silver", 25, 0, 0, 25); + } + AddStoreItem(STORENAME, "swords_spiderblade", 1, 0); + for (int i = 0; i < RandomInt(1, 2); i++) + { + add_items_self_adj(); + } + } + + void add_items_self_adj() + { + int L_RAND = RandomInt(1, 5); + if (L_RAND == 1) + { + add_great_item(); + } + if (L_RAND == 2) + { + add_epic_item(); + } + if (L_RAND == 3) + { + add_epic_item(); + add_good_pot(); + } + if (L_RAND == 4) + { + add_epic_item(); + add_epic_pot(); + } + if (L_RAND == 5) + { + add_epic_item(); + add_epic_arrows(30); + add_great_pot(); + add_epic_pot(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/undercliffs_town.as b/scripts/angelscript/chests/undercliffs_town.as new file mode 100644 index 00000000..b0f1c8ad --- /dev/null +++ b/scripts/angelscript/chests/undercliffs_town.as @@ -0,0 +1,91 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercliffsTown : CGameScript +{ + int BC_SPRITE_IN; + + UndercliffsTown() + { + BC_SPRITE_IN = 1; + } + + void OnSpawn() override + { + SetMonsterClip(0); + } + + void chest_additems() + { + AddStoreItem(STORENAME, "health_apple", RandomInt(1, 5), 0); + string L_GOLD_TO_ADD = GetEntityProperty(CHEST_USER, "scriptvar"); + L_GOLD_TO_ADD *= 2; + L_GOLD_TO_ADD *= "game.playersnb"; + if (L_GOLD_TO_ADD > 25000) + { + int L_GOLD_TO_ADD = 25000; + } + add_gold(int(L_GOLD_TO_ADD)); + AddStoreItem(STORENAME, "item_gwond", 1, 0); + AddStoreItem(STORENAME, "item_galat_note_100", 1, 0); + AddStoreItem(STORENAME, "proj_arrow_blunt", 15, 0, 0, 15); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "item_charm_w1", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "item_charm_w2", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "swords_wolvesbane", 1, 0); + } + for (int i = 0; i < RandomInt(1, 2); i++) + { + add_items_self_adj(); + } + } + + void add_items_self_adj() + { + int L_RAND = RandomInt(1, 5); + if (L_RAND == 1) + { + add_great_item(); + add_good_pot(); + } + if (L_RAND == 2) + { + add_epic_item(); + add_good_pot(); + add_great_pot(); + } + if (L_RAND == 3) + { + add_epic_item(); + add_great_pot(); + add_epic_pot(); + } + if (L_RAND == 4) + { + add_epic_item(); + add_epic_arrows(15); + add_epic_pot(); + } + if (L_RAND == 5) + { + add_epic_item(); + add_epic_arrows(30); + add_great_pot(); + add_epic_pot(); + } + } + +} + +} diff --git a/scripts/angelscript/chests/undercrypts_quake1.as b/scripts/angelscript/chests/undercrypts_quake1.as new file mode 100644 index 00000000..2a1fc0e6 --- /dev/null +++ b/scripts/angelscript/chests/undercrypts_quake1.as @@ -0,0 +1,81 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercryptsQuake1 : CGameScript +{ + void chest_additems() + { + add_gold(200); + if (GetEntityMaxHealth(CHEST_USER) < 10) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 0; + } + if (GetEntityMaxHealth(CHEST_USER) >= 50) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 5; + } + if (GetEntityMaxHealth(CHEST_USER) >= 100) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 10; + } + if (GetEntityMaxHealth(CHEST_USER) >= 400) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 20; + } + if (GetEntityMaxHealth(CHEST_USER) >= 600) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 50; + } + if (GetEntityMaxHealth(CHEST_USER) >= 800) + { + int MIN_ITEM_LEVEL = 2; + int UPGRADE_CHANCE = 75; + } + if (GetEntityMaxHealth(CHEST_USER) >= 1000) + { + int MIN_ITEM_LEVEL = 3; + int UPGRADE_CHANCE = 0; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (MIN_ITEM_LEVEL > 3) + { + int MIN_ITEM_LEVEL = 3; + } + if (MIN_ITEM_LEVEL == 0) + { + string ITEM_EVENT = "add_noob_item"; + } + if (MIN_ITEM_LEVEL == 1) + { + string ITEM_EVENT = "add_good_item"; + } + if (MIN_ITEM_LEVEL == 2) + { + string ITEM_EVENT = "add_great_item"; + } + if (MIN_ITEM_LEVEL == 3) + { + string ITEM_EVENT = "add_epic_item"; + } + ITEM_EVENT(100); + } + +} + +} diff --git a/scripts/angelscript/chests/undercrypts_quake2.as b/scripts/angelscript/chests/undercrypts_quake2.as new file mode 100644 index 00000000..61f77ae3 --- /dev/null +++ b/scripts/angelscript/chests/undercrypts_quake2.as @@ -0,0 +1,81 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercryptsQuake2 : CGameScript +{ + void chest_additems() + { + add_gold(200); + if (GetEntityMaxHealth(CHEST_USER) < 10) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 0; + } + if (GetEntityMaxHealth(CHEST_USER) >= 50) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 5; + } + if (GetEntityMaxHealth(CHEST_USER) >= 100) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 10; + } + if (GetEntityMaxHealth(CHEST_USER) >= 400) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 20; + } + if (GetEntityMaxHealth(CHEST_USER) >= 600) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 50; + } + if (GetEntityMaxHealth(CHEST_USER) >= 800) + { + int MIN_ITEM_LEVEL = 2; + int UPGRADE_CHANCE = 75; + } + if (GetEntityMaxHealth(CHEST_USER) >= 1000) + { + int MIN_ITEM_LEVEL = 3; + int UPGRADE_CHANCE = 0; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (MIN_ITEM_LEVEL > 3) + { + int MIN_ITEM_LEVEL = 3; + } + if (MIN_ITEM_LEVEL == 0) + { + string ITEM_EVENT = "add_noob_item"; + } + if (MIN_ITEM_LEVEL == 1) + { + string ITEM_EVENT = "add_good_item"; + } + if (MIN_ITEM_LEVEL == 2) + { + string ITEM_EVENT = "add_great_item"; + } + if (MIN_ITEM_LEVEL == 3) + { + string ITEM_EVENT = "add_epic_item"; + } + ITEM_EVENT(100); + } + +} + +} diff --git a/scripts/angelscript/chests/undercrypts_quake3.as b/scripts/angelscript/chests/undercrypts_quake3.as new file mode 100644 index 00000000..4b53ce9a --- /dev/null +++ b/scripts/angelscript/chests/undercrypts_quake3.as @@ -0,0 +1,81 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercryptsQuake3 : CGameScript +{ + void chest_additems() + { + add_gold(200); + if (GetEntityMaxHealth(CHEST_USER) < 10) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 0; + } + if (GetEntityMaxHealth(CHEST_USER) >= 50) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 5; + } + if (GetEntityMaxHealth(CHEST_USER) >= 100) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 10; + } + if (GetEntityMaxHealth(CHEST_USER) >= 400) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 20; + } + if (GetEntityMaxHealth(CHEST_USER) >= 600) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 50; + } + if (GetEntityMaxHealth(CHEST_USER) >= 800) + { + int MIN_ITEM_LEVEL = 2; + int UPGRADE_CHANCE = 75; + } + if (GetEntityMaxHealth(CHEST_USER) >= 1000) + { + int MIN_ITEM_LEVEL = 3; + int UPGRADE_CHANCE = 0; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (MIN_ITEM_LEVEL > 3) + { + int MIN_ITEM_LEVEL = 3; + } + if (MIN_ITEM_LEVEL == 0) + { + string ITEM_EVENT = "add_noob_item"; + } + if (MIN_ITEM_LEVEL == 1) + { + string ITEM_EVENT = "add_good_item"; + } + if (MIN_ITEM_LEVEL == 2) + { + string ITEM_EVENT = "add_great_item"; + } + if (MIN_ITEM_LEVEL == 3) + { + string ITEM_EVENT = "add_epic_item"; + } + ITEM_EVENT(100); + } + +} + +} diff --git a/scripts/angelscript/chests/undercrypts_quake4.as b/scripts/angelscript/chests/undercrypts_quake4.as new file mode 100644 index 00000000..aa6b68c8 --- /dev/null +++ b/scripts/angelscript/chests/undercrypts_quake4.as @@ -0,0 +1,81 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercryptsQuake4 : CGameScript +{ + void chest_additems() + { + add_gold(200); + if (GetEntityMaxHealth(CHEST_USER) < 10) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 0; + } + if (GetEntityMaxHealth(CHEST_USER) >= 50) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 5; + } + if (GetEntityMaxHealth(CHEST_USER) >= 100) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 10; + } + if (GetEntityMaxHealth(CHEST_USER) >= 400) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 20; + } + if (GetEntityMaxHealth(CHEST_USER) >= 600) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 50; + } + if (GetEntityMaxHealth(CHEST_USER) >= 800) + { + int MIN_ITEM_LEVEL = 2; + int UPGRADE_CHANCE = 75; + } + if (GetEntityMaxHealth(CHEST_USER) >= 1000) + { + int MIN_ITEM_LEVEL = 3; + int UPGRADE_CHANCE = 0; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (MIN_ITEM_LEVEL > 3) + { + int MIN_ITEM_LEVEL = 3; + } + if (MIN_ITEM_LEVEL == 0) + { + string ITEM_EVENT = "add_noob_item"; + } + if (MIN_ITEM_LEVEL == 1) + { + string ITEM_EVENT = "add_good_item"; + } + if (MIN_ITEM_LEVEL == 2) + { + string ITEM_EVENT = "add_great_item"; + } + if (MIN_ITEM_LEVEL == 3) + { + string ITEM_EVENT = "add_epic_item"; + } + ITEM_EVENT(100); + } + +} + +} diff --git a/scripts/angelscript/chests/undercrypts_t1.as b/scripts/angelscript/chests/undercrypts_t1.as new file mode 100644 index 00000000..0f7bae4b --- /dev/null +++ b/scripts/angelscript/chests/undercrypts_t1.as @@ -0,0 +1,86 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercryptsT1 : CGameScript +{ + void OnSpawn() override + { + SetMonsterClip(0); + } + + void chest_additems() + { + add_gold(200); + if (GetEntityMaxHealth(CHEST_USER) < 10) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 0; + } + if (GetEntityMaxHealth(CHEST_USER) >= 50) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 5; + } + if (GetEntityMaxHealth(CHEST_USER) >= 100) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 10; + } + if (GetEntityMaxHealth(CHEST_USER) >= 400) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 20; + } + if (GetEntityMaxHealth(CHEST_USER) >= 600) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 50; + } + if (GetEntityMaxHealth(CHEST_USER) >= 800) + { + int MIN_ITEM_LEVEL = 2; + int UPGRADE_CHANCE = 75; + } + if (GetEntityMaxHealth(CHEST_USER) >= 1000) + { + int MIN_ITEM_LEVEL = 3; + int UPGRADE_CHANCE = 0; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (MIN_ITEM_LEVEL > 3) + { + int MIN_ITEM_LEVEL = 3; + } + if (MIN_ITEM_LEVEL == 0) + { + string ITEM_EVENT = "add_noob_item"; + } + if (MIN_ITEM_LEVEL == 1) + { + string ITEM_EVENT = "add_good_item"; + } + if (MIN_ITEM_LEVEL == 2) + { + string ITEM_EVENT = "add_great_item"; + } + if (MIN_ITEM_LEVEL == 3) + { + string ITEM_EVENT = "add_epic_item"; + } + ITEM_EVENT(100); + } + +} + +} diff --git a/scripts/angelscript/chests/undercrypts_t2.as b/scripts/angelscript/chests/undercrypts_t2.as new file mode 100644 index 00000000..2b4413c6 --- /dev/null +++ b/scripts/angelscript/chests/undercrypts_t2.as @@ -0,0 +1,86 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercryptsT2 : CGameScript +{ + void OnSpawn() override + { + SetMonsterClip(0); + } + + void chest_additems() + { + add_gold(200); + if (GetEntityMaxHealth(CHEST_USER) < 10) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 0; + } + if (GetEntityMaxHealth(CHEST_USER) >= 50) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 5; + } + if (GetEntityMaxHealth(CHEST_USER) >= 100) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 10; + } + if (GetEntityMaxHealth(CHEST_USER) >= 400) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 20; + } + if (GetEntityMaxHealth(CHEST_USER) >= 600) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 50; + } + if (GetEntityMaxHealth(CHEST_USER) >= 800) + { + int MIN_ITEM_LEVEL = 2; + int UPGRADE_CHANCE = 75; + } + if (GetEntityMaxHealth(CHEST_USER) >= 1000) + { + int MIN_ITEM_LEVEL = 3; + int UPGRADE_CHANCE = 0; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (MIN_ITEM_LEVEL > 3) + { + int MIN_ITEM_LEVEL = 3; + } + if (MIN_ITEM_LEVEL == 0) + { + string ITEM_EVENT = "add_noob_item"; + } + if (MIN_ITEM_LEVEL == 1) + { + string ITEM_EVENT = "add_good_item"; + } + if (MIN_ITEM_LEVEL == 2) + { + string ITEM_EVENT = "add_great_item"; + } + if (MIN_ITEM_LEVEL == 3) + { + string ITEM_EVENT = "add_epic_item"; + } + ITEM_EVENT(100); + } + +} + +} diff --git a/scripts/angelscript/chests/undercrypts_t3.as b/scripts/angelscript/chests/undercrypts_t3.as new file mode 100644 index 00000000..2dd68efe --- /dev/null +++ b/scripts/angelscript/chests/undercrypts_t3.as @@ -0,0 +1,86 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class UndercryptsT3 : CGameScript +{ + void OnSpawn() override + { + SetMonsterClip(0); + } + + void chest_additems() + { + add_gold(200); + if (GetEntityMaxHealth(CHEST_USER) < 10) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 0; + } + if (GetEntityMaxHealth(CHEST_USER) >= 50) + { + int MIN_ITEM_LEVEL = 0; + int UPGRADE_CHANCE = 5; + } + if (GetEntityMaxHealth(CHEST_USER) >= 100) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 10; + } + if (GetEntityMaxHealth(CHEST_USER) >= 400) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 20; + } + if (GetEntityMaxHealth(CHEST_USER) >= 600) + { + int MIN_ITEM_LEVEL = 1; + int UPGRADE_CHANCE = 50; + } + if (GetEntityMaxHealth(CHEST_USER) >= 800) + { + int MIN_ITEM_LEVEL = 2; + int UPGRADE_CHANCE = 75; + } + if (GetEntityMaxHealth(CHEST_USER) >= 1000) + { + int MIN_ITEM_LEVEL = 3; + int UPGRADE_CHANCE = 0; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (RandomInt(1, 100) <= UPGRADE_CHANCE) + { + MIN_ITEM_LEVEL += 1; + } + if (MIN_ITEM_LEVEL > 3) + { + int MIN_ITEM_LEVEL = 3; + } + if (MIN_ITEM_LEVEL == 0) + { + string ITEM_EVENT = "add_noob_item"; + } + if (MIN_ITEM_LEVEL == 1) + { + string ITEM_EVENT = "add_good_item"; + } + if (MIN_ITEM_LEVEL == 2) + { + string ITEM_EVENT = "add_great_item"; + } + if (MIN_ITEM_LEVEL == 3) + { + string ITEM_EVENT = "add_epic_item"; + } + ITEM_EVENT(100); + } + +} + +} diff --git a/scripts/angelscript/chests/ww3d.as b/scripts/angelscript/chests/ww3d.as new file mode 100644 index 00000000..761f9586 --- /dev/null +++ b/scripts/angelscript/chests/ww3d.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Ww3d : CGameScript +{ + void OnSpawn() override + { + SetName("geric_chest"); + tc_add_artifact("armor_dark", 100); + } + + void chest_additems() + { + add_gold(300); + offer_felewyn_symbol(10); + if ((RandomInt(0, 1))) + { + add_epic_item(); + } + } + +} + +} diff --git a/scripts/angelscript/cleicert/fpriest.as b/scripts/angelscript/cleicert/fpriest.as new file mode 100644 index 00000000..cd0bb1ad --- /dev/null +++ b/scripts/angelscript/cleicert/fpriest.as @@ -0,0 +1,333 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Fpriest : CGameScript +{ + int ALREADYTALKING; + int BREAK_FADE; + int BUSY_CHATTING; + float CHAT_DELAY; + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP10; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEP7; + string CHAT_STEP8; + string CHAT_STEP9; + int CHAT_STEPS; + string CHAT_TYPE; + int FADE_LOOP; + int FADING_IN; + int IS_ACTIVE; + string MY_LIGHT_SCRIPT; + string MY_YAW; + int NO_JOB; + int NO_RUMOR; + string PLAYER_DETECT; + int USED_TRIGGER; + + Fpriest() + { + NO_JOB = 1; + NO_RUMOR = 1; + CHAT_DELAY = 5.75; + } + + void OnSpawn() override + { + SetHealth(40); + SetMaxHealth(40); + SetGold(0); + SetName("Ghostly Priest"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + SetModelBody(1, 3); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + ALREADYTALKING = 0; + SetSayTextRange(2048); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_stfu", "stfu"); + ScheduleDelayedEvent(0.1, "scan_for_players"); + ScheduleDelayedEvent(0.1, "get_angles"); + } + + void get_angles() + { + MY_YAW = GetMonsterProperty("angles.yaw"); + } + + void scan_for_players() + { + if ((IS_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "scan_for_players"); + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + check_near(); + } + } + + void check_near() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + if (!(GetEntityRange(CUR_PLAYER) < 512)) return; + IS_ACTIVE = 1; + PLAYER_DETECT = CUR_PLAYER; + do_intro(); + } + + void do_intro() + { + light_up(); + face_speaker(PLAYER_DETECT); + PlayAnim("critical", "comehere"); + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + FADE_LOOP = 0; + fade_in_loop(); + SayText("Pssst... Over here."); + ScheduleDelayedEvent(5.0, "say_hi"); + } + + void fade_in_loop() + { + FADE_LOOP += 1; + FADING_IN = 1; + if (FADE_LOOP == 255) + { + FADING_IN = 0; + } + if (!(FADE_LOOP < 255)) return; + ScheduleDelayedEvent(0.1, "fade_in_loop"); + SetProp(GetOwner(), "renderamt", FADE_LOOP); + } + + void fade_out() + { + FADE_LOOP -= 1; + if (FADE_LOOP == 0) + { + DeleteEntity(GetOwner()); + } + if (FADE_LOOP == 1) + { + remove_light(); + } + if (!(FADE_LOOP > 0)) return; + if (!(BREAK_FADE)) + { + ScheduleDelayedEvent(0.1, "fade_out"); + } + SetProp(GetOwner(), "renderamt", FADE_LOOP); + } + + void say_hi() + { + if ((BUSY_CHATTING)) return; + BREAK_FADE = 1; + BUSY_CHATTING = 1; + CHAT_STEP = 0; + CHAT_TYPE = "intro"; + CHAT_STEP1 = "Thank the gods! You've come just in time... I've not much time to explain..."; + CHAT_STEP2 = "Long ago we imprisoned a great evil in this temple: a dreaded lightning Djinn of the Shadahar Orc Tribe."; + CHAT_STEP3 = "We were able to weaken him, and seal him here inside the temple, but we lacked the power to slay him."; + CHAT_STEP4 = "...As such, we felt the only option, to prevent his escape, was to fortify the temple's defenses and seal it, from the inside."; + CHAT_STEP5 = "As you can see by my current, ghostly state, that was quite some time ago, and alas, we have all long since perished."; + CHAT_STEP6 = "My spirit was bound here in hopes that I could somehow influence someone of power to the temple, to finish our task, and destroy the Djinn."; + CHAT_STEP7 = "However, it maybe too late, it seems the Shadahar Orcs have also found our temple, and are breaking in as we speak!"; + CHAT_STEP8 = "If they find the Djinn first, they will be able to rejuvenate and release him at full power! You must find the Djinn before they do, and destroy it!"; + CHAT_STEP9 = "There are four crystals that lock the beast in its cage within the temple - find them, use them to release him."; + CHAT_STEP10 = "You MAY be able to defeat him while he is still in his weakened state! My time here has nearly ended, so hurry! You are now our only hope!"; + CHAT_STEPS = 10; + chat_loop(); + } + + void chat_loop() + { + if (CHAT_TYPE == "intro") + { + if (CHAT_STEP != 9) + { + face_speaker(PLAYER_DETECT); + } + if (CHAT_STEP == 1) + { + PlayAnim("critical", "comehere"); + } + if (CHAT_STEP == 3) + { + PlayAnim("critical", "converse1"); + } + if (CHAT_STEP == 5) + { + PlayAnim("critical", "converse2"); + } + if (CHAT_STEP == 7) + { + PlayAnim("critical", "talkright"); + } + if (CHAT_STEP == 8) + { + PlayAnim("critical", "pondering2"); + } + if (CHAT_STEP == 9) + { + SetAngles("face"); + PlayAnim("critical", "dryhands"); + ScheduleDelayedEvent(0.25, "use_trig"); + } + if (CHAT_STEP == 10) + { + PlayAnim("critical", "wave"); + SetMoveAnim("none"); + SetIdleAnim("none"); + FADING_OUT = 1; + BREAK_FADE = 0; + ScheduleDelayedEvent(2.0, "fade_out"); + } + if ((FADING_OUT)) + { + if ((BREAK_FADE)) + { + } + if (!(FADING_IN)) + { + } + fade_in_loop(); + } + } + } + + void use_trig() + { + if ((USED_TRIGGER)) return; + USED_TRIGGER = 1; + UseTrigger("GiveCrystalOne"); + } + + void light_up() + { + Vector3 LIGHT_COLOR = Vector3(200, 200, 255); + int LIGHT_RAD = 128; + ClientEvent("persist", "all", "monsters/lighted_cl", GetEntityIndex(GetOwner()), LIGHT_COLOR, LIGHT_RAD); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + + void remove_light() + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + ClientEvent("update", "all", MY_LIGHT_SCRIPT, "remove_me"); + } + + void say_hi_old() + { + if (ALREADYTALKING == 0) + { + ALREADYTALKING = 1; + PlayAnim("critical", "crouch"); + SayText("Cowards! Cowards you all are! Oh , you are not one of those [orcs] , are you?"); + ScheduleDelayedEvent(5, "greet1"); + } + } + + void greet1() + { + SayText("Well , this certainly changes things. Anyone who fights against those creatures certainly deserves my help."); + ScheduleDelayedEvent(5, "greet2"); + } + + void greet2() + { + SayText(I + "am unsure as to who their master is or what their master plan is , but " + I + "think " + I + " know why they re here."); + ScheduleDelayedEvent(5, "greet3"); + } + + void greet3() + { + SayText("Our temple worshipped lightning , perhaps more than we should have."); + ScheduleDelayedEvent(5, "greet4"); + } + + void greet4() + { + SayText("For our 100 year celebration , we thought that we should create a symbol for ourselves."); + ScheduleDelayedEvent(5, "greet5"); + } + + void greet5() + { + SayText("We wanted something powerful , something moving. We didn t count on it actually moving.."); + } + + void greet6() + { + SayText("We created a being of pure lightning , and during our celebrations , it started killing."); + } + + void greet7() + { + SayText("It took our strongest mages to stop the beast. They managed to drain it s magic into [crystals]."); + } + + void greet8() + { + SayText("The process drained them so much that they died in the process. " + I + " fear that these orcs are intending"); + } + + void greet9() + { + SayText("to return the beast s magic and release him into the world. Here, take this crystal and do with it what you will."); + UseTrigger("GiveCrystalOne"); + } + + void greet10() + { + SayText(I + " fear that the orcs may continue to try to release him if something isn t done..."); + ALREADYTALKING = 0; + } + + void crystal() + { + if (ALREADYTALKING == 0) + { + ALREADYTALKING = 1; + SayText("Ah , yes. The magic crystals contain all of the beast s powers. They have been scattered through the temple, but"); + ScheduleDelayedEvent(5, "crystal1"); + } + } + + void crystal1() + { + SayText(I + " fear the orcs may be attempting to gather them to release the monster. When the crystals have"); + ScheduleDelayedEvent(5, "crystal2"); + } + + void crystal2() + { + SayText("been placed into the base of the monster s statue, he will be released."); + ALREADYTALKING = 0; + } + + void say_stfu() + { + if ((USED_TRIGGER)) return; + SayText("My werd , so rude..."); + ScheduleDelayedEvent(1.0, "use_trig"); + } + +} + +} diff --git a/scripts/angelscript/cleicert/map_startup.as b/scripts/angelscript/cleicert/map_startup.as new file mode 100644 index 00000000..bc3e33a0 --- /dev/null +++ b/scripts/angelscript/cleicert/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "cleicert"; + MAP_WEATHER = "clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "The cleicert Temple by Dridje"); + SetGlobalVar("G_MAP_DESC", "This elemental temple imprisons a great evil."); + SetGlobalVar("G_MAP_DIFF", "Levels 25-35 / 400-700hp"); + SetGlobalVar("G_WARN_HP", 400); + } + +} + +} diff --git a/scripts/angelscript/crest_dealer.as b/scripts/angelscript/crest_dealer.as new file mode 100644 index 00000000..a905c904 --- /dev/null +++ b/scripts/angelscript/crest_dealer.as @@ -0,0 +1,60 @@ +#pragma context server + +namespace MS +{ + +class CrestDealer : CGameScript +{ + string MY_CRESTS; + + void OnSpawn() override + { + SetName("Gimmecrest Goblin"); + SetModel("null.mdl"); + SetInvincible(true); + } + + void game_dynamically_created() + { + MY_CRESTS = param2; + OpenMenu(param1); + } + + void game_menu_getoptions() + { + for (int i = 0; i < GetTokenCount(MY_CRESTS, ";"); i++) + { + build_crest_menu(); + } + ScheduleDelayedEvent(10.0, "end_me"); + } + + void game_menu_cancel() + { + end_me(); + } + + void build_crest_menu() + { + string L_CREST = GetToken(MY_CRESTS, i, ";"); + string reg.mitem.title = /* TODO: $get_item_table */ $get_item_table(L_CREST, "name"); + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_crest"; + string reg.mitem.data = L_CREST; + } + + void give_crest() + { + string L_CREST = param2; + CallExternal(GAME_MASTER, "give_item", GetEntityIndex(param1), L_CREST); + DeleteEntity(GetOwner()); + } + + void end_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/dalya/ferrin.as b/scripts/angelscript/dalya/ferrin.as new file mode 100644 index 00000000..6c1a39af --- /dev/null +++ b/scripts/angelscript/dalya/ferrin.as @@ -0,0 +1,135 @@ +#pragma context server + +namespace MS +{ + +class Ferrin : CGameScript +{ + int RETRIEVE; + + void OnSpawn() override + { + SetHealth(30); + SetGold(50); + SetName("Ferrin"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(0, 2); + RETRIEVE = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_dangerous", "dangerous"); + CatchSpeech("say_orcs", "orcs"); + CatchSpeech("say_blackhand", "blackhand"); + CatchSpeech("say_keep", "keep"); + CatchSpeech("say_homage", "homage"); + CatchSpeech("say_picture", "picture"); + CatchSpeech("say_retrieve", "retrieve"); + } + + void say_hi() + { + SayText("Ahh , another traveller? Please feel free to rest , if you like. It s [dangerous] outside these days."); + } + + void say_dangerous() + { + SayText("Well , it s getting so that I can t even go into the [keep] to pay my respects! That , and [orcs] are ravaging the land."); + } + + void say_orcs() + { + SayText("These terrible [blackhand] Orcs have been tearing through the countryside lately. They leave me alone because they re afraid of the keep."); + } + + void say_blackhand() + { + SayText("It s a new tribe of Orcs that call themselves the Blackhand. They obey some Orcish Shaman named The Blackhand and wage war upon humans."); + } + + void say_keep() + { + SayText("The Keledros Keep , of course. " + I + " m the last in a long line of [caretakers] for this bellhouse. We used to serve the Captain Marshall of Keledros."); + } + + void say_homage() + { + SayText(I + " used to go into the keep every seventh day of the week...to pay my respects."); + ScheduleDelayedEvent(4, "say_homage2"); + } + + void say_homage2() + { + SayText("There is a picture of my Great Grandfather Luc where " + I + " would place flowers..."); + } + + void say_homage3() + { + SayText("Now the place is so infested with evil " + I + " can t even get the [picture] out"); + } + + void say_picture() + { + SayText("Will you go into the keep and retrive my picture for me? " + I + " would be extremely grateful to you! Please say you will go [retrieve] it?"); + } + + void say_retrieve() + { + if (!(RETRIEVE == 0)) return; + RETRIEVE = 1; + SayText("Thank you so much! Here , you ll need this key to get into the room where it s stored!"); + // TODO: offer ent_lastspoke item_wpkey + } + + void give_picture() + { + ReceiveOffer("accept"); + SayText(A + "picture of my Great Grandfather Luc! Thank you so much adventurer! " + I + "regret " + I + " have little to offer , but take this!"); + // TODO: offer PARAM1 item_storageroomkey + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Say Hello"; + string reg.mitem.type = "say"; + int l.say = RandomInt(2, 4); + if (l.say == 1) + { + string reg.mitem.data = "Hello"; + } + else + { + if (l.say == 2) + { + string reg.mitem.data = "Hi"; + } + else + { + if (l.say == 3) + { + string reg.mitem.data = "Hail"; + } + else + { + if (l.say == 4) + { + string reg.mitem.data = "Greetings!"; + } + } + } + } + if ((ItemExists(param1, "item_picashlborn"))) + { + string reg.mitem.title = "Return picture"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_picashlborn"; + string reg.mitem.callback = "give_picture"; + } + } + +} + +} diff --git a/scripts/angelscript/daragoth/chest_good.as b/scripts/angelscript/daragoth/chest_good.as new file mode 100644 index 00000000..7d3ffd82 --- /dev/null +++ b/scripts/angelscript/daragoth/chest_good.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ChestGood : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(9, 20)); + AddStoreItem(STORENAME, "drink_mead", 5, 0); + AddStoreItem(STORENAME, "health_apple", 8, 0); + AddStoreItem(STORENAME, "axes_axe", 1, 0); + AddStoreItem(STORENAME, "proj_bolt_iron", 25, 0, 0, 25); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "shields_ironshield", 1, 0); + } + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "bows_longbow", 1, 0); + } + int CHANCE = RandomInt(1, 100); + if (CHANCE < 17) + { + AddStoreItem(STORENAME, "proj_bolt_silver", 25, 0, 0, 25); + if (CHANCE >= 10) + { + AddStoreItem(STORENAME, "smallarms_huggerdagger", 1, 0); + } + } + if (CHANCE < 10) + { + if (CHANCE >= 5) + { + AddStoreItem(STORENAME, "smallarms_huggerdagger2", 1, 0); + } + } + if (CHANCE < 5) + { + if (CHANCE > 2) + { + AddStoreItem(STORENAME, "smallarms_huggerdagger3", 1, 0); + } + } + if (CHANCE <= 2) + { + AddStoreItem(STORENAME, "smallarms_huggerdagger4", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/daragoth/chest_great.as b/scripts/angelscript/daragoth/chest_great.as new file mode 100644 index 00000000..ecc72eb7 --- /dev/null +++ b/scripts/angelscript/daragoth/chest_great.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ChestGreat : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(25, 35)); + AddStoreItem(STORENAME, "scroll_ice_shield", 1, 0); + AddStoreItem(STORENAME, "health_mpotion", 2, 0); + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "swords_skullblade4", 1, 0); + AddStoreItem(STORENAME, "proj_bolt_silver", 25, 0, 0, 25); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "armor_plate", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "shields_lironshield", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/daragoth/chestmaker.as b/scripts/angelscript/daragoth/chestmaker.as new file mode 100644 index 00000000..8cddde43 --- /dev/null +++ b/scripts/angelscript/daragoth/chestmaker.as @@ -0,0 +1,24 @@ +#pragma context server + +namespace MS +{ + +class Chestmaker : CGameScript +{ + void OnSpawn() override + { + int rand = RandomInt(0, 5); + if (rand == 0) + { + SpawnNPC("daragoth/chest_great", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); + } + if (rand != 0) + { + SpawnNPC("daragoth/chest_good", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); + } + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/daragoth/door.as b/scripts/angelscript/daragoth/door.as new file mode 100644 index 00000000..22c9e89c --- /dev/null +++ b/scripts/angelscript/daragoth/door.as @@ -0,0 +1,17 @@ +#pragma context server + +namespace MS +{ + +class Door : CGameScript +{ + void alarm() + { + LogDebug("Door opened"); + // svplaysound: emitsound ent_me (0,0,0) 10 5 combat + EmitSound(GetOwner(), Vector3(0, 0, 0), 10, 5, "combat"); + } + +} + +} diff --git a/scripts/angelscript/daragoth/gob_chest.as b/scripts/angelscript/daragoth/gob_chest.as new file mode 100644 index 00000000..0c626bf6 --- /dev/null +++ b/scripts/angelscript/daragoth/gob_chest.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class GobChest : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 15)); + AddStoreItem(STORENAME, "skin_bear", 4, 0); + AddStoreItem(STORENAME, "smallarms_dagger", 2, 0); + if (RandomInt(1, 4) == 1) + { + AddStoreItem(STORENAME, "swords_skullblade4", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "scroll_summon_rat", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/daragoth/map_startup.as b/scripts/angelscript/daragoth/map_startup.as new file mode 100644 index 00000000..f17eca98 --- /dev/null +++ b/scripts/angelscript/daragoth/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "daragoth"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "The Plains of Daragoth"); + SetGlobalVar("G_MAP_DESC", "These expansive plains are contested by orcish hordes."); + SetGlobalVar("G_MAP_DIFF", "Levels 15-20 / 150-250hp"); + SetGlobalVar("G_WARN_HP", 100); + } + +} + +} diff --git a/scripts/angelscript/daragoth/scorp_chest.as b/scripts/angelscript/daragoth/scorp_chest.as new file mode 100644 index 00000000..6d5797f7 --- /dev/null +++ b/scripts/angelscript/daragoth/scorp_chest.as @@ -0,0 +1,33 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ScorpChest : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(50, 300)); + AddStoreItem(STORENAME, "proj_bolt_silver", 25, 0, 0, 25); + AddStoreItem(STORENAME, "smallarms_royaldagger", 1, 0); + AddStoreItem(STORENAME, "blunt_greatmaul", 1, 0); + AddStoreItem(STORENAME, "axes_poison1", 1, 0); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "mana_protection", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "armor_helm_knight", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/daragoth/spid_chest.as b/scripts/angelscript/daragoth/spid_chest.as new file mode 100644 index 00000000..76b582fc --- /dev/null +++ b/scripts/angelscript/daragoth/spid_chest.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SpidChest : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 25)); + AddStoreItem(STORENAME, "drink_mead", 5, 0); + AddStoreItem(STORENAME, "health_apple", 5, 0); + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + CallExternal("all", "spider_chest_used"); + } + +} + +} diff --git a/scripts/angelscript/daragoth/spid_dude.as b/scripts/angelscript/daragoth/spid_dude.as new file mode 100644 index 00000000..beee388c --- /dev/null +++ b/scripts/angelscript/daragoth/spid_dude.as @@ -0,0 +1,142 @@ +#pragma context server + +#include "monsters/base_npc_attack.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class SpidDude : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + float FLEE_CHANCE; + int FLEE_HEALTH; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_DELAY; + int HUNT_AGRO; + int MOVE_RANGE; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int REQ_QUEST_NOTDONE; + float RETALIATE_CHANGETARGET_CHANCE; + + SpidDude() + { + MOVE_RANGE = 64; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "beatdoor"; + CAN_HUNT = 0; + HUNT_AGRO = 0; + CAN_ATTACK = 0; + ATTACK_RANGE = 90; + CAN_FLEE = 1; + FLEE_HEALTH = 25; + FLEE_CHANCE = 1.0; + CAN_HEAR = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_FLINCH = 1; + FLINCH_ANIM = "flinch1"; + FLINCH_CHANCE = 0.5; + FLINCH_DELAY = 1; + REQ_QUEST_NOTDONE = 1; + Precache(SOUND_IDLE1); + NO_RUMOR = 1; + NO_JOB = 1; + NO_HAIL = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(30); + if ((CanSee("ally", 180))) + { + } + SetMoveDest(m_hLastSeen); + SetVolume(2); + Say("chitchat[.5] [.2] [.55] [.55] [.23] [.22]"); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_help"; + } + + void OnSpawn() override + { + SetName("Narad"); + SetHealth(25); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetMenuAutoOpen(1); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 3); + SetMoveAnim("walk"); + CatchSpeech("say_help", "hi"); + } + + void say_help() + { + if (!(REQ_QUEST_NOTDONE)) + { + SayText("Thank you very much. Hopefully you found a treat in the chest."); + } + if (!(REQ_QUEST_NOTDONE)) return; + string L_SPEAKER = param1; + if (L_SPEAKER == "PARAM1") + { + string L_SPEAKER = GetEntityIndex("ent_lastspoke"); + } + face_speaker(L_SPEAKER); + SayText("Oh, hello...can you help me?"); + ScheduleDelayedEvent(3, "say_help2"); + } + + void say_help2() + { + SayText("You see, I keep all of my supplies in the basement. However..."); + ScheduleDelayedEvent(3, "say_help3"); + } + + void say_help3() + { + SayText("Quite recently, a family of spiders seemed to have moved in."); + UseTrigger("spawn_spiders"); + ScheduleDelayedEvent(3, "say_help4"); + } + + void say_help4() + { + SayText("Can you get rid of them for me? I'm afraid I have nothing of much value to give..."); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + + void spider_chest_used() + { + REQ_QUEST_NOTDONE = 0; + } + +} + +} diff --git a/scripts/angelscript/demontemple/map_startup.as b/scripts/angelscript/demontemple/map_startup.as new file mode 100644 index 00000000..72549ced --- /dev/null +++ b/scripts/angelscript/demontemple/map_startup.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "demontemple"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Demonic Temple by AmIAnnoyingNow"); + SetGlobalVar("G_MAP_DESC", "You seem to have stumbled on a stronghold of the Kharaztorant cult."); + SetGlobalVar("G_MAP_DIFF", "Levels 20-25 / 350-600hp"); + SetGlobalVar("G_WARN_HP", 350); + } + + void game_newlevel() + { + SetGlobalVar("global.map.allownight", 0); + } + +} + +} diff --git a/scripts/angelscript/deralia/Proffund.as b/scripts/angelscript/deralia/Proffund.as new file mode 100644 index 00000000..7aea1c19 --- /dev/null +++ b/scripts/angelscript/deralia/Proffund.as @@ -0,0 +1,135 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Proffund : CGameScript +{ + int DEED; + int GIVEREWARD; + int NO_JOB; + int NO_RUMOR; + int OFFER; + int OVER; + int SLINKER; + + Proffund() + { + NO_JOB = 1; + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetName("Proffund"); + SetHealth(1); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Master Proffund"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, RandomInt(0, 5)); + SetMoveAnim("walk"); + SetInvincible(true); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_deed", "deed"); + CatchSpeech("say_slinker", "slinker"); + CatchSpeech("say_yes", "yes"); + CatchSpeech("say_no", "no"); + DEED = 0; + SLINKER = 0; + OFFER = 0; + OVER = 2; + GIVEREWARD = 0; + } + + void say_hi() + { + if (GIVEREWARD == 0) + { + SayText("Yes , what do you want?"); + } + if (GIVEREWARD == 1) + { + SayText("Nice work , here s your reward!"); + // TODO: offer ent_lastspoke gold 25 + // TODO: offer ent_lastspoke scroll_summon_rat + GIVEREWARD = 0; + } + } + + void say_deed() + { + if (!(OVER == 0)) return; + if (SLINKER == 0) + { + DEED = 1; + SayText(A + " property deed? What nonsense is this? ... who sent you?"); + } + else + { + SayText("Oh really? " + A + "deed to one of my farm properties , " + I + " suppose. Well , he ll have to try harder than you, if he s planning on"); + SayText("intimidating me into giving him a property deed!"); + ScheduleDelayedEvent(3, "say_helpme"); + } + } + + void say_slinker() + { + if (!(OVER == 0)) return; + if (DEED == 0) + { + SLINKER = 1; + SayText("S-slinker? Shh , be a little quieter! My reputation , you understand.. What does he want?"); + } + else + { + SayText("S-slinker? Shh , be a little quieter! Well , he ll have to try harder than you, if he s planning on intimidating me into giving him a property deed!"); + ScheduleDelayedEvent(3, "say_helpme"); + } + } + + void say_helpme() + { + SayText("However , maybe you can help me out. " + I + " d like Slinker, shall we say, removed from the picture. Will you help me by, uhm, taking care of him?"); + OFFER = 1; + } + + void say_yes() + { + if (!(OVER == 0)) return; + if (!(OFFER == 1)) return; + SayText("Excellent. When you return , " + I + " shall reward you..."); + CallExternal(FindEntityByName("Slinker"), "mortal"); + OVER = 1; + } + + void say_no() + { + if (!(OVER == 0)) return; + if (!(OFFER == 1)) return; + SayText("Are..are you sure? " + I + " mean... please don t hurt me. Here, here! Take it!"); + // TODO: offer ent_lastspoke item_deed + OFFER = 0; + OVER = 1; + } + + void slinker_dead() + { + GIVEREWARD = 1; + } + + void quest_start() + { + LogDebug("Started!"); + OVER = 0; + } + +} + +} diff --git a/scripts/angelscript/deralia/Slinker.as b/scripts/angelscript/deralia/Slinker.as new file mode 100644 index 00000000..32d3e747 --- /dev/null +++ b/scripts/angelscript/deralia/Slinker.as @@ -0,0 +1,267 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Slinker : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string ANIM_WALK; + int ASKED; + int ATTACK_DAMAGE; + int ATTACK_HITRANGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_HUNT; + int CAN_RETALIATE; + float FLEE_CHANCE; + int FLEE_HEALTH; + int GAVE_QUEST; + string LAST_SPOKE_TO; + int MISSION_OVER; + int MOVE_RANGE; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + string PLAYER_SPLOTTED; + string QUEST_WINNER; + int REQ_QUEST_NOTDONE; + int SEE_RANGE; + int T_QUEST_COMPLETE; + + Slinker() + { + CAN_ATTACK = 0; + CAN_HUNT = 0; + CAN_FLEE = 1; + CAN_RETALIATE = 1; + FLEE_HEALTH = 25; + FLEE_CHANCE = 0.5; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 200; + ATTACK_DAMAGE = 8; + MOVE_RANGE = 90; + ATTACK_PERCENTAGE = 0.95; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "beatdoor"; + NO_RUMOR = 1; + NO_JOB = 1; + NO_HAIL = 1; + SEE_RANGE = 350; + Precache("voices/deralia/slinker_ring.wav"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(3.0); + if (!(MISSION_OVER)) + { + } + if (!(CAN_HUNT)) + { + } + if ((CanSee("player", SEE_RANGE))) + { + } + PLAYER_SPLOTTED = GetEntityIndex(m_hLastSeen); + if (LAST_SPOKE_TO != PLAYER_SPLOTTED) + { + } + SetMoveDest(PLAYER_SPLOTTED); + SetSayTextRange(512); + SayText("Hey, want to make some fast cash?"); + EmitSound(GetOwner(), 0, "voices/deralia/slinker1.wav", 10); + LAST_SPOKE_TO = PLAYER_SPLOTTED; + } + + void OnSpawn() override + { + SetName("Slinker"); + SetHealth(150); + REQ_QUEST_NOTDONE = 1; + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Slinker"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(0, 3); + SetModelBody(1, 1); + SetMoveAnim("walk"); + MISSION_OVER = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_no", "no"); + CatchSpeech("say_yes", "yes"); + ASKED = -1; + GAVE_QUEST = 2; + } + + void say_hi() + { + if (param1 != "PARAM1") + { + string L_PLAYER = param1; + } + else + { + string L_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if (!(CanSee(L_PLAYER, SEE_RANGE))) return; + if ((CAN_HUNT)) return; + if (ASKED < 1) + { + SayText("You aren't a goody-two-shoes good guy, are ya?"); + EmitSound(GetOwner(), 0, "voices/deralia/slinker2.wav", 10); + bchat_mouth_move(); + ASKED = 0; + LAST_SPOKE_TO = L_PLAYER; + } + if (ASKED == 1) + { + SayText("Well, get goin' already!"); + bchat_mouth_move(); + } + if (T_QUEST_COMPLETE == 1) + { + SayText("I've got no further business with you."); + bchat_mouth_move(); + } + } + + void say_no() + { + if ((CAN_HUNT)) return; + if (!(ASKED == 0)) return; + SayText("Alright, here's the scoop. Master Proffund, that snobby nobleman who always hangs out at the bank, owes me a little money."); + EmitSound(GetOwner(), 0, "voices/deralia/slinker3.wav", 10); + bchat_auto_mouth_move(9.2); + ASKED = 1; + ScheduleDelayedEvent(9.2, "say_instruct"); + } + + void say_instruct() + { + SayText("A gambling man, he is, but not a very good one. Anyway, he owes me so much money, I've decided to settle for the deed to one of his nice farm properties."); + EmitSound(GetOwner(), 0, "voices/deralia/slinker4.wav", 10); + bchat_auto_mouth_move(11.5); + ScheduleDelayedEvent(11.5, "say_instruct2"); + } + + void say_instruct2() + { + SayText("Go and get that deed from him for me, and I'll pay you handsomely."); + EmitSound(GetOwner(), 0, "voices/deralia/slinker5.wav", 10); + CallExternal(FindEntityByName("Proffund"), "quest_start"); + } + + void mortal() + { + SetRace("orc"); + } + + void give_deed() + { + ReceiveOffer("accept"); + QUEST_WINNER = param1; + ScheduleDelayedEvent(1, "say_letter"); + } + + void say_letter() + { + if ((T_QUEST_COMPLETE)) return; + PlayAnim("once", "yes"); + SayText("Nice work, here's your reward."); + bchat_mouth_move(); + EmitSound(GetOwner(), 0, "voices/deralia/slinker_reward.wav", 10); + // TODO: offer QUEST_WINNER gold 15 + // TODO: offer QUEST_WINNER health_spotion + T_QUEST_COMPLETE = 1; + MISSION_OVER = 1; + REQ_QUEST_NOTDONE = 0; + ASKED = 2; + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(FindEntityByName("Proffund"), "slinker_dead"); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, Random(6.0, 9.0), ATTACK_PERCENTAGE, "slash"); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "say"; + int l.say = RandomInt(1, 4); + if (l.say == 1) + { + string reg.mitem.data = "Hello"; + } + else + { + if (l.say == 2) + { + string reg.mitem.data = "Hi"; + } + else + { + if (l.say == 3) + { + string reg.mitem.data = "Hail"; + } + else + { + if (l.say == 4) + { + string reg.mitem.data = "Greetings!"; + } + } + } + } + if (ASKED == 0) + { + if (param1 == LAST_SPOKE_TO) + { + string reg.mitem.title = "No"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_no"; + } + } + if ((ItemExists(param1, "item_deed"))) + { + string reg.mitem.title = "Give deed"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_deed"; + string reg.mitem.callback = "give_deed"; + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + CAN_ATTACK = 1; + CAN_HUNT = 1; + SetRace("orc"); + SetRoam(true); + npcatk_target(GetEntityIndex(m_hLastStruck)); + } + + void my_target_died() + { + CAN_ATTACK = 0; + CAN_HUNT = 0; + SetRace("human"); + } + +} + +} diff --git a/scripts/angelscript/deralia/Willem.as b/scripts/angelscript/deralia/Willem.as new file mode 100644 index 00000000..ced295e1 --- /dev/null +++ b/scripts/angelscript/deralia/Willem.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_civilian.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Willem : CGameScript +{ + int NO_JOB; + string QUEST_WINNER; + + Willem() + { + NO_JOB = 1; + const int NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetHealth(1); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Willem"); + SetRoam(true); + SetModel("npc/human1.mdl"); + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, RandomInt(0, 5)); + SetMoveAnim("walk"); + CatchSpeech("say_hi", "hi"); + randomspawn(); + } + + void give_letter() + { + ReceiveOffer("accept"); + ScheduleDelayedEvent(1, "say_letter"); + QUEST_WINNER = param1; + } + + void say_hi() + { + SayText("What do you want?"); + SetMoveDest("ent_lastspoke"); + } + + void say_letter() + { + SayText("Thank you. Wow , a letter from Hoguld , it has been ages."); + SetMoveDest("ent_lastgave"); + ScheduleDelayedEvent(3, "say_letter2"); + } + + void say_letter2() + { + SayText(I + " hope this is enough for the trouble"); + SetMoveDest("ent_lastgave"); + // TODO: offer QUEST_WINNER health_mpotion + // TODO: offer QUEST_WINNER gold 8 + } + + void randomspawn() + { + if (!(RandomInt(0, 99) > 65)) return; + DeleteEntity(GetOwner()); + } + + void game_menu_getoptions() + { + if ((ItemExists(param1, "item_letter"))) + { + string reg.mitem.title = "Deliver letter"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_letter"; + string reg.mitem.callback = "give_letter"; + } + } + +} + +} diff --git a/scripts/angelscript/deralia/barguy.as b/scripts/angelscript/deralia/barguy.as new file mode 100644 index 00000000..925c932a --- /dev/null +++ b/scripts/angelscript/deralia/barguy.as @@ -0,0 +1,177 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Barguy : CGameScript +{ + int ATTACK1_DAMAGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int CANCHAT; + string CURRENT_THIEF; + int HAT_QUEST; + string QUEST_WINNER; + int REQ_QUEST_NOTDONE; + int SAID_HELP; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + + void OnRepeatTimer() + { + SetRepeatDelay(35); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(60); + SayText("Give me another pint!"); + } + + void OnSpawn() override + { + SetHealth(25); + SetGold(30); + SetName("Mosor"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, 2); + CANCHAT = 1; + HAT_QUEST = 0; + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = 5; + ATTACK_PERCENTAGE = 0.6; + CURRENT_THIEF = �PNULL�P; + SOUND_IDLE1 = "voices/human/male_idle4.wav"; + SOUND_IDLE2 = "voices/human/male_idle5.wav"; + SOUND_IDLE3 = "voices/human/male_idle6.wav"; + REQ_QUEST_NOTDONE = 1; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_apple", "apple"); + CatchSpeech("respond_no", "no"); + CatchSpeech("say_job", "help"); + CatchSpeech("say_rumor", "rumours"); + } + + void say_hi() + { + SayText("What do you 'ant?"); + } + + void say_rumor() + { + SayText("Gossip?"); + if ((REQ_QUEST_NOTDONE)) + { + ScheduleDelayedEvent(1, "helpeh"); + } + else + { + ScheduleDelayedEvent(1, "say_a_really_important"); + } + } + + void helpeh() + { + if ((SAID_HELP)) return; + SayText("Bah, away with you, unless you can [help] me!"); + SAID_HELP = 1; + } + + void respond_no() + { + if (!(SAID_HELP)) return; + SayText("Then begone!"); + SAID_HELP = 0; + HAT_QUEST = 0; + } + + void say_job() + { + if ((HAT_QUEST)) return; + PlayAnim("once", "converse1"); + SayText("Well, a few days ago I came home after a night like this, quite... happy."); + ScheduleDelayedEvent(2, "say_thief2"); + } + + void say_thief2() + { + SayText("I walked through the door into my house only to find that everything was missing!"); + ScheduleDelayedEvent(2, "say_thief3"); + } + + void say_thief3() + { + SayText("Me gold, me weapons, even me hat! I must have me hat! I don't know what to do!"); + ScheduleDelayedEvent(2, "say_thief4"); + } + + void say_thief4() + { + PlayAnim("once", "pondering"); + SayText("Maybe you can get me hat back for me! I'll reward ye! Well!"); + HAT_QUEST = 1; + } + + void say_a_really_important() + { + PlayAnim("once", "pondering"); + SayText("No rumors around here... only truths."); + } + + void give_hat() + { + QUEST_WINNER = param1; + ReceiveOffer("accept"); + SayText(MY + HAT!); + ScheduleDelayedEvent(5, "hat_2"); + } + + void hat_2() + { + SayText("Thank you so much! Heres your reward!"); + // TODO: offer QUEST_WINNER gold 25 + REQ_QUEST_NOTDONE = 0; + } + + void game_menu_getoptions() + { + if (!(REQ_QUEST_NOTDONE)) return; + if ((ItemExists(param1, "item_hat"))) + { + string reg.mitem.title = "Return hat"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_hat"; + string reg.mitem.callback = "give_hat"; + } + if ((HAT_QUEST)) + { + string reg.mitem.title = "No"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "respond_no"; + } + else + { + if ((SAID_HELP)) + { + string reg.mitem.title = "Help"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + } + } + } + +} + +} diff --git a/scripts/angelscript/deralia/barkeep.as b/scripts/angelscript/deralia/barkeep.as new file mode 100644 index 00000000..27119dd1 --- /dev/null +++ b/scripts/angelscript/deralia/barkeep.as @@ -0,0 +1,148 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Barkeep : CGameScript +{ + int CANCHAT; + string SOUND_DEATH; + string STORE_NAME; + string STORE_TRIGGERTEXT; + string TALK_TARGET; + + Barkeep() + { + SOUND_DEATH = "none"; + STORE_NAME = "deralia_bar"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(30); + CanSee("player"); + SayText("Hello there."); + Say("*[20] *[20]"); + } + + void OnSpawn() override + { + SetHealth(1); + SetName("Holten , the Bar Keep"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumour", "rumours"); + } + + void say_rumor() + { + say_rumour(); + } + + void say_hi() + { + vendor_used(); + } + + void vendor_used() + { + SayText("What brings you here today? Business or pleasure?"); + SetVolume(10); + EmitSound(GetOwner(), SOUND_HELLO); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "drink_mead", 20, 100); + AddStoreItem(STORE_NAME, "drink_ale", 20, 100); + AddStoreItem(STORE_NAME, "drink_wine", 20, 100); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + Say("goods[34] *[24] *[35] *[40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void say_job() + { + SayText("Eh , all staffed here , at the moment... But..."); + ScheduleDelayedEvent(3.0, "say_job2"); + } + + void say_job2() + { + if ((IsEntityAlive(param1))) + { + TALK_TARGET = param1; + } + else + { + TALK_TARGET = GetEntityIndex("ent_lastspoke"); + } + convo_anim(); + SayText("I heard Cathain, the quartermaster, lost a sewer crew a little while ago."); + ScheduleDelayedEvent(5.0, "say_job3"); + } + + void say_job3() + { + convo_anim(); + SayText("Usually when that happens, they send down a crew to find them, or at least clean up the mess."); + ScheduleDelayedEvent(5.0, "say_job4"); + } + + void say_job4() + { + convo_anim(); + if (GetGender(TALK_TARGET) == "male") + { + SayText("A big strapping lad like you might fit the bill."); + } + else + { + SayText("A brave heroine like you might just fit the bill."); + } + ScheduleDelayedEvent(5.0, "say_job5"); + } + + void say_job5() + { + PlayAnim("critical", "give_shot"); + SayText("You can find Cathain inside the barracks - just left of the castle. Usually pacing a wear in the floor."); + } + + void say_rumour() + { + PlayAnim("once", "pondering"); + SayText(I + " ve heard from travelers coming to this tavern, telling about places outside of this village."); + ScheduleDelayedEvent(3, "say_rumour2"); + } + + void say_rumour2() + { + SayText("This knight came here the other day , and he spoke of the path to Gatecity being cut off. If that s true, we can t visit the dwarves and elves anymore."); + } + +} + +} diff --git a/scripts/angelscript/deralia/blacksmith.as b/scripts/angelscript/deralia/blacksmith.as new file mode 100644 index 00000000..70af1ecb --- /dev/null +++ b/scripts/angelscript/deralia/blacksmith.as @@ -0,0 +1,289 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Blacksmith : CGameScript +{ + int ATTACK1_DAMAGE; + int ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int CANCHAT; + int CHATTING_PLAYER; + string CHECK_PLAYER; + string CURRENT_THIEF; + string GAXE_TARGET; + int NO_JOB; + int OFFER_SET; + int SELL_WEAPON_LEVEL; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VEND_ARMORER; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_WEAPONS; + + Blacksmith() + { + STORE_NAME = "deralia_merchant_2"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + NO_JOB = 1; + SELL_WEAPON_LEVEL = 3; + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + VEND_ARMORER = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(25); + if (!(CHATTING_PLAYER)) + { + } + CanSee("player"); + PlayAnim("once", "wave"); + SayText("The finest weapons in all the land!"); + } + + void OnSpawn() override + { + SetHealth(25); + SetMaxHealth(25); + SetGold(50); + SetName("Thordac the Blacksmith"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/blacksmith.mdl"); + SetInvincible(true); + CANCHAT = 1; + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = 5; + ATTACK_PERCENTAGE = 60; + CURRENT_THIEF = �PNULL�P; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_rumour", "rumour"); + resetchat(); + } + + void say_rumor() + { + say_rumour(); + } + + void say_hi() + { + SayText("Welcome to Deralia s smithy. I have many items, some that might interest you."); + ScheduleDelayedEvent(3, "say_store"); + } + + void say_store() + { + CHECK_PLAYER = "ent_lastspoke"; + offer_notthief(); + offer_isthief(); + } + + void trade_done() + { + SayText("Please , do come again some time. Might have something more interesting for you then."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "armor_helm_knight", 3, 110); + AddStoreItem(STORE_NAME, "armor_knight", 2, 110); + AddStoreItem(STORE_NAME, "smallarms_rknife", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_knife", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_dagger", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_rsword", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_shortsword", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_scimitar", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_nkatana", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_longsword", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_bastardsword", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_rsmallaxe", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_smallaxe", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_axe", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_2haxe", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_battleaxe", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_club", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer2", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_mace", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_warhammer", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer3", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_maul", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_qs", RandomInt(0, 1), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_sp", RandomInt(0, 1), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_tri", RandomInt(0, 1), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_holster", 5, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_gauntlets_leather", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_craftedknife", RandomInt(1, 2), 175); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "blunt_greatmaul", 1, 120); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "axes_scythe", 4, 120); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "blunt_granitemace", 1, 500, 0); + } + AddStoreItem(STORE_NAME, "crest_deralia", 1, 100, 0); + } + + void say_rumour() + { + PlayAnim("once", "pondering2"); + SayText("Ummm ... someone mentioned seeing the beacon blink. But that could never happen."); + } + + void game_menu_getoptions() + { + LogDebug("game_menu_getoptions GetEntityName(param1) ax ItemExists(param1, "axes_golden") let ItemExists(param1, "item_roland_letter")"); + if ((ItemExists(param1, "axes_golden"))) + { + if (!(OFFER_SET)) + { + } + if ((ItemExists(param1, "item_roland_letter"))) + { + } + string reg.mitem.title = "Show Rolands Letter"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "say_letter"; + string reg.mitem.callback = "say_letter"; + } + if ((OFFER_SET)) + { + if ((ItemExists(param1, "axes_golden"))) + { + } + string reg.mitem.title = "Pay 100,000 Gold"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:100000;axes_golden;item_roland_letter"; + string reg.mitem.callback = "make_gaxe"; + string reg.mitem.cb_failed = "say_letter6"; + } + } + + void say_letter() + { + if (param1 == "PARAM1") + { + string SPEAKER_ID = GetEntityIndex("ent_lastspoke"); + if (!(ItemExists(SPEAKER_ID, "item_roland_letter"))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + CHATTING_PLAYER = 1; + SayText("Hmm... Wow , he wants me to attach a theulian spine to this thing!?"); + SetIdleAnim("keypad"); + PlayAnim("once", "keypad"); + ScheduleDelayedEvent(4.0, "say_letter2"); + } + + void say_letter2() + { + SayText("Hmmm... " + I + " have one , but these things are so damned rare. It ll cost you about..."); + SetIdleAnim("pondering"); + PlayAnim("once", "pondering"); + ScheduleDelayedEvent(4.0, "say_letter3"); + } + + void say_letter3() + { + SayText("100 , 000 gold."); + OFFER_SET = 1; + ScheduleDelayedEvent(4.0, "say_letter4"); + } + + void say_letter4() + { + SetIdleAnim("pondering"); + PlayAnim("once", "pondering"); + SayText("He sent you to me , because he knows " + I + " m the only one around who makes these..."); + ScheduleDelayedEvent(4.0, "say_letter5"); + } + + void say_letter5() + { + SayText("They take me about five years a piece to make , so " + I + " don t install them cheap!"); + ScheduleDelayedEvent(4.0, "say_letter6"); + } + + void say_letter6() + { + SayText("100 , 000 gold. Take it or leave it."); + CHATTING_PLAYER = 0; + ScheduleDelayedEvent(2.0, "resume_idle"); + } + + void make_gaxe() + { + CHATTING_PLAYER = 1; + GAXE_TARGET = param1; + SayText("Wow , rich boy. *cough* Okay... Here we go."); + SetModelBody(0, 1); + SetModelBody(1, 1); + SetIdleAnim("smith_hammer_time"); + PlayAnim("once", "smith_hammer_time"); + ScheduleDelayedEvent(1.0, "smith_noise"); + ScheduleDelayedEvent(2.0, "smith_noise"); + ScheduleDelayedEvent(3.0, "smith_noise"); + ScheduleDelayedEvent(4.0, "smith_noise"); + ScheduleDelayedEvent(5.0, "smith_noise"); + ScheduleDelayedEvent(6.0, "smith_noise"); + ScheduleDelayedEvent(7.0, "make_gaxe2"); + } + + void make_gaxe2() + { + SetIdleAnim("smith_hammer_idle"); + PlayAnim("once", "smith_hammer_idle"); + SayText("Alright..."); + ScheduleDelayedEvent(2.0, "make_gaxe3"); + } + + void make_gaxe3() + { + // TODO: offer GAXE_TARGET axes_golden_ref + SetModelBody(0, 0); + SetModelBody(1, 0); + SetIdleAnim("dryhands"); + PlayAnim("once", "dryhands"); + SayText("There. That thing will never break again , guaranteed."); + CHATTING_PLAYER = 0; + ScheduleDelayedEvent(3.0, "resume_idle"); + } + + void resume_idle() + { + SetIdleAnim("idle1"); + PlayAnim("once", "idle1"); + } + + void smith_noise() + { + // PlayRandomSound from: "debris/metal3.wav", "debris/metal2.wav", "debris/metal1.wav" + array sounds = {"debris/metal3.wav", "debris/metal2.wav", "debris/metal1.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/deralia/blacksmith_hammer.as b/scripts/angelscript/deralia/blacksmith_hammer.as new file mode 100644 index 00000000..565731b7 --- /dev/null +++ b/scripts/angelscript/deralia/blacksmith_hammer.as @@ -0,0 +1,88 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class BlacksmithHammer : CGameScript +{ + int COUNT; + float DELAY; + int NO_CHAT; + int REST; + + BlacksmithHammer() + { + COUNT = 0; + REST = 10; + DELAY = 1.05; + Precache("3dmflaora.spr"); + Precache("amb/fx_anvil.wav"); + NO_CHAT = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(DELAY); + if (COUNT < 8) + { + COUNT += 1; + } + if (COUNT == 8) + { + if (REST > 0) + { + if (DELAY == 8.36) + { + PlayAnim("critical", "smith_hammer_look"); + COUNT = 0; + DELAY = 1.05; + REST--; + } + else + { + DELAY = 8.36; + } + } + } + if (REST == 0) + { + if (DELAY == 10.86) + { + PlayAnim("critical", "smith_hammer_idle"); + REST = 10; + COUNT = 0; + DELAY = 1.05; + } + else + { + DELAY = 10.86; + } + } + } + + void OnSpawn() override + { + SetHealth(1); + SetName("A blacksmith"); + SetWidth(1); + SetHeight(72); + SetRoam(false); + SetModel("npc/blacksmith.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 2); + SetIdleAnim("smith_hammer_time"); + SetInvincible(true); + SetAngles("face"); + } + + void hammer_sound() + { + EmitSound(GetOwner(), 0, "amb/fx_anvil.wav", 10); + Effect("tempent", "trail", "3dmflaora.spr", /* TODO: $relpos */ $relpos(-11, 15, -10), /* TODO: $relpos */ $relpos(-11, 15, 25), 5, 0.5, 1, 10, 10); + } + +} + +} diff --git a/scripts/angelscript/deralia/bob.as b/scripts/angelscript/deralia/bob.as new file mode 100644 index 00000000..2a9123e6 --- /dev/null +++ b/scripts/angelscript/deralia/bob.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "deralia/guard.as" + +namespace MS +{ + +class Bob : CGameScript +{ + int DERALIA_CHATTER; + + Bob() + { + DERALIA_CHATTER = 0; + } + + void OnSpawn() override + { + SetName("Bob , the Bouncer"); + CatchSpeech("say_hi", "hi"); + } + + void say_hi() + { + int L_GREETING = RandomInt(0, 2); + if (L_GREETING == 0) + { + SayText("Gerald wants me to take care of his rat problem. That's not what I get paid for."); + } + else + { + if (L_GREETING == 1) + { + SayText("Don't make any trouble."); + } + else + { + if (L_GREETING == 2) + { + SayText("I drink elsewhere because of the rats here."); + } + } + } + } + +} + +} diff --git a/scripts/angelscript/deralia/boss_spider.as b/scripts/angelscript/deralia/boss_spider.as new file mode 100644 index 00000000..28502c35 --- /dev/null +++ b/scripts/angelscript/deralia/boss_spider.as @@ -0,0 +1,264 @@ +#pragma context server + +#include "monsters/spider_base.as" + +namespace MS +{ + +class BossSpider : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_IDLE; + string ANIM_LATCH_ATTACK; + string ANIM_LATCH_HIT; + string ANIM_LATCH_OFF; + string ANIM_LATCH_ON; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int HUNT_AGRO; + int MOVE_RANGE; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_LATCH; + string SOUND_LATCH_HISS; + string SOUND_LATCH_JUMP; + string SOUND_PAIN; + float SPIDER_IDLE_DELAY; + int SPIDER_IDLE_VOL; + int SPIDER_LATCHATTACK; + int SPIDER_LATCHED; + int SPIDER_LATCHING; + int SPIDER_LATCH_ATKCHANCE; + int SPIDER_LATCH_ATKDMG; + int SPIDER_LATCH_ATKDUR; + int SPIDER_LATCH_MAXRANGE; + string SPIDER_LATCH_TARGET; + int SPIDER_VOLUME; + + BossSpider() + { + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DODGE = "dodge"; + ANIM_DEATH = "die"; + MOVE_RANGE = 32; + ATTACK_RANGE = 60; + ATTACK_DAMAGE_LOW = 7.0; + ATTACK_DAMAGE_HIGH = 9.0; + ATTACK_ACCURACY = 0.6; + NPC_GIVE_EXP = 12; + SPIDER_IDLE_VOL = 2; + SPIDER_IDLE_DELAY = 3.6; + SPIDER_VOLUME = 10; + SPIDER_LATCHATTACK = 1; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + SPIDER_LATCH_ATKDMG = 5; + SPIDER_LATCH_ATKDUR = 4; + SPIDER_LATCH_ATKCHANCE = 20; + SPIDER_LATCH_MAXRANGE = 200; + ANIM_LATCH_ATTACK = "jumpmiss"; + ANIM_LATCH_HIT = "jumphit"; + ANIM_LATCH_ON = "hitbite"; + ANIM_LATCH_OFF = "falloff"; + SOUND_LATCH_HISS = "monsters/spider/spiderhiss2.wav"; + SOUND_LATCH_JUMP = "monsters/spider/spiderjump.wav"; + SOUND_LATCH = "monsters/spider/spiderlatch.wav"; + Precache("effects/effect_spiderlatch"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(5); + if ((IS_HUNTING)) + { + } + if ((GetEntityProperty(GetOwner(), "alive"))) + { + } + if (RandomInt(0, 99) < SPIDER_LATCH_ATKCHANCE) + { + } + if (!(SPIDER_LATCHING)) + { + } + if (GetMonsterProperty("last_seen.distance") < SPIDER_LATCH_MAXRANGE) + { + } + if ((IsOnGround(GetOwner()))) + { + } + if ((IsOnGround(HUNT_LASTTARGET))) + { + } + PlayAnim("critical", ANIM_LATCH_ATTACK); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_LATCH_HISS, "game.sound.maxvol"); + SetMoveDest("none"); + SetAnimFrameRate(".8"); + SPIDER_LATCHING = 1; + SPIDER_LATCH_TARGET = HUNT_LASTTARGET; + CAN_ATTACK = 0; + CAN_HUNT = 0; + CAN_HEAR = 0; + CAN_RETALIATE = 0; + SetRoam(false); + } + + void OnSpawn() override + { + SetHealth(30); + SetWidth(40); + SetHeight(64); + SetHearingSensitivity(3); + SetName("Araneus"); + NPC_GIVE_EXP = 16; + SetModel("monsters/spider.mdl"); + SetStat("awareness", 20); + SetStat("parry", 50); + } + + void OnParry(CBaseEntity@ attacker) override + { + if ((SPIDER_LATCHING)) return; + PlayAnim("critical", ANIM_DODGE); + } + + void frame_jump() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 320, 120)); + SetGravity(".9"); + SetAnimFrameRate(".5"); + SetMoveSpeed(0); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_LATCH_JUMP, 5); + ScheduleDelayedEvent(0.001, "spider_latch_checkhitground"); + } + + void spider_latch_checkhitground() + { + if (!(SPIDER_LATCHING)) return; + if ((SPIDER_LATCHED)) return; + if (GetEntityDist(SPIDER_LATCH_TARGET) < 70) + { + spider_latch_hit(); + } + else + { + if ((IsOnGround(GetOwner()))) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + SetAnimFrameRate(1); + ScheduleDelayedEvent(0.2, "spider_latch_resetmovement"); + } + else + { + ScheduleDelayedEvent(0.001, "spider_latch_checkhitground"); + } + } + } + + void spider_latch_hit() + { + SPIDER_LATCHED = 1; + PlayAnim("once", "break"); + SetIdleAnim(ANIM_LATCH_ON); + SetEntityOrigin(GetOwner(), GetEntityOrigin(SPIDER_LATCH_TARGET)); + SetFollow(SPIDER_LATCH_TARGET); + SetAngles("face.x"); + ApplyEffect(SPIDER_LATCH_TARGET, "effects/effect_spiderlatch", SPIDER_LATCH_ATKDUR, GetOwner(), SPIDER_LATCH_ATKDMG); + EmitSound(GetOwner(), "game.sound.body", SOUND_LATCH, "game.sound.maxvol"); + SetBBox(Vector3(-40, -40, 0), Vector3(40, 40, 128)); + spider_latch_think(); + SPIDER_LATCH_ATKDUR("spider_latch_drop"); + } + + void spider_latch_think() + { + if (!(SPIDER_LATCHED)) return; + if (!(GetEntityProperty(SPIDER_LATCH_TARGET, "alive"))) + { + spider_latch_drop(); + } + else + { + ScheduleDelayedEvent(0.01, "spider_latch_think"); + } + } + + void spider_latch_drop() + { + if (!(SPIDER_LATCHING)) return; + SPIDER_LATCHED = 0; + SetFollow("none"); + SetGravity(1); + SetMoveSpeed(-1); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + PlayAnim("critical", ANIM_LATCH_OFF); + EmitSound(GetOwner(), 0); + } + + void spider_latch_resetmovement() + { + SetRoam(true); + SetMoveSpeed(1); + SetGravity(1); + SetIdleAnim(ANIM_IDLE); + CAN_ATTACK = 1; + CAN_HUNT = 1; + CAN_HEAR = 1; + CAN_RETALIATE = 1; + SPIDER_LATCHING = 0; + SPIDER_LATCHED = 0; + } + + void frame_falloffend() + { + SetIdleAnim(ANIM_IDLE); + ScheduleDelayedEvent(0.2, "spider_latch_resetmovement"); + PlayAnim("critical", ANIM_IDLE); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (!(SPIDER_LATCHED)) return; + spider_latch_drop(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(SPIDER_LATCHED)) return; + SetFollow("none"); + spider_latch_resetmovement(); + } + +} + +} diff --git a/scripts/angelscript/deralia/commoner.as b/scripts/angelscript/deralia/commoner.as new file mode 100644 index 00000000..c4de11fe --- /dev/null +++ b/scripts/angelscript/deralia/commoner.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "NPCs/default_human.as" + +namespace MS +{ + +class Commoner : CGameScript +{ +} + +} diff --git a/scripts/angelscript/deralia/commoner01.as b/scripts/angelscript/deralia/commoner01.as new file mode 100644 index 00000000..3ceff22d --- /dev/null +++ b/scripts/angelscript/deralia/commoner01.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class Commoner01 : CGameScript +{ + int NO_CHAT; + + Commoner01() + { + NO_CHAT = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(30); + CanSee("ally"); + SetMoveDest(m_hLastSeen); + SetVolume(2); + Say("chitchat[50] *[20] *[55] *[55] *[23] *[22]"); + } + + void OnSpawn() override + { + SetHealth(1); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Commoner"); + SetRoam(true); + SetModel("npc/human1.mdl"); + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, RandomInt(0, 5)); + SetMoveAnim("coffee"); + SetInvincible(true); + } + +} + +} diff --git a/scripts/angelscript/deralia/commoner_handrail.as b/scripts/angelscript/deralia/commoner_handrail.as new file mode 100644 index 00000000..44042c60 --- /dev/null +++ b/scripts/angelscript/deralia/commoner_handrail.as @@ -0,0 +1,117 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class CommonerHandrail : CGameScript +{ + int BUSY_CHATTING; + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + int CHAT_STEPS; + int MENTIONED_BOAT; + int NO_JOB; + int NO_RUMOR; + int RND_TALK; + + CommonerHandrail() + { + NO_JOB = 1; + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetHealth(15); + SetWidth(5); + SetHeight(64); + SetRace("beloved"); + SetName("Commoner"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 2); + SetIdleAnim("handrailidle"); + SetInvincible(true); + CatchSpeech("say_hi", "hello"); + CatchSpeech("say_boat", "boat"); + } + + void say_hi() + { + RND_TALK = RandomInt(1, 3); + if (RND_TALK == 1) + { + respond1(); + } + if (RND_TALK == 2) + { + respond2(); + } + if (RND_TALK == 3) + { + respond3(); + } + } + + void respond1() + { + SayText("Sometimes " + I + " just come here and look up at the stars."); + } + + void respond2() + { + SayText("..."); + } + + void respond3() + { + SayText("I'd love to row that boat and never come back, if these arms weren't so sore."); + MENTIONED_BOAT = 1; + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Ask about the row boat"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_boat"; + if (!(MENTIONED_BOAT)) return; + string reg.mitem.title = "Rent the Rowboat (5 gp)"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:5"; + string reg.mitem.callback = "borrow_boat"; + string reg.mitem.cb_failed = "payment_failed"; + } + + void borrow_boat() + { + CallExternal(GAME_MASTER, "gm_create_vote", "gm_votemap", "Yes!:gertenheld_cape;No!:0", "Row to Gertenheld Cape?"); + CallExternal("players", "ext_set_map", "gertenheld_cape", "from_deralia", "from_deralia"); + } + + void payment_failed() + { + SayText("Oh, ya can't lift yer five pennies? I cannae lift me oars. Thats too bad."); + } + + void say_boat() + { + MENTIONED_BOAT = 1; + if ((BUSY_CHATTING)) return; + CHAT_STEPS = 3; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "That little boat down there? I... rent it out sometimes."; + CHAT_STEP2 = "It doesn't go as far as Charon's galleon, of course, but the little thing can get into places where his beast can't."; + CHAT_STEP3 = "For instance, you can row up to Gertenheld cape, and see the lighthouse. Easy row that."; + chat_loop(); + } + +} + +} diff --git a/scripts/angelscript/deralia/commoner_sitting.as b/scripts/angelscript/deralia/commoner_sitting.as new file mode 100644 index 00000000..4c8aeeb6 --- /dev/null +++ b/scripts/angelscript/deralia/commoner_sitting.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class CommonerSitting : CGameScript +{ + int NO_CHAT; + + CommonerSitting() + { + NO_CHAT = 1; + } + + void OnSpawn() override + { + SetHealth(1); + SetWidth(5); + SetHeight(55); + SetRace("human"); + SetName("Commoner"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, RandomInt(0, 5)); + SetIdleAnim("coffee"); + SetMoveAnim("walk"); + SetInvincible(true); + } + +} + +} diff --git a/scripts/angelscript/deralia/deraliateller.as b/scripts/angelscript/deralia/deraliateller.as new file mode 100644 index 00000000..df4bc1d9 --- /dev/null +++ b/scripts/angelscript/deralia/deraliateller.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "NPCs/base_banker.as" + +namespace MS +{ + +class Deraliateller : CGameScript +{ + int NO_CHAT; + int STORAGE_ACCOUNT_COST; + string STORAGE_DISPLAYNAME; + float STORAGE_FEERATIO; + string STORAGE_NAME; + + Deraliateller() + { + STORAGE_DISPLAYNAME = "Deralia Bank"; + STORAGE_NAME = "deraliastorage"; + STORAGE_FEERATIO = 0.10; + STORAGE_ACCOUNT_COST = 20; + NO_CHAT = 1; + } + + void OnSpawn() override + { + SetHealth(25); + SetGold(30); + SetName("Teller"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + } + +} + +} diff --git a/scripts/angelscript/deralia/drunk.as b/scripts/angelscript/deralia/drunk.as new file mode 100644 index 00000000..2c49d57e --- /dev/null +++ b/scripts/angelscript/deralia/drunk.as @@ -0,0 +1,137 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_civilian.as" +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class Drunk : CGameScript +{ + int CAUGHT; + int CHAT_AUTO_FACE; + int CHAT_AUTO_HAIL; + int CHAT_FACE_ON_USE; + int CHAT_USE_CONV_ANIMS; + int DRUNKARD_QUEST; + int QUEST_DONE; + int ROB_ATTEMPT; + int SAID_HI; + string Thief; + + Drunk() + { + CHAT_AUTO_HAIL = 1; + CHAT_USE_CONV_ANIMS = 0; + CHAT_AUTO_FACE = 0; + CHAT_FACE_ON_USE = 0; + } + + void OnSpawn() override + { + SetName("Drunkard"); + SetHealth(25); + SetWidth(32); + SetHeight(32); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetIdleAnim("sitidle"); + SAID_HI = 0; + CAUGHT = 0; + DRUNKARD_QUEST = 0; + QUEST_DONE = 0; + } + + void game_menu_getoptions() + { + if (CAUGHT == 0) + { + string reg.mitem.title = "Pickpocket"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_rob"; + } + if (SAID_HI == 1) + { + string reg.mitem.title = "Drink"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_drink"; + } + if (DRUNKARD_QUEST == 1) + { + if ((ItemExists(param1, "drink_mead"))) + { + string reg.mitem.title = "Give Mead"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "drink_mead"; + string reg.mitem.callback = "give_mead"; + } + } + } + + void say_rob() + { + ROB_ATTEMPT = RandomInt(1, 3); + if (ROB_ATTEMPT == 1) + { + rob_fail(); + } + else + { + rob_pass(); + } + } + + void rob_pass() + { + Thief = GetEntityIndex(m_hLastUsed); + // TODO: offer Thief gold 3 + CAUGHT = 1; + } + + void rob_fail() + { + SayText("Get your hands out of my pockets!"); + CAUGHT = 1; + bchat_mouth_move(); + } + + void say_hi() + { + if ((QUEST_DONE)) + { + SayText("Thanks for *hic* your help, Adventurer."); + chat_move_mouth(2); + DRUNKARD_QUEST = 0; + } + else + { + SayText("*hic* Can you believe they cut me off. I really need another [drink]."); + SAID_HI = 1; + chat_move_mouth(2.5); + } + } + + void say_drink() + { + chat_now("Can you go inside the Inn and get me *hic*", 1.8); + chat_now("I will give you some gold for your troubles.", 2.0); + chat_now("I would you to get me *hic* of mead.", 2.0); + chat_move_mouth(6); + DRUNKARD_QUEST = 1; + } + + void give_mead() + { + SayText("Cheers! Thanks for your *hic* help adventurer."); + chat_move_mouth(1.5); + // TODO: offer PARAM1 gold 10 + QUEST_DONE = 1; + SAID_HI = 0; + UseTrigger("RenderMug"); + } + +} + +} diff --git a/scripts/angelscript/deralia/grocer.as b/scripts/angelscript/deralia/grocer.as new file mode 100644 index 00000000..9aba2d5c --- /dev/null +++ b/scripts/angelscript/deralia/grocer.as @@ -0,0 +1,103 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "monsters/base_civilian.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Grocer : CGameScript +{ + int ASKED_APPLE; + int NO_JOB; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string STORE_NAME; + string STORE_TRIGGERTEXT; + + Grocer() + { + SOUND_IDLE1 = "voices/human/male_idle4.wav"; + SOUND_IDLE2 = "voices/human/male_idle5.wav"; + SOUND_IDLE3 = "voices/human/male_idle6.wav"; + SOUND_DEATH = "none"; + STORE_NAME = "deralia_grocer"; + STORE_TRIGGERTEXT = "store"; + NO_JOB = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(60); + CanSee("player"); + SayText("An [apple] a day , keep the man eating giant insects away!"); + } + + void OnSpawn() override + { + SetHealth(1); + SetMaxHealth(1); + SetGold(30); + SetName("Friendly grocer"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetModelBody(1, 3); + SetRoam(false); + SetModel("npc/human1.mdl"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_apple", "apple"); + CatchSpeech("say_rumour", "rumours"); + ScheduleDelayedEvent(10, "idle"); + } + + void say_rumor() + { + say_rumour(); + } + + void idle() + { + SetRepeatDelay(35); + SetVolume(3); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void say_hi() + { + SayText("Hail traveler. Would you like an [apple] ? They re quite good!"); + ASKED_APPLE = 1; + } + + void gossip_1() + { + SayText("Have you heard about the girls at the house? You look the type."); + } + + void trade_done() + { + SayText("Have a nice day."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_apple", 30, 100); + } + + void say_rumour() + { + PlayAnim("once", "pondering"); + SayText("Rumors? Well , " + I + " have heard about a rash of thievery!"); + } + +} + +} diff --git a/scripts/angelscript/deralia/guard.as b/scripts/angelscript/deralia/guard.as new file mode 100644 index 00000000..e2883def --- /dev/null +++ b/scripts/angelscript/deralia/guard.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "NPCs/human_guard.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Guard : CGameScript +{ + int DERALIA_CHATTER; + int NO_JOB; + int NO_RUMOR; + + Guard() + { + NO_RUMOR = 1; + NO_JOB = 1; + DERALIA_CHATTER = 1; + } + + void OnSpawn() override + { + SetGold(10); + CatchSpeech("say_hi", "hi"); + } + + void say_hi() + { + if ((DERALIA_CHATTER)) + { + int L_GREETING = RandomInt(0, 3); + if (L_GREETING == 0) + { + SayText("Thordac's shop produces most of the weapons here."); + } + else + { + if (L_GREETING == 1) + { + SayText("I should've joined the army."); + } + else + { + if (L_GREETING == 2) + { + SayText("Brawls of opposing worshippers often break out near the temples."); + } + else + { + if (L_GREETING == 3) + { + SayText("If you're looking for work, I heard Gerald needed help with something."); + } + } + } + } + } + } + +} + +} diff --git a/scripts/angelscript/deralia/guard_barracks.as b/scripts/angelscript/deralia/guard_barracks.as new file mode 100644 index 00000000..dba4adf5 --- /dev/null +++ b/scripts/angelscript/deralia/guard_barracks.as @@ -0,0 +1,224 @@ +#pragma context server + +#include "NPCs/human_guard.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class GuardBarracks : CGameScript +{ + int BG_ROAM; + float BG_SPEED; + int BUSY_TALKING_JOB; + string JOB_TARGET; + string MENU_MODE; + int NO_CHAT; + string QUEST_WIN; + int TALK; + int TOOK_JOB; + + GuardBarracks() + { + BG_ROAM = 1; + BG_SPEED = 1.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(RandomInt(25, 45)); + if (!(IS_HUNTING)) + { + } + if ((CanSee("ally", 128))) + { + } + npcatk_setmovedest(m_hLastSeen, 128); + EmitSound(GetOwner(), 0, "npc/hello1.wav", 5); + Say("[.83] [.33] [.91] [.91] [.38] [.36]"); + } + + void OnSpawn() override + { + SetName("Cathain , Militia Quartermaster"); + SetRoam(true); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_help", "help"); + CatchSpeech("say_rumour", "news"); + CatchSpeech("say_island", "island"); + SetMenuAutoOpen(1); + } + + void say_rumor() + { + say_rumour(); + } + + void say_hi() + { + TALK = RandomInt(1, 5); + respond1(); + respond2(); + } + + void respond1() + { + if (!(TALK == 1)) return; + SayText(I + " should ve joined the army..."); + } + + void respond2() + { + if (!(TALK != 1)) return; + SayText("Be on your way sir."); + } + + void say_help() + { + SayText("Ergh , help yourself."); + } + + void say_rumour() + { + SayText("Hmmm , why would you ask such things? Best be on your way traveller."); + } + + void say_island() + { + SayText("Huh , what? How did you ... the people in this city talk too much."); + } + + void game_menu_getoptions() + { + if (!(TRADE_RING)) + { + if (MENU_MODE == "sewers") + { + } + string reg.mitem.title = "Take the Sewer Job"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "go_to_sewers"; + } + if (!(TRADE_RING)) return; + string L_RQUEST_STEP = GetPlayerQuestData(param1, "r"); + if (!(L_RQUEST_STEP == 12)) return; + string reg.mitem.title = "Offer 500 gold"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:500;item_ring"; + string reg.mitem.callback = "got_ring"; + } + + void got_ring() + { + // TODO: offer PARAM1 item_ring_percept + QUEST_WIN = param1; + SayText("There ya go, snapped back together, good as new."); + ScheduleDelayedEvent(2.0, "got_ring2"); + SetPlayerQuestData(QUEST_WIN, "r"); + } + + void got_ring2() + { + SetMoveAnim("walk"); + SetRoam(true); + PlayAnim("once", "walk"); + SetMoveDest(QUEST_WIN); + SayText("Make good use of it!"); + } + + void say_job() + { + if ((BUSY_TALKING_JOB)) return; + BUSY_TALKING_JOB = 1; + SetRoam(false); + MENU_MODE = "sewers"; + if ((IsEntityAlive(param1))) + { + SetMoveDest(param1); + JOB_TARGET = param1; + } + else + { + SetMoveDest("ent_lastspoke"); + JOB_TARGET = GetEntityIndex("ent_lastspoke"); + } + SayText("Eh? You want a job aye? Well have I got one for you..."); + ScheduleDelayedEvent(3.0, "say_job2"); + } + + void say_job2() + { + if ((TOOK_JOB)) return; + SayText("We sent a construction team, down into the sewers, a little while ago, and lost em."); + ScheduleDelayedEvent(5.0, "say_job3"); + } + + void say_job3() + { + if ((TOOK_JOB)) return; + SayText("So we sent a chunk of the militia after them... And we lost THEM."); + ScheduleDelayedEvent(5.0, "say_job4"); + } + + void say_job4() + { + if ((TOOK_JOB)) return; + SayText("I can't spare anymore men on that ancient maze, but if we don't fix things down there soon..."); + ScheduleDelayedEvent(5.0, "say_job5"); + } + + void say_job5() + { + if ((TOOK_JOB)) return; + SayText("...It's going to get... Very odorous, up here in Deralia..."); + ScheduleDelayedEvent(5.0, "say_job6"); + } + + void say_job6() + { + if ((TOOK_JOB)) return; + SayText("I can't pay you, mind ye. However, all sorts of recluse wizards and such have setup shop down there in the past..."); + ScheduleDelayedEvent(5.0, "say_job7"); + } + + void say_job7() + { + if ((TOOK_JOB)) return; + SayText("So there's bound to be a fair amount of loot - if you can get out alive."); + ScheduleDelayedEvent(5.0, "say_job8"); + } + + void say_job8() + { + if ((TOOK_JOB)) return; + SayText("If you're interested, give me a heads up, and I'll show you the way. I'm too busy to go down there myself, mind you."); + BUSY_TALKING_JOB = 0; + ScheduleDelayedEvent(5.0, "say_job9"); + } + + void say_job9() + { + NO_CHAT = 1; + OpenMenu(JOB_TARGET); + } + + void go_to_sewers() + { + TOOK_JOB = 1; + SayText("Alright, I'll show you the way in just a few minutes... Now where'd I put that damned key..."); + CallExternal(GAME_MASTER, "gm_map_vote", JOB_TARGET, "deraliasewers", "Do you wish to enter Deralia Sewers?", 1, 1); + CallExternal("players", "ext_set_map", "deraliasewers", "from_deralia", "from_deralia"); + SendColoredMessage(JOB_TARGET, "Starting vote for Deraliasewers..."); + NO_CHAT = 0; + } + + void game_menu_cancel() + { + SetRoam(true); + NO_CHAT = 0; + TOOK_JOB = 0; + } + +} + +} diff --git a/scripts/angelscript/deralia/guard_gate.as b/scripts/angelscript/deralia/guard_gate.as new file mode 100644 index 00000000..d8a7c98f --- /dev/null +++ b/scripts/angelscript/deralia/guard_gate.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "deralia/guard.as" + +namespace MS +{ + +class GuardGate : CGameScript +{ + void OnRepeatTimer() + { + SetRepeatDelay(30); + if (!(IS_HUNTING)) + { + if ((CanSee("ally", 80))) + { + string L_ENT = GetEntityIndex(m_hLastSeen); + string L_EASTER_EGG = "Tamed Boar"; + if (GetEntityName(L_ENT) == L_EASTER_EGG) + { + if (!(IsValidPlayer(L_ENT))) + { + int L_RAND = RandomInt(0, 3); + if (L_RAND == 0) + { + string L_SPEAK = "G'day, sir"; + } + else + { + if (L_RAND == 1) + { + string L_SPEAK = "*Squeal?*"; + } + else + { + if (L_RAND == 2) + { + string L_SPEAK = "henlo"; + } + else + { + if (L_RAND == 3) + { + string L_SPEAK = "*cough cough*"; + } + } + } + } + CallExternal(L_ENT, "ext_speak", L_SPEAK); + } + } + npcatk_setmovedest(L_ENT, 128); + EmitSound(GetOwner(), 0, "npc/hello1.wav", 5); + Say("[.83] [.33] [.91] [.91] [.38] [.36]"); + } + } + } + +} + +} diff --git a/scripts/angelscript/deralia/guard_warehouse.as b/scripts/angelscript/deralia/guard_warehouse.as new file mode 100644 index 00000000..473a598b --- /dev/null +++ b/scripts/angelscript/deralia/guard_warehouse.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "deralia/guard.as" + +namespace MS +{ + +class GuardWarehouse : CGameScript +{ + int DERALIA_CHATTER; + + GuardWarehouse() + { + DERALIA_CHATTER = 0; + } + + void OnSpawn() override + { + SetName("Warehouse Guard"); + CatchSpeech("say_hi", "hi"); + } + + void say_hi() + { + int L_GREETING = RandomInt(0, 2); + if (L_GREETING == 0) + { + SayText("We were expecting a shipment from Ara- should have been in weeks ago..."); + } + else + { + if (L_GREETING == 1) + { + SayText("The man with the strange hat keeps trying to talk to me. I try to ignore him."); + } + else + { + if (L_GREETING == 2) + { + SayText("Shipments from all around Daragoth come through here."); + } + } + } + } + +} + +} diff --git a/scripts/angelscript/deralia/headguard.as b/scripts/angelscript/deralia/headguard.as new file mode 100644 index 00000000..ea33789b --- /dev/null +++ b/scripts/angelscript/deralia/headguard.as @@ -0,0 +1,151 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Headguard : CGameScript +{ + int BUSY_CHATTING; + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + int CHAT_STEPS; + string GUARD_LOOP; + int GuardQuestFinished; + string LAST_SPOKE_TO; + int NO_JOB; + int NO_RUMOR; + string PLAYER_NEAR; + string PLAYER_SPLOTTED; + int StartGuardQuest; + + Headguard() + { + NO_RUMOR = 1; + NO_JOB = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(3.0); + if ("GuardQuest" == 0) + { + GetAllPlayers(PLAYER_SUSPECTS); + PLAYER_NEAR = 0; + GUARD_LOOP = 0; + for (int i = 0; i < GetTokenCount(PLAYER_SUSPECTS, ";"); i++) + { + check_near(); + } + if ((PLAYER_NEAR)) + { + } + if (LAST_SPOKE_TO != PLAYER_SPLOTTED) + { + } + SetMoveDest(PLAYER_SPLOTTED); + SetSayTextRange(512); + SayText("You there! " + STOP!); + LAST_SPOKE_TO = PLAYER_SPLOTTED; + } + } + + void OnSpawn() override + { + SetHealth(300); + SetInvincible(true); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Head Guard"); + SetRoam(false); + SetModel("npc/guard1.mdl"); + SetIdleAnim("c1a0_catwalkidle"); + SetMoveAnim("walk"); + CatchSpeech("say_sus", "suspicious"); + CatchSpeech("say_help", "help"); + StartGuardQuest = 0; + GuardQuestFinished = 0; + } + + void game_menu_getoptions() + { + if (StartGuardQuest == 1) + { + if ((ItemExists(param1, "drink_mead"))) + { + string reg.mitem.title = "Show Note"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "drink_mead"; + string reg.mitem.callback = "hand_note"; + } + } + } + + void check_near() + { + string CUR_PLAYER = GetToken(PLAYER_SUSPECTS, GUARD_LOOP, ";"); + if (GetEntityRange(CUR_PLAYER) < 256) + { + PLAYER_NEAR = 1; + PLAYER_SPLOTTED = CUR_PLAYER; + } + GUARD_LOOP += 1; + } + + void say_hi() + { + if (GuardQuestFinished == 0) + { + SayText("You there! Have you seen anyone [suspicious] around the city?"); + } + if (GuardQuestFinished == 1) + { + SayText("Thanks for your help , adventurer."); + } + } + + void say_sus() + { + CHAT_STEPS = 3; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "I'm investigating a report of a mysterious individual sneaking around the city in the dead of night."; + CHAT_STEP2 = "I've questioned many walking the streets at that time and have no leads."; + CHAT_STEP3 = "You seem like a resourceful adventurer. How would you like to [help] me?"; + chat_loop(); + } + + void say_help() + { + CHAT_STEPS = 3; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Since the investigation seems to be at a standstill, we should start from the beginning."; + CHAT_STEP2 = "Drayke, who lives opposite the fountain, made the report."; + CHAT_STEP3 = "See him and inquire about any further details which could help us."; + chat_loop(); + UseTrigger("questdoordrayke"); + StartGuardQuest = 1; + } + + void hand_note() + { + CHAT_STEPS = 4; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "What's this?"; + CHAT_STEP2 = "This letter is signed by a 'Rudolf'."; + CHAT_STEP3 = "Find this person and inquire about Drayke's whereabouts."; + CHAT_STEP4 = "Ask around if you can't find him yourself."; + chat_loop(); + } + +} + +} diff --git a/scripts/angelscript/deralia/healer.as b/scripts/angelscript/deralia/healer.as new file mode 100644 index 00000000..5cd725b4 --- /dev/null +++ b/scripts/angelscript/deralia/healer.as @@ -0,0 +1,87 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Healer : CGameScript +{ + string CURRENT_THIEF; + int NO_HAIL; + int NO_JOB; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int XMASS_OLD_GUY; + + Healer() + { + STORE_NAME = "healer1"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + NO_HAIL = 1; + NO_JOB = 1; + XMASS_OLD_GUY = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(25); + CanSee("player"); + SayText("Greetings , may " + I + " be of some aid?"); + } + + void OnSpawn() override + { + SetHealth(60); + SetMaxHealth(60); + SetGold(0); + SetName("Gortigan the wise"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + CURRENT_THIEF = �PNULL�P; + CatchSpeech("say_rumour", "rumours"); + CatchSpeech("say_island", "island"); + } + + void say_rumor() + { + say_rumour(); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_mpotion", 30, 100); + AddStoreItem(STORE_NAME, "health_lpotion", 30, 100); + AddStoreItem(STORE_NAME, "scroll2_glow", 2, 150); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "health_spotion", 3, 100); + } + bs_epic_item(); + } + + void say_rumour() + { + PlayAnim("once", "pondering"); + SayText("Be wary adventurer , not everything can be conquered. Such as the cursed [island] ."); + } + + void say_island() + { + PlayAnim("once", "pondering"); + SayText("Yes , the harbour master often takes requests to sail there. Many do not return."); + } + +} + +} diff --git a/scripts/angelscript/deralia/healer02.as b/scripts/angelscript/deralia/healer02.as new file mode 100644 index 00000000..4304ab6e --- /dev/null +++ b/scripts/angelscript/deralia/healer02.as @@ -0,0 +1,85 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Healer02 : CGameScript +{ + int NO_HAIL; + int NO_JOB; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int XMASS_OLD_GUY; + + Healer02() + { + STORE_NAME = "healer2"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + NO_JOB = 1; + NO_HAIL = 1; + XMASS_OLD_GUY = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(25); + CanSee("player"); + SayText("Greetings , need healing?"); + } + + void OnSpawn() override + { + SetHealth(1); + SetName("Melhar the pure"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + CatchSpeech("say_rumour", "rumours"); + CatchSpeech("say_island", "island"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_mpotion", 30, 100); + AddStoreItem(STORE_NAME, "health_lpotion", 30, 100); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORE_NAME, "mana_protection", 2, 150, 0.1); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "health_spotion", 3, 100); + AddStoreItem(STORE_NAME, "scroll2_fire_dart", 1, 200); + AddStoreItem(STORE_NAME, "scroll2_lightning_weak", 1, 200); + } + AddStoreItem(STORE_NAME, "scroll2_rejuvenate", 1, 400); + AddStoreItem(STORE_NAME, "item_crystal_return", 1, RandomInt(100, 200), 0.3); + bs_epic_item(); + } + + void say_rumour() + { + PlayAnim("once", "pondering"); + SayText(I + "always aggree with Gortigan on this one. Stay " + AWAY + " from the [island] ."); + } + + void say_island() + { + PlayAnim("once", "pondering"); + SayText("Yes , the harbour master often takes requests to sail there. Many do not return."); + } + +} + +} diff --git a/scripts/angelscript/deralia/hmaster.as b/scripts/angelscript/deralia/hmaster.as new file mode 100644 index 00000000..238041c2 --- /dev/null +++ b/scripts/angelscript/deralia/hmaster.as @@ -0,0 +1,133 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Hmaster : CGameScript +{ + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + + void OnSpawn() override + { + SetHealth(1); + SetName("Captain Charon"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(0, 1); + SetModelBody(1, 2); + SOUND_IDLE1 = "voices/human/male_idle4.wav"; + SOUND_IDLE2 = "voices/human/male_idle5.wav"; + SOUND_IDLE3 = "voices/human/male_idle6.wav"; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_ship", "boat"); + CatchSpeech("say_ara", "ara"); + CatchSpeech("say_rumour", "rumours"); + } + + void say_rumor() + { + say_rumour(); + } + + void idle() + { + SetRepeatDelay(Random(30, 40)); + SetVolume(3); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void say_hi() + { + SayText("Ahoy! What you doin' around the harbor mate?"); + } + + void gossip_1() + { + SayText("The winds be tellin' me about some trouble around here."); + } + + void say_rumour() + { + PlayAnim("once", "pondering"); + SayText("Rumour has it , the wind will be changing to the other side. Aye."); + } + + void say_job() + { + SayText("I've got a shipment to get to Ara, could always use some good hands."); + ScheduleDelayedEvent(2, "say_job2"); + } + + void say_job2() + { + SayText("Business has been mighty slow , so the best " + I + " can offer for a wage is free passage."); + } + + void say_ship() + { + SayText("That ship can take you out into the sea if you want. Joins up with Ron's Galleon about 20 leagues out."); + ScheduleDelayedEvent(4, "say_ship2"); + } + + void say_ship2() + { + SayText("But beware, it be a crazy place out thar!"); + ScheduleDelayedEvent(2, "say_ship3"); + } + + void say_ship3() + { + SayText("This time of year be icy, so the only place I can trade goods is Port Ara."); + ScheduleDelayedEvent(2, "say_ship4"); + } + + void say_ship4() + { + SayText("Ye are welcome to come along, if ye like."); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Join Crew"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "vote_ara"; + } + + void vote_ara() + { + SayText("It'll be a fine thing indeed to have ye aboard."); + CallExternal(GAME_MASTER, "gm_create_vote", "gm_votemap", "Yes!:oceancrossing;No!:0", "Do you wish to travel the ocean blue?"); + CallExternal("players", "ext_set_map", "oceancrossing", "from_deralia", "from_deralia"); + } + + void say_ara() + { + SayText("It's a prosperous little trade town up the coast, last one before Verath."); + ScheduleDelayedEvent(2, "say_ara2"); + } + + void say_ara2() + { + SayText("Too dangerous to go any farther than that with the ice flows this time of year."); + ScheduleDelayedEvent(2, "say_ara3"); + } + + void say_ara3() + { + SayText("I could use a hand with the boat. Would ye be volunteering?"); + } + +} + +} diff --git a/scripts/angelscript/deralia/idlesoldier.as b/scripts/angelscript/deralia/idlesoldier.as new file mode 100644 index 00000000..1819c09c --- /dev/null +++ b/scripts/angelscript/deralia/idlesoldier.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "monsters/base.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Idlesoldier : CGameScript +{ + int NO_JOB; + int NO_RUMOR; + + Idlesoldier() + { + NO_RUMOR = 1; + NO_JOB = 1; + } + + void OnSpawn() override + { + SetHealth(300); + SetWidth(32); + SetHeight(72); + SetRace("human_guard"); + SetName("Soldier"); + SetModel("npc/guard1.mdl"); + SetRoam(false); + SetInvincible(true); + SetIdleAnim("idle7"); + } + + void say_hi() + { + SayText("Sorry adeventurer , we re too busy to talk."); + } + +} + +} diff --git a/scripts/angelscript/deralia/innkeeper.as b/scripts/angelscript/deralia/innkeeper.as new file mode 100644 index 00000000..feaf2522 --- /dev/null +++ b/scripts/angelscript/deralia/innkeeper.as @@ -0,0 +1,260 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Innkeeper : CGameScript +{ + int ATTACK1_DAMAGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int BUSY_CHATTING; + int CANCHAT; + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + int CHAT_STEPS; + int SAID_WELCOME; + string SOUND_HELLO; + string STORE_NAME; + string STORE_TRIGGERTEXT; + string TALK_TARGET; + + Innkeeper() + { + SOUND_HELLO = "npc/hello1.wav"; + STORE_NAME = "deralia_bar"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(2); + if (CANCHAT != 0) + { + } + CanSee("player"); + say_hi(); + ScheduleDelayedEvent(20, "chatreset"); + } + + void OnSpawn() override + { + SetHealth(25); + SetMaxHealth(25); + SetGold(26); + SetName("Gerald the Inn Keeper"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(1, 1); + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = 5; + ATTACK_PERCENTAGE = 0.6; + resetchat(); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumour", "news"); + CatchSpeech("say_sewer", "sewer"); + CatchSpeech("say_rudolf", "rudolf"); + } + + void say_rudolf() + { + CHAT_STEPS = 4; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Rudolf? What do you want with him?"; + CHAT_STEP2 = "He came in here a couple nights ago before leaving the city."; + CHAT_STEP3 = "Said something about finding riches in an abandoned mine."; + CHAT_STEP4 = "The fool has more rocks in his head than in that mine."; + chat_loop(); + SetGlobalVar("RudolfQuest", 1); + } + + void say_rumor() + { + say_rumour(); + } + + void chatreset() + { + CANCHAT = 1; + } + + void say_hi() + { + if ((SAID_WELCOME)) return; + PlayAnim("once", "studycart"); + SayText("Welcome to Deralia Inn!"); + ScheduleDelayedEvent(2, "say_hi_2"); + CANCHAT = 0; + } + + void say_hi_2() + { + SayText("Finest booze and most comfortable lodging this side of Daragoth!"); + SAID_WELCOME = 1; + } + + void game_recvoffer_gold() + { + recv_moregold(); + recv_enoughgold(); + recv_notenoughgold(); + } + + void recv_moregold() + { + if (!(OFFER_AMT > 5)) return; + ReceiveOffer("accept"); + SayText("That be some good gold there."); + UseTrigger("door01"); + PlayAnim("once", "yes"); + } + + void recv_enoughgold() + { + if (!(OFFER_AMT == 5)) return; + ReceiveOffer("accept"); + SayText("Best be quick , the doors open and there s lots of people wanting a room."); + UseTrigger("door01"); + PlayAnim("once", "yes"); + } + + void recv_notenoughgold() + { + if (!(OFFER_AMT < 5)) return; + ReceiveOffer("reject"); + SayText("This isn t charity boy, it s an Inn."); + PlayAnim("once", "no"); + } + + void robbed() + { + SayText("Bastard! Thief!"); + PlayAnim("once", "beatdoor"); + } + + void attack_1() + { + DoDamage("ent_laststole", ATTACK_RANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + + void say_job() + { + SayText(I + " ve got Bob the door guard, but he s a little afraid of rats. And my basement is full of them."); + SayText("If you could clear the place up , it would be greatly appreciated and you can stay the night."); + } + + void say_rumour() + { + PlayAnim("once", "pondering"); + SayText("Rumour has it that this place has rooms real cheap , get my drift?"); + PlayAnim("once", "pondering"); + SayText(I + " ve heard from travelers coming to this tavern, telling about places outside of this village."); + ScheduleDelayedEvent(3, "say_rumour2"); + } + + void vendor_used() + { + SayText("Careful! This isn t that watered down stuff you boys drink in Edana!"); + SetVolume(10); + EmitSound(GetOwner(), SOUND_HELLO); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "drink_mead", 20, 100); + AddStoreItem(STORE_NAME, "drink_ale", 20, 100); + AddStoreItem(STORE_NAME, "drink_wine", 20, 100); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + Say("goods[34] *[24] *[35] *[40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void say_sewer() + { + if ((IsEntityAlive(param1))) + { + TALK_TARGET = param1; + } + else + { + TALK_TARGET = GetEntityIndex("ent_lastspoke"); + } + convo_anim(); + SayText("Well , if hunting rats is beneath you..."); + ScheduleDelayedEvent(3.0, "say_job2"); + } + + void say_job2() + { + convo_anim(); + SayText("I heard Cathain, the quartermaster, lost a sewer crew a little while ago."); + ScheduleDelayedEvent(5.0, "say_job3"); + } + + void say_job3() + { + convo_anim(); + SayText("Usually when that happens, they send militiamen to find them, or at least clean up the mess."); + ScheduleDelayedEvent(5.0, "say_job4"); + } + + void say_job4() + { + convo_anim(); + if (GetGender(TALK_TARGET) == "male") + { + SayText("A big strapping lad like yourself might fit the bill."); + } + else + { + SayText("A brave heroine like yourself might just fit the bill."); + } + ScheduleDelayedEvent(5.0, "say_job5"); + } + + void say_job5() + { + PlayAnim("critical", "give_shot"); + SayText("You can find Cathain inside the barracks - just left of the castle. Usually pacing a wear in the floor."); + } + + void say_rumour2() + { + SayText("This knight came here the other day , and he spoke of the path to Gatecity being cut off. If that s true, we can t visit the dwarves and elves anymore."); + } + + void bchat_after_menus() + { + string reg.mitem.title = "Sewer Job"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_sewer"; + } + +} + +} diff --git a/scripts/angelscript/deralia/item_cupboard01.as b/scripts/angelscript/deralia/item_cupboard01.as new file mode 100644 index 00000000..cca079c4 --- /dev/null +++ b/scripts/angelscript/deralia/item_cupboard01.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ItemCupboard01 : CGameScript +{ + string ANIM_CLOSE; + string ANIM_IDLE; + string ANIM_OPEN; + + ItemCupboard01() + { + ANIM_OPEN = "seq-name"; + ANIM_CLOSE = "seq-name"; + ANIM_IDLE = "seq-name"; + } + + void OnSpawn() override + { + SetName("Cupboard"); + SetModel("props/Xen_furniture2.mdl"); + SetIdleAnim(ANIM_IDLE); + } + + void trade_success() + { + // PlayRandomSound from: "items/creak.wav" + array sounds = {"items/creak.wav"}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void chest_additems() + { + add_gold(RandomInt(3, 6)); + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + AddStoreItem(STORENAME, "axes_axe", 1, 0); + AddStoreItem(STORENAME, "swords_longsword", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/deralia/item_cupboard02.as b/scripts/angelscript/deralia/item_cupboard02.as new file mode 100644 index 00000000..0f3e2099 --- /dev/null +++ b/scripts/angelscript/deralia/item_cupboard02.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ItemCupboard02 : CGameScript +{ + string ANIM_CLOSE; + string ANIM_IDLE; + string ANIM_OPEN; + + ItemCupboard02() + { + ANIM_OPEN = "seq-name"; + ANIM_CLOSE = "seq-name"; + ANIM_IDLE = "seq-name"; + } + + void OnSpawn() override + { + SetName("Cupboard"); + SetModel("props/Xen_furniture2.mdl"); + SetIdleAnim(ANIM_IDLE); + } + + void trade_success() + { + // PlayRandomSound from: "items/creak.wav" + array sounds = {"items/creak.wav"}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void chest_additems() + { + AddStoreItem("cupboard01", "axes_axe", 1, 0); + AddStoreItem("cupboard01", "swords_longsword", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/deralia/jacob.as b/scripts/angelscript/deralia/jacob.as new file mode 100644 index 00000000..39b73164 --- /dev/null +++ b/scripts/angelscript/deralia/jacob.as @@ -0,0 +1,59 @@ +#pragma context server + +#include "deralia/guard.as" + +namespace MS +{ + +class Jacob : CGameScript +{ + int DERALIA_CHATTER; + + Jacob() + { + DERALIA_CHATTER = 0; + } + + void OnSpawn() override + { + SetName("Bouncer Jacob"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_hayy", "hayy"); + } + + void say_hi() + { + if (param1 != "PARAM1") + { + string L_GENDER = GetGender(param1); + } + else + { + string L_GENDER = GetGender("ent_lastspoke"); + } + if (L_GENDER == "male") + { + SayText("I don't recognize you. You'll have to talk to my boss before I let you in."); + } + else + { + PlayAnim("once", "lean"); + SayText("If you're looking for work, I may have something for you. You've certainly got the looks, but it also requires some skills."); + } + } + + void say_hayy() + { + if (GetGender("ent_lastspoke") == "male") + { + SayText("Hayy ;)"); + } + else + { + SayText("I don't need this. Away with you."); + } + } + +} + +} diff --git a/scripts/angelscript/deralia/kayle.as b/scripts/angelscript/deralia/kayle.as new file mode 100644 index 00000000..a858edf3 --- /dev/null +++ b/scripts/angelscript/deralia/kayle.as @@ -0,0 +1,229 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class Kayle : CGameScript +{ + int CANCHAT; + int CHAT_AUTO_HAIL; + int CHAT_AUTO_RUMOR; + int CHAT_MENU_ON; + int CHAT_NEVER_INTERRUPT; + int MENU_MODE; + string MENU_TO; + int SEE_RANGE; + + Kayle() + { + CHAT_AUTO_HAIL = 1; + CHAT_AUTO_RUMOR = 1; + CHAT_NEVER_INTERRUPT = 1; + SEE_RANGE = 200; + MENU_MODE = 0; + } + + void OnSpawn() override + { + SetHealth(1); + SetWidth(32); + SetHeight(64); + SetRace("human"); + SetSkillLevel(0); + SetName("Kayle"); + SetRoam(false); + SetModel("npc/human2.mdl"); + SetInvincible(true); + CANCHAT = 1; + CHAT_MENU_ON = 0; + CatchSpeech("say_help", "help"); + CatchSpeech("say_kayle", "kayle"); + CatchSpeech("say_deralia", "deralia"); + CatchSpeech("say_edana", "edana"); + CatchSpeech("say_gatecity", "gatecity"); + CatchSpeech("say_helena", "helena"); + ScheduleDelayedEvent(0.1, "add_dialogue"); + } + + void add_dialogue() + { + chat_add_text("seq_hi", "Hey.", 3.0); + chat_add_text("seq_hi", "My names Kayle.", 1.0); + chat_add_text("seq_rumor", "Nothing much, besides the fact that they won't let us into to uptown Deralia.", 3.0); + chat_add_text("seq_rumor", "Don't really get why, not everyone wants to hang around with smelly ship mates.", 3.0); + chat_add_text("seq_help", "You talking to me?", 5.0); + chat_add_text("seq_help", "...", 1.0); + chat_add_text("seq_kayle", "Huh? You beckoned?", 2.0); + chat_add_text("seq_edana", "Edana huh, that's pretty far off.", 2.0); + chat_add_text("seq_edana", "Sembelbin seemed interested in an Urdual Title Ring last time I was there.", 3.0); + chat_add_text("seq_deralia", "I like living in Deralia, its always been my home.", 3.0); + chat_add_text("seq_gatecity", "Really? You don't look like a dwarf.", 2.0); + chat_add_text("seq_gatecity", "I don't see any point in going there. It's too much trouble getting around the goblins.", 3.0); + chat_add_text("seq_helena", "Helena... must've been tough through all those orc attacks.", 2.0); + chat_add_text("seq_helena", "I've seen old paintings of the heroes who saved Helena from an army of orcs. You have an odd resemblence to one of 'em.", 4.0); + } + + void say_hi() + { + if (param1 != "PARAM1") + { + string L_PLAYER = param1; + } + else + { + string L_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if (!(CanSee(L_PLAYER, SEE_RANGE))) return; + chat_start_sequence("seq_hi"); + } + + void say_rumor() + { + if (param1 != "PARAM1") + { + string L_PLAYER = param1; + } + else + { + string L_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if (!(CanSee(L_PLAYER, SEE_RANGE))) return; + chat_start_sequence("seq_rumor"); + } + + void say_help() + { + if (param1 != "PARAM1") + { + string L_PLAYER = param1; + } + else + { + string L_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if (!(CanSee(L_PLAYER, SEE_RANGE))) return; + chat_start_sequence("seq_help"); + } + + void say_kayle() + { + if (param1 != "PARAM1") + { + string L_PLAYER = param1; + } + else + { + string L_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if (!(CanSee(L_PLAYER, SEE_RANGE))) return; + chat_start_sequence("seq_kayle"); + } + + void say_edana() + { + if (param1 != "PARAM1") + { + string L_PLAYER = param1; + } + else + { + string L_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if (!(CanSee(L_PLAYER, SEE_RANGE))) return; + chat_start_sequence("seq_edana"); + } + + void say_deralia() + { + if (param1 != "PARAM1") + { + string L_PLAYER = param1; + } + else + { + string L_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if (!(CanSee(L_PLAYER, SEE_RANGE))) return; + chat_start_sequence("seq_deralia"); + } + + void say_gatecity() + { + if (param1 != "PARAM1") + { + string L_PLAYER = param1; + } + else + { + string L_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if (!(CanSee(L_PLAYER, SEE_RANGE))) return; + chat_start_sequence("seq_gatecity"); + } + + void say_helena() + { + if (param1 != "PARAM1") + { + string L_PLAYER = param1; + } + else + { + string L_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if (!(CanSee(L_PLAYER, SEE_RANGE))) return; + chat_start_sequence("seq_helena"); + } + + void game_menu_getoptions() + { + if (MENU_MODE == 0) + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + string reg.mitem.title = "Ask about Rumors"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_rumor"; + string reg.mitem.title = "Ask about..."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_switch_towns"; + } + else + { + if (MENU_MODE == 1) + { + string reg.mitem.title = "Edana"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_edana"; + string reg.mitem.title = "Deralia"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_deralia"; + string reg.mitem.title = "Gatecity"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_gatecity"; + string reg.mitem.title = "Helena"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_helena"; + MENU_MODE = 0; + } + } + } + + void menu_switch_towns() + { + MENU_MODE = 1; + MENU_TO = param1; + ScheduleDelayedEvent(0.1, "send_menu"); + } + + void send_menu() + { + OpenMenu(MENU_TO); + } + +} + +} diff --git a/scripts/angelscript/deralia/knight_foutpost.as b/scripts/angelscript/deralia/knight_foutpost.as new file mode 100644 index 00000000..56f2628e --- /dev/null +++ b/scripts/angelscript/deralia/knight_foutpost.as @@ -0,0 +1,105 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class KnightFoutpost : CGameScript +{ + int FoutpostTrans; + int NO_JOB; + int NO_RUMOR; + int SAID_HI; + + KnightFoutpost() + { + NO_JOB = 1; + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetHealth(500); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Royal Knight"); + SetRoam(false); + SetModel("npc/royal_guard1.mdl"); + SetInvincible(true); + SetIdleAnim("idle1"); + CatchSpeech("say_hi", "hello"); + CatchSpeech("say_leave1", "leaving"); + FoutpostTrans = 0; + } + + void say_hi() + { + EmitSound(GetOwner(), 5, "voices/deralia/royalknight/royal1.wav", 10); + SayText("I don't have much time to talk, adventurer. We're [leaving] shortly."); + SAID_HI = 1; + } + + void say_leave1() + { + EmitSound(GetOwner(), 5, "voices/deralia/royalknight/royal2.wav", 10); + SayText("The King has finally agreed to send reinforcements to an outpost to the north."); + ScheduleDelayedEvent(5, "say_leave2"); + } + + void say_leave2() + { + EmitSound(GetOwner(), 5, "voices/deralia/royalknight/royal3.wav", 10); + SayText("The Orcs have been more aggressive in their recent attacks."); + ScheduleDelayedEvent(4, "say_leave3"); + } + + void say_leave3() + { + EmitSound(GetOwner(), 5, "voices/deralia/royalknight/royal4.wav", 10); + SayText("We've received word from Vadrel that another attack would be imminent."); + FoutpostTrans = 1; + } + + void game_menu_getoptions() + { + if ((SAID_HI)) + { + string reg.mitem.title = "Leaving?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_leave1"; + } + if (FoutpostTrans == 1) + { + string reg.mitem.title = "Ask to Join"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "ask_join1"; + } + } + + void ask_join1() + { + EmitSound(GetOwner(), 5, "voices/deralia/royalknight/royal5.wav", 10); + SayText("Well, you seem to know how to use a weapon... or so I hope."); + ScheduleDelayedEvent(5, "ask_join2"); + } + + void ask_join2() + { + EmitSound(GetOwner(), 5, "voices/deralia/royalknight/royal6.wav", 10); + SayText("Just don't expect me to babysit you... or bring back your corpse."); + ScheduleDelayedEvent(4, "start_vote"); + } + + void start_vote() + { + string VOTE_TITLE = "Join the Reinforcements to the Forgotton Outpost?"; + string L_OPTIONS = "Yes!:foutpost;No!:0"; + CallExternal(GAME_MASTER, "gm_create_vote", "gm_votemap", L_OPTIONS, VOTE_TITLE, "Voting begins now!", 0); + } + +} + +} diff --git a/scripts/angelscript/deralia/knight_lord.as b/scripts/angelscript/deralia/knight_lord.as new file mode 100644 index 00000000..8d1734e3 --- /dev/null +++ b/scripts/angelscript/deralia/knight_lord.as @@ -0,0 +1,266 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_guard_friendly_new.as" + +namespace MS +{ + +class KnightLord : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float ATTACK_STUNCHANCE; + int BG_MAX_HEAR_CIV; + int BG_NO_GO_HOME; + int BG_ROAM; + int DROP_GOLD; + float FLEE_CHANCE; + int FLEE_HEALTH; + int GAVE_RING; + int JOBS_DONE; + int NORMAL_MENU; + int NO_CHAT; + int NO_STEP_ADJ; + int NPC_GIVE_EXP; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY; + + KnightLord() + { + DROP_GOLD = RandomInt(10, 50); + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_WARCRY = "voices/human/male_guard_dismiss.wav"; + SOUND_ATTACK = "weapons/swingsmall.wav"; + SOUND_PAIN = "voices/human/male_hit1.wav"; + SOUND_IDLE = "voices/human/male_idle2.wav"; + SOUND_DEATH = "voices/human/male_die.wav"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "swordswing1_L"; + ANIM_DEATH = "dieforward"; + ATTACK_MOVERANGE = 45; + ATTACK_RANGE = 65; + ATTACK_HITRANGE = 150; + ATTACK_HITCHANCE = 0.9; + ATTACK_DAMAGE = 45; + ATTACK_STUNCHANCE = 0.5; + FLEE_HEALTH = 15; + FLEE_CHANCE = 0.05; + NORMAL_MENU = 1; + JOBS_DONE = 0; + BG_NO_GO_HOME = 1; + BG_ROAM = 1; + BG_MAX_HEAR_CIV = 32000; + NO_STEP_ADJ = 1; + NO_CHAT = 1; + Precache(SOUND_DEATH); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + if (!(IS_HUNTING)) + { + } + SetVolume(5); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + + void OnSpawn() override + { + SetName("knight_lord"); + SetMenuAutoOpen(1); + SetHealth(800); + SetGold(DROP_GOLD); + SetWidth(32); + SetHeight(72); + SetRace("hguard"); + SetName("Lord of the land"); + SetRoam(true); + SetHearingSensitivity(10); + NPC_GIVE_EXP = 100; + SetDamageResistance("all", ".4"); + SetMoveSpeed(1.0); + SetBloodType("red"); + SetModel("npc/guard2.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + GiveItem(GetOwner(), "ring_light2"); + } + + void say_hail() + { + int L_RAND = RandomInt(0, 1); + if (L_RAND == 0) + { + SayText("Well met, adventurer."); + } + else + { + if (L_RAND == 1) + { + SayText("How do you do?"); + } + } + } + + void say_rumor() + { + int L_RAND = RandomInt(0, 2); + if (L_RAND == 0) + { + SayText("Cathlain seems to be losing guards in the sewers... perhaps he could use some help."); + } + else + { + if (L_RAND == 1) + { + SayText("Master Proffund likes gambling too much. Hopefully he doesn't get in trouble with the wrong people."); + } + else + { + if (L_RAND == 2) + { + SayText("I recently stored one of Thordac's weapons in Galat's Wondrous Chest of Storage, but it was gone when I went to retrieve it..."); + SayText("Guilda wasn't very helpful when trying to figure out where it went."); + } + } + } + } + + void say_job() + { + if (!(JOBS_DONE)) + { + SayText("I have been looking for a sneaky pick pocket, who has been troubling the townsfolk."); + SayText("If you spot him, do try to apprehend him, as I am also quite busy with other matters."); + SayText("Do not worry, for you will be generously rewarded for your actions."); + } + if (!(JOBS_DONE)) return; + SayText("I am afraid that, at the moment, I've no other tasks for good samaritans such as yourself."); + } + + void say_jail() + { + SetRoam(false); + SetMoveDest(FindEntityByName("thief")); + SetMoveAnim(ANIM_IDLE); + SayText("You shall be taken away and locked behind bars, thief!"); + string QUEST_COMPLETER = GetEntityName(APPREHENDER); + SayText(QUEST_COMPLETER + " , you have done well."); + SayText("Please accept this ring as a token of my gratitude."); + SayText("May it bring light in even the darkest of dungeons and caves."); + CallExternal(FindEntityByName("thief"), "quest_done"); + JOBS_DONE = 1; + NORMAL_MENU = 0; + OpenMenu(APPREHENDER); + ScheduleDelayedEvent(10, "resume_roam"); + } + + void offer_ring() + { + // TODO: offer APPREHENDER ring_light2 + NORMAL_MENU = 1; + GAVE_RING = 1; + } + + void game_menu_cancel() + { + int L_RAND = RandomInt(0, 1); + if (L_RAND == 0) + { + SayText("Very well then."); + } + else + { + if (L_RAND == 1) + { + SayText("As you were."); + } + } + NORMAL_MENU = 1; + } + + void game_menu_getoptions() + { + if (NORMAL_MENU == 1) + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hail"; + string reg.mitem.title = "Ask about Rumors"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_rumor"; + string reg.mitem.title = "Ask about Jobs"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + } + if (JOBS_DONE == 1) + { + if (!(GAVE_RING)) + { + } + string reg.mitem.title = "Accept"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "offer_ring"; + } + } + + void resume_roam() + { + SetRoam(true); + SetMoveAnim(ANIM_WALK); + } + + void baseguard_tobattle() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + } + + void attack_1() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK, 10); + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE); + } + + void game_dodamage() + { + if (!(param1)) return; + if (RandomInt(1, 100) <= ATTACK_STUNCHANCE) + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", 3, GetEntityIndex(GetOwner())); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_PAIN + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + +} + +} diff --git a/scripts/angelscript/deralia/map_startup.as b/scripts/angelscript/deralia/map_startup.as new file mode 100644 index 00000000..99ff2879 --- /dev/null +++ b/scripts/angelscript/deralia/map_startup.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "deralia"; + MAP_WEATHER = "clear;clear;clear;clear;clear;fog_blue"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The City of Deralia"); + SetGlobalVar("G_MAP_DESC", "The Human capital is known as the Jewel of Daragoth."); + SetGlobalVar("G_MAP_DIFF", "(Beginner/Safe Area)"); + SetGlobalVar("G_WARN_HP", 0); + } + + void game_newlevel() + { + string reg.texture.name = "reflective"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.4"; + int reg.texture.reflect.range = 512; + int reg.texture.reflect.world = 1; + int reg.texture.water = 0; + // TODO: registertexture + } + +} + +} diff --git a/scripts/angelscript/deralia/nalchemist.as b/scripts/angelscript/deralia/nalchemist.as new file mode 100644 index 00000000..74c8eac2 --- /dev/null +++ b/scripts/angelscript/deralia/nalchemist.as @@ -0,0 +1,52 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Nalchemist : CGameScript +{ + int NO_HAIL; + int NO_JOB; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + + Nalchemist() + { + STORE_NAME = "Alchemy"; + STORE_TRIGGERTEXT = "store buy purchase"; + STORE_SELLMENU = 0; + NO_JOB = 1; + NO_HAIL = 1; + } + + void OnSpawn() override + { + SetHealth(25); + SetGold(0); + SetName("Potion Seller"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + CatchSpeech("say_easteregg", "strongest"); + } + + void say_easteregg() + { + PlayAnim("once", "converse1"); + bchat_mouth_move(); + EmitSound(GetOwner(), 5, "voices/deralia/potiondeny.wav", 10); + SayText("My potions are too strong for you , traveller."); + } + +} + +} diff --git a/scripts/angelscript/deralia/pat.as b/scripts/angelscript/deralia/pat.as new file mode 100644 index 00000000..5b6bc3d5 --- /dev/null +++ b/scripts/angelscript/deralia/pat.as @@ -0,0 +1,126 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Pat : CGameScript +{ + int CAN_CHAT; + string CURRENT_ENEMY; + int FLEE_PLAYER; + int HAT_QUEST; + int NO_JOB; + int SEE_ENEMY; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + + Pat() + { + FLEE_PLAYER = 0; + CURRENT_ENEMY = �PNULL�P; + SOUND_IDLE1 = "voices/human/male_idle4.wav"; + SOUND_IDLE2 = "voices/human/male_idle5.wav"; + SOUND_IDLE3 = "voices/human/male_idle6.wav"; + CAN_CHAT = 1; + NO_JOB = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.5, 1.5)); + if (FLEE_PLAYER == 1) + { + } + SetMoveAnim("run1"); + SetMoveDest("flee"); + } + + void OnSpawn() override + { + SetHealth(50); + SetGold(RandomInt(3, 6)); + SetName("man with a hat"); + SetName("Pat"); + SetWidth(32); + SetHeight(72); + SetRace("neutral"); + SetRoam(true); + SetInvincible(true); + SetModel("npc/human1.mdl"); + SetMoveAnim("walk_scared"); + SetModelBody(0, 4); + SetModelBody(1, 2); + SetBloodType("red"); + GiveItem(GetOwner(), "item_hat"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_hat", "hat"); + CatchSpeech("say_rumor", "rumours"); + CatchSpeech("say_name", "name"); + } + + void HAT_START() + { + HAT_QUEST = 1; + } + + void say_name() + { + SayText("My name is Pat.."); + SetName("Pat with a hat"); + } + + void wander() + { + SetMoveAnim("walk_scared"); + SEE_ENEMY = 0; + } + + void say_hi() + { + SayText(I + " didn t do it! I swear!"); + } + + void gossip_1() + { + SayText("No thieves in the area! " + I + " know that!"); + } + + void say_hat() + { + if (HAT_QUEST == 1) + { + SetRace("orc"); + SetInvincible(false); + SayText("This is my hat! You can t have it!"); + FLEE_PLAYER = 1; + } + if (HAT_QUEST == 0) + { + SayText("What of " + MY + " hat?"); + } + } + + void say_rumor() + { + PlayAnim("once", "pondering"); + SayText("Rumours? What do " + I + " know of such things? What , huh!? It wasn t me who took those rings!"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + FLEE_PLAYER = 1; + ScheduleDelayedEvent(60, "reset"); + } + + void reset() + { + SetMoveAnim("walk_scared"); + FLEE_PLAYER = 0; + } + +} + +} diff --git a/scripts/angelscript/deralia/storage.as b/scripts/angelscript/deralia/storage.as new file mode 100644 index 00000000..2087384b --- /dev/null +++ b/scripts/angelscript/deralia/storage.as @@ -0,0 +1,214 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "NPCs/base_storage.as" +#include "monsters/base_civilian.as" + +namespace MS +{ + +class Storage : CGameScript +{ + string ANIM_CHAT; + string ANIM_IDLE; + string ANIM_NO; + string ANIM_RUN; + string ANIM_STORE; + string ANIM_WALK; + int CHATTING; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + int CHAT_STEPS; + int DID_HELLO; + string GALA_CHEST_POS; + int IS_FLEEING; + string MY_HOME; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + string SAYTEXT_GIVETICKET; + string SAYTEXT_HAND_WARN; + string SAYTEXT_ITEMS_HANDS; + string SAYTEXT_NOITEM; + string SAYTEXT_NOSTORABLES; + string SAYTEXT_NOTICKET; + string SAYTEXT_REDEEMTICKET; + string SAYTEXT_REFUND; + string SAYTEXT_SELECT_ITEM; + string SAYTEXT_SELECT_TICKET; + + Storage() + { + GALA_CHEST_POS = /* TODO: $relpos */ $relpos(0, 48, 64); + ANIM_CHAT = "pondering3"; + ANIM_NO = "no"; + ANIM_STORE = "return_needle"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk_scared"; + SAYTEXT_REFUND = "Here's your fee back. Such as it is."; + SAYTEXT_SELECT_ITEM = "What do you wish to store?"; + SAYTEXT_NOITEM = "I did not recieve your item."; + SAYTEXT_NOTICKET = "I did not recieve your ticket."; + SAYTEXT_NOSTORABLES = "Sorry, I'm afraid you have nothing we can store for you."; + SAYTEXT_GIVETICKET = "Here is your ticket! You can redeem that at any Galat outlet."; + SAYTEXT_SELECT_TICKET = "Which ticket would do you like to redeem?"; + SAYTEXT_HAND_WARN = "Please place your tickets in your hands."; + SAYTEXT_REDEEMTICKET = "Thank you for using Galat Storage."; + SAYTEXT_ITEMS_HANDS = "Please hold forth any items you wish to store in your hands."; + NO_HAIL = 1; + NO_JOB = 1; + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetName("Guilda of Galat s Storage"); + SetHealth(40); + SetInvincible(false); + SetGold(10); + SetRace("human"); + SetWidth(28); + SetHeight(96); + SetModel("npc/human2.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim("run"); + SetRoam(false); + PlayAnim("once", "idle1"); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetSayTextRange(1024); + CatchSpeech("heard_hi", "hail"); + CatchSpeech("heard_rumor", "job"); + CatchSpeech("heard_store", "shop"); + ScheduleDelayedEvent(1.6, "post_spawn"); + } + + void post_spawn() + { + MY_HOME = GetMonsterProperty("origin"); + } + + void heard_hi() + { + if ((CHATTING)) return; + CHATTING = 1; + DID_HELLO = 1; + PlayAnim("critical", "180_right"); + SayText("Welcome to Galat s Weapon and Armor Storage."); + ScheduleDelayedEvent(5.0, "heard_hi2"); + } + + void heard_hi2() + { + SayText("For a nominal fee , we can store your weapons and armor."); + ScheduleDelayedEvent(5.0, "heard_hi3"); + } + + void heard_hi3() + { + SayText("We ll give you a ticket for any item that we can store."); + ScheduleDelayedEvent(5.0, "heard_hi4"); + } + + void heard_hi4() + { + SayText("Thanks to our contacts with the Felewyn wizards , you may redeem this ticket at any Galat outlet!"); + ScheduleDelayedEvent(5.0, "heard_hi5"); + } + + void heard_hi5() + { + CHATTING = 0; + PlayAnim("critical", "pondering2"); + SayText("Galat has outlets in Deralia , Gatecity , Kray Eldorad , and surprisingly , Helena."); + } + + void heard_rumor() + { + PlayAnim("critical", "fear1"); + SayText("By Urdual! You mean there s more than one woman in this town!?"); + } + + void heard_store() + { + OpenMenu(GetEntityIndex("ent_lastheard")); + } + + void game_menu_getoptions() + { + if (!(DID_HELLO)) + { + DID_HELLO = 1; + PlayAnim("critical", "lean"); + SayText("Welcome to Galat s Weapon and Armor Storage!"); + } + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "heard_hi"; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + SetRoam(true); + SetMoveAnim(ANIM_RUN); + SetMoveDest(m_hLastStruck); + SetMenuAutoOpen(0); + if ((IS_FLEEING)) return; + IS_FLEEING = 1; + ScheduleDelayedEvent(20.0, "stop_fleeing"); + } + + void stop_fleeing() + { + SetMoveDest(MY_HOME); + SetMoveAnim(ANIM_WALK); + SetMenuAutoOpen(1); + SetRoam(false); + IS_FLEEING = 0; + } + + void say_storage_chest() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_storage_chest"); + } + if ((BUSY_CHATTING)) return; + convo_anim(); + CHAT_STEPS = 6; + CHAT_STEP1 = "Yes, this before me is the latest in magical banking: Galat's Wondrous Chest of Storage!"; + CHAT_STEP2 = "This new chest here can store items for you, no need for tickets."; + CHAT_STEP3 = "Simply place the items you wish to store in your hands, and use the chest. It does the rest!"; + CHAT_STEP4 = "To withdraw items, use it as you would any chest, simply reach in and take what you need."; + CHAT_STEP5 = "The chest keeps each customer's inventory in a special dimensional pocket only the customer can access."; + CHAT_STEP6 = "The chest can hold about a couple dozen or so items for each user. You can use this one here at any time."; + chat_loop(); + } + + void say_wondrous() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_wondrous"); + } + if ((BUSY_CHATTING)) return; + convo_anim(); + CHAT_STEPS = 4; + CHAT_STEP1 = "With a Wondrous Scroll of Galat's storage you can summon Galat's Wondrous Chest of Storage anywhere you may happen to be."; + CHAT_STEP2 = "Any Galat customers present can then use the chest to access whatever items they have stored therein."; + CHAT_STEP3 = "Each scroll is good for single summoning. Be sure you have a fair amount of room around yourself for the chest to manifest in."; + CHAT_STEP4 = "I, and any Galat Banking representative can sell you one of these scrolls for the meager asking price of "; + CHAT_STEP4 += GALA_SCROLL_PRICE; + CHAT_STEP4 += " gold."; + chat_loop(); + } + +} + +} diff --git a/scripts/angelscript/deralia/thief.as b/scripts/angelscript/deralia/thief.as new file mode 100644 index 00000000..01bdda4f --- /dev/null +++ b/scripts/angelscript/deralia/thief.as @@ -0,0 +1,239 @@ +#pragma context server + +#include "monsters/base_npc_attack.as" +#include "monsters/attack_hack.as" + +namespace MS +{ + +class Thief : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + int ATTACK_FREQUENCY; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + string CAN_HUNT; + int CAN_RETALIATE; + int CAN_STTACK; + float FLEE_CHANCE; + int FLEE_DISTANCE; + int FLEE_HEALTH; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_DELAY; + int FOLLOWING; + int GOLD; + int OFFER_GIVEN; + int QUEST_DONE; + int REWARD_NAO_PLZ; + string SOUND_DEATH; + int STEAL; + int STEALING; + int THIEF; + + Thief() + { + CAN_STTACK = 0; + CAN_FLEE = 1; + FLEE_HEALTH = 34; + FLEE_CHANCE = 1.0; + FLEE_DISTANCE = 1000; + CAN_RETALIATE = 0; + CAN_FLINCH = 1; + FLINCH_ANIM = "llflinch"; + FLINCH_CHANCE = 0.5; + FLINCH_DELAY = 1; + ANIM_DEATH = "dieforward"; + SOUND_DEATH = "player/stomachhit1.wav"; + ANIM_WALK = "walk"; + GOLD = 10; + ATTACK_DAMAGE = 7; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 150; + ATTACK_HITCHANCE = 0.7; + ATTACK_FREQUENCY = 10; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "franticbutton"; + FOLLOWING = 0; + if (STEAL == 1) + { + } + SetVolume(8); + Say("hello1[.83] [.33] [.91] [.91] [.38] [.36]"); + SetRoam(false); + ScheduleDelayedEvent(4, "resumeroam"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(1); + if (!(STEAL)) + { + } + if ((CanSee("player", 256))) + { + } + SetMoveDest(m_hLastSeen); + if (STEAL == 0) + { + } + STEALING = RandomInt(-15, -5); + // TODO: offer GetEntityIndex(m_hLastSeen) gold STEALING + GOLD -= STEALING; + PlayAnim("once", "return_needle"); + SetRoam(false); + ScheduleDelayedEvent(1, "resumeroam"); + ScheduleDelayedEvent(5, "resumesteal"); + SetGold(GOLD); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(1); + if (FOLLOWING == 1) + { + if (CanSee(FindEntityByName("knight_lord"), 256) == 1) + { + SetMoveDest(FindEntityByName("knight_lord")); + ScheduleDelayedEvent(3, "turn_in_now"); + FOLLOWING = 0; + } + else + { + SetMoveDest(APPREHENDER); + } + } + } + + void OnSpawn() override + { + SetName("thief"); + SetHealth(45); + SetGold(GOLD); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Commoner"); + SetRoam(true); + SetModel("npc/human1.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 5); + SetMoveAnim("walk"); + THIEF = 0; + STEAL = 0; + } + + void resumeroam() + { + SetRoam(true); + } + + void resumesteal() + { + STEAL = 1; + } + + void say_accept() + { + OFFER_GIVEN = 1; + if (REWARD_NAO_PLZ != 1) + { + SayText("Thank you good Sir! " + I + " shall follow you to the Lord of the Land."); + SetGlobalVar("APPREHENDER", param1); + SetRace("beloved"); + SetMoveAnim(ANIM_RUN); + FOLLOWING = 1; + } + } + + void quest_done() + { + DeleteEntity(GetEntityIndex(GetOwner()), true); // fade out + } + + void turn_in_now() + { + SetMoveDest(FindEntityByName("knight_lord")); + SayText("Sir , " + I + "am turning myself in for " + I + " have commited crime."); + SayText(I + " have stolen from people."); + CallExternal(FindEntityByName("knight_lord"), "2", "say_jail"); + PlayAnim("once", "kneel"); + } + + void turned_in() + { + REWARD_NAO_PLZ = 1; + OpenMenu(APPREHENDER); + QUEST_DONE = 1; + } + + void game_menu_cancel() + { + if (REWARD_NAO_PLZ != 1) + { + SayText("Then " + I + " shall fight you!"); + SetRace("orc"); + SetName("A Thief!"); + ANIM_RUN = "run"; + CAN_RETALIATE = 1; + CAN_ATTACK = 1; + CAN_HUNT = 1; + SetRace("orc"); + SetRoam(true); + npcatk_target(GetEntityIndex(m_hLastStruck)); + } + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Accept"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_accept"; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (OFFER_GIVEN == 0) + { + SetName("Thief"); + SayText("Please spare me , good Sir , for " + I + " am but a petty thief."); + SayText(I + " shall turn myself in if you would be so kind as to let me live."); + PlayAnim("critical", "crouch"); + OpenMenu(GetEntityIndex(m_hLastStruck)); + STEAL = 1; + SetRoam(false); + } + } + + void attack() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + + void my_target_died() + { + SetRace("human"); + SetName("Commoner"); + // TODO: UNCONVERTED: STEAL 0 + SetRoam(true); + } + + void dbg_find_thief() + { + SetSayTextRange(4096); + SayText(OVER + HERE!); + LogDebug("thief present"); + } + +} + +} diff --git a/scripts/angelscript/deraliasewers/map_startup.as b/scripts/angelscript/deraliasewers/map_startup.as new file mode 100644 index 00000000..a12fa629 --- /dev/null +++ b/scripts/angelscript/deraliasewers/map_startup.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "deraliasewers"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_DIFF", "Levels 35-40 / 700+hp"); + SetGlobalVar("G_WARN_HP", 700); + SetGlobalVar("G_TRACK_HP", 1); + } + +} + +} diff --git a/scripts/angelscript/deraliasewers/mummy_warrior2b.as b/scripts/angelscript/deraliasewers/mummy_warrior2b.as new file mode 100644 index 00000000..01f3c875 --- /dev/null +++ b/scripts/angelscript/deraliasewers/mummy_warrior2b.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyWarrior2b : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + string ATTACK_TYPE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int DMG_FIRE_DOT; + int DMG_STEELPIPE; + int MUMMY_STARTING_LIVES; + int NPC_GIVE_EXP; + + MummyWarrior2b() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk2"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "steelpipe"; + ATTACK_TYPE = "melee"; + DMG_STEELPIPE = 200; + MUMMY_STARTING_LIVES = 1; + ATTACK_HITCHANCE = 90; + DMG_FIRE_DOT = 50; + NPC_GIVE_EXP = 3500; + } + + void mummy_spawn() + { + SetName("Mummified Flameguard"); + SetHealth(9000); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("fire", 0.25); + SetDamageResistance("cold", 1.25); + SetModelBody(0, 1); + SetModelBody(1, 3); + SetModelBody(2, 5); + SetModelBody(3, 0); + SetMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + SetAnimFrameRate(1.5); + BASE_FRAMERATE = 1.5; + } + + void steelpipe_dodamage() + { + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DMG_FIRE_DOT); + } + +} + +} diff --git a/scripts/angelscript/desert_temple/orc_chatter1.as b/scripts/angelscript/desert_temple/orc_chatter1.as new file mode 100644 index 00000000..252c3bf3 --- /dev/null +++ b/scripts/angelscript/desert_temple/orc_chatter1.as @@ -0,0 +1,206 @@ +#pragma context server + +#include "monsters/orc_flayer.as" +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class OrcChatter1 : CGameScript +{ + int CHAT_AUTO_FACE; + int CHAT_NO_CLOSE_MOUTH; + int CHAT_USE_CONV_ANIMS; + int IN_COMBAT; + int NEXT_RESPONSE_INDEX; + string ORC_BUDDY_ID; + int TURNED_MCLIP_ON; + + OrcChatter1() + { + CHAT_USE_CONV_ANIMS = 0; + CHAT_NO_CLOSE_MOUTH = 1; + CHAT_AUTO_FACE = 0; + } + + void orc_spawn() + { + SetName("Blackhand Flayer"); + SetSayTextRange(1024); + SetName("orc_chatter1"); + SetRoam(false); + npcatk_suspend_ai(); + ScheduleDelayedEvent(1.0, "start_chat"); + } + + void start_chat() + { + if ((IN_COMBAT)) return; + NEXT_RESPONSE_INDEX = 1; + chat_now("This is insane... Rummaging through ruins so far inside Shadahar territory... What is Furux thinking!?", 5.0, "neigh", "request_response", "clear_que", "add_to_que"); + } + + void request_response() + { + if ((IN_COMBAT)) return; + if (ORC_BUDDY_ID == "ORC_BUDDY_ID") + { + ORC_BUDDY_ID = FindEntityByName("orc_chatter2"); + } + CallExternal(ORC_BUDDY_ID, "ext_do_chat_step"); + } + + void ext_do_chat_step() + { + if ((IN_COMBAT)) return; + RESPONSE_INDEX += 1; + if (RESPONSE_INDEX == 1) + { + chat_now("I still don't like it... Have you seen those guys he brought with him?", 4.5, "nod_yes", "request_response", "add_to_que"); + } + if (RESPONSE_INDEX == 2) + { + chat_now("Yeah... I'm sure this all has something to do with them.", 4.5, "nod_yes", "none", "add_to_que"); + chat_now("All this damn magic stuff creeps me out...", 3.0, "neigh", "request_response", "add_to_que"); + } + if (RESPONSE_INDEX == 3) + { + chat_now("By Torkalath, you are an idiot!", 3.0, "flinch", "request_response", "add_to_que"); + } + if (RESPONSE_INDEX == 4) + { + chat_now("*sigh* Alright... My back's getting sore just standing here like this anyways.", 3.0, "nod_yes", "start_wander", "add_to_que"); + } + } + + void start_wander() + { + if ((IN_COMBAT)) return; + PlayAnim("once", "break"); + SetRoam(true); + npcatk_resume_ai(); + SetHearingSensitivity(2); + npcatk_setmovedest(Vector3(2320, -688, -528), 32); + turn_mclip_on(); + } + + void do_chat3() + { + CallExternal(ORC_BUDDY_ID, "ext_start_chat"); + } + + void OnDamage(int damage) override + { + if ((IN_COMBAT)) return; + start_combat("game_damaged"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((IN_COMBAT)) return; + if (!(false)) return; + start_combat(); + if (ORC_BUDDY_ID == "ORC_BUDDY_ID") + { + ORC_BUDDY_ID = FindEntityByName("orc_chatter2"); + } + } + + void start_combat() + { + if ((IN_COMBAT)) return; + IN_COMBAT = 1; + chat_clear_que(); + string L_SAYTEXT_STR = ""; + ScheduleDelayedEvent(6.0, "start_combat2"); + ScheduleDelayedEvent(2.0, "turn_mclip_on"); + npcatk_resume_ai(); + SetHearingSensitivity(4); + if (param1 == "game_damaged") + { + npcatk_settarget(GetEntityIndex(m_hLastStruck)); + string L_SAYTEXT_STR = "Ow...! "; + } + else + { + if ((IsEntityAlive(param1))) + { + npcatk_settarget(GetEntityIndex(param1)); + } + else + { + npcatk_settarget(GetEntityIndex(m_hLastSeen)); + } + } + if (GetPlayerCount() > 1) + { + L_SAYTEXT_STR += "What the... Where'd these guys come from!?"; + } + else + { + L_SAYTEXT_STR += "What the... Where'd this guy come from!?"; + } + SayText(L_SAYTEXT_STR); + if (!(GetEntityProperty(ORC_BUDDY_ID, "scriptvar"))) + { + CallExternal(ORC_BUDDY_ID, "start_combat", m_hAttackTarget); + } + } + + void start_combat2() + { + if (!(GetPlayerCount() == 1)) return; + if (!(GetGender(m_hAttackTarget) == "female")) return; + SayText(I + " think *he* might be a *she*..."); + ScheduleDelayedEvent(2.0, "gender_gag"); + ScheduleDelayedEvent(4.0, "gender_gag2"); + ScheduleDelayedEvent(6.0, "gender_gag3"); + ScheduleDelayedEvent(8.0, "gender_gag4"); + ScheduleDelayedEvent(10.0, "gender_gag5"); + } + + void gender_gag() + { + if (!(IsEntityAlive(GetOwner()))) return; + CallExternal(ORC_BUDDY_ID, "ext_gender_gag1"); + } + + void gender_gag2() + { + if (!(IsEntityAlive(GetOwner()))) return; + SayText("The human women have bumps on their chests..."); + } + + void gender_gag3() + { + if (!(IsEntityAlive(GetOwner()))) return; + CallExternal(ORC_BUDDY_ID, "ext_gender_gag2"); + } + + void gender_gag4() + { + if (!(IsEntityAlive(GetOwner()))) return; + SayText(I + " m just saying..."); + } + + void gender_gag5() + { + if (!(IsEntityAlive(GetOwner()))) return; + CallExternal(ORC_BUDDY_ID, "ext_gender_gag3"); + } + + void turn_mclip_on() + { + if ((TURNED_MCLIP_ON)) return; + TURNED_MCLIP_ON = 1; + UseTrigger("mclip_toggle"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + turn_mclip_on(); + } + +} + +} diff --git a/scripts/angelscript/desert_temple/orc_chatter2.as b/scripts/angelscript/desert_temple/orc_chatter2.as new file mode 100644 index 00000000..7ab6ba9a --- /dev/null +++ b/scripts/angelscript/desert_temple/orc_chatter2.as @@ -0,0 +1,165 @@ +#pragma context server + +#include "helena/orcwarrior_hard.as" +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class OrcChatter2 : CGameScript +{ + int CHAT_AUTO_FACE; + int CHAT_NO_CLOSE_MOUTH; + int CHAT_USE_CONV_ANIMS; + int IN_COMBAT; + string ORC_BUDDY_ID; + + OrcChatter2() + { + CHAT_USE_CONV_ANIMS = 0; + CHAT_NO_CLOSE_MOUTH = 1; + CHAT_AUTO_FACE = 0; + } + + void orc_spawn() + { + SetName("Blackhand Warrior"); + SetSayTextRange(1024); + SetName("orc_chatter2"); + SetRoam(false); + SetHearingSensitivity(0); + npcatk_suspend_ai(); + } + + void start_combat() + { + if ((IN_COMBAT)) return; + IN_COMBAT = 1; + chat_clear_que(); + ScheduleDelayedEvent(3.0, "start_combat2"); + npcatk_resume_ai(); + SetHearingSensitivity(4); + if (param1 == "game_damaged") + { + npcatk_settarget(GetEntityIndex(m_hLastStruck)); + } + else + { + if ((IsEntityAlive(param1))) + { + npcatk_settarget(GetEntityIndex(param1)); + } + else + { + npcatk_settarget(GetEntityIndex(m_hLastSeen)); + } + } + if (!(GetEntityProperty(ORC_BUDDY_ID, "scriptvar"))) + { + CallExternal(ORC_BUDDY_ID, "start_combat", m_hAttackTarget); + } + } + + void ext_do_chat_step() + { + if ((IN_COMBAT)) return; + RESPONSE_INDEX += 1; + if (RESPONSE_INDEX == 1) + { + chat_now("Relax! We don't have to fight them - we just have to warn the others and get out through the tunnels.", 5.5, "neigh", "none", "add_to_que", "clear_que"); + chat_now("It's a maze down there, they'll never catch us!", 2.5, "neigh", "request_response", "add_to_que"); + } + if (RESPONSE_INDEX == 2) + { + chat_now("You mean those big guys with the red scales and fire in their eyes?", 4.5, "nod_yes", "request_response", "add_to_que"); + } + if (RESPONSE_INDEX == 3) + { + chat_now("I don't know... I think I'd look good in red!", 4.0, "nod_yes", "request_response", "add_to_que"); + } + if (RESPONSE_INDEX == 4) + { + chat_now("You worry too much my friend!", 2.5, "neigh", "none", "add_to_que"); + chat_now("But we should go check on the other side - there's way too many ways into this place.", 4.5, "none", "request_response", "add_to_que"); + } + } + + void request_response() + { + if ((IN_COMBAT)) return; + if (ORC_BUDDY_ID == "ORC_BUDDY_ID") + { + ORC_BUDDY_ID = FindEntityByName("orc_chatter1"); + } + CallExternal(ORC_BUDDY_ID, "ext_do_chat_step"); + if (RESPONSE_INDEX == 4) + { + start_wander(); + } + } + + void start_wander() + { + if ((IN_COMBAT)) return; + CallExternal(ORC_BUDDY_ID, "turn_mclip_on"); + SetRoam(true); + PlayAnim("once", "break"); + npcatk_resume_ai(); + SetHearingSensitivity(2); + npcatk_setmovedest(Vector3(2320, -688, -528), 32); + } + + void OnDamage(int damage) override + { + if ((IN_COMBAT)) return; + start_combat(); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((IN_COMBAT)) return; + if (!(false)) return; + start_combat(); + if (ORC_BUDDY_ID == "ORC_BUDDY_ID") + { + ORC_BUDDY_ID = FindEntityByName("orc_chatter1"); + } + } + + void start_combat2() + { + CallExternal(ORC_BUDDY_ID, "turn_mclip_on"); + if (GetPlayerCount() > 1) + { + SayText(I + " don t know, but we better make short work of them and warn the others!"); + } + else + { + SayText(I + " don t know, but we better make short work of him and warn the others!"); + } + EmitSound(GetOwner(), 0, "voices/orc/help.wav", 10); + } + + void ext_gender_gag1() + { + SayText("How can you tell!?"); + } + + void ext_gender_gag2() + { + SayText("That s... Nice... But maybe we ask her for a date AFTER we kill her!"); + } + + void ext_gender_gag3() + { + SayText("Just shut up and fight!"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(ORC_BUDDY_ID, "turn_mclip_on"); + } + +} + +} diff --git a/scripts/angelscript/desert_temple/thuldahr.as b/scripts/angelscript/desert_temple/thuldahr.as new file mode 100644 index 00000000..dfd87418 --- /dev/null +++ b/scripts/angelscript/desert_temple/thuldahr.as @@ -0,0 +1,185 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/sorc_base.as" + +namespace MS +{ + +class Thuldahr : CGameScript +{ + string ANIM_ATTACK; + string ANIM_KICK; + string ANIM_KNEEL; + string ANIM_SWING; + int ATTACH_IDX_AXE; + int CYCLES_ON; + int DMG_SWING; + int DMG_ZAP; + int DOT_ZAP; + float FREQ_KICK; + float FREQ_SPECIAL; + int KICK_ATTACK; + string NEXT_KICK; + int NO_STUCK_CHECKS; + int NPC_BATTLE_ALLY; + int NPC_FIGHTS_NPCS; + int NPC_NO_PLAYER_DMG; + int N_SPECIALS; + string REPULSE_TARGETS; + float SORC_LRESIST; + int SORC_NO_TELE; + float SORC_PRESIST; + string SOUND_DRAW_WEAPON; + string SOUND_SWING; + string SPECIAL_DURATION; + string ZAP_INDEXES; + string ZAP_TARGETS; + + Thuldahr() + { + NPC_NO_PLAYER_DMG = 1; + NPC_BATTLE_ALLY = 1; + NPC_FIGHTS_NPCS = 1; + ANIM_KNEEL = "kneel"; + ANIM_SWING = "gglowswing"; + ANIM_KICK = "kick"; + ANIM_ATTACK = "gglowswing"; + SORC_NO_TELE = 1; + SOUND_DRAW_WEAPON = "weapons/swords/sworddraw.wav"; + SOUND_SWING = "weapons/swinghuge.wav"; + ATTACH_IDX_AXE = 2; + FREQ_SPECIAL = Random(10.0, 20.0); + N_SPECIALS = 3; + FREQ_KICK = Random(10.0, 20.0); + DMG_SWING = 400; + DMG_ZAP = 300; + DOT_ZAP = 100; + SORC_LRESIST = 0.0; + SORC_PRESIST = 1.25; + } + + void game_precache() + { + Precache("weather/lightning.wav"); + } + + void orc_spawn() + { + SetModel("monsters/thuldahr.mdl"); + SetWidth(64); + SetHeight(128); + SetModelBody(2, 1); + SetName("Thuldahr"); + SetHealth(15000); + SetRace("human"); + SetDamageResistance("all", 0.5); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("poison", 1.2); + SetDamageResistance("acid", 1.5); + SetWidth(48); + SetHeight(128); + NO_STUCK_CHECKS = 1; + } + + void npc_targetsighted() + { + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + FREQ_SPECIAL("do_special"); + } + + void do_special() + { + int RND_SPECIAL = RandomInt(1, N_SPECIALS); + if (RND_SPECIAL == 1) + { + lstrikes_go(); + SPECIAL_DURATION = 5.0; + } + if (RND_SPECIAL == 2) + { + repulse_go(); + SPECIAL_DURATION = 5.0; + } + string SPECIAL_DELAY = FREQ_SPECIAL; + SPECIAL_DELAY += SPECIAL_DURATION; + SPECIAL_DELAY("do_special"); + } + + void lstrikes_go() + { + PlayAnim("critical", "warcry"); + npcatk_suspend_ai(); + ScheduleDelayedEvent(3.0, "npcatk_resume_ai"); + ZAP_TARGETS = FindEntitiesInSphere("enemy", 1024); + if (!(ZAP_TARGETS != "none")) return; + ZAP_INDEXES = ""; + string N_ZAP_TARGETS = GetTokenCount(ZAP_TARGETS, ";"); + for (int i = 0; i < N_ZAP_TARGETS; i++) + { + lstrikes_affect_targets(); + } + ClientEvent("new", "all", "effects/sfx_multi_lightning", ZAP_INDEXES); + } + + void lstrikes_affect_targets() + { + string CUR_TARG = GetToken(ZAP_TARGETS, i, ";"); + if (ZAP_INDEXES.length() > 0) ZAP_INDEXES += ";"; + ZAP_INDEXES += GetEntityIndex(CUR_TARG); + DoDamage(CUR_TARG, "direct", DMG_ZAP, 1.0, GetOwner()); + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_ZAP); + } + + void repulse_go() + { + PlayAnim("critical", "warcry"); + npcatk_suspend_ai(); + ScheduleDelayedEvent(3.0, "npcatk_resume_ai"); + ClientEvent("new", "all", "effects/sfx_shock_burst", GetEntityOrigin(GetOwner()), 256, 1, Vector3(255, 255, 0)); + REPULSE_TARGETS = FindEntitiesInSphere("enemy", 512); + if (!(REPULSE_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(REPULSE_TARGETS, ";"); i++) + { + repulse_affect_targets(); + } + } + + void repulse_affect_targets() + { + string CUR_TARG = GetToken(REPULSE_TARGETS, i, ";"); + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_ZAP); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 2000, 110))); + } + + void frame_swing() + { + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + string AXE_POS = GetEntityProperty(GetOwner(), "attachpos"); + XDoDamage(AXE_POS, 200, DMG_SWING, 0, GetOwner(), GetOwner(), "none", "slash"); + if (!(GetGameTime() > NEXT_KICK)) return; + ANIM_ATTACK = ANIM_KICK; + } + + void frame_kick_start() + { + baseorc_yell(); + } + + void frame_kick_land() + { + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + KICK_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, 1.0, "blunt"); + ANIM_ATTACK = ANIM_SWING; + NEXT_KICK = GetGameTime(); + NEXT_KICK += FREQ_KICK; + } + +} + +} diff --git a/scripts/angelscript/developer/devcmds.as b/scripts/angelscript/developer/devcmds.as new file mode 100644 index 00000000..8d5cae26 --- /dev/null +++ b/scripts/angelscript/developer/devcmds.as @@ -0,0 +1,264 @@ +#pragma context server + +namespace MS +{ + +class Devcmds : CGameScript +{ + void game_playercmd() + { + if (param1 == "dev_on") + { + if (param2 == "wargwable") + { + } + LogMessage("ent_currentplayer Developer Mode ON"); + SendInfoMsg("all", "DEVELOPER MODE Developer mode is on."); + SetGlobalVar("G_DEVELOPER_MODE", 1); + } + else + { + if (param1 == "dev_off") + { + if ((G_DEVELOPER_MODE)) + { + } + LogMessage("ent_currentplayer Developer Mode OFF"); + SendInfoMsg("all", "DEVELOPER MODE Developer mode is off."); + SetGlobalVar("G_DEVELOPER_MODE", 0); + } + } + } + + void dev_command() + { + if (("game.central")) return; + if (!(G_DEVELOPER_MODE)) return; + param1(param2, param3, param4, param5, param6, param7, param8); + } + + void mp3() + { + // TODO: playmp3 PARAM1 PARAM2 PARAM3 + } + + void tele() + { + string X_DEST = param1; + string Y_DEST = param2; + string Z_DEST = param3; + string L_STR = "Teleportion to:"; + LogMessage("ent_currentplayer " + L_STR); + SetEntityOrigin("ent_currentplayer", Vector3(X_DEST, Y_DEST, Z_DEST)); + } + + void teledest() + { + string L_ENT = FindEntityByName(param1); + if (((L_ENT !is null))) + { + SetEntityOrigin("ent_currentplayer", GetEntityOrigin(L_ENT)); + } + } + + void slayall() + { + string RACE_PARAMS = param1; + if ((RACE_PARAMS)) + { + LogMessage("ent_currentplayer Slaying Bad Guys"); + CallExternal("all", "npc_suicide", "only_bad"); + } + else + { + LogMessage("ent_currentplayer Slaying all"); + CallExternal("all", "npc_suicide"); + } + } + + void usetrig() + { + LogMessage("ent_currentplayer Fire map event: " + param1); + UseTrigger(param1); + } + + void dumpquest() + { + string L_QUEST = param1; + LogMessage("ent_currentplayer Quest " + L_QUEST + "is: " + GetPlayerQuestData("ent_currentplayer", L_QUEST)); + } + + void newnpc() + { + LogMessage("Got command newnpc"); + string SPAWN_POINT = GetEntityOrigin("ent_currentplayer"); + string MY_ANGLES = GetEntityAngles("ent_currentplayer"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 128, 0)); + SpawnNPC(param1, SPAWN_POINT, ScriptMode::Legacy); // params: param2, param3, param4, param5, param6, param7, param8 + } + + void newdyn() + { + LogMessage("ent_currentplayer Got command newdyn"); + string L_IDX = param1; + if ((L_IDX).findFirst("PARAM") == 0) + { + int L_IDX = 0; + } + string L_SCRIPT = GetToken(GetCvar("ms_dynamicnpc"), L_IDX, ";"); + newnpc(L_SCRIPT, param2, param3, param4, param5, param6, param7, param8); + } + + void newitem() + { + LogMessage("ent_currentplayer Got command newitem"); + string SPAWN_POINT = GetEntityOrigin("ent_currentplayer"); + string MY_ANGLES = GetEntityAngles("ent_currentplayer"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 64, 0)); + SpawnItem(param1, SPAWN_POINT); + } + + void eventtarg() + { + CallExternal(GetEntityProperty("ent_currentplayer", "target"), "PARAM1", param2, param3, param4, param5, param6, param7, param8); + } + + void eventme() + { + CallExternal("ent_currentplayer", "PARAM1", param2, param3, param4, param5, param6, param7, param8); + } + + void eventplayers() + { + CallExternal("players", "PARAM1", param2, param3, param4, param5, param6, param7, param8); + } + + void eventgm() + { + CallExternal(GAME_MASTER, "PARAM1", param2, param3, param4, param5, param6, param7, param8); + } + + void eventall() + { + CallExternal("all", "PARAM1", param2, param3, param4, param5, param6, param7, param8); + } + + void blamb() + { + int L_RADIUS = 300; + int L_DMG = 300; + string L_TYPE = "dark_effect"; + if ((param1).findFirst("PARAM") == 0) + { + string L_RADIUS = param1; + } + if ((param2).findFirst("PARAM") == 0) + { + string L_DMG = param2; + } + if ((param3).findFirst("PARAM") == 0) + { + string L_TYPE = param3; + } + LogMessage("ent_currentplayer Blamb! " + AOE: + L_RADIUS + DMG: + L_DMG + "Type: " + L_TYPE); + XDoDamage(GetEntityOrigin("ent_currentplayer"), L_RADIUS, L_DMG, 0, GetEntityIndex("ent_currentplayer"), GetEntityIndex("ent_currentplayer"), "none", L_TYPE, "none"); + } + + void setquest() + { + string L_QUEST = param1; + string L_DATA = param2; + LogMessage("ent_currentplayer Setting Quest: " + L_QUEST + "to " + L_DATA); + SetPlayerQuestData(GetEntityIndex("ent_currentplayer"), L_QUEST); + } + + void getquest() + { + string L_QUEST_DATA = GetPlayerQuestData("ent_currentplayer", param1); + LogMessage("ent_currentplayer " + L_QUEST_DATA); + } + + void setgold() + { + CallExternal("ent_currentplayer", "ext_setgold", param1); + } + + void addhp() + { + CallExternal("ent_currentplayer", "give_hp", param1); + } + + void addmp() + { + CallExternal("ent_currentplayer", "give_mp", param1); + } + + void rat() + { + LogMessage("ent_currentplayer Spawning Rat"); + string SPAWN_POINT = GetEntityOrigin("ent_currentplayer"); + string MY_ANGLES = GetEntityAngles("ent_currentplayer"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 128, 0)); + SpawnNPC("monsters/giantrat", SPAWN_POINT, ScriptMode::Legacy); + } + + void skele() + { + LogMessage("ent_currentplayer Spawning skele"); + string SPAWN_POINT = GetEntityOrigin("ent_currentplayer"); + string MY_ANGLES = GetEntityAngles("ent_currentplayer"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 128, 0)); + SpawnNPC("monsters/skeleton", SPAWN_POINT, ScriptMode::Legacy); + } + + void teleforward() + { + string DIST_FORWARD = param1; + LogMessage("ent_currentplayer Teleporting Forward " + DIST_FORWARD + " units"); + string MY_POS = GetEntityOrigin("ent_currentplayer"); + string MY_ANG = GetEntityProperty("ent_currentplayer", "viewangles"); + MY_POS += /* TODO: $relpos */ $relpos(MY_ANG, Vector3(0, DIST_FORWARD, 0)); + SetEntityOrigin("ent_currentplayer", MY_POS); + } + + void effectme() + { + LogMessage("ent_currentplayer Applying effect, " + param1 + " to self."); + ApplyEffect("ent_currentplayer", param1, param2, param3, param4, param5, param6); + } + + void effectmestack() + { + LogMessage("ent_currentplayer Applying stacking effect, " + param1 + " to self."); + ApplyEffect("ent_currentplayer", param1, param2, param3, param4, param5, param6); + } + + void effecttarg() + { + LogMessage("ent_currentplayer Applying effect, " + param1 + "to target, " + GetEntityName(GetEntityProperty("ent_currentplayer", "target"))); + ApplyEffect(GetEntityProperty("ent_currentplayer", "target"), param1, param2, param3, param4, param5, param6); + } + + void effecttargstack() + { + LogMessage("ent_currentplayer Applying effect, " + param1 + "to target, " + GetEntityName(GetEntityProperty("ent_currentplayer", "target"))); + ApplyEffect(GetEntityProperty("ent_currentplayer", "target"), param1, param2, param3, param4, param5, param6); + } + + void testdmg() + { + LogMessage("ent_currentplayer Damage mult for " + param1 + "is " + /* TODO: $get_takedmg */ $get_takedmg("ent_currentplayer", param1)); + } + + void throw() + { + CallExternal("ent_currentplayer", "ext_tossprojectile", "proj_fire_ball", "view", "none", 6000, 10, 0, "none"); + } + +} + +} diff --git a/scripts/angelscript/developer/effects/test_duration.as b/scripts/angelscript/developer/effects/test_duration.as new file mode 100644 index 00000000..742cd721 --- /dev/null +++ b/scripts/angelscript/developer/effects/test_duration.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class TestDuration : CGameScript +{ + string EFFECT_ID; + string EFFECT_SCRIPT; + float game.effect.movespeed; + + TestDuration() + { + EFFECT_ID = "test_duration"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + SendInfoMsg("all", "Duration: " + EFFECT_DURATION); + game.effect.movespeed = 0.01; + } + + void duration_ended() + { + SendInfoMsg("all", "game.time " + (EFFECT_STARTED + EFFECT_DURATION)); + } + + void effect_die() + { + SendInfoMsg("all", "Effect has been killed. DX"); + } + +} + +} diff --git a/scripts/angelscript/developer/game_master.as b/scripts/angelscript/developer/game_master.as new file mode 100644 index 00000000..63ec2d18 --- /dev/null +++ b/scripts/angelscript/developer/game_master.as @@ -0,0 +1,13 @@ +#pragma context server + +#include "helena/game_master.as" +#include "old_helena/game_master.as" + +namespace MS +{ + +class GameMaster : CGameScript +{ +} + +} diff --git a/scripts/angelscript/developer/npcs/mega_ice_wall.as b/scripts/angelscript/developer/npcs/mega_ice_wall.as new file mode 100644 index 00000000..6d156f49 --- /dev/null +++ b/scripts/angelscript/developer/npcs/mega_ice_wall.as @@ -0,0 +1,100 @@ +#pragma context server + +namespace MS +{ + +class MegaIceWall : CGameScript +{ + string ANIM_DEATH; + int CANT_TURN; + int CAN_ATTACK; + int CAN_HUNT; + + MegaIceWall() + { + Precache("blueflare1.spr"); + ANIM_DEATH = ""; + CAN_ATTACK = 0; + CAN_HUNT = 0; + CANT_TURN = 1; + } + + void OnSpawn() override + { + SetHealth(2999); + SetName("Mega Ice Wall"); + SetRoam(false); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetModel("misc/icewall.mdl"); + SetWidth(140); + SetHeight(170); + SetProp(GetOwner(), "scale", 2.5); + SetBloodType("none"); + SetRace("hated"); + SetTurnRate(0.01); + icewall_up(); + SetDamageResistance("all", 1.2); + SetDamageResistance("fire", 1.2); + SetDamageResistance("cold", 1.2); + SetDamageResistance("poison", 1.2); + SetDamageResistance("acid", 1.2); + SetDamageResistance("lightning", 1.2); + SetDamageResistance("holy", 1.2); + SetDamageResistance("blunt", 1.2); + SetDamageResistance("pierce", 1.2); + SetDamageResistance("slash", 1.2); + } + + void icewall_up() + { + PlayAnim("hold", "up"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ice_death_fx(); + } + + void ice_death() + { + DeleteEntity(GetOwner()); + ice_death_fx(); + } + + void ice_death_fx() + { + SetCallback("touch", "disable"); + Effect("tempent", "trail", "blueflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 32), 2, 0.1, 3, 30, 0); + Effect("tempent", "trail", "blueflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 32), /* TODO: $relpos */ $relpos(0, 0, 64), 2, 0.1, 3, 30, 0); + Effect("tempent", "trail", "blueflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 64), /* TODO: $relpos */ $relpos(0, 0, 96), 5, 0.1, 3, 30, 0); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "stun resist 33"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "stun_resist"; + float reg.mitem.data = 0.66; + string reg.mitem.title = "stun resist 66"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "stun_resist"; + float reg.mitem.data = 0.33; + string reg.mitem.title = "stun resist 100"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "stun_resist"; + int reg.mitem.data = 0; + string reg.mitem.title = "Die"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "ice_death"; + } + + void stun_resist() + { + SetDamageResistance("stun", param2); + SendInfoMsg("all", "Stun takedmg " + /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "stun")); + } + +} + +} diff --git a/scripts/angelscript/developer/player/externals.as b/scripts/angelscript/developer/player/externals.as new file mode 100644 index 00000000..c22005aa --- /dev/null +++ b/scripts/angelscript/developer/player/externals.as @@ -0,0 +1,76 @@ +#pragma context server + +namespace MS +{ + +class Externals : CGameScript +{ + void ext_setstat() + { + LogMessage("ent_me Stat " + param1 + "set to " + param2); + SetStat("PARAM1", param2); + } + + void ext_fullstats() + { + SetStat("swordsmanship.proficiency", 45); + SetStat("swordsmanship.balance", 45); + SetStat("swordsmanship.power", 45); + SetStat("martialarts.proficiency", 45); + SetStat("martialarts.balance", 45); + SetStat("martialarts.power", 45); + SetStat("smallarms.proficiency", 45); + SetStat("smallarms.balance", 45); + SetStat("smallarms.power", 45); + SetStat("axehandling.proficiency", 45); + SetStat("axehandling.balance", 45); + SetStat("axehandling.power", 45); + SetStat("bluntarms.proficiency", 45); + SetStat("bluntarms.balance", 45); + SetStat("bluntarms.power", 45); + SetStat("archery.proficiency", 45); + SetStat("archery.balance", 45); + SetStat("archery.power", 45); + SetStat("spellcasting.fire", 45); + SetStat("spellcasting.ice", 45); + SetStat("spellcasting.lightning", 45); + SetStat("spellcasting.divination", 45); + SetStat("spellcasting.affliction", 45); + SetStat("polearms.proficiency", 45); + SetStat("polearms.balance", 45); + SetStat("polearms.power", 45); + } + + void ext_setstats() + { + SetStat("swordsmanship.proficiency", param1); + SetStat("swordsmanship.balance", param1); + SetStat("swordsmanship.power", param1); + SetStat("martialarts.proficiency", param1); + SetStat("martialarts.balance", param1); + SetStat("martialarts.power", param1); + SetStat("smallarms.proficiency", param1); + SetStat("smallarms.balance", param1); + SetStat("smallarms.power", param1); + SetStat("axehandling.proficiency", param1); + SetStat("axehandling.balance", param1); + SetStat("axehandling.power", param1); + SetStat("bluntarms.proficiency", param1); + SetStat("bluntarms.balance", param1); + SetStat("bluntarms.power", param1); + SetStat("archery.proficiency", param1); + SetStat("archery.balance", param1); + SetStat("archery.power", param1); + SetStat("spellcasting.fire", param1); + SetStat("spellcasting.ice", param1); + SetStat("spellcasting.lightning", param1); + SetStat("spellcasting.divination", param1); + SetStat("spellcasting.affliction", param1); + SetStat("polearms.proficiency", param1); + SetStat("polearms.balance", param1); + SetStat("polearms.power", param1); + } + +} + +} diff --git a/scripts/angelscript/dq/dq_base_menus.as b/scripts/angelscript/dq/dq_base_menus.as new file mode 100644 index 00000000..88a94afa --- /dev/null +++ b/scripts/angelscript/dq/dq_base_menus.as @@ -0,0 +1,87 @@ +#pragma context server + +namespace MS +{ + +class DqBaseMenus : CGameScript +{ + void game_menu_getoptions() + { + string L_PLAYER_ID = param1; + if (QUEST_MODE == "waiting") + { + string reg.mitem.title = QUEST_WAITING_TEXT; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "quest_intro"; + } + if (QUEST_MODE == "asking") + { + string reg.mitem.title = QUEST_ASKING_TEXT; + string reg.mitem.type = "callback"; + string reg.mitem.data = L_PLAYER_ID; + string reg.mitem.callback = "quest_activate"; + } + if (QUEST_MODE == "active") + { + string L_QT = QUEST_ACTIVE_TEXT; + if ((QUEST_ACTIVE_TEXT).findFirst("%n") >= 0) + { + string L_QT = "func_replace_string"(L_QT, "%n", int(QITEMS_FOUND)); + } + if ((QUEST_ACTIVE_TEXT).findFirst("%r") >= 0) + { + string L_QT = "func_replace_string"(L_QT, "%r", int(QITEM_ORIGIN_AMT)); + } + string reg.mitem.title = L_QT; + string reg.mitem.type = "disabled"; + } + if (!(QUEST_REWARD_ALL)) + { + if (QUEST_MODE == "complete") + { + if (!(QUEST_REWARD_TAKEN)) + { + build_quest_complete_menu(L_PLAYER_ID); + } + } + } + else + { + if (QUEST_MODE == "complete") + { + if ((A_QUEST_PARTICIPANTS[int("exists")])) + { + if (ArrayFind(A_QUEST_PARTICIPANTS, L_PLAYER_ID, 0) != -1) + { + build_quest_complete_menu(L_PLAYER_ID); + } + } + } + } + } + + void build_quest_complete_menu() + { + string L_PLAYER_ID = param1; + string reg.mitem.title = QUEST_COMPLETE_TEXT; + string reg.mitem.type = "callback"; + string reg.mitem.data = L_PLAYER_ID; + string reg.mitem.callback = "quest_complete"; + } + + void func_replace_string() + { + string L_STRING = param1; + string L_SEARCH = param2; + string L_REPLACE = param3; + string L_STRING1 = /* TODO: $string_upto */ $string_upto(L_STRING, L_SEARCH); + string L_STRING2 = /* TODO: $string_from */ $string_from(L_STRING, L_SEARCH); + L_STRING1 += L_REPLACE; + string L_STRING_OUT = L_STRING1; + L_STRING_OUT += L_STRING2; + return; + } + +} + +} diff --git a/scripts/angelscript/dq/externals/dq_adjust_damage.as b/scripts/angelscript/dq/externals/dq_adjust_damage.as new file mode 100644 index 00000000..5139c285 --- /dev/null +++ b/scripts/angelscript/dq/externals/dq_adjust_damage.as @@ -0,0 +1,39 @@ +#pragma context server + +namespace MS +{ + +class DqAdjustDamage : CGameScript +{ + float DAMAGE_MULTIPLIER; + string DQ_WHERE_IS_THE_CREATOR; + string MAX_DMG; + + DqAdjustDamage() + { + DAMAGE_MULTIPLIER = 0.5; + DQ_WHERE_IS_THE_CREATOR = GetEntityIndex("ent_creationowner"); + MAX_DMG = (GetEntityProperty(DQ_WHERE_IS_THE_CREATOR, "scriptvar") * DAMAGE_MULTIPLIER); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (MAX_DMG != "MAX_DMG") + { + string L_TARGET = param1; + string L_DMG = param2; + string L_DMG_TYPE = param3; + if ((IsValidPlayer(L_TARGET))) + { + if (L_DMG > MAX_DMG) + { + SetDamage("dmg"); + ReturnData((MAX_DMG / L_DMG)); + } + } + } + } + +} + +} diff --git a/scripts/angelscript/dq/externals/dq_apply_callback_on_death.as b/scripts/angelscript/dq/externals/dq_apply_callback_on_death.as new file mode 100644 index 00000000..c49251eb --- /dev/null +++ b/scripts/angelscript/dq/externals/dq_apply_callback_on_death.as @@ -0,0 +1,22 @@ +#pragma context server + +namespace MS +{ + +class DqApplyCallbackOnDeath : CGameScript +{ + string DQ_WHERE_IS_THE_CREATOR; + + void game_activate() + { + DQ_WHERE_IS_THE_CREATOR = param1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(DQ_WHERE_IS_THE_CREATOR, "ext_effected_monster_killed"); + } + +} + +} diff --git a/scripts/angelscript/dq/externals/dq_game_master.as b/scripts/angelscript/dq/externals/dq_game_master.as new file mode 100644 index 00000000..0d77e544 --- /dev/null +++ b/scripts/angelscript/dq/externals/dq_game_master.as @@ -0,0 +1,53 @@ +#pragma context server + +namespace MS +{ + +class DqGameMaster : CGameScript +{ + int DQ_DEATH_CALLBACK_ARRAY_CREATED; + string DQ_MONSTER_KILLED_NAME; + string DQ_MONSTER_KILLED_ORIGIN; + + DqGameMaster() + { + DQ_DEATH_CALLBACK_ARRAY_CREATED = 0; + } + + void gm_dq_add_counter() + { + if (!(DQ_DEATH_CALLBACK_ARRAY_CREATED)) + { + DQ_DEATH_CALLBACK_ARRAY_CREATED = 1; + array DQ_DEATH_CALLBACK_IDS; + } + DQ_DEATH_CALLBACK_IDS.insertLast(param1); + } + + void gm_dq_perish_counter() + { + string L_DEL_IDX = ArrayFind(DQ_DEATH_CALLBACK_IDS, param1, 0); + if (L_DEL_IDX != -1) + { + DQ_DEATH_CALLBACK_IDS.removeAt(L_DEL_IDX); + } + } + + void gm_dq_add_death() + { + DQ_MONSTER_KILLED_NAME = param1; + DQ_MONSTER_KILLED_ORIGIN = param2; + for (int i = 0; i < int(DQ_DEATH_CALLBACK_IDS.length()); i++) + { + gm_dq_monster_death_callbacks(); + } + } + + void gm_dq_monster_death_callbacks() + { + CallExternal(DQ_DEATH_CALLBACK_IDS[int(i)], "ext_quest_monster_killed"); + } + +} + +} diff --git a/scripts/angelscript/dq/externals/dq_monster_externals.as b/scripts/angelscript/dq/externals/dq_monster_externals.as new file mode 100644 index 00000000..060a4dd6 --- /dev/null +++ b/scripts/angelscript/dq/externals/dq_monster_externals.as @@ -0,0 +1,18 @@ +#pragma context server + +namespace MS +{ + +class DqMonsterExternals : CGameScript +{ + void OnDeath(CBaseEntity@ attacker) override + { + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + CallExternal(GAME_MASTER, "gm_dq_add_death", GetEntityName(GetOwner()), GetEntityOrigin(GetOwner())); + } + } + +} + +} diff --git a/scripts/angelscript/dq/findlebind.as b/scripts/angelscript/dq/findlebind.as new file mode 100644 index 00000000..6bac2a1f --- /dev/null +++ b/scripts/angelscript/dq/findlebind.as @@ -0,0 +1,552 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Findlebind : CGameScript +{ + string ANIM_DEAD; + string ANIM_DEATH_SPEECH; + string ANIM_DIEING; + int BEAR_DEAD; + float BRAP_DELAY; + int CANCHAT; + string FOUND_WORTHY; + int GAVE_JOB; + int I_R_DIEING; + string MENTIONED_PRIESTESS; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int QUEST2_AVAILABLE; + string QUEST_PLAYER; + string QUEST_WINNER; + int RECIEVED_CLAW; + int SAYSTEP_ELF; + string SOUND_COUGH; + string SOUND_DEATH; + string TARGET_PLAYER; + + Findlebind() + { + ANIM_DIEING = "c1a4_wounded_idle"; + ANIM_DEATH_SPEECH = "c1a4_dying_speech"; + ANIM_DEAD = "dead_sitting"; + SOUND_COUGH = "scientist/cough.wav"; + SOUND_DEATH = "scientist/sci_die1.wav"; + Precache(SOUND_DEATH); + BRAP_DELAY = 3.5; + NO_JOB = 1; + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetName("npc_findlebind"); + SetHealth(25); + SetGold(25); + SetName("Findlebind Goodheart"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/elf1.mdl"); + SetInvincible(true); + CANCHAT = 1; + SetHearingSensitivity(6); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_rumor", "door"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_priest", "priest"); + CatchSpeech("say_elf", "elves"); + } + + void resetchat() + { + CANCHAT = 1; + ScheduleDelayedEvent(10, "resetchat"); + } + + void say_hi() + { + if ((RECIEVED_CLAW)) return; + if (param1 == "PARAM1") + { + SetMoveDest(GetEntityOrigin("ent_lastspoke")); + } + PlayAnim("once", "converse1"); + SayText("Blessings to ye , adventurer! Would ye care to assist me with a bit of a problem?"); + Say("[.3] [.3] [.3] [.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/greeting.wav", 10); + BRAP_DELAY = 5.1; + ScheduleDelayedEvent(BRAP_DELAY, "say_hi2"); + } + + void say_hi2() + { + PlayAnim("once", "castspell"); + SayText("There's this large bear out there. I can't hardly go outside, and he's scared off all the good hunting!"); + Say("[.3] [.3] [.3] [.2] [.1] [.3]"); + UseTrigger("make_bear"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/theres_this_large_bear.wav", 10); + BRAP_DELAY = 5.7; + ScheduleDelayedEvent(BRAP_DELAY, "say_hi3"); + } + + void say_hi3() + { + PlayAnim("once", "fear1"); + SayText("Aye! " + A + "kodiak , believe it or not! Bring me proof of its death , and " + I + " shall reward ye!"); + Say("[.3] [.3] [.3] [.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/aye_a_kodiak.wav", 10); + GAVE_JOB = 1; + } + + void gave_claw() + { + QUEST_WINNER = param1; + RECIEVED_CLAW = 1; + NO_HAIL = 1; + PlayAnim("once", "pondering"); + SayText("Wow! You actually killed it! ...and here I feared you'd only keep its belly full..."); + Say("[.1] [.2] [.3] [.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/you_actually_killed_it.wav", 10); + BRAP_DELAY = 4.8; + BRAP_DELAY("gave_claw2"); + } + + void gave_claw2() + { + SayText("I suppose you've earned a reward for that..."); + Say("[.3] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/i_suppose_youve.wav", 10); + BRAP_DELAY = 2.6; + BRAP_DELAY("gave_claw3"); + } + + void gave_claw3() + { + SayText("Here... It's not as if I get to town often enough to spend this."); + Say("[.3] [.1] [.3] [.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/heres_a_reward.wav", 10); + BRAP_DELAY = 3.4; + BRAP_DELAY("offer_quest2"); + // TODO: offer QUEST_WINNER gold 50 + } + + void say_rumor() + { + if (param1 == "PARAM1") + { + SetMoveDest(GetEntityOrigin("ent_lastspoke")); + } + SayText("That mine door has been sealed , though it once lead to the ruins of Melanion , our ancient elven capital."); + PlayAnim("once", "lean"); + Say("[.3] [.1] [.3] [.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/that_mine_door_is_sealed.wav", 10); + BRAP_DELAY = 6.0; + BRAP_DELAY("say_door2"); + } + + void say_door2() + { + SayText("Kray Eldorad was later built upon its ruins... Those poor fools..."); + Say("[.3] [.1] [.3] [.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/kray_eldorad.wav", 10); + BRAP_DELAY = 4.1; + BRAP_DELAY("say_door3"); + } + + void say_door3() + { + PlayAnim("once", "panic"); + SayText("Beneath that veneer of elven paradise , lurk monsters that you cannot even imagine!"); + Say("[.3] [.1] [.3] [.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/beneath_that_veneer.wav", 10); + BRAP_DELAY = 6.0; + BRAP_DELAY("say_door4"); + } + + void say_door4() + { + SayText("That's why *I* live HERE! At least here, the horrors don't hide under your feet."); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/thats_why_i_live_here.wav", 10); + Say("[.3] [.1] [.3] [.2] [.1] [.3]"); + } + + void offer_quest2() + { + PlayAnim("once", "lean"); + SayText("I... Have another job you could do for me... But it won't be nearly so easy."); + Say("[.1] [.2] [.3] [.1] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/i_have_another_job.wav", 10); + BRAP_DELAY = 5.5; + QUEST2_AVAILABLE = 1; + } + + void say_job() + { + if (param1 == "PARAM1") + { + SetMoveDest(GetEntityOrigin("ent_lastspoke")); + } + if (!(QUEST2_AVAILABLE)) + { + SayText("That bear won't know what hit it, thanks!"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/that_bear_wont_know.wav", 10); + } + if (!(QUEST2_AVAILABLE)) return; + QUEST_PLAYER = param1; + if (QUEST_PLAYER == "PARAM1") + { + QUEST_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if ((ItemExists(QUEST_PLAYER, "key_red"))) + { + SayText("Ah , " + I + " see you have the key , now you just have to find his lair!"); + Say("[.3] [.1] [.3] [.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/ah_you_have_the_key.wav", 10); + BRAP_DELAY = 3.5; + BRAP_DELAY("say_lair2"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SayText("Well, there's this necromancer that's been causing all this pandemonium in these parts."); + Say("[.3] [.1] [.3] [.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/theres_this_necromancer.wav", 10); + BRAP_DELAY = 5.2; + BRAP_DELAY("say_job2"); + } + + void say_lair2() + { + SayText("There's a sinister door, up to the north, I'm not sure, but that maybe it."); + Say("[.1] [.2] [.3] [.1] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/the_sinister_looking_door.wav", 10); + } + + void say_job2() + { + SayText("Rather, it's his apprentice that does all the dirty work, Lord of Snakes... Slithar, I believe."); + Say("[.1] [.2] [.3] [.1] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/rather_its_his_apprentice.wav", 10); + BRAP_DELAY = 6.5; + BRAP_DELAY("say_job3"); + } + + void say_job3() + { + SayText("Bring me proof that he has been slain, and I'll grant you something a lot better than pocket change."); + Say("[.3] [.1] [.3] [.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/bring_me_proof.wav", 10); + BRAP_DELAY = 5.2; + BRAP_DELAY("say_job4"); + } + + void say_job4() + { + if (QUEST_PLAYER == "PARAM1") + { + QUEST_PLAYER = GetEntityIndex("ent_lastspoke"); + } + if (GetEntityMaxHealth(QUEST_PLAYER) >= 200) + { + PlayAnim("once", "give_shot"); + UseTrigger("key_chest"); + MENTIONED_PRIESTESS = 1; + SayText(I + " once had a key that , if what the [priestess] said was true , would get you into his lair."); + Say("[.1] [.2] [.3] [.1] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/i_once_had_a_key.wav", 10); + BRAP_DELAY = 5.3; + BRAP_DELAY("say_key1"); + } + if (!(GetEntityMaxHealth(QUEST_PLAYER) < 200)) return; + PlayAnim("once", "no"); + SayText("I warn ye though, ye do not look nearly prepared for this, he'd very likely mean be the end of you."); + Say("[.1] [.2] [.3] [.1] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/player_underprepared.wav", 10); + BRAP_DELAY = 5.2; + BRAP_DELAY("say_job5"); + } + + void say_key1() + { + SayText("Sadly , " + I + "left it behind in a wardrobe , when " + I + " had to make a hasty move from the old village."); + Say("[.3] [.2] [.1] [.1] [.2] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/sadly_i_left_it_behind.wav", 10); + BRAP_DELAY = 4.7; + BRAP_DELAY("say_key3"); + } + + void say_key2() + { + SayText("Finding the key is nothing you can't handle, to be sure, after slaying that bear. But the Snake Lord..."); + Say("[.1] [.2] [.3] [.1] [.1] [.2]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/finding_the_key.wav", 10); + BRAP_DELAY = 6.2; + BRAP_DELAY("say_key3"); + } + + void say_key3() + { + SayText("He's turned all the people who were once there into his minions!"); + Say("[.1] [.2] [.3] [.1]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/he_turned_all_the_people.wav", 10); + BRAP_DELAY = 3.6; + BRAP_DELAY("say_key4"); + } + + void say_key4() + { + SayText("No matter... You may retain anything else you happen to find in that old dresser as well , should you find it of value."); + Say("[.1] [.2] [.3] [.1] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/no_matter_you_can.wav", 10); + } + + void say_job5() + { + PlayAnim("once", "retina"); + SayText("I think you should train some more first. I'll grant you the key to his lair when you appear ready."); + Say("[.1] [.2] [.3] [.1] [.1] [.3] [.1] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/player_underprepared2.wav", 10); + } + + void say_priest() + { + if (!(QUEST2_AVAILABLE)) return; + if (param1 == "PARAM1") + { + SetMoveDest(GetEntityOrigin("ent_lastspoke")); + } + PlayAnim("once", "yes"); + SayText(A + " priestess of Felewyn came here a few years back..."); + Say("[.1] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/a_priestess_of_felewyn.wav", 10); + BRAP_DELAY = 3.2; + BRAP_DELAY("say_priest2"); + } + + void say_priest2() + { + SayText("She said she was too weak to defeat the Snake Lord and his master , but..."); + Say("[.2] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/she_said_she_was.wav", 10); + BRAP_DELAY = 4.2; + BRAP_DELAY("say_priest3"); + } + + void say_priest3() + { + SayText("She also said that " + I + "should give that red key to anyone " + I + " thought strong enough to try."); + Say("[.1] [.1] [.3] [.1] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/she_said_i_should_give.wav", 10); + } + + void slithar_died() + { + SetMenuAutoOpen(0); + I_R_DIEING = 1; + NO_RUMOR = 1; + NO_JOB = 1; + NO_HAIL = 1; + SetIdleAnim(ANIM_DIEING); + SetMoveAnim(ANIM_DIEING); + PlayAnim("once", ANIM_DIEING); + ScheduleDelayedEvent(0.1, "scan_for_worthy"); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((I_R_DIEING)) + { + if (!(FOUND_WORTHY)) + { + } + if (GetEntityRange("ent_lastheard") < 256) + { + } + if ((IsValidPlayer("ent_lastheard"))) + { + } + TARGET_PLAYER = GetEntityIndex("ent_lastheard"); + found_player(); + } + if ((I_R_DIEING)) return; + SetMoveDest(GetEntityOrigin("ent_lastheard")); + } + + void scan_for_worthy() + { + if ((FOUND_WORTHY)) return; + if (!(GetEntityRange(m_hLastSeen) < 256)) return; + if ((IsValidPlayer(m_hLastSeen))) + { + TARGET_PLAYER = GetEntityIndex(m_hLastSeen); + found_player(); + } + ScheduleDelayedEvent(0.2, "scan_for_worthy"); + } + + void found_player() + { + if (GetEntityMaxHealth(TARGET_PLAYER) >= 300) + { + EmitSound(GetOwner(), 0, SOUND_COUGH, 10); + PlayAnim("critical", ANIM_DEATH_SPEECH); + FOUND_WORTHY = 1; + UseTrigger("findlebind_died"); + SetSayTextRange(2048); + SayText("*cough* Good! " + I + " see you defeated the snake lord! *gasp*"); + Say("[.1] [.1] [.3]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/you_killed_the_snake_lord.wav", 10); + BRAP_DELAY = 6.8; + BRAP_DELAY("found_player2"); + } + } + + void found_player2() + { + SetSayTextRange(2048); + SayText("Sadly , his master did not take kindly to that. *cough*"); + Say("[.2] [.1] [.4]"); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/his_master_didnt_like_that.wav", 10); + BRAP_DELAY = 6.2; + BRAP_DELAY("found_player3"); + } + + void found_player3() + { + SetSayTextRange(2048); + SayText("He said , to give you... This..."); + Say("[.1] [.1] [.3] [.1] [.1] [.3] [.1] [.1] [.4]"); + SpawnItem("item_necro_note", /* TODO: $relpos */ $relpos(20, 40, 32)); + SpawnItem("key_green", /* TODO: $relpos */ $relpos(20, 40, 32)); + SetIdleAnim(ANIM_DEAD); + SetMoveAnim(ANIM_DEAD); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/he_told_me_to_give.wav", 10); + ScheduleDelayedEvent(8.0, "death_rattle"); + ScheduleDelayedEvent(15.0, "npc_fade_away"); + } + + void death_rattle() + { + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/death_rattle.wav", 10); + } + + void say_elf() + { + SAYSTEP_ELF = 0; + elf_joke(); + } + + void elf_joke() + { + if (param1 == "PARAM1") + { + SetMoveDest(GetEntityOrigin("ent_lastspoke")); + } + SAYSTEP_ELF += 1; + Say("[.1] [.2] [.3] [.2] [.2] [.3] [.2]"); + if (SAYSTEP_ELF == 1) + { + SayText("Yes, it is true, you don't see many of us these days."); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/you_dont_see_many_elves.wav", 10); + BRAP_DELAY = 3.6; + } + if (SAYSTEP_ELF == 2) + { + SayText("We've been hiding in this mess."); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/were_hiding_in_this_mess.wav", 10); + BRAP_DELAY = 3.0; + } + if (SAYSTEP_ELF == 3) + { + SayText("Bad magic , " + I + " say."); + EmitSound(GetOwner(), 0, "voices/bloodrose/findlebind/bad_magic_i_say.wav", 10); + BRAP_DELAY = 1.7; + } + if (SAYSTEP_ELF < 3) + { + BRAP_DELAY("elf_joke"); + } + else + { + SAYSTEP_ELF = 0; + } + } + + void game_menu_getoptions() + { + if ((I_R_DIEING)) return; + SetMoveDest(GetEntityOrigin(param1)); + if (!(RECIEVED_CLAW)) + { + if ((BEAR_DEAD)) + { + } + if ((ItemExists(param1, "item_bearclaw"))) + { + } + string reg.mitem.title = "Offer the Bear Claw"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_bearclaw"; + string reg.mitem.callback = "gave_claw"; + } + if (!(BEAR_DEAD)) + { + if (!(QUEST2_AVAILABLE)) + { + } + if ((GAVE_JOB)) + { + string reg.mitem.title = "Jobs"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + } + } + if ((QUEST2_AVAILABLE)) + { + if ((ItemExists(QUEST_PLAYER, "key_red"))) + { + int L_HAS_KEY = 1; + } + if ((ItemExists(param1, "key_red"))) + { + int L_HAS_KEY = 1; + } + if (!(L_HAS_KEY)) + { + string reg.mitem.title = "Another job?"; + } + else + { + string reg.mitem.title = "Where is Slithar?"; + } + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + if ((MENTIONED_PRIESTESS)) + { + } + string reg.mitem.title = "A preistess?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_priest"; + } + string reg.mitem.title = "What's that large gate?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_rumor"; + string reg.mitem.title = "You're an elf!"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "elf_joke"; + } + + void da_bear_died() + { + BEAR_DEAD = 1; + } + +} + +} diff --git a/scripts/angelscript/dq/murmur.as b/scripts/angelscript/dq/murmur.as new file mode 100644 index 00000000..cabd89c2 --- /dev/null +++ b/scripts/angelscript/dq/murmur.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "monsters/bear_base_giant.as" + +namespace MS +{ + +class Murmur : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_NORMAL_DAMAGE; + float ATTACK_STANDING_DAMAGE; + int ATTACK_STOMPDMG; + int ATTACK_STOMPRANGE; + int NPC_GIVE_EXP; + + Murmur() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ATTACK_NORMAL_DAMAGE = 40; + ATTACK_STANDING_DAMAGE = Random(28, 30); + ATTACK_STOMPRANGE = 250; + ATTACK_STOMPDMG = 80; + ATTACK_HITCHANCE = 0.7; + NPC_GIVE_EXP = 110; + } + + void OnSpawn() override + { + SetHealth(1000); + SetName("Murmur"); + SetModelBody(0, 1); + } + +} + +} diff --git a/scripts/angelscript/dq/quest_dwarf.as b/scripts/angelscript/dq/quest_dwarf.as new file mode 100644 index 00000000..f9ca874b --- /dev/null +++ b/scripts/angelscript/dq/quest_dwarf.as @@ -0,0 +1,313 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_battle_ally.as" +#include "monsters/base_chat_array.as" +#include "monsters/base_struck.as" +#include "NPCs/dwarf_lantern_base.as" + +namespace MS +{ + +class QuestDwarf : CGameScript +{ + int ALLY_FOLLOW_ON; + int ALLY_MOVE_AWAY_DIST; + string AM_SITTING; + string ANIM_ALLY_JUMP; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SIT_IDLE; + string ANIM_SIT_IDLE_CONVO1; + string ANIM_SIT_IDLE_CONVO2; + string ANIM_SIT_IDLE_NOLANTERN; + string ANIM_SIT_IDLE_WOUNDED; + string ANIM_WALK; + int ATTACK2_ACCURACY; + int ATTACK2_CHANCE; + int ATTACK2_DAMAGE; + float ATTACK2_DAMAGE_MULT; + int ATTACK_ACCURACY; + int ATTACK_DAMAGE; + float ATTACK_DAMAGE_MULT; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string CHAT_CONV_ANIMS; + string DWARF_COMVO_ANIMS; + string DWARF_CONVO_ANIMS; + int HEALTH_MULT; + string INIT_IDLE_MODE; + int NPC_BASE_EXP; + string NPC_MATERIAL_TYPE; + int NPC_NO_PLAYER_DMG; + int NPC_USE_FLINCH; + int NPC_USE_IDLE; + int NPC_USE_PAIN; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_ALLY_JUMP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3voices/dwarf/voices/dwarf/vs_nx0drogm_atk3.wav; + string SOUND_DEATH; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_FLINCH3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + + QuestDwarf() + { + CHAT_CONV_ANIMS = DWARF_CONVO_ANIMS; + ATTACK_DAMAGE_MULT = 0.05; + ATTACK2_DAMAGE_MULT = 0.15; + HEALTH_MULT = 2; + ALLY_FOLLOW_ON = 0; + ANIM_ALLY_JUMP = "anim_roll_back"; + SOUND_ALLY_JUMP = "voices/dwarf/vs_nx0drogm_hit2.wav"; + ALLY_MOVE_AWAY_DIST = 128; + NPC_MATERIAL_TYPE = "flesh"; + NPC_USE_PAIN = 1; + NPC_USE_IDLE = 0; + NPC_USE_FLINCH = 1; + SOUND_PAIN1 = "voices/dwarf/vs_ndwarfm1_hit1.wav"; + SOUND_PAIN2 = "voices/dwarf/vs_ndwarfm1_bat1.wav"; + SOUND_PAIN3 = "voices/dwarf/vs_ndwarfm1_hit3.wav"; + SOUND_FLINCH1 = "voices/dwarf/vs_nx0drogm_heal.wav"; + SOUND_FLINCH2 = "voices/dwarf/vs_nx0drogm_help.wav"; + SOUND_FLINCH3 = "voices/dwarf/vs_nx0drogm_hit1.wav"; + ANIM_FLINCH = "none"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "attack"; + NPC_BASE_EXP = 0; + NPC_NO_PLAYER_DMG = 1; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 100; + ATTACK_MOVERANGE = 48; + SOUND_DEATH = "voices/dwarf/vs_nx0drogm_hit3.wav"; + ATTACK_DAMAGE = 50; + ATTACK2_DAMAGE = 150; + ATTACK2_CHANCE = 30; + ATTACK_ACCURACY = 80; + ATTACK2_ACCURACY = 90; + SOUND_ALERT1 = "voices/dwarf/voices/dwarf/vs_nx0drogm_bat3.wav"; + SOUND_ALERT2 = "voices/dwarf/voices/dwarf/vs_nx0drogm_bat1.wav"; + SOUND_ALERT3 = "voices/dwarf/voices/dwarf/vs_ndwarfm1_bat3.wav"; + SOUND_ATTACK1 = "voices/dwarf/voices/dwarf/vs_nx0drogm_atk1.wav"; + SOUND_ATTACK2 = "voices/dwarf/voices/dwarf/vs_nx0drogm_atk2.wav"; + SOUND_ATTACK3voices/dwarf/voices/dwarf/vs_nx0drogm_atk3.wav = ""; + ANIM_SIT_IDLE = "anim_sit_idle_lantern"; + ANIM_SIT_IDLE_NOLANTERN = "anim_sit_idle_nolantern"; + ANIM_SIT_IDLE_WOUNDED = "anim_sit_wounded"; + ANIM_SIT_IDLE_CONVO1 = "anim_convo1"; + ANIM_SIT_IDLE_CONVO2 = "anim_convo2"; + } + + void OnSpawn() override + { + dwarf_spawn(); + } + + void dwarf_spawn() + { + SetName("Dwarven Miner"); + SetModel("dwarf/male1.mdl"); + SetWidth(32); + SetHeight(48); + SetRoam(true); + SetHealth(1000); + SetHearingSensitivity(8); + if ((USE_LANTERN)) + { + set_lantern(LANTERN_COLOR); + } + if (!(NEW_RACE)) + { + SetRace("human"); + } + init_idle_anims(); + } + + void init_idle_anims() + { + if (INIT_IDLE_MODE == "INIT_IDLE_MODE") + { + if (QUEST_COMBATANT == 0) + { + INIT_IDLE_MODE = "wounded"; + } + else + { + if (QUEST_COMBATANT == 1) + { + INIT_IDLE_MODE = "sitting"; + } + else + { + INIT_IDLE_MODE = "wounded"; + } + } + } + if (INIT_IDLE_MODE == "sitting") + { + if ((USE_LANTERN)) + { + SetIdleAnim(ANIM_SIT_IDLE); + } + else + { + SetIdleAnim(ANIM_SIT_IDLE_NOLANTERN); + } + AM_SITTING = 1; + } + else + { + if (INIT_IDLE_MODE == "wounded") + { + SetIdleAnim(ANIM_SIT_IDLE_WOUNDED); + AM_SITTING = 1; + } + else + { + if (INIT_IDLE_MODE == "standing") + { + SetIdleAnim(ANIM_IDLE); + AM_SITTING = 0; + } + } + } + if ((AM_SITTING)) + { + ANIM_FLINCH = "none"; + DWARF_CONVO_ANIMS = "anim_sit_convo1;anim_sit_convo2"; + } + else + { + ANIM_FLINCH = "anim_xbow_flinch"; + DWARF_COMVO_ANIMS = "anim_convo1;anim_convo2"; + } + } + + void attack_1() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, "slash"); + if ((QUEST_EXPERT_COMBATANT)) + { + if (RandomInt(1, 100) < ATTACK2_CHANCE) + { + ANIM_ATTACK = "attack2"; + } + } + } + + void attack_2() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK2_DAMAGE, ATTACK2_ACCURACY, "slash"); + ANIM_ATTACK = "attack"; + if (GetEntityRange(m_hLastStruckByMe) <= ATTACK_HITRANGE) + { + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/debuff_stun", RandomInt(2, 8), GetEntityIndex(GetOwner())); + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/effect_push", 2, /* TODO: $relvel */ $relvel(10, -200, 10), 0); + } + } + + void set_leader() + { + if (param1 != 0) + { + SetMoveSpeed(2.5); + SetAnimMoveSpeed(2.5); + } + else + { + SetMoveSpeed(1.0); + SetAnimMoveSpeed(1.0); + } + } + + void OnDamage(int damage) override + { + if (!(AM_SITTING)) + { + if (!(NPC_IS_TURRET)) + { + if (GetGameTime() > NEXT_DZOMB_FLEE) + { + NEXT_DZOMB_FLEE = GetGameTime(); + NEXT_DZOMB_FLEE += Random(5, 10); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + // svplaysound: svplaysound 2 10 SOUND_PAIN1 + EmitSound(2, 10, SOUND_PAIN1); + PlayAnim("critical", ANIM_DODGE); + int L_ROLL_DIR = -200; + if ((AM_FLEEING)) + { + int L_ROLL_DIR = 200; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(50, L_ROLL_DIR, 100)); + } + } + } + } + + void frame_roll_back_push() + { + int L_ROLL_DIR = -100; + if ((AM_FLEEING)) + { + int L_ROLL_DIR = 100; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Random(-50, 50), L_ROLL_DIR, 100)); + } + + void quest_activate() + { + if (QUEST_COMBATANT == 1) + { + INIT_IDLE_MODE = "standing"; + init_idle_anims(); + } + else + { + if (QUEST_ACTIVE_COMBATANT == 1) + { + INIT_IDLE_MODE = "standing"; + init_idle_anims(); + } + else + { + if (QUEST_FOLLOWER == 1) + { + INIT_IDLE_MODE = "standing"; + init_idle_anims(); + } + else + { + if (IS_LEADER == 1) + { + INIT_IDLE_MODE = "standing"; + init_idle_anims(); + } + } + } + } + string L_SET_HEALTH = ("game.players.avghp" * HEALTH_MULT); + ext_set_health(L_SET_HEALTH, L_SET_HEALTH); + } + +} + +} diff --git a/scripts/angelscript/dq/quests/bases/dq_base_quests.as b/scripts/angelscript/dq/quests/bases/dq_base_quests.as new file mode 100644 index 00000000..e6e0c8d3 --- /dev/null +++ b/scripts/angelscript/dq/quests/bases/dq_base_quests.as @@ -0,0 +1,300 @@ +#pragma context server + +namespace MS +{ + +class DqBaseQuests : CGameScript +{ + int ALLY_FOLLOW_ON; + string NO_STUCK_CHECKS; + string NPCATK_TARGET; + string OFFER_MENU_ID; + string PLAYING_DEAD; + string QUEST_ACTIVE; + string QUEST_ASKING; + string QUEST_COMPLETE; + int QUEST_CURRENTLY_COMBATING; + string QUEST_FAILED; + string QUEST_MODE; + string QUEST_TAKER; + string QUEST_TAKER_MAXHP; + string QUEST_WAITING; + int USING_BASE_QUEST; + + DqBaseQuests() + { + USING_BASE_QUEST = 1; + QUEST_WAITING = "waiting"; + QUEST_ASKING = "asking"; + QUEST_ACTIVE = "active"; + QUEST_COMPLETE = "complete"; + QUEST_FAILED = "failed"; + QUEST_MODE = QUEST_WAITING; + ALLY_FOLLOW_ON = 0; + QUEST_CURRENTLY_COMBATING = 0; + } + + void OnSpawn() override + { + ScheduleDelayedEvent(1.1, "init_basic_npc_vars"); + } + + void quest_intro_check() + { + if (QUEST_MODE == QUEST_WAITING) + { + quest_intro(); + OFFER_MENU_ID = param1; + ScheduleDelayedEvent(0.1, "offer_menu"); + } + } + + void quest_intro() + { + QUEST_MODE = QUEST_ASKING; + } + + void quest_activate_check() + { + if (QUEST_MODE == QUEST_ASKING) + { + quest_activate(param1); + } + } + + void quest_activate() + { + string L_PLAYER = param1; + QUEST_TAKER = L_PLAYER; + quest_taker_updated(); + activate_vars(); + QUEST_MODE = QUEST_ACTIVE; + } + + void quest_finished_check() + { + if (QUEST_MODE == QUEST_ACTIVE) + { + quest_finished(); + } + } + + void quest_finished() + { + init_post_spawn_vars(); + disable_vars(); + QUEST_MODE = QUEST_COMPLETE; + inform_quest_finished(); + } + + void inform_quest_finished() + { + string L_STRING = "Please return to "; + L_STRING += GetEntityProperty(GetOwner(), "name.full"); + SendInfoMsg("all", "Quest Complete " + L_STRING); + } + + void OnDeath(CBaseEntity@ attacker) override + { + QUEST_MODE = QUEST_FAILED; + } + + void game_menu_getoptions() + { + if (QUEST_MODE != QUEST_WAITING) + { + if (QUEST_MODE != QUEST_ASKING) + { + if (!((QUEST_TAKER !is null))) + { + QUEST_TAKER = param1; + quest_taker_updated(); + } + } + } + } + + void quest_taker_updated() + { + QUEST_TAKER_MAXHP = GetEntityMaxHealth(QUEST_TAKER); + quest_taker_maxhp_updated(); + if (QUEST_MODE != QUEST_COMPLETE) + { + if ((QUEST_FOLLOWER)) + { + ALLY_FOLLOW_PLR_ID = QUEST_TAKER; + } + } + } + + void init_basic_npc_vars() + { + SetName(QUEST_GIVER_NAME); + SetWidth(NEW_WIDTH); + SetHeight(NEW_HEIGHT); + SetSolid("box"); + if (MONSTER_MODEL != "0") + { + SetModel(MONSTER_MODEL); + } + SetModelBody(0, GetToken(SUBMODEL_GROUPS, 0, ";")); + if (GetTokenCount(SUBMODEL_GROUPS, ";") >= 2) + { + SetModelBody(1, GetToken(SUBMODEL_GROUPS, 1, ";")); + } + if (GetTokenCount(SUBMODEL_GROUPS, ";") >= 3) + { + SetModelBody(2, GetToken(SUBMODEL_GROUPS, 2, ";")); + } + if (GetTokenCount(SUBMODEL_GROUPS, ";") >= 4) + { + SetModelBody(3, GetToken(SUBMODEL_GROUPS, 3, ";")); + } + SetProp(GetOwner(), "skin", USE_SKIN); + init_post_spawn_vars(); + } + + void init_post_spawn_vars() + { + SetRace(NEW_RACE); + SetInvincible(AM_INVINCIBLE); + if ((AM_INVINCIBLE)) + { + do_target_me(0); + } + QUEST_CURRENTLY_COMBATING = QUEST_ACTIVE_COMBATANT; + if ((QUEST_CURRENTLY_COMBATING)) + { + do_roam(1); + } + else + { + do_roam(0); + } + } + + void activate_vars() + { + if (SET_SIEGE_MODE == 1) + { + critical_npc(); + do_target_me(1); + } + if (QUEST_COMBATANT == 1) + { + QUEST_CURRENTLY_COMBATING = 1; + do_roam(1); + do_target_me(1); + } + if (QUEST_FOLLOWER == 1) + { + set_follower(1); + do_roam(1); + } + if (IS_LEADER == 1) + { + set_leader(1); + do_roam(1); + } + } + + void disable_vars() + { + int L_STOP_ROAM = 0; + if (IS_LEADER == 1) + { + set_leader(0); + int L_STOP_ROAM = 1; + } + if (QUEST_FOLLOWER == 1) + { + ALLY_FOLLOW_ON = 0; + int L_STOP_ROAM = 1; + } + if (QUEST_COMBATANT == 1) + { + if (QUEST_ACTIVE_COMBATANT == 0) + { + QUEST_CURRENTLY_COMBATING = 0; + int L_STOP_ROAM = 1; + } + } + if (L_STOP_ROAM == 1) + { + npcatk_clear_targets(); + do_roam(0); + PlayAnim("critical", ANIM_IDLE); + } + } + + void npc_targetvalidate() + { + if (!(QUEST_CURRENTLY_COMBATING)) + { + NPCATK_TARGET = "unset"; + } + } + + void delete_fade_me() + { + if (QUEST_FADE_ON_COMPLETE == "fade") + { + do_delete_fade_bit(); + } + else + { + if (QUEST_FADE_ON_COMPLETE == "walk_fade") + { + SetMoveDest(GetOwner()); + do_roam(1); + ScheduleDelayedEvent(5.0, "do_delete_fade_bit"); + } + } + } + + void do_delete_fade_bit() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void do_roam() + { + if (param1 == 1) + { + SetRoam(true); + NO_STUCK_CHECKS = 0; + } + else + { + SetRoam(false); + NO_STUCK_CHECKS = 1; + } + } + + void do_target_me() + { + if (param1 == 0) + { + SetRace("beloved"); + PLAYING_DEAD = 1; + } + else + { + SetRace(NEW_RACE); + PLAYING_DEAD = 0; + } + } + + void game_dynamically_created() + { + SetAngles("face"); + } + + void offer_menu() + { + OpenMenu(OFFER_MENU_ID); + } + +} + +} diff --git a/scripts/angelscript/dq/quests/dq_defend_me.as b/scripts/angelscript/dq/quests/dq_defend_me.as new file mode 100644 index 00000000..c237e20f --- /dev/null +++ b/scripts/angelscript/dq/quests/dq_defend_me.as @@ -0,0 +1,163 @@ +#pragma context server + +#include "dq/quests/bases/dq_base_quests.as" + +namespace MS +{ + +class DqDefendMe : CGameScript +{ + string DQ_DEFEND_ME_DEFENSE_POINT; + int DQ_MONSTERS_AVAILABLE; + int DQ_MONSTERS_KILLED; + float DQ_MONSTER_HP_MULT; + string DQ_MONSTER_LIMIT; + string DQ_MONSTER_LIST; + float DQ_MONSTER_SPAWN_TIME; + float DQ_MONSTER_XP_MULT; + string DQ_SELF_ADJUST; + string DQ_SPAWN_POINTS; + string MONSTER_ORIGIN_AMT; + + DqDefendMe() + { + DQ_DEFEND_ME_DEFENSE_POINT = GetEntityOrigin(GetOwner()); + DQ_MONSTER_LIST = QUEST_DATA1; + DQ_MONSTER_LIMIT = GetToken(QUEST_DATA2, 0, ";"); + DQ_SELF_ADJUST = GetToken(QUEST_DATA2, 1, ";"); + DQ_SPAWN_POINTS = QUEST_DATA3; + DQ_MONSTER_HP_MULT = 0.5; + DQ_MONSTER_XP_MULT = 0.5; + DQ_MONSTER_SPAWN_TIME = 2.0; + DQ_MONSTERS_AVAILABLE = 5; + DQ_MONSTERS_KILLED = 0; + } + + void quest_activate() + { + DQ_MONSTER_SPAWN_TIME("populate_area"); + SetInvincible(false); + SetRace("human"); + if (DQ_SPAWN_POINTS != "random") + { + quest_begin_handle_origins(); + } + } + + void quest_begin_handle_origins() + { + array MONSTER_SPAWN_ORIGINS; + string L_INFO_TARGET_NAME = DQ_SPAWN_POINTS; + L_INFO_TARGET_NAME += "1"; + string L_INFO_TARGET_ID = FindEntityByName(L_INFO_TARGET_NAME); + if (((L_INFO_TARGET_ID !is null))) + { + quest_handle_info_targets(); + } + else + { + if ((DQ_SPAWN_POINTS).findFirst("(") == 0) + { + MONSTER_ORIGIN_AMT = GetTokenCount(DQ_SPAWN_POINTS, ";"); + for (int i = 0; i < MONSTER_ORIGIN_AMT; i++) + { + quest_handle_vectors(); + } + } + else + { + LogDebug("No proper origins were found, defend_me cannot spawn enemies!"); + } + } + } + + void quest_handle_info_targets() + { + string L_INFO_TARGET_NAME = DQ_SPAWN_POINTS; + string L_MONSTER_ORIGIN_AMT = MONSTER_ORIGIN_AMT; + int L_MONSTER_ORIGIN_AMT = int((L_MONSTER_ORIGIN_AMT + 1)); + L_INFO_TARGET_NAME += L_MONSTER_ORIGIN_AMT; + string L_INFO_TARGET_ID = FindEntityByName(L_INFO_TARGET_NAME); + if (((L_INFO_TARGET_ID !is null))) + { + MONSTER_SPAWN_ORIGINS.insertLast(GetEntityOrigin(L_INFO_TARGET_ID)); + MONSTER_ORIGIN_AMT = (MONSTER_ORIGIN_AMT + 1); + ScheduleDelayedEvent(0.1, "quest_handle_info_targets"); + } + } + + void quest_handle_vectors() + { + MONSTER_SPAWN_ORIGINS.insertLast(GetToken(DQ_SPAWN_POINTS, i, ";")); + } + + void populate_area() + { + if (QUEST_MODE == "active") + { + if (DQ_MONSTERS_AVAILABLE > 0) + { + if (DQ_SPAWN_POINTS == "random") + { + float L_R_DIST = Random(128, 256); + float L_R_YAW = Random(0, 359.99); + string L_POS = DQ_DEFEND_ME_DEFENSE_POINT; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_R_YAW, 0), Vector3(0, L_R_DIST, 0)); + } + else + { + int L_IDX = RandomInt(0, (int(MONSTER_SPAWN_ORIGINS.length()) - 1)); + string L_POS = MONSTER_SPAWN_ORIGINS[int(L_IDX)]; + } + int L_R_SCRIPT = RandomInt(0, (GetTokenCount(DQ_MONSTER_LIST, ";") - 1)); + SpawnNPC(GetToken(DQ_MONSTER_LIST, L_R_SCRIPT, ";"), L_POS, ScriptMode::Legacy); + EFFECT_ME = GetEntityIndex(m_hLastCreated); + if (DQ_SPAWN_POINTS == "random") + { + CallExternal(EFFECT_ME, "as_tele_stuck_check"); + } + ScheduleDelayedEvent(1.1, "dq_apply_externals"); + DQ_MONSTERS_AVAILABLE = (DQ_MONSTERS_AVAILABLE - 1); + } + if (CAN_POPULATE_AGAIN <= GetGameTime()) + { + CAN_POPULATE_AGAIN = (GetGameTime() + DQ_MONSTER_SPAWN_TIME); + DQ_MONSTER_SPAWN_TIME("populate_area"); + } + } + } + + void dq_apply_externals() + { + CallExternal(EFFECT_ME, "set_quest_miniboss", 1); + ApplyEffect(EFFECT_ME, "dq/externals/dq_apply_callback_on_death", GetEntityIndex(GetOwner())); + if ((DQ_SELF_ADJUST)) + { + ApplyEffect(EFFECT_ME, "dq/externals/dq_adjust_damage", GetEntityIndex(GetOwner())); + CallExternal(EFFECT_ME, "set_xp", (QUEST_TAKER_MAXHP * DQ_MONSTER_XP_MULT)); + string L_HEALTH = (QUEST_TAKER_MAXHP * DQ_MONSTER_HP_MULT); + CallExternal(EFFECT_ME, "ext_set_health", L_HEALTH, L_HEALTH); + } + } + + void ext_effected_monster_killed() + { + DQ_MONSTERS_KILLED = (DQ_MONSTERS_KILLED + 1); + DQ_MONSTERS_AVAILABLE = (DQ_MONSTERS_AVAILABLE + 1); + if (DQ_MONSTERS_KILLED >= DQ_MONSTER_LIMIT) + { + quest_finished_check(); + } + else + { + if (CAN_POPULATE_AGAIN < GetGameTime()) + { + CAN_POPULATE_AGAIN = (GetGameTime() + DQ_MONSTER_SPAWN_TIME); + DQ_MONSTER_SPAWN_TIME("populate_area"); + } + } + } + +} + +} diff --git a/scripts/angelscript/dq/quests/dq_escort_to.as b/scripts/angelscript/dq/quests/dq_escort_to.as new file mode 100644 index 00000000..cda3cb39 --- /dev/null +++ b/scripts/angelscript/dq/quests/dq_escort_to.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "dq/quests/bases/dq_base_quests.as" + +namespace MS +{ + +class DqEscortTo : CGameScript +{ + string DQ_ARRIVAL_POINT; + float DQ_CHECK_POS_INTERVAL; + + DqEscortTo() + { + DQ_ARRIVAL_POINT = QUEST_DATA1; + DQ_CHECK_POS_INTERVAL = 2.0; + } + + void quest_activate() + { + SetInvincible(false); + SetRace("human"); + handle_pos(); + check_pos(); + } + + void handle_pos() + { + string L_INFO_TARGET = FindEntityByName(DQ_ARRIVAL_POINT); + if (((L_INFO_TARGET !is null))) + { + DQ_ARRIVAL_POINT = GetEntityOrigin(L_INFO_TARGET); + } + } + + void check_pos() + { + if (QUEST_MODE == QUEST_ACTIVE) + { + if (Distance(GetEntityOrigin(GetOwner()), DQ_ARRIVAL_POINT) <= 128) + { + quest_finished(); + } + else + { + DQ_CHECK_POS_INTERVAL("check_pos"); + } + } + } + +} + +} diff --git a/scripts/angelscript/dq/quests/dq_fetch_drop.as b/scripts/angelscript/dq/quests/dq_fetch_drop.as new file mode 100644 index 00000000..00e84127 --- /dev/null +++ b/scripts/angelscript/dq/quests/dq_fetch_drop.as @@ -0,0 +1,99 @@ +#pragma context server + +#include "dq/quests/bases/dq_base_quests.as" + +namespace MS +{ + +class DqFetchDrop : CGameScript +{ + string DQ_FIND_NUM; + string DQ_KILL_WHO; + int QITEMS_DROPPED; + int QITEMS_FOUND; + string QITEM_CODE; + string QITEM_NAME; + + DqFetchDrop() + { + DQ_FIND_NUM = GetToken(QUEST_DATA1, 0, ";"); + DQ_KILL_WHO = StringToLower(GetToken(QUEST_DATA1, 1, ";")); + QITEM_CODE = GetToken(QUEST_DATA2, 0, ";"); + QITEM_NAME = GetToken(QUEST_DATA2, 1, ";"); + QITEMS_FOUND = 0; + QITEMS_DROPPED = 0; + } + + void game_precache() + { + Precache("other/qitem"); + } + + void quest_activate() + { + CallExternal(GAME_MASTER, "gm_dq_add_counter", GetEntityIndex(GetOwner())); + } + + void game_menu_getoptions() + { + string L_PLAYER_ID = param1; + if (QUEST_MODE == "active") + { + CallExternal(GAME_MASTER, "ext_check_quest_item", QITEM_CODE, GetEntityIndex(GetOwner())); + } + } + + void ext_quest_monster_killed() + { + if (QUEST_MODE == "active") + { + string L_MONSTER_KILLED_NAME = StringToLower(GetEntityProperty(GAME_MASTER, "scriptvar")); + if ((L_MONSTER_KILLED_NAME).findFirst(DQ_KILL_WHO) >= 0) + { + quest_create_qitem(); + } + else + { + if (DQ_KILL_WHO == "all") + { + quest_create_qitem(); + } + } + } + } + + void quest_create_qitem() + { + if (QITEMS_DROPPED >= DQ_FIND_NUM) + { + CallExternal(GAME_MASTER, "gm_dq_perish_counter", GetEntityIndex(GetOwner())); + } + else + { + string L_QITEM_ORIGIN = GetEntityProperty(GAME_MASTER, "scriptvar"); + SpawnNPC("other/qitem", L_QITEM_ORIGIN, ScriptMode::Legacy); // params: QITEM_CODE, QITEM_NAME + QITEMS_DROPPED = (QITEMS_DROPPED + 1); + } + } + + void ext_receive_quest_item() + { + if (QUEST_MODE == "active") + { + QITEMS_FOUND = (QITEMS_FOUND + 1); + if (QITEMS_FOUND >= DQ_FIND_NUM) + { + quest_finished(); + CallExternal(GAME_MASTER, "gm_dq_perish_counter", GetEntityIndex(GetOwner())); + } + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(GAME_MASTER, "gm_dq_perish_counter", GetEntityIndex(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/dq/quests/dq_fetch_items.as b/scripts/angelscript/dq/quests/dq_fetch_items.as new file mode 100644 index 00000000..07a57488 --- /dev/null +++ b/scripts/angelscript/dq/quests/dq_fetch_items.as @@ -0,0 +1,144 @@ +#pragma context server + +#include "dq/quests/bases/dq_base_quests.as" + +namespace MS +{ + +class DqFetchItems : CGameScript +{ + string INFO_TARGET_PREFIX; + string ITEM_DROP_MODE; + int QITEMS_FOUND; + string QITEM_CODE; + string QITEM_NAME; + int QITEM_ORIGIN_AMT; + + DqFetchItems() + { + INFO_TARGET_PREFIX = QUEST_DATA1; + QITEM_CODE = GetToken(QUEST_DATA2, 0, ";"); + QITEM_NAME = GetToken(QUEST_DATA2, 1, ";"); + ITEM_DROP_MODE = QUEST_DATA3; + QITEM_ORIGIN_AMT = 0; + QITEMS_FOUND = 0; + } + + void game_precache() + { + Precache("other/qitem"); + } + + void quest_activate() + { + quest_begin_handle_origins(); + } + + void game_menu_getoptions() + { + string L_PLAYER_ID = param1; + if (QUEST_MODE == "active") + { + CallExternal(GAME_MASTER, "ext_check_quest_item", QITEM_CODE, GetEntityIndex(GetOwner())); + } + } + + void ext_receive_quest_item() + { + if (QUEST_TYPE == "fetch_items") + { + if (QUEST_MODE == "active") + { + QITEMS_FOUND = (QITEMS_FOUND + 1); + if (QITEMS_FOUND == QITEM_ORIGIN_AMT) + { + quest_finished(); + } + } + } + } + + void quest_begin_handle_origins() + { + array QITEM_SPAWN_ORIGINS; + string L_INFO_TARGET_NAME = INFO_TARGET_PREFIX; + L_INFO_TARGET_NAME += "1"; + string L_INFO_TARGET_ID = FindEntityByName(L_INFO_TARGET_NAME); + if (((L_INFO_TARGET_ID !is null))) + { + quest_handle_info_targets(); + } + else + { + if ((QUEST_DATA1).findFirst("(") == 0) + { + QITEM_ORIGIN_AMT = GetTokenCount(QUEST_DATA1, ";"); + for (int i = 0; i < QITEM_ORIGIN_AMT; i++) + { + quest_handle_vectors(); + } + } + else + { + LogDebug("No proper origins were found, fetch_items cannot spawn qitems!"); + } + } + } + + void quest_handle_info_targets() + { + string L_INFO_TARGET_NAME = INFO_TARGET_PREFIX; + string L_QITEM_ORIGIN_AMT = QITEM_ORIGIN_AMT; + int L_QITEM_ORIGIN_AMT = int((L_QITEM_ORIGIN_AMT + 1)); + L_INFO_TARGET_NAME += L_QITEM_ORIGIN_AMT; + string L_INFO_TARGET_ID = FindEntityByName(L_INFO_TARGET_NAME); + if (((L_INFO_TARGET_ID !is null))) + { + QITEM_SPAWN_ORIGINS.insertLast(GetEntityOrigin(L_INFO_TARGET_ID)); + QITEM_ORIGIN_AMT = (QITEM_ORIGIN_AMT + 1); + ScheduleDelayedEvent(0.1, "quest_handle_info_targets"); + } + else + { + quest_populate_origins(); + } + } + + void quest_handle_vectors() + { + QITEM_SPAWN_ORIGINS.insertLast(GetToken(QUEST_DATA1, i, ";")); + if ((i + 1) == QITEM_ORIGIN_AMT) + { + quest_populate_origins(); + } + } + + void quest_populate_origins() + { + if (ITEM_DROP_MODE == 1) + { + int L_ORIGIN = RandomInt(0, (QITEM_ORIGIN_AMT - 1)); + SpawnNPC("other/qitem", L_ORIGIN, ScriptMode::Legacy); // params: QITEM_CODE, QITEM_NAME + QITEM_ORIGIN_AMT = 1; + } + else + { + if (ITEM_DROP_MODE == 0) + { + for (int i = 0; i < QITEM_ORIGIN_AMT; i++) + { + quest_populate_origins_loop(); + } + } + } + } + + void quest_populate_origins_loop() + { + string L_ORIGIN = QITEM_SPAWN_ORIGINS[int(i)]; + SpawnNPC("other/qitem", L_ORIGIN, ScriptMode::Legacy); // params: QITEM_CODE, QITEM_NAME + } + +} + +} diff --git a/scripts/angelscript/dq/quests/dq_get_item_from_hands.as b/scripts/angelscript/dq/quests/dq_get_item_from_hands.as new file mode 100644 index 00000000..f56a130f --- /dev/null +++ b/scripts/angelscript/dq/quests/dq_get_item_from_hands.as @@ -0,0 +1,252 @@ +#pragma context server + +#include "dq/quests/bases/dq_base_quests.as" + +namespace MS +{ + +class DqGetItemFromHands : CGameScript +{ + int DQ_AMMO_CUR; + string DQ_AMMO_REQUIREMENT; + string DQ_AMMO_STRINGS; + int DQ_IS_AMMO; + string DQ_ITEM_NAME; + string DQ_ITEM_REQUIREMENT; + string DQ_QUALITY_REQUIREMENT; + int FUNC_IS_AMMO; + + DqGetItemFromHands() + { + DQ_ITEM_REQUIREMENT = GetToken(QUEST_DATA1, 0, ";"); + DQ_ITEM_NAME = GetToken(QUEST_DATA1, 1, ";"); + DQ_AMMO_REQUIREMENT = QUEST_DATA2; + DQ_QUALITY_REQUIREMENT = QUEST_DATA3; + DQ_AMMO_STRINGS = "proj_;item_lockpick"; + DQ_AMMO_CUR = 0; + DQ_IS_AMMO = 0; + } + + void game_menu_getoptions() + { + DQ_IS_AMMO = func_check_ammo_strings(DQ_ITEM_REQUIREMENT); + string L_PLAYER = param1; + if (QUEST_MODE == QUEST_ACTIVE) + { + int L_ITEM = 0; + string L_HAND_LEFT = GetEntityProperty(L_PLAYER, "scriptvar"); + string L_HAND_RIGHT = GetEntityProperty(L_PLAYER, "scriptvar"); + string L_FAILURE_LEFT = func_check_failure(L_PLAYER, L_HAND_LEFT); + string L_FAILURE_RIGHT = func_check_failure(L_PLAYER, L_HAND_RIGHT); + string L_TITLE = DQ_ITEM_NAME; + if (DQ_AMMO_REQUIREMENT > 1) + { + L_TITLE += " ("; + L_TITLE += int(DQ_AMMO_CUR); + L_TITLE += "/"; + L_TITLE += DQ_AMMO_REQUIREMENT; + L_TITLE += ")"; + } + if (!(L_FAILURE_LEFT)) + { + string reg.mitem.title = L_TITLE; + string reg.mitem.type = "callback"; + string reg.mitem.data = L_HAND_LEFT; + string reg.mitem.callback = "give_item"; + } + else + { + if (!(L_FAILURE_RIGHT)) + { + string reg.mitem.title = L_TITLE; + string reg.mitem.type = "callback"; + string reg.mitem.data = L_HAND_RIGHT; + string reg.mitem.callback = "give_item"; + } + else + { + if (L_FAILURE_LEFT > L_FAILURE_RIGHT) + { + report_failed(L_FAILURE_LEFT); + } + else + { + report_failed(L_FAILURE_RIGHT); + } + } + } + if ((L_FAILURE_LEFT)) + { + if ((L_FAILURE_RIGHT)) + { + string reg.mitem.title = L_TITLE; + string reg.mitem.type = "disabled"; + } + } + } + } + + void give_item() + { + string L_PLAYER = param1; + string L_ITEM = param2; + string L_FAILURE = func_check_failure(L_PLAYER, L_ITEM); + if (!(L_FAILURE)) + { + SayText(DQ_IS_AMMO); + if (!(DQ_IS_AMMO)) + { + DQ_AMMO_CUR = (DQ_AMMO_CUR + 1); + delete_item(L_ITEM); + } + else + { + string L_AMMO = GetEntityProperty(L_ITEM, "quantity"); + SayText(L_AMMO); + string L_DIFF = (L_AMMO - DQ_AMMO_REQUIREMENT); + if (L_DIFF <= 0) + { + DQ_AMMO_CUR = (DQ_AMMO_CUR + L_AMMO); + delete_item(L_ITEM); + } + else + { + DQ_AMMO_CUR = DQ_AMMO_REQUIREMENT; + // TODO: setquantity L_ITEM L_DIFF + } + } + if (DQ_AMMO_CUR == DQ_AMMO_REQUIREMENT) + { + quest_finished_check(); + ScheduleDelayedEvent(0.1, "open_menu"); + } + } + else + { + report_failed(L_FAILURE); + } + } + + void open_menu() + { + OpenMenu(QUEST_TAKER); + } + + void report_failed() + { + string L_LEVEL = param1; + if (L_LEVEL == 1) + { + failed_exists(); + } + else + { + if (L_LEVEL == 2) + { + failed_owner(); + } + else + { + if (L_LEVEL == 3) + { + failed_scriptname(); + } + else + { + if (L_LEVEL == 4) + { + failed_quality(); + } + else + { + if (L_LEVEL == 5) + { + failed_quantity(); + } + } + } + } + } + } + + void delete_item() + { + string L_ITEM_ID = param1; + CallExternal(L_ITEM_ID, "item_banked"); + CallClientItemEvent(L_ITEM_ID, "game_putinpack"); + DeleteEntity(L_ITEM_ID); + } + + void func_check_failure() + { + string L_PLAYER = param1; + string L_ITEM = param2; + int L_FAILED = 0; + return; + if (!((L_ITEM !is null))) + { + int L_FAILED = 1; + } + else + { + if (GetEntityProperty(L_ITEM, "owner") == L_PLAYER) + { + int L_FAILED = 2; + } + else + { + if (GetScriptName(L_ITEM) == DQ_ITEM_REQUIREMENT) + { + int L_FAILED = 3; + } + } + } + if (!(L_FAILED)) + { + if (DQ_QUALITY_REQUIREMENT != 0) + { + if (GetEntityProperty(L_ITEM, "quality") != DQ_QUALITY_REQUIREMENT) + { + int L_FAILED = 4; + } + } + } + if (!(L_FAILED)) + { + if ((DQ_IS_AMMO)) + { + if (GetEntityProperty(L_ITEM, "quantity") == 0) + { + int L_FAILED = 5; + } + } + } + return; + } + + void func_check_ammo_strings() + { + string L_ITEM_SCRIPTNAME = param1; + FUNC_IS_AMMO = 0; + for (int i = 0; i < GetTokenCount(DQ_AMMO_STRINGS, ";"); i++) + { + check_ammo_strings(L_ITEM_SCRIPTNAME); + } + return; + return; + } + + void check_ammo_strings() + { + string L_ITEM_SCRIPTNAME = param1; + string L_AMMO = GetToken(DQ_AMMO_STRINGS, i, ";"); + if ((L_ITEM_SCRIPTNAME).findFirst(L_AMMO) >= 0) + { + FUNC_IS_AMMO = 1; + } + } + +} + +} + diff --git a/scripts/angelscript/dq/quests/dq_kill_target.as b/scripts/angelscript/dq/quests/dq_kill_target.as new file mode 100644 index 00000000..1a26a9f0 --- /dev/null +++ b/scripts/angelscript/dq/quests/dq_kill_target.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "dq/quests/bases/dq_base_quests.as" + +namespace MS +{ + +class DqKillTarget : CGameScript +{ + string DQ_MONSTER_PARAMS; + string DQ_SELF_ADJUST; + string QUEST_INFO_TARGET_ID; + string QUEST_INFO_TARGET_NAME; + string QUEST_INFO_TARGET_YAW; + string QUEST_MONSTER_ID; + string QUEST_MONSTER_NAME; + string QUEST_MONSTER_SCRIPT; + string QUEST_MONSTER_SPAWN_POINT; + int QUEST_TARGET_HP_MULT; + int QUEST_TARGET_XP_MULT; + + DqKillTarget() + { + QUEST_MONSTER_SCRIPT = GetToken(QUEST_DATA1, 0, ";"); + QUEST_MONSTER_NAME = GetToken(QUEST_DATA1, 1, ";"); + QUEST_INFO_TARGET_NAME = QUEST_DATA2; + DQ_SELF_ADJUST = QUEST_DATA3; + DQ_MONSTER_PARAMS = QUEST_DATA4; + QUEST_TARGET_HP_MULT = 5; + QUEST_TARGET_XP_MULT = 2; + QUEST_INFO_TARGET_YAW = Vector3(0, 0, 0); + } + + void quest_activate() + { + if (((FindEntityByName(QUEST_INFO_TARGET_NAME) !is null))) + { + QUEST_INFO_TARGET_ID = FindEntityByName(QUEST_INFO_TARGET_NAME); + QUEST_MONSTER_SPAWN_POINT = GetEntityOrigin(QUEST_INFO_TARGET_ID); + QUEST_INFO_TARGET_YAW = GetEntityProperty(QUEST_INFO_TARGET_ID, "angles.yaw"); + } + else + { + QUEST_MONSTER_SPAWN_POINT = QUEST_INFO_TARGET_NAME; + } + if ((DQ_MONSTER_PARAMS)) + { + SpawnNPC(QUEST_MONSTER_SCRIPT, QUEST_MONSTER_SPAWN_POINT, ScriptMode::Legacy); // params: "addparams", DQ_MONSTER_PARAMS + } + else + { + SpawnNPC(QUEST_MONSTER_SCRIPT, QUEST_MONSTER_SPAWN_POINT, ScriptMode::Legacy); + } + QUEST_MONSTER_ID = GetEntityIndex(m_hLastCreated); + CallExternal(QUEST_MONSTER_ID, "ext_setangle", Vector3(0, QUEST_INFO_TARGET_YAW, 0)); + CallExternal(QUEST_MONSTER_ID, "set_name", QUEST_MONSTER_NAME); + CallExternal(QUEST_MONSTER_ID, "make_boss"); + CallExternal(QUEST_MONSTER_ID, "set_quest_miniboss", 1); + ScheduleDelayedEvent(1.1, "dq_apply_externals"); + } + + void dq_apply_externals() + { + ApplyEffect(QUEST_MONSTER_ID, "dq/externals/dq_apply_callback_on_death", GetEntityIndex(GetOwner())); + if ((DQ_SELF_ADJUST)) + { + ApplyEffect(QUEST_MONSTER_ID, "dq/externals/dq_adjust_damage"); + string L_QUEST_MONSTER_HP = (QUEST_TAKER_MAXHP * QUEST_TARGET_HP_MULT); + CallExternal(QUEST_MONSTER_ID, "ext_set_health", L_QUEST_MONSTER_HP, L_QUEST_MONSTER_HP); + string L_QUEST_MONSTER_XP = (QUEST_TAKER_MAXHP * QUEST_TARGET_XP_MULT); + CallExternal(QUEST_MONSTER_ID, "set_xp", L_QUEST_MONSTER_XP); + } + } + + void ext_effected_monster_killed() + { + quest_finished_check(); + } + +} + +} diff --git a/scripts/angelscript/dq/quests/dq_kill_type.as b/scripts/angelscript/dq/quests/dq_kill_type.as new file mode 100644 index 00000000..585c7db9 --- /dev/null +++ b/scripts/angelscript/dq/quests/dq_kill_type.as @@ -0,0 +1,59 @@ +#pragma context server + +#include "dq/quests/bases/dq_base_quests.as" + +namespace MS +{ + +class DqKillType : CGameScript +{ + int DQ_KILLED; + string DQ_KILL_NUM; + string DQ_KILL_WHO; + + DqKillType() + { + DQ_KILL_NUM = GetToken(QUEST_DATA1, 0, ";"); + DQ_KILL_WHO = StringToLower(GetToken(QUEST_DATA1, 1, ";")); + DQ_KILLED = 0; + } + + void quest_activate() + { + CallExternal(GAME_MASTER, "gm_dq_add_counter", GetEntityIndex(GetOwner())); + } + + void ext_quest_monster_killed() + { + string L_MONSTER_KILLED_NAME = StringToLower(GetEntityProperty(GAME_MASTER, "scriptvar")); + if ((L_MONSTER_KILLED_NAME).findFirst(DQ_KILL_WHO) >= 0) + { + do_the_monster_killed_bit(); + } + else + { + if (DQ_KILL_WHO == "all") + { + do_the_monster_killed_bit(); + } + } + } + + void do_the_monster_killed_bit() + { + DQ_KILLED = (DQ_KILLED + 1); + if (DQ_KILLED >= DQ_KILL_NUM) + { + quest_finished(); + CallExternal(GAME_MASTER, "gm_dq_perish_counter", GetEntityIndex(GetOwner())); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(GAME_MASTER, "gm_dq_perish_counter", GetEntityIndex(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/dq/templates/bases/dq_generic_chat.as b/scripts/angelscript/dq/templates/bases/dq_generic_chat.as new file mode 100644 index 00000000..e056f674 --- /dev/null +++ b/scripts/angelscript/dq/templates/bases/dq_generic_chat.as @@ -0,0 +1,62 @@ +#pragma context server + +namespace MS +{ + +class DqGenericChat : CGameScript +{ + void quest_intro() + { + if (QUEST_INTRO_CHAT != "0") + { + chat_now(QUEST_INTRO_CHAT, 1.0); + chat_convo_anim(); + } + if (QUEST_INTRO_SOUND != "0") + { + EmitSound(GetOwner(), 2, QUEST_INTRO_SOUND, 10); + } + } + + void quest_activate() + { + if (QUEST_ACTIVATE_CHAT != "0") + { + chat_now(QUEST_ACTIVATE_CHAT, 1.0); + chat_convo_anim(); + } + if (QUEST_ACTIVATE_SOUND != "0") + { + EmitSound(GetOwner(), 2, QUEST_ACTIVATE_SOUND, 10); + } + } + + void quest_finished() + { + if (QUEST_FINISHED_CHAT != "0") + { + chat_now(QUEST_FINISHED_CHAT, 1.0); + chat_convo_anim(); + } + if (QUEST_FINISHED_SOUND != "0") + { + EmitSound(GetOwner(), 2, QUEST_FINISHED_SOUND, 10); + } + } + + void quest_complete() + { + if (QUEST_COMPLETE_CHAT != "0") + { + chat_now(QUEST_COMPLETE_CHAT, 1.0); + chat_convo_anim(); + } + if (QUEST_COMPLETE_SOUND != "0") + { + EmitSound(GetOwner(), 2, QUEST_COMPLETE_SOUND, 10); + } + } + +} + +} diff --git a/scripts/angelscript/dq/templates/bases/dq_generic_menus.as b/scripts/angelscript/dq/templates/bases/dq_generic_menus.as new file mode 100644 index 00000000..6625c1ef --- /dev/null +++ b/scripts/angelscript/dq/templates/bases/dq_generic_menus.as @@ -0,0 +1,56 @@ +#pragma context server + +namespace MS +{ + +class DqGenericMenus : CGameScript +{ + void game_menu_getoptions() + { + string L_PLAYER_ID = param1; + if (QUEST_MODE == QUEST_WAITING) + { + string reg.mitem.title = QUEST_WAITING_TEXT; + string reg.mitem.type = "callback"; + string reg.mitem.data = L_PLAYER_ID; + string reg.mitem.callback = "quest_intro_check"; + } + else + { + if (QUEST_MODE == QUEST_ASKING) + { + string reg.mitem.title = QUEST_ASKING_TEXT; + string reg.mitem.type = "callback"; + string reg.mitem.data = L_PLAYER_ID; + string reg.mitem.callback = "quest_activate_check"; + } + else + { + if (QUEST_MODE == QUEST_ACTIVE) + { + if (QUEST_ACTIVE_TEXT == "0") + { + if ((QUEST_SHOW_PROGRESS)) + { + string L_QUEST_ACTIVE_TEXT = QUEST_ACTIVE_TEXT; + L_QUEST_ACTIVE_TEXT += " ("; + L_QUEST_ACTIVE_TEXT += int(QUEST_PROGRESS_VAR); + L_QUEST_ACTIVE_TEXT += "/"; + L_QUEST_ACTIVE_TEXT += int(QUEST_PROGRESS_MAX); + L_QUEST_ACTIVE_TEXT += ")"; + string reg.mitem.title = L_QUEST_ACTIVE_TEXT; + } + else + { + string reg.mitem.title = QUEST_ACTIVE_TEXT; + } + string reg.mitem.type = "disabled"; + } + } + } + } + } + +} + +} diff --git a/scripts/angelscript/dq/templates/bases/dq_generic_reward.as b/scripts/angelscript/dq/templates/bases/dq_generic_reward.as new file mode 100644 index 00000000..2a26eaef --- /dev/null +++ b/scripts/angelscript/dq/templates/bases/dq_generic_reward.as @@ -0,0 +1,148 @@ +#pragma context server + +namespace MS +{ + +class DqGenericReward : CGameScript +{ + int USING_GENERIC_REWARD; + + DqGenericReward() + { + USING_GENERIC_REWARD = 1; + array A_QUEST_PARTICIPANTS; + } + + void quest_activate() + { + if ((QUEST_REWARD_ALL)) + { + string L_PLAYERS = ""; + GetAllPlayers(L_PLAYERS); + for (int i = 0; i < GetTokenCount(L_PLAYERS, ";"); i++) + { + get_quest_participants_loop(L_PLAYERS); + } + } + } + + void quest_taker_updated() + { + if (!(QUEST_REWARD_ALL)) + { + int L_ARRAY_AMT = int(A_QUEST_PARTICIPANTS.length()); + if (L_ARRAY_AMT > 0) + { + for (int i = 0; i < L_ARRAY_AMT; i++) + { + clear_array_loop(); + } + } + add_quest_participant(QUEST_TAKER); + } + } + + void quest_complete() + { + string L_PLAYER = param1; + string L_PLAYER_IDX = ArrayFind(A_QUEST_PARTICIPANTS, L_PLAYER, 0); + if (L_PLAYER_IDX != -1) + { + A_QUEST_PARTICIPANTS.removeAt(L_PLAYER_IDX); + if (!(QUEST_REWARD_ALL)) + { + if (!(QUEST_REWARD_TAKEN)) + { + QUEST_REWARD_TAKEN = 1; + quest_reward(L_PLAYER); + } + } + else + { + quest_reward(L_PLAYER); + } + } + } + + void quest_reward() + { + string L_PLAYER = param1; + if (QUEST_REWARD_TYPE == "map") + { + UseTrigger(QUEST_REWARD_EVENT); + } + else + { + if (QUEST_REWARD_TYPE == "script") + { + QUEST_REWARD_EVENT(L_PLAYER); + } + else + { + if (QUEST_REWARD_TYPE == "gm") + { + CallExternal(GAME_MASTER, "QUEST_REWARD_EVENT", L_PLAYER); + } + } + } + if (int(A_QUEST_PARTICIPANTS.length()) == 0) + { + SetMenuAutoOpen(0); + delete_fade_me(); + } + } + + void game_menu_getoptions() + { + string L_PLAYER = param1; + if (QUEST_MODE == QUEST_COMPLETE) + { + if (!(QUEST_REWARD_ALL)) + { + if (!(QUEST_REWARD_TAKEN)) + { + if (L_PLAYER == QUEST_TAKER) + { + build_quest_complete_menu(L_PLAYER); + } + } + } + else + { + if (ArrayFind(A_QUEST_PARTICIPANTS, L_PLAYER_ID, 0) != -1) + { + build_quest_complete_menu(L_PLAYER); + } + } + } + } + + void get_quest_participants_loop() + { + string L_PLAYER = GetToken(param1, i, ";"); + add_quest_participant(L_PLAYER); + } + + void add_quest_participant() + { + string L_PLAYER = param1; + A_QUEST_PARTICIPANTS.insertLast(L_PLAYER); + } + + void build_quest_complete_menu() + { + string L_PLAYER_ID = param1; + string reg.mitem.title = QUEST_COMPLETE_TEXT; + string reg.mitem.type = "callback"; + string reg.mitem.data = L_PLAYER_ID; + string reg.mitem.callback = "quest_complete"; + } + + void clear_array_loop() + { + A_QUEST_PARTICIPANTS.removeAt(0); + } + +} + +} diff --git a/scripts/angelscript/dq/templates/dq_defend_me_template.as b/scripts/angelscript/dq/templates/dq_defend_me_template.as new file mode 100644 index 00000000..d263844a --- /dev/null +++ b/scripts/angelscript/dq/templates/dq_defend_me_template.as @@ -0,0 +1,95 @@ +#pragma context server + +#include "dq/quests/dq_defend_me.as" +#include "dq/templates/bases/dq_generic_reward.as" +#include "dq/templates/bases/dq_generic_menus.as" +#include "dq/templates/bases/dq_generic_chat.as" +#include "dq/quest_dwarf.as" + +namespace MS +{ + +class DqDefendMeTemplate : CGameScript +{ + int AM_INVINCIBLE; + string INIT_IDLE_MODE; + int IS_LEADER; + string LANTERN_COLOR; + int MONSTER_MODEL; + int NEW_HEIGHT; + string NEW_RACE; + int NEW_WIDTH; + string QUEST_ACTIVATE_CHAT; + string QUEST_ACTIVATE_SOUND; + int QUEST_ACTIVE_COMBATANT; + string QUEST_ACTIVE_TEXT; + string QUEST_ASKING_TEXT; + int QUEST_COMBATANT; + string QUEST_COMPLETE_CHAT; + int QUEST_COMPLETE_SOUND; + string QUEST_COMPLETE_TEXT; + string QUEST_DATA1; + string QUEST_DATA2; + string QUEST_DATA3; + int QUEST_EXPERT_COMBATANT; + string QUEST_FADE_ON_COMPLETE; + string QUEST_FINISHED_CHAT; + int QUEST_FINISHED_SOUND; + int QUEST_FOLLOWER; + string QUEST_GIVER_NAME; + string QUEST_INTRO_CHAT; + int QUEST_INTRO_SOUND; + int QUEST_REWARD_ALL; + string QUEST_REWARD_EVENT; + string QUEST_REWARD_TYPE; + string QUEST_TYPE; + string QUEST_WAITING_TEXT; + int SET_SIEGE_MODE; + string SUBMODEL_GROUPS; + int USE_LANTERN; + int USE_SKIN; + + DqDefendMeTemplate() + { + QUEST_TYPE = "defend_me"; + QUEST_DATA1 = "monsters/spider_mini;monsters/spider_mini_poison"; + QUEST_DATA2 = "20;1"; + QUEST_DATA3 = "random"; + QUEST_REWARD_TYPE = "gm"; + QUEST_REWARD_EVENT = "old_helena_warboss_died"; + QUEST_REWARD_ALL = 0; + QUEST_COMPLETE_TEXT = "(Collect Reward)"; + QUEST_WAITING_TEXT = "S-s-spiders..."; + QUEST_ASKING_TEXT = "S-S-SPIDERS!"; + QUEST_ACTIVE_TEXT = "(NPC currently in the throws of arachnophobia)"; + QUEST_INTRO_CHAT = "S-s-spiders... Spiders... Everywhere..."; + QUEST_INTRO_SOUND = 0; + QUEST_ACTIVATE_CHAT = "S-S-SPIDERS! SPIDERS EVERYWHERE!"; + QUEST_ACTIVATE_SOUND = "voices/dwarf/vs_ndwarfm1_hit1.wav"; + QUEST_FINISHED_CHAT = "T-thanks... S-so many l-legs..."; + QUEST_FINISHED_SOUND = 0; + QUEST_COMPLETE_CHAT = "P-probably, s-shoulda, g-given you this s-sooner..."; + QUEST_COMPLETE_SOUND = 0; + QUEST_FADE_ON_COMPLETE = "fade"; + QUEST_GIVER_NAME = "Frightened Dwarf"; + NEW_RACE = "human"; + AM_INVINCIBLE = 0; + NEW_WIDTH = 32; + NEW_HEIGHT = 32; + MONSTER_MODEL = 0; + SUBMODEL_GROUPS = "0;0"; + USE_SKIN = 4; + SET_SIEGE_MODE = 1; + QUEST_COMBATANT = 0; + QUEST_ACTIVE_COMBATANT = 0; + QUEST_FOLLOWER = 0; + IS_LEADER = 0; + USE_LANTERN = 1; + LANTERN_COLOR = "(128,64,0)"; + INIT_IDLE_MODE = "sitting"; + QUEST_EXPERT_COMBATANT = 0; + } + +} + +} diff --git a/scripts/angelscript/dq/templates/dq_escort_to_template.as b/scripts/angelscript/dq/templates/dq_escort_to_template.as new file mode 100644 index 00000000..2c86047c --- /dev/null +++ b/scripts/angelscript/dq/templates/dq_escort_to_template.as @@ -0,0 +1,91 @@ +#pragma context server + +#include "dq/quests/dq_escort_to.as" +#include "dq/templates/bases/dq_generic_reward.as" +#include "dq/templates/bases/dq_generic_menus.as" +#include "dq/templates/bases/dq_generic_chat.as" +#include "dq/quest_dwarf.as" + +namespace MS +{ + +class DqEscortToTemplate : CGameScript +{ + int AM_INVINCIBLE; + string INIT_IDLE_MODE; + int IS_LEADER; + string LANTERN_COLOR; + int MONSTER_MODEL; + int NEW_HEIGHT; + string NEW_RACE; + int NEW_WIDTH; + string QUEST_ACTIVATE_CHAT; + string QUEST_ACTIVATE_SOUND; + int QUEST_ACTIVE_COMBATANT; + string QUEST_ACTIVE_TEXT; + string QUEST_ASKING_TEXT; + int QUEST_COMBATANT; + string QUEST_COMPLETE_CHAT; + int QUEST_COMPLETE_SOUND; + string QUEST_COMPLETE_TEXT; + string QUEST_DATA1; + int QUEST_EXPERT_COMBATANT; + string QUEST_FADE_ON_COMPLETE; + string QUEST_FINISHED_CHAT; + int QUEST_FINISHED_SOUND; + int QUEST_FOLLOWER; + string QUEST_GIVER_NAME; + string QUEST_INTRO_CHAT; + int QUEST_INTRO_SOUND; + int QUEST_REWARD_ALL; + string QUEST_REWARD_EVENT; + string QUEST_REWARD_TYPE; + string QUEST_TYPE; + string QUEST_WAITING_TEXT; + int SET_SIEGE_MODE; + string SUBMODEL_GROUPS; + int USE_LANTERN; + int USE_SKIN; + + DqEscortToTemplate() + { + QUEST_TYPE = "escort_to"; + QUEST_DATA1 = "escort_to_here"; + QUEST_REWARD_TYPE = "gm"; + QUEST_REWARD_EVENT = "old_helena_warboss_died"; + QUEST_REWARD_ALL = 0; + QUEST_COMPLETE_TEXT = "(Collect Reward)"; + QUEST_WAITING_TEXT = "S-s-spiders..."; + QUEST_ASKING_TEXT = "S-S-SPIDERS!"; + QUEST_ACTIVE_TEXT = "(NPC currently in the throws of arachnophobia)"; + QUEST_INTRO_CHAT = "S-s-spiders... Spiders... Everywhere..."; + QUEST_INTRO_SOUND = 0; + QUEST_ACTIVATE_CHAT = "SPAWN IS SAFE FROM THE S-SPIDERS!"; + QUEST_ACTIVATE_SOUND = "voices/dwarf/vs_ndwarfm1_hit1.wav"; + QUEST_FINISHED_CHAT = "T-thanks..."; + QUEST_FINISHED_SOUND = 0; + QUEST_COMPLETE_CHAT = "P-probably, s-shoulda, g-given you this s-sooner..."; + QUEST_COMPLETE_SOUND = 0; + QUEST_FADE_ON_COMPLETE = "fade"; + QUEST_GIVER_NAME = "Frightened Dwarf"; + NEW_RACE = "human"; + AM_INVINCIBLE = 0; + NEW_WIDTH = 32; + NEW_HEIGHT = 32; + MONSTER_MODEL = 0; + SUBMODEL_GROUPS = "0;0"; + USE_SKIN = 4; + SET_SIEGE_MODE = 0; + QUEST_COMBATANT = 0; + QUEST_ACTIVE_COMBATANT = 0; + QUEST_FOLLOWER = 1; + IS_LEADER = 1; + USE_LANTERN = 1; + LANTERN_COLOR = "(128,64,0)"; + INIT_IDLE_MODE = "sitting"; + QUEST_EXPERT_COMBATANT = 0; + } + +} + +} diff --git a/scripts/angelscript/dq/templates/dq_fetch_drop_template.as b/scripts/angelscript/dq/templates/dq_fetch_drop_template.as new file mode 100644 index 00000000..1ef49d7c --- /dev/null +++ b/scripts/angelscript/dq/templates/dq_fetch_drop_template.as @@ -0,0 +1,116 @@ +#pragma context server + +#include "dq/quests/dq_fetch_drop.as" +#include "dq/templates/bases/dq_generic_reward.as" +#include "dq/templates/bases/dq_generic_menus.as" +#include "dq/templates/bases/dq_generic_chat.as" +#include "dq/quest_dwarf.as" + +namespace MS +{ + +class DqFetchDropTemplate : CGameScript +{ + int AM_INVINCIBLE; + string INIT_IDLE_MODE; + int IS_LEADER; + string LANTERN_COLOR; + int MONSTER_MODEL; + int NEW_HEIGHT; + string NEW_RACE; + int NEW_WIDTH; + string QUEST_ACTIVATE_CHAT; + int QUEST_ACTIVATE_SOUND; + int QUEST_ACTIVE_COMBATANT; + string QUEST_ACTIVE_TEXT; + string QUEST_ASKING_TEXT; + int QUEST_COMBATANT; + string QUEST_COMPLETE_CHAT; + int QUEST_COMPLETE_SOUND; + string QUEST_COMPLETE_TEXT; + string QUEST_DATA1; + string QUEST_DATA2; + int QUEST_EXPERT_COMBATANT; + string QUEST_FADE_ON_COMPLETE; + string QUEST_FINISHED_CHAT; + int QUEST_FINISHED_SOUND; + int QUEST_FOLLOWER; + string QUEST_GIVER_NAME; + string QUEST_INTRO_CHAT; + int QUEST_INTRO_SOUND; + string QUEST_PROGRESS_MAX; + string QUEST_PROGRESS_VAR; + int QUEST_REWARD_ALL; + string QUEST_REWARD_EVENT; + string QUEST_REWARD_TYPE; + int QUEST_SHOW_PROGRESS; + string QUEST_TYPE; + string QUEST_WAITING_TEXT; + int SET_SIEGE_MODE; + string SUBMODEL_GROUPS; + int USE_LANTERN; + int USE_SKIN; + + DqFetchDropTemplate() + { + QUEST_TYPE = "fetch_drop"; + QUEST_DATA1 = "4;spider"; + QUEST_DATA2 = "km;Barrel of Booze"; + QUEST_REWARD_TYPE = "gm"; + QUEST_REWARD_EVENT = "old_helena_warboss_died"; + QUEST_REWARD_ALL = 0; + QUEST_COMPLETE_TEXT = "(Collect Reward)"; + QUEST_WAITING_TEXT = "Hello?"; + QUEST_ASKING_TEXT = "You uh... Want it back?"; + QUEST_ACTIVE_TEXT = "(In Progress)"; + QUEST_SHOW_PROGRESS = 1; + QUEST_PROGRESS_VAR = QITEMS_FOUND; + QUEST_PROGRESS_MAX = DQ_FIND_NUM; + QUEST_INTRO_CHAT = "DamnN spiderz getting- *hic* drunk on me booze aghain..."; + QUEST_INTRO_SOUND = 0; + QUEST_ACTIVATE_CHAT = "Eh? I'll be heere... zzz"; + QUEST_ACTIVATE_SOUND = 0; + QUEST_FINISHED_CHAT = "MY BOOZE!"; + QUEST_FINISHED_SOUND = 0; + QUEST_COMPLETE_CHAT = "Here, you can have me beard... Wait..."; + QUEST_COMPLETE_SOUND = 0; + QUEST_FADE_ON_COMPLETE = "fade"; + QUEST_GIVER_NAME = "Drunk Dwarf"; + NEW_RACE = "beloved"; + AM_INVINCIBLE = 0; + NEW_WIDTH = 32; + NEW_HEIGHT = 32; + MONSTER_MODEL = 0; + SUBMODEL_GROUPS = "0;0"; + USE_SKIN = 4; + SET_SIEGE_MODE = 0; + QUEST_COMBATANT = 0; + QUEST_ACTIVE_COMBATANT = 0; + QUEST_FOLLOWER = 0; + IS_LEADER = 0; + USE_LANTERN = 1; + LANTERN_COLOR = "(128,64,0)"; + INIT_IDLE_MODE = "sitting"; + QUEST_EXPERT_COMBATANT = 0; + } + + void do_chat_ext_recieve_quest_item() + { + if (QUEST_MODE == "active") + { + if (!(CHAT_BUSY)) + { + chat_now("For me? Yoo shouldn't have- *hic*", 1.0); + EmitSound(GetOwner(), 2, "none", 10); + } + } + } + + void ext_receive_quest_item() + { + ScheduleDelayedEvent(0.1, "do_chat_ext_recieve_quest_item"); + } + +} + +} diff --git a/scripts/angelscript/dq/templates/dq_fetch_items_template.as b/scripts/angelscript/dq/templates/dq_fetch_items_template.as new file mode 100644 index 00000000..4cca1e0e --- /dev/null +++ b/scripts/angelscript/dq/templates/dq_fetch_items_template.as @@ -0,0 +1,118 @@ +#pragma context server + +#include "dq/quests/dq_fetch_items.as" +#include "dq/templates/bases/dq_generic_reward.as" +#include "dq/templates/bases/dq_generic_menus.as" +#include "dq/templates/bases/dq_generic_chat.as" +#include "dq/quest_dwarf.as" + +namespace MS +{ + +class DqFetchItemsTemplate : CGameScript +{ + int AM_INVINCIBLE; + string INIT_IDLE_MODE; + int IS_LEADER; + string LANTERN_COLOR; + int MONSTER_MODEL; + int NEW_HEIGHT; + string NEW_RACE; + int NEW_WIDTH; + int QUEST_ACTIVATE_CHAT; + string QUEST_ACTIVATE_SOUND; + int QUEST_ACTIVE_COMBATANT; + string QUEST_ACTIVE_TEXT; + string QUEST_ASKING_TEXT; + int QUEST_COMBATANT; + int QUEST_COMPLETE_CHAT; + string QUEST_COMPLETE_SOUND; + string QUEST_COMPLETE_TEXT; + string QUEST_DATA1; + string QUEST_DATA2; + int QUEST_DATA3; + int QUEST_EXPERT_COMBATANT; + string QUEST_FADE_ON_COMPLETE; + string QUEST_FINISHED_CHAT; + int QUEST_FINISHED_SOUND; + int QUEST_FOLLOWER; + string QUEST_GIVER_NAME; + string QUEST_INTRO_CHAT; + int QUEST_INTRO_SOUND; + string QUEST_PROGRESS_MAX; + string QUEST_PROGRESS_VAR; + int QUEST_REWARD_ALL; + string QUEST_REWARD_EVENT; + string QUEST_REWARD_TYPE; + int QUEST_SHOW_PROGRESS; + string QUEST_TYPE; + string QUEST_WAITING_TEXT; + int SET_SIEGE_MODE; + string SUBMODEL_GROUPS; + int USE_LANTERN; + int USE_SKIN; + + DqFetchItemsTemplate() + { + QUEST_TYPE = "fetch_items"; + QUEST_DATA1 = "qitem_place"; + QUEST_DATA2 = "km;Barrel of God knows what"; + QUEST_DATA3 = 0; + QUEST_REWARD_TYPE = "gm"; + QUEST_REWARD_EVENT = "old_helena_warboss_died"; + QUEST_REWARD_ALL = 0; + QUEST_COMPLETE_TEXT = "(Collect Reward)"; + QUEST_WAITING_TEXT = "ZOMBIE!"; + QUEST_ASKING_TEXT = "As long as they're not mine..."; + QUEST_ACTIVE_TEXT = "(In Progress)"; + QUEST_SHOW_PROGRESS = 1; + QUEST_PROGRESS_VAR = QITEMS_FOUND; + QUEST_PROGRESS_MAX = QITEM_ORIGIN_AMT; + QUEST_INTRO_CHAT = "Me... Brainss... Me barrel'o'brainzz..."; + QUEST_INTRO_SOUND = 0; + QUEST_ACTIVATE_CHAT = 0; + QUEST_ACTIVATE_SOUND = "monsters/zombie1/zo_pain1.wav"; + QUEST_FINISHED_CHAT = "Brains..."; + QUEST_FINISHED_SOUND = 0; + QUEST_COMPLETE_CHAT = 0; + QUEST_COMPLETE_SOUND = "monsters/zombie1/orc_zo_alert10.wav"; + QUEST_FADE_ON_COMPLETE = "fade"; + QUEST_GIVER_NAME = "Zombified Dwarf"; + NEW_RACE = "beloved"; + AM_INVINCIBLE = 0; + NEW_WIDTH = 32; + NEW_HEIGHT = 32; + MONSTER_MODEL = 0; + SUBMODEL_GROUPS = "0;2"; + USE_SKIN = 0; + SET_SIEGE_MODE = 0; + QUEST_COMBATANT = 0; + QUEST_ACTIVE_COMBATANT = 0; + QUEST_FOLLOWER = 0; + IS_LEADER = 0; + USE_LANTERN = 1; + LANTERN_COLOR = "(128,64,0)"; + INIT_IDLE_MODE = "sitting"; + QUEST_EXPERT_COMBATANT = 0; + } + + void do_chat_ext_recieve_quest_item() + { + if (QUEST_MODE == "active") + { + if (!(CHAT_BUSY)) + { + chat_now("More... Brains..."); + EmitSound(GetOwner(), 2, "none", 10); + } + } + } + + void ext_receive_quest_item() + { + ScheduleDelayedEvent(0.1, "do_chat_ext_recieve_quest_item"); + } + +} + +} diff --git a/scripts/angelscript/dq/templates/dq_get_item_from_hands_template.as b/scripts/angelscript/dq/templates/dq_get_item_from_hands_template.as new file mode 100644 index 00000000..9c72463f --- /dev/null +++ b/scripts/angelscript/dq/templates/dq_get_item_from_hands_template.as @@ -0,0 +1,128 @@ +#pragma context server + +#include "dq/quests/dq_get_item_from_hands.as" +#include "dq/templates/bases/dq_generic_reward.as" +#include "dq/templates/bases/dq_generic_menus.as" +#include "dq/templates/bases/dq_generic_chat.as" +#include "dq/quest_dwarf.as" + +namespace MS +{ + +class DqGetItemFromHandsTemplate : CGameScript +{ + int AM_INVINCIBLE; + string INIT_IDLE_MODE; + int IS_LEADER; + string LANTERN_COLOR; + int MONSTER_MODEL; + int NEW_HEIGHT; + string NEW_RACE; + int NEW_WIDTH; + string QUEST_ACTIVATE_CHAT; + string QUEST_ACTIVATE_SOUND; + int QUEST_ACTIVE_COMBATANT; + int QUEST_ACTIVE_TEXT; + string QUEST_ASKING_TEXT; + int QUEST_COMBATANT; + string QUEST_COMPLETE_CHAT; + int QUEST_COMPLETE_SOUND; + string QUEST_COMPLETE_TEXT; + string QUEST_DATA1; + int QUEST_DATA2; + int QUEST_DATA3; + int QUEST_EXPERT_COMBATANT; + string QUEST_FADE_ON_COMPLETE; + string QUEST_FINISHED_CHAT; + int QUEST_FINISHED_SOUND; + int QUEST_FOLLOWER; + string QUEST_GIVER_NAME; + string QUEST_INTRO_CHAT; + int QUEST_INTRO_SOUND; + string QUEST_PROGRESS_MAX; + string QUEST_PROGRESS_VAR; + int QUEST_REWARD_ALL; + string QUEST_REWARD_EVENT; + string QUEST_REWARD_TYPE; + int QUEST_SHOW_PROGRESS; + string QUEST_TYPE; + string QUEST_WAITING_TEXT; + int SET_SIEGE_MODE; + string SUBMODEL_GROUPS; + int USE_LANTERN; + int USE_SKIN; + + DqGetItemFromHandsTemplate() + { + QUEST_TYPE = "get_item_from_hands"; + QUEST_DATA1 = "items/mana_bravery;Potion of Not Scared"; + QUEST_DATA2 = 2; + QUEST_DATA3 = 5; + QUEST_REWARD_TYPE = "gm"; + QUEST_REWARD_EVENT = "old_helena_warboss_died"; + QUEST_REWARD_ALL = 0; + QUEST_COMPLETE_TEXT = "(Collect Reward)"; + QUEST_WAITING_TEXT = "Dude, help me fight?"; + QUEST_ASKING_TEXT = "Didn't wanna run Loda anyways"; + QUEST_ACTIVE_TEXT = 0; + QUEST_SHOW_PROGRESS = 0; + QUEST_PROGRESS_VAR = DQ_AMMO_CUR; + QUEST_PROGRESS_MAX = DQ_AMMO_REQUIREMENT; + QUEST_INTRO_CHAT = "But I don't wanna lose XP! Bring me a potion for that, and not that garbage armor!"; + QUEST_INTRO_SOUND = 0; + QUEST_ACTIVATE_CHAT = "Yeah, neither do I."; + QUEST_ACTIVATE_SOUND = "voices/dwarf/vs_ndwarfm1_hit1.wav"; + QUEST_FINISHED_CHAT = "WHEW! Now I can die without repurcussions. Thanks."; + QUEST_FINISHED_SOUND = 0; + QUEST_COMPLETE_CHAT = "I've used an arbitrary event within the GM to spawn gold at the origin of the map. Hope it's not stuck in some wall somewhere."; + QUEST_COMPLETE_SOUND = 0; + QUEST_FADE_ON_COMPLETE = "fade"; + QUEST_GIVER_NAME = "Scared Little Man"; + NEW_RACE = "human"; + AM_INVINCIBLE = 1; + NEW_WIDTH = 32; + NEW_HEIGHT = 32; + MONSTER_MODEL = 0; + SUBMODEL_GROUPS = "0;0"; + USE_SKIN = 4; + SET_SIEGE_MODE = 0; + QUEST_COMBATANT = 0; + QUEST_ACTIVE_COMBATANT = 0; + QUEST_FOLLOWER = 0; + IS_LEADER = 0; + USE_LANTERN = 1; + LANTERN_COLOR = "(128,64,0)"; + INIT_IDLE_MODE = "sitting"; + QUEST_EXPERT_COMBATANT = 0; + } + + void failed_scriptname() + { + if (!(CHAT_BUSY)) + { + chat_now("Remember, I need a potion that makes me not lose XP.", 1.0); + } + } + + void failed_quality() + { + if (!(CHAT_BUSY)) + { + chat_now("Ew gross, someone drank out of this. I want a new one.", 1.0); + } + } + + void give_item() + { + if (QUEST_MODE == QUEST_ACTIVE) + { + if (!(CHAT_BUSY)) + { + chat_now("Thanks, but I still need more.", 1.0); + } + } + } + +} + +} diff --git a/scripts/angelscript/dq/templates/dq_kill_target_template.as b/scripts/angelscript/dq/templates/dq_kill_target_template.as new file mode 100644 index 00000000..647d5da3 --- /dev/null +++ b/scripts/angelscript/dq/templates/dq_kill_target_template.as @@ -0,0 +1,97 @@ +#pragma context server + +#include "dq/quests/dq_kill_target.as" +#include "dq/templates/bases/dq_generic_reward.as" +#include "dq/templates/bases/dq_generic_menus.as" +#include "dq/templates/bases/dq_generic_chat.as" +#include "dq/quest_dwarf.as" + +namespace MS +{ + +class DqKillTargetTemplate : CGameScript +{ + int AM_INVINCIBLE; + string INIT_IDLE_MODE; + int IS_LEADER; + string LANTERN_COLOR; + int MONSTER_MODEL; + int NEW_HEIGHT; + string NEW_RACE; + int NEW_WIDTH; + string QUEST_ACTIVATE_CHAT; + int QUEST_ACTIVATE_SOUND; + int QUEST_ACTIVE_COMBATANT; + string QUEST_ACTIVE_TEXT; + string QUEST_ASKING_TEXT; + int QUEST_COMBATANT; + string QUEST_COMPLETE_CHAT; + int QUEST_COMPLETE_SOUND; + string QUEST_COMPLETE_TEXT; + string QUEST_DATA1; + string QUEST_DATA2; + int QUEST_DATA3; + int QUEST_DATA4; + int QUEST_EXPERT_COMBATANT; + string QUEST_FADE_ON_COMPLETE; + string QUEST_FINISHED_CHAT; + int QUEST_FINISHED_SOUND; + int QUEST_FOLLOWER; + string QUEST_GIVER_NAME; + string QUEST_INTRO_CHAT; + string QUEST_INTRO_SOUND; + int QUEST_REWARD_ALL; + string QUEST_REWARD_EVENT; + string QUEST_REWARD_TYPE; + string QUEST_TYPE; + string QUEST_WAITING_TEXT; + int SET_SIEGE_MODE; + string SUBMODEL_GROUPS; + int USE_LANTERN; + int USE_SKIN; + + DqKillTargetTemplate() + { + QUEST_TYPE = "kill_target"; + QUEST_DATA1 = "monsters/orc_warrior;Badass Phycho"; + QUEST_DATA2 = "killtarget_place"; + QUEST_DATA3 = 1; + QUEST_DATA4 = 0; + QUEST_REWARD_TYPE = "gm"; + QUEST_REWARD_EVENT = "old_helena_warboss_died"; + QUEST_REWARD_ALL = 0; + QUEST_COMPLETE_TEXT = "(Collect Reward)"; + QUEST_WAITING_TEXT = "Hail"; + QUEST_ASKING_TEXT = "Blood? From Borderlands?"; + QUEST_ACTIVE_TEXT = "(In Progress)"; + QUEST_INTRO_CHAT = "Hey. Me and blood here are taking on a bounty. If you help us, I'll cut you in on the reward."; + QUEST_INTRO_SOUND = "amb\squawk1.wav"; + QUEST_ACTIVATE_CHAT = "Borderlands? Look, whether or not you wanna do this, he's around here. Be careful."; + QUEST_ACTIVATE_SOUND = 0; + QUEST_FINISHED_CHAT = "Feel it!"; + QUEST_FINISHED_SOUND = 0; + QUEST_COMPLETE_CHAT = "Well, I suppose it's only fair I cut you in. Thanks."; + QUEST_COMPLETE_SOUND = 0; + QUEST_FADE_ON_COMPLETE = "fade"; + QUEST_GIVER_NAME = "Mordecai"; + NEW_RACE = "human"; + AM_INVINCIBLE = 0; + NEW_WIDTH = 32; + NEW_HEIGHT = 32; + MONSTER_MODEL = 0; + SUBMODEL_GROUPS = "0;0"; + USE_SKIN = 4; + SET_SIEGE_MODE = 0; + QUEST_COMBATANT = 1; + QUEST_ACTIVE_COMBATANT = 0; + QUEST_FOLLOWER = 0; + IS_LEADER = 0; + USE_LANTERN = 1; + LANTERN_COLOR = "(128,64,0)"; + INIT_IDLE_MODE = "sitting"; + QUEST_EXPERT_COMBATANT = 0; + } + +} + +} diff --git a/scripts/angelscript/dq/templates/dq_kill_type_template.as b/scripts/angelscript/dq/templates/dq_kill_type_template.as new file mode 100644 index 00000000..f1f3dea9 --- /dev/null +++ b/scripts/angelscript/dq/templates/dq_kill_type_template.as @@ -0,0 +1,97 @@ +#pragma context server + +#include "dq/quests/dq_kill_type.as" +#include "dq/templates/bases/dq_generic_reward.as" +#include "dq/templates/bases/dq_generic_menus.as" +#include "dq/templates/bases/dq_generic_chat.as" +#include "dq/quest_dwarf.as" + +namespace MS +{ + +class DqKillTypeTemplate : CGameScript +{ + int AM_INVINCIBLE; + string INIT_IDLE_MODE; + int IS_LEADER; + string LANTERN_COLOR; + int MONSTER_MODEL; + int NEW_HEIGHT; + string NEW_RACE; + int NEW_WIDTH; + string QUEST_ACTIVATE_CHAT; + int QUEST_ACTIVATE_SOUND; + int QUEST_ACTIVE_COMBATANT; + string QUEST_ACTIVE_TEXT; + string QUEST_ASKING_TEXT; + int QUEST_COMBATANT; + string QUEST_COMPLETE_CHAT; + int QUEST_COMPLETE_SOUND; + string QUEST_COMPLETE_TEXT; + string QUEST_DATA1; + int QUEST_EXPERT_COMBATANT; + string QUEST_FADE_ON_COMPLETE; + string QUEST_FINISHED_CHAT; + int QUEST_FINISHED_SOUND; + int QUEST_FOLLOWER; + string QUEST_GIVER_NAME; + string QUEST_INTRO_CHAT; + int QUEST_INTRO_SOUND; + string QUEST_PROGRESS_MAX; + string QUEST_PROGRESS_VAR; + int QUEST_REWARD_ALL; + string QUEST_REWARD_EVENT; + string QUEST_REWARD_TYPE; + int QUEST_SHOW_PROGRESS; + string QUEST_TYPE; + string QUEST_WAITING_TEXT; + int SET_SIEGE_MODE; + string SUBMODEL_GROUPS; + int USE_LANTERN; + int USE_SKIN; + + DqKillTypeTemplate() + { + QUEST_TYPE = "kill_type"; + QUEST_DATA1 = "1;orc"; + QUEST_REWARD_TYPE = "gm"; + QUEST_REWARD_EVENT = "old_helena_warboss_died"; + QUEST_REWARD_ALL = 0; + QUEST_COMPLETE_TEXT = "(Collect Reward)"; + QUEST_WAITING_TEXT = "Hey"; + QUEST_ASKING_TEXT = "I'm more just curious"; + QUEST_ACTIVE_TEXT = "(In Progress)"; + QUEST_SHOW_PROGRESS = 1; + QUEST_PROGRESS_VAR = DQ_KILLED; + QUEST_PROGRESS_MAX = DQ_FIND_NUM; + QUEST_INTRO_CHAT = "ORC HEAD ON A STICK JUST 10 GOLD! Wait... I need the orc head first. Help?"; + QUEST_INTRO_SOUND = 0; + QUEST_ACTIVATE_CHAT = "GOOD! I also expect the 10 gold when you're back."; + QUEST_ACTIVATE_SOUND = 0; + QUEST_FINISHED_CHAT = "OK THAT'S GOOD I NEED YOU BACK NOW!"; + QUEST_FINISHED_SOUND = 0; + QUEST_COMPLETE_CHAT = "I lied. Byebye."; + QUEST_COMPLETE_SOUND = 0; + QUEST_FADE_ON_COMPLETE = "fade"; + QUEST_GIVER_NAME = "Weird Dwarf"; + NEW_RACE = "beloved"; + AM_INVINCIBLE = 1; + NEW_WIDTH = 32; + NEW_HEIGHT = 32; + MONSTER_MODEL = 0; + SUBMODEL_GROUPS = "0;0"; + USE_SKIN = 2; + SET_SIEGE_MODE = 0; + QUEST_COMBATANT = 0; + QUEST_ACTIVE_COMBATANT = 0; + QUEST_FOLLOWER = 0; + IS_LEADER = 0; + USE_LANTERN = 1; + LANTERN_COLOR = "(128,64,0)"; + INIT_IDLE_MODE = "sitting"; + QUEST_EXPERT_COMBATANT = 0; + } + +} + +} diff --git a/scripts/angelscript/dq/voldar.as b/scripts/angelscript/dq/voldar.as new file mode 100644 index 00000000..c8a36d13 --- /dev/null +++ b/scripts/angelscript/dq/voldar.as @@ -0,0 +1,517 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class Voldar : CGameScript +{ + int ACTIVE_HORRORS; + int AM_LEAPING; + string ANIM_ATTACK; + string ANIM_ATTACK2; + string ANIM_FLINCH; + string ANIM_HOP; + string ANIM_KICK; + string ANIM_WARCRY; + string AS_ATTACKING; + float ATTACK_ACCURACY; + int ATTACK_SPEED; + int CLOUD_FREQ; + int DID_INTRO; + float DMG_KICK; + int DMG_SLASH; + int DMG_SPIT; + int DO_STUN; + int DROP_GOLD; + int DROP_GOLD_AMT; + int EGG_FREQ; + float FLINCH_CHANCE; + int FLINCH_HEALTH; + int HORNET_FREQ; + int MAKE_ACLOUD; + string MALDORA_ID; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_IFSEEN; + int NPC_PROXACT_RANGE; + string NPC_PROX_ACTIVATE; + string OLD_Z; + int ORC_JUMPER; + string SOUND_DEATH; + string SOUND_WARCRY; + int SPIT_DELAY; + float SPIT_FREQ; + int SUMMON_HORROR; + + Voldar() + { + NPC_BOSS_REGEN_RATE = 0.05; + NPC_BOSS_RESTORATION = 0.25; + NO_SPAWN_STUCK_CHECK = 1; + NPC_GIVE_EXP = 2000; + if (StringToLower(GetMapName()) == "ms_wicardoven") + { + NPC_IS_BOSS = 1; + } + else + { + if (StringToLower(GetMapName()) != "orc_for") + { + NPC_GIVE_EXP = 1000; + } + } + ANIM_HOP = "battleaxe_swing1_L"; + ANIM_ATTACK2 = "battleaxe_swing1_L"; + ANIM_WARCRY = "warcry"; + ANIM_FLINCH = "flinch"; + SPIT_FREQ = 3.0; + CLOUD_FREQ = RandomInt(20, 60); + HORNET_FREQ = RandomInt(10, 30); + EGG_FREQ = RandomInt(20, 40); + ATTACK_SPEED = 300; + MOVE_RANGE = 300; + ANIM_KICK = "kick"; + DMG_SPIT = RandomInt(200, 300); + DMG_KICK = Random(20, 50); + DMG_SLASH = RandomInt(20, 60); + SOUND_WARCRY = "monsters/orc/zo_alert10.wav"; + SOUND_DEATH = "voices/orc/die2.wav"; + Precache(SOUND_DEATH); + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(100, 300); + ANIM_ATTACK = "swordswing1_L"; + FLINCH_CHANCE = 0.35; + FLINCH_HEALTH = 1000; + ATTACK_ACCURACY = 0.9; + Precache("controller/con_idle1.wav"); + Precache("controller/con_idle2.wav"); + Precache("controller/con_idle3.wav"); + Precache("controller/con_attack1.wav"); + Precache("controller/con_attack2.wav"); + Precache("controller/con_attack3.wav"); + Precache("controller/con_die1.wav"); + Precache("debris/bustflesh2.wav"); + Precache("controller/con_pain1.wav"); + Precache("controller/con_die2.wav"); + Precache("bullchicken/bc_attack3.wav"); + Precache("bullchicken/bc_attack2.wav"); + Precache("ambience/steamburst1.wav"); + Precache("monsters/bat/flap_big1.wav"); + Precache("monsters/bat/flap_big2.wav"); + Precache("player/pl_fallpain1.wav"); + Precache("monsters/edwardgorey.mdl"); + Precache("ambience/the_horror1.wav"); + Precache("ambience/the_horror2.wav"); + Precache("ambience/the_horror3.wav"); + Precache("ambience/the_horror4.wav"); + Precache("monsters/egg.mdl"); + Precache("debris/bustflesh1.wav"); + Precache("weapons/g_bounce1.wav"); + Precache("monsters/maldora.mdl"); + Precache("monsters/skeleton/cal_laugh.wav"); + Precache("doors/aliendoor3.wav"); + Precache("magic/spawn.wav"); + Precache("magic/boom.wav"); + Precache("misc/gold.wav"); + NPC_PROXACT_RANGE = 640; + NPC_PROXACT_IFSEEN = 1; + NPC_PROXACT_EVENT = "start_intro"; + } + + void orc_spawn() + { + SetHealth(2500); + SetWidth(32); + SetHeight(60); + SetName("Voldar , former head of the Black Hand"); + SetHearingSensitivity(11); + SetStat("parry", 50); + SetDamageResistance("all", 0.4); + SetRoam(false); + SetProp(GetOwner(), "skin", 3); + ACTIVE_HORRORS = 0; + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 6); + SetSayTextRange(2048); + CatchSpeech("debug_params", "debug"); + string L_MAP_NAME = StringToLower(GetMapName()); + int EXIT_SUB = 1; + if (L_MAP_NAME == "ms_wicardoven") + { + int EXIT_SUB = 0; + } + if (L_MAP_NAME == "voldar_test") + { + int EXIT_SUB = 0; + } + if ((EXIT_SUB)) + { + SetName("Orc Poisoner"); + NPC_PROX_ACTIVATE = 0; + ScheduleDelayedEvent(0.1, "combat_go"); + } + if ((EXIT_SUB)) return; + NPC_PROX_ACTIVATE = 1; + npcatk_suspend_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + SetInvincible(true); + SpawnNPC("ms_wicardoven/maldora_dead", /* TODO: $relpos */ $relpos(0, 64, 0), ScriptMode::Legacy); // params: "valdor" + ScheduleDelayedEvent(0.25, "get_maldora_id"); + } + + void get_maldora_id() + { + string MALDORA_NAME = FindEntityByName("dead_maldora"); + MALDORA_ID = GetEntityIndex(MALDORA_NAME); + ScheduleDelayedEvent(0.1, "face_maldora"); + } + + void face_maldora() + { + ScheduleDelayedEvent(0.1, "scan_for_players"); + } + + void start_intro() + { + PlayAnim("critical", "flinch"); + SayText("You were supposed to help me take back my tribe! But now look what's happened!"); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/voldor_2fmaldora1.wav", 10); + ScheduleDelayedEvent(3.6, "do_intro1"); + } + + void do_intro1() + { + CallExternal(MALDORA_ID, "say_gaveyou1"); + ScheduleDelayedEvent(6.22, "do_intro2"); + } + + void do_intro2() + { + CallExternal(MALDORA_ID, "say_gaveyou2"); + ScheduleDelayedEvent(4.2, "do_intro3"); + } + + void do_intro3() + { + CallExternal(MALDORA_ID, "say_gaveyou3"); + ScheduleDelayedEvent(5.8, "do_intro4"); + } + + void do_intro4() + { + CallExternal(MALDORA_ID, "say_gaveyou4"); + ScheduleDelayedEvent(3.3, "do_intro5"); + } + + void do_intro5() + { + CallExternal(MALDORA_ID, "fly_out"); + SayText(WAAAIIIT!!!!!); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/voldor_2fmaldora2.wav", 10); + PlayAnim("critical", ANIM_WARCRY); + ScheduleDelayedEvent(1.8, "do_intro6"); + } + + void do_intro6() + { + PlayAnim("critical", ANIM_ATTACK); + SayText("Fine! Have to prove my worth , do " + I?); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/voldor_2fmaldora3.wav", 10); + SetMoveDest(FIRST_TARGET); + AS_ATTACKING = GetGameTime(); + ScheduleDelayedEvent(2.0, "combat_go"); + } + + void debug_params() + { + SayText("horrors " + ACTIVE_HORRORS + "leaping " + AM_LEAPING); + } + + void combat_go() + { + DID_INTRO = 1; + SetInvincible(false); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + npcatk_resume_ai(); + cycle_up("voldar_forced"); + CLOUD_FREQ("make_cloud"); + EGG_FREQ("lay_egg"); + UseTrigger("voldar_go"); + ScheduleDelayedEvent(0.1, "set_first_targ"); + } + + void set_first_targ() + { + npcatk_settarget(FIRST_TARGET, "voldar_forced"); + } + + void OnPostSpawn() override + { + ORC_JUMPER = 1; + } + + void run_away() + { + npcatk_flee(GetEntityIndex(param1), 400, 2.0); + } + + void leap_away() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_away2"); + } + + void leap_away2() + { + // PlayRandomSound from: "voices/orc/hit.wav", "voices/orc/hit2.wav", "voices/orc/hit3.wav" + array sounds = {"voices/orc/hit.wav", "voices/orc/hit2.wav", "voices/orc/hit3.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_HOP); + ScheduleDelayedEvent(0.1, "orc_hop"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + } + + void leap_at() + { + if ((AM_LEAPING)) return; + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_at2"); + } + + void leap_at2() + { + // PlayRandomSound from: "voices/orc/hit.wav", "voices/orc/hit2.wav", "voices/orc/hit3.wav" + array sounds = {"voices/orc/hit.wav", "voices/orc/hit2.wav", "voices/orc/hit3.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_HOP); + ScheduleDelayedEvent(0.1, "orc_hop"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + OLD_Z = (GetMonsterProperty("origin")).z; + DO_STUN = 1; + ScheduleDelayedEvent(0.5, "ground_scan"); + } + + void ground_scan() + { + if (!(DO_STUN)) return; + ScheduleDelayedEvent(0.2, "ground_scan"); + string MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + string MY_Z = (GetMonsterProperty("origin")).z; + string DIFF = MY_Z; + DIFF -= MY_GROUND; + if (DIFF < 5) + { + DO_STUN = 0; + } + if ((DO_STUN)) return; + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 30, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128 + } + + void game_hitground() + { + } + + void reset_leaping() + { + AM_LEAPING = 0; + } + + void npc_targetsighted() + { + if ((SPIT_DELAY)) return; + if (!(GetEntityRange(param1) > ATTACK_RANGE)) return; + if ((AM_LEAPING)) return; + if ((IS_FLEEING)) return; + SPIT_DELAY = 1; + SPIT_FREQ("reset_spit_delay"); + AS_ATTACKING = GetGameTime(); + PlayAnim("once", ANIM_ATTACK2); + } + + void reset_spit_delay() + { + SPIT_DELAY = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetMonsterHP() >= 1000) + { + int THRESH = 50; + } + if (GetMonsterHP() < 1000) + { + int THRESH = 25; + } + int ESCAPE_CHANCE = RandomInt(THRESH, 100); + if (param1 > ESCAPE_CHANCE) + { + int ESCAPE_CHOICE = RandomInt(1, 2); + if (ESCAPE_CHOICE == 1) + { + leap_away(GetEntityIndex(m_hLastStruck), "struck_hard"); + } + if (ESCAPE_CHOICE == 2) + { + do_kick(); + } + } + } + + void do_kick() + { + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_KICK); + ScheduleDelayedEvent(1.0, "kick_damage"); + } + + void kick_damage() + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, KICK_DAMAGE, 1.0, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:kick"); + } + + void kick_dodamage() + { + if (!(param1)) return; + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 150, 20)); + run_away(GetEntityIndex(param2)); + } + + void make_cloud() + { + CLOUD_FREQ("make_cloud"); + if (!(false)) return; + MAKE_ACLOUD = 1; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + ScheduleDelayedEvent(2.0, "make_cloud2"); + } + + void make_cloud2() + { + if ((MAKE_ACLOUD)) + { + MAKE_ACLOUD = 0; + ScheduleDelayedEvent(0.1, "magic_fx"); + string CLOUD_ORG = GetEntityOrigin(m_hAttackTarget); + if (!(IsEntityAlive(m_hAttackTarget))) + { + string CLOUD_ORG = /* TODO: $relpos */ $relpos(0, 0, 0); + } + if (GetEntityRange(m_hAttackTarget) > 3000) + { + string CLOUD_ORG = /* TODO: $relpos */ $relpos(0, 0, 0); + } + SpawnNPC("monsters/summon/npc_poison_cloud2", CLOUD_ORG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 100, 20.0, 3 + int EXIT_SUB = 1; + } + } + + void OnFlinch() + { + MAKE_ACLOUD = 0; + } + + void lay_egg() + { + EGG_FREQ("lay_egg"); + if (!(ACTIVE_HORRORS < 2)) return; + SUMMON_HORROR = 1; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_ATTACK2); + EmitSound(GetOwner(), 0, "voices/orc/attack2.wav", 10); + } + + void horror_died() + { + ACTIVE_HORRORS -= 1; + } + + void swing_axe() + { + if ((SUMMON_HORROR)) + { + SUMMON_HORROR = 0; + ACTIVE_HORRORS += 1; + ScheduleDelayedEvent(0.1, "magic_fx"); + EmitSound(GetOwner(), 0, "magic/frost_reverse.wav", 10); + SpawnNPC("monsters/summon/horror_egg", /* TODO: $relpos */ $relpos(0, 30, 50), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + AddVelocity(m_hLastCreated, /* TODO: $relvel */ $relvel(0, 100, 20)); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((IS_FLEEING)) return; + EmitSound(GetOwner(), 0, "bullchicken/bc_attack3.wav", 10); + TossProjectile("proj_poison", /* TODO: $relpos */ $relpos(0, 48, 18), m_hAttackTarget, ATTACK_SPEED, DMG_SPIT, 0, "none"); + Effect("glow", "ent_lastprojectile", Vector3(0, 255, 0), 64, -1, 0); + if (GetEntityRange(m_hAttackTarget) > 200) + { + if (RandomInt(1, 100) > 50) + { + } + leap_at(m_hAttackTarget, ",", "id"); + } + } + + void swing_sword() + { + if (!(DID_INTRO)) return; + baseorc_yell(); + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SLASH, ATTACK_ACCURACY, GetOwner(), GetOwner(), "none", "slash", "dmgevent:swing"); + } + + void swing_dodamage() + { + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_poison", RandomInt(3, 5), GetEntityIndex(GetOwner()), 40); + if (RandomInt(1, 20) == 1) + { + leap_away(GetEntityIndex(param2), "slash_random"); + } + } + + void magic_fx() + { + Effect("glow", GetOwner(), Vector3(255, 0, 0), 64, 2, 2); + } + + void OnDeath(CBaseEntity@ attacker) override + { + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "voldar_test") + { + int TREASURE_MAP = 1; + } + if (L_MAP_NAME == "ms_wicardoven") + { + int TREASURE_MAP = 1; + } + if ((TREASURE_MAP)) + { + bm_gold_spew(25, 2, 75, 4, 30); + } + } + +} + +} diff --git a/scripts/angelscript/dq/voldararcher.as b/scripts/angelscript/dq/voldararcher.as new file mode 100644 index 00000000..c1788b66 --- /dev/null +++ b/scripts/angelscript/dq/voldararcher.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "monsters/orc_sniper.as" + +namespace MS +{ + +class Voldararcher : CGameScript +{ + string ARROW_TYPE; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DOING_KICK; + int DROPS_CONTAINER; + int IS_ARROW; + int KICK_TYPE; + string NPC_DEATH_MSG; + + Voldararcher() + { + ARROW_TYPE = "proj_arrow_gpoison"; + NPC_DEATH_MSG = "You have slain one of Voldar's rangers"; + } + + void orc_spawn() + { + SetProp(GetOwner(), "skin", 3); + SetHealth(220); + SetName("Voldar's Ranger"); + SetHearingSensitivity(2); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + DOING_KICK = 0; + KICK_TYPE = 1; + SetModelBody(0, 3); + SetModelBody(1, 3); + SetModelBody(2, 3); + } + + void OnPostSpawn() override + { + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_gpoison"; + } + + void shoot_arrow() + { + if ((CanSee("enemy", KICK_RANGE))) + { + PlayAnim("once", "break"); + DOING_KICK = 0; + KICK_TYPE = 1; + do_kick(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TARGET_DIST = GetEntityRange(m_hLastSeen); + string FINAL_TARGET = GetEntityOrigin(m_hLastSeen); + FINAL_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, TARGET_DIST)); + TARGET_DIST /= 100; + SetAngles("add_view.pitch"); + float LCL_ATKDMG = Random(ARROW_DAMAGE_LOW, ARROW_DAMAGE_HIGH); + IS_ARROW = 1; + TossProjectile(ARROW_TYPE, /* TODO: $relpos */ $relpos(0, 0, 18), m_hLastSeen, ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + SetModelBody(3, 0); + EmitSound(GetOwner(), SOUND_BOW); + } + +} + +} diff --git a/scripts/angelscript/dq/voldararcher_turret.as b/scripts/angelscript/dq/voldararcher_turret.as new file mode 100644 index 00000000..691508d4 --- /dev/null +++ b/scripts/angelscript/dq/voldararcher_turret.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "dq/voldararcher.as" + +namespace MS +{ + +class VoldararcherTurret : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + int NO_STUCK_CHECKS; + + VoldararcherTurret() + { + ANIM_WALK = "idle1"; + ANIM_RUN = "warcry"; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetRoam(false); + SetMoveSpeed(0.0); + SetProp(GetOwner(), "skin", 3); + } + + void back_off() + { + } + +} + +} diff --git a/scripts/angelscript/dq/voldaraxer.as b/scripts/angelscript/dq/voldaraxer.as new file mode 100644 index 00000000..1e8c29b9 --- /dev/null +++ b/scripts/angelscript/dq/voldaraxer.as @@ -0,0 +1,86 @@ +#pragma context server + +#include "monsters/orc_base.as" + +namespace MS +{ + +class Voldaraxer : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK2; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLINCH_CHANCE; + int MOVE_RANGE; + string NPC_DEATH_MSG; + int NPC_GIVE_EXP; + int ORC_SHIELD; + + Voldaraxer() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 35); + NPC_GIVE_EXP = 110; + DROP_ITEM1 = "axes_poison1"; + DROP_ITEM1_CHANCE = 0.05; + ANIM_ATTACK = "battleaxe_swing1_L"; + ANIM_ATTACK2 = "swordswing1_L"; + FLINCH_CHANCE = 0.55; + NPC_DEATH_MSG = "You have slain one of Voldar's henchmen"; + ATTACK_ACCURACY = 0.85; + ATTACK_DMG_LOW = 20; + ATTACK_DMG_HIGH = 40; + MOVE_RANGE = 64; + ATTACK_RANGE = 72; + ATTACK_HITRANGE = 128; + ORC_SHIELD = 0; + } + + void orc_spawn() + { + SetWidth(40); + SetHeight(90); + SetProp(GetOwner(), "skin", 3); + SetHealth(400); + SetWidth(32); + SetHeight(60); + SetName("one of|Voldar's Henchman"); + SetHearingSensitivity(8); + SetStat("parry", 15); + SetStat("swordsmanship", 10); + SetDamageResistance("all", ".8"); + SetRoam(false); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 1); + } + + void swing_axe() + { + baseorc_yell(); + float L_DMG = Random(ATTACK_DMG_LOW, ATTACK_DMG_HIGH); + XDoDamage(m_hLastSeen, ATTACK_HITRANGE, L_DMG, ATTACK_ACCURACY, GetOwner(), GetOwner(), "none", "slash", "dmgevent:swing"); + } + + void swing_sword() + { + swing_axe(); + } + + void swing_dodamage() + { + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_poison", 5, GetEntityIndex(GetOwner()), RandomInt(10, 15)); + } + +} + +} diff --git a/scripts/angelscript/dq/voldarshaman.as b/scripts/angelscript/dq/voldarshaman.as new file mode 100644 index 00000000..baa83761 --- /dev/null +++ b/scripts/angelscript/dq/voldarshaman.as @@ -0,0 +1,254 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class Voldarshaman : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + string ANIM_FIRE; + string ANIM_SWIPE; + string ANIM_WARCRY; + int ATTACK_ACCURACY; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + float BURN_DAMAGE; + string DEATH_SCRIPT; + int DELAY_SOUND; + int DID_WARCRY; + int DROP_GOLD; + int DROP_GOLD_AMT; + int FIRE_BALL_DAMAGE; + int FIRE_BALL_DELAY; + float FIRE_BALL_FREQ; + float FLINCH_CHANCE; + string GLOW_COLOR; + int GLOW_RAD; + int I_R_GLOWING; + int MELE_HITRANGE; + int MELE_RANGE; + int MOVE_RANGE; + string MY_LIGHT_SCRIPT; + string NPC_DEATH_MSG; + int NPC_GIVE_EXP; + string SKEL_ID; + string SKEL_LIGHT_ID; + string SOUND_FIRECHARGE; + string SOUND_FIRESHOOT; + string SOUND_MELEHIT; + string SOUND_MELEMISS; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + int SWIPE_DAMAGE; + int SWIPE_SOUNDS; + + Voldarshaman() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 30); + NPC_GIVE_EXP = 100; + ANIM_ATTACK = "swordswing1_L"; + FLINCH_CHANCE = 0.45; + AIM_RATIO = 50; + MOVE_RANGE = 256; + ATTACK_RANGE = 5500; + ATTACK_SPEED = 200; + ATTACK_CONE_OF_FIRE = 2; + MELE_RANGE = 96; + MELE_HITRANGE = 128; + ATTACK_ACCURACY = 80; + ANIM_SWIPE = "swordswing1_L"; + ANIM_FIRE = "swordswing1_L"; + ANIM_WARCRY = "warcry"; + SWIPE_DAMAGE = "$rand(25,65)"; + SOUND_MELEMISS = "zombie/claw_miss1.wav"; + SOUND_MELEHIT = "zombie/claw_strike3.wav"; + SOUND_FIRECHARGE = "bullchicken/bc_attack1.wav"; + SOUND_FIRESHOOT = "bullchicken/bc_attack3.wav"; + SOUND_WARCRY1 = "monsters/orc/attack1.wav"; + SOUND_WARCRY2 = "monsters/orc/attack3.wav"; + FIRE_BALL_DAMAGE = "$rand(75,100)"; + BURN_DAMAGE = "$randf(10,20)"; + FIRE_BALL_FREQ = 2.0; + DEATH_SCRIPT = "monsters/horror"; + NPC_DEATH_MSG = "You have slain one of Voldar's shamans"; + Precache("controller/con_idle1.wav"); + Precache("controller/con_idle2.wav"); + Precache("controller/con_idle3.wav"); + Precache("controller/con_attack1.wav"); + Precache("controller/con_attack2.wav"); + Precache("controller/con_attack3.wav"); + Precache("controller/con_die1.wav"); + Precache("debris/bustflesh2.wav"); + Precache("controller/con_pain1.wav"); + Precache("controller/con_die2.wav"); + Precache("bullchicken/bc_attack3.wav"); + Precache("bullchicken/bc_attack2.wav"); + Precache("ambience/steamburst1.wav"); + Precache("monsters/bat/flap_big1.wav"); + Precache("monsters/bat/flap_big2.wav"); + Precache("player/pl_fallpain1.wav"); + Precache("monsters/edwardgorey.mdl"); + } + + void orc_spawn() + { + SetProp(GetOwner(), "skin", 3); + SetHealth(220); + SetName("one of|Voldar's Shamans"); + SetHearingSensitivity(8); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + SetDamageResistance("lightning", 3.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("poison", 0.0); + SetStat("spellcasting", 30); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + } + + void npc_selectattack() + { + if ((DELAY_SOUND)) return; + if ((CanSee("enemy", MELE_RANGE))) return; + DELAY_SOUND = 1; + EmitSound(GetOwner(), 0, SOUND_FIRECHARGE, 10); + } + + void swing_sword() + { + if ((CanSee("enemy", MELE_RANGE))) + { + ANIM_ATTACK = ANIM_SWIPE; + swipe_attack(GetEntityIndex(m_hLastSeen)); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((false)) + { + if (!(CanSee("enemy", MOVE_RANGE))) + { + ANIM_ATTACK = ANIM_RUN; + } + if ((CanSee("enemy", MOVE_RANGE))) + { + ANIM_ATTACK = ANIM_WARCRY; + } + } + if ((FIRE_BALL_DELAY)) return; + ANIM_ATTACK = ANIM_FIRE; + throw_fireball(); + } + + void throw_fireball() + { + if (!(false)) return; + EmitSound(GetOwner(), 0, SOUND_FIRESHOOT, 10); + TossProjectile("proj_acid_bolt", /* TODO: $relpos */ $relpos(0, 48, 18), "none", ATTACK_SPEED, FIRE_BALL_DAMAGE, ATTACK_CONE_OF_FIRE, "none"); + DELAY_SOUND = 0; + } + + void reset_fireball() + { + ANIM_ATTACK = ANIM_FIRE; + DID_WARCRY = 0; + FIRE_BALL_DELAY = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SpawnNPC(DEATH_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 20), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityIndex(m_hLastStruck) + SpawnNPC("monsters/summon/npc_poison_cloud2", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 100, 10.0, 1 + } + + void swipe_attack() + { + if (GetEntityRange(m_hAttackTarget) > MELE_RANGE) + { + throw_fireball(); + } + SWIPE_SOUNDS = 1; + npcatk_dodamage(param1, MELE_HITRANGE, SWIPE_DAMAGE, ATTACK_ACCURACY); + } + + void game_dodamage() + { + if (!(SWIPE_SOUNDS)) return; + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_MELEMISS, 10); + } + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_MELEHIT, 10); + ApplyEffect(param2, "effects/dot_poison", RandomInt(5, 10), GetEntityIndex(GetOwner()), Random(10, 40)); + } + SWIPE_SOUNDS = 0; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (!(GetEntityRange(m_hLastStruck) < MELE_RANGE)) return; + ANIM_ATTACK = ANIM_SWIPE; + npcatk_settarget(GetEntityIndex(m_hLastStruck)); + } + + void npc_attack() + { + if (!(ANIM_ATTACK == ANIM_WARCRY)) return; + if ((DID_WARCRY)) return; + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DID_WARCRY = 1; + } + + void cycle_up() + { + if (!(true)) return; + if (!(I_R_GLOWING)) + { + light_on(); + } + } + + void client_activate() + { + GLOW_RAD = 200; + const int NO_LOOP_DETECT = 1; + SKEL_ID = param1; + GLOW_COLOR = param2; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + } + + void light_on() + { + if ((I_R_GLOWING)) return; + I_R_GLOWING = 1; + ClientEvent("persist", "all", currentscript, GetEntityIndex(GetOwner()), Vector3(0, 255, 0)); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + +} + +} diff --git a/scripts/angelscript/dq/voldarwarrior.as b/scripts/angelscript/dq/voldarwarrior.as new file mode 100644 index 00000000..dec847de --- /dev/null +++ b/scripts/angelscript/dq/voldarwarrior.as @@ -0,0 +1,86 @@ +#pragma context server + +#include "monsters/orc_base.as" + +namespace MS +{ + +class Voldarwarrior : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK2; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLINCH_CHANCE; + int MOVE_RANGE; + string NPC_DEATH_MSG; + int NPC_GIVE_EXP; + int ORC_SHIELD; + + Voldarwarrior() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 35); + NPC_GIVE_EXP = 80; + DROP_ITEM1 = "swords_poison1"; + DROP_ITEM1_CHANCE = 0.1; + ANIM_ATTACK = "battleaxe_swing1_L"; + ANIM_ATTACK2 = "swordswing1_L"; + FLINCH_CHANCE = 0.55; + NPC_DEATH_MSG = "You have slain one of Voldar's henchmen"; + ATTACK_ACCURACY = 0.8; + ATTACK_DMG_LOW = 10; + ATTACK_DMG_HIGH = 20; + MOVE_RANGE = 64; + ATTACK_RANGE = 72; + ATTACK_HITRANGE = 128; + ORC_SHIELD = 0; + } + + void orc_spawn() + { + SetWidth(40); + SetHeight(90); + SetProp(GetOwner(), "skin", 3); + SetHealth(250); + SetWidth(32); + SetHeight(60); + SetName("one of|Voldar's Henchman"); + SetHearingSensitivity(8); + SetStat("parry", 15); + SetStat("swordsmanship", 10); + SetDamageResistance("all", ".8"); + SetRoam(false); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 4); + } + + void swing_axe() + { + baseorc_yell(); + float L_DMG = Random(ATTACK_DMG_LOW, ATTACK_DMG_HIGH); + XDoDamage(m_hLastSeen, ATTACK_HITRANGE, L_DMG, ATTACK_ACCURACY, GetOwner(), GetOwner(), "none", "slash", "dmgevent:swing"); + } + + void swing_sword() + { + swing_axe(); + } + + void swing_dodamage() + { + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_poison", 5, GetEntityIndex(GetOwner()), RandomInt(5, 10)); + } + +} + +} diff --git a/scripts/angelscript/dridje/boss1.as b/scripts/angelscript/dridje/boss1.as new file mode 100644 index 00000000..f2590c1a --- /dev/null +++ b/scripts/angelscript/dridje/boss1.as @@ -0,0 +1,194 @@ +#pragma context server + +#include "monsters/rabid_skele_base.as" + +namespace MS +{ + +class Boss1 : CGameScript +{ + int AM_CLOAKED; + int BEAMS_INITED; + string BEAM_ID1; + string BEAM_ID2; + string BEAM_TARG; + string BEAM_TARGET; + float DUR_CLOAK; + int FREQ_CLOAK; + float FREQ_PROJECTILE; + int NPC_GIVE_EXP; + + Boss1() + { + FREQ_PROJECTILE = 5.0; + FREQ_CLOAK = RandomInt(15, 30); + DUR_CLOAK = 10.0; + } + + void rabid_skele_spawn() + { + SetName("Etherial Bone"); + SetModel("monsters/rabid_skelly.mdl"); + SetRace("undead"); + SetBloodType("none"); + SetHearingSensitivity(4); + NPC_GIVE_EXP = 60; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetWidth(32); + SetHeight(64); + SetProp(GetOwner(), "skin", 5); + SetHealth(2000); + SetDamageResistance("holy", 2.0); + SetDamageResistance("cold", 0.5); + SetDamageResistance("lightning", 0.0); + AM_CLOAKED = 0; + BEAM_ID1 = "unset"; + BEAM_ID2 = "unset"; + BEAMS_INITED = 0; + } + + void cycle_up() + { + start_cycles(); + } + + void cycle_npc() + { + start_cycles(); + } + + void start_cycles() + { + FREQ_CLOAK("do_cloak"); + FREQ_PROJECTILE("check_projectile"); + } + + void check_projectile() + { + if ((AM_CLOAKED)) return; + GetAllPlayers(PLAYER_LIST); + ScrambleTokens(PLAYER_LIST, ";"); + if (!(BEAMS_INITED)) + { + init_beams(); + } + BEAM_TARGET = "unset"; + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + pick_beam_target(); + } + if (!(BEAM_TARGET != "unset")) return; + do_beam(); + } + + void do_beam() + { + EmitSound(GetOwner(), 0, SOUND_BEAM_WARMUP, 10); + PlayAnim("critical", ANIM_PROJECTILE); + } + + void mdl_projectile() + { + EmitSound(GetOwner(), 0, SOUND_BEAM_FIRE, 10); + Effect("beam", "update", BEAM_ID1, "end_target", BEAM_TARGET, 0); + Effect("beam", "update", BEAM_ID2, "end_target", BEAM_TARGET, 0); + Effect("beam", "update", BEAM_ID1, "brightness", 200); + Effect("beam", "update", BEAM_ID2, "brightness", 200); + DoDamage(BEAM_TARGET, "direct", DMG_BEAM, 1.0, GetOwner()); + AddVelocity(BEAM_TARGET, /* TODO: $relvel */ $relvel(0, 800, 1000)); + } + + void pick_beam_target() + { + if ((IsEntityAlive(BEAM_TARG))) return; + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + if (!(GetEntityRange(CUR_PLAYER) < 1024)) return; + string TARG_ORG = GetEntityOrigin(CUR_PLAYER); + string START_TRACE = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_ORG = TraceLine(START_TRACE, TARG_ORG); + if (!(START_TRACE == TARG_ORG)) return; + BEAM_TARG = CUR_PLAYER; + } + + void init_beams() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 0, GetOwner(), 1, Vector3(200, 255, 50), 0, 30, -1); + BEAM_ID1 = GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(0.5, "init_beams2"); + } + + void init_beams2() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 0, GetOwner(), 1, Vector3(200, 255, 50), 0, 30, -1); + BEAM_ID2 = GetEntityIndex(m_hLastCreated); + } + + void do_cloak() + { + EmitSound(GetOwner(), 0, SOUND_CLOAK, 10); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 256, 2, 2); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SetAnimMoveSpeed(5.0); + npcatk_flee(GetEntityIndex(m_hLastStruck), 2048, DUR_CLOAK); + AM_CLOAKED = 1; + SetCallback("touch", "enable"); + DUR_CLOAK("end_cloak"); + } + + void end_cloak() + { + EmitSound(GetOwner(), 0, SOUND_CLOAK, 10); + SetCallback("touch", "disabled"); + AM_CLOAKED = 0; + Effect("glow", GetOwner(), Vector3(255, 255, 255), 256, 2, 2); + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + SetAnimMoveSpeed(2.0); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(AM_CLOAKED)) return; + if (!(GetRelationship(param1) == "enemy")) return; + AddVelocity(param1, /* TODO: $relvel */ $relvel(0, 800, 400)); + } + + void OnDamage(int damage) override + { + if (!(AM_CLOAKED)) + { + string T_BOX = /* TODO: $get_tbox */ $get_tbox("players", 256); + if (T_BOX != "none") + { + } + if (GetTokenCount(T_BOX, ";") > 2) + { + } + do_cloak(); + } + if (!(AM_CLOAKED)) return; + int CAN_HIT = 0; + if (param3 != "magic") + { + int CAN_HIT = 1; + } + if (param3 != "holy") + { + int CAN_HIT = 1; + } + if (param3 != "dark") + { + int CAN_HIT = 1; + } + if ((CAN_HIT)) return; + SetDamage("hit"); + SetDamage("dmg"); + return; + } + +} + +} diff --git a/scripts/angelscript/dridje/gloam_sitter.as b/scripts/angelscript/dridje/gloam_sitter.as new file mode 100644 index 00000000..97b7561f --- /dev/null +++ b/scripts/angelscript/dridje/gloam_sitter.as @@ -0,0 +1,100 @@ +#pragma context server + +namespace MS +{ + +class GloamSitter : CGameScript +{ + string ENEMY_ID; + string SLAYER_ID; + + void OnRepeatTimer() + { + SetRepeatDelay(Random(10, 60)); + PlayAnim("once", "cowering_in_corner"); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(2.0); + if ((IsEntityAlive(GetOwner()))) + { + } + ENEMY_ID = /* TODO: $get_insphere */ $get_insphere(256, "enemy"); + if ((IsEntityAlive(ENEMY_ID))) + { + } + int RND_ANIM = RandomInt(1, 2); + if (RND_ANIM == 1) + { + PlayAnim("once", "sstruggleidle"); + } + if (RND_ANIM == 2) + { + PlayAnim("once", "sstruggle"); + } + string NME_TARGET = GetEntityProperty(ENEMY_ID, "scriptvar"); + if (GetEntityName(NME_TARGET) != "Frightened Mercenary") + { + } + CallExternal(ENEMY_ID, "npcatk_settarget", GetEntityIndex(GetOwner())); + } + + void OnSpawn() override + { + SetHealth(1); + SetName("Frightened Mercenary"); + SetWidth(32); + SetHeight(64); + SetRoam(false); + SetRace("human"); + SetBloodType("red"); + SetModel("npc/guard1.mdl"); + SetModelBody(1, 0); + SetIdleAnim("sitidle"); + SetMoveAnim("sitidle"); + PlayAnim("once", "sitidle"); + SetBlind(true); + SetNoPush(true); + SetMenuAutoOpen(1); + ScheduleDelayedEvent(10.0, "get_slayer_id"); + } + + void get_slayer_id() + { + SLAYER_ID = FindEntityByName("agrath"); + } + + void say_hi() + { + PlayAnim("once", "cowering_in_corner"); + SayText("Have you seen those things!? " + I + " m not going in there again!"); + } + + void game_menu_getoptions() + { + if (!(IsEntityAlive(GetOwner()))) return; + string reg.mitem.title = "Hail."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + } + + void OnDamage(int damage) override + { + if (!(IsValidPlayer(param1))) return; + SetDamage("dmg"); + SetDamage("hit"); + return; + } + + void OnDeath(CBaseEntity@ attacker) override + { + PlayAnim("hold", "diebackward"); + // PlayRandomSound from: "voices/kcult_die1.wav", "voices/human/male_die.wav" + array sounds = {"voices/kcult_die1.wav", "voices/human/male_die.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/dridje/gloam_slayer.as b/scripts/angelscript/dridje/gloam_slayer.as new file mode 100644 index 00000000..7df461b9 --- /dev/null +++ b/scripts/angelscript/dridje/gloam_slayer.as @@ -0,0 +1,669 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class GloamSlayer : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SPELL_OTHER; + string ANIM_SPELL_SELF; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BATTLE_OVER; + int BATTLLE_OVER; + string BUSY_CHATTING; + float CHAT_DELAY; + string CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEP7; + string CHAT_STEP8; + string CHAT_STEPS; + string CONVO_TYPE; + string CONV_ANIMS; + string CURRENT_SPEAKER; + string DID_INTRO; + string DONE_WARNING; + string ESCORT_TARGET; + int FORCED_MOVE_DEST; + float FREQ_FF_WARN; + float FREQ_GLOAM; + float FREQ_ICE_SHIELD; + int IN_BATTLE; + string LAST_DAMAGED; + string MAGIC_LIST; + int MAX_REWARDS_TOGIVE; + string MENU_TARGET; + int MISSION_ACCEPTED; + int MOVE_RANGE; + string NEXT_FF_WARNING; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int NO_STUCK_CHECKS; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string NPC_STUCK_CHECKS; + int N_REWARDS_GIVEN; + string OFFERING_REWARD; + string QUEST_WINNER; + string REWARD_LIST; + string REWARD_NAMES; + int SCHAT_STEP; + string SCHAT_STEP1; + string SCHAT_STEP2; + string SCHAT_STEP3; + int SCHAT_STEPS; + string SOUND_DEATH; + string SOUND_STRUCK; + + GloamSlayer() + { + FREQ_GLOAM = 120.0; + CONV_ANIMS = "converse2;talkleft;talkright;lean;pondering2;pondering3;yes;c1a0_catwalkidle;quicklook"; + MAGIC_LIST = "fire;ice;lightning;earth;poison;acid;magic;"; + FREQ_FF_WARN = 10.0; + CHAT_DELAY = 5.5; + REWARD_LIST = "scroll2_lightning_storm;blunt_granitemace;blunt_darkmaul;blunt_gauntlets_serpant;mana_leadfoot;armor_helm_golden;item_charm_w3;"; + REWARD_NAMES = "a Lightning Storm Scroll;a Granite Mace;a Dark Maul;Serpant Gauntlets;a Potion of Stability;a Golden Helm;a Shadow Wolf Charm;"; + N_REWARDS_GIVEN = 0; + MAX_REWARDS_TOGIVE = 0; + SOUND_STRUCK = "body/flesh1.wav"; + SOUND_DEATH = "voices/human/male_die.wav"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "diebackward"; + ANIM_ATTACK = "swordswing1_l"; + MOVE_RANGE = 32; + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE = "$randf(50,200)"; + NPC_GIVE_EXP = 0; + NO_JOB = 1; + NO_RUMOR = 1; + NO_HAIL = 1; + ANIM_SPELL_SELF = "return_needle"; + ANIM_SPELL_OTHER = "give_shot"; + FREQ_ICE_SHIELD = 60.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(30.1); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 255), 96, 30.0); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(20.0); + if ((IN_BATTLE)) + { + } + float TIME_DIFF = GetGameTime(); + TIME_DIFF -= LAST_DAMAGED; + if (TIME_DIFF > FREQ_GLOAM) + { + LogDebug("******* SPAWNING GLOAM *******"); + string SUMMON_POS = GetEntityOrigin(GetOwner()); + SUMMON_POS += "z"; + SpawnNPC("monsters/gloam1", SUMMON_POS, ScriptMode::Legacy); + LAST_DAMAGED = GetGameTime(); + } + } + + void game_precache() + { + Precache("monsters/gloam1"); + } + + void OnSpawn() override + { + SetName("agrath"); + SetName("Agrath the Gloam Hunter"); + SetInvincible(true); + SetRoam(false); + SetBloodType("red"); + NO_STUCK_CHECKS = 1; + SetRace("human"); + SetWidth(32); + SetHeight(96); + SetHealth(1000); + SetSayTextRange(1024); + SetHearingSensitivity(8); + SetModel("npc/royal_guard2.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim("walk"); + ScheduleDelayedEvent(1.0, "set_critical"); + SetAnimMoveSpeed(2.0); + SetMoveSpeed(2.0); + ScheduleDelayedEvent(2.0, "light_up"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_gloam", "gloam"); + CatchSpeech("say_yes", "yes"); + } + + void set_critical() + { + if ((NPC_CRITICAL)) return; + critical_npc(); + } + + void OnDamage(int damage) override + { + if ((BATTLE_OVER)) + { + SetDamage("dmg"); + SetDamage("hit"); + return; + int EXIT_SUB = 1; + } + if (!(IN_BATTLE)) + { + SetDamage("dmg"); + SetDamage("hit"); + return; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + EmitSound(GetOwner(), 0, SOUND_STRUCK, 5); + if (!(IsValidPlayer(param1))) + { + LAST_DAMAGED = GetGameTime(); + } + if (!(IsValidPlayer(param1))) return; + if (!(GetGameTime() > NEXT_FF_WARNING)) return; + NEXT_FF_WARNING = GetGameTime(); + NEXT_FF_WARNING += FREQ_FF_WARN; + if ((param3).findFirst("effect") >= 0) + { + int IS_SPELL = 1; + } + if (FindToken(MAGIC_LIST, param3, ";") > -1) + { + int IS_SPELL = 1; + } + if ((IS_SPELL)) + { + if (GetEntityRange(param1) > 256) + { + SayText("Watch where you cast those things!"); + } + else + { + string NAME_PRE = GetEntityName(param1); + NAME_PRE += "!"; + SayText(NAME_PRE + " Check your targets!"); + } + } + if (!(IS_SPELL)) + { + if (GetEntityRange(param1) < 256) + { + SayText("Careful where you swing that!"); + } + else + { + SayText(GetEntityName(param1) + " , watch your targets!"); + } + } + } + + void say_hi() + { + if ((IN_BATTLE)) return; + if ((BUSY_CHATTING)) return; + if ((IsValidPlayer(param1))) + { + CURRENT_SPEAKER = GetEntityIndex(param1); + face_speaker(CURRENT_SPEAKER); + } + if ((IsValidPlayer("ent_lastspoke"))) + { + CURRENT_SPEAKER = GetEntityIndex("ent_lastspoke"); + face_speaker(CURRENT_SPEAKER); + } + if (!(BATTLE_OVER)) + { + DID_INTRO = 1; + PlayAnim("critical", "idle4"); + ScheduleDelayedEvent(2.0, "fix_anims"); + CONVO_TYPE = "intro"; + CHAT_STEPS = 4; + CHAT_STEP = 0; + CHAT_STEP1 = "Bah! Hail there. I am known as Agrath of the Royal Guard. The King sent me here to clear this isle of gloams that we may begin logging the forest safely."; + CHAT_STEP2 = "But I never imagined there would be so many such beasts in this jungle, and this sad contigent I brought with me would be mere fodder for them."; + if (GetPlayerCount() > 1) + { + CHAT_STEP3 = "You lads look a bit more up to a battle, more so than this sad lot anyways."; + } + if (GetPlayerCount() == 1) + { + CHAT_STEP3 = "You may yet make better escort than all this sad lot combined."; + } + CHAT_STEP4 = "If you will serve as my escort and ferret these beasts out, you will be well rewarded for your efforts."; + BUSY_CHATTING = 1; + chat_loop(); + } + if ((BATTLE_OVER)) + { + PlayAnim("critical", "yes"); + ScheduleDelayedEvent(2.0, "fix_anims"); + SayText("Thanks again for your assistance."); + } + } + + void open_menu() + { + OpenMenu(CURRENT_SPEAKER); + } + + void chat_loop() + { + if (!(CHAT_STEP > 1)) return; + ScheduleDelayedEvent(1.0, "convo_anim"); + if (CHAT_STEP == 4) + { + if (CONVO_TYPE == "intro") + { + } + SetMoveDest(CURRENT_SPEAKER); + ScheduleDelayedEvent(2.0, "open_menu"); + } + if (CHAT_STEP == 8) + { + if (CONVO_TYPE == "info_talk") + { + } + SetMoveDest(CURRENT_SPEAKER); + CONVO_TYPE = "intro"; + ScheduleDelayedEvent(2.0, "open_menu"); + } + if (CHAT_STEP == 3) + { + if (CONVO_TYPE == "pep_talk") + { + } + DONE_WARNING = 1; + } + } + + void game_menu_getoptions() + { + LogDebug("game_menu_getoptions"); + if ((BUSY_CHATTING)) + { + string reg.mitem.title = "(Busy Chatting)"; + string reg.mitem.type = "disabled"; + string reg.mitem.callback = "none"; + } + if ((IN_BATTLE)) + { + string HP_TITLE = "HP ("; + HP_TITLE += int(GetEntityHealth(GetOwner())); + HP_TITLE += "/"; + HP_TITLE += int(GetEntityMaxHealth(GetOwner())); + HP_TITLE += ")"; + string reg.mitem.title = HP_TITLE; + string reg.mitem.type = "disabled"; + string reg.mitem.callback = "none"; + } + if ((BUSY_CHATTING)) return; + if (CONVO_TYPE != "intro") + { + if (!(IN_BATTLE)) + { + } + if (CONVO_TYPE != "give_list") + { + } + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + } + if (CONVO_TYPE == "intro") + { + string reg.mitem.title = "Yes, I'll help."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "dude_said_yes"; + string reg.mitem.title = "What are Gloams?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_gloam"; + string reg.mitem.title = "Sorry, busy."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "player_deny"; + } + if ((BATTLE_OVER)) + { + if (CONVO_TYPE != "give_list") + { + } + if (!(GetEntityProperty(param1, "scriptvar"))) + { + } + string reg.mitem.title = "Collect reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_reward"; + } + if (CONVO_TYPE == "give_list") + { + if (!(GetEntityProperty(param1, "scriptvar"))) + { + } + OFFERING_REWARD = param1; + for (int i = 0; i < GetTokenCount(REWARD_LIST, ";"); i++) + { + add_rewards(); + } + CONVO_TYPE = "none"; + } + } + + void add_rewards() + { + if (!(RandomInt(1, 100) <= 75)) return; + N_REWARDS += 1; + string CUR_IDX = i; + string CUR_REWARD = GetToken(REWARD_LIST, CUR_IDX, ";"); + string CUR_NAME = GetToken(REWARD_NAMES, CUR_IDX, ";"); + string reg.mitem.title = CUR_NAME; + string reg.mitem.type = "callback"; + string reg.mitem.data = CUR_IDX; + string reg.mitem.cb_failed = "no_want"; + string reg.mitem.callback = "give_selected_reward"; + LogDebug("add_rewards reg.mitem.title reg.mitem.callback"); + } + + void game_menu_cancel() + { + LogDebug("game_menu_cancel CONVO_TYPE GetEntityName(param1)"); + if (!(OFFERING_REWARD == param1)) return; + SayText(I + "see. " + A + " noble warrior for whom the battle is reward enough. Good show."); + CallExternal(OFFERING_REWARD, "ext_set_reward", 1); + CONVO_TYPE = "none"; + } + + void give_selected_reward() + { + LogDebug("give_selected_reward GetEntityName(param1) PARAM2"); + N_REWARDS_GIVEN += 1; + // TODO: offer PARAM1 GetToken(REWARD_LIST, param2, ";") + CallExternal(param1, "ext_set_reward", 1); + } + + void say_yes() + { + if (!(CONVO_TYPE == "intro")) return; + dude_said_yes(GetEntityIndex("ent_lastspoke")); + } + + void dude_said_yes() + { + if (!(true)) return; + if ((MISSION_ACCEPTED)) return; + if ((DONE_WARNING)) return; + if (!(IsEntityAlive(param1))) return; + MISSION_ACCEPTED = 1; + ESCORT_TARGET = param1; + cycle_up("manual_override"); + CONVO_TYPE = "none"; + QUEST_WINNER = param1; + PlayAnim("critical", "yes"); + IN_BATTLE = 1; + NO_STUCK_CHECKS = 1; + DONE_WARNING = 0; + CONVO_TYPE = "pep_talk"; + SCHAT_STEPS = 3; + SCHAT_STEP = 0; + SCHAT_STEP1 = "Alright, the forest beyond that barricade is completely infested with [Gloams]. Nasty work, Gloams are..."; + SCHAT_STEP2 = "If we can slay all the elder, Ether Gloams, the rest shouldnt give us any trouble, and most likely will flee."; + SCHAT_STEP3 = "Be ready for a good fight. Ill follow you in, but these novices will have to stay behind. No point in leading them to a slaughter."; + BUSY_CHATTING = 1; + ScheduleDelayedEvent(1.0, "special_chat_loop"); + SetInvincible(false); + UseTrigger("ether_gloams_go"); + FREQ_ICE_SHIELD("do_ice_shield"); + } + + void special_chat_loop() + { + SCHAT_STEP += 1; + if (SCHAT_STEP == SCHAT_STEPS) + { + BUSY_CHATTING = 0; + } + if (SCHAT_STEP > SCHAT_STEPS) + { + BUSY_CHATTING = 0; + SCHAT_STEP = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SCHAT_STEP <= SCHAT_STEPS)) return; + CHAT_DELAY("special_chat_loop"); + if (SCHAT_STEP == 1) + { + SayText(SCHAT_STEP1); + } + if (SCHAT_STEP == 2) + { + SayText(SCHAT_STEP2); + } + if (SCHAT_STEP == 3) + { + SayText(SCHAT_STEP3); + DONE_WARNING = 1; + } + } + + void player_deny() + { + CONVO_TYPE = "none"; + PlayAnim("critical", "no"); + CONVO_TYPE = "angry"; + CHAT_STEPS = 2; + CHAT_STEP = 0; + CHAT_STEP1 = "Bah, coward! I suppose I could order you in the name of the king..."; + CHAT_STEP2 = "but I'd rather beat these swine into shape than have an escort who'll run at the first sign of danger!"; + BUSY_CHATTING = 1; + chat_loop(); + } + + void say_gloam() + { + if (!(IN_BATTLE)) + { + ScheduleDelayedEvent(2.0, "fix_anims"); + CONVO_TYPE = "info_talk"; + CHAT_STEPS = 8; + CHAT_STEP = 0; + CHAT_STEP1 = "I've seen all sorts of gloams: gloams of stone, of ice, and of fire. Tis why they've sent me, I suppose."; + CHAT_STEP2 = "These gloams here are the more common, tropical variety. Slimy beasts tend to show up in abandoned wetlands such as this jungle."; + CHAT_STEP3 = "They move fast, are tough, and in addition to the usual motivation of hunger, are likely also defending their nests."; + CHAT_STEP4 = "The ether gloams are the elder ones. It seems a good gloam never dies, it just fades away. Sadly, this means the creatures can turn invisible."; + CHAT_STEP5 = "While they are invisible they are neigh impossible to hit, and if they touches you while in their ethereal state, it'll give you a nasty wallup."; + CHAT_STEP6 = "The ether gloams are vulnerable to holy weapons due to their unnatural state, so if you have any, have them at the ready..."; + CHAT_STEP7 = "But beware that the same does not apply to the younger ones. For, as the wizards tell me, they are beastly, but still of this world."; + CHAT_STEP8 = "Beyond that all I can say is keep a sharp eye and a steady hand, and ye may yet survive with all your limbs uneaten."; + BUSY_CHATTING = 1; + chat_loop(); + } + else + { + SayText("Oh " + NOW + "you want to hear about the gloams!? " + A + " bit busy at the moment! You ll learn anything I could have taught you the hard way soon enough!"); + } + } + + void gloam_raid_over() + { + NO_STUCK_CHECKS = 0; + MAX_REWARDS_TOGIVE = GetPlayerCount(); + BATTLE_OVER = 1; + npcatk_walk(); + npcatk_clear_targets(); + BATTLLE_OVER = 1; + IN_BATTLE = 0; + FORCED_MOVE_DEST = 1; + SetMoveDest(QUEST_WINNER); + SetInvincible(true); + ScheduleDelayedEvent(1.0, "hunt_quest_winner_loop"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(DONE_WARNING)) return; + if (!(m_hAttackTarget == "unset")) return; + if (!(IsEntityAlive(ESCORT_TARGET))) return; + string ESCORT_DIST = GetEntityRange(ESCORT_TARGET); + if (ESCORT_DIST > 128) + { + NPC_STUCK_CHECKS = 0; + npcatk_setmovedest(ESCORT_TARGET, 128); + if (ESCORT_DIST > 384) + { + SetMoveAnim(ANIM_RUN); + } + else + { + SetMoveAnim(ANIM_WALK); + } + } + else + { + NPC_STUCK_CHECKS = 0; + SetMoveDest("none"); + string ESCORT_FACE = GetEntityProperty(ESCORT_TARGET, "angles.yaw"); + SetAngles("face"); + } + } + + void give_reward() + { + if (N_REWARDS_GIVEN >= MAX_REWARDS_TOGIVE) + { + SayText("Sorry , " + I + " ve nothing left to offer."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + NPC_FORCED_MOVEDEST = 1; + PlayAnim("critical", "yes"); + if ((IsEntityAlive(param1))) + { + SetMoveDest(param1); + } + ScheduleDelayedEvent(2.0, "fix_anims"); + if ((GetEntityProperty(param1, "scriptvar"))) return; + SayText("Thank you for your fine aid in battle! Please select a reward , courtesy of the king..."); + CONVO_TYPE = "give_list"; + if ((IsEntityAlive(param1))) + { + MENU_TARGET = param1; + } + if (!(IsEntityAlive(param1))) + { + MENU_TARGET = QUEST_WINNER; + } + ScheduleDelayedEvent(0.1, "send_menu"); + } + + void send_menu() + { + OpenMenu(MENU_TARGET); + } + + void fix_anims() + { + SetMoveAnim("walk"); + SetIdleAnim("idle1"); + PlayAnim("once", "idle1"); + } + + void attack_1() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE); + } + + void do_ice_shield() + { + if (!(IN_BATTLE)) return; + FREQ_ICE_SHIELD("do_ice_shield"); + if ((false)) + { + if ((IsValidPlayer(m_hLastSeen))) + { + } + int CANT_SHIELD_TARGET = 0; + if ((GetEntityProperty(m_hLastSeen, "haseffect"))) + { + int CANT_SHIELD_TARGET = 1; + } + if ((GetEntityProperty(m_hLastSeen, "scriptvar"))) + { + int CANT_SHIELD_TARGET = 1; + } + if (!(CANT_SHIELD_TARGET)) + { + SetMoveDest(m_hLastSeen); + PlayAnim("critical", ANIM_SPELL_OTHER); + ApplyEffect(m_hLastSeen, "effects/iceshield", 45, GetEntityIndex(GetOwner()), 0.5); + SendColoredMessage(m_hLastSeen, "Agrath casts Ice Shield upon you."); + } + else + { + PlayAnim("critical", ANIM_SPELL_SELF); + ApplyEffect(GetOwner(), "effects/iceshield", 45, GetEntityIndex(GetOwner()), 0.5); + } + } + else + { + PlayAnim("critical", ANIM_SPELL_SELF); + ApplyEffect(GetOwner(), "effects/iceshield", 45, GetEntityIndex(GetOwner()), 0.5); + } + EmitSound(GetOwner(), 0, "magic/cast.wav", 10); + } + + void cycle_npc() + { + cycle_up("forced"); + } + + void my_target_died() + { + npcatk_walk(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(NPC_CRITICAL)) + { + SendInfoMsg("all", "CRITICAL NPC DIED Agrath the Gloam Hunter has died."); + } + } + + void ext_freeze() + { + SetMoveSpeed(0.0); + } + + void npc_suicide() + { + } + +} + +} diff --git a/scripts/angelscript/dridje/gloam_slayer_JM.as b/scripts/angelscript/dridje/gloam_slayer_JM.as new file mode 100644 index 00000000..cbd95055 --- /dev/null +++ b/scripts/angelscript/dridje/gloam_slayer_JM.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "dridje/gloam_slayer.as" + +namespace MS +{ + +class GloamSlayerJm : CGameScript +{ + string REWARD_LIST; + string REWARD_NAMES; + + GloamSlayerJm() + { + REWARD_LIST = "armor_helm_gaz1;armor_helm_gaz2;smallarms_flamelick;mana_leadfoot;smallarms_frozentongueonflagpole;item_charm_w3"; + REWARD_NAMES = "A helm of Fire Resistance;A helm of Cold Resistance;A Flame Lick;A Potion of Stability;A Litchtongue;A Shadowwolf Charm"; + } + +} + +} diff --git a/scripts/angelscript/dridmars_scripts_WIP/deralia/headguard.as b/scripts/angelscript/dridmars_scripts_WIP/deralia/headguard.as new file mode 100644 index 00000000..ea33789b --- /dev/null +++ b/scripts/angelscript/dridmars_scripts_WIP/deralia/headguard.as @@ -0,0 +1,151 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Headguard : CGameScript +{ + int BUSY_CHATTING; + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + int CHAT_STEPS; + string GUARD_LOOP; + int GuardQuestFinished; + string LAST_SPOKE_TO; + int NO_JOB; + int NO_RUMOR; + string PLAYER_NEAR; + string PLAYER_SPLOTTED; + int StartGuardQuest; + + Headguard() + { + NO_RUMOR = 1; + NO_JOB = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(3.0); + if ("GuardQuest" == 0) + { + GetAllPlayers(PLAYER_SUSPECTS); + PLAYER_NEAR = 0; + GUARD_LOOP = 0; + for (int i = 0; i < GetTokenCount(PLAYER_SUSPECTS, ";"); i++) + { + check_near(); + } + if ((PLAYER_NEAR)) + { + } + if (LAST_SPOKE_TO != PLAYER_SPLOTTED) + { + } + SetMoveDest(PLAYER_SPLOTTED); + SetSayTextRange(512); + SayText("You there! " + STOP!); + LAST_SPOKE_TO = PLAYER_SPLOTTED; + } + } + + void OnSpawn() override + { + SetHealth(300); + SetInvincible(true); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Head Guard"); + SetRoam(false); + SetModel("npc/guard1.mdl"); + SetIdleAnim("c1a0_catwalkidle"); + SetMoveAnim("walk"); + CatchSpeech("say_sus", "suspicious"); + CatchSpeech("say_help", "help"); + StartGuardQuest = 0; + GuardQuestFinished = 0; + } + + void game_menu_getoptions() + { + if (StartGuardQuest == 1) + { + if ((ItemExists(param1, "drink_mead"))) + { + string reg.mitem.title = "Show Note"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "drink_mead"; + string reg.mitem.callback = "hand_note"; + } + } + } + + void check_near() + { + string CUR_PLAYER = GetToken(PLAYER_SUSPECTS, GUARD_LOOP, ";"); + if (GetEntityRange(CUR_PLAYER) < 256) + { + PLAYER_NEAR = 1; + PLAYER_SPLOTTED = CUR_PLAYER; + } + GUARD_LOOP += 1; + } + + void say_hi() + { + if (GuardQuestFinished == 0) + { + SayText("You there! Have you seen anyone [suspicious] around the city?"); + } + if (GuardQuestFinished == 1) + { + SayText("Thanks for your help , adventurer."); + } + } + + void say_sus() + { + CHAT_STEPS = 3; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "I'm investigating a report of a mysterious individual sneaking around the city in the dead of night."; + CHAT_STEP2 = "I've questioned many walking the streets at that time and have no leads."; + CHAT_STEP3 = "You seem like a resourceful adventurer. How would you like to [help] me?"; + chat_loop(); + } + + void say_help() + { + CHAT_STEPS = 3; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Since the investigation seems to be at a standstill, we should start from the beginning."; + CHAT_STEP2 = "Drayke, who lives opposite the fountain, made the report."; + CHAT_STEP3 = "See him and inquire about any further details which could help us."; + chat_loop(); + UseTrigger("questdoordrayke"); + StartGuardQuest = 1; + } + + void hand_note() + { + CHAT_STEPS = 4; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "What's this?"; + CHAT_STEP2 = "This letter is signed by a 'Rudolf'."; + CHAT_STEP3 = "Find this person and inquire about Drayke's whereabouts."; + CHAT_STEP4 = "Ask around if you can't find him yourself."; + chat_loop(); + } + +} + +} diff --git a/scripts/angelscript/dridmars_scripts_WIP/deralia/innkeeper.as b/scripts/angelscript/dridmars_scripts_WIP/deralia/innkeeper.as new file mode 100644 index 00000000..feaf2522 --- /dev/null +++ b/scripts/angelscript/dridmars_scripts_WIP/deralia/innkeeper.as @@ -0,0 +1,260 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Innkeeper : CGameScript +{ + int ATTACK1_DAMAGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int BUSY_CHATTING; + int CANCHAT; + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + int CHAT_STEPS; + int SAID_WELCOME; + string SOUND_HELLO; + string STORE_NAME; + string STORE_TRIGGERTEXT; + string TALK_TARGET; + + Innkeeper() + { + SOUND_HELLO = "npc/hello1.wav"; + STORE_NAME = "deralia_bar"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(2); + if (CANCHAT != 0) + { + } + CanSee("player"); + say_hi(); + ScheduleDelayedEvent(20, "chatreset"); + } + + void OnSpawn() override + { + SetHealth(25); + SetMaxHealth(25); + SetGold(26); + SetName("Gerald the Inn Keeper"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(1, 1); + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = 5; + ATTACK_PERCENTAGE = 0.6; + resetchat(); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumour", "news"); + CatchSpeech("say_sewer", "sewer"); + CatchSpeech("say_rudolf", "rudolf"); + } + + void say_rudolf() + { + CHAT_STEPS = 4; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Rudolf? What do you want with him?"; + CHAT_STEP2 = "He came in here a couple nights ago before leaving the city."; + CHAT_STEP3 = "Said something about finding riches in an abandoned mine."; + CHAT_STEP4 = "The fool has more rocks in his head than in that mine."; + chat_loop(); + SetGlobalVar("RudolfQuest", 1); + } + + void say_rumor() + { + say_rumour(); + } + + void chatreset() + { + CANCHAT = 1; + } + + void say_hi() + { + if ((SAID_WELCOME)) return; + PlayAnim("once", "studycart"); + SayText("Welcome to Deralia Inn!"); + ScheduleDelayedEvent(2, "say_hi_2"); + CANCHAT = 0; + } + + void say_hi_2() + { + SayText("Finest booze and most comfortable lodging this side of Daragoth!"); + SAID_WELCOME = 1; + } + + void game_recvoffer_gold() + { + recv_moregold(); + recv_enoughgold(); + recv_notenoughgold(); + } + + void recv_moregold() + { + if (!(OFFER_AMT > 5)) return; + ReceiveOffer("accept"); + SayText("That be some good gold there."); + UseTrigger("door01"); + PlayAnim("once", "yes"); + } + + void recv_enoughgold() + { + if (!(OFFER_AMT == 5)) return; + ReceiveOffer("accept"); + SayText("Best be quick , the doors open and there s lots of people wanting a room."); + UseTrigger("door01"); + PlayAnim("once", "yes"); + } + + void recv_notenoughgold() + { + if (!(OFFER_AMT < 5)) return; + ReceiveOffer("reject"); + SayText("This isn t charity boy, it s an Inn."); + PlayAnim("once", "no"); + } + + void robbed() + { + SayText("Bastard! Thief!"); + PlayAnim("once", "beatdoor"); + } + + void attack_1() + { + DoDamage("ent_laststole", ATTACK_RANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + + void say_job() + { + SayText(I + " ve got Bob the door guard, but he s a little afraid of rats. And my basement is full of them."); + SayText("If you could clear the place up , it would be greatly appreciated and you can stay the night."); + } + + void say_rumour() + { + PlayAnim("once", "pondering"); + SayText("Rumour has it that this place has rooms real cheap , get my drift?"); + PlayAnim("once", "pondering"); + SayText(I + " ve heard from travelers coming to this tavern, telling about places outside of this village."); + ScheduleDelayedEvent(3, "say_rumour2"); + } + + void vendor_used() + { + SayText("Careful! This isn t that watered down stuff you boys drink in Edana!"); + SetVolume(10); + EmitSound(GetOwner(), SOUND_HELLO); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "drink_mead", 20, 100); + AddStoreItem(STORE_NAME, "drink_ale", 20, 100); + AddStoreItem(STORE_NAME, "drink_wine", 20, 100); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + Say("goods[34] *[24] *[35] *[40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void say_sewer() + { + if ((IsEntityAlive(param1))) + { + TALK_TARGET = param1; + } + else + { + TALK_TARGET = GetEntityIndex("ent_lastspoke"); + } + convo_anim(); + SayText("Well , if hunting rats is beneath you..."); + ScheduleDelayedEvent(3.0, "say_job2"); + } + + void say_job2() + { + convo_anim(); + SayText("I heard Cathain, the quartermaster, lost a sewer crew a little while ago."); + ScheduleDelayedEvent(5.0, "say_job3"); + } + + void say_job3() + { + convo_anim(); + SayText("Usually when that happens, they send militiamen to find them, or at least clean up the mess."); + ScheduleDelayedEvent(5.0, "say_job4"); + } + + void say_job4() + { + convo_anim(); + if (GetGender(TALK_TARGET) == "male") + { + SayText("A big strapping lad like yourself might fit the bill."); + } + else + { + SayText("A brave heroine like yourself might just fit the bill."); + } + ScheduleDelayedEvent(5.0, "say_job5"); + } + + void say_job5() + { + PlayAnim("critical", "give_shot"); + SayText("You can find Cathain inside the barracks - just left of the castle. Usually pacing a wear in the floor."); + } + + void say_rumour2() + { + SayText("This knight came here the other day , and he spoke of the path to Gatecity being cut off. If that s true, we can t visit the dwarves and elves anymore."); + } + + void bchat_after_menus() + { + string reg.mitem.title = "Sewer Job"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_sewer"; + } + +} + +} diff --git a/scripts/angelscript/dridmars_scripts_WIP/foutpost/map_startup.as b/scripts/angelscript/dridmars_scripts_WIP/foutpost/map_startup.as new file mode 100644 index 00000000..d5e27efb --- /dev/null +++ b/scripts/angelscript/dridmars_scripts_WIP/foutpost/map_startup.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "foutpost"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("MAP_CON", 1); + SetGlobalVar("G_MAP_NAME", "The Forgotten Outpost by Evil Squirrel"); + SetGlobalVar("G_MAP_DESC", "This outpost holds by a thread against an impending orc invasion"); + SetGlobalVar("G_MAP_DIFF", "Levels 25-35 / 300-700hp"); + SetGlobalVar("G_WARN_HP", 300); + ScheduleDelayedEvent(1, "deralia_spawn"); + } + + void deralia_spawn() + { + if ("SpawnAllies" == 1) + { + UseTrigger("NPCTransition"); + } + } + +} + +} diff --git a/scripts/angelscript/dridmars_scripts_WIP/mines/rudolf.as b/scripts/angelscript/dridmars_scripts_WIP/mines/rudolf.as new file mode 100644 index 00000000..81c53211 --- /dev/null +++ b/scripts/angelscript/dridmars_scripts_WIP/mines/rudolf.as @@ -0,0 +1,251 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Rudolf : CGameScript +{ + string ANIM_DEATH; + string ANIM_WALK; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_RETALIATE; + float FLEE_CHANCE; + int FLEE_DISTANCE; + int FLEE_HEALTH; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_DELAY; + int I_GOT_MY_MACE; + int NO_JOB; + int NO_RUMOR; + string QUEST_WINNER; + int REQ_QUEST_NOTDONE; + string SOUND_DEATH; + int SPOKE; + int recievedit; + + Rudolf() + { + CAN_ATTACK = 0; + CAN_FLEE = 1; + FLEE_HEALTH = 34; + FLEE_CHANCE = 1.0; + FLEE_DISTANCE = 1000; + CAN_RETALIATE = 0; + CAN_FLINCH = 1; + FLINCH_ANIM = "llflinch"; + FLINCH_CHANCE = 0.5; + FLINCH_DELAY = 1; + ANIM_DEATH = "dieforward"; + SOUND_DEATH = "player/stomachhit1.wav"; + ANIM_WALK = "run"; + NO_RUMOR = 1; + NO_JOB = 1; + } + + void OnSpawn() override + { + REQ_QUEST_NOTDONE = 1; + SetHealth(35); + SetName("Scared Rudolf"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(5, 3); + SetAngles("face"); + recievedit = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_what", "hammer"); + CatchSpeech("say_where", "where"); + CatchSpeech("say_thank", "thank"); + CatchSpeech("say_reward", "gold"); + CatchSpeech("say_thing", "things"); + } + + void say_hi() + { + if ((IS_FLEEING)) return; + if ((I_GOT_MY_MACE)) return; + SayText("Please help me , " + I + " lost my very valuable mace! Please recover it!"); + ScheduleDelayedEvent(3, "say_hi2"); + SPOKE = 1; + } + + void say_hi2() + { + SayText(.....I + "was venturing in the caves...I think " + I + " remember where..."); + ScheduleDelayedEvent(4, "say_hi3"); + PlayAnim("once", "panic"); + } + + void say_hi3() + { + SayText("All of a sudden , a bunch of things attacked me! " + I + "ran out as fast as " + I + " could..."); + ScheduleDelayedEvent(4, "say_hi4"); + PlayAnim("once", "panic"); + } + + void say_hi4() + { + SayText("When " + I + "came back out , " + I + " realized my mace was gone!"); + PlayAnim("once", "beatdoor"); + ScheduleDelayedEvent(4, "say_hi5"); + } + + void say_hi5() + { + SayText("It was a family heirloom...!"); + PlayAnim("once", "crouch_idle"); + } + + void say_where() + { + SayText("Well , you enter in here , then go across the bridge , then a right..."); + ScheduleDelayedEvent(3, "say_where2"); + if ((recievedit)) return; + SayText("There ll will be those things... I hope you re strong enough... here , take these."); + // TODO: offer ent_lastspoke health_mpotion + // TODO: offer ent_lastspoke item_torch + recievedit = 1; + } + + void say_thank() + { + SayText("Good luck!"); + } + + void say_what() + { + SayText("Yes , " + I + "lost my mace , please help me find it. " + I + "think " + I + " remember where.."); + ScheduleDelayedEvent(3, "say_what2"); + PlayAnim("once", "eye_wipe"); + } + + void say_what2() + { + SayText(I + " ll be happy to reward you!"); + PlayAnim("once", "idle2"); + } + + void say_reward() + { + SayText(I + " ll give you gold! Please, no more talking, find my mace!"); + PlayAnim("once", "llflinch"); + } + + void say_thing() + { + SayText("There were about 4 things that attacked me!"); + PlayAnim("once", "fear"); + ScheduleDelayedEvent(2, "say_thing2"); + } + + void say_thing2() + { + SayText("You ll probably have to kill them all to find my mace"); + PlayAnim("once", "fear"); + } + + void give_mace() + { + ReceiveOffer("accept"); + PlayAnim("once", "eye_wipe"); + SayText(THANK + YOU!!!); + QUEST_WINNER = param1; + ScheduleDelayedEvent(2, "recvmace_2"); + } + + void recvmace_2() + { + I_GOT_MY_MACE = 1; + SayText("As " + I + " promised you..."); + // TODO: offer QUEST_WINNER bows_crossbow_light + ScheduleDelayedEvent(3, "recvmace_3"); + if (!(ItemExists(QUEST_WINNER, "item_ring"))) return; + string RQUEST_STAGE = GetPlayerQuestData(QUEST_WINNER, "r"); + if (!(RQUEST_STAGE == 4)) return; + ScheduleDelayedEvent(0.1, "ring_comment"); + } + + void ring_comment() + { + SayText("Nice ring by the way! You know , " + I + " think Vadrel used to have one just like it!"); + SetPlayerQuestData(QUEST_WINNER, "r"); + REQ_QUEST_NOTDONE = 0; + } + + void recvmace_3() + { + SayText("Goodbye now! " + I + " must hurry!"); + SetMoveDest(Vector3(-3101, 351, 64)); + ScheduleDelayedEvent(5, "rudolfdelete"); + } + + void rudolfdelete() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void game_menu_getoptions() + { + if (SAY_SPOKE == 1) + { + string reg.mitem.title = "Mace?"; + string reg.mitem.type = "say"; + string reg.mitem.data = "Mace?"; + string reg.mitem.title = "Where?"; + string reg.mitem.type = "say"; + string reg.mitem.data = "Where?"; + string reg.mitem.title = "Say thanks"; + string reg.mitem.type = "say"; + string reg.mitem.data = "Thank you!"; + string reg.mitem.title = "Reward?"; + string reg.mitem.type = "say"; + string reg.mitem.data = "What do I get out of it?"; + string reg.mitem.title = "Things?"; + string reg.mitem.type = "say"; + string reg.mitem.data = "What about those things?"; + } + if ((ItemExists(param1, "blunt_rudolfsmace"))) + { + string reg.mitem.title = "Return mace"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "blunt_rudolfsmace"; + string reg.mitem.callback = "give_mace"; + } + if ((ItemExists(param1, "item_ring"))) + { + string RQUEST_STAGE = GetPlayerQuestData(param1, "r"); + if (RQUEST_STAGE == 5) + { + string reg.mitem.title = "Ask about the ring"; + string reg.mitem.type = "callback"; + string reg.mitem.data = RQUEST_STAGE; + string reg.mitem.callback = "ring_comment"; + } + } + if ("RudolfQuest" == 1) + { + string reg.mitem.title = "Ask about Drayke"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "ask_drayke"; + string reg.mitem.callback = "ask_drayke"; + } + } + + void ask_drayke() + { + SayText(AUUUUUGH!); + } + +} + +} diff --git a/scripts/angelscript/edana/Copy of fletcher.as b/scripts/angelscript/edana/Copy of fletcher.as new file mode 100644 index 00000000..b52026ae --- /dev/null +++ b/scripts/angelscript/edana/Copy of fletcher.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "edana/fletcher.as" + +namespace MS +{ + +class Copy of fletcher : CGameScript +{ +} + +} diff --git a/scripts/angelscript/edana/Hoguld.as b/scripts/angelscript/edana/Hoguld.as new file mode 100644 index 00000000..e0e647d5 --- /dev/null +++ b/scripts/angelscript/edana/Hoguld.as @@ -0,0 +1,97 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Hoguld : CGameScript +{ + int ACCEPTED; + int ASKED; + int NO_RUMOR; + + Hoguld() + { + NO_RUMOR = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(30); + if (ACCEPTED != 1) + { + } + if (ASKED != 1) + { + } + if ((CanSee("ally", 180))) + { + } + SetMoveDest(m_hLastSeen); + SayText("Is anybody going to Deralia soon?"); + } + + void OnSpawn() override + { + SetHealth(1); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Hoguld"); + SetRoam(true); + SetModel("npc/human1.mdl"); + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, RandomInt(0, 5)); + SetMoveAnim("walk"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("saY_job", "yes"); + CatchSpeech("say_no", "no"); + randomspawn(); + ASKED = 0; + ACCEPTED = 0; + } + + void say_hi() + { + if (!(ACCEPTED != 1)) return; + if (!(ASKED != 1)) return; + SayText("Hello there! You look like the traveling sort. Are you going to Deralia anytime soon?"); + SetMoveDest("ent_lastspoke"); + ASKED = 1; + } + + void say_no() + { + if (!(ASKED == 1)) return; + SayText("Oh....ok...thanks anyway"); + ASKED = 0; + } + + void say_job() + { + if (!(ASKED == 1)) return; + SayText("Excellent! " + I + " was wondering if you d be so kind as to deliver this letter for me?"); + SetMoveDest("ent_lastspoke"); + // TODO: offer ent_lastspoke item_letter + ScheduleDelayedEvent(3, "say_letter2"); + ACCEPTED = 1; + } + + void say_letter2() + { + SayText("As you can see , it s addressed to Willem Coflin in Deralia. If you can deliver that sometime, I d be most happy!"); + SetMoveDest("ent_lastspoke"); + } + + void randomspawn() + { + if (!(RandomInt(0, 99) > 50)) return; + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/edana/armorer.as b/scripts/angelscript/edana/armorer.as new file mode 100644 index 00000000..4e31c41f --- /dev/null +++ b/scripts/angelscript/edana/armorer.as @@ -0,0 +1,382 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Armorer : CGameScript +{ + int CANCHAT; + int GAVE_AXE2; + string GOLD_TARGET; + int JOB; + int NO_RUMOR; + int NPC_REACTS; + int OFFER_SET; + string ORE_TARGET; + float OVER_CHARGE; + float SELL_RATIO; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + int STORE_CLOSED; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VEND_ARMORER; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_SPEC_SHEATHS; + int VEND_WEAPONS; + + Armorer() + { + SOUND_DEATH = "none"; + STORE_CLOSED = 0; + STORE_NAME = "gatecity_armory"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.75; + OVER_CHARGE = 1.5; + NO_RUMOR = 1; + SELL_WEAPON_LEVEL = 3; + VEND_ARMORER = 1; + VEND_NEWBIE = 1; + VEND_CONTAINERS = 1; + VEND_WEAPONS = 1; + VEND_SPEC_SHEATHS = 1; + NPC_REACTS = 1; + } + + void OnSpawn() override + { + SetName("Roland"); + SetHealth(25); + SetGold(25); + SetName("Roland the Blacksmith"); + SetFOV(30); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 0); + SetModelBody(1, 2); + SetInvincible(true); + JOB = 0; + CANCHAT = 1; + STORE_CLOSED = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + CatchSpeech("say_axe", "axe"); + CatchSpeech("say_failed_pay", "no"); + createmystore(); + } + + void npcreact_targetsighted() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist(param1) <= 90) + { + SayText("Would you like to [purchase] one of my fine weapons?"); + } + } + } + + void say_hi() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist("ent_lastspoke") <= 90) + { + SayText("Would you like [buy] some fine armor or weapons?"); + } + } + } + + void say_job() + { + SayText("Sorry , but with the Undermountains closed , " + I + " have no work to be done."); + } + + void say_rumor() + { + SayText(I + " hear the mayor is looking for some help."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "armor_leather_torn", RandomInt(1, 3), 125, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather", RandomInt(1, 3), 125, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather_studded", RandomInt(1, 3), 125, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_plate", RandomInt(1, 2), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_plate", RandomInt(1, 2), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_bronze", RandomInt(1, 2), 90, SELL_RATIO); + mongol_gear(); + knight_gear(); + AddStoreItem(STORE_NAME, "armor_golden", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_golden", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_dark", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_dark", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_belt_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_dagger_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_axe_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_blunt_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_holster_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_holster", 5, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "shields_buckler", RandomInt(1, 2), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "shields_ironshield", RandomInt(1, 2), 100, 0.25); + AddStoreItem(STORE_NAME, "shields_lironshield", RandomInt(1, 2), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_rsword", RandomInt(1, 5), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_shortsword", RandomInt(1, 5), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_nkatana", RandomInt(1, 5), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_longsword", RandomInt(1, 5), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_doubleaxe", RandomInt(1, 5), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_gauntlets_leather", RandomInt(1, 2), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_belt_holster", 1, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_knife", 4, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_dagger", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_rknife", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_rsword", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_shortsword", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_scimitar", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_longsword", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_bastardsword", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_rsmallaxe", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_smallaxe", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_axe", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_2haxe", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_battleaxe", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_club", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer1", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer2", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_mace", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_warhammer", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer3", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_maul", 2, 100, SELL_RATIO); + } + + void mongol_gear() + { + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORE_NAME, "armor_mongol", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_mongol", 1, 100, SELL_RATIO); + } + } + + void knight_gear() + { + if (RandomInt(1, 25) == 1) + { + AddStoreItem(STORE_NAME, "armor_knight", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_knight", 1, 100, SELL_RATIO); + } + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + EmitSound(GetOwner(), CHAN_VOICE, "npc/goods.wav", "game.sound.maxvol"); + Say("[.34] [.24] [.35] [.40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void vendor_say_closed() + { + SayText("Sorry, I'm closed. I will reopen at seven in the morning."); + } + + void game_menu_getoptions() + { + if ((OFFER_SET)) + { + if ((ItemExists(param1, "item_gaxe_handle"))) + { + } + string reg.mitem.title = "Pay 10,000 Gold"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:10000;item_gaxe_handle;item_ore_lorel"; + string reg.mitem.callback = "say_gotgold"; + string reg.mitem.cb_failed = "say_failed_pay"; + } + if ((OFFER_SET)) return; + if ((ItemExists(param1, "item_gaxe_handle"))) + { + string reg.mitem.title = "Ask about broken axe"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_axe"; + if ((ItemExists(param1, "item_ore_lorel"))) + { + } + string reg.mitem.title = "Show Loreldian Ore"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_ore"; + } + } + + void say_axe() + { + if (param1 == "PARAM1") + { + string SPEAKER_ID = GetEntityIndex("ent_lastspoke"); + if (!(ItemExists(SPEAKER_ID, "item_gaxe_handle"))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SayText("Wow , this here was a real piece of work , before it broke."); + ScheduleDelayedEvent(4.0, "say_axe2"); + } + + void say_axe2() + { + SayText("Don't make them like this anymore, that's fer sure."); + ScheduleDelayedEvent(4.0, "say_axe3"); + } + + void say_axe3() + { + SayText("I can still see the bits of the blade end, I can tell it was made of Loreldian ore."); + ScheduleDelayedEvent(4.0, "say_axe4"); + } + + void say_axe4() + { + SayText("That's where the thing gets its magic, and why it only harms the unholy."); + ScheduleDelayedEvent(4.0, "say_axe5"); + } + + void say_axe5() + { + SayText("Most such cursed things are imbued with the power of The Fallen, either directly, or indirectly."); + ScheduleDelayedEvent(4.0, "say_axe6"); + } + + void say_axe6() + { + SayText("This stuff don't grow on trees, ya know. Even if it did, it's very difficult to work with."); + ScheduleDelayedEvent(4.0, "say_axe7"); + } + + void say_axe7() + { + SayText("But if ya find some, bring it back to me, together with this handle, and maybe I can fix ya up."); + } + + void say_ore() + { + ORE_TARGET = param1; + SayText("Wow, you actually found some of the stuff! Hmm... Let's see here..."); + ScheduleDelayedEvent(4.0, "say_ore2"); + } + + void say_ore2() + { + SayText("Okay, I think I can do this, but it'll cost ya."); + ScheduleDelayedEvent(4.0, "say_ore3"); + } + + void say_ore3() + { + SayText("I'll need 10,000 gold. Plus the hilt, of course."); + ScheduleDelayedEvent(2.0, "say_ore4"); + OFFER_SET = 1; + } + + void say_ore4() + { + SayText("Just tell me no, if yer not interested."); + } + + void say_gotgold() + { + GOLD_TARGET = param1; + SayText("Alright , just give me a few moments here."); + PlayAnim("critical", "attack"); + ScheduleDelayedEvent(1.0, "smith_sound"); + ScheduleDelayedEvent(2.0, "say_gotgold2"); + } + + void say_gotgold2() + { + PlayAnim("critical", "attack"); + ScheduleDelayedEvent(1.0, "smith_sound"); + ScheduleDelayedEvent(2.0, "say_gotgold3"); + } + + void say_gotgold3() + { + PlayAnim("critical", "attack2"); + ScheduleDelayedEvent(1.0, "smith_sound2"); + ScheduleDelayedEvent(1.0, "say_gotgold4"); + } + + void say_gotgold4() + { + SayText("There ya go! Good as new... Sorta..."); + // TODO: offer GOLD_TARGET axes_golden + GAVE_AXE2 = 1; + ScheduleDelayedEvent(3.0, "say_gotgold5"); + } + + void say_gotgold5() + { + SayText("Now, if you want to make sure it won't break AGAIN, well..."); + ScheduleDelayedEvent(4.0, "say_gotgold6"); + } + + void say_gotgold6() + { + SayText("To be honest, you'd need a better smith than I. But I happen to know one- Thordac!"); + ScheduleDelayedEvent(4.0, "say_gotgold7"); + } + + void say_gotgold7() + { + SayText("Go over to Deralia, give him yer axe and my instructions here, telling him what ya need."); + // TODO: offer GOLD_TARGET item_roland_letter + ScheduleDelayedEvent(4.0, "say_gotgold8"); + } + + void say_gotgold8() + { + SayText("I warn ye though, he'll charge you up the nose for what you'll need done!"); + } + + void say_failed_pay() + { + if (!(OFFER_SET)) return; + if ((GAVE_AXE2)) return; + OFFER_SET = 0; + SayText("Well, if ya ain't got the money now, I can wait."); + } + + void smith_sound() + { + // PlayRandomSound from: "debris/metal3.wav", "debris/metal2.wav", "debris/metal1.wav" + array sounds = {"debris/metal3.wav", "debris/metal2.wav", "debris/metal1.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void smith_sound2() + { + EmitSound(GetOwner(), 0, "debris/bustmetal2.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/edana/armourer.as b/scripts/angelscript/edana/armourer.as new file mode 100644 index 00000000..33fb3dad --- /dev/null +++ b/scripts/angelscript/edana/armourer.as @@ -0,0 +1,552 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "helena/helena_npc.as" + +namespace MS +{ + +class Armourer : CGameScript +{ + int CANCHAT; + int GOT_KEYPART_1; + int GOT_KEYPART_2; + int GOT_KEYPART_3; + int HAS_KEYPARTS; + int JOB; + int JOB.SPEECH1; + string JOB.TARGET; + string JOB.WINNER; + string KEY_INTRO_DELAY; + string KEY_STEP; + string NO_JOB; + int NO_RUMOR; + int NPC_REACTS; + string QUEST_WINNER; + float SELL_RATIO; + string SOUND_DEATH; + int STORE_CLOSED; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VENDOR_NOT_ON_USE; + int VEND_ARMORER; + string questboar.angle; + string questboar.target; + string script.questlog.target; + + Armourer() + { + SOUND_DEATH = "none"; + STORE_CLOSED = 0; + STORE_NAME = "edana_armory"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.75; + NO_RUMOR = 1; + VEND_ARMORER = 1; + NPC_REACTS = 1; + VENDOR_NOT_ON_USE = 1; + } + + void OnSpawn() override + { + SetHealth(25); + SetGold(25); + SetName("Iron Fist Ike, the Armourer"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/blacksmith.mdl"); + SetInvincible(true); + JOB = 0; + CANCHAT = 1; + STORE_CLOSED = 0; + createmystore(); + if (StringToLower(GetMapName()) == "helena") + { + SetName("Galhad, Dorfgan's Sales Rep"); + NO_JOB = 1; + } + if (!(StringToLower(GetMapName()) != "helena")) return; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_yes", "yes"); + CatchSpeech("say_where", "abulurd"); + CatchSpeech("say_key", "key"); + } + + void npcreact_targetsighted() + { + if ((GOT_SCARED)) return; + if ((STORE_CLOSED)) return; + if (!(GetEntityDist(param1) <= 90)) return; + if (!(JOB.TARGET != param1)) return; + if (JOB.WINNER != param1) + { + SayText("Howdy! How about a trade?"); + } + else + { + SayText("Howdy " + /* TODO: $stradd */ $stradd(GetEntityName(JOB.WINNER), "!") + "What can " + I + " do for you?"); + } + } + + void say_hi() + { + if (!(GetEntityDist("ent_lastspoke") <= 90)) return; + if ((STORE_CLOSED)) return; + SayText("'Ello there. Would you like to [buy] some fine armor, traveler?"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "armor_leather_torn", RandomInt(1, 2), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather", RandomInt(1, 2), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather_studded", RandomInt(0, 1), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_plate", RandomInt(0, 2), 125, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_plate", RandomInt(0, 2), 125, SELL_RATIO); + AddStoreItem(STORE_NAME, "skin_boar", 0, 150, 0.75); + AddStoreItem(STORE_NAME, "skin_ratpelt", 0, 250, 0.75); + AddStoreItem(STORE_NAME, "skin_bear", 0, 150, 1); + AddStoreItem(STORE_NAME, "skin_boar_heavy", 0, 150, 1); + AddStoreItem(STORE_NAME, "shields_ironshield", RandomInt(0, 3), 100, 0.25); + AddStoreItem(STORE_NAME, "shields_buckler", RandomInt(0, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "gown_edana", 10, 100, SELL_RATIO); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + EmitSound(GetOwner(), CHAN_VOICE, "npc/goods.wav", "game.sound.maxvol"); + Say("[.34] [.24] [.35] [.40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void say_job() + { + if (JOB == 0) + { + JOB = 1; + SayText("Well you do look strong enough, I could always use a short-term errand-runner. Are ye interested?"); + OpenMenu("ent_lastspoke"); + ScheduleDelayedEvent(300, "reset_job"); + } + else + { + if (JOB.TARGET != GetEntityIndex("ent_lastspoke")) + { + if (GetEntityIndex(JOB.TARGET) != param1) + { + } + PlayAnim("once", "no"); + SayText("Sorry, Ive already got me an errand boy. If you see " + GetEntityName(JOB.TARGET) + " tell him to hurry it up!"); + } + } + if (JOB >= 3) + { + SayText("Sorry, think I've got all the help I need for today."); + } + } + + void reset_job() + { + JOB = 0; + } + + void say_yes() + { + if (!(JOB == 1)) return; + if ((JOB.SPEECH1)) return; + JOB.SPEECH1 = 1; + JOB.TARGET = GetEntityIndex("ent_lastspoke"); + SayText("Excellent! " + I + " need you to go to Abulurd , give him this letter."); + // TODO: offer ent_lastspoke item_ikeletter + CallExternal(FindEntityByName("abulurd"), "global_quest_letter"); + } + + void say_where() + { + if (!(JOB.SPEECH1 == 1)) return; + SayText("Abulurd? Why he's outside of town in his house. On the path between here and the Temple."); + } + + void quest_log_done() + { + SayText("Hmmm... this does look like a good set. I'll have him send over the rest."); + script.questlog.target = param1; + ScheduleDelayedEvent(4, "quest_log_done_2"); + } + + void quest_log_done_2() + { + SayText("Well here's something for your trouble."); + // TODO: offer script.questlog.target gold 6 + ScheduleDelayedEvent(4, "quest_ledger_start"); + } + + void quest_ledger_start() + { + SayText("Head back over to Abulurd and ask if he has the ledger I asked him about yesterday."); + JOB = 2; + CallExternal(FindEntityByName("abulurd"), "global_quest_ledger"); + } + + void quest_ledger_done() + { + SayText("Yep, this is it. Thanks for your help " + GetEntityName(param1)); + // TODO: offer PARAM1 gold 6 + JOB = 3; + JOB.TARGET = ""; + JOB.WINNER = param1; + } + + void quest_boar_done() + { + SayText("Aah! What's this?"); + questboar.target = param1; + PlayAnim("critical", "studycart"); + ScheduleDelayedEvent(1, "quest_boar_done_2"); + CallExternal(FindEntityByName("abulurd"), "global_quest_boars_done"); + } + + void quest_boar_done_2() + { + SayText("This pelt is of excellent quality , my friend!"); + ScheduleDelayedEvent(2.3, "quest_boar_done_3"); + } + + void quest_boar_done_3() + { + SayText("Stay here for a second and I'll make something out of it."); + questboar.angle = GetMonsterProperty("angles.yaw"); + ScheduleDelayedEvent(1, "quest_boar_done_4"); + } + + void quest_boar_done_4() + { + string newang = questboar.angle; + newang += 180; + SetAngles("face.yaw"); + ScheduleDelayedEvent(5, "quest_boar_done_5"); + } + + void quest_boar_done_5() + { + SayText("Here you go! Hope you will enjoy it."); + SetAngles("face.yaw"); + // TODO: offer questboar.target armor_leather_torn + } + + void say_closed() + { + SayText("Sorry, I'm closed. I will reopen at seven in the morning"); + } + + void vendor_offerstore() + { + if (!(GetEntityDist(param1) <= 90)) return; + if ((STORE_CLOSED)) + { + SayText("Sorry, I'm closed. I will reopen at seven in the morning"); + } + else + { + basevendor_offerstore(param1); + } + } + + void game_menu_getoptions() + { + if (!(StringToLower(GetMapName()) != "helena")) return; + if (JOB == 1) + { + if (!(JOB.SPEECH1)) + { + string reg.mitem.title = "Accept Job"; + string reg.mitem.type = "say"; + int l.say = RandomInt(1, 6); + if (l.say == 1) + { + string reg.mitem.data = "Yes"; + } + else + { + if (l.say == 2) + { + string reg.mitem.data = "Sure"; + } + else + { + if (l.say == 3) + { + string reg.mitem.data = "Why not"; + } + else + { + if (l.say == 4) + { + string reg.mitem.data = "Ok"; + } + else + { + if (l.say == 5) + { + string reg.mitem.data = "Of course"; + } + else + { + if (l.say == 6) + { + string reg.mitem.data = "Tell me more"; + } + } + } + } + } + } + } + else + { + if ((ItemExists(param1, "item_ikelog"))) + { + string reg.mitem.title = "Give Log"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_ikelog"; + string reg.mitem.callback = "quest_log_done"; + } + else + { + menuitem_where(); + } + } + } + else + { + if (JOB == 2) + { + if ((ItemExists(param1, "item_ledger"))) + { + string reg.mitem.title = "Give Ledger"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_ledger"; + string reg.mitem.callback = "quest_ledger_done"; + } + else + { + menuitem_where(); + } + } + } + if ((ItemExists(param1, "skin_boar_heavy"))) + { + string reg.mitem.title = "Give Pelt"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "skin_boar_heavy"; + string reg.mitem.callback = "quest_boar_done"; + } + HAS_KEYPARTS = 0; + if ((ItemExists(param1, "brokenkey_1"))) + { + string reg.mitem.id = "payment"; + string reg.mitem.title = "Give Key Hilt"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "brokenkey_1"; + string reg.mitem.callback = "got_part_1"; + HAS_KEYPARTS = 1; + } + if ((ItemExists(param1, "brokenkey_2"))) + { + string reg.mitem.id = "payment"; + string reg.mitem.title = "Give Key Middle"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "brokenkey_2"; + string reg.mitem.callback = "got_part_2"; + HAS_KEYPARTS = 1; + } + if ((ItemExists(param1, "brokenkey_3"))) + { + string reg.mitem.id = "payment"; + string reg.mitem.title = "Give Key End"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "brokenkey_3"; + string reg.mitem.callback = "got_part_3"; + HAS_KEYPARTS = 1; + } + if ((HAS_KEYPARTS)) + { + KEY_STEP = 0; + key_intro(); + } + if ((GOT_KEYPART_1)) + { + if ((GOT_KEYPART_2)) + { + if ((GOT_KEYPART_3)) + { + FORGE_KEY_STEP = 0; + string reg.mitem.id = "payment"; + string reg.mitem.title = "Pay 10,000 to reforge key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:10000"; + string reg.mitem.callback = "start_forge_key"; + string reg.mitem.cb_failed = "not_enough_forge_key"; + } + } + } + } + + void menuitem_where() + { + string reg.mitem.title = "I can't find Abulurd"; + string reg.mitem.type = "say"; + int l.say = RandomInt(1, 2); + if (l.say == 1) + { + string reg.mitem.data = "Where is abulurd?"; + } + else + { + if (l.say == 2) + { + string reg.mitem.data = "I can't find abulurd"; + } + } + } + + void key_intro() + { + if ((KEY_INTRO_DELAY)) return; + KEY_STEP += 1; + if (KEY_STEP == 1) + { + PlayAnim("once", "converse1"); + SayText("Thats a mighty interestin lookin piece of a key you have there..."); + } + if (KEY_STEP == 2) + { + SayText("If ya find all the parts, I maybe able to put it back together for ya."); + } + if (KEY_STEP == 3) + { + SayText("Best not give me any parts lest ya have them all, as youll not be gettin any back."); + } + if (KEY_STEP == 4) + { + KEY_INTRO_DELAY = 1; + ScheduleDelayedEvent(60.0, "reset_keyintro"); + SayText("Oh... And 10,000 gold for the labor. Delicate work, key forging is."); + } + if (!(KEY_STEP < 4)) return; + ScheduleDelayedEvent(2.0, "key_intro"); + } + + void start_forge_key() + { + ReceiveOffer("accept"); + QUEST_WINNER = param1; + GOT_KEYPART_1 = 0; + GOT_KEYPART_2 = 0; + GOT_KEYPART_3 = 0; + ScheduleDelayedEvent(0.1, "forge_key"); + } + + void forge_key() + { + FORGE_KEY_STEP += 1; + if (FORGE_KEY_STEP == 1) + { + PlayAnim("once", "portal"); + SayText("Yup, just as I thought, gonna be a tricky little thing..."); + } + if (FORGE_KEY_STEP == 2) + { + SayText("But dont ya worry, Ill get her done alright..."); + } + if (FORGE_KEY_STEP == 3) + { + SayText("...almost got it...."); + } + if (FORGE_KEY_STEP == 4) + { + PlayAnim("once", "push_button2"); + LookAt(1024); + // TODO: offer QUEST_WINNER key_forged + SayText("See, there ya go, one re-forged key."); + } + if (!(FORGE_KEY_STEP < 4)) return; + ScheduleDelayedEvent(2.0, "forge_key"); + } + + void not_enough_forge_key() + { + PlayAnim("once", "checktie"); + SayText("Reforging an ornate key like this is very delicate work! I will need more gold."); + } + + void got_part_1() + { + PlayAnim("once", "push_button"); + GOT_KEYPART_1 = 1; + SayText("Mmm hmm... Fancy lookin key this hilt belongs to, no doubt."); + if ((GOT_KEYPART_2)) + { + if ((GOT_KEYPART_3)) + { + SayText("Alright, got all the pieces, now I just need that labor charge..."); + } + } + } + + void got_part_2() + { + PlayAnim("once", "push_button"); + GOT_KEYPART_2 = 1; + SayText("Yeah, I bet this key is supposed to open somethin really valuable..."); + if ((GOT_KEYPART_1)) + { + if ((GOT_KEYPART_3)) + { + SayText("Alright, got all the pieces, now I just need that labor charge..."); + } + } + } + + void got_part_3() + { + PlayAnim("once", "push_button"); + GOT_KEYPART_3 = 1; + SayText("These are about the fanciest lookin key bits Ive ever seen..."); + if ((GOT_KEYPART_1)) + { + if ((GOT_KEYPART_2)) + { + SayText("Alright, got all the pieces, now I just need that labor charge..."); + } + } + } + + void say_key() + { + KEY_STEP = 0; + key_intro(); + } + + void reset_key_intro() + { + KEY_INTRO_DELAY = 0; + } + +} + +} diff --git a/scripts/angelscript/edana/barwench.as b/scripts/angelscript/edana/barwench.as new file mode 100644 index 00000000..7223b5a2 --- /dev/null +++ b/scripts/angelscript/edana/barwench.as @@ -0,0 +1,289 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Barwench : CGameScript +{ + int ATTACK1_DAMAGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int CANCHAT; + int CIDER_DONE; + int CIDER_FINISHED; + string GAVE_SOUP_LIST; + string GAVE_SOUP_LIST2; + string NEXT_THANK_YOU; + int NO_HAIL; + string SOUND_DEATH; + string STORE_NAME; + string STORE_SOUND; + string STORE_TRIGGERTEXT; + float VENDOR_DELAY; + int VENDOR_NOT_ON_USE; + int VEND_INDIVIDUAL; + int cider_1; + int cider_2; + int cider_3; + + Barwench() + { + GAVE_SOUP_LIST = ""; + GAVE_SOUP_LIST2 = ""; + SOUND_DEATH = "none"; + VENDOR_DELAY = 0.5; + STORE_NAME = "edana_barwench"; + STORE_SOUND = "voices/female_vendor2"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + NO_HAIL = 1; + VEND_INDIVIDUAL = 1; + VENDOR_NOT_ON_USE = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(30, 45)); + if ((CanSee("player", 128))) + { + } + SayText("Hello there."); + Say("[.2] [.2] [.1]"); + SetMoveDest(m_hLastSeen); + convo_anim(); + } + + void OnSpawn() override + { + SetName("wench"); + SetHealth(25); + SetGold(25); + SetName("Sylphiel , the waitress"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human2.mdl"); + SetInvincible(true); + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = 5; + ATTACK_PERCENTAGE = 0.6; + cider_1 = 0; + cider_2 = 0; + cider_3 = 0; + CatchSpeech("say_job", "job"); + CatchSpeech("say_wench", "wench"); + CatchSpeech("say_cider", "cider"); + CatchSpeech("say_reward", "cider"); + CatchSpeech("say_rumor", "rumours"); + } + + void vendor_used() + { + EmitSound(GetOwner(), 0, "voices/human/female_vendor2.wav", 10); + SayText("What brings you here today? Business or pleasure?"); + Say("[.3] [.3] [.3] [.2] [.1] [.3] [.1]"); + convo_anim(); + SetMoveDest(param1); + string L_GOT_SOUP = GetPlayerQuestData(VENDOR_TARGET, "sy"); + if (!(L_GOT_SOUP > 0)) return; + if (FindToken(GAVE_SOUP_LIST, L_PLR_STEAMID, ";") > -1) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GAVE_SOUP_LIST.length() > 0) GAVE_SOUP_LIST += ";"; + GAVE_SOUP_LIST += L_PLR_STEAMID; + bchat_mouth_move(4.0); + SayText("Oh hi there. " + I + " remember you. Come for some of Sylphee s soup? It s not cheap - no more free samples!"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "drink_mead", 20, 100); + AddStoreItem(STORE_NAME, "drink_ale", 20, 100); + AddStoreItem(STORE_NAME, "drink_wine", 20, 100); + string L_PLR_STEAMID = GetPlayerAuthId(VENDOR_TARGET); + string L_GOT_SOUP = GetPlayerQuestData(VENDOR_TARGET, "sy"); + if (!(L_GOT_SOUP > 0)) return; + if (L_GOT_SOUP > 5) + { + int L_GOT_SOUP = 5; + } + AddStoreItem(STORE_NAME, "mana_soup", L_GOT_SOUP, 100); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + Say("goods[.34] [.24] [.35] [.40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void say_job() + { + if (!(cider_1 == 0)) return; + if (!(CanSee("player", 128))) return; + SetMoveDest(m_hLastSeen); + SayText(I + " have a task for you , now that you ask. Head across the way to Bryan and check on my cider shipment."); + PlayAnim("once", "pondering3"); + CallExternal(FindEntityByName("bryan"), "cider"); + stoproam(); + ScheduleDelayedEvent(4, "reset"); + if (!(cider_1 == 1)) return; + SayText("Didn t I ask you to check with Bryan on that cider shipment? Get on with it then!"); + SetMoveDest("ent_lastspoke"); + PlayAnim("once", "converse1"); + stoproam(); + ScheduleDelayedEvent(2, "stop_converse_anim"); + } + + void reset() + { + cider_1 = 1; + } + + void say_cider() + { + if (!(cider_1 == 1)) return; + SayText("Didn t I ask you to check with Bryan on that cider shipment? Get on with it then!"); + SetMoveDest("ent_lastspoke"); + PlayAnim("once", "converse1"); + stoproam(); + ScheduleDelayedEvent(2, "stop_converse_anim"); + if (!(cider_1 == 3)) return; + SetMoveDest("ent_lastspoke"); + PlayAnim("once", "converse1"); + SayText("Look , " + I + " still haven t gotten that cider shipment, maybe you should check with Bryan again."); + cider_1 = 1; + CallExternal(FindEntityByName("bryan"), "cider3"); + stoproam(); + say_reward(); + } + + void stop_converse_anim() + { + PlayAnim("critical", "idle1"); + } + + void cider2() + { + cider_1 = 2; + cider_2 = 1; + } + + void cider3() + { + cider_1 = 3; + } + + void ciderreward() + { + cider_2 = 3; + cider_1 = 4; + } + + void say_reward() + { + if (!(cider_2 == 1)) return; + SayText("Thanks for the help."); + SetRoam(false); + SetMoveDest("ent_lastspoke"); + PlayAnim("once", "converse1"); + ScheduleDelayedEvent(2, "say_reward2"); + stoproam(); + if (!(cider_2 == 3)) return; + if (!(cider_3 == 0)) return; + cider_3 = 1; + SayText("Well , you ve done more than your share. Seeing as how I don t have any cider to give you..."); + SetRoam(false); + SetMoveDest("ent_lastspoke"); + PlayAnim("once", "converse1"); + stoproam(); + ScheduleDelayedEvent(3, "say_reward2_1"); + } + + void say_reward2() + { + SayText("Come back in a bit and " + I + " ll have some cider for ya. Just ask when you come in next."); + ScheduleDelayedEvent(3, "say_reward3"); + } + + void say_reward3() + { + if ((CIDER_DONE)) return; + CIDER_DONE = 1; + SayText("Here s something for helpin out."); + ScheduleDelayedEvent(2, "cider3"); + // TODO: offer ent_lastspoke gold 5 + cider_1 = 99; + cider_2 = 2; + PlayAnim("critical", "pull_needle"); + } + + void say_reward2_1() + { + SayText("...this ll have to do. Take this with my thanks."); + PlayAnim("critical", "pull_needle"); + ScheduleDelayedEvent(2, "say_reward2_2"); + } + + void say_reward2_2() + { + if ((CIDER_FINISHED)) return; + CIDER_FINISHED = 1; + cider_1 = 99; + cider_2 = 99; + // TODO: offer ent_lastspoke gold 7 + } + + void say_rumor() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PlayAnim("once", "pondering"); + SayText(I + " ve heard from travelers coming to this tavern, telling about places outside of this village."); + ScheduleDelayedEvent(3, "say_rumour2"); + } + + void say_rumour2() + { + SayText("This knight came here the other day , and he spoke of the path to Gatecity being cut off."); + ScheduleDelayedEvent(3, "say_rumour3"); + } + + void say_rumour3() + { + SayText("If that s true, we can t go and see the dwarves or elves anymore."); + } + + void game_gave_player() + { + if (!((GetEntityProperty(param2, "itemname")).findFirst("soup") >= 0)) return; + if (!(GetGameTime() > NEXT_THANK_YOU)) return; + NEXT_THANK_YOU = GetGameTime(); + NEXT_THANK_YOU += 60.0; + SayText("Thanks again for helping out with those goblins at gran s old place. Come by again sometime!"); + Say("[.3] [.3] [.3] [.2] [.1] [.3] [.1]"); + convo_anim(); + } + +} + +} diff --git a/scripts/angelscript/edana/boarboss.as b/scripts/angelscript/edana/boarboss.as new file mode 100644 index 00000000..add3750b --- /dev/null +++ b/scripts/angelscript/edana/boarboss.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "monsters/boar_hard.as" + +namespace MS +{ + +class Boarboss : CGameScript +{ + float ATTACK_HITPERCENT; + int BOAR_CAN_CHARGE; + int BOAR_CHARGE_DMG; + int CAN_FLEE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int GORE_FORWARD_DAMAGE; + float GORE_SIDE_DAMAGE; + int NPC_BASE_EXP; + + Boarboss() + { + GORE_FORWARD_DAMAGE = 3; + GORE_SIDE_DAMAGE = 1.5; + ATTACK_HITPERCENT = 0.6; + BOAR_CAN_CHARGE = 1; + BOAR_CHARGE_DMG = 9; + NPC_BASE_EXP = 15; + } + + void OnSpawn() override + { + SetHealth(60); + SetDamageResistance("all", ".81"); + SetName("Huge Aggressive Wild Boar"); + SetModel("monsters/boar1.mdl"); + SetHearingSensitivity(4); + CAN_FLEE = 0; + } + + void OnPostSpawn() override + { + DROP_ITEM1 = "skin_boar_heavy"; + DROP_ITEM1_CHANCE = 1.0; + } + +} + +} diff --git a/scripts/angelscript/edana/boarhard.as b/scripts/angelscript/edana/boarhard.as new file mode 100644 index 00000000..4a79131e --- /dev/null +++ b/scripts/angelscript/edana/boarhard.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/boar_hard.as" + +namespace MS +{ + +class Boarhard : CGameScript +{ +} + +} diff --git a/scripts/angelscript/edana/bryan.as b/scripts/angelscript/edana/bryan.as new file mode 100644 index 00000000..a21f5ce0 --- /dev/null +++ b/scripts/angelscript/edana/bryan.as @@ -0,0 +1,321 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Bryan : CGameScript +{ + int ASKED_APPLE; + int ATTACK1_DAMAGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int CIDER; + int EVIDENCE_FOUND; + string GOSSIP_LINE; + int NO_JOB; + int RATTING; + int SAY_MAYOR_SENTENCE; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_IDLE2; + string SOUND_IDLE3; + int SPEECH_LINE; + string STORE_NAME; + string STORE_TRIGGERTEXT; + string WEATHER; + + Bryan() + { + SOUND_IDLE = "voices/human/male_idle4.wav"; + SOUND_IDLE2 = "voices/human/male_idle5.wav"; + SOUND_IDLE3 = "voices/human/male_idle6.wav"; + SOUND_DEATH = "none"; + STORE_NAME = "edana_merchant_3"; + STORE_TRIGGERTEXT = "store"; + NO_JOB = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(35); + // PlayRandomSound from: "const.snd.maxvol", SOUND_IDLE, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {"const.snd.maxvol", SOUND_IDLE, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), "const.snd.voice", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(60); + if ((CanSee("player", 128))) + { + } + if (RATTING == 0) + { + } + SPEECH_LINE = RandomInt(1, 2); + if (SPEECH_LINE == 1) + { + SayText("Guards just love me [apples] . Keeps em strong. Care to try one, mate?"); + CallExternal(FindEntityByName("mayorguard"), "bryan_said_so"); + } + else + { + if (SPEECH_LINE == 2) + { + } + } + SayText("Care to try an apple , mate?"); + ASKED_APPLE = 1; + } + + void OnSpawn() override + { + SetName("bryan"); + SetHealth(25); + SetGold(30); + SetName("Bryan the grocer"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + EVIDENCE_FOUND = 0; + SAY_MAYOR_SENTENCE = 0; + RATTING = 0; + ASKED_APPLE = 0; + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = 5; + ATTACK_PERCENTAGE = 0.6; + CIDER = 0; + if ((G_CHRISTMAS_MODE)) + { + SetModelBody(2, 1); + } + ScheduleDelayedEvent(3.0, "check_hat"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("respond_yes", "yes"); + CatchSpeech("respond_no", "no"); + CatchSpeech("say_apple", "apple"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_cider", "cider"); + CatchSpeech("say_mayor", "mayor"); + CatchSpeech("say_rumor", "quest"); + Precache(SOUND_IDLE); + } + + void check_hat() + { + if ((G_CHRISTMAS_MODE)) + { + SetModelBody(2, 1); + } + } + + void say_hi() + { + SayText("Ello there. Care for one of me delicious [apples]?"); + ScheduleDelayedEvent(2, "say_hi2"); + ASKED_APPLE = 1; + } + + void say_hi2() + { + if (!(WEATHER != "clear")) return; + SayText("It ll keep you going in this poor weather we are having."); + } + + void say_apple() + { + SayText("Guards just love me [apples] . Keeps em strong. Care to try one, mate?"); + CallExternal(FindEntityByName("mayorguard"), "bryan_said_so"); + } + + void say_mayor() + { + RATTING = 1; + ScheduleDelayedEvent(1, "say_mayor_delayed"); + } + + void say_mayor_delayed() + { + if (EVIDENCE_FOUND == 0) + { + GOSSIP_LINE = RandomInt(1, 3); + if (GOSSIP_LINE == 1) + { + SayText("Word is , the mayor ain t such a good fella."); + } + else + { + if (GOSSIP_LINE == 2) + { + SayText(I + " hear Edrin s got a pretty colourful past."); + } + else + { + if (GOSSIP_LINE == 3) + { + SayText("Maybe... with the proper incentive... " + I + " d tell ya more."); + } + } + } + } + else + { + SayText(I + " heard the mayor s been caught, and will be spendin a good amount of time locked up."); + PlayAnim("once", "yes"); + } + RATTING = 0; + } + + void worldevent_evidence_found() + { + EVIDENCE_FOUND = 1; + } + + void respond_yes() + { + if (!(ASKED_APPLE == 1)) return; + say_apple(); + ASKED_APPLE = 0; + } + + void respond_no() + { + if (!(ASKED_APPLE == 1)) return; + SayText("But have ya tried one traveler? They re great apples!"); + ASKED_APPLE = 0; + } + + void game_recvoffer_gold() + { + if (!(EVIDENCE_FOUND == 0)) return; + if ("game.offer.gold" >= 15) + { + ReceiveOffer("accept"); + SayText("Tat s a good lad. And here is what I know..."); + PlayAnim("once", "quicklook"); + RATTING = 1; + ScheduleDelayedEvent(3, "give_mayor_info_1"); + } + else + { + ReceiveOffer("reject"); + SayText(A + " lowly begger wouldn t take that offer."); + PlayAnim("once", "no"); + } + } + + void give_mayor_info_1() + { + SayText("Good , no one s around."); + ScheduleDelayedEvent(2, "give_mayor_info_2"); + } + + void give_mayor_info_2() + { + SayText(I + " been seeing some unusual mail coming in to the mayor."); + PlayAnim("once", "pondering3"); + ScheduleDelayedEvent(4, "give_mayor_info_3"); + } + + void give_mayor_info_3() + { + SayText(I + " been thinkin maybe him and the Orcs communicatin by letter."); + PlayAnim("once", "converse2"); + ScheduleDelayedEvent(3, "give_mayor_info_4"); + } + + void give_mayor_info_4() + { + SayText("But " + I + " never had the gall to go check it out."); + ScheduleDelayedEvent(4, "give_mayor_info_5"); + } + + void give_mayor_info_5() + { + SayText("The mayor is clever , if he s suspicious of you, he ll hide the evidence."); + ScheduleDelayedEvent(3, "give_mayor_info_6"); + } + + void give_mayor_info_6() + { + SayText("So don t let em know you re lookin for it mate."); + ScheduleDelayedEvent(3, "give_mayor_info_7"); + } + + void give_mayor_info_7() + { + SayText("Him and his guard s are so corrupt, it makes me sick...they ll do anythin for money."); + ScheduleDelayedEvent(3, "give_mayor_info_8"); + } + + void give_mayor_info_8() + { + SayText(I + " m sure Edrin, the guard over there, will help us. Show him any evidence you find."); + RATTING = 0; + } + + void trade_done() + { + SayText("Have a nice day."); + Say("[.3] [.3] [.3] [.5]"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_apple", 30, 100); + } + + void cider() + { + CIDER = 1; + } + + void say_cider() + { + if (!(CIDER == 1)) return; + SayText("Oh! Sylphiel s cider? Well I had thought she d gotten it already! Tell her the [cider] is on it s way."); + Say("[.6] [.24] [.35] [.4] [.34] [.24] [.35] [.4]"); + PlayAnim("once", "converse1"); + CallExternal(FindEntityByName("wench"), "cider2"); + ScheduleDelayedEvent(1, "say_cider_2"); + if (!(CIDER == 2)) return; + SayText("Oh! She still hasn t gotten it? Well then you must head over to Krythos in the Merchant s Square immediately!"); + CallExternal(FindEntityByName("krythos"), "cider4"); + ScheduleDelayedEvent(1, "say_cider_2"); + if (!(CIDER == 3)) return; + SayText("Well? You should get going!"); + } + + void say_cider_2() + { + CIDER = 3; + } + + void cider3() + { + CIDER = 2; + } + + void say_rumor() + { + PlayAnim("once", "pondering"); + SayText("An old friend of mine , a hermit living in the Thornlands is looking for something precious."); + } + + void worldevent_weather() + { + WEATHER = param1; + } + +} + +} diff --git a/scripts/angelscript/edana/clock_hourhand.as b/scripts/angelscript/edana/clock_hourhand.as new file mode 100644 index 00000000..4371ee3e --- /dev/null +++ b/scripts/angelscript/edana/clock_hourhand.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "worlditems/clock_base.as" + +namespace MS +{ + +class ClockHourhand : CGameScript +{ + int local.updatehourhand; + + ClockHourhand() + { + local.updatehourhand = 1; + } + +} + +} diff --git a/scripts/angelscript/edana/clock_minutehand.as b/scripts/angelscript/edana/clock_minutehand.as new file mode 100644 index 00000000..2d5d3332 --- /dev/null +++ b/scripts/angelscript/edana/clock_minutehand.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "worlditems/clock_base.as" + +namespace MS +{ + +class ClockMinutehand : CGameScript +{ + int local.updateminutehand; + + ClockMinutehand() + { + local.updateminutehand = 1; + } + +} + +} diff --git a/scripts/angelscript/edana/eTC1.as b/scripts/angelscript/edana/eTC1.as new file mode 100644 index 00000000..2d3a628c --- /dev/null +++ b/scripts/angelscript/edana/eTC1.as @@ -0,0 +1,47 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Etc1 : CGameScript +{ + int HAVE_LETTER; + + void OnSpawn() override + { + SetName("mayor_chest"); + } + + void chest_additems() + { + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "smallarms_knife", 1, 0); + } + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + } + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "health_apple", 1, 0); + } + add_gold(RandomInt(1, 5)); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "armor_leather_torn", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_broadhead", 30, 0, 0, 15); + } + if ((HAVE_LETTER)) return; + HAVE_LETTER = 1; + AddStoreItem(STORENAME, "item_letter_mayor", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/edana/edanateller.as b/scripts/angelscript/edana/edanateller.as new file mode 100644 index 00000000..5bce39cb --- /dev/null +++ b/scripts/angelscript/edana/edanateller.as @@ -0,0 +1,143 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "NPCs/base_storage.as" + +namespace MS +{ + +class Edanateller : CGameScript +{ + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + int CHAT_STEPS; + int DID_HELLO; + string GALA_CHEST_POS; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int PLACEHOLDER; + + Edanateller() + { + PLACEHOLDER = 0; + GALA_CHEST_POS = /* TODO: $relpos */ $relpos(55, 8, 0); + NO_HAIL = 1; + NO_JOB = 1; + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetName("Edric of Galat s Storage"); + SetHealth(1); + SetInvincible(true); + SetRace("beloved"); + SetWidth(16); + SetHeight(72); + SetModel("npc/balancepriest1.mdl"); + SetModelBody(1, 1); + SetRoam(false); + SetSayTextRange(1024); + CatchSpeech("heard_hi", "hail"); + CatchSpeech("heard_rumor", "job"); + CatchSpeech("heard_store", "shop"); + } + + void heard_hi() + { + DID_HELLO = 1; + PlayAnim("critical", "talkright"); + SayText("Greetings , welcome to Galat s Weapon and Armor Storage..."); + ScheduleDelayedEvent(5.0, "heard_hi2"); + } + + void heard_hi2() + { + SayText("For a nominal fee , we can store your items here for you."); + ScheduleDelayedEvent(5.0, "heard_hi3"); + } + + void heard_hi3() + { + SayText("We ll gives ya a ticket in exchange for any item we can store."); + ScheduleDelayedEvent(5.0, "heard_hi4"); + } + + void heard_hi4() + { + SayText("Thanks to our contacts with the Felewyn wizards , you can redeem this ticket at any Galat outlet."); + ScheduleDelayedEvent(5.0, "heard_hi5"); + } + + void heard_hi5() + { + SayText("Galat has outlets in Deralia , Gatecity , Kray Eldorad , and now , even in Helena!"); + } + + void heard_rumor() + { + SayText("Look , " + I + "just work here , " + I + " don t live here. You got an item to store, or what?"); + } + + void heard_store() + { + OpenMenu(GetEntityIndex("ent_lastheard")); + } + + void game_menu_getoptions() + { + if (!(DID_HELLO)) + { + DID_HELLO = 1; + SayText("Welcome to Galat s Weapon and Armor Storage!"); + } + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "heard_hi"; + } + + void say_storage_chest() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_storage_chest"); + } + if ((BUSY_CHATTING)) return; + convo_anim(); + CHAT_STEPS = 6; + CHAT_STEP1 = "Ah yes, our new Galat Chest of Wondrous Storage!"; + CHAT_STEP2 = "This new chest here can store items for you, without the need to redeem tickets."; + CHAT_STEP3 = "Simply place the items you wish to store in your hands, and use the chest."; + CHAT_STEP4 = "To withdraw items, use it as you would any chest, simply reach in and take what you need."; + CHAT_STEP5 = "The chest keeps each customer's inventory in a special dimensional pocket only the customer can access."; + CHAT_STEP6 = "The chest can hold about a dozen or so items for each user. It's free to use for a limited time!"; + chat_loop(); + } + + void say_wondrous() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_wondrous"); + } + if ((BUSY_CHATTING)) return; + convo_anim(); + CHAT_STEPS = 4; + CHAT_STEP1 = "With a Wondrous Scroll of Galat's storage you can summon Galat's Chest of Wondrous Storage anywhere you may happen to be!"; + CHAT_STEP2 = "Any Galat customers present can then use the chest to access whatever items they have stored therein."; + CHAT_STEP3 = "Each scroll is only good for one use. Be sure there's a patch of flat ground in front of you, big enough for the chest to manifest in."; + CHAT_STEP4 = "Right now you can purchase these scrolls for the reasonable price of "; + CHAT_STEP4 += GALA_SCROLL_PRICE; + CHAT_STEP4 += " gold!"; + chat_loop(); + } + +} + +} diff --git a/scripts/angelscript/edana/edrin.as b/scripts/angelscript/edana/edrin.as new file mode 100644 index 00000000..e7f76194 --- /dev/null +++ b/scripts/angelscript/edana/edrin.as @@ -0,0 +1,425 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "monsters/base_npc.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Edrin : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string ANIM_WALK; + float CHAT_DELAY; + int GOT_HOME; + string HOME_LOC; + string HOME_YAW; + int NO_HAIL; + int NO_RUMOR; + int QUEST_1; + int QUEST_1_ACCEPTED; + int QUEST_1_ASKEDMAYOR; + string QUEST_1_WINNER; + int REQ_QUEST_NOTDONE; + int THIEF_1; + int XMASS_OLD_GUY; + string script.targetplayer; + + Edrin() + { + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "swordswing1_L"; + NO_RUMOR = 1; + NO_HAIL = 1; + CHAT_DELAY = 6.0; + XMASS_OLD_GUY = 1; + } + + void OnSpawn() override + { + SetHealth(700); + SetMaxHealth(700); + SetGold(50); + SetName("Edrin , Captain of the Guard"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/guard1.mdl"); + SetMoveAnim("walk"); + SetInvincible(true); + THIEF_1 = 2; + QUEST_1 = 0; + QUEST_1_ASKEDMAYOR = 0; + REQ_QUEST_NOTDONE = 1; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_mayor", "mayor"); + CatchSpeech("say_ok", "aye"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_pretend", "pretend"); + CatchSpeech("say_thief", "cutpurse"); + CatchSpeech("say_rumour", "rumour"); + CatchSpeech("say_xmass", "christmas"); + ScheduleDelayedEvent(1.0, "set_home_loc"); + } + + void set_home_loc() + { + HOME_LOC = GetMonsterProperty("origin"); + HOME_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + } + + void say_rumor() + { + say_rumour(); + } + + void say_hi() + { + EmitSound(GetOwner(), CHAN_VOICE, "npc/edrin1.wav", "game.sound.maxvol"); + SayText("Hail , traveller."); + ScheduleDelayedEvent(2, "say_hi_2"); + } + + void say_hi_2() + { + if (!(QUEST_1 < 2)) return; + SayText("...damn that [mayor]"); + QUEST_1_ASKEDMAYOR = 1; + ScheduleDelayedEvent(20, "reset_askedmayor"); + } + + void reset_askedmayor() + { + QUEST_1_ASKEDMAYOR = 0; + } + + void say_mayor() + { + if (!(QUEST_1 < 2)) return; + EmitSound(GetOwner(), CHAN_VOICE, "npc/edrin2.wav", "game.sound.maxvol"); + SayText(I + " suspect the mayor is a traitor , working with the Orcs."); + script.targetplayer = GetEntityIndex("ent_lastspoke"); + ScheduleDelayedEvent(5, "say_mayor_2"); + } + + void say_mayor_2() + { + SayText("If you find evidence of this , you will be well rewarded. " + I + " will brief you through it. Is that all right?"); + QUEST_1 = 1; + OpenMenu(script.targetplayer); + } + + void say_ok() + { + if (!(QUEST_1 < 2)) return; + QUEST_1_ACCEPTED = 1; + SayText("Recently , there has been a courier passing in and out Edana , only delivering a letter to the mayor."); + ScheduleDelayedEvent(4, "say_brief"); + } + + void say_brief() + { + SayText("You ll have to pretend to be him. I ve found out his name is Suliban , so that should be your answer should the mayor ask who you are."); + } + + void game_recvoffer_item() + { + if (param1 == "item_letter_mayor") + { + if (QUEST_1 == 1) + { + } + ReceiveOffer("accept"); + mayorq_done(GetEntityIndex("ent_lastgave")); + } + else + { + if (param1 == "item_thiefmap") + { + if (THIEF_1 == 4) + { + } + ReceiveOffer("accept"); + PlayAnim("once", "return_needle"); + SayText("Ah , what s this? A map of the thieves whereabouts? You have done well, my friend."); + ScheduleDelayedEvent(4, "say_thiefloc"); + } + } + } + + void mayorq_done() + { + SayText("Ahh! That will certainly be enough evidence... Thank you traveller.."); + EmitSound(GetOwner(), CHAN_VOICE, "npc/edrin3.wav", 10); + CallExternal("all", "worldevent_evidence_found"); + QUEST_1 = 2; + REQ_QUEST_NOTDONE = 0; + QUEST_1_WINNER = param1; + ScheduleDelayedEvent(6, "recvletter_2"); + } + + void mayorq_badevidence() + { + SayText("You ll need to return with solid evidence, worthy of a swift conviction."); + PlayAnim("once", "no"); + } + + void recvletter_2() + { + SayText("And please , take this gift."); + // TODO: offer QUEST_1_WINNER gold RandomInt(12, 15) + UseTrigger("evidence_found"); + CallExternal("all", "global_mayorquest_done"); + } + + void trig_flowercompliant() + { + SayText("Hey! Stay out of there!"); + PlayAnim("once", "wave"); + ScheduleDelayedEvent(1.5, "flowers_2"); + } + + void flowers_2() + { + PlayAnim("critical", "idle7"); + ScheduleDelayedEvent(0.2, "go_home"); + } + + void go_home() + { + GOT_HOME = 0; + SetMoveDest(HOME_LOC); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(1.0, "check_home_loop"); + } + + void check_home_loop() + { + if ((GOT_HOME)) return; + ScheduleDelayedEvent(1.0, "check_home_loop"); + if (Distance(GetMonsterProperty("origin"), HOME_LOC) <= 5) + { + SetMoveDest("none"); + SetAngles("face"); + GOT_HOME = 1; + SetMoveAnim(ANIM_IDLE); + } + if (!(Distance(GetMonsterProperty("origin"), HOME_LOC) > 5)) return; + SetMoveAnim(ANIM_WALK); + SetMoveDest(HOME_LOC); + } + + void say_job() + { + SayText("The sewers has been off limits to civilians for quite some time now , due to the aggressive bats that swarmed the place as of late..."); + ScheduleDelayedEvent(8, "say_job2"); + } + + void say_job2() + { + SayText("... and seeing as we re rather short on guards, perhaps you could help us out and clear the place?"); + ScheduleDelayedEvent(7, "say_job3"); + } + + void say_job3() + { + SayText("Be sure to gear up with some proper weapons , though. Those bats rarely sleep alone..."); + ScheduleDelayedEvent(6, "say_job4"); + } + + void say_job4() + { + PlayAnim("once", "talkright"); + SayText("You ll find the entrance to the sewers by the prison, down to the right, by the armorsmith."); + ScheduleDelayedEvent(5, "say_job5"); + } + + void say_job5() + { + SayText("Just move the hay we used to block the hatch."); + ScheduleDelayedEvent(4, "say_job6"); + } + + void say_job6() + { + SayText("Of course , we can t pay you, at the moment, but it is good training."); + } + + void say_rumour() + { + PlayAnim("once", "pondering3"); + SayText("Do " + I + " look like a gossiping mongrel? Be off!"); + } + + void say_thief() + { + if (!(THIEF_1 == 2)) return; + THIEF_1 = 3; + Say("suspicious"); + SayText("If you see anything suspicious around here , you let me know."); + if (!(THIEF_1 == 3)) return; + THIEF_1 = 4; + SayText("If you see any thieves , try bribing them for information , or give threats that " + I + " will lock them up for good."); + ScheduleDelayedEvent(4, "say_thief2"); + } + + void say_thief2() + { + SayText("Aye , " + I + "will have them thieves locked up , if not killed should " + I + " get my hands on them."); + } + + void say_thiefloc() + { + SayText("Hmmmm... this map shows bandits in a few of the local areas , one being in the Thornlands."); + ScheduleDelayedEvent(4, "say_thiefloc2"); + } + + void say_thiefloc2() + { + SayText("There will probably be thieves around the area. If not , look in the caves near the road to Edana."); + ScheduleDelayedEvent(4, "say_thiefloc3"); + } + + void say_thiefloc3() + { + SayText("Bring me proof that you ve killed them and I ll reward you , if not killing them is reward enough."); + ScheduleDelayedEvent(4, "say_thiefloc4"); + } + + void say_thiefloc4() + { + SetVolume(8); + Say("guardwarn"); + SayText("Be wary , it is dangerous outside."); + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + if (QUEST_1 < 2) + { + OpenMenu(GetEntityIndex(m_hLastUsed)); + } + } + + void game_menu_getoptions() + { + if (QUEST_1 == 0) + { + if (!(QUEST_1_ASKEDMAYOR)) + { + string reg.mitem.title = "Say Hello"; + string reg.mitem.type = "say"; + int rnd = RandomInt(0, 3); + if (rnd == 0) + { + string reg.mitem.data = "Hail!"; + } + else + { + if (rnd == 1) + { + string reg.mitem.data = "Hello"; + } + else + { + if (rnd == 2) + { + string reg.mitem.data = "Greetings"; + } + else + { + if (rnd == 3) + { + string reg.mitem.data = "Hi"; + } + } + } + } + } + else + { + string reg.mitem.title = "Inquire About Mayor"; + string reg.mitem.type = "say"; + int rnd = RandomInt(0, 2); + if (rnd == 0) + { + string reg.mitem.data = "Mayor?"; + } + else + { + if (rnd == 1) + { + string reg.mitem.data = "What's the mayor done this time?"; + } + else + { + if (rnd == 2) + { + string reg.mitem.data = "Damn the mayor?"; + } + } + } + } + } + else + { + if (QUEST_1 == 1) + { + if (!(QUEST_1_ACCEPTED)) + { + string reg.mitem.title = "Accept"; + int rnd = RandomInt(0, 3); + if (rnd == 0) + { + string reg.mitem.data = "Aye!"; + } + else + { + if (rnd == 1) + { + string reg.mitem.data = "Alright"; + } + else + { + if (rnd == 2) + { + string reg.mitem.data = "Yes"; + } + else + { + if (rnd == 3) + { + string reg.mitem.data = "Of course"; + } + } + } + } + } + else + { + string reg.mitem.title = "Ask About quest"; + string reg.mitem.data = "What should I do?"; + string reg.mitem.callback = "say_ok"; + } + string reg.mitem.type = "say"; + if ((QUEST_1_ACCEPTED)) + { + if ((ItemExists(param1, "item_letter_mayor"))) + { + } + string reg.mitem.title = "Present Evidence"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_letter_mayor"; + string reg.mitem.callback = "mayorq_done"; + } + } + } + } + +} + +} diff --git a/scripts/angelscript/edana/fletcher.as b/scripts/angelscript/edana/fletcher.as new file mode 100644 index 00000000..ffd538d9 --- /dev/null +++ b/scripts/angelscript/edana/fletcher.as @@ -0,0 +1,152 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "helena/helena_npc.as" + +namespace MS +{ + +class Fletcher : CGameScript +{ + string ANIM_CHAT; + string ANIM_NO; + string ANIM_YES; + string ARROW_AMT; + int CANCHAT; + string HELENA_MODE; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + string SOUND_DEATH; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + string THIS_MAP; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_WEAPONS; + + Fletcher() + { + SOUND_DEATH = "none"; + STORE_NAME = "edana_fletcher"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + NO_HAIL = 1; + ANIM_CHAT = "pondering"; + ANIM_YES = "yes"; + ANIM_NO = "no"; + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + } + + void OnSpawn() override + { + SetHealth(25); + SetGold(25); + SetName("Bertold the Fletcher"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + CANCHAT = 1; + THIS_MAP = StringToLower(GetMapName()); + NO_HAIL = 1; + NO_JOB = 1; + NO_RUMOR = 1; + if (THIS_MAP == "helena") + { + SetName("Hendlekemp , master fletcher of Helena"); + HELENA_MODE = 1; + } + if (THIS_MAP == "gatecity") + { + SetName("Soltov , the traveling fletcher"); + } + if (!(HELENA_MODE)) + { + SetAngles("face"); + } + if (!(THIS_MAP == "edana")) return; + NO_JOB = 0; + NO_RUMOR = 0; + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "proj_arrow_fire", 600, 100, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_wooden", 600, 100, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_broadhead", 600, 100, 0, 60); + AddStoreItem(STORE_NAME, "pack_quiver", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "bows_orcbow", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "bows_treebow", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "bows_shortbow", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "item_feather", 0, 150, SELL_RATIO); + AddStoreItem(STORE_NAME, "proj_bolt_wooden", 100, 100, SELL_RATIO); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "proj_bolt_iron", 200, 100, SELL_RATIO); + } + if (RandomInt(1, 12) == 1) + { + ARROW_AMT = RandomInt(1, 3); + ARROW_AMT *= 30; + AddStoreItem(STORE_NAME, "proj_arrow_jagged", ARROW_AMT, 500, 0.1, 30); + AddStoreItem(STORE_NAME, "proj_arrow_broadhead", ARROW_AMT, 500, 0.1, 30); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORE_NAME, "proj_arrow_silvertipped", 300, 200, 0, 60); + } + if (THIS_MAP == "gatecity") + { + AddStoreItem(STORE_NAME, "proj_arrow_holy", 60, 200, 0.1, 30); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORE_NAME, "proj_bolt_fire", 25, 200, 0, 25); + } + } + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + Say("goods[.34] [.24] [.35] [.40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void say_job() + { + if ((HELENA_MODE)) return; + SayText("Sorry lad " + I + " do all my work at home and have no need for an aide , maybe the armourer could find a place for you?"); + } + + void say_rumor() + { + if ((HELENA_MODE)) return; + PlayAnim("once", "pondering"); + say_rumour2(); + } + + void say_rumour2() + { + SayText("Krythos lacks some confidence in himself and his goods , and he keeps high prices."); + } + +} + +} diff --git a/scripts/angelscript/edana/guard.as b/scripts/angelscript/edana/guard.as new file mode 100644 index 00000000..b503508e --- /dev/null +++ b/scripts/angelscript/edana/guard.as @@ -0,0 +1,190 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Guard : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK1_DAMAGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_HUNT; + int CAN_RETALIATE; + int HUNT_AGRO; + int INNOCENT; + int MOVE_RANGE; + string NPC_MOVE_TARGET; + string PERP; + float RETALIATE_CHANGETARGET_CHANCE; + int SEE_ENEMY; + string SEE_ENEMY_NOW; + string SND_DISMISS; + string SND_DISMISS2; + string SND_SHOUT; + string SND_SHOUT2; + string SOUND_DIE; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_STRUCK1; + int SURRENDER; + int SURRENDERED; + + Guard() + { + ATTACK_RANGE = 100; + ATTACK1_DAMAGE = 5; + ATTACK_PERCENTAGE = 0.8; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "swordswing1_L"; + ANIM_DEATH = "diesimple"; + MOVE_RANGE = 64; + SEE_ENEMY_NOW = "equals"; + SEE_ENEMY = 0; + INNOCENT = 0; + SURRENDER = 0; + SURRENDERED = 0; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_HUNT = 1; + CAN_ATTACK = 1; + HUNT_AGRO = 0; + SOUND_STRUCK1 = "body/armour4.wav"; + SOUND_HIT = "voices/human/male_hit1.wav"; + SOUND_HIT2 = "voices/human/male_hit2.wav"; + SOUND_HIT3 = "voices/human/male_hit3.wav"; + SOUND_DIE = "voices/human/male_die.wav"; + SND_SHOUT = "voices/human/male_guard_shout.wav"; + SND_SHOUT2 = "voices/human/male_guard_shout2.wav"; + SND_DISMISS = "voices/human/male_guard_dismiss.wav"; + SND_DISMISS2 = "voices/human/male_guard_dismiss2.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(45); + CanSee("player"); + SetMoveDest(m_hLastSeen); + if (SURRENDERED == 1) + { + } + SetVolume(7); + // PlayRandomSound from: SND_DISMISS, SND_DISMISS2 + array sounds = {SND_DISMISS, SND_DISMISS2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(2); + if (!(SURRENDERED)) + { + } + NPC_MOVE_TARGET = PERP; + } + + void OnSpawn() override + { + SetHealth(60); + SetMaxHealth(60); + SetGold(RandomInt(1, 4)); + SetWidth(32); + SetHeight(72); + SetRace("hguard"); + SetSkillLevel(13); + SetName("Guard"); + SetRoam(true); + SetModel("npc/guard1.mdl"); + SetMoveAnim(ANIM_WALK); + SetStepSize(25); + SetActionAnim(ANIM_ATTACK); + CatchSpeech("say_surrender", I); + CatchSpeech("say_surrender", "give"); + CatchSpeech("say_surrender", "mercy"); + CatchSpeech("say_nothing", I); + CatchSpeech("say_nothing", I); + CatchSpeech("say_nothing", I); + CatchSpeech("say_nothing", I); + CatchSpeech("say_nothing", "innocent"); + } + + void game_dynamically_created() + { + NPC_MOVE_TARGET = param1; + PERP = param1; + ScheduleDelayedEvent(1.0, "set_target"); + } + + void set_target() + { + npcatk_settarget(NPC_MOVE_TARGET); + } + + void say_surrender() + { + SURRENDERED = 1; + SURRENDER = RandomInt(1, 2); + SetRace("human"); + surrender1(); + surrender2(); + NPC_MOVE_TARGET = "enemy"; + ScheduleDelayedEvent(60, "disappear"); + } + + void surrender1() + { + if (!(SURRENDER == 1)) return; + SayText("All right , but stay out of trouble next time."); + npcatk_clear_targets(); + } + + void surrender2() + { + if (!(SURRENDER == 2)) return; + SayText("All right , but stay out of trouble next time."); + npcatk_clear_targets(); + } + + void say_nothing() + { + if (!(SURRENDERED == 0)) return; + if (!(INNOCENT == 0)) return; + SetMoveAnim(ANIM_WALK); + SayText("Is that so? Well , off with you , then , and don t let me see you again, because if I do, you re in trouble!"); + INNOCENT = 1; + npcatk_clear_targets(); + ScheduleDelayedEvent(40, "reset_hostility"); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(10); + // PlayRandomSound from: SOUND_STRUCK1 + array sounds = {SOUND_STRUCK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + // PlayRandomSound from: SOUND_HIT, SOUND_HIT2, SOUND_HIT3 + array sounds = {SOUND_HIT, SOUND_HIT2, SOUND_HIT3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void disappear() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/edana/healer.as b/scripts/angelscript/edana/healer.as new file mode 100644 index 00000000..17ddf938 --- /dev/null +++ b/scripts/angelscript/edana/healer.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Healer : CGameScript +{ + int EVIDENCE_FOUND; + int NO_JOB; + string SOUND_DEATH; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + + Healer() + { + SOUND_DEATH = "none"; + STORE_NAME = "edana_healer"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + EVIDENCE_FOUND = 0; + NO_JOB = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(25); + if ((CanSee("player", 256))) + { + } + SayText("Puh-potions! " + I-I + " got potions!"); + } + + void OnSpawn() override + { + SetHealth(60); + SetGold(0); + SetName("Hartold the Mage"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_rumor", "rumours"); + } + + void game_targeted_by_player() + { + help_vendor_magic(param1); + } + + void say_hi() + { + SayText("He- He- Howdy! How about so-some po- , po- , po- , healing items?"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_mpotion", 30, 100, 0.1); + AddStoreItem(STORE_NAME, "health_lpotion", 30, 110, 0.1); + AddStoreItem(STORE_NAME, "scroll_fire_dart", RandomInt(0, 1), 120); + AddStoreItem(STORE_NAME, "scroll_lightning_weak", RandomInt(0, 1), 120); + AddStoreItem(STORE_NAME, "scroll2_glow", 1, 120); + AddStoreItem(STORE_NAME, "mana_mpotion", 5, 105, 0.1); + AddStoreItem(STORE_NAME, "scroll_rejuvenate", 1, 200, 0.1); + AddStoreItem(STORE_NAME, "scroll2_rejuvenate", 1, 800, 0.1); + AddStoreItem(STORE_NAME, "sheath_spellbook", RandomInt(1, 2), 100, 0.1); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "health_spotion", RandomInt(1, 4), 100); + } + } + + void say_rumor() + { + PlayAnim("once", "pondering"); + ScheduleDelayedEvent(1.5, "say_rumour2"); + } + + void say_rumour2() + { + SayText(I + " h-hear the fletcher will buy hawk f-feathers at a very high price."); + ScheduleDelayedEvent(3, "say_rumour3"); + } + + void say_rumour3() + { + if (!(EVIDENCE_FOUND == 1)) return; + SayText("Oh! A-and the may-o-r has be-en found a trai-tor!"); + } + + void worldevent_evidence_found() + { + EVIDENCE_FOUND = 1; + } + +} + +} diff --git a/scripts/angelscript/edana/highpriest.as b/scripts/angelscript/edana/highpriest.as new file mode 100644 index 00000000..14ff8457 --- /dev/null +++ b/scripts/angelscript/edana/highpriest.as @@ -0,0 +1,114 @@ +#pragma context server + +namespace MS +{ + +class Highpriest : CGameScript +{ + int ATTACK1_DAMAGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + + void OnRepeatTimer() + { + SetRepeatDelay(0.3); + CanSee(CURRENT_ALLY); + SetMoveDest(m_hLastSeen); + } + + void OnSpawn() override + { + SetHealth(60); + SetMaxHealth(60); + SetGold(0); + SetName("High Priest"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + ATTACK_RANGE = 100; + ATTACK1_DAMAGE = -1000; + ATTACK_PERCENTAGE = 1.0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_hi", "hello"); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_hi", "greet"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_job", "work"); + CatchSpeech("say_rumour", "rumours"); + CatchSpeech("say_rumour", "news"); + CatchSpeech("say_rumour", "happenings"); + CatchSpeech("say_rumour", "rumor"); + CatchSpeech("say_heal", "heal"); + CatchSpeech("say_heal", "regenerate"); + CatchSpeech("say_heal", "reconstitute"); + CatchSpeech("say_heal", "wounds"); + CatchSpeech("say_heal", "wounded"); + CatchSpeech("say_heal", "healing"); + } + + void say_hi() + { + SetVolume(10); + SayText("..."); + } + + void say_job() + { + SetVolume(10); + SayText("It is the duty of each one of us to server Urdual with all of our heart."); + } + + void say_rumour() + { + SayText("Long ago , a fallen elf left the Temple of Balance to aid Torkalath and his orcs."); + ScheduleDelayedEvent(5, "say_rumour2"); + } + + void say_rumour2() + { + SayText("That fool didn t know much of the orcs, and we begged him not to go."); + ScheduleDelayedEvent(5, "say_rumour3"); + } + + void say_rumour3() + { + SayText("They tricked him into believeing they would let him help , but instead they killed him and ate his body."); + ScheduleDelayedEvent(5, "say_rumour4"); + } + + void say_rumour4() + { + SayText("The Circle of Seven trapped his soul into his armor so they could use his rage on their berserkers."); + ScheduleDelayedEvent(5, "say_rumour5"); + } + + void say_rumour5() + { + SayText(I + " believe the elf s name was Geric."); + } + + void say_heal() + { + SayText("Oh my , let me help you with that..."); + PlayAnim("once", "retina"); + ScheduleDelayedEvent(1, "attack_1"); + } + + void attack_1() + { + ApplyEffect("ent_lastspoke", "effects/effect_rejuv2", 0, 1000, GetEntityIndex(GetOwner())); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Ask to be Healed"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_heal"; + } + +} + +} diff --git a/scripts/angelscript/edana/map_startup.as b/scripts/angelscript/edana/map_startup.as new file mode 100644 index 00000000..5b5672d4 --- /dev/null +++ b/scripts/angelscript/edana/map_startup.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "edana"; + MAP_WEATHER = "clear;clear;clear;clear;rain;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "The Village of Edana"); + SetGlobalVar("G_MAP_DESC", "This village grew around the temple of Urdual of the southern frontier."); + SetGlobalVar("G_MAP_DIFF", "(Beginner/Safe Area)"); + SetGlobalVar("G_WARN_HP", 0); + } + + void game_newlevel() + { + string reg.texture.name = "reflective"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.2"; + int reg.texture.reflect.range = 256; + int reg.texture.reflect.world = 0; + int reg.texture.water = 0; + // TODO: registertexture + } + +} + +} diff --git a/scripts/angelscript/edana/masterp.as b/scripts/angelscript/edana/masterp.as new file mode 100644 index 00000000..9bfc8288 --- /dev/null +++ b/scripts/angelscript/edana/masterp.as @@ -0,0 +1,1028 @@ +#pragma context server + +#include "monsters/base_chat_array.as" +#include "help/first_npc.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Masterp : CGameScript +{ + int CHANGING_NAME; + int CHAT_AUTO_HAIL; + int CHAT_AUTO_JOB; + int CHAT_AUTO_RUMOR; + float CHAT_DELAY; + int CHAT_MENU_ON; + int CHAT_NEVER_INTERRUPT; + int DID_CHANGE_INTRO; + int DID_INTRO; + int EVIDENCE_FOUND; + string IDLE_ANIMLIST; + int IS_REPORTER; + string NAME_REQ_ID; + string REPORTER_ID; + string REPORTER_REWARD_MODE; + string REPRESS_COUNT; + string REWARD_MAXIDX; + string RING_BEARER; + string RING_EXPLAINED; + int SENDING_YN; + string USER_ID; + int XMASS_OLD_GUY; + + Masterp() + { + IDLE_ANIMLIST = "idle1;idle3;idle4;idle5;idle6;idle7"; + CHAT_DELAY = 5.0; + CHAT_AUTO_HAIL = 1; + CHAT_AUTO_JOB = 1; + CHAT_AUTO_RUMOR = 1; + CHAT_NEVER_INTERRUPT = 1; + XMASS_OLD_GUY = 1; + array ARRAY_REPORTER_NAMES; + array ARRAY_REPORTER_IDS; + array ARRAY_REPORTER_SLOTS; + array ARRAY_REPORTER_LEVELS; + ARRAY_REPORTER_NAMES.insertLast("test"); + ARRAY_REPORTER_IDS.insertLast("test"); + ARRAY_REPORTER_SLOTS.insertLast(1); + ARRAY_REPORTER_LEVELS.insertLast(2); + ARRAY_REPORTER_NAMES.insertLast("supercoke"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:31595593"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(3); + ARRAY_REPORTER_NAMES.insertLast("franky"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:45647947"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(3); + ARRAY_REPORTER_NAMES.insertLast("keldorn"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:19648837"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(2); + ARRAY_REPORTER_NAMES.insertLast("Caluminium"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:6356008"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("joe"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:4859157"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("zeus9860"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:11447863"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("Gorynych"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:8893328"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("Wishbone"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:5003092"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("Thothie"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:4528762"); + ARRAY_REPORTER_SLOTS.insertLast(2); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("Unknown_Donator5"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:1339151"); + ARRAY_REPORTER_SLOTS.insertLast(1); + ARRAY_REPORTER_LEVELS.insertLast(2); + ARRAY_REPORTER_NAMES.insertLast("Unknown_Donator4"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:15435276"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("Unknown_Donator3"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:5168669"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("dridge"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:4985228"); + ARRAY_REPORTER_SLOTS.insertLast(1); + ARRAY_REPORTER_LEVELS.insertLast(2); + ARRAY_REPORTER_NAMES.insertLast("Unknown_Donator2"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:838591"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("Unknown_Donator1"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:17717134"); + ARRAY_REPORTER_SLOTS.insertLast(1); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("Older_Than_Dirt "); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:1184501"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(2); + ARRAY_REPORTER_NAMES.insertLast("rhys8866"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:21530096"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("echo717"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:15435276"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("Unit24"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:753033"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("Hakariaki"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:398691"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("SilentDeath"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:2228787"); + ARRAY_REPORTER_SLOTS.insertLast(1); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("TheOysterHippopotami"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:148504"); + ARRAY_REPORTER_SLOTS.insertLast(1); + ARRAY_REPORTER_LEVELS.insertLast(5); + ARRAY_REPORTER_NAMES.insertLast("Uberzolik"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:18944283"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(2); + ARRAY_REPORTER_NAMES.insertLast("Anonymouse"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:9107196"); + ARRAY_REPORTER_SLOTS.insertLast(2); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("Snebbers"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:1:16195506"); + ARRAY_REPORTER_SLOTS.insertLast(0); + ARRAY_REPORTER_LEVELS.insertLast(1); + ARRAY_REPORTER_NAMES.insertLast("greatguys1"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:20630963"); + ARRAY_REPORTER_SLOTS.insertLast(1); + ARRAY_REPORTER_LEVELS.insertLast(2); + ARRAY_REPORTER_NAMES.insertLast("Lucifer Majiskus"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:17717134"); + ARRAY_REPORTER_SLOTS.insertLast(1); + ARRAY_REPORTER_LEVELS.insertLast(5); + ARRAY_REPORTER_NAMES.insertLast("D.Drew"); + ARRAY_REPORTER_IDS.insertLast("STEAM_0:0:1067405"); + ARRAY_REPORTER_SLOTS.insertLast(1); + ARRAY_REPORTER_LEVELS.insertLast(1); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(8.0, 12.0)); + if (!(CHAT_BUSY)) + { + } + string N_IDLES = GetTokenCount(IDLE_ANIMLIST, ";"); + N_IDLES -= 1; + int RND_IDLE = RandomInt(0, N_IDLES); + string RND_IDLE_ANIM = GetToken(IDLE_ANIMLIST, RND_IDLE, ";"); + PlayAnim("once", RND_IDLE_ANIM); + } + + void OnSpawn() override + { + SetHealth(1); + SetName("Sembelbin"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + SetNoPush(true); + SetSayTextRange(1024); + SetIdleAnim("idle1"); + if (!(true)) return; + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_rumor", "deed"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_apostles", "apostle"); + CatchSpeech("say_bloodrose", "blood"); + CatchSpeech("say_changes", "changes"); + CatchSpeech("say_city", "city"); + CatchSpeech("say_elves", "elve"); + CatchSpeech("say_forest", "forest"); + CatchSpeech("say_history", "Undamael"); + CatchSpeech("say_thornlands", "land"); + CatchSpeech("say_loreldians", "loreldians"); + CatchSpeech("say_malgor", "malgor"); + CatchSpeech("say_orcs", "orc"); + CatchSpeech("say_helena", "helena"); + CatchSpeech("say_felewyn", "felewyn"); + CatchSpeech("say_temple", "temple"); + CatchSpeech("say_temple3x", "more"); + CatchSpeech("say_torkalath", "tork"); + CatchSpeech("say_undead", "undead"); + CatchSpeech("say_unbal", "unbalance"); + CatchSpeech("say_unquest", "unquest"); + CatchSpeech("say_pathos", "pathos"); + CatchSpeech("say_thelost", "lost"); + CatchSpeech("say_aob", "age of"); + CatchSpeech("say_urdual", "urdual"); + CatchSpeech("say_shad", "shad"); + CatchSpeech("say_maldora", "mald"); + CatchSpeech("say_pillarquest", "xyphemox"); + CatchSpeech("say_allIknow", "zahlon"); + load_chat(); + scan_for_players(); + } + + void scan_for_players() + { + if (!(DID_INTRO)) + { + ScheduleDelayedEvent(2.0, "scan_for_players"); + } + if ((DID_INTRO)) return; + if (!(false)) return; + if (!(GetEntityMaxHealth(m_hLastSeen) < 10)) return; + DID_INTRO = 1; + do_intro(); + } + + void do_intro() + { + if ((CHAT_BUSY)) return; + chat_now("Ahh, another adventurer! Please, come here and speak with me!", 3.0, "gluonshow"); + } + + void load_chat() + { + chat_add_text("say_intro", "Ahh, another adventurer! Please, come here and speak with me!", 3.0, "gluonshow"); + chat_add_text("say_intro", "I've been recently disturbed by the [changes] around the [Thornlands]."); + chat_add_text("say_hi", "Greetings, young adventurer. What brings you here? I have knowledge of many things...", CHAT_DELAY, "talkright"); + chat_add_text("say_hi", "I can tell you of the [history], the [land], the [cities] and other places; and of the [Unbalance] that has recently reached our [temple]."); + chat_add_text("say_city", "We are on the outskirts of Edana, the largest city in the Southeast. To the northeast is [Helena], on the borders of the plains of Daragoth.", 6.0); + chat_add_text("say_city", "Beyond those dangerous planes lies Deralia, the jewel of civilization and capital of the kingdom."); + chat_add_text("say_city", "North of [Thornlands], past the nexus of [Bloodrose], lies the [Elven] city Kray Eldorad."); + chat_add_text("say_city", "But troubles in the [Bloodrose] pass have made travel difficult, and thus sightings of [elves] are rare indeed."); + chat_add_text("say_bloodrose", "Bloodrose lies beyond the [Thornlands], between the human lands, and those of the [elves]."); + chat_add_text("say_bloodrose", "Strange troubles there have all but cut off the connections between our two peoples."); + chat_add_text("say_elves", "The elves are the first of the Enlightened Races, most closely resembling the goddess who created them."); + chat_add_text("say_elves", "They are a people of fierce honor, and wondrous majesty."); + chat_add_text("say_loreldians", "The Loreldians, former keepers of this world, masters of a forbidden magic that nearly destroyed all that is."); + chat_add_text("say_loreldians", "After the great Wars of Fate, only but a handful remained, and they vowed to banish themselves from this world."); + chat_add_text("say_loreldians", "This, to save it from inevitable destruction at their own hands, for they had indeed become that powerful."); + chat_add_text("say_loreldians", "Three were elected by [Pathos] to stay behind, and these are the great guardian gods we know today as The Triad:"); + chat_add_text("say_loreldians", "[Felewyn] of Order, [Torkalath] of Chaos, and [Urdual] of Balance."); + chat_add_text("say_unbal", "Recently, the [undead] have begun returning, plaguing the lands. Also, an alarming number of [orcs] have appeared."); + chat_add_text("say_unbal", "These are all thought to be indications of a great imbalance, looming on the horizon."); + chat_add_text("say_pathos", "The Golden God, the Shining One, the Guardian who awaits beyond The Gate of Dreams, many are the names of this most exalted, and most distant god of gods.", 7.0); + chat_add_text("say_pathos", "He has no temples, but each temple of The Triad has an aspect of Pathos within it, for it is He who chose our gods from among His people before leaving this world.", 7.0); + chat_add_text("say_pathos", "It is He who saved the world from the War of Fate through self-sacrifice and denial of His own desires and those of His own kin.", 7.0); + chat_add_text("say_pathos", "It is He who returned from The Beyond, for a time, to save us from destruction at the hands of the mad [Lor Malgoriand], ending the [Age of Blood].", 7.0); + chat_add_text("say_pathos", "The Triad of gods he left to guard us complement one another and sustain the world. It is in His infinite wisdom that this diametric opposition was created.", 7.0); + chat_add_text("say_pathos", "For Pathos knew, while no [Loreldian] has within Himself the power to slay another, and it requires two to imprison a third...", 7.0); + chat_add_text("say_pathos", "...it takes no less than three to destroy a forth forever."); + chat_add_text("say_pathos", "Thus is the eternal reign of The Triad ensured, as is their eternal struggle, from which all progress is born."); + chat_add_text("say_temple", "This temple is dedicated to Urdual, the venerable and wise deity of balance."); + chat_add_text("say_temple", "Urdual's fate is to balance. Where there is too much order, he creates chaos. Where there is too much chaos, he creates order."); + chat_add_text("say_temple", "It is he who forged the hearty Dwarves, who can live deep within the mountains, and thus separate themselves from the cycles of chaos and order."); + chat_add_text("say_temple", "Do you wish to know [more] of the temple?"); + chat_add_text("say_temple_more", "There's a reason for the somewhat 'unusual' way a temple of [Urdual] such as this is built."); + chat_add_text("say_temple_more", "Each stone that forms this delicate structure has been blessed in another order's temple."); + chat_add_text("say_temple_more", "The dark side of this temple is imbued with the strength of the god of chaos and freedom, [Torkalath]..."); + chat_add_text("say_temple_more", "While the bright side is imbued with the power of order and law that emanates from [Felewyn's] shrines."); + chat_add_text("say_temple_more", "The gold between them represents the founding power of [Pathos] which binds them together in common cause."); + chat_add_text("say_temple_more", "It's a delicate balance. Would one side be slightly too weak or powerful, the entire temple may crack and crumble."); + chat_add_text("say_temple_more", "If the power of chaos or order overwhelms an area, the nearby temples of [Urdual] often become asymmetric, and crack."); + chat_add_text("say_temple_more", "Many such 'cracked' temples are scattered across the land...", 3.0); + chat_add_text("say_temple_more", "Most are filled with monsters, bent on spawning yet more unbalance.", 3.0); + chat_add_text("say_temple_more", "Here, all is well enough, for now. But watch your step, for the paths of light and darkness are known to be a bit tricky."); + chat_add_text("say_history", "Much of history is tainted by darkness, and amongst the darkest of these taints is the Lord Undamael."); + chat_add_text("say_history", "The final abominable creation of [Lor Malgoriand], surviving even his master's defeat, he was eventually overcome by the power of a cabal of five powerful magi.", 7.0); + chat_add_text("say_history", "The army of [undead], which was under his command, has scattered. But some say the lord himself still lives on..."); + chat_add_text("say_history", "It is said that it is he who causing the eternal night which has befallen the [forest] to the west."); + chat_add_text("say_forest", "The forest to the west was once beautiful, but ever since the evil came, the place has been cursed."); + chat_add_text("say_forest", "Now it is called Eswen Meldanual, meaning 'Forest of Midnight.'"); + chat_add_text("say_malgor", "Ahh, Lor Malgoriand, as he was dubbed by the elves, litterally 'The Bringer of Darkness.'"); + chat_add_text("say_malgor", "Hundreds of years ago he brought ruin and death to three quarters of the known world!"); + chat_add_text("say_malgor", "If not for Lor Malgoriand, we would not have to deal with the [orcs] and mayhaps not even the [undead]."); + chat_add_text("say_malgor", "Though he began as an [Apostle] of [Torkalath], tasked with restoring the balance, he had become infected with the madness of [The Lost]."); + chat_add_text("say_malgor", "Though defeated by the [Apostles] after much bloodshed, his power and his minions still linger..."); + chat_add_text("say_malgor", "...and there are many who believe he may one day return."); + chat_add_text("say_thelost", "In times before man and dwarf and even elf, there were the Gods of Fate, known as [Loreldians], who banished themselves from this world."); + chat_add_text("say_thelost", "But among these gods were those that refused to leave... Thus began the war of the gods, The Great War of Fate."); + chat_add_text("say_thelost", "When the war concluded, those gods of hate and greed had their very existence stricken from all time and memory, and thus are forever known only as 'The Lost'.", 7.0); + chat_add_text("say_thelost", "But their power was such and their hate was so strong, that even with their souls shredded and scattered across the cosmos, the shadow of their evil remained.", 7.0); + chat_add_text("say_thelost", "That hate now infects the outermost edges of the very Threads of Fate, and is constantly searching for ways into our world."); + chat_add_text("say_thelost", "Sometimes it succeeds and causes great disturbances, manifestations of pure violence and destruction. Mindless horrors beyond imagining.", 7.0); + chat_add_text("say_thelost", "Sometimes those truly lost in misery, hatred, or despair, find themselves possessed by the power of this ancient force."); + chat_add_text("say_thelost", "Such was the case of [Lor Malgoriand], once a mighty [Apostle] of [Torakalath], he was seduced by the power of The Lost."); + chat_add_text("say_thelost", "This was unbeknownst to all, until it was too late."); + chat_add_text("say_apostles", "The Apostles are the warriors of Fate, patrons of the gods, their power drawn upon that of the [Loreldians] themselves."); + chat_add_text("say_apostles", "None knows what became of those who helped defeat [Lor Malgoriand] at the close of the [Age of Blood]."); + chat_add_text("say_apostles", "We only pray that they can be called upon once again when the need will arise, as there is no doubt it will."); + chat_add_text("say_rumor", "Rumors? Well... I do know of one... Let me tell you a local story..."); + chat_add_text("say_rumor", "Years ago, Deralia was ruled by a Tyrant-King. Only one man dared to challenge him: Kustrin, then mayor of Edana."); + chat_add_text("say_rumor", "Kustrin was assassinated, which so infuriated his son that he went to Deralia to settle the score."); + chat_add_text("say_rumor", "The king was arrogant, and not about to show fear of a little boy. He accepted the challenge to a duel."); + chat_add_text("say_rumor", "What the king did not know was that the son had been studying swordplay all his life: thus the king was slain."); + chat_add_text("say_rumor", "The boy's name? You'll soon meet him if you haven't already. But watch out, don't tread on his flowers!"); + chat_add_text("say_pq", "Oh my, that ancient ring belonged to the legendary high priest Zahlon Erste."); + chat_add_text("say_pq", "Xyphemox was his title name in the Order of Urdual.", 3.0); + chat_add_text("say_pq", "Legend has it that he was slain shortly after imprisoning the undead sorcerer [Shadahar]."); + chat_add_text("say_pq", "It is foretold... That a fool of great power shall release [Shadahar] from his tomb."); + chat_add_text("say_pq", "Thus marking the beginning of a great imbalance.", 3.0); + chat_add_text("say_pq", "Perhaps you are that fool?", 2.0, "retina"); + chat_add_text("say_allIknow", "That is all I know on the subject, for I no longer venture beyond these halls."); + chat_add_text("say_allIknow", "If there is more to discover, I'm afraid it is up to you to do so."); + chat_add_text("gave_ring", "I suppose you are that fool after all.", CHAT_DELAY, "idle4"); + chat_add_text("gave_ring", "The prophecy is clear, as is my duty, though I am loathed to perform it."); + chat_add_text("gave_ring", "I shall restore the magic of this ring, and return it to you, as is ordained."); + chat_add_text("gave_ring", "But woe is thee, for thou art the Ring Bearer, and harbinger of [Shadahar's] return.", CHAT_DELAY, "gluonshow"); + chat_add_text("gave_ring", "Do with this ring as thou wilt, and I pray this evil shall yet be turned to good by your hand.", CHAT_DELAY, "kneel"); + chat_add_text("say_felewyn", "Felewyn is the goddess of order and law. [Elves] worship her as their creator, save for those who serve [Torkalath] or [Urdual]."); + chat_add_text("say_felewyn", "But those few are shunned, sometimes even hunted, by their more traditional kin."); + chat_add_text("say_felewyn", "It is she who brought forth the herd animals and the hive-minded worker insects and other creatures of a calm and orderly nature in ages past..."); + chat_add_text("say_felewyn", "She encourages those would uphold the law of the land over their own selfish desires, who protect the weak from the strong, and maintain discipline and order."); + chat_add_text("say_torkalath", "Torkalath is the god of strength, of freedom, and of chaos. He believes in strengthening ones self through strife and struggle."); + chat_add_text("say_torkalath", "He encourages those who defend their individuality, who resist conformity, and those who realize their fullest potential in whatever they may do."); + chat_add_text("say_torkalath", "He created the great predatory beasts of the land during the recovery that followed the War of Fate, granting them strength, cunning, and grace."); + chat_add_text("say_torkalath", "It is He who eventually forged the soul of man: ever striving and ever ambitious, flexible, adaptable, and clever."); + chat_add_text("say_torkalath", "He gifted the [Orcs] to [Lor Malgoriand] at the beginning of the [Age of Blood], and created many of the other great warrior races that dot the lands."); + chat_add_text("say_urdual", "Urdual is the god of balance.", 3.0); + chat_add_text("say_urdual", "The eldest of The Triad, His wisdom is sought after by the other two gods to determine the path of the ever-swinging pendulum of order and chaos."); + chat_add_text("say_urdual", "[Torkalath] and [Felewyn] are at constant odds, and thus [Urdual] serves as the mediator between the two opposing forces of law and freedom."); + chat_add_text("say_urdual", "After the War of Fate, it was He who established the never ending cycles of nature. May they endure eternally."); + chat_add_text("say_urdual", "It is He who created the dwarven race, hearty and stoic, and as unshakable as the stones."); + chat_add_text("say_urdual", "They dwell in the mountains that they may separate themselves from the constant conflicts of the lands. This allows them to play as impartial observers."); + chat_add_text("say_urdual", "...Though it seems their quizzical nature rarely allows them to be exactly that."); + chat_add_text("say_aob", "The Age of Blood of centuries past, describes the nearly two hundred year long war that ended The Crystal Eon of perfect order that came before it."); + chat_add_text("say_aob", "It began at a time when order was so strong that all was stagnant, and they very freedom of thought itself was threatened!", 7.0); + chat_add_text("say_aob", "But so violent was this war, that it broke beyond any new equilibrium, and into a terminal bloody chaos that threatened to engulf the world.", 7.0); + chat_add_text("say_aob", "[Lor Malgoriand], Torkalath's newest [Apostle], the strongest He had ever imbued with power, had been tasked with ending The Crystal Eon...", 7.0); + chat_add_text("say_aob", "...but alas, he was mad with grief from the moment of his endowment."); + chat_add_text("say_aob", "This made him vulnerable to the influence of [The Lost], and before even the gods themselves had known it, he was consumed by the harnessing of their power.", 7.0); + chat_add_text("say_aob", "It was for this reason that even when Torkalath revoked the power He had given His creation, [Lor Malgoriand] did not die."); + chat_add_text("say_aob", "Instead, he grew only stronger, and more possessed of hatred."); + chat_add_text("say_aob", "The war ended, with the return of the prophetic [Pathos], the rise of the [Apostle] Lanethan..."); + chat_add_text("say_aob", "...and the eventual slaying of [Lor Malgoriand] at the hands of [Felewyn] Herself."); + chat_add_text("say_aob", "[Pathos] has left us again, returning to his sleeping comrades, and the [Apostles] of that age have also vanished, but He promised that,"); + chat_add_text("say_aob", "'In the The Beyond He dreams only of us, and thus He watches, and will return, should He be needed again."); + chat_add_text("say_orcs", "The orcs were the first living, breathing tools of [Lor Malgoriand]."); + chat_add_text("say_orcs", "The first were the ice dwelling Maragor tribe, but soon after came the heat loving Borsh, or the [Shadahar] Tribe, as they are now known..."); + chat_add_text("say_orcs", "Lastly, he created the huge and all encompassing Black Hand tribe."); + chat_add_text("say_orcs", "The Black Hand raids villages regularly in these parts to this day. It wasn't so long ago they nearly destroyed [Helena]."); + chat_add_text("say_orcs", "Although the orcs and the [undead] were both tools of [Lor Malgoriand], without their master, it seems they are no longer willing to cooperate."); + chat_add_text("say_orcs", "This is fortunate for us! Indeed, it is the main reason we've managed to maintain the kingdom for so long, despite the hardships."); + chat_add_text("say_undead", "The undead and the [orcs] were among the many vile tools of [Lor Malgoriand] of [The Lost], amongst other evils."); + chat_add_text("say_undead", "Recently, a great force of undead has begun clawing its way up through the ground."); + chat_add_text("say_undead", "If you can find some way to slow their progress, I would be very grateful."); + chat_add_text("say_undead", "Bring me any relics you can find upon their dismembered corpses, and I will judge their usefulness."); + chat_add_text("say_name_change", "For a fee, I can submit for a change of name permit from the King of Deralia, and officially change your name throughout the lands."); + chat_add_text("say_name_change", "Beware, however, this fee increases exponentially each time, beginning at 100 gold."); + chat_add_text("say_name_change", "Do you really wish to have your name changed?"); + chat_add_text("say_shad", "Shadahar was a feared necromancer just prior to the [Age of Blood]."); + chat_add_text("say_shad", "Though his more ambitious activities were kept in check by the forces of order, that were so prevalent at the time, he built many great palaces.", 7.0); + chat_add_text("say_shad", "These were necropolises, where he stored armies of the dead, and other abominations, as he lie in wait for an age when he could rise to power.", 7.0); + chat_add_text("say_shad", "Before his dreams could be realized, however, he was imprisoned by the Xyphemox Zahlon Erste."); + chat_add_text("say_shad", "His greatest palace, a hall of great majesty hidden somewhere in the Aluhandra desert, lay abandon for centuries."); + chat_add_text("say_shad", "But at the end of the [Age of Blood], the Borsh [orc] tribe, having been soundly defeated by the [elves], took refuge within its walls.", 7.0); + chat_add_text("say_shad", "As they bided their time there, they were soon infected with its power."); + chat_add_text("say_shad", "Their chief, the immortal Rungahr, together with his shamans, unlocked many of the necromancer's secrets."); + chat_add_text("say_shad", "Under their chief's guidance, these enchanted orcs have become the most powerful in all the lands, and thus renamed themselves the tribe of Shadahar.", 7.0); + chat_add_text("say_shad", "Thankfully, however, they rarely wander very far from their home of Shadahar, for it is the source of their power."); + chat_add_text("say_maldora", "Ah Maldora... He is a mysterious one. A powerful wizard indeed, some say he may even be the reincarnation of [Lor Malgoriand] himself.", 7.0); + chat_add_text("say_maldora", "There have been rumors of sightings of an ancient [Loreldian] flying fortress, at the very northern edges of the lands."); + chat_add_text("say_maldora", "These same rumors claim that Maldora resides within that fortress."); + chat_add_text("say_maldora", "Such fortresses have not been seen since the [Age of Blood] and even then, they were indeed rare."); + chat_add_text("say_maldora", "Thus, if the rumors to be believed, then Maldora has achieved power almost beyond imagination. Who knows what evil he may bring upon us all?"); + } + + void say_hi() + { + chat_start_sequence("say_hi"); + } + + void say_city() + { + chat_start_sequence("say_city"); + } + + void say_bloodrose() + { + chat_start_sequence("say_bloodrose"); + } + + void say_elves() + { + chat_start_sequence("say_elves"); + } + + void say_loreldians() + { + chat_start_sequence("say_loreldians"); + } + + void say_unbal() + { + chat_start_sequence("say_unbal"); + } + + void say_thornlands() + { + chat_now("The Thornlands was once a beautiful place to visit, but the [unbalance] has destroyed its former luster."); + } + + void say_changes() + { + chat_now("The grass rots. Birds and beasts die. The land is sick. Something must be done to stop the [undead]."); + } + + void say_job() + { + if ((CHAT_BUSY)) + { + chat_busy_message(); + } + if ((CHAT_BUSY)) return; + chat_now("Well newcomers often look into town for such matters."); + if (!(EVIDENCE_FOUND)) return; + CHAT_DELAY("say_job2"); + } + + void say_job2() + { + chat_now("Maybe you could become an errand runner for the next mayor?", 3.0, "retina"); + } + + void worldevent_evidence_found() + { + EVIDENCE_FOUND = 1; + } + + void say_pathos() + { + chat_start_sequence("say_pathos"); + } + + void say_temple() + { + chat_start_sequence("say_temple"); + } + + void say_temple3x() + { + chat_start_sequence("say_temple_more"); + } + + void say_history() + { + chat_start_sequence("say_history"); + } + + void say_forest() + { + chat_start_sequence("say_forest"); + } + + void say_malgor() + { + chat_start_sequence("say_malgor"); + } + + void say_thelost() + { + chat_start_sequence("say_thelost"); + } + + void say_apostles() + { + chat_start_sequence("say_apostles"); + } + + void say_rumor() + { + chat_start_sequence("say_rumor"); + } + + void say_pillarquest() + { + if ((ItemExists("ent_lastspoke", "item_runicsymbol2"))) + { + chat_start_sequence("say_allIknow"); + } + else + { + if ((ItemExists("ent_lastspoke", "item_runicsymbol"))) + { + } + RING_EXPLAINED = 1; + chat_start_sequence("say_pq"); + } + } + + void show_ring() + { + RING_EXPLAINED = 1; + chat_start_sequence("say_pq"); + } + + void gave_ring() + { + RING_BEARER = param1; + chat_start_sequence("gave_ring"); + ScheduleDelayedEvent(16.0, "gave_ring2"); + } + + void gave_ring2() + { + // TODO: offer RING_BEARER item_runicsymbol2 + } + + void say_felewyn() + { + chat_start_sequence("say_felewyn"); + } + + void say_torkalath() + { + chat_start_sequence("say_torkalath"); + } + + void say_urdual() + { + chat_start_sequence("say_urdual"); + } + + void say_aob() + { + chat_start_sequence("say_aob"); + } + + void say_helena() + { + chat_now("Helena is a trading outpost in the center of the human lands. Recently rebuilt, it still struggles to survive."); + } + + void say_undead() + { + chat_start_sequence("say_undead"); + } + + void say_orcs() + { + chat_start_sequence("say_orcs"); + } + + void say_shad() + { + chat_start_sequence("say_shad"); + } + + void say_maldora() + { + chat_start_sequence("say_maldora"); + } + + void say_unquest() + { + PlayAnim("critical", "magic"); + SendInfoMsg("ent_lastspoke", DEBUG + " Quests data is being removed from your character."); + // quest unset "ent_lastspoke" "emote_sitting" + // quest unset "ent_lastspoke" "quest_ring" + } + + void change_name_intro() + { + if ((CHAT_BUSY)) + { + chat_busy_message(); + } + if ((CHAT_BUSY)) return; + if (!(IsValidPlayer(param1))) + { + NAME_REQ_ID = GetEntityIndex("ent_lastspoke"); + } + if ((IsValidPlayer(param1))) + { + NAME_REQ_ID = GetEntityIndex(param1); + } + chat_start_sequence("say_name_change"); + ScheduleDelayedEvent(12.0, "send_name_change_menu"); + DID_CHANGE_INTRO = 1; + SENDING_YN = 1; + CHAT_MENU_ON = 0; + } + + void send_name_change_menu() + { + OpenMenu(NAME_REQ_ID); + } + + void game_menu_cancel() + { + if ((REPORTER_REWARD_MODE)) + { + REPORTER_REWARD_MODE = 0; + CHAT_MENU_ON = 1; + } + if (!(DID_CHANGE_INTRO)) return; + DID_CHANGE_INTRO = 0; + CHAT_MENU_ON = 1; + } + + void check_reporters() + { + string CUR_ID = ARRAY_REPORTER_IDS[int(i)]; + string CUR_SLOT = ARRAY_REPORTER_SLOTS[int(i)]; + string CUR_LEVEL = ARRAY_REPORTER_LEVELS[int(i)]; + if ((G_DEVELOPER_MODE)) + { + string CUR_ID = GetPlayerAuthId(USER_ID); + int CUR_SLOT = 1; + string CUR_LEVEL = ARRAY_REPORTER_LEVELS[int(0)]; + } + if (!(CUR_ID == GetPlayerAuthId(USER_ID))) return; + if (!(CUR_SLOT == GetEntityProperty(USER_ID, "slot"))) return; + if (!(GetPlayerQuestData(USER_ID, "rep") < CUR_LEVEL)) return; + CUR_LEVEL -= GetPlayerQuestData(USER_ID, "rep"); + if ((IS_REPORTER)) return; + if (!(REPRESS_COUNT)) + { + SayText("You have " + int(CUR_LEVEL) + " rewards pending."); + } + IS_REPORTER = 1; + } + + void game_menu_getoptions() + { + USER_ID = param1; + IS_REPORTER = 0; + if ((REPORTER_REWARD_MODE)) + { + REPRESS_COUNT = 1; + } + else + { + REPRESS_COUNT = 0; + for (int i = 0; i < int(ARRAY_REPORTER_IDS.length()); i++) + { + check_reporters(); + } + } + if ((IS_REPORTER)) + { + if (!(REPORTER_REWARD_MODE)) + { + } + string reg.mitem.title = "Get Exploit Report Reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_reporter_menu"; + } + if ((REPORTER_REWARD_MODE)) + { + for (int i = 0; i < int(ARRAY_REPORTER_IDS.length()); i++) + { + check_reporters(); + } + if ((IS_REPORTER)) + { + } + REWARD_MAXIDX = 2; + if (REWARD_IDX == 0) + { + string reg.mitem.title = "All 5 Felewyn Symbols"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "special_felewyn5"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Reset Name Change Count"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "special_name_change_reset"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Summon Bear Scroll"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "scroll2_summon_bear1"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Thunder Breaker"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "blunt_bt"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Chromatic Armor"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "armor_rehab"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "A pair of Crescent Blades"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "special_wcre"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Steam Crossbow"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "bows_sxbow"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Unholy Blade"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "swords_ub"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "[Other "; + reg.mitem.title += int((REWARD_IDX + 1)); + reg.mitem.title += "/"; + reg.mitem.title += int((REWARD_MAXIDX + 1)); + reg.mitem.title += "]"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "special_other"; + string reg.mitem.callback = "give_reporter_reward"; + } + if (REWARD_IDX == 1) + { + string reg.mitem.title = "Shadowfire Blade"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "swords_sf"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Storm Pharos's Lance"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "polearms_ph"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Lance of Affliction"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "polearms_a"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "A pair of Blood Blades"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "special_bloodblades"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Phlame's Staff"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "blunt_staff_f"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Ice Staff"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "blunt_staff_i"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Vorpal Dagger"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "smallarms_eth"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "[Other "; + reg.mitem.title += int((REWARD_IDX + 1)); + reg.mitem.title += "/"; + reg.mitem.title += int((REWARD_MAXIDX + 1)); + reg.mitem.title += "]"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "special_other"; + string reg.mitem.callback = "give_reporter_reward"; + } + if (REWARD_IDX == 2) + { + string reg.mitem.title = "Skull Scythe"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "axes_ss"; + string reg.mitem.callback = "give_reporter_reward"; + string reg.mitem.title = "Wintercleaver"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "axes_df"; + string reg.mitem.callback = "give_reporter_reward"; + } + if (REWARD_IDX == REWARD_MAXIDX) + { + string reg.mitem.title = "[Back to First Page]"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "special_other"; + string reg.mitem.callback = "give_reporter_reward"; + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SENDING_YN)) + { + if (!(DID_CHANGE_INTRO)) + { + string reg.mitem.title = "Change my name"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "change_name_intro"; + } + if ((ItemExists(param1, "item_runicsymbol"))) + { + if (!(RING_EXPLAINED)) + { + string reg.mitem.title = "Show the Expended Ring"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "show_ring"; + } + else + { + string reg.mitem.title = "Give the Expended Ring"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_runicsymbol"; + string reg.mitem.callback = "gave_ring"; + } + } + } + if ((SENDING_YN)) + { + string CHANGE_NAME_TIMES = GetPlayerQuestData(param1, "n"); + if (CHANGE_NAME_TIMES == 0) + { + int CHANGE_NAME_FEE = 100; + } + if (CHANGE_NAME_TIMES == 1) + { + int CHANGE_NAME_FEE = 1000; + } + if (CHANGE_NAME_TIMES == 2) + { + int CHANGE_NAME_FEE = 10000; + } + if (CHANGE_NAME_TIMES == 3) + { + int CHANGE_NAME_FEE = 100000; + } + if (CHANGE_NAME_TIMES == 4) + { + int CHANGE_NAME_FEE = 1000000; + } + if (CHANGE_NAME_TIMES >= 5) + { + int CHANGE_NAME_FEE = 10000000; + } + string reg.mitem.title = "Yes"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + string reg.mitem.callback = "change_name_yes"; + string reg.mitem.cb_failed = "change_name_payment_failed"; + SayText("The fee for this service , in your case , would be " + CHANGE_NAME_FEE + " gold."); + string reg.mitem.title = "no"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "change_name_no"; + SENDING_YN = 0; + CHAT_MENU_ON = 1; + } + } + + void change_name_payment_failed() + { + PlayAnim("critical", "no"); + chat_now("I'm afraid you do not have sufficient funds to cover the king's fees.", 3.0, "none", "clear_que"); + DID_CHANGE_INTRO = 0; + CHAT_MENU_ON = 1; + } + + void change_name_no() + { + PlayAnim("critical", "yes"); + chat_now("That is quite all right, it is better to be certain of one's identity than to change it on a whim.", 4.0, "none", "clear_que"); + DID_CHANGE_INTRO = 0; + CHAT_MENU_ON = 1; + } + + void change_name_yes() + { + chat_now("Speak forth the name you shall hence forth be known as...", 3.0, "none", "clear_que"); + CHANGING_NAME = 1; + } + + void game_heardtext() + { + if (!(CHANGING_NAME)) return; + if ((G_DEVELOPER_MODE)) + { + SendColoredMessage(GetEntityIndex(param2), "Zomg " + GetEntityName(param2) + "spoke to me! " + GetEntityName("ent_lastspoke")); + } + if (GetEntityIndex(param2) != NAME_REQ_ID) + { + SayText("Shush , " + GetEntityName(NAME_REQ_ID) + " here is going to provide me with his new name."); + } + if (!(GetEntityIndex(param2) == NAME_REQ_ID)) return; + string L_NEW_NAME = param1; + string L_SPACE = " "; + if ((L_NEW_NAME).substr(0, 1) == L_SPACE) + { + SayText(I + " m sorry, but you cannot begin your name with a space."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (L_NEW_NAME != /* TODO: $alphanum */ $alphanum(L_NEW_NAME, L_SPACE)) + { + SayText(I + " m sorry, but your name seems to have some characters in it that will not fit in the paperwork."); + SendInfoMsg(NAME_REQ_ID, "Alphanumerics and Spaces Only Please Otherwise, bad things would happen."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((L_NEW_NAME).length() > 30) + { + SayText(I + " m sorry, but your name is too long."); + SendInfoMsg(NAME_REQ_ID, "Name must be under 30 characters Otherwise, bad things would happen."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (L_NEW_NAME == "Saint Thoth") + { + int L_NICE_TRY = 1; + } + if (L_NEW_NAME == "Thothie") + { + int L_NICE_TRY = 1; + } + if (L_NEW_NAME == "Saint Thothie") + { + int L_NICE_TRY = 1; + } + if ((L_NICE_TRY)) + { + SayText("Yeeeaaah... No."); + PlayAnim("critical", "no"); + return; + } + string L_NEW_NAME = /* TODO: $alphanum */ $alphanum(L_NEW_NAME, L_SPACE); + string CHANGE_NAME_TIMES = GetPlayerQuestData(NAME_REQ_ID, "n"); + int CHANGE_NAME_TIMES = int(CHANGE_NAME_TIMES); + CHANGE_NAME_TIMES += 1; + SetPlayerQuestData(NAME_REQ_ID, "n"); + string OLD_NAME = GetEntityName(NAME_REQ_ID); + // TODO: playername NAME_REQ_ID L_NEW_NAME + string MSG_TXT = "From this day forth, "; + MSG_TXT += OLD_NAME; + MSG_TXT += " shall now be known as "; + MSG_TXT += L_NEW_NAME; + MSG_TXT += "!"; + SendInfoMsg("all", "A PROCLOMATION RINGS THROUGHOUT THE LAND! " + MSG_TXT); + PlayAnim("critical", "talkright"); + string OUT_STR = "Very well, from this day forth your name shall be "; + OUT_STR += L_NEW_NAME; + chat_now(OUT_STR, 3.0, "none", "abort"); + DID_CHANGE_INTRO = 0; + CHANGING_NAME = 0; + CHAT_MENU_ON = 1; + } + + void give_reporter_menu() + { + CHAT_MENU_ON = 0; + SayText("Please select your reward."); + REPORTER_REWARD_MODE = 1; + REPORTER_ID = param1; + ScheduleDelayedEvent(0.1, "send_reward_menu"); + } + + void send_reward_menu() + { + OpenMenu(REPORTER_ID); + } + + void give_reporter_reward() + { + if ((param2).findFirst("special_other") == 0) + { + REWARD_IDX += 1; + if (REWARD_IDX > REWARD_MAXIDX) + { + REWARD_IDX = 0; + } + ScheduleDelayedEvent(0.1, "send_reward_menu"); + return; + } + CHAT_MENU_ON = 1; + REPORTER_REWARD_MODE = 0; + IS_REPORTER = 0; + string REP_LEVEL = GetPlayerQuestData(param1, "rep"); + REP_LEVEL += 1; + SetPlayerQuestData(param1, "rep"); + if ((param2).findFirst("special") == 0) + { + if (param2 == "special_name_change_reset") + { + SayText("It is done. Your name change costs have been reset."); + SetPlayerQuestData(param1, "n"); + chat_move_mouth(5.0); + chat_convo_anim(); + } + if (param2 == "special_felewyn5") + { + SetPlayerQuestData(param1, "f"); + SayText("It is done. I present to you all five Felewyn Symbols."); + // TODO: offer PARAM1 item_s1 + // TODO: offer PARAM1 item_s2 + // TODO: offer PARAM1 item_s3 + // TODO: offer PARAM1 item_s4 + // TODO: offer PARAM1 item_s5 + chat_move_mouth(5.0); + chat_convo_anim(); + } + if (param2 == "special_wcre") + { + SayText("It is done. I present to you a pair of Crescent Blades."); + // TODO: offer PARAM1 smallarms_cre + // TODO: offer PARAM1 smallarms_cre + chat_move_mouth(5.0); + chat_convo_anim(); + } + if (param2 == "special_bloodblades") + { + SayText("It is done. I present to you a pair of Blood Blades."); + // TODO: offer PARAM1 swords_vb + // TODO: offer PARAM1 swords_vb + chat_move_mouth(5.0); + chat_convo_anim(); + } + } + else + { + SayText("The gods thank ye for your aid. Here is your chosen reward."); + // TODO: offer PARAM1 PARAM2 + chat_move_mouth(5.0); + chat_convo_anim(); + } + // TODO: UNCONVERTED: savenow PARAM1 + } + +} + +} diff --git a/scripts/angelscript/edana/mayor.as b/scripts/angelscript/edana/mayor.as new file mode 100644 index 00000000..084f942b --- /dev/null +++ b/scripts/angelscript/edana/mayor.as @@ -0,0 +1,134 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Mayor : CGameScript +{ + int ASKED_GUILD; + string IMPOSTER; + int NO_RUMOR; + int OVER; + string SOUND_HELP; + + Mayor() + { + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetHealth(30); + SetGold(15); + SetName("Zerkold, the Mayor"); + SetWidth(32); + SetHeight(72); + SetRace("neutral"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(1, 3); + ASKED_GUILD = 2; + OVER = 0; + SOUND_HELP = "voices/human/male_help_guards.wav"; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_yes", "yes"); + CatchSpeech("say_no", "no"); + CatchSpeech("say_know", "orcs"); + CatchSpeech("say_suliban", "suliban"); + CatchSpeech("say_job", "job"); + Precache("edana/guard"); + } + + void say_hi() + { + SayText("Yes? What do you want? Who are you?"); + ASKED_GUILD = RandomInt(0, 1); + } + + void say_suliban() + { + if ((OVER)) return; + if (ASKED_GUILD > 0) + { + PlayAnim("once", "panic1"); + SayText("Suliban was here an hour ago! You're not him!"); + ASKED_GUILD = 3; + IMPOSTER = GetEntityIndex("ent_lastspoke"); + ScheduleDelayedEvent(120, "reset"); + ScheduleDelayedEvent(1.5, "guards"); + } + else + { + PlayAnim("once", "talkleft"); + SayText("You're here again? You forgot to take the letter with you?"); + ScheduleDelayedEvent(3, "say_suliban2"); + } + OVER = 1; + } + + void guards() + { + string thiername = GetEntityName(IMPOSTER); + SpawnNPC("edana/guard", Vector3(-137, -1131, -250), ScriptMode::Legacy); // params: IMPOSTER + SpawnNPC("edana/guard", Vector3(1038, -284, -60), ScriptMode::Legacy); // params: IMPOSTER + SpawnNPC("edana/guard", Vector3(2428, -1092, -250), ScriptMode::Legacy); // params: IMPOSTER + SayText("Guards! Apprehend thiername"); + SetVolume(10); + EmitSound(GetOwner(), SOUND_HELP); + } + + void reset() + { + ASKED_GUILD = 0; + } + + void say_suliban2() + { + SayText("It's hidden in the secret compartment in my chest. Make sure nobody sees you with it."); + CallExternal(FindEntityByName("mayor_chest"), "showletter"); + ASKED_GUILD = 3; + } + + void say_know() + { + PlayAnim("once", "eye_wipe"); + SayText("You know nothing!"); + RemoveItem("letter"); + } + + void worldevent_evidence_found() + { + DeleteEntity(GetOwner()); + } + + void robbed() + { + SayText("Help! Help! I'm being robbed!"); + PlayAnim("once", "beatdoor"); + UseTrigger("spawnguards"); + } + + void attack_1() + { + DoDamage("ent_laststole", 100, 7, 0.75, "slash"); + } + + void game_recvoffer_gold() + { + ReceiveOffer("accept"); + SayText("Come to donate eh? Well, that's what you should be doing!"); + PlayAnim("once", "pondering3"); + } + + void say_job() + { + SayText("What? No. I don't need help, It's not like I'm planning anything..."); + PlayAnim("once", "quicklook"); + } + +} + +} diff --git a/scripts/angelscript/edana/mayorguard.as b/scripts/angelscript/edana/mayorguard.as new file mode 100644 index 00000000..ce9cffec --- /dev/null +++ b/scripts/angelscript/edana/mayorguard.as @@ -0,0 +1,211 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Mayorguard : CGameScript +{ + string ANIM_ATTACK; + int ATTACK1_DAMAGE; + int ATTACK_RANGE; + int BRIBED; + int EVIDENCE_FOUND; + int HEAR_RANGE; + int NO_RUMOR; + int NPC_REACTS; + int SHOW_APPLE; + int THIEF_1; + + Mayorguard() + { + ANIM_ATTACK = "swordswing1_L"; + ATTACK1_DAMAGE = 30; + ATTACK_RANGE = 128; + NO_RUMOR = 1; + HEAR_RANGE = 100; + NPC_REACTS = 1; + } + + void OnSpawn() override + { + SetName("mayorguard"); + SetHealth(1); + SetName("Mayor s Guard"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/guard1.mdl"); + SetInvincible(true); + SetActionAnim(ANIM_ATTACK); + EVIDENCE_FOUND = 0; + BRIBED = 0; + THIEF_1 = 5; + SHOW_APPLE = 0; + SetMenuAutoOpen(1); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_mayor", "mayor"); + CatchSpeech("say_thief", "thief"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_name", "name"); + } + + void say_name() + { + EmitSound(GetOwner(), CHAN_VOICE, "npc/hello1.wav", 9); + SetName("Dorian"); + SayText("My name is Dorian."); + } + + void say_hi() + { + if (!(BRIBED == 0)) return; + if (!(GetEntityDist("ent_lastspoke") <= HEAR_RANGE)) return; + EmitSound(GetOwner(), CHAN_VOICE, "npc/edrin1.wav", 7); + SayText("If you do not have business with the mayor , be on your way."); + } + + void say_mayor() + { + if (BRIBED == 0) + { + if (!(EVIDENCE_FOUND)) + { + } + SayText("He is much too busy for the likes of you , move on!"); + PlayAnim("once", "no"); + } + if (EVIDENCE_FOUND == 1) + { + SayText("The house is going to be locked until a new mayor is found"); + PlayAnim("once", "no"); + } + } + + void npcreact_targetsighted() + { + if (!(BRIBED == 0)) return; + SayText("Halt! What is your business?"); + PlayAnim("once", "pushbutton2"); + } + + void give_apple() + { + if (!(EVIDENCE_FOUND == 0)) return; + ReceiveOffer("accept"); + SayText(A + " delicious treat , proceed traveller"); + UseTrigger("mayorsdoor"); + BRIBED = 1; + } + + void give_map() + { + if (!(THIEF_1 == 7)) return; + ReceiveOffer("accept"); + PlayAnim("once", "return_needle"); + SayText("Ah , what s this? A map of the thieves whereabouts? You have done well, my friend."); + ScheduleDelayedEvent(4, "say_thiefloc"); + } + + void bribe() + { + ReceiveOffer("accept"); + SayText("*whispering* Thank you , traveller. Proceed."); + PlayAnim("once", "lean"); + UseTrigger("mayorsdoor"); + BRIBED = 1; + } + + void bribe_failed() + { + SayText("You call that a bribe? " + HA! + " If you offer 500 , give me 500!"); + PlayAnim("once", "no"); + } + + void attack_1() + { + DoDamage("ent_laststole", ATTACK_RANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + + void say_job() + { + if (!(GetEntityDist("ent_lastspoke") <= HEAR_RANGE)) return; + SayText("What , do " + I + " look like a tourguide? My job is to protect the mayor , now leave!"); + PlayAnim("once", "no"); + } + + void say_thief() + { + if (!(THIEF_1 == 5)) return; + THIEF_1 = 6; + EmitSound(GetOwner(), "npc/suspicious.wav"); + SayText("If you see anything suspicious around here , you let me know."); + if (!(THIEF_1 == 6)) return; + THIEF_1 = 7; + SayText("If you see any thieves , try bribing them for information , or give threats that " + I + " will lock them up for good."); + ScheduleDelayedEvent(4, "say_thief2"); + } + + void say_thief2() + { + SayText("Aye , " + I + "will have them thieves locked up , if not killed should " + I + " get my hands on them."); + } + + void say_thiefloc() + { + SayText("Hmmmm... this map shows bandits in a few of the local areas , one being in the Thornlands."); + ScheduleDelayedEvent(4, "say_thiefloc2"); + } + + void say_thiefloc2() + { + SayText("There will probably be thieves around the area. If not , look in the caves near the road to Edana."); + ScheduleDelayedEvent(4, "say_thiefloc3"); + } + + void say_thiefloc3() + { + SayText("Bring me proof that you ve killed them and I ll reward you , if not killing them is reward enough."); + ScheduleDelayedEvent(4, "say_thiefloc4"); + } + + void say_thiefloc4() + { + SetVolume(8); + Say("guardwarn"); + SayText("Be wary , it is dangerous outside."); + } + + void worldevent_evidence_found() + { + EVIDENCE_FOUND = 1; + } + + void game_menu_getoptions() + { + if ((EVIDENCE_FOUND)) return; + if ((ItemExists(param1, "health_apple"))) + { + string reg.mitem.title = "Bribe with apple"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "health_apple"; + string reg.mitem.callback = "give_apple"; + } + string reg.mitem.title = "Bribe (500g)"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:500"; + string reg.mitem.callback = "bribe"; + string reg.mitem.cb_failed = "bribe_failed"; + } + + void bryan_said_so() + { + SHOW_APPLE = 1; + } + +} + +} diff --git a/scripts/angelscript/edana/mergur.as b/scripts/angelscript/edana/mergur.as new file mode 100644 index 00000000..8cf54b25 --- /dev/null +++ b/scripts/angelscript/edana/mergur.as @@ -0,0 +1,197 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "help/first_marketsquare.as" +#include "monsters/base_react.as" + +namespace MS +{ + +class Mergur : CGameScript +{ + int CHAT_GREET; + int ENTRY_GOLD; + int NPC_REACT_SEETARGET_RANGE; + int STORE_CLOSED; + + Mergur() + { + NPC_REACT_SEETARGET_RANGE = 128; + } + + void OnSpawn() override + { + SetHealth(20); + SetGold(26); + SetName("Merchant Square Keeper"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(1, 1); + ENTRY_GOLD = RandomInt(2, 4); + SetMenuAutoOpen(1); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumor"); + open_store(); + } + + void npcreact_targetsighted() + { + if (!(CHAT_GREET)) return; + if ((STORE_CLOSED)) return; + say_hi(); + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + say_hi(); + } + + void say_hi() + { + if (!(CHAT_GREET)) return; + if (STORE_CLOSED == 0) + { + PlayAnim("once", "studycart"); + SayText("Greetings and welcome to the merchant square!"); + Say("[.5] [.1] [.1] [.05] [.05] [.1] [.3]"); + ScheduleDelayedEvent(2, "say_hi_2"); + } + else + { + SayText("Sorry, the square is closed from midnight 'til nine"); + Say("[.3] [.1] [.1] [.1] [.1] [.1] [.05] [.05] [.04] [.5]"); + } + CHAT_GREET = 0; + ScheduleDelayedEvent(6, "reset_greet"); + } + + void say_hi_2() + { + SayText("The entry fee is " + ENTRY_GOLD + " gold , you can stay as long as you want."); + } + + void reset_greet() + { + CHAT_GREET = 1; + } + + void game_recvoffer_gold() + { + if (STORE_CLOSED == 0) + { + if ("game.offer.gold" >= ENTRY_GOLD) + { + if ("game.offer.gold" > ENTRY_GOLD) + { + SayText("More then I needed!"); + } + else + { + SayText("Thank you very much!"); + } + Say("[.05] [.05] [.05] [.03] [.1] [.05] [.2]"); + ReceiveOffer("accept"); + PlayAnim("once", "yes"); + recv_payment(GetEntityIndex("ent_lastgave")); + } + else + { + ReceiveOffer("reject"); + recv_payment_failed(GetEntityIndex("ent_lastgave")); + } + } + else + { + SayText("Sorry, the square is closed from midnight 'til nine"); + Say("[.05] [.05] [.05] [.01] [.1] [.05] [.2] [.1] [.1]"); + ReceiveOffer("reject"); + PlayAnim("once", "no"); + } + } + + void menu_recv_payment() + { + SayText("Thank you very much!"); + Say("[.05] [.05] [.05] [.03] [.1] [.05] [.2]"); + ReceiveOffer("accept"); + PlayAnim("once", "yes"); + recv_payment(param1); + } + + void menu_recv_payment_failed() + { + SayText("Thank you very much!"); + Say("[.05] [.05] [.05] [.03] [.1] [.05] [.2]"); + ReceiveOffer("accept"); + PlayAnim("once", "yes"); + recv_payment(param1); + } + + void recv_payment() + { + UseTrigger("door1"); + } + + void recv_payment_failed() + { + SayText("I'm sorry, but since we just got this merchant square set up,"); + Say("[.05] [.1] [.1] [.1] [.1] [.1] [.08] [.08] [.05] [.1] [.1] [.2]"); + ScheduleDelayedEvent(1, "speech_materials"); + PlayAnim("once", "no"); + } + + void speech_materials() + { + SayText("we have to charge a little extra to pay for materials. I'm sure you understand..."); + } + + void say_job() + { + SayText("Well , " + I + "just recently hired a new guard so " + I + " m afraid we re fully staffed now."); + Say("[.4] [.2] [.2] [.1] [.1] [.1] [.2] [.05] [.05] [.2] [.1] [.3] [.2] [.3] [.1]"); + } + + void say_rumor() + { + PlayAnim("once", "pondering"); + SayText("Tristan is after the mayor , but he can t leave his post. He s at the backalley of the merchant square."); + } + + void open_store() + { + CHAT_GREET = 1; + STORE_CLOSED = 0; + } + + void close_store() + { + CHAT_GREET = 0; + STORE_CLOSED = 1; + } + + void game_menu_getoptions() + { + if (!(STORE_CLOSED)) + { + string reg.mitem.id = "payment"; + string reg.mitem.title = "Pay "; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + string reg.mitem.callback = "menu_recv_payment"; + string reg.mitem.cb_failed = "menu_recv_payment_failed"; + } + else + { + string reg.mitem.title = "Merc. Square Closed"; + string reg.mitem.type = "disabled"; + } + } + +} + +} diff --git a/scripts/angelscript/edana/msqguard.as b/scripts/angelscript/edana/msqguard.as new file mode 100644 index 00000000..9b938e16 --- /dev/null +++ b/scripts/angelscript/edana/msqguard.as @@ -0,0 +1,236 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Msqguard : CGameScript +{ + int DID_TAUNT; + int NO_TALK; + int QUEST_1; + string QUEST_WINNER; + string SOUND_HAIL; + string SOUND_IDLE2; + string SOUND_IDLE3; + int THIEF_QUEST; + int THIEF_QUEST_DONE; + + void OnRepeatTimer() + { + SetRepeatDelay(10); + if (NO_TALK == 0) + { + } + CanSee("player"); + if (!(DID_TAUNT)) + { + } + DID_TAUNT = 1; + ScheduleDelayedEvent(120.0, "taunt_reset"); + SayText("Why are you sneaking around here? Go around to the entrance if you wish to enter the merchant's square."); + } + + void OnSpawn() override + { + SetHealth(100); + SetMaxHealth(100); + SetGold(0); + SetName("Tristan"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/guard1.mdl"); + SetInvincible(true); + NO_TALK = 0; + QUEST_1 = 0; + THIEF_QUEST = 2; + SOUND_HAIL = "voices/human/male_hail_guard.wav"; + SOUND_IDLE2 = "voices/human/male_idle7.wav"; + SOUND_IDLE3 = "voices/human/male_idle8.wav"; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_hi", "hello"); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_hi", "greet"); + CatchSpeech("say_mayor", "mayor"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_job", "work"); + CatchSpeech("say_job", "money"); + CatchSpeech("say_job", "gold"); + CatchSpeech("say_thief", "thief"); + CatchSpeech("say_thief", "thieves"); + CatchSpeech("say_thief", "bandit"); + CatchSpeech("say_thief", "cutpurse"); + CatchSpeech("say_thief", "poacher"); + ScheduleDelayedEvent(5, "idle"); + } + + void idle() + { + SetRepeatDelay(35); + SetVolume(2); + // PlayRandomSound from: SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void say_hi() + { + SetVolume(7); + EmitSound(GetOwner(), SOUND_HAIL); + SayText("I'm on duty, but go ahead."); + } + + void say_mayor() + { + if (!(QUEST_1 == 2)) return; + SayText("Thanks for helping us out."); + PlayAnim("once", "yes"); + if (!(QUEST_1 == 0)) return; + SayText("I know that old man is up to something..."); + PlayAnim("once", "no"); + ScheduleDelayedEvent(5, "say_mayor2"); + } + + void say_mayor2() + { + SayText("Fetch me evidence that he is a traitor, and I will give you a little something."); + PlayAnim("once", "no"); + } + + void game_menu_getoptions() + { + if ((ItemExists(param1, "item_letter_mayor"))) + { + string reg.mitem.title = "Present Evidence"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_letter_mayor"; + string reg.mitem.callback = "got_letter"; + } + if ((ItemExists(param1, "item_thiefmap"))) + { + string reg.mitem.title = "Give Thief Map"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_thiefmap"; + string reg.mitem.callback = "got_theif_map"; + } + if (THIEF_QUEST == 2) + { + string reg.mitem.title = "Ask about thieves"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_thief"; + } + } + + void got_letter() + { + QUEST_WINNER = param1; + ReceiveOffer("accept"); + SayText("Thank you! Thank you very much. At last we can get that scumbag out of the way."); + UseTrigger("evidence_found"); + QUEST_1 = 2; + ScheduleDelayedEvent(6, "recvletter_2"); + } + + void got_theif_map() + { + QUEST_WINNER = param1; + THIEF_QUEST_DONE = 1; + ReceiveOffer("accept"); + PlayAnim("once", "return_needle"); + SayText("Ah, what's this? A map of the thieves whereabouts? You have done well, my friend."); + ScheduleDelayedEvent(4, "say_thiefloc"); + } + + void recvletter_2() + { + SayText("Here, I found it on a dead body. Supposedly it's answers to some riddles. Perhaps you should keep it safe. Might be valueable to you some day."); + // TODO: offer QUEST_WINNER item_riddleanswers + UseTrigger("evidence_found"); + } + + void taunt_reset() + { + DID_TAUNT = 0; + } + + void say_nothing() + { + NO_TALK = 1; + ScheduleDelayedEvent(9, "say_something"); + } + + void say_something() + { + NO_TALK = 0; + } + + void game_recvoffer_gold() + { + ReceiveOffer("reject"); + SayText(A + "bribe?? " + I + " should expect more upstanding behavior than that , citizen."); + PlayAnim("once", "no"); + } + + void say_job() + { + SayText("Hmmmmm... I just recently got hired and I don't think they need another guard."); + PlayAnim("once", "shrug"); + } + + void say_thief() + { + if (!(THIEF_QUEST == 2)) return; + THIEF_QUEST = 3; + Say("suspicious"); + SayText("If you see anything suspicious around here , you let me know."); + if (!(THIEF_QUEST == 3)) return; + THIEF_QUEST = 6; + SayText("If you see any thieves , try bribing them for information , or give threats that " + I + " will lock them up for good."); + ScheduleDelayedEvent(4, "say_thief2"); + } + + void say_thief2() + { + SayText("Aye , " + I + "will have them thieves locked up , if not killed should " + I + " get my hands on them."); + } + + void say_thiefloc() + { + SayText("Hmmmm... this map shows bandits in a few of the local areas , one being in the Thornlands."); + ScheduleDelayedEvent(4, "say_thiefloc2"); + } + + void say_thiefloc2() + { + SayText("There will probably be thieves around the area. If not , look in the caves near the road to Edana or Helena."); + ScheduleDelayedEvent(4, "say_thiefloc3"); + } + + void say_thiefloc3() + { + SayText("Bring me proof that you ve killed them and I ll reward you , if killing them is not reward enough."); + ScheduleDelayedEvent(4, "say_thiefloc4"); + } + + void say_thiefloc4() + { + SetVolume(8); + Say("guardwarn"); + string QUEST_WINNER_NAME = GetEntityName(QUEST_WINNER); + QUEST_WINNER_NAME += ","; + SayText("Here's some incentive. Be wary, " + QUEST_WINNER_NAME + " it is dangerous outside."); + // TODO: offer QUEST_WINNER gold 30 + } + + void say_rumor() + { + say_mayor(); + } + +} + +} diff --git a/scripts/angelscript/edana/oldman.as b/scripts/angelscript/edana/oldman.as new file mode 100644 index 00000000..fa161b42 --- /dev/null +++ b/scripts/angelscript/edana/oldman.as @@ -0,0 +1,318 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Oldman : CGameScript +{ + int CANCHAT; + int CAN_ASKPOTION; + int NO_RUMOR; + int QUEST_BOAR; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_POTION; + string STORENAME; + string STORE_NAME; + string STORE_TRIGGERTEXT; + int VENDOR_NOT_ON_USE; + int letter; + int quest.ledger; + string quest.ledger.target; + string quest.letter.target; + + Oldman() + { + SOUND_IDLE1 = "voices/human/male_oldidle.wav"; + SOUND_IDLE2 = "voices/human/male_oldidle2.wav"; + SOUND_IDLE3 = "voices/human/male_oldidle3.wav"; + SOUND_POTION = "voices/human/male_oldpotion.wav"; + NO_RUMOR = 1; + SOUND_DEATH = "none"; + STORE_NAME = "edana_merchant_2"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + NO_RUMOR = 1; + VENDOR_NOT_ON_USE = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(RandomInt(30, 45)); + if ((CAN_ASKPOTION)) + { + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 6); + Say("[.3] [.3] [.3] [.3]"); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(RandomInt(60, 120)); + if ((CAN_ASKPOTION)) + { + } + int POTION_CHAT = RandomInt(1, 3); + if (POTION_CHAT == 1) + { + SayText("How about a [potion] ?"); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_POTION, 6); + } + else + { + if (POTION_CHAT == 2) + { + SayText("Did you need some [potions] , lad?."); + } + else + { + if (POTION_CHAT == 3) + { + SayText(I + " ve got something that ll heal you up."); + } + } + } + } + + void OnSpawn() override + { + SetHealth(25); + SetGold(25); + SetName("Old man"); + SetName("abulurd"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + CANCHAT = 1; + STORENAME = "edanaoldmans_shop"; + letter = 0; + QUEST_BOAR = 0; + CAN_ASKPOTION = 1; + CatchSpeech("say_hi", "hi"); + CatchSpeech("npc_say_store", "buy"); + CatchSpeech("say_ledger", "ledger"); + CatchSpeech("say_job", "boar"); + CatchSpeech("say_shutup", "shut up"); + } + + void say_hi() + { + PlayAnim("once", "talkleft"); + SayText("New folk around here , eh? And the adventerous kind , " + I + " see."); + Say("[.3] [.1] [.2] [.3] [.4] [.2] [.2] [.3] [.1]"); + ScheduleDelayedEvent(3, "say_hi2"); + } + + void say_hi2() + { + SayText("Well , then , you are free to use my garden for practicing your skills."); + Say("[.2] [.2] [.3] [.1] [.2] [.2] [.2] [.3] [.1] [.3] [.1] [.4]"); + ScheduleDelayedEvent(3, "say_hi3"); + } + + void say_hi3() + { + SayText("If you re lucky, the real big one ll be there. Real tough one , aye..."); + Say("[.10] [.10] [.10] [.20] [.7] [.7] [.10] [.20] [.1] [.1] [.1] [.3]"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_mpotion", 4, 80); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void reset() + { + letter = 0; + } + + void game_recvoffer_item() + { + if (!(param1 == "item_ikeletter")) return; + if (!(letter == 0)) return; + ReceiveOffer("accept"); + quest_letter_done(GetEntityIndex("ent_lastgave")); + } + + void global_quest_letter() + { + SetName("Abulurd"); + } + + void quest_letter_done() + { + PlayAnim("once", "pondering3"); + SayText("So Ike s looking for some good firewood eh? My son does some good work, give him this sample."); + letter = 1; + quest.letter.target = param1; + ScheduleDelayedEvent(300, "reset"); + ScheduleDelayedEvent(3, "quest_letter_done_2"); + } + + void quest_letter_done_2() + { + // TODO: offer quest.letter.target item_ikelog + } + + void global_quest_ledger() + { + quest.ledger = 1; + } + + void say_ledger() + { + if (!(quest.ledger == 1)) return; + quest.ledger = 2; + quest.ledger.target = GetEntityIndex("ent_lastspoke"); + PlayAnim("once", "pondering2"); + SayText("Hmmm... " + I + "think " + I + " have that ledger around here somewhere..."); + ScheduleDelayedEvent(4, "quest_ledger_done"); + } + + void quest_ledger_done() + { + PlayAnim("critical", "pull_needle"); + SayText("Ah! Here it is! Now hurry and take it to Ike."); + ScheduleDelayedEvent(2, "quest_ledger_done_2"); + } + + void quest_ledger_done_2() + { + // TODO: offer quest.ledger.target item_ledger + } + + void trig_boarsdead() + { + QUEST_BOAR = 2; + } + + void global_quest_boars_done() + { + QUEST_BOAR = 3; + } + + void say_job() + { + if (QUEST_BOAR == 0) + { + QUEST_BOAR = 1; + SayText("They re trapped in the backyard!"); + PlayAnim("once", "converse2"); + Say("[.30] [.30] [.30] [.40] [.20]"); + ScheduleDelayedEvent(2.3, "say_boar2"); + } + else + { + if (QUEST_BOAR == 1) + { + SayText("Head out back and train up. " + I + " don mind."); + Say("[.20] [.10] [.10] [.10] [.10] [.10] [.15] [.10]"); + } + else + { + if (QUEST_BOAR == 2) + { + SayText("Did ya get all the little rascals? A fine job lad."); + PlayAnim("once", "yes"); + Say("[.20] [.10] [.10] [.30] [.10] [.10] [.15] [.10]"); + ScheduleDelayedEvent(3, "say_boar_done2"); + } + } + } + } + + void say_boar2() + { + SayText(I + " just send people there so they can train their skills."); + Say("[.30] [.20] [.30] [.40] [.20] [.20] [.30] [.10]"); + ScheduleDelayedEvent(4, "say_boar3"); + } + + void say_boar3() + { + SayText("Nobody can afford a mentor these days..."); + Say("[.20] [.20] [.30] [.10] [.20] [.20] [.20]"); + ScheduleDelayedEvent(3, "say_boar4"); + } + + void say_boar4() + { + SayText("Oh , and Ike the Armourer might have a job for ye when you re done."); + Say("[.20] [.20] [.30] [.10] [.20] [.20] [.20] [.10] [.10] [.10] [.10] [.10]"); + ScheduleDelayedEvent(5, "say_boar5"); + } + + void say_boar5() + { + SayText("...Care for a [potion] , by the way?"); + Say("[.10] [.10] [.10] [.10] [.10]"); + } + + void say_boar_done2() + { + SayText("Head to town and Ike can use the skins"); + Say("[.20] [.20] [.30] [.10] [.20] [.10] [.10] [.10] [.10]"); + } + + void say_shutup() + { + if (!(CAN_ASKPOTION)) return; + CAN_ASKPOTION = 0; + SayText(I + " m sorry, was I bothering you?"); + PlayAnim("once", "panic"); + Say("[.3] [.1] [.4] [.1] [.1] [.7] [.7] [.7] [.4]"); + } + + void game_menu_getoptions() + { + if (!(letter)) + { + if ((ItemExists(param1, "item_ikeletter"))) + { + } + string reg.mitem.title = "Give Letter"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_ikeletter"; + string reg.mitem.callback = "quest_letter_done"; + } + if (quest.ledger == 1) + { + string reg.mitem.title = "Ask About Ledger"; + string reg.mitem.type = "say"; + string reg.mitem.data = "Do you have Ike's Ledger?"; + } + if ((ItemExists(param1, "skin_boar_heavy"))) + { + string reg.mitem.title = "Give Pelt"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "quest_heavypelt_done"; + } + } + +} + +} diff --git a/scripts/angelscript/edana/packmerc.as b/scripts/angelscript/edana/packmerc.as new file mode 100644 index 00000000..e75f7d8b --- /dev/null +++ b/scripts/angelscript/edana/packmerc.as @@ -0,0 +1,219 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Packmerc : CGameScript +{ + string AD_TEXT; + int CANCHAT; + int CHAT_GOODS; + int CHAT_JOB; + int NO_CHAT; + float SELL_RATIO; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_WEAPONS; + + Packmerc() + { + SOUND_DEATH = "none"; + STORE_NAME = "foglund_shop"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.75; + SELL_WEAPON_LEVEL = 0; + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + NO_CHAT = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1); + if ((CANCHAT)) + { + } + if ((CanSee("player", 128))) + { + } + SayText(AD_TEXT); + Say("[.6] [.6] [.6]"); + no_chat(); + ScheduleDelayedEvent(90, "reset_chat"); + } + + void OnSpawn() override + { + SetHealth(25); + SetGold(25); + SetName("Foglund the Merchant"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(1, 2); + SetInvincible(true); + CHAT_JOB = 0; + CHAT_GOODS = 0; + CANCHAT = 1; + if (GetMapName() != "lowlands") + { + AD_TEXT = "Backpacks! Sheaths! Torches!"; + } + if (GetMapName() == "lowlands") + { + AD_TEXT = "I do hope you can help me with my little bear problem..."; + } + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_store", "buy"); + CatchSpeech("say_rumour", "heard"); + CatchSpeech("say_job", "work"); + CatchSpeech("say_bear", "bear"); + } + + void say_rumor() + { + say_rumour(); + } + + void say_bear() + { + SayText("I hate bears, I really do, I've an insatiable desire to buy bear parts. Got any?"); + ScheduleDelayedEvent(4.0, "say_bear2"); + } + + void say_bear2() + { + if (!(GetMapName() == "lowlands")) return; + SayText("Granted, I suspect this has gotten me into a bit of trouble."); + ScheduleDelayedEvent(4.0, "say_bear3"); + } + + void say_bear3() + { + SayText("It is said if you kill 100 bears, the Curse of the Bear Gods will befall you."); + ScheduleDelayedEvent(4.0, "say_bear4"); + } + + void say_bear4() + { + SayText("Looks as though it has befallen me... I can't get outside."); + ScheduleDelayedEvent(4.0, "say_bear5"); + } + + void say_bear5() + { + SayText("I've no clue how I'm going to get back to Edana."); + ScheduleDelayedEvent(4.0, "say_bear6"); + } + + void say_bear6() + { + SayText("I'll give you access to my special stock, if you think you can break this curse!"); + } + + void say_hi() + { + SayText("Hello , " + I + " have many things that you will need!"); + ScheduleDelayedEvent(2, "say_store"); + no_chat(); + } + + void no_chat() + { + CANCHAT = 0; + ScheduleDelayedEvent(20, "reset_chat"); + } + + void reset_chat() + { + CANCHAT = 1; + } + + void vendor_addstoreitems() + { + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "lowlands") + { + AddStoreItem(STORE_NAME, "item_crystal_reloc", 1, 300, 0.1); + AddStoreItem(STORE_NAME, "item_crystal_return", 1, 300, 0.1); + AddStoreItem(STORE_NAME, "sheath_spellbook", 1, 80, SELL_RATIO); + AddStoreItem(STORE_NAME, "skin_bear", 20, 100, 0.9); + AddStoreItem(STORE_NAME, "health_spotion", 10, 80, 0.5); + AddStoreItem(STORE_NAME, "mana_protection", 1, RandomInt(100, 150), 0.2); + } + if (L_MAP_NAME != "lowlands") + { + AddStoreItem(STORE_NAME, "skin_bear", 0, 100, 2.0); + } + AddStoreItem(STORE_NAME, "item_bearclaw", 0, 100, 0.9); + AddStoreItem(STORE_NAME, "swords_rsword", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_rknife", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_knife", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "bows_treebow", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_rsmallaxe", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer1", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_qs", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "item_torch", RandomInt(5, 10), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "pack_bigsack", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "pack_heavybackpack", RandomInt(1, 4), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_holster", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_club", 0, 100, SELL_RATIO); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "blunt_club", 1, 100, SELL_RATIO); + } + } + + void trade_success() + { + if (!(CHAT_GOODS)) return; + Say("goods[.34] [.24] [.35] [.40]"); + no_chat(); + CHAT_GOODS = 0; + ScheduleDelayedEvent(6, "reset_chat_goods"); + } + + void reset_chat_goods() + { + CHAT_GOODS = 1; + } + + void say_job() + { + SayText("Well I'm just a small shop owner with no need for help, maybe Ike could help ye out?"); + Say("[.5] [.4] [.2] [.1] [.4] [.4] [.2] [.2] [.4] [.1][.2] [.2] [.8] [.2] [.2] [.4] [.6] [.4] [.2]"); + no_chat(); + ScheduleDelayedEvent(15, "reset_chat_job"); + } + + void reset_chat_job() + { + CHAT_JOB = 1; + } + + void say_rumour() + { + no_chat(); + PlayAnim("once", "no"); + SayText("I don't know much. Speak to Krythos. He've been all over the world."); + Say("[.2] [.2] [.2] [.5] [.3] [.1] [.15] [.6] [.4] [.4][.2] [.2] [.2] [.3] [1]"); + } + +} + +} diff --git a/scripts/angelscript/edana/priest.as b/scripts/angelscript/edana/priest.as new file mode 100644 index 00000000..04183700 --- /dev/null +++ b/scripts/angelscript/edana/priest.as @@ -0,0 +1,101 @@ +#pragma context server + +#include "help/first_npc.as" + +namespace MS +{ + +class Priest : CGameScript +{ + int CANCHAT; + + void OnSpawn() override + { + SetHealth(40); + SetMaxHealth(40); + SetGold(0); + SetName("Priest of Urdual"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + CANCHAT = 1; + createmystore(); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_hi", "hello"); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_hi", "greet"); + CatchSpeech("say_sembelbin", "sembelbin"); + CatchSpeech("say_hall", "Hall"); + CatchSpeech("say_hall", "Balance"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_job", "work"); + CatchSpeech("say_job", "money"); + CatchSpeech("say_job", "gold"); + CatchSpeech("say_rumour", "rumours"); + CatchSpeech("say_rumour", "news"); + CatchSpeech("say_rumour", "happenings"); + CatchSpeech("say_rumour", "rumor"); + } + + void say_hi() + { + SetVolume(10); + SayText("Do not bother me right now. Speak with Sembelbin."); + } + + void say_sembelbin() + { + SayText("Sembelbin is in the Hall of Balance , in the deepest part of the temple."); + } + + void say_hall() + { + SayText("The Hall of Balance is where light and dark meet. Now please , let me meditate."); + } + + void say_job() + { + SayText("Work? the Temple of Balance has no need for you at the moment."); + ScheduleDelayedEvent(2, "say_job2"); + } + + void say_job2() + { + SayText("If you need a job , try the village of Edana."); + } + + void say_rumour() + { + SayText("The temple is very saddened right now... We recently lost a fine elf blademaster to the orcs."); + ScheduleDelayedEvent(5, "say_rumour2"); + } + + void say_rumour2() + { + SayText("Lord Vecilus was his name , and he had his armor forged at Eswen Sylen. He insited on taking the orcs alone , to avenge his brother , Sir Geric."); + ScheduleDelayedEvent(5, "say_rumour3"); + } + + void say_rumour3() + { + SayText("His pride was his death , and his armor lost."); + ScheduleDelayedEvent(5, "say_rumour4"); + } + + void say_rumour4() + { + SayText("We would ask you to get back that armor , but don t you go alone like Lord Vecilus."); + ScheduleDelayedEvent(5, "say_rumour5"); + } + + void say_rumour5() + { + SayText(I + " suppose you can keep the armor to yourself when you find it , seeing we don t have any temple fighters left."); + } + +} + +} diff --git a/scripts/angelscript/edana/rentaguard1.as b/scripts/angelscript/edana/rentaguard1.as new file mode 100644 index 00000000..d91ee374 --- /dev/null +++ b/scripts/angelscript/edana/rentaguard1.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "mercenaries/merc1.as" + +namespace MS +{ + +class Rentaguard1 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/edana/rentaguard2.as b/scripts/angelscript/edana/rentaguard2.as new file mode 100644 index 00000000..69fa7d1f --- /dev/null +++ b/scripts/angelscript/edana/rentaguard2.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "mercenaries/merc2.as" + +namespace MS +{ + +class Rentaguard2 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/edana/rentaguard3.as b/scripts/angelscript/edana/rentaguard3.as new file mode 100644 index 00000000..19581516 --- /dev/null +++ b/scripts/angelscript/edana/rentaguard3.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "mercenaries/merc2.as" + +namespace MS +{ + +class Rentaguard3 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/edana/shroom.as b/scripts/angelscript/edana/shroom.as new file mode 100644 index 00000000..8ada99c8 --- /dev/null +++ b/scripts/angelscript/edana/shroom.as @@ -0,0 +1,22 @@ +#pragma context server + +namespace MS +{ + +class Shroom : CGameScript +{ + void OnSpawn() override + { + SetHealth(9999); + SetRace("human"); + SetWidth(50); + SetHeight(50); + SetRoam(false); + SetName("Shroom"); + SetIdleAnim("idle"); + SetModel("misc/env_shroom4.mdl"); + } + +} + +} diff --git a/scripts/angelscript/edana/suliban.as b/scripts/angelscript/edana/suliban.as new file mode 100644 index 00000000..b1c8d927 --- /dev/null +++ b/scripts/angelscript/edana/suliban.as @@ -0,0 +1,165 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Suliban : CGameScript +{ + int ATTACK1_DAMAGE; + int ATTACK_RANGE; + int BRIBED; + int CAN_BRIBE; + int EVIDENCE_FOUND; + int NO_RUMOR; + + Suliban() + { + NO_RUMOR = 1; + // TODO: UNCONVERTED: say_mayor2 + SayText("Try not to kill him , will you? Would rather spare the bloodshed in town. He is human afterall. Try talking him out of it instead. ... That s all I know..."); + PlayAnim("once", "talkright"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(20); + CanSee("player"); + if (BRIBED == 0) + { + } + SayText("Stop pestering me. " + I + " ve got no time for the likes of you."); + } + + void OnSpawn() override + { + SetHealth(3000); + SetGold(340); + SetName("Warrior"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/guard1.mdl"); + SetInvincible(true); + SetActionAnim("swordswing1_L"); + EVIDENCE_FOUND = 0; + BRIBED = 0; + CAN_BRIBE = 0; + ATTACK1_DAMAGE = 30; + ATTACK_RANGE = 128; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_mayor", "mayor"); + CatchSpeech("say_edrin", "edrin"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_name", "name"); + } + + void say_name() + { + SetName("Suliban"); + SayText(I + "guess " + I + " can let you know now; my name is Suliban."); + PlayAnim("once", "talkright"); + } + + void say_hi() + { + if (!(BRIBED == 0)) return; + SetVolume(7); + Say("edrin1[34]"); + SayText("Yes? What do you want?"); + } + + void say_mayor() + { + if (!(BRIBED == 0)) return; + SayText("Old fellow Erkold? What ye need from him? Did [edrin] send you?"); + PlayAnim("once", "talkright"); + if (!(BRIBED == 1)) return; + SayText(I + "already told you what " + I + " know."); + PlayAnim("once", "talkright"); + } + + void say_edrin() + { + SayText(I + " don t speak with just anyone, nor do I speak for free. If you can offer me enough, I ll tell you everything."); + CAN_BRIBE = 1; + } + + void bribe() + { + ReceiveOffer("accept"); + SayText("Right... Here s what you need to do - The mayor is guarded by a hot-tempered guard. You must steer off him. You might need a friend to help you stalk the guard, while one of you goes inside to speak with Erkold."); + PlayAnim("once", "talkleft"); + ScheduleDelayedEvent(7, "say_mayor2"); + UseTrigger("mayorsdoor"); + BRIBED = 1; + } + + void bribe_failed() + { + ReceiveOffer("reject"); + SayText("What are you trying? Off with ye."); + PlayAnim("once", "no"); + } + + void robbed() + { + SayText("Thief!"); + PlayAnim("once", "beatdoor"); + } + + void attack_1() + { + DoDamage("ent_laststole", ATTACK_RANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + + void say_job() + { + SayText(I + " got nothing for you."); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Say Hello"; + string reg.mitem.type = "say"; + int l.say = RandomInt(1, 4); + if (l.say == 1) + { + string reg.mitem.data = "Hello"; + } + else + { + if (l.say == 2) + { + string reg.mitem.data = "Hi"; + } + else + { + if (l.say == 3) + { + string reg.mitem.data = "Hail"; + } + else + { + if (l.say == 4) + { + string reg.mitem.data = "Greetings!"; + } + } + } + } + if (CAN_BRIBE == 1) + { + string reg.mitem.title = "Bribe (15g)"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:15"; + string reg.mitem.callback = "bribe"; + string reg.mitem.cb_failed = "bribe_failed"; + } + } + +} + +} diff --git a/scripts/angelscript/edana/sumdale.as b/scripts/angelscript/edana/sumdale.as new file mode 100644 index 00000000..004bf32c --- /dev/null +++ b/scripts/angelscript/edana/sumdale.as @@ -0,0 +1,199 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class Sumdale : CGameScript +{ + int CHAT_AUTO_HAIL; + int QUEST_DONE; + int SAID_URD; + string URD_ID; + + Sumdale() + { + QUEST_DONE = 0; + CHAT_AUTO_HAIL = 1; + } + + void OnSpawn() override + { + SetHealth(30); + SetGold(50); + SetName("Patron"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(1, 2); + SetName("sumdale"); + if ((G_CHIRSTMAS_MODE)) + { + SetModelBody(2, 1); + } + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_what", "book"); + CatchSpeech("say_huh", "urdaf"); + CatchSpeech("say_rumour", "rumour"); + } + + void say_job() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + say_hi2(); + } + + void say_rumor() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + say_rumour(); + } + + void say_hi() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(QUEST_DONE)) + { + say_hi_normal(); + } + if ((QUEST_DONE)) + { + say_thanx(); + } + } + + void say_thanx() + { + chat_now("Thanks again for what you've done for my friend.", 3.0); + } + + void say_hi_normal() + { + chat_now("Hail adventurer! My name is Sumdale.", 2.9); + SetName("Sumdale"); + ScheduleDelayedEvent(3, "say_hi2"); + } + + void say_hi2() + { + URD_ID = FindEntityByName("urduaf"); + CallExternal(URD_ID, "askbook"); + chat_now("You look like a kind fellow, maybe you can help me with something.", 3.9); + ScheduleDelayedEvent(4, "say_hi3"); + } + + void say_hi3() + { + chat_now("My friend Urdauf up there has become distraught over the loss of his book...", 6.9); + ScheduleDelayedEvent(7, "say_hi4"); + } + + void say_hi4() + { + chat_now("His father gave it to him as a family heirloom. It means so much to him.", 4.0); + chat_now("He's been very quiet, barely eats, and talks of nothing but the book.", 3.0); + SAID_URD = 1; + } + + void say_what() + { + if ((QUEST_DONE)) return; + chat_now("I recently found him passed out in the field outside of town and brought him back here.", 2.9); + ScheduleDelayedEvent(3, "say_what2"); + } + + void say_what2() + { + chat_now("He's finally walking again but he won't talk to me much about what happened.", 2.9); + ScheduleDelayedEvent(3, "say_what3"); + } + + void say_what3() + { + chat_now("You'd best ask him, he's been distraught over the loss of some book.", 3.0); + } + + void say_huh() + { + chat_now("Who are you talking about? You mean Urdauf? He's up there.", 2.0); + } + + void bookfound() + { + QUEST_DONE = 1; + } + + void say_rumour() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PlayAnim("once", "pondering"); + chat_now("I saw Tristan read an odd note here at the tavern the other night. It seemed pretty torn up to me, and he looked confused.", 3.5); + } + + void game_menu_getoptions() + { + if (!(SAID_URD)) + { + if (!(QUEST_DONE)) + { + string reg.mitem.title = "Ask about Jobs"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + } + else + { + string reg.mitem.title = "Ask About Urdauf"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_thanx"; + } + } + if (!(SAID_URD)) return; + if (!(QUEST_DONE)) + { + string reg.mitem.title = "Ask About Urdauf"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_what"; + } + else + { + string reg.mitem.title = "Ask About Urdauf"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_thanx"; + } + } + +} + +} diff --git a/scripts/angelscript/edana/towncrier.as b/scripts/angelscript/edana/towncrier.as new file mode 100644 index 00000000..caf79d50 --- /dev/null +++ b/scripts/angelscript/edana/towncrier.as @@ -0,0 +1,207 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Towncrier : CGameScript +{ + int EVIDENCE_FOUND; + int NO_JOB; + int TALKING; + + Towncrier() + { + NO_JOB = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + if (!(TALKING)) + { + } + SetSayTextRange(1024); + SayText("News! Path to Gate City open! Orcish attacks on Helena nearly over!"); + SetSayTextRange("default"); + } + + void OnSpawn() override + { + SetHealth(1); + SetName("Godfrey the Town Crier"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(true); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(1, 2); + EVIDENCE_FOUND = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_adventure", "adventure"); + CatchSpeech("say_rumour", "rumours"); + CatchSpeech("say_mayor", "mayor"); + } + + void say_hi() + { + TALKING = 1; + SayText("Hello! What can " + I + " help you with? Looking for [adventure] ? Or perhaps you d like to hear about the [news] that goes around?"); + if (!(GetEntityProperty("ent_lastspoke", "player") == 1)) return; + SetMoveDest(9999); + SetRoam(false); + ScheduleDelayedEvent(10, "resume"); + } + + void say_adventure() + { + SayText("Everyone new goes to the old sewers. It s not in use anymore, at least not as much, but the guards put items and money in"); + SayText("a chest they keep hidden somewhere in there."); + ScheduleDelayedEvent(4, "say_adventure2"); + } + + void say_adventure2() + { + SayText("Indeed. It has encouraged many to join the guards. If fortune is with you , you might get their special price... Good luck!"); + } + + void say_rumour() + { + PlayAnim("once", "pondering"); + SayText("Have you heard? They fought back the orcs in Helena , and they re not just rebuilding it. Looks like it s becoming a market place , if you ask me."); + ScheduleDelayedEvent(5, "say_rumour2"); + } + + void say_rumour2() + { + SayText("They ve set up several shops, and the inn is in business again. But I m not so sure if it ll do any good business."); + ScheduleDelayedEvent(5, "say_rumour3"); + } + + void say_rumour3() + { + SayText(I + " have been hearing reports of repeated attacks. Things could get quite messy if you go out there."); + } + + void say_mayor() + { + if (!(EVIDENCE_FOUND == 1)) return; + SayText("Apparently , the mayor has been discovered to be working with the orcs! Surprises all around!"); + } + + void worldevent_evidence_found() + { + EVIDENCE_FOUND = 1; + } + + void resume() + { + TALKING = 0; + SetRoam(true); + } + + void worldevent_time() + { + if (param1 == 24.00) + { + SayText("tis midnight and all is well!"); + } + if (param1 == 1.00) + { + SayText("tis one in the morn and all is well!"); + } + if (param1 == 2.00) + { + SayText("tis two in the morn and all is well!"); + } + if (param1 == 3.00) + { + SayText("tis three in the morn and all is well!"); + } + if (param1 == 4.00) + { + SayText("tis four in the morn and all is well!"); + } + if (param1 == 5.00) + { + SayText("tis five in the morn and all is well!"); + } + if (param1 == 6.00) + { + SayText("tis six in the morn and all is well!"); + } + if (param1 == 7.00) + { + SayText("tis seven in the morn and all is well!"); + } + if (param1 == 8.00) + { + SayText("tis eight in the morn and all is well!"); + } + if (param1 == 9.00) + { + SayText("tis nine in the morn and all is well!"); + } + if (param1 == 10.00) + { + SayText("tis ten in the morn and all is well!"); + } + if (param1 == 11.00) + { + SayText("tis eleven in the morn and all is well!"); + } + if (param1 == 12.00) + { + SayText("tis noon and all is well!"); + } + if (param1 == 13.00) + { + SayText("tis one in the eve and all is well!"); + } + if (param1 == 14.00) + { + SayText("tis two in the eve and all is well!"); + } + if (param1 == 15.00) + { + SayText("tis three in the eve and all is well!"); + } + if (param1 == 16.00) + { + SayText("tis four in the eve and all is well!"); + } + if (param1 == 17.00) + { + SayText("tis five in the eve and all is well!"); + } + if (param1 == 18.00) + { + SayText("tis six in the eve and all is well!"); + } + if (param1 == 19.00) + { + SayText("tis seven in the eve and all is well!"); + } + if (param1 == 20.00) + { + SayText("tis eight in the eve and all is well!"); + } + if (param1 == 21.00) + { + SayText("tis nine in the eve and all is well!"); + } + if (param1 == 22.00) + { + SayText("tis ten in the eve and all is well!"); + } + if (param1 == 23.00) + { + SayText("tis eleven in the eve and all is well!"); + } + } + +} + +} diff --git a/scripts/angelscript/edana/trapper.as b/scripts/angelscript/edana/trapper.as new file mode 100644 index 00000000..2209e678 --- /dev/null +++ b/scripts/angelscript/edana/trapper.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "edana/guard.as" + +namespace MS +{ + +class Trapper : CGameScript +{ +} + +} diff --git a/scripts/angelscript/edana/tutorial.as b/scripts/angelscript/edana/tutorial.as new file mode 100644 index 00000000..52f7ca2f --- /dev/null +++ b/scripts/angelscript/edana/tutorial.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "edana/masterp.as" + +namespace MS +{ + +class Tutorial : CGameScript +{ +} + +} diff --git a/scripts/angelscript/edana/urdauf.as b/scripts/angelscript/edana/urdauf.as new file mode 100644 index 00000000..14dad5b9 --- /dev/null +++ b/scripts/angelscript/edana/urdauf.as @@ -0,0 +1,190 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class Urdauf : CGameScript +{ + int B_QUEST_DONE; + int CHAT_AUTO_HAIL; + int CHAT_USE_CONV_ANIMS; + int NO_JOB; + int NO_RUMOR; + string QUEST_COMPLETER; + int TALKED_SUMDALE; + int TOLD_STORY; + + Urdauf() + { + NO_JOB = 1; + NO_RUMOR = 1; + CHAT_AUTO_HAIL = 1; + B_QUEST_DONE = 0; + TALKED_SUMDALE = 0; + CHAT_USE_CONV_ANIMS = 0; + } + + void OnSpawn() override + { + SetName("urduaf"); + SetHealth(30); + SetGold(50); + SetName("Urduaf"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(1, 2); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "book"); + } + + void askbook() + { + TALKED_SUMDALE = 1; + } + + void say_hi() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(B_QUEST_DONE)) + { + chat_now("Look, I don't feel like talking right now so please just leave."); + PlayAnim("critical", "no"); + } + if ((B_QUEST_DONE)) + { + string WINNER_NAME = GetEntityName(QUEST_COMPLETER); + string L_MSG = "I'm so happy now that "; + L_MSG += WINNER_NAME; + L_MSG += " has returned my journal!"; + PlayAnim("once", "wave"); + chat_now(L_MSG); + } + } + + void say_job() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(TALKED_SUMDALE)) return; + if ((B_QUEST_DONE)) return; + chat_now("You know about the book? You must have learned of it from Sumdale."); + ScheduleDelayedEvent(4, "say_bothered1a"); + } + + void say_bothered1a() + { + PlayAnim("once", "no"); + chat_now("..I had a book once, it's very important to me.. "); + ScheduleDelayedEvent(3, "story"); + } + + void story() + { + PlayAnim("once", "converse1"); + chat_now("I was foolish enough to take it with me to explore the caves. I fancied myself an adventurer."); + ScheduleDelayedEvent(5, "say_story2"); + } + + void say_story2() + { + PlayAnim("critial", "talkright"); + chat_now("I was going to explore a little and write down what I found."); + ScheduleDelayedEvent(5, "say_story3"); + } + + void say_story3() + { + PlayAnim("critial", "converse1"); + chat_now("I was in a room with an incredible drop off. There was a chest nearby."); + ScheduleDelayedEvent(5, "say_story4"); + } + + void say_story4() + { + PlayAnim("once", "converse1"); + chat_now("I was startled by an huge spider. If there are any spiders bigger than that I'd hate to meet it. "); + ScheduleDelayedEvent(5, "say_story5"); + } + + void say_story5() + { + PlayAnim("once", "converse1"); + chat_now("I dropped my precious book and ran to the surface. There was a cave in behind me as I crawled frantically away."); + ScheduleDelayedEvent(5, "say_story6"); + } + + void say_story6() + { + PlayAnim("once", "converse1"); + chat_now("I couldn't get back to my book and now all I can ask is for the help of a real adventurer."); + ScheduleDelayedEvent(5, "say_story7"); + } + + void say_story7() + { + PlayAnim("once", "yes"); + chat_now("If you can return my book to me i'm sure there'd be some kind of reward for your troubles."); + TOLD_STORY = 1; + } + + void give_book() + { + ReceiveOffer("accept"); + PlayAnim("once", "eye_wipe"); + chat_now("My god, that's my book! I cannot thank you enough brave adventurer!"); + Say("[.10] [.20] [.20] [.10] [.10] [.10] [.25] [.20] [.10] [.30] [.20] [.40]"); + QUEST_COMPLETER = param1; + B_QUEST_DONE = 1; + ScheduleDelayedEvent(2, "recvbook_2"); + } + + void recvbook_2() + { + B_QUEST_DONE = 1; + CallExternal(FindEntityByName("sumdale"), "bookfound"); + chat_now("Here, take this gold as a reward, adventurer."); + // TODO: offer QUEST_COMPLETER gold RandomInt(6, 9) + } + + void game_menu_getoptions() + { + if ((ItemExists(param1, "item_book_old"))) + { + string reg.mitem.title = "Return book"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_book_old"; + string reg.mitem.callback = "give_book"; + } + if ((TALKED_SUMDALE)) + { + if (!(B_QUEST_DONE)) + { + } + string reg.mitem.title = "Ask about Book"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + } + } + +} + +} diff --git a/scripts/angelscript/edana/weaponsmith.as b/scripts/angelscript/edana/weaponsmith.as new file mode 100644 index 00000000..5926ee3f --- /dev/null +++ b/scripts/angelscript/edana/weaponsmith.as @@ -0,0 +1,170 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Weaponsmith : CGameScript +{ + int CIDER; + int NO_CHAT; + float SELL_RATIO; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_WEAPONS; + + Weaponsmith() + { + SOUND_DEATH = "none"; + STORE_NAME = "edana_kyrthos"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.75; + SELL_WEAPON_LEVEL = 3; + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + NO_CHAT = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(15); + if ((CanSee("player", 128))) + { + } + SayText(WEAPONS + FOR + SAAAAALLLLLLLEEEEE!!!!!!); + } + + void OnSpawn() override + { + SetName("krythos"); + SetHealth(25); + SetGold(50); + SetName("Krythos the Weaponsmith"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/blacksmith.mdl"); + SetInvincible(true); + CIDER = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_store", "buy"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_cider", "cider"); + CatchSpeech("say_rumor", "rumours"); + } + + void say_hi() + { + SayText("Welcome to my humble shop , " + I + " sell all kinds of adventuring stuffs."); + ScheduleDelayedEvent(0.8, "say_hi2"); + } + + void say_hi2() + { + SayText("Can " + I + " interest you in anything?"); + } + + void say_job() + { + SayText("You don't look like a member of the Merchant's Guild, and I can't afford to hire non-guild workers."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "smallarms_rknife", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_knife", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_dagger", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_dirk", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_stiletto", 0, 100, SELL_RATIO); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "smallarms_stiletto", 1, 100, SELL_RATIO); + } + AddStoreItem(STORE_NAME, "swords_rsword", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_shortsword", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_scimitar", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_longsword", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_bastardsword", 0, 100, SELL_RATIO); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "swords_bastardsword", 1, 100, SELL_RATIO); + } + AddStoreItem(STORE_NAME, "axes_rsmallaxe", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_smallaxe", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_axe", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_2haxe", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_battleaxe", 0, 100, SELL_RATIO); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "axes_battleaxe", 1, 100, SELL_RATIO); + } + AddStoreItem(STORE_NAME, "blunt_club", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer1", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer2", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_mace", 2, 100, SELL_RATIO); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "blunt_warhammer", 1, 100, SELL_RATIO); + } + AddStoreItem(STORE_NAME, "blunt_hammer3", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_maul", 0, 100, SELL_RATIO); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "blunt_maul", 1, 100, SELL_RATIO); + } + AddStoreItem(STORE_NAME, "polearms_qs", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_sp", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_holster", 2, 100, SELL_RATIO); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "blunt_gauntlets_leather", 1, 100, SELL_RATIO); + } + } + + void trade_done() + { + if (!(RandomInt(1, 3) == 1)) return; + SayText("Please , do come again some time. Might have something more interesting for you then."); + } + + void cider4() + { + CIDER = 1; + } + + void say_cider() + { + if (!(CIDER == 1)) return; + PlayAnim("once", "converse2"); + SayText("Ah yes, the shipment was waylaid so I had to arrange another, I've already sent a messenger."); + ScheduleDelayedEvent(3, "say_cider2"); + } + + void say_cider2() + { + SayText("She must have gotten anxious. Sorry for the touble. Head back to her for your reward"); + CIDER = 99; + CallExternal(FindEntityByName("wench"), "ciderreward"); + } + + void say_rumor() + { + PlayAnim("once", "pondering2"); + SayText("Helena is starting to become a fair sized city, their armourer is finally able to make all of his own weapons."); + } + +} + +} diff --git a/scripts/angelscript/edanas/sewerrat.as b/scripts/angelscript/edanas/sewerrat.as new file mode 100644 index 00000000..a8b7dad6 --- /dev/null +++ b/scripts/angelscript/edanas/sewerrat.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "monsters/giantrat.as" + +namespace MS +{ + +class Sewerrat : CGameScript +{ + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_RANGE; + + Sewerrat() + { + ATTACK_DAMAGE = 0.9; + ATTACK_RANGE = 70; + ATTACK_HITCHANCE = 0.55; + } + + void OnSpawn() override + { + SetHealth(15); + SetWidth(40); + SetHeight(64); + SetName("Sewer Rat"); + SetRoam(true); + SetHearingSensitivity(1); + SetSkillLevel(6); + SetRace("demon"); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + +} + +} diff --git a/scripts/angelscript/edanasewers_old/map_startup.as b/scripts/angelscript/edanasewers_old/map_startup.as new file mode 100644 index 00000000..2e1aa01c --- /dev/null +++ b/scripts/angelscript/edanasewers_old/map_startup.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "edanasewers_old"; + MAP_WEATHER = "fog_green;fog_green;fog_green;fog_green;fog_red;fog_red"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Sewers of Edana"); + SetGlobalVar("G_MAP_DESC", "These sewers predate the town above by hundreds of years and are now the haunted remnants of a once great city"); + SetGlobalVar("G_MAP_DIFF", "Levels 5-10 / 50-100hp"); + SetGlobalVar("G_WARN_HP", 0); + } + + void game_newlevel() + { + string reg.texture.name = "reflective"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.2"; + int reg.texture.reflect.range = 256; + int reg.texture.reflect.world = 0; + int reg.texture.water = 0; + // TODO: registertexture + } + +} + +} diff --git a/scripts/angelscript/effects.as b/scripts/angelscript/effects.as new file mode 100644 index 00000000..c391d9f5 --- /dev/null +++ b/scripts/angelscript/effects.as @@ -0,0 +1,28 @@ +#pragma context server + +namespace MS +{ + +class Effects : CGameScript +{ + Effects() + { + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + } + +} + +} diff --git a/scripts/angelscript/effects/add_dynamic_spawn.as b/scripts/angelscript/effects/add_dynamic_spawn.as new file mode 100644 index 00000000..8b6b118b --- /dev/null +++ b/scripts/angelscript/effects/add_dynamic_spawn.as @@ -0,0 +1,340 @@ +#pragma context server + +#include "effects/base_effect.as" + +namespace MS +{ + +class AddDynamicSpawn : CGameScript +{ + int DYNS_ACTIVE; + string DYNS_CHECK_SIGHT; + string DYNS_FLYER; + int DYNS_FOUND_VALID; + float DYNS_FREQ; + string DYNS_GLOBAL; + string DYNS_IN_VIEW; + string DYNS_LOWEST_TRANGE; + string DYNS_SPAWN_POINT; + string DYNS_STARTED; + string DYNS_TEST_PLAYER; + int DYNS_TEST_PLAYER_TRANGE; + string DYNS_VALID_TARGETS; + string DYNS_WINNER; + string DYN_SPAWNER; + string DYN_SPAWNER_MAXS; + string DYN_SPAWNER_MINS; + string EFFECT_FLAGS; + string EFFECT_ID; + int EFFECT_IGNORE_CLEARFX; + int PLAYING_DEAD; + + AddDynamicSpawn() + { + EFFECT_ID = "dynamic_spawn"; + EFFECT_FLAGS = "nostack"; + EFFECT_IGNORE_CLEARFX = 1; + } + + void game_activate() + { + if (param1 == "world") + { + DYNS_GLOBAL = 1; + if ((param2).findFirst("PARAM") == 0) + { + if ((param2).substr(0, 1) > 0) + { + DYNS_SRADIUS = param2; + } + else + { + DYNS_SRADIUS = 512; + } + } + else + { + DYNS_SRADIUS = 512; + } + } + DYNS_STARTED = GetGameTime(); + SetEntityOrigin(GetOwner(), Vector3(40000, 40000, 4000)); + CallExternal(GetOwner(), "npcatk_suspend_ai"); + PLAYING_DEAD = 1; + if (!(DYNS_GLOBAL)) + { + DYN_SPAWNER = GetSpawner(GetOwner()); + DYN_SPAWNER_MINS = GetEntityProperty(DYN_SPAWNER, "absmin"); + DYN_SPAWNER_MAXS = GetEntityProperty(DYN_SPAWNER, "absmax"); + } + if (NPC_FLIGHT != "NPC_FLIGHT") + { + DYNS_FLYER = 1; + } + if ((GetEntityProperty(GetOwner(), "fly"))) + { + DYNS_FLYER = 1; + } + DYNS_ACTIVE = 1; + DYNS_FREQ = 0.1; + ScheduleDelayedEvent(0.1, "dyns_hunt_find_location"); + } + + void dyns_hunt_find_location() + { + if (!(DYNS_ACTIVE)) return; + DYNS_FREQ("dyns_hunt_find_location"); + if (GetPlayerCount() == 0) + { + DYNS_FREQ = 1.0; + } + if (!(GetPlayerCount() > 0)) return; + DYNS_FREQ = 0.1; + GetAllPlayers(DYNS_TARGETS); + DYNS_FOUND_VALID = 0; + DYNS_VALID_TARGETS = ""; + if (!(DYNS_GLOBAL)) + { + for (int i = 0; i < GetTokenCount(DYNS_TARGETS, ";"); i++) + { + dyns_find_validate(); + } + } + else + { + DYNS_FOUND_VALID = 1; + DYNS_VALID_TARGETS = DYNS_TARGETS; + } + if (!(DYNS_FOUND_VALID)) return; + LogDebug("dyns_hunt_find_location"); + int L_RND = RandomInt(1, 5); + if ((DYNS_GLOBAL)) + { + int L_RND = 1; + } + if (L_RND < 5) + { + if (!(DYNS_GLOBAL)) + { + float L_X = Random((DYN_SPAWNER_MINS).x, (DYN_SPAWNER_MAXS).x); + float L_Y = Random((DYN_SPAWNER_MINS).y, (DYN_SPAWNER_MAXS).y); + float L_Z = Random((DYN_SPAWNER_MINS).z, (DYN_SPAWNER_MAXS).z); + DYNS_CHECK_SIGHT = Vector3(L_X, L_Y, L_Z); + } + else + { + DYNS_CHECK_SIGHT = "func_dyns_findspawnpoint"(); + } + if (DYNS_CHECK_SIGHT == "none") + { + return; + } + if (!(DYNS_FLYER)) + { + DYNS_CHECK_SIGHT = "z"; + } + DYNS_IN_VIEW = 0; + for (int i = 0; i < GetTokenCount(DYNS_TARGETS, ";"); i++) + { + dyns_check_inview(); + } + if (!(DYNS_IN_VIEW)) + { + } + DYNS_SPAWN_POINT = DYNS_CHECK_SIGHT; + string L_LEGIT = "func_dyns_test_point"(DYNS_SPAWN_POINT); + } + else + { + string L_N_TARGS = GetTokenCount(DYNS_VALID_TARGETS, ";"); + if (L_N_TARGS > 1) + { + int L_PLAYER_IDX = RandomInt(0, (L_N_TARGS - 1)); + } + else + { + int L_PLAYER_IDX = 0; + } + string L_PLAYER = GetToken(DYNS_VALID_TARGETS, L_PLAYER_IDX, ";"); + string L_PLAYER_VIEW = GetEntityProperty(L_PLAYER, "viewangles"); + string L_PLAYER_VIEW_YAW = /* TODO: $vec.yaw */ $vec.yaw(L_PLAYER_VIEW); + L_PLAYER_VIEW_YAW -= 180; + if (L_PLAYER_VIEW_YAW < 0) + { + L_PLAYER_VIEW_YAW += 360; + } + L_PLAYER_VIEW = "y"; + string L_PLAYER_POS = GetEntityOrigin(L_PLAYER); + float L_PLAYER_BACK = Random(32, 128); + L_PLAYER_BACK += GetEntityWidth(GetOwner()); + L_PLAYER_POS += /* TODO: $relpos */ $relpos(L_PLAYER_VIEW, Vector3(0, L_PLAYER_BACK, 0)); + DYNS_CHECK_SIGHT = L_PLAYER_POS; + if (!(DYNS_FLYER)) + { + DYNS_CHECK_SIGHT = "z"; + } + DYNS_IN_VIEW = 0; + for (int i = 0; i < GetTokenCount(DYNS_TARGETS, ";"); i++) + { + dyns_check_inview(); + } + if (!(DYNS_IN_VIEW)) + { + } + DYNS_SPAWN_POINT = DYNS_CHECK_SIGHT; + string L_LEGIT = "func_dyns_test_point"(DYNS_SPAWN_POINT); + } + if (!(L_LEGIT)) return; + dyns_finalize(); + } + + void dyns_finalize() + { + int L_DYNS_TEST_MODE = 0; + if (!(L_DYNS_TEST_MODE)) + { + PLAYING_DEAD = 0; + CallExternal(GetOwner(), "npcatk_resume_ai"); + DYNS_ACTIVE = 0; + CallExternal(GetOwner(), "set_home_loc", GetEntityOrigin(GetOwner())); + RemoveScript(); + } + else + { + SetRoam(false); + CallExternal(GetOwner(), "npcatk_suspend_ai"); + EmitSound(GetOwner(), 0, "magic/cast.wav", 10); + DYNS_ACTIVE = 0; + ScheduleDelayedEvent(5.0, "dyns_loop_test"); + } + } + + void dyns_loop_test() + { + game_activate(); + } + + void dyns_find_validate() + { + string L_CUR_TARG = GetToken(DYNS_TARGETS, i, ";"); + if (!(/* TODO: $within_box */ $within_box(L_CUR_TARG, 0, DYN_SPAWNER_MINS, DYN_SPAWNER_MAXS))) return; + DYNS_FOUND_VALID = 1; + if (DYNS_VALID_TARGETS.length() > 0) DYNS_VALID_TARGETS += ";"; + DYNS_VALID_TARGETS += L_CUR_TARG; + } + + void dyns_check_inview() + { + string L_CUR_TARG = GetToken(DYNS_TARGETS, i, ";"); + string L_TARG_ORG = GetEntityOrigin(L_CUR_TARG); + string L_TARG_ANG = GetEntityProperty(L_CUR_TARG, "viewangles"); + if ((WithinCone2D(DYNS_CHECK_SIGHT, L_TARG_ORG, L_TARG_ANG))) + { + string L_TRACE_START = L_TARG_ORG; + string L_MY_HEIGHT = GetEntityHeight(GetOwner()); + string L_TRACE_END = /* TODO: $math(vectoradd) */ DYNS_CHECK_SIGHT; + string L_TRACE_LINE = TraceLine(L_TRACE_START, L_TRACE_END); + if (L_TRACE_LINE != L_TRACE_END) + { + return; + } + } + else + { + return; + } + DYNS_IN_VIEW = 1; + } + + void func_dyns_test_point() + { + string L_OLD_ORG = GetEntityOrigin(GetOwner()); + string L_TELE_POINT = param1; + SetEntityOrigin(GetOwner(), L_TELE_POINT); + string reg.npcmove.endpos = L_TELE_POINT; + string L_MY_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, L_MY_ANG, 0), Vector3(-16, 0, 0)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner()); + int L_IS_LEGIT = 1; + if ("game.ret.npcmove.dist" == 0) + { + int L_IS_LEGIT = 0; + string L_DEBUG = "cant_move"; + } + if (!(DYNS_GLOBAL)) + { + } + if (!(L_IS_LEGIT)) + { + LogDebug("func_dyns_test_point L_DEBUG"); + SetEntityOrigin(GetOwner(), L_OLD_ORG); + return; + return; + } + else + { + LogDebug("func_dyns_test_point valid"); + return; + return; + } + } + + void func_dyns_findspawnpoint() + { + if (GetPlayerCount() == 1) + { + string L_PLAYER = GetToken(DYNS_VALID_TARGETS, 0, ";"); + } + else + { + int L_RND = RandomInt(0, GetPlayerCount()); + string L_PLAYER = GetToken(DYNS_VALID_TARGETS, L_RND, ";"); + } + string L_SPAWN_POINT = GetEntityOrigin(L_PLAYER); + if ((GetGameTime() - DYNS_STARTED) < 3) + { + string L_ANG = GetEntityProperty(L_PLAYER, "viewangles"); + string L_ANG = /* TODO: $vec.yaw */ $vec.yaw(L_ANG); + L_ANG += Random(-100, 100); + } + else + { + float L_ANG = Random(0, 359.99); + } + string L_DIST = GetEntityWidth(GetOwner()); + L_DIST *= 2.0; + L_DIST += Random(0, DYNS_SRADIUS); + float L_Z = Random(0, 64); + L_SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, L_ANG, 0), Vector3(0, L_DIST, L_Z)); + return; + return; + } + + void dyns_find_popular_eloop() + { + string L_IDX = i; + DYNS_TEST_PLAYER = GetToken(DYNS_VALID_TARGETS, L_IDX, ";"); + DYNS_TEST_PLAYER_TRANGE = 0; + for (int i = 0; i < DYNS_NPLAYERS; i++) + { + dyns_test_popular_eeloop(); + } + if (DYNS_TEST_PLAYER_TRANGE < DYNS_LEAST_AUTISTIC) + { + DYNS_LOWEST_TRANGE = DYNS_TEST_PLAYER_TRANGE; + DYNS_WINNER = DYNS_TEST_PLAYER; + } + } + + void dyns_test_popular_eeloop() + { + string L_TEST_AGAINST = GetToken(DYNS_VALID_TARGETS, i, ";"); + string L_TEST_SUBJECT_ORG = GetEntityOrigin(DYNS_TEST_PLAYER); + string L_TEST_TARGET_ORG = GetEntityOrigin(L_TEST_AGAINST); + DYNS_TEST_PLAYER_TRANGE += Distance(L_TEST_SUBJECT_ORG, L_TEST_TARGET_ORG); + } + +} + +} diff --git a/scripts/angelscript/effects/base_debuff.as b/scripts/angelscript/effects/base_debuff.as new file mode 100644 index 00000000..b575c7ef --- /dev/null +++ b/scripts/angelscript/effects/base_debuff.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "effects/base_effect.as" + +namespace MS +{ + +class BaseDebuff : CGameScript +{ + int DEBUFF_INTENSITY; + int DEBUFF_SCRIPTFLAG; + int DEBUFF_STARTED; + string EFFECT_ID; + string EFFECT_SCRIPT; + + BaseDebuff() + { + EFFECT_ID = "base_debuff"; + EFFECT_SCRIPT = currentscript; + DEBUFF_INTENSITY = 1; + DEBUFF_SCRIPTFLAG = 0; + DEBUFF_STARTED = 0; + } + + void game_activate() + { + debuff_check_scriptflag(); + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + DEBUFF_SCRIPTFLAG = 1; + } + if (!(DEBUFF_SCRIPTFLAG)) + { + debuff_start(); + } + else + { + RemoveScript(); + } + } + + void debuff_start() + { + DEBUFF_STARTED = 1; + SetScriptFlags(GetOwner(), "add", EFFECT_ID, "debuff", DEBUFF_INTENSITY, EFFECT_DURATION); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetScriptFlags(GetOwner(), "remove", EFFECT_ID); + } + + void debuff_check_scriptflag() + { + SetScriptFlags(GetOwner(), "remove_expired"); + string L_INTENSITY = /* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), EFFECT_ID, "name_value"); + if (!(L_INTENSITY != "none")) return; + if ((DEBUFF_SCRIPTFLAG)) return; + DEBUFF_SCRIPTFLAG = 1; + SetScriptFlags(GetOwner(), "edit", EFFECT_ID, "debuff", DEBUFF_INTENSITY, EFFECT_DURATION); + } + + void game_scriptflag_update() + { + if ((DEBUFF_SCRIPTFLAG)) return; + if (!(param1 == "edit")) return; + if (!(param2 == EFFECT_ID)) return; + debuff_scriptflag_update(param4, param5); + } + + void debuff_scriptflag_update() + { + if (param1 > DEBUFF_INTENSITY) + { + DEBUFF_INTENSITY = param1; + } + effect_set_duration(param2); + } + +} + +} diff --git a/scripts/angelscript/effects/base_debuff_diminishing.as b/scripts/angelscript/effects/base_debuff_diminishing.as new file mode 100644 index 00000000..91d00833 --- /dev/null +++ b/scripts/angelscript/effects/base_debuff_diminishing.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "effects/base_debuff.as" + +namespace MS +{ + +class BaseDebuffDiminishing : CGameScript +{ + string DEBUFF_SCRIPTFLAG; + string EFFECT_ID; + string EFFECT_SCRIPT; + int POOL_CAP; + string POOL_FLAG_NAME; + int POOL_REGEN; + string POOL_REMAINING; + + BaseDebuffDiminishing() + { + EFFECT_ID = "base_debuff"; + EFFECT_SCRIPT = currentscript; + POOL_CAP = 10; + POOL_REGEN = 4; + POOL_REMAINING = POOL_CAP; + POOL_FLAG_NAME = EFFECT_ID; + } + + void debuff_check_scriptflag() + { + if ((DEBUFF_SCRIPTFLAG)) return; + string L_ACTION = "add"; + string L_TIME_USED = EFFECT_DURATION; + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), POOL_FLAG_NAME, "name_exists"))) + { + pool_get_available(); + string L_ACTION = "edit"; + } + L_TIME_USED = max(0, min(POOL_REMAINING, L_TIME_USED)); + if (L_TIME_USED == 0) + { + DEBUFF_SCRIPTFLAG = 1; + return; + } + effect_set_duration(L_TIME_USED); + string L_POOL_USED = (POOL_CAP - POOL_REMAINING); + string L_REGEN_TIME = L_TIME_USED; + L_REGEN_TIME += L_POOL_USED; + L_REGEN_TIME *= POOL_REGEN; + string L_TYPE = (GetGameTime() + L_TIME_USED); + SetScriptFlags(GetOwner(), L_ACTION, POOL_FLAG_NAME, L_TYPE, L_REGEN_TIME, L_REGEN_TIME); + } + + void pool_get_available() + { + SetScriptFlags(GetOwner(), "remove_expired"); + string L_VALUE = /* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), POOL_FLAG_NAME, "name_type"); + if (L_VALUE == "none") + { + POOL_REMAINING = POOL_CAP; + return; + } + string L_END_TIME = GetToken(L_VALUE, 0, ";"); + string L_REMAINING = (POOL_CAP - GetToken(L_VALUE, 1, ";")); + string L_RECOVERED = (GetGameTime() - L_END_TIME); + L_RECOVERED /= POOL_REGEN; + L_RECOVERED = max(0, min(999, L_RECOVERED)); + int L_RECOVERED = int(L_RECOVERED); + L_REMAINING += L_RECOVERED; + POOL_REMAINING = L_REMAINING; + } + +} + +} diff --git a/scripts/angelscript/effects/base_dot.as b/scripts/angelscript/effects/base_dot.as new file mode 100644 index 00000000..351efa93 --- /dev/null +++ b/scripts/angelscript/effects/base_dot.as @@ -0,0 +1,179 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class BaseDot : CGameScript +{ + string BE_RESIST_STRING; + string DOT_ATTACKER; + string DOT_DMG; + string DOT_FLAG_NAME; + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + int DOT_RESISTED; + string DOT_SKILL; + string DOT_TYPE; + string EFFECT_ID; + string EFFECT_SCRIPT; + + BaseDot() + { + EFFECT_ID = "base_dot"; + EFFECT_SCRIPT = currentscript; + DOT_TYPE = "fire_effect"; + DOT_RESISTED = 0; + DOT_IM_AFFECTED = "You are on base_dot!"; + DOT_IM_RESIST = "The base_dot leaves you unharmed."; + DOT_HE_IMMUNE = "is not harmed by the base_dot."; + } + + void game_activate() + { + DOT_ATTACKER = param2; + DOT_DMG = param3; + DOT_SKILL = param4; + DOT_FLAG_NAME = DOT_TYPE; + dot_check_canapply(); + if (!(DOT_RESISTED)) + { + SendPlayerMessage(GetOwner(), DOT_IM_AFFECTED); + SetScriptFlags(GetOwner(), "add", DOT_FLAG_NAME, EFFECT_ID, DOT_DMG, EFFECT_DURATION); + dot_start(); + ScheduleDelayedEvent(0.5, "dot_effect"); + } + else + { + RemoveScript(); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((DOT_RESISTED)) return; + SetScriptFlags(GetOwner(), "remove", DOT_FLAG_NAME); + } + + void dot_start() + { + } + + void dot_effect() + { + XDoDamage(GetEntityIndex(GetOwner()), "direct", DOT_DMG, 100, DOT_ATTACKER, DOT_ATTACKER, DOT_SKILL, DOT_TYPE); + ScheduleDelayedEvent(1.0, "dot_effect"); + } + + void dot_check_canapply() + { + dot_fiendly_check(); + if ((DOT_RESISTED)) return; + dot_resist_check(); + if ((DOT_RESISTED)) return; + dot_scriptflag_check(); + } + + void dot_fiendly_check() + { + if (GetEntityIndex(DOT_ATTACKER) == GetEntityIndex(GetOwner())) + { + DOT_RESISTED = 1; + return; + } + if ((IsValidPlayer(GetOwner()))) + { + if ((IsValidPlayer(DOT_ATTACKER))) + { + if (!("game.pvp")) + { + DOT_RESISTED = 1; + return; + } + } + } + if (GetRelationship(GetOwner()) == "ally") + { + DOT_RESISTED = 1; + return; + } + } + + void dot_resist_check() + { + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + DOT_RESISTED = 1; + return; + } + string L_DOT_TYPE = DOT_TYPE; + if ((L_DOT_TYPE).findFirst("_effect") >= 0) + { + string L_DOT_TYPE = /* TODO: $string_upto */ $string_upto(L_DOT_TYPE, "_"); + } + string IMMUNE_RATIO = /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), L_DOT_TYPE); + if (IMMUNE_RATIO == 0) + { + SendColoredMessage(GetOwner(), DOT_IM_RESIST); + SendColoredMessage(DOT_ATTACKER, GetEntityName(GetOwner()) + DOT_HE_IMMUNE); + DOT_RESISTED = 1; + return; + } + int L_ROLL = RandomInt(1, 100); + int L_RESISTANCE = int((IMMUNE_RATIO * 100)); + L_RESISTANCE = max(0, min(100, L_RESISTANCE)); + BE_RESIST_STRING = " ( "; + if (L_ROLL > L_RESISTANCE) + { + SendColoredMessage(GetOwner(), DOT_IM_RESIST + BE_RESIST_STRING); + SendColoredMessage(DOT_ATTACKER, GetEntityName(GetOwner()) + "resists the " + L_DOT_TYPE + "magic. " + BE_RESIST_STRING); + DOT_RESISTED = 1; + return; + } + } + + void dot_scriptflag_check() + { + SetScriptFlags(GetOwner(), "remove_expired"); + string L_VALUE = /* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), DOT_FLAG_NAME, "name_value"); + if (L_VALUE != "none") + { + DOT_RESISTED = 1; + if (L_VALUE < DOT_DMG) + { + string L_VALUE = DOT_DMG; + } + SetScriptFlags(GetOwner(), "edit", DOT_FLAG_NAME, EFFECT_ID, L_VALUE, EFFECT_DURATION); + } + else + { + if ((IsValidPlayer(GetOwner()))) + { + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), EFFECT_ID, "type_exists"))) + { + DOT_RESISTED = 1; + } + } + } + } + + void game_scriptflag_update() + { + if ((DOT_RESISTED)) return; + if (!(param1 == "edit")) return; + if (!(param2 == DOT_FLAG_NAME)) return; + dot_scriptflag_update(param4, param5); + } + + void dot_scriptflag_update() + { + DOT_DMG = param1; + effect_set_duration(param2); + dot_start(); + } + +} + +} diff --git a/scripts/angelscript/effects/base_effect.as b/scripts/angelscript/effects/base_effect.as new file mode 100644 index 00000000..d5982680 --- /dev/null +++ b/scripts/angelscript/effects/base_effect.as @@ -0,0 +1,91 @@ +#pragma context server + +namespace MS +{ + +class BaseEffect : CGameScript +{ + string EFFECT_DURATION; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string EFFECT_STARTED; + string EFFECT_TIMELEFT; + string game.effect.flags; + string game.effect.id; + int game.effect.removeondeath; + + BaseEffect() + { + EFFECT_ID = "base_effect"; + EFFECT_FLAGS = "EFFECT_FLAGS"; + EFFECT_SCRIPT = currentscript; + game.effect.removeondeath = 1; + game.effect.id = EFFECT_ID; + game.effect.flags = EFFECT_FLAGS; + } + + void game_precache() + { + string reg.effect.script = EFFECT_SCRIPT; + string reg.effect.name = EFFECT_ID; + string reg.effect.flags = EFFECT_FLAGS; + // TODO: registereffect + } + + void game_activate() + { + EFFECT_STARTED = GetGameTime(); + EFFECT_DURATION = param1; + if (!(EFFECT_DURATION)) return; + if (!(EFFECT_DURATION != "PARAM1")) return; + EFFECT_DURATION("effect_duration_ended"); + } + + void effect_duration_ended() + { + string L_END_TIME = (EFFECT_STARTED + EFFECT_DURATION); + if (GetGameTime() >= L_END_TIME) + { + RemoveScript(); + } + else + { + string L_TIME_REMAINING = (L_END_TIME - GetGameTime()); + L_TIME_REMAINING("effect_duration_ended"); + } + } + + void effect_increase_duration() + { + EFFECT_DURATION += param1; + } + + void effect_set_duration() + { + EFFECT_STARTED = GetGameTime(); + effect_get_timeleft(); + if (param1 < EFFECT_TIMELEFT) + { + PARAM1("effect_duration_ended"); + } + EFFECT_DURATION = param1; + } + + void effect_get_timeleft() + { + EFFECT_TIMELEFT = (GetGameTime() - EFFECT_STARTED); + EFFECT_TIMELEFT = (EFFECT_DURATION - EFFECT_TIMELEFT); + } + + void effect_die() + { + } + + void game_duplicated() + { + } + +} + +} diff --git a/scripts/angelscript/effects/debuff_acid.as b/scripts/angelscript/effects/debuff_acid.as new file mode 100644 index 00000000..1d8c34bf --- /dev/null +++ b/scripts/angelscript/effects/debuff_acid.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "effects/base_debuff.as" + +namespace MS +{ + +class DebuffAcid : CGameScript +{ + string EFFECT_ID; + string EFFECT_SCRIPT; + + DebuffAcid() + { + EFFECT_ID = "debuff_acid"; + EFFECT_SCRIPT = currentscript; + } + + void OnDamage(int damage) override + { + if (!(DEBUFF_STARTED)) return; + return; + } + +} + +} diff --git a/scripts/angelscript/effects/debuff_cold.as b/scripts/angelscript/effects/debuff_cold.as new file mode 100644 index 00000000..6416e596 --- /dev/null +++ b/scripts/angelscript/effects/debuff_cold.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "effects/base_debuff.as" + +namespace MS +{ + +class DebuffCold : CGameScript +{ + string EFFECT_ID; + string EFFECT_SCRIPT; + float game.effect.anim.framerate; + int game.effect.movespeed; + + DebuffCold() + { + EFFECT_ID = "debuff_cold"; + EFFECT_SCRIPT = currentscript; + } + + void debuff_start() + { + game.effect.movespeed = 60; + game.effect.anim.framerate = 0.5; + } + +} + +} diff --git a/scripts/angelscript/effects/debuff_defile.as b/scripts/angelscript/effects/debuff_defile.as new file mode 100644 index 00000000..3d9cd54d --- /dev/null +++ b/scripts/angelscript/effects/debuff_defile.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "effects/base_debuff.as" + +namespace MS +{ + +class DebuffDefile : CGameScript +{ + string EFFECT_ID; + string EFFECT_SCRIPT; + + DebuffDefile() + { + EFFECT_ID = "debuff_defile"; + EFFECT_SCRIPT = currentscript; + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(DEBUFF_STARTED)) return; + return; + } + +} + +} diff --git a/scripts/angelscript/effects/debuff_freeze.as b/scripts/angelscript/effects/debuff_freeze.as new file mode 100644 index 00000000..506addaf --- /dev/null +++ b/scripts/angelscript/effects/debuff_freeze.as @@ -0,0 +1,52 @@ +#pragma context server + +#include "effects/base_debuff_diminishing.as" + +namespace MS +{ + +class DebuffFreeze : CGameScript +{ + string CAGE_SCRIPT_IDX; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string SOUND_FREEZE; + float game.effect.anim.framerate; + int game.effect.canattack; + int game.effect.canduck; + int game.effect.canjump; + int game.effect.movespeed; + + DebuffFreeze() + { + EFFECT_ID = "debuff_frozen"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + SOUND_FREEZE = "magic/freeze.wav"; + } + + void debuff_start() + { + EmitSound(GetOwner(), 0, SOUND_FREEZE, 10); + game.effect.movespeed = 0; + game.effect.canduck = 0; + game.effect.canjump = 0; + game.effect.canattack = 0; + game.effect.anim.framerate = 0.01; + ClientEvent("new", "all", "effects/sfx_icecage", GetEntityIndex(GetOwner()), EFFECT_DURATION); + CAGE_SCRIPT_IDX = "game.script.last_sent_id"; + CallExternal(GetOwner(), "freeze_solid_start", EFFECT_DURATION); + // TODO: hud.addstatusicon ent_me hud/status/alpha_debuff_frozen EFFECT_ID EFFECT_DURATION + } + + void effect_die() + { + if (!(DEBUFF_STARTED)) return; + ClientEvent("update", "all", CAGE_SCRIPT_IDX, "end_cage_fx"); + CallExternal(GetOwner(), "freeze_solid_end"); + } + +} + +} diff --git a/scripts/angelscript/effects/debuff_hold.as b/scripts/angelscript/effects/debuff_hold.as new file mode 100644 index 00000000..50d55d03 --- /dev/null +++ b/scripts/angelscript/effects/debuff_hold.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "effects/base_debuff_diminishing.as" + +namespace MS +{ + +class DebuffHold : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + int game.effect.anim.framerate; + int game.effect.canduck; + int game.effect.canjump; + int game.effect.movespeed; + + DebuffHold() + { + EFFECT_ID = "debuff_hold"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void debuff_start() + { + game.effect.movespeed = 0; + game.effect.canjump = 0; + game.effect.canduck = 0; + game.effect.anim.framerate = 0; + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + SetScriptFlags(GetOwner(), "add", "hold_person", "nopush", 1, EFFECT_DURATION, "none"); + // TODO: hud.addstatusicon ent_me hud/status/alpha_debuff_hold EFFECT_ID EFFECT_DURATION + CallExternal(GetEntityIndex(GetOwner()), "ext_set_frozen", EFFECT_DURATION); + ClientEvent("new", "all", "effects/sfx_beam_cage", GetEntityIndex(GetOwner()), EFFECT_DURATION); + EmitSound(GetOwner(), 0, "magic/freeze.wav", 10); + } + + void effect_die() + { + if ((DEBUFF_SCRIPTFLAG)) return; + CallExternal(GetEntityIndex(GetOwner()), "ext_set_unfrozen"); + EmitSound(GetOwner(), 0, "magic/energy1_loud.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/effects/debuff_lightning.as b/scripts/angelscript/effects/debuff_lightning.as new file mode 100644 index 00000000..f6d253b5 --- /dev/null +++ b/scripts/angelscript/effects/debuff_lightning.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "effects/base_debuff.as" + +namespace MS +{ + +class DebuffLightning : CGameScript +{ + string EFFECT_ID; + string EFFECT_SCRIPT; + + DebuffLightning() + { + EFFECT_ID = "debuff_lightning"; + EFFECT_SCRIPT = currentscript; + } + + void debuff_start() + { + SetHitMultiplier(GetOwner()); + } + + void effect_die() + { + if (!(DEBUFF_STARTED)) return; + SetHitMultiplier(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/effects/debuff_stun.as b/scripts/angelscript/effects/debuff_stun.as new file mode 100644 index 00000000..838f7eca --- /dev/null +++ b/scripts/angelscript/effects/debuff_stun.as @@ -0,0 +1,152 @@ +#pragma context server + +#include "effects/base_debuff_diminishing.as" + +namespace MS +{ + +class DebuffStun : CGameScript +{ + string BE_RESIST_STRING; + string CL_FX; + string DEBUFF_SCRIPTFLAG; + string DOT_ATTACKER; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string SOUND_RESIST; + string STUN_RESISTANCE; + float game.effect.anim.framerate; + int game.effect.canattack; + int game.effect.canjump; + int game.effect.movespeed; + + DebuffStun() + { + EFFECT_ID = "debuff_stun"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + SOUND_RESIST = "body/armour3.wav"; + } + + void game_precache() + { + Precache("effects/sfx_stunring"); + } + + void game_activate() + { + DOT_ATTACKER = param2; + STUN_RESISTANCE = /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "stun"); + check_immune_stun(); + if ((DEBUFF_SCRIPTFLAG)) return; + check_block_stun(); + if ((DEBUFF_SCRIPTFLAG)) return; + check_resist_stun(); + } + + void debuff_start() + { + game.effect.movespeed = 45; + game.effect.anim.framerate = 0.4; + game.effect.canjump = 0; + game.effect.canattack = 0; + if ((IsValidPlayer(GetOwner()))) + { + // TODO: hud.addstatusicon ent_me hud/status/alpha_stun stun EFFECT_DURATION + } + ClientEvent("new", "all", "effects/sfx_stunring", GetEntityIndex(GetOwner()), EFFECT_DURATION, GetEntityHeight(GetOwner())); + CL_FX = "game.script.last_sent_id"; + } + + void check_immune_stun() + { + if (STUN_RESISTANCE <= 0) + { + SendColoredMessage(GetOwner(), "You are immune to stun effects."); + SendColoredMessage(DOT_ATTACKER, GetEntityName(GetOwner()) + " is immune to stun effects."); + DEBUFF_SCRIPTFLAG = 1; + return; + RemoveScript(); + } + if ((GetEntityProperty(GetOwner(), "nopush"))) + { + SendColoredMessage(GetOwner(), "You are immune to stun effects."); + SendColoredMessage(DOT_ATTACKER, GetEntityName(GetOwner()) + " is immune to stun effects."); + DEBUFF_SCRIPTFLAG = 1; + return; + RemoveScript(); + } + } + + void check_block_stun() + { + if ((IsValidPlayer(GetOwner()))) + { + string CUR_WEAPON = GetEntityProperty(GetOwner(), "scriptvar"); + if (GetEntityProperty(CUR_WEAPON, "scriptvar") == 1) + { + int BLOCKED_ATTACK = 1; + } + if (GetEntityProperty(CUR_WEAPON, "scriptvar") == 1) + { + int BLOCKED_ATTACK = 1; + } + if ((BLOCKED_ATTACK)) + { + SendPlayerMessage(GetOwner(), GetEntityName(CUR_WEAPON) + " blocked stun impact."); + DEBUFF_SCRIPTFLAG = 1; + return; + RemoveScript(); + } + string CUR_WEAPON = GetEntityProperty(GetOwner(), "scriptvar"); + if (GetEntityProperty(CUR_WEAPON, "scriptvar") == 1) + { + int BLOCKED_ATTACK = 1; + } + if (GetEntityProperty(CUR_WEAPON, "scriptvar") == 1) + { + int BLOCKED_ATTACK = 1; + } + if ((BLOCKED_ATTACK)) + { + SendPlayerMessage(GetOwner(), GetEntityName(CUR_WEAPON) + " blocked the stun impact."); + DEBUFF_SCRIPTFLAG = 1; + return; + RemoveScript(); + } + } + } + + void check_resist_stun() + { + int STUN_ROLL = RandomInt(1, 100); + string L_STUN_RESIST_PERCENT = (STUN_RESISTANCE * 100); + int L_STUN_RESIST_PERCENT = int((100 - L_STUN_RESIST_PERCENT)); + if (STUN_ROLL <= L_STUN_RESIST_PERCENT) + { + EmitSound(GetOwner(), 0, SOUND_RESIST, 10); + BE_RESIST_STRING = "( "; + SendColoredMessage(GetOwner(), "You resist being stunned! " + BE_RESIST_STRING); + SendColoredMessage(DOT_ATTACKER, GetEntityName(GetOwner()) + "resists the stun effect. " + BE_RESIST_STRING); + DEBUFF_SCRIPTFLAG = 1; + return; + RemoveScript(); + } + else + { + SendPlayerMessage(GetOwner(), "You have been stunned! STUN_ROLL / L_STUN_RESIST_PERCENT"); + } + } + + void effect_die() + { + if ((CL_FX)) + { + ClientEvent("update", "all", CL_FX, "end_fx"); + } + } + +} + +} diff --git a/scripts/angelscript/effects/demon_blood.as b/scripts/angelscript/effects/demon_blood.as new file mode 100644 index 00000000..4af3efe7 --- /dev/null +++ b/scripts/angelscript/effects/demon_blood.as @@ -0,0 +1,96 @@ +#pragma context server + +#include "effects/base_effect.as" + +namespace MS +{ + +class DemonBlood : CGameScript +{ + int DEMON_BLOOD; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string FX_DURATION; + string FX_INTENSITY; + int MAKE_NOISE; + + DemonBlood() + { + EFFECT_SCRIPT = currentscript; + EFFECT_ID = "demon_blood"; + EFFECT_FLAGS = "nostack"; + } + + void game_activate() + { + FX_DURATION = param1; + FX_INTENSITY = param2; + FX_DURATION("end_demon_blood"); + Effect("screenfade", GetOwner(), 0.5, 3, Vector3(255, 0, 0), 255, "fadeout"); + SendColoredMessage(GetOwner(), "The demonic soul fills your heart with rage!"); + EmitSound(GetOwner(), 0, "monsters/troll/trollidle2.wav", 10); + MAKE_NOISE = 2; + DEMON_BLOOD = 1; + ScheduleDelayedEvent(1.0, "demon_blood_loop"); + } + + void demon_blood_loop() + { + if (!(DEMON_BLOOD)) return; + Effect("glow", GetOwner(), Vector3(255, 0, 0), 256, 1.9, 1.9); + ScheduleDelayedEvent(2.0, "demon_blood_loop"); + MAKE_NOISE += 1; + if (MAKE_NOISE > 5) + { + // PlayRandomSound from: "monsters/troll/trollidle2.wav", "monsters/troll/trollidle.wav" + array sounds = {"monsters/troll/trollidle2.wav", "monsters/troll/trollidle.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + MAKE_NOISE = 0; + } + HealEntity(GetOwner(), FX_INTENSITY); + Effect("screenfade", GetOwner(), 0.5, 1, Vector3(255, 0, 0), 150, "fadeout"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 32, 10, 1, 32); + if (MAKE_NOISE > 0) + { + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + } + if (GetEntityHealth(GetOwner()) <= 0) + { + KillEntity(GetOwner()); + } + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if ((DEMON_BLOOD)) + { + if ((IsEntityAlive(param1))) + { + } + if (GetRelationship(param1) == "enemy") + { + } + string DEMON_BLOOD_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting"); + DEMON_BLOOD_DAMAGE *= (2 * /* TODO: $neg */ $neg(FX_INTENSITY)); + if (RandomInt(1, 3) == 1) + { + } + XDoDamage(param1, "direct", DEMON_BLOOD_DAMAGE, 100, GetOwner(), GetOwner(), "none", "magic_effect"); + EmitSound(GetOwner(), 0, "weather/Storm_exclamation.wav", 10); + // PlayRandomSound from: "monsters/troll/trollpain.wav", "monsters/troll/trollattack.wav" + array sounds = {"monsters/troll/trollpain.wav", "monsters/troll/trollattack.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void end_demon_blood() + { + DEMON_BLOOD = 0; + SendColoredMessage(GetOwner(), "The demon blood fades."); + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/dot_acid.as b/scripts/angelscript/effects/dot_acid.as new file mode 100644 index 00000000..9a60738a --- /dev/null +++ b/scripts/angelscript/effects/dot_acid.as @@ -0,0 +1,59 @@ +#pragma context server + +#include "effects/base_dot allowduplicate.as" + +namespace MS +{ + +class DotAcid : CGameScript +{ + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_TYPE; + string EFFECT_ID; + string EFFECT_SCRIPT; + + DotAcid() + { + EFFECT_ID = "DOT_acid"; + EFFECT_SCRIPT = currentscript; + DOT_TYPE = "acid_effect"; + DOT_IM_AFFECTED = "You have been acid burned!"; + DOT_IM_RESIST = "You resist the acid attack."; + DOT_HE_IMMUNE = "is immune to acid!"; + } + + void dot_start() + { + string DUR_RATIO = GetEntityProperty(DOT_ATTACKER, "scriptvar"); + if (DUR_RATIO != 0) + { + EFFECT_DURATION *= DUR_RATIO; + } + if ((IsValidPlayer(GetOwner()))) + { + // svplaysound: if ( $get(ent_me,isplayer) ) svplaysound game.sound.body game.sound.maxvol $get(ent_me,scriptvar,'PLR_SOUND_STOMACHHIT1') + EmitSound("game.sound.body", "game.sound.maxvol", GetEntityProperty(GetOwner(), "scriptvar")); + } + Effect("glow", GetOwner(), Vector3(75, 215, 0), 72, EFFECT_DURATION, EFFECT_DURATION); + ApplyEffect(GetOwner(), "effects/debuff_acid", EFFECT_DURATION); + // TODO: hud.addstatusicon ent_me hud/status/alpha_dot_poison EFFECT_ID EFFECT_DURATION + } + + void dot_effect() + { + Effect("screenfade", GetOwner(), 0.2, 0, Vector3(75, 215, 0), 30, "fadein"); + } + + void effect_die() + { + if (!(DOT_RESISTED)) + { + SendPlayerMessage(GetOwner(), "The acid burns out."); + } + } + +} + +} diff --git a/scripts/angelscript/effects/dot_bleed.as b/scripts/angelscript/effects/dot_bleed.as new file mode 100644 index 00000000..3c62cb16 --- /dev/null +++ b/scripts/angelscript/effects/dot_bleed.as @@ -0,0 +1,47 @@ +#pragma context server + +#include "effects/base_dot allowduplicate.as" + +namespace MS +{ + +class DotBleed : CGameScript +{ + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_TYPE; + string EFFECT_ID; + string EFFECT_SCRIPT; + string SFX_BLEED; + + DotBleed() + { + EFFECT_ID = "DOT_pierce"; + EFFECT_SCRIPT = currentscript; + DOT_TYPE = "pierce_effect"; + DOT_IM_AFFECTED = "You are bleeding!"; + DOT_IM_RESIST = "Your armor prevents the attack from piercing through your skin."; + DOT_HE_IMMUNE = "cannot bleed."; + } + + void dot_start() + { + if ((GetEntityProperty(GetOwner(), "alive"))) + { + ClientEvent("new", "all", "effects/sfx_bleed", GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "blood")); + SFX_BLEED = "game.script.last_sent_id"; + } + } + + void effect_die() + { + if (SFX_BLEED != "SFX_BLEED") + { + ClientEvent("update", "all", SFX_BLEED, "remove_me"); + } + } + +} + +} diff --git a/scripts/angelscript/effects/dot_cold.as b/scripts/angelscript/effects/dot_cold.as new file mode 100644 index 00000000..2045d4a1 --- /dev/null +++ b/scripts/angelscript/effects/dot_cold.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "effects/base_dot allowduplicate.as" + +namespace MS +{ + +class DotCold : CGameScript +{ + string CL_FX; + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_TYPE; + string EFFECT_ID; + string EFFECT_SCRIPT; + + DotCold() + { + EFFECT_ID = "DOT_cold"; + EFFECT_SCRIPT = currentscript; + DOT_TYPE = "cold_effect"; + DOT_IM_AFFECTED = "You have been frozen!"; + DOT_IM_RESIST = "You resist the debilitating cold."; + DOT_HE_IMMUNE = "is immune to cold attacks!"; + } + + void dot_start() + { + if ((CL_FX)) + { + ClientEvent("update", "all", CL_FX, "effect_die"); + } + ClientEvent("new", "all", "effects/sfx_blue_flames", EFFECT_DURATION, GetEntityIndex(GetOwner())); + CL_FX = "game.script.last_sent_id"; + Effect("glow", GetOwner(), Vector3(128, 128, 255), 72, EFFECT_DURATION, EFFECT_DURATION); + ApplyEffect(GetOwner(), "effects/debuff_cold", EFFECT_DURATION); + // TODO: hud.addstatusicon ent_me hud/status/alpha_dot_cold EFFECT_ID EFFECT_DURATION + } + + void dot_effect() + { + Effect("screenfade", GetOwner(), 0.8, 0, Vector3(4, 50, 128), 70, "fadein"); + } + + void effect_die() + { + if ((CL_FX)) + { + ClientEvent("update", "all", CL_FX, "effect_die"); + } + } + +} + +} diff --git a/scripts/angelscript/effects/dot_cold_freeze.as b/scripts/angelscript/effects/dot_cold_freeze.as new file mode 100644 index 00000000..5c8a1fa3 --- /dev/null +++ b/scripts/angelscript/effects/dot_cold_freeze.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "effects/dot_cold allowduplicate.as" + +namespace MS +{ + +class DotColdFreeze : CGameScript +{ + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_RESISTED; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string MAX_HP; + + DotColdFreeze() + { + EFFECT_ID = "dot_cold_freeze"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + DOT_IM_AFFECTED = "You have been encased in ice!"; + DOT_IM_RESIST = "You resist being frozen."; + DOT_HE_IMMUNE = "is immune to cold magic!"; + } + + void game_activate() + { + MAX_HP = param5; + if (!(param5)) + { + MAX_HP = 1500; + } + } + + void dot_check_canapply() + { + if (GetEntityWidth(GetOwner()) > 256) + { + int L_TOO_BIG = 1; + } + if (GetEntityHeight(GetOwner()) > 256) + { + int L_TOO_BIG = 1; + } + if ((L_TOO_BIG)) + { + SendPlayerMessage(DOT_ATTACKER, GetEntityName(GetOwner()) + " is too large to be encased in ice."); + DOT_RESISTED = 1; + RemoveScript(); + return; + } + if (GetEntityHealth(GetOwner()) > MAX_HP) + { + SendPlayerMessage(DOT_ATTACKER, GetEntityName(GetOwner()) + " is too strong to be encased in ice. > int(MAX_HP)"); + DOT_RESISTED = 1; + RemoveScript(); + return; + } + } + + void dot_start() + { + ApplyEffect(GetOwner(), "effects/debuff_freeze", EFFECT_DURATION); + } + +} + +} diff --git a/scripts/angelscript/effects/dot_dark.as b/scripts/angelscript/effects/dot_dark.as new file mode 100644 index 00000000..54c1fd73 --- /dev/null +++ b/scripts/angelscript/effects/dot_dark.as @@ -0,0 +1,50 @@ +#pragma context server + +#include "effects/base_dot allowduplicate.as" + +namespace MS +{ + +class DotDark : CGameScript +{ + string CL_FX; + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_TYPE; + string EFFECT_ID; + string EFFECT_SCRIPT; + + DotDark() + { + EFFECT_ID = "DOT_defile"; + EFFECT_SCRIPT = currentscript; + DOT_TYPE = "dark_effect"; + DOT_IM_AFFECTED = "You are being defiled by dark magics!"; + DOT_IM_RESIST = "You resist the dark magic."; + DOT_HE_IMMUNE = "is immune to dark magic!"; + } + + void dot_start() + { + Effect("glow", GetOwner(), Vector3(255, 0, 255), 72, EFFECT_DURATION, EFFECT_DURATION); + if ((CL_FX)) + { + ClientEvent("update", "all", CL_FX, "effect_die"); + } + ClientEvent("new", "all", "effects/sfx_flames", GetEntityIndex(GetOwner()), EFFECT_DURATION, GetEntityHeight(GetOwner()), 1, 1, GetEntityWidth(GetOwner())); + CL_FX = "game.script.last_sent_id"; + ApplyEffect(GetOwner(), "effects/debuff_defile", EFFECT_DURATION); + } + + void effect_die() + { + if ((CL_FX)) + { + ClientEvent("update", "all", CL_FX, "effect_die"); + } + } + +} + +} diff --git a/scripts/angelscript/effects/dot_fire.as b/scripts/angelscript/effects/dot_fire.as new file mode 100644 index 00000000..9f4c3104 --- /dev/null +++ b/scripts/angelscript/effects/dot_fire.as @@ -0,0 +1,50 @@ +#pragma context server + +#include "effects/base_dot allowduplicate.as" + +namespace MS +{ + +class DotFire : CGameScript +{ + string CL_FX; + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_TYPE; + string EFFECT_ID; + string EFFECT_SCRIPT; + + DotFire() + { + EFFECT_ID = "DOT_fire"; + EFFECT_SCRIPT = currentscript; + DOT_TYPE = "fire_effect"; + DOT_IM_AFFECTED = "You are on fire!"; + DOT_IM_RESIST = "You resist the fire magic."; + DOT_HE_IMMUNE = "is immune to fire!"; + } + + void dot_start() + { + if ((CL_FX)) + { + ClientEvent("update", "all", CL_FX, "effect_die"); + } + ClientEvent("new", "all", "effects/sfx_flames", GetEntityIndex(GetOwner()), EFFECT_DURATION, GetEntityHeight(GetOwner()), 1); + CL_FX = "game.script.last_sent_id"; + Effect("glow", GetOwner(), Vector3(255, 75, 0), 72, EFFECT_DURATION, EFFECT_DURATION); + // TODO: hud.addstatusicon ent_me hud/status/alpha_dot_fire EFFECT_ID EFFECT_DURATION + } + + void effect_die() + { + if ((CL_FX)) + { + ClientEvent("update", "all", CL_FX, "effect_die"); + } + } + +} + +} diff --git a/scripts/angelscript/effects/dot_holy.as b/scripts/angelscript/effects/dot_holy.as new file mode 100644 index 00000000..5db2b4e0 --- /dev/null +++ b/scripts/angelscript/effects/dot_holy.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "effects/base_dot allowduplicate.as" + +namespace MS +{ + +class DotHoly : CGameScript +{ + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_TYPE; + string EFFECT_ID; + string EFFECT_SCRIPT; + + DotHoly() + { + EFFECT_ID = "DOT_holy"; + EFFECT_SCRIPT = currentscript; + DOT_TYPE = "holy_effect"; + DOT_IM_AFFECTED = "You are being burned by divine magics!"; + DOT_IM_RESIST = "The holy magic leaves you unharmed."; + DOT_HE_IMMUNE = "is not harmed by holy magic."; + } + + void dot_effect() + { + CallExternal(GetOwner(), "turn_undead", 0, DOT_ATTACKER); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 72, 1, 1); + EmitSound(GetOwner(), 2, "fvox/hiss.wav", 10); + Effect("screenfade", GetOwner(), 1.0, 0, Vector3(255, 255, 255), 80, "fadein"); + } + + void effect_die() + { + if (!(DOT_RESISTED)) + { + SendPlayerMessage(GetOwner(), "The holy wrath subsides."); + } + } + +} + +} diff --git a/scripts/angelscript/effects/dot_lightning.as b/scripts/angelscript/effects/dot_lightning.as new file mode 100644 index 00000000..e414ec0d --- /dev/null +++ b/scripts/angelscript/effects/dot_lightning.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "effects/base_dot allowduplicate.as" + +namespace MS +{ + +class DotLightning : CGameScript +{ + string CL_FX; + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_TYPE; + string EFFECT_ID; + string EFFECT_SCRIPT; + + DotLightning() + { + EFFECT_ID = "DOT_lightning"; + EFFECT_SCRIPT = currentscript; + DOT_TYPE = "lightning_effect"; + DOT_IM_AFFECTED = "You are being electrocuted!"; + DOT_IM_RESIST = "You resist the lightning magic's deleterious effects."; + DOT_HE_IMMUNE = "is immune to electrical attacks!"; + } + + void dot_start() + { + Effect("glow", GetEntityIndex(GetOwner()), Vector3(255, 255, 0), 72, EFFECT_DURATION, EFFECT_DURATION); + // TODO: hud.addstatusicon ent_me hud/status/alpha_dot_lightning EFFECT_ID EFFECT_DURATION + if ((IsValidPlayer(GetOwner()))) + { + if (!(GetEntityProperty(GetOwner(), "nopush"))) + { + } + if ((CL_FX)) + { + ClientEvent("update", "all", CL_FX, "effect_die"); + } + ClientEvent("new", GetOwner(), "effects/effect_lightning_drunk", EFFECT_DURATION); + CL_FX = "game.script.last_sent_id"; + } + } + + void dot_effect() + { + Effect("screenfade", GetEntityIndex(GetOwner()), 0.8, 0, Vector3(255, 255, 0), 200, "fadein"); + } + + void effect_die() + { + if ((CL_FX)) + { + ClientEvent("update", GetOwner(), CL_FX, "effect_die"); + } + } + +} + +} diff --git a/scripts/angelscript/effects/dot_lightning_cage.as b/scripts/angelscript/effects/dot_lightning_cage.as new file mode 100644 index 00000000..5c611fa4 --- /dev/null +++ b/scripts/angelscript/effects/dot_lightning_cage.as @@ -0,0 +1,90 @@ +#pragma context server + +#include "effects/dot_lightning allowduplicate.as" + +namespace MS +{ + +class DotLightningCage : CGameScript +{ + string CL_CAGE; + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_RESISTED; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string MAX_HP; + int game.effect.anim.framerate; + int game.effect.canduck; + int game.effect.canjump; + int game.effect.movespeed; + + DotLightningCage() + { + EFFECT_ID = "dot_lightning_cage"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + DOT_IM_AFFECTED = "You are held in a lightning field!"; + DOT_IM_RESIST = "You resist being held in a lightning field."; + DOT_HE_IMMUNE = "is immune to lightning magic!"; + } + + void game_activate() + { + MAX_HP = param5; + if (!(param5)) + { + MAX_HP = 1500; + } + } + + void dot_check_canapply() + { + if (GetEntityHealth(GetOwner()) > MAX_HP) + { + SendPlayerMessage(DOT_ATTACKER, GetEntityName(GetOwner()) + " is too strong for a lightning field."); + DOT_RESISTED = 1; + RemoveScript(); + return; + } + } + + void dot_start() + { + game.effect.movespeed = 0; + game.effect.canjump = 0; + game.effect.canduck = 0; + game.effect.anim.framerate = 0; + SetScriptFlags(GetOwner(), "add", "light_cage", "nopush", 1, -1, "none"); + EmitSound(GetOwner(), 0, "magic/bolt_start.wav", 10); + string L_POS = GetEntityOrigin(GetOwner()); + if (!(IsValidPlayer(GetOwner()))) + { + L_POS += "z"; + } + if ((CL_CAGE)) + { + ClientEvent("update", "all", CL_CAGE, "effect_die"); + } + ClientEvent("new", "all", "effects/sfx_lightning_cage", 60, L_POS); + CL_CAGE = "game.script.last_sent_id"; + } + + void effect_die() + { + if ((DOT_RESISTED)) return; + SendPlayerMessage(GetOwner(), "The lightning field dissipates."); + SetScriptFlags(GetOwner(), "remove", "light_cage"); + SetScriptFlags(GetOwner(), "remove", DOT_FLAG_NAME); + if ((CL_CAGE)) + { + ClientEvent("update", "all", CL_CAGE, "end_fx"); + } + EmitSound(GetOwner(), 0, "magic/energy1_loud.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/effects/dot_poison.as b/scripts/angelscript/effects/dot_poison.as new file mode 100644 index 00000000..82b110eb --- /dev/null +++ b/scripts/angelscript/effects/dot_poison.as @@ -0,0 +1,58 @@ +#pragma context server + +#include "effects/base_dot allowduplicate.as" + +namespace MS +{ + +class DotPoison : CGameScript +{ + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_TYPE; + string EFFECT_ID; + string EFFECT_SCRIPT; + + DotPoison() + { + EFFECT_ID = "DOT_poison"; + EFFECT_SCRIPT = currentscript; + DOT_TYPE = "poison_effect"; + DOT_IM_AFFECTED = "You have been poisoned!"; + DOT_IM_RESIST = "You resist the poison."; + DOT_HE_IMMUNE = "is immune to poison!"; + } + + void dot_start() + { + string DUR_RATIO = GetEntityProperty(DOT_ATTACKER, "scriptvar"); + if (DUR_RATIO != 0) + { + EFFECT_DURATION *= DUR_RATIO; + } + if ((IsValidPlayer(GetOwner()))) + { + // svplaysound: if ( $get(ent_me,isplayer) ) svplaysound game.sound.body game.sound.maxvol $get(ent_me,scriptvar,'PLR_SOUND_STOMACHHIT1') + EmitSound("game.sound.body", "game.sound.maxvol", GetEntityProperty(GetOwner(), "scriptvar")); + } + Effect("glow", GetOwner(), Vector3(75, 215, 0), 72, EFFECT_DURATION, EFFECT_DURATION); + // TODO: hud.addstatusicon ent_me hud/status/alpha_dot_poison EFFECT_ID EFFECT_DURATION + } + + void dot_effect() + { + Effect("screenfade", GetOwner(), 0.2, 0, Vector3(75, 215, 0), 30, "fadein"); + } + + void effect_die() + { + if (!(DOT_RESISTED)) + { + SendPlayerMessage(GetOwner(), "The poison subsides."); + } + } + +} + +} diff --git a/scripts/angelscript/effects/dot_poison_blind.as b/scripts/angelscript/effects/dot_poison_blind.as new file mode 100644 index 00000000..73e53761 --- /dev/null +++ b/scripts/angelscript/effects/dot_poison_blind.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "effects/dot_poison allowduplicate.as" + +namespace MS +{ + +class DotPoisonBlind : CGameScript +{ + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string EFFECT_SCRIPT; + + DotPoisonBlind() + { + EFFECT_SCRIPT = currentscript; + DOT_IM_AFFECTED = "The poison blinds you!"; + DOT_IM_RESIST = "You resist the poison."; + DOT_HE_IMMUNE = "is immune to poison!"; + } + + void dot_effect() + { + Effect("screenfade", GetOwner(), 1.5, 0.6, Vector3(0, 50, 0), 238, "fadein"); + } + + void effect_die() + { + if (!(DOT_RESISTED)) + { + SendPlayerMessage(GetOwner(), "The poison clears from your eyes."); + } + } + +} + +} diff --git a/scripts/angelscript/effects/dynamic_beam_cl.as b/scripts/angelscript/effects/dynamic_beam_cl.as new file mode 100644 index 00000000..4a71bc7c --- /dev/null +++ b/scripts/angelscript/effects/dynamic_beam_cl.as @@ -0,0 +1,93 @@ +#pragma context server + +namespace MS +{ + +class DynamicBeamCl : CGameScript +{ + string DBEAM_COLOR; + int DBEAM_ON; + string DBEAM_OWNER; + string DBEAM_TARGET; + string DBEAM_TARGET_LIST; + string DBEAM_WIDTH; + int MULTI_BEAM; + string USE_BONES; + string USE_BONE_IDX; + + void client_activate() + { + SetCallback("render", "enable"); + DBEAM_OWNER = param1; + DBEAM_COLOR = param2; + DBEAM_WIDTH = param3; + if (param4 != "PARAM4") + { + USE_BONES = 1; + USE_BONE_IDX = param4; + } + } + + void dbeam_color() + { + DBEAM_COLOR = param1; + DBEAM_WIDTH = param2; + } + + void dbeam_off() + { + DBEAM_ON = 0; + MULTI_BEAM = 0; + } + + void dbeam_on() + { + DBEAM_ON = 1; + } + + void dbeam_target() + { + DBEAM_ON = 1; + MULTI_BEAM = 0; + DBEAM_TARGET = param1; + } + + void dbeam_target_multi() + { + DBEAM_ON = 0; + DBEAM_TARGET_LIST = param1; + for (int i = 0; i < GetTokenCount(DBEAM_TARGET_LIST, ";"); i++) + { + multi_beam(); + } + } + + void game_prerender() + { + if (!(DBEAM_ON)) return; + if (!(USE_BONES)) + { + ClientEffect("beam_points", /* TODO: $getcl */ $getcl(DBEAM_OWNER, "origin"), /* TODO: $getcl */ $getcl(DBEAM_TARGET, "origin"), "lgtning.spr", 0.1, DBEAM_WIDTH, 0.1, 255, 50, 30, DBEAM_COLOR); + } + if ((USE_BONES)) + { + string CL_BEAM_START = /* TODO: $getcl */ $getcl(DBEAM_OWNER, "bonepos", USE_BONE_IDX); + ClientEffect("beam_points", CL_BEAM_START, /* TODO: $getcl */ $getcl(DBEAM_TARGET, "origin"), "lgtning.spr", 0.001, DBEAM_WIDTH, 0.1, 255, 50, 30, DBEAM_COLOR); + } + } + + void multi_beam() + { + string CUR_TARGET = GetToken(DBEAM_TARGET_LIST, i, ";"); + string CUR_TARGET_ORG = /* TODO: $getcl */ $getcl(CUR_TARGET, "origin"); + ClientEffect("beam_points", /* TODO: $getcl */ $getcl(DBEAM_OWNER, "origin"), CUR_TARGET_ORG, "lgtning.spr", 0.01, DBEAM_WIDTH, 0.1, 255, 50, 30, DBEAM_COLOR); + } + + void effect_die() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/effect_astral.as b/scripts/angelscript/effects/effect_astral.as new file mode 100644 index 00000000..19815a4a --- /dev/null +++ b/scripts/angelscript/effects/effect_astral.as @@ -0,0 +1,179 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EffectAstral : CGameScript +{ + string CL_IDX; + int EFFECT_ACTIVE; + string EFFECT_ID; + int FB_ACCEL; + int FX_ACTIVE; + float FX_DEC; + int FX_KEYINC; + int FX_MAXSPEED; + string FX_POS; + string FX_VIEWANGLES; + int RL_ACCEL; + string game.cleffect.view_ofs.x; + string game.cleffect.view_ofs.y; + string game.cleffect.view_ofs.z; + int game.effect.canattack; + int game.effect.canduck; + int game.effect.canjump; + float game.effect.movespeed; + + EffectAstral() + { + EFFECT_ID = "astral_project"; + FX_MAXSPEED = 30; + FX_KEYINC = 1; + FX_DEC = 0.1; + } + + void game_activate() + { + game.effect.movespeed = 0.0; + game.effect.canjump = 0; + game.effect.canduck = 0; + game.effect.canattack = 0; + ShowHelpTip(GetOwner(), "generic", "Astral Projection", "Right click to stop drifting.|Left click to return to your body."); + ClientCommand(GetOwner(), "thirdperson"); + EFFECT_ACTIVE = 1; + ClientEvent("new", GetOwner(), currentscript, GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "viewangles")); + CL_IDX = "game.script.last_sent_id"; + key_loop(); + } + + void OnDamage(int damage) override + { + effect_die(); + } + + void key_loop() + { + if (!(EFFECT_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "key_loop"); + if ((IsKeyDown(GetOwner(), "attack1"))) + { + effect_die(); + } + else + { + ClientEvent("update", GetOwner(), CL_IDX, "key_status", IsKeyDown(GetOwner(), "forward"), IsKeyDown(GetOwner(), "back"), IsKeyDown(GetOwner(), "moveleft"), IsKeyDown(GetOwner(), "moveright"), GetEntityProperty(GetOwner(), "viewangles"), IsKeyDown(GetOwner(), "attack2")); + } + } + + void effect_die() + { + ClientCommand(GetOwner(), "thirdperson"); + EFFECT_ACTIVE = 0; + ClientEvent("update", GetOwner(), CL_IDX, "remove_fx"); + RemoveScript(); + } + + void client_activate() + { + string L_FX_OWNERPOS = /* TODO: $getcl */ $getcl(param1, "origin"); + float L_ZDIST = Distance(L_FX_OWNERPOS, Vector3(0, 0, 0)); + string L_ZDIR = (Vector3(0, 0, 0) - L_FX_OWNERPOS).Normalize(); + FX_POS = L_FX_OWNERPOS; + L_ZDIR *= L_ZDIST; + FX_POS += L_ZDIR; + FX_VIEWANGLES = param2; + FX_POS += /* TODO: $relpos */ $relpos(FX_VIEWANGLES, Vector3(0, 64, 16)); + LogDebug("$currentscript startpos PARAM1 FX_POS"); + game.cleffect.view_ofs.x = (FX_POS).x; + game.cleffect.view_ofs.y = (FX_POS).y; + game.cleffect.view_ofs.z = (FX_POS).z; + FX_ACTIVE = 1; + FB_ACCEL = 0; + RL_ACCEL = 0; + view_loop(); + } + + void key_status() + { + string L_KEY_FORWARD = param1; + string L_KEY_BACKWARD = param2; + string L_KEY_LEFT = param3; + string L_KEY_RIGHT = param4; + FX_VIEWANGLES = param5; + if ((L_KEY_FORWARD)) + { + FB_ACCEL += FX_KEYINC; + } + if ((L_KEY_BACKWARD)) + { + FB_ACCEL += /* TODO: $neg */ $neg(FX_KEYINC); + } + if ((L_KEY_RIGHT)) + { + RL_ACCEL += FX_KEYINC; + } + if ((L_KEY_LEFT)) + { + RL_ACCEL += /* TODO: $neg */ $neg(FX_KEYINC); + } + if ((param6)) + { + FB_ACCEL = 0; + RL_ACCEL = 0; + } + LogDebug("$currentscript key_status f L_KEY_FORWARD b L_KEY_BACKWARD l L_KEY_LEFT r L_KEY_RIGHT fb FB_ACCEL rl RL_ACCEL c PARAM6"); + } + + void remove_fx() + { + FX_ACTIVE = 0; + RemoveScript(); + } + + void view_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.01, "view_loop"); + if (FB_ACCEL >= FX_DEC) + { + FB_ACCEL -= FX_DEC; + } + if (FB_ACCEL <= /* TODO: $neg */ $neg(FX_DEC)) + { + FB_ACCEL += FX_DEC; + } + if (RL_ACCEL >= FX_DEC) + { + RL_ACCEL -= FX_DEC; + } + if (RL_ACCEL <= /* TODO: $neg */ $neg(FX_DEC)) + { + RL_ACCEL += FX_DEC; + } + if (FB_ACCEL > FX_MAXSPEED) + { + FB_ACCEL = FX_MAXSPEED; + } + if (FB_ACCEL < /* TODO: $neg */ $neg(FX_MAXSPEED)) + { + FB_ACCEL = /* TODO: $neg */ $neg(FX_MAXSPEED); + } + if (RL_ACCEL > FX_MAXSPEED) + { + RL_ACCEL = FX_MAXSPEED; + } + if (RL_ACCEL < /* TODO: $neg */ $neg(FX_MAXSPEED)) + { + RL_ACCEL = /* TODO: $neg */ $neg(FX_MAXSPEED); + } + FX_POS += /* TODO: $relpos */ $relpos(FX_VIEWANGLES, Vector3(RL_ACCEL, FB_ACCEL, 0)); + game.cleffect.view_ofs.x = (FX_POS).x; + game.cleffect.view_ofs.y = (FX_POS).y; + game.cleffect.view_ofs.z = (FX_POS).z; + } + +} + +} diff --git a/scripts/angelscript/effects/effect_beam_box.as b/scripts/angelscript/effects/effect_beam_box.as new file mode 100644 index 00000000..c6ad7642 --- /dev/null +++ b/scripts/angelscript/effects/effect_beam_box.as @@ -0,0 +1,130 @@ +#pragma context client + +namespace MS +{ + +class EffectBeamBox : CGameScript +{ + string BEAM_TIME; + int BOX_AMPLITUDE; + int BOX_BRIGHTNESS; + string BOX_COLOR; + int BOX_FRAMRATE; + string BOX_HALF_SIZE; + string BOX_ORIGIN; + string BOX_SIZE; + string BOX_SPRITE; + int BOX_WIDTH; + string POINT_10_1; + string POINT_10_2; + string POINT_11_1; + string POINT_11_2; + string POINT_12_1; + string POINT_12_2; + string POINT_1_1; + string POINT_1_2; + string POINT_2_1; + string POINT_2_2; + string POINT_3_1; + string POINT_3_2; + string POINT_4_1; + string POINT_4_2; + string POINT_5_1; + string POINT_5_2; + string POINT_6_1; + string POINT_6_2; + string POINT_7_1; + string POINT_7_2; + string POINT_8_1; + string POINT_8_2; + string POINT_9_1; + string POINT_9_2; + string START_MOVING_TO; + + EffectBeamBox() + { + BOX_COLOR = /* TODO: $clcol */ $clcol(186, 85, 211); + BOX_WIDTH = 1; + BOX_AMPLITUDE = 0; + BOX_FRAMRATE = 0; + BOX_BRIGHTNESS = 1; + BOX_SPRITE = "rain.spr"; + } + + void client_activate() + { + BOX_ORIGIN = param1; + BOX_SIZE = (param2 * 2); + BOX_HALF_SIZE = param2; + if ((param3).findFirst("PARAM") == 0) + { + BEAM_TIME = 1.0; + } + else + { + BEAM_TIME = param3; + } + BEAM_TIME("effect_die"); + START_MOVING_TO = BOX_ORIGIN; + START_MOVING_TO += /* TODO: $relpos */ $relpos(Vector3(90, 0, 0), Vector3(0, BOX_HALF_SIZE, 0)); + START_MOVING_TO += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, BOX_HALF_SIZE, 0)); + START_MOVING_TO += /* TODO: $relpos */ $relpos(Vector3(0, 90, 0), Vector3(0, BOX_HALF_SIZE, 0)); + POINT_1_1 = START_MOVING_TO; + START_MOVING_TO += /* TODO: $relpos */ $relpos(Vector3(0, 180, 0), Vector3(0, BOX_SIZE, 0)); + POINT_1_2 = START_MOVING_TO; + POINT_2_1 = START_MOVING_TO; + START_MOVING_TO += /* TODO: $relpos */ $relpos(Vector3(0, 270, 0), Vector3(0, BOX_SIZE, 0)); + POINT_2_2 = START_MOVING_TO; + POINT_3_1 = START_MOVING_TO; + START_MOVING_TO += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, BOX_SIZE, 0)); + POINT_3_2 = START_MOVING_TO; + POINT_4_1 = START_MOVING_TO; + POINT_4_2 = POINT_1_1; + START_MOVING_TO += /* TODO: $relpos */ $relpos(Vector3(-90, 0, 0), Vector3(0, BOX_SIZE, 0)); + POINT_5_1 = START_MOVING_TO; + START_MOVING_TO += /* TODO: $relpos */ $relpos(Vector3(0, 90, 0), Vector3(0, BOX_SIZE, 0)); + POINT_5_2 = START_MOVING_TO; + POINT_6_1 = START_MOVING_TO; + START_MOVING_TO += /* TODO: $relpos */ $relpos(Vector3(0, 180, 0), Vector3(0, BOX_SIZE, 0)); + POINT_6_2 = START_MOVING_TO; + POINT_7_1 = START_MOVING_TO; + START_MOVING_TO += /* TODO: $relpos */ $relpos(Vector3(0, 270, 0), Vector3(0, BOX_SIZE, 0)); + POINT_7_2 = START_MOVING_TO; + POINT_8_1 = START_MOVING_TO; + POINT_8_2 = POINT_5_1; + POINT_9_1 = POINT_4_1; + POINT_9_2 = POINT_5_1; + POINT_10_1 = POINT_1_1; + POINT_10_2 = POINT_5_2; + POINT_11_1 = POINT_2_1; + POINT_11_2 = POINT_6_2; + POINT_12_1 = POINT_2_2; + POINT_12_2 = POINT_7_2; + do_the_beam_thing(); + BEAM_TIME("effect_die"); + } + + void do_the_beam_thing() + { + ClientEffect("beam_points", POINT_1_1, POINT_1_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_2_1, POINT_2_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_3_1, POINT_3_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_4_1, POINT_4_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_5_1, POINT_5_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_6_1, POINT_6_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_7_1, POINT_7_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_8_1, POINT_8_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_9_1, POINT_9_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_10_1, POINT_10_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_11_1, POINT_11_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + ClientEffect("beam_points", POINT_12_1, POINT_12_2, BOX_SPRITE, BEAM_TIME, BOX_WIDTH, BOX_AMPLITUDE, BOX_BRIGHTNESS, BOX_FRAMRATE, BOX_FRAMRATE, BOX_COLOR); + } + + void effect_die() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/effect_lightning_drunk.as b/scripts/angelscript/effects/effect_lightning_drunk.as new file mode 100644 index 00000000..7ac38f5d --- /dev/null +++ b/scripts/angelscript/effects/effect_lightning_drunk.as @@ -0,0 +1,90 @@ +#pragma context client + +namespace MS +{ + +class EffectLightningDrunk : CGameScript +{ + string EFFECT_DURATION; + int MAX_SWAY; + float MAX_SWAY_AMT; + int MAX_SWAY_RATE; + int MAX_SWAY_T; + int MIN_SWAY; + float MIN_SWAY_AMT; + int MIN_SWAY_RATE; + int MIN_SWAY_T; + string game.cleffect.move_ofs.forward; + string game.cleffect.move_ofs.right; + string game.cleffect.view_ofs.pitch; + string game.cleffect.view_ofs.roll; + + EffectLightningDrunk() + { + MAX_SWAY = 10; + MIN_SWAY = -10; + MAX_SWAY_T = 5; + MIN_SWAY_T = -5; + MAX_SWAY_RATE = 5; + MIN_SWAY_RATE = -5; + MAX_SWAY_AMT = 0.2; + MIN_SWAY_AMT = -0.2; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.3); + drunk_sway(); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.01); + DRUNK_SWAY_FORWARD++; + DRUNK_SWAY_FORWARD = max(MIN_SWAY, min(MAX_SWAY, DRUNK_SWAY_FORWARD)); + game.cleffect.view_ofs.pitch = DRUNK_SWAY_FORWARD; + DRUNK_SWAY_SIDE++; + DRUNK_SWAY_SIDE = max(MIN_SWAY, min(MAX_SWAY, DRUNK_SWAY_SIDE)); + game.cleffect.view_ofs.roll = DRUNK_SWAY_SIDE; + game.cleffect.move_ofs.forward = DRUNK_FORWARDMOVE; + game.cleffect.move_ofs.right = DRUNK_SIDEMOVE; + } + + void client_activate() + { + EFFECT_DURATION = param1; + PARAM1("effect_die"); + } + + void effect_die() + { + RemoveScript(); + } + + void drunk_sway() + { + DRUNK_SWAY_RATE++; + DRUNK_SWAY_RATE = max(MIN_SWAY_RATE, min(MAX_SWAY_RATE, DRUNK_SWAY_RATE)); + if (DRUNK_SWAY_SIDE >= MAX_SWAY_T) + { + DRUNK_SWAY_RATE--; + } + if (DRUNK_SWAY_SIDE <= MIN_SWAY_T) + { + DRUNK_SWAY_RATE++; + } + DRUNK_SWAY_RATE_F++; + DRUNK_SWAY_RATE_F = max(MIN_SWAY_RATE, min(MAX_SWAY_RATE, DRUNK_SWAY_RATE_F)); + if (DRUNK_SWAY_FORWARD >= MAX_SWAY_T) + { + DRUNK_SWAY_RATE_F--; + } + if (DRUNK_SWAY_FORWARD <= MIN_SWAY_T) + { + DRUNK_SWAY_RATE_F++; + } + } + +} + +} diff --git a/scripts/angelscript/effects/effect_nojump.as b/scripts/angelscript/effects/effect_nojump.as new file mode 100644 index 00000000..84892524 --- /dev/null +++ b/scripts/angelscript/effects/effect_nojump.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EffectNojump : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + int game.effect.canjump; + + EffectNojump() + { + EFFECT_ID = "effect_nojump"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + game.effect.canjump = 0; + } + +} + +} diff --git a/scripts/angelscript/effects/effect_push.as b/scripts/angelscript/effects/effect_push.as new file mode 100644 index 00000000..a6fa772d --- /dev/null +++ b/scripts/angelscript/effects/effect_push.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EffectPush : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string local.effect.duration; + string local.effect.force; + string local.effect.scrnshake; + + EffectPush() + { + EFFECT_ID = "effect_push"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + if ((GetEntityProperty(GetOwner(), "nopush"))) return; + if (!(/* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "stun"))) return; + local.effect.duration = param1; + local.effect.force = param2; + local.effect.scrnshake = param3; + AddVelocity(GetOwner(), local.effect.force); + if ((local.effect.scrnshake)) + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 64, 15, 1, 1); + } + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/effect_quake.as b/scripts/angelscript/effects/effect_quake.as new file mode 100644 index 00000000..8d28a52e --- /dev/null +++ b/scripts/angelscript/effects/effect_quake.as @@ -0,0 +1,116 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EffectQuake : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + int QUAKE_ACTIVE; + string QUAKE_AOE; + string QUAKE_DMG; + string QUAKE_DMGSRC; + string QUAKE_FALLOFF; + string QUAKE_MOBILE; + string QUAKE_ORIGIN; + string QUAKE_SKILL; + float game.effect.anim.framerate; + int game.effect.canjump; + float game.effect.movespeed; + + EffectQuake() + { + EFFECT_ID = "DOT_quake"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + QUAKE_DMGSRC = param2; + QUAKE_AOE = param3; + QUAKE_DMG = param4; + QUAKE_ORIGIN = param5; + QUAKE_FALLOFF = param6; + if ((IsEntityAlive(QUAKE_ORIGIN))) + { + QUAKE_MOBILE = 1; + } + QUAKE_SKILL = "none"; + if ((IsValidPlayer(QUAKE_ORIGIN))) + { + QUAKE_SKILL = "spellcasting.earth"; + } + game.effect.canjump = 0; + game.effect.movespeed = 0.1; + game.effect.anim.framerate = 0.1; + string L_SHAKE_AOE = QUAKE_AOE; + L_SHAKE_AOE *= 1.5; + if ((IsValidPlayer(GetOwner()))) + { + SendPlayerMessage("You", "are caught in a quake!"); + } + QUAKE_ACTIVE = 1; + quake_loop(); + } + + void quake_loop() + { + if (!(QUAKE_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "quake_loop"); + if ((QUAKE_MOBILE)) + { + string L_QPOS = GetEntityOrigin(QUAKE_ORIGIN); + } + else + { + string L_QPOS = QUAKE_ORIGIN; + } + string L_MY_POS = GetEntityOrigin(GetOwner()); + float L_QUAKE_DIST = Distance(L_QPOS, L_MY_POS); + if ((QUAKE_FALLOFF)) + { + int L_DIST_RATIO = 1; + L_DIST_RATIO -= (L_QUAKE_DIST / QUAKE_AOE); + } + if (L_QUAKE_DIST <= QUAKE_AOE) + { + if (QUAKE_DMG > 0) + { + string L_DMG = QUAKE_DMG; + if ((QUAKE_FALLOFF)) + { + string L_DMG = /* TODO: $ratio */ $ratio(L_DIST_RATIO, 1, QUAKE_DMG); + L_DMG *= 2; + if ((IsValidPlayer(GetOwner()))) + { + if ((GetEntityProperty(GetOwner(), "nopush"))) + { + } + L_DMG *= 5; + } + } + XDoDamage(GetOwner(), "direct", L_DMG, 1.0, QUAKE_DMGSRC, QUAKE_DMGSRC, QUAKE_SKILL, "blunt_effect"); + } + float L_SLOW = 0.3; + if ((QUAKE_FALLOFF)) + { + string L_SLOW = /* TODO: $ratio */ $ratio(L_DIST_RATIO, 0.9, 0.1); + } + game.effect.movespeed = (100 * L_SLOW); + game.effect.anim.framerate = L_SLOW; + } + else + { + game.effect.movespeed = 100; + game.effect.anim.framerate = 1.0; + } + } + +} + +} diff --git a/scripts/angelscript/effects/effect_rejuv2.as b/scripts/angelscript/effects/effect_rejuv2.as new file mode 100644 index 00000000..5273b2b0 --- /dev/null +++ b/scripts/angelscript/effects/effect_rejuv2.as @@ -0,0 +1,60 @@ +#pragma context server + +#include "effects/base_effect.as" + +namespace MS +{ + +class EffectRejuv2 : CGameScript +{ + string EFFECT_ID; + string EFFECT_SCRIPT; + + EffectRejuv2() + { + EFFECT_ID = "effect_rejuvenate"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + string HEAL_AMT = param2; + string CASTER_ID = param3; + string MY_ID = GetEntityIndex(GetOwner()); + string MY_MAX_HEALTH = GetEntityMaxHealth(MY_ID); + string MY_CUR_HEALTH = GetEntityHealth(MY_ID); + if (MY_ID != CASTER_ID) + { + int HEALING_OTHER = 1; + } + if (MY_CUR_HEALTH < MY_MAX_HEALTH) + { + HealEntity(GetOwner(), HEAL_AMT); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 256, 1, 1); + if ((HEALING_OTHER)) + { + SendColoredMessage(CASTER_ID, "You heal " + GetEntityName(MY_ID) + "for " + HEAL_AMT + " hp"); + SendColoredMessage(MY_ID, GetEntityName(CASTER_ID) + "heals you for " + HEAL_AMT + " hp"); + } + else + { + SendColoredMessage(CASTER_ID, "You heal yourself for " + HEAL_AMT + " hp"); + } + } + else + { + if ((HEALING_OTHER)) + { + SendColoredMessage(CASTER_ID, GetEntityName(MY_ID) + " is at maximum health"); + } + else + { + SendColoredMessage(MY_ID, "You are at maximum health"); + } + } + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/effect_shardshield.as b/scripts/angelscript/effects/effect_shardshield.as new file mode 100644 index 00000000..26e40069 --- /dev/null +++ b/scripts/angelscript/effects/effect_shardshield.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "effects/base_effect.as" + +namespace MS +{ + +class EffectShardshield : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + float game.effect.anim.framerate; + int game.effect.canattack; + int game.effect.canjump; + int game.effect.movespeed; + string local.effect.damage; + + EffectShardshield() + { + EFFECT_ID = "effect_shardshield"; + EFFECT_FLAGS = "nostack"; + } + + void game_activate() + { + local.effect.damage = param2; + game.effect.movespeed = 90; + game.effect.canjump = 0; + game.effect.anim.framerate = 0.9; + game.effect.canattack = 0; + Effect("glow", GetOwner(), Vector3(255, 192, 128), 72, EFFECT_DURATION, EFFECT_DURATION); + EmitSound(GetOwner(), "game.sound.item", "magic/cast.wav", "game.sound.maxvol"); + SendColoredMessage(GetEntityIndex(GetOwner()), "You are protected by divine shield."); + } + + void OnDamage(int damage) override + { + EmitSound(GetOwner(), 2, "magic/converted_magic13.wav", 5); + Effect("screenfade", GetOwner(), 0.5, 0, Vector3(255, 192, 128), 40, "fadein"); + return; + } + + void effect_die() + { + EmitSound(GetOwner(), 2, "magic/frost_reverse.wav", 5); + SendPlayerMessage(GetOwner(), "The divine shield fades."); + } + +} + +} diff --git a/scripts/angelscript/effects/effect_slow.as b/scripts/angelscript/effects/effect_slow.as new file mode 100644 index 00000000..35d7e1fc --- /dev/null +++ b/scripts/angelscript/effects/effect_slow.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EffectSlow : CGameScript +{ + string EFFECT_ID; + string EFFECT_SCRIPT; + string game.effect.anim.framerate; + int game.effect.canjump; + string game.effect.movespeed; + + EffectSlow() + { + EFFECT_ID = "slow"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + game.effect.movespeed = param2; + game.effect.canjump = 0; + game.effect.anim.framerate = (param2 / 100); + SendPlayerMessage(GetOwner(), "You are being slowed."); + } + +} + +} diff --git a/scripts/angelscript/effects/effect_spiderlatch.as b/scripts/angelscript/effects/effect_spiderlatch.as new file mode 100644 index 00000000..409af654 --- /dev/null +++ b/scripts/angelscript/effects/effect_spiderlatch.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EffectSpiderlatch : CGameScript +{ + string EFFECT_ID; + string EFFECT_SCRIPT; + float game.effect.anim.framerate; + int game.effect.canduck; + int game.effect.canjump; + int game.effect.movespeed; + + EffectSpiderlatch() + { + EFFECT_ID = "effect_spiderlatch"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + ApplyEffect(GetOwner(), "effects/dot_poison", param1, param2, param3, "none"); + game.effect.canjump = 0; + game.effect.canduck = 0; + game.effect.movespeed = 90; + game.effect.anim.framerate = 0.9; + } + +} + +} diff --git a/scripts/angelscript/effects/effect_stamina_regen.as b/scripts/angelscript/effects/effect_stamina_regen.as new file mode 100644 index 00000000..b47d052c --- /dev/null +++ b/scripts/angelscript/effects/effect_stamina_regen.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EffectStaminaRegen : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + + EffectStaminaRegen() + { + EFFECT_ID = "effect_stamina"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + stamina_loop(); + } + + void stamina_loop() + { + DrainStamina(GetOwner()); + ScheduleDelayedEvent(1.0, "stamina_loop"); + } + +} + +} diff --git a/scripts/angelscript/effects/effect_stop.as b/scripts/angelscript/effects/effect_stop.as new file mode 100644 index 00000000..54f352e8 --- /dev/null +++ b/scripts/angelscript/effects/effect_stop.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EffectStop : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + int game.effect.anim.framerate; + int game.effect.canjump; + int game.effect.movespeed; + + EffectStop() + { + EFFECT_ID = "effect_stop"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + game.effect.movespeed = 0; + game.effect.canjump = 0; + game.effect.anim.framerate = 0; + SendPlayerMessage(GetOwner(), "You have been suspended in time!"); + } + +} + +} diff --git a/scripts/angelscript/effects/effect_templock.as b/scripts/angelscript/effects/effect_templock.as new file mode 100644 index 00000000..8bc9a520 --- /dev/null +++ b/scripts/angelscript/effects/effect_templock.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EffectTemplock : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + int game.effect.canattack; + + EffectTemplock() + { + EFFECT_ID = "effect_lock"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + game.effect.canattack = 0; + } + + void ext_end_templock() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/effect_tempnomove.as b/scripts/angelscript/effects/effect_tempnomove.as new file mode 100644 index 00000000..c6b55570 --- /dev/null +++ b/scripts/angelscript/effects/effect_tempnomove.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EffectTempnomove : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + int game.effect.canjump; + int game.effect.canmove; + int game.effect.movespeed; + + EffectTempnomove() + { + EFFECT_ID = "effect_tempnomove"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + game.effect.movespeed = 0; + game.effect.canmove = 0; + game.effect.canjump = 0; + } + + void ext_end_tempnomove() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/gauntlet_invalid.as b/scripts/angelscript/effects/gauntlet_invalid.as new file mode 100644 index 00000000..8d265199 --- /dev/null +++ b/scripts/angelscript/effects/gauntlet_invalid.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class GauntletInvalid : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + float game.effect.anim.framerate; + int game.effect.canattack; + int game.effect.canjump; + float game.effect.movespeed; + int game.effect.removeondeath; + + GauntletInvalid() + { + EFFECT_ID = "effect_stun"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + game.effect.removeondeath = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(5.0); + Effect("screenfade", GetOwner(), 0.1, "local.effect.duration", Vector3(10, 10, 10), 255, "noblend"); + } + + void game_activate() + { + game.effect.movespeed = 0.01; + game.effect.canjump = 0; + game.effect.anim.framerate = 0.01; + game.effect.canattack = 0; + } + +} + +} diff --git a/scripts/angelscript/effects/gib_explode.as b/scripts/angelscript/effects/gib_explode.as new file mode 100644 index 00000000..154c4ba9 --- /dev/null +++ b/scripts/angelscript/effects/gib_explode.as @@ -0,0 +1,76 @@ +#pragma context server + +namespace MS +{ + +class GibExplode : CGameScript +{ + int EXPLODE_RADIUS; + string FX_BLOOD_COLOR; + string FX_DAMAGE; + string FX_OWNER; + string FX_SKILL; + string GIB_INFLICTER; + + GibExplode() + { + GIB_INFLICTER = GetEntityIndex(GetOwner()); + EXPLODE_RADIUS = 200; + } + + void OnSpawn() override + { + SetInvincible(true); + SetRace("beloved"); + SetGravity(0.75); + SetHeight(10); + SetWidth(10); + SetProp(GetOwner(), "movetype", 10); + SetProp(GetOwner(), "friction", 0.4); + SetProp(GetOwner(), "solid", 0); + SetAngles("face"); + } + + void game_dynamically_created() + { + FX_OWNER = param1; + SetVelocity(GetOwner(), param2); + FX_DAMAGE = param3; + FX_SKILL = param4; + FX_BLOOD_COLOR = param5; + if (FX_BLOOD_COLOR == "green") + { + SetModel("agibs.mdl"); + SetModelBody(0, RandomInt(0, 3)); + } + else + { + SetModel(GetRandomToken("gib_b_bone.mdl;gib_b_gib.mdl;gib_lung.mdl;gib_legbone.mdl", ";")); + } + Random(1_0, 2_4)("stop_bounce"); + Random(2_5, 3_5)("explode"); + } + + void explode() + { + string L_SOUND = "leech/leech_bite"; + EmitSound(GetOwner(), 0, L_SOUND, 10); + XDoDamage(GetEntityOrigin(GetOwner()), EXPLODE_RADIUS, FX_DAMAGE, 0, FX_OWNER, GIB_INFLICTER, FX_SKILL, "dark", "dmgevent:*gib"); + ClientEvent("new", "all", "effects/swords_gb/sfx_gib_explode", GetEntityOrigin(GetOwner()), FX_BLOOD_COLOR); + SetModel("null.mdl"); + ScheduleDelayedEvent(0.1, "remove_fx"); + } + + void remove_fx() + { + DeleteEntity(GetOwner()); + } + + void stop_bounce() + { + SetProp(GetOwner(), "movetype", 13); + } + +} + +} diff --git a/scripts/angelscript/effects/goblin_latch.as b/scripts/angelscript/effects/goblin_latch.as new file mode 100644 index 00000000..12e3a141 --- /dev/null +++ b/scripts/angelscript/effects/goblin_latch.as @@ -0,0 +1,70 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class GoblinLatch : CGameScript +{ + string CL_FX; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string GOBLIN_ID; + int game.effect.movespeed; + + GoblinLatch() + { + EFFECT_ID = "goblin_latch"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + GOBLIN_ID = param2; + game.effect.movespeed = 90; + if ((IsValidPlayer(GetOwner()))) + { + ClientEvent("new", GetOwner(), "effects/sfx_drunk", EFFECT_DURATION); + CL_FX = "game.script.last_sent_id"; + } + } + + void OnDamage(int damage) override + { + if (!(GetRelationship(param1) == "enemy")) return; + string L_ACTIVE_SKILL = "none"; + if ((IsValidPlayer(param1))) + { + string L_ACTIVE_SKILL = param5; + } + XDoDamage(GOBLIN_ID, "direct", param2, param4, param1, param1, L_ACTIVE_SKILL, param3); + } + + void game_applyeffect() + { + if (!((param3).findFirst("dot_") >= 0)) return; + string L_RETURN = "redirect"; + if (L_RETURN.length() > 0) L_RETURN += ";"; + L_RETURN += GOBLIN_ID; + return; + } + + void effect_die() + { + if ((CL_FX)) + { + ClientEvent("update", GetOwner(), CL_FX, "effect_die"); + } + } + + void ext_goblin_died() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/iceshield.as b/scripts/angelscript/effects/iceshield.as new file mode 100644 index 00000000..96f19b0c --- /dev/null +++ b/scripts/angelscript/effects/iceshield.as @@ -0,0 +1,112 @@ +#pragma context server + +#include "effects/base_effect.as" + +namespace MS +{ + +class Iceshield : CGameScript +{ + string DAMAGE_MULTIPLIER; + string EFFECT_DURATION; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string LAST_SHIELDER; + + Iceshield() + { + EFFECT_ID = "iceshield"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + LAST_SHIELDER = param2; + DAMAGE_MULTIPLIER = param3; + shield_me_baby(); + SendColoredMessage(GetOwner(), "You are protected by a shield of ice."); + SendColoredMessage(GetOwner(), "Ice shield " + int(EFFECT_DURATION) + " seconds remain."); + if (LAST_SHIELDER != GetEntityIndex(GetOwner())) + { + SendColoredMessage(LAST_SHIELDER, "You shield " + GetEntityName(GetOwner()) + "for " + EFFECT_DURATION + " seconds."); + } + check_do_bonus(EFFECT_DURATION); + } + + void ext_refresh_ice_shield() + { + if (param1 > EFFECT_DURATION) + { + EFFECT_DURATION = param1; + } + LAST_SHIELDER = param2; + effect_get_timeleft(); + string L_TIME_DIFF = (EFFECT_DURATION - EFFECT_TIMELEFT); + effect_set_duration(EFFECT_DURATION); + shield_me_baby(); + if (LAST_SHIELDER != GetEntityIndex(GetOwner())) + { + if ((IsValidPlayer(GetOwner()))) + { + SendColoredMessage(GetOwner(), GetEntityName(LAST_SHIELDER) + " has protected you with a shield of ice."); + SendColoredMessage(GetOwner(), "Added " + int(L_TIME_DIFF) + " seconds to Ice Shield."); + } + SendColoredMessage(LAST_SHIELDER, "You shield " + GetEntityName(GetOwner()) + "for " + int(L_TIME_DIFF) + " more seconds."); + } + else + { + SendColoredMessage(GetOwner(), "Added " + int(L_TIME_DIFF) + " seconds to Ice Shield."); + } + check_do_bonus(L_TIME_DIFF); + } + + void shield_me_baby() + { + // TODO: hud.addstatusicon ent_me hud/status/alpha_iceshield iceshield EFFECT_DURATION + Effect("glow", GetEntityIndex(GetOwner()), Vector3(0, 0, 192), 72, EFFECT_DURATION, EFFECT_DURATION); + EmitSound(GetOwner(), "game.sound.item", "magic/heal_strike.wav", "game.sound.maxvol"); + } + + void check_do_bonus() + { + string L_TIME_DIFF = param1; + if (LAST_SHIELDER != GetEntityIndex(GetOwner())) + { + if ((IsValidPlayer(GetOwner()))) + { + int ADD_BONUS = 1; + } + } + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + int ADD_BONUS = 1; + } + if (!(ADD_BONUS)) return; + string L_BONUS_MSG = "for shielding "; + L_BONUS_MSG += GetEntityName(GetOwner()); + string L_DMGPOINT_ADD = ((L_TIME_DIFF / 412) * 1000); + CallExternal(LAST_SHIELDER, "ext_dmgpoint_bonus", L_DMGPOINT_ADD, L_BONUS_MSG); + } + + void OnDamage(int damage) override + { + if (!(param2 > 0)) return; + Effect("screenfade", GetOwner(), 0.5, 0, Vector3(0, 0, 192), 40, "fadein"); + EmitSound(GetOwner(), 0, "player/pl_metal2.wav", 3); + return; + } + + void effect_die() + { + // TODO: hud.killstatusicon ent_me iceshield + // svplaysound: svplaysound 0 2 "debris/bustglass2.wav" + EmitSound(0, 2, "debris/bustglass2.wav"); + Effect("tempent", "trail", "blueflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 40), 10, 2, 5, 10, 20); + SendColoredMessage(GetEntityIndex(GetOwner()), "Your ice shield has collapsed!"); + } + +} + +} diff --git a/scripts/angelscript/effects/lightning_disc.as b/scripts/angelscript/effects/lightning_disc.as new file mode 100644 index 00000000..3ae740eb --- /dev/null +++ b/scripts/angelscript/effects/lightning_disc.as @@ -0,0 +1,91 @@ +#pragma context server + +namespace MS +{ + +class LightningDisc : CGameScript +{ + string FX_DMG; + string FX_OWNER; + string FX_SKILL; + string FX_VELOCITY; + float FX_WOBBLE_MULT; + string FX_WOBBLE_SEQ; + string MY_LIGHT_SCRIPT; + int SEQ_IDX; + + void OnRepeatTimer() + { + SetRepeatDelay(0.2); + XDoDamage(GetEntityOrigin(GetOwner()), 120, FX_DMG, 0, FX_OWNER, GetOwner(), FX_SKILL, "lightning_effect", "dmgevent:*disc"); + } + + void OnSpawn() override + { + SetName("laserdisc"); + SetModel("weapons/magic/seals.mdl"); + SetModelBody(0, 31); + SetProp(GetOwner(), "movetype", 11); + SetProp(GetOwner(), "friction", 0.1); + SetProp(GetOwner(), "scale", 10); + SetProp(GetOwner(), "solid", 0); + SetWidth(5); + SetHeight(1); + SetInvincible(true); + SetRace("beloved"); + ScheduleDelayedEvent(10.0, "fx_die"); + ClientEvent("persist", "all", "monsters/lighted_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 40), 96); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + SetMonsterClip(0); + } + + void game_dynamically_created() + { + FX_OWNER = param1; + FX_VELOCITY = param2; + FX_DMG = param3; + FX_SKILL = param4; + FX_WOBBLE_SEQ = "0;1;2;3;2;1;0;-1;-2;-3;-2;-1"; + SEQ_IDX = 0; + FX_WOBBLE_MULT = 0.07; + ScheduleDelayedEvent(0.05, "wobble"); + SetVelocity(GetOwner(), FX_VELOCITY); + // svplaysound: svplaysound 3 4 ambient/alien_frantic.wav + EmitSound(3, 4, "ambient/alien_frantic.wav"); + } + + void disc_dodamage() + { + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_lightning", 5, FX_OWNER, GetSkillLevel(FX_OWNER, "spellcasting.lightning"), "spellcasting.lightning"); + } + + void wobble() + { + string L_IDX = GetToken(FX_WOBBLE_SEQ, SEQ_IDX, ";"); + SEQ_IDX += 1; + if (SEQ_IDX >= GetTokenCount(FX_WOBBLE_SEQ, ";")) + { + SEQ_IDX = 0; + } + string L_ANG = GetEntityAngles(GetOwner()); + L_ANG += Vector3((L_IDX * FX_WOBBLE_MULT), 7, 0); + SetAngles("face"); + FX_WOBBLE_MULT += 0.03; + ScheduleDelayedEvent(0.05, "wobble"); + } + + void fx_die() + { + ClientEvent("new", "all", "effects/sfx_prism_blast", GetEntityOrigin(GetOwner()), 100, "lightning"); + // svplaysound: svplaysound 3 10 magic/bolt_end.wav + EmitSound(3, 10, "magic/bolt_end.wav"); + SetModel("none"); + DeleteEntity(GetOwner()); + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + ClientEvent("update", "all", MY_LIGHT_SCRIPT, "remove_me"); + } + +} + +} diff --git a/scripts/angelscript/effects/make_light.as b/scripts/angelscript/effects/make_light.as new file mode 100644 index 00000000..e1c08043 --- /dev/null +++ b/scripts/angelscript/effects/make_light.as @@ -0,0 +1,26 @@ +#pragma context client + +namespace MS +{ + +class MakeLight : CGameScript +{ + void client_activate() + { + string L_POS = param1; + string L_RAD = param2; + string L_COL = param3; + string L_DUR = param4; + ClientEffect("light", "new", L_POS, L_RAD, L_COL, L_DUR); + L_DUR += 0.1; + L_DUR("remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/manaring_portals.as b/scripts/angelscript/effects/manaring_portals.as new file mode 100644 index 00000000..5d8ad506 --- /dev/null +++ b/scripts/angelscript/effects/manaring_portals.as @@ -0,0 +1,105 @@ +#pragma context client + +namespace MS +{ + +class ManaringPortals : CGameScript +{ + int CUR_PORTAL; + string NPC_SWAPS_PORTAL; + string PORTAL_POS; + int SND_CHANNEL; + string SPRITE_1; + string SPRITE_2; + string SPRITE_3; + string SPRITE_4; + + ManaringPortals() + { + SPRITE_1 = "quests/manaring/vision1.spr"; + SPRITE_2 = "quests/manaring/vision2.spr"; + SPRITE_3 = "quests/manaring/vision3.spr"; + SPRITE_4 = "quests/manaring/vision4.spr"; + CUR_PORTAL = -1; + } + + void game_precache() + { + Precache("quests/manaring/vision1.spr"); + Precache("quests/manaring/vision2.spr"); + Precache("quests/manaring/vision3.spr"); + Precache("quests/manaring/vision4.spr"); + } + + void client_activate() + { + PORTAL_POS = param1; + NPC_SWAPS_PORTAL = param2; + SND_CHANNEL = RandomInt(5, 255); + EmitSound3D("magic/elecidlepop.wav", 10, PORTAL_POS); + EmitSound3D("magic/chant_loop.wav", 10, PORTAL_POS, 0.8, SND_CHANNEL); + spawn_a_portal(); + } + + void spawn_a_portal() + { + CUR_PORTAL += 1; + if (CUR_PORTAL == 0) + { + ClientEffect("tempent", "sprite", SPRITE_1, PORTAL_POS, "setup_portal_sprite", "update_portal_sprite"); + } + if (CUR_PORTAL == 1) + { + ClientEffect("tempent", "sprite", SPRITE_2, PORTAL_POS, "setup_portal_sprite", "update_portal_sprite"); + } + if (CUR_PORTAL == 2) + { + ClientEffect("tempent", "sprite", SPRITE_3, PORTAL_POS, "setup_portal_sprite", "update_portal_sprite"); + } + if (CUR_PORTAL == 3) + { + ClientEffect("tempent", "sprite", SPRITE_4, PORTAL_POS, "setup_portal_sprite", "update_portal_sprite"); + } + if (CUR_PORTAL > 3) + { + kill_script(); + } + else + { + if (!(NPC_SWAPS_PORTAL)) + { + ScheduleDelayedEvent(5, "spawn_a_portal"); + } + } + } + + void setup_portal_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 30); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 30); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.2); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "iuser1", CUR_PORTAL); + } + + void update_portal_sprite() + { + if ("game.tempent.iuser1" != CUR_PORTAL) + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + } + + void kill_script() + { + EmitSound3D("null.wav", 10, PORTAL_POS, 0.8, SND_CHANNEL); + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/poison_spore.as b/scripts/angelscript/effects/poison_spore.as new file mode 100644 index 00000000..37dbb720 --- /dev/null +++ b/scripts/angelscript/effects/poison_spore.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "effects/dot_poison.as" + +namespace MS +{ + +class PoisonSpore : CGameScript +{ + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + + PoisonSpore() + { + DOT_IM_AFFECTED = "You have been overcome by noxious spores!"; + DOT_IM_RESIST = "You resist the worst of the spores."; + } + +} + +} diff --git a/scripts/angelscript/effects/protection.as b/scripts/angelscript/effects/protection.as new file mode 100644 index 00000000..1ecc7f8e --- /dev/null +++ b/scripts/angelscript/effects/protection.as @@ -0,0 +1,50 @@ +#pragma context server + +#include "effects/base_effect.as" + +namespace MS +{ + +class Protection : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string SOUND_CHARGE; + string local.effect.damage; + + Protection() + { + SOUND_CHARGE = "turret/tu_die2.wav"; + Precache(SOUND_CHARGE); + EFFECT_ID = "effect_protect"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + local.effect.damage = param2; + Effect("glow", GetOwner(), Vector3(255, 255, 255), 96, EFFECT_DURATION, EFFECT_DURATION); + EmitSound(GetOwner(), "game.sound.item", "magic/heal_strike.wav", "game.sound.maxvol"); + SendPlayerMessage(GetEntityIndex(GetOwner()), "You are protected by a magical barrier."); + } + + void OnDamage(int damage) override + { + if (!(param2 > 0)) return; + Effect("screenfade", GetOwner(), 0.5, 0, Vector3(255, 255, 255), 40, "fadein"); + return; + EmitSound(GetOwner(), 2, "player/pl_metal2.wav", 5); + } + + void effect_die() + { + EmitSound(GetOwner(), 0, SOUND_CHARGE, 8); + Effect("tempent", "trail", "lgtning.spr", /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 80), 10, 2, 5, 10, 20); + SendPlayerMessage(GetEntityIndex(GetOwner()), "Your protection spell has expired!"); + } + +} + +} diff --git a/scripts/angelscript/effects/scarab_latch.as b/scripts/angelscript/effects/scarab_latch.as new file mode 100644 index 00000000..a31c52bc --- /dev/null +++ b/scripts/angelscript/effects/scarab_latch.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "effects/base_dot allowduplicate.as" + +namespace MS +{ + +class ScarabLatch : CGameScript +{ + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_TYPE; + string EFFECT_ID; + string EFFECT_SCRIPT; + + ScarabLatch() + { + EFFECT_ID = "DOT_scarab"; + EFFECT_SCRIPT = currentscript; + DOT_TYPE = "magic_effect"; + DOT_IM_AFFECTED = "A scarab latches to you, sapping your life away!"; + DOT_IM_RESIST = "Youre not supposed to resist this."; + DOT_HE_IMMUNE = "Youre not supposed to resist this."; + } + + void dot_effect() + { + if (!(IsEntityAlive(DOT_ATTACKER))) + { + RemoveScript(); + } + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_acid_splash.as b/scripts/angelscript/effects/sfx_acid_splash.as new file mode 100644 index 00000000..63c1a38d --- /dev/null +++ b/scripts/angelscript/effects/sfx_acid_splash.as @@ -0,0 +1,100 @@ +#pragma context client + +namespace MS +{ + +class SfxAcidSplash : CGameScript +{ + int CYCLE_ANGLE; + string FX_CENTER; + string FX_RADIUS; + string SOUND_BURST; + string SPRITE_COLOR; + int SPRITE_FRAMERATE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + int SPRITE_RENDERAMT; + string SPRITE_RENDERMODE; + float SPRITE_SCALE; + + SfxAcidSplash() + { + SPRITE_NAME = "bloodspray.spr"; + SPRITE_COLOR = Vector3(0, 255, 0); + SPRITE_RENDERAMT = 255; + SPRITE_RENDERMODE = "texture"; + SPRITE_FRAMERATE = 10; + SPRITE_NFRAMES = 10; + SPRITE_SCALE = 3.0; + SOUND_BURST = "gonarch/gon_birth1.wav"; + Precache(SOUND_BURST); + } + + void client_activate() + { + FX_CENTER = param1; + FX_RADIUS = param2; + if ((FX_RADIUS).findFirst(PARAM) == 0) + { + FX_RADIUS = 200; + } + int DO_GLOW = 1; + Vector3 GLOW_COLOR = Vector3(64, 255, 0); + ClientEffect("light", "new", FX_CENTER, 128, GLOW_COLOR, 1.0); + ScheduleDelayedEvent(3.0, "remove_me"); + CYCLE_ANGLE = 0; + for (int i = 0; i < 17; i++) + { + create_sprites(); + } + EmitSound3D(SOUND_BURST, 10, FX_CENTER); + } + + void remove_me() + { + RemoveScript(); + } + + void create_sprites() + { + string SPR_POS = FX_CENTER; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 10, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPR_POS, "setup_ring_sprite", "update_ring_sprite"); + CYCLE_ANGLE += 20; + } + + void update_ring_sprite() + { + string CUR_SIZE = "game.tempent.fuser1"; + CUR_SIZE -= 0.05; + if (!(CUR_SIZE > 0)) return; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + + void setup_ring_sprite() + { + float FADE_DEL = 1.0; + int SPRITE_SPEED = 200; + if (FX_RADIUS > 256) + { + FX_RADIUS += SPRITE_SPEED; + } + ClientEffect("tempent", "set_current_prop", "death_delay", FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "renderamt", SPRITE_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "rendermode", SPRITE_RENDERMODE); + ClientEffect("tempent", "set_current_prop", "framerate", SPRITE_FRAMERATE); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, SPRITE_SPEED, 300)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "fuser1", 3.0); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_attach_sprite.as b/scripts/angelscript/effects/sfx_attach_sprite.as new file mode 100644 index 00000000..daeb7295 --- /dev/null +++ b/scripts/angelscript/effects/sfx_attach_sprite.as @@ -0,0 +1,126 @@ +#pragma context client + +namespace MS +{ + +class SfxAttachSprite : CGameScript +{ + string ATTACH_IDX; + string DO_GLOW; + int FX_ACTIVE; + string FX_DURATION; + string GLOW_COLOR; + string GLOW_RAD; + string MY_OWNER; + string RENDER_PROPS; + string SKEL_LIGHT_ID; + string SPRITE_NAME; + string SPRITE_POS; + + void client_activate() + { + RENDER_PROPS = param1; + MY_OWNER = param2; + ATTACH_IDX = param3; + FX_DURATION = param4; + SPRITE_NAME = param5; + DO_GLOW = param6; + GLOW_COLOR = param7; + GLOW_RAD = param8; + SetCallback("render", "enable"); + if (ATTACH_IDX == 0) + { + SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"); + } + if (ATTACH_IDX == 1) + { + SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment1"); + } + if (ATTACH_IDX == 2) + { + SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment2"); + } + if (ATTACH_IDX == 3) + { + SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment3"); + } + LogDebug("**** mdl MY_OWNER attch ATTACH_IDX /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0") /* TODO: $getcl */ $getcl(MY_OWNER, "attachment1") /* TODO: $getcl */ $getcl(MY_OWNER, "attachment2") /* TODO: $getcl */ $getcl(MY_OWNER, "attachment3") [ SPRITE_POS ]"); + if ((DO_GLOW)) + { + ClientEffect("light", "new", SPRITE_POS, GLOW_RAD, GLOW_COLOR, FX_DURATION); + SKEL_LIGHT_ID = "game.script.last_light_id"; + } + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_attach_sprite", "update_attach_sprite"); + FX_DURATION("end_fx"); + FX_ACTIVE = 1; + keep_sprite_pos(); + } + + void keep_sprite_pos() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.01, "keep_sprite_pos"); + if (ATTACH_IDX == 0) + { + SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"); + } + if (ATTACH_IDX == 1) + { + SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment1"); + } + if (ATTACH_IDX == 2) + { + SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment2"); + } + if (ATTACH_IDX == 3) + { + SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment3"); + } + } + + void end_fx() + { + LogDebug("**** END FX"); + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void game_prerender() + { + if ((DO_GLOW)) + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + } + + void update_attach_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", SPRITE_POS); + } + + void setup_attach_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + if (GetToken(RENDER_PROPS, 0, ";") == 1) + { + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + ClientEffect("tempent", "set_current_prop", "scale", GetToken(RENDER_PROPS, 1, ";")); + ClientEffect("tempent", "set_current_prop", "renderamt", GetToken(RENDER_PROPS, 2, ";")); + ClientEffect("tempent", "set_current_prop", "rendermode", GetToken(RENDER_PROPS, 3, ";")); + ClientEffect("tempent", "set_current_prop", "rendercolor", GetToken(RENDER_PROPS, 4, ";")); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", GetToken(RENDER_PROPS, 5, ";")); + ClientEffect("tempent", "set_current_prop", "frames", GetToken(RENDER_PROPS, 6, ";")); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_barrier.as b/scripts/angelscript/effects/sfx_barrier.as new file mode 100644 index 00000000..c742d1b5 --- /dev/null +++ b/scripts/angelscript/effects/sfx_barrier.as @@ -0,0 +1,121 @@ +#pragma context client + +namespace MS +{ + +class SfxBarrier : CGameScript +{ + string CL_AUTO_LIFT; + string CL_COLOR; + string CL_DURATION; + string CL_FOLLOW; + string CL_RADIUS; + int CYCLE_ANGLE; + int FX_ACTIVE; + int GO_AWAY; + string OWNER_IDX; + string SPRITE_SCALE; + int TOTAL_OFS; + int TURN_INC; + + void client_activate() + { + OWNER_IDX = param1; + CL_RADIUS = param2; + CL_COLOR = param3; + CL_DURATION = param4; + CL_AUTO_LIFT = param5; + CL_FOLLOW = param6; + LogDebug("*** barrier_activate idx OWNER_IDX rad CL_RADIUS col CL_COLOR dur CL_DURATION alift CL_AUTO_LIFT fol CL_FOLLOW"); + CL_DURATION("remove_me"); + CYCLE_ANGLE = 0; + ScheduleDelayedEvent(0.1, "spriteify"); + } + + void spriteify() + { + TOTAL_OFS = 64; + if (CL_RADIUS <= 256) + { + SPRITE_SCALE = 0.75; + } + else + { + SPRITE_SCALE = 1.0; + } + TURN_INC = 20; + for (int i = 0; i < 18; i++) + { + createsprite(); + } + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(OWNER_IDX, "origin"); + CYCLE_ANGLE += TURN_INC; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, CL_RADIUS, 36)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", l.pos, "setup_sprite1_sparkle", "sprite_update"); + } + + void setup_sprite1_sparkle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", CL_DURATION); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendercolor", CL_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", CYCLE_ANGLE); + } + + void sprite_update() + { + if (!(GO_AWAY)) + { + if ((CL_FOLLOW)) + { + } + string SPRITE_ORG = /* TODO: $getcl */ $getcl(OWNER_IDX, "origin"); + string MY_ANGLE = "game.tempent.fuser1"; + string SPRITE_VOF = (SPRITE_ORG).z; + SPRITE_VOF += 48; + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, MY_ANGLE, 0), Vector3(0, CL_RADIUS, SPRITE_VOF)); + ClientEffect("tempent", "set_current_prop", "origin", SPRITE_ORG); + } + else + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 400)); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", -4.0); + } + } + + void clear_sprites() + { + GO_AWAY = 1; + FX_ACTIVE = 0; + sprite_update(); + ScheduleDelayedEvent(5.0, "remove_me"); + } + + void remove_me() + { + if ((CL_AUTO_LIFT)) + { + CL_AUTO_LIFT = 0; + clear_sprites(); + } + else + { + RemoveScript(); + } + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_beam_cage.as b/scripts/angelscript/effects/sfx_beam_cage.as new file mode 100644 index 00000000..33a1b432 --- /dev/null +++ b/scripts/angelscript/effects/sfx_beam_cage.as @@ -0,0 +1,94 @@ +#pragma context client + +namespace MS +{ + +class SfxBeamCage : CGameScript +{ + string COIL_DURATION; + string COIL_HEIGHT; + string COIL_POS; + string COIL_START_TIME; + string COIL_WIDTH; + string COIL_WIDTH_MAX; + string COIL_WIDTH_MIN; + string COIL_Z_MAX; + string COIL_Z_START; + float ROCK_CLIMB_STEP; + int ROT_COUNT; + + SfxBeamCage() + { + ROCK_CLIMB_STEP = 1.0; + } + + void client_activate() + { + string L_WIDTH = /* TODO: $getcl */ $getcl(param1, "width"); + string L_HEIGHT = /* TODO: $getcl */ $getcl(param1, "height"); + COIL_POS = /* TODO: $getcl */ $getcl(param1, "origin"); + if ((/* TODO: $getcl */ $getcl(param1, "isplayer"))) + { + COIL_POS += "z"; + } + COIL_DURATION = param2; + ROT_COUNT = 0; + COIL_WIDTH = (L_WIDTH * 0.75); + COIL_WIDTH_MIN = (L_WIDTH * 0.4); + COIL_WIDTH_MAX = COIL_WIDTH; + COIL_HEIGHT = L_HEIGHT; + COIL_Z_START = (COIL_POS).z; + COIL_Z_MAX = COIL_Z_START; + COIL_Z_MAX += COIL_HEIGHT; + LogDebug("*** $currentscript client_activate COIL_POS w COIL_WIDTH h COIL_HEIGHT zm COIL_Z_MAX"); + if (COIL_HEIGHT > 96) + { + if (COIL_HEIGHT > 200) + { + COIL_HEIGHT = 200; + } + string L_MAX_HEIGHT_RATIO = (COIL_HEIGHT / 200); + ROCK_CLIMB_STEP += /* TODO: $ratio */ $ratio(L_MAX_HEIGHT_RATIO, 0.2, 2.0); + } + COIL_START_TIME = GetGameTime(); + for (int i = 0; i < 100; i++) + { + draw_coil_loop(); + } + COIL_DURATION("end_fx"); + } + + void draw_coil_loop() + { + string L_COIL_CUR_Z = (COIL_POS).z; + if (!(L_COIL_CUR_Z < COIL_Z_MAX)) return; + string L_COMP_RATIO_MAX = (COIL_Z_MAX - COIL_Z_START); + string L_COMP_RATIO_CUR = (COIL_Z_MAX - L_COIL_CUR_Z); + string L_COMP_RATIO = (L_COMP_RATIO_CUR / L_COMP_RATIO_MAX); + COIL_WIDTH = /* TODO: $ratio */ $ratio(L_COMP_RATIO, COIL_WIDTH_MIN, COIL_WIDTH_MAX); + string BEAM_START = COIL_POS; + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, ROT_COUNT, 0), Vector3(0, COIL_WIDTH, 0)); + COIL_POS += "z"; + ROT_COUNT += 20; + if (ROT_COUNT > 359) + { + ROT_COUNT -= 359; + } + string BEAM_END = COIL_POS; + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, ROT_COUNT, 0), Vector3(0, COIL_WIDTH, 0)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", COIL_DURATION, 2, 0.1, 0.9, 0.1, 30, Vector3(255, 255, 255)); + } + + void end_fx() + { + ScheduleDelayedEvent(5.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_beam_sparks.as b/scripts/angelscript/effects/sfx_beam_sparks.as new file mode 100644 index 00000000..bbc0a924 --- /dev/null +++ b/scripts/angelscript/effects/sfx_beam_sparks.as @@ -0,0 +1,106 @@ +#pragma context client + +namespace MS +{ + +class SfxBeamSparks : CGameScript +{ + string ATTACH_LOC; + string ATTACH_NAME; + int FX_ACTIVE; + string FX_COLOR; + string FX_DURATION; + string FX_OWNER; + string FX_TARGET; + string SPRITE_NAME; + + SfxBeamSparks() + { + SPRITE_NAME = "3dmflaora.spr"; + } + + void client_activate() + { + FX_OWNER = param1; + FX_TARGET = param2; + ATTACH_NAME = "attachment"; + ATTACH_NAME += param3; + FX_COLOR = param4; + FX_DURATION = param5; + FX_ACTIVE = 1; + track_attach(); + ClientEffect("tempent", "sprite", SPRITE_NAME, ATTACH_LOC, "setup_attach_sprite", "update_attach_sprite"); + target_sprites(); + FX_DURATION("end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void target_sprites() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "target_sprites"); + string TARG_ORG = /* TODO: $getcl */ $getcl(FX_TARGET, "origin"); + if (!(IsValidPlayer(TARG_ORG))) + { + TARG_ORG += "z"; + } + ClientEffect("tempent", "sprite", SPRITE_NAME, TARG_ORG, "setup_target_sprite"); + ClientEffect("tempent", "sprite", SPRITE_NAME, TARG_ORG, "setup_target_sprite"); + ClientEffect("tempent", "sprite", SPRITE_NAME, TARG_ORG, "setup_target_sprite"); + } + + void track_attach() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.01, "track_attach"); + ATTACH_LOC = /* TODO: $getcl */ $getcl(FX_OWNER, ATTACH_NAME); + } + + void update_attach_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", ATTACH_LOC); + } + + void setup_attach_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_COLOR); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void setup_target_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_COLOR); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + float RND_ANG = Random(0, 359); + float RND_SPEED = Random(200, 500); + float RND_V = Random(0, 300); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(0, RND_SPEED, RND_V))); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_bleed.as b/scripts/angelscript/effects/sfx_bleed.as new file mode 100644 index 00000000..92fb15f5 --- /dev/null +++ b/scripts/angelscript/effects/sfx_bleed.as @@ -0,0 +1,85 @@ +#pragma context client + +namespace MS +{ + +class SfxBleed : CGameScript +{ + string BLOOD_COL; + string BONE_AMT; + int BONE_IDX; + string RENDER_PROPS; + string SFX_OWNER; + int SPRITE_DURATION; + string SPRITE_NAME; + + void client_activate() + { + if (param2 == "green") + { + BLOOD_COL = "(225,225,0)"; + } + else + { + BLOOD_COL = "(200,0,0)"; + } + SFX_OWNER = param1; + SPRITE_NAME = "bloodspray.spr"; + RENDER_PROPS = "0;0.15;255;alpha;"; + RENDER_PROPS += BLOOD_COL; + RENDER_PROPS += ";10;10"; + SPRITE_DURATION = 5; + BONE_AMT = (/* TODO: $getcl */ $getcl(SFX_OWNER, "bonecount") - 1); + BONE_IDX = RandomInt(1, BONE_AMT); + ScheduleDelayedEvent(0.01, "spurt_blood"); + SPRITE_DURATION("remove_me"); + } + + void spurt_blood() + { + if (BONE_AMT > 0) + { + string L_POS = /* TODO: $getcl */ $getcl(SFX_OWNER, "bonepos", BONE_IDX); + } + else + { + string L_POS = /* TODO: $getcl */ $getcl(SFX_OWNER, "center"); + } + ClientEffect("tempent", "sprite", SPRITE_NAME, L_POS, "setup_temp_sprite"); + ScheduleDelayedEvent(0.1, "spurt_blood"); + } + + void setup_temp_sprite() + { + string L_SPURT_ANG = /* TODO: $angles */ $angles(/* TODO: $getcl */ $getcl(SFX_OWNER, "origin"), /* TODO: $getcl */ $getcl(SFX_OWNER, "bonepos", BONE_IDX)); + Vector3 L_ANG = Vector3(0, L_SPURT_ANG, 0); + Vector3 L_VEL1 = Vector3(0, 40, 20); + string L_VEL2 = /* TODO: $relvel */ $relvel(L_ANG, L_VEL1); + string L_VEL3 = /* TODO: $getcl */ $getcl(SFX_OWNER, "velocity"); + L_VEL3 *= 0.05; + L_VEL2 += L_VEL3; + ClientEffect("tempent", "set_current_prop", "death_delay", 1); + if (GetToken(RENDER_PROPS, 0, ";") == 1) + { + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + ClientEffect("tempent", "set_current_prop", "scale", GetToken(RENDER_PROPS, 1, ";")); + ClientEffect("tempent", "set_current_prop", "renderamt", GetToken(RENDER_PROPS, 2, ";")); + ClientEffect("tempent", "set_current_prop", "rendermode", GetToken(RENDER_PROPS, 3, ";")); + ClientEffect("tempent", "set_current_prop", "rendercolor", GetToken(RENDER_PROPS, 4, ";")); + ClientEffect("tempent", "set_current_prop", "framerate", GetToken(RENDER_PROPS, 5, ";")); + ClientEffect("tempent", "set_current_prop", "frames", GetToken(RENDER_PROPS, 6, ";")); + ClientEffect("tempent", "set_current_prop", "velocity", L_VEL2); + ClientEffect("tempent", "set_current_prop", "gravity", 0.6); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_blue_flames.as b/scripts/angelscript/effects/sfx_blue_flames.as new file mode 100644 index 00000000..90624815 --- /dev/null +++ b/scripts/angelscript/effects/sfx_blue_flames.as @@ -0,0 +1,67 @@ +#pragma context client + +namespace MS +{ + +class SfxBlueFlames : CGameScript +{ + string FX_IDX; + int OFSZ_NEG; + int OFS_NEG; + int OFS_POS; + string SPRITE_1; + + SfxBlueFlames() + { + OFS_POS = 16; + OFS_NEG = -16; + OFSZ_NEG = 0; + SPRITE_1 = "xsmoke3.spr"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.1, 0.3)); + createsprite(); + } + + void game_precache() + { + Precache(SPRITE_1); + } + + void client_activate() + { + FX_IDX = param2; + PARAM1("effect_die"); + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(FX_IDX, "origin"); + l.pos += Vector3(Random(OFS_NEG, OFS_POS), Random(OFS_NEG, OFS_POS), Random(0, 32)); + ClientEffect("tempent", "sprite", SPRITE_1, l.pos, "setup_sprite1_flame"); + } + + void setup_sprite1_flame() + { + ClientEffect("tempent", "set_current_prop", "death_delay", Random(0.4, 0.6)); + ClientEffect("tempent", "set_current_prop", "framerate", 25); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 64, 255)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-4, 4), Random(-4, 4), 0)); + ClientEffect("tempent", "set_current_prop", "frames", 20); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + + void effect_die() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_bunny.as b/scripts/angelscript/effects/sfx_bunny.as new file mode 100644 index 00000000..0d1645cf --- /dev/null +++ b/scripts/angelscript/effects/sfx_bunny.as @@ -0,0 +1,61 @@ +#pragma context server + +namespace MS +{ + +class SfxBunny : CGameScript +{ + void client_activate() + { + SetCallback("render", "enable"); + string EYE_POS = "game.localplayer.eyepos"; + string EYE_ANGS = "game.localplayer.viewangles"; + EYE_POS += /* TODO: $relpos */ $relpos(EYE_ANGS, Vector3(0, 20, 28)); + LogDebug("*** client_activate EYE_POS EYE_ANGS"); + ClientEffect("tempent", "sprite", "bunny.spr", EYE_POS, "setup_bunny", "update_bunny"); + ScheduleDelayedEvent(20.0, "remove_script"); + EmitSound3D("ambience/the_horror1.wav", 10, EYE_POS); + } + + void game_prerender() + { + } + + void remove_script() + { + RemoveScript(); + } + + void update_bunny() + { + string EYE_POS = "game.localplayer.eyepos"; + string EYE_ANGS = "game.localplayer.viewangles"; + EYE_POS += /* TODO: $relpos */ $relpos(EYE_ANGS, Vector3(0, 20, 28)); + ClientEffect("tempent", "set_current_prop", "origin", EYE_POS); + string CUR_ALPHA = "game.tempent.fuser1"; + CUR_ALPHA += 1; + if (CUR_ALPHA > 255) + { + int CUR_ALPHA = 200; + } + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_ALPHA); + ClientEffect("tempent", "set_current_prop", "renderamt", CUR_ALPHA); + } + + void setup_bunny() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 19.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 200); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_burst_sphere.as b/scripts/angelscript/effects/sfx_burst_sphere.as new file mode 100644 index 00000000..1798b5fa --- /dev/null +++ b/scripts/angelscript/effects/sfx_burst_sphere.as @@ -0,0 +1,75 @@ +#pragma context server + +namespace MS +{ + +class SfxBurstSphere : CGameScript +{ + int FX_ACTIVE; + string FX_END_TIME; + string FX_GROW_START; + string FX_ORIGIN; + float FX_SCALE; + + void client_activate() + { + FX_ORIGIN = param1; + FX_GROW_START = GetGameTime(); + FX_GROW_START += 2.5; + FX_END_TIME = FX_GROW_START; + FX_SCALE = 2.0; + FX_ACTIVE = 1; + ScheduleDelayedEvent(6.0, "end_fx"); + ClientEffect("tempent", "model", "weapons/projectiles", FX_ORIGIN, "setup_bubble", "update_bubble"); + } + + void update_bubble() + { + if ((FX_ACTIVE)) + { + if (!(GROW_MODE)) + { + if (GetGameTime() > FX_GROW_START) + { + } + GROW_MODE = 1; + } + if ((GROW_MODE)) + { + } + FX_SCALE += 0.01; + ClientEffect("tempent", "set_current_prop", "scale", FX_SCALE); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_bubble() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "scale", FX_SCALE); + ClientEffect("tempent", "set_current_prop", "body", 1); + ClientEffect("tempent", "set_current_prop", "sequence", 6); + ClientEffect("tempent", "set_current_prop", "frames", 255); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_circle_of_fire.as b/scripts/angelscript/effects/sfx_circle_of_fire.as new file mode 100644 index 00000000..7a471b19 --- /dev/null +++ b/scripts/angelscript/effects/sfx_circle_of_fire.as @@ -0,0 +1,97 @@ +#pragma context client + +namespace MS +{ + +class SfxCircleOfFire : CGameScript +{ + int CYCLE_ANGLE; + int FX_ACTIVE; + string FX_DURATION; + string FX_ORIGIN; + string FX_RAD; + string SEAL_MODEL; + string SEAL_OFS; + string SPRITE_NAME; + int SPRITE_NFRAMES; + + SfxCircleOfFire() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + SPRITE_NAME = "Fire2.spr"; + SPRITE_NFRAMES = 8; + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_RAD = param2; + SEAL_OFS = param3; + FX_DURATION = param4; + FX_DURATION("remove_fx"); + ClientEffect("tempent", "model", SEAL_MODEL, FX_ORIGIN, "setup_seal1"); + ClientEffect("tempent", "model", SEAL_MODEL, FX_ORIGIN, "setup_seal2"); + FX_ACTIVE = 1; + CYCLE_ANGLE = 0; + for (int i = 0; i < 9; i++) + { + make_flames(); + } + } + + void make_flames() + { + string SPRITE_POS = FX_ORIGIN; + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, FX_RAD, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_flame_sprite"); + CYCLE_ANGLE += 40; + } + + void remove_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void setup_seal1() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "fade", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + ClientEffect("tempent", "set_current_prop", "frames", 39); + } + + void setup_seal2() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "fade", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", -1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + ClientEffect("tempent", "set_current_prop", "frames", 39); + } + + void setup_flame_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "scale", 0.75); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_cloud.as b/scripts/angelscript/effects/sfx_cloud.as new file mode 100644 index 00000000..912de7ae --- /dev/null +++ b/scripts/angelscript/effects/sfx_cloud.as @@ -0,0 +1,83 @@ +#pragma context server + +namespace MS +{ + +class SfxCloud : CGameScript +{ + int FX_ACTIVE; + string FX_CENTER; + string FX_COLOR; + string FX_DURATION; + string FX_RADIUS; + string FX_SPRITE; + string SOUND_SPAWN; + + SfxCloud() + { + SOUND_SPAWN = "ambience/steamburst1.wav"; + } + + void client_activate() + { + FX_CENTER = param1; + FX_DURATION = param2; + FX_RADIUS = param3; + FX_COLOR = param4; + FX_SPRITE = param5; + if ((FX_SPRITE).findFirst(PARAM) == 0) + { + FX_SPRITE = "poison_cloud.spr"; + } + if ((FX_COLOR).findFirst(PARAM) == 0) + { + FX_COLOR = Vector3(0, 255, 0); + } + string L_FX_RADIUS = FX_RADIUS; + ClientEffect("light", "new", FX_CENTER, L_FX_RADIUS, FX_COLOR, FX_DURATION); + FX_ACTIVE = 1; + FX_DURATION("end_fx"); + smokes_loop(); + EmitSound3D(SOUND_SPAWN, 10, FX_CENTER); + } + + void smokes_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "smokes_loop"); + string SPRITE_POS = FX_CENTER; + float RND_ANG = Random(0, 359.99); + string NEG_RAD = /* TODO: $neg */ $neg(FX_RADIUS); + float RND_OFS = Random(NEG_RAD, FX_RADIUS); + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, RND_OFS, 0)); + ClientEffect("tempent", "sprite", FX_SPRITE, SPRITE_POS, "setup_smoke"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(3.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void setup_smoke() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", 0.005); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_cod.as b/scripts/angelscript/effects/sfx_cod.as new file mode 100644 index 00000000..155f441a --- /dev/null +++ b/scripts/angelscript/effects/sfx_cod.as @@ -0,0 +1,67 @@ +#pragma context server + +namespace MS +{ + +class SfxCod : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_ORIGIN; + string GLOW_COLOR; + string GLOW_RAD; + string MODEL_OFS; + string SEAL_MODEL; + string SEAL_SOUND; + string SND_CHAN; + + SfxCod() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + GLOW_COLOR = Vector3(255, 0, 0); + SEAL_SOUND = "ambience/pulsemachine.wav"; + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_DURATION = param2; + MODEL_OFS = param3; + FX_ACTIVE = 1; + GLOW_RAD = param4; + SND_CHAN = param5; + LogDebug("cod_soundchan SND_CHAN"); + FX_DURATION("end_fx"); + ClientEffect("light", "new", FX_ORIGIN, GLOW_RAD, GLOW_COLOR, FX_DURATION); + ClientEffect("tempent", "model", SEAL_MODEL, FX_ORIGIN, "setup_seal"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(0.5, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void setup_seal() + { + string L_FX_DURATION = FX_DURATION; + L_FX_DURATION *= 2.0; + ClientEffect("tempent", "set_current_prop", "death_delay", L_FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", MODEL_OFS); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_dark_burst.as b/scripts/angelscript/effects/sfx_dark_burst.as new file mode 100644 index 00000000..dc235ce8 --- /dev/null +++ b/scripts/angelscript/effects/sfx_dark_burst.as @@ -0,0 +1,96 @@ +#pragma context server + +namespace MS +{ + +class SfxDarkBurst : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_ORIGIN; + int FX_RAD; + string LIGHT_ID; + + void client_activate() + { + FX_ORIGIN = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + EmitSound3D("magic/temple.wav", 10, FX_ORIGIN); + EmitSound3D("magic/boom.wav", 10, FX_ORIGIN); + SetCallback("render", "enable"); + FX_RAD = 128; + ClientEffect("light", "new", FX_ORIGIN, FX_RAD, Vector3(255, 0, 255), 0.1); + LIGHT_ID = "game.script.last_light_id"; + FX_DURATION("end_fx"); + ClientEffect("tempent", "sprite", "weapons/projectiles.mdl", FX_ORIGIN, "setup_dark_burst", "update_dark_burst"); + } + + void game_prerender() + { + if ((FX_ACTIVE)) + { + ClientEffect("light", LIGHT_ID, FX_ORIGIN, 128, Vector3(255, 0, 255), 0.1); + } + else + { + if (FX_RAD > 2) + { + } + FX_RAD -= 1; + ClientEffect("light", LIGHT_ID, FX_ORIGIN, FX_RAD, Vector3(255, 0, 255), 0.1); + } + } + + void update_dark_burst() + { + if ((FX_ACTIVE)) + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < 1.0) + { + } + CUR_SCALE += 0.04; + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + } + if (!(FX_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_dark_burst() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 54); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_dburst.as b/scripts/angelscript/effects/sfx_dburst.as new file mode 100644 index 00000000..fd5f92d4 --- /dev/null +++ b/scripts/angelscript/effects/sfx_dburst.as @@ -0,0 +1,132 @@ +#pragma context client + +namespace MS +{ + +class SfxDburst : CGameScript +{ + string CUR_SIZE; + int FX_ACTIVE; + string FX_AOE; + string FX_LIGHT_ID; + string FX_LIGHT_RAD; + string FX_ORIGIN; + string MAX_SIZE; + float MIN_SIZE; + string MODEL_NAME; + int MODEL_OFS; + + SfxDburst() + { + MODEL_NAME = "weapons/projectiles.mdl"; + MODEL_OFS = 74; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + if ((FX_ACTIVE)) + { + } + if (CUR_SIZE <= 1) + { + } + CUR_SIZE += 0.02; + if (CUR_SIZE > 1) + { + CUR_SIZE = 1; + } + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_AOE = param2; + FX_ACTIVE = 1; + if ((param3)) + { + if (FX_AOE > 100) + { + string L_SOUND = "magic/dburst_large_sdr_darkness.wav"; + } + else + { + string L_SOUND = "magic/dburst_sdr_blackout.wav"; + } + EmitSound3D(L_SOUND, 10, FX_ORIGIN); + } + MIN_SIZE = 0.1; + MAX_SIZE = FX_AOE; + MAX_SIZE /= 90; + FX_LIGHT_RAD = (FX_AOE * 1.5); + SetCallback("render", "enable"); + ClientEffect("light", "new", FX_ORIGIN, FX_LIGHT_RAD, Vector3(255, 0, 255), 0.1); + FX_LIGHT_ID = "game.script.last_light_id"; + CUR_SIZE = 0; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", FX_ORIGIN, "make_aura", "update_aura"); + ScheduleDelayedEvent(2.0, "end_fx"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + ClientEffect("light", FX_LIGHT_ID, FX_ORIGIN, /* TODO: $ratio */ $ratio(CUR_SIZE, FX_LIGHT_RAD, 0), Vector3(255, 0, 255), 0.1); + LogDebug("*** $currentscript update_light CUR_SIZE /* TODO: $ratio */ $ratio(CUR_SIZE, FX_LIGHT_RAD, 0)"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_aura() + { + int L_REMOVE_AURA = 0; + if (!(FX_ACTIVE)) + { + int L_REMOVE_AURA = 1; + } + if (CUR_SIZE >= 1) + { + int L_REMOVE_AURA = 1; + } + if ((L_REMOVE_AURA)) + { + if ((FX_ACTIVE)) + { + end_fx(); + } + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + else + { + ClientEffect("tempent", "set_current_prop", "scale", /* TODO: $ratio */ $ratio(CUR_SIZE, MIN_SIZE, MAX_SIZE)); + } + } + + void make_aura() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "body", MODEL_OFS); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_drunk.as b/scripts/angelscript/effects/sfx_drunk.as new file mode 100644 index 00000000..f7e413b4 --- /dev/null +++ b/scripts/angelscript/effects/sfx_drunk.as @@ -0,0 +1,163 @@ +#pragma context client + +namespace MS +{ + +class SfxDrunk : CGameScript +{ + string DRUNK_SIDEMOVE; + int MAX_STUMBLEAMT; + int MAX_SWAY; + float MAX_SWAY_AMT; + int MAX_SWAY_RATE; + int MAX_SWAY_T; + int MIN_STUMBLEAMT; + int MIN_SWAY; + float MIN_SWAY_AMT; + int MIN_SWAY_RATE; + int MIN_SWAY_T; + int STUMBLE_BACK_MAX; + int STUMBLE_BACK_T; + int STUMBLE_FORWARD_MAX; + int STUMBLE_FORWARD_T; + int STUMBLE_LEFT_MAX; + int STUMBLE_LEFT_TRESHHOLD; + int STUMBLE_RIGHT_MAX; + int STUMBLE_RIGHT_TRESHHOLD; + string game.cleffect.move_ofs.forward; + string game.cleffect.move_ofs.right; + int game.cleffect.move_scale.forward; + int game.cleffect.move_scale.right; + int game.cleffect.screenfade.alpha; + int game.cleffect.screenfade.alphalimit; + float game.cleffect.screenfade.blendduration; + string game.cleffect.screenfade.color; + float game.cleffect.screenfade.duration; + int game.cleffect.screenfade.newfade; + string game.cleffect.screenfade.type; + string game.cleffect.view_ofs.pitch; + string game.cleffect.view_ofs.roll; + + SfxDrunk() + { + MIN_STUMBLEAMT = -10; + MAX_STUMBLEAMT = 10; + STUMBLE_RIGHT_MAX = 80; + STUMBLE_LEFT_MAX = -80; + STUMBLE_RIGHT_TRESHHOLD = 30; + STUMBLE_LEFT_TRESHHOLD = -30; + STUMBLE_FORWARD_MAX = 40; + STUMBLE_BACK_MAX = -50; + STUMBLE_FORWARD_T = 20; + STUMBLE_BACK_T = -20; + MAX_SWAY = 10; + MIN_SWAY = -10; + MAX_SWAY_T = 8; + MIN_SWAY_T = -8; + MAX_SWAY_RATE = 1; + MIN_SWAY_RATE = -1; + MAX_SWAY_AMT = 0.1; + MIN_SWAY_AMT = -0.1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(2.0); + game.cleffect.screenfade.newfade = 1; + game.cleffect.screenfade.alphalimit = 200; + game.cleffect.screenfade.color = Vector3(10, 10, 10); + game.cleffect.screenfade.alpha = RandomInt(100, 200); + game.cleffect.screenfade.duration = Random(1, 3); + game.cleffect.screenfade.blendduration = Random(1, 3); + game.cleffect.screenfade.type = "fadein"; + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.3); + drunk_stumble(); + drunk_sway(); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(0.01); + DRUNK_SWAY_FORWARD++; + DRUNK_SWAY_FORWARD = max(MIN_SWAY, min(MAX_SWAY, DRUNK_SWAY_FORWARD)); + game.cleffect.view_ofs.pitch = DRUNK_SWAY_FORWARD; + DRUNK_SWAY_SIDE++; + DRUNK_SWAY_SIDE = max(MIN_SWAY, min(MAX_SWAY, DRUNK_SWAY_SIDE)); + game.cleffect.view_ofs.roll = DRUNK_SWAY_SIDE; + game.cleffect.move_ofs.forward = DRUNK_FORWARDMOVE; + game.cleffect.move_ofs.right = DRUNK_SIDEMOVE; + } + + void client_activate() + { + PARAM1("effect_die"); + } + + void drunk_sway() + { + DRUNK_SWAY_RATE++; + DRUNK_SWAY_RATE = max(MIN_SWAY_RATE, min(MAX_SWAY_RATE, DRUNK_SWAY_RATE)); + if (DRUNK_SWAY_SIDE >= MAX_SWAY_T) + { + DRUNK_SWAY_RATE--; + } + if (DRUNK_SWAY_SIDE <= MIN_SWAY_T) + { + DRUNK_SWAY_RATE++; + } + DRUNK_SWAY_RATE_F++; + DRUNK_SWAY_RATE_F = max(MIN_SWAY_RATE, min(MAX_SWAY_RATE, DRUNK_SWAY_RATE_F)); + if (DRUNK_SWAY_FORWARD >= MAX_SWAY_T) + { + DRUNK_SWAY_RATE_F--; + } + if (DRUNK_SWAY_FORWARD <= MIN_SWAY_T) + { + DRUNK_SWAY_RATE_F++; + } + } + + void drunk_stumble() + { + DRUNK_FORWARDMOVE++; + DRUNK_FORWARDMOVE = max(STUMBLE_BACK_MAX, min(STUMBLE_FORWARD_MAX, DRUNK_FORWARDMOVE)); + if (DRUNK_FORWARDMOVE >= STUMBLE_FORWARD_T) + { + DRUNK_FORWARDMOVE--; + } + if (DRUNK_FORWARDMOVE <= STUMBLE_BACK_T) + { + DRUNK_FORWARDMOVE++; + } + DRUNK_SIDEMOVE = DRUNK_SWAY_SIDE; + DRUNK_SIDEMOVE *= RandomInt(0, 20); + DRUNK_SIDEMOVE = max(STUMBLE_LEFT_MAX, min(STUMBLE_RIGHT_MAX, DRUNK_SIDEMOVE)); + if (DRUNK_SIDEMOVE >= STUMBLE_RIGHT_TRESHHOLD) + { + DRUNK_SIDEMOVE--; + } + if (DRUNK_SIDEMOVE <= STUMBLE_LEFT_TRESHHOLD) + { + DRUNK_SIDEMOVE++; + } + drunk_randomize_keys(); + } + + void drunk_randomize_keys() + { + game.cleffect.move_scale.forward = -1; + game.cleffect.move_scale.right = -1; + } + + void effect_die() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_explode.as b/scripts/angelscript/effects/sfx_explode.as new file mode 100644 index 00000000..92a44a97 --- /dev/null +++ b/scripts/angelscript/effects/sfx_explode.as @@ -0,0 +1,105 @@ +#pragma context server + +namespace MS +{ + +class SfxExplode : CGameScript +{ + int CYCLE_ANGLE; + string FX_CENTER; + float FX_DURATION; + string FX_RADIUS; + string SOUND_BURST; + string SPRITE_COLOR; + int SPRITE_FRAMERATE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + int SPRITE_RENDERAMT; + string SPRITE_RENDERMODE; + float SPRITE_SCALE; + int SPRITE_VOF; + + SfxExplode() + { + SPRITE_NAME = "explode1.spr"; + SPRITE_COLOR = Vector3(255, 128, 64); + SPRITE_RENDERAMT = 200; + SPRITE_RENDERMODE = "add"; + SPRITE_FRAMERATE = 30; + SPRITE_NFRAMES = 9; + SPRITE_SCALE = 1.0; + SPRITE_VOF = 32; + SOUND_BURST = "weapons/explode3.wav"; + } + + void client_activate() + { + FX_CENTER = param1; + FX_RADIUS = param2; + FX_DURATION = 1.0; + if (FX_RADIUS < 64) + { + FX_DURATION = 0.5; + } + if (FX_RADIUS > 256) + { + FX_DURATION = 2.0; + } + string L_FX_RADIUS = FX_RADIUS; + L_FX_RADIUS *= 2.0; + ClientEffect("light", "new", FX_CENTER, L_FX_RADIUS, SPRITE_COLOR, 2.0); + ScheduleDelayedEvent(3.0, "remove_me"); + CYCLE_ANGLE = 0; + for (int i = 0; i < 17; i++) + { + create_sprites(); + } + EmitSound3D(SOUND_BURST, 10, FX_CENTER); + } + + void remove_me() + { + RemoveScript(); + } + + void create_sprites() + { + string SPR_POS = FX_CENTER; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 1, SPRITE_VOF)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPR_POS, "setup_sprite", "update_sprite"); + CYCLE_ANGLE += 20; + } + + void update_sprite() + { + string SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string MY_ANGLE = "game.tempent.fuser1"; + MY_ANGLE += 20; + if (MY_ANGLE > 359) + { + int MY_ANGLE = 0; + } + ClientEffect("tempent", "set_current_prop", "fuser1", MY_ANGLE); + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, MY_ANGLE, 0), Vector3(0, FX_RADIUS, SPRITE_VOF)); + } + + void setup_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "renderamt", SPRITE_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "rendermode", SPRITE_RENDERMODE); + ClientEffect("tempent", "set_current_prop", "framerate", SPRITE_FRAMERATE); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "fuser1", CYCLE_ANGLE); + string SPRITE_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 200, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", SPRITE_VEL); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_fire_burst.as b/scripts/angelscript/effects/sfx_fire_burst.as new file mode 100644 index 00000000..6dbe2d5d --- /dev/null +++ b/scripts/angelscript/effects/sfx_fire_burst.as @@ -0,0 +1,90 @@ +#pragma context client + +namespace MS +{ + +class SfxFireBurst : CGameScript +{ + int CYCLE_ANGLE; + string FX_CENTER; + string FX_RADIUS; + string SOUND_BURST; + string SPRITE_COLOR; + int SPRITE_FRAMERATE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + int SPRITE_RENDERAMT; + string SPRITE_RENDERMODE; + float SPRITE_SCALE; + + SfxFireBurst() + { + SPRITE_NAME = "fire1_fixed.spr"; + SPRITE_COLOR = Vector3(255, 255, 255); + SPRITE_RENDERAMT = 200; + SPRITE_RENDERMODE = "add"; + SPRITE_FRAMERATE = 30; + SPRITE_NFRAMES = 23; + SPRITE_SCALE = 1.0; + SOUND_BURST = "ambience/steamburst1.wav"; + Precache(SOUND_BURST); + } + + void client_activate() + { + FX_CENTER = param1; + FX_RADIUS = param2; + string DO_GLOW = param3; + string GLOW_COLOR = param4; + if ((DO_GLOW)) + { + ClientEffect("light", "new", FX_CENTER, FX_RADIUS, GLOW_COLOR, 1.0); + } + ScheduleDelayedEvent(3.0, "remove_me"); + CYCLE_ANGLE = 0; + for (int i = 0; i < 17; i++) + { + create_sprites(); + } + EmitSound3D(SOUND_BURST, 10, FX_CENTER); + } + + void remove_me() + { + RemoveScript(); + } + + void create_sprites() + { + string SPR_POS = FX_CENTER; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 10, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPR_POS, "setup_ring_sprite"); + CYCLE_ANGLE += 20; + } + + void setup_ring_sprite() + { + float FADE_DEL = 1.0; + int SPRITE_SPEED = 100; + if (FX_RADIUS > 128) + { + float FADE_DEL = 2.0; + int SPRITE_SPEED = 400; + } + ClientEffect("tempent", "set_current_prop", "death_delay", FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "renderamt", SPRITE_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "rendermode", SPRITE_RENDERMODE); + ClientEffect("tempent", "set_current_prop", "framerate", SPRITE_FRAMERATE); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_fire_staff.as b/scripts/angelscript/effects/sfx_fire_staff.as new file mode 100644 index 00000000..15e70284 --- /dev/null +++ b/scripts/angelscript/effects/sfx_fire_staff.as @@ -0,0 +1,55 @@ +#pragma context server + +namespace MS +{ + +class SfxFireStaff : CGameScript +{ + void client_activate() + { + string FX_ORIGIN = param1; + EmitSound3D("magic/dragon_fire.wav", 10, FX_ORIGIN); + ClientEffect("light", "new", FX_ORIGIN, 128, Vector3(255, 128, 64), 1.5); + ClientEffect("tempent", "model", "weapons/magic/seals.mdl", FX_ORIGIN, "setup_seal"); + FX_ORIGIN += "z"; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", FX_ORIGIN, "setup_fire_ring"); + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_seal() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.5); + ClientEffect("tempent", "set_current_prop", "fade", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", 1); + ClientEffect("tempent", "set_current_prop", "frames", 39); + } + + void setup_fire_ring() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.5); + ClientEffect("tempent", "set_current_prop", "body", 51); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "scale", 4.5); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_fire_wave.as b/scripts/angelscript/effects/sfx_fire_wave.as new file mode 100644 index 00000000..5fe78a55 --- /dev/null +++ b/scripts/angelscript/effects/sfx_fire_wave.as @@ -0,0 +1,96 @@ +#pragma context client + +namespace MS +{ + +class SfxFireWave : CGameScript +{ + string FX_ORG; + string FX_YAW; + string GLOW_COLOR; + string SPRITE_COLOR; + int SPRITE_FRAMERATE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + string SPRITE_OFS; + int SPRITE_RENDERAMT; + string SPRITE_RENDERMODE; + float SPRITE_SCALE; + int SPRITE_STEP; + + SfxFireWave() + { + SPRITE_NAME = "fire1_fixed.spr"; + SPRITE_COLOR = Vector3(255, 255, 255); + SPRITE_RENDERAMT = 200; + SPRITE_RENDERMODE = "add"; + SPRITE_FRAMERATE = 30; + SPRITE_NFRAMES = 23; + SPRITE_SCALE = 2.0; + GLOW_COLOR = Vector3(255, 128, 0); + } + + void client_activate() + { + FX_ORG = param1; + FX_YAW = param2; + ClientEffect("light", "new", FX_ORG, 128, GLOW_COLOR, 4.0); + SPRITE_STEP = 0; + setup_fire_wave(); + } + + void setup_fire_wave() + { + string N_SPRITES = SPRITE_STEP; + N_SPRITES += 1; + SPRITE_OFS = SPRITE_STEP; + SPRITE_OFS *= -32; + for (int i = 0; i < N_SPRITES; i++) + { + setup_fire_sprites(); + } + SPRITE_STEP += 1; + if (SPRITE_STEP == 12) + { + ScheduleDelayedEvent(5.0, "remove_fx"); + } + if (!(SPRITE_STEP < 12)) return; + ScheduleDelayedEvent(0.25, "setup_fire_wave"); + } + + void setup_fire_sprites() + { + string SPR_POS = FX_ORG; + string ROW_OFS = SPRITE_STEP; + ROW_OFS *= 32; + string COL_OFS = i; + COL_OFS *= 32; + SPRITE_OFS += COL_OFS; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, FX_YAW, 0), Vector3(SPRITE_OFS, ROW_OFS, 0)); + string GROUND_POS = /* TODO: $get_ground_height */ $get_ground_height(SPR_POS); + SPR_POS = "z"; + ClientEffect("tempent", "sprite", SPRITE_NAME, SPR_POS, "setup_fire_sprite"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_fire_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 4.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "renderamt", SPRITE_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "rendermode", SPRITE_RENDERMODE); + ClientEffect("tempent", "set_current_prop", "framerate", SPRITE_FRAMERATE); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_fire_wave2.as b/scripts/angelscript/effects/sfx_fire_wave2.as new file mode 100644 index 00000000..a8772ff4 --- /dev/null +++ b/scripts/angelscript/effects/sfx_fire_wave2.as @@ -0,0 +1,36 @@ +#pragma context client + +#include "effects/sfx_ice_wave2.as" + +namespace MS +{ + +class SfxFireWave2 : CGameScript +{ + string SOUND_BURST; + string SPRITE_COLOR; + int SPRITE_FRAMERATE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + int SPRITE_RENDERAMT; + string SPRITE_RENDERMODE; + float SPRITE_SCALE; + int SPRITE_SPEED; + + SfxFireWave2() + { + SPRITE_NAME = "fire1_fixed.spr"; + SPRITE_COLOR = Vector3(255, 128, 64); + SPRITE_RENDERAMT = 200; + SPRITE_RENDERMODE = "add"; + SPRITE_FRAMERATE = 30; + SPRITE_NFRAMES = 23; + SPRITE_SCALE = 1.75; + SPRITE_SPEED = 400; + SOUND_BURST = "ambience/steamburst1.wav"; + Precache(SOUND_BURST); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_fissure.as b/scripts/angelscript/effects/sfx_fissure.as new file mode 100644 index 00000000..88254ad3 --- /dev/null +++ b/scripts/angelscript/effects/sfx_fissure.as @@ -0,0 +1,238 @@ +#pragma context server + +namespace MS +{ + +class SfxFissure : CGameScript +{ + string BEAM_DIR; + string BEAM_END; + string BEAM_START; + int FISSURE_ACTIVE; + int FISSURE_COUNT; + string FISSURE_END; + string FISSURE_LENGTH; + string FISSURE_START; + string FISSURE_YAW; + int FLIP_SPRITE; + int FX_ACTIVE; + float LEFT_ADJ_LARGE; + float LEFT_ADJ_SMALL; + string NO_FIRE; + string NO_ROCKS; + string ORG_FISSURE_START; + float RIGHT_ADJ_LARGE; + float RIGHT_ADJ_SMALL; + string ROCK_BODY; + string ROCK_SCALE; + string ROCK_VELOCITY; + float SCALE_ROCK_LARGE; + float SCALE_ROCK_SMALL; + + SfxFissure() + { + SCALE_ROCK_LARGE = Random(5.5, 7.5); + RIGHT_ADJ_LARGE = Random(20, 22); + LEFT_ADJ_LARGE = Random(-20, -22); + SCALE_ROCK_SMALL = Random(5.5, 7.5); + RIGHT_ADJ_SMALL = Random(35, 50); + LEFT_ADJ_SMALL = Random(-35, -50); + } + + void client_activate() + { + FISSURE_START = param1; + ORG_FISSURE_START = FISSURE_START; + FISSURE_YAW = param2; + FISSURE_END = param3; + FISSURE_LENGTH = param4; + NO_ROCKS = param5; + NO_FIRE = param6; + FISSURE_COUNT = 0; + FISSURE_ACTIVE = 1; + FX_ACTIVE = 1; + fissure_loop(); + ScheduleDelayedEvent(4.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void fissure_loop() + { + if (!(FISSURE_ACTIVE)) return; + ScheduleDelayedEvent(0.135, "fissure_loop"); + fissure_debri(); + DRAWN_FISSURE_LENGTH += 64; + if (DRAWN_FISSURE_LENGTH >= FISSURE_LENGTH) + { + LogDebug("fissure_stopped FISSURE_COUNT"); + FISSURE_ACTIVE = 0; + } + FISSURE_COUNT += 1; + if (FISSURE_COUNT == 16) + { + FISSURE_ACTIVE = 0; + } + } + + void fissure_debri() + { + if (!(Distance(FISSURE_START, ORG_FISSURE_START) < FISSURE_LENGTH)) return; + BEAM_START = FISSURE_START; + BEAM_DIR = (FISSURE_END - BEAM_START).Normalize(); + BEAM_END = FISSURE_START; + BEAM_END += "z"; + BEAM_DIR *= 48; + BEAM_END += BEAM_DIR; + FISSURE_START = BEAM_END; + FISSURE_START = "z"; + string DEF_LINE_CENTER = BEAM_END; + DEF_LINE_CENTER = "z"; + if (!(NO_ROCKS)) + { + string LINE_CENTER = DEF_LINE_CENTER; + string RND_LR = RIGHT_ADJ_LARGE; + float RND_FB = Random(-8.0, 8.0); + ROCK_SCALE = SCALE_ROCK_LARGE; + ROCK_BODY = 0; + ROCK_VELOCITY = Vector3(0, 0, 0); + LINE_CENTER += /* TODO: $relpos */ $relpos(Vector3(0, FISSURE_YAW, 0), Vector3(RND_LR, RND_FB, 0)); + LINE_CENTER = "z"; + ClientEffect("tempent", "model", "rockgibs.mdl", LINE_CENTER, "setup_rock", "update_rock"); + string LINE_CENTER = DEF_LINE_CENTER; + string RND_LR = LEFT_ADJ_LARGE; + float RND_FB = Random(-8.0, 8.0); + ROCK_SCALE = SCALE_ROCK_LARGE; + ROCK_BODY = 0; + ROCK_VELOCITY = Vector3(0, 0, 0); + LINE_CENTER += /* TODO: $relpos */ $relpos(Vector3(0, FISSURE_YAW, 0), Vector3(RND_LR, RND_FB, 0)); + LINE_CENTER = "z"; + ClientEffect("tempent", "model", "rockgibs.mdl", LINE_CENTER, "setup_rock", "update_rock"); + string LINE_CENTER = DEF_LINE_CENTER; + string RND_LR = RIGHT_ADJ_SMALL; + float RND_FB = Random(-16.0, 16.0); + ROCK_SCALE = SCALE_ROCK_SMALL; + ROCK_BODY = RandomInt(1, 2); + ROCK_VELOCITY = /* TODO: $relvel */ $relvel(Vector3(0, FISSURE_YAW, 0), RND_LR, ",", RND_FB, ",", 120); + LINE_CENTER += /* TODO: $relpos */ $relpos(Vector3(0, FISSURE_YAW, 0), Vector3(RND_LR, RND_FB, 0)); + LINE_CENTER = "z"; + ClientEffect("tempent", "model", "rockgibs.mdl", LINE_CENTER, "setup_rock", "update_rock"); + string LINE_CENTER = DEF_LINE_CENTER; + string RND_LR = LEFT_ADJ_SMALL; + float RND_FB = Random(-16.0, 16.0); + ROCK_SCALE = SCALE_ROCK_SMALL; + ROCK_BODY = RandomInt(1, 2); + ROCK_VELOCITY = /* TODO: $relvel */ $relvel(Vector3(0, FISSURE_YAW, 0), RND_LR, ",", RND_FB, ",", 120); + LINE_CENTER += /* TODO: $relpos */ $relpos(Vector3(0, FISSURE_YAW, 0), Vector3(RND_LR, RND_FB, 0)); + LINE_CENTER = "z"; + ClientEffect("tempent", "model", "rockgibs.mdl", LINE_CENTER, "setup_rock", "update_rock"); + string LINE_CENTER = DEF_LINE_CENTER; + string RND_LR = RIGHT_ADJ_SMALL; + float RND_FB = Random(-16.0, 16.0); + ROCK_SCALE = SCALE_ROCK_SMALL; + ROCK_BODY = RandomInt(1, 2); + ROCK_VELOCITY = /* TODO: $relvel */ $relvel(Vector3(0, FISSURE_YAW, 0), RND_LR, ",", RND_FB, ",", 120); + LINE_CENTER += /* TODO: $relpos */ $relpos(Vector3(0, FISSURE_YAW, 0), Vector3(RND_LR, RND_FB, 0)); + LINE_CENTER = "z"; + ClientEffect("tempent", "model", "rockgibs.mdl", LINE_CENTER, "setup_rock", "update_rock"); + string LINE_CENTER = DEF_LINE_CENTER; + string RND_LR = LEFT_ADJ_SMALL; + float RND_FB = Random(-16.0, 16.0); + ROCK_SCALE = SCALE_ROCK_SMALL; + ROCK_BODY = RandomInt(1, 2); + ROCK_VELOCITY = /* TODO: $relvel */ $relvel(Vector3(0, FISSURE_YAW, 0), RND_LR, ",", RND_FB, ",", 120); + LINE_CENTER += /* TODO: $relpos */ $relpos(Vector3(0, FISSURE_YAW, 0), Vector3(RND_LR, RND_FB, 0)); + LINE_CENTER = "z"; + ClientEffect("tempent", "model", "rockgibs.mdl", LINE_CENTER, "setup_rock", "update_rock"); + } + if ((NO_FIRE)) return; + FLIP_SPRITE = 0; + string L_FIRE_POS = DEF_LINE_CENTER; + L_FIRE_POS = "z"; + ClientEffect("tempent", "sprite", "fire1_fixed2.spr", L_FIRE_POS, "setup_fire", "update_fire"); + FLIP_SPRITE = 1; + ClientEffect("tempent", "sprite", "fire1_fixed2.spr", L_FIRE_POS, "setup_fire", "update_fire"); + } + + void update_rock() + { + string CUR_REND = "game.tempent.fuser1"; + string FADE_TIME = "game.tempent.fuser2"; + if (!(CUR_REND > 0)) return; + if (!(GetGameTime() >= FADE_TIME)) return; + CUR_REND -= 5; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_REND); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", CUR_REND); + } + + void setup_rock() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 4.0); + ClientEffect("tempent", "set_current_prop", "scale", ROCK_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 2); + ClientEffect("tempent", "set_current_prop", "velocity", ROCK_VELOCITY); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 50); + ClientEffect("tempent", "set_current_prop", "body", ROCK_BODY); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + float RND_YAW = Random(0.0, 359.99); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, RND_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "fuser1", 255); + float FADE_START = GetGameTime(); + FADE_START += 3.0; + ClientEffect("tempent", "set_current_prop", "fuser2", FADE_START); + } + + void update_fire() + { + string CUR_SIZE = "game.tempent.fuser1"; + CUR_SIZE -= 0.01; + if (!(CUR_SIZE > 0)) return; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + + void setup_fire() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "frames", 23); + string L_YAW = FISSURE_YAW; + L_YAW += 90; + if (L_YAW > 359.99) + { + L_YAW -= 359.99; + } + if ((FLIP_SPRITE)) + { + L_YAW += 180; + if (L_YAW > 359.99) + { + L_YAW -= 359.99; + } + } + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, L_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "scale", 4.0); + ClientEffect("tempent", "set_current_prop", "fuser1", 4.0); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_flame_repulse.as b/scripts/angelscript/effects/sfx_flame_repulse.as new file mode 100644 index 00000000..b0b388d2 --- /dev/null +++ b/scripts/angelscript/effects/sfx_flame_repulse.as @@ -0,0 +1,54 @@ +#pragma context server + +namespace MS +{ + +class SfxFlameRepulse : CGameScript +{ + string FX_CENTER; + + void client_activate() + { + FX_CENTER = param1; + ClientEffect("light", "new", FX_CENTER, 512, Vector3(255, 128, 64), 1.0); + ClientEffect("tempent", "sprite", "weapons/projectiles.mdl", FX_CENTER, "setup_repulse_burst", "update_repulse_burst"); + EmitSound3D("magic/boom.wav", 10, FX_CENTER); + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_repulse_burst() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (!(CUR_SCALE < 15)) return; + CUR_SCALE += 0.5; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + + void setup_repulse_burst() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.5); + ClientEffect("tempent", "set_current_prop", "body", 51); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_flames.as b/scripts/angelscript/effects/sfx_flames.as new file mode 100644 index 00000000..4883f465 --- /dev/null +++ b/scripts/angelscript/effects/sfx_flames.as @@ -0,0 +1,106 @@ +#pragma context client + +namespace MS +{ + +class SfxFlames : CGameScript +{ + string DO_GLOW; + string FLAME_SPR; + int FX_ACTIVE; + string FX_DURATION; + string FX_MODEL; + string GLOW_COLOR; + int GLOW_RAD; + string IS_DARK; + string LIGHT_ID; + string MODEL_HEIGHT; + string MODEL_WIDTH; + string OFS_MAX; + string OFS_MIN; + + SfxFlames() + { + GLOW_RAD = 128; + GLOW_COLOR = Vector3(255, 255, 128); + FLAME_SPR = "fire1_fixed.spr"; + } + + void client_activate() + { + FX_MODEL = param1; + FX_DURATION = param2; + MODEL_HEIGHT = param3; + DO_GLOW = param4; + IS_DARK = param5; + MODEL_WIDTH = param6; + string L_MODEL_WIDTH = MODEL_WIDTH; + if ((MODEL_WIDTH).findFirst(PARAM) == 0) + { + int L_MODEL_WIDTH = 32; + } + if (MODEL_WIDTH == 0) + { + int L_MODEL_WIDTH = 32; + } + L_MODEL_WIDTH *= 0.5; + OFS_MAX = L_MODEL_WIDTH; + OFS_MIN = /* TODO: $neg */ $neg(L_MODEL_WIDTH); + FX_ACTIVE = 1; + if ((DO_GLOW)) + { + SetCallback("render", "enable"); + if ((IS_DARK)) + { + GLOW_COLOR = Vector3(255, 0, 128); + } + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + LIGHT_ID = "game.script.last_light_id"; + } + FX_DURATION("effect_die"); + drip_flames(); + } + + void drip_flames() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.4, "drip_flames"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_MODEL, "origin"); + SPR_POS += Vector3(Random(OFS_MIN, OFS_MAX), Random(OFS_MIN, OFS_MAX), Random(0, MODEL_HEIGHT)); + ClientEffect("tempent", "sprite", FLAME_SPR, SPR_POS, "setup_sprite1_flame"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + if (!(DO_GLOW)) return; + string L_POS = /* TODO: $getcl */ $getcl(FX_MODEL, "origin"); + ClientEffect("light", LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void effect_die() + { + FX_ACTIVE = 0; + RemoveScript(); + } + + void setup_sprite1_flame() + { + ClientEffect("tempent", "set_current_prop", "death_delay", Random(0.4, 0.6)); + ClientEffect("tempent", "set_current_prop", "framerate", 25); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-4, 4), Random(-4, 4), 0)); + ClientEffect("tempent", "set_current_prop", "frames", 20); + ClientEffect("tempent", "set_current_prop", "scale", 0.75); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + if ((IS_DARK)) + { + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 0, 255)); + } + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_follow_glow_cl.as b/scripts/angelscript/effects/sfx_follow_glow_cl.as new file mode 100644 index 00000000..4f47f3ed --- /dev/null +++ b/scripts/angelscript/effects/sfx_follow_glow_cl.as @@ -0,0 +1,39 @@ +#pragma context client + +namespace MS +{ + +class SfxFollowGlowCl : CGameScript +{ + string GLOW_COLOR; + string GLOW_RAD; + string SKEL_ID; + string SKEL_LIGHT_ID; + + void client_activate() + { + SKEL_ID = param1; + GLOW_COLOR = param2; + GLOW_RAD = param3; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + PARAM4("remove_light"); + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(SKEL_ID, "exists"))) return; + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void remove_light() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_gib_burst.as b/scripts/angelscript/effects/sfx_gib_burst.as new file mode 100644 index 00000000..342960ae --- /dev/null +++ b/scripts/angelscript/effects/sfx_gib_burst.as @@ -0,0 +1,94 @@ +#pragma context client + +namespace MS +{ + +class SfxGibBurst : CGameScript +{ + string FX_AMT; + string FX_DURATION; + string FX_FORCE; + string FX_MODELS; + string FX_ORIGIN; + string FX_RENDER_PROPS; + string FX_SUBMODELS; + float GIB_BOUNCE_FACTOR; + string GIB_COLLISION; + int GIB_DIE_ON_COLLIDE; + float GIB_GRAV; + string GIB_RENDER_FX; + + SfxGibBurst() + { + GIB_BOUNCE_FACTOR = 1.3; + GIB_GRAV = 0.7; + GIB_COLLISION = "world"; + GIB_DIE_ON_COLLIDE = 0; + GIB_RENDER_FX = "normal"; + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_MODELS = param2; + FX_SUBMODELS = param3; + FX_RENDER_PROPS = param4; + FX_AMT = param5; + FX_FORCE = param6; + FX_DURATION = param7; + ScheduleDelayedEvent(0.01, "start_gibs"); + FX_DURATION("remove_me"); + } + + void start_gibs() + { + for (int i = 0; i < FX_AMT; i++) + { + create_gibs(); + } + } + + void create_gibs() + { + ClientEffect("tempent", "model", GetRandomToken(FX_MODELS, ";"), FX_ORIGIN, "setup_gib", "update_gib"); + } + + void setup_gib() + { + int L_PITCH = RandomInt(0, 359); + int L_YAW = RandomInt(0, 359); + int L_ROLL = RandomInt(0, 359); + Vector3 L_ANG = Vector3(L_PITCH, L_YAW, 0); + ClientEffect("tempent", "set_current_prop", "body", GetRandomToken(FX_SUBMODELS, ";")); + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + if (GetToken(FX_RENDER_PROPS, 0, ";") == 1) + { + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + ClientEffect("tempent", "set_current_prop", "scale", GetToken(FX_RENDER_PROPS, 1, ";")); + ClientEffect("tempent", "set_current_prop", "renderamt", GetToken(FX_RENDER_PROPS, 2, ";")); + ClientEffect("tempent", "set_current_prop", "rendermode", GetToken(FX_RENDER_PROPS, 3, ";")); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(RandomInt(0, 359), RandomInt(0, 90), 0), FX_FORCE)); + ClientEffect("tempent", "set_current_prop", "bouncefactor", GIB_BOUNCE_FACTOR); + ClientEffect("tempent", "set_current_prop", "gravity", GIB_GRAV); + ClientEffect("tempent", "set_current_prop", "renderfx", GIB_RENDER_FX); + ClientEffect("tempent", "set_current_prop", "collide", GIB_COLLISION); + if ((GIB_DIE_ON_COLLIDE)) + { + ClientEffect("tempent", "set_current_prop", "collide", "die"); + } + ClientEffect("tempent", "set_current_prop", "angles", L_ANG); + } + + void update_gib() + { + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_hit_shield.as b/scripts/angelscript/effects/sfx_hit_shield.as new file mode 100644 index 00000000..e66fba4a --- /dev/null +++ b/scripts/angelscript/effects/sfx_hit_shield.as @@ -0,0 +1,80 @@ +#pragma context client + +namespace MS +{ + +class SfxHitShield : CGameScript +{ + string FX_COLOR; + string FX_DURATION; + string FX_ORIGIN; + string FX_SCALE; + string FX_SPRITE; + int FX_SPRITE_FRAMES; + string FX_YAW; + + SfxHitShield() + { + FX_SPRITE = "rain_ripple.spr"; + FX_SPRITE_FRAMES = 15; + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_YAW = param2; + FX_COLOR = param3; + FX_SCALE = param4; + FX_DURATION = param5; + ClientEffect("tempent", "sprite", FX_SPRITE, FX_ORIGIN, "setup_sprite"); + ClientEffect("tempent", "sprite", FX_SPRITE, FX_ORIGIN, "setup_sprite_negyaw"); + FX_DURATION("end_fx"); + } + + void end_fx() + { + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void setup_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_COLOR); + ClientEffect("tempent", "set_current_prop", "scale", FX_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, FX_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", FX_SPRITE_FRAMES); + } + + void setup_sprite_negyaw() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_COLOR); + ClientEffect("tempent", "set_current_prop", "scale", FX_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string NEG_YAW = FX_YAW; + NEG_YAW += 180; + if (NEG_YAW > 359.99) + { + NEG_YAW -= 359.99; + } + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, NEG_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", FX_SPRITE_FRAMES); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_ice_burst.as b/scripts/angelscript/effects/sfx_ice_burst.as new file mode 100644 index 00000000..b6e1a7d7 --- /dev/null +++ b/scripts/angelscript/effects/sfx_ice_burst.as @@ -0,0 +1,22 @@ +#pragma context client + +#include "effects/sfx_fire_burst.as" + +namespace MS +{ + +class SfxIceBurst : CGameScript +{ + string SOUND_BURST; + string SPRITE_COLOR; + + SfxIceBurst() + { + SPRITE_COLOR = Vector3(64, 64, 255); + SOUND_BURST = "magic/frost_reverse.wav"; + Precache(SOUND_BURST); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_ice_wave2.as b/scripts/angelscript/effects/sfx_ice_wave2.as new file mode 100644 index 00000000..112d884f --- /dev/null +++ b/scripts/angelscript/effects/sfx_ice_wave2.as @@ -0,0 +1,103 @@ +#pragma context client + +namespace MS +{ + +class SfxIceWave2 : CGameScript +{ + int ANG_COUNT; + string ANG_INC; + int CUR_YAW; + string FX_ANGLE1; + string FX_ANGLE2; + string FX_ORIGIN; + string FX_WIDTH; + string FX_YAW; + string SOUND_BURST; + string SPRITE_COLOR; + int SPRITE_FRAMERATE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + int SPRITE_RENDERAMT; + string SPRITE_RENDERMODE; + float SPRITE_SCALE; + int SPRITE_SPEED; + + SfxIceWave2() + { + SPRITE_NAME = "fire1_fixed.spr"; + SPRITE_COLOR = Vector3(64, 64, 255); + SPRITE_RENDERAMT = 200; + SPRITE_RENDERMODE = "add"; + SPRITE_FRAMERATE = 30; + SPRITE_NFRAMES = 23; + SPRITE_SCALE = 1.5; + SPRITE_SPEED = 400; + SOUND_BURST = "magic/frost_reverse.wav"; + Precache(SOUND_BURST); + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_YAW = param2; + FX_WIDTH = param3; + FX_ANGLE1 = FX_YAW; + FX_ANGLE1 -= FX_WIDTH; + if (FX_ANGLE1 < 0) + { + FX_ANGLE1 += 359.99; + } + FX_ANGLE2 = FX_YAW; + FX_ANGLE2 += FX_WIDTH; + if (FX_ANGLE2 > 359.99) + { + FX_ANGLE2 -= 359.99; + } + ANG_COUNT = 0; + CUR_YAW = 0; + ANG_INC = FX_WIDTH; + ANG_INC *= 2; + ANG_INC /= 20; + EmitSound3D(SOUND_BURST, 10, FX_ORIGIN); + for (int i = 0; i < 20; i++) + { + make_sprites(); + } + ScheduleDelayedEvent(4.0, "remove_fx"); + } + + void make_sprites() + { + CUR_YAW = FX_ANGLE1; + CUR_YAW += ANG_COUNT; + string SPR_POS = FX_ORIGIN; + SPR_POS += Vector3(0, 0, 0); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPR_POS, "setup_ring_sprite"); + ANG_COUNT += ANG_INC; + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_ring_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "renderamt", SPRITE_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "rendermode", SPRITE_RENDERMODE); + ClientEffect("tempent", "set_current_prop", "framerate", SPRITE_FRAMERATE); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CUR_YAW, 0), Vector3(0, SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_icecage.as b/scripts/angelscript/effects/sfx_icecage.as new file mode 100644 index 00000000..d5660d81 --- /dev/null +++ b/scripts/angelscript/effects/sfx_icecage.as @@ -0,0 +1,118 @@ +#pragma context client + +namespace MS +{ + +class SfxIcecage : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + LogDebug("**** sfx_icecage FX_OWNER FX_DURATION"); + ClientEffect("tempent", "sprite", "misc/treasure.mdl", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_icecage", "update_icecage"); + FX_DURATION("end_cage_fx"); + } + + void end_cage_fx() + { + LogDebug("**** end_fx"); + EmitSound3D("debris/bustglass2.wav", 5, /* TODO: $getcl */ $getcl(FX_OWNER, "origin")); + for (int i = 0; i < RandomInt(8, 10); i++) + { + do_gibs(); + } + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.1, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void do_gibs() + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + if (!(/* TODO: $getcl */ $getcl(FX_OWNER, "isplayer"))) + { + SPR_POS += "z"; + } + ClientEffect("tempent", "sprite", "glassgibs.mdl", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_gibs"); + } + + void update_icecage() + { + if ((FX_ACTIVE)) + { + string CAGE_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + if ((/* TODO: $getcl */ $getcl(FX_OWNER, "isplayer"))) + { + CAGE_ORG += "z"; + } + if (/* TODO: $get_contents */ $get_contents(CAGE_ORG) != "empty") + { + CAGE_ORG += "z"; + } + ClientEffect("tempent", "set_current_prop", "origin", CAGE_ORG); + } + else + { + ClientEffect("tempent", "set_current_prop", "rendermode", 5); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + ClientEffect("tempent", "set_current_prop", "death_delay", /* TODO: $neg */ $neg(FX_DURATION)); + ClientEffect("tempent", "set_current_prop", "fadeout", 0); + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + } + + void setup_icecage() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 4); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "scale", 1); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 1); + string FADE_TIME = FX_DURATION; + FADE_TIME += 5.0; + ClientEffect("tempent", "set_current_prop", "fadeout", FADE_TIME); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + + void setup_gibs() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "body", RandomInt(0, 6)); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.75, 1.25)); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 1); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(RandomInt(0, 359), RandomInt(0, 359), 0)); + float RND_ANG = Random(0, 359.99); + float RND_SPRING = Random(150, 350); + float RND_SWING = Random(-100, 100); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(RND_SWING, 0, RND_SPRING))); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_icecage_old.as b/scripts/angelscript/effects/sfx_icecage_old.as new file mode 100644 index 00000000..22489d47 --- /dev/null +++ b/scripts/angelscript/effects/sfx_icecage_old.as @@ -0,0 +1,60 @@ +#pragma context server + +namespace MS +{ + +class SfxIcecageOld : CGameScript +{ + int rheight; + string script.owner; + int script.tilt; + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + snap_to_owner(); + } + + void game_dynamically_created() + { + script.owner = param1; + script.tilt = 1; + string MY_DURATION = param2; + string MY_OWNER = param1; + LogDebug("ice cage spawn"); + CallExternal(MY_OWNER, "freeze_solid_start", MY_DURATION); + SetModel("weapons/magic/icecage.mdl"); + SetProp(GetOwner(), "movetype", "const.movetype.noclip"); + SetProp(GetOwner(), "solid", 0); + SetAngles("angles.z"); + SetFly(true); + SetInvincible(true); + PlayAnim("once", "idle"); + SetAnimFrameRate(0); + snap_to_owner(); + set_tilt(); + PARAM2("die"); + } + + void snap_to_owner() + { + string l.pos = GetEntityOrigin(script.owner); + rheight = 0; + if (IsValidPlayer(script.owner) == 1) + { + rheight = 0; + l.pos += Vector3(0, 0, rheight); + } + SetEntityOrigin(GetOwner(), l.pos); + if ((IsEntityAlive(script.owner))) return; + } + + void die() + { + SetProp(GetOwner(), "avelocity", Vector3(0, 0, 0)); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_jump_beams.as b/scripts/angelscript/effects/sfx_jump_beams.as new file mode 100644 index 00000000..51a1760c --- /dev/null +++ b/scripts/angelscript/effects/sfx_jump_beams.as @@ -0,0 +1,284 @@ +#pragma context server + +namespace MS +{ + +class SfxJumpBeams : CGameScript +{ + string BEAM_TARG; + int BONE_BEAM_WIDTH; + int CUR_JUMPS; + int FX_ACTIVE; + string FX_OWNER; + string FX_SCRIPT_ID; + string FX_TARGET; + int GOT_NEW_TARG; + int JUMP_BEAM_WIDTH; + int MAX_JUMPS; + string OLD_TARG; + string SOUND_IDLEZAP1; + string SOUND_IDLEZAP2; + string SOUND_IDLEZAP3; + string SOUND_ZAP_TARG; + int STATIC_ACTIVE; + int SWIRL_ACTIVE; + int SWIRL_ROT; + + SfxJumpBeams() + { + MAX_JUMPS = 6; + CUR_JUMPS = 0; + BONE_BEAM_WIDTH = 5; + JUMP_BEAM_WIDTH = 10; + SOUND_IDLEZAP1 = "debris/zap4.wav"; + SOUND_IDLEZAP2 = "debris/zap2.wav"; + SOUND_IDLEZAP3 = "debris/zap5.wav"; + SOUND_ZAP_TARG = "magic/lightning_strike2.wav"; + } + + void OnSpawn() override + { + SetName("Swirly Lightning Effect :)"); + SetModel("null.mdl"); + SetRace("beloved"); + SetInvincible(true); + SetHeight(0); + SetWidth(0); + SetSolid("none"); + ScheduleDelayedEvent(120.0, "end_me_please"); + } + + void game_dynamically_created() + { + FX_TARGET = param1; + FX_OWNER = param2; + ClientEvent("new", "all", GetScriptName(GetOwner()), GetEntityOrigin(FX_OWNER)); + FX_SCRIPT_ID = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.1, "jump_beam"); + } + + void jump_beam() + { + if (CUR_JUMPS != 0) + { + if ((FX_TARGET).findFirst("(") == 0) + { + scan_target(GetEntityOrigin(FX_TARGET)); + } + else + { + scan_target(FX_TARGET); + } + } + if ((FX_TARGET).findFirst("(") == 0) + { + beam_damage(); + ClientEvent("update", "all", FX_SCRIPT_ID, "beam_jump", GetEntityIndex(FX_TARGET)); + } + else + { + ClientEvent("update", "all", FX_SCRIPT_ID, "beam_jump", FX_TARGET); + } + CUR_JUMPS += 1; + if (CUR_JUMPS >= MAX_JUMPS) + { + ScheduleDelayedEvent(2.0, "end_me_please"); + } + else + { + ScheduleDelayedEvent(2.0, "jump_beam"); + } + } + + void scan_target() + { + string SCAN_ORG = param1; + SCAN_ORG = "z"; + SCAN_ORG += 32; + CallExternal(FX_OWNER, "ext_sphere_token", "enemy", 270, SCAN_ORG); + string BEAM_TARGS = GetEntityProperty(FX_OWNER, "scriptvar"); + int DO_RANDOM_JUMP = 0; + if (BEAM_TARGS != "none") + { + string BEAM_TARGS = /* TODO: $sort_entlist */ $sort_entlist(BEAM_TARGS, "range", SCAN_ORG); + string CUR_TARG = GetToken(BEAM_TARGS, 0, ";"); + string N_TARGS = GetTokenCount(BEAM_TARGS, ";"); + if (N_TARGS > 1) + { + string CUR_TARG = GetToken(BEAM_TARGS, 1, ";"); + } + if (CUR_TARG == FX_TARGET) + { + int DO_RANDOM_JUMP = 1; + } + FX_TARGET = CUR_TARG; + } + else + { + int DO_RANDOM_JUMP = 1; + } + if ((DO_RANDOM_JUMP)) + { + if ((FX_TARGET).findFirst("(") == 0) + { + FX_TARGET = GetEntityOrigin(FX_TARGET); + } + string L_OLD_TARG = FX_TARGET; + FX_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(0, 270, 32)); + FX_TARGET = TraceLine(L_OLD_TARG, FX_TARGET); + } + } + + void beam_damage() + { + string L_DMG = GetSkillLevel(FX_OWNER, "spellcasting.lightning"); + string L_DMG_DIRECT = L_DMG; + L_DMG_DIRECT *= 3; + XDoDamage(FX_TARGET, "direct", L_DMG_DIRECT, 1.0, FX_OWNER, FX_OWNER, "spellcasting.lightning", "lightning_effect"); + string L_DOT = L_DMG; + L_DOT *= 0.5; + ApplyEffect(FX_TARGET, "effects/dot_lightning", 5.0, FX_OWNER, L_DOT); + } + + void end_me_please() + { + ClientEvent("update", "all", FX_SCRIPT_ID, "end_fx"); + DeleteEntity(GetOwner()); + } + + void func_is_ent() + { + int L_RETURN = 0; + if ((param1).findFirst("(") == 0) + { + int L_RETURN = 1; + } + return; + return; + } + + void client_activate() + { + string FX_ORIGIN = param1; + SetCallback("render", "enable"); + GOT_NEW_TARG = 0; + SWIRL_ROT = 0; + BEAM_TARG = FX_ORIGIN; + OLD_TARG = FX_ORIGIN; + FX_ACTIVE = 1; + ScheduleDelayedEvent(0.2, "fx_loop"); + ScheduleDelayedEvent(120.0, "end_fx"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + if (!(STATIC_ACTIVE)) return; + if (!((BEAM_TARG).findFirst("(") == 0)) return; + int RND_BONE = RandomInt(1, 10); + string BONE1_ORG = /* TODO: $getcl */ $getcl(BEAM_TARG, "bonepos", RND_BONE); + int RND_BONE = RandomInt(1, 10); + string BONE2_ORG = /* TODO: $getcl */ $getcl(BEAM_TARG, "bonepos", RND_BONE); + if (BONE1_ORG == Vector3(0, 0, 0)) + { + string BONE1_ORG = /* TODO: $getcl */ $getcl(BEAM_TARG, "origin"); + } + if (BONE2_ORG == Vector3(0, 0, 0)) + { + string BONE2_ORG = /* TODO: $getcl */ $getcl(BEAM_TARG, "origin"); + } + if (BONE2_ORG == BONE1_ORG) + { + BONE2_ORG += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(Random(-48, 48), Random(-48, 48), 0)); + } + ClientEffect("beam_points", BONE1_ORG, BONE2_ORG, "lgtning.spr", 0.001, BONE_BEAM_WIDTH, 1, 255, 255, 30, Vector3(255, 64, 0)); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.05, "fx_loop"); + if (!(SWIRL_ACTIVE)) return; + string L_BEAM_START = BEAM_TARG; + string L_BEAM_END = L_BEAM_START; + SWIRL_ROT += 40; + if (SWIRL_ROT > 359) + { + SWIRL_ROT = 0; + } + L_BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, SWIRL_ROT, 0), Vector3(0, 15, 2)); + ClientEffect("beam_points", L_BEAM_START, L_BEAM_END, "lgtning.spr", 1.0, BONE_BEAM_WIDTH, 1, 255, 255, 30, Vector3(255, 64, 0)); + BEAM_TARG = L_BEAM_END; + } + + void beam_jump() + { + if (!(FX_ACTIVE)) return; + STATIC_ACTIVE = 0; + SWIRL_ACTIVE = 0; + string L_TARGET = param1; + OLD_TARG = BEAM_TARG; + if ((OLD_TARG).findFirst("(") == 0) + { + OLD_TARG = /* TODO: $getcl */ $getcl(BEAM_TARG, "origin"); + } + else + { + OLD_TARG = BEAM_TARG; + } + BEAM_TARG = L_TARGET; + if ((BEAM_TARG).findFirst("(") == 0) + { + string SOUND_ORG = /* TODO: $getcl */ $getcl(BEAM_TARG, "origin"); + ClientEffect("beam_points", OLD_TARG, SOUND_ORG, "lgtning.spr", 1.0, JUMP_BEAM_WIDTH, 1, 255, 255, 30, Vector3(255, 64, 0)); + SWIRL_ACTIVE = 0; + STATIC_ACTIVE = 1; + } + else + { + ClientEffect("beam_points", OLD_TARG, BEAM_TARG, "lgtning.spr", 1.0, JUMP_BEAM_WIDTH, 1, 255, 255, 30, Vector3(255, 64, 0)); + SWIRL_ACTIVE = 1; + STATIC_ACTIVE = 0; + string SOUND_ORG = BEAM_TARG; + } + if ((SWIRL_ACTIVE)) + { + int RND_ZAP = RandomInt(1, 3); + if (RND_ZAP == 1) + { + EmitSound3D(SOUND_IDLEZAP1, 10, SOUND_ORG); + } + if (RND_ZAP == 2) + { + EmitSound3D(SOUND_IDLEZAP2, 10, SOUND_ORG); + } + if (RND_ZAP == 3) + { + EmitSound3D(SOUND_IDLEZAP3, 10, SOUND_ORG); + } + } + else + { + int RND_ZAP = RandomInt(1, 3); + if (RND_ZAP == 1) + { + EmitSound3D(SOUND_ZAP_TARG, 10, SOUND_ORG); + } + } + } + + void end_fx() + { + FX_ACTIVE = 0; + RemoveScript(); + } + + void remove_fx() + { + FX_ACTIVE = 0; + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_light_fade.as b/scripts/angelscript/effects/sfx_light_fade.as new file mode 100644 index 00000000..41f74190 --- /dev/null +++ b/scripts/angelscript/effects/sfx_light_fade.as @@ -0,0 +1,54 @@ +#pragma context server + +namespace MS +{ + +class SfxLightFade : CGameScript +{ + float FADE_COUNT; + int FX_ACTIVE; + string FX_ORIGIN; + string GLOW_COLOR; + string GLOW_RAD; + string LIGHT_ID; + + void client_activate() + { + SetCallback("render", "enable"); + FX_ORIGIN = param1; + GLOW_COLOR = param2; + GLOW_RAD = param3; + FADE_COUNT = 1.0; + FX_ACTIVE = 1; + ClientEffect("light", "new", FX_ORIGIN, GLOW_RAD, GLOW_COLOR, 5.0); + LIGHT_ID = "game.script.last_light_id"; + if (!(param4)) return; + EmitSound3D(param5, param6, FX_ORIGIN); + } + + void game_prerender() + { + FADE_COUNT -= 0.01; + if (FADE_COUNT > 0) + { + string CUR_RAD = /* TODO: $ratio */ $ratio(FADE_COUNT, 0, GLOW_RAD); + ClientEffect("light", LIGHT_ID, FX_ORIGIN, CUR_RAD, GLOW_COLOR, 1.0); + } + else + { + if ((FX_ACTIVE)) + { + } + FX_ACTIVE = 0; + remove_fx(); + } + } + + void remove_fx() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_lightning.as b/scripts/angelscript/effects/sfx_lightning.as new file mode 100644 index 00000000..cb115887 --- /dev/null +++ b/scripts/angelscript/effects/sfx_lightning.as @@ -0,0 +1,89 @@ +#pragma context server + +namespace MS +{ + +class SfxLightning : CGameScript +{ + string LIGHTNING_SOUND; + string LIGHTNING_SPRITE; + string LIGHTNING_SPRITE_SPARKS; + string LIGHT_COLOR; + string SHN; + int SPARK_HORIZONTAL_NOISE; + string l.grnd; + string sfx.amt; + string sfx.duration; + string sfx.end; + string sfx.sparkscale; + string sfx.start; + string sfx.width; + + SfxLightning() + { + LIGHTNING_SPRITE = "lgtning.spr"; + LIGHTNING_SPRITE_SPARKS = "3dmflaora.spr"; + LIGHT_COLOR = Vector3(1, 0.5, 2); + LIGHTNING_SOUND = "weather/lightning.wav"; + SPARK_HORIZONTAL_NOISE = 30; + SHN = SPARK_HORIZONTAL_NOISE; + Precache(LIGHTNING_SPRITE); + Precache(LIGHTNING_SPRITE_SPARKS); + } + + void client_activate() + { + sfx.start = param1; + sfx.end = param2; + sfx.duration = param3; + sfx.amt = param4; + sfx.width = /* TODO: $get_skill_ratio */ $get_skill_ratio(sfx.amt, 1, 25); + sfx.sparkscale = /* TODO: $get_skill_ratio */ $get_skill_ratio(sfx.amt, 0.1, 0.2); + l.grnd = /* TODO: $get_ground_height */ $get_ground_height(sfx.start); + if (l.grnd != "none") + { + sfx.start = "z"; + } + effect_start(); + effect_die(); + } + + void effect_start() + { + ClientEffect("beam_points", sfx.start, sfx.end, LIGHTNING_SPRITE, sfx.duration, sfx.width, ".4", ".5", 1, 30, LIGHT_COLOR); + EmitSound3D(LIGHTNING_SOUND, 7, sfx.start); + for (int i = 0; i < RandomInt(6, 8); i++) + { + effect_createball(); + } + } + + void effect_createball() + { + ClientEffect("tempent", "sprite", LIGHTNING_SPRITE_SPARKS, sfx.start, "effect_setupball_tempent"); + } + + void effect_setupball_tempent() + { + ClientEffect("tempent", "set_current_prop", "death_delay", Random(0.6, 1)); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 2); + float l.x = Random(/* TODO: $neg */ $neg(SHN), SHN); + float l.y = Random(/* TODO: $neg */ $neg(SHN), SHN); + float l.z = Random(-300, -30); + Vector3 l.vel = Vector3(l.x, l.y, l.z); + ClientEffect("tempent", "set_current_prop", "velocity", l.vel); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "scale", sfx.sparkscale); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void effect_die() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_lightning_cage.as b/scripts/angelscript/effects/sfx_lightning_cage.as new file mode 100644 index 00000000..10950aba --- /dev/null +++ b/scripts/angelscript/effects/sfx_lightning_cage.as @@ -0,0 +1,62 @@ +#pragma context server + +namespace MS +{ + +class SfxLightningCage : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_ORIGIN; + int FX_SPHERE_SIZE; + + void client_activate() + { + LogDebug("**** client_activate force_cage_cl PARAM1 PARAM2 PARAM3"); + FX_DURATION = param1; + FX_ORIGIN = param2; + FX_ACTIVE = 1; + FX_SPHERE_SIZE = 1; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", FX_ORIGIN, "setup_efield", "update_efield"); + FX_DURATION("end_fx"); + } + + void update_efield() + { + if ((FX_ACTIVE)) return; + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + } + + void end_fx() + { + LogDebug("**** force_cage_cl end_fx"); + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_efield() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 63); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "scale", FX_SPHERE_SIZE); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_lightning_shield.as b/scripts/angelscript/effects/sfx_lightning_shield.as new file mode 100644 index 00000000..1b09a5de --- /dev/null +++ b/scripts/angelscript/effects/sfx_lightning_shield.as @@ -0,0 +1,82 @@ +#pragma context client + +namespace MS +{ + +class SfxLightningShield : CGameScript +{ + string L_SHIELD_RADIUS; + string SHIELD_DURATION; + string SHIELD_IS_CONSTANT; + string SHIELD_OWNER; + string SHIELD_RADIUS; + string SHIELD_VADJ; + string ZAP_FX_NERF; + int ZAP_ON; + + void client_activate() + { + SHIELD_OWNER = param1; + SHIELD_RADIUS = param2; + SHIELD_DURATION = param3; + SHIELD_VADJ = param4; + SHIELD_IS_CONSTANT = param5; + const Vector3 SHIELD_COLOR = Vector3(2, 1.5, 0.25); + SHIELD_DURATION("remove_effect"); + if ((SHIELD_IS_CONSTANT)) return; + lshield_on(); + } + + void lshield_on() + { + ZAP_ON = 1; + lshield_loop(); + ZAP_FX_NERF = GetGameTime(); + ZAP_FX_NERF += 1.0; + PARAM1("lshield_off"); + } + + void lshield_loop() + { + if (!(ZAP_ON)) return; + ScheduleDelayedEvent(0.1, "lshield_loop"); + if (GetGameTime() > ZAP_FX_NERF) + { + int EXIT_SUB = RandomInt(0, 1); + } + if ((EXIT_SUB)) return; + string BEAM_START = /* TODO: $getcl */ $getcl(SHIELD_OWNER, "origin"); + string BEAM_END = /* TODO: $getcl */ $getcl(SHIELD_OWNER, "origin"); + BEAM_START += "z"; + float RND_PITCH = Random(0, 359); + float RND_YAW = Random(0, 359); + L_SHIELD_RADIUS = SHIELD_RADIUS; + L_SHIELD_RADIUS *= 0.5; + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(RND_PITCH, RND_YAW, 0), Vector3(0, L_SHIELD_RADIUS, 0)); + float RND_PITCH = Random(0, 359); + float RND_YAW = Random(0, 359); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(RND_PITCH, RND_YAW, 0), Vector3(0, L_SHIELD_RADIUS, 0)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.2, 2, 9, 0.3, 0.1, 30, SHIELD_COLOR); + if (!(SHIELD_RADIUS > 128)) return; + string BEAM_START = /* TODO: $getcl */ $getcl(SHIELD_OWNER, "origin"); + string BEAM_END = /* TODO: $getcl */ $getcl(SHIELD_OWNER, "origin"); + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(RND_PITCH, RND_YAW, 0), Vector3(0, L_SHIELD_RADIUS, 0)); + float RND_PITCH = Random(0, 359); + float RND_YAW = Random(0, 359); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(RND_PITCH, RND_YAW, 0), Vector3(0, L_SHIELD_RADIUS, 0)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.2, 2, 9, 0.3, 0.1, 30, SHIELD_COLOR); + } + + void lshield_off() + { + ZAP_ON = 0; + } + + void remove_effect() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_model_test.as b/scripts/angelscript/effects/sfx_model_test.as new file mode 100644 index 00000000..468d0df0 --- /dev/null +++ b/scripts/angelscript/effects/sfx_model_test.as @@ -0,0 +1,54 @@ +#pragma context client + +namespace MS +{ + +class SfxModelTest : CGameScript +{ + string FX_ORG; + string MODEL_BODY_OFS; + string MODEL_IDX; + string MODEL_SKIN; + + void client_activate() + { + FX_ORG = param1; + MODEL_IDX = param2; + MODEL_BODY_OFS = param3; + MODEL_SKIN = param4; + create_model(MODEL_IDX); + ScheduleDelayedEvent(20.0, "end_fx"); + } + + void end_fx() + { + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void create_model() + { + ClientEffect("tempent", "model", /* TODO: $getcl */ $getcl(MODEL_IDX, "model"), FX_ORG, "setup_model"); + } + + void setup_model() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 20.0); + ClientEffect("tempent", "set_current_prop", "angles", /* TODO: $getcl */ $getcl(MODEL_IDX, "angles")); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 90); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", MODEL_BODY_OFS); + ClientEffect("tempent", "set_current_prop", "skin", MODEL_SKIN); + ClientEffect("tempent", "set_current_prop", "sequence", /* TODO: $getcl */ $getcl(MODEL_IDX, "sequence")); + ClientEffect("tempent", "set_current_prop", "frame", /* TODO: $getcl */ $getcl(MODEL_IDX, "frame")); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_motionblur.as b/scripts/angelscript/effects/sfx_motionblur.as new file mode 100644 index 00000000..ea81ecf6 --- /dev/null +++ b/scripts/angelscript/effects/sfx_motionblur.as @@ -0,0 +1,75 @@ +#pragma context client + +namespace MS +{ + +class SfxMotionblur : CGameScript +{ + string MODEL_BODY_OFS; + string param.ang; + string sc.oldang; + string sc.oldpos; + string sfx.entidx; + + void client_activate() + { + sfx.entidx = param1; + MODEL_BODY_OFS = param2; + if (MODEL_BODY_OFS == "MODEL_BODY_OFS") + { + MODEL_BODY_OFS = 0; + } + if (!(/* TODO: $getcl */ $getcl(sfx.entidx, "exists"))) + { + effect_die(); + } + else + { + if (param2 > 0) + { + PARAM2("effect_die"); + } + SetCallback("render", "enable"); + } + } + + void game_prerender() + { + string l.pos = /* TODO: $getcl */ $getcl(sfx.entidx, "origin"); + if (sc.oldpos != l.pos) + { + param.ang = sc.oldang; + createmodel(sc.oldpos); + sc.oldpos = l.pos; + sc.oldang = /* TODO: $getcl */ $getcl(sfx.entidx, "angles"); + } + else + { + effect_die(); + } + } + + void createmodel() + { + ClientEffect("tempent", "model", /* TODO: $getcl */ $getcl(sfx.entidx, "model"), param1, "setup_model"); + } + + void setup_model() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.15); + ClientEffect("tempent", "set_current_prop", "angles", param.ang); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 50); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", MODEL_BODY_OFS); + } + + void effect_die() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_motionblur_perm.as b/scripts/angelscript/effects/sfx_motionblur_perm.as new file mode 100644 index 00000000..a92b6843 --- /dev/null +++ b/scripts/angelscript/effects/sfx_motionblur_perm.as @@ -0,0 +1,76 @@ +#pragma context client + +namespace MS +{ + +class SfxMotionblurPerm : CGameScript +{ + string BLUR_ON; + string MODEL_BODY_OFS; + string param.ang; + string sc.oldang; + string sc.oldpos; + string sfx.entidx; + + void client_activate() + { + sfx.entidx = param1; + MODEL_BODY_OFS = param2; + if (MODEL_BODY_OFS == "PARAM2") + { + MODEL_BODY_OFS = 0; + } + SetCallback("render", "enable"); + if (param3 != 1) + { + BLUR_ON = 1; + } + } + + void blur_off() + { + BLUR_ON = 0; + } + + void blur_on() + { + BLUR_ON = 1; + } + + void game_prerender() + { + if (!(BLUR_ON)) return; + string l.pos = /* TODO: $getcl */ $getcl(sfx.entidx, "origin"); + if (sc.oldpos != l.pos) + { + param.ang = sc.oldang; + createmodel(sc.oldpos); + sc.oldpos = l.pos; + sc.oldang = /* TODO: $getcl */ $getcl(sfx.entidx, "angles"); + } + } + + void createmodel() + { + ClientEffect("tempent", "model", /* TODO: $getcl */ $getcl(sfx.entidx, "model"), param1, "setup_model"); + } + + void setup_model() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.15); + ClientEffect("tempent", "set_current_prop", "angles", param.ang); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 50); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", MODEL_BODY_OFS); + } + + void effect_die() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_motionblur_temp.as b/scripts/angelscript/effects/sfx_motionblur_temp.as new file mode 100644 index 00000000..506646ba --- /dev/null +++ b/scripts/angelscript/effects/sfx_motionblur_temp.as @@ -0,0 +1,77 @@ +#pragma context client + +namespace MS +{ + +class SfxMotionblurTemp : CGameScript +{ + int BLUR_ON; + string FX_DURATION; + string MODEL_BODY_OFS; + string MODEL_IDX; + string MODEL_SKIN; + string OLD_ANG; + string OLD_POS; + string PASS_ANG; + + void client_activate() + { + MODEL_IDX = param1; + MODEL_BODY_OFS = param2; + MODEL_SKIN = param3; + FX_DURATION = param4; + SetCallback("render", "enable"); + BLUR_ON = 1; + FX_DURATION("end_fx"); + } + + void end_fx() + { + BLUR_ON = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(BLUR_ON)) return; + string CUR_POS = /* TODO: $getcl */ $getcl(MODEL_IDX, "origin"); + if (OLD_POS != CUR_POS) + { + PASS_ANG = OLD_ANG; + create_model(OLD_POS); + OLD_POS = CUR_POS; + OLD_ANG = /* TODO: $getcl */ $getcl(MODEL_IDX, "angles"); + } + else + { + end_fx(); + } + } + + void create_model() + { + ClientEffect("tempent", "model", /* TODO: $getcl */ $getcl(MODEL_IDX, "model"), param1, "setup_model"); + } + + void setup_model() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.15); + ClientEffect("tempent", "set_current_prop", "angles", PASS_ANG); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 50); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", MODEL_BODY_OFS); + ClientEffect("tempent", "set_current_prop", "skin", MODEL_SKIN); + ClientEffect("tempent", "set_current_prop", "sequence", /* TODO: $getcl */ $getcl(MODEL_IDX, "sequence")); + ClientEffect("tempent", "set_current_prop", "frame", /* TODO: $getcl */ $getcl(MODEL_IDX, "frame")); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_multi_lightning.as b/scripts/angelscript/effects/sfx_multi_lightning.as new file mode 100644 index 00000000..221fb023 --- /dev/null +++ b/scripts/angelscript/effects/sfx_multi_lightning.as @@ -0,0 +1,45 @@ +#pragma context client + +namespace MS +{ + +class SfxMultiLightning : CGameScript +{ + string SOUND_THUNDER; + string ZAP_LIST; + + SfxMultiLightning() + { + SOUND_THUNDER = "weather/lightning.wav"; + } + + void client_activate() + { + ZAP_LIST = param1; + for (int i = 0; i < GetTokenCount(ZAP_LIST, ";"); i++) + { + zap_target(); + } + ScheduleDelayedEvent(5.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void zap_target() + { + string CUR_TARG = GetToken(ZAP_LIST, i, ";"); + string BEAM_START = /* TODO: $getcl */ $getcl(CUR_TARG, "origin"); + BEAM_START = "z"; + ClientEffect("light", "new", BEAM_START, 128, Vector3(255, 255, 0), 4.0); + string BEAM_END = BEAM_START; + BEAM_END += "z"; + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 4.0, 20.0, 0.5, 255, 50, 30, Vector3(255, 255, 0)); + EmitSound3D(SOUND_THUNDER, 10, BEAM_START); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_poison_aura.as b/scripts/angelscript/effects/sfx_poison_aura.as new file mode 100644 index 00000000..285d7e99 --- /dev/null +++ b/scripts/angelscript/effects/sfx_poison_aura.as @@ -0,0 +1,103 @@ +#pragma context client + +namespace MS +{ + +class SfxPoisonAura : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_RAD; + string FX_RAD_NEG; + string GLOW_COLOR; + string GLOW_RAD; + string LIGHT_ID; + string MY_OWNER; + + SfxPoisonAura() + { + GLOW_COLOR = Vector3(0, 255, 0); + } + + void client_activate() + { + MY_OWNER = param1; + FX_RAD = param2; + FX_RAD_NEG = /* TODO: $neg */ $neg(FX_RAD); + FX_DURATION = param3; + GLOW_RAD = FX_RAD; + if ((/* TODO: $getcl */ $getcl(MY_OWNER, "isplayer"))) + { + GLOW_RAD *= 2.5; + } + else + { + GLOW_RAD *= 1.5; + } + SetCallback("render", "enable"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 1.0); + LIGHT_ID = "game.script.last_light_id"; + FX_ACTIVE = 1; + FX_DURATION("end_fx"); + fx_loop(); + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(MY_OWNER, "exists"))) return; + string L_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + if ((/* TODO: $getcl */ $getcl(MY_OWNER, "isplayer"))) + { + L_POS += "z"; + } + ClientEffect("light", LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "fx_loop"); + string C_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + if ((/* TODO: $getcl */ $getcl(MY_OWNER, "isplayer"))) + { + C_POS += "z"; + } + string L_POS = C_POS; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(0, Random(FX_RAD_NEG, FX_RAD), 0)); + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + string L_POS = C_POS; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(0, Random(FX_RAD_NEG, FX_RAD), 0)); + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + string L_POS = C_POS; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(0, Random(FX_RAD_NEG, FX_RAD), 0)); + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + } + + void setup_smokes() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_poison_burst.as b/scripts/angelscript/effects/sfx_poison_burst.as new file mode 100644 index 00000000..d9b6e88d --- /dev/null +++ b/scripts/angelscript/effects/sfx_poison_burst.as @@ -0,0 +1,81 @@ +#pragma context client + +namespace MS +{ + +class SfxPoisonBurst : CGameScript +{ + int CYCLE_ANGLE; + string FX_CENTER; + string FX_RADIUS; + string SOUND_BURST; + string SPRITE_COLOR; + int SPRITE_FRAMERATE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + int SPRITE_RENDERAMT; + string SPRITE_RENDERMODE; + float SPRITE_SCALE; + + SfxPoisonBurst() + { + SPRITE_NAME = "poison_cloud.spr"; + SPRITE_COLOR = Vector3(0, 255, 0); + SPRITE_RENDERAMT = 200; + SPRITE_RENDERMODE = "add"; + SPRITE_FRAMERATE = 30; + SPRITE_NFRAMES = 17; + SPRITE_SCALE = 1.0; + SOUND_BURST = "ambience/steamburst1.wav"; + Precache(SOUND_BURST); + } + + void client_activate() + { + FX_CENTER = param1; + FX_RADIUS = param2; + string DO_GLOW = param3; + string GLOW_COLOR = param4; + if ((DO_GLOW)) + { + ClientEffect("light", "new", FX_CENTER, FX_RADIUS, GLOW_COLOR, 1.0); + } + ScheduleDelayedEvent(3.0, "remove_me"); + CYCLE_ANGLE = 0; + for (int i = 0; i < 17; i++) + { + create_sprites(); + } + EmitSound3D(SOUND_BURST, 10, FX_CENTER); + } + + void remove_me() + { + RemoveScript(); + } + + void create_sprites() + { + string SPR_POS = FX_CENTER; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 96, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPR_POS, "setup_ring_sprite"); + CYCLE_ANGLE += 20; + } + + void setup_ring_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "renderamt", SPRITE_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "rendermode", SPRITE_RENDERMODE); + ClientEffect("tempent", "set_current_prop", "framerate", SPRITE_FRAMERATE); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_poison_cloud.as b/scripts/angelscript/effects/sfx_poison_cloud.as new file mode 100644 index 00000000..cca84b5d --- /dev/null +++ b/scripts/angelscript/effects/sfx_poison_cloud.as @@ -0,0 +1,138 @@ +#pragma context server + +namespace MS +{ + +class SfxPoisonCloud : CGameScript +{ + string DBG_AOE_RATIO; + string DBG_SPRITE_COUNT; + int FX_ACTIVE; + string FX_AOE; + string FX_DURATION; + string FX_ORIGIN; + string FX_SOUND; + string SOUND_BURST; + float SPITE_GRAVITY; + string SPRITE_NAME; + float SPRITE_SCALE; + int SPRITE_SCALE_MAX; + int SPRITE_SCALE_MIN; + + SfxPoisonCloud() + { + SPRITE_NAME = "poison_cloud.spr"; + SOUND_BURST = "ambience/steamburst1.wav"; + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_AOE = param2; + FX_DURATION = param3; + if (param4 != "PARAM4") + { + FX_SOUND = param4; + } + else + { + FX_SOUND = 1; + } + FX_ACTIVE = 1; + string L_LIGHT_RAD = FX_AOE; + L_LIGHT_RAD *= 1.5; + ClientEffect("light", "new", FX_ORIGIN, L_LIGHT_RAD, Vector3(0, 255, 0), FX_DURATION); + string L_AOE_RATIO = FX_AOE; + if (L_AOE_RATIO > 256) + { + int L_AOE_RATIO = 256; + } + L_AOE_RATIO /= 256; + SPRITE_SCALE_MIN = 5; + SPRITE_SCALE_MAX = 5; + SPRITE_SCALE_MIN *= L_AOE_RATIO; + SPRITE_SCALE_MAX *= L_AOE_RATIO; + DBG_AOE_RATIO = L_AOE_RATIO; + do_smokes(); + FX_DURATION("end_fx"); + if (!(FX_SOUND)) return; + EmitSound3D(SOUND_BURST, 10, FX_ORIGIN); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(3.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void do_smokes() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "do_smokes"); + float RND_DIST = Random(0, FX_AOE); + float RND_ANG = Random(0, 359.99); + int L_OFS_Z = 0; + string L_POS = FX_ORIGIN; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, RND_DIST, L_OFS_Z)); + SPRITE_SCALE = Random(SPRITE_SCALE_MIN, SPRITE_SCALE_MAX); + string L_PILLAR_SCALE = SPRITE_SCALE; + L_PILLAR_SCALE *= 1.5; + string L_DIST_RATIO = RND_DIST; + L_DIST_RATIO /= FX_AOE; + string L_DIST_RATIO = /* TODO: $ratio */ $ratio(L_DIST_RATIO, 0, 1.2); + float L_FRATIO = 1.3; + L_FRATIO -= L_DIST_RATIO; + SPITE_GRAVITY = -0.03; + SPRITE_SCALE *= L_FRATIO; + ClientEffect("tempent", "sprite", SPRITE_NAME, L_POS, "setup_smoke", "update_smoke"); + if (DBG_SPRITE_COUNT == "DBG_SPRITE_COUNT") + { + DBG_SPRITE_COUNT = 1; + } + SPITE_GRAVITY = -0.05; + SPRITE_SCALE = L_PILLAR_SCALE; + ClientEffect("tempent", "sprite", SPRITE_NAME, FX_ORIGIN, "setup_smoke", "update_smoke"); + DBG_SPRITE_COUNT = 0; + } + + void update_smoke() + { + string CUR_SCALE = "game.tempent.fuser1HD"; + if (CUR_SCALE > 0.02) + { + CUR_SCALE *= 0.99; + ClientEffect("tempent", "set_current_prop", "scaleHD", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1HD", CUR_SCALE); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(6000, 6000, 6000)); + } + } + + void setup_smoke() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.5); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 15); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 150); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", SPITE_GRAVITY); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser2", GetGameTime()); + ClientEffect("tempent", "set_current_prop", "iuser1", DBG_SPRITE_COUNT); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_poison_explode.as b/scripts/angelscript/effects/sfx_poison_explode.as new file mode 100644 index 00000000..58347e4f --- /dev/null +++ b/scripts/angelscript/effects/sfx_poison_explode.as @@ -0,0 +1,34 @@ +#pragma context client + +#include "effects/sfx_explode.as" + +namespace MS +{ + +class SfxPoisonExplode : CGameScript +{ + string SOUND_BURST; + string SPRITE_COLOR; + int SPRITE_FRAMERATE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + int SPRITE_RENDERAMT; + string SPRITE_RENDERMODE; + float SPRITE_SCALE; + + SfxPoisonExplode() + { + SPRITE_NAME = "poison_cloud.spr"; + SPRITE_COLOR = Vector3(0, 255, 0); + SPRITE_RENDERAMT = 200; + SPRITE_RENDERMODE = "add"; + SPRITE_FRAMERATE = 30; + SPRITE_NFRAMES = 17; + SPRITE_SCALE = 1.0; + SOUND_BURST = "ambience/steamburst1.wav"; + Precache(SOUND_BURST); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_prism_blast.as b/scripts/angelscript/effects/sfx_prism_blast.as new file mode 100644 index 00000000..74d51759 --- /dev/null +++ b/scripts/angelscript/effects/sfx_prism_blast.as @@ -0,0 +1,139 @@ +#pragma context server + +namespace MS +{ + +class SfxPrismBlast : CGameScript +{ + string BALL_COL_IDX; + string BALL_ROT; + string BALL_SPD; + string CIRCLE_COUNT; + string CIRCLE_COUNT_MAX; + string CIRCLE_DIST_INC; + string CIRCLE_RAD; + int CIRCLE_ROT; + string CUR_SIZE; + int DO_LIGHT; + string EFFECT_COLORS; + string EFFECT_ELEMENTS; + int FX_ACTIVE; + string FX_AOE; + string FX_COLOR; + string FX_LIGHT_ID; + string FX_LIGHT_RAD; + string FX_ORIGIN; + + SfxPrismBlast() + { + EFFECT_ELEMENTS = "acid;fire;cold;poison;dark;lightning;holy"; + EFFECT_COLORS = "(64,255,64);(255,64,0);(128,128,255);(0,255,0);(255,0,255);(255,255,0);(255,255,255)"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + if ((FX_ACTIVE)) + { + } + if (CUR_SIZE <= 1) + { + } + CUR_SIZE += 0.02; + if (CUR_SIZE > 1) + { + CUR_SIZE = 1; + } + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_AOE = param2; + string L_COLOR = param3; + FX_ACTIVE = 1; + string L_IDX = FindToken(EFFECT_ELEMENTS, param3, ";"); + FX_COLOR = GetToken(EFFECT_COLORS, L_IDX, ";"); + DO_LIGHT = 1; + if ((DO_LIGHT)) + { + FX_LIGHT_RAD = (FX_AOE * 1.5); + SetCallback("render", "enable"); + ClientEffect("light", "new", FX_ORIGIN, FX_LIGHT_RAD, FX_COLOR, 0.5); + FX_LIGHT_ID = "game.script.last_light_id"; + } + EmitSound3D("magic/dburst_large_sdr_darkness.wav", 10, FX_ORIGIN); + if ((DO_SPRITES)) + { + BALL_ROT = 0; + BALL_COL_IDX = 0; + BALL_SPD = 400; + array ARRAY_SPR_COLORS; + array ARRAY_SPR_POS; + for (int i = 0; i < 17; i++) + { + setup_bawls(); + } + } + else + { + CIRCLE_RAD = 0; + string L_N_CIRCLES = GetTokenCount(EFFECT_COLORS, ";"); + CIRCLE_DIST_INC = FX_AOE; + CIRCLE_DIST_INC /= L_N_CIRCLES; + CIRCLE_COUNT = 0; + CIRCLE_COUNT_MAX = L_N_CIRCLES; + do_circles(); + } + ScheduleDelayedEvent(1.0, "end_fx"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + if (!(DO_LIGHT)) return; + ClientEffect("light", FX_LIGHT_ID, FX_ORIGIN, /* TODO: $ratio */ $ratio(CUR_SIZE, 0, FX_LIGHT_RAD), FX_COLOR, 0.5); + } + + void do_circles() + { + if (!(CIRCLE_COUNT < CIRCLE_COUNT_MAX)) return; + ScheduleDelayedEvent(0.1, "do_circles"); + beam_circle(); + CIRCLE_COUNT += 1; + } + + void beam_circle() + { + CIRCLE_RAD += CIRCLE_DIST_INC; + CIRCLE_ROT = 0; + for (int i = 0; i < 16; i++) + { + draw_circle_loop(); + } + } + + void draw_circle_loop() + { + string L_BEAM_START = FX_ORIGIN; + L_BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, CIRCLE_ROT, 0), Vector3(0, CIRCLE_RAD, 0)); + CIRCLE_ROT += 22.5; + string L_BEAM_END = FX_ORIGIN; + L_BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, CIRCLE_ROT, 0), Vector3(0, CIRCLE_RAD, 0)); + ClientEffect("beam_points", L_BEAM_START, L_BEAM_END, "3dmflagry.spr", 1.0, 10, 0.2, 1, 30, 30, /* TODO: $clcol */ $clcol(FX_COLOR)); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_pulse_sphere.as b/scripts/angelscript/effects/sfx_pulse_sphere.as new file mode 100644 index 00000000..749db8b1 --- /dev/null +++ b/scripts/angelscript/effects/sfx_pulse_sphere.as @@ -0,0 +1,139 @@ +#pragma context server + +namespace MS +{ + +class SfxPulseSphere : CGameScript +{ + string BLUR_ANG; + string BLUR_VEL; + int FX_ACTIVE; + string FX_ANIM; + string FX_MAX_SCALE; + string FX_ORIGIN; + string FX_OWNER; + string FX_SKIN; + string NO_BLUR; + int VEL_X; + + void client_activate() + { + FX_ORIGIN = param1; + FX_MAX_SCALE = param2; + FX_OWNER = param3; + FX_SKIN = param4; + FX_ANIM = param5; + if ((FX_OWNER).findFirst(PARAM) == 0) + { + NO_BLUR = 1; + } + FX_ACTIVE = 1; + ScheduleDelayedEvent(5.0, "end_fx"); + EmitSound3D("magic/sff_explsonic.wav", 10, FX_ORIGIN); + if ((param6).findFirst(PARAM) == 0) + { + string SPR_POS = FX_ORIGIN; + } + else + { + if (param6 == 0) + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + } + if (param6 == 1) + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + } + if (param6 == 2) + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment2"); + } + if (param6 == 3) + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment3"); + } + LogDebug("*** SPR_POS"); + } + ClientEffect("tempent", "model", "monsters/zubat_sphere.mdl", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_sphere", "update_sphere"); + if ((NO_BLUR)) return; + VEL_X = 0; + for (int i = 0; i < 8; i++) + { + blur_loop(); + } + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void blur_loop() + { + VEL_R += 20; + BLUR_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + BLUR_VEL = /* TODO: $relvel */ $relvel(BLUR_ANG, Vector3(/* TODO: $neg */ $neg(VEL_R), 0, 0)); + ClientEffect("tempent", "model", /* TODO: $getcl */ $getcl(FX_OWNER, "model"), /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_blur"); + BLUR_VEL = /* TODO: $relvel */ $relvel(BLUR_ANG, Vector3(VEL_R, 0, 0)); + ClientEffect("tempent", "model", /* TODO: $getcl */ $getcl(FX_OWNER, "model"), /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_blur"); + } + + void setup_blur() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "angles", BLUR_ANG); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 50); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "skin", FX_SKIN); + ClientEffect("tempent", "set_current_prop", "velocity", BLUR_VEL); + ClientEffect("tempent", "set_current_prop", "sequence", FX_ANIM); + } + + void setup_sphere() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 4.0); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 999); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 64, 255)); + ClientEffect("tempent", "set_current_prop", "color", Vector3(64, 64, 255)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.25); + } + + void update_sphere() + { + if ((FX_ACTIVE)) + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < FX_MAX_SCALE) + { + } + CUR_SCALE += 0.05; + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 2000)); + } + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_quake.as b/scripts/angelscript/effects/sfx_quake.as new file mode 100644 index 00000000..eb5e83d3 --- /dev/null +++ b/scripts/angelscript/effects/sfx_quake.as @@ -0,0 +1,253 @@ +#pragma context server + +namespace MS +{ + +class SfxQuake : CGameScript +{ + int CIRC_COUNT; + string CIRC_RAD; + string CIRC_STEP; + int FX_ACTIVE; + string FX_AOE; + string FX_DURATION; + string FX_MOBILE; + string FX_N_CIRCS; + string FX_ORIGIN; + string FX_RATIO; + string FX_ROCKS_PER_CIRC; + string FX_SRC; + string FX_VOLCANIC; + float ROT_COUNT; + string ROT_STEP; + + SfxQuake() + { + } + + void client_activate() + { + FX_SRC = param1; + FX_MOBILE = param2; + FX_AOE = param3; + FX_DURATION = param4; + FX_VOLCANIC = param5; + FX_ACTIVE = 1; + if ((FX_VOLCANIC)) + { + if ((param6).findFirst(PARAM) == 0) + { + ATTACKER_IDX = param6; + } + else + { + ATTACKER_IDX = 0; + } + RandomInt(0_5, 1_0)("flaming_rocks_loop"); + } + FX_RATIO = (FX_AOE / 1024); + FX_ROCKS_PER_CIRC = /* TODO: $ratio */ $ratio(FX_RATIO, 4, 16); + FX_ROCKS_PER_CIRC = int(FX_ROCKS_PER_CIRC); + FX_N_CIRCS = /* TODO: $ratio */ $ratio(FX_RATIO, 2, 8); + FX_N_CIRCS = int(FX_N_CIRCS); + quake_loop(); + FX_DURATION("end_fx"); + } + + void flaming_rocks_loop() + { + if (!(FX_ACTIVE)) return; + Random(0_25, 0_5)("flaming_rocks_loop"); + if ((FX_MOBILE)) + { + FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_SRC, "origin"); + } + else + { + FX_ORIGIN = FX_SRC; + } + float L_DROP_YAW = Random(0, 359.99); + float L_DROP_DIST = Random(0, FX_AOE); + string L_DROP_POINT = FX_ORIGIN; + L_DROP_POINT += /* TODO: $relpos */ $relpos(Vector3(0, L_DROP_YAW, 0), Vector3(0, L_DROP_DIST, 256)); + ClientEffect("tempent", "model", "rockgibs.mdl", L_DROP_POINT, "setup_frock", "update_frock"); + } + + void cb_frock_land() + { + string L_ORG = "game.tempent.origin"; + ClientEffect("tempent", "sprite", "xfireball3.spr", L_ORG, "setup_frock_explode"); + ClientEffect("tempent", "sprite", "xfireball3.spr", L_ORG, "setup_frock_explode"); + ClientEffect("tempent", "sprite", "xfireball3.spr", L_ORG, "setup_frock_explode"); + EmitSound3D("fire.wav", 10, L_ORG); + if (!(ATTACKER_IDX > 0)) return; + string L_PLR_IDX = "game.localplayer.index"; + string L_PLR_ORG = /* TODO: $getcl */ $getcl(L_PLR_IDX, "origin"); + LogDebug("*** $currentscript cb_frock_land ds Distance(L_ORG, L_PLR_ORG) atk ATTACKER_IDX [ L_ORG vs. L_PLR_ORG ]"); + } + + void setup_frock() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "scale", Random(6.0, 8.0)); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "cb_collide", "cb_frock_land"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 50); + ClientEffect("tempent", "set_current_prop", "body", RandomInt(1, 2)); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(90, RND_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "fuser1", (GetGameTime() + 0.1)); + } + + void update_frock() + { + if (!(GetGameTime() > "game.tempent.fuser1")) return; + ClientEffect("tempent", "set_current_prop", "fuser1", (GetGameTime() + 0.1)); + ClientEffect("tempent", "sprite", "xfireball3.spr", "game.tempent.origin", "setup_frock_trail"); + } + + void setup_frock_trail() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "fade", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 19); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 96, 64)); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + + void setup_frock_explode() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "fade", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 19); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 2); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 96, 64)); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-100, 100), Random(-100, 100), Random(100, 400))); + } + + void quake_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "quake_loop"); + if ((FX_MOBILE)) + { + FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_SRC, "origin"); + } + else + { + FX_ORIGIN = FX_SRC; + } + FX_ORIGIN = "z"; + CIRC_COUNT = 0; + CIRC_STEP = (FX_AOE / FX_N_CIRCS); + for (int i = 0; i < FX_N_CIRCS; i++) + { + do_circles(); + } + } + + void do_circles() + { + string CUR_CIRC = i; + CIRC_RAD = (CIRC_STEP * CUR_CIRC); + CIRC_RAD += CIRC_STEP; + ROT_COUNT = Random(0, 359.99); + string L_NROCKS = (CUR_CIRC / FX_N_CIRCS); + string L_NROCKS = /* TODO: $ratio */ $ratio(L_NROCKS, 4, FX_ROCKS_PER_CIRC); + int L_NROCKS = int(L_NROCKS); + ROT_STEP = (359.99 / L_NROCKS); + for (int i = 0; i < L_NROCKS; i++) + { + do_rocks(); + } + } + + void do_rocks() + { + string L_POS = FX_ORIGIN; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, ROT_COUNT, 0), Vector3(0, CIRC_RAD, 0)); + ClientEffect("tempent", "model", "rockgibs.mdl", L_POS, "setup_rock", "update_rock"); + ROT_COUNT += ROT_STEP; + if (ROT_COUNT > 359.99) + { + ROT_COUNT -= 359.99; + } + } + + void setup_rock() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "scale", Random(1.4, 2.0)); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 50)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 50); + ClientEffect("tempent", "set_current_prop", "body", RandomInt(1, 2)); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, RND_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "fuser1", GetGameTime()); + } + + void update_rock() + { + if (!(FX_ACTIVE)) + { + string L_CUR_VEL = "game.tempent.velocity"; + L_CUR_VEL += "z"; + if ((L_CUR_VEL).z < -600) + { + L_CUR_VEL = "z"; + } + ClientEffect("tempent", "set_current_prop", "bouncefactor", 1); + ClientEffect("tempent", "set_current_prop", "velocity", L_CUR_VEL); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + } + string CUR_ANG = "game.tempent.angles"; + string L_YAW = /* TODO: $vec.yaw */ $vec.yaw(CUR_ANG); + L_YAW += 1; + if (L_YAW > 359.99) + { + L_YAW -= 359.99; + } + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, L_YAW, 0)); + float CUR_REND = GetGameTime(); + CUR_REND -= "game.tempent.fuser1"; + string CUR_REND = (CUR_REND / 3); + string CUR_REND = /* TODO: $ratio */ $ratio(CUR_REND, 512, 0); + if (CUR_REND > 255) + { + int CUR_REND = 255; + } + ClientEffect("tempent", "set_current_prop", "renderamt", CUR_REND); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(4.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_raura.as b/scripts/angelscript/effects/sfx_raura.as new file mode 100644 index 00000000..4a89fab2 --- /dev/null +++ b/scripts/angelscript/effects/sfx_raura.as @@ -0,0 +1,88 @@ +#pragma context client + +namespace MS +{ + +class SfxRaura : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + string MODEL_NAME; + int MODEL_OFS; + int V_OFS; + int V_OFS_DUCK; + + SfxRaura() + { + MODEL_NAME = "weapons/projectiles.mdl"; + MODEL_OFS = 54; + V_OFS = -34; + V_OFS_DUCK = 24; + } + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + LogDebug("*** client_activate FX_OWNER FX_DURATION"); + string L_DURATION = FX_DURATION; + L_DURATION += 1.0; + L_DURATION("remove_fx"); + string L_POS = GetEntityOrigin(FX_OWNER); + FX_ACTIVE = 1; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", L_POS, "make_aura", "update_aura"); + } + + void remove_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(0.5, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void update_aura() + { + if (!(FX_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + else + { + ClientEffect("tempent", "set_current_prop", "scale", /* TODO: $ratio */ $ratio(CUR_SIZE, MIN_SIZE, MAX_SIZE)); + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string L_VOFS = V_OFS; + L_POS += "z"; + if (/* TODO: $get_contents */ $get_contents(L_POS) != "empty") + { + L_POS += "z"; + } + ClientEffect("tempent", "set_current_prop", "origin", L_POS); + } + } + + void make_aura() + { + LogDebug("*** make_aura"); + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 54); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_repulse_burst.as b/scripts/angelscript/effects/sfx_repulse_burst.as new file mode 100644 index 00000000..aa61fd18 --- /dev/null +++ b/scripts/angelscript/effects/sfx_repulse_burst.as @@ -0,0 +1,88 @@ +#pragma context client + +namespace MS +{ + +class SfxRepulseBurst : CGameScript +{ + int CYCLE_ANGLE; + string FX_CENTER; + string FX_DURATION; + string FX_RADIUS; + int GO_AWAY; + string SPRITE_COLOR; + + void client_activate() + { + FX_CENTER = param1; + FX_RADIUS = param2; + FX_DURATION = param3; + if (param4 == "PARAM4") + { + SPRITE_COLOR = Vector3(0, 0, 255); + } + else + { + SPRITE_COLOR = param4; + } + CYCLE_ANGLE = 0; + spriteify(); + FX_DURATION("clear_sprites"); + EmitSound3D("magic/energy1_loud.wav", 10, FX_CENTER); + } + + void spriteify() + { + for (int i = 0; i < 18; i++) + { + createsprite(); + } + } + + void createsprite() + { + string SPRITE_POS = FX_CENTER; + CYCLE_ANGLE += 20; + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, FX_RADIUS, 36)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_POS, "setup_sprite1_sparkle", "sprite_update"); + } + + void setup_sprite1_sparkle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 90.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void sprite_update() + { + if (!(GO_AWAY)) return; + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 400)); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", -4.0); + } + + void clear_sprites() + { + GO_AWAY = 1; + sprite_update(); + ScheduleDelayedEvent(3.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_seal.as b/scripts/angelscript/effects/sfx_seal.as new file mode 100644 index 00000000..1e7abd60 --- /dev/null +++ b/scripts/angelscript/effects/sfx_seal.as @@ -0,0 +1,160 @@ +#pragma context client + +namespace MS +{ + +class SfxSeal : CGameScript +{ + string CYCLE_ANGLE; + string FREQ_SOUND; + int FX_ACTIVE; + string FX_DURATION; + string FX_EXTRAS_TYPE; + string FX_ORIGIN; + string FX_RAD; + string NEXT_SOUND; + int RENDER_AMT; + string SEAL_MODEL; + string SEAL_OFS; + string SNOW_SPRITE; + + SfxSeal() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + SNOW_SPRITE = "firemagic_8bit.spr"; + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_RAD = param2; + SEAL_OFS = param3; + FX_DURATION = param4; + FX_EXTRAS_TYPE = param5; + FX_DURATION("end_fx"); + if (FX_EXTRAS_TYPE != "spider") + { + ClientEffect("tempent", "model", SEAL_MODEL, FX_ORIGIN, "setup_seal1"); + ClientEffect("tempent", "model", SEAL_MODEL, FX_ORIGIN, "setup_seal2"); + } + else + { + ClientEffect("tempent", "model", SEAL_MODEL, FX_ORIGIN, "setup_spider_seal", "update_spider_seal"); + } + if (FX_EXTRAS_TYPE == "freeze_solid") + { + CYCLE_ANGLE = 0; + FREQ_SOUND = 1.0; + EmitSound3D("magic/spawn_loud.wav", 10, FX_ORIGIN); + ClientEffect("light", "new", FX_ORIGIN, FX_RAD, Vector3(128, 128, 255), FX_DURATION); + ScheduleDelayedEvent(0.1, "make_snow"); + } + FX_ACTIVE = 1; + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void make_snow() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "make_snow"); + if (GetGameTime() > NEXT_SOUND) + { + NEXT_SOUND = GetGameTime(); + NEXT_SOUND += FREQ_SOUND; + EmitSound3D("magic/frost_forward.wav", 10, FX_ORIGIN); + } + string SPR_POS = FX_ORIGIN; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, FX_RAD, 256)); + ClientEffect("tempent", "sprite", SNOW_SPRITE, SPR_POS, "setup_snow"); + CYCLE_ANGLE += 40; + if (CYCLE_ANGLE >= 359.99) + { + CYCLE_ANGLE = 0; + } + } + + void update_spider_seal() + { + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", RENDER_AMT); + RENDER_AMT -= 2; + if (RENDER_AMT < 100) + { + if ((FX_ACTIVE)) + { + RENDER_AMT = 100; + } + else + { + if (RENDER_AMT < 0) + { + } + RENDER_AMT = 0; + } + } + } + + void ext_spider_pulse() + { + RENDER_AMT = 255; + } + + void setup_spider_seal() + { + string L_FX_DURATION = FX_DURATION; + L_FX_DURATION += 1; + ClientEffect("tempent", "set_current_prop", "death_delay", L_FX_DURATION); + ClientEffect("tempent", "set_current_prop", "fade", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 0); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + ClientEffect("tempent", "set_current_prop", "frames", 39); + } + + void setup_seal1() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "fade", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + ClientEffect("tempent", "set_current_prop", "frames", 39); + } + + void setup_seal2() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "fade", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", -1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + ClientEffect("tempent", "set_current_prop", "frames", 39); + } + + void setup_snow() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "scale", 0.75); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 64, 255)); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_seal_follow.as b/scripts/angelscript/effects/sfx_seal_follow.as new file mode 100644 index 00000000..a9d48bda --- /dev/null +++ b/scripts/angelscript/effects/sfx_seal_follow.as @@ -0,0 +1,101 @@ +#pragma context server + +namespace MS +{ + +class SfxSealFollow : CGameScript +{ + string DO_GLOW; + int FX_ACTIVE; + string FX_DURATION; + string FX_MODEL_OFS; + string FX_OWNER; + string GLOW_COLOR; + string GLOW_RAD; + string LIGHT_ID; + string MODEL_NAME; + int V_OFS; + int V_OFS_DUCK; + + SfxSealFollow() + { + MODEL_NAME = "weapons/magic/seals.mdl"; + V_OFS = 0; + V_OFS_DUCK = 0; + } + + void client_activate() + { + SetCallback("render", "enable"); + FX_OWNER = param1; + FX_DURATION = param2; + FX_MODEL_OFS = param3; + DO_GLOW = param4; + GLOW_COLOR = param5; + GLOW_RAD = param6; + LogDebug("*** seal_follow FX_OWNER FX_DURATION"); + string L_DURATION = FX_DURATION; + L_DURATION += 1.0; + L_DURATION("remove_fx"); + FX_ACTIVE = 1; + ClientEffect("tempent", "model", MODEL_NAME, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "make_aura", "update_aura"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 1.0); + LIGHT_ID = "game.script.last_light_id"; + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(FX_OWNER, "exists"))) return; + ClientEffect("light", LIGHT_ID, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 1.0); + } + + void remove_fx() + { + LogDebug("**** seal_follow remove"); + FX_ACTIVE = 0; + ScheduleDelayedEvent(0.5, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void update_aura() + { + if (!(FX_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + else + { + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string L_VOFS = V_OFS; + L_POS += "z"; + if (/* TODO: $get_contents */ $get_contents(L_POS) != "empty") + { + L_POS += "z"; + } + ClientEffect("tempent", "set_current_prop", "origin", L_POS); + } + } + + void make_aura() + { + LogDebug("*** make_aura"); + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", FX_MODEL_OFS); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 40); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_seal_instant.as b/scripts/angelscript/effects/sfx_seal_instant.as new file mode 100644 index 00000000..c5ee49c6 --- /dev/null +++ b/scripts/angelscript/effects/sfx_seal_instant.as @@ -0,0 +1,219 @@ +#pragma context client + +namespace MS +{ + +class SfxSealInstant : CGameScript +{ + int CYCLE_ANGLE; + int FX_ACTIVE; + float FX_DURATION; + string FX_ORIGIN; + string LIGHT_RADIUS; + string SEAL_BODY; + string SEAL_COLOR; + string SEAL_MODEL; + int SEAL_PITCH; + string SEAL_RAD; + string SEAL_SOUND; + string SEAL_TYPE; + string SPRITE_COLOR; + int SPRITE_FRAMERATE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + int SPRITE_RENDERAMT; + string SPRITE_RENDERMODE; + float SPRITE_SCALE; + + SfxSealInstant() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + FX_DURATION = 2.0; + } + + void client_activate() + { + FX_ORIGIN = param1; + SEAL_TYPE = param2; + SEAL_RAD = param3; + SEAL_BODY = param4; + SEAL_PITCH = 100; + if (SEAL_TYPE == "fire") + { + SEAL_COLOR = Vector3(255, 0, 0); + SEAL_SOUND = "ambience/steamburst1.wav"; + fire_aura(); + } + else + { + if (SEAL_TYPE == "cold") + { + SEAL_COLOR = Vector3(128, 128, 255); + SEAL_SOUND = "magic/freeze.wav"; + cold_aura(); + } + else + { + if (SEAL_TYPE == "lightning") + { + SEAL_COLOR = Vector3(255, 255, 0); + SEAL_SOUND = "magic/lightning_strike2.wav"; + lightning_aura(); + } + else + { + if (SEAL_TYPE == "poison") + { + SEAL_COLOR = Vector3(0, 255, 0); + SEAL_SOUND = "ambience/steamburst1.wav"; + SEAL_PITCH = 60; + poison_aura(); + } + } + } + } + ScheduleDelayedEvent(2.0, "end_fx"); + FX_ACTIVE = 1; + EmitSound3D(SEAL_SOUND, 10, FX_ORIGIN, 0.8, 0, SEAL_PITCH); + ClientEffect("tempent", "model", SEAL_MODEL, FX_ORIGIN, "setup_seal_instant"); + LIGHT_RADIUS = SEAL_RAD; + LIGHT_RADIUS *= 1.11; + ClientEffect("light", "new", FX_ORIGIN, LIGHT_RADIUS, SEAL_COLOR, FX_DURATION); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_seal_instant() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 40); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "body", SEAL_BODY); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + } + + void fire_aura() + { + ClientEffect("tempent", "model", "weapons/projectiles.mdl", FX_ORIGIN, "make_aura"); + } + + void make_aura() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 51); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "scale", 8.0); + } + + void cold_aura() + { + ClientEffect("tempent", "model", "weapons/projectiles.mdl", FX_ORIGIN, "setup_shpere"); + } + + void setup_shpere() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "body", 1); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "frames", 255); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void lightning_aura() + { + CYCLE_ANGLE = 0; + for (int i = 0; i < 17; i++) + { + create_beams(); + } + } + + void create_beams() + { + string CL_BEAM_START = FX_ORIGIN; + string BEAM_RAD = SEAL_RAD; + BEAM_RAD *= 0.8; + CL_BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, BEAM_RAD, 0)); + string CL_BEAM_END = CL_BEAM_START; + CL_BEAM_END += "z"; + ClientEffect("beam_points", CL_BEAM_START, CL_BEAM_END, "lgtning.spr", 1.0, 5.0, 3.0, 200, 50, 30, Vector3(1.0, 1.0, 0.0)); + CYCLE_ANGLE += 20; + } + + void poison_aura() + { + SPRITE_NAME = "poison_cloud.spr"; + SPRITE_COLOR = Vector3(0, 255, 0); + SPRITE_RENDERAMT = 200; + SPRITE_RENDERMODE = "add"; + SPRITE_FRAMERATE = 30; + SPRITE_NFRAMES = 17; + SPRITE_SCALE = 1.0; + CYCLE_ANGLE = 0; + for (int i = 0; i < 17; i++) + { + create_sprites(); + } + } + + void create_sprites() + { + string SPR_POS = FX_ORIGIN; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 10, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPR_POS, "setup_ring_sprite"); + CYCLE_ANGLE += 20; + } + + void setup_ring_sprite() + { + float FADE_DEL = 1.0; + int SPRITE_SPEED = 100; + if (FX_RADIUS > 128) + { + float FADE_DEL = 2.0; + int SPRITE_SPEED = 400; + } + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "renderamt", SPRITE_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "rendermode", SPRITE_RENDERMODE); + ClientEffect("tempent", "set_current_prop", "framerate", SPRITE_FRAMERATE); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string SPRITE_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", SPRITE_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_seal_warning.as b/scripts/angelscript/effects/sfx_seal_warning.as new file mode 100644 index 00000000..f9705dd7 --- /dev/null +++ b/scripts/angelscript/effects/sfx_seal_warning.as @@ -0,0 +1,120 @@ +#pragma context client + +namespace MS +{ + +class SfxSealWarning : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_END_TIME; + string FX_LIGHT_ID; + string FX_ORIGIN; + string SEAL_BODY; + string SEAL_COLOR; + string SEAL_MODEL; + int SEAL_PITCH; + string SEAL_RAD; + string SEAL_TYPE; + + SfxSealWarning() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + } + + void client_activate() + { + FX_ORIGIN = param1; + SEAL_TYPE = param2; + SEAL_RAD = param3; + SEAL_BODY = param4; + FX_DURATION = param5; + SEAL_PITCH = 100; + FX_END_TIME = GetGameTime(); + FX_END_TIME += FX_DURATION; + SetCallback("render", "enable"); + if (SEAL_TYPE == "fire") + { + SEAL_COLOR = Vector3(255, 0, 0); + } + else + { + if (SEAL_TYPE == "cold") + { + SEAL_COLOR = Vector3(128, 128, 255); + } + else + { + if (SEAL_TYPE == "lightning") + { + SEAL_COLOR = Vector3(255, 255, 0); + } + else + { + if (SEAL_TYPE == "poison") + { + SEAL_COLOR = Vector3(0, 255, 0); + } + } + } + } + FX_DURATION("end_fx"); + FX_ACTIVE = 1; + EmitSound3D("weapons/mine_charge.wav", 10, FX_ORIGIN, 0.8, 0, 120); + ClientEffect("tempent", "model", SEAL_MODEL, FX_ORIGIN, "setup_seal_warn", "update_seal_warn"); + ClientEffect("light", "new", FX_ORIGIN, 10, SEAL_COLOR, 0.1); + FX_LIGHT_ID = "game.script.last_light_id"; + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_seal_warn() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 10); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 40); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "body", SEAL_BODY); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + } + + void update_seal_warn() + { + if ((FX_ACTIVE)) + { + string L_RENDER_RATIO = (FX_END_TIME - GetGameTime()); + string L_RENDER_RATIO = (L_RENDER_RATIO / FX_DURATION); + string L_RENDER_AMT = /* TODO: $ratio */ $ratio(L_RENDER_RATIO, 255, 10); + } + else + { + int L_RENDER_AMT = 0; + } + ClientEffect("tempent", "set_current_prop", "renderamt", L_RENDER_AMT); + } + + void game_prerender() + { + string L_RENDER_RATIO = (FX_END_TIME - GetGameTime()); + string L_RENDER_RATIO = (L_RENDER_RATIO / FX_DURATION); + string L_RENDER_RADIUS = /* TODO: $ratio */ $ratio(L_RENDER_RATIO, SEAL_RAD, 10); + string L_RENDER_RADIUS = (L_RENDER_RADIUS * 1.11); + ClientEffect("light", FX_LIGHT_ID, FX_ORIGIN, L_RENDER_RADIUS, SEAL_COLOR, 0.1); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_sfaura.as b/scripts/angelscript/effects/sfx_sfaura.as new file mode 100644 index 00000000..6cec72ff --- /dev/null +++ b/scripts/angelscript/effects/sfx_sfaura.as @@ -0,0 +1,127 @@ +#pragma context client + +namespace MS +{ + +class SfxSfaura : CGameScript +{ + string CUR_SIZE; + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + string GLOW_COLOR; + int GLOW_RAD; + float GROWTH_RATE; + string LIGHT_ID; + int MAX_GLOW_SIZE; + float MAX_SIZE; + int MIN_GLOW_SIZE; + float MIN_SIZE; + int V_OFS; + int V_OFS_DUCK; + + SfxSfaura() + { + MIN_SIZE = 2.0; + MAX_SIZE = 9.0; + MIN_GLOW_SIZE = 64; + MAX_GLOW_SIZE = 368; + V_OFS = -34; + V_OFS_DUCK = 24; + GLOW_RAD = 128; + GLOW_COLOR = Vector3(255, 128, 64); + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + if ((FX_ACTIVE)) + { + } + if (CUR_SIZE < 1.0) + { + CUR_SIZE += GROWTH_RATE; + } + if (CUR_SIZE > 1.0) + { + LogDebug("*** sfaura_client_maxsize"); + CUR_SIZE = 1.0; + } + } + + void client_activate() + { + GROWTH_RATE = 0.015; + if ((param4).findFirst(PARAM) == 0) + { + GROWTH_RATE = param4; + } + SetCallback("render", "enable"); + FX_OWNER = param1; + CUR_SIZE = param2; + FX_DURATION = param3; + LogDebug("*** client_activate CUR_SIZE [ /* TODO: $ratio */ $ratio(CUR_SIZE, MIN_GLOW_SIZE, MAX_GLOW_SIZE) ] [ /* TODO: $ratio */ $ratio(CUR_SIZE, MIN_SIZE, MAX_SIZE) ]"); + FX_ACTIVE = 1; + FX_DURATION("remove_fx"); + ClientEffect("tempent", "model", "weapons/projectiles.mdl", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "make_aura", "update_aura"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), /* TODO: $ratio */ $ratio(CUR_SIZE, MIN_GLOW_SIZE, MAX_GLOW_SIZE), GLOW_COLOR, 1.0); + LIGHT_ID = "game.script.last_light_id"; + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(MY_OWNER, "exists"))) return; + ClientEffect("light", LIGHT_ID, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), /* TODO: $ratio */ $ratio(CUR_SIZE, MIN_GLOW_SIZE, MAX_GLOW_SIZE), GLOW_COLOR, 1.0); + } + + void remove_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(0.5, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void update_aura() + { + if (!(FX_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + else + { + ClientEffect("tempent", "set_current_prop", "scale", /* TODO: $ratio */ $ratio(CUR_SIZE, MIN_SIZE, MAX_SIZE)); + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string L_VOFS = V_OFS; + L_POS += "z"; + if (/* TODO: $get_contents */ $get_contents(L_POS) != "empty") + { + L_POS += "z"; + } + ClientEffect("tempent", "set_current_prop", "origin", L_POS); + } + } + + void make_aura() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 51); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "scale", /* TODO: $ratio */ $ratio(CUR_SIZE, MIN_SIZE, MAX_SIZE)); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_shock_burst.as b/scripts/angelscript/effects/sfx_shock_burst.as new file mode 100644 index 00000000..62107b8a --- /dev/null +++ b/scripts/angelscript/effects/sfx_shock_burst.as @@ -0,0 +1,83 @@ +#pragma context client + +namespace MS +{ + +class SfxShockBurst : CGameScript +{ + int CYCLE_ANGLE; + string FX_CENTER; + string FX_RADIUS; + string SEAL_MODEL; + string SOUND_BURST; + + SfxShockBurst() + { + SOUND_BURST = "magic/lightning_strike2.wav"; + SEAL_MODEL = "weapons/magic/seals.mdl"; + Precache(SEAL_MODEL); + Precache(SOUND_BURST); + } + + void client_activate() + { + FX_CENTER = param1; + FX_RADIUS = param2; + string DO_GLOW = param3; + string GLOW_COLOR = param4; + if ((DO_GLOW)) + { + ClientEffect("light", "new", FX_CENTER, FX_RADIUS, GLOW_COLOR, 1.0); + } + ScheduleDelayedEvent(2.0, "remove_me"); + CYCLE_ANGLE = 0; + for (int i = 0; i < 17; i++) + { + create_beams(); + } + ClientEffect("tempent", "model", SEAL_MODEL, FX_CENTER, "setup_seal"); + EmitSound3D(SOUND_BURST, 10, FX_CENTER); + } + + void remove_me() + { + RemoveScript(); + } + + void create_beams() + { + string CL_BEAM_START = FX_CENTER; + string BEAM_RAD = FX_RADIUS; + BEAM_RAD *= 0.6; + CL_BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, BEAM_RAD, 0)); + string CL_BEAM_END = CL_BEAM_START; + CL_BEAM_END += "z"; + ClientEffect("beam_points", CL_BEAM_START, CL_BEAM_END, "lgtning.spr", 1.0, 5.0, 3.0, 200, 50, 30, Vector3(1.0, 1.0, 0.0)); + CYCLE_ANGLE += 20; + } + + void setup_seal() + { + int MODEL_BODY = 28; + if (FX_RADIUS > 128) + { + int MODEL_BODY = 29; + } + if (FX_RADIUS <= 64) + { + int MODEL_BODY = 27; + } + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 40); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "body", MODEL_BODY); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_splodie.as b/scripts/angelscript/effects/sfx_splodie.as new file mode 100644 index 00000000..a0e69413 --- /dev/null +++ b/scripts/angelscript/effects/sfx_splodie.as @@ -0,0 +1,50 @@ +#pragma context client + +namespace MS +{ + +class SfxSplodie : CGameScript +{ + string SPLODIE_SOUND; + string SPLODIE_SPRITE; + string SPR_COLOR; + + SfxSplodie() + { + SPLODIE_SPRITE = "bigsmoke.spr"; + SPLODIE_SOUND = "weapons/explode3.wav"; + } + + void client_activate() + { + string L_POS = param1; + SPR_COLOR = param2; + ClientEffect("tempent", "sprite", SPLODIE_SPRITE, L_POS, "setup_smoke"); + EmitSound3D(SPLODIE_SOUND, 10, L_POS); + ScheduleDelayedEvent(2.1, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + DeleteEntity(GetOwner()); + } + + void setup_smoke() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "color"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPR_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_sprite.as b/scripts/angelscript/effects/sfx_sprite.as new file mode 100644 index 00000000..7e9e4019 --- /dev/null +++ b/scripts/angelscript/effects/sfx_sprite.as @@ -0,0 +1,66 @@ +#pragma context client + +namespace MS +{ + +class SfxSprite : CGameScript +{ + string RENDER_PROPS; + string SPRITE_DURATION; + + void client_activate() + { + string SPRITE_POS = param1; + string SPRITE_NAME = param2; + RENDER_PROPS = param3; + SPRITE_DURATION = param4; + if (SPRITE_DURATION != "once") + { + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_temp_sprite"); + string F_DURATION = SPRITE_DURATION; + F_DURATION += 0.1; + F_DURATION("remove_me"); + } + else + { + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_temp_sprite", "update_temp_sprite"); + F_DURATION += 20.0; + F_DURATION("remove_me"); + LogDebug("*** $currentscript playonce started @ game.time"); + } + } + + void update_temp_sprite() + { + if (!("game.tempent.frame" >= GetToken(RENDER_PROPS, 6, ";"))) return; + remove_me(); + } + + void remove_me() + { + RemoveScript(); + } + + void setup_temp_sprite() + { + if (SPRITE_DURATION != "once") + { + ClientEffect("tempent", "set_current_prop", "death_delay", SPRITE_DURATION); + } + if (GetToken(RENDER_PROPS, 0, ";") == 1) + { + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + ClientEffect("tempent", "set_current_prop", "scale", GetToken(RENDER_PROPS, 1, ";")); + ClientEffect("tempent", "set_current_prop", "renderamt", GetToken(RENDER_PROPS, 2, ";")); + ClientEffect("tempent", "set_current_prop", "rendermode", GetToken(RENDER_PROPS, 3, ";")); + ClientEffect("tempent", "set_current_prop", "rendercolor", GetToken(RENDER_PROPS, 4, ";")); + ClientEffect("tempent", "set_current_prop", "framerate", GetToken(RENDER_PROPS, 5, ";")); + ClientEffect("tempent", "set_current_prop", "frames", GetToken(RENDER_PROPS, 6, ";")); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_sprite_in.as b/scripts/angelscript/effects/sfx_sprite_in.as new file mode 100644 index 00000000..5cf2af11 --- /dev/null +++ b/scripts/angelscript/effects/sfx_sprite_in.as @@ -0,0 +1,47 @@ +#pragma context client + +namespace MS +{ + +class SfxSpriteIn : CGameScript +{ + string SOUND_SPAWN; + string SPRITE_FRAMES; + string SPRITE_SCALE; + + SfxSpriteIn() + { + SOUND_SPAWN = "magic/spawn_loud.wav"; + } + + void client_activate() + { + string FX_ORG = param1; + string SPRITE_NAME = param2; + SPRITE_FRAMES = param3; + SPRITE_SCALE = param4; + EmitSound3D(SOUND_SPAWN, 10, FX_ORG); + ClientEffect("tempent", "sprite", SPRITE_NAME, FX_ORG, "setup_spawn_sprite"); + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_spawn_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 20); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_FRAMES); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_sprite_in_fancy.as b/scripts/angelscript/effects/sfx_sprite_in_fancy.as new file mode 100644 index 00000000..30e32515 --- /dev/null +++ b/scripts/angelscript/effects/sfx_sprite_in_fancy.as @@ -0,0 +1,72 @@ +#pragma context client + +namespace MS +{ + +class SfxSpriteInFancy : CGameScript +{ + float FADE_COUNT; + int FX_ACTIVE; + string FX_ORG; + string GLOW_COLOR; + string GLOW_RAD; + string LIGHT_ID; + string SPRITE_FRAMES; + string SPRITE_SCALE; + + void client_activate() + { + SetCallback("render", "enable"); + FX_ORG = param1; + string SPRITE_NAME = param2; + SPRITE_FRAMES = param3; + SPRITE_SCALE = param4; + ClientEffect("tempent", "sprite", SPRITE_NAME, FX_ORG, "setup_spawn_sprite"); + GLOW_COLOR = param5; + GLOW_RAD = param6; + FADE_COUNT = 1.0; + FX_ACTIVE = 1; + ClientEffect("light", "new", FX_ORG, GLOW_RAD, GLOW_COLOR, 5.0); + LIGHT_ID = "game.script.last_light_id"; + EmitSound3D(param7, 10, FX_ORG); + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void game_prerender() + { + FADE_COUNT -= 0.01; + if (FADE_COUNT > 0) + { + string CUR_RAD = /* TODO: $ratio */ $ratio(FADE_COUNT, 0, GLOW_RAD); + ClientEffect("light", LIGHT_ID, FX_ORG, CUR_RAD, GLOW_COLOR, 1.0); + } + else + { + if ((FX_ACTIVE)) + { + } + FX_ACTIVE = 0; + remove_fx(); + } + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_spawn_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 20); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_FRAMES); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_stun_burst.as b/scripts/angelscript/effects/sfx_stun_burst.as new file mode 100644 index 00000000..fc0af157 --- /dev/null +++ b/scripts/angelscript/effects/sfx_stun_burst.as @@ -0,0 +1,22 @@ +#pragma context client + +#include "effects/sfx_fire_burst.as" + +namespace MS +{ + +class SfxStunBurst : CGameScript +{ + string SOUND_BURST; + string SPRITE_COLOR; + + SfxStunBurst() + { + SPRITE_COLOR = Vector3(0, 0, 255); + SOUND_BURST = "magic/boom.wav"; + Precache(SOUND_BURST); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_stunring.as b/scripts/angelscript/effects/sfx_stunring.as new file mode 100644 index 00000000..a71b9df9 --- /dev/null +++ b/scripts/angelscript/effects/sfx_stunring.as @@ -0,0 +1,95 @@ +#pragma context client + +namespace MS +{ + +class SfxStunring : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + string OWNER_HEIGHT; + int TILT_AMT; + string TILT_DIR; + + SfxStunring() + { + } + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + OWNER_HEIGHT = param3; + OWNER_HEIGHT -= 16; + FX_ACTIVE = 1; + OWNER_HEIGHT += 15; + if ((/* TODO: $getcl */ $getcl(FX_OWNER, "isplayer"))) + { + OWNER_HEIGHT -= 35; + } + TILT_AMT = 0; + string OWNER_HEAD = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + OWNER_HEAD += "z"; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", OWNER_HEAD, "setup_stun_ring", "update_stun_ring"); + FX_DURATION("end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_stun_ring() + { + string OWNER_HEAD = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + OWNER_HEAD += "z"; + ClientEffect("tempent", "set_current_prop", "origin", OWNER_HEAD); + if (TILT_DIR == 1) + { + TILT_AMT += 0.1; + } + else + { + TILT_AMT -= 0.1; + } + if (TILT_AMT > 10) + { + TILT_DIR = 0; + } + if (TILT_AMT < -10) + { + TILT_DIR = 1; + } + ClientEffect("tempent", "set_current_prop", "angles", Vector3(TILT_AMT, 0, /* TODO: $neg */ $neg(TILT_AMT))); + } + + void setup_stun_ring() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 53); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 6); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + string FADE_DELAY = FX_DURATION; + FADE_DELAY *= 0.5; + FADE_DELAY += FX_DURATION; + ClientEffect("tempent", "set_current_prop", "fadeout", FADE_DELAY); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_stunring_old.as b/scripts/angelscript/effects/sfx_stunring_old.as new file mode 100644 index 00000000..4aa2a249 --- /dev/null +++ b/scripts/angelscript/effects/sfx_stunring_old.as @@ -0,0 +1,78 @@ +#pragma context server + +namespace MS +{ + +class SfxStunringOld : CGameScript +{ + int TILT_SPEED; + int rheight; + string script.owner; + int script.tilt; + + SfxStunringOld() + { + TILT_SPEED = 70; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + snap_to_owner(); + } + + void game_dynamically_created() + { + script.owner = param1; + script.tilt = 1; + SetModel("misc/stunned.mdl"); + SetProp(GetOwner(), "movetype", "const.movetype.noclip"); + SetProp(GetOwner(), "solid", 0); + SetAngles("angles.z"); + SetFly(true); + SetInvincible(true); + PlayAnim("once", "idle"); + SetAnimFrameRate(2); + snap_to_owner(); + set_tilt(); + PARAM2("die"); + } + + void set_tilt() + { + SetRepeatDelay(0.5); + if ((script.tilt)) + { + SetProp(GetOwner(), "avelocity", Vector3(0, 0, /* TODO: $neg */ $neg(TILT_SPEED))); + script.tilt = 0; + } + else + { + SetProp(GetOwner(), "avelocity", Vector3(0, 0, TILT_SPEED)); + script.tilt = 1; + } + } + + void snap_to_owner() + { + string l.pos = GetEntityOrigin(script.owner); + rheight = 37; + if (IsValidPlayer(script.owner) == 0) + { + rheight = GetEntityHeight(script.owner); + rheight += 15; + } + l.pos += Vector3(0, 0, rheight); + SetEntityOrigin(GetOwner(), l.pos); + if ((IsEntityAlive(script.owner))) return; + } + + void die() + { + SetProp(GetOwner(), "avelocity", Vector3(0, 0, 0)); + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_summon_circle.as b/scripts/angelscript/effects/sfx_summon_circle.as new file mode 100644 index 00000000..e54d697e --- /dev/null +++ b/scripts/angelscript/effects/sfx_summon_circle.as @@ -0,0 +1,45 @@ +#pragma context client + +namespace MS +{ + +class SfxSummonCircle : CGameScript +{ + string FX_ORIGIN; + string SEAL_MODEL; + string SEAL_OFS; + + SfxSummonCircle() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + } + + void client_activate() + { + FX_ORIGIN = param1; + SEAL_OFS = param2; + ClientEffect("tempent", "model", SEAL_MODEL, FX_ORIGIN, "setup_seal"); + EmitSound3D("magic/spawn_loud.wav", 10, FX_ORIGIN); + ScheduleDelayedEvent(4.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void setup_seal() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "fade", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + ClientEffect("tempent", "set_current_prop", "frames", 39); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_viewheight.as b/scripts/angelscript/effects/sfx_viewheight.as new file mode 100644 index 00000000..ef126a29 --- /dev/null +++ b/scripts/angelscript/effects/sfx_viewheight.as @@ -0,0 +1,91 @@ +#pragma context server + +namespace MS +{ + +class SfxViewheight : CGameScript +{ + string FX_CUR_V; + string FX_DEST_V; + string FX_DRIFTING; + string FX_SPEED; + string game.cleffect.view_ofs.z; + + void client_activate() + { + LogDebug("*** sfx_viewheight client_activate PARAM1 PARAM2 PARAM3"); + if (param1 != "remove") + { + FX_SPEED = param2; + if (FX_SPEED != 0) + { + FX_DEST_V = param1; + FX_DRIFTING = 1; + drift_to_new_view(); + } + else + { + string L_PARAM1 = param1; + set_view(L_PARAM1); + FX_CUR_V = param1; + } + } + else + { + RemoveScript(); + } + } + + void set_view() + { + game.cleffect.view_ofs.z = param1; + } + + void update_view() + { + LogDebug("*** $currentscript update_view PARAM1 PARAM2 PARAM3"); + FX_SPEED = param2; + if (FX_SPEED != 0) + { + FX_DEST_V = param1; + if (!(FX_DRIFTING)) + { + } + FX_DRIFTING = 1; + drift_to_new_view(); + } + else + { + FX_CUR_V = param1; + set_view(FX_CUR_V); + } + } + + void drift_to_new_view() + { + if (!(FX_DRIFTING)) return; + FX_CUR_V += FX_SPEED; + if (FX_SPEED < 0) + { + if (FX_CUR_V < FX_DEST_V) + { + } + set_view(FX_CUR_V); + FX_DRIFTING = 0; + } + else + { + if (FX_CUR_V > FX_DEST_V) + { + } + set_view(FX_CUR_V); + FX_DRIFTING = 0; + } + set_view(FX_CUR_V); + if (!(FX_DRIFTING)) return; + ScheduleDelayedEvent(0.01, "drift_to_new_view"); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_wave.as b/scripts/angelscript/effects/sfx_wave.as new file mode 100644 index 00000000..f0830c33 --- /dev/null +++ b/scripts/angelscript/effects/sfx_wave.as @@ -0,0 +1,297 @@ +#pragma context server + +namespace MS +{ + +class SfxWave : CGameScript +{ + int CUR_JUMPS; + int FX_ACTIVE; + string FX_COLOR; + float FX_DURATION; + string FX_LEVEL; + string FX_LIGHT_ID; + int FX_LIGHT_OFS; + string FX_LIGHT_POS; + int FX_MODEL_BODY; + string FX_ORIGIN; + string FX_OWNER; + int FX_RENDER_AMT; + string FX_SCRIPT_ID; + string FX_SKILL; + int FX_SPEED; + string FX_YAW; + int TIMES_HEALED; + + SfxWave() + { + FX_DURATION = 20.0; + CUR_JUMPS = 0; + TIMES_HEALED = 1; + FX_DURATION = 20.0; + FX_LIGHT_OFS = -100; + } + + void OnSpawn() override + { + SetName("Holy Wave"); + SetModel("null.mdl"); + SetInvincible(true); + SetHeight(0); + SetWidth(0); + SetSolid("none"); + FX_DURATION("end_me_please"); + EmitSound(GetOwner(), 2, "magic/hburst_sco_lgrinholy01.wav", 10); + } + + void game_dynamically_created() + { + FX_OWNER = param1; + FX_YAW = param2; + FX_LEVEL = param3; + FX_SKILL = param4; + FX_ORIGIN = GetEntityOrigin(GetOwner()); + FX_SPEED = 260; + ClientEvent("new", "all", GetScriptName(GetOwner()), FX_ORIGIN, FX_YAW, FX_SPEED); + FX_SCRIPT_ID = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.5, "burst_fx"); + } + + void burst_fx() + { + string L_POS = FX_ORIGIN; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, FX_YAW, 0), Vector3(0, (FX_SPEED / 2), 0)); + string L_TRACE = TraceLine(FX_ORIGIN, L_POS); + if (L_TRACE == L_POS) + { + FX_ORIGIN = L_POS; + L_POS += "z"; + string L_DMG = FX_LEVEL; + L_DMG *= 2; + XDoDamage(L_POS, 128, L_DMG, 0, FX_OWNER, GetOwner(), FX_SKILL, "holy_effect", "dmgevent:*holywave"); + ClientEvent("update", "all", FX_SCRIPT_ID, "sfx_wave_explody"); + ScheduleDelayedEvent(0.5, "burst_fx"); + } + else + { + end_me_please(); + } + } + + void holywave_dodamage() + { + string L_RELATIONSHIP = GetRelationship(param2); + if (L_RELATIONSHIP == "enemy") + { + int L_ENEMY = 1; + } + if (L_RELATIONSHIP == "wary") + { + int L_ENEMY = 1; + } + if ((IsValidPlayer(param2))) + { + if (!("game.pvp")) + { + int L_ENEMY = 0; + } + } + if ((L_ENEMY)) + { + if ((param1)) + { + } + string L_DOT = FX_LEVEL; + L_DOT *= 0.5; + ApplyEffect(param2, "effects/dot_holy", 5.0, FX_OWNER, L_DOT, FX_SKILL); + } + else + { + ce_wave_do_heal(GetEntityIndex(param2)); + } + } + + void ce_wave_do_heal() + { + if (!(GetEntityHealth(param1) != GetEntityMaxHealth(param1))) return; + int L_IS_ME = 0; + int L_ADD_DMG_POINTS = 0; + string L_DOT = FX_LEVEL; + L_DOT *= 4; + L_DOT /= TIMES_HEALED; + TIMES_HEALED *= 2; + Effect("glow", param1, Vector3(0, 255, 0), 256, 0.5, 0.5); + if (GetEntityIndex(FX_OWNER) == GetEntityIndex(param1)) + { + int L_IS_ME = 1; + } + if (GetEntityHealth(param1) < GetEntityMaxHealth(param1)) + { + HealEntity(param1, L_DOT); + if ((L_IS_ME)) + { + SendColoredMessage(FX_OWNER, "Your holy wave heals you for " + int(L_DOT) + " hp"); + } + else + { + SendColoredMessage(FX_OWNER, "You heal " + GetEntityName(param1) + "for " + int(L_DOT) + " hp"); + if ((IsValidPlayer(param1))) + { + int L_ADD_DMG_POINTS = 1; + SendColoredMessage(param1, GetEntityName(FX_OWNER) + "heals you for " + int(L_DOT) + " hp"); + } + else + { + if ((GetEntityProperty(param1, "scriptvar"))) + { + int L_ADD_DMG_POINTS = 1; + } + } + } + if ((L_ADD_DMG_POINTS)) + { + CallExternal(FX_OWNER, "add_dmg_points", L_DOT); + } + } + } + + void end_me_please() + { + ClientEvent("update", "all", FX_SCRIPT_ID, "end_fx"); + DeleteEntity(GetOwner()); + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_YAW = param2; + FX_SPEED = param3; + FX_RENDER_AMT = 180; + FX_ACTIVE = 1; + SetCallback("render", "enable"); + FX_COLOR = Vector3(200, 128, 0); + FX_MODEL_BODY = 75; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", FX_ORIGIN, "fx_wave_setup", "fx_wave_update", "fx_wave_collide"); + FX_LIGHT_POS = FX_ORIGIN; + string L_FX_LIGHT_POS = FX_LIGHT_POS; + L_FX_LIGHT_POS += /* TODO: $relpos */ $relpos(Vector3(0, FX_YAW, 0), Vector3(0, FX_LIGHT_OFS, 0)); + ClientEffect("light", "new", L_FX_LIGHT_POS, FX_RENDER_AMT, Vector3(255, 255, 255), 0.1); + FX_LIGHT_ID = "game.script.last_light_id"; + trail_loop(); + FX_DURATION("end_fx"); + } + + void trail_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "trail_loop"); + ClientEffect("tempent", "model", "weapons/projectiles.mdl", FX_LIGHT_POS, "fx_trail_setup"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + if (FX_RENDER_AMT > 220) + { + Vector3 L_FX_COLOR = Vector3(255, 255, 255); + } + else + { + string L_FX_COLOR = FX_COLOR; + } + string L_FX_LIGHT_POS = FX_LIGHT_POS; + L_FX_LIGHT_POS += /* TODO: $relpos */ $relpos(Vector3(0, FX_YAW, 0), Vector3(0, FX_LIGHT_OFS, 0)); + ClientEffect("light", FX_LIGHT_ID, L_FX_LIGHT_POS, FX_RENDER_AMT, L_FX_COLOR, 0.1); + } + + void fx_wave_update() + { + if ((FX_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, FX_YAW, 0), Vector3(0, FX_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "renderamt", FX_RENDER_AMT); + if (FX_RENDER_AMT > 140) + { + FX_RENDER_AMT -= 5; + } + string L_MY_POS = "game.tempent.origin"; + FX_LIGHT_POS = L_MY_POS; + if (OLD_POS == L_MY_POS) + { + end_fx(); + return; + } + else + { + OLD_POS = L_MY_POS; + } + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, -20000)); + } + } + + void fx_wave_collide() + { + end_fx(); + } + + void sfx_wave_explody() + { + FX_RENDER_AMT = 255; + EmitSound3D("magic/hburst_sca_outholy01.wav", 5, OLD_POS, 0.8, 0, RandomInt(80, 120)); + } + + void fx_wave_setup() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "body", FX_MODEL_BODY); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, FX_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, FX_YAW, 0), Vector3(0, FX_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "framerate", 0.01); + ClientEffect("tempent", "set_current_prop", "frames", 99999); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + float L_NEXT_UPDATE = GetGameTime(); + L_NEXT_UPDATE += 0.5; + ClientEffect("tempent", "set_current_prop", "fuser1", L_NEXT_UPDATE); + } + + void fx_trail_setup() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "renderamt", 50); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "body", FX_MODEL_BODY); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, FX_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, FX_YAW, 0), Vector3(0, 0.1, 0))); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 0.01); + ClientEffect("tempent", "set_current_prop", "frames", 99999); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + } + + void end_fx() + { + FX_ACTIVE = 0; + RemoveScript(); + } + + void remove_fx() + { + FX_ACTIVE = 0; + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_webbed.as b/scripts/angelscript/effects/sfx_webbed.as new file mode 100644 index 00000000..1d248be5 --- /dev/null +++ b/scripts/angelscript/effects/sfx_webbed.as @@ -0,0 +1,152 @@ +#pragma context client + +namespace MS +{ + +class SfxWebbed : CGameScript +{ + string FX_COCOONED; + int FX_CUR_WEBS; + string FX_DECAY; + int FX_DIE; + string FX_NEXT_DECAY; + string FX_WEBS_TILL_COCOON; + string FX_WEB_TARGET; + string WEB_RATIO; + + SfxWebbed() + { + WEB_RATIO = (FX_CUR_WEBS / FX_WEBS_TILL_COCOON); + } + + void client_activate() + { + FX_DECAY = param1; + FX_NEXT_DECAY = (FX_DECAY + GetGameTime()); + FX_WEB_TARGET = param2; + FX_CUR_WEBS = 1; + FX_WEBS_TILL_COCOON = param3; + ClientEffect("tempent", "model", "misc/treasure.mdl", "func_get_new_pos"(), "web_setup", "web_update"); + FX_DECAY("web_decay"); + } + + void ext_webbed() + { + if ((FX_COCOONED)) return; + FX_CUR_WEBS += 1; + if (FX_CUR_WEBS < FX_WEBS_TILL_COCOON) + { + FX_DECAY = param1; + FX_NEXT_DECAY = (FX_DECAY + GetGameTime()); + FX_DECAY("web_decay"); + } + else + { + FX_COCOONED = 1; + ScheduleDelayedEvent(15, "fx_die"); + } + } + + void web_decay() + { + if ((FX_COCOONED)) return; + if (GetGameTime() >= FX_NEXT_DECAY) + { + FX_CUR_WEBS -= 1; + if (FX_CUR_WEBS < 1) + { + fx_die(); + } + else + { + FX_DECAY("web_decay"); + } + } + } + + void web_setup() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DECAY); + ClientEffect("tempent", "set_current_prop", "body", 6); + ClientEffect("tempent", "set_current_prop", "framerate", 0); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", /* TODO: $ratio */ $ratio(WEB_RATIO, 50, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 999); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + string L_MAXS = /* TODO: $getcl */ $getcl(FX_WEB_TARGET, "maxs"); + if ((/* TODO: $getcl */ $getcl(FX_WEB_TARGET, "isplayer"))) + { + L_MAXS *= 2; + } + string L_SIZE = (L_MAXS).x; + L_SIZE += (L_MAXS).y; + L_SIZE += (L_MAXS).z; + L_SIZE /= 104; + ClientEffect("tempent", "set_current_prop", "scale", L_SIZE); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + } + + void web_update() + { + if (FX_CUR_WEBS > 0) + { + ClientEffect("tempent", "set_current_prop", "origin", "func_get_new_pos"()); + string L_WEB_RATIO = FX_CUR_WEBS; + L_WEB_RATIO *= 0.1; + ClientEffect("tempent", "set_current_prop", "renderamt", /* TODO: $ratio */ $ratio(WEB_RATIO, 50, 255)); + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DECAY); + } + else + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.01); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + } + if ((FX_COCOONED)) + { + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + } + if ((FX_DIE)) + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.01); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + FX_CUR_WEBS = 0; + FX_COCOONED = 0; + effect_die(); + } + } + + void fx_die() + { + FX_DIE = 1; + ScheduleDelayedEvent(1.0, "effect_die"); + } + + void effect_die() + { + RemoveScript(); + } + + void func_get_new_pos() + { + if ((/* TODO: $getcl */ $getcl(FX_WEB_TARGET, "isplayer"))) + { + string L_WEB_POS = /* TODO: $getcl */ $getcl(FX_WEB_TARGET, "origin"); + L_WEB_POS += "z"; + } + else + { + string L_WEB_POS = /* TODO: $getcl */ $getcl(FX_WEB_TARGET, "bonepos", 0); + L_WEB_POS = "z"; + } + L_WEB_POS += "z"; + return; + return; + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_whipflash.as b/scripts/angelscript/effects/sfx_whipflash.as new file mode 100644 index 00000000..29b709d7 --- /dev/null +++ b/scripts/angelscript/effects/sfx_whipflash.as @@ -0,0 +1,34 @@ +#pragma context server + +namespace MS +{ + +class SfxWhipflash : CGameScript +{ + int FX_ACTIVE; + string game.cleffect.view_ofs.z; + + void client_activate() + { + LogDebug("** $currentscript PARAM1"); + game.cleffect.view_ofs.z = param1; + } + + void change_height() + { + game.cleffect.view_ofs.z = param1; + } + + void do_whip() + { + } + + void remove_fx() + { + FX_ACTIVE = 0; + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/sfx_zap_aura.as b/scripts/angelscript/effects/sfx_zap_aura.as new file mode 100644 index 00000000..99e73e08 --- /dev/null +++ b/scripts/angelscript/effects/sfx_zap_aura.as @@ -0,0 +1,62 @@ +#pragma context server + +namespace MS +{ + +class SfxZapAura : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + string FX_RADIUS; + + void client_activate() + { + FX_OWNER = param1; + FX_RADIUS = param2; + FX_DURATION = param3; + FX_ACTIVE = 1; + FX_DURATION("end_fx"); + fx_loop(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "fx_loop"); + string BEAM_START = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + if (!(/* TODO: $getcl */ $getcl(FX_OWNER, "isplayer"))) + { + BEAM_START += "z"; + } + string BEAM_END = BEAM_START; + float RND_ANG = Random(0, 359.99); + float V_ADJ = Random(-24.0, 24.0); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, FX_RADIUS, V_ADJ)); + string L_BEAM_START = BEAM_START; + L_BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, 16, 0)); + ClientEffect("beam_points", L_BEAM_START, BEAM_END, "lgtning.spr", 1.0, 1, 1, 255, 255, 30, Vector3(255, 64, 0)); + string BEAM_END = BEAM_START; + float RND_ANG = Random(0, 359.99); + float V_ADJ = Random(-24.0, 24.0); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, FX_RADIUS, V_ADJ)); + string L_BEAM_START = BEAM_START; + L_BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, 16, 0)); + ClientEffect("beam_points", L_BEAM_START, BEAM_END, "lgtning.spr", 1.0, 1, 1, 255, 255, 30, Vector3(255, 64, 0)); + } + + void end_fx() + { + if (!(FX_ACTIVE)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.1, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/soup.as b/scripts/angelscript/effects/soup.as new file mode 100644 index 00000000..cb8bf095 --- /dev/null +++ b/scripts/angelscript/effects/soup.as @@ -0,0 +1,98 @@ +#pragma context server + +namespace MS +{ + +class Soup : CGameScript +{ + string FX_DURATION; + int FX_END_TIME; + string FX_POOPY; + int HP_AMT; + int MP_AMT; + int NERF_TICK; + float SOUP_TICKRATE; + string game.effect.id; + int game.effect.removeondeath; + + Soup() + { + string reg.effect.name = "soup"; + game.effect.id = "soup"; + string reg.effect.flags = "nostack"; + string reg.effect.script = currentscript; + game.effect.removeondeath = 1; + // TODO: registereffect + SOUP_TICKRATE = 0.5; + } + + void OnRepeatTimer() + { + SetRepeatDelay(SOUP_TICKRATE); + HealEntity(GetOwner(), HP_AMT); + GiveMP(MP_AMT); + } + + void game_activate() + { + FX_DURATION = param1; + FX_POOPY = param2; + HP_AMT = 38; + MP_AMT = 58; + NERF_TICK = 9; + FX_DURATION("soup_duration_end"); + NERF_TICK("nerf_soup"); + } + + void nerf_soup() + { + HP_AMT /= 2; + MP_AMT /= 2; + NERF_TICK *= 2; + if ((FX_POOPY)) + { + EmitSound(GetOwner(), 0, "fart.wav", 10); + SendPlayerMessage(GetOwner(), "Oh no. You let one squeak out."); + XDoDamage(GetEntityOrigin(GetOwner()), 65, 10, 0, GetOwner(), GetOwner(), "spellcasting.affliction", "poison_effect", "dmgevent:poopy"); + ClientEvent("new", "all", "effects/sfx_poison_cloud", GetEntityOrigin(GetOwner()), 20, 1, 0); + } + NERF_TICK("nerf_soup"); + } + + void poopy_dodamage() + { + if (!(param1)) return; + if (!(/* TODO: $get_takedmg */ $get_takedmg(param2, "poison") > 0)) return; + ApplyEffect(param2, "effects/dot_poison", 6, GetEntityIndex(GetOwner()), 10, 0, "spellcasting.affliction"); + if (!(RandomInt(0, 3) == 0)) return; + if (!(GetEntityRace(param2) != "vermin")) return; + if (!(GetEntityRace(param2) != "wildanimal")) return; + if (!(GetEntityRace(param2) != "spider")) return; + if (!((GetEntityRace(param2)).findFirst("ant_") >= 0)) return; + string L_STR = "Ewww! What's that smell?;"; + CallExternal(param2, "ext_speak", GetRandomToken(L_STR, ";")); + } + + void soup_duration_end() + { + SendColoredMessage(GetOwner(), "Ah, that soup was good while it lasted..."); + RemoveScript(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + FX_END_TIME = 0; + soup_duration_end(); + } + + void ext_resetsoup() + { + HP_AMT = 38; + MP_AMT = 58; + NERF_TICK = 9; + FX_END_TIME = (GetGameTime() + FX_DURATION); + } + +} + +} diff --git a/scripts/angelscript/effects/specialattack_haste.as b/scripts/angelscript/effects/specialattack_haste.as new file mode 100644 index 00000000..3cf892bf --- /dev/null +++ b/scripts/angelscript/effects/specialattack_haste.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class SpecialattackHaste : CGameScript +{ + string CALLING_WEAPON; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + int game.cleffect.move_scale.forward; + int game.cleffect.move_scale.right; + float game.effect.anim.framerate; + int game.effect.canjump; + int game.effect.movespeed; + string local.effect.clientscript; + + SpecialattackHaste() + { + EFFECT_ID = "player_haste"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void game_activate() + { + CALLING_WEAPON = param2; + game.effect.movespeed = 500; + game.effect.anim.framerate = 3.0; + game.effect.canjump = 0; + ClientEvent("new", GetOwner(), currentscript, EFFECT_DURATION); + local.effect.clientscript = "game.script.last_sent_id"; + } + + void effect_die() + { + CallExternal(CALLING_WEAPON, "turbo_off"); + RemoveScript(); + } + + void client_activate() + { + game.cleffect.move_scale.forward = 3; + game.cleffect.move_scale.right = 3; + PARAM1("effect_die"); + } + +} + +} diff --git a/scripts/angelscript/effects/swords_gb/gb_gib_explode.as b/scripts/angelscript/effects/swords_gb/gb_gib_explode.as new file mode 100644 index 00000000..93e8b737 --- /dev/null +++ b/scripts/angelscript/effects/swords_gb/gb_gib_explode.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "effects/gib_explode.as" + +namespace MS +{ + +class GbGibExplode : CGameScript +{ + string FX_DAMAGE; + string GIB_INFLICTER; + string SWORD_ID; + + GbGibExplode() + { + GIB_INFLICTER = SWORD_ID; + } + + void game_dynamically_created() + { + SWORD_ID = param6; + FX_DAMAGE = GetEntityProperty(SWORD_ID, "scriptvar"); + } + +} + +} diff --git a/scripts/angelscript/effects/swords_gb/gut_buster.as b/scripts/angelscript/effects/swords_gb/gut_buster.as new file mode 100644 index 00000000..00879572 --- /dev/null +++ b/scripts/angelscript/effects/swords_gb/gut_buster.as @@ -0,0 +1,96 @@ +#pragma context server + +#include "effects/dot_bleed.as" + +namespace MS +{ + +class GutBuster : CGameScript +{ + int DID_PROC; + string DOT_HE_IMMUNE; + string DOT_IM_AFFECTED; + string DOT_IM_RESIST; + string DOT_TYPE; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string MY_BLOOD; + string NUM_GIBS; + string SWORD_ID; + + GutBuster() + { + EFFECT_ID = "gb"; + EFFECT_SCRIPT = currentscript; + EFFECT_FLAGS = "nostack"; + DOT_TYPE = "pierce_effect"; + DOT_IM_AFFECTED = "Your flesh is defiled by the evil sword."; + DOT_IM_RESIST = "Your armor prevents the attack from piercing through your skin."; + DOT_HE_IMMUNE = "cannot bleed."; + DID_PROC = 0; + NUM_GIBS = "get_num_gibs"(); + } + + void game_activate() + { + SWORD_ID = param5; + MY_BLOOD = GetEntityProperty(GetOwner(), "blood"); + } + + void dot_start() + { + Bleed(GetOwner(), MY_BLOOD, 10000); + } + + void OnDeath(CBaseEntity@ attacker) override + { + proc_death(); + } + + void proc_death() + { + if (!(DID_PROC)) + { + DID_PROC = 1; + for (int i = 0; i < NUM_GIBS; i++) + { + create_gib(); + } + EmitSound(GetOwner(), 0, "common/bodysplat.wav", 10); + if (!(GetEntityProperty(GetOwner(), "alive"))) + { + if ((GetEntityHeight(GetOwner()) + GetEntityWidth(GetOwner())) < 150) + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + } + } + } + } + + void create_gib() + { + Vector3 L_ANG = Vector3(Random(70, 95), RandomInt(0, 359), 0); + string L_FORCE = (400 * i); + L_FORCE += 400; + string L_VEC = /* TODO: $relvel */ $relvel(L_ANG, Vector3(0, L_FORCE, 0)); + SpawnNPC("effects/swords_gb/gb_gib_explode", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: DOT_ATTACKER, L_VEC, 0, "swordsmanship", MY_BLOOD, SWORD_ID + } + + void get_num_gibs() + { + string L_NUM_GIBS = (GetEntityHeight(GetOwner()) + GetEntityWidth(GetOwner())); + L_NUM_GIBS /= 150; + L_NUM_GIBS = max(0, min(2, L_NUM_GIBS)); + L_HP_GIBS += (GetEntityMaxHealth(GetOwner()) / 1750); + L_HP_GIBS = max(0, min(3, L_HP_GIBS)); + L_NUM_GIBS += L_HP_GIBS; + L_NUM_GIBS += 1; + return; + return; + } + +} + +} diff --git a/scripts/angelscript/effects/swords_gb/sfx_gib_explode.as b/scripts/angelscript/effects/swords_gb/sfx_gib_explode.as new file mode 100644 index 00000000..2ecd7649 --- /dev/null +++ b/scripts/angelscript/effects/swords_gb/sfx_gib_explode.as @@ -0,0 +1,57 @@ +#pragma context client + +namespace MS +{ + +class SfxGibExplode : CGameScript +{ + string FX_RENDER_PROPS; + float SPR_DEATH_DELAY; + string SPR_RENDER_PROPS; + int SPR_SCALE; + string SPR_SPRITE; + + SfxGibExplode() + { + SPR_SPRITE = "char_breath.spr"; + SPR_DEATH_DELAY = 0.5; + SPR_RENDER_PROPS = FX_RENDER_PROPS; + SPR_SCALE = 3; + } + + void client_activate() + { + string L_POS = param1; + string L_BLOOD_COL = param2; + if (L_BLOOD_COL == "green") + { + FX_RENDER_PROPS = "0;1;255;add;(225,225,0);58;30"; + } + else + { + FX_RENDER_PROPS = "0;1;255;add;(200,0,0);58;30"; + } + ClientEffect("tempent", "sprite", SPR_SPRITE, L_POS, "setup_sprite"); + RemoveScript(); + } + + void setup_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", SPR_DEATH_DELAY); + if (GetToken(SPR_RENDER_PROPS, 0, ";") == 1) + { + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + ClientEffect("tempent", "set_current_prop", "scale", SPR_SCALE); + ClientEffect("tempent", "set_current_prop", "renderamt", GetToken(SPR_RENDER_PROPS, 2, ";")); + ClientEffect("tempent", "set_current_prop", "rendermode", GetToken(SPR_RENDER_PROPS, 3, ";")); + ClientEffect("tempent", "set_current_prop", "rendercolor", GetToken(SPR_RENDER_PROPS, 4, ";")); + ClientEffect("tempent", "set_current_prop", "framerate", GetToken(SPR_RENDER_PROPS, 5, ";")); + ClientEffect("tempent", "set_current_prop", "frames", GetToken(SPR_RENDER_PROPS, 6, ";")); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/effects/torch_flame.as b/scripts/angelscript/effects/torch_flame.as new file mode 100644 index 00000000..1ec42866 --- /dev/null +++ b/scripts/angelscript/effects/torch_flame.as @@ -0,0 +1,81 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class TorchFlame : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string LIGHT_COLOR; + int LIGHT_RADIUS; + int OFSZ_NEG; + string OFSZ_POS; + int OFS_NEG; + int OFS_POS; + string SPRITE_1; + string effect.clientscript; + string sfx.npcid; + + TorchFlame() + { + OFS_POS = 16; + OFS_NEG = -16; + OFSZ_NEG = 0; + LIGHT_COLOR = Vector3(255, 255, 128); + LIGHT_RADIUS = 128; + SPRITE_1 = "fire1_fixed.spr"; + Precache(SPRITE_1); + EFFECT_ID = "effect_flames"; + EFFECT_FLAGS = "nostack"; + EFFECT_SCRIPT = currentscript; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.25); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(sfx.npcid, "origin"), LIGHT_RADIUS, LIGHT_COLOR, 0.35); + createsprite(); + } + + void game_activate() + { + ClientEvent("new", "all", currentscript, EFFECT_DURATION, GetEntityIndex(GetOwner()), GetEntityHeight(GetOwner())); + effect.clientscript = "game.script.last_sent_id"; + } + + void client_activate() + { + PARAM1("effect_die"); + sfx.npcid = param2; + OFSZ_POS = param3; + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + ClientEffect("tempent", "sprite", SPRITE_1, l.pos, "setup_sprite1_flame"); + } + + void setup_sprite1_flame() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.25); + ClientEffect("tempent", "set_current_prop", "framerate", 25); + ClientEffect("tempent", "set_current_prop", "velocity", 0); + ClientEffect("tempent", "set_current_prop", "frames", 20); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + + void effect_die() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/effects/webbed.as b/scripts/angelscript/effects/webbed.as new file mode 100644 index 00000000..5b6a9bcb --- /dev/null +++ b/scripts/angelscript/effects/webbed.as @@ -0,0 +1,196 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class Webbed : CGameScript +{ + string CLFX_ID; + int DID_COCOON; + string EFFECT_DUPLICATED; + string EFFECT_DURATION; + string EFFECT_ID; + string EFFECT_SCRIPT; + string EFFECT_STARTED; + string NEXT_DECAY; + int PLAYER_WEB_TILL_COCOON; + int WEBS_ATTACHED; + int WEBS_TILL_COCOON; + int WEB_DECAY_TIME; + int WEB_FOR_SIZE; + string game.effect.anim.framerate; + int game.effect.canattack; + int game.effect.canduck; + string game.effect.canjump; + string game.effect.canrun; + string game.effect.movespeed; + + Webbed() + { + EFFECT_ID = "webbed"; + EFFECT_SCRIPT = currentscript; + PLAYER_WEB_TILL_COCOON = 10; + WEB_FOR_SIZE = 17; + WEBS_ATTACHED = 0; + WEBS_TILL_COCOON = 0; + WEB_DECAY_TIME = 0; + } + + void game_activate() + { + string L_DECAY_TIME = param1; + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "spider_resist", "type_exists"))) + { + SendPlayerMessage(param2, GetEntityName(GetOwner()) + " is immune to webs!"); + EFFECT_DUPLICATED = 1; + RemoveScript(); + return; + } + if (!(EFFECT_DUPLICATED)) + { + set_cocoon_amt(); + game.effect.canjump = 0; + game.effect.canrun = 0; + SendPlayerMessage(GetOwner(), "You have been webbed!"); + } + CallExternal(GetEntityIndex(GetOwner()), "ext_webbed", L_DECAY_TIME); + } + + void set_cocoon_amt() + { + if ((IsValidPlayer(GetOwner()))) + { + WEBS_TILL_COCOON = PLAYER_WEB_TILL_COCOON; + } + else + { + string L_MY_SIZE = GetEntityHeight(GetOwner()); + L_MY_SIZE += GetEntityWidth(GetOwner()); + L_MY_SIZE /= WEB_FOR_SIZE; + WEBS_TILL_COCOON = int(L_MY_SIZE); + WEBS_TILL_COCOON = max(2, min(20, WEBS_TILL_COCOON)); + } + } + + void ext_webbed() + { + if ((EFFECT_DUPLICATED)) return; + if ((DID_COCOON)) return; + if (param1 > WEB_DECAY_TIME) + { + WEB_DECAY_TIME = param1; + } + WEBS_ATTACHED += 1; + if (WEBS_ATTACHED < WEBS_TILL_COCOON) + { + EFFECT_STARTED = GetGameTime(); + EFFECT_DURATION = (WEB_DECAY_TIME * WEBS_ATTACHED); + NEXT_DECAY = (GetGameTime() + WEB_DECAY_TIME); + WEB_DECAY_TIME("web_decay"); + web_update(); + EmitSound(GetOwner(), 0, "bullchicken/bc_acid2.wav", 10); + } + else + { + start_cocoon(); + } + if (!(CLFX_ID)) + { + ClientEvent("new", "all", "effects/sfx_webbed", WEB_DECAY_TIME, GetEntityIndex(GetOwner()), WEBS_TILL_COCOON); + CLFX_ID = "game.script.last_sent_id"; + } + else + { + ClientEvent("update", "all", CLFX_ID, "ext_webbed", WEB_DECAY_TIME); + } + } + + void web_decay() + { + if ((DID_COCOON)) return; + if (GetGameTime() >= NEXT_DECAY) + { + SendPlayerMessage(GetOwner(), "Some of the webs loosen."); + WEBS_ATTACHED -= 1; + NEXT_DECAY = (GetGameTime() + WEB_DECAY_TIME); + WEB_DECAY_TIME("web_decay"); + web_update(); + } + } + + void web_update() + { + string L_SPEED_FACTOR = (WEBS_ATTACHED / WEBS_TILL_COCOON); + string L_SPEED = (50 * L_SPEED_FACTOR); + game.effect.movespeed = (100 - L_SPEED); + game.effect.anim.framerate = (1 - L_SPEED_FACTOR); + } + + void start_cocoon() + { + DID_COCOON = 1; + SendPlayerMessage(GetOwner(), "The sticky web envelopes you in a cocoon, rendering you immovable."); + EmitSound(GetOwner(), 0, "debris/bustflesh1.wav", 10); + SetScriptFlags(GetOwner(), "add", "cocooned", "nopush", 1, -1, "none"); + game.effect.canattack = 0; + game.effect.canduck = 0; + game.effect.movespeed = 0.001; + game.effect.anim.framerate = 0.001; + if (!(IsValidPlayer(GetOwner()))) + { + CallExternal(GetOwner(), "freeze_solid_start", WEB_DECAY_TIME); + } + WEB_DECAY_TIME("end_cocoon"); + } + + void end_cocoon() + { + SetScriptFlags(GetOwner(), "remove", "cocooned"); + EmitSound(GetOwner(), 0, "debris/bustflesh1.wav", 10); + RemoveScript(); + } + + void game_predeath() + { + game.effect.canattack = 1; + game.effect.canduck = 1; + game.effect.movespeed = 100; + game.effect.anim.framerate = 1; + CallExternal(GetOwner(), "freeze_solid_end", 1); + end_cocoon(); + } + + void effect_die() + { + if ((EFFECT_DUPLICATED)) return; + if ((IsValidPlayer(GetOwner()))) + { + if (!(DID_COCOON)) + { + SendPlayerMessage(GetOwner(), "The webs have fallen away."); + } + else + { + SendPlayerMessage(GetOwner(), "You struggle your way out of the cocoon."); + } + } + if ((CLFX_ID)) + { + ClientEvent("update", "all", CLFX_ID, "fx_die"); + } + } + + void game_duplicated() + { + if (!(EFFECT_DUPLICATED)) + { + EFFECT_DUPLICATED = 1; + RemoveScript(); + } + } + +} + +} diff --git a/scripts/angelscript/foutpost/map_startup.as b/scripts/angelscript/foutpost/map_startup.as new file mode 100644 index 00000000..13943809 --- /dev/null +++ b/scripts/angelscript/foutpost/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "foutpost"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "The Forgotten Outpost by Evil Squirrel"); + SetGlobalVar("G_MAP_DESC", "This outpost holds by a thread against an impending orc invasion"); + SetGlobalVar("G_MAP_DIFF", "Levels 25-35 / 300-700hp"); + SetGlobalVar("G_WARN_HP", 300); + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/dragoon.as b/scripts/angelscript/furion/dragoons/dragoon.as new file mode 100644 index 00000000..1708c4f2 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/dragoon.as @@ -0,0 +1,624 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Dragoon : CGameScript +{ + string ALLY_CHECK_ID; + string ANIM_AIM_SPELL; + string ANIM_ATTACK; + string ANIM_CAST_SPELL; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_PREP_SPELL; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + float ATTACK1_DAMAGE; + int ATTACK_COF; + string ATTACK_HITRANGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + string BANDIT_FLEE_DELAY; + string BD_COUNT; + string BLIZZARD_SCRIPT; + int CAN_ATTACK; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + string CASTING_SPELL; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DROPS_CONTAINER; + string ELEMENT; + string FIREBALL_DELAY; + float FIREBALL_FREQ; + string FIREWALL_SCRIPT; + float FREQ_SPELL; + int HUNT_AGRO; + string ICE_SHIELD_CHECK; + int IS_BUFFING; + string LIGHTING_SCRIPT; + int MOVE_RANGE; + int NO_STEP_ADJ; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + string POISONCLOUD_SCRIPT; + float RETALIATE_CHANGETARGET_CHANCE; + string SOUND_BOW; + string SOUND_PAIN; + string SOUND_PAIN2; + int SPECIAL_EFFECT_CHANCE; + int SPELL_DOT; + float SPELL_DURATION; + int SPELL_FLINGER; + int SPELL_RANGE; + string SPELL_SCRIPT; + string SPELL_TARGET; + string WEAPON; + + Dragoon() + { + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_random_lesser"; + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_PAIN2 = "player/armhit1.wav"; + SOUND_BOW = "weapons/bow/bow.wav"; + ANIM_IDLE = "idle"; + ANIM_RUN = "run"; + ANIM_WALK = "walk2"; + ANIM_DEATH = "die_simple"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_ATTACK = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_HEAR = 1; + NPC_GIVE_EXP = 150; + bowey(); + fistey(); + daggerey(); + swordey(); + axey(); + macey(); + magey(); + speary(); + icey(); + poisoney(); + firey(); + zappy(); + ATTACK_HITRANGE = ATTACK_RANGE; + ATTACK_HITRANGE *= 1.5; + NO_STEP_ADJ = 1; + FIREBALL_FREQ = 5.0; + SPELL_RANGE = 700; + ANIM_PREP_SPELL = "prepare_fireball"; + ANIM_AIM_SPELL = "aim_fireball_R"; + ANIM_CAST_SPELL = "throw_fireball_R"; + LIGHTING_SCRIPT = "monsters/summon/summon_lightning_storm"; + BLIZZARD_SCRIPT = "monsters/summon/summon_blizzard"; + FIREWALL_SCRIPT = "monsters/summon/keledros_fire_wall"; + POISONCLOUD_SCRIPT = "monsters/summon/npc_poison_cloud"; + FREQ_SPELL = 12.0; + SPELL_DURATION = 10.0; + SPELL_DOT = 100; + } + + void OnRepeatTimer() + { + SetRepeatDelay(2.0); + if ((SUSPEND_AI)) + { + BD_COUNT += 1; + } + if (!(SUSPEND_AI)) + { + BD_COUNT = 0; + } + if (BD_COUNT > 10) + { + npcatk_resume_ai(); + } + } + + void OnSpawn() override + { + BD_COUNT = 0; + if (ELEMENT == "ELEMENT") + { + ELEMENT = RandomInt(0, 3); + } + if (WEAPON == "WEAPON") + { + WEAPON = RandomInt(0, 7); + } + SetGold(RandomInt(50, 75)); + SetWidth(32); + SetHeight(92); + SetRace("rogue"); + SetHearingSensitivity(3); + SetRoam(true); + SetModel("fur/npcs/dragoon.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void bowey() + { + if (!(WEAPON == 0)) return; + SetName("Dragoon Archer"); + SetHealth(220); + MOVE_RANGE = 300; + ATTACK_RANGE = 800; + ATTACK_SPEED = 1200; + ATTACK1_DAMAGE = Random(8.5, 12.0); + ATTACK_COF = 0; + ANIM_ATTACK = "shootbow"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 5); + DROPS_CONTAINER = 1; + NO_STUCK_CHECKS = 1; + } + + void daggerey() + { + if (!(WEAPON == 1)) return; + SetName("Dragoon Rogue"); + SetHealth(230); + MOVE_RANGE = 50; + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = Random(8.5, 10.0); + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "swordjab1_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 1); + } + + void fistey() + { + if (!(WEAPON == 2)) return; + SetName("Dragoon Brawler"); + SetHealth(280); + MOVE_RANGE = 50; + ATTACK_RANGE = 80; + ATTACK1_DAMAGE = Random(6.5, 8.0); + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "aim_punch1"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 0); + } + + void swordey() + { + if (!(WEAPON == 3)) return; + SetName("Dragoon Swordsman"); + SetHealth(280); + MOVE_RANGE = 80; + ATTACK_RANGE = 120; + ATTACK1_DAMAGE = Random(8.5, 10.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "swordswing2_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 4); + } + + void axey() + { + if (!(WEAPON == 4)) return; + SetName("Dragoon Axeman"); + SetHealth(340); + MOVE_RANGE = 80; + ATTACK_RANGE = 120; + ATTACK1_DAMAGE = Random(9.5, 11.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 3); + } + + void macey() + { + if (!(WEAPON == 5)) return; + SetName("Dragoon Berserker"); + SetHealth(330); + MOVE_RANGE = 80; + ATTACK_RANGE = 130; + ATTACK1_DAMAGE = Random(9.5, 11.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 2); + } + + void magey() + { + if (!(WEAPON == 6)) return; + SetName("Dragoon Mage"); + SetHealth(210); + MOVE_RANGE = 300; + ATTACK_RANGE = 32; + ATTACK1_DAMAGE = Random(20.0, 40.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "aim_punch1"; + CAN_FLINCH = 0; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 0); + ScheduleDelayedEvent(1.0, "scan_for_allies"); + CatchSpeech("debug_params", "debug"); + if (ELEMENT == 0) + { + SPELL_SCRIPT = BLIZZARD_SCRIPT; + } + if (ELEMENT == 1) + { + SPELL_SCRIPT = POISONCLOUD_SCRIPT; + } + if (ELEMENT == 2) + { + SPELL_SCRIPT = FIREWALL_SCRIPT; + } + if (ELEMENT == 3) + { + SPELL_SCRIPT = LIGHTING_SCRIPT; + } + SPELL_FLINGER = 1; + } + + void speary() + { + if (!(WEAPON == 7)) return; + SetName("Dragoon Lancer"); + SetHealth(400); + MOVE_RANGE = 120; + ATTACK_RANGE = 150; + ATTACK1_DAMAGE = Random(14.0, 20.0); + ATTACK_PERCENTAGE = 0.75; + ANIM_ATTACK = "spearjab"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 6); + } + + void icey() + { + if (!(ELEMENT == 0)) return; + SetDamageResistance("slash", 0.8); + SetDamageResistance("pierce", 0.8); + SetDamageResistance("blunt", 0.8); + SetDamageResistance("fire", 1.3); + SetDamageResistance("cold", 0.1); + SetDamageResistance("poison", 0.8); + SetDamageResistance("lightning", 0.8); + SetDamageResistance("holy", 0.0); + SetModelBody(0, 0); + } + + void poisoney() + { + if (!(ELEMENT == 1)) return; + SetDamageResistance("slash", 0.8); + SetDamageResistance("pierce", 0.8); + SetDamageResistance("blunt", 0.8); + SetDamageResistance("fire", 0.8); + SetDamageResistance("cold", 0.8); + SetDamageResistance("poison", 0.1); + SetDamageResistance("lightning", 1.3); + SetDamageResistance("holy", 0.0); + SetModelBody(0, 1); + } + + void firey() + { + if (!(ELEMENT == 2)) return; + SetDamageResistance("slash", 0.8); + SetDamageResistance("pierce", 0.8); + SetDamageResistance("blunt", 0.8); + SetDamageResistance("fire", 0.1); + SetDamageResistance("cold", 1.3); + SetDamageResistance("poison", 0.8); + SetDamageResistance("lightning", 0.8); + SetDamageResistance("holy", 0.0); + SetModelBody(0, 2); + } + + void zappy() + { + if (!(ELEMENT == 3)) return; + SetDamageResistance("slash", 0.8); + SetDamageResistance("pierce", 0.8); + SetDamageResistance("blunt", 0.8); + SetDamageResistance("fire", 0.8); + SetDamageResistance("cold", 0.8); + SetDamageResistance("poison", 1.3); + SetDamageResistance("lightning", 0.1); + SetDamageResistance("holy", 0.0); + SetModelBody(0, 3); + } + + void debug_params() + { + SetSayTextRange(1024); + SayText("Mov " + MOVE_RANGE); + } + + void attack() + { + if (WEAPON == 0) + { + SetAngles("add_view.pitch"); + AS_ATTACKING = GetGameTime(); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 2), "none", ATTACK_SPEED, ATTACK1_DAMAGE, ATTACK_COF, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + EmitSound(GetOwner(), SOUND_BOW); + } + else + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, GetOwner(), GetOwner(), "none", "slash", "dmgevent:attack"); + } + } + + void attack_jab() + { + attack(); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + int L_DEATHANIM = RandomInt(0, 6); + if (L_DEATHANIM == 0) + { + ANIM_DEATH = "die_simple"; + } + if (L_DEATHANIM == 1) + { + ANIM_DEATH = "die_backwards1"; + } + if (L_DEATHANIM == 2) + { + ANIM_DEATH = "die_backwards"; + } + if (L_DEATHANIM == 3) + { + ANIM_DEATH = "die_forwards"; + } + if (L_DEATHANIM == 4) + { + ANIM_DEATH = "headshot"; + } + if (L_DEATHANIM == 5) + { + ANIM_DEATH = "die_spin"; + } + if (L_DEATHANIM == 6) + { + ANIM_DEATH = "gutshot"; + } + } + + void npc_targetsighted() + { + if (WEAPON == 0) + { + if (!(IS_FLEEING)) + { + } + if ((false)) + { + } + PlayAnim("once", ANIM_ATTACK); + } + if (WEAPON == 6) + { + if (!(IS_FLEEING)) + { + } + if (!(FIREBALL_DELAY)) + { + } + if (!(CASTING_SPELL)) + { + } + if (!(IS_BUFFING)) + { + } + FIREBALL_DELAY = 1; + FIREBALL_FREQ("reset_fireball_delay"); + if ((CanSee("enemy", SPELL_RANGE))) + { + } + string L_SPELL_TARGET = GetEntityIndex(m_hLastSeen); + spell_attack(L_SPELL_TARGET); + CASTING_SPELL = 1; + if ((SPELL_FLINGER)) + { + if (GetGameTime() > NEXT_SPELL) + { + } + NEXT_SPELL = GetGameTime(); + NEXT_SPELL += FREQ_SPELL; + PlayAnim("critical", ANIM_PREP_SPELL); + ScheduleDelayedEvent(2.0, "do_spell"); + } + } + } + + void reset_fireball_delay() + { + FIREBALL_DELAY = 0; + } + + void spell_attack() + { + AS_ATTACKING = GetGameTime(); + EmitSound(GetOwner(), 0, "magic/fire_powerup.wav", 10); + SPELL_TARGET = param1; + SetMoveDest(SPELL_TARGET); + PlayAnim("once", ANIM_PREP_SPELL); + ScheduleDelayedEvent(0.5, "spell_attack2"); + } + + void spell_attack2() + { + SetMoveDest(SPELL_TARGET); + PlayAnim("critical", ANIM_AIM_SPELL); + ScheduleDelayedEvent(0.5, "spell_attack3"); + } + + void spell_attack3() + { + SetMoveDest(SPELL_TARGET); + string TARG_ORG = GetEntityOrigin(SPELL_TARGET); + SetAngles("face_origin"); + ScheduleDelayedEvent(0.1, "straighten_out"); + EmitSound(GetOwner(), 0, "magic/ice_strike.wav", 10); + PlayAnim("critical", ANIM_CAST_SPELL); + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 48, 2), FIREBALL_TARGET, 400, ATTACK1_DAMAGE, 5, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0); + CASTING_SPELL = 0; + } + + void straighten_out() + { + string MY_ANG = GetMonsterProperty("angles"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(SPELL_TARGET); + SetAngles("face"); + ScheduleDelayedEvent(1.0, "mage_reposition"); + } + + void mage_reposition() + { + if (GetEntityRange(HUNT_LASTTARGET) < SPELL_RANGE) + { + npcatk_flee(GetEntityIndex(HUNT_LASTTARGET), 700, 1.0); + } + if (GetEntityRange(HUNT_LASTTARGET) >= MOVE_RANGE) + { + chicken_run(1.0); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (WEAPON == 6) + { + if (!(BANDIT_FLEE_DELAY)) + { + } + BANDIT_FLEE_DELAY = 1; + ScheduleDelayedEvent(10.0, "reset_bandit_flee_delay"); + npcatk_flee(GetEntityIndex(m_hLastStruck), 2000, 5.0); + } + } + + void reset_bandit_flee_delay() + { + BANDIT_FLEE_DELAY = 0; + } + + void npcatk_ally_alert() + { + if ((SUSPEND_AI)) return; + if ((IsValidPlayer(param1))) + { + cycle_up("ally_hit_by_player"); + } + if (!(GetEntityIndex(param2) != GetEntityIndex(GetOwner()))) return; + if (!(WEAPON == 6)) return; + if ((IS_BUFFING)) return; + if (!(GetEntityRange(param2) < SPELL_RANGE)) return; + ALLY_CHECK_ID = GetEntityIndex(param2); + check_can_shield(); + } + + void check_can_shield() + { + if ((IS_BUFFING)) return; + if (!(CYCLED_UP)) return; + if (!(GetEntityRace(ALLY_CHECK_ID) == GetEntityRace(GetOwner()))) return; + ICE_SHIELD_CHECK = GetEntityProperty(ALLY_CHECK_ID, "haseffect"); + ScheduleDelayedEvent(0.1, "check_can_shield2"); + } + + void check_can_shield2() + { + AS_ATTACKING = GetGameTime(); + if (!(ICE_SHIELD_CHECK != 1)) return; + IS_BUFFING = 1; + PlayAnim("critical", ANIM_PREP_SPELL); + SetMoveDest(ALLY_CHECK_ID); + npcatk_suspend_ai(1.0); + ScheduleDelayedEvent(0.1, "shield_ally"); + } + + void shield_ally() + { + if (!(false)) return; + ScheduleDelayedEvent(0.5, "cast_shield"); + } + + void cast_shield() + { + IS_BUFFING = 0; + EmitSound(GetOwner(), 0, "magic/cast.wav", 10); + ApplyEffect(ALLY_CHECK_ID, "effects/iceshield", 20, GetEntityIndex(GetOwner()), 0.5); + } + + void scan_for_allies() + { + ScheduleDelayedEvent(0.7, "scan_for_allies"); + if (!(false)) return; + ALLY_CHECK_ID = GetEntityIndex(m_hLastSeen); + check_can_shield(m_hLastSeen); + } + + void do_spell() + { + if (!(m_hAttackTarget != "unset")) return; + if (!(IsEntityAlive(GetOwner()))) return; + SpawnNPC(SPELL_SCRIPT, GetEntityOrigin(m_hAttackTarget), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), SPELL_DOT, SPELL_DURATION + } + + void attack_dodamage() + { + if (!(param1)) return; + SPECIAL_EFFECT_CHANCE = RandomInt(0, 100); + if (SPECIAL_EFFECT_CHANCE < 30) + { + if (ELEMENT == 0) + { + ApplyEffect(param2, "effects/dot_cold", 10.0, GetEntityIndex(GetOwner()), RandomInt(5.0, 15.0)); + } + if (ELEMENT == 1) + { + ApplyEffect(param2, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), RandomInt(5.0, 15.0)); + } + if (ELEMENT == 2) + { + ApplyEffect(param2, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), RandomInt(5.0, 15.0)); + } + if (ELEMENT == 3) + { + ApplyEffect(param2, "effects/dot_lightning", 10.0, GetEntityIndex(GetOwner()), RandomInt(5.0, 15.0)); + } + } + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/dragoon_boss.as b/scripts/angelscript/furion/dragoons/dragoon_boss.as new file mode 100644 index 00000000..f1fae2c1 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/dragoon_boss.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "furion/dragoons/dragoon_boss_base.as" + +namespace MS +{ + +class DragoonBoss : CGameScript +{ +} + +} diff --git a/scripts/angelscript/furion/dragoons/dragoon_boss_base.as b/scripts/angelscript/furion/dragoons/dragoon_boss_base.as new file mode 100644 index 00000000..b9e2bccd --- /dev/null +++ b/scripts/angelscript/furion/dragoons/dragoon_boss_base.as @@ -0,0 +1,1292 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class DragoonBossBase : CGameScript +{ + int AM_LEAPING; + string ANIM_ATTACK; + string ANIM_AXE_FAST; + string ANIM_AXE_SLOW; + string ANIM_BOW; + string ANIM_CAST; + string ANIM_DEATH; + string ANIM_DRINK; + string ANIM_FLINCH; + string ANIM_HOP; + string ANIM_JAB; + string ANIM_KICK_HIGH; + string ANIM_KICK_LOW; + string ANIM_LEAP; + string ANIM_MOVE_SLOW; + string ANIM_PARRY; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_SPELL; + string ANIM_SWING_FAST; + string ANIM_SWING_SLOW; + string ANIM_SWORD_FAST; + string ANIM_SWORD_SLOW; + string ANIM_WALK; + string ANIM_WALK_NORM; + int ARROW_SPEED; + int AS_ATK_VALUE; + string AS_ATTACKING; + string ATTACK_ANIMINDEX; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int AVOID_DELAY; + string BALL_DMG; + string BALL_SIZE; + string BALL_SPEED; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int BB_IN_ATTACK; + string BD_COUNT; + string BEAM_SPRITE; + int CAN_FLINCH; + int COLD_STRUCK; + int CYCLES_ON; + string DEMON_BLOOD; + string DEMON_NOHP_LOSS; + string DID_FIRST_POT; + string DID_SECOND_POT; + int DMG_DAGGER; + int DMG_KICK; + int DOING_NOVA; + int DOING_PULL; + int DRINKING_POT; + string DRINK_TYPE; + int ELEMENT_DMG_THRESH; + int ELEMENT_LIMIT; + int FAST_SWINGS; + int FIRE_STRUCK; + string FIRST_SPEC_POT_HEALTH; + string FLANK_DELAY; + string FLINCH_ANIM; + int FLINCH_CHANCE; + int FLINCH_DAMAGE_THRESHOLD; + int FREEZE_ATTACK; + float FREQ_ATTACK; + float FREQ_AVOID; + float FREQ_FLANK; + float FREQ_HEALTH; + int FREQ_INVIS; + int FREQ_KICK; + float FREQ_PULL; + float FREQ_SPECIAL; + string GLOW_LOOP_COLOR; + string GLOW_ON; + string HALF_HEALTH; + int HEALTH_AMMO; + string HEALTH_POT_DELAY; + int IN_RESIST; + int KICK_ATTACK; + string LEAP_TARGET; + int LEGAL_ACT; + int LIGHTNING_STRUCK; + string MONSTER_MODEL; + int MOVE_RANGE; + string NEXT_ATTACK; + int NORM_ATTACK; + string NOVA_ATTACK; + int NOVA_PICK_ATK; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_FORCED_MOVEDEST; + string NPC_IS_BOSS; + int NPC_NO_MOVE; + string ORIG_ATTACK; + string ORIG_FREQ_ATTACK; + string ORIG_MOVE_RANGE; + int ORIG_WEAPON; + int POISON_STRUCK; + int POWER_ATTACK; + string PULL_DELAY; + string PULL_TARGET; + string QUARTER_HEALTH; + int RESIST_AMMO; + string SCATTER_COUNT; + string SCATTER_SHOT; + string SOUND_BOW_SHOOT; + string SOUND_BOW_STRETCH; + string SOUND_DEATH; + string SOUND_LEAP; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_PARRY; + string SOUND_POWERUP; + string SOUND_SATTACK; + string SOUND_SWING_FAST; + string SOUND_SWING_SLOW1; + string SOUND_SWING_SLOW2; + string SOUND_TAUNT1; + string SOUND_TAUNT2; + int SPECIAL_AMMO; + string SPEC_TYPE; + int STUN_ATTACK; + int SWEEP_KICK_DELAY; + string USED_COLD_POT; + string USED_FIRE_POT; + string USED_LIGHTNING_POT; + string USED_POISON_POT; + + DragoonBossBase() + { + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 0.25; + if (StringToLower(GetMapName()) == "dragooncaves") + { + NPC_IS_BOSS = 1; + } + ANIM_DRINK = "swordready1_R"; + ANIM_AXE_FAST = "battleaxe_swing1_R"; + ANIM_AXE_SLOW = "battleaxe_swing1_L"; + ANIM_SWORD_FAST = "longsword_swipe_R"; + ANIM_SWORD_SLOW = "longsword_swipe_L"; + ANIM_BOW = "shootbow"; + ANIM_SWING_SLOW = "swordswing1_R"; + ANIM_SWING_FAST = "swordswing2_R"; + ANIM_JAB = "swordjab1_R"; + ANIM_KICK_HIGH = "stance_normal_highkick_r1"; + ANIM_KICK_LOW = "stance_normal_lowkick_r1"; + ANIM_PARRY = "longsword_parry"; + ANIM_SPELL = "prepare_fireball"; + ANIM_CAST = "throw_fireball_R"; + ANIM_FLINCH = ANIM_PARRY; + ANIM_WALK_NORM = "walk2"; + ANIM_RUN_NORM = "run"; + ANIM_MOVE_SLOW = "run_squatwalk1_R"; + ANIM_WALK = "walk2"; + ANIM_RUN = "run"; + ANIM_HOP = "jump"; + ANIM_LEAP = "long_jump"; + ANIM_DEATH = "die_backwards1"; + SOUND_PARRY = "weapons/parry.wav"; + SOUND_POWERUP = "voices/big_swordready.wav"; + SOUND_LEAP = "voices/big_shout1.wav"; + SOUND_SATTACK = "voices/big_shout1.wav"; + SOUND_TAUNT1 = "voices/big_yeah1.wav"; + SOUND_TAUNT2 = "voices/big_taunt1.wav"; + SOUND_SWING_FAST = "weapons/cbar_miss1.wav"; + SOUND_SWING_SLOW1 = "zombie/claw_miss1.wav"; + SOUND_SWING_SLOW2 = "zombie/claw_miss2.wav"; + SOUND_DEATH = "voices/big_death.wav"; + SOUND_BOW_STRETCH = "weapons/bow/stretch.wav"; + SOUND_BOW_SHOOT = "weapons/bow/crossbow.wav"; + SOUND_PAIN = "voices/big_chesthit1.wav"; + SOUND_PAIN2 = "voices/big_armhit1.wav"; + FREQ_HEALTH = 50.0; + FREQ_PULL = 10.0; + FREQ_KICK = RandomInt(10, 30); + FREQ_SPECIAL = Random(15, 30); + FREQ_INVIS = RandomInt(30, 120); + FREQ_FLANK = 5.0; + FREQ_AVOID = 10.0; + CAN_FLINCH = 1; + FLINCH_DAMAGE_THRESHOLD = 75; + FLINCH_CHANCE = 50; + FLINCH_ANIM = "longsword_parry"; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 180; + ATTACK_HITCHANCE = 0.85; + ATTACK_MOVERANGE = 90; + MOVE_RANGE = 90; + DMG_KICK = RandomInt(50, 100); + DMG_DAGGER = RandomInt(30, 80); + ELEMENT_LIMIT = 5; + ELEMENT_DMG_THRESH = 30; + ARROW_SPEED = 1200; + AS_ATK_VALUE = 10; + BEAM_SPRITE = "lgtning.spr"; + MONSTER_MODEL = "fur/npcs/dragoonlord.mdl"; + Precache(MONSTER_MODEL); + Precache("nhth1.spr"); + Precache("ambience/alienflyby1.wav"); + Precache("monsters/bat.mdl"); + Precache("misc/gold.wav"); + Precache("amb/quest1.wav"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(2.0); + if ((SUSPEND_AI)) + { + BD_COUNT += 1; + } + if (!(SUSPEND_AI)) + { + BD_COUNT = 0; + } + if (BD_COUNT > 20) + { + npcatk_resume_ai(); + } + } + + void game_precache() + { + Precache("monsters/summon/stun_burst"); + Precache("monsters/summon/flame_burst"); + Precache("monsters/summon/flame_burst"); + } + + void OnSpawn() override + { + SetInvincible(true); + SetModel(MONSTER_MODEL); + SetWidth(40); + SetHeight(120); + SetRace("rogue"); + SetDamageResistance("all", 0.5); + SetDamageResistance("stun", 0.5); + SetSayTextRange(2048); + SetRoam(true); + SetHealth(9999); + SetHearingSensitivity(8); + HEALTH_AMMO = 2; + RESIST_AMMO = 3; + SPECIAL_AMMO = 2; + FIRE_STRUCK = 0; + COLD_STRUCK = 0; + POISON_STRUCK = 0; + LIGHTNING_STRUCK = 0; + FAST_SWINGS = 0; + NEXT_ATTACK = "unset"; + BD_COUNT = 0; + NOVA_PICK_ATK = 0; + ANIM_RUN = "run"; + ANIM_WALK = "walk2"; + ScheduleDelayedEvent(0.1, "setup_boss"); + } + + void setup_boss() + { + SetName("Demetricus the Dragoon Leader"); + SetHealth(3400); + SetModelBody(1, 1); + ANIM_ATTACK = ANIM_JAB; + SetSkillLevel(1000); + SetMoveAnim(ANIM_WALK); + SetInvincible(false); + } + + void OnPostSpawn() override + { + ORIG_MOVE_RANGE = ATTACK_MOVERANGE; + HALF_HEALTH = GetMonsterMaxHP(); + HALF_HEALTH /= 2; + FIRST_SPEC_POT_HEALTH = GetMonsterMaxHP(); + FIRST_SPEC_POT_HEALTH *= 0.75; + QUARTER_HEALTH = GetMonsterMaxHP(); + QUARTER_HEALTH *= 0.25; + ORIG_ATTACK = ANIM_ATTACK; + ORIG_WEAPON = 1; + FREQ_ATTACK = 0.25; + ORIG_FREQ_ATTACK = FREQ_ATTACK; + } + + void OnDamage(int damage) override + { + if (!(GetMonsterProperty("isalive"))) return; + if (param2 > 30) + { + // TODO: getents player 128 + if (getCount >= 3) + { + if (!(SWEEP_KICK_DELAY)) + { + } + if (!(DRINKING_POT)) + { + } + SWEEP_KICK_DELAY = 1; + FREQ_KICK("reset_sweep_kick_delay"); + int SWEEP_KICK = 1; + CAN_FLINCH = 0; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_KICK_LOW); + } + } + if (HEALTH_AMMO > 0) + { + if (!(AM_INVISIBLE)) + { + } + if (!(DRINKING_POT)) + { + } + if (GetMonsterHP() < HALF_HEALTH) + { + } + if (!(HEALTH_POT_DELAY)) + { + } + HEALTH_POT_DELAY = 1; + FREQ_HEALTH("reset_health_pot_delay"); + drink_pot("health"); + } + if (!(DID_FIRST_POT)) + { + if (!(DRINKING_POT)) + { + } + if (GetMonsterHP() < FIRST_SPEC_POT_HEALTH) + { + } + DID_FIRST_POT = 1; + drink_special(); + ScheduleDelayedEvent(90, "end_special_effect"); + } + if (!(DID_SECOND_POT)) + { + if (!(DRINKING_POT)) + { + } + if (GetMonsterHP() < QUARTER_HEALTH) + { + } + DID_SECOND_POT = 1; + drink_special(); + } + if (GetEntityRange(param1) > ATTACK_HITRANGE) + { + if (!(AM_INVISIBLE)) + { + } + if (!(DRINKING_POT)) + { + } + PULL_TARGET = param1; + if (param2 > 20) + { + int PULL_CHANCE = RandomInt(1, 10); + } + if (param2 > 60) + { + int PULL_CHANCE = RandomInt(1, 2); + } + if (!(PULL_DELAY)) + { + } + PULL_DELAY = 1; + FREQ_PULL("reset_pull_delay"); + tractor_beam(PULL_TARGET); + } + if (RESIST_AMMO > 0) + { + if (param2 > ELEMENT_DMG_THRESH) + { + } + if (!(AM_INVISIBLE)) + { + } + if (!(DRINKING_POT)) + { + } + if (!(IN_RESIST)) + { + } + if (param3 == "fire") + { + FIRE_STRUCK += 1; + } + if (param3 == "cold") + { + COLD_STRUCK += 1; + } + if (param3 == "lightning") + { + LIGHTNING_STRUCK += 1; + } + if (param3 == "poison") + { + POISON_STRUCK += 1; + } + if (FIRE_STRUCK >= ELEMENT_LIMIT) + { + if (!(USED_FIRE_POT)) + { + drink_pot("fire"); + } + } + if (COLD_STRUCK >= ELEMENT_LIMIT) + { + if (!(USED_COLD_POT)) + { + drink_pot("cold"); + } + } + if (LIGHTNING_STRUCK >= ELEMENT_LIMIT) + { + if (!(USED_LIGHTNING_POT)) + { + drink_pot("lightning"); + } + } + if (POISON_STRUCK >= ELEMENT_LIMIT) + { + if (!(USED_POISON_POT)) + { + drink_pot("poison"); + } + } + } + } + + void normal_immune() + { + IN_RESIST = 0; + } + + void reset_avoid_delay() + { + AVOID_DELAY = 0; + } + + void reset_sweep_kick_delay() + { + SWEEP_KICK_DELAY = 0; + } + + void reset_health_pot_delay() + { + HEALTH_POT_DELAY = 0; + } + + void reset_pull_delay() + { + PULL_DELAY = 0; + } + + void drink_special() + { + int RND_POT = RandomInt(1, 3); + if (RND_POT == 1) + { + drink_pot("demon"); + } + if (RND_POT == 2) + { + drink_pot("protection"); + } + if (RND_POT == 3) + { + drink_pot("speed"); + } + } + + void drink_pot() + { + if (!(GetMonsterProperty("isalive"))) return; + if ((DRINKING_POT)) return; + DRINKING_POT = 1; + if (param1 != "health") + { + SetModelBody(1, 3); + } + if (param1 == "health") + { + SetModelBody(1, 2); + } + npcatk_suspend_ai(2.0); + PlayAnim("once", "break"); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_DRINK); + DRINK_TYPE = param1; + } + + void drink_done() + { + npcatk_resume_ai(); + DRINKING_POT = 0; + EmitSound(GetOwner(), 0, "items/drink.wav", 10); + if (DRINK_TYPE == "fire") + { + USED_FIRE_POT = 1; + RESIST_AMMO -= 1; + Vector3 GLOW_COLOR = Vector3(255, 0, 0); + SetDamageResistance("fire", 0.5); + ScheduleDelayedEvent(120, "normal_immune"); + IN_RESIST = 1; + string OUT_MSG = GetMonsterProperty("name"); + OUT_MSG += " has drank a potion and is now resistant to fire!"; + SendInfoMsg("all", "POTION OF RESISTANCE TO FIRE " + OUT_MSG); + } + if (DRINK_TYPE == "cold") + { + USED_COLD_POT = 1; + RESIST_AMMO -= 1; + Vector3 GLOW_COLOR = Vector3(128, 128, 255); + SetDamageResistance("cold", 0.5); + ScheduleDelayedEvent(120, "normal_immune"); + IN_RESIST = 1; + string OUT_MSG = GetMonsterProperty("name"); + OUT_MSG += " has drank a potion and is now resistant to cold!"; + SendInfoMsg("all", "POTION OF RESISTANCE TO COLD " + OUT_MSG); + } + if (DRINK_TYPE == "poison") + { + USED_POISON_POT = 1; + RESIST_AMMO -= 1; + Vector3 GLOW_COLOR = Vector3(0, 255, 0); + SetDamageResistance("poison", 0.5); + ScheduleDelayedEvent(120, "normal_immune"); + IN_RESIST = 1; + string OUT_MSG = GetMonsterProperty("name"); + OUT_MSG += " has drank a potion and is now resistant to poison!"; + SendInfoMsg("all", "POTION OF RESISTANCE TO POISON " + OUT_MSG); + } + if (DRINK_TYPE == "lightning") + { + USED_LIGHTNING_POT = 1; + RESIST_AMMO -= 1; + Vector3 GLOW_COLOR = Vector3(255, 255, 0); + SetDamageResistance("lightning", 0.5); + ScheduleDelayedEvent(120, "normal_immune"); + IN_RESIST = 1; + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += " has drank a potion and is now resistant to lightning!"; + SendInfoMsg("all", "POTION OF RESISTANCE TO LIGHTNING " + OUT_MSG); + } + if (DRINK_TYPE == "health") + { + HEALTH_AMMO -= 1; + Vector3 GLOW_COLOR = Vector3(0, 255, 0); + string HP_GIVE = GetMonsterMaxHP(); + HP_GIVE -= GetMonsterHP(); + HealEntity(GetOwner(), HP_GIVE); + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += " has used a potion of health!"; + SendInfoMsg("all", "POTION OF HEALTH " + OUT_MSG); + } + if (DRINK_TYPE == "protection") + { + SPEC_TYPE = "protection"; + Vector3 GLOW_COLOR = Vector3(255, 255, 255); + GLOW_ON = 1; + GLOW_LOOP_COLOR = Vector3(255, 255, 255); + ScheduleDelayedEvent(5.0, "glow_loop"); + SetDamageResistance("all", 0.25); + ScheduleDelayedEvent(60, "end_special_effect"); + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += " has used a potion of protection!"; + SendInfoMsg("all", "POTION OF PROTECTION " + OUT_MSG); + } + if (DRINK_TYPE == "demon") + { + SPEC_TYPE = "demon"; + Vector3 GLOW_COLOR = Vector3(255, 0, 0); + DEMON_NOHP_LOSS = 1; + ScheduleDelayedEvent(5.0, "demon_blood"); + ScheduleDelayedEvent(90, "end_special_effect"); + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += " has used a vial of demon blood!"; + SendInfoMsg("all", "POTION OF DEMON BLOOD " + OUT_MSG); + } + if (DRINK_TYPE == "speed") + { + SPEC_TYPE = "speed"; + Vector3 GLOW_COLOR = Vector3(255, 0, 255); + ScheduleDelayedEvent(5.0, "turbo_on"); + ScheduleDelayedEvent(90, "end_special_effect"); + FREQ_ATTACK /= 2; + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += " has used a potion of speed!"; + SendInfoMsg("all", "POTION OF SPEED " + OUT_MSG); + } + Effect("glow", GetOwner(), GLOW_COLOR, 128, 5, 5); + DRINK_TYPE = "unset"; + SetModelBody(1, ORIG_WEAPON); + } + + void OnFlinch() + { + npcatk_resume_ai(); + if (DRINK_TYPE == "health") + { + SpawnItem("health_spotion", /* TODO: $relpos */ $relpos(0, 0, 0)); + } + } + + void npcatk_resume_ai() + { + SetModelBody(1, ORIG_WEAPON); + DRINKING_POT = 0; + } + + void npcatk_checkflinch() + { + if ((CAN_FLINCH)) + { + if (!(FLINCHED_RECENTLY)) + { + } + if (GetMonsterHP() < HALF_HEALTH) + { + if (param1 > FLINCH_DAMAGE_THRESHOLD) + { + } + if (RandomInt(1, 100) <= FLINCH_CHANCE) + { + npc_flinch(); + PlayAnim("once", "break"); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", FLINCH_ANIM); + } + FLINCHED_RECENTLY = 1; + FLINCH_DELAY("npcatk_reset_flinch"); + } + } + } + + void OnParry(CBaseEntity@ attacker) override + { + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_PARRY); + EmitSound(GetOwner(), 0, SOUND_PARRY, 10); + } + + void end_special_effect() + { + if (SPEC_TYPE == "demon") + { + DEMON_BLOOD = 0; + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += "'s demon blood potion has run out."; + SendInfoMsg("all", "EFFECT ENDED " + OUT_MSG); + } + if (SPEC_TYPE == "protection") + { + SetDamageResistance("all", 0.5); + GLOW_ON = 0; + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += "'s protection potion has run out."; + SendInfoMsg("all", "EFFECTED ENDED " + OUT_MSG); + } + if (SPEC_TYPE == "speed") + { + FREQ_ATTACK = ORIG_FREQ_ATTACK; + turbo_off(); + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += "'s speed potion has run out."; + SendInfoMsg("all", "EFFECTED ENDED " + OUT_MSG); + } + } + + void turbo_on() + { + if (!(GLOW_ON)) + { + GLOW_ON = 1; + GLOW_LOOP_COLOR = Vector3(255, 255, 0); + glow_loop(); + } + SPEC_TYPE = "speed"; + SetMoveSpeed(2.0); + SetAnimMoveSpeed(2.0); + SetAnimFrameRate(3.0); + BASE_FRAMERATE = 3.0; + BASE_MOVESPEED = 3.0; + ScheduleDelayedEvent(0.1, "stuck_fix"); + } + + void stuck_fix() + { + PlayAnim("critical", ANIM_ATTACK); + } + + void do_turbo() + { + turbo_on(); + ScheduleDelayedEvent(10.0, "turbo_off"); + } + + void turbo_off() + { + SetMoveSpeed(1.0); + SetAnimMoveSpeed(1.0); + SetAnimFrameRate(1.0); + BASE_FRAMERATE = 1.0; + BASE_MOVESPEED = 1.0; + } + + void tractor_beam() + { + DOING_PULL = 1; + if (!(GetEntityRange(PULL_TARGET) < 4000)) return; + npcatk_suspend_ai(); + SetMoveDest(PULL_TARGET); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_JAB); + string BEAM_START = /* TODO: $relpos */ $relpos(0, 0, 60); + string BEAM_END = GetEntityOrigin(PULL_TARGET); + Effect("beam", "end", BEAM_SPRITE, 30, BEAM_START, PULL_TARGET, 0, Vector3(255, 255, 0), 200, 30, 1.5); + ScheduleDelayedEvent(1.0, "tractor_beam2"); + } + + void tractor_beam2() + { + SayText("Don't think you can escape me!"); + SetAngles("face"); + AddVelocity(PULL_TARGET, /* TODO: $relvel */ $relvel(10, -3000, 10)); + ScheduleDelayedEvent(0.25, "npcatk_resume_ai"); + ScheduleDelayedEvent(0.5, "tractor_beam3"); + } + + void tractor_beam3() + { + SetAngles("face"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + SetAngles("face"); + npcatk_settarget(PULL_TARGET); + } + + void kick_low() + { + KICK_ATTACK = 1; + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 256, 1, 100 + npcatk_dodamage(m_hAttackTarget, ATTACK_RANGE, DMG_KICK, 1.0, "blunt"); + CAN_FLINCH = 1; + ANIM_ATTACK = ORIG_ATTACK; + } + + void kick_high() + { + KICK_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, 1.0, "blunt"); + ANIM_ATTACK = ORIG_ATTACK; + } + + void game_dodamage() + { + if ((param1)) + { + if (GetEntityRange(param2) < ATTACK_HITRANGE) + { + } + if ((KICK_ATTACK)) + { + ApplyEffect(param2, "effects/debuff_stun", 10, GetEntityIndex(GetOwner())); + ANIM_ATTACK = ORIG_ATTACK; + } + if ((FREEZE_ATTACK)) + { + int FREEZE_CHANCE = RandomInt(1, 4); + if (FREEZE_CHANCE < 4) + { + EmitSound(GetOwner(), 0, "playsound", 10); + ApplyEffect(param2, "effects/dot_cold_freeze", 10, GetEntityIndex(GetOwner()), 30); + } + if (FREEZE_CHANCE == 4) + { + EmitSound(GetOwner(), 0, "debris/zap1.wav", 10); + } + ANIM_ATTACK = ORIG_ATTACK; + } + if ((STUN_ATTACK)) + { + ApplyEffect(param2, "effects/debuff_stun", 10, GetEntityIndex(GetOwner())); + } + if (!(KICK_ATTACK)) + { + } + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_BURN_DAGGER); + } + KICK_ATTACK = 0; + FREEZE_ATTACK = 0; + STUN_ATTACK = 0; + NORM_ATTACK = 0; + } + + void cycle_up() + { + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + FREQ_KICK("do_kick"); + FREQ_SPECIAL("do_special"); + FREQ_TURBO("do_turbo"); + FREQ_INVIS("do_invis"); + } + + void do_special() + { + string L_FREQ_SPECIAL = FREQ_SPECIAL; + check_legal_act(); + if (!(LEGAL_ACT)) + { + int L_FREQ_SPECIAL = 5; + } + string CAN_SEE_NME = false; + if (!(CAN_SEE_NME)) + { + int L_FREQ_SPECIAL = 5; + } + L_FREQ_SPECIAL("do_special"); + if (!(CAN_SEE_NME)) return; + if (!(LEGAL_ACT)) return; + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 128, 3, 3); + AS_ATTACKING = 20; + PlayAnim("critical", ANIM_SPELL); + } + + void reset_doing_nova() + { + DOING_NOVA = 0; + } + + void do_fire_wall() + { + PlayAnim("critical", ANIM_SPELL); + Effect("glow", GetOwner(), Vector3(255, 255, 128), 128, 3, 3); + } + + void do_fireball() + { + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_JAB); + } + + void do_sphere() + { + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_JAB); + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + SpawnNPC("monsters/summon/ice_blast", /* TODO: $relpos */ $relpos(0, 64, 32), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 20.0, /* TODO: $relpos */ $relpos(0, 2000, 0) + } + + void go_blizz() + { + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_JAB); + Effect("glow", GetOwner(), Vector3(128, 128, 255), 128, 3, 3); + string BLIZZ_POS = GetEntityOrigin(BLIZZ_TARGET); + SpawnNPC("monsters/summon/summon_blizzard", BLIZZ_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityAngles(GetOwner()), DMG_BLIZZ, 20.0 + npcatk_resume_ai(); + } + + void do_kick() + { + FREQ_KICK("do_kick"); + check_legal_act(); + if (!(LEGAL_ACT)) return; + int KICK_TYPE = RandomInt(1, 3); + if (KICK_TYPE <= 2) + { + NEXT_ATTACK = ANIM_KICK_HIGH; + } + if (KICK_TYPE == 3) + { + NEXT_ATTACK = ANIM_KICK_LOW; + } + } + + void do_volcano() + { + string L_FREQ_VOLCANO = FREQ_VOLCANO; + check_legal_act(); + if ((DOING_NOVA)) + { + float L_FREQ_VOLCANO = 5.0; + } + if (!(LEGAL_ACT)) + { + float L_FREQ_VOLCANO = 5.0; + } + L_FREQ_VOLCANO("do_volcano"); + if (!(LEGAL_ACT)) return; + if ((DOING_NOVA)) return; + NOVA_ATTACK = "volcano"; + AS_ATTACKING = 20; + PlayAnim("critical", ANIM_SPELL); + } + + void do_scatter_shot() + { + SCATTER_COUNT += 1; + if (SCATTER_COUNT < 10) + { + ScheduleDelayedEvent(0.1, "do_scatter_shot"); + } + EmitSound(GetOwner(), 0, SOUND_BOW_SHOOT, 10); + int RND_ARROW = RandomInt(1, 3); + string FIN_DMG = DMG_ARROW; + if (RND_ARROW == 1) + { + string ARROW_TYPE = "proj_arrow_frost"; + } + if (RND_ARROW == 2) + { + string ARROW_TYPE = "proj_arrow_gpoison"; + } + if (RND_ARROW == 3) + { + string ARROW_TYPE = "proj_arrow_jagged"; + FIN_DMG *= 4; + } + TossProjectile(ARROW_TYPE, /* TODO: $relpos */ $relpos(0, 32, 32), "none", ARROW_SPEED, FIN_DMG, 10, "none"); + CallExternal("ent_lastprojectile", "ext_lighten", 0.1); + } + + void axe_fast() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_FAST, ATTACK_HITCHANCE, "slash"); + NORM_ATTACK = 1; + } + + void axe_slow() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + NORM_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_SLOW, ATTACK_HITCHANCE, "blunt"); + } + + void sword_fast() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + NORM_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWORD_FAST, ATTACK_HITCHANCE, "slash"); + } + + void sword_slow() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + NORM_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWORD_SLOW, ATTACK_HITCHANCE, "slash"); + } + + void swing_slow() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + NORM_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWING_SLOW, ATTACK_HITCHANCE, "slash"); + } + + void swing_fast() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + NORM_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWING_FAST, ATTACK_HITCHANCE, "slash"); + } + + void attack_jab() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + if ((DOING_PULL)) + { + DOING_PULL = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_DAGGER, ATTACK_HITCHANCE, "slash"); + if (RandomInt(1, 20) == 1) + { + if (!(FLANK_DELAY)) + { + } + FLANK_DELAY = 1; + FREQ_FLANK("flank_delay_reset"); + npcatk_flank(m_hAttackTarget); + } + } + + void prep_done() + { + BB_IN_ATTACK = 0; + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + SpawnNPC("monsters/summon/flame_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_FLAME_BURST, 1 + } + + void bow_shoot() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + EmitSound(GetOwner(), 0, SOUND_BOW_SHOOT, 10); + if (!(SCATTER_SHOT)) + { + BALL_SIZE = Random(1, 9); + BALL_SPEED = 1000; + int BALL_SADJ = 90; + BALL_SADJ *= BALL_SIZE; + BALL_SPEED -= BALL_SADJ; + BALL_DMG = BALL_SIZE; + BALL_DMG *= 30; + string OFS_ADJ = /* TODO: $relpos */ $relpos(0, 28, 36); + if (GetEntityRange(m_hAttackTarget) < 100) + { + string OFS_ADJ = /* TODO: $relpos */ $relpos(0, 28, -12); + } + TossProjectile("proj_mana", OFS_ADJ, "none", BALL_SPEED, BALL_DMG, 1, "none"); + } + if ((SCATTER_SHOT)) + { + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + SCATTER_SHOT = 0; + SCATTER_COUNT = 0; + do_scatter_shot(); + } + } + + void bow_stretch() + { + BB_IN_ATTACK = 0; + EmitSound(GetOwner(), 0, SOUND_BOW_STRETCH, 10); + } + + void sound_fast() + { + if (NEXT_ATTACK == "unset") + { + EmitSound(GetOwner(), 0, SOUND_SWING_FAST, 10); + } + if (NEXT_ATTACK != "unset") + { + if (NEXT_ATTACK != ANIM_KICK_HIGH) + { + } + if (NEXT_ATTACK != ANIM_KICK_LOW) + { + } + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + } + } + + void sound_slow() + { + if (NEXT_ATTACK == "unset") + { + // PlayRandomSound from: SOUND_SWING_SLOW1, SOUND_SWING_SLOW2 + array sounds = {SOUND_SWING_SLOW1, SOUND_SWING_SLOW2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + if (NEXT_ATTACK != "unset") + { + if (NEXT_ATTACK != ANIM_KICK_HIGH) + { + } + if (NEXT_ATTACK != ANIM_KICK_LOW) + { + } + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 2, 2); + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + } + } + + void leap_scan() + { + if (!(POWER_ATTACK)) return; + ScheduleDelayedEvent(0.25, "leap_scan"); + if ((IS_FLEEING)) return; + if ((IsEntityAlive(LEAP_TARGET))) + { + leap_at(LEAP_TARGET); + } + if (!(IsEntityAlive(LEAP_TARGET))) + { + LEAP_TARGET = m_hAttackTarget; + if (m_hAttackTarget == "unset") + { + leap_at(LEAP_TARGET); + } + } + } + + void leap_at() + { + if ((AM_LEAPING)) return; + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + POWER_ATTACK = 0; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_at2"); + } + + void leap_at2() + { + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "bandit_charge"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + ScheduleDelayedEvent(0.9, "bullrush_stun"); + } + + void bandit_charge() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void reset_leaping() + { + AM_LEAPING = 0; + } + + void bullrush_stun() + { + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 60, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 256, 1, 150 + } + + void leap_away() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_away2"); + } + + void leap_away2() + { + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_HOP); + ScheduleDelayedEvent(0.1, "bandit_hop"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + } + + void bandit_hop() + { + int JUMP_HEIGHT = RandomInt(350, 450); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void flank_delay_reset() + { + FLANK_DELAY = 0; + } + + void my_target_died() + { + ScheduleDelayedEvent(0.1, "taunt_sound"); + AS_ATTACKING = GetGameTime(); + if ((DRINKING_POT)) return; + if ((GetEntityProperty(param1, "scriptvar"))) return; + PlayAnim("critical", "aim_punch1"); + } + + void taunt_sound() + { + // PlayRandomSound from: SOUND_TAUNT1, SOUND_TAUNT2 + array sounds = {SOUND_TAUNT1, SOUND_TAUNT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void glow_loop() + { + if (!(GLOW_ON)) return; + ScheduleDelayedEvent(5.1, "glow_loop"); + Effect(GetOwner(), "glow", GLOW_LOOP_COLOR, 128, 5, 0); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void check_legal_act() + { + LEGAL_ACT = 1; + if ((I_R_FROZEN)) + { + LEGAL_ACT = 0; + } + if (ANIM_ATTACK == ANIM_KICK_HIGH) + { + LEGAL_ACT = 0; + } + if (ANIM_ATTACK == ANIM_KICK_LOW) + { + LEGAL_ACT = 0; + } + if ((IS_FLEEING)) + { + LEGAL_ACT = 0; + } + if ((SUSPEND_AI)) + { + LEGAL_ACT = 0; + } + if ((DRINKING_POT)) + { + LEGAL_ACT = 0; + } + } + + void npcatk_attack() + { + if ((NPC_NO_ATTACK)) return; + npc_selectattack(); + PlayAnim("once", ANIM_ATTACK); + ATTACK_ANIMINDEX = GetEntityProperty(GetOwner(), "anim.index"); + ATTACK_MOVERANGE = 9999; + NPC_NO_MOVE = 1; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (ATTACK_ANIMINDEX == GetEntityProperty(GetOwner(), "anim.index")) + { + NPC_NO_MOVE = 1; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + AS_ATTACKING = 5; + } + if (!(ATTACK_ANIMINDEX != GetEntityProperty(GetOwner(), "anim.index"))) return; + ATTACK_MOVERANGE = ORIG_MOVE_RANGE; + NPC_NO_MOVE = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/dragoon_elite.as b/scripts/angelscript/furion/dragoons/dragoon_elite.as new file mode 100644 index 00000000..a442e66c --- /dev/null +++ b/scripts/angelscript/furion/dragoons/dragoon_elite.as @@ -0,0 +1,1024 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/base_aim_proj.as" + +namespace MS +{ + +class DragoonElite : CGameScript +{ + string ADJ_RANGE; + int AIM_RATIO; + int AM_LEAPING; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ARROW_DAMAGE; + string AS_ATTACKING; + string ATK_TYPE; + string ATTACK1_DAMAGE; + int ATTACK_COF; + float ATTACK_PERCENTAGE; + string ATTACK_RANGE; + int ATTACK_SPEED; + string BANDIT_TYPE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int CAN_ATTACK; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + string CHANGE_POSITION; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + float DMG_AXE; + float DMG_DAGGER; + int DMG_MA; + float DMG_MACE; + float DMG_SPEAR; + float DMG_SWORD; + int DO_STUN; + int DROPS_CONTAINER; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string ELEMENT; + string FINAL_DAMAGE; + float FREQ_AXE; + float FREQ_BOW; + float FREQ_DAGGER; + float FREQ_MA; + float FREQ_MACE; + float FREQ_SPEAR; + string FREQ_SPEC_ATTACK; + float FREQ_SWORD; + int HUNT_AGRO; + string LEAP_TARGET; + int LEAP_UP_DELAY; + string MELEE_ATTACK; + string MONSTER_MODEL; + string MOVE_RANGE; + int NO_STUCK_CHECKS; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string OLD_Z; + string ORIG_ATTACK; + string POWER_ATTACK; + string PURE_FLEE; + float RETALIATE_CHANGETARGET_CHANCE; + string SOUND_BOW; + string SOUND_PAIN; + string SOUND_PAIN2; + int SPECIAL_EFFECT_CHANCE; + int SPEC_LOOP; + int TOO_CLOSE; + string WEAPON; + + DragoonElite() + { + Precache("magic/boom.wav"); + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_frost_arrows"; + MONSTER_MODEL = "fur/npcs/dragoon_elite.mdl"; + Precache(MONSTER_MODEL); + ANIM_HOP = "long_jump"; + FREQ_BOW = Random(15, 30); + FREQ_DAGGER = Random(20, 30); + FREQ_MA = Random(10, 15); + FREQ_SWORD = Random(15, 30); + FREQ_AXE = Random(15, 30); + FREQ_MACE = Random(15, 30); + FREQ_SPEAR = Random(15, 30); + DMG_DAGGER = Random(20, 30); + DMG_MA = 25; + DMG_SWORD = Random(20, 30); + DMG_AXE = Random(30, 60); + DMG_MACE = Random(60, 75); + DMG_SPEAR = Random(30, 60); + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_PAIN2 = "player/armhit1.wav"; + SOUND_BOW = "weapons/bow/bow.wav"; + ANIM_IDLE = "idle"; + ANIM_RUN = "run"; + ANIM_WALK = "walk2"; + ANIM_DEATH = "die_simple"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_ATTACK = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_HEAR = 1; + NPC_GIVE_EXP = 400; + AIM_RATIO = 50; + ARROW_DAMAGE = "$rand(50,120)"; + bowey(); + fistey(); + daggerey(); + swordey(); + axey(); + macey(); + speary(); + icey(); + poisoney(); + firey(); + zappy(); + } + + void OnSpawn() override + { + if (WEAPON == "WEAPON") + { + WEAPON = RandomInt(0, 6); + } + if (ELEMENT == "ELEMENT") + { + ELEMENT = RandomInt(0, 3); + } + SetGold(RandomInt(70, 100)); + SetWidth(32); + SetHeight(92); + SetRace("rogue"); + SetHearingSensitivity(3); + SetRoam(true); + SetModel(MONSTER_MODEL); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void bowey() + { + if (!(WEAPON == 0)) return; + SetName("Elite Dragoon Archer"); + SetHealth(800); + ATTACK_SPEED = 1200; + MOVE_RANGE = ATTACK_SPEED; + ATTACK_RANGE = ATTACK_SPEED; + ATTACK_COF = 0; + ANIM_ATTACK = "shootbow"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 5); + TOO_CLOSE = 0; + DROPS_CONTAINER = 1; + NO_STUCK_CHECKS = 1; + BANDIT_TYPE = "bow"; + } + + void daggerey() + { + if (!(WEAPON == 1)) return; + SetName("Elite Dragoon Rogue"); + SetHealth(800); + MOVE_RANGE = 30; + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = DMG_DAGGER; + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "swordjab1_R"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 1); + DROP_ITEM1 = "smallarms_fangstooth"; + DROP_ITEM1_CHANCE = 0.05; + BANDIT_TYPE = "dagger"; + } + + void fistey() + { + if (!(WEAPON == 2)) return; + SetName("Elite Dragoon Martial Artist"); + SetHealth(1000); + SetMoveSpeed(1.5); + SetAnimMoveSpeed(1.5); + BASE_FRAMERATE = 1.5; + BASE_MOVESPEED = 1.5; + MOVE_RANGE = 30; + ATTACK_RANGE = 80; + ATTACK1_DAMAGE = DMG_MA; + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "aim_punch1"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 0); + BANDIT_TYPE = "ma"; + } + + void swordey() + { + if (!(WEAPON == 3)) return; + SetName("Elite Dragoon Swordsman"); + SetHealth(1000); + MOVE_RANGE = 60; + ATTACK_RANGE = 100; + ATTACK1_DAMAGE = Random(20, 30); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "swordswing2_R"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 4); + BANDIT_TYPE = "sword"; + } + + void axey() + { + if (!(WEAPON == 4)) return; + SetName("Elite Dragoon Axeman"); + SetHealth(1500); + MOVE_RANGE = 80; + ATTACK_RANGE = 100; + ATTACK1_DAMAGE = Random(30, 60); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 3); + BANDIT_TYPE = "axe"; + } + + void macey() + { + if (!(WEAPON == 5)) return; + SetName("Elite Dragoon Berserker"); + SetHealth(1750); + MOVE_RANGE = 80; + ATTACK_RANGE = 100; + ATTACK1_DAMAGE = Random(30, 60); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 2); + BANDIT_TYPE = "mace"; + } + + void speary() + { + if (!(WEAPON == 6)) return; + SetName("Elite Dragoon Lancer"); + SetHealth(1200); + MOVE_RANGE = 120; + ATTACK_RANGE = 140; + ATTACK1_DAMAGE = Random(30, 60); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "spearjab"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 6); + BANDIT_TYPE = "spear"; + } + + void icey() + { + if (!(ELEMENT == 0)) return; + SetDamageResistance("slash", 0.8); + SetDamageResistance("pierce", 0.8); + SetDamageResistance("blunt", 0.8); + SetDamageResistance("fire", 1.3); + SetDamageResistance("cold", 0.1); + SetDamageResistance("poison", 0.8); + SetDamageResistance("lightning", 0.8); + SetDamageResistance("holy", 0.0); + SetModelBody(0, 0); + } + + void poisoney() + { + if (!(ELEMENT == 1)) return; + SetDamageResistance("slash", 0.8); + SetDamageResistance("pierce", 0.8); + SetDamageResistance("blunt", 0.8); + SetDamageResistance("fire", 0.8); + SetDamageResistance("cold", 0.8); + SetDamageResistance("poison", 0.1); + SetDamageResistance("lightning", 1.3); + SetDamageResistance("holy", 0.0); + SetModelBody(0, 1); + } + + void firey() + { + if (!(ELEMENT == 2)) return; + SetDamageResistance("slash", 0.8); + SetDamageResistance("pierce", 0.8); + SetDamageResistance("blunt", 0.8); + SetDamageResistance("fire", 0.1); + SetDamageResistance("cold", 1.3); + SetDamageResistance("poison", 0.8); + SetDamageResistance("lightning", 0.8); + SetDamageResistance("holy", 0.0); + SetModelBody(0, 2); + } + + void zappy() + { + if (!(ELEMENT == 3)) return; + SetDamageResistance("slash", 0.8); + SetDamageResistance("pierce", 0.8); + SetDamageResistance("blunt", 0.8); + SetDamageResistance("fire", 0.8); + SetDamageResistance("cold", 0.8); + SetDamageResistance("poison", 1.3); + SetDamageResistance("lightning", 0.1); + SetDamageResistance("holy", 0.0); + SetModelBody(0, 3); + } + + void check_attack() + { + if (!(WEAPON == 0)) return; + if ((IS_FLEEING)) return; + if (CHANGE_POSITION > 3) + { + CHANGE_POSITION = 0; + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_RUN); + chicken_run(3); + } + if (!(false)) return; + if (GetEntityRange(m_hLastSeen) < 100) + { + TOO_CLOSE += 0.1; + } + if (TOO_CLOSE > 5) + { + TOO_CLOSE = 0; + PURE_FLEE = 1; + npcatk_flee(m_hLastSeen, 600, 5); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(WEAPON == 0)) return; + if (!(IsValidPlayer(m_hLastStruck) + "add" + CHANGE_POSITION + 1)) return; + } + + void OnDeath(CBaseEntity@ attacker) override + { + int L_DEATHANIM = RandomInt(0, 6); + if (L_DEATHANIM == 0) + { + ANIM_DEATH = "die_simple"; + } + if (L_DEATHANIM == 1) + { + ANIM_DEATH = "die_backwards1"; + } + if (L_DEATHANIM == 2) + { + ANIM_DEATH = "die_backwards"; + } + if (L_DEATHANIM == 3) + { + ANIM_DEATH = "die_forwards"; + } + if (L_DEATHANIM == 4) + { + ANIM_DEATH = "headshot"; + } + if (L_DEATHANIM == 5) + { + ANIM_DEATH = "die_spin"; + } + if (L_DEATHANIM == 6) + { + ANIM_DEATH = "gutshot"; + } + } + + void npc_targetsighted() + { + if (WEAPON == 0) + { + if (!(IS_FLEEING)) + { + } + if ((false)) + { + } + AS_ATTACKING = GetGameTime(); + PlayAnim("once", ANIM_ATTACK); + } + if (!(BANDIT_TYPE != "bow")) return; + if ((LEAP_UP_DELAY)) return; + LEAP_UP_DELAY = 1; + ScheduleDelayedEvent(2.0, "reset_leap_up_delay"); + string TARG_POS = GetEntityOrigin(HUNT_LASTTARGET); + string MY_Z = (GetMonsterProperty("origin")).z; + string TARG_Z = (TARG_POS).z; + string Z_DIFF = TARG_Z; + MY_Z += PLAYER_HALFHEIGHT; + Z_DIFF -= MY_Z; + if (Z_DIFF < 0) + { + string Z_DIFF = /* TODO: $neg */ $neg(Z_DIFF); + } + if (Z_DIFF > 96) + { + if (Z_DIFF < 300) + { + leap_at(GetEntityIndex(HUNT_LASTTARGET)); + } + } + } + + void cycle_up() + { + if ((SPEC_LOOP)) return; + SPEC_LOOP = 1; + if (BANDIT_TYPE == "bow") + { + FREQ_SPEC_ATTACK = FREQ_BOW; + } + if (BANDIT_TYPE == "dagger") + { + FREQ_SPEC_ATTACK = FREQ_DAGGER; + } + if (BANDIT_TYPE == "ma") + { + FREQ_SPEC_ATTACK = FREQ_MA; + } + if (BANDIT_TYPE == "sword") + { + FREQ_SPEC_ATTACK = FREQ_SWORD; + } + if (BANDIT_TYPE == "axe") + { + FREQ_SPEC_ATTACK = FREQ_AXE; + } + if (BANDIT_TYPE == "mace") + { + FREQ_SPEC_ATTACK = FREQ_MACE; + } + if (BANDIT_TYPE == "spear") + { + FREQ_SPEC_ATTACK = FREQ_SPEAR; + } + FREQ_SPEC_ATTACK("special_attack"); + } + + void special_attack() + { + if (BANDIT_TYPE == "bow") + { + FREQ_SPEC_ATTACK = FREQ_BOW; + } + if (BANDIT_TYPE == "dagger") + { + FREQ_SPEC_ATTACK = FREQ_DAGGER; + } + if (BANDIT_TYPE == "ma") + { + FREQ_SPEC_ATTACK = FREQ_MA; + } + if (BANDIT_TYPE == "sword") + { + FREQ_SPEC_ATTACK = FREQ_SWORD; + } + if (BANDIT_TYPE == "axe") + { + FREQ_SPEC_ATTACK = FREQ_AXE; + } + if (BANDIT_TYPE == "mace") + { + FREQ_SPEC_ATTACK = FREQ_MACE; + } + if (BANDIT_TYPE == "spear") + { + FREQ_SPEC_ATTACK = FREQ_SPEAR; + } + FREQ_SPEC_ATTACK("special_attack"); + if ((I_R_FROZEN)) return; + if (!(false)) return; + EmitSound(GetOwner(), 0, "player/swordready.wav", 10); + if (BANDIT_TYPE != "dagger") + { + Effect("glow", GetOwner(), Vector3(255, 255, 255), 64, 1, 1); + } + ScheduleDelayedEvent(0.75, "special_attack2"); + } + + void special_attack2() + { + if (BANDIT_TYPE == "bow") + { + if ((false)) + { + SetAngles("add_view.pitch"); + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + ScheduleDelayedEvent(0.1, "bow_sound"); + ScheduleDelayedEvent(0.2, "bow_sound"); + ScheduleDelayedEvent(0.3, "bow_sound"); + ScheduleDelayedEvent(0.4, "bow_sound"); + ScheduleDelayedEvent(0.5, "bow_sound"); + ScheduleDelayedEvent(0.6, "bow_sound"); + string L_POS = /* TODO: $relpos */ $relpos(0, 0, 2); + TossProjectile("proj_arrow_npc", L_POS, "none", ATTACK_SPEED, FINAL_DAMAGE, 10, "none"); + TossProjectile("proj_arrow_npc", L_POS, "none", ATTACK_SPEED, FINAL_DAMAGE, 10, "none"); + TossProjectile("proj_arrow_npc", L_POS, "none", ATTACK_SPEED, FINAL_DAMAGE, 10, "none"); + TossProjectile("proj_arrow_npc", L_POS, "none", ATTACK_SPEED, FINAL_DAMAGE, 10, "none"); + TossProjectile("proj_arrow_npc", L_POS, "none", ATTACK_SPEED, FINAL_DAMAGE, 10, "none"); + TossProjectile("proj_arrow_npc", L_POS, "none", ATTACK_SPEED, FINAL_DAMAGE, 10, "none"); + } + } + if (BANDIT_TYPE == "dagger") + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + turbo_attack(); + } + if (BANDIT_TYPE == "ma") + { + POWER_ATTACK = 1; + PlayAnim("once", "break"); + } + if (BANDIT_TYPE == "sword") + { + PlayAnim("once", "break"); + POWER_ATTACK = 1; + } + if (BANDIT_TYPE == "axe") + { + if ((false)) + { + PlayAnim("once", "break"); + LEAP_TARGET = GetEntityIndex(m_hLastSeen); + POWER_ATTACK = 1; + if (GetEntityRange(LEAP_TARGET) < 200) + { + PURE_FLEE = 1; + npcatk_flee(LEAP_TARGET, 300, 2.0); + } + ScheduleDelayedEvent(0.1, "leap_scan"); + } + } + if (BANDIT_TYPE == "mace") + { + PlayAnim("once", "break"); + POWER_ATTACK = 1; + } + if (BANDIT_TYPE == "spear") + { + if ((false)) + { + PlayAnim("once", "break"); + LEAP_TARGET = GetEntityIndex(m_hLastSeen); + POWER_ATTACK = 1; + if (GetEntityRange(LEAP_TARGET) < 200) + { + PURE_FLEE = 1; + npcatk_flee(LEAP_TARGET, 300, 2.0); + } + ScheduleDelayedEvent(0.1, "leap_scan"); + } + } + } + + void turbo_attack() + { + PlayAnim("critical", ANIM_ATTACK); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 64, 10, 10); + SetMoveSpeed(2.0); + SetAnimMoveSpeed(2.0); + SetAnimFrameRate(3.0); + BASE_FRAMERATE = 3.0; + BASE_MOVESPEED = 3.0; + ScheduleDelayedEvent(10.0, "end_turbo"); + } + + void end_turbo() + { + SetMoveSpeed(1.0); + SetAnimMoveSpeed(1.0); + SetAnimFrameRate(1.0); + BASE_FRAMERATE = 1.0; + BASE_MOVESPEED = 1.0; + } + + void npc_selectattack() + { + if (BANDIT_TYPE == "ma") + { + ATK_TYPE = RandomInt(1, 3); + if ((POWER_ATTACK)) + { + ATK_TYPE = 2; + } + if (ATK_TYPE == 1) + { + ANIM_ATTACK = "aim_punch1"; + } + if (ATK_TYPE == 2) + { + ANIM_ATTACK = "stance_normal_highkick_r1"; + } + if (ATK_TYPE == 3) + { + ANIM_ATTACK = "stance_normal_lowkick_r1"; + } + } + if ((POWER_ATTACK)) + { + if (BANDIT_TYPE == "sword") + { + SetMoveAnim("walk_squatwalk1_R"); + ANIM_ATTACK = "swordjab1_R"; + } + if (BANDIT_TYPE == "axe") + { + if (!(IS_FLEEING)) + { + } + if (!(IsEntityAlive(LEAP_TARGET))) + { + LEAP_TARGET = HUNT_LASTTARGET; + } + } + if (BANDIT_TYPE == "mace") + { + SetMoveAnim("walk_squatwalk1_R"); + ANIM_ATTACK = "battleaxe_swing1_R"; + } + if (BANDIT_TYPE == "spear") + { + if (!(IS_FLEEING)) + { + } + if (!(IsEntityAlive(LEAP_TARGET))) + { + LEAP_TARGET = HUNT_LASTTARGET; + } + } + } + } + + void leap_at() + { + if ((AM_LEAPING)) return; + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + POWER_ATTACK = 0; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_at2"); + } + + void leap_at2() + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + PlayAnim("critical", ANIM_HOP); + AS_ATTACKING = GetGameTime(); + ScheduleDelayedEvent(0.1, "bandit_charge"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + OLD_Z = (GetMonsterProperty("origin")).z; + DO_STUN = 1; + ScheduleDelayedEvent(0.5, "ground_scan"); + } + + void leap_away() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_away2"); + } + + void leap_away2() + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + PlayAnim("critical", ANIM_HOP); + AS_ATTACKING = GetGameTime(); + ScheduleDelayedEvent(0.1, "bandit_hop"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + } + + void bandit_charge() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void bandit_hop() + { + int JUMP_HEIGHT = RandomInt(350, 450); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void reset_leaping() + { + AM_LEAPING = 0; + } + + void ground_scan() + { + if (!(DO_STUN)) return; + ScheduleDelayedEvent(0.2, "ground_scan"); + string MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + string MY_Z = (GetMonsterProperty("origin")).z; + string DIFF = MY_Z; + DIFF -= MY_GROUND; + if (DIFF < 5) + { + DO_STUN = 0; + } + if ((DO_STUN)) return; + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 60, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128, 1, 100 + } + + void attack() + { + AS_ATTACKING = GetGameTime(); + if ((IS_FLEEING)) return; + if (WEAPON == 0) + { + SetAngles("add_view.pitch"); + FINAL_DAMAGE = ARROW_DAMAGE; + npcatk_adj_attack(); + AS_ATTACKING = GetGameTime(); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 2), "none", ATTACK_SPEED, FINAL_DAMAGE, ATTACK_COF, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + bow_sound(); + } + if (WEAPON != 0) + { + ADJ_RANGE = ATTACK_RANGE; + npcatk_range_adj(); + } + if (BANDIT_TYPE == "dagger") + { + smallswing_sound(); + string FINAL_DAMAGE = DMG_DAGGER; + if ((TURBO_ON)) + { + FINAL_DAMAGE *= 2; + } + npcatk_adj_attack(); + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, ATTACK_PERCENTAGE, "slash"); + MELEE_ATTACK = 1; + } + if (BANDIT_TYPE == "ma") + { + ma_sound(); + string FINAL_DAMAGE = DMG_MA; + string HIT_CHANCE = ATTACK_PERCENTAGE; + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + float HIT_CHANCE = 1.0; + } + npcatk_adj_attack(); + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, HIT_CHANCE, "slash"); + MELEE_ATTACK = 1; + } + if (BANDIT_TYPE == "sword") + { + bigswing_sound(); + string FINAL_DAMAGE = DMG_SWORD; + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + } + npcatk_adj_attack(); + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, ATTACK_PERCENTAGE, "slash"); + MELEE_ATTACK = 1; + } + if (BANDIT_TYPE == "axe") + { + bigswing_sound(); + string FINAL_DAMAGE = DMG_AXE; + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + } + npcatk_adj_attack(); + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, ATTACK_PERCENTAGE, "slash"); + MELEE_ATTACK = 1; + } + if (BANDIT_TYPE == "mace") + { + bigswing_sound(); + string FINAL_DAMAGE = DMG_MACE; + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + } + npcatk_adj_attack(); + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + } + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, ATTACK_PERCENTAGE, "slash"); + MELEE_ATTACK = 1; + if (RandomInt(1, 3) == 1) + { + ApplyEffect(HUNT_LASTTARGET, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), RandomInt(10, 20)); + } + } + if (BANDIT_TYPE == "spear") + { + bigswing_sound(); + string FINAL_DAMAGE = DMG_SPEAR; + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + } + npcatk_adj_attack(); + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, ATTACK_PERCENTAGE, "slash"); + MELEE_ATTACK = 1; + } + } + + void reset_power_attack() + { + POWER_ATTACK = 0; + ANIM_ATTACK = ORIG_ATTACK; + SetMoveAnim(ANIM_RUN); + } + + void game_dodamage() + { + if (!(MELEE_ATTACK)) return; + MELEE_ATTACK = 0; + if (WEAPON == 0) + { + if (!(param1)) + { + CHANGE_POSITION += 1; + } + if ((param1)) + { + if (IsValidPlayer(param2) == 1) + { + CHANGE_POSITION = -2; + } + if (CHANGE_POSITION < -5) + { + CHANGE_POSITION = 0; + } + } + } + if (BANDIT_TYPE == "ma") + { + if ((param1)) + { + } + if (!(POWER_ATTACK)) + { + } + if (ATK_TYPE > 1) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(10, 200, 10)); + } + if ((POWER_ATTACK)) + { + if (BANDIT_TYPE == "ma") + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + reset_power_attack(); + if ((param1)) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 200, 200)); + ApplyEffect(param2, "effects/debuff_stun", 10, GetEntityIndex(GetOwner())); + } + if (BANDIT_TYPE == "sword") + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + reset_power_attack(); + if ((param1)) + { + } + ApplyEffect(param2, "effects/dot_cold_freeze", Random(5, 10), GetEntityIndex(GetOwner())); + } + if (BANDIT_TYPE == "mace") + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + reset_power_attack(); + SpawnNPC("monsters/summon/stun_burst", GetEntityOrigin(param2), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128 + } + } + if (!(param1)) return; + SPECIAL_EFFECT_CHANCE = RandomInt(0, 100); + if (SPECIAL_EFFECT_CHANCE < 30) + { + if (BANDIT_TYPE != "bow") + { + if (ELEMENT == 0) + { + ApplyEffect(param2, "effects/dot_cold", 10.0, GetEntityIndex(GetOwner()), RandomInt(1.0, 5.0)); + } + if (ELEMENT == 1) + { + ApplyEffect(param2, "effects/dot_poison", 4.0, GetEntityIndex(GetOwner()), RandomInt(25.0, 40.0)); + } + if (ELEMENT == 2) + { + ApplyEffect(param2, "effects/dot_fire", 15.0, GetEntityIndex(GetOwner()), RandomInt(5.0, 15.0)); + } + if (ELEMENT == 3) + { + ApplyEffect(param2, "effects/dot_lightning", 2.0, GetEntityIndex(GetOwner()), RandomInt(1.0, 100.0)); + } + } + } + } + + void bow_sound() + { + EmitSound(GetOwner(), 0, SOUND_BOW, 10); + } + + void bigswing_sound() + { + EmitSound(GetOwner(), 0, "weapons/swingsmall.wav", 8); + } + + void smallswing_sound() + { + EmitSound(GetOwner(), 0, "weapons/swingsmall.wav", 8); + } + + void ma_sound() + { + // PlayRandomSound from: "player/jab1.wav", "player/jab2.wav" + array sounds = {"player/jab1.wav", "player/jab2.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void attack_jab() + { + attack(); + } + + void kick_high() + { + attack(); + } + + void kick_low() + { + attack(); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(BANDIT_TYPE == "ma")) return; + if ((I_R_FROZEN)) return; + int LEAP_CHANCE = RandomInt(1, 10); + if (param1 > 100) + { + int LEAP_CHANCE = 1; + } + if (param1 > 20) + { + if (LEAP_CHANCE == 1) + { + } + leap_away(GetEntityIndex(m_hLastStruck)); + } + } + + void reset_leap_up_delay() + { + LEAP_UP_DELAY = 0; + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(BANDIT_TYPE == "dagger")) return; + string HP_TO_GIVE = param2; + string MAX_CHECK = GetMonsterHP(); + MAX_CHECK += HP_TO_GIVE; + if (!(MAX_CHECK < GetMonsterMaxHP())) return; + HealEntity(GetOwner(), HP_TO_GIVE); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 80, 0.5, 0.5); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + } + + void leap_scan() + { + if (!(POWER_ATTACK)) return; + ScheduleDelayedEvent(0.25, "leap_scan"); + if ((IS_FLEEING)) return; + if ((IsEntityAlive(LEAP_TARGET))) + { + leap_at(LEAP_TARGET); + } + if (!(IsEntityAlive(LEAP_TARGET))) + { + LEAP_TARGET = m_hAttackTarget; + if (m_hAttackTarget == "unset") + { + leap_at(LEAP_TARGET); + } + } + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_fire_archer.as b/scripts/angelscript/furion/dragoons/e_fire_archer.as new file mode 100644 index 00000000..4785ec56 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_fire_archer.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EFireArcher : CGameScript +{ + int ELEMENT; + int WEAPON; + + EFireArcher() + { + WEAPON = 0; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_fire_axe.as b/scripts/angelscript/furion/dragoons/e_fire_axe.as new file mode 100644 index 00000000..90c6d558 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_fire_axe.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EFireAxe : CGameScript +{ + int ELEMENT; + int WEAPON; + + EFireAxe() + { + WEAPON = 4; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_fire_mace.as b/scripts/angelscript/furion/dragoons/e_fire_mace.as new file mode 100644 index 00000000..05d12b68 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_fire_mace.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EFireMace : CGameScript +{ + int ELEMENT; + int WEAPON; + + EFireMace() + { + WEAPON = 5; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_fire_rand.as b/scripts/angelscript/furion/dragoons/e_fire_rand.as new file mode 100644 index 00000000..5a6bc7e0 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_fire_rand.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EFireRand : CGameScript +{ + int ELEMENT; + + EFireRand() + { + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_fire_spear.as b/scripts/angelscript/furion/dragoons/e_fire_spear.as new file mode 100644 index 00000000..3cef261c --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_fire_spear.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EFireSpear : CGameScript +{ + int ELEMENT; + int WEAPON; + + EFireSpear() + { + WEAPON = 6; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_fire_sword.as b/scripts/angelscript/furion/dragoons/e_fire_sword.as new file mode 100644 index 00000000..bf51f7fe --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_fire_sword.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EFireSword : CGameScript +{ + int ELEMENT; + int WEAPON; + + EFireSword() + { + WEAPON = 3; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_fire_unarmed.as b/scripts/angelscript/furion/dragoons/e_fire_unarmed.as new file mode 100644 index 00000000..7c21f04d --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_fire_unarmed.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EFireUnarmed : CGameScript +{ + int ELEMENT; + int WEAPON; + + EFireUnarmed() + { + WEAPON = 2; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_ice_archer.as b/scripts/angelscript/furion/dragoons/e_ice_archer.as new file mode 100644 index 00000000..baf6df73 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_ice_archer.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EIceArcher : CGameScript +{ + int ELEMENT; + int WEAPON; + + EIceArcher() + { + WEAPON = 0; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_ice_axe.as b/scripts/angelscript/furion/dragoons/e_ice_axe.as new file mode 100644 index 00000000..badfc969 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_ice_axe.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EIceAxe : CGameScript +{ + int ELEMENT; + int WEAPON; + + EIceAxe() + { + WEAPON = 4; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_ice_mace.as b/scripts/angelscript/furion/dragoons/e_ice_mace.as new file mode 100644 index 00000000..de741f7a --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_ice_mace.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EIceMace : CGameScript +{ + int ELEMENT; + int WEAPON; + + EIceMace() + { + WEAPON = 5; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_ice_rand.as b/scripts/angelscript/furion/dragoons/e_ice_rand.as new file mode 100644 index 00000000..e6ec783b --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_ice_rand.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EIceRand : CGameScript +{ + int ELEMENT; + + EIceRand() + { + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_ice_spear.as b/scripts/angelscript/furion/dragoons/e_ice_spear.as new file mode 100644 index 00000000..f132b057 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_ice_spear.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EIceSpear : CGameScript +{ + int ELEMENT; + int WEAPON; + + EIceSpear() + { + WEAPON = 6; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_ice_sword.as b/scripts/angelscript/furion/dragoons/e_ice_sword.as new file mode 100644 index 00000000..f1e8fa3f --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_ice_sword.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EIceSword : CGameScript +{ + int ELEMENT; + int WEAPON; + + EIceSword() + { + WEAPON = 3; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_ice_unarmed.as b/scripts/angelscript/furion/dragoons/e_ice_unarmed.as new file mode 100644 index 00000000..6acd929b --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_ice_unarmed.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EIceUnarmed : CGameScript +{ + int ELEMENT; + int WEAPON; + + EIceUnarmed() + { + WEAPON = 2; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_psn_archer.as b/scripts/angelscript/furion/dragoons/e_psn_archer.as new file mode 100644 index 00000000..f7e1bd72 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_psn_archer.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EPsnArcher : CGameScript +{ + int ELEMENT; + int WEAPON; + + EPsnArcher() + { + WEAPON = 0; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_psn_axe.as b/scripts/angelscript/furion/dragoons/e_psn_axe.as new file mode 100644 index 00000000..307f1df1 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_psn_axe.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EPsnAxe : CGameScript +{ + int ELEMENT; + int WEAPON; + + EPsnAxe() + { + WEAPON = 4; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_psn_mace.as b/scripts/angelscript/furion/dragoons/e_psn_mace.as new file mode 100644 index 00000000..783c0aa9 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_psn_mace.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EPsnMace : CGameScript +{ + int ELEMENT; + int WEAPON; + + EPsnMace() + { + WEAPON = 5; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_psn_rand.as b/scripts/angelscript/furion/dragoons/e_psn_rand.as new file mode 100644 index 00000000..0fbc3764 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_psn_rand.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EPsnRand : CGameScript +{ + int ELEMENT; + + EPsnRand() + { + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_psn_spear.as b/scripts/angelscript/furion/dragoons/e_psn_spear.as new file mode 100644 index 00000000..568e59f9 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_psn_spear.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EPsnSpear : CGameScript +{ + int ELEMENT; + int WEAPON; + + EPsnSpear() + { + WEAPON = 6; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_psn_sword.as b/scripts/angelscript/furion/dragoons/e_psn_sword.as new file mode 100644 index 00000000..d5fad774 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_psn_sword.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EPsnSword : CGameScript +{ + int ELEMENT; + int WEAPON; + + EPsnSword() + { + WEAPON = 3; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_psn_unarmed.as b/scripts/angelscript/furion/dragoons/e_psn_unarmed.as new file mode 100644 index 00000000..a595746f --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_psn_unarmed.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EPsnUnarmed : CGameScript +{ + int ELEMENT; + int WEAPON; + + EPsnUnarmed() + { + WEAPON = 2; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_rand_archer.as b/scripts/angelscript/furion/dragoons/e_rand_archer.as new file mode 100644 index 00000000..470ce877 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_rand_archer.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class ERandArcher : CGameScript +{ + int WEAPON; + + ERandArcher() + { + WEAPON = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_rand_axe.as b/scripts/angelscript/furion/dragoons/e_rand_axe.as new file mode 100644 index 00000000..df64b7f4 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_rand_axe.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class ERandAxe : CGameScript +{ + int WEAPON; + + ERandAxe() + { + WEAPON = 4; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_rand_mace.as b/scripts/angelscript/furion/dragoons/e_rand_mace.as new file mode 100644 index 00000000..80dd1190 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_rand_mace.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class ERandMace : CGameScript +{ + int WEAPON; + + ERandMace() + { + WEAPON = 5; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_rand_rand.as b/scripts/angelscript/furion/dragoons/e_rand_rand.as new file mode 100644 index 00000000..2807eb43 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_rand_rand.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class ERandRand : CGameScript +{ +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_rand_spear.as b/scripts/angelscript/furion/dragoons/e_rand_spear.as new file mode 100644 index 00000000..d5efd552 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_rand_spear.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class ERandSpear : CGameScript +{ + int WEAPON; + + ERandSpear() + { + WEAPON = 6; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_rand_sword.as b/scripts/angelscript/furion/dragoons/e_rand_sword.as new file mode 100644 index 00000000..19fe205f --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_rand_sword.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class ERandSword : CGameScript +{ + int WEAPON; + + ERandSword() + { + WEAPON = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_rand_unarmed.as b/scripts/angelscript/furion/dragoons/e_rand_unarmed.as new file mode 100644 index 00000000..be96e7ef --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_rand_unarmed.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class ERandUnarmed : CGameScript +{ + int WEAPON; + + ERandUnarmed() + { + WEAPON = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_zap_archer.as b/scripts/angelscript/furion/dragoons/e_zap_archer.as new file mode 100644 index 00000000..73e070ec --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_zap_archer.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EZapArcher : CGameScript +{ + int ELEMENT; + int WEAPON; + + EZapArcher() + { + WEAPON = 0; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_zap_axe.as b/scripts/angelscript/furion/dragoons/e_zap_axe.as new file mode 100644 index 00000000..70f6ca90 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_zap_axe.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EZapAxe : CGameScript +{ + int ELEMENT; + int WEAPON; + + EZapAxe() + { + WEAPON = 4; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_zap_mace.as b/scripts/angelscript/furion/dragoons/e_zap_mace.as new file mode 100644 index 00000000..f13653ce --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_zap_mace.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EZapMace : CGameScript +{ + int ELEMENT; + int WEAPON; + + EZapMace() + { + WEAPON = 5; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_zap_rand.as b/scripts/angelscript/furion/dragoons/e_zap_rand.as new file mode 100644 index 00000000..f301cf5e --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_zap_rand.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EZapRand : CGameScript +{ + int ELEMENT; + + EZapRand() + { + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_zap_spear.as b/scripts/angelscript/furion/dragoons/e_zap_spear.as new file mode 100644 index 00000000..c1b82b2f --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_zap_spear.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EZapSpear : CGameScript +{ + int ELEMENT; + int WEAPON; + + EZapSpear() + { + WEAPON = 6; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_zap_sword.as b/scripts/angelscript/furion/dragoons/e_zap_sword.as new file mode 100644 index 00000000..a5f37c5a --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_zap_sword.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EZapSword : CGameScript +{ + int ELEMENT; + int WEAPON; + + EZapSword() + { + WEAPON = 3; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/e_zap_unarmed.as b/scripts/angelscript/furion/dragoons/e_zap_unarmed.as new file mode 100644 index 00000000..f2826d26 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/e_zap_unarmed.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon_elite.as" + +namespace MS +{ + +class EZapUnarmed : CGameScript +{ + int ELEMENT; + int WEAPON; + + EZapUnarmed() + { + WEAPON = 2; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/fire_archer.as b/scripts/angelscript/furion/dragoons/fire_archer.as new file mode 100644 index 00000000..3e32e1f4 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/fire_archer.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class FireArcher : CGameScript +{ + int ELEMENT; + int WEAPON; + + FireArcher() + { + WEAPON = 0; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/fire_axe.as b/scripts/angelscript/furion/dragoons/fire_axe.as new file mode 100644 index 00000000..bbde9078 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/fire_axe.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class FireAxe : CGameScript +{ + int ELEMENT; + int WEAPON; + + FireAxe() + { + WEAPON = 4; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/fire_mace.as b/scripts/angelscript/furion/dragoons/fire_mace.as new file mode 100644 index 00000000..232499e9 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/fire_mace.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class FireMace : CGameScript +{ + int ELEMENT; + int WEAPON; + + FireMace() + { + WEAPON = 5; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/fire_mage.as b/scripts/angelscript/furion/dragoons/fire_mage.as new file mode 100644 index 00000000..0f0d66cc --- /dev/null +++ b/scripts/angelscript/furion/dragoons/fire_mage.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class FireMage : CGameScript +{ + int ELEMENT; + int WEAPON; + + FireMage() + { + WEAPON = 6; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/fire_random.as b/scripts/angelscript/furion/dragoons/fire_random.as new file mode 100644 index 00000000..fce598dc --- /dev/null +++ b/scripts/angelscript/furion/dragoons/fire_random.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class FireRandom : CGameScript +{ + int ELEMENT; + + FireRandom() + { + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/fire_random_nm.as b/scripts/angelscript/furion/dragoons/fire_random_nm.as new file mode 100644 index 00000000..2b46e2b4 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/fire_random_nm.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class FireRandomNm : CGameScript +{ + int ELEMENT; + int WEAPON; + + FireRandomNm() + { + WEAPON = RandomInt(0, 5); + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/fire_sword.as b/scripts/angelscript/furion/dragoons/fire_sword.as new file mode 100644 index 00000000..204968e2 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/fire_sword.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class FireSword : CGameScript +{ + int ELEMENT; + int WEAPON; + + FireSword() + { + WEAPON = 3; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/fire_unarmed.as b/scripts/angelscript/furion/dragoons/fire_unarmed.as new file mode 100644 index 00000000..2448bfa0 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/fire_unarmed.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class FireUnarmed : CGameScript +{ + int ELEMENT; + int WEAPON; + + FireUnarmed() + { + WEAPON = 2; + ELEMENT = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/ice_archer.as b/scripts/angelscript/furion/dragoons/ice_archer.as new file mode 100644 index 00000000..4bb648bf --- /dev/null +++ b/scripts/angelscript/furion/dragoons/ice_archer.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class IceArcher : CGameScript +{ + int ELEMENT; + int WEAPON; + + IceArcher() + { + WEAPON = 0; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/ice_axe.as b/scripts/angelscript/furion/dragoons/ice_axe.as new file mode 100644 index 00000000..5a68f96d --- /dev/null +++ b/scripts/angelscript/furion/dragoons/ice_axe.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class IceAxe : CGameScript +{ + int ELEMENT; + int WEAPON; + + IceAxe() + { + WEAPON = 4; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/ice_mace.as b/scripts/angelscript/furion/dragoons/ice_mace.as new file mode 100644 index 00000000..c9f9ad02 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/ice_mace.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class IceMace : CGameScript +{ + int ELEMENT; + int WEAPON; + + IceMace() + { + WEAPON = 5; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/ice_mage.as b/scripts/angelscript/furion/dragoons/ice_mage.as new file mode 100644 index 00000000..133328ee --- /dev/null +++ b/scripts/angelscript/furion/dragoons/ice_mage.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class IceMage : CGameScript +{ + int ELEMENT; + int WEAPON; + + IceMage() + { + WEAPON = 6; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/ice_random.as b/scripts/angelscript/furion/dragoons/ice_random.as new file mode 100644 index 00000000..26c8ae39 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/ice_random.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class IceRandom : CGameScript +{ + int ELEMENT; + + IceRandom() + { + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/ice_random_nm.as b/scripts/angelscript/furion/dragoons/ice_random_nm.as new file mode 100644 index 00000000..7a3edaac --- /dev/null +++ b/scripts/angelscript/furion/dragoons/ice_random_nm.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class IceRandomNm : CGameScript +{ + int ELEMENT; + int WEAPON; + + IceRandomNm() + { + WEAPON = RandomInt(0, 5); + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/ice_sword.as b/scripts/angelscript/furion/dragoons/ice_sword.as new file mode 100644 index 00000000..a35f600c --- /dev/null +++ b/scripts/angelscript/furion/dragoons/ice_sword.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class IceSword : CGameScript +{ + int ELEMENT; + int WEAPON; + + IceSword() + { + WEAPON = 3; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/ice_unarmed.as b/scripts/angelscript/furion/dragoons/ice_unarmed.as new file mode 100644 index 00000000..3e399dbf --- /dev/null +++ b/scripts/angelscript/furion/dragoons/ice_unarmed.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class IceUnarmed : CGameScript +{ + int ELEMENT; + int WEAPON; + + IceUnarmed() + { + WEAPON = 2; + ELEMENT = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/psn_archer.as b/scripts/angelscript/furion/dragoons/psn_archer.as new file mode 100644 index 00000000..9d3017cf --- /dev/null +++ b/scripts/angelscript/furion/dragoons/psn_archer.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class PsnArcher : CGameScript +{ + int ELEMENT; + int WEAPON; + + PsnArcher() + { + WEAPON = 0; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/psn_axe.as b/scripts/angelscript/furion/dragoons/psn_axe.as new file mode 100644 index 00000000..f5b300db --- /dev/null +++ b/scripts/angelscript/furion/dragoons/psn_axe.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class PsnAxe : CGameScript +{ + int ELEMENT; + int WEAPON; + + PsnAxe() + { + WEAPON = 4; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/psn_mace.as b/scripts/angelscript/furion/dragoons/psn_mace.as new file mode 100644 index 00000000..d4cb7d95 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/psn_mace.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class PsnMace : CGameScript +{ + int ELEMENT; + int WEAPON; + + PsnMace() + { + WEAPON = 5; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/psn_mage.as b/scripts/angelscript/furion/dragoons/psn_mage.as new file mode 100644 index 00000000..1d763cae --- /dev/null +++ b/scripts/angelscript/furion/dragoons/psn_mage.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class PsnMage : CGameScript +{ + int ELEMENT; + int WEAPON; + + PsnMage() + { + WEAPON = 6; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/psn_random.as b/scripts/angelscript/furion/dragoons/psn_random.as new file mode 100644 index 00000000..1d157965 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/psn_random.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class PsnRandom : CGameScript +{ + int ELEMENT; + + PsnRandom() + { + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/psn_random_nm.as b/scripts/angelscript/furion/dragoons/psn_random_nm.as new file mode 100644 index 00000000..097f6545 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/psn_random_nm.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class PsnRandomNm : CGameScript +{ + int ELEMENT; + int WEAPON; + + PsnRandomNm() + { + WEAPON = RandomInt(0, 5); + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/psn_sword.as b/scripts/angelscript/furion/dragoons/psn_sword.as new file mode 100644 index 00000000..cc113868 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/psn_sword.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class PsnSword : CGameScript +{ + int ELEMENT; + int WEAPON; + + PsnSword() + { + WEAPON = 3; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/psn_unarmed.as b/scripts/angelscript/furion/dragoons/psn_unarmed.as new file mode 100644 index 00000000..a246a409 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/psn_unarmed.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class PsnUnarmed : CGameScript +{ + int ELEMENT; + int WEAPON; + + PsnUnarmed() + { + WEAPON = 2; + ELEMENT = 1; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/random_archer.as b/scripts/angelscript/furion/dragoons/random_archer.as new file mode 100644 index 00000000..889afac1 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/random_archer.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class RandomArcher : CGameScript +{ + int WEAPON; + + RandomArcher() + { + WEAPON = 0; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/random_axe.as b/scripts/angelscript/furion/dragoons/random_axe.as new file mode 100644 index 00000000..611e8a51 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/random_axe.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class RandomAxe : CGameScript +{ + int WEAPON; + + RandomAxe() + { + WEAPON = 4; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/random_mace.as b/scripts/angelscript/furion/dragoons/random_mace.as new file mode 100644 index 00000000..d99a496e --- /dev/null +++ b/scripts/angelscript/furion/dragoons/random_mace.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class RandomMace : CGameScript +{ + int WEAPON; + + RandomMace() + { + WEAPON = 5; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/random_mage.as b/scripts/angelscript/furion/dragoons/random_mage.as new file mode 100644 index 00000000..cbab0b3f --- /dev/null +++ b/scripts/angelscript/furion/dragoons/random_mage.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class RandomMage : CGameScript +{ + int WEAPON; + + RandomMage() + { + WEAPON = 6; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/random_random.as b/scripts/angelscript/furion/dragoons/random_random.as new file mode 100644 index 00000000..89cb54fc --- /dev/null +++ b/scripts/angelscript/furion/dragoons/random_random.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class RandomRandom : CGameScript +{ +} + +} diff --git a/scripts/angelscript/furion/dragoons/random_random_nm.as b/scripts/angelscript/furion/dragoons/random_random_nm.as new file mode 100644 index 00000000..b68fb15a --- /dev/null +++ b/scripts/angelscript/furion/dragoons/random_random_nm.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class RandomRandomNm : CGameScript +{ + int WEAPON; + + RandomRandomNm() + { + WEAPON = RandomInt(0, 5); + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/random_sword.as b/scripts/angelscript/furion/dragoons/random_sword.as new file mode 100644 index 00000000..1d446aa1 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/random_sword.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class RandomSword : CGameScript +{ + int WEAPON; + + RandomSword() + { + WEAPON = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/random_unarmed.as b/scripts/angelscript/furion/dragoons/random_unarmed.as new file mode 100644 index 00000000..082643c5 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/random_unarmed.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class RandomUnarmed : CGameScript +{ + int WEAPON; + + RandomUnarmed() + { + WEAPON = 2; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/zap_archer.as b/scripts/angelscript/furion/dragoons/zap_archer.as new file mode 100644 index 00000000..23a2fe82 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/zap_archer.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class ZapArcher : CGameScript +{ + int ELEMENT; + int WEAPON; + + ZapArcher() + { + WEAPON = 0; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/zap_axe.as b/scripts/angelscript/furion/dragoons/zap_axe.as new file mode 100644 index 00000000..ebd3ab7b --- /dev/null +++ b/scripts/angelscript/furion/dragoons/zap_axe.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class ZapAxe : CGameScript +{ + int ELEMENT; + int WEAPON; + + ZapAxe() + { + WEAPON = 4; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/zap_mace.as b/scripts/angelscript/furion/dragoons/zap_mace.as new file mode 100644 index 00000000..a5fec4de --- /dev/null +++ b/scripts/angelscript/furion/dragoons/zap_mace.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class ZapMace : CGameScript +{ + int ELEMENT; + int WEAPON; + + ZapMace() + { + WEAPON = 5; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/zap_mage.as b/scripts/angelscript/furion/dragoons/zap_mage.as new file mode 100644 index 00000000..dc2d26f7 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/zap_mage.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class ZapMage : CGameScript +{ + int ELEMENT; + int WEAPON; + + ZapMage() + { + WEAPON = 6; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/zap_random.as b/scripts/angelscript/furion/dragoons/zap_random.as new file mode 100644 index 00000000..34208c15 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/zap_random.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class ZapRandom : CGameScript +{ + int ELEMENT; + + ZapRandom() + { + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/zap_random_nm.as b/scripts/angelscript/furion/dragoons/zap_random_nm.as new file mode 100644 index 00000000..604e7cbf --- /dev/null +++ b/scripts/angelscript/furion/dragoons/zap_random_nm.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class ZapRandomNm : CGameScript +{ + int ELEMENT; + int WEAPON; + + ZapRandomNm() + { + WEAPON = RandomInt(0, 5); + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/zap_sword.as b/scripts/angelscript/furion/dragoons/zap_sword.as new file mode 100644 index 00000000..40d721a2 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/zap_sword.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class ZapSword : CGameScript +{ + int ELEMENT; + int WEAPON; + + ZapSword() + { + WEAPON = 3; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/furion/dragoons/zap_unarmed.as b/scripts/angelscript/furion/dragoons/zap_unarmed.as new file mode 100644 index 00000000..f17b7f67 --- /dev/null +++ b/scripts/angelscript/furion/dragoons/zap_unarmed.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "furion/dragoons/dragoon.as" + +namespace MS +{ + +class ZapUnarmed : CGameScript +{ + int ELEMENT; + int WEAPON; + + ZapUnarmed() + { + WEAPON = 2; + ELEMENT = 3; + } + +} + +} diff --git a/scripts/angelscript/game_master.as b/scripts/angelscript/game_master.as new file mode 100644 index 00000000..fbb4988c --- /dev/null +++ b/scripts/angelscript/game_master.as @@ -0,0 +1,2170 @@ +#pragma context server + +#include "test_scripts/game_master.as" +#include "developer/game_master.as" +#include "$currentmap_game_master.as" +#include "game_master/dmgpoints.as" +#include "game_master/map_transitions.as" +#include "game_master/vote_generic.as" +#include "dq/externals/dq_game_master.as" + +namespace MS +{ + +class GameMaster : CGameScript +{ + string BAGS_PER_PLAYER; + int BAG_COUNT; + string BY_ID; + string CNPCA_PAR1; + string CNPCA_PAR2; + string CNPCA_PAR3; + string CNPCA_PAR4; + string CNPCA_PAR5; + string CNPCA_PAR6; + string CNPCA_PAR7; + string CNPCA_PAR8; + string CNPCB_PAR1; + string CNPCB_PAR2; + string CNPCB_PAR3; + string CNPCB_PAR4; + string CNPCB_PAR5; + string CNPCB_PAR6; + string CNPCB_PAR7; + string CNPCB_PAR8; + string CNPCC_PAR1; + string CNPCC_PAR2; + string CNPCC_PAR3; + string CNPCC_PAR4; + string CNPCC_PAR5; + string CNPCC_PAR6; + string CNPCC_PAR7; + string CNPCC_PAR8; + string CNPCD_PAR1; + string CNPCD_PAR2; + string CNPCD_PAR3; + string CNPCD_PAR4; + string CNPCD_PAR5; + string CNPCD_PAR6; + string CNPCD_PAR7; + string CNPCD_PAR8; + int CONST_SPAWNS_PER_SET; + string DEMON_RAGE_USERS; + string DEMON_RAGE_USES; + string DEV_ID; + string DEV_PLAYER; + string FD_LOOP_AMT; + string FD_LOOP_TARG; + int FORGET_SPELL; + string F_DIST; + int GM_APRIL_CHECKING; + int GM_APRIL_INVALIDATED; + string GM_APRIL_SPAWN_POINT; + string GM_BTROLLS_DEAD; + int GM_DEL_QUE_ACTIVE; + string GM_DISABLE_SPAWNS; + int GM_HAD_PLAYER; + string GM_HANDLE_ACTIVATES; + string GM_HP_TOKENS; + string GM_ITEM_NAME; + string GM_ITEM_ORIGIN; + string GM_ITEM_RESERVE; + string GM_ITEM_TARGET; + string GM_ITEM_TO_GIVE; + string GM_LIGHT_PLAYER; + string GM_MALDORA_LIST; + string GM_NEW_WEATHER; + string GM_N_EPICS; + int GM_RACE_ACTIVATE; + string GM_SCRAMBLE_COUNT; + string GM_SPAWN_POINT; + string GM_SXBOW_RECIEVE; + int GM_TEMP_COUNT; + string GM_TOTAL_HP; + int GM_TOTAL_TRIGGERED; + string GM_TRIGGER_PREFIX; + int GM_TRIG_ACTIVATE; + int GM_TRIG_HP_REQ; + int GM_TRIG_RACE_REQ; + string GM_TRIG_TARGET; + string GM_TRIG_TOKENS; + int GM_VANISH_QUE_ACTIVE; + string GOLD_AMT; + string GOLD_POS; + string HOLLOW_ONE_POS; + string ITEM_NAME; + string ITEM_POS; + int LIGHTSYS_N_LIGHTS; + string MAGIC_HAND_NAMES1; + string MAGIC_HAND_NAMES2; + string MAGIC_HAND_NAMES3; + string MAGIC_HAND_SCRIPTS1; + string MAGIC_HAND_SCRIPTS2; + string MAGIC_HAND_SCRIPTS3; + int MAKING_ITEM; + string MALDORA_LIST; + string MENU_TARGET; + int NO_ADMINS_FOUND; + string NPC_DIED; + string NUM_BAGS; + int N_MALDORAS; + int PLAYING_DEAD; + string PLR_FOUND_FIRST_STICK; + string POTION_ID; + string QITEM_CALLER; + string QITEM_NAME; + int ROT_STEP; + int ROT_STEP_SIZE; + string SHAD_TELEPOINTS; + string SHAD_TRIGGERS; + string SORC_CUR_TELE_SET; + string SORC_TELE_SET1; + string SORC_TELE_SET2; + string SORC_TELE_SET3; + string SORC_TELE_SETS; + string SPAWN_POINTS1; + string SPAWN_POINTS2; + string SPAWN_POINTS3; + string SPAWN_POINTS4; + string SPAWN_POINTS5; + string SPAWN_POINTS6; + string SPAWN_POINTS7; + string SPAWN_POINTS8; + string SPAWN_POINTS9; + string SPAWN_TIME; + string SPELL_CASTER; + int SPELL_ERASE; + int SPELL_ERASE_CONFIRM; + string SPELL_NAME; + string SPELL_TO_FORGET_IDX; + int TRIGGER_COUNT; + string VOTE_WINNAR_COUNT; + string VOTE_WINNAR_IDX; + string WIZARD_CENTER; + int WORM_COUNT; + string WORM_GOLD; + string WORM_ID; + string WORM_ITEM; + + GameMaster() + { + MAGIC_HAND_SCRIPTS1 = "magic_hand_acid_bolt;magic_hand_blizzard;magic_hand_div_glow;magic_hand_div_rejuvenate;magic_hand_fire_ball;magic_hand_fire_dart;magic_hand_fire_wall;magic_hand_frost_bolt;magic_hand_healing_circle;magic_hand_ice_blast;magic_hand_ice_shield;magic_hand_healing_wave;"; + MAGIC_HAND_SCRIPTS2 = "magic_hand_ice_shield_lesser;magic_hand_ice_wall;magic_hand_lightning_chain;magic_hand_lightning_storm;magic_hand_lightning_weak;magic_hand_poison;magic_hand_poison_cloud;magic_hand_summon_fangtooth;magic_hand_summon_guard;magic_hand_summon_rat;"; + MAGIC_HAND_SCRIPTS3 = "magic_hand_summon_undead;magic_hand_turn_undead;magic_hand_volcano;"; + MAGIC_HAND_NAMES1 = "Acidic Bolt;Blizzard;Glow;Rejuvenate;Fire Ball;Fire Dart;Fire Wall;Frost Bolt;Healing Circle;Ice Blast;Ice Shield;Healing Wave;"; + MAGIC_HAND_NAMES2 = "Lesser Ice Shield;Ice Wall;Chain Lighting;Lightning Storm;Erratic Lightning;Poison Dart;Poison Cloud;Summon Fangtooth;Summon Guardian;Summon Rat;"; + MAGIC_HAND_NAMES3 = "Summon Undead;Rebuke Undead;Volcano;"; + CONST_SPAWNS_PER_SET = 8; + N_MALDORAS = 0; + MALDORA_LIST = ""; + DEMON_RAGE_USERS = ""; + DEMON_RAGE_USES = ""; + LIGHTSYS_N_LIGHTS = 16; + array ARRAY_LIGHT_OWNERLIST; + array ARRAY_LIGHT_COLOR; + array ARRAY_LIGHT_RAD; + for (int i = 0; i < LIGHTSYS_N_LIGHTS; i++) + { + init_lights(); + } + } + + void init_lights() + { + ARRAY_LIGHT_OWNERLIST.insertLast(i); + ARRAY_LIGHT_COLOR.insertLast(-1); + ARRAY_LIGHT_RAD.insertLast(-1); + } + + void OnSpawn() override + { + SetName("The Game Master"); + SetHealth(1); + SetInvisible(true); + SetInvincible(true); + SetBlind(true); + SetRace("hated"); + SetWidth(32); + SetHeight(32); + SetGravity(0); + SetSayTextRange(64000); + if (!(true)) return; + LogDebug("***************** Game_Master - Spawned"); + ServerCommand("echo Game Master Spawned"); + PLAYING_DEAD = 1; + SetGlobalVar("GAME_MASTER", GetEntityIndex(GetOwner())); + G_NGAME_MASTERS += 1; + if (G_NGAME_MASTERS > 1) + { + LogError("Multiple Game Masters! " + GetEntityName("ent_creationowner")); + } + SetName("game_master"); + TRIGGER_COUNT = 0; + SPAWN_TIME = "game.time.since.minutes"; + if ((GetCvar("ms_chatlog"))) + { + // TODO: chatlog + // TODO: chatlog == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == + // TODO: chatlog Server Init at: [ GetTimestamp() ] on StringToLower(GetMapName()) + // TODO: chatlog == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == + } + DEV_PLAYER = ""; + if (("game.central")) + { + if ((GetCvar("ms_dev_mode"))) + { + } + LogError("ms_dev_mode not allowed on [FN]."); + } + set_time(12, 1); + ScheduleDelayedEvent(0.1, "setup_gm"); + ScheduleDelayedEvent(1.0, "gm_setup_weather"); + ScheduleDelayedEvent(60.0, "time_sync_check"); + } + + void time_sync_check() + { + GM_SCRAMBLE_COUNT += 1; + if (GM_SCRAMBLE_COUNT > RandomInt(2, 5)) + { + GM_SCRAMBLE_COUNT = 0; + gm_scramble_treasure(); + } + ScheduleDelayedEvent(60.0, "time_sync_check"); + G_MAP_UPTIME += 1; + string CUR_TIC_TIME = G_MAP_UPTIME; + CUR_TIC_TIME += SPAWN_TIME; + CUR_TIC_TIME -= "game.time.since.minutes"; + } + + void send_damage() + { + DoDamage(param1, param2, param3, param4, param5); + } + + void gold_spew() + { + GOLD_AMT = param1; + BAGS_PER_PLAYER = param2; + F_DIST = param3; + string MIN_BAGS = param4; + string MAX_BAGS = param5; + GOLD_POS = param6; + if (MIN_BAGS == "PARAM4") + { + int MIN_BAGS = 1; + } + if (MAX_BAGS == "PARAM5") + { + int MAX_BAGS = 99; + } + if (F_DIST == "PARAM3") + { + F_DIST = 100; + } + NUM_BAGS = "game.playersnb"; + NUM_BAGS *= BAGS_PER_PLAYER; + if (NUM_BAGS < MIN_BAGS) + { + NUM_BAGS = MIN_BAGS; + } + if (NUM_BAGS > MAX_BAGS) + { + NUM_BAGS = MAX_BAGS; + } + ROT_STEP_SIZE = 359; + ROT_STEP_SIZE /= NUM_BAGS; + ROT_STEP = 0; + BAG_COUNT = 0; + LogDebug("gm_gold_spew PARAM1 PARAM2 PARAM3 PARAM4 PARAM5 Gld GOLD_AMT BgsPP BAGS_PER_PLAYER dst F_DIST minbags MIN_BAGS mxbags MAX_BAGS"); + ScheduleDelayedEvent(1.25, "gold_spew_loop"); + } + + void gold_spew_loop() + { + BAG_COUNT += 1; + string T_SPAWN = GOLD_POS; + T_SPAWN += /* TODO: $relpos */ $relpos(Vector3(0, ROT_STEP, 0), Vector3(0, F_DIST, 40)); + make_bag(T_SPAWN, GOLD_AMT); + LogDebug("bag # BAG_COUNT of NUM_BAGS @ T_SPAWN amt GOLD_AMT"); + ROT_STEP += ROT_STEP_SIZE; + if (BAG_COUNT < NUM_BAGS) + { + ScheduleDelayedEvent(0.5, "gold_spew_loop"); + } + } + + void make_bag() + { + string INC_TSPAWN = param1; + string INC_GOLDAMT = param2; + SpawnNPC("chests/bag_o_gold_base", INC_TSPAWN, ScriptMode::Legacy); // params: INC_GOLDAMT + } + + void gm_createnpc() + { + CNPCA_PAR1 = param2; + CNPCA_PAR2 = param3; + CNPCA_PAR3 = param4; + CNPCA_PAR4 = param5; + CNPCA_PAR5 = param6; + CNPCA_PAR6 = param7; + CNPCA_PAR7 = param8; + CNPCA_PAR8 = param9; + PARAM1("gm_createnpc_delayed"); + } + + void gm_createnpc_delayed() + { + SpawnNPC(CNPCA_PAR1, CNPCA_PAR2, ScriptMode::Legacy); // params: CNPCA_PAR3, CNPCA_PAR4, CNPCA_PAR5, CNPCA_PAR6, CNPCA_PAR7, CNPCA_PAR8 + } + + void gm_createnpc2() + { + CNPCB_PAR1 = param2; + CNPCB_PAR2 = param3; + CNPCB_PAR3 = param4; + CNPCB_PAR4 = param5; + CNPCB_PAR5 = param6; + CNPCB_PAR6 = param7; + CNPCB_PAR7 = param8; + CNPCB_PAR8 = param9; + PARAM1("gm_createnpc_delayed2"); + } + + void gm_createnpc_delayed2() + { + SpawnNPC(CNPCB_PAR1, CNPCB_PAR2, ScriptMode::Legacy); // params: CNPCB_PAR3, CNPCB_PAR4, CNPCB_PAR5, CNPCB_PAR6, CNPCB_PAR7, CNPCB_PAR8 + } + + void gm_createnpc3() + { + CNPCC_PAR1 = param2; + CNPCC_PAR2 = param3; + CNPCC_PAR3 = param4; + CNPCC_PAR4 = param5; + CNPCC_PAR5 = param6; + CNPCC_PAR6 = param7; + CNPCC_PAR7 = param8; + CNPCC_PAR8 = param9; + PARAM1("gm_createnpc_delayed3"); + } + + void gm_createnpc_delayed3() + { + SpawnNPC(CNPCC_PAR1, CNPCC_PAR2, ScriptMode::Legacy); // params: CNPCC_PAR3, CNPCC_PAR4, CNPCC_PAR5, CNPCC_PAR6, CNPCC_PAR7, CNPCC_PAR8 + } + + void gm_createnpc4() + { + CNPCD_PAR1 = param2; + CNPCD_PAR2 = param3; + CNPCD_PAR3 = param4; + CNPCD_PAR4 = param5; + CNPCD_PAR5 = param6; + CNPCD_PAR6 = param7; + CNPCD_PAR7 = param8; + CNPCD_PAR8 = param9; + PARAM1("gm_createnpc_delayed4"); + } + + void gm_createnpc_delayed4() + { + SpawnNPC(CNPCD_PAR1, CNPCD_PAR2, ScriptMode::Legacy); // params: CNPCD_PAR3, CNPCD_PAR4, CNPCD_PAR5, CNPCD_PAR6, CNPCD_PAR7, CNPCD_PAR8 + } + + void gm_fade() + { + LogDebug("gm_fade PARAM1 PARAM2 PARAM3"); + if ((param2).findFirst(PARAM) == 0) + { + int REND_MODE = 5; + } + else + { + string REND_MODE = param2; + } + if (((FD_LOOP_TARG !is null))) + { + SetProp(FD_LOOP_TARG, "renderamt", 0); + } + if ((param3).findFirst(PARAM) == 0) + { + FD_LOOP_AMT = 255; + } + else + { + FD_LOOP_AMT = param3; + } + FD_LOOP_TARG = param1; + SetProp(FD_LOOP_TARG, "rendermode", REND_MODE); + gm_fade_loop(); + } + + void gm_fade_loop() + { + FD_LOOP_AMT -= 5; + if (FD_LOOP_AMT >= 0) + { + SetProp(FD_LOOP_TARG, "renderamt", FD_LOOP_AMT); + } + if (!(FD_LOOP_AMT > 0)) return; + ScheduleDelayedEvent(0.1, "gm_fade_loop"); + } + + void gm_say() + { + SendInfoMsg("all", "The Game Master Says... " + param1); + } + + void gm_fade_in() + { + if (((FD_LOOP_TARG !is null))) + { + SetProp(FD_LOOP_TARG, "renderamt", 255); + } + FD_LOOP_AMT = 0; + FD_LOOP_TARG = param1; + SetProp(FD_LOOP_TARG, "rendermode", param2); + gm_fade_in_loop(); + } + + void gm_fade_in_loop() + { + FD_LOOP_AMT += 5; + if (FD_LOOP_AMT <= 255) + { + SetProp(FD_LOOP_TARG, "renderamt", FD_LOOP_AMT); + ScheduleDelayedEvent(0.1, "gm_fade_in_loop"); + } + if (FD_LOOP_AMT >= 255) + { + CallExternal(FD_LOOP_TARG, "fade_in_done"); + } + } + + void gm_worm_gold() + { + WORM_ID = GetEntityIndex(param1); + WORM_GOLD = "game.playersnb"; + WORM_GOLD *= 2; + WORM_COUNT = 0; + WORM_ITEM = param2; + ScheduleDelayedEvent(1.0, "gm_worm_gold_loop"); + } + + void gm_worm_gold_loop() + { + if (!(WORM_COUNT < WORM_GOLD)) return; + WORM_COUNT += 1; + SpawnNPC(WORM_ITEM, GetEntityOrigin(WORM_ID), ScriptMode::Legacy); + ScheduleDelayedEvent(0.5, "gm_worm_gold_loop"); + } + + void worldevent_time() + { + string TIME_HOUR = param1; + string TIME_STRING = "mstime_"; + TIME_STRING += TIME_HOUR; + UseTrigger(TIME_STRING); + gm_setup_weather(); + } + + void gm_set_weather() + { + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + game_set_weather(OUT_PAR1, OUT_PAR2); + } + + void game_set_weather() + { + if (param2 == 1) + { + SetGlobalVar("G_WEATHER_LOCK", param1); + } + else + { + SetGlobalVar("G_WEATHER_LOCK", 0); + } + string OUT_WEATHER = param1; + gm_start_weather(OUT_WEATHER); + } + + void gm_setup_weather() + { + if (G_WEATHER_LOCK == "G_WEATHER_LOCK") + { + SetGlobalVar("G_WEATHER_LOCK", 0); + } + if (G_WEATHER_LOCK != 0) + { + SetGlobalVar("G_CURRENT_WEATHER", G_WEATHER_LOCK); + LogDebug("gm_setup_weather sending lock G_WEATHER_LOCK"); + CallExternal("players", "ext_weather_change", G_WEATHER_LOCK); + } + if ((G_CHRISTMAS_MODE)) + { + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "edana") + { + int XMASS_WEATHER = 1; + } + if (L_MAP_NAME == "deralia") + { + int XMASS_WEATHER = 1; + } + if (L_MAP_NAME == "helena") + { + int XMASS_WEATHER = 1; + } + if ((XMASS_WEATHER)) + { + SetGlobalVar("global.map.weather", "snow;snow;snow"); + } + } + if (!(G_WEATHER_LOCK == 0)) return; + if (!(TIME_HOUR != 6)) return; + if (!(TIME_HOUR != 17)) return; + if (!(TIME_HOUR != 20)) return; + string N_WEATHER_TYPES = GetTokenCount("global.map.weather", ";"); + N_WEATHER_TYPES -= 1; + int RND_WEATHER = RandomInt(0, N_WEATHER_TYPES); + SetGlobalVar("G_CURRENT_WEATHER", GetToken("global.map.weather", RND_WEATHER, ";")); + LogDebug("worldevent_time G_CURRENT_WEATHER RND_WEATHER of global.map.weather [ GetToken("global.map.weather", RND_WEATHER, ";") ]"); + gm_start_weather(G_CURRENT_WEATHER); + } + + void gm_crit_npc_died() + { + NPC_DIED = param1; + BY_ID = param2; + string N_NPCS = GetTokenCount(G_CRITICAL_NPCS, ";"); + for (int i = 0; i < N_NPCS; i++) + { + remove_crit_npc(); + } + ScheduleDelayedEvent(0.1, "crit_count_remaining"); + } + + void remove_crit_npc() + { + string CUR_NPC = GetToken(G_CRITICAL_NPCS, i, ";"); + if (CUR_NPC == NPC_DIED) + { + RemoveToken(G_CRITICAL_NPCS, i, ";"); + } + } + + void crit_count_remaining() + { + string N_NPCS = GetTokenCount(G_CRITICAL_NPCS, ";"); + int N_NPCS = int(N_NPCS); + if (N_NPCS >= 0) + { + if (N_NPCS > 1) + { + N_NPCS += " Critical NPC's Remain!"; + } + if (N_NPCS == 1) + { + string N_NPCS = "Only One Critical NPC Remains!"; + } + if (N_NPCS == 0) + { + string N_NPCS = "All Critical NPC's slain!"; + } + string MSG_REASON = " "; + if ((IsValidPlayer(BY_ID))) + { + string MSG_REASON = GetEntityName(NPC_DIED); + MSG_REASON += " WAS SLAIN BY FRIELDY FIRE! ( "; + MSG_REASON += GetEntityName(BY_ID); + MSG_REASON += " )!"; + } + SendInfoMsg("all", N_NPCS + MSG_REASON); + } + } + + void gm_find_highest() + { + string CUR_VOTE_IDX = i; + string CUR_VOTE_COUNT = GetToken(VOTE_TALLY, CUR_VOTE_IDX, ";"); + if (VOTE_WINNAR_COUNT < CUR_VOTE_COUNT) + { + VOTE_WINNAR_IDX = CUR_VOTE_IDX; + VOTE_WINNAR_COUNT = CUR_VOTE_COUNT; + } + } + + void gm_dodamage() + { + float TIME_DIFF = GetGameTime(); + TIME_DIFF -= LAST_GM_DAMAGE; + if (TIME_DIFF > 0.1) + { + if (param2 == "direct") + { + DoDamage(param1, param2, param3, param4, param5); + } + if (param6 == "reflective") + { + DoDamage(param1, param2, param3, param4, param5); + } + } + } + + void game_monsterspawn_removed() + { + LogDebug("game_monsterspawn_removed PARAM1"); + string SPAWN_ID = param1; + CallExternal("all", "ext_monsterspawn_removed", SPAWN_ID); + } + + void OnScriptSay(const string &in text) override + { + if ((G_DEVELOPER_MODE)) + { + LogMessage(param1 + "You said [ " + param2 + "] " + param3); + } + if (!(GetCvar("ms_chatlog"))) return; + string WRITE_LOG = GetTimestamp(); + WRITE_LOG += " ["; + WRITE_LOG += GetPlayerAuthId(param1); + WRITE_LOG += "] "; + WRITE_LOG += GetEntityName(param1); + WRITE_LOG += "("; + WRITE_LOG += param2; + WRITE_LOG += "): "; + WRITE_LOG += param3; + // TODO: chatlog WRITE_LOG + } + + void player_left() + { + if ((GetCvar("ms_chatlog"))) + { + // TODO: chatlog GetTimestamp() PLAYER_LEFT: GetEntityName(param1) [ GetPlayerAuthId(param1) ] [ PlayerCountNow: game.players [ game.playersnb active ] ] + } + } + + void delay_changelevel() + { + ServerCommand("changelevel " + DEST_MAP); + } + + void gm_setname() + { + SetName(param1); + } + + void forget_spell() + { + FORGET_SPELL = 1; + SendColoredMessage(param1, "Please select a spell you would like to erase from memory."); + SendInfoMsg(param1, "Potion of Forgetfulness Please select a spell you would like to erase from memory."); + SPELL_ERASE = 1; + MENU_TARGET = param1; + POTION_ID = param2; + SetName("Potion of Forgetfulness"); + ScheduleDelayedEvent(0.1, "send_menu"); + } + + void game_menu_getoptions() + { + if ((SPELL_ERASE)) + { + SPELL_CASTER = param1; + for (int i = 0; i < 7; i++) + { + add_spell_callbacks(); + } + SPELL_ERASE = 0; + int EXIT_SUB = 1; + } + } + + void add_spell_callbacks() + { + string CUR_IDX = i; + string SPELL_SCRIPT = GetEntityProperty(SPELL_CASTER, "spellname"); + int SPELL_IDX = 0; + int CHECK_SET1 = -1; + int CHECK_SET2 = -1; + int CHECK_SET3 = -1; + string CHECK_SET1 = FindToken(MAGIC_HAND_SCRIPTS1, SPELL_SCRIPT, ";"); + if (CHECK_SET1 > -1) + { + string L_SPELL_NAME = GetToken(MAGIC_HAND_NAMES1, CHECK_SET1, ";"); + if ((G_DEVELOPER_MODE)) + { + int SPELL_IDX = 1; + } + } + string CHECK_SET2 = FindToken(MAGIC_HAND_SCRIPTS2, SPELL_SCRIPT, ";"); + if (CHECK_SET2 > -1) + { + if (CHECK_SET1 == -1) + { + } + string L_SPELL_NAME = GetToken(MAGIC_HAND_NAMES2, CHECK_SET2, ";"); + if ((G_DEVELOPER_MODE)) + { + int SPELL_IDX = 2; + } + } + string CHECK_SET3 = FindToken(MAGIC_HAND_SCRIPTS3, SPELL_SCRIPT, ";"); + if (CHECK_SET3 > -1) + { + if (CHECK_SET1 == -1) + { + } + if (CHECK_SET2 == -1) + { + } + string L_SPELL_NAME = GetToken(MAGIC_HAND_NAMES3, CHECK_SET3, ";"); + if ((G_DEVELOPER_MODE)) + { + int SPELL_IDX = 3; + } + } + if (L_SPELL_NAME == "L_SPELL_NAME") + { + string L_SPELL_NAME = SPELL_SCRIPT; + if ((G_DEVELOPER_MODE)) + { + LogMessage(SPELL_CASTER + "was not found , using " + L_SPELL_NAME); + } + } + if ((G_DEVELOPER_MODE)) + { + LogMessage(SPELL_CASTER + SPELL_SCRIPT + "is " + L_SPELL_NAME + " CHECK_SET1 CHECK_SET2 CHECK_SET3"); + } + string reg.mitem.title = L_SPELL_NAME; + string reg.mitem.type = "callback"; + string reg.mitem.data = CUR_IDX; + string reg.mitem.callback = "confirm_forget_spell"; + if (reg.mitem.title != 0) + { + } + } + + void confirm_forget_spell() + { + string SPELL_SCRIPT = GetEntityProperty(param1, "spellname"); + int CHECK_SET1 = -1; + int CHECK_SET2 = -1; + int CHECK_SET3 = -1; + string CHECK_SET1 = FindToken(MAGIC_HAND_SCRIPTS1, SPELL_SCRIPT, ";"); + if (CHECK_SET1 > -1) + { + string L_SPELL_NAME = GetToken(MAGIC_HAND_NAMES1, CHECK_SET1, ";"); + } + string CHECK_SET2 = FindToken(MAGIC_HAND_SCRIPTS2, SPELL_SCRIPT, ";"); + if (CHECK_SET2 > -1) + { + if (CHECK_SET1 == -1) + { + } + string L_SPELL_NAME = GetToken(MAGIC_HAND_NAMES2, CHECK_SET2, ";"); + } + string CHECK_SET3 = FindToken(MAGIC_HAND_SCRIPTS3, SPELL_SCRIPT, ";"); + if (CHECK_SET3 > -1) + { + if (CHECK_SET2 == -1) + { + } + string L_SPELL_NAME = GetToken(MAGIC_HAND_NAMES3, CHECK_SET3, ";"); + } + if (L_SPELL_NAME == "L_SPELL_NAME") + { + string L_SPELL_NAME = SPELL_SCRIPT; + } + SPELL_NAME = L_SPELL_NAME; + SPELL_TO_FORGET_IDX = param2; + SPELL_ERASE_CONFIRM = 1; + SPELL_ERASE = 0; + MENU_TARGET = param1; + erase_spell(MENU_TARGET); + } + + void game_menu_cancel() + { + if (!(FORGET_SPELL)) return; + SPELL_ERASE_CONFIRM = 0; + SPELL_ERASE = 0; + FORGET_SPELL = 0; + Effect("screenfade", MENU_TARGET, 0.1, 3, Vector3(10, 10, 10), 255, "fadeout"); + } + + void send_menu() + { + OpenMenu(MENU_TARGET); + } + + void erase_spell() + { + // TODO: wipespell PARAM1 SPELL_TO_FORGET_IDX + string OUT_MSG = "You "; + OUT_MSG = "have" + "forgotten" + "the" + "spell" + SPELL_NAME; + SendColoredMessage(MENU_TARGET, OUT_MSG); + SendInfoMsg(MENU_TARGET, "Potion of Forgetfulness " + OUT_MSG); + SPELL_ERASE_CONFIRM = 0; + SPELL_ERASE = 0; + FORGET_SPELL = 0; + Effect("screenfade", MENU_TARGET, 0.1, 3, Vector3(10, 10, 10), 255, "fadeout"); + } + + void gm_count_down() + { + if (!(GM_COUNT_DOWN_TO >= 0)) return; + if (GM_COUNT_DOWN_TO <= 10) + { + int WAVE_STEP = 10; + WAVE_STEP -= GM_COUNT_DOWN_TO; + SendInfoMessageToAll("green " + int(GM_COUNT_DOWN_TO) + GM_COUNT_MESSAGE); + } + if (GM_COUNT_DOWN_TO > 10) + { + string DIV_TEN = GM_COUNT_DOWN; + DIV_TEN /= 10; + if (DIV_TEN == int(GM_COUNT_DOWN)) + { + SendInfoMessageToAll("green " + int(GM_COUNT_DOWN_TO) + GM_COUNT_MESSAGE); + } + } + if (GM_COUNT_DOWN_TO == 0) + { + GM_COUNT_DOWN_EVENT(); + } + if (!(GM_COUNT_DOWN_TO > 0)) return; + GM_COUNT_DOWN_TO -= 1; + ScheduleDelayedEvent(1.0, "gm_count_down"); + } + + void set_spawn_point() + { + string SPAWNS_PER_SET = CONST_SPAWNS_PER_SET; + string NEXT_SPAWN_SET = CONST_SPAWNS_PER_SET; + if (N_SPAWN_POINTS == 0) + { + SPAWN_POINTS1 = ""; + SPAWN_POINTS2 = ""; + SPAWN_POINTS3 = ""; + SPAWN_POINTS4 = ""; + SPAWN_POINTS5 = ""; + SPAWN_POINTS6 = ""; + SPAWN_POINTS7 = ""; + SPAWN_POINTS8 = ""; + SPAWN_POINTS9 = ""; + } + // TODO: chatlog DEV: Adding spawn point # N_SPAWN_POINTS @ PARAM1 + if (N_SPAWN_POINTS <= SPAWNS_PER_SET) + { + if (N_SPAWN_POINTS <= NEXT_SPAWN_SET) + { + } + if (SPAWN_POINTS1.length() > 0) SPAWN_POINTS1 += ";"; + SPAWN_POINTS1 += param1; + } + NEXT_SPAWN_SET += CONST_SPAWNS_PER_SET; + if (N_SPAWN_POINTS > SPAWNS_PER_SET) + { + if (N_SPAWN_POINTS <= NEXT_SPAWN_SET) + { + } + if (SPAWN_POINTS2.length() > 0) SPAWN_POINTS2 += ";"; + SPAWN_POINTS2 += param1; + } + SPAWNS_PER_SET += CONST_SPAWNS_PER_SET; + NEXT_SPAWN_SET += CONST_SPAWNS_PER_SET; + if (N_SPAWN_POINTS > SPAWNS_PER_SET) + { + if (N_SPAWN_POINTS <= NEXT_SPAWN_SET) + { + } + if (SPAWN_POINTS3.length() > 0) SPAWN_POINTS3 += ";"; + SPAWN_POINTS3 += param1; + } + SPAWNS_PER_SET += CONST_SPAWNS_PER_SET; + NEXT_SPAWN_SET += CONST_SPAWNS_PER_SET; + if (N_SPAWN_POINTS > SPAWNS_PER_SET) + { + if (N_SPAWN_POINTS <= NEXT_SPAWN_SET) + { + } + if (SPAWN_POINTS4.length() > 0) SPAWN_POINTS4 += ";"; + SPAWN_POINTS4 += param1; + } + SPAWNS_PER_SET += CONST_SPAWNS_PER_SET; + NEXT_SPAWN_SET += CONST_SPAWNS_PER_SET; + if (N_SPAWN_POINTS > SPAWNS_PER_SET) + { + if (N_SPAWN_POINTS <= NEXT_SPAWN_SET) + { + } + if (SPAWN_POINTS5.length() > 0) SPAWN_POINTS5 += ";"; + SPAWN_POINTS5 += param1; + } + SPAWNS_PER_SET += CONST_SPAWNS_PER_SET; + NEXT_SPAWN_SET += CONST_SPAWNS_PER_SET; + if (N_SPAWN_POINTS > SPAWNS_PER_SET) + { + if (N_SPAWN_POINTS <= NEXT_SPAWN_SET) + { + } + if (SPAWN_POINTS6.length() > 0) SPAWN_POINTS6 += ";"; + SPAWN_POINTS6 += param1; + } + SPAWNS_PER_SET += CONST_SPAWNS_PER_SET; + NEXT_SPAWN_SET += CONST_SPAWNS_PER_SET; + if (N_SPAWN_POINTS > SPAWNS_PER_SET) + { + if (N_SPAWN_POINTS <= NEXT_SPAWN_SET) + { + } + if (SPAWN_POINTS7.length() > 0) SPAWN_POINTS7 += ";"; + SPAWN_POINTS7 += param1; + } + SPAWNS_PER_SET += CONST_SPAWNS_PER_SET; + NEXT_SPAWN_SET += CONST_SPAWNS_PER_SET; + if (N_SPAWN_POINTS > SPAWNS_PER_SET) + { + if (N_SPAWN_POINTS <= NEXT_SPAWN_SET) + { + } + if (SPAWN_POINTS8.length() > 0) SPAWN_POINTS8 += ";"; + SPAWN_POINTS8 += param1; + } + SPAWNS_PER_SET += CONST_SPAWNS_PER_SET; + NEXT_SPAWN_SET += CONST_SPAWNS_PER_SET; + if (N_SPAWN_POINTS > SPAWNS_PER_SET) + { + if (N_SPAWN_POINTS <= NEXT_SPAWN_SET) + { + } + if (SPAWN_POINTS9.length() > 0) SPAWN_POINTS9 += ";"; + SPAWN_POINTS9 += param1; + } + N_SPAWN_POINTS += 1; + } + + void find_spawn_point() + { + if (!(N_SPAWN_POINTS > 0)) return; + string MINUS_ONE = N_SPAWN_POINTS; + MINUS_ONE -= 1; + int RND_POINT = RandomInt(0, MINUS_ONE); + string O_SPAWN_POINT = RND_POINT; + string RND_POINT_SET_IDX = RND_POINT; + if (RND_POINT > CONST_SPAWNS_PER_SET) + { + RND_POINT_SET_IDX /= CONST_SPAWNS_PER_SET; + int RND_POINT_SET_IDX = int(RND_POINT_SET_IDX); + string MULTI_IDX = RND_POINT_SET_IDX; + MULTI_IDX *= CONST_SPAWNS_PER_SET; + RND_POINT -= MULTI_IDX; + RND_POINT -= 1; + } + else + { + int RND_POINT_SET_IDX = 0; + } + string SPAWNS_PER_SET = CONST_SPAWNS_PER_SET; + if (RND_POINT_SET_IDX == 0) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS1, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 1) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS2, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 2) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS3, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 3) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS4, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 4) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS5, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 5) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS6, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 6) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS7, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 7) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS8, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 8) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS9, RND_POINT, ";"); + } + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green find_spawn_point: " + GM_SPAWN_POINT + " pt# O_SPAWN_POINT - idx# RND_POINT of N_SPAWN_POINTS set RND_POINT_SET_IDX"); + } + CallExternal(param1, "ext_send_tele_point", GM_SPAWN_POINT); + } + + void dev_cat_points() + { + // TODO: chatlog SPAWN_POINTS: N_SPAWN_POINTS + // TODO: chatlog SPAWN_POINTS1 + // TODO: chatlog SPAWN_POINTS2 + // TODO: chatlog SPAWN_POINTS3 + // TODO: chatlog SPAWN_POINTS4 + DEV_ID = param1; + SendInfoMessageToAll("green dev_cat_points to " + GetEntityName(DEV_ID)); + for (int i = 0; i < N_SPAWN_POINTS; i++) + { + dev_cat_point_loop(); + } + } + + void dev_cat_point_loop() + { + string RND_POINT = i; + string O_SPAWN_POINT = RND_POINT; + string RND_POINT_SET_IDX = RND_POINT; + if (RND_POINT > CONST_SPAWNS_PER_SET) + { + RND_POINT_SET_IDX /= CONST_SPAWNS_PER_SET; + int RND_POINT_SET_IDX = int(RND_POINT_SET_IDX); + string MULTI_IDX = RND_POINT_SET_IDX; + MULTI_IDX *= CONST_SPAWNS_PER_SET; + RND_POINT -= MULTI_IDX; + RND_POINT -= 1; + } + else + { + int RND_POINT_SET_IDX = 0; + } + if (RND_POINT_SET_IDX == 0) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS1, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 1) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS2, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 2) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS3, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 3) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS4, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 4) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS5, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 5) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS6, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 6) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS7, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 7) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS8, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 8) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS9, RND_POINT, ";"); + } + LogMessage(DEV_ID + "pt# " + O_SPAWN_POINT + "is idx# " + RND_POINT + "of " + N_SPAWN_POINTS + "set " + RND_POINT_SET_IDX + "= " + GM_SPAWN_POINT); + SendInfoMessageToAll("green pt# " + O_SPAWN_POINT + "is idx# " + RND_POINT + "of " + N_SPAWN_POINTS + "set " + RND_POINT_SET_IDX + "= " + GM_SPAWN_POINT); + } + + void dev_test_spawn() + { + if (!(N_SPAWN_POINTS > 0)) return; + string RND_POINT = param2; + string O_SPAWN_POINT = RND_POINT; + string RND_POINT_SET_IDX = RND_POINT; + if (RND_POINT > CONST_SPAWNS_PER_SET) + { + RND_POINT_SET_IDX /= CONST_SPAWNS_PER_SET; + int RND_POINT_SET_IDX = int(RND_POINT_SET_IDX); + string MULTI_IDX = RND_POINT_SET_IDX; + MULTI_IDX *= CONST_SPAWNS_PER_SET; + RND_POINT -= MULTI_IDX; + RND_POINT -= 1; + } + else + { + int RND_POINT_SET_IDX = 0; + } + string SPAWNS_PER_SET = CONST_SPAWNS_PER_SET; + if (RND_POINT_SET_IDX == 0) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS1, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 1) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS2, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 2) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS3, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 3) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS4, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 4) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS5, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 5) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS6, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 6) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS7, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 7) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS8, RND_POINT, ";"); + } + if (RND_POINT_SET_IDX == 8) + { + GM_SPAWN_POINT = GetToken(SPAWN_POINTS9, RND_POINT, ";"); + } + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green find_spawn_point: " + GM_SPAWN_POINT + " pt# O_SPAWN_POINT - idx# RND_POINT of N_SPAWN_POINTS set RND_POINT_SET_IDX"); + } + CallExternal(param1, "ext_send_tele_point", GM_SPAWN_POINT); + } + + void gm_add_maldora_fragment() + { + N_MALDORAS += 1; + if (GM_MALDORA_LIST == "GM_MALDORA_LIST") + { + GM_MALDORA_LIST = ""; + } + if (GM_MALDORA_LIST.length() > 0) GM_MALDORA_LIST += ";"; + GM_MALDORA_LIST += param1; + } + + void item_demon_rage() + { + string ITEM_ID = param1; + string USER_ID = GetPlayerAuthId(param2); + string MAX_USES = param3; + string FIND_USER = FindToken(DEMON_RAGE_USERS, USER_ID, ";"); + if (FIND_USER > -1) + { + string CUR_USES = GetToken(DEMON_RAGE_USES, FIND_USER, ";"); + CUR_USES += 1; + SetToken(DEMON_RAGE_USES, FIND_USER, CUR_USES, ";"); + } + else + { + if (DEMON_RAGE_USERS.length() > 0) DEMON_RAGE_USERS += ";"; + DEMON_RAGE_USERS += USER_ID; + if (DEMON_RAGE_USES.length() > 0) DEMON_RAGE_USES += ";"; + DEMON_RAGE_USES += 1; + int CUR_USES = 1; + } + string REM_USES = MAX_USES; + REM_USES -= CUR_USES; + LogDebug("item_demon_rage PARAM1 PARAM2 PARAM3 charges REM_USES / MAX_USES"); + if (CUR_USES > MAX_USES) + { + CallExternal(ITEM_ID, "demon_rage_maxed"); + } + if (CUR_USES <= MAX_USES) + { + CallExternal(ITEM_ID, "demon_rage", REM_USES); + } + } + + void gm_boost() + { + AddVelocity(param1, param2); + } + + void setup_gm() + { + SetGlobalVar("G_MAP_ADDPARAMS", 0); + if (("game.map.addparams").length() > 1) + { + SetGlobalVar("G_MAP_ADDPARAMS", "game.map.addparams"); + if ((G_MAP_ADDPARAMS).substr((G_MAP_ADDPARAMS).length() - 1) != ";") + { + G_MAP_ADDPARAMS += ";"; + } + } + LogDebug("setup_gm gotaddparams G_MAP_ADDPARAMS"); + if ((StringToLower(GetMapName())).findFirst("m2_quest") == 0) + { + GM_HANDLE_ACTIVATES = 1; + } + SetGlobalVar("G_ADMIN_LIST", ""); + SetGlobalVar("G_ADMIN_AUTH", ""); + NO_ADMINS_FOUND = 1; + admin_load_list(); + if (!("game.time.month" == 4)) return; + if (!("game.time.day" == 1)) return; + LogDebug("Setup April Fools Mode Delay"); + Random(10_0, 600_0)("gm_april_fools_mode"); + } + + void admin_load_list() + { + string IN_LINE = /* TODO: $get_fileline */ $get_fileline("admins.txt"); + if (!(IN_LINE != "[FILE_NOT_FOUND]")) return; + if (!(IN_LINE != "[EOF]")) return; + string ADMIN_AUTH = "standard_"; + int SKIP_LINE = 0; + LogDebug("reading , admins: IN_LINE"); + if ((IN_LINE).substr(0, 5) != "STEAM") + { + int SKIP_LINE = 1; + } + if (!(SKIP_LINE)) + { + if ((IN_LINE).findFirst("rcon") >= 0) + { + ADMIN_AUTH += "cvar_rcon_"; + } + if ((IN_LINE).findFirst("cvar") >= 0) + { + ADMIN_AUTH += "cvar_"; + } + if ((IN_LINE).findFirst("all") >= 0) + { + string ADMIN_AUTH = "standard_rcon_cvar_"; + } + int ADMIN_ID_START = 0; + string PARSER = " "; + string ADMIN_ID_END = (IN_LINE).findFirst(PARSER); + if (ADMIN_ID_END == -1) + { + string ADMIN_ID_END = (IN_LINE).length(); + } + string ADMIN_ID = (IN_LINE).substr(0, ADMIN_ID_END); + if ((GetCvar("ms_chatlog"))) + { + // TODO: UNCONVERTED: if ( game.cvar.ms_chatlog ) $timestamp(>) Adding_Admin: ADMIN_ID auth ADMIN_AUTH + } + if (G_ADMIN_LIST.length() > 0) G_ADMIN_LIST += ";"; + G_ADMIN_LIST += ADMIN_ID; + if (G_ADMIN_AUTH.length() > 0) G_ADMIN_AUTH += ";"; + G_ADMIN_AUTH += ADMIN_AUTH; + NO_ADMINS_FOUND = 0; + } + ScheduleDelayedEvent(0.1, "admin_load_list"); + } + + void set_wizard_center() + { + WIZARD_CENTER = param1; + } + + void set_shad_tele_point() + { + if (SHAD_TELEPOINTS == "SHAD_TELEPOINTS") + { + SHAD_TELEPOINTS = "1;2;3;4;5;6;7"; + } + if (SHAD_TRIGGERS == "SHAD_TRIGGERS") + { + SHAD_TRIGGERS = "1;2;3;4;5;6;7"; + } + string POINT_INDEX = param2; + POINT_INDEX -= 1; + LogDebug("set_shad_tele_point POINT_INDEX PARAM1 PARAM3"); + SetToken(SHAD_TELEPOINTS, POINT_INDEX, param1, ";"); + SetToken(SHAD_TRIGGERS, POINT_INDEX, param3, ";"); + } + + void give_item_idx() + { + give_item(/* TODO: $get_by_idx */ $get_by_idx(param1, "id"), param2, param3); + } + + void give_item() + { + if ((param3).findFirst(PARAM) == 0) + { + // TODO: offer PARAM1 PARAM2 + } + else + { + // TODO: offer PARAM1 PARAM2 PARAM3 + } + } + + void gm_createitem() + { + if ((MAKING_ITEM)) + { + SendInfoMsg("all", "ERROR Game failed to create an item due to script error."); + } + if ((MAKING_ITEM)) return; + string ITEM_TIME = param1; + ITEM_NAME = param2; + ITEM_POS = param3; + GM_ITEM_RESERVE = param4; + MAKING_ITEM = 1; + ITEM_TIME("gm_createitem2"); + } + + void gm_createitem2() + { + MAKING_ITEM = 0; + SpawnItem(ITEM_NAME, ITEM_POS); + if ((GM_ITEM_RESERVE)) + { + CallExternal(m_hLastCreated, "bitem_reserve_for_strongest"); + } + } + + void gm_hollow_one_died() + { + HOLLOW_ONE_POS = param1; + ClientEvent("update", "all", "const.localplayer.scriptID", "kh_dragon_death", HOLLOW_ONE_POS); + ScheduleDelayedEvent(1.0, "gm_hollow_one_died2"); + } + + void gm_hollow_one_died2() + { + gold_spew(500, 2, 72, 4, 8, HOLLOW_ONE_POS); + } + + void gm_set_sorc_point() + { + if (G_SORC_TELE_POINTS == "G_SORC_TELE_POINTS") + { + SetGlobalVar("G_SORC_TELE_POINTS", 0); + } + G_SORC_TELE_POINTS += 1; + if (SORC_TELE_SETS < 1) + { + SORC_TELE_SETS = 1; + SORC_CUR_TELE_SET = 1; + SORC_TELE_SET1 = ""; + } + if (G_SORC_TELE_POINTS > 9) + { + if (SORC_TELE_SETS < 2) + { + } + SORC_TELE_SETS = 2; + SORC_CUR_TELE_SET = 2; + SORC_TELE_SET2 = ""; + } + if (G_SORC_TELE_POINTS > 18) + { + if (SORC_TELE_SETS < 3) + { + } + SORC_TELE_SETS = 3; + SORC_CUR_TELE_SET = 3; + SORC_TELE_SET3 = ""; + } + if (SORC_CUR_TELE_SET == 1) + { + if (SORC_TELE_SET1.length() > 0) SORC_TELE_SET1 += ";"; + SORC_TELE_SET1 += param1; + } + if (SORC_CUR_TELE_SET == 2) + { + if (SORC_TELE_SET2.length() > 0) SORC_TELE_SET2 += ";"; + SORC_TELE_SET2 += param1; + } + if (SORC_CUR_TELE_SET == 3) + { + if (SORC_TELE_SET3.length() > 0) SORC_TELE_SET3 += ";"; + SORC_TELE_SET3 += param1; + } + } + + void game_get_spawns() + { + SetGlobalVar("G_SPAWN_POINTS", param1); + } + + void give_item_delayed() + { + GM_ITEM_TARGET = param1; + GM_ITEM_NAME = param2; + PARAM3("give_item_delayed2"); + } + + void give_item_delayed2() + { + // TODO: offer GM_ITEM_TARGET GM_ITEM_NAME + } + + void gm_add_del_que() + { + string ID_TO_DEL = param1; + if (("").findFirst("[ERROR_NO_ARRAY]") >= 0) + { + array ARRAY_GM_DEL_QUE; + } + ARRAY_GM_DEL_QUE.insertLast(ID_TO_DEL); + if ((GM_DEL_QUE_ACTIVE)) return; + GM_DEL_QUE_ACTIVE = 1; + string FADE_DELAY = param2; + if ((param2).findFirst(PARAM) == 0) + { + float FADE_DELAY = 15.0; + } + FADE_DELAY("gm_del_que_loop"); + } + + void gm_del_que_loop() + { + LogDebug("gm_del_que_loop int(ARRAY_GM_DEL_QUE.length())"); + if (int(ARRAY_GM_DEL_QUE.length()) > 0) + { + DeleteEntity(ARRAY_GM_DEL_QUE[int(0)], true); // fade out + ARRAY_GM_DEL_QUE.removeAt(0); + ScheduleDelayedEvent(2.0, "gm_del_que_loop"); + } + else + { + GM_DEL_QUE_ACTIVE = 0; + } + } + + void gm_vanish_que() + { + string ID_TO_VANISH = param1; + if (("").findFirst("[ERROR_NO_ARRAY]") >= 0) + { + array ARRAY_GM_VANISH_QUE; + } + ARRAY_GM_VANISH_QUE.insertLast(ID_TO_VANISH); + if ((GM_VANISH_QUE_ACTIVE)) return; + GM_VANISH_QUE_ACTIVE = 1; + string FADE_DELAY = param2; + FADE_DELAY("gm_vanish_que_loop"); + } + + void gm_vanish_que_loop() + { + LogDebug("gm_vanish_que_loop int(ARRAY_GM_VANISH_QUE.length())"); + if (int(ARRAY_GM_VANISH_QUE.length()) > 0) + { + SetProp(ARRAY_GM_VANISH_QUE[int(0)], "rendermode", 5); + SetProp(ARRAY_GM_VANISH_QUE[int(0)], "renderamt", 0); + ARRAY_GM_VANISH_QUE.removeAt(0); + ScheduleDelayedEvent(0.1, "gm_vanish_que_loop"); + } + else + { + GM_VANISH_QUE_ACTIVE = 0; + } + } + + void gm_drop_item() + { + string ITEM_DELAY = param1; + GM_ITEM_TO_GIVE = param2; + GM_ITEM_ORIGIN = param3; + GM_ITEM_RESERVE = param4; + ITEM_DELAY("gm_drop_item2"); + } + + void gm_drop_item2() + { + SpawnItem(GM_ITEM_TO_GIVE, GM_ITEM_ORIGIN); + if ((GM_ITEM_RESERVE)) + { + CallExternal(m_hLastCreated, "bitem_reserve_for_strongest"); + } + } + + void gm_start_weather() + { + if (param1 == "snow") + { + SetGlobalVar("IS_SNOWING", 1); + } + else + { + SetGlobalVar("IS_SNOWING", 0); + } + if ((param1).findFirst("rain") >= 0) + { + SetGlobalVar("IS_RAINING", 1); + } + else + { + SetGlobalVar("IS_RAINING", 0); + } + string OUT_TRIG = "weatherchange_"; + OUT_TRIG += G_CURRENT_WEATHER; + UseTrigger(OUT_TRIG); + CallExternal("players", "ext_weather_change", G_CURRENT_WEATHER); + } + + void gm_test_trig() + { + string OUT_MSG = /* TODO: $stradd */ $stradd(param2, "|", param3, "|", param4, "|", param5); + SendInfoMsg("all", GetEntityName(param1) + OUT_MSG); + } + + void gm_trig_filter() + { + string TRIG_NAME = param1; + GM_TRIG_TARGET = param2; + GM_TRIG_TOKENS = param3; + string N_TOKENS = GetTokenCount(GM_TRIG_TOKENS, ";"); + GM_TRIG_ACTIVATE = 0; + GM_RACE_ACTIVATE = 0; + GM_TRIG_HP_REQ = 0; + GM_TRIG_RACE_REQ = 0; + for (int i = 0; i < ""; i++) + { + gm_trig_filter_check(); + } + int DO_TRIGGER = 0; + if ((GM_RACE_ACTIVATE)) + { + int DO_TRIGGER = 1; + } + if ((GM_TRIG_HP_REQ)) + { + int DO_TRIGGER = 0; + } + if ((GM_TRIG_ACTIVATE)) + { + if ((GM_TRIG_RACE_REQ)) + { + if ((GM_RACE_ACTIVATE)) + { + } + int DO_TRIGGER = 1; + } + else + { + int DO_TRIGGER = 1; + } + } + if (!(DO_TRIGGER)) return; + UseTrigger(TRIG_NAME); + } + + void gm_trig_filter_check() + { + string CUR_TOKEN = GetToken(GM_TRIG_TOKENS, i, ";"); + string LEN_TOKEN = (CUR_TOKEN).length(); + if ((CUR_TOKEN).findFirst("race=") == 0) + { + GM_TRIG_RACE_REQ = 1; + string PROP_LEN = LEN_TOKEN; + PROP_LEN -= 5; + string PROP_STR = (CUR_TOKEN).substr((CUR_TOKEN).length() - PROP_LEN); + if (GetEntityRace(GM_RACE_TARGET) == PROP_STR) + { + GM_RACE_ACTIVATE = 1; + } + else + { + GM_RACE_ACTIVATE = 0; + } + } + if ((CUR_TOKEN).findFirst("isally") == 0) + { + GM_TRIG_RACE_REQ = 1; + if (GetEntityRace(GM_RACE_TARGET) == "human") + { + GM_RACE_ACTIVATE = 1; + } + if (GetEntityRace(GM_RACE_TARGET) == "elf") + { + GM_RACE_ACTIVATE = 1; + } + if (GetEntityRace(GM_RACE_TARGET) == "dwarf") + { + GM_RACE_ACTIVATE = 1; + } + if (GetEntityRace(GM_RACE_TARGET) == "hguard") + { + GM_RACE_ACTIVATE = 1; + } + if ((IsValidPlayer(GM_RACE_TARGET))) + { + GM_RACE_ACTIVATE = 1; + } + } + if ((CUR_TOKEN).findFirst("isenemy") == 0) + { + GM_TRIG_RACE_REQ = 1; + GM_RACE_ACTIVATE = 1; + if (GetEntityRace(GM_RACE_TARGET) == "human") + { + GM_RACE_ACTIVATE = 0; + } + if (GetEntityRace(GM_RACE_TARGET) == "elf") + { + GM_RACE_ACTIVATE = 0; + } + if (GetEntityRace(GM_RACE_TARGET) == "dwarf") + { + GM_RACE_ACTIVATE = 0; + } + if (GetEntityRace(GM_RACE_TARGET) == "hguard") + { + GM_RACE_ACTIVATE = 0; + } + if ((IsValidPlayer(GM_RACE_TARGET))) + { + GM_RACE_ACTIVATE = 0; + } + } + if ((CUR_TOKEN).findFirst("totalhp>") == 0) + { + GM_TRIG_HP_REQ = 1; + string PROP_LEN = LEN_TOKEN; + PROP_LEN -= 8; + string PROP_STR = (CUR_TOKEN).substr((CUR_TOKEN).length() - PROP_LEN); + if ("game.players.totalhp" >= PROP_STR) + { + GM_TRIG_ACTIVATE = 1; + } + else + { + GM_TRIG_ACTIVATE = 0; + } + } + if ((CUR_TOKEN).findFirst("totalhp<") == 0) + { + GM_TRIG_HP_REQ = 1; + string PROP_LEN = LEN_TOKEN; + PROP_LEN -= 8; + string PROP_STR = (CUR_TOKEN).substr((CUR_TOKEN).length() - PROP_LEN); + if ("game.players.totalhp" < PROP_STR) + { + GM_TRIG_ACTIVATE = 1; + } + else + { + GM_TRIG_ACTIVATE = 0; + } + } + if ((CUR_TOKEN).findFirst("avghp<") == 0) + { + GM_TRIG_HP_REQ = 1; + string PROP_LEN = LEN_TOKEN; + PROP_LEN -= 6; + string PROP_STR = (CUR_TOKEN).substr((CUR_TOKEN).length() - PROP_LEN); + if ("game.players.avghp" >= PROP_STR) + { + GM_TRIG_ACTIVATE = 1; + } + else + { + GM_TRIG_ACTIVATE = 0; + } + } + if ((CUR_TOKEN).findFirst("avghp>") == 0) + { + GM_TRIG_HP_REQ = 1; + string PROP_LEN = LEN_TOKEN; + PROP_LEN -= 6; + string PROP_STR = (CUR_TOKEN).substr((CUR_TOKEN).length() - PROP_LEN); + if ("game.players.avghp" < PROP_STR) + { + GM_TRIG_ACTIVATE = 1; + } + else + { + GM_TRIG_ACTIVATE = 0; + } + } + } + + void gm_april_fools_mode() + { + if (!(G_DEVELOPER_MODE)) + { + if ((GetCvar("hostname")).findFirst(RKS) >= 0) + { + } + int GOOD_TO_GO = 1; + } + if ((G_DEVELOPER_MODE)) + { + int GOOD_TO_GO = 1; + } + if (!(GOOD_TO_GO)) return; + SetGlobalVar("G_APRIL_FOOLS_MODE", 1); + if ((G_DEVELOPER_MODE)) + { + SendInfoMsg("all", "APRIL FOOLS MODE GO Checking april fool spawns"); + } + } + + void gm_april_fools_spawn_add() + { + if ((GM_APRIL_CHECKING)) return; + LogDebug("gm_april_fools_spawn_add PARAM1"); + GM_APRIL_SPAWN_POINT = param1; + GM_APRIL_CHECKING = 1; + ScheduleDelayedEvent(10.0, "gm_april_fools_check_point"); + } + + void gm_april_fools_check_point() + { + if (!(GM_APRIL_CHECKING)) return; + GM_APRIL_CHECKING = 0; + if (GetPlayerCount() == 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GetAllPlayers(APRIL_PLAYERS); + GM_APRIL_INVALIDATED = 0; + for (int i = 0; i < GetTokenCount(APRIL_PLAYERS, ";"); i++) + { + gm_april_fools_filter(); + } + if ((GM_APRIL_INVALIDATED)) return; + SetGlobalVar("G_APRIL_FOOLS_MODE", 0); + gm_spawn_newell(); + } + + void gm_spawn_newell() + { + LogDebug("gm_spawn_newell"); + SpawnNPC("monsters/gabe_newell", GM_APRIL_SPAWN_POINT, ScriptMode::Legacy); + } + + void gm_april_fools_filter() + { + string CUR_PLAYER = GetToken(APRIL_PLAYERS, i, ";"); + if (CUR_PLAYER == G_LAST_GABE_TARGET) + { + LogDebug("gm_april_fools_filter - invalidated - last target still on server"); + SetGlobalVar("G_APRIL_FOOLS_MODE", 0); + GM_APRIL_INVALIDATED = 1; + } + string CUR_ORG = GetEntityOrigin(CUR_PLAYER); + if (Distance(CUR_ORG, GM_APRIL_SPAWN_POINT) < 256) + { + LogDebug("gm_april_fools_filter - invalidated - too close , will check again"); + GM_APRIL_INVALIDATED = 1; + } + } + + void gm_recieve_client_info() + { + SendInfoMsg("all", "Returned " + param1); + LogMessage(GM_PLAYER_REQ + CLIENT_INFO_RETURNED: + param1); + } + + void gm_newweather_string() + { + LogDebug("got GetEntityName(param1) PARAM2 PARAM3 PARAM4"); + GM_NEW_WEATHER = param2; + SetGlobalVar("G_CURRENT_WEATHER", param2); + string NEW_WEATHER_STR = param1; + NEW_WEATHER_STR += ";"; + int ADD_PARAM = 1; + if ((param2).findFirst(PARAM) == 0) + { + int ADD_PARAM = 0; + } + if ((ADD_PARAM)) + { + string NEW_WEATHER_STR = param2; + NEW_WEATHER_STR += ";"; + } + int ADD_PARAM = 1; + if ((param3).findFirst(PARAM) == 0) + { + int ADD_PARAM = 0; + } + if ((ADD_PARAM)) + { + string NEW_WEATHER_STR = param3; + NEW_WEATHER_STR += ";"; + } + int ADD_PARAM = 1; + if ((param4).findFirst(PARAM) == 0) + { + int ADD_PARAM = 0; + } + if ((ADD_PARAM)) + { + string NEW_WEATHER_STR = param4; + NEW_WEATHER_STR += ";"; + } + int ADD_PARAM = 1; + if ((param5).findFirst(PARAM) == 0) + { + int ADD_PARAM = 0; + } + if ((ADD_PARAM)) + { + string NEW_WEATHER_STR = param5; + NEW_WEATHER_STR += ";"; + } + if (G_CURRENT_WEATHER != param2) + { + gm_start_weather(G_CURRENT_WEATHER); + } + SetGlobalVar("global.map.weather", NEW_WEATHER_STR); + } + + void reserve_test() + { + string SPAWN_POINT = GetEntityOrigin(param1); + string MY_ANGLES = GetEntityAngles(param1); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 64, 0)); + SpawnItem("smallarms_nh", SPAWN_POINT); + LogDebug("reserve_test GetEntityName(m_hLastCreated)"); + CallExternal(m_hLastCreated, "item_banked"); + } + + void gm_keldorn_troll() + { + ClientEvent("update", param1, "const.localplayer.scriptID", "cl_playsound", "voices/deralia/slinker2.wav"); + // TODO: offer PARAM1 scroll2_trollcano + } + + void gm_sxbow_swap() + { + GM_SXBOW_RECIEVE = param1; + ScheduleDelayedEvent(1.0, "gm_sxbow_swap2"); + } + + void gm_sxbow_swap2() + { + // TODO: offer GM_SXBOW_RECIEVE bows_sxbow + } + + void gm_epilepsy_begin() + { + CallExternal("players", "ext_epilepsy_time_begin"); + } + + void gm_epilepsy_end() + { + CallExternal("players", "ext_epilepsy_time_end"); + } + + void player_joined() + { + GM_HAD_PLAYER = 1; + gm_lights_sync(GetEntityIndex(param1)); + } + + void gm_lights_sync() + { + LogDebug("gm_lights_sync"); + int L_N_LIGHTS = int(ARRAY_LIGHT_OWNERLIST.length()); + GM_LIGHT_PLAYER = param1; + if (!(L_N_LIGHTS > 0)) return; + for (int i = 0; i < L_N_LIGHTS; i++) + { + gm_lights_sync_loop(); + } + } + + void gm_lights_sync_loop() + { + string CUR_OWNER = ARRAY_LIGHT_OWNERLIST[int(i)]; + string CUR_COLOR = ARRAY_LIGHT_COLOR[int(i)]; + string CUR_RAD = ARRAY_LIGHT_RAD[int(i)]; + LogDebug("gm_lights_sync_loop sending CUR_OWNER CUR_COLOR CUR_RAD"); + ClientEvent("update", GM_LIGHT_PLAYER, "const.localplayer.scriptID", "cl_light_update", "new", CUR_OWNER, CUR_COLOR, CUR_RAD); + } + + void gm_dumplights() + { + for (int i = 0; i < LIGHTSYS_N_LIGHTS; i++) + { + gm_dumplights_loop(); + } + } + + void gm_dumplights_loop() + { + string CUR_IDX = i; + LogDebug("int(CUR_IDX) ARRAY_LIGHT_OWNERLIST[int(CUR_IDX)] ARRAY_LIGHT_COLOR[int(CUR_IDX)] ARRAY_LIGHT_RAD[int(CUR_IDX)]"); + } + + void gm_light_update() + { + string L_ACTION = param1; + string L_OWNER = param2; + string L_COLOR = param3; + string L_RAD = param4; + LogDebug("gm_light_update L_ACTION L_OWNER L_COLOR L_RAD"); + ClientEvent("update", "all", "const.localplayer.scriptID", "cl_light_update", L_ACTION, L_OWNER, L_COLOR, L_RAD); + if (L_ACTION == "new") + { + ARRAY_LIGHT_COLOR[L_OWNER] = L_COLOR; + ARRAY_LIGHT_RAD[L_OWNER] = L_RAD; + } + if (L_ACTION == "update") + { + ARRAY_LIGHT_COLOR[L_OWNER] = L_COLOR; + ARRAY_LIGHT_RAD[L_OWNER] = L_RAD; + } + if (L_ACTION == "remove") + { + ARRAY_LIGHT_COLOR[L_OWNER] = -1; + ARRAY_LIGHT_RAD[L_OWNER] = -1; + } + } + + void ext_activate_items() + { + if (!(GM_HANDLE_ACTIVATES)) return; + if ((StringToLower(GetMapName())).findFirst("m2_quest") == 0) + { + UseTrigger("global"); + GM_HANDLE_ACTIVATES = 0; + } + } + + void gm_scramble_treasure() + { + ScrambleTokens(G_NOOB_ITEMS1, ";"); + ScrambleTokens(G_NOOB_ITEMS2, ";"); + ScrambleTokens(G_NOOB_ITEMS3, ";"); + ScrambleTokens(G_NOOB_ITEMS4, ";"); + ScrambleTokens(G_NOOB_ITEMS5, ";"); + ScrambleTokens(G_NOOB_ITEMS6, ";"); + ScrambleTokens(G_GOOD_ITEMS1, ";"); + ScrambleTokens(G_GOOD_ITEMS2, ";"); + ScrambleTokens(G_GOOD_ITEMS3, ";"); + ScrambleTokens(G_GREAT_ITEMS1, ";"); + ScrambleTokens(G_GREAT_ITEMS2, ";"); + ScrambleTokens(G_GREAT_ITEMS3, ";"); + ScrambleTokens(G_NOOB_ARROWS, ";"); + ScrambleTokens(G_GOOD_ARROWS, ";"); + ScrambleTokens(G_GREAT_ARROWS, ";"); + ScrambleTokens(G_EPIC_ARROWS, ";"); + GM_N_EPICS = GetGlobalArrayLength(G_ARRAY_EPIC); + if (int(ARRAY_TEMP.length()) == -1) + { + array ARRAY_TEMP; + for (int i = 0; i < GM_N_EPICS; i++) + { + gm_init_array_temp(); + } + } + string L_N_EPICS = GM_N_EPICS; + L_N_EPICS -= 1; + GM_TEMP_COUNT = RandomInt(0, L_N_EPICS); + for (int i = 0; i < GM_N_EPICS; i++) + { + gm_epic_to_temp_loop(); + } + for (int i = 0; i < GM_N_EPICS; i++) + { + gm_temp_to_epic_loop(); + } + } + + void gm_init_array_temp() + { + ARRAY_TEMP.insertLast(0); + } + + void gm_epic_to_temp_loop() + { + string CUR_EPIC = i; + ARRAY_TEMP[GM_TEMP_COUNT] = GetGlobalArray(G_ARRAY_EPIC, int(CUR_EPIC)); + GM_TEMP_COUNT += 1; + if (GM_TEMP_COUNT >= GM_N_EPICS) + { + GM_TEMP_COUNT = 0; + } + } + + void gm_temp_to_epic_loop() + { + string CUR_EPIC = i; + GlobalArraySet("G_ARRAY_EPIC", CUR_EPIC, ARRAY_TEMP[int(CUR_EPIC)]); + } + + void gm_dump_epics() + { + for (int i = 0; i < GetGlobalArrayLength(G_ARRAY_EPIC); i++) + { + gm_dump_epics_loop(); + } + } + + void gm_dump_epics_loop() + { + string CUR_EPIC = i; + LogDebug("# CUR_EPIC GetGlobalArray(G_ARRAY_EPIC, int(CUR_EPIC))"); + } + + void gm_ms_text() + { + LogDebug("gm_ms_text PARAM1 PARAM2"); + string L_NAME = param1; + string L_TEXT = param2; + SetName(L_NAME); + SayText(L_TEXT); + } + + void gm_suspend_mob_spawns() + { + GM_DISABLE_SPAWNS = param1; + } + + void gm_trigger_hpseq_count() + { + if (GM_BTROLLS_DEAD == "GM_BTROLLS_DEAD") + { + GM_BTROLLS_DEAD = 1; + } + else + { + GM_BTROLLS_DEAD += 1; + } + if (!(GM_BTROLLS_DEAD >= GM_TOTAL_TRIGGERED)) return; + string L_TRIGGER = param2; + UseTrigger(L_TRIGGER); + } + + void gm_trigger_hpseq() + { + GM_TRIGGER_PREFIX = param2; + GM_HP_TOKENS = param3; + string L_N_PARAMS = "game.event.params"; + if (L_N_PARAMS > 3) + { + if (GM_HP_TOKENS.length() > 0) GM_HP_TOKENS += ";"; + GM_HP_TOKENS += param4; + } + if (L_N_PARAMS > 4) + { + if (GM_HP_TOKENS.length() > 0) GM_HP_TOKENS += ";"; + GM_HP_TOKENS += param5; + } + if (L_N_PARAMS > 5) + { + if (GM_HP_TOKENS.length() > 0) GM_HP_TOKENS += ";"; + GM_HP_TOKENS += param6; + } + if (L_N_PARAMS > 6) + { + if (GM_HP_TOKENS.length() > 0) GM_HP_TOKENS += ";"; + GM_HP_TOKENS += param7; + } + if (L_N_PARAMS > 7) + { + if (GM_HP_TOKENS.length() > 0) GM_HP_TOKENS += ";"; + GM_HP_TOKENS += param8; + } + if (L_N_PARAMS > 8) + { + if (GM_HP_TOKENS.length() > 0) GM_HP_TOKENS += ";"; + GM_HP_TOKENS += param9; + } + GM_TOTAL_HP = "game.playersnb.totalhp"; + GM_TOTAL_TRIGGERED = 0; + for (int i = 0; i < GetTokenCount(GM_HP_TOKENS, ";"); i++) + { + gm_trigger_hpseq_loop(); + } + } + + void gm_trigger_hpseq_loop() + { + string CUR_HPREQ = GetToken(GM_HP_TOKENS, i, ";"); + if (GM_TOTAL_HP >= CUR_HPREQ) + { + string L_TRIGGER = GM_TRIGGER_PREFIX; + L_TRIGGER += CUR_HPREQ; + UseTrigger(L_TRIGGER); + GM_TOTAL_TRIGGERED += 1; + } + } + + void ext_got_quest_item() + { + if (int(ARRAY_QUEST_ITEMS.length()) == -1) + { + array ARRAY_QUEST_ITEMS; + } + ARRAY_QUEST_ITEMS.insertLast(param1); + if ((StringToLower(GetMapName())).findFirst("rmine") == 0) + { + if (!(PLR_FOUND_FIRST_STICK)) + { + } + PLR_FOUND_FIRST_STICK = 1; + SendInfoMsg("all", "Stick of Dynamite Hrmmm... the fuse is broken... but maybe we can use this, somewhere..."); + } + } + + void ext_check_quest_item() + { + QITEM_NAME = param1; + QITEM_CALLER = param2; + string L_FIND_ITEM = ArrayFind(ARRAY_QUEST_ITEMS, QITEM_NAME, 0); + if (L_FIND_ITEM == "[ERROR_NO_ARRAY]") + { + return; + } + if (L_FIND_ITEM > -1) + { + for (int i = 0; i < int(ARRAY_QUEST_ITEMS.length()); i++) + { + find_all_qitems(); + } + } + } + + void find_all_qitems() + { + string L_IDX = i; + string L_FIND_ITEM = ArrayFind(ARRAY_QUEST_ITEMS, QITEM_NAME, 0); + if (L_FIND_ITEM > -1) + { + ARRAY_QUEST_ITEMS.removeAt(L_FIND_ITEM); + CallExternal(QITEM_CALLER, "ext_receive_quest_item", QITEM_NAME); + } + else + { + return; + } + } + + void ext_dump_quest_items() + { + for (int i = 0; i < int(ARRAY_QUEST_ITEMS.length()); i++) + { + ext_dump_quest_items_loop(); + } + } + + void ext_dump_quest_items_loop() + { + LogDebug("ARRAY_QUEST_ITEMS[int(i)]"); + } + +} + +} diff --git a/scripts/angelscript/game_master/dmgpoints.as b/scripts/angelscript/game_master/dmgpoints.as new file mode 100644 index 00000000..23f9dd3a --- /dev/null +++ b/scripts/angelscript/game_master/dmgpoints.as @@ -0,0 +1,70 @@ +#pragma context server + +namespace MS +{ + +class Dmgpoints : CGameScript +{ + int STRONGEST_IDX; + string STRONGEST_PLAYER_LIST; + int STRONGEST_STAT_LEVEL; + string THE_CHOSEN_ONE; + string THE_CHOSEN_ONE_IDX; + + void OnSpawn() override + { + string L_MAP_NAME = StringToLower(GetMapName()); + int L_GENERATE_CODE = 1; + if (FindToken(MAPS_GAUNTLET, L_MAP_NAME, ";") > -1) + { + if ((G_DM_CODE)) + { + int L_GENERATE_CODE = 0; + } + } + if ((L_GENERATE_CODE)) + { + SetGlobalVar("G_DM_CODE", RandomInt(1, 9)); + } + } + + void gm_find_strongest_player() + { + LogDebug("gm_find_strongest_player"); + STRONGEST_IDX = 0; + STRONGEST_STAT_LEVEL = 0; + if (STRONGEST_PLAYER_LIST == "STRONGEST_PLAYER_LIST") + { + GetAllPlayers(STRONGEST_PLAYER_LIST); + } + for (int i = 0; i < GetTokenCount(STRONGEST_PLAYER_LIST, ";"); i++) + { + find_strongest_player_loop(); + } + THE_CHOSEN_ONE = GetToken(STRONGEST_PLAYER_LIST, STRONGEST_IDX, ";"); + THE_CHOSEN_ONE_IDX = STRONGEST_IDX; + RemoveToken(PLAYER_LIST, STRONGEST_IDX, ";"); + } + + void gm_find_strongest_reset() + { + STRONGEST_PLAYER_LIST = "STRONGEST_PLAYER_LIST"; + gm_find_strongest_player(); + } + + void find_strongest_player_loop() + { + string CUR_IDX = i; + string CUR_PLAYER = GetToken(STRONGEST_PLAYER_LIST, CUR_IDX, ";"); + CallExternal(CUR_PLAYER, "ext_get_dmgpoints"); + string PLAYER_STAT = GetEntityProperty(CUR_PLAYER, "scriptvar"); + if (PLAYER_STAT > STRONGEST_STAT_LEVEL) + { + STRONGEST_STAT_LEVEL = PLAYER_STAT; + STRONGEST_IDX = CUR_IDX; + } + } + +} + +} diff --git a/scripts/angelscript/game_master/map_transitions.as b/scripts/angelscript/game_master/map_transitions.as new file mode 100644 index 00000000..b49a1d55 --- /dev/null +++ b/scripts/angelscript/game_master/map_transitions.as @@ -0,0 +1,98 @@ +#pragma context server + +namespace MS +{ + +class MapTransitions : CGameScript +{ + string DEST_MAP; + int GM_CHANGELEVEL; + string GM_DEST_TRANS; + int GM_DISABLE_TRANSITIONS; + int VOTE_IN_PROGRESS; + + void game_transition_triggered() + { + string L_MAP_TITLE = param1; + string L_MAP = param2; + string L_LOCAL_TRANS = param3; + GM_DEST_TRANS = param4; + if (!(ValidateMapName(L_MAP))) + { + SendInfoMessageToAll("green " + L_MAP + " does not exist on this server. Perhaps this is a future transition point?"); + } + else + { + CallExternal("players", "ext_set_map", L_MAP, L_LOCAL_TRANS, GM_DEST_TRANS); + if (GetPlayerCount() > 1) + { + string VOTE_TITLE = "Travel to "; + string L_OPTIONS = "Yes!:"; + CallExternal(GAME_MASTER, "gm_create_vote", "gm_votemap", L_OPTIONS, VOTE_TITLE, "Voting begins now!", 0); + } + else + { + gm_manual_map_change(L_MAP); + } + } + } + + void gm_manual_map_change() + { + if ((GM_CHANGELEVEL)) return; + GM_DISABLE_TRANSITIONS = 1; + GM_CHANGELEVEL = 1; + DEST_MAP = param1; + string L_DEST_SPAWN = param2; + if (L_DEST_SPAWN == "PARAM2") + { + string L_DEST_SPAWN = GM_DEST_TRANS; + } + CallExternal("players", "ext_setspawn", L_DEST_SPAWN); + string L_CMD = "echo Changelevel: "; + ServerCommand("L_CMD"); + SetGlobalVar("G_WEATHER_LOCK", "clear"); + SetGlobalVar("global.map.weather", "clear;clear;clear"); + SetGlobalVar("G_OVERRIDE_WEATHER_CODE", "clear;clear;clear"); + SetGlobalVar("G_CUR_WEATHER", "clear"); + SetGlobalVar("G_MAP_ADDPARAMS", 0); + if ((G_SERVER_LOCKED)) + { + string L_CMD = "sv_password "; + ServerCommand("L_CMD"); + } + if (GetPlayerCount() > 0) + { + CallExternal("players", "ext_changelevel_prep"); + } + string L_STR = "TRAVELING TO "; + SendInfoMsg("all", L_STR + " You will be reconnected shortly."); + VOTE_IN_PROGRESS = 0; + ScheduleDelayedEvent(5.0, "delay_changelevel"); + } + + void game_triggered() + { + LogDebug("game_triggered PARAM1"); + string L_TRIG = param1; + if ((GM_CHANGELEVEL)) return; + if ((L_TRIG).findFirst("touch_trans_") == 0) + { + string MAP_TO_VOTE = /* TODO: $string_from */ $string_from(L_TRIG, "touch_trans_"); + string VOTE_TITLE = "Change to "; + string L_OPTIONS = "Yes!:"; + CallExternal(GAME_MASTER, "gm_create_vote", "gm_votemap", L_OPTIONS, VOTE_TITLE, "Voting begins now!", 0); + } + else + { + if ((L_TRIG).findFirst("force_map_") == 0) + { + string L_FORCEMAP = /* TODO: $string_from */ $string_from(L_TRIG, "force_map_"); + gm_manual_map_change(L_FORCEMAP); + } + } + } + +} + +} diff --git a/scripts/angelscript/game_master/vote_generic.as b/scripts/angelscript/game_master/vote_generic.as new file mode 100644 index 00000000..bb11e2cb --- /dev/null +++ b/scripts/angelscript/game_master/vote_generic.as @@ -0,0 +1,398 @@ +#pragma context server + +namespace MS +{ + +class VoteGeneric : CGameScript +{ + string GM_COUNT_DOWN_EVENT; + string GM_COUNT_DOWN_TO; + string GM_COUNT_MESSAGE; + string GM_SKIP_VOTE_ID; + string L_SV_LOCK_PASSWORD; + int TOTAL_BALLOTS; + int VOTES_CASTED; + int VOTES_REMOVED; + string VOTE_BUSY; + string VOTE_DESC; + string VOTE_EVENT; + string VOTE_OPTIONS; + string VOTE_SILENT; + string VOTE_TALLY; + string VOTE_TITLE; + string VOTE_WINNERS; + int VOTE_WINNER_COUNT; + + VoteGeneric() + { + array A_VOTERS; + } + + void gm_create_vote() + { + if (!(VOTE_BUSY)) + { + if (GetPlayerCount() > 0) + { + } + VOTE_BUSY = 1; + VOTE_TALLY = 0; + VOTE_EVENT = param1; + VOTE_OPTIONS = param2; + VOTE_TITLE = param3; + VOTE_DESC = param4; + VOTE_SILENT = param5; + if (VOTE_DESC == "PARAM4") + { + VOTE_DESC = " "; + } + if (VOTE_SILENT == "PARAM5") + { + VOTE_SILENT = 0; + } + CallExternal("players", "ext_set_vote_delay", 20.0); + gm_send_vote(); + } + } + + void gm_send_vote() + { + SetName(VOTE!); + SendInfoMsg("all", VOTE_TITLE + VOTE_DESC); + get_voters(); + VOTES_CASTED = 0; + TOTAL_BALLOTS = int(A_VOTERS.length()); + ScheduleDelayedEvent(0.1, "gm_send_ballots"); + ScheduleDelayedEvent(5.1, "gm_send_ballots"); + ScheduleDelayedEvent(20.0, "gm_tally_votes"); + } + + void get_voters() + { + A_VOTERS.resize(0); + GetAllPlayers(A_VOTERS); + VOTES_REMOVED = 0; + for (int i = 0; i < int(A_VOTERS.length()); i++) + { + get_voters_filter(); + } + } + + void get_voters_filter() + { + string L_ARRAY_INDEX = (i - VOTES_REMOVED); + string L_PLAYER = A_VOTERS[int(L_ARRAY_INDEX)]; + if (!(GetEntityProperty(L_PLAYER, "scriptvar"))) + { + { + int _rmIdx = ArrayFind(A_VOTERS, L_ARRAY_INDEX, 0); + if (_rmIdx >= 0) A_VOTERS.removeAt(_rmIdx); + } + VOTES_REMOVED += 1; + } + } + + void gm_send_ballots() + { + if (!(VOTE_BUSY)) return; + for (int i = 0; i < int(A_VOTERS.length()); i++) + { + send_menus(); + } + } + + void send_menus() + { + OpenMenu(A_VOTERS[int(i)]); + } + + void game_menu_getoptions() + { + if (!(VOTE_BUSY)) return; + for (int i = 0; i < GetTokenCount(VOTE_OPTIONS, ";"); i++) + { + gm_build_ballot(); + } + } + + void gm_build_ballot() + { + if (GetTokenCount(VOTE_TALLY, ";") < GetTokenCount(VOTE_OPTIONS, ";")) + { + if (VOTE_TALLY.length() > 0) VOTE_TALLY += ";"; + VOTE_TALLY += 0; + } + string L_STR = GetToken(VOTE_OPTIONS, i, ";"); + string L_OPTION = /* TODO: $string_upto */ $string_upto(L_STR, ":"); + string reg.mitem.title = L_OPTION; + string reg.mitem.type = "callback"; + string reg.mitem.data = L_STR; + string reg.mitem.callback = "gm_gvote_count"; + } + + void game_menu_cancel() + { + string L_VOTER = param1; + string L_IDX = ArrayFind(A_VOTERS, param1, 0); + if (!(VOTE_BUSY)) return; + if (!(L_IDX != -1)) return; + { + int _rmIdx = ArrayFind(A_VOTERS, L_IDX, 0); + if (_rmIdx >= 0) A_VOTERS.removeAt(_rmIdx); + } + VOTES_CASTED += 1; + if (VOTES_CASTED == TOTAL_BALLOTS) + { + gm_tally_votes(); + } + } + + void gm_gvote_count() + { + string L_VOTER = param1; + string L_IDX = ArrayFind(A_VOTERS, param1, 0); + if (!(VOTE_BUSY)) return; + if (!(L_IDX != -1)) return; + A_VOTERS.removeAt(L_IDX); + VOTES_CASTED += 1; + string L_VOTE_TITLE = /* TODO: $string_upto */ $string_upto(param2, ":"); + string L_OPTION_IDX = FindToken(VOTE_OPTIONS, param2, ";"); + string L_VOTES = GetToken(VOTE_TALLY, L_OPTION_IDX, ";"); + L_VOTES += 1; + SetToken(VOTE_TALLY, L_OPTION_IDX, int(L_VOTES), ";"); + if (!(VOTE_SILENT)) + { + string L_STR = GetEntityName(param1); + SendInfoMessageToAll("green " + L_STR); + } + if (VOTES_CASTED == TOTAL_BALLOTS) + { + gm_tally_votes(); + } + } + + void gm_tally_votes() + { + if (!(VOTE_BUSY)) return; + VOTE_BUSY = 0; + string L_TITLE = "The people have spoken!"; + string L_WINNER = "func_get_vote_winner"(); + string L_VOTE_TITLE = /* TODO: $string_upto */ $string_upto(L_WINNER, ":"); + string L_VOTE_DATA = /* TODO: $string_from */ $string_from(L_WINNER, ":"); + SendInfoMsg("all", L_TITLE + L_VOTE_TITLE); + VOTE_EVENT(L_VOTE_TITLE, L_VOTE_DATA); + } + + void func_get_vote_winner() + { + VOTE_WINNERS = "none"; + VOTE_WINNER_COUNT = -1; + for (int i = 0; i < GetTokenCount(VOTE_TALLY, ";"); i++) + { + get_vote_winner(); + } + string L_WINNER_AMT = GetTokenCount(VOTE_WINNERS, ";"); + string L_OPTION_AMT = GetTokenCount(VOTE_OPTIONS, ";"); + if (VOTE_WINNERS == "none") + { + int L_CHOOSE_LAST = 1; + } + else + { + if (L_WINNER_AMT == L_OPTION_AMT) + { + int L_CHOOSE_LAST = 1; + } + } + if ((L_CHOOSE_LAST)) + { + VOTE_WINNERS = int((L_OPTION_AMT - 1)); + } + if (L_WINNER_AMT > 1) + { + VOTE_WINNERS = GetToken(VOTE_WINNERS, RandomInt(0, (L_WINNER_AMT - 1)), ";"); + } + return; + return; + } + + void get_vote_winner() + { + string L_VOTE_COUNT = GetToken(VOTE_TALLY, i, ";"); + string L_OPTION_IDX = i; + if (L_VOTE_COUNT > VOTE_WINNER_COUNT) + { + VOTE_WINNERS = L_OPTION_IDX; + VOTE_WINNER_COUNT = L_VOTE_COUNT; + } + else + { + if (L_VOTE_COUNT == VOTE_WINNER_COUNT) + { + if (VOTE_WINNERS.length() > 0) VOTE_WINNERS += ";"; + VOTE_WINNERS += L_OPTION_IDX; + } + } + } + + void gm_votemap() + { + string L_MAP = param2; + if (L_MAP != "0") + { + gm_manual_map_change(L_MAP); + } + } + + void gm_votepvp() + { + if (param2 == 1) + { + if (!("game.pvp")) + { + } + SendInfoMsg("all", "PVP VOTE PASSED PvP mode will begin in 10 seconds..."); + GM_COUNT_DOWN_TO = 9; + GM_COUNT_MESSAGE = "seconds before PvP begins!"; + GM_COUNT_DOWN_EVENT = "gm_pvp"; + ScheduleDelayedEvent(1.0, "gm_count_down"); + } + if (param2 == 0) + { + if (("game.pvp")) + { + } + SendInfoMsg("all", "PVP VOTE PASSED PvP mode will end in 60 seconds..."); + GM_COUNT_DOWN_TO = 59; + GM_COUNT_MESSAGE = "seconds before PvP ends..."; + GM_COUNT_DOWN_EVENT = "gm_pvp"; + ScheduleDelayedEvent(1.0, "gm_count_down"); + } + } + + void gm_pvp() + { + if (!("game.pvp")) + { + SendInfoMsg("all", "PvP MODE IS ACIVE! Players may now damage one another."); + SetPvP(1); + } + else + { + SendInfoMsg("all", "PvP MODE DEACTIVATED Players may no longer damage one another."); + SetPvP(0); + } + } + + void gm_votelock() + { + if (param2 == 1) + { + L_SV_LOCK_PASSWORD = RandomInt(0, 9); + SetGlobalVar("G_SERVER_LOCKED", 1); + ServerCommand("sv_password L_SV_LOCK_PASSWORD"); + string CL_CMD_STR = "password "; + CL_CMD_STR += L_SV_LOCK_PASSWORD; + ClientCommand("all", CL_CMD_STR); + string MSG_DESC = "Password is: "; + MSG_DESC += L_SV_LOCK_PASSWORD; + LogMessage("all " + MSG_DESC); + MSG_DESC += "|This has been sent to your console (copy it)."; + MSG_DESC += "|Server will remain locked until enough"; + MSG_DESC += "|people disconnect or map changes."; + ShowHelpTip("all", "generic", "SERVER HAS BEEN LOCKED", MSG_DESC); + } + else + { + string MSG_TITLE = "Vote Lock has failed."; + string MSG_DESC = " "; + SendInfoMsg("all", MSG_TITLE + MSG_DESC); + } + } + + void gm_votekick() + { + GM_SKIP_VOTE_ID = param1; + string VOTE_STARTER = param2; + string L_VOTE_TITLE = "KICK: "; + L_VOTE_TITLE += GetEntityName(GM_SKIP_VOTE_ID); + string L_VOTE_DESC = GetEntityName(VOTE_STARTER); + L_VOTE_DESC = " " + "has" + "started" + "a" + "kick" + "vote" + "against" + GetEntityName(GM_SKIP_VOTE_ID); + SendInfoMsg("all", L_VOTE_TITLE + L_VOTE_DESC); + gm_ynvote(GetEntityIndex(VOTE_STARTER), 1.01); + } + + void gm_voteban() + { + GM_SKIP_VOTE_ID = param1; + string VOTE_STARTER = param2; + string L_VOTE_TITLE = "BAN: "; + L_VOTE_TITLE += GetEntityName(GM_SKIP_VOTE_ID); + string L_VOTE_DESC = GetEntityName(VOTE_STARTER); + L_VOTE_DESC = " " + "has" + "started" + "a" + "ban" + "vote" + "against" + GetEntityName(GM_SKIP_VOTE_ID); + gm_ynvote(GetEntityIndex(VOTE_STARTER), 1.01); + } + + void gm_got_yes_vote() + { + if ((VOTE_OVER)) + { + SendColoredMessage(param1, "Sorry , voting has already ended."); + } + if ((VOTE_OVER)) return; + VOTES_CASTED += 1; + YES_VOTES += 1; + string MSG_STRING = GetEntityName(param1); + MSG_STRING += " votes yes."; + if (!(VOTE_QUIET_MODE)) + { + SendInfoMsg("all", MSG_STRING + " "); + } + if ((VOTE_QUIET_MODE)) + { + SendInfoMessageToAll("green " + MSG_STRING); + } + } + + void gm_got_no_vote() + { + if ((VOTE_OVER)) + { + SendColoredMessage(param1, "Sorry , voting has already ended."); + } + if ((VOTE_OVER)) return; + VOTES_CASTED += 1; + NO_VOTES += 1; + string MSG_STRING = GetEntityName(param1); + MSG_STRING += " votes no."; + if (!(VOTE_QUIET_MODE)) + { + SendInfoMsg("all", MSG_STRING + " "); + } + if ((VOTE_QUIET_MODE)) + { + SendInfoMessageToAll("green " + MSG_STRING); + } + } + + void player_left() + { + if ((G_SERVER_LOCKED)) + { + if ("game.playersnb" < 3) + { + } + SetGlobalVar("G_SERVER_LOCKED", 0); + string MSG_DESC = GetEntityName(param1); + MSG_DESC += " has left the server."; + SendInfoMsg("all", "SERVER IS NO LONGER LOCKED " + MSG_DESC); + string SV_CMD = "sv_password "; + SV_CMD += /* TODO: $quote */ $quote(); + SV_CMD += /* TODO: $quote */ $quote(); + ServerCommand("SV_CMD"); + } + } + +} + +} diff --git a/scripts/angelscript/gatecity/armorer.as b/scripts/angelscript/gatecity/armorer.as new file mode 100644 index 00000000..9850e8cb --- /dev/null +++ b/scripts/angelscript/gatecity/armorer.as @@ -0,0 +1,387 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Armorer : CGameScript +{ + int CANCHAT; + int GAVE_AXE2; + string GOLD_TARGET; + int JOB; + int NO_RUMOR; + int NPC_REACTS; + int OFFER_SET; + string ORE_TARGET; + float OVER_CHARGE; + float SELL_RATIO; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + int STORE_CLOSED; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VEND_ARMORER; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_SPEC_SHEATHS; + int VEND_WEAPONS; + + Armorer() + { + SOUND_DEATH = "none"; + STORE_CLOSED = 0; + STORE_NAME = "gatecity_armory"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.75; + OVER_CHARGE = 1.5; + NO_RUMOR = 1; + SELL_WEAPON_LEVEL = 3; + VEND_ARMORER = 1; + VEND_NEWBIE = 1; + VEND_CONTAINERS = 1; + VEND_WEAPONS = 1; + VEND_SPEC_SHEATHS = 1; + NPC_REACTS = 1; + } + + void OnSpawn() override + { + SetName("Roland"); + SetHealth(25); + SetGold(25); + SetName("Roland the Blacksmith"); + SetFOV(30); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 0); + SetModelBody(1, 2); + SetInvincible(true); + SetModelBody(2, 0); + JOB = 0; + CANCHAT = 1; + STORE_CLOSED = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + CatchSpeech("say_axe", "axe"); + CatchSpeech("say_failed_pay", "no"); + createmystore(); + } + + void npcreact_targetsighted() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist(param1) <= 90) + { + SayText("Would you like to [purchase] one of my fine weapons?"); + } + } + } + + void say_hi() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist("ent_lastspoke") <= 90) + { + SayText("Would you like [buy] some fine armor or weapons?"); + } + } + } + + void say_job() + { + SayText("Sorry , but with the Undermountains closed , " + I + " have no work to be done."); + } + + void say_rumor() + { + SayText(I + " hear the mayor is looking for some help."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "armor_leather_torn", RandomInt(1, 3), 125, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather", RandomInt(1, 3), 125, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather_studded", RandomInt(1, 3), 125, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_plate", RandomInt(1, 2), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_plate", RandomInt(1, 2), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_bronze", RandomInt(1, 2), 90, SELL_RATIO); + mongol_gear(); + knight_gear(); + AddStoreItem(STORE_NAME, "armor_golden", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_golden", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_dark", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_dark", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_belt_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_dagger_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_axe_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_blunt_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_holster_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_holster", 5, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "shields_buckler", RandomInt(1, 2), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "shields_ironshield", RandomInt(1, 2), 100, 0.25); + AddStoreItem(STORE_NAME, "shields_lironshield", RandomInt(1, 2), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_rsword", RandomInt(1, 5), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_shortsword", RandomInt(1, 5), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_nkatana", RandomInt(1, 5), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_longsword", RandomInt(1, 5), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_doubleaxe", RandomInt(1, 5), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_gauntlets_leather", RandomInt(1, 2), 90, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_belt_holster", 1, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_knife", 4, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_dagger", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_rknife", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_rsword", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_shortsword", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_scimitar", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_longsword", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_bastardsword", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_rsmallaxe", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_smallaxe", 3, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_axe", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_2haxe", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_battleaxe", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_qs", RandomInt(0, 2), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_sp", RandomInt(0, 2), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_club", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer1", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer2", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_mace", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_warhammer", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer3", 2, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_maul", 2, 100, SELL_RATIO); + } + + void mongol_gear() + { + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORE_NAME, "armor_mongol", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_mongol", 1, 100, SELL_RATIO); + } + } + + void knight_gear() + { + if (RandomInt(1, 25) == 1) + { + AddStoreItem(STORE_NAME, "armor_knight", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_knight", 1, 100, SELL_RATIO); + } + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + EmitSound(GetOwner(), CHAN_VOICE, "npc/goods.wav", "game.sound.maxvol"); + Say("[.34] [.24] [.35] [.40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void vendor_say_closed() + { + SayText("Sorry , " + I + " m closed. I will reopen at seven in the morning"); + } + + void game_menu_getoptions() + { + if ((OFFER_SET)) + { + if ((ItemExists(param1, "item_gaxe_handle"))) + { + } + string reg.mitem.title = "Pay 10,000 Gold"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:10000;item_gaxe_handle;item_ore_lorel"; + string reg.mitem.callback = "say_gotgold"; + string reg.mitem.cb_failed = "say_failed_pay"; + } + if ((OFFER_SET)) return; + if ((ItemExists(param1, "item_gaxe_handle"))) + { + string reg.mitem.title = "Ask about broken axe"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "say_axe"; + string reg.mitem.callback = "say_axe"; + if ((ItemExists(param1, "item_ore_lorel"))) + { + } + string reg.mitem.title = "Show Loreldian Ore"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "say_ore"; + string reg.mitem.callback = "say_ore"; + } + } + + void say_axe() + { + if (param1 == "PARAM1") + { + string SPEAKER_ID = GetEntityIndex("ent_lastspoke"); + if (!(ItemExists(SPEAKER_ID, "item_gaxe_handle"))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SayText("Wow , this here was a real piece of work , before it broke."); + ScheduleDelayedEvent(4.0, "say_axe2"); + } + + void say_axe2() + { + SayText("Don t make them like this anymore, that s fer sure."); + ScheduleDelayedEvent(4.0, "say_axe3"); + } + + void say_axe3() + { + SayText(I + "can still see the bits of the blade end , " + I + " can tell it was made of Loreldian ore."); + ScheduleDelayedEvent(4.0, "say_axe4"); + } + + void say_axe4() + { + SayText("That s where the thing gets its magic, and why it only harms the unholy."); + ScheduleDelayedEvent(4.0, "say_axe5"); + } + + void say_axe5() + { + SayText("Most such cursed things are imbued with the power of The Fallen , either directly , or indirectly."); + ScheduleDelayedEvent(4.0, "say_axe6"); + } + + void say_axe6() + { + SayText("This stuff don t grow on trees, ya know. Even if it did, it s very difficult to work with."); + ScheduleDelayedEvent(4.0, "say_axe7"); + } + + void say_axe7() + { + SayText("But if ya find some , bring it back to me , together with this handle , and maybe " + I + " can fix ya up."); + } + + void say_ore() + { + ORE_TARGET = param1; + SayText("Wow , you actually found some of the stuff! Hmm... Let s see here..."); + ScheduleDelayedEvent(4.0, "say_ore2"); + } + + void say_ore2() + { + SayText("Okay , " + I + "think " + I + " can do this , but it ll cost ya."); + ScheduleDelayedEvent(4.0, "say_ore3"); + } + + void say_ore3() + { + SayText(I + " ll need 10,000 gold. Plus the hilt, of course."); + ScheduleDelayedEvent(2.0, "say_ore4"); + OFFER_SET = 1; + } + + void say_ore4() + { + SayText("Just tell me no , if yer not interested."); + } + + void say_gotgold() + { + GOLD_TARGET = param1; + SayText("Alright , just give me a few moments here."); + PlayAnim("critical", "attack"); + ScheduleDelayedEvent(1.0, "smith_sound"); + ScheduleDelayedEvent(2.0, "say_gotgold2"); + } + + void say_gotgold2() + { + PlayAnim("critical", "attack"); + ScheduleDelayedEvent(1.0, "smith_sound"); + ScheduleDelayedEvent(2.0, "say_gotgold3"); + } + + void say_gotgold3() + { + PlayAnim("critical", "attack2"); + ScheduleDelayedEvent(1.0, "smith_sound2"); + ScheduleDelayedEvent(1.0, "say_gotgold4"); + } + + void say_gotgold4() + { + SayText("There ya go! Good as new... Sorta..."); + // TODO: offer GOLD_TARGET axes_golden + GAVE_AXE2 = 1; + ScheduleDelayedEvent(3.0, "say_gotgold5"); + } + + void say_gotgold5() + { + SayText("Now , if you want to make sure it won t break AGAIN, well..."); + ScheduleDelayedEvent(4.0, "say_gotgold6"); + } + + void say_gotgold6() + { + SayText("To be honest , you d need a better smith than I. But I happen to know one: Thordac!"); + ScheduleDelayedEvent(4.0, "say_gotgold7"); + } + + void say_gotgold7() + { + SayText("Go over to Deralia , give him yer axe and my instructions here , telling him what ya need."); + // TODO: offer GOLD_TARGET item_roland_letter + ScheduleDelayedEvent(4.0, "say_gotgold8"); + } + + void say_gotgold8() + { + SayText(I + " warn ye though , he ll charge you up the nose for what you ll need done!"); + } + + void say_failed_pay() + { + if (!(OFFER_SET)) return; + if ((GAVE_AXE2)) return; + OFFER_SET = 0; + SayText("Well , if ya ain t got the money now, I can wait."); + } + + void smith_sound() + { + // PlayRandomSound from: "debris/metal3.wav", "debris/metal2.wav", "debris/metal1.wav" + array sounds = {"debris/metal3.wav", "debris/metal2.wav", "debris/metal1.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void smith_sound2() + { + EmitSound(GetOwner(), 0, "debris/bustmetal2.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/gatecity/chest.as b/scripts/angelscript/gatecity/chest.as new file mode 100644 index 00000000..0ab92926 --- /dev/null +++ b/scripts/angelscript/gatecity/chest.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 12)); + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + AddStoreItem(STORENAME, "axes_axe", 1, 0); + AddStoreItem(STORENAME, "swords_longsword", 1, 0); + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "scroll_summon_rat", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "sheath_back_snakeskin", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/gatecity/generalstore.as b/scripts/angelscript/gatecity/generalstore.as new file mode 100644 index 00000000..142f5c11 --- /dev/null +++ b/scripts/angelscript/gatecity/generalstore.as @@ -0,0 +1,157 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Generalstore : CGameScript +{ + int CANCHAT; + int JOB; + int NO_CHAT; + int NO_RUMOR; + int NPC_REACTS; + float SELL_RATIO; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + int STORE_CLOSED; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VEND_ARMORER; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_WEAPONS; + + Generalstore() + { + SOUND_DEATH = "none"; + STORE_CLOSED = 0; + STORE_NAME = "gatecity_generalstore"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.75; + NO_RUMOR = 1; + SELL_WEAPON_LEVEL = 3; + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + VEND_ARMORER = 0; + NO_CHAT = 1; + NPC_REACTS = 1; + } + + void OnSpawn() override + { + SetName("Egmont"); + SetHealth(25); + SetGold(25); + SetName("Egmont the Merchant"); + SetFOV(30); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 0); + SetInvincible(true); + SetModelBody(2, 0); + JOB = 0; + CANCHAT = 1; + STORE_CLOSED = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + createmystore(); + } + + void npcreact_targetsighted() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist(param1) <= 90) + { + SayText("Fine goods for sale!"); + } + } + } + + void say_hi() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist("ent_lastspoke") <= 90) + { + SayText("Can " + I + " get something for you?"); + } + } + } + + void say_job() + { + SayText("Sorry , " + I + " have no need to hire anyone."); + } + + void say_rumor() + { + SayText(I + " heard a fellow merchant from this city has gone missing."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "smallarms_rknife", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_knife", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_rsmallaxe", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_smallaxe", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_axe", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_doubleaxe", 1, 150, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_club", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer1", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "item_torch", RandomInt(5, 10), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "pack_bigsack", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "pack_heavybackpack", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_belt", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_belt_holster", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_holster", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_dagger", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_snakeskin", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_belt_snakeskin", 0, 100, SELL_RATIO); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + EmitSound(GetOwner(), CHAN_VOICE, "npc/goods.wav", "game.sound.maxvol"); + Say("[.34] [.24] [.35] [.40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void vendor_say_closed() + { + SayText("Sorry, I'm closed. I will reopen at seven in the morning."); + } + + void say_containers() + { + SayText("Weapon straps hold any type of weapon. Quivers hold amunition. Big sacks hold nearly everything else."); + SayText("Backpacks can hold nearly anything, useful for more a more generalized inventory."); + SayText("Spellbooks hold magic scrolls. The small sack can hold most items, but has very little room, so it can't hold much."); + SayText("I also offer more specialized sheaths, that can only hold specific weapon types."); + vend_mouth_move(); + } + +} + +} diff --git a/scripts/angelscript/gatecity/grocer.as b/scripts/angelscript/gatecity/grocer.as new file mode 100644 index 00000000..f9e656b6 --- /dev/null +++ b/scripts/angelscript/gatecity/grocer.as @@ -0,0 +1,117 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Grocer : CGameScript +{ + int CANCHAT; + int JOB; + int NPC_REACTS; + float SELL_RATIO; + string SOUND_DEATH; + int STORE_CLOSED; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + + Grocer() + { + SOUND_DEATH = "none"; + STORE_CLOSED = 0; + STORE_NAME = "gatecity_grocery"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.75; + NPC_REACTS = 1; + } + + void OnSpawn() override + { + SetName("Garin"); + SetHealth(25); + SetGold(25); + SetName("Garin the Grocer"); + SetFOV(30); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 0); + SetInvincible(true); + SetModelBody(2, 0); + JOB = 0; + CANCHAT = 1; + STORE_CLOSED = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + createmystore(); + } + + void npcreact_targetsighted() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist(param1) <= 90) + { + SayText("Fresh fruit!"); + } + } + } + + void say_hi() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist("ent_lastspoke") <= 90) + { + SayText("Can " + I + " get you an apple?"); + } + } + } + + void say_job() + { + SayText("I can't afford to hire any help."); + } + + void say_rumor() + { + SayText("I don't hear too much that goes on around here."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_apple", RandomInt(25, 30), 100); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + EmitSound(GetOwner(), CHAN_VOICE, "npc/goods.wav", "game.sound.maxvol"); + Say("[.34] [.24] [.35] [.40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void vendor_say_closed() + { + SayText("Sorry , " + I + " m closed. I will reopen at seven in the morning."); + } + +} + +} diff --git a/scripts/angelscript/gatecity/guard.as b/scripts/angelscript/gatecity/guard.as new file mode 100644 index 00000000..104c8bb8 --- /dev/null +++ b/scripts/angelscript/gatecity/guard.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Guard : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BG_MAX_HEAR_CIV; + string NO_STUCK_CHECKS; + string TRAVEL_HOME_TIME; + + Guard() + { + ATTACK_MOVERANGE = 32; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.85; + ANIM_DEATH = "death"; + ATTACK_DAMAGE = 50; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_IDLE = "idle"; + BG_MAX_HEAR_CIV = 1024; + ATTACK_HITCHANCE = 0.85; + } + + void OnSpawn() override + { + SetHealth(700); + SetGold(10); + SetName("Gate City Guard"); + SetFOV(359); + SetWidth(32); + SetHeight(64); + SetRace("hguard"); + SetRoam(false); + if (StringToLower(GetMapName()) == "gatecity") + { + SetMonsterClip(0); + SetStepSize(256); + } + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 3); + SetMoveAnim("walk"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumour", "rumour"); + CatchSpeech("say_mayor", "mayor"); + } + + void say_rumor() + { + say_rumour(); + } + + void say_hi() + { + SayText("Welcome to Gate City , Adventurer!"); + } + + void say_job() + { + SayText(I + " have no work for you. However..."); + ScheduleDelayedEvent(3, "say_rumour"); + } + + void say_rumour() + { + SayText("The [mayor] is looking for some help. Why not pay him a visit?"); + } + + void say_mayor() + { + SayText("The mayor can be found inside his office in the town hall."); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget == "unset")) return; + if (!(GetGameTime() > TRAVEL_HOME_TIME)) return; + TRAVEL_HOME_TIME = GetGameTime(); + TRAVEL_HOME_TIME += 3.0; + if (Distance(NPC_HOME_LOC, GetMonsterProperty("origin")) > 32) + { + NO_STUCK_CHECKS = 0; + npcatk_walk(); + npcatk_setmovedest(NPC_HOME_LOC, 10); + } + else + { + SetRoam(false); + NO_STUCK_CHECKS = 1; + SetAngles("face"); + } + } + + void cycle_up() + { + NO_STUCK_CHECKS = 0; + } + + void civilian_attacked() + { + string OFFENDER = param1; + if (!(GetEntityRace(OFFENDER) != "hguard")) return; + if (!(GetEntityRange(OFFENDER) <= BG_MAX_HEAR_CIV)) return; + if (!(m_hAttackTarget == "unset")) return; + NO_STUCK_CHECKS = 0; + npcatk_settarget(param1); + if (!(false)) return; + SetSayTextRange(1024); + int RAND_HALT = RandomInt(1, 4); + if (RAND_HALT == 1) + { + SayText("Hey you! Leave him alone!"); + } + if (RAND_HALT == 2) + { + SayText("You there , leave him be " + I + " said!"); + } + if (RAND_HALT == 3) + { + SayText("Stop that!"); + } + if (RAND_HALT == 4) + { + SayText("Halt! We ll have no trouble making around here!"); + } + } + +} + +} diff --git a/scripts/angelscript/gatecity/hunter.as b/scripts/angelscript/gatecity/hunter.as new file mode 100644 index 00000000..637db3b0 --- /dev/null +++ b/scripts/angelscript/gatecity/hunter.as @@ -0,0 +1,152 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Hunter : CGameScript +{ + int CANCHAT; + int JOB; + int NO_CHAT; + int NPC_REACTS; + float SELL_RATIO; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + int STORE_CLOSED; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VEND_ARMORER; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_WEAPONS; + + Hunter() + { + SOUND_DEATH = "none"; + STORE_CLOSED = 0; + STORE_NAME = "gatecity_huntery"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.75; + SELL_WEAPON_LEVEL = 3; + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + VEND_ARMORER = 0; + NO_CHAT = 1; + NPC_REACTS = 1; + } + + void OnSpawn() override + { + SetName("Durwyn"); + SetHealth(25); + SetGold(25); + SetName("Durwyn the Hunter"); + SetFOV(30); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(2, 0); + JOB = 0; + CANCHAT = 1; + STORE_CLOSED = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + createmystore(); + } + + void npcreact_targetsighted() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist(param1) <= 90) + { + SayText("Get your hunting supplies!"); + } + } + } + + void say_hi() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist("ent_lastspoke") <= 90) + { + SayText("Would you like a fine bow? Or perhaps a quiver?"); + } + } + } + + void say_job() + { + SayText(I + "have everything " + I + " need right now."); + } + + void say_rumor() + { + SayText("If you want some information about this area , speak with the miner in the tavern."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "proj_arrow_wooden", 600, 100, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_fire", 600, 100, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_broadhead", 600, 100, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_holy", 60, 200, 0.1, 30); + silver_tipped(); + AddStoreItem(STORE_NAME, "pack_quiver", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "bows_orcbow", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "bows_treebow", RandomInt(1, 3), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "bows_shortbow", RandomInt(1, 2), 115, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_knife", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_dagger", RandomInt(1, 5), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_sp", RandomInt(0, 2), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_tri", RandomInt(0, 1), 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "skin_ratpelt", 0, 130, 1.1); + AddStoreItem(STORE_NAME, "skin_boar", 0, 130, 1.1); + AddStoreItem(STORE_NAME, "skin_boar_heavy", 0, 130, 1.1); + AddStoreItem(STORE_NAME, "skin_bear", 0, 130, 1.1); + AddStoreItem(STORE_NAME, "proj_bolt_fire", 50, 300, 0, 25); + } + + void silver_tipped() + { + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "proj_arrow_silvertipped", 300, 135, 0, 30); + } + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + EmitSound(GetOwner(), CHAN_VOICE, "npc/goods.wav", "game.sound.maxvol"); + Say("[.34] [.24] [.35] [.40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void vendor_say_closed() + { + SayText("Sorry , " + I + " m closed. I will reopen at seven in the morning."); + } + +} + +} diff --git a/scripts/angelscript/gatecity/kendra.as b/scripts/angelscript/gatecity/kendra.as new file mode 100644 index 00000000..7993b7a8 --- /dev/null +++ b/scripts/angelscript/gatecity/kendra.as @@ -0,0 +1,124 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Kendra : CGameScript +{ + int QUEST_GOBLINPRISONER; + + void OnSpawn() override + { + SetHealth(30); + SetMaxHealth(30); + SetGold(50); + SetName("|Kendra"); + SetFOV(120); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human2.mdl"); + SetInvincible(true); + SetModelBody(0, 2); + SetModelBody(1, 0); + QUEST_GOBLINPRISONER = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_upset", "wrong"); + CatchSpeech("say_rumor", "rumour"); + CatchSpeech("say_steambow", "sucks"); + } + + void say_job() + { + say_upset(); + } + + void say_hi() + { + if (QUEST_GOBLINPRISONER == 0) + { + SayText(I + " m too [upset] to talk right now."); + } + if (QUEST_GOBLINPRISONER == 1) + { + SayText("Thank you Adventurer , " + I + " couldn t be happier!"); + } + } + + void say_rumor() + { + if (QUEST_GOBLINPRISONER == 0) + { + SayText("..."); + } + if (QUEST_GOBLINPRISONER == 1) + { + SayText(I + " haven t been out much recently."); + } + } + + void say_upset() + { + if (QUEST_GOBLINPRISONER == 0) + { + SayText("My husband has been missing for some time now."); + ScheduleDelayedEvent(3, "say_upset2"); + } + } + + void say_upset2() + { + SayText("He s a travelling merchant. I m affraid something has happened to him."); + ScheduleDelayedEvent(3, "say_upset3"); + } + + void say_upset3() + { + SayText(I + " wish there was some way to know that he is safe."); + } + + void game_menu_getoptions() + { + if (QUEST_GOBLINPRISONER == 0) + { + if ((ItemExists(param1, "item_letter_almund"))) + { + QUESTER_LETTER = param1; + string reg.mitem.title = "Give Almund's Letter"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_letter_almund"; + string reg.mitem.callback = "say_ending"; + } + } + } + + void say_ending() + { + QUEST_GOBLINPRISONER = 1; + SayText("This letter is from my husband..."); + ScheduleDelayedEvent(3, "say_ending2"); + } + + void say_ending2() + { + SayText("He s going to be coming home!"); + ScheduleDelayedEvent(3, "say_reward"); + } + + void say_reward() + { + SayText("Thank you Adventurer! Please take this gold!"); + // TODO: offer QUESTER_LETTER gold RandomInt(20, 30) + } + + void say_steambow() + { + SayText("You really think that yer going to get the Steam Crossbow that way?"); + } + +} + +} diff --git a/scripts/angelscript/gatecity/magicshop.as b/scripts/angelscript/gatecity/magicshop.as new file mode 100644 index 00000000..482cbaae --- /dev/null +++ b/scripts/angelscript/gatecity/magicshop.as @@ -0,0 +1,152 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Magicshop : CGameScript +{ + int CANCHAT; + int JOB; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int NPC_REACTS; + float SELL_RATIO; + string SOUND_DEATH; + int STORE_CLOSED; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VEND_ARMORER; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_WEAPONS; + + Magicshop() + { + SOUND_DEATH = "none"; + STORE_CLOSED = 0; + STORE_NAME = "gatecity_magicshop"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.75; + NO_JOB = 1; + NO_RUMOR = 1; + NO_HAIL = 1; + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + VEND_ARMORER = 0; + NPC_REACTS = 1; + } + + void OnSpawn() override + { + SetName("Galan"); + SetHealth(25); + SetGold(25); + SetName("Galan the Mage"); + SetFOV(30); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + JOB = 0; + CANCHAT = 1; + STORE_CLOSED = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + createmystore(); + } + + void npcreact_targetsighted() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist(param1) <= 90) + { + SayText("Can " + I + " get you some potions?"); + } + } + } + + void say_hi() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist("ent_lastspoke") <= 90) + { + SayText("Would you like a potion or a new spell?"); + } + } + } + + void say_job() + { + SayText("Until the Undermountains is open again , " + I + " have no need to hire you."); + } + + void say_rumor() + { + SayText("Goblins have been hanging around the city lately."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_mpotion", RandomInt(25, 30), 115, 0.2); + AddStoreItem(STORE_NAME, "health_lpotion", RandomInt(25, 30), 115, 0.2); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "health_spotion", RandomInt(1, 4), 120, 0.2); + } + AddStoreItem(STORE_NAME, "mana_mpotion", RandomInt(5, 10), 120, 0.2); + AddStoreItem(STORE_NAME, "scroll_fire_dart", RandomInt(1, 3), 135); + AddStoreItem(STORE_NAME, "scroll_lightning_weak", RandomInt(1, 3), 135); + AddStoreItem(STORE_NAME, "scroll2_fire_dart", RandomInt(1, 3), 135); + AddStoreItem(STORE_NAME, "scroll2_lightning_weak", RandomInt(1, 3), 135); + AddStoreItem(STORE_NAME, "sheath_spellbook", RandomInt(1, 3), 135); + AddStoreItem(STORE_NAME, "scroll2_glow", RandomInt(1, 2), 200); + AddStoreItem(STORE_NAME, "scroll_glow", RandomInt(3, 5), 200); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "mana_resist_fire", 1, 150, 0.1); + } + else + { + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORE_NAME, "mana_resist_cold", 1, 150, 0.1); + } + } + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + EmitSound(GetOwner(), CHAN_VOICE, "npc/goods.wav", "game.sound.maxvol"); + Say("[.34] [.24] [.35] [.40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void vendor_say_closed() + { + SayText("Sorry , " + I + " m closed. I will reopen at seven in the morning."); + } + +} + +} diff --git a/scripts/angelscript/gatecity/map_startup.as b/scripts/angelscript/gatecity/map_startup.as new file mode 100644 index 00000000..6a36bd5e --- /dev/null +++ b/scripts/angelscript/gatecity/map_startup.as @@ -0,0 +1,33 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "gatecity"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Gatecity"); + SetGlobalVar("G_MAP_DESC", "This Dwarven capital is carved deep inside the mountains."); + SetGlobalVar("G_MAP_DIFF", "Levels 10-25 / 100-400hp"); + SetGlobalVar("G_WARN_HP", 100); + SetGlobalVar("G_NO_STEP_ADJ", 1); + } + + void game_newlevel() + { + SetGlobalVar("global.map.allownight", 0); + } + +} + +} diff --git a/scripts/angelscript/gatecity/masterp.as b/scripts/angelscript/gatecity/masterp.as new file mode 100644 index 00000000..b98e11f5 --- /dev/null +++ b/scripts/angelscript/gatecity/masterp.as @@ -0,0 +1,68 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "help/first_npc.as" + +namespace MS +{ + +class Masterp : CGameScript +{ + int CANCHAT; + int TEMPLE; + + void OnSpawn() override + { + SetHealth(1); + SetGold(0); + SetName("Theobold"); + SetFOV(30); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + CANCHAT = 1; + TEMPLE = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_temple", "temple"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + } + + void say_hi() + { + SayText("Hail , Adventurer. What can the temple do for you today?"); + } + + void say_job() + { + SayText(A + "job? " + I + " am afraid the temple has no specific jobs for you."); + ScheduleDelayedEvent(3, "say_job2"); + } + + void say_rumor() + { + SayText("However , there are rumors of a [broken temple] to the north"); + TEMPLE = 1; + } + + void say_temple() + { + if ((TEMPLE)) + { + SayText("Yes , if good or evil becomes too strong in the area the temple is in , it will eventually crack in two"); + ScheduleDelayedEvent(3, "say_temple2"); + } + } + + void say_temple2() + { + SayText("There are many of these cracked temples scattered accross the land , and are usually filled with"); + SayText("monsters seeking to create yet more unbalance."); + } + +} + +} diff --git a/scripts/angelscript/gatecity/mayor.as b/scripts/angelscript/gatecity/mayor.as new file mode 100644 index 00000000..c26b7438 --- /dev/null +++ b/scripts/angelscript/gatecity/mayor.as @@ -0,0 +1,387 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Mayor : CGameScript +{ + int ALREADY_GAVE_AXE; + string L_ZOMBIE_QUEST_DONE; + string QUESTER_HEAD; + int QUEST_GOBLINCHIEF; + int QUEST_STARTER_LEFT; + string QUEST_WINNER; + int REMOVED_SPAWNS; + int REQ_ZOMBIES; + int RSPAWN_COUNT; + string SPAWN_LIST; + string USED_ME; + int ZOMBIE_COUNT; + int ZOMBIE_QUEST; + int ZOMBIE_QUEST_STARTER; + + void OnSpawn() override + { + SetName("dwarf_mayor"); + SetHealth(30); + SetGold(50); + SetName("|Mayor Vilhelm"); + SetFOV(120); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetInvincible(true); + QUEST_GOBLINCHIEF = 0; + ZOMBIE_COUNT = 0; + REQ_ZOMBIES = 40; + ZOMBIE_QUEST_STARTER = 0; + SetHearingSensitivity(10); + SetModelBody(2, 0); + SetMoveAnim("idle"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + CatchSpeech("zombie_countup", "zombie"); + CatchSpeech("say_axe", "axe"); + CatchSpeech("say_roland", "roland"); + } + + void say_hi() + { + SayText("Welcome to Gate City, Adventurer!"); + ScheduleDelayedEvent(3, "say_hi2"); + } + + void say_hi2() + { + if (QUEST_GOBLINCHIEF == 0) + { + SayText("I may have a [job] for you."); + } + } + + void say_rumor() + { + SayText("I've heard Helena has fended off a fierce orc invasion."); + } + + void say_job() + { + if ((ZOMBIE_QUEST_COMPLETE)) + { + SayText("Nah, I canna possibly ask you to do anymore. Ya've earned yer rest laddie."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((L_ZOMBIE_QUEST_DONE)) + { + SayText("Nah, I canna possibly ask you to do anymore. Ya've earned yer rest laddie."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((ZOMBIE_QUEST)) + { + zombie_countup(); + } + if ((ZOMBIE_QUEST)) return; + if (QUEST_GOBLINCHIEF == 0) + { + SayText("Yes, lately, the city has been bothered by goblins."); + ScheduleDelayedEvent(3, "say_job2"); + } + if (QUEST_GOBLINCHIEF == 1) + { + SayText("Well, there is ONE other thing I can have ya do."); + ScheduleDelayedEvent(4.0, "zombie_quest_desc"); + } + } + + void say_job2() + { + SayText("If the goblin chief is killed, the goblins in the area should leave."); + ScheduleDelayedEvent(3, "say_job3"); + } + + void say_job3() + { + SayText("Bring to me the head of the goblin chief and I'll reward you."); + } + + void game_menu_getoptions() + { + USED_ME = param1; + if ((ZOMBIE_QUEST)) + { + if (ZOMBIE_COUNT < REQ_ZOMBIES) + { + } + string reg.mitem.title = "How many more Zombies!?"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "zombie_countup"; + string reg.mitem.callback = "zombie_countup"; + } + if ((ItemExists(param1, "item_gaxe_handle"))) + { + string reg.mitem.title = "Ask about broken axe"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "say_axe"; + string reg.mitem.callback = "say_axe"; + } + if (!(QUEST_GOBLINCHIEF)) + { + if ((ItemExists(param1, "item_goblinhead"))) + { + } + QUESTER_HEAD = param1; + string reg.mitem.title = "Give Goblin's Head"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_goblinhead"; + string reg.mitem.callback = "say_ending"; + } + if (ZOMBIE_COUNT >= REQ_ZOMBIES) + { + SetGlobalVar("ZOMBIE_QUEST_COMPLETE", 1); + L_ZOMBIE_QUEST_DONE = 1; + } + if ((L_ZOMBIE_QUEST_DONE)) + { + if (!(ALREADY_GAVE_AXE)) + { + } + if (!((ZOMBIE_QUEST_STARTER !is null))) + { + ZOMBIE_QUEST_STARTER = 0; + USED_ME = 0; + } + if (USED_ME == ZOMBIE_QUEST_STARTER) + { + } + if (!(GAVE_HEAVY_WARN)) + { + GAVE_HEAVY_WARN = 1; + SayText("I be warnin' ya - it's a REAL heavy key. Be sure you pack light!"); + } + string reg.mitem.title = "Collect Zombie Reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "axe_em"; + } + } + + void say_ending() + { + QUEST_GOBLINCHIEF = 1; + SayText("Very good Adventurer! You have proven your worth!"); + ScheduleDelayedEvent(3, "say_ending2"); + } + + void say_ending2() + { + SayText("Take this gold as a reward! You will always be welcome in Gate City!"); + // TODO: offer QUESTER_HEAD gold RandomInt(50, 60) + CallExternal("all", "goblin_remove"); + SetGlobalVar("G_NO_GLOBINS", 1); + } + + void zombie_quest_desc() + { + SayText("Ya see we dwarves , being made of the stuff of Urdual and all , are particularly sensitive to imbalance."); + ScheduleDelayedEvent(4.0, "zombie_quest_desc2"); + } + + void zombie_quest_desc2() + { + SayText("Even , as luck would have it , from beyond the grave."); + ScheduleDelayedEvent(4.0, "zombie_quest_desc3"); + } + + void zombie_quest_desc3() + { + SayText("There's some mighty strange goins on these days, for I swear by the black and white seal more than half the dead are awake."); + ScheduleDelayedEvent(4.0, "zombie_quest_desc4"); + } + + void zombie_quest_desc4() + { + SayText("There's just too many dwarves wandering the catacombs, making it impossible to get to the better mining areas."); + ScheduleDelayedEvent(4.0, "zombie_quest_desc5"); + } + + void zombie_quest_desc5() + { + SayText("And Underkeep's cut off too, which does us no bit of good, not at all."); + ScheduleDelayedEvent(4.0, "zombie_quest_desc6"); + } + + void zombie_quest_desc6() + { + SayText("Kill me " + REQ_ZOMBIES + " zombies - and I'll reward you with the key to the city!"); + ScheduleDelayedEvent(4.0, "zombie_quest_desc7"); + } + + void zombie_quest_desc7() + { + SayText("Or well, something shaped vaguely like it, and a mite sharper too!"); + ScheduleDelayedEvent(4.0, "zombie_quest_desc8"); + } + + void zombie_quest_desc8() + { + SayText("Gotta get it all done today though, or there'll just be so many it won't be worth doin' no more!"); + ZOMBIE_QUEST = 1; + if (!(ZOMBIE_QUEST_STARTER == 0)) return; + ZOMBIE_QUEST_STARTER = QUESTER_HEAD; + } + + void zombie_countup() + { + if (!(QUEST_GOBLINCHIEF)) + { + SayText("Yes , we have a bit of a problem with the Undead. But one thing at a time , young lad: The goblins first!"); + ScheduleDelayedEvent(3, "say_job2"); + } + if (!(ZOMBIE_QUEST)) return; + if (ZOMBIE_COUNT < REQ_ZOMBIES) + { + int Z_COUNT = int(ZOMBIE_COUNT); + string Z_TO_GO = REQ_ZOMBIES; + Z_TO_GO -= ZOMBIE_COUNT; + int Z_TO_GO = int(Z_TO_GO); + SayText("Well, countin' by the screams from down there, I think ya've killed about " + Z_COUNT + " of em."); + SayText(I + "guess that leaves ya about " + Z_TO_GO + " left to kill. Keep at it!"); + PlayAnim("once", "nod"); + } + if (ZOMBIE_COUNT >= REQ_ZOMBIES) + { + if (!(L_ZOMBIE_QUEST_DONE)) + { + if ((IsEntityAlive(ZOMBIE_QUEST_STARTER))) + { + if (!(QUEST_STARTER_LEFT)) + { + } + string STARTER_ORIGIN = GetEntityOrigin(ZOMBIE_QUEST_STARTER); + if (Distance(ZOMBIE_QUEST_STARTER, GetMonsterProperty("origin")) > 512) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + SayText("I see you've come to collect yer reward?"); + SendInfoMsg("ent_lastspoke", "NPC Interaction Menu Use the +use key to to activate this NPC's interaction menu"); + } + L_ZOMBIE_QUEST_DONE = 1; + SetGlobalVar("ZOMBIE_QUEST_COMPLETE", 1); + if (!(REMOVED_SPAWNS)) + { + remove_spawns(); + } + } + } + + void axe_em() + { + if ((ALREADY_GAVE_AXE)) return; + QUEST_WINNER = param1; + SayText("Wow, you really did it. Ya must be about as restless as the undead themselves!"); + ScheduleDelayedEvent(4.0, "axe_em2"); + } + + void axe_em2() + { + if ((ALREADY_GAVE_AXE)) return; + ALREADY_GAVE_AXE = 1; + // TODO: offer QUEST_WINNER axes_golden + SayText("Well, here ya go, you've earned it. It's forged with my family's special recipe for undead slayin' axe!"); + } + + void zombie_died() + { + if (!(ZOMBIE_QUEST)) return; + ZOMBIE_COUNT += 1; + if (!(ZOMBIE_COUNT >= REQ_ZOMBIES)) return; + remove_spawns(); + SendInfoMsg("all", "You have killed a lotta zombies! You should speak with the mayor again..."); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(GetEntityRange("ent_lastheard") < 200)) return; + SetMoveDest("ent_lastheard"); + } + + void say_axe() + { + if (param1 == "PARAM1") + { + string SPEAKER_ID = GetEntityIndex("ent_lastspoke"); + if (!(ItemExists(SPEAKER_ID, "item_gaxe_handle"))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SayText("Oh , my , " + I + " see ya broke it..."); + ScheduleDelayedEvent(4.0, "say_axe2"); + } + + void say_axe2() + { + SayText("Now don't get angry! Truth be told it be my great, great, great grandfather's recipe for golden axe..."); + ScheduleDelayedEvent(4.0, "say_axe3"); + } + + void say_axe3() + { + SayText("He never wrote it down, so I be goin' off memory when I make these."); + ScheduleDelayedEvent(4.0, "say_axe4"); + } + + void say_axe4() + { + SayText("But talk Roland. He's the smith here in Gate City, and a fine one too."); + } + + void say_roland() + { + SayText("He's on the main road, head left as you make your way out."); + ScheduleDelayedEvent(4.0, "say_axe5"); + } + + void game_playerleave() + { + if (!(param1 == ZOMBIE_QUEST_STARTER)) return; + LogDebug("zombie quest starter disconect"); + QUEST_STARTER_LEFT = 1; + } + + void remove_spawns() + { + REMOVED_SPAWNS = 1; + SPAWN_LIST = "spawners6;spawners7;spawners8;spawners9;spawners10"; + RSPAWN_COUNT = 0; + remove_spawns_loop(); + } + + void remove_spawns_loop() + { + string L_CUR_SPAWN = GetToken(SPAWN_LIST, RSPAWN_COUNT, ";"); + string L_KILL_SPAWN = FindEntityByName(L_CUR_SPAWN); + DeleteEntity(L_KILL_SPAWN); + string L_NSPAWNS = GetTokenCount(SPAWN_LIST, ";"); + L_NSPAWNS -= 1; + if (!(RSPAWN_COUNT < L_NSPAWNS)) return; + RSPAWN_COUNT += 1; + ScheduleDelayedEvent(1.0, "remove_spawns_loop"); + } + +} + +} diff --git a/scripts/angelscript/gatecity/miner.as b/scripts/angelscript/gatecity/miner.as new file mode 100644 index 00000000..4c46ac82 --- /dev/null +++ b/scripts/angelscript/gatecity/miner.as @@ -0,0 +1,67 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Miner : CGameScript +{ + void OnSpawn() override + { + SetHealth(30); + SetMaxHealth(30); + SetGold(50); + SetName("|Roderick the Miner"); + SetFOV(120); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetInvincible(true); + SetModelBody(1, 8); + SetModelBody(2, 0); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + CatchSpeech("say_undermountains", "undermountain"); + } + + void say_hi() + { + SayText("Hail , Adventurer. " + I + " hope the [underkeep] would open soon."); + } + + void say_job() + { + SayText("You too? " + I + " need to find work as well."); + } + + void say_rumor() + { + SayText(A + " miner friend of mine says undead creatures lie below the city."); + } + + void say_undermountains() + { + SayText("The Underkeep goes through the deepest parts of the mountains."); + ScheduleDelayedEvent(3, "say_undermountains2"); + } + + void say_undermountains2() + { + SayText("Rare gems and metals can be found down there."); + ScheduleDelayedEvent(3, "say_undermountains3"); + } + + void say_undermountains3() + { + SayText("It s so dangerous there now, so the mayor has closed off all access."); + } + +} + +} diff --git a/scripts/angelscript/gatecity/priest.as b/scripts/angelscript/gatecity/priest.as new file mode 100644 index 00000000..9978e447 --- /dev/null +++ b/scripts/angelscript/gatecity/priest.as @@ -0,0 +1,68 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "monsters/base_chat.as" +#include "help/first_npc.as" + +namespace MS +{ + +class Priest : CGameScript +{ + int CANCHAT; + int NO_RUMOR; + + Priest() + { + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetHealth(1); + SetGold(0); + SetName("Priest of Urdual"); + SetFOV(30); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + CANCHAT = 1; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_theobold", "theobold"); + CatchSpeech("say_hall", "Hall"); + CatchSpeech("say_job", "job"); + } + + void say_hi() + { + SetVolume(10); + SayText("Do not bother me right now. Speak with Theobold."); + } + + void say_theobold() + { + SayText("Theobold is in the Hall of Balance , in the deepest part of the temple."); + } + + void say_hall() + { + SayText("The Hall of Balance is where light and dark meet. Now please , let me meditate."); + } + + void say_job() + { + SayText("Work? the Temple of Balance has no need for you at the moment."); + ScheduleDelayedEvent(3, "say_job2"); + } + + void say_job2() + { + SayText("If you need a job , try looking in the city."); + } + +} + +} diff --git a/scripts/angelscript/gatecity/storage.as b/scripts/angelscript/gatecity/storage.as new file mode 100644 index 00000000..1a82b942 --- /dev/null +++ b/scripts/angelscript/gatecity/storage.as @@ -0,0 +1,169 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "NPCs/base_storage.as" + +namespace MS +{ + +class Storage : CGameScript +{ + string ANIM_CHAT; + string ANIM_IDLE; + string ANIM_NO; + string ANIM_STORE; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + int CHAT_STEPS; + int DID_HELLO; + string GALA_CHEST_POS; + string SAYTEXT_GIVETICKET; + string SAYTEXT_HAND_WARN; + string SAYTEXT_ITEMS_HANDS; + string SAYTEXT_NOITEM; + string SAYTEXT_NOSTORABLES; + string SAYTEXT_NOTICKET; + string SAYTEXT_REDEEMTICKET; + string SAYTEXT_REFUND; + string SAYTEXT_SELECT_ITEM; + string SAYTEXT_SELECT_TICKET; + + Storage() + { + GALA_CHEST_POS = /* TODO: $relpos */ $relpos(20, 50, 50); + ANIM_CHAT = "nod"; + ANIM_NO = "attack"; + ANIM_STORE = "nod"; + ANIM_IDLE = "idle"; + SAYTEXT_REFUND = "No pressure! Here's yer fee back. Come back anytime."; + SAYTEXT_SELECT_ITEM = "Pick what yer gonna store."; + SAYTEXT_NOITEM = "Er, sorry, I didn't get the thing."; + SAYTEXT_NOTICKET = "Sorry, I didn't get yer ticket."; + SAYTEXT_NOSTORABLES = "Sorry, ya've got nuttin I can store for you."; + SAYTEXT_GIVETICKET = "Here's yer ticket! Remember, ya can redeem that at any Galat outlet."; + SAYTEXT_SELECT_TICKET = "What ticket would ya like to redeem?"; + SAYTEXT_HAND_WARN = "Put yer tickets in your hands where I can see them please."; + SAYTEXT_REDEEMTICKET = "There ya go! Thank you for using Galat Storage, please come again!"; + SAYTEXT_ITEMS_HANDS = "Gotta put yer stuff in yer hands before I can store it."; + } + + void OnSpawn() override + { + SetName("Vogdor of Galat s Storage"); + SetHealth(1); + SetInvincible(true); + SetRace("beloved"); + SetWidth(28); + SetHeight(96); + SetModel("dwarf/male1.mdl"); + SetIdleAnim("idle"); + SetMoveAnim("idle"); + SetRoam(false); + PlayAnim("once", "idle"); + SetModelBody(0, 1); + SetModelBody(1, 3); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetSayTextRange(1024); + CatchSpeech("heard_hi", "hail"); + CatchSpeech("heard_rumor", "job"); + CatchSpeech("heard_store", "shop"); + } + + void heard_hi() + { + DID_HELLO = 1; + PlayAnim("critical", ANIM_CHAT); + EmitSound(GetOwner(), 0, "npc/dwarfatservice.wav", 10); + SayText("ello thar, welcome to Galat s Weapon and Armor Storage..."); + ScheduleDelayedEvent(5.0, "heard_hi2"); + } + + void heard_hi2() + { + SayText("For a nominal fee , we can store yer things here for ya s."); + ScheduleDelayedEvent(5.0, "heard_hi3"); + } + + void heard_hi3() + { + SayText("We ll gives you a ticket for anything we can store."); + ScheduleDelayedEvent(5.0, "heard_hi4"); + } + + void heard_hi4() + { + SayText("Thanks to our contacts with the Felewyn wizards , ya can redeem this ticket at any Galat outlet!"); + ScheduleDelayedEvent(5.0, "heard_hi5"); + } + + void heard_hi5() + { + SayText("Galat has outlets all over - even in the forsaken town of Helena!"); + } + + void heard_rumor() + { + SayText("Hmm... Not much goin on here to be honest. We dwarves don t like change."); + } + + void heard_store() + { + OpenMenu(GetEntityIndex("ent_lastheard")); + } + + void game_menu_getoptions() + { + if (!(DID_HELLO)) + { + DID_HELLO = 1; + SayText("Welcome to Galat s Weapon and Armor Storage!"); + } + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "heard_hi"; + } + + void say_storage_chest() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_storage_chest"); + } + if ((BUSY_CHATTING)) return; + convo_anim(); + CHAT_STEPS = 6; + CHAT_STEP1 = "Ah, that bleedin thing be the new fangled Wondrous Chest of Storage."; + CHAT_STEP2 = "This bugger here can store items for you, no need for tickets. Makes me wonder what I'm doin' here."; + CHAT_STEP3 = "Just thrust your fists at it, whiling holdin' whatever it be you wantin' to get off yer hands."; + CHAT_STEP4 = "Then, when ye want yer stuff back, just open her up - or anyone like her, anywhere."; + CHAT_STEP5 = "The chest has some magic thingie on it that makes sure you, and only you, gets yer stuff."; + CHAT_STEP6 = "It's free to use. Seems the lads at Galat HQ are in a giving mood this turn. *cough*"; + chat_loop(); + } + + void say_wondrous() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_wondrous"); + } + if ((BUSY_CHATTING)) return; + convo_anim(); + CHAT_STEPS = 4; + CHAT_STEP1 = "Ah, here be the interestin' part of the whole deal. With one of these, you can summon that there chest in front of me."; + CHAT_STEP2 = "Meaning you, and yer friends, can have access to the Galat Wondrous Chest of Storage, wherever ye may happen to be."; + CHAT_STEP3 = "Only works once though - and ye need a fair bit of room to place the chest, so be careful."; + CHAT_STEP4 = "So, this where where they get ya. After suckering in with free use of the chest here, they charge you "; + CHAT_STEP4 += GALA_SCROLL_PRICE; + CHAT_STEP4 += " gold a piece the scrolls!"; + chat_loop(); + } + +} + +} diff --git a/scripts/angelscript/gatecity/tavern.as b/scripts/angelscript/gatecity/tavern.as new file mode 100644 index 00000000..de07836f --- /dev/null +++ b/scripts/angelscript/gatecity/tavern.as @@ -0,0 +1,123 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Tavern : CGameScript +{ + int CANCHAT; + int JOB; + int NPC_REACTS; + float SELL_RATIO; + string SOUND_DEATH; + int STORE_CLOSED; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + + Tavern() + { + SOUND_DEATH = "none"; + STORE_CLOSED = 0; + STORE_NAME = "gatecity_tavern"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.75; + NPC_REACTS = 1; + } + + void OnSpawn() override + { + SetName("Stein"); + SetHealth(25); + SetGold(25); + SetName("Stein the Barkeep"); + SetFOV(30); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 0); + SetInvincible(true); + SetModelBody(2, 0); + JOB = 0; + CANCHAT = 1; + STORE_CLOSED = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumor", "rumour"); + createmystore(); + } + + void npcreact_targetsighted() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist(param1) <= 90) + { + SayText("Care for a sip of ale?"); + } + } + } + + void say_hi() + { + if (!(STORE_CLOSED)) + { + if (GetEntityDist("ent_lastspoke") <= 90) + { + SayText("What can " + I + " get fer you?"); + } + } + } + + void say_job() + { + SayText(I + "have all the help " + I + " could use now."); + } + + void say_rumor() + { + SayText("Kendra has been upset recently. Maybe you can cheer her up?"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_apple", RandomInt(12, 15), 100); + AddStoreItem(STORE_NAME, "health_mpotion", RandomInt(3, 5), 115); + AddStoreItem(STORE_NAME, "drink_mead", RandomInt(15, 20), 100); + AddStoreItem(STORE_NAME, "drink_ale", RandomInt(15, 20), 100); + AddStoreItem(STORE_NAME, "drink_wine", RandomInt(7, 10), 300); + if (!(RandomInt(1, 5) == 1)) return; + AddStoreItem(STORE_NAME, "drink_forsuth", RandomInt(1, 2), 300); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + EmitSound(GetOwner(), CHAN_VOICE, "npc/goods.wav", "game.sound.maxvol"); + Say("[.34] [.24] [.35] [.40]"); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void vendor_say_closed() + { + SayText("Sorry , " + I + " m closed. I will reopen at seven in the morning."); + } + +} + +} diff --git a/scripts/angelscript/gatecity/vendor.as b/scripts/angelscript/gatecity/vendor.as new file mode 100644 index 00000000..06c4b0bd --- /dev/null +++ b/scripts/angelscript/gatecity/vendor.as @@ -0,0 +1,300 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Vendor : CGameScript +{ + string L_SERVICE; + int MAGIC_SHOP; + int NO_CHAT; + int NO_RUMOR; + int OVERCHARGE; + float SELL_RATIO; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + int STORE_BUYMENU; + string STORE_NAME; + int STORE_RESTOCK; + int STORE_SELLMENU; + string STORE_TRADEEXT; + string STORE_TRIGGERTEXT; + int STORE_TYPE; + string TEMP; + int VEND_ARMORER; + int VEND_CONTAINERS; + int VEND_NEWBIE; + string VEND_NO_GOODBYE; + int VEND_SPEC_SHEATHS; + int VEND_WEAPONS; + + Vendor() + { + SOUND_DEATH = "none"; + STORE_TRADEEXT = "trade"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + STORE_BUYMENU = 1; + STORE_RESTOCK = 0; + NO_RUMOR = 1; + MAGIC_SHOP = 0; + NO_CHAT = 1; + VEND_SPEC_SHEATHS = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(STORE_RESTOCK_TIME_LO, STORE_RESTOCK_TIME_HI)); + if ((STORE_RESTOCK)) + { + } + NpcStoreRemove(STORE_NAME, "allitems"); + vendor_addstoreitems(); + } + + void OnSpawn() override + { + SetHealth(35); + SetName("Traveling Merchant"); + SetFOV(30); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, RandomInt(0, 5)); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_store", "buy"); + CatchSpeech("say_job", "job"); + TEMP = "gatecity"; + TEMP += RandomInt(0, 400); + STORE_NAME = TEMP; + STORE_TYPE = RandomInt(1, 6); + OVERCHARGE = RandomInt(90, 160); + SELL_RATIO = Random(0.5, 0.9); + CatchSpeech("npc_say_store", STORE_TRIGGERTEXT); + NpcStoreCreate(STORE_NAME); + vendor_addstoreitems(); + } + + void vendor_addstoreitems() + { + store_food(); + store_equip(); + store_armor(); + store_weapon(); + store_magic(); + store_none(); + } + + void store_food() + { + if (!(STORE_TYPE == 1)) return; + AddStoreItem(STORE_NAME, "health_apple", RandomInt(3, 6), OVERCHARGE, SELL_RATIO); + } + + void store_equip() + { + if (!(STORE_TYPE == 2)) return; + AddStoreItem(STORE_NAME, "item_torch", RandomInt(3, 8), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "item_log", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "health_mpotion", RandomInt(0, 3), OVERCHARGE, 0.1); + AddStoreItem(STORE_NAME, "pack_bigsack", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "pack_heavybackpack", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_belt", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "health_mpotion", RandomInt(1, 5), OVERCHARGE, 0.1); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "health_lpotion", RandomInt(1, 2), OVERCHARGE, 0.1); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "health_spotion", RandomInt(1, 2), OVERCHARGE, 0.1); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "sheath_belt_snakeskin", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + } + VEND_NEWBIE = 1; + VEND_WEAPONS = 0; + VEND_CONTAINERS = 1; + VEND_ARMORER = 0; + } + + void store_armor() + { + if (!(STORE_TYPE == 3)) return; + AddStoreItem(STORE_NAME, "armor_helm_knight", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_mongol", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_plate", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_knight", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather_studded", RandomInt(1, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_mongol", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_plate", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "shields_buckler", RandomInt(1, 3), OVERCHARGE, SELL_RATIO); + VEND_NEWBIE = 0; + VEND_WEAPONS = 0; + VEND_CONTAINERS = 0; + VEND_ARMORER = 1; + } + + void store_weapon() + { + if (!(STORE_TYPE == 4)) return; + SELL_WEAPON_LEVEL = 3; + AddStoreItem(STORE_NAME, "smallarms_knife", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_dagger", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_shortsword", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_scimitar", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_smallaxe", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_doubleaxe", RandomInt(1, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_axe", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_2haxe", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer2", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_mace", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_maul", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_holster", 1, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_qs", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_sp", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "blunt_hammer3", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "axes_battleaxe", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "axes_scythe", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "swords_longsword", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + } + if (!(RandomInt(1, 5) == 1)) return; + AddStoreItem(STORE_NAME, "sheath_belt_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_dagger_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_axe_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_blunt_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_holster_snakeskin", 1, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_holster", 5, 100, SELL_RATIO); + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + VEND_ARMORER = 0; + } + + void store_magic() + { + if (!(STORE_TYPE == 5)) return; + MAGIC_SHOP = 1; + AddStoreItem(STORE_NAME, "scroll_fire_dart", RandomInt(1, 4), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_glow", RandomInt(1, 5), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_ice_shield", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_frost_xolt", RandomInt(0, 1), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_ice_shield", RandomInt(1, 3), 500, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_summon_rat", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_spellbook", RandomInt(1, 3), 135); + AddStoreItem(STORE_NAME, "scroll2_summon_rat", RandomInt(1, 3), OVERCHARGE, 0.25); + AddStoreItem(STORE_NAME, "mana_mpotion", RandomInt(3, 6), OVERCHARGE, 0.2); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "scroll_summon_undead", RandomInt(1, 2), 200, 0.5); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "scroll_rejuvenate", RandomInt(1, 2), 200, 0.5); + } + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 0; + VEND_ARMORER = 0; + } + + void store_none() + { + if (!(STORE_TYPE == 6)) return; + DeleteEntity(GetOwner()); + } + + void trade_done() + { + if (!(RandomInt(1, 3) == 1)) return; + if ((VEND_NO_GOODBYE)) + { + VEND_NO_GOODBYE = 0; + } + else + { + SayText("Come again soon!"); + } + } + + void game_menu_getoptions() + { + vendor_addstoremenu(param1); + } + + void vendor_addstoremenu() + { + string reg.mitem.id = "genericstore"; + int reg.mitem.priority = -100; + string reg.mitem.access = "all"; + if (!(STORE_CLOSED)) + { + string reg.mitem.title = "Shop"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "vendor_offerstore"; + } + else + { + string reg.mitem.title = "Closed"; + string reg.mitem.type = "disabled"; + } + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + vendor_used(); + vendor_offerstore(GetEntityIndex(m_hLastUsed)); + } + + void npc_say_store() + { + vendor_offerstore("ent_lastspoke"); + } + + void vendor_offerstore() + { + basevendor_offerstore(param1); + } + + void basevendor_offerstore() + { + int L_SERVICE = 0; + if ((STORE_BUYMENU)) + { + L_SERVICE = "buy"; + } + if ((STORE_SELLMENU)) + { + L_SERVICE += ";sell"; + } + NpcStoreOffer(STORE_NAME, param1, L_SERVICE, "trade"); + } + +} + +} diff --git a/scripts/angelscript/gertenheld_cave/game_master.as b/scripts/angelscript/gertenheld_cave/game_master.as new file mode 100644 index 00000000..9e5b8e76 --- /dev/null +++ b/scripts/angelscript/gertenheld_cave/game_master.as @@ -0,0 +1,27 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + int BGOBLIN_CHIEF_SLAIN; + int VGOBLIN_CHIEF_SLAIN; + + void bgoblin_chief_died() + { + string CHIEF_ORG = param1; + gold_spew(500, 2, 96, 4, 8, CHIEF_ORG); + BGOBLIN_CHIEF_SLAIN = 1; + } + + void vgoblin_chief_died() + { + string CHIEF_ORG = param1; + gold_spew(500, 2, 96, 4, 8, CHIEF_ORG); + VGOBLIN_CHIEF_SLAIN = 1; + } + +} + +} diff --git a/scripts/angelscript/gertenheld_cave/map_startup.as b/scripts/angelscript/gertenheld_cave/map_startup.as new file mode 100644 index 00000000..b16aa221 --- /dev/null +++ b/scripts/angelscript/gertenheld_cave/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "gertenheld_cave"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Vile Blood Goblin Caves"); + SetGlobalVar("G_MAP_DESC", "These caves are infested with the most tenacious goblins in all of daragoth"); + SetGlobalVar("G_MAP_DIFF", "Levels 35-40 / 500-800hp"); + SetGlobalVar("G_WARN_HP", 500); + } + +} + +} diff --git a/scripts/angelscript/global.as b/scripts/angelscript/global.as new file mode 100644 index 00000000..310b99f7 --- /dev/null +++ b/scripts/angelscript/global.as @@ -0,0 +1,43 @@ +#pragma context shared + +#include "races.as" +#include "titles.as" +#include "effects.as" +#include "global/sv_globals.as" +#include "global/server/treasure.as" + +namespace MS +{ + +class Global : CGameScript +{ + Global() + { + SetGlobalVar("G_MAX_SKILL_LEVEL", 45); + SetGlobalVar("G_MAX_ITEMS", 100); + SetGlobalVar("CHAN_AUTO", 0); + SetGlobalVar("CHAN_WEAPON", 1); + SetGlobalVar("CHAN_VOICE", 2); + SetGlobalVar("CHAN_ITEM", 3); + SetGlobalVar("CHAN_BODY", 4); + string reg.newchar.weaponlist = "swords_rsword;bows_treebow;smallarms_rknife;axes_rsmallaxe;blunt_hammer1;magic_hand_lightning_weak;polearms_qs"; + string reg.newchar.freeitems = "sheath_belt_holster;sheath_back;sheath_dagger;pack_sack"; + int reg.newchar.gold = 10; + string reg.hud.spawnbox = "models/hud/spawnbox.mdl"; + string reg.hud.quickslot.select = "ui/buttonrollover.wav"; + string reg.hud.quickslot.confirm = "ui/buttonclick.wav"; + string reg.hud.quickslot.assign = "ui/buttonrollover.wav"; + string reg.hud.char.active_weapon = "idle"; + string reg.hud.char.active_noweap = "attention"; + string reg.hud.char.figet = "stretch"; + string reg.hud.char.highlight = "jump"; + string reg.hud.char.upload = "run"; + string reg.hud.char.inactive = "sitdown"; + float reg.hud.desctext.x = 0.012; + float reg.hud.desctext.y = 0.72; + // TODO: registerdefaults + } + +} + +} diff --git a/scripts/angelscript/global/server/treasure.as b/scripts/angelscript/global/server/treasure.as new file mode 100644 index 00000000..65574cdc --- /dev/null +++ b/scripts/angelscript/global/server/treasure.as @@ -0,0 +1,96 @@ +#pragma context server + +namespace MS +{ + +class Treasure : CGameScript +{ + string CUR_ITEM; + string LOAD_ITEMS; + + Treasure() + { + SetGlobalVar("G_NOOB_ITEMS1", "smallarms_royaldagger;smallarms_stiletto;blunt_maul;blunt_mace;blunt_hammer1;blunt_hammer2;bows_treebow;bows_orcbow;smallarms_rknife;smallarms_knife;smallarms_dagger;bows_shortbow;shields_buckler;health_apple;"); + SetGlobalVar("G_NOOB_ITEMS2", "skin_boar;skin_boar_heavy;skin_ratpelt;skin_bear;drink_ale;drink_mead;swords_katana;drink_wine;blunt_warhammer;swords_rsword;swords_shortsword;smallarms_dirk;swords_longsword;swords_scimitar;"); + SetGlobalVar("G_NOOB_ITEMS3", "swords_bastardsword;item_galat_note_10;axes_rsmallaxe;axes_smallaxe;axes_axe;axes_battleaxe;axes_greataxe;axes_scythe;axes_2haxe;gold_pouch_5;gold_pouch_10;gold_pouch_25;sheath_holster_snakeskin;"); + SetGlobalVar("G_NOOB_ITEMS4", "sheath_belt_holster_snakeskin;blunt_gauntlets_leather;sheath_dagger_snakeskin;sheath_belt_snakeskin;sheath_belt_holster_snakeskin;sheath_axe_snakeskin;sheath_blunt_snakeskin;sheath_dagger;sheath_back;sheath_belt;"); + SetGlobalVar("G_NOOB_ITEMS5", "sheath_belt_holster;sheath_back_holster;sheath_belt_snakeskin;pack_bigsack;pack_xbowquiver;pack_quiver;armor_leather;armor_leather_torn;scroll_glow;swords_skullblade2;smallarms_craftedknife2;"); + SetGlobalVar("G_NOOB_ITEMS6", "polearms_qs;polearms_sp;"); + SetGlobalVar("G_NOOB_SETS", 6); + SetGlobalVar("G_GOOD_ITEMS1", "smallarms_huggerdagger2;smallarms_craftedknife;swords_katana2;swords_skullblade;swords_skullblade3;scroll_fire_dart;scroll_lightning_weak;armor_leather_studded;shields_ironshield;pack_archersquiver;"); + SetGlobalVar("G_GOOD_ITEMS2", "item_crystal_return;swords_nkatana;armor_helm_bronze;gold_pouch_50;gold_pouch_100;item_light_crystal;scroll2_lightning_weak;bows_longbow;scroll2_glow;scroll_poison;sheath_spellbook;"); + SetGlobalVar("G_GOOD_ITEMS3", "sheath_back_snakeskin;blunt_greatmaul;pack_heavybackpack;armor_helm_plate;armor_helm_mongol;armor_plate;armor_mongol;polearms_ba;mana_lleadfoot;"); + SetGlobalVar("G_GOOD_SETS", 3); + SetGlobalVar("G_GREAT_ITEMS1", "smallarms_huggerdagger;swords_katana3;bows_swiftbow;smallarms_craftedknife3;swords_skullblade4;scroll_summon_undead;armor_knight;armor_helm_knight;shields_lironshield;blunt_gauntlets;scroll2_rejuvenate;blunt_hammer3;"); + SetGlobalVar("G_GREAT_ITEMS2", "item_crystal_reloc;scroll2_fire_dart;scroll2_frost_xolt;scroll2_poison;armor_fireliz;armor_salamander;gold_pouch_200;scroll2_summon_rat;mana_leadfoot;mana_prot_spiders;swords_liceblade;swords_poison1;scroll_summon_rat;"); + SetGlobalVar("G_GREAT_ITEMS3", "armor_leather_gaz1;scroll2_summon_undead;axes_poison1;scroll_fire_ball;polearms_hal;mana_lleadfoot;"); + SetGlobalVar("G_GREAT_SETS", 3); + SetGlobalVar("G_NOOB_ARROWS", "proj_arrow_blunt;proj_arrow_bluntwooden;proj_arrow_wooden;proj_arrow_broadhead;proj_arrow_silvertipped;proj_bolt_wooden;proj_bolt_wooden"); + SetGlobalVar("G_GOOD_ARROWS", "proj_arrow_blunt;proj_arrow_broadhead;proj_arrow_silvertipped;proj_arrow_jagged;proj_arrow_fire;proj_bolt_iron"); + SetGlobalVar("G_GREAT_ARROWS", "proj_arrow_blunt;proj_arrow_jagged;proj_arrow_poison;proj_arrow_frost;proj_arrow_holy;proj_bolt_steel"); + SetGlobalVar("G_EPIC_ARROWS", "proj_arrow_blunt;proj_arrow_poison;proj_arrow_frost;proj_arrow_holy;proj_arrow_gholy;proj_arrow_gpoison;proj_arrow_lightning;proj_bolt_fire;proj_bolt_fire;proj_bolt_steel;proj_bolt_steel;proj_bolt_silver"); + if (GetGlobalArrayLength(G_ARRAY_EPIC) == -1) + { + CreateGlobalArray("G_ARRAY_EPIC"); + LOAD_ITEMS = "smallarms_huggerdagger3;6;scroll_fire_wall;5;smallarms_huggerdagger4;10;scroll_rejuvenate;10;smallarms_craftedknife4;10;mana_demon_blood;1"; + for (int i = 0; i < GetTokenCount(LOAD_ITEMS, ";"); i++) + { + add_epic_array(); + } + LOAD_ITEMS = "scroll2_lightning_chain;1;scroll_lightning_chain;1;item_galat_note_100;10;mana_regen;1;mana_vampire;1;swords_spiderblade;5;blunt_granitemace;5;swords_iceblade;2;gold_pouch_500;10"; + for (int i = 0; i < GetTokenCount(LOAD_ITEMS, ";"); i++) + { + add_epic_array(); + } + LOAD_ITEMS = "scroll_volcano;1;scroll_ice_wall;1;smallarms_bone_blade;1;mana_forget;10;mana_speed;1;mana_gprotection;1;mana_protection;2;blunt_granitemaul;5;mana_resist_cold;10;scroll2_fire_ball;3"; + for (int i = 0; i < GetTokenCount(LOAD_ITEMS, ";"); i++) + { + add_epic_array(); + } + LOAD_ITEMS = "mana_immune_fire;1;mana_immune_poison;1;scroll2_ice_wall;1;axes_thunder11;3;scroll2_turn_undead;5;scroll2_fire_wall;1"; + for (int i = 0; i < GetTokenCount(LOAD_ITEMS, ";"); i++) + { + add_epic_array(); + } + LOAD_ITEMS = "blunt_gauntlets_serpant;1;armor_helm_gaz1;1;smallarms_flamelick;2;armor_helm_golden;3;mana_resist_fire;5;mana_immune_cold;1"; + for (int i = 0; i < GetTokenCount(LOAD_ITEMS, ";"); i++) + { + add_epic_array(); + } + LOAD_ITEMS = "polearms_tri;5;polearms_nag;1;mana_lsb;1;mana_bravery;1;item_crystal_reloc;3;mana_lleadfoot;5;mana_st;5;armor_helm_alvo1;1"; + for (int i = 0; i < GetTokenCount(LOAD_ITEMS, ";"); i++) + { + add_epic_array(); + } + } + SetGlobalVar("G_NOOB_POTS", "health_apple;health_mpotion;health_lpotion;mana_mpotion;mana_resist_fire;mana_prot_spiders;mana_bravery;mana_fbrand;mana_faura;mana_paura;mana_st"); + SetGlobalVar("G_GOOD_POTS", "health_spotion;mana_forget;mana_resist_cold;mana_vampire;mana_prot_spiders;mana_bravery;mana_fbrand;mana_faura;mana_paura;mana_lsb;mana_lleadfoot;mana_st"); + SetGlobalVar("G_GREAT_POTS", "mana_forget;mana_protection;mana_resist_cold;mana_demon_blood;mana_regen;mana_immune_lightning;mana_bravery;mana_fbrand;mana_faura;mana_paura;mana_lsb;mana_lleadfoot"); + SetGlobalVar("G_EPIC_POTS", "mana_gprotection;mana_protection;mana_immune_cold;mana_immune_fire;mana_immune_poison;mana_demon_blood;mana_regen;mana_vampire;mana_leadfoot;mana_immune_lightning;mana_faura;mana_lsb;mana_sb;"); + } + + void add_epic_array() + { + string CUR_IDX = i; + CUR_ITEM = GetToken(LOAD_ITEMS, CUR_IDX, ";"); + if ((CUR_ITEM).length() <= 3) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + CUR_IDX += 1; + string CUR_FREQ = GetToken(LOAD_ITEMS, CUR_IDX, ";"); + for (int i = 0; i < CUR_FREQ; i++) + { + add_epic_item(); + } + } + + void add_epic_item() + { + GlobalArrayAdd("G_ARRAY_EPIC", CUR_ITEM); + } + +} + +} diff --git a/scripts/angelscript/global/sv_globals.as b/scripts/angelscript/global/sv_globals.as new file mode 100644 index 00000000..4e6716cb --- /dev/null +++ b/scripts/angelscript/global/sv_globals.as @@ -0,0 +1,176 @@ +#pragma context server + +namespace MS +{ + +class SvGlobals : CGameScript +{ + SvGlobals() + { + SetGlobalVar("NO_ADVANCED_SEARCHES", 0); + SetGlobalVar("G_VALID_SPAWN", 0); + SetGlobalVar("MAX_SUMMONS", 10); + SetGlobalVar("CURRENT_SUMMONS", 0); + SetGlobalVar("global.map.weather", "clear;clear;clear"); + SetGlobalVar("G_OVERRIDE_WEATHER_CODE", 0); + SetGlobalVar("G_NO_STEP_ADJ", 0); + SetGlobalVar("G_HELP_ON", 0); + SetGlobalVar("G_CRITICAL_NPCS", ""); + SetGlobalVar("G_SIEGE_MAP", "G_SIEGE_MAP"); + SetGlobalVar("G_FORCE_SPAWN_WEATHER", "G_FORCE_SPAWN_WEATHER"); + SetGlobalVar("G_EXP_MULTI", 1.0); + SetGlobalVar("G_NO_DROP", 0); + SetGlobalVar("G_UNDAMAEL_VULNERABLE", 0); + SetGlobalVar("G_SHAD_PRESENT", 0); + SetGlobalVar("G_SORC_NEXT_TELE", 0); + SetGlobalVar("G_MUMMY_NEXT_REBIRTH", 0); + SetGlobalVar("G_SKELE_NEXT_REBIRTH", 0); + SetGlobalVar("G_GUARDIAN_CHARGER", "G_GUARDIAN_CHARGER"); + SetGlobalVar("G_SORC_TELE_POINTS", 0); + SetGlobalVar("G_SORC_CHIEF_PRESENT", 0); + SetGlobalVar("G_TELF_ESCORTS", 0); + SetGlobalVar("G_ONE_SHOT", 0); + SetGlobalVar("G_WEATHER_LOCK", 0); + SetGlobalVar("G_NPC_COMBAT_MAP", 0); + SetGlobalVar("G_TELF_LEADER_COUNTER", 0); + SetGlobalVar("G_CURRENT_WEATHER", 0); + SetGlobalVar("G_TRACK_DEATHS", 0); + SetGlobalVar("G_TRACK_DEATHS_TRIGGER", 0); + SetGlobalVar("G_TRACK_DEATHS_EVENT", 0); + SetGlobalVar("G_SERVER_LOCKED", 0); + SetGlobalVar("G_SADJ_DEATHS", 0); + SetGlobalVar("G_SADJ_LEVELS", 0); + SetGlobalVar("G_GAVE_TOME1", 0); + SetGlobalVar("G_GAVE_TOME2", 0); + SetGlobalVar("G_GAVE_TOME3", 0); + SetGlobalVar("G_GAVE_TOME4", 0); + SetGlobalVar("G_GAVE_TOME5", 0); + SetGlobalVar("G_GAVE_TOME6", 0); + SetGlobalVar("G_GAVE_TOME7", 0); + SetGlobalVar("G_GAVE_ARTI1", 0); + SetGlobalVar("G_LAST_GABE_TARGET", 0); + SetGlobalVar("G_APRIL_FOOLS_MODE", 0); + SetGlobalVar("G_DEVELOPER_MODE", 0); + SetGlobalVar("G_TRACK_HP", 0); + SetGlobalVar("G_TRACK_KILLS", 0); + SetGlobalVar("G_LAST_VICTORY", 0); + SetGlobalVar("G_NPC_SUMMON_COUNT", 0); + SetGlobalVar("G_FLAMES_EAGLES", 0); + SetGlobalVar("G_ALERT_CYCLE", 0); + SetGlobalVar("G_SPECIAL_COMMANDS", 0); + SetGlobalVar("G_CHEST_TRACKER", 0); + if (GetGlobalArrayLength(G_ARRAY_DONATORS) == -1) + { + CreateGlobalArray("G_ARRAY_DONATORS"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:0:452876"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:1339151"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:0:15435276"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:5168669"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:4985228"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:838591"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:0:17717134"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:1184501"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:0:23328455"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:20479631"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:8122893"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:10951502"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:33635060"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:11447863"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:0:12864684"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:0:5900395"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:1:13564511"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:0:20630963"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:0:7019991"); + GlobalArrayAdd("G_ARRAY_DONATORS", "STEAM_0:0:69835"); + } + if (GetGlobalArrayLength(ARRAY_CRESTS) == -1) + { + CreateGlobalArray("ARRAY_CRESTS"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_crow"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_cwog"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_darktide"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_forestcroth"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_hov"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_pirates"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_torkalath"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_valor"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_wildfire"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_bou"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_gag"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_fmu"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_yoku"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_rip"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_gow"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_crew"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_wario"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_tfl"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_justice"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_revenge"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_socialist"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_pos"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_barnum"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_fellowship"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_hod"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_tdk"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_torkie"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_cloak_blue"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_neko"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_wotn"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_w_2"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_sor"); + GlobalArrayAdd("ARRAY_CRESTS", "crest_noclicky"); + CreateGlobalArray("ARRAY_CREST_OWNERS"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:1:11447863"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:1:759168"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:1:7087443"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:1:1679220"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:0:5003092"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:1:3695755;STEAM_0:0:3686251"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "none"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:0:69835"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:1:8122893"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:1:7087443"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:0:5900395"); + GlobalArrayAdd("ARRAY_CREST_OWNERS", "STEAM_0:0:10987306"); + } + if (GetGlobalArrayLength(G_ARRAY_DEVELOPERS) == -1) + { + CreateGlobalArray("G_ARRAY_DEVELOPERS"); + GlobalArrayAdd("G_ARRAY_DEVELOPERS", "STEAM_0:1:3967789"); + GlobalArrayAdd("G_ARRAY_DEVELOPERS", "STEAM_0:1:19627420"); + GlobalArrayAdd("G_ARRAY_DEVELOPERS", "STEAM_0:0:20470108"); + GlobalArrayAdd("G_ARRAY_DEVELOPERS", "STEAM_0:0:5003092"); + GlobalArrayAdd("G_ARRAY_DEVELOPERS", "STEAM_0:1:8122893"); + GlobalArrayAdd("G_ARRAY_DEVELOPERS", "STEAM_0:0:3937474"); + GlobalArrayAdd("G_ARRAY_DEVELOPERS", "STEAM_0:1:4985228"); + GlobalArrayAdd("G_ARRAY_DEVELOPERS", "STEAM_0:1:1955506"); + GlobalArrayAdd("G_ARRAY_DEVELOPERS", "STEAM_0:0:58762201"); + } + SetGlobalVar("G_TROLLCANO_OWNERS", "STEAM_0:0:19648837;STEAM_0:1:8122893"); + SetGlobalVar("G_DEVSTAFF_OWNERS", "STEAM_0:1:4985228;STEAM_0:1:8122893;STEAM_0:0:5003092;STEAM_0:0:20630963;"); + } + +} + +} diff --git a/scripts/angelscript/goblin_town/chest2.as b/scripts/angelscript/goblin_town/chest2.as new file mode 100644 index 00000000..a85e5f4f --- /dev/null +++ b/scripts/angelscript/goblin_town/chest2.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest2 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(3, 6)); + AddStoreItem(STORENAME, "health_lpotion", 3, 0); + AddStoreItem(STORENAME, "item_torch", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/goblin_town/chest3.as b/scripts/angelscript/goblin_town/chest3.as new file mode 100644 index 00000000..258f90e2 --- /dev/null +++ b/scripts/angelscript/goblin_town/chest3.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest3 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(3, 6)); + AddStoreItem(STORENAME, "health_mpotion", 2, 0); + } + +} + +} diff --git a/scripts/angelscript/goblin_town/chest4.as b/scripts/angelscript/goblin_town/chest4.as new file mode 100644 index 00000000..e9d4aac7 --- /dev/null +++ b/scripts/angelscript/goblin_town/chest4.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest4 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(3, 6)); + AddStoreItem(STORENAME, "health_mpotion", 2, 0); + } + +} + +} diff --git a/scripts/angelscript/goblin_town/chest5.as b/scripts/angelscript/goblin_town/chest5.as new file mode 100644 index 00000000..ff73f028 --- /dev/null +++ b/scripts/angelscript/goblin_town/chest5.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest5 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(2, 3)); + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/goblin_town/chest6.as b/scripts/angelscript/goblin_town/chest6.as new file mode 100644 index 00000000..6cdf1097 --- /dev/null +++ b/scripts/angelscript/goblin_town/chest6.as @@ -0,0 +1,20 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest6 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 7)); + AddStoreItem(STORENAME, "health_mpotion", 2, 0); + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + AddStoreItem(STORENAME, "swords_scimitar", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/goblin_town/chest7.as b/scripts/angelscript/goblin_town/chest7.as new file mode 100644 index 00000000..08aee65b --- /dev/null +++ b/scripts/angelscript/goblin_town/chest7.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest7 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(1, 10)); + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/goblin_town/chest8.as b/scripts/angelscript/goblin_town/chest8.as new file mode 100644 index 00000000..90106bf1 --- /dev/null +++ b/scripts/angelscript/goblin_town/chest8.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest8 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(3, 6)); + AddStoreItem(STORENAME, "health_lpotion", 2, 0); + AddStoreItem(STORENAME, "item_torch", 2, 0); + AddStoreItem(STORENAME, "axes_smallaxe", 1, 0); + AddStoreItem(STORENAME, "swords_shortsword", 1, 0); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "blunt_gauntlets", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/goblin_town/chest9.as b/scripts/angelscript/goblin_town/chest9.as new file mode 100644 index 00000000..0983f7dd --- /dev/null +++ b/scripts/angelscript/goblin_town/chest9.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest9 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(15, 20)); + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + AddStoreItem(STORENAME, "swords_longsword", 2, 0); + } + +} + +} diff --git a/scripts/angelscript/goblin_town/prisoner.as b/scripts/angelscript/goblin_town/prisoner.as new file mode 100644 index 00000000..0ab350c8 --- /dev/null +++ b/scripts/angelscript/goblin_town/prisoner.as @@ -0,0 +1,129 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Prisoner : CGameScript +{ + int NO_JOB; + int NO_RUMOR; + string NPC; + string NPC_O; + string PLAYER; + string PLAYER_O; + int QUEST_GOBLINPRISONER; + float distance; + + Prisoner() + { + NO_JOB = 1; + NO_RUMOR = 1; + } + + void game_precache() + { + Precache("npc/human1.mdl"); + } + + void OnSpawn() override + { + SetHealth(30); + SetMaxHealth(30); + SetGold(50); + SetName("Almund the Traveling Merchant"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(1, 2); + QUEST_GOBLINPRISONER = 0; + const int HEARING_RANGE = 175; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_no", "no"); + CatchSpeech("say_yes", "yes"); + } + + void say_hi() + { + playerdist(); + if (distance <= HEARING_RANGE) + { + if (QUEST_GOBLINPRISONER == 0) + { + SayText("Are you here to rescue me?"); + } + if (QUEST_GOBLINPRISONER == 1) + { + SayText(I + " can find my way home now"); + } + } + } + + void say_no() + { + playerdist(); + if (distance <= HEARING_RANGE) + { + if (QUEST_GOBLINPRISONER == 0) + { + SayText(I + "guess " + I + " am doomed to rot in this cage..."); + } + if (QUEST_GOBLINPRISONER == 1) + { + SayText(I + " can find my way home now"); + } + } + } + + void say_yes() + { + playerdist(); + if (distance <= HEARING_RANGE) + { + if (QUEST_GOBLINPRISONER == 1) + { + SayText("I can find my way home now."); + } + if (QUEST_GOBLINPRISONER == 0) + { + QUEST_GOBLINPRISONER = 1; + SayText("Thank you! My family must be worried about me!"); + ScheduleDelayedEvent(3, "ending"); + } + } + } + + void ending() + { + SayText("I was captured by these goblins while traveling between towns."); + ScheduleDelayedEvent(3, "ending2"); + } + + void ending2() + { + SayText("They stole all of my goods, but that doesn't matter."); + ScheduleDelayedEvent(3, "reward"); + } + + void reward() + { + SayText("Please take this letter to my wife, Kendra, in Gate City."); + // TODO: offer ent_lastspoke item_letter_almund + } + + void playerdist() + { + PLAYER = GetEntityIndex("ent_lastspoke"); + PLAYER_O = GetEntityOrigin(PLAYER); + NPC = GetEntityIndex(GetOwner()); + NPC_O = GetEntityOrigin(NPC); + distance = Distance(NPC_O, PLAYER_O); + } + +} + +} diff --git a/scripts/angelscript/goblintown/map_startup.as b/scripts/angelscript/goblintown/map_startup.as new file mode 100644 index 00000000..b4e39133 --- /dev/null +++ b/scripts/angelscript/goblintown/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "goblintown"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Goblin Town"); + SetGlobalVar("G_MAP_DESC", "The goblins have an extensive encampment here"); + SetGlobalVar("G_MAP_DIFF", "Levels 10-25 / 100-400hp"); + SetGlobalVar("G_WARN_HP", 100); + } + +} + +} diff --git a/scripts/angelscript/hall_of_deralia/king_of_deralia.as b/scripts/angelscript/hall_of_deralia/king_of_deralia.as new file mode 100644 index 00000000..25b37380 --- /dev/null +++ b/scripts/angelscript/hall_of_deralia/king_of_deralia.as @@ -0,0 +1,167 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class KingOfDeralia : CGameScript +{ + int BUSY_CHATTING; + float CHAT_DELAY; + string CURRENT_SPEAKER; + float FREQ_MOURN; + string GUARD1_ID; + string GUARD2_ID; + int IN_MOURNING; + string KING_MODEL; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + + KingOfDeralia() + { + FREQ_MOURN = Random(10, 30); + NO_RUMOR = 1; + NO_HAIL = 1; + NO_JOB = 1; + CHAT_DELAY = 5.0; + KING_MODEL = "npc/king.mdl"; + } + + void OnSpawn() override + { + SetName("da_king"); + SetName("The King of Deralia"); + SetHealth(1); + SetInvincible(true); + SetModel(KING_MODEL); + SetWidth(32); + SetHeight(96); + SetSayTextRange(640); + SetIdleAnim("idle1"); + PlayAnim("once", "idle1"); + CatchSpeech("say_hi", "hail"); + if (!(true)) return; + ScheduleDelayedEvent(5.0, "get_guard_id"); + if ((G_DAUGHTER_RESCUED)) return; + IN_MOURNING = 1; + FREQ_MOURN("do_mourn"); + } + + void get_guard_id() + { + GUARD1_ID = FindEntityByName("king_guard1"); + GUARD2_ID = FindEntityByName("king_guard2"); + } + + void do_mourn() + { + if ((G_DAUGHTER_RESCUED)) return; + FREQ_MOURN("do_mourn"); + if ((BUSY_CHATTING)) return; + int RND_MOURN = RandomInt(1, 3); + if (RND_MOURN == 1) + { + SayText("Oh woe is me! My princess is lost!"); + CallExternal(GUARD1_ID, "ext_comfort_king"); + } + if (RND_MOURN == 2) + { + SayText("My precious daughter! Where for art thou!"); + CallExternal(GUARD2_ID, "ext_comfort_king"); + } + if (RND_MOURN == 3) + { + SayText("Gone is my reason for living! Missing is my beloved daughter!"); + } + } + + void say_hi() + { + if ((BUSY_CHATTING)) return; + BUSY_CHATTING = 1; + if ((IsValidPlayer(param1))) + { + CURRENT_SPEAKER = GetEntityIndex(param1); + face_speaker(CURRENT_SPEAKER); + } + if ((IsValidPlayer("ent_lastspoke"))) + { + CURRENT_SPEAKER = GetEntityIndex("ent_lastspoke"); + face_speaker(CURRENT_SPEAKER); + } + if ((G_DAUGHTER_RESCUED)) return; + BUSY_CHATTING = 1; + CallExternal(GUARD1_ID, "ext_warn_address", CURRENT_SPEAKER); + CHAT_DELAY("say_daughter1"); + } + + void say_daughter1() + { + SayText("No! No... It s alright, he looks as though he maybe able to help."); + CHAT_DELAY("say_daughter2"); + } + + void say_daughter2() + { + PlayAnim("critical", "fear"); + SayText("The jester! You understand!? He s gone mad! He s kidnapped my beautiful young daughter!"); + CHAT_DELAY("say_daughter3"); + } + + void say_daughter3() + { + SayText("They say he was seen scurrying off to the dungeons! But these fools won t go after him!"); + ScheduleDelayedEvent(10.0, "say_daughter4"); + CallExternal(GUARD1_ID, "ext_sworn"); + } + + void say_daughter4() + { + SayText("...And " + I + " can t go down into the dungeons, why!?"); + PlayAnim("critical", ANIM_PLEADE); + CallExternal(GUARD2_ID, "ext_no_place_for"); + SetMoveDest(GUARD2_ID); + ScheduleDelayedEvent(10.0, "say_daughter5"); + } + + void say_daughter5() + { + PlayAnim("critical", ANIM_ANGRY); + face_speaker(CURRENT_SPEAKER); + SayText("See these useless fools " + I + " am surrounded by!?"); + CHAT_DELAY("say_daughter6"); + } + + void say_daughter6() + { + SayText("Captain Agarath could be trusted with the job , but he s not here, and won t be back for weeks."); + CHAT_DELAY("say_daughter7"); + } + + void say_daughter7() + { + PlayAnim("critical", ANIM_CRY); + SayText("Please , for pity s sake, rescue my daughter from that madman!"); + ScheduleDelayedEvent(10.0, "resume_morning"); + } + + void resume_morning() + { + BUSY_CHATTING = 0; + } + + void game_menu_getoptions() + { + if (!(G_DAUGHTER_RESCUED)) + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + } + } + +} + +} diff --git a/scripts/angelscript/helena/OTTC1.as b/scripts/angelscript/helena/OTTC1.as new file mode 100644 index 00000000..32e5091d --- /dev/null +++ b/scripts/angelscript/helena/OTTC1.as @@ -0,0 +1,67 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Ottc1 : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("armor_golden", 2); + } + + void chest_additems() + { + add_gold(RandomInt(55, 100)); + AddStoreItem(STORENAME, "crest_gag", 1, 0); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "scroll_ice_shield", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "health_spotion", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "swords_longsword", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "armor_plate", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "sheath_belt_snakeskin", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "armor_knights", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "armor_helm_golden", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "smallarms_huggerdagger4", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "smallarms_craftedknife4", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "blunt_gauntlets_serpant", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "swords_skullblade4", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/helena/archer.as b/scripts/angelscript/helena/archer.as new file mode 100644 index 00000000..07331650 --- /dev/null +++ b/scripts/angelscript/helena/archer.as @@ -0,0 +1,101 @@ +#pragma context server + +#include "NPCs/human_guard_archer.as" + +namespace MS +{ + +class Archer : CGameScript +{ + int NO_CHAT; + string NPC_NO_PLAYER_DMG; + + Archer() + { + NO_CHAT = 1; + } + + void OnSpawn() override + { + SetName("Archer"); + if (!(true)) return; + if (StringToLower(GetMapName()) == "foutpost") + { + SetRace("human"); + NPC_NO_PLAYER_DMG = 1; + } + if (!(GetMapName() == "helena")) return; + SetAngles("face"); + } + + void LightAttack() + { + int RAND = RandomInt(1, 100); + if (RAND > 60) + { + SetSayTextRange(500); + if (RAND < 85) + { + SayText("Small attack party incoming!"); + } + else + { + SayText("Raiding party!"); + } + } + } + + void MediumAttack() + { + int RAND = RandomInt(1, 100); + if (RAND > 60) + { + SetSayTextRange(500); + if (RAND < 85) + { + SayText("Large attack group heading for us!"); + } + else + { + SayText("Stand ready for the attack!"); + } + } + } + + void HeavyAttack() + { + int RAND = RandomInt(1, 100); + if (RAND > 60) + { + SetSayTextRange(500); + if (RAND < 85) + { + SayText("It s a siege!"); + } + else + { + SayText("We need everyone at the gates! " + NOW!); + } + } + } + + void CatapaultsIncoming() + { + int RAND = RandomInt(1, 100); + if (RAND > 60) + { + SetSayTextRange(500); + if (RAND < 85) + { + SayText("Take cover!"); + } + else + { + SayText("Projectiles inbound!"); + } + } + } + +} + +} diff --git a/scripts/angelscript/helena/bandit_boss_chest.as b/scripts/angelscript/helena/bandit_boss_chest.as new file mode 100644 index 00000000..6f3368d8 --- /dev/null +++ b/scripts/angelscript/helena/bandit_boss_chest.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class BanditBossChest : CGameScript +{ + void OnSpawn() override + { + EmitSound(GetOwner(), 0, "amb/quest1.wav", 10); + } + + void chest_additems() + { + add_gold(RandomInt(100, 1000)); + add_great_item(); + add_great_item(); + add_epic_item(); + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/helena/blacksmith.as b/scripts/angelscript/helena/blacksmith.as new file mode 100644 index 00000000..a4ec8de5 --- /dev/null +++ b/scripts/angelscript/helena/blacksmith.as @@ -0,0 +1,275 @@ +#pragma context server + +#include "NPCs/human_guard_sword.as" +#include "helena/helena_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Blacksmith : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + int BG_MAX_HEAR_CIV; + int CANCHAT; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + int CHAT_STEPS; + int COUNT; + int CUSTOM_GUARD; + float DELAY; + int HELENA_SAVED; + int MADE_IT_HOME; + string NEXT_DAGGER_CHAT; + int NO_CHAT; + float OVERCHARGE; + int REST; + string SELL_RATIO; + int SELL_WEAPON_LEVEL; + int STORE_CLOSED; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VEND_ARMORER; + + Blacksmith() + { + CUSTOM_GUARD = 1; + ANIM_DEATH = "dieforward"; + ANIM_ATTACK = "beatdoor"; + BG_MAX_HEAR_CIV = 400; + MADE_IT_HOME = 1; + COUNT = 0; + REST = 10; + DELAY = 1.05; + Precache("amb/fx_anvil.wav"); + NO_CHAT = 1; + STORE_NAME = "helena_bs"; + STORE_SELLMENU = 1; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_NAME = "helena_general_store"; + CANCHAT = 1; + OVERCHARGE = 1.5; + ANIM_DEATH = "dieforward"; + NO_CHAT = 1; + SELL_WEAPON_LEVEL = 6; + VEND_ARMORER = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(DELAY); + if ((MADE_IT_HOME)) + { + } + if (COUNT < 8) + { + PlayAnim("critical", "smith_hammer_time"); + COUNT += 1; + } + if (COUNT == 8) + { + if (REST > 0) + { + if (DELAY == 8.36) + { + PlayAnim("critical", "smith_hammer_look"); + COUNT = 0; + DELAY = 1.05; + REST--; + } + else + { + DELAY = 8.36; + } + } + } + if (REST == 0) + { + if (DELAY == 10.86) + { + PlayAnim("critical", "smith_hammer_idle"); + REST = 10; + COUNT = 0; + DELAY = 1.05; + } + else + { + DELAY = 10.86; + } + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(1.0); + if ((IsEntityAlive(GetOwner()))) + { + } + if ((IsEntityAlive(m_hAttackTarget))) + { + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + } + PlayAnim("once", ANIM_ATTACK); + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, 20.0, 0.8, "blunt"); + if ((false)) + { + } + npcatk_setmovedest(m_hLastSeen, 32, "internal"); + } + + void OnSpawn() override + { + SetHealth(550); + SetName("Dorfgan"); + SetWidth(20); + SetHeight(72); + SetRoam(false); + SetRace("hguard"); + SetModel("npc/blacksmith.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 2); + SetIdleAnim("smith_hammer_time"); + SetAngles("face"); + } + + void hammer_sound() + { + EmitSound(GetOwner(), 0, "amb/fx_anvil.wav", 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(0, 0); + SetModelBody(1, 0); + } + + void helena_flee() + { + } + + void helena_raid_end() + { + HELENA_SAVED = 1; + } + + void going_home() + { + ScheduleDelayedEvent(30, "check_at_home"); + } + + void check_at_home() + { + if ((MADE_IT_HOME)) return; + SetEntityOrigin(GetOwner(), MY_GUARD_POST); + SetAngles("face"); + } + + void baseguard_made_it_home() + { + SetModelBody(0, 1); + SetModelBody(1, 2); + SetIdleAnim("smith_hammer_time"); + if ((HELENA_SAVED)) + { + NpcStoreRemove(STORE_NAME, "allitems"); + OVERCHARGE = 0.75; + SELL_RATIO = 1.0; + vendor_addstoreitems(); + } + SetMenuAutoOpen(1); + STORE_CLOSED = 0; + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "skin_ratpelt", 0, 100, 1.0); + AddStoreItem(STORE_NAME, "skin_boar", 0, 100, 1.0); + AddStoreItem(STORE_NAME, "skin_boar_heavy", 0, 100, 1.0); + AddStoreItem(STORE_NAME, "skin_bear", 0, 100, 1.0); + AddStoreItem(STORE_NAME, "armor_leather_torn", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather_studded", RandomInt(0, 1), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_plate", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_plate", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "shields_ironshield", RandomInt(0, 3), OVERCHARGE, 0.25); + AddStoreItem(STORE_NAME, "shields_buckler", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_golden", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_golden", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_dark", 0, 100, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_dark", 0, 100, SELL_RATIO); + } + + void basevendor_offerstore() + { + if ((HELENA_SAVED)) return; + SayText("I'll buy any good animal skins you have as well."); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + Say("goods[.56] [.4] [.58] [.66]"); + CANCHAT = 0; + } + + void helena_raid_go() + { + baseguard_tobattle(); + } + + void baseguard_tobattle() + { + SetModelBody(0, 0); + SetModelBody(1, 0); + SetIdleAnim("idle1"); + SetMenuAutoOpen(0); + STORE_CLOSED = 1; + } + + void npcatk_ally_alert() + { + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + if (!(ItemExists(param1, "smallarms_rd"))) return; + if (!(GetGameTime() > NEXT_DAGGER_CHAT)) return; + NEXT_DAGGER_CHAT = GetGameTime(); + NEXT_DAGGER_CHAT += 60.0; + dagger_chat(); + } + + void dagger_chat() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "dagger_chat"); + } + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Oh wow, I think that rusted dagger you have there might be one of those ancient ether daggers."; + CHAT_STEP2 = "Back in the Age of Blood, some of the elvish armies used those. The blade passes through armor as if it weren't even there."; + CHAT_STEP3 = "I wish I could fix it up for you, but alas, my elbow joints can't take that kind of stress anymore."; + CHAT_STEP4 = "If only I was young again..."; + CHAT_STEPS = 4; + chat_loop(); + } + + void game_menu_getoptions() + { + if (!(ItemExists(param1, "smallarms_rd"))) return; + string reg.mitem.title = "About Rusted Dagger"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "dagger_chat"; + } + +} + +} diff --git a/scripts/angelscript/helena/default_human.as b/scripts/angelscript/helena/default_human.as new file mode 100644 index 00000000..bb3605c9 --- /dev/null +++ b/scripts/angelscript/helena/default_human.as @@ -0,0 +1,111 @@ +#pragma context server + +#include "monsters/base_civilian.as" +#include "helena/helena_npc.as" +#include "monsters/base_npc.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class DefaultHuman : CGameScript +{ + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int DEFAULT_HUMAN; + string FEMALE_MODEL; + string MALE_MODEL; + string MY_RAID_POS; + string MY_SEX; + + DefaultHuman() + { + MALE_MODEL = "npc/human1.mdl"; + FEMALE_MODEL = "npc/human2.mdl"; + Precache("npc/human1.mdl"); + Precache("npc/human2.mdl"); + MY_RAID_POS = "$relpos(0,0,0)"; + DEFAULT_HUMAN = 1; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "diesimple"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(RandomInt(25, 35)); + if (!(RAID_ON)) + { + } + if ((CanSee("ally", 180))) + { + } + SetMoveDest(m_hLastSeen); + SetVolume(2); + if (MY_SEX == "male") + { + Say("chitchat[.5] [.2] [.55] [.55] [.23] [.22]"); + } + if (MY_SEX == "female") + { + if (!(DID_FEM_VOICE)) + { + } + if ((IsValidPlayer(m_hLastSeen))) + { + EmitSound(GetOwner(), 0, "voices/human/female_vendor2.wav", 8); + DID_FEM_VOICE = 1; + Say("[.5] [.2] [.55] [.55] [.23] [.22] [.5] [.2] [.55] [.55] [.23] [.22]"); + } + } + if ((HELENA_SAVED)) + { + if (RandomInt(1, 2) == 1) + { + } + int RND_SAY = RandomInt(1, 2); + if (RND_SAY == 1) + { + SayText("Thank you for saving our little village."); + } + if (RND_SAY == 2) + { + SayText("Thanks to heros like you , we may yet turn this into a safe place to live."); + } + } + } + + void OnSpawn() override + { + SetHealth(25); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetName("Commoner"); + SetRoam(true); + SetBloodType("red"); + SetSkillLevel(-10); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + int GENDER_BENDER = RandomInt(1, 2); + if (GENDER_BENDER == 1) + { + MY_SEX = "male"; + SetModel(MALE_MODEL); + } + if (GENDER_BENDER == 2) + { + SetModel(FEMALE_MODEL); + MY_SEX = "female"; + } + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, RandomInt(0, 5)); + SetMoveAnim("walk"); + } + +} + +} diff --git a/scripts/angelscript/helena/dr_who.as b/scripts/angelscript/helena/dr_who.as new file mode 100644 index 00000000..13ac74c8 --- /dev/null +++ b/scripts/angelscript/helena/dr_who.as @@ -0,0 +1,246 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class DrWho : CGameScript +{ + string BUSY_CHATTING; + float CHAT_DELAY; + string CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEP7; + string CHAT_STEP8; + string CHAT_STEPS; + string DID_CONFUSED; + int DID_INTRO; + int HEARD_APPLE; + int NO_JOB; + int NO_RUMOR; + int PORTAL_OPEN; + int RANT_STEP; + int RESPONDED_NO; + string SPELL_PATIENTS; + + DrWho() + { + NO_JOB = 1; + NO_RUMOR = 1; + CHAT_DELAY = 4.0; + SetName("Torwhodoc Sa thraz, Keeper of Time"); + SetHealth(1); + SetInvincible(true); + SetNoPush(true); + SetRace("human"); + SetRoam(false); + SetModel("npc/balancepriest2.mdl"); + SetWidth(32); + SetHeight(72); + SetSayTextRange(512); + SetIdleAnim("idle1"); + CatchSpeech("say_hi", "hail"); + CatchSpeech("hear_no", "no"); + CatchSpeech("hear_apple", "apple"); + SPELL_PATIENTS = ""; + ScheduleDelayedEvent(1.0, "scan_for_ally"); + } + + void hear_apple() + { + if ((PORTAL_OPEN)) return; + PlayAnim("critical", "eye_wipe"); + SayText("An... An apple you say?"); + HEARD_APPLE = 1; + } + + void scan_for_ally() + { + if ((DID_INTRO)) return; + ScheduleDelayedEvent(2.0, "scan_for_ally"); + if (!(false)) return; + if (!(GetEntityRange(m_hLastSeen) < 512)) return; + DID_INTRO = 1; + say_hi(); + } + + void say_hi() + { + if (!(IsEntityAlive(param1))) + { + if ((IsEntityAlive("ent_lastspoke"))) + { + if (GetEntityRange("ent_lastspoke") > 256) + { + } + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if ((BUSY_CHATTING)) return; + if (!(DID_CONFUSED)) + { + PlayAnim("critical", "eye_wipe"); + CHAT_STEPS = 3; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "At last, we meet! ...or is this the second time...?"; + CHAT_STEP2 = "I'm always getting confused about these things you see..."; + CHAT_STEP3 = "You'd be confused too, if you were as unstuck in time as I..."; + chat_loop(); + DID_CONFUSED = 1; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((DID_CONFUSED)) + { + CHAT_STEPS = 8; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Huh? Oh, yes, sorry... I am Torwhodoc Sa'thraz - last of the time wizards!"; + CHAT_STEP2 = "...and you... You are the one who was... or is... or will be... or..."; + CHAT_STEP3 = "No matter, you'll have to do, assuming, you have the gold I asked for..."; + CHAT_STEP4 = "Surely you remember, after you saved Helena? I asked for... Oh nevermind."; + CHAT_STEP5 = "It doesn't matter if you remember or not, I need 1000 gold to eat *cough* I mean, open the portal."; + CHAT_STEP6 = "Granted, if you don't go through the portal and save the town, there'll be no place to eat at..."; + CHAT_STEP7 = "...but if I don't get the gold, I'll have nothing to eat with so...."; + CHAT_STEP8 = "Don't worry, I gave you something to make it worth the money. Remember?"; + chat_loop(); + } + } + + void hear_no() + { + if ((TALKING)) return; + if ((RESPONDED_NO)) return; + SayText("Oh , you will.... You will... Or... Maybe you already have?"); + RESPONDED_NO = 1; + } + + void open_portal() + { + string NAME_STR = GetEntityName(param1); + NAME_STR += "!"; + SayText("Quickly " + NAME_STR + " This time portal , it will not last long!"); + RANT_STEP = 0; + ScheduleDelayedEvent(20.0, "timer_rant_loop"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetSolid("none"); + PORTAL_OPEN = 1; + UseTrigger("time_tele"); + } + + void game_menu_getoptions() + { + if ((PORTAL_OPEN)) return; + string reg.mitem.title = "Give 1000 gold"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:1000"; + string reg.mitem.callback = "open_portal"; + string reg.mitem.cb_failed = "payment_failed"; + if (!(HEARD_APPLE)) return; + if (!(ItemExists(param1, "health_apple"))) return; + string reg.mitem.title = "Give Apple"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "health_apple"; + string reg.mitem.callback = "open_portal"; + } + + void payment_failed() + { + PlayAnim("critical", "no"); + int RND_RESP = RandomInt(1, 2); + if (RND_RESP == 1) + { + SayText("Come now , the last of the time wizards deserves better food than that will buy."); + } + if (RND_RESP == 2) + { + SayText("Now what sort of apples am " + I + " going to buy with that sort of cash? Bryan s of Edana, mayhaps?"); + } + } + + void timer_rant_loop() + { + SetSayTextRange(200); + float RND_DELAY = Random(40, 80); + RND_DELAY("timer_rant_loop"); + RANT_STEP += 1; + if (RANT_STEP > 9) + { + RANT_STEP = 1; + } + if ((BUSY_TALKING)) return; + convo_anim(); + if (RANT_STEP == 1) + { + SayText("Actually , now that " + I + " think of it.... Take your time."); + } + if (RANT_STEP == 2) + { + SayText(I + " mean , cannot run out of time. After all , time is infinite..."); + } + if (RANT_STEP == 3) + { + SayText("You are finite , Torwhodoc is finite... This... This is wrong tool."); + } + if (RANT_STEP == 4) + { + SayText("Do you know " + I + " had five brothers?"); + } + if (RANT_STEP == 5) + { + SayText("You would say we all have the same name , but all pronounced slightly differently..."); + } + if (RANT_STEP == 6) + { + SayText("TorwhoDOC... TORwhodoc... TorWHOdoc... TORwhoDOC... TorWHODOC.... TORWHOdoc..."); + } + if (RANT_STEP == 7) + { + SayText("So , you see , how " + I + " am become so very easily confused..."); + } + if (RANT_STEP == 8) + { + SayText("Torwhodoc have very sad life , probably have very sad death , but at least , there is symmetry."); + } + if (RANT_STEP == 9) + { + SayText("Wow , you re still here!? Comeon " + I + " gotta eat sometime!"); + } + } + + void chat_loop() + { + if (CHAT_STEP == 2) + { + convo_anim(); + } + if (CHAT_STEP == 4) + { + convo_anim(); + } + if (CHAT_STEP == 6) + { + convo_anim(); + } + if (CHAT_STEP == 8) + { + convo_anim(); + } + if (CHAT_STEP == 10) + { + convo_anim(); + } + } + +} + +} diff --git a/scripts/angelscript/helena/erkold.as b/scripts/angelscript/helena/erkold.as new file mode 100644 index 00000000..b9ce83cd --- /dev/null +++ b/scripts/angelscript/helena/erkold.as @@ -0,0 +1,162 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Erkold : CGameScript +{ + int ASKED; + int CAN_RUN; + int CAN_SCREAM; + int FLEE_DISTANCE; + int FRIGHTENED; + int NO_RUMOR; + int QUEST_3; + int SEE_ENEMY; + + Erkold() + { + NO_RUMOR = 1; + } + + void OnSpawn() override + { + SetHealth(25); + SetGold(0); + SetName("Erkold"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(1, 2); + FRIGHTENED = 0; + QUEST_3 = 0; + SEE_ENEMY = 0; + CAN_SCREAM = 1; + CAN_RUN = 1; + SetBloodType("red"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_sniff", "dorfgan"); + CatchSpeech("say_job", "orc"); + CatchSpeech("say_kidnapped", "kidnapped"); + CatchSpeech("say_yes", "yes"); + CatchSpeech("say_no", "no"); + SetAngles("face"); + } + + void say_hi() + { + SayText("..*sniff* ..hi there.."); + ScheduleDelayedEvent(1, "say_sniff"); + } + + void say_job() + { + PlayAnim("once", "panic1"); + SayText("Don t.. talk about those.. ..they [kidnapped] my wife and children.."); + } + + void say_sniff() + { + if (QUEST_3 == 0) + { + PlayAnim("once", "eye_wipe"); + SayText("..."); + } + if (QUEST_3 == 1) + { + say_quest2(); + } + if (QUEST_3 == 2) + { + say_quest3(); + } + } + + void say_kidnapped() + { + if (QUEST_3 == 0) + { + PlayAnim("once", "eye_wipe"); + SayText("The orcs.. they took my wife and children.. " + I + " don t know if they are alive.."); + ScheduleDelayedEvent(5, "say_quest1"); + } + if (QUEST_3 == 1) + { + say_quest2(); + } + if (QUEST_3 == 2) + { + say_quest3(); + } + } + + void say_quest1() + { + SayText("Perhaps... *sniff ...you could find them for me?"); + SendInfoMsg(GetEntityIndex("ent_lastspoke"), "DEVELOPER MESSAGE: QUEST NOT FINISHED Sorry, this quest can't be completed, yet."); + ASKED = 1; + } + + void say_yes() + { + if (!(ASKED == 1)) return; + if (QUEST_3 == 0) + { + SayText("You will?! Thank you! Thank you!"); + QUEST_3 = 1; + } + if (QUEST_3 == 1) + { + say_quest2(); + } + if (QUEST_3 == 2) + { + say_quest3(); + } + } + + void say_quest2() + { + PlayAnim("once", "eye_wipe"); + SayText("Please don t return without them..."); + } + + void say_quest3() + { + PlayAnim("once", "eye_wipe"); + SayText("If you do not want to [help] me , then please leave! *sniff*"); + } + + void game_recvoffer_gold() + { + ReceiveOffer("accept"); + SayText("..thank you , but nothing.. .. can replace.. *sniff*"); + PlayAnim("once", "eye_wipe"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + FLEE_DISTANCE = 2048; + run_away(m_hLastStruck, FLEE_DISTANCE, 15); + } + + void run_away() + { + PlayAnim("once", "break"); + SetMoveDest(param1); + SetMoveAnim("run1"); + ScheduleDelayedEvent(15, "stop_flee"); + } + + void stop_flee() + { + SetMoveAnim("walk_scared"); + } + +} + +} diff --git a/scripts/angelscript/helena/game_master.as b/scripts/angelscript/helena/game_master.as new file mode 100644 index 00000000..e40ca083 --- /dev/null +++ b/scripts/angelscript/helena/game_master.as @@ -0,0 +1,24 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + void OnSpawn() override + { + if ((G_OLDHELENA_AXE_PICKED)) + { + UseTrigger("SwitchAxes"); + } + } + + void helena_bandit_chest() + { + string OUT_POS = param1; + gm_createnpc(10.0, "helena/bandit_boss_chest", OUT_POS); + } + +} + +} diff --git a/scripts/angelscript/helena/genstore.as b/scripts/angelscript/helena/genstore.as new file mode 100644 index 00000000..2d3a9a17 --- /dev/null +++ b/scripts/angelscript/helena/genstore.as @@ -0,0 +1,79 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "helena/helena_npc.as" + +namespace MS +{ + +class Genstore : CGameScript +{ + string ANIM_DEATH; + int CANCHAT; + int NO_CHAT; + float OVERCHARGE; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + string STORE_NAME; + string STORE_TRIGGERTEXT; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_WEAPONS; + + Genstore() + { + SOUND_DEATH = "none"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_NAME = "helena_arthur_store"; + CANCHAT = 1; + OVERCHARGE = 1.5; + ANIM_DEATH = "dieforward"; + NO_CHAT = 1; + SELL_WEAPON_LEVEL = 6; + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + } + + void OnSpawn() override + { + SetHealth(25); + SetName("Arthur"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + Say("goods[.56] [.4] [.58] [.66]"); + CANCHAT = 0; + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "item_torch", RandomInt(1, 3), OVERCHARGE); + AddStoreItem(STORE_NAME, "pack_heavybackpack", 1, OVERCHARGE); + AddStoreItem(STORE_NAME, "smallarms_dagger", 1, OVERCHARGE); + AddStoreItem(STORE_NAME, "health_mpotion", RandomInt(10, 20), 115, 0.2); + AddStoreItem(STORE_NAME, "pack_heavybackpack", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "pack_bigsack", 2, OVERCHARGE, SELL_RATIO); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "blunt_maul", RandomInt(1, 3), OVERCHARGE); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "armor_leather_studded", 1, OVERCHARGE); + } + } + +} + +} diff --git a/scripts/angelscript/helena/harry.as b/scripts/angelscript/helena/harry.as new file mode 100644 index 00000000..8f8ccacc --- /dev/null +++ b/scripts/angelscript/helena/harry.as @@ -0,0 +1,123 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "helena/helena_npc.as" + +namespace MS +{ + +class Harry : CGameScript +{ + string ANIM_DEATH; + string MY_RAID_POS; + int NO_JOB; + int NO_RUMOR; + int OVERCHARGE; + int SAY_SO; + float SELL_RATIO; + string SOUND_DEATH; + string STORE_NAME; + string STORE_TRIGGERTEXT; + + Harry() + { + SOUND_DEATH = "none"; + ANIM_DEATH = "diesimple"; + STORE_NAME = "harrys_inn"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + SAY_SO = 0; + NO_JOB = 1; + NO_RUMOR = 1; + MY_RAID_POS = Vector3(-592, 383, 36); + OVERCHARGE = RandomInt(100, 150); + SELL_RATIO = Random(".5", ".9"); + } + + void OnSpawn() override + { + SetHealth(25); + SetName("Harry"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(1, 1); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_quiet", "quiet"); + CatchSpeech("say_orcs", "orcs"); + CatchSpeech("say_dorfgan", "dorfgan"); + CatchSpeech("say_erkold", "erkold"); + CatchSpeech("say_serrold", "serrold"); + CatchSpeech("say_inn", "inn"); + CatchSpeech("say_thanks", "ok"); + } + + void say_hi() + { + PlayAnim("once", "pondering3"); + SayText("Greetings to you adventurer!"); + ScheduleDelayedEvent(3, "say_hi2test"); + } + + void say_hi2test() + { + if (!(SAY_SO == 0)) return; + SayText(I + " am Harry , your humble innkeeper."); + setsayso(); + } + + void satsayso() + { + SAY_SO = 1; + } + + void say_orcs() + { + SayText("They disappear after 10 drinks!"); + } + + void say_dorfgan() + { + PlayAnim("once", "yes"); + SayText("Nice guy , he keeps order when my customers get a little fuzzy"); + } + + void say_erkold() + { + PlayAnim("once", "yes"); + SayText("Poor man.. Lost everything..."); + } + + void say_serrold() + { + SayText("Serrold? He was our village leader...until the attacks."); + ScheduleDelayedEvent(3, "say_serrold2"); + } + + void say_serrold2() + { + SayText("He wasn t paying attention and an arrow ran him through..."); + } + + void say_inn() + { + SayText("Yes , " + I + " own the inn over there. It s free to anyone passing through, but donations are welcome."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_apple", 15, OVERCHARGE); + AddStoreItem(STORE_NAME, "health_mpotion", 4, OVERCHARGE, 0.2); + AddStoreItem(STORE_NAME, "proj_arrow_wooden", 300, OVERCHARGE, 0, 60); + AddStoreItem(STORE_NAME, "drink_mead", 20, OVERCHARGE); + AddStoreItem(STORE_NAME, "drink_ale", 20, OVERCHARGE); + AddStoreItem(STORE_NAME, "drink_wine", 20, OVERCHARGE); + } + +} + +} diff --git a/scripts/angelscript/helena/helena.as b/scripts/angelscript/helena/helena.as new file mode 100644 index 00000000..8582d7b4 --- /dev/null +++ b/scripts/angelscript/helena/helena.as @@ -0,0 +1,115 @@ +#pragma context server + +namespace MS +{ + +class Helena : CGameScript +{ + int FREQ_CHECK; + int HPREQ_MEDIUM_WAVE; + int HPREQ_STRONG_WAVE; + int PLAYING_DEAD; + + Helena() + { + FREQ_CHECK = RandomInt(540, 1020); + HPREQ_MEDIUM_WAVE = 500; + HPREQ_STRONG_WAVE = 1250; + } + + void OnSpawn() override + { + SetName("script_helena"); + SetName(_); + ScheduleDelayedEvent(FREQ_CHECK, "check_for_raid"); + SetInvincible(true); + SetFly(true); + PLAYING_DEAD = 1; + SetAlive(1); + SetRace("beloved"); + LogDebug("helena NPC spawned"); + } + + void check_for_raid() + { + int RND_CHANCE = RandomInt(1, 5); + LogDebug("check_for_raid RND_CHANCE / 5"); + if (RND_CHANCE != 1) + { + ScheduleDelayedEvent(FREQ_CHECK, "check_for_raid"); + } + if (!(RND_CHANCE == 1)) return; + start_raid(); + } + + void start_raid() + { + string TOTAL_HP = "game.players.totalhp"; + LogDebug("start_raid TOTAL_HP"); + if (TOTAL_HP < HPREQ_MEDIUM_WAVE) + { + UseTrigger("spawn_orcs_weak"); + } + if (TOTAL_HP >= HPREQ_MEDIUM_WAVE) + { + if (TOTAL_HP < HPREQ_STRONG_WAVE) + { + } + UseTrigger("spawn_orcs_medium"); + } + if (TOTAL_HP >= HPREQ_STRONG_WAVE) + { + UseTrigger("spawn_orcs_strong"); + } + SendInfoMsg("all", "HELENA IS UNDER ATTACK! The Blackhand Orcs are raiding Helena!"); + CallExternal("all", "helena_raid_go"); + ScheduleDelayedEvent(1.0, "music_orcs"); + } + + void bandit_raid() + { + LogDebug("bandit_raid"); + ScheduleDelayedEvent(1.0, "bandit_raid2"); + UseTrigger("del_stuff"); + } + + void bandit_raid2() + { + SendInfoMsg("all", "HELENA IS UNDER ATTACK Bandits are raiding Helena!"); + CallExternal("all", "helena_raid_go"); + ScheduleDelayedEvent(1.0, "music_bandits"); + } + + void music_orcs() + { + // TODO: playmp3 all combat media/Half-Life11.mp3 + } + + void music_bandits() + { + // TODO: playmp3 all combat barbarian_gladiator.mp3 + } + + void music_raid_end() + { + // TODO: playmp3 all combat mshelena.mp3 + } + + void raid_done() + { + LogDebug("raid_done"); + CallExternal("all", "helena_raid_end"); + ScheduleDelayedEvent(FREQ_CHECK, "check_for_raid"); + ScheduleDelayedEvent(2.0, "music_raid_end"); + // TODO: playmp3 all stop + } + + void manual_start() + { + LogDebug("manual_start"); + start_raid(param1); + } + +} + +} diff --git a/scripts/angelscript/helena/helena_fear.as b/scripts/angelscript/helena/helena_fear.as new file mode 100644 index 00000000..b7390ba5 --- /dev/null +++ b/scripts/angelscript/helena/helena_fear.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class HelenaFear : CGameScript +{ + float DEATH_DELAY; + + HelenaFear() + { + DEATH_DELAY = 5.0; + } + + void OnSpawn() override + { + ScheduleDelayedEvent(0.5, "make_fear"); + } + + void make_fear() + { + CallExternal("all", "orc_raid"); + } + +} + +} diff --git a/scripts/angelscript/helena/helena_npc.as b/scripts/angelscript/helena/helena_npc.as new file mode 100644 index 00000000..cf2ec16c --- /dev/null +++ b/scripts/angelscript/helena/helena_npc.as @@ -0,0 +1,187 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class HelenaNpc : CGameScript +{ + int HELENA_RETURNED_HOME; + int HELENA_SAVED; + string HELENA_TELE_HOME_TIME; + string NPC_HOME_ANG; + string NPC_HOME_LOC; + int OVERCHARGE; + int RAID_ON; + string SCAREY_GUY; + float SELL_RATIO; + int STORE_CLOSED; + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + helena_flee(GetEntityIndex(m_hLastStruck), "struck"); + if ((DEFAULT_HUMAN)) return; + call_for_help(GetEntityIndex(m_hLastStruck)); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if (!(GetEntityRange(LAST_HEARD) < 128)) return; + if ((IsValidPlayer(LAST_HEARD))) return; + if (GetEntityRace(LAST_HEARD) == "orc") + { + helena_flee(LAST_HEARD, "heard_orc"); + } + if (GetEntityRace(LAST_HEARD) == "rogue") + { + helena_flee(LAST_HEARD, "heard_bandit"); + } + } + + void helena_flee() + { + SetRoam(true); + SCAREY_GUY = param1; + SetMoveAnim("run1"); + SetMoveDest(SCAREY_GUY); + ScheduleDelayedEvent(10.0, "helena_stopflee"); + } + + void helena_stopflee() + { + SetMoveAnim("walk_scared"); + } + + void helena_raid_go() + { + SetHearingSensitivity(4); + RAID_ON = 1; + HELENA_RETURNED_HOME = 0; + HELENA_SAVED = 0; + if (NPC_HOME_LOC == "NPC_HOME_LOC") + { + NPC_HOME_LOC = GetMonsterProperty("origin"); + NPC_HOME_ANG = GetMonsterProperty("angles"); + } + SetInvincible(false); + SetMoveAnim("walk_scared"); + SetIdleAnim("crouch_idle"); + SetMenuAutoOpen(0); + STORE_CLOSED = 1; + } + + void helena_raid_end() + { + HELENA_TELE_HOME_TIME = GetGameTime(); + HELENA_TELE_HOME_TIME += 60.0; + if (STORE_NAME != "STORE_NAME") + { + helena_return_home(); + } + if (STORE_NAME == "STORE_NAME") + { + helena_made_it_home(); + } + } + + void helena_return_home() + { + SetMoveDest(NPC_HOME_LOC); + if (Distance(GetMonsterProperty("origin"), NPC_HOME_LOC) < 10) + { + helena_made_it_home(); + int EXIT_SUB = 1; + } + if (GetGameTime() >= HELENA_TELE_HOME_TIME) + { + helena_made_it_home(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetGameTime() < HELENA_TELE_HOME_TIME)) return; + if ((HELENA_RETURNED_HOME)) return; + float RND_DELAY = Random(4, 9); + RND_DELAY("helena_return_home"); + } + + void helena_made_it_home() + { + OVERCHARGE = 50; + SELL_RATIO = 1.0; + STORE_CLOSED = 0; + HELENA_SAVED = 1; + if (STORE_NAME != "STORE_NAME") + { + SetEntityOrigin(GetOwner(), NPC_HOME_LOC); + string OLD_YAW = /* TODO: $vec.yaw */ $vec.yaw(NPC_HOME_ANG); + SetAngles("face"); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + SetRoam(false); + SetMoveDest("none"); + NpcStoreRemove(STORE_NAME, "allitems"); + vendor_addstoreitems(); + SetMenuAutoOpen(1); + } + else + { + SetIdleAnim("idle1"); + SetMoveAnim("walk"); + } + HELENA_RETURNED_HOME = 1; + RAID_ON = 0; + } + + void basevendor_offerstore() + { + if (!(HELENA_SAVED)) return; + int RND_SAY = RandomInt(1, 3); + if (RND_SAY == 1) + { + SayText("Thank you for saving our little town. For you , " + I + " ll offer a discount rate."); + } + if (RND_SAY == 2) + { + SayText("For the saviors of Helena , we offer discount rates."); + } + if (RND_SAY == 3) + { + SayText("Thank you again , please , consider everything on discount."); + } + Say("[.56] [.4] [.58] [.66]"); + } + + void call_for_help() + { + SetSayTextRange(1024); + int RAND_SCREAM = RandomInt(1, 4); + if (RAND_SCREAM == 1) + { + SayText("Help! Help!"); + } + if (RAND_SCREAM == 2) + { + SayText("Guards! Call the guards!"); + } + if (RAND_SCREAM == 3) + { + SayText("Save me!"); + } + if (RAND_SCREAM == 4) + { + SayText("Help! Help! " + I + " m being repressed!"); + } + CallExternal("all", "civilian_attacked", param1, IsValidPlayer(param1)); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((DEFAULT_HUMAN)) return; + CallExternal("all", "civilian_attacked", GetEntityIndex(m_hLastStruck), IsValidPlayer(m_hLastStruck)); + } + +} + +} diff --git a/scripts/angelscript/helena/larva_chest1.as b/scripts/angelscript/helena/larva_chest1.as new file mode 100644 index 00000000..2a7b3158 --- /dev/null +++ b/scripts/angelscript/helena/larva_chest1.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class LarvaChest1 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(25, 100)); + add_noob_item(); + add_noob_item(); + add_noob_item(); + add_noob_item(); + add_good_item(); + add_great_item(); + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "smallarms_k_fire", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/helena/map_startup.as b/scripts/angelscript/helena/map_startup.as new file mode 100644 index 00000000..528a0388 --- /dev/null +++ b/scripts/angelscript/helena/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "helena"; + MAP_WEATHER = "clear;clear;clear;rain;rain;rain"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "The Town of Helena"); + SetGlobalVar("G_MAP_DESC", "This provincial village is in constant danger of attack."); + SetGlobalVar("G_MAP_DIFF", "Levels 10-15 / 100-250hp"); + SetGlobalVar("G_WARN_HP", 100); + } + +} + +} diff --git a/scripts/angelscript/helena/memorialguard.as b/scripts/angelscript/helena/memorialguard.as new file mode 100644 index 00000000..faf736d1 --- /dev/null +++ b/scripts/angelscript/helena/memorialguard.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "NPCs/human_guard.as" + +namespace MS +{ + +class Memorialguard : CGameScript +{ + int NO_CHAT; + + Memorialguard() + { + NO_CHAT = 1; + } + + void OnSpawn() override + { + SetName("Memorial Guard"); + } + + void helena_raid_end() + { + SayText("All clear!"); + } + +} + +} diff --git a/scripts/angelscript/helena/merc.as b/scripts/angelscript/helena/merc.as new file mode 100644 index 00000000..f82a9275 --- /dev/null +++ b/scripts/angelscript/helena/merc.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "helena/vendor.as" + +namespace MS +{ + +class Merc : CGameScript +{ +} + +} diff --git a/scripts/angelscript/helena/old_harry.as b/scripts/angelscript/helena/old_harry.as new file mode 100644 index 00000000..6e62b369 --- /dev/null +++ b/scripts/angelscript/helena/old_harry.as @@ -0,0 +1,226 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class OldHarry : CGameScript +{ + int CAN_RUN; + int CAN_SCREAM; + int FRIGHTENED; + int NO_JOB; + int NO_RUMOR; + int SAY_SO; + int SEE_ENEMY; + string STORENAME; + + OldHarry() + { + NO_RUMOR = 1; + NO_JOB = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.2); + CanSee("enemy"); + if (SEE_ENEMY == 0) + { + } + flee(); + shiver(); + scream(); + } + + void OnSpawn() override + { + SetHealth(150); + SetGold(1); + SetName("Harry"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(1, 1); + SAY_SO = 0; + FRIGHTENED = 0; + SEE_ENEMY = 0; + CAN_SCREAM = 1; + CAN_RUN = 1; + STORENAME = "harrys_inn"; + createmystore(); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_hi", "hello"); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_hi", "greet"); + CatchSpeech("say_quiet", "quiet"); + CatchSpeech("say_orcs", "orcs"); + CatchSpeech("say_dorfgan", "dorfgan"); + CatchSpeech("say_erkold", "erkold"); + CatchSpeech("say_serrold", "serrold"); + CatchSpeech("say_thanks", "ok"); + CatchSpeech("say_thanks", "okay"); + CatchSpeech("say_thanks", "sure"); + } + + void say_hi() + { + PlayAnim("once", "pondering3"); + SayText("Greetings to you adventurer!"); + ScheduleDelayedEvent(3, "say_hi2test"); + } + + void say_hi2test() + { + SAY_SO = "equals"; + SayText(I + " am Harry , your humble innkeeper. If you want to stay here you will have to be [quiet] ."); + setsayso(); + } + + void satsayso() + { + SAY_SO = 1; + } + + void say_quiet() + { + PlayAnim("once", "pondering2"); + SayText(I + " m not really allowed to give booze to the adventurers.. Serrold said it would "deterioate their performance" and then he gave order to barricade the door.."); + ScheduleDelayedEvent(4, "say_quiet2"); + } + + void say_quiet2() + { + PlayAnim("once", "pondering1"); + SayText("If would have stopped as he said , i would be ruined by now! So " + I + " made a small hole in the wall.. you probably saw it on your way in!"); + } + + void say_orcs() + { + SayText("They disappear after 10 drinks!"); + } + + void say_dorfgan() + { + PlayAnim("once", "yes"); + SayText("Nice guy , he keeps order when my customers get a little fuzzy"); + } + + void say_erkold() + { + PlayAnim("once", "yes"); + SayText("Poor man.. Lost everything..Except his armor , which he sent to Dorfgan for repairs , if " + I + " recall him correctly."); + } + + void say_serrold() + { + PlayAnim("once", "no"); + SayText("Hmf. Our village elder . Never sat his foot in my beutiful Inn."); + } + + void recvoffer_gold() + { + recv_enoughgold(); + recv_notenoughgold(); + } + + void recv_enoughgold() + { + OFFER_AMT = ">="; + // TODO: DLLFunc recvoffer accept + SayText("Last time Erkold was here , he said he was looking for someone to take care of his [armor] ."); + PlayAnim("once", "yes"); + } + + void recv_notenoughgold() + { + OFFER_AMT = "<"; + // TODO: DLLFunc recvoffer reject + SayText(I + " am quite well off without your charity."); + PlayAnim("once", "no"); + } + + void playerused() + { + SetVolume(4); + // TODO: offerstore STORENAME buysell trade + } + + void createmystore() + { + // TODO: createstore STORENAME + AddStoreItem(STORENAME, "health_apple", 15, 100); + AddStoreItem(STORENAME, "health_mpotion", 4, 100, 0.2); + AddStoreItem(STORENAME, "proj_arrow_wooden", 300, 90, 0, 25); + AddStoreItem(STORENAME, "drink_mead", 20, 20); + AddStoreItem(STORENAME, "drink_ale", 20, 20); + AddStoreItem(STORENAME, "drink_wine", 20, 20); + } + + void flee() + { + if (!(CAN_RUN == 1)) return; + SetMoveAnim("run1"); + SetMoveDest("flee"); + SEE_ENEMY = 1; + CAN_RUN = 1; + ScheduleDelayedEvent(RandomInt(0, 4), "resetflee"); + } + + void shiver() + { + PlayAnim("once", "crouch_idle3"); + if (!(CAN_SCREAM == 1)) return; + SetVolume(8); + EmitSound(GetOwner(), "player/fallpain4.wav"); + Say("*[100]"); + ScheduleDelayedEvent(2, "flee"); + } + + void stopmoving() + { + if (!(SEE_ENEMY == 1)) return; + SEE_ENEMY = 0; + } + + void scream() + { + if (!(CAN_SCREAM == 1)) return; + SetVolume(8); + // PlayRandomSound from: "scientist/scream07.wav", "scientist/scream10.wav", "scientist/scream12.wav", "scientist/scream13.wav" + array sounds = {"scientist/scream07.wav", "scientist/scream10.wav", "scientist/scream12.wav", "scientist/scream13.wav"}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + CAN_SCREAM = 0; + Say("*[200]"); + ScheduleDelayedEvent(RandomInt(2, 6), "resetscream"); + } + + void resetscream() + { + CAN_SCREAM = 1; + } + + void resetflee() + { + CAN_RUN = 1; + } + + void struck() + { + SetVolume(8); + EmitSound(GetOwner(), "player/fallpain4.wav"); + flee(); + } + + void parry() + { + PlayAnim("once", "flinch"); + flee(); + } + +} + +} diff --git a/scripts/angelscript/helena/orcguard.as b/scripts/angelscript/helena/orcguard.as new file mode 100644 index 00000000..d9720b13 --- /dev/null +++ b/scripts/angelscript/helena/orcguard.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class Orcguard : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLINCH_CHANCE; + int NPC_GIVE_EXP; + + Orcguard() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 35); + NPC_GIVE_EXP = 100; + DROP_ITEM1 = "axes_battleaxe"; + DROP_ITEM1_CHANCE = 0.4; + ANIM_ATTACK = "battleaxe_swing1_L"; + FLINCH_CHANCE = 0.45; + ATTACK_ACCURACY = 0.8; + ATTACK_DMG_LOW = 18; + ATTACK_DMG_HIGH = 45; + } + + void orc_spawn() + { + SetHealth(600); + SetWidth(32); + SetHeight(60); + SetName("Orc Guard"); + SetHearingSensitivity(3); + SetStat("parry", 15); + SetStat("swordsmanship", 10); + SetDamageResistance("all", ".8"); + SetRoam(false); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 1); + } + +} + +} diff --git a/scripts/angelscript/helena/orcwarboss.as b/scripts/angelscript/helena/orcwarboss.as new file mode 100644 index 00000000..2f7af7dc --- /dev/null +++ b/scripts/angelscript/helena/orcwarboss.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/orc_chief.as" + +namespace MS +{ + +class Orcwarboss : CGameScript +{ +} + +} diff --git a/scripts/angelscript/helena/orcwarboss_ghost.as b/scripts/angelscript/helena/orcwarboss_ghost.as new file mode 100644 index 00000000..c96338a8 --- /dev/null +++ b/scripts/angelscript/helena/orcwarboss_ghost.as @@ -0,0 +1,91 @@ +#pragma context server + +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcwarbossGhost : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLINCH_CHANCE; + int INFERNAL; + int MOVE_RANGE; + int NPC_GIVE_EXP; + int ORC_SHIELD; + + OrcwarbossGhost() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(50, 250); + NPC_GIVE_EXP = 200; + ANIM_ATTACK = "battleaxe_swing1_L"; + FLINCH_CHANCE = 0.35; + DROP_ITEM1 = "axes_greataxe"; + DROP_ITEM1_CHANCE = 1.0; + INFERNAL = 0; + ATTACK_ACCURACY = 0.8; + ATTACK_DMG_LOW = 5; + ATTACK_DMG_HIGH = 150; + MOVE_RANGE = 64; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 225; + ORC_SHIELD = 0; + } + + void swing_axe() + { + baseorc_yell(); + float L_DMG = Random(ATTACK_DMG_LOW, ATTACK_DMG_HIGH); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, L_DMG, ATTACK_ACCURACY, "slash"); + if (INFERNAL == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 5, GetOwner(), RandomInt(30, 60)); + } + } + + void swing_sword() + { + swing_axe(); + } + + void orc_spawn() + { + SetHealth(1250); + SetWidth(32); + SetHeight(60); + SetName("Ghost Graznux the Warboss"); + SetHearingSensitivity(8); + SetStat("parry", 30); + SetStat("swordsmanship", 10); + SetDamageResistance("all", ".8"); + SetInvincible(false); + // TODO: UNCONVERTED: rendermode 5 + // TODO: UNCONVERTED: renderamt 255 + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 200); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 5); + } + + void warboss_godoff() + { + SetName("Graznux the Warboss"); + SetInvincible(false); + SetSayTextRange(1024); + SayText("What have you done to me!?"); + } + +} + +} diff --git a/scripts/angelscript/helena/orcwarrior_hard.as b/scripts/angelscript/helena/orcwarrior_hard.as new file mode 100644 index 00000000..0bc02891 --- /dev/null +++ b/scripts/angelscript/helena/orcwarrior_hard.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcwarriorHard : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FLINCH_CHANCE; + int NPC_GIVE_EXP; + + OrcwarriorHard() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(5, 25); + NPC_GIVE_EXP = 80; + ANIM_ATTACK = "battleaxe_swing1_L"; + FLINCH_CHANCE = 0.45; + ATTACK_ACCURACY = 0.7; + ATTACK_DMG_LOW = 16; + ATTACK_DMG_HIGH = 32; + } + + void orc_spawn() + { + SetHealth(350); + SetWidth(32); + SetHeight(60); + SetName("Orc Champion"); + SetHearingSensitivity(3); + SetStat("parry", 15); + SetStat("swordsmanship", 10); + SetDamageResistance("all", ".8"); + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 1); + } + +} + +} diff --git a/scripts/angelscript/helena/serrold.as b/scripts/angelscript/helena/serrold.as new file mode 100644 index 00000000..6bdf9506 --- /dev/null +++ b/scripts/angelscript/helena/serrold.as @@ -0,0 +1,229 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Serrold : CGameScript +{ + int CAN_RUN; + int CAN_SCREAM; + int GAVE_GOLD; + int GAVE_MONEY; + int INN_CLOSED; + int NO_JOB; + int SEE_ENEMY; + + Serrold() + { + NO_JOB = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.2); + CanSee("enemy"); + if (SEE_ENEMY == 0) + { + } + flee(); + shiver(); + scream(); + } + + void OnSpawn() override + { + SetHealth(125); + SetGold(2); + SetName("Serrold"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(1, 0); + INN_CLOSED = 0; + SEE_ENEMY = 0; + CAN_SCREAM = 1; + CAN_RUN = 1; + GAVE_MONEY = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_hi", "hello"); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_hi", "greet"); + CatchSpeech("say_orcs", "orcs"); + CatchSpeech("say_rumor", "people"); + CatchSpeech("say_dorfgan", "dorfgan"); + CatchSpeech("say_erkold", "erkold"); + CatchSpeech("say_serrold", "serrold"); + CatchSpeech("say_harry", "harry"); + CatchSpeech("say_innopen", "open"); + CatchSpeech("say_innopen", "hole"); + CatchSpeech("say_thanks", "ok"); + CatchSpeech("say_thanks", "okay"); + CatchSpeech("say_thanks", "sure"); + } + + void greet_players() + { + SetVolume(10); + Say("oldvillager1[50] *[180] *[80] *[80] *[150] *[50] *[50] *[50] *[50]"); + } + + void say_hi() + { + PlayAnim("once", "panic"); + SayText("Please help our town! The [orcs] are attacking!"); + ScheduleDelayedEvent(2, "say_hi2"); + } + + void say_hi2() + { + SayText("Even if we survive the attack , we still need [people] to keep order in the town!"); + } + + void say_orcs() + { + PlayAnim("once", "fear1"); + SayText("Evil creatures spawned from hell!"); + } + + void say_rumor() + { + PlayAnim("once", "idle3"); + SayText("[serrold] , [dorfgan] and [erkold] are the only ones who can run this village! If we all die , the village will die with us!"); + } + + void say_dorfgan() + { + PlayAnim("once", "yes"); + SayText("The blacksmith. He is a good man , not even in times like this does he stop forgeing!"); + } + + void say_erkold() + { + PlayAnim("once", "yes"); + SayText("The man at the burnt down house. He and his family used to supply the village with food , but " + I + " am not sure how it will go now when the family has been kidnapped.."); + } + + void say_serrold() + { + PlayAnim("once", "yes"); + SayText(I + " am Serrold , the town elder."); + } + + void say_harry() + { + PlayAnim("once", "no"); + SayText("That man is good for nothing. " + I + "closed down his Inn but " + I + " still get the feeling that something is going on in there.."); + } + + void say_innopen() + { + INN_CLOSED = "equals"; + if (!(GAVE_GOLD == 0)) return; + PlayAnim("once", "no"); + SayText("What! He opened it up again! Well.. " + I + "guess " + I + " can t stop him. Here s some gold for telling me."); + GAVE_GOLD = 1; + // TODO: offer ent_lastspoke gold RandomInt(1, 3) + } + + void say_thanks() + { + PlayAnim("once", "yes"); + SayText("Thank you! Now go out and kick some green butt!"); + } + + void robbed() + { + PlayAnim("once", "beatdoor"); + } + + void recvoffer_gold() + { + recv_enoughgold(); + recv_notenoughgold(); + } + + void recv_enoughgold() + { + OFFER_AMT = ">="; + // TODO: DLLFunc recvoffer accept + SayText(I + " know Harry knows something..."); + PlayAnim("once", "yes"); + } + + void recv_notenoughgold() + { + OFFER_AMT = "<"; + // TODO: DLLFunc recvoffer reject + SayText(I + " am quite well off without your charity."); + PlayAnim("once", "no"); + } + + void flee() + { + if (!(CAN_RUN == 1)) return; + SetMoveAnim("run1"); + SetMoveDest("flee"); + SEE_ENEMY = 1; + CAN_RUN = 1; + ScheduleDelayedEvent(RandomInt(0, 4), "resetflee"); + } + + void shiver() + { + PlayAnim("once", "crouch_idle3"); + if (!(CAN_SCREAM == 1)) return; + SetVolume(8); + EmitSound(GetOwner(), "player/fallpain4.wav"); + Say("*[100]"); + ScheduleDelayedEvent(2, "flee"); + } + + void stopmoving() + { + if (!(SEE_ENEMY == 1)) return; + SEE_ENEMY = 0; + } + + void scream() + { + if (!(CAN_SCREAM == 1)) return; + SetVolume(8); + // PlayRandomSound from: "scientist/scream07.wav", "scientist/scream10.wav", "scientist/scream12.wav", "scientist/scream13.wav" + array sounds = {"scientist/scream07.wav", "scientist/scream10.wav", "scientist/scream12.wav", "scientist/scream13.wav"}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + CAN_SCREAM = 0; + Say("*[200]"); + ScheduleDelayedEvent(RandomInt(2, 6), "resetscream"); + } + + void resetscream() + { + CAN_SCREAM = 1; + } + + void resetflee() + { + CAN_RUN = 1; + } + + void struck() + { + SetRoam(true); + SetVolume(8); + EmitSound(GetOwner(), "player/fallpain4.wav"); + flee(); + } + + void parry() + { + PlayAnim("once", "flinch"); + flee(); + } + +} + +} diff --git a/scripts/angelscript/helena/spid_chest1.as b/scripts/angelscript/helena/spid_chest1.as new file mode 100644 index 00000000..ad6c6d6e --- /dev/null +++ b/scripts/angelscript/helena/spid_chest1.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SpidChest1 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(25, 100)); + add_noob_item(); + add_noob_item(); + if (RandomInt(1, 5) == 1) + { + add_good_item(); + } + if (RandomInt(1, 5) == 1) + { + add_good_item(); + } + if (RandomInt(1, 5) == 1) + { + add_good_item(); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "mana_prot_spiders", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + add_great_item(); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_spiderblade", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/helena/stonewall.as b/scripts/angelscript/helena/stonewall.as new file mode 100644 index 00000000..70e25f6f --- /dev/null +++ b/scripts/angelscript/helena/stonewall.as @@ -0,0 +1,35 @@ +#pragma context server + +namespace MS +{ + +class Stonewall : CGameScript +{ + void OnSpawn() override + { + SetHealth(400); + SetInvincible(true); + SetRoam(false); + SetName("Stone Wall"); + SetDamageResistance("siege", 1.0); + SetBloodType("none"); + SetSkillLevel(0); + Precache("cindergibs.mdl"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + DeleteEntity(GetOwner()); + Effect("tempent", "gibs", "cindergibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1, 5, 15, 20, 5); + } + + void hit_by_siege() + { + SetInvincible(false); + DeleteEntity(GetOwner()); + Effect("tempent", "gibs", "cindergibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1, 5, 15, 20, 5); + } + +} + +} diff --git a/scripts/angelscript/helena/storage.as b/scripts/angelscript/helena/storage.as new file mode 100644 index 00000000..ec901c9d --- /dev/null +++ b/scripts/angelscript/helena/storage.as @@ -0,0 +1,365 @@ +#pragma context server + +#include "NPCs/base_storage.as" +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_civilian.as" +#include "helena/helena_npc.as" + +namespace MS +{ + +class Storage : CGameScript +{ + string ANIM_CHAT; + string ANIM_IDLE; + string ANIM_NO; + string ANIM_RUN; + string ANIM_STEP1; + string ANIM_STEP2; + string ANIM_STEP3; + string ANIM_STEP4; + string ANIM_STORE; + string ANIM_WALK; + int CHATTING; + float CHAT_DELAY_STEP1; + float CHAT_DELAY_STEP2; + float CHAT_DELAY_STEP3; + float CHAT_DELAY_STEP4; + float CHAT_DELAY_STEP5; + string CHAT_SOUND1; + string CHAT_SOUND2; + string CHAT_SOUND3; + string CHAT_SOUND4; + string CHAT_SOUND5; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + int CHAT_STEPS; + int DID_HELLO; + float FEE_HP_RATIO; + string GALA_CHEST_POS; + int IS_FLEEING; + int NO_HAIL; + int NO_JOB; + int RAID_ON; + string SAYTEXT_GIVETICKET; + string SAYTEXT_HAND_WARN; + string SAYTEXT_ITEMS_HANDS; + string SAYTEXT_NOITEM; + string SAYTEXT_NOSTORABLES; + string SAYTEXT_NOTICKET; + string SAYTEXT_REDEEMTICKET; + string SAYTEXT_REFUND; + string SAYTEXT_SELECT_ITEM; + string SAYTEXT_SELECT_TICKET; + string SAYTEXT_wondrous_NOFUNDS; + string SAYTEXT_wondrous_PURCHASED; + int STORE_CLOSED; + + Storage() + { + GALA_CHEST_POS = /* TODO: $relpos */ $relpos(0, 64, 64); + ANIM_CHAT = "pondering3"; + ANIM_NO = "no"; + ANIM_STORE = "return_needle"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk_scared"; + SAYTEXT_REFUND = "Ummm Okay... Here's yer fee back. Come back anytime."; + SAYTEXT_SELECT_ITEM = "What would you like to store?"; + SAYTEXT_NOITEM = "Er, sorry, I didn't get the the thing you were going to store."; + SAYTEXT_NOTICKET = "Sorry, I didn't get your ticket."; + SAYTEXT_NOSTORABLES = "Sorry, I'm afraid you have nothing I can store for you."; + SAYTEXT_GIVETICKET = "Here's your ticket! Remember, ya can redeem that at any Galat outlet."; + SAYTEXT_SELECT_TICKET = "Which ticket would do you like to redeem?"; + SAYTEXT_HAND_WARN = "Please place your tickets in your hands so I can redeem them for you."; + SAYTEXT_REDEEMTICKET = "Th.. th... Thank you for using Galat Storage... Please come again! ...SOON!"; + SAYTEXT_ITEMS_HANDS = "Please hold forth any items you wish to store in your hands."; + SAYTEXT_wondrous_NOFUNDS = "Eh, look, I can't take less than that for it. Sorry, but I need this job."; + SAYTEXT_wondrous_PURCHASED = "Here you go. Careful not to summon it into any walls. Remember: no refunds!"; + NO_HAIL = 1; + NO_JOB = 1; + } + + void OnSpawn() override + { + SetName("Smivel of Galat s Storage"); + SetHealth(30); + SetInvincible(false); + SetGold(0); + SetRace("human"); + SetWidth(28); + SetHeight(96); + SetModel("npc/human1.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + SetRoam(false); + PlayAnim("once", "idle1"); + SetModelBody(0, 3); + SetModelBody(1, 4); + SetSayTextRange(1024); + CatchSpeech("heard_hi", "hail"); + CatchSpeech("say_rumor", "job"); + CatchSpeech("heard_store", "shop"); + } + + void heard_hi() + { + if ((CHATTING)) return; + CHATTING = 1; + DID_HELLO = 1; + PlayAnim("critical", "checktie"); + SayText("Eh? Oh , hello good sir... Um... Welcome to Galat s Weapon and Armor Storage."); + EmitSound(GetOwner(), 0, "voices/helena/smivel/welcome_to_galats.wav", 10); + ScheduleDelayedEvent(5.8, "heard_hi2"); + } + + void heard_hi2() + { + SayText("For a nominal fee , we can store weapons and armor."); + EmitSound(GetOwner(), 0, "voices/helena/smivel/for_a_nominal_fee.wav", 10); + ScheduleDelayedEvent(4.2, "heard_hi3"); + } + + void heard_hi3() + { + SayText("We ll give you a ticket for any item that we can store."); + EmitSound(GetOwner(), 0, "voices/helena/smivel/well_give_you_a_ticket.wav", 10); + ScheduleDelayedEvent(3.1, "heard_hi4"); + } + + void heard_hi4() + { + SayText("Thanks to our contacts with the Felewyn wizards , you may redeem this ticket at any Galat outlet!"); + EmitSound(GetOwner(), 0, "voices/helena/smivel/thanks_to_our_contacts.wav", 10); + ScheduleDelayedEvent(5.9, "heard_hi5"); + } + + void heard_hi5() + { + CHATTING = 0; + PlayAnim("critical", "lean"); + SayText("There are many other Galat outlets... All of which are in safer places than mine!"); + EmitSound(GetOwner(), 0, "voices/helena/smivel/there_are_many_other_outlets.wav", 10); + } + + void say_rumor() + { + PlayAnim("critical", "panic"); + bchat_auto_mouth_move(3.0); + SayText(I + "m hoping to get promoted to the Deralia branch - IT ISN " + T + SAFE + HERE!); + EmitSound(GetOwner(), 0, "voices/helena/smivel/im_hoping_to_get_promoted.wav", 10); + } + + void heard_store() + { + OpenMenu(GetEntityIndex("ent_lastheard")); + } + + void game_menu_getoptions() + { + if (!(DID_HELLO)) + { + DID_HELLO = 1; + PlayAnim("critical", "eye_wipe"); + SayText("Umm... Oh yeah... Welcome to Galat s Weapon and Armor Storage!"); + EmitSound(GetOwner(), 0, "voices/helena/smivel/startled_hello.wav", 10); + } + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "heard_hi"; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + SetRoam(true); + SetMoveAnim(ANIM_RUN); + SetMoveDest(m_hLastStruck); + SetMenuAutoOpen(0); + if ((IS_FLEEING)) return; + IS_FLEEING = 1; + ScheduleDelayedEvent(20.0, "stop_fleeing"); + } + + void stop_fleeing() + { + SetMoveDest(MY_HOME); + SetMoveAnim(ANIM_WALK); + SetMenuAutoOpen(1); + SetRoam(false); + IS_FLEEING = 0; + } + + void orc_raid() + { + IS_FLEEING = 1; + game_struck(); + } + + void tele_home() + { + FEE_HP_RATIO = 0.01; + } + + void helena_made_it_home() + { + SetEntityOrigin(GetOwner(), NPC_HOME_LOC); + string OLD_YAW = /* TODO: $vec.yaw */ $vec.yaw(NPC_HOME_ANG); + SetAngles("face"); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + SetRoam(false); + SetMenuAutoOpen(1); + STORE_CLOSED = 0; + RAID_ON = 0; + } + + void say_storage_chest() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_storage_chest"); + } + if ((BUSY_CHATTING)) return; + convo_anim(); + CHAT_STEPS = 5; + CHAT_STEP1 = "Oh yeah, that thing. Umm.. That's the new magical storage chest Galat put out recently."; + CHAT_SOUND1 = "voices/helena/smivel/oh_yeah_that_thing.wav"; + CHAT_DELAY_STEP1 = 6.5; + CHAT_STEP2 = "Eh, well.. You can put things in it, and it will store them for you."; + CHAT_SOUND2 = "voices/helena/smivel/well_you_can_put_things_in_it.wav"; + CHAT_DELAY_STEP2 = 3.9; + CHAT_STEP3 = "You can take things out too, of course. Just treat it like any other chest for that."; + CHAT_SOUND3 = "voices/helena/smivel/you_can_take_things_out_too.wav"; + CHAT_DELAY_STEP3 = 4.7; + CHAT_STEP4 = "Each customer's items are kept in a Dim... Dim-en-sion-al pocket. So they, eh, don't get mixed up."; + CHAT_SOUND4 = "voices/helena/smivel/each_customers_items_are_stored.wav"; + CHAT_DELAY_STEP4 = 9.0; + CHAT_STEP5 = "It holds maybe a few dozen items or so. Feel free to use it. Damn thing gives me the creeps."; + CHAT_SOUND5 = "voices/helena/smivel/holds_a_dozen_items.wav"; + CHAT_DELAY_STEP5 = 6.3; + chat_loop(); + } + + void say_wondrous() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_wondrous"); + } + if ((BUSY_CHATTING)) return; + CHAT_STEPS = 4; + ANIM_STEP1 = "checktie"; + CHAT_STEP1 = "Oh yes, *cough* with Galat's new Wondrous Scroll, you can summon forth a Galat's Wondrous Chest, anywhere."; + CHAT_SOUND1 = "voices/helena/smivel/with_galats_new_wonderous_scroll.wav"; + CHAT_DELAY_STEP1 = 8.5; + ANIM_STEP2 = "lean"; + CHAT_STEP2 = "Which, I'd guess, would be very useful given the sort of places adventurer's like yourself get off to."; + CHAT_SOUND2 = "voices/helena/smivel/with_i_guess_would_be_very_useful.wav"; + CHAT_DELAY_STEP2 = 6.3; + ANIM_STEP3 = "eye_wipe"; + CHAT_STEP3 = "We're supposed to sell these things for... Wow... That can't be right... Ummm... "; + CHAT_STEP3 += GALA_SCROLL_PRICE; + CHAT_STEP3 += " gold."; + CHAT_SOUND3 = "voices/helena/smivel/were_supposed_to_sell_these_things_for.wav"; + CHAT_DELAY_STEP3 = 7.7; + ANIM_STEP4 = "no"; + CHAT_STEP4 = "I guess the higher ups at Galat figure adventurer's like yourself are just made of gold."; + CHAT_SOUND4 = "voices/helena/smivel/i_figure_the_higher_ups_at_galats.wav"; + CHAT_DELAY_STEP4 = 5.2; + LogDebug("say_wondrous ANIM_STEP1"); + chat_loop(); + } + + void say_wondrous_cant_afford() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/player_lacks_funds.wav", 10); + } + + void buy_scroll() + { + chat_move_mouth(4.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/player_buys_scroll.wav", 10); + } + + void open_betabank() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/player_declines_to_store.wav", 10); + } + + void cancel_trade() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/player_declines_to_store.wav", 10); + } + + void say_select_item() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/player_wants_to_store.wav", 10); + } + + void activate_storage() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/player_wants_to_store.wav", 10); + } + + void bteller_error_no_item() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/bank_didnt_get_the_item.wav", 10); + } + + void bteller_error_no_ticket() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/bank_failed_to_find_ticket.wav", 10); + } + + void bteller_store_error() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/no_items_to_store.wav", 10); + } + + void bteller_give_ticket() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/heres_your_ticket.wav", 10); + } + + void bteller_select_ticket() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/player_asks_to_redeem.wav", 10); + } + + void bteller_ticket_warn() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/please_place_ticket_in_hands.wav", 10); + } + + void bteller_ticket_redeemed() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/thank_you_for_using_galat_storage.wav", 10); + } + + void bteller_hand_warn() + { + if (!(DID_HELLO)) return; + if (!(GetGameTime() > NEXT_TALK)) return; + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/helena/smivel/please_hold_forth_items.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/helena/structure.as b/scripts/angelscript/helena/structure.as new file mode 100644 index 00000000..7dd757c6 --- /dev/null +++ b/scripts/angelscript/helena/structure.as @@ -0,0 +1,35 @@ +#pragma context server + +namespace MS +{ + +class Structure : CGameScript +{ + void OnSpawn() override + { + SetHealth(300); + SetInvincible(true); + SetRoam(false); + SetName("Stone Wall"); + SetDamageResistance("siege", 1.0); + SetBloodType("none"); + SetSkillLevel(0); + Precache("cindergibs.mdl"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + DeleteEntity(GetOwner()); + Effect("tempent", "gibs", "cindergibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1, 5, 15, 20, 5); + } + + void hit_by_siege() + { + SetInvincible(false); + DeleteEntity(GetOwner()); + Effect("tempent", "gibs", "cindergibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1, 5, 15, 20, 5); + } + +} + +} diff --git a/scripts/angelscript/helena/towerarcher.as b/scripts/angelscript/helena/towerarcher.as new file mode 100644 index 00000000..3c09d996 --- /dev/null +++ b/scripts/angelscript/helena/towerarcher.as @@ -0,0 +1,116 @@ +#pragma context server + +#include "monsters/base_npc_attack.as" + +namespace MS +{ + +class Towerarcher : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string ANIM_WALK; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HUNT; + int FLINCH_DELAY; + int HUNT_AGRO; + int MOVE_RANGE; + int PLAYING_DEAD; + string SND_ATTACK1; + string SND_ATTACK2; + string SND_ATTACK3; + string SND_BOW; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SOUND_DEATH; + string SOUND_PAINYELL; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + + Towerarcher() + { + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAINYELL = "voices/human/male_hit1.wav"; + SOUND_WARCRY1 = "voices/human/male_guard_shout.wav"; + SOUND_WARCRY2 = "voices/human/male_guard_shout2.wav"; + SND_ATTACK1 = "voices/human/male_hit1.wav"; + SND_ATTACK2 = "voices/human/male_hit2.wav"; + SND_ATTACK3 = "voices/human/male_hit3.wav"; + SND_BOW = "weapons/bow/bow.wav"; + SOUND_DEATH = "voices/human/male_die.wav"; + CAN_FLINCH = 1; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "shootorcbow"; + ARROW_DAMAGE_LOW = 8; + ARROW_DAMAGE_HIGH = 12; + MOVE_RANGE = 600; + ATTACK_RANGE = 1500; + ATTACK_SPEED = 900; + ATTACK_CONE_OF_FIRE = 4; + FLINCH_DELAY = 4; + CAN_FLEE = 0; + CAN_HUNT = 1; + HUNT_AGRO = 1; + } + + void OnSpawn() override + { + SetHealth(120); + SetFOV(180); + SetWidth(32); + SetHeight(85); + SetRace("hguard"); + SetName("Watchtower Archer"); + SetRoam(false); + SetSkillLevel(30); + SetGold(RandomInt(6, 10)); + SetHearingSensitivity(5); + SetModel("npc/archer.mdl"); + SetDamageResistance("all", ".8"); + SetModelBody(2, 2); + SetIdleAnim("idle1"); + SetMoveAnim("walk"); + SetActionAnim("shootorcbow"); + GiveItem("proj_arrow_iron", 30); + SetStat("parry", 2); + SetAngles("face"); + PLAYING_DEAD = 1; + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void shoot_arrow() + { + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= 50; + SetAngles("add_view.x"); + int LCL_ATKDMG = RandomInt(ARROW_DAMAGE_LOW, ARROW_DAMAGE_HIGH); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 5), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + SetModelBody(3, 0); + EmitSound(GetOwner(), SND_BOW); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(10); + // PlayRandomSound from: SOUND_PAINYELL, SND_STRUCK2, SOUND_PAINYELL + array sounds = {SOUND_PAINYELL, SND_STRUCK2, SOUND_PAINYELL}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/helena/troll.as b/scripts/angelscript/helena/troll.as new file mode 100644 index 00000000..58fcda3b --- /dev/null +++ b/scripts/angelscript/helena/troll.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/troll.as" + +namespace MS +{ + +class Troll : CGameScript +{ +} + +} diff --git a/scripts/angelscript/helena/vendor.as b/scripts/angelscript/helena/vendor.as new file mode 100644 index 00000000..d50e665e --- /dev/null +++ b/scripts/angelscript/helena/vendor.as @@ -0,0 +1,349 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "help/first_vendor.as" +#include "helena/helena_npc.as" +#include "shops/base_magic.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor_confirm.as" + +namespace MS +{ + +class Vendor : CGameScript +{ + string ANIM_DEATH; + string L_SERVICE; + int MAGIC_SHOP; + int NO_CHAT; + int OVERCHARGE; + float SELL_RATIO; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + int STORE_BUYMENU; + string STORE_NAME; + int STORE_RESTOCK; + int STORE_SELLMENU; + string STORE_TRADEEXT; + string STORE_TRIGGERTEXT; + int STORE_TYPE; + string TEMP; + int VEND_ARMORER; + int VEND_CONTAINERS; + int VEND_NEWBIE; + string VEND_NO_GOODBYE; + int VEND_WEAPONS; + + Vendor() + { + SOUND_DEATH = "none"; + ANIM_DEATH = "diesimple"; + STORE_TRADEEXT = "trade"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + STORE_BUYMENU = 1; + STORE_RESTOCK = 0; + NO_CHAT = 1; + MAGIC_SHOP = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(STORE_RESTOCK_TIME_LO, STORE_RESTOCK_TIME_HI)); + if (!(RAID_ON)) + { + } + if ((STORE_RESTOCK)) + { + } + NpcStoreRemove(STORE_NAME, "allitems"); + vendor_addstoreitems(); + } + + void OnSpawn() override + { + SetHealth(35); + SetName("Traveling Merchant"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(0, RandomInt(0, 2)); + SetModelBody(1, RandomInt(0, 5)); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_store", "buy"); + CatchSpeech("say_job", "job"); + TEMP = "helena"; + TEMP += RandomInt(0, 400); + STORE_NAME = TEMP; + STORE_TYPE = RandomInt(1, 6); + OVERCHARGE = RandomInt(100, 150); + SELL_RATIO = Random(".5", ".9"); + } + + void vendor_addstoreitems() + { + store_food(); + store_equip(); + store_armor(); + store_weapon(); + store_magic(); + store_none(); + } + + void store_food() + { + if (!(STORE_TYPE == 1)) return; + AddStoreItem(STORE_NAME, "health_apple", RandomInt(5, 15), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "health_lpotion", 0, OVERCHARGE, 0.1); + AddStoreItem(STORE_NAME, "item_log", RandomInt(1, 4), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "health_mpotion", 0, OVERCHARGE, 0.1); + AddStoreItem(STORE_NAME, "health_spotion", 0, OVERCHARGE, 0.1); + AddStoreItem(STORE_NAME, "pack_bigsack", 1, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "mana_mpotion", 0, OVERCHARGE, 0.1); + } + + void store_equip() + { + if (!(STORE_TYPE == 2)) return; + AddStoreItem(STORE_NAME, "item_torch", RandomInt(3, 8), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "item_log", RandomInt(1, 4), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "health_mpotion", RandomInt(1, 3), OVERCHARGE, 0.1); + AddStoreItem(STORE_NAME, "pack_bigsack", RandomInt(1, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "pack_heavybackpack", RandomInt(1, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_holster", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "pack_quiver", 0, OVERCHARGE, SELL_RATIO); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "health_mpotion", RandomInt(1, 5), OVERCHARGE, 0.1); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "health_lpotion", RandomInt(1, 2), OVERCHARGE, 0.1); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "health_spotion", RandomInt(1, 2), OVERCHARGE, 0.1); + } + VEND_NEWBIE = 1; + VEND_WEAPONS = 0; + VEND_CONTAINERS = 1; + VEND_ARMORER = 0; + } + + void store_armor() + { + if (!(STORE_TYPE == 3)) return; + AddStoreItem(STORE_NAME, "shields_buckler", RandomInt(1, 5), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_knight", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_mongol", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_helm_plate", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_knight", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather_studded", RandomInt(1, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_mongol", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_plate", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "shields_ironshield", RandomInt(1, 3), OVERCHARGE, 0.25); + AddStoreItem(STORE_NAME, "shields_lironshield", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "skin_bear", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "skin_boar", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "skin_boar_heavy", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "skin_ratpelt", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_dark", 0, 200, 1); + AddStoreItem(STORE_NAME, "armor_golden", 0, 200, 1); + AddStoreItem(STORE_NAME, "armor_helm_dark", 0, 200, 1); + AddStoreItem(STORE_NAME, "armor_helm_golden", 0, 200, 1); + AddStoreItem(STORE_NAME, "armor_leather", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "armor_leather_torn", 0, OVERCHARGE, SELL_RATIO); + VEND_NEWBIE = 0; + VEND_WEAPONS = 0; + VEND_CONTAINERS = 0; + VEND_ARMORER = 1; + } + + void store_weapon() + { + if (!(STORE_TYPE == 4)) return; + SELL_WEAPON_LEVEL = 3; + AddStoreItem(STORE_NAME, "smallarms_knife", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_dagger", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_shortsword", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_scimitar", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_smallaxe", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_axe", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_2haxe", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer2", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_mace", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_maul", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_gauntlets_leather", RandomInt(0, 1), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_qs", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "polearms_sp", RandomInt(0, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_greatmaul", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_katana", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_katana2", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_katana3", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_katana4", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_skullblade", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_skullblade2", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_skullblade3", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_skullblade4", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_fangstooth", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_huggerdagger", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_huggerdagger2", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_huggerdagger3", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_huggerdagger4", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_craftedknife", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_craftedknife2", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_craftedknife3", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_craftedknife4", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "sheath_back_holster", 1, OVERCHARGE, SELL_RATIO); + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "blunt_hammer3", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "axes_battleaxe", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "axes_scythe", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + } + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORE_NAME, "swords_longsword", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + } + if (!(RandomInt(1, 5) == 1)) return; + AddStoreItem(STORE_NAME, "sheath_back_holster", 5, 100, SELL_RATIO); + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + VEND_ARMORER = 0; + } + + void store_magic() + { + if (!(STORE_TYPE == 5)) return; + MAGIC_SHOP = 1; + AddStoreItem(STORE_NAME, "scroll_fire_dart", RandomInt(1, 4), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_lightning_weak", RandomInt(1, 4), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_glow", RandomInt(1, 5), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_fire_dart", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_lightning_weak", RandomInt(0, 1), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_glow", RandomInt(1, 2), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "item_log", RandomInt(1, 4), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_ice_shield", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_summon_rat", RandomInt(0, 3), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_summon_rat", RandomInt(0, 1), OVERCHARGE, 0.1); + AddStoreItem(STORE_NAME, "mana_mpotion", RandomInt(3, 6), OVERCHARGE, 0.1); + AddStoreItem(STORE_NAME, "sheath_spellbook", RandomInt(3, 6), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_blizzard", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_fire_wall", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_ice_wall", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_lightning_storm", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_summon_undead", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_volcano", 0, OVERCHARGE, SELL_RATIO); + string EXTRA_OVER = OVERCHARGE; + EXTRA_OVER *= 1.5; + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "scroll_summon_undead", RandomInt(1, 2), EXTRA_OVER, 0.5); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "scroll_rejuvenate", RandomInt(1, 2), EXTRA_OVER, 0.5); + } + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 0; + VEND_ARMORER = 0; + } + + void store_none() + { + if (!(STORE_TYPE == 6)) return; + DeleteEntity(GetOwner()); + } + + void trade_done() + { + if (!(RandomInt(1, 3) == 1)) return; + if ((VEND_NO_GOODBYE)) + { + VEND_NO_GOODBYE = 0; + } + else + { + SayText("Come again soon!"); + } + } + + void OnSpawn() override + { + CatchSpeech("npc_say_store", STORE_TRIGGERTEXT); + NpcStoreCreate(STORE_NAME); + vendor_addstoreitems(); + } + + void game_menu_getoptions() + { + if ((RAID_ON)) return; + vendor_addstoremenu(param1); + } + + void vendor_addstoremenu() + { + string reg.mitem.id = "genericstore"; + int reg.mitem.priority = -100; + string reg.mitem.access = "all"; + if (!(STORE_CLOSED)) + { + string reg.mitem.title = "Shop"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "vendor_offerstore"; + } + else + { + string reg.mitem.title = "Closed"; + string reg.mitem.type = "disabled"; + } + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + if ((RAID_ON)) return; + vendor_used(); + vendor_offerstore(GetEntityIndex(m_hLastUsed)); + } + + void npc_say_store() + { + if ((RAID_ON)) return; + vendor_offerstore("ent_lastspoke"); + } + + void vendor_offerstore() + { + if ((RAID_ON)) return; + basevendor_offerstore(param1); + } + + void basevendor_offerstore() + { + if ((RAID_ON)) return; + int L_SERVICE = 0; + if ((STORE_BUYMENU)) + { + L_SERVICE = "buy"; + } + if ((STORE_SELLMENU)) + { + L_SERVICE += ";sell"; + } + NpcStoreOffer(STORE_NAME, param1, L_SERVICE, "trade"); + } + +} + +} diff --git a/scripts/angelscript/helena/vendor8.as b/scripts/angelscript/helena/vendor8.as new file mode 100644 index 00000000..28745449 --- /dev/null +++ b/scripts/angelscript/helena/vendor8.as @@ -0,0 +1,94 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "helena/helena_npc.as" + +namespace MS +{ + +class Vendor8 : CGameScript +{ + string ANIM_DEATH; + string ARROW_AMT; + int CANCHAT; + int NO_CHAT; + float OVERCHARGE; + float SELL_RATIO; + string SOUND_DEATH; + string STORE_NAME; + string STORE_TRIGGERTEXT; + int VEND_ARMORER; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_WEAPONS; + + Vendor8() + { + SOUND_DEATH = "none"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_NAME = "helena_general_store"; + CANCHAT = 1; + OVERCHARGE = 1.5; + SELL_RATIO = 0.8; + ANIM_DEATH = "diesimple"; + NO_CHAT = 1; + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + VEND_ARMORER = 0; + } + + void OnSpawn() override + { + SetHealth(25); + SetName("Fletcher"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + VEND_ARMORER = 0; + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + Say("goods[.56] [.4] [.58] [.66]"); + CANCHAT = 0; + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "proj_arrow_fire", 600, OVERCHARGE, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_wooden", 600, OVERCHARGE, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_broadhead", 300, OVERCHARGE, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_silvertipped", 300, OVERCHARGE, 0, 60); + AddStoreItem(STORE_NAME, "proj_arrow_poison", 300, OVERCHARGE, 0, 120); + AddStoreItem(STORE_NAME, "proj_bolt_wooden", 100, OVERCHARGE, 0, 25); + AddStoreItem(STORE_NAME, "proj_bolt_iron", 100, OVERCHARGE, 0, 25); + AddStoreItem(STORE_NAME, "pack_quiver", 3, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "bows_orcbow", 1, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "bows_treebow", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "bows_shortbow", 1, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "item_feather", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "pack_quiver", 1, OVERCHARGE, SELL_RATIO); + if (RandomInt(1, 12) == 1) + { + ARROW_AMT = RandomInt(1, 5); + ARROW_AMT *= 30; + AddStoreItem(STORE_NAME, "proj_arrow_jagged", ARROW_AMT, OVERCHARGE, SELL_RATIO, 30); + } + if (RandomInt(1, 10) == 1) + { + } + } + +} + +} diff --git a/scripts/angelscript/helena/weapstore.as b/scripts/angelscript/helena/weapstore.as new file mode 100644 index 00000000..0671ded8 --- /dev/null +++ b/scripts/angelscript/helena/weapstore.as @@ -0,0 +1,149 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "helena/helena_npc.as" + +namespace MS +{ + +class Weapstore : CGameScript +{ + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int OVERCHARGE; + float SELL_RATIO; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int VEND_ARMORER; + int VEND_CONTAINERS; + int VEND_NEWBIE; + int VEND_WEAPONS; + + Weapstore() + { + SOUND_DEATH = "none"; + STORE_NAME = "helena_weapstore"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + SELL_RATIO = 0.8; + NO_HAIL = 1; + NO_RUMOR = 1; + NO_JOB = 1; + VEND_NEWBIE = 1; + VEND_WEAPONS = 1; + VEND_CONTAINERS = 1; + VEND_ARMORER = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(15); + if ((CanSee("player", 128))) + { + } + SayText("Weapons for sale!"); + } + + void OnSpawn() override + { + SetHealth(1); + SetName("Weapon Seller"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_store", "buy"); + CatchSpeech("say_job", "job"); + CatchSpeech("say_rumour", "rumours"); + OVERCHARGE = RandomInt(90, 150); + SELL_WEAPON_LEVEL = 3; + } + + void say_hi() + { + SayText("Welcome to the best weapon store in town! Supplied by our own blacksmith!"); + ScheduleDelayedEvent(0.8, "say_hi2"); + } + + void say_hi2() + { + SayText("He s famous you know! He helped fight off the orcish attacks!"); + } + + void say_job() + { + SayText(I + "am afraid that " + I + "do not give out jobs , " + I + " am a worker myself."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "smallarms_knife", 4, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_dagger", 3, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_dirk", RandomInt(0, 1), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_huggerdagger2", RandomInt(0, 1), OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "smallarms_rknife", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_rsword", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_shortsword", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_scimitar", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_nkatana", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_longsword", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "swords_bastardsword", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_rsmallaxe", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_smallaxe", 3, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_axe", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_2haxe", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "axes_battleaxe", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_club", 1, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer1", 0, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer2", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_mace", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_warhammer", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_hammer3", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_maul", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "blunt_greatmaul", 0, OVERCHARGE, 0.5); + AddStoreItem(STORE_NAME, "swords_katana", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "swords_katana2", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "swords_katana3", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "swords_katana4", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "swords_skullblade", 0, OVERCHARGE, 0.4); + AddStoreItem(STORE_NAME, "swords_skullblade2", 0, OVERCHARGE, 0.4); + AddStoreItem(STORE_NAME, "swords_skullblade3", 0, OVERCHARGE, 0.4); + AddStoreItem(STORE_NAME, "swords_skullblade4", 0, OVERCHARGE, 0.4); + AddStoreItem(STORE_NAME, "smallarms_fangstooth", 0, OVERCHARGE, 0.5); + AddStoreItem(STORE_NAME, "smallarms_huggerdagger", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "smallarms_huggerdagger2", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "smallarms_huggerdagger3", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "smallarms_huggerdagger4", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "smallarms_craftedknife", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "smallarms_craftedknife2", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "smallarms_craftedknife3", 0, OVERCHARGE, 0.6); + AddStoreItem(STORE_NAME, "smallarms_craftedknife4", 0, OVERCHARGE, 0.6); + if (!(RandomInt(1, 3) == 1)) return; + AddStoreItem(STORE_NAME, "sheath_back_holster", 5, OVERCHARGE, SELL_RATIO); + } + + void trade_done() + { + if (!(RandomInt(1, 3) == 1)) return; + SayText("Please , do come again some time. Might have something more interesting for you then."); + } + + void say_rumour() + { + PlayAnim("once", "pondering2"); + SayText("Don t travel to the west! Dangerous things lurk out there."); + } + +} + +} diff --git a/scripts/angelscript/helena/woodenwall.as b/scripts/angelscript/helena/woodenwall.as new file mode 100644 index 00000000..f20fb9f8 --- /dev/null +++ b/scripts/angelscript/helena/woodenwall.as @@ -0,0 +1,32 @@ +#pragma context server + +namespace MS +{ + +class Woodenwall : CGameScript +{ + void OnSpawn() override + { + SetHealth(300); + SetRoam(false); + SetName("Wooden Wall"); + SetBloodType("none"); + SetSkillLevel(0); + SetDamageResistance("fire", 2.0); + Precache("woodgibs.mdl"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + DeleteEntity(GetOwner()); + Effect("tempent", "gibs", "woodgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1, 5, 15, 20, 5); + } + + void hit_by_siege() + { + game_death(); + } + +} + +} diff --git a/scripts/angelscript/help/first_death.as b/scripts/angelscript/help/first_death.as new file mode 100644 index 00000000..49ddfeeb --- /dev/null +++ b/scripts/angelscript/help/first_death.as @@ -0,0 +1,29 @@ +#pragma context server + +namespace MS +{ + +class FirstDeath : CGameScript +{ + void OnDeath(CBaseEntity@ attacker) override + { + string TEXT = "You have DIED! "; + TEXT += "|When you die you lose 5% of your gold!"; + ShowHelpTip(GetOwner(), "help_death", "Death", TEXT); + string OPPONENT_HP = GetEntityMaxHealth(m_hLastStruck); + string MY_HP = GetEntityMaxHealth(GetOwner()); + string MY_HP_TEN = MY_HP; + MY_HP_TEN *= 10; + if (!(MY_HP < 700)) return; + if (OPPONENT_HP > MY_HP_TEN) + { + SendInfoMsg(GetOwner(), OVERPOWERED! + "Your opponent has more than " + TEN + TIMES + "your " + HP! + " You should probably retreat!"); + } + string REGEN_WARN = GetMonsterMaxHP(); + REGEN_WARN *= 2.0; + REGEN_WARN += 1000; + } + +} + +} diff --git a/scripts/angelscript/help/first_hireling.as b/scripts/angelscript/help/first_hireling.as new file mode 100644 index 00000000..9e2a0ced --- /dev/null +++ b/scripts/angelscript/help/first_hireling.as @@ -0,0 +1,18 @@ +#pragma context server + +namespace MS +{ + +class FirstHireling : CGameScript +{ + void game_targeted_by_player() + { + string TEXT = "You are looking at "; + TEXT += GetMonsterProperty("name"); + TEXT += ".|You can hire him to protect you.|Press 'use' on him and press 'Hire for X gold'."; + ShowHelpTip(param1, "help_hireling", "Hired Help", TEXT); + } + +} + +} diff --git a/scripts/angelscript/help/first_marketsquare.as b/scripts/angelscript/help/first_marketsquare.as new file mode 100644 index 00000000..f9efe1cb --- /dev/null +++ b/scripts/angelscript/help/first_marketsquare.as @@ -0,0 +1,18 @@ +#pragma context server + +namespace MS +{ + +class FirstMarketsquare : CGameScript +{ + void game_targeted_by_player() + { + string TEXT = "You are looking at "; + TEXT += GetMonsterProperty("name.full"); + TEXT += ".|You can pay him by pressing F11"; + ShowHelpTip(param1, "help_marketsq", "Merchant Square", TEXT); + } + +} + +} diff --git a/scripts/angelscript/help/first_monster.as b/scripts/angelscript/help/first_monster.as new file mode 100644 index 00000000..5b970eb6 --- /dev/null +++ b/scripts/angelscript/help/first_monster.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class FirstMonster : CGameScript +{ +} + +} diff --git a/scripts/angelscript/help/first_npc.as b/scripts/angelscript/help/first_npc.as new file mode 100644 index 00000000..eb2e5bcf --- /dev/null +++ b/scripts/angelscript/help/first_npc.as @@ -0,0 +1,18 @@ +#pragma context server + +namespace MS +{ + +class FirstNpc : CGameScript +{ + void game_targeted_by_player() + { + string TEXT = "You are looking at "; + TEXT += GetMonsterProperty("name"); + TEXT += ".|To speak to him, change your text speech mode to|local [U] and say 'hello' or 'hail'"; + ShowHelpTip(param1, "help_speak", "Help Tip", TEXT); + } + +} + +} diff --git a/scripts/angelscript/help/first_party.as b/scripts/angelscript/help/first_party.as new file mode 100644 index 00000000..abb1f79f --- /dev/null +++ b/scripts/angelscript/help/first_party.as @@ -0,0 +1,22 @@ +#pragma context server + +namespace MS +{ + +class FirstParty : CGameScript +{ + void game_party_join() + { + string TEXT = "You have joined "; + TEXT += param1; + TEXT += ".|You will no longer injure those grouped in the party with you."; + TEXT += "|The console command 'joinparty ' allows you to create"; + TEXT += "|or join a party with a custom name."; + TEXT += "|NOTE: Currently parties can cause issues with servers."; + TEXT += "|So their usage is recommended against on non-PvP servers."; + ShowHelpTip(GetOwner(), "help_party_join", "Party", TEXT); + } + +} + +} diff --git a/scripts/angelscript/help/first_skillgain.as b/scripts/angelscript/help/first_skillgain.as new file mode 100644 index 00000000..ad2adbd1 --- /dev/null +++ b/scripts/angelscript/help/first_skillgain.as @@ -0,0 +1,22 @@ +#pragma context server + +namespace MS +{ + +class FirstSkillgain : CGameScript +{ + void game_learnskill() + { + if (!(param2 == "Proficiency")) return; + if (!(param3 >= 2)) return; + string TEXT = "You have gained skill in proficiency. "; + TEXT += "|This trait unlocks new abilities with certain weapons."; + TEXT += "|To use them, double click attack to start charging."; + TEXT += "||Level 1 charge is usually extra damage. With higher"; + TEXT += "|proficiency comes more advanced attacks."; + ShowHelpTip(GetOwner(), "help_skill_gain", "Proficiency", TEXT); + } + +} + +} diff --git a/scripts/angelscript/help/first_transition.as b/scripts/angelscript/help/first_transition.as new file mode 100644 index 00000000..983cdd5b --- /dev/null +++ b/scripts/angelscript/help/first_transition.as @@ -0,0 +1,73 @@ +#pragma context server + +namespace MS +{ + +class FirstTransition : CGameScript +{ + string NEXT_TRANS_MESSAGE; + string S_DESTNAME; + string S_TRANNAME; + + void game_transition_entered() + { + LogDebug("game_transition_entered [help] desc[ PARAM1 ] bsp[ PARAM2 ] trans[ PARAM3 ] desttrans[ PARAM4 ]"); + string TEXT = "You have entered a transition to "; + TEXT += param1; + if (GetPlayerCount() == 1) + { + TEXT += ".|Press enter to travel to this area"; + } + if (GetPlayerCount() > 1) + { + TEXT += ".|Press enter to start a vote to travel to this area"; + } + ShowHelpTip(GetOwner(), "help_transition", "Transition", TEXT); + S_DESTNAME = StringToLower(param2); + S_TRANNAME = param1; + string LOCAL_TRANS = param3; + string DEST_TRANS = param4; + ScheduleDelayedEvent(0.1, "trans_message"); + CallExternal(GetEntityIndex(GetOwner()), "ext_set_map", S_DESTNAME, LOCAL_TRANS, DEST_TRANS); + } + + void trans_message() + { + if (!(GetGameTime() > NEXT_TRANS_MESSAGE)) return; + NEXT_TRANS_MESSAGE = GetGameTime(); + NEXT_TRANS_MESSAGE += 15.0; + string OUT_MSG = "This leads to "; + OUT_MSG += S_TRANNAME; + if (GetCvar("amx_vote_time") == 0) + { + OUT_MSG += ". Press (enter) to continue."; + } + if (GetCvar("amx_vote_time") > 0) + { + if (GetPlayerCount() > 1) + { + OUT_MSG += ". Press (enter) to start an AMX vote."; + } + if (GetPlayerCount() == 1) + { + OUT_MSG += ". Press (enter) to continue."; + } + } + string OUT_TITLE = "Travel to next area "; + OUT_TITLE += "("; + OUT_TITLE += StringToLower(S_DESTNAME); + OUT_TITLE += ")"; + SendInfoMsg(GetOwner(), OUT_TITLE + OUT_MSG); + } + + void game_transition_exited() + { + } + + void game_map_change() + { + } + +} + +} diff --git a/scripts/angelscript/help/first_vendor.as b/scripts/angelscript/help/first_vendor.as new file mode 100644 index 00000000..d95e0e38 --- /dev/null +++ b/scripts/angelscript/help/first_vendor.as @@ -0,0 +1,26 @@ +#pragma context server + +namespace MS +{ + +class FirstVendor : CGameScript +{ + void game_targeted_by_player() + { + string TEXT = "You are looking at "; + TEXT += GetMonsterProperty("name"); + TEXT += ".|He sells items. You can press the use key|or speak to him to gain access to his wares."; + ShowHelpTip(param1, "help_vendor", "Vendor", TEXT); + } + + void help_vendor_magic() + { + string TEXT = "You are looking at "; + TEXT += GetMonsterProperty("name"); + TEXT += ".|He sells Tomes and Scrolls.|In order to use magic you must read the Scroll or Tome.|Tomes can be permanently memorized and re-selected|press 2 to select a memorized spell.|Scrolls must be activated for each use, |but need no be memorized.|Currently, you may only memorize eight spells."; + ShowHelpTip(param1, "help_scrolls", "Scroll merchant", TEXT); + } + +} + +} diff --git a/scripts/angelscript/heras/GhorAsh.as b/scripts/angelscript/heras/GhorAsh.as new file mode 100644 index 00000000..9a722fbe --- /dev/null +++ b/scripts/angelscript/heras/GhorAsh.as @@ -0,0 +1,55 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Ghorash : CGameScript +{ + string ANIM_RUN; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + Ghorash() + { + ANIM_RUN = "run"; + SKEL_HP = 250; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 5.5; + ATTACK_DAMAGE_HIGH = 7.0; + NPC_GIVE_EXP = 26; + DROP_GOLD = 1; + DROP_GOLD_MIN = 25; + DROP_GOLD_MAX = 55; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + Precache("monsters/skeleton_boss1.mdl"); + } + + void skeleton_spawn() + { + SetName("Ghor Ash"); + SetRoam(true); + SetDamageResistance("all", ".9"); + SetModel("monsters/skeleton_boss1.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 0); + SetHearingSensitivity(3); + if (GetMapName() == "heras") + { + GiveItem(GetOwner(), "item_runicsymbol"); + } + } + +} + +} diff --git a/scripts/angelscript/heras/TC_heras.as b/scripts/angelscript/heras/TC_heras.as new file mode 100644 index 00000000..86ec74c9 --- /dev/null +++ b/scripts/angelscript/heras/TC_heras.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class TcHeras : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 23)); + AddStoreItem(STORENAME, "health_mpotion", 3, 0); + AddStoreItem(STORENAME, "proj_arrow_broadhead", 60, 0, 0, 30); + string THIS_MAP = StringToLower(GetMapName()); + if (THIS_MAP == "edanasewers") + { + AddStoreItem(STORENAME, "item_riddleanswers2", 1, 0); + } + if (THIS_MAP == "heras") + { + AddStoreItem(STORENAME, "item_riddleanswers", 1, 0); + } + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "proj_bolt_iron", 25, 0, 0, 25); + } + addrandomitems(); + } + + void addrandomitems() + { + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORENAME, "bows_longbow", 1, 0); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "armor_helm_knight", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_jagged", 60, 0, 0, 30); + } + if (RandomInt(1, 19) == 1) + { + AddStoreItem(STORENAME, "bows_longbow", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/heras/map_startup.as b/scripts/angelscript/heras/map_startup.as new file mode 100644 index 00000000..23b63549 --- /dev/null +++ b/scripts/angelscript/heras/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "heras"; + MAP_WEATHER = "clear;clear;rain;rain;rain;rain"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "The Temple of Heras"); + SetGlobalVar("G_MAP_DESC", "This fallen temple of Urdual is now host to a variety of evils."); + SetGlobalVar("G_MAP_DIFF", "Levels 10-15 / 100-250hp"); + SetGlobalVar("G_WARN_HP", 100); + } + +} + +} diff --git a/scripts/angelscript/highlands_msc/map_startup.as b/scripts/angelscript/highlands_msc/map_startup.as new file mode 100644 index 00000000..ccd8b944 --- /dev/null +++ b/scripts/angelscript/highlands_msc/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "highlands_msc"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "Curse of the Bear Gods: Highlands by Crow"); + SetGlobalVar("G_MAP_DESC", "These tall mesas hold many secrets and many orcs."); + SetGlobalVar("G_MAP_DIFF", "Levels 15-25 / 150-400hp"); + SetGlobalVar("G_WARN_HP", 150); + } + +} + +} diff --git a/scripts/angelscript/hunderswamp/tubequeen.as b/scripts/angelscript/hunderswamp/tubequeen.as new file mode 100644 index 00000000..4c043db7 --- /dev/null +++ b/scripts/angelscript/hunderswamp/tubequeen.as @@ -0,0 +1,762 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_monster_shared.as" + +namespace MS +{ + +class Tubequeen : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SPELL_LOOP; + string ANIM_SPELL_START; + string ANIM_WALK; + int ATTACH_LHAND; + int ATTACH_RHAND; + int CANT_FLEE; + int CUR_HURT_STAGE; + int DID_INTRO; + int DMG_GLOB; + int DMG_SLAM; + string DOING_SPELL; + int DOT_GLOB; + int ESCORT_CYCLE; + float ESCORT_SPAWN_FREQ_HIGH; + float ESCORT_SPAWN_FREQ_LOW; + float ESCORT_SPAWN_FREQ_MED; + float ESCORT_SPAWN_FREQ_PANIC; + int FIRST_ESCORT; + float FREQ_ESCORT_SPAWN; + float FREQ_SPELL; + string HURT_STAGE1; + string HURT_STAGE2; + string HURT_STAGE3; + string INIT_DELAY; + int LEFT_YAW; + string NEXT_ATTACK; + string NEXT_ESCORT; + string NEXT_FLINCH; + string NEXT_IDLE; + string NEXT_IDLE_ANIM; + string NEXT_SPELL; + string NEXT_TUBE; + string NPCATK_TARGET; + int NPC_BOSS_REGEN_FREQ; + float NPC_BOSS_REGEN_RATE; + int NPC_GIVE_EXP; + string NPC_HBAR_ADJ; + int NPC_HEARDSOUND_OVERRIDE; + int NPC_IS_BOSS; + int RIGHT_YAW; + string SLAM_ORG; + string SOUND_ATTACK_FORWARD; + string SOUND_ATTACK_LEFT; + string SOUND_ATTACK_RIGHT; + string SOUND_BIGFLINCH1; + string SOUND_BIGLLFLINCH2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_RAWR; + string SOUND_SMALLFLINCH1; + string SOUND_SMALLFLINCH2; + string SOUND_SPELLPREP1; + string SOUND_SPELLPREP2; + string SOUND_SPELLPREP3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWOOP; + string SOUND_VIOLENTFLINCH; + string TIME_SPAWN_PLUS_20; + int TUBEQUEEN_ACTIVE; + + Tubequeen() + { + ANIM_SPELL_START = "spell_start"; + ANIM_SPELL_LOOP = "spell_loop"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "idle1"; + ANIM_RUN = "idle1"; + ESCORT_SPAWN_FREQ_LOW = Random(80.0, 120.0); + ESCORT_SPAWN_FREQ_MED = Random(60.0, 100.0); + ESCORT_SPAWN_FREQ_HIGH = Random(45.0, 80.0); + ESCORT_SPAWN_FREQ_PANIC = Random(20.0, 60.0); + FREQ_ESCORT_SPAWN = 30.0; + NPC_HBAR_ADJ = Vector3(0, 128, 0); + NPC_IS_BOSS = 1; + NPC_BOSS_REGEN_RATE = 0.05; + NPC_BOSS_REGEN_FREQ = 120; + NPC_GIVE_EXP = 20000; + CANT_FLEE = 1; + NPC_HEARDSOUND_OVERRIDE = 1; + SOUND_RAWR = "monsters/tubequeen/tq_lavascream.wav"; + SOUND_SMALLFLINCH1 = "monsters/tubequeen/tq_smallflinch.wav"; + SOUND_SMALLFLINCH2 = "monsters/tubequeen/tq_smallflinch2.wav"; + SOUND_BIGFLINCH1 = "monsters/tubequeen/tq_bigflinch.wav"; + SOUND_BIGLLFLINCH2 = "monsters/tubequeen/tq_bigflinch2.wav"; + SOUND_VIOLENTFLINCH = "monsters/tubequeen/tq_flinchviolent.wav"; + SOUND_STRUCK1 = "monsters/tube/TubeCritter_Hit1.wav"; + SOUND_STRUCK2 = "monsters/tube/TuberCritter_Hit2.wav"; + SOUND_STRUCK3 = "monsters/tube/TubeCritter_Hit3.wav"; + SOUND_IDLE1 = "monsters/tubequeen/tq_idle1.wav"; + SOUND_IDLE2 = "monsters/tubequeen/tq_idle1a.wav"; + SOUND_IDLE3 = "monsters/tubequeen/tq_idle2.wav"; + SOUND_SWOOP = "weapons/swinghuge.wav"; + SOUND_ATTACK_FORWARD = "monsters/tubequeen/tq_clawattack.wav"; + SOUND_ATTACK_RIGHT = "monsters/tubequeen/tq_clawattack_right.wav"; + SOUND_ATTACK_LEFT = "monsters/tubequeen/tq_clawattack_left.wav"; + SOUND_SPELLPREP1 = "monsters/tubequeen/tq_mortarfire1.wav"; + SOUND_SPELLPREP2 = "monsters/tubequeen/tq_mortarfire2.wav"; + SOUND_SPELLPREP3 = "monsters/tubequeen/tq_mortarfire3.wav"; + ATTACH_RHAND = 1; + ATTACH_LHAND = 2; + DMG_SLAM = 800; + FREQ_SPELL = Random(60.0, 100.0); + DMG_GLOB = 300; + DOT_GLOB = 100; + } + + void game_precache() + { + Precache("monsters/swamp_tube"); + Precache("monsters/swamp_tube_cl"); + Precache("monsters/summon/slime_globe"); + Precache("monsters/summon/slime_globe_cl"); + } + + void OnSpawn() override + { + SetName("Oodle-beak Hivemother"); + SetModel("monsters/tubequeen.mdl"); + SetWidth(600); + SetHeight(600); + SetRace("wildanimal"); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + if (!(true)) return; + SetHealth(30000); + SetRoam(false); + SetNoPush(true); + SetHearingSensitivity(11); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 1.25); + SetDamageResistance("slash", 0.25); + ScheduleDelayedEvent(0.1, "pre_setup"); + ScheduleDelayedEvent(2.1, "npcatk_hunt"); + ScheduleDelayedEvent(2.0, "finalize_monster"); + CUR_HURT_STAGE = 0; + NPCATK_TARGET = "unset"; + FIRST_ESCORT = 0; + ESCORT_CYCLE = 0; + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(GetGameTime() > INIT_DELAY)) return; + if (!(m_hAttackTarget == "unset")) return; + string CHECK_TARG = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(CHECK_TARG) == "enemy")) return; + npcatk_settarget(CHECK_TARG); + } + + void pre_setup() + { + INIT_DELAY = GetGameTime(); + INIT_DELAY += 5.0; + PlayAnim("once", "idle1"); + NEXT_ESCORT = GetGameTime(); + NEXT_ESCORT += FREQ_ESCORT_SPAWN; + TIME_SPAWN_PLUS_20 = GetGameTime(); + TIME_SPAWN_PLUS_20 += 20.0; + setup_delays(); + } + + void setup_delays() + { + NEXT_FLINCH = GetGameTime(); + NEXT_FLINCH += 60.0; + NEXT_SPELL = GetGameTime(); + NEXT_SPELL += FREQ_SPELL; + NEXT_IDLE_ANIM = GetGameTime(); + NEXT_IDLE_ANIM += 10.0; + } + + void finalize_monster() + { + LEFT_YAW = -60; + RIGHT_YAW = -110; + string MY_HP = GetEntityMaxHealth(GetOwner()); + HURT_STAGE1 = MY_HP; + HURT_STAGE1 *= 0.75; + HURT_STAGE2 = MY_HP; + HURT_STAGE2 *= 0.5; + HURT_STAGE3 = MY_HP; + HURT_STAGE3 *= 0.25; + } + + void OnDamage(int damage) override + { + TUBEQUEEN_ACTIVE = 1; + DID_INTRO = 1; + delay_idle_anim(); + if (m_hAttackTarget == "unset") + { + if (GetRelationship(param1) == "enemy") + { + } + npcatk_settarget(GetEntityIndex(param1)); + } + string CUR_HP = GetEntityHealth(GetOwner()); + if (CUR_HP < HURT_STAGE1) + { + if (CUR_HURT_STAGE == 0) + { + } + SetModelBody(1, 0); + CUR_HURT_STAGE = 1; + SetProp(GetOwner(), "skin", 1); + EmitSound(GetOwner(), 0, "monsters/tubequeen/tq_inspectbelly.wav", 10); + PlayAnim("critical", "bellyinspect"); + delay_flinch(); + NEXT_ESCORT = GetGameTime(); + NEXT_ESCORT += 2.0; + int EXIT_SUB = 1; + } + if (CUR_HP < HURT_STAGE2) + { + if (CUR_HURT_STAGE == 1) + { + } + SetModelBody(1, 0); + CUR_HURT_STAGE = 2; + SetProp(GetOwner(), "skin", 2); + EmitSound(GetOwner(), 0, "monsters/tubequeen/tq_inspectbelly.wav", 10); + PlayAnim("critical", "bellyinspect"); + delay_flinch(); + NEXT_ESCORT = GetGameTime(); + NEXT_ESCORT += 2.0; + int EXIT_SUB = 1; + } + if (CUR_HP < HURT_STAGE3) + { + if (CUR_HURT_STAGE == 2) + { + } + SetModelBody(1, 0); + CUR_HURT_STAGE = 3; + SetProp(GetOwner(), "skin", 2); + EmitSound(GetOwner(), 0, "monsters/tubequeen/tq_inspectbelly.wav", 10); + PlayAnim("critical", "bellyinspect"); + delay_flinch(); + NEXT_ESCORT = GetGameTime(); + NEXT_ESCORT += 2.0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetGameTime() > NEXT_FLINCH) + { + int EXIT_SUB = 1; + delay_flinch(); + int RND_FLINCH = RandomInt(1, 8); + if (RND_FLINCH >= 4) + { + PlayAnim("critical", "smallflinch"); + // PlayRandomSound from: SOUND_SMALLFLINCH1, SOUND_SMALLFLINCH2 + array sounds = {SOUND_SMALLFLINCH1, SOUND_SMALLFLINCH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (RND_FLINCH >= 2) + { + if (RND_FLINCH > 1) + { + } + PlayAnim("critical", "bigflinch"); + // PlayRandomSound from: SOUND_BIGFLINCH1, SOUND_BIGFLINCH2 + array sounds = {SOUND_BIGFLINCH1, SOUND_BIGFLINCH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (RND_FLINCH == 1) + { + PlayAnim("critical", "flinchviolent"); + // PlayRandomSound from: SOUND_VIOLENTFLINCH + array sounds = {SOUND_VIOLENTFLINCH}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + SetModelBody(1, 0); + } + if ((EXIT_SUB)) return; + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void delay_flinch() + { + NEXT_FLINCH = GetGameTime(); + if (CUR_HURT_STAGE == 0) + { + NEXT_FLINCH += Random(20.0, 30.0); + } + if (CUR_HURT_STAGE == 1) + { + NEXT_FLINCH += Random(15.0, 25.0); + } + if (CUR_HURT_STAGE == 2) + { + NEXT_FLINCH += Random(10.0, 20.0); + } + if (CUR_HURT_STAGE == 3) + { + NEXT_FLINCH += Random(5.0, 15.0); + } + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += Random(10.0, 20.0); + } + + void delay_idle_anim() + { + NEXT_IDLE_ANIM = GetGameTime(); + NEXT_IDLE_ANIM += 10.0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(1.0, "npcatk_hunt"); + float GAME_TIME = GetGameTime(); + if (GAME_TIME > INIT_DELAY) + { + if (m_hAttackTarget == "unset") + { + npcatk_gettarget(); + } + if (!(IsEntityAlive(m_hAttackTarget))) + { + npcatk_gettarget(); + } + } + if (!(DID_INTRO)) + { + if (GAME_TIME > TIME_SPAWN_PLUS_20) + { + } + force_active(); + } + if (!(DID_INTRO)) return; + if (GAME_TIME > NEXT_ESCORT) + { + if (m_hAttackTarget != "unset") + { + } + check_escort(); + } + if ((I_R_FROZEN)) return; + if ((SUSPEND_AI)) return; + if ((DOING_SPELL)) return; + if (GAME_TIME > NEXT_IDLE) + { + NEXT_IDLE = GAME_TIME; + NEXT_IDLE += Random(10.0, 20.0); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (GAME_TIME > NEXT_IDLE_ANIM) + { + } + NEXT_IDLE_ANIM = GAME_TIME; + NEXT_IDLE_ANIM += 10.0; + PlayAnim("once", "idle2"); + } + if (!(m_hAttackTarget != "unset")) return; + if (GAME_TIME > NEXT_SPELL) + { + NEXT_SPELL = GAME_TIME; + NEXT_SPELL += FREQ_SPELL; + PlayAnim("critical", ANIM_SPELL_START); + delay_idle_anim(); + delay_flinch(); + DOING_SPELL = 1; + ScheduleDelayedEvent(15.0, "spell_break"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_TUBE) + { + if (TUBE_COUNT < 3) + { + } + NEXT_TUBE = GAME_TIME; + NEXT_TUBE += 20.0; + NEXT_FLINCH = GAME_TIME; + NEXT_FLINCH += 60.0; + NEXT_IDLE_ANIM = GAME_TIME; + NEXT_IDLE_ANIM += 60.0; + PlayAnim("once", "grabtube"); + delay_spell(10.0); + delay_attack(5.0); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_ATTACK) + { + NEXT_ATTACK = GAME_TIME; + NEXT_ATTACK += Random(3.0, 5.0); + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + string MY_POS = GetEntityOrigin(GetOwner()); + string TARG_ANGS = /* TODO: $angles */ $angles(MY_POS, TARG_POS); + ANIM_ATTACK = "clawattack"; + if (TARG_ANGS > LEFT_YAW) + { + ANIM_ATTACK = "clawattackleft"; + } + if (TARG_ANGS < RIGHT_YAW) + { + ANIM_ATTACK = "clawattackright"; + } + PlayAnim("once", ANIM_ATTACK); + delay_idle_anim(); + } + } + + void delay_attack() + { + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += param1; + } + + void npcatk_gettarget() + { + if ((false)) + { + NPCATK_TARGET = GetEntityIndex(m_hLastSeen); + } + if (m_hAttackTarget == "unset") + { + string IN_SPHERE = FindEntitiesInSphere("enemy", 768); + if (IN_SPHERE != "none") + { + string IN_SPHERE = /* TODO: $sort_entlist */ $sort_entlist(IN_SPHERE, "range"); + NPCATK_TARGET = GetToken(IN_SPHERE, 0, ";"); + } + } + npcatk_targetvalidate(m_hAttackTarget); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (GetEntityProperty(m_hAttackTarget, "scriptvar") == 1) + { + NPCATK_TARGET = "unset"; + } + if (!(IsEntityAlive(m_hAttackTarget))) + { + NPCATK_TARGET = "unset"; + } + if (!(/* TODO: $can_damage */ $can_damage(m_hAttackTarget))) + { + NPCATK_TARGET = "unset"; + } + if (!(m_hAttackTarget != "unset")) return; + if ((DID_INTRO)) return; + DID_INTRO = 1; + PlayAnim("critical", "flinchviolent"); + EmitSound(GetOwner(), 0, SOUND_RAWR, 10); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 380, 20, 5, 1024); + setup_delays(); + } + + void npcatk_settarget() + { + if (m_hAttackTarget != "unset") + { + if (GetEntityRange(m_hAttackTarget) < GetEntityRange(param1)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string OLD_TARGET = m_hAttackTarget; + NPCATK_TARGET = param1; + npcatk_targetvalidate(GetEntityIndex(param1)); + if (m_hAttackTarget == "unset") + { + if (OLD_TARGET != "unset") + { + } + NPCATK_TARGET = OLD_TARGET; + } + } + + void frame_attack_forward_start() + { + EmitSound(GetOwner(), 1, SOUND_SWOOP, 10); + EmitSound(GetOwner(), 2, SOUND_ATTACK_FORWARD, 10); + } + + void frame_attack_left_start() + { + EmitSound(GetOwner(), 1, SOUND_SWOOP, 10); + EmitSound(GetOwner(), 2, SOUND_ATTACK_LEFT, 10); + } + + void frame_attack_right_start() + { + EmitSound(GetOwner(), 1, SOUND_SWOOP, 10); + EmitSound(GetOwner(), 2, SOUND_ATTACK_RIGHT, 10); + } + + void frame_attack_forward_land() + { + string LAND_POS = GetEntityProperty(GetOwner(), "attachpos"); + LAND_POS += /* TODO: $relpos */ $relpos(GetMonsterProperty("angles"), Vector3(-128, 0, 0)); + LAND_POS = "z"; + Effect("screenshake", LAND_POS, 380, 20, 1, 512); + ClientEvent("new", "all", "effects/sfx_stun_burst", LAND_POS, 512, 0, 0); + SLAM_ORG = LAND_POS; + LAND_POS += "z"; + XDoDamage(LAND_POS, 512, DMG_SLAM, 0.3, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:slam"); + } + + void frame_attack_right_land() + { + string LAND_POS = GetEntityProperty(GetOwner(), "attachpos"); + LAND_POS = "z"; + Effect("screenshake", LAND_POS, 380, 20, 1, 384); + ClientEvent("new", "all", "effects/sfx_stun_burst", LAND_POS, 384, 0, 0); + SLAM_ORG = LAND_POS; + LAND_POS += "z"; + XDoDamage(LAND_POS, 384, DMG_SLAM, 0.3, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:slam"); + } + + void frame_attack_left_land() + { + string LAND_POS = GetEntityProperty(GetOwner(), "attachpos"); + LAND_POS = "z"; + Effect("screenshake", LAND_POS, 380, 20, 1, 256); + ClientEvent("new", "all", "effects/sfx_stun_burst", LAND_POS, 384, 0, 0); + SLAM_ORG = LAND_POS; + LAND_POS += "z"; + XDoDamage(LAND_POS, 384, DMG_SLAM, 0.3, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:slam"); + } + + void slam_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + if (!(IsOnGround(param2))) return; + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = SLAM_ORG; + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + delay_spell(20.0); + } + + void delay_spell() + { + float CHECK_TIME = GetGameTime(); + CHECK_TIME += param1; + if (CHECK_TIME > NEXT_SPELL) + { + LogDebug("delay_spell PARAM1"); + NEXT_SPELL = GetGameTime(); + NEXT_SPELL += param1; + } + } + + void frame_sack_start() + { + delay_spell(5.0); + delay_attack(10.0); + EmitSound(GetOwner(), 0, "monsters/tubequeen/tq_grabtube1.wav", 10); + } + + void frame_sack_grab() + { + delay_attack(10.0); + SetModelBody(1, 1); + EmitSound(GetOwner(), 0, "monsters/tubequeen/tq_grabtube2.wav", 10); + } + + void frame_sack_throw() + { + delay_attack(1.0); + delay_spell(5.0); + SetModelBody(1, 0); + EmitSound(GetOwner(), 0, "monsters/tubequeen/tq_grabtube3.wav", 10); + delay_flinch(); + delay_idle_anim(); + TUBE_COUNT += 1; + if (TUBE_COUNT < 3) + { + NEXT_TUBE = GetGameTime(); + } + else + { + NEXT_TUBE = GetGameTime(); + NEXT_TUBE += 60.0; + } + string SPAWN_POS = GetEntityProperty(GetOwner(), "attachpos"); + SpawnNPC("monsters/swamp_tube", SPAWN_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + string RND_RL = GetEntityProperty(GetOwner(), "angles.yaw"); + RND_RL += Random(-65, 65); + float RND_FD = Random(200, 800); + float RND_UP = Random(200, 900); + float RND_RL2 = Random(-1000, 1000); + LogDebug("frame_sack_throw /* TODO: $relpos */ $relpos(Vector3(0, RND_RL, 0), Vector3(0, RND_FD, RND_UP))"); + AddVelocity(m_hLastCreated, /* TODO: $relpos */ $relpos(Vector3(0, RND_RL, 0), Vector3(RND_RL2, RND_FD, RND_UP))); + } + + void ext_tube_died() + { + TUBE_COUNT -= 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), 0, "monsters/tubequeen/tq_lavascream.wav", 10); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 380, 20, 10, 1024); + string DEATH_POS = GetEntityOrigin(GetOwner()); + DEATH_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(-256, 256, 0)); + CallExternal("all", "ext_mommy_died", DEATH_POS); + } + + void frame_spell_start() + { + // PlayRandomSound from: SOUND_SPELLPREP1, SOUND_SPELLPREP2, SOUND_SPELLPREP3 + array sounds = {SOUND_SPELLPREP1, SOUND_SPELLPREP2, SOUND_SPELLPREP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DOING_SPELL = 1; + LogDebug("frame_spell_start"); + SpawnNPC("monsters/summon/slime_globe", /* TODO: $relpos */ $relpos(0, 512, -64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_GLOB + NEXT_SPELL = GetGameTime(); + NEXT_SPELL += FREQ_SPELL; + } + + void frame_spell_ready() + { + // PlayRandomSound from: SOUND_SPELLPREP1, SOUND_SPELLPREP2, SOUND_SPELLPREP3 + array sounds = {SOUND_SPELLPREP1, SOUND_SPELLPREP2, SOUND_SPELLPREP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + npcatk_suspend_ai(12.0); + npcatk_suspend_movement(ANIM_SPELL_LOOP, 12.0); + PlayAnim("critical", ANIM_SPELL_LOOP); + } + + void spell_break() + { + DOING_SPELL = 0; + if ((SUSPEND_AI)) + { + npcatk_resume_ai(); + } + PlayAnim("once", "break"); + ANIM_IDLE = "idle1"; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + NEXT_SPELL = GetGameTime(); + NEXT_SPELL += FREQ_SPELL; + delay_attack(1.0); + } + + void glob_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_poison_blind", 5.0, GetEntityIndex(GetOwner()), DOT_GLOB); + } + + void check_escort() + { + LogDebug("check_escort game.time"); + if (!(FIRST_ESCORT)) + { + LogDebug("first_escort"); + FIRST_ESCORT = 1; + ESCORT_CYCLE = 2; + UseTrigger("spawn_boss_escort1"); + UseTrigger("spawn_boss_escort2"); + int EXIT_SUB = 1; + } + NEXT_ESCORT = GetGameTime(); + if (CUR_HURT_STAGE == 0) + { + FREQ_ESCORT_SPAWN = ESCORT_SPAWN_FREQ_LOW; + } + if (CUR_HURT_STAGE == 1) + { + FREQ_ESCORT_SPAWN = ESCORT_SPAWN_FREQ_MED; + } + if (CUR_HURT_STAGE == 2) + { + FREQ_ESCORT_SPAWN = ESCORT_SPAWN_FREQ_HIGH; + } + if (CUR_HURT_STAGE == 3) + { + FREQ_ESCORT_SPAWN = ESCORT_SPAWN_FREQ_PANIC; + } + NEXT_ESCORT += FREQ_ESCORT_SPAWN; + if ((EXIT_SUB)) return; + ESCORT_CYCLE += 1; + if (CUR_HURT_STAGE < 2) + { + if (ESCORT_CYCLE == 1) + { + UseTrigger("spawn_boss_escort1"); + } + if (ESCORT_CYCLE == 2) + { + UseTrigger("spawn_boss_escort2"); + } + if (ESCORT_CYCLE == 3) + { + ESCORT_CYCLE = 0; + UseTrigger("spawn_boss_escort3"); + } + } + if (CUR_HURT_STAGE == 2) + { + if (ESCORT_CYCLE == 1) + { + UseTrigger("spawn_boss_escort1"); + UseTrigger("spawn_boss_escort2"); + } + if (ESCORT_CYCLE == 2) + { + UseTrigger("spawn_boss_escort2"); + UseTrigger("spawn_boss_escort3"); + } + if (ESCORT_CYCLE == 3) + { + ESCORT_CYCLE = 0; + UseTrigger("spawn_boss_escort3"); + UseTrigger("spawn_boss_escort1"); + } + } + if (CUR_HURT_STAGE == 3) + { + ESCORT_CYCLE = 0; + UseTrigger("spawn_boss_escort1"); + UseTrigger("spawn_boss_escort2"); + UseTrigger("spawn_boss_escort3"); + } + } + + void force_active() + { + TUBEQUEEN_ACTIVE = 1; + DID_INTRO = 1; + PlayAnim("critical", "flinchviolent"); + EmitSound(GetOwner(), 0, SOUND_RAWR, 10); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 380, 20, 5, 1024); + setup_delays(); + } + +} + +} diff --git a/scripts/angelscript/idemarks_tower/base_book.as b/scripts/angelscript/idemarks_tower/base_book.as new file mode 100644 index 00000000..0ea14916 --- /dev/null +++ b/scripts/angelscript/idemarks_tower/base_book.as @@ -0,0 +1,70 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class BaseBook : CGameScript +{ + string CHAT_ARRAY_EVENT; + int CHAT_AUTO_FACE; + int CHAT_AUTO_HAIL; + int CHAT_FACE_ON_USE; + int CHAT_USE_CONV_ANIMS; + int CUR_PAGE; + int NUM_PAGES; + + BaseBook() + { + CHAT_AUTO_HAIL = 0; + CHAT_USE_CONV_ANIMS = 0; + CHAT_FACE_ON_USE = 0; + CHAT_AUTO_FACE = 0; + CHAT_ARRAY_EVENT = "page"; + CUR_PAGE = 0; + NUM_PAGES = 0; + } + + void OnSpawn() override + { + SetMenuAutoOpen(1); + SetInvincible(true); + SetNoPush(true); + SetModel("null.mdl"); + SetName("Your book name"); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Read a Page"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "read_page"; + } + + void add_page() + { + chat_add_text(CHAT_ARRAY_EVENT, param1, 0.1, "none", "none", "sound:magic/pageflip.wav"); + NUM_PAGES += 1; + } + + void read_page() + { + if (!(CUR_PAGE)) + { + chat_start_sequence(CHAT_ARRAY_EVENT); + CUR_PAGE += 1; + } + else + { + chat_resume(); + } + chat_pause(); + CUR_PAGE += 1; + if (!(CUR_PAGE > NUM_PAGES)) return; + CUR_PAGE = 0; + } + +} + +} diff --git a/scripts/angelscript/idemarks_tower/book_armor.as b/scripts/angelscript/idemarks_tower/book_armor.as new file mode 100644 index 00000000..26d0e185 --- /dev/null +++ b/scripts/angelscript/idemarks_tower/book_armor.as @@ -0,0 +1,22 @@ +#pragma context server + +#include "idemarks_tower/base_book.as" + +namespace MS +{ + +class BookArmor : CGameScript +{ + void OnSpawn() override + { + SetName("Armor of the Dark Knight"); + add_page("When night is high / and hopes are naught"); + add_page("darkness saves / those men who fought,"); + string L_STR = "For even though he's / named Dark Knight"; + add_page(L_STR); + add_page("Order is his cause, / he fights for light."); + } + +} + +} diff --git a/scripts/angelscript/idemarks_tower/book_felewyn.as b/scripts/angelscript/idemarks_tower/book_felewyn.as new file mode 100644 index 00000000..847e3af3 --- /dev/null +++ b/scripts/angelscript/idemarks_tower/book_felewyn.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "idemarks_tower/base_book.as" + +namespace MS +{ + +class BookFelewyn : CGameScript +{ + void OnSpawn() override + { + SetName("Felewyn 15:12"); + add_page("We are to chose apostles: mortal beings who will defend and enforce our ideals on the mortal plane."); + add_page("Lanethan is his name, though that was also not his birth name, and he is the Dark Knight Aginor."); + add_page("So shall he be known, as apostle of Felewyn, who shall enforce Order and peace."); + add_page("Idemark I have chosen to represent my order, the most powerful of the apostles of good."); + add_page("Her sister, Iquitas, I have chosen to represent my chaos, the most powerful of the apostles of evil."); + add_page("So shall they be, apostles of Pathos, two sides of the same coin - the coin of balance."); + } + +} + +} diff --git a/scripts/angelscript/idemarks_tower/book_wand.as b/scripts/angelscript/idemarks_tower/book_wand.as new file mode 100644 index 00000000..7d9aa6d4 --- /dev/null +++ b/scripts/angelscript/idemarks_tower/book_wand.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "idemarks_tower/base_book.as" + +namespace MS +{ + +class BookWand : CGameScript +{ + void OnSpawn() override + { + SetName("The Way of the Wand"); + add_page("There is a power beneath magic, a very ancient one. It's called fate."); + add_page("It has limitless power - magic, as we all know, has many limitations, but not fate."); + } + +} + +} diff --git a/scripts/angelscript/idemarks_tower/fragment_idemark.as b/scripts/angelscript/idemarks_tower/fragment_idemark.as new file mode 100644 index 00000000..47a972cf --- /dev/null +++ b/scripts/angelscript/idemarks_tower/fragment_idemark.as @@ -0,0 +1,270 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class FragmentIdemark : CGameScript +{ + string CHAPEL_WALK_POINT; + int CHAT_AUTO_FACE; + int CHAT_AUTO_HAIL; + int CHAT_FACE_ON_USE; + int CHAT_MENU_ON; + int CHAT_USE_CONV_ANIMS; + string ISHMEEA_ID; + string MANARING_TARGET; + int RING_STEP; + + FragmentIdemark() + { + CHAT_AUTO_HAIL = 1; + CHAT_USE_CONV_ANIMS = 0; + CHAT_FACE_ON_USE = 0; + CHAT_AUTO_FACE = 0; + RING_STEP = 0; + } + + void OnSpawn() override + { + SetName("a fragment of|Idemark"); + SetName("idemark"); + SetHealth(100); + SetNoPush(true); + SetSayTextRange(1000); + SetInvincible(true); + SetRace("beloved"); + SetModel("npc/femhuman2.mdl"); + SetWidth(32); + SetHeight(72); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderfx", 3); + SetProp(GetOwner(), "renderamt", 225); + SetIdleAnim("sitting2"); + SetMoveAnim("walk"); + CatchSpeech("say_gems", "gem"); + CatchSpeech("say_ring", "ring"); + SetMenuAutoOpen(1); + CHAPEL_WALK_POINT = FindEntityByName("chapel_target2"); + } + + void game_menu_getoptions() + { + if (!(CHAT_MENU_ON)) return; + string L_QUEST = GetPlayerQuestData(param1, "manaring"); + string L_ITEM = ItemExists(param1, "item_ring_ryza"); + if (!(L_QUEST == "0")) return; + if (!(L_ITEM)) return; + int L_GEM_COUNT = 0; + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza_gem1"); + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza_gem2"); + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza_gem3"); + L_GEM_COUNT += ItemExists(param1, "ring_light2"); + if (L_GEM_COUNT == 0) + { + string reg.mitem.title = "Show Ryza's Trinket"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_ring_nogems"; + } + else + { + if (L_GEM_COUNT < 4) + { + string reg.mitem.title = "Show Ryza's Artifacts"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_not_enough_gem"; + } + else + { + string reg.mitem.title = "Give Ryza's Artifacts"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "fix_ring_and_return"; + } + } + } + + void say_hi() + { + if ((CHAT_BUSY)) return; + if (!(CHAT_MENU_ON)) return; + chat_now("Who goes there? Are you of the Lost?", 3); + chat_now("I have retreated to the confines of this chapel, where I have just enough power to keep their leader sealed in another plane of reality.", 7); + chat_now("You must seek out one of my guard, should they still exist among us. They have each sworn an oath to me, serving me even in death. They can help you.", 9); + } + + void say_ring_nogems() + { + if ((CHAT_BUSY)) return; + if (!(CHAT_MENU_ON)) return; + chat_now("Is that?... no. Not here. It wouldn't make sense."); + chat_now("Please tell me the magical bindings of Atholo have not failed! Unless..."); + chat_now("You've defeated him? It has been centuries since I devised the ensorcelled device."); + chat_now("To allow a great power to remain on your plane whose sole purpose was to bind Atholo."); + chat_now("Ryza was a devoted supporter and believed in the strength of humanity. Her sacrifice will echo in eternity. I am forever grateful of her divine act to preserve this plane."); + chat_now("The device, however, seems to be missing its three focusing [lenses], as well as the empowering body to which it is attuned."); + chat_now("If you are able to find such and return them to me, I may be able to scrounge up the arcane power of this tower to restore this artifact to its former glory."); + } + + void say_not_enough_gem() + { + if ((CHAT_BUSY)) return; + if (!(CHAT_MENU_ON)) return; + chat_now("It seems you are on the right track, seeker. However, the device, the ring, and its focusing gems are useless without each other."); + chat_now("Return to me with the [ring] and all three [gems] and I will attempt to restore its power for you."); + } + + void say_gems() + { + if ((CHAT_BUSY)) return; + if (!(CHAT_MENU_ON)) return; + chat_now("It seems one has made its way into the cursed coffers of a crystal-protected bandit's stronghold, nestled deep in a lush grove."); + chat_now("You may need to find yet more crystals, however."); + chat_now("Another was given to a powerful crystalline wizard who was so apt at the arcane, they could split their very being into elemental fragments."); + chat_now("The final jewel has recessed deep under the cliffs, to the possession of a dimensional arachnid."); + chat_now("The base of the trinket was once a gift to Felewyn's devout followers to light their way during dark times."); + } + + void say_ring() + { + say_gems(); + } + + void fix_ring_and_return() + { + if ((CHAT_BUSY)) return; + if (!(CHAT_MENU_ON)) return; + int L_GEM_COUNT = 0; + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza"); + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza_gem1"); + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza_gem2"); + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza_gem3"); + L_GEM_COUNT += ItemExists(param1, "ring_light2"); + if (L_GEM_COUNT == 5) + { + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza"); + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza_gem1"); + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza_gem2"); + L_GEM_COUNT += ItemExists(param1, "item_ring_ryza_gem3"); + L_GEM_COUNT += ItemExists(param1, "ring_light2"); + MANARING_TARGET = param1; + chat_now("By Felewyn's Light. You've done it! The awe-inspiring power of this magical construct shall resonate once again.", 6.5); + chat_now("Give me a moment, as I attempt to restore the ring to its former glory.", 4.5); + chat_now("Just need to recall the ancient incantations...", 3, "none", "make_ring"); + } + } + + void give_manaring() + { + SetPlayerQuestData(MANARING_TARGET, "manaring"); + // TODO: offer MANARING_TARGET item_ring_mana + MANARING_TARGET = "MANARING_TARGET"; + } + + void make_ring() + { + EmitSound(GetOwner(), 0, "magic/energy1_loud.wav", 10); + if (!(RING_STEP)) + { + PlayAnim("critical", "sitting3"); + EmitSound(GetOwner(), 0, "magic/shock_noloop.wav", 10); + ClientEvent("new", "all", "effects/sfx_light_fade", GetEntityProperty(GetOwner(), "svbonepos"), "(255,0,0)", 200, 0); + } + else + { + if (RING_STEP == 1) + { + ClientEvent("new", "all", "effects/sfx_light_fade", GetEntityProperty(GetOwner(), "svbonepos"), "(255,0,255)", 200, 0); + } + else + { + if (RING_STEP == 2) + { + ClientEvent("new", "all", "effects/sfx_light_fade", GetEntityProperty(GetOwner(), "svbonepos"), "(0,255,0)", 200, 0); + } + else + { + if (RING_STEP == 3) + { + ClientEvent("new", "all", "effects/sfx_light_fade", GetEntityProperty(GetOwner(), "svbonepos"), "(255,255,255)", 200, 0); + RING_STEP = 0; + done_ring(); + return; + } + } + } + } + RING_STEP += 1; + ScheduleDelayedEvent(2.4, "make_ring"); + } + + void done_ring() + { + if (!((MANARING_TARGET !is null))) return; + chat_now("...there it is. A wonder to behold. An ancient artifact born anew. Its latent energies manifest once more! The arcane shall now flow through you readily.", "none", "none", !"give_manaring"); + chat_now("Thank you, adventurer, for restoring this great power. For being a champion of its rebirth. Its mana stones shall restore your magical powers, just as you have done for it."); + chat_now("May Felewyn forever be by your side."); + } + + void ext_chapel_start() + { + chat_clear_que(); + if (((MANARING_TARGET !is null))) + { + give_manaring(); + } + SetSayTextRange(2000); + SetIdleAnim("idle1"); + SetMoveDest(CHAPEL_WALK_POINT); + PlayAnim("critical", "sitstand"); + ISHMEEA_ID = FindEntityByName("ishmeea"); + CHAT_MENU_ON = 0; + } + + void game_reached_dest() + { + string L_ORIGIN = GetEntityOrigin(CHAPEL_WALK_POINT); + L_ORIGIN = "z"; + SetEntityOrigin(GetOwner(), L_ORIGIN); + SetAngles("face"); + } + + void ext_chapel_speech() + { + if (!(CHAPEL_CHAT_STEP)) + { + chat_now("Ishme'Ea. No, I played a small part in all this. I am just as much a prisoner in this chapel as the monstrosity that I restrain.", 8, "none", "ext_chapel_speech"); + } + if (CHAPEL_CHAT_STEP == 1) + { + chat_now("Yourself and Leofing were essential parts of the series of protective rituals that I have cast in and around the tower.", 6, "none", "ext_chapel_speech"); + } + if (CHAPEL_CHAT_STEP == 2) + { + chat_now("I also counted on your curiosity and eagerness to help the world. In hopes that you would return with the knowledge to aid us.", 7, "none", "do_ishmeea_line"); + } + if (CHAPEL_CHAT_STEP == 3) + { + chat_now("Goodbye, Ishme'Ea. I will not survive the ritual. It was an honor to serve as Apostle to Pathos.", 6, "none", "ext_chapel_speech"); + } + if (CHAPEL_CHAT_STEP == 4) + { + chat_now("And an honor to be your first teacher. Benevolent visitor, may your steel strike true, and your magic flow freely.", 7, "none", "do_ishmeea_line"); + ScheduleDelayedEvent(10, "ded"); + } + CHAPEL_CHAT_STEP += 1; + } + + void do_ishmeea_line() + { + CallExternal(ISHMEEA_ID, "ext_chapel_start"); + } + + void ded() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/idemarks_tower/game_master.as b/scripts/angelscript/idemarks_tower/game_master.as new file mode 100644 index 00000000..fbcf007e --- /dev/null +++ b/scripts/angelscript/idemarks_tower/game_master.as @@ -0,0 +1,70 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + int TIME_OF_DAY; + + void OnSpawn() override + { + string L_SKY = FindEntityByName("skybox"); + SetProp(L_SKY, "setbody", 0); + TIME_OF_DAY = 0; + } + + void game_triggered() + { + if (param1 == "jl_met") + { + CallExternal(FindEntityByName("ishmeea"), "ext_met_leofing"); + } + if (param1 == "cv_met") + { + CallExternal(FindEntityByName("leofing"), "ext_met_ishmeea"); + } + if (param1 == "jl_celldoor1break") + { + CallExternal(FindEntityByName("leofing"), "ext_cell_key"); + } + if (param1 == "counter_ish") + { + CallExternal(FindEntityByName("ishmeea"), "ext_collected"); + CallExternal(FindEntityByName("alfgar"), "ext_zombify"); + } + if (param1 == "tele_ishmeea") + { + CallExternal(FindEntityByName("ishmeea"), "ext_tele_triggered"); + } + if (param1 == "chapel_start") + { + CallExternal(FindEntityByName("ishmeea"), "ext_chapel_start"); + CallExternal(FindEntityByName("idemark"), "ext_chapel_start"); + } + if (param1 == "final_boss_die") + { + CallExternal(FindEntityByName("ishmeea"), "ext_boss_died"); + } + if (param1 == "relay_envlightday") + { + string L_SKY = FindEntityByName("skybox"); + SetProp(L_SKY, "setbody", 0); + TIME_OF_DAY = 0; + } + if (param1 == "relay_envlightsunset") + { + string L_SKY = FindEntityByName("skybox"); + SetProp(L_SKY, "setbody", 0); + TIME_OF_DAY = 1; + } + if (param1 == "relay_envlightnight") + { + string L_SKY = FindEntityByName("skybox"); + SetProp(L_SKY, "setbody", 0); + } + } + +} + +} diff --git a/scripts/angelscript/idemarks_tower/guard_leofing.as b/scripts/angelscript/idemarks_tower/guard_leofing.as new file mode 100644 index 00000000..d250b04b --- /dev/null +++ b/scripts/angelscript/idemarks_tower/guard_leofing.as @@ -0,0 +1,186 @@ +#pragma context server + +#include "monsters/base_chat_array.as" +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class GuardLeofing : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int BECOME_HOSTILE; + int CHAT_AUTO_HAIL; + int CHAT_MENU_ON; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int MET_ISHMEEA; + int NPC_GIVE_EXP; + int SKELE_TURNED; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + int SKEL_RESPAWN_TIMES; + int STRUCK_HOLY; + + GuardLeofing() + { + CHAT_AUTO_HAIL = 1; + SKEL_HP = 1600; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE_LOW = 10; + ATTACK_DAMAGE_HIGH = 25; + NPC_GIVE_EXP = 680; + SKEL_RESPAWN_CHANCE = 1.0; + SKEL_RESPAWN_LIVES = 1; + DROP_GOLD = 1; + DROP_GOLD_MIN = 30; + DROP_GOLD_MAX = 65; + } + + void skel_setup_body() + { + SetName("Captain of the Guard|Leofing"); + SetName("leofing"); + SetInvincible(true); + SetRace("beloved"); + SetRoam(false); + SetModel("monsters/skeleton2.mdl"); + SetWidth(32); + SetHeight(72); + PlayAnim("hold", 0); + SetMenuAutoOpen(1); + SetSayTextRange(1000); + CatchSpeech("say_ishmeea", "ishmeea"); + CatchSpeech("say_prisoner", "prisoner"); + } + + void game_menu_getoptions() + { + if ((BECOME_HOSTILE)) + { + string reg.mitem.title = "Hostile"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hostile"; + } + else + { + if ((MET_ISHMEEA)) + { + string reg.mitem.title = "Ishme'Ea"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_met_ishmeea"; + } + } + SetDamageResistance("holy", 3.0); + } + + void say_hi() + { + if ((CHAT_BUSY)) return; + chat_now("You are not one of them? How could... excuse myself, hello! You appear to be quite able-bodied, indeed.", 8, "none", "none"); + chat_now("Before you judge a [prisoner], a rather unlively one, please use your ears and not your eyes. We can help each other! *laughs*", 7, "none", "none"); + chat_now("I need you to find someone for me, and apologize to them, say that I'm sorry. For everything, this whole mess.", 7, "none", "none"); + chat_now("Hmm? No, I'm not talking of this blasted tangle of undead, Lost, and bandit corpses!", 7, "none", "none"); + chat_now("Our relationship mess my dear lad, please try to be snappy and use some context clues here.", 7, "none", "none"); + chat_now("I knew her as [Ishme'Ea], say, if she's looking a little... skeletal these days, let her know that old Leofing still has his connective tissues, mostly.", 12, "none", "none"); + chat_now("If she's joined ranks with the Lost, then eh, not really my type any more. GET MOVING! Please?", 9, "none", "none"); + } + + void say_met_ishmeea() + { + if ((CHAT_BUSY)) return; + chat_now("I expected nothing less. It is my final honor as Idemark's Captain, lover of Ishme'Ea, and as a disciple of Pathos.", 10, "none", "none"); + chat_now("The key to this cell is held by my dear First Officer Reinold, in the shadowed courtyard.", 6, "none", "none"); + chat_now("The rest of Idemark's Guard, the undead you have slain to get here, have lost their minds soon after the onset of the war.", 7, "none", "none"); + chat_now("The only option I saw, at the time, was to lock myself away and rally our ravaged bodies in an eternal fight against the Lost.", 8, "none", "none"); + } + + void say_hostile() + { + if ((CHAT_BUSY)) return; + chat_now("I wore Leofing's personality as a cloak to gain your trust. You are being used as puppets to do our bidding, just as he was.", 9, "none", "none"); + chat_now("The Lost was before all, and it will be the last. You are material, soon to rot and fall apart.", 7, "none", "none"); + chat_now("A testament to Pathos's arrogance, life will be snuffed out, now die!", 6, "none", "leofing_hostile"); + } + + void say_ishmeea() + { + if ((CHAT_BUSY)) return; + if (!(MET_ISHMEEA)) + { + chat_now("*squints* Alright my new friend, you're pretty cool in my eye sockets, but how do you know of my Ishme'Ea?", 5, "none", "none"); + chat_now("Oh wait, I've just told you about her haven't I? *cackles*", 7, "none", "none"); + chat_now("Oh gods, the times we had together, sneaking off to someplace or another on the grounds at night.", 7, "none", "none"); + chat_now("You know, even in those days she was a force to be reckoned with, exceeding the knowledge of some of her masters.", 7, "none", "none"); + } + else + { + say_met_ishmeea(); + } + } + + void say_prisoner() + { + if ((CHAT_BUSY)) return; + chat_now("I died a Soldier, Captain of Idemark's guard, and now I live on as this monster stuck in a cell. Maybe you can imagine my disappointment.", 9, "none", "none"); + chat_now("I swore an oath to give my life, my afterlife, and my soul to defend Idemark and her lands.", 7, "none", "none"); + chat_now("Pathos help me, Loreldians do not take kindly to failure.", 4, "none", "none"); + chat_now("I suffer from bouts of delusion, times where I lose myself to the pull of the Lost. The whispers of what they have to offer...", 8, "none", "none"); + chat_now("Some days, truthfully, every day, I question everything. But my mind always comes back to it.", 7, "none", "none"); + chat_now("To the wretches wandering these halls, Lost and undead alike. I would be counted among them if not for this self-imprisonment.", 9, "none", "none"); + } + + void ext_met_ishmeea() + { + CHAT_MENU_ON = 0; + MET_ISHMEEA = 1; + } + + void ext_cell_key() + { + BECOME_HOSTILE = 1; + MET_ISHMEEA = 0; + } + + void leofing_hostile() + { + SetRoam(true); + SetRace("undead"); + SetInvincible(false); + } + + void skel_rebirth() + { + chat_now("I shall but love thee better after death.", 2, "none", "none"); + chat_now("Just look for me beyond the sky, for high above I do fly.", 3.2); + chat_now("Fond memories linger every day.", 2); + chat_now("Resting where no shadows fall.", 3.3); + chat_now("Loved with everlasting love.", 2.3); + chat_now("Life is not forever, love is.", 3); + chat_now("A free spirit.", 1.5); + chat_now("Your love will light our way.", 1.5); + chat_now("Resting where no shadows fall.", 3.3); + chat_now("I leave you with my legacy of love.", 5.0, "none", "leofing_remove"); + } + + void leofing_remove() + { + UseTrigger("jl_mm"); + DeleteEntity(GetOwner(), true); // fade out + } + + void OnDeath(CBaseEntity@ attacker) override + { + SKELE_TURNED = 0; + STRUCK_HOLY = 0; + SKEL_RESPAWN_TIMES = 0; + skel_fake_death(); + } + +} + +} diff --git a/scripts/angelscript/idemarks_tower/survivor_alfgar.as b/scripts/angelscript/idemarks_tower/survivor_alfgar.as new file mode 100644 index 00000000..311e273f --- /dev/null +++ b/scripts/angelscript/idemarks_tower/survivor_alfgar.as @@ -0,0 +1,104 @@ +#pragma context server + +#include "monsters/base_chat_array.as" +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SurvivorAlfgar : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int CHAT_AUTO_HAIL; + int CHAT_MENU_ON; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + int SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + int ZOMBIFIED; + + SurvivorAlfgar() + { + CHAT_AUTO_HAIL = 1; + SKEL_HP = 1000; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE_LOW = 20; + ATTACK_DAMAGE_HIGH = 50; + NPC_GIVE_EXP = 400; + SKEL_RESPAWN_CHANCE = 0; + SKEL_RESPAWN_LIVES = 0; + DROP_GOLD = 1; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 15; + } + + void skel_setup_body() + { + SetName("The Survivor|Alfgar"); + SetName("alfgar"); + SetInvincible(true); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/guard1.mdl"); + PlayAnim("hold", 89); + SetWidth(32); + SetHeight(72); + SetMenuAutoOpen(1); + CatchSpeech("say_madness", "madness"); + CatchSpeech("say_lost", "lost"); + } + + void say_hi() + { + if ((ZOMBIFIED)) return; + if ((CHAT_BUSY)) return; + chat_now("URDUAL'S BEARD!!! Adventurers? It's so good to see a friendly face here."); + chat_now("Well, may this humble soldier welcome you to Idemark's Tower."); + chat_now("My platoon was sent here to gather reconnaissance on the area, to relay to King Deralia our standing here."); + chat_now("This tower, it seems to be an anchor for the [Lost], a baited hook in a dark ocean that draws predators unknown to us mortals."); + chat_now("Evil energy lurks here, as my dear friends and I found out the hard way. Please heed my warnings, take care to not join the Undead or Lost armies here."); + chat_now("My soldiers were overtaken by a [madness], once we fought our way towards the inner courtyard."); + chat_now("I began to feel it myself, a resonating hum, drawing me deeper, tickling my brain..."); + chat_now("No. I can't return. If you absolutely must venture forth, I would suggest using the highest caution."); + } + + void say_lost() + { + if ((ZOMBIFIED)) return; + if ((CHAT_BUSY)) return; + chat_now("Makes me wish that I had more of an interest in our histories growing up."); + chat_now("I can tell you that this name is misleading. They are purposeful creatures, of that I am sure."); + } + + void say_madness() + { + if ((ZOMBIFIED)) return; + if ((CHAT_BUSY)) return; + chat_now("The sight of it is seared in my mind. Even when I blink, I am haunted by flashes of the scene."); + chat_now("It was slow to onset at first, some of the men were confused, and had to be turned toward the fight."); + chat_now("Before long they were digging at their wounds. Have you ever dug out a splinter, me lad?"); + chat_now("I imagine it was like that burning, hurting desire to be freed of something... foreign to yourself."); + chat_now("There are a lot of fates worse than death to be found here."); + chat_now("I'm not ashamed to say that I screamed and took off running. By that point, I was the only one hanging onto any sanity, though I fear I speak too soon."); + } + + void ext_zombify() + { + if ((ZOMBIFIED)) return; + ZOMBIFIED = 1; + CHAT_MENU_ON = 0; + SetModel("monsters/skeleton2.mdl"); + SetRoam(true); + SetRace("undead"); + SetDamageResistance("holy", 1); + SetInvincible(false); + } + +} + +} diff --git a/scripts/angelscript/idemarks_tower/wizard_ishmeea.as b/scripts/angelscript/idemarks_tower/wizard_ishmeea.as new file mode 100644 index 00000000..fbcb8c6b --- /dev/null +++ b/scripts/angelscript/idemarks_tower/wizard_ishmeea.as @@ -0,0 +1,267 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class WizardIshmeea : CGameScript +{ + int CHAT_AUTO_HAIL; + string CHAT_MENU_ON; + int CHAT_NEVER_INTERRUPT; + int COLLECTED_ITEMS; + string IDEMARK_ID; + int MET_LEOFING; + int SAID_HI; + int SAID_LEOFING; + + WizardIshmeea() + { + CHAT_NEVER_INTERRUPT = 1; + CHAT_AUTO_HAIL = 1; + COLLECTED_ITEMS = 0; + } + + void game_precache() + { + Precache("c-tele1.spr"); + } + + void OnSpawn() override + { + SetName("The Wizard|Ishme'Ea"); + SetName("ishmeea"); + SetInvincible(true); + SetRace("beloved"); + SetModel("npc/elf_f_warrior.mdl"); + SetWidth(32); + SetHeight(72); + SetNoPush(true); + SetModelBody(1, 7); + SetProp(GetOwner(), "skin", 1); + PlayAnim("hold", 3); + SetMenuAutoOpen(1); + SetSayTextRange(1000); + create_conversations(); + } + + void create_conversations() + { + CatchSpeech("say_met_leofing", "leofing"); + CatchSpeech("say_gave_items", "give"); + chat_add_text("say_hi", "WHAT was that? I heard you crashing down here like a bag of hammers. Do you not understand the situation here?", 7.0, "none", "flag_said_hi"); + chat_add_text("say_hi", "*sigh* Pardon me, it's been so long since I had proper visitors that I forget myself down here, sometimes.", 7, "none", "none"); + chat_add_text("say_hi", "Something at the tower emits a powerful aura, it speaks to me in my dreams. In nightmares that I wouldn't wish on Lor Malgoriand himself.", 9, "none", "none"); + chat_add_text("say_hi", "Do try and keep the noise down, darling.", 2, "none", "none"); + chat_add_text("say_hi_alt", "It's been so long since I had proper visitors that I forget myself down here, sometimes.", 6, "none", "none"); + chat_add_text("say_hi_alt", "Something at the tower emits a powerful aura, it speaks to me in my dreams. In nightmares that I wouldn't wish on Lor Malgoriand himself.", 9, "none", "none"); + chat_add_text("say_hi_alt", "Do try and keep the noise down, darling.", 2, "none", "none"); + chat_add_text("say_met_leofing", "Leofing? Alive? Well, in a manner of speaking. Good to know he has not changed in a few hundred years.", 8, "none", "none"); + chat_add_text("say_met_leofing", "You see, I am studying the phenomenon here at Idemark's Tower. It is highly unusual, to say the least, that the lands themselves fight the Lost.", 10, "none", "none"); + chat_add_text("say_met_leofing", "These purple crystals are the most reactive samples that I have found in all of Daragoth, by far!", 6, "none", "none"); + chat_add_text("say_met_leofing", "The crystal rods are remnants of the great ballistae bolts that rained down here at the start of the Age of War.", 6, "none", "none"); + chat_add_text("say_met_leofing", "The megalithic ammunition must have been cursed by The Lost to spread their influence upon strategic locations.", 6, "none", "none"); + chat_add_text("say_met_leofing", "I have been busy in the years since, traveling to different Elvish enclaves to further my arcane knowledge.", 6, "none", "none"); + chat_add_text("say_met_leofing", "Arcane scholars I studied with at our capital city, Kray Eldorad, claim that this energy can be re-cast.", 7, "none", "none"); + chat_add_text("say_met_leofing", "It could be used as a conduit to purge The Lost from this area, allowing me to enter the Tower proper.", 7, "none", "none"); + chat_add_text("say_met_leofing", "A few ingredients are required for this. We will need the remains from a powerful leader of The Lost to counteract its influence.", 7, "none", "none"); + chat_add_text("say_met_leofing", "The remains of Leofing himself are needed, his unwavering devotion will power the connection.", 6, "none", "none"); + chat_add_text("say_met_leofing", "And finally a sample of the purple crystal itself, the physical connection needed to bridge my mind to the ether.", 7, "none", "flag_said_leofing"); + chat_add_text("say_met_leofing_alt", "I can use the energy here to purge The Lost from this area, allowing me to enter the Tower.", 6, "none", "none"); + chat_add_text("say_met_leofing_alt", "A few ingredients are required for this.", 3, "none", "none"); + chat_add_text("say_met_leofing_alt", "We will need the remains from a powerful leader of The Lost to counteract its influence.", 5, "none", "none"); + chat_add_text("say_met_leofing_alt", "The remains of Leofing himself are needed, his unwavering devotion will power the connection.", 6, "none", "none"); + chat_add_text("say_met_leofing_alt", "And finally a sample of the purple crystal itself, the physical connection needed to bridge my mind to the ether.", 7, "none", "none"); + chat_add_text("say_gave_items", "Incredible. To play a part in the fates, however minor, is beyond our wildest dreams. Thank you, Leofing, for this last gift.", 8, "none", !"flag_gave_items"); + chat_add_text("say_gave_items", "You know not the depths of your power, I would not be surprised if your path is guided by Pathos themself.", 6, "none", "none"); + chat_add_text("say_gave_items", "Meet me in the chapel. It can be found high up on the mighty stone walls, near the front gate.", 5, "none", "tele_out"); + chat_add_text("say_boss_died", "All of Daragoth should be cheering your name right now, hero.", 3, "none", "none"); + chat_add_text("say_boss_died", "A victory of this scale against The Lost has not happened in a long, long time.", 5, "none", "none"); + chat_add_text("say_boss_died", "The Idemark you met in this chapel is a fragment of herself, a pool of magic that could only react to certain stimuli.", 7, "none", "none"); + chat_add_text("say_boss_died", "Being in her study for so long, I can tell you that Idemark has left many more surprises for us inside that Tower.", 7, "none", "none"); + chat_add_text("say_boss_died", "Rest your muscles and mind for now, adventurer, you will need your strength for what lies ahead.", 5, "none", "none"); + } + + void game_menu_getoptions() + { + if (!(SAID_HI)) return; + if ((MET_LEOFING)) + { + string reg.mitem.title = "Met Leofing"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_met_leofing"; + } + if (COLLECTED_ITEMS == 3) + { + string reg.mitem.title = "Give items"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_gave_items"; + } + } + + void say_hi() + { + if ((CHAT_BUSY)) return; + if (!(CHAT_MENU_ON)) return; + if (!(SAID_HI)) + { + chat_start_sequence("say_hi"); + } + else + { + chat_start_sequence("say_hi_alt"); + } + } + + void flag_said_hi() + { + SAID_HI = 1; + if ((MET_LEOFING)) + { + CHAT_MENU_ON = 0; + } + } + + void say_met_leofing() + { + if (!(SAID_LEOFING)) + { + chat_start_sequence("say_met_leofing"); + } + else + { + chat_start_sequence("say_met_leofing_alt"); + } + } + + void flag_said_leofing() + { + UseTrigger("cv_met"); + SAID_LEOFING = 1; + } + + void say_gave_items() + { + if (!(COLLECTED_ITEMS == 3)) return; + chat_start_sequence("say_gave_items"); + } + + void flag_gave_items() + { + MET_LEOFING = 0; + COLLECTED_ITEMS = 0; + IDEMARK_ID = FindEntityByName("idemark"); + } + + void ext_chapel_start() + { + SetSayTextRange(2000); + if (!(CHAPEL_CHAT_STEP)) + { + chat_now("Idemark... all this time, it was you? Of course, there was no other explanation for all of this.", 7, "none", "ext_chapel_start"); + } + else + { + if (CHAPEL_CHAT_STEP == 1) + { + chat_now("The years that passed, the thousands of allies slain by the hordes of The Lost, the chosen Apostles now fallen.", 7, "none", "ext_chapel_start"); + } + else + { + if (CHAPEL_CHAT_STEP == 2) + { + chat_now("And your inner sanctum was the only one standing intact?", 4, "none", "do_idemark_line"); + } + else + { + if (CHAPEL_CHAT_STEP == 3) + { + chat_now("I am beyond impressed, in all my travels this type of magic has never been proven successful.", 6, "none", "ext_chapel_start"); + } + else + { + if (CHAPEL_CHAT_STEP == 4) + { + chat_now("The power of ritual. A type of magic that can be practiced by the young, the old; the sick, the healthy; the stupid, and gifted alike.", 9, "none", "ext_chapel_start"); + } + else + { + if (CHAPEL_CHAT_STEP == 5) + { + chat_now("To ritualize a mass sacrifice like this is unprecedented, even Leofing was unaware, I believe he was just acting in devotion to you.", 8, "none", "ext_chapel_start"); + } + else + { + if (CHAPEL_CHAT_STEP == 6) + { + chat_now("One last powerful ritual is what's needed to drain the pus from this festering wound that The Lost occupy.", 7, "none", "ext_chapel_start"); + } + else + { + if (CHAPEL_CHAT_STEP == 7) + { + chat_now("Warrior of Fate, be ready, the evil is about to manifest itself!", 6, "none", "do_idemark_line"); + } + else + { + if (CHAPEL_CHAT_STEP == 8) + { + chat_now("Oh, Idemark. Even in your diminished form you make time for pleasantries. I carry your spirit with me everywhere I go.", 8, "none", "ext_chapel_start"); + } + else + { + if (CHAPEL_CHAT_STEP == 9) + { + chat_now("Goodbye, dear friend and mentor.", 3, "none", "none"); + } + } + } + } + } + } + } + } + } + } + CHAPEL_CHAT_STEP += 1; + } + + void do_idemark_line() + { + CallExternal(IDEMARK_ID, "ext_chapel_speech"); + } + + void ext_boss_died() + { + chat_start_sequence("say_boss_died"); + } + + void tele_out() + { + string L_HEIGHT = GetEntityHeight(GetOwner()); + string L_ORIGIN = GetEntityOrigin(GetOwner()); + L_ORIGIN += "z"; + ClientEvent("new", "all", "effects/sfx_sprite_in", L_ORIGIN, "c-tele1.spr", 24, 2); + string L_TARGET = FindEntityByName("chapel_target1"); + SetEntityOrigin(GetOwner(), GetEntityOrigin(L_TARGET)); + SetAngles("face"); + } + + void ext_met_leofing() + { + MET_LEOFING = 1; + if ((SAID_HI)) + { + CHAT_MENU_ON = 0; + } + } + + void ext_collected() + { + COLLECTED_ITEMS += 1; + } + +} + +} diff --git a/scripts/angelscript/island1/map_startup.as b/scripts/angelscript/island1/map_startup.as new file mode 100644 index 00000000..7be134c5 --- /dev/null +++ b/scripts/angelscript/island1/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "island1"; + MAP_WEATHER = "clear;clear;clear;storm;clear;rain"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "Newbie Island by Orpheus"); + SetGlobalVar("G_MAP_DESC", "This island is renowned for its excellent hunting"); + SetGlobalVar("G_MAP_DIFF", "Levels 5-12 / 50-150hp"); + SetGlobalVar("G_WARN_HP", 50); + } + +} + +} diff --git a/scripts/angelscript/items/armor_base.as b/scripts/angelscript/items/armor_base.as new file mode 100644 index 00000000..b05d674a --- /dev/null +++ b/scripts/angelscript/items/armor_base.as @@ -0,0 +1,252 @@ +#pragma context server + +#include "items/base_miscitem.as" +#include "items/base_effect_armor.as" + +namespace MS +{ + +class ArmorBase : CGameScript +{ + int ARMOR_HUMAN_FEMALE_OFS_ADJ; + int ARMOR_PROTECTION; + string ARMOR_PROTECTION_AREA; + string ARMOR_REPLACE_BODYPARTS; + string ARMOR_TYPE; + int DMG_REDUCT; + string L_PERC_TO_FLOAT; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string NEW_ARMOR_MODEL; + + ArmorBase() + { + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "none"; + ARMOR_HUMAN_FEMALE_OFS_ADJ = 20; + NEW_ARMOR_MODEL = "armor/p_armorvest_new.mdl"; + } + + void OnSpawn() override + { + SetWorldModel(MODEL_WORLD); + SetHUDSprite("hand", "armor"); + SetHUDSprite("trade", "leather"); + SetHand("any"); + ARMOR_TYPE = BARMOR_TYPE; + ARMOR_PROTECTION = 0; + ARMOR_PROTECTION_AREA = BARMOR_PROTECTION_AREA; + ARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + // TODO: registerarmor + hide_body_parts(); + if (!(true)) return; + L_PERC_TO_FLOAT = BARMOR_PROTECTION; + L_PERC_TO_FLOAT *= 0.01; + DMG_REDUCT = 1; + DMG_REDUCT -= L_PERC_TO_FLOAT; + } + + void hide_body_parts() + { + CallExternal(GetOwner(), "ext_setbodytype", BARMOR_TYPE, GetEntityIndex(GetOwner())); + } + + void barmor_effect_activate() + { + CallExternal(GetOwner(), "ext_register_armor", GetEntityIndex(GetOwner())); + CallExternal(GetOwner(), "ext_setbodytype", BARMOR_TYPE, GetEntityIndex(GetOwner())); + } + + void show_body_parts() + { + if (GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner())) + { + CallExternal(GetOwner(), "ext_setbodytype", "normal", "remove"); + } + CallExternal(GetOwner(), "ext_register_armor", "none", "remove"); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + int L_SUBMODEL = 16; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + } + + void game_wear() + { + string L_RACE = param1; + string L_GENDER = param2; + string L_DEBUG = param3; + barmor_update_vest(L_RACE, L_GENDER, L_DEBUG); + string L_ARMOR_TEXT = ARMOR_TEXT; + L_ARMOR_TEXT += " ("; + L_ARMOR_TEXT += BARMOR_PROTECTION; + L_ARMOR_TEXT += ")"; + // TODO: playermessagecl L_ARMOR_TEXT + if (!(true)) return; + hide_body_parts(); + if (!(GetStat(GetOwner(), "strength") < ARMOR_STR_REQ)) return; + ScheduleDelayedEvent(0.1, "failed_str_req_loop"); + } + + void game_show() + { + string L_RACE = param1; + string L_GENDER = param2; + string L_DEBUG = param3; + barmor_update_vest(L_RACE, L_GENDER, L_DEBUG); + } + + void barmor_update_vest() + { + SetModel(NEW_ARMOR_MODEL); + SetModelBody(0, NEW_ARMOR_OFS); + if ((false)) + { + string OWNER_RACE = /* TODO: $get_local_prop */ $get_local_prop("race"); + string OWNER_GENDER = /* TODO: $get_local_prop */ $get_local_prop("gender"); + } + else + { + if ((true)) + { + } + string OWNER_RACE = GetEntityRace(GetOwner()); + string OWNER_GENDER = GetGender(GetOwner()); + } + string OWNER_RACE = StringToLower(OWNER_RACE); + string OWNER_GENDER = StringToLower(OWNER_GENDER); + if (OWNER_RACE == 0) + { + string OWNER_RACE = param1; + } + if (OWNER_GENDER == 0) + { + string OWNER_GENDER = param2; + } + LogDebug("barmor_update_vest race OWNER_RACE gend OWNER_GENDER dbg PARAM3"); + if (OWNER_GENDER == "female") + { + if (OWNER_RACE == "human") + { + LogDebug("*** Adjusted for Fembot"); + int ARMOR_GROUP = 0; + if (ARMOR_BODY_HUMAN_FEMALE != "ARMOR_BODY_HUMAN_FEMALE") + { + SetModelBody(ARMOR_GROUP, ARMOR_BODY_HUMAN_FEMALE); + } + else + { + string FEM_BODY = NEW_ARMOR_OFS; + FEM_BODY += ARMOR_HUMAN_FEMALE_OFS_ADJ; + SetModelBody(ARMOR_GROUP, FEM_BODY); + } + } + } + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + SetModelBody(ARMOR_GROUP, 0); + } + } + + void ext_set_armor() + { + SetModelBody(param1, param2); + } + + void barmor_effect_remove() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar") != "normal")) return; + show_body_parts(); + } + + void failed_str_req_loop() + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if (!(GetStat(GetOwner(), "strength") < ARMOR_STR_REQ)) return; + ScheduleDelayedEvent(10.0, "failed_str_req_loop"); + string ALRT_STR = "You are too weak to move freely in this armor. (Min Strength "; + ALRT_STR += ARMOR_STR_REQ; + ALRT_STR += ")"; + SendInfoMsg(GetOwner(), "Insufficient Strength for Armor " + ALRT_STR); + ApplyEffect(GetOwner(), "effects/effect_slow", 10.0, 0.5, GetEntityIndex(GetOwner())); + } + + void ext_activate_items() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if (!(GetStat(GetOwner(), "strength") < ARMOR_STR_REQ)) return; + ScheduleDelayedEvent(0.1, "failed_str_req_loop"); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + string DMG_AMT = param3; + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "spider_resist", "type_exists"))) + { + if (GetEntityRace(param1) == "spider") + { + int IS_SPIDER = 1; + } + if (GetEntityRace(param2) == "spider") + { + int IS_SPIDER = 1; + } + string L_NAME = GetEntityName(param1); + string L_NAME = StringToLower(L_NAME); + if ((L_NAME).findFirst("spider") >= 0) + { + int IS_SPIDER = 1; + } + if ((GetEntityProperty(param1, "itemname")).findFirst("spid") >= 0) + { + int IS_SPIDER = 1; + } + if ((IS_SPIDER)) + { + } + string DMG_RED_AMT = /* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "spider_resist", "type_first"); + DMG_AMT *= DMG_RED_AMT; + SetDamage("hit"); + SetDamage("dmg"); + LogDebug("spider_adjusted_damage PARAM3 to OUT_DMG via DMG_RED_AMT"); + } + if ((param4).findFirst("poison") >= 0) + { + string OUT_DMG = param3; + DMG_AMT *= 0.5; + SetDamage("hit"); + SetDamage("dmg"); + return; + } + else + { + if (!(GetEntityProperty(param1, "scriptvar"))) + { + } + DMG_AMT *= DMG_REDUCT; + SetDamage("hit"); + SetDamage("dmg"); + return; + } + } + + void ext_hide_armor() + { + SetModelBody(0, 0); + } + + void ext_hide_armor_cl() + { + SetModelBody(0, 0); + } + +} + +} diff --git a/scripts/angelscript/items/armor_base_helmet.as b/scripts/angelscript/items/armor_base_helmet.as new file mode 100644 index 00000000..c92ae4a6 --- /dev/null +++ b/scripts/angelscript/items/armor_base_helmet.as @@ -0,0 +1,167 @@ +#pragma context server + +#include "items/base_miscitem.as" +#include "items/base_effect_armor.as" + +namespace MS +{ + +class ArmorBaseHelmet : CGameScript +{ + string CUR_STUN_PROT; + int HELM_EFFECT_ACTIVE; + int HELM_HIDES_HEAD; + int IS_HELM; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + + ArmorBaseHelmet() + { + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "none"; + IS_HELM = 1; + HELM_HIDES_HEAD = 0; + } + + void OnSpawn() override + { + SetWearable(1); + SetModelBody(ARMOR_GROUP, ARMOR_BODY); + } + + void game_wear() + { + string CL_RACE = param1; + string CL_GENDER = param2; + string CL_DEBUG = param3; + game_show(CL_RACE, CL_GENDER, CL_DEBUG); + } + + void game_show() + { + SetModel(ARMOR_MODEL); + SetModelBody(ARMOR_GROUP, ARMOR_BODY); + if ((false)) + { + string OWNER_RACE = /* TODO: $get_local_prop */ $get_local_prop("race"); + string OWNER_GENDER = /* TODO: $get_local_prop */ $get_local_prop("gender"); + } + else + { + if ((true)) + { + } + string OWNER_RACE = GetEntityRace(GetOwner()); + string OWNER_GENDER = GetGender(GetOwner()); + } + string OWNER_RACE = StringToLower(OWNER_RACE); + string OWNER_GENDER = StringToLower(OWNER_GENDER); + if (OWNER_RACE == 0) + { + string OWNER_RACE = param1; + } + if (OWNER_GENDER == 0) + { + string OWNER_GENDER = param2; + } + LogDebug("game_show race OWNER_RACE gend OWNER_GENDER dbg PARAM3"); + if (OWNER_GENDER == "female") + { + if (OWNER_RACE == "human") + { + LogDebug("*** Adjusted for Fembot"); + if (ARMOR_BODY_HUMAN_FEMALE != "ARMOR_BODY_HUMAN_FEMALE") + { + SetModelBody(ARMOR_GROUP, ARMOR_BODY_HUMAN_FEMALE); + } + else + { + string FEM_BODY = ARMOR_BODY; + FEM_BODY += 14; + SetModelBody(ARMOR_GROUP, FEM_BODY); + } + } + } + if (!(HELM_HIDES_HEAD)) return; + CallExternal(GetOwner(), "ext_setheadtype", 1); + } + + void display_stun_info() + { + string L_STR = (CUR_STUN_PROT * 100); + int L_STR = int((100 - L_STR)); + if (CUR_STUN_PROT < 1) + { + SendColoredMessage(GetOwner(), "Your stun resistance is now " + L_STR); + } + if (CUR_STUN_PROT == 1) + { + SendColoredMessage(GetOwner(), "You now have no stun resistance"); + } + } + + void barmor_effect_activate() + { + if ((HELM_EFFECT_ACTIVE)) return; + HELM_EFFECT_ACTIVE = 1; + if ((HELM_HIDES_HEAD)) + { + CallExternal(GetOwner(), "ext_setheadtype", 1); + } + CallExternal(GetOwner(), "ext_register_helm", GetEntityIndex(GetOwner())); + string OLD_PROT = /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "stun"); + string POT_CHECK = GetEntityProperty(GetOwner(), "scriptvar"); + if ((POT_CHECK)) + { + CUR_STUN_PROT = GetEntityProperty(GetOwner(), "scriptvar"); + int SAME_PROTECT = 1; + SendColoredMessage(GetOwner(), "Your stun resistance remains " + STUN_PROTECTION + " due to Lesser Leadfoot Potion"); + } + if (OLD_PROT != STUN_PROTECTION) + { + CallExternal(GetOwner(), "set_stun_prot", STUN_PROTECTION); + ScheduleDelayedEvent(0.1, "display_stun_info"); + } + if (!(SAME_PROTECT)) + { + CUR_STUN_PROT = STUN_PROTECTION; + } + } + + void barmor_effect_remove() + { + if (!(HELM_EFFECT_ACTIVE)) return; + HELM_EFFECT_ACTIVE = 0; + if ((HELM_HIDES_HEAD)) + { + CallExternal(GetOwner(), "ext_setheadtype", 0); + } + CallExternal(GetEntityIndex(GetOwner()), "ext_register_helm", "none"); + string POT_CHECK = GetEntityProperty(GetOwner(), "scriptvar"); + if ((POT_CHECK)) + { + string L_STUN_RESIST = GetEntityProperty(GetOwner(), "scriptvar"); + SendColoredMessage(GetOwner(), "Your stun resistance remains " + L_STUN_RESIST + " due to Lesser Leadfoot Potion"); + } + if ((POT_CHECK)) return; + string OLD_PROT = /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "stun"); + CallExternal(GetOwner(), "set_stun_prot", 1); + string STUN_PROT = /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "stun"); + CUR_STUN_PROT = 1; + if (OLD_PROT != STUN_PROT) + { + ScheduleDelayedEvent(0.1, "display_stun_info"); + } + } + + void ext_setrender() + { + LogDebug("got ext_setrender PARAM1"); + // TODO: setrender PARAM1 + } + +} + +} diff --git a/scripts/angelscript/items/armor_base_helmet_new.as b/scripts/angelscript/items/armor_base_helmet_new.as new file mode 100644 index 00000000..d49a0385 --- /dev/null +++ b/scripts/angelscript/items/armor_base_helmet_new.as @@ -0,0 +1,83 @@ +#pragma context server + +#include "items/base_item.as" +#include "items/base_effect_armor.as" + +namespace MS +{ + +class ArmorBaseHelmetNew : CGameScript +{ + string CUR_STUN_PROT; + int HELM_HIDES_HEAD; + int IS_HELM; + + ArmorBaseHelmetNew() + { + IS_HELM = 1; + HELM_HIDES_HEAD = 0; + } + + void OnSpawn() override + { + SetWearable(1); + SetModelBody(ARMOR_GROUP, ARMOR_BODY); + } + + void game_wear() + { + SetModel(ARMOR_MODEL); + SetModelBody(ARMOR_GROUP, ARMOR_BODY); + if (!(true)) return; + if (!(HELM_HIDES_HEAD)) return; + CallExternal(GetOwner(), "ext_setheadtype", 1); + } + + void display_stun_info() + { + string L_STR = (CUR_STUN_PROT * 100); + int L_STR = int((100 - L_STR)); + if (CUR_STUN_PROT > 0) + { + SendColoredMessage(GetOwner(), "Your stun resistance is now " + L_STR); + } + if (CUR_STUN_PROT == 0) + { + SendColoredMessage(GetOwner(), "You now have no stun resistance"); + } + } + + void barmor_effect_activate() + { + if ((HELM_HIDES_HEAD)) + { + CallExternal(GetOwner(), "ext_setheadtype", 1); + } + string OLD_PROT = /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "stun"); + CallExternal(GetOwner(), "set_stun_prot", STUN_PROTECTION); + CUR_STUN_PROT = STUN_PROTECTION; + if (OLD_PROT != STUN_PROTECTION) + { + ScheduleDelayedEvent(0.1, "display_stun_info"); + } + } + + void barmor_effect_remove() + { + if ((HELM_HIDES_HEAD)) + { + CallExternal(GetOwner(), "ext_setheadtype", 0); + } + string OLD_PROT = /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "stun"); + CallExternal(GetOwner(), "set_stun_prot", 1); + string STUN_PROT = /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "stun"); + CUR_STUN_PROT = 1; + if (OLD_PROT != STUN_PROT) + { + ScheduleDelayedEvent(0.1, "display_stun_info"); + } + } + +} + +} diff --git a/scripts/angelscript/items/armor_base_hybrid.as b/scripts/angelscript/items/armor_base_hybrid.as new file mode 100644 index 00000000..10bac1f8 --- /dev/null +++ b/scripts/angelscript/items/armor_base_hybrid.as @@ -0,0 +1,193 @@ +#pragma context server + +namespace MS +{ + +class ArmorBaseHybrid : CGameScript +{ + int ARMOR_GROUP; + int EXPAR; + int IN_WORLD; + int IS_REGISTERED; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string NEW_ARMOR_MODEL; + + ArmorBaseHybrid() + { + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "none"; + ARMOR_GROUP = 4; + NEW_ARMOR_MODEL = "armor/p_armorvest_new.mdl"; + EXPAR = 1; + } + + void OnSpawn() override + { + SetWorldModel(MODEL_WORLD); + SetHUDSprite("hand", "armor"); + SetHUDSprite("trade", "leather"); + if ((true)) + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) + { + SetModelBody(0, 10); + } + if ((GetEntityProperty(GetOwner(), "is_worn"))) + { + if (!(IS_HELM)) + { + string L_MODEL_WEAR = ARMOR_BODY; + L_MODEL_WEAR += 1; + SetModelBody(ARMOR_GROUP, L_MODEL_WEAR); + } + if ((IS_HELM)) + { + SetModelBody(ARMOR_GROUP, ARMOR_BODY); + } + } + } + SetHand("any"); + if ((true)) + { + ScheduleDelayedEvent(1.0, "armor_spec_effect"); + } + register_armor(); + } + + void register_armor() + { + ScheduleDelayedEvent(0.1, "register_loop"); + } + + void OnDeploy() override + { + IN_WORLD = 0; + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + int L_SUBMODEL = 16; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + CallExternal(GetEntityIndex(GetOwner()), "wearing_armor", 0); + SetModel("null.mdl"); + if (!(IS_HELM)) + { + clear_armor_body(); + } + } + + void game_wear() + { + IN_WORLD = 0; + if (!(IS_HELM)) + { + SetModel(NEW_ARMOR_MODEL); + set_armor_body(); + } + else + { + SetModel(ARMOR_MODEL); + SetModelBody(ARMOR_GROUP, ARMOR_BODY); + } + // TODO: playermessagecl ARMOR_TEXT + register_armor(); + if ((IS_HELM)) return; + set_armor_body(); + if (!(true)) return; + if (!(GetStat(GetOwner(), "strength") < ARMOR_STR_REQ)) return; + ScheduleDelayedEvent(0.1, "failed_str_req_loop"); + } + + void game_fall() + { + IN_WORLD = 1; + SetModelBody(0, 17); + PlayAnim("once", "package_floor_idle"); + } + + void game_remove() + { + } + + void register_loop() + { + IS_REGISTERED = 0; + if ((IsEntityAlive(GetOwner()))) + { + if (!(IN_WORLD)) + { + } + if ((IS_HELM)) + { + SetModel(ARMOR_MODEL); + if ((GetEntityProperty(GetOwner(), "is_worn"))) + { + } + SetModelBody(ARMOR_GROUP, ARMOR_BODY); + } + if (!(IS_HELM)) + { + } + SetModel(NEW_ARMOR_MODEL); + set_armor_body(1); + } + ScheduleDelayedEvent(10.7, "register_loop"); + } + + void OnDrop() override + { + SetModel("misc/p_misc.mdl"); + SetModelBody(0, 16); + } + + void set_armor_body() + { + LogDebug("set_armor_body NEW_ARMOR_OFS"); + SetModelBody(0, NEW_ARMOR_OFS); + CallExternal(GetOwner(), "ext_setbodytype", BARMOR_TYPE); + } + + void armor_spec_effect() + { + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if ((IS_HELM)) return; + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + if (GetEntityRace(param1) == "spider") + { + } + string OUT_DMG = param3; + OUT_DMG *= PLR_SPIDER_AMT; + SetDamage("hit"); + SetDamage("dmg"); + } + } + + void failed_str_req_loop() + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if (!(GetStat(GetOwner(), "strength") < ARMOR_STR_REQ)) return; + ScheduleDelayedEvent(10.0, "failed_str_req_loop"); + string ALRT_STR = "You are too weak to move freely in this armor. (Min Strength "; + ALRT_STR += ARMOR_STR_REQ; + ALRT_STR += ")"; + SendInfoMsg(GetOwner(), "Insufficient Strength for Armor " + ALRT_STR); + ApplyEffect(GetOwner(), "effects/effect_slow", 10.0, 0.5, GetEntityIndex(GetOwner())); + } + + void ext_activate_items() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if (!(GetStat(GetOwner(), "strength") < ARMOR_STR_REQ)) return; + ScheduleDelayedEvent(0.1, "failed_str_req_loop"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_base_new.as b/scripts/angelscript/items/armor_base_new.as new file mode 100644 index 00000000..558875df --- /dev/null +++ b/scripts/angelscript/items/armor_base_new.as @@ -0,0 +1,149 @@ +#pragma context server + +#include "items/base_item.as" +#include "items/base_effect_armor.as" + +namespace MS +{ + +class ArmorBaseNew : CGameScript +{ + int ARMOR_PROTECTION; + string ARMOR_PROTECTION_AREA; + string ARMOR_REPLACE_BODYPARTS; + string ARMOR_TYPE; + int DMG_REDUCT; + string L_PERC_TO_FLOAT; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string NEW_ARMOR_MODEL; + + ArmorBaseNew() + { + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 16; + MODEL_VIEW = "none"; + NEW_ARMOR_MODEL = "armor/p_armorvest_new.mdl"; + } + + void OnSpawn() override + { + SetWorldModel(MODEL_WORLD); + SetHUDSprite("hand", "armor"); + SetHUDSprite("trade", "leather"); + SetHand("any"); + ARMOR_TYPE = BARMOR_TYPE; + ARMOR_PROTECTION = 0; + ARMOR_PROTECTION_AREA = BARMOR_PROTECTION_AREA; + ARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + // TODO: registerarmor + SetModelBody(0, NEW_ARMOR_OFS); + hide_body_parts(); + if (!(true)) return; + L_PERC_TO_FLOAT = BARMOR_PROTECTION; + L_PERC_TO_FLOAT *= 0.01; + DMG_REDUCT = 1; + DMG_REDUCT -= L_PERC_TO_FLOAT; + } + + void hide_body_parts() + { + CallExternal(GetOwner(), "ext_setbodytype", BARMOR_TYPE); + } + + void show_body_parts() + { + CallExternal(GetOwner(), "ext_setbodytype", "normal"); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + int L_SUBMODEL = 16; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + } + + void game_wear() + { + SetModel(NEW_ARMOR_MODEL); + SetModelBody(0, NEW_ARMOR_OFS); + // TODO: playermessagecl ARMOR_TEXT BARMOR_PROTECTION + if (!(true)) return; + hide_body_parts(); + if (!(GetStat(GetOwner(), "strength") < ARMOR_STR_REQ)) return; + ScheduleDelayedEvent(0.1, "failed_str_req_loop"); + } + + void barmor_effect_remove() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar") != "normal")) return; + show_body_parts(); + } + + void barmor_effect_activate() + { + CallExternal(GetOwner(), "ext_setbodytype", BARMOR_TYPE); + } + + void failed_str_req_loop() + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if (!(GetStat(GetOwner(), "strength") < ARMOR_STR_REQ)) return; + ScheduleDelayedEvent(10.0, "failed_str_req_loop"); + string ALRT_STR = "You are too weak to move freely in this armor. (Min Strength "; + ALRT_STR += ARMOR_STR_REQ; + ALRT_STR += ")"; + SendInfoMsg(GetOwner(), "Insufficient Strength for Armor " + ALRT_STR); + ApplyEffect(GetOwner(), "effects/effect_slow", 10.0, 0.5, GetEntityIndex(GetOwner())); + } + + void ext_activate_items() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if (!(GetStat(GetOwner(), "strength") < ARMOR_STR_REQ)) return; + ScheduleDelayedEvent(0.1, "failed_str_req_loop"); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + if (GetEntityRace(param1) == "spider") + { + } + string DMG_RED_AMT = GetEntityProperty(GetOwner(), "scriptvar"); + string OUT_DMG = param3; + OUT_DMG *= PLR_SPIDER_AMT; + SetDamage("hit"); + SetDamage("dmg"); + return; + } + if ((param4).findFirst("poison") >= 0) + { + string OUT_DMG = param3; + PARAM3 *= 0.5; + SetDamage("hit"); + SetDamage("dmg"); + return; + } + else + { + if (!(GetEntityProperty(param1, "scriptvar"))) + { + } + PARAM3 *= DMG_REDUCT; + SetDamage("hit"); + SetDamage("dmg"); + return; + } + } + +} + +} diff --git a/scripts/angelscript/items/armor_belmont.as b/scripts/angelscript/items/armor_belmont.as new file mode 100644 index 00000000..8c5178d7 --- /dev/null +++ b/scripts/angelscript/items/armor_belmont.as @@ -0,0 +1,76 @@ +#pragma context server + +#include "items/base_elemental_resist.as" +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorBelmont : CGameScript +{ + int ARMOR_BODY; + int ARMOR_GROUP; + string ARMOR_MODEL; + int ARMOR_STR_REQ; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int BER_ACTIVATE_WHILE_WORN; + int EFFECT_ACTIVE; + int NEW_ARMOR_OFS; + int REG_SPECIAL_EFFECT; + + ArmorBelmont() + { + ARMOR_MODEL = "armor/p_armorvest2.mdl"; + ARMOR_GROUP = 4; + ARMOR_BODY = 0; + ARMOR_TEXT = "You don the Armor of Bravery."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.4; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + REG_SPECIAL_EFFECT = 1; + BER_ACTIVATE_WHILE_WORN = 1; + ARMOR_STR_REQ = 40; + NEW_ARMOR_OFS = 10; + } + + void OnSpawn() override + { + SetName("Armor of Bravery"); + SetDescription("The bloodstains tell tales of brave warriors fallen in battle."); + SetWeight(120); + SetSize(60); + SetWearable(1); + SetValue(590); + SetHUDSprite("trade", 150); + } + + void elm_activate_effect() + { + if (!(true)) return; + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if ((EFFECT_ACTIVE)) return; + SendColoredMessage(GetOwner(), "You are now... stylin'..."); + EFFECT_ACTIVE = 1; + } + + void elm_remove_effect() + { + if (!(true)) return; + EFFECT_ACTIVE = 0; + SendColoredMessage(GetOwner(), "You feel normal."); + } + + void ext_activate_items() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + EFFECT_ACTIVE = 0; + } + +} + +} diff --git a/scripts/angelscript/items/armor_body.as b/scripts/angelscript/items/armor_body.as new file mode 100644 index 00000000..b30ed772 --- /dev/null +++ b/scripts/angelscript/items/armor_body.as @@ -0,0 +1,15 @@ +#pragma context server + +namespace MS +{ + +class ArmorBody : CGameScript +{ + ArmorBody() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/armor_d_test.as b/scripts/angelscript/items/armor_d_test.as new file mode 100644 index 00000000..0da04d2d --- /dev/null +++ b/scripts/angelscript/items/armor_d_test.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorDTest : CGameScript +{ + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + + ArmorDTest() + { + ARMOR_TEXT = "No one tosses a dwarf."; + BARMOR_TYPE = "dwarf_normal"; + BARMOR_PROTECTION = 0.1; + } + + void OnSpawn() override + { + SetName("Dwarf Test"); + SetDescription("Testing the submodel system"); + SetWeight(120); + SetSize(60); + SetWearable(1); + SetValue(590); + SetHUDSprite("trade", "armor3"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_dark.as b/scripts/angelscript/items/armor_dark.as new file mode 100644 index 00000000..1e0cfeec --- /dev/null +++ b/scripts/angelscript/items/armor_dark.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorDark : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + ArmorDark() + { + ARMOR_MODEL = "armor/p_armorvest.mdl"; + ARMOR_BODY = 4; + ARMOR_TEXT = "A stench of evil stings your nostrils."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.5; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + NEW_ARMOR_OFS = 5; + } + + void OnSpawn() override + { + SetName("Sir Geric s Armor"); + SetDescription("This armor reeks with the soul of Sir Geric"); + SetWeight(120); + SetSize(60); + SetWearable(1); + SetValue(590); + SetHUDSprite("trade", 149); + } + +} + +} diff --git a/scripts/angelscript/items/armor_faura.as b/scripts/angelscript/items/armor_faura.as new file mode 100644 index 00000000..468c626f --- /dev/null +++ b/scripts/angelscript/items/armor_faura.as @@ -0,0 +1,112 @@ +#pragma context server + +#include "items/armor_base.as" +#include "items/base_elemental_resist.as" +#include "items/base_loopsnd.as" + +namespace MS +{ + +class ArmorFaura : CGameScript +{ + int ARMOR_BODY; + int ARMOR_GROUP; + string ARMOR_MODEL; + int ARMOR_STR_REQ; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int LOOPSND_LENGTH; + string LOOPSND_NAME; + float LOOPSND_VOLUME; + int NEW_ARMOR_OFS; + int PHOENIX_ACTIVE; + + ArmorFaura() + { + ARMOR_MODEL = "armor/p_armorvest2.mdl"; + ARMOR_GROUP = 4; + ARMOR_BODY = 6; + ARMOR_TEXT = "You assemble the Aura of Fire."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.55; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + ELM_NAME = "farmr"; + ELM_TYPE = "fire"; + ELM_AMT = 30; + ARMOR_STR_REQ = 30; + LOOPSND_NAME = "items/torch1.wav"; + LOOPSND_LENGTH = 6; + LOOPSND_VOLUME = 2.5; + NEW_ARMOR_OFS = 16; + } + + void OnSpawn() override + { + SetName("Aura of Fire"); + SetDescription("Enchanted mail that protects the user with a ring of fire."); + SetWeight(180); + SetSize(60); + SetWearable(1); + SetValue(750); + SetHUDSprite("trade", 153); + } + + void elm_activate_effect() + { + string OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.fire"); + if (OWNER_SKILL < 20) + { + SendColoredMessage(GetOwner(), "You lack the fire skill to activate this armor's magic."); + } + if (!(OWNER_SKILL >= 20)) return; + PHOENIX_ACTIVE = 1; + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, ELM_TYPE, ELM_AMT); + ScheduleDelayedEvent(0.1, "secondary_element_activate"); + } + + void secondary_element_activate() + { + CallExternal(GetOwner(), "ext_register_element", "carmr", "cold", "25"); + ScheduleDelayedEvent(0.1, "activate_aura"); + } + + void activate_aura() + { + string AURA_DOT = GetSkillLevel(GetOwner(), "spellcasting.fire"); + AURA_DOT *= 0.25; + CallExternal(GetOwner(), "ext_fire_aura_activate", AURA_DOT, 48); + // svplaysound: svplaysound LOOPSND_CHANNEL LOOPSND_VOLUME LOOPSND_NAME + EmitSound(LOOPSND_CHANNEL, LOOPSND_VOLUME, LOOPSND_NAME); + } + + void elm_remove_effect() + { + if (!(PHOENIX_ACTIVE)) return; + PHOENIX_ACTIVE = 0; + if (!(GetSkillLevel(GetOwner(), "spellcasting.fire") >= 20)) return; + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, "remove"); + ScheduleDelayedEvent(0.1, "secondary_element_remove"); + } + + void secondary_element_remove() + { + CallExternal(GetOwner(), "ext_register_element", "carmr", "remove"); + ScheduleDelayedEvent(0.1, "remove_aura"); + } + + void remove_aura() + { + CallExternal(GetOwner(), "ext_fire_aura_remove"); + loopsnd_end(); + } + +} + +} diff --git a/scripts/angelscript/items/armor_faura_cl.as b/scripts/angelscript/items/armor_faura_cl.as new file mode 100644 index 00000000..0d66f27f --- /dev/null +++ b/scripts/angelscript/items/armor_faura_cl.as @@ -0,0 +1,110 @@ +#pragma context client + +namespace MS +{ + +class ArmorFauraCl : CGameScript +{ + int FOOT_BONE; + int FX_ACTIVE; + string FX_DURATION; + string FX_RADIUS; + string GLOW_COLOR; + int GLOW_RAD; + string LIGHT_ID; + string MY_OWNER; + string OWNER_FEET; + string OWNER_NPC; + int V_OFS; + + ArmorFauraCl() + { + GLOW_RAD = 128; + GLOW_COLOR = Vector3(255, 128, 64); + V_OFS = -26; + FOOT_BONE = 4; + } + + void client_activate() + { + SetCallback("render", "enable"); + MY_OWNER = param1; + FX_RADIUS = param2; + FX_DURATION = param3; + OWNER_NPC = param4; + FX_RADIUS -= 24; + LogDebug("***** Owner MY_OWNER rad FX_RADIUS dur FX_DURATION"); + FX_DURATION("remove_fx"); + OWNER_FEET = /* TODO: $getcl */ $getcl(MY_OWNER, "bonepos", FOOT_BONE); + FX_ACTIVE = 1; + ClientEffect("tempent", "sprite", "weapons/projectiles.mdl", OWNER_FEET, "setup_flame_circle", "update_flame_circle"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 1.0); + LIGHT_ID = "game.script.last_light_id"; + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(MY_OWNER, "exists"))) return; + ClientEffect("light", LIGHT_ID, /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 1.0); + } + + void remove_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_fx2"); + } + + void remove_fx2() + { + RemoveScript(); + } + + void update_flame_circle() + { + if ((FX_ACTIVE)) + { + OWNER_FEET = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + if (!(OWNER_NPC)) + { + if ((/* TODO: $getcl */ $getcl(MY_OWNER, "ducking"))) + { + OWNER_FEET += "z"; + } + OWNER_FEET += "z"; + } + else + { + OWNER_FEET += "z"; + } + ClientEffect("tempent", "set_current_prop", "origin", OWNER_FEET); + } + else + { + ClientEffect("tempent", "set_current_prop", "rendermode", 5); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + ClientEffect("tempent", "set_current_prop", "death_delay", /* TODO: $neg */ $neg(FX_DURATION)); + ClientEffect("tempent", "set_current_prop", "fadeout", 0); + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + } + + void setup_flame_circle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 51); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "scale", 2.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + +} + +} diff --git a/scripts/angelscript/items/armor_fireliz.as b/scripts/angelscript/items/armor_fireliz.as new file mode 100644 index 00000000..1dcaf416 --- /dev/null +++ b/scripts/angelscript/items/armor_fireliz.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "items/armor_base.as" +#include "items/base_elemental_resist.as" + +namespace MS +{ + +class ArmorFireliz : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int NEW_ARMOR_OFS; + + ArmorFireliz() + { + ARMOR_MODEL = "armor/p_armorvest.mdl"; + ARMOR_BODY = 7; + ARMOR_TEXT = "You work your way into some fire lizard skins."; + BARMOR_TYPE = "leather"; + BARMOR_PROTECTION = 0.45; + BARMOR_PROTECTION_AREA = "chest"; + BARMOR_REPLACE_BODYPARTS = "chest"; + ELM_NAME = "firel"; + ELM_TYPE = "fire"; + ELM_AMT = 75; + NEW_ARMOR_OFS = 8; + } + + void OnSpawn() override + { + SetName("Fire Lizard Skin"); + SetDescription("This armor is carved from the hide of a Fire Lizard"); + SetWeight(28); + SetSize(30); + SetWearable(1); + SetValue(190); + SetHUDSprite("trade", 157); + } + +} + +} diff --git a/scripts/angelscript/items/armor_golden.as b/scripts/angelscript/items/armor_golden.as new file mode 100644 index 00000000..8021d025 --- /dev/null +++ b/scripts/angelscript/items/armor_golden.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorGolden : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + int ARMOR_STR_REQ; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + ArmorGolden() + { + ARMOR_MODEL = "armor/p_armorvest.mdl"; + ARMOR_BODY = 3; + ARMOR_TEXT = "It is as comforting putting this armor on as it is a beauty to the eye."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.6; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + ARMOR_STR_REQ = 25; + NEW_ARMOR_OFS = 4; + } + + void OnSpawn() override + { + SetName("Lord Vecilus Mail"); + SetDescription("This elven armor was once worn by Lord Vecilus"); + SetWeight(210); + SetSize(150); + SetWearable(1); + SetValue(1200); + SetHUDSprite("trade", 148); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_alvo1.as b/scripts/angelscript/items/armor_helm_alvo1.as new file mode 100644 index 00000000..7142bda9 --- /dev/null +++ b/scripts/angelscript/items/armor_helm_alvo1.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "items/base_elemental_resist.as" +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmAlvo1 : CGameScript +{ + int ARMOR_BODY; + int ARMOR_BODY_HUMAN_FEMALE; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmAlvo1() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 30; + ARMOR_BODY_HUMAN_FEMALE = 31; + ARMOR_TEXT = "You equip the Corrodinator."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.6; + STUN_PROTECTION = 0.5; + } + + void OnSpawn() override + { + SetName("Corrodinator"); + SetDescription("Increases duration of your poison and acid effects."); + SetWeight(1); + SetSize(20); + SetWearable(1); + SetValue(1000); + SetHUDSprite("trade", 49); + } + + void elm_activate_effect() + { + CallExternal(GetOwner(), "ext_register_corrode", 2.0); + } + + void elm_remove_effect() + { + CallExternal(GetOwner(), "ext_register_corrode", 0); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_barnum.as b/scripts/angelscript/items/armor_helm_barnum.as new file mode 100644 index 00000000..7862bf81 --- /dev/null +++ b/scripts/angelscript/items/armor_helm_barnum.as @@ -0,0 +1,75 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmBarnum : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmBarnum() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 6; + ARMOR_TEXT = "You equip the Helm of Darkness."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.6; + STUN_PROTECTION = 0.75; + } + + void OnSpawn() override + { + SetName("Helm of Darkness"); + SetDescription("This helm is enchanted with vile magics."); + SetWeight(5); + SetSize(20); + SetWearable(1); + SetValue(1150); + SetHUDSprite("trade", "helm3"); + } + + void game_wear() + { + ScheduleDelayedEvent(0.1, "armor_spec_effect"); + } + + void OnDeploy() override + { + ScheduleDelayedEvent(0.1, "armor_spec_effect"); + } + + void armor_spec_effect() + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) + { + remove_bonus(); + } + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(0.1, "grant_bonus"); + } + + void grant_bonus() + { + CallExternal(GetOwner(), "ext_set_dmg_multi", "poison", "helm1", 1.5); + CallExternal(GetOwner(), "ext_set_dmg_multi", "acid", "helm2", 1.5); + SendColoredMessage(GetOwner(), "Your affliction power has increased."); + } + + void remove_bonus() + { + CallExternal(GetOwner(), "ext_set_dmg_multi", "poison", "helm1", 0); + CallExternal(GetOwner(), "ext_set_dmg_multi", "acid", "helm2", 0); + SendColoredMessage(GetOwner(), "Your affliction power has returned to normal."); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_bronze.as b/scripts/angelscript/items/armor_helm_bronze.as new file mode 100644 index 00000000..941a807e --- /dev/null +++ b/scripts/angelscript/items/armor_helm_bronze.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmBronze : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmBronze() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 9; + ARMOR_TEXT = "You put on a bronze helmet."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.25; + STUN_PROTECTION = 0.85; + } + + void OnSpawn() override + { + SetName("Bronze Helmet"); + SetDescription("A light helmet made of padding and a thin layer of bronze"); + SetWeight(5); + SetSize(15); + SetValue(30); + SetHUDSprite("trade", 87); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_dark.as b/scripts/angelscript/items/armor_helm_dark.as new file mode 100644 index 00000000..fc577322 --- /dev/null +++ b/scripts/angelscript/items/armor_helm_dark.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmDark : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmDark() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 4; + ARMOR_TEXT = "You put on a dark platemail helmet."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.6; + STUN_PROTECTION = 0.7; + } + + void OnSpawn() override + { + SetName("Dark Platemail Helmet"); + SetDescription("A dark platemail helmet"); + SetWeight(5); + SetSize(20); + SetWearable(1); + SetValue(1150); + SetHUDSprite("trade", 85); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_elyg.as b/scripts/angelscript/items/armor_helm_elyg.as new file mode 100644 index 00000000..d956953d --- /dev/null +++ b/scripts/angelscript/items/armor_helm_elyg.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "items/base_elemental_resist.as" +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmElyg : CGameScript +{ + int ARMOR_BODY; + int ARMOR_BODY_HUMAN_FEMALE; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + string ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + string SP_ATTRIB; + float STUN_PROTECTION; + + ArmorHelmElyg() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 28; + ARMOR_BODY_HUMAN_FEMALE = 29; + ARMOR_TEXT = "You equip the Helm of Venom."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.6; + STUN_PROTECTION = 0.5; + SP_ATTRIB = "skill.spellcasting.affliction.ratio"; + ELM_NAME = "velm1"; + ELM_TYPE = "poison"; + } + + void OnSpawn() override + { + SetName("Helm of Venom"); + SetDescription("This battered helm protects the wearer from poisons"); + SetWeight(1); + SetSize(20); + SetWearable(1); + SetValue(1000); + SetHUDSprite("trade", 49); + } + + void elm_get_resist() + { + ELM_AMT = GetEntityProperty(GetOwner(), "sp_attrib"); + ELM_AMT *= 2; + ELM_AMT *= 100; + if (ELM_AMT > 25) + { + ELM_AMT = 25; + } + } + + void elm_activate_effect() + { + CallExternal(GetOwner(), "ext_register_element", "velm2", "acid", ELM_AMT); + } + + void elm_remove_effect() + { + CallExternal(GetOwner(), "ext_register_element", "velm2", "remove"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_gaz1.as b/scripts/angelscript/items/armor_helm_gaz1.as new file mode 100644 index 00000000..e073c7ca --- /dev/null +++ b/scripts/angelscript/items/armor_helm_gaz1.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "items/base_elemental_resist.as" +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmGaz1 : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + string ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int REG_SPECIAL_EFFECT; + string SP_ATTRIB; + float STUN_PROTECTION; + + ArmorHelmGaz1() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 7; + ARMOR_TEXT = "You equip the Helm of Fire Reistance."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.6; + STUN_PROTECTION = 0.6; + REG_SPECIAL_EFFECT = 1; + SP_ATTRIB = "skill.spellcasting.fire.ratio"; + ELM_NAME = "fireh"; + ELM_TYPE = "fire"; + } + + void OnSpawn() override + { + SetName("Helm of Fire Resistance"); + SetDescription("This helm causes a shiver to go down your spine."); + SetWeight(5); + SetSize(20); + SetWearable(1); + SetValue(1150); + SetHUDSprite("trade", 83); + } + + void elm_get_resist() + { + ELM_AMT = GetEntityProperty(GetOwner(), "sp_attrib"); + ELM_AMT *= 2; + ELM_AMT *= 100; + if (ELM_AMT > 50) + { + ELM_AMT = 50; + } + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_gaz2.as b/scripts/angelscript/items/armor_helm_gaz2.as new file mode 100644 index 00000000..589e03b1 --- /dev/null +++ b/scripts/angelscript/items/armor_helm_gaz2.as @@ -0,0 +1,59 @@ +#pragma context server + +#include "items/base_elemental_resist.as" +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmGaz2 : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + string ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + string SP_ATTRIB; + float STUN_PROTECTION; + + ArmorHelmGaz2() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 6; + ARMOR_TEXT = "You equip the Helm of Cold Resistance."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.6; + STUN_PROTECTION = 0.65; + SP_ATTRIB = "skill.spellcasting.ice.ratio"; + ELM_NAME = "coldh"; + ELM_TYPE = "cold"; + } + + void OnSpawn() override + { + SetName("Helm of Cold Resistance"); + SetDescription("This helm is warm to the touch."); + SetWeight(5); + SetSize(20); + SetWearable(1); + SetValue(1150); + SetHUDSprite("trade", 82); + } + + void elm_get_resist() + { + ELM_AMT = GetEntityProperty(GetOwner(), "sp_attrib"); + ELM_AMT *= 2; + ELM_AMT *= 100; + if (ELM_AMT > 50) + { + ELM_AMT = 50; + } + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_golden.as b/scripts/angelscript/items/armor_helm_golden.as new file mode 100644 index 00000000..bc190e6e --- /dev/null +++ b/scripts/angelscript/items/armor_helm_golden.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmGolden : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmGolden() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 3; + ARMOR_TEXT = "You put on the golden platemail helmet."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.6; + STUN_PROTECTION = 0.65; + } + + void OnSpawn() override + { + SetName("Golden Platemail Helmet"); + SetDescription("A golden platemail helmet"); + SetWeight(20); + SetSize(40); + SetWearable(1); + SetValue(2500); + SetHUDSprite("trade", 84); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_gray.as b/scripts/angelscript/items/armor_helm_gray.as new file mode 100644 index 00000000..23977ff4 --- /dev/null +++ b/scripts/angelscript/items/armor_helm_gray.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmGray : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmGray() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 5; + ARMOR_TEXT = "You put on the Helm of Stability."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.6; + STUN_PROTECTION = 0.3; + } + + void OnSpawn() override + { + SetName("Helmet of Stability"); + SetDescription("This thoroughly padded helmet offers extraordinary stun resistance"); + SetWeight(5); + SetSize(20); + SetWearable(1); + SetValue(1150); + SetHUDSprite("trade", 81); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_hat.as b/scripts/angelscript/items/armor_helm_hat.as new file mode 100644 index 00000000..357ff6a8 --- /dev/null +++ b/scripts/angelscript/items/armor_helm_hat.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmHat : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmHat() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 5; + ARMOR_TEXT = "You put on the funny hat."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.0; + STUN_PROTECTION = 0.99; + } + + void OnSpawn() override + { + SetName("Helmet of Stability"); + SetDescription("This thoroughly padded helmet offers extrodinary stun resistance"); + SetWeight(5); + SetSize(20); + SetWearable(1); + SetValue(1150); + SetHUDSprite("trade", "helm3"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_knight.as b/scripts/angelscript/items/armor_helm_knight.as new file mode 100644 index 00000000..c34d6cf1 --- /dev/null +++ b/scripts/angelscript/items/armor_helm_knight.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmKnight : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmKnight() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 2; + ARMOR_TEXT = "You put on a knight's platemail helmet."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.6; + STUN_PROTECTION = 0.75; + } + + void OnSpawn() override + { + SetName("Knight s Platemail Helmet"); + SetDescription("A knight s platemail helmet"); + SetWeight(40); + SetSize(30); + SetWearable(1); + SetValue(530); + SetHUDSprite("trade", "helm3"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_mongol.as b/scripts/angelscript/items/armor_helm_mongol.as new file mode 100644 index 00000000..17aef89c --- /dev/null +++ b/scripts/angelscript/items/armor_helm_mongol.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmMongol : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmMongol() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 1; + ARMOR_TEXT = "You put on a decorated platemail helmet."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.5; + STUN_PROTECTION = 0.8; + } + + void OnSpawn() override + { + SetName("Decorated Helmet"); + SetDescription("A decorated platemail helmet"); + SetWeight(20); + SetSize(20); + SetWearable(1); + SetValue(250); + SetHUDSprite("trade", "helm2"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_plate.as b/scripts/angelscript/items/armor_helm_plate.as new file mode 100644 index 00000000..65f301ec --- /dev/null +++ b/scripts/angelscript/items/armor_helm_plate.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmPlate : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmPlate() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 0; + ARMOR_TEXT = "You put on a platemail helmet."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.3; + STUN_PROTECTION = 0.8; + } + + void OnSpawn() override + { + SetName("Platemail Helmet"); + SetDescription("A platemail helmet"); + SetWeight(15); + SetSize(15); + SetValue(100); + SetHUDSprite("trade", "helm1"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_helm_undead.as b/scripts/angelscript/items/armor_helm_undead.as new file mode 100644 index 00000000..fb799146 --- /dev/null +++ b/scripts/angelscript/items/armor_helm_undead.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ArmorHelmUndead : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + float STUN_PROTECTION; + + ArmorHelmUndead() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 12; + ARMOR_TEXT = "You gain resistance to damage from undead."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.0; + STUN_PROTECTION = 0.7; + } + + void OnSpawn() override + { + SetName("Helm of the Dead"); + SetDescription("This seems to be stitched from bat wings and rotting flesh"); + SetWeight(10); + SetSize(1); + SetWearable(1); + SetValue(1); + SetHUDSprite("trade", 86); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if (GetEntityRace(param1) == "undead") + { + int IS_UNDEAD = 1; + } + if (GetEntityRace(param2) == "undead") + { + int IS_UNDEAD = 1; + } + if (!(IS_UNDEAD)) return; + string IN_DMG = param3; + string OUT_DMG = param3; + IN_DMG *= 0.25; + OUT_DMG -= IN_DMG; + LogDebug("game_takedamage adjustdmg PARAM3 to OUT_DMG"); + SetDamage("hit"); + SetDamage("dmg"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_knight.as b/scripts/angelscript/items/armor_knight.as new file mode 100644 index 00000000..f85d1e6f --- /dev/null +++ b/scripts/angelscript/items/armor_knight.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorKnight : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + ArmorKnight() + { + ARMOR_MODEL = "armor/p_armorvest.mdl"; + ARMOR_BODY = 2; + ARMOR_TEXT = "You suit up in some knight's armor."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.5; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + NEW_ARMOR_OFS = 3; + } + + void OnSpawn() override + { + SetName("Full Knight s Armor"); + SetDescription("Specially crafted armor for knights"); + SetWeight(210); + SetSize(150); + SetWearable(1); + SetValue(1200); + SetHUDSprite("trade", 3); + } + +} + +} diff --git a/scripts/angelscript/items/armor_leather.as b/scripts/angelscript/items/armor_leather.as new file mode 100644 index 00000000..c2c2f580 --- /dev/null +++ b/scripts/angelscript/items/armor_leather.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorLeather : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + ArmorLeather() + { + ARMOR_MODEL = "armor/p_armorvest.mdl"; + ARMOR_BODY = 5; + ARMOR_TEXT = "You work your way into some leather armor."; + BARMOR_TYPE = "leather"; + BARMOR_PROTECTION = 0.12; + BARMOR_PROTECTION_AREA = "chest"; + BARMOR_REPLACE_BODYPARTS = "chest"; + NEW_ARMOR_OFS = 6; + } + + void OnSpawn() override + { + SetName("Leather Vest"); + SetDescription("Leather armor , provides minimal protection"); + SetWeight(12); + SetSize(30); + SetWearable(1); + SetValue(85); + SetHUDSprite("trade", 155); + } + +} + +} diff --git a/scripts/angelscript/items/armor_leather_gaz1.as b/scripts/angelscript/items/armor_leather_gaz1.as new file mode 100644 index 00000000..44cc89c3 --- /dev/null +++ b/scripts/angelscript/items/armor_leather_gaz1.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorLeatherGaz1 : CGameScript +{ + int ARMOR_BODY; + int ARMOR_GROUP; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + ArmorLeatherGaz1() + { + ARMOR_MODEL = "armor/p_armorvest2.mdl"; + ARMOR_GROUP = 4; + ARMOR_BODY = 4; + ARMOR_TEXT = "You don the gladiator armor."; + BARMOR_TYPE = "leather"; + BARMOR_PROTECTION = 0.45; + BARMOR_PROTECTION_AREA = "chest"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + NEW_ARMOR_OFS = 14; + } + + void OnSpawn() override + { + SetName("Gladiator Armor"); + SetDescription("The spiked set of banded leather"); + SetWeight(30); + SetSize(30); + SetWearable(1); + SetValue(190); + SetHUDSprite("trade", 159); + } + +} + +} diff --git a/scripts/angelscript/items/armor_leather_studded.as b/scripts/angelscript/items/armor_leather_studded.as new file mode 100644 index 00000000..543c5970 --- /dev/null +++ b/scripts/angelscript/items/armor_leather_studded.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorLeatherStudded : CGameScript +{ + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + ArmorLeatherStudded() + { + ARMOR_TEXT = "You work your way into some studded leather armor."; + BARMOR_TYPE = "leather"; + BARMOR_PROTECTION = 0.23; + BARMOR_PROTECTION_AREA = "chest"; + BARMOR_REPLACE_BODYPARTS = "chest"; + NEW_ARMOR_OFS = 7; + } + + void OnSpawn() override + { + SetName("Studded Leather Vest"); + SetDescription("The studded leather armor has lots of nails spread around the vest."); + SetWeight(28); + SetSize(30); + SetWearable(1); + SetValue(190); + SetHUDSprite("trade", 156); + } + +} + +} diff --git a/scripts/angelscript/items/armor_leather_torn.as b/scripts/angelscript/items/armor_leather_torn.as new file mode 100644 index 00000000..0c59126b --- /dev/null +++ b/scripts/angelscript/items/armor_leather_torn.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorLeatherTorn : CGameScript +{ + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + ArmorLeatherTorn() + { + ARMOR_TEXT = "You put on the hide armor."; + BARMOR_TYPE = "leather"; + BARMOR_PROTECTION = 0.05; + BARMOR_PROTECTION_AREA = "chest"; + BARMOR_REPLACE_BODYPARTS = "chest"; + NEW_ARMOR_OFS = 6; + } + + void OnSpawn() override + { + SetName("Hide Armor"); + SetDescription("Basic protective armor made out of animal skins, commonly used by hunters and travelers."); + SetWeight(12); + SetSize(30); + SetWearable(1); + SetValue(30); + SetHUDSprite("trade", 155); + } + +} + +} diff --git a/scripts/angelscript/items/armor_mongol.as b/scripts/angelscript/items/armor_mongol.as new file mode 100644 index 00000000..188081e9 --- /dev/null +++ b/scripts/angelscript/items/armor_mongol.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorMongol : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + ArmorMongol() + { + ARMOR_MODEL = "armor/p_armorvest.mdl"; + ARMOR_BODY = 1; + ARMOR_TEXT = "You strap on some banded mail armor."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.3; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + NEW_ARMOR_OFS = 2; + } + + void OnSpawn() override + { + SetName("Suit of Banded Mail"); + SetDescription("This is an old set of banded armor"); + SetWeight(90); + SetSize(90); + SetWearable(1); + SetValue(350); + SetHUDSprite("trade", "armor2"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_paura.as b/scripts/angelscript/items/armor_paura.as new file mode 100644 index 00000000..aa33d335 --- /dev/null +++ b/scripts/angelscript/items/armor_paura.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "items/armor_base.as" +#include "items/base_elemental_resist.as" + +namespace MS +{ + +class ArmorPaura : CGameScript +{ + int ARMOR_BODY; + int ARMOR_GROUP; + string ARMOR_MODEL; + int ARMOR_STR_REQ; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int NEW_ARMOR_OFS; + int PHOENIX_ACTIVE; + string SOUND_GAS_ON; + + ArmorPaura() + { + ARMOR_MODEL = "armor/p_armorvest2.mdl"; + ARMOR_GROUP = 4; + ARMOR_BODY = 7; + ARMOR_TEXT = "You assemble the the acid plate armor."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.5; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + ELM_NAME = "aarmr"; + ELM_TYPE = "poison"; + ELM_AMT = 50; + ARMOR_STR_REQ = 30; + SOUND_GAS_ON = "ambience/steamburst1.wav"; + NEW_ARMOR_OFS = 17; + Precache("poison_cloud.spr"); + } + + void OnSpawn() override + { + SetName("Acid Plate"); + SetDescription("Enchanted plate mail scorched by acid."); + SetWeight(180); + SetSize(60); + SetWearable(1); + SetValue(1000); + SetHUDSprite("trade", 154); + } + + void elm_activate_effect() + { + string OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + if (OWNER_SKILL < 20) + { + SendColoredMessage(GetOwner(), "You lack the affliction skill to activate this armor's magic."); + } + if (!(OWNER_SKILL >= 20)) return; + PHOENIX_ACTIVE = 1; + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, ELM_TYPE, ELM_AMT); + ScheduleDelayedEvent(0.1, "secondary_element_activate"); + } + + void secondary_element_activate() + { + CallExternal(GetOwner(), "ext_register_element", "aarmb", "acid", "80"); + ScheduleDelayedEvent(0.1, "activate_aura"); + } + + void activate_aura() + { + string AURA_DOT = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + AURA_DOT *= 0.3; + CallExternal(GetOwner(), "ext_poison_aura_activate", AURA_DOT, 64); + EmitSound(GetOwner(), 3, SOUND_GAS_ON, 10); + } + + void elm_remove_effect() + { + if (!(PHOENIX_ACTIVE)) return; + PHOENIX_ACTIVE = 0; + if (!(GetSkillLevel(GetOwner(), "spellcasting.affliction") >= 20)) return; + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, "remove"); + ScheduleDelayedEvent(0.1, "secondary_element_remove"); + } + + void secondary_element_remove() + { + CallExternal(GetOwner(), "ext_register_element", "aarmb", "remove"); + ScheduleDelayedEvent(0.1, "remove_aura"); + } + + void remove_aura() + { + CallExternal(GetOwner(), "ext_poison_aura_remove"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_pheonix55.as b/scripts/angelscript/items/armor_pheonix55.as new file mode 100644 index 00000000..8326bdde --- /dev/null +++ b/scripts/angelscript/items/armor_pheonix55.as @@ -0,0 +1,124 @@ +#pragma context server + +#include "items/armor_base.as" +#include "items/base_elemental_resist.as" + +namespace MS +{ + +class ArmorPheonix55 : CGameScript +{ + int ARMOR_BODY; + int ARMOR_GROUP; + string ARMOR_MODEL; + int ARMOR_STR_REQ; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int NEW_ARMOR_OFS; + int PHOENIX_ACTIVE; + + ArmorPheonix55() + { + ARMOR_MODEL = "armor/p_armorvest2.mdl"; + ARMOR_GROUP = 4; + ARMOR_BODY = 1; + ARMOR_TEXT = "You assemble the phoenix armor."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.55; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + ELM_NAME = "phonx"; + ELM_TYPE = "fire"; + ELM_AMT = 75; + ARMOR_STR_REQ = 40; + NEW_ARMOR_OFS = 11; + } + + void OnSpawn() override + { + SetName("Armor of the Phoenix"); + SetDescription("Forged with the blood of an efreet and the feathers of a phoenix."); + SetWeight(120); + SetSize(60); + SetWearable(1); + SetValue(590); + SetHUDSprite("trade", 151); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if (!((param4).findFirst("fire") == 0)) return; + string L_BURN_ID = GetEntityProperty(GetOwner(), "scriptvar"); + if (param2 == L_BURN_ID) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetSkillLevel(GetOwner(), "spellcasting.fire") < 15) + { + SendColoredMessage(GetOwner(), "Your magic is not strong enough to activate this armor's special ability."); + } + if (!(GetSkillLevel(GetOwner(), "spellcasting.fire") >= 15)) return; + string MP_TO_GIVE = param3; + string DMG_TO_TAKE = param3; + DMG_TO_TAKE *= /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "fire"); + LogDebug("game_takedamage DMG_TO_TAKE"); + string OWNER_HP = GetEntityHealth(GetOwner()); + OWNER_HP -= DMG_TO_TAKE; + LogDebug("regen OWNER_HP"); + if (OWNER_HP <= 0) + { + SendInfoMsg(GetOwner(), "The Phoenix Armor Has restored your health to 100%"); + HealEntity(GetOwner(), GetEntityMaxHealth(GetOwner())); + SetDamage("dmg"); + SetDamage("hit"); + EmitSound(GetOwner(), 0, "magic/cast.wav", 10); + ScheduleDelayedEvent(0.2, "phoenix_sound"); + } + if (GetEntityMP(GetOwner()) != GetEntityProperty(GetOwner(), "maxmp")) + { + GiveMP(MP_TO_GIVE); + CallExternal(GetOwner(), "mana_drain"); + int MP_TO_GIVE = int(MP_TO_GIVE); + MP_TO_GIVE += "mp"; + SendColoredMessage(GetOwner(), "The phoenix armor regenerates your mana " + MP_TO_GIVE); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 64, 1, 1); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + } + } + + void phoenix_sound() + { + EmitSound(GetOwner(), 0, "monsters/birds/hawkcaw.wav", 10); + } + + void elm_activate_effect() + { + string OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.fire"); + if (OWNER_SKILL < 20) + { + SendColoredMessage(GetOwner(), "You lack the fire skill to activate this armor's magic."); + } + if (!(OWNER_SKILL > 20)) return; + PHOENIX_ACTIVE = 1; + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, ELM_TYPE, ELM_AMT); + } + + void elm_remove_effect() + { + if (!(PHOENIX_ACTIVE)) return; + if (!(GetSkillLevel(GetOwner(), "spellcasting.fire") > 20)) return; + PHOENIX_ACTIVE = 0; + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, "remove"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_plate.as b/scripts/angelscript/items/armor_plate.as new file mode 100644 index 00000000..92e81222 --- /dev/null +++ b/scripts/angelscript/items/armor_plate.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorPlate : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + ArmorPlate() + { + ARMOR_MODEL = "armor/p_armorvest.mdl"; + ARMOR_BODY = 0; + ARMOR_TEXT = "You put on some platemail armor."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.4; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + NEW_ARMOR_OFS = 1; + } + + void OnSpawn() override + { + SetName("Suit of Platemail"); + SetDescription("Platemail armor"); + SetWeight(90); + SetSize(100); + SetWearable(1); + SetValue(750); + SetHUDSprite("trade", "armor1"); + } + +} + +} diff --git a/scripts/angelscript/items/armor_rehab.as b/scripts/angelscript/items/armor_rehab.as new file mode 100644 index 00000000..812a9c11 --- /dev/null +++ b/scripts/angelscript/items/armor_rehab.as @@ -0,0 +1,167 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorRehab : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + string DID_INIT; + int ELM_AMT; + string ELM_NAME; + float FREQ_CHANGE; + int IS_ACTIVE; + int NEW_ARMOR_OFS; + int RND_ELE; + + ArmorRehab() + { + ARMOR_MODEL = "armor/p_armorvest.mdl"; + ARMOR_BODY = 5; + ARMOR_TEXT = "You work your way into the visual nightmare."; + BARMOR_TYPE = "leather"; + BARMOR_PROTECTION = 0.4; + BARMOR_PROTECTION_AREA = "chest"; + BARMOR_REPLACE_BODYPARTS = "chest"; + FREQ_CHANGE = 90.0; + NEW_ARMOR_OFS = 19; + ELM_NAME = "rehab"; + ELM_AMT = 100; + } + + void OnSpawn() override + { + SetName("Chromatic Vest"); + SetDescription("This magic vest makes your eyes swim"); + SetWeight(12); + SetSize(30); + SetWearable(1); + SetValue(3000); + SetHUDSprite("trade", 12); + } + + void game_putinpack() + { + elm_remove_effect(); + } + + void OnDrop() override + { + elm_remove_effect(); + } + + void game_remove() + { + elm_remove_effect(); + } + + void game_fall() + { + elm_remove_effect(); + } + + void game_sheath() + { + elm_remove_effect(); + } + + void OnDeploy() override + { + if ((ELM_WEAPON)) return; + elm_remove_effect(); + } + + void game_wear() + { + ScheduleDelayedEvent(0.1, "elm_activate_effect"); + } + + void ext_activate_items() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if (!(GetEntityProperty(GetOwner(), "is_worn"))) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + RND_ELE = RandomInt(1, 4); + ScheduleDelayedEvent(0.1, "elm_activate_effect"); + } + + void elm_get_resist() + { + if (!(DID_INIT)) + { + DID_INIT = 1; + RND_ELE = RandomInt(0, 3); + } + if (!(IS_ACTIVE)) + { + RND_ELE += 1; + if (RND_ELE > 4) + { + RND_ELE = 1; + } + if (RND_ELE == 1) + { + ELM_TYPE = "fire"; + } + if (RND_ELE == 2) + { + ELM_TYPE = "lightning"; + } + if (RND_ELE == 3) + { + ELM_TYPE = "cold"; + } + if (RND_ELE == 4) + { + ELM_TYPE = "poison"; + } + string ICON_NAME = "hud/status/alpha_"; + // TODO: hud.addstatusicon ent_owner ICON_NAME rehab FREQ_CHANGE + ClientEvent("new", "all", "items/armor_rehab_cl", GetEntityIndex(GetOwner()), RND_ELE); + SendColoredMessage(GetOwner(), "Chromatic vest has chosen to protect you from " + ELM_TYPE); + // svplaysound: svplaysound 2 10 magic/energy1.wav + EmitSound(2, 10, "magic/energy1.wav"); + } + } + + void elm_activate_effect() + { + elm_get_resist(); + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, ELM_TYPE, ELM_AMT, GetScriptName(GetOwner())); + if ((IS_ACTIVE)) return; + IS_ACTIVE = 1; + FREQ_CHANGE("change_element"); + } + + void elm_remove_effect() + { + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, "remove", 0, GetScriptName(GetOwner())); + if ((IS_ACTIVE)) + { + // TODO: hud.killimgicon ent_owner rehab + } + } + + void change_element() + { + if (!(IS_ACTIVE)) return; + IS_ACTIVE = 0; + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + elm_remove_effect(); + elm_activate_effect(); + } + +} + +} diff --git a/scripts/angelscript/items/armor_rehab_cl.as b/scripts/angelscript/items/armor_rehab_cl.as new file mode 100644 index 00000000..294b7629 --- /dev/null +++ b/scripts/angelscript/items/armor_rehab_cl.as @@ -0,0 +1,111 @@ +#pragma context server + +namespace MS +{ + +class ArmorRehabCl : CGameScript +{ + int FX_ACTIVE; + string FX_COLOR; + string MY_OWNER; + int OFSZ_NEG; + int OFSZ_POS; + int OFS_NEG; + int OFS_POS; + string SPR_COLOR; + int SPR_RAD; + string THIS_LIGHT; + + void client_activate() + { + MY_OWNER = param1; + FX_COLOR = param2; + if (FX_COLOR == 1) + { + SPR_COLOR = Vector3(255, 0, 0); + } + if (FX_COLOR == 2) + { + SPR_COLOR = Vector3(255, 255, 0); + } + if (FX_COLOR == 3) + { + SPR_COLOR = Vector3(64, 64, 255); + } + if (FX_COLOR == 4) + { + SPR_COLOR = Vector3(0, 255, 0); + } + OFSZ_POS = 96; + OFSZ_NEG = -96; + OFS_POS = 72; + OFS_NEG = -72; + SPR_RAD = 32; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), 200, SPR_COLOR, 3.0); + THIS_LIGHT = "game.script.last_light_id"; + FX_ACTIVE = 1; + fx_loop(); + ScheduleDelayedEvent(2.0, "end_fx"); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.05, "fx_loop"); + create_element_sprites(); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + FX_ACTIVE = 0; + } + + void create_element_sprites() + { + float RND_LEFT = Random(-20, 20); + float RND_RIGHT = Random(-20, 20); + Vector3 SPRITE_VEL = Vector3(RND_LEFT, RND_RIGHT, 0); + ClientEffect("light", THIS_LIGHT, /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), 200, SPR_COLOR, 0.09); + string START_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + int RND_RAD = RandomInt(0, 359); + START_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_RAD, 0), Vector3(0, SPR_RAD, -30)); + ClientEffect("tempent", "sprite", "xflare1.spr", START_POS, "setup_element_sprite"); + string START_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + int RND_RAD = RandomInt(0, 359); + START_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_RAD, 0), Vector3(0, SPR_RAD, -30)); + ClientEffect("tempent", "sprite", "xflare1.spr", START_POS, "setup_element_sprite"); + string START_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + int RND_RAD = RandomInt(0, 359); + START_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_RAD, 0), Vector3(0, SPR_RAD, -30)); + ClientEffect("tempent", "sprite", "xflare1.spr", START_POS, "setup_element_sprite"); + } + + void setup_element_sprite() + { + float RND_LEFT = Random(-20, 20); + float RND_RIGHT = Random(-20, 20); + Vector3 SPRITE_VEL = Vector3(RND_LEFT, RND_RIGHT, 0); + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 20); + ClientEffect("tempent", "set_current_prop", "velocity", SPRITE_VEL); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPR_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + string MY_VEL = /* TODO: $getcl */ $getcl(MY_OWNER, "velocity"); + string MY_ANG = /* TODO: $getcl */ $getcl(MY_OWNER, "angles"); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(MY_ANG, Vector3(0, MY_VEL, 0))); + } + +} + +} diff --git a/scripts/angelscript/items/armor_rm.as b/scripts/angelscript/items/armor_rm.as new file mode 100644 index 00000000..3187f0db --- /dev/null +++ b/scripts/angelscript/items/armor_rm.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorRm : CGameScript +{ + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + ArmorRm() + { + ARMOR_TEXT = "Just testing..."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.0; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + NEW_ARMOR_OFS = 18; + } + + void OnSpawn() override + { + SetName("Maldora s Robes"); + SetDescription("Someone broke into Maldora s closet"); + SetWeight(10); + SetSize(60); + SetWearable(1); + SetValue(0); + SetHUDSprite("trade", 149); + } + +} + +} diff --git a/scripts/angelscript/items/armor_salamander.as b/scripts/angelscript/items/armor_salamander.as new file mode 100644 index 00000000..55798b6f --- /dev/null +++ b/scripts/angelscript/items/armor_salamander.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "items/base_elemental_resist.as" +#include "items/armor_base.as" + +namespace MS +{ + +class ArmorSalamander : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int NEW_ARMOR_OFS; + + ArmorSalamander() + { + ARMOR_MODEL = "armor/p_armorvest.mdl"; + ARMOR_BODY = 8; + ARMOR_TEXT = "You slither into some cobra skin armor."; + BARMOR_TYPE = "leather"; + BARMOR_PROTECTION = 0.35; + BARMOR_PROTECTION_AREA = "chest"; + BARMOR_REPLACE_BODYPARTS = "chest"; + ELM_NAME = "poisl"; + ELM_TYPE = "poison"; + ELM_AMT = 75; + NEW_ARMOR_OFS = 9; + } + + void OnSpawn() override + { + SetName("Cobra Skin Armor"); + SetDescription("This magical armor is enchanted to resist poisons"); + SetWeight(28); + SetSize(30); + SetWearable(1); + SetValue(190); + SetHUDSprite("trade", 158); + } + +} + +} diff --git a/scripts/angelscript/items/armor_venom.as b/scripts/angelscript/items/armor_venom.as new file mode 100644 index 00000000..da4d446a --- /dev/null +++ b/scripts/angelscript/items/armor_venom.as @@ -0,0 +1,93 @@ +#pragma context server + +#include "items/armor_base.as" +#include "items/base_elemental_resist.as" + +namespace MS +{ + +class ArmorVenom : CGameScript +{ + int ARMOR_BODY; + int ARMOR_GROUP; + string ARMOR_MODEL; + int ARMOR_STR_REQ; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int NEW_ARMOR_OFS; + int PHOENIX_ACTIVE; + + ArmorVenom() + { + ARMOR_MODEL = "armor/p_armorvest2.mdl"; + ARMOR_GROUP = 4; + ARMOR_BODY = 5; + ARMOR_TEXT = "You assemble the envenomed plate mail."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.5; + BARMOR_PROTECTION_AREA = "chest;arms;legs"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + ELM_NAME = "varmr"; + ELM_TYPE = "poison"; + ELM_AMT = 50; + ARMOR_STR_REQ = 25; + NEW_ARMOR_OFS = 15; + } + + void OnSpawn() override + { + SetName("Envenomed Plate"); + SetDescription("Hefty Plate mail enchanted with poison."); + SetWeight(180); + SetSize(60); + SetWearable(1); + SetValue(600); + SetHUDSprite("trade", 152); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if (!(RandomInt(1, 4) == 1)) return; + string OWNER_POS = GetEntityOrigin(GetOwner()); + string ATKR_POS = GetEntityOrigin(param1); + string MIN_DIST = GetEntityProperty(param1, "moveprox"); + MIN_DIST += 32; + if (!(Distance(OWNER_POS, ATKR_POS) <= MIN_DIST)) return; + string POISON_DMG = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + POISON_DMG *= 0.5; + ApplyEffect(param1, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), POISON_DMG, "spellcasting.poison"); + EmitSound(GetOwner(), 0, "bullchicken/bc_bite2.wav", 10); + SendPlayerMessage("Your", "Venom Plate poisons " + GetEntityProperty(param1, "name.full")); + } + + void elm_activate_effect() + { + string OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + if (OWNER_SKILL < 20) + { + SendColoredMessage(GetOwner(), "You lack the affliction skill to activate this armor's magic."); + } + if (!(OWNER_SKILL >= 20)) return; + PHOENIX_ACTIVE = 1; + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, ELM_TYPE, ELM_AMT); + } + + void elm_remove_effect() + { + if (!(PHOENIX_ACTIVE)) return; + PHOENIX_ACTIVE = 0; + if (!(GetSkillLevel(GetOwner(), "spellcasting.affliction") >= 20)) return; + PHOENIX_ACTIVE = 0; + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, "remove"); + } + +} + +} diff --git a/scripts/angelscript/items/axes_2haxe.as b/scripts/angelscript/items/axes_2haxe.as new file mode 100644 index 00000000..1192d3c4 --- /dev/null +++ b/scripts/angelscript/items/axes_2haxe.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" + +namespace MS +{ + +class Axes2haxe : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + Axes2haxe() + { + BASE_LEVEL_REQ = 9; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_2haxes.mdl"; + MODEL_VIEW_IDX = 0; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 83; + ANIM_PREFIX = "axe"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.2; + MELEE_ENERGY = 1; + MELEE_DMG = 190; + MELEE_DMG_RANGE = 150; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.65; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.1; + } + + void weapon_spawn() + { + SetName("Two-handed Axe"); + SetDescription("A light two-handed axe"); + SetWeight(50); + SetSize(12); + SetValue(135); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", "axe"); + } + +} + +} diff --git a/scripts/angelscript/items/axes_axe.as b/scripts/angelscript/items/axes_axe.as new file mode 100644 index 00000000..ff056939 --- /dev/null +++ b/scripts/angelscript/items/axes_axe.as @@ -0,0 +1,81 @@ +#pragma context server + +#include "items/axes_base_onehanded.as" + +namespace MS +{ + +class AxesAxe : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + AxesAxe() + { + BASE_LEVEL_REQ = 6; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_1haxes.mdl"; + MODEL_VIEW_IDX = 0; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 107; + ANIM_PREFIX = "axe"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.6; + MELEE_DMG = 150; + MELEE_DMG_RANGE = 120; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Axe"); + SetDescription("A wood-cutter s axe"); + SetWeight(30); + SetSize(6); + SetValue(45); + SetHUDSprite("trade", 176); + } + +} + +} diff --git a/scripts/angelscript/items/axes_b.as b/scripts/angelscript/items/axes_b.as new file mode 100644 index 00000000..868b043b --- /dev/null +++ b/scripts/angelscript/items/axes_b.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" + +namespace MS +{ + +class AxesB : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + AxesB() + { + BASE_LEVEL_REQ = 18; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_2haxesgreat.mdl"; + MODEL_VIEW_IDX = 5; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 51; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.5; + MELEE_ENERGY = 3; + MELEE_DMG = 375; + MELEE_DMG_RANGE = 150; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.65; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + } + + void weapon_spawn() + { + SetName("Axe of Balance"); + SetDescription("This ornate axe is forged to favor accuracy over damage"); + SetWeight(90); + SetSize(25); + SetValue(1200); + SetHUDSprite("hand", 137); + SetHUDSprite("trade", 137); + } + +} + +} diff --git a/scripts/angelscript/items/axes_base_onehanded.as b/scripts/angelscript/items/axes_base_onehanded.as new file mode 100644 index 00000000..0f16da97 --- /dev/null +++ b/scripts/angelscript/items/axes_base_onehanded.as @@ -0,0 +1,80 @@ +#pragma context server + +#include "items/base_melee.as" + +namespace MS +{ + +class AxesBaseOnehanded : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_SHEATH; + int ATTACK_ANIMS; + string MELEE_VIEWANIM_ATK; + string MODEL_HANDS; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SWING_ANIM; + + AxesBaseOnehanded() + { + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + ATTACK_ANIMS = 3; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + MODEL_HANDS = MODEL_WORLD; + PLAYERANIM_AIM = "axe_onehand"; + PLAYERANIM_SWING = "axe_onehand_swing"; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal2.wav"; + } + + void melee_start() + { + int SWING = RandomInt(1, ATTACK_ANIMS); + string SWING_ANIM = ANIM_ATTACK1; + if (SWING == 2) + { + SWING_ANIM = ANIM_ATTACK2; + } + else + { + if (SWING == 3) + { + SWING_ANIM = ANIM_ATTACK3; + } + else + { + if (SWING == 4) + { + SWING_ANIM = ANIM_ATTACK4; + } + else + { + if (SWING == 5) + { + SWING_ANIM = ANIM_ATTACK5; + } + } + } + } + PlayViewAnim(SWING_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/axes_base_twohanded.as b/scripts/angelscript/items/axes_base_twohanded.as new file mode 100644 index 00000000..7a8ef4a9 --- /dev/null +++ b/scripts/angelscript/items/axes_base_twohanded.as @@ -0,0 +1,120 @@ +#pragma context server + +#include "items/base_melee.as" + +namespace MS +{ + +class AxesBaseTwohanded : CGameScript +{ + float BWEAPON_DBL_CHARGE_ADJ; + int CUSTOM_REGISTER_CHARGE1; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + AxesBaseTwohanded() + { + PLAYERANIM_AIM = "axe_twohand"; + PLAYERANIM_SWING = "axe_twohand_swing"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + CUSTOM_REGISTER_CHARGE1 = 1; + BWEAPON_DBL_CHARGE_ADJ = 2.5; + } + + void OnSpawn() override + { + SetHand("both"); + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + reg.attack.dmg *= BWEAPON_DBL_CHARGE_ADJ; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + reg.attack.energydrain *= BWEAPON_DBL_CHARGE_ADJ; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 1; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "special_01"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 2; + if (BASE_LEVEL_REQ > reg.attack.reqskill) + { + reg.attack.reqskill += BASE_LEVEL_REQ; + } + RegisterAttack(); + if ((CUSTOM_AXE_SECONDARY)) return; + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 90; + string reg.attack.dmg = MELEE_DMG; + reg.attack.dmg *= 3; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + int reg.attack.aoe.range = 100; + float reg.attack.aoe.falloff = 1.5; + string reg.attack.energydrain = MELEE_ENERGY; + reg.attack.energydrain *= 2; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + reg.attack.hitchance += 0.1; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 1.7; + float reg.attack.delay.end = 2.2; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "special_02"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 4; + if (BASE_LEVEL_REQ > reg.attack.reqskill) + { + reg.attack.reqskill += BASE_LEVEL_REQ; + } + RegisterAttack(); + } + + void special_02_start() + { + Effect("screenfade", GetOwner(), 1, 2, Vector3(200, 10, 10), 100, "fadein"); + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_SWORDREADY') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + ScheduleDelayedEvent(1, "swing_in_air"); + } + + void swing_in_air() + { + PlayViewAnim(MELEE_VIEWANIM_ATK); + PlayOwnerAnim("once", PLAYERANIM_SWING); + if ((IsOnGround(GetOwner()))) + { + string l.forwardangles = GetEntityAngles(GetOwner()); + Vector3 l.forwardangles = Vector3(0, (l.forwardangles).y, 0); + string l.vel = /* TODO: $relvel */ $relvel(l.forwardangles, Vector3(0, 430, 0)); + int l.up = 240; + AddVelocity(GetOwner(), Vector3((l.vel).x, (l.vel).y, l.up)); + } + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_SHOUT1') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void special_02_strike() + { + if (!(param1 == "npc")) return; + string l.dir = (GetEntityOrigin(param3) - GetEntityOrigin(GetOwner())).Normalize(); + l.dir *= 300; + AddVelocity(param3, Vector3((l.dir).x, (l.dir).y, 200)); + } + +} + +} diff --git a/scripts/angelscript/items/axes_battleaxe.as b/scripts/angelscript/items/axes_battleaxe.as new file mode 100644 index 00000000..28ba73dd --- /dev/null +++ b/scripts/angelscript/items/axes_battleaxe.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" + +namespace MS +{ + +class AxesBattleaxe : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string SOUND_SWIPE; + + AxesBattleaxe() + { + BASE_LEVEL_REQ = 12; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + MODEL_VIEW = "viewmodels/v_2haxes.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 86; + ANIM_PREFIX = "axe"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.2; + MELEE_ENERGY = 2; + MELEE_DMG = 220; + MELEE_DMG_RANGE = 100; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.65; + MELEE_STAT = "axehandling"; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.1; + PLAYERANIM_AIM = "battleaxe"; + } + + void weapon_spawn() + { + SetName("Battleaxe"); + SetDescription("A large two-handed Battleaxe , for skull-splitting action"); + SetWeight(80); + SetSize(10); + SetValue(270); + SetHUDSprite("hand", "battleaxe"); + SetHUDSprite("trade", "battleaxe"); + } + +} + +} diff --git a/scripts/angelscript/items/axes_c.as b/scripts/angelscript/items/axes_c.as new file mode 100644 index 00000000..3b7bd05a --- /dev/null +++ b/scripts/angelscript/items/axes_c.as @@ -0,0 +1,378 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" + +namespace MS +{ + +class AxesC : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + string CAXE_EFFECT; + string CAXE_EFFECT_COUNT; + string CAXE_EFFECT_DOT; + string CAXE_EFFECT_DUR; + string CAXE_EFFECT_SKILL; + string CAXE_ELEMENT; + int CAXE_SKILLED; + int ECHAOS_AOE; + string EFFECT_DOTS; + string EFFECT_DURATIONS; + string EFFECT_ELEMENTS; + string EFFECT_LIST; + string EFFECT_SKILLS; + string EFFECT_TARGET; + int ELEMENT_LOOP; + string GAME_PVP; + int MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int MP_ELEMENT_BLAST; + string MY_CL_IDX; + string NEXT_ELEMENT_BLAST; + string NEXT_RANDOM_ELEMENT; + string SOUND_SWIPE; + + AxesC() + { + MP_ELEMENT_BLAST = 50; + ECHAOS_AOE = 200; + BASE_LEVEL_REQ = 25; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_2haxesgreat.mdl"; + MODEL_VIEW_IDX = 8; + MODEL_HANDS = "weapons/p_weapons4.mdl"; + MODEL_WORLD = "weapons/p_weapons4.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 54; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.5; + MELEE_ENERGY = 3; + MELEE_DMG = 450; + MELEE_DMG_RANGE = 200; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 50; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 25; + Precache("3dmflagry.spr"); + } + + void weapon_spawn() + { + SetName("Axe of Chaos"); + SetDescription("Elemental chaos, in weapon form."); + SetWeight(90); + SetSize(25); + SetValue(1200); + SetHUDSprite("hand", 198); + SetHUDSprite("trade", 198); + } + + void OnDeploy() override + { + if (!(true)) return; + caxe_check_skill(); + if ((ELEMENT_LOOP)) return; + ELEMENT_LOOP = 1; + ScheduleDelayedEvent(1.0, "element_loop"); + GAME_PVP = "game.pvp"; + } + + void element_loop() + { + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + if (!(ELEMENT_LOOP)) return; + if (!(GetGameTime() > NEXT_RANDOM_ELEMENT)) return; + NEXT_RANDOM_ELEMENT = GetGameTime(); + NEXT_RANDOM_ELEMENT += 5.0; + ScheduleDelayedEvent(10.0, "element_loop"); + choose_dot("none"); + } + + void caxe_check_skill() + { + CAXE_SKILLED = 1; + if (GetSkillLevel(GetOwner(), "spellcasting.fire") < 10) + { + CAXE_SKILLED = 0; + } + if (GetSkillLevel(GetOwner(), "spellcasting.ice") < 10) + { + CAXE_SKILLED = 0; + } + if (GetSkillLevel(GetOwner(), "spellcasting.lightning") < 10) + { + CAXE_SKILLED = 0; + } + if (GetSkillLevel(GetOwner(), "spellcasting.divination") < 10) + { + CAXE_SKILLED = 0; + } + if (GetSkillLevel(GetOwner(), "spellcasting.affliction") < 10) + { + CAXE_SKILLED = 0; + } + if (!(CAXE_SKILLED)) + { + SendColoredMessage(GetOwner(), "Axe of Chaos: Insufficient magical talents for effects."); + } + } + + void melee_damaged_other() + { + if (!(true)) return; + if ((CAXE_SKILLED)) + { + apply_dot(param1); + } + choose_dot(param1); + NEXT_RANDOM_ELEMENT = GetGameTime(); + NEXT_RANDOM_ELEMENT += 30.0; + } + + void special_01_damaged_other() + { + if (!(true)) return; + if ((CAXE_SKILLED)) + { + apply_dot(param1); + } + choose_dot(param1); + NEXT_RANDOM_ELEMENT = GetGameTime(); + NEXT_RANDOM_ELEMENT += 30.0; + } + + void special_02_damaged_other() + { + if (!(true)) return; + if ((CAXE_SKILLED)) + { + apply_dot(param1); + } + choose_dot(param1); + NEXT_RANDOM_ELEMENT = GetGameTime(); + NEXT_RANDOM_ELEMENT += 30.0; + } + + void apply_dot() + { + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + return; + } + if (CAXE_EFFECT != "CAXE_EFFECT") + { + LogDebug("apply_dot CAXE_EFFECT dur CAXE_EFFECT_DUR dot CAXE_EFFECT_DOT"); + ApplyEffect(param1, CAXE_EFFECT, CAXE_EFFECT_DUR, GetEntityIndex(GetOwner()), CAXE_EFFECT_DOT); + } + } + + void choose_dot() + { + EFFECT_LIST = "dot_acid;dot_fire;dot_cold;dot_poison;dot_dark;dot_lightning;dot_holy"; + EFFECT_ELEMENTS = "acid;fire;cold;poison;dark;lightning;holy"; + EFFECT_DURATIONS = "5.0;5.0;5.0;10.0;5.0;5.0;5.0"; + EFFECT_SKILLS = "affliction;fire;ice;affliction;affliction;lightning;holy"; + EFFECT_DOTS = "1.0;2.0;0.5;0.5;0.25;0.75;2.0"; + EFFECT_TARGET = param1; + string L_SKIP_CL_UPDATE = param2; + string L_N_EFFECTS = GetTokenCount(EFFECT_LIST, ";"); + if ((IsEntityAlive(EFFECT_TARGET))) + { + for (int i = 0; i < L_N_EFFECTS; i++) + { + filter_effects(); + } + CAXE_EFFECT_COUNT = 0; + for (int i = 0; i < L_N_EFFECTS; i++) + { + filter_effects2(); + } + string L_N_EFFECTS = GetTokenCount(EFFECT_LIST, ";"); + } + if (!(L_N_EFFECTS > 0)) return; + L_N_EFFECTS -= 1; + int L_RND_IDX = RandomInt(0, L_N_EFFECTS); + string L_EFFECT = "effects/"; + L_EFFECT += GetToken(EFFECT_LIST, L_RND_IDX, ";"); + string L_DUR = GetToken(EFFECT_DURATIONS, L_RND_IDX, ";"); + string L_SKILL = "skill.spellcasting."; + L_SKILL += GetToken(EFFECT_SKILLS, L_RND_IDX, ";"); + string L_DOT = GetEntityProperty(GetOwner(), "l_skill"); + L_DOT *= GetToken(EFFECT_DOTS, L_RND_IDX, ";"); + CAXE_EFFECT = L_EFFECT; + CAXE_EFFECT_DUR = L_DUR; + CAXE_EFFECT_DOT = L_DOT; + CAXE_EFFECT_SKILL = L_SKILL; + CAXE_ELEMENT = GetToken(EFFECT_ELEMENTS, L_RND_IDX, ";"); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 1); + SetAttackProp("ent_me", 2); + if (!(L_SKIP_CL_UPDATE)) + { + update_cl(); + } + LogDebug("choose_dot L_EFFECT dr L_DUR dot L_DOT"); + } + + void filter_effects() + { + string L_CUR_IDX = i; + string L_CUR_ELEMENT = GetToken(EFFECT_ELEMENTS, L_CUR_IDX, ";"); + if (/* TODO: $get_takedmg */ $get_takedmg(EFFECT_TARGET, L_CUR_ELEMENT) == 0) + { + SetToken(EFFECT_ELEMENTS, L_CUR_IDX, "x", ";"); + } + } + + void filter_effects2() + { + string L_CUR_IDX = CAXE_EFFECT_COUNT; + string L_CUR_ELEMENT = GetToken(EFFECT_ELEMENTS, L_CUR_IDX, ";"); + if (L_CUR_ELEMENT == "x") + { + RemoveToken(EFFECT_LIST, L_CUR_IDX, ";"); + RemoveToken(EFFECT_ELEMENTS, L_CUR_IDX, ";"); + RemoveToken(EFFECT_DURATIONS, L_CUR_IDX, ";"); + RemoveToken(EFFECT_SKILLS, L_CUR_IDX, ";"); + } + else + { + CAXE_EFFECT_COUNT += 1; + } + } + + void update_cl() + { + if (MY_CL_IDX == "MY_CL_IDX") + { + ClientEvent("new", GetOwner(), "items/axes_c_cl", GetEntityIndex(GetOwner())); + MY_CL_IDX = "game.script.last_sent_id"; + } + ClientEvent("update", GetOwner(), MY_CL_IDX, "update_caxe_sprite", CAXE_ELEMENT); + } + + void remove_cl() + { + if (!(MY_CL_IDX != "MY_CL_IDX")) return; + ClientEvent("update", GetOwner(), MY_CL_IDX, "end_fx"); + MY_CL_IDX = "MY_CL_IDX"; + } + + void bweapon_effect_remove() + { + if (!(true)) return; + remove_cl(); + ELEMENT_LOOP = 0; + } + + void game_+attack2() + { + if (!(true)) return; + if (("game.item.attacking")) return; + if (!(CanAttack(GetOwner()))) return; + if (!(GetGameTime() > NEXT_ELEMENT_BLAST)) return; + NEXT_ELEMENT_BLAST = GetGameTime(); + NEXT_ELEMENT_BLAST += 1.0; + if (GetEntityMP(GetOwner()) < MP_ELEMENT_BLAST) + { + string L_MSG = "Chaos Axe: Not enough mana for elemental chaos. ("; + SendColoredMessage(GetOwner(), L_MSG); + int EXIT_SUB = 1; + } + if (!(CAXE_SKILLED)) + { + SendColoredMessage(GetOwner(), "Chaos Axe: Insufficient magical talent for elemental chaos. All Magic 10"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + // TODO: splayviewanim ent_me 9 + PlayOwnerAnim("critical", PLAYERANIM_PREPARE); + ScheduleDelayedEvent(0.1, "do_chaos1"); + } + + void do_chaos1() + { + string L_FX_ORG = GetEntityOrigin(GetOwner()); + L_FX_ORG += "z"; + if ((IsDucking(GetOwner()))) + { + L_FX_ORG += "z"; + } + ClientEvent("new", "all", "effects/sfx_prism_blast", L_FX_ORG, ECHAOS_AOE, CAXE_ELEMENT); + ScheduleDelayedEvent(0.1, "do_chaos2"); + } + + void do_chaos2() + { + string L_DMG = (CAXE_EFFECT_DOT * 3); + XDoDamage(GetEntityOrigin(GetOwner()), ECHAOS_AOE, L_DMG, 0, GetOwner(), GetOwner(), "axehandling", CAXE_ELEMENT, "dmgevent:*chaos"); + ScheduleDelayedEvent(0.5, "update_cl"); + } + + void chaos_dodamage() + { + if (!(param1)) return; + apply_dot(param2); + if (!(GetRelationship(param2) == "enemy")) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + return; + } + string L_CUR_TARG = param2; + string L_TARG_HP = GetEntityHealth(L_CUR_TARG); + string L_MAX_REPEL_HP = GetEntityMaxHealth(GetOwner()); + L_MAX_REPEL_HP *= 4; + if (L_TARG_HP < L_MAX_REPEL_HP) + { + int L_DO_PUSH = 1; + } + if (!(L_DO_PUSH)) return; + string L_TARG_ORG = GetEntityOrigin(L_CUR_TARG); + string L_OWNER_ORG = GetEntityOrigin(GetOwner()); + string L_TARG_ANG = /* TODO: $angles */ $angles(L_OWNER_ORG, L_TARG_ORG); + SetVelocity(L_CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, L_TARG_ANG, 0), Vector3(0, 1000, 0))); + } + +} + +} diff --git a/scripts/angelscript/items/axes_c_cl.as b/scripts/angelscript/items/axes_c_cl.as new file mode 100644 index 00000000..b18ab15a --- /dev/null +++ b/scripts/angelscript/items/axes_c_cl.as @@ -0,0 +1,66 @@ +#pragma context server + +namespace MS +{ + +class AxesCCl : CGameScript +{ + string CAXE_SPRITE_COLOR; + string EFFECT_COLORS; + string EFFECT_ELEMENTS; + string PREV_POS; + int SPRITE_ACTIVE; + + AxesCCl() + { + EFFECT_ELEMENTS = "acid;fire;cold;poison;dark;lightning;holy"; + EFFECT_COLORS = "(64,255,64);(255,64,0);(128,128,255);(0,255,0);(255,0,255);(255,255,0);(255,255,255)"; + } + + void client_activate() + { + SetCallback("render", "enable"); + } + + void update_caxe_sprite() + { + string L_IDX = FindToken(EFFECT_ELEMENTS, param1, ";"); + CAXE_SPRITE_COLOR = GetToken(EFFECT_COLORS, L_IDX, ";"); + SPRITE_ACTIVE = 1; + LogDebug("update_caxe_sprite CAXE_SPRITE_COLOR"); + } + + void game_prerender() + { + if (!(SPRITE_ACTIVE)) return; + if (("game.localplayer.thirdperson")) return; + string L_WEP_IDX = "game.localplayer.viewmodel.active.id"; + string L_POS = /* TODO: $getcl */ $getcl(L_WEP_IDX, "attachment0"); + ClientEffect("frameent", "sprite", "3dmflagry.spr", L_POS, "setup_caxe_sprite"); + ClientEffect("beam_points", L_POS, PREV_POS, "3dmflagry.spr", 0.25, 0.5, 0.2, 1, 30, 30, /* TODO: $clcol */ $clcol(CAXE_SPRITE_COLOR)); + PREV_POS = L_POS; + } + + void end_fx() + { + SPRITE_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_caxe_sprite() + { + ClientEffect("frameent", "set_current_prop", "renderamt", 200); + ClientEffect("frameent", "set_current_prop", "rendermode", "glow"); + ClientEffect("frameent", "set_current_prop", "rendercolor", CAXE_SPRITE_COLOR); + ClientEffect("frameent", "set_current_prop", "scale", 0.5); + ClientEffect("frameent", "set_current_prop", "frame", 0); + } + +} + +} diff --git a/scripts/angelscript/items/axes_df.as b/scripts/angelscript/items/axes_df.as new file mode 100644 index 00000000..a90b141d --- /dev/null +++ b/scripts/angelscript/items/axes_df.as @@ -0,0 +1,198 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" + +namespace MS +{ + +class AxesDf : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + int FAURA_MP; + int FAURA_RADIUS; + string FAURA_START; + float FREEZE_ATTACK_DELAY; + int FREEZE_COUNT; + string FREEZE_TARGS; + string GAME_PVP; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string NEXT_FREEZE_ATTEMPT; + string OLD_REPEAT_TARGET; + string REPEAT_TARGET; + string SOUND_SWIPE; + int VANIM_WARCRY; + + AxesDf() + { + BASE_LEVEL_REQ = 30; + FAURA_MP = 50; + FAURA_RADIUS = 256; + VANIM_WARCRY = 9; + FREEZE_ATTACK_DELAY = 0.4; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_2haxesgreat.mdl"; + MODEL_VIEW_IDX = 6; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 77; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.5; + MELEE_ENERGY = 2; + MELEE_DMG = 500; + MELEE_DMG_RANGE = 50; + MELEE_DMG_TYPE = "cold"; + MELEE_ACCURACY = 0.6; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + } + + void weapon_spawn() + { + SetName("Wintercleaver"); + SetDescription("A gigantic axe of elemental ice"); + SetWeight(90); + SetSize(25); + SetValue(5000); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", 146); + FREEZE_COUNT = 0; + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + } + + void game_dodamage() + { + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + REPEAT_TARGET = param2; + if (OLD_REPEAT_TARGET == REPEAT_TARGET) + { + FREEZE_COUNT += 1; + } + else + { + FREEZE_COUNT = 0; + } + OLD_REPEAT_TARGET = param2; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.ice"); + if (FREEZE_COUNT < 4) + { + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "axehandling"); + } + else + { + FREEZE_COUNT = 0; + DOT_BURN *= 0.25; + if (GetEntityHealth(param2) < 2000) + { + } + ApplyEffect(param2, "effects/dot_cold_freeze", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "axehandling", 2000); + } + } + + void game_+attack2() + { + if (!(true)) return; + if (("game.item.attacking")) return; + if (!(CanAttack(GetOwner()))) return; + if (!(GetGameTime() > NEXT_FREEZE_ATTEMPT)) return; + NEXT_FREEZE_ATTEMPT = GetGameTime(); + NEXT_FREEZE_ATTEMPT += 1.0; + if (GetEntityMP(GetOwner()) < FAURA_MP) + { + SendColoredMessage(GetOwner(), "Wintercleaver: Insufficient mana for Freezing Burst."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetSkillLevel(GetOwner(), "spellcasting.ice") < 25) + { + SendColoredMessage(GetOwner(), "Wintercleaver: Insufficient ice skill for Freezing Burst."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + // TODO: splayviewanim ent_me VANIM_WARCRY + GiveMP(GetOwner()); + FREEZE_ATTACK_DELAY("do_faura"); + // svplaysound: svplaysound 0 10 $get(ent_owner,scriptvar,'PLR_SOUND_SHOUT1') + EmitSound(0, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void do_faura() + { + FAURA_START = GetEntityOrigin(GetOwner()); + FAURA_START = "z"; + ClientEvent("new", "all", "effects/sfx_ice_burst", FAURA_START, FAURA_RADIUS, 1, Vector3(64, 64, 255)); + CallExternal(GetOwner(), "ext_sphere_token_x", "enemy", 256); + FREEZE_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + LogDebug("do_faura FREEZE_TARGS"); + if (!(FREEZE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(FREEZE_TARGS, ";"); i++) + { + faura_affect_targets(); + } + } + + void faura_affect_targets() + { + string CUR_TARG = GetToken(FREEZE_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityHealth(CUR_TARG) < 2000)) return; + LogDebug("faura_affect_targets GetEntityName(CUR_TARG)"); + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", Random(5.0, 8.0), GetEntityIndex(GetOwner()), 0, "none", 2000); + } + +} + +} diff --git a/scripts/angelscript/items/axes_doubleaxe.as b/scripts/angelscript/items/axes_doubleaxe.as new file mode 100644 index 00000000..cc519cda --- /dev/null +++ b/scripts/angelscript/items/axes_doubleaxe.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "items/axes_base_onehanded.as" + +namespace MS +{ + +class AxesDoubleaxe : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + AxesDoubleaxe() + { + BASE_LEVEL_REQ = 12; + BASE_LEVEL_REQ = 9; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_1haxes.mdl"; + MODEL_VIEW_IDX = 3; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 89; + ANIM_PREFIX = "smallaxe"; + MELEE_RANGE = 35; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.4; + MELEE_DMG = 140; + MELEE_DMG_RANGE = 75; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.8; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + } + + void weapon_spawn() + { + SetName("Dwarven Axe"); + SetDescription("A double-bladed one-handed Axe"); + SetWeight(10); + SetSize(8); + SetValue(250); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", 177); + Precache(MODEL_VIEW); + } + +} + +} diff --git a/scripts/angelscript/items/axes_dragon.as b/scripts/angelscript/items/axes_dragon.as new file mode 100644 index 00000000..582e3bc2 --- /dev/null +++ b/scripts/angelscript/items/axes_dragon.as @@ -0,0 +1,222 @@ +#pragma context server + +#include "items/axes_greataxe.as" + +namespace MS +{ + +class AxesDragon : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + string BURN_DAMAGE; + int BURN_LEVEL_REQ; + string BURN_LIST; + string CAN_BURN; + string CL_IDX; + string CL_SCRIPT; + string GAME_PVP; + int MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MODEL_BODY_OFS; + string MODEL_HANDS; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int MP_DRAIN_RATE; + string NEXT_FLAME; + string NEXT_MSG; + string NEXT_SCAN; + string OWNER_ANG; + string OWNER_ORG; + string SOUND_FLAME_ON; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string TRACE_START; + + AxesDragon() + { + BASE_LEVEL_REQ = 20; + BURN_LEVEL_REQ = 20; + MP_DRAIN_RATE = -2; + MODEL_VIEW_IDX = 4; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + ANIM_PREFIX = "standard"; + MODEL_BODY_OFS = 34; + MELEE_ENERGY = 2; + MELEE_DMG = 400; + MELEE_DMG_RANGE = 25; + MELEE_DMG_TYPE = "fire"; + MELEE_ACCURACY = 50; + SOUND_FLAME_ON = "monsters/goblin/sps_fogfire.wav"; + CL_SCRIPT = "items/axes_dragon_cl"; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal2.wav"; + } + + void game_precache() + { + Precache("items/axes_dragon_cl"); + } + + void weapon_spawn() + { + SetName("Dragon Axe"); + SetDescription("An axe enchanted with fire"); + SetWeight(90); + SetSize(25); + SetValue(2500); + SetHUDSprite("hand", 133); + SetHUDSprite("trade", 133); + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + if (GetSkillLevel(GetOwner(), "spellcasting.fire") >= BURN_LEVEL_REQ) + { + CAN_BURN = 1; + } + BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURN_DAMAGE /= 2; + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "spellcasting.fire"); + } + + void game_putinpack() + { + if (!(CL_IDX != "CL_IDX")) return; + ClientEvent("update", "all", CL_IDX, "end_fx"); + // svplaysound: svplaysound 1 0 SOUND_FLAME_ON + EmitSound(1, 0, SOUND_FLAME_ON); + } + + void game_+attack2() + { + if (!(true)) return; + if (!(GetGameTime() > NEXT_FLAME)) return; + if (!(CanAttack(GetOwner()))) + { + int EXIT_SUB = 1; + if (GetGameTime() > NEXT_MSG) + { + } + SendColoredMessage(GetOwner(), "Fire Breath: Can't attack now."); + NEXT_MSG = GetGameTime(); + NEXT_MSG += 1.0; + } + if ((EXIT_SUB)) return; + if (GetEntityMP(GetOwner()) <= /* TODO: $neg */ $neg(MP_DRAIN_RATE)) + { + SendColoredMessage(GetOwner(), "Dragon Axe - Fire Breath: Not enough mana."); + int EXIT_SUB = 1; + NEXT_FLAME = GetGameTime(); + NEXT_FLAME += 1.0; + } + if ((EXIT_SUB)) return; + if (!(CAN_BURN)) + { + SendColoredMessage(GetOwner(), "Dragon Axe - Fire Breath: Insufficient fire skill."); + int EXIT_SUB = 1; + NEXT_FLAME = GetGameTime(); + NEXT_FLAME += 1.0; + } + if ((EXIT_SUB)) return; + NEXT_FLAME = GetGameTime(); + NEXT_FLAME += 0.1; + OWNER_ANG = GetEntityAngles(GetOwner()); + if (CL_IDX == "CL_IDX") + { + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner())); + CL_IDX = "game.script.last_sent_id"; + // svplaysound: svplaysound 1 10 SOUND_FLAME_ON + EmitSound(1, 10, SOUND_FLAME_ON); + } + else + { + string CLOUD_START = GetEntityProperty(GetOwner(), "svbonepos"); + CLOUD_START += /* TODO: $relpos */ $relpos(OWNER_ANG, Vector3(0, 32, -30)); + string CLOUD_ANG = OWNER_ANG; + CLOUD_ANG = "x"; + CLOUD_START += "z"; + ClientEvent("update", "all", CL_IDX, "make_clouds", CLOUD_START, CLOUD_ANG); + } + OWNER_ORG = GetEntityOrigin(GetOwner()); + GiveMP(GetOwner()); + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.5; + BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURN_DAMAGE /= 2; + string SCAN_POS = GetEntityOrigin(GetOwner()); + SCAN_POS += /* TODO: $relpos */ $relpos(OWNER_ANG, Vector3(0, 128, 0)); + CallExternal(GetOwner(), "ext_box_token", "enemy", 96, SCAN_POS); + BURN_LIST = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(BURN_LIST != "none")) return; + TRACE_START = GetEntityProperty(GetOwner(), "svbonepos"); + for (int i = 0; i < GetTokenCount(BURN_LIST, ";"); i++) + { + burn_targets(); + } + } + + void burn_targets() + { + string CUR_TARGET = GetToken(BURN_LIST, i, ";"); + if ((IsValidPlayer(CUR_TARGET))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG))) return; + if (!(GetEntityRange(CUR_TARGET) < 256)) return; + string TRACE_END = GetEntityOrigin(CUR_TARGET); + if (!(IsValidPlayer(CUR_TARGET))) + { + string HALF_MON_HEIGHT = GetEntityHeight(CUR_TARGET); + HALF_MON_HEIGHT /= 2; + TRACE_END += "z"; + } + string TRACE_CHECK = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_CHECK == TRACE_END)) return; + ApplyEffect(CUR_TARGET, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), BURN_DAMAGE, "spellcasting.fire"); + if (!(GetEntityMaxHealth(CUR_TARGET) < 10000)) return; + if (!(GetEntityHeight(CUR_TARGET) < 120)) return; + if ((GetEntityProperty(CUR_TARG, "scriptvar"))) return; + string PUSH_VEL = /* TODO: $relvel */ $relvel(0, 300, 120); + AddVelocity(CUR_TARGET, PUSH_VEL); + } + + void game__attack2() + { + if (!(CL_IDX != "CL_IDX")) return; + ClientEvent("update", "all", CL_IDX, "end_fx"); + CL_IDX = "CL_IDX"; + // svplaysound: svplaysound 1 0 SOUND_FLAME_ON + EmitSound(1, 0, SOUND_FLAME_ON); + } + +} + +} diff --git a/scripts/angelscript/items/axes_dragon_cl.as b/scripts/angelscript/items/axes_dragon_cl.as new file mode 100644 index 00000000..da678fc2 --- /dev/null +++ b/scripts/angelscript/items/axes_dragon_cl.as @@ -0,0 +1,61 @@ +#pragma context client + +namespace MS +{ + +class AxesDragonCl : CGameScript +{ + string CLOUD_ANG; + string FLAME_SPRITE; + int N_FRAMES; + + AxesDragonCl() + { + FLAME_SPRITE = "explode1.spr"; + N_FRAMES = 9; + } + + void client_activate() + { + } + + void make_clouds() + { + string CLOUD_ORG = param1; + CLOUD_ANG = param2; + ClientEffect("tempent", "sprite", FLAME_SPRITE, CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", FLAME_SPRITE, CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", FLAME_SPRITE, CLOUD_ORG, "setup_cloud"); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", N_FRAME); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(CLOUD_ANG, Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void end_fx() + { + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/axes_golden.as b/scripts/angelscript/items/axes_golden.as new file mode 100644 index 00000000..b4e0f068 --- /dev/null +++ b/scripts/angelscript/items/axes_golden.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "items/axes_golden_ref.as" + +namespace MS +{ + +class AxesGolden : CGameScript +{ + int BREAK_CHANCE; + int FINAL_VALUE; + int THIS_NO_BREAK; + + AxesGolden() + { + THIS_NO_BREAK = 0; + FINAL_VALUE = 4000; + BREAK_CHANCE = 2; + } + + void weapon_spawn() + { + SetName("Golden Axe"); + SetHUDSprite("trade", 111); + } + +} + +} diff --git a/scripts/angelscript/items/axes_golden_ref.as b/scripts/angelscript/items/axes_golden_ref.as new file mode 100644 index 00000000..286c9b0d --- /dev/null +++ b/scripts/angelscript/items/axes_golden_ref.as @@ -0,0 +1,197 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" + +namespace MS +{ + +class AxesGoldenRef : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + int BREAK_CHANCE; + string BREAK_SOUND; + int BROKEN; + int CUSTOM_AXE_SECONDARY; + int FINAL_VALUE; + string HOLY_DMG; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + int SPEC_ATTACK; + int THIS_NO_BREAK; + + AxesGoldenRef() + { + THIS_NO_BREAK = 1; + BASE_LEVEL_REQ = 15; + CUSTOM_AXE_SECONDARY = 1; + FINAL_VALUE = 5000; + BREAK_SOUND = "debris/bustmetal1.wav"; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_2haxesgreat.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + SOUND_SWIPE = "magic/energy4.wav"; + MODEL_BODY_OFS = 80; + ANIM_PREFIX = "khopesh"; + BREAK_CHANCE = 2; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.5; + MELEE_ENERGY = 3; + MELEE_DMG = 400; + MELEE_DMG_RANGE = 100; + MELEE_DMG_TYPE = "holy"; + MELEE_ACCURACY = 0.24; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + } + + void weapon_spawn() + { + SetName("Unbreakable Golden Axe"); + SetHUDSprite("trade", 110); + SetDescription("A holy axe , forged by the dwarves of Urdual"); + SetWeight(90); + SetSize(25); + SetValue(FINAL_VALUE); + SetHand("both"); + } + + void OnSpawn() override + { + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 90; + string reg.attack.dmg = MELEE_DMG; + reg.attack.dmg *= 8; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + int reg.attack.aoe.range = 100; + float reg.attack.aoe.falloff = 1.5; + string reg.attack.energydrain = MELEE_ENERGY; + reg.attack.energydrain *= 2; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + reg.attack.hitchance += 0.1; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 1.7; + float reg.attack.delay.end = 2.2; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "special_02"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 4; + if (BASE_LEVEL_REQ > reg.attack.reqskill) + { + reg.attack.reqskill += BASE_LEVEL_REQ; + } + RegisterAttack(); + } + + void special_02_start() + { + SPEC_ATTACK = 1; + EmitSound(GetOwner(), 0, "magic/energy1.wav", 10); + } + + void special_02_strike() + { + break_check(); + } + + void hitwall() + { + if ((BROKEN)) return; + break_check(); + } + + void melee_start() + { + SPEC_ATTACK = 0; + } + + void melee_strike() + { + string TARGET_ID = GetEntityProperty(GetOwner(), "target"); + if (!(IsEntityAlive(TARGET_ID))) return; + break_check(); + if ((BROKEN)) return; + string WACKING_RACE = /* TODO: $get_takedmg */ $get_takedmg(TARGET_ID, "holy"); + if (!(WACKING_RACE == 0)) return; + SendPlayerMessage("This", "weapon is only effective against the undead and unholy"); + } + + void break_check() + { + if ((THIS_NO_BREAK)) return; + if ((BROKEN)) return; + if (!(RandomInt(1, 100) < BREAK_CHANCE)) return; + BROKEN = 1; + SetViewModel("none"); + EmitSound(GetOwner(), 0, BREAK_SOUND, 10); + Effect("tempent", "gibs", "glassgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 0.3, 30, 10, 5, 1.0); + SendPlayerMessage(YOUR, GOLDEN + AXE + HAS + BROKEN!); + ScheduleDelayedEvent(0.2, "break_msg2"); + } + + void break_msg2() + { + SendPlayerMessage("You", "might want to ask the mayor of Gatecity about this."); + SpawnNPC("monsters/companion/giver", /* TODO: $replos */ $replos(0, 0, 32), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "item_gaxe_handle" + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(SPEC_ATTACK)) return; + SPEC_ATTACK = 0; + string MY_OWNER = GetEntityIndex(GetOwner()); + string MY_TARGET = param2; + HOLY_DMG = GetSkillLevel(GetOwner(), "spellcasting.divination"); + HOLY_DMG *= 8.0; + CallExternal(MY_TARGET, "turn_undead", HOLY_DMG, MY_OWNER); + } + +} + +} diff --git a/scripts/angelscript/items/axes_greataxe.as b/scripts/angelscript/items/axes_greataxe.as new file mode 100644 index 00000000..aa0be8bc --- /dev/null +++ b/scripts/angelscript/items/axes_greataxe.as @@ -0,0 +1,83 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" + +namespace MS +{ + +class AxesGreataxe : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + AxesGreataxe() + { + BASE_LEVEL_REQ = 15; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_2haxesgreat.mdl"; + MODEL_VIEW_IDX = 0; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 92; + ANIM_PREFIX = "axe"; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.5; + MELEE_ENERGY = 3; + MELEE_DMG = 300; + MELEE_DMG_RANGE = 25; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.25; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + } + + void weapon_spawn() + { + SetName("Great Axe"); + SetDescription("A great two-handed Axe"); + SetWeight(90); + SetSize(25); + SetValue(900); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", "greataxe"); + Precache(MODEL_VIEW); + } + +} + +} diff --git a/scripts/angelscript/items/axes_gthunder11.as b/scripts/angelscript/items/axes_gthunder11.as new file mode 100644 index 00000000..fad05421 --- /dev/null +++ b/scripts/angelscript/items/axes_gthunder11.as @@ -0,0 +1,94 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" + +namespace MS +{ + +class AxesGthunder11 : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + AxesGthunder11() + { + MODEL_VIEW = "viewmodels/v_2haxesgreat.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_BODY_OFS = 124; + MELEE_DMG_TYPE = "lightning"; + MELEE_ACCURACY = 0.35; + BASE_LEVEL_REQ = 20; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + SOUND_SWIPE = "weapons/swingsmall.wav"; + ANIM_PREFIX = "axe"; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.5; + MELEE_ENERGY = 3; + MELEE_DMG = 400; + MELEE_DMG_RANGE = 50; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + } + + void weapon_spawn() + { + SetName("Greater Thunderaxe"); + SetDescription("An axe enchanted with powerful lightning magics"); + SetWeight(110); + SetSize(15); + SetValue(3000); + SetHUDSprite("hand", 122); + SetHUDSprite("trade", 122); + } + + void game_dodamage() + { + if (!(param1)) return; + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + ApplyEffect(param2, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "axehandling"); + } + +} + +} diff --git a/scripts/angelscript/items/axes_poison1.as b/scripts/angelscript/items/axes_poison1.as new file mode 100644 index 00000000..9656af94 --- /dev/null +++ b/scripts/angelscript/items/axes_poison1.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "items/axes_battleaxe.as" + +namespace MS +{ + +class AxesPoison1 : CGameScript +{ + void weapon_spawn() + { + SetName("Envenomed Battleaxe"); + SetDescription("This battleaxe has been laced with a fast acting poison"); + SetWeight(80); + SetSize(15); + SetValue(500); + SetHUDSprite("hand", "battleaxe"); + SetHUDSprite("trade", "battleaxe"); + } + + void game_dodamage() + { + if (!(param1)) return; + int L_RAND = RandomInt(0, 1); + if (!(L_RAND)) return; + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", RandomInt(6, 12), GetEntityIndex(GetOwner()), Random(3.5, 5.5), "axehandling"); + } + +} + +} diff --git a/scripts/angelscript/items/axes_rsmallaxe.as b/scripts/angelscript/items/axes_rsmallaxe.as new file mode 100644 index 00000000..55a5462b --- /dev/null +++ b/scripts/angelscript/items/axes_rsmallaxe.as @@ -0,0 +1,62 @@ +#pragma context server + +#include "items/axes_base_onehanded.as" + +namespace MS +{ + +class AxesRsmallaxe : CGameScript +{ + string ANIM_PREFIX; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string SOUND_SWIPE; + + AxesRsmallaxe() + { + MODEL_VIEW = "viewmodels/v_1haxes.mdl"; + MODEL_VIEW_IDX = 1; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 98; + ANIM_PREFIX = "rustedaxe"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.3; + MELEE_DMG = 100; + MELEE_DMG_RANGE = 80; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Rusted Axe"); + SetDescription("The rusted core makes the axe lighter and easier to swing , but less damaging"); + SetWeight(10); + SetSize(5); + SetValue(3); + SetHUDSprite("hand", 176); + SetHUDSprite("trade", 176); + } + +} + +} diff --git a/scripts/angelscript/items/axes_runeaxe.as b/scripts/angelscript/items/axes_runeaxe.as new file mode 100644 index 00000000..7e3d110a --- /dev/null +++ b/scripts/angelscript/items/axes_runeaxe.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "items/axes_base_onehanded.as" + +namespace MS +{ + +class AxesRuneaxe : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + AxesRuneaxe() + { + BASE_LEVEL_REQ = 20; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 9; + ANIM_ATTACK2 = 10; + ANIM_ATTACK3 = 11; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_1haxes.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + Precache(MODEL_VIEW); + MODEL_BODY_OFS = 95; + ANIM_PREFIX = "axe"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 0.7; + MELEE_ENERGY = 4; + MELEE_DMG = 160; + MELEE_DMG_RANGE = 70; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + } + + void weapon_spawn() + { + SetName("Rune Axe"); + SetDescription("An axe hastened by ancient magiks"); + SetWeight(90); + SetSize(25); + SetValue(2500); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", "runeaxe"); + Precache(MODEL_VIEW); + } + +} + +} diff --git a/scripts/angelscript/items/axes_scythe.as b/scripts/angelscript/items/axes_scythe.as new file mode 100644 index 00000000..43fef021 --- /dev/null +++ b/scripts/angelscript/items/axes_scythe.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" + +namespace MS +{ + +class AxesScythe : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + AxesScythe() + { + BASE_LEVEL_REQ = 9; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_2haxes.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 101; + ANIM_PREFIX = "axe"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.2; + MELEE_ENERGY = 1; + MELEE_DMG = 190; + MELEE_DMG_RANGE = 150; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.65; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.1; + } + + void weapon_spawn() + { + SetName("Scythe"); + SetDescription("A scythe , usually a farming tool , useful axe weapon as well"); + SetWeight(60); + SetSize(10); + SetValue(65); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", "scythe"); + } + +} + +} diff --git a/scripts/angelscript/items/axes_smallaxe.as b/scripts/angelscript/items/axes_smallaxe.as new file mode 100644 index 00000000..f8dd5452 --- /dev/null +++ b/scripts/angelscript/items/axes_smallaxe.as @@ -0,0 +1,79 @@ +#pragma context server + +#include "items/axes_base_onehanded.as" + +namespace MS +{ + +class AxesSmallaxe : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + AxesSmallaxe() + { + BASE_LEVEL_REQ = 3; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_1haxes.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 104; + ANIM_PREFIX = "axe"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.4; + MELEE_DMG = 120; + MELEE_DMG_RANGE = 90; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Small Axe"); + SetDescription("A small one-handed axe"); + SetWeight(30); + SetSize(4); + SetValue(15); + SetHUDSprite("trade", 67); + } + +} + +} diff --git a/scripts/angelscript/items/axes_sp.as b/scripts/angelscript/items/axes_sp.as new file mode 100644 index 00000000..e8946266 --- /dev/null +++ b/scripts/angelscript/items/axes_sp.as @@ -0,0 +1,309 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" + +namespace MS +{ + +class AxesSp : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + string AXE_DEPLOYED; + string AXE_IDLE_COUNT; + int BASE_LEVEL_REQ; + int MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int MP_CIRCLE_OF_WEBS; + string NEXT_CIRCLE; + string NEXT_IDLE; + string NEXT_WEB; + int RANGED_MP; + string SOUND_SWIPE; + float THROW_ATTACK_DELAY; + + AxesSp() + { + BASE_LEVEL_REQ = 25; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_2haxesgreat.mdl"; + MODEL_VIEW_IDX = 9; + MODEL_HANDS = "weapons/p_weapons4.mdl"; + MODEL_WORLD = "weapons/p_weapons4.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 57; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.5; + MELEE_ENERGY = 3; + MELEE_DMG = 375; + MELEE_DMG_RANGE = 150; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 65; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 25; + RANGED_MP = 5; + THROW_ATTACK_DELAY = 0.5; + MP_CIRCLE_OF_WEBS = 90; + } + + void weapon_spawn() + { + SetName("Spider Axe"); + if (RandomInt(1, 3) == 1) + { + SetDescription("How do I shot web?"); + } + else + { + SetDescription("This red amber axe debilitates spiders and ensnares other enemies"); + } + SetWeight(90); + SetSize(25); + SetValue(1200); + SetHUDSprite("hand", 197); + SetHUDSprite("trade", 197); + } + + void OnSpawn() override + { + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 0; + int reg.attack.dmg = 0; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "none"; + int reg.attack.energydrain = 0; + string reg.attack.stat = "axehandling"; + int reg.attack.hitchance = 100; + int reg.attack.priority = 3; + float reg.attack.delay.strike = 1.5; + float reg.attack.delay.end = 2.0; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "makewebs"; + int reg.attack.noise = 1000; + int reg.attack.chargeamt = 200; + int reg.attack.reqskill = 27; + string reg.attack.mpdrain = MP_CIRCLE_OF_WEBS; + RegisterAttack(); + } + + void OnDeploy() override + { + if (!(false)) return; + if (!(AXE_DEPLOYED)) + { + AXE_DEPLOYED = 1; + AXE_IDLE_COUNT = 0; + ScheduleDelayedEvent(1.0, "spec_idle_loop"); + } + } + + void spec_idle_loop() + { + if (!(AXE_DEPLOYED)) return; + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + if (!(GetGameTime() > NEXT_IDLE)) return; + if (("game.item.attacking")) + { + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += 3.0; + ScheduleDelayedEvent(4.0, "spec_idle_loop"); + } + else + { + AXE_IDLE_COUNT += 1; + if (AXE_IDLE_COUNT == 1) + { + PlayViewAnim(1); + ScheduleDelayedEvent(20.0, "spec_idle_loop"); + } + else + { + PlayViewAnim(4); + ScheduleDelayedEvent(5.0, "spec_idle_loop"); + AXE_IDLE_COUNT = 0; + } + } + } + + void melee_start() + { + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += 4.0; + } + + void special_01_start() + { + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += 4.0; + } + + void melee_damaged_other() + { + if (!((GetEntityProperty(param1, "itemname")).findFirst("spid") >= 0)) return; + SetDamage("dmg"); + return; + spider_defile(GetEntityIndex(param1)); + } + + void special_01_damaged_other() + { + if (!((GetEntityProperty(param1, "itemname")).findFirst("spid") >= 0)) return; + SetDamage("dmg"); + return; + spider_defile(GetEntityIndex(param1)); + } + + void spider_defile() + { + string L_DOT = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + ApplyEffect(param1, "effects/dot_dark", 30.0, GetEntityIndex(GetOwner()), L_DOT, "axehandling"); + } + + void game_+attack2() + { + if (!(true)) return; + if (("game.item.attacking")) return; + if (!(CanAttack(GetOwner()))) return; + if (!(GetGameTime() > NEXT_WEB)) return; + NEXT_WEB = GetGameTime(); + NEXT_WEB += 1.2; + if (GetSkillLevel(GetOwner(), "axehandling.proficiency") < 25) + { + return; + } + if (GetEntityMP(GetOwner()) < RANGED_MP) + { + SendColoredMessage(GetOwner(), "Spider Axe: Not enough mana for web projectile 5"); + return; + } + GiveMP(GetOwner()); + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += 4.0; + // TODO: splayviewanim ent_me 8 + THROW_ATTACK_DELAY("do_web"); + } + + void do_web() + { + EmitSound(GetOwner(), 0, "bullchicken/bc_attack2.wav", 10); + CallExternal(GetOwner(), "ext_tossprojectile", "proj_web", "view", "none", 700, Random(50, 60), 0, "axehandling"); + } + + void makewebs_start() + { + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += 4.0; + if (!(true)) return; + if (!(GetEntityMP(GetOwner()) > MP_CIRCLE_OF_WEBS)) return; + int L_REQS_MET = 1; + if (GetSkillLevel(GetOwner(), "spellcasting.affliction") < 5) + { + SendColoredMessage(GetOwner(), "Spider Axe: Insufficient affliction talent for web projectile 5"); + int L_REQS_MET = 0; + } + if (GetGameTime() < NEXT_CIRCLE) + { + SendPlayerMessage("Spider", "axe can only maintain one web trap at a time."); + int L_REQS_MET = 0; + } + if (!(L_REQS_MET)) + { + CancelAttack(); + return; + } + // TODO: splayviewanim ent_me 9 + PlayOwnerAnim("critical", PLAYERANIM_PREPARE); + EmitSound(GetOwner(), "game.sound.item", "magic/temple.wav", 10); + } + + void makewebs_strike() + { + if (!(true)) return; + SpawnNPC("monsters/summon/circle_of_lolth", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 5.0 + NEXT_CIRCLE = GetGameTime(); + NEXT_CIRCLE += 5.0; + } + + void bweapon_effect_remove() + { + LogDebug("$currentscript bweapon_effect_remove PARAM1"); + if (!(/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "spideraxe", "name_exists"))) return; + SendPlayerMessage("You", "are no longer resistant to spiders."); + SetScriptFlags(GetOwner(), "remove", "spideraxe"); + } + + void bweapon_effect_activate() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + SendPlayerMessage("You", "are now immune to web effects and take half damage from spiders."); + SetScriptFlags(GetOwner(), "add", "spideraxe", "spider_resist", 0.5, -1); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + if (GetEntityRace(param1) == "spider") + { + int L_REDUCE_DMG = 1; + } + if (GetEntityRace(param2) == "spider") + { + int L_REDUCE_DMG = 1; + } + string L_NAME = GetEntityName(param1); + string L_NAME = StringToLower(L_NAME); + if ((L_NAME).findFirst("spider") >= 0) + { + int L_REDUCE_DMG = 1; + } + if ((GetEntityProperty(param1, "itemname")).findFirst("spid") >= 0) + { + int L_REDUCE_DMG = 1; + } + if ((GetEntityProperty(param2, "itemname")).findFirst("spid") >= 0) + { + int L_REDUCE_DMG = 1; + } + if (!(L_REDUCE_DMG)) return; + string L_DMG = (param3 * 0.5); + SetDamage("hit"); + SetDamage("dmg"); + return; + } + +} + +} diff --git a/scripts/angelscript/items/axes_ss.as b/scripts/angelscript/items/axes_ss.as new file mode 100644 index 00000000..3701ce4c --- /dev/null +++ b/scripts/angelscript/items/axes_ss.as @@ -0,0 +1,190 @@ +#pragma context server + +#include "items/axes_base_twohanded.as" +#include "items/base_vampire.as" + +namespace MS +{ + +class AxesSs : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string NEXT_THROW_ATTEMPT; + int RANGED_MP; + string SHADOW_PROJ_ID; + string SOUND_SWIPE; + float THROW_ATTACK_DELAY; + + AxesSs() + { + BASE_LEVEL_REQ = 30; + RANGED_MP = 30; + THROW_ATTACK_DELAY = 0.5; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_2haxesgreat.mdl"; + MODEL_VIEW_IDX = 7; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 74; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 120; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.5; + MELEE_ENERGY = 2; + MELEE_DMG = 450; + MELEE_DMG_RANGE = 100; + MELEE_DMG_TYPE = "dark"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + } + + void weapon_spawn() + { + SetName("Skull Scythe"); + SetDescription("A scythe imbued with magics of destruction"); + SetWeight(90); + SetSize(25); + SetValue(700); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", 145); + custom_register(); + } + + void game_dodamage() + { + if (!(param1)) return; + string HEAL_AMT = GetEntityProperty(m_hLastStruckByMe, "scriptvar"); + HEAL_AMT /= 3; + try_vampire_target(GetEntityIndex(GetOwner()), GetEntityIndex(param2), HEAL_AMT); + } + + void melee_start() + { + if ((true)) + { + return_throw("melee_start"); + } + } + + void special_01_start() + { + if ((true)) + { + return_throw("special_01_start"); + } + } + + void special_02_start() + { + if ((true)) + { + return_throw("special_02_start"); + } + } + + void game_+attack2() + { + if (!(true)) return; + if (("game.item.attacking")) return; + if (!(CanAttack(GetOwner()))) return; + if (!(GetGameTime() > NEXT_THROW_ATTEMPT)) return; + NEXT_THROW_ATTEMPT = GetGameTime(); + NEXT_THROW_ATTEMPT += 1.0; + if (GetEntityMP(GetOwner()) < RANGED_MP) + { + SendColoredMessage(GetOwner(), "Scull Scythe: Not enough mana to throw."); + int EXIT_SUB = 1; + } + if (GetSkillLevel(GetOwner(), "axehandling") < 34) + { + SendColoredMessage(GetOwner(), "Scull Scythe: Insufficient Axehandling Proficiency to throw 34"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + // TODO: splayviewanim ent_me ANIM_ATTACK2 + THROW_ATTACK_DELAY("throw_weapon"); + } + + void throw_weapon() + { + // TODO: setviewmodelprop ent_me renderamt 1 + // TODO: setviewmodelprop ent_me rendermode 1 + if (((SHADOW_PROJ_ID !is null))) + { + return_throw("new_throw"); + } + CallExternal(GetOwner(), "ext_tossprojectile", "proj_ss", "view", "none", 200, 100, 1, "axehandling"); + SHADOW_PROJ_ID = GetEntityProperty(GetOwner(), "scriptvar"); + } + + void ext_projectile_landed() + { + return_throw("ext_projectile_landed"); + } + + void return_throw() + { + if (param1 == "ext_projectile_landed") + { + // TODO: splayviewanim ent_me ANIM_IDLE1 + } + else + { + if (((SHADOW_PROJ_ID !is null))) + { + } + CallExternal(SHADOW_PROJ_ID, "remove_me", "remote"); + } + if (!(param1 != "new_throw")) return; + LogDebug("return_throw PARAM1 restore"); + // TODO: setviewmodelprop ent_me rendermode 1 + // TODO: setviewmodelprop ent_me renderamt 255 + } + + void bweapon_effect_remove() + { + LogDebug("bweapon_effect_remove"); + return_throw("bweapon_effect_remove"); + // TODO: setviewmodelprop ent_me rendermode 1 + // TODO: setviewmodelprop ent_me renderamt 255 + } + +} + +} diff --git a/scripts/angelscript/items/axes_td.as b/scripts/angelscript/items/axes_td.as new file mode 100644 index 00000000..3acb6f00 --- /dev/null +++ b/scripts/angelscript/items/axes_td.as @@ -0,0 +1,196 @@ +#pragma context server + +#include "items/axes_base_onehanded.as" + +namespace MS +{ + +class AxesTd : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int AXE_RESTORED; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int NO_IDLE; + string SOUND_SWIPE; + int THROWING_AXE; + int TOM_SKIN; + + AxesTd() + { + BASE_LEVEL_REQ = 25; + NO_IDLE = 1; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 9; + ANIM_ATTACK2 = 10; + ANIM_ATTACK3 = 11; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = 9; + MODEL_VIEW = "viewmodels/v_1haxes.mdl"; + MODEL_VIEW_IDX = 5; + TOM_SKIN = 4; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 20; + SOUND_SWIPE = "weapons/swingsmall.wav"; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 0.7; + MELEE_ENERGY = 0.1; + MELEE_DMG = 180; + MELEE_DMG_RANGE = 70; + MELEE_DMG_TYPE = "dark"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "axehandling"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + } + + void weapon_spawn() + { + SetName("Dark Tomahawk"); + SetDescription("A cursed tomahawk of ancient times"); + SetWeight(30); + SetSize(25); + SetValue(2500); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", 175); + bw_setup_model(); + } + + void OnDeploy() override + { + ScheduleDelayedEvent(0.1, "toma_setup_skin"); + } + + void toma_setup_skin() + { + SetProp(GetOwner(), "skin", TOM_SKIN); + } + + void bw_setup_model() + { + SetEntityModelSkin(GetOwner(), TOM_SKIN); + // TODO: setviewmodelprop ent_me skin TOM_SKIN + SetProp(GetOwner(), "skin", TOM_SKIN); + } + + void register_charge1() + { + string reg.attack.type = "strike-land"; + int reg.attack.noautoaim = 1; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 4096; + int reg.attack.dmg = 0; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "slash"; + int reg.attack.energydrain = 2; + string reg.attack.stat = "axehandling"; + float reg.attack.hitchance = 1.0; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 0.2; + float reg.attack.delay.end = 0.9; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "axethrow"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 27; + RegisterAttack(); + } + + void axethrow_start() + { + AXE_RESTORED = 0; + SetModel("none"); + SetWorldModel("none"); + SetViewModel("viewmodels/v_martialarts.mdl"); + PlayViewAnim(4); + if (!(true)) return; + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") 0 + // svplaysound: svplaysound 0 8 $get(ent_owner,scriptvar,'PLR_SOUND_JAB2') + EmitSound(0, 8, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void axethrow_strike() + { + PlayOwnerAnim("critical", "bow_release"); + if (!(true)) return; + string END_TARGET = param2; + string MY_VIEW = GetEntityProperty(GetOwner(), "viewangles"); + LogDebug("axethrow_strike PARAM1"); + if (param1 != "world") + { + END_TARGET += /* TODO: $relpos */ $relpos(MY_VIEW, Vector3(0, 128, 0)); + } + string DMG_AXE = GetSkillLevel(GetOwner(), "axehandling"); + DMG_AXE *= 1.5; + SpawnNPC("monsters/summon/tomahawk", GetEntityProperty(GetOwner(), "attachpos"), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), END_TARGET, DMG_AXE, GetEntityIndex(GetOwner()), MELEE_DMG_TYPE + ApplyEffect(GetOwner(), "effects/effect_templock"); + } + + void restore_axe_cl() + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_WORLD); + SetWorldModel(MODEL_WORLD); + if ((AXE_RESTORED)) return; + PlayViewAnim(ANIM_LIFT1); + } + + void catch_axe() + { + LogDebug("Caught Axe"); + if ((true)) + { + CallClientItemEvent(GetOwner(), "restore_axe_cl"); + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") MODEL_VIEW_IDX + } + CallExternal(GetOwner(), "ext_end_templock"); + THROWING_AXE = 0; + ClientCommand(GetOwner(), "+attack"); + ScheduleDelayedEvent(0.5, "catch_axe2"); + } + + void catch_axe2() + { + ClientCommand(GetOwner(), "-attack"); + } + + void melee_start() + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_WORLD); + SetWorldModel(MODEL_WORLD); + AXE_RESTORED = 1; + } + +} + +} diff --git a/scripts/angelscript/items/axes_tf.as b/scripts/angelscript/items/axes_tf.as new file mode 100644 index 00000000..ef7cdb91 --- /dev/null +++ b/scripts/angelscript/items/axes_tf.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "items/axes_td.as" + +namespace MS +{ + +class AxesTf : CGameScript +{ + string MELEE_DMG_TYPE; + int TOM_SKIN; + + AxesTf() + { + MELEE_DMG_TYPE = "fire"; + TOM_SKIN = 0; + } + + void weapon_spawn() + { + SetName("Fire Tomahawk"); + SetDescription("A mystic tomahawk of ancient times"); + SetWeight(90); + SetSize(25); + SetValue(2500); + SetHUDSprite("hand", 130); + SetHUDSprite("trade", 130); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURN_DAMAGE *= 0.75; + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "axehandling"); + } + +} + +} diff --git a/scripts/angelscript/items/axes_thunder11.as b/scripts/angelscript/items/axes_thunder11.as new file mode 100644 index 00000000..c99ea83a --- /dev/null +++ b/scripts/angelscript/items/axes_thunder11.as @@ -0,0 +1,176 @@ +#pragma context server + +#include "items/axes_battleaxe.as" + +namespace MS +{ + +class AxesThunder11 : CGameScript +{ + int AXE_RESTORED; + int BASE_LEVEL_REQ; + int MELEE_DMG; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + int THROWING_AXE; + + AxesThunder11() + { + BASE_LEVEL_REQ = 15; + MELEE_DMG = 260; + MODEL_VIEW = "viewmodels/v_2haxes.mdl"; + MODEL_VIEW_IDX = 3; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 121; + } + + void weapon_spawn() + { + SetName("Thunderaxe"); + SetDescription("An axe enchanted with lightning magics"); + SetWeight(80); + SetSize(15); + SetValue(800); + SetHUDSprite("hand", 121); + SetHUDSprite("trade", 121); + } + + void OnSpawn() override + { + string reg.attack.type = "strike-land"; + int reg.attack.noautoaim = 1; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 4096; + int reg.attack.dmg = 0; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "slash"; + int reg.attack.energydrain = 2; + string reg.attack.stat = "axehandling"; + float reg.attack.hitchance = 1.0; + int reg.attack.priority = 3; + float reg.attack.delay.strike = 0.2; + float reg.attack.delay.end = 0.9; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "axethrow"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 3.0; + int reg.attack.reqskill = 19; + RegisterAttack(); + } + + void special_02() + { + LogDebug("**************** special_02"); + } + + void axethrow_start() + { + AXE_RESTORED = 0; + SetHand("undroppable"); + SetModel("none"); + SetWorldModel("none"); + SetViewModel("viewmodels/v_martialarts.mdl"); + PlayViewAnim(4); + if ((false)) + { + } + else + { + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") 0 + // svplaysound: svplaysound 0 8 $get(ent_owner,scriptvar,'PLR_SOUND_JAB2') + EmitSound(0, 8, GetEntityProperty(GetOwner(), "scriptvar")); + } + } + + void axethrow_strike() + { + PlayOwnerAnim("critical", "bow_release"); + if (!(true)) return; + string END_TARGET = param2; + string MY_VIEW = GetEntityProperty(GetOwner(), "viewangles"); + END_TARGET += /* TODO: $relpos */ $relpos(MY_VIEW, Vector3(0, 128, 0)); + if ((IsEntityAlive(param3))) + { + if ((IsValidPlayer(param3))) + { + if ("game.pvp" < 1) + { + } + int NO_EFFECT = 1; + } + if (!(NO_EFFECT)) + { + } + LogDebug("applying shock"); + string L_BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + L_BURN_DAMAGE /= 2; + L_BURN_DAMAGE += Random(1, 3); + if (L_BURN_DAMAGE < 5) + { + int L_BURN_DAMAGE = 5; + } + ApplyEffect(param3, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), L_BURN_DAMAGE, "axehandling"); + } + string DMG_AXE = GetSkillLevel(GetOwner(), "axehandling"); + SpawnNPC("monsters/summon/sorc_axe", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), END_TARGET, DMG_AXE, GetEntityIndex(GetOwner()), "axehandling" + ApplyEffect(GetOwner(), "effects/effect_templock"); + } + + void restore_axe_cl() + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_WORLD); + SetWorldModel(MODEL_WORLD); + if ((AXE_RESTORED)) return; + PlayViewAnim(ANIM_LIFT1); + } + + void catch_axe() + { + LogDebug("Caught Axe"); + if ((true)) + { + CallClientItemEvent(GetOwner(), "restore_axe_cl"); + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") MODEL_VIEW_IDX + } + if ((true)) + { + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") MODEL_VIEW_IDX + } + CallExternal(GetOwner(), "ext_end_templock"); + THROWING_AXE = 0; + SetHand("both"); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + string L_BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + L_BURN_DAMAGE /= 2; + L_BURN_DAMAGE += Random(1, 3); + if (L_BURN_DAMAGE < 5) + { + int L_BURN_DAMAGE = 5; + } + ApplyEffect(param2, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), L_BURN_DAMAGE, "axehandling"); + } + + void melee_start() + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_WORLD); + SetWorldModel(MODEL_WORLD); + AXE_RESTORED = 1; + } + +} + +} diff --git a/scripts/angelscript/items/axes_ti.as b/scripts/angelscript/items/axes_ti.as new file mode 100644 index 00000000..73edfc06 --- /dev/null +++ b/scripts/angelscript/items/axes_ti.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "items/axes_td.as" + +namespace MS +{ + +class AxesTi : CGameScript +{ + string MELEE_DMG_TYPE; + int TOM_SKIN; + + AxesTi() + { + MELEE_DMG_TYPE = "cold"; + TOM_SKIN = 1; + } + + void weapon_spawn() + { + SetName("Ice Tomahawk"); + SetDescription("A mystic tomahawk of ancient times"); + SetWeight(90); + SetSize(25); + SetValue(2500); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", 172); + } + + void game_dodamage() + { + if (!(true)) return; + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.ice"); + BURN_DAMAGE /= 3; + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + LogDebug("game_dodamage BURN_DAMAGE"); + ApplyEffect(param2, "effects/dot_cold", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "axehandling"); + } + +} + +} diff --git a/scripts/angelscript/items/axes_tl.as b/scripts/angelscript/items/axes_tl.as new file mode 100644 index 00000000..5fc410d7 --- /dev/null +++ b/scripts/angelscript/items/axes_tl.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "items/axes_td.as" + +namespace MS +{ + +class AxesTl : CGameScript +{ + string MELEE_DMG_TYPE; + int TOM_SKIN; + + AxesTl() + { + MELEE_DMG_TYPE = "lightning"; + TOM_SKIN = 2; + } + + void weapon_spawn() + { + SetName("Lightning Tomahawk"); + SetDescription("A mystic tomahawk of ancient times"); + SetWeight(90); + SetSize(25); + SetValue(2500); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", 173); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + BURN_DAMAGE /= 2; + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + ApplyEffect(param2, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "axehandling"); + } + +} + +} diff --git a/scripts/angelscript/items/axes_tp.as b/scripts/angelscript/items/axes_tp.as new file mode 100644 index 00000000..4e1a6f4a --- /dev/null +++ b/scripts/angelscript/items/axes_tp.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "items/axes_td.as" + +namespace MS +{ + +class AxesTp : CGameScript +{ + string MELEE_DMG_TYPE; + int TOM_SKIN; + + AxesTp() + { + MELEE_DMG_TYPE = "poison"; + TOM_SKIN = 3; + } + + void weapon_spawn() + { + SetName("Venomous Tomahawk"); + SetDescription("A mystic tomahawk of ancient times"); + SetWeight(90); + SetSize(25); + SetValue(2500); + SetHUDSprite("hand", "axe"); + SetHUDSprite("trade", 174); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + BURN_DAMAGE /= 2; + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + ApplyEffect(param2, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), BURN_DAMAGE, "axehandling"); + } + +} + +} diff --git a/scripts/angelscript/items/axes_vaxe.as b/scripts/angelscript/items/axes_vaxe.as new file mode 100644 index 00000000..74134ba9 --- /dev/null +++ b/scripts/angelscript/items/axes_vaxe.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "items/axes_greataxe.as" +#include "items/base_vampire.as" + +namespace MS +{ + +class AxesVaxe : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + + AxesVaxe() + { + BASE_LEVEL_REQ = 15; + MODEL_VIEW_IDX = 3; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_BODY_OFS = 118; + MELEE_DMG = 280; + MELEE_DMG_RANGE = 100; + MELEE_ACCURACY = 0.3; + } + + void weapon_spawn() + { + SetName("Blood Axe"); + SetDescription("A sinister breed of axe forged with the blood of vampires and demons"); + SetWeight(90); + SetSize(25); + SetValue(2000); + SetHUDSprite("hand", 120); + SetHUDSprite("trade", 120); + } + + void game_dodamage() + { + if (!(param1)) return; + string HEAL_AMT = GetEntityProperty(m_hLastStruckByMe, "scriptvar"); + HEAL_AMT /= 3; + try_vampire_target(GetEntityIndex(GetOwner()), GetEntityIndex(param2), HEAL_AMT); + } + +} + +} diff --git a/scripts/angelscript/items/base_book.as b/scripts/angelscript/items/base_book.as new file mode 100644 index 00000000..c5c95146 --- /dev/null +++ b/scripts/angelscript/items/base_book.as @@ -0,0 +1,138 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class BaseBook : CGameScript +{ + int CUR_PAGE; + string MAX_PAGE; + string MODEL_HOLD; + string MODEL_WORLD; + + BaseBook() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + } + + void OnSpawn() override + { + SetWeight(1); + SetSize(2); + SetWorldModel(MODEL_WORLD); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "book"); + book_spawn(); + } + + void OnDeploy() override + { + SetViewModel("none"); + SetModel(MODEL_HOLD); + int L_SUBMODEL = 15; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + MAX_PAGE = GetTokenCount(BOOK_PAGES, ";"); + MAX_PAGE -= 1; + CUR_PAGE = 0; + } + + void game_fall() + { + SetModel(MODEL_WORLD); + SetModelBody(0, 17); + PlayAnim("once", "package_floor_idle"); + } + + void game_attack1() + { + if (!(false)) return; + read_book(); + } + + void read_book() + { + CUR_PAGE = 0; + turn_page(); + } + + void turn_page() + { + // TODO: localmenu.reset + string DISP_PAGE = CUR_PAGE; + DISP_PAGE += 1; + string DISP_MAX = MAX_PAGE; + DISP_MAX += 1; + string DISP_TITLE = BOOK_TITLE; + DISP_TITLE += ", Page "; + DISP_TITLE += int(DISP_PAGE); + DISP_TITLE += "/"; + DISP_TITLE += int(DISP_MAX); + string reg.local.menu.title = DISP_TITLE; + // TODO: registerlocal.menu + if (CUR_PAGE > MAX_PAGE) + { + CUR_PAGE = MAX_PAGE; + } + if (CUR_PAGE < 0) + { + CUR_PAGE = 0; + } + string reg.local.paragraph.source.type = GetToken(BOOK_PAGES_SRC, CUR_PAGE, ";"); + string reg.local.paragraph.source = ""; + if (reg.local.paragraph.source.type == "file") + { + reg.local.paragraph.source += "books/"; + } + reg.local.paragraph.source += GetToken(BOOK_PAGES, CUR_PAGE, ";"); + // TODO: registerlocal.paragraph + int ENABLE_PREV = 1; + if (CUR_PAGE == 0) + { + int ENABLE_PREV = 0; + } + int ENABLE_NEXT = 1; + if (CUR_PAGE == MAX_PAGE) + { + int ENABLE_NEXT = 0; + } + string reg.local.button.text = "Previous"; + int reg.local.button.closeonclick = 0; + string reg.local.button.enabled = ENABLE_PREV; + int reg.local.button.docallback = 1; + string reg.local.button.callback = "prev_page"; + // TODO: registerlocal.button + string reg.local.button.text = "Next"; + int reg.local.button.closeonclick = 0; + string reg.local.button.enabled = ENABLE_NEXT; + int reg.local.button.docallback = 1; + string reg.local.button.callback = "next_page"; + // TODO: registerlocal.button + // TODO: localmenu.open + } + + void next_page() + { + CUR_PAGE += 1; + turn_page(); + } + + void prev_page() + { + CUR_PAGE -= 1; + turn_page(); + } + + void game_removefromowner() + { + CancelAttack(); + if (!(false)) return; + // TODO: localmenu.close + } + +} + +} diff --git a/scripts/angelscript/items/base_crest.as b/scripts/angelscript/items/base_crest.as new file mode 100644 index 00000000..6cc880b7 --- /dev/null +++ b/scripts/angelscript/items/base_crest.as @@ -0,0 +1,167 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class BaseCrest : CGameScript +{ + string ANIM_PREFIX; + int ARMOR_MODEL_BODY; + string FINAL_OFS; + int MODEL_BODY_OFS; + string MODEL_HOLD; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + BaseCrest() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + MODEL_VIEW = "none"; + MODEL_WEAR = "armor/p_gowns.mdl"; + MODEL_BODY_OFS = 16; + ANIM_PREFIX = "package"; + } + + void OnSpawn() override + { + SetWorldModel(MODEL_WORLD); + SetHUDSprite("trade", "crestedana"); + SetAnimExt("holditem1"); + FINAL_OFS = MODEL_CREST_OFS; + FINAL_OFS -= 1; + if (MODEL_OFS_FEMALE > 0) + { + if ((false)) + { + string OWNER_RACE = /* TODO: $get_local_prop */ $get_local_prop("race"); + string OWNER_GENDER = /* TODO: $get_local_prop */ $get_local_prop("gender"); + } + else + { + if ((true)) + { + } + string OWNER_RACE = GetEntityRace(GetOwner()); + string OWNER_GENDER = GetGender(GetOwner()); + } + string OWNER_RACE = StringToLower(OWNER_RACE); + string OWNER_GENDER = StringToLower(OWNER_GENDER); + if (OWNER_RACE == 0) + { + string OWNER_RACE = param1; + } + if (OWNER_GENDER == 0) + { + string OWNER_GENDER = param2; + } + if (OWNER_GENDER == "female") + { + if (OWNER_RACE == "human") + { + } + } + } + SetWeight(0); + SetSize(0); + SetWearable(1); + SetValue(1200); + SetModelBody(0, MODEL_BODY_OFS); + crest_spawn(); + register_armor(); + } + + void game_show() + { + SetModel(MODEL_WEAR); + string REALLY_FINAL_OFS = FINAL_OFS; + SetModelBody(0, REALLY_FINAL_OFS); + } + + void register_armor() + { + ARMOR_MODEL_BODY = -1; + // TODO: registerarmor + } + + void OnDeploy() override + { + SetModel(MODEL_HOLD); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL -= "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + crest_deploy(); + } + + void game_fall() + { + SetModel(MODEL_HOLD); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 1; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + crest_fall(); + } + + void game_removefromowner() + { + SetModelBody(0, 0); + crest_remove(); + } + + void OnDrop() override + { + game_fall(); + } + + void game_wear() + { + if (MODEL_OFS_FEMALE > 0) + { + if ((false)) + { + string OWNER_RACE = /* TODO: $get_local_prop */ $get_local_prop("race"); + string OWNER_GENDER = /* TODO: $get_local_prop */ $get_local_prop("gender"); + } + else + { + if ((true)) + { + } + string OWNER_RACE = GetEntityRace(GetOwner()); + string OWNER_GENDER = GetGender(GetOwner()); + } + string OWNER_RACE = StringToLower(OWNER_RACE); + string OWNER_GENDER = StringToLower(OWNER_GENDER); + if (OWNER_RACE == 0) + { + string OWNER_RACE = param1; + } + if (OWNER_GENDER == 0) + { + string OWNER_GENDER = param2; + } + if (OWNER_GENDER == "female") + { + if (OWNER_RACE == "human") + { + FINAL_OFS = MODEL_OFS_FEMALE; + } + } + } + SetModel(MODEL_WEAR); + string FINAL_CREST_OFS = MODEL_CREST_OFS; + FINAL_CREST_OFS -= 1; + SetModelBody(0, FINAL_CREST_OFS); + // TODO: playermessagecl You place the crest over your head. + crest_remove(); + } + +} + +} diff --git a/scripts/angelscript/items/base_crystal.as b/scripts/angelscript/items/base_crystal.as new file mode 100644 index 00000000..f70bfb0c --- /dev/null +++ b/scripts/angelscript/items/base_crystal.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class BaseCrystal : CGameScript +{ + int ACTIVE_DELAY; + string ATTACK_DELAY; + + void OnSpawn() override + { + ACTIVE_DELAY = 5; + crystal_spawn(); + SetAnimExt(PLAYERANIM_AIM); + SetWorldModel(MODEL_WORLD); + SetViewModel(MODEL_VIEW); + SetHUDSprite("trade", 71); + } + + void OnDeploy() override + { + ATTACK_DELAY = GetGameTime(); + ATTACK_DELAY += 1.0; + } + + void game_attack1() + { + if (!(GetGameTime() > ATTACK_DELAY)) return; + ATTACK_DELAY = GetGameTime(); + ATTACK_DELAY += 1.0; + string OWNER_SKILL = GetEntityProperty(GetOwner(), "skill_type"); + if (OWNER_SKILL < SKILL_LEVEL_REQ) + { + string S_REQ = "("; + S_REQ += SKILL_LEVEL_REQ; + S_REQ += ")"; + SendColoredMessage(GetOwner(), "You lack the arcane skills to activate this crystal's magic. " + S_REQ); + } + else + { + check_use(); + if ((CRYSTAL_ABORT_USE)) + { + CRYSTAL_ABORT_USE = 0; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + ScheduleDelayedEvent(0.1, "break_crystal"); + ScheduleDelayedEvent(0.2, "activate_crystal"); + ScheduleDelayedEvent(0.3, "remove_crystal"); + } + } + + void break_crystal() + { + EmitSound(GetOwner(), 0, "debris/bustglass2.wav", 5); + Effect("tempent", "gibs", "glassgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 0.3, 30, 10, 5, 1.0); + ScheduleDelayedEvent(0.1, "remove_crystal"); + } + + void remove_crystal() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/base_drink.as b/scripts/angelscript/items/base_drink.as new file mode 100644 index 00000000..e23f2b35 --- /dev/null +++ b/scripts/angelscript/items/base_drink.as @@ -0,0 +1,146 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class BaseDrink : CGameScript +{ + string ANIM_PREFIX; + string DONE_PHRASE; + string DRINK_WORD; + int MODEL_BODY_OFS; + + BaseDrink() + { + MODEL_BODY_OFS = 21; + ANIM_PREFIX = "mhealth"; + DRINK_WORD = "swig"; + DONE_PHRASE = "You drink the last drop of the"; + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + if (DRINK_TYPE == "givehealth") + { + string OUT_AMT = GetEntityMaxHealth(GetOwner()); + OUT_AMT *= RESTORE_PERCENT; + if (OUT_AMT < DRINK_EFFECTAMT) + { + string OUT_AMT = DRINK_EFFECTAMT; + } + HealEntity(GetOwner(), OUT_AMT); + } + if (DRINK_TYPE == "givemana") + { + string OUT_AMT = GetEntityProperty(GetOwner(), "maxmp"); + OUT_AMT *= RESTORE_PERCENT; + if (OUT_AMT < DRINK_EFFECTAMT) + { + string OUT_AMT = DRINK_EFFECTAMT; + } + GiveMP(GetOwner()); + } + if (SOUND_DRINK != "SOUND_DRINK") + { + EmitSound(GetOwner(), CHAN_VOICE, SOUND_DRINK, "game.sound.maxvol"); + } + if (DRINK_TYPE == "effect") + { + drink_effect(); + } + drink_now(); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + if (GetEntityProperty(GetOwner(), "drink_amt") == 0) + { + drink_remove(); + } + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + if (GetEntityProperty(GetOwner(), "drink_amt") == 0) + { + drink_remove(); + } + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + + void drink_now() + { + ScheduleDelayedEvent(0.25, "report_drink_amt"); + } + + void report_drink_amt() + { + string DRINK_REMAIN = GetEntityProperty(GetOwner(), "drink_amt"); + string MY_NAME = GetEntityName(GetOwner()); + string MY_NAME = StringToLower(MY_NAME); + string MY_NAME_P = MY_NAME; + MY_NAME_P += "."; + if (DRINK_REMAIN > 1) + { + string L_DRINK_WORD = DRINK_WORD; + L_DRINK_WORD += "s"; + SendPlayerMessage("This", MY_NAME + "has " + int(DRINK_REMAIN) + L_DRINK_WORD + " left."); + } + if (DRINK_REMAIN == 1) + { + SendPlayerMessage("This", MY_NAME + "has one " + DRINK_WORD + " left."); + } + if (DRINK_REMAIN == 0) + { + SendColoredMessage(GetOwner(), DONE_PHRASE + MY_NAME_P); + ScheduleDelayedEvent(0.1, "drink_remove"); + } + } + + void drink_remove() + { + DeleteEntity(GetOwner()); + } + + void drink_deploy() + { + if (!(true)) return; + if (!(ITEM_MODEL_VIEW_IDX > 0)) return; + ScheduleDelayedEvent(0.01, "bi_setup_model"); + } + +} + +} diff --git a/scripts/angelscript/items/base_effect_armor.as b/scripts/angelscript/items/base_effect_armor.as new file mode 100644 index 00000000..2b678f15 --- /dev/null +++ b/scripts/angelscript/items/base_effect_armor.as @@ -0,0 +1,52 @@ +#pragma context server + +namespace MS +{ + +class BaseEffectArmor : CGameScript +{ + void ext_activate_items() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + barmor_effect_activate(); + } + + void game_wear() + { + ScheduleDelayedEvent(0.1, "barmor_effect_activate"); + } + + void game_putinpack() + { + ScheduleDelayedEvent(0.1, "barmor_effect_remove"); + } + + void game_remove() + { + ScheduleDelayedEvent(0.1, "barmor_effect_remove"); + } + + void game_fall() + { + ScheduleDelayedEvent(0.1, "barmor_effect_remove"); + } + + void game_sheath() + { + ScheduleDelayedEvent(0.1, "barmor_effect_remove"); + } + + void OnDrop() override + { + ScheduleDelayedEvent(0.1, "barmor_effect_remove"); + } + + void OnDeploy() override + { + ScheduleDelayedEvent(0.1, "barmor_effect_remove"); + } + +} + +} diff --git a/scripts/angelscript/items/base_effect_weilded.as b/scripts/angelscript/items/base_effect_weilded.as new file mode 100644 index 00000000..1f35c08e --- /dev/null +++ b/scripts/angelscript/items/base_effect_weilded.as @@ -0,0 +1,70 @@ +#pragma context server + +namespace MS +{ + +class BaseEffectWeilded : CGameScript +{ + void ext_activate_items() + { + if (!(true)) return; + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int BEW_IS_WEILDED = 1; + } + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int BEW_IS_WEILDED = 1; + } + if (!(BEW_IS_WEILDED)) return; + bweapon_effect_activate(); + } + + void OnDeploy() override + { + if (!(true)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + bweapon_effect_activate(); + } + + void game_wear() + { + if (!(true)) return; + bweapon_effect_remove(); + } + + void game_putinpack() + { + if (!(true)) return; + bweapon_effect_remove(); + } + + void game_remove() + { + if (!(true)) return; + bweapon_effect_remove(); + } + + void game_fall() + { + if (!(true)) return; + bweapon_effect_remove(); + } + + void game_sheath() + { + if (!(true)) return; + bweapon_effect_remove(); + } + + void OnDrop() override + { + if (!(true)) return; + bweapon_effect_remove(); + } + +} + +} diff --git a/scripts/angelscript/items/base_elemental_resist.as b/scripts/angelscript/items/base_elemental_resist.as new file mode 100644 index 00000000..22d41674 --- /dev/null +++ b/scripts/angelscript/items/base_elemental_resist.as @@ -0,0 +1,126 @@ +#pragma context server + +namespace MS +{ + +class BaseElementalResist : CGameScript +{ + int ELM_EFFECT_ACTIVE; + + BaseElementalResist() + { + ELM_EFFECT_ACTIVE = 0; + } + + void game_putinpack() + { + elm_remove_effect(); + } + + void OnDrop() override + { + elm_remove_effect(); + } + + void game_remove() + { + elm_remove_effect(); + } + + void game_fall() + { + elm_remove_effect(); + } + + void game_sheath() + { + elm_remove_effect(); + } + + void OnDeploy() override + { + if ((ELM_WEAPON)) return; + elm_remove_effect(); + } + + void game_deleted() + { + if (!(true)) return; + if ((GetEntityProperty(GetOwner(), "inhand"))) + { + int L_REM_EFFECTS = 1; + } + if ((GetEntityProperty(GetOwner(), "is_worn"))) + { + int L_REM_EFFECTS = 1; + } + if (!(L_REM_EFFECTS)) return; + elm_remove_effect(); + } + + void game_wear() + { + elm_activate_effect(); + } + + void elm_activate_effect() + { + if ((ELM_EFFECT_ACTIVE)) return; + ELM_EFFECT_ACTIVE = 1; + elm_get_resist(); + if (!(ELM_WEAPON)) + { + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, ELM_TYPE, ELM_AMT); + } + else + { + CallExternal(GetOwner(), "ext_register_weapon", GetEntityIndex(GetOwner()), ELM_NAME, ELM_TYPE, ELM_AMT); + } + } + + void elm_remove_effect() + { + if (!(ELM_EFFECT_ACTIVE)) return; + ELM_EFFECT_ACTIVE = 0; + if (!(ELM_WEAPON)) + { + CallExternal(GetOwner(), "ext_register_element", ELM_NAME, "remove"); + } + else + { + CallExternal(GetOwner(), "ext_register_weapon", GetEntityIndex(GetOwner()), ELM_NAME, "remove"); + } + } + + void elm_get_resist() + { + } + + void ext_activate_items() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if (!(ELM_WEAPON)) + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((ELM_WEAPON)) + { + if (GetEntityProperty(GetOwner(), "scriptvar") != GetOwner()) + { + } + if (GetEntityProperty(GetOwner(), "scriptvar") != GetOwner()) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ScheduleDelayedEvent(0.1, "elm_activate_effect"); + } + +} + +} diff --git a/scripts/angelscript/items/base_item.as b/scripts/angelscript/items/base_item.as new file mode 100644 index 00000000..c03bd7c4 --- /dev/null +++ b/scripts/angelscript/items/base_item.as @@ -0,0 +1,150 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class BaseItem : CGameScript +{ + int ANIM_IDLE1; + int ANIM_IDLE2; + int ANIM_IDLE3; + int ANIM_IDLE4; + int ANIM_IDLE5; + int ANIM_IDLE_DELAY_HIGH; + int ANIM_IDLE_DELAY_LOW; + int ANIM_LIFT1; + string PLAYERANIM_AIM; + int baseitem.canidle; + + BaseItem() + { + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 0; + ANIM_IDLE2 = 0; + ANIM_IDLE3 = 0; + ANIM_IDLE4 = 0; + ANIM_IDLE5 = 0; + ANIM_IDLE_DELAY_LOW = 2; + ANIM_IDLE_DELAY_HIGH = 5; + baseitem.canidle = 1; + PLAYERANIM_AIM = "blunt"; + } + + void OnSpawn() override + { + if ((IS_MAGIC_HAND)) return; + SetAnimExt(PLAYERANIM_AIM); + SetWorldModel(MODEL_WORLD); + item_spawn(); + } + + void OnPickup(CBaseEntity@ player) override + { + if ((IS_MAGIC_HAND)) return; + PlayViewAnim(ANIM_LIFT1); + SetModel(MODEL_HANDS); + SetModelBody(0, "game.item.hand_index"); + item_pickup(); + } + + void OnDeploy() override + { + if ((IS_WEAPON)) return; + if ((IS_MAGIC_HAND)) return; + SetViewModel(MODEL_VIEW); + item_deploy(); + if (!(true)) return; + if (!(ITEM_MODEL_VIEW_IDX > 0)) return; + ScheduleDelayedEvent(0.1, "bi_setup_model"); + } + + void game_switchhands() + { + if ((IS_MAGIC_HAND)) return; + PlayViewAnim(ANIM_IDLE1); + item_switchhands(); + } + + void OnDrop() override + { + item_drop(); + } + + void game_attack_cancel() + { + game_viewanimdone(); + } + + void game_viewanimdone() + { + if (!(ANIM_IDLE_TOTAL > 0)) return; + RandomInt(ANIM_IDLE_DELAY_LOW, ANIM_IDLE_DELAY_HIGH)("item_idle"); + } + + void item_idle() + { + if ((NO_IDLE)) return; + if (!(ANIM_IDLE_TOTAL > 0)) return; + if (("game.item.attacking")) return; + if (!("game.item.inhand")) return; + if (!(baseitem.canidle)) return; + int l.anim = RandomInt(1, ANIM_IDLE_TOTAL); + if (l.anim == 1) + { + PlayViewAnim(ANIM_IDLE1); + } + else + { + if (l.anim == 2) + { + PlayViewAnim(ANIM_IDLE2); + } + else + { + if (l.anim == 3) + { + PlayViewAnim(ANIM_IDLE3); + } + else + { + if (l.anim == 4) + { + PlayViewAnim(ANIM_IDLE4); + } + else + { + if (l.anim == 5) + { + PlayViewAnim(ANIM_IDLE5); + } + } + } + } + } + } + + void bi_setup_model() + { + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") ITEM_MODEL_VIEW_IDX + ScheduleDelayedEvent(1.0, "bitem_setup_model2"); + } + + void bi_setup_model2() + { + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + LogDebug("bi_setup_model2"); + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") ITEM_MODEL_VIEW_IDX + } + + void bitem_set_can_idle() + { + baseitem.canidle = 1; + item_idle(); + } + +} + +} diff --git a/scripts/angelscript/items/base_item_extras.as b/scripts/angelscript/items/base_item_extras.as new file mode 100644 index 00000000..3d5784f1 --- /dev/null +++ b/scripts/angelscript/items/base_item_extras.as @@ -0,0 +1,273 @@ +#pragma context server + +#include "items/item_debug.as" + +namespace MS +{ + +class BaseItemExtras : CGameScript +{ + float BWEAPON_BASE_ANIM_SPEED; + int IS_RESERVED; + string ITEM_BASE_SPEED; + string ITEM_BASE_STRIKE; + int ITEM_RESERVED; + int ITEM_SWIFT_BLADE; + + BaseItemExtras() + { + BWEAPON_BASE_ANIM_SPEED = 1.0; + array PICKUP_ALLOW_LIST; + } + + void OnSpawn() override + { + ScheduleDelayedEvent(0.1, "vanish_item"); + } + + void vanish_item() + { + string L_OWNER = GetEntityProperty(GetOwner(), "owner"); + if (((L_OWNER !is null))) + { + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + } + } + + void game_fall() + { + if (!(true)) return; + if (!(ITEM_RESERVE_FOR_STRONGEST)) return; + bitem_reserve_for_strongest(); + if (!(IS_CONTAINER)) return; + if ((IS_RESERVED)) return; + IS_RESERVED = 1; + array PICKUP_ALLOW_LIST; + PICKUP_ALLOW_LIST.insertLast(GetEntityIndex(GetOwner())); + } + + void bitem_reserve_for_strongest() + { + ITEM_RESERVED = 1; + ScheduleDelayedEvent(0.1, "bitem_get_strongest"); + } + + void game_restricted() + { + if (!(true)) return; + if (!(ITEM_RESERVED)) return; + LogDebug("game_restricted"); + string OUT_MSG = "This trophy is reserved for "; + string ITEM_RESERVER = PICKUP_ALLOW_LIST[int(0)]; + OUT_MSG += GetEntityName(ITEM_RESERVER); + SendInfoMsg(param1, "Item Damagepoint Restricted " + OUT_MSG); + if (!(IS_CONTAINER)) return; + if (!(IS_RESERVED)) return; + string OUT_MSG = "This container is reserved for "; + string ITEM_RESERVER = PICKUP_ALLOW_LIST[int(0)]; + OUT_MSG += GetEntityName(ITEM_RESERVER); + SendInfoMsg(param1, "Item Restricted " + OUT_MSG); + } + + void bitem_reserve() + { + ITEM_RESERVED = 1; + } + + void bitem_get_strongest() + { + if (!(true)) return; + if ((IsEntityAlive(GetOwner()))) + { + PICKUP_ALLOW_LIST.resize(0); + } + else + { + CallExternal(GAME_MASTER, "gm_find_strongest_reset"); + string WINNING_PLAYER = GetEntityProperty(GAME_MASTER, "scriptvar"); + PICKUP_ALLOW_LIST.insertLast(WINNING_PLAYER); + LogDebug("bitem_get_strongest GetEntityName(WINNING_PLAYER)"); + } + } + + void OnDeploy() override + { + if (!(true)) return; + if (QUEST_ITEM_CAT != "QUEST_ITEM_CAT") + { + string QUEST_CAT_DATA = GetPlayerQuestData(GetOwner(), QUEST_ITEM_CAT); + if ((QUEST_CAT_DATA).findFirst(QUEST_ITEM_ID) >= 0) + { + int DO_NOT_ADD = 1; + } + if (!(DO_NOT_ADD)) + { + } + if (QUEST_CAT_DATA == 0) + { + SetPlayerQuestData(GetOwner(), QUEST_ITEM_CAT); + } + else + { + if (QUEST_CAT_DATA.length() > 0) QUEST_CAT_DATA += ";"; + QUEST_CAT_DATA += QUEST_ITEM_ID; + SetPlayerQuestData(GetOwner(), QUEST_ITEM_CAT); + } + } + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + bweapon_effect_activate(); + ScheduleDelayedEvent(0.01, "bweapon_fixprops"); + if (!(IS_CONTAINER)) return; + if ((IS_RESERVED)) return; + IS_RESERVED = 1; + array PICKUP_ALLOW_LIST; + PICKUP_ALLOW_LIST.insertLast(GetEntityIndex(GetOwner())); + } + + void ext_activate_items() + { + if (!(true)) return; + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int BEW_IS_WEILDED = 1; + } + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int BEW_IS_WEILDED = 1; + } + if (!(BEW_IS_WEILDED)) return; + bweapon_effect_activate(); + } + + void bweapon_fixprops() + { + // TODO: setviewmodelprop ent_me rendermode 0 + // TODO: setviewmodelprop ent_me renderamt 255 + } + + void game_wear() + { + if ((true)) + { + bweapon_effect_remove(); + } + } + + void game_putinpack() + { + CancelAttack(); + if (!(true)) return; + bweapon_effect_remove("game_putinpack"); + } + + void game_remove() + { + if (!(true)) return; + bweapon_effect_remove("game_remove"); + } + + void game_sheath() + { + if (!(true)) return; + bweapon_effect_remove("game_sheath"); + } + + void OnDrop() override + { + CancelAttack(); + if (!(true)) return; + bweapon_effect_remove("game_drop"); + } + + void game_deleted() + { + LogDebug("game_deleted"); + CancelAttack(); + if (!(true)) return; + if ((GetEntityProperty(GetOwner(), "inhand"))) + { + int L_REM_EFFECTS = 1; + } + if ((GetEntityProperty(GetOwner(), "is_worn"))) + { + int L_REM_EFFECTS = 1; + } + if (!(L_REM_EFFECTS)) return; + bweapon_effect_remove("game_deleted"); + } + + void ext_render_items() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + SetProp(GetOwner(), "rendermode", param2); + SetProp(GetOwner(), "renderamt", param3); + } + + void ext_playowneranim() + { + PlayOwnerAnim("PARAM1", param2); + } + + void item_banked() + { + game_putinpack(); + } + + void ext_item_swift_blade() + { + LogDebug("ext_item_swift_blade PARAM1 PARAM2"); + ITEM_SWIFT_BLADE = 1; + if (param1 != "remove") + { + ITEM_BASE_SPEED = param1; + ITEM_BASE_STRIKE = param2; + } + else + { + ITEM_SWIFT_BLADE = 0; + // TODO: setviewmodelprop ent_me animspeed 1.0 + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + } + } + + void ext_viewanim_test() + { + LogDebug("ext_viewanim_test"); + // TODO: setviewmodelprop ent_me animspeed 5.0 + } + + void bweapon_effect_activate() + { + } + + void bweapon_effect_remove() + { + int L_SET_ID = 0; + int L_HAND = -1; + string L_ID = GetEntityProperty(GetOwner(), "scriptvar"); + if (L_ID == GetEntityIndex(GetOwner())) + { + if (GetEntityProperty(L_ID, "hand_index") == GetEntityProperty(GetOwner(), "hand_index")) + { + string L_HAND = GetEntityProperty(L_ID, "hand_index"); + } + } + string L_ID = GetEntityProperty(GetOwner(), "scriptvar"); + if (L_ID == GetEntityIndex(GetOwner())) + { + if (GetEntityProperty(L_ID, "hand_index") == GetEntityProperty(GetOwner(), "hand_index")) + { + string L_HAND = GetEntityProperty(L_ID, "hand_index"); + } + } + if (!(L_HAND >= 0)) return; + if (!(L_HAND <= 3)) return; + CallExternal(GetOwner(), "ext_set_hand_id", L_HAND, 0); + } + +} + +} diff --git a/scripts/angelscript/items/base_kick.as b/scripts/angelscript/items/base_kick.as new file mode 100644 index 00000000..4bdd4c12 --- /dev/null +++ b/scripts/angelscript/items/base_kick.as @@ -0,0 +1,153 @@ +#pragma context server + +namespace MS +{ + +class BaseKick : CGameScript +{ + string ANIM_FOOT_IDLE; + int ANIM_KICK; + int DOING_KICK; + string KICK_VIEW; + string OWNANIM_KICK; + string SOUND_KICKHIT; + + BaseKick() + { + ANIM_KICK = 1; + ANIM_FOOT_IDLE = "idle"; + OWNANIM_KICK = "stance_normal_highkick_r1"; + KICK_VIEW = "weapons/martialarts/foot.mdl"; + SOUND_KICKHIT = ""; + } + + void register_charge1() + { + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 100; + int reg.attack.dmg = 200; + int reg.attack.dmg.range = 10; + string reg.attack.dmg.type = "blunt"; + int reg.attack.energydrain = 2; + string reg.attack.stat = "martialarts"; + float reg.attack.hitchance = 0.9; + int reg.attack.priority = 1; + float reg.attack.delay.strike = 0.2; + float reg.attack.delay.end = 0.9; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "kickatk"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 5; + RegisterAttack(); + } + + void kickatk_start() + { + DOING_KICK = 1; + SetViewModel(KICK_VIEW); + ScheduleDelayedEvent(0.1, "kick_go"); + if (!(true)) return; + // svplaysound: svplaysound 0 8 $get(ent_owner,scriptvar,'PLR_SOUND_JAB2') + EmitSound(0, 8, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void kick_go() + { + PlayViewAnim(ANIM_KICK); + PlayOwnerAnim("critical", "stance_normal_highkick_r1"); + ScheduleDelayedEvent(0.5, "restore_hands"); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(DOING_KICK)) return; + DOING_KICK = 0; + if (!("game.pvp")) + { + if ((IsValidPlayer(param2))) + { + } + return; + } + EmitSound(GetOwner(), 0, "weapons/cbar_hitbod1.wav", 8); + string MA_SKILL = GetSkillLevel(GetOwner(), "martialarts"); + if (MA_SKILL >= 10) + { + if (GetEntityRange(param2) < 100) + { + } + if (GetEntityMaxHealth(param2) < 1250) + { + } + if (GetRelationship(param2) != "ally") + { + } + if ((IsEntityAlive(param2))) + { + } + if (GetEntityRace(param2) != 0) + { + } + string PUSH_STR_LR = MA_SKILL; + PUSH_STR_LR *= 15; + string PUSH_STR_F = MA_SKILL; + PUSH_STR_F *= 20; + string PUSH_STR_V = MA_SKILL; + PUSH_STR_V *= 5; + if (PUSH_STR_LR > 300) + { + int PUSH_STR_LR = 300; + } + if (PUSH_STR_F > 400) + { + int PUSH_STR_F = 400; + } + if (PUSH_STR_V > 100) + { + int PUSH_STR_V = 100; + } + int L_R = RandomInt(50, PUSH_STR_LR); + if (RandomInt(1, 2) == 1) + { + string L_R = /* TODO: $neg */ $neg(L_R); + } + string PUSH_VEL = /* TODO: $relvel */ $relvel(L_R, PUSH_STR_F, PUSH_STR_V); + AddVelocity(GetEntityIndex(param2), PUSH_VEL); + } + if (MA_SKILL >= 20) + { + string STUN_DUR = MA_SKILL; + STUN_DUR /= 3; + if (STUN_DUR > 20) + { + int STUN_DUR = 20; + } + string TARG_HP = GetEntityHealth(param2); + if (TARG_HP > 1000) + { + int FAIL_RATIO = RandomInt(1, 9999); + if (FAIL_RATIO < TARG_HP) + { + int EXIT_SUB = 1; + } + } + if (!(EXIT_SUB)) + { + } + ApplyEffect(param2, "effects/debuff_stun", STUN_DUR, GetEntityIndex(GetOwner())); + } + } + + void restore_hands() + { + DOING_KICK = 0; + SetViewModel(MODEL_VIEW); + } + +} + +} diff --git a/scripts/angelscript/items/base_lighted.as b/scripts/angelscript/items/base_lighted.as new file mode 100644 index 00000000..23b9102d --- /dev/null +++ b/scripts/angelscript/items/base_lighted.as @@ -0,0 +1,137 @@ +#pragma context server + +namespace MS +{ + +class BaseLighted : CGameScript +{ + int FRAMERATE; + int FRAMES; + string LIGHT_COLOR; + float LIGHT_DROPPED_SCALE; + float LIGHT_PLAYER_SCALE; + int LIGHT_RADIUS; + int L_ATTACH_BODY; + string L_ATTACH_MDL_ID; + string L_POS; + string SPRITE_FIRE; + string SPRITE_FIRE_FIXED; + string local.body; + string local.lightid; + int local.local3rdp_sprite; + int local.modelid; + string local.scale; + string local.sprite; + + BaseLighted() + { + SPRITE_FIRE = "fire1_fixed.spr"; + SPRITE_FIRE_FIXED = "fire1_fixed.spr"; + LIGHT_RADIUS = 192; + LIGHT_COLOR = Vector3(255, 255, 128); + LIGHT_PLAYER_SCALE = 0.3; + LIGHT_DROPPED_SCALE = 0.5; + Precache(SPRITE_FIRE); + Precache(SPRITE_FIRE_FIXED); + FRAMES = 23; + FRAMERATE = 30; + local.modelid = -1; + local.local3rdp_sprite = 0; + SetCallback("render", "enable"); + } + + void game_putinpack() + { + ClientEffect("all", LAST_TORCH_LIGHT); + ClientEffect("remove", "all", LAST_TORCH_LIGHT); + } + + void game_removefromowner() + { + ClientEffect("all", LAST_TORCH_LIGHT); + ClientEffect("remove", "all", LAST_TORCH_LIGHT); + } + + void game_newowner() + { + ClientEffect("all", LAST_TORCH_LIGHT); + ClientEffect("remove", "all", LAST_TORCH_LIGHT); + } + + void client_activate() + { + local.modelid = param1; + local.body = param2; + local.sprite = SPRITE_FIRE_FIXED; + local.scale = LIGHT_DROPPED_SCALE; + if (local.modelid == "game.localplayer.index") + { + local.local3rdp_sprite = 1; + } + if ((/* TODO: $getcl */ $getcl(local.modelid, "isplayer"))) + { + local.sprite = SPRITE_FIRE; + local.scale = LIGHT_PLAYER_SCALE; + } + create_light(); + } + + void create_light() + { + ClientEffect("light", "new", Vector3(0, 0, 0), LIGHT_RADIUS, LIGHT_COLOR, 5); + SetGlobalVar("LAST_TORCH_LIGHT", "game.script.last_light_id"); + local.lightid = "game.script.last_light_id"; + } + + void game_prerender() + { + if (SPRITE_FIRE != "none") + { + ClientEffect("frameent", "sprite", local.sprite, Vector3(0, 0, 0), "setup_flame"); + } + if (!(LIGHT_RADIUS > 0)) return; + string L_POS = /* TODO: $getcl */ $getcl(local.modelid, "origin"); + if ((/* TODO: $getcl */ $getcl(local.modelid, "isplayer"))) + { + L_POS = /* TODO: $relpos */ $relpos(/* TODO: $getcl */ $getcl(local.modelid, "angles"), Vector3(0, 64, 0)); + L_POS += /* TODO: $getcl */ $getcl(local.modelid, "center"); + } + string L_RADIUS = LIGHT_RADIUS; + L_RADIUS += Random(-8, 8); + ClientEffect("light", local.lightid, L_POS, L_RADIUS, LIGHT_COLOR, 5); + } + + void setup_flame() + { + string L_ATTACH_MDL_ID = local.modelid; + string L_ATTACH_BODY = local.body; + if ((local.local3rdp_sprite)) + { + // TODO: UNCONVERTED: if( local.local3rdp_sprite ) if( !game.localplayer.thirdperson ) + } + if (local.body == 1) + { + L_ATTACH_MDL_ID = "game.localplayer.viewmodel.left.id"; + } + else + { + L_ATTACH_MDL_ID = "game.localplayer.viewmodel.right.id"; + } + L_ATTACH_BODY = 1; + if (!(L_ATTACH_MDL_ID > -1)) return; + ClientEffect("frameent", "set_current_prop", "owner", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "skin", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "aiment", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "movetype", 12); + ClientEffect("frameent", "set_current_prop", "body", L_ATTACH_BODY); + ClientEffect("frameent", "set_current_prop", "scale", local.scale); + float l.frame = GetGameTime(); + l.frame -= START_BURNING; + l.frame *= FRAMERATE; + l.frame %= FRAMES; + ClientEffect("frameent", "set_current_prop", "frame", l.frame); + } + +} + +} diff --git a/scripts/angelscript/items/base_loopsnd.as b/scripts/angelscript/items/base_loopsnd.as new file mode 100644 index 00000000..17797edc --- /dev/null +++ b/scripts/angelscript/items/base_loopsnd.as @@ -0,0 +1,56 @@ +#pragma context server + +namespace MS +{ + +class BaseLoopsnd : CGameScript +{ + string LOOPSND_CHANNEL; + int LOOPSND_LENGTH; + string LOOPSND_NAME; + int LOOPSND_ON; + string LOOPSND_VOLUME; + + BaseLoopsnd() + { + LOOPSND_NAME = "none"; + LOOPSND_LENGTH = 5; + LOOPSND_VOLUME = "const.snd.maxvol"; + LOOPSND_CHANNEL = "const.sound.item"; + Precache(LOOPSND_NAME); + } + + void OnSpawn() override + { + LOOPSND_ON = 0; + } + + void loopsnd_start() + { + LOOPSND_ON = 1; + loopsnd(); + } + + void loopsnd_end() + { + LOOPSND_ON = 0; + // svplaysound: svplaysound LOOPSND_CHANNEL 0 + EmitSound(LOOPSND_CHANNEL, 0); + } + + void loopsnd() + { + if (!(LOOPSND_ON)) return; + // svplaysound: svplaysound LOOPSND_CHANNEL LOOPSND_VOLUME LOOPSND_NAME + EmitSound(LOOPSND_CHANNEL, LOOPSND_VOLUME, LOOPSND_NAME); + LOOPSND_LENGTH("loopsnd"); + } + + void game_putinpack() + { + loopsnd_end(); + } + +} + +} diff --git a/scripts/angelscript/items/base_medal.as b/scripts/angelscript/items/base_medal.as new file mode 100644 index 00000000..87427d95 --- /dev/null +++ b/scripts/angelscript/items/base_medal.as @@ -0,0 +1,79 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class BaseMedal : CGameScript +{ + int BM_OWNER_SET; + float FREQ_EFFECT; + string MEDAL_DEPLOY_TIME; + string MEDAL_NEXT_EFFECT; + string MODEL_HANDS; + string MODEL_WORLD; + + BaseMedal() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + FREQ_EFFECT = 21.0; + } + + void OnSpawn() override + { + SetHUDSprite("trade", 80); + medal_spawn(); + } + + void game_fall() + { + if (!(true)) return; + if ((BM_OWNER_SET)) return; + BM_OWNER_SET = 1; + array PICKUP_ALLOW_LIST; + PICKUP_ALLOW_LIST.insertLast(GetEntityIndex(GetOwner())); + } + + void game_restricted() + { + string OUT_MSG = "This trophy is reserved for "; + string ITEM_OWNER = PICKUP_ALLOW_LIST[int(0)]; + OUT_MSG += GetEntityName(ITEM_OWNER); + SendInfoMsg(param1, "Item Damagepoint Restricted " + OUT_MSG); + } + + void ext_set_owner() + { + LogDebug("Owner set GetEntityName(param1)"); + array PICKUP_ALLOW_LIST; + PICKUP_ALLOW_LIST.insertLast(param1); + BM_OWNER_SET = 1; + } + + void OnDeploy() override + { + MEDAL_DEPLOY_TIME = GetGameTime(); + MEDAL_DEPLOY_TIME += 1.0; + } + + void game_attack1() + { + if (!(true)) return; + if (!(GetGameTime() > MEDAL_DEPLOY_TIME)) return; + if (GetGameTime() > MEDAL_NEXT_EFFECT) + { + MEDAL_NEXT_EFFECT = GetGameTime(); + MEDAL_NEXT_EFFECT += FREQ_EFFECT; + medal_activate(); + } + else + { + SendColoredMessage(GetOwner(), "You must wait a bit before showing off this medal again."); + } + } + +} + +} diff --git a/scripts/angelscript/items/base_melee.as b/scripts/angelscript/items/base_melee.as new file mode 100644 index 00000000..901a14dc --- /dev/null +++ b/scripts/angelscript/items/base_melee.as @@ -0,0 +1,251 @@ +#pragma context server + +#include "items/base_weapon.as" + +namespace MS +{ + +class BaseMelee : CGameScript +{ + string BITEM_UNDERSKILLED; + string BWEAPON_CHARGE_PERCENT; + float BWEAPON_DBL_CHARGE_ADJ; + float FREQ_NUB; + string MELEE_CALLBACK; + string MELEE_CALLBACK_CHARGED; + int MELEE_NOISE; + string NOOB_LOOP; + string PARRY_MULTI_OUT; + string PARRY_VALUE; + string SPECIAL01_SND; + string WEAPON_PRIMARY_SKILL; + + BaseMelee() + { + MELEE_NOISE = 650; + SPECIAL01_SND = GetEntityProperty(GetOwner(), "scriptvar"); + FREQ_NUB = 30.0; + MELEE_CALLBACK = "melee"; + MELEE_CALLBACK_CHARGED = "melee"; + BWEAPON_DBL_CHARGE_ADJ = 2.0; + } + + void weapon_spawn() + { + register_normal(); + } + + void register_normal() + { + if ((CUSTOM_REGISTER_NORMAL)) return; + string F_BASE_LEVEL_REQ = BASE_LEVEL_REQ; + if (BASE_LEVEL_REQ == "BASE_LEVEL_REQ") + { + int F_BASE_LEVEL_REQ = 0; + } + string reg.attack.type = "strike-land"; + string reg.attack.keys = "+attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 0; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = MELEE_CALLBACK; + string reg.attack.noise = MELEE_NOISE; + string reg.attack.reqskill = F_BASE_LEVEL_REQ; + WEAPON_PRIMARY_SKILL = reg.attack.stat; + RegisterAttack(); + register_charge1(); + } + + void OnDeploy() override + { + if (!(true)) return; + weapon_equip(); + string FIND_MELEE_STAT = "skill."; + FIND_MELEE_STAT += MELEE_STAT; + if (GetEntityProperty(GetOwner(), "find_melee_stat") < BASE_LEVEL_REQ) + { + ScheduleDelayedEvent(5.0, "nub_loop"); + BITEM_UNDERSKILLED = 1; + SendColoredMessage(GetOwner(), "You lack the skill to properly wield this weapon!"); + string OUT_STR = "You lack the proficiency to wield this weapon. ( requires: "; + OUT_STR += MELEE_STAT; + OUT_STR += " proficiency "; + OUT_STR += BASE_LEVEL_REQ; + OUT_STR += " )"; + SendInfoMsg(GetOwner(), "Insufficient Skill " + OUT_STR); + NOOB_LOOP = 1; + } + } + + void register_charge1() + { + if ((CUSTOM_REGISTER_CHARGE1)) return; + if ((IS_TWO_HANDED_SWORD)) return; + string reg.attack.type = "strike-land"; + string reg.attack.keys = "+attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 0; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = MELEE_CALLBACK_CHARGED; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 1; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "special_01"; + reg.attack.dmg *= BWEAPON_DBL_CHARGE_ADJ; + reg.attack.energydrain *= BWEAPON_DBL_CHARGE_ADJ; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 2; + if (BASE_LEVEL_REQ > reg.attack.reqskill) + { + reg.attack.reqskill += BASE_LEVEL_REQ; + } + RegisterAttack(); + } + + void melee_start() + { + if ((MELEE_OVERRIDE)) return; + bm_attack_start(); + } + + void bm_attack_start() + { + PlayViewAnim(MELEE_VIEWANIM_ATK); + if (PLAYERANIM_SWING != "PLAYERANIM_SWING") + { + PlayOwnerAnim("once", PLAYERANIM_SWING); + } + MELEE_SOUND_DELAY("melee_playsound"); + } + + void melee_playsound() + { + EmitSound(GetOwner(), "const.snd.weapon", SOUND_SWIPE, "const.snd.maxvol"); + } + + void game_attack_done() + { + item_idle(); + } + + void special_01_start() + { + if ((SPECIAL1_OVERRIDE)) return; + melee_start(); + if (!(true)) return; + // svplaysound: svplaysound 1 10 SPECIAL01_SND + EmitSound(1, 10, SPECIAL01_SND); + } + + void hitwall() + { + if ((OVERRIDE_HITWALL)) return; + if (!(SOUND_HITWALL1 != "SOUND_HITWALL1")) return; + // PlayRandomSound from: SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void nub_loop() + { + if (!(true)) return; + if (!(NOOB_LOOP)) + { + BITEM_UNDERSKILLED = 0; + } + if (!(NOOB_LOOP)) return; + BITEM_UNDERSKILLED = 1; + string FIND_MELEE_STAT = "skill."; + FIND_MELEE_STAT += MELEE_STAT; + if (!(GetEntityProperty(GetOwner(), "find_melee_stat") < BASE_LEVEL_REQ)) return; + FREQ_NUB("nub_loop"); + string OUT_STR = "You lack the proficiency to wield this weapon. ( requires: "; + OUT_STR += MELEE_STAT; + OUT_STR += " proficiency "; + OUT_STR += BASE_LEVEL_REQ; + OUT_STR += " )"; + SendInfoMsg(GetOwner(), "Insufficient Skill " + OUT_STR); + SendColoredMessage(GetOwner(), "You lack the skill to wield this weapon."); + } + + void game_wear() + { + weapon_equip(); + NOOB_LOOP = 0; + } + + void game_removefromowner() + { + NOOB_LOOP = 0; + } + + void weapon_equip() + { + if ((AM_SHIELD)) + { + PARRY_VALUE = "am_shield"; + PARRY_MULTI_OUT = PARRY_MULTI; + } + if (!(AM_SHIELD)) + { + string FIND_MELEE_STAT = "skill."; + FIND_MELEE_STAT += MELEE_STAT; + PARRY_VALUE = GetEntityProperty(GetOwner(), "find_melee_stat"); + } + if ((NO_PARRY)) + { + PARRY_VALUE = 0; + } + } + + void game_setchargepercent() + { + BWEAPON_CHARGE_PERCENT = param1; + } + + void melee_damaged_other() + { + if ((BITEM_UNDERSKILLED)) + { + SetDamage("dmg"); + return; + } + if ((BWEAPON_NO_PERCENT_CHARGE)) return; + if (!(BWEAPON_CHARGE_PERCENT < 1)) return; + if (BWEAPON_CHARGE_PERCENT > 0.25) + { + BWEAPON_CHARGE_PERCENT -= 0.25; + string L_CHARGE_RATIO = /* TODO: $ratio */ $ratio(BWEAPON_CHARGE_PERCENT, 1.25, BWEAPON_DBL_CHARGE_ADJ); + string NEW_DMG = param2; + NEW_DMG *= L_CHARGE_RATIO; + SetDamage("dmg"); + return; + LogDebug("Adjusted dmg x L_CHARGE_RATIO"); + BWEAPON_CHARGE_PERCENT = 0; + string CUR_DRAIN = MELEE_ENERGY; + CUR_DRAIN *= BWEAPON_CHARGE_PERCENT; + DrainStamina(GetOwner()); + } + } + +} + +} diff --git a/scripts/angelscript/items/base_miscitem.as b/scripts/angelscript/items/base_miscitem.as new file mode 100644 index 00000000..fb81d75d --- /dev/null +++ b/scripts/angelscript/items/base_miscitem.as @@ -0,0 +1,76 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class BaseMiscitem : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string PLAYERANIM_AIM; + + BaseMiscitem() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_VIEW = "none"; + MODEL_BODY_OFS = 16; + ANIM_PREFIX = "package"; + PLAYERANIM_AIM = "holditem"; + } + + void OnSpawn() override + { + SetAnimExt(PLAYERANIM_AIM); + SetWorldModel(MODEL_WORLD); + SetViewModel(MODEL_VIEW); + SetHUDSprite("trade", "package"); + SetWeight(1); + SetSize(1); + miscitem_spawn(); + } + + void OnDeploy() override + { + miscitem_deploy(); + } + + void OnPickup(CBaseEntity@ player) override + { + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL -= "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + } + + void game_fall() + { + SetModel(MODEL_WORLD); + if (MODEL_WORLD == "misc/p_misc.mdl") + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 1; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + else + { + SetModelBody(0, 0); + } + } + + void OnDrop() override + { + game_fall(); + } + +} + +} diff --git a/scripts/angelscript/items/base_ranged.as b/scripts/angelscript/items/base_ranged.as new file mode 100644 index 00000000..6bdec579 --- /dev/null +++ b/scripts/angelscript/items/base_ranged.as @@ -0,0 +1,107 @@ +#pragma context server + +#include "items/base_weapon.as" + +namespace MS +{ + +class BaseRanged : CGameScript +{ + int NO_PARRY; + string RANGED_DMG_TYPE; + int RANGED_NOISE; + string UNDER_SKILLED; + string WEAPON_DMG_MULTI; + string WEAPON_PRIMARY_SKILL; + + BaseRanged() + { + NO_PARRY = 1; + RANGED_NOISE = 650; + RANGED_DMG_TYPE = "pierce"; + } + + void weapon_spawn() + { + if ((CUSTOM_ATTACK)) return; + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.keys = "+attack1"; + string reg.attack.hold_min&max = RANGED_HOLD_MINMAX; + string reg.attack.dmg.type = RANGED_DMG_TYPE; + string reg.attack.dmg.multi = RANGED_DMG_MULTI; + string reg.attack.range = RANGED_FORCE; + string reg.attack.energydrain = RANGED_ENERGY; + string reg.attack.stat = RANGED_STAT; + string reg.attack.COF = RANGED_ACCURACY; + string reg.attack.projectile = RANGED_PROJECTILE; + int reg.attack.priority = 0; + string reg.attack.delay.strike = RANGED_DMG_DELAY; + string reg.attack.delay.end = RANGED_ATK_DURATION; + string reg.attack.ofs.startpos = RANGED_STARTPOS; + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + string reg.attack.callback = "ranged"; + string reg.attack.noise = RANGED_NOISE; + WEAPON_PRIMARY_SKILL = reg.attack.stat; + WEAPON_DMG_MULTI = RANGED_DMG_MULTI; + RegisterAttack(); + } + + void game_dodamage() + { + } + + void OnDeploy() override + { + if (!(true)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + ScheduleDelayedEvent(0.1, "skill_check"); + } + + void skill_check() + { + string FIND_MELEE_STAT = "skill."; + FIND_MELEE_STAT += RANGED_STAT; + LogDebug("game_deploy GetEntityProperty(GetOwner(), "find_melee_stat") FIND_MELEE_STAT BASE_LEVEL_REQ"); + if (GetEntityProperty(GetOwner(), "find_melee_stat") < BASE_LEVEL_REQ) + { + SendColoredMessage(GetOwner(), "You lack the skill to properly wield this weapon!"); + string OUT_STR = "You lack the proficiency to wield this weapon. ( requires: "; + OUT_STR += RANGED_STAT; + OUT_STR += " proficiency "; + OUT_STR += BASE_LEVEL_REQ; + OUT_STR += " )"; + SendInfoMsg(GetOwner(), "Insufficient Skill " + OUT_STR); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 1); + SetAttackProp("ent_me", 1); + SetAttackProp("ent_me", 1); + WEAPON_DMG_MULTI = 0.1; + UNDER_SKILLED = 1; + LogDebug("skill_check Underskilled"); + bow_underskilled(); + } + else + { + if ((UNDER_SKILLED)) + { + LogDebug("skill_check ResetToNorm"); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 1); + SetAttackProp("ent_me", 1); + SetAttackProp("ent_me", 1); + WEAPON_DMG_MULTI = RANGED_DMG_MULTI; + UNDER_SKILLED = 0; + bow_underskilled_restore(); + } + UNDER_SKILLED = 0; + LogDebug("skill_check restore"); + } + } + +} + +} diff --git a/scripts/angelscript/items/base_scan_area.as b/scripts/angelscript/items/base_scan_area.as new file mode 100644 index 00000000..e3d1987d --- /dev/null +++ b/scripts/angelscript/items/base_scan_area.as @@ -0,0 +1,28 @@ +#pragma context server + +namespace MS +{ + +class BaseScanArea : CGameScript +{ + string BSCAN_CENTER; + string BSCAN_OWNER; + + BaseScanArea() + { + BSCAN_CENTER = /* TODO: $relpos */ $relpos(0, 0, 0); + } + + void game_dynamically_Created() + { + BSCAN_OWNER = param1; + ScheduleDelayedEvent(0.25, "bscan_start_scan"); + } + + void bscan_start_scan() + { + } + +} + +} diff --git a/scripts/angelscript/items/base_scroll.as b/scripts/angelscript/items/base_scroll.as new file mode 100644 index 00000000..8fff0776 --- /dev/null +++ b/scripts/angelscript/items/base_scroll.as @@ -0,0 +1,108 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class BaseScroll : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + string BASE_SUMMON_TEXT_FAILED; + int JUST_GOT; + int MODEL_BODY; + string SCROLL_TIME; + + BaseScroll() + { + BASE_SPELL_SCRIPT = "magic_hand_fire_dart"; + BASE_SUMMON_TEXT = "You conjure the Fire Dart spell."; + BASE_SUMMON_TEXT_FAILED = "You lack the arcane skills to control this scroll's magic."; + BASE_REQUIRED_SKILL = "skill.spellcasting.fire"; + BASE_REQUIRED_LEVEL = 0; + MODEL_BODY = 8; + } + + void game_precache() + { + Precache(SPELL_MAKER_SCRIPT); + } + + void OnSpawn() override + { + SetName("Dire Fart Tome"); + SetDescription("*eats all your apples* oooh~ brrrt!"); + SetValue(1); + SetWeight(1); + SetHand("both"); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "letter"); + scroll_spawn(); + ext_scroll_time(); + } + + void OnPickup(CBaseEntity@ player) override + { + JUST_GOT = 1; + } + + void game_attack1() + { + if (SCROLL_TIME > GetGameTime()) + { + } + else + { + if (GetEntityProperty(GetOwner(), "scriptvar") > GetGameTime()) + { + SendPlayerMessage(GetOwner(), "The magic needs a moment to recharge."); + } + else + { + if (GetEntityProperty(GetOwner(), "numitems") >= G_MAX_ITEMS) + { + SendColoredMessage(GetOwner(), "Cannot activate scrolls when inventory is full."); + } + else + { + ext_scroll_time(); + if (!(BASE_CAN_SUMMON)) + { + SendPlayerMessage(GetOwner(), BASE_SUMMON_TEXT_FAILED); + } + else + { + grant_spell(); + } + } + } + } + } + + void grant_spell() + { + string SPELL_SPAWNER_LOC = /* TODO: $relpos */ $relpos(0, 0, SPELL_MAKER_HEIGHT); + if (SPELL_MAKER_SCRIPT != "SPELL_MAKER_SCRIPT") + { + SpawnNPC(SPELL_MAKER_SCRIPT, SPELL_SPAWNER_LOC, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), BASE_SPELL_SCRIPT, GetEntityProperty(GetOwner(), "itemname"), SPELL_MAKER_HEIGHT, GetEntityIndex(GetOwner()) + } + } + + void clear_hands() + { + game_wear(); + DeleteEntity(GetOwner()); + } + + void ext_scroll_time() + { + SCROLL_TIME = GetGameTime(); + SCROLL_TIME += 2; + } + +} + +} diff --git a/scripts/angelscript/items/base_sheath.as b/scripts/angelscript/items/base_sheath.as new file mode 100644 index 00000000..0bd70ee3 --- /dev/null +++ b/scripts/angelscript/items/base_sheath.as @@ -0,0 +1,100 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class BaseSheath : CGameScript +{ + int IS_CONTAINER; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + BaseSheath() + { + IS_CONTAINER = 1; + MODEL_VIEW = "none"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_WEAR = "armor/packs/sheathes_wear.mdl"; + } + + void OnSpawn() override + { + SetWorldModel(MODEL_WORLD); + SetHand("any"); + sheath_spawn(); + // TODO: registercontainer + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + sheath_deploy(); + } + + void game_fall() + { + SetModel(MODEL_WORLD); + SetModelBody(0, 17); + PlayAnim("once", "package_floor_idle"); + sheath_fall(); + } + + void OnPickup(CBaseEntity@ player) override + { + SetModel(MODEL_HANDS); + int L_SUBMODEL = 16; + L_SUBMODEL -= "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + sheath_pickup(); + } + + void game_opencontainer() + { + sheath_opencontainer(); + } + + void game_wear() + { + SetModel(MODEL_WEAR); + SetModelBody(0, MODEL_BODY_OFS); + sheath_wear(); + } + + void game_show() + { + SetModel(MODEL_WEAR); + SetModelBody(0, MODEL_BODY_OFS); + } + + void game_container_addeditem() + { + set_body(); + } + + void game_container_removeditem() + { + set_body(); + } + + void set_body() + { + string temp = MODEL_BODY_OFS; + if ("game.item.container.items" > 0) + { + temp -= 1; + SetModelBody(0, temp); + } + else + { + SetModelBody(0, MODEL_BODY_OFS); + } + } + +} + +} diff --git a/scripts/angelscript/items/base_ticket.as b/scripts/angelscript/items/base_ticket.as new file mode 100644 index 00000000..dfdc8b02 --- /dev/null +++ b/scripts/angelscript/items/base_ticket.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class BaseTicket : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + BaseTicket() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void OnSpawn() override + { + ticket_spawn(); + SetDescription("The ticket reads: redeem at any Galat Storage Outlet for the associated item"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/base_tome.as b/scripts/angelscript/items/base_tome.as new file mode 100644 index 00000000..2adc7138 --- /dev/null +++ b/scripts/angelscript/items/base_tome.as @@ -0,0 +1,119 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class BaseTome : CGameScript +{ + string BASE_CAN_SUMMON; + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + string BASE_SUMMON_TEXT_FAILED; + int MODEL_BODY; + string MODEL_WORLD; + int READING; + + BaseTome() + { + BASE_SPELL_SCRIPT = "magic_hand_fire_dart"; + BASE_SUMMON_TEXT = "You learn to cast a weak fireball."; + BASE_SUMMON_TEXT_FAILED = "Your spell casting skills are not yet sufficient to memorize this tome."; + BASE_REQUIRED_SKILL = "skill.spellcasting.fire"; + BASE_REQUIRED_LEVEL = 0; + BASE_CAN_SUMMON = "func_base_can_wield"(); + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_BODY = 5; + READING = 0; + } + + void OnSpawn() override + { + SetName("Dire Fart Tome"); + SetDescription("im gonna learn you a oooh~ brrrt!"); + SetValue(1); + SetWeight(1); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "book"); + } + + void OnDeploy() override + { + SetModel(MODEL_WORLD); + string L_SUB_MODEL = (MODEL_BODY - 2); + L_SUB_MODEL += "game.item.hand_index"; + SetModelBody(0, L_SUB_MODEL); + if (MODEL_BODY == 5) + { + SendInfoMsg(GetOwner(), "TOMES Tomes can be used to memorize spells permanently."); + } + } + + void game_fall() + { + SetModel(MODEL_WORLD); + SetModelBody(0, MODEL_BODY); + PlayAnim("once", "oldbook_floor_idle"); + } + + void game_attack1() + { + if (!(READING == 0)) return; + READING = 1; + SendPlayerMessage(GetOwner(), "You study the tome carefully..."); + ScheduleDelayedEvent(3, "learn_spell"); + } + + void learn_spell() + { + if (READING == 1) + { + if ((BASE_CAN_SUMMON)) + { + // TODO: UNCONVERTED: if ( BASE_CAN_SUMMON ) learnspell BASE_SPELL_SCRIPT + } + else + { + game_learnspell_failed(); + } + } + READING = 0; + } + + void game_removefromowner() + { + if ((READING)) + { + READING = -1; + } + } + + void game_learnspell_success() + { + SendPlayerMessage(GetOwner(), BASE_SUMMON_TEXT); + } + + void game_learnspell_failed() + { + SendPlayerMessage(GetOwner(), BASE_SUMMON_TEXT_FAILED); + } + + void func_base_can_wield() + { + string OWNER_SKILL = GetEntityProperty(GetOwner(), "base_required_skill"); + if (OWNER_SKILL >= BASE_REQUIRED_LEVEL) + { + return; + } + else + { + return; + } + } + +} + +} diff --git a/scripts/angelscript/items/base_vampire.as b/scripts/angelscript/items/base_vampire.as new file mode 100644 index 00000000..6f83cab2 --- /dev/null +++ b/scripts/angelscript/items/base_vampire.as @@ -0,0 +1,34 @@ +#pragma context server + +namespace MS +{ + +class BaseVampire : CGameScript +{ + int CAN_VAMPIRE_TARGET; + + void try_vampire_target() + { + CAN_VAMPIRE_TARGET = 0; + check_can_vampire(param1, param2); + if (!(CAN_VAMPIRE_TARGET)) return; + HealEntity(param1, param3); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 5); + } + + void check_can_vampire() + { + string L_VAMPIRE = param1; + string L_DAMSEL = param2; + string L_RELATIONSHIP = GetRelationship(L_VAMPIRE); + if (!(GetEntityRace(L_DAMSEL) != "undead")) return; + if ((GetEntityProperty(L_DAMSEL, "scriptvar"))) return; + if (!(L_RELATIONSHIP != "ally")) return; + if (!(L_RELATIONSHIP != "neutral")) return; + if (!(L_RELATIONSHIP != "none")) return; + CAN_VAMPIRE_TARGET = 1; + } + +} + +} diff --git a/scripts/angelscript/items/base_varied_attacks.as b/scripts/angelscript/items/base_varied_attacks.as new file mode 100644 index 00000000..4a7d9d5f --- /dev/null +++ b/scripts/angelscript/items/base_varied_attacks.as @@ -0,0 +1,72 @@ +#pragma context server + +namespace MS +{ + +class BaseVariedAttacks : CGameScript +{ + int BV_EXTRA_ANIM_STAB; + int BV_EXTRA_ANIM_SWIPE; + int BV_REGULAR_ATTACK_ANIM; + string CUR_ATTACK_ANIM; + + BaseVariedAttacks() + { + BV_EXTRA_ANIM_STAB = 6; + BV_EXTRA_ANIM_SWIPE = 5; + BV_REGULAR_ATTACK_ANIM = 2; + } + + void check_attack_anim() + { + if ((BITEM_UNDERSKILLED)) return; + if ((IsKeyDown(GetOwner(), "moveleft"))) + { + int L_SWIPE = 1; + } + if ((IsKeyDown(GetOwner(), "moveright"))) + { + int L_SWIPE = 1; + } + if ((IsKeyDown(GetOwner(), "forward"))) + { + int L_STAB = 1; + } + if ((IsKeyDown(GetOwner(), "back"))) + { + int L_STAB = 1; + } + if ((L_STAB)) + { + CUR_ATTACK_ANIM = BV_EXTRA_ANIM_STAB; + string CUR_DMG = MELEE_DMG; + string CUR_ACC = MELEE_ACCURACY; + CUR_DMG *= 1.5; + CUR_ACC *= 0.75; + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((L_SWIPE)) + { + CUR_ATTACK_ANIM = BV_EXTRA_ANIM_SWIPE; + string CUR_DMG = MELEE_DMG; + string CUR_ACC = MELEE_ACCURACY; + CUR_DMG *= 0.75; + CUR_ACC *= 1.5; + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + CUR_ATTACK_ANIM = BV_REGULAR_ATTACK_ANIM; + string CUR_DMG = MELEE_DMG; + string CUR_ACC = MELEE_ACCURACY; + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + } + +} + +} diff --git a/scripts/angelscript/items/base_weapon.as b/scripts/angelscript/items/base_weapon.as new file mode 100644 index 00000000..5714d247 --- /dev/null +++ b/scripts/angelscript/items/base_weapon.as @@ -0,0 +1,96 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class BaseWeapon : CGameScript +{ + int IS_WEAPON; + string PLAYERANIM_AIM; + + BaseWeapon() + { + PLAYERANIM_AIM = "blunt"; + IS_WEAPON = 1; + } + + void item_spawn() + { + SetAnimExt(PLAYERANIM_AIM); + SetHand("right"); + weapon_spawn(); + } + + void game_sheath() + { + SetModelBody(0, 2); + weapon_sheath(); + } + + void OnParry(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), "weapons/cbar_miss1.wav"); + weapon_parry(); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 1; + L_SUBMODEL -= "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + if (!(BASEWEAPON_NO_HAND_IDLE)) + { + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_idle"; + if (ANIM_PREFIX == "ANIM_PREFIX") + { + string L_ANIM = "idle"; + } + if (ANIM_PREFIX == "none") + { + string L_ANIM = "idle"; + } + PlayAnim("once", L_ANIM); + } + weapon_deploy(); + if (!(true)) return; + if (!(MODEL_VIEW_IDX > 0)) return; + ScheduleDelayedEvent(0.01, "bw_setup_model"); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL++; + if ((NO_WORLD_MODEL)) + { + L_SUBMODEL -= 1; + } + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + SetModelBody(0, L_SUBMODEL); + if (ANIM_PREFIX == "ANIM_PREFIX") + { + string L_ANIM = "idle"; + } + if (ANIM_PREFIX == "none") + { + string L_ANIM = "idle"; + } + PlayAnim("once", L_ANIM); + weapon_fall(); + } + + void bw_setup_model() + { + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") MODEL_VIEW_IDX + } + +} + +} diff --git a/scripts/angelscript/items/base_weapon_new.as b/scripts/angelscript/items/base_weapon_new.as new file mode 100644 index 00000000..01dcd656 --- /dev/null +++ b/scripts/angelscript/items/base_weapon_new.as @@ -0,0 +1,384 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class BaseWeaponNew : CGameScript +{ + int ATK1_ACCURACY; + int ATK1_AMMODRAIN; + int ATK1_ANG; + string ATK1_CALLBACK; + int ATK1_COF; + float ATK1_DELAY_STRIKE; + int ATK1_DMG; + int ATK1_DMG_MULTI; + int ATK1_DMG_RANGE; + string ATK1_DMG_TYPE; + float ATK1_DURATION; + int ATK1_IS_PROJECTILE; + string ATK1_KEYS; + int ATK1_MPDRAIN; + int ATK1_NOISE; + int ATK1_NO_AUTOAIM; + int ATK1_OFS; + string ATK1_PANIM; + string ATK1_PROJECTILE; + int ATK1_RANGE; + string ATK1_SKILL; + string ATK1_SKILL_LEVEL; + int ATK1_STAMINA; + string ATK1_TYPE; + int ATK1_VANIM; + string ATK2_ACCURACY; + int ATK2_ADD_SKILL_REQ; + int ATK2_AMMODRAIN; + int ATK2_ANG; + string ATK2_CALLBACK; + int ATK2_COF; + string ATK2_DELAY_STRIKE; + string ATK2_DMG; + int ATK2_DMG_MULTI; + string ATK2_DMG_RANGE; + string ATK2_DMG_TYPE; + string ATK2_DURATION; + int ATK2_IS_PROJECTILE; + string ATK2_KEYS; + int ATK2_MPDRAIN; + string ATK2_NOISE; + int ATK2_NO_AUTOAIM; + int ATK2_OFS; + string ATK2_PANIM; + string ATK2_PROJECTILE; + string ATK2_RANGE; + string ATK2_SKILL; + string ATK2_SKILL_LEVEL; + string ATK2_STAMINA; + string ATK2_TYPE; + int ATK2_VANIM; + string BITEM_UNDERSKILLED; + string BITEM_WAS_UNDERSKILLED; + string BWEAPON_CHARGE_PERCENT; + float BWEAPON_DBL_CHARGE_ADJ; + string GAME_PVP; + int PITCH_ATK1; + int PITCH_ATK2; + string SOUND_ATK1; + string SOUND_ATK2; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string WEAPON_PRIMARY_SKILL; + + BaseWeaponNew() + { + BWEAPON_DBL_CHARGE_ADJ = 2.0; + ATK1_TYPE = "strike-land"; + ATK1_KEYS = "+attack1"; + ATK1_RANGE = 90; + ATK1_DMG = 120; + ATK1_DMG_RANGE = 10; + ATK1_DMG_TYPE = "blunt"; + ATK1_STAMINA = 1; + ATK1_SKILL = "polearms"; + ATK1_ACCURACY = 85; + ATK1_DELAY_STRIKE = 0.6; + ATK1_DURATION = 1.1; + ATK1_OFS = 0; + ATK1_ANG = 0; + ATK1_CALLBACK = "atk1"; + ATK1_NOISE = 650; + ATK1_SKILL_LEVEL = BASE_LEVEL_REQ; + ATK1_MPDRAIN = 0; + ATK1_DMG_MULTI = 0; + ATK1_NO_AUTOAIM = 0; + ATK1_PANIM = "pole_swing"; + ATK1_VANIM = 4; + SOUND_ATK1 = "weapons/cbar_miss1.wav"; + PITCH_ATK1 = 100; + ATK1_IS_PROJECTILE = 0; + ATK1_PROJECTILE = "arrow"; + ATK1_AMMODRAIN = 1; + ATK1_COF = 0; + ATK2_TYPE = ATK1_TYPE; + ATK2_KEYS = "-attack1"; + ATK2_RANGE = ATK1_RANGE; + ATK2_DMG = ATK1_DMG; + ATK2_DMG_RANGE = ATK1_DMG_RANGE; + ATK2_DMG_TYPE = AT1_DMG_TYPE; + ATK2_STAMINA = ATK1_STAMINA; + ATK2_SKILL = ATK1_SKILL; + ATK2_ACCURACY = ATK1_ACCURACY; + ATK2_DELAY_STRIKE = ATK1_DELAY_STRIKE; + ATK2_DURATION = ATK1_DURATION; + ATK2_OFS = 0; + ATK2_ANG = 0; + ATK2_CALLBACK = "atk2"; + ATK2_NOISE = ATK1_NOISE; + ATK2_SKILL_LEVEL = BASE_LEVEL_REQ; + ATK2_ADD_SKILL_REQ = 2; + ATK2_MPDRAIN = 0; + ATK2_DMG_MULTI = 2; + ATK2_NO_AUTOAIM = 0; + ATK2_PANIM = "pole_swing"; + ATK2_VANIM = 5; + ATK2_IS_PROJECTILE = 0; + ATK2_PROJECTILE = "arrow"; + ATK2_AMMODRAIN = 1; + ATK2_COF = 0; + SOUND_ATK2 = "zombie/claw_miss2.wav"; + PITCH_ATK2 = 100; + SOUND_HITWALL1 = "weapons/bullet_hit1.wav"; + SOUND_HITWALL2 = "weapons/bullet_hit2.wav"; + } + + void OnSpawn() override + { + SetName(BWEAPON_NAME); + SetDescription("BWEAPON_DESC"); + SetWeight(BWEAPON_WEIGHT); + SetSize(1); + SetValue(BWEAPON_VALUE); + SetHUDSprite("trade", BWEAPON_INV_SPRITE_IDX); + SetModel(PMODEL_FILE); + SetWorldModel(PMODEL_FILE); + SetHand(BWEAPON_HANDS); + bitem_register_attacks(); + } + + void OnDeploy() override + { + bitem_draw(); + if (!(true)) return; + GAME_PVP = "game.pvp"; + ScheduleDelayedEvent(0.01, "bitem_check_skill"); + ScheduleDelayedEvent(0.01, "bitem_setup_model"); + } + + void game_show() + { + bweapon_show(); + } + + void bweapon_show() + { + SetViewModel(VMODEL_FILE); + SetModel(PMODEL_FILE); + if ("game.item.hand_index" == 0) + { + SetModelBody(0, PMODEL_IDX_HAND_LEFT); + } + else + { + SetModelBody(0, PMODEL_IDX_HAND_RIGHT); + } + } + + void game_switchhands() + { + if ((BWEAPON_CUSTOM_SWITCHHANDS)) return; + PlayViewAnim(VANIM_IDLE); + } + + void OnPickup(CBaseEntity@ player) override + { + bitem_draw(); + } + + void game_fall() + { + SetModelBody(0, PMODEL_IDX_FLOOR); + PlayAnim("once", WANIM_FLOOR); + } + + void OnDrop() override + { + string RL_HAND = "game.item.hand_index"; + CallExternal(GetOwner(), "ext_set_hand_id", RL_HAND, 0); + } + + void bitem_draw() + { + if ((BWEAPON_CUSTOM_DRAW)) return; + PlayViewAnim("break"); + PlayAnim("once", "break"); + bweapon_show(); + SetAnimExt(PANIM_EXT); + if (!(false)) return; + PlayViewAnim(VANIM_DRAW); + PlayAnim("once", WANIM_HAND); + } + + void bitem_setup_model() + { + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") VMODEL_IDX + ScheduleDelayedEvent(1.0, "bitem_setup_model2"); + } + + void bitem_setup_model2() + { + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + LogDebug("bi_setup_model2"); + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") VMODEL_IDX + } + + void bitem_register_attacks() + { + if (!(BITEM_CUSTOM_ATK1_REGISTER)) + { + int reg.attack.priority = 0; + string reg.attack.type = ATK1_TYPE; + string reg.attack.keys = ATK1_KEYS; + string reg.attack.range = ATK1_RANGE; + string reg.attack.dmg = ATK1_DMG; + string reg.attack.dmg.range = ATK1_DMG_RANGE; + string reg.attack.dmg.type = ATK1_DMG_TYPE; + string reg.attack.energydrain = ATK1_STAMINA; + string reg.attack.stat = ATK1_SKILL; + string reg.attack.hitchance = ATK1_ACCURACY; + string reg.attack.delay.strike = ATK1_DELAY_STRIKE; + string reg.attack.delay.end = ATK1_DURATION; + string reg.attack.ofs.startpos = ATK1_OFS; + string reg.attack.ofs.aimang = ATK1_ANG; + string reg.attack.callback = ATK1_CALLBACK; + string reg.attack.noise = ATK1_NOISE; + string reg.attack.mpdrain = ATK1_MPDRAIN; + string reg.attack.dmg.multi = ATK1_DMG_MULTI; + string reg.attack.noautoaim = ATK1_NO_AUTOAIM; + string reg.attack.reqskill = ATK1_SKILL_LEVEL; + WEAPON_PRIMARY_SKILL = reg.attack.stat; + if ((ATK1_IS_PROJECTILE)) + { + string reg.attack.ammodrain = ATK1_AMMODRAIN; + string reg.attack.projectile = ATK1_PROJECTILE; + string reg.attack.COF = ATK1_COF; + } + RegisterAttack(); + } + if (!(BITEM_CUSTOM_ATK2_REGISTER)) + { + int reg.attack.priority = 1; + int reg.attack.chargeamt = 100; + string reg.attack.type = ATK2_TYPE; + string reg.attack.keys = ATK2_KEYS; + string reg.attack.range = ATK2_RANGE; + string reg.attack.dmg = ATK2_DMG; + string reg.attack.dmg.range = ATK2_DMG_RANGE; + string reg.attack.dmg.type = ATK2_DMG_TYPE; + string reg.attack.energydrain = ATK2_STAMINA; + string reg.attack.stat = ATK2_SKILL; + string reg.attack.hitchance = ATK2_ACCURACY; + string reg.attack.delay.strike = ATK2_DELAY_STRIKE; + string reg.attack.delay.end = ATK2_DURATION; + string reg.attack.ofs.startpos = ATK2_OFS; + string reg.attack.ofs.aimang = ATK2_ANG; + string reg.attack.callback = ATK2_CALLBACK; + string reg.attack.noise = ATK2_NOISE; + string reg.attack.mpdrain = ATK2_MPDRAIN; + string reg.attack.dmg.multi = ATK2_DMG_MULTI; + LogDebug("GetEntityName(GetOwner()) multi ATK2_DMG_MULTI"); + if (ATK2_DMG_MULTI != 0) + { + reg.attack.dmg *= ATK2_DMG_MULTI; + } + string reg.attack.noautoaim = ATK2_NO_AUTOAIM; + string reg.attack.reqskill = ATK2_SKILL_LEVEL; + reg.attack.reqskill += ATK2_ADD_SKILL_REQ; + if ((ATK2_IS_PROJECTILE)) + { + string reg.attack.ammodrain = ATK2_AMMODRAIN; + string reg.attack.projectile = ATK2_PROJECTILE; + string reg.attack.COF = ATK2_COF; + } + RegisterAttack(); + } + } + + void game_attack_cancel() + { + PlayOwnerAnim("once", PANIM_IDLE); + } + + void game_hitworld() + { + if ((BWEAPON_CUSTOM_HITWALL)) return; + // PlayRandomSound from: SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void atk1_start() + { + if ((BITEM_CUSTOM_ATK1_EVENT)) return; + PlayViewAnim(ATK1_VANIM); + PlayOwnerAnim("critical", ATK1_PANIM); + EmitSound(GetOwner(), 1, SOUND_ATK1, 10); + } + + void atk2_start() + { + if ((BITEM_CUSTOM_ATK2_EVENT)) return; + PlayViewAnim(ATK2_VANIM); + PlayOwnerAnim("critical", ATK2_PANIM); + EmitSound(GetOwner(), 1, SOUND_ATK2, 10); + } + + void bitem_check_skill() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + string FIND_MELEE_STAT = "skill."; + FIND_MELEE_STAT += ATK1_SKILL; + string L_OWNER_SKILL = GetEntityProperty(GetOwner(), "find_melee_stat"); + LogDebug("bitem_check_skill FIND_MELEE_STAT L_OWNER_SKILL"); + if (L_OWNER_SKILL < BASE_LEVEL_REQ) + { + SendColoredMessage(GetOwner(), "You lack the skill to properly wield this weapon!"); + string OUT_STR = "You lack the proficiency to wield this weapon. ( requires: "; + OUT_STR += ATK1_SKILL; + OUT_STR += " proficiency "; + OUT_STR += BASE_LEVEL_REQ; + OUT_STR += " )"; + SendInfoMsg(GetOwner(), "Insufficient Skill " + OUT_STR); + BITEM_UNDERSKILLED = 1; + BITEM_WAS_UNDERSKILLED = 1; + SetAttackProp("ent_me", 0); + } + else + { + BITEM_UNDERSKILLED = 0; + if ((BITEM_WAS_UNDERSKILLED)) + { + } + SetAttackProp("ent_me", 0); + BITEM_WAS_UNDERSKILLED = 0; + } + } + + void game_setchargepercent() + { + BWEAPON_CHARGE_PERCENT = param1; + } + + void atk1_damaged_other() + { + if (BWEAPON_CHARGE_PERCENT > 0.25) + { + BWEAPON_CHARGE_PERCENT -= 0.25; + string L_CHARGE_RATIO = /* TODO: $ratio */ $ratio(BWEAPON_CHARGE_PERCENT, 1.25, BWEAPON_DBL_CHARGE_ADJ); + string NEW_DMG = param2; + NEW_DMG *= L_CHARGE_RATIO; + SetDamage("dmg"); + return; + LogDebug("Adjusted dmg x L_CHARGE_RATIO"); + BWEAPON_CHARGE_PERCENT = 0; + string CUR_DRAIN = MELEE_ENERGY; + CUR_DRAIN *= BWEAPON_CHARGE_PERCENT; + DrainStamina(GetOwner()); + } + } + +} + +} diff --git a/scripts/angelscript/items/blunt_af.as b/scripts/angelscript/items/blunt_af.as new file mode 100644 index 00000000..f265a373 --- /dev/null +++ b/scripts/angelscript/items/blunt_af.as @@ -0,0 +1,131 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntAf : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE2; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int AOE_STUN_REQ; + int BASE_LEVEL_REQ; + float DEMON_ATK_DURATION; + float DEMON_DMG_DELAY; + float FREQ_SKULL; + int MANA_SKULL; + int MANA_STUN; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_VIEW; + string MODEL_WORLD; + string NEXT_SKULL; + int SKULL_REQ; + + BluntAf() + { + MANA_SKULL = 50; + MANA_STUN = 20; + FREQ_SKULL = 5.0; + ANIM_LIFT1 = 5; + ANIM_IDLE1 = 0; + ANIM_IDLE2 = 6; + ANIM_IDLE_TOTAL = 2; + ANIM_ATTACK1 = 1; + ANIM_ATTACK2 = 1; + BASE_LEVEL_REQ = 20; + AOE_STUN_REQ = 25; + SKULL_REQ = 20; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 10; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.5; + MELEE_ATK_DURATION = 1.1; + DEMON_DMG_DELAY = 0.25; + DEMON_ATK_DURATION = 0.7; + MELEE_ENERGY = 2; + MELEE_DMG = 400; + MELEE_DMG_RANGE = 40; + MELEE_ACCURACY = 0.75; + MELEE_PARRY_AUGMENT = 0.2; + MELEE_DMG_TYPE = "blunt"; + } + + void weapon_spawn() + { + SetName("Mace of Affliction"); + SetDescription("A skull encrusted club forged by goblin shamans"); + SetWeight(80); + SetSize(10); + SetValue(3000); + SetHUDSprite("hand", "hammer"); + SetHUDSprite("trade", "maul"); + } + + void bash() + { + if (!("game.item.attacking")) return; + PlayViewAnim(MELEE_VIEWANIM_ATK); + PlayOwnerAnim("once", PLAYERANIM_SWING); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_SHOUT1') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void special_02_strike() + { + if (GetEntityMP(GetOwner()) >= MANA_STUN) + { + SendColoredMessage(GetOwner(), "Stun Burst: Insufficient Mana"); + } + if (!(GetEntityMP(GetOwner()) >= MANA_STUN)) return; + GiveMP(GetOwner()); + string SPAWN_POINT = GetEntityOrigin(GetOwner()); + string MY_ANGLES = GetEntityAngles(GetOwner()); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 64, 0)); + string DMG_STUN = GetSkillLevel(GetOwner(), "bluntarms"); + DMG_STUN *= 2; + SpawnNPC(SPAWN_POINT, "monsters/summon/stun_burst", ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128, 1, DMG_STUN, "bluntarms" + } + + void game_+attack2() + { + if (!(true)) return; + if (!(CanAttack(GetOwner()))) return; + if (!(GetGameTime() > NEXT_SKULL)) return; + NEXT_SKULL = GetGameTime(); + NEXT_SKULL += FREQ_SKULL; + if (GetEntityMP(GetOwner()) < MANA_SKULL) + { + SendColoredMessage(GetOwner(), "Venom Skull: Insufficient Mana"); + } + if (!(GetEntityMP(GetOwner()) >= MANA_SKULL)) return; + GiveMP(GetOwner()); + string SPAWN_POINT = GetEntityOrigin(GetOwner()); + string MY_ANGLES = GetEntityAngles(GetOwner()); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 64, 0)); + string DMG_STUN = GetSkillLevel(GetOwner(), "bluntarms"); + DMG_STUN *= 2; + } + +} + +} diff --git a/scripts/angelscript/items/blunt_base_onehanded.as b/scripts/angelscript/items/blunt_base_onehanded.as new file mode 100644 index 00000000..dab0db6f --- /dev/null +++ b/scripts/angelscript/items/blunt_base_onehanded.as @@ -0,0 +1,136 @@ +#pragma context server + +#include "items/base_melee.as" + +namespace MS +{ + +class BluntBaseOnehanded : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + string EFFECT_SCRIPT; + string MELEE_DMG_TYPE; + float MELEE_PARRY_AUGMENT; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + string MODEL_HANDS; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SWIPE; + string SPECIAL_02_CALLBACK; + float SPECIAL_02_DELAY_END; + float SPECIAL_02_DELAY_STRIKE; + string SPECIAL_02_RANGE; + + BluntBaseOnehanded() + { + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_STAT = "bluntarms"; + MELEE_DMG_TYPE = "blunt"; + MELEE_SOUND = SOUND_SWIPE; + SOUND_SWIPE = "weapons/swingsmall.wav"; + PLAYERANIM_AIM = "blunt"; + PLAYERANIM_SWING = "swing_blunt"; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.0; + ANIM_PREFIX = "rustedaxe"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + MODEL_HANDS = MODEL_WORLD; + EFFECT_SCRIPT = "effects/debuff_stun"; + SPECIAL_02_CALLBACK = "special_02"; + SPECIAL_02_DELAY_STRIKE = 1.5; + SPECIAL_02_DELAY_END = 2.0; + SPECIAL_02_RANGE = MELEE_RANGE; + SOUND_HITWALL1 = "weapons/xbow_hitbod1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hitbod2.wav"; + } + + void weapon_spawn() + { + SetHand("right"); + if ((CUSTOM_REGISTER_BLUNT)) return; + if (SECONDARY_DMG == "SECONDARY_DMG") + { + string SECONDARY_DMG = MELEE_DMG; + } + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = SPECIAL_02_RANGE; + string reg.attack.dmg = SECONDARY_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + reg.attack.energydrain *= 2; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + reg.attack.hitchance += 0.1; + int reg.attack.priority = 2; + string reg.attack.delay.strike = SPECIAL_02_DELAY_STRIKE; + string reg.attack.delay.end = SPECIAL_02_DELAY_END; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = SPECIAL_02_CALLBACK; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 4; + if (SPECIAL_02_MP != "SPECIAL_02_MP") + { + string reg.attack.mpdrain = SPECIAL_02_MP; + } + if (BASE_LEVEL_REQ > reg.attack.reqskill) + { + reg.attack.reqskill += BASE_LEVEL_REQ; + } + RegisterAttack(); + } + + void special_02_start() + { + ScheduleDelayedEvent(0.9, "bash"); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_SWORDREADY') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void bash() + { + if (!("game.item.attacking")) return; + PlayViewAnim(MELEE_VIEWANIM_ATK); + PlayOwnerAnim("once", PLAYERANIM_SWING); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_SHOUT1') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void special_02_damaged_other() + { + if ((BLUNT_NO_STUN)) return; + string maxstun = GetSkillLevel(GetOwner(), "bluntarms.prof"); + maxstun += 1; + maxstun = max(1, min(45, maxstun)); + float stuntime = Random(1, maxstun); + ApplyEffect(param1, EFFECT_SCRIPT, stuntime, GetEntityIndex(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_base_twohanded.as b/scripts/angelscript/items/blunt_base_twohanded.as new file mode 100644 index 00000000..3e1853d7 --- /dev/null +++ b/scripts/angelscript/items/blunt_base_twohanded.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntBaseTwohanded : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + BluntBaseTwohanded() + { + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + PLAYERANIM_AIM = "bluntdouble"; + PLAYERANIM_SWING = "swing_bluntdouble"; + SOUND_HITWALL1 = "weapons/xbow_hitbod1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hitbod2.wav"; + } + + void weapon_spawn() + { + SetHand("both"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_bf.as b/scripts/angelscript/items/blunt_bf.as new file mode 100644 index 00000000..a03b6593 --- /dev/null +++ b/scripts/angelscript/items/blunt_bf.as @@ -0,0 +1,140 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntBf : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + string BURST_DMG; + string BURST_POS; + string BURST_STUN_DURATION; + float DEMON_ATK_DURATION; + float DEMON_DMG_DELAY; + string DOT_FIRE; + string GAME_PVP; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int STUN_BURST_MP; + + BluntBf() + { + BASE_LEVEL_REQ = 35; + STUN_BURST_MP = 40; + MELEE_RANGE = 90; + MELEE_DMG_DELAY = 0.5; + MELEE_ATK_DURATION = 1.1; + DEMON_DMG_DELAY = 0.25; + DEMON_ATK_DURATION = 0.7; + MELEE_ENERGY = 2; + MELEE_DMG = 600; + MELEE_DMG_RANGE = 40; + MELEE_ACCURACY = 0.8; + MELEE_PARRY_AUGMENT = 0.2; + MELEE_DMG_TYPE = "fire"; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 12; + MODEL_WORLD = "weapons/p_weapons4.mdl"; + MODEL_BODY_OFS = 34; + ANIM_PREFIX = "standard"; + } + + void weapon_spawn() + { + SetName("Fire Breaker"); + SetDescription("An Earth Breaker imbued with elemental fire"); + SetWeight(80); + SetSize(10); + SetValue(7000); + SetHUDSprite("hand", "hammer"); + SetHUDSprite("trade", 194); + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + } + + void melee_damaged_other() + { + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(GetOwner()) == "enemy")) return; + string L_DOT = GetSkillLevel(GetOwner(), "spellcasting.fire"); + L_DOT *= 0.5; + ApplyEffect(param1, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), L_DOT, "bluntarms"); + } + + void special_02_strike() + { + string ATTACK_END_POS = param2; + if (GetEntityMP(GetOwner()) < STUN_BURST_MP) + { + SendColoredMessage(GetOwner(), "Fire Breaker: Insufficient Mana for Fire Burst"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ATTACK_END_POS = "z"; + GiveMP(GetOwner()); + ClientEvent("new", "all", "effects/sfx_fire_burst", ATTACK_END_POS, 250, 1, Vector3(255, 128, 0)); + BURST_POS = ATTACK_END_POS; + BURST_POS += 32; + if (GetSkillLevel(GetOwner(), "spellcasting.fire") > 20) + { + CallExternal(GetOwner(), "ext_fissure"); + } + BURST_STUN_DURATION = GetSkillLevel(GetOwner(), "bluntarms"); + BURST_DMG = BURST_STUN_DURATION; + BURST_STUN_DURATION *= 0.5; + BURST_DMG *= 4.0; + LogDebug("special_02_strike stundur BURST_STUN_DURATION"); + DOT_FIRE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + XDoDamage(BURST_POS, 128, BURST_DMG, 0, GetOwner(), GetOwner(), "spellcasting.fire", "fire_effect", "dmgevent:*burst"); + } + + void burst_dodamage() + { + string CUR_TARG = param2; + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARG, "effects/debuff_stun", BURST_STUN_DURATION, GetEntityIndex(GetOwner())); + if (DOT_FIRE >= 10) + { + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE, "bluntarms"); + } + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = BURST_POS; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 800, 110))); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_bt.as b/scripts/angelscript/items/blunt_bt.as new file mode 100644 index 00000000..f0080fdb --- /dev/null +++ b/scripts/angelscript/items/blunt_bt.as @@ -0,0 +1,168 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntBt : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + string BURST_DMG; + string BURST_POS; + string BURST_STUN_DURATION; + string BURST_TARGS; + string CL_BEAM_IDX; + float DEMON_ATK_DURATION; + float DEMON_DMG_DELAY; + string DOT_DMG; + string GAME_PVP; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int STUN_BURST_MP; + + BluntBt() + { + BASE_LEVEL_REQ = 35; + STUN_BURST_MP = 40; + MELEE_RANGE = 90; + MELEE_DMG_DELAY = 0.5; + MELEE_ATK_DURATION = 1.1; + DEMON_DMG_DELAY = 0.25; + DEMON_ATK_DURATION = 0.7; + MELEE_ENERGY = 2; + MELEE_DMG = 600; + MELEE_DMG_RANGE = 40; + MELEE_ACCURACY = 0.8; + MELEE_PARRY_AUGMENT = 0.2; + MELEE_DMG_TYPE = "lightning"; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 13; + MODEL_WORLD = "weapons/p_weapons4.mdl"; + MODEL_BODY_OFS = 37; + ANIM_PREFIX = "standard"; + } + + void weapon_spawn() + { + SetName("Thunder Breaker"); + SetDescription("An Earth Breaker imbued with elemental lightning"); + SetWeight(80); + SetSize(10); + SetValue(7000); + SetHUDSprite("hand", "hammer"); + SetHUDSprite("trade", 192); + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + } + + void special_02_strike() + { + string ATTACK_END_POS = param2; + if (GetEntityMP(GetOwner()) < STUN_BURST_MP) + { + SendColoredMessage(GetOwner(), "Thunder Breaker: Insufficient Mana for Shock Burst"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ATTACK_END_POS = "z"; + GiveMP(GetOwner()); + ClientEvent("new", "all", "effects/sfx_shock_burst", ATTACK_END_POS, 250, 1, Vector3(255, 255, 0)); + BURST_POS = ATTACK_END_POS; + BURST_POS += 32; + DOT_DMG = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + if (DOT_DMG > 20) + { + ScheduleDelayedEvent(0.1, "chain_beam_start"); + } + BURST_STUN_DURATION = GetSkillLevel(GetOwner(), "bluntarms"); + BURST_DMG = BURST_STUN_DURATION; + BURST_STUN_DURATION *= 0.5; + BURST_DMG *= 4.0; + BURST_TARGS = "none"; + XDoDamage(BURST_POS, 128, BURST_DMG, 0, GetOwner(), GetOwner(), "spellcasting.lightning", "lightning_effect", "dmgevent:*burst"); + if (GetTokenCount(BURST_TARGS, ";") > 1) + { + RemoveToken(BURST_TARGS, 0, ";"); + } + } + + void burst_dodamage() + { + string CUR_TARG = param2; + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (BURST_TARGS.length() > 0) BURST_TARGS += ";"; + BURST_TARGS += CUR_TARG; + ApplyEffect(CUR_TARG, "effects/debuff_stun", BURST_STUN_DURATION, GetEntityIndex(GetOwner())); + if (DOT_DMG >= 10) + { + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = BURST_POS; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 800, 110))); + } + + void chain_beam_start() + { + if (BURST_TARGS != "none") + { + string FIRST_TARGET = GetToken(BURST_TARGS, 0, ";"); + string FIRST_TARGET = GetEntityIndex(FIRST_TARGET); + } + else + { + string START_YAW = GetEntityProperty(GetOwner(), "viewangles"); + string START_YAW = /* TODO: $vec.yaw */ $vec.yaw(START_YAW); + string FIRST_TARGET = GetEntityOrigin(GetOwner()); + FIRST_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, START_YAW, 0), Vector3(0, 128, 0)); + FIRST_TARGET = "z"; + FIRST_TARGET += "z"; + } + SpawnNPC("effects/sfx_jump_beams", "(0,0,0)", ScriptMode::Legacy); // params: FIRST_TARGET, GetEntityIndex(GetOwner()) + CL_BEAM_IDX = "game.script.last_sent_id"; + } + + void melee_damaged_other() + { + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(GetOwner()) == "enemy")) return; + string L_DOT = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + L_DOT *= 0.25; + ApplyEffect(param1, "effects/dot_lightning", 10.0, GetEntityIndex(GetOwner()), L_DOT); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_calrianmace.as b/scripts/angelscript/items/blunt_calrianmace.as new file mode 100644 index 00000000..c8b79a00 --- /dev/null +++ b/scripts/angelscript/items/blunt_calrianmace.as @@ -0,0 +1,65 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntCalrianmace : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string SOUND_SWIPE; + + BluntCalrianmace() + { + BASE_LEVEL_REQ = 15; + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 3; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 56; + ANIM_PREFIX = "warhammer"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 8; + MELEE_DMG = 230; + MELEE_DMG_RANGE = 140; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.0; + } + + void weapon_spawn() + { + SetName("Calrian's Mace"); + SetDescription("A one-handed mace previously used by Lord Calrian"); + SetWeight(35); + SetSize(6); + SetValue(1000); + SetHUDSprite("hand", 98); + SetHUDSprite("trade", 98); + Precache(MODEL_VIEW); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_club.as b/scripts/angelscript/items/blunt_club.as new file mode 100644 index 00000000..1c074c28 --- /dev/null +++ b/scripts/angelscript/items/blunt_club.as @@ -0,0 +1,80 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntClub : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_ATTACK5; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string SOUND_SWIPE; + + BluntClub() + { + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_ATTACK4 = 5; + ANIM_ATTACK5 = 6; + ANIM_SHEATH = 1; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 2; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 59; + ANIM_PREFIX = "club"; + MELEE_RANGE = 90; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 1; + MELEE_DMG = 100; + MELEE_DMG_RANGE = 60; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.5; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.0; + } + + void weapon_spawn() + { + SetName("Wooden Club"); + SetDescription("A big wooden club"); + SetWeight(10); + SetSize(5); + SetValue(10); + SetHUDSprite("hand", "club"); + SetHUDSprite("trade", 73); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_darkmaul.as b/scripts/angelscript/items/blunt_darkmaul.as new file mode 100644 index 00000000..6e430bdb --- /dev/null +++ b/scripts/angelscript/items/blunt_darkmaul.as @@ -0,0 +1,92 @@ +#pragma context server + +#include "items/blunt_maul.as" + +namespace MS +{ + +class BluntDarkmaul : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_SWING; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + BluntDarkmaul() + { + BASE_LEVEL_REQ = 15; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 2; + ANIM_SHEATH = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + PLAYERANIM_SWING = "swing_bluntdouble"; + MELEE_DMG_TYPE = "dark"; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_BODY_OFS = 62; + ANIM_PREFIX = "darkmaul"; + Precache(MODEL_VIEW); + Precache(MODEL_WORLD); + Precache(MODEL_HANDS); + MELEE_DMG = 240; + MELEE_DMG_RANGE = 150; + MELEE_ENERGY = 5; + MELEE_ATK_DURATION = 1.5; + MELEE_ACCURACY = 0.7; + SOUND_HITWALL1 = "debris/metal6.wav"; + SOUND_HITWALL2 = "ambience/steamburst1.wav"; + } + + void weapon_spawn() + { + SetName("Dark Maul"); + SetDescription("This maul of scorched metal emits an evil aura"); + SetWeight(150); + SetSize(15); + SetValue(1500); + SetHUDSprite("trade", 100); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURN_DAMAGE /= 2; + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "bluntarms"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_db.as b/scripts/angelscript/items/blunt_db.as new file mode 100644 index 00000000..2f566399 --- /dev/null +++ b/scripts/angelscript/items/blunt_db.as @@ -0,0 +1,154 @@ +#pragma context server + +#include "items/blunt_mithral.as" + +namespace MS +{ + +class BluntDb : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float DEMON_ATK_DURATION; + int DEMON_CHARGES; + int DEMON_DMG; + float DEMON_DMG_DELAY; + float DEMON_DURATION; + int FIRE_WAVE_MP; + string FIRE_WAVE_START_POS; + string FIRE_WAVE_TARGS; + string FIRE_WAVE_YAW; + string GAME_PVP; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int M_ATTACK; + + BluntDb() + { + BASE_LEVEL_REQ = 30; + FIRE_WAVE_MP = 40; + DEMON_CHARGES = 6; + DEMON_DURATION = 40.0; + MELEE_RANGE = 90; + MELEE_DMG_DELAY = 0.5; + MELEE_ATK_DURATION = 1.1; + DEMON_DMG_DELAY = 0.25; + DEMON_ATK_DURATION = 0.7; + MELEE_ENERGY = 2; + MELEE_DMG = 450; + DEMON_DMG = 800; + MELEE_DMG_RANGE = 40; + MELEE_ACCURACY = 0.8; + MELEE_PARRY_AUGMENT = 0.2; + MELEE_DMG_TYPE = "dark"; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 7; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 71; + ANIM_PREFIX = "standard"; + } + + void weapon_spawn() + { + SetName("Demon Bludgeon Hammer"); + SetDescription("A massive Bludgeon Demon hammer powered by an infernal soul"); + SetWeight(80); + SetSize(10); + SetValue(6000); + SetHUDSprite("hand", "hammer"); + SetHUDSprite("trade", 144); + M_ATTACK = 1; + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + } + + void game_dodamage() + { + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.fire"); + DOT_BURN *= 0.5; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "bluntarms"); + } + + void special_02_strike() + { + if (!(true)) return; + if (!(param1 == "world")) return; + string ATTACK_END_POS = param2; + if (!((ATTACK_END_POS).z == /* TODO: $get_ground_height */ $get_ground_height(ATTACK_END_POS))) return; + if (!(GetSkillLevel(GetOwner(), "spellcasting.fire") >= 25)) return; + if (GetEntityMP(GetOwner()) < FIRE_WAVE_MP) + { + SendColoredMessage(GetOwner(), "Demon Bludgeon Hammer: Insufficient " + MP + " for Fire Wave"); + } + if (!(GetEntityMP(GetOwner()) >= FIRE_WAVE_MP)) return; + GiveMP(GetOwner()); + do_fire_wave(GetEntityOrigin(GetOwner())); + } + + void do_fire_wave() + { + EmitSound(GetOwner(), 0, "magic/flame_loop_start.wav", 7); + FIRE_WAVE_START_POS = param1; + FIRE_WAVE_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + ClientEvent("new", "all", "effects/sfx_fire_wave", FIRE_WAVE_START_POS, FIRE_WAVE_YAW); + string FIRE_WAVE_SCAN_POS = FIRE_WAVE_START_POS; + FIRE_WAVE_SCAN_POS += /* TODO: $relpos */ $relpos(Vector3(0, FIRE_WAVE_YAW, 0), Vector3(0, 128, 32)); + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 1024, FIRE_WAVE_SCAN_POS); + FIRE_WAVE_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(FIRE_WAVE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(FIRE_WAVE_TARGS, ";"); i++) + { + fire_wave_affect_targs(); + } + } + + void fire_wave_affect_targs() + { + string CUR_TARG = GetToken(FIRE_WAVE_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string OWNER_ORG = FIRE_WAVE_START_POS; + Vector3 OWNER_ANG = Vector3(0, FIRE_WAVE_YAW, 0); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + LogDebug("fire_wave_affect_targs WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG) GetEntityName(CUR_TARG)"); + if (!(WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG))) return; + string TRACE_START = FIRE_WAVE_START_POS; + string TRACE_END = TARG_ORG; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.fire"); + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "bluntarms"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_eb.as b/scripts/angelscript/items/blunt_eb.as new file mode 100644 index 00000000..d1cf5331 --- /dev/null +++ b/scripts/angelscript/items/blunt_eb.as @@ -0,0 +1,121 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntEb : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + string BURST_DMG; + string BURST_POS; + string BURST_STUN_DURATION; + string BURST_TARGS; + float DEMON_ATK_DURATION; + float DEMON_DMG_DELAY; + string GAME_PVP; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int STUN_BURST_MP; + + BluntEb() + { + BASE_LEVEL_REQ = 35; + STUN_BURST_MP = 40; + MELEE_RANGE = 90; + MELEE_DMG_DELAY = 0.5; + MELEE_ATK_DURATION = 1.1; + DEMON_DMG_DELAY = 0.25; + DEMON_ATK_DURATION = 0.7; + MELEE_ENERGY = 2; + MELEE_DMG = 600; + MELEE_DMG_RANGE = 40; + MELEE_ACCURACY = 0.8; + MELEE_PARRY_AUGMENT = 0.2; + MELEE_DMG_TYPE = "blunt"; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 10; + MODEL_WORLD = "weapons/p_weapons4.mdl"; + MODEL_BODY_OFS = 22; + ANIM_PREFIX = "standard"; + } + + void weapon_spawn() + { + SetName("Earth Breaker"); + SetDescription("A gigantic hammer of ground breaking proportions"); + SetWeight(80); + SetSize(10); + SetValue(7000); + SetHUDSprite("hand", "hammer"); + SetHUDSprite("trade", 51); + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + } + + void special_02_strike() + { + string ATTACK_END_POS = param2; + if (GetEntityMP(GetOwner()) < STUN_BURST_MP) + { + SendColoredMessage(GetOwner(), "Earth Breaker: Insufficient Mana for Stun Burst"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + ClientEvent("new", "all", "effects/sfx_stun_burst", ATTACK_END_POS, 250, 1, Vector3(255, 0, 0)); + BURST_POS = ATTACK_END_POS; + BURST_POS += 32; + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 128, BURST_POS); + BURST_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + BURST_POS = ATTACK_END_POS; + if (!(BURST_TARGS != "none")) return; + BURST_STUN_DURATION = GetSkillLevel(GetOwner(), "bluntarms"); + BURST_DMG = BURST_STUN_DURATION; + BURST_STUN_DURATION *= 0.5; + BURST_DMG *= 4.0; + LogDebug("special_02_strike stundur BURST_STUN_DURATION"); + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + burst_affect_targs(); + } + } + + void burst_affect_targs() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARG, "effects/debuff_stun", BURST_STUN_DURATION, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = BURST_POS; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 800, 110))); + XDoDamage(CUR_TARG, 256, BURST_DMG, 1.0, GetOwner(), GetOwner(), "bluntarms", "blunt"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_frost321.as b/scripts/angelscript/items/blunt_frost321.as new file mode 100644 index 00000000..78db47cc --- /dev/null +++ b/scripts/angelscript/items/blunt_frost321.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class BluntFrost321 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/items/blunt_fs.as b/scripts/angelscript/items/blunt_fs.as new file mode 100644 index 00000000..d2113b20 --- /dev/null +++ b/scripts/angelscript/items/blunt_fs.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntFs : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + string BURST_DOT_BURN; + string BURST_POS; + int FIRE_BURST_MP; + string FIRE_BURST_TARGS; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + BluntFs() + { + BASE_LEVEL_REQ = 20; + FIRE_BURST_MP = 30; + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 8; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 90; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 8; + MELEE_DMG = 250; + MELEE_DMG_RANGE = 140; + MELEE_DMG_TYPE = "fire"; + MELEE_ACCURACY = 0.8; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.0; + } + + void weapon_spawn() + { + SetName("Fire Star"); + SetDescription("A morning star forged with elemental fire"); + SetWeight(35); + SetSize(6); + SetValue(2000); + SetHUDSprite("hand", "mace"); + SetHUDSprite("trade", 188); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURN_DAMAGE /= 2; + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "bluntarms"); + } + + void special_02_damaged_other() + { + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURN_DAMAGE /= 2; + BURN_DAMAGE += Random(1, 3); + ApplyEffect(param1, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "bluntarms"); + } + + void special_02_strike() + { + string ATTACK_END_POS = param2; + if (!((ATTACK_END_POS).z == /* TODO: $get_ground_height */ $get_ground_height(ATTACK_END_POS))) return; + if (GetEntityMP(GetOwner()) < FIRE_BURST_MP) + { + string NO_GO_MSG = "Fire Star: Insufficient Mana for Flame Burst"; + } + if (GetSkillLevel(GetOwner(), "spellcasting.fire") < 20) + { + string NO_GO_MSG = "Fire Star: Insufficient Fire Skill for Flame Burst"; + } + if (NO_GO_MSG != "NO_GO_MSG") + { + SendColoredMessage(GetOwner(), NO_GO_MSG); + } + if (!(NO_GO_MSG == "NO_GO_MSG")) return; + EmitSound(GetOwner(), 0, "ambience/steamburst1.wav", 10); + GiveMP(GetOwner()); + ClientEvent("new", "all", "effects/sfx_fire_burst", ATTACK_END_POS, 128, 1, Vector3(255, 0, 0)); + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 128, ATTACK_END_POS); + FIRE_BURST_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + LogDebug("FIRE_BURST_TARGS"); + BURST_POS = ATTACK_END_POS; + if (!(FIRE_BURST_TARGS != "none")) return; + BURST_DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURST_DOT_BURN *= 0.5; + for (int i = 0; i < GetTokenCount(FIRE_BURST_TARGS, ";"); i++) + { + fire_burst_affect_targs(); + } + } + + void fire_burst_affect_targs() + { + string CUR_TARG = GetToken(FIRE_BURST_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TRACE_START = BURST_POS; + string TRACE_END = TARG_ORG; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + if (GetEntityHealth(CUR_TARG) < 1500) + { + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 800, 0))); + } + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), BURST_DOT_BURN, "bluntarms"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_gauntlets.as b/scripts/angelscript/items/blunt_gauntlets.as new file mode 100644 index 00000000..f12d6086 --- /dev/null +++ b/scripts/angelscript/items/blunt_gauntlets.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "items/gauntlets_normal.as" + +namespace MS +{ + +class BluntGauntlets : CGameScript +{ + int BASE_LEVEL_REQ; + + BluntGauntlets() + { + BASE_LEVEL_REQ = 6; + } + +} + +} diff --git a/scripts/angelscript/items/blunt_gauntlets_bear.as b/scripts/angelscript/items/blunt_gauntlets_bear.as new file mode 100644 index 00000000..2dda677e --- /dev/null +++ b/scripts/angelscript/items/blunt_gauntlets_bear.as @@ -0,0 +1,371 @@ +#pragma context server + +#include "items/base_melee.as" +#include "items/base_kick.as" + +namespace MS +{ + +class BluntGauntletsBear : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_BEAR_ATTACK1; + int ANIM_BEAR_ATTACK2; + int ANIM_BEAR_LIFT1; + int ANIM_HANDS_DOWN; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LOWER; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + int BEAR_CLAWS_VOFS; + string BEAR_IMAGE_ID; + int BEAR_MODE; + int DRAIN_RATE; + string FISTS_LAST_ATTACK; + float FREQ_BEAR_ATTACK; + float FREQ_BEAR_IDLE; + float FREQ_BEAR_RAWR; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + float MELEE_DELAY_BEAR; + int MELEE_DMG; + int MELEE_DMG_BEAR; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_OVERRIDE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + int MELEE_RANGE_BEAR; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string NEXT_BEAR_IDLE; + string NEXT_RIGHT_CLICK; + int NO_IDLE; + string PLAYERANIM_AIM; + string PUNCH_ATTACK; + string SOUND_BEAR_ATTACK1; + string SOUND_BEAR_ATTACK2; + string SOUND_BEAR_ATTACK3; + string SOUND_BEAR_HITWALL1; + string SOUND_BEAR_HITWALL2; + string SOUND_BEAR_IDLE1; + string SOUND_BEAR_IDLE2; + string SOUND_BEAR_IDLE3; + string SOUND_BEAR_TRANSFORM_ON; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SWING; + string SOUND_SWIPE; + + BluntGauntletsBear() + { + BASE_LEVEL_REQ = 30; + DRAIN_RATE = -8; + NO_IDLE = 1; + MELEE_OVERRIDE = 1; + ANIM_HANDS_DOWN = 0; + ANIM_LIFT1 = 3; + ANIM_LOWER = 4; + ANIM_IDLE1 = 2; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 5; + ANIM_ATTACK2 = 6; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_martialarts.mdl"; + MODEL_VIEW_IDX = 6; + MODEL_BODY_OFS = 58; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MELEE_DMG = 190; + MELEE_DMG_RANGE = 0; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.85; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.3; + MELEE_ATK_DURATION = 0.9; + MELEE_RANGE_BEAR = 80; + MELEE_DELAY_BEAR = 0.3; + MELEE_DMG_BEAR = 1000; + MELEE_STAT = "martialarts"; + MELEE_SOUND = "weapons/swingsmall.wav"; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.0; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hitbod1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hitbod2.wav"; + SOUND_SWING = "weapons/swingsmall.wav"; + ANIM_PREFIX = "standard"; + PLAYERANIM_AIM = "fists"; + SOUND_BEAR_IDLE1 = "monsters/bear/c_bear_yes.wav"; + SOUND_BEAR_IDLE2 = "monsters/bear/c_bear_bat1.wav"; + SOUND_BEAR_IDLE3 = "monsters/bear/c_bear_bat2.wav"; + SOUND_BEAR_TRANSFORM_ON = "monsters/bear/c_beardire_bat1.wav"; + SOUND_BEAR_ATTACK1 = "monsters/bear/c_bear_atk1.wav"; + SOUND_BEAR_ATTACK2 = "monsters/bear/c_bear_atk2.wav"; + SOUND_BEAR_ATTACK3 = "monsters/bear/c_bear_atk3.wav"; + FREQ_BEAR_IDLE = Random(3.0, 8.0); + SOUND_BEAR_HITWALL1 = "debris/bustconcrete1.wav"; + SOUND_BEAR_HITWALL2 = "debris/bustconcrete2.wav"; + FREQ_BEAR_RAWR = Random(3.0, 10.0); + BEAR_CLAWS_VOFS = 1; + FREQ_BEAR_ATTACK = 0.75; + ANIM_BEAR_ATTACK1 = 5; + ANIM_BEAR_ATTACK2 = 6; + ANIM_BEAR_LIFT1 = 1; + } + + void game_precache() + { + Precache("monsters/companion/bear_image"); + Precache(SOUND_BEAR_IDLE1); + Precache(SOUND_BEAR_IDLE2); + Precache(SOUND_BEAR_IDLE3); + Precache(SOUND_BEAR_TRANSFORM_ON); + Precache(SOUND_BEAR_HITWALL1); + Precache(SOUND_BEAR_HITWALL2); + } + + void weapon_spawn() + { + SetName("Bear Claws"); + SetDescription("Magical claws enchanted with the spirit of a great bear"); + SetWeight(3); + SetSize(1); + SetValue(3000); + SetHand("both"); + SetHUDSprite("hand", 138); + SetHUDSprite("trade", 138); + } + + void weapon_deploy() + { + SetModelBody(0, MODEL_BODY_OFS); + PlayViewAnim(ANIM_HANDS_DOWN); + if (!(BEAR_MODE)) return; + bear_transformation_end(); + } + + void melee_start() + { + if ((BEAR_MODE)) + { + CallExternal(BEAR_IMAGE_ID, "ext_attack"); + // PlayRandomSound from: SOUND_BEAR_ATTACK1, SOUND_BEAR_ATTACK2, SOUND_BEAR_ATTACK3 + array sounds = {SOUND_BEAR_ATTACK1, SOUND_BEAR_ATTACK2, SOUND_BEAR_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((BEAR_MODE)) return; + if (PUNCH_ATTACK == 0) + { + string l.punch_anim = "stance_normal_lowjab_r1"; + PUNCH_ATTACK = 1; + PlayViewAnim(ANIM_ATTACK1); + } + else + { + if (PUNCH_ATTACK == 1) + { + string l.punch_anim = "stance_normal_lowjab_r2"; + PUNCH_ATTACK = 0; + PlayViewAnim(ANIM_ATTACK2); + } + } + PlayOwnerAnim("once", l.punch_anim); + EmitSound(GetOwner(), 3, SOUND_SWING, 5); + FISTS_LAST_ATTACK = GetGameTime(); + punch1_done(); + } + + void punch1_done() + { + if (!(FISTS_LAST_ATTACK)) return; + float l_elapsedtime = GetGameTime(); + l_elapsedtime -= FISTS_LAST_ATTACK; + if (!(l_elapsedtime > 5)) return; + PlayViewAnim(ANIM_LOWER); + FISTS_LAST_ATTACK = 0; + } + + void hitwall() + { + if (!(BEAR_MODE)) + { + // PlayRandomSound from: SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_BEAR_HITWALL1, SOUND_BEAR_HITWALL2 + array sounds = {SOUND_BEAR_HITWALL1, SOUND_BEAR_HITWALL2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void game_+attack2() + { + if (!(true)) return; + if (!(CanAttack(GetOwner()))) return; + if (!(GetGameTime() > NEXT_RIGHT_CLICK)) return; + NEXT_RIGHT_CLICK = GetGameTime(); + NEXT_RIGHT_CLICK += 1.0; + ScheduleDelayedEvent(0.1, "bear_mode_toggle"); + } + + void bear_mode_toggle() + { + if (!(BEAR_MODE)) + { + if (GetEntityMP(GetOwner()) < 30) + { + SendColoredMessage(GetOwner(), "Bear Claws: Not enough mana to transform."); + } + else + { + if (GetSkillLevel(GetOwner(), "spellcasting") < 20) + { + SendColoredMessage(GetOwner(), "Bear Claws: You lack the magical talent to activate this item. Spellcasting:20"); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + ScheduleDelayedEvent(0.1, "bear_transformation"); + } + } + else + { + ScheduleDelayedEvent(0.1, "bear_transformation_end"); + } + } + + void bear_transformation() + { + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int IS_WIELDED = 1; + } + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int IS_WIELDED = 1; + } + if (!(IS_WIELDED)) return; + // TODO: setviewmodelprop ent_me model none + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 1); + // svplaysound: svplaysound 0 10 SOUND_BEAR_TRANSFORM_ON + EmitSound(0, 10, SOUND_BEAR_TRANSFORM_ON); + BEAR_MODE = 1; + bear_loop(); + if (!(true)) return; + SpawnNPC("monsters/companion/bear_image", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + BEAR_IMAGE_ID = GetEntityIndex(m_hLastCreated); + CallExternal(GetOwner(), "ext_bear_mode", BEAR_IMAGE_ID); + } + + void bear_transformation_end() + { + if (!(true)) return; + if (!(BEAR_MODE)) return; + BEAR_MODE = 0; + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int IS_WIELDED = 1; + } + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int IS_WIELDED = 1; + } + if (param1 != "removed") + { + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 1); + } + if ((IsEntityAlive(GetOwner()))) + { + CallExternal(GetOwner(), "ext_bear_mode_end", 1); + CallExternal(BEAR_IMAGE_ID, "remove_bear"); + if ((IS_WIELDED)) + { + } + // TODO: setviewmodelprop ent_me model MODEL_VIEW + // TODO: setviewmodelprop ent_me submodel MODEL_VIEW_IDX + if (param1 != "removed") + { + ScheduleDelayedEvent(0.1, "sv_lift_arms"); + } + } + else + { + if (((BEAR_IMAGE_ID !is null))) + { + CallExternal(BEAR_IMAGE_ID, "ext_bear_die", "from_gauntlets"); + } + } + } + + void sv_lift_arms() + { + // TODO: splayviewanim ent_me ANIM_LIFT1 + } + + void bear_loop() + { + if (!(true)) return; + if (!(BEAR_MODE)) return; + if (!(IsEntityAlive(GetOwner()))) + { + bear_transformation_end(); + } + if (!(IsEntityAlive(GetOwner()))) return; + if (GetEntityMP(GetOwner()) > 0) + { + GiveMP(GetOwner()); + } + if (GetEntityMP(GetOwner()) <= 1) + { + SendColoredMessage(GetOwner(), "Bear Claws: You've run out of mana!"); + bear_transformation_end(); + int ExIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ScheduleDelayedEvent(0.5, "bear_loop"); + if (GetGameTime() > NEXT_BEAR_IDLE) + { + NEXT_BEAR_IDLE = GetGameTime(); + NEXT_BEAR_IDLE += FREQ_BEAR_IDLE; + // PlayRandomSound from: SOUND_BEAR_IDLE1, SOUND_BEAR_IDLE2, SOUND_BEAR_IDLE3 + array sounds = {SOUND_BEAR_IDLE1, SOUND_BEAR_IDLE2, SOUND_BEAR_IDLE3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void game_fall() + { + string WORLD_OFS = MODEL_BODY_OFS; + WORLD_OFS += 1; + SetModelBody(0, WORLD_OFS); + } + + void bweapon_effect_remove() + { + LogDebug("Item Removed"); + bear_transformation_end("removed"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_gauntlets_demon.as b/scripts/angelscript/items/blunt_gauntlets_demon.as new file mode 100644 index 00000000..ac43d83c --- /dev/null +++ b/scripts/angelscript/items/blunt_gauntlets_demon.as @@ -0,0 +1,328 @@ +#pragma context server + +#include "items/base_melee.as" +#include "items/base_kick.as" + +namespace MS +{ + +class BluntGauntletsDemon : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_HANDS_DOWN; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LOWER; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_SPEC_ATTACK; + int ATTACK_DELAY; + int BASE_LEVEL_REQ; + int DEBUG_ATTACK; + float DEMON_MELEE_ATK_DURATION; + float DEMON_MELEE_DMG_DELAY; + int DEMON_MODE; + float DEMON_STRIKE_RATIO; + string FISTS_LAST_ATTACK; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + int NO_IDLE; + int NO_WORLD_MODEL; + string PLAYERANIM_AIM; + string PUNCH_ATTACK; + int REACH_MELEE_RANGE; + string SOUND_DEPLOY; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_LUNGE; + string SOUND_SWING; + string SOUND_SWIPE; + + BluntGauntletsDemon() + { + BASE_LEVEL_REQ = 15; + DEMON_STRIKE_RATIO = 3.0; + NO_IDLE = 1; + ANIM_HANDS_DOWN = 9; + ANIM_LIFT1 = 1; + ANIM_LOWER = 0; + ANIM_IDLE1 = 0; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 5; + ANIM_ATTACK2 = 6; + ANIM_ATTACK3 = 7; + ANIM_ATTACK4 = 8; + ANIM_SPEC_ATTACK = 3; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_martialarts_claws.mdl"; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_BODY_OFS = 116; + MELEE_DMG = 180; + MELEE_DMG_RANGE = 0; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.85; + MELEE_DMG_DELAY = 0.3; + MELEE_ATK_DURATION = 0.9; + DEMON_MELEE_DMG_DELAY = 0.1; + DEMON_MELEE_ATK_DURATION = 0.3; + SOUND_SWIPE = "zombie/claw_miss1.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_SWING = "zombie/claw_miss2.wav"; + SOUND_DEPLOY = "weapons/swords/sworddraw.wav"; + SOUND_LUNGE = "zombie/claw_miss1.wav"; + ANIM_PREFIX = "gauntlets"; + NO_WORLD_MODEL = 1; + MELEE_RANGE = 50; + REACH_MELEE_RANGE = 100; + MELEE_ENERGY = 1; + MELEE_DMG_RANGE = 0; + MELEE_STAT = "martialarts"; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + PLAYERANIM_AIM = "axe_onehand"; + } + + void weapon_spawn() + { + SetName("Demon Claws"); + SetDescription("These infernal claws can inflict massive wounds"); + SetWeight(3); + SetSize(1); + SetValue(3000); + SetHand("both"); + SetHUDSprite("hand", 119); + SetHUDSprite("trade", 119); + if ((CUSTOM_CLAWS)) return; + register_demon_toggle(); + DEMON_MODE = 0; + } + + void weapon_deploy() + { + PlayViewAnim(ANIM_LIFT1); + EmitSound(GetOwner(), 0, SOUND_DEPLOY, 10); + } + + void melee_start() + { + // PlayRandomSound from: SOUND_SWING, SOUND_SWIPE + array sounds = {SOUND_SWING, SOUND_SWIPE}; + EmitSound(GetOwner(), "const.sound.item", sounds[RandomInt(0, sounds.length() - 1)], 10); + int RND_ATTACK = RandomInt(1, 4); + if (RND_ATTACK == 1) + { + PlayViewAnim(ANIM_ATTACK1); + } + if (RND_ATTACK == 2) + { + PlayViewAnim(ANIM_ATTACK2); + } + if (RND_ATTACK == 3) + { + PlayViewAnim(ANIM_ATTACK3); + } + if (RND_ATTACK == 4) + { + PlayViewAnim(ANIM_ATTACK4); + } + if (PUNCH_ATTACK == 0) + { + string l.punch_anim = "stance_normal_lowjab_r1"; + PUNCH_ATTACK = 1; + } + else + { + if (PUNCH_ATTACK == 1) + { + string l.punch_anim = "stance_normal_lowjab_r2"; + PUNCH_ATTACK = 0; + } + } + PlayOwnerAnim("once", l.punch_anim); + FISTS_LAST_ATTACK = GetGameTime(); + punch1_done(); + } + + void punch1_done() + { + SetRepeatDelay(1); + if (!(FISTS_LAST_ATTACK)) return; + float l_elapsedtime = GetGameTime(); + l_elapsedtime -= FISTS_LAST_ATTACK; + if (!(l_elapsedtime > 5)) return; + PlayViewAnim(ANIM_LOWER); + FISTS_LAST_ATTACK = 0; + } + + void hitwall() + { + // PlayRandomSound from: SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void register_demon_toggle() + { + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = REACH_MELEE_RANGE; + int reg.attack.dmg = 0; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "magic"; + int reg.attack.energydrain = 2; + string reg.attack.stat = "martialarts"; + float reg.attack.hitchance = 0.9; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 0.2; + float reg.attack.delay.end = 0.9; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "demon"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 15; + RegisterAttack(); + } + + void demon_start() + { + if (GetEntityMP(GetOwner()) < 10) + { + SendColoredMessage(GetOwner(), "Demon Claws: Insufficient mana for soul drain."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + // TODO: splayviewanim ent_me ANIM_SPEC_ATTACK + EmitSound(GetOwner(), 0, SOUND_LUNGE, 10); + DEBUG_ATTACK = 1; + } + + void demon_strike() + { + if (!(IsEntityAlive(param3))) return; + if ("game.pvp" == 0) + { + if ((IsValidPlayer(param3))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string OWNER_TARG = GetEntityProperty(GetOwner(), "target"); + string OWNER_MP = GetEntityMP(GetOwner()); + OWNER_MP *= 0.5; + string NEG_OWNER_MP = /* TODO: $neg */ $neg(OWNER_MP); + EmitSound(GetOwner(), 0, "magic/eraticlightfail.wav", 10); + GiveMP(NEG_OWNER_MP); + CallExternal(GetOwner(), "mana_drain"); + OWNER_MP *= DEMON_STRIKE_RATIO; + XDoDamage(OWNER_TARG, REACH_MELEE_RANGE, OWNER_MP, 1.0, GetOwner(), GetOwner(), "martialarts", "magic"); + Effect("screenfade", GetOwner(), 0.25, 3, Vector3(0, 0, 255), 96, "fadeout"); + DEBUG_ATTACK = 0; + } + + void game_+attack2() + { + if ((ATTACK_DELAY)) return; + ATTACK_DELAY = 1; + ScheduleDelayedEvent(0.25, "attack_delay_reset"); + if ((true)) + { + int DO_ATTACK = 1; + if (GetEntityMP(GetOwner()) <= 10) + { + int DO_ATTACK = 0; + } + if (!(DO_ATTACK)) + { + SendColoredMessage(GetOwner(), "Demon Claws: Insufficient mana for speed attack."); + } + if (!(CanAttack(GetOwner()))) + { + SendColoredMessage(GetOwner(), "Can't attack now..."); + int DO_ATTACK = 0; + } + if ((DO_ATTACK)) + { + } + int RND_ATTACK = RandomInt(1, 4); + if (RND_ATTACK == 1) + { + // TODO: splayviewanim ent_me ANIM_ATTACK1 + } + if (RND_ATTACK == 2) + { + // TODO: splayviewanim ent_me ANIM_ATTACK2 + } + if (RND_ATTACK == 3) + { + // TODO: splayviewanim ent_me ANIM_ATTACK3 + } + if (RND_ATTACK == 4) + { + // TODO: splayviewanim ent_me ANIM_ATTACK4 + } + } + if (!(DO_ATTACK)) return; + // PlayRandomSound from: SOUND_SWING, SOUND_SWIPE + array sounds = {SOUND_SWING, SOUND_SWIPE}; + EmitSound(GetOwner(), "const.sound.item", sounds[RandomInt(0, sounds.length() - 1)], 10); + GiveMP(-10); + CallExternal(GetOwner(), "mana_drain"); + if (PUNCH_ATTACK == 0) + { + string l.punch_anim = "stance_normal_lowjab_r1"; + PUNCH_ATTACK = 1; + } + else + { + if (PUNCH_ATTACK == 1) + { + string l.punch_anim = "stance_normal_lowjab_r2"; + PUNCH_ATTACK = 0; + } + } + PlayOwnerAnim("once", l.punch_anim); + FISTS_LAST_ATTACK = GetGameTime(); + punch1_done(); + if (!(true)) return; + string DMG_SET = GetSkillLevel(GetOwner(), "martialarts.ratio"); + DMG_SET *= MELEE_DMG; + DMG_SET *= 2; + string OWNER_TARG = GetEntityProperty(GetOwner(), "target"); + string OWNER_POS = GetEntityOrigin(GetOwner()); + string TARG_POS = GetEntityOrigin(OWNER_TARG); + XDoDamage(OWNER_TARG, MELEE_RANGE, DMG_SET, 0.9, GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()), "martialarts", "magic"); + } + + void attack_delay_reset() + { + ATTACK_DELAY = 0; + } + +} + +} diff --git a/scripts/angelscript/items/blunt_gauntlets_fe1.as b/scripts/angelscript/items/blunt_gauntlets_fe1.as new file mode 100644 index 00000000..ae77352c --- /dev/null +++ b/scripts/angelscript/items/blunt_gauntlets_fe1.as @@ -0,0 +1,305 @@ +#pragma context server + +#include "items/base_melee.as" +#include "items/base_vampire.as" + +namespace MS +{ + +class BluntGauntletsFe1 : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_HANDS_DOWN; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LOWER; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_SPEC_ATTACK; + float AURA_DOT_RATIO; + int AURA_RADIUS; + int BASE_LEVEL_REQ; + int CAN_VAMPIRE_TARGET; + float GOUGE_LIFESTEAL_RATIO; + int GOUGE_MPDRAIN; + int GOUGE_MPSTEAL; + int MELEE_ACCURACY; + int MELEE_AFFLICDMG_MIN; + float MELEE_AFFLIC_RATIO; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int NO_BANK; + int NO_WORLD_MODEL; + string PLAYERANIM_AIM; + string PUNCH_ATTACK; + int REACH_MELEE_RANGE; + string SOUND_DEPLOY; + string SOUND_GAS_ON; + string SOUND_GOUGE; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SWING; + string SOUND_SWIPE; + int SPELL_SKILL_REQUIRED; + + BluntGauntletsFe1() + { + NO_BANK = 1; + SPELL_SKILL_REQUIRED = 20; + BASE_LEVEL_REQ = 20; + ANIM_HANDS_DOWN = 20; + ANIM_LIFT1 = 12; + ANIM_LOWER = 11; + ANIM_IDLE1 = 11; + ANIM_IDLE_TOTAL = 12; + ANIM_ATTACK1 = 16; + ANIM_ATTACK2 = 17; + ANIM_ATTACK3 = 18; + ANIM_ATTACK4 = 19; + ANIM_SPEC_ATTACK = 14; + ANIM_SHEATH = 16; + MODEL_VIEW = "viewmodels/v_martialarts_claws.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 60; + MELEE_DMG = 200; + MELEE_DMG_RANGE = 0; + MELEE_DMG_TYPE = "acid"; + MELEE_ACCURACY = 100; + MELEE_DMG_DELAY = 0.35; + MELEE_ATK_DURATION = 0.45; + MELEE_AFFLIC_RATIO = 0.5; + MELEE_AFFLICDMG_MIN = 10; + GOUGE_MPDRAIN = 15; + GOUGE_MPSTEAL = 10; + GOUGE_LIFESTEAL_RATIO = 0.10; + AURA_DOT_RATIO = 0.3; + AURA_RADIUS = 80; + SOUND_SWIPE = "zombie/claw_miss1.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_SWING = "zombie/claw_miss2.wav"; + SOUND_DEPLOY = "monsters/skeleton/calrain3.wav"; + SOUND_GOUGE = "monsters/gonome/gonome_jumpattack.wav"; + ANIM_PREFIX = "gauntlets"; + NO_WORLD_MODEL = 1; + MELEE_RANGE = 50; + REACH_MELEE_RANGE = 100; + MELEE_ENERGY = 1; + MELEE_STAT = "spellcasting.affliction"; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + PLAYERANIM_AIM = "axe_onehand"; + SOUND_GAS_ON = "ambience/steamburst1.wav"; + } + + void game_precache() + { + Precache("poison_cloud.spr"); + } + + void OnPickup(CBaseEntity@ player) override + { + ScheduleDelayedEvent(0.1, "facid_aura"); + } + + void weapon_spawn() + { + SetName("Venom Claws"); + SetDescription("Vicious claws have burst from your hands!"); + SetWeight(3); + SetSize(1); + SetValue(1500); + SetHand("both"); + SetHUDSprite("hand", "gauntlets"); + SetHUDSprite("trade", "gauntlets"); + string reg.spell.reqskill = BASE_LEVEL_REQ; + int reg.spell.fizzletime = 99999; + float reg.spell.castsuccess = 1.0; + int reg.spell.preparetime = 1; + // TODO: registerspell + int CHARGE2_REQ = 22; + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = REACH_MELEE_RANGE; + int reg.attack.dmg = 0; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "pierce"; + int reg.attack.energydrain = 2; + string reg.attack.stat = "spellcasting.affliction"; + int reg.attack.hitchance = 100; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 0.2; + float reg.attack.delay.end = 0.9; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "gouge"; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.mpdrain = 0; + float reg.attack.chargeamt = 1.0; + string reg.attack.reqskill = CHARGE2_REQ; + RegisterAttack(); + } + + void melee_start() + { + // PlayRandomSound from: SOUND_SWING, SOUND_SWIPE + array sounds = {SOUND_SWING, SOUND_SWIPE}; + EmitSound(GetOwner(), "const.sound.item", sounds[RandomInt(0, sounds.length() - 1)], 10); + int RND_ATTACK = RandomInt(1, 4); + if (RND_ATTACK == 1) + { + PlayViewAnim(ANIM_ATTACK1); + } + if (RND_ATTACK == 2) + { + PlayViewAnim(ANIM_ATTACK2); + } + if (RND_ATTACK == 3) + { + PlayViewAnim(ANIM_ATTACK3); + } + if (RND_ATTACK == 4) + { + PlayViewAnim(ANIM_ATTACK4); + } + if (PUNCH_ATTACK == 0) + { + string l.punch_anim = "stance_normal_lowjab_r1"; + PUNCH_ATTACK = 1; + } + else + { + if (PUNCH_ATTACK == 1) + { + string l.punch_anim = "stance_normal_lowjab_r2"; + PUNCH_ATTACK = 0; + } + } + PlayOwnerAnim("once", l.punch_anim); + EmitSound(GetOwner(), "const.sound.item", SOUND_SWING, 5); + } + + void game_dodamage() + { + if (!(param1)) return; + string HIT_TARG = param2; + do_special_damage(HIT_TARG); + } + + void do_special_damage() + { + if (!(RandomInt(1, 2) == 1)) return; + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string AFFLIC_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + AFFLIC_DAMAGE *= MELLEE_AFFLIC_RATIO; + AFFLIC_DAMAGE += Random(3, 6); + if (AFFLIC_DAMAGE < 10) + { + string AFFLIC_DAMAGE = MELEE_AFFLICDMG_MIN; + } + ApplyEffect(param1, "effects/dot_poison", 5, GetEntityIndex(GetOwner()), AFFLIC_DAMAGE, "spellcasting.affliction"); + } + + void gouge_start() + { + if (GetEntityMP(GetOwner()) < GOUGE_MPDRAIN) + { + SendColoredMessage(GetOwner(), "Flesheater Gauntlets: Insufficient mana for Gouge Attack."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + // TODO: splayviewanim ent_me ANIM_SPEC_ATTACK + EmitSound(GetOwner(), 0, SOUND_GOUGE, 10); + } + + void gouge_strike() + { + if (GetEntityMP(GetOwner()) < GOUGE_MPDRAIN) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IsEntityAlive(param3))) return; + if ("game.pvp" == 0) + { + if ((IsValidPlayer(param3))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(/* TODO: $can_damage */ $can_damage(GetOwner(), param3))) return; + string DMG_SET = GetSkillLevel(GetOwner(), "spellcasting.affliction.ratio"); + DMG_SET *= MELEE_DMG; + DMG_SET *= 3; + string OWNER_TARG = param3; + XDoDamage(OWNER_TARG, REACH_MELEE_RANGE, DMG_SET, 1.0, GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()), "spellcasting.affliction", "acid"); + CAN_VAMPIRE_TARGET = 0; + check_can_vampire(GetEntityIndex(GetOwner()), param3); + if ((CAN_VAMPIRE_TARGET)) + { + string LIFE_STOLEN = DMG_SET; + LIFE_STOLEN *= /* TODO: $get_takedmg */ $get_takedmg(param3, "all"); + LIFE_STOLEN *= /* TODO: $get_takedmg */ $get_takedmg(param3, "acid"); + LIFE_STOLEN *= GOUGE_LIFESTEAL_RATIO; + HealEntity(GetOwner(), LIFE_STOLEN); + GiveMP(GetOwner()); + } + else + { + GiveMP(GetOwner()); + } + CallExternal(GetOwner(), "mana_drain"); + } + + void facid_aura() + { + string AURA_DOT = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + AURA_DOT *= AURA_DOT_RATIO; + CallExternal(GetOwner(), "ext_acid_feaura_activate", AURA_DOT, AURA_RADIUS); + EmitSound(GetOwner(), 3, SOUND_GAS_ON, 10); + } + + void game_removefromowner() + { + CallExternal(GetOwner(), "ext_acid_feaura_remove"); + } + + void game_fall() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_gauntlets_fe2.as b/scripts/angelscript/items/blunt_gauntlets_fe2.as new file mode 100644 index 00000000..353e0602 --- /dev/null +++ b/scripts/angelscript/items/blunt_gauntlets_fe2.as @@ -0,0 +1,193 @@ +#pragma context server + +#include "items/blunt_gauntlets_fe1.as" + +namespace MS +{ + +class BluntGauntletsFe2 : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_HANDS_DOWN; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LOWER; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_SPEC_ATTACK; + float AURA_DOT_RATIO; + int AURA_RADIUS; + string DELAY_NOVA; + int DMG_NOVA; + float GOUGE_LIFESTEAL_RATIO; + int GOUGE_MPDRAIN; + int GOUGE_MPSTEAL; + string LAST_ERR; + float MELEE_ACCURACY; + int MELEE_AFFLICDMG_MIN; + float MELEE_AFFLIC_RATIO; + int MELEE_DMG; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + float NOVA_ATKDELAY; + int NOVA_MPDRAIN; + string NOVA_SCRIPT; + int NO_WORLD_MODEL; + string PLAYERANIM_AIM; + float RAND_GROWL; + int REACH_MELEE_RANGE; + string SOUND_DEPLOY; + string SOUND_GAS_ON; + string SOUND_GOUGE; + string SOUND_GROWL1; + string SOUND_GROWL2; + string SOUND_GROWL3; + string SOUND_GROWL4; + string SOUND_GROWL5; + string SOUND_GROWL6; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SWING; + string SOUND_SWIPE; + + BluntGauntletsFe2() + { + ANIM_HANDS_DOWN = 20; + ANIM_LIFT1 = 12; + ANIM_LOWER = 11; + ANIM_IDLE1 = 11; + ANIM_IDLE_TOTAL = 12; + ANIM_ATTACK1 = 16; + ANIM_ATTACK2 = 17; + ANIM_ATTACK3 = 18; + ANIM_ATTACK4 = 19; + ANIM_SPEC_ATTACK = 14; + ANIM_SHEATH = 16; + MODEL_VIEW = "viewmodels/v_martialarts_claws.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 60; + MELEE_DMG = 250; + MELEE_DMG_RANGE = 0; + MELEE_DMG_TYPE = "acid"; + MELEE_ACCURACY = 0.85; + MELEE_AFFLIC_RATIO = 0.8; + MELEE_AFFLICDMG_MIN = 20; + GOUGE_MPDRAIN = 40; + GOUGE_MPSTEAL = 30; + GOUGE_LIFESTEAL_RATIO = 0.17; + AURA_DOT_RATIO = 0.6; + AURA_RADIUS = 100; + SOUND_SWIPE = "zombie/claw_miss1.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_SWING = "zombie/claw_miss2.wav"; + SOUND_DEPLOY = "monsters/skeleton/calrain3.wav"; + SOUND_GOUGE = "monsters/gonome/gonome_jumpattack.wav"; + RAND_GROWL = Random(5.5, 8.5); + SOUND_GROWL1 = "monsters/zombie1/zo_pain1.wav"; + SOUND_GROWL2 = "monsters/zombie1/zo_pain3.wav"; + SOUND_GROWL3 = "monsters/gonome/gonome_pain1.wav"; + SOUND_GROWL4 = "monsters/gonome/gonome_pain2.wav"; + SOUND_GROWL5 = "monsters/gonome/gonome_pain3.wav"; + SOUND_GROWL6 = "monsters/gonome/gonome_pain4.wav"; + NOVA_SCRIPT = "monsters/summon/poison_burst"; + DMG_NOVA = 50; + NOVA_MPDRAIN = 60; + NOVA_ATKDELAY = 8.0; + ANIM_PREFIX = "gauntlets"; + NO_WORLD_MODEL = 1; + MELEE_RANGE = 50; + REACH_MELEE_RANGE = 100; + MELEE_ENERGY = 1; + MELEE_STAT = "spellcasting.affliction"; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + PLAYERANIM_AIM = "axe_onehand"; + SOUND_GAS_ON = "ambience/steamburst1.wav"; + } + + void game_precache() + { + Precache("poison_cloud.spr"); + Precache(NOVA_SCRIPT); + } + + void weapon_spawn() + { + SetName("Greater Venom Claws"); + SetDescription("Vicious claws have burst from your hands!"); + ScheduleDelayedEvent(0.1, "growl_noises"); + } + + void do_special_damage() + { + string LIFE_STOLEN = MELEE_DAMAGE; + LIFE_STOLEN *= /* TODO: $get_takedmg */ $get_takedmg(param1, "acid"); + LIFE_STOLEN *= 0.01; + try_vampire_target(GetEntityIndex(GetOwner()), GetEntityIndex(param1), LIFE_STOLEN); + } + + void growl_noises() + { + RAND_GROWL("growl_noises"); + // PlayRandomSound from: SOUND_GROWL1, SOUND_GROWL2, SOUND_GROWL3, SOUND_GROWL4, SOUND_GROWL5, SOUND_GROWL6 + array sounds = {SOUND_GROWL1, SOUND_GROWL2, SOUND_GROWL3, SOUND_GROWL4, SOUND_GROWL5, SOUND_GROWL6}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 256, 1.9, 1.9); + } + + void game_+attack2() + { + if (!(true)) return; + if (!(CanAttack(GetOwner()))) return; + if (GetGameTime() < DELAY_NOVA) + { + int EXIT_SUB = 1; + if (GetGameTime() > LAST_ERR) + { + } + SendColoredMessage(GetOwner(), "Too soon to use Poison Burst again!"); + LAST_ERR = GetGameTime(); + LAST_ERR += 2.0; + } + if ((EXIT_SUB)) return; + if (GetEntityMP(GetOwner()) < NOVA_MPDRAIN) + { + SendColoredMessage(GetOwner(), "Greater Flesheater Gauntlets: Insufficient mana for Poison Burst."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + DELAY_NOVA = GetGameTime(); + DELAY_NOVA += NOVA_ATKDELAY; + string DOT_POISON = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + DOT_POISON *= 0.5; + SpawnNPC(NOVA_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 86, 1, DMG_NOVA, DOT_POISON + GiveMP(GetOwner()); + CallExternal(GetOwner(), "mana_drain"); + LAST_ERR = GetGameTime(); + LAST_ERR += 2.0; + } + +} + +} diff --git a/scripts/angelscript/items/blunt_gauntlets_fire.as b/scripts/angelscript/items/blunt_gauntlets_fire.as new file mode 100644 index 00000000..a776eb18 --- /dev/null +++ b/scripts/angelscript/items/blunt_gauntlets_fire.as @@ -0,0 +1,206 @@ +#pragma context server + +#include "items/base_melee.as" +#include "items/base_kick.as" + +namespace MS +{ + +class BluntGauntletsFire : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_HANDS_DOWN; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LOWER; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + string BWEAPON_CHARGE_PERCENT; + string DOT_EFFECT; + string FISTS_LAST_ATTACK; + string GAME_PVP; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + string MELEE_CALLBACK; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_OVERRIDE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int NO_WORLD_MODEL; + string PLAYERANIM_AIM; + string PUNCH_ATTACK; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SWING; + string SOUND_SWIPE; + int SPECIAL1_OVERRIDE; + + BluntGauntletsFire() + { + MELEE_OVERRIDE = 1; + SPECIAL1_OVERRIDE = 1; + MELEE_CALLBACK = "gaunt"; + DOT_EFFECT = "effects/dot_fire"; + BASE_LEVEL_REQ = 15; + ANIM_HANDS_DOWN = 3; + ANIM_LIFT1 = 2; + ANIM_LOWER = 3; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 4; + ANIM_SHEATH = 3; + MODEL_VIEW = "viewmodels/v_martialarts.mdl"; + MODEL_VIEW_IDX = 3; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "ambience/steamburst1.wav"; + SOUND_SWING = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 56; + NO_WORLD_MODEL = 1; + ANIM_PREFIX = "gauntlets"; + MELEE_RANGE = 40; + MELEE_DMG_DELAY = 0.3; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 1; + MELEE_DMG = 100; + MELEE_DMG_RANGE = 0; + MELEE_DMG_TYPE = "fire"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "martialarts"; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.1; + PLAYERANIM_AIM = "fists"; + } + + void weapon_spawn() + { + SetName("Gauntlets of Fire"); + SetDescription("These magical gauntlets are infused with elemental fire"); + SetWeight(3); + SetSize(1); + SetValue(2500); + SetHand("both"); + SetHUDSprite("hand", 97); + SetHUDSprite("trade", 97); + } + + void weapon_deploy() + { + GAME_PVP = "game.pvp"; + PlayViewAnim(ANIM_HANDS_DOWN); + } + + void gaunt_start() + { + PlayViewAnim(MELEE_VIEWANIM_ATK); + if (PUNCH_ATTACK == 0) + { + string l.punch_anim = "stance_normal_lowjab_r1"; + PUNCH_ATTACK = 1; + } + else + { + if (PUNCH_ATTACK == 1) + { + string l.punch_anim = "stance_normal_lowjab_r2"; + PUNCH_ATTACK = 0; + } + } + PlayOwnerAnim("once", l.punch_anim); + EmitSound(GetOwner(), "const.sound.item", SOUND_SWING, 5); + FISTS_LAST_ATTACK = GetGameTime(); + punch1_done(); + } + + void punch1_done() + { + if (!(FISTS_LAST_ATTACK)) return; + float l_elapsedtime = GetGameTime(); + l_elapsedtime -= FISTS_LAST_ATTACK; + if (!(l_elapsedtime > 5)) return; + PlayViewAnim(ANIM_LOWER); + FISTS_LAST_ATTACK = 0; + } + + void hitwall() + { + // PlayRandomSound from: SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void item_idle() + { + } + + void gaunt_damaged_other() + { + if (!(RandomInt(1, 2) == 1)) return; + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURN_DAMAGE /= 1.5; + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + ApplyEffect(param1, DOT_EFFECT, 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "martialarts"); + if ((BWEAPON_NO_PERCENT_CHARGE)) return; + if (BWEAPON_CHARGE_PERCENT > 0.25) + { + BWEAPON_CHARGE_PERCENT -= 0.25; + string CHARGE_RATIO = /* TODO: $ratio */ $ratio(BWEAPON_CHARGE_PERCENT, 1.25, BWEAPON_DBL_CHARGE_ADJ); + string NEW_DMG = param2; + NEW_DMG *= CHARGE_RATIO; + SetDamage("dmg"); + return; + LogDebug("Adjusted dmg x CHARGE_RATIO"); + BWEAPON_CHARGE_PERCENT = 0; + string CUR_DRAIN = MELEE_ENERGY; + CUR_DRAIN *= BWEAPON_CHARGE_PERCENT; + DrainStamina(GetOwner()); + } + } + + void gaunt_playsound() + { + EmitSound(GetOwner(), "const.snd.weapon", SOUND_SWIPE, "const.snd.maxvol"); + } + + void special_01_start() + { + gaunt_start(); + if (!(true)) return; + // svplaysound: svplaysound 1 10 SPECIAL01_SND + EmitSound(1, 10, SPECIAL01_SND); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_gauntlets_ic.as b/scripts/angelscript/items/blunt_gauntlets_ic.as new file mode 100644 index 00000000..d43b5414 --- /dev/null +++ b/scripts/angelscript/items/blunt_gauntlets_ic.as @@ -0,0 +1,157 @@ +#pragma context server + +#include "items/blunt_gauntlets_demon.as" + +namespace MS +{ + +class BluntGauntletsIc : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + int CUSTOM_CLAWS; + int DEMON_MODE; + float DEMON_STRIKE_RATIO; + int FIRE_WAVE_MP; + string FIRE_WAVE_SCAN_POS; + string FIRE_WAVE_START_POS; + string FIRE_WAVE_TARGS; + string FIRE_WAVE_YAW; + string GAME_PVP; + int MELEE_DMG; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string OWNER_ANG; + string OWNER_ORG; + + BluntGauntletsIc() + { + BASE_LEVEL_REQ = 25; + CUSTOM_CLAWS = 1; + FIRE_WAVE_MP = 20; + MELEE_DMG = 200; + DEMON_STRIKE_RATIO = 6.0; + MODEL_VIEW = "viewmodels/v_martialarts_claws.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 69; + ANIM_PREFIX = "standard"; + } + + void weapon_spawn() + { + SetName("Infernal Claws"); + SetDescription("Demonic claws imbued with flame"); + SetWeight(3); + SetSize(1); + SetValue(6000); + SetHand("both"); + SetHUDSprite("hand", 143); + SetHUDSprite("trade", 143); + register_demon_toggle(); + DEMON_MODE = 0; + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + } + + void demon_strike() + { + if (!(true)) return; + if (!(param1 == "world")) return; + if (GetSkillLevel(GetOwner(), "spellcasting.fire") < 25) + { + SendColoredMessage(GetOwner(), "Infernal Claws: Insufficient skill for Fire Wave."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetEntityMP(GetOwner()) < FIRE_WAVE_MP) + { + SendColoredMessage(GetOwner(), "Infernal Claws: Insufficient mana for Fire Wave."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + string ATTACK_END_POS = param2; + do_fire_wave(ATTACK_END_POS); + } + + void do_fire_wave() + { + EmitSound(GetOwner(), 0, "magic/flame_loop_start.wav", 7); + FIRE_WAVE_START_POS = param1; + FIRE_WAVE_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + ClientEvent("new", "all", "effects/sfx_fire_wave", FIRE_WAVE_START_POS, FIRE_WAVE_YAW); + OWNER_ORG = FIRE_WAVE_START_POS; + OWNER_ANG = Vector3(0, FIRE_WAVE_YAW, 0); + FIRE_WAVE_SCAN_POS = FIRE_WAVE_START_POS; + FIRE_WAVE_SCAN_POS += /* TODO: $relpos */ $relpos(Vector3(0, FIRE_WAVE_YAW, 0), Vector3(0, 128, 32)); + ScheduleDelayedEvent(1.25, "fire_wave2"); + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 768, FIRE_WAVE_SCAN_POS); + FIRE_WAVE_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(FIRE_WAVE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(FIRE_WAVE_TARGS, ";"); i++) + { + fire_wave_affect_targs(); + } + } + + void fire_wave2() + { + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 1024, FIRE_WAVE_SCAN_POS); + FIRE_WAVE_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(FIRE_WAVE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(FIRE_WAVE_TARGS, ";"); i++) + { + fire_wave_affect_targs(); + } + } + + void fire_wave_affect_targs() + { + string CUR_TARG = GetToken(FIRE_WAVE_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + LogDebug("fire_wave_affect_targs WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG) GetEntityName(CUR_TARG)"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG))) return; + string TRACE_START = FIRE_WAVE_START_POS; + string TRACE_END = TARG_ORG; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.fire"); + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "martialarts"); + } + + void game_dodamage() + { + if (!(RandomInt(1, 3) == 1)) return; + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.fire"); + DOT_BURN *= 0.5; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "martialarts"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_gauntlets_leather.as b/scripts/angelscript/items/blunt_gauntlets_leather.as new file mode 100644 index 00000000..f54434a0 --- /dev/null +++ b/scripts/angelscript/items/blunt_gauntlets_leather.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "items/gauntlets_normal.as" + +namespace MS +{ + +class BluntGauntletsLeather : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_HANDS_DOWN; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LOWER; + int ANIM_SHEATH; + int MELEE_DMG; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SWING; + string SOUND_SWIPE; + + BluntGauntletsLeather() + { + ANIM_HANDS_DOWN = 3; + ANIM_LIFT1 = 2; + ANIM_LOWER = 3; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 4; + ANIM_SHEATH = 3; + MODEL_VIEW = "viewmodels/v_martialarts.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_BODY_OFS = 114; + MELEE_DMG = 70; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hitbod1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hitbod2.wav"; + SOUND_SWING = "weapons/swingsmall.wav"; + } + + void weapon_spawn() + { + SetName("a set of|Leather Gauntlets"); + SetDescription("The inner padding allows you to punch slightly harder"); + SetWeight(3); + SetSize(1); + SetValue(40); + SetHand("both"); + SetHUDSprite("hand", 118); + SetHUDSprite("trade", 118); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_gauntlets_serpant.as b/scripts/angelscript/items/blunt_gauntlets_serpant.as new file mode 100644 index 00000000..1fa4fd89 --- /dev/null +++ b/scripts/angelscript/items/blunt_gauntlets_serpant.as @@ -0,0 +1,77 @@ +#pragma context server + +#include "items/blunt_gauntlets_fire.as" + +namespace MS +{ + +class BluntGauntletsSerpant : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_HANDS_DOWN; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LOWER; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + string DOT_EFFECT; + float MELEE_ACCURACY; + string MELEE_CALLBACK; + int MELEE_DMG; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_BITE; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SWING; + string SOUND_SWIPE; + + BluntGauntletsSerpant() + { + BASE_LEVEL_REQ = 15; + ANIM_HANDS_DOWN = 3; + ANIM_LIFT1 = 2; + ANIM_LOWER = 3; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 4; + ANIM_SHEATH = 3; + MODEL_VIEW = "viewmodels/v_martialarts.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_BODY_OFS = 112; + MELEE_DMG = 125; + MELEE_DMG_RANGE = 0; + MELEE_DMG_TYPE = "poison"; + MELEE_ACCURACY = 0.85; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hitbod1.wav"; + SOUND_HITWALL2 = "bullchicken/bc_bite2.wav"; + SOUND_SWING = "weapons/swingsmall.wav"; + MELEE_CALLBACK = "gaunt"; + SOUND_BITE = "bullchicken/bc_bite2.wav"; + DOT_EFFECT = "effects/dot_poison"; + } + + void weapon_spawn() + { + SetName("Serpent Gauntlets"); + SetDescription("These magical gauntlets have a bite"); + SetWeight(3); + SetSize(1); + SetValue(2000); + SetHand("both"); + SetHUDSprite("hand", 117); + SetHUDSprite("trade", 117); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_granitemace.as b/scripts/angelscript/items/blunt_granitemace.as new file mode 100644 index 00000000..63c134a3 --- /dev/null +++ b/scripts/angelscript/items/blunt_granitemace.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "items/blunt_mace.as" + +namespace MS +{ + +class BluntGranitemace : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + + BluntGranitemace() + { + BASE_LEVEL_REQ = 12; + MELEE_DMG = 230; + MELEE_DMG_RANGE = 140; + MELEE_ACCURACY = 0.7; + } + + void weapon_spawn() + { + SetName("Granite Mace"); + SetDescription("A heavy granite mace"); + SetWeight(60); + SetSize(12); + SetValue(800); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_granitemaul.as b/scripts/angelscript/items/blunt_granitemaul.as new file mode 100644 index 00000000..edcf652c --- /dev/null +++ b/scripts/angelscript/items/blunt_granitemaul.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "items/blunt_maul.as" + +namespace MS +{ + +class BluntGranitemaul : CGameScript +{ + int BASE_LEVEL_REQ; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_ENERGY; + + BluntGranitemaul() + { + BASE_LEVEL_REQ = 12; + MELEE_DMG = 320; + MELEE_DMG_RANGE = 160; + MELEE_ENERGY = 20; + } + + void weapon_spawn() + { + SetName("Granite Maul"); + SetDescription("A heavy granite maul"); + SetWeight(150); + SetSize(15); + SetValue(1100); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_greatmaul.as b/scripts/angelscript/items/blunt_greatmaul.as new file mode 100644 index 00000000..d0a27cb0 --- /dev/null +++ b/scripts/angelscript/items/blunt_greatmaul.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "items/blunt_maul.as" + +namespace MS +{ + +class BluntGreatmaul : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ATK_DURATION; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_ENERGY; + + BluntGreatmaul() + { + BASE_LEVEL_REQ = 12; + MELEE_DMG = 290; + MELEE_DMG_RANGE = 150; + MELEE_ENERGY = 11; + MELEE_ATK_DURATION = 1.5; + } + + void weapon_spawn() + { + SetName("Great Maul"); + SetDescription("An even heavier maul"); + SetWeight(125); + SetSize(13); + SetValue(530); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_hammer1.as b/scripts/angelscript/items/blunt_hammer1.as new file mode 100644 index 00000000..8d0ad53b --- /dev/null +++ b/scripts/angelscript/items/blunt_hammer1.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntHammer1 : CGameScript +{ + string ANIM_PREFIX; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + + BluntHammer1() + { + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_BODY_OFS = 77; + ANIM_PREFIX = "hammer"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.2; + MELEE_ENERGY = 0.3; + MELEE_DMG = 100; + MELEE_DMG_RANGE = 20; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.7; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Training Hammer"); + SetDescription("Rusted metal makes this hammer light and easy to swing"); + SetWeight(10); + SetSize(5); + SetValue(3); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "rustyhammer"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_hammer2.as b/scripts/angelscript/items/blunt_hammer2.as new file mode 100644 index 00000000..16c2cbc3 --- /dev/null +++ b/scripts/angelscript/items/blunt_hammer2.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntHammer2 : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string SOUND_SWIPE; + + BluntHammer2() + { + BASE_LEVEL_REQ = 3; + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 2; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 65; + ANIM_PREFIX = "hammer"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.2; + MELEE_ENERGY = 0.4; + MELEE_DMG = 120; + MELEE_DMG_RANGE = 20; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.05; + } + + void weapon_spawn() + { + SetName("Heavy Hammer"); + SetDescription("A large heavy Hammer"); + SetWeight(30); + SetSize(5); + SetValue(15); + SetHUDSprite("trade", 26); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_hammer3.as b/scripts/angelscript/items/blunt_hammer3.as new file mode 100644 index 00000000..c87b3609 --- /dev/null +++ b/scripts/angelscript/items/blunt_hammer3.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntHammer3 : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string SOUND_SWIPE; + + BluntHammer3() + { + BASE_LEVEL_REQ = 9; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 1; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 80; + ANIM_PREFIX = "warhammer"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.3; + MELEE_ENERGY = 1; + MELEE_DMG = 180; + MELEE_DMG_RANGE = 20; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.65; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.1; + } + + void weapon_spawn() + { + SetName("Heavy War Hammer"); + SetDescription("A large heavy war hammer"); + SetWeight(50); + SetSize(6); + SetValue(135); + SetHUDSprite("trade", 70); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_hammer_dorfgan.as b/scripts/angelscript/items/blunt_hammer_dorfgan.as new file mode 100644 index 00000000..09ddacff --- /dev/null +++ b/scripts/angelscript/items/blunt_hammer_dorfgan.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/blunt_hammer1.as" + +namespace MS +{ + +class BluntHammerDorfgan : CGameScript +{ + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_ENERGY; + + BluntHammerDorfgan() + { + MELEE_ENERGY = 2; + MELEE_DMG = 110; + MELEE_DMG_RANGE = 90; + } + + void weapon_spawn() + { + SetName("Dorfgan s Hammer"); + SetDescription("Dorfgan s lost hammer"); + SetWeight(25); + SetSize(6); + SetValue(35); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_lightning.as b/scripts/angelscript/items/blunt_lightning.as new file mode 100644 index 00000000..3ec1260b --- /dev/null +++ b/scripts/angelscript/items/blunt_lightning.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class BluntLightning : CGameScript +{ +} + +} diff --git a/scripts/angelscript/items/blunt_lrod11.as b/scripts/angelscript/items/blunt_lrod11.as new file mode 100644 index 00000000..cd0f2593 --- /dev/null +++ b/scripts/angelscript/items/blunt_lrod11.as @@ -0,0 +1,194 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntLrod11 : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_RANGE; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_CHARGE; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_THUNDER; + int SPEC_ATTACK; + + BluntLrod11() + { + BASE_LEVEL_REQ = 20; + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 5; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_BODY_OFS = 94; + MELEE_ATK_DURATION = 1.1; + MELEE_DMG_TYPE = "lightning"; + SOUND_CHARGE = "magic/lightning_powerup.wav"; + SOUND_THUNDER = "weather/Storm_exclamation.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 8; + MELEE_DMG = 230; + MELEE_DMG_RANGE = 140; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "bluntarms"; + ANIM_PREFIX = "dagger"; + } + + void weapon_spawn() + { + SetName("Lightning Rod"); + SetDescription("A rare enchanted mace."); + SetValue(3000); + SetHUDSprite("hand", 112); + SetHUDSprite("trade", 112); + Precache(MODEL_VIEW); + } + + void special_02_start() + { + SPEC_ATTACK = 1; + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(SPEC_ATTACK)) + { + if (RandomInt(1, 5) != 1) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SPEC_ATTACK = 0; + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + BURN_DAMAGE /= 2; + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + ApplyEffect(param2, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE); + } + + void register_charge1() + { + string reg.attack.type = "strike-land"; + int reg.attack.noautoaim = 1; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 4096; + int reg.attack.dmg = 800; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "lightning"; + int reg.attack.energydrain = 2; + string reg.attack.stat = "spellcasting.lightning"; + float reg.attack.hitchance = 1.0; + int reg.attack.priority = 3; + float reg.attack.delay.strike = 0.2; + float reg.attack.delay.end = 0.9; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "bolt"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 3.0; + int reg.attack.reqskill = 18; + int reg.attack.mpdrain = 50; + RegisterAttack(); + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 4096; + int reg.attack.dmg = 1; + int reg.attack.dmg.range = 1; + string reg.attack.dmg.type = "target"; + int reg.attack.energydrain = 2; + string reg.attack.stat = "spellcasting.lightning"; + float reg.attack.hitchance = 1.0; + int reg.attack.priority = 4; + float reg.attack.delay.strike = 0.2; + float reg.attack.delay.end = 0.9; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "repulse"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 4.0; + int reg.attack.reqskill = 20; + int reg.attack.mpdrain = 75; + RegisterAttack(); + } + + void bolt_start() + { + PlayViewAnim(5); + EmitSound(GetOwner(), 0, SOUND_CHARGE, 10); + } + + void bolt_strike() + { + PlayViewAnim(5); + PlayOwnerAnim("critical", "bow_release"); + Effect("beam", "point", "lgtning.spr", 30, GetEntityOrigin(GetOwner()), param2, Vector3(200, 255, 50), 200, 30, 1.0); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + BURN_DAMAGE *= 2; + if ((IsEntityAlive(param3))) + { + if ((IsValidPlayer(param3))) + { + if ("game.pvp" < 1) + { + } + int NO_EFFECT = 1; + } + if (!(NO_EFFECT)) + { + } + ApplyEffect(param3, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "spellcasting.lightning"); + } + } + + void OnDeploy() override + { + EmitSound(GetOwner(), 0, SOUND_THUNDER, 10); + } + + void repulse_start() + { + PlayViewAnim(5); + EmitSound(GetOwner(), 0, SOUND_CHARGE, 10); + PlayViewAnim(5); + PlayOwnerAnim("critical", "bow_release"); + SpawnNPC("monsters/summon/lightning_repulse", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 512, 3.0, 0, "spellcasting.lightning" + } + +} + +} diff --git a/scripts/angelscript/items/blunt_mace.as b/scripts/angelscript/items/blunt_mace.as new file mode 100644 index 00000000..c52ee49e --- /dev/null +++ b/scripts/angelscript/items/blunt_mace.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntMace : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string SOUND_SWIPE; + + BluntMace() + { + BASE_LEVEL_REQ = 6; + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 0; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 68; + ANIM_PREFIX = "mace"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.2; + MELEE_ENERGY = 0.6; + MELEE_DMG = 150; + MELEE_DMG_RANGE = 20; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.05; + } + + void weapon_spawn() + { + SetName("Mace"); + SetDescription("A one-handed mace"); + SetWeight(30); + SetSize(6); + SetValue(45); + SetHUDSprite("hand", "mace"); + SetHUDSprite("trade", "mace"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_maul.as b/scripts/angelscript/items/blunt_maul.as new file mode 100644 index 00000000..7a6ec853 --- /dev/null +++ b/scripts/angelscript/items/blunt_maul.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntMaul : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + + BluntMaul() + { + BASE_LEVEL_REQ = 12; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 0; + MODEL_BODY_OFS = 71; + ANIM_PREFIX = "maul"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.8; + MELEE_ATK_DURATION = 1.3; + MELEE_ENERGY = 2; + MELEE_DMG = 220; + MELEE_DMG_RANGE = 20; + MELEE_ACCURACY = 0.65; + MELEE_PARRY_AUGMENT = 0.1; + } + + void weapon_spawn() + { + SetName("Maul"); + SetDescription("A heavy two-handed maul"); + SetWeight(80); + SetSize(10); + SetValue(270); + SetHUDSprite("hand", "hammer"); + SetHUDSprite("trade", "maul"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_mithral.as b/scripts/angelscript/items/blunt_mithral.as new file mode 100644 index 00000000..a55a88e2 --- /dev/null +++ b/scripts/angelscript/items/blunt_mithral.as @@ -0,0 +1,308 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" +#include "items/base_vampire.as" + +namespace MS +{ + +class BluntMithral : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_IDLE2; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_RAGE; + int BASE_LEVEL_REQ; + float DEMON_ATK_DURATION; + int DEMON_CHARGES; + int DEMON_DMG; + float DEMON_DMG_DELAY; + float DEMON_DURATION; + int DEMON_RAGE_ON; + string LAST_ERR; + string LAST_RAGE; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int M_ATTACK; + int OUT_O_CHARGES; + float RAGE_DELAY; + string SOUND_DEATH; + string SOUND_RAGE; + string SOUND_RAGE1; + string SOUND_RAGE2; + string SOUND_RAGE3; + string SOUND_RAGE4; + float VAMPIRE_RATIO; + + BluntMithral() + { + DEMON_CHARGES = 4; + VAMPIRE_RATIO = 0.75; + ANIM_LIFT1 = 15; + ANIM_IDLE1 = 16; + ANIM_IDLE2 = 17; + ANIM_IDLE_TOTAL = 2; + ANIM_ATTACK1 = 18; + ANIM_ATTACK2 = 19; + ANIM_ATTACK3 = 20; + ANIM_RAGE = 21; + BASE_LEVEL_REQ = 20; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 6; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 10; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.5; + MELEE_ATK_DURATION = 1.1; + DEMON_DMG_DELAY = 0.25; + DEMON_ATK_DURATION = 0.7; + MELEE_ENERGY = 2; + MELEE_DMG = 400; + DEMON_DMG = 750; + MELEE_DMG_RANGE = 40; + MELEE_ACCURACY = 0.75; + MELEE_PARRY_AUGMENT = 0.2; + SOUND_RAGE = "monsters/bludgeon/bludgeon_gaz_bat2.wav"; + SOUND_RAGE1 = "monsters/bludgeon/bludgeon_gaz_bat1.wav"; + SOUND_RAGE2 = "monsters/bludgeon/bludgeon_gaz_answer.wav"; + SOUND_RAGE3 = "monsters/bludgeon/bludgeon_gaz_spell.wav"; + SOUND_RAGE4 = "monsters/bludgeon/bludgeon_gaz_pain.wav"; + SOUND_DEATH = "monsters/bludgeon/bludgeon_gaz_death.wav"; + DEMON_DURATION = 20.0; + RAGE_DELAY = 40.0; + MELEE_DMG_TYPE = "blunt"; + } + + void weapon_spawn() + { + SetName("Bludgeon Hammer"); + SetDescription("A massive Bludgeon hammer, its former owner's soul is imprisoned within"); + SetWeight(80); + SetSize(10); + SetValue(3750); + SetHUDSprite("hand", 126); + SetHUDSprite("trade", 126); + M_ATTACK = 1; + } + + void game_+attack2() + { + if (!(true)) return; + if (!(CanAttack(GetOwner()))) return; + if ((DEMON_RAGE_ON)) return; + if (GetSkillLevel(GetOwner(), "spellcasting") < 12) + { + SendColoredMessage(GetOwner(), "Bludgeon Hammer: Insufficient magic skill for demonic rage."); + } + if (!(GetSkillLevel(GetOwner(), "spellcasting") >= 12)) return; + LogDebug("rage game.time vs LAST_RAGE"); + if (GetGameTime() < LAST_RAGE) + { + int EXIT_SUB = 1; + if (GetGameTime() > LAST_ERR) + { + } + if (!(OUT_O_CHARGES)) + { + SendColoredMessage(GetOwner(), "Bludgeon Rage: You've not yet recovered from the previous bludgeon rage"); + } + if ((OUT_O_CHARGES)) + { + SendColoredMessage(GetOwner(), "Bludgeon Rage: Out of charges"); + } + LAST_ERR = GetGameTime(); + LAST_ERR += 2.0; + } + if ((EXIT_SUB)) return; + LAST_RAGE = GetGameTime(); + LAST_RAGE += RAGE_DELAY; + CallExternal(GAME_MASTER, "item_demon_rage", GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()), DEMON_CHARGES); + } + + void demon_rage() + { + SendPlayerMessage("Bludgeon", "rage: " + int(param1) + " charges remaining"); + // TODO: splayviewanim ent_me ANIM_RAGE + EmitSound(GetOwner(), 0, SOUND_RAGE, 10); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + string L_DEMON_DMG = DEMON_DMG; + L_DEMON_DMG *= 2.0; + SetAttackProp("ent_me", 1); + DEMON_RAGE_ON = 1; + DEMON_DURATION("demon_rage_end"); + demon_rage_loop(); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 64, DEMON_DURATION, DEMON_DURATION); + } + + void demon_rage_loop() + { + if (!(DEMON_RAGE_ON)) return; + Effect("screenfade", GetOwner(), 2.0, 1.0, Vector3(255, 0, 0), RandomInt(64, 128), "fadin"); + if (RandomInt(1, 10) == 1) + { + // PlayRandomSound from: SOUND_RAGE1, SOUND_RAGE2, SOUND_RAGE3, SOUND_RAGE4 + array sounds = {SOUND_RAGE1, SOUND_RAGE2, SOUND_RAGE3, SOUND_RAGE4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + ScheduleDelayedEvent(1.0, "demon_rage_loop"); + } + + void demon_rage_end() + { + DEMON_RAGE_ON = 0; + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + string L_MELEE_DMG = MELEE_DMG; + L_MELEE_DMG *= 2.0; + SetAttackProp("ent_me", 1); + } + + void demon_rage_maxed() + { + OUT_O_CHARGES = 1; + SendColoredMessage(GetOwner(), "Bludgeon Rage: Out of charges"); + } + + void game_dodamage() + { + if (!(DEMON_RAGE_ON)) return; + if (!(param1)) return; + string HEAL_AMT = GetEntityProperty(param2, "scriptvar"); + HEAL_AMT *= VAMPIRE_RATIO; + Effect("glow", GetOwner(), Vector3(255, 0, 0), 60, 1, 1); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + try_vampire_target(GetEntityIndex(GetOwner()), GetEntityIndex(param2), HEAL_AMT); + } + + void melee_strike() + { + if (!(DEMON_RAGE_ON)) return; + if (!(IsEntityAlive(param3))) return; + if (GetEntityMaxHealth(param3) < 3000) + { + int L_R = RandomInt(50, 200); + if (RandomInt(1, 2) == 1) + { + string L_R = /* TODO: $neg */ $neg(L_R); + } + string PUSH_VEL = /* TODO: $relvel */ $relvel(L_R, 300, 10); + AddVelocity(GetEntityIndex(param3), PUSH_VEL); + } + } + + void melee_start() + { + if (!(DEMON_RAGE_ON)) + { + // TODO: splayviewanim ent_me MELEE_VIEWANIM_ATK + if (PLAYERANIM_SWING != "PLAYERANIM_SWING") + { + PlayOwnerAnim("once", PLAYERANIM_SWING); + } + MELEE_SOUND_DELAY("melee_playsound"); + } + if (!(DEMON_RAGE_ON)) return; + if (M_ATTACK == 1) + { + // TODO: splayviewanim ent_me ANIM_ATTACK1 + } + if (M_ATTACK == 2) + { + // TODO: splayviewanim ent_me ANIM_ATTACK2 + } + if (M_ATTACK == 3) + { + // TODO: splayviewanim ent_me ANIM_ATTACK3 + M_ATTACK = 1; + } + M_ATTACK += 1; + } + + void item_idle() + { + if ((DEMON_RAGE_ON)) return; + if (("game.item.attacking")) return; + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + if (!("baseitem.canidle")) return; + int l.anim = RandomInt(1, ANIM_IDLE_TOTAL); + if (l.anim == 1) + { + PlayViewAnim(ANIM_IDLE1); + } + else + { + if (l.anim == 2) + { + PlayViewAnim(ANIM_IDLE2); + } + else + { + if (l.anim == 3) + { + PlayViewAnim(ANIM_IDLE3); + } + else + { + if (l.anim == 4) + { + PlayViewAnim(ANIM_IDLE4); + } + else + { + if (l.anim == 5) + { + PlayViewAnim(ANIM_IDLE5); + } + } + } + } + } + } + + void bs_global_command() + { + if (!(param3 == "death")) return; + if (!(param1 == GetEntityIndex(GetOwner()))) return; + DEMON_RAGE_ON = 0; + EmitSound(GetOwner(), 0, "monsters/bludgeon/bludgeon_gaz_death.wav", 10); + } + + void game_removefromowner() + { + if ((DEMON_RAGE_ON)) + { + demon_rage_end(); + } + } + + void game_putinpack() + { + if ((DEMON_RAGE_ON)) + { + demon_rage_end(); + } + } + +} + +} diff --git a/scripts/angelscript/items/blunt_ms1.as b/scripts/angelscript/items/blunt_ms1.as new file mode 100644 index 00000000..79ba4a0e --- /dev/null +++ b/scripts/angelscript/items/blunt_ms1.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntMs1 : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + BluntMs1() + { + BASE_LEVEL_REQ = 10; + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 7; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 87; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 8; + MELEE_DMG = 200; + MELEE_DMG_RANGE = 140; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.0; + } + + void weapon_spawn() + { + SetName("Rusty Morning Star"); + SetDescription("This morning star has seen better days"); + SetWeight(35); + SetSize(6); + SetValue(750); + SetHUDSprite("hand", "mace"); + SetHUDSprite("trade", 187); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_ms2.as b/scripts/angelscript/items/blunt_ms2.as new file mode 100644 index 00000000..2e17dddc --- /dev/null +++ b/scripts/angelscript/items/blunt_ms2.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntMs2 : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + BluntMs2() + { + BASE_LEVEL_REQ = 15; + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 7; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 87; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 8; + MELEE_DMG = 230; + MELEE_DMG_RANGE = 140; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.0; + } + + void weapon_spawn() + { + SetName("Morning Star"); + SetDescription("A heavy spiked mace"); + SetWeight(35); + SetSize(6); + SetValue(1000); + SetHUDSprite("hand", "mace"); + SetHUDSprite("trade", 187); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_ms3.as b/scripts/angelscript/items/blunt_ms3.as new file mode 100644 index 00000000..999d8d41 --- /dev/null +++ b/scripts/angelscript/items/blunt_ms3.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntMs3 : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + BluntMs3() + { + BASE_LEVEL_REQ = 20; + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 7; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 87; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 8; + MELEE_DMG = 250; + MELEE_DMG_RANGE = 140; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.8; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.0; + } + + void weapon_spawn() + { + SetName("Fine Morning Star"); + SetDescription("A masterfully crafted morning star"); + SetWeight(35); + SetSize(6); + SetValue(1500); + SetHUDSprite("hand", "mace"); + SetHUDSprite("trade", 187); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_northmaul972.as b/scripts/angelscript/items/blunt_northmaul972.as new file mode 100644 index 00000000..a932fcd3 --- /dev/null +++ b/scripts/angelscript/items/blunt_northmaul972.as @@ -0,0 +1,345 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntNorthmaul972 : CGameScript +{ + int ANIM_BLIZZARD; + int ANIM_GROUND_SMASH_NORM; + int ANIM_GROUND_SMASH_PIERCE; + int ANIM_PIERCE_IDLE; + int ANIM_PIERCE_SWING1; + int ANIM_PIERCE_SWING2; + string ANIM_PREFIX; + int ANIM_SWITCH; + string ATTACK_MODE; + int BASE_LEVEL_REQ; + int BLIZZARD_MPDRAIN; + int CUSTOM_REGISTER_BLUNT; + int ICEWAVE_MPDRAIN; + int IN_PACK; + string LAST_SWIVEL; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_COLD_HITWALL1; + string SOUND_COLD_HITWALL2; + string SOUND_PIERCE_HITWALL1; + string SOUND_PIERCE_HITWALL2; + float SWIVEL_DELAY; + float SWIVEL_TIME; + + BluntNorthmaul972() + { + CUSTOM_REGISTER_BLUNT = 1; + BASE_LEVEL_REQ = 20; + ICEWAVE_MPDRAIN = 60; + BLIZZARD_MPDRAIN = 30; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 5; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 7; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.5; + MELEE_ATK_DURATION = 1.5; + MELEE_ENERGY = 2; + MELEE_DMG = 400; + MELEE_DMG_RANGE = 20; + MELEE_ACCURACY = 0.65; + MELEE_PARRY_AUGMENT = 0.1; + ANIM_SWITCH = 11; + ANIM_PIERCE_IDLE = 12; + ANIM_PIERCE_SWING1 = 4; + ANIM_PIERCE_SWING2 = 5; + ANIM_GROUND_SMASH_NORM = 10; + ANIM_GROUND_SMASH_PIERCE = 13; + ANIM_BLIZZARD = 14; + SWIVEL_DELAY = 3.0; + SWIVEL_TIME = 1.0; + SOUND_COLD_HITWALL1 = "debris/glass1.wav"; + SOUND_COLD_HITWALL2 = "debris/glass2.wav"; + SOUND_PIERCE_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_PIERCE_HITWALL2 = "weapons/axemetal2.wav"; + MELEE_DMG_TYPE = "cold"; + } + + void weapon_spawn() + { + SetName("North Maul"); + SetDescription("A gigantic hammer of solid elemental ice"); + SetWeight(80); + SetSize(10); + SetValue(3750); + SetHUDSprite("hand", 125); + SetHUDSprite("trade", 125); + } + + void OnDeploy() override + { + ATTACK_MODE = "cold"; + IN_PACK = 0; + } + + void game_+attack2() + { + if (!(true)) return; + if (!(CanAttack(GetOwner()))) return; + float TIME_DIFF = GetGameTime(); + TIME_DIFF -= LAST_SWIVEL; + if (!(TIME_DIFF > SWIVEL_DELAY)) return; + LAST_SWIVEL = GetGameTime(); + if (ATTACK_MODE == "cold") + { + // TODO: splayviewanim ent_me ANIM_SWITCH + ATTACK_MODE = "pierce"; + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 1); + } + else + { + // TODO: splayviewanim ent_me ANIM_LIFT1 + ATTACK_MODE = "cold"; + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 1); + } + ApplyEffect(GetOwner(), "effects/effect_templock"); + SWIVEL_TIME("remove_lock"); + } + + void remove_lock() + { + CallExternal(GetOwner(), "ext_end_templock"); + } + + void register_charge1() + { + register_charge2(); + } + + void register_charge2() + { + RegisterAttack(); + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = SECONDARY_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + reg.attack.energydrain *= 2; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + reg.attack.hitchance += 0.1; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 1.5; + float reg.attack.delay.end = 2.0; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "special_02"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 4; + if (BASE_LEVEL_REQ > reg.attack.reqskill) + { + reg.attack.reqskill += BASE_LEVEL_REQ; + } + RegisterAttack(); + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 0; + int reg.attack.dmg = 0; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "target"; + string reg.attack.energydrain = MELEE_ENERGY; + reg.attack.energydrain *= 2; + string reg.attack.stat = "spellcasting.ice"; + float reg.attack.hitchance = 1.0; + int reg.attack.priority = 3; + float reg.attack.delay.strike = 1.5; + float reg.attack.delay.end = 2.0; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "blizzard"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 3.0; + string reg.attack.mpdrain = BLIZZARD_MPDRAIN; + int reg.attack.reqskill = 15; + RegisterAttack(); + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 80; + string reg.attack.dmg = MELEE_DMG; + reg.attack.dmg *= 4; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = "pierce"; + string reg.attack.energydrain = MELEE_ENERGY; + reg.attack.energydrain *= 2; + string reg.attack.stat = "bluntarms"; + float reg.attack.hitchance = 1.0; + int reg.attack.priority = 4; + float reg.attack.delay.strike = 0.75; + float reg.attack.delay.end = 1.0; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "stomp"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 4.0; + string reg.attack.mpdrain = ICEWAVE_MPDRAIN; + int reg.attack.reqskill = 27; + RegisterAttack(); + } + + void blizzard_start() + { + if (GetSkillLevel(GetOwner(), "bluntarms.proficiency") < 20) + { + SendColoredMessage(GetOwner(), "Northmaul: You do not have sufficient blunt arms skill to use Blizzard attack"); + int EXIT_SUB = 1; + } + if (GetEntityMP(GetOwner()) < BLIZZARD_MPDRAIN) + { + SendColoredMessage(GetOwner(), "Northmaul: Insufficient mana for Blizzard."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + // TODO: splayviewanim ent_me ANIM_BLIZZARD + PlayOwnerAnim("once", PLAYERANIM_SWING); + ScheduleDelayedEvent(1.0, "summon_blizzard"); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_SHOUT1') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void summon_blizzard() + { + string pos = GetEntityOrigin(GetOwner()); + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + SpawnNPC("monsters/summon/summon_blizzard", pos, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), 15, 15, "spellcasting.ice" + } + + void stomp_start() + { + if (GetSkillLevel(GetOwner(), "spellcasting.ice") < 15) + { + SendColoredMessage(GetOwner(), "Northmaul: You do not have sufficient ice magic skill to use Ice Wave attack"); + int EXIT_SUB = 1; + } + if (GetEntityMP(GetOwner()) < ICEWAVE_MPDRAIN) + { + SendColoredMessage(GetOwner(), "Northmaul: Insufficient mana for Ice Wave."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (ATTACK_MODE == "cold") + { + // TODO: splayviewanim ent_me ANIM_GROUND_SMASH_NORM + } + if (ATTACK_MODE == "pierce") + { + // TODO: splayviewanim ent_me ANIM_GROUND_SMASH_PIERCE + } + PlayOwnerAnim("once", PLAYERANIM_SWING); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_SHOUT1') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void stomp_strike() + { + EmitSound(GetOwner(), 0, "magic/boom.wav", 10); + SpawnNPC("monsters/summon/ice_wave_player", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 10, 3 + } + + void melee_start() + { + if (!(true)) return; + int RND_ANIM = RandomInt(1, 2); + if (ATTACK_MODE == "cold") + { + if (RND_ANIM == 1) + { + // TODO: splayviewanim ent_me ANIM_ATTACK1 + } + if (RND_ANIM == 2) + { + // TODO: splayviewanim ent_me ANIM_ATTACK2 + } + } + if (ATTACK_MODE == "pierce") + { + if (RND_ANIM == 1) + { + // TODO: splayviewanim ent_me ANIM_PIERCE_SWING1 + } + if (RND_ANIM == 2) + { + // TODO: splayviewanim ent_me ANIM_PIERCE_SWING2 + } + } + if (PLAYERANIM_SWING != "PLAYERANIM_SWING") + { + PlayOwnerAnim("once", PLAYERANIM_SWING); + } + MELEE_SOUND_DELAY("melee_playsound"); + } + + void item_idle() + { + if (("game.item.attacking")) return; + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + if ((IN_PACK)) return; + if (ATTACK_MODE == "cold") + { + // TODO: splayviewanim ent_me 1 + } + if (ATTACK_MODE == "pierce") + { + // TODO: splayviewanim ent_me ANIM_PIERCE_IDLE + } + } + + void game_putinpack() + { + IN_PACK = 1; + } + + void game_switchhands() + { + } + + void hitwall() + { + if (ATTACK_MODE == "cold") + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_COLD_HITWALL1, SOUND_COLD_HITWALL2 + array sounds = {"game.sound.maxvol", SOUND_COLD_HITWALL1, SOUND_COLD_HITWALL2}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (ATTACK_MODE == "pierce") + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_PIERCE_HITWALL1, SOUND_PIERCE_HITWALL2 + array sounds = {"game.sound.maxvol", SOUND_PIERCE_HITWALL1, SOUND_PIERCE_HITWALL2}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + +} + +} diff --git a/scripts/angelscript/items/blunt_ravenmace.as b/scripts/angelscript/items/blunt_ravenmace.as new file mode 100644 index 00000000..a0ca7474 --- /dev/null +++ b/scripts/angelscript/items/blunt_ravenmace.as @@ -0,0 +1,228 @@ +#pragma context server + +#include "items/base_melee.as" + +namespace MS +{ + +class BluntRavenmace : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_CHARGE; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + string EFFECT_SCRIPT; + int FIRST_ATK_ANIM; + string HASTE_FX_ID; + int IN_HASTE; + int LAST_ATK_ANIM; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HEARTBEAT; + string SOUND_SWIPE; + + BluntRavenmace() + { + BASE_LEVEL_REQ = 15; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_ATTACK4 = 5; + FIRST_ATK_ANIM = 2; + LAST_ATK_ANIM = 5; + ANIM_CHARGE = 6; + ANIM_SHEATH = 7; + MELEE_STAT = "bluntarms"; + MELEE_DMG_TYPE = "blunt"; + MELEE_SOUND = SOUND_SWIPE; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + PLAYERANIM_AIM = "bluntdouble"; + PLAYERANIM_SWING = "swing_bluntdouble"; + MELEE_DMG = 140; + MELEE_DMG_RANGE = 140; + MELEE_ENERGY = 1; + MELEE_RANGE = 70; + MELEE_DMG_DELAY = 0.8; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_ATK_DURATION = 1.1; + MELEE_ACCURACY = 0.6; + MELEE_PARRY_AUGMENT = 0.0; + EFFECT_SCRIPT = "effects/debuff_stun"; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 3; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_BODY_OFS = 74; + ANIM_PREFIX = "ravenmace"; + SOUND_HEARTBEAT = "amb/wind.wav"; + IN_HASTE = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(13); + if ((IN_HASTE)) + { + } + // svplaysound: svplaysound 2 10 amb/wind.wav + EmitSound(2, 10, "amb/wind.wav"); + } + + void game_precache() + { + Precache(MODEL_VIEW); + Precache(MODEL_WORLD); + Precache(MODEL_HANDS); + Precache(SOUND_HEARTBEAT); + } + + void weapon_spawn() + { + SetName("Raven Mace"); + SetDescription("An ornate maul hasted by infernal magics"); + SetWeight(100); + SetSize(15); + SetValue(1100); + SetHand("both"); + SetHUDSprite("hand", 101); + SetHUDSprite("trade", 101); + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + reg.attack.energydrain *= 2; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + reg.attack.hitchance += 0.1; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 1.5; + float reg.attack.delay.end = 2.0; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "special_02"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 4; + RegisterAttack(); + } + + void bweapon_effect_activate() + { + haste_go(); + IN_HASTE = 1; + } + + void bweapon_effect_remove() + { + speed_remove(); + IN_HASTE = 0; + } + + void special_01_start() + { + PlayViewAnim(ANIM_CHARGE); + PlayOwnerAnim("once", "swing_bluntdouble"); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void melee_start() + { + MELEE_VIEWANIM_ATK = RandomInt(FIRST_ATK_ANIM, LAST_ATK_ANIM); + PlayViewAnim(MELEE_VIEWANIM_ATK); + PlayOwnerAnim("once", PLAYERANIM_SWING); + MELEE_SOUND_DELAY("melee_playsound"); + } + + void bash() + { + PlayViewAnim(ANIM_CHARGE); + PlayOwnerAnim("once", PLAYERANIM_SWING); + MELEE_SOUND_DELAY("melee_playsound"); + } + + void game_dodamage() + { + MELEE_VIEWANIM_ATK = RandomInt(FIRST_ATK_ANIM, LAST_ATK_ANIM); + } + + void special_02_start() + { + PlayViewAnim(ANIM_CHARGE); + PlayOwnerAnim("once", "swing_bluntdouble"); + ScheduleDelayedEvent(0.9, "bash"); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_SWORDREADY') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void special_02_damaged_other() + { + string maxstun = GetSkillLevel(GetOwner(), "bluntarms.prof"); + maxstun += 1; + maxstun = max(1, min(35, maxstun)); + float stuntime = Random(1, GetSkillLevel(GetOwner(), "bluntarms.prof")); + ApplyEffect(param1, EFFECT_SCRIPT, stuntime, 0, 0, GetEntityIndex(GetOwner())); + } + + void speed_remove() + { + // svplaysound: svplaysound 2 0 amb/wind.wav + EmitSound(2, 0, "amb/wind.wav"); + // TODO: setgaitspeed 1.0 + string L_SCRIPTFLAG = GetEntityProperty(GetOwner(), "itemname"); + CallExternal(GetOwner(), "plr_update_speed_effects", "remove", L_SCRIPTFLAG); + ClientEvent("update", "all", HASTE_FX_ID, "effect_die"); + } + + void speed_add() + { + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + string L_SCRIPTFLAG = GetEntityProperty(GetOwner(), "itemname"); + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), L_SCRIPTFLAG, "name_exists"))) return; + // TODO: setgaitspeed 3.0 + CallExternal(GetOwner(), "plr_change_speed", -1, 5.0, L_SCRIPTFLAG); + ClientEvent("new", "all", "effects/sfx_motionblur_perm", GetEntityIndex(GetOwner())); + HASTE_FX_ID = "game.script.last_sent_id"; + } + + void haste_go() + { + speed_add(); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_rudolfsmace.as b/scripts/angelscript/items/blunt_rudolfsmace.as new file mode 100644 index 00000000..c416d752 --- /dev/null +++ b/scripts/angelscript/items/blunt_rudolfsmace.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntRudolfsmace : CGameScript +{ + string ANIM_PREFIX; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string SOUND_SWIPE; + + BluntRudolfsmace() + { + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 3; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 56; + ANIM_PREFIX = "mace"; + MELEE_RANGE = 50; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 2; + MELEE_DMG = 150; + MELEE_DMG_RANGE = 110; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.0; + } + + void weapon_spawn() + { + SetName("Odd Mace"); + SetDescription("An odd one-handed mace"); + SetWeight(35); + SetSize(6); + SetValue(30); + SetHUDSprite("trade", 98); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_rustyhammer2.as b/scripts/angelscript/items/blunt_rustyhammer2.as new file mode 100644 index 00000000..e301fab2 --- /dev/null +++ b/scripts/angelscript/items/blunt_rustyhammer2.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "items/blunt_hammer1.as" + +namespace MS +{ + +class BluntRustyhammer2 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/items/blunt_snake_staff.as b/scripts/angelscript/items/blunt_snake_staff.as new file mode 100644 index 00000000..b0933ffd --- /dev/null +++ b/scripts/angelscript/items/blunt_snake_staff.as @@ -0,0 +1,144 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntSnakeStaff : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BLUNT_NO_STUN; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + int MELEE_RANGE; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_PLAYER; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int SECONDARY_DMG; + string SOUND_BITE; + string SOUND_POISON; + string SOUND_SUMMON; + + BluntSnakeStaff() + { + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_PLAYER = "weapons/staff/snake_staff_player.mdl"; + MODEL_BODY_OFS = 58; + ANIM_PREFIX = "khopesh"; + MELEE_STAT = "spellcasting.affliction"; + SECONDARY_DMG = 0; + MELEE_DMG_TYPE = "poison"; + SOUND_SUMMON = "magic/spawn.wav"; + SOUND_BITE = "bullchicken/bc_bite2.wav"; + SOUND_POISON = "monsters/snakeman/sm_alert1.wav"; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.3; + MELEE_ATK_DURATION = 0.6; + MELEE_ENERGY = 0.3; + MELEE_DMG = 30; + MELEE_DMG_RANGE = 60; + MELEE_ACCURACY = 0.65; + BLUNT_NO_STUN = 1; + Precache("monsters/summon/snake_cursed"); + } + + void weapon_spawn() + { + SetName("Snake Staff"); + SetDescription("A magic staff used by snake charmers"); + SetWeight(10); + SetSize(1); + SetValue(500); + SetHUDSprite("hand", 79); + SetHUDSprite("trade", 79); + } + + void melee_strike() + { + if (!(GetEntityRange(m_hLastStruckByMe) < 100)) return; + int random = RandomInt(1, 100); + if (!(random < 15)) return; + DoDamage(m_hLastSeen, "direct", 10, 1, MELEE_ACCURACY); + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", RandomInt(3, 6), GetEntityIndex(GetOwner()), Random(3, 10), "spellcasting.affliction"); + EmitSound(GetOwner(), 0, SOUND_BITE, 10); + ScheduleDelayedEvent(0.1, "second_sound"); + } + + void second_sound() + { + EmitSound(GetOwner(), 0, SOUND_POISON, 10); + } + + void melee_start() + { + int VATTACK = RandomInt(1, 3); + if (VATTACK == 1) + { + string VATTACK_ANIM = ANIM_ATTACK1; + } + if (VATTACK == 2) + { + string VATTACK_ANIM = ANIM_ATTACK2; + } + if (VATTACK == 3) + { + string VATTACK_ANIM = ANIM_ATTACK3; + } + PlayViewAnim(VATTACK_ANIM); + if (PLAYERANIM_SWING != "PLAYERANIM_SWING") + { + PlayOwnerAnim("once", PLAYERANIM_SWING); + } + MELEE_SOUND_DELAY("melee_playsound"); + } + + void special_02_start() + { + PlayViewAnim(5); + if (SNAKES_CREATED >= 20) + { + SendPlayerMessage("The", "staffs magic is depleted , it may recharge in time."); + } + if (!(SNAKES_CREATED < 20)) return; + SNAKES_CREATED += 1; + ApplyEffect(GetOwner(), "effects/dot_poison_blind", 5, GetEntityIndex(GetOwner()), Random(1, 5), "none"); + SendPlayerMessage("You", "have been poisoned by your snake staff!"); + int NCHARGES = 20; + NCHARGES -= SNAKES_CREATED; + int NCHARGES = int(NCHARGES); + SendPlayerMessage("Staff", "has " + NCHARGES + " charges remaining"); + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + string SPAWN_POS = /* TODO: $relpos */ $relpos(0, 60, 0); + SPAWN_POS = "z"; + SpawnNPC("monsters/summon/snake_cursed", /* TODO: $relpos */ $relpos(0, 60, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + Effect("glow", m_hLastCreated, Vector3(0, 255, 0), 100, 1, 1); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_staff_a.as b/scripts/angelscript/items/blunt_staff_a.as new file mode 100644 index 00000000..ce92ca62 --- /dev/null +++ b/scripts/angelscript/items/blunt_staff_a.as @@ -0,0 +1,537 @@ +#pragma context server + +#include "items/base_weapon_new.as" + +namespace MS +{ + +class BluntStaffA : CGameScript +{ + int AM_CHARGING; + int ATK1_ACCURACY; + string ATK1_CALLBACK; + float ATK1_DELAY_STRIKE; + int ATK1_DMG; + int ATK1_DMG_RANGE; + string ATK1_DMG_TYPE; + float ATK1_DURATION; + string ATK1_PANIM; + int ATK1_RANGE; + string ATK1_SKILL; + int ATK1_STAMINA; + string ATK1_VANIM; + string ATK2_CALLBACK; + int ATK2_DMG; + string ATK2_PANIM; + int ATK2_RANGE; + string ATK2_VANIM; + int BASE_LEVEL_REQ; + int BEAM_ON; + int BEAM_READY; + int BWEAPON_CUSTOM_HITWALL; + string BWEAPON_DESC; + string BWEAPON_HANDS; + int BWEAPON_INV_SPRITE_IDX; + string BWEAPON_NAME; + int BWEAPON_VALUE; + int BWEAPON_WEIGHT; + string CL_DARK_FX; + string CL_FX_ID; + string CL_STAFF_EYES; + int CUR_CHARGE; + string DMG_BEAM; + float FINAL_CHARGE; + float FREQ_CHARGE; + string MAX_CHARGE; + int MP_BURST; + int MP_GCOD; + int MP_LCOD; + int MP_WRAITH; + string NEXT_AF_UNDERSKILL_WARN; + string NEXT_CHARGE; + string OWNER_SKILL; + string PANIM_EXT; + string PANIM_IDLE; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + int PMODEL_IDX_HAND_LEFT; + int PMODEL_IDX_HAND_RIGHT; + string SOUND_BEAM_LOOP; + string SOUND_CHARGE; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_MELEE; + int VANIM_BEAM_IDLE; + int VANIM_BEAM_START; + int VANIM_BURST; + int VANIM_CHARGE_END; + int VANIM_CHARGE_FAIL; + int VANIM_CHARGE_START; + int VANIM_DRAW; + int VANIM_IDLE; + int VANIM_MELEE; + int VANIM_SPELL1; + int VANIM_SPELL2; + string VMODEL_FILE; + int VMODEL_IDX; + string WANIM_FLOOR; + string WANIM_HAND; + + BluntStaffA() + { + Precache("calflame_small.spr"); + BASE_LEVEL_REQ = 25; + FREQ_CHARGE = 1.5; + FINAL_CHARGE = 3.5; + MP_BURST = 30; + MP_LCOD = 30; + MP_GCOD = 100; + MP_WRAITH = 50; + BWEAPON_NAME = "Dark Staff"; + BWEAPON_DESC = "Greater staff of Affliction"; + BWEAPON_WEIGHT = 60; + BWEAPON_VALUE = 7000; + BWEAPON_INV_SPRITE_IDX = 72; + BWEAPON_HANDS = "both"; + VMODEL_FILE = "viewmodels/v_polearms.mdl"; + VMODEL_IDX = 15; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 33; + PMODEL_IDX_HANDS = 32; + PMODEL_IDX_HAND_RIGHT = 32; + PMODEL_IDX_HAND_LEFT = 32; + PANIM_IDLE = "aim_blunt"; + PANIM_EXT = "blunt"; + VANIM_IDLE = 21; + VANIM_DRAW = 21; + VANIM_MELEE = 22; + VANIM_SPELL1 = 23; + VANIM_SPELL2 = 24; + VANIM_BURST = 25; + VANIM_BEAM_START = 26; + VANIM_BEAM_IDLE = 27; + VANIM_CHARGE_START = 28; + VANIM_CHARGE_END = 29; + VANIM_CHARGE_FAIL = 30; + WANIM_FLOOR = "standard_floor_idle"; + WANIM_HAND = "standard_idle"; + ATK1_RANGE = 0; + ATK1_DMG = 0; + ATK1_DMG_RANGE = 0; + ATK1_DMG_TYPE = "target"; + ATK1_STAMINA = 0; + ATK1_SKILL = "spellcasting.affliction"; + ATK1_ACCURACY = 80; + ATK1_DELAY_STRIKE = 0.6; + ATK1_DURATION = 1.0; + ATK1_CALLBACK = "beam"; + ATK1_PANIM = "swing_blunt"; + ATK1_VANIM = VANIM_SPELL1; + SOUND_MELEE = "weapons/cbar_miss1.wav"; + ATK2_DMG = 0; + ATK2_RANGE = 0; + ATK2_VANIM = VANIM_SPELL2; + ATK2_PANIM = "sword_double_swing"; + ATK2_CALLBACK = "spell2"; + BWEAPON_CUSTOM_HITWALL = 1; + SOUND_HITWALL1 = "none"; + SOUND_HITWALL2 = "none"; + SOUND_BEAM_LOOP = "ambience/dronemachine1.wav"; + SOUND_CHARGE = "magic/spawn.wav"; + CL_FX_ID = "unset"; + } + + void cbeam_start() + { + PlayViewAnim(VANIM_BEAM_START); + ScheduleDelayedEvent(0.6, "setup_beam"); + } + + void setup_beam() + { + if ((BEAM_ON)) return; + BEAM_ON = 1; + PlayViewAnim(VANIM_BEAM_IDLE); + if (!(true)) return; + ClientEvent("new", "all", "items/blunt_staff_a_cl", GetEntityIndex(GetOwner())); + CL_FX_ID = "game.script.last_sent_id"; + DMG_BEAM = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + if (GetSkillLevel(GetOwner(), "spellcasting.affliction") < 20) + { + DMG_BEAM *= 0.1; + if (GetGameTime() > NEXT_AF_UNDERSKILL_WARN) + { + } + NEXT_AF_UNDERSKILL_WARN = GetGameTime(); + NEXT_AF_UNDERSKILL_WARN += 5.0; + SendColoredMessage(GetOwner(), GetEntityName(GetOwner()) + " underskilled req:affliction[20]"); + } + // svplaysound: svplaysound 3 10 SOUND_BEAM_LOOP + EmitSound(3, 10, SOUND_BEAM_LOOP); + if (!(true)) return; + beam_loop(); + } + + void beam_loop() + { + if (!(BEAM_ON)) return; + if (GetActiveItem(GetOwner()) != GetEntityIndex(GetOwner())) + { + int END_BEAM = 1; + } + if (!(CanAttack(GetOwner()))) + { + int END_BEAM = 1; + } + if (!(IsEntityAlive(GetOwner()))) + { + int END_BEAM = 1; + } + if ((END_BEAM)) + { + end_beam(); + CallClientItemEvent(GetOwner(), "end_beam"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ScheduleDelayedEvent(0.5, "beam_loop"); + string BEAM_END = GetEntityProperty(GetOwner(), "eyepos"); + string OWNER_VIEWANG = GetEntityProperty(GetOwner(), "viewangles"); + BEAM_END += /* TODO: $relpos */ $relpos(OWNER_VIEWANG, Vector3(0, 1280, 0)); + XDoDamage(GetEntityProperty(GetOwner(), "eyepos"), BEAM_END, DMG_BEAM, 100, GetOwner(), GetOwner(), "spellcasting.affliction", "dark", "nodecal;dmgevent:*beam"); + if ((CanAttack(GetOwner()))) return; + end_beam(); + } + + void beam_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + if (!(GAME_PVP)) + { + if ((IsValidPlayer(param2))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityMP(GetOwner()) < GetEntityProperty(GetOwner(), "maxmp"))) return; + GiveMP(GetOwner()); + } + + void game_attack1_down() + { + if ((true)) + { + if (!(CanAttack(GetOwner()))) + { + int EXIT_SUB = 1; + } + if (GetActiveItem(GetOwner()) != GetEntityIndex(GetOwner())) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if ((false)) + { + if (!("game.localplayer.canattack")) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((AM_CHARGING)) return; + if ((BEAM_ON)) return; + if ((BEAM_READY)) return; + BEAM_READY = 1; + cbeam_start(); + } + + void game__attack1() + { + if (!(BEAM_ON)) return; + end_beam(); + } + + void end_beam() + { + PlayViewAnim(VANIM_IDLE); + BEAM_ON = 0; + BEAM_READY = 0; + if (!(true)) return; + // svplaysound: svplaysound 3 0 SOUND_BEAM_LOOP + EmitSound(3, 0, SOUND_BEAM_LOOP); + ClientEvent("update", "all", CL_FX_ID, "end_fx"); + CL_FX_ID = "unset"; + } + + void bweapon_effect_remove() + { + BEAM_READY = 0; + if ((BEAM_ON)) + { + end_beam(); + } + if ((AM_CHARGING)) + { + end_charge(); + } + } + + void game_hitworld() + { + if ((BEAM_ON)) return; + } + + void game_+attack2() + { + if ((true)) + { + if (!(CanAttack(GetOwner()))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((false)) + { + if (!("game.localplayer.canattack")) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (("game.item.attacking")) return; + if ((BEAM_READY)) return; + if ((BEAM_ON)) return; + if (!(GetGameTime() > NEXT_CHARGE)) return; + NEXT_CHARGE = GetGameTime(); + NEXT_CHARGE += 20.0; + if (!(AM_CHARGING)) + { + if ((true)) + { + } + // TODO: splayviewanim ent_me VANIM_CHARGE_START + } + AM_CHARGING = 1; + CUR_CHARGE = 1; + if ((true)) + { + SetScriptFlags(GetOwner(), "add", "af_staff", "nopush", 1, -1, "none"); + ApplyEffect(GetOwner(), "effects/effect_tempnomove"); + OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + MAX_CHARGE = 0; + if (OWNER_SKILL >= 25) + { + MAX_CHARGE = 1.5; + } + if (OWNER_SKILL >= 30) + { + MAX_CHARGE = 2.5; + } + if (OWNER_SKILL >= 35) + { + MAX_CHARGE = 3.5; + } + CallClientItemEvent(GetOwner(), "cl_set_maxcharge", MAX_CHARGE); + } + FREQ_CHARGE("add_charge"); + if (!(true)) return; + if (OWNER_SKILL >= 25) + { + ScheduleDelayedEvent(0.75, "repulse_burst"); + } + PlayOwnerAnim("critical", "aim_sword_double_idle"); + ClientEvent("new", GetOwner(), "items/blunt_staff_a_charge_cl", GetEntityIndex(GetOwner())); + CL_STAFF_EYES = "game.script.last_sent_id"; + } + + void repulse_burst() + { + if (!(AM_CHARGING)) return; + if (GetEntityMP(GetOwner()) < MP_BURST) + { + SendColoredMessage(GetOwner(), "Dark Staff: Not enough mana for Dark Burst"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + string BURST_DMG = OWNER_SKILL; + CallExternal(GetOwner(), "ext_repel_burst", BURST_DMG, 128, 0, "dark_effect", "spellcasting.affliction", 800, 0); + string SPELL_POS = GetEntityOrigin(GetOwner()); + SPELL_POS = "z"; + ClientEvent("new", "all", "effects/sfx_dark_burst", SPELL_POS, 8.0); + CL_DARK_FX = "game.script.last_sent_id"; + } + + void cl_set_maxcharge() + { + MAX_CHARGE = param1; + } + + void add_charge() + { + if (!(AM_CHARGING)) return; + if (!(CUR_CHARGE < MAX_CHARGE)) return; + CUR_CHARGE += 0.5; + if (GetActiveItem(GetOwner()) != GetEntityIndex(GetOwner())) + { + int END_CHARGE = 1; + } + if (!(CanAttack(GetOwner()))) + { + int END_CHARGE = 1; + } + if (!(IsEntityAlive(GetOwner()))) + { + int END_CHARGE = 1; + } + if ((END_CHARGE)) + { + end_charge(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + FREQ_CHARGE("add_charge"); + if (!(true)) return; + if (!(IsEntityAlive(GetOwner()))) return; + CallExternal(GetOwner(), "ext_repel_burst", 0, 128, 0, "none", "none", 300, (GetEntityMaxHealth(GetOwner()) * 3), GetEntityOrigin(GetOwner())); + ClientEvent("update", GetOwner(), CL_STAFF_EYES, "add_charge_level", CUR_CHARGE); + // PlayRandomSound from: "buttons/spark1.wav", "buttons/spark2.wav", "buttons/spark4.wav" + array sounds = {"buttons/spark1.wav", "buttons/spark2.wav", "buttons/spark4.wav"}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + if (CUR_CHARGE != int(CUR_CHARGE)) + { + if (CUR_CHARGE < FINAL_CHARGE) + { + EmitSound(GetOwner(), 1, SOUND_CHARGE, 5); + } + if (CUR_CHARGE == FINAL_CHARGE) + { + EmitSound(GetOwner(), 1, SOUND_CHARGE, 10); + } + } + } + + void game__attack2() + { + if (!(AM_CHARGING)) return; + AM_CHARGING = 0; + NEXT_CHARGE = GetGameTime(); + NEXT_CHARGE += 3.0; + PlayViewAnim(VANIM_IDLE); + LogDebug("staff_charge_finish CUR_CHARGE"); + if (!(true)) return; + if (!(IsEntityAlive(GetOwner()))) return; + end_charge(); + if (!(CanAttack(GetOwner()))) return; + if ((EXIT_SUB)) return; + if (CUR_CHARGE >= 1.5) + { + if (CUR_CHARGE < 2.5) + { + } + LogDebug("lesser circle of death"); + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + SendColoredMessage(GetOwner(), "Dark Staff: Can only maintain one Lesser Circle of Death."); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetEntityMP(GetOwner()) < MP_LCOD) + { + SendColoredMessage(GetOwner(), "Dark Staff: Insufficient mana for Lesser Circle of Death"); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + GiveMP(GetOwner()); + string DMG_COD = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + CallExternal(GetOwner(), "ext_lcod", GetEntityOrigin(GetOwner()), DMG_COD, 30.0); + } + if (CUR_CHARGE >= 2.5) + { + if (CUR_CHARGE < 3.5) + { + } + LogDebug("greater circle of death"); + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + SendColoredMessage(GetOwner(), "Dark Staff: Can only maintain one Greater Circle of Death."); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetEntityMP(GetOwner()) < MP_GCOD) + { + SendColoredMessage(GetOwner(), "Dark Staff: Insufficient mana for Greater Circle of Death"); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + GiveMP(GetOwner()); + string DMG_COD = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + CallExternal(GetOwner(), "ext_gcod", GetEntityOrigin(GetOwner()), DMG_COD, 30.0); + } + if (CUR_CHARGE == 3.5) + { + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + SendColoredMessage(GetOwner(), "Dark Staff: Can only maintain one Lesser Wraith"); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetEntityMP(GetOwner()) < MP_WRAITH) + { + SendColoredMessage(GetOwner(), "Dark Staff: Insufficient mana for Lesser Wraith"); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + GiveMP(GetOwner()); + string SUMMON_POS = GetEntityOrigin(GetOwner()); + SUMMON_POS = "z"; + string OWNER_YAW = GetEntityProperty(GetOwner(), "viewangles"); + string OWNER_YAW = /* TODO: $vec.yaw */ $vec.yaw(OWNER_YAW); + SUMMON_POS += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, 64, 0)); + SpawnNPC("monsters/summon/lesser_wraith", SUMMON_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SUMMON_POS + } + } + + void end_charge() + { + if ((AM_CHARGING)) + { + AM_CHARGING = 0; + NEXT_CHARGE = GetGameTime(); + NEXT_CHARGE += 3.0; + CallClientItemEvent(GetOwner(), "cl_end_charge"); + } + if ((IsEntityAlive(GetOwner()))) + { + SetScriptFlags(GetOwner(), "remove", "af_staff"); + } + CallExternal(GetOwner(), "ext_end_tempnomove"); + ClientEvent("update", GetOwner(), CL_STAFF_EYES, "end_fx"); + ClientEvent("update", "all", CL_DARK_FX, "end_fx"); + } + + void cl_end_charge() + { + AM_CHARGING = 0; + } + +} + +} diff --git a/scripts/angelscript/items/blunt_staff_a_charge_cl.as b/scripts/angelscript/items/blunt_staff_a_charge_cl.as new file mode 100644 index 00000000..9c1d73ac --- /dev/null +++ b/scripts/angelscript/items/blunt_staff_a_charge_cl.as @@ -0,0 +1,140 @@ +#pragma context server + +namespace MS +{ + +class BluntStaffAChargeCl : CGameScript +{ + string CHARGE_COLOR; + int CHARGE_LEVEL; + int CUR_FRAME; + int FX_ACTIVE; + string FX_OWNER; + int MAX_CHARGE; + + void client_activate() + { + LogDebug("cleyes_activate"); + MAX_CHARGE = 0; + CHARGE_COLOR = Vector3(0, 255, 0); + FX_OWNER = param1; + FX_ACTIVE = 1; + CHARGE_LEVEL = 1; + CUR_FRAME = 0; + SetCallback("render", "enable"); + add_charge_level(); + ScheduleDelayedEvent(20.0, "end_fx"); + } + + void add_charge_level() + { + if (!(FX_ACTIVE)) return; + MAX_CHARGE = 0; + CHARGE_LEVEL = param1; + if (CHARGE_LEVEL == 1) + { + CHARGE_COLOR = Vector3(0, 255, 0); + } + if (CHARGE_LEVEL == 1.5) + { + MAX_CHARGE = 1; + } + if (CHARGE_LEVEL == 2) + { + CHARGE_COLOR = Vector3(255, 0, 0); + } + if (CHARGE_LEVEL == 2.5) + { + MAX_CHARGE = 1; + } + if (CHARGE_LEVEL == 3) + { + CHARGE_COLOR = Vector3(255, 255, 255); + } + if (CHARGE_LEVEL == 3.5) + { + MAX_CHARGE = 1; + } + if ((MAX_CHARGE)) + { + if (!("game.localplayer.thirdperson")) + { + } + ClientEffect("spark", /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "attachment2")); + ClientEffect("spark", /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "attachment3")); + } + if ("game.localplayer.index" == FX_OWNER) + { + if (("game.localplayer.thirdperson")) + { + } + string ANG_ADJ = /* TODO: $getcl */ $getcl(FX_OWNER, "viewangles"); + string ANG_ADJ = /* TODO: $vec.yaw */ $vec.yaw(ANG_ADJ); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, 32, 32)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPR_POS, "setup_thirdperson_flare"); + } + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + if (("game.localplayer.thirdperson")) return; + CUR_FRAME += 1; + if (CUR_FRAME > 15) + { + CUR_FRAME = 0; + } + if ((MAX_CHARGE)) + { + string EYE_POS = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "attachment2"); + ClientEffect("frameent", "sprite", "3dmflaora.spr", EYE_POS, "setup_eye_max"); + } + string EYE_POS = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "attachment2"); + ClientEffect("frameent", "sprite", "calflame_small.spr", EYE_POS, "setup_eye"); + } + + void setup_thirdperson_flare() + { + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", CHARGE_COLOR); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "frame", 0); + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + + void setup_eye() + { + ClientEffect("frameent", "set_current_prop", "renderamt", 200); + ClientEffect("frameent", "set_current_prop", "rendermode", "glow"); + ClientEffect("frameent", "set_current_prop", "rendercolor", CHARGE_COLOR); + ClientEffect("frameent", "set_current_prop", "scale", 1.5); + ClientEffect("frameent", "set_current_prop", "frame", CUR_FRAME); + } + + void setup_eye_max() + { + ClientEffect("frameent", "set_current_prop", "renderamt", 200); + ClientEffect("frameent", "set_current_prop", "rendermode", "glow"); + ClientEffect("frameent", "set_current_prop", "rendercolor", CHARGE_COLOR); + ClientEffect("frameent", "set_current_prop", "scale", 1.5); + ClientEffect("frameent", "set_current_prop", "frame", 0); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_staff_a_cl.as b/scripts/angelscript/items/blunt_staff_a_cl.as new file mode 100644 index 00000000..12ab7785 --- /dev/null +++ b/scripts/angelscript/items/blunt_staff_a_cl.as @@ -0,0 +1,112 @@ +#pragma context server + +namespace MS +{ + +class BluntStaffACl : CGameScript +{ + float BEAM_AMP; + float BEAM_WIDTH; + int FX_ACTIVE; + string FX_OWNER; + string NEXT_SPARK; + + BluntStaffACl() + { + BEAM_WIDTH = 10.0; + BEAM_AMP = 0.01; + } + + void client_activate() + { + FX_OWNER = param1; + SetCallback("render", "enable"); + FX_ACTIVE = 1; + fx_loop(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "fx_loop"); + if (GetGameTime() > NEXT_SPARK) + { + NEXT_SPARK = GetGameTime(); + NEXT_SPARK += Random(0.25, 1.0); + string BEAM_START = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment2"); + string BEAM_END = /* TODO: $getcl */ $getcl(FX_OWNER, "center"); + BEAM_END += "z"; + string OWNER_VIEWANGS = /* TODO: $getcl */ $getcl(FX_OWNER, "viewangles"); + BEAM_END += /* TODO: $relpos */ $relpos(OWNER_VIEWANGS, Vector3(0, 1280, 0)); + string TRACE_LINE = TraceLine(BEAM_START, BEAM_END); + if (TRACE_LINE != BEAM_END) + { + } + ClientEffect("spark", TRACE_LINE); + int RND_SPARK = RandomInt(1, 3); + if (RND_SPARK == 1) + { + EmitSound3D("buttons/spark1.wav", 5, TRACE_LINE); + } + if (RND_SPARK == 2) + { + EmitSound3D("buttons/spark2.wav", 5, TRACE_LINE); + } + if (RND_SPARK == 3) + { + EmitSound3D("buttons/spark4.wav", 5, TRACE_LINE); + } + } + if ("game.localplayer.index" == FX_OWNER) + { + if (!("game.localplayer.thirdperson")) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + string BEAM_START = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment2"); + string BEAM_END = BEAM_START; + string OWNER_VIEWANGS = /* TODO: $getcl */ $getcl(FX_OWNER, "viewangles"); + BEAM_END += /* TODO: $relpos */ $relpos(OWNER_VIEWANGS, Vector3(0, 1280, 0)); + ClientEffect("beam_end", FX_OWNER, 1, BEAM_END, "lgtning.spr", 0.25, BEAM_WIDTH, BEAM_AMP, 0.3, 0.1, 30, Vector3(2, 0, 0)); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + if (!("game.localplayer.index" == FX_OWNER)) return; + if (("game.localplayer.thirdperson")) return; + string BEAM_START = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "attachment2"); + string BEAM_END = /* TODO: $getcl */ $getcl(FX_OWNER, "center"); + BEAM_END += "z"; + string OWNER_VIEWANGS = /* TODO: $getcl */ $getcl(FX_OWNER, "viewangles"); + BEAM_END += /* TODO: $relpos */ $relpos(OWNER_VIEWANGS, Vector3(0, 1280, 0)); + string TRACE_LINE = TraceLine(BEAM_START, BEAM_END); + ClientEffect("beam_points", BEAM_START, TRACE_LINE, "lgtning.spr", 0.001, BEAM_WIDTH, BEAM_AMP, 0.3, 0.1, 30, Vector3(2, 0, 0)); + ClientEffect("frameent", "sprite", "3dmflaora.spr", BEAM_START, "setup_flare"); + } + + void setup_flare() + { + ClientEffect("frameent", "set_current_prop", "renderamt", 200); + ClientEffect("frameent", "set_current_prop", "rendermode", "add"); + ClientEffect("frameent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("frameent", "set_current_prop", "scale", 0.25); + ClientEffect("frameent", "set_current_prop", "frame", 0); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_staff_f.as b/scripts/angelscript/items/blunt_staff_f.as new file mode 100644 index 00000000..4176f3df --- /dev/null +++ b/scripts/angelscript/items/blunt_staff_f.as @@ -0,0 +1,444 @@ +#pragma context server + +#include "items/base_elemental_resist.as" +#include "items/base_weapon_new.as" + +namespace MS +{ + +class BluntStaffF : CGameScript +{ + float ATK1_ACCURACY; + string ATK1_CALLBACK; + float ATK1_DELAY_STRIKE; + int ATK1_DMG; + int ATK1_DMG_RANGE; + string ATK1_DMG_TYPE; + float ATK1_DURATION; + string ATK1_PANIM; + int ATK1_RANGE; + string ATK1_SKILL; + int ATK1_STAMINA; + string ATK1_VANIM; + string ATK2_CALLBACK; + int ATK2_DMG; + string ATK2_PANIM; + int ATK2_RANGE; + string ATK2_VANIM; + int BASE_LEVEL_REQ; + string BURN_TARG_ORG; + int BURST_ATTACK; + string BURST_ORG; + string BWEAPON_DESC; + string BWEAPON_HANDS; + int BWEAPON_INV_SPRITE_IDX; + string BWEAPON_NAME; + int BWEAPON_VALUE; + int BWEAPON_WEIGHT; + float DOT_RATIO; + int ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int ELM_WEAPON; + int IN_BURST_ATTACK; + string MELEE_ATTACK; + int MP_BURST; + int MP_METEOR; + int MP_VOLCANO; + string NEXT_BURST; + string NEXT_BURST_ATTEMPT; + string PANIM_EXT; + string PANIM_IDLE; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + int PMODEL_IDX_HAND_LEFT; + int PMODEL_IDX_HAND_RIGHT; + string SOUND_MELEE; + string SPELL_POS; + int STAFF_RADIUS1; + int STAFF_RADIUS2; + int VANIM_BURST; + int VANIM_DRAW; + int VANIM_IDLE; + int VANIM_MELEE; + int VANIM_SPELL1; + int VANIM_SPELL2; + string VMODEL_FILE; + int VMODEL_IDX; + int VOLCANO_ON; + string WANIM_FLOOR; + string WANIM_HAND; + + BluntStaffF() + { + BASE_LEVEL_REQ = 30; + MP_VOLCANO = 100; + MP_METEOR = 75; + MP_BURST = 30; + STAFF_RADIUS1 = 96; + STAFF_RADIUS2 = 256; + BWEAPON_NAME = "Phlame's Staff"; + BWEAPON_DESC = "A demonic staff of fire"; + BWEAPON_WEIGHT = 60; + BWEAPON_VALUE = 7000; + BWEAPON_INV_SPRITE_IDX = 52; + BWEAPON_HANDS = "both"; + ELM_NAME = "phlame"; + ELM_TYPE = "cold"; + ELM_AMT = 20; + ELM_WEAPON = 1; + VMODEL_FILE = "viewmodels/v_polearms.mdl"; + VMODEL_IDX = 13; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 28; + PMODEL_IDX_HANDS = 29; + PMODEL_IDX_HAND_RIGHT = 29; + PMODEL_IDX_HAND_LEFT = 29; + PANIM_IDLE = "aim_blunt"; + PANIM_EXT = "blunt"; + VANIM_IDLE = 21; + VANIM_DRAW = 21; + VANIM_MELEE = 22; + VANIM_SPELL1 = 23; + VANIM_SPELL2 = 24; + VANIM_BURST = 25; + WANIM_FLOOR = "standard_floor_idle"; + WANIM_HAND = "standard_idle"; + ATK1_RANGE = 110; + ATK1_DMG = 200; + ATK1_DMG_RANGE = 20; + ATK1_DMG_TYPE = "fire"; + ATK1_STAMINA = 0; + ATK1_SKILL = "spellcasting.fire"; + ATK1_ACCURACY = 0.8; + ATK1_DELAY_STRIKE = 0.6; + ATK1_DURATION = 1.0; + ATK1_CALLBACK = "spell1"; + ATK1_PANIM = "swing_blunt"; + ATK1_VANIM = VANIM_SPELL1; + SOUND_MELEE = "weapons/cbar_miss1.wav"; + ATK2_DMG = 0; + ATK2_RANGE = 0; + ATK2_VANIM = VANIM_SPELL2; + ATK2_PANIM = "sword_double_swing"; + ATK2_CALLBACK = "spell2"; + DOT_RATIO = 0.5; + } + + void OnDeploy() override + { + if (!(true)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + if ((BITEM_UNDERSKILLED)) return; + viewfinder_loop(); + ScheduleDelayedEvent(0.1, "elm_activate_effect"); + } + + void viewfinder_loop() + { + if (!(true)) return; + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int BEW_IS_WEILDED = 1; + } + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int BEW_IS_WEILDED = 1; + } + if ((BEW_IS_WEILDED)) + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "phlames_viewfinder_on", GetEntityIndex(GetOwner())); + ScheduleDelayedEvent(5.0, "cl_refresh_loop"); + } + else + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "phlames_viewfinder_off"); + } + } + + void bweapon_effect_remove() + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "phlames_viewfinder_off"); + } + + void spell1_start() + { + PlayOwnerAnim("critical", ATK1_PANIM); + string OWNER_TARG = GetEntityProperty(GetOwner(), "target"); + if (!(IsEntityAlive(OWNER_TARG))) + { + int DO_MELEE = 0; + } + else + { + if (GetEntityRange(OWNER_TARG) < ATK1_RANGE) + { + int DO_MELEE = 1; + } + } + if ((BITEM_UNDERSKILLED)) + { + int DO_MELEE = 1; + } + if (!(DO_MELEE)) + { + SetAttackProp("ent_me", 0); + MELEE_ATTACK = 0; + // TODO: splayviewanim ent_me VANIM_SPELL1 + } + else + { + SetAttackProp("ent_me", 0); + MELEE_ATTACK = 1; + EmitSound(GetOwner(), 1, SOUND_MELEE, 10); + // TODO: splayviewanim ent_me VANIM_MELEE + } + } + + void get_spell_pos() + { + string L_OWNER_VIEW = GetEntityProperty(GetOwner(), "viewangles"); + string L_SEAL_POS = GetEntityOrigin(GetOwner()); + string TRACE_START = L_SEAL_POS; + string TRACE_END = L_SEAL_POS; + TRACE_END += /* TODO: $relpos */ $relpos(L_OWNER_VIEW, Vector3(0, 1000, 0)); + string reg.trace.ignorenet = GetEntityIndex(GetOwner()); + string MY_OWNER = GetEntityIndex(GetOwner()); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + TRACE_LINE = "z"; + string OWNER_ORG = GetEntityOrigin(GetOwner()); + if (Distance(L_SEAL_POS, OWNER_ORG) < 1024) + { + SPELL_POS = TRACE_LINE; + } + else + { + SPELL_POS = "outofrange"; + EmitSound(GetOwner(), 1, "magic/energy1.wav", 10); + SendColoredMessage(GetOwner(), "Out of range."); + } + } + + void spell1_strike() + { + if (!(true)) return; + if (!(MELEE_ATTACK)) + { + get_spell_pos(); + if (SPELL_POS != "outofrange") + { + } + ClientEvent("new", "all", "effects/sfx_fire_staff", SPELL_POS); + BURN_TARG_ORG = SPELL_POS; + BURN_TARG_ORG += "z"; + string DOT_FIRE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + XDoDamage(BURN_TARG_ORG, STAFF_RADIUS1, DOT_FIRE, 0.01, GetOwner(), GetOwner(), "spellcasting.fire", "fire_effect"); + } + else + { + if ((IsEntityAlive(param3))) + { + } + if ((IsValidPlayer(param3))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetRelationship(param3) == "enemy") + { + } + string DOT_FIRE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + } + MELEE_ATTACK = 0; + } + + void game_dodamage() + { + if ((param1)) + { + if (!(GAME_PVP)) + { + if ((IsValidPlayer(param2))) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetRelationship(param2) == "enemy") + { + } + string DOT_FIRE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + DOT_FIRE *= DOT_RATIO; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE, "spellcasting.fire"); + if ((BURST_ATTACK)) + { + } + string MAX_HP = GetEntityMaxHealth(GetOwner()); + MAX_HP *= 3; + MAX_HP = max(2000, min(10000, MAX_HP)); + if (GetEntityHealth(param2) < MAX_HP) + { + } + string CUR_TARG = param2; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 200))); + } + } + + void spell2_start() + { + PlayOwnerAnim("critical", ATK1_PANIM); + // TODO: splayviewanim ent_me VANIM_SPELL2 + } + + void spell2_strike() + { + if (!(true)) return; + if (GetEntityMP(GetOwner()) < MP_METEOR) + { + SendColoredMessage(GetOwner(), "Insufficient mana for Meteor."); + EmitSound(GetOwner(), 1, "magic/energy1.wav", 10); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + get_spell_pos(); + if (!(SPELL_POS != "outofrange")) return; + if (!(/* TODO: $get_under_sky */ $get_under_sky(SPELL_POS))) + { + SendColoredMessage(GetOwner(), "Can only summon Meteor under sky."); + EmitSound(GetOwner(), 1, "magic/energy1.wav", 10); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TRACE_START = SPELL_POS; + string TRACE_END = SPELL_POS; + TRACE_END += "z"; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + string METEOR_SPAWN = TRACE_LINE; + METEOR_SPAWN += "z"; + GiveMP(GetOwner()); + SpawnNPC("monsters/summon/meteor_deployer", METEOR_SPAWN, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()) + } + + void volcano_start() + { + PlayOwnerAnim("critical", ATK1_PANIM); + // TODO: splayviewanim ent_me VANIM_SPELL2 + } + + void volcano_strike() + { + if (!(true)) return; + get_spell_pos(); + if (!(SPELL_POS != "outofrange")) return; + if ((VOLCANO_ON)) + { + SendColoredMessage(GetOwner(), "Phlame's Staff can only sustain one volcano at a time."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetEntityMP(GetOwner()) < MP_VOLCANO) + { + SendColoredMessage(GetOwner(), "Insufficient mana for Volcano."); + EmitSound(GetOwner(), 1, "magic/energy1.wav", 10); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + VOLCANO_ON = 1; + SpawnNPC("monsters/summon/preset_volcano", SPELL_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 0, 20, "spellcasting.fire" + ScheduleDelayedEvent(20.0, "volcano_reset"); + } + + void volcano_reset() + { + VOLCANO_ON = 0; + } + + void bitem_register_attacks() + { + int reg.attack.priority = 2; + float reg.attack.chargeamt = 2.0; + string reg.attack.type = ATK2_TYPE; + string reg.attack.keys = ATK2_KEYS; + string reg.attack.range = ATK2_RANGE; + string reg.attack.dmg = ATK2_DMG; + string reg.attack.dmg.range = ATK2_DMG_RANGE; + string reg.attack.dmg.type = ATK2_DMG_TYPE; + string reg.attack.energydrain = ATK2_STAMINA; + string reg.attack.stat = ATK2_SKILL; + string reg.attack.hitchance = ATK2_ACCURACY; + string reg.attack.delay.strike = ATK2_DELAY_STRIKE; + string reg.attack.delay.end = ATK2_DURATION; + string reg.attack.ofs.startpos = ATK2_OFS; + string reg.attack.ofs.aimang = ATK2_ANG; + string reg.attack.callback = "volcano"; + string reg.attack.noise = ATK2_NOISE; + string reg.attack.mpdrain = ATK2_MPDRAIN; + string reg.attack.dmg.multi = ATK2_DMG_MULTI; + string reg.attack.noautoaim = ATK2_NO_AUTOAIM; + string reg.attack.reqskill = ATK2_SKILL_LEVEL; + reg.attack.reqskill += ATK2_ADD_SKILL_REQ; + if ((ATK2_IS_PROJECTILE)) + { + string reg.attack.ammodrain = ATK2_AMMODRAIN; + string reg.attack.projectile = ATK2_PROJECTILE; + string reg.attack.COF = ATK2_COF; + } + RegisterAttack(); + } + + void game_+attack2() + { + if (!(true)) return; + if (("game.item.attacking")) return; + if (!(CanAttack(GetOwner()))) return; + if (!(GetGameTime() > NEXT_BURST_ATTEMPT)) return; + NEXT_BURST_ATTEMPT = GetGameTime(); + NEXT_BURST_ATTEMPT += 1.0; + if (GetEntityMP(GetOwner()) < MP_BURST) + { + SendColoredMessage(GetOwner(), "Insufficient mana for flame burst."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetGameTime() > NEXT_BURST)) return; + NEXT_BURST = GetGameTime(); + NEXT_BURST += 5.0; + IN_BURST_ATTACK = 1; + // TODO: splayviewanim ent_me VANIM_BURST + GiveMP(GetOwner()); + ScheduleDelayedEvent(1.0, "do_burst_attack"); + } + + void do_burst_attack() + { + BURST_ORG = GetEntityOrigin(GetOwner()); + BURST_ORG = "z"; + ClientEvent("new", "all", "effects/sfx_flame_repulse", BURST_ORG); + BURST_ATTACK = 1; + ScheduleDelayedEvent(0.1, "end_burst_attack"); + BURST_ORG += "z"; + string DOT_FIRE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + DOT_FIRE *= 1.5; + XDoDamage(BURST_ORG, STAFF_RADIUS2, DOT_FIRE, 0.01, GetOwner(), GetOwner(), "spellcasting.fire", "fire_effect"); + } + + void end_burst_attack() + { + BURST_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/items/blunt_staff_f_old.as b/scripts/angelscript/items/blunt_staff_f_old.as new file mode 100644 index 00000000..71ee4195 --- /dev/null +++ b/scripts/angelscript/items/blunt_staff_f_old.as @@ -0,0 +1,102 @@ +#pragma context server + +#include "items/base_elemental_resist.as" +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntStaffFOld : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + int ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int ELM_WEAPON; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + + BluntStaffFOld() + { + BASE_LEVEL_REQ = 30; + ELM_NAME = "phlame"; + ELM_TYPE = "cold"; + ELM_AMT = 20; + ELM_WEAPON = 1; + MELEE_RANGE = 110; + MELEE_DMG_DELAY = 0.4; + MELEE_ATK_DURATION = 1.0; + MELEE_ENERGY = 2; + MELEE_DMG = 300; + MELEE_DMG_RANGE = 20; + MELEE_ACCURACY = 0.8; + MELEE_PARRY_AUGMENT = 0.2; + MELEE_DMG_TYPE = "fire"; + MELEE_STAT = "spellcasting.fire"; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 12; + MODEL_WORLD = "weapons/p_weapons4.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "standard"; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "pole_swing"; + } + + void weapon_spawn() + { + SetName("Phlame s Staff"); + SetDescription("A demonic staff of fire"); + SetWeight(60); + SetSize(10); + SetValue(7000); + SetHUDSprite("hand", "hammer"); + SetHUDSprite("trade", 52); + } + + void OnDeploy() override + { + if (!(true)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + cl_refresh_loop(); + } + + void cl_refresh_loop() + { + if (!(true)) return; + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int BEW_IS_WEILDED = 1; + } + if (GetEntityIndex(GetOwner()) == GetEntityProperty(GetOwner(), "scriptvar")) + { + int BEW_IS_WEILDED = 1; + } + if ((BEW_IS_WEILDED)) + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "phlames_viewfinder_on", GetEntityIndex(GetOwner())); + ScheduleDelayedEvent(5.0, "cl_refresh_loop"); + } + else + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "phlames_viewfinder_off"); + } + } + +} + +} diff --git a/scripts/angelscript/items/blunt_staff_i.as b/scripts/angelscript/items/blunt_staff_i.as new file mode 100644 index 00000000..8d506518 --- /dev/null +++ b/scripts/angelscript/items/blunt_staff_i.as @@ -0,0 +1,537 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntStaffI : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + string CL_ICEMAN_FX_INDEX; + int CONSEC_ATTACKS; + int CUSTOM_REGISTER_CHARGE1; + float DEMON_ATK_DURATION; + float DEMON_DMG_DELAY; + float DOT_RATIO; + string GAME_PVP; + int ICEMAN_MP; + int ICEMAN_ON; + string ICEMAN_YAW; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + string MELEE_ATTACK; + string MELEE_CALLBACK; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_STAT; + string MELEE_TARG; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string NEXT_ICEMAN; + string OLD_MELEE_TARG; + string OWNER_SKILL; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + int SLOW_LOOP_ACTIVE; + string SPECIAL_02_CALLBACK; + float SPECIAL_02_DELAY_END; + float SPECIAL_02_DELAY_STRIKE; + int SPECIAL_02_MP; + int SPECIAL_02_RANGE; + + BluntStaffI() + { + BASE_LEVEL_REQ = 25; + ICEMAN_MP = 1; + DOT_RATIO = 0.5; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.4; + MELEE_ATK_DURATION = 0.9; + DEMON_DMG_DELAY = 0.25; + DEMON_ATK_DURATION = 0.7; + MELEE_ENERGY = 2; + MELEE_DMG = 200; + MELEE_DMG_RANGE = 20; + MELEE_ACCURACY = 0.8; + MELEE_PARRY_AUGMENT = 0.2; + MELEE_DMG_TYPE = "cold"; + MELEE_STAT = "spellcasting.ice"; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 11; + MODEL_WORLD = "weapons/p_weapons4.mdl"; + MODEL_BODY_OFS = 25; + ANIM_PREFIX = "standard"; + SPECIAL_02_CALLBACK = "attack_lance"; + SPECIAL_02_DELAY_STRIKE = 0.4; + SPECIAL_02_DELAY_END = 0.9; + SPECIAL_02_MP = 30; + SPECIAL_02_RANGE = 0; + CUSTOM_REGISTER_CHARGE1 = 1; + MELEE_CALLBACK = "attack_bolt"; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "pole_swing"; + } + + void weapon_spawn() + { + SetName("Ice Staff"); + SetDescription("A staff of elemental ice"); + SetWeight(30); + SetSize(10); + SetValue(5000); + SetHUDSprite("hand", "hammer"); + SetHUDSprite("trade", 48); + } + + void OnDeploy() override + { + if (!(true)) return; + CONSEC_ATTACKS = 0; + GAME_PVP = "game.pvp"; + OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.ice"); + } + + void attack_bolt_start() + { + if (!(true)) return; + PlayOwnerAnim("once", PLAYERANIM_SWING); + string OWNER_TARGET = GetEntityProperty(GetOwner(), "target"); + if ((IsEntityAlive(OWNER_TARGET))) + { + if (GetEntityRange(OWNER_TARGET) <= MELEE_RANGE) + { + } + LogDebug("attack_bolt_start GetEntityProperty(GetOwner(), "target") GetEntityRange(OWNER_TARGET)"); + MELEE_ATTACK = 1; + // TODO: splayviewanim ent_me 2 + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((BITEM_UNDERSKILLED)) + { + MELEE_ATTACK = 1; + // TODO: splayviewanim ent_me 2 + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + MELEE_ATTACK = 0; + // TODO: splayviewanim ent_me 9 + } + + void attack_bolt_strike() + { + if (!(OWNER_SKILL > BASE_LEVEL_REQ)) return; + if (!(MELEE_ATTACK)) + { + if ((IsEntityAlive(param3))) + { + if (GetEntityRange(param3) < 150) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + EmitSound(GetOwner(), 0, "magic/ice_strike.wav", 10); + CallExternal(GetOwner(), "ext_tossprojectile", "proj_staff_ice_bolt", "view", "none", 400, 0, 0, "none"); + } + else + { + if ((IsEntityAlive(param3))) + { + } + MELEE_TARG = param3; + if ((IsValidPlayer(MELEE_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetRelationship(MELEE_TARG) == "enemy") + { + } + if (MELEE_TARG == OLD_MELEE_TARG) + { + CONSEC_ATTACKS += 1; + } + else + { + CONSEC_ATTACKS = 0; + } + OLD_MELEE_TARG = MELEE_TARG; + if (CONSEC_ATTACKS == 5) + { + if ((GetEntityProperty(param3, "scriptvar"))) + { + CONSEC_ATTACKS = 0; + string L_DOT = OWNER_SKILL; + L_DOT *= DOT_RATIO; + ApplyEffect(param3, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), L_DOT); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string L_MAX_HP = GetEntityMaxHealth(GetOwner()); + L_MAX_HP *= 3.0; + if (L_MAX_HP < 2000) + { + int L_MAX_HP = 2000; + } + if (GetEntityHealth(param3) < L_MAX_HP) + { + } + if (GetEntityMP(GetOwner()) > 30) + { + } + GiveMP(GetOwner()); + ApplyEffect(param3, "effects/dot_cold_freeze", 5.0, GetEntityIndex(GetOwner()), 0, "spellcasting.ice", L_MAX_HP); + CONSEC_ATTACKS = 0; + } + else + { + string L_DOT = OWNER_SKILL; + L_DOT *= DOT_RATIO; + ApplyEffect(param3, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), L_DOT); + if ((GetEntityProperty(param3, "scriptvar"))) + { + CONSEC_ATTACKS = 0; + } + } + LogDebug("attack_bolt_strike CONSEC_ATTACKS"); + } + MELEE_ATTACK = 0; + } + + void attack_lance_start() + { + PlayViewAnim(9); + PlayOwnerAnim("once", PLAYERANIM_SWING); + } + + void attack_lance_strike() + { + if ((IsEntityAlive(param3))) + { + if (GetEntityRange(param3) < 150) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + EmitSound(GetOwner(), 0, "magic/ice_strike.wav", 10); + CallExternal(GetOwner(), "ext_tossprojectile", "proj_staff_icelance", "view", "none", 400, 0, 0, "none"); + } + + void game_+attack2() + { + if (!(true)) return; + if (!(OWNER_SKILL > BASE_LEVEL_REQ)) return; + if (!(CanAttack(GetOwner()))) return; + if ((ICEMAN_ON)) return; + if (!(GetGameTime() > NEXT_ICEMAN)) return; + NEXT_ICEMAN = GetGameTime(); + NEXT_ICEMAN += 0.25; + ICEMAN_ON = 1; + if (GetEntityMP(GetOwner()) < ICEMAN_MP) + { + SendColoredMessage(GetOwner(), "Ice Staff: Not enough " + MP + "for Ice Slide " + ICEMAN_MP); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + EmitSound(GetOwner(), 0, "magic/frost_pulse.wav", 10); + CallExternal(GetOwner(), "ext_ice_staff_on"); + ClientEvent("new", "all", "items/blunt_staff_i_cl", GetEntityIndex(GetOwner())); + CL_ICEMAN_FX_INDEX = "game.script.last_sent_id"; + ICEMAN_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + CallExternal(GetOwner(), "ext_removed_effects", "nojump"); + ApplyEffect(GetOwner(), "effects/effect_nojump", GetEntityIndex(GetOwner())); + PlayOwnerAnim("hold", "nod_yes"); + do_iceman_loop(); + } + + void do_iceman_loop() + { + if (!(ICEMAN_ON)) return; + if (GetEntityMP(GetOwner()) > ICEMAN_MP) + { + if ((GetEntityProperty(GetOwner(), "inhand"))) + { + ScheduleDelayedEvent(0.1, "do_iceman_loop"); + } + else + { + end_iceman(); + } + } + else + { + end_iceman(); + } + if (!(IsOnGround(GetOwner()))) + { + string ORG_VEL = GetEntityVelocity(GetOwner()); + string CUR_VEL = ORG_VEL; + CUR_VEL *= 0.75; + if ((ORG_VEL).z < 0) + { + CUR_VEL = "z"; + } + SetVelocity(GetOwner(), CUR_VEL); + } + else + { + string L_LAST_PUSH = GetEntityProperty(GetOwner(), "scriptvar"); + L_LAST_PUSH += 3.0; + LogDebug("do_iceman_loop L_LAST_PUSH"); + if (GetGameTime() < L_LAST_PUSH) + { + string ORG_VEL = GetEntityVelocity(GetOwner()); + string CUR_VEL = ORG_VEL; + CUR_VEL *= 0.25; + if ((ORG_VEL).z < 0) + { + CUR_VEL = "z"; + } + SetVelocity(GetOwner(), CUR_VEL); + } + else + { + GiveMP(GetOwner()); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, ICEMAN_YAW, 0), Vector3(0, 1000, 0))); + } + } + } + + void game__attack2() + { + if (!(true)) return; + if (!(ICEMAN_ON)) return; + end_iceman(); + } + + void end_iceman() + { + PlayOwnerAnim("break", "nod_yes"); + CallExternal(GetOwner(), "ext_ice_staff_off"); + ICEMAN_ON = 0; + ClientEvent("update", "all", CL_ICEMAN_FX_INDEX, "end_fx"); + RemoveEffect(GetOwner(), "effect_nojump"); + if (!(IsEntityAlive(GetOwner()))) return; + SLOW_LOOP_ACTIVE = 1; + slow_down(); + ScheduleDelayedEvent(1.0, "end_slow_down"); + } + + void slow_down() + { + if ((ICEMAN_ON)) return; + if (!(SLOW_LOOP_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "slow_down"); + string L_LAST_PUSH = GetEntityProperty(GetOwner(), "scriptvar"); + L_LAST_PUSH += 3.0; + if (GetGameTime() < L_LAST_PUSH) + { + int SLOW_DOWN = 1; + } + if (!(IsOnGround(GetOwner()))) + { + int SLOW_DOWN = 1; + } + if ((SLOW_DOWN)) + { + string ORG_VEL = GetEntityVelocity(GetOwner()); + string CUR_VEL = ORG_VEL; + CUR_VEL *= 0.75; + if ((ORG_VEL).z < 0) + { + CUR_VEL = "z"; + } + SetVelocity(GetOwner(), CUR_VEL); + } + } + + void end_slow_down() + { + SLOW_LOOP_ACTIVE = 0; + } + + void bs_global_command() + { + if (!(param3 == "death")) return; + if (!(GetEntityIndex(GetOwner()) == param1)) return; + if (!(ICEMAN_ON)) return; + end_iceman(); + } + + void register_charge1() + { + string reg.attack.type = "strike-land"; + string reg.attack.keys = "+attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 1; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "attack2_bolt"; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 1; + string reg.attack.keys = "-attack1"; + reg.attack.dmg *= 2; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 2; + if (BASE_LEVEL_REQ > reg.attack.reqskill) + { + reg.attack.reqskill += BASE_LEVEL_REQ; + } + RegisterAttack(); + } + + void attack2_bolt_start() + { + if (!(true)) return; + LogDebug("attack2_bolt_start"); + PlayOwnerAnim("once", PLAYERANIM_SWING); + string OWNER_TARGET = GetEntityProperty(GetOwner(), "target"); + if ((IsEntityAlive(OWNER_TARGET))) + { + if (GetEntityRange(OWNER_TARGET) <= MELEE_RANGE) + { + } + LogDebug("attack_bolt_start GetEntityProperty(GetOwner(), "target") GetEntityRange(OWNER_TARGET)"); + MELEE_ATTACK = 1; + // TODO: splayviewanim ent_me 2 + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((BITEM_UNDERSKILLED)) + { + MELEE_ATTACK = 1; + // TODO: splayviewanim ent_me 2 + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + MELEE_ATTACK = 0; + // TODO: splayviewanim ent_me 9 + } + + void attack2_bolt_strike() + { + if (!(OWNER_SKILL > BASE_LEVEL_REQ)) return; + if (!(MELEE_ATTACK)) + { + if ((IsEntityAlive(param3))) + { + if (GetEntityRange(param3) < 150) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + EmitSound(GetOwner(), 0, "magic/ice_strike.wav", 10); + CallExternal(GetOwner(), "ext_tossprojectile", "proj_staff_ice_bolt2", "view", "none", 400, 0, 0, "none"); + } + else + { + if ((IsEntityAlive(param3))) + { + } + MELEE_TARG = param3; + if ((IsValidPlayer(MELEE_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetRelationship(MELEE_TARG) == "enemy") + { + } + if (MELEE_TARG == OLD_MELEE_TARG) + { + CONSEC_ATTACKS += 1; + } + else + { + CONSEC_ATTACKS = 0; + } + OLD_MELEE_TARG = MELEE_TARG; + if (CONSEC_ATTACKS == 5) + { + if ((GetEntityProperty(param3, "scriptvar"))) + { + CONSEC_ATTACKS = 0; + string L_DOT = OWNER_SKILL; + L_DOT *= DOT_RATIO; + ApplyEffect(param3, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), L_DOT); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string L_MAX_HP = GetEntityMaxHealth(GetOwner()); + L_MAX_HP *= 3.0; + if (L_MAX_HP < 2000) + { + int L_MAX_HP = 2000; + } + if (GetEntityHealth(param3) < L_MAX_HP) + { + } + if (GetEntityMP(GetOwner()) > 30) + { + } + GiveMP(GetOwner()); + ApplyEffect(param3, "effects/dot_cold_freeze", 5.0, GetEntityIndex(GetOwner()), 0, "spellcasting.ice", L_MAX_HP); + CONSEC_ATTACKS = 0; + } + else + { + string L_DOT = OWNER_SKILL; + L_DOT *= DOT_RATIO; + ApplyEffect(param3, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), L_DOT); + if ((GetEntityProperty(param3, "scriptvar"))) + { + CONSEC_ATTACKS = 0; + } + } + LogDebug("attack_bolt_strike CONSEC_ATTACKS"); + } + MELEE_ATTACK = 0; + } + + void game_putinpack() + { + if (!(ICEMAN_ON)) return; + end_iceman(); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_staff_i_cl.as b/scripts/angelscript/items/blunt_staff_i_cl.as new file mode 100644 index 00000000..3e47c531 --- /dev/null +++ b/scripts/angelscript/items/blunt_staff_i_cl.as @@ -0,0 +1,69 @@ +#pragma context server + +namespace MS +{ + +class BluntStaffICl : CGameScript +{ + int FX_ACTIVE; + string FX_OWNER; + + void client_activate() + { + FX_OWNER = param1; + FX_ACTIVE = 1; + fx_loop(); + ScheduleDelayedEvent(20.0, "end_fx"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SPR_POS = "z"; + ClientEffect("decal", 16, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), SPR_POS); + } + + void end_fx() + { + if (!(FX_ACTIVE)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(5.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.01, "fx_loop"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SPR_POS = "z"; + SPR_POS += "x"; + SPR_POS += "y"; + ClientEffect("decal", 17, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), SPR_POS); + } + + void update_ice_sprite() + { + string L_FIX_FRAME = "game.tempent.fuser1"; + ClientEffect("tempent", "set_current_prop", "frame", L_FIX_FRAME); + } + + void setup_ice_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(200, 200, 255)); + ClientEffect("tempent", "set_current_prop", "framerate", 1); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "frame", FIX_FRAME); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "fuser1", FIX_FRAME); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_test.as b/scripts/angelscript/items/blunt_test.as new file mode 100644 index 00000000..d24a4db5 --- /dev/null +++ b/scripts/angelscript/items/blunt_test.as @@ -0,0 +1,78 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class BluntTest : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + int MELEE_RANGE; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_PLAYER; + string MODEL_VIEW; + string MODEL_WORLD; + int SECONDARY_DMG; + string SOUND_BITE; + string SOUND_POISON; + string SOUND_SUMMON; + + BluntTest() + { + MODEL_VIEW = "viewmodels/gearshield_rview.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_PLAYER = "weapons/staff/snake_staff_player.mdl"; + MODEL_BODY_OFS = 58; + ANIM_PREFIX = "khopesh"; + MELEE_STAT = "spellcasting.affliction"; + SECONDARY_DMG = 0; + MELEE_DMG_TYPE = "poison"; + SOUND_SUMMON = "magic/spawn.wav"; + SOUND_BITE = "bullchicken/bc_bite2.wav"; + SOUND_POISON = "monsters/snakeman/sm_alert1.wav"; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 0; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 1; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 5; + ANIM_SHEATH = 4; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.3; + MELEE_ATK_DURATION = 0.6; + MELEE_ENERGY = 0.3; + MELEE_DMG = 30; + MELEE_DMG_RANGE = 60; + MELEE_ACCURACY = 0.65; + } + + void weapon_spawn() + { + SetName("Test Item"); + SetDescription("Test stuff"); + SetWeight(10); + SetSize(1); + SetValue(500); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "package"); + } + +} + +} diff --git a/scripts/angelscript/items/blunt_warhammer.as b/scripts/angelscript/items/blunt_warhammer.as new file mode 100644 index 00000000..0a24a4c9 --- /dev/null +++ b/scripts/angelscript/items/blunt_warhammer.as @@ -0,0 +1,62 @@ +#pragma context server + +#include "items/blunt_base_twohanded.as" + +namespace MS +{ + +class BluntWarhammer : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + + BluntWarhammer() + { + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + MODEL_VIEW_IDX = 1; + BASE_LEVEL_REQ = 6; + MODEL_BODY_OFS = 80; + ANIM_PREFIX = "warhammer"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.2; + MELEE_ENERGY = 0.6; + MELEE_DMG = 150; + MELEE_DMG_RANGE = 20; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "bluntarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_AUGMENT = 0.05; + } + + void weapon_spawn() + { + SetName("War Hammer"); + SetDescription("A heavy war hammer"); + SetWeight(30); + SetSize(6); + SetValue(45); + SetHUDSprite("hand", 70); + SetHUDSprite("trade", 70); + } + +} + +} diff --git a/scripts/angelscript/items/bows_base.as b/scripts/angelscript/items/bows_base.as new file mode 100644 index 00000000..4a3edd9c --- /dev/null +++ b/scripts/angelscript/items/bows_base.as @@ -0,0 +1,119 @@ +#pragma context server + +#include "items/base_ranged.as" + +namespace MS +{ + +class BowsBase : CGameScript +{ + int ANIM_DEPLOY; + int ANIM_FIRE; + int ANIM_IDLE1; + string ANIM_PREFIX; + int ANIM_STRETCH; + int IS_BOW; + string RANGED_AIMANGLE; + string RANGED_ATK_DURATION; + string RANGED_DMG_TYPE; + string RANGED_HOLD_MINMAX; + string RANGED_PROJECTILE; + float RANGED_PULLTIME; + string RANGED_STAT; + int STRETCHED; + + BowsBase() + { + STRETCHED = 0; + IS_BOW = 1; + ANIM_IDLE1 = 0; + ANIM_DEPLOY = 1; + ANIM_STRETCH = 2; + ANIM_FIRE = 3; + ANIM_PREFIX = "bow"; + RANGED_HOLD_MINMAX = "1.1;1.3"; + RANGED_ATK_DURATION = RANGED_POSTFIRE_DELAY; + RANGED_DMG_TYPE = "pierce"; + RANGED_STAT = "archery"; + RANGED_PROJECTILE = "arrow"; + RANGED_AIMANGLE = Vector3(0, 9, 0); + RANGED_PULLTIME = 0.8; + } + + void OnRepeatTimer() + { + SetRepeatDelay(3.35); + if (STRETCHED == 1) + { + } + PlayOwnerAnim("critical", "bow_hold"); + } + + void weapon_spawn() + { + if (!(NOT_WEARABLE)) + { + SetWearable(1); + } + SetAnimExt("bow"); + SetHand("both"); + SetHUDSprite("hand", "bow"); + SetHUDSprite("trade", ITEM_NAME); + RegisterAttack(); + bow_spawn(); + } + + void ranged_start() + { + STRETCHED = 0; + PlayViewAnim(ANIM_STRETCH); + PlayOwnerAnim("critical", "bow_pull"); + RANGED_PULLTIME("ranged_stretchbow"); + } + + void ranged_stretchbow() + { + STRETCHED = 1; + PlayOwnerAnim("critical", "bow_hold"); + basebow_stretchbow(); + } + + void ranged_toss() + { + EmitSound(GetOwner(), "game.sound.weapon", SOUND_SHOOT, "game.sound.maxvol"); + PlayViewAnim(ANIM_FIRE); + PlayOwnerAnim("critical", "bow_release"); + STRETCHED = 0; + ScheduleDelayedEvent(0.4, "shoot_returnstanding"); + } + + void ranged_end() + { + PlayViewAnim(ANIM_IDLE1); + } + + void shoot_returnstanding() + { + if (("game.item.attacking")) return; + PlayOwnerAnim("critical", "bow_aim_to_stand"); + } + + void game_wear() + { + SetModel(MODEL_WEAR); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 3; + SetModelBody(0, L_SUBMODEL); + } + + void game_show() + { + SetModel(MODEL_WEAR); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 3; + SetModelBody(0, L_SUBMODEL); + } + +} + +} diff --git a/scripts/angelscript/items/bows_crossbow_heavy33.as b/scripts/angelscript/items/bows_crossbow_heavy33.as new file mode 100644 index 00000000..aa96e164 --- /dev/null +++ b/scripts/angelscript/items/bows_crossbow_heavy33.as @@ -0,0 +1,230 @@ +#pragma context server + +#include "items/base_weapon.as" + +namespace MS +{ + +class BowsCrossbowHeavy33 : CGameScript +{ + int ANIM_DEPLOY; + int ANIM_FIRE; + int ANIM_IDLE; + int ANIM_IDLE_DEEP1; + int ANIM_IDLE_DEEP2; + string ANIM_PREFIX; + int ANIM_RELOAD; + int BASE_LEVEL_REQ; + string HITSCAN_DMG_MULTI; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + int NO_IDLE; + int NO_PARRY; + int NO_WORLD_MODEL; + string RANGED_ACCURACY; + string RANGED_AIMANGLE; + float RANGED_ATK_DURATION; + float RANGED_DMG_DELAY; + float RANGED_DMG_MULTI; + string RANGED_DMG_TYPE; + int RANGED_ENERGY; + int RANGED_FORCE; + string RANGED_HOLD_MINMAX; + int RANGED_NOISE; + string RANGED_PROJECTILE; + string RANGED_STARTPOS; + string RANGED_STAT; + string SOUND_SHOOT; + int STRETCHED; + string UNDER_SKILLED; + string WEAPON_PRIMARY_SKILL; + int XBOW_RELOADING; + float XBOW_RELOAD_TIME; + + BowsCrossbowHeavy33() + { + BASE_LEVEL_REQ = 20; + NO_PARRY = 1; + ANIM_IDLE = 12; + ANIM_IDLE_DEEP1 = 13; + ANIM_IDLE_DEEP2 = 14; + ANIM_DEPLOY = 20; + ANIM_RELOAD = 19; + ANIM_FIRE = 16; + MODEL_VIEW = "viewmodels/v_xbows.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_WEAR = "weapons/p_weapons3.mdl"; + SOUND_SHOOT = "weapons/bow/crossbow.wav"; + ITEM_NAME = "xbow"; + MODEL_BODY_OFS = 13; + NO_WORLD_MODEL = 1; + XBOW_RELOAD_TIME = 3.0; + ANIM_PREFIX = "standard"; + RANGED_PROJECTILE = "bolt"; + RANGED_HOLD_MINMAX = "0;0"; + RANGED_ATK_DURATION = 0.0; + RANGED_DMG_TYPE = "pierce"; + RANGED_STAT = "archery"; + RANGED_DMG_DELAY = 0.0; + RANGED_NOISE = 10; + RANGED_ENERGY = 20; + RANGED_DMG_MULTI = 2.0; + WEAPON_PRIMARY_SKILL = RANGED_STAT; + RANGED_AIMANGLE = Vector3(0, 0, 0); + RANGED_STARTPOS = Vector3(2, 12, -8); + RANGED_ACCURACY = "0;0"; + RANGED_FORCE = 1000; + NO_IDLE = 1; + } + + void weapon_spawn() + { + SetName("Heavy Crossbow"); + SetDescription("This mighty crossbow has some kick to it"); + SetWeight(1); + SetSize(3); + SetValue(3000); + SetWearable(0); + SetAnimExt("bow"); + SetWorldModel(MODEL_WORLD); + SetViewModel(MODEL_VIEW); + SetPlayerModel(MODEL_HANDS); + SetHand("both"); + SetHUDSprite("hand", 127); + SetHUDSprite("trade", 127); + register_bow(); + } + + void register_bow() + { + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.keys = "+attack1"; + string reg.attack.hold_min&max = "0.1;0.1"; + int reg.attack.noautoaim = 1; + string reg.attack.dmg.type = "pierce"; + int reg.attack.range = 600; + int reg.attack.energydrain = 0; + string reg.attack.stat = "archery"; + int reg.attack.COF = 0; + string reg.attack.projectile = "bolt"; + int reg.attack.priority = 10; + float reg.attack.delay.strike = 0.0; + string reg.attack.delay.end = XBOW_RELOAD_TIME; + string reg.attack.ofs.startpos = RANGED_STARTPOS; + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + string reg.attack.callback = "ranged"; + string reg.attack.dmg.multi = RANGED_DMG_MULTI; + int reg.attack.noise = 10; + RegisterAttack(); + } + + void ranged_start() + { + if ((XBOW_RELOADING)) + { + CancelAttack(); + } + if ((XBOW_RELOADING)) return; + PlayOwnerAnim("hold", "xbow_idle"); + } + + void ranged_toss() + { + PlayViewAnim(ANIM_FIRE); + EmitSound(GetOwner(), "game.sound.weapon", SOUND_SHOOT, "game.sound.maxvol"); + PlayOwnerAnim("critical", "xbow_reload"); + XBOW_RELOADING = 1; + STRETCHED = 0; + ScheduleDelayedEvent(0.2, "reload_now"); + string HEAVYONE = GetEntityProperty("ent_lastprojectile", "scriptvar"); + if (HEAVYONE == "HEAVY_BOLT") + { + CallExternal("ent_lastprojectile", "ext_lighten", 0.01); + } + if (HEAVYONE > 0) + { + CallExternal("ent_lastprojectile", "ext_lighten", HEAVYONE); + } + } + + void reload_now() + { + PlayViewAnim(ANIM_RELOAD); + PlayOwnerAnim("critical", "xbow_reload"); + XBOW_RELOAD_TIME("done_reload"); + } + + void done_reload() + { + PlayViewAnim(ANIM_IDLE); + XBOW_RELOADING = 0; + } + + void ranged_returnstanding() + { + if (("game.item.attacking")) return; + PlayOwnerAnim("critical", "bow_aim_to_stand"); + } + + void ranged_noammo() + { + } + + void OnDeploy() override + { + if ((false)) + { + PlayViewAnim(ANIM_IDLE); + } + if (!(true)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + ScheduleDelayedEvent(0.1, "check_newb"); + } + + void check_newb() + { + string FIND_MELEE_STAT = "skill."; + if (GetEntityProperty(GetOwner(), "find_melee_stat") < BASE_LEVEL_REQ) + { + SendColoredMessage(GetOwner(), "You lack the skill to properly wield this weapon!"); + string OUT_STR = "You lack the proficiency to wield this weapon. ( requires: "; + OUT_STR += RANGED_STAT; + OUT_STR += " proficiency "; + OUT_STR += BASE_LEVEL_REQ; + OUT_STR += " )"; + SendInfoMsg(GetOwner(), "Insufficient Skill " + OUT_STR); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + UNDER_SKILLED = 1; + } + else + { + if ((UNDER_SKILLED)) + { + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + } + UNDER_SKILLED = 0; + } + if (!(UNDER_SKILLED)) + { + HITSCAN_DMG_MULTI = RANGED_DMG_MULTI; + } + else + { + HITSCAN_DMG_MULTI = 0.1; + } + } + +} + +} diff --git a/scripts/angelscript/items/bows_crossbow_light.as b/scripts/angelscript/items/bows_crossbow_light.as new file mode 100644 index 00000000..95f70f95 --- /dev/null +++ b/scripts/angelscript/items/bows_crossbow_light.as @@ -0,0 +1,172 @@ +#pragma context server + +#include "items/base_weapon.as" + +namespace MS +{ + +class BowsCrossbowLight : CGameScript +{ + int ANIM_DEPLOY; + int ANIM_FIRE; + int ANIM_IDLE; + string ANIM_PREFIX; + int ANIM_RELOAD; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + int NO_PARRY; + int NO_WORLD_MODEL; + string RANGED_ACCURACY; + string RANGED_AIMANGLE; + float RANGED_ATK_DURATION; + float RANGED_DMG_DELAY; + string RANGED_DMG_TYPE; + int RANGED_ENERGY; + int RANGED_FORCE; + string RANGED_HOLD_MINMAX; + int RANGED_NOISE; + string RANGED_PROJECTILE; + string RANGED_STARTPOS; + string RANGED_STAT; + string SOUND_SHOOT; + int STRETCHED; + string WEAPON_PRIMARY_SKILL; + int XBOW_RELOADING; + float XBOW_RELOAD_TIME; + + BowsCrossbowLight() + { + NO_PARRY = 1; + ANIM_IDLE = 0; + ANIM_DEPLOY = 8; + ANIM_RELOAD = 7; + ANIM_FIRE = 4; + MODEL_VIEW = "viewmodels/v_xbows.mdl"; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_WEAR = "weapons/p_weapons2.mdl"; + SOUND_SHOOT = "weapons/bow/crossbow.wav"; + ITEM_NAME = "xbow"; + MODEL_BODY_OFS = 52; + NO_WORLD_MODEL = 1; + XBOW_RELOAD_TIME = 2.0; + ANIM_PREFIX = "orcbow"; + RANGED_PROJECTILE = "bolt"; + RANGED_HOLD_MINMAX = "0;0"; + RANGED_ATK_DURATION = 0.0; + RANGED_DMG_TYPE = "pierce"; + RANGED_STAT = "archery"; + RANGED_AIMANGLE = Vector3(0, 0, 0); + RANGED_DMG_DELAY = 0.0; + RANGED_NOISE = 10; + RANGED_ENERGY = 20; + WEAPON_PRIMARY_SKILL = RANGED_STAT; + RANGED_STARTPOS = Vector3(2, 12, -8); + RANGED_ACCURACY = "0;0"; + RANGED_FORCE = 1000; + } + + void weapon_spawn() + { + SetName("Crossbow"); + SetDescription("An accurate , long range crossbow"); + SetWeight(1); + SetSize(3); + SetValue(300); + SetWearable(0); + SetAnimExt("bow"); + SetWorldModel(MODEL_WORLD); + SetViewModel(MODEL_VIEW); + SetPlayerModel(MODEL_HANDS); + SetHand("both"); + SetHUDSprite("hand", "bow"); + SetHUDSprite("trade", "xbow"); + register_bow(); + SetModelBody(0, 0); + Precache(MODEL_VIEW); + } + + void OnDeploy() override + { + if (!(false)) return; + PlayViewAnim(ANIM_IDLE); + } + + void register_bow() + { + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.keys = "+attack1"; + string reg.attack.hold_min&max = "0.1;0.1"; + string reg.attack.dmg.type = "pierce"; + int reg.attack.range = 400; + int reg.attack.energydrain = 0; + string reg.attack.stat = "archery"; + int reg.attack.COF = 0; + string reg.attack.projectile = "bolt"; + int reg.attack.priority = 10; + float reg.attack.delay.strike = 0.0; + string reg.attack.delay.end = XBOW_RELOAD_TIME; + string reg.attack.ofs.startpos = RANGED_STARTPOS; + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + string reg.attack.callback = "ranged"; + int reg.attack.noise = 10; + RegisterAttack(); + } + + void ranged_start() + { + if ((XBOW_RELOADING)) return; + PlayOwnerAnim("hold", "xbow_idle"); + } + + void ranged_toss() + { + PlayViewAnim(ANIM_FIRE); + EmitSound(GetOwner(), "game.sound.weapon", SOUND_SHOOT, "game.sound.maxvol"); + PlayOwnerAnim("critical", "xbow_reload"); + STRETCHED = 0; + ScheduleDelayedEvent(0.2, "reload_now"); + string HEAVYONE = GetEntityProperty("ent_lastprojectile", "scriptvar"); + if (HEAVYONE == "HEAVY_BOLT") + { + CallExternal("ent_lastprojectile", "ext_lighten", 0.01); + } + if (HEAVYONE > 0) + { + CallExternal("ent_lastprojectile", "ext_lighten", HEAVYONE); + } + } + + void reload_now() + { + PlayViewAnim(ANIM_RELOAD); + } + + void ranged_end() + { + done_reload(); + } + + void done_reload() + { + PlayViewAnim(ANIM_IDLE); + XBOW_RELOADING = 0; + } + + void ranged_returnstanding() + { + if (("game.item.attacking")) return; + PlayOwnerAnim("critical", "bow_aim_to_stand"); + } + + void ranged_noammo() + { + } + +} + +} diff --git a/scripts/angelscript/items/bows_firebird.as b/scripts/angelscript/items/bows_firebird.as new file mode 100644 index 00000000..07d5f470 --- /dev/null +++ b/scripts/angelscript/items/bows_firebird.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "items/bows_base.as" + +namespace MS +{ + +class BowsFirebird : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + int CUSTOM_ATTACK; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_AIMANGLE; + string SOUND_SHOOT; + + BowsFirebird() + { + BASE_LEVEL_REQ = 25; + MODEL_VIEW_IDX = 7; + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_WEAR = "weapons/p_weapons3.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "longbow"; + ANIM_PREFIX = "standard"; + MODEL_BODY_OFS = 40; + RANGED_AIMANGLE = Vector3(0, 0, 0); + CUSTOM_ATTACK = 1; + } + + void bow_spawn() + { + SetName("Phoenix Bow"); + SetDescription("A magical bow that shoots explosive projectiles."); + SetWeight(100); + SetValue(1500); + SetHUDSprite("trade", 129); + custom_register(); + } + + void custom_register() + { + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.keys = "+attack1"; + string reg.attack.hold_min&max = "1.1;1.3"; + string reg.attack.dmg.type = "magic"; + int reg.attack.range = 1324; + int reg.attack.energydrain = 1; + string reg.attack.stat = "archery"; + string reg.attack.COF = "1;1"; + string reg.attack.projectile = "proj_arrow_phx"; + int reg.attack.priority = 0; + float reg.attack.delay.strike = 0.8; + float reg.attack.delay.end = 0.8; + Vector3 reg.attack.ofs.startpos = Vector3(0, 0, 10); + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + int reg.attack.ammodrain = 0; + string reg.attack.callback = "ranged"; + int reg.attack.noise = 1000; + RegisterAttack(); + } + +} + +} diff --git a/scripts/angelscript/items/bows_frost.as b/scripts/angelscript/items/bows_frost.as new file mode 100644 index 00000000..849ca970 --- /dev/null +++ b/scripts/angelscript/items/bows_frost.as @@ -0,0 +1,180 @@ +#pragma context server + +#include "items/bows_base.as" + +namespace MS +{ + +class BowsFrost : CGameScript +{ + string ABORT_PREP; + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + int BOW_PREPPING; + string BOW_PREP_SCRIPT_ID; + int CUSTOM_ATTACK; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + int NOT_BOGUS_SCRIPT; + string RANGED_AIMANGLE; + string REMOVE_LOOP_ACTIVE; + int RESIST_ACTIVE; + string SOUND_RESISTUP; + string SOUND_RESIST_LOCK; + string SOUND_RESIST_LOOP; + string SOUND_RESIST_PREP; + string SOUND_SHOOT; + + BowsFrost() + { + BASE_LEVEL_REQ = 25; + MODEL_VIEW_IDX = 8; + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_WEAR = "weapons/p_weapons3.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "longbow"; + ANIM_PREFIX = "standard"; + MODEL_BODY_OFS = 44; + RANGED_AIMANGLE = Vector3(0, 0, 0); + SOUND_RESISTUP = "magic/frost_reverse.wav"; + CUSTOM_ATTACK = 1; + SOUND_RESIST_PREP = "magic/gaus_warmup.wav"; + SOUND_RESIST_LOOP = "ambience/pulsemachine.wav"; + SOUND_RESIST_LOCK = "weapons/egon_off1.wav"; + } + + void bow_spawn() + { + SetName("Frost Bow"); + SetDescription("An icy bow that fires icy projectiles."); + SetWeight(100); + SetValue(1500); + SetHUDSprite("trade", 135); + custom_register(); + } + + void custom_register() + { + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.keys = "+attack1"; + string reg.attack.hold_min&max = "1.1;1.3"; + string reg.attack.dmg.type = "magic"; + int reg.attack.range = 1500; + int reg.attack.energydrain = 1; + string reg.attack.stat = "archery"; + string reg.attack.COF = "1;1"; + string reg.attack.projectile = "proj_arrow_fbow"; + int reg.attack.priority = 0; + float reg.attack.delay.strike = 1.2; + float reg.attack.delay.end = 1.2; + Vector3 reg.attack.ofs.startpos = Vector3(0, 0, 10); + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + int reg.attack.ammodrain = 0; + string reg.attack.callback = "ranged"; + int reg.attack.noise = 1000; + RegisterAttack(); + } + + void bweapon_effect_activate() + { + if (!(true)) return; + LogDebug("bweapon_effect_activate BOW_PREPPING RESIST_ACTIVE"); + if ((BOW_PREPPING)) return; + if ((RESIST_ACTIVE)) return; + NOT_BOGUS_SCRIPT = 1; + setup_bow(); + } + + void setup_bow() + { + if (!(true)) return; + if ((BOW_PREPPING)) return; + ScheduleDelayedEvent(0.1, "prep_bow"); + if (!(REMOVE_LOOP_ACTIVE)) + { + ABORT_PREP = 0; + REMOVE_LOOP_ACTIVE = 1; + check_to_remove_loop(); + } + } + + void prep_bow() + { + if (!(true)) return; + if ((RESIST_ACTIVE)) return; + BOW_PREPPING = 1; + EmitSound(GetOwner(), 0, SOUND_RESIST_PREP, 10); + ScheduleDelayedEvent(10.0, "activate_resistance"); + ClientEvent("new", "all", "items/bows_frost_cl", GetEntityIndex(GetOwner())); + BOW_PREP_SCRIPT_ID = "game.script.last_sent_id"; + ScheduleDelayedEvent(3.0, "play_resist_loop"); + } + + void play_resist_loop() + { + if (!(true)) return; + if (!(BOW_PREPPING)) return; + // svplaysound: svplaysound 1 10 SOUND_RESIST_LOOP + EmitSound(1, 10, SOUND_RESIST_LOOP); + } + + void activate_resistance() + { + if (!(true)) return; + if (!(BOW_PREPPING)) return; + BOW_PREPPING = 0; + if ((RESIST_ACTIVE)) return; + RESIST_ACTIVE = 1; + CallExternal(GetOwner(), "ext_register_weapon", GetEntityIndex(GetOwner()), "cbow", "cold", 75); + EmitSound(GetOwner(), 2, SOUND_RESIST_LOCK, 10); + // svplaysound: svplaysound 1 0 SOUND_RESIST_LOOP + EmitSound(1, 0, SOUND_RESIST_LOOP); + } + + void check_to_remove_loop() + { + if (!(true)) return; + if (!(REMOVE_LOOP_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "check_to_remove_loop"); + if (!(IsEntityAlive(GetOwner()))) + { + bweapon_effect_remove(); + } + } + + void bweapon_effect_remove() + { + if (!(true)) return; + LogDebug("bweapon_effect_remove BOW_PREPPING RESIST_ACTIVE"); + REMOVE_LOOP_ACTIVE = 0; + if ((BOW_PREPPING)) + { + abort_prep(); + } + if (!(RESIST_ACTIVE)) return; + CallExternal(GetOwner(), "ext_register_weapon", GetEntityIndex(GetOwner()), "cbow", "remove"); + RESIST_ACTIVE = 0; + } + + void abort_prep() + { + if (!(true)) return; + LogDebug("abort_prep BOW_PREP_SCRIPT_ID"); + // svplaysound: svplaysound 1 0 SOUND_RESIST_LOOP + EmitSound(1, 0, SOUND_RESIST_LOOP); + REMOVE_LOOP_ACTIVE = 0; + RESIST_ACTIVE = 0; + BOW_PREPPING = 0; + ClientEvent("update", "all", BOW_PREP_SCRIPT_ID, "remove_sprites"); + } + +} + +} diff --git a/scripts/angelscript/items/bows_frost_cl.as b/scripts/angelscript/items/bows_frost_cl.as new file mode 100644 index 00000000..582d4e62 --- /dev/null +++ b/scripts/angelscript/items/bows_frost_cl.as @@ -0,0 +1,126 @@ +#pragma context client + +namespace MS +{ + +class BowsFrostCl : CGameScript +{ + float CONTRACT_RATE; + string CUR_VOF; + int CYCLE_ANGLE; + string FX_OWNER; + int FX_RADIUS; + float RISE_RATE; + string SPRITE_MODE; + string SPRITE_NAME; + int VOF_START; + + BowsFrostCl() + { + VOF_START = -24; + SPRITE_NAME = "char_breath.spr"; + RISE_RATE = 0.06; + CONTRACT_RATE = 0.015; + } + + void client_activate() + { + FX_OWNER = param1; + FX_RADIUS = 64; + CYCLE_ANGLE = 0; + CUR_VOF = VOF_START; + SPRITE_MODE = "rise"; + for (int i = 0; i < 9; i++) + { + make_sprites(); + } + ScheduleDelayedEvent(3.0, "rotate_mode"); + ScheduleDelayedEvent(6.0, "contract_mode"); + ScheduleDelayedEvent(10.0, "remove_sprites"); + } + + void rotate_mode() + { + SPRITE_MODE = "rotate"; + } + + void contract_mode() + { + SPRITE_MODE = "contract"; + } + + void remove_sprites() + { + SPRITE_MODE = "remove"; + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + LogDebug("*** bows_frost_cl_removescript"); + RemoveScript(); + } + + void make_sprites() + { + string SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, FX_RADIUS, CUR_VOF)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_ORG, "setup_sprite", "update_sprite"); + CYCLE_ANGLE += 40; + } + + void update_sprite() + { + if (SPRITE_MODE == "remove") + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + } + if (!(SPRITE_MODE != "remove")) return; + string SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string MY_ANGLE = "game.tempent.fuser1"; + if (SPRITE_MODE == "rise") + { + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, MY_ANGLE, 0), Vector3(0, FX_RADIUS, CUR_VOF)); + if (MY_ANGLE == 0) + { + CUR_VOF += RISE_RATE; + } + } + if (SPRITE_MODE == "rotate") + { + MY_ANGLE += 1; + if (MY_ANGLE > 359) + { + int MY_ANGLE = 0; + } + ClientEffect("tempent", "set_current_prop", "fuser1", MY_ANGLE); + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, MY_ANGLE, 0), Vector3(0, FX_RADIUS, CUR_VOF)); + } + if (SPRITE_MODE == "contract") + { + MY_ANGLE += 1; + if (MY_ANGLE > 359) + { + int MY_ANGLE = 0; + } + ClientEffect("tempent", "set_current_prop", "fuser1", MY_ANGLE); + FX_RADIUS -= CONTRACT_RATE; + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, MY_ANGLE, 0), Vector3(0, FX_RADIUS, CUR_VOF)); + } + ClientEffect("tempent", "set_current_prop", "origin", SPRITE_ORG); + } + + void setup_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 3.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", CYCLE_ANGLE); + } + +} + +} diff --git a/scripts/angelscript/items/bows_longbow.as b/scripts/angelscript/items/bows_longbow.as new file mode 100644 index 00000000..3ba841df --- /dev/null +++ b/scripts/angelscript/items/bows_longbow.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "items/bows_base.as" + +namespace MS +{ + +class BowsLongbow : CGameScript +{ + string ANIM_PREFIX; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_ACCURACY; + string RANGED_AIMANGLE; + int RANGED_ENERGY; + int RANGED_FORCE; + float RANGED_POSTFIRE_DELAY; + string SOUND_SHOOT; + + BowsLongbow() + { + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_WEAR = "weapons/p_weapons2.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "longbow"; + ANIM_PREFIX = "longbow"; + MODEL_BODY_OFS = 44; + RANGED_FORCE = 2100; + RANGED_ENERGY = 4; + RANGED_ACCURACY = "3;0"; + RANGED_POSTFIRE_DELAY = 0.3; + RANGED_AIMANGLE = Vector3(0, 3, 0); + } + + void bow_spawn() + { + SetName("Wooden Long bow"); + SetDescription("A long bow , elegantly carved and made for range"); + SetWeight(70); + SetSize(12); + SetValue(50); + SetHUDSprite("trade", ITEM_NAME); + } + +} + +} diff --git a/scripts/angelscript/items/bows_orcbow.as b/scripts/angelscript/items/bows_orcbow.as new file mode 100644 index 00000000..f3fac812 --- /dev/null +++ b/scripts/angelscript/items/bows_orcbow.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "items/bows_base.as" + +namespace MS +{ + +class BowsOrcbow : CGameScript +{ + string ANIM_PREFIX; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_ACCURACY; + float RANGED_ENERGY; + int RANGED_FORCE; + float RANGED_POSTFIRE_DELAY; + string SOUND_SHOOT; + + BowsOrcbow() + { + MODEL_VIEW_IDX = 1; + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_WEAR = "weapons/p_weapons2.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "orcbow"; + ANIM_PREFIX = "orcbow"; + MODEL_BODY_OFS = 40; + RANGED_FORCE = 900; + RANGED_ENERGY = 0.3; + RANGED_ACCURACY = "6;3"; + RANGED_POSTFIRE_DELAY = 0.3; + } + + void bow_spawn() + { + SetName("Orcish bow"); + SetDescription("A primitive bow used by the Orc race"); + SetWeight(30); + SetSize(6); + SetValue(25); + SetHUDSprite("trade", 69); + } + +} + +} diff --git a/scripts/angelscript/items/bows_orion1.as b/scripts/angelscript/items/bows_orion1.as new file mode 100644 index 00000000..094a911b --- /dev/null +++ b/scripts/angelscript/items/bows_orion1.as @@ -0,0 +1,236 @@ +#pragma context server + +#include "items/bows_base.as" + +namespace MS +{ + +class BowsOrion1 : CGameScript +{ + int AM_CHARGING; + string ANIM_PREFIX; + string BALL_DMG; + int BALL_SIZE; + string BALOON_ON; + int BASE_LEVEL_REQ; + string BOLT_SPRITE; + string BOW_CL_IDX; + float CHARGE_RATE; + int CUSTOM_ATTACK; + int DMG_MULTI; + string ITEM_NAME; + string MAX_LEVEL; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + int MP_DRAIN; + string NEXT_ATTACK; + string NEXT_CHARGE; + int NOT_WEARABLE; + string RANGED_AIMANGLE; + string SOUND_SHOOT; + int TALLY_ACTIVE; + + BowsOrion1() + { + MODEL_VIEW_IDX = 3; + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_WEAR = "weapons/p_weapons2.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "longbow"; + ANIM_PREFIX = "longbow"; + BASE_LEVEL_REQ = 15; + MODEL_BODY_OFS = 48; + BOLT_SPRITE = "nhth1.spr"; + CUSTOM_ATTACK = 1; + RANGED_AIMANGLE = Vector3(0, 3, 0); + MP_DRAIN = 4; + CHARGE_RATE = 0.3; + DMG_MULTI = 10; + NOT_WEARABLE = 1; + } + + void game_precache() + { + Precache("items/proj_mana2"); + } + + void bow_spawn() + { + SetName("Orion Bow"); + SetDescription("This enchanted bow fires spheres of pure mana"); + SetWeight(30); + SetSize(1); + SetValue(1000); + SetHUDSprite("trade", 108); + BALL_SIZE = 0; + custom_register(); + } + + void custom_register() + { + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.keys = "+attack1"; + string reg.attack.hold_min&max = "0.1;0.1"; + string reg.attack.dmg.type = "magic"; + int reg.attack.range = 200; + int reg.attack.energydrain = 1; + string reg.attack.stat = "archery"; + int reg.attack.COF = 0; + string reg.attack.projectile = "none"; + int reg.attack.priority = 0; + int reg.attack.delay.strike = 0; + int reg.attack.delay.end = 0; + string reg.attack.ofs.startpos = RANGED_STARTPOS; + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + int reg.attack.ammodrain = 0; + string reg.attack.callback = "ranged"; + int reg.attack.noise = 1000; + string reg.attack.reqskill = BASE_LEVEL_REQ; + } + + void OnDeploy() override + { + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += 1.0; + } + + void game_attack1_down() + { + if (!(GetGameTime() > NEXT_ATTACK)) return; + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += 0.75; + if (!(AM_CHARGING)) + { + if (GetEntityMP(GetOwner()) > MP_DRAIN) + { + PlayViewAnim(ANIM_FIRE); + if ((CanAttack(GetOwner()))) + { + } + AM_CHARGING = 1; + if ((true)) + { + } + BALL_SIZE = 0; + BALL_DMG = 0; + PlayOwnerAnim("critical", "bow_pull"); + if (!(TALLY_ACTIVE)) + { + TALLY_ACTIVE = 1; + tally_stretch(); + } + } + else + { + SendColoredMessage(GetOwner(), "You lack the mana to start charging a mana ball."); + CancelAttack(); + } + } + } + + void tally_stretch() + { + if (!(TALLY_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "tally_stretch"); + if (!(AM_CHARGING)) return; + if (!(GetGameTime() > NEXT_CHARGE)) return; + NEXT_CHARGE = GetGameTime(); + NEXT_CHARGE += CHARGE_RATE; + BALL_DMG = BALL_SIZE; + BALL_DMG *= DMG_MULTI; + if ((MAX_LEVEL)) return; + BALL_SIZE += 1; + if (!(BALOON_ON)) + { + if (BALL_SIZE > 0) + { + } + BALOON_ON = 1; + ClientEvent("new", "all", "items/bows_orion1_cl", GetEntityIndex(GetOwner())); + BOW_CL_IDX = "game.script.last_sent_id"; + } + else + { + ClientEvent("update", "all", BOW_CL_IDX, "add_charge"); + } + // TODO: splayviewanim ent_me 2 + if (GetEntityMP(GetOwner()) <= MP_DRAIN) + { + MAX_LEVEL = 1; + SendColoredMessage(GetOwner(), "Orion Bow: Insufficient Mana"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (BALL_SIZE >= 10) + { + BALL_SIZE = 10; + MAX_LEVEL = 1; + } + if ((MAX_LEVEL)) + { + SendPlayerMessage("Manaball", "has reached maximum charge"); + } + GiveMP(/* TODO: $neg */ $neg(MP_DRAIN)); + CallExternal(GetOwner(), "mana_drain"); + // svplaysound: svplaysound 1 3 ambience/alien_humongo.wav + EmitSound(1, 3, "ambience/alien_humongo.wav"); + BALL_DMG = BALL_SIZE; + BALL_DMG *= DMG_MULTI; + if (GetSkillLevel(GetOwner(), "archery.proficiency") < BASE_LEVEL_REQ) + { + MAX_LEVEL = 1; + BALL_DMG = 0.05; + } + } + + void game__attack1() + { + PlayViewAnim(0); + if (!(AM_CHARGING)) return; + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += 0.2; + if ((true)) + { + string L_VEL = /* TODO: $relvel */ $relvel(GetEntityProperty(GetOwner(), "viewangles"), 0, ",", 200, ",", 0); + SpawnNPC("items/proj_mana2", GetEntityProperty(GetOwner(), "eyepos"), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), L_VEL, BALL_SIZE, BALL_DMG, "archery" + } + reset_atk(); + } + + void game_fall() + { + reset_atk(); + } + + void reset_atk() + { + ClientEvent("update", "all", BOW_CL_IDX, "charge_release"); + BALOON_ON = 0; + AM_CHARGING = 0; + BALL_SIZE = 0; + BALL_DMG = 0; + MAX_LEVEL = 0; + TALLY_ACTIVE = 0; + } + + void game_putinpack() + { + cancel_attack(); + } + + void cancel_attack() + { + if (!(AM_CHARGING)) return; + ClientEvent("update", "all", BOW_CL_IDX, "charge_release"); + reset_atk(); + } + +} + +} diff --git a/scripts/angelscript/items/bows_orion1_cl.as b/scripts/angelscript/items/bows_orion1_cl.as new file mode 100644 index 00000000..7b45670b --- /dev/null +++ b/scripts/angelscript/items/bows_orion1_cl.as @@ -0,0 +1,84 @@ +#pragma context server + +namespace MS +{ + +class BowsOrion1Cl : CGameScript +{ + string BALL_OFS; + int FX_ACTIVE; + string FX_OWNER; + + BowsOrion1Cl() + { + BALL_OFS = Vector3(0, 20, 0); + } + + void client_activate() + { + FX_OWNER = param1; + string FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + FX_ORIGIN += "z"; + string VIEW_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "viewangles"); + FX_ORIGIN += /* TODO: $relpos */ $relpos(VIEW_ANG, BALL_OFS); + FX_ACTIVE = 1; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", FX_ORIGIN, "setup_ball", "update_ball"); + } + + void update_ball() + { + if ((FX_ACTIVE)) + { + string FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + FX_ORIGIN += "z"; + string VIEW_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "viewangles"); + FX_ORIGIN += /* TODO: $relpos */ $relpos(VIEW_ANG, BALL_OFS); + ClientEffect("tempent", "set_current_prop", "origin", FX_ORIGIN); + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < ACT_SCALE) + { + } + CUR_SCALE += 0.05; + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + } + + void add_charge() + { + ACT_SCALE += 0.75; + } + + void charge_release() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_ball() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 100); + ClientEffect("tempent", "set_current_prop", "body", 13); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 500); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 20); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + } + +} + +} diff --git a/scripts/angelscript/items/bows_shortbow.as b/scripts/angelscript/items/bows_shortbow.as new file mode 100644 index 00000000..04447ce8 --- /dev/null +++ b/scripts/angelscript/items/bows_shortbow.as @@ -0,0 +1,59 @@ +#pragma context server + +#include "items/bows_base.as" + +namespace MS +{ + +class BowsShortbow : CGameScript +{ + string ANIM_PREFIX; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_ACCURACY; + int RANGED_ENERGY; + int RANGED_FORCE; + float RANGED_POSTFIRE_DELAY; + string SOUND_SHOOT; + + BowsShortbow() + { + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_WEAR = "weapons/p_weapons2.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "orcbow"; + ANIM_PREFIX = "orcbow"; + MODEL_BODY_OFS = 40; + RANGED_FORCE = 1000; + RANGED_ENERGY = 3; + RANGED_ACCURACY = "4;2"; + RANGED_POSTFIRE_DELAY = 0.1; + } + + void bow_spawn() + { + SetName("Short Bow"); + SetDescription("A short and steady bow"); + SetWeight(40); + SetSize(8); + SetValue(15); + SetHUDSprite("trade", 69); + } + + void OnDeploy() override + { + if (!(true)) return; + // TODO: setviewmodelprop ent_me submodel 0 2 + } + +} + +} diff --git a/scripts/angelscript/items/bows_swiftbow.as b/scripts/angelscript/items/bows_swiftbow.as new file mode 100644 index 00000000..b10173f1 --- /dev/null +++ b/scripts/angelscript/items/bows_swiftbow.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "items/bows_base.as" + +namespace MS +{ + +class BowsSwiftbow : CGameScript +{ + string ANIM_PREFIX; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_ACCURACY; + string RANGED_AIMANGLE; + float RANGED_ATK_DURATION; + float RANGED_DMG_DELAY; + int RANGED_ENERGY; + int RANGED_FORCE; + float RANGED_POSTFIRE_DELAY; + float RANGED_PULLTIME; + string SOUND_SHOOT; + + BowsSwiftbow() + { + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_VIEW_IDX = 5; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_WEAR = "weapons/p_weapons2.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "longbow"; + ANIM_PREFIX = "longbow"; + MODEL_BODY_OFS = 44; + RANGED_FORCE = 1500; + RANGED_ENERGY = 2; + RANGED_ACCURACY = "1;1"; + RANGED_POSTFIRE_DELAY = 0.1; + RANGED_ATK_DURATION = 0.1; + RANGED_DMG_DELAY = 0.1; + RANGED_PULLTIME = 0.4; + RANGED_AIMANGLE = Vector3(0, 0, 0); + } + + void bow_spawn() + { + SetName("Elven Longbow"); + SetDescription("One of the finest elven longbows made out of the Sylven wood"); + SetWeight(60); + SetSize(10); + SetValue(100); + SetHUDSprite("trade", ITEM_NAME); + } + +} + +} diff --git a/scripts/angelscript/items/bows_sxbow.as b/scripts/angelscript/items/bows_sxbow.as new file mode 100644 index 00000000..42ecaccd --- /dev/null +++ b/scripts/angelscript/items/bows_sxbow.as @@ -0,0 +1,328 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class BowsSxbow : CGameScript +{ + int BASE_LEVEL_REQ; + int BOW_CHAMBER; + string HITSCAN_DMG_MULTI; + int ITEM_NEVER_DELETE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string NEXT_ATTACK; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float RANGED_DMG_MULTI; + string RANGED_STAT; + string RELOAD_DONE_AT; + string UNDER_SKILLED; + int VANIM_DRAW; + int VANIM_FIRE; + int VANIM_IDLE0; + int VANIM_RELOAD1; + int VANIM_RELOAD2; + string VMODEL_FILE; + string WANIM_FLOOR; + string WANIM_HAND; + string WEAPON_PRIMARY_SKILL; + + BowsSxbow() + { + ITEM_NEVER_DELETE = 1; + BASE_LEVEL_REQ = 35; + RANGED_STAT = "archery"; + RANGED_DMG_MULTI = 1.5; + WEAPON_PRIMARY_SKILL = RANGED_STAT; + MODEL_VIEW = "viewmodels/v_steambow.mdl"; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 80; + VMODEL_FILE = "viewmodels/v_steambow.mdl"; + PMODEL_FILE = "weapons/p_weapons3.mdl"; + PMODEL_IDX_HANDS = 80; + PMODEL_IDX_FLOOR = 82; + VANIM_IDLE0 = 1; + VANIM_FIRE = 7; + VANIM_RELOAD1 = 14; + VANIM_RELOAD2 = 15; + VANIM_DRAW = 0; + WANIM_HAND = "standard_idle"; + WANIM_FLOOR = "standard_floor_idle"; + BOW_CHAMBER = 0; + Precache("weapons/reload1.wav"); + Precache("weapons/reload2.wav"); + Precache("weapons/reload3.wav"); + Precache("weapons/357_cock1.wav"); + } + + void OnSpawn() override + { + SetName("Steam Crossbow"); + SetDescription("A strange dwarven contraption"); + SetWeight(50); + SetValue(4000); + SetAnimExt("bow"); + SetWorldModel(MODEL_WORLD); + SetViewModel(MODEL_VIEW); + SetPlayerModel(MODEL_HANDS); + SetHand("both"); + SetHUDSprite("trade", 147); + register_attack(); + } + + void register_attack() + { + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.keys = "+attack1"; + string reg.attack.hold_min&max = "0;0"; + int reg.attack.noautoaim = 1; + string reg.attack.dmg.type = "pierce"; + int reg.attack.range = 1000; + int reg.attack.energydrain = 0; + string reg.attack.stat = "archery"; + int reg.attack.COF = 0; + string reg.attack.projectile = "bolt"; + int reg.attack.priority = 10; + float reg.attack.delay.strike = 0.0; + float reg.attack.delay.end = 0.2; + Vector3 reg.attack.ofs.startpos = Vector3(10, 10, -15); + Vector3 reg.attack.ofs.aimang = Vector3(8, -4, 0); + string reg.attack.callback = "ranged"; + string reg.attack.dmg.multi = RANGED_DMG_MULTI; + int reg.attack.noise = 10; + HITSCAN_DMG_MULTI = RANGED_DMG_MULTI; + RegisterAttack(); + } + + void ranged_start() + { + CancelAttack(); + } + + void game_attack1_down() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + string L_ARROW_MENU_TIME = GetEntityProperty(GetOwner(), "scriptvar"); + if (L_ARROW_MENU_TIME > 0) + { + L_ARROW_MENU_TIME += 1.0; + } + if (GetGameTime() < L_ARROW_MENU_TIME) + { + NEXT_ATTACK = L_ARROW_MENU_TIME; + } + if (!(GetGameTime() > NEXT_ATTACK)) return; + if (!(CanAttack(GetOwner()))) return; + if (!(GetGameTime() > RELOAD_DONE_AT)) return; + if (BOW_CHAMBER < 7) + { + int L_COF = 0; + int L_SPEED = 1000; + if ((UNDER_SKILLED)) + { + int L_COF = 20; + int L_SPEED = 300; + int RND_LOCK = RandomInt(1, 3); + } + if (RND_LOCK == 1) + { + if (BOW_CHAMBER < 6) + { + } + EmitSound(GetOwner(), 0, "weapons/357_reload1.wav", 10); + SendColoredMessage(GetOwner(), "Your lack of proficiency causes you to jam the weapon."); + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += 4.0; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + BOW_CHAMBER += 1; + string FIRE_ANIM = BOW_CHAMBER; + FIRE_ANIM += VANIM_FIRE; + // TODO: splayviewanim ent_me FIRE_ANIM + string PLR_ARROW = GetEntityProperty(GetOwner(), "findbolt"); + LogDebug("arrowtype: PLR_ARROW"); + CallExternal(GetOwner(), "ext_tossprojectile", PLR_ARROW, "view", "none", L_SPEED, 0, L_COF, "archery"); + PlayOwnerAnim("hold", "xbow_idle"); + EmitSound(GetOwner(), 0, "weapons/xbow_reload1.wav", 10); + EmitSound(GetOwner(), 0, "weapons/bow/crossbow.wav", 10); + } + LogDebug("chamber BOW_CHAMBER"); + if (BOW_CHAMBER >= 6) + { + do_reload(); + } + else + { + ScheduleDelayedEvent(0.5, "do_idle"); + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += 0.6; + } + } + + void game_+attack2() + { + if (!(CanAttack(GetOwner()))) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + if (!(GetGameTime() > NEXT_ATTACK)) return; + if (BOW_CHAMBER == 0) + { + // TODO: splayviewanim ent_me IDLE_ANIM + } + if (!(BOW_CHAMBER > 0)) return; + do_reload(); + } + + void do_reload() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + if (!(GetGameTime() > RELOAD_DONE_AT)) return; + PlayOwnerAnim("once", "xbow_reload"); + EmitSound(GetOwner(), 0, "weapons/357_reload1.wav", 10); + BOW_CHAMBER = 7; + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += 5.0; + // TODO: splayviewanim ent_me VANIM_RELOAD1 + RELOAD_DONE_AT = GetGameTime(); + RELOAD_DONE_AT += 3.35; + RELOAD_DONE_AT += 2.515; + ScheduleDelayedEvent(3.35, "do_reload2"); + } + + void do_reload2() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + PlayOwnerAnim("once", "xbow_reload"); + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += 2.515; + // TODO: splayviewanim ent_me VANIM_RELOAD2 + BOW_CHAMBER = 0; + ScheduleDelayedEvent(2.0, "pilot_light"); + } + + void pilot_light() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + // svplaysound: svplaysound 0 10 weapons/bow/steam.wav + EmitSound(0, 10, "weapons/bow/steam.wav"); + } + + void do_idle() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + string IDLE_ANIM = BOW_CHAMBER; + IDLE_ANIM += VANIM_IDLE0; + if (GetGameTime() < RELOAD_DONE_AT) + { + int IDLE_ANIM = 7; + } + if (BOW_CHAMBER == 7) + { + int IDLE_ANIM = 7; + } + // TODO: splayviewanim ent_me IDLE_ANIM + } + + void OnDeploy() override + { + item_deploy(); + SetViewModel(VMODEL_FILE); + SetModel(PMODEL_FILE); + SetWorldModel(PMODEL_FILE); + SetModelBody(0, PMODEL_IDX_HANDS); + SetAnimExt("xbow"); + PlayViewAnim(VANIM_DRAW); + PlayAnim("once", WANIM_HAND); + if (!(true)) return; + check_skill(); + if (BOW_CHAMBER > 0) + { + ScheduleDelayedEvent(0.1, "redeploy_idle"); + } + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += 0.6; + } + + void redeploy_idle() + { + string IDLE_ANIM = BOW_CHAMBER; + IDLE_ANIM += VANIM_IDLE0; + if (GetGameTime() < RELOAD_DONE_AT) + { + int IDLE_ANIM = 7; + } + // TODO: splayviewanim ent_me IDLE_ANIM + } + + void game_show() + { + SetModel(PMODEL_FILE); + SetWorldModel(PMODEL_FILE); + SetModelBody(0, PMODEL_IDX_HANDS); + } + + void OnDrop() override + { + item_drop(); + } + + void game_fall() + { + SetModelBody(0, PMODEL_IDX_FLOOR); + PlayAnim("once", WANIM_FLOOR); + weapon_fall(); + } + + void game_switchhands() + { + PlayViewAnim(IDLE_ANIM); + item_switchhands(); + } + + void check_skill() + { + if (!(true)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + string FIND_MELEE_STAT = "skill."; + FIND_MELEE_STAT += RANGED_STAT; + if (GetEntityProperty(GetOwner(), "find_melee_stat") < BASE_LEVEL_REQ) + { + SendColoredMessage(GetOwner(), "You lack the skill to properly wield this weapon!"); + string OUT_STR = "You lack the proficiency to wield this weapon. ( requires: "; + OUT_STR += RANGED_STAT; + OUT_STR += " proficiency "; + OUT_STR += BASE_LEVEL_REQ; + OUT_STR += " )"; + SendInfoMsg(GetOwner(), "Insufficient Skill " + OUT_STR); + UNDER_SKILLED = 1; + } + else + { + if ((UNDER_SKILLED)) + { + HITSCAN_DMG_MULTI = RANGED_DMG_MULTI; + } + UNDER_SKILLED = 0; + } + if (!(UNDER_SKILLED)) + { + HITSCAN_DMG_MULTI = RANGED_DMG_MULTI; + } + else + { + HITSCAN_DMG_MULTI = 0.1; + } + } + +} + +} diff --git a/scripts/angelscript/items/bows_telf1.as b/scripts/angelscript/items/bows_telf1.as new file mode 100644 index 00000000..b54aefe4 --- /dev/null +++ b/scripts/angelscript/items/bows_telf1.as @@ -0,0 +1,126 @@ +#pragma context server + +#include "items/bows_base.as" + +namespace MS +{ + +class BowsTelf1 : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + int CUSTOM_ATTACK; + string DAMAGE_TYPE; + float DMG_ADJ; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_AIMANGLE; + float RANGED_ATK_DURATION; + string RANGED_HOLD_MINMAX; + float RANGED_POSTFIRE_DELAY; + float RANGED_PULLTIME; + string RANGED_STAT; + string SOUND_SHOOT; + string TORKIE_BOW_TYPE; + + BowsTelf1() + { + BASE_LEVEL_REQ = 30; + MODEL_VIEW_IDX = 9; + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_WEAR = "weapons/p_weapons3.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "longbow"; + ANIM_PREFIX = "standard"; + MODEL_BODY_OFS = 54; + RANGED_POSTFIRE_DELAY = 1.0; + RANGED_ATK_DURATION = 1.0; + RANGED_AIMANGLE = Vector3(0, 0, 0); + CUSTOM_ATTACK = 1; + DAMAGE_TYPE = "fire_effect"; + RANGED_HOLD_MINMAX = "1.1;1.3"; + RANGED_STAT = "archery"; + RANGED_PULLTIME = 1.0; + DMG_ADJ = 0.65; + } + + void bow_spawn() + { + SetName("Torkalath Fire Bow"); + SetDescription("Spiral flames are engraved in this ornate bow."); + SetWeight(100); + SetValue(1500); + SetHUDSprite("trade", 166); + custom_register(); + } + + void OnDeploy() override + { + if (!(true)) return; + set_bow_type(); + } + + void set_bow_type() + { + string DMG_AMT = GetSkillLevel(GetOwner(), "spellcasting.fire"); + DMG_AMT *= DMG_ADJ; + if ((UNDER_SKILLED)) + { + DMG_AMT *= 0.1; + } + TORKIE_BOW_TYPE = "fire"; + CallExternal(GetOwner(), "ext_set_spiral", TORKIE_BOW_TYPE, DMG_AMT); + } + + void custom_register() + { + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.keys = "+attack1"; + string reg.attack.hold_min&max = RANGED_HOLD_MINMAX; + string reg.attack.dmg.type = DAMAGE_TYPE; + float reg.attack.dmg.multi = 1.0; + int reg.attack.range = 512; + int reg.attack.energydrain = 1; + string reg.attack.stat = "archery"; + string reg.attack.COF = "0.1;0.1"; + string reg.attack.projectile = "proj_arrow_spiral"; + int reg.attack.priority = 0; + string reg.attack.delay.strike = RANGED_DMG_DELAY; + string reg.attack.delay.end = RANGED_ATK_DURATION; + Vector3 reg.attack.ofs.startpos = Vector3(0, 0, 10); + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + int reg.attack.ammodrain = 0; + string reg.attack.callback = "ranged"; + int reg.attack.noise = 1000; + RegisterAttack(); + } + + void ranged_start() + { + if (!(true)) return; + string OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.fire"); + if (!(OWNER_SKILL < 15)) return; + SendColoredMessage(GetOwner(), "You lack the fire affinity to activate this bow s magic."); + CancelAttack(); + } + + void bow_underskilled() + { + set_bow_type(); + } + + void bow_underskilled_restore() + { + set_bow_type(); + } + +} + +} diff --git a/scripts/angelscript/items/bows_telf2.as b/scripts/angelscript/items/bows_telf2.as new file mode 100644 index 00000000..cd84068b --- /dev/null +++ b/scripts/angelscript/items/bows_telf2.as @@ -0,0 +1,87 @@ +#pragma context server + +#include "items/bows_telf1.as" + +namespace MS +{ + +class BowsTelf2 : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + int CUSTOM_ATTACK; + string DAMAGE_TYPE; + float DMG_ADJ; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_AIMANGLE; + float RANGED_ATK_DURATION; + string RANGED_HOLD_MINMAX; + float RANGED_POSTFIRE_DELAY; + float RANGED_PULLTIME; + string RANGED_STAT; + string SOUND_SHOOT; + string TORKIE_BOW_TYPE; + + BowsTelf2() + { + BASE_LEVEL_REQ = 30; + MODEL_VIEW_IDX = 9; + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_WEAR = "weapons/p_weapons3.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "longbow"; + ANIM_PREFIX = "standard"; + MODEL_BODY_OFS = 54; + RANGED_POSTFIRE_DELAY = 1.0; + RANGED_ATK_DURATION = 1.0; + RANGED_AIMANGLE = Vector3(0, 0, 0); + CUSTOM_ATTACK = 1; + RANGED_HOLD_MINMAX = "1.1;1.3"; + RANGED_STAT = "archery"; + RANGED_PULLTIME = 1.0; + DAMAGE_TYPE = "cold_effect"; + DMG_ADJ = 0.55; + } + + void bow_spawn() + { + SetName("Torkalath Frost Bow"); + SetDescription("This enchanted bow is cold to the touch."); + SetWeight(100); + SetValue(1500); + SetHUDSprite("trade", 166); + custom_register(); + } + + void set_bow_type() + { + string DMG_AMT = GetSkillLevel(GetOwner(), "spellcasting.ice"); + DMG_AMT *= DMG_ADJ; + if ((UNDER_SKILLED)) + { + DMG_AMT *= 0.1; + } + TORKIE_BOW_TYPE = "cold"; + CallExternal(GetOwner(), "ext_set_spiral", TORKIE_BOW_TYPE, DMG_AMT); + } + + void ranged_start() + { + if (!(true)) return; + string OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.ice"); + if (!(OWNER_SKILL < 15)) return; + SendColoredMessage(GetOwner(), "You lack the ice affinity to activate this bow s magic."); + CancelAttack(); + } + +} + +} diff --git a/scripts/angelscript/items/bows_telf3.as b/scripts/angelscript/items/bows_telf3.as new file mode 100644 index 00000000..4a73f713 --- /dev/null +++ b/scripts/angelscript/items/bows_telf3.as @@ -0,0 +1,88 @@ +#pragma context server + +#include "items/bows_telf1.as" + +namespace MS +{ + +class BowsTelf3 : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + int CUSTOM_ATTACK; + string DAMAGE_TYPE; + float DMG_ADJ; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_AIMANGLE; + float RANGED_ATK_DURATION; + string RANGED_HOLD_MINMAX; + float RANGED_POSTFIRE_DELAY; + float RANGED_PULLTIME; + string RANGED_STAT; + string SOUND_SHOOT; + string TORKIE_BOW_TYPE; + + BowsTelf3() + { + BASE_LEVEL_REQ = 30; + MODEL_VIEW_IDX = 9; + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_WEAR = "weapons/p_weapons3.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "longbow"; + ANIM_PREFIX = "standard"; + MODEL_BODY_OFS = 54; + RANGED_POSTFIRE_DELAY = 1.0; + RANGED_ATK_DURATION = 1.0; + RANGED_AIMANGLE = Vector3(0, 0, 0); + CUSTOM_ATTACK = 1; + RANGED_HOLD_MINMAX = "1.1;1.3"; + RANGED_STAT = "archery"; + RANGED_PULLTIME = 1.0; + DAMAGE_TYPE = "lightning_effect"; + TORKIE_BOW_TYPE = "lightning"; + DMG_ADJ = 0.65; + } + + void bow_spawn() + { + SetName("Torkalath Lightning Bow"); + SetDescription("This enchanted bow tingles to the touch."); + SetWeight(100); + SetValue(1500); + SetHUDSprite("trade", 166); + custom_register(); + } + + void set_bow_type() + { + string DMG_AMT = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + DMG_AMT *= DMG_ADJ; + if ((UNDER_SKILLED)) + { + DMG_AMT *= 0.1; + } + TORKIE_BOW_TYPE = "lightning"; + CallExternal(GetOwner(), "ext_set_spiral", TORKIE_BOW_TYPE, DMG_AMT); + } + + void ranged_start() + { + if (!(true)) return; + string OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + if (!(OWNER_SKILL < 15)) return; + SendColoredMessage(GetOwner(), "You lack the lightning affinity to activate this bow s magic."); + CancelAttack(); + } + +} + +} diff --git a/scripts/angelscript/items/bows_telf4.as b/scripts/angelscript/items/bows_telf4.as new file mode 100644 index 00000000..4f9e7b2b --- /dev/null +++ b/scripts/angelscript/items/bows_telf4.as @@ -0,0 +1,122 @@ +#pragma context server + +#include "items/bows_telf1.as" + +namespace MS +{ + +class BowsTelf4 : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + int CUSTOM_ATTACK; + string DAMAGE_TYPE; + float DMG_ADJ; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_AIMANGLE; + float RANGED_ATK_DURATION; + string RANGED_HOLD_MINMAX; + float RANGED_POSTFIRE_DELAY; + float RANGED_PULLTIME; + string RANGED_STAT; + string SKILL_TYPE; + string SOUND_SHOOT; + string TORKIE_BOW_TYPE; + + BowsTelf4() + { + BASE_LEVEL_REQ = 30; + MODEL_VIEW_IDX = 9; + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_WEAR = "weapons/p_weapons3.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "longbow"; + ANIM_PREFIX = "standard"; + MODEL_BODY_OFS = 54; + RANGED_POSTFIRE_DELAY = 1.0; + RANGED_ATK_DURATION = 1.0; + RANGED_AIMANGLE = Vector3(0, 0, 0); + CUSTOM_ATTACK = 1; + RANGED_HOLD_MINMAX = "1.1;1.3"; + RANGED_STAT = "archery"; + RANGED_PULLTIME = 1.0; + DAMAGE_TYPE = "dark"; + DMG_ADJ = 0.75; + } + + void bow_spawn() + { + SetName("Torkalath Chaos Bow"); + SetDescription("An enchanted bow oft wielded by the dark elves of Torkalath."); + SetWeight(100); + SetValue(1750); + SetHUDSprite("trade", 166); + custom_register(); + } + + void set_bow_type() + { + int RND_ARROW = RandomInt(1, 3); + if (RND_ARROW == 1) + { + TORKIE_BOW_TYPE = "fire"; + string DMG_AMT = GetSkillLevel(GetOwner(), "spellcasting.fire"); + SKILL_TYPE = "fire"; + if (DMG_AMT < 15) + { + magic_skill_cancel(); + } + DMG_AMT *= DMG_ADJ; + } + if (RND_ARROW == 2) + { + TORKIE_BOW_TYPE = "cold"; + string DMG_AMT = GetSkillLevel(GetOwner(), "spellcasting.ice"); + SKILL_TYPE = "ice"; + if (DMG_AMT < 15) + { + magic_skill_cancel(); + } + DMG_AMT *= DMG_ADJ; + } + if (RND_ARROW == 3) + { + TORKIE_BOW_TYPE = "lightning"; + string DMG_AMT = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + SKILL_TYPE = "lightning"; + if (DMG_AMT < 15) + { + magic_skill_cancel(); + } + DMG_AMT *= DMG_ADJ; + } + if ((UNDER_SKILLED)) + { + DMG_AMT *= 0.1; + } + CallExternal(GetOwner(), "ext_set_spiral", TORKIE_BOW_TYPE, DMG_AMT); + } + + void ranged_start() + { + if (!(true)) return; + set_bow_type(); + } + + void magic_skill_cancel() + { + SendColoredMessage(GetOwner(), "The projectile fails to form due to your lack of " + SKILL_TYPE + " affinity."); + CancelAttack(); + } + +} + +} diff --git a/scripts/angelscript/items/bows_thornbow.as b/scripts/angelscript/items/bows_thornbow.as new file mode 100644 index 00000000..2afee557 --- /dev/null +++ b/scripts/angelscript/items/bows_thornbow.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/bows_base.as" + +namespace MS +{ + +class BowsThornbow : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_ACCURACY; + string RANGED_AIMANGLE; + float RANGED_ATK_DURATION; + float RANGED_DMG_DELAY; + float RANGED_DMG_MULTI; + int RANGED_ENERGY; + int RANGED_FORCE; + float RANGED_POSTFIRE_DELAY; + float RANGED_PULLTIME; + string SOUND_SHOOT; + + BowsThornbow() + { + BASE_LEVEL_REQ = 20; + MODEL_VIEW_IDX = 6; + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_WEAR = "weapons/p_weapons3.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "longbow"; + ANIM_PREFIX = "standard"; + MODEL_BODY_OFS = 0; + RANGED_FORCE = 1700; + RANGED_ENERGY = 2; + RANGED_ACCURACY = "1;0"; + RANGED_POSTFIRE_DELAY = 0.1; + RANGED_ATK_DURATION = 0.1; + RANGED_DMG_DELAY = 0.1; + RANGED_DMG_MULTI = 1.75; + RANGED_PULLTIME = 0.4; + RANGED_AIMANGLE = Vector3(0, 0, 0); + } + + void bow_spawn() + { + SetName("Thornbow"); + SetDescription("Augments arrows with magical thorns"); + SetWeight(100); + SetValue(1500); + SetHUDSprite("trade", 123); + } + +} + +} diff --git a/scripts/angelscript/items/bows_treebow.as b/scripts/angelscript/items/bows_treebow.as new file mode 100644 index 00000000..64ab9641 --- /dev/null +++ b/scripts/angelscript/items/bows_treebow.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "items/bows_base.as" + +namespace MS +{ + +class BowsTreebow : CGameScript +{ + string ANIM_PREFIX; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + string RANGED_ACCURACY; + int RANGED_ENERGY; + int RANGED_FORCE; + float RANGED_POSTFIRE_DELAY; + string SOUND_SHOOT; + + BowsTreebow() + { + MODEL_VIEW = "viewmodels/v_bows.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_WEAR = "weapons/p_weapons2.mdl"; + SOUND_SHOOT = "weapons/bow/bow.wav"; + ITEM_NAME = "treebow"; + ANIM_PREFIX = "treebow"; + MODEL_BODY_OFS = 36; + RANGED_FORCE = 750; + RANGED_ENERGY = 1; + RANGED_ACCURACY = "10;4"; + RANGED_POSTFIRE_DELAY = 0.3; + } + + void bow_spawn() + { + SetName("Tree Bow"); + SetDescription("A roughly crafted bow of bark and leaves"); + SetWeight(10); + SetSize(5); + SetValue(3); + SetHUDSprite("trade", 47); + } + +} + +} diff --git a/scripts/angelscript/items/brokenkey_1.as b/scripts/angelscript/items/brokenkey_1.as new file mode 100644 index 00000000..000e737f --- /dev/null +++ b/scripts/angelscript/items/brokenkey_1.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class Brokenkey1 : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + Brokenkey1() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Broken piece of a key 1/3"); + SetDescription("This seems to be the hilt of a key piece 1 of 3"); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/brokenkey_2.as b/scripts/angelscript/items/brokenkey_2.as new file mode 100644 index 00000000..01e98abe --- /dev/null +++ b/scripts/angelscript/items/brokenkey_2.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class Brokenkey2 : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + Brokenkey2() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Broken piece of a key 2/3"); + SetDescription("This seems to be the midsection of a key piece 2 of 3"); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/brokenkey_3.as b/scripts/angelscript/items/brokenkey_3.as new file mode 100644 index 00000000..d2d27533 --- /dev/null +++ b/scripts/angelscript/items/brokenkey_3.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class Brokenkey3 : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + Brokenkey3() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Broken piece of a key 3/3"); + SetDescription("This seems to be the tip of a key piece 3 of 3"); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_barnum.as b/scripts/angelscript/items/crest_barnum.as new file mode 100644 index 00000000..2385f0ec --- /dev/null +++ b/scripts/angelscript/items/crest_barnum.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestBarnum : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestBarnum() + { + MODEL_CREST_OFS = 26; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of P. T. Barnum"); + SetDescription("The Greatest Showman on Earth"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_bou.as b/scripts/angelscript/items/crest_bou.as new file mode 100644 index 00000000..47f7b6f9 --- /dev/null +++ b/scripts/angelscript/items/crest_bou.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestBou : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestBou() + { + MODEL_CREST_OFS = 12; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Blades of Urdual Crest"); + SetDescription("The crest of the Blades of Urdual"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_cloak_blue.as b/scripts/angelscript/items/crest_cloak_blue.as new file mode 100644 index 00000000..c2803caf --- /dev/null +++ b/scripts/angelscript/items/crest_cloak_blue.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "items/armor_base.as" + +namespace MS +{ + +class CrestCloakBlue : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_PROTECTION_AREA; + string BARMOR_REPLACE_BODYPARTS; + string BARMOR_TYPE; + int NEW_ARMOR_OFS; + + CrestCloakBlue() + { + ARMOR_MODEL = "armor/p_armorvest.mdl"; + ARMOR_BODY = 13; + ARMOR_TEXT = "You feel the Orochiness."; + BARMOR_TYPE = "leather"; + BARMOR_PROTECTION = 0.0; + BARMOR_PROTECTION_AREA = "chest"; + BARMOR_REPLACE_BODYPARTS = BARMOR_PROTECTION_AREA; + NEW_ARMOR_OFS = 13; + } + + void OnSpawn() override + { + SetName("Jacket of Orochi 3.0"); + SetDescription("Feel the re-re-revised Orochiness"); + SetWeight(0); + SetSize(0); + SetWearable(1); + SetValue(1); + SetHUDSprite("trade", "crestedana"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_crew.as b/scripts/angelscript/items/crest_crew.as new file mode 100644 index 00000000..e3a2fa52 --- /dev/null +++ b/scripts/angelscript/items/crest_crew.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestCrew : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestCrew() + { + MODEL_CREST_OFS = 2; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of the Crusaders"); + SetDescription("This is the crest worn by members of the Crusaders Guild"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_crow.as b/scripts/angelscript/items/crest_crow.as new file mode 100644 index 00000000..8c31cbed --- /dev/null +++ b/scripts/angelscript/items/crest_crow.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestCrow : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestCrow() + { + MODEL_CREST_OFS = 11; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of Crow"); + SetDescription("Delicious maps."); + } + +} + +} diff --git a/scripts/angelscript/items/crest_cwog.as b/scripts/angelscript/items/crest_cwog.as new file mode 100644 index 00000000..453334ae --- /dev/null +++ b/scripts/angelscript/items/crest_cwog.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestCwog : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestCwog() + { + MODEL_CREST_OFS = 3; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Christian Warriors of God"); + SetDescription("The crest worn by the members of Christian Warriors of God"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_darktide.as b/scripts/angelscript/items/crest_darktide.as new file mode 100644 index 00000000..fd212ba6 --- /dev/null +++ b/scripts/angelscript/items/crest_darktide.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestDarktide : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestDarktide() + { + MODEL_CREST_OFS = 9; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of Dark Tide"); + SetDescription("The crest worn by the members of Dark Tide"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_deralia.as b/scripts/angelscript/items/crest_deralia.as new file mode 100644 index 00000000..ccb26f53 --- /dev/null +++ b/scripts/angelscript/items/crest_deralia.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestDeralia : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestDeralia() + { + MODEL_CREST_OFS = 20; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of Deralia"); + SetValue(50000); + SetDescription("Crest worn by the wealthiest the aristocrats of Deralia"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_fellowship.as b/scripts/angelscript/items/crest_fellowship.as new file mode 100644 index 00000000..45129043 --- /dev/null +++ b/scripts/angelscript/items/crest_fellowship.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestFellowship : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestFellowship() + { + MODEL_CREST_OFS = 27; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of the Fellowship"); + SetDescription("For the folk of the hairy feet."); + } + +} + +} diff --git a/scripts/angelscript/items/crest_fmu.as b/scripts/angelscript/items/crest_fmu.as new file mode 100644 index 00000000..68d14960 --- /dev/null +++ b/scripts/angelscript/items/crest_fmu.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestFmu : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestFmu() + { + MODEL_CREST_OFS = 14; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("FMU Banner"); + SetDescription("Crest worn by the unartistic members of the Federated Mercenary Union"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_forestcroth.as b/scripts/angelscript/items/crest_forestcroth.as new file mode 100644 index 00000000..bdda8a56 --- /dev/null +++ b/scripts/angelscript/items/crest_forestcroth.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestForestcroth : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestForestcroth() + { + MODEL_CREST_OFS = 7; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Elves of Forest Croth"); + SetDescription("The crest worn by the members of The Elves of Forest Croth"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_gag.as b/scripts/angelscript/items/crest_gag.as new file mode 100644 index 00000000..1aa84954 --- /dev/null +++ b/scripts/angelscript/items/crest_gag.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestGag : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestGag() + { + MODEL_CREST_OFS = 13; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of Helena"); + SetDescription("Congratulations! You survived Helena! :P"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_gow.as b/scripts/angelscript/items/crest_gow.as new file mode 100644 index 00000000..ae090946 --- /dev/null +++ b/scripts/angelscript/items/crest_gow.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestGow : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestGow() + { + MODEL_CREST_OFS = 18; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void OnSpawn() override + { + SetName("Crest of the Gods of War"); + SetDescription("Crest of the Gods of War Guild"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_hod.as b/scripts/angelscript/items/crest_hod.as new file mode 100644 index 00000000..01a3f56d --- /dev/null +++ b/scripts/angelscript/items/crest_hod.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestHod : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestHod() + { + MODEL_CREST_OFS = 28; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Heroes of Dawn Crest"); + SetDescription("For those who are part of the Heroes of Dawn"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_hov.as b/scripts/angelscript/items/crest_hov.as new file mode 100644 index 00000000..3c94f002 --- /dev/null +++ b/scripts/angelscript/items/crest_hov.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestHov : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestHov() + { + MODEL_CREST_OFS = 6; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Hearts of Valor Crest"); + SetDescription("The crest given to true members of Valor , the Hearts"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_justice.as b/scripts/angelscript/items/crest_justice.as new file mode 100644 index 00000000..173a4bda --- /dev/null +++ b/scripts/angelscript/items/crest_justice.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestJustice : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestJustice() + { + MODEL_CREST_OFS = 22; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of Great Justice"); + SetDescription("Show your support for the unjustly slain"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_neko.as b/scripts/angelscript/items/crest_neko.as new file mode 100644 index 00000000..1a5108dc --- /dev/null +++ b/scripts/angelscript/items/crest_neko.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestNeko : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestNeko() + { + MODEL_CREST_OFS = 33; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of the Black Cat"); + SetDescription("Sassiness runs in the blood."); + } + +} + +} diff --git a/scripts/angelscript/items/crest_noclicky.as b/scripts/angelscript/items/crest_noclicky.as new file mode 100644 index 00000000..dc20c3c2 --- /dev/null +++ b/scripts/angelscript/items/crest_noclicky.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestNoclicky : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestNoclicky() + { + MODEL_CREST_OFS = 17; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of No Clicky"); + SetDescription("Crest to stop n00bs from clicking when STEAM_ID_PENDING"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_pathos.as b/scripts/angelscript/items/crest_pathos.as new file mode 100644 index 00000000..bb94a66b --- /dev/null +++ b/scripts/angelscript/items/crest_pathos.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestPathos : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestPathos() + { + MODEL_CREST_OFS = 25; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Sentinels of Pathos Crest"); + SetDescription("Good... Bad... I m the guy with the crest."); + } + +} + +} diff --git a/scripts/angelscript/items/crest_pirates.as b/scripts/angelscript/items/crest_pirates.as new file mode 100644 index 00000000..2d93570a --- /dev/null +++ b/scripts/angelscript/items/crest_pirates.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestPirates : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestPirates() + { + MODEL_CREST_OFS = 4; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of The Pirates"); + SetDescription("The crest worn by the members of The Pirates"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_revenge.as b/scripts/angelscript/items/crest_revenge.as new file mode 100644 index 00000000..4a9a9657 --- /dev/null +++ b/scripts/angelscript/items/crest_revenge.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestRevenge : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestRevenge() + { + MODEL_CREST_OFS = 23; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of Vengence"); + SetDescription("Show your support for the unjustly slain"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_rip100.as b/scripts/angelscript/items/crest_rip100.as new file mode 100644 index 00000000..b12a1a91 --- /dev/null +++ b/scripts/angelscript/items/crest_rip100.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestRip100 : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestRip100() + { + MODEL_CREST_OFS = 16; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of RIP"); + SetDescription("Rest In Peace Guild Crest"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_socialist.as b/scripts/angelscript/items/crest_socialist.as new file mode 100644 index 00000000..74439742 --- /dev/null +++ b/scripts/angelscript/items/crest_socialist.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestSocialist : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestSocialist() + { + MODEL_CREST_OFS = 24; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of Socialism"); + SetDescription("For those filthy socialist."); + } + +} + +} diff --git a/scripts/angelscript/items/crest_sor.as b/scripts/angelscript/items/crest_sor.as new file mode 100644 index 00000000..e8e6abe6 --- /dev/null +++ b/scripts/angelscript/items/crest_sor.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestSor : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestSor() + { + MODEL_CREST_OFS = 35; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Seraphs of Rhaa"); + SetDescription("May you ascend to the Tower of Rhaa"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_tdk.as b/scripts/angelscript/items/crest_tdk.as new file mode 100644 index 00000000..85e386ea --- /dev/null +++ b/scripts/angelscript/items/crest_tdk.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestTdk : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestTdk() + { + MODEL_CREST_OFS = 29; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("The Dragonknight Crest"); + SetDescription("Official Crest of the Dragonknights"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_tfl.as b/scripts/angelscript/items/crest_tfl.as new file mode 100644 index 00000000..9420a2d0 --- /dev/null +++ b/scripts/angelscript/items/crest_tfl.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestTfl : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestTfl() + { + MODEL_CREST_OFS = 21; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of TFL"); + SetDescription("For those who have fallen , and can t get up"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_torkalath.as b/scripts/angelscript/items/crest_torkalath.as new file mode 100644 index 00000000..ada28917 --- /dev/null +++ b/scripts/angelscript/items/crest_torkalath.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestTorkalath : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestTorkalath() + { + MODEL_CREST_OFS = 8; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of Torkalath"); + SetDescription("The crest worn by the members of The Dark Elves of Torkalath"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_torkie.as b/scripts/angelscript/items/crest_torkie.as new file mode 100644 index 00000000..ff16e695 --- /dev/null +++ b/scripts/angelscript/items/crest_torkie.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestTorkie : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestTorkie() + { + MODEL_CREST_OFS = 30; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("The Shadows of Torkalath Crest"); + SetDescription("The crest of the ambitious"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_valor.as b/scripts/angelscript/items/crest_valor.as new file mode 100644 index 00000000..47e7d66c --- /dev/null +++ b/scripts/angelscript/items/crest_valor.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestValor : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestValor() + { + MODEL_CREST_OFS = 6; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Knights of Valor"); + SetDescription("The crest worn by the members of The Knights of Valor"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_w_1.as b/scripts/angelscript/items/crest_w_1.as new file mode 100644 index 00000000..8ba22c11 --- /dev/null +++ b/scripts/angelscript/items/crest_w_1.as @@ -0,0 +1,52 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestW1 : CGameScript +{ + int IS_RESERVED; + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestW1() + { + MODEL_CREST_OFS = 31; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Avocado s Wallpaper Crest 2012"); + SetDescription("Reward for MSC Wallpaper Contest 2012"); + } + + void OnDeploy() override + { + if ((IS_RESERVED)) return; + IS_RESERVED = 1; + array PICKUP_ALLOW_LIST; + PICKUP_ALLOW_LIST.insertLast(GetEntityIndex(GetOwner())); + } + + void game_fall() + { + if ((IS_RESERVED)) return; + IS_RESERVED = 1; + array PICKUP_ALLOW_LIST; + PICKUP_ALLOW_LIST.insertLast(GetEntityIndex(GetOwner())); + } + + void game_restricted() + { + string OUT_MSG = "This crest is reserved for "; + string ITEM_RESERVER = PICKUP_ALLOW_LIST[int(0)]; + OUT_MSG += GetEntityName(ITEM_RESERVER); + SendInfoMsg(param1, "Item Restricted " + OUT_MSG); + } + +} + +} diff --git a/scripts/angelscript/items/crest_w_2.as b/scripts/angelscript/items/crest_w_2.as new file mode 100644 index 00000000..9e170e91 --- /dev/null +++ b/scripts/angelscript/items/crest_w_2.as @@ -0,0 +1,50 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestW2 : CGameScript +{ + int IS_RESERVED; + int MODEL_CREST_OFS; + + CrestW2() + { + MODEL_CREST_OFS = 32; + } + + void crest_spawn() + { + SetName("Lockdown s Wallpaper Crest 2012"); + SetDescription("Reward for MSC Wallpaper Contest 2012"); + } + + void OnDeploy() override + { + if ((IS_RESERVED)) return; + IS_RESERVED = 1; + array PICKUP_ALLOW_LIST; + PICKUP_ALLOW_LIST.insertLast(GetEntityIndex(GetOwner())); + } + + void game_fall() + { + if ((IS_RESERVED)) return; + IS_RESERVED = 1; + array PICKUP_ALLOW_LIST; + PICKUP_ALLOW_LIST.insertLast(GetEntityIndex(GetOwner())); + } + + void game_restricted() + { + string OUT_MSG = "This crest is reserved for "; + string ITEM_RESERVER = PICKUP_ALLOW_LIST[int(0)]; + OUT_MSG += GetEntityName(ITEM_RESERVER); + SendInfoMsg(param1, "Item Restricted " + OUT_MSG); + } + +} + +} diff --git a/scripts/angelscript/items/crest_wario.as b/scripts/angelscript/items/crest_wario.as new file mode 100644 index 00000000..df0f3748 --- /dev/null +++ b/scripts/angelscript/items/crest_wario.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestWario : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestWario() + { + MODEL_CREST_OFS = 19; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Crest of MK"); + SetDescription("This is the crest worn by Italian plumbers everywhere"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_wildfire.as b/scripts/angelscript/items/crest_wildfire.as new file mode 100644 index 00000000..8de9fcf2 --- /dev/null +++ b/scripts/angelscript/items/crest_wildfire.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestWildfire : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestWildfire() + { + MODEL_CREST_OFS = 5; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Wildfire Legion Crest"); + SetDescription("The crest worn by the members of The Wildfire Legion"); + } + +} + +} diff --git a/scripts/angelscript/items/crest_wotn.as b/scripts/angelscript/items/crest_wotn.as new file mode 100644 index 00000000..fb2f19f2 --- /dev/null +++ b/scripts/angelscript/items/crest_wotn.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestWotn : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestWotn() + { + MODEL_CREST_OFS = 34; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Warriors of the North"); + SetDescription("Don't be an asshat."); + } + +} + +} diff --git a/scripts/angelscript/items/crest_yoku.as b/scripts/angelscript/items/crest_yoku.as new file mode 100644 index 00000000..dbc5daca --- /dev/null +++ b/scripts/angelscript/items/crest_yoku.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class CrestYoku : CGameScript +{ + int MODEL_CREST_OFS; + string MODEL_WEAR; + + CrestYoku() + { + MODEL_CREST_OFS = 15; + MODEL_WEAR = "armor/p_gowns.mdl"; + } + + void crest_spawn() + { + SetName("Seiryoku Banner"); + SetDescription("Seiryoku girudo no kishi"); + } + +} + +} diff --git a/scripts/angelscript/items/crossbow_heavy.as b/scripts/angelscript/items/crossbow_heavy.as new file mode 100644 index 00000000..cb939326 --- /dev/null +++ b/scripts/angelscript/items/crossbow_heavy.as @@ -0,0 +1,155 @@ +#pragma context server + +#include "items/base_weapon.as" + +namespace MS +{ + +class CrossbowHeavy : CGameScript +{ + int ANIM_FIRE; + int ANIM_IDLE1; + int ANIM_LIFT1; + int ANIM_STRETCH; + float ATTACK_ACCURACYDEFAULT; + string ATTACK_ACCURACYSTAT; + int ATTACK_ALIGN_BASE; + int ATTACK_ALIGN_TIP; + string ATTACK_DAMAGE_TYPE; + string ATTACK_DONE_EVENT; + float ATTACK_DURATION; + float ATTACK_ENERGY; + string ATTACK_EVENT; + string ATTACK_KEYS; + string ATTACK_LAND_EVENT; + int ATTACK_PRIORITY; + string ATTACK_PROJECTILE; + float ATTACK_PROJMAXHOLD; + float ATTACK_PROJMINHOLD; + int ATTACK_RANGE; + string ATTACK_TYPE; + string ITEM_NAME; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + string SOUND_SHOOT; + + CrossbowHeavy() + { + ANIM_IDLE1 = 0; + ANIM_LIFT1 = 4; + ANIM_STRETCH = 8; + ANIM_FIRE = 7; + MODEL_VIEW = "weapons/bows/v_crossbow.mdl"; + MODEL_HANDS = "weapons/bows/p_crossbow.mdl"; + MODEL_WORLD = "weapons/bows/w_crossbow.mdl"; + MODEL_WEAR = "weapons/bows/crossbow_back.mdl"; + SOUND_SHOOT = "weapons/bow/crossbow.wav"; + ITEM_NAME = "xbow"; + } + + void weapon_spawn() + { + SetName("Heavy Crossbow"); + SetDescription("A heavier crossbow that allows bolts to fly further"); + SetWeight(95); + SetSize(12); + SetValue(3000); + SetWearable(1); + SetAnimExt("bow"); + SetWorldModel(MODEL_WORLD); + SetViewModel(MODEL_VIEW); + SetPlayerModel(MODEL_HANDS); + SetHand("both"); + SetHUDSprite("hand", "bow"); + SetHUDSprite("trade", ITEM_NAME); + register_shoot(); + SetModelBody(0, 1); + Precache(MODEL_VIEW); + } + + void deploy() + { + SetViewModel(MODEL_VIEW); + // TODO: UNCONVERTED: setholdmodel ITEM_NAME + SetModelBody(0, 1); + } + + void pickup() + { + PlayViewAnim(ANIM_LIFT1); + } + + void switchhands() + { + PlayViewAnim(ANIM_IDLE1); + } + + void wear() + { + SetViewModel("none"); + SetModel(MODEL_WEAR); + SendPlayerMessage("You", "sling a crossbow onto your back."); + } + + void removefromowner() + { + SetModelBody(0, 0); + CallOwnerEvent("drop_orcbow"); + } + + void register_shoot() + { + ATTACK_TYPE = "charge-throw-projectile"; + ATTACK_DAMAGE_TYPE = "none"; + ATTACK_KEYS = "+attack1"; + ATTACK_PRIORITY = 0; + ATTACK_EVENT = "shoot"; + ATTACK_LAND_EVENT = "shoot_fire"; + ATTACK_DONE_EVENT = "shoot_done"; + ATTACK_RANGE = 1900; + ATTACK_ENERGY = 0.1; + ATTACK_PROJMINHOLD = 2.0; + ATTACK_PROJMAXHOLD = 2.0; + ATTACK_DURATION = 0.001; + ATTACK_ACCURACYSTAT = "archery"; + ATTACK_ACCURACYDEFAULT = 0.01; + ATTACK_ALIGN_BASE = 0; + ATTACK_ALIGN_TIP = 0; + ATTACK_PROJECTILE = "bolt"; + RegisterAttack(); + } + + void shoot() + { + PlayViewAnim(ANIM_STRETCH); + PlayOwnerAnim("break"); + PlayOwnerAnim("hold", "bow_fire"); + CallOwnerEvent("commenceattack"); + } + + void shoot_fire() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_SHOOT); + PlayViewAnim(ANIM_FIRE); + CallOwnerEvent("attackstrike"); + } + + void shoot_done() + { + PlayViewAnim(ANIM_LIFT1); + PlayOwnerAnim("critical", "aim_bow"); + ScheduleDelayedEvent(1, "shoot_returnstanding"); + } + + void shoot_returnstanding() + { + if (!(CURRENTLY_ATTACKING == 0)) return; + PlayOwnerAnim("once", "bow_aim_to_stand"); + } + +} + +} diff --git a/scripts/angelscript/items/crossbow_light.as b/scripts/angelscript/items/crossbow_light.as new file mode 100644 index 00000000..e2bde345 --- /dev/null +++ b/scripts/angelscript/items/crossbow_light.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "items/health_apple.as" + +namespace MS +{ + +class CrossbowLight : CGameScript +{ + int DRINK_AMOUNT; + + CrossbowLight() + { + DRINK_AMOUNT = 1; + } + + void drink_spawn() + { + SetName("Cheater s Crossbow"); + SetDescription("Eat this , cheaters"); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff.as b/scripts/angelscript/items/dev_staff.as new file mode 100644 index 00000000..a01a5e69 --- /dev/null +++ b/scripts/angelscript/items/dev_staff.as @@ -0,0 +1,193 @@ +#pragma context server + +#include "items/base_item_extras.as" +#include "items/dev_staff/physgun.as" +#include "items/dev_staff/copypaste.as" +#include "items/dev_staff/remover.as" +#include "items/dev_staff/afflicter.as" +#include "items/dev_staff/damager.as" + +namespace MS +{ + +class DevStaff : CGameScript +{ + int ANIM_USE; + string BEAM_TARGET; + int BEAM_TYPE; + int LAST_ANIM; + string MENU_ID; + int NO_BANK; + + DevStaff() + { + ANIM_USE = 6; + LAST_ANIM = 0; + NO_BANK = 1; + BEAM_TYPE = 0; + BEAM_TARGET = "none"; + MENU_ID = "none"; + } + + void game_removefromowner() + { + validation_check(); + } + + void validation_check() + { + if (("game.central")) + { + string L_ME = GetPlayerAuthId(GetOwner()); + if ((G_DEVSTAFF_OWNERS).findFirst(L_ME) >= 0) + { + DeleteEntity(GetOwner()); + } + } + } + + void OnSpawn() override + { + SetName("Jester's Staff"); + SetDescription("For the real clowns who spend days troubleshooting simple problems."); + SetWeight(0); + SetSize(5); + SetValue(0); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", 21); + SetModel("weapons/p_weapons1.mdl"); + SetModelBody(0, 20); + SetViewModel("viewmodels/v_1hblunts.mdl"); + SetHand("both"); + SetExpireTime(0); + } + + void bweapon_effect_activate() + { + SendColoredMessage(GetOwner(), "Hold 'e' then push mouse1 to access the menu."); + SendColoredMessage(GetOwner(), "Mouse2 instead to copy your target. Left click will be replaced with paste."); + SendColoredMessage(GetOwner(), "Clear the clipboard (copy nothing) to restore other left click function."); + ScheduleDelayedEvent(0.1, "submodel_me_baby"); + if (!(MENU_ID == "none")) return; + SpawnNPC("items/dev_staff/menus/main", "(0,0,0)", ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()) + MENU_ID = GetEntityIndex(m_hLastCreated); + } + + void bweapon_effect_remove() + { + DeleteEntity(MENU_ID); + MENU_ID = "none"; + } + + void OnPickup(CBaseEntity@ player) override + { + PlayViewAnim(0); + } + + void game_attack1() + { + if ((IsKeyDown(GetOwner(), "use"))) + { + CallExternal(MENU_ID, "ext_menu_main"); + } + else + { + if (NPC_CLIPBOARD != "none") + { + paste_target(); + } + } + } + + void game_attack1_down() + { + if (!(IsKeyDown(GetOwner(), "use"))) + { + if (NPC_CLIPBOARD == "none") + { + if (BEAM_TYPE == 0) + { + try_physgun(); + } + if (BEAM_TYPE == 1) + { + try_remove(); + } + if (BEAM_TYPE == 2) + { + try_applyeffect(); + } + if (BEAM_TYPE == 3) + { + try_damage(); + } + } + } + try_anim(); + } + + void game_attack2() + { + if ((IsKeyDown(GetOwner(), "use"))) + { + copy_target(); + } + else + { + if ((AM_NOCLIPPING)) + { + AM_NOCLIPPING = 0; + SetProp(GetOwner(), "movetype", 3); + SetProp(GetOwner(), "solid", 2); + } + else + { + AM_NOCLIPPING = 1; + SetProp(GetOwner(), "movetype", 8); + SetProp(GetOwner(), "solid", 0); + } + } + } + + void find_beam_target() + { + string L_START = GetEntityProperty(GetOwner(), "eyepos"); + string L_END = /* TODO: $relpos */ $relpos(GetEntityProperty(GetOwner(), "viewangles"), Vector3(0, 10000, 0)); + L_END += L_START; + BEAM_TARGET = "none"; + string L_TARGET = TraceLine(L_START, L_END); + if (((L_TARGET !is null))) + { + if ((IsEntityAlive(L_TARGET))) + { + BEAM_TARGET = L_TARGET; + } + } + } + + void try_anim() + { + if ((GetGameTime() - LAST_ANIM) > 0.8) + { + PlayViewAnim(ANIM_USE); + LAST_ANIM = GetGameTime(); + } + } + + void set_beam_type() + { + BEAM_TYPE = param1; + } + + void submodel_me_baby() + { + // TODO: setviewmodelprop ent_me submodel 0 6 + } + + void wmodel_me_baby() + { + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/afflicter.as b/scripts/angelscript/items/dev_staff/afflicter.as new file mode 100644 index 00000000..a6cb7f50 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/afflicter.as @@ -0,0 +1,86 @@ +#pragma context server + +namespace MS +{ + +class Afflicter : CGameScript +{ + float AFFLICT_DMG; + int AFFLICT_DURATION; + string AFFLICT_PARAMS; + string AFFLICT_SCRIPT; + string AFFLICT_SKILL; + + Afflicter() + { + AFFLICT_SCRIPT = "effects/dot_fire"; + AFFLICT_DURATION = 3; + AFFLICT_DMG = 3.33; + AFFLICT_SKILL = "swordsmanship"; + AFFLICT_PARAMS = "none"; + } + + void try_applyeffect() + { + find_beam_target(); + if (GetEntityOrigin(BEAM_TARGET) == "(0.00,0.00,0.00)") + { + return; + } + ApplyEffect(BEAM_TARGET, AFFLICT_SCRIPT, AFFLICT_DURATION, GetEntityIndex(GetOwner()), AFFLICT_DMG, AFFLICT_SKILL); + } + + void set_affliction() + { + if (param1 == "fire") + { + AFFLICT_SCRIPT = "effects/dot_fire"; + AFFLICT_SKILL = "spellcasting.fire"; + } + else + { + if (param1 == "cold") + { + AFFLICT_SCRIPT = "effects/dot_cold"; + AFFLICT_SKILL = "spellcasting.ice"; + } + else + { + if (param1 == "lightning") + { + AFFLICT_SCRIPT = "effects/dot_lightning"; + AFFLICT_SKILL = "spellcasting.lightning"; + } + else + { + if (param1 == "holy") + { + AFFLICT_SCRIPT = "effects/dot_holy"; + AFFLICT_SKILL = "spellcasting.divination"; + } + else + { + if (param1 == "poison") + { + AFFLICT_SCRIPT = "effects/dot_poison"; + AFFLICT_SKILL = "spellcasting.affliction"; + } + else + { + if (param1 == "acid") + { + AFFLICT_SCRIPT = "effects/dot_acid"; + AFFLICT_SKILL = "spellcasting.affliction"; + } + } + } + } + } + } + AFFLICT_DURATION = param2; + AFFLICT_DMG = param3; + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/ammo.as b/scripts/angelscript/items/dev_staff/chests/ammo.as new file mode 100644 index 00000000..3fbc1785 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/ammo.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Ammo : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "proj_arrow_blunt", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_bluntwooden", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_broadhead", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_fire", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_frost", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_gholy", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_gpoison", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_holy", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_jagged", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_lightning", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_poison", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_silvertipped", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_arrow_wooden", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_bolt_fire", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_bolt_iron", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_bolt_poison", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_bolt_silver", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_bolt_steel", 9999, 0, 0, 250); + AddStoreItem(STORENAME, "proj_bolt_wooden", 9999, 0, 0, 250); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/archery.as b/scripts/angelscript/items/dev_staff/chests/archery.as new file mode 100644 index 00000000..c1d8457b --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/archery.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Archery : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "bows_crossbow_heavy33", 1, 0); + AddStoreItem(STORENAME, "bows_crossbow_light", 1, 0); + AddStoreItem(STORENAME, "bows_firebird", 1, 0); + AddStoreItem(STORENAME, "bows_frost", 1, 0); + AddStoreItem(STORENAME, "bows_longbow", 1, 0); + AddStoreItem(STORENAME, "bows_orcbow", 1, 0); + AddStoreItem(STORENAME, "bows_orion1", 1, 0); + AddStoreItem(STORENAME, "bows_shortbow", 1, 0); + AddStoreItem(STORENAME, "bows_sxbow", 1, 0); + AddStoreItem(STORENAME, "bows_swiftbow", 1, 0); + AddStoreItem(STORENAME, "bows_sxbow", 1, 0); + AddStoreItem(STORENAME, "bows_telf1", 1, 0); + AddStoreItem(STORENAME, "bows_telf2", 1, 0); + AddStoreItem(STORENAME, "bows_telf3", 1, 0); + AddStoreItem(STORENAME, "bows_telf4", 1, 0); + AddStoreItem(STORENAME, "bows_thornbow", 1, 0); + AddStoreItem(STORENAME, "bows_treebow", 1, 0); + AddStoreItem(STORENAME, "bows_arrow_blunt", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_arrow_broadhead", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_arrow_fire", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_arrow_frost", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_arrow_gholy", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_arrow_gpoison", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_arrow_holy", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_arrow_jagged", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_arrow_lightning", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_arrow_poison", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_arrow_wooden", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_bolt_fire", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_bolt_iron", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_bolt_poison", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_bolt_silver", 1500, 0, 0, 250); + AddStoreItem(STORENAME, "bows_bolt_steel", 1500, 0, 0, 250); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/armor.as b/scripts/angelscript/items/dev_staff/chests/armor.as new file mode 100644 index 00000000..9e4a99f2 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/armor.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Armor : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "armor_belmont", 1, 0); + AddStoreItem(STORENAME, "armor_dark", 1, 0); + AddStoreItem(STORENAME, "armor_faura", 1, 0); + AddStoreItem(STORENAME, "armor_fireliz", 1, 0); + AddStoreItem(STORENAME, "armor_golden", 1, 0); + AddStoreItem(STORENAME, "armor_knight", 1, 0); + AddStoreItem(STORENAME, "armor_leather", 1, 0); + AddStoreItem(STORENAME, "armor_leather_gaz1", 1, 0); + AddStoreItem(STORENAME, "armor_leather_studded", 1, 0); + AddStoreItem(STORENAME, "armor_leather_torn", 1, 0); + AddStoreItem(STORENAME, "armor_mongol", 1, 0); + AddStoreItem(STORENAME, "armor_paura", 1, 0); + AddStoreItem(STORENAME, "armor_pheonix55", 1, 0); + AddStoreItem(STORENAME, "armor_plate", 1, 0); + AddStoreItem(STORENAME, "armor_rehab", 1, 0); + AddStoreItem(STORENAME, "armor_salamander", 1, 0); + AddStoreItem(STORENAME, "armor_venom", 1, 0); + AddStoreItem(STORENAME, "armor_helm_alvo1", 1, 0); + AddStoreItem(STORENAME, "armor_helm_bronze", 1, 0); + AddStoreItem(STORENAME, "armor_helm_dark", 1, 0); + AddStoreItem(STORENAME, "armor_helm_elyg", 1, 0); + AddStoreItem(STORENAME, "armor_helm_gaz1", 1, 0); + AddStoreItem(STORENAME, "armor_helm_gaz2", 1, 0); + AddStoreItem(STORENAME, "armor_helm_golden", 1, 0); + AddStoreItem(STORENAME, "armor_helm_gray", 1, 0); + AddStoreItem(STORENAME, "armor_helm_knight", 1, 0); + AddStoreItem(STORENAME, "armor_helm_mongol", 1, 0); + AddStoreItem(STORENAME, "armor_helm_plate", 1, 0); + AddStoreItem(STORENAME, "armor_helm_undead", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/arrows.as b/scripts/angelscript/items/dev_staff/chests/arrows.as new file mode 100644 index 00000000..e0e8d375 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/arrows.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Arrows : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "proj_arrow_bluntwooden", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_blunt", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_broadhead", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_fire", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_frost", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_gholy", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_gpoison", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_holy", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_jagged", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_lightning", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_poison", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_silvertipped", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_arrow_wooden", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_bolt_iron", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_bolt_fire", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_bolt_poison", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_bolt_silver", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_bolt_steel", 600, 0, 0, 60); + AddStoreItem(STORENAME, "proj_bolt_wooden", 600, 0, 0, 60); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/axes.as b/scripts/angelscript/items/dev_staff/chests/axes.as new file mode 100644 index 00000000..b85356d2 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/axes.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Axes : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "axes_2haxe", 1, 0); + AddStoreItem(STORENAME, "axes_axe", 2, 0); + AddStoreItem(STORENAME, "axes_b", 1, 0); + AddStoreItem(STORENAME, "axes_battleaxe", 1, 0); + AddStoreItem(STORENAME, "axes_c", 1, 0); + AddStoreItem(STORENAME, "axes_df", 1, 0); + AddStoreItem(STORENAME, "axes_doubleaxe", 2, 0); + AddStoreItem(STORENAME, "axes_dragon", 1, 0); + AddStoreItem(STORENAME, "axes_golden", 1, 0); + AddStoreItem(STORENAME, "axes_golden_ref", 1, 0); + AddStoreItem(STORENAME, "axes_greataxe", 1, 0); + AddStoreItem(STORENAME, "axes_gthunder11", 1, 0); + AddStoreItem(STORENAME, "axes_poison1", 1, 0); + AddStoreItem(STORENAME, "axes_rsmallaxe", 2, 0); + AddStoreItem(STORENAME, "axes_runeaxe", 2, 0); + AddStoreItem(STORENAME, "axes_scythe", 1, 0); + AddStoreItem(STORENAME, "axes_smallaxe", 2, 0); + AddStoreItem(STORENAME, "axes_sp", 1, 0); + AddStoreItem(STORENAME, "axes_ss", 1, 0); + AddStoreItem(STORENAME, "axes_td", 5, 0); + AddStoreItem(STORENAME, "axes_tf", 5, 0); + AddStoreItem(STORENAME, "axes_ti", 5, 0); + AddStoreItem(STORENAME, "axes_tl", 5, 0); + AddStoreItem(STORENAME, "axes_tp", 5, 0); + AddStoreItem(STORENAME, "axes_thunder11", 1, 0); + AddStoreItem(STORENAME, "axes_vaxe", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/bluntarms.as b/scripts/angelscript/items/dev_staff/chests/bluntarms.as new file mode 100644 index 00000000..85e3171a --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/bluntarms.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Bluntarms : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "blunt_bf", 1, 0); + AddStoreItem(STORENAME, "blunt_bt", 1, 0); + AddStoreItem(STORENAME, "blunt_calrianmace", 2, 0); + AddStoreItem(STORENAME, "blunt_club", 2, 0); + AddStoreItem(STORENAME, "blunt_darkmaul", 1, 0); + AddStoreItem(STORENAME, "blunt_db", 1, 0); + AddStoreItem(STORENAME, "blunt_eb", 1, 0); + AddStoreItem(STORENAME, "blunt_frost321", 1, 0); + AddStoreItem(STORENAME, "blunt_fs", 1, 0); + AddStoreItem(STORENAME, "blunt_granitemace", 2, 0); + AddStoreItem(STORENAME, "blunt_granitemaul", 1, 0); + AddStoreItem(STORENAME, "blunt_greatmaul", 1, 0); + AddStoreItem(STORENAME, "blunt_hammer1", 2, 0); + AddStoreItem(STORENAME, "blunt_hammer2", 2, 0); + AddStoreItem(STORENAME, "blunt_hammer3", 2, 0); + AddStoreItem(STORENAME, "blunt_mace", 2, 0); + AddStoreItem(STORENAME, "blunt_maul", 1, 0); + AddStoreItem(STORENAME, "blunt_mithral", 1, 0); + AddStoreItem(STORENAME, "blunt_ms1", 2, 0); + AddStoreItem(STORENAME, "blunt_ms2", 2, 0); + AddStoreItem(STORENAME, "blunt_ms3", 2, 0); + AddStoreItem(STORENAME, "blunt_northmaul972", 1, 0); + AddStoreItem(STORENAME, "blunt_ravenmace", 1, 0); + AddStoreItem(STORENAME, "blunt_rudolfsmace", 2, 0); + AddStoreItem(STORENAME, "blunt_rustyhammer2", 2, 0); + AddStoreItem(STORENAME, "blunt_warhammer", 2, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/magic.as b/scripts/angelscript/items/dev_staff/chests/magic.as new file mode 100644 index 00000000..1654696f --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/magic.as @@ -0,0 +1,79 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Magic : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "blunt_staff_a", 1, 0); + AddStoreItem(STORENAME, "blunt_staff_f", 1, 0); + AddStoreItem(STORENAME, "blunt_staff_i", 1, 0); + AddStoreItem(STORENAME, "blunt_lrod11", 1, 0); + AddStoreItem(STORENAME, "scroll_acid_xolt", 1, 0); + AddStoreItem(STORENAME, "scroll_blizzard", 1, 0); + AddStoreItem(STORENAME, "scroll_conjure_venom_claws", 1, 0); + AddStoreItem(STORENAME, "scroll_fire_ball", 1, 0); + AddStoreItem(STORENAME, "scroll_fire_dart", 1, 0); + AddStoreItem(STORENAME, "scroll_fire_wall", 1, 0); + AddStoreItem(STORENAME, "scroll_frost_xolt", 1, 0); + AddStoreItem(STORENAME, "scroll_glow", 1, 0); + AddStoreItem(STORENAME, "scroll_healing_circle", 1, 0); + AddStoreItem(STORENAME, "scroll_healing_wave", 1, 0); + AddStoreItem(STORENAME, "scroll_ice_blast", 1, 0); + AddStoreItem(STORENAME, "scroll_ice_lance", 1, 0); + AddStoreItem(STORENAME, "scroll_ice_shield", 1, 0); + AddStoreItem(STORENAME, "scroll_ice_shield_lesser", 1, 0); + AddStoreItem(STORENAME, "scroll_ice_wall", 1, 0); + AddStoreItem(STORENAME, "scroll_ice_xolt", 1, 0); + AddStoreItem(STORENAME, "scroll_lightning_chain", 1, 0); + AddStoreItem(STORENAME, "scroll_lightning_disc", 1, 0); + AddStoreItem(STORENAME, "scroll_lightning_storm", 1, 0); + AddStoreItem(STORENAME, "scroll_lightning_weak", 1, 0); + AddStoreItem(STORENAME, "scroll_poison", 1, 0); + AddStoreItem(STORENAME, "scroll_poison_cloud", 1, 0); + AddStoreItem(STORENAME, "scroll_rejuvenate", 1, 0); + AddStoreItem(STORENAME, "scroll_summon_bear1", 1, 0); + AddStoreItem(STORENAME, "scroll_summon_fangtooth", 1, 0); + AddStoreItem(STORENAME, "scroll_summon_guard", 1, 0); + AddStoreItem(STORENAME, "scroll_summon_rat", 1, 0); + AddStoreItem(STORENAME, "scroll_summon_undead", 1, 0); + AddStoreItem(STORENAME, "scroll_turn_undead", 1, 0); + AddStoreItem(STORENAME, "scroll_volcano", 1, 0); + AddStoreItem(STORENAME, "scroll2_acid_bolt", 1, 0); + AddStoreItem(STORENAME, "scroll2_acid_xolt", 1, 0); + AddStoreItem(STORENAME, "scroll2_blizzard", 1, 0); + AddStoreItem(STORENAME, "scroll2_conjure_venom_claws", 1, 0); + AddStoreItem(STORENAME, "scroll2_fire_ball", 1, 0); + AddStoreItem(STORENAME, "scroll2_fire_dart", 1, 0); + AddStoreItem(STORENAME, "scroll2_fire_wall", 1, 0); + AddStoreItem(STORENAME, "scroll2_frost_bolt", 1, 0); + AddStoreItem(STORENAME, "scroll2_frost_xolt", 1, 0); + AddStoreItem(STORENAME, "scroll2_glow", 1, 0); + AddStoreItem(STORENAME, "scroll2_healing_circle_920", 1, 0); + AddStoreItem(STORENAME, "scroll2_healing_wave", 1, 0); + AddStoreItem(STORENAME, "scroll2_ice_blast", 1, 0); + AddStoreItem(STORENAME, "scroll2_ice_lance", 1, 0); + AddStoreItem(STORENAME, "scroll2_ice_shield", 1, 0); + AddStoreItem(STORENAME, "scroll2_ice_shield_lesser", 1, 0); + AddStoreItem(STORENAME, "scroll2_ice_wall", 1, 0); + AddStoreItem(STORENAME, "scroll2_lightning_chain", 1, 0); + AddStoreItem(STORENAME, "scroll2_lightning_disc", 1, 0); + AddStoreItem(STORENAME, "scroll2_lightning_storm", 1, 0); + AddStoreItem(STORENAME, "scroll2_lightning_weak", 1, 0); + AddStoreItem(STORENAME, "scroll2_poison", 1, 0); + AddStoreItem(STORENAME, "scroll2_poison_cloud", 1, 0); + AddStoreItem(STORENAME, "scroll2_rejuvenate", 1, 0); + AddStoreItem(STORENAME, "scroll2_summon_bear1", 1, 0); + AddStoreItem(STORENAME, "scroll2_summon_fangtooth", 1, 0); + AddStoreItem(STORENAME, "scroll2_summon_guard", 1, 0); + AddStoreItem(STORENAME, "scroll2_summon_rat", 1, 0); + AddStoreItem(STORENAME, "scroll2_summon_undead", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/martialarts.as b/scripts/angelscript/items/dev_staff/chests/martialarts.as new file mode 100644 index 00000000..6bea057d --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/martialarts.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Martialarts : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "blunt_gauntlets", 1, 0); + AddStoreItem(STORENAME, "blunt_gauntlets_bear", 1, 0); + AddStoreItem(STORENAME, "blunt_gauntlets_demon", 1, 0); + AddStoreItem(STORENAME, "blunt_gauntlets_fire", 1, 0); + AddStoreItem(STORENAME, "blunt_gauntlets_ic", 1, 0); + AddStoreItem(STORENAME, "blunt_gauntlets_leather", 1, 0); + AddStoreItem(STORENAME, "blunt_gauntlets_serpant", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/packs.as b/scripts/angelscript/items/dev_staff/chests/packs.as new file mode 100644 index 00000000..4e38aab4 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/packs.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Packs : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "pack_archersquiver", 1, 0); + AddStoreItem(STORENAME, "pack_bigsack", 1, 0); + AddStoreItem(STORENAME, "pack_boh_lesser", 1, 0); + AddStoreItem(STORENAME, "pack_heavybackpack", 1, 0); + AddStoreItem(STORENAME, "pack_quiver", 1, 0); + AddStoreItem(STORENAME, "pack_sackite", 1, 0); + AddStoreItem(STORENAME, "pack_sack", 1, 0); + AddStoreItem(STORENAME, "sheath_spellbook", 1, 0); + AddStoreItem(STORENAME, "sheath_axe_snakeskin", 1, 0); + AddStoreItem(STORENAME, "sheath_back", 1, 0); + AddStoreItem(STORENAME, "sheath_back_holster", 1, 0); + AddStoreItem(STORENAME, "sheath_back_snakeskin", 1, 0); + AddStoreItem(STORENAME, "sheath_belt", 1, 0); + AddStoreItem(STORENAME, "sheath_belt_holster", 1, 0); + AddStoreItem(STORENAME, "sheath_belt_holster_snakeskin", 1, 0); + AddStoreItem(STORENAME, "sheath_belt_snakeskin", 1, 0); + AddStoreItem(STORENAME, "sheath_blunt_snakeskin", 1, 0); + AddStoreItem(STORENAME, "sheath_dagger", 1, 0); + AddStoreItem(STORENAME, "sheath_dagger_snakeskin", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/polearms.as b/scripts/angelscript/items/dev_staff/chests/polearms.as new file mode 100644 index 00000000..10b10403 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/polearms.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Polearms : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "polearms_a", 1, 0); + AddStoreItem(STORENAME, "polearms_ba", 1, 0); + AddStoreItem(STORENAME, "polearms_dra", 1, 0); + AddStoreItem(STORENAME, "polearms_h", 1, 0); + AddStoreItem(STORENAME, "polearms_hal", 1, 0); + AddStoreItem(STORENAME, "polearms_har", 1, 0); + AddStoreItem(STORENAME, "polearms_nag", 1, 0); + AddStoreItem(STORENAME, "polearms_ph", 1, 0); + AddStoreItem(STORENAME, "polearms_qs", 1, 0); + AddStoreItem(STORENAME, "polearms_sl", 1, 0); + AddStoreItem(STORENAME, "polearms_sp", 1, 0); + AddStoreItem(STORENAME, "polearms_ti", 1, 0); + AddStoreItem(STORENAME, "polearms_tri", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/potions.as b/scripts/angelscript/items/dev_staff/chests/potions.as new file mode 100644 index 00000000..ea29721f --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/potions.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Potions : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "mana_bravery", 3, 0); + AddStoreItem(STORENAME, "mana_demon_blood", 3, 0); + AddStoreItem(STORENAME, "mana_faura", 3, 0); + AddStoreItem(STORENAME, "mana_fbrand", 3, 0); + AddStoreItem(STORENAME, "mana_flesheater1", 3, 0); + AddStoreItem(STORENAME, "mana_flesheater2", 3, 0); + AddStoreItem(STORENAME, "mana_font", 3, 0); + AddStoreItem(STORENAME, "mana_forget", 3, 0); + AddStoreItem(STORENAME, "mana_gprotection", 3, 0); + AddStoreItem(STORENAME, "mana_immune_cold", 3, 0); + AddStoreItem(STORENAME, "mana_immune_fire", 3, 0); + AddStoreItem(STORENAME, "mana_immune_lightning", 3, 0); + AddStoreItem(STORENAME, "mana_immune_poison", 3, 0); + AddStoreItem(STORENAME, "mana_leadfoot", 3, 0); + AddStoreItem(STORENAME, "mana_lleadfoot", 3, 0); + AddStoreItem(STORENAME, "mana_lsb", 3, 0); + AddStoreItem(STORENAME, "mana_mpotion", 3, 0); + AddStoreItem(STORENAME, "mana_paura", 3, 0); + AddStoreItem(STORENAME, "mana_prot_spiders", 3, 0); + AddStoreItem(STORENAME, "mana_protection", 3, 0); + AddStoreItem(STORENAME, "mana_regen", 3, 0); + AddStoreItem(STORENAME, "mana_resist_cold", 3, 0); + AddStoreItem(STORENAME, "mana_resist_fire", 3, 0); + AddStoreItem(STORENAME, "mana_sb", 3, 0); + AddStoreItem(STORENAME, "mana_soup", 3, 0); + AddStoreItem(STORENAME, "mana_speed", 3, 0); + AddStoreItem(STORENAME, "mana_st", 3, 0); + AddStoreItem(STORENAME, "mana_vampire", 3, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/quest.as b/scripts/angelscript/items/dev_staff/chests/quest.as new file mode 100644 index 00000000..9d771259 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/quest.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Quest : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "item_bearclaw", 1, 0); + AddStoreItem(STORENAME, "item_deed", 1, 0); + AddStoreItem(STORENAME, "item_eh", 1, 0); + AddStoreItem(STORENAME, "item_fstatue", 1, 0); + AddStoreItem(STORENAME, "item_gaxe_handle", 1, 0); + AddStoreItem(STORENAME, "item_goblinhead", 1, 0); + AddStoreItem(STORENAME, "item_hat", 1, 0); + AddStoreItem(STORENAME, "item_ikeletter", 1, 0); + AddStoreItem(STORENAME, "item_ikelog", 1, 0); + AddStoreItem(STORENAME, "item_key_rusty", 1, 0); + AddStoreItem(STORENAME, "item_key_sewer", 1, 0); + AddStoreItem(STORENAME, "item_ledger", 1, 0); + AddStoreItem(STORENAME, "item_letter", 1, 0); + AddStoreItem(STORENAME, "item_letter_almund", 1, 0); + AddStoreItem(STORENAME, "item_letter_mayor", 1, 0); + AddStoreItem(STORENAME, "item_manuscript", 1, 0); + AddStoreItem(STORENAME, "item_ore_lorel", 1, 0); + AddStoreItem(STORENAME, "item_ratskull", 1, 0); + AddStoreItem(STORENAME, "item_ring", 1, 0); + AddStoreItem(STORENAME, "item_ring_ryza", 1, 0); + AddStoreItem(STORENAME, "item_ring_ryza_gem1", 1, 0); + AddStoreItem(STORENAME, "item_ring_ryza_gem2", 1, 0); + AddStoreItem(STORENAME, "item_ring_ryza_gem3", 1, 0); + AddStoreItem(STORENAME, "item_roland_letter", 1, 0); + AddStoreItem(STORENAME, "item_runicsymbol", 1, 0); + AddStoreItem(STORENAME, "item_runicsymbol2", 1, 0); + AddStoreItem(STORENAME, "item_s1", 1, 0); + AddStoreItem(STORENAME, "item_s2", 1, 0); + AddStoreItem(STORENAME, "item_s3", 1, 0); + AddStoreItem(STORENAME, "item_s4", 1, 0); + AddStoreItem(STORENAME, "item_s5", 1, 0); + AddStoreItem(STORENAME, "item_sewernote", 1, 0); + AddStoreItem(STORENAME, "item_storageroomkey", 1, 0); + AddStoreItem(STORENAME, "item_telfh1", 1, 0); + AddStoreItem(STORENAME, "item_telfh2", 1, 0); + AddStoreItem(STORENAME, "item_telfh3", 1, 0); + AddStoreItem(STORENAME, "item_telfh4", 1, 0); + AddStoreItem(STORENAME, "item_warbosshead", 1, 0); + AddStoreItem(STORENAME, "key_blue", 1, 0); + AddStoreItem(STORENAME, "key_brass", 1, 0); + AddStoreItem(STORENAME, "key_crystal", 1, 0); + AddStoreItem(STORENAME, "key_forged", 1, 0); + AddStoreItem(STORENAME, "key_gold", 1, 0); + AddStoreItem(STORENAME, "key_green", 1, 0); + AddStoreItem(STORENAME, "key_ice", 1, 0); + AddStoreItem(STORENAME, "key_red", 1, 0); + AddStoreItem(STORENAME, "key_skeleton", 1, 0); + AddStoreItem(STORENAME, "key_treasury", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/rings.as b/scripts/angelscript/items/dev_staff/chests/rings.as new file mode 100644 index 00000000..593b781c --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/rings.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Rings : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "ring_light2", 2, 0); + AddStoreItem(STORENAME, "item_ring", 2, 0); + AddStoreItem(STORENAME, "item_ring_mana", 2, 0); + AddStoreItem(STORENAME, "item_ring_percept", 2, 0); + AddStoreItem(STORENAME, "item_ring_thunder22", 2, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/smallarms.as b/scripts/angelscript/items/dev_staff/chests/smallarms.as new file mode 100644 index 00000000..0ed11744 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/smallarms.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Smallarms : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "smallarms_bone_blade", 2, 0); + AddStoreItem(STORENAME, "smallarms_craftedknife", 2, 0); + AddStoreItem(STORENAME, "smallarms_craftedknife2", 2, 0); + AddStoreItem(STORENAME, "smallarms_craftedknife3", 2, 0); + AddStoreItem(STORENAME, "smallarms_craftedknife4", 2, 0); + AddStoreItem(STORENAME, "smallarms_cre", 2, 0); + AddStoreItem(STORENAME, "smallarms_cref", 2, 0); + AddStoreItem(STORENAME, "smallarms_crel", 2, 0); + AddStoreItem(STORENAME, "smallarms_crep", 2, 0); + AddStoreItem(STORENAME, "smallarms_crec", 2, 0); + AddStoreItem(STORENAME, "smallarms_dagger", 2, 0); + AddStoreItem(STORENAME, "smallarms_dirk", 2, 0); + AddStoreItem(STORENAME, "smallarms_eth", 2, 0); + AddStoreItem(STORENAME, "smallarms_fangstooth", 2, 0); + AddStoreItem(STORENAME, "smallarms_flamelick", 2, 0); + AddStoreItem(STORENAME, "smallarms_frozentongueonflagpole", 2, 0); + AddStoreItem(STORENAME, "smallarms_huggerdagger", 2, 0); + AddStoreItem(STORENAME, "smallarms_huggerdagger2", 2, 0); + AddStoreItem(STORENAME, "smallarms_huggerdagger3", 2, 0); + AddStoreItem(STORENAME, "smallarms_huggerdagger4", 2, 0); + AddStoreItem(STORENAME, "smallarms_k_fire", 2, 0); + AddStoreItem(STORENAME, "smallarms_knife", 2, 0); + AddStoreItem(STORENAME, "smallarms_nh", 2, 0); + AddStoreItem(STORENAME, "smallarms_rd", 2, 0); + AddStoreItem(STORENAME, "smallarms_rknife", 2, 0); + AddStoreItem(STORENAME, "smallarms_royaldagger", 2, 0); + AddStoreItem(STORENAME, "smallarms_stiletto", 2, 0); + AddStoreItem(STORENAME, "smallarms_vt", 2, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/chests/swords.as b/scripts/angelscript/items/dev_staff/chests/swords.as new file mode 100644 index 00000000..50a7483f --- /dev/null +++ b/scripts/angelscript/items/dev_staff/chests/swords.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Swords : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "swords_bastardsword", 2, 0); + AddStoreItem(STORENAME, "swords_blood_drinker", 1, 0); + AddStoreItem(STORENAME, "swords_frostblade55", 1, 0); + AddStoreItem(STORENAME, "swords_fshard1", 1, 0); + AddStoreItem(STORENAME, "swords_fshard2", 1, 0); + AddStoreItem(STORENAME, "swords_fshard3", 1, 0); + AddStoreItem(STORENAME, "swords_fshard4", 1, 0); + AddStoreItem(STORENAME, "swords_fshard5", 1, 0); + AddStoreItem(STORENAME, "swords_gb", 1, 0); + AddStoreItem(STORENAME, "swords_giceblade", 2, 0); + AddStoreItem(STORENAME, "swords_iceblade", 2, 0); + AddStoreItem(STORENAME, "swords_katana", 2, 0); + AddStoreItem(STORENAME, "swords_katana2", 2, 0); + AddStoreItem(STORENAME, "swords_katana3", 2, 0); + AddStoreItem(STORENAME, "swords_katana4", 2, 0); + AddStoreItem(STORENAME, "swords_liceblade", 2, 0); + AddStoreItem(STORENAME, "swords_longsword", 1, 0); + AddStoreItem(STORENAME, "swords_m2sword", 1, 0); + AddStoreItem(STORENAME, "swords_nkatana", 2, 0); + AddStoreItem(STORENAME, "swords_novablade12", 1, 0); + AddStoreItem(STORENAME, "swords_poison1", 2, 0); + AddStoreItem(STORENAME, "swords_rsword", 2, 0); + AddStoreItem(STORENAME, "swords_rune_green", 2, 0); + AddStoreItem(STORENAME, "swords_scimitar", 2, 0); + AddStoreItem(STORENAME, "swords_sf", 1, 0); + AddStoreItem(STORENAME, "swords_shortsword", 2, 0); + AddStoreItem(STORENAME, "swords_skullblade", 2, 0); + AddStoreItem(STORENAME, "swords_skullblade2", 2, 0); + AddStoreItem(STORENAME, "swords_skullblade3", 2, 0); + AddStoreItem(STORENAME, "swords_skullblade4", 2, 0); + AddStoreItem(STORENAME, "swords_spiderblade", 1, 0); + AddStoreItem(STORENAME, "swords_ub", 1, 0); + AddStoreItem(STORENAME, "swords_vb", 2, 0); + AddStoreItem(STORENAME, "swords_volcano", 2, 0); + AddStoreItem(STORENAME, "swords_wolvesbane", 2, 0); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/copypaste.as b/scripts/angelscript/items/dev_staff/copypaste.as new file mode 100644 index 00000000..8e4e68b8 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/copypaste.as @@ -0,0 +1,70 @@ +#pragma context server + +namespace MS +{ + +class Copypaste : CGameScript +{ + string CLIPBOARD_ADDPARAMS; + int CLIPBOARD_ADD_DIST; + int CLIPBOARD_DMGMULTI; + int CLIPBOARD_HPMULTI; + int CLIPBOARD_KEEP_DIST; + string CLIPBOARD_NAME; + string NPC_CLIPBOARD; + + Copypaste() + { + NPC_CLIPBOARD = "none"; + CLIPBOARD_NAME = "none"; + CLIPBOARD_DMGMULTI = 1; + CLIPBOARD_HPMULTI = 1; + CLIPBOARD_ADDPARAMS = "none"; + CLIPBOARD_KEEP_DIST = 500; + CLIPBOARD_ADD_DIST = 0; + } + + void copy_target() + { + find_beam_target(); + if (BEAM_TARGET == "none") + { + int L_NOTARG = 1; + } + if ((IsValidPlayer(BEAM_TARGET))) + { + int L_NOTARG = 1; + } + if ((L_NOTARG)) + { + if (NPC_CLIPBOARD != "none") + { + SendColoredMessage(GetOwner(), "Clipboard cleared."); + } + NPC_CLIPBOARD = "none"; + return; + } + NPC_CLIPBOARD = GetScriptName(BEAM_TARGET); + CLIPBOARD_NAME = GetEntityProperty(BEAM_TARGET, "scriptvar"); + CLIPBOARD_DMGMULTI = GetEntityProperty(BEAM_TARGET, "scriptvar"); + CLIPBOARD_HPMULTI = GetEntityProperty(BEAM_TARGET, "scriptvar"); + CLIPBOARD_ADDPARAMS = GetEntityProperty(BEAM_TARGET, "scriptvar"); + CLIPBOARD_ADD_DIST = (GetEntityWidth(BEAM_TARGET) / 2); + SendColoredMessage(GetOwner(), "Copied " + GetEntityName(BEAM_TARGET) + GetScriptName(BEAM_TARGET)); + } + + void paste_target() + { + if (!(NPC_CLIPBOARD != "none")) return; + string L_KEEP_DIST = CLIPBOARD_KEEP_DIST; + L_KEEP_DIST += CLIPBOARD_ADD_DIST; + string L_POS = /* TODO: $relpos */ $relpos(GetEntityProperty(GetOwner(), "viewangles"), Vector3(0, L_KEEP_DIST, 0)); + L_POS += GetEntityProperty(GetOwner(), "eyepos"); + string L_SPAWN_POINT = TraceLine(GetEntityProperty(GetOwner(), "eyepos"), L_POS); + SpawnNPC(NPC_CLIPBOARD, L_SPAWN_POINT, ScriptMode::Legacy); + CallExternal(GetEntityIndex(m_hLastCreated), "game_postspawn", CLIPBOARD_NAME, CLIPBOARD_DMGMULTI, CLIPBOARD_HPMULTI, CLIPBOARD_ADDPARAMS); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/damager.as b/scripts/angelscript/items/dev_staff/damager.as new file mode 100644 index 00000000..be319cb8 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/damager.as @@ -0,0 +1,28 @@ +#pragma context server + +namespace MS +{ + +class Damager : CGameScript +{ + int DAMAGER_DMG; + + Damager() + { + DAMAGER_DMG = 3; + } + + void try_damage() + { + find_beam_target(); + XDoDamage(BEAM_TARGET, "direct", DAMAGER_DMG, 100, GetOwner(), GetOwner(), "none", "apostle_effect"); + } + + void set_damager() + { + DAMAGER_DMG = param1; + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/effects/loreldian_soup.as b/scripts/angelscript/items/dev_staff/effects/loreldian_soup.as new file mode 100644 index 00000000..ee177a29 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/effects/loreldian_soup.as @@ -0,0 +1,40 @@ +#pragma context server + +namespace MS +{ + +class LoreldianSoup : CGameScript +{ + string game.effect.id; + int game.effect.removeondeath; + + LoreldianSoup() + { + string reg.effect.name = "lsoup"; + game.effect.id = "lsoup"; + string reg.effect.flags = "nostack"; + string reg.effect.script = currentscript; + game.effect.removeondeath = 1; + // TODO: registereffect + } + + void OnRepeatTimer() + { + SetRepeatDelay(1); + HealEntity(GetOwner(), 10000); + GiveMP(10000); + } + + void OnDamage(int damage) override + { + return; + } + + void ext_remove_lsoup() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/menus/beams.as b/scripts/angelscript/items/dev_staff/menus/beams.as new file mode 100644 index 00000000..c16ec8f3 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/menus/beams.as @@ -0,0 +1,200 @@ +#pragma context server + +namespace MS +{ + +class Beams : CGameScript +{ + string AFF_1; + string AFF_2; + string AFF_3; + string MENU_TYPE; + + void menu_listbeams() + { + string reg.mitem.title = "Set Beam Type"; + string reg.mitem.type = "disabled"; + string reg.mitem.title = "Physgun"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_beam_type"; + int reg.mitem.data = 0; + string reg.mitem.title = "Remover"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_beam_type"; + int reg.mitem.data = 1; + string reg.mitem.title = "Damager"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_beam_type"; + int reg.mitem.data = 3; + string reg.mitem.title = "Afflicter"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_beam_type"; + int reg.mitem.data = 2; + } + + void set_beam_type() + { + CallExternal(MY_ITEM, "set_beam_type", param2); + if (param2 == 2) + { + MENU_TYPE = 2; + ScheduleDelayedEvent(0.1, "ext_menu_open"); + } + else + { + if (param2 == 3) + { + MENU_TYPE = 14; + ScheduleDelayedEvent(0.1, "ext_menu_open"); + } + } + } + + void menu_listafflicttype() + { + string reg.mitem.title = "Set Affliction Type"; + string reg.mitem.type = "disabled"; + string reg.mitem.title = "Fire"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_type"; + string reg.mitem.data = "fire"; + string reg.mitem.title = "Cold"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_type"; + string reg.mitem.data = "cold"; + string reg.mitem.title = "Lightning"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_type"; + string reg.mitem.data = "lightning"; + string reg.mitem.title = "Holy"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_type"; + string reg.mitem.data = "holy"; + string reg.mitem.title = "Poison"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_type"; + string reg.mitem.data = "poison"; + string reg.mitem.title = "Acid"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_type"; + string reg.mitem.data = "acid"; + } + + void menu_listafflictduration() + { + string reg.mitem.title = "Set Affliction Duration"; + string reg.mitem.type = "disabled"; + string reg.mitem.title = "5"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_duration"; + string reg.mitem.data = "5"; + string reg.mitem.title = "10"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_duration"; + string reg.mitem.data = "10"; + string reg.mitem.title = "15"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_duration"; + string reg.mitem.data = "15"; + string reg.mitem.title = "30"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_duration"; + string reg.mitem.data = "30"; + } + + void menu_listafflictdmg() + { + string reg.mitem.title = "Set Affliction Damage"; + string reg.mitem.type = "disabled"; + string reg.mitem.title = "0.5"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_dmg"; + string reg.mitem.data = "0.5"; + string reg.mitem.title = "5"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_dmg"; + string reg.mitem.data = "5"; + string reg.mitem.title = "20"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_dmg"; + string reg.mitem.data = "20"; + string reg.mitem.title = "50"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_dmg"; + string reg.mitem.data = "50"; + string reg.mitem.title = "100"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_dmg"; + string reg.mitem.data = "100"; + string reg.mitem.title = "500"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_dmg"; + string reg.mitem.data = "500"; + string reg.mitem.title = "1000"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_afflict_dmg"; + string reg.mitem.data = "1000"; + } + + void menu_damager_setdmg() + { + string reg.mitem.title = "Set Beam Damage"; + string reg.mitem.type = "disabled"; + string reg.mitem.title = "0.5"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_damager"; + string reg.mitem.data = "0.5"; + string reg.mitem.title = "5"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_damager"; + string reg.mitem.data = "5"; + string reg.mitem.title = "20"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_damager"; + string reg.mitem.data = "20"; + string reg.mitem.title = "50"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_damager"; + string reg.mitem.data = "50"; + string reg.mitem.title = "100"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_damager"; + string reg.mitem.data = "100"; + string reg.mitem.title = "500"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_damager"; + string reg.mitem.data = "500"; + string reg.mitem.title = "1000"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_damager"; + string reg.mitem.data = "1000"; + } + + void set_afflict_type() + { + AFF_1 = param2; + MENU_TYPE = 3; + ScheduleDelayedEvent(0.1, "ext_menu_open"); + } + + void set_afflict_duration() + { + AFF_2 = param2; + MENU_TYPE = 4; + ScheduleDelayedEvent(0.1, "ext_menu_open"); + } + + void set_afflict_dmg() + { + AFF_3 = param2; + CallExternal(MY_ITEM, "set_affliction", AFF_1, AFF_2, AFF_3); + } + + void set_damager() + { + CallExternal(MY_ITEM, "set_damager", param2); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/menus/main.as b/scripts/angelscript/items/dev_staff/menus/main.as new file mode 100644 index 00000000..38dd537b --- /dev/null +++ b/scripts/angelscript/items/dev_staff/menus/main.as @@ -0,0 +1,174 @@ +#pragma context server + +#include "items/dev_staff/menus/beams.as" +#include "items/dev_staff/menus/player.as" +#include "items/dev_staff/menus/treasure.as" +#include "items/dev_staff/menus/trigger.as" +#include "items/dev_staff/menus/waypoints.as" +#include "items/dev_staff/menus/warp_player.as" + +namespace MS +{ + +class Main : CGameScript +{ + int MENU_TYPE; + string MY_ITEM; + string MY_OWNER; + + Main() + { + MENU_TYPE = 0; + } + + void OnSpawn() override + { + SetName("Jester's Staff"); + SetModel("null.mdl"); + SetRace("beloved"); + SetInvincible(true); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_ITEM = param2; + } + + void game_menu_getoptions() + { + if (!(param1 == MY_OWNER)) return; + if (MENU_TYPE == 0) + { + menu_main(); + } + if (MENU_TYPE == 1) + { + menu_listbeams(); + } + if (MENU_TYPE == 2) + { + menu_listafflicttype(); + } + if (MENU_TYPE == 3) + { + menu_listafflictduration(); + } + if (MENU_TYPE == 4) + { + menu_listafflictdmg(); + } + if (MENU_TYPE == 5) + { + menu_playerlist(); + } + if (MENU_TYPE == 6) + { + menu_playerlevels(); + } + if (MENU_TYPE == 7) + { + menu_addgold(); + } + if (MENU_TYPE == 8) + { + menu_treasure(); + } + if (MENU_TYPE == 9) + { + menu_treasure_weapons(); + } + if (MENU_TYPE == 10) + { + menu_trigger(); + } + if (MENU_TYPE == 11) + { + menu_trigger_successful(); + } + if (MENU_TYPE == 12) + { + menu_waypoint_save(); + } + if (MENU_TYPE == 13) + { + menu_waypoint_load(); + } + if (MENU_TYPE == 14) + { + menu_damager_setdmg(); + } + if (MENU_TYPE == 15) + { + menu_tele_mode(); + } + if (MENU_TYPE == 16) + { + menu_tele_player(); + } + if (MENU_TYPE == 17) + { + menu_choose_waypoints(); + } + } + + void menu_main() + { + string reg.mitem.title = "Spawn Galat Chest"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "spawn_galats"; + string reg.mitem.title = "Change Beam Type"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 1; + string reg.mitem.title = "Player Attributes"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 5; + string reg.mitem.title = "Spawn Items"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 8; + string reg.mitem.title = "Use Trigger"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 10; + string reg.mitem.title = "Waypoints"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 17; + string reg.mitem.title = "Warp other Player"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 15; + } + + void set_menu_type() + { + MENU_TYPE = param2; + ScheduleDelayedEvent(0.1, "ext_menu_open"); + } + + void ext_menu_open() + { + OpenMenu(MY_OWNER); + } + + void ext_menu_main() + { + MENU_TYPE = 0; + ScheduleDelayedEvent(0.1, "ext_menu_open"); + } + + void spawn_galats() + { + string OWNER_POS = GetEntityOrigin(MY_OWNER); + string OWNER_YAW = GetEntityProperty(MY_OWNER, "angles.yaw"); + string SPAWN_POS = OWNER_POS; + SPAWN_POS += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, 64, 0)); + SpawnNPC("chests/bank1", SPAWN_POS, ScriptMode::Legacy); // params: MY_OWNER + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/menus/player.as b/scripts/angelscript/items/dev_staff/menus/player.as new file mode 100644 index 00000000..08c2efb0 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/menus/player.as @@ -0,0 +1,138 @@ +#pragma context server + +namespace MS +{ + +class Player : CGameScript +{ + void menu_playerlist() + { + string reg.mitem.title = "Loreldian Soup (Godmode)"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "toggle_soup"; + string reg.mitem.title = "Invisibility Potion (Notarget)"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "toggle_notarget"; + string reg.mitem.title = "Set Levels"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 6; + string reg.mitem.title = "Add Gold"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 7; + string reg.mitem.title = "Set Respawn Here"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_respawn"; + } + + void toggle_soup() + { + if ((GetEntityProperty(MY_OWNER, "haseffect"))) + { + SendColoredMessage(MY_OWNER, "Removed Loreldian Soup effect."); + CallExternal(MY_OWNER, "ext_remove_lsoup"); + } + else + { + SendColoredMessage(MY_OWNER, "Applied Loreldian Soup effect."); + ApplyEffect(MY_OWNER, "items/dev_staff/effects/loreldian_soup"); + } + } + + void toggle_notarget() + { + if ((GetEntityProperty(MY_OWNER, "scriptvar"))) + { + SendColoredMessage(MY_OWNER, "Enemies will now target you."); + CallExternal(MY_OWNER, "ext_invalidate", 0); + } + else + { + SendColoredMessage(MY_OWNER, "Enemies have stopped targeting you."); + CallExternal(MY_OWNER, "ext_invalidate", 1); + } + } + + void menu_playerlevels() + { + string reg.mitem.title = "1"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "setlevels"; + int reg.mitem.data = 1; + string reg.mitem.title = "5"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "setlevels"; + int reg.mitem.data = 5; + string reg.mitem.title = "10"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "setlevels"; + int reg.mitem.data = 10; + string reg.mitem.title = "15"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "setlevels"; + int reg.mitem.data = 15; + string reg.mitem.title = "20"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "setlevels"; + int reg.mitem.data = 20; + string reg.mitem.title = "25"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "setlevels"; + int reg.mitem.data = 25; + string reg.mitem.title = "30"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "setlevels"; + int reg.mitem.data = 30; + string reg.mitem.title = "35"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "setlevels"; + int reg.mitem.data = 35; + string reg.mitem.title = "75"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "setlevels"; + int reg.mitem.data = 75; + } + + void setlevels() + { + CallExternal(MY_OWNER, "ext_setstats", param2); + SendColoredMessage(MY_OWNER, "Set all levels to: " + param2); + HealEntity(MY_OWNER, 10000); + GiveMP(MY_OWNER); + } + + void menu_addgold() + { + string reg.mitem.title = "100"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "addgold"; + int reg.mitem.data = 100; + string reg.mitem.title = "10000"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "addgold"; + int reg.mitem.data = 10000; + string reg.mitem.title = "1000000"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "addgold"; + int reg.mitem.data = 1000000; + string reg.mitem.title = "999999999"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "addgold"; + int reg.mitem.data = 999999999; + } + + void addgold() + { + CallExternal(MY_OWNER, "ext_addgold", param2); + } + + void set_respawn() + { + CallExternal(MY_OWNER, "set_spawn_point", GetEntityOrigin(MY_OWNER)); + SendColoredMessage(MY_OWNER, "Respawn point set."); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/menus/treasure.as b/scripts/angelscript/items/dev_staff/menus/treasure.as new file mode 100644 index 00000000..1a57830d --- /dev/null +++ b/scripts/angelscript/items/dev_staff/menus/treasure.as @@ -0,0 +1,87 @@ +#pragma context server + +namespace MS +{ + +class Treasure : CGameScript +{ + void menu_treasure() + { + string reg.mitem.title = "Weapons"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 9; + string reg.mitem.title = "Armor"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/armor"; + string reg.mitem.title = "Ammunition"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/ammo"; + string reg.mitem.title = "Rings"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/rings"; + string reg.mitem.title = "Packs"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/packs"; + string reg.mitem.title = "Potions"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/potions"; + string reg.mitem.title = "Quest Items"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/quest"; + } + + void menu_treasure_weapons() + { + string reg.mitem.title = "Swords"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/swords"; + string reg.mitem.title = "Martial Arts"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/martialarts"; + string reg.mitem.title = "Small Arms"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/smallarms"; + string reg.mitem.title = "Axes"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/axes"; + string reg.mitem.title = "Blunt Arms"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/bluntarms"; + string reg.mitem.title = "Archery"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/archery"; + string reg.mitem.title = "Magic"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/magic"; + string reg.mitem.title = "Polearms"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "create_treasure"; + string reg.mitem.data = "items/dev_staff/chests/polearms"; + } + + void create_treasure() + { + string OWNER_POS = GetEntityOrigin(MY_OWNER); + string OWNER_YAW = GetEntityProperty(MY_OWNER, "angles.yaw"); + string SPAWN_POS = OWNER_POS; + SPAWN_POS += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, 64, 0)); + SpawnNPC(param2, SPAWN_POS, ScriptMode::Legacy); // params: MY_OWNER + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/menus/trigger.as b/scripts/angelscript/items/dev_staff/menus/trigger.as new file mode 100644 index 00000000..0eb6e876 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/menus/trigger.as @@ -0,0 +1,93 @@ +#pragma context server + +namespace MS +{ + +class Trigger : CGameScript +{ + int LISTENING_FOR_TRIGGER; + int MENU_TYPE; + string RECENT_TRIGGERS; + string STARTED_LISTENING; + string TRIG_QUEST; + + Trigger() + { + LISTENING_FOR_TRIGGER = 0; + } + + void menu_trigger() + { + LISTENING_FOR_TRIGGER = 1; + STARTED_LISTENING = GetGameTime(); + ScheduleDelayedEvent(10.0, "stop_listening"); + CallExternal(MY_OWNER, "ext_saytextrange", 10000); + string reg.mitem.title = "Speak the [trigger]"; + string reg.mitem.type = "disabled"; + TRIG_QUEST = "trig_"; + RECENT_TRIGGERS = GetPlayerQuestData(MY_OWNER, TRIG_QUEST); + if (RECENT_TRIGGERS == "0") + { + RECENT_TRIGGERS = ""; + } + if (RECENT_TRIGGERS == "") + { + return; + } + for (int i = 0; i < GetTokenCount(RECENT_TRIGGERS, ";"); i++) + { + loop_trigger_history(); + } + } + + void loop_trigger_history() + { + string L_TRIG = GetToken(RECENT_TRIGGERS, i, ";"); + string reg.mitem.title = L_TRIG; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "use_trigger"; + string reg.mitem.data = L_TRIG; + } + + void use_trigger() + { + UseTrigger(param2); + LISTENING_FOR_TRIGGER = 0; + MENU_TYPE = 11; + ScheduleDelayedEvent(0.1, "ext_menu_open"); + CallExternal(MY_OWNER, "ext_playsound_kiss", 0, 5, "weapons/357_cock1.wav"); + } + + void game_heardtext() + { + if (!(LISTENING_FOR_TRIGGER)) return; + if (!(param2 == MY_OWNER)) return; + string L_IDX = FindToken(RECENT_TRIGGERS, param1, ";"); + if (L_IDX == -1) + { + if (GetTokenCount(RECENT_TRIGGERS, ";") >= 6) + { + RemoveToken(RECENT_TRIGGERS, 0, ";"); + } + if (RECENT_TRIGGERS.length() > 0) RECENT_TRIGGERS += ";"; + RECENT_TRIGGERS += param1; + SetPlayerQuestData(MY_OWNER, TRIG_QUEST); + } + use_trigger(MY_OWNER, param1); + } + + void stop_listening() + { + if (!(STARTED_LISTENING <= (GetGameTime() - 10))) return; + LISTENING_FOR_TRIGGER = 0; + } + + void menu_trigger_successful() + { + string reg.mitem.title = "Trigger Fired!"; + string reg.mitem.type = "disabled"; + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/menus/warp_player.as b/scripts/angelscript/items/dev_staff/menus/warp_player.as new file mode 100644 index 00000000..ed88f323 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/menus/warp_player.as @@ -0,0 +1,69 @@ +#pragma context server + +namespace MS +{ + +class WarpPlayer : CGameScript +{ + int TELEPORT_MODE; + + WarpPlayer() + { + array A_PLAYERS; + TELEPORT_MODE = 3; + } + + void menu_tele_mode() + { + string reg.mitem.title = "Go to player"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_tele_mode"; + int reg.mitem.data = 0; + string reg.mitem.title = "Bring player here"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_tele_mode"; + int reg.mitem.data = 1; + } + + void set_tele_mode() + { + TELEPORT_MODE = param2; + set_menu_type(0, 16); + } + + void menu_tele_player() + { + GetAllPlayers(A_PLAYERS); + for (int i = 0; i < int(A_PLAYERS.length()); i++) + { + add_player_to_menu(); + } + } + + void add_player_to_menu() + { + string L_PLAYER = A_PLAYERS[int(i)]; + if (L_PLAYER != MY_OWNER) + { + string reg.mitem.title = GetEntityName(L_PLAYER); + string reg.mitem.type = "callback"; + string reg.mitem.callback = "teleport_player"; + string reg.mitem.data = L_PLAYER; + } + } + + void teleport_player() + { + if (TELEPORT_MODE == 0) + { + SetEntityOrigin(MY_OWNER, GetEntityOrigin(param2)); + } + else + { + SetEntityOrigin(param2, GetEntityOrigin(MY_OWNER)); + } + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/menus/waypoints.as b/scripts/angelscript/items/dev_staff/menus/waypoints.as new file mode 100644 index 00000000..122eb729 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/menus/waypoints.as @@ -0,0 +1,138 @@ +#pragma context server + +namespace MS +{ + +class Waypoints : CGameScript +{ + string WAYPOINT_QUEST; + + Waypoints() + { + WAYPOINT_QUEST = "wpoint_"; + } + + void menu_choose_waypoints() + { + string reg.mitem.title = "Save Waypoint"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 12; + string reg.mitem.title = "Load Waypoint"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_menu_type"; + int reg.mitem.data = 13; + } + + void menu_waypoint_save() + { + SendColoredMessage(MY_OWNER, "Waypoints save along with the map."); + string reg.mitem.title = "#1 Waypoint"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "save_waypoint"; + int reg.mitem.data = 0; + string reg.mitem.title = "#2 Waypoint"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "save_waypoint"; + int reg.mitem.data = 1; + string reg.mitem.title = "#3 Waypoint"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "save_waypoint"; + int reg.mitem.data = 2; + string reg.mitem.title = "#4 Waypoint"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "save_waypoint"; + int reg.mitem.data = 3; + string reg.mitem.title = "#5 Waypoint"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "save_waypoint"; + int reg.mitem.data = 4; + } + + void save_waypoint() + { + string L_WAYPOINTS = GetPlayerQuestData(MY_OWNER, WAYPOINT_QUEST); + if (L_WAYPOINTS == "0") + { + string L_WAYPOINTS = "0;0;0;0;0"; + } + SetToken(L_WAYPOINTS, param2, GetEntityOrigin(MY_OWNER), ";"); + SetPlayerQuestData(MY_OWNER, WAYPOINT_QUEST); + SendColoredMessage(MY_OWNER, "Waypoint saved."); + } + + void menu_waypoint_load() + { + string L_WAYPOINTS = GetPlayerQuestData(MY_OWNER, WAYPOINT_QUEST); + if (L_WAYPOINTS == "0") + { + string L_WAYPOINTS = "0;0;0;0;0"; + } + string reg.mitem.title = "#1 Waypoint"; + if (GetToken(L_WAYPOINTS, 0, ";") != "0") + { + string reg.mitem.type = "callback"; + string reg.mitem.callback = "load_waypoint"; + int reg.mitem.data = 0; + } + else + { + string reg.mitem.type = "disabled"; + } + string reg.mitem.title = "#2 Waypoint"; + if (GetToken(L_WAYPOINTS, 1, ";") != "0") + { + string reg.mitem.type = "callback"; + string reg.mitem.callback = "load_waypoint"; + int reg.mitem.data = 1; + } + else + { + string reg.mitem.type = "disabled"; + } + string reg.mitem.title = "#3 Waypoint"; + if (GetToken(L_WAYPOINTS, 2, ";") != "0") + { + string reg.mitem.type = "callback"; + string reg.mitem.callback = "load_waypoint"; + int reg.mitem.data = 2; + } + else + { + string reg.mitem.type = "disabled"; + } + string reg.mitem.title = "#4 Waypoint"; + if (GetToken(L_WAYPOINTS, 3, ";") != "0") + { + string reg.mitem.type = "callback"; + string reg.mitem.callback = "load_waypoint"; + int reg.mitem.data = 3; + } + else + { + string reg.mitem.type = "disabled"; + } + string reg.mitem.title = "#5 Waypoint"; + if (GetToken(L_WAYPOINTS, 4, ";") != "0") + { + string reg.mitem.type = "callback"; + string reg.mitem.callback = "load_waypoint"; + int reg.mitem.data = 4; + } + else + { + string reg.mitem.type = "disabled"; + } + } + + void load_waypoint() + { + string L_WAYPOINTS = GetPlayerQuestData(MY_OWNER, WAYPOINT_QUEST); + string L_POINT = GetToken(L_WAYPOINTS, param2, ";"); + SetEntityOrigin(MY_OWNER, L_POINT); + SendColoredMessage(MY_OWNER, "Waypoint loaded."); + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/physgun.as b/scripts/angelscript/items/dev_staff/physgun.as new file mode 100644 index 00000000..a1ce1e28 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/physgun.as @@ -0,0 +1,68 @@ +#pragma context server + +namespace MS +{ + +class Physgun : CGameScript +{ + string BEAM_TARGET; + int PHYSGUN_ON; + int PHYS_KEEP_DIST; + + Physgun() + { + PHYSGUN_ON = 0; + PHYS_KEEP_DIST = 0; + } + + void try_physgun() + { + if (!(PHYSGUN_ON)) + { + find_beam_target(); + if (BEAM_TARGET != "none") + { + if (GetEntityOrigin(BEAM_TARGET) != "(0.00,0.00,0.00)") + { + PHYSGUN_ON = 1; + PHYS_KEEP_DIST = Distance(GetEntityOrigin(GetOwner()), GetEntityOrigin(BEAM_TARGET)); + SendColoredMessage(GetOwner(), "Linked physgun to " + GetEntityName(BEAM_TARGET)); + update_physgun_target(); + } + } + } + else + { + update_physgun_target(); + } + } + + void update_physgun_target() + { + if (!(IsEntityAlive(BEAM_TARGET))) + { + BEAM_TARGET = "none"; + PHYSGUN_ON = 0; + return; + } + string L_TARG_POS = /* TODO: $relpos */ $relpos(GetEntityProperty(GetOwner(), "viewangles"), Vector3(0, PHYS_KEEP_DIST, 0)); + L_TARG_POS += GetEntityProperty(GetOwner(), "eyepos"); + SetEntityOrigin(BEAM_TARGET, L_TARG_POS); + SetVelocity(BEAM_TARGET, Vector3(0, 0, 0)); + Effect("glow", BEAM_TARGET, Vector3(50, 50, 255), 72, 0.2, 0.2); + } + + void target_freeze() + { + } + + void game__attack1() + { + if (!(PHYSGUN_ON)) return; + PHYSGUN_ON = 0; + BEAM_TARGET = "none"; + } + +} + +} diff --git a/scripts/angelscript/items/dev_staff/remover.as b/scripts/angelscript/items/dev_staff/remover.as new file mode 100644 index 00000000..cc484423 --- /dev/null +++ b/scripts/angelscript/items/dev_staff/remover.as @@ -0,0 +1,39 @@ +#pragma context server + +namespace MS +{ + +class Remover : CGameScript +{ + string BEAM_TARGET; + string LAST_REMOVE; + float REMOVE_DELAY; + + Remover() + { + REMOVE_DELAY = 0.15; + } + + void try_remove() + { + if (!(LAST_REMOVE < GetGameTime())) return; + find_beam_target(); + if (!(BEAM_TARGET != "none")) return; + if ((IsValidPlayer(BEAM_TARGET))) return; + if (GetEntityOrigin(BEAM_TARGET) == "(0.00,0.00,0.00)") + { + SendColoredMessage(GetOwner(), "Removed map ent."); + DeleteEntity(BEAM_TARGET); + } + else + { + SendColoredMessage(GetOwner(), "Removed " + GetEntityProperty(BEAM_TARGET, "name.full")); + DeleteEntity(BEAM_TARGET); + } + LAST_REMOVE = (GetGameTime() + REMOVE_DELAY); + BEAM_TARGET = "none"; + } + +} + +} diff --git a/scripts/angelscript/items/drink_ale.as b/scripts/angelscript/items/drink_ale.as new file mode 100644 index 00000000..b3e1c160 --- /dev/null +++ b/scripts/angelscript/items/drink_ale.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class DrinkAle : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + DrinkAle() + { + ANIM_IDLE = 0; + ANIM_DRINK = 3; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 4; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 18; + DRINK_TYPE = "getdrunk"; + DRINK_EFFECTAMT = RandomInt(15, 20); + DRINK_AMOUNT = RandomInt(12, 30); + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Ale"); + SetDescription("A mug of some bitter ale"); + SetWeight(2); + SetSize(2); + SetValue(1); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "mhealth"); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + + void drink_now() + { + ALE_DRUNK += 1; + if (!(ALE_DRUNK >= 1)) return; + ClientEvent("new", GetOwner(), "effects/sfx_drunk", Random(4, 11)); + } + +} + +} diff --git a/scripts/angelscript/items/drink_forsuth.as b/scripts/angelscript/items/drink_forsuth.as new file mode 100644 index 00000000..bae9f8cd --- /dev/null +++ b/scripts/angelscript/items/drink_forsuth.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class DrinkForsuth : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + DrinkForsuth() + { + ANIM_IDLE = 0; + ANIM_DRINK = 3; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 4; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 18; + DRINK_TYPE = "getdrunk"; + DRINK_EFFECTAMT = 50; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Forsuth s Bitter Ale"); + SetDescription("Forsuth s bitter ale, brewed for the bitter cold."); + SetWeight(2); + SetSize(2); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "mhealth"); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + + void drink_now() + { + ALE_DRUNK += 1; + if (!(ALE_DRUNK >= 1)) return; + SendPlayerMessage("You", "feel warm and tingly all over."); + ClientEvent("new", GetOwner(), "effects/sfx_drunk", 5); + CallExternal(GetEntityIndex(GetOwner()), "ext_register_element", "forsu", "cold", 75); + } + +} + +} diff --git a/scripts/angelscript/items/drink_mead.as b/scripts/angelscript/items/drink_mead.as new file mode 100644 index 00000000..44731e9a --- /dev/null +++ b/scripts/angelscript/items/drink_mead.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class DrinkMead : CGameScript +{ + int ALE_DRUNK; + int ANIM_DRINK; + int ANIM_IDLE; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + DrinkMead() + { + ANIM_IDLE = 0; + ANIM_DRINK = 3; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 4; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 18; + DRINK_TYPE = "getdrunk"; + DRINK_EFFECTAMT = RandomInt(10, 30); + DRINK_AMOUNT = RandomInt(2, 3); + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Mead"); + SetDescription("A mug of mead"); + SetWeight(2); + SetSize(2); + SetValue(1); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "mhealth"); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + ALE_DRUNK = 0; + } + + void drink_now() + { + ALE_DRUNK += 1; + if (!(ALE_DRUNK >= 2)) return; + ClientEvent("new", GetOwner(), "effects/sfx_drunk", Random(5, 30)); + } + +} + +} diff --git a/scripts/angelscript/items/drink_wine.as b/scripts/angelscript/items/drink_wine.as new file mode 100644 index 00000000..591625e5 --- /dev/null +++ b/scripts/angelscript/items/drink_wine.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class DrinkWine : CGameScript +{ + int ALE_DRUNK; + int ALE_DRUNk; + int ANIM_DRINK; + int ANIM_IDLE; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + DrinkWine() + { + ANIM_IDLE = 0; + ANIM_DRINK = 3; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 4; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 18; + DRINK_TYPE = "getdrunk"; + DRINK_EFFECTAMT = RandomInt(2, 14); + DRINK_AMOUNT = RandomInt(1, 2); + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Ascerian Wine"); + SetDescription("A fine cup of some sweet Ascerian wine"); + SetWeight(2); + SetSize(2); + SetValue(1); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "mhealth"); + ALE_DRUNK = 0; + } + + void drink_now() + { + ClientEvent("new", GetOwner(), "effects/sfx_drunk", Random(1, 10)); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + ALE_DRUNk = 0; + } + +} + +} diff --git a/scripts/angelscript/items/fist_bare.as b/scripts/angelscript/items/fist_bare.as new file mode 100644 index 00000000..7e3ee6d1 --- /dev/null +++ b/scripts/angelscript/items/fist_bare.as @@ -0,0 +1,143 @@ +#pragma context server + +#include "items/base_melee.as" +#include "items/base_kick.as" + +namespace MS +{ + +class FistBare : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_HANDS_DOWN; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LOWER; + string ANIM_PREFIX; + int ANIM_SHEATH; + string FISTS_LAST_ATTACK; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + int NO_IDLE; + int NO_PARRY; + string PLAYERANIM_AIM; + string PUNCH_ATTACK; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SWIPE; + + FistBare() + { + NO_PARRY = 1; + NO_IDLE = 1; + ANIM_HANDS_DOWN = 3; + ANIM_LIFT1 = 2; + ANIM_LOWER = 3; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 4; + ANIM_SHEATH = 3; + MODEL_VIEW = "viewmodels/v_martialarts.mdl"; + MODEL_HANDS = "none"; + MODEL_WORLD = "none"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hitbod1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hitbod2.wav"; + MODEL_BODY_OFS = 0; + ANIM_PREFIX = "fists"; + MELEE_RANGE = 50; + MELEE_DMG_DELAY = 0.3; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 1; + MELEE_DMG = 60; + MELEE_DMG_RANGE = 0; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "martialarts"; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.0; + PLAYERANIM_AIM = "fists"; + } + + void weapon_spawn() + { + SetName("Bare Fists"); + SetDescription("Your bare fists"); + SetWeight(0); + SetSize(0); + SetValue(0); + SetHand("undroppable"); + } + + void weapon_deploy() + { + PlayViewAnim(ANIM_HANDS_DOWN); + } + + void melee_start() + { + PlayViewAnim(ANIM_ATTACK1); + if (PUNCH_ATTACK == 0) + { + string l.punch_anim = "stance_normal_lowjab_r1"; + PUNCH_ATTACK = 1; + } + else + { + if (PUNCH_ATTACK == 1) + { + string l.punch_anim = "stance_normal_lowjab_r2"; + PUNCH_ATTACK = 0; + } + } + PlayOwnerAnim("once", l.punch_anim); + FISTS_LAST_ATTACK = GetGameTime(); + punch1_done(); + } + + void punch1_done() + { + SetRepeatDelay(1); + if (!(FISTS_LAST_ATTACK)) return; + float l_elapsedtime = GetGameTime(); + l_elapsedtime -= FISTS_LAST_ATTACK; + if (!(l_elapsedtime > 5)) return; + PlayViewAnim(ANIM_LOWER); + FISTS_LAST_ATTACK = 0; + } + + void hitwall() + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {"game.sound.maxvol", SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void ext_activate_items() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + LogDebug("ext_activate_items ext_register_fists"); + CallExternal(GetOwner(), "ext_register_fists", GetEntityIndex(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/items/gauntlets_normal.as b/scripts/angelscript/items/gauntlets_normal.as new file mode 100644 index 00000000..822e47ba --- /dev/null +++ b/scripts/angelscript/items/gauntlets_normal.as @@ -0,0 +1,145 @@ +#pragma context server + +#include "items/base_melee.as" +#include "items/base_kick.as" + +namespace MS +{ + +class GauntletsNormal : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_HANDS_DOWN; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LOWER; + string ANIM_PREFIX; + int ANIM_SHEATH; + string FISTS_LAST_ATTACK; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_OVERRIDE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int NO_IDLE; + int NO_WORLD_MODEL; + string PLAYERANIM_AIM; + string PUNCH_ATTACK; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SWING; + string SOUND_SWIPE; + + GauntletsNormal() + { + NO_IDLE = 1; + MELEE_OVERRIDE = 1; + ANIM_HANDS_DOWN = 3; + ANIM_LIFT1 = 2; + ANIM_LOWER = 3; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 4; + ANIM_SHEATH = 3; + MODEL_VIEW = "viewmodels/v_martialarts.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_BODY_OFS = 54; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal2.wav"; + SOUND_SWING = "weapons/swingsmall.wav"; + ANIM_PREFIX = "gauntlets"; + NO_WORLD_MODEL = 1; + MELEE_RANGE = 50; + MELEE_DMG_DELAY = 0.3; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 1; + MELEE_DMG = 80; + MELEE_DMG_RANGE = 0; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "martialarts"; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + PLAYERANIM_AIM = "fists"; + } + + void weapon_spawn() + { + SetName("a set of|Gauntlets"); + SetDescription("Strong metal gauntlets for otherwise unarmed combat"); + SetWeight(3); + SetSize(1); + SetValue(200); + SetHand("both"); + SetHUDSprite("hand", "gauntlets"); + SetHUDSprite("trade", "gauntlets"); + } + + void weapon_deploy() + { + PlayViewAnim(ANIM_HANDS_DOWN); + } + + void melee_start() + { + PlayViewAnim(ANIM_ATTACK1); + if (PUNCH_ATTACK == 0) + { + string l.punch_anim = "stance_normal_lowjab_r1"; + PUNCH_ATTACK = 1; + } + else + { + if (PUNCH_ATTACK == 1) + { + string l.punch_anim = "stance_normal_lowjab_r2"; + PUNCH_ATTACK = 0; + } + } + PlayOwnerAnim("once", l.punch_anim); + EmitSound(GetOwner(), "const.sound.item", SOUND_SWING, 5); + FISTS_LAST_ATTACK = GetGameTime(); + punch1_done(); + } + + void punch1_done() + { + SetRepeatDelay(1); + if (!(FISTS_LAST_ATTACK)) return; + float l_elapsedtime = GetGameTime(); + l_elapsedtime -= FISTS_LAST_ATTACK; + if (!(l_elapsedtime > 5)) return; + PlayViewAnim(ANIM_LOWER); + FISTS_LAST_ATTACK = 0; + } + + void hitwall() + { + // PlayRandomSound from: SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/items/gold_pouch_10.as b/scripts/angelscript/items/gold_pouch_10.as new file mode 100644 index 00000000..0c74c187 --- /dev/null +++ b/scripts/angelscript/items/gold_pouch_10.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "items/gold_pouch_base.as" + +namespace MS +{ + +class GoldPouch10 : CGameScript +{ + int GOLD_AMT; + + GoldPouch10() + { + GOLD_AMT = 10; + } + +} + +} diff --git a/scripts/angelscript/items/gold_pouch_100.as b/scripts/angelscript/items/gold_pouch_100.as new file mode 100644 index 00000000..aa9a1222 --- /dev/null +++ b/scripts/angelscript/items/gold_pouch_100.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "items/gold_pouch_base.as" + +namespace MS +{ + +class GoldPouch100 : CGameScript +{ + int GOLD_AMT; + + GoldPouch100() + { + GOLD_AMT = 100; + } + +} + +} diff --git a/scripts/angelscript/items/gold_pouch_1000.as b/scripts/angelscript/items/gold_pouch_1000.as new file mode 100644 index 00000000..0c5cd297 --- /dev/null +++ b/scripts/angelscript/items/gold_pouch_1000.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "items/gold_pouch_base.as" + +namespace MS +{ + +class GoldPouch1000 : CGameScript +{ + int GOLD_AMT; + + GoldPouch1000() + { + GOLD_AMT = 1000; + } + +} + +} diff --git a/scripts/angelscript/items/gold_pouch_200.as b/scripts/angelscript/items/gold_pouch_200.as new file mode 100644 index 00000000..a8d3315d --- /dev/null +++ b/scripts/angelscript/items/gold_pouch_200.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "items/gold_pouch_base.as" + +namespace MS +{ + +class GoldPouch200 : CGameScript +{ + int GOLD_AMT; + + GoldPouch200() + { + GOLD_AMT = 200; + } + +} + +} diff --git a/scripts/angelscript/items/gold_pouch_25.as b/scripts/angelscript/items/gold_pouch_25.as new file mode 100644 index 00000000..9d391df4 --- /dev/null +++ b/scripts/angelscript/items/gold_pouch_25.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "items/gold_pouch_base.as" + +namespace MS +{ + +class GoldPouch25 : CGameScript +{ + int GOLD_AMT; + + GoldPouch25() + { + GOLD_AMT = 25; + } + +} + +} diff --git a/scripts/angelscript/items/gold_pouch_5.as b/scripts/angelscript/items/gold_pouch_5.as new file mode 100644 index 00000000..1fa5ed26 --- /dev/null +++ b/scripts/angelscript/items/gold_pouch_5.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "items/gold_pouch_base.as" + +namespace MS +{ + +class GoldPouch5 : CGameScript +{ + int GOLD_AMT; + + GoldPouch5() + { + GOLD_AMT = 5; + } + +} + +} diff --git a/scripts/angelscript/items/gold_pouch_50.as b/scripts/angelscript/items/gold_pouch_50.as new file mode 100644 index 00000000..a86b1406 --- /dev/null +++ b/scripts/angelscript/items/gold_pouch_50.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "items/gold_pouch_base.as" + +namespace MS +{ + +class GoldPouch50 : CGameScript +{ + int GOLD_AMT; + + GoldPouch50() + { + GOLD_AMT = 50; + } + +} + +} diff --git a/scripts/angelscript/items/gold_pouch_500.as b/scripts/angelscript/items/gold_pouch_500.as new file mode 100644 index 00000000..bb829859 --- /dev/null +++ b/scripts/angelscript/items/gold_pouch_500.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "items/gold_pouch_base.as" + +namespace MS +{ + +class GoldPouch500 : CGameScript +{ + int GOLD_AMT; + + GoldPouch500() + { + GOLD_AMT = 500; + } + +} + +} diff --git a/scripts/angelscript/items/gold_pouch_base.as b/scripts/angelscript/items/gold_pouch_base.as new file mode 100644 index 00000000..f0668b47 --- /dev/null +++ b/scripts/angelscript/items/gold_pouch_base.as @@ -0,0 +1,34 @@ +#pragma context server + +namespace MS +{ + +class GoldPouchBase : CGameScript +{ + int GOLD_AMT; + string GOLD_VALUE; + string SOUND_GOLD; + + GoldPouchBase() + { + GOLD_AMT = 10; + SOUND_GOLD = "misc/gold.wav"; + } + + void OnSpawn() override + { + SetName("Pouch of GOLD_AMT coins"); + SetDescription("You find some gold coins..."); + SetViewModel("none"); + SetWorldModel("none"); + SetModel("none"); + SetWeight(0); + SetSize(0); + SetHUDSprite("trade", "gold"); + SetAnimExt("blunt"); + GOLD_VALUE = GOLD_AMT; + } + +} + +} diff --git a/scripts/angelscript/items/gown_edana.as b/scripts/angelscript/items/gown_edana.as new file mode 100644 index 00000000..6914fc63 --- /dev/null +++ b/scripts/angelscript/items/gown_edana.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "items/base_crest.as" + +namespace MS +{ + +class GownEdana : CGameScript +{ + int MODEL_CREST_OFS; + + GownEdana() + { + MODEL_CREST_OFS = 1; + } + + void crest_spawn() + { + SetName("Crest of Edana"); + SetDescription("A Crest of Edana worn by the defenders of the Temple"); + } + +} + +} diff --git a/scripts/angelscript/items/health_apple.as b/scripts/angelscript/items/health_apple.as new file mode 100644 index 00000000..0f354f9b --- /dev/null +++ b/scripts/angelscript/items/health_apple.as @@ -0,0 +1,89 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class HealthApple : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + string DONE_PHRASE; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + string DRINK_WORD; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_APPLE; + + HealthApple() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 3; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + SOUND_APPLE = "items/bite.wav"; + MODEL_BODY_OFS = 1; + ANIM_PREFIX = "apple"; + DRINK_TYPE = "givehealth"; + DRINK_EFFECTAMT = RandomInt(1, 3); + DRINK_AMOUNT = 4; + DRINK_GULP_DELAY = 1; + DRINK_TIME = 1; + DRINK_WORD = "bite"; + DONE_PHRASE = "You devour the last bite of the juicy"; + } + + void drink_spawn() + { + SetName("Apple"); + SetDescription("An apple"); + SetWeight(0.3); + SetSize(1); + SetValue(1); + SetHUDSprite("trade", "apple"); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL -= "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 1; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + + void game_start_drink() + { + ScheduleDelayedEvent(0.5, "do_apple_sound"); + } + + void do_apple_sound() + { + EmitSound(GetOwner(), CHAN_VOICE, SOUND_APPLE, 10); + } + +} + +} diff --git a/scripts/angelscript/items/health_lpotion.as b/scripts/angelscript/items/health_lpotion.as new file mode 100644 index 00000000..97668c24 --- /dev/null +++ b/scripts/angelscript/items/health_lpotion.as @@ -0,0 +1,57 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class HealthLpotion : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + float DRINK_GULP_DELAY; + float DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + HealthLpotion() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 1; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 21; + ANIM_PREFIX = "mhealth"; + DRINK_TYPE = "givehealth"; + RESTORE_PERCENT = 0.25; + DRINK_EFFECTAMT = RandomInt(22, 25); + DRINK_AMOUNT = 4; + DRINK_GULP_DELAY = 3.2; + DRINK_TIME = 3.2; + } + + void drink_spawn() + { + SetName("Medium Health Potion"); + SetDescription("A restorative potion offering high regeneration of health"); + SetWeight(1); + SetSize(2); + SetValue(150); + SetHUDSprite("trade", "mhealth"); + } + +} + +} diff --git a/scripts/angelscript/items/health_mpotion.as b/scripts/angelscript/items/health_mpotion.as new file mode 100644 index 00000000..8d512f36 --- /dev/null +++ b/scripts/angelscript/items/health_mpotion.as @@ -0,0 +1,57 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class HealthMpotion : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + HealthMpotion() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 1; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 21; + ANIM_PREFIX = "mhealth"; + DRINK_TYPE = "givehealth"; + RESTORE_PERCENT = 0.15; + DRINK_EFFECTAMT = RandomInt(13, 16); + DRINK_AMOUNT = 10; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Weak Health Potion"); + SetDescription("A restorative potion offering a some amount of health regeneration"); + SetWeight(1); + SetSize(1); + SetValue(30); + SetHUDSprite("trade", "mhealth"); + } + +} + +} diff --git a/scripts/angelscript/items/health_spotion.as b/scripts/angelscript/items/health_spotion.as new file mode 100644 index 00000000..199b0a6b --- /dev/null +++ b/scripts/angelscript/items/health_spotion.as @@ -0,0 +1,57 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class HealthSpotion : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + HealthSpotion() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 1; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 18; + ANIM_PREFIX = "mhealth"; + DRINK_TYPE = "givehealth"; + RESTORE_PERCENT = 0.50; + DRINK_EFFECTAMT = RandomInt(50, 70); + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 5; + } + + void drink_spawn() + { + SetName("Strong Health Potion"); + SetDescription("A restorative potion offering miraculous regeneration of health"); + SetWeight(1); + SetSize(2); + SetValue(300); + SetHUDSprite("trade", "mhealth"); + } + +} + +} diff --git a/scripts/angelscript/items/item_bar_coffer.as b/scripts/angelscript/items/item_bar_coffer.as new file mode 100644 index 00000000..37f02d7a --- /dev/null +++ b/scripts/angelscript/items/item_bar_coffer.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemBarCoffer : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemBarCoffer() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Locked Coffer"); + SetDescription("This coffer has a magical lock. It sounds as if there s coins inside."); + SetValue(200); + } + +} + +} diff --git a/scripts/angelscript/items/item_bearclaw.as b/scripts/angelscript/items/item_bearclaw.as new file mode 100644 index 00000000..673cf96b --- /dev/null +++ b/scripts/angelscript/items/item_bearclaw.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemBearclaw : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemBearclaw() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Bear Claw"); + SetDescription("This is one massive bear claw."); + SetValue(100); + } + +} + +} diff --git a/scripts/angelscript/items/item_book_evil.as b/scripts/angelscript/items/item_book_evil.as new file mode 100644 index 00000000..f8c88de2 --- /dev/null +++ b/scripts/angelscript/items/item_book_evil.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemBookEvil : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HOLD; + string MODEL_WORLD; + + ItemBookEvil() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 7; + ANIM_PREFIX = "evilbook"; + } + + void miscitem_spawn() + { + SetName("Evil Book"); + SetDescription("An evil looking book"); + SetPlayerModel(MODEL_HANDS); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetWeight(5); + SetSize(5); + SetValue(10); + } + +} + +} diff --git a/scripts/angelscript/items/item_book_latin.as b/scripts/angelscript/items/item_book_latin.as new file mode 100644 index 00000000..b9f019ac --- /dev/null +++ b/scripts/angelscript/items/item_book_latin.as @@ -0,0 +1,30 @@ +#pragma context server + +#include "items/base_book.as" + +namespace MS +{ + +class ItemBookLatin : CGameScript +{ + string BOOK_PAGES; + string BOOK_PAGES_SRC; + string BOOK_TITLE; + + ItemBookLatin() + { + BOOK_TITLE = "Some latin crap or something"; + BOOK_PAGES = "#LOCALPAGE_TEST1;latin;latin2;latin3"; + BOOK_PAGES_SRC = "local;file;file;file"; + } + + void book_spawn() + { + SetName("Latin Book"); + SetDescription("What the hell does this even say?"); + SetValue(500); + } + +} + +} diff --git a/scripts/angelscript/items/item_book_old.as b/scripts/angelscript/items/item_book_old.as new file mode 100644 index 00000000..5a7cb04d --- /dev/null +++ b/scripts/angelscript/items/item_book_old.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemBookOld : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HOLD; + string MODEL_WORLD; + + ItemBookOld() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "oldbook"; + } + + void miscitem_spawn() + { + SetName("Old Book"); + SetDescription("An old book"); + SetPlayerModel(MODEL_HANDS); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetWeight(5); + SetSize(5); + SetValue(10); + } + +} + +} diff --git a/scripts/angelscript/items/item_bracelet.as b/scripts/angelscript/items/item_bracelet.as new file mode 100644 index 00000000..87b11ddd --- /dev/null +++ b/scripts/angelscript/items/item_bracelet.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemBracelet : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HOLD; + string MODEL_WORLD; + + ItemBracelet() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + } + + void miscitem_spawn() + { + SetName("Bracelet of Friendship"); + SetDescription("Inscription says: Thanks for your help, Hugs and kisses from Salandria"); + SetPlayerModel(MODEL_HANDS); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetWeight(3); + SetSize(3); + SetValue(10); + } + +} + +} diff --git a/scripts/angelscript/items/item_bulge.as b/scripts/angelscript/items/item_bulge.as new file mode 100644 index 00000000..36655806 --- /dev/null +++ b/scripts/angelscript/items/item_bulge.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemBulge : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemBulge() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + } + + void miscitem_spawn() + { + SetName("Bulge s Ring"); + SetDescription("It looks like... A wedding ring?"); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetValue(0); + SetHUDSprite("trade", "ring"); + } + +} + +} diff --git a/scripts/angelscript/items/item_cannon_ball.as b/scripts/angelscript/items/item_cannon_ball.as new file mode 100644 index 00000000..4c0fb938 --- /dev/null +++ b/scripts/angelscript/items/item_cannon_ball.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemCannonBall : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + + ItemCannonBall() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_VIEW = "none"; + MODEL_BODY_OFS = 66; + ANIM_PREFIX = "boar"; + } + + void miscitem_spawn() + { + SetName("Cannon Ball"); + SetDescription("This is a large iron ball for a dwarven flint cannon"); + SetValue(0); + SetWeight(110); + SetWorldModel(MODEL_WORLD); + SetPlayerModel(MODEL_HANDS); + SetViewModel(MODEL_VIEW); + } + +} + +} diff --git a/scripts/angelscript/items/item_charm_w1.as b/scripts/angelscript/items/item_charm_w1.as new file mode 100644 index 00000000..23461fd3 --- /dev/null +++ b/scripts/angelscript/items/item_charm_w1.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "items/base_crystal.as" + +namespace MS +{ + +class ItemCharmW1 : CGameScript +{ + string CRYSTAL_ABORT_USE; + string PET_FAIL_MESSAGE; + int PET_MAXHP; + string PET_SEARCH; + string PET_TYPE; + string PET_YAY_MESSAGE; + int SKILL_LEVEL_REQ; + string SKILL_TYPE; + + ItemCharmW1() + { + SKILL_LEVEL_REQ = 0; + SKILL_TYPE = "skill.spellcasting"; + PET_TYPE = "wolf"; + PET_SEARCH = "wolf"; + PET_MAXHP = 100; + PET_FAIL_MESSAGE = "No wolves in range."; + PET_YAY_MESSAGE = "You now have a new pet wolf!"; + } + + void crystal_spawn() + { + SetName("Wolf Charm"); + SetDescription("This crystal can be used to tame one wolf"); + SetWeight(5); + SetSize(5); + SetValue(500); + SetHand("both"); + } + + void check_use() + { + string OWNER_PETS = GetPlayerQuestData(GetOwner(), "pets"); + if ((OWNER_PETS).findFirst(PET_TYPE) >= 0) + { + CRYSTAL_ABORT_USE = 1; + SendColoredMessage(GetOwner(), "You can only have one of this type of pet."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + CallExternal(GetOwner(), "ext_scan_pet", PET_SEARCH); + string FOUND_PET = GetEntityProperty(GetOwner(), "scriptvar"); + if ((IsEntityAlive(FOUND_PET))) + { + if (GetEntityHealth(FOUND_PET) > PET_MAXHP) + { + CRYSTAL_ABORT_USE = 1; + SendColoredMessage(GetOwner(), GetEntityName(FOUND_PET) + " is too strong to be charmed! It must be weakened first!"); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + CallExternal(FOUND_PET, "ext_makepet", GetEntityIndex(GetOwner())); + } + else + { + CRYSTAL_ABORT_USE = 1; + SendColoredMessage(GetOwner(), PET_FAIL_MESSAGE); + } + } + + void activate_crystal() + { + CallExternal(GetEntityIndex(GetOwner()), "set_spawn_point", NEW_SPAWN_POS); + Effect("screenfade", GetOwner(), 0.5, 1, Vector3(255, 255, 255), 255, "fadein"); + SendInfoMsg(GetOwner(), PET + PET_YAY_MESSAGE); + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/items/item_charm_w2.as b/scripts/angelscript/items/item_charm_w2.as new file mode 100644 index 00000000..d9e2f1ff --- /dev/null +++ b/scripts/angelscript/items/item_charm_w2.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "items/item_charm_w1.as" + +namespace MS +{ + +class ItemCharmW2 : CGameScript +{ + string PET_FAIL_MESSAGE; + int PET_MAXHP; + string PET_SEARCH; + string PET_TYPE; + string PET_YAY_MESSAGE; + int SKILL_LEVEL_REQ; + string SKILL_TYPE; + + ItemCharmW2() + { + SKILL_LEVEL_REQ = 15; + SKILL_TYPE = "skill.spellcasting"; + PET_TYPE = "wolf"; + PET_SEARCH = "wolf_ice"; + PET_MAXHP = 1000; + PET_FAIL_MESSAGE = "No weakened winter wolves in range."; + PET_YAY_MESSAGE = "You now have a new pet winter wolf!"; + } + + void crystal_spawn() + { + SetName("Winter Wolf Charm"); + SetDescription("This crystal can be used to tame one winter wolf"); + SetWeight(5); + SetSize(5); + SetValue(1000); + SetHand("both"); + } + +} + +} diff --git a/scripts/angelscript/items/item_charm_w3.as b/scripts/angelscript/items/item_charm_w3.as new file mode 100644 index 00000000..d2e3c8a6 --- /dev/null +++ b/scripts/angelscript/items/item_charm_w3.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "items/item_charm_w1.as" + +namespace MS +{ + +class ItemCharmW3 : CGameScript +{ + string PET_FAIL_MESSAGE; + int PET_MAXHP; + string PET_SEARCH; + string PET_TYPE; + string PET_YAY_MESSAGE; + int SKILL_LEVEL_REQ; + string SKILL_TYPE; + + ItemCharmW3() + { + SKILL_LEVEL_REQ = 12; + SKILL_TYPE = "skill.spellcasting"; + PET_TYPE = "wolf"; + PET_SEARCH = "wolf_shadow"; + PET_MAXHP = 500; + PET_FAIL_MESSAGE = "No weakened shadow wolves in range."; + PET_YAY_MESSAGE = "You now have a new pet shadow wolf!"; + } + + void crystal_spawn() + { + SetName("Shadow Wolf Charm"); + SetDescription("This crystal can be used to tame one shadow wolf"); + SetWeight(5); + SetSize(5); + SetValue(750); + SetHand("both"); + } + +} + +} diff --git a/scripts/angelscript/items/item_coin.as b/scripts/angelscript/items/item_coin.as new file mode 100644 index 00000000..5c6a35ab --- /dev/null +++ b/scripts/angelscript/items/item_coin.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemCoin : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HOLD; + string MODEL_WORLD; + + ItemCoin() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + } + + void miscitem_spawn() + { + SetName("Ancient Dawnhope Coin"); + SetDescription("This coin is an enchanted trinket from ancient times"); + SetPlayerModel(MODEL_HANDS); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetWeight(1); + SetSize(1); + SetValue(100); + } + +} + +} diff --git a/scripts/angelscript/items/item_crow_shard.as b/scripts/angelscript/items/item_crow_shard.as new file mode 100644 index 00000000..c7284a3b --- /dev/null +++ b/scripts/angelscript/items/item_crow_shard.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemCrowShard : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemCrowShard() + { + MODEL_WORLD = "misc/item_key_ice.mdl"; + MODEL_HANDS = "misc/item_key_ice.mdl"; + } + + void miscitem_spawn() + { + SetName("Crystal Shard"); + SetDescription("A shard of a magic key. It could be reforged , if you had all the pieces."); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/item_crystal_reloc.as b/scripts/angelscript/items/item_crystal_reloc.as new file mode 100644 index 00000000..21974bdf --- /dev/null +++ b/scripts/angelscript/items/item_crystal_reloc.as @@ -0,0 +1,55 @@ +#pragma context server + +#include "items/base_crystal.as" + +namespace MS +{ + +class ItemCrystalReloc : CGameScript +{ + int BEAM_ROT; + string OWNER_POS; + int SKILL_LEVEL_REQ; + string SKILL_TYPE; + + ItemCrystalReloc() + { + SKILL_LEVEL_REQ = 0; + SKILL_TYPE = "skill.spellcasting"; + } + + void crystal_spawn() + { + SetName("Crystal of Relocation"); + SetDescription("Once this crystal's magic is deployed it will define a new respawn point."); + SetWeight(5); + SetSize(5); + SetValue(1000); + SetHand("both"); + } + + void activate_crystal() + { + OWNER_POS = GetEntityOrigin(GetOwner()); + BEAM_ROT = 0; + CallExternal(GetEntityIndex(GetOwner()), "set_spawn_point", OWNER_POS); + for (int i = 0; i < 18; i++) + { + beams(); + } + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + } + + void beams() + { + string BEAM_START = OWNER_POS; + string BEAM_END = OWNER_POS; + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, BEAM_ROT, 0), Vector3(0, 32, -32)); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, BEAM_ROT, 0), Vector3(0, 32, 128)); + Effect("beam", "point", "lgtning.spr", 100, BEAM_START, BEAM_END, Vector3(255, 0, 255), 200, 16, 3); + BEAM_ROT += 20; + } + +} + +} diff --git a/scripts/angelscript/items/item_crystal_return.as b/scripts/angelscript/items/item_crystal_return.as new file mode 100644 index 00000000..8f336821 --- /dev/null +++ b/scripts/angelscript/items/item_crystal_return.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "items/base_crystal.as" + +namespace MS +{ + +class ItemCrystalReturn : CGameScript +{ + int SKILL_LEVEL_REQ; + string SKILL_TYPE; + + ItemCrystalReturn() + { + SKILL_LEVEL_REQ = 0; + SKILL_TYPE = "skill.spellcasting"; + } + + void crystal_spawn() + { + SetName("Crystal of Return"); + SetDescription("This crystal will return you to the last spawn point."); + SetWeight(5); + SetSize(5); + SetValue(50); + SetHand("both"); + } + + void activate_crystal() + { + Effect("screenfade", GetOwner(), 2, 0.5, Vector3(0, 0, 0), 255, "fadein"); + string L_RESPAWN_POINT = GetEntityProperty(GetOwner(), "scriptvar"); + if (L_RESPAWN_POINT != "NEW_SPAWN_POS") + { + SetEntityOrigin(GetOwner(), L_RESPAWN_POINT); + } + else + { + Respawn(); + } + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/items/item_debug.as b/scripts/angelscript/items/item_debug.as new file mode 100644 index 00000000..fc291901 --- /dev/null +++ b/scripts/angelscript/items/item_debug.as @@ -0,0 +1,141 @@ +#pragma context server + +namespace MS +{ + +class ItemDebug : CGameScript +{ + string BITEM_DEBUG_CALLER; + string BITEM_DEBUG_OUT; + + void item_debug2() + { + if (!(GetGameTime() > 5.0)) return; + string L_DEBUG_CALLER = param1; + string L_DEBUG_TYPE = param2; + if (!(GetEntityProperty(L_DEBUG_CALLER, "scriptvar"))) return; + string L_OUT_MSG = GetEntityProperty(GetOwner(), "itemname"); + L_OUT_MSG += "["; + L_OUT_MSG += GetEntityIndex(GetOwner()); + L_OUT_MSG += "]: "; + if (L_DEBUG_TYPE == "array") + { + L_OUT_MSG += "Array "; + L_OUT_MSG += param3; + L_OUT_MSG += "#"; + L_OUT_MSG += param4; + L_OUT_MSG += " is "; + L_OUT_MSG += param3[int(param4)]; + int L_PROCESSED = 1; + } + if (L_DEBUG_TYPE == "var") + { + L_OUT_MSG += "var "; + L_OUT_MSG += param3; + L_OUT_MSG += " prop "; + L_OUT_MSG += GetEntityProperty(param3, "param4"); + int L_PROCESSED = 1; + } + if (!(L_PROCESSED)) + { + if ((param2).findFirst("PARAM") == 0) + { + L_OUT_MSG += "exists"; + } + else + { + L_OUT_MSG += param2; + if ((param3).findFirst("PARAM") == 0) + { + L_OUT_MSG += "->"; + L_OUT_MSG += param3; + L_OUT_MSG += "="; + L_OUT_MSG += GetEntityProperty(param2, "param3"); + } + if ((param4).findFirst("PARAM") == 0) + { + L_OUT_MSG += ","; + L_OUT_MSG += GetEntityProperty(param2, "param3"); + string L_PROP = GetEntityProperty(param2, "param3"); + L_OUT_MSG += "->"; + L_OUT_MSG += param4; + L_OUT_MSG += "="; + L_OUT_MSG += GetEntityProperty(L_PROP, "param4"); + L_OUT_MSG += " (scriptvar:"; + L_OUT_MSG += GetEntityProperty(L_PROP, "scriptvar"); + L_OUT_MSG += ")"; + } + } + } + if (GetGameTime() < G_NEXT_IDEBUG_CALL) + { + BITEM_DEBUG_OUT = L_OUT_MSG; + BITEM_DEBUG_CALLER = L_DEBUG_CALLER; + G_NEXT_IDEBUG_CALL += 0.1; + (G_NEXT_IDEBUG_CALL _ GetGameTime())("item_debug_delay"); + } + else + { + SetGlobalVar("G_NEXT_IDEBUG_CALL", GetGameTime()); + G_NEXT_IDEBUG_CALL += 0.1; + CallExternal(L_DEBUG_CALLER, "ext_debug_que", L_OUT_MSG); + } + } + + void item_debug_delay() + { + CallExternal(BITEM_DEBUG_CALLER, "ext_debug_que", BITEM_DEBUG_OUT); + } + + void clitem_debug() + { + string L_DEBUG_CALLER = param1; + if (!(/* TODO: $getcl */ $getcl(L_DEBUG_CALLER, "isplayer"))) return; + if (!("game.localplayer.index" == L_DEBUG_CALLER)) return; + string L_DEBUG_TYPE = param2; + string L_OUT_MSG = "CLIENT:"; + L_OUT_MSG += currentscript; + L_OUT_MSG += ":"; + if (L_DEBUG_TYPE == "array") + { + L_OUT_MSG += "Array "; + L_OUT_MSG += param3; + L_OUT_MSG += "#"; + L_OUT_MSG += param4; + L_OUT_MSG += " is "; + L_OUT_MSG += param3[int(param4)]; + int L_PROCESSED = 1; + } + if (L_DEBUG_TYPE == "var") + { + L_OUT_MSG += "var "; + L_OUT_MSG += param3; + L_OUT_MSG += " prop "; + L_OUT_MSG += /* TODO: $getcl */ $getcl(param3, param4); + int L_PROCESSED = 1; + } + if (!(L_PROCESSED)) + { + if ((param2).findFirst("PARAM") == 0) + { + L_OUT_MSG += "exists"; + } + else + { + L_OUT_MSG += param2; + if ((param3).findFirst("PARAM") == 0) + { + L_OUT_MSG += "->"; + L_OUT_MSG += param3; + L_OUT_MSG += "="; + L_OUT_MSG += /* TODO: $getcl */ $getcl(param2, param3); + } + } + int L_PROCESSED = 1; + } + LogDebug("L_OUT_MSG"); + } + +} + +} diff --git a/scripts/angelscript/items/item_deed.as b/scripts/angelscript/items/item_deed.as new file mode 100644 index 00000000..38f86e51 --- /dev/null +++ b/scripts/angelscript/items/item_deed.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemDeed : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemDeed() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Property Deed"); + SetDescription("A deed to one of the nearby farms"); + } + +} + +} diff --git a/scripts/angelscript/items/item_devhousekey.as b/scripts/angelscript/items/item_devhousekey.as new file mode 100644 index 00000000..dd860769 --- /dev/null +++ b/scripts/angelscript/items/item_devhousekey.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemDevhousekey : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HOLD; + string MODEL_WORLD; + + ItemDevhousekey() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 12; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("House Key"); + SetDescription("The key to a house"); + SetPlayerModel(MODEL_HANDS); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetWeight(1); + SetSize(1); + } + +} + +} diff --git a/scripts/angelscript/items/item_djinn_fire.as b/scripts/angelscript/items/item_djinn_fire.as new file mode 100644 index 00000000..b1d73089 --- /dev/null +++ b/scripts/angelscript/items/item_djinn_fire.as @@ -0,0 +1,118 @@ +#pragma context server + +namespace MS +{ + +class ItemDjinnFire : CGameScript +{ + int FRAMERATE; + int FRAMES; + string LIGHT_COLOR; + int LIGHT_DROPPED_SCALE; + float LIGHT_PLAYER_SCALE; + int LIGHT_RADIUS; + int L_ATTACH_BODY; + string L_ATTACH_MDL_ID; + string L_POS; + string SPRITE_FIRE; + string SPRITE_FIRE_FIXED; + string local.body; + string local.lightid; + int local.local3rdp_sprite; + int local.modelid; + string local.scale; + string local.sprite; + + ItemDjinnFire() + { + SPRITE_FIRE = "fire1_fixed.spr"; + SPRITE_FIRE_FIXED = "fire1_fixed.spr"; + LIGHT_RADIUS = 300; + LIGHT_COLOR = Vector3(128, 50, 4); + LIGHT_PLAYER_SCALE = 0.3; + LIGHT_DROPPED_SCALE = 5; + Precache(SPRITE_FIRE); + Precache(SPRITE_FIRE_FIXED); + FRAMES = 20; + FRAMERATE = 30; + local.modelid = -1; + local.local3rdp_sprite = 0; + SetCallback("render", "enable"); + } + + void client_activate() + { + local.modelid = param1; + local.body = param2; + local.sprite = SPRITE_FIRE_FIXED; + local.scale = LIGHT_DROPPED_SCALE; + if (local.modelid == "game.localplayer.index") + { + local.local3rdp_sprite = 1; + } + if ((/* TODO: $getcl */ $getcl(local.modelid, "isplayer"))) + { + local.sprite = SPRITE_FIRE; + local.scale = LIGHT_PLAYER_SCALE; + } + create_light(); + } + + void create_light() + { + ClientEffect("light", "new", Vector3(0, 0, 0), LIGHT_RADIUS, LIGHT_COLOR, 5); + local.lightid = "game.script.last_light_id"; + } + + void game_prerender() + { + if (SPRITE_FIRE != "none") + { + ClientEffect("frameent", "sprite", local.sprite, Vector3(0, 0, 0), "setup_flame"); + } + if (!(LIGHT_RADIUS > 0)) return; + string L_POS = /* TODO: $getcl */ $getcl(local.modelid, "origin"); + if ((/* TODO: $getcl */ $getcl(local.modelid, "isplayer"))) + { + L_POS = /* TODO: $relpos */ $relpos(/* TODO: $getcl */ $getcl(local.modelid, "angles"), Vector3(0, 64, 0)); + L_POS += /* TODO: $getcl */ $getcl(local.modelid, "center"); + } + string L_RADIUS = LIGHT_RADIUS; + L_RADIUS += Random(-8, 8); + ClientEffect("light", local.lightid, L_POS, L_RADIUS, LIGHT_COLOR, 5); + } + + void setup_flame() + { + string L_ATTACH_MDL_ID = local.modelid; + string L_ATTACH_BODY = local.body; + if ((local.local3rdp_sprite)) + { + // TODO: UNCONVERTED: if( local.local3rdp_sprite ) if( !game.localplayer.thirdperson ) + } + if (local.body == 1) + { + L_ATTACH_MDL_ID = "game.localplayer.viewmodel.left.id"; + } + else + { + L_ATTACH_MDL_ID = "game.localplayer.viewmodel.right.id"; + } + L_ATTACH_BODY = 1; + if (!(L_ATTACH_MDL_ID > -1)) return; + ClientEffect("frameent", "set_current_prop", "owner", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "skin", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "aiment", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "movetype", 12); + ClientEffect("frameent", "set_current_prop", "body", L_ATTACH_BODY); + ClientEffect("frameent", "set_current_prop", "scale", local.scale); + float l.frame = GetGameTime(); + l.frame -= START_BURNING; + l.frame *= FRAMERATE; + l.frame %= FRAMES; + ClientEffect("frameent", "set_current_prop", "frame", l.frame); + } + +} + +} diff --git a/scripts/angelscript/items/item_djinn_light.as b/scripts/angelscript/items/item_djinn_light.as new file mode 100644 index 00000000..10033930 --- /dev/null +++ b/scripts/angelscript/items/item_djinn_light.as @@ -0,0 +1,121 @@ +#pragma context server + +namespace MS +{ + +class ItemDjinnLight : CGameScript +{ + int FRAMERATE; + int FRAMES; + string LIGHT_COLOR; + int LIGHT_DROPPED_SCALE; + float LIGHT_PLAYER_SCALE; + int LIGHT_RADIUS; + int L_ATTACH_BODY; + string L_ATTACH_MDL_ID; + string L_POS; + string SPRITE_FIRE; + string SPRITE_FIRE_FIXED; + string local.body; + string local.lightid; + int local.local3rdp_sprite; + int local.modelid; + string local.scale; + string local.sprite; + + ItemDjinnLight() + { + SPRITE_FIRE = "bluejet1.spr"; + SPRITE_FIRE_FIXED = "bluejet1.spr"; + LIGHT_RADIUS = 300; + LIGHT_COLOR = Vector3(4, 50, 128); + LIGHT_PLAYER_SCALE = 0.3; + LIGHT_DROPPED_SCALE = 6; + FRAMES = 20; + FRAMERATE = 30; + local.modelid = -1; + local.local3rdp_sprite = 0; + SetCallback("render", "enable"); + } + + void game_precache() + { + Precache("bluejet1.spr"); + } + + void client_activate() + { + local.modelid = param1; + local.body = param2; + local.sprite = SPRITE_FIRE_FIXED; + local.scale = LIGHT_DROPPED_SCALE; + if (local.modelid == "game.localplayer.index") + { + local.local3rdp_sprite = 1; + } + if ((/* TODO: $getcl */ $getcl(local.modelid, "isplayer"))) + { + local.sprite = SPRITE_FIRE; + local.scale = LIGHT_PLAYER_SCALE; + } + create_light(); + } + + void create_light() + { + ClientEffect("light", "new", Vector3(0, 0, 0), LIGHT_RADIUS, LIGHT_COLOR, 5); + local.lightid = "game.script.last_light_id"; + } + + void game_prerender() + { + if (SPRITE_FIRE != "none") + { + ClientEffect("frameent", "sprite", local.sprite, Vector3(0, 0, 0), "setup_flame"); + } + if (!(LIGHT_RADIUS > 0)) return; + string L_POS = /* TODO: $getcl */ $getcl(local.modelid, "origin"); + if ((/* TODO: $getcl */ $getcl(local.modelid, "isplayer"))) + { + L_POS = /* TODO: $relpos */ $relpos(/* TODO: $getcl */ $getcl(local.modelid, "angles"), Vector3(0, 64, 0)); + L_POS += /* TODO: $getcl */ $getcl(local.modelid, "center"); + } + string L_RADIUS = LIGHT_RADIUS; + L_RADIUS += Random(-8, 8); + ClientEffect("light", local.lightid, L_POS, L_RADIUS, LIGHT_COLOR, 5); + } + + void setup_flame() + { + string L_ATTACH_MDL_ID = local.modelid; + string L_ATTACH_BODY = local.body; + if ((local.local3rdp_sprite)) + { + // TODO: UNCONVERTED: if( local.local3rdp_sprite ) if( !game.localplayer.thirdperson ) + } + if (local.body == 1) + { + L_ATTACH_MDL_ID = "game.localplayer.viewmodel.left.id"; + } + else + { + L_ATTACH_MDL_ID = "game.localplayer.viewmodel.right.id"; + } + L_ATTACH_BODY = 1; + if (!(L_ATTACH_MDL_ID > -1)) return; + ClientEffect("frameent", "set_current_prop", "owner", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "skin", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "aiment", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "movetype", 12); + ClientEffect("frameent", "set_current_prop", "body", L_ATTACH_BODY); + ClientEffect("frameent", "set_current_prop", "scale", local.scale); + float l.frame = GetGameTime(); + l.frame -= START_BURNING; + l.frame *= FRAMERATE; + l.frame %= FRAMES; + ClientEffect("frameent", "set_current_prop", "frame", l.frame); + } + +} + +} diff --git a/scripts/angelscript/items/item_documents.as b/scripts/angelscript/items/item_documents.as new file mode 100644 index 00000000..2894160e --- /dev/null +++ b/scripts/angelscript/items/item_documents.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemDocuments : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HOLD; + string MODEL_WORLD; + + ItemDocuments() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "oldbook"; + } + + void miscitem_spawn() + { + SetName("Batch of Documents"); + SetDescription("Documents with an elven Seal"); + SetPlayerModel(MODEL_HANDS); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetWeight(5); + SetSize(5); + SetValue(10); + } + +} + +} diff --git a/scripts/angelscript/items/item_eh.as b/scripts/angelscript/items/item_eh.as new file mode 100644 index 00000000..2dc7b0e8 --- /dev/null +++ b/scripts/angelscript/items/item_eh.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemEh : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemEh() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Efreeti Heart"); + SetDescription("The heart of a being containing a fire elemental"); + SetValue(0); + } + +} + +} diff --git a/scripts/angelscript/items/item_erkoldsnote.as b/scripts/angelscript/items/item_erkoldsnote.as new file mode 100644 index 00000000..6b94a6c7 --- /dev/null +++ b/scripts/angelscript/items/item_erkoldsnote.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemErkoldsnote : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemErkoldsnote() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Note from Erkold"); + SetDescription("A note from Erkold telling the smith to pass his armor to you"); + } + +} + +} diff --git a/scripts/angelscript/items/item_feather.as b/scripts/angelscript/items/item_feather.as new file mode 100644 index 00000000..58817974 --- /dev/null +++ b/scripts/angelscript/items/item_feather.as @@ -0,0 +1,33 @@ +#pragma context server + +#include "items/item_precache.as" +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemFeather : CGameScript +{ + string MODEL_HANDS; + string MODEL_OFS; + string MODEL_WORLD; + + ItemFeather() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_OFS = OFS_GENERIC; + } + + void miscitem_spawn() + { + SetName("Hawk Feather"); + SetDescription("A valueable type of feather used for fletchings"); + SetWeight(0.1); + SetValue(10); + SetGravity(0.5); + } + +} + +} diff --git a/scripts/angelscript/items/item_fstatue.as b/scripts/angelscript/items/item_fstatue.as new file mode 100644 index 00000000..269dc5d4 --- /dev/null +++ b/scripts/angelscript/items/item_fstatue.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemFstatue : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemFstatue() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Statuette of Felewyn"); + SetDescription("An old worn ivory figurine of the goddess Felewyn"); + SetValue(0); + SetWeight(0); + } + +} + +} diff --git a/scripts/angelscript/items/item_galat_note_10.as b/scripts/angelscript/items/item_galat_note_10.as new file mode 100644 index 00000000..f60f99e3 --- /dev/null +++ b/scripts/angelscript/items/item_galat_note_10.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemGalatNote10 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemGalatNote10() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void OnSpawn() override + { + SetName("Galat Bank Note 10gp"); + SetDescription("An official bank note for 10 gold peices"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_galat_note_100.as b/scripts/angelscript/items/item_galat_note_100.as new file mode 100644 index 00000000..6455a817 --- /dev/null +++ b/scripts/angelscript/items/item_galat_note_100.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemGalatNote100 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemGalatNote100() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void OnSpawn() override + { + SetName("Galat Bank Note 100gp"); + SetDescription("An official bank note for 100 gold peices"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_gaxe_handle.as b/scripts/angelscript/items/item_gaxe_handle.as new file mode 100644 index 00000000..c1f9e160 --- /dev/null +++ b/scripts/angelscript/items/item_gaxe_handle.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemGaxeHandle : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemGaxeHandle() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Broken Axe Hilt"); + SetDescription("Once a mighty golden axe. Can someone fix this?"); + SetValue(50); + SetHUDSprite("trade", "greataxe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_goblinhead.as b/scripts/angelscript/items/item_goblinhead.as new file mode 100644 index 00000000..eccc5619 --- /dev/null +++ b/scripts/angelscript/items/item_goblinhead.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemGoblinhead : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemGoblinhead() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Goblin Chief s Head"); + SetDescription("The head of the Goblin Chief"); + SetValue(0); + } + +} + +} diff --git a/scripts/angelscript/items/item_gwond.as b/scripts/angelscript/items/item_gwond.as new file mode 100644 index 00000000..cbfe5e45 --- /dev/null +++ b/scripts/angelscript/items/item_gwond.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemGwond : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + string NEXT_USE; + int SCROLL_USED; + + ItemGwond() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Galat s Wondrous Scroll"); + SetDescription("This one time use scroll summons Galat s Wondrous Chest"); + SetHUDSprite("trade", "letter"); + } + + void OnDeploy() override + { + NEXT_USE = GetGameTime(); + NEXT_USE += 1.0; + } + + void game_attack1() + { + if (!(GetGameTime() > NEXT_USE)) return; + if ((SCROLL_USED)) return; + SCROLL_USED = 1; + summon_chest(); + } + + void summon_chest() + { + string OWNER_POS = GetEntityOrigin(GetOwner()); + string OWNER_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + string SPAWN_POS = OWNER_POS; + SPAWN_POS += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, 64, 0)); + SpawnNPC("chests/bank1", SPAWN_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/item_hat.as b/scripts/angelscript/items/item_hat.as new file mode 100644 index 00000000..5327b854 --- /dev/null +++ b/scripts/angelscript/items/item_hat.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/armor_base_helmet.as" + +namespace MS +{ + +class ItemHat : CGameScript +{ + int ARMOR_BODY; + string ARMOR_MODEL; + string ARMOR_TEXT; + float BARMOR_PROTECTION; + string BARMOR_TYPE; + int STUN_PROTECTION; + + ItemHat() + { + ARMOR_MODEL = "armor/p_helmets.mdl"; + ARMOR_BODY = 11; + ARMOR_TEXT = "You put on the funny hat."; + BARMOR_TYPE = "platemail"; + BARMOR_PROTECTION = 0.0; + STUN_PROTECTION = 1; + } + + void OnSpawn() override + { + SetName("Funny Looking Hat"); + SetDescription("A funny looking hat. Who d wear this thing anyways?"); + SetWeight(1); + SetSize(1); + SetWearable(1); + SetValue(1); + SetHUDSprite("trade", 90); + } + +} + +} diff --git a/scripts/angelscript/items/item_housekey.as b/scripts/angelscript/items/item_housekey.as new file mode 100644 index 00000000..59b93bdf --- /dev/null +++ b/scripts/angelscript/items/item_housekey.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemHousekey : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HOLD; + string MODEL_WORLD; + int house.lock; + + ItemHousekey() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 12; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("House Key"); + SetDescription("The key to a house"); + SetPlayerModel(MODEL_HANDS); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetWeight(1); + SetSize(1); + house.lock = RandomInt(0, 19); + } + +} + +} diff --git a/scripts/angelscript/items/item_ikeletter.as b/scripts/angelscript/items/item_ikeletter.as new file mode 100644 index 00000000..ef0cf326 --- /dev/null +++ b/scripts/angelscript/items/item_ikeletter.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemIkeletter : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemIkeletter() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Sealed Letter"); + SetDescription("A Letter from Ike to Abulurd"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_ikelog.as b/scripts/angelscript/items/item_ikelog.as new file mode 100644 index 00000000..bc7009c1 --- /dev/null +++ b/scripts/angelscript/items/item_ikelog.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemIkelog : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemIkelog() + { + MODEL_WORLD = "misc/item_log.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Tree Sample"); + SetDescription("A sample of Abulurd s lumber"); + SetWeight(7); + SetSize(7); + SetValue(100); + SetHUDSprite("trade", "log"); + } + +} + +} diff --git a/scripts/angelscript/items/item_js.as b/scripts/angelscript/items/item_js.as new file mode 100644 index 00000000..7c115b79 --- /dev/null +++ b/scripts/angelscript/items/item_js.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemJs : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemJs() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Jade Skull"); + SetDescription("A strange green skull with some runes on it"); + SetValue(0); + } + +} + +} diff --git a/scripts/angelscript/items/item_key_rusty.as b/scripts/angelscript/items/item_key_rusty.as new file mode 100644 index 00000000..17ce49ef --- /dev/null +++ b/scripts/angelscript/items/item_key_rusty.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemKeyRusty : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemKeyRusty() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Old Rusty Key"); + SetDescription("An old rusty key"); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/item_key_sewer.as b/scripts/angelscript/items/item_key_sewer.as new file mode 100644 index 00000000..e61d05ad --- /dev/null +++ b/scripts/angelscript/items/item_key_sewer.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemKeySewer : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemKeySewer() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Sewer Maintenance key"); + SetDescription("A key for the Deralia sewer maintenance workers"); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/item_ledger.as b/scripts/angelscript/items/item_ledger.as new file mode 100644 index 00000000..70dc99cb --- /dev/null +++ b/scripts/angelscript/items/item_ledger.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemLedger : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HOLD; + string MODEL_WORLD; + + ItemLedger() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "oldbook"; + } + + void miscitem_spawn() + { + SetName("Ledger"); + SetDescription("A ledger full of transactions and accounts."); + SetPlayerModel(MODEL_HANDS); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetWeight(5); + SetSize(5); + SetValue(0); + SetHUDSprite("trade", "book"); + } + +} + +} diff --git a/scripts/angelscript/items/item_letter.as b/scripts/angelscript/items/item_letter.as new file mode 100644 index 00000000..14bd3994 --- /dev/null +++ b/scripts/angelscript/items/item_letter.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemLetter : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemLetter() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "oldbook"; + } + + void miscitem_spawn() + { + SetName("Sealed Letter"); + SetDescription("A letter from Hoguld to Willem in Deralia"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_letter_almund.as b/scripts/angelscript/items/item_letter_almund.as new file mode 100644 index 00000000..4a520f89 --- /dev/null +++ b/scripts/angelscript/items/item_letter_almund.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemLetterAlmund : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemLetterAlmund() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "oldbook"; + } + + void miscitem_spawn() + { + SetName("Letter from Almund"); + SetDescription("A letter from Almund to his wife in Gate City"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_letter_mayor.as b/scripts/angelscript/items/item_letter_mayor.as new file mode 100644 index 00000000..74f122c0 --- /dev/null +++ b/scripts/angelscript/items/item_letter_mayor.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemLetterMayor : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemLetterMayor() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Sealed Letter"); + SetDescription("A letter from the mayor of Edana to an Orc Captain"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_light_crystal.as b/scripts/angelscript/items/item_light_crystal.as new file mode 100644 index 00000000..5c33e27f --- /dev/null +++ b/scripts/angelscript/items/item_light_crystal.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "items/base_crystal.as" + +namespace MS +{ + +class ItemLightCrystal : CGameScript +{ + float ACTIVE_DELAY; + int SILENT_DELAY; + int SKILL_LEVEL_REQ; + string SKILL_TYPE; + + ItemLightCrystal() + { + SKILL_LEVEL_REQ = 0; + SKILL_TYPE = "skill.spellcasting"; + SILENT_DELAY = 1; + } + + void crystal_spawn() + { + SetName("Light Crystal"); + SetDescription("These crystals of light become less corporeal with age"); + SetWeight(1); + SetSize(1); + SetValue(10); + SetHand("both"); + ACTIVE_DELAY = Random(0, 0.5); + } + + void activate_crystal() + { + CallExternal("all", "ext_flash_bang", GetEntityOrigin(GetOwner()), 128, GetEntityIndex(GetOwner())); + SendPlayerMessage(GetOwner(), "You break the light crystal!"); + } + +} + +} diff --git a/scripts/angelscript/items/item_lockpick.as b/scripts/angelscript/items/item_lockpick.as new file mode 100644 index 00000000..4cb37d4f --- /dev/null +++ b/scripts/angelscript/items/item_lockpick.as @@ -0,0 +1,202 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemLockpick : CGameScript +{ + int AM_LOCKPICKING; + int ANIM_FAIL; + int ANIM_IDLE; + int ANIM_IDLE1; + int ANIM_IDLE2; + int ANIM_IDLE3; + int ANIM_IDLE4; + int ANIM_IDLE5; + int ANIM_IDLE_DELAY_HIGH; + int ANIM_IDLE_DELAY_LOW; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_USE; + string ICO_LOCKPICK_STATUS; + int ITEM_MODEL_VIEW_IDX; + int LOCKPICK_FAIL; + string LOCK_TARGET; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string NEXT_USE; + + ItemLockpick() + { + ANIM_LIFT1 = 18; + ANIM_IDLE = 18; + ANIM_IDLE1 = 18; + ANIM_IDLE2 = 18; + ANIM_IDLE3 = 18; + ANIM_IDLE4 = 18; + ANIM_IDLE5 = 18; + ANIM_IDLE_DELAY_LOW = 2; + ANIM_IDLE_DELAY_HIGH = 5; + ANIM_USE = 19; + ANIM_FAIL = 16; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + MODEL_VIEW = "viewmodels/v_martialarts.mdl"; + ITEM_MODEL_VIEW_IDX = 9; + ANIM_PREFIX = "rustedkey"; + ICO_LOCKPICK_STATUS = "hud/status/alpha_lockpick"; + } + + void miscitem_spawn() + { + SetName("Lockpick"); + SetDescription("This can be used to disarm traps and open certain chests"); + SetGroupable(100); + SetWeight(0); + SetSize(1); + SetValue(300); + SetHUDSprite("trade", 195); + } + + void OnDeploy() override + { + PlayViewAnim(ANIM_LIFT1); + if (!(true)) return; + NEXT_USE = GetGameTime(); + NEXT_USE += 0.5; + ScheduleDelayedEvent(0.1, "bi_setup_model"); + } + + void game_attack1() + { + if (!(true)) return; + if (!(GetGameTime() > NEXT_USE)) return; + if ((AM_LOCKPICKING)) return; + NEXT_USE = GetGameTime(); + NEXT_USE += 0.5; + if (!(CanAttack(GetOwner()))) return; + string L_TARG = GetEntityProperty(GetOwner(), "target"); + LOCKPICK_FAIL = 0; + validate_target(L_TARG); + if ((LOCKPICK_FAIL)) return; + // TODO: hud.addstatusicon ent_owner ICO_LOCKPICK_STATUS lockpick 10.0 + // TODO: splayviewanim ent_me ANIM_USE + AM_LOCKPICKING = 1; + LOCK_TARGET = L_TARG; + ScheduleDelayedEvent(10.0, "lockpick_complete"); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(GetRelationship(param1) == "enemy")) return; + if ((IsValidPlayer(param1))) return; + // TODO: splayviewanim ent_me ANIM_LIFT1 + SendColoredMessage(GetOwner(), "Your lock picking is interrupted!"); + // TODO: hud.killstatusicon ent_owner lockpick + NEXT_USE = GetGameTime(); + NEXT_USE += 0.5; + AM_LOCKPICKING = 0; + } + + void lockpick_complete() + { + if (!(AM_LOCKPICKING)) return; + AM_LOCKPICKING = 0; + NEXT_USE = GetGameTime(); + NEXT_USE += 1.0; + string L_TARG = LOCK_TARGET; + LOCKPICK_FAIL = 0; + validate_target(L_TARG); + if ((LOCKPICK_FAIL)) return; + CallExternal(LOCK_TARGET, "ext_picked", GetEntityIndex(GetOwner())); + string L_COUNT = GetEntityProperty(GetOwner(), "quantity"); + LogDebug("lockpick_complete L_COUNT"); + L_COUNT -= 1; + if (L_COUNT <= 0) + { + DeleteEntity(GetOwner()); + } + else + { + // TODO: setquantity ent_me L_COUNT + } + } + + void resume_idle() + { + // TODO: splayviewanim ent_me ANIM_IDLE1 + } + + void bi_setup_model() + { + LogDebug("setting up model"); + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") ITEM_MODEL_VIEW_IDX + } + + void validate_target() + { + string L_TARG = param1; + if (!(IsEntityAlive(L_TARG))) + { + SendColoredMessage(GetOwner(), "Lockpick: No target."); + LOCKPICK_FAIL = 1; + return; + } + if (!(GetEntityProperty(L_TARG, "scriptvar"))) + { + if (!(GetEntityProperty(L_TARG, "scriptvar"))) + { + } + int L_FAIL = 1; + } + if (!(L_FAIL)) + { + string L_TARG_ORG = GetEntityOrigin(L_TARG); + string L_OWNER_ORG = GetEntityOrigin(GetOwner()); + if (Distance(L_TARG_ORG, L_OWNER_ORG) > 96) + { + int L_TOO_FAR = 1; + int L_FAIL = 1; + } + if ((L_TOO_FAR)) + { + string L_MSG = "Lockpick: You are too far away..."; + } + } + if ((L_FAIL)) + { + LOCKPICK_FAIL = 1; + // TODO: splayviewanim ent_me ANIM_FAIL + ScheduleDelayedEvent(1.0, "resume_idle"); + NEXT_USE = GetGameTime(); + NEXT_USE += 1.0; + if (!(L_TOO_FAR)) + { + string L_MSG = "Lockpick: This is not a valid target."; + } + if ((GetEntityProperty(L_TARG, "scriptvar"))) + { + if (!(L_TOO_FAR)) + { + } + if ((GetEntityProperty(L_TARG, "scriptvar"))) + { + string L_MSG = "Lockpick: This chest cannot be picked."; + } + if (!(GetEntityProperty(L_TARG, "scriptvar"))) + { + string L_MSG = "Lockpick: This chest is neither locked nor trapped."; + } + } + SendColoredMessage(GetOwner(), L_MSG); + } + } + +} + +} diff --git a/scripts/angelscript/items/item_log.as b/scripts/angelscript/items/item_log.as new file mode 100644 index 00000000..369b5e6f --- /dev/null +++ b/scripts/angelscript/items/item_log.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemLog : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + string SCRIPT_ID; + string TORCH_LIGHT_SCRIPT; + + ItemLog() + { + MODEL_WORLD = "misc/item_log.mdl"; + MODEL_HANDS = "misc/item_log.mdl"; + TORCH_LIGHT_SCRIPT = "items/item_torch_light"; + } + + void miscitem_spawn() + { + SetName("Firewood"); + SetDescription("Some high quality firewood"); + SetWeight(7); + SetSize(7); + SetValue(5); + SetHUDSprite("trade", "log"); + } + + void OnDrop() override + { + ClientEvent("persist", "all", TORCH_LIGHT_SCRIPT, GetEntityIndex(GetOwner()), 1); + SCRIPT_ID = "game.script.last_sent_id"; + } + + void OnPickup(CBaseEntity@ player) override + { + ClientEvent("remove", "all", SCRIPT_ID); + } + +} + +} diff --git a/scripts/angelscript/items/item_log_magic.as b/scripts/angelscript/items/item_log_magic.as new file mode 100644 index 00000000..5b984e74 --- /dev/null +++ b/scripts/angelscript/items/item_log_magic.as @@ -0,0 +1,76 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemLogMagic : CGameScript +{ + int IN_WORLD; + string MODEL_HANDS; + string MODEL_WORLD; + string PARTY_STARTED; + string SCRIPT_ID; + string TORCH_LIGHT_SCRIPT; + + ItemLogMagic() + { + MODEL_WORLD = "misc/item_log.mdl"; + MODEL_HANDS = "misc/item_log.mdl"; + TORCH_LIGHT_SCRIPT = "player/player_conartist"; + } + + void miscitem_spawn() + { + SetName("Magical Firewood"); + SetDescription("Some strange artifact assembled by a somewhat flamboyant wizard"); + SetWeight(7); + SetSize(7); + SetValue(5); + SetHUDSprite("trade", "log"); + } + + void OnDrop() override + { + ClientEvent("persist", "all", TORCH_LIGHT_SCRIPT, "disco", GetEntityIndex(GetOwner())); + SCRIPT_ID = "game.script.last_sent_id"; + IN_WORLD = 1; + if (!(PARTY_STARTED)) + { + PARTY_STARTED = 1; + ScheduleDelayedEvent(0.2, "music_loop"); + } + ScheduleDelayedEvent(0.1, "world_boogie"); + } + + void OnPickup(CBaseEntity@ player) override + { + ClientEvent("remove", "all", SCRIPT_ID); + IN_WORLD = 0; + } + + void game_remove() + { + ClientEvent("remove", "all", SCRIPT_ID); + IN_WORLD = 0; + } + + void world_boogie() + { + SetRepeatDelay(0.2); + if (!(IN_WORLD)) return; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RandomInt(80, 255)); + } + + void music_loop() + { + SetRepeatDelay(13.2); + if (!(IN_WORLD)) return; + EmitSound(GetOwner(), 0, "magic/disco_loop.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/items/item_manuscript.as b/scripts/angelscript/items/item_manuscript.as new file mode 100644 index 00000000..57d83b17 --- /dev/null +++ b/scripts/angelscript/items/item_manuscript.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemManuscript : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemManuscript() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Darrelino Var s manuscript"); + SetDescription("A manuscript of of a play by The Great Darrelino Var"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_necro_note.as b/scripts/angelscript/items/item_necro_note.as new file mode 100644 index 00000000..f87576f6 --- /dev/null +++ b/scripts/angelscript/items/item_necro_note.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemNecroNote : CGameScript +{ + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + + ItemNecroNote() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "garbagegibs.mdl"; + MODEL_VIEW = "viewmodels/v_2hblunts.mdl"; + } + + void miscitem_spawn() + { + SetName("Letter from Venevus"); + SetDescription("Take this key and meet me in my lair , if you dare."); + SetViewModel(MODEL_VIEW); + SetHUDSprite("trade", "letter"); + SetHand("both"); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + PlayAnim("once", 22); + ScheduleDelayedEvent(0.1, "setup_viewmodel"); + } + + void setup_viewmodel() + { + // TODO: setviewmodelprop ent_me submodel 0 9 + // TODO: splayviewanim ent_me 22 + } + +} + +} diff --git a/scripts/angelscript/items/item_ore_lorel.as b/scripts/angelscript/items/item_ore_lorel.as new file mode 100644 index 00000000..8b7e6ff3 --- /dev/null +++ b/scripts/angelscript/items/item_ore_lorel.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemOreLorel : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemOreLorel() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Package of Loreldian Ore"); + SetDescription("Wow , this stuff actually does exist."); + SetValue(25000); + } + +} + +} diff --git a/scripts/angelscript/items/item_picashlborn.as b/scripts/angelscript/items/item_picashlborn.as new file mode 100644 index 00000000..238475ea --- /dev/null +++ b/scripts/angelscript/items/item_picashlborn.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemPicashlborn : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemPicashlborn() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Picture of Ashelborn"); + SetDescription("A picture of Luc Ashelborn"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_precache.as b/scripts/angelscript/items/item_precache.as new file mode 100644 index 00000000..5ad9cf40 --- /dev/null +++ b/scripts/angelscript/items/item_precache.as @@ -0,0 +1,50 @@ +#pragma context server + +namespace MS +{ + +class ItemPrecache : CGameScript +{ + ItemPrecache() + { + Precache("weapons/projectiles2.mdl"); + Precache("poison_cloud.spr"); + Precache("laserbeam.spr"); + Precache("weapons/magic/seals.mdl"); + Precache("3dmflaora.spr"); + Precache("lgtning.spr"); + Precache("fire1_fixed.spr"); + Precache("null.mdl"); + Precache("xsmoke3.spr"); + Precache("weapons/p_weapons1.mdl"); + Precache("weapons/p_weapons2.mdl"); + Precache("weapons/p_weapons3.mdl"); + Precache("weapons/p_weapons4.mdl"); + Precache("glassgibs.mdl"); + Precache("weapons/p_weapons1.mdl"); + Precache("weapons/p_weapons2.mdl"); + Precache("weapons/p_weapons3.mdl"); + Precache("weapons/projectiles.mdl"); + Precache("bigsmoke.spr"); + Precache("null.wav"); + Precache("misc/gold.wav"); + Precache("ambience/alienflyby1.wav"); + Precache("chests/base_treasurechest"); + Precache("monsters/skeleton"); + Precache("monsters/summon/bear1"); + Precache("fire1_fixed2.spr"); + Precache("fire1_fixed.spr"); + Precache("monsters/summon/lesser_wraith"); + Precache("monsters/wraith_cl"); + Precache("monsters/companion/pet_wolf"); + Precache("monsters/companion/pet_wolf_ice"); + Precache("monsters/companion/pet_wolf_shadow"); + } + + void fake_caches() + { + } + +} + +} diff --git a/scripts/angelscript/items/item_ratskull.as b/scripts/angelscript/items/item_ratskull.as new file mode 100644 index 00000000..361b06c7 --- /dev/null +++ b/scripts/angelscript/items/item_ratskull.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRatskull : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRatskull() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Golden Rat s Skull"); + SetDescription("A small rat s skull, plated with gold"); + SetValue(0); + } + +} + +} diff --git a/scripts/angelscript/items/item_riddleanswers.as b/scripts/angelscript/items/item_riddleanswers.as new file mode 100644 index 00000000..2cc0678b --- /dev/null +++ b/scripts/angelscript/items/item_riddleanswers.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRiddleanswers : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRiddleanswers() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Torn Piece of paper"); + SetDescription("Torn paper reads: 'A DARK RIVER...'"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_riddleanswers2.as b/scripts/angelscript/items/item_riddleanswers2.as new file mode 100644 index 00000000..77ace18e --- /dev/null +++ b/scripts/angelscript/items/item_riddleanswers2.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRiddleanswers2 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRiddleanswers2() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Torn Piece of paper"); + SetDescription("Torn paper reads: '... of TIME'"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_ring.as b/scripts/angelscript/items/item_ring.as new file mode 100644 index 00000000..70fe2c55 --- /dev/null +++ b/scripts/angelscript/items/item_ring.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRing : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRing() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + } + + void miscitem_spawn() + { + SetName("Golden Ring"); + SetDescription("A golden ring"); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetValue(0); + SetWearable(1); + SetHUDSprite("trade", "ring"); + } + + void game_wear() + { + SetModel("none"); + } + + void game_removefromowner() + { + SetModel(MODEL_HANDS); + } + +} + +} diff --git a/scripts/angelscript/items/item_ring_mana.as b/scripts/angelscript/items/item_ring_mana.as new file mode 100644 index 00000000..7fd21eb2 --- /dev/null +++ b/scripts/angelscript/items/item_ring_mana.as @@ -0,0 +1,57 @@ +#pragma context server + +#include "items/base_effect_armor.as" +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRingMana : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRingMana() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + } + + void miscitem_spawn() + { + SetName("Felewyn's Grace"); + SetDescription("Other-worldly powers resonate and empower your mystical energies."); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetValue(100); + SetWearable(1); + SetHUDSprite("trade", 230); + } + + void game_wear() + { + SetModel("none"); + } + + void game_removefromowner() + { + SetModel(MODEL_HANDS); + } + + void barmor_effect_activate() + { + CallExternal(GetOwner(), "manaring_toggle", 1); + } + + void barmor_effect_remove() + { + CallExternal(GetOwner(), "manaring_toggle", 0); + } + +} + +} diff --git a/scripts/angelscript/items/item_ring_percept.as b/scripts/angelscript/items/item_ring_percept.as new file mode 100644 index 00000000..6af912cd --- /dev/null +++ b/scripts/angelscript/items/item_ring_percept.as @@ -0,0 +1,57 @@ +#pragma context server + +#include "items/base_effect_armor.as" +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRingPercept : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRingPercept() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + } + + void miscitem_spawn() + { + SetName("Bloodstone Ring"); + SetDescription("A sinister red stone is mounted in this ring"); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetValue(100); + SetWearable(1); + SetHUDSprite("trade", "ring"); + } + + void game_wear() + { + SetModel("none"); + } + + void game_removefromowner() + { + SetModel(MODEL_HANDS); + } + + void barmor_effect_activate() + { + CallExternal(GetOwner(), "bloodstone_toggle", 1); + } + + void barmor_effect_remove() + { + CallExternal(GetOwner(), "bloodstone_toggle", 0); + } + +} + +} diff --git a/scripts/angelscript/items/item_ring_ryza.as b/scripts/angelscript/items/item_ring_ryza.as new file mode 100644 index 00000000..ec14ad70 --- /dev/null +++ b/scripts/angelscript/items/item_ring_ryza.as @@ -0,0 +1,75 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRingRyza : CGameScript +{ + string ANIM_PREFIX; + int EFFECT_DELAY; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string NEXT_EFFECT; + + ItemRingRyza() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + EFFECT_DELAY = 25; + } + + void game_precache() + { + Precache("effects/manaring_portals"); + } + + void miscitem_spawn() + { + SetName("Binding Trinket"); + SetDescription("You feel a faint thrum of power from the artifact that once bound Ryza."); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetValue(420); + SetHUDSprite("trade", 226); + } + + void OnDeploy() override + { + if (GetGameTime() >= NEXT_EFFECT) + { + NEXT_EFFECT = (GetGameTime() + 1); + } + } + + void game_attack1() + { + if (GetGameTime() >= NEXT_EFFECT) + { + NEXT_EFFECT = (GetGameTime() + EFFECT_DELAY); + portal_effects(); + } + } + + void portal_effects() + { + string SPAWN_POINT = GetEntityOrigin(GetOwner()); + string MY_ANGLES = GetEntityProperty(GetOwner(), "viewangles"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 128, 0)); + SPAWN_POINT += "z"; + ClientEvent("new", "all", "effects/manaring_portals", SPAWN_POINT); + } + + void game_removefromowner() + { + SetModel(MODEL_HANDS); + } + +} + +} diff --git a/scripts/angelscript/items/item_ring_ryza_gem1.as b/scripts/angelscript/items/item_ring_ryza_gem1.as new file mode 100644 index 00000000..d059cf30 --- /dev/null +++ b/scripts/angelscript/items/item_ring_ryza_gem1.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRingRyzaGem1 : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRingRyzaGem1() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + } + + void miscitem_spawn() + { + SetName("Amplifying Gem"); + SetDescription("Its shine concentrates power within."); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetValue(420); + SetHUDSprite("trade", 227); + } + + void game_wear() + { + SetModel("none"); + } + + void game_removefromowner() + { + SetModel(MODEL_HANDS); + } + +} + +} diff --git a/scripts/angelscript/items/item_ring_ryza_gem2.as b/scripts/angelscript/items/item_ring_ryza_gem2.as new file mode 100644 index 00000000..305ede97 --- /dev/null +++ b/scripts/angelscript/items/item_ring_ryza_gem2.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRingRyzaGem2 : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRingRyzaGem2() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + } + + void miscitem_spawn() + { + SetName("Focusing Stone"); + SetDescription("Its radiance channels and focuses raw leyline energies."); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetValue(420); + SetHUDSprite("trade", 228); + } + + void game_wear() + { + SetModel("none"); + } + + void game_removefromowner() + { + SetModel(MODEL_HANDS); + } + +} + +} diff --git a/scripts/angelscript/items/item_ring_ryza_gem3.as b/scripts/angelscript/items/item_ring_ryza_gem3.as new file mode 100644 index 00000000..dfb5d3dc --- /dev/null +++ b/scripts/angelscript/items/item_ring_ryza_gem3.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRingRyzaGem3 : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRingRyzaGem3() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + } + + void miscitem_spawn() + { + SetName("Magnifying Jewel"); + SetDescription("Its magnificence intensifies power."); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetValue(420); + SetHUDSprite("trade", 229); + } + + void game_wear() + { + SetModel("none"); + } + + void game_removefromowner() + { + SetModel(MODEL_HANDS); + } + +} + +} diff --git a/scripts/angelscript/items/item_ring_thunder22.as b/scripts/angelscript/items/item_ring_thunder22.as new file mode 100644 index 00000000..9c7e71bc --- /dev/null +++ b/scripts/angelscript/items/item_ring_thunder22.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/base_elemental_resist.as" +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRingThunder22 : CGameScript +{ + string ANIM_PREFIX; + string ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string SP_ATTRIB; + + ItemRingThunder22() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 27; + ANIM_PREFIX = "ring"; + SP_ATTRIB = "skill.spellcasting.lightning.ratio"; + ELM_NAME = "ringl"; + ELM_TYPE = "lightning"; + } + + void miscitem_spawn() + { + SetName("Ring of Grounding"); + SetDescription("This ring provides the owner some protection against lightning magics"); + SetViewModel("none"); + SetWorldModel(MODEL_WORLD); + SetValue(1000); + SetWearable(1); + SetHUDSprite("trade", "ring"); + } + + void game_wear() + { + SetModel("none"); + } + + void game_removefromowner() + { + SetModel(MODEL_HANDS); + } + + void elm_get_resist() + { + ELM_AMT = GetEntityProperty(GetOwner(), "sp_attrib"); + ELM_AMT *= 200; + if (ELM_AMT > 75) + { + ELM_AMT = 75; + } + } + +} + +} diff --git a/scripts/angelscript/items/item_roland_letter.as b/scripts/angelscript/items/item_roland_letter.as new file mode 100644 index 00000000..211a9e9c --- /dev/null +++ b/scripts/angelscript/items/item_roland_letter.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRolandLetter : CGameScript +{ + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRolandLetter() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 45; + } + + void miscitem_spawn() + { + SetName("Letter from Roland"); + SetDescription("Seems to describe a complex reinforcement procedure for your Golden Axe."); + SetValue(50); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_runicsymbol.as b/scripts/angelscript/items/item_runicsymbol.as new file mode 100644 index 00000000..80736149 --- /dev/null +++ b/scripts/angelscript/items/item_runicsymbol.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRunicsymbol : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRunicsymbol() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Expended Urdual Title Ring"); + SetDescription("A dull ring with Urdualian Runes that read XYPHEMOX"); + SetWeight(7); + SetSize(7); + SetValue(0); + SetHUDSprite("trade", "ring"); + } + +} + +} diff --git a/scripts/angelscript/items/item_runicsymbol2.as b/scripts/angelscript/items/item_runicsymbol2.as new file mode 100644 index 00000000..0b9fd5c9 --- /dev/null +++ b/scripts/angelscript/items/item_runicsymbol2.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemRunicsymbol2 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemRunicsymbol2() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Glowing Urdual Title Ring"); + SetDescription("This faintly glowing ring has runes that read ZAHLON ERSTE"); + SetWeight(7); + SetSize(7); + SetValue(0); + SetHUDSprite("trade", "ring"); + } + +} + +} diff --git a/scripts/angelscript/items/item_s1.as b/scripts/angelscript/items/item_s1.as new file mode 100644 index 00000000..b611b078 --- /dev/null +++ b/scripts/angelscript/items/item_s1.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemS1 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemS1() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Symbol of Felewyn 1 of 5"); + SetDescription("First of the five symbols of Felewyn"); + } + +} + +} diff --git a/scripts/angelscript/items/item_s2.as b/scripts/angelscript/items/item_s2.as new file mode 100644 index 00000000..08cf8b4b --- /dev/null +++ b/scripts/angelscript/items/item_s2.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemS2 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemS2() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Symbol of Felewyn 2 of 5"); + SetDescription("Second of the five symbols of Felewyn"); + } + +} + +} diff --git a/scripts/angelscript/items/item_s3.as b/scripts/angelscript/items/item_s3.as new file mode 100644 index 00000000..38bb9170 --- /dev/null +++ b/scripts/angelscript/items/item_s3.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemS3 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemS3() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Symbol of Felewyn 3 of 5"); + SetDescription("Third of the five symbols of Felewyn"); + } + +} + +} diff --git a/scripts/angelscript/items/item_s4.as b/scripts/angelscript/items/item_s4.as new file mode 100644 index 00000000..838627e8 --- /dev/null +++ b/scripts/angelscript/items/item_s4.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemS4 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemS4() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Symbol of Felewyn 4 of 5"); + SetDescription("Fourth of the five symbols of Felewyn"); + } + +} + +} diff --git a/scripts/angelscript/items/item_s5.as b/scripts/angelscript/items/item_s5.as new file mode 100644 index 00000000..915f3041 --- /dev/null +++ b/scripts/angelscript/items/item_s5.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemS5 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemS5() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Symbol of Felewyn 5 of 5"); + SetDescription("Fifth of the five symbols of Felewyn"); + } + +} + +} diff --git a/scripts/angelscript/items/item_sewernote.as b/scripts/angelscript/items/item_sewernote.as new file mode 100644 index 00000000..05151db5 --- /dev/null +++ b/scripts/angelscript/items/item_sewernote.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemSewernote : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemSewernote() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Note"); + SetDescription("A molded note with strange writings on it"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_sorcv.as b/scripts/angelscript/items/item_sorcv.as new file mode 100644 index 00000000..4f5ed503 --- /dev/null +++ b/scripts/angelscript/items/item_sorcv.as @@ -0,0 +1,69 @@ +#pragma context server + +#include "items/base_medal.as" + +namespace MS +{ + +class ItemSorcv : CGameScript +{ + string MEDAL_FX_SCRIPT; + + ItemSorcv() + { + MEDAL_FX_SCRIPT = "items/item_sorcv_cl"; + Precache("medals.spr"); + } + + void medal_spawn() + { + SetName("Shadahar Medal"); + SetDescription("Achievement Medal for Shadahar Village"); + } + + void medal_activate() + { + string OWNER_MEDALS = GetPlayerQuestData(GetOwner(), "a"); + string OWNER_ACHIEVE_LEVEL = GetToken(OWNER_MEDALS, 0, ";"); + OWNER_ACHIEVE_LEVEL -= 1; + if (OWNER_ACHIEVE_LEVEL == 0) + { + string OUT_MSG = "Has Achieved Tin Status in the Shadahar Village Challenge"; + } + if (OWNER_ACHIEVE_LEVEL == 1) + { + string OUT_MSG = "Has Achieved Bronze Status in the Shadahar Village Challenge"; + } + if (OWNER_ACHIEVE_LEVEL == 2) + { + string OUT_MSG = "Has Achieved Silver Status in the Shadahar Village Challenge"; + } + if (OWNER_ACHIEVE_LEVEL == 3) + { + string OUT_MSG = "Has Achieved Gold Status in the Shadahar Village Challenge"; + } + if (OWNER_ACHIEVE_LEVEL == 4) + { + string OUT_MSG = "Has Achieved Platinum Status in the Shadahar Village Challenge"; + } + if (OWNER_ACHIEVE_LEVEL == 5) + { + string OUT_MSG = "Has Achieved Diamond Status in the Shadahar Village Challenge"; + } + if (OWNER_ACHIEVE_LEVEL == 6) + { + string OUT_MSG = "Has Achieved LORELDIAN Status in the Shadahar Village Challenge"; + } + SendInfoMsg("all", GetEntityName(GetOwner()) + OUT_MSG); + string SPAWN_POINT = GetEntityOrigin(GetOwner()); + string MY_ANGLES = GetEntityAngles(GetOwner()); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 128, 0)); + SPAWN_POINT = "z"; + SPAWN_POINT += "z"; + ClientEvent("new", "all", MEDAL_FX_SCRIPT, SPAWN_POINT, OWNER_ACHIEVE_LEVEL, MY_YAW, 20.0); + } + +} + +} diff --git a/scripts/angelscript/items/item_sorcv_cl.as b/scripts/angelscript/items/item_sorcv_cl.as new file mode 100644 index 00000000..64050ad9 --- /dev/null +++ b/scripts/angelscript/items/item_sorcv_cl.as @@ -0,0 +1,83 @@ +#pragma context server + +namespace MS +{ + +class ItemSorcvCl : CGameScript +{ + string FX_DURATION; + string FX_FRAME; + string FX_POS; + string FX_YAW; + + ItemSorcvCl() + { + } + + void client_activate() + { + FX_POS = param1; + FX_FRAME = param2; + FX_YAW = param3; + FX_DURATION = param4; + SetCallback("render", "enable"); + EmitSound3D("ambience/goal_1.wav", 10, FX_POS); + ClientEffect("tempent", "sprite", "medals.spr", FX_POS, "setup_sprite", "update_sprite"); + ClientEffect("tempent", "sprite", "medals.spr", FX_POS, "setup_flip_sprite", "update_flip_sprite"); + string L_DUR = FX_DURATION; + L_DUR += 1.0; + L_DUR("remove_me"); + } + + void update_sprite() + { + ClientEffect("tempent", "set_current_prop", "frame", FX_FRAME); + } + + void update_flip_sprite() + { + ClientEffect("tempent", "set_current_prop", "frame", FX_FRAME); + } + + void remove_me() + { + RemoveScript(); + } + + void setup_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "framerate", 1); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "frame", FX_FRAME); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, FX_YAW, 0)); + } + + void setup_flip_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "framerate", 1); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "frame", FX_FRAME); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + string NEG_YAW = FX_YAW; + NEG_YAW += 180; + if (NEG_YAW > 359.99) + { + NEG_YAW -= 359.99; + } + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, NEG_YAW, 0)); + } + +} + +} diff --git a/scripts/angelscript/items/item_storageroomkey.as b/scripts/angelscript/items/item_storageroomkey.as new file mode 100644 index 00000000..c27d0fd4 --- /dev/null +++ b/scripts/angelscript/items/item_storageroomkey.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemStorageroomkey : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + ItemStorageroomkey() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Storage Room Key"); + SetDescription("The key to a storage room"); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/item_summon_crystal.as b/scripts/angelscript/items/item_summon_crystal.as new file mode 100644 index 00000000..998e538f --- /dev/null +++ b/scripts/angelscript/items/item_summon_crystal.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemSummonCrystal : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemSummonCrystal() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Summoning Crystal"); + SetDescription("This crystal must be placed in the proper vessel"); + SetValue(0); + } + +} + +} diff --git a/scripts/angelscript/items/item_telfh1.as b/scripts/angelscript/items/item_telfh1.as new file mode 100644 index 00000000..01267931 --- /dev/null +++ b/scripts/angelscript/items/item_telfh1.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemTelfh1 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemTelfh1() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Azura's Head"); + SetDescription("The head of Frostmistress Azura"); + SetValue(0); + } + +} + +} diff --git a/scripts/angelscript/items/item_telfh2.as b/scripts/angelscript/items/item_telfh2.as new file mode 100644 index 00000000..5d25d05a --- /dev/null +++ b/scripts/angelscript/items/item_telfh2.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemTelfh2 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemTelfh2() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Ulectrath's Head"); + SetDescription("The severed head of the elf Ulectrath"); + SetValue(0); + } + +} + +} diff --git a/scripts/angelscript/items/item_telfh3.as b/scripts/angelscript/items/item_telfh3.as new file mode 100644 index 00000000..1cddae13 --- /dev/null +++ b/scripts/angelscript/items/item_telfh3.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemTelfh3 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemTelfh3() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Ivicta's Head"); + SetDescription("The head of Ivicta the Hammer"); + SetValue(0); + } + +} + +} diff --git a/scripts/angelscript/items/item_telfh4.as b/scripts/angelscript/items/item_telfh4.as new file mode 100644 index 00000000..b8054817 --- /dev/null +++ b/scripts/angelscript/items/item_telfh4.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemTelfh4 : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemTelfh4() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Ihotohr's Head"); + SetDescription("The putrefied head of the necromancer Ihotohr- its eyes still dart about."); + SetValue(0); + } + +} + +} diff --git a/scripts/angelscript/items/item_thiefmap.as b/scripts/angelscript/items/item_thiefmap.as new file mode 100644 index 00000000..f71313ce --- /dev/null +++ b/scripts/angelscript/items/item_thiefmap.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemThiefmap : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemThiefmap() + { + MODEL_WORLD = "garbagegibs.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Thief s Map"); + SetDescription("A map over the thieves whereabouts"); + SetHUDSprite("trade", "letter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_belmont.as b/scripts/angelscript/items/item_tk_armor_belmont.as new file mode 100644 index 00000000..dfccdfe9 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_belmont.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorBelmont : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for AoB"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_dark.as b/scripts/angelscript/items/item_tk_armor_dark.as new file mode 100644 index 00000000..414eb351 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_dark.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorDark : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Dark Armor"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_faura.as b/scripts/angelscript/items/item_tk_armor_faura.as new file mode 100644 index 00000000..866cf333 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_faura.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorFaura : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Fire Aura"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_fireliz.as b/scripts/angelscript/items/item_tk_armor_fireliz.as new file mode 100644 index 00000000..22de8dd4 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_fireliz.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorFireliz : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Fire Skin"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_golden.as b/scripts/angelscript/items/item_tk_armor_golden.as new file mode 100644 index 00000000..634a3d60 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_golden.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorGolden : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Golden Armor"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_helm_bronze.as b/scripts/angelscript/items/item_tk_armor_helm_bronze.as new file mode 100644 index 00000000..be361bc7 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_helm_bronze.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorHelmBronze : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Helm Bronze"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_helm_dark.as b/scripts/angelscript/items/item_tk_armor_helm_dark.as new file mode 100644 index 00000000..20ba60d4 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_helm_dark.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorHelmDark : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Dark Helm"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_helm_gaz1.as b/scripts/angelscript/items/item_tk_armor_helm_gaz1.as new file mode 100644 index 00000000..3d87ea73 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_helm_gaz1.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorHelmGaz1 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Fire Helm"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_helm_gaz2.as b/scripts/angelscript/items/item_tk_armor_helm_gaz2.as new file mode 100644 index 00000000..59b31127 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_helm_gaz2.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorHelmGaz2 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Ice Helm"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_helm_golden.as b/scripts/angelscript/items/item_tk_armor_helm_golden.as new file mode 100644 index 00000000..98fb5ebf --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_helm_golden.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorHelmGolden : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Golden Helm"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_helm_gray.as b/scripts/angelscript/items/item_tk_armor_helm_gray.as new file mode 100644 index 00000000..3ece4213 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_helm_gray.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorHelmGray : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Helm , Stability"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_helm_knight.as b/scripts/angelscript/items/item_tk_armor_helm_knight.as new file mode 100644 index 00000000..7dfe2647 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_helm_knight.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorHelmKnight : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Knight s Helm"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_helm_mongol.as b/scripts/angelscript/items/item_tk_armor_helm_mongol.as new file mode 100644 index 00000000..f62e7e8b --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_helm_mongol.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorHelmMongol : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Mongol Helm"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_helm_plate.as b/scripts/angelscript/items/item_tk_armor_helm_plate.as new file mode 100644 index 00000000..83828f8f --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_helm_plate.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorHelmPlate : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Plate Helm"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_helm_undead.as b/scripts/angelscript/items/item_tk_armor_helm_undead.as new file mode 100644 index 00000000..e0bce2b5 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_helm_undead.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorHelmUndead : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Helm of Dead"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_knight.as b/scripts/angelscript/items/item_tk_armor_knight.as new file mode 100644 index 00000000..cae91bd9 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_knight.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorKnight : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Knight s Armor"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_leather.as b/scripts/angelscript/items/item_tk_armor_leather.as new file mode 100644 index 00000000..e57c154a --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_leather.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorLeather : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Leather"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_leather_gaz1.as b/scripts/angelscript/items/item_tk_armor_leather_gaz1.as new file mode 100644 index 00000000..12f019df --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_leather_gaz1.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorLeatherGaz1 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Gladiator Armr"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_leather_studded.as b/scripts/angelscript/items/item_tk_armor_leather_studded.as new file mode 100644 index 00000000..c62a3621 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_leather_studded.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorLeatherStudded : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Studded Leather"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_leather_torn.as b/scripts/angelscript/items/item_tk_armor_leather_torn.as new file mode 100644 index 00000000..453b89b7 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_leather_torn.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorLeatherTorn : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Torn Leather"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_mongol.as b/scripts/angelscript/items/item_tk_armor_mongol.as new file mode 100644 index 00000000..d9eb9abe --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_mongol.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorMongol : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Mongol Armor"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_paura.as b/scripts/angelscript/items/item_tk_armor_paura.as new file mode 100644 index 00000000..db59fc15 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_paura.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorPaura : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Acid Plate"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_pheonix55.as b/scripts/angelscript/items/item_tk_armor_pheonix55.as new file mode 100644 index 00000000..c5a915ca --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_pheonix55.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorPheonix55 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Phoenix Armor"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_plate.as b/scripts/angelscript/items/item_tk_armor_plate.as new file mode 100644 index 00000000..070c8eba --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_plate.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorPlate : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Plate Armor"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_salamander.as b/scripts/angelscript/items/item_tk_armor_salamander.as new file mode 100644 index 00000000..3c928ae7 --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_salamander.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorSalamander : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Cobra Skin"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_armor_venom.as b/scripts/angelscript/items/item_tk_armor_venom.as new file mode 100644 index 00000000..180f7a9f --- /dev/null +++ b/scripts/angelscript/items/item_tk_armor_venom.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkArmorVenom : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Venom Plate"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_2haxe.as b/scripts/angelscript/items/item_tk_axes_2haxe.as new file mode 100644 index 00000000..3352405a --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_2haxe.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxes2haxe : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for 2h Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_axe.as b/scripts/angelscript/items/item_tk_axes_axe.as new file mode 100644 index 00000000..cffcf7a9 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_axe.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesAxe : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_battleaxe.as b/scripts/angelscript/items/item_tk_axes_battleaxe.as new file mode 100644 index 00000000..65f896b6 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_battleaxe.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesBattleaxe : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Battleaxe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_doubleaxe.as b/scripts/angelscript/items/item_tk_axes_doubleaxe.as new file mode 100644 index 00000000..87cb958a --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_doubleaxe.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesDoubleaxe : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Dwarven Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_dragon.as b/scripts/angelscript/items/item_tk_axes_dragon.as new file mode 100644 index 00000000..99a48355 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_dragon.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesDragon : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Dragon Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_golden.as b/scripts/angelscript/items/item_tk_axes_golden.as new file mode 100644 index 00000000..b17f5781 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_golden.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesGolden : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Golden Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_golden_ref.as b/scripts/angelscript/items/item_tk_axes_golden_ref.as new file mode 100644 index 00000000..6ce0c7b2 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_golden_ref.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesGoldenRef : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for|Unbreakable Gaxe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_greataxe.as b/scripts/angelscript/items/item_tk_axes_greataxe.as new file mode 100644 index 00000000..bab11089 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_greataxe.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesGreataxe : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Great Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_gthunder11.as b/scripts/angelscript/items/item_tk_axes_gthunder11.as new file mode 100644 index 00000000..fe33b005 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_gthunder11.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesGthunder11 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for G Thunderaxe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_poison1.as b/scripts/angelscript/items/item_tk_axes_poison1.as new file mode 100644 index 00000000..e2b99973 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_poison1.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesPoison1 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Poison Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_rsmallaxe.as b/scripts/angelscript/items/item_tk_axes_rsmallaxe.as new file mode 100644 index 00000000..4f87385a --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_rsmallaxe.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesRsmallaxe : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Rusty Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_runeaxe.as b/scripts/angelscript/items/item_tk_axes_runeaxe.as new file mode 100644 index 00000000..35d64c4a --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_runeaxe.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesRuneaxe : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for a Rune Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_scythe.as b/scripts/angelscript/items/item_tk_axes_scythe.as new file mode 100644 index 00000000..1f669b60 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_scythe.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesScythe : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Scythe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_smallaxe.as b/scripts/angelscript/items/item_tk_axes_smallaxe.as new file mode 100644 index 00000000..54be8545 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_smallaxe.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesSmallaxe : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Small Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_td.as b/scripts/angelscript/items/item_tk_axes_td.as new file mode 100644 index 00000000..764d9748 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_td.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesTd : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Dark Tomahawk"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_tf.as b/scripts/angelscript/items/item_tk_axes_tf.as new file mode 100644 index 00000000..671ccf60 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_tf.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesTf : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Fire Tomahawk"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_thunder11.as b/scripts/angelscript/items/item_tk_axes_thunder11.as new file mode 100644 index 00000000..07fc1445 --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_thunder11.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesThunder11 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Thunderaxe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_ti.as b/scripts/angelscript/items/item_tk_axes_ti.as new file mode 100644 index 00000000..8177f56e --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_ti.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesTi : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Ice Tomahawk"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_tl.as b/scripts/angelscript/items/item_tk_axes_tl.as new file mode 100644 index 00000000..e8a2e42c --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_tl.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesTl : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Zappy Tomahawk"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_tp.as b/scripts/angelscript/items/item_tk_axes_tp.as new file mode 100644 index 00000000..6b044dae --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_tp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesTp : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Poisoned Tomahawk"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_axes_vaxe.as b/scripts/angelscript/items/item_tk_axes_vaxe.as new file mode 100644 index 00000000..0937e3ef --- /dev/null +++ b/scripts/angelscript/items/item_tk_axes_vaxe.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkAxesVaxe : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Blood Axe"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_calrianmace.as b/scripts/angelscript/items/item_tk_blunt_calrianmace.as new file mode 100644 index 00000000..bb794ad9 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_calrianmace.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntCalrianmace : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Calrian Mace"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_club.as b/scripts/angelscript/items/item_tk_blunt_club.as new file mode 100644 index 00000000..c514a1eb --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_club.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntClub : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Club"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_darkmaul.as b/scripts/angelscript/items/item_tk_blunt_darkmaul.as new file mode 100644 index 00000000..3a7ae788 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_darkmaul.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntDarkmaul : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Dark Maul"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_gauntlets.as b/scripts/angelscript/items/item_tk_blunt_gauntlets.as new file mode 100644 index 00000000..335512ca --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_gauntlets.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntGauntlets : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Gauntlets"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_gauntlets_demon.as b/scripts/angelscript/items/item_tk_blunt_gauntlets_demon.as new file mode 100644 index 00000000..214df8f5 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_gauntlets_demon.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntGauntletsDemon : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Demon Claws"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_gauntlets_fire.as b/scripts/angelscript/items/item_tk_blunt_gauntlets_fire.as new file mode 100644 index 00000000..d13fb613 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_gauntlets_fire.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntGauntletsFire : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Fire Gauntlets"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_gauntlets_leather.as b/scripts/angelscript/items/item_tk_blunt_gauntlets_leather.as new file mode 100644 index 00000000..57e38c86 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_gauntlets_leather.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntGauntletsLeather : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Leather Gauntlets"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_gauntlets_serpant.as b/scripts/angelscript/items/item_tk_blunt_gauntlets_serpant.as new file mode 100644 index 00000000..8ecc907e --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_gauntlets_serpant.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntGauntletsSerpant : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Serpant Gauntlets"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_granitemace.as b/scripts/angelscript/items/item_tk_blunt_granitemace.as new file mode 100644 index 00000000..90b03155 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_granitemace.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntGranitemace : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Granite Mace"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_granitemaul.as b/scripts/angelscript/items/item_tk_blunt_granitemaul.as new file mode 100644 index 00000000..0c55f718 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_granitemaul.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntGranitemaul : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Granite Maul"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_greatmaul.as b/scripts/angelscript/items/item_tk_blunt_greatmaul.as new file mode 100644 index 00000000..f6643df8 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_greatmaul.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntGreatmaul : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Great Maul"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_hammer1.as b/scripts/angelscript/items/item_tk_blunt_hammer1.as new file mode 100644 index 00000000..262a46c7 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_hammer1.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntHammer1 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Worn Hammer"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_hammer2.as b/scripts/angelscript/items/item_tk_blunt_hammer2.as new file mode 100644 index 00000000..d8cc3209 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_hammer2.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntHammer2 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Hvy Hammer"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_hammer3.as b/scripts/angelscript/items/item_tk_blunt_hammer3.as new file mode 100644 index 00000000..c7c94d90 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_hammer3.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntHammer3 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Hvy War Hammer"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_hammer_dorfgan.as b/scripts/angelscript/items/item_tk_blunt_hammer_dorfgan.as new file mode 100644 index 00000000..bc72e236 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_hammer_dorfgan.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntHammerDorfgan : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Odd Mace"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_lrod11.as b/scripts/angelscript/items/item_tk_blunt_lrod11.as new file mode 100644 index 00000000..4179261c --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_lrod11.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntLrod11 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Lightning Rod"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_mace.as b/scripts/angelscript/items/item_tk_blunt_mace.as new file mode 100644 index 00000000..970a82b5 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_mace.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntMace : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Mace"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_maul.as b/scripts/angelscript/items/item_tk_blunt_maul.as new file mode 100644 index 00000000..a5170903 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_maul.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntMaul : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Maul"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_mithral.as b/scripts/angelscript/items/item_tk_blunt_mithral.as new file mode 100644 index 00000000..ae98ec64 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_mithral.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntMithral : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Bludgeon Hmr"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_northmaul972.as b/scripts/angelscript/items/item_tk_blunt_northmaul972.as new file mode 100644 index 00000000..0d35da66 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_northmaul972.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntNorthmaul972 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for North Maul"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_ravenmace.as b/scripts/angelscript/items/item_tk_blunt_ravenmace.as new file mode 100644 index 00000000..e694a1aa --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_ravenmace.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntRavenmace : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Raven Lance"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_rudolfsmace.as b/scripts/angelscript/items/item_tk_blunt_rudolfsmace.as new file mode 100644 index 00000000..b03ee3bc --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_rudolfsmace.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntRudolfsmace : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Odd Mace"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_rustyhammer2.as b/scripts/angelscript/items/item_tk_blunt_rustyhammer2.as new file mode 100644 index 00000000..0c0c9030 --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_rustyhammer2.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntRustyhammer2 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Rusty Hammer"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_snake_staff.as b/scripts/angelscript/items/item_tk_blunt_snake_staff.as new file mode 100644 index 00000000..ffcf176d --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_snake_staff.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntSnakeStaff : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Snake Staff"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_blunt_warhammer.as b/scripts/angelscript/items/item_tk_blunt_warhammer.as new file mode 100644 index 00000000..bc90956b --- /dev/null +++ b/scripts/angelscript/items/item_tk_blunt_warhammer.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBluntWarhammer : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Warhammer"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_crossbow_heavy33.as b/scripts/angelscript/items/item_tk_bows_crossbow_heavy33.as new file mode 100644 index 00000000..6a4ea374 --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_crossbow_heavy33.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsCrossbowHeavy33 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Heavy XBow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_crossbow_light.as b/scripts/angelscript/items/item_tk_bows_crossbow_light.as new file mode 100644 index 00000000..38608046 --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_crossbow_light.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsCrossbowLight : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Light Xbow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_firebird.as b/scripts/angelscript/items/item_tk_bows_firebird.as new file mode 100644 index 00000000..0745bc2d --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_firebird.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsFirebird : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Phoenix Bow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_frost.as b/scripts/angelscript/items/item_tk_bows_frost.as new file mode 100644 index 00000000..905ad281 --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_frost.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsFrost : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Frost Bow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_longbow.as b/scripts/angelscript/items/item_tk_bows_longbow.as new file mode 100644 index 00000000..1f8f36f4 --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_longbow.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsLongbow : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Longbow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_orcbow.as b/scripts/angelscript/items/item_tk_bows_orcbow.as new file mode 100644 index 00000000..226afa35 --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_orcbow.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsOrcbow : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Orcbow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_orion1.as b/scripts/angelscript/items/item_tk_bows_orion1.as new file mode 100644 index 00000000..6efe1cbd --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_orion1.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsOrion1 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Orion Bow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_shortbow.as b/scripts/angelscript/items/item_tk_bows_shortbow.as new file mode 100644 index 00000000..87ceab8f --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_shortbow.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsShortbow : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Shortbow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_swiftbow.as b/scripts/angelscript/items/item_tk_bows_swiftbow.as new file mode 100644 index 00000000..877d1dde --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_swiftbow.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsSwiftbow : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Elven Bow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_thornbow.as b/scripts/angelscript/items/item_tk_bows_thornbow.as new file mode 100644 index 00000000..2be6ba02 --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_thornbow.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsThornbow : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Thornbow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_bows_treebow.as b/scripts/angelscript/items/item_tk_bows_treebow.as new file mode 100644 index 00000000..af4992e7 --- /dev/null +++ b/scripts/angelscript/items/item_tk_bows_treebow.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkBowsTreebow : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Tree Bow"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_gauntlets_normal.as b/scripts/angelscript/items/item_tk_gauntlets_normal.as new file mode 100644 index 00000000..78eb9afc --- /dev/null +++ b/scripts/angelscript/items/item_tk_gauntlets_normal.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkGauntletsNormal : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Gauntlets"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_shields_buckler.as b/scripts/angelscript/items/item_tk_shields_buckler.as new file mode 100644 index 00000000..2f171d2a --- /dev/null +++ b/scripts/angelscript/items/item_tk_shields_buckler.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkShieldsBuckler : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Training Shield"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_shields_ironshield.as b/scripts/angelscript/items/item_tk_shields_ironshield.as new file mode 100644 index 00000000..e54872de --- /dev/null +++ b/scripts/angelscript/items/item_tk_shields_ironshield.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkShieldsIronshield : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Iron Shield"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_shields_lironshield.as b/scripts/angelscript/items/item_tk_shields_lironshield.as new file mode 100644 index 00000000..35bc8c0c --- /dev/null +++ b/scripts/angelscript/items/item_tk_shields_lironshield.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkShieldsLironshield : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Lrg Iron Shield"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_shields_rune.as b/scripts/angelscript/items/item_tk_shields_rune.as new file mode 100644 index 00000000..51d4bf81 --- /dev/null +++ b/scripts/angelscript/items/item_tk_shields_rune.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkShieldsRune : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Ice Rune Shield"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_shields_urdual.as b/scripts/angelscript/items/item_tk_shields_urdual.as new file mode 100644 index 00000000..e1a199a3 --- /dev/null +++ b/scripts/angelscript/items/item_tk_shields_urdual.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkShieldsUrdual : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Urdual Shield"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_shields_wooden.as b/scripts/angelscript/items/item_tk_shields_wooden.as new file mode 100644 index 00000000..508bc4b3 --- /dev/null +++ b/scripts/angelscript/items/item_tk_shields_wooden.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkShieldsWooden : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Darkwood Shield"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_bone_blade.as b/scripts/angelscript/items/item_tk_smallarms_bone_blade.as new file mode 100644 index 00000000..026e6f2c --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_bone_blade.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsBoneBlade : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Bone Blade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_craftedknife.as b/scripts/angelscript/items/item_tk_smallarms_craftedknife.as new file mode 100644 index 00000000..8c56eacd --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_craftedknife.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsCraftedknife : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for FCK0"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_craftedknife2.as b/scripts/angelscript/items/item_tk_smallarms_craftedknife2.as new file mode 100644 index 00000000..34d13dd9 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_craftedknife2.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsCraftedknife2 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for FCK2"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_craftedknife3.as b/scripts/angelscript/items/item_tk_smallarms_craftedknife3.as new file mode 100644 index 00000000..67e48dfc --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_craftedknife3.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsCraftedknife3 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for FCK3"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_craftedknife4.as b/scripts/angelscript/items/item_tk_smallarms_craftedknife4.as new file mode 100644 index 00000000..246cbbfa --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_craftedknife4.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsCraftedknife4 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for FCK4"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_dagger.as b/scripts/angelscript/items/item_tk_smallarms_dagger.as new file mode 100644 index 00000000..7d7d55f7 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_dagger.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsDagger : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Dagger"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_dirk.as b/scripts/angelscript/items/item_tk_smallarms_dirk.as new file mode 100644 index 00000000..9e8da437 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_dirk.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsDirk : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Dirk"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_fangstooth.as b/scripts/angelscript/items/item_tk_smallarms_fangstooth.as new file mode 100644 index 00000000..ab711fd6 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_fangstooth.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsFangstooth : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Fangstooth"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_flamelick.as b/scripts/angelscript/items/item_tk_smallarms_flamelick.as new file mode 100644 index 00000000..d8855981 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_flamelick.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsFlamelick : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Flamelick"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_frozentongueonflagpole.as b/scripts/angelscript/items/item_tk_smallarms_frozentongueonflagpole.as new file mode 100644 index 00000000..94459877 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_frozentongueonflagpole.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsFrozentongueonflagpole : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Litch Tongue"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_huggerdagger.as b/scripts/angelscript/items/item_tk_smallarms_huggerdagger.as new file mode 100644 index 00000000..fc6a3958 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_huggerdagger.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsHuggerdagger : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Hugger1"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_huggerdagger2.as b/scripts/angelscript/items/item_tk_smallarms_huggerdagger2.as new file mode 100644 index 00000000..af34173a --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_huggerdagger2.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsHuggerdagger2 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Hugger2"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_huggerdagger3.as b/scripts/angelscript/items/item_tk_smallarms_huggerdagger3.as new file mode 100644 index 00000000..9317a4c0 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_huggerdagger3.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsHuggerdagger3 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Hugger3"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_huggerdagger4.as b/scripts/angelscript/items/item_tk_smallarms_huggerdagger4.as new file mode 100644 index 00000000..3d1b5fc5 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_huggerdagger4.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsHuggerdagger4 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Hugger4"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_k_fire.as b/scripts/angelscript/items/item_tk_smallarms_k_fire.as new file mode 100644 index 00000000..b8e104ff --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_k_fire.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsKFire : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for K. Fire Blade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_knife.as b/scripts/angelscript/items/item_tk_smallarms_knife.as new file mode 100644 index 00000000..e7819949 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_knife.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsKnife : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Knife"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_nh.as b/scripts/angelscript/items/item_tk_smallarms_nh.as new file mode 100644 index 00000000..3b1d617d --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_nh.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsNh : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Neck Hunter"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_rknife.as b/scripts/angelscript/items/item_tk_smallarms_rknife.as new file mode 100644 index 00000000..ec994099 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_rknife.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsRknife : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Rsty Knife"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_smallarms_royaldagger.as b/scripts/angelscript/items/item_tk_smallarms_royaldagger.as new file mode 100644 index 00000000..8a119aa7 --- /dev/null +++ b/scripts/angelscript/items/item_tk_smallarms_royaldagger.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSmallarmsRoyaldagger : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Royal Dagger"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_bastardsword.as b/scripts/angelscript/items/item_tk_swords_bastardsword.as new file mode 100644 index 00000000..1d90502c --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_bastardsword.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsBastardsword : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Bastard Sword"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_blood_drinker.as b/scripts/angelscript/items/item_tk_swords_blood_drinker.as new file mode 100644 index 00000000..4d15a8ff --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_blood_drinker.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsBloodDrinker : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Blood Drinker"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_frostblade55.as b/scripts/angelscript/items/item_tk_swords_frostblade55.as new file mode 100644 index 00000000..d52ebedc --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_frostblade55.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsFrostblade55 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Hoarfrost"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_giceblade.as b/scripts/angelscript/items/item_tk_swords_giceblade.as new file mode 100644 index 00000000..13e9a0a6 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_giceblade.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsGiceblade : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for GIceBlade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_iceblade.as b/scripts/angelscript/items/item_tk_swords_iceblade.as new file mode 100644 index 00000000..62ce3918 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_iceblade.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsIceblade : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Ice Blade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_katana.as b/scripts/angelscript/items/item_tk_swords_katana.as new file mode 100644 index 00000000..47110adb --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_katana.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsKatana : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for ESS"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_katana2.as b/scripts/angelscript/items/item_tk_swords_katana2.as new file mode 100644 index 00000000..5143c048 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_katana2.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsKatana2 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Sylvian Blade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_katana3.as b/scripts/angelscript/items/item_tk_swords_katana3.as new file mode 100644 index 00000000..5d0b2880 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_katana3.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsKatana3 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for High Elf Blade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_katana4.as b/scripts/angelscript/items/item_tk_swords_katana4.as new file mode 100644 index 00000000..d9909c13 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_katana4.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsKatana4 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Torkalath Bld"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_liceblade.as b/scripts/angelscript/items/item_tk_swords_liceblade.as new file mode 100644 index 00000000..e25e742d --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_liceblade.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsLiceblade : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Lesser Iceblade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_longsword.as b/scripts/angelscript/items/item_tk_swords_longsword.as new file mode 100644 index 00000000..ca07e29f --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_longsword.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsLongsword : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Longswrd"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_lostblade.as b/scripts/angelscript/items/item_tk_swords_lostblade.as new file mode 100644 index 00000000..f8f2629b --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_lostblade.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsLostblade : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Lost Blade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_m2sword.as b/scripts/angelscript/items/item_tk_swords_m2sword.as new file mode 100644 index 00000000..6c8cb23d --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_m2sword.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsM2sword : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for 2h Mithral Swrd"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_msword.as b/scripts/angelscript/items/item_tk_swords_msword.as new file mode 100644 index 00000000..b4c7f3d5 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_msword.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsMsword : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Mithral Sword"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_nkatana.as b/scripts/angelscript/items/item_tk_swords_nkatana.as new file mode 100644 index 00000000..34f01623 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_nkatana.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsNkatana : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Katana"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_novablade12.as b/scripts/angelscript/items/item_tk_swords_novablade12.as new file mode 100644 index 00000000..3f5309fd --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_novablade12.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsNovablade12 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Novablade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_poison1.as b/scripts/angelscript/items/item_tk_swords_poison1.as new file mode 100644 index 00000000..2748091c --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_poison1.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsPoison1 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Env. Blade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_rsword.as b/scripts/angelscript/items/item_tk_swords_rsword.as new file mode 100644 index 00000000..a94b422c --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_rsword.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsRsword : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Rsty Sword"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_rune_green.as b/scripts/angelscript/items/item_tk_swords_rune_green.as new file mode 100644 index 00000000..c35a69d5 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_rune_green.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsRuneGreen : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Green Runeblade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_scimitar.as b/scripts/angelscript/items/item_tk_swords_scimitar.as new file mode 100644 index 00000000..97e72ae8 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_scimitar.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsScimitar : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Scimitar"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_shortsword.as b/scripts/angelscript/items/item_tk_swords_shortsword.as new file mode 100644 index 00000000..d85c3693 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_shortsword.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsShortsword : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Shortsword"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_skullblade.as b/scripts/angelscript/items/item_tk_swords_skullblade.as new file mode 100644 index 00000000..cbc49ebc --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_skullblade.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsSkullblade : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Skullblade1"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_skullblade2.as b/scripts/angelscript/items/item_tk_swords_skullblade2.as new file mode 100644 index 00000000..4a0807f7 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_skullblade2.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsSkullblade2 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Dull SB"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_skullblade3.as b/scripts/angelscript/items/item_tk_swords_skullblade3.as new file mode 100644 index 00000000..665dfa47 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_skullblade3.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsSkullblade3 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Sharp SB"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_skullblade4.as b/scripts/angelscript/items/item_tk_swords_skullblade4.as new file mode 100644 index 00000000..9fb0b450 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_skullblade4.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsSkullblade4 : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Perfect SB"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_spiderblade.as b/scripts/angelscript/items/item_tk_swords_spiderblade.as new file mode 100644 index 00000000..3448a7e6 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_spiderblade.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsSpiderblade : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Spiderblade"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_testskin.as b/scripts/angelscript/items/item_tk_swords_testskin.as new file mode 100644 index 00000000..34b5636c --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_testskin.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsTestskin : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for TestSkin"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_testsub.as b/scripts/angelscript/items/item_tk_swords_testsub.as new file mode 100644 index 00000000..69adffcb --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_testsub.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsTestsub : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for TestSub"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_volcano.as b/scripts/angelscript/items/item_tk_swords_volcano.as new file mode 100644 index 00000000..e0972742 --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_volcano.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsVolcano : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Dark Sword"); + } + +} + +} diff --git a/scripts/angelscript/items/item_tk_swords_wolvesbane.as b/scripts/angelscript/items/item_tk_swords_wolvesbane.as new file mode 100644 index 00000000..905fc2de --- /dev/null +++ b/scripts/angelscript/items/item_tk_swords_wolvesbane.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "items/base_ticket.as" + +namespace MS +{ + +class ItemTkSwordsWolvesbane : CGameScript +{ + void ticket_spawn() + { + SetName("Ticket for Wolve s Bane"); + } + +} + +} diff --git a/scripts/angelscript/items/item_torch.as b/scripts/angelscript/items/item_torch.as new file mode 100644 index 00000000..c2def85a --- /dev/null +++ b/scripts/angelscript/items/item_torch.as @@ -0,0 +1,174 @@ +#pragma context server + +#include "items/base_melee.as" + +namespace MS +{ + +class ItemTorch : CGameScript +{ + int ANIM_IDLE1; + string ANIM_PREFIX; + int ANIM_THRUST; + string ITEM_NAME; + int LOOPSND_LENGTH; + string LOOPSND_NAME; + int MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SCRIPT_ID; + string SOUND_HITWALL; + string SOUND_SWIPE; + string SPRITE_FIRE; + string SPRITE_FIRE_FIXED; + string TORCH_LIGHT_SCRIPT; + + ItemTorch() + { + ANIM_IDLE1 = 0; + ANIM_THRUST = 1; + MODEL_VIEW = "misc/item_torch_rview.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + SOUND_HITWALL = "debris/wood2.wav"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + ITEM_NAME = "torch"; + SPRITE_FIRE = "fire1_fixed.spr"; + SPRITE_FIRE_FIXED = "fire1_fixed.spr"; + MODEL_BODY_OFS = 36; + ANIM_PREFIX = "torch"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.2; + MELEE_ENERGY = 1; + MELEE_DMG = 60; + MELEE_DMG_RANGE = 60; + MELEE_DMG_TYPE = "fire"; + MELEE_ACCURACY = 30; + MELEE_STAT = "bluntarms"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_THRUST; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0; + PLAYERANIM_AIM = "axe_onehand"; + PLAYERANIM_SWING = "axe_onehand_swing"; + TORCH_LIGHT_SCRIPT = "items/item_torch_light"; + LOOPSND_NAME = "items/torch1.wav"; + LOOPSND_LENGTH = 6; + } + + void OnRepeatTimer() + { + SetRepeatDelay(LOOPSND_LENGTH); + if ((SCRIPT_ID)) + { + } + // svplaysound: svplaysound const.sound.item 5 LOOPSND_NAME + EmitSound("const.sound.item", 5, LOOPSND_NAME); + } + + void weapon_spawn() + { + SetName("Torch"); + SetDescription("A torch"); + SetWeight(1); + SetSize(2); + SetValue(1); + SetHand("left"); + SetHUDSprite("hand", ITEM_NAME); + SetHUDSprite("trade", ITEM_NAME); + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + SetModelBody(0, MODEL_BODY_OFS); + } + + void OnDeploy() override + { + PlayViewAnim(ANIM_IDLE1); + PlayAnim("once", "idle"); + weapon_deploy(); + } + + void melee_strike() + { + if (!(param1 == "npc")) return; + if (!(param4)) return; + int L_DMG = 30; + L_DMG *= GetSkillLevel(GetOwner(), "bluntarms.ratio"); + ApplyEffect(param3, "effects/dot_fire", 3, GetEntityIndex(GetOwner()), L_DMG, "bluntarms"); + } + + void bweapon_effect_activate() + { + end_torch_fx(); + do_torch_fx("game_deploy"); + } + + void bweapon_effect_remove() + { + end_torch_fx(); + } + + void game_fall() + { + do_torch_fx("game_fall"); + } + + void game_putinpack() + { + end_torch_fx(); + } + + void do_torch_fx() + { + if ((SCRIPT_ID)) return; + if (param1 == "game_deploy") + { + string L_BODY = "game.item.hand_index"; + L_BODY += 1; + ClientEvent("persist", "all", TORCH_LIGHT_SCRIPT, GetEntityIndex(GetOwner()), L_BODY); + SCRIPT_ID = "game.script.last_sent_id"; + } + else + { + if (param1 == "game_fall") + { + ClientEvent("persist", "all", TORCH_LIGHT_SCRIPT, GetEntityIndex(GetOwner()), 1); + SCRIPT_ID = "game.script.last_sent_id"; + PlayAnim("once", "torch_floor_idle"); + } + } + } + + void end_torch_fx() + { + if (!(SCRIPT_ID)) return; + ClientEvent("update", "all", SCRIPT_ID, "remove_me"); + SCRIPT_ID = 0; + // svplaysound: svplaysound const.sound.item 0 LOOPSND_NAME + EmitSound("const.sound.item", 0, LOOPSND_NAME); + } + +} + +} diff --git a/scripts/angelscript/items/item_torch_light.as b/scripts/angelscript/items/item_torch_light.as new file mode 100644 index 00000000..20561220 --- /dev/null +++ b/scripts/angelscript/items/item_torch_light.as @@ -0,0 +1,36 @@ +#pragma context client + +#include "items/base_lighted.as" + +namespace MS +{ + +class ItemTorchLight : CGameScript +{ + string LIGHT_COLOR; + float LIGHT_DROPPED_SCALE; + float LIGHT_PLAYER_SCALE; + string SOUND_BURN; + string SPRITE_FIRE; + string SPRITE_FIRE_FIXED; + + ItemTorchLight() + { + SPRITE_FIRE = "fire1_fixed.spr"; + SPRITE_FIRE_FIXED = "fire1_fixed.spr"; + SOUND_BURN = "items/torch1.wav"; + LIGHT_COLOR = Vector3(255, 255, 128); + LIGHT_PLAYER_SCALE = 0.3; + LIGHT_DROPPED_SCALE = 0.5; + Precache(SPRITE_FIRE); + Precache(SPRITE_FIRE_FIXED); + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/item_warbosshead.as b/scripts/angelscript/items/item_warbosshead.as new file mode 100644 index 00000000..beac2b03 --- /dev/null +++ b/scripts/angelscript/items/item_warbosshead.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ItemWarbosshead : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + ItemWarbosshead() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("|Graznux's Head"); + SetDescription("The head of Graznux the Warboss - amazing how many of these there seem to be."); + SetValue(0); + } + +} + +} diff --git a/scripts/angelscript/items/key_blue.as b/scripts/angelscript/items/key_blue.as new file mode 100644 index 00000000..64eba73d --- /dev/null +++ b/scripts/angelscript/items/key_blue.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class KeyBlue : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + KeyBlue() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Sapphire Key"); + SetDescription("This ornate key has a blue gem in its hilt"); + SetHUDSprite("trade", 162); + } + +} + +} diff --git a/scripts/angelscript/items/key_brass.as b/scripts/angelscript/items/key_brass.as new file mode 100644 index 00000000..674616fc --- /dev/null +++ b/scripts/angelscript/items/key_brass.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class KeyBrass : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + KeyBrass() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Brass Key"); + SetDescription("A tarnished brass key"); + SetHUDSprite("trade", 164); + } + +} + +} diff --git a/scripts/angelscript/items/key_crystal.as b/scripts/angelscript/items/key_crystal.as new file mode 100644 index 00000000..1dfc3e68 --- /dev/null +++ b/scripts/angelscript/items/key_crystal.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class KeyCrystal : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + KeyCrystal() + { + MODEL_WORLD = "misc/item_key_ice.mdl"; + MODEL_HANDS = "misc/item_key_ice.mdl"; + } + + void miscitem_spawn() + { + SetName("Crystal Key"); + SetDescription("This delicate enchanted key reforged from crystal fragments"); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/key_forged.as b/scripts/angelscript/items/key_forged.as new file mode 100644 index 00000000..09a27754 --- /dev/null +++ b/scripts/angelscript/items/key_forged.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class KeyForged : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + KeyForged() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("reforged key"); + SetDescription("This key was reforged by Ike the blacksmith."); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/key_gold.as b/scripts/angelscript/items/key_gold.as new file mode 100644 index 00000000..f6b2ddb2 --- /dev/null +++ b/scripts/angelscript/items/key_gold.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class KeyGold : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + KeyGold() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Gold Key"); + SetDescription("This key is made of gold"); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/key_green.as b/scripts/angelscript/items/key_green.as new file mode 100644 index 00000000..4ca7af1e --- /dev/null +++ b/scripts/angelscript/items/key_green.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class KeyGreen : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + KeyGreen() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Jade Key"); + SetDescription("This key has a jade trim"); + SetHUDSprite("trade", 161); + } + +} + +} diff --git a/scripts/angelscript/items/key_ice.as b/scripts/angelscript/items/key_ice.as new file mode 100644 index 00000000..d11c36a9 --- /dev/null +++ b/scripts/angelscript/items/key_ice.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class KeyIce : CGameScript +{ + string MODEL_HANDS; + string MODEL_WORLD; + + KeyIce() + { + MODEL_WORLD = "misc/item_key_ice.mdl"; + MODEL_HANDS = "misc/item_key_ice.mdl"; + } + + void miscitem_spawn() + { + SetName("Key of Ice"); + SetDescription("This key seems to be made of magical ice"); + SetHUDSprite("trade", 163); + } + +} + +} diff --git a/scripts/angelscript/items/key_red.as b/scripts/angelscript/items/key_red.as new file mode 100644 index 00000000..641161cb --- /dev/null +++ b/scripts/angelscript/items/key_red.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class KeyRed : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + KeyRed() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Crimson Key"); + SetDescription("This key is blood red"); + SetHUDSprite("trade", 160); + } + +} + +} diff --git a/scripts/angelscript/items/key_skeleton.as b/scripts/angelscript/items/key_skeleton.as new file mode 100644 index 00000000..3b72439d --- /dev/null +++ b/scripts/angelscript/items/key_skeleton.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class KeySkeleton : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + KeySkeleton() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Skeleton Key"); + SetDescription("This key is made of chiseled bone"); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/key_treasury.as b/scripts/angelscript/items/key_treasury.as new file mode 100644 index 00000000..eaf6c5b1 --- /dev/null +++ b/scripts/angelscript/items/key_treasury.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class KeyTreasury : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + KeyTreasury() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Outpost Treasury Key"); + SetDescription("This opens the local treasury."); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/lrod_cl.as b/scripts/angelscript/items/lrod_cl.as new file mode 100644 index 00000000..3d6e64b2 --- /dev/null +++ b/scripts/angelscript/items/lrod_cl.as @@ -0,0 +1,244 @@ +#pragma context server + +namespace MS +{ + +class LrodCl : CGameScript +{ + int GLOW_DURATION; + string LIGHT_COLOR; + int LIGHT_RADIUS; + float OFS_NEG; + float OFS_POS; + int SKYLTNG_OFS; + string SPRITE_GLOW; + string SPRITE_LIGHTNING; + string handmagic.anim; + string handmagic.event; + string handmagic.handid; + string magichand.attachment; + string magichand.on; + string script.duration; + int script.islocal; + string script.modelid; + int script.prepdone; + string script.prepduration; + + LrodCl() + { + SPRITE_LIGHTNING = "lgtning.spr"; + SPRITE_GLOW = "3dmflaora.spr"; + GLOW_DURATION = 3; + OFS_POS = 0.2; + OFS_NEG = -0.2; + LIGHT_RADIUS = 128; + LIGHT_COLOR = Vector3(100, 33, 253); + SKYLTNG_OFS = 256; + Precache(SPRITE_GLOW); + Precache(SPRITE_LIGHTNING); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.15, 0.25)); + if (!(script.prepdone)) + { + } + if ((script.islocal)) + { + if (!("game.localplayer.thirdperson")) + { + } + int script.isfirstperson = 1; + } + if (!(script.isfirstperson)) + { + make_sprite_1(/* TODO: $getcl */ $getcl(script.modelid, "bonepos", 21)); + make_sprite_1(/* TODO: $getcl */ $getcl(script.modelid, "bonepos", 38)); + } + else + { + string handid = "game.localplayer.viewmodel.active.id"; + } + } + + void client_activate() + { + script.modelid = param1; + script.prepduration = param2; + script.duration = param3; + script.islocal = 0; + if (script.modelid == "game.localplayer.index") + { + script.islocal = 1; + SetCallback("render", "enable"); + } + if ((/* TODO: $getcl */ $getcl(script.modelid, "exists"))) + { + script_prepdone("prep_done"); + create_light(/* TODO: $getcl */ $getcl(script.modelid, "origin")); + cl_handmagic_beam("righthand"); + } + else + { + effect_die(); + } + } + + void effect_die() + { + RemoveScript(); + } + + void prep_done() + { + script.prepdone = 1; + } + + void make_sprite_1() + { + if (!(param1 != "0")) return; + string l.pos = param1; + l.pos += Vector3(RandomInt(OFS_NEG, OFS_POS), RandomInt(OFS_NEG, OFS_POS), RandomInt(OFS_NEG, OFS_POS)); + ClientEffect("tempent", "sprite", SPRITE_GLOW, l.pos, "setup_sprite_1"); + } + + void setup_sprite_1() + { + ClientEffect("tempent", "set_current_prop", "death_delay", GLOW_DURATION); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0.1); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.2, 0.1)); + ClientEffect("tempent", "set_current_prop", "collide", "world|die"); + } + + void create_light() + { + if (!(param1 != "0")) return; + ClientEffect("light", "new", param1, LIGHT_RADIUS, LIGHT_COLOR, script.duration); + } + + void cl_handmagic_beam() + { + if (param1 == "hands") + { + magichand.on = 1; + handmagic.handid = "game.localplayer.viewmodel.active.id"; + handmagic.anim = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "anim"); + handmagic.event = "handmagic_connecthands"; + } + else + { + if (param1 == "righthand") + { + magichand.on = 1; + handmagic.handid = "game.localplayer.viewmodel.active.id"; + handmagic.anim = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "anim"); + handmagic.event = "handmagic_righthand"; + } + else + { + magichand.on = 0; + } + } + } + + void handmagic_connecthands() + { + if (!(param1)) + { + handmagic_createbeam(16, 35); + handmagic_createbeam(19, 38); + handmagic_createbeam(22, 41); + handmagic_createbeam(25, 44); + handmagic_createbeam(28, 47); + } + else + { + create_sprite_2(1); + create_sprite_2(2); + } + } + + void handmagic_righthand() + { + if (!(param1)) + { + handmagic_createbeam_to_sky(35); + handmagic_createbeam_to_sky(38); + handmagic_createbeam_to_sky(41); + handmagic_createbeam_to_sky(44); + handmagic_createbeam_to_sky(47); + } + else + { + create_sprite_2(1); + } + } + + void game_render_transparent() + { + if (!(magichand.on == 1)) return; + int l.continue = 1; + if ("game.localplayer.viewmodel.active.id" != handmagic.handid) + { + int l.continue = 0; + } + if (handmagic.anim != /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "anim")) + { + int l.continue = 0; + } + if (!(l.continue)) + { + cl_handmagic_beam("stop"); + } + if (!(l.continue)) return; + handmagic_event(); + string l.lightpos = /* TODO: $getcl */ $getcl("game.localplayer.index", "origin"); + l.lightpos += Vector3(0, 0, 12); + ClientEffect("light", "new", l.lightpos, LIGHT_RADIUS, LIGHT_COLOR, 0.01); + } + + void handmagic_createbeam() + { + string l.pos.left = /* TODO: $getcl */ $getcl(handmagic.handid, "bonepos", param1); + string l.pos.right = /* TODO: $getcl */ $getcl(handmagic.handid, "bonepos", param2); + ClientEffect("beam_points", l.pos.left, l.pos.right, SPRITE_LIGHTNING, 0.001, 0.1, 0.1, 0.3, 0.1, 30, Vector3(1, 0.5, 2)); + } + + void handmagic_createbeam_to_sky() + { + if (!(RandomInt(0, 100) < 10)) return; + string l.pos.finger = /* TODO: $getcl */ $getcl(handmagic.handid, "bonepos", param1); + string l.pos.sky = l.pos.finger; + float l.ofs.x = Random(/* TODO: $neg */ $neg(SKYLTNG_OFS), SKYLTNG_OFS); + float l.ofs.y = Random(/* TODO: $neg */ $neg(SKYLTNG_OFS), SKYLTNG_OFS); + l.pos.sky += Vector3(l.ofs.x, l.ofs.y, 1024); + ClientEffect("beam_points", l.pos.finger, l.pos.sky, SPRITE_LIGHTNING, 0.1, 1, 0.1, 0.3, 0.1, 30, Vector3(1, 0.5, 2)); + } + + void game_prerender() + { + if (!(magichand.on == 1)) return; + handmagic_event(1); + } + + void create_sprite_2() + { + magichand.attachment = param1; + ClientEffect("frameent", "sprite", SPRITE_GLOW, Vector3(0, 0, 0), "setup_sprite_2"); + } + + void setup_sprite_2() + { + ClientEffect("frameent", "set_current_prop", "scale", 0.25); + ClientEffect("frameent", "set_current_prop", "rendermode", "add"); + ClientEffect("frameent", "set_current_prop", "renderamt", 128); + ClientEffect("frameent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("frameent", "set_current_prop", "follow", handmagic.handid); + ClientEffect("frameent", "set_current_prop", "body", magichand.attachment); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_acid_bolt.as b/scripts/angelscript/items/magic_hand_acid_bolt.as new file mode 100644 index 00000000..e33fbef8 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_acid_bolt.as @@ -0,0 +1,83 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandAcidBolt : CGameScript +{ + int ANIM_CAST; + float RANGED_ATK_DURATION; + int RANGED_COF; + float RANGED_DMG_DELAY; + int RANGED_FORCE; + string RANGED_PROJECTILE; + string SOUND_CHARGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_MPDRAIN; + float SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + int baseitem.canidle; + + MagicHandAcidBolt() + { + ANIM_CAST = 11; + SOUND_CHARGE = "bullchicken/bc_attack1.wav"; + SOUND_SHOOT = "bullchicken/bc_attack3.wav"; + RANGED_FORCE = 800; + RANGED_COF = 1; + RANGED_ATK_DURATION = 0.5; + RANGED_DMG_DELAY = 0.25; + RANGED_PROJECTILE = "proj_acid_bolt"; + SPELL_SKILL_REQUIRED = 15; + SPELL_PREPARE_TIME = 0.5; + SPELL_DAMAGE_TYPE = "acid"; + SPELL_MPDRAIN = 10; + SPELL_STAT = "spellcasting.affliction"; + Precache("items/magic_hand_base"); + } + + void spell_spawn() + { + SetName("Acidic Bolt"); + SetDescription("Fires a bolt of corrosive bile"); + } + + void cast_start() + { + baseitem.canidle = 0; + ((RANGED_ATK_DURATION + RANGED_DMG_DELAY) + 0_75)("start_spell_anim"); + } + + void cast_toss() + { + spell_casted(); + PlayOwnerAnim("critical", PLAYERANIM_CAST); + } + + void start_spell_anim() + { + ScheduleDelayedEvent(2, "bitem_set_can_idle"); + PlayViewAnim(13); + } + + void spell_casted() + { + // svplaysound: svplaysound 0 10 SOUND_SHOOT + EmitSound(0, 10, SOUND_SHOOT); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_CHARGE + EmitSound(0, 0, SOUND_CHARGE); + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_base.as b/scripts/angelscript/items/magic_hand_base.as new file mode 100644 index 00000000..30cb9d6c --- /dev/null +++ b/scripts/angelscript/items/magic_hand_base.as @@ -0,0 +1,236 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class MagicHandBase : CGameScript +{ + int ANIM_CAST; + string ANIM_IDLE1; + int ANIM_IDLE_DELAY_HIGH; + int ANIM_IDLE_DELAY_LOW; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_PREPARE; + int ANIM_PREPARE_IDLE; + int IS_MAGIC_HAND; + int MELEE_DMG; + string MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + int MELEE_NOAUTOAIM; + string MELEE_TYPE; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_CAST; + string PLAYERANIM_PREPARE; + string RANGED_COF; + float RANGED_DMG_DELAY; + string RANGED_HOLD_MINMAX; + string RANGED_TYPE; + string SCRIPT_SFX_PREP; + string SOUND_CHARGE; + string SOUND_SHOOT; + int SPELL_ENERGYDRAIN; + int SPELL_NOISE; + float SPELL_PREPARE_TIME; + string WEAPON_PRIMARY_SKILL; + int baseitem.canidle; + string spell.prepscript.id; + + MagicHandBase() + { + IS_MAGIC_HAND = 1; + ANIM_LIFT1 = 7; + ANIM_PREPARE = 9; + ANIM_PREPARE_IDLE = 11; + ANIM_CAST = 12; + ANIM_IDLE1 = ANIM_PREPARE_IDLE; + ANIM_IDLE_TOTAL = 1; + ANIM_IDLE_DELAY_LOW = 0; + ANIM_IDLE_DELAY_HIGH = 0; + MODEL_VIEW = "viewmodels/v_martialarts.mdl"; + MODEL_HANDS = "none"; + MODEL_WORLD = "none"; + SOUND_CHARGE = "none"; + SOUND_SHOOT = "magic/cast.wav"; + SPELL_NOISE = 650; + SPELL_ENERGYDRAIN = 0; + SPELL_PREPARE_TIME = 5.5; + RANGED_TYPE = "charge-throw-projectile"; + RANGED_DMG_DELAY = 0.4; + RANGED_HOLD_MINMAX = "2;2"; + RANGED_COF = "0;0"; + MELEE_TYPE = "target"; + MELEE_DMG_DELAY = RANGED_DMG_DELAY; + MELEE_DMG = 0; + MELEE_DMG_RANGE = 0; + MELEE_NOAUTOAIM = 0; + PLAYERANIM_AIM = "fireball"; + PLAYERANIM_PREPARE = "prepare_fireball"; + PLAYERANIM_CAST = "throw_fireball"; + SCRIPT_SFX_PREP = "items/magic_hand_base_cl"; + } + + void game_precache() + { + Precache(SCRIPT_SFX_PREP); + } + + void OnSpawn() override + { + SetWeight(0); + SetSize(0); + SetAnimExt(PLAYERANIM_AIM); + SetHand("both"); + SetHUDSprite("hand", "bow"); + SetHUDSprite("trade", "firemagic"); + spell_spawn(); + setup_attack(); + setup_spell(); + } + + void OnDeploy() override + { + ClientEvent("new", "all", SCRIPT_SFX_PREP, GetEntityIndex(GetOwner()), SPELL_PREPARE_TIME); + spell.prepscript.id = "game.script.last_sent_id"; + SetViewModel(MODEL_VIEW); + PlayOwnerAnim("once", PLAYERANIM_PREPARE); + PlayViewAnim(ANIM_PREPARE); + baseitem.canidle = 0; + spell_deploy(); + } + + void game_switchhands() + { + item_switchhands(); + } + + void OnPickup(CBaseEntity@ player) override + { + item_switchhands(); + } + + void game_removefromowner() + { + ClientEvent("remove", "all", spell.prepscript.id); + } + + void setup_attack() + { + if (MELEE_RANGE != "MELEE_RANGE") + { + string reg.attack.type = MELEE_TYPE; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = SPELL_DAMAGE_TYPE; + string reg.attack.hitchance = MELEE_HITCHANCE; + int reg.attack.priority = 1; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + } + else + { + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.hold_min&max = RANGED_HOLD_MINMAX; + string reg.attack.dmg.type = SPELL_DAMAGE_TYPE; + string reg.attack.range = RANGED_FORCE; + string reg.attack.COF = RANGED_COF; + string reg.attack.projectile = RANGED_PROJECTILE; + int reg.attack.priority = 0; + string reg.attack.delay.strike = RANGED_DMG_DELAY; + string reg.attack.delay.end = RANGED_ATK_DURATION; + string reg.attack.ofs.startpos = RANGED_STARTPOS; + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + int reg.attack.ammodrain = 0; + } + string reg.attack.keys = "+attack1"; + string reg.attack.noise = SPELL_NOISE; + string reg.attack.energydrain = SPELL_ENERGYDRAIN; + string reg.attack.mpdrain = SPELL_MPDRAIN; + string reg.attack.stat = SPELL_STAT; + string reg.attack.callback = "cast"; + string reg.attack.noautoaim = MELEE_NOAUTOAIM; + WEAPON_PRIMARY_SKILL = reg.attack.stat; + if (!(NO_REGISTER)) + { + RegisterAttack(); + } + } + + void setup_spell() + { + string reg.spell.reqskill = SPELL_SKILL_REQUIRED; + int reg.spell.fizzletime = 9999999; + int reg.spell.castsuccess = 100; + string reg.spell.preparetime = SPELL_PREPARE_TIME; + // TODO: registerspell + } + + void game_prepare_success() + { + SPELL_PREPARE_TIME("prepare_success_done"); + } + + void prepare_success_done() + { + baseitem.canidle = 1; + spell_prepare_success(); + } + + void spell_prepare_success() + { + } + + void cast_start() + { + PlayViewAnim(ANIM_CAST); + PlayOwnerAnim("critical", PLAYERANIM_PREPARE); + // svplaysound: svplaysound game.sound.item game.sound.maxvol SOUND_CHARGE + EmitSound("game.sound.item", "game.sound.maxvol", SOUND_CHARGE); + } + + void cast_strike() + { + spell_casted(param1, param2, param3); + } + + void cast_toss() + { + spell_casted(); + PlayOwnerAnim("critical", PLAYERANIM_CAST); + } + + void cast_end() + { + } + + void spell_end() + { + if (!(CUST_MESSAGE)) + { + SendPlayerMessage(GetOwner(), "The spell's duration ends."); + } + bweapon_effect_remove(); + DeleteEntity(GetOwner()); + } + + void spell_casted() + { + CallExternal(GetOwner(), "mana_drain"); + } + + void game_fall() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_base_cl.as b/scripts/angelscript/items/magic_hand_base_cl.as new file mode 100644 index 00000000..b271e38d --- /dev/null +++ b/scripts/angelscript/items/magic_hand_base_cl.as @@ -0,0 +1,93 @@ +#pragma context server + +namespace MS +{ + +class MagicHandBaseCl : CGameScript +{ + string FX_DURATION; + int FX_FIRSTPERSON; + string FX_OWNER; + int GLOW_DURATION; + string LIGHT_COLOR; + int LIGHT_RADIUS; + int OFS_NEG; + int OFS_POS; + + MagicHandBaseCl() + { + GLOW_DURATION = 1; + OFS_POS = 5; + OFS_NEG = -5; + LIGHT_RADIUS = 128; + LIGHT_COLOR = Vector3(255, 255, 128); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.10, 0.25)); + FX_FIRSTPERSON = 0; + if (FX_OWNER == "game.localplayer.index") + { + if (!("game.localplayer.thirdperson")) + { + } + FX_FIRSTPERSON = 1; + } + if (!(FX_FIRSTPERSON)) + { + make_sprite_1(/* TODO: $getcl */ $getcl(FX_OWNER, "bonepos", 21)); + make_sprite_1(/* TODO: $getcl */ $getcl(FX_OWNER, "bonepos", 38)); + } + else + { + string handid = "game.localplayer.viewmodel.active.id"; + make_sprite_1(/* TODO: $getcl */ $getcl(handid, "bonepos", 13)); + make_sprite_1(/* TODO: $getcl */ $getcl(handid, "bonepos", 32)); + } + } + + void game_precache() + { + Precache("3dmflaora.spr"); + } + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = (param2 + 5); + SetCallback("render", "enable"); + FX_DURATION("effect_die"); + create_light(/* TODO: $getcl */ $getcl(FX_OWNER, "origin")); + } + + void make_sprite_1() + { + string SPRITE_1 = "3dmflaora.spr"; + string L_POS = param1; + L_POS += Vector3(0, Random(OFS_NEG, OFS_POS), Random(OFS_NEG, OFS_POS)); + ClientEffect("tempent", "sprite", SPRITE_1, L_POS, "setup_sprite_1"); + } + + void setup_sprite_1() + { + ClientEffect("tempent", "set_current_prop", "death_delay", GLOW_DURATION); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0.1); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.2, 0.1)); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + } + + void create_light() + { + ClientEffect("light", "new", param1, LIGHT_RADIUS, LIGHT_COLOR, FX_DURATION); + } + + void effect_die() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_blizzard.as b/scripts/angelscript/items/magic_hand_blizzard.as new file mode 100644 index 00000000..e76674f8 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_blizzard.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandBlizzard : CGameScript +{ + int ANIM_CAST; + int RANGED_ATK_DURATION; + string RANGED_COF; + float RANGED_DMG_DELAY; + int RANGED_FORCE; + string RANGED_PROJECTILE; + string SOUND_CHARGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + int baseitem.canidle; + + MagicHandBlizzard() + { + SOUND_CHARGE = "magic/fireball_powerup.wav"; + SOUND_SHOOT = "magic/fireball_strike.wav"; + ANIM_CAST = 11; + RANGED_FORCE = 1000; + RANGED_COF = "10;1"; + RANGED_ATK_DURATION = 1; + RANGED_PROJECTILE = "proj_blizzard2"; + RANGED_DMG_DELAY = 0.5; + SPELL_SKILL_REQUIRED = 8; + SPELL_PREPARE_TIME = 3; + SPELL_DAMAGE_TYPE = "cold"; + SPELL_ENERGYDRAIN = 5; + SPELL_MPDRAIN = 20; + SPELL_STAT = "spellcasting.ice"; + } + + void spell_spawn() + { + SetName("Blizzard"); + SetDescription("Slows and damages multiple opponents"); + } + + void cast_start() + { + baseitem.canidle = 0; + ScheduleDelayedEvent(1.45, "start_spell_anim"); + } + + void cast_toss() + { + spell_casted(); + PlayOwnerAnim("critical", PLAYERANIM_CAST); + } + + void spell_casted() + { + // svplaysound: svplaysound game.sound.item game.sound.maxvol SOUND_SHOOT + EmitSound("game.sound.item", "game.sound.maxvol", SOUND_SHOOT); + } + + void start_spell_anim() + { + ScheduleDelayedEvent(2, "bitem_set_can_idle"); + PlayViewAnim(13); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_CHARGE + EmitSound(0, 0, SOUND_CHARGE); + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_conjure_venom_claws.as b/scripts/angelscript/items/magic_hand_conjure_venom_claws.as new file mode 100644 index 00000000..75d2c413 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_conjure_venom_claws.as @@ -0,0 +1,55 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandConjureVenomClaws : CGameScript +{ + int ANIM_CAST; + float MELEE_ATK_DURATION; + float MELEE_DMG_DELAY; + int MELEE_RANGE; + string SOUND_SHOOT; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + + MagicHandConjureVenomClaws() + { + SOUND_SHOOT = "magic/cast.wav"; + ANIM_CAST = 12; + MELEE_RANGE = 0; + MELEE_DMG_DELAY = 0.9; + MELEE_ATK_DURATION = 1.0; + SPELL_SKILL_REQUIRED = 20; + SPELL_PREPARE_TIME = 1; + SPELL_MPDRAIN = 40; + SPELL_STAT = "spellcasting.affliction"; + } + + void spell_spawn() + { + SetName("Conjure Venom Claws"); + SetDescription("A venomous imbuement of your fists."); + } + + void spell_casted() + { + if (GetSkillLevel(GetOwner(), "spellcasting.affliction") >= 27) + { + SendPlayerMessage(GetOwner(), "Your affliction level strengthens the claws..."); + SpawnNPC("monsters/companion/spell_maker_base", Vector3(1000, 1000, 10000), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "blunt_gauntlets_fe2", "none", "none", "none" + } + else + { + SpawnNPC("monsters/companion/spell_maker_base", Vector3(1000, 1000, 10000), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "blunt_gauntlets_fe1", "none", "none", "none" + } + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_div_glow.as b/scripts/angelscript/items/magic_hand_div_glow.as new file mode 100644 index 00000000..af55edec --- /dev/null +++ b/scripts/angelscript/items/magic_hand_div_glow.as @@ -0,0 +1,192 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandDivGlow : CGameScript +{ + string CAST_DELAY; + string CAST_STARTED; + string EFFECT_DURATION_FORMULA; + string EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MINDURATION; + int EFFECT_STACK; + float FREQ_INC_LIGHT; + string LIGHTRNG_FORMULA; + int LIGHTRNG_MAX; + int LIGHTRNG_MIN; + string LIGHTRNG_SKILL; + string LIGHT_POWER; + string MAX_LIGHT_POWER; + float MELEE_ATK_DURATION; + float MELEE_HITCHANCE; + int MELEE_RANGE; + string NEXT_LIGHT_UPDATE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + float SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + + MagicHandDivGlow() + { + SOUND_SHOOT = "magic/cast.wav"; + MELEE_RANGE = 1024; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 0.5; + SPELL_SKILL_REQUIRED = 1; + SPELL_PREPARE_TIME = 0.5; + SPELL_DAMAGE_TYPE = "generic"; + SPELL_ENERGYDRAIN = 5; + SPELL_MPDRAIN = 1; + SPELL_STAT = "none"; + EFFECT_MAXDURATION = 240; + EFFECT_MINDURATION = 60; + EFFECT_DURATION_STAT = GetStat(GetOwner(), "concentration"); + EFFECT_DURATION_STAT /= 100; + EFFECT_DURATION_FORMULA = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + LIGHTRNG_MAX = 384; + LIGHTRNG_MIN = 96; + LIGHTRNG_SKILL = "l.skillratio"; + LIGHTRNG_FORMULA = /* TODO: $get_skill_ratio */ $get_skill_ratio(LIGHTRNG_SKILL, LIGHTRNG_MIN, LIGHTRNG_MAX); + EFFECT_STACK = 1; + FREQ_INC_LIGHT = 0.2; + } + + void spell_spawn() + { + SetName("Glow"); + SetDescription("Create artificial light"); + } + + void OnDeploy() override + { + CAST_DELAY = GetGameTime(); + CAST_DELAY += 0.2; + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + if (!(CAST_STARTED)) + { + } + SendPlayerMessage("Glow:", "Extinguishing spell..."); + CallExternal(GAME_MASTER, "gm_light_update", "remove", GetEntityIndex(GetOwner())); + CallExternal(GetOwner(), "ext_set_glow", 0); + EmitSound(GetOwner(), 0, "magic/elecidlepop.wav", 5); + glow_done("remove_glow"); + } + } + + void game_attack1_down() + { + if (!(GetGameTime() > CAST_DELAY)) return; + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + SendPlayerMessage(GetOwner(), "You cannot use divine magic while under the influence of Demon Blood!"); + glow_done("demon_blood"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + SendPlayerMessage(GetOwner(), "A dark force is blocking the glow spell!"); + if ((CAST_STARTED)) + { + CallExternal(GAME_MASTER, "gm_light_update", "remove", GetEntityIndex(GetOwner())); + CallExternal(GetOwner(), "ext_set_glow", 0); + EmitSound(GetOwner(), 0, "magic/elecidlepop.wav", 5); + glow_done("dark_force"); + } + spell_end(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(CAST_STARTED)) + { + CAST_STARTED = 1; + LIGHT_POWER = 0.05; + MAX_LIGHT_POWER = GetSkillLevel(GetOwner(), "spellcasting"); + MAX_LIGHT_POWER *= 0.1; + if (MAX_LIGHT_POWER > 1) + { + MAX_LIGHT_POWER = 1; + } + EmitSound(GetOwner(), 0, "magic/elecidlepop.wav", 5); + // svplaysound: svplaysound 2 5 ambience/labdrone2.wav 0.8 50 + EmitSound(2, 5, "ambience/labdrone2.wav", 0.8, 50); + int COLOR_RATIO_R = 255; + string COLOR_RATIO_G = /* TODO: $ratio */ $ratio(LIGHT_POWER, 0, 255); + string COLOR_RATIO_B = /* TODO: $ratio */ $ratio(LIGHT_POWER, 128, 255); + string RAD_RATIO = /* TODO: $ratio */ $ratio(LIGHT_POWER, 50, 255); + SendPlayerMessage("Glow:", "Charging..."); + CallExternal(GAME_MASTER, "gm_light_update", "new", GetEntityIndex(GetOwner()), Vector3(COLOR_RATIO_R, COLOR_RATIO_G, COLOR_RATIO_B), RAD_RATIO, "magic_hand_div_glow"); + NEXT_LIGHT_UPDATE = GetGameTime(); + NEXT_LIGHT_UPDATE += FREQ_INC_LIGHT; + CallExternal(GetOwner(), "ext_set_glow", 1); + } + if (GetGameTime() > NEXT_LIGHT_UPDATE) + { + NEXT_LIGHT_UPDATE = GetGameTime(); + NEXT_LIGHT_UPDATE += FREQ_INC_LIGHT; + LIGHT_POWER += 0.05; + if (LIGHT_POWER >= MAX_LIGHT_POWER) + { + glow_done("max_power"); + } + if (LIGHT_POWER < MAX_LIGHT_POWER) + { + } + string PITCH_RATIO = /* TODO: $ratio */ $ratio(LIGHT_POWER, 50, 200); + // svplaysound: svplaysound 2 5 ambience/labdrone2.wav 0.8 PITCH_RATIO + EmitSound(2, 5, "ambience/labdrone2.wav", 0.8, PITCH_RATIO); + LogDebug("cur_power LIGHT_POWER"); + int COLOR_RATIO_R = 100; + string COLOR_RATIO_G = /* TODO: $ratio */ $ratio(LIGHT_POWER, 64, 100); + string COLOR_RATIO_B = /* TODO: $ratio */ $ratio(LIGHT_POWER, 32, 100); + string RAD_RATIO = /* TODO: $ratio */ $ratio(LIGHT_POWER, 50, 400); + CallExternal(GAME_MASTER, "gm_light_update", "update", GetEntityIndex(GetOwner()), Vector3(COLOR_RATIO_R, COLOR_RATIO_G, COLOR_RATIO_B), RAD_RATIO, "magic_hand_div_glow"); + } + } + + void game__attack1() + { + if (!(CAST_STARTED)) return; + glow_done("mouse_release"); + } + + void glow_done() + { + LogDebug("glow_done PARAM1"); + if ((CAST_STARTED)) + { + // svplaysound: if ( CAST_STARTED ) svplaysound 2 0 ambience/labdrone2.wav + EmitSound(2, 0, "ambience/labdrone2.wav"); + } + if (param1 == "max_power") + { + SendPlayerMessage("Glow:", "Maximum charge reached."); + } + else + { + if ((CAST_STARTED)) + { + } + string DISP_POWER = "("; + string L_LIGHT_POWER = LIGHT_POWER; + L_LIGHT_POWER *= 100; + int L_LIGHT_POWER = int(L_LIGHT_POWER); + DISP_POWER += L_LIGHT_POWER; + DISP_POWER += "%"; + DISP_POWER += ")"; + SendPlayerMessage("Glow:", "Charge set " + DISP_POWER); + } + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_div_rejuvenate.as b/scripts/angelscript/items/magic_hand_div_rejuvenate.as new file mode 100644 index 00000000..4561f452 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_div_rejuvenate.as @@ -0,0 +1,254 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandDivRejuvenate : CGameScript +{ + int BITCH_SLAPPED; + string EFFECT_DURATION_FORMULA; + string EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MINDURATION; + int FAN_LOOP; + int HEAL_MAX; + int HEAL_MIN; + string HEAL_SKILL; + string LOOP_CHANNEL; + string LOOP_SOUND; + int MELEE_ATK_DURATION; + float MELEE_HITCHANCE; + int MELEE_RANGE; + string REGEN_DELAY; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + + MagicHandDivRejuvenate() + { + SOUND_SHOOT = "magic/heal_strike.wav"; + MELEE_RANGE = 384; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 1; + SPELL_SKILL_REQUIRED = 5; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "divination"; + SPELL_ENERGYDRAIN = 10; + SPELL_MPDRAIN = 5; + SPELL_STAT = "spellcasting.divination"; + EFFECT_MAXDURATION = 20; + EFFECT_MINDURATION = 10; + EFFECT_DURATION_STAT = GetStat(GetOwner(), "concentration.ratio"); + EFFECT_DURATION_FORMULA = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION, "inversed"); + HEAL_MAX = 75; + HEAL_MIN = 30; + HEAL_SKILL = GetSkillLevel(GetOwner(), "spellcasting.divination.ratio"); + LOOP_SOUND = "player/heartbeat_noloop.wav"; + LOOP_CHANNEL = "const.sound.item"; + Precache(LOOP_SOUND); + } + + void spell_spawn() + { + SetName("Rejuvenation"); + SetDescription("Replenish yours or an ally's health."); + FAN_LOOP = 0; + add_delay(); + passive_regen(); + } + + void enable_passive_regen_check() + { + SetRepeatDelay(1.0); + if (!(FAN_LOOP == 0)) return; + if (REGEN_DELAY <= GetGameTime()) + { + FAN_LOOP = 1; + } + } + + void spell_casted() + { + string DEMON_ON = GetEntityProperty(GetOwner(), "scriptvar"); + if ((DEMON_ON)) + { + SendPlayerMessage("You", "cannot use divine magic while under the influence of Demon Blood!"); + spell_end(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string L_CASTER = GetEntityIndex(GetOwner()); + string L_SPELL_TARGET = GetEntityIndex(GetOwner()); + string L_HEAL_AMT = GetSkillLevel(GetOwner(), "spellcasting.divination"); + L_HEAL_AMT += HEAL_MIN; + if (param1 == "npc") + { + if (GetRelationship(GetOwner()) == "ally") + { + string L_SPELL_TARGET = param3; + } + } + if ((IsValidPlayer(param3))) + { + string L_SPELL_TARGET = param3; + } + if ((GetEntityProperty(param3, "scriptvar"))) + { + string L_SPELL_TARGET = param3; + } + if (L_CASTER != L_SPELL_TARGET) + { + string L_TEN_PERCENT = GetEntityMaxHealth(L_SPELL_TARGET); + L_TEN_PERCENT *= 0.1; + L_HEAL_AMT += L_TEN_PERCENT; + int L_HEAL_AMT = int(L_HEAL_AMT); + if ((IsValidPlayer(L_SPELL_TARGET))) + { + int L_ADD_BONUS = 1; + } + if ((GetEntityProperty(L_SPELL_TARGET, "scriptvar"))) + { + int L_ADD_BONUS = 1; + } + if ((L_ADD_BONUS)) + { + if (GetEntityHealth(L_SPELL_TARGET) < GetEntityMaxHealth(L_SPELL_TARGET)) + { + } + CallExternal(GetOwner(), "add_dmg_points", (L_HEAL_AMT * 5)); + int L_GAVE_DMG_POINTS = 1; + } + } + else + { + L_HEAL_AMT *= 0.5; + } + // svplaysound: svplaysound game.sound.voice 10 SOUND_SHOOT + EmitSound(CHAN_VOICE, 10, SOUND_SHOOT); + heal_target(L_SPELL_TARGET, L_HEAL_AMT, L_GAVE_DMG_POINTS); + if (L_SPELL_TARGET != L_CASTER) + { + CallExternal(SPELL_TARGET, "display_health"); + } + } + + void heal_target() + { + string L_HEAL_TGT = param1; + string L_HEAL_AMT = param2; + string L_DP = param3; + string L_CASTER_ID = GetEntityIndex(GetOwner()); + string L_MAX_HEALTH = GetEntityMaxHealth(L_HEAL_TGT); + string L_CUR_HEALTH = GetEntityHealth(L_HEAL_TGT); + if (L_HEAL_TGT != L_CASTER_ID) + { + int L_HEALING_OTHER = 1; + } + if (L_CUR_HEALTH < L_MAX_HEALTH) + { + HealEntity(L_HEAL_TGT, L_HEAL_AMT); + int L_HEALED = 1; + if ((L_HEALING_OTHER)) + { + SendColoredMessage(L_CASTER_ID, "You heal " + GetEntityName(L_HEAL_TGT) + "for " + int(L_HEAL_AMT) + " hp"); + SendColoredMessage(L_HEAL_TGT, GetEntityName(L_CASTER_ID) + "heals you for " + int(L_HEAL_AMT) + " hp"); + if ((L_DP)) + { + if (GetPlayerCount() > 1) + { + } + SendColoredMessage(L_CASTER_ID, "(Credited $int($math(multiply)),L_HEAL_AMT,5 ) ) damage points.)"); + } + } + else + { + SendColoredMessage(L_CASTER_ID, "You heal yourself for " + int(L_HEAL_AMT) + " hp"); + } + } + else + { + if ((L_HEALING_OTHER)) + { + SendColoredMessage(L_CASTER_ID, GetEntityName(L_HEAL_TGT) + " is at maximum health"); + } + else + { + SendColoredMessage(L_CASTER_ID, "You are at maximum health"); + } + } + if (!(L_HEALED)) return; + Effect("glow", L_HEAL_TGT, Vector3(0, 255, 0), 256, 1, 1); + } + + void passive_regen() + { + SetRepeatDelay(0.5); + if (!(FAN_LOOP >= 1)) return; + FAN_LOOP += 1; + if (FAN_LOOP == 3) + { + EmitSound(GetOwner(), LOOP_CHANNEL, LOOP_SOUND, 10); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 64, 0.5, 0.5); + FAN_LOOP = 1; + } + string MY_MAX_HEALTH = GetEntityMaxHealth(GetOwner()); + string MY_CUR_HEALTH = GetEntityHealth(GetOwner()); + string MY_SKILL = GetSkillLevel(GetOwner(), "spellcasting.divination"); + string MY_PASSIVE_RATE = MY_SKILL; + MY_PASSIVE_RATE *= 0.1; + MY_PASSIVE_RATE += 4; + if (MY_CUR_HEALTH < MY_MAX_HEALTH) + { + HealEntity(GetOwner(), MY_PASSIVE_RATE); + } + CallExternal(GetEntityIndex(GetOwner()), "display_health"); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(param4 != "target")) return; + if (!(param3 > 0.01)) return; + BITCH_SLAPPED = 1; + spell_end(); + } + + void spell_end() + { + if ((BITCH_SLAPPED)) + { + SendPlayerMessage("You", "cannot rejuvenate while being attacked!"); + } + if (!(BITCH_SLAPPED)) + { + SendPlayerMessage("The", "spell s duration ends."); + } + end_spell(); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + + void end_spell() + { + DeleteEntity(GetOwner()); + } + + void add_delay() + { + REGEN_DELAY = GetGameTime(); + REGEN_DELAY += SPELL_PREPARE_TIME; + enable_passive_regen_check(); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_fire_ball.as b/scripts/angelscript/items/magic_hand_fire_ball.as new file mode 100644 index 00000000..ca4dbed5 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_fire_ball.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandFireBall : CGameScript +{ + int ANIM_CAST; + string MAX_BURN_DAMAGE; + int MIN_BURN_DAMAGE; + int RANGED_ATK_DURATION; + string RANGED_COF; + float RANGED_DMG_DELAY; + int RANGED_FORCE; + string RANGED_PROJECTILE; + string SOUND_CHARGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + int baseitem.canidle; + + MagicHandFireBall() + { + ANIM_CAST = 11; + SOUND_CHARGE = "magic/fireball_powerup.wav"; + SOUND_SHOOT = "magic/fireball_large.wav"; + RANGED_FORCE = 1500; + RANGED_COF = "15;1"; + RANGED_ATK_DURATION = 1; + RANGED_PROJECTILE = "proj_fire_ball"; + RANGED_DMG_DELAY = 0.5; + SPELL_SKILL_REQUIRED = 7; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "fire"; + SPELL_ENERGYDRAIN = 5; + SPELL_MPDRAIN = 5; + SPELL_STAT = "spellcasting.fire"; + MIN_BURN_DAMAGE = 3; + MAX_BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire.ratio"); + } + + void spell_spawn() + { + SetName("Fire ball"); + SetDescription("Burn opponents over a large area"); + } + + void cast_start() + { + baseitem.canidle = 0; + ScheduleDelayedEvent(1.45, "start_spell_anim"); + } + + void cast_toss() + { + spell_casted(); + PlayOwnerAnim("critical", PLAYERANIM_CAST); + } + + void start_spell_anim() + { + // svplaysound: svplaysound 0 game.sound.maxvol SOUND_SHOOT + EmitSound(0, "game.sound.maxvol", SOUND_SHOOT); + ScheduleDelayedEvent(2, "bitem_set_can_idle"); + PlayViewAnim(13); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_CHARGE + EmitSound(0, 0, SOUND_CHARGE); + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_fire_dart.as b/scripts/angelscript/items/magic_hand_fire_dart.as new file mode 100644 index 00000000..7c4ca6ee --- /dev/null +++ b/scripts/angelscript/items/magic_hand_fire_dart.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandFireDart : CGameScript +{ + int ANIM_CAST; + int RANGED_ATK_DURATION; + string RANGED_COF; + float RANGED_DMG_DELAY; + int RANGED_FORCE; + string RANGED_PROJECTILE; + string SOUND_CHARGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + int baseitem.canidle; + + MagicHandFireDart() + { + ANIM_CAST = 11; + SOUND_CHARGE = "magic/fireball_powerup.wav"; + SOUND_SHOOT = "magic/fireball_strike.wav"; + RANGED_FORCE = 1000; + RANGED_COF = "10;1"; + RANGED_ATK_DURATION = 1; + RANGED_PROJECTILE = "proj_fire_dart"; + RANGED_DMG_DELAY = 0.5; + SPELL_SKILL_REQUIRED = 0; + SPELL_PREPARE_TIME = 4; + SPELL_DAMAGE_TYPE = "fire"; + SPELL_ENERGYDRAIN = 5; + SPELL_MPDRAIN = 1; + SPELL_STAT = "spellcasting.fire"; + } + + void spell_spawn() + { + SetName("Fire Dart"); + SetDescription("A weak bolt of fire"); + } + + void spell_casted() + { + // svplaysound: svplaysound game.sound.item game.sound.maxvol SOUND_SHOOT + EmitSound("game.sound.item", "game.sound.maxvol", SOUND_SHOOT); + } + + void cast_start() + { + baseitem.canidle = 0; + ScheduleDelayedEvent(1.65, "start_spell_anim"); + } + + void cast_toss() + { + spell_casted(); + PlayOwnerAnim("critical", PLAYERANIM_CAST); + } + + void start_spell_anim() + { + ScheduleDelayedEvent(2.5, "bitem_set_can_idle"); + PlayViewAnim(12); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_CHARGE + EmitSound(0, 0, SOUND_CHARGE); + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_fire_wall.as b/scripts/angelscript/items/magic_hand_fire_wall.as new file mode 100644 index 00000000..1a715a81 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_fire_wall.as @@ -0,0 +1,79 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandFireWall : CGameScript +{ + string EFFECT_DMG; + string EFFECT_DURATION; + string EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MAX_DMG; + float EFFECT_MINDURATION; + float EFFECT_MIN_DMG; + string EFFECT_SCRIPT; + int MELEE_ATK_DURATION; + float MELEE_HITCHANCE; + int MELEE_RANGE; + string SOUND_CHARGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + + MagicHandFireWall() + { + SOUND_SHOOT = "magic/fireball_powerup.wav"; + SOUND_CHARGE = "magic/fireball_strike.wav"; + MELEE_RANGE = 500; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 4; + SPELL_SKILL_REQUIRED = 13; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "fire"; + SPELL_ENERGYDRAIN = 50; + SPELL_MPDRAIN = 30; + SPELL_STAT = "spellcasting.fire"; + EFFECT_MAXDURATION = 30; + EFFECT_MINDURATION = 0.5; + EFFECT_DURATION_STAT = GetStat(GetOwner(), "concentration.ratio"); + EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + EFFECT_MAX_DMG = 10; + EFFECT_MIN_DMG = 0.1; + EFFECT_DMG = GetSkillLevel(GetOwner(), "spellcasting.fire.ratio"); + EFFECT_SCRIPT = "monsters/summon/summon_fire_wall"; + Precache(EFFECT_SCRIPT); + } + + void spell_spawn() + { + SetName("Fire wall"); + SetDescription("A wall of searing fire to trap your opponents"); + } + + void spell_casted() + { + string pos = param2; + Vector3 pos = Vector3((pos).x, (pos).y, /* TODO: $get_ground_height */ $get_ground_height(pos)); + int FIRE_DURATION = 15; + string FIRE_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + FIRE_DAMAGE *= 0.5; + SpawnNPC(EFFECT_SCRIPT, pos, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.yaw"), FIRE_DAMAGE, FIRE_DURATION, "spellcasting.fire" + DeleteEntity(GetOwner()); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_CHARGE + EmitSound(0, 0, SOUND_CHARGE); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_frost_bolt.as b/scripts/angelscript/items/magic_hand_frost_bolt.as new file mode 100644 index 00000000..f255c1bb --- /dev/null +++ b/scripts/angelscript/items/magic_hand_frost_bolt.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandFrostBolt : CGameScript +{ + int RANGED_ATK_DURATION; + int RANGED_COF; + float RANGED_DMG_DELAY; + int RANGED_FORCE; + string RANGED_PROJECTILE; + string SOUND_CHARGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + + MagicHandFrostBolt() + { + SOUND_CHARGE = "magic/lightprep.wav"; + SOUND_SHOOT = "magic/ice_strike.wav"; + RANGED_FORCE = 600; + RANGED_COF = 1; + RANGED_ATK_DURATION = 1; + RANGED_PROJECTILE = "proj_ice_bolt"; + RANGED_DMG_DELAY = 0.25; + SPELL_SKILL_REQUIRED = 0; + SPELL_PREPARE_TIME = 1; + SPELL_DAMAGE_TYPE = "cold"; + SPELL_ENERGYDRAIN = 10; + SPELL_MPDRAIN = 2; + SPELL_STAT = "spellcasting.ice"; + Precache("items/magic_hand_base"); + } + + void spell_spawn() + { + SetName("Frost Bolt"); + SetDescription("Fires a shard of ice to slow a single enemy."); + Precache(SOUND_SHOOT1); + Precache(SOUND_SHOOT2); + } + + void cast_start() + { + SetGlobalVar("PASS_SPELL", "frostbolt"); + PlayViewAnim("lift"); + PlayOwnerAnim("critical", PLAYERANIM_PREPARE); + EmitSound(GetOwner(), "game.sound.item", SOUND_CHARGE, "game.sound.maxvol"); + } + + void spell_casted() + { + // svplaysound: svplaysound game.sound.item game.sound.maxvol SOUND_SHOOT + EmitSound("game.sound.item", "game.sound.maxvol", SOUND_SHOOT); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_CHARGE + EmitSound(0, 0, SOUND_CHARGE); + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_healing_circle.as b/scripts/angelscript/items/magic_hand_healing_circle.as new file mode 100644 index 00000000..1cf21280 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_healing_circle.as @@ -0,0 +1,112 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandHealingCircle : CGameScript +{ + string LAST_ATTACK; + int MANA_COST; + int MELEE_ATK_DURATION; + string NEAR_SEAL; + int NO_REGISTER; + string OWNER_LOC; + int SET_DELETE; + string SOUND_SHOOT; + int SPELL_ENERGYDRAIN; + int SPELL_PREPARE_TIME; + string SPELL_SCRIPT; + int SPELL_SKILL_REQUIRED; + + MagicHandHealingCircle() + { + NO_REGISTER = 1; + SOUND_SHOOT = "magic/cast.wav"; + SPELL_SKILL_REQUIRED = 18; + SPELL_PREPARE_TIME = 1; + SPELL_ENERGYDRAIN = 50; + MANA_COST = 150; + MELEE_ATK_DURATION = 4; + SPELL_SCRIPT = "monsters/summon/circle_of_healing"; + Precache(SPELL_SCRIPT); + } + + void spell_spawn() + { + SetName("Healing Circle"); + SetDescription("A large magic circle that heals all allies within"); + } + + void game_attack1() + { + float TIME_DIFF = GetGameTime(); + TIME_DIFF -= LAST_ATTACK; + if (!(TIME_DIFF > MELEE_ATK_DURATION)) return; + LAST_ATTACK = GetGameTime(); + // TODO: splayviewanim ent_me ANIM_CAST + PlayOwnerAnim("critical", PLAYERANIM_PREPARE); + EmitSound(GetOwner(), "game.sound.item", SOUND_CHARGE, "game.sound.maxvol"); + if (GetEntityMP(GetOwner()) < MANA_COST) + { + SendColoredMessage(GetOwner(), "Insufficient mana."); + } + if (!(GetEntityMP(GetOwner()) >= MANA_COST)) return; + ScheduleDelayedEvent(0.5, "make_circle"); + } + + void make_circle() + { + SET_DELETE = 0; + OWNER_LOC = GetEntityOrigin(GetOwner()); + NEAR_SEAL = FindEntitiesInSphere("any", 230); + if ((G_DEVELOPER_MODE)) + { + SendColoredMessage(GetOwner(), "make_circle: " + GetTokenCount(NEAR_SEAL, ";")); + } + for (int i = 0; i < GetTokenCount(NEAR_SEAL, ";"); i++) + { + check_if_near(); + } + ScheduleDelayedEvent(0.1, "make_circle2"); + } + + void check_if_near() + { + string CUR_ENT = GetToken(NEAR_SEAL, i, ";"); + if ((G_DEVELOPER_MODE)) + { + LogMessage("ent_owner make_circle->check_if_near: found " + GetEntityName(CUR_ENT)); + } + if (!(/* TODO: $get_scriptflag */ $get_scriptflag(CUR_ENT, "hc", "name_exists"))) return; + if ((SET_DELETE)) return; + SET_DELETE = 1; + SendColoredMessage(GetOwner(), "Healing Circle: Cannot create one healing circle within another."); + } + + void make_circle2() + { + if ((SET_DELETE)) return; + // svplaysound: svplaysound 0 10 SOUND_SHOOT + EmitSound(0, 10, SOUND_SHOOT); + GiveMP(/* TODO: $neg */ $neg(MANA_COST)); + CallExternal(GetOwner(), "mana_drain"); + string HEAL_POWER = GetSkillLevel(GetOwner(), "spellcasting.divination"); + HEAL_POWER /= 2; + OWNER_LOC = "z"; + SpawnNPC(SPELL_SCRIPT, OWNER_LOC, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetStat(GetOwner(), "concentration"), HEAL_POWER + DeleteEntity(GetOwner()); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_CHARGE + EmitSound(0, 0, SOUND_CHARGE); + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_healing_wave.as b/scripts/angelscript/items/magic_hand_healing_wave.as new file mode 100644 index 00000000..5cf475b4 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_healing_wave.as @@ -0,0 +1,47 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandHealingWave : CGameScript +{ + int MELEE_ATK_DURATION; + int MELEE_RANGE; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + + MagicHandHealingWave() + { + SPELL_SKILL_REQUIRED = 10; + MELEE_RANGE = 1; + MELEE_ATK_DURATION = 3; + SPELL_PREPARE_TIME = 1; + SPELL_MPDRAIN = 20; + } + + void game_precache() + { + Precache("effects/sfx_wave"); + } + + void spell_spawn() + { + SetName("Healing Wave"); + SetDescription("A holy wave of Felewyn to bless your allies."); + } + + void spell_casted() + { + string OWNER_LOC = GetEntityOrigin(GetOwner()); + OWNER_LOC = "z"; + string L_OWNER_YAW = GetEntityProperty(GetOwner(), "viewangles"); + string L_OWNER_YAW = /* TODO: $vec.yaw */ $vec.yaw(L_OWNER_YAW); + SpawnNPC("effects/sfx_wave", OWNER_LOC, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), L_OWNER_YAW, GetSkillLevel(GetOwner(), "spellcasting.divination"), "spellcasting.divination" + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_holy_hammer.as b/scripts/angelscript/items/magic_hand_holy_hammer.as new file mode 100644 index 00000000..cd00fba9 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_holy_hammer.as @@ -0,0 +1,69 @@ +#pragma context server + +#include "items/blunt_base_onehanded.as" + +namespace MS +{ + +class MagicHandHolyHammer : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_AUGMENT; + int MELEE_RANGE; + string MELEE_STAT; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + int SPELL_SKILL_REQUIRED; + + MagicHandHolyHammer() + { + SPELL_SKILL_REQUIRED = 5; + BASE_LEVEL_REQ = 5; + MELEE_STAT = "spellcasting.divination"; + MODEL_VIEW = "viewmodels/v_1hblunts.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_BODY_OFS = 71; + ANIM_PREFIX = "maul"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.8; + MELEE_ATK_DURATION = 1.3; + MELEE_ENERGY = 2; + MELEE_DMG = 102; + MELEE_DMG_RANGE = 5; + MELEE_ACCURACY = 0.65; + MELEE_PARRY_AUGMENT = 0.1; + MELEE_DMG_TYPE = "holy"; + } + + void OnSpawn() override + { + string reg.spell.reqskill = BASE_LEVEL_REQ; + int reg.spell.fizzletime = 9999999; + float reg.spell.castsuccess = 1.0; + int reg.spell.preparetime = 3; + // TODO: registerspell + } + + void weapon_spawn() + { + SetName("Holy Hammer"); + SetDescription("Can't touch this."); + SetWeight(10); + SetSize(10); + SetValue(270); + SetHUDSprite("hand", "hammer"); + SetHUDSprite("trade", "maul"); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_ice_blast.as b/scripts/angelscript/items/magic_hand_ice_blast.as new file mode 100644 index 00000000..7a0e0b87 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_ice_blast.as @@ -0,0 +1,90 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandIceBlast : CGameScript +{ + int ANIM_CAST; + string EFFECT_SCRIPT; + int MELEE_ATK_DURATION; + float MELEE_HITCHANCE; + int MELEE_RANGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + int baseitem.canidle; + + MagicHandIceBlast() + { + ANIM_CAST = 11; + SOUND_SHOOT = "magic/frost_pulse.wav"; + MELEE_RANGE = 600; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 1; + SPELL_SKILL_REQUIRED = 18; + SPELL_PREPARE_TIME = 1; + SPELL_DAMAGE_TYPE = "cold"; + SPELL_ENERGYDRAIN = 1; + MELEE_ATK_DURATION = 2; + SPELL_MPDRAIN = 50; + SPELL_STAT = "none"; + EFFECT_SCRIPT = "monsters/summon/ice_blast"; + Precache(EFFECT_SCRIPT); + } + + void spell_spawn() + { + SetName("Freezing Sphere"); + SetDescription("A sphere of ice that freezes opponents"); + } + + void cast_start() + { + baseitem.canidle = 0; + start_spell_anim(); + } + + void cast_toss() + { + spell_casted(); + PlayOwnerAnim("critical", PLAYERANIM_CAST); + } + + void start_spell_anim() + { + ScheduleDelayedEvent(0.7, "bitem_set_can_idle"); + PlayViewAnim(17); + } + + void spell_casted() + { + string FREEZE_DURATION = GetSkillLevel(GetOwner(), "spellcasting.ice"); + if (FREEZE_DURATION < 10) + { + int FREEZE_DURATION = 10; + } + if (FREEZE_DURATION > 20) + { + int FREEZE_DURATION = 20; + } + string OWNER_ORG = GetEntityOrigin(GetOwner()); + string OWNER_ANG = GetEntityAngles(GetOwner()); + string OWNER_PITCH = /* TODO: $vec.pitch */ $vec.pitch(OWNER_ANG); + string OWNER_PITCH = /* TODO: $neg */ $neg(OWNER_PITCH); + string OWNER_YAW = /* TODO: $vec.yaw */ $vec.yaw(OWNER_ANG); + string OWNER_ROLL = /* TODO: $vec.roll */ $vec.roll(OWNER_ANG); + string OWNER_DEST = param2; + OWNER_DEST += /* TODO: $relpos */ $relpos(Vector3(OWNER_PITCH, OWNER_YAW, OWNER_ROLL), Vector3(0, 20000, 0)); + SpawnNPC(EFFECT_SCRIPT, /* TODO: $relpos */ $relpos(0, 32, 32), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), FREEZE_DURATION, OWNER_DEST, "spellcasting.ice" + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_ice_lance.as b/scripts/angelscript/items/magic_hand_ice_lance.as new file mode 100644 index 00000000..635a4e9f --- /dev/null +++ b/scripts/angelscript/items/magic_hand_ice_lance.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandIceLance : CGameScript +{ + int ANIM_CAST; + int ANIM_PREPARE; + float MELEE_ATK_DURATION; + float MELEE_DMG_DELAY; + int MELEE_RANGE; + int RANGED_FORCE; + string RANGED_PROJECTILE; + string SOUND_CHARGE; + string SOUND_SHOOT; + int SPELL_DAMAGE; + int SPELL_MPDRAIN; + int SPELL_NOISE; + float SPELL_PREPARE_TIME; + string SPELL_STAT; + + MagicHandIceLance() + { + ANIM_PREPARE = 7; + ANIM_CAST = 17; + SOUND_CHARGE = "none"; + SOUND_SHOOT = "magic/ice_strike.wav"; + MELEE_RANGE = 0; + MELEE_DMG_DELAY = 0.5; + MELEE_ATK_DURATION = 1.0; + RANGED_FORCE = 800; + RANGED_PROJECTILE = "proj_icelance"; + SPELL_DAMAGE = 400; + SPELL_NOISE = 500; + SPELL_PREPARE_TIME = 1.5; + SPELL_MPDRAIN = 15; + SPELL_STAT = "spellcasting.ice"; + } + + void spell_spawn() + { + SetName("Ice Lance"); + SetDescription("Fires deep freezing icicles."); + } + + void spell_casted() + { + CallExternal(GetOwner(), "ext_tossprojectile", RANGED_PROJECTILE, "view", "none", RANGED_FORCE, SPELL_DAMAGE, 0, "spellcasting.ice"); + // svplaysound: svplaysound game.sound.item game.sound.maxvol SOUND_SHOOT + EmitSound("game.sound.item", "game.sound.maxvol", SOUND_SHOOT); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_ice_shield.as b/scripts/angelscript/items/magic_hand_ice_shield.as new file mode 100644 index 00000000..a6f0b355 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_ice_shield.as @@ -0,0 +1,100 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandIceShield : CGameScript +{ + float ICESHIELD_FORMULA; + int ICESHIELD_RANGE; + string LAST_ATTACK; + int MANA_COST; + float MELEE_ATK_DURATION; + int NO_REGISTER; + string SOUND_SHOOT; + string SPELL_SCRIPT; + + MagicHandIceShield() + { + NO_REGISTER = 1; + SOUND_SHOOT = "magic/cast.wav"; + ICESHIELD_RANGE = 389; + MELEE_ATK_DURATION = 0.65; + MANA_COST = 50; + ICESHIELD_FORMULA = 0.5; + SPELL_SCRIPT = "effects/iceshield"; + } + + void spell_spawn() + { + SetName("Ice Shield"); + SetDescription("Provides 50% damage reduction for you or allies, for a time."); + LAST_ATTACK = (GetGameTime() + MELEE_ATK_DURATION); + } + + void game_attack1() + { + float TIME_DIFF = GetGameTime(); + TIME_DIFF -= LAST_ATTACK; + if (!(TIME_DIFF > MELEE_ATK_DURATION)) return; + LAST_ATTACK = GetGameTime(); + PlayViewAnim(ANIM_CAST); + PlayOwnerAnim("critical", PLAYERANIM_PREPARE); + if (GetEntityMP(GetOwner()) < MANA_COST) + { + SendColoredMessage(GetOwner(), "Insufficient mana."); + } + if (!(GetEntityMP(GetOwner()) >= MANA_COST)) return; + string SPELL_TARGET = "func_get_ray_target"(GetOwner(), ICESHIELD_RANGE); + if (!(IsEntityAlive(SPELL_TARGET))) + { + string SPELL_TARGET = GetEntityIndex(GetOwner()); + } + if (!(IsValidPlayer(SPELL_TARGET))) + { + if (GetRelationship(GetOwner()) != "ally") + { + } + string SPELL_TARGET = GetEntityIndex(GetOwner()); + } + int FINAL_DURATION = 150; + if (GetEntityIndex(SPELL_TARGET) != GetEntityIndex(GetOwner())) + { + int FINAL_DURATION = 412; + } + GiveMP(/* TODO: $neg */ $neg(MANA_COST)); + CallExternal(GetOwner(), "mana_drain"); + string ALREADY_SHIELDED = GetEntityProperty(SPELL_TARGET, "haseffect"); + if ((ALREADY_SHIELDED)) + { + CallExternal(SPELL_TARGET, "ext_refresh_ice_shield", FINAL_DURATION, GetEntityIndex(GetOwner())); + } + else + { + ApplyEffect(SPELL_TARGET, SPELL_SCRIPT, FINAL_DURATION, GetEntityIndex(GetOwner()), ICESHIELD_FORMULA); + } + } + + void func_get_ray_target() + { + string PLR = param1; + string PLR_ID = GetEntityIndex(PLR); + string PLR_ORG = GetEntityProperty(PLR, "eyepos"); + string PLR_ANG = GetEntityProperty(PLR, "viewangles"); + if (GetEntityProperty(PLR, "sitting") == 1) + { + PLR_ORG += "z"; + } + string TRACE_START = PLR_ORG; + string TRACE_END = PLR_ORG; + TRACE_END += /* TODO: $relpos */ $relpos(PLR_ANG, Vector3(0, param2, 0)); + string TRACED_LINE = TraceLine(TRACE_START, TRACE_END); + return; + return; + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_ice_shield_lesser.as b/scripts/angelscript/items/magic_hand_ice_shield_lesser.as new file mode 100644 index 00000000..e22124c2 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_ice_shield_lesser.as @@ -0,0 +1,33 @@ +#pragma context server + +#include "items/magic_hand_ice_shield.as" + +namespace MS +{ + +class MagicHandIceShieldLesser : CGameScript +{ + int CSKILL_REQ; + float ICESHIELD_FORMULA; + int MANA_COST; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + + MagicHandIceShieldLesser() + { + CSKILL_REQ = 1; + SPELL_ENERGYDRAIN = 25; + SPELL_MPDRAIN = 20; + MANA_COST = 20; + ICESHIELD_FORMULA = 0.75; + } + + void spell_spawn() + { + SetName("Lesser Ice Shield"); + SetDescription("Provides 25% damage reduction for you or allies, for a time."); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_ice_wall.as b/scripts/angelscript/items/magic_hand_ice_wall.as new file mode 100644 index 00000000..02713458 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_ice_wall.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandIceWall : CGameScript +{ + string EFFECT_SCRIPT; + int MELEE_ATK_DURATION; + float MELEE_HITCHANCE; + int MELEE_RANGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + + MagicHandIceWall() + { + SOUND_SHOOT = "magic/ice_strike.wav"; + MELEE_RANGE = 600; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 1; + SPELL_SKILL_REQUIRED = 4; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "cold"; + SPELL_ENERGYDRAIN = 75; + SPELL_MPDRAIN = 25; + SPELL_STAT = "spellcasting.ice"; + EFFECT_SCRIPT = "monsters/summon/summon_ice_wall"; + Precache(EFFECT_SCRIPT); + } + + void spell_spawn() + { + SetName("Ice Wall"); + SetDescription("Ice Wall - Impede your opponents progress"); + } + + void spell_casted() + { + string pos = param2; + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + ICE_WALLS += 1; + if (ICE_WALLS >= MAX_ICE_WALLS) + { + SendPlayerMessage("Too", "many ice walls present , cannot create more"); + } + if (!(ICE_WALLS < MAX_ICE_WALLS)) return; + string OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.ice"); + SpawnNPC(EFFECT_SCRIPT, pos, ScriptMode::Legacy); // params: GetEntityProperty(GetOwner(), "angles.yaw"), "firstcast", OWNER_SKILL + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_lightning_chain.as b/scripts/angelscript/items/magic_hand_lightning_chain.as new file mode 100644 index 00000000..394e4622 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_lightning_chain.as @@ -0,0 +1,134 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandLightningChain : CGameScript +{ + string CLIENT_SCRIPT_IDX; + string GAME_PVP; + string IDX_LIST; + string LIGHT_COLOR; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_HITCHANCE; + int MELEE_NOAUTOAIM; + int MELEE_RANGE; + string MELEE_TYPE; + int SCAN_RANGE; + float SCRIPT_SFX_DURATION; + string SCRIPT_SFX_PREP; + string SOUND_SHOOT; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + string TARGET_LIST; + + MagicHandLightningChain() + { + SOUND_SHOOT = "weather/Storm_exclamation.wav"; + MELEE_RANGE = 2000; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 1.0; + MELEE_TYPE = "strike-land"; + MELEE_DMG = 0; + MELEE_DMG_RANGE = 0; + MELEE_NOAUTOAIM = 1; + MELEE_DMG_DELAY = 0.4; + SPELL_SKILL_REQUIRED = 1; + SPELL_DAMAGE_TYPE = "lightning"; + SPELL_ENERGYDRAIN = 10; + SPELL_MPDRAIN = 5; + SPELL_STAT = "spellcasting.lightning"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart15.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + SCRIPT_SFX_PREP = "items/magic_hand_lightning_weak_cl"; + SCRIPT_SFX_DURATION = 0.5; + LIGHT_COLOR = Vector3(30, 30, 253); + SCAN_RANGE = 400; + } + + void spell_spawn() + { + SetName("Chain Lightning"); + SetDescription("Fires lightning bolts at multiple targets"); + } + + void spell_deploy() + { + if (!(true)) return; + ClientEvent("new", "all", "items/magic_hand_lightning_chain_cl", GetEntityIndex(GetOwner())); + CLIENT_SCRIPT_IDX = "game.script.last_sent_id"; + GAME_PVP = "game.pvp"; + } + + void spell_casted() + { + string SCAN_ORIGIN = GetEntityOrigin(GetOwner()); + if ((IsEntityAlive(param3))) + { + if (GetRelationship(param3) == "enemy") + { + if ((IsValidPlayer(param3))) + { + if (!(GAME_PVP)) + { + } + int EXIT_IF = 1; + } + } + if (!(EXIT_IF)) + { + } + string FIRST_TARGET = param3; + string SCAN_ORIGIN = GetEntityOrigin(param3); + } + CallExternal(GetOwner(), "ext_sphere_token", "enemy", SCAN_RANGE, SCAN_ORIGIN); + TARGET_LIST = GetEntityProperty(GetOwner(), "scriptvar"); + if ((IsEntityAlive(FIRST_TARGET))) + { + string TEMP_LIST = TARGET_LIST; + TARGET_LIST = FIRST_TARGET; + TARGET_LIST += ";"; + TARGET_LIST += TEMP_LIST; + } + if (!(TARGET_LIST != "none")) return; + string DMG_LIGHTNING = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + DMG_LIGHTNING *= 0.75; + XDoDamage(SCAN_ORIGIN, SCAN_RANGE, DMG_LIGHTNING, 0, GetOwner(), GetOwner(), "spellcasting.lightning", "lightning"); + IDX_LIST = ""; + for (int i = 0; i < GetTokenCount(TARGET_LIST, ";"); i++) + { + convert_targets_to_idxs(); + } + ClientEvent("update", "all", CLIENT_SCRIPT_IDX, "draw_beams", IDX_LIST); + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void convert_targets_to_idxs() + { + string CUR_TARGET = GetToken(TARGET_LIST, i, ";"); + if (IDX_LIST.length() > 0) IDX_LIST += ";"; + IDX_LIST += GetEntityIndex(CUR_TARGET); + } + + void spell_end() + { + ClientEvent("remove", "all", CLIENT_SCRIPT_IDX); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_lightning_chain_cl.as b/scripts/angelscript/items/magic_hand_lightning_chain_cl.as new file mode 100644 index 00000000..5273ab49 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_lightning_chain_cl.as @@ -0,0 +1,66 @@ +#pragma context server + +namespace MS +{ + +class MagicHandLightningChainCl : CGameScript +{ + string CASTER_INDEX; + string CL_HAND1; + string CL_HAND2; + string IDX_LIST; + + void client_activate() + { + CASTER_INDEX = param1; + } + + void draw_beams() + { + IDX_LIST = param1; + string FIRST_TARGET = GetToken(IDX_LIST, 0, ";"); + string FIRST_TARGET_ORG = /* TODO: $getcl */ $getcl(FIRST_TARGET, "origin"); + FIRST_TARGET_ORG += "z"; + if ("game.localplayer.index" == CASTER_INDEX) + { + if (!("game.localplayer.thirdperson")) + { + } + int USE_VIEWMODEL = 1; + } + if ((USE_VIEWMODEL)) + { + CL_HAND1 = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 16); + CL_HAND2 = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 35); + } + else + { + string CL_HAND1 = /* TODO: $getcl */ $getcl(CASTER_INDEX, "bonepos", 21); + string CL_HAND2 = /* TODO: $getcl */ $getcl(CASTER_INDEX, "bonepos", 38); + } + ClientEffect("beam_points", CL_HAND1, FIRST_TARGET_ORG, "lgtning.spr", 0.5, 5.0, 0.5, 255, 50, 30, Vector3(60, 60, 255)); + ClientEffect("beam_points", CL_HAND2, FIRST_TARGET_ORG, "lgtning.spr", 0.5, 5.0, 0.5, 255, 50, 30, Vector3(60, 60, 255)); + for (int i = 0; i < GetTokenCount(IDX_LIST, ";"); i++) + { + draw_beams_loop(); + } + } + + void draw_beams_loop() + { + string CUR_LOOP = i; + string NEXT_LOOP = CUR_LOOP; + NEXT_LOOP += 1; + if (!(NEXT_LOOP < GetTokenCount(IDX_LIST, ";"))) return; + string CUR_IDX = GetToken(IDX_LIST, CUR_LOOP, ";"); + string CUR_IDX_ORG = /* TODO: $getcl */ $getcl(CUR_IDX, "origin"); + CUR_IDX_ORG += "z"; + string NEXT_IDX = GetToken(IDX_LIST, NEXT_IDX, ";"); + string NEXT_IDX_ORG = /* TODO: $getcl */ $getcl(NEXT_IDX, "origin"); + NEXT_IDX_ORG += "z"; + ClientEffect("beam_points", CUR_IDX_ORG, NEXT_IDX_ORG, "lgtning.spr", 0.5, 5.0, 0.5, 255, 50, 30, Vector3(60, 60, 255)); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_lightning_disc.as b/scripts/angelscript/items/magic_hand_lightning_disc.as new file mode 100644 index 00000000..cc7ce0b1 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_lightning_disc.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandLightningDisc : CGameScript +{ + int ANIM_CAST; + int ANIM_PREPARE; + string SOUND_CHARGE; + string SOUND_SHOOT; + string SPELL_BASE_DMG; + int SPELL_BASE_SPEED; + string SPELL_DAMAGE_TYPE; + float SPELL_DMG_ADJ; + int SPELL_MPDRAIN; + int SPELL_NOISE; + float SPELL_PREPARE_TIME; + int SPELL_SPEED_ADJ; + string SPELL_STAT; + + MagicHandLightningDisc() + { + ANIM_PREPARE = 7; + ANIM_CAST = 17; + SOUND_CHARGE = "none"; + SOUND_SHOOT = "magic/ice_strike.wav"; + SPELL_NOISE = 500; + SPELL_PREPARE_TIME = 1.5; + SPELL_DAMAGE_TYPE = "lightning"; + SPELL_MPDRAIN = 20; + SPELL_STAT = "spellcasting.lightning"; + SPELL_BASE_SPEED = 600; + SPELL_SPEED_ADJ = 450; + SPELL_BASE_DMG = (1.5 * GetSkillLevel(GetOwner(), "spellcasting.lightning")); + SPELL_DMG_ADJ = 0.5; + } + + void spell_spawn() + { + SetName("Lightning Disc"); + SetDescription("Concentrated lightning that will slice through anything."); + } + + void spell_casted() + { + string L_SPEED = SPELL_BASE_SPEED; + L_SPEED += (CHARGE_MULT * SPELL_SPEED_ADJ); + string L_MULT = (CHARGE_MULT * SPELL_DMG_ADJ); + L_MULT += 1; + string L_DMG = (SPELL_BASE_DMG * L_MULT); + string L_VEL = /* TODO: $relvel */ $relvel(GetEntityProperty(GetOwner(), "viewangles"), Vector3(0, L_SPEED, 0)); + string L_POS = GetEntityProperty(GetOwner(), "eyepos"); + L_POS += Vector3(0, 0, -2); + SpawnNPC("effects/lightning_disc", L_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), L_VEL, L_DMG, "spellcasting.lightning" + // svplaysound: svplaysound game.sound.item game.sound.maxvol SOUND_SHOOT + EmitSound("game.sound.item", "game.sound.maxvol", SOUND_SHOOT); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + // svplaysound: svplaysound 0 0 ambient/alien_frantic.wav + EmitSound(0, 0, "ambient/alien_frantic.wav"); + // svplaysound: svplaysound 0 0 magic/bolt_end.wav + EmitSound(0, 0, "magic/bolt_end.wav"); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_lightning_storm.as b/scripts/angelscript/items/magic_hand_lightning_storm.as new file mode 100644 index 00000000..e725ee41 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_lightning_storm.as @@ -0,0 +1,102 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandLightningStorm : CGameScript +{ + int DRAIN_COUNT; + string EFFECT_DMG; + int MELEE_ATK_DURATION; + int MELEE_HITCHANCE; + int MELEE_NOAUTOAIM; + int MELEE_RANGE; + string MELEE_TYPE; + string SCRIPT_SFX_CAST; + string SCRIPT_SFX_PREP; + string SOUND_LOOP; + string SOUND_SHOOT; + string SOUND_SHOOT1; + string SOUND_SHOOT2; + string SOUND_SHOOT3; + string SPELL_DAMAGE_TYPE; + int SPELL_MPDRAIN; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + string STORM_ID; + string STORM_UP; + + MagicHandLightningStorm() + { + MELEE_TYPE = "strike-land"; + MELEE_RANGE = 1000; + MELEE_HITCHANCE = 100; + MELEE_ATK_DURATION = 1; + MELEE_NOAUTOAIM = 1; + SPELL_SKILL_REQUIRED = 10; + SCRIPT_SFX_PREP = "items/magic_hand_lightning_weak_cl"; + SPELL_DAMAGE_TYPE = "lightning"; + SPELL_MPDRAIN = 30; + SPELL_STAT = "spellcasting.lightning"; + SOUND_LOOP = "magic/shock_noloop.wav"; + SOUND_SHOOT = "debris/beamstart14.wav"; + SOUND_SHOOT1 = "debris/zap1.wav"; + SOUND_SHOOT2 = "debris/zap2.wav"; + SOUND_SHOOT3 = "debris/zap3.wav"; + SCRIPT_SFX_CAST = "effects/sfx_lightning"; + DRAIN_COUNT = 0; + EmitSound(GetOwner(), 0, SOUND_LOOP, 5); + } + + void game_precache() + { + Precache(SCRIPT_SFX_CAST); + } + + void spell_spawn() + { + SetName("Lightning Storm"); + SetDescription("An electrical storm"); + } + + void spell_casted() + { + string L_ATK_POS = param2; + DRAIN_COUNT = 0; + if ((STORM_UP)) + { + Effect("beam", "point", "lgtning.spr", 200, GetEntityOrigin(GetOwner()), L_ATK_POS, Vector3(255, 255, 0), 64, 10, 0.5); + CallExternal(STORM_ID, "sustain_storm", L_ATK_POS); + } + else + { + string MY_OWNER = GetEntityIndex(GetOwner()); + EFFECT_DMG = GetSkillLevel(MY_OWNER, "spellcasting.lightning"); + EFFECT_DMG *= 1.5; + SpawnNPC("monsters/summon/summon_lightning_storm", L_ATK_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(MY_OWNER, "angles.y"), EFFECT_DMG, 15, "spellcasting.lightning" + STORM_ID = GetEntityIndex(m_hLastCreated); + STORM_UP = 1; + } + // PlayRandomSound from: SOUND_SHOOT1, SOUND_SHOOT2, SOUND_SHOOT3 + array sounds = {SOUND_SHOOT1, SOUND_SHOOT2, SOUND_SHOOT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + string L_POS = param2; + CallExternal(STORM_ID, "sustain_storm", L_POS); + } + + void storm_ended() + { + STORM_UP = 0; + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_lightning_weak.as b/scripts/angelscript/items/magic_hand_lightning_weak.as new file mode 100644 index 00000000..a2244d77 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_lightning_weak.as @@ -0,0 +1,128 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandLightningWeak : CGameScript +{ + string LAST_CAST; + string LIGHT_COLOR; + int MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_HITCHANCE; + int MELEE_NOAUTOAIM; + int MELEE_RANGE; + string MELEE_TYPE; + string SCRIPT_SFX_CAST; + float SCRIPT_SFX_DURATION; + string SCRIPT_SFX_PREP; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + string script.npc; + int script.ramp; + + MagicHandLightningWeak() + { + SOUND_SHOOT = "magic/cast.wav"; + MELEE_RANGE = 500; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 1; + MELEE_TYPE = "strike-land"; + MELEE_DMG = 25; + MELEE_DMG_RANGE = 15; + MELEE_NOAUTOAIM = 1; + MELEE_DMG_DELAY = 0.4; + SPELL_SKILL_REQUIRED = 0; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "lightning_effect"; + SPELL_ENERGYDRAIN = 10; + SPELL_MPDRAIN = 1; + SPELL_STAT = "spellcasting.lightning"; + SCRIPT_SFX_CAST = "effects/sfx_lightning"; + SCRIPT_SFX_PREP = "items/magic_hand_lightning_weak_cl"; + SCRIPT_SFX_DURATION = 0.5; + LIGHT_COLOR = Vector3(30, 30, 253); + } + + void OnRepeatTimer() + { + if (IS_NEW_ITEM == 1) + { + } + SetRepeatDelay(Random(4.0, 8.0)); + if ((LAST_CAST).findFirst("LAST") == 0) + { + LAST_CAST = GetGameTime(); + } + string L_LAST_CAST = LAST_CAST; + L_LAST_CAST += 5.0; + if (GetGameTime() > L_LAST_CAST) + { + } + // TODO: splayviewanim ent_me ANIM_IDLE1 + } + + void game_precache() + { + Precache(SCRIPT_SFX_CAST); + } + + void spell_spawn() + { + SetName("Erratic Lightning"); + SetDescription("A highly erratic lightning bolt"); + script.ramp = 1; + } + + void spell_casted() + { + LAST_CAST = GetGameTime(); + string l.end = param2; + l.end += Vector3(0, 0, 4096); + string l.widthratio = GetSkillLevel(GetOwner(), "spellcasting.lightning.ratio"); + l.widthratio *= 3; + l.widthratio = max(0, min(1, l.widthratio)); + ClientEvent("new", "all_in_sight", SCRIPT_SFX_CAST, param2, l.end, SCRIPT_SFX_DURATION, l.widthratio); + if (param1 == "npc") + { + Effect("glow", param3, LIGHT_COLOR, 128, 1, 1); + script.npc = param3; + } + else + { + script.ramp = 1; + } + } + + void cast_damaged_other() + { + if (!(GetEntityProperty(script.npc, "alive"))) return; + if (script.npc != param1) + { + script.ramp = 1; + } + string l.dmg = param2; + l.dmg *= script.ramp; + SetDamage("dmg"); + string RAMP_LIMIT = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + RAMP_LIMIT /= 2; + if (RAMP_LIMIT < 3) + { + int RAMP_LIMIT = 3; + } + if (!(script.ramp < RAMP_LIMIT)) return; + script.ramp += 0.6; + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_lightning_weak_cl.as b/scripts/angelscript/items/magic_hand_lightning_weak_cl.as new file mode 100644 index 00000000..9916a786 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_lightning_weak_cl.as @@ -0,0 +1,165 @@ +#pragma context server + +#include "items/magic_hand_base_cl.as" + +namespace MS +{ + +class MagicHandLightningWeakCl : CGameScript +{ + int GLOW_DURATION; + string LIGHT_COLOR; + int LIGHT_RADIUS; + int OFS_NEG; + int OFS_POS; + int SKYLTNG_OFS; + string SPRITE_GLOW; + string SPRITE_LIGHTNING; + string handmagic.anim; + string handmagic.event; + string handmagic.handid; + string magichand.attachment; + string magichand.on; + + MagicHandLightningWeakCl() + { + SPRITE_LIGHTNING = "lgtning.spr"; + SPRITE_GLOW = "3dmflaora.spr"; + GLOW_DURATION = 3; + OFS_POS = 5; + OFS_NEG = -5; + LIGHT_RADIUS = 128; + LIGHT_COLOR = Vector3(100, 33, 253); + SKYLTNG_OFS = 256; + } + + void game_precache() + { + Precache(SPRITE_GLOW); + Precache(SPRITE_LIGHTNING); + } + + void cl_handmagic_beam() + { + if (param1 == "hands") + { + magichand.on = 1; + handmagic.handid = "game.localplayer.viewmodel.active.id"; + handmagic.anim = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "anim"); + handmagic.event = "handmagic_connecthands"; + } + else + { + if (param1 == "righthand") + { + magichand.on = 1; + handmagic.handid = "game.localplayer.viewmodel.active.id"; + handmagic.anim = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "anim"); + handmagic.event = "handmagic_righthand"; + } + else + { + magichand.on = 0; + } + } + } + + void handmagic_connecthands() + { + if (!(param1)) + { + handmagic_createbeam(16, 35); + handmagic_createbeam(19, 38); + handmagic_createbeam(22, 41); + handmagic_createbeam(25, 44); + handmagic_createbeam(28, 47); + } + else + { + create_sprite_2(1); + create_sprite_2(2); + } + } + + void handmagic_righthand() + { + if (!(param1)) + { + handmagic_createbeam_to_sky(35); + handmagic_createbeam_to_sky(38); + handmagic_createbeam_to_sky(41); + handmagic_createbeam_to_sky(44); + handmagic_createbeam_to_sky(47); + } + else + { + create_sprite_2(1); + } + } + + void game_render_transparent() + { + if (!(magichand.on == 1)) return; + int l.continue = 1; + if ("game.localplayer.viewmodel.active.id" != handmagic.handid) + { + int l.continue = 0; + } + if (handmagic.anim != /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "anim")) + { + int l.continue = 0; + } + if (!(l.continue)) + { + cl_handmagic_beam("stop"); + } + if (!(l.continue)) return; + handmagic_event(); + string l.lightpos = /* TODO: $getcl */ $getcl("game.localplayer.index", "origin"); + l.lightpos += Vector3(0, 0, 12); + ClientEffect("light", "new", l.lightpos, LIGHT_RADIUS, LIGHT_COLOR, 0.01); + } + + void handmagic_createbeam() + { + string l.pos.left = /* TODO: $getcl */ $getcl(handmagic.handid, "bonepos", param1); + string l.pos.right = /* TODO: $getcl */ $getcl(handmagic.handid, "bonepos", param2); + ClientEffect("beam_points", l.pos.left, l.pos.right, SPRITE_LIGHTNING, 0.001, 0.1, 0.1, 0.3, 0.1, 30, Vector3(1, 0.5, 2)); + } + + void handmagic_createbeam_to_sky() + { + if (!(RandomInt(0, 100) < 10)) return; + string l.pos.finger = /* TODO: $getcl */ $getcl(handmagic.handid, "bonepos", param1); + string l.pos.sky = l.pos.finger; + float l.ofs.x = Random(/* TODO: $neg */ $neg(SKYLTNG_OFS), SKYLTNG_OFS); + float l.ofs.y = Random(/* TODO: $neg */ $neg(SKYLTNG_OFS), SKYLTNG_OFS); + l.pos.sky += Vector3(l.ofs.x, l.ofs.y, 1024); + ClientEffect("beam_points", l.pos.finger, l.pos.sky, SPRITE_LIGHTNING, 0.1, 1, 0.1, 0.3, 0.1, 30, Vector3(1, 0.5, 2)); + } + + void game_prerender() + { + if (!(magichand.on == 1)) return; + handmagic_event(1); + } + + void create_sprite_2() + { + magichand.attachment = param1; + ClientEffect("frameent", "sprite", SPRITE_GLOW, Vector3(0, 0, 0), "setup_sprite_2"); + } + + void setup_sprite_2() + { + ClientEffect("frameent", "set_current_prop", "scale", 0.25); + ClientEffect("frameent", "set_current_prop", "rendermode", "add"); + ClientEffect("frameent", "set_current_prop", "renderamt", 128); + ClientEffect("frameent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("frameent", "set_current_prop", "follow", handmagic.handid); + ClientEffect("frameent", "set_current_prop", "body", magichand.attachment); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_poison.as b/scripts/angelscript/items/magic_hand_poison.as new file mode 100644 index 00000000..45266a70 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_poison.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandPoison : CGameScript +{ + float RANGED_ATK_DURATION; + int RANGED_COF; + float RANGED_DMG_DELAY; + int RANGED_FORCE; + string RANGED_PROJECTILE; + string SOUND_CHARGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + + MagicHandPoison() + { + SOUND_CHARGE = "bullchicken/bc_acid1.wav"; + SOUND_SHOOT = "bullchicken/bc_acid1.wav"; + RANGED_FORCE = 500; + RANGED_COF = 1; + RANGED_ATK_DURATION = 0.5; + RANGED_PROJECTILE = "proj_poison_spell"; + RANGED_DMG_DELAY = 0.5; + SPELL_SKILL_REQUIRED = 0; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "poison"; + SPELL_ENERGYDRAIN = 10; + SPELL_MPDRAIN = 5; + SPELL_STAT = "spellcasting.affliction"; + Precache("bullchicken/bc_acid1.wav"); + } + + void spell_spawn() + { + SetName("Poison"); + SetDescription("Poison - Afflicts your enemies with slow acting poison"); + Precache(SOUND_SHOOT1); + Precache(SOUND_SHOOT2); + } + + void cast_start() + { + SetGlobalVar("PASS_SPELL", "poison"); + PlayViewAnim("lift"); + PlayOwnerAnim("critical", PLAYERANIM_PREPARE); + EmitSound(GetOwner(), "game.sound.item", SOUND_CHARGE, "game.sound.maxvol"); + } + + void spell_casted() + { + // svplaysound: svplaysound game.sound.item game.sound.maxvol SOUND_SHOOT + EmitSound("game.sound.item", "game.sound.maxvol", SOUND_SHOOT); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_CHARGE + EmitSound(0, 0, SOUND_CHARGE); + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_poison_cloud.as b/scripts/angelscript/items/magic_hand_poison_cloud.as new file mode 100644 index 00000000..cb76164a --- /dev/null +++ b/scripts/angelscript/items/magic_hand_poison_cloud.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandPoisonCloud : CGameScript +{ + int CLOUD_COUNT; + int RANGED_ATK_DURATION; + string RANGED_COF; + float RANGED_DMG_DELAY; + int RANGED_FORCE; + string RANGED_PROJECTILE; + string SOUND_CHARGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + + MagicHandPoisonCloud() + { + SOUND_CHARGE = "magic/fireball_powerup.wav"; + SOUND_SHOOT = "magic/fireball_strike.wav"; + RANGED_FORCE = 1500; + RANGED_COF = "1;1"; + RANGED_ATK_DURATION = 1; + RANGED_PROJECTILE = "proj_poison_cloud"; + RANGED_DMG_DELAY = 0.5; + SPELL_SKILL_REQUIRED = 15; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "poison"; + SPELL_ENERGYDRAIN = 5; + SPELL_MPDRAIN = 40; + SPELL_STAT = "spellcasting.affliction"; + } + + void spell_spawn() + { + SetName("Poison Cloud"); + SetDescription("Creates a cloud of extremely deadly poison"); + CLOUD_COUNT = 0; + } + + void spell_casted() + { + CLOUD_COUNT += 1; + // svplaysound: svplaysound game.sound.item game.sound.maxvol SOUND_SHOOT + EmitSound("game.sound.item", "game.sound.maxvol", SOUND_SHOOT); + } + + void remove_hands() + { + DeleteEntity(GetOwner()); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + // svplaysound: svplaysound 0 0 SOUND_CHARGE + EmitSound(0, 0, SOUND_CHARGE); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_summon_base.as b/scripts/angelscript/items/magic_hand_summon_base.as new file mode 100644 index 00000000..388813ee --- /dev/null +++ b/scripts/angelscript/items/magic_hand_summon_base.as @@ -0,0 +1,105 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandSummonBase : CGameScript +{ + string EFFECT_DMG; + string EFFECT_DURATION; + string EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MAX_DMG; + int EFFECT_MINDURATION; + float EFFECT_MIN_DMG; + string EFFECT_SCRIPT; + int MELEE_ATK_DURATION; + float MELEE_HITCHANCE; + int MELEE_RANGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + string SPELL_DESC; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + string SPELL_NAME; + int SPELL_PREPARE_TIME; + string SPELL_STAT; + int baseitem.canidle; + + MagicHandSummonBase() + { + SPELL_NAME = "Some Spell"; + SPELL_DESC = "Some Description"; + SOUND_SHOOT = "magic/cast.wav"; + MELEE_RANGE = 200; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 1; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "summon"; + SPELL_ENERGYDRAIN = 20; + SPELL_MPDRAIN = 1; + SPELL_STAT = "none"; + EFFECT_MAXDURATION = 180; + EFFECT_MINDURATION = 10; + EFFECT_DURATION_STAT = GetStat(GetOwner(), "concentration.ratio"); + EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + EFFECT_MAX_DMG = 10; + EFFECT_MIN_DMG = 0.1; + EFFECT_DMG = GetSkillLevel(GetOwner(), "spellcasting.ratio"); + EFFECT_SCRIPT = "EFFECT_SCRIPT needs to be defined!"; + Precache(EFFECT_SCRIPT); + } + + void spell_spawn() + { + SetName(SPELL_NAME); + SetDescription("SPELL_NAME"); + } + + void cast_start() + { + baseitem.canidle = 0; + start_spell_anim(); + } + + void cast_toss() + { + spell_casted(); + PlayOwnerAnim("critical", PLAYERANIM_CAST); + } + + void start_spell_anim() + { + ScheduleDelayedEvent(1.1, "bitem_set_can_idle"); + PlayViewAnim(16); + } + + void summon_check() + { + string SPAWN_ORG = param1; + string reg.npcmove.endpos = SPAWN_ORG; + reg.npcmove.endpos += "z"; + int reg.npcmove.testonly = 0; + NpcMove(m_hLastCreated, "none"); + if ("game.ret.npcmove.dist" <= 0) + { + SendPlayerMessage(GetOwner(), "You cannot summon here"); + DeleteEntity(m_hLastCreated); + GiveMP(GetOwner()); + if ((SUMMON_UNQIUE)) + { + CallExternal(GetOwner(), "ext_unsummon_unique", SUMMON_UNIQUE_TAG); + } + } + else + { + CURRENT_SUMMONS += 1; + DropToFloor(); + } + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_summon_bear1.as b/scripts/angelscript/items/magic_hand_summon_bear1.as new file mode 100644 index 00000000..29cea291 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_summon_bear1.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "items/magic_hand_summon_base.as" + +namespace MS +{ + +class MagicHandSummonBear1 : CGameScript +{ + int EFFECT_DMG; + string EFFECT_DURATION; + string EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MAX_DMG; + int EFFECT_MINDURATION; + float EFFECT_MIN_DMG; + string EFFECT_SCRIPT; + int MELEE_ATK_DURATION; + string SPELL_DAMAGE_TYPE; + string SPELL_DESC; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + string SPELL_NAME; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SUMMON_UNIQUE_NAME; + string SUMMON_UNIQUE_TAG; + int SUMMON_UNQIUE; + + MagicHandSummonBear1() + { + SUMMON_UNQIUE = 1; + SUMMON_UNIQUE_TAG = "bear1"; + SUMMON_UNIQUE_NAME = "Bear Guardian"; + SPELL_NAME = "Summon Bear"; + SPELL_DESC = "Summons a Bear Guardian"; + MELEE_ATK_DURATION = 1; + SPELL_SKILL_REQUIRED = 20; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "summon"; + SPELL_ENERGYDRAIN = 20; + SPELL_MPDRAIN = 30; + EFFECT_MAXDURATION = 180; + EFFECT_MINDURATION = 10; + EFFECT_DURATION_STAT = GetStat(GetOwner(), "concentration.ratio"); + EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + EFFECT_MAX_DMG = 10; + EFFECT_MIN_DMG = 0.1; + EFFECT_DMG = 0; + EFFECT_SCRIPT = "monsters/summon/bear1"; + Precache(EFFECT_SCRIPT); + } + + void spell_casted() + { + if (CURRENT_SUMMONS >= MAX_SUMMONS) + { + SendPlayerMessage(GetOwner(), "Too many summoned monsters present, cannot create more."); + } + if (!(CURRENT_SUMMONS < MAX_SUMMONS)) return; + if ((SUMMON_UNQIUE)) + { + if ((GetEntityProperty(GetOwner(), "scriptvar")).findFirst(SUMMON_UNIQUE_TAG) >= 0) + { + } + SendColoredMessage(GetOwner(), "You may only summon one " + SUMMON_UNIQUE_NAME + " at a time."); + GiveMP(GetOwner()); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string SUM_DURATION = EFFECT_DURATION; + SUM_DURATION *= 2.0; + string SPAWN_ORG = param2; + SPAWN_ORG = "z"; + SPAWN_ORG += "z"; + SpawnNPC(EFFECT_SCRIPT, SPAWN_ORG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SUM_DURATION + summon_check(SPAWN_ORG); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_summon_fangtooth.as b/scripts/angelscript/items/magic_hand_summon_fangtooth.as new file mode 100644 index 00000000..be7fe761 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_summon_fangtooth.as @@ -0,0 +1,67 @@ +#pragma context server + +#include "items/magic_hand_summon_base.as" + +namespace MS +{ + +class MagicHandSummonFangtooth : CGameScript +{ + int EFFECT_DMG; + string EFFECT_DURATION; + string EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MAX_DMG; + int EFFECT_MINDURATION; + float EFFECT_MIN_DMG; + string EFFECT_SCRIPT; + int MELEE_ATK_DURATION; + string SPELL_DAMAGE_TYPE; + string SPELL_DESC; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + string SPELL_NAME; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + + MagicHandSummonFangtooth() + { + SPELL_NAME = "Summon Fangtooth"; + SPELL_DESC = "Summons a fast moving plague rat"; + MELEE_ATK_DURATION = 1; + SPELL_SKILL_REQUIRED = 12; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "summon"; + SPELL_ENERGYDRAIN = 20; + SPELL_MPDRAIN = 30; + EFFECT_MAXDURATION = 180; + EFFECT_MINDURATION = 10; + EFFECT_DURATION_STAT = GetStat(GetOwner(), "concentration.ratio"); + EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + EFFECT_MAX_DMG = 10; + EFFECT_MIN_DMG = 0.1; + EFFECT_DMG = 0; + EFFECT_SCRIPT = "monsters/summon/fangtooth"; + Precache(EFFECT_SCRIPT); + } + + void spell_casted() + { + if (CURRENT_SUMMONS >= MAX_SUMMONS) + { + SendPlayerMessage(GetOwner(), "Too many summoned monsters present, cannot create more."); + } + if (!(CURRENT_SUMMONS < MAX_SUMMONS)) return; + string SUM_DMG = GetSkillLevel(GetOwner(), "spellcasting"); + SUM_DMG /= 2; + string SUM_LEVEL = GetSkillLevel(GetOwner(), "spellcasting"); + string SUM_DURATION = EFFECT_DURATION; + SUM_DURATION *= 2.0; + string SPAWN_ORG = param2; + SpawnNPC(EFFECT_SCRIPT, SPAWN_ORG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SUM_DURATION, SUM_DMG + summon_check(SPAWN_ORG); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_summon_guard.as b/scripts/angelscript/items/magic_hand_summon_guard.as new file mode 100644 index 00000000..36c7b0c5 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_summon_guard.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/magic_hand_summon_base.as" + +namespace MS +{ + +class MagicHandSummonGuard : CGameScript +{ + string EFFECT_DURATION; + string EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MAX_DMG; + int EFFECT_MINDURATION; + int EFFECT_MIN_DMG; + string EFFECT_SCRIPT; + int MELEE_ATK_DURATION; + string SPELL_DAMAGE_TYPE; + string SPELL_DESC; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + string SPELL_NAME; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + + MagicHandSummonGuard() + { + SPELL_NAME = "Undead Guardian"; + SPELL_DESC = "Summons a slow but tough undead soldier"; + MELEE_ATK_DURATION = 3; + SPELL_SKILL_REQUIRED = 13; + SPELL_PREPARE_TIME = 5; + SPELL_DAMAGE_TYPE = "summon"; + SPELL_ENERGYDRAIN = 20; + SPELL_MPDRAIN = 100; + EFFECT_MAXDURATION = 360; + EFFECT_MINDURATION = 30; + EFFECT_DURATION_STAT = GetStat(GetOwner(), "concentration.ratio"); + EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + EFFECT_MAX_DMG = 20; + EFFECT_MIN_DMG = 5; + EFFECT_SCRIPT = "monsters/summon/skeleton_guard"; + } + + void spell_casted() + { + if (CURRENT_SUMMONS >= MAX_SUMMONS) + { + SendPlayerMessage(GetOwner(), "Too many summoned monsters present, cannot create more."); + } + if (!(CURRENT_SUMMONS < MAX_SUMMONS)) return; + string SUM_DMG = GetSkillLevel(GetOwner(), "spellcasting"); + SUM_DMG /= 8; + string SUM_DURATION = EFFECT_DURATION; + SUM_DURATION *= 4.0; + string SUM_LEVEL = GetSkillLevel(GetOwner(), "spellcasting"); + string SPAWN_ORG = param2; + SpawnNPC(EFFECT_SCRIPT, SPAWN_ORG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SUM_DURATION, SUM_DMG + summon_check(SPAWN_ORG); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_summon_rat.as b/scripts/angelscript/items/magic_hand_summon_rat.as new file mode 100644 index 00000000..046c939d --- /dev/null +++ b/scripts/angelscript/items/magic_hand_summon_rat.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "items/magic_hand_summon_base.as" + +namespace MS +{ + +class MagicHandSummonRat : CGameScript +{ + int EFFECT_DMG; + string EFFECT_DURATION; + string EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MAX_DMG; + int EFFECT_MINDURATION; + float EFFECT_MIN_DMG; + string EFFECT_SCRIPT; + string EFFECT_SCRIPT2; + int MELEE_ATK_DURATION; + string SPELL_DAMAGE_TYPE; + string SPELL_DESC; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + string SPELL_NAME; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + + MagicHandSummonRat() + { + SPELL_NAME = "Summon Rat"; + SPELL_DESC = "Summon a giant rat"; + MELEE_ATK_DURATION = 1; + SPELL_SKILL_REQUIRED = 3; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "summon"; + SPELL_ENERGYDRAIN = 20; + SPELL_MPDRAIN = 1; + EFFECT_MAXDURATION = 180; + EFFECT_MINDURATION = 10; + EFFECT_DURATION_STAT = GetStat(GetOwner(), "concentration.ratio"); + EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + EFFECT_MAX_DMG = 10; + EFFECT_MIN_DMG = 0.1; + EFFECT_DMG = 0; + EFFECT_SCRIPT = "monsters/summon/rat"; + EFFECT_SCRIPT2 = "monsters/summon/giant_rat"; + Precache(EFFECT_SCRIPT2); + } + + void spell_casted() + { + if (CURRENT_SUMMONS >= MAX_SUMMONS) + { + SendPlayerMessage(GetOwner(), "Too many summoned monsters present, cannot create more."); + } + if (!(CURRENT_SUMMONS < MAX_SUMMONS)) return; + string SUM_DMG = GetSkillLevel(GetOwner(), "spellcasting"); + SUM_DMG /= 5; + string SUM_LEVEL = GetSkillLevel(GetOwner(), "spellcasting"); + string SPAWN_ORG = param2; + if (SUM_LEVEL < 8) + { + SpawnNPC(EFFECT_SCRIPT, SPAWN_ORG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), EFFECT_DURATION, SUM_DMG + } + if (SUM_LEVEL >= 8) + { + SpawnNPC("monsters/summon/giant_rat", SPAWN_ORG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), EFFECT_DURATION, SUM_DMG + } + summon_check(SPAWN_ORG); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_summon_undead.as b/scripts/angelscript/items/magic_hand_summon_undead.as new file mode 100644 index 00000000..da06daee --- /dev/null +++ b/scripts/angelscript/items/magic_hand_summon_undead.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/magic_hand_summon_base.as" + +namespace MS +{ + +class MagicHandSummonUndead : CGameScript +{ + string EFFECT_DURATION; + string EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MAX_DMG; + int EFFECT_MINDURATION; + int EFFECT_MIN_DMG; + string EFFECT_SCRIPT; + int MELEE_ATK_DURATION; + string SPELL_DAMAGE_TYPE; + string SPELL_DESC; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + string SPELL_NAME; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + + MagicHandSummonUndead() + { + SPELL_NAME = "Summon Undead"; + SPELL_DESC = "Summon an undead minion"; + MELEE_ATK_DURATION = 1; + SPELL_SKILL_REQUIRED = 8; + SPELL_PREPARE_TIME = 5; + SPELL_DAMAGE_TYPE = "summon"; + SPELL_ENERGYDRAIN = 20; + SPELL_MPDRAIN = 10; + EFFECT_MAXDURATION = 360; + EFFECT_MINDURATION = 30; + EFFECT_DURATION_STAT = GetStat(GetOwner(), "concentration.ratio"); + EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + EFFECT_MAX_DMG = 20; + EFFECT_MIN_DMG = 5; + EFFECT_SCRIPT = "monsters/summon/skeleton"; + } + + void spell_casted() + { + if (CURRENT_SUMMONS >= MAX_SUMMONS) + { + SendPlayerMessage(GetOwner(), "Too many summoned monsters present, cannot create more."); + } + if (!(CURRENT_SUMMONS < MAX_SUMMONS)) return; + string SUM_DMG = GetSkillLevel(GetOwner(), "spellcasting"); + SUM_DMG /= 4; + string SUM_DURATION = EFFECT_DURATION; + SUM_DURATION *= 1.5; + string SUM_LEVEL = GetSkillLevel(GetOwner(), "spellcasting"); + string SPAWN_ORG = param2; + SpawnNPC(EFFECT_SCRIPT, SPAWN_ORG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SUM_DURATION, SUM_DMG + summon_check(SPAWN_ORG); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_test_spell.as b/scripts/angelscript/items/magic_hand_test_spell.as new file mode 100644 index 00000000..3f3732e9 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_test_spell.as @@ -0,0 +1,90 @@ +#pragma context client + +namespace MS +{ + +class MagicHandTestSpell : CGameScript +{ + string CYCLE_ANGLE; + float FX_DURATION; + int REPULSE_RADIUS; + string SPRITE_NAME; + int SPRITE_VELOCITY; + string START_POS; + + MagicHandTestSpell() + { + SPRITE_NAME = "3dmflaora.spr"; + Precache(SPRITE_NAME); + FX_DURATION = 1.5; + SPRITE_VELOCITY = 10; + REPULSE_RADIUS = 256; + } + + void spriteify() + { + for (int i = 0; i < 36; i++) + { + createsprite(); + } + } + + void createsprite() + { + string l.pos = START_POS; + if (CYCLE_ANGLE == "CYCLE_ANGLE") + { + CYCLE_ANGLE = 0; + } + CYCLE_ANGLE += 10; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 10, 36)); + ClientEffect("tempent", "sprite", SPRITE_NAME, l.pos, "setup_sprite1_sparkle", "sprite_update"); + } + + void client_activate() + { + START_POS = /* TODO: $getcl */ $getcl(param1, "origin"); + } + + void new_cast() + { + START_POS = /* TODO: $getcl */ $getcl(param1, "origin"); + } + + void setup_sprite1_sparkle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(254, 254, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "update", 1); + string OWNER_ORIGIN = /* TODO: $getcl */ $getcl(GetOwner(), "origin"); + string SPRITE_ORG = "game.tempent.origin"; + string SPRITE_ANG = (SPRITE_ORG - OWNER_ORIGIN).Normalize(); + string SPRITE_ANG_X = (SPRITE_ANG).x; + string SPRITE_ANG_Y = (SPRITE_ANG).y; + string SPRITE_ANG_Z = (SPRITE_ANG).z; + SPRITE_ANG_X *= SPRITE_VELOCITY; + SPRITE_ANG_Y *= SPRITE_VELOCITY; + SPRITE_ANG_Z *= SPRITE_VELOCITY; + Vector3 SPRITE_SPEED = Vector3(SPRITE_ANG_X, SPRITE_ANG_Y, SPRITE_ANG_Z); + ClientEffect("tempent", "set_current_prop", "velocity", SPRITE_SPEED); + } + + void sprite_update() + { + if ((Distance(MY_OWNER_ORIGIN, "game.tempent.origin") + "=>" + REPULSE_RADIUS)) + { + ClientEffect("tempent", "set_current_prop", "fadeout", 0.5); + } + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_trollcano.as b/scripts/angelscript/items/magic_hand_trollcano.as new file mode 100644 index 00000000..e2418c5f --- /dev/null +++ b/scripts/angelscript/items/magic_hand_trollcano.as @@ -0,0 +1,69 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandTrollcano : CGameScript +{ + int EFFECT_DURATION; + int EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MAX_DMG; + int EFFECT_MINDURATION; + int EFFECT_MIN_DMG; + string EFFECT_SCRIPT; + int MELEE_ATK_DURATION; + float MELEE_HITCHANCE; + int MELEE_RANGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + + MagicHandTrollcano() + { + SOUND_SHOOT = "magic/cast.wav"; + MELEE_RANGE = 600; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 1; + SPELL_SKILL_REQUIRED = 1; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "fire"; + SPELL_ENERGYDRAIN = 200; + SPELL_MPDRAIN = 1; + SPELL_STAT = "spellcasting.fire"; + EFFECT_MAXDURATION = 30; + EFFECT_MINDURATION = 8; + EFFECT_DURATION_STAT = 1; + EFFECT_DURATION = 20; + EFFECT_MAX_DMG = 10; + EFFECT_MIN_DMG = 3; + EFFECT_SCRIPT = "monsters/summon/volcano_troll"; + Precache(EFFECT_SCRIPT); + } + + void spell_spawn() + { + SetName("Trollcano"); + SetDescription("Trollllololol"); + } + + void spell_casted() + { + string pos = param2; + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + SpawnNPC(EFFECT_SCRIPT, pos, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_turn_undead.as b/scripts/angelscript/items/magic_hand_turn_undead.as new file mode 100644 index 00000000..25ea0058 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_turn_undead.as @@ -0,0 +1,110 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandTurnUndead : CGameScript +{ + string HOLY_DMG; + string LIGHT_COLOR; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_HITCHANCE; + int MELEE_NOAUTOAIM; + int MELEE_RANGE; + string MELEE_TYPE; + string SCRIPT_SFX_CAST; + float SCRIPT_SFX_DURATION; + string SCRIPT_SFX_PREP; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + string TARGET_NPC; + int TARGET_VALID; + + MagicHandTurnUndead() + { + SOUND_SHOOT = "fvox/hiss.wav"; + MELEE_RANGE = 500; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 1.5; + MELEE_TYPE = "holy"; + MELEE_DMG = 0; + MELEE_DMG_RANGE = 0; + MELEE_NOAUTOAIM = 1; + MELEE_DMG_DELAY = 0.4; + SPELL_SKILL_REQUIRED = 1; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "holy"; + SPELL_ENERGYDRAIN = 10; + SPELL_MPDRAIN = 2; + SPELL_STAT = "spellcasting.divination"; + SCRIPT_SFX_CAST = "effects/sfx_lightning"; + Precache(SCRIPT_SFX_CAST); + SCRIPT_SFX_PREP = "items/magic_hand_lightning_weak_cl"; + SCRIPT_SFX_DURATION = 0.5; + LIGHT_COLOR = Vector3(255, 255, 0); + } + + void spell_spawn() + { + SetName("Rebuke Undead"); + SetDescription("Sets the wrath of the divine upon the Unholy"); + } + + void spell_casted() + { + string DEMON_ON = GetEntityProperty(GetOwner(), "scriptvar"); + if ((DEMON_ON)) + { + SendPlayerMessage("You", "cannot use divine magic while under the influence of Demon Blood!"); + spell_end(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(TARGET_VALID)) return; + // svplaysound: svplaysound 2 5 SOUND_SHOOT + EmitSound(2, 5, SOUND_SHOOT); + TARGET_VALID = 0; + } + + void game_dodamage() + { + if (!(param1)) return; + TARGET_VALID = 1; + TARGET_NPC = param2; + if (/* TODO: $get_takedmg */ $get_takedmg(TARGET_NPC, "holy") == 0) + { + TARGET_VALID = 0; + } + if (TARGET_VALID == 0) + { + if ((param2 !is null) == 1) + { + SendPlayerMessage("Holy", "Light only affects the Undead and Unholy."); + } + } + if (!(TARGET_VALID)) return; + HOLY_DMG = GetSkillLevel(GetOwner(), "spellcasting.divination"); + HOLY_DMG *= 0.5; + string MY_OWNER = GetEntityIndex(GetOwner()); + CallExternal(TARGET_NPC, "turn_undead", HOLY_DMG, MY_OWNER); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_SHOOT + EmitSound(0, 0, SOUND_SHOOT); + } + +} + +} diff --git a/scripts/angelscript/items/magic_hand_volcano.as b/scripts/angelscript/items/magic_hand_volcano.as new file mode 100644 index 00000000..8bcec690 --- /dev/null +++ b/scripts/angelscript/items/magic_hand_volcano.as @@ -0,0 +1,95 @@ +#pragma context server + +#include "items/magic_hand_base.as" + +namespace MS +{ + +class MagicHandVolcano : CGameScript +{ + string EFFECT_DMG; + string EFFECT_DURATION; + string EFFECT_DURATION_STAT; + int EFFECT_MAXDURATION; + int EFFECT_MINDURATION; + string EFFECT_SCRIPT; + int MELEE_ATK_DURATION; + float MELEE_HITCHANCE; + int MELEE_RANGE; + string SOUND_SHOOT; + string SPELL_DAMAGE_TYPE; + int SPELL_ENERGYDRAIN; + int SPELL_MPDRAIN; + int SPELL_PREPARE_TIME; + int SPELL_SKILL_REQUIRED; + string SPELL_STAT; + int baseitem.canidle; + + MagicHandVolcano() + { + SOUND_SHOOT = "magic/cast.wav"; + MELEE_RANGE = 600; + MELEE_HITCHANCE = 1.0; + MELEE_ATK_DURATION = 4; + SPELL_SKILL_REQUIRED = 15; + SPELL_PREPARE_TIME = 2; + SPELL_DAMAGE_TYPE = "fire"; + SPELL_ENERGYDRAIN = 200; + SPELL_MPDRAIN = 80; + SPELL_STAT = "spellcasting.fire"; + EFFECT_MAXDURATION = 30; + EFFECT_MINDURATION = 8; + EFFECT_DURATION_STAT = GetStat(GetOwner(), "concentration.ratio"); + EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + EFFECT_SCRIPT = "monsters/summon/summon_volcano"; + EFFECT_DMG = GetSkillLevel(GetOwner(), "spellcasting.fire"); + EFFECT_DMG += 100; + } + + void game_precache() + { + Precache(EFFECT_SCRIPT); + } + + void spell_spawn() + { + SetName("Summon Volcano"); + SetDescription("A magical weapon of mass destruction"); + } + + void spell_casted() + { + string pos = param2; + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + SpawnNPC(EFFECT_SCRIPT, pos, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), EFFECT_DMG, EFFECT_DURATION, "spellcasting.fire" + } + + void cast_start() + { + baseitem.canidle = 0; + start_spell_anim(); + } + + void cast_toss() + { + spell_casted(); + PlayOwnerAnim("critical", PLAYERANIM_CAST); + } + + void start_spell_anim() + { + ScheduleDelayedEvent(1, "bitem_set_can_idle"); + PlayViewAnim(16); + } + + void bitem_set_can_idle() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/mana_bravery.as b/scripts/angelscript/items/mana_bravery.as new file mode 100644 index 00000000..b23866e1 --- /dev/null +++ b/scripts/angelscript/items/mana_bravery.as @@ -0,0 +1,60 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaBravery : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + ManaBravery() + { + DRINK_TYPE = "effect"; + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_AMOUNT = 5; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Bravery Potion"); + SetDescription("This prevents XP/Gold loss on your next death"); + SetWeight(1); + SetSize(2); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void drink_effect() + { + CallExternal(GetOwner(), "ext_bravery"); + SendInfoMsg("all", GetEntityName(GetOwner()) + " Has downed a Potion of Bravery"); + } + +} + +} diff --git a/scripts/angelscript/items/mana_demon_blood.as b/scripts/angelscript/items/mana_demon_blood.as new file mode 100644 index 00000000..34acefd0 --- /dev/null +++ b/scripts/angelscript/items/mana_demon_blood.as @@ -0,0 +1,104 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaDemonBlood : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaDemonBlood() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Vial of Demon Blood"); + SetDescription("Infuses you with the soul of a demon for a time, but at a price."); + SetWeight(1); + SetSize(1); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + ApplyEffect(GetEntityIndex(GetOwner()), "effects/demon_blood", 60.0, -5); + // TODO: hud.addstatusicon ent_owner hud/status/status_demon demon_blood 60.0 + drink_now(); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_faura.as b/scripts/angelscript/items/mana_faura.as new file mode 100644 index 00000000..b1bd2ee0 --- /dev/null +++ b/scripts/angelscript/items/mana_faura.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaFaura : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + ManaFaura() + { + DRINK_TYPE = "effect"; + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_AMOUNT = 5; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Fire Aura Potion"); + SetDescription("This potion wreaths you in a protective aura of fire"); + SetWeight(1); + SetSize(2); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void drink_effect() + { + Effect("screenfade", GetOwner(), 2.0, 0.5, Vector3(255, 0, 0), 255, "fadeout"); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 256, 1.0, 1.0); + string AURA_DOT = GetSkillLevel(GetOwner(), "spellcasting.fire"); + AURA_DOT *= 0.5; + CallExternal(GetOwner(), "ext_fire_aura_activate", AURA_DOT, 48); + CallExternal(GetOwner(), "ext_register_element", "faurp", "cold", 50); + } + +} + +} diff --git a/scripts/angelscript/items/mana_fbrand.as b/scripts/angelscript/items/mana_fbrand.as new file mode 100644 index 00000000..d5c6d900 --- /dev/null +++ b/scripts/angelscript/items/mana_fbrand.as @@ -0,0 +1,65 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaFbrand : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + ManaFbrand() + { + DRINK_TYPE = "effect"; + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_AMOUNT = 3; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Fire Brand Potion"); + SetDescription("This potion adds burning damage to all attacks and increases fire damage"); + SetWeight(1); + SetSize(2); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void drink_effect() + { + CallExternal(GetOwner(), "ext_dmg_adjust", "fire", 2.0); + CallExternal(GetOwner(), "ext_dmg_add_dot", "fire", 1.0); + Effect("screenfade", GetOwner(), 2.0, 0.5, Vector3(255, 0, 0), 255, "fadeout"); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 256, 1.0, 1.0); + EmitSound(GetOwner(), 0, "magic/volcano_start.wav", 10); + SendColoredMessage(GetOwner(), "Fire damage added for all attacks."); + SendColoredMessage(GetOwner(), "Fire damage increased."); + } + +} + +} diff --git a/scripts/angelscript/items/mana_flesheater1.as b/scripts/angelscript/items/mana_flesheater1.as new file mode 100644 index 00000000..c0d0d467 --- /dev/null +++ b/scripts/angelscript/items/mana_flesheater1.as @@ -0,0 +1,149 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class ManaFlesheater1 : CGameScript +{ + int ABORT_USE; + int AFFLIC_REQ; + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + string ATTACK_DELAY; + int DRINK_TIME; + int ITEM_MODEL_VIEW_IDX; + string ITEM_TO_GIVE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + int SKILL_REQ; + string SOUND_DRINK; + + ManaFlesheater1() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TIME = 3; + ABORT_USE = 0; + SKILL_REQ = 15; + AFFLIC_REQ = 10; + ITEM_TO_GIVE = "blunt_gauntlets_fe1"; + } + + void item_spawn() + { + SetName("Venom Claw Potion"); + SetDescription("This potion infuses you with the power of a Flesheater."); + SetWeight(1); + SetSize(2); + SetValue(1500); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + SetHand("both"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + SetWorldModel(MODEL_WORLD); + SetViewModel(MODEL_VIEW); + item_spawn(); + } + + void OnPickup(CBaseEntity@ player) override + { + PlayViewAnim(ANIM_LIFT); + } + + void game_attack1() + { + if (!(GetGameTime() > ATTACK_DELAY)) return; + ATTACK_DELAY = GetGameTime(); + ATTACK_DELAY += DRINK_TIME; + string OWNER_SKILL = GetSkillLevel(GetOwner(), "martialarts"); + if (OWNER_SKILL < SKILL_REQ) + { + string S_REQ = "("; + S_REQ += SKILL_REQ; + S_REQ += ")"; + SendColoredMessage(GetOwner(), "You lack the Martial Arts skill to use the Flesheater Gauntlets. " + S_REQ); + int EXIT_SUB = 1; + } + if (OWNER_SKILL >= SKILL_REQ) + { + check_use(); + if ((ABORT_USE)) + { + ABORT_USE = 0; + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + ScheduleDelayedEvent(0.1, "drink_pot"); + } + + void drink_pot() + { + // TODO: splayviewanim ent_me ANIM_DRINK + DRINK_TIME("activate_pot"); + } + + void activate_pot() + { + CallExternal(GAME_MASTER, "give_item_delayed", GetEntityIndex(GetOwner()), ITEM_TO_GIVE, 0.5); + ScheduleDelayedEvent(0.1, "remove_pot"); + } + + void remove_pot() + { + DeleteEntity(GetOwner()); + } + + void check_use() + { + if (GetSkillLevel(GetOwner(), "spellcasting.affliction") < AFFLIC_REQ) + { + ABORT_USE = 1; + string S_REQ = "("; + S_REQ += AFFLIC_REQ; + S_REQ += ")"; + SendColoredMessage(GetOwner(), "You lack the Affliction Magic skill to use the Flesheater Gauntlets. " + S_REQ); + } + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + ATTACK_DELAY = GetGameTime(); + ATTACK_DELAY += 1.0; + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_flesheater2.as b/scripts/angelscript/items/mana_flesheater2.as new file mode 100644 index 00000000..bbd4d20f --- /dev/null +++ b/scripts/angelscript/items/mana_flesheater2.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "items/mana_flesheater1.as" + +namespace MS +{ + +class ManaFlesheater2 : CGameScript +{ + int ABORT_USE; + int AFFLIC_REQ; + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_TIME; + int ITEM_MODEL_VIEW_IDX; + string ITEM_TO_GIVE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + int SKILL_REQ; + string SOUND_DRINK; + + ManaFlesheater2() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TIME = 3; + ABORT_USE = 0; + SKILL_REQ = 20; + AFFLIC_REQ = 20; + ITEM_TO_GIVE = "blunt_gauntlets_fe2"; + } + + void item_spawn() + { + SetName("Greater Venom Claw Potion"); + SetDescription("This potion infuses you with power of a Flesheater."); + SetWeight(1); + SetSize(2); + SetValue(3000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + +} + +} diff --git a/scripts/angelscript/items/mana_font.as b/scripts/angelscript/items/mana_font.as new file mode 100644 index 00000000..b1b3c698 --- /dev/null +++ b/scripts/angelscript/items/mana_font.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaFont : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + ManaFont() + { + DRINK_TYPE = "effect"; + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Mana Font Potion"); + SetDescription("This potion grants rapid mana regeneration , for a time"); + SetWeight(1); + SetSize(2); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void drink_effect() + { + Effect("screenfade", GetOwner(), 2.0, 0.5, Vector3(0, 0, 255), 255, "fadeout"); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 256, 1.0, 1.0); + CallExternal(GetOwner(), "ext_set_status_flag", "mana_pot", "mana_regen", 1, -1, "The mana font potion effect expires."); + } + +} + +} diff --git a/scripts/angelscript/items/mana_forget.as b/scripts/angelscript/items/mana_forget.as new file mode 100644 index 00000000..2bb0cf6f --- /dev/null +++ b/scripts/angelscript/items/mana_forget.as @@ -0,0 +1,114 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaForget : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaForget() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Forgetfulness Potion"); + SetDescription("With this potion you may free up a single spell slot"); + SetWeight(2); + SetSize(2); + SetValue(250); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + Effect("screenfade", GetOwner(), -1, 3, Vector3(10, 10, 10), 255, "fadeout"); + CallExternal(GAME_MASTER, "forget_spell", GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner())); + drink_now(); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_BREATHFAST2') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + if (!(MODEL_VIEW_IDX > 0)) return; + ScheduleDelayedEvent(0.1, "bw_setup_model"); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + + void bw_setup_model() + { + // TODO: setviewmodelprop ent_me submodel 0 MODEL_VIEW_IDX + } + +} + +} diff --git a/scripts/angelscript/items/mana_gprotection.as b/scripts/angelscript/items/mana_gprotection.as new file mode 100644 index 00000000..f8bd8b56 --- /dev/null +++ b/scripts/angelscript/items/mana_gprotection.as @@ -0,0 +1,103 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaGprotection : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaGprotection() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Greater Protection Potion"); + SetDescription("Grants 60% damage reduction , for a lengthy time."); + SetWeight(1); + SetSize(1); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + ApplyEffect(GetOwner(), "effects/protection", 5400, 0.4); + drink_now(); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_immune_cold.as b/scripts/angelscript/items/mana_immune_cold.as new file mode 100644 index 00000000..5cde7eab --- /dev/null +++ b/scripts/angelscript/items/mana_immune_cold.as @@ -0,0 +1,107 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaImmuneCold : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaImmuneCold() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Cold Immunity Potion"); + SetDescription("Makes the imbiber immune to freezing effects , for a time"); + SetWeight(1); + SetSize(1); + SetValue(2000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + CallExternal(GetEntityIndex(GetOwner()), "ext_register_element", "colip", "cold", 100); + SendPlayerMessage(A, "magical fire of infinite warmth infuses with your soul."); + drink_now(); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_BREATHFAST2') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_immune_fire.as b/scripts/angelscript/items/mana_immune_fire.as new file mode 100644 index 00000000..12530588 --- /dev/null +++ b/scripts/angelscript/items/mana_immune_fire.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaImmuneFire : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaImmuneFire() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Fire Immunity Potion"); + SetDescription("Brewed from the heart blood of an Efreeti"); + SetWeight(1); + SetSize(1); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + CallExternal(GetEntityIndex(GetOwner()), "ext_register_element", "firip", "fire", 100); + drink_now(); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_BREATHFAST2') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_immune_lightning.as b/scripts/angelscript/items/mana_immune_lightning.as new file mode 100644 index 00000000..8ea04c55 --- /dev/null +++ b/scripts/angelscript/items/mana_immune_lightning.as @@ -0,0 +1,108 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaImmuneLightning : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaImmuneLightning() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Lodestone Juice Potion"); + SetDescription("Extracted from a mystical electrical stone"); + SetWeight(1); + SetSize(1); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + CallExternal(GetEntityIndex(GetOwner()), "ext_register_element", "ligip", "lightning", 100); + ClientEvent("new", "all", "effects/sfx_lightning_shield", GetEntityIndex(GetOwner()), 128, 3.0, 0); + EmitSound(GetOwner(), 0, "magic/bolt_end.wav", 10); + drink_now(); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_BREATHFAST2') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_immune_poison.as b/scripts/angelscript/items/mana_immune_poison.as new file mode 100644 index 00000000..ce80f348 --- /dev/null +++ b/scripts/angelscript/items/mana_immune_poison.as @@ -0,0 +1,107 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaImmunePoison : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaImmunePoison() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Antidote"); + SetDescription("Grantes immunity to poison , for a time."); + SetWeight(1); + SetSize(1); + SetValue(500); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + CallExternal(GetEntityIndex(GetOwner()), "ext_register_element", "poiip", "poison", 100); + RemoveEffect("poison"); + drink_now(); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_BREATHFAST2') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_leadfoot.as b/scripts/angelscript/items/mana_leadfoot.as new file mode 100644 index 00000000..6247ac74 --- /dev/null +++ b/scripts/angelscript/items/mana_leadfoot.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaLeadfoot : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + ManaLeadfoot() + { + DRINK_TYPE = "effect"; + MODEL_BODY_OFS = 24; + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Leadfoot Potion"); + SetDescription("This potion makes you immune to being thrown by opponents."); + SetWeight(1); + SetSize(2); + SetValue(500); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void drink_effect() + { + SetScriptFlags(GetOwner(), "add", "pot_stability", "nopush", 1, -1, "The stability magic fades..."); + SendPlayerMessage("You", "feel unmovable."); + } + +} + +} diff --git a/scripts/angelscript/items/mana_lleadfoot.as b/scripts/angelscript/items/mana_lleadfoot.as new file mode 100644 index 00000000..dd563675 --- /dev/null +++ b/scripts/angelscript/items/mana_lleadfoot.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaLleadfoot : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + ManaLleadfoot() + { + DRINK_TYPE = "effect"; + MODEL_BODY_OFS = 24; + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Lesser Leadfoot Potion"); + SetDescription("This potion reduces your opponents ability to fling you about"); + SetWeight(1); + SetSize(2); + SetValue(100); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void drink_effect() + { + SendPlayerMessage("You", "feel your center of gravity increase."); + CallExternal(GetOwner(), "ext_lesser_leadfoot", 0.25); + } + +} + +} diff --git a/scripts/angelscript/items/mana_lsb.as b/scripts/angelscript/items/mana_lsb.as new file mode 100644 index 00000000..98f893de --- /dev/null +++ b/scripts/angelscript/items/mana_lsb.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaLsb : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + float SPEED_RATIO; + + ManaLsb() + { + DRINK_TYPE = "effect"; + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + SPEED_RATIO = 0.75; + } + + void drink_spawn() + { + SetName("Lesser Swift Blade Potion"); + SetDescription("This potion increases your base attack speed 25%"); + SetWeight(1); + SetSize(2); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + SetHand("both"); + } + + void drink_effect() + { + Effect("screenfade", GetOwner(), 2.0, 0.5, Vector3(255, 0, 0), 255, "fadeout"); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 256, 1.0, 1.0); + CallExternal(GetOwner(), "ext_set_swift_blade", SPEED_RATIO); + } + +} + +} diff --git a/scripts/angelscript/items/mana_mpotion.as b/scripts/angelscript/items/mana_mpotion.as new file mode 100644 index 00000000..057792ae --- /dev/null +++ b/scripts/angelscript/items/mana_mpotion.as @@ -0,0 +1,58 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaMpotion : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaMpotion() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 0; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 24; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 4; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Mana Potion"); + SetDescription("Restores Magical Energies"); + SetWeight(1); + SetSize(2); + SetValue(500); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "bpot"); + } + +} + +} diff --git a/scripts/angelscript/items/mana_paura.as b/scripts/angelscript/items/mana_paura.as new file mode 100644 index 00000000..637ffadf --- /dev/null +++ b/scripts/angelscript/items/mana_paura.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaPaura : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + ManaPaura() + { + DRINK_TYPE = "effect"; + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_AMOUNT = 5; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Poison Aura Potion"); + SetDescription("This potion wreaths you in a poisonous mist"); + SetWeight(1); + SetSize(2); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void drink_effect() + { + Effect("screenfade", GetOwner(), 2.0, 0.5, Vector3(255, 0, 0), 255, "fadeout"); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 256, 1.0, 1.0); + string AURA_DOT = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + AURA_DOT *= 0.5; + CallExternal(GetOwner(), "ext_poison_aura_activate", AURA_DOT, 64); + CallExternal(GetOwner(), "ext_register_element", "paurp", "poison", 50); + } + +} + +} diff --git a/scripts/angelscript/items/mana_prot_spiders.as b/scripts/angelscript/items/mana_prot_spiders.as new file mode 100644 index 00000000..6e9ca047 --- /dev/null +++ b/scripts/angelscript/items/mana_prot_spiders.as @@ -0,0 +1,105 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaProtSpiders : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaProtSpiders() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Spider Protection Potion"); + SetDescription("This bottle seems to be full of small dead spider bits"); + SetWeight(1); + SetSize(1); + SetValue(800); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + drink_now(); + CallExternal(GetOwner(), "ext_spider_protect", 900.0, 0.1, "pspidpot"); + // TODO: hud.addstatusicon ent_owner hud/status/alpha_spiderprot status_ps 900 + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + DeleteEntity(GetOwner()); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_protection.as b/scripts/angelscript/items/mana_protection.as new file mode 100644 index 00000000..648a839a --- /dev/null +++ b/scripts/angelscript/items/mana_protection.as @@ -0,0 +1,103 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaProtection : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaProtection() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Protection Potion"); + SetDescription("Grants 25% damage reduction , for a time."); + SetWeight(1); + SetSize(1); + SetValue(200); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + ApplyEffect(GetOwner(), "effects/protection", 5400, 0.75); + drink_now(); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_regen.as b/scripts/angelscript/items/mana_regen.as new file mode 100644 index 00000000..a8d53cce --- /dev/null +++ b/scripts/angelscript/items/mana_regen.as @@ -0,0 +1,103 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaRegen : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaRegen() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Regeneration Potion"); + SetDescription("Provides continuous health regeneration , for a time."); + SetWeight(1); + SetSize(1); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + CallExternal(GetEntityIndex(GetOwner()), "potion_regen", 500.0); + drink_now(); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_resist_cold.as b/scripts/angelscript/items/mana_resist_cold.as new file mode 100644 index 00000000..4378bbc6 --- /dev/null +++ b/scripts/angelscript/items/mana_resist_cold.as @@ -0,0 +1,107 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaResistCold : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaResistCold() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Resist Cold Potion"); + SetDescription("Helps resist the cold arctic chill."); + SetWeight(1); + SetSize(1); + SetValue(100); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + CallExternal(GetEntityIndex(GetOwner()), "ext_register_element", "coldp", "cold", 50); + SendPlayerMessage("You", "are now more resistant to cold attacks."); + drink_now(); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_BREATHFAST2') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_resist_fire.as b/scripts/angelscript/items/mana_resist_fire.as new file mode 100644 index 00000000..833bbe28 --- /dev/null +++ b/scripts/angelscript/items/mana_resist_fire.as @@ -0,0 +1,107 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaResistFire : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaResistFire() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Resist Fire Potion"); + SetDescription("Reduces damage caused by burning."); + SetWeight(1); + SetSize(1); + SetValue(100); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + CallExternal(GetEntityIndex(GetOwner()), "ext_register_element", "firep", "fire", 50); + SendPlayerMessage(A, "cooling breeze floats accross your soul."); + drink_now(); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_BREATHFAST2') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_sb.as b/scripts/angelscript/items/mana_sb.as new file mode 100644 index 00000000..ff86519a --- /dev/null +++ b/scripts/angelscript/items/mana_sb.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaSb : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + float SPEED_RATIO; + + ManaSb() + { + DRINK_TYPE = "effect"; + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + SPEED_RATIO = 0.5; + } + + void drink_spawn() + { + SetName("Swift Blade Potion"); + SetDescription("This potion doubles your base attack speed"); + SetWeight(1); + SetSize(2); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + SetHand("both"); + } + + void drink_effect() + { + Effect("screenfade", GetOwner(), 2.0, 0.5, Vector3(255, 0, 0), 255, "fadeout"); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 256, 1.0, 1.0); + CallExternal(GetOwner(), "ext_set_swift_blade", SPEED_RATIO); + } + +} + +} diff --git a/scripts/angelscript/items/mana_soup.as b/scripts/angelscript/items/mana_soup.as new file mode 100644 index 00000000..336e886f --- /dev/null +++ b/scripts/angelscript/items/mana_soup.as @@ -0,0 +1,167 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaSoup : CGameScript +{ + string ANIM_HAND_IDLE; + int ANIM_IDLE1; + int ANIM_LIFT1; + int ANIM_USE; + string ANIM_WORLD_IDLE; + string APPLY_LATER; + int DO_OWNER_IDLES; + int ITEM_MODEL_VIEW_IDX; + int ITEM_USED; + int MODEL_BODY_FLOOR; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string NEXT_USE; + int NO_IDLE; + string OWNER_ANIM_IDLE; + string OWNER_ANIM_USE; + string SOUND_USE; + float USE_DELAY; + + ManaSoup() + { + ANIM_LIFT1 = 21; + ANIM_IDLE1 = 21; + MODEL_VIEW = "viewmodels/v_martialarts.mdl"; + ITEM_MODEL_VIEW_IDX = 8; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 69; + MODEL_BODY_FLOOR = 71; + ANIM_WORLD_IDLE = "apple_floor_idle"; + ANIM_HAND_IDLE = "idle"; + OWNER_ANIM_IDLE = "aim_soup"; + OWNER_ANIM_USE = "aim_soup"; + ANIM_USE = 20; + USE_DELAY = 2.0; + SOUND_USE = "magic/slurp.wav"; + NO_IDLE = 1; + } + + void OnSpawn() override + { + SetName("Sylphiel's Soup"); + SetDescription("Sylphiel's Applemead Soup provides temporary health and mana regen."); + SetWeight(1); + SetSize(1); + SetValue(200); + SetHand("both"); + SetHUDSprite("hand", 88); + SetHUDSprite("trade", 88); + } + + void game_fall() + { + SetModelBody(0, MODEL_BODY_FLOOR); + PlayAnim("once", WANIM_FLOOR); + PlayAnim("once", ANIM_WORLD_IDLE); + } + + void OnDeploy() override + { + SetAnimExt("soup"); + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + PlayAnim("once", ANIM_HAND_IDLE); + SetModelBody(0, MODEL_BODY_OFS); + if (!(true)) return; + PlayOwnerAnim("once", OWNER_ANIM_IDLE); + NEXT_USE = GetGameTime(); + NEXT_USE += 1.0; + DO_OWNER_IDLES = 1; + ScheduleDelayedEvent(2.0, "item_idle"); + } + + void game_attack1() + { + if (!(true)) return; + if ((ITEM_USED)) return; + if (!(GetGameTime() > NEXT_USE)) return; + ITEM_USED = 1; + // TODO: splayviewanim ent_me ANIM_USE + USE_DELAY("use_item"); + } + + void use_item() + { + CallExternal(GetOwner(), "ext_svplaysound_kiss", 1, 10, SOUND_USE, 0.8, 100); + PlayOwnerAnim("once", OWNER_ANIM_USE); + use_effect(); + } + + void use_effect() + { + ScheduleDelayedEvent(2.0, "use_complete"); + int L_POOPY = 0; + if (RandomInt(0, 99) == 0) + { + int L_POOPY = 1; + } + if (!(GetEntityProperty(GetOwner(), "haseffect"))) + { + ApplyEffect(GetOwner(), "effects/soup", 180, L_POOPY); + } + else + { + RemoveEffect(GetOwner(), "soup"); + APPLY_LATER = 1; + } + HealEntity(GetOwner(), (GetEntityMaxHealth(GetOwner()) - GetEntityHealth(GetOwner()))); + GiveMP(GetOwner()); + } + + void use_complete() + { + int L_POOPY = 0; + if (RandomInt(0, 99) == 0) + { + int L_POOPY = 1; + } + SendColoredMessage(GetOwner(), "All your health and mana has been restored."); + SendColoredMessage(GetOwner(), "Three minutes of health and mana regen."); + if ((APPLY_LATER)) + { + ApplyEffect(GetOwner(), "effects/soup", 180, L_POOPY); + } + RemoveScript(); + DeleteEntity(GetOwner()); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_USE + EmitSound(0, 0, SOUND_USE); + } + + void bweapon_effect_remove() + { + DO_OWNER_IDLES = 0; + } + + void item_idle() + { + if (!(DO_OWNER_IDLES)) return; + if (!(GetEntityProperty(GetOwner(), "inhand"))) + { + DO_OWNER_IDLES = 0; + } + else + { + PlayOwnerAnim("once", OWNER_ANIM_IDLE); + ScheduleDelayedEvent(1.0, "item_idle"); + } + } + +} + +} diff --git a/scripts/angelscript/items/mana_speed.as b/scripts/angelscript/items/mana_speed.as new file mode 100644 index 00000000..42c362aa --- /dev/null +++ b/scripts/angelscript/items/mana_speed.as @@ -0,0 +1,108 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaSpeed : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaSpeed() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Speed Potion"); + SetDescription("Grants tremendous speed to the imbiber , for a time"); + SetWeight(1); + SetSize(1); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + ClientEvent("new", "all_in_sight", "effects/sfx_motionblur", GetEntityIndex(GetOwner()), 1800); + CallExternal(GetOwner(), "plr_change_speed", 1800, 4.0, GetEntityProperty(GetOwner(), "itemname")); + SendPlayerMessage("You", "are filled with the Spirit of the Wolf."); + drink_now(); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_BREATHFAST2') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/mana_st.as b/scripts/angelscript/items/mana_st.as new file mode 100644 index 00000000..2458d085 --- /dev/null +++ b/scripts/angelscript/items/mana_st.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "items/base_drink.as" + +namespace MS +{ + +class ManaSt : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRINK; + + ManaSt() + { + DRINK_TYPE = "effect"; + MODEL_BODY_OFS = 24; + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Stamina Potion"); + SetDescription("Provides rapid stamina regeneration"); + SetWeight(1); + SetSize(2); + SetValue(500); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void drink_effect() + { + ApplyEffect(GetOwner(), "effects/effect_stamina_regen"); + SendPlayerMessage("You", "feel as though you have infinite energy."); + } + +} + +} diff --git a/scripts/angelscript/items/mana_vampire.as b/scripts/angelscript/items/mana_vampire.as new file mode 100644 index 00000000..84ffba4c --- /dev/null +++ b/scripts/angelscript/items/mana_vampire.as @@ -0,0 +1,108 @@ +#pragma context server + +#include "items/base_item.as" + +namespace MS +{ + +class ManaVampire : CGameScript +{ + int ANIM_DRINK; + int ANIM_IDLE; + string ANIM_PREFIX; + int DRINK_AMOUNT; + int DRINK_EFFECTAMT; + int DRINK_GULP_DELAY; + int DRINK_TIME; + string DRINK_TYPE; + int ITEM_MODEL_VIEW_IDX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + float RESTORE_PERCENT; + string SOUND_DRINK; + + ManaVampire() + { + ANIM_IDLE = 0; + ANIM_DRINK = 1; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_VIEW = "viewmodels/v_misc.mdl"; + ITEM_MODEL_VIEW_IDX = 2; + SOUND_DRINK = "items/drink.wav"; + MODEL_BODY_OFS = 39; + ANIM_PREFIX = "mana"; + DRINK_TYPE = "givemana"; + RESTORE_PERCENT = 0.9; + DRINK_EFFECTAMT = 300; + DRINK_AMOUNT = 1; + DRINK_GULP_DELAY = 3; + DRINK_TIME = 3; + } + + void drink_spawn() + { + SetName("Vampire Blood Potion"); + SetDescription("Label reads: Do not imbibe in daylight."); + SetWeight(1); + SetSize(1); + SetValue(1000); + SetHUDSprite("hand", "item"); + SetHUDSprite("trade", "gpot"); + } + + void OnSpawn() override + { + SetHand("any"); + SetAnimExt("holditem"); + drink_spawn(); + RegisterDrink(); + } + + void game_start_drink() + { + PlayViewAnim(ANIM_DRINK); + drink_start(); + } + + void game_drink() + { + CallExternal(GetEntityIndex(GetOwner()), "potion_vampire", 120.0); + // TODO: hud.addstatusicon ent_owner hud/status/status_vamp status_vamp 120.0 + Effect("screenfade", GetOwner(), 0.5, 3, Vector3(255, 0, 0), 255, "fadeout"); + drink_now(); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_BREATHFAST2') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void game_drink_done() + { + PlayViewAnim(ANIM_IDLE); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + drink_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/pack_archersquiver.as b/scripts/angelscript/items/pack_archersquiver.as new file mode 100644 index 00000000..3c7f52d7 --- /dev/null +++ b/scripts/angelscript/items/pack_archersquiver.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "items/pack_quiver.as" + +namespace MS +{ + +class PackArchersquiver : CGameScript +{ + int ANIM_IDLE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + PackArchersquiver() + { + ANIM_IDLE = 0; + MODEL_VIEW = "weapons/bows/quiver_rview.mdl"; + MODEL_HANDS = "weapons/bows/quiver_hands.mdl"; + MODEL_WORLD = "weapons/bows/quiver_floor.mdl"; + MODEL_WEAR = "weapons/bows/quiver_spine3.mdl"; + CONTAINER_SPACE = 600; + CONTAINER_MAXITEMS = 16; + CONTAINER_ITEM_ACCEPT = "arrow;bolt;bows;crossbow"; + CONTAINER_ITEM_REJECT = "item_tk_"; + } + + void pack_spawn() + { + SetName("Quiver of the Archer"); + SetDescription("A large quiver for all sorts of projectiles"); + SetWeight(4); + SetSize(70); + SetValue(25); + SetWearable(1); + SetHUDSprite("trade", "quiver"); + } + +} + +} diff --git a/scripts/angelscript/items/pack_bank.as b/scripts/angelscript/items/pack_bank.as new file mode 100644 index 00000000..80e06159 --- /dev/null +++ b/scripts/angelscript/items/pack_bank.as @@ -0,0 +1,163 @@ +#pragma context server + +namespace MS +{ + +class PackBank : CGameScript +{ + string ANIM_PREFIX; + string BANK_NAME; + string CONTAINER_ITEM_REJECT; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + string TRUE_ACCEPT; + + PackBank() + { + MODEL_VIEW = "none"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "armor/packs/p_packs.mdl"; + MODEL_WEAR = "armor/packs/p_packs.mdl"; + BANK_NAME = "Edana"; + CONTAINER_TYPE = "generic"; + CONTAINER_SPACE = 200; + CONTAINER_MAXITEMS = 32; + CONTAINER_ITEM_REJECT = "sheath;pack;bolt;arrow;health;mana_mpotion"; + MODEL_BODY_OFS = 6; + ANIM_PREFIX = "none"; + } + + void pack_spawn() + { + SetName("BANK_NAME Bank Signet"); + SetDescription("This ticket gives access to your Edana bank account."); + SetWeight(0); + SetSize(0); + SetValue(5000); + SetWearable(1); + SetHUDSprite("trade", "ring"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void pack_wear() + { + SendPlayerMessage("You", "put on your " + BANK_NAME + " bank signet ring."); + } + + void OnSpawn() override + { + SetWorldModel(MODEL_WORLD); + SetHand("any"); + pack_spawn(); + TRUE_ACCEPT = ""; + if (CONTAINER_ITEM_ACCEPT != "CONTAINER_ITEM_ACCEPT") + { + TRUE_ACCEPT = CONTAINER_ITEM_ACCEPT; + } + if (GetMapName() == "edana") + { + int CONTAINER_LOCK_STRENGTH = 0; + int CONTAINER_CANCLOSE = 0; + } + if (GetMapName() != "edana") + { + int CONTAINER_LOCK_STRENGTH = 10000; + int CONTAINER_CANCLOSE = 1; + } + string reg.container.type = CONTAINER_TYPE; + string reg.container.space = CONTAINER_SPACE; + string reg.container.canclose = CONTAINER_CANCLOSE; + string reg.container.lock_str = CONTAINER_LOCK_STRENGTH; + string reg.container.accept_mask = TRUE_ACCEPT; + string reg.container.reject_mask = CONTAINER_ITEM_REJECT; + string reg.container.maxitem = CONTAINER_MAXITEMS; + // TODO: registercontainer + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + pack_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 1; + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + SetModelBody(0, L_SUBMODEL); + PlayAnim("once", L_ANIM); + pack_fall(); + } + + void OnPickup(CBaseEntity@ player) override + { + SetModel(MODEL_HANDS); + if (MODEL_HANDS == "misc/p_misc.mdl") + { + int L_SUBMODEL = 16; + } + else + { + string L_SUBMODEL = MODEL_BODY_OFS; + } + L_SUBMODEL -= "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + PlayViewAnim(ANIM_IDLE); + pack_pickup(); + } + + void game_playeractivate() + { + if (!("game.item.container.open")) + { + PlayViewAnim(ANIM_OPEN); + game_opencontainer(); + } + else + { + PlayViewAnim(ANIM_CLOSE); + } + pack_playeractivate(); + } + + void game_opencontainer() + { + pack_opencontainer(); + } + + void game_wear() + { + SetModel(MODEL_WEAR); + SetModelBody(0, MODEL_BODY_OFS); + pack_wear(); + } + + void game_container_addeditem() + { + SendPlayerMessage("Added", param1 + "to " + BANK_NAME + " bank"); + string IN_ITEM_WEIGHT = GetEntityProperty(param1, "weight"); + SetWeight(/* TODO: $neg */ $neg(IN_ITEM_WEIGHT)); + } + + void game_container_removeditem() + { + SendPlayerMessage("Removed", param1 + "from " + BANK_NAME + " bank"); + string OUT_ITEM_WEIGHT = GetEntityProperty(param1, "weight"); + SetWeight(OUT_ITEM_WEIGHT); + } + +} + +} diff --git a/scripts/angelscript/items/pack_base.as b/scripts/angelscript/items/pack_base.as new file mode 100644 index 00000000..60c52e58 --- /dev/null +++ b/scripts/angelscript/items/pack_base.as @@ -0,0 +1,142 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class PackBase : CGameScript +{ + int BLAH; + int IS_CONTAINER; + string TRUE_ACCEPT; + + PackBase() + { + IS_CONTAINER = 1; + BLAH = 0; + } + + void OnSpawn() override + { + SetWorldModel(MODEL_WORLD); + SetHand("any"); + pack_spawn(); + TRUE_ACCEPT = ""; + if (CONTAINER_ITEM_ACCEPT != "CONTAINER_ITEM_ACCEPT") + { + TRUE_ACCEPT = CONTAINER_ITEM_ACCEPT; + } + string reg.container.type = CONTAINER_TYPE; + string reg.container.space = CONTAINER_SPACE; + string reg.container.canclose = CONTAINER_CANCLOSE; + string reg.container.lock_str = CONTAINER_LOCK_STRENGTH; + string reg.container.accept_mask = TRUE_ACCEPT; + string reg.container.reject_mask = CONTAINER_ITEM_REJECT; + string reg.container.maxitem = CONTAINER_MAXITEMS; + // TODO: registercontainer + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW); + pack_deploy(); + } + + void game_fall() + { + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 1; + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + SetModelBody(0, L_SUBMODEL); + PlayAnim("once", L_ANIM); + pack_fall(); + } + + void OnPickup(CBaseEntity@ player) override + { + SetModel(MODEL_HANDS); + if (MODEL_HANDS == "misc/p_misc.mdl") + { + int L_SUBMODEL = 16; + } + else + { + string L_SUBMODEL = MODEL_BODY_OFS; + } + L_SUBMODEL -= "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + PlayViewAnim(ANIM_IDLE); + pack_pickup(); + } + + void game_playeractivate() + { + if (!("game.item.container.open")) + { + PlayViewAnim(ANIM_OPEN); + game_opencontainer(); + } + else + { + PlayViewAnim(ANIM_CLOSE); + } + pack_playeractivate(); + } + + void game_opencontainer() + { + pack_opencontainer(); + } + + void game_wear() + { + SetModel(MODEL_WEAR); + SetModelBody(0, MODEL_BODY_OFS); + pack_wear(); + } + + void game_show() + { + SetModel(MODEL_WEAR); + SetModelBody(0, MODEL_BODY_OFS); + } + + void game_container_addeditem() + { + if (!(G_DEVELOPER_MODE)) return; + if (!(IsOnGround(GetOwner()))) return; + SendInfoMessageToAll("green " + GetEntityName(GetOwner()) + "additem " + GetEntityName(param1)); + } + + void game_container_gaveitem() + { + if (!(G_DEVELOPER_MODE)) return; + if (!(IsOnGround(GetOwner()))) return; + SendInfoMessageToAll("green " + GetEntityName(GetOwner()) + "gaveitem " + GetEntityName(param1)); + } + + void game_attempt_unlock() + { + if (!(G_DEVELOPER_MODE)) return; + SendInfoMessageToAll("green " + GetEntityName(GetOwner()) + "openby " + GetEntityName(param1)); + } + + void ext_lock() + { + SetItemLockStrength(GetOwner(), 1); + if (!(G_DEVELOPER_MODE)) return; + SendInfoMessageToAll("green " + GetEntityName(GetOwner()) + " locked."); + } + + void ext_unlock() + { + SetItemLockStrength(GetOwner(), 0); + if (!(G_DEVELOPER_MODE)) return; + SendInfoMessageToAll("green " + GetEntityName(GetOwner()) + " unlocked."); + } + +} + +} diff --git a/scripts/angelscript/items/pack_bigsack.as b/scripts/angelscript/items/pack_bigsack.as new file mode 100644 index 00000000..d84c26f4 --- /dev/null +++ b/scripts/angelscript/items/pack_bigsack.as @@ -0,0 +1,62 @@ +#pragma context server + +#include "items/pack_base.as" + +namespace MS +{ + +class PackBigsack : CGameScript +{ + string ANIM_PREFIX; + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + PackBigsack() + { + MODEL_VIEW = "none"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "armor/packs/p_packs.mdl"; + MODEL_WEAR = "armor/packs/p_packs.mdl"; + CONTAINER_TYPE = "generic"; + CONTAINER_SPACE = 200; + CONTAINER_MAXITEMS = 32; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_REJECT = "polearms;arrow;scroll2;axes;swords;blunt;bows;shields;smallarms;bolt;pack"; + MODEL_BODY_OFS = 6; + ANIM_PREFIX = "bigsack"; + } + + void pack_spawn() + { + SetName("Big Sack"); + SetDescription("A big sack , worn over the shoulder"); + SetWeight(1); + SetSize(25); + SetValue(4); + SetWearable(1); + SetHUDSprite("trade", "backsheath"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void pack_wear() + { + SendPlayerMessage("You", "sling a big sack over your shoulder."); + } + +} + +} diff --git a/scripts/angelscript/items/pack_boh.as b/scripts/angelscript/items/pack_boh.as new file mode 100644 index 00000000..f640ef6c --- /dev/null +++ b/scripts/angelscript/items/pack_boh.as @@ -0,0 +1,62 @@ +#pragma context server + +#include "items/pack_base.as" + +namespace MS +{ + +class PackBoh : CGameScript +{ + string ANIM_PREFIX; + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + PackBoh() + { + MODEL_VIEW = "none"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "armor/packs/p_packs.mdl"; + MODEL_WEAR = "armor/packs/p_packs.mdl"; + CONTAINER_TYPE = "generic"; + CONTAINER_SPACE = 200; + CONTAINER_MAXITEMS = 500; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_REJECT = "all"; + MODEL_BODY_OFS = 6; + ANIM_PREFIX = "bigsack"; + } + + void pack_spawn() + { + SetName("Bag of Holding"); + SetDescription("A magical bag that holds lots of stuff"); + SetWeight(-10000); + SetSize(40); + SetValue(4); + SetWearable(1); + SetHUDSprite("trade", "backsheath"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void pack_wear() + { + SendPlayerMessage("You", "sling a bag of holding over your shoulder."); + } + +} + +} diff --git a/scripts/angelscript/items/pack_boh_lesser.as b/scripts/angelscript/items/pack_boh_lesser.as new file mode 100644 index 00000000..6d985bdf --- /dev/null +++ b/scripts/angelscript/items/pack_boh_lesser.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/pack_base.as" + +namespace MS +{ + +class PackBohLesser : CGameScript +{ + string ANIM_PREFIX; + int CONTAINER_BOH; + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + PackBohLesser() + { + MODEL_VIEW = "none"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "armor/packs/p_packs.mdl"; + MODEL_WEAR = "armor/packs/p_packs.mdl"; + CONTAINER_BOH = 1; + CONTAINER_TYPE = "generic"; + CONTAINER_SPACE = 200; + CONTAINER_MAXITEMS = 500; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_REJECT = "arrow;scroll2;bolt;pack"; + MODEL_BODY_OFS = 6; + ANIM_PREFIX = "bigsack"; + } + + void pack_spawn() + { + SetName("Bag of Holding"); + SetDescription("A magical bag that eliminates the weight of all items held within"); + SetWeight(0); + SetSize(40); + SetValue(2000); + SetWearable(1); + SetHUDSprite("trade", "backsheath"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void pack_wear() + { + SendPlayerMessage("You", "sling a bag of holding over your shoulder."); + } + +} + +} diff --git a/scripts/angelscript/items/pack_heavybackpack.as b/scripts/angelscript/items/pack_heavybackpack.as new file mode 100644 index 00000000..7429ace8 --- /dev/null +++ b/scripts/angelscript/items/pack_heavybackpack.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "items/pack_base.as" + +namespace MS +{ + +class PackHeavybackpack : CGameScript +{ + string ANIM_PREFIX; + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + PackHeavybackpack() + { + MODEL_VIEW = "none"; + MODEL_HANDS = "armor/packs/p_packs.mdl"; + MODEL_WORLD = "armor/packs/p_packs.mdl"; + MODEL_WEAR = "armor/packs/p_packs.mdl"; + CONTAINER_TYPE = "generic"; + CONTAINER_SPACE = 200; + CONTAINER_MAXITEMS = 32; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_REJECT = "scroll2;shields;pack"; + MODEL_BODY_OFS = 2; + ANIM_PREFIX = "backpack"; + } + + void pack_spawn() + { + SetName("Heavy Backpack"); + SetDescription("A heavy backpack , suited for wear and tear"); + SetWeight(3); + SetSize(80); + SetValue(50); + SetWearable(1); + SetHUDSprite("trade", "hvybackpack"); + } + + void pack_deploy() + { + string MB_TEMP = "game.item.hand_index"; + MB_TEMP -= 2; + MB_TEMP += MODEL_BODY_OFS; + SetModelBody(0, MB_TEMP); + SetViewModel("none"); + } + + void pack_wear() + { + SendPlayerMessage("You", "sling a heavy backpack over your shoulder."); + } + +} + +} diff --git a/scripts/angelscript/items/pack_quiver.as b/scripts/angelscript/items/pack_quiver.as new file mode 100644 index 00000000..98c4ca6b --- /dev/null +++ b/scripts/angelscript/items/pack_quiver.as @@ -0,0 +1,68 @@ +#pragma context server + +#include "items/pack_base.as" + +namespace MS +{ + +class PackQuiver : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + PackQuiver() + { + MODEL_VIEW = "none"; + MODEL_HANDS = "weapons/bows/quiver_hands.mdl"; + MODEL_WORLD = "weapons/bows/quiver_floor.mdl"; + MODEL_WEAR = "weapons/bows/quiver_spine3.mdl"; + CONTAINER_TYPE = "quiver"; + CONTAINER_SPACE = 200; + CONTAINER_MAXITEMS = 8; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "arrow"; + CONTAINER_ITEM_REJECT = "item_tk_"; + } + + void pack_spawn() + { + SetName("Quiver for Arrows"); + SetDescription("A large quiver for arrows"); + SetWeight(1); + SetSize(70); + SetValue(4); + SetWearable(1); + SetHUDSprite("hand", "quiver"); + SetHUDSprite("trade", "quiver"); + SetHand("left"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void pack_wear() + { + SendPlayerMessage("You", "sling your quiver over your shoulder."); + } + + void game_fall() + { + PlayAnim("once", "idle"); + pack_fall(); + } + +} + +} diff --git a/scripts/angelscript/items/pack_sack.as b/scripts/angelscript/items/pack_sack.as new file mode 100644 index 00000000..aa866068 --- /dev/null +++ b/scripts/angelscript/items/pack_sack.as @@ -0,0 +1,58 @@ +#pragma context server + +#include "items/pack_base.as" + +namespace MS +{ + +class PackSack : CGameScript +{ + string ANIM_PREFIX; + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + PackSack() + { + MODEL_VIEW = "none"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "armor/packs/p_packs.mdl"; + MODEL_WEAR = "armor/packs/p_packs.mdl"; + CONTAINER_TYPE = "generic"; + CONTAINER_SPACE = 10; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_MAXITEMS = 8; + CONTAINER_ITEM_REJECT = "arrow;axes;blunt;bolts;swords;bows;armor;pack;polearms"; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "sack"; + } + + void pack_spawn() + { + SetName("Small Sack"); + SetDescription("A small sack, worn on the belt."); + SetWeight(1); + SetSize(20); + SetValue(2); + SetWearable(1); + SetHUDSprite("hand", "sheath"); + SetHUDSprite("trade", "backsheath"); + } + + void pack_wear() + { + // TODO: playermessagecl You attach your sack to your belt. + } + +} + +} diff --git a/scripts/angelscript/items/pack_xbowquiver.as b/scripts/angelscript/items/pack_xbowquiver.as new file mode 100644 index 00000000..75b0f383 --- /dev/null +++ b/scripts/angelscript/items/pack_xbowquiver.as @@ -0,0 +1,47 @@ +#pragma context server + +#include "items/pack_quiver.as" + +namespace MS +{ + +class PackXbowquiver : CGameScript +{ + int ANIM_IDLE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + PackXbowquiver() + { + ANIM_IDLE = 0; + MODEL_VIEW = "weapons/bows/quiver_rview.mdl"; + MODEL_HANDS = "weapons/bows/quiver_hands.mdl"; + MODEL_WORLD = "weapons/bows/quiver_floor.mdl"; + MODEL_WEAR = "weapons/bows/quiver_spine3.mdl"; + CONTAINER_MAXITEMS = 8; + CONTAINER_SPACE = 200; + CONTAINER_ITEM_ACCEPT = "bolt"; + CONTAINER_ITEM_REJECT = "item_tk_"; + } + + void pack_spawn() + { + SetName("Quiver of Bolts"); + SetDescription("This quiver holds only crossbow bolts"); + SetWeight(1); + SetSize(70); + SetValue(80); + SetWearable(1); + SetHUDSprite("hand", "quiver"); + SetHUDSprite("trade", "quiver"); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_a.as b/scripts/angelscript/items/polearms_a.as new file mode 100644 index 00000000..188140da --- /dev/null +++ b/scripts/angelscript/items/polearms_a.as @@ -0,0 +1,167 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsA : CGameScript +{ + int BASE_LEVEL_REQ; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string MELEE_STARTPOS; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float POLE_BACKHAND_ACCURACY; + int POLE_BACKHAND_DMG; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_BACKHAND_REPEL; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_POWER_THROW; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + string POLE_THOW_PROJECTILE; + int POLE_THROW_POWER; + int VENOM_BURST_MP; + int VMODEL_IDX; + + PolearmsA() + { + BASE_LEVEL_REQ = 30; + VENOM_BURST_MP = 50; + VMODEL_IDX = 14; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 31; + PMODEL_IDX_HANDS = 30; + MELEE_DMG = 350; + MELEE_RANGE = 120; + MELEE_DMG_TYPE = "acid"; + MELEE_STARTPOS = Vector3(0, 0, 5); + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 2.0; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 0; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_BACKHAND_DMG = 150; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "pierce"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.9; + POLE_BACKHAND_REPEL = 500; + POLE_CAN_POWER_THROW = 1; + POLE_THROW_POWER = 700; + POLE_THOW_PROJECTILE = "proj_pole_a"; + } + + void polearm_spawn() + { + SetName("Lance of Affliction"); + SetDescription("An accursed lance of profane magic"); + SetWeight(30); + SetSize(2); + SetValue(5000); + SetHUDSprite("trade", 57); + } + + void OnDeploy() override + { + CallExternal(GetOwner(), "ext_alance_init"); + } + + void polearm_register_attacks() + { + int reg.attack.mpdrain = 0; + string reg.attack.type = "strike-land"; + int reg.attack.range = 10; + int reg.attack.dmg = 1; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "acid"; + int reg.attack.energydrain = 5; + string reg.attack.stat = "spellcasting.affliction"; + int reg.attack.hitchance = 100; + int reg.attack.priority = 3; + float reg.attack.delay.strike = 0.1; + float reg.attack.delay.end = 0.2; + int reg.attack.ofs.startpos = 0; + int reg.attack.ofs.aimang = 0; + int reg.attack.noise = 5000; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "venom_burst"; + float reg.attack.chargeamt = 3.0; + int reg.attack.reqskill = 30; + RegisterAttack(); + } + + void venom_burst_start() + { + PlayViewAnim(VANIM_WIDE); + PlayOwnerAnim("once", PANIM_SWIPE2); + LogDebug("holy_circle_start"); + } + + void venom_burst_strike() + { + if (!(true)) return; + if (GetEntityMP(GetOwner()) < VENOM_BURST_MP) + { + SendColoredMessage(GetOwner(), "Affliction Lance: Insufficient Mana for Venom Burst"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + string BURST_TARG_ORG = GetEntityOrigin(GetOwner()); + ClientEvent("new", "all", "effects/sfx_poison_explode", BURST_TARG_ORG, 256); + XDoDamage(BURST_TARG_ORG, 512, GetSkillLevel(GetOwner(), "spellcasting.affliction"), 0.1, GetOwner(), GetOwner(), "spellcasting.affliction", "poison", "dmgevent:alance"); + } + + void attack_poke1_damaged_other() + { + if (!(RandomInt(1, 4) == 1)) return; + if (!(GAME_PVP)) + { + if ((IsValidPlayer(param1))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + DOT_BURN *= 0.25; + ApplyEffect(param1, "effects/dot_acid", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "none"); + } + + void attack_poke2_damaged_other() + { + if (!(GAME_PVP)) + { + if ((IsValidPlayer(param1))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + DOT_BURN *= 0.5; + ApplyEffect(param1, "effects/dot_acid", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "none"); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_ba.as b/scripts/angelscript/items/polearms_ba.as new file mode 100644 index 00000000..d05c5fdc --- /dev/null +++ b/scripts/angelscript/items/polearms_ba.as @@ -0,0 +1,87 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsBa : CGameScript +{ + int BASE_LEVEL_REQ; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float POLE_BACKHAND_ACCURACY; + int POLE_BACKHAND_DMG; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + float POLE_SWIPE_ACCURACY; + int POLE_SWIPE_DMG; + int POLE_SWIPE_DMG_RANGE; + string POLE_SWIPE_DMG_TYPE; + int POLE_SWIPE_RANGE; + int VANIM_SWIPE1; + int VANIM_SWIPE2; + int VMODEL_IDX; + + PolearmsBa() + { + BASE_LEVEL_REQ = 6; + VMODEL_IDX = 11; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 1; + PMODEL_IDX_HANDS = 0; + MELEE_DMG = 140; + MELEE_RANGE = 110; + MELEE_DMG_TYPE = "slash"; + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 1.5; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 1; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_SWIPE_DMG = 190; + POLE_SWIPE_DMG_RANGE = 20; + POLE_SWIPE_DMG_TYPE = "slash"; + POLE_SWIPE_RANGE = 80; + POLE_SWIPE_ACCURACY = 0.8; + VANIM_SWIPE1 = 7; + VANIM_SWIPE2 = 7; + POLE_BACKHAND_DMG = 80; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "blunt"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.9; + } + + void polearm_spawn() + { + SetName("Bardiche"); + SetDescription("A polearm with a large cresent blade"); + SetWeight(30); + SetSize(2); + SetValue(20); + SetHUDSprite("trade", 77); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_base.as b/scripts/angelscript/items/polearms_base.as new file mode 100644 index 00000000..633ac285 --- /dev/null +++ b/scripts/angelscript/items/polearms_base.as @@ -0,0 +1,1201 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class PolearmsBase : CGameScript +{ + string BWEAPON_CHARGE_PERCENT; + float BWEAPON_DBL_CHARGE_ADJ; + string GAME_PVP; + float MELEE_ACCURACY; + int MELEE_AIMANGLE; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + int MELEE_NOISE; + int MELEE_RANGE; + int MELEE_STARTPOS; + string MELEE_STAT; + string NEXT_BLOCK; + string OWNER_YAW; + string PANIM_BLOCK_END; + string PANIM_BLOCK_HOLD; + string PANIM_BLOCK_START; + string PANIM_IDLE; + string PANIM_POKE; + string PANIM_POKE_BACK; + string PANIM_REPEL; + string PANIM_SPIN_END; + string PANIM_SPIN_HOLD; + string PANIM_SPIN_START; + string PANIM_SWIPE1; + string PANIM_SWIPE2; + string PANIM_THROW; + string PANIM_THROW_IDLE; + string PANIM_THROW_PREP; + string PANIM_THROW_PREPED_THROW; + float POLE_BACKHAND_ACCURACY; + float POLE_BACKHAND_ATK_DURATION; + int POLE_BACKHAND_ATTACK; + int POLE_BACKHAND_DMG; + float POLE_BACKHAND_DMG_DELAY; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_BACKHAND_REPEL; + int POLE_BACKHAND_STUN; + float POLE_BACKHAND_STUN_CHANCE; + float POLE_BLOCK_DELAY; + float POLE_BLOCK_PROT_RATIO; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_POWER_THROW; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + int POLE_CAN_THROW; + string POLE_HOLD_IDLE_CL; + int POLE_IDLE_ACTIVE_CL; + int POLE_IDLE_ANIM_COUNT_CL; + int POLE_IN_BLOCK; + int POLE_IN_SPIN; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + string POLE_NEXT_IDLE_CL; + string POLE_NEXT_THROW; + float POLE_POKE2_ATK_DURATION; + string POLE_POKE2_DMG; + int POLE_REPEL_STRENGTH; + float POLE_SWIPE_ACCURACY; + float POLE_SWIPE_ATK_DURATION; + int POLE_SWIPE_ATTACK; + int POLE_SWIPE_DMG; + float POLE_SWIPE_DMG_DELAY; + int POLE_SWIPE_DMG_RANGE; + string POLE_SWIPE_DMG_TYPE; + int POLE_SWIPE_RANGE; + string POLE_THOW_PROJECTILE; + float POLE_THROW_COF; + float POLE_THROW_MAX_CHARGE_TIME; + int POLE_THROW_MP; + int POLE_THROW_POWER; + float POLE_THROW_PREPED_ATKDELAY; + string POLE_THROW_PREPING; + int POLE_THROW_PREPPED; + int POLE_THROW_PREPPING; + float POLE_THROW_PREP_DELAY; + float POLE_THROW_RECHARGE_TIME; + string POLE_THROW_START_CHARGE_TIME; + string POLE_THROW_STAT; + string PUSH_TARGETS; + string SOUND_BACKHAND; + string SOUND_BLOCK; + string SOUND_CHARGE; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_READY; + string SOUND_SHOUT; + string SOUND_SPIN_LOOP; + string SOUND_SWIPE; + string SOUND_THROW; + string SOUND_THRUST; + int VANIM_BLOCK_END; + int VANIM_BLOCK_HOLD; + int VANIM_BLOCK_START; + int VANIM_DRAW; + int VANIM_IDLE1; + int VANIM_IDLE2; + int VANIM_IDLE3; + int VANIM_POKE1; + int VANIM_POKE2; + int VANIM_POKE_BACK; + int VANIM_REPEL; + int VANIM_SPIN_END; + int VANIM_SPIN_HOLD; + int VANIM_SPIN_START; + int VANIM_SWIPE1; + int VANIM_SWIPE2; + int VANIM_THROW_IDLE; + int VANIM_THROW_POWER; + int VANIM_THROW_PREP; + int VANIM_THROW_PREPED_THROW; + int VANIM_WIDE; + string VMODEL_FILE; + string WANIM_FLOOR; + string WANIM_HAND; + string WAS_UNDERSKILLED; + string WEAPON_NEXT_SKILL_WARN; + string WEAPON_PRIMARY_SKILL; + string WEAPON_UNDERSKILLED; + + PolearmsBase() + { + VMODEL_FILE = "viewmodels/v_polearms.mdl"; + BWEAPON_DBL_CHARGE_ADJ = 2.0; + VANIM_IDLE1 = 0; + VANIM_IDLE2 = 1; + VANIM_IDLE3 = 2; + VANIM_DRAW = 3; + VANIM_POKE1 = 4; + VANIM_POKE2 = 5; + VANIM_POKE_BACK = 6; + VANIM_SWIPE1 = 7; + VANIM_SWIPE2 = 8; + VANIM_WIDE = 9; + VANIM_SPIN_START = 10; + VANIM_SPIN_HOLD = 11; + VANIM_SPIN_END = 12; + VANIM_REPEL = 13; + VANIM_BLOCK_START = 14; + VANIM_BLOCK_HOLD = 15; + VANIM_BLOCK_END = 16; + VANIM_THROW_POWER = 17; + VANIM_THROW_PREP = 18; + VANIM_THROW_PREPED_THROW = 19; + VANIM_THROW_IDLE = 20; + WANIM_FLOOR = "standard_floor_idle"; + WANIM_HAND = "standard_idle"; + PANIM_IDLE = "aim_pole"; + PANIM_POKE = "pole_swing"; + PANIM_POKE_BACK = "Pattack2"; + PANIM_SWIPE1 = "Pattack2"; + PANIM_SWIPE2 = "Pattack3"; + PANIM_SPIN_START = "Spin_start"; + PANIM_SPIN_HOLD = "Spin"; + PANIM_SPIN_END = "Spin_end"; + PANIM_REPEL = "repel"; + PANIM_BLOCK_START = "block_start"; + PANIM_BLOCK_HOLD = "block"; + PANIM_BLOCK_END = "block_end"; + PANIM_THROW = "throw1"; + PANIM_THROW_PREP = "throw2_start"; + PANIM_THROW_IDLE = "throw2_aim"; + PANIM_THROW_PREPED_THROW = "throw2_end"; + SOUND_HITWALL1 = "weapons/bullet_hit1.wav"; + SOUND_HITWALL2 = "weapons/bullet_hit2.wav"; + SOUND_THRUST = "weapons/cbar_miss1.wav"; + SOUND_SWIPE = "zombie/claw_miss2.wav"; + SOUND_BACKHAND = "weapons/swingsmall.wav"; + SOUND_BLOCK = "body/armour1.wav"; + SOUND_READY = GetEntityProperty(GetOwner(), "scriptvar"); + SOUND_CHARGE = GetEntityProperty(GetOwner(), "scriptvar"); + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + SOUND_SPIN_LOOP = "weapons/polearm_spin.wav"; + SOUND_THROW = "zombie/claw_miss1.wav"; + MELEE_DMG = 120; + MELEE_RANGE = 90; + MELEE_DMG_TYPE = "blunt"; + MELEE_DMG_RANGE = 0; + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 1.5; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.5; + MELEE_ACCURACY = 0.9; + MELEE_STAT = "polearms"; + MELEE_STARTPOS = 0; + MELEE_AIMANGLE = 0; + MELEE_NOISE = 650; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_POKE2_ATK_DURATION = 1.5; + POLE_CAN_SWIPE = 1; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 1; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_CAN_THROW = 0; + POLE_CAN_POWER_THROW = 0; + POLE_BLOCK_PROT_RATIO = 0.3; + POLE_BLOCK_DELAY = 3.0; + POLE_REPEL_STRENGTH = 600; + POLE_SWIPE_DMG = 60; + POLE_SWIPE_DMG_RANGE = 20; + POLE_SWIPE_DMG_TYPE = "blunt"; + POLE_SWIPE_RANGE = 60; + POLE_SWIPE_ACCURACY = 0.6; + POLE_SWIPE_DMG_DELAY = 0.5; + POLE_SWIPE_ATK_DURATION = 0.9; + POLE_BACKHAND_DMG = 100; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "blunt"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.7; + POLE_BACKHAND_DMG_DELAY = 0.8; + POLE_BACKHAND_ATK_DURATION = 1.2; + POLE_BACKHAND_STUN = 0; + POLE_BACKHAND_STUN_CHANCE = 0.0; + POLE_BACKHAND_REPEL = 0; + POLE_THROW_PREPED_ATKDELAY = 0.1; + POLE_THROW_PREP_DELAY = 0.3; + POLE_THROW_POWER = 600; + POLE_THOW_PROJECTILE = "proj_pole_spear"; + POLE_THROW_RECHARGE_TIME = 1.0; + POLE_THROW_MAX_CHARGE_TIME = 3.0; + POLE_THROW_COF = 1.0; + POLE_THROW_MP = 0; + POLE_THROW_STAT = "polearms"; + } + + void OnSpawn() override + { + SetHand("both"); + item_spawn(); + weapon_spawn(); + polearm_spawn(); + polearm_register_attacks(); + } + + void OnDeploy() override + { + pole_draw(); + if (!(true)) return; + GAME_PVP = "game.pvp"; + pole_check_skill(); + ScheduleDelayedEvent(0.01, "polearm_setup_model"); + } + + void game_show() + { + SetModel(PMODEL_FILE); + SetWorldModel(PMODEL_FILE); + SetModelBody(0, PMODEL_IDX_HANDS); + } + + void OnDrop() override + { + item_drop(); + string RL_HAND = "game.item.hand_index"; + CallExternal(GetOwner(), "ext_set_hand_id", RL_HAND, 0); + } + + void game_switchhands() + { + PlayViewAnim(VANIM_IDLE1); + POLE_IDLE_ANIM_COUNT_CL = 0; + item_switchhands(); + } + + void OnPickup(CBaseEntity@ player) override + { + pole_draw(); + } + + void game_fall() + { + SetModel(PMODEL_FILE); + SetWorldModel(PMODEL_FILE); + SetModelBody(0, PMODEL_IDX_FLOOR); + PlayAnim("once", WANIM_FLOOR); + weapon_fall(); + } + + void pole_draw() + { + LogDebug("pole_draw"); + PlayViewAnim("break"); + PlayAnim("once", "break"); + SetViewModel(VMODEL_FILE); + SetModel(PMODEL_FILE); + SetWorldModel(PMODEL_FILE); + SetModelBody(0, PMODEL_IDX_HANDS); + SetAnimExt("pole"); + POLE_IDLE_ANIM_COUNT_CL = 0; + if (!(false)) return; + PlayViewAnim("break"); + PlayAnim("once", "break"); + PlayViewAnim(VANIM_DRAW); + PlayAnim("once", WANIM_HAND); + if ((POLE_IDLE_ACTIVE_CL)) return; + POLE_IDLE_ACTIVE_CL = 1; + ScheduleDelayedEvent(4.0, "pole_idle_anim_cl"); + } + + void polearm_setup_model() + { + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") VMODEL_IDX + } + + void polearm_register_attacks() + { + string reg.attack.type = "strike-land"; + string reg.attack.keys = "+attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 0; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "attack_poke1"; + string reg.attack.noise = MELEE_NOISE; + string reg.attack.reqskill = BASE_LEVEL_REQ; + RegisterAttack(); + WEAPON_PRIMARY_SKILL = reg.attack.stat; + if ((POLE_CAN_POKE2)) + { + string reg.attack.type = "strike-land"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 1; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = POLE_POKE2_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.noise = MELEE_NOISE; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "attack_poke2"; + reg.attack.dmg *= BWEAPON_DBL_CHARGE_ADJ; + reg.attack.energydrain *= BWEAPON_DBL_CHARGE_ADJ; + POLE_POKE2_DMG = reg.attack.dmg; + float reg.attack.chargeamt = 1.0; + string reg.attack.reqskill = BASE_LEVEL_REQ; + reg.attack.reqskill += 2; + RegisterAttack(); + } + if ((POLE_CAN_POWER_THROW)) + { + string reg.attack.mpdrain = POLE_THROW_MP; + int reg.attack.ammodrain = 0; + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.hold_min&max = "1;1"; + string reg.attack.dmg.type = "pierce"; + string reg.attack.range = POLE_THROW_POWER; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = POLE_THROW_STAT; + int reg.attack.COF = 1; + string reg.attack.projectile = POLE_THOW_PROJECTILE; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 0.01; + float reg.attack.chargeamt = 2.0; + float reg.attack.delay.end = 0.2; + Vector3 reg.attack.ofs.startpos = Vector3(5, 0, 4); + Vector3 reg.attack.ofs.aimang = Vector3(0, 0, 0); + string reg.attack.noise = MELEE_NOISE; + string reg.attack.callback = "pole_powerthrow"; + string reg.attack.reqskill = BASE_LEVEL_REQ; + reg.attack.reqskill += 4; + string reg.attack.keys = "-attack1"; + RegisterAttack(); + } + } + + void pole_powerthrow_start() + { + PlayViewAnim(VANIM_THROW_POWER); + PlayOwnerAnim("once", PANIM_THROW); + if (!(true)) return; + EmitSound(GetOwner(), 0, SOUND_SHOUT, 10); + ScheduleDelayedEvent(0.5, "pole_powerthrow_sound"); + } + + void pole_powerthrow_sound() + { + EmitSound(GetOwner(), 0, SOUND_THROW, 10); + } + + void attack_poke1_start() + { + if (!(true)) return; + if (!(POLE_PRIMARY_SWIPE)) + { + pole_attack("poke1"); + } + else + { + pole_attack("priswipe"); + } + if ((POLE_THROW_PREPING)) + { + int ABORT_THROW = 1; + } + if ((POLE_THROW_PREPPED)) + { + int ABORT_THROW = 1; + } + if ((ABORT_THROW)) + { + pole_abort_throw("pole_attack"); + } + } + + void attack_poke2_start() + { + EmitSound(GetOwner(), 1, SOUND_CHARGE, 10); + if (!(true)) return; + pole_attack("poke2"); + if ((POLE_THROW_PREPING)) + { + int ABORT_THROW = 1; + } + if ((POLE_THROW_PREPPED)) + { + int ABORT_THROW = 1; + } + if ((ABORT_THROW)) + { + pole_abort_throw("pole_attack"); + } + } + + void pole_attack() + { + int NORMAL_ATTACK = 1; + POLE_BACKHAND_ATTACK = 0; + POLE_SWIPE_ATTACK = 0; + if ((POLE_CAN_SWIPE)) + { + if (param1 != "poke2") + { + } + if ((IsKeyDown(GetOwner(), "moveright"))) + { + POLE_SWIPE_ATTACK = 1; + int L_SWIPE = 1; + string VIEW_ANIM = VANIM_SWIPE1; + string OWNER_ANIM = PANIM_SWIPE2; + int NORMAL_ATTACK = 0; + } + if ((IsKeyDown(GetOwner(), "moveleft"))) + { + POLE_SWIPE_ATTACK = 1; + int L_SWIPE = 1; + string VIEW_ANIM = VANIM_SWIPE2; + string OWNER_ANIM = PANIM_SWIPE1; + int NORMAL_ATTACK = 0; + } + if ((L_SWIPE)) + { + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + POLE_SWIPE_DMG_DELAY("attack_swipe_strike"); + } + } + if ((POLE_CAN_BACKHAND)) + { + if (param1 != "poke2") + { + } + if ((IsKeyDown(GetOwner(), "back"))) + { + if ((IsKeyDown(GetOwner(), "use"))) + { + } + POLE_BACKHAND_ATTACK = 1; + string VIEW_ANIM = VANIM_POKE_BACK; + string OWNER_ANIM = PANIM_POKE_BACK; + int NORMAL_ATTACK = 0; + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + POLE_BACKHAND_DMG_DELAY("attack_backhand_strike"); + } + } + if ((NORMAL_ATTACK)) + { + if (param1 == "poke1") + { + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + string VIEW_ANIM = VANIM_POKE1; + string OWNER_ANIM = PANIM_POKE; + } + if (param1 == "poke2") + { + string VIEW_ANIM = VANIM_POKE2; + string OWNER_ANIM = PANIM_POKE; + } + if (param1 == "priswipe") + { + LogDebug("pole_attack priswipe"); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + if ((IsKeyDown(GetOwner(), "moveleft"))) + { + int SIDE_SWIPE = 1; + } + if ((IsKeyDown(GetOwner(), "moveright"))) + { + int SIDE_SWIPE = 1; + } + if (!(SIDE_SWIPE)) + { + string VIEW_ANIM = VANIM_SWIPE1; + string OWNER_ANIM = PANIM_SWIPE1; + } + else + { + string VIEW_ANIM = VANIM_SWIPE2; + string OWNER_ANIM = PANIM_SWIPE2; + } + } + } + if ((WEAPON_UNDERSKILLED)) + { + WAS_UNDERSKILLED = 1; + SetAttackProp("ent_me", 0); + } + else + { + if ((WAS_UNDERSKILLED)) + { + } + SetAttackProp("ent_me", 0); + WAS_UNDERSKILLED = 0; + } + PlayOwnerAnim("critical", OWNER_ANIM); + // TODO: splayviewanim ent_me VIEW_ANIM + } + + void attack_poke1_strike() + { + EmitSound(GetOwner(), 1, SOUND_THRUST, 10); + } + + void attack_poke2_strike() + { + EmitSound(GetOwner(), 1, SOUND_THRUST, 10); + } + + void attack_swipe_strike() + { + EmitSound(GetOwner(), 1, SOUND_SWIPE, 10); + } + + void attack_backhand_strike() + { + EmitSound(GetOwner(), 1, SOUND_BACKHAND, 10); + } + + void attack_poke1_damaged_other() + { + if (!(true)) return; + string TARGET_HIT = param1; + string DMG_DONE = param2; + pole_adjust_damage(TARGET_HIT, DMG_DONE); + if (!(BWEAPON_CHARGE_PERCENT < 1)) return; + if (BWEAPON_CHARGE_PERCENT > 0.25) + { + BWEAPON_CHARGE_PERCENT -= 0.25; + string L_CHARGE_RATIO = /* TODO: $ratio */ $ratio(BWEAPON_CHARGE_PERCENT, 1.25, BWEAPON_DBL_CHARGE_ADJ); + string NEW_DMG = param2; + NEW_DMG *= L_CHARGE_RATIO; + SetDamage("dmg"); + return; + LogDebug("Adjusted dmg x L_CHARGE_RATIO"); + BWEAPON_CHARGE_PERCENT = 0; + string CUR_DRAIN = MELEE_ENERGY; + CUR_DRAIN *= BWEAPON_CHARGE_PERCENT; + DrainStamina(GetOwner()); + } + } + + void attack_poke2_damaged_other() + { + string TARGET_HIT = param1; + string DMG_DONE = param2; + pole_adjust_damage(TARGET_HIT, DMG_DONE); + } + + void pole_adjust_damage() + { + string TARGET_HIT = param1; + if (!(GetEntityOrigin(TARGET_HIT) != "(0.00,0.00,0.00)")) return; + if ((POLE_SWIPE_ATTACK)) + { + POLE_SWIPE_ATTACK = 0; + int EXIT_SUB = 1; + } + if ((POLE_BACKHAND_ATTACK)) + { + POLE_BACKHAND_ATTACK = 0; + if ((POLE_BACKHAND_STUN)) + { + string TARGET_HIT = param1; + if ((IsValidPlayer(TARGET_HIT))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB1 = 1; + } + if (!(EXIT_SUB1)) + { + } + if ((POLE_BACKHAND_SPECIAL)) + { + pole_backhand_special(TARGET_HIT); + } + if (RandomInt(1, 100) < POLE_BACKHAND_STUN_CHANCE) + { + } + ApplyEffect(TARGET_HIT, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + if (POLE_BACKHAND_REPEL > 0) + { + if (GetRelationship(TARGET_HIT) == "enemy") + { + } + AddVelocity(TARGET_HIT, /* TODO: $relvel */ $relvel(0, POLE_BACKHAND_REPEL, 110)); + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DMG_DONE = param2; + if (!(DMG_DONE > 0)) return; + string TARGET_RANGE = GetEntityRange(TARGET_HIT); + if ((POLE_POKE1_ENHANCED)) + { + pole_poke_enhance(TARGET_HIT, DMG_DONE); + } + if (TARGET_RANGE < POLE_MIN_RANGE) + { + DMG_DONE *= POLE_MIN_DMG_MULTI; + SetDamage("dmg"); + return; + LogDebug("pole_adjust_damage short"); + } + else + { + string RANGE_RATIO = TARGET_RANGE; + RANGE_RATIO /= MELEE_RANGE; + string ADJUST_RATIO = /* TODO: $ratio */ $ratio(RANGE_RATIO, POLE_MIN_DMG_MULTI, POLE_MAX_DMG_MULTI); + DMG_DONE *= ADJUST_RATIO; + SetDamage("dmg"); + return; + LogDebug("pole_adjust_damage ADJUST_RATIO TARGET_RANGE vs MELEE_RANGE"); + } + } + + void game_attack_cancel() + { + PlayOwnerAnim("once", PANIM_IDLE); + } + + void game_viewanimdone() + { + LogDebug("game_viewanimdone PARAM1"); + } + + void pole_idle_anim_cl() + { + if (!(false)) return; + if ((POLE_NO_IDLE)) return; + if (!(GetEntityProperty(GetOwner(), "inhand"))) + { + POLE_IDLE_ACTIVE_CL = 0; + } + if (!("get" + GetOwner() + "," + "inhand")) return; + Random(2_0, 4_0)("pole_idle_anim_cl"); + if ((POLE_HOLD_IDLE_CL)) return; + if (("game.item.attacking")) + { + POLE_IDLE_ANIM_COUNT_CL = 0; + POLE_NEXT_IDLE_CL = GetGameTime(); + POLE_NEXT_IDLE_CL += 3.0; + } + if (!(GetGameTime() > POLE_NEXT_IDLE_CL)) return; + if (("game.item.attacking")) return; + if (POLE_IDLE_ANIM_COUNT_CL == 0) + { + PlayViewAnim(VANIM_IDLE1); + } + if (POLE_IDLE_ANIM_COUNT_CL == 1) + { + PlayViewAnim(VANIM_IDLE1); + } + if (POLE_IDLE_ANIM_COUNT_CL == 2) + { + PlayViewAnim(VANIM_IDLE1); + } + if (POLE_IDLE_ANIM_COUNT_CL == 3) + { + PlayViewAnim(VANIM_IDLE1); + } + if (POLE_IDLE_ANIM_COUNT_CL == 4) + { + PlayViewAnim(VANIM_IDLE2); + } + if (POLE_IDLE_ANIM_COUNT_CL == 5) + { + PlayViewAnim(VANIM_IDLE3); + } + POLE_IDLE_ANIM_COUNT_CL += 1; + if (!(POLE_IDLE_ANIM_COUNT_CL > 5)) return; + POLE_IDLE_ANIM_COUNT_CL = 0; + } + + void game_attack1() + { + if (!(WEAPON_UNDERSKILLED)) return; + if (!(GetGameTime() > WEAPON_NEXT_SKILL_WARN)) return; + WEAPON_NEXT_SKILL_WARN = GetGameTime(); + WEAPON_NEXT_SKILL_WARN += 15.0; + pole_check_skill(); + } + + void pole_check_skill() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + string FIND_MELEE_STAT = "skill."; + FIND_MELEE_STAT += MELEE_STAT; + if (GetEntityProperty(GetOwner(), "find_melee_stat") < BASE_LEVEL_REQ) + { + SendColoredMessage(GetOwner(), "You lack the skill to properly wield this weapon!"); + string OUT_STR = "You lack the proficiency to wield this weapon. ( requires: "; + OUT_STR += MELEE_STAT; + OUT_STR += " proficiency "; + OUT_STR += BASE_LEVEL_REQ; + OUT_STR += " )"; + SendInfoMsg(GetOwner(), "Insufficient Skill " + OUT_STR); + WEAPON_UNDERSKILLED = 1; + WAS_UNDERSKILLED = 1; + } + else + { + WEAPON_UNDERSKILLED = 0; + } + } + + void game_+attack2() + { + if (!(true)) return; + if (!(CanAttack(GetOwner()))) return; + if ((POLE_CAN_THROW)) + { + if (!("game.item.attacking")) + { + } + if (!(POLE_THROW_PREPING)) + { + } + if (!(POLE_THROW_PREPPED)) + { + } + if (GetGameTime() > POLE_NEXT_THROW) + { + } + POLE_NEXT_THROW = GetGameTime(); + POLE_NEXT_THROW += 1.0; + POLE_THROW_PREPING = 1; + // TODO: splayviewanim ent_me VANIM_THROW_PREP + PlayOwnerAnim("once", PANIM_THROW_PREP); + CallClientItemEvent(GetOwner(), "pole_toggle_idle_cl", 1); + POLE_THROW_PREP_DELAY("pole_throw_ready"); + } + if ((POLE_CAN_BLOCK)) + { + if (!(POLE_IN_BLOCK)) + { + } + if (!(POLE_IN_SPIN)) + { + } + if (GetGameTime() > NEXT_BLOCK) + { + } + if (!("game.item.attacking")) + { + } + NEXT_BLOCK = GetGameTime(); + NEXT_BLOCK += POLE_BLOCK_DELAY; + if ((POLE_CAN_REPEL)) + { + if (!(IsKeyDown(GetOwner(), "forward"))) + { + pole_block_start(); + } + else + { + pole_repel(); + } + } + else + { + pole_block_start(); + } + } + } + + void pole_throw_ready() + { + POLE_THROW_PREPING = 0; + POLE_THROW_PREPPED = 1; + POLE_THROW_START_CHARGE_TIME = GetGameTime(); + PlayOwnerAnim("once", PANIM_THROW_IDLE); + } + + void game__attack2() + { + if (!(true)) return; + if ((POLE_THROW_PREPPING)) + { + if (!("game.item.attacking")) + { + } + // TODO: splayviewanim ent_me VANIM_IDLE + PlayOwnerAnim("once", PANIM_IDLE); + } + if ((POLE_THROW_PREPPED)) + { + if (!("game.item.attacking")) + { + } + pole_do_throw(); + } + if ((POLE_IN_BLOCK)) + { + if ((POLE_IN_SPIN)) + { + pole_spin_end(); + } + else + { + pole_block_end(); + } + } + } + + void pole_block_start() + { + PlayOwnerAnim("critical", PANIM_BLOCK_START); + // TODO: splayviewanim ent_me VANIM_BLOCK_START + ApplyEffect(GetOwner(), "effects/effect_templock"); + CallClientItemEvent(GetOwner(), "pole_toggle_idle_cl", 1); + ScheduleDelayedEvent(1.0, "pole_block_hold"); + if (!(POLE_CAN_SPIN)) return; + if (!(IsKeyDown(GetOwner(), "back"))) return; + ScheduleDelayedEvent(5.0, "pole_spin_start"); + } + + void pole_toggle_idle_cl() + { + POLE_HOLD_IDLE_CL = param1; + } + + void pole_suspend_idle_cl() + { + POLE_IDLE_ANIM_COUNT_CL = 0; + POLE_NEXT_IDLE_CL = GetGameTime(); + POLE_NEXT_IDLE_CL += param1; + } + + void pole_block_hold() + { + LogDebug("pole_block_start canattack CanAttack(GetOwner())"); + PlayOwnerAnim("hold", PANIM_BLOCK_HOLD); + // TODO: splayviewanim ent_me VANIM_BLOCK_HOLD + POLE_IN_BLOCK = 1; + } + + void pole_block_end() + { + LogDebug("pole_block_end"); + POLE_IN_BLOCK = 0; + NEXT_BLOCK = GetGameTime(); + NEXT_BLOCK += 3.0; + CallExternal(GetOwner(), "ext_end_templock"); + PlayOwnerAnim("break"); + PlayOwnerAnim("critical", PANIM_BLOCK_END); + CallClientItemEvent(GetOwner(), "pole_block_end_cl"); + } + + void pole_block_end_cl() + { + PlayViewAnim(VANIM_BLOCK_END); + POLE_HOLD_IDLE_CL = 0; + POLE_IDLE_ANIM_COUNT_CL = 0; + POLE_NEXT_IDLE_CL = GetGameTime(); + POLE_NEXT_IDLE_CL += 3.0; + } + + void pole_spin_start() + { + if (!(POLE_IN_BLOCK)) return; + LogDebug("pole_spin_start"); + // TODO: splayviewanim ent_me VANIM_SPIN_START + PlayOwnerAnim("break"); + PlayOwnerAnim("once", PANIM_SPIN_START); + // svplaysound: svplaysound 2 10 SOUND_SPIN_LOOP + EmitSound(2, 10, SOUND_SPIN_LOOP); + ScheduleDelayedEvent(0.5, "pole_spin_hold"); + ScheduleDelayedEvent(30.0, "pole_spin_end"); + } + + void pole_spin_hold() + { + LogDebug("pole_spin_hold canattack CanAttack(GetOwner())"); + POLE_IN_SPIN = 1; + // TODO: splayviewanim ent_me VANIM_SPIN_HOLD + PlayOwnerAnim("hold", PANIM_SPIN_HOLD); + } + + void pole_spin_end() + { + if (!(POLE_IN_SPIN)) return; + LogDebug("pole_spin_end"); + NEXT_BLOCK = GetGameTime(); + NEXT_BLOCK += 3.0; + CallExternal(GetOwner(), "ext_end_templock"); + POLE_IN_SPIN = 0; + POLE_IN_BLOCK = 0; + // svplaysound: svplaysound 2 0 SOUND_SPIN_LOOP + EmitSound(2, 0, SOUND_SPIN_LOOP); + PlayOwnerAnim("break"); + PlayOwnerAnim("critical", PANIM_SPIN_END); + CallClientItemEvent(GetOwner(), "pole_spin_end_cl"); + } + + void pole_spin_end_cl() + { + PlayViewAnim(VANIM_SPIN_END); + POLE_HOLD_IDLE_CL = 0; + POLE_IDLE_ANIM_COUNT_CL = 0; + POLE_NEXT_IDLE_CL = GetGameTime(); + POLE_NEXT_IDLE_CL += 3.0; + } + + void bs_global_command() + { + if (!(param3 == "death")) return; + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if ((POLE_IN_SPIN)) + { + pole_spin_end(); + } + if ((POLE_IN_BLOCK)) + { + pole_block_end(); + } + } + + void bweapon_effect_remove() + { + if ((POLE_IN_SPIN)) + { + pole_spin_end(); + } + if ((POLE_IN_BLOCK)) + { + pole_block_end(); + } + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if ((POLE_IN_BLOCK)) + { + if ((param4).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if ((param4).findFirst("target") >= 0) + { + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string PROJECTILE_FIRED = GetEntityProperty(param2, "is_projectile"); + if ((PROJECTILE_FIRED)) + { + string BLOCK_TARG = param1; + } + else + { + string BLOCK_TARG = param2; + } + string OWNER_ORG = GetEntityOrigin(GetOwner()); + string OWNER_ANG = GetEntityAngles(GetOwner()); + string ATTACK_ORG = GetEntityOrigin(BLOCK_TARG); + if ((WithinCone2D(ATTACK_ORG, OWNER_ORG, OWNER_ANG))) + { + } + string DMG_TAKEN = param3; + string ORIG_DMG = param3; + DMG_TAKEN *= POLE_BLOCK_PROT_RATIO; + if ((POLE_IN_SPIN)) + { + DMG_TAKEN *= POLE_BLOCK_PROT_RATIO; + if ((PROJECTILE_FIRED)) + { + int PROJECTILE_BLOCKED = 1; + } + } + if (!(PROJECTILE_BLOCKED)) + { + SetDamage("dmg"); + ORIG_DMG -= DMG_TAKEN; + SendPlayerMessage("Polearm", "blocked " + ORIG_DMG + " damage"); + } + else + { + SetDamage("hit"); + SetDamage("dmg"); + SendPlayerMessage("Polearm", "deflected " + GetEntityName(param2)); + } + if (!(POLE_IN_SPIN)) + { + // TODO: splayviewanim ent_me VANIM_BLOCK_HOLD + } + EmitSound(GetOwner(), 1, SOUND_BLOCK, 10); + } + } + + void game_hitworld() + { + // PlayRandomSound from: SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void pole_repel() + { + EmitSound(GetOwner(), 1, SOUND_READY, 10); + // TODO: splayviewanim ent_me VANIM_REPEL + PlayOwnerAnim("critical", PANIM_REPEL); + CallClientItemEvent(GetOwner(), "pole_suspend_idle_cl", 3.0); + string SCAN_LOC = GetEntityOrigin(GetOwner()); + OWNER_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + SCAN_LOC += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, 32, 0)); + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 64, SCAN_LOC); + PUSH_TARGETS = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(PUSH_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(PUSH_TARGETS, ";"); i++) + { + pole_repel_affect_targets(); + } + } + + void pole_repel_affect_targets() + { + string CUR_TARGET = GetToken(PUSH_TARGETS, i, ";"); + if (!(GAME_PVP)) + { + if ((IsValidPlayer(CUR_TARGET))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string MAX_HP_PUSH = GetEntityMaxHealth(GetOwner()); + MAX_HP_PUSH *= 2; + if (MAX_HP_PUSH < 1500) + { + int MAX_HP_PUSH = 1500; + } + if (!(GetEntityMaxHealth(CUR_TARGET) < MAX_HP_PUSH)) return; + AddVelocity(CUR_TARGET, /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, POLE_REPEL_STRENGTH, 10))); + } + + void pole_do_throw() + { + LogDebug("pole_do_throw"); + POLE_THROW_PREPPED = 0; + // TODO: splayviewanim ent_me VANIM_THROW_PREPED_THROW + PlayOwnerAnim("once", PANIM_THROW_PREPED_THROW); + POLE_THROW_PREPED_ATKDELAY("pole_do_throw2"); + } + + void pole_do_throw2() + { + EmitSound(GetOwner(), 1, SOUND_THROW, 10); + float CHARGE_RATIO = GetGameTime(); + CHARGE_RATIO -= POLE_THROW_START_CHARGE_TIME; + if (CHARGE_RATIO >= POLE_THROW_MAX_CHARGE_TIME) + { + float CHARGE_RATIO = 1.0; + } + else + { + CHARGE_RATIO /= POLE_THROW_MAX_CHARGE_TIME; + string CHARGE_RATIO = /* TODO: $ratio */ $ratio(CHARGE_RATIO, 0.01, 1.0); + } + LogDebug("pole_do_throw2 CHARGE_RATIO"); + string L_THROW_POWER = POLE_THROW_POWER; + string L_COF = POLE_THROW_COF; + if ((WEAPON_UNDERSKILLED)) + { + float SKILL_DIFF = 1.0; + string SKILL_RATIO = GetSkillLevel(GetOwner(), "polearms"); + SKILL_RATIO /= BASE_LEVEL_REQ; + SKILL_DIFF -= SKILL_RATIO; + L_COF += SKILL_DIFF; + L_THROW_POWER *= SKILL_RATIO; + if (CHARGE_RATIO > 0.1) + { + float CHARGE_RATIO = 0.1; + } + LogDebug("skildiff SKILL_DIFF cof L_COF thr L_THROW_POWER rat SKILL_RATIO"); + } + else + { + string CR_PLUS_ONE = CHARGE_RATIO; + CHARGE_RATIO += 1; + L_THROW_POWER *= CHARGE_RATIO; + } + CallExternal(GetOwner(), "ext_toss_spear", CHARGE_RATIO, POLE_THOW_PROJECTILE, "view", "none", L_THROW_POWER, 0, L_COF, "polearms"); + CallClientItemEvent(GetOwner(), "pole_toggle_idle_cl", 0); + POLE_NEXT_THROW = GetGameTime(); + POLE_NEXT_THROW += POLE_THROW_RECHARGE_TIME; + } + + void pole_abort_throw() + { + POLE_THROW_PREPPED = 0; + POLE_THROW_PREPPING = 0; + } + + void ext_player_sit() + { + LogDebug("ext_player_sit"); + if ((POLE_IN_SPIN)) + { + pole_spin_end(); + } + if ((POLE_IN_BLOCK)) + { + pole_block_end(); + } + } + + void game_setchargepercent() + { + BWEAPON_CHARGE_PERCENT = param1; + } + +} + +} diff --git a/scripts/angelscript/items/polearms_dra.as b/scripts/angelscript/items/polearms_dra.as new file mode 100644 index 00000000..c3bc0952 --- /dev/null +++ b/scripts/angelscript/items/polearms_dra.as @@ -0,0 +1,223 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsDra : CGameScript +{ + int BASE_LEVEL_REQ; + int FIRE_BURST_MP; + int FREEZE_COUNT; + string FREEZE_TARGS; + string ICE_WAVE_YAW; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float POLE_BACKHAND_ACCURACY; + int POLE_BACKHAND_DMG; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_BACKHAND_REPEL; + int POLE_BACKHAND_STUN; + float POLE_BACKHAND_STUN_CHANCE; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_POWER_THROW; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + int POLE_POKE1_ENHANCED; + string POLE_THOW_PROJECTILE; + int POLE_THROW_MP; + int POLE_THROW_POWER; + int VMODEL_IDX; + + PolearmsDra() + { + BASE_LEVEL_REQ = 15; + FIRE_BURST_MP = 25; + VMODEL_IDX = 12; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 21; + PMODEL_IDX_HANDS = 20; + MELEE_DMG = 210; + MELEE_RANGE = 110; + MELEE_DMG_TYPE = "fire"; + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 1.75; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 0; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_BACKHAND_DMG = 300; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "blunt"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.9; + POLE_BACKHAND_REPEL = 400; + POLE_BACKHAND_STUN = 1; + POLE_BACKHAND_STUN_CHANCE = 0.9; + POLE_CAN_POWER_THROW = 1; + POLE_THROW_MP = 0; + POLE_THROW_POWER = 1000; + POLE_THOW_PROJECTILE = "proj_pole_dra"; + POLE_POKE1_ENHANCED = 1; + } + + void polearm_spawn() + { + SetName("Dragon Lance"); + SetDescription("A footman's lance imbued with elemental fire"); + SetWeight(60); + SetSize(2); + SetValue(3000); + SetHUDSprite("trade", 189); + if (!(true)) return; + FREEZE_COUNT = 0; + } + + void pole_poke1_enhance() + { + if (!(true)) return; + string TARG_HIT = param1; + if ((IsValidPlayer(TARG_HIT))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string L_DOT = GetSkillLevel(GetOwner(), "spellcasting.fire"); + L_DOT *= 0.5; + ApplyEffect(TARG_HIT, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), L_DOT, "polearms"); + } + + void polearm_register_attacks() + { + int reg.attack.mpdrain = 0; + string reg.attack.type = "strike-land"; + int reg.attack.range = 10; + int reg.attack.dmg = 1; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "fire"; + int reg.attack.energydrain = 5; + string reg.attack.stat = "spellcasting.fire"; + int reg.attack.hitchance = 100; + int reg.attack.priority = 3; + float reg.attack.delay.strike = 0.1; + float reg.attack.delay.end = 0.2; + int reg.attack.ofs.startpos = 0; + int reg.attack.ofs.aimang = 0; + int reg.attack.noise = 5000; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "attack_fire_burst"; + float reg.attack.chargeamt = 3.0; + int reg.attack.reqskill = 15; + RegisterAttack(); + } + + void attack_fire_burst_start() + { + PlayViewAnim(VANIM_WIDE); + PlayOwnerAnim("once", PANIM_SWIPE2); + LogDebug("attack_ice_burst_start"); + } + + void attack_fire_burst_strike() + { + LogDebug("attack_ice_burst_strike"); + if (!(true)) return; + if (GetEntityMP(GetOwner()) < FIRE_BURST_MP) + { + SendColoredMessage(GetOwner(), "Dragon Lance: Insufficient mana for fire burst"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + string BURST_POS = GetEntityOrigin(GetOwner()); + BURST_POS = "z"; + ICE_WAVE_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + ClientEvent("new", "all", "effects/sfx_fire_wave2", BURST_POS, ICE_WAVE_YAW, 45); + string SCAN_POS = GetEntityOrigin(GetOwner()); + SCAN_POS += /* TODO: $relpos */ $relpos(Vector3(0, ICE_WAVE_YAW, 0), Vector3(0, 128, 32)); + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 512, SCAN_POS); + FREEZE_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(FREEZE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(FREEZE_TARGS, ";"); i++) + { + ice_burst_affect_targs(); + } + } + + void ice_burst_affect_targs() + { + string CUR_TARG = GetToken(FREEZE_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string OWNER_ORG = GetEntityOrigin(GetOwner()); + Vector3 OWNER_ANG = Vector3(0, ICE_WAVE_YAW, 0); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG))) return; + string TRACE_START = OWNER_ORG; + string TRACE_END = TARG_ORG; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + string L_DOT = GetSkillLevel(GetOwner(), "spellcasting.fire"); + L_DOT *= 0.5; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), L_DOT, "polearms"); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(POLE_IN_BLOCK)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + if (!((param4).findFirst("fire") >= 0)) return; + string IN_DMG = param3; + IN_DMG *= 0.1; + SetDamage("dmg"); + return; + } + + void game_dodamage() + { + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(RandomInt(1, 5) == 1)) return; + string L_DOT = GetSkillLevel(GetOwner(), "spellcasting.fire"); + if (!(L_DOT > 15)) return; + L_DOT *= 0.5; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), L_DOT, "polearms"); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_h.as b/scripts/angelscript/items/polearms_h.as new file mode 100644 index 00000000..01839df5 --- /dev/null +++ b/scripts/angelscript/items/polearms_h.as @@ -0,0 +1,170 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsH : CGameScript +{ + int BASE_LEVEL_REQ; + float HOLY_CIRCLE_DURATION; + int HOLY_CIRCLE_MP; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string MELEE_STARTPOS; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float POLE_BACKHAND_ACCURACY; + int POLE_BACKHAND_DMG; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_BACKHAND_REPEL; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_POWER_THROW; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + string POLE_THOW_PROJECTILE; + int POLE_THROW_POWER; + int VMODEL_IDX; + + PolearmsH() + { + BASE_LEVEL_REQ = 30; + HOLY_CIRCLE_MP = 200; + HOLY_CIRCLE_DURATION = 30.0; + VMODEL_IDX = 4; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 15; + PMODEL_IDX_HANDS = 14; + MELEE_DMG = 200; + MELEE_RANGE = 120; + MELEE_DMG_TYPE = "holy"; + MELEE_STARTPOS = Vector3(0, 0, 5); + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 1.75; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 0; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_BACKHAND_DMG = 150; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "pierce"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.9; + POLE_BACKHAND_REPEL = 500; + POLE_CAN_POWER_THROW = 1; + POLE_THROW_POWER = 800; + POLE_THOW_PROJECTILE = "proj_pole_holy"; + } + + void polearm_spawn() + { + SetName("Holy Lance"); + SetDescription("A spear often wielded by Felewyn's Seekers"); + SetWeight(30); + SetSize(2); + SetValue(4000); + SetHUDSprite("trade", 78); + } + + void polearm_register_attacks() + { + int reg.attack.mpdrain = 0; + string reg.attack.type = "strike-land"; + int reg.attack.range = 10; + int reg.attack.dmg = 1; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "holy"; + int reg.attack.energydrain = 5; + string reg.attack.stat = "spellcasting.divination"; + int reg.attack.hitchance = 100; + int reg.attack.priority = 3; + float reg.attack.delay.strike = 0.1; + float reg.attack.delay.end = 0.2; + int reg.attack.ofs.startpos = 0; + int reg.attack.ofs.aimang = 0; + int reg.attack.noise = 5000; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "holy_circle"; + float reg.attack.chargeamt = 3.0; + int reg.attack.reqskill = 34; + RegisterAttack(); + } + + void holy_circle_start() + { + PlayViewAnim(VANIM_WIDE); + PlayOwnerAnim("once", PANIM_SWIPE2); + LogDebug("holy_circle_start"); + } + + void holy_circle_strike() + { + if (!(true)) return; + if (GetEntityMP(GetOwner()) < HOLY_CIRCLE_MP) + { + SendColoredMessage(GetOwner(), "Holy Lance: Insufficient Mana for Holy Aura"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + SendColoredMessage(GetOwner(), "Holy Lance: Holy aura already active"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + string HEAL_POWER = GetSkillLevel(GetOwner(), "spellcasting.divination"); + HEAL_POWER /= 4; + CallExternal(GetOwner(), "ext_holy_aura", HOLY_CIRCLE_DURATION, 128, HEAL_POWER); + } + + void bweapon_effect_remove() + { + LogDebug("bweapon_effect_remove"); + CallExternal(GetOwner(), "ext_end_holy_aura"); + } + + void bs_global_command() + { + if (!(param3 == "death")) return; + if (!(param1 == GetEntityIndex(GetOwner()))) return; + CallExternal(GetOwner(), "ext_end_holy_aura"); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + if (GetEntityRace(param1) == "undead") + { + int REDUCE_DMG = 1; + } + if ((GetEntityProperty(param1, "scriptvar"))) + { + int REDUCE_DMG = 1; + } + if (!(REDUCE_DMG)) return; + string DMG_TAKEN = param3; + DMG_TAKEN *= 0.5; + SetDamage("dmg"); + return; + } + +} + +} diff --git a/scripts/angelscript/items/polearms_hal.as b/scripts/angelscript/items/polearms_hal.as new file mode 100644 index 00000000..16ce8b66 --- /dev/null +++ b/scripts/angelscript/items/polearms_hal.as @@ -0,0 +1,87 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsHal : CGameScript +{ + int BASE_LEVEL_REQ; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float POLE_BACKHAND_ACCURACY; + int POLE_BACKHAND_DMG; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + float POLE_SWIPE_ACCURACY; + int POLE_SWIPE_DMG; + int POLE_SWIPE_DMG_RANGE; + string POLE_SWIPE_DMG_TYPE; + int POLE_SWIPE_RANGE; + int VANIM_SWIPE1; + int VANIM_SWIPE2; + int VMODEL_IDX; + + PolearmsHal() + { + BASE_LEVEL_REQ = 9; + VMODEL_IDX = 10; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 3; + PMODEL_IDX_HANDS = 2; + MELEE_DMG = 200; + MELEE_RANGE = 120; + MELEE_DMG_TYPE = "pierce"; + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 2.0; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 1; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_SWIPE_DMG = 190; + POLE_SWIPE_DMG_RANGE = 20; + POLE_SWIPE_DMG_TYPE = "slash"; + POLE_SWIPE_RANGE = 80; + POLE_SWIPE_ACCURACY = 0.7; + VANIM_SWIPE1 = 7; + VANIM_SWIPE2 = 7; + POLE_BACKHAND_DMG = 200; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "blunt"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.9; + } + + void polearm_spawn() + { + SetName("Halberd"); + SetDescription("The dynamic military stand by"); + SetWeight(30); + SetSize(2); + SetValue(50); + SetHUDSprite("trade", 179); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_har.as b/scripts/angelscript/items/polearms_har.as new file mode 100644 index 00000000..b392bbab --- /dev/null +++ b/scripts/angelscript/items/polearms_har.as @@ -0,0 +1,81 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsHar : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + int POLE_CAN_THROW; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + string POLE_THOW_PROJECTILE; + float POLE_THROW_MAX_CHARGE_TIME; + int POLE_THROW_POWER; + float POLE_THROW_RECHARGE_TIME; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_THROW; + int VMODEL_IDX; + + PolearmsHar() + { + BASE_LEVEL_REQ = 15; + VMODEL_IDX = 9; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 5; + PMODEL_IDX_HANDS = 4; + MELEE_DMG = 220; + MELEE_RANGE = 120; + MELEE_DMG_TYPE = "pierce"; + MELEE_ACCURACY = 0.95; + POLE_MIN_RANGE = 70; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 1.75; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 0; + POLE_CAN_BLOCK = 0; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 0; + POLE_CAN_BACKHAND = 0; + POLE_CAN_THROW = 1; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + POLE_THROW_POWER = 800; + POLE_THOW_PROJECTILE = "proj_pole_harpoon"; + POLE_THROW_RECHARGE_TIME = 2.0; + POLE_THROW_MAX_CHARGE_TIME = 4.0; + SOUND_THROW = "weapons/swinghuge.wav"; + } + + void polearm_spawn() + { + SetName("Harpoon"); + SetDescription("A heavy throwing spear"); + SetWeight(10); + SetSize(2); + SetValue(1000); + SetHUDSprite("trade", 186); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_nag.as b/scripts/angelscript/items/polearms_nag.as new file mode 100644 index 00000000..25337cd3 --- /dev/null +++ b/scripts/angelscript/items/polearms_nag.as @@ -0,0 +1,89 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsNag : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ATK_DURATION; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float POLE_BACKHAND_ACCURACY; + int POLE_BACKHAND_DMG; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_BACKHAND_REPEL; + int POLE_BACKHAND_STUN; + float POLE_BACKHAND_STUN_CHANCE; + float POLE_BLOCK_DELAY; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + int POLE_PRIMARY_SWIPE; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + int VMODEL_IDX; + + PolearmsNag() + { + BASE_LEVEL_REQ = 18; + VMODEL_IDX = 7; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 9; + PMODEL_IDX_HANDS = 8; + MELEE_DMG = 250; + MELEE_RANGE = 90; + MELEE_DMG_TYPE = "slash"; + MELEE_ATK_DURATION = 0.9; + POLE_MIN_RANGE = 40; + POLE_MIN_DMG_MULTI = 0.75; + POLE_MAX_DMG_MULTI = 1.25; + POLE_BLOCK_DELAY = 1.0; + POLE_CAN_POKE1 = 0; + POLE_PRIMARY_SWIPE = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 0; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_BACKHAND_DMG = 150; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "blunt"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.9; + POLE_BACKHAND_STUN = 1; + POLE_BACKHAND_STUN_CHANCE = 1.0; + POLE_BACKHAND_REPEL = 500; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + } + + void polearm_spawn() + { + SetName("Elven Glaive"); + SetDescription("A long handled blade for fighting groups of opponents"); + SetWeight(60); + SetSize(2); + SetValue(1500); + SetHUDSprite("trade", 182); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_ph.as b/scripts/angelscript/items/polearms_ph.as new file mode 100644 index 00000000..ece72003 --- /dev/null +++ b/scripts/angelscript/items/polearms_ph.as @@ -0,0 +1,194 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsPh : CGameScript +{ + int BASE_LEVEL_REQ; + string LIGHTNING_CL_IDX; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string MELEE_STARTPOS; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float POLE_BACKHAND_ACCURACY; + int POLE_BACKHAND_DMG; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_BACKHAND_REPEL; + int POLE_BACKHAND_SPECIAL; + float POLE_BACKHAND_STUN_CHANCE; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_POWER_THROW; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + string POLE_THOW_PROJECTILE; + int POLE_THROW_MP; + int POLE_THROW_POWER; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_THUNDER; + int VMODEL_IDX; + int ZAP_MP; + + PolearmsPh() + { + BASE_LEVEL_REQ = 25; + ZAP_MP = 20; + VMODEL_IDX = 2; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 17; + PMODEL_IDX_HANDS = 16; + MELEE_DMG = 300; + MELEE_RANGE = 120; + MELEE_DMG_TYPE = "lightning"; + MELEE_STARTPOS = Vector3(0, 0, 5); + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 1.75; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 0; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 1; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_BACKHAND_DMG = 150; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "blunt"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.9; + POLE_BACKHAND_STUN_CHANCE = 1.0; + POLE_BACKHAND_REPEL = 500; + POLE_BACKHAND_SPECIAL = 1; + POLE_CAN_POWER_THROW = 1; + POLE_THROW_MP = 10; + POLE_THROW_POWER = 800; + POLE_THOW_PROJECTILE = "proj_pole_ph"; + SOUND_THUNDER = "magic/bolt_end.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + } + + void polearm_spawn() + { + SetName("Stormpharaoh's Lance"); + SetDescription("A spear once hefted by a mighty lord of the dead"); + SetWeight(40); + SetSize(2); + SetValue(6000); + SetHUDSprite("trade", 109); + } + + void attack_poke2_start() + { + ClientEvent("new", "all", "items/polearms_ph_cl", GetEntityIndex(GetOwner())); + LIGHTNING_CL_IDX = "game.script.last_sent_id"; + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_poke2_strike() + { + if (!(GetSkillLevel(GetOwner(), "spellcasting.lightning") > 25)) return; + if (GetEntityMP(GetOwner()) < ZAP_MP) + { + SendColoredMessage(GetOwner(), "Stormpharaoh's Lance: Insufficient mana for Lightning Strike"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TRACE_START = param2; + string TRACE_END = TRACE_START; + string OWNER_VIEW = GetEntityProperty(GetOwner(), "viewangles"); + TRACE_END += /* TODO: $relpos */ $relpos(OWNER_VIEW, Vector3(0, 1024, 0)); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(IsEntityAlive(TRACE_LINE))) + { + string BEAM_END = TraceLine(TRACE_START, TRACE_END); + } + else + { + string BEAM_TARG = TRACE_LINE; + string BEAM_END = GetEntityOrigin(BEAM_TARG); + if (!(IsValidPlayer(BEAM_TARG))) + { + BEAM_END += "z"; + } + } + if ((IsValidPlayer(BEAM_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + int EXIT_SUB = 1; + GiveMP(GetOwner()); + ClientEvent("update", "all", LIGHTNING_CL_IDX, "do_lightning", BEAM_END); + EmitSound(GetOwner(), 0, SOUND_THUNDER, 10); + if (!(IsEntityAlive(BEAM_TARG))) return; + string DBEAM_DMG = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + DBEAM_DMG *= 3.0; + XDoDamage(BEAM_TARG, "direct", DBEAM_DMG, 1.0, GetOwner(), GetOwner(), "spellcasting.lightning", "lightning"); + string DOT_SHOCK = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + DOT_SHOCK *= 1.5; + ApplyEffect(BEAM_TARG, "effects/dot_lightning", 10.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + int PUSH_STR = 500; + PUSH_STR *= /* TODO: $get_takedmg */ $get_takedmg(BEAM_TARG, "lightning"); + AddVelocity(BEAM_TARG, /* TODO: $relvel */ $relvel(0, PUSH_STR, 110)); + } + + void pole_spin_hold() + { + if (!(GetSkillLevel(GetOwner(), "spellcasting.lightning") > 25)) return; + CallExternal(GetOwner(), "ext_pole_lshield"); + } + + void pole_spin_end() + { + CallExternal(GetOwner(), "ext_pole_lshield_end", "abort"); + } + + void pole_backhand_special() + { + string L_DOT = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + L_DOT *= 0.5; + ApplyEffect(param1, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), L_DOT); + } + + void game_dodamage() + { + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(RandomInt(1, 3) == 1)) return; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + DOT_BURN *= 1.5; + ApplyEffect(param2, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_BURN); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_ph_cl.as b/scripts/angelscript/items/polearms_ph_cl.as new file mode 100644 index 00000000..bea36fc1 --- /dev/null +++ b/scripts/angelscript/items/polearms_ph_cl.as @@ -0,0 +1,87 @@ +#pragma context server + +namespace MS +{ + +class PolearmsPhCl : CGameScript +{ + string FORK_SPRITE_ORG; + int FX_ACTIVE; + string FX_OWNER; + string FX_VIEW_IDX; + + void client_activate() + { + FX_OWNER = param1; + LogDebug("*** polearms_ph FX_OWNER vs game.localplayer.index"); + if (!("game.localplayer.thirdperson")) + { + if ("game.localplayer.index" == FX_OWNER) + { + } + FX_VIEW_IDX = "game.localplayer.viewmodel.active.id"; + FORK_SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_VIEW_IDX, "attachment0"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", FORK_SPRITE_ORG, "setup_fork_sprite", "update_fork_sprite"); + } + FX_ACTIVE = 1; + ScheduleDelayedEvent(2.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void do_lightning() + { + string BEAM_END = param1; + if ("game.localplayer.index" == FX_OWNER) + { + if (!("game.localplayer.thirdperson")) + { + string BEAM_START = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "attachment0"); + } + else + { + string BEAM_START = /* TODO: $getcl */ $getcl(FX_OWNER, "bonepos", 38); + } + } + else + { + string BEAM_START = /* TODO: $getcl */ $getcl(FX_OWNER, "bonepos", 38); + } + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.5, 15.0, 0.5, 255, 50, 30, Vector3(255, 255, 0)); + } + + void update_fork_sprite() + { + if (!(FX_ACTIVE)) return; + if (!("game.localplayer.thirdperson")) + { + ClientEffect("tempent", "set_current_prop", "origin", /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "attachment0")); + } + } + + void setup_fork_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(254, 254, 1)); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_ph_spin_cl.as b/scripts/angelscript/items/polearms_ph_spin_cl.as new file mode 100644 index 00000000..65f0c117 --- /dev/null +++ b/scripts/angelscript/items/polearms_ph_spin_cl.as @@ -0,0 +1,87 @@ +#pragma context server + +namespace MS +{ + +class PolearmsPhSpinCl : CGameScript +{ + string FORK_SPRITE_ORG; + int FX_ACTIVE; + string FX_OWNER; + string FX_VIEW_IDX; + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.25, 0.5)); + if ((FX_ACTIVE)) + { + } + string BEAM_START = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string OWNER_VANG = /* TODO: $getcl */ $getcl(FX_OWNER, "viewangles"); + BEAM_START += /* TODO: $relpos */ $relpos(OWNER_VANG, Vector3(0, 32, 0)); + string BEAM_END = BEAM_START; + float RND_ANG = Random(0.0, 359.99); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(RND_ANG, 0, 0), Vector3(0, 64, 0)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", Random(0.25, 0.5), 2.0, 3.0, 255, 50, 30, Vector3(255, 255, 0)); + string BEAM_END = BEAM_START; + float RND_ANG = Random(0.0, 359.99); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(RND_ANG, 0, 0), Vector3(0, 64, 0)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", Random(0.25, 0.5), 2.0, 3.0, 255, 50, 30, Vector3(255, 255, 0)); + } + + void client_activate() + { + FX_OWNER = param1; + FX_ACTIVE = 1; + if (!("game.localplayer.thirdperson")) + { + if ("game.localplayer.index" == FX_OWNER) + { + } + FX_VIEW_IDX = "game.localplayer.viewmodel.active.id"; + FORK_SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_VIEW_IDX, "bonepos", 48); + ClientEffect("tempent", "sprite", "3dmflaora.spr", FORK_SPRITE_ORG, "setup_fork_sprite", "update_fork_sprite"); + } + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_fork_sprite() + { + if (!(FX_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + if (!(FX_ACTIVE)) return; + if (!("game.localplayer.thirdperson")) + { + ClientEffect("tempent", "set_current_prop", "origin", /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 48)); + } + } + + void setup_fork_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 30.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(254, 254, 1)); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_qs.as b/scripts/angelscript/items/polearms_qs.as new file mode 100644 index 00000000..26d410ea --- /dev/null +++ b/scripts/angelscript/items/polearms_qs.as @@ -0,0 +1,91 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsQs : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float POLE_BACKHAND_ACCURACY; + int POLE_BACKHAND_DMG; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_BACKHAND_REPEL; + int POLE_BACKHAND_STUN; + float POLE_BACKHAND_STUN_CHANCE; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + float POLE_SWIPE_ACCURACY; + int POLE_SWIPE_DMG; + int POLE_SWIPE_DMG_RANGE; + string POLE_SWIPE_DMG_TYPE; + int POLE_SWIPE_RANGE; + int VMODEL_IDX; + + PolearmsQs() + { + BASE_LEVEL_REQ = 0; + VMODEL_IDX = 1; + PMODEL_FILE = "weapons/p_weapons3.mdl"; + PMODEL_IDX_FLOOR = 61; + PMODEL_IDX_HANDS = 62; + MELEE_DMG = 120; + MELEE_RANGE = 90; + MELEE_DMG_TYPE = "blunt"; + MELEE_ACCURACY = 0.85; + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 1.5; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 1; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 1; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_SWIPE_DMG = 60; + POLE_SWIPE_DMG_RANGE = 20; + POLE_SWIPE_DMG_TYPE = "blunt"; + POLE_SWIPE_RANGE = 60; + POLE_SWIPE_ACCURACY = 0.6; + POLE_BACKHAND_DMG = 90; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "blunt"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.7; + POLE_BACKHAND_REPEL = 100; + POLE_BACKHAND_STUN = 1; + POLE_BACKHAND_STUN_CHANCE = 0.35; + } + + void polearm_spawn() + { + SetName("Quarterstaff"); + SetDescription("A heavy staff reinforced with iron"); + SetWeight(3); + SetSize(2); + SetValue(5); + SetHUDSprite("trade", 139); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_sl.as b/scripts/angelscript/items/polearms_sl.as new file mode 100644 index 00000000..d7072ed5 --- /dev/null +++ b/scripts/angelscript/items/polearms_sl.as @@ -0,0 +1,162 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsSl : CGameScript +{ + int BASE_LEVEL_REQ; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string MELEE_STARTPOS; + int MP_SHADOWBURST; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float POLE_BACKHAND_ACCURACY; + int POLE_BACKHAND_DMG; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_BACKHAND_REPEL; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_POWER_THROW; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + string POLE_THOW_PROJECTILE; + int POLE_THROW_MP; + int POLE_THROW_POWER; + int VMODEL_IDX; + + PolearmsSl() + { + BASE_LEVEL_REQ = 35; + MP_SHADOWBURST = 100; + VMODEL_IDX = 16; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_HANDS = 60; + PMODEL_IDX_FLOOR = 61; + MELEE_DMG = 250; + MELEE_RANGE = 120; + MELEE_DMG_TYPE = "dark"; + MELEE_STARTPOS = Vector3(0, 0, 5); + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 2.0; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 0; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_BACKHAND_DMG = 100; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "dark"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.9; + POLE_BACKHAND_REPEL = 500; + POLE_CAN_POWER_THROW = 1; + POLE_THROW_POWER = 700; + POLE_THOW_PROJECTILE = "proj_pole_sl"; + POLE_THROW_MP = 10; + } + + void polearm_spawn() + { + SetName("Shadow Lance"); + SetDescription("A sinuous lance of destructive energies"); + SetWeight(30); + SetSize(2); + SetValue(5000); + SetHUDSprite("trade", 196); + } + + void polearm_register_attacks() + { + string reg.attack.mpdrain = MP_SHADOWBURST; + string reg.attack.type = "strike-land"; + int reg.attack.range = 10; + int reg.attack.dmg = 1; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "dark"; + int reg.attack.energydrain = 5; + string reg.attack.stat = "spellcasting.affliction"; + int reg.attack.hitchance = 100; + int reg.attack.priority = 3; + float reg.attack.delay.strike = 0.1; + float reg.attack.delay.end = 0.2; + int reg.attack.ofs.startpos = 0; + int reg.attack.ofs.aimang = 0; + int reg.attack.noise = 5000; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "shadow_burst"; + float reg.attack.chargeamt = 3.0; + int reg.attack.reqskill = 30; + RegisterAttack(); + } + + void shadow_burst_start() + { + if (!(true)) return; + int REQS_MET = 1; + if (GetEntityMP(GetOwner()) < MP_SHADOWBURST) + { + int REQS_MET = 0; + } + if (GetSkillLevel(GetOwner(), "spellcasting.affliction") < 15) + { + SendColoredMessage(GetOwner(), "Shadowlance: Insufficient Affliction skill for Defiling Burst."); + int REQS_MET = 0; + } + if ((REQS_MET)) + { + // TODO: splayviewanim ent_me VANIM_WIDE + PlayOwnerAnim("once", PANIM_SWIPE2); + } + else + { + CancelAttack(); + } + } + + void shadow_burst_strike() + { + string L_BURST_ORG = GetEntityOrigin(GetOwner()); + L_BURST_ORG += "z"; + if ((IsDucking(GetOwner()))) + { + L_BURST_ORG += "z"; + } + CallExternal(GetOwner(), "ext_dburst", L_BURST_ORG, 170, 1, 1); + } + + void attack_poke2_damaged_other() + { + LogDebug("attack_poke2_damaged_other"); + string L_CUR_TARG = param1; + if ((IsValidPlayer(L_CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + return; + } + string L_DOT_SKILL = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + L_DOT_SKILL *= 0.5; + ApplyEffect(L_CUR_TARG, "effects/dot_dark", 5.0, GetEntityIndex(GetOwner()), L_DOT_SKILL, "polearms"); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_sp.as b/scripts/angelscript/items/polearms_sp.as new file mode 100644 index 00000000..e3e96f54 --- /dev/null +++ b/scripts/angelscript/items/polearms_sp.as @@ -0,0 +1,77 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsSp : CGameScript +{ + int BASE_LEVEL_REQ; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + int POLE_CAN_THROW; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + string POLE_THOW_PROJECTILE; + float POLE_THROW_MAX_CHARGE_TIME; + int POLE_THROW_POWER; + float POLE_THROW_RECHARGE_TIME; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + int VMODEL_IDX; + + PolearmsSp() + { + BASE_LEVEL_REQ = 3; + VMODEL_IDX = 8; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 7; + PMODEL_IDX_HANDS = 6; + MELEE_DMG = 160; + MELEE_RANGE = 110; + MELEE_DMG_TYPE = "pierce"; + POLE_MIN_RANGE = 70; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 1.65; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 0; + POLE_CAN_BLOCK = 0; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 0; + POLE_CAN_BACKHAND = 0; + POLE_CAN_THROW = 1; + SOUND_HITWALL1 = "weapons/dagger/daggermetal1.wav"; + SOUND_HITWALL2 = "weapons/dagger/daggermetal2.wav"; + POLE_THROW_POWER = 600; + POLE_THOW_PROJECTILE = "proj_pole_spear"; + POLE_THROW_RECHARGE_TIME = 1.0; + POLE_THROW_MAX_CHARGE_TIME = 3.0; + } + + void polearm_spawn() + { + SetName("Spear"); + SetDescription("A sturdy throwing spear"); + SetWeight(10); + SetSize(2); + SetValue(20); + SetHUDSprite("trade", 181); + } + +} + +} diff --git a/scripts/angelscript/items/polearms_test.as b/scripts/angelscript/items/polearms_test.as new file mode 100644 index 00000000..013fbdda --- /dev/null +++ b/scripts/angelscript/items/polearms_test.as @@ -0,0 +1,382 @@ +#pragma context server + +#include "items/swords_base_twohanded.as" + +namespace MS +{ + +class PolearmsTest : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_PARRY; + int ANIM_POKE; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_SMASH; + int ANIM_SWIPE; + int ANIM_TRIP; + int ANIM_UNSHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + string GAME_PVP; + float MELEE_ACCURACY; + float MELEE_ACCURACY2; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + float MELEE_ATK_DURATION_LONG; + int MELEE_DMG; + float MELEE_DMG_DELAY; + float MELEE_DMG_DELAY_LONG; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string NEXT_PARRY; + string OWNER_ANG; + string OWNER_ORG; + int PARRY_MODE; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + float POLEARM_DMG_FALLOFF; + int POLEARM_OPTIMUM_RANGE; + int RANGE_SWIPE; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_PARRY; + string SOUND_SHOUT; + string SOUND_SWIPE; + string SWIPE_LIST; + int game.effect.canattack; + + PolearmsTest() + { + BASE_LEVEL_REQ = 0; + RANGE_SWIPE = 64; + POLEARM_OPTIMUM_RANGE = 80; + POLEARM_DMG_FALLOFF = 0.05; + SOUND_PARRY = "weapons/parry.wav"; + ANIM_LIFT = 1; + ANIM_IDLE1 = 0; + ANIM_ATTACK1 = 2; + ATTACK_ANIMS = 1; + ANIM_UNSHEATH = 1; + ANIM_SHEATH = 1; + ANIM_SWIPE = 6; + ANIM_SMASH = 5; + ANIM_POKE = 4; + ANIM_TRIP = 3; + ANIM_PARRY = 7; + MODEL_VIEW = "viewmodels/v_polearms.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 104; + ANIM_PREFIX = "khopesh"; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.4; + MELEE_ATK_DURATION = 1.1; + MELEE_DMG_DELAY_LONG = 1.0; + MELEE_ATK_DURATION_LONG = 1.4; + MELEE_ENERGY = 1; + MELEE_DMG = 500; + MELEE_DMG_RANGE = 0; + MELEE_DMG_TYPE = "generic"; + MELEE_ACCURACY = 0.75; + MELEE_ACCURACY2 = 0.9; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 3; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.6; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "sword_double_swing"; + } + + void weapon_spawn() + { + SetName("Polearm test"); + SetDescription("It s a polearm! Really it is!"); + SetWeight(75); + SetSize(9); + SetValue(0); + SetHUDSprite("trade", "longsword"); + SetHand("both"); + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + } + + void melee_start() + { + PlayOwnerAnim("once", "sword_double_swing"); + PlayViewAnim(ANIM_ATTACK1); + SetVolume(10); + EmitSound(GetOwner(), SOUND_SWIPE); + if ((PARRY_MODE)) + { + end_parry(); + } + } + + void melee_damaged_other() + { + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + adjust_dmg(OUT_PAR1, OUT_PAR2); + } + + void special_01_damaged_other() + { + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + adjust_dmg(OUT_PAR1, OUT_PAR2); + } + + void adjust_dmg() + { + if (!(IsEntityAlive(param1))) return; + string OPTIMUM_RANGE = POLEARM_OPTIMUM_RANGE; + string DMG_FALLOFF = POLEARM_DMG_FALLOFF; + string TARG_RANGE = GetEntityRange(param1); + if (!(TARG_RANGE != OPTIMUM_RANGE)) return; + if (TARG_RANGE > OPTIMUM_RANGE) + { + string MISSED_AMT = TARG_RANGE; + MISSED_AMT -= OPTIMUM_RANGE; + int TOO_CLOSE = 0; + } + if (TARG_RANGE < OPTIMUM_RANGE) + { + string MISSED_AMT = OPTIMUM_RANGE; + MISSED_AMT -= TARG_RANGE; + int TOO_CLOSE = 1; + } + string DMG_PENALTY_FACTOR = DMG_FALLOFF; + DMG_PENALTY_FACTOR *= MISSED_AMT; + if (DMG_PENALTY_FACTOR >= 1) + { + float DMG_PENALTY_FACTOR = 0.9; + } + int OUT_DMG_FACTOR = 1; + OUT_DMG_FACTOR -= DMG_PENALTY_FACTOR; + string OUT_DMG = param2; + OUT_DMG *= OUT_DMG_FACTOR; + SetDamage("dmg"); + } + + void register_charge1() + { + string reg.attack.type = "strike-land"; + string reg.attack.keys = "+attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY2; + int reg.attack.priority = 0; + string reg.attack.delay.strike = MELEE_DMG_DELAY_LONG; + string reg.attack.delay.end = MELEE_ATK_DURATION_LONG; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "melee"; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 1; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "special_01"; + reg.attack.dmg *= 2; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 2; + reg.attack.reqskill += BASE_LEVEL_REQ; + RegisterAttack(); + string reg.attack.type = "strike-land"; + string reg.attack.keys = "+attack1"; + string reg.attack.range = MELEE_RANGE; + int reg.attack.dmg = 0; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "generic"; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 0; + string reg.attack.delay.strike = MELEE_DMG_DELAY_LONG; + string reg.attack.delay.end = MELEE_ATK_DURATION_LONG; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "melee"; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 2; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "special_02"; + reg.attack.dmg *= 2; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 5; + reg.attack.reqskill += BASE_LEVEL_REQ; + RegisterAttack(); + } + + void special_01_start() + { + if ((PARRY_MODE)) + { + end_parry(); + } + PlayOwnerAnim("once", "sword_double_swing"); + PlayViewAnim(ANIM_POKE); + SetVolume(10); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void special_02_start() + { + if ((PARRY_MODE)) + { + end_parry(); + } + PlayOwnerAnim("once", "sword_double_swing"); + PlayViewAnim(ANIM_SWIPE); + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_SWORDREADY') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void special_02_strike() + { + if (!(true)) return; + CallExternal(GetOwner(), "ext_sphere_token", "enemy", RANGE_SWIPE, GetEntityOrigin(GetOwner())); + SWIPE_LIST = GetEntityProperty(GetOwner(), "scriptvar"); + LogDebug("special_02_end SWIPE_LIST"); + if (!(SWIPE_LIST != "none")) return; + string N_SWIPIES = GetTokenCount(SWIPE_LIST, ";"); + if (!(N_SWIPIES > 0)) return; + OWNER_ORG = GetEntityOrigin(GetOwner()); + OWNER_ANG = GetEntityAngles(GetOwner()); + for (int i = 0; i < N_SWIPIES; i++) + { + swipe_targets(); + } + } + + void swipe_targets() + { + string CUR_TARGET = GetToken(SWIPE_LIST, i, ";"); + if ((IsValidPlayer(CUR_TARGET))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG))) return; + string TRACE_START = OWNER_ORG; + string TRACE_END = TARG_ORG; + if (!(IsValidPlayer(CUR_TARGET))) + { + string HALF_MON_HEIGHT = GetEntityHeight(CUR_TARGET); + HALF_MON_HEIGHT /= 2; + TRACE_END += "z"; + } + string TRACE_CHECK = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_CHECK == TRACE_END)) return; + string STAT_STR = "skill."; + STAT_STR += MELEE_STAT; + string STAT_SKILL = GetEntityProperty(GetOwner(), "stat_str"); + string STAT_FLOAT = STAT_SKILL; + STAT_FLOAT *= 0.01; + int HIT_CHANCE = 100; + HIT_CHANCE -= MELEE_ACCURACY; + string HIT_CHANCE = /* TODO: $get_skill_ratio */ $get_skill_ratio(STAT_FLOAT, MELEE_ACCURACY, 100); + string DMG_SWIPE = MELEE_DMG; + string DMG_SWIPE = /* TODO: $get_skill_ratio */ $get_skill_ratio(STAT_FLOAT, 0, MELEE_DMG); + DMG_SWIPE /= 2; + LogDebug("swipe_targets Hitchance HIT_CHANCE dmg DMG_SWIPE"); + XDoDamage(CUR_TARGET, "direct", DMG_SWIPE, HIT_CHANCE, GetOwner(), GetOwner(), STAT_STR, MELEE_DMG_TYPE); + } + + void game_+attack2() + { + if ((PARRY_MODE)) return; + if (!(GetGameTime() > NEXT_PARRY)) return; + PARRY_MODE = 1; + game.effect.canattack = 0; + // TODO: splayviewanim ent_me ANIM_PARRY + } + + void game__attack2() + { + if (!(PARRY_MODE)) return; + end_parry(); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(PARRY_MODE)) return; + if ((param4).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if ((param4).findFirst("magic") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TARG_ORG = GetEntityOrigin(param1); + OWNER_ORG = GetEntityOrigin(GetOwner()); + OWNER_ANG = GetEntityAngles(GetOwner()); + if (!(WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG))) return; + string DMG_TAKEN = param3; + string DMG_BLOCKED = param3; + DMG_TAKEN *= 0.25; + DMG_BLOCKED *= 0.75; + SetDamage("dmg"); + if (DMG_BLOCKED > 0) + { + int DMG_BLOCKED = int(DMG_BLOCKED); + } + DMG_BLOCKED += "pts"; + SendPlayerMessage("Polearm", "blocked " + DMG_BLOCKED + " damage."); + } + + void item_idle() + { + } + + void end_parry() + { + NEXT_PARRY = GetGameTime(); + NEXT_PARRY += 1.0; + PARRY_MODE = 0; + game.effect.canattack = 1; + // TODO: splayviewanim ent_me ANIM_IDLE + } + +} + +} diff --git a/scripts/angelscript/items/polearms_ti.as b/scripts/angelscript/items/polearms_ti.as new file mode 100644 index 00000000..2f26ad62 --- /dev/null +++ b/scripts/angelscript/items/polearms_ti.as @@ -0,0 +1,273 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsTi : CGameScript +{ + int BASE_LEVEL_REQ; + int FREEZE_COUNT; + string FREEZE_TARGS; + int ICE_BURST_MP; + string ICE_WAVE_YAW; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string OLD_REPEAT_TARGET; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + float POLE_BACKHAND_ACCURACY; + int POLE_BACKHAND_DMG; + int POLE_BACKHAND_DMG_RANGE; + string POLE_BACKHAND_DMG_TYPE; + int POLE_BACKHAND_RANGE; + int POLE_BACKHAND_REPEL; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_POWER_THROW; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + int POLE_POKE1_ENHANCED; + string POLE_THOW_PROJECTILE; + int POLE_THROW_MP; + int POLE_THROW_POWER; + string REPEAT_TARGET; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + int VMODEL_IDX; + + PolearmsTi() + { + BASE_LEVEL_REQ = 25; + ICE_BURST_MP = 75; + VMODEL_IDX = 5; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 13; + PMODEL_IDX_HANDS = 12; + MELEE_DMG = 250; + MELEE_RANGE = 100; + MELEE_DMG_TYPE = "cold"; + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 1.75; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 0; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 1; + POLE_BACKHAND_DMG = 300; + POLE_BACKHAND_DMG_RANGE = 10; + POLE_BACKHAND_DMG_TYPE = "pierce"; + POLE_BACKHAND_RANGE = 40; + POLE_BACKHAND_ACCURACY = 0.9; + POLE_BACKHAND_REPEL = 400; + POLE_CAN_POWER_THROW = 1; + POLE_THROW_MP = 0; + POLE_THROW_POWER = 1000; + POLE_THOW_PROJECTILE = "proj_pole_ti"; + POLE_POKE1_ENHANCED = 1; + SOUND_HITWALL1 = "debris/glass1.wav"; + SOUND_HITWALL2 = "debris/glass2.wav"; + } + + void polearm_spawn() + { + SetName("Ice Typhoon"); + SetDescription("A polearm tipped with elemental ice"); + SetWeight(60); + SetSize(2); + SetValue(3000); + SetHUDSprite("trade", 184); + if (!(true)) return; + FREEZE_COUNT = 0; + } + + void pole_poke1_enhance() + { + if (!(true)) return; + if (!(RandomInt(1, 3) == 1)) return; + string TARG_HIT = param1; + if ((IsValidPlayer(TARG_HIT))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string L_DOT = GetSkillLevel(GetOwner(), "spellcasting.ice"); + L_DOT *= 0.5; + ApplyEffect(TARG_HIT, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), L_DOT); + } + + void polearm_register_attacks() + { + int reg.attack.mpdrain = 0; + string reg.attack.type = "strike-land"; + int reg.attack.range = 10; + int reg.attack.dmg = 1; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "cold"; + int reg.attack.energydrain = 5; + string reg.attack.stat = "spellcasting.ice"; + int reg.attack.hitchance = 100; + int reg.attack.priority = 3; + float reg.attack.delay.strike = 0.1; + float reg.attack.delay.end = 0.2; + int reg.attack.ofs.startpos = 0; + int reg.attack.ofs.aimang = 0; + int reg.attack.noise = 5000; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "attack_ice_burst"; + float reg.attack.chargeamt = 3.0; + int reg.attack.reqskill = 25; + RegisterAttack(); + } + + void attack_ice_burst_start() + { + PlayViewAnim(VANIM_WIDE); + PlayOwnerAnim("once", PANIM_SWIPE2); + LogDebug("attack_ice_burst_start"); + } + + void attack_ice_burst_strike() + { + LogDebug("attack_ice_burst_strike"); + if (!(true)) return; + if (GetEntityMP(GetOwner()) < ICE_BURST_MP) + { + SendColoredMessage(GetOwner(), "Ice Typhoon: Insufficient mana for freezing burst"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + string BURST_POS = GetEntityOrigin(GetOwner()); + BURST_POS = "z"; + ICE_WAVE_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + ClientEvent("new", "all", "effects/sfx_ice_wave2", BURST_POS, ICE_WAVE_YAW, 45); + string SCAN_POS = GetEntityOrigin(GetOwner()); + SCAN_POS += /* TODO: $relpos */ $relpos(Vector3(0, ICE_WAVE_YAW, 0), Vector3(0, 128, 32)); + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 512, SCAN_POS); + FREEZE_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(FREEZE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(FREEZE_TARGS, ";"); i++) + { + ice_burst_affect_targs(); + } + } + + void ice_burst_affect_targs() + { + string CUR_TARG = GetToken(FREEZE_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string OWNER_ORG = GetEntityOrigin(GetOwner()); + Vector3 OWNER_ANG = Vector3(0, ICE_WAVE_YAW, 0); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG))) return; + string TRACE_START = OWNER_ORG; + string TRACE_END = TARG_ORG; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + string MAX_FREEZE_HP = GetEntityMaxHealth(GetOwner()); + MAX_FREEZE_HP *= 4.0; + if (GetEntityHealth(CUR_TARG) < MAX_FREEZE_HP) + { + int DO_FREEZE = 1; + } + if (GetEntityHealth(CUR_TARG) < 1500) + { + int DO_FREEZE = 1; + } + if (!(DO_FREEZE)) + { + string L_DOT = GetSkillLevel(GetOwner(), "spellcasting.ice"); + ApplyEffect(CUR_TARG, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), L_DOT); + } + else + { + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", Random(5.0, 8.0), GetEntityIndex(GetOwner()), 0, "spellcasting.ice", 1500); + } + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + if (!((param4).findFirst("ice") >= 0)) return; + string IN_DMG = param3; + IN_DMG *= 0.5; + SetDamage("dmg"); + return; + } + + void game_dodamage() + { + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + REPEAT_TARGET = param2; + if (OLD_REPEAT_TARGET == REPEAT_TARGET) + { + FREEZE_COUNT += 1; + } + else + { + FREEZE_COUNT = 0; + } + OLD_REPEAT_TARGET = param2; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.ice"); + DOT_BURN *= 0.25; + if (FREEZE_COUNT < 4) + { + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_BURN); + if ((GetEntityProperty(param2, "scriptvar"))) + { + FREEZE_COUNT = 0; + } + } + else + { + FREEZE_COUNT = 0; + if ((GetEntityProperty(param2, "scriptvar"))) + { + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_BURN); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + DOT_BURN *= 0.25; + if (GetEntityHealth(param2) < 2000) + { + } + ApplyEffect(param2, "effects/dot_cold_freeze", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "spellcasting.ice", 2000); + } + } + +} + +} diff --git a/scripts/angelscript/items/polearms_tri.as b/scripts/angelscript/items/polearms_tri.as new file mode 100644 index 00000000..e59b4c2f --- /dev/null +++ b/scripts/angelscript/items/polearms_tri.as @@ -0,0 +1,69 @@ +#pragma context server + +#include "items/polearms_base.as" + +namespace MS +{ + +class PolearmsTri : CGameScript +{ + int BASE_LEVEL_REQ; + int MELEE_DMG; + string MELEE_DMG_TYPE; + int MELEE_RANGE; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + int POLE_CAN_BACKHAND; + int POLE_CAN_BLOCK; + int POLE_CAN_POKE1; + int POLE_CAN_POKE2; + int POLE_CAN_POWER_THROW; + int POLE_CAN_REPEL; + int POLE_CAN_SPIN; + int POLE_CAN_SWIPE; + float POLE_MAX_DMG_MULTI; + float POLE_MIN_DMG_MULTI; + int POLE_MIN_RANGE; + string POLE_THOW_PROJECTILE; + int POLE_THROW_POWER; + int VMODEL_IDX; + + PolearmsTri() + { + BASE_LEVEL_REQ = 11; + VMODEL_IDX = 6; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 11; + PMODEL_IDX_HANDS = 10; + MELEE_DMG = 200; + MELEE_RANGE = 110; + MELEE_DMG_TYPE = "pierce"; + POLE_MIN_RANGE = 60; + POLE_MIN_DMG_MULTI = 0.5; + POLE_MAX_DMG_MULTI = 1.5; + POLE_CAN_POKE1 = 1; + POLE_CAN_POKE2 = 1; + POLE_CAN_SWIPE = 0; + POLE_CAN_BLOCK = 1; + POLE_CAN_SPIN = 0; + POLE_CAN_REPEL = 1; + POLE_CAN_BACKHAND = 0; + POLE_CAN_POWER_THROW = 1; + POLE_THROW_POWER = 800; + POLE_THOW_PROJECTILE = "proj_pole_trident"; + } + + void polearm_spawn() + { + SetName("Trident"); + SetDescription("A three pronged military fork"); + SetWeight(10); + SetSize(2); + SetValue(400); + SetHUDSprite("trade", 183); + } + +} + +} diff --git a/scripts/angelscript/items/proj_acid_bolt.as b/scripts/angelscript/items/proj_acid_bolt.as new file mode 100644 index 00000000..1aff89c5 --- /dev/null +++ b/scripts/angelscript/items/proj_acid_bolt.as @@ -0,0 +1,78 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjAcidBolt : CGameScript +{ + int ARROW_BODY_OFS; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string POISON_SPRITE1; + string PROJ_ANIM_IDLE; + float PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string TRAIL_SPRITE; + + ProjAcidBolt() + { + POISON_SPRITE1 = "poison.spr"; + TRAIL_SPRITE = "blood.spr"; + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 6; + MODEL_BODY_OFS = 6; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "acid"; + PROJ_DAMAGESTAT = "spellcasting.affliction"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_DAMAGE = 600; + PROJ_AOE_RANGE = 40; + PROJ_AOE_FALLOFF = 0.1; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + } + + void projectile_spawn() + { + SetName("Acidic Bolt"); + SetWeight(1); + SetSize(1); + SetValue(5); + SetGravity(0.0); + SetGroupable(25); + SetModelBody(0, MODEL_BODY_OFS); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + } + + void game_tossprojectile() + { + SetGravity(0); + fly_fx(); + } + + void fly_fx() + { + Effect("tempent", "spray", TRAIL_SPRITE, /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relvel */ $relvel(0, -30, 0), 10, 3, 50); + ScheduleDelayedEvent(0.25, "fly_fx"); + } + + void projectile_landed() + { + Effect("tempent", "trail", POISON_SPRITE1, /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 30), 10, 1, 5, 10, 5); + } + +} + +} diff --git a/scripts/angelscript/items/proj_acid_bomb.as b/scripts/angelscript/items/proj_acid_bomb.as new file mode 100644 index 00000000..330a8216 --- /dev/null +++ b/scripts/angelscript/items/proj_acid_bomb.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjAcidBomb : CGameScript +{ + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + + ProjAcidBomb() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 68; + PROJ_ANIM_IDLE = "spin_vertical_slow"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "acid"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 100; + PROJ_AOE_RANGE = 200; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_IGNORENPC = 1; + } + + void projectile_spawn() + { + SetName("Acid Ball"); + SetWeight(500); + SetSize(10); + SetValue(5); + SetGravity(0.4); + SetGroupable(25); + SetProp(GetOwner(), "scale", 0.75); + PlayAnim("once", "spin_vertical_slow"); + SetIdleAnim("spin_vertical_slow"); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + } + + void game_tossprojectile() + { + PlayAnim("critical", "spin_vertical_slow"); + } + + void projectile_landed() + { + string SPLOOSH_POINT = GetEntityOrigin(GetOwner()); + ClientEvent("new", "all", "effects/sfx_acid_splash", SPLOOSH_POINT); + CallExternal("ent_expowner", "ext_acid_bomb", GetEntityOrigin(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_base.as b/scripts/angelscript/items/proj_arrow_base.as new file mode 100644 index 00000000..85df02ca --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_base.as @@ -0,0 +1,129 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjArrowBase : CGameScript +{ + string ANIM_DEPLOY; + string ANIM_DROPPED; + int ARROW_EXPIRE_DELAY; + int BARROW_HIT_NPC; + string BASE_MODEL_WORLD; + int HITWALL_VOL; + string MODEL_HANDS; + string MODEL_WORLD; + int PROJ_COLLIDEHITBOX; + string PROJ_DAMAGE_TYPE; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SPRITE_ARROW_HAND; + string SPRITE_ARROW_TRADE; + + ProjArrowBase() + { + MODEL_HANDS = "weapons/bows/arrows.mdl"; + MODEL_WORLD = "weapons/bows/arrows.mdl"; + BASE_MODEL_WORLD = "weapons/bows/arrows.mdl"; + SOUND_HITWALL1 = "weapons/bow/arrowhit1.wav"; + SOUND_HITWALL2 = "weapons/bow/arrowhit2.wav"; + SPRITE_ARROW_TRADE = "woodenarrow"; + SPRITE_ARROW_HAND = "arrows"; + HITWALL_VOL = 5; + ARROW_EXPIRE_DELAY = 10; + PROJ_DAMAGE_TYPE = "pierce"; + PROJ_COLLIDEHITBOX = 1; + } + + void projectile_spawn() + { + if (PROJ_ANIM_IDLE == "PROJ_ANIM_IDLE") + { + if (MODEL_WORLD == BASE_MODEL_WORLD) + { + ANIM_DEPLOY = "idle2"; + ANIM_DROPPED = "idle1"; + } + else + { + ANIM_DEPLOY = "idle_standard"; + ANIM_DROPPED = "idle_standard"; + } + } + else + { + ANIM_DEPLOY = PROJ_ANIM_IDLE; + ANIM_DROPPED = PROJ_ANIM_IDLE; + } + SetGroupable(25); + SetWorldModel(MODEL_WORLD); + SetHUDSprite("hand", SPRITE_ARROW_HAND); + SetHUDSprite("trade", SPRITE_ARROW_TRADE); + SetHand("left"); + arrow_spawn(); + } + + void OnDeploy() override + { + SetModel(MODEL_HANDS); + if (ANIM_DEPLOY != "none") + { + PlayAnim("once", ANIM_DEPLOY); + } + string MB_TEMP = "game.item.hand_index"; + MB_TEMP += 1; + MB_TEMP += ARROW_BODY_OFS; + SetModelBody(0, MB_TEMP); + arrow_deploy(); + SetGravity(1.0); + } + + void game_tossprojectile() + { + if ((CLFX_ARROW)) return; + SetModelBody(0, ARROW_BODY_OFS); + if (ANIM_DROPPED != "none") + { + PlayAnim("once", ANIM_DROPPED); + } + } + + void game_fall() + { + if (!(CLFX_ARROW)) + { + SetModelBody(0, ARROW_BODY_OFS); + } + if (ANIM_DROPPED != "none") + { + PlayAnim("once", ANIM_DROPPED); + } + } + + void game_projectile_hitwall() + { + // PlayRandomSound from: HITWALL_VOL, SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {HITWALL_VOL, SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), 4, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_projectile_hitnpc() + { + BARROW_HIT_NPC = 1; + if ((PROJ_STICK_ON_NPC)) return; + if ((PROJ_IGNORENPC)) return; + remove_projectile("barrow_hitnpc"); + } + + void projectile_landed() + { + if ((BARROW_HIT_NPC)) return; + if ((PROJ_STICK_ON_WALL_NEW)) return; + ARROW_EXPIRE_DELAY("remove_projectile", "barrow_landed"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_blunt.as b/scripts/angelscript/items/proj_arrow_blunt.as new file mode 100644 index 00000000..d8c4b62e --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_blunt.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowBlunt : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_REMOVE_ON_USE; + int PROJ_STICK_DURATION; + int PROJ_STICK_ON_NPC; + int PROJ_STICK_ON_WALL_NEW; + string SPRITE_ARROW_TRADE; + + ProjArrowBlunt() + { + SPRITE_ARROW_TRADE = "broadarrow"; + ARROW_BODY_OFS = 3; + PROJ_STICK_ON_WALL_NEW = 1; + PROJ_REMOVE_ON_USE = 1; + PROJ_DAMAGE = RandomInt(150, 250); + PROJ_DAMAGE_TYPE = "blunt"; + ARROW_STICK_DURATION = 25; + PROJ_STICK_DURATION = 25; + PROJ_STICK_ON_NPC = 1; + ARROW_SOLIDIFY_ON_WALL = 1; + ARROW_EXPIRE_DELAY = 120; + ARROW_BREAK_CHANCE = 0.2; + } + + void arrow_spawn() + { + SetName("Climbing Arrow"); + SetDescription("An sturdy arrow with a forked iron tip for use as a piton"); + SetWeight(0.25); + SetSize(1); + SetValue(5); + SetGravity(0.85); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_bluntwooden.as b/scripts/angelscript/items/proj_arrow_bluntwooden.as new file mode 100644 index 00000000..210293d1 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_bluntwooden.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowBluntwooden : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int CLFX_ARROW; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + string SPRITE_ARROW_TRADE; + + ProjArrowBluntwooden() + { + CLFX_ARROW = 1; + MODEL_BODY_OFS = 0; + SPRITE_ARROW_TRADE = "woodenarrow"; + PROJ_DAMAGE = RandomInt(30, 60); + ARROW_STICK_DURATION = 10; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.2; + ARROW_EXPIRE_DELAY = 5; + } + + void arrow_spawn() + { + SetName("Blunt Wooden Arrow"); + SetDescription("It's more like a sharpened stick than an arrow"); + SetWeight(0.1); + SetSize(1); + SetValue(0.1); + SetGravity(0.75); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_broadhead.as b/scripts/angelscript/items/proj_arrow_broadhead.as new file mode 100644 index 00000000..5baf5e98 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_broadhead.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowBroadhead : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int CLFX_ARROW; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + int PROJ_STICK_DURATION; + string SPRITE_ARROW_TRADE; + + ProjArrowBroadhead() + { + CLFX_ARROW = 1; + SPRITE_ARROW_TRADE = "broadarrow"; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = RandomInt(200, 300); + PROJ_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.2; + } + + void arrow_spawn() + { + SetName("Iron Arrow"); + SetDescription("Great damage in trade for short range"); + SetWeight(0.125); + SetSize(1); + SetValue(5); + SetGravity(0.85); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_fbow.as b/scripts/angelscript/items/proj_arrow_fbow.as new file mode 100644 index 00000000..ee6a1ebf --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_fbow.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowFbow : CGameScript +{ + int ARROW_BODY_OFS; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int CLFX_ARROW; + int FREEZE_MANA_COST; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + string SPRITE_ARROW_TRADE; + + ProjArrowFbow() + { + CLFX_ARROW = 1; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_HANDS = "weapons/projectiles.mdl"; + SPRITE_ARROW_TRADE = "silverarrow"; + ARROW_BODY_OFS = 47; + MODEL_BODY_OFS = 47; + PROJ_DAMAGE_TYPE = "cold"; + FREEZE_MANA_COST = 10; + PROJ_DAMAGE = RandomInt(250, 325); + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_EXPIRE_DELAY = 10; + } + + void arrow_spawn() + { + SetName("Frosty"); + SetDescription("Brrrr!"); + SetWeight(0.1); + SetSize(1); + SetValue(150); + SetGravity(0.8); + SetGroupable(25); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + string CDOT_DMG = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + string FDOT_DMG = CDOT_DMG; + CDOT_DMG /= 1.8; + FDOT_DMG /= 2; + int PROJ_TYPE = 0; + if (GetEntityMP(MY_OWNER) >= FREEZE_MANA_COST) + { + int PROJ_TYPE = RandomInt(0, 1); + } + if (!(PROJ_TYPE)) + { + ApplyEffect(param2, "effects/dot_cold", RandomInt(5, 10), MY_OWNER, CDOT_DMG, "spellcasting.ice"); + } + else + { + GiveMP(MY_OWNER); + ApplyEffect(param2, "effects/dot_cold_freeze", 8.0, MY_OWNER, FDOT_DMG, "spellcasting.ice"); + } + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_fire.as b/scripts/angelscript/items/proj_arrow_fire.as new file mode 100644 index 00000000..df11599d --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_fire.as @@ -0,0 +1,117 @@ +#pragma context server + +#include "items/proj_arrow_base.as" +#include "items/base_loopsnd.as" + +namespace MS +{ + +class ProjArrowFire : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int LOOPSND_LENGTH; + string LOOPSND_NAME; + int LOOPSND_VOLUME; + int PROJ_DAMAGE; + string PROJ_DAMAGETYPE; + int PROJ_STICK_DURATION; + string SCRIPT_1_ID; + string SFX_SCRIPT; + string SPRITE_ARROW_TRADE; + + ProjArrowFire() + { + SPRITE_ARROW_TRADE = "firearrow"; + ARROW_BODY_OFS = 0; + PROJ_DAMAGE = RandomInt(100, 150); + PROJ_DAMAGETYPE = "fire"; + ARROW_STICK_DURATION = 25; + PROJ_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.0; + ARROW_EXPIRE_DELAY = 100; + SFX_SCRIPT = "items/proj_arrow_fire_cl"; + Precache(SFX_SCRIPT); + LOOPSND_NAME = "items/torch1.wav"; + LOOPSND_LENGTH = 6; + LOOPSND_VOLUME = 5; + } + + void arrow_spawn() + { + SetName("Fire Arrow"); + SetDescription("This kind of arrow is merely used for lighting up dark areas"); + SetWeight(0.125); + SetSize(1); + SetValue(10); + SetGravity(0.8); + SetGroupable(25); + } + + void game_putinpack() + { + loopsnd_end(); + } + + void game_fall() + { + loopsnd_start(); + } + + void arrow_hitwall() + { + loopsnd_start(); + } + + void game_tossprojectile() + { + ClientEvent("new", "all", SFX_SCRIPT, GetEntityIndex(GetOwner())); + SCRIPT_1_ID = "game.script.last_sent_id"; + } + + void hitwall() + { + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = TRACE_START; + TRACE_END += /* TODO: $relpos */ $relpos(0, 100, 0); + Effect("decal", TRACE_END, 46); + } + + void projectile_landed() + { + SetSolid("none"); + loopsnd_end(); + ClientEvent("update", "all", SCRIPT_1_ID, "loop_sound"); + ScheduleDelayedEvent(10.0, "projectile_expire"); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + ApplyEffect(param2, "effects/dot_fire", 5, MY_OWNER, 1, "archery"); + } + + void game_projectile_hitnpc() + { + if (!(IsEntityAlive(param1))) return; + ClientEvent("update", "all", SCRIPT_1_ID, "transfer_owner", GetEntityIndex(param1)); + } + + void projectile_broke() + { + loopsnd_end(); + } + + void projectile_expire() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_fire_cl.as b/scripts/angelscript/items/proj_arrow_fire_cl.as new file mode 100644 index 00000000..83920495 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_fire_cl.as @@ -0,0 +1,148 @@ +#pragma context server + +namespace MS +{ + +class ProjArrowFireCl : CGameScript +{ + int FX_ACTIVE; + string FX_ORIGIN; + int FX_ORIGIN_FIXED; + string FX_OWNER; + int FX_SMOKES_ON; + string LIGHT_COLOR; + int LIGHT_RADIUS; + int N_FRAMES; + int OWNER_TRANSFERED; + string SKEL_LIGHT_ID; + string SPR_FIRE; + string SPR_SMOKE1; + + ProjArrowFireCl() + { + SPR_FIRE = "fire1_fixed.spr"; + SPR_SMOKE1 = "xsmoke3.spr"; + N_FRAMES = 20; + LIGHT_RADIUS = 256; + LIGHT_COLOR = Vector3(255, 96, 32); + } + + void client_activate() + { + FX_OWNER = param1; + LogDebug("client_activate"); + FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + FX_ACTIVE = 1; + SetCallback("render", "enable"); + ClientEffect("light", "new", FX_ORIGIN, LIGHT_RADIUS, LIGHT_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + ClientEffect("tempent", "sprite", SPR_FIRE, FX_ORIGIN, "setup_fire_sprite"); + FX_SMOKES_ON = 1; + do_smokes(); + ScheduleDelayedEvent(10.0, "end_smoke"); + ScheduleDelayedEvent(60.0, "end_fx"); + } + + void transfer_owner() + { + OWNER_TRANSFERED = 1; + FX_OWNER = param1; + FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + owner_update(); + } + + void owner_update() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "owner_update"); + FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + if (!(FX_ORIGIN_FIXED)) + { + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + } + else + { + string L_POS = FX_ORIGIN; + } + if (L_POS == Vector3(0, 0, 0)) + { + end_fx(); + } + ClientEffect("light", SKEL_LIGHT_ID, L_POS, LIGHT_RADIUS, LIGHT_COLOR, 1.0); + } + + void end_smoke() + { + FX_SMOKES_ON = 0; + if ((OWNER_TRANSFERED)) return; + FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + FX_ORIGIN_FIXED = 1; + } + + void do_smokes() + { + if (!(FX_SMOKES_ON)) return; + Random(0_25, 0_5)("do_smokes"); + if (!(FX_ORIGIN_FIXED)) + { + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + } + else + { + string L_POS = FX_ORIGIN; + } + ClientEffect("tempent", "sprite", SPR_SMOKE1, L_POS, "setup_smoke"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_smoke() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", Random(100, 200)); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", Random(-0.2, -0.01)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-5, 5), Random(-5, 5), 0)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(32, 32, 32)); + ClientEffect("tempent", "set_current_prop", "frames", N_FRAMES); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + } + + void setup_fire_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "die_with_ent", FX_OWNER); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 128); + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 128)); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "follow", FX_OWNER, 0); + } + + void loop_sound() + { + if (!(FX_ACTIVE)) return; + EmitSound3D("items/torch1.wav", 5, FX_ORIGIN); + ScheduleDelayedEvent(6.0, "loop_sound"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_fire_cl_old.as b/scripts/angelscript/items/proj_arrow_fire_cl_old.as new file mode 100644 index 00000000..7ba79b7b --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_fire_cl_old.as @@ -0,0 +1,129 @@ +#pragma context server + +namespace MS +{ + +class ProjArrowFireClOld : CGameScript +{ + string EFFECT_SET_TO_DIE; + string LIGHT_COLOR; + int LIGHT_RADIUS; + int OFS_NEG; + int OFS_POS; + float SMOKE_DURATION; + int SPD_NEG; + int SPD_POS; + string SPR_FIRE; + string SPR_SMOKE1; + string p.scale; + int sfx.duration; + string sfx.lightid; + string sfx.modelid; + + ProjArrowFireClOld() + { + SPR_FIRE = "fire1_fixed.spr"; + SPR_SMOKE1 = "xsmoke3.spr"; + SMOKE_DURATION = "$randf(1,2)"; + OFS_POS = 5; + OFS_NEG = -5; + SPD_POS = 60; + SPD_NEG = -60; + LIGHT_RADIUS = 256; + LIGHT_COLOR = Vector3(255, 200, 64); + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + string l.pos = /* TODO: $getcl */ $getcl(sfx.modelid, "attachment0"); + smoke_spr_create(l.pos, SPR_SMOKE1, 0.5); + } + + void client_activate() + { + sfx.modelid = param1; + sfx.duration = -1; + if ((/* TODO: $getcl */ $getcl(sfx.modelid, "exists"))) + { + create_light(/* TODO: $getcl */ $getcl(sfx.modelid, "origin")); + fire_spr_create(); + } + else + { + EFFECT_SET_TO_DIE = 1; + ScheduleDelayedEvent(20.0, "effect_die"); + } + SetCallback("render", "enable"); + } + + void effect_die() + { + RemoveScript(); + } + + void game_think() + { + if ((/* TODO: $getcl */ $getcl(sfx.modelid, "exists"))) return; + if ((EFFECT_SET_TO_DIE)) return; + EFFECT_SET_TO_DIE = 1; + ScheduleDelayedEvent(20.0, "effect_die"); + } + + void smoke_spr_create() + { + string l.pos = param1; + l.pos += Vector3(Random(OFS_NEG, OFS_POS), Random(OFS_NEG, OFS_POS), Random(OFS_NEG, OFS_POS)); + p.scale = param3; + ClientEffect("tempent", "sprite", param2, l.pos, "smoke_spr_steup"); + } + + void smoke_spr_steup() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", Random(100, 200)); + ClientEffect("tempent", "set_current_prop", "scale", p.scale); + ClientEffect("tempent", "set_current_prop", "gravity", Random(-0.1, -0.01)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(32, 32, 32)); + ClientEffect("tempent", "set_current_prop", "rendermodel", "alpha"); + ClientEffect("tempent", "set_current_prop", "frames", 14); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + } + + void create_light() + { + if (!(param1 != "0")) return; + ClientEffect("light", "new", param1, LIGHT_RADIUS, LIGHT_COLOR, 3); + sfx.lightid = "game.script.last_light_id"; + } + + void game_prerender() + { + if (!(LIGHT_RADIUS > 0)) return; + string l.radius = LIGHT_RADIUS; + l.radius += Random(-8, 8); + ClientEffect("light", sfx.lightid, /* TODO: $getcl */ $getcl(sfx.modelid, "origin"), l.radius, LIGHT_COLOR, 1); + } + + void fire_spr_create() + { + ClientEffect("tempent", "sprite", SPR_FIRE, Vector3(0, 0, 0), "fire_spr_steup"); + } + + void fire_spr_steup() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "die_with_ent", sfx.modelid); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 128); + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 128)); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "follow", sfx.modelid, 0); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_frost.as b/scripts/angelscript/items/proj_arrow_frost.as new file mode 100644 index 00000000..3fa5e9f2 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_frost.as @@ -0,0 +1,67 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowFrost : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int CLFX_ARROW; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + string SPRITE_ARROW_TRADE; + + ProjArrowFrost() + { + CLFX_ARROW = 1; + SPRITE_ARROW_TRADE = "silverarrow"; + MODEL_BODY_OFS = 6; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_DAMAGE = "$rand(60,100)"; + ARROW_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.5; + ARROW_EXPIRE_DELAY = 10; + } + + void arrow_spawn() + { + SetName("Frost Arrow"); + SetDescription("These arrows have been enchanted with ice magics."); + SetWeight(0.125); + SetSize(1); + SetValue(150); + SetGravity(0.8); + SetGroupable(25); + SetUseable(1); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + if ((IsValidPlayer(MY_OWNER))) + { + string L_DOT = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + L_DOT *= 0.5; + if (L_DOT < 5) + { + int L_DOT = RandomInt(5, 10); + } + } + else + { + int L_DOT = RandomInt(5, 10); + } + ApplyEffect(param2, "effects/dot_cold", L_DOT, MY_OWNER, 5, "archery"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_generic.as b/scripts/angelscript/items/proj_arrow_generic.as new file mode 100644 index 00000000..ae303465 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_generic.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowGeneric : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int CLFX_ARROW; + int PROJ_DAMAGE; + string SPRITE_ARROW_TRADE; + + ProjArrowGeneric() + { + CLFX_ARROW = 1; + ARROW_BODY_OFS = 0; + SPRITE_ARROW_TRADE = "woodenarrow"; + PROJ_DAMAGE = RandomInt(30, 60); + ARROW_STICK_DURATION = 10; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.2; + ARROW_EXPIRE_DELAY = 5; + } + + void arrow_spawn() + { + SetName("Arrow"); + SetDescription("A crudely made arrow"); + SetWeight(0.1); + SetSize(1); + SetValue(0.1); + SetGravity(0.75); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_gholy.as b/scripts/angelscript/items/proj_arrow_gholy.as new file mode 100644 index 00000000..c5bf7310 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_gholy.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowGholy : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int CLFX_ARROW; + int DID_HIT; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + string SPRITE_ARROW_TRADE; + + ProjArrowGholy() + { + CLFX_ARROW = 1; + SPRITE_ARROW_TRADE = "firearrow"; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE_TYPE = "holy"; + PROJ_DAMAGE = 400; + ARROW_STICK_DURATION = 5; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.5; + ARROW_EXPIRE_DELAY = 5; + } + + void arrow_spawn() + { + SetName("Greater Holy Arrow"); + SetDescription("An arrow imbued with fantastic divine energies"); + SetWeight(0.175); + SetSize(1); + SetValue(500); + SetGravity(0.8); + SetGroupable(25); + } + + void game_projectile_hitnpc() + { + LogDebug("strike_target GetEntityName(param1)"); + if ((DID_HIT)) return; + DID_HIT = 1; + string L_TARG = param1; + string MY_OWNER = GetEntityIndex("ent_expowner"); + string HOLY_DMG = GetSkillLevel("ent_expowner", "spellcasting.divination"); + HOLY_DMG += 5; + if (HOLY_DMG <= 5) + { + int HOLY_DMG = 5; + } + CallExternal(L_TARG, "turn_undead", HOLY_DMG, MY_OWNER); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_gpoison.as b/scripts/angelscript/items/proj_arrow_gpoison.as new file mode 100644 index 00000000..dbf8919f --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_gpoison.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowGpoison : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int CLFX_ARROW; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + string SPRITE_ARROW_TRADE; + + ProjArrowGpoison() + { + CLFX_ARROW = 1; + SPRITE_ARROW_TRADE = "firearrow"; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = RandomInt(60, 80); + ARROW_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.5; + ARROW_EXPIRE_DELAY = 10; + } + + void arrow_spawn() + { + SetName("Deadly Envenomed Arrow"); + SetDescription("This poison on this arrow is amongst the most deadly known."); + SetWeight(0.175); + SetSize(1); + SetValue(200); + SetGravity(0.8); + SetGroupable(25); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + if ((IsValidPlayer(MY_OWNER))) + { + string L_DOT = GetSkillLevel("ent_expowner", "spellcasting.affliction"); + if (L_DOT < 12) + { + float L_DOT = Random(12, 33); + } + } + else + { + float L_DOT = Random(12, 33); + } + ApplyEffect(param2, "effects/dot_poison", 10.0, MY_OWNER, L_DOT, "archery"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_holy.as b/scripts/angelscript/items/proj_arrow_holy.as new file mode 100644 index 00000000..17a967ee --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_holy.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowHoly : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int CLFX_ARROW; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + string SPRITE_ARROW_TRADE; + + ProjArrowHoly() + { + CLFX_ARROW = 1; + SPRITE_ARROW_TRADE = "firearrow"; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE_TYPE = "holy"; + PROJ_DAMAGE = 300; + ARROW_STICK_DURATION = 5; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.5; + ARROW_EXPIRE_DELAY = 5; + } + + void arrow_spawn() + { + SetName("Holy Arrow"); + SetDescription("An arrow imbued with divine energies"); + SetWeight(0.125); + SetSize(1); + SetValue(300); + SetGravity(0.8); + SetGroupable(25); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_jagged.as b/scripts/angelscript/items/proj_arrow_jagged.as new file mode 100644 index 00000000..c8884a20 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_jagged.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowJagged : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int CLFX_ARROW; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + int PROJ_STICK_DURATION; + string SPRITE_ARROW_TRADE; + + ProjArrowJagged() + { + CLFX_ARROW = 1; + MODEL_BODY_OFS = 0; + SPRITE_ARROW_TRADE = "silverarrow"; + PROJ_DAMAGE = RandomInt(275, 375); + PROJ_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 1; + ARROW_BREAK_CHANCE = 0.2; + } + + void arrow_spawn() + { + SetName("Jagged Arrow"); + SetDescription("When the target moves , the jags wound it"); + SetWeight(0.15); + SetSize(3); + SetValue(50); + SetGravity(0.8); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", SPRITE_ARROW_TRADE); + SetHand("any"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_lightning.as b/scripts/angelscript/items/proj_arrow_lightning.as new file mode 100644 index 00000000..8f0b4d28 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_lightning.as @@ -0,0 +1,52 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowLightning : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int CLFX_ARROW; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + string SPRITE_ARROW_TRADE; + + ProjArrowLightning() + { + CLFX_ARROW = 1; + SPRITE_ARROW_TRADE = "firearrow"; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = RandomInt(40, 80); + ARROW_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.5; + ARROW_EXPIRE_DELAY = 10; + } + + void arrow_spawn() + { + SetName("Lightning Arrow"); + SetDescription("This arrow has been enchanted by a lightning wizard"); + SetWeight(0.125); + SetSize(1); + SetValue(100); + SetGravity(0.8); + SetGroupable(25); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 64, -1, 0); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + ApplyEffect(param2, "effects/dot_lightning", RandomInt(5, 10), MY_OWNER, Random(10, 25), "archery"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_npc.as b/scripts/angelscript/items/proj_arrow_npc.as new file mode 100644 index 00000000..6b26e42a --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_npc.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowNpc : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int PROJ_DAMAGE; + + ProjArrowNpc() + { + ARROW_BODY_OFS = 0; + PROJ_DAMAGE = RandomInt(60, 90); + ARROW_EXPIRE_DELAY = 5; + ARROW_STICK_DURATION = 10; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.1; + } + + void arrow_spawn() + { + SetName("Blunt Wooden Arrow"); + SetDescription("It s more like a sharpened stick than an arrow"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.6); + SetGroupable(25); + SetUseable(0); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_npc_dyn.as b/scripts/angelscript/items/proj_arrow_npc_dyn.as new file mode 100644 index 00000000..e520fb53 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_npc_dyn.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "items/proj_arrow_npc.as" + +namespace MS +{ + +class ProjArrowNpcDyn : CGameScript +{ + void ext_lighten() + { + SetGravity(param1); + if (param4 != "PARAM4") + { + SetProp(GetOwner(), "scale", param4); + } + if (!(param2)) return; + Effect("glow", GetOwner(), param3, 64, -1, -1); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), param3, 96, 3.0); + } + + void game_dodamage() + { + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + string OUT_PAR3 = param3; + string OUT_PAR4 = param4; + CallExternal("ent_expowner", "ext_arrow_hit", OUT_PAR1, OUT_PAR2, OUT_PAR3, OUT_PAR4); + } + + void projectile_landed() + { + CallExternal("ent_expowner", "ext_arrow_landed", GetEntityOrigin(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_phx.as b/scripts/angelscript/items/proj_arrow_phx.as new file mode 100644 index 00000000..9da67f00 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_phx.as @@ -0,0 +1,129 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowPhx : CGameScript +{ + int ARROW_BODY_OFS; + string BURN_DMG; + string GAME_PVP; + string IS_UNDERSKILLED; + int MAX_DIST; + int MAX_RADIUS; + int MIN_RADIUS; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_DAMAGE; + string MY_RADIUS; + string PROJ_ANIM_IDLE; + int PROJ_DAMAGE; + int PROJ_IGNORENPC; + string SOUND_PHOENIX; + string TARGET_LIST; + + ProjArrowPhx() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 48; + ARROW_BODY_OFS = 48; + PROJ_IGNORENPC = 1; + PROJ_ANIM_IDLE = "idle_standard"; + MAX_DIST = 1024; + MIN_RADIUS = 32; + MAX_RADIUS = 256; + PROJ_DAMAGE = 1; + SOUND_PHOENIX = "monsters/birds/hawkcaw.wav"; + Precache("ambience/steamburst1.wav"); + } + + void OnSpawn() override + { + SetName("Phoenix Arrow"); + SetMonsterClip(0); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + GAME_PVP = "game.pvp"; + SetGravity(1); + } + + void game_tossprojectile() + { + // svplaysound: svplaysound 0 5 SOUND_PHOENIX + EmitSound(0, 5, SOUND_PHOENIX); + } + + void game_projectile_hitwall() + { + string USER_ORG = GetEntityOrigin("ent_expowner"); + string MY_ORG = GetEntityOrigin(GetOwner()); + MY_ORG = "z"; + float DISTANCE_TRAVELED = Distance(USER_ORG, MY_ORG); + string DISTANCE_RATIO = DISTANCE_TRAVELED; + string OWNER_SKILL = GetSkillLevel("ent_expowner", "archery.power"); + string MIN_DMG = OWNER_SKILL; + string MAX_DMG = OWNER_SKILL; + MAX_DMG *= 3.0; + if (DISTANCE_TRAVELED >= MAX_DIST) + { + string MY_DAMAGE = MAX_DMG; + string MY_RADIUS = MAX_RADIUS; + } + else + { + DISTANCE_RATIO /= MAX_DIST; + MY_DAMAGE = /* TODO: $get_skill_ratio */ $get_skill_ratio(DISTANCE_RATIO, MIN_DMG, MAX_DMG); + MY_RADIUS = /* TODO: $get_skill_ratio */ $get_skill_ratio(DISTANCE_RATIO, MIN_RADIUS, MAX_RADIUS); + } + if ((IsValidPlayer("ent_expowner"))) + { + if (GetSkillLevel("ent_expowner", "archery") < 25) + { + } + IS_UNDERSKILLED = 1; + MY_DAMAGE *= 0.1; + MY_RADIUS *= 0.5; + } + ClientEvent("new", "all", "items/proj_arrow_phx_cl", MY_ORG, MY_RADIUS); + LogDebug("game_projectile_hitwall dmg MY_DAMAGE rad MY_RADIUS"); + XDoDamage(MY_ORG, MY_RADIUS, MY_DAMAGE, 0, "ent_expowner", "ent_expowner", "archery", "fire"); + TARGET_LIST = FindEntitiesInSphere("any", MY_RADIUS); + if (!(TARGET_LIST != "none")) return; + BURN_DMG = GetSkillLevel("ent_expowner", "spellcasting.fire"); + BURN_DMG *= 0.5; + if ((IS_UNDERSKILLED)) + { + BURN_DMG *= 0.1; + } + for (int i = 0; i < GetTokenCount(TARGET_LIST, ";"); i++) + { + burn_them(); + } + } + + void burn_them() + { + string CUR_TARGET = GetToken(TARGET_LIST, i, ";"); + if (!(GetRelationship("ent_expowner") == "enemy")) return; + if ((IsValidPlayer("ent_expowner"))) + { + if (GAME_PVP == 0) + { + } + if ((IsValidPlayer(CUR_TARGET))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARGET, "effects/dot_fire", 5, GetEntityIndex("ent_expowner"), BURN_DMG, "archery"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_phx_cl.as b/scripts/angelscript/items/proj_arrow_phx_cl.as new file mode 100644 index 00000000..39d1cb8d --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_phx_cl.as @@ -0,0 +1,69 @@ +#pragma context client + +namespace MS +{ + +class ProjArrowPhxCl : CGameScript +{ + int CYCLE_ANGLE; + string FX_CENTER; + string FX_RADIUS; + string SCALE_RATIO; + string SOUND_BURST; + + ProjArrowPhxCl() + { + SOUND_BURST = "ambience/steamburst1.wav"; + Precache(SOUND_BURST); + } + + void client_activate() + { + FX_CENTER = param1; + FX_RADIUS = param2; + CYCLE_ANGLE = 0; + string FX_RADIUS_RATIO = FX_RADIUS; + FX_RADIUS_RATIO /= 256; + SCALE_RATIO = /* TODO: $ratio */ $ratio(FX_RADIUS_RATIO, 1.0, 10.0); + string L_FX_CENTER = FX_CENTER; + string Z_ADJ = /* TODO: $ratio */ $ratio(FX_RADIUS_RATIO, 8.0, 30.0); + L_FX_CENTER += "z"; + LogDebug("*** phx FX_RADIUS_RATIO SCALE_RATIO /* TODO: $get_ground_height */ $get_ground_height(FX_CENTER) Z_ADJ"); + ClientEffect("tempent", "sprite", "weapons/projectiles.mdl", L_FX_CENTER, "setup_flame_burst", "update_flame_burst"); + ScheduleDelayedEvent(2.1, "remove_fx"); + string LIGHT_RAD = FX_RADIUS; + LIGHT_RAD *= 1.5; + ClientEffect("light", "new", FX_CENTER, LIGHT_RAD, Vector3(255, 128, 64), 2.0); + EmitSound3D(SOUND_BURST, 5, FX_CENTER); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_flame_burst() + { + } + + void setup_flame_burst() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "body", 51); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "scale", SCALE_RATIO); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_poison.as b/scripts/angelscript/items/proj_arrow_poison.as new file mode 100644 index 00000000..28f3364d --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_poison.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowPoison : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int CLFX_ARROW; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + string SPRITE_ARROW_TRADE; + + ProjArrowPoison() + { + CLFX_ARROW = 1; + SPRITE_ARROW_TRADE = "firearrow"; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = RandomInt(40, 50); + ARROW_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.5; + ARROW_EXPIRE_DELAY = 10; + } + + void arrow_spawn() + { + SetName("Envenomed Arrow"); + SetDescription("This sinister arrow has been laced with deadly poison."); + SetWeight(0.125); + SetSize(1); + SetValue(100); + SetGravity(0.8); + SetGroupable(25); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + ApplyEffect(param2, "effects/dot_poison", 15, MY_OWNER, Random(2, 3), "archery"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_silvertipped.as b/scripts/angelscript/items/proj_arrow_silvertipped.as new file mode 100644 index 00000000..d1b7a3d5 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_silvertipped.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowSilvertipped : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int CLFX_ARROW; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + int PROJ_STICK_DURATION; + string SPRITE_ARROW_TRADE; + + ProjArrowSilvertipped() + { + CLFX_ARROW = 1; + ARROW_EXPIRE_DELAY = 5; + SPRITE_ARROW_TRADE = "silverarrow"; + MODEL_BODY_OFS = 6; + PROJ_DAMAGE = RandomInt(120, 140); + PROJ_STICK_DURATION = 45; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.2; + } + + void arrow_spawn() + { + SetName("Elven Arrow"); + SetDescription("Light , elven arrows. Long distance in trade for poor damage"); + SetWeight(0.1); + SetSize(1); + SetValue(3); + SetGravity(0.5); + SetGroupable(25); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_spiral.as b/scripts/angelscript/items/proj_arrow_spiral.as new file mode 100644 index 00000000..f9796225 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_spiral.as @@ -0,0 +1,146 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowSpiral : CGameScript +{ + int ARROW_BODY_OFS; + int ARROW_SOLIDIFY_ON_WALL; + string CL_GLOW_COLOR; + string CL_SPRITE_COLOR; + string CL_SPRITE_FILE; + string CL_SPRITE_FRAMES; + string CL_SPRITE_SCALE; + string DMG_AMT; + string DMG_TYPE; + string GAME_PVP; + int HITWALL_VOL; + int IS_ACTIVE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_CL_IDX; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + int SCAN_RANGE; + string USE_SKILL; + + ProjArrowSpiral() + { + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 1; + PROJ_ANIM_IDLE = "idle_iceball"; + ARROW_SOLIDIFY_ON_WALL = 0; + HITWALL_VOL = 2; + PROJ_MOTIONBLUR = 0; + MODEL_BODY_OFS = 1; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_DAMAGE_AOE_RANGE = 0; + PROJ_DAMAGE_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_COLLIDEHITBOX = 1; + PROJ_IGNORENPC = 1; + PROJ_ANIM_IDLE = "none"; + SCAN_RANGE = 96; + } + + void arrow_spawn() + { + SetName("Freezing Sphere"); + SetDescription("A large ball of freezing magiks"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renaderamt", 0); + // svplaysound: svplaysound 1 10 ambience/alien_hollow.wav + EmitSound(1, 10, "ambience/alien_hollow.wav"); + GAME_PVP = "game.pvp"; + } + + void game_fall() + { + } + + void game_projectile_hitnpc() + { + } + + void game_projectile_landed() + { + remove_me(); + } + + void game_projectile_hitwall() + { + remove_me(); + remove_me(); + } + + void game_tossprojectile() + { + ScheduleDelayedEvent(10.0, "remove_me"); + if (!(true)) return; + DMG_TYPE = GetEntityProperty("ent_expowner", "scriptvar"); + DMG_AMT = GetEntityProperty("ent_expowner", "scriptvar"); + CL_SPRITE_FILE = GetEntityProperty("ent_expowner", "scriptvar"); + CL_SPRITE_FRAMES = GetEntityProperty("ent_expowner", "scriptvar"); + CL_SPRITE_SCALE = GetEntityProperty("ent_expowner", "scriptvar"); + CL_SPRITE_COLOR = GetEntityProperty("ent_expowner", "scriptvar"); + CL_GLOW_COLOR = GetEntityProperty("ent_expowner", "scriptvar"); + if (!(IsValidPlayer("ent_expowner"))) + { + USE_SKILL = "none"; + } + else + { + USE_SKILL = GetEntityProperty("ent_expowner", "scriptvar"); + } + IS_ACTIVE = 1; + ClientEvent("new", "all", "items/proj_arrow_spiral_cl", GetEntityIndex(GetOwner()), CL_SPRITE_FILE, CL_SPRITE_FRAMES, CL_SPRITE_SCALE, CL_SPRITE_COLOR, CL_GLOW_COLOR); + MY_CL_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.01, "damage_area"); + } + + void damage_area() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "damage_area"); + XDoDamage(GetEntityOrigin(GetOwner()), 128, DMG_AMT, 0, "ent_expowner", "ent_expowner", USE_SKILL, DMG_TYPE, "dmgevent:spiral"); + } + + void remove_me() + { + if ((true)) + { + if (!(IsValidPlayer("ent_expowner"))) + { + CallExternal("ent_expowner", "ext_spiral_done"); + } + ClientEvent("update", "all", MY_CL_IDX, "end_fx"); + IS_ACTIVE = 0; + DeleteEntity(GetOwner()); + } + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_spiral_cl.as b/scripts/angelscript/items/proj_arrow_spiral_cl.as new file mode 100644 index 00000000..ee026e63 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_spiral_cl.as @@ -0,0 +1,95 @@ +#pragma context client + +namespace MS +{ + +class ProjArrowSpiralCl : CGameScript +{ + string CL_LIGHT_ID; + int FX_ACTIVE; + string GLOW_COLOR; + int GLOW_RAD; + float MAX_DURATION; + string MY_OWNER; + int ROT_COUNT; + string SPRITE_COLOR; + string SPRITE_FRAMES; + string SPRITE_NAME; + string SPRITE_SCALE; + + ProjArrowSpiralCl() + { + GLOW_RAD = 256; + MAX_DURATION = 10.0; + } + + void client_activate() + { + SetCallback("render", "enable"); + MY_OWNER = param1; + SPRITE_NAME = param2; + SPRITE_FRAMES = param3; + SPRITE_SCALE = param4; + SPRITE_COLOR = param5; + GLOW_COLOR = param6; + FX_ACTIVE = 1; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 0.25); + CL_LIGHT_ID = "game.script.last_light_id"; + ROT_COUNT = 0; + fx_loop(); + MAX_DURATION("end_fx"); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.05, "fx_loop"); + ROT_COUNT += 10; + if (ROT_COUNT > 359) + { + ROT_COUNT = 0; + } + string SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(ROT_COUNT, ROT_COUNT, 0), Vector3(0, 32, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_spiral_sprite"); + string SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(/* TODO: $neg */ $neg(ROT_COUNT), /* TODO: $neg */ $neg(ROT_COUNT), 0), Vector3(0, 32, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_spiral_sprite"); + if (!(/* TODO: $getcl */ $getcl(MY_OWNER, "isplayer"))) return; + end_fx(); + } + + void end_fx() + { + if (!(FX_ACTIVE)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + if (!(/* TODO: $getcl */ $getcl(MY_OWNER, "exists"))) return; + string L_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + ClientEffect("light", CL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 0.25); + } + + void setup_spiral_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_FRAMES); + } + +} + +} diff --git a/scripts/angelscript/items/proj_arrow_wooden.as b/scripts/angelscript/items/proj_arrow_wooden.as new file mode 100644 index 00000000..e03d3161 --- /dev/null +++ b/scripts/angelscript/items/proj_arrow_wooden.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjArrowWooden : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int CLFX_ARROW; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + + ProjArrowWooden() + { + CLFX_ARROW = 1; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = RandomInt(60, 90); + ARROW_STICK_DURATION = 10; + ARROW_SOLIDIFY_ON_WALL = 1; + ARROW_BREAK_CHANCE = 0.2; + } + + void arrow_spawn() + { + SetName("Wooden Arrow"); + SetDescription("A wooden arrow"); + SetWeight(0.1); + SetSize(1); + SetValue(1); + SetGravity(0.7); + SetGroupable(25); + } + +} + +} diff --git a/scripts/angelscript/items/proj_base.as b/scripts/angelscript/items/proj_base.as new file mode 100644 index 00000000..fdf54b8c --- /dev/null +++ b/scripts/angelscript/items/proj_base.as @@ -0,0 +1,335 @@ +#pragma context server + +#include "items/base_item_extras.as" + +namespace MS +{ + +class ProjBase : CGameScript +{ + string BOLT_TRACE_END; + int BP_HIT_TARGET; + string CLFX_ARROW_IDX; + string CLFX_ARROW_INIT; + string CLFX_ARROW_IN_FLIGHT; + string CLFX_ARROW_SCRIPT; + float CLFX_ARROW_UPDATE_RATE; + string MODEL_WORLD; + string MY_XBOW; + int PROJ_COLLIDEHITBOX; + string PROJ_DELETING; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_STICK_ON_NPC; + + ProjBase() + { + PROJ_COLLIDEHITBOX = 1; + PROJ_IGNORENPC = 0; + MODEL_WORLD = "none"; + PROJ_MOTIONBLUR = 1; + PROJ_STICK_ON_NPC = 1; + CLFX_ARROW_SCRIPT = "items/proj_simple_cl"; + CLFX_ARROW_UPDATE_RATE = 0.5; + } + + void OnSpawn() override + { + // TODO: movetype projectile + if (!(CLFX_ARROW)) + { + SetModel(MODEL_WORLD); + if (PROJ_ANIM_IDLE != "PROJ_ANIM_IDLE") + { + if (PROJ_ANIM_IDLE != "none") + { + } + PlayAnim("once", PROJ_ANIM_IDLE); + } + if (MODEL_BODY_OFS != "MODEL_BODY_OFS") + { + SetModelBody(0, MODEL_BODY_OFS); + } + } + else + { + SetWidth(32); + SetHeight(32); + SetModel("none"); + } + if (!(HITSCAN_BOLT)) + { + string reg.proj.dmg = PROJ_DAMAGE; + } + else + { + int reg.proj.dmg = 0; + } + if ((HEAVY_ONLY)) + { + string reg.proj.dmg = PROJ_DAMAGE; + } + string reg.proj.dmgtype = PROJ_DAMAGE_TYPE; + string reg.proj.aoe.range = PROJ_AOE_RANGE; + string reg.proj.aoe.falloff = PROJ_AOE_FALLOFF; + string reg.proj.stick.duration = PROJ_STICK_DURATION; + string reg.proj.collidehitbox = PROJ_COLLIDEHITBOX; + string reg.proj.ignorenpc = PROJ_IGNORENPC; + SetMonsterClip(0); + RegisterProjectile(); + projectile_spawn(); + } + + void game_fall() + { + if (MODEL_BODY_OFS != "MODEL_BODY_OFS") + { + SetModelBody(0, MODEL_BODY_OFS); + } + } + + void game_tossprojectile() + { + if ((CLFX_ARROW)) + { + ScheduleDelayedEvent(0.01, "update_clfx_projectile"); + } + MY_XBOW = GetActiveItem("ent_expowner"); + if (MODEL_BODY_OFS != "MODEL_BODY_OFS") + { + if (!(CLFX_ARROW)) + { + SetModelBody(0, MODEL_BODY_OFS); + } + } + SetUseable(0); + if ((PROJ_MOTIONBLUR)) + { + if (!(CLFX_ARROW)) + { + } + ClientEvent("new", "all_in_sight", "effects/sfx_motionblur", GetEntityIndex(GetOwner()), MODEL_BODY_OFS); + } + game_fall(); + if ((HITSCAN_BOLT)) + { + hitscan_bolt(); + } + } + + void game_projectile_landed() + { + LogDebug("game_projectile_landed"); + if ((CLFX_ARROW)) + { + CLFX_ARROW_IN_FLIGHT = 0; + ClientEvent("update", "all", CLFX_ARROW_IDX, "end_fx", "landed"); + } + // TODO: movetype none + if (!(PROJ_STICK_ON_WALL_NEW)) + { + SetExpireTime(0); + } + else + { + SetModel(MODEL_WORLD); + SetModelBody(0, MODEL_BODY_OFS); + SolidifyProjectile(GetOwner()); + } + projectile_landed(); + if (PROJ_STICK_DURATION == 0) + { + remove_projectile("landed"); + } + if (PROJ_STICK_DURATION > 0) + { + PROJ_STICK_DURATION("remove_projectile"); + } + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(PROJ_REMOVE_ON_USE)) return; + if ((PROJ_DELETING)) return; + LogDebug("GetEntityName(param1)"); + if ((IsKeyDown(param1, "use"))) + { + PROJ_DELETING = 1; + EmitSound(GetOwner(), 0, SOUND_HITWALL1, 10); + remove_projectile("touch_used"); + } + if ((IsValidPlayer(param1))) return; + PROJ_DELETING = 1; + remove_projectile("touch_remove"); + ClientEvent("update", "all", CLFX_ARROW_IDX, "ext_touch", GetEntityIndex(param1)); + } + + void game_projectile_hitwall() + { + // PlayRandomSound from: HITWALL_VOL, SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {HITWALL_VOL, SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + if (PROJ_STICK_DURATION == 0) + { + remove_projectile("hitwall"); + } + } + + void ext_lighten() + { + SetGravity(param1); + if ((CLFX_ARROW)) + { + ClientEvent("update", "all", CLFX_ARROW_IDX, "ext_lighten", param1); + } + } + + void ext_scale() + { + SetProp(GetOwner(), "scale", param1); + if ((CLFX_ARROW)) + { + ClientEvent("update", "all", CLFX_ARROW_IDX, "ext_scale", param1); + } + } + + void hitscan_bolt() + { + if ((HEAVY_ONLY)) + { + int EXIT_SUB = 1; + if ((GetEntityName(MY_XBOW)).findFirst("Heavy") >= 0) + { + int EXIT_SUB = 0; + SetGravity(0); + } + if ((GetEntityName(MY_XBOW)).findFirst("Steam") >= 0) + { + int EXIT_SUB = 0; + SetGravity(0); + } + } + if ((EXIT_SUB)) return; + string START_TRACE = GetEntityOrigin(GetOwner()); + string V_MY_DEST = /* TODO: $relpos */ $relpos(Vector3(/* TODO: $neg */ $neg(GetMonsterProperty("angles.pitch")), GetMonsterProperty("angles.yaw"), GetMonsterProperty("angles.roll")), Vector3(0, 8000, 0)); + string MY_DEST = START_TRACE; + MY_DEST += V_MY_DEST; + string HIT_TARG = TraceLine(START_TRACE, MY_DEST); + if (HIT_TARG == GetEntityIndex("ent_expowner")) + { + int EXIT_SUB = 1; + ScheduleDelayedEvent(0.01, "hitscan_bolt"); + } + if ((EXIT_SUB)) return; + string MY_DAMAGE = GetSkillLevel("ent_expowner", "archery"); + MY_DAMAGE *= 0.01; + MY_DAMAGE *= PROJ_DAMAGE; + string DMG_MULTI = GetEntityProperty(MY_XBOW, "scriptvar"); + if (DMG_MULTI > 0) + { + MY_DAMAGE *= DMG_MULTI; + } + if (!(IsEntityAlive(HIT_TARG))) + { + SetEntityOrigin(GetOwner(), HIT_TARG); + BOLT_TRACE_END = TraceLine(START_TRACE, MY_DEST); + XDoDamage(START_TRACE, MY_DEST, MY_DAMAGE, 1.0, "ent_expowner", GetOwner(), "archery", PROJ_DAMAGE_TYPE, "dmgevent:*bolt"); + } + if ((IsEntityAlive(HIT_TARG))) + { + SetEntityOrigin(GetOwner(), GetEntityOrigin(HIT_TARG)); + strike_target(HIT_TARG); + } + } + + void strike_target() + { + if ((BP_HIT_TARGET)) return; + BP_HIT_TARGET = 1; + SetEntityOrigin(GetOwner(), GetEntityOrigin(param1)); + string MY_DAMAGE = GetSkillLevel("ent_expowner", "archery"); + MY_DAMAGE *= 0.01; + MY_DAMAGE *= PROJ_DAMAGE; + string DMG_MULTI = GetEntityProperty(MY_XBOW, "scriptvar"); + if (DMG_MULTI > 0) + { + MY_DAMAGE *= DMG_MULTI; + } + XDoDamage(param1, "direct", MY_DAMAGE, 1.0, "ent_expowner", "ent_expowner", "archery", PROJ_DAMAGE_TYPE); + if (!(PROJ_STICK_ON_NPC)) + { + remove_projectile("strike_target"); + } + } + + void game_projectile_hitnpc() + { + if ((CLFX_ARROW)) + { + CLFX_ARROW_IN_FLIGHT = 0; + ClientEvent("update", "all", CLFX_ARROW_IDX, "ext_hitnpc", GetEntityIndex(param1)); + } + if (!(HITSCAN_BOLT)) return; + string OUT_TARG = param1; + strike_target(OUT_TARG); + } + + void remove_projectile() + { + if (CLFX_ARROW != "CLFX_ARROW") + { + CLFX_ARROW_IN_FLIGHT = 0; + if ((CLFX_ARROW_NOSTICK)) + { + ClientEvent("update", "all", CLFX_ARROW_IDX, "end_fx", param1); + } + } + SetExpireTime(0); + DeleteEntity(GetOwner()); + } + + void update_clfx_projectile() + { + if (!(CLFX_ARROW_INIT)) + { + CLFX_ARROW_INIT = 1; + CLFX_ARROW_IN_FLIGHT = 1; + string L_INFO_TOKENS = GetEntityOrigin(GetOwner()); + if (L_INFO_TOKENS.length() > 0) L_INFO_TOKENS += ";"; + L_INFO_TOKENS += GetEntityAngles(GetOwner()); + if (L_INFO_TOKENS.length() > 0) L_INFO_TOKENS += ";"; + L_INFO_TOKENS += GetEntityVelocity(GetOwner()); + if (L_INFO_TOKENS.length() > 0) L_INFO_TOKENS += ";"; + L_INFO_TOKENS += int(PROJ_ANIM_IDLE); + if (L_INFO_TOKENS.length() > 0) L_INFO_TOKENS += ";"; + L_INFO_TOKENS += GetEntityProperty(GetOwner(), "gravity"); + if (L_INFO_TOKENS.length() > 0) L_INFO_TOKENS += ";"; + L_INFO_TOKENS += PROJ_STICK_ON_NPC; + string L_MODEL_BODY_OFS = MODEL_BODY_OFS; + if (MODEL_BODY_OFS == "MODEL_BODY_OFS") + { + int L_MODEL_BODY_OFS = 0; + } + ClientEvent("new", "all", CLFX_ARROW_SCRIPT, GetEntityIndex(GetOwner()), GetEntityIndex("ent_expowner"), L_INFO_TOKENS, MODEL_WORLD, L_MODEL_BODY_OFS, PROJ_MOTIONBLUR, CLFX_ARROW_TAGS); + CLFX_ARROW_IDX = "game.script.last_sent_id"; + CLFX_ARROW_UPDATE_RATE("update_clfx_projectile"); + } + else + { + if ((CLFX_ARROW_IN_FLIGHT)) + { + } + ClientEvent("update", "all", CLFX_ARROW_IDX, "ext_update", GetEntityOrigin(GetOwner()), GetEntityAngles(GetOwner()), GetEntityVelocity(GetOwner())); + CLFX_ARROW_UPDATE_RATE("update_clfx_projectile"); + } + } + + void ext_render() + { + SetProp(GetOwner(), "rendermode", param1); + SetProp(GetOwner(), "renderamt", param2); + } + +} + +} diff --git a/scripts/angelscript/items/proj_blizzard2.as b/scripts/angelscript/items/proj_blizzard2.as new file mode 100644 index 00000000..1b0e1268 --- /dev/null +++ b/scripts/angelscript/items/proj_blizzard2.as @@ -0,0 +1,115 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjBlizzard2 : CGameScript +{ + int ARROW_BODY_OFS; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjBlizzard2() + { + Precache("monsters/summon/summon_blizzard"); + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 2; + MODEL_BODY_OFS = 2; + SOUND_HITWALL1 = "weapons/bow/arrowhit1.wav"; + SOUND_HITWALL2 = "weapons/bow/arrowhit1.wav"; + SOUND_BURN = "items/torch1.wav"; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_iceball"; + PROJ_DAMAGE = 100; + PROJ_AOE_RANGE = 256; + PROJ_AOE_FALLOFF = 1; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + } + + void projectile_spawn() + { + SetName("Blizzard Spawner"); + SetWeight(500); + SetSize(1); + SetValue(1); + SetGravity(0.7); + SetGroupable(25); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void projectile_landed() + { + frost_landed(); + } + + void game_hitnpc() + { + frost_hit(); + } + + void frost_hit() + { + string MY_OWNER = GetEntityIndex("ent_expowner"); + string EFFECT_DMG = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + EFFECT_DMG *= 1.25; + int EFFECT_MAXDURATION = 10; + int EFFECT_MINDURATION = 10; + string EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + ApplyEffect(m_hLastStruckByMe, "effects/dot_cold", EFFECT_DURATION, MY_OWNER, EFFECT_DMG, "spellcasting.ice"); + frost_landed(); + } + + void frost_landed() + { + string MY_OWNER = GetEntityIndex("ent_expowner"); + string OWNER_ISPLAYER = IsValidPlayer("ent_expowner"); + string pos = GetEntityOrigin(GetOwner()); + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + if ((OWNER_ISPLAYER)) + { + string EFFECT_DMG = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + string EFFECT_DURATION_STAT = GetStat(MY_OWNER, "concentration.ratio"); + int EFFECT_MAXDURATION = 5; + int EFFECT_MINDURATION = 15; + string EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + EFFECT_DMG /= 2.0; + SpawnNPC("monsters/summon/summon_blizzard", pos, ScriptMode::Legacy); // params: MY_OWNER, GetEntityProperty(GetOwner(), "angles.y"), EFFECT_DMG, EFFECT_DURATION, "spellcasting.ice" + string LAST_ENT = GetEntityIndex(m_hLastCreated); + } + if (!(OWNER_ISPLAYER)) + { + string EFFECT_DMG = GetEntityProperty(MY_OWNER, "scriptvar"); + string EFFECT_DURATION = GetEntityProperty(MY_OWNER, "scriptvar"); + SpawnNPC("monsters/summon/summon_blizzard", pos, ScriptMode::Legacy); // params: MY_OWNER, GetEntityProperty(GetOwner(), "angles.y"), EFFECT_DMG, EFFECT_DURATION, "spellcasting.ice" + } + } + +} + +} diff --git a/scripts/angelscript/items/proj_bolt_fire.as b/scripts/angelscript/items/proj_bolt_fire.as new file mode 100644 index 00000000..4bd2f792 --- /dev/null +++ b/scripts/angelscript/items/proj_bolt_fire.as @@ -0,0 +1,186 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjBoltFire : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string BOLT_DAMAGE; + int DID_SPLODIE; + string DIRECT_HIT; + int HITSCAN_BOLT; + int MODEL_BODY_OFS; + string MODEL_WORLD; + string MY_OWNER; + string MY_START_ANG; + string MY_XBOW; + string PROJ_ANIM_IDLE; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string START_TRACE; + string TRACE_END; + + ProjBoltFire() + { + HITSCAN_BOLT = 1; + MODEL_WORLD = "weapons/projectiles.mdl"; + SOUND_HITWALL1 = "weapons/bow/arrowhit1.wav"; + SOUND_HITWALL2 = "weapons/bow/arrowhit1.wav"; + MODEL_BODY_OFS = 49; + ARROW_BODY_OFS = 49; + PROJ_DAMAGE_AOE_RANGE = 250; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_ANIM_IDLE = "none"; + PROJ_IGNORENPC = 1; + PROJ_DAMAGE = RandomInt(400, 500); + PROJ_STICK_DURATION = 1; + ARROW_SOLIDIFY_ON_WALL = 1; + ARROW_BREAK_CHANCE = 1.0; + } + + void arrow_spawn() + { + SetName("Dwarven Bolt"); + SetDescription("An awkward bolt made by the dwarves. "Handle with care""); + SetWeight(0.2); + SetSize(1); + SetValue(500); + SetGravity(0); + SetGroupable(25); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", "expbolt"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + } + + void hitscan_bolt() + { + MY_OWNER = GetEntityIndex("ent_expowner"); + MY_XBOW = GetActiveItem(MY_OWNER); + BOLT_DAMAGE = GetSkillLevel(MY_OWNER, "archery"); + BOLT_DAMAGE *= 0.01; + BOLT_DAMAGE *= PROJ_DAMAGE; + string DMG_MULTI = GetEntityProperty(MY_XBOW, "scriptvar"); + if (DMG_MULTI > 0) + { + BOLT_DAMAGE *= DMG_MULTI; + } + START_TRACE = GetEntityOrigin(GetOwner()); + string V_MY_DEST = /* TODO: $relpos */ $relpos(Vector3(/* TODO: $neg */ $neg(GetMonsterProperty("angles.pitch")), GetMonsterProperty("angles.yaw"), GetMonsterProperty("angles.roll")), Vector3(0, 8000, 0)); + string MY_DEST = START_TRACE; + MY_DEST += V_MY_DEST; + MY_START_ANG = GetEntityAngles(GetOwner()); + SetProp(GetOwner(), "avelocity", 0); + SetProp(GetOwner(), "velocity", 0); + SetProp(GetOwner(), "movetype", 0); + if ((G_DEVELOPER_MODE)) + { + Effect("beam", "point", "lgtning.spr", 20, START_TRACE, MY_DEST, Vector3(255, 0, 255), 200, 0, 1.0); + } + XDoDamage(START_TRACE, MY_DEST, 0, 1.0, MY_OWNER, GetOwner(), "none", "target", "dmgevent:*boltscan"); + } + + void go_splodie() + { + if ((DID_SPLODIE)) return; + // TODO: movetype none + SetEntityOrigin(GetOwner(), TRACE_END); + DID_SPLODIE = 1; + // PlayRandomSound from: "weapons/explode3.wav" + array sounds = {"weapons/explode3.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + // TODO: UNCONVERTED: attachlight torch + // TODO: UNCONVERTED: attachsprite explode1.spr trans 12 1.5 + SetExpireTime(1); + } + + void boltscan_dodamage() + { + if ((IsEntityAlive(param2))) + { + TRACE_END = GetEntityOrigin(param2); + DIRECT_HIT = 1; + } + else + { + string L_END = param4; + string L_TRACE = TraceLine(START_TRACE, L_END); + TRACE_END = L_TRACE; + } + LogDebug("boltscan_dodamage TRACE_END GetEntityName(param2)"); + if ((G_DEVELOPER_MODE)) + { + string L_TRACE_END = TRACE_END; + L_TRACE_END += "z"; + Effect("beam", "point", "lgtning.spr", 20, TRACE_END, L_TRACE_END, Vector3(255, 0, 0), 200, 0, 5.0); + string L_END = param4; + L_END += "z"; + Effect("beam", "point", "lgtning.spr", 20, param4, L_END, Vector3(0, 0, 255), 200, 0, 5.0); + } + ScheduleDelayedEvent(0.1, "splode_dmg"); + } + + void splode_dmg() + { + XDoDamage(TRACE_END, 128, BOLT_DAMAGE, 0.5, MY_OWNER, GetOwner(), "archery", PROJ_DAMAGE_TYPE, "dmgevent:*bolt"); + SetEntityOrigin(GetOwner(), TRACE_END); + ScheduleDelayedEvent(0.1, "go_splodie"); + } + + void bolt_dodamage() + { + if ((IsEntityAlive(param2))) + { + LogDebug("bolt_dodamage_npc GetEntityOrigin(param2)"); + if ((param1)) + { + } + string HIT_TARG = param2; + if (GetEntityMaxHealth(HIT_TARG) < 1000) + { + } + if (GetEntityRace(HIT_TARG) != "human") + { + } + if (GetEntityRace(HIT_TARG) != "hguard") + { + } + string TARG_ORG = GetEntityOrigin(HIT_TARG); + string NEW_YAW = /* TODO: $angles */ $angles(TRACE_END, TARG_ORG); + if (!(DIRECT_HIT)) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(10, 400, 600))); + } + else + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(10, -400, 600))); + } + } + } + + void game_fall() + { + LogDebug("game_fall MODEL_BODY_OFS MODEL_WORLD"); + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + + void game_tossprojectile() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + } + +} + +} diff --git a/scripts/angelscript/items/proj_bolt_generic.as b/scripts/angelscript/items/proj_bolt_generic.as new file mode 100644 index 00000000..1661402d --- /dev/null +++ b/scripts/angelscript/items/proj_bolt_generic.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjBoltGeneric : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int HITSCAN_BOLT; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + int PROJ_STICK_DURATION; + + ProjBoltGeneric() + { + HITSCAN_BOLT = 1; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = 100; + PROJ_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.01; + } + + void arrow_spawn() + { + SetName("Crossbow Bolt"); + SetDescription("A crudely made bolt"); + SetWeight(0.2); + SetSize(1); + SetValue(0); + SetGravity(0); + SetGroupable(25); + } + +} + +} diff --git a/scripts/angelscript/items/proj_bolt_iron.as b/scripts/angelscript/items/proj_bolt_iron.as new file mode 100644 index 00000000..6c896fc9 --- /dev/null +++ b/scripts/angelscript/items/proj_bolt_iron.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjBoltIron : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int HITSCAN_BOLT; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + int PROJ_STICK_DURATION; + + ProjBoltIron() + { + HITSCAN_BOLT = 1; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = 300; + PROJ_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 1; + ARROW_BREAK_CHANCE = 0.2; + } + + void arrow_spawn() + { + SetName("Iron Bolt"); + SetDescription("A crossbow bolt made of iron"); + SetWeight(0.15); + SetSize(1); + SetValue(75); + SetGravity(0); + SetGroupable(25); + } + +} + +} diff --git a/scripts/angelscript/items/proj_bolt_poison.as b/scripts/angelscript/items/proj_bolt_poison.as new file mode 100644 index 00000000..a4904c50 --- /dev/null +++ b/scripts/angelscript/items/proj_bolt_poison.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjBoltPoison : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int HITSCAN_BOLT; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + + ProjBoltPoison() + { + HITSCAN_BOLT = 1; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = 150; + PROJ_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.01; + PROJ_DAMAGE_TYPE = "poison"; + } + + void arrow_spawn() + { + SetName("Poison Gas Bolt"); + SetDescription("This crossbow bolt explodes into a cloud of poisonous gas."); + SetWeight(0.15); + SetSize(1); + SetValue(0); + SetGravity(0); + SetGroupable(25); + } + + void bolt_dodamage() + { + LogDebug("bolt_dodamage PARAM1 PARAM2 PARAM3 PARAM4"); + string L_PASS = BOLT_TRACE_END; + do_explode(L_PASS); + } + + void strike_target() + { + string L_PASS = GetEntityOrigin(param1); + do_explode(L_PASS); + } + + void do_explode() + { + string L_PASS = param1; + CallExternal("ent_expowner", "ext_poison_bolt", L_PASS); + } + +} + +} diff --git a/scripts/angelscript/items/proj_bolt_silver.as b/scripts/angelscript/items/proj_bolt_silver.as new file mode 100644 index 00000000..e4603756 --- /dev/null +++ b/scripts/angelscript/items/proj_bolt_silver.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjBoltSilver : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int HITSCAN_BOLT; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + + ProjBoltSilver() + { + HITSCAN_BOLT = 1; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = 400; + PROJ_DAMAGE_TYPE = "holy"; + PROJ_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 1; + ARROW_BREAK_CHANCE = 0.2; + } + + void arrow_spawn() + { + SetName("Blessed Bolt"); + SetDescription("A crossbow bolt blessed with enchanted silver to fight the unholy."); + SetWeight(0.175); + SetSize(1); + SetValue(400); + SetGravity(0); + SetGroupable(25); + } + +} + +} diff --git a/scripts/angelscript/items/proj_bolt_steel.as b/scripts/angelscript/items/proj_bolt_steel.as new file mode 100644 index 00000000..61dc0f31 --- /dev/null +++ b/scripts/angelscript/items/proj_bolt_steel.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjBoltSteel : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + float HEAVY_BOLT; + int HEAVY_ONLY; + int HITSCAN_BOLT; + int MODEL_BODY_OFS; + string MY_XBOW; + int PROJ_DAMAGE; + int PROJ_STICK_DURATION; + + ProjBoltSteel() + { + HITSCAN_BOLT = 1; + HEAVY_ONLY = 1; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = 400; + PROJ_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.2; + HEAVY_BOLT = 0.5; + } + + void arrow_spawn() + { + SetName("Steel Bolt"); + SetDescription("A crossbow bolt made of heavy steel designed for heavier crossbows"); + SetWeight(0.175); + SetSize(1); + SetValue(200); + SetGravity(2); + SetGroupable(25); + if (!(true)) return; + MY_XBOW = GetActiveItem("ent_expowner"); + if ((GetEntityName(MY_XBOW)).findFirst("Heavy") >= 0) + { + SetGravity(0); + } + } + +} + +} diff --git a/scripts/angelscript/items/proj_bolt_wooden.as b/scripts/angelscript/items/proj_bolt_wooden.as new file mode 100644 index 00000000..938bc1e1 --- /dev/null +++ b/scripts/angelscript/items/proj_bolt_wooden.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjBoltWooden : CGameScript +{ + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int HITSCAN_BOLT; + int MODEL_BODY_OFS; + int PROJ_DAMAGE; + int PROJ_STICK_DURATION; + + ProjBoltWooden() + { + HITSCAN_BOLT = 1; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = 110; + PROJ_STICK_DURATION = 25; + ARROW_SOLIDIFY_ON_WALL = 1; + ARROW_BREAK_CHANCE = 0.01; + } + + void arrow_spawn() + { + SetName("Wooden Bolt"); + SetDescription("A primitive crossbow bolt"); + SetWeight(0.1); + SetSize(1); + SetValue(10); + SetGravity(0); + SetGroupable(25); + } + +} + +} diff --git a/scripts/angelscript/items/proj_cannon_ball.as b/scripts/angelscript/items/proj_cannon_ball.as new file mode 100644 index 00000000..312f5064 --- /dev/null +++ b/scripts/angelscript/items/proj_cannon_ball.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjCannonBall : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SMOKE_SPRITE; + + ProjCannonBall() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 42; + PROJ_ANIM_IDLE = "spin_horizontal_fast"; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 0; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + PROJ_DAMAGE_TYPE = "siege"; + PROJ_AOE_RANGE = 150; + PROJ_AOE_FALLOFF = 0; + SMOKE_SPRITE = "bigsmoke.spr"; + } + + void arrow_spawn() + { + SetName("Cannon ball"); + SetDescription("A projectile used by flint cannons"); + SetWeight(0.1); + SetWidth(1); + SetHeight(1); + SetValue(0); + SetGravity(0.05); + SetGroupable(25); + EmitSound(GetOwner(), 0, "amb/cannon_incoming.wav", 10); + } + + void projectile_landed() + { + EmitSound(GetOwner(), 2, "weapons/mortarhit.wav", 10); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 100, 5, 3, 500); + Effect("tempent", "trail", SMOKE_SPRITE, /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 10), 10, 2, 1, 10, 20); + DeleteEntity(GetOwner()); + } + + void game_dodamage() + { + if (!(param1)) return; + CallExternal(param2, "hit_by_siege"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_catapaultball.as b/scripts/angelscript/items/proj_catapaultball.as new file mode 100644 index 00000000..aab1afc9 --- /dev/null +++ b/scripts/angelscript/items/proj_catapaultball.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjCatapaultball : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SMOKE_SPRITE; + + ProjCatapaultball() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 4; + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 0; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + PROJ_DAMAGE_TYPE = "siege"; + PROJ_DAMAGE = RandomInt(400, 500); + PROJ_AOE_RANGE = 250; + PROJ_AOE_FALLOFF = 0; + SMOKE_SPRITE = "bigsmoke.spr"; + Precache(SMOKE_SPRITE); + } + + void arrow_spawn() + { + SetName("Catapult ball"); + SetDescription("A giant rock"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.6); + SetGroupable(25); + } + + void projectile_landed() + { + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 100, 5, 3, 500); + Effect("tempent", "trail", SMOKE_SPRITE, /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 10), 10, 2, 2, 10, 20); + DeleteEntity(GetOwner()); + } + + void game_dodamage() + { + if (!(param1)) return; + CallExternal(param2, "hit_by_siege"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_crescent.as b/scripts/angelscript/items/proj_crescent.as new file mode 100644 index 00000000..0200891b --- /dev/null +++ b/scripts/angelscript/items/proj_crescent.as @@ -0,0 +1,317 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjCrescent : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string CL_IDX; + string CRE_EFFECT_DURATION; + string CRE_EFFECT_NAME; + string CRE_EFFECT_RATIO; + string CRE_EFFECT_SCRIPT; + string CRE_EFFECT_SKILL; + string CRE_TYPE; + int DID_LAND; + string DMG_AMT; + int FWD_SPEED; + string GAME_PVP; + int IS_ACTIVE; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string NEXT_ACQUIRE; + string NEXT_ANGLE_UPDATE; + string NEXT_DAMAGE; + string NPCATK_TARGET; + string OWNER_ISPLAYER; + string PLR_CRE_HAND; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SPIN; + string START_ANG; + string START_POS; + int SWIRVE_CYCLE; + string USE_SKILL; + + ProjCrescent() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 0; + ARROW_BODY_OFS = 0; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal1.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "slash"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "spin_vertical_fast"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 0; + PROJ_IGNORENPC = 1; + FWD_SPEED = 400; + SOUND_SPIN = "zombie/claw_miss2.wav"; + } + + void arrow_spawn() + { + SetName("Whirling Crescent Blade"); + SetDescription("A sharp bolt of ice"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0); + SetGroupable(25); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renaderamt", 0); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(GetGameTime() > NEXT_DAMAGE)) return; + NEXT_DAMAGE = GetGameTime(); + NEXT_DAMAGE += 0.1; + XDoDamage(param1, "direct", DMG_AMT, 1.0, "ent_expowner", "ent_expowner", USE_SKILL, CRE_TYPE); + if (!(IsValidPlayer("ent_expowner"))) return; + if (!(CRE_TYPE != "slash")) return; + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((GetEntityProperty(param1, "haseffect"))) return; + string DOT_AMT = GetEntityProperty("ent_expowner", "cre_effect_skill"); + DOT_AMT *= CRE_EFFECT_RATIO; + ApplyEffect(param1, CRE_EFFECT_SCRIPT, CRE_EFFECT_DURATION, GetEntityIndex("ent_expowner"), DOT_AMT, "smallarms"); + } + + void game_tossprojectile() + { + LogDebug("game_tossprojectile"); + GAME_PVP = "game.pvp"; + CRE_TYPE = GetEntityProperty("ent_expowner", "scriptvar"); + if (CRE_TYPE == "fire") + { + CRE_EFFECT_SCRIPT = "effects/dot_fire"; + CRE_EFFECT_SKILL = "skill.spellcasting.fire"; + CRE_EFFECT_RATIO = 0.5; + CRE_EFFECT_NAME = "DOT_fire"; + CRE_EFFECT_DURATION = 5.0; + } + if (CRE_TYPE == "cold") + { + CRE_EFFECT_SCRIPT = "effects/dot_cold"; + CRE_EFFECT_SKILL = "skill.spellcasting.ice"; + CRE_EFFECT_RATIO = 0.25; + CRE_EFFECT_NAME = "DOT_cold"; + CRE_EFFECT_DURATION = 5.0; + } + if (CRE_TYPE == "lightning") + { + CRE_EFFECT_SCRIPT = "effects/dot_lightning"; + CRE_EFFECT_SKILL = "skill.spellcasting.lightning"; + CRE_EFFECT_RATIO = 0.4; + CRE_EFFECT_NAME = "DOT_lightning"; + CRE_EFFECT_DURATION = 5.0; + } + if (CRE_TYPE == "poison") + { + CRE_EFFECT_SCRIPT = "effects/dot_poison"; + CRE_EFFECT_SKILL = "skill.spellcasting.affliction"; + CRE_EFFECT_RATIO = 0.3; + CRE_EFFECT_NAME = "DOT_poison"; + CRE_EFFECT_DURATION = 10.0; + } + // TODO: projectiletouch 1 + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renaderamt", 0); + IS_ACTIVE = 1; + OWNER_ISPLAYER = IsValidPlayer("ent_expowner"); + if ((OWNER_ISPLAYER)) + { + DMG_AMT = GetSkillLevel("ent_expowner", "smallarms.power"); + DMG_AMT *= 2.0; + USE_SKILL = "smallarms"; + START_ANG = GetEntityProperty("ent_expowner", "viewangles"); + PLR_CRE_HAND = GetEntityProperty("ent_expowner", "scriptvar"); + } + else + { + DMG_AMT = GetEntityProperty("ent_expowner", "scriptvar"); + START_ANG = GetEntityAngles("ent_expowner"); + USE_SKILL = "none"; + } + SWIRVE_CYCLE = 0; + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(START_ANG, Vector3(0, FWD_SPEED, 0))); + SetProp(GetOwner(), "movedir", START_ANG); + NEXT_ACQUIRE = GetGameTime(); + NEXT_ACQUIRE += 0.5; + ScheduleDelayedEvent(0.05, "cl_start"); + ScheduleDelayedEvent(0.1, "projectile_loop"); + ScheduleDelayedEvent(3.0, "end_projectile"); + } + + void cl_start() + { + START_POS = GetEntityOrigin(GetOwner()); + ClientEvent("new", "all", "items/proj_crescent_cl", GetEntityIndex(GetOwner()), GetEntityAngles(GetOwner()), GetEntityVelocity(GetOwner()), GetEntityOrigin(GetOwner())); + CL_IDX = "game.script.last_sent_id"; + } + + void projectile_loop() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "projectile_loop"); + // svplaysound: svplaysound 2 10 SOUND_SPIN 0.8 200 + EmitSound(2, 10, SOUND_SPIN, 0.8, 200); + if (!(IsEntityAlive(m_hAttackTarget))) + { + if (GetGameTime() > NEXT_ACQUIRE) + { + } + NEXT_ACQUIRE = GetGameTime(); + NEXT_ACQUIRE += 2.0; + CallExternal("ent_expowner", "ext_sphere_token", "enemy", 1024, GetEntityOrigin(GetOwner())); + string TARG_LIST = GetEntityProperty("ent_expowner", "scriptvar"); + if (TARG_LIST != "none") + { + } + string TARG_LIST = /* TODO: $sort_entlist */ $sort_entlist(TARG_LIST, "range"); + NPCATK_TARGET = GetToken(TARG_LIST, 0, ";"); + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + string OWNER_POS = GetEntityOrigin("ent_expowner"); + string OWNER_ANG = START_ANG; + if (!(WithinCone2D(TARG_POS, OWNER_POS, OWNER_ANG))) + { + NPCATK_TARGET = "unset"; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (!(IsValidPlayer(m_hAttackTarget))) + { + TARG_HALF_HEIGHT = GetEntityHeight(m_hAttackTarget); + TARG_HALF_HEIGHT *= 0.5; + } + else + { + TARG_HALF_HEIGHT = 0; + } + } + if (!(GetGameTime() > NEXT_ANGLE_UPDATE)) return; + NEXT_ANGLE_UPDATE = GetGameTime(); + NEXT_ANGLE_UPDATE += 0.1; + if ((IsEntityAlive(m_hAttackTarget))) + { + if (RandomInt(1, 2) < 100) + { + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + TARG_ORG += "z"; + string MY_ORG = GetEntityOrigin(GetOwner()); + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(MY_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, FWD_SPEED, 0))); + SetProp(GetOwner(), "movedir", ANG_TO_TARG); + if (GetEntityRange(m_hAttackTarget) < 64) + { + LogDebug("range_check GetEntityRange(m_hAttackTarget)"); + NEXT_ANGLE_UPDATE = GetGameTime(); + NEXT_ANGLE_UPDATE += 0.9; + ScheduleDelayedEvent(1.0, "return_user"); + } + } + } + ClientEvent("update", "all", CL_IDX, "sv_update_vel", GetEntityAngles(GetOwner()), GetEntityVelocity(GetOwner()), GetEntityOrigin(GetOwner())); + } + + void return_user() + { + NPCATK_TARGET = GetEntityIndex("ent_expowner"); + } + + void cl_update() + { + ClientEvent("update", "all", CL_IDX, "sv_update_vel", GetEntityAngles(GetOwner()), GetEntityVelocity(GetOwner()), GetEntityOrigin(GetOwner())); + } + + void swirve_wander() + { + SWIRVE_CYCLE += 1; + if (SWIRVE_CYCLE == 1) + { + int L_SWIRVE = -64; + } + if (SWIRVE_CYCLE == 2) + { + int L_SWIRVE = 64; + SWIRVE_CYCLE = 0; + } + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ORG = GetEntityOrigin(GetOwner()); + TARG_ORG += /* TODO: $relpos */ $relpos(START_ANG, Vector3(L_SWIRVE, 200, 0)); + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(MY_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, FWD_SPEED, 0))); + } + + void game_projectile_landed() + { + DID_LAND = 1; + end_projectile(); + } + + void end_projectile() + { + ClientEvent("update", "all", CL_IDX, "end_fx"); + if (!(OWNER_ISPLAYER)) + { + CallExternal("ent_expowner", "ext_crescent_done"); + string SPR_POS = GetEntityOrigin("ent_expowner"); + string OWNER_ANG = GetEntityAngles("ent_expowner"); + ClientEvent("new", "all", "items/proj_ub_cl", GetEntityOrigin(GetOwner()), SPR_POS); + } + else + { + string SPR_POS = GetEntityOrigin("ent_expowner"); + string OWNER_YAW = GetEntityProperty("ent_expowner", "angles.yaw"); + if (PLR_CRE_HAND == 1) + { + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(10, 32, 20)); + } + else + { + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(-10, 32, 20)); + } + ClientEvent("new", "all", "items/proj_ub_cl", GetEntityOrigin(GetOwner()), SPR_POS); + } + if ((DID_LAND)) return; + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/proj_crescent_cl.as b/scripts/angelscript/items/proj_crescent_cl.as new file mode 100644 index 00000000..4c274611 --- /dev/null +++ b/scripts/angelscript/items/proj_crescent_cl.as @@ -0,0 +1,82 @@ +#pragma context server + +namespace MS +{ + +class ProjCrescentCl : CGameScript +{ + string CUR_ANG; + string CUR_ORG; + string CUR_VEL; + string FX_OWNER; + int IS_ACTIVE; + int UPDATE_VEL; + + void client_activate() + { + FX_OWNER = param1; + CUR_ANG = param2; + CUR_VEL = param3; + CUR_ORG = param4; + SetCallback("render", "enable"); + IS_ACTIVE = 1; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", CUR_ORG, "setup_cre", "update_cre"); + ScheduleDelayedEvent(3.0, "end_fx"); + } + + void sv_update_vel() + { + CUR_ANG = param1; + CUR_VEL = param2; + CUR_ORG = param3; + UPDATE_VEL = 1; + } + + void update_cre() + { + if ((IS_ACTIVE)) + { + if ((UPDATE_VEL)) + { + ClientEffect("tempent", "set_current_prop", "angles", CUR_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", CUR_VEL); + UPDATE_VEL = 0; + } + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 0, 0)); + } + } + + void end_fx() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.2, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_cre() + { + ClientEffect("tempent", "set_current_prop", "origin", /* TODO: $getcl */ $getcl(FX_OWNER, "origin")); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", CUR_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", CUR_VEL); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", 71); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 16); + ClientEffect("tempent", "set_current_prop", "sequence", 11); + } + +} + +} diff --git a/scripts/angelscript/items/proj_elemental_cl.as b/scripts/angelscript/items/proj_elemental_cl.as new file mode 100644 index 00000000..47f34413 --- /dev/null +++ b/scripts/angelscript/items/proj_elemental_cl.as @@ -0,0 +1,179 @@ +#pragma context server + +namespace MS +{ + +class ProjElementalCl : CGameScript +{ + string CLOUD_ORG; + string CUR_ANG; + string CUR_ORG; + string CUR_VEL; + int CYCLE_ANGLE; + string FX_COLOR; + string FX_DURATION; + string FX_OWNER; + string FX_SPRITE; + int IS_ACTIVE; + string PROJ_LIGHT_ID; + int UPDATE_VEL; + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.01, 0.05)); + if ((IS_ACTIVE)) + { + } + ClientEffect("tempent", "sprite", FX_SPRITE, CLOUD_ORG, "spit_flames"); + ClientEffect("tempent", "sprite", FX_SPRITE, CLOUD_ORG, "spit_flames"); + ClientEffect("tempent", "sprite", FX_SPRITE, CLOUD_ORG, "spit_flames"); + } + + void client_activate() + { + FX_OWNER = param1; + CUR_ANG = param2; + CUR_VEL = param3; + FX_COLOR = param4; + FX_DURATION = param5; + FX_SPRITE = param6; + CUR_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SetCallback("render", "enable"); + IS_ACTIVE = 1; + CLOUD_ORG = CUR_ORG; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", CUR_ORG, "setup_cloud", "update_cloud"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), 128, FX_COLOR, 5.0); + PROJ_LIGHT_ID = "game.script.last_light_id"; + string L_FAILSAFE_DURATION = FX_DURATION; + L_FAILSAFE_DURATION *= 1.5; + L_FAILSAFE_DURATION("end_fx"); + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(FX_OWNER, "exists"))) return; + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + ClientEffect("light", PROJ_LIGHT_ID, L_POS, 128, FX_COLOR, 1.0); + } + + void sv_update_vel() + { + CUR_ANG = param1; + CUR_VEL = param2; + CUR_ORG = param3; + UPDATE_VEL = 1; + } + + void update_cloud() + { + if ((IS_ACTIVE)) + { + CLOUD_ORG = "game.tempent.origin"; + if ((UPDATE_VEL)) + { + ClientEffect("tempent", "set_current_prop", "angles", CUR_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", CUR_VEL); + UPDATE_VEL = 0; + } + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 0, 0)); + } + } + + void proj_explode() + { + IS_ACTIVE = 0; + ClientEffect("light", "new", CLOUD_ORG, 256, FX_COLOR, 2.0); + CYCLE_ANGLE = 0; + for (int i = 0; i < 17; i++) + { + create_explode_sprites(); + } + ScheduleDelayedEvent(1.5, "remove_fx"); + } + + void create_explode_sprites() + { + string SPR_POS = CLOUD_ORG; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 10, 0)); + ClientEffect("tempent", "sprite", FX_SPRITE, SPR_POS, "setup_explode_sprite", "update_explode_sprite"); + CYCLE_ANGLE += 20; + } + + void update_explode_sprite() + { + string CUR_SIZE = "game.tempent.fuser1"; + if (!(CUR_SIZE > 0.01)) return; + CUR_SIZE -= 0.01; + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + } + + void end_fx() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(3.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "origin", /* TODO: $getcl */ $getcl(FX_OWNER, "origin")); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 1); + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", CUR_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", CUR_VEL); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", 71); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 16); + ClientEffect("tempent", "set_current_prop", "sequence", 11); + } + + void spit_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "fadeout", 0.5); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(CUR_ANG, Vector3(Random(-120, 120), -200, 0))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_COLOR); + } + + void setup_explode_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string SPRITE_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 200, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", SPRITE_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "angles", CUR_ANG); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_COLOR); + ClientEffect("tempent", "set_current_prop", "fuser1", 1.0); + } + +} + +} diff --git a/scripts/angelscript/items/proj_elemental_guided.as b/scripts/angelscript/items/proj_elemental_guided.as new file mode 100644 index 00000000..f24e70cd --- /dev/null +++ b/scripts/angelscript/items/proj_elemental_guided.as @@ -0,0 +1,210 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjElementalGuided : CGameScript +{ + int ACQUIRE_MODE; + string CLOUD_SPRITE; + string CL_COLOR; + string CL_IDX; + string CL_SCRIPT; + int DID_LAND; + string ELEMENT_TYPE; + float FREQ_UPDATE; + int FWD_SPEED; + string GAME_PVP; + int IS_ACTIVE; + float MAX_DURATION; + string MODEL_HANDS; + string MODEL_WORLD; + string NPCATK_TARGET; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + string SOUND_EXPLODE; + string SOUND_LOOP; + int SOUND_VOL; + string TARG_ISPLAYER; + + ProjElementalGuided() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + PROJ_DAMAGE = 0; + PROJ_AOE_RANGE = 128; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_COLLIDEHITBOX = 1; + PROJ_MOTIONBLUR = 0; + FWD_SPEED = 200; + MAX_DURATION = 10.0; + } + + void arrow_spawn() + { + SetName("Elemental Cloud"); + SetDescription("This may explode"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0); + SetGroupable(25); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + } + + void game_tossprojectile() + { + LogDebug("game_tossprojectile"); + GAME_PVP = "game.pvp"; + ELEMENT_TYPE = GetEntityProperty("ent_expowner", "scriptvar"); + NPCATK_TARGET = GetEntityProperty("ent_expowner", "scriptvar"); + string L_ALT_SPEED = GetEntityProperty("ent_expowner", "scriptvar"); + if (L_ALT_SPEED > 0) + { + FWD_SPEED = L_ALT_SPEED; + } + string L_ALT_DURATION = GetEntityProperty("ent_expowner", "scriptvar"); + if (L_ALT_DURATION > 0) + { + MAX_DURATION = L_ALT_DURATION; + } + MAX_DURATION("end_projectile"); + TARG_ISPLAYER = IsValidPlayer(m_hAttackTarget); + SOUND_VOL = 5; + CLOUD_SPRITE = "3dmflagry.spr"; + FREQ_UPDATE = 0.5; + CL_SCRIPT = "items/proj_elemental_cl"; + if (ELEMENT_TYPE == "fire") + { + CL_COLOR = Vector3(255, 64, 0); + SOUND_LOOP = "magic/sps_fogfire.wav"; + SOUND_EXPLODE = "weapons/explode3.wav"; + } + else + { + if (ELEMENT_TYPE == "fire_jet") + { + CL_COLOR = Vector3(255, 128, 64); + SOUND_LOOP = "magic/sps_fogfire.wav"; + SOUND_EXPLODE = "weapons/explode3.wav"; + CLOUD_SPRITE = "xfireball3.spr"; + FREQ_UPDATE = 1.0; + CL_SCRIPT = "items/proj_flamejet_guided_cl"; + } + else + { + if (ELEMENT_TYPE == "cold") + { + CL_COLOR = Vector3(128, 128, 255); + SOUND_LOOP = "magic/cold_breath.wav"; + SOUND_EXPLODE = "magic/freeze.wav"; + } + else + { + if (ELEMENT_TYPE == "lightning") + { + CL_COLOR = Vector3(255, 255, 0); + SOUND_LOOP = "magic/bolt_loop.wav"; + SOUND_EXPLODE = "magic/lightning_strike2.wav"; + SOUND_VOL = 5; + } + else + { + if (ELEMENT_TYPE == "poison") + { + CL_COLOR = Vector3(0, 255, 0); + SOUND_LOOP = "magic/flame_loop.wav"; + SOUND_EXPLODE = "ambience/steamburst1.wav"; + SOUND_VOL = 5; + } + } + } + } + } + IS_ACTIVE = 1; + ACQUIRE_MODE = 1; + // svplaysound: svplaysound 2 SOUND_VOL SOUND_LOOP + EmitSound(2, SOUND_VOL, SOUND_LOOP); + ScheduleDelayedEvent(0.05, "cl_start"); + ScheduleDelayedEvent(0.1, "projectile_loop"); + } + + void cl_start() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner()), GetEntityAngles(GetOwner()), GetEntityVelocity(GetOwner()), CL_COLOR, MAX_DURATION, CLOUD_SPRITE); + CL_IDX = "game.script.last_sent_id"; + } + + void projectile_loop() + { + if (!(IS_ACTIVE)) return; + FREQ_UPDATE("projectile_loop"); + if (!(IsEntityAlive(m_hAttackTarget))) + { + ACQUIRE_MODE = 0; + } + string MY_ORG = GetEntityOrigin(GetOwner()); + if (!(IsEntityAlive(m_hAttackTarget))) + { + if (DRIFT_DIR == 0) + { + int L_HOFS = -50; + DRIFT_DIR = 1; + } + else + { + int L_HOFS = 50; + DRIFT_DIR = 0; + } + string TARG_ORG = MY_ORG; + string MY_ANG = GetEntityAngles(GetOwner()); + TARG_ORG += /* TODO: $relpos */ $relpos(MY_ANG, Vector3(DRIFT_DIR, FWD_SPEED, 0)); + } + else + { + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (!(TARG_ISPLAYER)) + { + TARG_ORG += "z"; + } + } + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(MY_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, FWD_SPEED, 0))); + SetProp(GetOwner(), "movedir", ANG_TO_TARG); + ClientEvent("update", "all", CL_IDX, "sv_update_vel", GetEntityAngles(GetOwner()), GetEntityVelocity(GetOwner()), GetEntityOrigin(GetOwner())); + } + + void game_projectile_landed() + { + DID_LAND = 1; + end_projectile(); + } + + void end_projectile() + { + IS_ACTIVE = 0; + // svplaysound: svplaysound 2 0 SOUND_LOOP + EmitSound(2, 0, SOUND_LOOP); + ClientEvent("update", "all", CL_IDX, "proj_explode"); + EmitSound(GetOwner(), 0, SOUND_EXPLODE, 10); + CallExternal("ent_expowner", "ext_proj_elemental_hit", GetEntityOrigin(GetOwner()), ELEMENT_TYPE); + } + +} + +} diff --git a/scripts/angelscript/items/proj_fire_ball.as b/scripts/angelscript/items/proj_fire_ball.as new file mode 100644 index 00000000..6a01b423 --- /dev/null +++ b/scripts/angelscript/items/proj_fire_ball.as @@ -0,0 +1,110 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjFireBall : CGameScript +{ + string ITEM_NAME; + string LOCK_BURN_DAMAGE; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_OWNER; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + string SCRIPT_1; + string SCRIPT_1_ID; + string SOUND_BURN; + string SPRITE_BURN; + string SPRITE_FIRE; + + ProjFireBall() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + SOUND_BURN = "items/torch1.wav"; + SPRITE_FIRE = "3dmflaora.spr"; + SPRITE_BURN = "fire1_fixed.spr"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_DAMAGESTAT = "spellcasting"; + PROJ_DAMAGE = RandomInt(75, 200); + PROJ_AOE_RANGE = 250; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_COLLIDEHITBOX = 64; + Precache(SPRITE_BURN); + SCRIPT_1 = "items/proj_fire_dart_cl"; + Precache(SCRIPT_1); + Precache("rjet1.spr"); + Precache(MODEL_WORLD); + } + + void projectile_spawn() + { + SetName("Fireball"); + SetWeight(500); + SetSize(10); + SetValue(5); + SetGravity(0.7); + SetMonsterClip(0); + SetModelBody(0, 0); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + Effect("glow", GetOwner(), Vector3(255, 75, 0), 128, 1, 1); + } + + void game_tossprojectile() + { + SCRIPT_1_ID = "game.script.last_sent_id"; + } + + void projectile_landed() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 50, 20, DURATION, 256); + if ((GetEntityProperty("ent_expowner", "scriptvar"))) return; + Effect("tempent", "trail", "rjet1.spr", /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 10), 10, 2, 5, 10, 20); + } + + void game_hitnpc() + { + MY_OWNER = GetEntityIndex("ent_expowner"); + if (LOCK_BURN_DAMAGE == "LOCK_BURN_DAMAGE") + { + string BURN_DAMAGE = GetSkillLevel("ent_expowner", "spellcasting.fire"); + BURN_DAMAGE *= 0.25; + if (!(IsValidPlayer(MY_OWNER))) + { + int BURN_DAMAGE = 10; + } + } + if (LOCK_BURN_DAMAGE != "LOCK_BURN_DAMAGE") + { + string BURN_DAMAGE = LOCK_BURN_DAMAGE; + } + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 5, MY_OWNER, BURN_DAMAGE, "spellcasting.fire"); + } + + void lighten() + { + if ((param2).findFirst("PARAM") == 0) + { + float PARAM2 = 0.4; + } + SetGravity(param2); + LOCK_BURN_DAMAGE = param1; + } + +} + +} diff --git a/scripts/angelscript/items/proj_fire_ball2.as b/scripts/angelscript/items/proj_fire_ball2.as new file mode 100644 index 00000000..f132b939 --- /dev/null +++ b/scripts/angelscript/items/proj_fire_ball2.as @@ -0,0 +1,130 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjFireBall2 : CGameScript +{ + int ARROW_BODY_OFS; + string FB_SCRIPT_INDEX; + string ITEM_NAME; + string LOCK_BURN_DAMAGE; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_OWNER; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + string SCRIPT_1; + string SOUND_BURN; + string SOUND_LOOP; + int SOUND_ON; + string SOUND_START; + string SPRITE_BURN; + string SPRITE_FIRE; + + ProjFireBall2() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + SOUND_BURN = "items/torch1.wav"; + SPRITE_FIRE = "3dmflaora.spr"; + SPRITE_BURN = "fire1_fixed.spr"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_DAMAGESTAT = "spellcasting"; + ARROW_BODY_OFS = 4; + PROJ_DAMAGE = RandomInt(400, 500); + PROJ_AOE_RANGE = 250; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_COLLIDEHITBOX = 64; + SOUND_START = "magic/volcano_start.wav"; + SOUND_LOOP = "magic/volcano_loop.wav"; + Precache(SPRITE_BURN); + SCRIPT_1 = "items/proj_fire_dart_cl"; + Precache(SCRIPT_1); + Precache("rjet1.spr"); + Precache(MODEL_WORLD); + } + + void arrow_spawn() + { + SetName("Meteor"); + SetWeight(500); + SetSize(10); + SetValue(5); + SetGravity(0.0); + SetMonsterClip(0); + SetModelBody(0, 0); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + Effect("glow", GetOwner(), Vector3(255, 75, 0), 128, 5, 5); + ScheduleDelayedEvent(0.1, "pulsate_loop"); + } + + void pulsate_loop() + { + SetProp(GetOwner(), "rendermode", 5); + int PULSE_VALUE = RandomInt(100, 255); + SetProp(GetOwner(), "renderamt", PULSE_VALUE); + ScheduleDelayedEvent(0.1, "pulsate_loop"); + } + + void game_tossprojectile() + { + EmitSound(GetOwner(), 0, SOUND_START, 10); + SOUND_ON = 1; + ScheduleDelayedEvent(1.0, "loop_sound"); + ClientEvent("new", "all_in_sight", SCRIPT_1, GetEntityIndex(GetOwner())); + FB_SCRIPT_INDEX = "game.script.last_sent_id"; + } + + void loop_sound() + { + if (!(SOUND_ON)) return; + EmitSound(GetOwner(), CHAN_BODY, SOUND_LOOP, 7); + ScheduleDelayedEvent(6.0, "loop_sound"); + } + + void projectile_landed() + { + SOUND_ON = 0; + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 50, 20, DURATION, 256); + Effect("tempent", "trail", "rjet1.spr", /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 10), 20, 2, 9, 10, 20); + ClientEvent("remove", "all", FB_SCRIPT_INDEX); + } + + void game_hitnpc() + { + MY_OWNER = GetEntityIndex("ent_expowner"); + if (LOCK_BURN_DAMAGE == "LOCK_BURN_DAMAGE") + { + string BURN_DAMAGE = GetSkillLevel("ent_expowner", "spellcasting.fire"); + BURN_DAMAGE *= 0.4; + } + if (LOCK_BURN_DAMAGE != "LOCK_BURN_DAMAGE") + { + string BURN_DAMAGE = LOCK_BURN_DAMAGE; + } + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 20, MY_OWNER, BURN_DAMAGE, "spellcasting.fire"); + } + + void lighten() + { + LOCK_BURN_DAMAGE = param1; + } + +} + +} diff --git a/scripts/angelscript/items/proj_fire_bolt.as b/scripts/angelscript/items/proj_fire_bolt.as new file mode 100644 index 00000000..d35e57e6 --- /dev/null +++ b/scripts/angelscript/items/proj_fire_bolt.as @@ -0,0 +1,93 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjFireBolt : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_EXPLODE; + string SOUND_LAUNCH; + + ProjFireBolt() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 40; + ARROW_BODY_OFS = 40; + SOUND_EXPLODE = "weapons/explode3.wav"; + SOUND_EXPLODE = "weapons/explode3.wav"; + SOUND_BURN = "magic/ice_powerup.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 50; + PROJ_AOE_RANGE = 80; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + SOUND_LAUNCH = "weapons/rocketfire1.wav"; + SOUND_EXPLODE = "weapons/explode3.wav"; + } + + void arrow_spawn() + { + SetName("Fire Bolt"); + SetDescription("A bolt of fire"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0); + SetGroupable(25); + EmitSound(GetOwner(), 0, SOUND_LAUNCH, 10); + } + + void game_dodamage() + { + string MY_OWNER = GetEntityIndex("ent_expowner"); + string OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + string ENT_HIT = GetEntityIndex(param2); + if (OWNER_ISPLAYER == 1) + { + if (!("game.pvp")) + { + } + if ((IsValidPlayer(ENT_HIT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + if (GetEntityHealth(ENT_HIT) < 1000) + { + AddVelocity(ENT_HIT, /* TODO: $relvel */ $relvel(-10, 400, 30)); + } + EmitSound(GetOwner(), 0, SOUND_EXPLODE, 10); + } + +} + +} diff --git a/scripts/angelscript/items/proj_fire_bomb.as b/scripts/angelscript/items/proj_fire_bomb.as new file mode 100644 index 00000000..28c88c2e --- /dev/null +++ b/scripts/angelscript/items/proj_fire_bomb.as @@ -0,0 +1,90 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjFireBomb : CGameScript +{ + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + + ProjFireBomb() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 41; + PROJ_ANIM_IDLE = "axis_spin"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 100; + PROJ_AOE_RANGE = 200; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_IGNORENPC = 1; + } + + void projectile_spawn() + { + SetName("Meteor"); + SetWeight(500); + SetSize(10); + SetValue(5); + SetGravity(0.4); + SetGroupable(25); + SetProp(GetOwner(), "scale", 0.5); + string L_SCALE = GetEntityProperty("ent_expowner", "scriptvar"); + if (L_SCALE > 0) + { + SetProp(GetOwner(), "scale", L_SCALE); + } + PlayAnim("once", PROJ_ANIM_IDLE); + SetIdleAnim(PROJ_ANIM_IDLE); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + } + + void game_tossprojectile() + { + string L_SCALE = GetEntityProperty("ent_expowner", "scriptvar"); + if (L_SCALE > 0) + { + SetProp(GetOwner(), "scale", L_SCALE); + } + PlayAnim("critical", PROJ_ANIM_IDLE); + // svplaysound: svplaysound 2 10 ambience/alienflyby1.wav + EmitSound(2, 10, "ambience/alienflyby1.wav"); + } + + void projectile_landed() + { + EmitSound(GetOwner(), 0, "weapons/mortarhit.wav", 10); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 100, 5, 3, 500); + string SPLOOSH_POINT = GetEntityOrigin(GetOwner()); + string L_AOE = GetEntityProperty("ent_expowner", "scriptvar"); + if (L_AOE == 0) + { + int L_AOE = 256; + } + ClientEvent("new", "all", "items/proj_arrow_phx_cl", SPLOOSH_POINT, L_AOE); + CallExternal("ent_expowner", "ext_fire_bomb", GetEntityOrigin(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/items/proj_fire_bomb_sm.as b/scripts/angelscript/items/proj_fire_bomb_sm.as new file mode 100644 index 00000000..caa76643 --- /dev/null +++ b/scripts/angelscript/items/proj_fire_bomb_sm.as @@ -0,0 +1,146 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjFireBombSm : CGameScript +{ + int IN_FLIGHT; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + string PROJ_LOOP_SOUND; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + string PROJ_TARGET; + string TARG_HALF_HEIGHT; + int WIGGLE_COUNT; + int WIGGLE_DIR; + + ProjFireBombSm() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 41; + PROJ_ANIM_IDLE = "axis_spin"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 100; + PROJ_AOE_RANGE = 200; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_IGNORENPC = 1; + } + + void projectile_spawn() + { + SetName("Meteor"); + SetWeight(500); + SetSize(10); + SetValue(5); + SetGravity(0); + SetGroupable(25); + SetProp(GetOwner(), "scale", 0.1); + string L_SCALE = GetEntityProperty("ent_expowner", "scriptvar"); + if (L_SCALE > 0) + { + SetProp(GetOwner(), "scale", L_SCALE); + } + PlayAnim("once", PROJ_ANIM_IDLE); + SetIdleAnim(PROJ_ANIM_IDLE); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + } + + void game_tossprojectile() + { + string L_SCALE = GetEntityProperty("ent_expowner", "scriptvar"); + if (L_SCALE > 0) + { + SetProp(GetOwner(), "scale", L_SCALE); + } + PlayAnim("critical", PROJ_ANIM_IDLE); + PROJ_LOOP_SOUND = GetEntityProperty("ent_expowner", "scriptvar"); + if (PROJ_LOOP_SOUND == "PROJ_LOOP_SOUND") + { + PROJ_LOOP_SOUND = "ambience/alienflyby1.wav"; + } + // svplaysound: svplaysound 2 10 PROJ_LOOP_SOUND + EmitSound(2, 10, PROJ_LOOP_SOUND); + IN_FLIGHT = 1; + PROJ_TARGET = GetEntityProperty("ent_expowner", "scriptvar"); + WIGGLE_DIR = 1; + WIGGLE_COUNT = 0; + if (!(IsValidPlayer(PROJ_TARGET))) + { + TARG_HALF_HEIGHT = GetEntityHeight(PROJ_TARGET); + TARG_HALF_HEIGHT *= 0.5; + } + else + { + TARG_HALF_HEIGHT = 0; + } + ScheduleDelayedEvent(0.1, "wiggle_loop"); + } + + void wiggle_loop() + { + if (!(IN_FLIGHT)) return; + ScheduleDelayedEvent(0.1, "wiggle_loop"); + if ((IsEntityAlive(PROJ_TARGET))) + { + string TARG_ORG = GetEntityOrigin(PROJ_TARGET); + TARG_ORG = "z"; + string MY_ORG = GetEntityOrigin(GetOwner()); + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(MY_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, 300, 0))); + SetProp(GetOwner(), "movedir", ANG_TO_TARG); + } + string L_MY_ANG = GetEntityProperty(GetOwner(), "movedir"); + L_MY_ANG += "y"; + WIGGLE_COUNT += WIGGLE_DIR; + if (WIGGLE_COUNT > 20) + { + WIGGLE_DIR = -1; + } + if (WIGGLE_COUNT < -20) + { + WIGGLE_DIR = 1; + } + SetProp(GetOwner(), "movedir", WIGGLE_DIR); + } + + void projectile_landed() + { + IN_FLIGHT = 0; + EmitSound(GetOwner(), 0, "ambience/steamburst1.wav", 10); + // svplaysound: svplaysound 2 0 PROJ_LOOP_SOUND + EmitSound(2, 0, PROJ_LOOP_SOUND); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 100, 5, 3, 500); + string SPLOOSH_POINT = GetEntityOrigin(GetOwner()); + string L_AOE = GetEntityProperty("ent_expowner", "scriptvar"); + if (L_AOE == 0) + { + int L_AOE = 256; + } + ClientEvent("new", "all", "items/proj_arrow_phx_cl", SPLOOSH_POINT, L_AOE); + CallExternal("ent_expowner", "ext_fire_bomb", GetEntityOrigin(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/items/proj_fire_dart.as b/scripts/angelscript/items/proj_fire_dart.as new file mode 100644 index 00000000..6f173535 --- /dev/null +++ b/scripts/angelscript/items/proj_fire_dart.as @@ -0,0 +1,85 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjFireDart : CGameScript +{ + float BURN_DAMAGE; + string CL_SCRIPT; + string CL_SCRIPT_ID; + string ITEM_NAME; + string MODEL_HANDS; + string MODEL_WORLD; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SPRITE_BURN; + string SPRITE_FIRE; + + ProjFireDart() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + SOUND_HITWALL1 = "weapons/bow/arrowhit1.wav"; + SOUND_HITWALL2 = "weapons/bow/arrowhit1.wav"; + SOUND_BURN = "items/torch1.wav"; + SPRITE_FIRE = "3dmflaora.spr"; + SPRITE_BURN = "fire1_fixed.spr"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_DAMAGESTAT = "spellcasting"; + PROJ_DAMAGE = RandomInt(55, 85); + PROJ_AOE_RANGE = 75; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + BURN_DAMAGE = Random(0.5, 1.5); + Precache(SPRITE_BURN); + CL_SCRIPT = "items/proj_fire_dart_cl"; + Precache(CL_SCRIPT); + } + + void projectile_spawn() + { + SetName("Fireball"); + SetWeight(500); + SetSize(1); + SetValue(5); + SetGravity(0.7); + SetGroupable(25); + SetModelBody(0, 0); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + Effect("glow", GetOwner(), Vector3(255, 75, 0), 128, 1, 1); + } + + void game_tossprojectile() + { + CL_SCRIPT_ID = "game.script.last_sent_id"; + } + + void projectile_landed() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 50, 20, DURATION, 256); + } + + void game_hitnpc() + { + string MY_OWNER = GetEntityIndex("ent_expowner"); + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 5, MY_OWNER, BURN_DAMAGE, "spellcasting.fire"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_fire_dart_cl.as b/scripts/angelscript/items/proj_fire_dart_cl.as new file mode 100644 index 00000000..2ca21b4c --- /dev/null +++ b/scripts/angelscript/items/proj_fire_dart_cl.as @@ -0,0 +1,102 @@ +#pragma context server + +namespace MS +{ + +class ProjFireDartCl : CGameScript +{ + float GLOW_DURATION; + string LIGHT_COLOR; + int LIGHT_RADIUS; + int OFS_NEG; + int OFS_POS; + int SPD_NEG; + int SPD_POS; + string SPRITE_1; + int script.duration; + string script.lightid; + string script.modelid; + + ProjFireDartCl() + { + SPRITE_1 = "3dmflaora.spr"; + GLOW_DURATION = "$randf(1,2)"; + Precache(SPRITE_1); + OFS_POS = 15; + OFS_NEG = -15; + SPD_POS = 60; + SPD_NEG = -60; + LIGHT_RADIUS = 128; + LIGHT_COLOR = Vector3(255, 32, 32); + SetCallback("render", "enable"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.15, 0.25)); + string l.pos = /* TODO: $getcl */ $getcl(script.modelid, "origin"); + make_sprite_1(l.pos); + make_sprite_1(l.pos); + make_sprite_1(l.pos); + if (!(/* TODO: $getcl */ $getcl(script.modelid, "exists"))) + { + effect_die(); + } + } + + void client_activate() + { + script.modelid = param1; + script.duration = 30; + if ((/* TODO: $getcl */ $getcl(script.modelid, "exists"))) + { + script_duration("effect_die"); + create_light(/* TODO: $getcl */ $getcl(script.modelid, "origin")); + } + else + { + effect_die(); + } + } + + void effect_die() + { + } + + void make_sprite_1() + { + string l.pos = param1; + l.pos += Vector3(Random(OFS_NEG, OFS_POS), Random(OFS_NEG, OFS_POS), Random(OFS_NEG, OFS_POS)); + ClientEffect("tempent", "sprite", SPRITE_1, l.pos, "setup_sprite_1"); + } + + void setup_sprite_1() + { + ClientEffect("tempent", "set_current_prop", "death_delay", GLOW_DURATION); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.2, 0.1)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, Random(0, 5))); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("tempent", "set_current_prop", "rendermodel", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", Random(128, 200)); + } + + void create_light() + { + if (!(param1 != "0")) return; + ClientEffect("light", "new", param1, LIGHT_RADIUS, LIGHT_COLOR, script.duration); + script.lightid = "game.script.last_light_id"; + } + + void game_prerender() + { + if (!(LIGHT_RADIUS > 0)) return; + string l.radius = LIGHT_RADIUS; + l.radius += Random(-8, 8); + ClientEffect("light", script.lightid, /* TODO: $getcl */ $getcl(script.modelid, "origin"), l.radius, LIGHT_COLOR, 1); + } + +} + +} diff --git a/scripts/angelscript/items/proj_fire_xolt.as b/scripts/angelscript/items/proj_fire_xolt.as new file mode 100644 index 00000000..5dc524ca --- /dev/null +++ b/scripts/angelscript/items/proj_fire_xolt.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "items/proj_arrow_base.as" +#include "items/proj_guided_base.as" + +namespace MS +{ + +class ProjFireXolt : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_EXPLODE1; + string SOUND_EXPLODE2; + string SOUND_EXPLODE3; + + ProjFireXolt() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 40; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 0; + PROJ_DAMAGE_TYPE = "siege"; + PROJ_DAMAGE = RandomInt(400, 500); + PROJ_AOE_RANGE = 64; + PROJ_AOE_FALLOFF = 1; + PROJ_MOTIONBLUR = 0; + SOUND_EXPLODE1 = "weapons/explode3.wav"; + SOUND_EXPLODE2 = "weapons/explode4.wav"; + SOUND_EXPLODE3 = "weapons/explode5.wav"; + } + + void arrow_spawn() + { + SetName("Fire Bolt"); + SetDescription("A bolt of fire"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0); + SetGroupable(25); + EmitSound(GetOwner(), 0, "weapons/rocketfire1.wav", 10); + } + + void projectile_landed() + { + // PlayRandomSound from: SOUND_EXPLODE1, SOUND_EXPLODE2, SOUND_EXPLODE3 + array sounds = {SOUND_EXPLODE1, SOUND_EXPLODE2, SOUND_EXPLODE3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DeleteEntity(GetOwner()); + } + + void game_dodamage() + { + if (!(param1)) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(-50, 300, 120)); + } + +} + +} diff --git a/scripts/angelscript/items/proj_flame_jet.as b/scripts/angelscript/items/proj_flame_jet.as new file mode 100644 index 00000000..9eb7aa56 --- /dev/null +++ b/scripts/angelscript/items/proj_flame_jet.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjFlameJet : CGameScript +{ + int ARROW_BODY_OFS; + int ARROW_SOLIDIFY_ON_WALL; + string DMG_AMT; + string DOT_AMT; + float FREQ_SCAN; + string GAME_PVP; + int HITWALL_VOL; + int IS_ACTIVE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_CL_IDX; + string NEXT_SCAN; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + int SCAN_RANGE; + string TARGET_LIST; + string USE_SKILL; + + ProjFlameJet() + { + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 1; + PROJ_ANIM_IDLE = "idle_iceball"; + ARROW_SOLIDIFY_ON_WALL = 0; + HITWALL_VOL = 2; + PROJ_MOTIONBLUR = 0; + MODEL_BODY_OFS = 1; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_DAMAGE_AOE_RANGE = 0; + PROJ_DAMAGE_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_COLLIDEHITBOX = 1; + PROJ_IGNORENPC = 1; + PROJ_ANIM_IDLE = "none"; + SCAN_RANGE = 64; + FREQ_SCAN = 0.5; + } + + void arrow_spawn() + { + SetName("Jet of Flame"); + SetDescription("A streaming jet of flames"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renaderamt", 0); + // svplaysound: svplaysound 1 10 monsters/goblin/sps_fogfire.wav + EmitSound(1, 10, "monsters/goblin/sps_fogfire.wav"); + GAME_PVP = "game.pvp"; + } + + void game_fall() + { + } + + void game_projectile_hitnpc() + { + if (!(IsEntityAlive(param1))) return; + if (!(GetRelationship(param1) == "enemy")) return; + ApplyEffect(param1, "effects/dot_fire", 5.0, GetEntityIndex("ent_expowner"), DOT_AMT); + } + + void game_projectile_landed() + { + remove_me(); + } + + void game_projectile_hitwall() + { + remove_me(); + remove_me(); + } + + void game_tossprojectile() + { + ScheduleDelayedEvent(10.0, "remove_me"); + if (!(true)) return; + DMG_AMT = GetEntityProperty("ent_expowner", "scriptvar"); + DOT_AMT = GetEntityProperty("ent_expowner", "scriptvar"); + USE_SKILL = GetEntityProperty("ent_expowner", "scriptvar"); + if (!(IsValidPlayer("ent_expowner"))) + { + USE_SKILL = "none"; + } + IS_ACTIVE = 1; + ClientEvent("new", "all", "items/proj_flame_jet_cl", GetEntityIndex(GetOwner()), "xfireball3.spr"); + MY_CL_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.01, "damage_area"); + } + + void damage_area() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "damage_area"); + LogDebug("damage_area DMG_AMT"); + XDoDamage(GetEntityOrigin(GetOwner()), 128, DMG_AMT, 0, "ent_expowner", "ent_expowner", USE_SKILL, "fire"); + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = FREQ_SCAN; + NEXT_SCAN += FREQ_SCAN; + TARGET_LIST = FindEntitiesInSphere("any", 64); + } + + void affect_targets() + { + string CUR_TARGET = GetToken(TARGET_LIST, i, ";"); + if (!(GetRelationship(CUR_TARGET) == "enemy")) return; + ApplyEffect(CUR_TARGET, "effects/dot_fire", 5.0, GetEntityIndex("ent_expowner"), DOT_AMT); + } + + void remove_me() + { + if ((true)) + { + if (!(IsValidPlayer("ent_expowner"))) + { + CallExternal("ent_expowner", "ext_spiral_done"); + } + ClientEvent("update", "all", MY_CL_IDX, "end_fx"); + EmitSound(GetOwner(), 1, "monsters/goblin/sps_fogfire.wav", 0); + IS_ACTIVE = 0; + DeleteEntity(GetOwner()); + } + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/proj_flame_jet2.as b/scripts/angelscript/items/proj_flame_jet2.as new file mode 100644 index 00000000..f142e94b --- /dev/null +++ b/scripts/angelscript/items/proj_flame_jet2.as @@ -0,0 +1,141 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjFlameJet2 : CGameScript +{ + int ARROW_BODY_OFS; + int ARROW_SOLIDIFY_ON_WALL; + string DMG_AMT; + string DOT_AMT; + float FREQ_SCAN; + string GAME_PVP; + int HITWALL_VOL; + int IS_ACTIVE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_CL_IDX; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + int SCAN_RANGE; + string USE_SKILL; + + ProjFlameJet2() + { + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 1; + PROJ_ANIM_IDLE = "idle_iceball"; + ARROW_SOLIDIFY_ON_WALL = 0; + HITWALL_VOL = 2; + PROJ_MOTIONBLUR = 0; + MODEL_BODY_OFS = 1; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_DAMAGE_AOE_RANGE = 0; + PROJ_DAMAGE_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_COLLIDEHITBOX = 1; + PROJ_IGNORENPC = 1; + PROJ_ANIM_IDLE = "none"; + SCAN_RANGE = 64; + FREQ_SCAN = 0.5; + } + + void arrow_spawn() + { + SetName("Jet of Flame"); + SetDescription("A streaming jet of flames"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renaderamt", 0); + // svplaysound: svplaysound 1 10 monsters/goblin/sps_fogfire.wav + EmitSound(1, 10, "monsters/goblin/sps_fogfire.wav"); + GAME_PVP = "game.pvp"; + } + + void game_fall() + { + } + + void game_projectile_hitnpc() + { + if (!(IsEntityAlive(param1))) return; + if (!(GetRelationship(param1) == "enemy")) return; + ApplyEffect(param1, "effects/dot_fire", 5.0, GetEntityIndex("ent_expowner"), DOT_AMT); + } + + void game_projectile_landed() + { + remove_me(); + } + + void game_projectile_hitwall() + { + remove_me(); + remove_me(); + } + + void game_tossprojectile() + { + ScheduleDelayedEvent(10.0, "remove_me"); + if (!(true)) return; + DMG_AMT = GetEntityProperty("ent_expowner", "scriptvar"); + DOT_AMT = GetEntityProperty("ent_expowner", "scriptvar"); + USE_SKILL = GetEntityProperty("ent_expowner", "scriptvar"); + if (!(IsValidPlayer("ent_expowner"))) + { + USE_SKILL = "none"; + } + IS_ACTIVE = 1; + ClientEvent("new", "all", "items/proj_flame_jet_cl", GetEntityIndex(GetOwner()), "xfireball3.spr"); + MY_CL_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.01, "damage_area"); + } + + void damage_area() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "damage_area"); + LogDebug("damage_area DMG_AMT"); + XDoDamage(GetEntityOrigin(GetOwner()), 96, DMG_AMT, 0.2, "ent_expowner", "ent_expowner", USE_SKILL, "fire", "dmgevent:flamejet"); + } + + void remove_me() + { + if ((true)) + { + if (!(IsValidPlayer("ent_expowner"))) + { + CallExternal("ent_expowner", "ext_spiral_done"); + } + ClientEvent("update", "all", MY_CL_IDX, "end_fx"); + // svplaysound: svplaysound 1 0 monsters/goblin/sps_fogfire.wav + EmitSound(1, 0, "monsters/goblin/sps_fogfire.wav"); + IS_ACTIVE = 0; + DeleteEntity(GetOwner()); + } + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/proj_flame_jet_cl.as b/scripts/angelscript/items/proj_flame_jet_cl.as new file mode 100644 index 00000000..b27c184a --- /dev/null +++ b/scripts/angelscript/items/proj_flame_jet_cl.as @@ -0,0 +1,78 @@ +#pragma context client + +namespace MS +{ + +class ProjFlameJetCl : CGameScript +{ + string CL_LIGHT_ID; + int FX_ACTIVE; + string GLOW_COLOR; + int GLOW_RAD; + float MAX_DURATION; + string MY_OWNER; + string PASS_SPRITE; + int ROT_COUNT; + + ProjFlameJetCl() + { + GLOW_RAD = 96; + GLOW_COLOR = Vector3(255, 128, 64); + MAX_DURATION = 10.0; + } + + void client_activate() + { + SetCallback("render", "enable"); + MY_OWNER = param1; + PASS_SPRITE = param2; + FX_ACTIVE = 1; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 0.25); + CL_LIGHT_ID = "game.script.last_light_id"; + ROT_COUNT = 0; + fx_loop(); + MAX_DURATION("end_fx"); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.05, "fx_loop"); + string SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + ClientEffect("tempent", "sprite", PASS_SPRITE, SPRITE_POS, "setup_sprite"); + } + + void end_fx() + { + if (!(FX_ACTIVE)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + string L_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + if (!(/* TODO: $getcl */ $getcl(MY_OWNER, "exists"))) return; + ClientEffect("light", CL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 0.25); + } + + void setup_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 19); + } + +} + +} diff --git a/scripts/angelscript/items/proj_flamejet_guided_cl.as b/scripts/angelscript/items/proj_flamejet_guided_cl.as new file mode 100644 index 00000000..494becf5 --- /dev/null +++ b/scripts/angelscript/items/proj_flamejet_guided_cl.as @@ -0,0 +1,134 @@ +#pragma context server + +namespace MS +{ + +class ProjFlamejetGuidedCl : CGameScript +{ + string CLOUD_ORG; + string CUR_ANG; + string CUR_ORG; + string CUR_VEL; + string FX_COLOR; + string FX_DURATION; + string FX_OWNER; + string FX_SPRITE; + int IS_ACTIVE; + string PROJ_LIGHT_ID; + int UPDATE_VEL; + + void client_activate() + { + FX_OWNER = param1; + CUR_ANG = param2; + CUR_VEL = param3; + FX_COLOR = param4; + FX_DURATION = param5; + FX_SPRITE = param6; + CUR_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SetCallback("render", "enable"); + IS_ACTIVE = 1; + CLOUD_ORG = CUR_ORG; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", CUR_ORG, "setup_cloud", "update_cloud"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), 128, FX_COLOR, 5.0); + PROJ_LIGHT_ID = "game.script.last_light_id"; + LogDebug("*** proj_flamejet_guided_cl FX_SPRITE"); + string L_FAILSAFE_DURATION = FX_DURATION; + L_FAILSAFE_DURATION *= 1.5; + L_FAILSAFE_DURATION("end_fx"); + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(FX_OWNER, "exists"))) return; + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + ClientEffect("light", PROJ_LIGHT_ID, L_POS, 128, FX_COLOR, 1.0); + } + + void sv_update_vel() + { + CUR_ANG = param1; + CUR_VEL = param2; + CUR_ORG = param3; + UPDATE_VEL = 1; + } + + void update_cloud() + { + if ((IS_ACTIVE)) + { + CLOUD_ORG = "game.tempent.origin"; + LogDebug("update_cloud FX_SPRITE CLOUD_ORG"); + if ((UPDATE_VEL)) + { + ClientEffect("tempent", "set_current_prop", "angles", CUR_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", CUR_VEL); + UPDATE_VEL = 0; + } + ClientEffect("tempent", "sprite", FX_SPRITE, CLOUD_ORG, "spit_flames", "update_flames"); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 0, 0)); + } + } + + void proj_explode() + { + IS_ACTIVE = 0; + ClientEffect("light", "new", CLOUD_ORG, 256, FX_COLOR, 2.0); + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void end_fx() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(3.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "origin", /* TODO: $getcl */ $getcl(FX_OWNER, "origin")); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 1); + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", CUR_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", CUR_VEL); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", 71); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 16); + ClientEffect("tempent", "set_current_prop", "sequence", 11); + } + + void spit_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "fuser1", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 19); + } + + void update_flames() + { + string CUR_SCALE = "game.tempent.scale"; + CUR_SCALE -= 0.1; + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + } + +} + +} diff --git a/scripts/angelscript/items/proj_freezing_sphere.as b/scripts/angelscript/items/proj_freezing_sphere.as new file mode 100644 index 00000000..bc74adf5 --- /dev/null +++ b/scripts/angelscript/items/proj_freezing_sphere.as @@ -0,0 +1,152 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjFreezingSphere : CGameScript +{ + int ARROW_BODY_OFS; + int ARROW_SOLIDIFY_ON_WALL; + string FREEZE_DMG; + string FREEZE_DUR; + string GAME_PVP; + int HITWALL_VOL; + int IS_ACTIVE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + int SCAN_RANGE; + string SOUND_LOOP; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + string TARGET_LIST; + + ProjFreezingSphere() + { + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 1; + PROJ_ANIM_IDLE = "idle_iceball"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart14.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + SOUND_LOOP = "ambience/pulsemachine.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + HITWALL_VOL = 2; + PROJ_MOTIONBLUR = 0; + MODEL_BODY_OFS = 1; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_DAMAGE_AOE_RANGE = 0; + PROJ_DAMAGE_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_COLLIDEHITBOX = 1; + PROJ_IGNORENPC = 1; + PROJ_ANIM_IDLE = "none"; + SCAN_RANGE = 96; + } + + void arrow_spawn() + { + SetName("Freezing Sphere"); + SetDescription("A large ball of freezing magiks"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 1); + ScheduleDelayedEvent(10.0, "remove_me"); + GAME_PVP = "game.pvp"; + } + + void game_fall() + { + } + + void game_projectile_hitnpc() + { + } + + void game_projectile_landed() + { + remove_me(); + } + + void game_projectile_hitwall() + { + remove_me(); + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + remove_me(); + } + + void game_tossprojectile() + { + ScheduleDelayedEvent(10.0, "remove_me"); + if (!(true)) return; + FREEZE_DMG = GetEntityProperty("ent_expowner", "scriptvar"); + FREEZE_DUR = GetEntityProperty("ent_expowner", "scriptvar"); + // svplaysound: svplaysound 2 10 SOUND_LOOP + EmitSound(2, 10, SOUND_LOOP); + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.01, "scan_targets"); + } + + void scan_targets() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.2, "scan_targets"); + TARGET_LIST = FindEntitiesInSphere("any", SCAN_RANGE); + if (!(TARGET_LIST != "none")) return; + string N_TARGETS = GetTokenCount(TARGET_LIST, ";"); + if (!(GetTokenCount(MY_ORG, ";") > 0)) return; + if (!(N_TARGETS > 0)) return; + for (int i = 0; i < N_TARGETS; i++) + { + affect_targets(); + } + } + + void affect_targets() + { + string CUR_TARGET = GetToken(TARGET_LIST, i, ";"); + if (!(GetRelationship(CUR_TARGET) == "enemy")) return; + if ((GetEntityProperty(CUR_TARGET, "scriptvar"))) return; + ApplyEffect(CUR_TARGET, "effects/dot_cold_freeze", FREEZE_DUR, GetEntityIndex("ent_expowner"), FREEZE_DMG); + } + + void remove_me() + { + if ((true)) + { + if (!(IsValidPlayer("ent_expowner"))) + { + CallExternal("ent_expowner", "ext_ball_done"); + } + // svplaysound: svplaysound 2 0 SOUND_LOOP + EmitSound(2, 0, SOUND_LOOP); + IS_ACTIVE = 0; + DeleteEntity(GetOwner()); + } + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/proj_gdragon_spit.as b/scripts/angelscript/items/proj_gdragon_spit.as new file mode 100644 index 00000000..10315097 --- /dev/null +++ b/scripts/angelscript/items/proj_gdragon_spit.as @@ -0,0 +1,83 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjGdragonSpit : CGameScript +{ + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string NEXT_DAMAGE; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + + ProjGdragonSpit() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 68; + PROJ_ANIM_IDLE = "spin_vertical_fast"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "acid_effect"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 100; + PROJ_AOE_RANGE = 256; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_IGNORENPC = 1; + } + + void projectile_spawn() + { + SetName("Acid Glob"); + SetWeight(500); + SetSize(10); + SetValue(0); + SetGravity(0); + SetGroupable(25); + PlayAnim("once", "spin_vertical_fast"); + SetIdleAnim("spin_vertical_fast"); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + } + + void game_tossprojectile() + { + // TODO: projectiletouch 1 + PlayAnim("critical", "spin_vertical_fast"); + ClientEvent("new", "all", "items/proj_slime_jet_cl", GetEntityIndex(GetOwner()), "xfireball3.spr", 5.0, 3.0); + // svplaysound: svplaysound 2 10 ambience/alienflyby1.wav + EmitSound(2, 10, "ambience/alienflyby1.wav"); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(GetGameTime() > NEXT_DAMAGE)) return; + NEXT_DAMAGE = GetGameTime(); + NEXT_DAMAGE += 0.2; + CallExternal("ent_expowner", "ext_proj_touch", GetEntityIndex(param1)); + } + + void projectile_landed() + { + string SPLOOSH_POINT = GetEntityOrigin(GetOwner()); + ClientEvent("new", "all", "effects/sfx_acid_splash", SPLOOSH_POINT, 128); + CallExternal("ent_expowner", "ext_proj_landed", SPLOOSH_POINT); + } + +} + +} diff --git a/scripts/angelscript/items/proj_glob.as b/scripts/angelscript/items/proj_glob.as new file mode 100644 index 00000000..3f939e17 --- /dev/null +++ b/scripts/angelscript/items/proj_glob.as @@ -0,0 +1,85 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjGlob : CGameScript +{ + string EFFECT_DOT; + string EFFECT_DUR; + string EFFECT_TYPE; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + + ProjGlob() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 68; + PROJ_ANIM_IDLE = "spin_vertical_fast"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "acid_effect"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 100; + PROJ_AOE_RANGE = 64; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_IGNORENPC = 0; + } + + void projectile_spawn() + { + SetName("Acid Glob"); + SetWeight(500); + SetSize(10); + SetValue(0); + SetGravity(0.4); + SetGroupable(25); + SetProp(GetOwner(), "scale", 0.25); + PlayAnim("once", "spin_vertical_fast"); + SetIdleAnim("spin_vertical_fast"); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + } + + void game_tossprojectile() + { + PlayAnim("critical", "spin_vertical_fast"); + ClientEvent("new", "all", "items/proj_slime_jet_cl", GetEntityIndex(GetOwner()), "xfireball3.spr"); + EFFECT_TYPE = GetEntityProperty("ent_expowner", "scriptvar"); + EFFECT_DUR = GetEntityProperty("ent_expowner", "scriptvar"); + EFFECT_DOT = GetEntityProperty("ent_expowner", "scriptvar"); + } + + void projectile_landed() + { + string SPLOOSH_POINT = GetEntityOrigin(GetOwner()); + ClientEvent("new", "all", "effects/sfx_acid_splash", SPLOOSH_POINT, 64); + } + + void game_dodamage() + { + LogDebug("game_dodamage EFFECT_TYPE PARAM1 GetEntityName(param2) GetRelationship("ent_expowner")"); + if (!(param1)) return; + if (!(GetRelationship("ent_expowner") == "enemy")) return; + ApplyEffect(param2, EFFECT_TYPE, EFFECT_DUR, GetEntityIndex("ent_expowner"), EFFECT_DOT, "none"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_glob_dynamic.as b/scripts/angelscript/items/proj_glob_dynamic.as new file mode 100644 index 00000000..d3ead2a6 --- /dev/null +++ b/scripts/angelscript/items/proj_glob_dynamic.as @@ -0,0 +1,72 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjGlobDynamic : CGameScript +{ + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + + ProjGlobDynamic() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 68; + PROJ_ANIM_IDLE = "spin_vertical_fast"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "acid_effect"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_IGNORENPC = 0; + } + + void projectile_spawn() + { + SetName("Acid Glob"); + SetWeight(500); + SetSize(10); + SetValue(0); + SetGravity(0.3); + SetGroupable(25); + SetProp(GetOwner(), "scale", 0.25); + PlayAnim("once", "spin_vertical_fast"); + SetIdleAnim("spin_vertical_fast"); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + } + + void game_tossprojectile() + { + PlayAnim("critical", "spin_vertical_fast"); + ClientEvent("new", "all", "items/proj_slime_jet_cl", GetEntityIndex(GetOwner()), "xfireball3.spr"); + } + + void projectile_landed() + { + string SPLOOSH_POINT = GetEntityOrigin(GetOwner()); + ClientEvent("new", "all", "effects/sfx_acid_splash", SPLOOSH_POINT, 64); + CallExternal("ent_expowner", "ext_glob_landed", SPLOOSH_POINT); + } + +} + +} diff --git a/scripts/angelscript/items/proj_glob_guided.as b/scripts/angelscript/items/proj_glob_guided.as new file mode 100644 index 00000000..39e91c9f --- /dev/null +++ b/scripts/angelscript/items/proj_glob_guided.as @@ -0,0 +1,117 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjGlobGuided : CGameScript +{ + int IS_ACTIVE; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_CL_ID; + string MY_TARG; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + string TARG_HALF_HEIGHT; + + ProjGlobGuided() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 68; + PROJ_ANIM_IDLE = "spin_vertical_fast"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "acid_effect"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_IGNORENPC = 0; + } + + void projectile_spawn() + { + SetName("Acid Glob"); + SetGravity(0); + SetProp(GetOwner(), "scale", 0.25); + PlayAnim("once", "spin_vertical_fast"); + SetIdleAnim("spin_vertical_fast"); + } + + void game_tossprojectile() + { + PlayAnim("critical", "spin_vertical_fast"); + ClientEvent("new", "all", "items/proj_slime_jet_cl", GetEntityIndex(GetOwner()), "xfireball3.spr"); + MY_CL_ID = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.1, "pick_target"); + } + + void pick_target() + { + MY_TARG = GetEntityProperty("ent_expowner", "scriptvar"); + if (!(MY_TARG != "none")) return; + if (!(IsValidPlayer(MY_TARG))) + { + TARG_HALF_HEIGHT = GetEntityHeight(MY_TARG); + TARG_HALF_HEIGHT *= 0.5; + } + else + { + TARG_HALF_HEIGHT = 0; + } + IS_ACTIVE = 1; + home_on_target(); + ScheduleDelayedEvent(10.0, "max_chase_time"); + } + + void home_on_target() + { + if (!(IS_ACTIVE)) return; + if (!(IsEntityAlive(MY_TARG))) return; + ScheduleDelayedEvent(0.25, "home_on_target"); + string TARG_ORG = GetEntityOrigin(MY_TARG); + TARG_ORG += "z"; + string MY_ORG = GetEntityOrigin(GetOwner()); + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(MY_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, 300, 0))); + SetProp(GetOwner(), "movedir", ANG_TO_TARG); + } + + void max_chase_time() + { + projectile_landed(); + } + + void projectile_landed() + { + IS_ACTIVE = 0; + string SPLOOSH_POINT = GetEntityOrigin(GetOwner()); + ClientEvent("new", "all", "effects/sfx_acid_splash", SPLOOSH_POINT, 64); + CallExternal("ent_expowner", "ext_glob_landed", SPLOOSH_POINT); + ClientEvent("update", "all", MY_CL_ID, "end_fx"); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/proj_guided_base.as b/scripts/angelscript/items/proj_guided_base.as new file mode 100644 index 00000000..fd4a7a7a --- /dev/null +++ b/scripts/angelscript/items/proj_guided_base.as @@ -0,0 +1,57 @@ +#pragma context server + +namespace MS +{ + +class ProjGuidedBase : CGameScript +{ + int GPROJ_ACTIVE; + string GPROJ_TARGET; + string GPROJ_TARG_HALF_HEIGHT; + + void game_tossprojectile() + { + if (!(GetEntityProperty("ent_expowner", "scriptvar"))) return; + if (!(IsValidPlayer("ent_expowner"))) + { + GPROJ_TARGET = GetEntityProperty("ent_expowner", "scriptvar"); + } + else + { + GPROJ_TARGET = GetEntityProperty("ent_expowner", "scriptvar"); + } + if (!(IsValidPlayer(GPROJ_TARGET))) + { + GPROJ_TARG_HALF_HEIGHT = GetEntityHeight(GPROJ_TARGET); + GPROJ_TARG_HALF_HEIGHT *= 0.5; + } + else + { + GPROJ_TARG_HALF_HEIGHT = 0; + } + GPROJ_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "gproj_home"); + } + + void gproj_home() + { + if (!(GPROJ_ACTIVE)) return; + if (!(IsEntityAlive(GPROJ_TARGET))) return; + ScheduleDelayedEvent(0.25, "gproj_home"); + string L_TARG_ORG = GetEntityOrigin(GPROJ_TARGET); + L_TARG_ORG += "z"; + string L_MY_ORG = GetEntityOrigin(GetOwner()); + string L_ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(L_MY_ORG, L_TARG_ORG); + L_ANG_TO_TARG = "x"; + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(L_ANG_TO_TARG, Vector3(0, 300, 0))); + SetProp(GetOwner(), "movedir", L_ANG_TO_TARG); + } + + void projectile_landed() + { + GPROJ_ACTIVE = 0; + } + +} + +} diff --git a/scripts/angelscript/items/proj_hit_wall.as b/scripts/angelscript/items/proj_hit_wall.as new file mode 100644 index 00000000..dbb46954 --- /dev/null +++ b/scripts/angelscript/items/proj_hit_wall.as @@ -0,0 +1,78 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjHitWall : CGameScript +{ + float DISTANCE; + string END_POS; + int HIT_NPC; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string START_POS; + + ProjHitWall() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "none"; + PROJ_DAMAGE_TYPE = "none"; + PROJ_ANIM_IDLE = "idle"; + PROJ_DAMAGE = 0; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + } + + void projectile_spawn() + { + SetName("Stupid Hack"); + SetWeight(0); + SetSize(32); + SetValue(0); + SetGravity(0.0); + HIT_NPC = 0; + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + } + + void game_tossprojectile() + { + START_POS = GetEntityOrigin(GetOwner()); + } + + void hit_npc() + { + SetAlive(0); + HIT_NPC = 1; + DeleteEntity(GetOwner()); + } + + void projectile_landed() + { + if ((HIT_NPC)) return; + END_POS = GetEntityOrigin(GetOwner()); + DISTANCE = Distance(START_POS, END_POS); + CallExternal(GetEntityIndex("ent_expowner"), "hitwall_test", DISTANCE, HIT_NPC); + } + + void game_dodamage() + { + if (!(IsEntityAlive(param2))) return; + HIT_NPC = 1; + } + +} + +} diff --git a/scripts/angelscript/items/proj_hold_person.as b/scripts/angelscript/items/proj_hold_person.as new file mode 100644 index 00000000..071ab431 --- /dev/null +++ b/scripts/angelscript/items/proj_hold_person.as @@ -0,0 +1,123 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjHoldPerson : CGameScript +{ + int ARROW_BODY_OFS; + int ARROW_SOLIDIFY_ON_WALL; + string GAME_PVP; + int HITWALL_VOL; + string HOLD_DMG; + string HOLD_DURATION; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_BEAM_ID; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + int SCAN_RANGE; + string SOUND_LOOP; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + + ProjHoldPerson() + { + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 2; + MODEL_BODY_OFS = 2; + PROJ_ANIM_IDLE = "idle_iceball"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart14.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + SOUND_LOOP = "ambience/pulsemachine.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + HITWALL_VOL = 2; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_DAMAGE_AOE_RANGE = 0; + PROJ_DAMAGE_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "magic"; + PROJ_COLLIDEHITBOX = 1; + PROJ_ANIM_IDLE = "none"; + SCAN_RANGE = 96; + } + + void arrow_spawn() + { + SetName("Hold Person Spell"); + SetDescription("A paralyzing ball of magic"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 2); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 200); + SetProp(GetOwner(), "rendercolor", Vector3(255, 128, 0)); + GAME_PVP = "game.pvp"; + } + + void game_fall() + { + } + + void game_projectile_hitnpc() + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_hold", HOLD_DURATION); + remove_me(); + } + + void game_tossprojectile() + { + HOLD_DURATION = GetEntityProperty("ent_expowner", "scriptvar"); + HOLD_DMG = GetEntityProperty("ent_expowner", "scriptvar"); + if (HOLD_DURATION == "PROJ_HOLD_DURATION") + { + HOLD_DURATION = 30.0; + } + if (HOLD_DMG == "PROJ_HOLD_DMG") + { + HOLD_DMG = 0; + } + // svplaysound: svplaysound 1 10 SOUND_LOOP + EmitSound(1, 10, SOUND_LOOP); + Effect("beam", "ents", "lgtning.spr", 10, GetOwner(), 0, "ent_expowner", 1, Vector3(255, 255, 255), 200, 100, 10.0); + MY_BEAM_ID = GetEntityIndex(m_hLastCreated); + } + + void game_projectile_hitwall() + { + remove_me(); + } + + void game_projectile_landed() + { + remove_me(); + } + + void remove_me() + { + Effect("beam", "update", MY_BEAM_ID, "remove", 0.1); + // svplaysound: svplaysound 1 0 SOUND_LOOP + EmitSound(1, 0, SOUND_LOOP); + } + +} + +} diff --git a/scripts/angelscript/items/proj_ice_bolt.as b/scripts/angelscript/items/proj_ice_bolt.as new file mode 100644 index 00000000..d0c448a7 --- /dev/null +++ b/scripts/angelscript/items/proj_ice_bolt.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjIceBolt : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + float EFFECT_DAMAGE; + string EFFECT_DURATION; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_OWNER; + string OWNER_ISPLAYER; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjIceBolt() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 7; + ARROW_BODY_OFS = 7; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal1.wav"; + SOUND_BURN = "magic/ice_powerup.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 50; + PROJ_AOE_RANGE = 30; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + } + + void arrow_spawn() + { + SetName("Ice Bolt"); + SetDescription("A sharp bolt of ice"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0); + SetGroupable(25); + } + + void game_dodamage() + { + if (!(param1)) return; + MY_OWNER = GetEntityIndex("ent_expowner"); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + string ENT_HIT = GetEntityIndex(param2); + if (OWNER_ISPLAYER == 1) + { + if (!("game.pvp")) + { + } + if ((IsValidPlayer(ENT_HIT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string L_RELATIONSHIP = GetRelationship(MY_OWNER); + if (!(L_RELATIONSHIP != "ally")) return; + if (!(L_RELATIONSHIP != "neutral")) return; + if (!(L_RELATIONSHIP != "none")) return; + EFFECT_DURATION = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + EFFECT_DURATION *= 0.5; + if (EFFECT_DURATION < 3) + { + EFFECT_DURATION = 3; + } + EFFECT_DAMAGE = Random(5, 15); + if ((OWNER_ISPLAYER)) + { + EFFECT_DAMAGE = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + EFFECT_DAMAGE /= 3; + } + ApplyEffect(ENT_HIT, "effects/dot_cold", EFFECT_DURATION, MY_OWNER, EFFECT_DAMAGE, "spellcasting.ice"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_ice_bolt2.as b/scripts/angelscript/items/proj_ice_bolt2.as new file mode 100644 index 00000000..813f1f9b --- /dev/null +++ b/scripts/angelscript/items/proj_ice_bolt2.as @@ -0,0 +1,105 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjIceBolt2 : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string DOT_FREEZE; + string EFFECT_DURATION; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_OWNER; + string OWNER_ISPLAYER; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjIceBolt2() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 2; + ARROW_BODY_OFS = 2; + SOUND_HITWALL1 = "magic/frost_pulse.wav"; + SOUND_HITWALL2 = "magic/frost_pulse.wav"; + SOUND_BURN = "magic/ice_powerup.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_iceball"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 96; + PROJ_AOE_RANGE = 64; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + } + + void arrow_spawn() + { + SetName("Greater Ice Bolt"); + SetDescription("A jagged ball of ice"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0); + SetGroupable(25); + } + + void game_dodamage() + { + if (!(true)) return; + if (!(param1)) return; + MY_OWNER = GetEntityIndex("ent_expowner"); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + string ENT_HIT = GetEntityIndex(param2); + if (OWNER_ISPLAYER == 1) + { + EFFECT_DURATION = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + EFFECT_DURATION *= 0.5; + DOT_FREEZE = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + DOT_FREEZE *= 0.5; + if (EFFECT_DURATION < 3) + { + EFFECT_DURATION = 3; + } + if (!("game.pvp")) + { + } + if ((IsValidPlayer(ENT_HIT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + if (!(OWNER_ISPLAYER)) + { + EFFECT_DURATION = GetEntityProperty(MY_OWNER, "scriptvar"); + DOT_FREEZE = GetEntityProperty(MY_OWNER, "scriptvar"); + } + ApplyEffect(ENT_HIT, "effects/dot_cold", EFFECT_DURATION, MY_OWNER, DOT_FREEZE, "spellcasting.ice"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_icelance.as b/scripts/angelscript/items/proj_icelance.as new file mode 100644 index 00000000..39da79c6 --- /dev/null +++ b/scripts/angelscript/items/proj_icelance.as @@ -0,0 +1,111 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjIcelance : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string EFFECT_DURATION; + string FROST_DMG; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjIcelance() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 38; + ARROW_BODY_OFS = 38; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal1.wav"; + SOUND_BURN = "magic/ice_powerup.wav"; + ARROW_SOLIDIFY_ON_WALL = 1; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icelance"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 800; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + } + + void arrow_spawn() + { + SetName("Ice Lance"); + SetDescription("A sharp bolt of ice"); + SetGravity(0); + } + + void game_tossprojectile() + { + SetGravity(0); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + string OWNER_ISPLAYER = IsValidPlayer("ent_expowner"); + string ENEMY_HIT = GetEntityIndex(param2); + if (!(IsEntityAlive(ENEMY_HIT))) return; + if (OWNER_ISPLAYER == 1) + { + if ("game.pvp" < 1) + { + } + if ((IsValidPlayer(ENEMY_HIT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + EFFECT_DURATION = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + EFFECT_DURATION *= 0.5; + if (EFFECT_DURATION < 3) + { + EFFECT_DURATION = 3; + } + if (!(OWNER_ISPLAYER)) + { + EFFECT_DURATION = 5; + } + if (!(/* TODO: $get_takedmg */ $get_takedmg(ENEMY_HIT, "cold") != 0)) return; + int RND_EFFECT = RandomInt(1, 3); + int FROST_DMG = RandomInt(1, EFFECT_DURATION); + if (!(OWNER_ISPLAYER)) + { + FROST_DMG = GetEntityProperty("ent_expowner", "scriptvar"); + } + ApplyEffect(ENEMY_HIT, "effects/dot_cold", EFFECT_DURATION, MY_OWNER, FROST_DMG, "spellcasting.ice"); + if (!(RND_EFFECT == 1)) return; + ApplyEffect(ENEMY_HIT, "effects/debuff_freeze", Random(5, 7), MY_OWNER, 0); + if ((IsValidPlayer(ENEMY_HIT))) return; + if ((GetEntityProperty(ENEMY_HIT, "scriptvar"))) + { + SendPlayerMessage(GetOwner(), "Your enemy has been encased in ice!"); + } + } + +} + +} diff --git a/scripts/angelscript/items/proj_k_knife.as b/scripts/angelscript/items/proj_k_knife.as new file mode 100644 index 00000000..619185a9 --- /dev/null +++ b/scripts/angelscript/items/proj_k_knife.as @@ -0,0 +1,144 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjKKnife : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + string EFFECT_DMG; + string EFFECT_DUR; + string EFFECT_SCRIPT; + int MODEL_BODY_OFS; + string MODEL_WORLD; + string MY_OWNER; + string MY_WEAPON; + string OWNER_ISPLAYER; + string OWNER_TYPE; + string PROJ_ANIM_IDLE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SPAWN_ITEM; + + ProjKKnife() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 26; + MODEL_BODY_OFS = 26; + PROJ_ANIM_IDLE = "idle_standard"; + ARROW_EXPIRE_DELAY = 1; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 2; + ARROW_SOLIDIFY_ON_WALL = 1; + ARROW_BREAK_CHANCE = 1.0; + SOUND_HITWALL1 = "weapons/dagger/daggermetal1.wav"; + SOUND_HITWALL2 = "weapons/dagger/daggermetal2.wav"; + PROJ_DAMAGE_TYPE = "pierce"; + } + + void arrow_spawn() + { + SetName("Kharaztorant Knife"); + SetDescription("An evil magical knife"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0); + SetGroupable(25); + } + + void game_tossprojectile() + { + SetGravity(0); + MY_OWNER = GetEntityIndex("ent_expowner"); + MY_WEAPON = GetActiveItem(MY_OWNER); + OWNER_TYPE = GetEntityProperty(MY_OWNER, "scriptvar"); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + if ((OWNER_ISPLAYER)) + { + SPAWN_ITEM = GetEntityProperty(MY_OWNER, "scriptvar"); + } + if (OWNER_TYPE == "ninja") + { + ARROW_BODY_OFS = 26; + } + if (OWNER_TYPE == "fire") + { + ARROW_BODY_OFS = 27; + EFFECT_SCRIPT = "effects/dot_fire"; + EFFECT_DUR = 5.0; + EFFECT_DMG = 30; + } + if (OWNER_TYPE == "poison") + { + ARROW_BODY_OFS = 28; + EFFECT_SCRIPT = "effects/dot_poison"; + EFFECT_DUR = 15.0; + EFFECT_DMG = 8; + } + if (OWNER_TYPE == "cold") + { + ARROW_BODY_OFS = 29; + EFFECT_SCRIPT = "effects/dot_cold"; + EFFECT_DUR = 5.0; + EFFECT_DMG = 10; + } + SetModelBody(0, ARROW_BODY_OFS); + } + + void game_dodamage() + { + if (!(param1)) return; + if ((OWNER_ISPLAYER)) + { + CallExternal(MY_OWNER, "knife_return"); + } + if (!(OWNER_TYPE != "ninja")) return; + if (!(GetRelationship(param2) == "enemy")) return; + if (!(true)) return; + if ((OWNER_ISPLAYER)) + { + if ((IsValidPlayer(param2))) + { + } + string PVP_SET = "game.pvp"; + if (PVP_SET == 0) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(EFFECT_SCRIPT != "EFFECT_SCRIPT")) return; + ApplyEffect(param2, EFFECT_SCRIPT, EFFECT_DUR, MY_OWNER, EFFECT_DMG, "smallarms"); + } + + void hitwall() + { + if ((OWNER_ISPLAYER)) + { + CallExternal(MY_WEAPON, "knife_return"); + } + SolidifyProjectile(GetOwner()); + DeleteEntity(GetOwner(), true); // fade out + } + + void game_hitnpc() + { + if ((OWNER_ISPLAYER)) + { + CallExternal(MY_WEAPON, "knife_return"); + } + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/items/proj_lava_rock.as b/scripts/angelscript/items/proj_lava_rock.as new file mode 100644 index 00000000..f915c53e --- /dev/null +++ b/scripts/angelscript/items/proj_lava_rock.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjLavaRock : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int DID_SPLODIE; + string FINAL_DOT; + string FINAL_OWNER; + int MODEL_BODY_OFS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjLavaRock() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 67; + MODEL_BODY_OFS = 67; + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 1; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + SOUND_HITWALL1 = "fire.wav"; + SOUND_HITWALL2 = "fire.wav"; + PROJ_DAMAGE_TYPE = "siege"; + PROJ_DAMAGE = RandomInt(200, 300); + PROJ_AOE_RANGE = 200; + PROJ_AOE_FALLOFF = 1; + Precache("rockgibs.mdl"); + } + + void arrow_spawn() + { + SetName("Molten Boulder"); + SetDescription("A giant ball of lava"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.4); + SetGroupable(25); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 64, -1, -1); + } + + void game_tossprojectile() + { + FINAL_OWNER = GetEntityProperty("ent_expowner", "scriptvar"); + FINAL_DOT = GetEntityProperty("ent_expowner", "scriptvar"); + FINAL_DOT *= 0.25; + } + + void projectile_landed() + { + if (!(true)) return; + go_splodie(); + } + + void go_splodie() + { + if ((DID_SPLODIE)) return; + DID_SPLODIE = 1; + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 100, 5, 3, 500); + ClientEvent("new", "all", "effects/sfx_fire_burst", GetEntityOrigin(GetOwner()), 200, 1, Vector3(255, 0, 0)); + ScheduleDelayedEvent(0.1, "vanish"); + } + + void game_projectile_hitnpc() + { + if (!(true)) return; + go_splodie(); + } + + void vanish() + { + DeleteEntity(GetOwner()); + } + + void hitwall() + { + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + } + + void game_dodamage() + { + LogDebug("game_dodamage GetEntityName(param2) GetEntityName(FINAL_OWNER)"); + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_fire", 5.0, FINAL_OWNER, FINAL_DOT); + } + +} + +} diff --git a/scripts/angelscript/items/proj_lightning_ball.as b/scripts/angelscript/items/proj_lightning_ball.as new file mode 100644 index 00000000..1ed57f8d --- /dev/null +++ b/scripts/angelscript/items/proj_lightning_ball.as @@ -0,0 +1,232 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjLightningBall : CGameScript +{ + int ARROW_BODY_OFS; + string F_BALL_DMG; + string F_BALL_SIZE; + string F_BALL_TYPE; + int HIT_SOMETHING; + int LOOP_COUNT; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_OWNER; + string MY_SCRIPT_IDX; + string OWNER_ISPLAYER; + string PROJ_ANIM_IDLE; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + int SCAN_ON; + int SCAN_SIZE; + string SOUND_SHOOT; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + + ProjLightningBall() + { + PROJ_IGNORENPC = 0; + MODEL_HANDS = "none"; + MODEL_WORLD = "none"; + ARROW_BODY_OFS = 6; + SOUND_SHOOT = "ambience/alienflyby1.wav"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart14.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + PROJ_MOTIONBLUR = 0; + PROJ_ANIM_IDLE = "none"; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_DAMAGE_AOE_RANGE = 32; + PROJ_DAMAGE_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "lightning"; + } + + void OnSpawn() override + { + if (param1 != "1") + { + ScheduleDelayedEvent(10.0, "remove_me"); + } + } + + void arrow_spawn() + { + SetName("Manabolt"); + SetDescription("Manabolt"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + SetModel("none"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void game_fall() + { + } + + void game_hitworld() + { + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_tossprojectile() + { + MY_OWNER = GetEntityIndex("ent_expowner"); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + F_BALL_SIZE = GetEntityProperty(MY_OWNER, "scriptvar"); + F_BALL_DMG = GetEntityProperty(MY_OWNER, "scriptvar"); + F_BALL_TYPE = "lightning"; + if (GetEntityProperty(MY_OWNER, "scriptvar") != "BALL_TYPE") + { + F_BALL_TYPE = GetEntityProperty(MY_OWNER, "scriptvar"); + } + SCAN_SIZE = 16; + if ((OWNER_ISPLAYER)) + { + SCAN_SIZE = 12; + } + SCAN_SIZE *= F_BALL_SIZE; + if (F_BALL_SIZE == 0) + { + DeleteEntity(GetOwner()); + } + if (!(F_BALL_SIZE > 0)) return; + SetModel("weapons/projectiles.mdl"); + SetIdleAnim("idle_standard"); + SetMoveAnim("idle_standard"); + int SUB_MODEL = int(F_BALL_SIZE); + SUB_MODEL += 12; + int SUB_MODEL = int(SUB_MODEL); + SetModelBody(0, SUB_MODEL); + if (F_BALL_TYPE == "holy") + { + SetProp(GetOwner(), "rendermode", 1); + SetProp(GetOwner(), "rendercolor", Vector3(0, 0, 255)); + } + MY_SCRIPT_IDX = "game.script.last_sent_id"; + EmitSound(GetOwner(), 0, SOUND_SHOOT, F_BALL_SIZE); + SCAN_ON = 1; + scan_damage(); + } + + void scan_damage() + { + if ((SCAN_ON)) + { + ScheduleDelayedEvent(0.1, "scan_damage"); + } + // TODO: getents any SCAN_SIZE + if (!(getCount > 0)) return; + hit_target(); + } + + void game_hitnpc() + { + CallExternal(MY_OWNER, "send_damage", GetEntityIndex(m_hLastStruckByMe), "direct", F_BALL_DMG, 1.0, MY_OWNER, F_BALL_TYPE); + XDoDamage(GetEntityIndex(m_hLastStruckByMe), "direct", F_BALL_DMG, 1.0, MY_OWNER, MY_OWNER, "spellcasting.lightning", F_BALL_TYPE); + Effect("screenfade", GetEntityIndex(m_hLastStruckByMe), 3, 1, Vector3(255, 255, 255), 255, "fadein"); + DeleteEntity(GetOwner()); + } + + void game_projectile_landed() + { + SetModel("none"); + ClientEvent("update", "all", MY_SCRIPT_IDX, "shrink_out"); + SetExpireTime(0); + } + + void hit_target() + { + HIT_SOMETHING = 1; + LOOP_COUNT = 0; + for (int i = 0; i < getCount; i++) + { + dmg_target(); + } + } + + void dmg_target() + { + LOOP_COUNT += 1; + if (LOOP_COUNT == 1) + { + string CHECK_ENT = getEnt1; + } + if (LOOP_COUNT == 2) + { + string CHECK_ENT = getEnt2; + } + if (LOOP_COUNT == 3) + { + string CHECK_ENT = getEnt3; + } + if (LOOP_COUNT == 4) + { + string CHECK_ENT = getEnt4; + } + if (LOOP_COUNT == 5) + { + string CHECK_ENT = getEnt5; + } + if (LOOP_COUNT == 6) + { + string CHECK_ENT = getEnt6; + } + if (LOOP_COUNT == 7) + { + string CHECK_ENT = getEnt7; + } + if (LOOP_COUNT == 8) + { + string CHECK_ENT = getEnt8; + } + if (LOOP_COUNT == 9) + { + string CHECK_ENT = getEnt9; + } + if (!(GetRelationship(CHECK_ENT) == "enemy")) return; + if ((OWNER_ISPLAYER)) + { + if ("game.pvp" == 0) + { + } + if ((IsValidPlayer(CHECK_ENT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityProperty(CHECK_ENT, "scriptvar"))) + { + XDoDamage(CHECK_ENT, "direct", F_BALL_DMG, 1.0, MY_OWNER, MY_OWNER, "spellcasting.lightning", F_BALL_TYPE); + } + Effect("screenfade", CHECK_ENT, 3, 1, Vector3(255, 255, 255), 255, "fadein"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_lightning_ball_simple.as b/scripts/angelscript/items/proj_lightning_ball_simple.as new file mode 100644 index 00000000..c1d5fb89 --- /dev/null +++ b/scripts/angelscript/items/proj_lightning_ball_simple.as @@ -0,0 +1,123 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjLightningBallSimple : CGameScript +{ + int ARROW_BODY_OFS; + string F_BALL_DMG; + string F_BALL_SIZE; + string F_BALL_TYPE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_OWNER; + string OWNER_ISPLAYER; + string PROJ_ANIM_IDLE; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + int SCAN_SIZE; + string SOUND_SHOOT; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + + ProjLightningBallSimple() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "none"; + ARROW_BODY_OFS = 6; + SOUND_SHOOT = "ambience/alienflyby1.wav"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart14.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + PROJ_MOTIONBLUR = 0; + PROJ_ANIM_IDLE = "spin_horizontal_slow"; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = 200; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_DAMAGE_AOE_RANGE = 32; + PROJ_DAMAGE_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "lightning"; + } + + void arrow_spawn() + { + SetName("Manabolt"); + SetDescription("Manabolt"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + SetModel("none"); + SetIdleAnim("spin_horizontal_slow"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + ScheduleDelayedEvent(10.0, "remove_me"); + } + + void game_fall() + { + } + + void game_hitworld() + { + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_tossprojectile() + { + MY_OWNER = GetEntityIndex("ent_expowner"); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + F_BALL_SIZE = GetEntityProperty(MY_OWNER, "scriptvar"); + F_BALL_DMG = GetEntityProperty(MY_OWNER, "scriptvar"); + F_BALL_TYPE = "lightning"; + SCAN_SIZE = 16; + if ((OWNER_ISPLAYER)) + { + SCAN_SIZE = 12; + } + SCAN_SIZE *= F_BALL_SIZE; + if (F_BALL_SIZE == 0) + { + DeleteEntity(GetOwner()); + } + if (!(F_BALL_SIZE > 0)) return; + SetModel("weapons/projectiles.mdl"); + int SUB_MODEL = int(F_BALL_SIZE); + SUB_MODEL += 12; + int SUB_MODEL = int(SUB_MODEL); + SetModelBody(0, SUB_MODEL); + EmitSound(GetOwner(), 0, SOUND_SHOOT, F_BALL_SIZE); + } + + void game_projectile_hitnpc() + { + SetModel("none"); + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + Effect("screenfade", GetEntityIndex(m_hLastStruckByMe), 3, 1, Vector3(255, 255, 255), 255, "fadein"); + SetExpireTime(0); + } + + void game_projectile_landed() + { + SetModel("none"); + SetExpireTime(0); + } + +} + +} diff --git a/scripts/angelscript/items/proj_lightning_storm.as b/scripts/angelscript/items/proj_lightning_storm.as new file mode 100644 index 00000000..e379a37d --- /dev/null +++ b/scripts/angelscript/items/proj_lightning_storm.as @@ -0,0 +1,111 @@ +#pragma context server + +namespace MS +{ + +class ProjLightningStorm : CGameScript +{ + string ITEM_NAME; + string MODEL_HANDS; + string MODEL_WORLD; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjLightningStorm() + { + } + + void OnSpawn() override + { + MODEL_HANDS = "none"; + MODEL_WORLD = "none"; + SOUND_HITWALL1 = "weapons/electro4.wav"; + SOUND_HITWALL2 = "weapons/electro4.wav"; + SOUND_BURN = "debris/beamstart15.wav"; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "lightning"; + PROJ_DAMAGESTAT = "spellcasting.lightning"; + PROJ_DAMAGE = 100; + PROJ_AOE_RANGE = 256; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + Precache(MODEL_WORLD); + // TODO: movetype projectile + SetWorldModel(MODEL_WORLD); + projectile_spawn(); + string reg.proj.dmg = PROJ_DAMAGE; + string reg.proj.dmgtype = PROJ_DAMAGE_TYPE; + string reg.proj.aoe.range = PROJ_AOE_RANGE; + string reg.proj.aoe.falloff = PROJ_AOE_FALLOFF; + string reg.proj.stick.duration = PROJ_STICK_DURATION; + string reg.proj.collidehitbox = PROJ_COLLIDEHITBOX; + RegisterProjectile(); + } + + void game_tossprojectile() + { + SetUseable(0); + game_fall(); + } + + void game_projectile_landed() + { + // TODO: movetype none + SetExpireTime(0); + projectile_landed(); + } + + void projectile_spawn() + { + SetName("Lightning Storm Spawner"); + SetWeight(500); + SetSize(1); + SetValue(5); + SetGravity(0.7); + SetGroupable(25); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + } + + void projectile_landed() + { + string MY_OWNER = GetEntityIndex("ent_expowner"); + string pos = GetEntityOrigin(GetOwner()); + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + string EFFECT_DMG = GetSkillLevel(MY_OWNER, "spellcasting.lightning"); + string EFFECT_DURATION_STAT = GetStat(MY_OWNER, "concentration.ratio"); + int EFFECT_MAXDURATION = 15; + int EFFECT_MINDURATION = 15; + string EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + string EFFECT_SCRIPT = "monsters/summon/summon_lightning_storm"; + SpawnNPC(EFFECT_SCRIPT, pos, ScriptMode::Legacy); // params: MY_OWNER, GetEntityProperty(GetOwner(), "angles.y"), EFFECT_DMG, EFFECT_DURATION, "spellcasting.lightning" + string LAST_ENT = GetEntityIndex(m_hLastCreated); + } + + void game_hitnpc() + { + string MY_OWNER = GetEntityIndex("ent_expowner"); + string EFFECT_DMG = GetSkillLevel(MY_OWNER, "spellcasting.lightning"); + EFFECT_DMG /= 2; + int EFFECT_MAXDURATION = 15; + int EFFECT_MINDURATION = 10; + string EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + ApplyEffect(m_hLastStruckByMe, "effects/dot_lightning", EFFECT_DURATION, MY_OWNER, EFFECT_DMG, "spellcasting.lightning"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_mana.as b/scripts/angelscript/items/proj_mana.as new file mode 100644 index 00000000..37541318 --- /dev/null +++ b/scripts/angelscript/items/proj_mana.as @@ -0,0 +1,238 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjMana : CGameScript +{ + int ARROW_BODY_OFS; + int ARROW_SOLIDIFY_ON_WALL; + string DAMAGE_LIST; + string F_BALL_DMG; + string F_BALL_SIZE; + string F_BALL_TYPE; + string GAME_PVP; + int HITWALL_VOL; + int LAST_TOUCHED; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_OWNER; + string NEXT_TOUCH; + string OWNER_ISPLAYER; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + int SCAN_ON; + int SCAN_SIZE; + string SCAN_TARGS; + string SOUND_SHOOT; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + string TOKEN_TARGETS; + + ProjMana() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "none"; + ARROW_BODY_OFS = 6; + SOUND_SHOOT = "ambience/alienflyby1.wav"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart14.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + HITWALL_VOL = 2; + PROJ_MOTIONBLUR = 0; + MODEL_BODY_OFS = 0; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_DAMAGE_AOE_RANGE = 0; + PROJ_DAMAGE_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "magic"; + PROJ_COLLIDEHITBOX = 1; + PROJ_IGNORENPC = 1; + PROJ_ANIM_IDLE = "none"; + } + + void arrow_spawn() + { + SetName("Manabolt"); + SetDescription("Manabolt"); + SetWeight(0); + SetSize(16); + SetValue(16); + SetGravity(0.0001); + SetModel("none"); + ScheduleDelayedEvent(10.0, "remove_me"); + GAME_PVP = "game.pvp"; + // TODO: projectiletouch 1 + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(GetGameTime() > NEXT_TOUCH)) return; + NEXT_TOUCH = GetGameTime(); + NEXT_TOUCH += 0.1; + LogDebug("game_touch GetEntityName(param1)"); + check_damage(GetEntityIndex(param1), 1); + } + + void game_fall() + { + LogDebug("game_fall"); + } + + void game_projectile_hitwall() + { + LogDebug("game_projectile_hitwall"); + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SetAlive(0); + SCAN_ON = 0; + RemoveScript(); + DeleteEntity(GetOwner()); + // svplaysound: svplaysound 4 0 SOUND_SHOOT + EmitSound(4, 0, SOUND_SHOOT); + } + + void game_projectile_hitnpc() + { + LogDebug("game_projectile_hitnpc GetEntityName(param1)"); + } + + void game_projectile_landed() + { + LogDebug("game_projectile_landed"); + } + + void game_tossprojectile() + { + TOKEN_TARGETS = ""; + MY_OWNER = GetEntityIndex("ent_expowner"); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + F_BALL_SIZE = GetEntityProperty(MY_OWNER, "scriptvar"); + F_BALL_DMG = GetEntityProperty(MY_OWNER, "scriptvar"); + F_BALL_TYPE = GetEntityProperty(MY_OWNER, "scriptvar"); + DAMAGE_LIST = ""; + int F_BALL_VOL = int(F_BALL_SIZE); + F_BALL_VOL = max(1, min(10, F_BALL_VOL)); + // svplaysound: svplaysound 4 F_BALL_VOL SOUND_SHOOT + EmitSound(4, F_BALL_VOL, SOUND_SHOOT); + LogDebug("game_tossprojectile F_BALL_SIZE F_BALL_DMG F_BALL_TYPE GetEntityName(MY_OWNER)"); + if (F_BALL_TYPE == "F_BALL_TYPE") + { + F_BALL_TYPE = "magic"; + } + SCAN_SIZE = 16; + if ((OWNER_ISPLAYER)) + { + SCAN_SIZE = 12; + } + SCAN_SIZE *= F_BALL_SIZE; + if (F_BALL_SIZE == 0) + { + DeleteEntity(GetOwner()); + } + if (!(F_BALL_SIZE > 0)) return; + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 13); + string SCALE_SIZE = F_BALL_SIZE; + SCALE_SIZE *= 0.75; + SetProp(GetOwner(), "scale", SCALE_SIZE); + SetWidth(SCAN_SIZE); + SetHeight(SCAN_SIZE); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 20); + SCAN_ON = 1; + scan_damage(); + } + + void scan_damage() + { + if ((SCAN_ON)) + { + ScheduleDelayedEvent(0.1, "scan_damage"); + } + string MY_ORG = GetEntityOrigin(GetOwner()); + if (MY_ORG == Vector3(0, 0, 0)) + { + DeleteEntity(GetOwner()); + } + string MY_HEIGHT = (MY_ORG).z; + MY_HEIGHT -= /* TODO: $get_ground_height */ $get_ground_height(MY_ORG); + if (MY_HEIGHT < 72) + { + MY_ORG = "z"; + if (SCAN_SIZE > 32) + { + MY_ORG += "z"; + } + } + SCAN_TARGS = FindEntitiesInSphere("any", SCAN_SIZE); + if (!(SCAN_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(SCAN_TARGS, ";"); i++) + { + damage_targets(); + } + } + + void damage_targets() + { + string CUR_TARG = GetToken(SCAN_TARGS, i, ";"); + check_damage(CUR_TARGET); + } + + void remove_last_touched() + { + LAST_TOUCHED = 0; + } + + void check_damage() + { + string CUR_TARG = param1; + if ((DAMAGE_LIST).findFirst(CUR_TARG) >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + LogDebug("damage_targets nam GetEntityName(CUR_TARG) nme GetRelationship(CUR_TARG) plr IsValidPlayer(CUR_TARG)"); + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + if ((OWNER_ISPLAYER)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + LogDebug("damageline MY_ORG TARG_ORG F_BALL_DMG"); + XDoDamage(MY_ORG, TARG_ORG, F_BALL_DMG, 1.0, "ent_expowner", GetOwner(), "archery", "magic", "dmgevent:ext_manaball"); + if (DAMAGE_LIST.length() > 0) DAMAGE_LIST += ";"; + DAMAGE_LIST += CUR_TARG; + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/proj_mana2.as b/scripts/angelscript/items/proj_mana2.as new file mode 100644 index 00000000..45a57b50 --- /dev/null +++ b/scripts/angelscript/items/proj_mana2.as @@ -0,0 +1,127 @@ +#pragma context server + +namespace MS +{ + +class ProjMana2 : CGameScript +{ + string CLFX_ARROW_IDX; + string CLFX_ARROW_INIT; + string CLFX_ARROW_IN_FLIGHT; + string CLFX_ARROW_SCRIPT; + string FX_DAMAGE; + string FX_OWNER; + string FX_SIZE; + string FX_SKILL; + string FX_VEL; + string PREV_SCAN; + string SCAN_SIZE; + string SOUND_SHOOT; + string SOUND_ZAP; + + ProjMana2() + { + SOUND_SHOOT = "ambience/alienflyby1.wav"; + SOUND_ZAP = "debris/zap1.wav"; + CLFX_ARROW_SCRIPT = "items/proj_mana2_cl"; + } + + void OnSpawn() override + { + SetName("Manabolt"); + SetDescription("Manabolt"); + SetWidth(0); + SetHeight(0); + SetWeight(0); + SetGravity(0); + SetMonsterClip(0); + SetInvincible(true); + SetRace("beloved"); + SetModel("none"); + ScheduleDelayedEvent(10.0, "remove_projectile"); + } + + void game_dynamically_created() + { + FX_OWNER = param1; + FX_VEL = param2; + FX_SIZE = param3; + FX_DAMAGE = param4; + FX_SKILL = param5; + SCAN_SIZE = "func_get_scan_size"(); + SetVelocity(GetOwner(), FX_VEL); + EmitSound3D(SOUND_SHOOT, 2.5, GetEntityOrigin(GetOwner()), 0, 4); + PREV_SCAN = GetEntityOrigin(GetOwner()); + ScheduleDelayedEvent(0.3, "scan_cycle"); + create_clfx(); + SetProp(GetOwner(), "movetype", 11); + SetProp(GetOwner(), "friction", 10000); + SetProp(GetOwner(), "solid", 0); + } + + void create_clfx() + { + if (!(CLFX_ARROW_INIT)) + { + CLFX_ARROW_INIT = 1; + CLFX_ARROW_IN_FLIGHT = 1; + ClientEvent("new", "all", CLFX_ARROW_SCRIPT, GetEntityOrigin(GetOwner()), GetEntityAngles(GetOwner()), GetEntityVelocity(GetOwner()), FX_SIZE); + CLFX_ARROW_IDX = "game.script.last_sent_id"; + } + } + + void scan_cycle() + { + string L_VEL = GetEntityVelocity(GetOwner()); + if (FX_VEL == L_VEL) + { + XDoDamage(GetEntityOrigin(GetOwner()), SCAN_SIZE, FX_DAMAGE, 0, FX_OWNER, GetOwner(), FX_SKILL, "magic", "dmgevent:*ball"); + ScheduleDelayedEvent(0.3, "scan_cycle"); + } + else + { + remove_projectile(); + } + } + + void ball_dodamage() + { + if (!(param1)) return; + if (!(param6 > 0)) return; + FX_SIZE -= 1; + if (FX_SIZE > 0) + { + SCAN_SIZE = "func_get_scan_size"(); + ClientEvent("update", "all", CLFX_ARROW_IDX, "reduce_size"); + } + else + { + remove_projectile(); + } + } + + void remove_projectile() + { + EmitSound3D(SOUND_ZAP, 4, GetEntityOrigin(GetOwner()), 0, 4); + ClientEvent("update", "all", CLFX_ARROW_IDX, "end_fx"); + DeleteEntity(GetOwner()); + } + + void fake_precache() + { + // svplaysound: svplaysound 4 0 SOUND_ZAP + EmitSound(4, 0, SOUND_ZAP); + } + + void func_get_scan_size() + { + int L_SCAN_SIZE = 24; + L_SCAN_SIZE *= FX_SIZE; + L_SCAN_SIZE = max(55, min(140, L_SCAN_SIZE)); + return; + return; + } + +} + +} diff --git a/scripts/angelscript/items/proj_mana2_cl.as b/scripts/angelscript/items/proj_mana2_cl.as new file mode 100644 index 00000000..2aff73fe --- /dev/null +++ b/scripts/angelscript/items/proj_mana2_cl.as @@ -0,0 +1,90 @@ +#pragma context server + +namespace MS +{ + +class ProjMana2Cl : CGameScript +{ + string BALL_SIZE; + int FX_ACTIVE; + string FX_ANG; + string FX_CUR_ORG; + string FX_MODEL; + string FX_ORIGIN; + string FX_VEL; + + ProjMana2Cl() + { + FX_MODEL = "weapons/projectiles.mdl"; + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_ANG = param2; + FX_VEL = param3; + BALL_SIZE = param4; + FX_ACTIVE = 1; + ClientEffect("tempent", "model", FX_MODEL, FX_ORIGIN, "setup_arrow", "update_arrow", "cl_projectile_collide"); + ScheduleDelayedEvent(10.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + RemoveScript(); + } + + void remove_fx() + { + FX_ACTIVE = 0; + RemoveScript(); + } + + void reduce_size() + { + BALL_SIZE -= 1; + if (BALL_SIZE == 0) + { + FX_ACTIVE = 0; + } + } + + void update_arrow() + { + ClientEffect("tempent", "set_current_prop", "scale", (BALL_SIZE * 0.75)); + if ((FX_ACTIVE)) + { + FX_CUR_ORG = "game.tempent.origin"; + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + } + + void setup_arrow() + { + ClientEffect("tempent", "set_current_prop", "origin", FX_ORIGIN); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "scale", (BALL_SIZE * 0.75)); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", FX_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", FX_VEL); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "body", 13); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 16); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "cb_collide", "cl_projectile_collide"); + } + + void cl_projectile_collide() + { + end_fx(); + } + +} + +} diff --git a/scripts/angelscript/items/proj_mana_drainer.as b/scripts/angelscript/items/proj_mana_drainer.as new file mode 100644 index 00000000..44c48fbf --- /dev/null +++ b/scripts/angelscript/items/proj_mana_drainer.as @@ -0,0 +1,108 @@ +#pragma context server + +namespace MS +{ + +class ProjManaDrainer : CGameScript +{ + string CL_SCRIPT; + string F_MP_DRAIN_RATE; + string HOVER_SOUND; + string MP_DRAIN_OVERRIDE; + int MP_DRAIN_RATE; + string SOUND_POP; + + ProjManaDrainer() + { + MP_DRAIN_RATE = 1; + CL_SCRIPT = "items/proj_mana_drainer_cl"; + HOVER_SOUND = "ambience/labdrone2.wav"; + SOUND_POP = "turret/tu_die2.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + LogDebug("pulse"); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, Random(0, 359), 0), Vector3(0, 500, 0))); + string SCAN_TARGET = /* TODO: $get_insphere */ $get_insphere("player", 64, GetMonsterProperty("origin")); + if ((IsEntityAlive(SCAN_TARGET))) + { + } + LogDebug("drain target GetEntityName(SCAN_TARGET) F_MP_DRAIN_RATE"); + SendColoredMessage(SCAN_TARGET, "A corpse light is draining your mana!"); + if (GetEntityMP(SCAN_TARGET) <= 0) + { + CallExternal("ent_expowner", "drainer_kill", SCAN_TARGET); + ScheduleDelayedEvent(0.1, "end_life"); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(30.0); + // svplaysound: svplaysound 1 5 HOVER_SOUND + EmitSound(1, 5, HOVER_SOUND); + } + + void game_precache() + { + } + + void OnSpawn() override + { + SetName("Mana Drainer"); + SetWidth(16); + SetHeight(16); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 13); + SetIdleAnim("spin_horizontal_slow"); + PlayAnim("once", "spin_horizontal_slow"); + // TODO: movetype normal + SetSolid("none"); + SetGravity(0); + SetFly(true); + int reg.proj.dmg = 0; + string reg.proj.dmgtype = "none"; + int reg.proj.aoe.range = 0; + int reg.proj.aoe.falloff = 0; + int reg.proj.stick.duration = 0; + int reg.proj.collidehitbox = 0; + int reg.proj.ignorenpc = 1; + int reg.proj.ignoreworld = 1; + SetMonsterClip(0); + RegisterProjectile(); + ScheduleDelayedEvent(60.0, "end_life"); + } + + void game_tossprojectile() + { + // TODO: UNCONVERTED: usable 0 + F_MP_DRAIN_RATE = MP_DRAIN_RATE; + MP_DRAIN_OVERRIDE = GetEntityProperty("ent_expowner", "scriptvar"); + if (MP_DRAIN_OVERRIDE != "DRAINER_POWER") + { + F_MP_DRAIN_RATE = MP_DRAIN_OVERRIDE; + } + // svplaysound: svplaysound 1 5 HOVER_SOUND + EmitSound(1, 5, HOVER_SOUND); + } + + void end_life() + { + CallExternal("ent_expowner", "drainer_died"); + // svplaysound: svplaysound 1 0 HOVER_SOUND + EmitSound(1, 0, HOVER_SOUND); + EmitSound(GetOwner(), 0, SOUND_POP, 10); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/proj_meteor.as b/scripts/angelscript/items/proj_meteor.as new file mode 100644 index 00000000..7cc97203 --- /dev/null +++ b/scripts/angelscript/items/proj_meteor.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjMeteor : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + float PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + + ProjMeteor() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 41; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_STICK_DURATION = 0; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_DAMAGESTAT = "spellcasting.fire"; + PROJ_DAMAGE = RandomInt(400, 500); + PROJ_AOE_RANGE = 512; + PROJ_AOE_FALLOFF = 0.4; + } + + void projectile_spawn() + { + SetName("Fireball"); + SetWeight(500); + SetSize(10); + SetValue(5); + SetGravity(0); + SetMonsterClip(0); + SetModelBody(0, 0); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + // svplaysound: svplaysound 0 10 weapons/mortar.wav + EmitSound(0, 10, "weapons/mortar.wav"); + } + + void projectile_landed() + { + Effect("screenshake", GetEntityOrigin(GetOwner()), 512, 10, 3.0, 512); + Effect("tempent", "spray", "bigsmoke.spr", /* TODO: $relpos */ $relpos(0, 0, 0), 0, 4, 0, 0); + EmitSound(GetOwner(), 0, "weapons/mortarhit.wav", 10); + } + + void game_hitnpc() + { + string MY_OWNER = GetEntityIndex("ent_expowner"); + string BURN_DAMAGE = GetSkillLevel("ent_expowner", "spellcasting.fire"); + BURN_DAMAGE *= 0.25; + if (!(IsValidPlayer(MY_OWNER))) + { + string BURN_DAMAGE = GetEntityProperty(MY_OWNER, "scriptvar"); + } + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 5, MY_OWNER, BURN_DAMAGE, "spellcasting.fire"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_mummy_pike.as b/scripts/angelscript/items/proj_mummy_pike.as new file mode 100644 index 00000000..5e27a32e --- /dev/null +++ b/scripts/angelscript/items/proj_mummy_pike.as @@ -0,0 +1,90 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjMummyPike : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjMummyPike() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 46; + ARROW_BODY_OFS = 46; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal1.wav"; + SOUND_BURN = "magic/ice_powerup.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "dark"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 50; + PROJ_AOE_RANGE = 30; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + } + + void arrow_spawn() + { + SetName("Cursed Pike"); + SetDescription("A cursed polearm"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0); + SetGroupable(25); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + string OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + string ENT_HIT = GetEntityIndex(param2); + if ((OWNER_ISPLAYER)) + { + if (!("game.pvp")) + { + } + if ((IsValidPlayer(ENT_HIT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + ApplyEffect(ENT_HIT, "effects/debuff_hold", 10.0); + CallExternal(MY_OWNER, "ext_projectile_hit"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_mummy_spear.as b/scripts/angelscript/items/proj_mummy_spear.as new file mode 100644 index 00000000..81fb6e75 --- /dev/null +++ b/scripts/angelscript/items/proj_mummy_spear.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjMummySpear : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjMummySpear() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 46; + ARROW_BODY_OFS = 46; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal1.wav"; + SOUND_BURN = "magic/ice_powerup.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "pierce"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 1; + PROJ_DAMAGE = 50; + PROJ_AOE_RANGE = 30; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + } + + void arrow_spawn() + { + SetName("Nasty Spear"); + SetDescription("Its really nasty"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0); + SetGroupable(25); + } + +} + +} diff --git a/scripts/angelscript/items/proj_poison.as b/scripts/angelscript/items/proj_poison.as new file mode 100644 index 00000000..a8306443 --- /dev/null +++ b/scripts/angelscript/items/proj_poison.as @@ -0,0 +1,86 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoison : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SPRITE; + + ProjPoison() + { + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 6; + PROJ_ANIM_IDLE = "idle_icebolt"; + SOUND_HITWALL1 = "weapons/bow/arrowhit1.wav"; + SOUND_HITWALL2 = "weapons/bow/arrowhit1.wav"; + MODEL_BODY_OFS = 6; + SPRITE = "poison.spr"; + PROJ_DAMAGE = RandomInt(4, 6); + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.2; + PROJ_DAMAGE_AOE_RANGE = 32; + PROJ_DAMAGE_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "poison"; + Precache(SPRITE); + } + + void arrow_spawn() + { + SetName("Glob of Spit"); + SetDescription("A glob of spit"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + } + + void game_fall() + { + } + + void game_hitwall() + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {"game.sound.maxvol", SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if (!(param1)) return; + int random = RandomInt(0, 1); + string MY_OWNER = GetEntityIndex("ent_expowner"); + if (random == 1) + { + ApplyEffect(param2, "effects/dot_poison", RandomInt(3, 5), MY_OWNER, Random(1.5, 2.0), "spellcasting.affliction"); + } + } + + void game_projectile_landed() + { + Effect("tempent", "trail", SPRITE, /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 0), 3, 1, 1, 15, 0); + SetExpireTime(0); + } + +} + +} diff --git a/scripts/angelscript/items/proj_poison_cloud.as b/scripts/angelscript/items/proj_poison_cloud.as new file mode 100644 index 00000000..a68dd21e --- /dev/null +++ b/scripts/angelscript/items/proj_poison_cloud.as @@ -0,0 +1,129 @@ +#pragma context server + +namespace MS +{ + +class ProjPoisonCloud : CGameScript +{ + string ITEM_NAME; + string MODEL_HANDS; + string MODEL_WORLD; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SCRIPT_1_ID; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPoisonCloud() + { + Precache("monsters/summon/poison_cloud2"); + } + + void OnSpawn() override + { + MODEL_HANDS = "none"; + MODEL_WORLD = "none"; + SOUND_HITWALL1 = "ambience/steamburst1.wav"; + SOUND_HITWALL2 = "ambience/steamburst1.wav"; + SOUND_BURN = "ambience/steamburst1.wav"; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "poison"; + PROJ_DAMAGESTAT = "spellcasting.affliction"; + PROJ_DAMAGE = 100; + PROJ_AOE_RANGE = 256; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + // TODO: movetype projectile + SetWorldModel(MODEL_WORLD); + projectile_spawn(); + string reg.proj.dmg = PROJ_DAMAGE; + string reg.proj.dmgtype = PROJ_DAMAGE_TYPE; + string reg.proj.aoe.range = PROJ_AOE_RANGE; + string reg.proj.aoe.falloff = PROJ_AOE_FALLOFF; + string reg.proj.stick.duration = PROJ_STICK_DURATION; + string reg.proj.collidehitbox = PROJ_COLLIDEHITBOX; + const string SCRIPT_1 = "items/proj_poison_cloud_cl"; + const string POISON_SPRITE = "poison_cloud.spr"; + Precache(POISON_SPRITE); + RegisterProjectile(); + } + + void game_tossprojectile() + { + ClientEvent("new", "all_in_sight", SCRIPT_1, GetEntityIndex(GetOwner())); + SCRIPT_1_ID = "game.script.last_sent_id"; + SetUseable(0); + game_fall(); + } + + void game_projectile_landed() + { + // TODO: movetype none + SetExpireTime(0); + projectile_landed(); + } + + void projectile_spawn() + { + SetName("Poison Cloud Spawner"); + SetWeight(500); + SetSize(1); + SetValue(5); + SetGravity(0.7); + SetGroupable(25); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + } + + void projectile_landed() + { + Effect("tempent", "trail", POISON_SPRITE, /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 10), 10, 2, 5, 10, 20); + ClientEvent("remove", "all", SCRIPT_1_ID); + string MY_OWNER = GetEntityIndex("ent_expowner"); + string pos = GetEntityOrigin(GetOwner()); + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + string EFFECT_DMG = GetSkillLevel(MY_OWNER, "spellcasting.affliction"); + EFFECT_DMG *= 0.6; + string EFFECT_DURATION = GetStat(MY_OWNER, "concentration"); + EFFECT_DURATION /= 2; + EFFECT_DURATION += EFFECT_DMG; + SpawnNPC("monsters/summon/poison_cloud2", pos, ScriptMode::Legacy); // params: MY_OWNER, PROJ_AOE_RANGE, EFFECT_DMG, EFFECT_DURATION, "spellcasting.affliction" + string LAST_ENT = GetEntityIndex(m_hLastCreated); + } + + void game_hitnpc() + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {"game.sound.maxvol", SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((GetEntityProperty(m_hLastStruckByMe, "haseffect"))) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + string EFFECT_DURATION_STAT = GetStat(MY_OWNER, "concentration.ratio"); + string EFFECT_DMG = GetSkillLevel(MY_OWNER, "spellcasting.affliction"); + int EFFECT_MAXDURATION = 15; + int EFFECT_MINDURATION = 10; + string EFFECT_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(EFFECT_DURATION_STAT, EFFECT_MINDURATION, EFFECT_MAXDURATION); + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", EFFECT_DURATION, MY_OWNER, EFFECT_DMG, "spellcasting.affliction"); + } + + void hitwall() + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {"game.sound.maxvol", SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/items/proj_poison_cloud_cl.as b/scripts/angelscript/items/proj_poison_cloud_cl.as new file mode 100644 index 00000000..9a824720 --- /dev/null +++ b/scripts/angelscript/items/proj_poison_cloud_cl.as @@ -0,0 +1,99 @@ +#pragma context server + +namespace MS +{ + +class ProjPoisonCloudCl : CGameScript +{ + float GLOW_DURATION; + string LIGHT_COLOR; + int LIGHT_RADIUS; + int OFS_NEG; + int OFS_POS; + int SPD_NEG; + int SPD_POS; + string SPRITE_1; + int script.duration; + string script.lightid; + string script.modelid; + + ProjPoisonCloudCl() + { + SPRITE_1 = "poison_cloud.spr"; + GLOW_DURATION = "$randf(1,2)"; + Precache(SPRITE_1); + OFS_POS = 15; + OFS_NEG = -15; + SPD_POS = 60; + SPD_NEG = -60; + LIGHT_RADIUS = 128; + LIGHT_COLOR = Vector3(0, 255, 0); + SetCallback("render", "enable"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.2); + string l.pos = /* TODO: $getcl */ $getcl(script.modelid, "origin"); + make_sprite_1(l.pos); + make_sprite_1(l.pos); + } + + void client_activate() + { + script.modelid = param1; + script.duration = 30; + if ((/* TODO: $getcl */ $getcl(script.modelid, "exists"))) + { + script_duration("effect_die"); + create_light(/* TODO: $getcl */ $getcl(script.modelid, "origin")); + } + else + { + effect_die(); + } + } + + void effect_die() + { + RemoveScript(); + ClientEvent("remove", script.modelid, script.lightid); + } + + void make_sprite_1() + { + string l.pos = param1; + l.pos += Vector3(Random(OFS_NEG, OFS_POS), Random(OFS_NEG, OFS_POS), Random(OFS_NEG, OFS_POS)); + ClientEffect("tempent", "sprite", SPRITE_1, l.pos, "setup_sprite_1"); + } + + void setup_sprite_1() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.2); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.2, 0.1)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, Random(0, 5))); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("tempent", "set_current_prop", "rendermodel", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", Random(128, 200)); + } + + void create_light() + { + if (!(param1 != "0")) return; + ClientEffect("light", "new", param1, LIGHT_RADIUS, LIGHT_COLOR, script.duration); + script.lightid = "game.script.last_light_id"; + } + + void game_prerender() + { + if (!(LIGHT_RADIUS > 0)) return; + string l.radius = LIGHT_RADIUS; + l.radius += Random(-8, 8); + ClientEffect("light", script.lightid, /* TODO: $getcl */ $getcl(script.modelid, "origin"), l.radius, LIGHT_COLOR, 1); + } + +} + +} diff --git a/scripts/angelscript/items/proj_poison_spell.as b/scripts/angelscript/items/proj_poison_spell.as new file mode 100644 index 00000000..c8875520 --- /dev/null +++ b/scripts/angelscript/items/proj_poison_spell.as @@ -0,0 +1,91 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoisonSpell : CGameScript +{ + int ARROW_BODY_OFS; + string EFFECT_DURATION; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string POISON_DAMAGE; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPoisonSpell() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 8; + ARROW_BODY_OFS = 8; + SOUND_HITWALL1 = "bullchicken/bc_acid1.wav"; + SOUND_HITWALL2 = "bullchicken/bc_acid1.wav"; + SOUND_BURN = "bullchicken/bc_acid1.wav"; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "poison"; + PROJ_DAMAGESTAT = "spellcasting.affliction"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_DAMAGE = 50; + PROJ_AOE_RANGE = 30; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 32; + } + + void projectile_spawn() + { + SetName("Poisoner"); + SetWeight(500); + SetSize(1); + SetValue(5); + SetGravity(0.0); + SetGroupable(25); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 128, 100, 100); + } + + void projectile_landed() + { + poison_landed(); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + string ENT_HIT = GetEntityIndex(param2); + string POISON_DAMAGE = GetSkillLevel(MY_OWNER, "spellcasting.affliction"); + POISON_DAMAGE *= 0.1; + if (POISON_DAMAGE < 0.1) + { + POISON_DAMAGE = 0.1; + } + string EFFECT_DURATION = POISON_DAMAGE; + EFFECT_DURATION *= 5; + EFFECT_DURATION += 30; + if (EFFECT_DURATION > 120) + { + EFFECT_DURATION = 120; + } + ApplyEffect(ENT_HIT, "effects/dot_poison", EFFECT_DURATION, MY_OWNER, POISON_DAMAGE, "spellcasting.affliction"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_poison_spit2.as b/scripts/angelscript/items/proj_poison_spit2.as new file mode 100644 index 00000000..65503831 --- /dev/null +++ b/scripts/angelscript/items/proj_poison_spit2.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoisonSpit2 : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SPRITE; + + ProjPoisonSpit2() + { + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 6; + SOUND_HITWALL1 = "debris/bustflesh2.wav"; + SOUND_HITWALL2 = "debris/bustflesh2.wav"; + MODEL_BODY_OFS = 6; + SPRITE = "poison.spr"; + PROJ_DAMAGE = RandomInt(10, 40); + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_COLLIDEHITBOX = 32; + ARROW_BREAK_CHANCE = 1.0; + PROJ_ANIM_IDLE = "spore_spinning"; + PROJ_AOE_RANGE = 32; + PROJ_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "poison"; + Precache(SPRITE); + } + + void arrow_spawn() + { + SetName("Glob of Spit"); + SetDescription("A glob of spit"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + } + + void game_fall() + { + } + + void hitwall() + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {"game.sound.maxvol", SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + ApplyEffect(param2, "effects/dot_poison", RandomInt(3, 10), MY_OWNER, Random(10, 20), "spellcasting.affliction"); + } + + void game_projectile_landed() + { + Effect("tempent", "trail", SPRITE, /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 0), 3, 1, 1, 15, 0); + SetExpireTime(0); + } + +} + +} diff --git a/scripts/angelscript/items/proj_pole_a.as b/scripts/angelscript/items/proj_pole_a.as new file mode 100644 index 00000000..c75ece95 --- /dev/null +++ b/scripts/angelscript/items/proj_pole_a.as @@ -0,0 +1,155 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoleA : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int DID_SPAWN_CHECK; + string GAME_PVP; + int HIT_NPC; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + float PROJ_CLOUD_DURATION; + int PROJ_COLLIDE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPoleA() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 70; + ARROW_BODY_OFS = 70; + ARROW_STICK_DURATION = 0; + ARROW_EXPIRE_DELAY = 0; + SOUND_HITWALL1 = "weapons/xbow_hit1.wav"; + SOUND_HITWALL2 = "weapons/xbow_hit1.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "acid"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDE = 1; + PROJ_CLOUD_DURATION = 20.0; + } + + void game_precache() + { + Precache("monsters/summon/affliction_lance"); + } + + void arrow_spawn() + { + SetName("Affliction Lance"); + SetDescription("You have been afflicted by this lance"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.8); + SetGroupable(25); + } + + void game_tossprojectile() + { + GAME_PVP = "game.pvp"; + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(0, 255, 0), 128, 1.5); + } + + void game_projectile_hitnpc() + { + HIT_NPC = 1; + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(param1) == "enemy")) return; + int L_DMG = 800; + string OWNER_SKILL_RATIO = GetSkillLevel("ent_expowner", "polearms"); + OWNER_SKILL_RATIO *= 0.01; + L_DMG *= OWNER_SKILL_RATIO; + int PUSH_STR = 800; + string TARG_ORG = GetEntityOrigin(param1); + string MY_ORG = GetEntityOrigin("ent_expowner"); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, PUSH_STR, 0))); + string POISON_DOT = GetSkillLevel("ent_expowner", "spellcasting.affliction"); + POISON_DOT *= 0.5; + ApplyEffect(param1, "effects/dot_acid", 5.0, GetEntityIndex("ent_expowner"), POISON_DOT, "polearms"); + if (!(IsEntityAlive(param1))) return; + XDoDamage(param1, "direct", L_DMG, 1.0, "ent_expowner", GetOwner(), "polearms", "acid"); + } + + void game_projectile_landed() + { + if ((HIT_NPC)) return; + if ((DID_SPAWN_CHECK)) return; + DID_SPAWN_CHECK = 1; + string MY_PITCH = GetEntityProperty(GetOwner(), "angles.pitch"); + if (MY_PITCH > 175) + { + if (MY_PITCH < 360) + { + } + int DO_PROJ = 1; + } + if (!(DO_PROJ)) return; + if (GetEntityMP("ent_expowner") < 20) + { + SendColoredMessage("ent_expowner", "Insuffcient mana for Afflictor."); + } + if (!(GetEntityMP("ent_expowner") >= 20)) return; + GiveMP("ent_expowner"); + string MY_ORG = GetEntityOrigin(GetOwner()); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(MY_ORG); + string MY_Z = (MY_ORG).z; + GROUND_Z += 64; + if (!(MY_Z < GROUND_Z)) return; + GROUND_Z -= 128; + if (!(MY_Z > GROUND_Z)) return; + string MY_ORG = GetEntityOrigin(GetOwner()); + LogDebug("game_projectile_landed MY_ORG"); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(MY_ORG); + MY_ORG = "z"; + string L_FX_ID = /* TODO: $get_scriptflag */ $get_scriptflag("ent_expowner", "pole_a", "name_value"); + if (L_FX_ID == "none") + { + SpawnNPC("monsters/summon/affliction_lance", MY_ORG, ScriptMode::Legacy); // params: GetEntityIndex("ent_expowner"), MY_ORG, GetEntityAngles(GetOwner()), PROJ_CLOUD_DURATION + } + else + { + CallExternal(L_FX_ID, "transfer_location", MY_ORG); + } + } + +} + +} diff --git a/scripts/angelscript/items/proj_pole_dra.as b/scripts/angelscript/items/proj_pole_dra.as new file mode 100644 index 00000000..2f68211f --- /dev/null +++ b/scripts/angelscript/items/proj_pole_dra.as @@ -0,0 +1,155 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoleDra : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + string BURN_TARGS; + int DID_FIREBURST; + string FIRE_DOT; + string GAME_PVP; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPoleDra() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 66; + ARROW_BODY_OFS = 66; + ARROW_STICK_DURATION = 5; + ARROW_EXPIRE_DELAY = 2; + SOUND_HITWALL1 = "weapons/xbow_hit1.wav"; + SOUND_HITWALL2 = "weapons/xbow_hit1.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_DAMAGESTAT = "spellcasting.fire"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 1; + PROJ_DAMAGE = 0; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDE = 1; + } + + void arrow_spawn() + { + SetName("Dragon Lance"); + SetDescription("Wait! I'm not a dragon!"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.8); + SetGroupable(25); + SetIdleAnim("idle_icebolt"); + } + + void game_projectile_hitnpc() + { + if ((IsValidPlayer(param1))) + { + if (!("game.pvp")) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + int L_DMG = 300; + string OWNER_SKILL_RATIO = GetSkillLevel("ent_expowner", "polearms"); + OWNER_SKILL_RATIO *= 0.01; + L_DMG *= OWNER_SKILL_RATIO; + XDoDamage(param1, "direct", L_DMG, 1.0, "ent_expowner", GetOwner(), "polearms", "fire"); + string L_DOT = GetSkillLevel("ent_expowner", "spellcasting.fire"); + if (!(L_DOT >= 15)) return; + if (L_DOT >= 20) + { + do_fire_burst(GetEntityOrigin(param1)); + } + LOT_DOT *= 0.5; + ApplyEffect(param1, "effects/dot_fire", 5.0, GetEntityIndex("ent_expowner"), L_DOT, "polearms"); + } + + void hitwall() + { + if (GetSkillLevel("ent_expowner", "spellcasting.fire") >= 20) + { + do_fire_burst(GetEntityOrigin(GetOwner())); + } + } + + void do_fire_burst() + { + if ((DID_FIREBURST)) return; + DID_FIREBURST = 1; + string PROJ_POS = param1; + string OWNER_POS = GetEntityOrigin("ent_expowner"); + LogDebug("do_fire_burst Distance(PROJ_POS, OWNER_POS)"); + if (!(Distance(PROJ_POS, OWNER_POS) > 128)) return; + string GROUND_HEIGHT = /* TODO: $get_ground_height */ $get_ground_height(PROJ_POS); + string Z_DIFF = (PROJ_POS).z; + Z_DIFF -= GROUND_HEIGHT; + if (Z_DIFF > 50) + { + int EXIT_SUB = 1; + } + if (Z_DIFF < -50) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PROJ_POS = "z"; + ClientEvent("new", "all", "effects/sfx_fire_burst", PROJ_POS, 128, 1, Vector3(255, 0, 0)); + PROJ_POS += "z"; + BURN_TARGS = FindEntitiesInSphere("any", 128); + if (!(BURN_TARGS != "none")) return; + GAME_PVP = "game.pvp"; + FIRE_DOT = GetSkillLevel("ent_expowner", "spellcasting.fire"); + FIRE_DOT *= 0.5; + for (int i = 0; i < GetTokenCount(BURN_TARGS, ";"); i++) + { + fire_burst_affect_targets(); + } + } + + void fire_burst_affect_targets() + { + string CUR_TARG = GetToken(BURN_TARGS, i, ";"); + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex("ent_expowner"), FIRE_DOT, "polearms"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_pole_harpoon.as b/scripts/angelscript/items/proj_pole_harpoon.as new file mode 100644 index 00000000..17996c8b --- /dev/null +++ b/scripts/angelscript/items/proj_pole_harpoon.as @@ -0,0 +1,113 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoleHarpoon : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + string GAME_PVP; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPoleHarpoon() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 58; + ARROW_BODY_OFS = 58; + ARROW_STICK_DURATION = 5; + ARROW_EXPIRE_DELAY = 2; + SOUND_HITWALL1 = "weapons/xbow_hit1.wav"; + SOUND_HITWALL2 = "weapons/xbow_hit1.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "pierce"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_MOTIONBLUR = 1; + PROJ_DAMAGE = 0; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDE = 1; + } + + void arrow_spawn() + { + SetName("Harpoon"); + SetDescription("This was probably meant for a whale"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.8); + SetGroupable(25); + } + + void game_tossprojectile() + { + GAME_PVP = "game.pvp"; + } + + void game_projectile_hitnpc() + { + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + int L_DMG = 175; + string OWNER_SKILL_RATIO = GetSkillLevel("ent_expowner", "polearms"); + OWNER_SKILL_RATIO *= 0.01; + L_DMG *= OWNER_SKILL_RATIO; + string CHARGE_LEVEL = GetEntityProperty("ent_expowner", "scriptvar"); + int PUSH_STR = 800; + PUSH_STR *= CHARGE_LEVEL; + LogDebug("game_projectile_hitnpc CHARGE_LEVEL"); + CHARGE_LEVEL *= 3.0; + CHARGE_LEVEL += 1.0; + L_DMG *= CHARGE_LEVEL; + string TARG_ORG = GetEntityOrigin(param1); + string OWNER_ORG = GetEntityOrigin("ent_expowner"); + float TARG_DIST = Distance(OWNER_ORG, TARG_ORG); + if (TARG_DIST < 256) + { + string DIST_RATIO = TARG_DIST; + DIST_RATIO /= 256; + LogDebug("too_close DIST_RATIO dist TARG_DIST"); + L_DMG *= DIST_RATIO; + } + XDoDamage(param1, "direct", L_DMG, 1.0, "ent_expowner", GetOwner(), "polearms", "pierce"); + string TARG_ORG = GetEntityOrigin(param1); + string MY_ORG = GetEntityOrigin("ent_expowner"); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, PUSH_STR, 0))); + } + +} + +} diff --git a/scripts/angelscript/items/proj_pole_holy.as b/scripts/angelscript/items/proj_pole_holy.as new file mode 100644 index 00000000..41a5797a --- /dev/null +++ b/scripts/angelscript/items/proj_pole_holy.as @@ -0,0 +1,103 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoleHoly : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + string GAME_PVP; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPoleHoly() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 61; + ARROW_BODY_OFS = 61; + ARROW_STICK_DURATION = 5; + ARROW_EXPIRE_DELAY = 2; + SOUND_HITWALL1 = "weapons/xbow_hit1.wav"; + SOUND_HITWALL2 = "weapons/xbow_hit1.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "holy"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDE = 1; + } + + void arrow_spawn() + { + SetName("Holy Lance"); + SetDescription("This holy weapon has made you holie"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.8); + SetGroupable(25); + } + + void game_tossprojectile() + { + GAME_PVP = "game.pvp"; + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 255), 128, 1.5); + } + + void game_projectile_hitnpc() + { + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(param1) == "enemy")) return; + int L_DMG = 800; + string OWNER_SKILL_RATIO = GetSkillLevel("ent_expowner", "polearms"); + OWNER_SKILL_RATIO *= 0.01; + L_DMG *= OWNER_SKILL_RATIO; + int PUSH_STR = 800; + string TARG_ORG = GetEntityOrigin(param1); + string MY_ORG = GetEntityOrigin("ent_expowner"); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, PUSH_STR, 0))); + string HOLY_DMG = GetSkillLevel("ent_expowner", "spellcasting.divination"); + HOLY_DMG *= 5.0; + CallExternal(param1, "turn_undead", HOLY_DMG, GetEntityIndex("ent_expowner")); + if (!(IsEntityAlive(param1))) return; + XDoDamage(param1, "direct", L_DMG, 1.0, "ent_expowner", GetOwner(), "polearms", "holy"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_pole_ph.as b/scripts/angelscript/items/proj_pole_ph.as new file mode 100644 index 00000000..35fea144 --- /dev/null +++ b/scripts/angelscript/items/proj_pole_ph.as @@ -0,0 +1,129 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPolePh : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + string GAME_PVP; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPolePh() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 46; + ARROW_BODY_OFS = 46; + ARROW_STICK_DURATION = 5; + ARROW_EXPIRE_DELAY = 2; + SOUND_HITWALL1 = "weapons/xbow_hit1.wav"; + SOUND_HITWALL2 = "weapons/xbow_hit1.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "lightning"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDE = 1; + } + + void arrow_spawn() + { + SetName("Lightning Lance"); + SetDescription("Zappy zappy!"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.8); + SetGroupable(25); + } + + void game_tossprojectile() + { + GAME_PVP = "game.pvp"; + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 0), 128, 1.5); + } + + void game_projectile_hitnpc() + { + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(param1) == "enemy")) return; + int L_DMG = 800; + string OWNER_SKILL_RATIO = GetSkillLevel("ent_expowner", "polearms"); + OWNER_SKILL_RATIO *= 0.01; + L_DMG *= OWNER_SKILL_RATIO; + XDoDamage(param1, "direct", L_DMG, 1.0, "ent_expowner", GetOwner(), "polearms", "lightning"); + if (!(IsEntityAlive(param1))) return; + if (GetEntityMP("ent_expowner") >= 100) + { + if (GetEntityHeight(param1) >= 64) + { + int TOO_BIG = 1; + } + if (GetEntityWidth(param1) >= 48) + { + TOO_BIG += 1; + } + if (TOO_BIG == 2) + { + SendColoredMessage("ent_expowner", "Force Cage: " + GetEntityName(param1) + " too large for force cage"); + } + else + { + int DO_HOLD = 1; + } + } + if ((DO_HOLD)) + { + GiveMP("ent_expowner"); + ApplyEffect(param1, "effects/debuff_hold", 10.0); + } + else + { + int PUSH_STR = 800; + PUSH_STR *= /* TODO: $get_takedmg */ $get_takedmg(param1, "lightning"); + string TARG_ORG = GetEntityOrigin(param1); + string MY_ORG = GetEntityOrigin("ent_expowner"); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, PUSH_STR, 0))); + ApplyEffect(param1, "effects/dot_lightning", 5.0, GetEntityIndex("ent_expowner"), GetSkillLevel("ent_expowner", "spellcasting.lightning")); + } + } + +} + +} diff --git a/scripts/angelscript/items/proj_pole_sl.as b/scripts/angelscript/items/proj_pole_sl.as new file mode 100644 index 00000000..93051b6e --- /dev/null +++ b/scripts/angelscript/items/proj_pole_sl.as @@ -0,0 +1,107 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoleSl : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_LIGHT_IDX; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPoleSl() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 73; + ARROW_BODY_OFS = 73; + ARROW_STICK_DURATION = 0; + ARROW_EXPIRE_DELAY = 0; + SOUND_HITWALL1 = "magic/dburst_sdr_blackout.wav"; + SOUND_HITWALL2 = "magic/dburst_sdr_blackout.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "dark"; + PROJ_DAMAGESTAT = "spellcasting.affliction"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDE = 1; + } + + void game_precache() + { + Precache("monsters/summon/affliction_lance"); + } + + void arrow_spawn() + { + SetName("Shadow Lance"); + SetDescription("You have been afflicted by this lance"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.8); + SetGroupable(25); + } + + void game_tossprojectile() + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 0, 255), 128, 1.5); + MY_LIGHT_IDX = "game.script.last_sent_id"; + // TODO: projectiletouch 0 + } + + void game_projectile_landed() + { + string L_MY_ORG = GetEntityOrigin(GetOwner()); + string L_MY_Z = (L_MY_ORG).z; + string L_MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(L_MY_ORG); + if (L_MY_GROUND > (L_MY_Z - 128)) + { + if (L_MY_GROUND < (L_MY_Z + 128)) + { + } + L_MY_ORG = "z"; + } + ClientEvent("new", "all", "items/proj_pole_sl_cl", GetEntityIndex(GetOwner())); + CallExternal("ent_expowner", "ext_dburst", L_MY_ORG, 96, 0, 0); + ClientEvent("update", "all", MY_LIGHT_IDX, "remove_light"); + if ((G_DEVELOPER_MODE)) + { + string L_BEAM_START = GetEntityOrigin(GetOwner()); + string L_BEAM_END = L_BEAM_START; + string L_MY_ANG = GetEntityAngles(GetOwner()); + L_MY_ANG = "x"; + L_BEAM_END += /* TODO: $relpos */ $relpos(L_MY_ANG, Vector3(0, -128, 0)); + Effect("beam", "point", "lgtning.spr", 20, L_BEAM_START, L_BEAM_END, Vector3(255, 255, 0), 200, 0, 5.0); + } + } + +} + +} diff --git a/scripts/angelscript/items/proj_pole_sl_cl.as b/scripts/angelscript/items/proj_pole_sl_cl.as new file mode 100644 index 00000000..42387cf3 --- /dev/null +++ b/scripts/angelscript/items/proj_pole_sl_cl.as @@ -0,0 +1,78 @@ +#pragma context server + +namespace MS +{ + +class ProjPoleSlCl : CGameScript +{ + string FX_ANGS; + string FX_OWNER; + int SPRITES_COUNT; + string SPRITES_DEST; + string SPRITES_DIR; + string SPRITES_ORG; + + void client_activate() + { + FX_OWNER = param1; + FX_ANGS = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + FX_ANGS = "x"; + SPRITES_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SPRITES_DEST = SPRITES_ORG; + SPRITES_DEST += /* TODO: $relpos */ $relpos(FX_ANGS, Vector3(0, -128, 0)); + SPRITES_DIR = (SPRITES_DEST - SPRITES_ORG).Normalize(); + SPRITES_COUNT = 0; + for (int i = 0; i < 8; i++) + { + do_sprites(); + } + ScheduleDelayedEvent(1.0, "end_fx"); + } + + void end_fx() + { + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void do_sprites() + { + string L_SPR_POS = SPRITES_ORG; + string L_SPR_ADD = SPRITES_DIR; + L_SPR_ADD *= SPRITES_COUNT; + L_SPR_POS += L_SPR_ADD; + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_SPR_POS, "setup_poof", "update_poof"); + SPRITES_COUNT += 16; + } + + void update_poof() + { + string L_CUR_SCALE = "game.tempent.fuser1"; + if (!(L_CUR_SCALE > 0)) return; + L_CUR_SCALE -= 0.01; + ClientEffect("tempent", "set_current_prop", "scale", L_CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", L_CUR_SCALE); + } + + void setup_poof() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(32, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "scale", 0.75); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.75); + ClientEffect("tempent", "set_current_prop", "gravity", -0.25); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_pole_spear.as b/scripts/angelscript/items/proj_pole_spear.as new file mode 100644 index 00000000..b5685ea2 --- /dev/null +++ b/scripts/angelscript/items/proj_pole_spear.as @@ -0,0 +1,92 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoleSpear : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPoleSpear() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 57; + ARROW_BODY_OFS = 57; + ARROW_STICK_DURATION = 5; + SOUND_HITWALL1 = "weapons/xbow_hit1.wav"; + SOUND_HITWALL2 = "weapons/xbow_hit1.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "pierce"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 1; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_DAMAGE = 1; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDE = 1; + } + + void arrow_spawn() + { + SetName("Wooden Spear"); + SetDescription("A pointy ended stick that someone threw"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.8); + SetGroupable(25); + SetIdleAnim("idle_icebolt"); + } + + void game_projectile_hitnpc() + { + int L_DMG = 75; + string OWNER_SKILL_RATIO = GetSkillLevel("ent_expowner", "polearms"); + OWNER_SKILL_RATIO *= 0.01; + L_DMG *= OWNER_SKILL_RATIO; + string CHARGE_LEVEL = GetEntityProperty("ent_expowner", "scriptvar"); + LogDebug("game_projectile_hitnpc CHARGE_LEVEL"); + CHARGE_LEVEL *= 2.0; + CHARGE_LEVEL += 1.0; + L_DMG *= CHARGE_LEVEL; + string TARG_ORG = GetEntityOrigin(param1); + string OWNER_ORG = GetEntityOrigin("ent_expowner"); + float TARG_DIST = Distance(OWNER_ORG, TARG_ORG); + if (TARG_DIST < 256) + { + string DIST_RATIO = TARG_DIST; + DIST_RATIO /= 256; + LogDebug("too_close DIST_RATIO dist TARG_DIST"); + L_DMG *= DIST_RATIO; + } + XDoDamage(param1, "direct", L_DMG, 1.0, "ent_expowner", GetOwner(), "polearms", "pierce"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_pole_ti.as b/scripts/angelscript/items/proj_pole_ti.as new file mode 100644 index 00000000..a8014f91 --- /dev/null +++ b/scripts/angelscript/items/proj_pole_ti.as @@ -0,0 +1,121 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoleTi : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + string GAME_PVP; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPoleTi() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 60; + ARROW_BODY_OFS = 60; + ARROW_STICK_DURATION = 5; + ARROW_EXPIRE_DELAY = 2; + SOUND_HITWALL1 = "weapons/xbow_hit1.wav"; + SOUND_HITWALL2 = "weapons/xbow_hit1.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "pierce"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 1; + PROJ_DAMAGE = 1; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDE = 1; + SOUND_HITWALL1 = "debris/glass1.wav"; + SOUND_HITWALL2 = "debris/glass2.wav"; + } + + void arrow_spawn() + { + SetName("Ice Typhoon"); + SetDescription("Death by popsicle!"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.8); + SetGroupable(25); + SetIdleAnim("idle_icebolt"); + } + + void game_tossprojectile() + { + GAME_PVP = "game.pvp"; + } + + void game_projectile_hitnpc() + { + int L_DMG = 300; + string OWNER_SKILL_RATIO = GetSkillLevel("ent_expowner", "polearms"); + OWNER_SKILL_RATIO *= 0.01; + L_DMG *= OWNER_SKILL_RATIO; + string CHARGE_LEVEL = GetEntityProperty("ent_expowner", "scriptvar"); + int PUSH_STR = 800; + PUSH_STR *= CHARGE_LEVEL; + LogDebug("game_projectile_hitnpc CHARGE_LEVEL"); + CHARGE_LEVEL *= 1.5; + CHARGE_LEVEL += 1.0; + L_DMG *= CHARGE_LEVEL; + XDoDamage(param1, "direct", L_DMG, 1.0, "ent_expowner", GetOwner(), "polearms", "cold"); + string L_DOT = GetSkillLevel("ent_expowner", "spellcasting.ice"); + if (!(L_DOT >= 25)) return; + string CUR_TARG = param1; + string MAX_FREEZE_HP = GetEntityMaxHealth("ent_expowner"); + MAX_FREEZE_HP *= 5.0; + if (GetEntityHealth(CUR_TARG) < MAX_FREEZE_HP) + { + int DO_FREEZE = 1; + } + if (GetEntityHealth(CUR_TARG) < 3000) + { + int DO_FREEZE = 1; + } + if (GetEntityMP("ent_expowner") < 10) + { + int DO_FREEZE = 0; + } + LogDebug("do_freeze DO_FREEZE vs GetEntityHealth(CUR_TARG)"); + if (!(DO_FREEZE)) + { + ApplyEffect(CUR_TARG, "effects/dot_cold", 5.0, GetEntityIndex("ent_expowner"), L_DOT, "polearms"); + } + else + { + L_DOT *= 0.5; + GiveMP("ent_expowner"); + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", Random(6.0, 10.0), GetEntityIndex("ent_expowner"), L_DOT, "spellcasting.ice", MAX_FREEZE_HP); + } + } + +} + +} diff --git a/scripts/angelscript/items/proj_pole_trident.as b/scripts/angelscript/items/proj_pole_trident.as new file mode 100644 index 00000000..e9831d81 --- /dev/null +++ b/scripts/angelscript/items/proj_pole_trident.as @@ -0,0 +1,91 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjPoleTrident : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + string GAME_PVP; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjPoleTrident() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 59; + ARROW_BODY_OFS = 59; + ARROW_STICK_DURATION = 5; + ARROW_EXPIRE_DELAY = 2; + SOUND_HITWALL1 = "weapons/xbow_hit1.wav"; + SOUND_HITWALL2 = "weapons/xbow_hit1.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "pierce"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 1; + PROJ_DAMAGE = 1; + PROJ_AOE_RANGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDE = 1; + } + + void arrow_spawn() + { + SetName("Trident"); + SetDescription("Three prongs for your chest"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.8); + SetGroupable(25); + SetIdleAnim("idle_icebolt"); + } + + void game_tossprojectile() + { + GAME_PVP = "game.pvp"; + } + + void game_projectile_hitnpc() + { + int L_DMG = 175; + string OWNER_SKILL_RATIO = GetSkillLevel("ent_expowner", "polearms"); + OWNER_SKILL_RATIO *= 0.01; + L_DMG *= OWNER_SKILL_RATIO; + string CHARGE_LEVEL = GetEntityProperty("ent_expowner", "scriptvar"); + int PUSH_STR = 800; + PUSH_STR *= CHARGE_LEVEL; + LogDebug("game_projectile_hitnpc CHARGE_LEVEL"); + CHARGE_LEVEL *= 1.5; + CHARGE_LEVEL += 1.0; + L_DMG *= CHARGE_LEVEL; + XDoDamage(param1, "direct", L_DMG, 1.0, "ent_expowner", GetOwner(), "polearms", "pierce"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_server_arrow.as b/scripts/angelscript/items/proj_server_arrow.as new file mode 100644 index 00000000..0249d64f --- /dev/null +++ b/scripts/angelscript/items/proj_server_arrow.as @@ -0,0 +1,156 @@ +#pragma context server + +#include "items/proj_arrow_base.as" +#include "items/proj_base.as" + +namespace MS +{ + +class ProjServerArrow : CGameScript +{ + string ANIM_DEPLOY; + string ANIM_DROPPED; + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + string MODEL_HANDS; + string MODEL_WORLD; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGETYPE; + int PROJ_MOTIONBLUR; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SPRITE_ARROW_HAND; + string SPRITE_ARROW_TRADE; + + ProjServerArrow() + { + ARROW_BODY_OFS = 0; + SPRITE_ARROW_TRADE = "woodenarrow"; + PROJ_DAMAGE = RandomInt(30, 60); + ARROW_STICK_DURATION = 10; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.2; + PROJ_MOTIONBLUR = 1; + MODEL_HANDS = "weapons/bows/arrows.mdl"; + MODEL_WORLD = "weapons/bows/arrows.mdl"; + SOUND_HITWALL1 = "weapons/bow/arrowhit1.wav"; + SOUND_HITWALL2 = "weapons/bow/arrowhit1.wav"; + SPRITE_ARROW_TRADE = "woodenarrow"; + SPRITE_ARROW_HAND = "arrows"; + ANIM_DEPLOY = "idle2"; + ANIM_DROPPED = "idle1"; + ARROW_EXPIRE_DELAY = 10; + PROJ_DAMAGETYPE = "pierce"; + PROJ_COLLIDEHITBOX = 1; + } + + void OnSpawn() override + { + // TODO: movetype projectile + SetWorldModel(MODEL_WORLD); + projectile_spawn(); + string reg.proj.dmg = PROJ_DAMAGE; + string reg.proj.dmgtype = PROJ_DAMAGE_TYPE; + string reg.proj.aoe.range = PROJ_AOE_RANGE; + string reg.proj.aoe.falloff = PROJ_AOE_FALLOFF; + string reg.proj.stick.duration = PROJ_STICK_DURATION; + string reg.proj.collidehitbox = PROJ_COLLIDEHITBOX; + RegisterProjectile(); + } + + void game_tossprojectile() + { + SetUseable(0); + if ((PROJ_MOTIONBLUR)) + { + ClientEvent("new", "all_in_sight", "effects/sfx_motionblur", GetEntityIndex(GetOwner())); + } + game_fall(); + game_fall(); + } + + void game_projectile_landed() + { + // TODO: movetype none + SetExpireTime(0); + projectile_landed(); + } + + void arrow_spawn() + { + SetName("Server Arrow"); + SetDescription("For testing server side projectiles"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.75); + } + + void projectile_spawn() + { + SetGroupable(25); + SetWorldModel(MODEL_WORLD); + SetHUDSprite("hand", SPRITE_ARROW_HAND); + SetHUDSprite("trade", SPRITE_ARROW_TRADE); + SetHand("left"); + arrow_spawn(); + } + + void OnDeploy() override + { + SetModel(MODEL_HANDS); + PlayAnim("once", ANIM_DEPLOY); + string MB_TEMP = "game.item.hand_index"; + MB_TEMP += 1; + MB_TEMP += ARROW_BODY_OFS; + SetModelBody(0, MB_TEMP); + arrow_deploy(); + } + + void game_fall() + { + SetModelBody(0, ARROW_BODY_OFS); + PlayAnim("once", ANIM_DROPPED); + } + + void game_projectile_hitwall() + { + // PlayRandomSound from: SOUND_HITWALL1, SOUND_HITWALL2 + array sounds = {SOUND_HITWALL1, SOUND_HITWALL2}; + EmitSound(GetOwner(), 4, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void game_projectile_hitnpc() + { + if (ARROW_STICK_DURATION > 0) + { + SetFollow(m_hLastStruckByMe); + SetExpireTime(ARROW_STICK_DURATION); + ARROW_STICK_DURATION("arrow_unstick"); + } + SetExpireTime(0); + } + + void arrow_unstick() + { + SetFollow("none"); + } + + void projectile_landed() + { + SetExpireTime(ARROW_EXPIRE_DELAY); + } + + void arrow_breakchance() + { + if (!(RandomInt(0, 99) < ARROW_BREAK_CHANCE)) return; + projectile_broke(); + } + +} + +} diff --git a/scripts/angelscript/items/proj_simple_cl.as b/scripts/angelscript/items/proj_simple_cl.as new file mode 100644 index 00000000..ac71d0f9 --- /dev/null +++ b/scripts/angelscript/items/proj_simple_cl.as @@ -0,0 +1,329 @@ +#pragma context server + +namespace MS +{ + +class ProjSimpleCl : CGameScript +{ + string BEST_BONE_DIST; + int FX_ACTIVE; + string FX_ANGLES; + string FX_ANIM_IDX; + string FX_DO_STICK; + string FX_EXP_OWNER; + float FX_FREMOVE_DELAY; + string FX_GRAVITY; + int FX_IN_FLIGHT; + float FX_MAX_DURATION; + string FX_MBLUR_ANGLES; + string FX_MODEL_NAME; + string FX_MODEL_OFS; + string FX_ORIGIN; + string FX_OWNER; + float FX_SCALE; + string FX_SPECIAL; + string FX_STICK_ANGS; + string FX_STICK_DIR; + string FX_STICK_DIST; + string FX_STICK_OFS_SET; + int FX_STICK_TARGET; + int FX_SV_UPDATE; + int FX_UPDATE_ANG; + int FX_UPDATE_ORG; + int FX_UPDATE_SPECIAL; + int FX_UPDATE_VEL; + string FX_USE_BONE; + string FX_USE_MOTIONBLUR; + string FX_VELOCITY; + + void client_activate() + { + SetCallback("render", "enable"); + FX_OWNER = param1; + FX_EXP_OWNER = param2; + string L_INFO_STRING = param3; + FX_MODEL_NAME = param4; + FX_MODEL_OFS = param5; + FX_USE_MOTIONBLUR = param6; + FX_SPECIAL = param7; + FX_MAX_DURATION = 5.0; + FX_SCALE = 1.0; + FX_FREMOVE_DELAY = 0.25; + FX_ACTIVE = 1; + FX_IN_FLIGHT = 1; + FX_UPDATE_ORG = 0; + FX_UPDATE_ANG = 0; + FX_UPDATE_VEL = 0; + FX_ORIGIN = GetToken(L_INFO_STRING, 0, ";"); + FX_ANGLES = GetToken(L_INFO_STRING, 1, ";"); + FX_VELOCITY = GetToken(L_INFO_STRING, 2, ";"); + FX_ANIM_IDX = GetToken(L_INFO_STRING, 3, ";"); + FX_GRAVITY = GetToken(L_INFO_STRING, 4, ";"); + FX_DO_STICK = GetToken(L_INFO_STRING, 5, ";"); + FX_STICK_TARGET = 0; + if (FX_ANIM_IDX == -1) + { + FX_ANIM_IDX = 0; + } + ClientEffect("tempent", "model", FX_MODEL_NAME, FX_ORIGIN, "make_clfx_proj", "update_clfx_proj", "collide_clfx_proj"); + FX_MAX_DURATION("end_fx"); + } + + void end_fx() + { + if ((FX_DO_STICK)) + { + if (param1 == "touch_remove") + { + int L_ABORT_REMOVE = 1; + } + if (param1 == "strike_target") + { + int L_ABORT_REMOVE = 1; + } + if (param1 == "landed") + { + int L_ABORT_REMOVE = 1; + } + if ((L_ABORT_REMOVE)) + { + } + ScheduleDelayedEvent(5.0, "end_fx"); + return; + } + FX_ACTIVE = 0; + FX_FREMOVE_DELAY("remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void ext_scale() + { + FX_SCALE = param1; + FX_UPDATE_SPECIAL = 1; + } + + void ext_lighten() + { + FX_GRAVITY = param1; + FX_UPDATE_SPECIAL = 1; + } + + void ext_touch() + { + if ((/* TODO: $getcl */ $getcl(param1, "isalive"))) return; + end_fx(); + } + + void ext_hitnpc() + { + FX_STICK_TARGET = param1; + FX_IN_FLIGHT = 0; + } + + void ext_update() + { + if (!(FX_IN_FLIGHT)) return; + FX_SV_UPDATE = 1; + FX_ORIGIN = param1; + FX_ANGLES = param2; + FX_VELOCITY = param3; + } + + void make_clfx_proj() + { + ClientEffect("tempent", "set_current_prop", "origin", FX_ORIGIN); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "scale", FX_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", FX_GRAVITY); + ClientEffect("tempent", "set_current_prop", "angles", FX_ANGLES); + ClientEffect("tempent", "set_current_prop", "velocity", FX_VELOCITY); + if ((FX_DO_STICK)) + { + ClientEffect("tempent", "set_current_prop", "collide", "world"); + } + else + { + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + } + ClientEffect("tempent", "set_current_prop", "body", FX_MODEL_OFS); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 16); + ClientEffect("tempent", "set_current_prop", "sequence", FX_ANIM_IDX); + } + + void update_clfx_proj() + { + if ((FX_ACTIVE)) + { + if ((FX_IN_FLIGHT)) + { + if ((FX_SV_UPDATE)) + { + FX_SV_UPDATE = 0; + string L_MY_POS = "game.tempent.origin"; + if (Distance(FX_UPDATE_ORG, L_MY_POS) > 100) + { + ClientEffect("tempent", "set_current_prop", "origin", FX_ORIGIN); + } + ClientEffect("tempent", "set_current_prop", "angles", FX_ANGLES); + ClientEffect("tempent", "set_current_prop", "velocity", FX_VELOCITY); + } + if ((FX_UPDATE_SPECIAL)) + { + FX_UPDATE_SPECIAL = 0; + ClientEffect("tempent", "set_current_prop", "scale", FX_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", FX_GRAVITY); + } + if ((FX_USE_MOTIONBLUR)) + { + fx_motion_blur(); + } + } + else + { + if ((FX_DO_STICK)) + { + if (FX_STICK_TARGET != 0) + { + if ((/* TODO: $getcl */ $getcl(FX_STICK_TARGET, "exists"))) + { + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", 0); + string L_STICK_POINT = /* TODO: $getcl */ $getcl(FX_STICK_TARGET, "origin"); + if (FX_USE_BONE > -1) + { + string L_STICK_POINT = /* TODO: $getcl */ $getcl(FX_STICK_TARGET, "bonepos", FX_USE_BONE); + } + string L_MY_POS = "game.tempent.origin"; + if (!(FX_STICK_OFS_SET)) + { + FX_STICK_OFS_SET = 1; + FX_STICK_DIR = (L_MY_POS - L_STICK_POINT).Normalize(); + FX_STICK_DIST = Distance(L_MY_POS, L_STICK_POINT); + FX_STICK_DIR *= FX_STICK_DIST; + ClientEffect("tempent", "set_current_prop", "framerate", 0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + FX_STICK_ANGS = "game.tempent.angles"; + } + string L_TARG_YAW = /* TODO: $getcl */ $getcl(FX_STICK_TARGET, "angles"); + string L_TARG_YAW = (L_TARG_YAW).y; + L_TARG_YAW += 180; + if (L_TARG_YAW > 359.99) + { + L_TARG_ANG -= 359.99; + } + string L_NEW_ANG = FX_STICK_ANGS; + L_NEW_ANG = "y"; + ClientEffect("tempent", "set_current_prop", "angles", L_NEW_ANG); + L_STICK_POINT += FX_STICK_DIR; + ClientEffect("tempent", "set_current_prop", "origin", L_STICK_POINT); + } + else + { + end_fx(); + } + } + } + else + { + end_fx(); + } + } + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(5000, 5000, 5000)); + } + } + + void fx_motion_blur() + { + FX_MBLUR_ANGLES = "game.tempent.angles"; + ClientEffect("tempent", "model", FX_MODEL_NAME, "game.tempent.origin", "setup_motion_blur"); + } + + void setup_motion_blur() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.15); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", FX_MBLUR_ANGLES); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", FX_MODEL_OFS); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 50); + } + + void collide_clfx_proj() + { + FX_IN_FLIGHT = 0; + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + if ((FX_DO_STICK)) + { + if (param1 != "world") + { + } + if (param1 > 0) + { + } + FX_STICK_TARGET = param1; + string L_N_BONES = /* TODO: $getcl */ $getcl(FX_STICK_TARGET, "bonecount"); + if (L_N_BONES == 0) + { + FX_USE_BONE = -1; + } + else + { + BEST_BONE_DIST = 9999; + FX_PROJ_POS = "game.tempent.origin"; + for (int i = 0; i < L_N_BONES; i++) + { + find_nearest_bone(); + } + } + string L_MY_POS = "game.tempent.origin"; + string L_STICK_POINT = /* TODO: $getcl */ $getcl(FX_STICK_TARGET, "origin"); + if (FX_USE_BONE > -1) + { + string L_STICK_POINT = /* TODO: $getcl */ $getcl(FX_STICK_TARGET, "bonepos", FX_USE_BONE); + } + FX_STICK_OFS_SET = 1; + FX_STICK_DIR = (L_MY_POS - L_STICK_POINT).Normalize(); + FX_STICK_DIST = Distance(L_MY_POS, L_STICK_POINT); + FX_STICK_DIR *= FX_STICK_DIST; + L_STICK_POINT += FX_STICK_DIST; + ClientEffect("tempent", "set_current_prop", "origin", L_STICK_POINT); + FX_STICK_ANGS = "game.tempent.angles"; + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(5000, 5000, 5000)); + } + } + + void find_nearest_bone() + { + string L_CUR_BONE = i; + if (!(L_CUR_BONE > 0)) return; + string L_CUR_BONE_POS = /* TODO: $getcl */ $getcl(FX_STICK_TARGET, "bonepos", L_CUR_BONE); + float L_CUR_BONE_DIST = Distance(FX_PROJ_POS, L_CUR_BONE_POS); + if (L_CUR_BONE_DIST < BEST_BONE_DIST) + { + FX_USE_BONE = L_CUR_BONE; + BEST_BONE_DIST = L_CUR_BONE_DIST; + } + } + +} + +} diff --git a/scripts/angelscript/items/proj_slime_jet_cl.as b/scripts/angelscript/items/proj_slime_jet_cl.as new file mode 100644 index 00000000..c1a88e7e --- /dev/null +++ b/scripts/angelscript/items/proj_slime_jet_cl.as @@ -0,0 +1,94 @@ +#pragma context client + +namespace MS +{ + +class ProjSlimeJetCl : CGameScript +{ + string CL_LIGHT_ID; + int FX_ACTIVE; + string GLOW_COLOR; + int GLOW_RAD; + float MAX_DURATION; + string MY_OWNER; + string PASS_SPRITE; + int ROT_COUNT; + string SPRITE_SCALE; + + ProjSlimeJetCl() + { + GLOW_RAD = 96; + GLOW_COLOR = Vector3(255, 128, 64); + MAX_DURATION = 2.0; + } + + void client_activate() + { + SetCallback("render", "enable"); + MY_OWNER = param1; + PASS_SPRITE = param2; + if ((param4).findFirst(PARAM) == 0) + { + SPRITE_SCALE = 0.75; + } + else + { + SPRITE_SCALE = param4; + } + FX_ACTIVE = 1; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 0.25); + CL_LIGHT_ID = "game.script.last_light_id"; + ROT_COUNT = 0; + fx_loop(); + if ((param3).findFirst("PARAM") == 0) + { + MAX_DURATION("end_fx"); + } + else + { + PARAM3("end_fx"); + } + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.05, "fx_loop"); + string SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + ClientEffect("tempent", "sprite", PASS_SPRITE, SPRITE_POS, "setup_sprite"); + } + + void end_fx() + { + if (!(FX_ACTIVE)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + string L_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + if (!(/* TODO: $getcl */ $getcl(MY_OWNER, "exists"))) return; + ClientEffect("light", CL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 0.25); + } + + void setup_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 19); + } + +} + +} diff --git a/scripts/angelscript/items/proj_snow_ball.as b/scripts/angelscript/items/proj_snow_ball.as new file mode 100644 index 00000000..bfb76b28 --- /dev/null +++ b/scripts/angelscript/items/proj_snow_ball.as @@ -0,0 +1,101 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjSnowBall : CGameScript +{ + string EFFECT_DURATION; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + string SOUND_SMOOSH; + string SOUND_WOOSH; + + ProjSnowBall() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 2; + PROJ_ANIM_IDLE = "idle_iceball"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_DAMAGE = 100; + PROJ_AOE_RANGE = 256; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_COLLIDEHITBOX = 16; + SOUND_WOOSH = "doors/aliendoor3.wav"; + SOUND_SMOOSH = "debris/beamstart14.wav"; + Precache("xflare1.spr"); + } + + void projectile_spawn() + { + SetName("Snow Ball of Dewm"); + SetWeight(500); + SetSize(10); + SetValue(5); + SetGravity(0.05); + SetGroupable(25); + SetHUDSprite("hand", "arrows"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("any"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void game_tossprojectile() + { + // svplaysound: svplaysound 0 10 SOUND_WOOSH + EmitSound(0, 10, SOUND_WOOSH); + } + + void projectile_landed() + { + EmitSound(GetOwner(), 0, SOUND_SMOOSH, 10); + Effect("tempent", "trail", "xflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 1, 1), 1, 1.0, 15.0, 1.0, 0); + } + + void game_dodamage() + { + if (!(param1)) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + string MY_OWNER_PLAYER = IsValidPlayer("ent_expowner"); + string ENT_HIT = GetEntityIndex(param2); + string EFFECT_DURATION = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + EFFECT_DURATION *= 0.5; + if (!(MY_OWNER_PLAYER)) + { + string EFFECT_DURATION = GetEntityProperty(MY_OWNER, "scriptvar"); + } + if (EFFECT_DURATION < 3) + { + EFFECT_DURATION = 3; + } + if ((MY_OWNER_PLAYER)) + { + string OUT_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.ice"); + } + if (!(MY_OWNER_PLAYER)) + { + float OUT_DAMAGE = 20.0; + } + ApplyEffect(ENT_HIT, "effects/dot_cold", EFFECT_DURATION, GetEntityIndex(GetOwner()), OUT_DAMAGE, "spellcasting.ice"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_snow_ball2.as b/scripts/angelscript/items/proj_snow_ball2.as new file mode 100644 index 00000000..1fc82253 --- /dev/null +++ b/scripts/angelscript/items/proj_snow_ball2.as @@ -0,0 +1,123 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjSnowBall2 : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int DID_ICE_SPIKES; + string DMG_ICE; + int DMG_SET; + string ICE_AMT; + string ICE_RADIUS; + int MODEL_BODY_OFS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjSnowBall2() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 9; + MODEL_BODY_OFS = 9; + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 0; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + SOUND_HITWALL1 = "fire.wav"; + SOUND_HITWALL2 = "fire.wav"; + PROJ_DAMAGE_TYPE = "siege"; + PROJ_DAMAGE = RandomInt(200, 300); + PROJ_AOE_RANGE = 200; + PROJ_AOE_FALLOFF = 1; + Precache("rockgibs.mdl"); + } + + void arrow_spawn() + { + SetName("Ice Boulder"); + SetDescription("A giant rock"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.4); + SetGroupable(25); + } + + void projectile_landed() + { + if ((DID_ICE_SPIKES)) return; + ice_spikes(GetEntityOrigin(GetOwner())); + } + + void game_projectile_hitnpc() + { + if ((DID_ICE_SPIKES)) return; + ice_spikes(GetEntityOrigin(param1)); + } + + void ice_spikes() + { + DID_ICE_SPIKES = 1; + Effect("screenshake", param1, 100, 5, 3, 500); + string SPRITE_START = param1; + string SPRITE_DEST = SPRITE_START; + SPRITE_DEST += "z"; + Effect("tempent", "trail", "blueflare1.spr", SPRITE_START, SPRITE_DEST, 2, 0.1, 9, 30, 0); + string MY_OWNER = GetEntityIndex("ent_expowner"); + if (!(DMG_SET)) + { + string DMG_ICE = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + string ICE_RADIUS = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + ICE_RADIUS *= 10; + int ICE_AMT = 10; + ICE_AMT += DMG_ICE; + } + string SPAWN_POS = param1; + string MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(SPAWN_POS); + SPAWN_POS = "z"; + SpawnNPC("monsters/summon/ice_spikes", SPAWN_POS, ScriptMode::Legacy); // params: MY_OWNER, DMG_ICE, ICE_RADIUS, ICE_AMT, "spellcasting.ice" + ScheduleDelayedEvent(0.1, "vanish"); + } + + void set_dmg() + { + DMG_SET = 1; + DMG_ICE = param1; + ICE_RADIUS = param2; + ICE_AMT = param3; + SetGravity(param4); + } + + void vanish() + { + DeleteEntity(GetOwner()); + } + + void hitwall() + { + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + } + + void game_dodamage() + { + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + if (!(param1)) return; + CallExternal(param2, "hit_by_siege"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_spore.as b/scripts/angelscript/items/proj_spore.as new file mode 100644 index 00000000..40441b00 --- /dev/null +++ b/scripts/angelscript/items/proj_spore.as @@ -0,0 +1,101 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjSpore : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_EXPIRE_DELAY; + int ARROW_SOLIDIFY_ON_WALL; + int ARROW_STICK_DURATION; + int MODEL_BODY_OFS; + string MODEL_WORLD; + string MY_OWNER; + string PROJ_ANIM_IDLE; + int PROJ_DAMAGE; + string PROJ_DAMAGETYPE; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + int SPAWNED_CLOUD; + string SPORE_STR; + string SPRITE_ARROW_TRADE; + + ProjSpore() + { + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_DAMAGE = RandomInt(60, 90); + MODEL_BODY_OFS = 23; + ARROW_BODY_OFS = 23; + PROJ_ANIM_IDLE = "spore_spinning"; + PROJ_DAMAGETYPE = "poison"; + SOUND_HITWALL1 = "ambience/steamburst1.wav"; + SOUND_HITWALL2 = "ambience/steamburst1.wav"; + SOUND_BURN = "ambience/steamburst1.wav"; + SPRITE_ARROW_TRADE = "woodenarrow"; + ARROW_STICK_DURATION = 10; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 0.01; + ARROW_EXPIRE_DELAY = 5; + MODEL_WORLD = "weapons/projectiles.mdl"; + } + + void arrow_spawn() + { + SetName("spore sack"); + SetDescription("a spore sack"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.001); + SetUseable(0); + } + + void game_tossprojectile() + { + PlayAnim("once", "spore_spinning"); + SetIdleAnim("spore_spinning"); + SetMoveAnim("spore_spinning"); + MY_OWNER = GetEntityIndex("ent_expowner"); + string OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + if ((OWNER_ISPLAYER)) + { + SPORE_STR = GetSkillLevel(MY_OWNER, "spellcasting.affliction"); + } + if (!(OWNER_ISPLAYER)) + { + SPORE_STR = GetEntityProperty(MY_OWNER, "scriptvar"); + } + } + + void game_projectile_hitwall() + { + LogDebug("game_projectile_hitwall GetEntityOrigin(GetOwner())"); + if ((SPAWNED_CLOUD)) return; + SPAWNED_CLOUD = 1; + MY_OWNER = GetEntityIndex("ent_expowner"); + SpawnNPC("monsters/summon/npc_poison_cloud2", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: MY_OWNER, SPORE_STR, 10.0, 2 + } + + void game_projectile_landed() + { + LogDebug("game_projectile_landed GetEntityOrigin(GetOwner())"); + MY_OWNER = GetEntityIndex("ent_expowner"); + XDoDamage(GetEntityOrigin(GetOwner()), 256, SPORE_POISON_DMG, 0, MY_OWNER, MY_OWNER, "spellcasting.affliction", "poison"); + } + + void game_projectile_hitnpc() + { + LogDebug("game_projectile_hitnpc GetEntityName(param1)"); + if ((SPAWNED_CLOUD)) return; + SPAWNED_CLOUD = 1; + SpawnNPC("monsters/summon/npc_poison_cloud2", GetEntityOrigin(param1), ScriptMode::Legacy); // params: MY_OWNER, SPORE_STR, 10.0, 2 + } + +} + +} diff --git a/scripts/angelscript/items/proj_sprite.as b/scripts/angelscript/items/proj_sprite.as new file mode 100644 index 00000000..35c8ef1c --- /dev/null +++ b/scripts/angelscript/items/proj_sprite.as @@ -0,0 +1,74 @@ +#pragma context server + +namespace MS +{ + +class ProjSprite : CGameScript +{ + string CL_ID; + + void OnSpawn() override + { + SetName("Projectile"); + SetModel("weapons/projectiles.mdl"); + SetDescription("Yeah , that s a projectile"); + SetWeight(0.01); + SetSize(1); + SetValue(0); + SetGravity(0.01); + SetGroupable(25); + SetUseable(0); + // TODO: movetype projectile + int reg.proj.dmg = 0; + int reg.proj.dmgtype = 0; + int reg.proj.aoe.range = 0; + int reg.proj.aoe.falloff = 0; + int reg.proj.stick.duration = 0; + int reg.proj.collidehitbox = 0; + int reg.proj.ignorenpc = 0; + SetMonsterClip(0); + RegisterProjectile(); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + } + + void game_tossprojectile() + { + ClientEvent("new", "all", "items/proj_sprite_cl", GetEntityIndex(GetOwner()), GetEntityProperty("ent_expowner", "scriptvar")); + CL_ID = "game.script.last_sent_id"; + } + + void game_projectile_landed() + { + proj_landed(); + } + + void hitwall() + { + proj_landed(); + } + + void game_dodamage() + { + SetEntityOrigin(GetOwner(), param4); + string OUT_PARAM1 = param1; + string OUT_PARAM2 = param2; + string OUT_PARAM3 = param3; + string OUT_PARAM4 = param4; + CallExternal("ent_expowner", "ext_proj_land", OUT_PARAM1, OUT_PARAM2, OUT_PARAM3, OUT_PARAM4); + } + + void proj_landed() + { + ClientEvent("update", "all", CL_ID, "proj_landed"); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/proj_sprite_cl.as b/scripts/angelscript/items/proj_sprite_cl.as new file mode 100644 index 00000000..f861f719 --- /dev/null +++ b/scripts/angelscript/items/proj_sprite_cl.as @@ -0,0 +1,70 @@ +#pragma context server + +namespace MS +{ + +class ProjSpriteCl : CGameScript +{ + int FX_ACTIVE; + string FX_ANG; + string FX_ORIGIN; + string FX_OWNER; + string FX_SPRITE; + string FX_VEL; + + ProjSpriteCl() + { + } + + void client_activate() + { + FX_OWNER = param1; + FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + FX_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + FX_VEL = /* TODO: $getcl */ $getcl(FX_OWNER, "velocity"); + FX_SPRITE = param2; + FX_ACTIVE = 1; + ClientEffect("tempent", "sprite", FX_SPRITE, FX_ORIGIN, "setup_proj_sprite", "update_proj_sprite"); + } + + void update_proj_sprite() + { + if ((FX_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", /* TODO: $getcl */ $getcl(FX_OWNER, "origin")); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $getcl */ $getcl(FX_OWNER, "velocity")); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(5000, 5000, 5000)); + } + } + + void proj_landed() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(0.2, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_proj_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 60.0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30.0); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", FX_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", FX_VEL); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + +} + +} diff --git a/scripts/angelscript/items/proj_ss.as b/scripts/angelscript/items/proj_ss.as new file mode 100644 index 00000000..140ae494 --- /dev/null +++ b/scripts/angelscript/items/proj_ss.as @@ -0,0 +1,147 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjSs : CGameScript +{ + string ACTIVE_SKILL; + int ARROW_BODY_OFS; + int ARROW_SOLIDIFY_ON_WALL; + string DMG_AMT; + int HITWALL_VOL; + int IS_ACTIVE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + int SCAN_RANGE; + string WEAPON_ID; + + ProjSs() + { + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 55; + PROJ_ANIM_IDLE = "spin_horizontal_fast"; + ARROW_SOLIDIFY_ON_WALL = 0; + HITWALL_VOL = 2; + PROJ_MOTIONBLUR = 0; + MODEL_BODY_OFS = 55; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_DAMAGE = 0; + PROJ_DAMAGE_AOE_RANGE = 0; + PROJ_DAMAGE_AOE_FALLOFF = 0; + PROJ_DAMAGE_TYPE = "dark"; + PROJ_COLLIDEHITBOX = 1; + PROJ_IGNORENPC = 1; + PROJ_ANIM_IDLE = "spin_vertical_fast"; + SCAN_RANGE = 64; + } + + void arrow_spawn() + { + SetName("Skull Scythe"); + SetDescription("Someone threw this thing with the intention of doing harm"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, ARROW_BODY_OFS); + // svplaysound: svplaysound 1 10 fans/fan1.wav + EmitSound(1, 10, "fans/fan1.wav"); + } + + void game_fall() + { + } + + void game_projectile_hitnpc() + { + } + + void game_projectile_landed() + { + remove_me(); + } + + void game_projectile_hitwall() + { + remove_me(); + remove_me(); + } + + void game_tossprojectile() + { + ScheduleDelayedEvent(10.0, "remove_me"); + if (!(true)) return; + if (!(IsValidPlayer("ent_expowner"))) + { + DMG_AMT = GetEntityProperty("ent_expowner", "scriptvar"); + WEAPON_ID = GetEntityIndex("ent_expowner"); + ACTIVE_SKILL = "none"; + } + else + { + DMG_AMT = GetSkillLevel("ent_expowner", "spellcasting.affliction"); + DMG_AMT *= 3; + WEAPON_ID = GetEntityProperty("ent_expowner", "scriptvar"); + LogDebug("game_tossprojectile WEAPON_ID"); + CallExternal(WEAPON_ID, "ext_register_projectile", GetEntityIndex(GetOwner())); + ACTIVE_SKILL = GetEntityProperty(WEAPON_ID, "scriptvar"); + } + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.01, "damage_area"); + } + + void damage_area() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.2, "damage_area"); + XDoDamage(GetEntityOrigin(GetOwner()), SCAN_RANGE, DMG_AMT, 0.75, "ent_expowner", WEAPON_ID, ACTIVE_SKILL, "dark"); + } + + void remove_me() + { + if ((true)) + { + if (!(IsValidPlayer("ent_expowner"))) + { + CallExternal("ent_expowner", "ext_sscythe_done"); + } + else + { + string SPR_POS = GetEntityOrigin("ent_expowner"); + string OWNER_YAW = GetEntityProperty("ent_expowner", "angles.yaw"); + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(10, 32, 20)); + ClientEvent("new", "all", "items/proj_ub_cl", GetEntityOrigin(GetOwner()), SPR_POS); + if (param1 != "remote") + { + } + CallExternal(GetEntityProperty("ent_expowner", "scriptvar"), "ext_projectile_landed"); + } + IS_ACTIVE = 0; + // svplaysound: svplaysound 1 0 fans/fan1.wav + EmitSound(1, 0, "fans/fan1.wav"); + DeleteEntity(GetOwner()); + } + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/proj_staff_fire_bomb.as b/scripts/angelscript/items/proj_staff_fire_bomb.as new file mode 100644 index 00000000..ccd7f4be --- /dev/null +++ b/scripts/angelscript/items/proj_staff_fire_bomb.as @@ -0,0 +1,75 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjStaffFireBomb : CGameScript +{ + int ARROW_BODY_OFS; + int CLFX_ARROW_NOSTICK; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + float PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + int PROJ_STICK_ON_NPC; + int PROJ_STICK_ON_WALL_NEW; + string SPRITE_ARROW_TRADE; + + ProjStaffFireBomb() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 41; + PROJ_ANIM_IDLE = "axis_spin"; + ITEM_NAME = "firemana"; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_DAMAGE = 100; + CLFX_ARROW_NOSTICK = 1; + PROJ_STICK_ON_NPC = 0; + PROJ_STICK_DURATION = 0; + PROJ_MOTIONBLUR = 0; + PROJ_STICK_ON_WALL_NEW = 0; + PROJ_AOE_RANGE = 200; + PROJ_AOE_FALLOFF = 0.01; + PROJ_IGNORENPC = 0; + ARROW_BODY_OFS = 41; + SPRITE_ARROW_TRADE = "silverarrow"; + } + + void projectile_spawn() + { + SetName("Meteor"); + SetGravity(0.4); + SetProp(GetOwner(), "scale", 0.5); + } + + void game_tossprojectile() + { + LogDebug("game_tossprojectile"); + PlayAnim("critical", PROJ_ANIM_IDLE); + EmitSound(GetOwner(), 2, "ambience/alienflyby1.wav", 10); + } + + void projectile_landed() + { + LogDebug("projectile_landed"); + EmitSound(GetOwner(), 0, "weapons/mortarhit.wav", 10); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 100, 5, 3, 500); + string SPLOOSH_POINT = GetEntityOrigin(GetOwner()); + ClientEvent("new", "all", "items/proj_arrow_phx_cl", SPLOOSH_POINT, 256); + CallExternal("ent_expowner", "ext_fire_bomb", GetEntityOrigin(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/items/proj_staff_ice_bolt.as b/scripts/angelscript/items/proj_staff_ice_bolt.as new file mode 100644 index 00000000..ac531847 --- /dev/null +++ b/scripts/angelscript/items/proj_staff_ice_bolt.as @@ -0,0 +1,88 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjStaffIceBolt : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjStaffIceBolt() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 7; + ARROW_BODY_OFS = 7; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal1.wav"; + SOUND_BURN = "magic/ice_powerup.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 0; + } + + void arrow_spawn() + { + SetName("Ice Bolt"); + SetDescription("A sharp bolt of ice"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0); + SetGroupable(25); + } + + void game_projectile_hitnpc() + { + string MY_OWNER = GetEntityIndex("ent_expowner"); + string OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + string ENT_HIT = param1; + if (OWNER_ISPLAYER == 1) + { + if (!("game.pvp")) + { + } + if ((IsValidPlayer(ENT_HIT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + XDoDamage(ENT_HIT, "direct", GetSkillLevel(MY_OWNER, "spellcasting.ice"), 1.0, MY_OWNER, GetOwner(), "spellcasting.ice", "cold"); + string EFFECT_DURATION = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + string DOT_ICE = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + EFFECT_DURATION *= 0.5; + DOT_ICE *= 0.5; + EFFECT_DURATION = max(3, min(5, EFFECT_DURATION)); + ApplyEffect(ENT_HIT, "effects/dot_cold", EFFECT_DURATION, MY_OWNER, DOT_ICE, "spellcasting.ice"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_staff_ice_bolt2.as b/scripts/angelscript/items/proj_staff_ice_bolt2.as new file mode 100644 index 00000000..fddd0400 --- /dev/null +++ b/scripts/angelscript/items/proj_staff_ice_bolt2.as @@ -0,0 +1,164 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjStaffIceBolt2 : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int IS_ACTIVE; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_TARG; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string TARG_HALF_HEIGHT; + string TARG_LIST; + + ProjStaffIceBolt2() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 7; + ARROW_BODY_OFS = 7; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal1.wav"; + SOUND_BURN = "magic/ice_powerup.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icebolt"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 0; + } + + void arrow_spawn() + { + SetName("Guided Ice Bolt"); + SetDescription("A sharp bolt of ice"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0); + SetGroupable(25); + } + + void game_tossprojectile() + { + LogDebug("game_tossprojectile"); + ScheduleDelayedEvent(0.1, "pick_target"); + } + + void pick_target() + { + LogDebug("pick_target"); + CallExternal("ent_expowner", "ext_sphere_token_byrange", "enemy", 768, GetEntityOrigin(GetOwner())); + TARG_LIST = GetEntityProperty("ent_expowner", "scriptvar"); + LogDebug("pick_target list TARG_LIST"); + if (!(TARG_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(TARG_LIST, ";"); i++) + { + pick_target_loop(); + } + LogDebug("pick_target GetEntityName(MY_TARG)"); + if (!(IsValidPlayer(MY_TARG))) + { + TARG_HALF_HEIGHT = GetEntityHeight(MY_TARG); + TARG_HALF_HEIGHT *= 0.5; + } + else + { + TARG_HALF_HEIGHT = 0; + } + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "orient_on_target"); + } + + void pick_target_loop() + { + string L_TARG = GetToken(TARG_LIST, i, ";"); + string L_POS = GetEntityOrigin(L_TARG); + if (!(TraceLine(GetEntityOrigin(GetOwner()), L_POS) == L_POS)) return; + if ((IsValidPlayer(L_TARG))) + { + if ((IsValidPlayer(GetOwner()))) + { + if (!("game.pvp")) + { + return; + } + } + } + if (!(IsEntityAlive(L_TARG))) return; + if (!(/* TODO: $get_takedmg */ $get_takedmg(L_TARG, "cold"))) return; + MY_TARG = L_TARG; + break; + } + + void orient_on_target() + { + if (!(IS_ACTIVE)) return; + if (!(IsEntityAlive(MY_TARG))) return; + ScheduleDelayedEvent(0.25, "orient_on_target"); + string TARG_ORG = GetEntityOrigin(MY_TARG); + TARG_ORG += "z"; + string MY_ORG = GetEntityOrigin(GetOwner()); + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(MY_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, 300, 0))); + SetProp(GetOwner(), "movedir", ANG_TO_TARG); + } + + void game_projectile_landed() + { + IS_ACTIVE = 0; + } + + void game_projectile_hitnpc() + { + IS_ACTIVE = 0; + string MY_OWNER = GetEntityIndex("ent_expowner"); + string OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + string ENT_HIT = param1; + if (OWNER_ISPLAYER == 1) + { + if (!("game.pvp")) + { + } + if ((IsValidPlayer(ENT_HIT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + XDoDamage(ENT_HIT, "direct", GetSkillLevel(MY_OWNER, "spellcasting.ice"), 1.0, MY_OWNER, GetOwner(), "spellcasting.ice", "cold"); + string EFFECT_DURATION = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + string DOT_ICE = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + EFFECT_DURATION *= 0.5; + DOT_ICE *= 0.5; + EFFECT_DURATION = max(3, min(5, EFFECT_DURATION)); + ApplyEffect(ENT_HIT, "effects/dot_cold", EFFECT_DURATION, MY_OWNER, DOT_ICE, "spellcasting.ice"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_staff_icelance.as b/scripts/angelscript/items/proj_staff_icelance.as new file mode 100644 index 00000000..eefbf50d --- /dev/null +++ b/scripts/angelscript/items/proj_staff_icelance.as @@ -0,0 +1,100 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjStaffIcelance : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string EFFECT_DURATION; + string ITEM_NAME; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjStaffIcelance() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 38; + ARROW_BODY_OFS = 38; + SOUND_HITWALL1 = "weapons/axemetal1.wav"; + SOUND_HITWALL2 = "weapons/axemetal1.wav"; + SOUND_BURN = "magic/ice_powerup.wav"; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + ITEM_NAME = "watermana"; + PROJ_DAMAGE_TYPE = "cold"; + PROJ_DAMAGESTAT = "spellcasting.ice"; + PROJ_ANIM_IDLE = "idle_icelance"; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_COLLIDEHITBOX = 0; + } + + void arrow_spawn() + { + SetName("Ice Lance"); + SetDescription("A sharp bolt of ice"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0000001); + SetGroupable(25); + } + + void game_tossprojectile() + { + SetGravity(0); + } + + void game_projectile_hitnpc() + { + if (!(IsEntityAlive(param1))) return; + string MY_OWNER = GetEntityIndex("ent_expowner"); + string OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + string ENEMY_HIT = param1; + if ((OWNER_ISPLAYER)) + { + if ("game.pvp" < 1) + { + } + if ((IsValidPlayer(ENEMY_HIT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + string DIR_DMG = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + DIR_DMG *= 2; + XDoDamage(ENEMY_HIT, "direct", DIR_DMG, 1.0, MY_OWNER, GetOwner(), "spellcasting.ice", "cold"); + EFFECT_DURATION = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + EFFECT_DURATION *= 0.25; + EFFECT_DURATION = max(3, min(5, EFFECT_DURATION)); + int RND_EFFECT = RandomInt(1, 2); + string FROST_DMG = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + FROST_DMG *= 0.5; + ApplyEffect(ENEMY_HIT, "effects/dot_cold", EFFECT_DURATION, MY_OWNER, FROST_DMG, "spellcasting.ice"); + if (!(RND_EFFECT == 2)) return; + ApplyEffect(ENEMY_HIT, "effects/dot_cold_freeze", Random(5, 7), MY_OWNER); + } + +} + +} diff --git a/scripts/angelscript/items/proj_stone.as b/scripts/angelscript/items/proj_stone.as new file mode 100644 index 00000000..09083d0b --- /dev/null +++ b/scripts/angelscript/items/proj_stone.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjStone : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int MODEL_BODY_OFS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_DAMAGE; + int PROJ_STICK_DURATION; + string ROJ_DAMAGETYPE; + + ProjStone() + { + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 0; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + MODEL_BODY_OFS = 3; + ARROW_BODY_OFS = 3; + PROJ_ANIM_IDLE = "idle_icebolt"; + ROJ_DAMAGETYPE = "blunt"; + PROJ_DAMAGE = Random(4, 8); + MODEL_WORLD = "weapons/projectiles.mdl"; + } + + void arrow_spawn() + { + SetName("small stone"); + SetDescription("a small stone"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.6); + SetUseable(0); + } + +} + +} diff --git a/scripts/angelscript/items/proj_tele_fx.as b/scripts/angelscript/items/proj_tele_fx.as new file mode 100644 index 00000000..2b0600d1 --- /dev/null +++ b/scripts/angelscript/items/proj_tele_fx.as @@ -0,0 +1,86 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjTeleFx : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string TRAIL_SPRITE; + + ProjTeleFx() + { + MODEL_WORLD = "none"; + ARROW_BODY_OFS = 5; + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 0; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + SOUND_HITWALL1 = "fire.wav"; + SOUND_HITWALL2 = "fire.wav"; + PROJ_DAMAGE_TYPE = "siege"; + PROJ_DAMAGE = RandomInt(200, 300); + PROJ_AOE_RANGE = 200; + PROJ_AOE_FALLOFF = 1; + TRAIL_SPRITE = "char_breath.spr"; + Precache("rockgibs.mdl"); + } + + void arrow_spawn() + { + SetName("Fx"); + SetDescription("A giant rock"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0); + SetGroupable(25); + SetSolid("none"); + ScheduleDelayedEvent(0.1, "spark_fx"); + } + + void spark_fx() + { + Effect("tempent", "spray", TRAIL_SPRITE, /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relvel */ $relvel(0, -30, 0), 10, 0.5, 50); + ScheduleDelayedEvent(0.25, "spark_fx"); + } + + void projectile_landed() + { + ScheduleDelayedEvent(0.1, "vanish"); + } + + void vanish() + { + DeleteEntity(GetOwner()); + } + + void hitwall() + { + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + } + + void game_dodamage() + { + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + if (!(param1)) return; + CallExternal(param2, "hit_by_siege"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_thorn.as b/scripts/angelscript/items/proj_thorn.as new file mode 100644 index 00000000..c8784888 --- /dev/null +++ b/scripts/angelscript/items/proj_thorn.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjThorn : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int MODEL_BODY_OFS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_DAMAGE; + int PROJ_STICK_DURATION; + string ROJ_DAMAGETYPE; + + ProjThorn() + { + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 0; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + MODEL_BODY_OFS = 24; + ARROW_BODY_OFS = 24; + PROJ_ANIM_IDLE = "idle_icebolt"; + ROJ_DAMAGETYPE = "pierce"; + PROJ_DAMAGE = Random(4, 8); + MODEL_WORLD = "weapons/projectiles.mdl"; + } + + void arrow_spawn() + { + SetName("large thorn"); + SetDescription("a large thorn"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.0); + SetUseable(0); + } + +} + +} diff --git a/scripts/angelscript/items/proj_troll_lightning.as b/scripts/angelscript/items/proj_troll_lightning.as new file mode 100644 index 00000000..f72243e9 --- /dev/null +++ b/scripts/angelscript/items/proj_troll_lightning.as @@ -0,0 +1,83 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjTrollLightning : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int MODEL_BODY_OFS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SHOCK_TARGETS; + + ProjTrollLightning() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 20; + MODEL_BODY_OFS = 20; + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_STICK_DURATION = 0; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + PROJ_MOTIONBLUR = 0; + PROJ_DAMAGE_TYPE = "lightning"; + PROJ_DAMAGE = RandomInt(200, 300); + PROJ_AOE_RANGE = 200; + PROJ_AOE_FALLOFF = 0; + PROJ_IGNORENPC = 1; + } + + void game_precache() + { + Precache("effects/sfx_shock_burst"); + } + + void arrow_spawn() + { + SetName("Big Ball o Lightning"); + SetDescription("Big zappy thang"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.4); + SetGroupable(25); + } + + void game_projectile_hitwall() + { + string MY_ORG = GetEntityOrigin(GetOwner()); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 100, 5, 3, 500); + ClientEvent("new", "all", "effects/sfx_shock_burst", MY_ORG, 256, 1, Vector3(255, 255, 0)); + string MY_DMG = GetEntityProperty("ent_expowner", "scriptvar"); + XDoDamage(MY_ORG, 256, MY_DMG, 0, "ent_expowner", "ent_expowner", "none", "lightning"); + SHOCK_TARGETS = FindEntitiesInSphere("any", 256); + LogDebug("game_projectile_hitwall MY_DMG SHOCK_TARGETS"); + if (!(SHOCK_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(SHOCK_TARGETS, ";"); i++) + { + apply_effect(); + } + } + + void apply_effect() + { + string CUR_TARG = GetToken(SHOCK_TARGETS, i, ";"); + if (!(GetRelationship("ent_expowner") == "enemy")) return; + ApplyEffect(CUR_TARG, "effects/dot_lightning", 8.0, GetEntityIndex("ent_expowner"), GetEntityProperty("ent_expowner", "scriptvar")); + } + +} + +} diff --git a/scripts/angelscript/items/proj_troll_rock.as b/scripts/angelscript/items/proj_troll_rock.as new file mode 100644 index 00000000..ac4469d7 --- /dev/null +++ b/scripts/angelscript/items/proj_troll_rock.as @@ -0,0 +1,80 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjTrollRock : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int MODEL_BODY_OFS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjTrollRock() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 5; + MODEL_BODY_OFS = 5; + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 0; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + SOUND_HITWALL1 = "fire.wav"; + SOUND_HITWALL2 = "fire.wav"; + PROJ_DAMAGE_TYPE = "siege"; + PROJ_DAMAGE = RandomInt(200, 300); + PROJ_AOE_RANGE = 200; + PROJ_AOE_FALLOFF = 1; + Precache("rockgibs.mdl"); + } + + void arrow_spawn() + { + SetName("Boulder"); + SetDescription("A giant rock"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.4); + SetGroupable(25); + } + + void projectile_landed() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 100, 5, 3, 500); + Effect("tempent", "gibs", "rockgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, /* TODO: $relvel */ $relvel(0, 0, 10), 20, 10, 1); + ScheduleDelayedEvent(0.1, "vanish"); + } + + void vanish() + { + DeleteEntity(GetOwner()); + } + + void hitwall() + { + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + } + + void game_dodamage() + { + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + if (!(param1)) return; + CallExternal(param2, "hit_by_siege"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_troll_rock_fire.as b/scripts/angelscript/items/proj_troll_rock_fire.as new file mode 100644 index 00000000..60099dd6 --- /dev/null +++ b/scripts/angelscript/items/proj_troll_rock_fire.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjTrollRockFire : CGameScript +{ + int ARROW_BODY_OFS; + float ARROW_BREAK_CHANCE; + int ARROW_SOLIDIFY_ON_WALL; + int MODEL_BODY_OFS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_STICK_DURATION; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjTrollRockFire() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 67; + MODEL_BODY_OFS = 67; + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_DAMAGE = RandomInt(60, 90); + PROJ_STICK_DURATION = 0; + ARROW_SOLIDIFY_ON_WALL = 0; + ARROW_BREAK_CHANCE = 1.0; + SOUND_HITWALL1 = "fire.wav"; + SOUND_HITWALL2 = "fire.wav"; + PROJ_DAMAGE_TYPE = "siege"; + PROJ_DAMAGE = RandomInt(200, 300); + PROJ_AOE_RANGE = 200; + PROJ_AOE_FALLOFF = 1; + Precache("rockgibs.mdl"); + } + + void arrow_spawn() + { + SetName("Flaming Boulder"); + SetDescription("A giant flaming rock"); + SetWeight(0.1); + SetSize(1); + SetValue(0); + SetGravity(0.4); + SetGroupable(25); + if (!(true)) return; + SetProp(GetOwner(), "scale", 0.5); + } + + void projectile_landed() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 100, 5, 3, 500); + CallExternal("ent_expowner", "ext_proj_landed", GetEntityOrigin(GetOwner())); + ScheduleDelayedEvent(0.1, "vanish"); + } + + void vanish() + { + DeleteEntity(GetOwner()); + } + + void hitwall() + { + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + } + + void game_dodamage() + { + EmitSound(GetOwner(), "const.snd.body", "fire.wav", "const.snd.fullvol"); + if (!(param1)) return; + CallExternal(param2, "hit_by_siege"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_ub.as b/scripts/angelscript/items/proj_ub.as new file mode 100644 index 00000000..27462bae --- /dev/null +++ b/scripts/angelscript/items/proj_ub.as @@ -0,0 +1,145 @@ +#pragma context server + +#include "items/proj_arrow_base.as" + +namespace MS +{ + +class ProjUb : CGameScript +{ + int ARROW_BODY_OFS; + int ARROW_SOLIDIFY_ON_WALL; + string DMG_AMT; + int HITWALL_VOL; + int IS_ACTIVE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_COLLIDEHITBOX; + int PROJ_DAMAGE; + int PROJ_DAMAGE_AOE_FALLOFF; + int PROJ_DAMAGE_AOE_RANGE; + string PROJ_DAMAGE_TYPE; + int PROJ_IGNORENPC; + int PROJ_MOTIONBLUR; + int PROJ_SOLIDIFY_ON_WALL; + int PROJ_STICK_DURATION; + int SCAN_RANGE; + string WEAPON_ID; + + ProjUb() + { + MODEL_HANDS = "weapons/projectiles.mdl"; + MODEL_WORLD = "weapons/projectiles.mdl"; + ARROW_BODY_OFS = 36; + PROJ_ANIM_IDLE = "spin_vertical_fast"; + ARROW_SOLIDIFY_ON_WALL = 0; + HITWALL_VOL = 2; + PROJ_MOTIONBLUR = 0; + MODEL_BODY_OFS = 36; + PROJ_DAMAGE = 0; + PROJ_STICK_DURATION = 0; + PROJ_SOLIDIFY_ON_WALL = 0; + PROJ_DAMAGE_AOE_RANGE = 0; + PROJ_DAMAGE_AOE_FALLOFF = 1; + PROJ_DAMAGE_TYPE = "dark"; + PROJ_COLLIDEHITBOX = 1; + PROJ_IGNORENPC = 1; + PROJ_ANIM_IDLE = "none"; + SCAN_RANGE = 32; + } + + void arrow_spawn() + { + SetName("Unholy Blade"); + SetDescription("Shadow projectile of the Unholy Blade"); + SetWeight(0); + SetSize(1); + SetValue(1); + SetGravity(0.0001); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 36); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + // svplaysound: svplaysound 1 10 fans/fan1.wav + EmitSound(1, 10, "fans/fan1.wav"); + } + + void game_fall() + { + } + + void game_projectile_hitnpc() + { + } + + void game_projectile_landed() + { + remove_me(); + } + + void game_projectile_hitwall() + { + remove_me(); + remove_me(); + } + + void game_tossprojectile() + { + ScheduleDelayedEvent(10.0, "remove_me"); + if (!(true)) return; + if (!(IsValidPlayer("ent_expowner"))) + { + DMG_AMT = GetEntityProperty("ent_expowner", "scriptvar"); + WEAPON_ID = GetEntityIndex("ent_expowner"); + } + else + { + DMG_AMT = GetSkillLevel("ent_expowner", "spellcasting.affliction"); + DMG_AMT *= 8; + WEAPON_ID = GetEntityProperty("ent_expowner", "scriptvar"); + LogDebug("game_tossprojectile WEAPON_ID"); + CallExternal(WEAPON_ID, "ext_register_projectile", GetEntityIndex(GetOwner())); + } + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.01, "damage_area"); + } + + void damage_area() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.2, "damage_area"); + XDoDamage(GetEntityOrigin(GetOwner()), SCAN_RANGE, DMG_AMT, 0.1, "ent_expowner", WEAPON_ID, "swordsmanship", "dark"); + } + + void remove_me() + { + if ((true)) + { + if (!(IsValidPlayer("ent_expowner"))) + { + CallExternal("ent_expowner", "ext_ub_done"); + } + else + { + string SPR_POS = GetEntityOrigin("ent_expowner"); + string OWNER_YAW = GetEntityProperty("ent_expowner", "angles.yaw"); + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(10, 32, 20)); + ClientEvent("new", "all", "items/proj_ub_cl", GetEntityOrigin(GetOwner()), SPR_POS); + if (param1 != "remote") + { + } + CallExternal(GetEntityProperty("ent_expowner", "scriptvar"), "ext_projectile_landed"); + } + IS_ACTIVE = 0; + // svplaysound: svplaysound 1 0 fans/fan1.wav + EmitSound(1, 0, "fans/fan1.wav"); + DeleteEntity(GetOwner()); + } + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/items/proj_ub_cl.as b/scripts/angelscript/items/proj_ub_cl.as new file mode 100644 index 00000000..0cdfe210 --- /dev/null +++ b/scripts/angelscript/items/proj_ub_cl.as @@ -0,0 +1,44 @@ +#pragma context client + +namespace MS +{ + +class ProjUbCl : CGameScript +{ + string SPRITE_NAME; + int SPRITE_NFRAMES; + + ProjUbCl() + { + SPRITE_NAME = "xflare1.spr"; + SPRITE_NFRAMES = 20; + } + + void client_activate() + { + ClientEffect("tempent", "sprite", SPRITE_NAME, param1, "make_sprite"); + ClientEffect("tempent", "sprite", SPRITE_NAME, param2, "make_sprite"); + EmitSound3D("magic/frost_reverse.wav", 10, param2); + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void make_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 20); + ClientEffect("tempent", "set_current_prop", "frames", 20); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_volcano.as b/scripts/angelscript/items/proj_volcano.as new file mode 100644 index 00000000..f66653f2 --- /dev/null +++ b/scripts/angelscript/items/proj_volcano.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjVolcano : CGameScript +{ + int CLFX_ARROW; + int CLFX_ARROW_NOSTICK; + int CLFX_ARROW_UPDATE_RATE; + string MODEL_HANDS; + string MODEL_WORLD; + int PROJ_ANIM_IDLE; + float PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + int PROJ_STICK_ON_NPC; + int PROJ_STICK_ON_WALL_NEW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjVolcano() + { + MODEL_HANDS = "none"; + SOUND_HITWALL1 = "none"; + SOUND_HITWALL2 = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + PROJ_ANIM_IDLE = 1; + CLFX_ARROW_NOSTICK = 1; + PROJ_STICK_ON_NPC = 0; + PROJ_STICK_DURATION = 0; + PROJ_MOTIONBLUR = 0; + PROJ_STICK_ON_WALL_NEW = 0; + PROJ_DAMAGE = 80; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_AOE_RANGE = 110; + PROJ_AOE_FALLOFF = 0.01; + CLFX_ARROW = 1; + CLFX_ARROW_UPDATE_RATE = 20; + } + + void projectile_spawn() + { + SetName("Volcanic fireball"); + SetGravity(Random(0.6, 1)); + } + + void game_dodamage() + { + if (!(param1)) return; + string L_TARGET = param2; + string L_OWNER = GetEntityIndex("ent_expowner"); + if ((IsValidPlayer(L_OWNER))) + { + string L_DMG_FIRE = GetSkillLevel(L_OWNER, "spellcasting.fire"); + L_DMG_FIRE *= 0.5; + ApplyEffect(L_TARGET, "effects/dot_fire", 5, L_OWNER, L_DMG_FIRE, "spellcasting.fire"); + } + } + + void update_clfx_projectile() + { + ext_scale(1.3); + } + +} + +} diff --git a/scripts/angelscript/items/proj_volcano_fixed.as b/scripts/angelscript/items/proj_volcano_fixed.as new file mode 100644 index 00000000..5678333a --- /dev/null +++ b/scripts/angelscript/items/proj_volcano_fixed.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/proj_volcano.as" + +namespace MS +{ + +class ProjVolcanoFixed : CGameScript +{ + void game_dodamage() + { + if (!(param1)) return; + string F_MY_OWNER = GetEntityIndex("ent_expowner"); + string OWNER_ISPLAYER = IsValidPlayer(F_MY_OWNER); + if ((IsValidPlayer(param2))) + { + if ((OWNER_ISPLAYER)) + { + } + if (!("game.pvp")) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + int DMG_FIRE = 50; + ApplyEffect(param2, "effects/dot_fire", 5, F_MY_OWNER, DMG_FIRE, "spellcasting.fire"); + } + +} + +} diff --git a/scripts/angelscript/items/proj_volcano_svr.as b/scripts/angelscript/items/proj_volcano_svr.as new file mode 100644 index 00000000..e0544b9a --- /dev/null +++ b/scripts/angelscript/items/proj_volcano_svr.as @@ -0,0 +1,155 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjVolcanoSvr : CGameScript +{ + string ITEM_NAME; + string LIGHT_COLOR; + float LIGHT_DURATION; + int LIGHT_RADIUS; + string MODEL_HANDS; + string MODEL_WORLD; + string MY_LIGHT_IDX; + string PROJ_ANIM_IDLE; + int PROJ_AOE_FALLOFF; + int PROJ_AOE_RANGE; + int PROJ_DAMAGE; + string PROJ_DAMAGESTAT; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + string SOUND_BURN; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjVolcanoSvr() + { + MODEL_HANDS = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + SOUND_HITWALL1 = "weapons/bow/arrowhit1.wav"; + SOUND_HITWALL2 = "weapons/bow/arrowhit1.wav"; + SOUND_BURN = "items/torch1.wav"; + ITEM_NAME = "firemana"; + PROJ_ANIM_IDLE = "idle_standard"; + PROJ_DAMAGE = 0; + PROJ_AOE_FALLOFF = 0; + PROJ_STICK_DURATION = 0; + PROJ_DAMAGESTAT = "spellcasting.fire"; + PROJ_DAMAGE_TYPE = "fire"; + PROJ_MOTIONBLUR = 0; + PROJ_AOE_RANGE = 128; + LIGHT_RADIUS = 64; + LIGHT_COLOR = Vector3(255, 0, 0); + LIGHT_DURATION = 0.8; + } + + void projectile_spawn() + { + SetName("Volcanic fireball"); + SetGravity(Random(0.3, 0.6)); + SetUseable(0); + SetWidth(32); + SetHeight(32); + SetModel("none"); + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), LIGHT_RADIUS, LIGHT_COLOR, LIGHT_DURATION); + MY_LIGHT_IDX = "game.script.last_sent_id"; + } + + void projectile_landed() + { + SetAngles("face"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 50, 20, DURATION, 256); + } + + void game_dodamage() + { + if ((param1)) return; + string MY_TARGET = param2; + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green proj_volcano struck " + GetEntityName(m_hLastStruckByMe)); + } + string F_MY_OWNER = GetEntityIndex("ent_expowner"); + string OWNER_ISPLAYER = IsValidPlayer(F_MY_OWNER); + if ((IsValidPlayer(MY_TARGET))) + { + if ((OWNER_ISPLAYER)) + { + } + if (!("game.pvp")) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((OWNER_ISPLAYER)) + { + string DMG_FIRE = GetSkillLevel(F_MY_OWNER, "spellcasting.fire"); + DMG_FIRE *= 2.0; + ApplyEffect(MY_TARGET, "effects/dot_fire", 5, F_MY_OWNER, DMG_FIRE, "spellcasting.fire"); + } + if (!(OWNER_ISPLAYER)) + { + string DMG_FIRE = GetEntityProperty(F_MY_OWNER, "scriptvar"); + string USE_DOT = GetEntityProperty(F_MY_OWNER, "scriptvar"); + if (DMG_FIRE == "DMG_VOLCANO") + { + int DMG_FIRE = 50; + } + if ((GetEntityName(MY_TARGET)).findFirst("Garonhroth") >= 0) + { + int DMG_FIRE = 500; + } + if (!(USE_DOT)) + { + CallExternal(MY_OWNER, "send_damage", MY_TARGET, "direct", DMG_FIRE, 1.0, F_MY_OWNER, "fire"); + } + else + { + ApplyEffect(MY_TARGET, "effects/dot_fire", 10, F_MY_OWNER, DMG_FIRE, "spellcasting.fire"); + } + } + ClientEvent("remove", "all", MY_LIGHT_IDX); + } + + void client_activate() + { + string L_POS = param1; + string L_RAD = param2; + string L_COL = param3; + string L_DUR = param4; + ClientEffect("light", "new", L_POS, L_RAD, L_COL, L_DUR); + L_DUR += 0.1; + L_DUR("remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void game_removed() + { + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green proj_volcano_svr game_removed"); + } + ClientEvent("remove", "all", MY_LIGHT_IDX); + } + + void game_removefromowner() + { + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green proj_volcano_svr game_removefromowner"); + } + ClientEvent("remove", "all", MY_LIGHT_IDX); + } + +} + +} diff --git a/scripts/angelscript/items/proj_web.as b/scripts/angelscript/items/proj_web.as new file mode 100644 index 00000000..c9a599f5 --- /dev/null +++ b/scripts/angelscript/items/proj_web.as @@ -0,0 +1,95 @@ +#pragma context server + +#include "items/proj_base.as" + +namespace MS +{ + +class ProjWeb : CGameScript +{ + int CLFX_ARROW; + int CLFX_ARROW_NOSTICK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + string PROJ_ANIM_IDLE; + int PROJ_DAMAGE; + string PROJ_DAMAGE_TYPE; + int PROJ_MOTIONBLUR; + int PROJ_STICK_DURATION; + int PROJ_STICK_ON_NPC; + int PROJ_STICK_ON_WALL_NEW; + float SCALE_SIZE; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + ProjWeb() + { + MODEL_HANDS = "none"; + SOUND_HITWALL1 = "none"; + SOUND_HITWALL2 = "none"; + MODEL_WORLD = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 62; + PROJ_ANIM_IDLE = "axis_spin"; + PROJ_DAMAGE_TYPE = "magic"; + PROJ_DAMAGE = 100; + CLFX_ARROW = 0; + CLFX_ARROW_NOSTICK = 1; + PROJ_STICK_ON_NPC = 0; + PROJ_STICK_DURATION = 0; + PROJ_MOTIONBLUR = 0; + PROJ_STICK_ON_WALL_NEW = 0; + } + + void OnSpawn() override + { + SetName("Web"); + SetDescription("Ew, it's sticky"); + SetGravity(0.07); + SCALE_SIZE = 0.1; + SetProp(GetOwner(), "scale", 0.1); + } + + void game_tossprojectile() + { + expand_loop(); + } + + void expand_loop() + { + if (!(SCALE_SIZE < 1)) return; + SCALE_SIZE += 0.01; + SetProp(GetOwner(), "scale", SCALE_SIZE); + ScheduleDelayedEvent(0.1, "expand_loop"); + } + + void game_projectile_hitnpc() + { + if ((IsValidPlayer("ent_expowner"))) + { + string L_DUR = GetSkillLevel("ent_expowner", "spellcasting.affliction"); + L_DUR /= 30; + L_DUR = max(0, min(1, L_DUR)); + string L_DUR = /* TODO: $ratio */ $ratio(L_DUR, 1.5, 2.5); + if ((IsValidPlayer(param1))) + { + if (!("game.pvp")) + { + return; + } + } + } + else + { + float L_DUR = 2.5; + } + string L_RELATIONSHIP = GetRelationship("ent_expowner"); + if (!(L_RELATIONSHIP != "ally")) return; + if (!(L_RELATIONSHIP != "neutral")) return; + if (!(L_RELATIONSHIP != "none")) return; + ApplyEffect(param1, "effects/webbed", L_DUR, GetEntityIndex("ent_expowner")); + } + +} + +} diff --git a/scripts/angelscript/items/ring_light2.as b/scripts/angelscript/items/ring_light2.as new file mode 100644 index 00000000..649c61e0 --- /dev/null +++ b/scripts/angelscript/items/ring_light2.as @@ -0,0 +1,108 @@ +#pragma context server + +#include "items/base_miscitem.as" +#include "items/base_effect_armor.as" + +namespace MS +{ + +class RingLight2 : CGameScript +{ + string ANIM_PREFIX; + int LIGHT_ON; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + + RingLight2() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_VIEW = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "ring"; + } + + void miscitem_spawn() + { + SetName("Felewyn's Light"); + SetDescription("This sigil of Felewyn shall bring light on your path forever."); + SetWeight(0); + SetSize(3); + SetValue(1000); + SetWearable(1); + SetHUDSprite("trade", "ring"); + } + + void game_wear() + { + SetModel("none"); + } + + void game_newowner() + { + string L_BODY = "game.item.hand_index"; + L_BODY += 1; + } + + void OnDeploy() override + { + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + if ((LIGHT_ON)) return; + light_on(); + } + + void ext_activate_items() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + if ((LIGHT_ON)) return; + light_on(); + } + + void barmor_effect_activate() + { + if ((LIGHT_ON)) return; + light_on(); + } + + void barmor_effect_remove() + { + if (!(LIGHT_ON)) return; + light_off(); + } + + void game_fall() + { + SetModel(MODEL_WORLD); + SetModelBody(0, MODEL_BODY_OFS); + if (!(LIGHT_ON)) return; + light_off(); + } + + void light_on() + { + if (!(GetEntityProperty(GetOwner(), "is_worn"))) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + if ((GetEntityProperty(GetOwner(), "scriptvar"))) return; + LIGHT_ON = 1; + CallExternal(GAME_MASTER, "gm_light_update", "new", GetEntityIndex(GetOwner()), Vector3(255, 255, 128), 192); + } + + void light_off() + { + if ((GetEntityProperty(GetOwner(), "scriptvar"))) return; + CallExternal(GAME_MASTER, "gm_light_update", "remove", GetEntityIndex(GetOwner()), Vector3(255, 255, 128), 192); + LIGHT_ON = 0; + } + + void ext_restore_item_lights() + { + light_on(); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_acid_xolt.as b/scripts/angelscript/items/scroll2_acid_xolt.as new file mode 100644 index 00000000..7471fe25 --- /dev/null +++ b/scripts/angelscript/items/scroll2_acid_xolt.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2AcidXolt : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2AcidXolt() + { + BASE_SPELL_SCRIPT = "magic_hand_acid_bolt"; + BASE_REQUIRED_SKILL = "skill.spellcasting.affliction"; + BASE_REQUIRED_LEVEL = 15; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_affliction"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Acid Bolt Scroll"); + SetDescription("A magical compendium of strong affliction enchantments."); + SetHUDSprite("trade", 200); + SetValue(800); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_blizzard.as b/scripts/angelscript/items/scroll2_blizzard.as new file mode 100644 index 00000000..350e77bf --- /dev/null +++ b/scripts/angelscript/items/scroll2_blizzard.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2Blizzard : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2Blizzard() + { + BASE_SPELL_SCRIPT = "magic_hand_blizzard"; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 8; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_ice"; + SPELL_MAKER_HEIGHT = 18; + } + + void OnSpawn() override + { + SetName("Blizzard Scroll"); + SetDescription("A magical compendium of strong frost enchantments"); + SetHUDSprite("trade", 201); + SetValue(800); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_conjure_holy_hammer.as b/scripts/angelscript/items/scroll2_conjure_holy_hammer.as new file mode 100644 index 00000000..205ab908 --- /dev/null +++ b/scripts/angelscript/items/scroll2_conjure_holy_hammer.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2ConjureHolyHammer : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2ConjureHolyHammer() + { + BASE_SPELL_SCRIPT = "magic_hand_holy_hammer"; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 0; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_lightning"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("MSC Hammer Scroll"); + SetDescription("Can't touch this."); + SetValue(2500); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_conjure_venom_claws.as b/scripts/angelscript/items/scroll2_conjure_venom_claws.as new file mode 100644 index 00000000..02beac89 --- /dev/null +++ b/scripts/angelscript/items/scroll2_conjure_venom_claws.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2ConjureVenomClaws : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2ConjureVenomClaws() + { + BASE_SPELL_SCRIPT = "magic_hand_conjure_venom_claws"; + BASE_REQUIRED_SKILL = "skill.spellcasting.affliction"; + BASE_REQUIRED_LEVEL = 20; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_affliction"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Venom Claws Scroll"); + SetDescription("Evil runes are scrawled into this page."); + SetHUDSprite("trade", 232); + SetValue(2500); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_fire_ball.as b/scripts/angelscript/items/scroll2_fire_ball.as new file mode 100644 index 00000000..7ca587ac --- /dev/null +++ b/scripts/angelscript/items/scroll2_fire_ball.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2FireBall : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2FireBall() + { + BASE_SPELL_SCRIPT = "magic_hand_fire_ball"; + BASE_REQUIRED_SKILL = "skill.spellcasting.fire"; + BASE_REQUIRED_LEVEL = 7; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_fire"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Fire Ball Scroll"); + SetDescription("A magical compendium of strong fire enchantments"); + SetHUDSprite("trade", 203); + SetValue(300); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_fire_dart.as b/scripts/angelscript/items/scroll2_fire_dart.as new file mode 100644 index 00000000..2007b649 --- /dev/null +++ b/scripts/angelscript/items/scroll2_fire_dart.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2FireDart : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2FireDart() + { + BASE_SPELL_SCRIPT = "magic_hand_fire_dart"; + BASE_REQUIRED_SKILL = "skill.spellcasting.fire"; + BASE_REQUIRED_LEVEL = 0; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_fire"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Fire Dart Scroll"); + SetDescription("A magical compendium of weak fire enchantments"); + SetHUDSprite("trade", 204); + SetValue(100); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_fire_wall.as b/scripts/angelscript/items/scroll2_fire_wall.as new file mode 100644 index 00000000..04208f52 --- /dev/null +++ b/scripts/angelscript/items/scroll2_fire_wall.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2FireWall : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2FireWall() + { + BASE_SPELL_SCRIPT = "magic_hand_fire_wall"; + BASE_REQUIRED_SKILL = "skill.spellcasting.fire"; + BASE_REQUIRED_LEVEL = 13; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_fire"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Fire Wall Scroll"); + SetDescription("A magical compendium of strong fire enchantments."); + SetHUDSprite("trade", 205); + SetValue(855); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_frost_xolt.as b/scripts/angelscript/items/scroll2_frost_xolt.as new file mode 100644 index 00000000..9f2869fb --- /dev/null +++ b/scripts/angelscript/items/scroll2_frost_xolt.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2FrostXolt : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2FrostXolt() + { + BASE_SPELL_SCRIPT = "magic_hand_frost_bolt"; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 0; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_ice"; + SPELL_MAKER_HEIGHT = 18; + } + + void OnSpawn() override + { + SetName("Frostbolt Scroll"); + SetDescription("A magical compendium of weak frost enchantments."); + SetHUDSprite("trade", 207); + SetValue(250); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_glow.as b/scripts/angelscript/items/scroll2_glow.as new file mode 100644 index 00000000..8400722d --- /dev/null +++ b/scripts/angelscript/items/scroll2_glow.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2Glow : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2Glow() + { + BASE_SPELL_SCRIPT = "magic_hand_div_glow"; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 0; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_divination"; + SPELL_MAKER_HEIGHT = 64; + } + + void OnSpawn() override + { + SetName("Glow Scroll"); + SetDescription("A magical compendium of glowing light."); + SetHUDSprite("trade", 208); + SetValue(80); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_healing_circle_920.as b/scripts/angelscript/items/scroll2_healing_circle_920.as new file mode 100644 index 00000000..7bc7777e --- /dev/null +++ b/scripts/angelscript/items/scroll2_healing_circle_920.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2HealingCircle920 : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2HealingCircle920() + { + BASE_SPELL_SCRIPT = "magic_hand_healing_circle"; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 18; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_divination"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Healing Circle Scroll"); + SetDescription("A magical compendium of epic divine enchantments"); + SetHUDSprite("trade", 209); + SetValue(2000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_healing_wave.as b/scripts/angelscript/items/scroll2_healing_wave.as new file mode 100644 index 00000000..d8d6aca7 --- /dev/null +++ b/scripts/angelscript/items/scroll2_healing_wave.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2HealingWave : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2HealingWave() + { + BASE_SPELL_SCRIPT = "magic_hand_healing_wave"; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 10; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_divination"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Healing Wave Scroll"); + SetDescription("A magical compendium of epic divine enchantments"); + SetHUDSprite("trade", 210); + SetValue(1777); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_ice_blast.as b/scripts/angelscript/items/scroll2_ice_blast.as new file mode 100644 index 00000000..26337570 --- /dev/null +++ b/scripts/angelscript/items/scroll2_ice_blast.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2IceBlast : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2IceBlast() + { + BASE_SPELL_SCRIPT = "magic_hand_ice_blast"; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 18; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_ice"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Freezing Sphere Scroll"); + SetDescription("A magical compendium of epic ice enchantments."); + SetHUDSprite("trade", 206); + SetValue(3000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_ice_lance.as b/scripts/angelscript/items/scroll2_ice_lance.as new file mode 100644 index 00000000..158fe6bb --- /dev/null +++ b/scripts/angelscript/items/scroll2_ice_lance.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2IceLance : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2IceLance() + { + BASE_SPELL_SCRIPT = "magic_hand_ice_lance"; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 25; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_ice"; + SPELL_MAKER_HEIGHT = 18; + } + + void OnSpawn() override + { + SetName("Ice Lance Scroll"); + SetDescription("A magical compendium of strong frost enchantments."); + SetHUDSprite("trade", 211); + SetValue(800); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_ice_shield.as b/scripts/angelscript/items/scroll2_ice_shield.as new file mode 100644 index 00000000..23287571 --- /dev/null +++ b/scripts/angelscript/items/scroll2_ice_shield.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2IceShield : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2IceShield() + { + BASE_SPELL_SCRIPT = "magic_hand_ice_shield"; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 5; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_ice"; + SPELL_MAKER_HEIGHT = 18; + } + + void OnSpawn() override + { + SetName("Ice Shield Scroll"); + SetDescription("A magical compendium of ice and protection enchantment"); + SetHUDSprite("trade", 212); + SetValue(380); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_ice_shield_lesser.as b/scripts/angelscript/items/scroll2_ice_shield_lesser.as new file mode 100644 index 00000000..83fed447 --- /dev/null +++ b/scripts/angelscript/items/scroll2_ice_shield_lesser.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2IceShieldLesser : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2IceShieldLesser() + { + BASE_SPELL_SCRIPT = "magic_hand_ice_shield_lesser"; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 0; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_ice"; + SPELL_MAKER_HEIGHT = 18; + } + + void OnSpawn() override + { + SetName("Lesser Ice Shield Scroll"); + SetDescription("A magical compendium of weak ice enchantments"); + SetHUDSprite("trade", 212); + SetValue(75); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_ice_wall.as b/scripts/angelscript/items/scroll2_ice_wall.as new file mode 100644 index 00000000..fca7b00d --- /dev/null +++ b/scripts/angelscript/items/scroll2_ice_wall.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2IceWall : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2IceWall() + { + BASE_SPELL_SCRIPT = "magic_hand_ice_wall"; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 4; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_ice"; + SPELL_MAKER_HEIGHT = 18; + } + + void OnSpawn() override + { + SetName("Ice Wall Scroll"); + SetDescription("A magical compendium of weak ice enchantments."); + SetHUDSprite("trade", 213); + SetValue(95); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_lightning_chain.as b/scripts/angelscript/items/scroll2_lightning_chain.as new file mode 100644 index 00000000..dc69a277 --- /dev/null +++ b/scripts/angelscript/items/scroll2_lightning_chain.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2LightningChain : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2LightningChain() + { + BASE_SPELL_SCRIPT = "magic_hand_lightning_chain"; + BASE_REQUIRED_SKILL = "skill.spellcasting.lightning"; + BASE_REQUIRED_LEVEL = 1; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_lightning"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Chain Lightning Scroll"); + SetDescription("A magical compendium of exquisite electrical enchantments."); + SetHUDSprite("trade", 202); + SetValue(6000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_lightning_disc.as b/scripts/angelscript/items/scroll2_lightning_disc.as new file mode 100644 index 00000000..558c5162 --- /dev/null +++ b/scripts/angelscript/items/scroll2_lightning_disc.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2LightningDisc : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2LightningDisc() + { + BASE_SPELL_SCRIPT = "magic_hand_lightning_disc"; + BASE_REQUIRED_SKILL = "skill.spellcasting.lightning"; + BASE_REQUIRED_LEVEL = 25; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_lightning"; + SPELL_MAKER_HEIGHT = 18; + } + + void OnSpawn() override + { + SetName("Lightning Disc Scroll"); + SetDescription("A magical compendium of strong lightning enchantments."); + SetHUDSprite("trade", 214); + SetValue(800); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_lightning_storm.as b/scripts/angelscript/items/scroll2_lightning_storm.as new file mode 100644 index 00000000..84f1b8c6 --- /dev/null +++ b/scripts/angelscript/items/scroll2_lightning_storm.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2LightningStorm : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2LightningStorm() + { + BASE_SPELL_SCRIPT = "magic_hand_lightning_storm"; + BASE_REQUIRED_SKILL = "skill.spellcasting.lightning"; + BASE_REQUIRED_LEVEL = 10; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_lightning"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Lightning Storm Scroll"); + SetDescription("A magical compendium of extrordinary electrical enchantments."); + SetHUDSprite("trade", 215); + SetValue(1220); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_lightning_weak.as b/scripts/angelscript/items/scroll2_lightning_weak.as new file mode 100644 index 00000000..7049bc5c --- /dev/null +++ b/scripts/angelscript/items/scroll2_lightning_weak.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2LightningWeak : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2LightningWeak() + { + BASE_SPELL_SCRIPT = "magic_hand_lightning_weak"; + BASE_REQUIRED_SKILL = "skill.spellcasting.lightning"; + BASE_REQUIRED_LEVEL = 0; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_lightning"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Erratic Lightning Scroll"); + SetDescription("A magical compendium of lesser electrical enchantments."); + SetHUDSprite("trade", 233); + SetValue(50); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_poison.as b/scripts/angelscript/items/scroll2_poison.as new file mode 100644 index 00000000..4dba2744 --- /dev/null +++ b/scripts/angelscript/items/scroll2_poison.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2Poison : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2Poison() + { + BASE_SPELL_SCRIPT = "magic_hand_poison"; + BASE_REQUIRED_SKILL = "skill.spellcasting.affliction"; + BASE_REQUIRED_LEVEL = 0; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_affliction"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Poison Scroll"); + SetDescription("A vile compendium of lesser affliction curses"); + SetHUDSprite("trade", 217); + SetValue(225); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_poison_cloud.as b/scripts/angelscript/items/scroll2_poison_cloud.as new file mode 100644 index 00000000..0ad90efc --- /dev/null +++ b/scripts/angelscript/items/scroll2_poison_cloud.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2PoisonCloud : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2PoisonCloud() + { + BASE_SPELL_SCRIPT = "magic_hand_poison_cloud"; + BASE_REQUIRED_SKILL = "skill.spellcasting.affliction"; + BASE_REQUIRED_LEVEL = 15; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_affliction"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Poison Cloud Scroll"); + SetDescription("A magical compendium of strong affliction enchantments."); + SetHUDSprite("trade", 216); + SetValue(900); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_rejuvenate.as b/scripts/angelscript/items/scroll2_rejuvenate.as new file mode 100644 index 00000000..2e28237c --- /dev/null +++ b/scripts/angelscript/items/scroll2_rejuvenate.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2Rejuvenate : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2Rejuvenate() + { + BASE_SPELL_SCRIPT = "magic_hand_div_rejuvenate"; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 5; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_divination"; + SPELL_MAKER_HEIGHT = 64; + } + + void OnSpawn() override + { + SetName("Rejuvenation Scroll"); + SetDescription("A compendium of divine healing magics."); + SetHUDSprite("trade", 219); + SetValue(1000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_summon_bear1.as b/scripts/angelscript/items/scroll2_summon_bear1.as new file mode 100644 index 00000000..e786df90 --- /dev/null +++ b/scripts/angelscript/items/scroll2_summon_bear1.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2SummonBear1 : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2SummonBear1() + { + BASE_SPELL_SCRIPT = "magic_hand_summon_bear1"; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 20; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_summoning"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Bear Guardian Scroll"); + SetDescription("A compendium of greater summoning magics."); + SetHUDSprite("trade", 220); + SetValue(5000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_summon_fangtooth.as b/scripts/angelscript/items/scroll2_summon_fangtooth.as new file mode 100644 index 00000000..ad9e4a75 --- /dev/null +++ b/scripts/angelscript/items/scroll2_summon_fangtooth.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2SummonFangtooth : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2SummonFangtooth() + { + BASE_SPELL_SCRIPT = "magic_hand_summon_fangtooth"; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 10; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_summoning"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Fangtooth Scroll"); + SetDescription("A compendium of greater summoning magics"); + SetHUDSprite("trade", 231); + SetValue(1350); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_summon_guard.as b/scripts/angelscript/items/scroll2_summon_guard.as new file mode 100644 index 00000000..4dd4a9ea --- /dev/null +++ b/scripts/angelscript/items/scroll2_summon_guard.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2SummonGuard : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2SummonGuard() + { + BASE_SPELL_SCRIPT = "magic_hand_summon_guard"; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 13; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_summoning"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Undead Guardian Scroll"); + SetDescription("A compendium of greater summoning magics."); + SetHUDSprite("trade", 223); + SetValue(2550); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_summon_rat.as b/scripts/angelscript/items/scroll2_summon_rat.as new file mode 100644 index 00000000..5d60ba8c --- /dev/null +++ b/scripts/angelscript/items/scroll2_summon_rat.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2SummonRat : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2SummonRat() + { + BASE_SPELL_SCRIPT = "magic_hand_summon_rat"; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 3; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_summoning"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Rat Summoning Scroll"); + SetDescription("A compendium of lesser summoning magics"); + SetHUDSprite("trade", 221); + SetValue(155); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_summon_undead.as b/scripts/angelscript/items/scroll2_summon_undead.as new file mode 100644 index 00000000..12e3d169 --- /dev/null +++ b/scripts/angelscript/items/scroll2_summon_undead.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2SummonUndead : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2SummonUndead() + { + BASE_SPELL_SCRIPT = "magic_hand_summon_undead"; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 8; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_summoning"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Undead Creation Scroll"); + SetDescription("A compendium of necromantic magics."); + SetHUDSprite("trade", 224); + SetValue(750); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_test_spell.as b/scripts/angelscript/items/scroll2_test_spell.as new file mode 100644 index 00000000..2ab0bbf2 --- /dev/null +++ b/scripts/angelscript/items/scroll2_test_spell.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2TestSpell : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2TestSpell() + { + BASE_SPELL_SCRIPT = "magic_hand_test_spell"; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 6; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_affliction"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Test Spell Scroll"); + SetDescription("Only the gods know what this scroll does."); + SetValue(1200); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_trollcano.as b/scripts/angelscript/items/scroll2_trollcano.as new file mode 100644 index 00000000..82456b68 --- /dev/null +++ b/scripts/angelscript/items/scroll2_trollcano.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2Trollcano : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2Trollcano() + { + BASE_SPELL_SCRIPT = "magic_hand_trollcano"; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 0; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_fire"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Trollcano Scroll"); + SetDescription("Be careful what you wish for."); + SetValue(0); + SetHUDSprite("trade", 21); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_turn_undead.as b/scripts/angelscript/items/scroll2_turn_undead.as new file mode 100644 index 00000000..c5158e42 --- /dev/null +++ b/scripts/angelscript/items/scroll2_turn_undead.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2TurnUndead : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2TurnUndead() + { + BASE_SPELL_SCRIPT = "magic_hand_turn_undead"; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 0; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_divination"; + SPELL_MAKER_HEIGHT = 64; + } + + void OnSpawn() override + { + SetName("Rebuke Undead Scroll"); + SetDescription("A magical compendium of weak divination magics."); + SetHUDSprite("trade", 218); + SetValue(320); + } + +} + +} diff --git a/scripts/angelscript/items/scroll2_volcano.as b/scripts/angelscript/items/scroll2_volcano.as new file mode 100644 index 00000000..581d55ca --- /dev/null +++ b/scripts/angelscript/items/scroll2_volcano.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/base_scroll.as" + +namespace MS +{ + +class Scroll2Volcano : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + int SPELL_MAKER_HEIGHT; + string SPELL_MAKER_SCRIPT; + + Scroll2Volcano() + { + BASE_SPELL_SCRIPT = "magic_hand_volcano"; + BASE_REQUIRED_SKILL = "skill.spellcasting.fire"; + BASE_REQUIRED_LEVEL = 15; + SPELL_MAKER_SCRIPT = "monsters/companion/spell_maker_fire"; + SPELL_MAKER_HEIGHT = 48; + } + + void OnSpawn() override + { + SetName("Volcano Scroll"); + SetDescription("A magical compendium of extraordinary fire enchantments."); + SetHUDSprite("trade", 225); + SetValue(1000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_acid_xolt.as b/scripts/angelscript/items/scroll_acid_xolt.as new file mode 100644 index 00000000..7e52bc59 --- /dev/null +++ b/scripts/angelscript/items/scroll_acid_xolt.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollAcidXolt : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollAcidXolt() + { + BASE_SPELL_SCRIPT = "magic_hand_acid_bolt"; + BASE_SUMMON_TEXT = "You learn to create acidic bolts."; + BASE_REQUIRED_SKILL = "skill.spellcasting.affliction"; + BASE_REQUIRED_LEVEL = 15; + } + + void OnSpawn() override + { + SetName("Acid Bolt Tome"); + SetDescription("This vile magic can expel deadly acid from deep within the user's body."); + SetValue(800); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_blizzard.as b/scripts/angelscript/items/scroll_blizzard.as new file mode 100644 index 00000000..6b0949d0 --- /dev/null +++ b/scripts/angelscript/items/scroll_blizzard.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollBlizzard : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollBlizzard() + { + BASE_SPELL_SCRIPT = "magic_hand_blizzard"; + BASE_SUMMON_TEXT = "You learn to create blizzards."; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 8; + } + + void OnSpawn() override + { + SetName("Blizzard Tome"); + SetDescription("The method to create violent snow storms is written here."); + SetValue(800); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_conjure_holy_hammer.as b/scripts/angelscript/items/scroll_conjure_holy_hammer.as new file mode 100644 index 00000000..79e7069b --- /dev/null +++ b/scripts/angelscript/items/scroll_conjure_holy_hammer.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollConjureHolyHammer : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollConjureHolyHammer() + { + BASE_SPELL_SCRIPT = "magic_hand_holy_hammer"; + BASE_SUMMON_TEXT = "You learn to conjure the MSC Hammer."; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 0; + } + + void OnSpawn() override + { + SetName("MSC Hammer Tome"); + SetDescription("Can't touch this."); + SetValue(2500); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_conjure_venom_claws.as b/scripts/angelscript/items/scroll_conjure_venom_claws.as new file mode 100644 index 00000000..3b594ca9 --- /dev/null +++ b/scripts/angelscript/items/scroll_conjure_venom_claws.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollConjureVenomClaws : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollConjureVenomClaws() + { + BASE_SPELL_SCRIPT = "magic_hand_conjure_venom_claws"; + BASE_SUMMON_TEXT = "You learn to conjure Venom Claws."; + BASE_REQUIRED_SKILL = "skill.spellcasting.affliction"; + BASE_REQUIRED_LEVEL = 20; + } + + void OnSpawn() override + { + SetName("Venom Claws Tome"); + SetDescription("Evil runes are scrawled in these pages."); + SetValue(2500); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_fire_ball.as b/scripts/angelscript/items/scroll_fire_ball.as new file mode 100644 index 00000000..f9e5c880 --- /dev/null +++ b/scripts/angelscript/items/scroll_fire_ball.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollFireBall : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollFireBall() + { + BASE_SPELL_SCRIPT = "magic_hand_fire_ball"; + BASE_SUMMON_TEXT = "You learn to cast a strong fire ball."; + BASE_REQUIRED_SKILL = "skill.spellcasting.fire"; + BASE_REQUIRED_LEVEL = 7; + } + + void OnSpawn() override + { + SetName("Fire Ball Tome"); + SetDescription("The method to throw a large ball of fire is written here."); + SetValue(300); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_fire_dart.as b/scripts/angelscript/items/scroll_fire_dart.as new file mode 100644 index 00000000..71191444 --- /dev/null +++ b/scripts/angelscript/items/scroll_fire_dart.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollFireDart : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollFireDart() + { + BASE_SPELL_SCRIPT = "magic_hand_fire_dart"; + BASE_SUMMON_TEXT = "You learn to cast a weak fireball."; + BASE_REQUIRED_SKILL = "skill.spellcasting.fire"; + BASE_REQUIRED_LEVEL = 0; + } + + void OnSpawn() override + { + SetName("Fire Dart Tome"); + SetDescription("The method to throw a small ball of fire is written here."); + SetValue(100); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_fire_wall.as b/scripts/angelscript/items/scroll_fire_wall.as new file mode 100644 index 00000000..1750e3e1 --- /dev/null +++ b/scripts/angelscript/items/scroll_fire_wall.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollFireWall : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollFireWall() + { + BASE_SPELL_SCRIPT = "magic_hand_fire_wall"; + BASE_SUMMON_TEXT = "You learn to create walls of flame."; + BASE_REQUIRED_SKILL = "skill.spellcasting.fire"; + BASE_REQUIRED_LEVEL = 13; + } + + void OnSpawn() override + { + SetName("Fire Wall Tome"); + SetDescription("The method to create walls of flame is written here."); + SetValue(855); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_glow.as b/scripts/angelscript/items/scroll_glow.as new file mode 100644 index 00000000..743302b2 --- /dev/null +++ b/scripts/angelscript/items/scroll_glow.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollGlow : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollGlow() + { + BASE_SPELL_SCRIPT = "magic_hand_div_glow"; + BASE_SUMMON_TEXT = "You learn to create artificial light."; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 0; + } + + void OnSpawn() override + { + SetName("Glow Tome"); + SetDescription("The method for creating light is written here"); + SetValue(80); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_healing_circle.as b/scripts/angelscript/items/scroll_healing_circle.as new file mode 100644 index 00000000..1e38564c --- /dev/null +++ b/scripts/angelscript/items/scroll_healing_circle.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollHealingCircle : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollHealingCircle() + { + BASE_SPELL_SCRIPT = "magic_hand_healing_circle"; + BASE_SUMMON_TEXT = "You learn to create healing circles."; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 18; + } + + void OnSpawn() override + { + SetName("Healing Circle Tome"); + SetDescription("Creates a circle of healing energy."); + SetValue(2000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_healing_wave.as b/scripts/angelscript/items/scroll_healing_wave.as new file mode 100644 index 00000000..a29f7a5d --- /dev/null +++ b/scripts/angelscript/items/scroll_healing_wave.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollHealingWave : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollHealingWave() + { + BASE_SPELL_SCRIPT = "magic_hand_healing_wave"; + BASE_SUMMON_TEXT = "You learn to create healing waves."; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 10; + } + + void OnSpawn() override + { + SetName("Healing Wave Tome"); + SetDescription("The method to create a wave of healing energy is here."); + SetValue(1777); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_ice_blast.as b/scripts/angelscript/items/scroll_ice_blast.as new file mode 100644 index 00000000..0f7a03d2 --- /dev/null +++ b/scripts/angelscript/items/scroll_ice_blast.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollIceBlast : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollIceBlast() + { + BASE_SPELL_SCRIPT = "magic_hand_ice_blast"; + BASE_SUMMON_TEXT = "You learn to create freezing spheres."; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 18; + } + + void OnSpawn() override + { + SetName("Freezing Sphere Tome"); + SetDescription("The method to create a sphere of freezing energy is here."); + SetValue(3000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_ice_bolt.as b/scripts/angelscript/items/scroll_ice_bolt.as new file mode 100644 index 00000000..51ed1581 --- /dev/null +++ b/scripts/angelscript/items/scroll_ice_bolt.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollIceBolt : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollIceBolt() + { + BASE_SPELL_SCRIPT = "magic_hand_frost_bolt"; + BASE_SUMMON_TEXT = "You learn to cast a bolt of freezing ice."; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 0; + } + + void OnSpawn() override + { + SetName("Frost Bolt Tome"); + SetDescription("The method for creating a bolt of freezing ice is here."); + SetValue(250); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_ice_lance.as b/scripts/angelscript/items/scroll_ice_lance.as new file mode 100644 index 00000000..44b50fa8 --- /dev/null +++ b/scripts/angelscript/items/scroll_ice_lance.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollIceLance : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollIceLance() + { + BASE_SPELL_SCRIPT = "magic_hand_ice_lance"; + BASE_SUMMON_TEXT = "You learn to create deep freezing icicles."; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 25; + } + + void OnSpawn() override + { + SetName("Ice Lance Tome"); + SetDescription("The method to create deep freezing icicles is here."); + SetValue(380); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_ice_shield.as b/scripts/angelscript/items/scroll_ice_shield.as new file mode 100644 index 00000000..5311e28c --- /dev/null +++ b/scripts/angelscript/items/scroll_ice_shield.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollIceShield : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollIceShield() + { + BASE_SPELL_SCRIPT = "magic_hand_ice_shield"; + BASE_SUMMON_TEXT = "You learn to create protective shields of ice."; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 5; + } + + void OnSpawn() override + { + SetName("Ice Shield Tome "); + SetDescription("The method to create protective layer of ice is written here."); + SetValue(380); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_ice_shield_lesser.as b/scripts/angelscript/items/scroll_ice_shield_lesser.as new file mode 100644 index 00000000..fbdd1b45 --- /dev/null +++ b/scripts/angelscript/items/scroll_ice_shield_lesser.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollIceShieldLesser : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollIceShieldLesser() + { + BASE_SPELL_SCRIPT = "magic_hand_ice_shield_lesser"; + BASE_SUMMON_TEXT = "You learn to create protective shields of ice."; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 0; + } + + void OnSpawn() override + { + SetName("Lesser Ice Shield Tome"); + SetDescription("The method to create protective layer of ice is written here."); + SetValue(75); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_ice_wall.as b/scripts/angelscript/items/scroll_ice_wall.as new file mode 100644 index 00000000..bbc92130 --- /dev/null +++ b/scripts/angelscript/items/scroll_ice_wall.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollIceWall : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollIceWall() + { + BASE_SPELL_SCRIPT = "magic_hand_ice_wall"; + BASE_SUMMON_TEXT = "You learn to create a wall of ice."; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 4; + } + + void OnSpawn() override + { + SetName("Ice Wall Tome"); + SetDescription("The method to create a frail wall of ice is written here."); + SetValue(95); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_ice_xolt.as b/scripts/angelscript/items/scroll_ice_xolt.as new file mode 100644 index 00000000..6495a9e1 --- /dev/null +++ b/scripts/angelscript/items/scroll_ice_xolt.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollIceXolt : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollIceXolt() + { + BASE_SPELL_SCRIPT = "magic_hand_frost_bolt"; + BASE_SUMMON_TEXT = "You learn to create ice shards."; + BASE_REQUIRED_SKILL = "skill.spellcasting.ice"; + BASE_REQUIRED_LEVEL = 0; + } + + void OnSpawn() override + { + SetName("Frost Bolt Tome"); + SetDescription("The method to create a shard of ice is here."); + SetValue(200); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_lightning_chain.as b/scripts/angelscript/items/scroll_lightning_chain.as new file mode 100644 index 00000000..8071427d --- /dev/null +++ b/scripts/angelscript/items/scroll_lightning_chain.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollLightningChain : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollLightningChain() + { + BASE_SPELL_SCRIPT = "magic_hand_lightning_chain"; + BASE_SUMMON_TEXT = "You learn to create chains of lightning."; + BASE_REQUIRED_SKILL = "skill.spellcasting.lightning"; + BASE_REQUIRED_LEVEL = 1; + } + + void OnSpawn() override + { + SetName("Chain Lightning Tome"); + SetDescription("The method to create an electrical assault is described herein."); + SetValue(6000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_lightning_disc.as b/scripts/angelscript/items/scroll_lightning_disc.as new file mode 100644 index 00000000..073b5529 --- /dev/null +++ b/scripts/angelscript/items/scroll_lightning_disc.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollLightningDisc : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollLightningDisc() + { + BASE_SPELL_SCRIPT = "magic_hand_lightning_disc"; + BASE_SUMMON_TEXT = "You learn to create lightning discs."; + BASE_REQUIRED_SKILL = "skill.spellcasting.lightning"; + BASE_REQUIRED_LEVEL = 25; + } + + void OnSpawn() override + { + SetName("Lightning Disc Tome"); + SetDescription("The method to cast Lightning Discs is written here."); + SetValue(800); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_lightning_storm.as b/scripts/angelscript/items/scroll_lightning_storm.as new file mode 100644 index 00000000..ad0358e0 --- /dev/null +++ b/scripts/angelscript/items/scroll_lightning_storm.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollLightningStorm : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollLightningStorm() + { + BASE_SPELL_SCRIPT = "magic_hand_lightning_storm"; + BASE_SUMMON_TEXT = "You learn to summon electrical storms."; + BASE_REQUIRED_SKILL = "skill.spellcasting.lightning"; + BASE_REQUIRED_LEVEL = 10; + } + + void OnSpawn() override + { + SetName("Lightning Storm Tome"); + SetDescription("The method to create an electrical storm is written here."); + SetValue(1220); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_lightning_weak.as b/scripts/angelscript/items/scroll_lightning_weak.as new file mode 100644 index 00000000..afb4dc1d --- /dev/null +++ b/scripts/angelscript/items/scroll_lightning_weak.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollLightningWeak : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollLightningWeak() + { + BASE_SPELL_SCRIPT = "magic_hand_lightning_weak"; + BASE_SUMMON_TEXT = "You learn to summon erratic lightning."; + BASE_REQUIRED_SKILL = "skill.spellcasting.lightning"; + BASE_REQUIRED_LEVEL = 0; + } + + void OnSpawn() override + { + SetName("Erratic Lightning Tome"); + SetDescription("The method to cast a Erratic Lightning is written here."); + SetValue(50); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_poison.as b/scripts/angelscript/items/scroll_poison.as new file mode 100644 index 00000000..20cc867c --- /dev/null +++ b/scripts/angelscript/items/scroll_poison.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollPoison : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollPoison() + { + BASE_SPELL_SCRIPT = "magic_hand_poison"; + BASE_SUMMON_TEXT = "You learn how to afflict your enemies with debilitating poison."; + BASE_REQUIRED_SKILL = "skill.spellcasting.affliction"; + BASE_REQUIRED_LEVEL = 0; + } + + void OnSpawn() override + { + SetName("Poison Tome"); + SetDescription("The method for instilling insidius poison by magic is described here."); + SetValue(225); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_poison_cloud.as b/scripts/angelscript/items/scroll_poison_cloud.as new file mode 100644 index 00000000..24cf3fef --- /dev/null +++ b/scripts/angelscript/items/scroll_poison_cloud.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollPoisonCloud : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollPoisonCloud() + { + BASE_SPELL_SCRIPT = "magic_hand_poison_cloud"; + BASE_SUMMON_TEXT = "You learn to create poisonous clouds."; + BASE_REQUIRED_SKILL = "skill.spellcasting.affliction"; + BASE_REQUIRED_LEVEL = 15; + } + + void OnSpawn() override + { + SetName("Poison Cloud Tome"); + SetDescription("A treatises of obscure necromantic gestures to form a poisonous cloud."); + SetValue(900); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_rejuvenate.as b/scripts/angelscript/items/scroll_rejuvenate.as new file mode 100644 index 00000000..4267a52f --- /dev/null +++ b/scripts/angelscript/items/scroll_rejuvenate.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollRejuvenate : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollRejuvenate() + { + BASE_SPELL_SCRIPT = "magic_hand_div_rejuvenate"; + BASE_SUMMON_TEXT = "You learn how to replenish the mind, body, and soul."; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 5; + } + + void OnSpawn() override + { + SetName("Rejuvenation Tome"); + SetDescription("The method for health replenishing magic is written here."); + SetValue(1000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_summon_bear1.as b/scripts/angelscript/items/scroll_summon_bear1.as new file mode 100644 index 00000000..759ad5a4 --- /dev/null +++ b/scripts/angelscript/items/scroll_summon_bear1.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollSummonBear1 : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollSummonBear1() + { + BASE_SPELL_SCRIPT = "magic_hand_summon_bear1"; + BASE_SUMMON_TEXT = "You learn to summon a gigantic bear."; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 20; + } + + void OnSpawn() override + { + SetName("Bear Guardian Tome"); + SetDescription("The method to create a bear guardian is written here."); + SetValue(5000); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_summon_fangtooth.as b/scripts/angelscript/items/scroll_summon_fangtooth.as new file mode 100644 index 00000000..f8dc1e11 --- /dev/null +++ b/scripts/angelscript/items/scroll_summon_fangtooth.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollSummonFangtooth : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollSummonFangtooth() + { + BASE_SPELL_SCRIPT = "magic_hand_summon_fangtooth"; + BASE_SUMMON_TEXT = "You learn to summon a fangtooth."; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 10; + } + + void OnSpawn() override + { + SetName("Fangtooth Tome"); + SetDescription("The method to create a venomous rat is written here."); + SetValue(1350); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_summon_guard.as b/scripts/angelscript/items/scroll_summon_guard.as new file mode 100644 index 00000000..bd070305 --- /dev/null +++ b/scripts/angelscript/items/scroll_summon_guard.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollSummonGuard : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollSummonGuard() + { + BASE_SPELL_SCRIPT = "magic_hand_summon_guard"; + BASE_SUMMON_TEXT = "You learn to summon undead guardians"; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 13; + } + + void OnSpawn() override + { + SetName("Undead Guardian Tome"); + SetDescription("The method to create armored undead is written here."); + SetValue(2550); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_summon_rat.as b/scripts/angelscript/items/scroll_summon_rat.as new file mode 100644 index 00000000..1784fc40 --- /dev/null +++ b/scripts/angelscript/items/scroll_summon_rat.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollSummonRat : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollSummonRat() + { + BASE_SPELL_SCRIPT = "magic_hand_summon_rat"; + BASE_SUMMON_TEXT = "You learn to summon a rat."; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 3; + } + + void OnSpawn() override + { + SetName("Rat Summoning Tome"); + SetDescription("The method to create a rat is written here."); + SetValue(155); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_summon_undead.as b/scripts/angelscript/items/scroll_summon_undead.as new file mode 100644 index 00000000..dfd29bc7 --- /dev/null +++ b/scripts/angelscript/items/scroll_summon_undead.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollSummonUndead : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollSummonUndead() + { + BASE_SPELL_SCRIPT = "magic_hand_summon_undead"; + BASE_SUMMON_TEXT = "You learn to summon undead."; + BASE_REQUIRED_SKILL = "skill.spellcasting"; + BASE_REQUIRED_LEVEL = 8; + } + + void OnSpawn() override + { + SetName("Undead Creation Tome"); + SetDescription("The method to create an army of the dead is written here."); + SetValue(750); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_turn_undead.as b/scripts/angelscript/items/scroll_turn_undead.as new file mode 100644 index 00000000..e53174e5 --- /dev/null +++ b/scripts/angelscript/items/scroll_turn_undead.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollTurnUndead : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollTurnUndead() + { + BASE_SPELL_SCRIPT = "magic_hand_turn_undead"; + BASE_SUMMON_TEXT = "You learn to rebuke undead."; + BASE_REQUIRED_SKILL = "skill.spellcasting.divination"; + BASE_REQUIRED_LEVEL = 0; + } + + void OnSpawn() override + { + SetName("Rebuke Undead Tome"); + SetDescription("The method to cast offensive blasts of holy energy is here."); + SetValue(320); + } + +} + +} diff --git a/scripts/angelscript/items/scroll_volcano.as b/scripts/angelscript/items/scroll_volcano.as new file mode 100644 index 00000000..1eb52924 --- /dev/null +++ b/scripts/angelscript/items/scroll_volcano.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_tome.as" + +namespace MS +{ + +class ScrollVolcano : CGameScript +{ + int BASE_REQUIRED_LEVEL; + string BASE_REQUIRED_SKILL; + string BASE_SPELL_SCRIPT; + string BASE_SUMMON_TEXT; + + ScrollVolcano() + { + BASE_SPELL_SCRIPT = "magic_hand_volcano"; + BASE_SUMMON_TEXT = "You learn to create a small volcano."; + BASE_REQUIRED_SKILL = "skill.spellcasting.fire"; + BASE_REQUIRED_LEVEL = 15; + } + + void OnSpawn() override + { + SetName("Volcano Tome"); + SetDescription("The method to create small volcanos is written here."); + SetValue(1000); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_axe_snakeskin.as b/scripts/angelscript/items/sheath_axe_snakeskin.as new file mode 100644 index 00000000..227d2f24 --- /dev/null +++ b/scripts/angelscript/items/sheath_axe_snakeskin.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathAxeSnakeskin : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathAxeSnakeskin() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 50; + CONTAINER_MAXITEMS = 6; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "axes"; + CONTAINER_ITEM_REJECT = "item_tk_"; + MODEL_BODY_OFS = 4; + } + + void sheath_spawn() + { + SetName("Snakeskin Axe Holster"); + SetDescription("A series of snakeskin loops designed to hold axes on a belt"); + SetWeight(1); + SetSize(60); + SetValue(50); + SetWearable(1); + SetHUDSprite("trade", "sheath1"); + } + + void sheath_wear() + { + SendPlayerMessage("You", "fasten some large snakeskin loops to your belt."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_back.as b/scripts/angelscript/items/sheath_back.as new file mode 100644 index 00000000..f06a501b --- /dev/null +++ b/scripts/angelscript/items/sheath_back.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathBack : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathBack() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 4; + CONTAINER_MAXITEMS = 1; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "swords;polearms"; + CONTAINER_ITEM_REJECT = "item_tk_"; + MODEL_BODY_OFS = 3; + } + + void sheath_spawn() + { + SetName("Back Sword Sheath"); + SetDescription("A leather sheath, designed to be worn across the back."); + SetWeight(1); + SetSize(60); + SetValue(4); + SetWearable(1); + SetHUDSprite("trade", "sheath2"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void sheath_wear() + { + SendPlayerMessage(GetOwner(), "You strap a leather sheath across your back."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_back_holster.as b/scripts/angelscript/items/sheath_back_holster.as new file mode 100644 index 00000000..b5f4518c --- /dev/null +++ b/scripts/angelscript/items/sheath_back_holster.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathBackHolster : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathBackHolster() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 30; + CONTAINER_MAXITEMS = 16; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "blunt;axes;swords;smallarms;bows;crossbow;polearms;gauntlet_"; + CONTAINER_ITEM_REJECT = "item_tk_"; + MODEL_BODY_OFS = 3; + } + + void sheath_spawn() + { + SetName("Weapons Strap"); + SetDescription("A leather back strap with loops to hang a large array of weapons."); + SetWeight(0); + SetSize(60); + SetValue(25); + SetWearable(1); + SetHUDSprite("trade", "sheath2"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void sheath_wear() + { + SendPlayerMessage(GetOwner(), "You loop a large leather strap across your back."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_back_snakeskin.as b/scripts/angelscript/items/sheath_back_snakeskin.as new file mode 100644 index 00000000..a8f3f05c --- /dev/null +++ b/scripts/angelscript/items/sheath_back_snakeskin.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathBackSnakeskin : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathBackSnakeskin() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 12; + CONTAINER_MAXITEMS = 6; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "swords"; + CONTAINER_ITEM_REJECT = "item_tk_"; + MODEL_BODY_OFS = 3; + } + + void sheath_spawn() + { + SetName("Snakeskin Back Sheath"); + SetDescription("A series of snakeskin sheaths for swords"); + SetWeight(1); + SetSize(60); + SetValue(50); + SetWearable(1); + SetHUDSprite("trade", "sheath2"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void sheath_wear() + { + SendPlayerMessage("You", "strap some snakeskin tubes across your back."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_base.as b/scripts/angelscript/items/sheath_base.as new file mode 100644 index 00000000..5637d77d --- /dev/null +++ b/scripts/angelscript/items/sheath_base.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "items/pack_base.as" + +namespace MS +{ + +class SheathBase : CGameScript +{ + int IS_CONTAINER; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WEAR; + string MODEL_WORLD; + + SheathBase() + { + IS_CONTAINER = 1; + MODEL_VIEW = "none"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_WEAR = "armor/packs/sheathes_wear.mdl"; + } + + void pack_spawn() + { + sheath_spawn(); + } + + void pack_deploy() + { + sheath_deploy(); + } + + void game_fall() + { + SetModel(MODEL_WORLD); + SetModelBody(0, 17); + PlayAnim("once", "package_floor_idle"); + sheath_fall(); + } + + void pack_pickup() + { + sheath_pickup(); + } + + void pack_opencontainer() + { + sheath_opencontainer(); + } + + void pack_wear() + { + sheath_wear(); + } + + void game_container_addeditem() + { + set_body(); + } + + void game_container_removeditem() + { + set_body(); + } + + void set_body() + { + string temp = MODEL_BODY_OFS; + if ("game.item.container.items" > 0) + { + temp -= 1; + SetModelBody(0, temp); + } + else + { + SetModelBody(0, MODEL_BODY_OFS); + } + } + +} + +} diff --git a/scripts/angelscript/items/sheath_belt.as b/scripts/angelscript/items/sheath_belt.as new file mode 100644 index 00000000..30545e02 --- /dev/null +++ b/scripts/angelscript/items/sheath_belt.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathBelt : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathBelt() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 4; + CONTAINER_MAXITEMS = 1; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "swords"; + MODEL_BODY_OFS = 1; + CONTAINER_ITEM_REJECT = "item_tk_"; + } + + void sheath_spawn() + { + SetName("Belt Sword Sheath"); + SetDescription("A leather belt sheath"); + SetWeight(1); + SetSize(60); + SetValue(2); + SetWearable(1); + SetHUDSprite("trade", "sheath1"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void sheath_wear() + { + SendPlayerMessage("You", "fasten a leather sheath to your belt."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_belt_holster.as b/scripts/angelscript/items/sheath_belt_holster.as new file mode 100644 index 00000000..3801f5ab --- /dev/null +++ b/scripts/angelscript/items/sheath_belt_holster.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathBeltHolster : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathBeltHolster() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 30; + CONTAINER_MAXITEMS = 2; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "axes;blunt"; + MODEL_BODY_OFS = 1; + CONTAINER_ITEM_REJECT = "item_tk_"; + } + + void sheath_spawn() + { + SetName("Heavy Weapon Holster"); + SetDescription("A simple thick leather loop for axes and hammers."); + SetWeight(1); + SetSize(40); + SetValue(2); + SetWearable(1); + SetHUDSprite("trade", "sheath1"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void sheath_wear() + { + SendPlayerMessage("You", "fasten a holster to your belt."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_belt_holster_snakeskin.as b/scripts/angelscript/items/sheath_belt_holster_snakeskin.as new file mode 100644 index 00000000..2f1ce153 --- /dev/null +++ b/scripts/angelscript/items/sheath_belt_holster_snakeskin.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathBeltHolsterSnakeskin : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathBeltHolsterSnakeskin() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 30; + CONTAINER_MAXITEMS = 6; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "axes;blunt"; + CONTAINER_ITEM_REJECT = "item_tk_"; + MODEL_BODY_OFS = 1; + } + + void sheath_spawn() + { + SetName("Snakeskin Heavy Holster"); + SetDescription("A series of snakeskin loops for axes and hammers"); + SetWeight(1); + SetSize(40); + SetValue(25); + SetWearable(1); + SetHUDSprite("trade", "sheath1"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void sheath_wear() + { + SendPlayerMessage("You", "fasten some large snakeskin loops to your belt."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_belt_snakeskin.as b/scripts/angelscript/items/sheath_belt_snakeskin.as new file mode 100644 index 00000000..2ec6e09e --- /dev/null +++ b/scripts/angelscript/items/sheath_belt_snakeskin.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathBeltSnakeskin : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathBeltSnakeskin() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 30; + CONTAINER_MAXITEMS = 6; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "swords"; + CONTAINER_ITEM_REJECT = "item_tk_"; + MODEL_BODY_OFS = 1; + } + + void sheath_spawn() + { + SetName("Snakeskin Sword Sheath"); + SetDescription("A bundle of strong snakeskin tubes , easily affixed to a belt"); + SetWeight(1); + SetSize(60); + SetValue(50); + SetWearable(1); + SetHUDSprite("trade", "sheath1"); + } + + void pack_deploy() + { + SetViewModel("none"); + } + + void sheath_wear() + { + SendPlayerMessage("You", "fasten some snakeskin tubes to your belt."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_blunt_snakeskin.as b/scripts/angelscript/items/sheath_blunt_snakeskin.as new file mode 100644 index 00000000..af9f9f40 --- /dev/null +++ b/scripts/angelscript/items/sheath_blunt_snakeskin.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathBluntSnakeskin : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathBluntSnakeskin() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 50; + CONTAINER_MAXITEMS = 6; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "blunt"; + CONTAINER_ITEM_REJECT = "item_tk_"; + MODEL_BODY_OFS = 4; + } + + void sheath_spawn() + { + SetName("Snakeskin Hammer Holster"); + SetDescription("A series of snakeskin loops designed for holding blunt weapons"); + SetWeight(1); + SetSize(60); + SetValue(50); + SetWearable(1); + SetHUDSprite("trade", "sheath1"); + } + + void sheath_wear() + { + SendPlayerMessage("You", "fasten a set of large snakeskin loops to your belt."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_dagger.as b/scripts/angelscript/items/sheath_dagger.as new file mode 100644 index 00000000..dca57d9f --- /dev/null +++ b/scripts/angelscript/items/sheath_dagger.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathDagger : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathDagger() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 50; + CONTAINER_MAXITEMS = 1; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "smallarms"; + CONTAINER_ITEM_REJECT = "item_tk_"; + MODEL_BODY_OFS = 4; + } + + void sheath_spawn() + { + SetName("Dagger Sheath"); + SetDescription("A dagger sheath made out of leather"); + SetWeight(1); + SetSize(60); + SetValue(2); + SetWearable(1); + SetHUDSprite("trade", "sheath1"); + } + + void sheath_wear() + { + SendPlayerMessage("You", "fasten a dagger sheath to your belt."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_dagger_snakeskin.as b/scripts/angelscript/items/sheath_dagger_snakeskin.as new file mode 100644 index 00000000..ab379044 --- /dev/null +++ b/scripts/angelscript/items/sheath_dagger_snakeskin.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathDaggerSnakeskin : CGameScript +{ + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathDaggerSnakeskin() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 50; + CONTAINER_MAXITEMS = 6; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "smallarms"; + CONTAINER_ITEM_REJECT = "item_tk_"; + MODEL_BODY_OFS = 4; + } + + void sheath_spawn() + { + SetName("Snakeskin Dagger Sheath"); + SetDescription("A series of small snakeskin loops for holding daggers"); + SetWeight(1); + SetSize(60); + SetValue(50); + SetWearable(1); + SetHUDSprite("trade", "sheath1"); + } + + void sheath_wear() + { + SendPlayerMessage("You", "fasten some small snakeskin loops to your belt."); + } + +} + +} diff --git a/scripts/angelscript/items/sheath_holster_snakeskin.as b/scripts/angelscript/items/sheath_holster_snakeskin.as new file mode 100644 index 00000000..42d8358b --- /dev/null +++ b/scripts/angelscript/items/sheath_holster_snakeskin.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "items/sheath_belt_holster_snakeskin.as" + +namespace MS +{ + +class SheathHolsterSnakeskin : CGameScript +{ +} + +} diff --git a/scripts/angelscript/items/sheath_spellbook.as b/scripts/angelscript/items/sheath_spellbook.as new file mode 100644 index 00000000..b9677011 --- /dev/null +++ b/scripts/angelscript/items/sheath_spellbook.as @@ -0,0 +1,72 @@ +#pragma context server + +#include "items/sheath_base.as" + +namespace MS +{ + +class SheathSpellbook : CGameScript +{ + string ANIM_PREFIX; + int CONTAINER_CANCLOSE; + string CONTAINER_ITEM_ACCEPT; + string CONTAINER_ITEM_REJECT; + int CONTAINER_LOCK_STRENGTH; + int CONTAINER_MAXITEMS; + int CONTAINER_SPACE; + string CONTAINER_TYPE; + int MODEL_BODY_OFS; + + SheathSpellbook() + { + CONTAINER_TYPE = "sheath"; + CONTAINER_SPACE = 200; + CONTAINER_MAXITEMS = 40; + CONTAINER_CANCLOSE = 0; + CONTAINER_LOCK_STRENGTH = 0; + CONTAINER_ITEM_ACCEPT = "scroll2"; + CONTAINER_ITEM_REJECT = "item_tk_"; + ANIM_PREFIX = "evilbook"; + MODEL_BODY_OFS = 6; + } + + void sheath_spawn() + { + SetName("Spellbook"); + SetDescription("A book of shadows , designed to hold spell scrolls."); + SetWeight(1); + SetSize(60); + SetValue(40); + SetWearable(1); + SetHUDSprite("trade", "ebook"); + } + + void game_fall() + { + SetModel("misc/p_misc.mdl"); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 2; + SetModelBody(0, L_SUBMODEL); + string L_ANIM = ANIM_PREFIX; + L_ANIM += "_floor_idle"; + PlayAnim("once", L_ANIM); + } + + void OnDeploy() override + { + SetViewModel(MODEL_VIEW_BOOK); + SetModel(MODEL_HANDS); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += "game.item.hand_index"; + SetModelBody(0, L_SUBMODEL); + } + + void sheath_wear() + { + SetModel("none"); + SendPlayerMessage("You", "affix a spellbook to your belt."); + } + +} + +} diff --git a/scripts/angelscript/items/shields_base.as b/scripts/angelscript/items/shields_base.as new file mode 100644 index 00000000..03dbb6a1 --- /dev/null +++ b/scripts/angelscript/items/shields_base.as @@ -0,0 +1,238 @@ +#pragma context server + +#include "items/base_melee.as" + +namespace MS +{ + +class ShieldsBase : CGameScript +{ + int AM_SHIELD; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_RETRACT1; + int ANIM_THRUST1; + int BASEWEAPON_NO_HAND_IDLE; + string EXIT_BLOCK; + int IS_DEPLOYED; + int MELEE_ACCURACY; + float MELEE_ATK_DURATION; + string MELEE_CALLBACK; + float MELEE_DMG_DELAY; + int MELEE_NOISE; + int MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + string MODEL_HANDS; + string MODEL_WEAR; + string MODEL_WORLD; + string PARRY_MULTI_OUT; + string PLAYERANIM_AIM; + string SHIELD_BREAK_SOUND; + float SHIELD_TAKEDMG; + string SOUND_BLOCK; + string SOUND_SWIPE; + string SOUND_THRUST; + + ShieldsBase() + { + AM_SHIELD = 1; + ANIM_IDLE1 = 0; + ANIM_IDLE_TOTAL = 1; + ANIM_LIFT1 = 0; + ANIM_THRUST1 = 1; + ANIM_RETRACT1 = 2; + MELEE_VIEWANIM_ATK = ANIM_THRUST1; + BASEWEAPON_NO_HAND_IDLE = 1; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WEAR = "weapons/p_weapons2.mdl"; + ANIM_PREFIX = "allshields"; + PLAYERANIM_AIM = "battleaxe"; + MELEE_STAT = "parry"; + MELEE_ACCURACY = 40; + MELEE_DMG_DELAY = 0.1; + MELEE_ATK_DURATION = 1.0; + MELEE_ACCURACY = 40; + MELEE_CALLBACK = "melee"; + MELEE_NOISE = 400; + MELEE_SOUND_DELAY = 0; + SHIELD_TAKEDMG = 0.5; + SHIELD_BREAK_SOUND = "debris/bustmetal1.wav"; + SOUND_THRUST = "weapons/cbar_miss1.wav"; + SOUND_SWIPE = SOUND_THRUST; + SOUND_BLOCK = "body/armour3.wav"; + } + + void weapon_spawn() + { + SetHand("left"); + SetWearable(1); + string reg.attack.type = "hold-strike"; + string reg.attack.keys = "+attack1"; + int reg.attack.range = 0; + int reg.attack.dmg = 0; + int reg.attack.dmg.range = 100; + string reg.attack.dmg.type = "block"; + int reg.attack.energydrain = 0; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 0; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = MELEE_CALLBACK; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.dmg.ignore = 1; + RegisterAttack(); + PARRY_MULTI_OUT = PARRY_MULTI; + shield_spawn(); + } + + void melee_start() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + CallExternal(GetOwner(), "ext_shield_up", 1); + } + + void melee_hold() + { + PlayOwnerAnim("hold", "aim_axe_onehand"); + } + + void melee_end() + { + if ((false)) + { + PlayViewAnim(ANIM_RETRACT1); + } + else + { + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + } + CallExternal(GetOwner(), "ext_shield_up", 0); + PlayOwnerAnim("break"); + } + } + + void bweapon_effect_remove() + { + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + CallExternal(GetOwner(), "ext_shield_up", 0); + } + + void game_wear() + { + IS_DEPLOYED = 0; + SetModel(MODEL_WEAR); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 3; + SetModelBody(0, L_SUBMODEL); + } + + void game_show() + { + SetModel(MODEL_WEAR); + string L_SUBMODEL = MODEL_BODY_OFS; + L_SUBMODEL += 3; + SetModelBody(0, L_SUBMODEL); + } + + void weapon_deploy() + { + IS_DEPLOYED = 1; + string L_ANIM_IDLE = ANIM_PREFIX; + L_ANIM_IDLE += "_idle"; + PlayAnim("once", L_ANIM_IDLE); + } + + void game_viewanimdone() + { + if (!(ANIM_IDLE_TOTAL > 0)) return; + if (("game.item.attacking")) return; + if (!("game.item.wielded")) return; + RandomInt(ANIM_IDLE_DELAY_LOW, ANIM_IDLE_DELAY_HIGH)("item_idle"); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(IS_DEPLOYED)) return; + if ((SHIELD_PRE_BLOCK_EFFECT)) + { + EXIT_BLOCK = 0; + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + string OUT_PAR4 = param4; + shield_pre_block_effect(OUT_PAR1, OUT_PAR2, SHIELD_DMG_TAKEN, OUT_PAR4); + } + if ((EXIT_BLOCK)) return; + if ((param4).findFirst("target") == 0) + { + int CANT_BLOCK = 1; + } + if ((param4).findFirst("effect") >= 0) + { + int CANT_BLOCK = 1; + } + if ((CANT_BLOCK)) return; + string MY_OWNER = GetEntityIndex(GetOwner()); + string THE_ATTACKER = param2; + if (!(GetEntityIndex(param1) != GetEntityIndex(GetOwner()))) return; + string l.pos = GetEntityOrigin(GetOwner()); + string l.mypos = GetEntityOrigin(GetOwner()); + string l.myang = GetEntityAngles(GetOwner()); + string l.attpos = GetEntityOrigin(param1); + if (!(WithinCone2D(l.attpos, l.mypos, l.myang))) return; + if ((SHIELD_REPORT_HITS)) + { + string THE_INFLICTOR = param2; + shield_hit(THE_ATTACKER, THE_INFLICTOR, StringToLower(param3), StringToLower(param4)); + } + if (("game.item.attacking")) + { + if (RandomInt(1, 100) <= BLOCK_CHANCE_UP) + { + SHIELD_DMG_TAKEN = param3; + string ORIG_DMG = param3; + SHIELD_DMG_TAKEN *= DMG_BLOCK_UP; + SetDamage("dmg"); + shield_deflect(THE_ATTACKER); + } + } + if (!("game.item.attacking")) + { + if (("game.item.wielded")) + { + } + if (RandomInt(1, 100) <= BLOCK_CHANCE_DOWN) + { + SHIELD_DMG_TAKEN = param3; + if (param3 > 0) + { + SendPlayerMessage(GetOwner(), "Deflected!"); + } + SetDamage("hit"); + SetDamage("dmg"); + shield_deflect(THE_ATTACKER); + } + } + } + + void shield_deflect() + { + EmitSound(GetOwner(), "const.snd.body", SOUND_BLOCK, "const.snd.fullvol"); + if (("game.item.attacking")) return; + PlayViewAnim(ANIM_RETRACT1); + } + + void OnPickup(CBaseEntity@ player) override + { + } + +} + +} diff --git a/scripts/angelscript/items/shields_buckler.as b/scripts/angelscript/items/shields_buckler.as new file mode 100644 index 00000000..871111de --- /dev/null +++ b/scripts/angelscript/items/shields_buckler.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "items/shields_base.as" + +namespace MS +{ + +class ShieldsBuckler : CGameScript +{ + int BLOCK_CHANCE_DOWN; + int BLOCK_CHANCE_UP; + float DMG_BLOCK_UP; + float MELEE_ACCURACY; + int MELEE_ENERGY; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + float NOPUSH_CHANCE; + float PARRY_MULTI; + int SHIELD_BASE_PARRY; + int SHIELD_HEALTH; + int SHIELD_IMMORTAL; + int SHIELD_MAXHEALTH; + string SOUND_BLOCK; + + ShieldsBuckler() + { + NOPUSH_CHANCE = 0.25; + PARRY_MULTI = 1.3; + SHIELD_BASE_PARRY = 10; + MODEL_VIEW = "viewmodels/v_shields.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_BODY_OFS = 61; + MELEE_ENERGY = 15; + MELEE_ACCURACY = 0.9; + BLOCK_CHANCE_UP = 100; + DMG_BLOCK_UP = 0.4; + BLOCK_CHANCE_DOWN = 15; + SHIELD_MAXHEALTH = 500; + SHIELD_IMMORTAL = 0; + SHIELD_HEALTH = 500; + SOUND_BLOCK = "debris/metal3.wav"; + Precache(SOUND_BLOCK); + } + + void shield_spawn() + { + SetName("Training shield"); + SetDescription("A light shield for deflecting blows"); + SetWeight(10); + SetSize(30); + SetValue(50); + SetQuality(60); + SetHUDSprite("trade", 178); + } + + void game_wear() + { + SendPlayerMessage("You", "sling a training shield over your shoulder."); + } + +} + +} diff --git a/scripts/angelscript/items/shields_f.as b/scripts/angelscript/items/shields_f.as new file mode 100644 index 00000000..480370c2 --- /dev/null +++ b/scripts/angelscript/items/shields_f.as @@ -0,0 +1,267 @@ +#pragma context server + +#include "items/shields_base.as" + +namespace MS +{ + +class ShieldsF : CGameScript +{ + string ANIM_PREFIX; + int BLOCK_CHANCE_DOWN; + int BLOCK_CHANCE_UP; + int BREATH_ON; + string BURN_DAMAGE; + string BURN_LIST; + string CL_SCRIPT_DX; + float DMG_BLOCK_UP; + int EXIT_BLOCK; + string GAME_PVP; + float MELEE_ACCURACY; + int MELEE_ENERGY; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WEAR; + string MODEL_WORLD; + int MP_DRAIN_RATE; + string NEXT_MP_WARN; + string NEXT_SCAN; + float NOPUSH_CHANCE; + string OWNER_ANG; + string OWNER_ORG; + float PARRY_MULTI; + int SCAN_KEYS; + int SHIELD_BASE_PARRY; + int SHIELD_IMMORTAL; + int SHIELD_PRE_BLOCK_EFFECT; + string SOUND_BLOCK; + string SOUND_BREATH_LOOP; + string TRACE_START; + + ShieldsF() + { + NOPUSH_CHANCE = 1.0; + MP_DRAIN_RATE = 2; + PARRY_MULTI = 1.5; + SHIELD_BASE_PARRY = 35; + MODEL_VIEW = "viewmodels/v_shields.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_WORLD = "weapons/p_weapons4.mdl"; + MODEL_HANDS = "weapons/p_weapons4.mdl"; + MODEL_WEAR = "weapons/p_weapons4.mdl"; + MODEL_BODY_OFS = 46; + MELEE_ENERGY = 15; + MELEE_ACCURACY = 0.9; + BLOCK_CHANCE_UP = 100; + DMG_BLOCK_UP = 0.5; + BLOCK_CHANCE_DOWN = 10; + SHIELD_IMMORTAL = 1; + SOUND_BLOCK = "debris/metal3.wav"; + ANIM_PREFIX = "standard"; + SHIELD_PRE_BLOCK_EFFECT = 1; + SOUND_BREATH_LOOP = "monsters/goblin/sps_fogfire.wav"; + } + + void shield_spawn() + { + SetName("Demon Shield"); + SetDescription("For when it s time to get out of the kitchen"); + SetWeight(120); + SetSize(45); + SetValue(5000); + SetQuality(2000); + SetHUDSprite("trade", 191); + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + } + + void game_wear() + { + SendPlayerMessage("You", "sling a Demon Shield over your shoulder."); + } + + void bweapon_effect_activate() + { + if ((SCAN_KEYS)) return; + SCAN_KEYS = 1; + scan_keys(); + } + + void bweapon_effect_remove() + { + SCAN_KEYS = 0; + if (!(BREATH_ON)) return; + end_breath(); + } + + void scan_keys() + { + if (!(SCAN_KEYS)) return; + if (!("game.item.wielded")) return; + ScheduleDelayedEvent(0.25, "scan_keys"); + int DO_BREATH = 0; + if (("game.item.attacking")) + { + if ((IsKeyDown(GetOwner(), "use"))) + { + int DO_BREATH = 1; + } + string L_ACTIVE = GetActiveItem(GetOwner()); + string L_ACTIVE = GetEntityProperty(L_ACTIVE, "itemname"); + if (L_ACTIVE == GetEntityProperty(GetOwner(), "itemname")) + { + if ((IsKeyDown(GetOwner(), "attack2"))) + { + } + int DO_BREATH = 1; + } + else + { + if ((IsKeyDown(GetOwner(), "attack1"))) + { + } + int DO_BREATH = 1; + } + LogDebug("scan_keys atk1 IsKeyDown(GetOwner(), "attack1") atk2 IsKeyDown(GetOwner(), "attack2") - L_ACTIVE vs GetEntityProperty(GetOwner(), "itemname")"); + } + if (GetEntityMP(GetOwner()) < MP_DRAIN_RATE) + { + int DO_BREATH = 0; + if (GetGameTime() > NEXT_MP_WARN) + { + } + NEXT_MP_WARN = GetGameTime(); + NEXT_MP_WARN += 5.0; + SendColoredMessage(GetOwner(), "Demonshield: Insufficient mana for fire breath"); + } + if ((DO_BREATH)) + { + if (!(BREATH_ON)) + { + } + start_breath(); + } + else + { + if ((BREATH_ON)) + { + } + end_breath(); + } + } + + void melee_end() + { + if (!(BREATH_ON)) return; + end_breath(); + } + + void end_breath() + { + BREATH_ON = 0; + ClientEvent("update", "all", CL_SCRIPT_DX, "end_fx"); + CL_SCRIPT_DX = "CL_SCRIPT_DX"; + // svplaysound: svplaysound 2 0 SOUND_BREATH_LOOP + EmitSound(2, 0, SOUND_BREATH_LOOP); + } + + void start_breath() + { + LogDebug("start_breath"); + if (!(GetSkillLevel(GetOwner(), "spellcasting.fire") >= 30)) return; + if (CL_SCRIPT_DX == "CL_SCRIPT_DX") + { + ClientEvent("new", "all", "items/axes_dragon_cl", GetEntityIndex(GetOwner())); + CL_SCRIPT_DX = "game.script.last_sent_id"; + // svplaysound: svplaysound 1 10 SOUND_BREATH_LOOP + EmitSound(1, 10, SOUND_BREATH_LOOP); + } + BREATH_ON = 1; + ScheduleDelayedEvent(0.1, "breath_loop"); + } + + void breath_loop() + { + if (!(BREATH_ON)) return; + ScheduleDelayedEvent(0.1, "breath_loop"); + GiveMP(GetOwner()); + OWNER_ANG = GetEntityAngles(GetOwner()); + OWNER_ORG = GetEntityOrigin(GetOwner()); + string CLOUD_START = GetEntityProperty(GetOwner(), "svbonepos"); + CLOUD_START += /* TODO: $relpos */ $relpos(OWNER_ANG, Vector3(0, 32, -30)); + string CLOUD_ANG = OWNER_ANG; + CLOUD_ANG = "x"; + if ("game.item.hand_index" == 0) + { + CLOUD_START += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(-10, 0, 0)); + } + else + { + CLOUD_START += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(10, 0, 0)); + } + ClientEvent("update", "all", CL_SCRIPT_DX, "make_clouds", CLOUD_START, CLOUD_ANG); + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.5; + BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURN_DAMAGE /= 2; + string SCAN_POS = CLOUD_START; + SCAN_POS += /* TODO: $relpos */ $relpos(OWNER_ANG, Vector3(0, 128, 0)); + CallExternal(GetOwner(), "ext_box_token", "enemy", 96, SCAN_POS); + BURN_LIST = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(BURN_LIST != "none")) return; + TRACE_START = CLOUD_START; + for (int i = 0; i < GetTokenCount(BURN_LIST, ";"); i++) + { + burn_targets(); + } + } + + void burn_targets() + { + string CUR_TARG = GetToken(BURN_LIST, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IsEntityAlive(CUR_TARG))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG))) return; + if (!(GetEntityRange(CUR_TARG) < 256)) return; + string TRACE_END = GetEntityOrigin(CUR_TARG); + if (!(IsValidPlayer(CUR_TARG))) + { + string HALF_MON_HEIGHT = GetEntityHeight(CUR_TARG); + HALF_MON_HEIGHT *= 0.5; + TRACE_END += "z"; + } + string TRACE_CHECK = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_CHECK == TRACE_END)) return; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), BURN_DAMAGE, "spellcasting.fire"); + if (!(GetEntityMaxHealth(CUR_TARG) < 10000)) return; + if (!(GetEntityHeight(CUR_TARG) < 120)) return; + if ((GetEntityProperty(CUR_TARG, "scriptvar"))) return; + string PUSH_VEL = /* TODO: $relvel */ $relvel(0, 200, 110); + AddVelocity(CUR_TARG, PUSH_VEL); + } + + void shield_pre_block_effect() + { + if (!("game.item.attacking")) return; + if (!((param4).findFirst("fire") >= 0)) return; + SetDamage("dmg"); + EXIT_BLOCK = 1; + } + +} + +} diff --git a/scripts/angelscript/items/shields_ironshield.as b/scripts/angelscript/items/shields_ironshield.as new file mode 100644 index 00000000..a5b11793 --- /dev/null +++ b/scripts/angelscript/items/shields_ironshield.as @@ -0,0 +1,65 @@ +#pragma context server + +#include "items/shields_base.as" + +namespace MS +{ + +class ShieldsIronshield : CGameScript +{ + int BLOCK_CHANCE_DOWN; + int BLOCK_CHANCE_UP; + float DMG_BLOCK_UP; + float MELEE_ACCURACY; + int MELEE_ENERGY; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + float NOPUSH_CHANCE; + float PARRY_MULTI; + int SHIELD_BASE_PARRY; + int SHIELD_HEALTH; + int SHIELD_IMMORTAL; + int SHIELD_MAXHEALTH; + string SOUND_BLOCK; + + ShieldsIronshield() + { + NOPUSH_CHANCE = 0.5; + PARRY_MULTI = 1.75; + SHIELD_BASE_PARRY = 20; + MODEL_VIEW = "viewmodels/v_shields.mdl"; + MODEL_VIEW_IDX = 0; + MODEL_BODY_OFS = 65; + MELEE_ENERGY = 4; + MELEE_ACCURACY = 0.5; + BLOCK_CHANCE_UP = 100; + DMG_BLOCK_UP = 0.35; + BLOCK_CHANCE_DOWN = 20; + SHIELD_MAXHEALTH = 1000; + SHIELD_IMMORTAL = 0; + SHIELD_HEALTH = 1000; + SOUND_BLOCK = "body/armour2.wav"; + Precache(SOUND_BLOCK); + } + + void shield_spawn() + { + SetName("Iron Shield"); + SetDescription("An Iron shield"); + SetWeight(40); + SetSize(45); + SetValue(600); + SetQuality(150); + SetHUDSprite("hand", "ironshield"); + SetHUDSprite("trade", "ironshield"); + } + + void game_wear() + { + SendPlayerMessage("You", "sling an iron shield over your shoulder."); + } + +} + +} diff --git a/scripts/angelscript/items/shields_lironshield.as b/scripts/angelscript/items/shields_lironshield.as new file mode 100644 index 00000000..b6fc99b2 --- /dev/null +++ b/scripts/angelscript/items/shields_lironshield.as @@ -0,0 +1,60 @@ +#pragma context server + +#include "items/shields_base.as" + +namespace MS +{ + +class ShieldsLironshield : CGameScript +{ + int BLOCK_CHANCE_DOWN; + int BLOCK_CHANCE_UP; + float DMG_BLOCK_UP; + float MELEE_ACCURACY; + int MELEE_ENERGY; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + float NOPUSH_CHANCE; + float PARRY_MULTI; + int SHIELD_BASE_PARRY; + int SHIELD_HEALTH; + int SHIELD_IMMORTAL; + int SHIELD_MAXHEALTH; + string SOUND_BLOCK; + + ShieldsLironshield() + { + NOPUSH_CHANCE = 1.0; + PARRY_MULTI = 2.5; + SHIELD_BASE_PARRY = 40; + MODEL_VIEW = "viewmodels/v_shields.mdl"; + MODEL_VIEW_IDX = 0; + MODEL_BODY_OFS = 65; + MELEE_ENERGY = 8; + MELEE_ACCURACY = 0.75; + BLOCK_CHANCE_UP = 100; + DMG_BLOCK_UP = 0.30; + BLOCK_CHANCE_DOWN = 25; + SHIELD_MAXHEALTH = 4000; + SHIELD_IMMORTAL = 0; + SHIELD_HEALTH = 4000; + SOUND_BLOCK = "debris/bustmetal1.wav"; + Precache(SOUND_BLOCK); + } + + void shield_spawn() + { + SetName("Large Iron Shield"); + SetDescription("A large Iron shield"); + SetWeight(60); + SetSize(70); + SetValue(2200); + SetQuality(600); + SetHUDSprite("hand", "ironshield"); + SetHUDSprite("trade", "ironshield"); + } + +} + +} diff --git a/scripts/angelscript/items/shields_rune.as b/scripts/angelscript/items/shields_rune.as new file mode 100644 index 00000000..f8000c6a --- /dev/null +++ b/scripts/angelscript/items/shields_rune.as @@ -0,0 +1,97 @@ +#pragma context server + +#include "items/shields_base.as" + +namespace MS +{ + +class ShieldsRune : CGameScript +{ + int BLOCK_CHANCE_DOWN; + int BLOCK_CHANCE_UP; + float DMG_BLOCK_UP; + int EFFECT_RANGE; + float MELEE_ACCURACY; + int MELEE_ENERGY; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + float NOPUSH_CHANCE; + float PARRY_MULTI; + int SHIELD_BASE_PARRY; + string SHIELD_HEALTH; + int SHIELD_IMMORTAL; + string SHIELD_MAXHEALTH; + int SHIELD_REPORT_HITS; + string SOUND_BLOCK; + + ShieldsRune() + { + NOPUSH_CHANCE = 0.75; + PARRY_MULTI = 2.0; + SHIELD_BASE_PARRY = 25; + MODEL_VIEW = "viewmodels/v_shields.mdl"; + MODEL_VIEW_IDX = 2; + SHIELD_REPORT_HITS = 1; + MODEL_BODY_OFS = 69; + MELEE_ENERGY = 15; + MELEE_ACCURACY = 0.9; + BLOCK_CHANCE_UP = 100; + DMG_BLOCK_UP = 0.35; + BLOCK_CHANCE_DOWN = 30; + SHIELD_MAXHEALTH = "infinite"; + SHIELD_IMMORTAL = 1; + SHIELD_HEALTH = "infinite"; + SOUND_BLOCK = "doors/doorstop5.wav"; + EFFECT_RANGE = 150; + Precache(SOUND_BLOCK); + } + + void shield_spawn() + { + SetName("Rune Shield"); + SetDescription("This rune shield is cold to the touch"); + SetWeight(40); + SetSize(45); + SetValue(5000); + SetQuality(2000); + SetHUDSprite("hand", "ironshield"); + SetHUDSprite("trade", "runeshield"); + } + + void game_wear() + { + SendPlayerMessage("You", "sling a Rune Shield over your shoulder."); + } + + void shield_hit() + { + if (!(IsEntityAlive(param1))) return; + if ((GetEntityProperty(param2, "is_projectile"))) return; + string MY_OWNER = GetEntityIndex(GetOwner()); + string THE_ATTACKER = GetEntityIndex(param1); + if (!(THE_ATTACKER != GetEntityIndex(GetOwner()))) return; + string OWNER_ORG = GetEntityOrigin(MY_OWNER); + string ATTACKER_ORG = GetEntityOrigin(THE_ATTACKER); + if (!(Distance(OWNER_ORG, ATTACKER_ORG) < EFFECT_RANGE)) return; + if (!("game.item.attacking")) + { + int FROST_CHANCE = 25; + } + else + { + int FROST_CHANCE = 5; + } + int FROST_ROLL = RandomInt(1, FROST_CHANCE); + LogDebug("frost_roll FROST_ROLL / FROST_CHANCE"); + if (FROST_ROLL == 1) + { + SendPlayerMessage(GetOwner(), "The rune shield's magic has frozen your enemy!"); + EmitSound(GetOwner(), 2, "debris/beamstart14.wav", "const.snd.fullvol"); + ApplyEffect(THE_ATTACKER, "effects/dot_cold", 10, GetEntityIndex(GetOwner()), Random(5, 15), "none"); + } + } + +} + +} diff --git a/scripts/angelscript/items/shields_urdual.as b/scripts/angelscript/items/shields_urdual.as new file mode 100644 index 00000000..478f43a1 --- /dev/null +++ b/scripts/angelscript/items/shields_urdual.as @@ -0,0 +1,85 @@ +#pragma context server + +#include "items/shields_base.as" + +namespace MS +{ + +class ShieldsUrdual : CGameScript +{ + int BLOCK_CHANCE_DOWN; + int BLOCK_CHANCE_UP; + float DMG_BLOCK_UP; + int EFFECT_RANGE; + float MELEE_ACCURACY; + int MELEE_ENERGY; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + float NOPUSH_CHANCE; + float PARRY_MULTI; + int SHIELD_BASE_PARRY; + string SHIELD_HEALTH; + int SHIELD_IMMORTAL; + string SHIELD_MAXHEALTH; + string SOUND_BLOCK; + + ShieldsUrdual() + { + NOPUSH_CHANCE = 0.75; + PARRY_MULTI = 3.0; + SHIELD_BASE_PARRY = 40; + MODEL_VIEW = "viewmodels/v_shields.mdl"; + MODEL_VIEW_IDX = 3; + MODEL_BODY_OFS = 73; + MELEE_ENERGY = 1; + MELEE_ACCURACY = 1.5; + BLOCK_CHANCE_UP = 100; + DMG_BLOCK_UP = 0.05; + BLOCK_CHANCE_DOWN = 50; + SHIELD_MAXHEALTH = "infinite"; + SHIELD_IMMORTAL = 1; + SHIELD_HEALTH = "infinite"; + SOUND_BLOCK = "doors/doorstop5.wav"; + EFFECT_RANGE = 150; + } + + void game_precache() + { + Precache(SOUND_BLOCK); + } + + void shield_spawn() + { + SetName("Urdulian Shield"); + SetDescription("A massive shield forged from the seal of a fallen temple of Urdual"); + SetWeight(200); + SetSize(45); + SetValue(5000); + SetQuality(2000); + SetHUDSprite("hand", 165); + SetHUDSprite("trade", 165); + } + + void game_wear() + { + SendPlayerMessage("You", "heft an Urdulian Shield onto your back."); + } + + void bweapon_effect_activate() + { + if (!("game.item.wielded")) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + string L_SCRIPTFLAG = GetEntityProperty(GetOwner(), "itemname"); + CallExternal(GetOwner(), "plr_change_speed", -1, 0.75, L_SCRIPTFLAG); + } + + void bweapon_effect_remove() + { + string L_SCRIPTFLAG = GetEntityProperty(GetOwner(), "itemname"); + CallExternal(GetOwner(), "plr_update_speed_effects", "remove", L_SCRIPTFLAG); + } + +} + +} diff --git a/scripts/angelscript/items/shields_wooden.as b/scripts/angelscript/items/shields_wooden.as new file mode 100644 index 00000000..ed22d080 --- /dev/null +++ b/scripts/angelscript/items/shields_wooden.as @@ -0,0 +1,67 @@ +#pragma context server + +#include "items/shields_base.as" + +namespace MS +{ + +class ShieldsWooden : CGameScript +{ + int BLOCK_CHANCE_DOWN; + int BLOCK_CHANCE_UP; + float DMG_BLOCK_UP; + float MELEE_ACCURACY; + float MELEE_ENERGY; + int MODEL_BODY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + float NOPUSH_CHANCE; + float PARRY_MULTI; + int SHIELD_BASE_PARRY; + string SHIELD_BREAK_SOUND; + int SHIELD_HEALTH; + int SHIELD_IMMORTAL; + int SHIELD_MAXHEALTH; + string SOUND_BLOCK; + + ShieldsWooden() + { + PARRY_MULTI = 1.25; + SHIELD_BASE_PARRY = 5; + NOPUSH_CHANCE = 0.25; + MODEL_VIEW = "viewmodels/v_shields.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_BODY_OFS = 61; + MELEE_ENERGY = 0.5; + MELEE_ACCURACY = 0.3; + BLOCK_CHANCE_UP = 90; + DMG_BLOCK_UP = 0.6; + BLOCK_CHANCE_DOWN = 15; + SHIELD_MAXHEALTH = 200; + SHIELD_IMMORTAL = 0; + SHIELD_HEALTH = 200; + SHIELD_BREAK_SOUND = "debris/bustmetal1.wav"; + SOUND_BLOCK = "debris/wood2.wav"; + Precache(SOUND_BLOCK); + } + + void shield_spawn() + { + SetName("Wooden Shield"); + SetDescription("A poor defense , but still better than your forearm."); + SetWeight(15); + SetSize(30); + SetValue(35); + SetQuality(60); + SetHUDSprite("hand", "ironshield"); + SetHUDSprite("trade", 178); + } + + void game_wear() + { + SendPlayerMessage("You", "sling a wooden shield over your shoulder."); + } + +} + +} diff --git a/scripts/angelscript/items/skin_bear.as b/scripts/angelscript/items/skin_bear.as new file mode 100644 index 00000000..84161cc4 --- /dev/null +++ b/scripts/angelscript/items/skin_bear.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class SkinBear : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + + SkinBear() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_VIEW = "none"; + MODEL_BODY_OFS = 31; + ANIM_PREFIX = "boar"; + } + + void miscitem_spawn() + { + SetName("Bear Skin"); + SetDescription("A large black bear skin"); + SetWeight(2); + SetSize(2); + SetValue(60); + SetWorldModel(MODEL_WORLD); + SetPlayerModel(MODEL_HANDS); + SetViewModel(MODEL_VIEW); + SetHUDSprite("trade", "boarskin"); + } + +} + +} diff --git a/scripts/angelscript/items/skin_boar.as b/scripts/angelscript/items/skin_boar.as new file mode 100644 index 00000000..b3c08c3d --- /dev/null +++ b/scripts/angelscript/items/skin_boar.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class SkinBoar : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + + SkinBoar() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_VIEW = "none"; + MODEL_BODY_OFS = 31; + ANIM_PREFIX = "boar"; + } + + void miscitem_spawn() + { + SetName("Boar Skin"); + SetDescription("A Boar Skin"); + SetWeight(2); + SetSize(2); + SetValue(6); + SetWorldModel(MODEL_WORLD); + SetPlayerModel(MODEL_HANDS); + SetViewModel(MODEL_VIEW); + SetHUDSprite("trade", "boarskin"); + } + +} + +} diff --git a/scripts/angelscript/items/skin_boar_heavy.as b/scripts/angelscript/items/skin_boar_heavy.as new file mode 100644 index 00000000..79731f38 --- /dev/null +++ b/scripts/angelscript/items/skin_boar_heavy.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class SkinBoarHeavy : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + + SkinBoarHeavy() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_VIEW = "none"; + MODEL_BODY_OFS = 31; + ANIM_PREFIX = "boar"; + } + + void miscitem_spawn() + { + SetName("Heavy Boar Skin"); + SetDescription("A heavy boar skin"); + SetWeight(4); + SetSize(3); + SetValue(30); + SetWorldModel(MODEL_WORLD); + SetPlayerModel(MODEL_HANDS); + SetViewModel(MODEL_VIEW); + SetHUDSprite("trade", "boarskin"); + } + +} + +} diff --git a/scripts/angelscript/items/skin_ratpelt.as b/scripts/angelscript/items/skin_ratpelt.as new file mode 100644 index 00000000..72e23bdc --- /dev/null +++ b/scripts/angelscript/items/skin_ratpelt.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class SkinRatpelt : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + + SkinRatpelt() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_VIEW = "none"; + MODEL_BODY_OFS = 34; + ANIM_PREFIX = "rat"; + } + + void miscitem_spawn() + { + SetName("Rat Pelt"); + SetDescription("A Rat Pelt"); + SetValue(3); + SetSize(1); + SetWeight(1); + SetHUDSprite("trade", "ratpelt"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_base.as b/scripts/angelscript/items/smallarms_base.as new file mode 100644 index 00000000..200bae31 --- /dev/null +++ b/scripts/angelscript/items/smallarms_base.as @@ -0,0 +1,190 @@ +#pragma context server + +#include "items/base_melee.as" + +namespace MS +{ + +class SmallarmsBase : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_DELAY_HIGH; + int ANIM_IDLE_DELAY_LOW; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + int MELEE_VIEWANIM_ATK; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + int SMALLARMS_TURBO_ON; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT1; + string SOUND_SHOUT2; + string SOUND_SWIPE; + + SmallarmsBase() + { + ANIM_LIFT1 = 9; + ANIM_IDLE1 = 10; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 11; + ANIM_UNWIELD = 12; + ANIM_WIELDEDIDLE1 = 13; + ANIM_ATTACK1 = 14; + ANIM_ATTACK2 = 15; + ANIM_IDLE_DELAY_LOW = 0; + ANIM_IDLE_DELAY_HIGH = 0; + MELEE_VIEWANIM_ATK = RandomInt(ANIM_ATTACK1, ANIM_ATTACK2); + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/dagger/daggermetal1.wav"; + SOUND_HITWALL2 = "weapons/dagger/daggermetal2.wav"; + SOUND_DRAW = "weapons/dagger/dagger2.wav"; + SOUND_SHOUT1 = GetEntityProperty(GetOwner(), "scriptvar"); + SOUND_SHOUT2 = GetEntityProperty(GetOwner(), "scriptvar"); + MELEE_DMG_TYPE = "pierce"; + MELEE_STAT = "smallarms"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + PLAYERANIM_AIM = "knife"; + PLAYERANIM_SWING = "swing_knife"; + MELEE_ENERGY = 0.1; + } + + void weapon_spawn() + { + SetHand("right"); + register_secondary(); + } + + void OnDeploy() override + { + if (!(true)) return; + turbo_off(); + } + + void melee_start() + { + if ((CUSTOM_SWING)) return; + string L_ANIM = MELEE_VIEWANIM_ATK; + PlayViewAnim(L_ANIM); + } + + void special_02_start() + { + if (!(true)) return; + // svplaysound: svplaysound 2 10 $get(ent_owner,scriptvar,'PLR_SOUND_SWORDREADY') + EmitSound(2, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void special_02_strike() + { + if (!(true)) return; + string NEXT_HASTE = GetEntityProperty(GetOwner(), "scriptvar"); + if (GetGameTime() < NEXT_HASTE) + { + string HASTE_DELAY = NEXT_HASTE; + HASTE_DELAY -= GetGameTime(); + int HASTE_DELAY = int(HASTE_DELAY); + SendColoredMessage(GetOwner(), "Cannot repeat haste attack yet. " + HASTE_DELAY); + return; + } + string URDUAL_CHECK = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(GetGameTime() > URDUAL_CHECK)) return; + string SPEC_DURATION = /* TODO: $get_skill_ratio */ $get_skill_ratio(GetSkillLevel(GetOwner(), "smallarms.prof.ratio"), 15, 30); + ApplyEffect(GetOwner(), "effects/specialattack_haste", SPEC_DURATION, GetEntityIndex(GetOwner())); + turbo_on(); + CallExternal(GetOwner(), "ext_haste_cooldown", (SPEC_DURATION + 35)); + } + + void turbo_on() + { + if (!(true)) return; + LogDebug("turbo_on"); + if ((SMALLARMS_TURBO_ON)) return; + SMALLARMS_TURBO_ON = 1; + string NEW_MELEE_ATK_DURATION = MELEE_ATK_DURATION; + string NEW_MELEE_DMG_DELAY = MELEE_DMG_DELAY; + NEW_MELEE_ATK_DURATION /= 2; + NEW_MELEE_DMG_DELAY /= 2; + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + } + + void turbo_off() + { + if (!(true)) return; + LogDebug("turbo_off"); + if (!(SMALLARMS_TURBO_ON)) return; + SMALLARMS_TURBO_ON = 0; + if ((GetEntityProperty(GetOwner(), "haseffect"))) + { + RemoveEffect(GetOwner(), "player_haste"); + } + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 0); + } + + void register_secondary() + { + if ((CUSTOM_REGISTER_SECONDARY)) return; + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 1.0; + float reg.attack.delay.end = 1.2; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "special_02"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 4; + int reg.attack.dmg.ignore = 1; + if (BASE_LEVEL_REQ > reg.attack.reqskill) + { + reg.attack.reqskill += BASE_LEVEL_REQ; + } + RegisterAttack(); + } + + void bs_global_command() + { + if (!(true)) return; + LogDebug("bs_global_command GetEntityName(param1) vs GetEntityName(GetOwner())"); + if (!(param1 == GetEntityIndex(GetOwner()))) return; + ScheduleDelayedEvent(1.0, "turbo_off"); + } + + void activate_items() + { + if (!(true)) return; + LogDebug("activate_items GetEntityName(param1) vs GetEntityName(GetOwner())"); + if (!(GetEntityName(param1) == GetEntityName(GetOwner()))) return; + ScheduleDelayedEvent(1.0, "turbo_off"); + } + + void bweapon_effect_remove() + { + turbo_off(); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_bone_blade.as b/scripts/angelscript/items/smallarms_bone_blade.as new file mode 100644 index 00000000..7daf866f --- /dev/null +++ b/scripts/angelscript/items/smallarms_bone_blade.as @@ -0,0 +1,105 @@ +#pragma context server + +#include "items/smallarms_base.as" +#include "items/base_varied_attacks.as" +#include "items/base_vampire.as" + +namespace MS +{ + +class SmallarmsBoneBlade : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SWING_ANIM; + + SmallarmsBoneBlade() + { + BASE_LEVEL_REQ = 15; + MELEE_DMG = 180; + MELEE_DMG_RANGE = 70; + MELEE_RANGE = 35; + MELEE_ACCURACY = 0.77; + MODEL_VIEW = "viewmodels/v_1hswordssb.mdl"; + MODEL_VIEW_IDX = 7; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 0; + ANIM_UNWIELD = 0; + ANIM_WIELDEDIDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_PARRY_CHANCE = 0.3; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "khopesh"; + } + + void weapon_spawn() + { + SetName("Bone Blade"); + SetDescription("A wicked blade of cursed bone"); + SetWeight(3); + SetSize(2); + SetValue(1000); + SetHUDSprite("hand", 106); + SetHUDSprite("trade", 106); + } + + void game_dodamage() + { + if (!(param1)) return; + string HEAL_AMT = GetEntityProperty(m_hLastStruckByMe, "scriptvar"); + HEAL_AMT /= 5; + if (HEAL_AMT > 20) + { + int HEAL_AMT = 20; + } + Effect("glow", GetOwner(), Vector3(0, 100, 0), 60, 1, 1); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + try_vampire_target(GetEntityIndex(GetOwner()), GetEntityIndex(param2), HEAL_AMT); + } + + void melee_start() + { + EmitSound(GetOwner(), 1, SOUND_SWIPE, 10); + if (!(true)) return; + PlayOwnerAnim("once", "sword_swing"); + check_attack_anim(); + SWING_ANIM = CUR_ATTACK_ANIM; + // TODO: splayviewanim ent_me SWING_ANIM + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_craftedknife.as b/scripts/angelscript/items/smallarms_craftedknife.as new file mode 100644 index 00000000..f7b09fb8 --- /dev/null +++ b/scripts/angelscript/items/smallarms_craftedknife.as @@ -0,0 +1,62 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsCraftedknife : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + + SmallarmsCraftedknife() + { + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + BASE_LEVEL_REQ = 6; + MELEE_RANGE = 50; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_DMG = 190; + MELEE_DMG_RANGE = 90; + MELEE_ACCURACY = 0.8; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_PARRY_CHANCE = 0.3; + MODEL_BODY_OFS = 0; + ANIM_PREFIX = "craftedknife"; + } + + void weapon_spawn() + { + SetName("Dull Finely Crafted Knife"); + SetDescription("A deadly looking dagger of high craftsmanship"); + SetWeight(3); + SetSize(2); + SetValue(50); + SetHUDSprite("hand", "merldagger"); + SetHUDSprite("trade", "crafted"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_craftedknife2.as b/scripts/angelscript/items/smallarms_craftedknife2.as new file mode 100644 index 00000000..2c4abc1f --- /dev/null +++ b/scripts/angelscript/items/smallarms_craftedknife2.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "items/smallarms_craftedknife.as" + +namespace MS +{ + +class SmallarmsCraftedknife2 : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_RANGE; + + SmallarmsCraftedknife2() + { + BASE_LEVEL_REQ = 9; + MELEE_DMG = 210; + MELEE_DMG_RANGE = 90; + MELEE_RANGE = 35; + MELEE_ACCURACY = 0.8; + } + + void weapon_spawn() + { + SetName("Finely Crafted Knife"); + SetDescription("A deadly looking dagger of high craftsmanship"); + SetWeight(3); + SetSize(2); + SetValue(20); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_craftedknife3.as b/scripts/angelscript/items/smallarms_craftedknife3.as new file mode 100644 index 00000000..5c4e32eb --- /dev/null +++ b/scripts/angelscript/items/smallarms_craftedknife3.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "items/smallarms_craftedknife.as" + +namespace MS +{ + +class SmallarmsCraftedknife3 : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_RANGE; + + SmallarmsCraftedknife3() + { + BASE_LEVEL_REQ = 12; + MELEE_DMG = 230; + MELEE_DMG_RANGE = 90; + MELEE_RANGE = 35; + MELEE_ACCURACY = 0.8; + } + + void weapon_spawn() + { + SetName("Sharp Finely Crafted Knife"); + SetDescription("A deadly looking dagger of high craftsmanship"); + SetWeight(3); + SetSize(2); + SetValue(60); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_craftedknife4.as b/scripts/angelscript/items/smallarms_craftedknife4.as new file mode 100644 index 00000000..35b6c688 --- /dev/null +++ b/scripts/angelscript/items/smallarms_craftedknife4.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "items/smallarms_craftedknife.as" + +namespace MS +{ + +class SmallarmsCraftedknife4 : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_RANGE; + + SmallarmsCraftedknife4() + { + BASE_LEVEL_REQ = 12; + MELEE_DMG = 250; + MELEE_DMG_RANGE = 90; + MELEE_RANGE = 35; + MELEE_ACCURACY = 0.8; + } + + void weapon_spawn() + { + SetName("Perfect Finely Crafted Knife"); + SetDescription("A deadly looking dagger of high craftsmanship"); + SetWeight(3); + SetSize(2); + SetValue(500); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_cre.as b/scripts/angelscript/items/smallarms_cre.as new file mode 100644 index 00000000..26ff419f --- /dev/null +++ b/scripts/angelscript/items/smallarms_cre.as @@ -0,0 +1,519 @@ +#pragma context server + +#include "items/base_weapon_new.as" + +namespace MS +{ + +class SmallarmsCre : CGameScript +{ + float ATK1_ACCURACY; + int ATK1_ANG; + string ATK1_CALLBACK; + float ATK1_DELAY_STRIKE; + int ATK1_DMG; + int ATK1_DMG_MULTI; + int ATK1_DMG_RANGE; + string ATK1_DMG_TYPE; + float ATK1_DURATION; + string ATK1_KEYS; + int ATK1_MPDRAIN; + int ATK1_NOISE; + int ATK1_NO_AUTOAIM; + int ATK1_OFS; + string ATK1_PANIM; + int ATK1_RANGE; + string ATK1_SKILL; + string ATK1_SKILL_LEVEL; + float ATK1_STAMINA; + string ATK1_TYPE; + int ATK1_VANIM; + string ATK2_ACCURACY; + int ATK2_ADD_SKILL_REQ; + int ATK2_AMMODRAIN; + int ATK2_ANG; + string ATK2_CALLBACK; + int ATK2_COF; + float ATK2_DELAY_STRIKE; + string ATK2_DMG; + int ATK2_DMG_MULTI; + string ATK2_DMG_RANGE; + string ATK2_DMG_TYPE; + string ATK2_DURATION; + int ATK2_IS_PROJECTILE; + string ATK2_KEYS; + int ATK2_MPDRAIN; + string ATK2_NOISE; + int ATK2_NO_AUTOAIM; + int ATK2_OFS; + string ATK2_PANIM; + string ATK2_PROJECTILE; + string ATK2_RANGE; + string ATK2_SKILL; + string ATK2_SKILL_LEVEL; + string ATK2_STAMINA; + string ATK2_TYPE; + int ATK2_VANIM; + int BASE_LEVEL_REQ; + int BITEM_CUSTOM_ATK2_EVENT; + int BLOCK_ON; + int BWEAPON_CUSTOM_DRAW; + int BWEAPON_CUSTOM_SWITCHHANDS; + string BWEAPON_DESC; + string BWEAPON_HANDS; + int BWEAPON_INV_SPRITE_IDX; + string BWEAPON_NAME; + int BWEAPON_VALUE; + int BWEAPON_WEIGHT; + string CRE_TYPE; + int C_VANIM_DRAW; + int C_VANIM_IDLE; + string GAVE_MATCH_SET_MSG; + int HANDS_SINGLE; + string LAST_KEY_CHECK; + int MATCHED_SET; + int MATCHED_SET_ACTIVE; + string MATCHED_SET_TYPE; + int MP_THROW; + string NEXT_BLOCK; + string OTHER_HAND; + string PANIM_EXT; + string PANIM_IDLE; + float PITCH_ATK1; + int PITCH_ATK2; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + string SOUND_ATK1; + string SOUND_ATK2; + string SOUND_BLOCK1; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + int VANIM_DRAW; + int VANIM_DRAW_SNG; + int VANIM_IDLE; + int VANIM_IDLE_SNG; + string VMODEL_FILE; + int VMODEL_IDX; + string WANIM_FLOOR; + string WANIM_HAND; + + SmallarmsCre() + { + MATCHED_SET = 1; + MATCHED_SET_TYPE = "crescent"; + MP_THROW = 10; + CRE_TYPE = "slash"; + BWEAPON_NAME = "Crescent Blade"; + BWEAPON_DESC = "A viscious pair of curving blades (matched set)"; + BWEAPON_WEIGHT = 1; + BWEAPON_VALUE = 3000; + BWEAPON_INV_SPRITE_IDX = 193; + BWEAPON_HANDS = "right"; + BASE_LEVEL_REQ = 30; + BWEAPON_CUSTOM_DRAW = 1; + BWEAPON_CUSTOM_SWITCHHANDS = 1; + BITEM_CUSTOM_ATK2_EVENT = 1; + VMODEL_FILE = "viewmodels/v_1hswords.mdl"; + VMODEL_IDX = 6; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 42; + PMODEL_IDX_HANDS = 41; + PANIM_IDLE = "aim_axe_onehand"; + PANIM_EXT = "knife"; + VANIM_DRAW = 0; + VANIM_IDLE = 1; + C_VANIM_DRAW = 0; + C_VANIM_IDLE = 1; + VANIM_DRAW_SNG = 6; + VANIM_IDLE_SNG = 7; + WANIM_FLOOR = "standard_floor_idle"; + WANIM_HAND = "standard_idle"; + ATK1_TYPE = "strike-land"; + ATK1_KEYS = "+attack1"; + ATK1_RANGE = 60; + ATK1_DMG = 275; + ATK1_DMG_RANGE = 5; + ATK1_DMG_TYPE = "slash"; + ATK1_STAMINA = 0.1; + ATK1_SKILL = "smallarms"; + ATK1_ACCURACY = 0.85; + ATK1_DELAY_STRIKE = 0.5; + ATK1_DURATION = 1.1; + ATK1_OFS = 0; + ATK1_ANG = 0; + ATK1_CALLBACK = "atk1"; + ATK1_NOISE = 650; + ATK1_SKILL_LEVEL = BASE_LEVEL_REQ; + ATK1_MPDRAIN = 0; + ATK1_DMG_MULTI = 0; + ATK1_NO_AUTOAIM = 0; + ATK1_PANIM = "axe_onehand_swing"; + ATK1_VANIM = 3; + SOUND_ATK1 = "weapons/cbar_miss1.wav"; + PITCH_ATK1 = Random(125, 150); + ATK2_TYPE = ATK1_TYPE; + ATK2_KEYS = "-attack1"; + ATK2_RANGE = ATK1_RANGE; + ATK2_DMG = ATK1_DMG; + ATK2_DMG_RANGE = ATK1_DMG_RANGE; + ATK2_DMG_TYPE = ATK1_DMG_TYPE; + ATK2_STAMINA = ATK1_STAMINA; + ATK2_SKILL = ATK1_SKILL; + ATK2_ACCURACY = ATK1_ACCURACY; + ATK2_DELAY_STRIKE = 0.3; + ATK2_DURATION = ATK1_DURATION; + ATK2_OFS = 0; + ATK2_ANG = 0; + ATK2_CALLBACK = "atk2"; + ATK2_NOISE = ATK1_NOISE; + ATK2_SKILL_LEVEL = BASE_LEVEL_REQ; + ATK2_ADD_SKILL_REQ = 2; + ATK2_MPDRAIN = 0; + ATK2_DMG_MULTI = 2; + ATK2_NO_AUTOAIM = 0; + ATK2_PANIM = "pole_swing"; + ATK2_VANIM = 5; + ATK2_IS_PROJECTILE = 0; + ATK2_PROJECTILE = "arrow"; + ATK2_AMMODRAIN = 1; + ATK2_COF = 0; + SOUND_ATK2 = "zombie/claw_miss2.wav"; + PITCH_ATK2 = 80; + SOUND_HITWALL1 = "weapons/dagger/daggermetal1.wav"; + SOUND_HITWALL2 = "weapons/dagger/daggermetal2.wav"; + SOUND_BLOCK1 = "body/armour3.wav"; + } + + void bitem_draw() + { + PlayViewAnim("break"); + PlayAnim("once", "break"); + SetViewModel(VMODEL_FILE); + SetModel(PMODEL_FILE); + SetWorldModel(PMODEL_FILE); + string L_PMODEL_IDX_HANDS = PMODEL_IDX_HANDS; + L_PMODEL_IDX_HANDS -= "game.item.hand_index"; + SetModelBody(0, L_PMODEL_IDX_HANDS); + SetAnimExt(PANIM_EXT); + PlayAnim("once", WANIM_HAND); + NEXT_BLOCK = GetGameTime(); + NEXT_BLOCK += 2.0; + ScheduleDelayedEvent(0.1, "set_anims"); + } + + void set_anims() + { + if ((true)) + { + if (!(SENT_HELP_TIP)) + { + ShowHelpTip(GetOwner(), "crematch", "MATCHED SET WEAPON", "If you can find another crescent weapon, you'll have no dual weild penalty with it!"); + SENT_HELP_TIP = 1; + } + check_matched(); + if (GetEntityProperty(OTHER_HAND, "itemname") == "fist_bare") + { + int SINGLE_HANDED = 1; + } + if (GetEntityProperty(OTHER_HAND, "itemname") == 0) + { + int SINGLE_HANDED = 1; + } + if ((SINGLE_HANDED)) + { + set_anims_single(); + CallClientItemEvent(GetOwner(), "set_anims_single", 1); + } + else + { + set_anims_double(); + CallClientItemEvent(GetOwner(), "set_anims_double", 1); + } + } + if (!(false)) return; + cl_play_draw(); + } + + void cl_play_draw() + { + if (HANDS_SINGLE == "HANDS_SINGLE") + { + ScheduleDelayedEvent(0.1, "cl_play_draw"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PlayViewAnim(C_VANIM_DRAW); + } + + void cl_play_idle() + { + if (HANDS_SINGLE == "HANDS_SINGLE") + { + ScheduleDelayedEvent(0.1, "cl_play_idle"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PlayViewAnim(C_VANIM_IDLE); + } + + void set_anims_single() + { + HANDS_SINGLE = 1; + C_VANIM_DRAW = VANIM_DRAW_SNG; + C_VANIM_IDLE = VANIM_IDLE_SNG; + if (!(false)) return; + string DONT_IDLE = param1; + if ((DONT_IDLE)) return; + PlayViewAnim(C_VANIM_IDLE); + } + + void set_anims_double() + { + HANDS_SINGLE = 0; + C_VANIM_DRAW = VANIM_DRAW; + C_VANIM_IDLE = VANIM_IDLE; + if (!(false)) return; + string DONT_IDLE = param1; + if ((DONT_IDLE)) return; + PlayViewAnim(C_VANIM_IDLE); + } + + void game_switchhands() + { + set_idle(); + } + + void atk1_end() + { + if ((true)) + { + check_matched(); + } + if (!(false)) return; + cl_play_idle(); + } + + void atk2_end() + { + if ((true)) + { + check_matched(); + } + } + + void set_idle() + { + if ((true)) + { + if ("game.item.hand_index" == 0) + { + OTHER_HAND = GetEntityProperty(GetOwner(), "scriptvar"); + } + else + { + OTHER_HAND = GetEntityProperty(GetOwner(), "scriptvar"); + } + if (GetEntityProperty(OTHER_HAND, "itemname") == "fist_bare") + { + int SINGLE_HANDED = 1; + } + if (GetEntityProperty(OTHER_HAND, "itemname") == 0) + { + int SINGLE_HANDED = 1; + } + if ((SINGLE_HANDED)) + { + set_anims_single(); + CallClientItemEvent(GetOwner(), "set_anims_single"); + } + else + { + set_anims_double(); + CallClientItemEvent(GetOwner(), "set_anims_double"); + } + } + } + + void atk2_start() + { + if (!(true)) return; + if (GetEntityMP(GetOwner()) < MP_THROW) + { + // TODO: splayviewanim ent_me 9 + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + // TODO: splayviewanim ent_me 15 + PlayOwnerAnim("critical", ATK2_PANIM); + EmitSound(GetOwner(), 1, SOUND_ATK2, 10); + } + + void atk2_strike() + { + if (!(true)) return; + if (GetEntityMP(GetOwner()) < MP_THROW) + { + SendColoredMessage(GetOwner(), "Crescent Blade: Insufficient mana for shadow throw"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + CallExternal(GetOwner(), "ext_tosscre", int("game.item.hand_index"), CRE_TYPE); + } + + void check_keys_loop() + { + if (!(MATCHED_SET_ACTIVE)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + ScheduleDelayedEvent(0.25, "check_keys_loop"); + LAST_KEY_CHECK = GetGameTime(); + if ((BLOCK_ON)) + { + if (!(IsKeyDown(GetOwner(), "use"))) + { + } + block_end(); + } + if ((BLOCK_ON)) return; + if (!(GetGameTime() > NEXT_BLOCK)) return; + if (!(IsKeyDown(GetOwner(), "use"))) return; + NEXT_BLOCK = GetGameTime(); + NEXT_BLOCK += 1.0; + check_matched(); + if (!(MATCHED_SET_ACTIVE)) return; + // TODO: splayviewanim ent_me 14 + BLOCK_ON = 1; + PlayOwnerAnim("critical", "aim_fists"); + CallExternal(OTHER_HAND, "match_block_anim"); + lock_weapon(); + SetScriptFlags(GetOwner(), "add", "wcre", "nopush", 1, -1, "none"); + } + + void block_end() + { + if (!(BLOCK_ON)) return; + // TODO: splayviewanim ent_me C_VANIM_IDLE + BLOCK_ON = 0; + NEXT_BLOCK = GetGameTime(); + NEXT_BLOCK += 1.0; + PlayOwnerAnim("once", PANIM_IDLE); + unlock_weapon(); + CallExternal(OTHER_HAND, "match_unblock_anim"); + SetScriptFlags(GetOwner(), "remove", "wcre"); + } + + void game_putinpack() + { + if ((BLOCK_ON)) + { + SetScriptFlags(GetOwner(), "remove", "wcre"); + } + BLOCK_ON = 0; + MATCHED_SET_ACTIVE = 0; + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(BLOCK_ON)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + if ((param4).findFirst("target") == 0) + { + int CANT_BLOCK = 1; + } + if ((param4).findFirst("effect") >= 0) + { + int CANT_BLOCK = 1; + } + if ((GetEntityProperty(param2, "itemname")).findFirst("proj_arrow") == 0) + { + int CANT_BLOCK = 1; + } + if ((CANT_BLOCK)) return; + if (!(param1 != GetEntityIndex(GetOwner()))) return; + if (!(GetRelationship(param1) == "enemy")) return; + string OWNER_POS = GetEntityOrigin(GetOwner()); + string OWNER_ANG = GetEntityAngles(GetOwner()); + string ATTACKER_POS = GetEntityOrigin(param1); + if (!(WithinCone2D(ATTACKER_POS, OWNER_POS, OWNER_ANG))) return; + string INC_DMG = param3; + string OUT_DMG = param3; + OUT_DMG *= 0.25; + SetDamage("dmg"); + string AMT_BLOCKED = INC_DMG; + AMT_BLOCKED -= OUT_DMG; + if (AMT_BLOCKED > 1) + { + int AMT_BLOCKED = int(AMT_BLOCKED); + } + EmitSound(GetOwner(), 4, SOUND_BLOCK1, 10); + SendColoredMessage(GetOwner(), "Crescents blocked " + AMT_BLOCKED + " hp"); + } + + void match_block_anim() + { + // TODO: splayviewanim ent_me 14 + } + + void match_unblock_anim() + { + // TODO: splayviewanim ent_me C_VANIM_IDLE + } + + void lock_weapon() + { + ApplyEffect(GetOwner(), "effects/effect_templock"); + } + + void unlock_weapon() + { + CallExternal(GetOwner(), "ext_end_templock"); + } + + void check_matched() + { + if ("game.item.hand_index" == 0) + { + OTHER_HAND = GetEntityProperty(GetOwner(), "scriptvar"); + } + else + { + OTHER_HAND = GetEntityProperty(GetOwner(), "scriptvar"); + } + if (GetEntityProperty(OTHER_HAND, "scriptvar") == "crescent") + { + MATCHED_SET_ACTIVE = 1; + } + else + { + MATCHED_SET_ACTIVE = 0; + } + LogDebug("check_matched MATCHED_SET_ACTIVE"); + if (!(MATCHED_SET_ACTIVE)) return; + string L_LAST_KEY_CHECK = LAST_KEY_CHECK; + L_LAST_KEY_CHECK += 1; + if (GetGameTime() > L_LAST_KEY_CHECK) + { + check_keys_loop(); + } + if (!(GAVE_MATCH_SET_MSG)) + { + GAVE_MATCH_SET_MSG = 1; + SendInfoMsg(GetOwner(), "MATCHED SET ABILITY Hold +use to block with crescent blades"); + } + } + + void ext_activate_items() + { + check_matched(); + } + + void bweapon_effect_remove() + { + if (!(BLOCK_ON)) return; + SetScriptFlags(GetOwner(), "remove", "wcre"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_crec.as b/scripts/angelscript/items/smallarms_crec.as new file mode 100644 index 00000000..f44a93c6 --- /dev/null +++ b/scripts/angelscript/items/smallarms_crec.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "items/smallarms_cre.as" + +namespace MS +{ + +class SmallarmsCrec : CGameScript +{ + string ATK1_DMG_TYPE; + string BWEAPON_NAME; + float CRE_EFFECT_DURATION; + string CRE_EFFECT_NAME; + float CRE_EFFECT_RATIO; + string CRE_EFFECT_SCRIPT; + string CRE_EFFECT_SKILL; + string CRE_TYPE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + int VMODEL_IDX; + + SmallarmsCrec() + { + BWEAPON_NAME = "Icy Crescent Blade"; + ATK1_DMG_TYPE = "cold"; + CRE_TYPE = "cold"; + CRE_EFFECT_SCRIPT = "effects/dot_cold"; + CRE_EFFECT_DURATION = 5.0; + CRE_EFFECT_NAME = "DOT_cold"; + CRE_EFFECT_SKILL = "skill.spellcasting.ice"; + CRE_EFFECT_RATIO = 0.25; + VMODEL_IDX = 18; + PMODEL_IDX_FLOOR = 67; + PMODEL_IDX_HANDS = 69; + } + + void atk1_damaged_other() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DOT_AMT = GetEntityProperty(GetOwner(), "cre_effect_skill"); + DOT_AMT *= CRE_EFFECT_RATIO; + LogDebug("atk1_damaged_other burn GetEntityName(param1) at DOT_AMT for CRE_EFFECT_DURATION"); + ApplyEffect(param1, CRE_EFFECT_SCRIPT, CRE_EFFECT_DURATION, GetEntityIndex(GetOwner()), DOT_AMT, "smallarms"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_cref.as b/scripts/angelscript/items/smallarms_cref.as new file mode 100644 index 00000000..f81b07e3 --- /dev/null +++ b/scripts/angelscript/items/smallarms_cref.as @@ -0,0 +1,55 @@ +#pragma context server + +#include "items/smallarms_cre.as" + +namespace MS +{ + +class SmallarmsCref : CGameScript +{ + string ATK1_DMG_TYPE; + string BWEAPON_NAME; + float CRE_EFFECT_DURATION; + string CRE_EFFECT_NAME; + float CRE_EFFECT_RATIO; + string CRE_EFFECT_SCRIPT; + string CRE_EFFECT_SKILL; + string CRE_TYPE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + int VMODEL_IDX; + + SmallarmsCref() + { + BWEAPON_NAME = "Flaming Crescent Blade"; + ATK1_DMG_TYPE = "fire"; + CRE_TYPE = "fire"; + CRE_EFFECT_SCRIPT = "effects/dot_fire"; + CRE_EFFECT_DURATION = 5.0; + CRE_EFFECT_NAME = "DOT_fire"; + CRE_EFFECT_SKILL = "skill.spellcasting.fire"; + CRE_EFFECT_RATIO = 0.5; + VMODEL_IDX = 17; + PMODEL_IDX_FLOOR = 70; + PMODEL_IDX_HANDS = 72; + } + + void atk1_damaged_other() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DOT_AMT = GetEntityProperty(GetOwner(), "cre_effect_skill"); + DOT_AMT *= CRE_EFFECT_RATIO; + ApplyEffect(param1, CRE_EFFECT_SCRIPT, CRE_EFFECT_DURATION, GetEntityIndex(GetOwner()), DOT_AMT, "smallarms"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_crel.as b/scripts/angelscript/items/smallarms_crel.as new file mode 100644 index 00000000..1cc79486 --- /dev/null +++ b/scripts/angelscript/items/smallarms_crel.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "items/smallarms_cre.as" + +namespace MS +{ + +class SmallarmsCrel : CGameScript +{ + string ATK1_DMG_TYPE; + string BWEAPON_NAME; + float CRE_EFFECT_DURATION; + string CRE_EFFECT_NAME; + float CRE_EFFECT_RATIO; + string CRE_EFFECT_SCRIPT; + string CRE_EFFECT_SKILL; + string CRE_TYPE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + int VMODEL_IDX; + + SmallarmsCrel() + { + BWEAPON_NAME = "Electrified Crescent Blade"; + ATK1_DMG_TYPE = "lightning"; + CRE_TYPE = "lightning"; + CRE_EFFECT_SCRIPT = "effects/dot_lightning"; + CRE_EFFECT_DURATION = 5.0; + CRE_EFFECT_NAME = "DOT_lightning"; + CRE_EFFECT_SKILL = "skill.spellcasting.lightning"; + CRE_EFFECT_RATIO = 0.4; + VMODEL_IDX = 19; + PMODEL_IDX_FLOOR = 76; + PMODEL_IDX_HANDS = 78; + } + + void atk1_damaged_other() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DOT_AMT = GetEntityProperty(GetOwner(), "cre_effect_skill"); + DOT_AMT *= CRE_EFFECT_RATIO; + LogDebug("atk1_damaged_other burn GetEntityName(param1) at DOT_AMT for CRE_EFFECT_DURATION"); + ApplyEffect(param1, CRE_EFFECT_SCRIPT, CRE_EFFECT_DURATION, GetEntityIndex(GetOwner()), DOT_AMT); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_crep.as b/scripts/angelscript/items/smallarms_crep.as new file mode 100644 index 00000000..70675ac0 --- /dev/null +++ b/scripts/angelscript/items/smallarms_crep.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "items/smallarms_cre.as" + +namespace MS +{ + +class SmallarmsCrep : CGameScript +{ + string ATK1_DMG_TYPE; + string BWEAPON_NAME; + float CRE_EFFECT_DURATION; + string CRE_EFFECT_NAME; + float CRE_EFFECT_RATIO; + string CRE_EFFECT_SCRIPT; + string CRE_EFFECT_SKILL; + string CRE_TYPE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + int VMODEL_IDX; + + SmallarmsCrep() + { + BWEAPON_NAME = "Envenomed Crescent Blade"; + ATK1_DMG_TYPE = "poison"; + CRE_TYPE = "poison"; + CRE_EFFECT_SCRIPT = "effects/dot_poison"; + CRE_EFFECT_DURATION = 10.0; + CRE_EFFECT_NAME = "DOT_poison"; + CRE_EFFECT_SKILL = "skill.spellcasting.affliction"; + CRE_EFFECT_RATIO = 0.3; + VMODEL_IDX = 20; + PMODEL_IDX_FLOOR = 73; + PMODEL_IDX_HANDS = 75; + } + + void atk1_damaged_other() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DOT_AMT = GetEntityProperty(GetOwner(), "cre_effect_skill"); + DOT_AMT *= CRE_EFFECT_RATIO; + LogDebug("atk1_damaged_other burn GetEntityName(param1) at DOT_AMT for CRE_EFFECT_DURATION"); + ApplyEffect(param1, CRE_EFFECT_SCRIPT, CRE_EFFECT_DURATION, GetEntityIndex(GetOwner()), DOT_AMT); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_dagger.as b/scripts/angelscript/items/smallarms_dagger.as new file mode 100644 index 00000000..12e40ee9 --- /dev/null +++ b/scripts/angelscript/items/smallarms_dagger.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsDagger : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND_DELAY; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + + SmallarmsDagger() + { + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 0; + ANIM_LIFT1 = 18; + ANIM_IDLE1 = 19; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 20; + ANIM_UNWIELD = 21; + ANIM_WIELDEDIDLE1 = 22; + ANIM_ATTACK1 = 23; + ANIM_ATTACK2 = 24; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + BASE_LEVEL_REQ = 6; + MELEE_RANGE = 40; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_DMG = 100; + MELEE_DMG_RANGE = 70; + MELEE_ACCURACY = 0.75; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + PLAYERANIM_AIM = "knife"; + PLAYERANIM_SWING = "swing_knife"; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "dagger"; + } + + void weapon_spawn() + { + SetName("Small Dagger"); + SetDescription("A small dagger"); + SetWeight(3); + SetSize(3); + SetValue(45); + SetHUDSprite("hand", 169); + SetHUDSprite("trade", 169); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_dirk.as b/scripts/angelscript/items/smallarms_dirk.as new file mode 100644 index 00000000..e904ebad --- /dev/null +++ b/scripts/angelscript/items/smallarms_dirk.as @@ -0,0 +1,95 @@ +#pragma context server + +#include "items/item_precache.as" +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsDirk : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_PARRY; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND_DELAY; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + + SmallarmsDirk() + { + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 0; + ANIM_LIFT1 = 18; + ANIM_IDLE1 = 19; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 20; + ANIM_UNWIELD = 21; + ANIM_WIELDEDIDLE1 = 22; + ANIM_ATTACK1 = 23; + ANIM_ATTACK2 = 24; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + BASE_LEVEL_REQ = 9; + MELEE_RANGE = 40; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 1; + MELEE_DMG = 120; + MELEE_DMG_RANGE = 80; + MELEE_ACCURACY = 0.8; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.75; + PLAYERANIM_AIM = "knife"; + PLAYERANIM_SWING = "swing_knife"; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "dagger"; + ANIM_PARRY = 6; + } + + void weapon_spawn() + { + SetName("Dirk"); + SetDescription("A small dirk"); + SetWeight(3); + SetSize(3); + SetValue(30); + SetHUDSprite("hand", 169); + SetHUDSprite("trade", 169); + } + + void OnParry(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), SOUND_HITMETAL1); + PlayOwnerAnim("break"); + PlayViewAnim(ANIM_PARRY); + weapon_parry(); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_eth.as b/scripts/angelscript/items/smallarms_eth.as new file mode 100644 index 00000000..4563208a --- /dev/null +++ b/scripts/angelscript/items/smallarms_eth.as @@ -0,0 +1,123 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsEth : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + string ETHER_ABORT; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND_DELAY; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + + SmallarmsEth() + { + BASE_LEVEL_REQ = 25; + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 48; + MODEL_VIEW_IDX = 12; + MELEE_RANGE = 50; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_DMG = 225; + MELEE_DMG_RANGE = 50; + MELEE_DMG_TYPE = "dark"; + MELEE_ACCURACY = 0.85; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + PLAYERANIM_AIM = "knife"; + PLAYERANIM_SWING = "swing_knife"; + SOUND_HITWALL1 = "debris/glass1.wav"; + SOUND_HITWALL2 = "debris/glass2.wav"; + ANIM_PREFIX = "standard"; + } + + void weapon_spawn() + { + SetName("Ethereal Dagger"); + SetDescription("A ghostly dagger"); + SetWeight(3); + SetSize(2); + SetValue(3000); + SetHUDSprite("hand", 136); + SetHUDSprite("trade", 136); + } + + void melee_damaged_other() + { + if ((ETHER_ABORT)) return; + if (!(IsEntityAlive(param1))) return; + string ENEMY_ARMOR = GetEntityProperty(param1, "scriptvar"); + string IN_DAMAGE = param2; + if (!(ENEMY_ARMOR > 0)) return; + adj_damage(ENEMY_ARMOR, IN_DAMAGE); + } + + void special_02_damaged_other() + { + if ((ETHER_ABORT)) return; + if (!(IsEntityAlive(param1))) return; + string ENEMY_ARMOR = GetEntityProperty(param1, "scriptvar"); + string IN_DAMAGE = param2; + if (!(ENEMY_ARMOR > 0)) return; + adj_damage(ENEMY_ARMOR, IN_DAMAGE); + } + + void adj_damage() + { + string ENEMY_ARMOR = param1; + string IN_DAMAGE = param2; + if (!(IN_DAMAGE > 0)) return; + if (!(ENEMY_ARMOR < 1)) return; + int MULT_DAMAGE = 1; + MULT_DAMAGE /= ENEMY_ARMOR; + LogDebug("adj_damage armr ENEMY_ARMOR dmg IN_DAMAGE"); + string OUT_DAMAGE = IN_DAMAGE; + OUT_DAMAGE *= MULT_DAMAGE; + SetDamage("dmg"); + return; + } + + void ext_ether() + { + if ((ETHER_ABORT)) + { + ETHER_ABORT = 0; + } + else + { + ETHER_ABORT = 1; + } + LogDebug("ext_ether ETHER_ABORT"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_fangstooth.as b/scripts/angelscript/items/smallarms_fangstooth.as new file mode 100644 index 00000000..138e7a98 --- /dev/null +++ b/scripts/angelscript/items/smallarms_fangstooth.as @@ -0,0 +1,89 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsFangstooth : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + + SmallarmsFangstooth() + { + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 3; + ANIM_LIFT1 = 18; + ANIM_IDLE1 = 19; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 20; + ANIM_UNWIELD = 21; + ANIM_WIELDEDIDLE1 = 22; + ANIM_ATTACK1 = 23; + ANIM_ATTACK2 = 24; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + BASE_LEVEL_REQ = 12; + MELEE_RANGE = 35; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_DMG = 150; + MELEE_DMG_RANGE = 100; + MELEE_ACCURACY = 0.8; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_PARRY_CHANCE = 0.3; + PLAYERANIM_AIM = "knife"; + PLAYERANIM_SWING = "swing_knife"; + MODEL_BODY_OFS = 24; + ANIM_PREFIX = "thiefdagger"; + } + + void weapon_spawn() + { + SetName("Fang s Tooth"); + SetDescription("Fang s Tooth"); + SetWeight(1); + SetSize(1); + SetValue(50); + SetHUDSprite("trade", 171); + } + + void game_dodamage() + { + if (!(param1)) return; + int random = RandomInt(0, 99); + if (!(random < 15)) return; + ApplyEffect(param2, "effects/dot_poison", RandomInt(3, 6), GetEntityIndex(GetOwner()), Random(0.5, 1.5), "smallarms"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_flamelick.as b/scripts/angelscript/items/smallarms_flamelick.as new file mode 100644 index 00000000..6c4abc8a --- /dev/null +++ b/scripts/angelscript/items/smallarms_flamelick.as @@ -0,0 +1,174 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsFlamelick : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + string BURST_DAMAGE; + string CHARGE_COUNTER; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND_DELAY; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HITWALL2; + string TARG_LIST; + + SmallarmsFlamelick() + { + BASE_LEVEL_REQ = 20; + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 5; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 2; + ANIM_UNWIELD = 3; + ANIM_WIELDEDIDLE1 = 4; + ANIM_ATTACK1 = 5; + ANIM_ATTACK2 = 6; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MELEE_RANGE = 50; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_DMG_TYPE = "fire"; + MELEE_DMG = 250; + MELEE_DMG_RANGE = 50; + MELEE_ACCURACY = 0.85; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + PLAYERANIM_AIM = "knife"; + PLAYERANIM_SWING = "swing_knife"; + SOUND_HITWALL2 = "ambience/steamburst1.wav"; + MODEL_BODY_OFS = 32; + ANIM_PREFIX = "firedagger"; + } + + void weapon_spawn() + { + SetName("Flamelick"); + SetDescription("A magical dagger forged from the tongue of an Efreeti"); + SetWeight(3); + SetSize(3); + SetValue(1000); + SetHUDSprite("hand", 107); + SetHUDSprite("trade", 107); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + string BURN_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURN_DAMAGE /= 3; + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), BURN_DAMAGE, "smallarms"); + } + + void register_secondary() + { + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + int reg.attack.dmg = 1; + int reg.attack.dmg.range = 1; + string reg.attack.dmg.type = "fire"; + int reg.attack.energydrain = 9999; + string reg.attack.stat = "spellcasting.fire"; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 1.0; + float reg.attack.delay.end = 1.2; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "special_02"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 10; + int reg.attack.dmg.ignore = 1; + RegisterAttack(); + } + + void special_02_start() + { + EmitSound(GetOwner(), 0, "magic/fireball_powerup.wav", 10); + Effect("glow", GetOwner(), Vector3(255, 75, 0), 128, 5.0, 5.0); + } + + void special_02_strike() + { + if (CHARGE_COUNTER == "CHARGE_COUNTER") + { + CHARGE_COUNTER = 10; + } + if (CHARGE_COUNTER <= 0) + { + SendPlayerMessage(GetOwner(), "The flamelick's magic is exhausted, for now."); + } + if (!(CHARGE_COUNTER > 0)) return; + CHARGE_COUNTER -= 1; + int INT_COUNTER = int(CHARGE_COUNTER); + SendPlayerMessage("The", "flamelick has " + INT_COUNTER + " charges remaining."); + ClientEvent("new", "all", "monsters/summon/flame_burst_cl", GetEntityIndex(GetOwner())); + BURST_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + CallExternal(GetOwner(), "ext_sphere_token_x", "enemy", 256); + TARG_LIST = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(TARG_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(TARG_LIST, ";"); i++) + { + burst_affect_targets(); + } + } + + void burst_affect_targets() + { + string CUR_TARG = GetToken(TARG_LIST, i, ";"); + if (!(GAME_PVP)) + { + if ((IsValidPlayer(CUR_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), BURST_DAMAGE, "smallarms"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_frozentongueonflagpole.as b/scripts/angelscript/items/smallarms_frozentongueonflagpole.as new file mode 100644 index 00000000..f997cb2e --- /dev/null +++ b/scripts/angelscript/items/smallarms_frozentongueonflagpole.as @@ -0,0 +1,184 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsFrozentongueonflagpole : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_ATTACK5; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + int CUSTOM_REGISTER_CHARGE1; + int CUSTOM_REGISTER_SECONDARY; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND_DELAY; + int MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string TARG_LIST; + + SmallarmsFrozentongueonflagpole() + { + BASE_LEVEL_REQ = 23; + CUSTOM_REGISTER_SECONDARY = 1; + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 6; + ANIM_LIFT1 = 31; + ANIM_IDLE1 = 32; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 31; + ANIM_UNWIELD = 38; + ANIM_WIELDEDIDLE1 = 32; + ANIM_ATTACK1 = 33; + ANIM_ATTACK2 = 34; + ANIM_ATTACK3 = 35; + ANIM_ATTACK4 = 36; + ANIM_ATTACK5 = 37; + MELEE_VIEWANIM_ATK = RandomInt(ANIM_ATTACK1, ANIM_ATTACK5); + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MELEE_DMG_TYPE = "cold"; + MELEE_RANGE = 50; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_DMG = 275; + MELEE_DMG_RANGE = 20; + MELEE_ACCURACY = 1.0; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + PLAYERANIM_AIM = "knife"; + PLAYERANIM_SWING = "swing_knife"; + SOUND_HITWALL1 = "debris/glass1.wav"; + SOUND_HITWALL2 = "debris/glass2.wav"; + MODEL_BODY_OFS = 17; + ANIM_PREFIX = "standard"; + CUSTOM_REGISTER_CHARGE1 = 1; + } + + void weapon_spawn() + { + SetName("Litch Tongue"); + SetDescription("A dagger carved from the bones of an ancient ice mage."); + SetWeight(3); + SetSize(3); + SetValue(2500); + SetHUDSprite("hand", 128); + SetHUDSprite("trade", 128); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + if ((BITEM_UNDERSKILLED)) return; + string FREEZE_DAMAGE = (((GetSkillLevel(GetOwner(), "smallarms") * 0.66) + (GetSkillLevel(GetOwner(), "spellcasting.ice") * 0.34)) * 2); + FREEZE_DAMAGE += Random(1, (GetSkillLevel(GetOwner(), "spellcasting.ice") / 4)); + if (FREEZE_DAMAGE < 5) + { + int FREEZE_DAMAGE = 5; + } + EmitSound(GetOwner(), 0, "magic/frost_reverse.wav", 10); + ApplyEffect(param2, "effects/dot_cold", 3, GetEntityIndex(GetOwner()), FREEZE_DAMAGE, "smallarms"); + } + + void register_secondary() + { + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + int reg.attack.dmg = 550; + string reg.attack.range = MELEE_RANGE; + int reg.attack.dmg.range = 1; + string reg.attack.dmg.type = "cold"; + int reg.attack.energydrain = 0; + string reg.attack.stat = "smallarms"; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 0.25; + float reg.attack.delay.end = 1.3; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "special_02"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 25; + int reg.attack.dmg.ignore = 0; + int reg.attack.mpdrain = 0; + RegisterAttack(); + } + + void special_02_start() + { + PlayViewAnim(ANIM_ATTACK1); + Effect("glow", GetOwner(), Vector3(0, 75, 255), 128, 5.0, 5.0); + } + + void special_02_strike() + { + if (GetGameTime() <= NEXT_LITCH_BURST) + { + SendColoredMessage(GetOwner(), "Special attack is on cooldown"); + } + if (!(GetGameTime() > NEXT_LITCH_BURST)) return; + CallExternal(GetOwner(), "ext_sphere_token_x", "enemy", 256); + TARG_LIST = GetEntityProperty(GetOwner(), "scriptvar"); + if (TARG_LIST == "none") + { + // TODO: UNCONVERTED: if ( TARG_LIST equals none ) { + } + SendColoredMessage(GetOwner(), "No targets in range , cooldown reset"); + EmitSound(GetOwner(), 0, "magic/frost_pulse.wav", 10); + } + + void burst_affect_targets() + { + string CUR_TARG = GetToken(TARG_LIST, i, ";"); + if (!("game.pvp")) + { + if ((IsValidPlayer(CUR_TARG))) + { + return; + } + } + TARGETS_AFFECTED += 1; + if (TARGETS_AFFECTED == 3) + { + break; + } + ApplyEffect(CUR_TARG, "effects/dot_cold", 7, GetEntityIndex(GetOwner()), BURST_DAMAGE, "smallarms"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_huggerdagger.as b/scripts/angelscript/items/smallarms_huggerdagger.as new file mode 100644 index 00000000..26e82c5a --- /dev/null +++ b/scripts/angelscript/items/smallarms_huggerdagger.as @@ -0,0 +1,78 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsHuggerdagger : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + + SmallarmsHuggerdagger() + { + BASE_LEVEL_REQ = 9; + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 3; + ANIM_LIFT1 = 18; + ANIM_IDLE1 = 19; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 20; + ANIM_UNWIELD = 21; + ANIM_WIELDEDIDLE1 = 22; + ANIM_ATTACK1 = 23; + ANIM_ATTACK2 = 24; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MELEE_RANGE = 22; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.65; + MELEE_ENERGY = 1; + MELEE_DMG = 170; + MELEE_DMG_RANGE = 90; + MELEE_ACCURACY = 0.8; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_PARRY_CHANCE = 0.3; + MODEL_BODY_OFS = 24; + ANIM_PREFIX = "thiefdagger"; + } + + void weapon_spawn() + { + SetName("Hugger Dagger"); + SetDescription("A dagger only useful if you re close enough to give the enemy a big warm hug"); + SetWeight(1); + SetSize(1); + SetValue(50); + SetHUDSprite("hand", 171); + SetHUDSprite("trade", 171); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_huggerdagger2.as b/scripts/angelscript/items/smallarms_huggerdagger2.as new file mode 100644 index 00000000..d2e08790 --- /dev/null +++ b/scripts/angelscript/items/smallarms_huggerdagger2.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "items/smallarms_huggerdagger.as" + +namespace MS +{ + +class SmallarmsHuggerdagger2 : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_RANGE; + + SmallarmsHuggerdagger2() + { + BASE_LEVEL_REQ = 6; + MELEE_DMG = 180; + MELEE_DMG_RANGE = 90; + MELEE_RANGE = 35; + MELEE_ACCURACY = 0.8; + } + + void weapon_spawn() + { + SetName("Dull Hugger Dagger"); + SetDescription("A dagger only useful if you re close enough to give the enemy a big warm hug"); + SetWeight(1); + SetSize(1); + SetValue(20); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_huggerdagger3.as b/scripts/angelscript/items/smallarms_huggerdagger3.as new file mode 100644 index 00000000..5cda7a44 --- /dev/null +++ b/scripts/angelscript/items/smallarms_huggerdagger3.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "items/smallarms_huggerdagger.as" + +namespace MS +{ + +class SmallarmsHuggerdagger3 : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_RANGE; + + SmallarmsHuggerdagger3() + { + BASE_LEVEL_REQ = 9; + MELEE_DMG = 220; + MELEE_DMG_RANGE = 90; + MELEE_RANGE = 35; + MELEE_ACCURACY = 0.8; + } + + void weapon_spawn() + { + SetName("Sharp Hugger Dagger"); + SetDescription("A dagger only useful if you re close enough to give the enemy a big warm hug"); + SetWeight(1); + SetSize(1); + SetValue(60); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_huggerdagger4.as b/scripts/angelscript/items/smallarms_huggerdagger4.as new file mode 100644 index 00000000..f2a1a220 --- /dev/null +++ b/scripts/angelscript/items/smallarms_huggerdagger4.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "items/smallarms_huggerdagger.as" + +namespace MS +{ + +class SmallarmsHuggerdagger4 : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_RANGE; + + SmallarmsHuggerdagger4() + { + BASE_LEVEL_REQ = 15; + MELEE_DMG = 240; + MELEE_DMG_RANGE = 90; + MELEE_RANGE = 22; + MELEE_ACCURACY = 0.85; + } + + void weapon_spawn() + { + SetName("Perfect Hugger Dagger"); + SetDescription("A dagger only useful if you re close enough to give the enemy a big warm hug"); + SetWeight(1); + SetSize(1); + SetValue(500); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_k_fire.as b/scripts/angelscript/items/smallarms_k_fire.as new file mode 100644 index 00000000..4dfe69f8 --- /dev/null +++ b/scripts/angelscript/items/smallarms_k_fire.as @@ -0,0 +1,221 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsKFire : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + int CUSTOM_REGISTER_CHARGE1; + int CUSTOM_REGISTER_SECONDARY; + int EFFECT_DURATION; + string EFFECT_SKILL; + string EFFECT_TYPE; + int KNIFE_RESTORED; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND_DELAY; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string RANGED_AIMANGLE; + string RANGED_ATK_DURATION; + string RANGED_DMG_TYPE; + string RANGED_PROJECTILE; + float RANGED_PULLTIME; + string RANGED_STARTPOS; + string RANGED_STAT; + string SOUND_HITWALL2; + string SOUND_RETURN; + + SmallarmsKFire() + { + BASE_LEVEL_REQ = 15; + CUSTOM_REGISTER_CHARGE1 = 1; + CUSTOM_REGISTER_SECONDARY = 1; + RANGED_ATK_DURATION = "0.1s"; + RANGED_DMG_TYPE = "fire"; + RANGED_STAT = "smallarms"; + RANGED_PROJECTILE = "proj_k_knife"; + RANGED_AIMANGLE = Vector3(0, 0, 0); + RANGED_STARTPOS = Vector3(0, 0, -20); + RANGED_PULLTIME = 0.1; + SOUND_RETURN = "weapons/dagger/dagger2.wav"; + EFFECT_TYPE = "effects/dot_fire"; + EFFECT_SKILL = "skill.spellcasting.fire"; + EFFECT_DURATION = 5; + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 5; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 2; + ANIM_UNWIELD = 3; + ANIM_WIELDEDIDLE1 = 4; + ANIM_ATTACK1 = 5; + ANIM_ATTACK2 = 6; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MELEE_RANGE = 50; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_DMG = 225; + MELEE_DMG_RANGE = 75; + MELEE_ACCURACY = 0.8; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.25; + PLAYERANIM_AIM = "knife"; + PLAYERANIM_SWING = "swing_knife"; + SOUND_HITWALL2 = "ambience/steamburst1.wav"; + MODEL_BODY_OFS = 32; + ANIM_PREFIX = "firedagger"; + } + + void weapon_spawn() + { + SetName("Kharaztorant Fire Blade"); + SetDescription("A enchanted throwing knife used by the Kharaztorant cult"); + SetWeight(3); + SetSize(3); + SetValue(800); + SetHUDSprite("trade", 107); + } + + void OnDeploy() override + { + CallExternal(GetOwner(), "ext_set_alco_type", "fire", GetEntityIndex(GetOwner())); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + string BURN_DAMAGE = GetEntityProperty(GetOwner(), "effect_skill"); + BURN_DAMAGE /= 3; + BURN_DAMAGE += Random(1, 3); + if (BURN_DAMAGE < 5) + { + int BURN_DAMAGE = 5; + } + if (!(true)) return; + if ((IsValidPlayer(param2))) + { + if ("game.pvp" < 1) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(param2, EFFECT_TYPE, EFFECT_DURATION, GetEntityIndex(GetOwner()), BURN_DAMAGE, "smallarms"); + } + + void register_charge1() + { + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.dmg.type = "fire"; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = "smallarms"; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.mpdrain = 0; + int reg.attack.ammodrain = 0; + string reg.attack.projectile = "proj_k_knife"; + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.hold_min&max = "0.1;0.1"; + string reg.attack.dmg.type = "fire"; + int reg.attack.range = 600; + int reg.attack.COF = 0; + int reg.attack.priority = 1; + float reg.attack.delay.strike = 0.1; + float reg.attack.delay.end = 0.1; + string reg.attack.ofs.startpos = RANGED_STARTPOS; + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + int reg.attack.priority = 1; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "tossknife"; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 17; + RegisterAttack(); + } + + void tossknife_start() + { + SetModel("none"); + SetWorldModel("none"); + SetViewModel("none"); + PlayViewAnim(4); + KNIFE_RESTORED = 0; + if ((true)) + { + EmitSound(GetOwner(), 0, GetEntityProperty(GetOwner(), "scriptvar"), 8); + ScheduleDelayedEvent(0.1, "lock_weapon"); + } + if (!(false)) return; + ScheduleDelayedEvent(0.25, "knife_restore_cl"); + } + + void lock_weapon() + { + ApplyEffect(GetOwner(), "effects/effect_templock"); + ScheduleDelayedEvent(0.25, "knife_return"); + } + + void tossknife_strike() + { + PlayOwnerAnim("critical", "bow_release"); + } + + void knife_return() + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_WORLD); + SetWorldModel(MODEL_WORLD); + EmitSound(GetOwner(), 2, SOUND_RETURN, 8); + CallExternal(GetOwner(), "ext_end_templock"); + } + + void knife_restore_cl() + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_WORLD); + SetWorldModel(MODEL_WORLD); + if ((KNIFE_RESTORED)) return; + PlayViewAnim(ANIM_LIFT1); + } + + void melee_start() + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_WORLD); + SetWorldModel(MODEL_WORLD); + KNIFE_RESTORED = 1; + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_knife.as b/scripts/angelscript/items/smallarms_knife.as new file mode 100644 index 00000000..86cac51b --- /dev/null +++ b/scripts/angelscript/items/smallarms_knife.as @@ -0,0 +1,62 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsKnife : CGameScript +{ + string ANIM_PREFIX; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + + SmallarmsKnife() + { + BASE_LEVEL_REQ = 3; + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MELEE_RANGE = 40; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.4; + MELEE_DMG = 80; + MELEE_DMG_RANGE = 60; + MELEE_ACCURACY = 0.75; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_PARRY_CHANCE = 0.2; + MODEL_BODY_OFS = 0; + ANIM_PREFIX = "craftedknife"; + } + + void weapon_spawn() + { + SetName("Sharp Knife"); + SetDescription("A sharpened knife"); + SetWeight(3); + SetSize(3); + SetValue(15); + SetHUDSprite("hand", "merldagger"); + SetHUDSprite("trade", "crafted"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_nh.as b/scripts/angelscript/items/smallarms_nh.as new file mode 100644 index 00000000..3954b570 --- /dev/null +++ b/scripts/angelscript/items/smallarms_nh.as @@ -0,0 +1,232 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsNh : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_DELAY_HIGH; + int ANIM_IDLE_DELAY_LOW; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + string CL_IDX; + string CL_SCRIPT; + int CUSTOM_REGISTER_CHARGE1; + int CUSTOM_REGISTER_NORMAL; + int CUSTOM_REGISTER_SECONDARY; + string GAME_PVP; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND_DELAY; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + float SPRITE_SCALE; + string WEAPON_PRIMARY_SKILL; + + SmallarmsNh() + { + CUSTOM_REGISTER_NORMAL = 1; + CUSTOM_REGISTER_CHARGE1 = 1; + CUSTOM_REGISTER_SECONDARY = 1; + ANIM_LIFT1 = 31; + ANIM_IDLE1 = 32; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 21; + ANIM_UNWIELD = 38; + ANIM_WIELDEDIDLE1 = 32; + ANIM_ATTACK1 = 34; + ANIM_ATTACK2 = 34; + ANIM_IDLE_DELAY_LOW = 0; + ANIM_IDLE_DELAY_HIGH = 0; + BASE_LEVEL_REQ = 30; + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 37; + MODEL_VIEW_IDX = 11; + MELEE_DMG_TYPE = "slash"; + MELEE_RANGE = 600; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_DMG = 225; + MELEE_DMG_RANGE = 50; + MELEE_ACCURACY = 0.85; + MELEE_ALIGN_BASE = 0; + MELEE_ALIGN_TIP = 0; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.35; + PLAYERANIM_AIM = "knife"; + PLAYERANIM_SWING = "swing_knife"; + SOUND_HITWALL1 = "none"; + SOUND_HITWALL2 = "none"; + ANIM_PREFIX = "standard"; + CL_SCRIPT = "items/smallarms_nh_cl"; + } + + void game_precache() + { + Precache(CL_SCRIPT); + } + + void weapon_spawn() + { + SetName("Neck Hunter"); + SetDescription("An evil enchanted blade with unusual reach"); + SetWeight(3); + SetSize(3); + SetValue(3000); + SetHUDSprite("hand", 134); + SetHUDSprite("trade", 134); + } + + void OnDeploy() override + { + SPRITE_SCALE = 0.1; + GAME_PVP = "game.pvp"; + if (!(CL_IDX == "CL_IDX")) return; + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner())); + CL_IDX = "game.script.last_sent_id"; + } + + void game_putinpack() + { + if (!(CL_IDX != "CL_IDX")) return; + ClientEvent("remove", "all", CL_IDX); + CL_IDX = "CL_IDX"; + } + + void OnDrop() override + { + if (!(CL_IDX != "CL_IDX")) return; + ClientEvent("remove", "all", CL_IDX); + CL_IDX = "CL_IDX"; + } + + void melee_strike() + { + string BONE_POS = GetEntityProperty(GetOwner(), "eyepos"); + string OWNER_VIEWANG = GetEntityProperty(GetOwner(), "viewangles"); + string HIT_TYPE = param1; + string ATTACK_END = param2; + BONE_POS += /* TODO: $relpos */ $relpos(OWNER_VIEWANG, Vector3(0, 28, 0)); + ClientEvent("update", "all", CL_IDX, "shadow_knife", BONE_POS, GetEntityProperty(GetOwner(), "viewangles"), ATTACK_END, HIT_TYPE, SPRITE_SCALE); + SPRITE_SCALE = 0.1; + SPRITE_SCALE = 0.1; + } + + void special_01_strike() + { + string CUR_TARG = param3; + if ((IsEntityAlive(CUR_TARG))) + { + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetEntityMaxHealth(CUR_TARG) < 1250) + { + } + string PUSH_VEL = /* TODO: $relvel */ $relvel(0, 300, 120); + AddVelocity(CUR_TARG, PUSH_VEL); + } + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + string OUT_PAR3 = param3; + SPRITE_SCALE = 2.0; + melee_strike(OUT_PAR1, OUT_PAR2, OUT_PAR3); + } + + void register_normal() + { + string F_BASE_LEVEL_REQ = BASE_LEVEL_REQ; + string reg.attack.type = "strike-land"; + int reg.attack.noautoaim = 1; + string reg.attack.keys = "+attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 0; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "melee"; + string reg.attack.noise = MELEE_NOISE; + string reg.attack.reqskill = F_BASE_LEVEL_REQ; + WEAPON_PRIMARY_SKILL = reg.attack.stat; + RegisterAttack(); + register_charge1(); + } + + void register_charge1() + { + string reg.attack.type = "strike-land"; + int reg.attack.noautoaim = 1; + string reg.attack.keys = "+attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = "magic"; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 1; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "melee"; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 1; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "special_01"; + reg.attack.dmg *= 3; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 2; + if (BASE_LEVEL_REQ > reg.attack.reqskill) + { + reg.attack.reqskill += BASE_LEVEL_REQ; + } + RegisterAttack(); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_nh_cl.as b/scripts/angelscript/items/smallarms_nh_cl.as new file mode 100644 index 00000000..7c7e09b4 --- /dev/null +++ b/scripts/angelscript/items/smallarms_nh_cl.as @@ -0,0 +1,110 @@ +#pragma context client + +namespace MS +{ + +class SmallarmsNhCl : CGameScript +{ + string HIT_TYPE; + string IMPACT_POINT; + string MY_OWNER; + string ORIGIN_POINT; + string OWNER_ANG; + string SPRITE_SCALE; + + SmallarmsNhCl() + { + Precache("debris/glass1.wav"); + } + + void client_activate() + { + MY_OWNER = /* TODO: $getcl */ $getcl(param1, "index"); + } + + void shadow_knife() + { + ORIGIN_POINT = param1; + OWNER_ANG = param2; + IMPACT_POINT = param3; + HIT_TYPE = param4; + SPRITE_SCALE = param5; + shadow_knife_fx(); + ScheduleDelayedEvent(0.01, "shadow_knife_fx"); + ScheduleDelayedEvent(0.02, "shadow_knife_fx"); + ScheduleDelayedEvent(0.03, "shadow_knife_fx"); + ScheduleDelayedEvent(0.04, "shadow_knife_fx"); + ScheduleDelayedEvent(0.05, "shadow_knife_fx"); + ScheduleDelayedEvent(0.06, "shadow_knife_fx"); + ScheduleDelayedEvent(0.07, "shadow_knife_fx"); + ScheduleDelayedEvent(0.08, "shadow_knife_fx"); + ScheduleDelayedEvent(0.09, "shadow_knife_fx"); + ScheduleDelayedEvent(0.10, "shadow_knife_fx"); + if (HIT_TYPE != "none") + { + ScheduleDelayedEvent(0.05, "vanish_fx"); + } + } + + void shadow_knife_fx() + { + ClientEffect("tempent", "model", "weapons/projectiles.mdl", ORIGIN_POINT, "setup_knife"); + } + + void vanish_fx() + { + if (HIT_TYPE == "world") + { + if (SPRITE_SCALE != 2.0) + { + } + EmitSound3D("debris/glass1.wav", 5, IMPACT_POINT); + } + if (SPRITE_SCALE == 2.0) + { + EmitSound3D("weapons/explode3.wav", 5, IMPACT_POINT); + } + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + } + + void vanish_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "fadeout", 0.5); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-200, 200), Random(-200, 200), Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void setup_knife() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", OWNER_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(OWNER_ANG, Vector3(0, 1000, 0))); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "body", 44); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 16); + ClientEffect("tempent", "set_current_prop", "sequence", 11); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_nh_cl_alt.as b/scripts/angelscript/items/smallarms_nh_cl_alt.as new file mode 100644 index 00000000..ac7729c5 --- /dev/null +++ b/scripts/angelscript/items/smallarms_nh_cl_alt.as @@ -0,0 +1,112 @@ +#pragma context client + +namespace MS +{ + +class SmallarmsNhClAlt : CGameScript +{ + string HIT_TYPE; + string IMPACT_POINT; + string MY_OWNER; + string ORIGIN_POINT; + string OWNER_ANG; + string SPRITE_SCALE; + + SmallarmsNhClAlt() + { + Precache("debris/glass1.wav"); + } + + void client_activate() + { + MY_OWNER = /* TODO: $getcl */ $getcl(param1, "index"); + } + + void shadow_knife() + { + ORIGIN_POINT = param1; + IMPACT_POINT = param2; + HIT_TYPE = param3; + SPRITE_SCALE = param4; + OWNER_ANG = /* TODO: $angles3d */ $angles3d(ORIGIN_POINT, IMPACT_POINT); + OWNER_ANG = "x"; + LogDebug("ang2dest: OWNER_ANG"); + shadow_knife_fx(); + ScheduleDelayedEvent(0.01, "shadow_knife_fx"); + ScheduleDelayedEvent(0.02, "shadow_knife_fx"); + ScheduleDelayedEvent(0.03, "shadow_knife_fx"); + ScheduleDelayedEvent(0.04, "shadow_knife_fx"); + ScheduleDelayedEvent(0.05, "shadow_knife_fx"); + ScheduleDelayedEvent(0.06, "shadow_knife_fx"); + ScheduleDelayedEvent(0.07, "shadow_knife_fx"); + ScheduleDelayedEvent(0.08, "shadow_knife_fx"); + ScheduleDelayedEvent(0.09, "shadow_knife_fx"); + ScheduleDelayedEvent(0.10, "shadow_knife_fx"); + if (HIT_TYPE != "none") + { + ScheduleDelayedEvent(0.05, "vanish_fx"); + } + } + + void shadow_knife_fx() + { + ClientEffect("tempent", "sprite", "weapons/projectiles.mdl", ORIGIN_POINT, "setup_knife"); + } + + void vanish_fx() + { + if (HIT_TYPE == "world") + { + if (SPRITE_SCALE != 2.0) + { + } + EmitSound3D("debris/glass1.wav", 10, IMPACT_POINT); + } + if (SPRITE_SCALE == 2.0) + { + EmitSound3D("weapons/explode3.wav", 10, IMPACT_POINT); + } + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", IMPACT_POINT, "vanish_sprite"); + } + + void vanish_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "fadeout", 0.5); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-200, 200), Random(-200, 200), Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void setup_knife() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", OWNER_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(OWNER_ANG, Vector3(0, 1000, 0))); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "body", 44); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 16); + ClientEffect("tempent", "set_current_prop", "anim", 11); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_rd.as b/scripts/angelscript/items/smallarms_rd.as new file mode 100644 index 00000000..e7650bf0 --- /dev/null +++ b/scripts/angelscript/items/smallarms_rd.as @@ -0,0 +1,33 @@ +#pragma context server + +#include "items/item_precache.as" +#include "items/base_miscitem.as" + +namespace MS +{ + +class SmallarmsRd : CGameScript +{ + string MODEL_HANDS; + string MODEL_OFS; + string MODEL_WORLD; + + SmallarmsRd() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_OFS = OFS_GENERIC; + } + + void OnSpawn() override + { + SetName("Completely Rusted Dagger"); + SetDescription("You dare not use this dagger for fear or destroying it"); + SetWeight(30); + SetValue(1); + SetGravity(0.5); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_rknife.as b/scripts/angelscript/items/smallarms_rknife.as new file mode 100644 index 00000000..86b62983 --- /dev/null +++ b/scripts/angelscript/items/smallarms_rknife.as @@ -0,0 +1,68 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsRknife : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + float MELEE_ACCURACY; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_ENERGY; + int MELEE_NEW_PARRY_CHANCE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + + SmallarmsRknife() + { + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 1; + ANIM_LIFT1 = 27; + ANIM_IDLE1 = 28; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 29; + ANIM_ATTACK2 = 30; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MELEE_RANGE = 40; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.3; + MELEE_DMG = 70; + MELEE_DMG_RANGE = 50; + MELEE_ACCURACY = 0.75; + MELEE_PARRY_CHANCE = 0.2; + MELEE_NEW_PARRY_CHANCE = 20; + MODEL_BODY_OFS = 12; + ANIM_PREFIX = "rdagger"; + } + + void weapon_spawn() + { + SetName("Dull Knife"); + SetDescription("This knife has seen better days"); + SetWeight(2); + SetSize(2); + SetValue(3); + SetHUDSprite("hand", "merldagger"); + SetHUDSprite("trade", "rdagger"); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_royaldagger.as b/scripts/angelscript/items/smallarms_royaldagger.as new file mode 100644 index 00000000..273fe25d --- /dev/null +++ b/scripts/angelscript/items/smallarms_royaldagger.as @@ -0,0 +1,76 @@ +#pragma context server + +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsRoyaldagger : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + + SmallarmsRoyaldagger() + { + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 7; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 2; + ANIM_UNWIELD = 3; + ANIM_WIELDEDIDLE1 = 4; + ANIM_ATTACK1 = 5; + ANIM_ATTACK2 = 6; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MELEE_RANGE = 50; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_DMG = 189; + MELEE_DMG_RANGE = 90; + MELEE_ACCURACY = 0.8; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_PARRY_CHANCE = 0.3; + MODEL_BODY_OFS = 16; + ANIM_PREFIX = "craftedknife"; + } + + void weapon_spawn() + { + SetName("Royal Dagger"); + SetDescription("A Royal Dagger"); + SetWeight(3); + SetSize(2); + SetValue(50); + SetHUDSprite("hand", 170); + SetHUDSprite("trade", 170); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_stiletto.as b/scripts/angelscript/items/smallarms_stiletto.as new file mode 100644 index 00000000..2e0cd5d8 --- /dev/null +++ b/scripts/angelscript/items/smallarms_stiletto.as @@ -0,0 +1,94 @@ +#pragma context server + +#include "items/item_precache.as" +#include "items/smallarms_base.as" + +namespace MS +{ + +class SmallarmsStiletto : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_PARRY; + string ANIM_PREFIX; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + float MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND_DELAY; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + + SmallarmsStiletto() + { + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 0; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 2; + ANIM_UNWIELD = 3; + ANIM_WIELDEDIDLE1 = 4; + ANIM_ATTACK1 = 5; + ANIM_ATTACK2 = 6; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + BASE_LEVEL_REQ = 3; + MELEE_RANGE = 40; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 1; + MELEE_DMG = 140; + MELEE_DMG_RANGE = 100; + MELEE_ACCURACY = 0.8; + MELEE_ALIGN_BASE = 3.6; + MELEE_ALIGN_TIP = 0; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.75; + PLAYERANIM_AIM = "knife"; + PLAYERANIM_SWING = "swing_knife"; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "dagger"; + ANIM_PARRY = 6; + } + + void weapon_spawn() + { + SetName("Stiletto"); + SetDescription("A pointed stiletto , taking advantage of exposed gaps on armored enemies"); + SetWeight(3); + SetSize(3); + SetValue(30); + SetHUDSprite("trade", 169); + } + + void OnParry(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), SOUND_HITMETAL1); + PlayOwnerAnim("break"); + PlayViewAnim(ANIM_PARRY); + weapon_parry(); + } + +} + +} diff --git a/scripts/angelscript/items/smallarms_vt.as b/scripts/angelscript/items/smallarms_vt.as new file mode 100644 index 00000000..051e0f32 --- /dev/null +++ b/scripts/angelscript/items/smallarms_vt.as @@ -0,0 +1,175 @@ +#pragma context server + +#include "items/smallarms_eth.as" + +namespace MS +{ + +class SmallarmsVt : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_UNWIELD; + int ANIM_WIELD; + int ANIM_WIELDEDIDLE1; + int BASE_LEVEL_REQ; + string BURST_DAMAGE; + int CUSTOM_REGISTER_SECONDARY; + int CUSTOM_SWING; + string GAME_PVP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string TARG_LIST; + + SmallarmsVt() + { + BASE_LEVEL_REQ = 30; + CUSTOM_REGISTER_SECONDARY = 1; + CUSTOM_SWING = 1; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_WIELD = 2; + ANIM_UNWIELD = 3; + ANIM_WIELDEDIDLE1 = 4; + ANIM_ATTACK1 = 23; + ANIM_ATTACK2 = 6; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_VIEW = "viewmodels/v_smallarms.mdl"; + MODEL_VIEW_IDX = 13; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 66; + MELEE_DMG = 250; + MELEE_DMG_DELAY = 0.2; + MELEE_ATK_DURATION = 0.5; + } + + void weapon_spawn() + { + SetName("Vorpal Tongue"); + SetDescription("Layers of magic have been sewn into this ethereal dagger"); + SetWeight(3); + SetSize(2); + SetValue(5000); + SetHUDSprite("hand", 141); + SetHUDSprite("trade", 141); + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + } + + void register_secondary() + { + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + int reg.attack.dmg = 1; + int reg.attack.dmg.range = 1; + string reg.attack.dmg.type = "ice"; + int reg.attack.energydrain = 9999; + string reg.attack.stat = "spellcasting.ice"; + string reg.attack.hitchance = MELEE_ACCURACY; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 1.5; + float reg.attack.delay.end = 1.8; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "freeze_burst"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 1; + int reg.attack.dmg.ignore = 1; + int reg.attack.mpdrain = 75; + RegisterAttack(); + } + + void special_01_start() + { + if ((SPECIAL1_OVERRIDE)) return; + PlayViewAnim(ANIM_ATTACK2); + if (!(true)) return; + // svplaysound: svplaysound 1 10 $get(ent_owner,scriptvar,'PLR_SOUND_JAB2') + EmitSound(1, 10, GetEntityProperty(GetOwner(), "scriptvar")); + } + + void freeze_burst_start() + { + PlayViewAnim(2); + EmitSound(GetOwner(), 0, "magic/frost_reverse.wav", 10); + Effect("glow", GetOwner(), Vector3(0, 75, 255), 128, 5.0, 5.0); + } + + void freeze_burst_strike() + { + ClientEvent("new", "all", "monsters/summon/ice_burst_cl", GetEntityIndex(GetOwner())); + BURST_DAMAGE = GetSkillLevel(GetOwner(), "spellcasting.ice"); + CallExternal(GetOwner(), "ext_sphere_token_x", "enemy", 256); + TARG_LIST = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(TARG_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(TARG_LIST, ";"); i++) + { + burst_affect_targets(); + } + } + + void burst_affect_targets() + { + string CUR_TARG = GetToken(TARG_LIST, i, ";"); + if (!(GAME_PVP)) + { + if ((IsValidPlayer(CUR_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + int FREEZE_ON_CHANCE = RandomInt(1, 2); + if (FREEZE_ON_CHANCE == 1) + { + ApplyEffect(CUR_TARG, "effects/dot_cold", 10, GetEntityIndex(GetOwner()), RandomInt(10, BURST_DAMAGE), "smallarms"); + } + if (FREEZE_ON_CHANCE == 2) + { + if (GetEntityHealth(CUR_TARG) > 1500) + { + ApplyEffect(CUR_TARG, "effects/dot_cold", 10, MY_OWNER, RandomInt(10, BURST_DAMAGE), "smallarms"); + } + if (GetEntityHealth(CUR_TARG) <= 1500) + { + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", 5, GetEntityIndex(GetOwner()), RandomInt(10, 20)); + } + } + } + + void game_dodamage() + { + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.fire"); + DOT_BURN *= 0.5; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "smallarms"); + } + +} + +} diff --git a/scripts/angelscript/items/spell_dynamic.as b/scripts/angelscript/items/spell_dynamic.as new file mode 100644 index 00000000..07820ea8 --- /dev/null +++ b/scripts/angelscript/items/spell_dynamic.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class SpellDynamic : CGameScript +{ +} + +} diff --git a/scripts/angelscript/items/swords_base_onehanded.as b/scripts/angelscript/items/swords_base_onehanded.as new file mode 100644 index 00000000..4df90d9b --- /dev/null +++ b/scripts/angelscript/items/swords_base_onehanded.as @@ -0,0 +1,80 @@ +#pragma context server + +#include "items/base_melee.as" + +namespace MS +{ + +class SwordsBaseOnehanded : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_SHEATH; + int ATTACK_ANIMS; + string MELEE_VIEWANIM_ATK; + string MODEL_HANDS; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SWING_ANIM; + + SwordsBaseOnehanded() + { + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + ATTACK_ANIMS = 3; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + MODEL_HANDS = MODEL_WORLD; + PLAYERANIM_AIM = "sword_idle"; + PLAYERANIM_SWING = "sword_swing"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + } + + void melee_start() + { + int SWING = RandomInt(1, ATTACK_ANIMS); + string SWING_ANIM = ANIM_ATTACK1; + if (SWING == 2) + { + SWING_ANIM = ANIM_ATTACK2; + } + else + { + if (SWING == 3) + { + SWING_ANIM = ANIM_ATTACK3; + } + else + { + if (SWING == 4) + { + SWING_ANIM = ANIM_ATTACK4; + } + else + { + if (SWING == 5) + { + SWING_ANIM = ANIM_ATTACK5; + } + } + } + } + PlayViewAnim(SWING_ANIM); + } + +} + +} diff --git a/scripts/angelscript/items/swords_base_twohanded.as b/scripts/angelscript/items/swords_base_twohanded.as new file mode 100644 index 00000000..85d9bc70 --- /dev/null +++ b/scripts/angelscript/items/swords_base_twohanded.as @@ -0,0 +1,196 @@ +#pragma context server + +#include "items/axes_base_onehanded.as" + +namespace MS +{ + +class SwordsBaseTwohanded : CGameScript +{ + int ANIM_PARRY; + int ANIM_UNPARRY; + float FREQ_MANUAL_PARRY; + int IS_DEPLOYED; + int IS_TWO_HANDED_SWORD; + string NEXT_MANUAL_PARRY; + int NO_IDLE; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_PARRY; + int SWORD_CAN_PARRY; + int SWORD_MANUAL_PARRY_ON; + float SWORD_MANUAL_PARRY_RATIO; + + SwordsBaseTwohanded() + { + IS_TWO_HANDED_SWORD = 1; + NO_IDLE = 1; + PLAYERANIM_AIM = "sword_idle"; + PLAYERANIM_SWING = "sword_swing"; + SOUND_PARRY = "weapons/cbar_hit1.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + FREQ_MANUAL_PARRY = 2.0; + ANIM_PARRY = 4; + ANIM_UNPARRY = 5; + SWORD_MANUAL_PARRY_RATIO = 0.5; + } + + void weapon_spawn() + { + SetHand("both"); + } + + void OnDeploy() override + { + SWORD_CAN_PARRY = 1; + IS_DEPLOYED = 1; + } + + void bweapon_effect_remove() + { + SWORD_CAN_PARRY = 0; + IS_DEPLOYED = 0; + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(IS_DEPLOYED)) return; + if (!(SWORD_CAN_PARRY)) return; + if ((param4).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if ((param4).findFirst("target") >= 0) + { + int EXIT_SUB = 1; + } + if ((param4).findFirst("magic") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string l.pos = GetEntityOrigin(GetOwner()); + string l.mypos = GetEntityOrigin(GetOwner()); + string l.myang = GetEntityAngles(GetOwner()); + string l.attpos = GetEntityOrigin(param1); + if (!(WithinCone2D(l.attpos, l.mypos, l.myang))) return; + string PARRY_CHANCE = MELEE_NEW_PARRY_CHANCE; + if (!(SWORD_MANUAL_PARRY_ON)) + { + if ((PARRY_ON)) + { + int PARRY_CHANCE = 100; + } + if (RandomInt(1, 100) <= PARRY_CHANCE) + { + string DMG_TAKEN = param3; + SetVolume(5); + EmitSound(GetOwner(), SOUND_PARRY); + SendPlayerMessage("Sword", "parried! DMG_TAKEN hp"); + SetDamage("hit"); + SetDamage("dmg"); + ScheduleDelayedEvent(0.1, "parryanim"); + } + } + else + { + string DMG_TAKEN = param3; + string DMG_BLOCKED = param3; + DMG_TAKEN *= SWORD_MANUAL_PARRY_RATIO; + DMG_BLOCKED -= DMG_TAKEN; + EmitSound(GetOwner(), 2, SOUND_PARRY, 5); + SendPlayerMessage("Sword", "blocked " + DMG_BLOCKED + " hp"); + SetDamage("dmg"); + return; + } + } + + void OnParry(CBaseEntity@ attacker) override + { + ScheduleDelayedEvent(0.1, "play_parry"); + } + + void play_parry() + { + PlayViewAnim(ANIM_PARRY1); + EmitSound(GetOwner(), 0, SOUND_PARRY, 10); + if (!(GetEntityRange(m_hLastStruck) < MELEE_RANGE)) return; + string RIPOSTE_DAMAGE = GetSkillLevel(GetOwner(), "parry"); + SendPlayerMessage("You", "ripost� the attack! " + RIPOSTE_DAMAGE); + string L_MY_OWNER = GetEntityIndex(GetOwner()); + XDoDamage(GetEntityIndex(m_hLastStruck), "direct", RIPOSTE_DAMAGE, 1.0, L_MY_OWNER, L_MY_OWNER, MELEE_STAT, MELEE_DMG_TYPE); + } + + void melee_end() + { + PlayViewAnim(ANIM_IDLE1); + } + + void special_01_end() + { + PlayViewAnim(ANIM_IDLE1); + } + + void parryanim() + { + if (!(ANIM_PARRY != ANIM_PARRY)) return; + // TODO: splayviewanim ent_me ANIM_PARRY + } + + void register_charge1() + { + if ((CUSTOM_REGISTER_CHARGE1)) return; + string reg.attack.type = "strike-land"; + string reg.attack.range = MELEE_RANGE; + reg.attack.range *= 1.5; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + float reg.attack.delay.strike = 1.3; + float reg.attack.delay.end = 1.9; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 1; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "special_01"; + reg.attack.dmg *= 2; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 2; + if (BASE_LEVEL_REQ > reg.attack.reqskill) + { + reg.attack.reqskill += BASE_LEVEL_REQ; + } + RegisterAttack(); + } + + void game_+attack2() + { + if (!(SWORD_MANUAL_PARRY)) return; + if ((SWORD_MANUAL_PARRY_ON)) return; + if (!(GetGameTime() > NEXT_MANUAL_PARRY)) return; + NEXT_MANUAL_PARRY = GetGameTime(); + NEXT_MANUAL_PARRY += FREQ_MANUAL_PARRY; + // TODO: splayviewanim ent_me ANIM_PARRY + SWORD_MANUAL_PARRY_ON = 1; + } + + void game__attack2() + { + if (!(SWORD_MANUAL_PARRY)) return; + if (!(SWORD_MANUAL_PARRY_ON)) return; + // TODO: splayviewanim ent_me ANIM_UNPARRY + SWORD_MANUAL_PARRY_ON = 0; + NEXT_MANUAL_PARRY = GetGameTime(); + NEXT_MANUAL_PARRY += FREQ_MANUAL_PARRY; + } + +} + +} diff --git a/scripts/angelscript/items/swords_bastardsword.as b/scripts/angelscript/items/swords_bastardsword.as new file mode 100644 index 00000000..d3a05dbc --- /dev/null +++ b/scripts/angelscript/items/swords_bastardsword.as @@ -0,0 +1,165 @@ +#pragma context server + +#include "items/swords_base_twohanded.as" + +namespace MS +{ + +class SwordsBastardsword : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_LUNGE; + int ANIM_PARRY1; + int ANIM_PARRY1_RETRACT; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_UNSHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_NEW_PARRY_CHANCE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int PARRY_ON; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + string SWING_ANIM; + int SWORD_MANUAL_PARRY; + + SwordsBastardsword() + { + BASE_LEVEL_REQ = 12; + SWORD_MANUAL_PARRY = 1; + ANIM_LIFT = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 2; + ANIM_ATTACK3 = 2; + ANIM_LUNGE = 3; + ANIM_PARRY1 = 4; + ANIM_PARRY1_RETRACT = 5; + ANIM_UNSHEATH = 6; + ANIM_SHEATH = 7; + MODEL_VIEW = "viewmodels/v_2hswords.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + MODEL_BODY_OFS = 4; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + ANIM_PREFIX = "highsword"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.0; + MELEE_ENERGY = 2; + MELEE_DMG = 190; + MELEE_DMG_RANGE = 100; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.65; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 3; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.3; + MELEE_NEW_PARRY_CHANCE = 0.3; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "sword_double_swing"; + } + + void weapon_spawn() + { + SetName("Great Sword"); + SetDescription("A heavy , two-handed sword"); + SetWeight(80); + SetSize(10); + SetValue(270); + SetHUDSprite("trade", 16); + SetHand("both"); + } + + void melee_start() + { + int SWING = RandomInt(1, 3); + if (SWING == 1) + { + SWING_ANIM = ANIM_ATTACK1; + } + if (SWING == 2) + { + SWING_ANIM = ANIM_ATTACK2; + } + if (SWING == 3) + { + SWING_ANIM = ANIM_ATTACK3; + } + PlayOwnerAnim("once", "sword_double_swing"); + PlayViewAnim(SWING_ANIM); + SetVolume(10); + EmitSound(GetOwner(), SOUND_SWIPE); + } + + void special_01_start() + { + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void blockmode_start() + { + PlayViewAnim(ANIM_PARRY1); + PlayOwnerAnim("once", "sword_swing"); + PARRY_ON = 1; + } + + void blockmode_end() + { + PlayViewAnim(ANIM_PARRY1_RETRACT); + PARRY_ON = 0; + } + + void parryanim() + { + PlayViewAnim(ANIM_PARRY1); + PlayOwnerAnim("once", "sword_swing"); + ScheduleDelayedEvent(0.75, "unparryanim"); + } + + void unparryanim() + { + PlayViewAnim(ANIM_PARRY1_RETRACT); + } + +} + +} diff --git a/scripts/angelscript/items/swords_blood_drinker.as b/scripts/angelscript/items/swords_blood_drinker.as new file mode 100644 index 00000000..59afdbbb --- /dev/null +++ b/scripts/angelscript/items/swords_blood_drinker.as @@ -0,0 +1,266 @@ +#pragma context server + +#include "items/swords_base_twohanded.as" +#include "items/base_vampire.as" + +namespace MS +{ + +class SwordsBloodDrinker : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_LUNGE; + int ANIM_PARRY1; + int ANIM_PARRY1_RETRACT; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_UNSHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + int CUSTOM_REGISTER_CHARGE1; + int FIST_MODE; + float HP_RETURN_RATIO; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_NEW_PARRY_CHANCE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int NO_IDLE; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + int SENT_RETURN_REQ; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + int SPECIAL_OVERRIDE; + int SWORD_CAN_PARRY; + string SWORD_ID; + int SWORD_MANUAL_PARRY; + int THROW_MP; + + SwordsBloodDrinker() + { + NO_IDLE = 1; + CUSTOM_REGISTER_CHARGE1 = 1; + SPECIAL_OVERRIDE = 1; + SWORD_MANUAL_PARRY = 1; + HP_RETURN_RATIO = 0.01; + THROW_MP = 40; + BASE_LEVEL_REQ = 30; + ANIM_LIFT = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 2; + ANIM_ATTACK3 = 2; + ATTACK_ANIMS = 1; + ANIM_LUNGE = 3; + ANIM_PARRY1 = 4; + ANIM_PARRY1_RETRACT = 5; + ANIM_UNSHEATH = 6; + ANIM_SHEATH = 7; + MODEL_VIEW = "viewmodels/v_2hswords.mdl"; + MODEL_VIEW_IDX = 6; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + MODEL_BODY_OFS = 114; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + ANIM_PREFIX = "longsword"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 1; + MELEE_DMG = 425; + MELEE_DMG_RANGE = 80; + MELEE_DMG_TYPE = "dark"; + MELEE_ACCURACY = 0.65; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 3; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.3; + MELEE_NEW_PARRY_CHANCE = 30; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "sword_double_swing"; + } + + void weapon_spawn() + { + SetName("Blood Drinker"); + SetDescription("A gigantic dancing blade with a thirst for blood"); + SetWeight(100); + SetSize(10); + SetValue(4000); + SetHUDSprite("trade", 105); + SetHand("both"); + FIST_MODE = 0; + SWORD_CAN_PARRY = 1; + } + + void game_dodamage() + { + if ((FIST_MODE)) return; + if (!(param1)) return; + string HP_TO_GIVE = GetEntityMaxHealth(GetOwner()); + HP_TO_GIVE *= HP_RETURN_RATIO; + try_vampire_target(GetEntityIndex(GetOwner()), GetEntityIndex(param2), HP_TO_GIVE); + } + + void register_charge1() + { + string reg.attack.type = "strike-land"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + reg.attack.delay.strike += 0.5; + string reg.attack.delay.end = MELEE_ATK_DURATION; + reg.attack.delay.end += 0.5; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 1; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "special_01"; + reg.attack.dmg *= 2; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 32; + RegisterAttack(); + string reg.attack.type = "strike-land"; + int reg.attack.noautoaim = 1; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 0; + int reg.attack.dmg = 0; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "slash"; + int reg.attack.energydrain = 2; + string reg.attack.stat = "swordsmanship"; + float reg.attack.hitchance = 1.0; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 0.1; + float reg.attack.delay.end = 0.2; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "throwsword"; + string reg.attack.noise = MELEE_NOISE; + string reg.attack.mpdrain = THROW_MP; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 34; + RegisterAttack(); + } + + void throwsword_start() + { + SetViewModel("none"); + PlayOwnerAnim("critical", "bow_release"); + SetModel("none"); + SetWorldModel("none"); + SetHand("undroppable"); + PlayViewAnim(4); + FIST_MODE = 1; + SWORD_CAN_PARRY = 0; + if (!(true)) return; + if (!(GetEntityMP(GetOwner()) < THROW_MP)) return; + FIST_MODE = 0; + SWORD_CAN_PARRY = 1; + sword_return(); + SendColoredMessage(GetOwner(), "Blood Drinker: Insufficient mana for Blood Dance"); + } + + void throwsword_strike() + { + PlayOwnerAnim("critical", "bow_release"); + if (!(true)) return; + if (!(FIST_MODE)) return; + SENT_RETURN_REQ = 0; + string DMG_BASE = GetSkillLevel(GetOwner(), "spellcasting"); + DMG_BASE /= 2; + SpawnNPC("monsters/summon/blood_drinker", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "target"), DMG_BASE, DMG_BASE, GetEntityIndex(GetOwner()) + SWORD_ID = GetEntityIndex(m_hLastCreated); + ApplyEffect(GetOwner(), "effects/effect_templock"); + } + + void restore_sword_cl() + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_WORLD); + SetWorldModel(MODEL_WORLD); + FIST_MODE = 0; + SWORD_CAN_PARRY = 1; + } + + void melee_start() + { + SetViewModel(MODEL_VIEW); + SetModel(MODEL_WORLD); + SetWorldModel(MODEL_WORLD); + FIST_MODE = 0; + SWORD_CAN_PARRY = 1; + bw_setup_model(); + } + + void sword_return() + { + CallExternal(GetOwner(), "ext_end_templock"); + // TODO: setviewmodelprop ent_me model MODEL_VIEW + if ((FIST_MODE)) + { + SendColoredMessage(GetOwner(), "Blood Drinker returns."); + } + FIST_MODE = 0; + SWORD_CAN_PARRY = 1; + SetViewModel(MODEL_VIEW); + SetHand("both"); + bw_setup_model(); + } + + void special_01_start() + { + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + } + + void game_+attack2() + { + if (!(true)) return; + if (!(FIST_MODE)) return; + if ((SENT_RETURN_REQ)) return; + SendPlayerMessage("Sent", "return request to " + GetEntityName(SWORD_ID)); + SENT_RETURN_REQ = 1; + CallExternal(SWORD_ID, "return_to_owner"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_dynamic.as b/scripts/angelscript/items/swords_dynamic.as new file mode 100644 index 00000000..99dbda2e --- /dev/null +++ b/scripts/angelscript/items/swords_dynamic.as @@ -0,0 +1,78 @@ +#pragma context server + +#include "items/base_melee.as" + +namespace MS +{ + +class SwordsDynamic : CGameScript +{ + string ANIM_PREFIX; + string ANIM_USE; + int CUR_PROP; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string PRESS_DELAY; + + SwordsDynamic() + { + MODEL_VIEW = "weapons/1hbigsword_rview.mdl"; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "shortsword"; + } + + void weapon_spawn() + { + SetName("Dynamic Sword"); + SetDescription("Special developer tool , does no damage command: . dsword < sub> < anim>"); + SetWeight(30); + SetSize(5); + SetValue(15); + SetHUDSprite("trade", "shortsword"); + } + + void OnDeploy() override + { + if (!(true)) return; + // TODO: setviewmodelprop ent_owner submodel 0 + CUR_PROP = 0; + } + + void register_normal() + { + } + + void ext_sub() + { + if (!(true)) return; + LogMessage("ent_owner setviewmodelprop ent_owner submodel 1 " + param1); + // TODO: setviewmodelprop ent_owner submodel PARAM1 + CUR_PROP = param1; + ANIM_USE = param2; + // TODO: splayviewanim ent_me ANIM_USE + } + + void game_attack1() + { + if (!(true)) return; + // TODO: splayviewanim ent_me ANIM_USE + } + + void game_+attack2() + { + if (!(true)) return; + if (!(GetGameTime() > PRESS_DELAY)) return; + PRESS_DELAY = GetGameTime(); + PRESS_DELAY += 0.25; + CUR_PROP += 1; + // TODO: setviewmodelprop ent_owner submodel CUR_PROP + LogMessage("ent_owner using " + CUR_PROP); + } + +} + +} diff --git a/scripts/angelscript/items/swords_frostblade55.as b/scripts/angelscript/items/swords_frostblade55.as new file mode 100644 index 00000000..f9c33561 --- /dev/null +++ b/scripts/angelscript/items/swords_frostblade55.as @@ -0,0 +1,305 @@ +#pragma context server + +#include "items/swords_base_twohanded.as" + +namespace MS +{ + +class SwordsFrostblade55 : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_LUNGE; + int ANIM_PARRY1; + int ANIM_PARRY1_RETRACT; + int ANIM_PARRY_DEBUG; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_UNPARRY_DEBUG; + int ANIM_UNSHEATH; + int ATTACK_ANIMS; + int ATTACK_DELAY; + int ATTACK_ON; + int BASE_LEVEL_REQ; + int CIRCLE_DRAIN; + int CUSTOM_REGISTER_CHARGE1; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_NEW_PARRY_CHANCE; + int MELEE_OVERRIDE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string NEXT_DELAY_MSG; + int PARRY_ON; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string RANGED_AIMANGLE; + float RANGED_ATK_DURATION; + string RANGED_HOLD_MINMAX; + int RANGED_MP; + string RANGED_PROJECTILE; + float RANGED_PULLTIME; + string RANGED_STARTPOS; + string SOUND_CHARGE; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_PARRY; + string SOUND_SHOOT; + string SOUND_SHOUT; + string SOUND_SWIPE; + string SPECIAL01_SND; + int SPECIAL_OVERRIDE; + + SwordsFrostblade55() + { + Precache("magic/spawn.wav"); + Precache("magic/frost_forward.wav"); + Precache("magic/frost_reverse.wav"); + MELEE_OVERRIDE = 1; + SPECIAL_OVERRIDE = 1; + CUSTOM_REGISTER_CHARGE1 = 1; + SOUND_CHARGE = "magic/ice_powerup.wav"; + SOUND_SHOOT = "magic/ice_strike2.wav"; + SPECIAL01_SND = GetEntityProperty(GetOwner(), "scriptvar"); + SOUND_PARRY = "weapons/parry.wav"; + RANGED_HOLD_MINMAX = "1.1;1.3"; + RANGED_ATK_DURATION = 0.3; + RANGED_PROJECTILE = "proj_icelance"; + RANGED_AIMANGLE = Vector3(0, 0, 0); + RANGED_STARTPOS = Vector3(0, 38, 0); + RANGED_PULLTIME = 0.8; + RANGED_MP = 15; + CIRCLE_DRAIN = 40; + ANIM_LIFT = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 2; + ANIM_ATTACK3 = 2; + ATTACK_ANIMS = 1; + ANIM_LUNGE = 3; + ANIM_PARRY1 = 4; + ANIM_PARRY1_RETRACT = 5; + ANIM_UNSHEATH = 6; + ANIM_SHEATH = 7; + ANIM_PARRY_DEBUG = 4; + ANIM_UNPARRY_DEBUG = 5; + MODEL_VIEW = "viewmodels/v_2hswords.mdl"; + MODEL_VIEW_IDX = 5; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + BASE_LEVEL_REQ = 20; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.3; + MELEE_ENERGY = 1; + MELEE_DMG = 350; + MELEE_DMG_RANGE = 75; + MELEE_DMG_TYPE = "cold"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 3; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.6; + MELEE_NEW_PARRY_CHANCE = 50; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "sword_double_swing"; + } + + void weapon_spawn() + { + SetName("Hoarfrost Shard"); + SetDescription("A gigantic blade of pure elemental ice"); + SetWeight(75); + SetSize(9); + SetValue(4000); + SetHUDSprite("trade", 124); + SetHand("both"); + } + + void melee_start() + { + int SWING = RandomInt(1, 3); + if (SWING == 1) + { + string SWING_ANIM = ANIM_ATTACK1; + } + if (SWING == 2) + { + string SWING_ANIM = ANIM_ATTACK2; + } + if (SWING == 3) + { + string SWING_ANIM = ANIM_ATTACK3; + } + PlayOwnerAnim("once", "sword_double_swing"); + PlayViewAnim(SWING_ANIM); + SetVolume(10); + EmitSound(GetOwner(), SOUND_SWIPE); + } + + void melee_strike() + { + if (!(true)) return; + if (!(RandomInt(1, 5) == 1)) return; + if (!(IsEntityAlive(param3))) return; + if (!(GetRelationship(param3) == "enemy")) return; + if ((IsValidPlayer(param3))) + { + string PVP_SET = "game.pvp"; + if (PVP_SET == 0) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(param3, "effects/dot_cold", 5, GetEntityIndex(GetOwner()), Random(5, 15), "swordsmanship"); + } + + void ice_shard_start() + { + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + if (!(GetEntityMP(GetOwner()) > RANGED_MP)) return; + EmitSound(GetOwner(), "const.snd.weapon", SOUND_SHOOT, "const.snd.maxvol"); + } + + void blockmode_start() + { + PlayViewAnim(ANIM_PARRY1); + PlayOwnerAnim("once", "sword_swing"); + PARRY_ON = 1; + } + + void blockmode_end() + { + PlayViewAnim(ANIM_PARRY1_RETRACT); + PARRY_ON = 0; + } + + void parryanim() + { + PlayViewAnim(ANIM_PARRY1); + EmitSound(GetOwner(), 0, SOUND_PARRY, 10); + ScheduleDelayedEvent(0.75, "unparryanim"); + } + + void unparryanim() + { + PlayViewAnim(ANIM_PARRY1_RETRACT); + } + + void register_charge1() + { + string reg.attack.mpdrain = RANGED_MP; + int reg.attack.ammodrain = 0; + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.hold_min&max = "1;1"; + string reg.attack.dmg.type = "cold"; + int reg.attack.range = 500; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = "swordsmanship"; + int reg.attack.COF = 0; + string reg.attack.projectile = "proj_icelance"; + int reg.attack.priority = 1; + string reg.attack.delay.strike = RANGED_DMG_DELAY; + string reg.attack.delay.end = RANGED_ATK_DURATION; + string reg.attack.ofs.startpos = RANGED_STARTPOS; + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + string reg.attack.noise = RANGED_NOISE; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "ice_shard"; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 22; + RegisterAttack(); + } + + void game_+attack2() + { + if (GetGameTime() > NEXT_DELAY_MSG) + { + if ((ATTACK_DELAY)) + { + } + SendColoredMessage(GetOwner(), "Hoarfrost Shard: Needs time to recharge."); + NEXT_DELAY_MSG = GetGameTime(); + NEXT_DELAY_MSG += 0.5; + } + if ((ATTACK_DELAY)) return; + ATTACK_DELAY = 1; + ScheduleDelayedEvent(10.0, "attack_delay_reset"); + ATTACK_ON = 1; + } + + void attack_delay_reset() + { + ATTACK_DELAY = 0; + } + + void game__attack2() + { + if (!(ATTACK_ON)) return; + ATTACK_ON = 0; + if ((true)) + { + int DO_ATTACK = 1; + if (GetEntityMP(GetOwner()) <= CIRCLE_DRAIN) + { + int DO_ATTACK = 0; + } + if (!(DO_ATTACK)) + { + SendColoredMessage(GetOwner(), "Hoarfrost Shard: Insufficient mana."); + } + if (!(CanAttack(GetOwner()))) + { + SendColoredMessage(GetOwner(), "Can't attack now..."); + int DO_ATTACK = 0; + } + } + if ((false)) + { + PlayViewAnim(5); + } + if (!(DO_ATTACK)) return; + GiveMP(/* TODO: $neg */ $neg(CIRCLE_DRAIN)); + CallExternal(GetOwner(), "mana_drain"); + PlayOwnerAnim("once", "throw_fireball"); + if (!(true)) return; + string CFROST_DAMAGE = GetSkillLevel(GetOwner(), "swordsmanship"); + CFROST_DAMAGE *= 1.25; + SpawnNPC("monsters/summon/circle_of_ice_player", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 15, 5, CFROST_DAMAGE, "swordsmanship" + } + +} + +} diff --git a/scripts/angelscript/items/swords_fshard1.as b/scripts/angelscript/items/swords_fshard1.as new file mode 100644 index 00000000..f42d3ba7 --- /dev/null +++ b/scripts/angelscript/items/swords_fshard1.as @@ -0,0 +1,337 @@ +#pragma context server + +#include "items/swords_base_twohanded.as" + +namespace MS +{ + +class SwordsFshard1 : CGameScript +{ + string ALLOW_MODE_SWITCH; + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_LUNGE; + int ANIM_PARRY1; + int ANIM_PARRY1_RETRACT; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_UNSHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + int CUSTOM_REGISTER_CHARGE1; + string HOLY_MODE; + int HOLY_VIEW_IDX; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_NEW_PARRY_CHANCE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + int MODEL_HOLY_OFS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int MP_HOLY_WAVE; + string NEXT_ALLOWED_PARRY; + string NEXT_WARN_MSG; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + int PMODEL_IDX_FLOOR; + int REGEN_LOOP; + int SHARD_SHIELD_ON; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_MODE_SWITCH; + string SOUND_SHOUT; + string SOUND_SWIPE; + + SwordsFshard1() + { + SOUND_MODE_SWITCH = "magic/energy1_loud.wav"; + CUSTOM_REGISTER_CHARGE1 = 1; + MP_HOLY_WAVE = 30; + BASE_LEVEL_REQ = 30; + ANIM_LIFT = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 2; + ANIM_ATTACK3 = 2; + ATTACK_ANIMS = 1; + ANIM_LUNGE = 3; + ANIM_PARRY1 = 4; + ANIM_PARRY1_RETRACT = 5; + ANIM_UNSHEATH = 6; + ANIM_SHEATH = 7; + MODEL_VIEW = "viewmodels/v_2hswords.mdl"; + MODEL_VIEW_IDX = 8; + HOLY_VIEW_IDX = 9; + MODEL_HANDS = "weapons/p_weapons4.mdl"; + MODEL_WORLD = "weapons/p_weapons4.mdl"; + MODEL_BODY_OFS = 51; + MODEL_HOLY_OFS = 53; + PMODEL_IDX_FLOOR = 52; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + ANIM_PREFIX = "standard"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 1; + MELEE_DMG = 450; + MELEE_DMG_RANGE = 80; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 3; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.3; + MELEE_NEW_PARRY_CHANCE = 30; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "sword_double_swing"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if ((REGEN_LOOP)) + { + } + if (GetEntityHealth(GetOwner()) < GetEntityMaxHealth(GetOwner())) + { + } + if (!(HOLY_MODE)) + { + HealEntity(GetOwner(), 1); + } + else + { + HealEntity(GetOwner(), 2); + } + } + + void weapon_spawn() + { + SetName("Felewyn Shard I"); + SetDescription("A shard of the legendary Felewyn Blade"); + SetWeight(100); + SetSize(10); + SetValue(5000); + SetHUDSprite("trade", 132); + SetHand("both"); + } + + void OnDeploy() override + { + if (!(true)) return; + ScheduleDelayedEvent(0.1, "render_props"); + } + + void render_props() + { + if (!(HOLY_MODE)) + { + SetModelBody(0, MODEL_BODY_OFS); + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") MODEL_VIEW_IDX + } + else + { + SetModelBody(0, MODEL_HOLY_OFS); + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") HOLY_VIEW_IDX + } + } + + void register_charge1() + { + string reg.attack.type = "strike-land"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + reg.attack.delay.strike += 0.5; + string reg.attack.delay.end = MELEE_ATK_DURATION; + reg.attack.delay.end += 0.5; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 1; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "special_01"; + reg.attack.dmg *= 2; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 32; + RegisterAttack(); + string reg.attack.type = "strike-land"; + int reg.attack.noautoaim = 1; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 0; + int reg.attack.dmg = 0; + int reg.attack.dmg.range = 0; + string reg.attack.dmg.type = "slash"; + int reg.attack.energydrain = 2; + string reg.attack.stat = "swordsmanship"; + float reg.attack.hitchance = 1.0; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 0.1; + float reg.attack.delay.end = 0.2; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "shield"; + string reg.attack.noise = MELEE_NOISE; + string reg.attack.mpdrain = SHIELD_MP; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 34; + RegisterAttack(); + } + + void special_01_start() + { + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void shield_start() + { + LogDebug("shield_start IsKeyDown(GetOwner(), "use")"); + if (!(IsKeyDown(GetOwner(), "use"))) + { + if (GetEntityMP(GetOwner()) < MP_HOLY_WAVE) + { + int L_FAIL = 1; + SendColoredMessage(GetOwner(), "Felewyn Shard: Insufficient mana for Holy Wave 20"); + SendColoredMessage(GetOwner(), "Hold +Use to use Holy Shield instead."); + } + if (!(L_FAIL)) + { + } + do_holy_wave(); + } + if ((PARRY_MODE)) return; + if (!(IsKeyDown(GetOwner(), "use"))) return; + if (GetGameTime() <= NEXT_ALLOWED_PARRY) + { + if (GetGameTime() > NEXT_WARN_MSG) + { + } + NEXT_WARN_MSG = GetGameTime(); + NEXT_WARN_MSG += 1.0; + SendColoredMessage(GetOwner(), "Felewyn Shard: Shield needs time to recharge"); + } + if (!(GetGameTime() > NEXT_ALLOWED_PARRY)) return; + NEXT_ALLOWED_PARRY = GetGameTime(); + NEXT_ALLOWED_PARRY += 20.0; + // TODO: splayviewanim ent_me ANIM_PARRY1 + ApplyEffect(GetOwner(), "effects/effect_shardshield", 10.0, 0.1); + SHARD_SHIELD_ON = 1; + ScheduleDelayedEvent(10.0, "end_parry"); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(SHARD_SHIELD_ON)) return; + if (!(HOLY_MODE)) return; + string MAX_HP_REPEL = GetEntityMaxHealth(GetOwner()); + MAX_HP_REPEL *= 2; + if (!(GetEntityMaxHealth(param1) < MAX_HP_REPEL)) return; + string REPEL_VEL = GetEntityProperty(param1, "angles.yaw"); + AddVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, REPEL_VEL, 0), Vector3(0, -400, 200))); + } + + void end_parry() + { + SHARD_SHIELD_ON = 0; + // TODO: splayviewanim ent_me ANIM_PARRY1_RETRACT + } + + void bweapon_effect_activate() + { + REGEN_LOOP = 1; + } + + void bweapon_effect_remove() + { + REGEN_LOOP = 0; + } + + void game_+attack2() + { + if (!(GetGameTime() > ALLOW_MODE_SWITCH)) return; + ALLOW_MODE_SWITCH = GetGameTime(); + ALLOW_MODE_SWITCH += 1.0; + EmitSound(GetOwner(), 0, SOUND_MODE_SWITCH, 10); + if ((HOLY_MODE)) + { + HOLY_MODE = 0; + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 1); + SetModelBody(0, MODEL_BODY_OFS); + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") MODEL_VIEW_IDX + } + else + { + HOLY_MODE = 1; + SetAttackProp("ent_me", 0); + SetAttackProp("ent_me", 1); + SetModelBody(0, MODEL_HOLY_OFS); + // TODO: setviewmodelprop ent_me submodel GetEntityProperty(GetOwner(), "scriptvar") HOLY_VIEW_IDX + } + } + + void game_show() + { + render_props(); + } + + void ext_activate_items() + { + LogDebug("$currentscript ext_activate_items"); + if (!(GetEntityProperty(GetOwner(), "inhand"))) return; + if (!(param1 == GetEntityIndex(GetOwner()))) return; + render_props(); + } + + void do_holy_wave() + { + GiveMP(GetOwner()); + // TODO: splayviewanim ent_me 3 + string L_OWNER_YAW = GetEntityProperty(GetOwner(), "viewangles"); + string L_OWNER_YAW = /* TODO: $vec.yaw */ $vec.yaw(L_OWNER_YAW); + string L_PROJ_START = GetEntityOrigin(GetOwner()); + L_PROJ_START = "z"; + SpawnNPC("effects/sfx_wave", L_PROJ_START, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), L_OWNER_YAW, 20, "swordsmanship" + } + + void game_fall() + { + SetModelBody(0, PMODEL_IDX_FLOOR); + } + +} + +} diff --git a/scripts/angelscript/items/swords_fshard2.as b/scripts/angelscript/items/swords_fshard2.as new file mode 100644 index 00000000..994cd181 --- /dev/null +++ b/scripts/angelscript/items/swords_fshard2.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "items/swords_fshard1.as" + +namespace MS +{ + +class SwordsFshard2 : CGameScript +{ + void weapon_spawn() + { + SetName("Felewyn Shard II"); + SetDescription("A shard of the legendary Felewyn Blade"); + SetWeight(100); + SetSize(10); + SetValue(5000); + SetHUDSprite("trade", 132); + SetHand("both"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_fshard3.as b/scripts/angelscript/items/swords_fshard3.as new file mode 100644 index 00000000..d3b7fe6d --- /dev/null +++ b/scripts/angelscript/items/swords_fshard3.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "items/swords_fshard1.as" + +namespace MS +{ + +class SwordsFshard3 : CGameScript +{ + void weapon_spawn() + { + SetName("Felewyn Shard III"); + SetDescription("A shard of the legendary Felewyn Blade"); + SetWeight(100); + SetSize(10); + SetValue(5000); + SetHUDSprite("trade", 132); + SetHand("both"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_fshard4.as b/scripts/angelscript/items/swords_fshard4.as new file mode 100644 index 00000000..f30a2725 --- /dev/null +++ b/scripts/angelscript/items/swords_fshard4.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "items/swords_fshard1.as" + +namespace MS +{ + +class SwordsFshard4 : CGameScript +{ + void weapon_spawn() + { + SetName("Felewyn Shard IV"); + SetDescription("A shard of the legendary Felewyn Blade"); + SetWeight(100); + SetSize(10); + SetValue(5000); + SetHUDSprite("trade", 132); + SetHand("both"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_fshard5.as b/scripts/angelscript/items/swords_fshard5.as new file mode 100644 index 00000000..72bbe724 --- /dev/null +++ b/scripts/angelscript/items/swords_fshard5.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "items/swords_fshard1.as" + +namespace MS +{ + +class SwordsFshard5 : CGameScript +{ + void weapon_spawn() + { + SetName("Felewyn Shard V"); + SetDescription("A shard of the legendary Felewyn Blade"); + SetWeight(100); + SetSize(10); + SetValue(5000); + SetHUDSprite("trade", 132); + SetHand("both"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_gb.as b/scripts/angelscript/items/swords_gb.as new file mode 100644 index 00000000..bc0c1d3b --- /dev/null +++ b/scripts/angelscript/items/swords_gb.as @@ -0,0 +1,170 @@ +#pragma context shared + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsGb : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + string DOT_DAMAGE; + string GIB_EXPLODE_DAMAGE; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + int PMODEL_IDX_FLOOR; + string POTENTIALLY_INACCURATE_GIB_DAMAGE; + string SOUND_SHOUT; + string SOUND_SWIPE; + int SWORD_MANUAL_PARRY; + + SwordsGb() + { + BASE_LEVEL_REQ = 37; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 2; + ANIM_ATTACK3 = 2; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_2haxesgreat.mdl"; + MODEL_VIEW_IDX = 10; + MODEL_HANDS = "weapons/p_weapons4.mdl"; + MODEL_WORLD = "weapons/p_weapons4.mdl"; + MODEL_BODY_OFS = 62; + PMODEL_IDX_FLOOR = 63; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + ANIM_PREFIX = "standard"; + PLAYERANIM_AIM = "axe_twohand"; + PLAYERANIM_SWING = "axe_twohand_swing"; + MELEE_RANGE = 100; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.4; + MELEE_ENERGY = 10; + MELEE_DMG = 540; + MELEE_DMG_RANGE = 150; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.15; + SWORD_MANUAL_PARRY = 0; + DOT_DAMAGE = "func_dot_damage"(); + GIB_EXPLODE_DAMAGE = "func_gib_damage"(); + } + + void weapon_spawn() + { + SetName("Gut Buster"); + SetDescription("The sickly sword thrives on flesh."); + SetWeight(90); + SetSize(5); + SetValue(2500); + SetHUDSprite("trade", 199); + SetHand("both"); + } + + void game_precache() + { + Precache("gib_b_bone.mdl"); + Precache("gib_b_gib.mdl"); + Precache("gib_lung.mdl"); + Precache("gib_legbone.mdl"); + Precache("agibs.mdl"); + Precache("bloodspray.spr"); + Precache("char_breath.spr"); + } + + void weapon_damaged_other() + { + if ((BITEM_UNDERSKILLED)) return; + if (!(param2 > 0)) return; + if ((GetEntityProperty(param1, "scriptvar"))) return; + if ((GetEntityProperty(param1, "scriptvar"))) return; + inflict_bleed(param1); + string L_BLOOD = GetEntityProperty(param1, "blood"); + if (!(L_BLOOD != "none")) return; + string L_SOUND = "leech/leech_bite"; + EmitSound(GetOwner(), 0, L_SOUND, 10); + string L_VEL = /* TODO: $relvel */ $relvel(GetEntityProperty(GetOwner(), "viewangles"), Vector3(-35, 50, 350)); + SpawnNPC("effects/swords_gb/gb_gib_explode", GetEntityOrigin(param1), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), L_VEL, GIB_EXPLODE_DAMAGE, "swordsmanship", L_BLOOD, GetEntityIndex(GetOwner()) + } + + void gib_dodamage() + { + if (!(param1)) return; + if (!(param6)) return; + inflict_bleed(param2); + } + + void inflict_bleed() + { + string L_BLOOD = GetEntityProperty(param1, "blood"); + if (!(L_BLOOD != "none")) return; + ApplyEffect(param1, "effects/swords_gb/gut_buster", 5, GetEntityIndex(GetOwner()), DOT_DAMAGE, "swordsmanship", GetEntityIndex(GetOwner())); + } + + void func_dot_damage() + { + string L_DMG = GetSkillLevel(GetOwner(), "swordsmanship"); + L_DMG -= BASE_LEVEL_REQ; + string L_DMG = (L_DMG * 4); + string L_DMG = (L_DMG + 55); + return; + return; + } + + void func_gib_damage() + { + string L_DMG = GetSkillLevel(GetOwner(), "swordsmanship"); + L_DMG *= 2.75; + POTENTIALLY_INACCURATE_GIB_DAMAGE = L_DMG; + return; + return; + } + + void special_01_start() + { + PlayViewAnim(8); + } + + void game_fall() + { + SetModelBody(0, PMODEL_IDX_FLOOR); + } + +} + +} diff --git a/scripts/angelscript/items/swords_giceblade.as b/scripts/angelscript/items/swords_giceblade.as new file mode 100644 index 00000000..b460485d --- /dev/null +++ b/scripts/angelscript/items/swords_giceblade.as @@ -0,0 +1,198 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" +#include "items/base_varied_attacks.as" + +namespace MS +{ + +class SwordsGiceblade : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_ATTACK5; + int ANIM_IDLE1; + int ANIM_IDLE_DELAY_HIGH; + int ANIM_IDLE_DELAY_LOW; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LUNGE; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + int FREEZE_CHANCE; + int FREEZE_MP; + string GAME_PVP; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + int SPEC_ATTACK; + string SWING_ANIM; + + SwordsGiceblade() + { + BASE_LEVEL_REQ = 15; + FREEZE_CHANCE = 65; + FREEZE_MP = 5; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_IDLE_DELAY_LOW = 1; + ANIM_IDLE_DELAY_HIGH = 3; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_ATTACK4 = 5; + ANIM_ATTACK5 = 6; + ANIM_LUNGE = 6; + ATTACK_ANIMS = 4; + ANIM_SHEATH = 7; + MODEL_VIEW = "viewmodels/v_1hswordssb.mdl"; + MODEL_VIEW_IDX = 3; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 52; + ANIM_PREFIX = "skullblade"; + MELEE_RANGE = 64; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.4; + MELEE_ENERGY = 5; + MELEE_DMG = 320; + MELEE_DMG_RANGE = 30; + MELEE_DMG_TYPE = "cold"; + MELEE_ACCURACY = 0.72; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + SOUND_HITWALL1 = "debris/glass1.wav"; + SOUND_HITWALL2 = "debris/glass2.wav"; + } + + void weapon_spawn() + { + SetName("Greater Ice Blade"); + SetDescription("An ancient blade of enchanted crystal"); + SetWeight(80); + SetSize(7); + SetValue(3500); + SetHUDSprite("trade", 96); + } + + void OnDeploy() override + { + if (!(true)) return; + GAME_PVP = "game.pvp"; + } + + void melee_start() + { + EmitSound(GetOwner(), 1, SOUND_SWIPE, 10); + if (!(true)) return; + PlayOwnerAnim("once", "sword_swing"); + check_attack_anim(); + SWING_ANIM = CUR_ATTACK_ANIM; + // TODO: splayviewanim ent_me SWING_ANIM + } + + void special_01_start() + { + PlayOwnerAnim("once", "axe_twohand_swing"); + SPEC_ATTACK = 1; + PlayViewAnim(ANIM_LUNGE); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void special_01_damaged_other() + { + if (!(GetEntityMP(GetOwner()) >= 10)) return; + GiveMP(GetOwner()); + if (RandomInt(1, 100) > FREEZE_CHANCE) + { + SendPlayerMessage("Freeze", "attack failed."); + EmitSound(GetOwner(), 2, "debris/zap1.wav", 10); + } + else + { + if ((IsValidPlayer(param1))) + { + if (("game.pvp")) + { + } + ApplyEffect(param1, "effects/dot_cold_freeze", Random(5, 7), GetEntityIndex(GetOwner())); + } + else + { + string MON_HP = GetEntityHealth(param1); + if (MON_HP > 1500) + { + SendPlayerMessage(GetEntityName(param1), "is too strong to be affected!"); + } + if (MON_HP <= 1500) + { + } + if (/* TODO: $get_takedmg */ $get_takedmg(param1, "cold") > 0) + { + SendPlayerMessage(GetOwner(), "Your sword's magic has encased your enemy in ice!"); + ApplyEffect(param1, "effects/dot_cold_freeze", Random(5, 7), GetEntityIndex(GetOwner())); + EmitSound(GetOwner(), 2, "debris/beamstart14.wav", 10); + } + else + { + SendPlayerMessage(GetEntityName(param1), "is immune to ice magic!"); + } + } + } + } + + void melee_damaged_other() + { + if ((IsValidPlayer(param1))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + int RND_FREEZE = RandomInt(1, 3); + if (RND_FREEZE == 1) + { + string FREEZE_DMG = GetSkillLevel(GetOwner(), "spellcasting.ice"); + FREEZE_DMG *= 0.25; + ApplyEffect(param1, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), FREEZE_DMG, "spellcasting.ice"); + } + } + +} + +} diff --git a/scripts/angelscript/items/swords_iceblade.as b/scripts/angelscript/items/swords_iceblade.as new file mode 100644 index 00000000..7d262c54 --- /dev/null +++ b/scripts/angelscript/items/swords_iceblade.as @@ -0,0 +1,178 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" +#include "items/base_varied_attacks.as" + +namespace MS +{ + +class SwordsIceblade : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_ATTACK5; + int ANIM_IDLE1; + int ANIM_IDLE_DELAY_HIGH; + int ANIM_IDLE_DELAY_LOW; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + int ANIM_LUNGE; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + int FREEZE_CHANCE; + string GAME_PVP; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + int SPEC_ATTACK; + string SWING_ANIM; + + SwordsIceblade() + { + BASE_LEVEL_REQ = 12; + FREEZE_CHANCE = 75; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_IDLE_DELAY_LOW = 1; + ANIM_IDLE_DELAY_HIGH = 3; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_ATTACK4 = 5; + ANIM_ATTACK5 = 6; + ANIM_LUNGE = 6; + ATTACK_ANIMS = 4; + ANIM_SHEATH = 7; + MODEL_VIEW = "viewmodels/v_1hswordssb.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 8; + ANIM_PREFIX = "iceblade"; + MELEE_RANGE = 64; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.4; + MELEE_ENERGY = 2; + MELEE_DMG = 315; + MELEE_DMG_RANGE = 10; + MELEE_DMG_TYPE = "cold"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + SOUND_HITWALL1 = "debris/glass1.wav"; + SOUND_HITWALL2 = "debris/glass2.wav"; + } + + void weapon_spawn() + { + SetName("Ice Blade"); + SetDescription("A blade of enchanted cold steel"); + SetWeight(80); + SetSize(7); + SetValue(1000); + SetHUDSprite("trade", 10); + } + + void melee_start() + { + EmitSound(GetOwner(), 1, SOUND_SWIPE, 10); + if (!(true)) return; + PlayOwnerAnim("once", "sword_swing"); + check_attack_anim(); + SWING_ANIM = CUR_ATTACK_ANIM; + // TODO: splayviewanim ent_me SWING_ANIM + } + + void special_01_start() + { + PlayOwnerAnim("once", "axe_twohand_swing"); + SPEC_ATTACK = 1; + PlayViewAnim(ANIM_LUNGE); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void OnDeploy() override + { + if (!(true)) return; + GAME_PVP = "game.pvp"; + } + + void game_dodamage() + { + if (!(param1)) + { + SPEC_ATTACK = 0; + } + if (!(param1)) return; + string ENEMY_HIT = GetEntityIndex(param2); + if ((IsValidPlayer(ENEMY_HIT))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (SPEC_ATTACK == 1) + { + int FREEZE_ROLL = RandomInt(1, 100); + if (FREEZE_ROLL > FREEZE_CHANCE) + { + SendPlayerMessage("Freeze", "attack failed."); + EmitSound(GetOwner(), 2, "debris/zap1.wav", "const.snd.fullvol"); + } + if (FREEZE_ROLL <= FREEZE_CHANCE) + { + string NME_MAXHP = GetEntityHealth(param2); + if (NME_MAXHP > 1000) + { + EmitSound(GetOwner(), 2, "debris/zap1.wav", "const.snd.fullvol"); + SendPlayerMessage(GetOwner(), "This enemy is too strong to be affected by your sword's magic!"); + } + if (NME_MAXHP < 1000) + { + } + ApplyEffect(ENEMY_HIT, "effects/dot_cold", 5, GetEntityIndex(GetOwner()), 10, "swordsmanship"); + SendPlayerMessage(GetOwner(), "The Ice Blade's magic has frozen your enemy!"); + EmitSound(GetOwner(), 2, "debris/beamstart14.wav", "const.snd.fullvol"); + } + } + SPEC_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/items/swords_katana.as b/scripts/angelscript/items/swords_katana.as new file mode 100644 index 00000000..d14d6c31 --- /dev/null +++ b/scripts/angelscript/items/swords_katana.as @@ -0,0 +1,97 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsKatana : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_ATTACK5; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + + SwordsKatana() + { + BASE_LEVEL_REQ = 6; + ANIM_LIFT1 = 6; + ANIM_IDLE1 = 7; + ANIM_ATTACK1 = 8; + ANIM_ATTACK2 = 9; + ANIM_ATTACK3 = 10; + ANIM_ATTACK4 = 11; + ANIM_ATTACK5 = 12; + ANIM_SHEATH = 13; + ATTACK_ANIMS = 5; + MODEL_VIEW = "viewmodels/v_1hswords.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 0; + ANIM_PREFIX = "dragonsword"; + MELEE_RANGE = 64; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.0; + MELEE_ENERGY = 1; + MELEE_DMG = 160; + MELEE_DMG_RANGE = 10; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.65; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Elven Shortsword"); + SetDescription("A smooth , balanced Elven shortsword"); + SetWeight(35); + SetSize(5); + SetValue(50); + SetHUDSprite("trade", "dragonsword"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_katana2.as b/scripts/angelscript/items/swords_katana2.as new file mode 100644 index 00000000..c76129b0 --- /dev/null +++ b/scripts/angelscript/items/swords_katana2.as @@ -0,0 +1,97 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsKatana2 : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_ATTACK5; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + + SwordsKatana2() + { + BASE_LEVEL_REQ = 9; + ANIM_LIFT1 = 6; + ANIM_IDLE1 = 7; + ANIM_ATTACK1 = 8; + ANIM_ATTACK2 = 9; + ANIM_ATTACK3 = 10; + ANIM_ATTACK4 = 11; + ANIM_ATTACK5 = 12; + ANIM_SHEATH = 13; + ATTACK_ANIMS = 5; + MODEL_VIEW = "viewmodels/v_1hswords.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit1.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 0; + ANIM_PREFIX = "dragonsword"; + MELEE_RANGE = 64; + MELEE_DMG_DELAY = 0.5; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.5; + MELEE_DMG = 160; + MELEE_DMG_RANGE = 70; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Sylvian Blade"); + SetDescription("A balanced blade made by the Sylvian Elves"); + SetWeight(35); + SetSize(5); + SetValue(200); + SetHUDSprite("trade", "dragonsword"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_katana3.as b/scripts/angelscript/items/swords_katana3.as new file mode 100644 index 00000000..5226ccc1 --- /dev/null +++ b/scripts/angelscript/items/swords_katana3.as @@ -0,0 +1,97 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsKatana3 : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_ATTACK5; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + + SwordsKatana3() + { + BASE_LEVEL_REQ = 9; + ANIM_LIFT1 = 6; + ANIM_IDLE1 = 7; + ANIM_ATTACK1 = 8; + ANIM_ATTACK2 = 9; + ANIM_ATTACK3 = 10; + ANIM_ATTACK4 = 11; + ANIM_ATTACK5 = 12; + ANIM_SHEATH = 13; + ATTACK_ANIMS = 5; + MODEL_VIEW = "viewmodels/v_1hswords.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit1.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 0; + ANIM_PREFIX = "dragonsword"; + MELEE_RANGE = 64; + MELEE_DMG_DELAY = 0.4; + MELEE_ATK_DURATION = 0.8; + MELEE_ENERGY = 1; + MELEE_DMG = 160; + MELEE_DMG_RANGE = 70; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("High Elven Blade"); + SetDescription("A nobel blade of the High Elves"); + SetWeight(35); + SetSize(5); + SetValue(400); + SetHUDSprite("trade", "dragonsword"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_katana4.as b/scripts/angelscript/items/swords_katana4.as new file mode 100644 index 00000000..4ed91c34 --- /dev/null +++ b/scripts/angelscript/items/swords_katana4.as @@ -0,0 +1,97 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsKatana4 : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_ATTACK5; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + + SwordsKatana4() + { + BASE_LEVEL_REQ = 15; + ANIM_LIFT1 = 6; + ANIM_IDLE1 = 7; + ANIM_ATTACK1 = 8; + ANIM_ATTACK2 = 9; + ANIM_ATTACK3 = 10; + ANIM_ATTACK4 = 11; + ANIM_ATTACK5 = 12; + ANIM_SHEATH = 13; + ATTACK_ANIMS = 5; + MODEL_VIEW = "viewmodels/v_1hswords.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit1.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 0; + ANIM_PREFIX = "dragonsword"; + MELEE_RANGE = 64; + MELEE_DMG_DELAY = 0.3; + MELEE_ATK_DURATION = 0.7; + MELEE_ENERGY = 1; + MELEE_DMG = 160; + MELEE_DMG_RANGE = 70; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.8; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Torkalath blade"); + SetDescription("A blade of vicious beauty crafted by the dark elves"); + SetWeight(35); + SetSize(5); + SetValue(2000); + SetHUDSprite("trade", "dragonsword"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_liceblade.as b/scripts/angelscript/items/swords_liceblade.as new file mode 100644 index 00000000..d3b15a52 --- /dev/null +++ b/scripts/angelscript/items/swords_liceblade.as @@ -0,0 +1,125 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" +#include "items/base_varied_attacks.as" + +namespace MS +{ + +class SwordsLiceblade : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + int FREEZE_HITS; + int FREEZE_HITS_NEEDED; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + string SWING_ANIM; + + SwordsLiceblade() + { + BASE_LEVEL_REQ = 6; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_1hswordssb.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 48; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.3; + MELEE_DMG = 150; + MELEE_DMG_RANGE = 120; + MELEE_DMG_TYPE = "cold"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + ANIM_PREFIX = "shortsword"; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.15; + FREEZE_HITS_NEEDED = 10; + SOUND_HITWALL1 = "debris/glass1.wav"; + SOUND_HITWALL2 = "debris/glass2.wav"; + } + + void weapon_spawn() + { + SetName("Lesser Ice Blade"); + SetDescription("A shortsword variant of the Ice Blade used by elite Marogar"); + SetWeight(30); + SetSize(7); + SetValue(400); + SetHUDSprite("trade", 95); + FREEZE_HITS = 1; + } + + void game_dodamage() + { + if (!(param1)) return; + FREEZE_HITS += 1; + if (!(FREEZE_HITS == 10)) return; + string ENEMY_HIT = GetEntityIndex(param2); + string NME_MAXHP = GetEntityHealth(param2); + if (NME_MAXHP > 500) + { + SendPlayerMessage("This", "enemy is too strong to be affected by your swords magic!"); + } + if (!(NME_MAXHP < 500)) return; + ApplyEffect(ENEMY_HIT, "effects/dot_cold", 5, GetEntityIndex(GetOwner()), 10, "swordsmanship"); + SendPlayerMessage(GetOwner(), "The Ice Blade's magic has frozen your enemy!"); + EmitSound(GetOwner(), 0, "debris/beamstart14.wav", 10); + FREEZE_HITS = 1; + } + + void melee_start() + { + EmitSound(GetOwner(), 1, SOUND_SWIPE, 10); + if (!(true)) return; + PlayOwnerAnim("once", "sword_swing"); + check_attack_anim(); + SWING_ANIM = CUR_ATTACK_ANIM; + // TODO: splayviewanim ent_me SWING_ANIM + } + +} + +} diff --git a/scripts/angelscript/items/swords_longsword.as b/scripts/angelscript/items/swords_longsword.as new file mode 100644 index 00000000..4195e52c --- /dev/null +++ b/scripts/angelscript/items/swords_longsword.as @@ -0,0 +1,171 @@ +#pragma context server + +#include "items/swords_base_twohanded.as" + +namespace MS +{ + +class SwordsLongsword : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_LUNGE; + int ANIM_PARRY1; + int ANIM_PARRY1_RETRACT; + int ANIM_PARRY_DEBUG; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_UNPARRY_DEBUG; + int ANIM_UNSHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_NEW_PARRY_CHANCE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int PARRY_ON; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + string SWING_ANIM; + int SWORD_MANUAL_PARRY; + + SwordsLongsword() + { + BASE_LEVEL_REQ = 9; + SWORD_MANUAL_PARRY = 1; + ANIM_LIFT = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 2; + ANIM_ATTACK3 = 2; + ATTACK_ANIMS = 1; + ANIM_LUNGE = 3; + ANIM_PARRY1 = 4; + ANIM_PARRY1_RETRACT = 5; + ANIM_UNSHEATH = 6; + ANIM_SHEATH = 7; + ANIM_PARRY_DEBUG = 4; + ANIM_UNPARRY_DEBUG = 5; + MODEL_VIEW = "viewmodels/v_2hswords.mdl"; + MODEL_VIEW_IDX = 0; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 16; + ANIM_PREFIX = "longsword"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 1; + MELEE_DMG = 160; + MELEE_DMG_RANGE = 80; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.65; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 3; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.3; + MELEE_NEW_PARRY_CHANCE = 30; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "sword_double_swing"; + } + + void weapon_spawn() + { + SetName("Longsword"); + SetDescription("A normal looking two-handed longsword"); + SetWeight(50); + SetSize(10); + SetValue(135); + SetHUDSprite("trade", "longsword"); + SetHand("both"); + } + + void melee_start() + { + int SWING = RandomInt(1, 3); + if (SWING == 1) + { + SWING_ANIM = ANIM_ATTACK1; + } + if (SWING == 2) + { + SWING_ANIM = ANIM_ATTACK2; + } + if (SWING == 3) + { + SWING_ANIM = ANIM_ATTACK3; + } + PlayOwnerAnim("once", "sword_double_swing"); + PlayViewAnim(SWING_ANIM); + SetVolume(10); + EmitSound(GetOwner(), SOUND_SWIPE); + } + + void special_01_start() + { + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void blockmode_start() + { + PlayViewAnim(ANIM_PARRY1); + PlayOwnerAnim("once", "sword_swing"); + PARRY_ON = 1; + } + + void blockmode_end() + { + PlayViewAnim(ANIM_PARRY1_RETRACT); + PARRY_ON = 0; + } + + void parryanim() + { + PlayViewAnim(ANIM_PARRY1); + PlayOwnerAnim("once", "sword_swing"); + ScheduleDelayedEvent(0.75, "unparryanim"); + } + + void unparryanim() + { + PlayViewAnim(ANIM_PARRY1_RETRACT); + } + +} + +} diff --git a/scripts/angelscript/items/swords_lostblade.as b/scripts/angelscript/items/swords_lostblade.as new file mode 100644 index 00000000..bccac144 --- /dev/null +++ b/scripts/angelscript/items/swords_lostblade.as @@ -0,0 +1,15 @@ +#pragma context server + +namespace MS +{ + +class SwordsLostblade : CGameScript +{ + SwordsLostblade() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/items/swords_lostblade_placeholder.as b/scripts/angelscript/items/swords_lostblade_placeholder.as new file mode 100644 index 00000000..73c0bb60 --- /dev/null +++ b/scripts/angelscript/items/swords_lostblade_placeholder.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class SwordsLostbladePlaceholder : CGameScript +{ +} + +} diff --git a/scripts/angelscript/items/swords_m2sword.as b/scripts/angelscript/items/swords_m2sword.as new file mode 100644 index 00000000..dc0c6a5e --- /dev/null +++ b/scripts/angelscript/items/swords_m2sword.as @@ -0,0 +1,198 @@ +#pragma context server + +#include "items/base_weapon.as" + +namespace MS +{ + +class SwordsM2sword : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_PARRY1; + int ANIM_PARRY1_RETRACT; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_UNSHEATH; + string ATTACK_ACCURACYDEFAULT; + string ATTACK_ACCURACYSTAT; + int ATTACK_ALIGN_BASE; + int ATTACK_ALIGN_TIP; + string ATTACK_DAMAGE; + string ATTACK_DAMAGE_RANGE; + string ATTACK_DAMAGE_TYPE; + int ATTACK_DONE_EVENT; + float ATTACK_DURATION; + string ATTACK_ENERGY; + string ATTACK_EVENT; + string ATTACK_KEYS; + float ATTACK_LAND_DELAY; + string ATTACK_LAND_EVENT; + int ATTACK_PRIORITY; + int ATTACK_RANGE; + string ATTACK_TYPE; + int BASE_LEVEL_REQ; + string ITEM_NAME; + string MODEL_BLOCK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + float SWING_ACCURACY; + int SWING_DAMAGE; + int SWING_DAMAGE_RANGE; + float SWING_DELAY; + float SWING_ENERGY; + + SwordsM2sword() + { + BASE_LEVEL_REQ = 15; + ANIM_LIFT = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_PARRY1 = 4; + ANIM_PARRY1_RETRACT = 5; + ANIM_UNSHEATH = 6; + ANIM_SHEATH = 7; + MODEL_VIEW = "weapons/swords/highsword_rview.mdl"; + MODEL_HANDS = "weapons/swords/p_swords.mdl"; + MODEL_WORLD = "weapons/swords/p_swords.mdl"; + MODEL_BLOCK = "armor/shields/p_shields.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit1.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + SWING_DELAY = 1.1; + SWING_ENERGY = 1.5; + SWING_ACCURACY = 0.8; + SWING_DAMAGE = 300; + SWING_DAMAGE_RANGE = 180; + ITEM_NAME = "longsword"; + MODEL_BODY_OFS = 4; + ANIM_PREFIX = "highsword"; + } + + void weapon_spawn() + { + SetName("Mithril Sword"); + SetDescription("A heavy , two-handed Mithril sword"); + SetWeight(110); + SetSize(9); + SetValue(1000); + SetWorldModel(MODEL_WORLD); + SetPlayerModel(MODEL_HANDS); + SetViewModel(MODEL_VIEW); + SetHUDSprite("hand", "sword"); + SetHUDSprite("trade", ITEM_NAME); + SetHand("both"); + registerattack_swingside(); + registerattack_swingoverhead(); + registerattack_parryside(); + } + + void registerattack_swingoverhead() + { + ATTACK_TYPE = "strike-land"; + ATTACK_DAMAGE_TYPE = "slash"; + ATTACK_KEYS = "+back+attack1"; + ATTACK_PRIORITY = 1; + ATTACK_DURATION = 1.3; + ATTACK_LAND_DELAY = 0.3; + ATTACK_EVENT = "swingoverhead"; + ATTACK_LAND_EVENT = "swingoverhead_land"; + ATTACK_DONE_EVENT = 0; + ATTACK_RANGE = 80; + ATTACK_DAMAGE = SWING_DAMAGE; + ATTACK_DAMAGE_RANGE = SWING_DAMAGE_RANGE; + ATTACK_ENERGY = SWING_ENERGY; + ATTACK_ACCURACYSTAT = "swordsmanship"; + ATTACK_ACCURACYDEFAULT = SWING_ACCURACY; + ATTACK_ALIGN_BASE = 3; + ATTACK_ALIGN_TIP = 0; + RegisterAttack(); + } + + void swingoverhead() + { + PlayViewAnim(ANIM_ATTACK2); + PlayOwnerAnim("once", "longsword_swipe"); + CallOwnerEvent("commenceattack"); + } + + void swingoverhead_land() + { + CallOwnerEvent("attackstrike"); + } + + void registerattack_swingside() + { + ATTACK_TYPE = "strike-land"; + ATTACK_DAMAGE_TYPE = "slash"; + ATTACK_KEYS = "+attack1"; + ATTACK_PRIORITY = 0; + ATTACK_DURATION = 1.3; + ATTACK_LAND_DELAY = 0.3; + ATTACK_EVENT = "swingside"; + ATTACK_LAND_EVENT = "swingside_land"; + ATTACK_DONE_EVENT = 0; + ATTACK_RANGE = 70; + ATTACK_DAMAGE = SWING_DAMAGE; + ATTACK_DAMAGE_RANGE = SWING_DAMAGE_RANGE; + ATTACK_ENERGY = SWING_ENERGY; + ATTACK_ACCURACYSTAT = "swordsmanship"; + ATTACK_ACCURACYDEFAULT = SWING_ACCURACY; + ATTACK_ALIGN_BASE = -20; + ATTACK_ALIGN_TIP = 20; + RegisterAttack(); + } + + void swingside() + { + PlayViewAnim(ANIM_ATTACK1); + PlayOwnerAnim("once", "longsword_swipe"); + SetVolume(10); + // PlayRandomSound from: SOUND_SWIPE + array sounds = {SOUND_SWIPE}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + CallOwnerEvent("commenceattack"); + } + + void swingside_land() + { + CallOwnerEvent("attackstrike"); + } + + void registerattack_parryside() + { + ATTACK_TYPE = "strike-hold"; + ATTACK_DAMAGE_TYPE = "slash"; + ATTACK_PRIORITY = 0; + ATTACK_LAND_DELAY = 0; + ATTACK_EVENT = "parryside"; + ATTACK_LAND_EVENT = "parryside_block"; + ATTACK_DONE_EVENT = "parryside_retract"; + ATTACK_RANGE = 20; + ATTACK_ENERGY = 0.5; + ATTACK_ACCURACYSTAT = "parry"; + ATTACK_ACCURACYDEFAULT = 0.65; + RegisterAttack(); + } + + void parryside_retract() + { + PlayViewAnim(ANIM_PARRY1_RETRACT); + PlayOwnerAnim("break"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_msword.as b/scripts/angelscript/items/swords_msword.as new file mode 100644 index 00000000..310abd96 --- /dev/null +++ b/scripts/angelscript/items/swords_msword.as @@ -0,0 +1,205 @@ +#pragma context server + +#include "items/base_weapon.as" + +namespace MS +{ + +class SwordsMsword : CGameScript +{ + int ACCURACY_NORMAL; + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + string ATTACK_ACCURACYDEFAULT; + string ATTACK_ACCURACYSTAT; + int ATTACK_ALIGN_BASE; + int ATTACK_ALIGN_TIP; + string ATTACK_DAMAGE; + string ATTACK_DAMAGE_RANGE; + string ATTACK_DAMAGE_TYPE; + string ATTACK_DONE_EVENT; + string ATTACK_DURATION; + string ATTACK_ENERGY; + string ATTACK_EVENT; + string ATTACK_KEYS; + float ATTACK_LAND_DELAY; + string ATTACK_LAND_EVENT; + int ATTACK_PRIORITY; + string ATTACK_RANGE; + string ATTACK_TYPE; + int BASE_LEVEL_REQ; + string ITEM_NAME; + string MODEL_BLOCK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_SWIPE; + int SWING_DAMAGE; + int SWING_DAMAGE_RANGE; + int SWING_DELAY; + float SWING_ENERGY; + int SWING_RANGE; + + SwordsMsword() + { + BASE_LEVEL_REQ = 15; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "weapons/swords/shortsword_rview.mdl"; + MODEL_HANDS = "weapons/swords/p_swords.mdl"; + MODEL_WORLD = "weapons/swords/p_swords.mdl"; + MODEL_BLOCK = "armor/shields/p_shields.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SWING_DELAY = 1; + SWING_ENERGY = 0.4; + SWING_RANGE = 60; + ACCURACY_NORMAL = 80; + SWING_DAMAGE = 290; + SWING_DAMAGE_RANGE = 160; + ITEM_NAME = "shortsword"; + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "shortsword"; + } + + void weapon_spawn() + { + SetName("Mithril Shortsword"); + SetDescription("A heavy mithril shortsword"); + SetWeight(80); + SetSize(7); + SetValue(800); + SetWorldModel(MODEL_WORLD); + SetPlayerModel(MODEL_HANDS); + SetViewModel(MODEL_VIEW); + SetHand("right"); + SetHUDSprite("hand", "sword"); + SetHUDSprite("trade", ITEM_NAME); + registerattack_swing1(); + registerattack_swing2(); + registerattack_swing3(); + registerattack_parryside(); + } + + void registerattack_swing1() + { + ATTACK_TYPE = "strike-land"; + ATTACK_DAMAGE_TYPE = "slash"; + ATTACK_KEYS = "+attack1"; + ATTACK_PRIORITY = 1; + ATTACK_DURATION = SWING_DELAY; + ATTACK_LAND_DELAY = 0.6; + ATTACK_EVENT = "swing1"; + ATTACK_LAND_EVENT = "swing_land"; + ATTACK_RANGE = SWING_RANGE; + ATTACK_DAMAGE = SWING_DAMAGE; + ATTACK_DAMAGE_RANGE = SWING_DAMAGE_RANGE; + ATTACK_ENERGY = SWING_ENERGY; + ATTACK_ACCURACYSTAT = "swordsmanship"; + ATTACK_ACCURACYDEFAULT = ACCURACY_NORMAL; + ATTACK_ALIGN_BASE = 4; + ATTACK_ALIGN_TIP = 0; + RegisterAttack(); + } + + void registerattack_swing2() + { + ATTACK_TYPE = "strike-land"; + ATTACK_DAMAGE_TYPE = "slash"; + ATTACK_KEYS = "+attack1"; + ATTACK_PRIORITY = 1; + ATTACK_DURATION = SWING_DELAY; + ATTACK_LAND_DELAY = 0.6; + ATTACK_EVENT = "swing1"; + ATTACK_LAND_EVENT = "swing_land"; + ATTACK_RANGE = SWING_RANGE; + ATTACK_DAMAGE = SWING_DAMAGE; + ATTACK_DAMAGE_RANGE = SWING_DAMAGE_RANGE; + ATTACK_ENERGY = SWING_ENERGY; + ATTACK_ACCURACYSTAT = "swordsmanship"; + ATTACK_ACCURACYDEFAULT = ACCURACY_NORMAL; + ATTACK_ALIGN_BASE = 4; + ATTACK_ALIGN_TIP = 0; + RegisterAttack(); + } + + void registerattack_swing3() + { + ATTACK_TYPE = "strike-land"; + ATTACK_DAMAGE_TYPE = "slash"; + ATTACK_KEYS = "+attack1"; + ATTACK_PRIORITY = 1; + ATTACK_DURATION = SWING_DELAY; + ATTACK_LAND_DELAY = 0.6; + ATTACK_EVENT = "swing1"; + ATTACK_LAND_EVENT = "swing_land"; + ATTACK_RANGE = SWING_RANGE; + ATTACK_DAMAGE = SWING_DAMAGE; + ATTACK_DAMAGE_RANGE = SWING_DAMAGE_RANGE; + ATTACK_ENERGY = SWING_ENERGY; + ATTACK_ACCURACYSTAT = "swordsmanship"; + ATTACK_ACCURACYDEFAULT = ACCURACY_NORMAL; + ATTACK_ALIGN_BASE = 4; + ATTACK_ALIGN_TIP = 0; + RegisterAttack(); + } + + void swing1() + { + PlayViewAnim(ANIM_ATTACK1); + swing(); + } + + void swing2() + { + PlayViewAnim(ANIM_ATTACK2); + swing(); + } + + void swing3() + { + PlayViewAnim(ANIM_ATTACK3); + swing(); + } + + void swing() + { + PlayOwnerAnim("once", "swordswing1"); + SetVolume(10); + EmitSound(GetOwner(), SOUND_SWIPE); + CallOwnerEvent("commenceattack"); + } + + void swing_land() + { + CallOwnerEvent("attackstrike"); + } + + void registerattack_parryside() + { + ATTACK_TYPE = "strike-hold"; + ATTACK_DAMAGE_TYPE = "slash"; + ATTACK_PRIORITY = 0; + ATTACK_LAND_DELAY = 0; + ATTACK_EVENT = "parryside"; + ATTACK_LAND_EVENT = "parryside_block"; + ATTACK_DONE_EVENT = "parryside_retract"; + ATTACK_RANGE = 20; + ATTACK_ENERGY = 0.5; + ATTACK_ACCURACYSTAT = "parry"; + ATTACK_ACCURACYDEFAULT = 0.45; + RegisterAttack(); + } + +} + +} diff --git a/scripts/angelscript/items/swords_nkatana.as b/scripts/angelscript/items/swords_nkatana.as new file mode 100644 index 00000000..113df14d --- /dev/null +++ b/scripts/angelscript/items/swords_nkatana.as @@ -0,0 +1,87 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsNkatana : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SHOUT; + string SOUND_SWIPE; + + SwordsNkatana() + { + BASE_LEVEL_REQ = 6; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_1hswords.mdl"; + MODEL_VIEW_IDX = 3; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 12; + ANIM_PREFIX = "shortsword"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 0.9; + MELEE_ENERGY = 0.6; + MELEE_DMG = 130; + MELEE_DMG_RANGE = 10; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.15; + } + + void weapon_spawn() + { + SetName("Folded Steel Blade"); + SetDescription("This blade of folded steel provides superior balance"); + SetWeight(30); + SetSize(5); + SetValue(45); + SetHUDSprite("trade", 34); + } + +} + +} diff --git a/scripts/angelscript/items/swords_novablade12.as b/scripts/angelscript/items/swords_novablade12.as new file mode 100644 index 00000000..5a9e7530 --- /dev/null +++ b/scripts/angelscript/items/swords_novablade12.as @@ -0,0 +1,323 @@ +#pragma context server + +#include "items/swords_base_twohanded.as" + +namespace MS +{ + +class SwordsNovablade12 : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_LUNGE; + int ANIM_PARRY1; + int ANIM_PARRY1_RETRACT; + int ANIM_PARRY_DEBUG; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_UNPARRY_DEBUG; + int ANIM_UNSHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_NEW_PARRY_CHANCE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int PARRY_ON; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_CHARGE; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_PARRY; + string SOUND_SHOOT; + string SOUND_SHOUT; + string SOUND_SWIPE; + string SPECIAL01_SND; + string SWING_ANIM; + int SWORD_MANUAL_PARRY; + int VOLCANO_ON; + + SwordsNovablade12() + { + SOUND_CHARGE = "magic/fireball_powerup.wav"; + SOUND_SHOOT = "magic/fireball_strike.wav"; + SPECIAL01_SND = GetEntityProperty(GetOwner(), "scriptvar"); + SOUND_PARRY = "weapons/parry.wav"; + SWORD_MANUAL_PARRY = 1; + ANIM_LIFT = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 2; + ANIM_ATTACK3 = 2; + ATTACK_ANIMS = 1; + ANIM_LUNGE = 3; + ANIM_PARRY1 = 4; + ANIM_PARRY1_RETRACT = 5; + ANIM_UNSHEATH = 6; + ANIM_SHEATH = 7; + ANIM_PARRY_DEBUG = 4; + ANIM_UNPARRY_DEBUG = 5; + MODEL_VIEW = "viewmodels/v_2hswords.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + BASE_LEVEL_REQ = 15; + MODEL_BODY_OFS = 104; + ANIM_PREFIX = "khopesh"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.3; + MELEE_ENERGY = 1; + MELEE_DMG = 200; + MELEE_DMG_RANGE = 140; + MELEE_DMG_TYPE = "fire"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 3; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.6; + MELEE_NEW_PARRY_CHANCE = 50; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "sword_double_swing"; + Precache("magic/spookie1.wav"); + } + + void weapon_spawn() + { + SetName("Novablade"); + SetDescription("This is a twisted blade of elemental fire"); + SetWeight(75); + SetSize(9); + SetValue(3750); + SetHUDSprite("trade", 115); + register_charge2(); + register_charge3(); + SetHand("both"); + } + + void melee_start() + { + int SWING = RandomInt(1, 3); + if (SWING == 1) + { + SWING_ANIM = ANIM_ATTACK1; + } + if (SWING == 2) + { + SWING_ANIM = ANIM_ATTACK2; + } + if (SWING == 3) + { + SWING_ANIM = ANIM_ATTACK3; + } + PlayOwnerAnim("once", "sword_double_swing"); + PlayViewAnim(SWING_ANIM); + SetVolume(10); + EmitSound(GetOwner(), SOUND_SWIPE); + } + + void special_01_start() + { + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void special_01_strike() + { + EmitSound(GetOwner(), 0, "ambience/steamburst1.wav", 10); + if (!(GetRelationship(param3) == "enemy")) return; + if ("game.pvp" == 0) + { + if ((IsValidPlayer(param3))) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + string DMG_FIRE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + ApplyEffect(param3, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_FIRE, "swordsmanship"); + } + + void blockmode_start() + { + PlayViewAnim(ANIM_PARRY1); + PlayOwnerAnim("once", "sword_swing"); + PARRY_ON = 1; + } + + void blockmode_end() + { + PlayViewAnim(ANIM_PARRY1_RETRACT); + PARRY_ON = 0; + } + + void register_charge1() + { + string reg.attack.type = "strike-land"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = "spellcasting.fire"; + string reg.attack.hitchance = MELEE_ACCURACY; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 1; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "special_01"; + reg.attack.dmg *= 2; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 10; + RegisterAttack(); + } + + void register_charge2() + { + string reg.attack.type = "strike-land"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = "spellcasting.fire"; + string reg.attack.hitchance = MELEE_ACCURACY; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.priority = 2.5; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "special_02"; + reg.attack.dmg *= 3; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 20; + RegisterAttack(); + } + + void register_charge3() + { + string reg.attack.type = "strike-land"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = MELEE_DMG; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = "spellcasting.fire"; + string reg.attack.hitchance = MELEE_ACCURACY; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "melee"; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 3; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "special_03"; + reg.attack.dmg *= 3; + float reg.attack.chargeamt = 3.0; + int reg.attack.reqskill = 30; + RegisterAttack(); + } + + void special_02_start() + { + EmitSound(GetOwner(), 0, SOUND_CHARGE, 10); + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void special_02_strike() + { + if (GetEntityMP(GetOwner()) < 100) + { + SendPlayerMessage("Novablade:", "Flaming Skull - insufficient mana!"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(-100); + CallExternal(GetOwner(), "mana_drain"); + EmitSound(GetOwner(), 0, SOUND_SHOOT, 10); + string DMG_FIRE = GetSkillLevel(GetOwner(), "spellcasting.fire"); + DMG_FIRE *= 0.4; + SpawnNPC("monsters/summon/flame_skull", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_FIRE, 256, "spellcasting.fire" + } + + void special_03_start() + { + EmitSound(GetOwner(), 0, SOUND_CHARGE, 10); + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void special_03_strike() + { + if (GetEntityMP(GetOwner()) < 100) + { + SendPlayerMessage("Novablade:", "Volcano - insufficient mana!"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((VOLCANO_ON)) + { + SendPlayerMessage("Novablade", "can only generate one volcano at a time"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + VOLCANO_ON = 1; + ScheduleDelayedEvent(30.0, "volcano_reset"); + GiveMP(-100); + CallExternal(GetOwner(), "mana_drain"); + string pos = GetEntityOrigin(GetOwner()); + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + SpawnNPC("monsters/summon/preset_volcano", pos, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 0, 20, "spellcasting.fire" + } + + void volcano_reset() + { + VOLCANO_ON = 0; + } + +} + +} diff --git a/scripts/angelscript/items/swords_poison1.as b/scripts/angelscript/items/swords_poison1.as new file mode 100644 index 00000000..bb7783a5 --- /dev/null +++ b/scripts/angelscript/items/swords_poison1.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "items/swords_shortsword.as" + +namespace MS +{ + +class SwordsPoison1 : CGameScript +{ + int BASE_LEVEL_REQ; + + SwordsPoison1() + { + BASE_LEVEL_REQ = 6; + } + + void game_dodamage() + { + if (!(param1)) return; + int random = RandomInt(1, 100); + if (!(random > 50)) return; + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", RandomInt(3, 6), GetEntityIndex(GetOwner()), Random(1.5, 2.5), "swordsmanship"); + } + + void weapon_spawn() + { + SetName("Envenomed Shortsword"); + SetDescription("This shortsword is laced with vile poison that oozes along the blade."); + SetWeight(30); + SetSize(7); + SetValue(500); + SetHUDSprite("trade", "shortsword"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_rsword.as b/scripts/angelscript/items/swords_rsword.as new file mode 100644 index 00000000..40ff3d76 --- /dev/null +++ b/scripts/angelscript/items/swords_rsword.as @@ -0,0 +1,90 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsRsword : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_IDLE_DELAY_HIGH; + int ANIM_IDLE_DELAY_LOW; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SWIPE; + + SwordsRsword() + { + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_IDLE_DELAY_LOW = 1; + ANIM_IDLE_DELAY_HIGH = 3; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_1hswords.mdl"; + MODEL_VIEW_IDX = 1; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + MODEL_BODY_OFS = 24; + ANIM_PREFIX = "shortsword"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.3; + MELEE_DMG = 90; + MELEE_DMG_RANGE = 50; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.15; + } + + void weapon_spawn() + { + SetName("Rusty Short Sword"); + SetDescription("The rusted metal is light and easy to swing , but lessens the impact"); + SetWeight(10); + SetSize(5); + SetValue(3); + SetHUDSprite("hand", "sword"); + SetHUDSprite("trade", 168); + } + +} + +} diff --git a/scripts/angelscript/items/swords_rune_green.as b/scripts/angelscript/items/swords_rune_green.as new file mode 100644 index 00000000..644e2d44 --- /dev/null +++ b/scripts/angelscript/items/swords_rune_green.as @@ -0,0 +1,221 @@ +#pragma context server + +#include "items/base_elemental_resist.as" +#include "items/swords_base_onehanded.as" +#include "items/base_varied_attacks.as" + +namespace MS +{ + +class SwordsRuneGreen : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_ATTACK5; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + int ELM_AMT; + string ELM_NAME; + string ELM_TYPE; + int ELM_WEAPON; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_CHARGE; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOOT; + string SOUND_SHOUT; + string SOUND_SPAWN_CLOUD; + string SOUND_SWIPE; + string SWING_ANIM; + + SwordsRuneGreen() + { + ELM_NAME = "possw"; + ELM_TYPE = "poison"; + ELM_AMT = 50; + ELM_WEAPON = 1; + SOUND_CHARGE = "bullchicken/bc_attack1.wav"; + SOUND_SHOOT = "bullchicken/bc_attack3.wav"; + SOUND_SPAWN_CLOUD = "ambience/steamburst1.wav"; + BASE_LEVEL_REQ = 15; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_ATTACK4 = 5; + ANIM_ATTACK5 = 6; + ANIM_SHEATH = 7; + ATTACK_ANIMS = 4; + MODEL_VIEW = "viewmodels/v_1hswordssb.mdl"; + MODEL_VIEW_IDX = 4; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "bullchicken/bc_acid1.wav"; + SOUND_HITWALL2 = "bullchicken/bc_acid2.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 108; + ANIM_PREFIX = "dagger"; + MELEE_RANGE = 64; + MELEE_DMG_DELAY = 0.4; + MELEE_ATK_DURATION = 0.8; + MELEE_ENERGY = 1; + MELEE_DMG = 150; + MELEE_DMG_RANGE = 70; + MELEE_DMG_TYPE = "acid"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Rune Blade of Affliction"); + SetDescription("A blade of vile magics"); + SetWeight(35); + SetSize(5); + SetValue(3500); + SetHUDSprite("trade", 116); + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.hold_min&max = "2;2"; + string reg.attack.dmg.type = "acid"; + int reg.attack.range = 600; + int reg.attack.COF = 0; + string reg.attack.stat = "spellcasting.affliction"; + string reg.attack.keys = "-attack1"; + int reg.attack.noise = 1000; + int reg.attack.energydrain = 5; + int reg.attack.noautoaim = 0; + string reg.attack.projectile = "proj_acid_bolt"; + int reg.attack.priority = 2; + int reg.attack.delay.strike = 0; + int reg.attack.delay.end = 0; + Vector3 reg.attack.ofs.startpos = Vector3(5, 10, -5); + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + int reg.attack.ammodrain = 0; + string reg.attack.callback = "bolt"; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 5; + RegisterAttack(); + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + int reg.attack.range = 800; + int reg.attack.dmg = 1; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = "poison"; + string reg.attack.energydrain = MELEE_ENERGY; + reg.attack.energydrain *= 2; + string reg.attack.stat = "spellcasting.affliction"; + float reg.attack.hitchance = 1.0; + int reg.attack.priority = 3; + float reg.attack.delay.strike = 1.5; + float reg.attack.delay.end = 2.0; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.callback = "cloudon"; + int reg.attack.noise = 1000; + float reg.attack.chargeamt = 3.0; + int reg.attack.reqskill = 20; + RegisterAttack(); + } + + void cloudon_start() + { + PlayViewAnim(ANIM_ATTACK4); + EmitSound(GetOwner(), 0, SOUND_CHARGE, 10); + ScheduleDelayedEvent(0.5, "cloud_spawn"); + } + + void cloud_spawn() + { + EmitSound(GetOwner(), 0, SOUND_SPAWN_CLOUD, 10); + string MY_OWNER = GetEntityIndex(GetOwner()); + string EFFECT_DMG = GetSkillLevel(MY_OWNER, "spellcasting.affliction"); + string EFFECT_DURATION = GetStat(MY_OWNER, "concentration"); + EFFECT_DURATION /= 2; + EFFECT_DURATION += EFFECT_DMG; + string OWNER_TARGET = GetEntityProperty(GetOwner(), "target"); + if ((IsEntityAlive(OWNER_TARGET))) + { + string TARGET_POS = GetEntityOrigin(OWNER_TARGET); + } + if (!(IsEntityAlive(OWNER_TARGET))) + { + string TARGET_POS = GetEntityOrigin(MY_OWNER); + } + if ((IsValidPlayer(OWNER_TARGET))) + { + TARGET_POS += "z"; + } + SpawnNPC("monsters/summon/poison_cloud2", TARGET_POS, ScriptMode::Legacy); // params: MY_OWNER, 180, EFFECT_DMG, EFFECT_DURATION, "spellcasting.affliction" + } + + void bolt_start() + { + PlayViewAnim(ANIM_ATTACK4); + EmitSound(GetOwner(), 0, SOUND_CHARGE, 10); + ScheduleDelayedEvent(1.2, "fire_bolt"); + } + + void fire_bolt() + { + PlayViewAnim(ANIM_ATTACK5); + PlayOwnerAnim("once", PLAYERANIM_SWING); + ScheduleDelayedEvent(0.5, "fire_sound"); + } + + void fire_sound() + { + EmitSound(GetOwner(), 0, SOUND_SHOOT, 10); + } + + void OnDeploy() override + { + if (!(true)) return; + ScheduleDelayedEvent(0.1, "elm_activate_effect"); + } + + void melee_start() + { + EmitSound(GetOwner(), 1, SOUND_SWIPE, 10); + if (!(true)) return; + PlayOwnerAnim("once", "sword_swing"); + check_attack_anim(); + SWING_ANIM = CUR_ATTACK_ANIM; + // TODO: splayviewanim ent_me SWING_ANIM + } + +} + +} diff --git a/scripts/angelscript/items/swords_scimitar.as b/scripts/angelscript/items/swords_scimitar.as new file mode 100644 index 00000000..0393c8aa --- /dev/null +++ b/scripts/angelscript/items/swords_scimitar.as @@ -0,0 +1,89 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsScimitar : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + string MODEL_BLOCK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SHOUT; + string SOUND_SWIPE; + + SwordsScimitar() + { + BASE_LEVEL_REQ = 6; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_1hswords.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons2.mdl"; + MODEL_WORLD = "weapons/p_weapons2.mdl"; + MODEL_BLOCK = "none"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 8; + ANIM_PREFIX = "machete"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.6; + MELEE_DMG = 130; + MELEE_DMG_RANGE = 70; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.15; + } + + void weapon_spawn() + { + SetName("Scimitar"); + SetDescription("A heavy one-handed Scimitar"); + SetWeight(30); + SetSize(5); + SetValue(45); + SetHUDSprite("trade", "machete"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_sf.as b/scripts/angelscript/items/swords_sf.as new file mode 100644 index 00000000..6d64bd1e --- /dev/null +++ b/scripts/angelscript/items/swords_sf.as @@ -0,0 +1,478 @@ +#pragma context server + +#include "items/swords_base_twohanded.as" + +namespace MS +{ + +class SwordsSf : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_LUNGE; + int ANIM_PARRY1; + int ANIM_PARRY1_RETRACT; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_UNSHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + string BURST_DOT_BURN; + string BURST_POS; + string FAURA_ACTIVE; + string FAURA_RAD; + string FIRE_AURA_BEGIN; + int FIRE_BURST_MP; + string FIRE_BURST_TARGS; + int FIRE_WAVE_MP; + string FIRE_WAVE_START_POS; + string FIRE_WAVE_TARGS; + string FIRE_WAVE_YAW; + string GAME_PVP; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_NEW_PARRY_CHANCE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string NEXT_PARRY; + string OWNER_ANG; + string OWNER_FIRESKILL; + string OWNER_ORG; + string OWNER_SWORDSKILL; + string PARRY_ON; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + string SPECIAL01_SND; + string WAVE_DOT_BURN; + + SwordsSf() + { + BASE_LEVEL_REQ = 25; + FIRE_WAVE_MP = 20; + FIRE_BURST_MP = 30; + ANIM_LIFT = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 2; + ANIM_ATTACK3 = 2; + ATTACK_ANIMS = 1; + ANIM_LUNGE = 3; + ANIM_PARRY1 = 4; + ANIM_PARRY1_RETRACT = 5; + ANIM_UNSHEATH = 6; + ANIM_SHEATH = 7; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_VIEW = "viewmodels/v_2hswords.mdl"; + MODEL_VIEW_IDX = 11; + MODEL_BODY_OFS = 84; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.3; + MELEE_ENERGY = 1; + MELEE_DMG = 275; + MELEE_DMG_RANGE = 140; + MELEE_DMG_TYPE = "dark"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 3; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.6; + MELEE_NEW_PARRY_CHANCE = 50; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "sword_double_swing"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + SPECIAL01_SND = GetEntityProperty(GetOwner(), "scriptvar"); + } + + void weapon_spawn() + { + SetName("Shadowfire Blade"); + SetDescription("This is a twisted blade of elemental fire"); + SetWeight(75); + SetSize(9); + SetValue(3750); + SetHUDSprite("trade", 167); + SetHand("both"); + } + + void OnDeploy() override + { + GAME_PVP = "game.pvp"; + OWNER_SWORDSKILL = GetSkillLevel(GetOwner(), "swordsmanship"); + OWNER_FIRESKILL = GetSkillLevel(GetOwner(), "spellcasting.fire"); + } + + void register_charge1() + { + string reg.attack.type = "strike-land"; + string reg.attack.range = MELEE_RANGE; + reg.attack.range *= 3.0; + int reg.attack.noautoaim = 1; + string reg.attack.dmg = MELEE_DMG; + reg.attack.dmg *= 4.0; + string reg.attack.dmg.range = MELEE_DMG_RANGE; + string reg.attack.dmg.type = MELEE_DMG_TYPE; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + string reg.attack.hitchance = MELEE_ACCURACY; + float reg.attack.delay.strike = 1.4; + float reg.attack.delay.end = 2.0; + string reg.attack.ofs.startpos = MELEE_STARTPOS; + string reg.attack.ofs.aimang = MELEE_AIMANGLE; + string reg.attack.noise = MELEE_NOISE; + int reg.attack.priority = 2; + string reg.attack.keys = "-attack1"; + string reg.attack.callback = "fire_wave"; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 34; + RegisterAttack(); + } + + void melee_start() + { + if ((PARRY_ON)) + { + exit_parry("melee_start"); + } + int R_SWING = RandomInt(1, 3); + if (R_SWING == 1) + { + string SWING_ANIM = ANIM_ATTACK1; + } + if (R_SWING == 2) + { + string SWING_ANIM = ANIM_ATTACK2; + } + if (R_SWING == 3) + { + string SWING_ANIM = ANIM_ATTACK3; + } + PlayOwnerAnim("once", "sword_double_swing"); + PlayViewAnim(SWING_ANIM); + EmitSound(GetOwner(), 1, SOUND_SWIPE, 10); + } + + void special_01_start() + { + if ((PARRY_ON)) + { + exit_parry("special_01_start"); + } + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void fire_wave_start() + { + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + EmitSound(GetOwner(), "const.snd.weapon", SOUND_SHOUT, "const.snd.maxvol"); + } + + void game_dodamage() + { + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.fire"); + DOT_BURN *= 0.75; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_BURN, "swordsmanship"); + } + + void fire_wave_strike() + { + if (!(true)) return; + string ATTACK_END_POS = param2; + if (!((ATTACK_END_POS).z == /* TODO: $get_ground_height */ $get_ground_height(ATTACK_END_POS))) return; + if (!(GetSkillLevel(GetOwner(), "spellcasting.fire") >= 25)) return; + if (GetEntityMP(GetOwner()) < FIRE_WAVE_MP) + { + SendColoredMessage(GetOwner(), "Shadowfire Blade: Insufficient " + MP + " for Fire Wave"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + GiveMP(GetOwner()); + do_fire_wave(GetEntityOrigin(GetOwner())); + } + + void do_fire_wave() + { + EmitSound(GetOwner(), 0, "magic/flame_loop_start.wav", 7); + FIRE_WAVE_START_POS = param1; + FIRE_WAVE_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + ClientEvent("new", "all", "effects/sfx_fire_wave", FIRE_WAVE_START_POS, FIRE_WAVE_YAW); + string FIRE_WAVE_SCAN_POS = FIRE_WAVE_START_POS; + FIRE_WAVE_SCAN_POS += /* TODO: $relpos */ $relpos(Vector3(0, FIRE_WAVE_YAW, 0), Vector3(0, 128, 32)); + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 1024, FIRE_WAVE_SCAN_POS); + FIRE_WAVE_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(FIRE_WAVE_TARGS != "none")) return; + WAVE_DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.fire"); + WAVE_DOT_BURN *= 1.5; + OWNER_ORG = FIRE_WAVE_START_POS; + OWNER_ANG = Vector3(0, FIRE_WAVE_YAW, 0); + for (int i = 0; i < GetTokenCount(FIRE_WAVE_TARGS, ";"); i++) + { + fire_wave_affect_targs(); + } + ScheduleDelayedEvent(1.0, "do_fire_wave2"); + } + + void do_fire_wave2() + { + string FIRE_WAVE_SCAN_POS = FIRE_WAVE_START_POS; + FIRE_WAVE_SCAN_POS += /* TODO: $relpos */ $relpos(Vector3(0, FIRE_WAVE_YAW, 0), Vector3(0, 128, 32)); + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 1024, FIRE_WAVE_SCAN_POS); + FIRE_WAVE_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(FIRE_WAVE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(FIRE_WAVE_TARGS, ";"); i++) + { + fire_wave_affect_targs(); + } + } + + void fire_wave_affect_targs() + { + string CUR_TARG = GetToken(FIRE_WAVE_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + LogDebug("fire_wave_affect_targs WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG) GetEntityName(CUR_TARG)"); + if (!(WithinCone2D(TARG_ORG, OWNER_ORG, OWNER_ANG))) return; + string TRACE_START = FIRE_WAVE_START_POS; + string TRACE_END = TARG_ORG; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), WAVE_DOT_BURN, "swordsmanship"); + } + + void game_+attack2() + { + if (!(true)) return; + if (("game.item.attacking")) return; + if (!(CanAttack(GetOwner()))) return; + if (!(PARRY_ON)) + { + if (GetGameTime() > NEXT_PARRY) + { + } + // TODO: splayviewanim ent_me ANIM_PARRY1 + FIRE_AURA_BEGIN = GetGameTime(); + FIRE_AURA_BEGIN += 2.0; + PARRY_ON = 1; + NEXT_PARRY = GetGameTime(); + NEXT_PARRY += 1.0; + } + if ((PARRY_ON)) + { + if (!(FAURA_ACTIVE)) + { + } + if (OWNER_FIRESKILL >= 30) + { + } + if (GetGameTime() > FIRE_AURA_BEGIN) + { + } + FAURA_RAD = 64; + FAURA_ACTIVE = 1; + if (GetEntityMP(GetOwner()) <= 10) + { + SendColoredMessage(GetOwner(), "Shadowfire Blade: Insufficient mana for Shadowfire Aura"); + FIRE_AURA_BEGIN = GetGameTime(); + FIRE_AURA_BEGIN += 5.0; + int EXIT_SUB = 1; + if ((FAURA_ACTIVE)) + { + end_faura(); + } + } + if (!(EXIT_SUB)) + { + } + FAURA_ACTIVE = 1; + CallExternal(GetOwner(), "ext_sfaura_start", GetEntityIndex(GetOwner())); + } + } + + void game__attack2() + { + if ((PARRY_ON)) + { + exit_parry(); + } + } + + void bweapon_effect_remove() + { + if ((FAURA_ACTIVE)) + { + end_faura(); + } + PARRY_ON = 0; + } + + void exit_parry() + { + NEXT_PARRY = GetGameTime(); + NEXT_PARRY += 1.0; + PARRY_ON = 0; + if ((FAURA_ACTIVE)) + { + end_faura(); + } + if (!("game.item.attacking")) + { + // TODO: splayviewanim ent_me ANIM_PARRY1_RETRACT + } + } + + void bs_global_command() + { + if (!(param3 == "death")) return; + if (!(param1 == GetEntityIndex(GetOwner()))) return; + if ((FAURA_ACTIVE)) + { + end_faura(); + } + } + + void end_faura() + { + FAURA_ACTIVE = 0; + CallExternal(GetOwner(), "ext_sfaura_end", "remote"); + } + + void ext_faura_ended() + { + FAURA_ACTIVE = 0; + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + if ((PARRY_ON)) + { + if ((param4).findFirst("effect") >= 0) + { + int NO_ABSORB = 1; + } + if (!(NO_ABSORB)) + { + } + string IN_DMG = param3; + IN_DMG *= 0.5; + SetDamage("dmg"); + return; + } + if (!((param4).findFirst("fire") >= 0)) return; + string IN_DMG = param3; + IN_DMG *= 0.5; + SetDamage("dmg"); + return; + } + + void special_01_strike() + { + if (GetEntityMP(GetOwner()) < FIRE_BURST_MP) + { + SendColoredMessage("Shadowfire", "Blade: Insufficient Mana for Flame Burst"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetSkillLevel(GetOwner(), "spellcasting.fire") >= 25)) return; + BURST_POS = GetEntityOrigin(GetOwner()); + BURST_POS = "z"; + ClientEvent("new", "all", "effects/sfx_fire_burst", BURST_POS, 256, 1, Vector3(255, 128, 0)); + CallExternal(GetOwner(), "ext_sphere_token", "enemy", 512, BURST_POS); + FIRE_BURST_TARGS = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(FIRE_BURST_TARGS != "none")) return; + BURST_DOT_BURN = GetSkillLevel(GetOwner(), "spellcasting.fire"); + BURST_DOT_BURN *= 0.75; + for (int i = 0; i < GetTokenCount(FIRE_BURST_TARGS, ";"); i++) + { + fire_burst_affect_targs(); + } + } + + void fire_burst_affect_targs() + { + string CUR_TARG = GetToken(FIRE_BURST_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TRACE_START = BURST_POS; + string TRACE_END = TARG_ORG; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 800, 0))); + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), BURST_DOT_BURN, "swordsmanship"); + } + + void ext_player_sit() + { + LogDebug("ext_player_sit"); + if ((FAURA_ACTIVE)) + { + end_faura(); + } + } + +} + +} diff --git a/scripts/angelscript/items/swords_shortsword.as b/scripts/angelscript/items/swords_shortsword.as new file mode 100644 index 00000000..d64e41f7 --- /dev/null +++ b/scripts/angelscript/items/swords_shortsword.as @@ -0,0 +1,87 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsShortsword : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SHOUT; + string SOUND_SWIPE; + + SwordsShortsword() + { + BASE_LEVEL_REQ = 3; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_1hswords.mdl"; + MODEL_VIEW_IDX = 0; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "shortsword"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.4; + MELEE_DMG = 110; + MELEE_DMG_RANGE = 60; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.15; + } + + void weapon_spawn() + { + SetName("Short Sword"); + SetDescription("A short one-handed Sword"); + SetWeight(30); + SetSize(5); + SetValue(15); + SetHUDSprite("trade", "shortsword"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_skullblade.as b/scripts/angelscript/items/swords_skullblade.as new file mode 100644 index 00000000..4281ec1d --- /dev/null +++ b/scripts/angelscript/items/swords_skullblade.as @@ -0,0 +1,109 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" +#include "items/base_varied_attacks.as" + +namespace MS +{ + +class SwordsSkullblade : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_ATTACK4; + int ANIM_ATTACK5; + int ANIM_IDLE1; + int ANIM_IDLE_DELAY_HIGH; + int ANIM_IDLE_DELAY_LOW; + int ANIM_IDLE_TOTAL; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SHOUT; + string SOUND_SWIPE; + string SWING_ANIM; + + SwordsSkullblade() + { + BASE_LEVEL_REQ = 6; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_IDLE_TOTAL = 1; + ANIM_IDLE_DELAY_LOW = 1; + ANIM_IDLE_DELAY_HIGH = 3; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_ATTACK4 = 5; + ANIM_ATTACK5 = 6; + ANIM_SHEATH = 7; + MODEL_VIEW = "viewmodels/v_1hswordssb.mdl"; + MODEL_VIEW_IDX = 0; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 32; + ANIM_PREFIX = "skullblade"; + MELEE_RANGE = 64; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.5; + MELEE_ENERGY = 2; + MELEE_DMG = 200; + MELEE_DMG_RANGE = 10; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.6; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Skullblade"); + SetDescription("This sword relies more on its weight than its sharp edge."); + SetWeight(80); + SetSize(7); + SetValue(200); + SetHUDSprite("trade", "skullblade"); + } + + void melee_start() + { + EmitSound(GetOwner(), 1, SOUND_SWIPE, 10); + if (!(true)) return; + PlayOwnerAnim("once", "sword_swing"); + check_attack_anim(); + SWING_ANIM = CUR_ATTACK_ANIM; + // TODO: splayviewanim ent_me SWING_ANIM + } + +} + +} diff --git a/scripts/angelscript/items/swords_skullblade2.as b/scripts/angelscript/items/swords_skullblade2.as new file mode 100644 index 00000000..db259a21 --- /dev/null +++ b/scripts/angelscript/items/swords_skullblade2.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "items/swords_skullblade.as" + +namespace MS +{ + +class SwordsSkullblade2 : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + + SwordsSkullblade2() + { + BASE_LEVEL_REQ = 6; + MELEE_ENERGY = 2; + MELEE_DMG = 100; + MELEE_DMG_RANGE = 10; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.5; + } + + void weapon_spawn() + { + SetName("Dull Skullblade"); + SetDescription("This heavy broad sword has seen one too many battles."); + SetWeight(80); + SetValue(100); + } + +} + +} diff --git a/scripts/angelscript/items/swords_skullblade3.as b/scripts/angelscript/items/swords_skullblade3.as new file mode 100644 index 00000000..fe601ea1 --- /dev/null +++ b/scripts/angelscript/items/swords_skullblade3.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/swords_skullblade.as" + +namespace MS +{ + +class SwordsSkullblade3 : CGameScript +{ + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_ENERGY; + + SwordsSkullblade3() + { + MELEE_ENERGY = 2; + MELEE_DMG = 225; + MELEE_DMG_RANGE = 10; + MELEE_ACCURACY = 0.55; + } + + void weapon_spawn() + { + SetName("Sharp Skullblade"); + SetDescription("This sword relies more on its weight than its sharp edge."); + SetValue(330); + } + +} + +} diff --git a/scripts/angelscript/items/swords_skullblade4.as b/scripts/angelscript/items/swords_skullblade4.as new file mode 100644 index 00000000..2aad717b --- /dev/null +++ b/scripts/angelscript/items/swords_skullblade4.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "items/swords_skullblade.as" + +namespace MS +{ + +class SwordsSkullblade4 : CGameScript +{ + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_DMG; + int MELEE_DMG_RANGE; + int MELEE_ENERGY; + + SwordsSkullblade4() + { + BASE_LEVEL_REQ = 10; + MELEE_ENERGY = 10; + MELEE_DMG = 350; + MELEE_DMG_RANGE = 10; + MELEE_ACCURACY = 0.65; + } + + void weapon_spawn() + { + SetName("Perfect Skullblade"); + SetDescription("This sword relies more on its weight than its sharp edge."); + SetWeight(80); + SetValue(610); + } + +} + +} diff --git a/scripts/angelscript/items/swords_spiderblade.as b/scripts/angelscript/items/swords_spiderblade.as new file mode 100644 index 00000000..619e799d --- /dev/null +++ b/scripts/angelscript/items/swords_spiderblade.as @@ -0,0 +1,182 @@ +#pragma context server + +#include "items/swords_base_twohanded.as" + +namespace MS +{ + +class SwordsSpiderblade : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_LUNGE; + int ANIM_PARRY1; + int ANIM_PARRY1_RETRACT; + int ANIM_PARRY_DEBUG; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_UNPARRY_DEBUG; + int ANIM_UNSHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_NEW_PARRY_CHANCE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int PARRY_ON; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_SHOUT; + string SOUND_SWIPE; + string SWING_ANIM; + int SWORD_MANUAL_PARRY; + + SwordsSpiderblade() + { + BASE_LEVEL_REQ = 15; + SWORD_MANUAL_PARRY = 1; + ANIM_LIFT = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 2; + ANIM_ATTACK3 = 2; + ATTACK_ANIMS = 1; + ANIM_LUNGE = 3; + ANIM_PARRY1 = 4; + ANIM_PARRY1_RETRACT = 5; + ANIM_UNSHEATH = 6; + ANIM_SHEATH = 7; + ANIM_PARRY_DEBUG = 4; + ANIM_UNPARRY_DEBUG = 5; + MODEL_VIEW = "viewmodels/v_2hswords.mdl"; + MODEL_VIEW_IDX = 2; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 36; + ANIM_PREFIX = "spiderblade"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.3; + MELEE_ENERGY = 1; + MELEE_DMG = 180; + MELEE_DMG_RANGE = 140; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 3; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.3; + MELEE_NEW_PARRY_CHANCE = 30; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "sword_double_swing"; + } + + void weapon_spawn() + { + SetName("Spiderblade"); + SetDescription("A magical blade designed to fend off spiders."); + SetWeight(25); + SetSize(9); + SetValue(500); + SetHUDSprite("trade", 92); + SetHand("both"); + } + + void melee_start() + { + int SWING = RandomInt(1, 3); + if (SWING == 1) + { + SWING_ANIM = ANIM_ATTACK1; + } + if (SWING == 2) + { + SWING_ANIM = ANIM_ATTACK2; + } + if (SWING == 3) + { + SWING_ANIM = ANIM_ATTACK3; + } + PlayOwnerAnim("once", "sword_double_swing"); + PlayViewAnim(SWING_ANIM); + SetVolume(10); + EmitSound(GetOwner(), SOUND_SWIPE); + } + + void special_01_start() + { + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void blockmode_start() + { + PlayViewAnim(ANIM_PARRY1); + PlayOwnerAnim("once", "sword_swing"); + PARRY_ON = 1; + } + + void blockmode_end() + { + PlayViewAnim(ANIM_PARRY1_RETRACT); + PARRY_ON = 0; + } + + void parryanim() + { + PlayViewAnim(ANIM_PARRY1); + PlayOwnerAnim("once", "sword_swing"); + ScheduleDelayedEvent(0.75, "unparryanim"); + } + + void unparryanim() + { + PlayViewAnim(ANIM_PARRY1_RETRACT); + } + + void game_dodamage() + { + if (!(GetEntityRace(param2) == "spider")) return; + if (GetSkillLevel(GetOwner(), "swordsmanship") < BASE_LEVEL_REQ) + { + SendColoredMessage(GetOwner(), "You lack the skill to activate this weapon's magic."); + } + if (!(GetSkillLevel(GetOwner(), "swordsmanship") >= BASE_LEVEL_REQ)) return; + ApplyEffect(GetEntityIndex(param2), "effects/dot_fire", 10, GetEntityIndex(GetOwner()), Random(30, 50), "swordsmanship"); + } + +} + +} diff --git a/scripts/angelscript/items/swords_testskin.as b/scripts/angelscript/items/swords_testskin.as new file mode 100644 index 00000000..492732a9 --- /dev/null +++ b/scripts/angelscript/items/swords_testskin.as @@ -0,0 +1,86 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsTestskin : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + string MODEL_BLOCK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_SHOUT; + string SOUND_SWIPE; + + SwordsTestskin() + { + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "weapons/swords/smallswords_skins_rview.mdl"; + MODEL_HANDS = "weapons/swords/p_swords.mdl"; + MODEL_WORLD = "weapons/swords/p_swords.mdl"; + MODEL_BLOCK = "armor/shields/p_shields.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "shortsword"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.3; + MELEE_DMG = 140; + MELEE_DMG_RANGE = 110; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Shortsword Skintest"); + SetDescription("A short one-handed Sword"); + SetWeight(30); + SetSize(7); + SetValue(15); + SetHUDSprite("trade", "shortsword"); + SetEntityModelSkin(GetOwner(), 2); + } + +} + +} diff --git a/scripts/angelscript/items/swords_testsub.as b/scripts/angelscript/items/swords_testsub.as new file mode 100644 index 00000000..433d38a6 --- /dev/null +++ b/scripts/angelscript/items/swords_testsub.as @@ -0,0 +1,123 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsTestsub : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + string MODEL_BLOCK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + string MODEL_WORLD; + string SOUND_SHOUT; + string SOUND_SWIPE; + string VSCRIPT_ID; + int V_MODEL_OFS; + int V_MODEL_OFS_MAX; + + SwordsTestsub() + { + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "weapons/swords/smallswords_rview.mdl"; + MODEL_HANDS = "weapons/swords/p_swords.mdl"; + MODEL_WORLD = "weapons/swords/p_swords.mdl"; + MODEL_BLOCK = "armor/shields/p_shields.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "shortsword"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.3; + MELEE_DMG = 140; + MELEE_DMG_RANGE = 110; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.7; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.05; + } + + void weapon_spawn() + { + SetName("Shortsword Modelbody"); + SetDescription("A short one-handed Sword"); + SetWeight(30); + SetSize(7); + SetValue(15); + SetHUDSprite("trade", "shortsword"); + SetModelBody(0, 2); + // TODO: UNCONVERTED: setviewmodelbody 0 2 + V_MODEL_OFS = 0; + V_MODEL_OFS_MAX = 2; + } + + void special_01_start() + { + V_MODEL_OFS += 1; + if (V_MODEL_OFS > V_MODEL_OFS_MAX) + { + V_MODEL_OFS = 0; + } + SetProp(GetOwner(), "modelindex", MODEL_OFS); + if (VSCRIPT_ID == "VSCRIPT_ID") + { + ClientEvent("new", GetEntityIndex(GetOwner()), currentscript, V_MODEL_OFS); + VSCRIPT_ID = "game.script.last_sent_id"; + } + else + { + ClientEvent("update", GetOwner(), VSCRIPT_ID, "update_model", V_MODEL_OFS); + } + } + + void client_activate() + { + SetProp("game.localplayer.viewmodel.active.id", "modelindex", param1); + SetProp(/* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "id"), "rendermode", 5); + SetProp(/* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id"), "renderamt", 255); + } + + void update_model() + { + SetProp("game.localplayer.viewmodel.active.id", "modelindex", param1); + } + +} + +} diff --git a/scripts/angelscript/items/swords_ub.as b/scripts/angelscript/items/swords_ub.as new file mode 100644 index 00000000..a64f71b5 --- /dev/null +++ b/scripts/angelscript/items/swords_ub.as @@ -0,0 +1,420 @@ +#pragma context server + +#include "items/swords_base_twohanded.as" + +namespace MS +{ + +class SwordsUb : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT; + int ANIM_LUNGE; + int ANIM_PARRY1; + int ANIM_PARRY1_RETRACT; + string ANIM_PREFIX; + int ANIM_SHEATH; + int ANIM_UNSHEATH; + int ATTACK_ANIMS; + int BASE_LEVEL_REQ; + int CHANT_VOL; + float DARK_SHIELD_DURATION; + int DARK_SHIELD_MP; + int DARK_SHIELD_ON; + string DS_START_TIME; + string DS_STILL_IN_RECHARGE; + float HP_RETURN_RATIO; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + int MELEE_ENERGY; + int MELEE_NEW_PARRY_CHANCE; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string NEXT_DARK_SHIELD_ATTEMPT; + string NEXT_PARRY; + int PARRY_ON; + string PLAYERANIM_AIM; + string PLAYERANIM_SWING; + string RANGED_AIMANGLE; + float RANGED_ATK_DURATION; + int RANGED_MP; + string RANGED_STARTPOS; + string SHADOW_PROJ_ID; + string SOUND_BLOCK; + string SOUND_DEPLOY; + string SOUND_DRAW; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + string SOUND_MODE_SWITCH; + string SOUND_SHOUT; + string SOUND_SWIPE; + int SWORD_FLYING; + + SwordsUb() + { + SOUND_MODE_SWITCH = "magic/energy1_loud.wav"; + HP_RETURN_RATIO = 0.02; + DARK_SHIELD_MP = 50; + DARK_SHIELD_DURATION = 40.0; + RANGED_MP = 30; + RANGED_ATK_DURATION = 0.3; + RANGED_AIMANGLE = Vector3(0, 0, 0); + RANGED_STARTPOS = Vector3(4, 0, -3); + BASE_LEVEL_REQ = 30; + ANIM_LIFT = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 2; + ANIM_ATTACK3 = 2; + ATTACK_ANIMS = 1; + ANIM_LUNGE = 3; + ANIM_PARRY1 = 4; + ANIM_PARRY1_RETRACT = 5; + ANIM_UNSHEATH = 6; + ANIM_SHEATH = 7; + MODEL_VIEW = "viewmodels/v_2hswords.mdl"; + MODEL_VIEW_IDX = 12; + MODEL_HANDS = "weapons/p_weapons3.mdl"; + MODEL_WORLD = "weapons/p_weapons3.mdl"; + MODEL_BODY_OFS = 63; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + SOUND_DRAW = "weapons/swords/sworddraw.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + SOUND_DEPLOY = "magic/chant_loop.wav"; + SOUND_BLOCK = "weapons/axemetal1.wav"; + ANIM_PREFIX = "standard"; + MELEE_RANGE = 80; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 1; + MELEE_DMG = 650; + MELEE_DMG_RANGE = 80; + MELEE_DMG_TYPE = "dark"; + MELEE_ACCURACY = 0.85; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 3; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.3; + MELEE_NEW_PARRY_CHANCE = 30; + PLAYERANIM_AIM = "sword_double_idle"; + PLAYERANIM_SWING = "sword_double_swing"; + } + + void weapon_spawn() + { + SetName("Unholy Blade"); + SetDescription("A corrupted blade of Felewyn"); + SetWeight(100); + SetSize(10); + SetValue(7000); + SetHUDSprite("trade", 140); + SetHand("both"); + custom_register(); + } + + void OnDeploy() override + { + if (!(true)) return; + EmitSound(GetOwner(), 3, SOUND_DEPLOY, 10); + CHANT_VOL = 10; + ScheduleDelayedEvent(1.0, "cycle_sound_down"); + } + + void cycle_sound_down() + { + if (!(CHANT_VOL > 0)) return; + ScheduleDelayedEvent(0.5, "cycle_sound_down"); + CHANT_VOL -= 1; + EmitSound(GetOwner(), 3, SOUND_DEPLOY, CHANT_VOL); + } + + void custom_register() + { + string reg.attack.mpdrain = RANGED_MP; + int reg.attack.ammodrain = 0; + string reg.attack.type = "charge-throw-projectile"; + string reg.attack.hold_min&max = "1;1"; + string reg.attack.dmg.type = "dark"; + int reg.attack.range = 100; + string reg.attack.energydrain = MELEE_ENERGY; + string reg.attack.stat = MELEE_STAT; + int reg.attack.COF = 0; + string reg.attack.projectile = "proj_ub"; + int reg.attack.priority = 2; + float reg.attack.delay.strike = 0.1; + float reg.attack.chargeamt = 2.0; + float reg.attack.delay.end = 0.1; + string reg.attack.ofs.startpos = RANGED_STARTPOS; + string reg.attack.ofs.aimang = RANGED_AIMANGLE; + string reg.attack.noise = RANGED_NOISE; + string reg.attack.callback = "dark_shard"; + int reg.attack.reqskill = 34; + string reg.attack.keys = "-attack1"; + RegisterAttack(); + } + + void dark_shard_start() + { + if ((true)) + { + end_parry("shard_fire"); + } + PlayViewAnim(ANIM_ATTACK1); + PlayOwnerAnim("once", "axe_twohand_swing"); + ScheduleDelayedEvent(0.3, "vanish_sword"); + } + + void vanish_sword() + { + // TODO: setviewmodelprop ent_me rendermode 1 + // TODO: setviewmodelprop ent_me renderamt 0 + SWORD_FLYING = 1; + } + + void melee_start() + { + if ((true)) + { + end_parry("melee_start"); + } + } + + void dark_shard_end() + { + if (("game.item.attacking")) return; + PlayViewAnim(ANIM_IDLE1); + } + + void special_01_start() + { + if ((true)) + { + end_parry("special_01_start"); + } + PlayViewAnim(ANIM_LUNGE); + PlayOwnerAnim("once", "axe_twohand_swing"); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + } + + void ext_register_projectile() + { + SHADOW_PROJ_ID = param1; + LogDebug("ext_register_projectile SHADOW_PROJ_ID"); + } + + void ext_projectile_landed() + { + LogDebug("ext_projectile_landed"); + if (param1 != "remote") + { + // TODO: splayviewanim ent_me ANIM_IDLE1 + } + // TODO: setviewmodelprop ent_me rendermode 1 + // TODO: setviewmodelprop ent_me renderamt 255 + SWORD_FLYING = 0; + } + + void end_parry() + { + if (((SHADOW_PROJ_ID !is null))) + { + SWORD_FLYING = 0; + if (param1 != "shard_fire") + { + } + LogDebug("remove SHADOW_PROJ_ID"); + CallExternal(SHADOW_PROJ_ID, "remove_me", "remote"); + ext_projectile_landed("remote"); + } + if (!(PARRY_ON)) return; + PARRY_ON = 0; + NEXT_PARRY = GetGameTime(); + NEXT_PARRY += 2.0; + } + + void game_+attack2() + { + if (!(true)) return; + if (("game.item.attacking")) return; + if (!(CanAttack(GetOwner()))) return; + if (!(PARRY_ON)) + { + if (GetSkillLevel(GetOwner(), "swordsmanship") >= BASE_LEVEL_REQ) + { + } + if (GetGameTime() > NEXT_PARRY) + { + } + PARRY_ON = 1; + // TODO: splayviewanim ent_me ANIM_PARRY1 + if (((SHADOW_PROJ_ID !is null))) + { + LogDebug("remove SHADOW_PROJ_ID"); + CallExternal(SHADOW_PROJ_ID, "remove_me", "remote"); + ext_projectile_landed("remote"); + } + } + if (!(GetSkillLevel(GetOwner(), "swordsmanship") > 34)) return; + if ((DARK_SHIELD_ON)) return; + if (DS_START_TIME == "DS_START_TIME") + { + DS_START_TIME = GetGameTime(); + DS_START_TIME += 5.0; + } + if (!(GetGameTime() > DS_START_TIME)) return; + if (GetGameTime() < NEXT_DARK_SHIELD_ATTEMPT) + { + DS_START_TIME = "DS_START_TIME"; + SendColoredMessage(GetOwner(), "Unholy Blade: Shield of Darkness not ready"); + } + if (!(GetGameTime() > NEXT_DARK_SHIELD_ATTEMPT)) return; + NEXT_DARK_SHIELD_ATTEMPT = GetGameTime(); + NEXT_DARK_SHIELD_ATTEMPT += 3.0; + if (GetEntityMP(GetOwner()) < DARK_SHIELD_MP) + { + SendColoredMessage(GetOwner(), "Unholy Blade: Not enough mana for Shield of Darkness"); + } + if (!(GetEntityMP(GetOwner()) >= DARK_SHIELD_MP)) return; + do_dark_shield(); + } + + void game__attack2() + { + if (!(true)) return; + if (!(PARRY_ON)) return; + if (!("game.item.attacking")) + { + // TODO: splayviewanim ent_me ANIM_PARRY1_RETRACT + } + PARRY_ON = 0; + DS_START_TIME = "DS_START_TIME"; + } + + void game_dodamage() + { + if (!(param1)) return; + string L_RELATIONSHIP = GetRelationship(param2); + if (!(L_RELATIONSHIP == "ally")) return; + if (!(L_RELATIONSHIP == "neutral")) return; + if (param2 == GetEntityIndex(GetOwner())) + { + SetDamage("dmg"); + return; + return; + } + if (!(/* TODO: $can_damage */ $can_damage(GetOwner(), param2))) return; + if (!(GetEntityRace(param2) != "undead")) return; + if ((GetEntityProperty(param2, "scriptvar"))) return; + if (!(GetEntityHealth(GetOwner()) < GetEntityMaxHealth(GetOwner()))) return; + string HP_TO_GIVE = GetEntityMaxHealth(GetOwner()); + HP_TO_GIVE *= HP_RETURN_RATIO; + HealEntity(GetOwner(), HP_TO_GIVE); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if ((PARRY_ON)) + { + if ((param4).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if ((param4).findFirst("target") >= 0) + { + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string PROJECTILE_FIRED = GetEntityProperty(param2, "is_projectile"); + if ((PROJECTILE_FIRED)) + { + string BLOCK_TARG = param1; + } + else + { + string BLOCK_TARG = param2; + } + string OWNER_ORG = GetEntityOrigin(GetOwner()); + string OWNER_ANG = GetEntityAngles(GetOwner()); + string ATTACK_ORG = GetEntityOrigin(BLOCK_TARG); + if ((WithinCone2D(ATTACK_ORG, OWNER_ORG, OWNER_ANG))) + { + } + string DMG_TAKEN = param3; + string ORIG_DMG = param3; + DMG_TAKEN *= 0.5; + SetDamage("dmg"); + ORIG_DMG -= DMG_TAKEN; + SendPlayerMessage("Unholy", "Blade absorbed " + int(ORIG_DMG) + " damage"); + EmitSound(GetOwner(), 3, SOUND_BLOCK, 5); + } + } + + void do_dark_shield() + { + NEXT_DARK_SHIELD_ATTEMPT = GetGameTime(); + NEXT_DARK_SHIELD_ATTEMPT += 30.0; + DARK_SHIELD_ON = 1; + CallExternal(GetOwner(), "ext_repel_shield", 20.0, 128, "darkfire"); + DARK_SHIELD_DURATION("dark_shield_end"); + } + + void bweapon_effect_remove() + { + LogDebug("bweapon_effect_remove [ DARK_SHIELD_ON ]"); + end_parry("bweapon_effect_remove"); + if (!(DARK_SHIELD_ON)) return; + dark_shield_abort(); + } + + void dark_shield_end() + { + DARK_SHIELD_ON = 0; + DS_START_TIME = "DS_START_TIME"; + DS_STILL_IN_RECHARGE = GetGameTime(); + DS_STILL_IN_RECHARGE += 10.0; + } + + void dark_shield_abort() + { + LogDebug("dark_shield_abort"); + dark_shield_end(); + CallExternal(GetOwner(), "ext_end_repel_shield"); + } + + void ext_player_sit() + { + LogDebug("ext_player_sit"); + if ((DARK_SHIELD_ON)) + { + dark_shield_abort(); + } + } + +} + +} diff --git a/scripts/angelscript/items/swords_vb.as b/scripts/angelscript/items/swords_vb.as new file mode 100644 index 00000000..d2b00140 --- /dev/null +++ b/scripts/angelscript/items/swords_vb.as @@ -0,0 +1,525 @@ +#pragma context server + +#include "items/base_weapon_new.as" +#include "items/base_vampire.as" + +namespace MS +{ + +class SwordsVb : CGameScript +{ + float ATK1_ACCURACY; + int ATK1_ANG; + string ATK1_CALLBACK; + float ATK1_DELAY_STRIKE; + int ATK1_DMG; + int ATK1_DMG_MULTI; + int ATK1_DMG_RANGE; + string ATK1_DMG_TYPE; + float ATK1_DURATION; + string ATK1_KEYS; + int ATK1_MPDRAIN; + int ATK1_NOISE; + int ATK1_NO_AUTOAIM; + int ATK1_OFS; + string ATK1_PANIM; + int ATK1_RANGE; + string ATK1_SKILL; + string ATK1_SKILL_LEVEL; + float ATK1_STAMINA; + string ATK1_TYPE; + int ATK1_VANIM; + float ATK2_DELAY_STRIKE; + int ATK2_DMG_MULTI; + float ATK2_DURATION; + int ATK2_RANGE; + int BASE_LEVEL_REQ; + int BITEM_CUSTOM_ATK1_EVENT; + int BITEM_CUSTOM_ATK2_EVENT; + int BLOCK_ON; + int BWEAPON_CUSTOM_DRAW; + int BWEAPON_CUSTOM_SWITCHHANDS; + string BWEAPON_DESC; + string BWEAPON_HANDS; + int BWEAPON_INV_SPRITE_IDX; + string BWEAPON_NAME; + int BWEAPON_VALUE; + int BWEAPON_WEIGHT; + int C_VANIM_DRAW; + int C_VANIM_IDLE; + string GAVE_MATCH_SET_MSG; + int HANDS_SINGLE; + string LAST_KEY_CHECK; + int MATCHED_SET; + int MATCHED_SET_ACTIVE; + string MATCHED_SET_TYPE; + string NEXT_BLOCK; + string OTHER_HAND; + string PANIM_EXT; + string PANIM_IDLE; + float PITCH_ATK1; + float PITCH_ATK2; + string PMODEL_FILE; + int PMODEL_IDX_FLOOR; + int PMODEL_IDX_HANDS; + int PMODEL_IDX_HAND_LEFT; + int PMODEL_IDX_HAND_RIGHT; + string SOUND_ATK1; + string SOUND_ATK2; + string SOUND_BLOCK1; + string SOUND_HITWALL1; + string SOUND_HITWALL2; + int VANIM_BLOCK; + int VANIM_BLOCK_OFH; + int VANIM_DRAW; + int VANIM_DRAW_SNG; + int VANIM_IDLE; + int VANIM_IDLE_SNG; + string VMODEL_FILE; + int VMODEL_IDX; + string WANIM_FLOOR; + string WANIM_HAND; + + SwordsVb() + { + MATCHED_SET = 1; + MATCHED_SET_TYPE = "vsword"; + BWEAPON_NAME = "Blood Blade"; + BWEAPON_DESC = "A sinuous blade of dark steel (matched set)"; + BWEAPON_WEIGHT = 1; + BWEAPON_VALUE = 3000; + BWEAPON_INV_SPRITE_IDX = 190; + BWEAPON_HANDS = "right"; + BASE_LEVEL_REQ = 30; + BWEAPON_CUSTOM_DRAW = 1; + BWEAPON_CUSTOM_SWITCHHANDS = 1; + BITEM_CUSTOM_ATK2_EVENT = 1; + BITEM_CUSTOM_ATK1_EVENT = 1; + VMODEL_FILE = "viewmodels/v_1hswords.mdl"; + VMODEL_IDX = 7; + PMODEL_FILE = "weapons/p_weapons4.mdl"; + PMODEL_IDX_FLOOR = 45; + PMODEL_IDX_HAND_RIGHT = 43; + PMODEL_IDX_HAND_LEFT = 44; + PMODEL_IDX_HANDS = 43; + PANIM_IDLE = "aim_axe_onehand"; + PANIM_EXT = "axe_onehand"; + VANIM_DRAW = 0; + VANIM_IDLE = 20; + C_VANIM_DRAW = 0; + C_VANIM_IDLE = 20; + VANIM_DRAW_SNG = 6; + VANIM_IDLE_SNG = 7; + VANIM_BLOCK = 16; + VANIM_BLOCK_OFH = 18; + WANIM_FLOOR = "standard_floor_idle"; + WANIM_HAND = "standard_idle"; + ATK1_TYPE = "strike-land"; + ATK1_KEYS = "+attack1"; + ATK1_RANGE = 80; + ATK1_DMG = 250; + ATK1_DMG_RANGE = 10; + ATK1_DMG_TYPE = "dark"; + ATK1_STAMINA = 0.1; + ATK1_SKILL = "swordsmanship"; + ATK1_ACCURACY = 0.85; + ATK1_DELAY_STRIKE = 0.2; + ATK1_DURATION = 0.7; + ATK1_OFS = 0; + ATK1_ANG = 0; + ATK1_CALLBACK = "atk1"; + ATK1_NOISE = 650; + ATK1_SKILL_LEVEL = BASE_LEVEL_REQ; + ATK1_MPDRAIN = 0; + ATK1_DMG_MULTI = 0; + ATK1_NO_AUTOAIM = 0; + ATK1_PANIM = "axe_onehand_swing"; + ATK1_VANIM = 2; + SOUND_ATK1 = "weapons/cbar_miss1.wav"; + PITCH_ATK1 = Random(100, 125); + SOUND_HITWALL1 = "weapons/cbar_hit1.wav"; + SOUND_HITWALL2 = "weapons/cbar_hit2.wav"; + ATK2_RANGE = 110; + ATK2_DMG_MULTI = 2; + ATK2_DELAY_STRIKE = 0.4; + ATK2_DURATION = 0.8; + SOUND_ATK2 = SOUND_ATK1; + PITCH_ATK2 = Random(80, 100); + SOUND_BLOCK1 = "weapons/cbar_hit2.wav"; + } + + void bitem_draw() + { + PlayViewAnim("break"); + PlayAnim("once", "break"); + SetViewModel(VMODEL_FILE); + SetModel(PMODEL_FILE); + SetWorldModel(PMODEL_FILE); + string L_PMODEL_IDX_HANDS = PMODEL_IDX_HANDS; + if (BWEAPON_HANDS == "right") + { + L_PMODEL_IDX_HANDS += "game.item.hand_index"; + } + SetModelBody(0, L_PMODEL_IDX_HANDS); + SetAnimExt(PANIM_EXT); + PlayAnim("once", WANIM_HAND); + NEXT_BLOCK = GetGameTime(); + NEXT_BLOCK += 2.0; + ScheduleDelayedEvent(0.1, "set_anims"); + } + + void set_anims() + { + if ((true)) + { + if (!(SENT_HELP_TIP)) + { + ShowHelpTip(GetOwner(), "vswordmatch", "MATCHED SET WEAPON", "If you can find another vampyric sword, you'll have no dual wield penalty with it!"); + SENT_HELP_TIP = 1; + } + check_matched(); + if (GetEntityProperty(OTHER_HAND, "itemname") == "fist_bare") + { + int SINGLE_HANDED = 1; + } + if (GetEntityProperty(OTHER_HAND, "itemname") == 0) + { + int SINGLE_HANDED = 1; + } + if ((SINGLE_HANDED)) + { + set_anims_single(); + CallClientItemEvent(GetOwner(), "set_anims_single", 1); + } + else + { + set_anims_double(); + CallClientItemEvent(GetOwner(), "set_anims_double", 1); + } + } + } + + void cl_play_draw() + { + if (HANDS_SINGLE == "HANDS_SINGLE") + { + ScheduleDelayedEvent(0.1, "cl_play_draw"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PlayViewAnim(C_VANIM_DRAW); + } + + void cl_play_idle() + { + if (("game.item.attacking")) return; + if (HANDS_SINGLE == "HANDS_SINGLE") + { + ScheduleDelayedEvent(0.1, "cl_play_idle"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PlayViewAnim(C_VANIM_IDLE); + } + + void set_anims_single() + { + HANDS_SINGLE = 1; + C_VANIM_DRAW = VANIM_DRAW_SNG; + C_VANIM_IDLE = VANIM_IDLE_SNG; + if (!(false)) return; + string DONT_IDLE = param1; + if ((DONT_IDLE)) return; + PlayViewAnim(C_VANIM_IDLE); + LogDebug("*** set_anims_single"); + } + + void set_anims_double() + { + HANDS_SINGLE = 0; + C_VANIM_DRAW = VANIM_DRAW; + C_VANIM_IDLE = VANIM_IDLE; + if (!(false)) return; + string DONT_IDLE = param1; + if ((DONT_IDLE)) return; + PlayViewAnim(C_VANIM_IDLE); + LogDebug("*** set_anims_double"); + } + + void game_switchhands() + { + set_idle(); + } + + void set_idle() + { + if ((true)) + { + if ("game.item.hand_index" == 0) + { + OTHER_HAND = GetEntityProperty(GetOwner(), "scriptvar"); + } + else + { + OTHER_HAND = GetEntityProperty(GetOwner(), "scriptvar"); + } + if (GetEntityProperty(OTHER_HAND, "itemname") == "fist_bare") + { + int SINGLE_HANDED = 1; + } + if (GetEntityProperty(OTHER_HAND, "itemname") == 0) + { + int SINGLE_HANDED = 1; + } + if ((SINGLE_HANDED)) + { + set_anims_single(); + CallClientItemEvent(GetOwner(), "set_anims_single"); + } + else + { + set_anims_double(); + CallClientItemEvent(GetOwner(), "set_anims_double"); + } + } + } + + void check_keys_loop() + { + if (!(MATCHED_SET_ACTIVE)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + ScheduleDelayedEvent(0.25, "check_keys_loop"); + LAST_KEY_CHECK = GetGameTime(); + if ((BLOCK_ON)) + { + if (!(IsKeyDown(GetOwner(), "use"))) + { + } + block_end(); + } + if ((BLOCK_ON)) return; + if (!(GetGameTime() > NEXT_BLOCK)) return; + if (!(IsKeyDown(GetOwner(), "use"))) return; + NEXT_BLOCK = GetGameTime(); + NEXT_BLOCK += 1.0; + check_matched(); + if (!(MATCHED_SET_ACTIVE)) return; + // TODO: splayviewanim ent_me VANIM_BLOCK + BLOCK_ON = 1; + PlayOwnerAnim("critical", "aim_fists"); + CallExternal(OTHER_HAND, "match_block_anim"); + lock_weapon(); + } + + void block_end() + { + if (!(BLOCK_ON)) return; + // TODO: splayviewanim ent_me C_VANIM_IDLE + BLOCK_ON = 0; + NEXT_BLOCK = GetGameTime(); + NEXT_BLOCK += 1.0; + PlayOwnerAnim("once", PANIM_IDLE); + unlock_weapon(); + CallExternal(OTHER_HAND, "match_unblock_anim"); + } + + void game_putinpack() + { + if ((BLOCK_ON)) + { + SetScriptFlags(GetOwner(), "remove", "wcre"); + } + BLOCK_ON = 0; + MATCHED_SET_ACTIVE = 0; + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if (!(BLOCK_ON)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar") == GetEntityIndex(GetOwner()))) return; + if ((param4).findFirst("target") == 0) + { + int CANT_BLOCK = 1; + } + if ((param4).findFirst("effect") >= 0) + { + int CANT_BLOCK = 1; + } + if ((GetEntityProperty(param2, "itemname")).findFirst("proj_arrow") == 0) + { + int CANT_BLOCK = 1; + } + if ((CANT_BLOCK)) return; + if (!(param1 != GetEntityIndex(GetOwner()))) return; + if (!(GetRelationship(param1) == "enemy")) return; + string OWNER_POS = GetEntityOrigin(GetOwner()); + string OWNER_ANG = GetEntityAngles(GetOwner()); + string ATTACKER_POS = GetEntityOrigin(param1); + if (!(WithinCone2D(ATTACKER_POS, OWNER_POS, OWNER_ANG))) return; + string INC_DMG = param3; + string OUT_DMG = param3; + OUT_DMG *= 0.25; + SetDamage("dmg"); + string AMT_BLOCKED = INC_DMG; + AMT_BLOCKED -= OUT_DMG; + if (AMT_BLOCKED > 1) + { + int AMT_BLOCKED = int(AMT_BLOCKED); + } + EmitSound(GetOwner(), 4, SOUND_BLOCK1, 10); + SendColoredMessage(GetOwner(), "Vampyric Swords blocked " + AMT_BLOCKED + " hp"); + } + + void match_block_anim() + { + // TODO: splayviewanim ent_me VANIM_BLOCK_OFH + } + + void match_unblock_anim() + { + // TODO: splayviewanim ent_me C_VANIM_IDLE + } + + void lock_weapon() + { + ApplyEffect(GetOwner(), "effects/effect_templock"); + } + + void unlock_weapon() + { + CallExternal(GetOwner(), "ext_end_templock"); + } + + void check_matched() + { + if ("game.item.hand_index" == 0) + { + OTHER_HAND = GetEntityProperty(GetOwner(), "scriptvar"); + } + else + { + OTHER_HAND = GetEntityProperty(GetOwner(), "scriptvar"); + } + if (GetEntityProperty(OTHER_HAND, "scriptvar") == MATCHED_SET_TYPE) + { + MATCHED_SET_ACTIVE = 1; + } + else + { + MATCHED_SET_ACTIVE = 0; + } + if (GetEntityProperty(OTHER_HAND, "itemname") == "fist_bare") + { + int SINGLE_HANDED = 1; + } + if (GetEntityProperty(OTHER_HAND, "itemname") == 0) + { + int SINGLE_HANDED = 1; + } + if ((SINGLE_HANDED)) + { + set_anims_single(); + CallClientItemEvent(GetOwner(), "set_anims_single", 1); + } + else + { + set_anims_double(); + CallClientItemEvent(GetOwner(), "set_anims_double", 1); + } + if (!(MATCHED_SET_ACTIVE)) return; + string L_LAST_KEY_CHECK = LAST_KEY_CHECK; + L_LAST_KEY_CHECK += 1; + if (GetGameTime() > L_LAST_KEY_CHECK) + { + check_keys_loop(); + } + if (!(GAVE_MATCH_SET_MSG)) + { + GAVE_MATCH_SET_MSG = 1; + SendInfoMsg(GetOwner(), "MATCHED SET ABILITY Hold +use to block with Vampyric Blades"); + } + } + + void ext_activate_items() + { + check_matched(); + } + + void atk1_start() + { + LogDebug("hands HANDS_SINGLE"); + if (!(HANDS_SINGLE)) + { + int L_VANIM = 19; + } + else + { + int L_VANIM = RandomInt(8, 11); + } + PlayViewAnim(L_VANIM); + PlayOwnerAnim("critical", ATK1_PANIM); + EmitSound(GetOwner(), 1, SOUND_ATK1, 10); + } + + void atk2_start() + { + LogDebug("hands HANDS_SINGLE"); + if (!(HANDS_SINGLE)) + { + int L_VANIM = 17; + } + else + { + int L_VANIM = 17; + } + PlayViewAnim(L_VANIM); + PlayOwnerAnim("critical", ATK2_PANIM); + EmitSound(GetOwner(), 1, SOUND_ATK2, 10); + } + + void atk1_damaged_other() + { + string PASS_PAR1 = param1; + string PASS_PAR2 = param2; + blood_drain(PASS_PAR1, PASS_PAR2); + } + + void atk2_damaged_other() + { + string PASS_PAR1 = param1; + string PASS_PAR2 = param2; + blood_drain(PASS_PAR1, PASS_PAR2); + } + + void atk1_end() + { + if ((true)) + { + check_matched(); + } + if (!(false)) return; + ScheduleDelayedEvent(1.0, "cl_play_idle"); + } + + void atk2_end() + { + if ((true)) + { + check_matched(); + } + if (!(false)) return; + ScheduleDelayedEvent(1.0, "cl_play_idle"); + } + + void blood_drain() + { + string HEAL_AMT = param2; + HEAL_AMT *= 0.1; + Effect("glow", GetOwner(), Vector3(0, 100, 0), 60, 0.5, 0.5); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + try_vampire_target(GetEntityIndex(GetOwner()), GetEntityIndex(param1), HEAL_AMT); + } + +} + +} diff --git a/scripts/angelscript/items/swords_volcano.as b/scripts/angelscript/items/swords_volcano.as new file mode 100644 index 00000000..f3e2b99f --- /dev/null +++ b/scripts/angelscript/items/swords_volcano.as @@ -0,0 +1,298 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsVolcano : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float LEVEL_INC; + int LOOP_SOUND; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + int MP_REQ1; + int MP_REQ2; + int MP_REQ3; + int MP_REQ4; + int MP_REQ5; + int SECONDARY_DMG; + string SOUND_SHOUT; + string SOUND_SWIPE; + + SwordsVolcano() + { + MP_REQ1 = 5; + MP_REQ2 = 10; + MP_REQ3 = 15; + MP_REQ4 = 20; + MP_REQ5 = 30; + LEVEL_INC = 1.5; + BASE_LEVEL_REQ = 10; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_1hswords.mdl"; + MODEL_VIEW_IDX = 5; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 110; + ANIM_PREFIX = "darksword"; + MELEE_RANGE = 64; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.1; + MELEE_ENERGY = 0.3; + MELEE_DMG = 240; + SECONDARY_DMG = 500; + MELEE_DMG_RANGE = 10; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.77; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.3; + } + + void weapon_spawn() + { + SetName("Dark Sword"); + SetDescription("This swords magic can help the skillful land deadly blows"); + SetWeight(30); + SetSize(7); + SetValue(3000); + SetHUDSprite("trade", 104); + } + + void register_charge1() + { + string TRI_DMG = MELEE_DMG; + string F_DMG_RANGE = MELEE_DMG_RANGE; + TRI_DMG *= LEVEL_INC; + F_DMG_RANGE *= 2; + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = TRI_DMG; + string reg.attack.dmg.range = F_DMG_RANGE; + string reg.attack.dmg.type = "dark"; + int reg.attack.energydrain = 2; + string reg.attack.stat = "swordsmanship"; + float reg.attack.hitchance = 0.85; + int reg.attack.priority = 1; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.callback = "dmgup1"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 1.0; + int reg.attack.reqskill = 10; + string reg.attack.mpdrain = MP_REQ1; + RegisterAttack(); + TRI_DMG *= LEVEL_INC; + F_DMG_RANGE *= 2; + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = TRI_DMG; + string reg.attack.dmg.range = F_DMG_RANGE; + string reg.attack.dmg.type = "dark"; + int reg.attack.energydrain = 4; + string reg.attack.stat = "swordsmanship"; + float reg.attack.hitchance = 0.85; + int reg.attack.priority = 2; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.callback = "dmgup2"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 2.0; + int reg.attack.reqskill = 15; + string reg.attack.mpdrain = MP_REQ2; + RegisterAttack(); + TRI_DMG *= LEVEL_INC; + F_DMG_RANGE *= 2; + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = TRI_DMG; + string reg.attack.dmg.range = F_DMG_RANGE; + string reg.attack.dmg.type = "dark"; + int reg.attack.energydrain = 6; + string reg.attack.stat = "swordsmanship"; + float reg.attack.hitchance = 0.85; + int reg.attack.priority = 3; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.callback = "dmgup3"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 3.0; + int reg.attack.reqskill = 20; + string reg.attack.mpdrain = MP_REQ3; + RegisterAttack(); + TRI_DMG *= LEVEL_INC; + F_DMG_RANGE *= 2; + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = TRI_DMG; + string reg.attack.dmg.range = F_DMG_RANGE; + string reg.attack.dmg.type = "dark"; + int reg.attack.energydrain = 8; + string reg.attack.stat = "swordsmanship"; + float reg.attack.hitchance = 0.85; + int reg.attack.priority = 4; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.callback = "dmgup4"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 4.0; + int reg.attack.reqskill = 25; + string reg.attack.mpdrain = MP_REQ4; + RegisterAttack(); + TRI_DMG *= LEVEL_INC; + F_DMG_RANGE *= 2; + string reg.attack.type = "strike-land"; + string reg.attack.keys = "-attack1"; + string reg.attack.range = MELEE_RANGE; + string reg.attack.dmg = TRI_DMG; + string reg.attack.dmg.range = F_DMG_RANGE; + string reg.attack.dmg.type = "dark"; + int reg.attack.energydrain = 10; + string reg.attack.stat = "swordsmanship"; + float reg.attack.hitchance = 0.85; + int reg.attack.priority = 5; + string reg.attack.delay.strike = MELEE_DMG_DELAY; + string reg.attack.delay.end = MELEE_ATK_DURATION; + string reg.attack.callback = "dmgup5"; + string reg.attack.noise = MELEE_NOISE; + float reg.attack.chargeamt = 5.0; + int reg.attack.reqskill = 30; + string reg.attack.mpdrain = MP_REQ5; + RegisterAttack(); + } + + void dmgup1_start() + { + if (!(true)) return; + LogMessage("ent_owner darksword_Charge1"); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 64, 1, 1); + LOOP_SOUND = 1; + play_sound_loop(); + atk_anim(MP_REQ1, "I"); + } + + void dmgup2_start() + { + if (!(true)) return; + LogMessage("ent_owner darksword_Charge2"); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 96, 1, 1); + LOOP_SOUND = 2; + play_sound_loop(); + atk_anim(MP_REQ2, "II"); + } + + void dmgup3_start() + { + if (!(true)) return; + LogMessage("ent_owner darksword_Charge3"); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 1, 1); + LOOP_SOUND = 3; + play_sound_loop(); + atk_anim(MP_REQ3, "III"); + } + + void dmgup4_start() + { + if (!(true)) return; + LogMessage("ent_owner darksword_Charge4"); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 256, 1, 1); + LOOP_SOUND = 4; + play_sound_loop(); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + atk_anim(MP_REQ4, "IV"); + } + + void dmgup5_start() + { + if (!(true)) return; + LogMessage("ent_owner darksword_Charge5"); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 512, 1, 1); + LOOP_SOUND = 5; + play_sound_full(); + EmitSound(GetOwner(), "const.snd.weapon", SPECIAL01_SND, "const.snd.maxvol"); + atk_anim(MP_REQ5, "V"); + } + + void atk_anim() + { + if (GetEntityMP(GetOwner()) < param1) + { + SendColoredMessage(GetOwner(), "Dark Sword: Not enough " + MP + "for Soul Pierce " + param2); + } + if (!(GetEntityMP(GetOwner()) >= param1)) return; + // TODO: splayviewanim ent_me 2 + if (PLAYERANIM_SWING != "PLAYERANIM_SWING") + { + PlayOwnerAnim("once", PLAYERANIM_SWING); + } + MELEE_SOUND_DELAY("melee_playsound"); + } + + void melee_start() + { + PlayViewAnim(3); + if (PLAYERANIM_SWING != "PLAYERANIM_SWING") + { + PlayOwnerAnim("once", PLAYERANIM_SWING); + } + MELEE_SOUND_DELAY("melee_playsound"); + } + + void play_sound_loop() + { + LOOP_SOUND -= 1; + EmitSound(GetOwner(), 0, "magic/spawn.wav", 5); + if (!(LOOP_SOUND > 0)) return; + ScheduleDelayedEvent(0.25, "play_sound_loop"); + } + + void play_sound_full() + { + EmitSound(GetOwner(), 0, "magic/spawn_loud.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/items/swords_wolvesbane.as b/scripts/angelscript/items/swords_wolvesbane.as new file mode 100644 index 00000000..0d617ea5 --- /dev/null +++ b/scripts/angelscript/items/swords_wolvesbane.as @@ -0,0 +1,91 @@ +#pragma context server + +#include "items/swords_base_onehanded.as" + +namespace MS +{ + +class SwordsWolvesbane : CGameScript +{ + int ANIM_ATTACK1; + int ANIM_ATTACK2; + int ANIM_ATTACK3; + int ANIM_IDLE1; + int ANIM_LIFT1; + string ANIM_PREFIX; + int ANIM_SHEATH; + int BASE_LEVEL_REQ; + float MELEE_ACCURACY; + int MELEE_ALIGN_BASE; + int MELEE_ALIGN_TIP; + float MELEE_ATK_DURATION; + int MELEE_DMG; + float MELEE_DMG_DELAY; + int MELEE_DMG_RANGE; + string MELEE_DMG_TYPE; + float MELEE_ENERGY; + float MELEE_PARRY_CHANCE; + int MELEE_RANGE; + string MELEE_SOUND; + string MELEE_SOUND_DELAY; + string MELEE_STAT; + string MELEE_VIEWANIM_ATK; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_VIEW; + int MODEL_VIEW_IDX; + string MODEL_WORLD; + string SOUND_SHOUT; + string SOUND_SWIPE; + int SPECIAL_WEAPON; + string SPECIAL_WEAPON_TYPE; + + SwordsWolvesbane() + { + BASE_LEVEL_REQ = 3; + ANIM_LIFT1 = 0; + ANIM_IDLE1 = 1; + ANIM_ATTACK1 = 2; + ANIM_ATTACK2 = 3; + ANIM_ATTACK3 = 4; + ANIM_SHEATH = 5; + MODEL_VIEW = "viewmodels/v_1hswords.mdl"; + MODEL_VIEW_IDX = 0; + MODEL_HANDS = "weapons/p_weapons1.mdl"; + MODEL_WORLD = "weapons/p_weapons1.mdl"; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_SHOUT = GetEntityProperty(GetOwner(), "scriptvar"); + MODEL_BODY_OFS = 28; + ANIM_PREFIX = "shortsword"; + MELEE_RANGE = 60; + MELEE_DMG_DELAY = 0.6; + MELEE_ATK_DURATION = 1.0; + MELEE_ENERGY = 0.4; + MELEE_DMG = 150; + MELEE_DMG_RANGE = 60; + MELEE_DMG_TYPE = "slash"; + MELEE_ACCURACY = 0.75; + MELEE_STAT = "swordsmanship"; + MELEE_ALIGN_BASE = 4; + MELEE_ALIGN_TIP = 0; + MELEE_VIEWANIM_ATK = ANIM_ATTACK1; + MELEE_SOUND = SOUND_SWIPE; + MELEE_SOUND_DELAY = MELEE_DMG_DELAY; + MELEE_PARRY_CHANCE = 0.15; + } + + void weapon_spawn() + { + SetName("Wolve s Bane"); + SetDescription("A light two-handed sword laced with wolve s bane"); + SetWeight(30); + SetSize(5); + SetValue(15); + SetHUDSprite("trade", "shortsword"); + SPECIAL_WEAPON = 1; + SPECIAL_WEAPON_TYPE = "wolf"; + } + +} + +} diff --git a/scripts/angelscript/items/tutorial_key.as b/scripts/angelscript/items/tutorial_key.as new file mode 100644 index 00000000..96e8594c --- /dev/null +++ b/scripts/angelscript/items/tutorial_key.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class TutorialKey : CGameScript +{ + string ANIM_PREFIX; + int MODEL_BODY_OFS; + string MODEL_HANDS; + string MODEL_WORLD; + + TutorialKey() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HANDS = "misc/p_misc.mdl"; + MODEL_BODY_OFS = 13; + ANIM_PREFIX = "rustedkey"; + } + + void miscitem_spawn() + { + SetName("Old key"); + SetDescription("Maybe this key will open the door in the previous room"); + SetHUDSprite("trade", "key"); + } + +} + +} diff --git a/scripts/angelscript/items/unknown_item.as b/scripts/angelscript/items/unknown_item.as new file mode 100644 index 00000000..a005e861 --- /dev/null +++ b/scripts/angelscript/items/unknown_item.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "items/base_miscitem.as" + +namespace MS +{ + +class UnknownItem : CGameScript +{ + string MODEL_HOLD; + string MODEL_WORLD; + + UnknownItem() + { + MODEL_WORLD = "misc/p_misc.mdl"; + MODEL_HOLD = "misc/p_misc.mdl"; + } + + void miscitem_spawn() + { + SetName("Unknown Item"); + SetDescription("This item doesn t exist under the server s current patch"); + } + +} + +} diff --git a/scripts/angelscript/joe/appatruth.as b/scripts/angelscript/joe/appatruth.as new file mode 100644 index 00000000..2cee0818 --- /dev/null +++ b/scripts/angelscript/joe/appatruth.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class Appatruth : CGameScript +{ + int CHAT_NEVER_INTERRUPT; + int PLAYING_DEAD; + string TORCH_TRIGGER; + + Appatruth() + { + CHAT_NEVER_INTERRUPT = 1; + } + + void OnSpawn() override + { + SetName("Apparition of Atruth"); + SetModel("npc/dwarf_lantern.mdl"); + SetHealth(9001); + SetRace("beloved"); + PLAYING_DEAD = 1; + SetInvincible(true); + SetNoPush(true); + SetRoam(false); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 100); + SetProp(GetOwner(), "renderfx", 16); + SetIdleAnim("idle"); + SetWidth(32); + SetHeight(54); + SetModelBody(0, 2); + SetSayTextRange(2048); + SetBloodType("none"); + SetSolid("none"); + UseTrigger("candle"); + ScheduleDelayedEvent(2.0, "intro"); + } + + void intro() + { + chat_face_speaker(); + chat_add_text("intro_chat", "Aye! Could ya be helpin' out a poor old ghost of a once good dwarf?", 3.5, "nod", "speak_help"); + chat_add_text("intro_chat", "My fellows and I were working these here mines, but something... Unholy... Happened to them.", 6.0); + chat_add_text("intro_chat", "If ya could put their souls to rest, I would be forever grateful, as then I could be movin' on me self.", 7.0); + chat_add_text("intro_chat", "There's also some explosives in the caves we were hoping to use to connect the other mines.", 6.5, "nod", "access"); + chat_add_text("intro_chat", "They be dwarven explosives, so they'll still be good, despite the time and the damp.", 6.0); + chat_add_text("intro_chat", "So take these torches, and keep your eye out for a fuse. They'll be useful for that as well as fer seein'.", 6.0); + chat_start_sequence("intro_chat", "add_to_que"); + } + + void speak_help() + { + EmitSound(GetOwner(), 0, "voices/dwarf/vs_nx0drogm_heal.wav", 10); + } + + void game_postspawn() + { + TORCH_TRIGGER = param4; + } + + void access() + { + UseTrigger(TORCH_TRIGGER); + UseTrigger("wave1"); + chat_add_text("end_chat", "I think I'll be fading away fer a bit. After all, I can't really be helpin' ye like this, now can I?", 6.5, "none", "remove_me"); + chat_start_sequence("end_chat", "add_to_que"); + } + + void remove_me() + { + UseTrigger("candle"); + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/joe/bartifact.as b/scripts/angelscript/joe/bartifact.as new file mode 100644 index 00000000..ee2ae9ff --- /dev/null +++ b/scripts/angelscript/joe/bartifact.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class Bartifact : CGameScript +{ + int THE_PLAYER; + + void OnSpawn() override + { + SetHealth(1000); + SetName("A Bloodshrine Artifact"); + SetWidth(12); + SetHeight(6); + SetRace("beloved"); + SetModel("misc/bartifact.mdl"); + SetInvincible(true); + SetAlive(0); + SetAngles("face"); + SetMenuAutoOpen(1); + THE_PLAYER = 0; + } + + void itemtook() + { + THE_PLAYER = param1; + UseTrigger("door_event"); + DeleteEntity(GetOwner()); + } + + void game_menu_getoptions() + { + string reg.mitem.id = "takeitem"; + string reg.mitem.title = "Remove the stone"; + string reg.mitem.callback = "itemtook"; + } + +} + +} diff --git a/scripts/angelscript/joe/ignite.as b/scripts/angelscript/joe/ignite.as new file mode 100644 index 00000000..b8929164 --- /dev/null +++ b/scripts/angelscript/joe/ignite.as @@ -0,0 +1,68 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class Ignite : CGameScript +{ + int PLAYING_DEAD; + + void OnSpawn() override + { + SetName("Fuse"); + SetModel("misc/item_log.mdl"); + SetInvincible(false); + SetNoPush(true); + SetHealth(99999); + SetDamageResistance("all", 0.01); + SetDamageResistance("fire", 1.0); + SetDamageResistance("cold", 0); + SetDamageResistance("blunt", 0); + SetDamageResistance("pierce", 0); + SetDamageResistance("slash", 0); + SetDamageResistance("dark", 0); + SetDamageResistance("generic", 0); + SetRace("beloved"); + PLAYING_DEAD = 1; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SetWidth(24); + SetHeight(12); + SetAlive(1); + SetMenuAutoOpen(1); + } + + void itemtaken() + { + UseTrigger("ignite"); + DeleteEntity(GetOwner()); + } + + void game_menu_getoptions() + { + if ((ItemExists(param1, "item_torch"))) + { + string reg.mitem.id = "takeitem"; + string reg.mitem.title = "Lite with torch"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_torch"; + string reg.mitem.callback = "itemtaken"; + } + else + { + SendColoredMessage(m_hLastUsed, "Nothing to lite fuse with."); + } + } + + void OnDamage(int damage) override + { + SetHealth(99999); + if (!((param3).findFirst("fire") >= 0)) return; + itemtaken(); + } + +} + +} diff --git a/scripts/angelscript/keledrosprelude/bat.as b/scripts/angelscript/keledrosprelude/bat.as new file mode 100644 index 00000000..21b937a8 --- /dev/null +++ b/scripts/angelscript/keledrosprelude/bat.as @@ -0,0 +1,121 @@ +#pragma context server + +#include "monsters/bat_base.as" + +namespace MS +{ + +class Bat : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE_FLY; + string ANIM_IDLE_HANG; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string BAT_STATUS; + int CAN_FLEE; + int CAN_HUNT; + float FLEE_CHANCE; + int FLEE_HEALTH; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Bat() + { + ANIM_WALK = "IdleFlyNormal"; + ANIM_RUN = ANIM_WALK; + ANIM_ATTACK = "bite"; + ANIM_IDLE_HANG = "IdleHang"; + ANIM_IDLE_FLY = "IdleFlyNormal"; + ANIM_DEATH = "die"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_IDLE1 = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + MOVE_RANGE = 54; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 100; + ATTACK_DAMAGE = 5; + NPC_GIVE_EXP = 20; + CAN_FLEE = 1; + FLEE_HEALTH = 1; + FLEE_CHANCE = 1.0; + } + + void bat_spawn() + { + SetName("Fire Bat"); + SetHealth(50); + SetWidth(32); + SetHeight(32); + SetHearingSensitivity(5); + SetVolume(5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 2.0); + SetModel("monsters/bat.mdl"); + ScheduleDelayedEvent(1, "start_flaming"); + } + + void OnPostSpawn() override + { + ATTACK_HITCHANCE = 0.6; + if (StringToLower(GetMapName()) != "keledrosprelude2") + { + ATTACK_HITCHANCE = 0.9; + } + } + + void game_postspawn() + { + } + + void bat_drop_down() + { + CAN_HUNT = 1; + BAT_STATUS = BAT_FLYING; + SetIdleAnim(ANIM_IDLE_FLY); + } + + void bite1() + { + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + XDoDamage(m_hAttackTarget, "direct", ATTACK_DAMAGE, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bite"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void start_flaming() + { + SetRepeatDelay(5.0); + ApplyEffect(GetOwner(), "effects/torch_flame", 5); + } + + void bite_dodamage() + { + if (!(param1)) return; + if (!(IsEntityAlive(param2))) return; + if (!(RandomInt(1, 5) == 1)) return; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), ATTACK_DAMAGE); + } + +} + +} diff --git a/scripts/angelscript/keledrosprelude/boar_chest.as b/scripts/angelscript/keledrosprelude/boar_chest.as new file mode 100644 index 00000000..d049bd60 --- /dev/null +++ b/scripts/angelscript/keledrosprelude/boar_chest.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class BoarChest : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(25, 50)); + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "health_mpotion", 8, 0); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "scroll_fire_wall", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/keledrosprelude/metalboar.as b/scripts/angelscript/keledrosprelude/metalboar.as new file mode 100644 index 00000000..cdd60860 --- /dev/null +++ b/scripts/angelscript/keledrosprelude/metalboar.as @@ -0,0 +1,155 @@ +#pragma context server + +#include "monsters/boar_hard.as" + +namespace MS +{ + +class Metalboar : CGameScript +{ + float ATTACK_HITPERCENT; + int BOAR_CAN_CHARGE; + int BOAR_CHARGE_DMG; + int CAN_FLEE; + int CAN_STTACK; + float DROP_ITEM1_CHANCE; + int GORE_FORWARD_DAMAGE; + float GORE_SIDE_DAMAGE; + int HIT_COUNT; + int IMMUNE_VAMPIRE; + int IS_FLEEING; + string NPCATK_FLEE_RESTORETARGET; + int NPC_BASE_EXP; + int NPC_BOSS_REGEN_RATE; + int NPC_BOSS_RESTORATION; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + string PUSH_VEL; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Metalboar() + { + if ((StringToLower(GetMapName())).findFirst("keledros") == 0) + { + NPC_IS_BOSS = 1; + } + NPC_BOSS_REGEN_RATE = 0; + NPC_BOSS_RESTORATION = 0; + GORE_FORWARD_DAMAGE = 15; + GORE_SIDE_DAMAGE = 8.5; + ATTACK_HITPERCENT = 0.85; + BOAR_CAN_CHARGE = 1; + BOAR_CHARGE_DMG = 25; + NPC_GIVE_EXP = 500; + NPC_BASE_EXP = 200; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "doors/doorstop5.wav"; + Precache(SOUND_STRUCK1); + Precache(SOUND_STRUCK2); + Precache(SOUND_STRUCK3); + IMMUNE_VAMPIRE = 1; + DROP_ITEM1_CHANCE = 0.0; + Precache("monsters/stoneboar.mdl"); + } + + void OnSpawn() override + { + SetHealth(650); + SetDamageResistance("all", ".35"); + SetDamageResistance("pierce", ".15"); + SetDamageResistance("fire", ".05"); + SetDamageResistance("lightning", 2.0); + SetDamageResistance("poison", 0.0); + SetName("Boar made of metal"); + SetHearingSensitivity(9); + SetModel("monsters/stoneboar.mdl"); + HIT_COUNT = 0; + CAN_FLEE = 0; + } + + void OnPostSpawn() override + { + SetDamageResistance("holy", 2.0); + } + + void boar_charge_hit() + { + ApplyEffect(m_hLastStruckByMe, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 600, 600), 0); + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", 6, GetEntityIndex(GetOwner())); + } + + void gore_forward() + { + ApplyEffect(GetOwner(), "effects/specialattack_haste", 2); + PUSH_VEL = Vector3(0, 0, 0); + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + } + DoDamage(m_hLastSeen, ATTACK_HITRANGE, GORE_FORWARD_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void gore_left() + { + ApplyEffect(GetOwner(), "effects/specialattack_haste", 2); + PUSH_VEL = /* TODO: $relvel */ $relvel(200, 100, 20); + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(200, 400, 400), 0); + } + DoDamage(m_hLastSeen, ATTACK_HITRANGE, GORE_SIDE_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void gore_right() + { + ApplyEffect(GetOwner(), "effects/specialattack_haste", 2); + PUSH_VEL = /* TODO: $relvel */ $relvel(-200, 100, 20); + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(-200, 400, 400), 0); + } + DoDamage(m_hLastSeen, ATTACK_HITRANGE, GORE_SIDE_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + HIT_COUNT += 1; + if (HIT_COUNT >= 10) + { + SetHearingSensitivity(100); + string MY_ATTACKER = GetEntityIndex(m_hLastStruck); + npcatk_flee(MY_ATTACKER, 640, 2); + HIT_COUNT = 0; + } + } + + void OnFlee() + { + PlayAnim("once", "break"); + SetMoveDest(param1); + SetMoveAnim(ANIM_CHARGE); + IS_FLEEING = 1; + NPCATK_FLEE_RESTORETARGET = IS_HUNTING; + PARAM3("npcatk_stopflee"); + } + + void npcatk_stopflee() + { + CAN_STTACK = 1; + IS_FLEEING = 0; + CAN_FLEE = 0; + SetMoveAnim(ANIM_RUN); + if ((NPCATK_FLEE_RESTORETARGET)) + { + npcatk_faceattacker(HUNT_LASTTARGET); + } + npc_stopflee(); + ScheduleDelayedEvent(1, "boar_charge"); + } + +} + +} diff --git a/scripts/angelscript/keledrosprelude/metalspider.as b/scripts/angelscript/keledrosprelude/metalspider.as new file mode 100644 index 00000000..8958c3bc --- /dev/null +++ b/scripts/angelscript/keledrosprelude/metalspider.as @@ -0,0 +1,137 @@ +#pragma context server + +#include "monsters/spider_base.as" + +namespace MS +{ + +class Metalspider : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int IMMUNE_VAMPIRE; + int MOVE_RANGE; + int NPC_BASE_EXP; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + string PUSH_VEL; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + float SPIDER_IDLE_DELAY; + int SPIDER_IDLE_VOL; + int SPIDER_VOLUME; + + Metalspider() + { + if ((StringToLower(GetMapName())).findFirst("keledros") == 0) + { + NPC_IS_BOSS = 1; + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 1.0; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SND_STRUCK1 = "weapons/axemetal1.wav"; + SND_STRUCK2 = "weapons/axemetal2.wav"; + SND_STRUCK3 = "doors/doorstop5.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DODGE = "dodge"; + ANIM_DEATH = "die"; + MOVE_RANGE = 100; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 200; + ATTACK_DAMAGE_LOW = 14.0; + ATTACK_DAMAGE_HIGH = 20.0; + ATTACK_ACCURACY = 0.6; + NPC_GIVE_EXP = 800; + NPC_BASE_EXP = 300; + SPIDER_IDLE_VOL = 4; + SPIDER_IDLE_DELAY = 3.6; + SPIDER_VOLUME = 10; + IMMUNE_VAMPIRE = 1; + Precache("monsters/fer_spider_chrome.mdl"); + } + + void OnSpawn() override + { + SetHealth(750); + SetWidth(120); + SetHeight(64); + SetName("Iron Spider"); + SetHearingSensitivity(6); + SetModel("monsters/fer_spider_chrome.mdl"); + SetModelBody(0, 1); + SetDamageResistance("all", 0.25); + SetDamageResistance("lightning", 2.0); + SetDamageResistance("poison", 0.0); + } + + void OnPostSpawn() override + { + SetDamageResistance("holy", 2.0); + } + + void bite1() + { + if (RandomInt(0, 1) == 0) + { + // PlayRandomSound from: SPIDER_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SPIDER_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + PUSH_VEL = /* TODO: $relvel */ $relvel(0, 100, 0); + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", 3, GetEntityIndex(GetOwner())); + } + DoDamage(m_hLastSeen, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), 0.85, "slash"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(PUSH_VEL != "PUSH_VEL")) return; + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + + void check_attack() + { + if ((IS_FLEEING)) return; + if (!(IsEntityAlive(HUNT_LASTTARGET))) return; + if (GetEntityRange(HUNT_LASTTARGET) <= ATTACK_RANGE) + { + int L_ATTACK = 1; + } + if (!(L_ATTACK)) return; + npcatk_attackenemy(); + } + +} + +} diff --git a/scripts/angelscript/keledrosprelude/spider_chest.as b/scripts/angelscript/keledrosprelude/spider_chest.as new file mode 100644 index 00000000..4efe3d26 --- /dev/null +++ b/scripts/angelscript/keledrosprelude/spider_chest.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SpiderChest : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(20, 30)); + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "health_mpotion", 3, 0); + AddStoreItem(STORENAME, "mana_mpotion", 2, 0); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "item_thiefmap", 1, 0); + } + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "blunt_granitemace", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "armor_helm_mongol", 1, 0); + } + if (RandomInt(1, 50) == 1) + { + AddStoreItem(STORENAME, "shields_lironshield", 1, 0); + } + if (RandomInt(1, 100) == 1) + { + AddStoreItem(STORENAME, "scroll2_fire_wall", 1, 0); + } + if (RandomInt(1, 50) == 1) + { + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/keledrosprelude/stoneboar.as b/scripts/angelscript/keledrosprelude/stoneboar.as new file mode 100644 index 00000000..bf3012f5 --- /dev/null +++ b/scripts/angelscript/keledrosprelude/stoneboar.as @@ -0,0 +1,62 @@ +#pragma context server + +#include "monsters/boar_hard.as" + +namespace MS +{ + +class Stoneboar : CGameScript +{ + float ATTACK_HITPERCENT; + int BOAR_CAN_CHARGE; + int BOAR_CHARGE_DMG; + int CAN_FLEE; + float DROP_ITEM1_CHANCE; + int GORE_FORWARD_DAMAGE; + float GORE_SIDE_DAMAGE; + int IMMUNE_VAMPIRE; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Stoneboar() + { + GORE_FORWARD_DAMAGE = 12; + GORE_SIDE_DAMAGE = 8.5; + ATTACK_HITPERCENT = 0.85; + BOAR_CAN_CHARGE = 1; + BOAR_CHARGE_DMG = 25; + NPC_GIVE_EXP = 45; + NPC_BASE_EXP = 45; + DROP_ITEM1_CHANCE = 0.0; + IMMUNE_VAMPIRE = 1; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + } + + void OnSpawn() override + { + SetHealth(250); + SetDamageResistance("all", ".45"); + SetDamageResistance("pierce", ".15"); + SetDamageResistance("fire", ".05"); + SetDamageResistance("poison", 0.0); + SetName("Boar made of stone"); + SetHearingSensitivity(9); + SetBloodType("none"); + SetProp(GetOwner(), "skin", 1); + CAN_FLEE = 0; + } + + void OnPostSpawn() override + { + SetDamageResistance("holy", 2.0); + DROP_ITEM1_CHANCE = 0.0; + } + +} + +} diff --git a/scripts/angelscript/keledrosprelude/stonespider.as b/scripts/angelscript/keledrosprelude/stonespider.as new file mode 100644 index 00000000..266c06a3 --- /dev/null +++ b/scripts/angelscript/keledrosprelude/stonespider.as @@ -0,0 +1,130 @@ +#pragma context server + +#include "monsters/spider_base.as" + +namespace MS +{ + +class Stonespider : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int IMMUNE_VAMPIRE; + int MOVE_RANGE; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + string PUSH_VEL; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + float SPIDER_IDLE_DELAY; + int SPIDER_IDLE_VOL; + int SPIDER_VOLUME; + + Stonespider() + { + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SND_STRUCK1 = "weapons/axemetal1.wav"; + SND_STRUCK2 = "weapons/axemetal2.wav"; + SND_STRUCK3 = "debris/concrete1.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DODGE = "dodge"; + ANIM_DEATH = "die"; + MOVE_RANGE = 100; + ATTACK_RANGE = 250; + ATTACK_HITRANGE = 300; + ATTACK_DAMAGE_LOW = 14.0; + ATTACK_DAMAGE_HIGH = 20.0; + ATTACK_ACCURACY = 0.6; + NPC_GIVE_EXP = 100; + NPC_BASE_EXP = 100; + SPIDER_IDLE_VOL = 4; + SPIDER_IDLE_DELAY = 3.6; + SPIDER_VOLUME = 10; + IMMUNE_VAMPIRE = 1; + } + + void OnSpawn() override + { + SetHealth(500); + SetWidth(120); + SetHeight(64); + SetName("Spider made of stone"); + SetHearingSensitivity(6); + SetModel("monsters/fer_spider_giant.mdl"); + SetModelBody(0, 3); + SetDamageResistance("all", ".85"); + SetDamageResistance("poison", 0.0); + } + + void OnPostSpawn() override + { + SetDamageResistance("holy", 2.0); + } + + void bite1() + { + if (RandomInt(0, 1) == 0) + { + // PlayRandomSound from: SPIDER_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SPIDER_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + PUSH_VEL = /* TODO: $relvel */ $relvel(0, 100, 0); + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 200, 200), 0); + } + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", 3, GetEntityIndex(GetOwner())); + } + DoDamage(m_hLastSeen, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), 0.85, "slash"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(PUSH_VEL != "PUSH_VEL")) return; + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + + void check_attack() + { + if ((IS_FLEEING)) return; + if (!(IsEntityAlive(HUNT_LASTTARGET))) return; + if (GetEntityRange(HUNT_LASTTARGET) <= ATTACK_RANGE) + { + int L_ATTACK = 1; + } + if (!(L_ATTACK)) return; + npcatk_attackenemy(); + } + +} + +} diff --git a/scripts/angelscript/keledrosprelude/troll_chest.as b/scripts/angelscript/keledrosprelude/troll_chest.as new file mode 100644 index 00000000..ba69fd62 --- /dev/null +++ b/scripts/angelscript/keledrosprelude/troll_chest.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class TrollChest : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(50, 100)); + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "scroll2_frost_xolt", 1, 0); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_iceblade", 1, 0); + } + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "scroll2_blizzard", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/keledrosprelude/troll_djinn.as b/scripts/angelscript/keledrosprelude/troll_djinn.as new file mode 100644 index 00000000..8d144335 --- /dev/null +++ b/scripts/angelscript/keledrosprelude/troll_djinn.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "monsters/djinn_ice.as" + +namespace MS +{ + +class TrollDjinn : CGameScript +{ + void OnSpawn() override + { + SetName("Ice Djinn Ji-ax"); + } + +} + +} diff --git a/scripts/angelscript/keledrosprelude2/map_startup.as b/scripts/angelscript/keledrosprelude2/map_startup.as new file mode 100644 index 00000000..e827b19c --- /dev/null +++ b/scripts/angelscript/keledrosprelude2/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "keledrosprelude"; + MAP_WEATHER = "clear;clear;clear;clear;rain;rain"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "A Dangerous Pass"); + SetGlobalVar("G_MAP_DESC", "Bandits raid travelers along this pass so frequently that only the bravest of tradesmen still use it."); + SetGlobalVar("G_MAP_DIFF", "Levels 15-25 / 150-400hp"); + SetGlobalVar("G_WARN_HP", 150); + } + +} + +} diff --git a/scripts/angelscript/keledrosruins/keledros.as b/scripts/angelscript/keledrosruins/keledros.as new file mode 100644 index 00000000..c86d3348 --- /dev/null +++ b/scripts/angelscript/keledrosruins/keledros.as @@ -0,0 +1,800 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Keledros : CGameScript +{ + int AIM_RATIO; + int ALLOW_CHANGE; + int AM_SKELE; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RESPAWN_DEADIDLE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_CONE_OF_FIRE; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int CANT_TRACK; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_HEAR; + int CAN_HUNT; + string CAN_RETALIATE; + string CAST_SCRIPT; + string DID_ALE_INTRO; + int FIRE_BALL_DELAY; + int FIRE_PULSE; + int FIRE_PULSE_DELAY; + int FLEE_CHANCE; + int FLEE_DISTANCE; + int FLEE_HEALTH; + int HIGHER_THAN_ME_THRESHOLD; + int INTRODUCED; + int IS_UNHOLY; + int I_AM_TURNABLE; + int I_DIED; + string KSPELL_TARGET; + string LIGHTNING_SPRITE; + int MOVE_RANGE; + string NEXT_TARGET; + string NEXT_TARGET_ID; + int NPC_AUTO_DEATH; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_GIVE_EXP; + int NPC_HEARDSOUND_OVERRIDE; + string NPC_IS_BOSS; + string NPC_MOVE_TARGET; + string PLAYING_DEAD; + int REBUKE_DELAY; + string REBUKE_TARGET; + float RETALIATE_CHANCE; + int RETAL_DELAY; + string RE_REBUKING; + int SCANNING_TARGETS; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_BOOM; + string SOUND_DEATH; + string SOUND_POISON; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + int SPAWNED; + float SPELL_FREQ; + string START_TARG; + int TOTAL_GUARDS; + int kele.recharging; + + Keledros() + { + I_AM_TURNABLE = 0; + if ((StringToLower(GetMapName())).findFirst("keledros") == 0) + { + NPC_IS_BOSS = 1; + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 0.5; + IS_UNHOLY = 1; + NPC_HEARDSOUND_OVERRIDE = 1; + NPC_AUTO_DEATH = 0; + SKEL_RESPAWN_CHANCE = 1.0; + SKEL_RESPAWN_LIVES = 1; + SetGlobalVar("DEAD_GUARDS", 2); + TOTAL_GUARDS = 2; + SetGlobalVar("TWO_IS_DEAD", 1); + SetGlobalVar("THREE_IS_DEAD", 1); + SetGlobalVar("FOUR_IS_DEAD", 1); + ATTACK_HITCHANCE = 0.0; + NPC_GIVE_EXP = 500; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_ATTACK = "castspell"; + ANIM_RESPAWN_DEADIDLE = "lying_on_stomach"; + SKEL_HP = 2750; + CAST_SCRIPT = "keledrosruins/keledros_cl_cast"; + HIGHER_THAN_ME_THRESHOLD = 140; + AIM_RATIO = 80; + INTRODUCED = 0; + ALLOW_CHANGE = 0; + MOVE_RANGE = 30; + ATTACK_RANGE = 2000; + ATTACK_HITRANGE = 130; + SOUND_STRUCK1 = "voices/human/male_hit2.wav"; + SOUND_STRUCK2 = "voices/human/male_hit1.wav"; + SOUND_STRUCK3 = "voices/human/male_hit3.wav"; + SOUND_STRUCK4 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK5 = "weapons/cbar_hitbod1.wav"; + SOUND_ATTACK1 = "none"; + SOUND_ATTACK2 = "none"; + SOUND_DEATH = "voices/human/male_die.wav"; + SOUND_BOOM = "monsters/bear/giantbearstep2.wav"; + SOUND_POISON = "x/x_laugh1.wav"; + CAN_HUNT = 0; + CAN_ATTACK = 0; + NPC_MOVE_TARGET = "enemy"; + RETALIATE_CHANCE = 0.85; + CAN_FLEE = 0; + LIGHTNING_SPRITE = "lgtning.spr"; + SPELL_FREQ = 7.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1); + if (ALLOW_CHANGE == 1) + { + } + if (!(PLAYING_DEAD)) + { + } + string DIST = GetEntityDist(m_hLastSeen); + if (DIST < 300) + { + ANIM_ATTACK = "attack1"; + MOVE_RANGE = 150; + ATTACK_RANGE = 175; + } + if (DIST > 300) + { + ANIM_ATTACK = "attack2"; + MOVE_RANGE = 500; + ATTACK_RANGE = 600; + } + } + + void game_precache() + { + Precache("items/proj_fire_ball"); + Precache("items/proj_fire_dart"); + Precache(LIGHTNING_SPRITE); + Precache("monsters/animarmor.mdl"); + Precache("body/armour1.wav"); + Precache("body/armour2.wav"); + Precache("body/armour3.wav"); + Precache("misc/gold.wav"); + } + + void OnSpawn() override + { + SetHealth(SKEL_HP); + if (!(AM_GENERIC)) + { + SetName("The Insane Wizard, Keledros"); + } + if ((AM_GENERIC)) + { + SetName("Insane Wizard"); + } + SetFOV(359); + SetWidth(40); + SetHeight(80); + SetRoam(false); + SetRace("demon"); + SetNoPush(true); + SetModel("monsters/keledros.mdl"); + SetStepSize(16); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + SetHearingSensitivity(11); + npcatk_suspend_ai(); + SetDamageResistance("slash", 1); + SetDamageResistance("pierce", 1); + SetDamageResistance("blunt", 1); + SetDamageResistance("fire", 1); + SetDamageResistance("holy", 2.0); + SetDamageResistance("cold", 0.2); + if ((AM_GENERIC)) + { + ScheduleDelayedEvent(0.1, "go_intro"); + } + if ((AM_GENERIC)) return; + SetAngles("face"); + scan_for_players(); + SetInvincible(true); + } + + void scan_for_players() + { + if ((INTRODUCED)) return; + ScheduleDelayedEvent(0.1, "scan_for_players"); + string PLAYER_ID = /* TODO: $get_insphere */ $get_insphere("player", 384); + if ((IsValidPlayer(PLAYER_ID))) + { + npcatk_target(PLAYER_ID); + go_intro(); + } + if (!(CanSee("player", 384))) return; + npcatk_target(GetEntityIndex(m_hLastSeen)); + go_intro(); + } + + void go_intro() + { + if ((INTRODUCED)) return; + INTRODUCED = 1; + SetSayTextRange(2048); + if (!(AM_GENERIC)) + { + SayText("What's this? Visitors?"); + } + ScheduleDelayedEvent(2.5, "start_it_up_yo"); + int EXIT_SUB = 1; + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((IsValidPlayer("ent_lastheard"))) + { + if ((SCANNING_TARGETS)) + { + } + NEXT_TARGET = GetEntityOrigin("ent_lastheard"); + NEXT_TARGET_ID = GetEntityIndex("ent_lastheard"); + } + if ((I_DIED)) + { + if (GetEntityRange(m_hAttackTarget) > GetEntityRange("ent_lastheard")) + { + } + npcatk_target(GetEntityIndex("ent_lastheard")); + } + if ((INTRODUCED)) return; + if (!(IsValidPlayer("ent_lastheard"))) return; + SetMoveDest("ent_lastheard"); + if (!(GetEntityRange("ent_lastheard") < 450)) return; + npcatk_target(GetEntityIndex("ent_lastheard")); + go_intro(); + } + + void start_it_up_yo() + { + SetMoveAnim(ANIM_WALK); + SCANNING_TARGETS = 1; + ScheduleDelayedEvent(1.0, "scan_targets"); + SPELL_FREQ("do_spells"); + npcatk_resume_ai(); + UseTrigger("lights"); + if (!(AM_GENERIC)) + { + SayText("Please do stay for some...games."); + } + CAN_HUNT = 1; + ANIM_ATTACK = "castspell"; + SetRoam(true); + SetInvincible(false); + PlayAnim("once", ANIM_ATTACK); + START_TARG = GetEntityIndex("ent_lastheard"); + CANT_TRACK = 1; + CAN_HEAR = 0; + MOVE_RANGE = 30; + SetMoveDest(/* TODO: $relpos */ $relpos(0, 600, 0)); + ScheduleDelayedEvent(10.0, "start_wander"); + } + + void scan_targets() + { + if (!(SCANNING_TARGETS)) return; + if (!(false)) return; + NEXT_TARGET = GetEntityOrigin(m_hLastSeen); + NEXT_TARGET_ID = GetEntityIndex(m_hLastSeen); + ScheduleDelayedEvent(0.5, "scan_targets"); + } + + void start_wander() + { + MOVE_RANGE = 10000; + } + + void do_spells() + { + SPELL_FREQ("do_spells"); + if ((I_DIED)) return; + if ((SUSPEND_AI)) return; + SCANNING_TARGETS = 0; + SetMoveDest(NEXT_TARGET); + PlayAnim("once", ANIM_ATTACK); + } + + void castspell() + { + if (!(DID_ALE_INTRO)) + { + DID_ALE_INTRO = 1; + if ((StringToLower(GetMapName())).findFirst("aleyesu") >= 0) + { + } + do_ale_intro(); + } + if ((I_DIED)) return; + if (!(SKEL_RESPAWN_TIMES < 1)) return; + SCANNING_TARGETS = 1; + if (RE_REBUKING == 1) + { + RE_REBUKING = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + int random = RandomInt(0, 3); + if (random == 3) + { + if ((SPAWNED)) + { + int random = RandomInt(0, 2); + } + if (DEAD_GUARDS < TOTAL_GUARDS) + { + int random = RandomInt(0, 2); + } + } + string pos = NEXT_TARGET; + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + string ME_POS = GetEntityOrigin(GetOwner()); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(HUNT_LASTTARGET); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + KSPELL_TARGET = HUNT_LASTTARGET; + TARGET_Z_DIFFERENCE -= MY_Z; + if (Distance(GetMonsterProperty("origin"), pos) < 1024) + { + int VALID_CON = 1; + } + if ((false)) + { + int VALID_CON = 1; + } + if (!(VALID_CON)) return; + int TARGET_HIGHER_THAN_ME = 0; + if (TARGET_Z_DIFFERENCE > HIGHER_THAN_ME_THRESHOLD) + { + int TARGET_HIGHER_THAN_ME = 1; + } + if (!(TARGET_HIGHER_THAN_ME)) + { + string EFFECT_SCRIPT = "effects/sfx_lightning"; + if (random == 0) + { + string EFFECT_SCRIPT = "monsters/summon/summon_blizzard"; + int SET_DAMAGE = 10; + int SET_DURATION = 5; + EmitSound(GetOwner(), CHAN_VOICE, "magic/ice_strike.wav", "game.sound.maxvol"); + } + if (random == 1) + { + string EFFECT_SCRIPT = "monsters/summon/keledros_fire_wall"; + int SET_DAMAGE = 40; + int SET_DURATION = 10; + EmitSound(GetOwner(), CHAN_VOICE, "magic/fireball_strike.wav", "game.sound.maxvol"); + } + if (random == 2) + { + string EFFECT_SCRIPT = "monsters/summon/summon_lightning_storm"; + int SET_DAMAGE = 20; + int SET_DURATION = 10; + EmitSound(GetOwner(), CHAN_VOICE, "magic/lightning_strike.wav", "game.sound.maxvol"); + } + if (random == 3) + { + SetSayTextRange(1000); + SayText("Come forth my undead minions!"); + SetSayTextRange(768); + EmitSound(GetOwner(), CHAN_VOICE, "magic/heal_powerup.wav", "game.sound.maxvol"); + CallExternal(FindEntityByName("spawner5"), "make_undead"); + CallExternal(FindEntityByName("spawner6"), "make_undead"); + SetGlobalVar("DEAD_GUARDS", 0); + CallExternal(FindEntityByName("spawner1"), "make_undead"); + CallExternal(FindEntityByName("spawner2"), "make_undead"); + CallExternal(FindEntityByName("spawner3"), "make_undead"); + CallExternal(FindEntityByName("spawner4"), "make_undead"); + UseTrigger("spawn_archers"); + SPAWNED = 1; + ScheduleDelayedEvent(20, "allow_spawn"); + } + } + if (!(TARGET_HIGHER_THAN_ME)) + { + if (!(I_DIED)) + { + SpawnNPC(EFFECT_SCRIPT, pos, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), SET_DAMAGE, SET_DURATION + } + } + if ((TARGET_HIGHER_THAN_ME)) + { + SetSayTextRange(2048); + SayText("No use hiding up there!"); + int ALT_SPELL_CHOICE = RandomInt(1, 2); + if (ALT_SPELL_CHOICE == 1) + { + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 10, 35), "none", 1000, 400, 1, "none"); + } + if (ALT_SPELL_CHOICE == 2) + { + SetVolume(10); + EmitSound(GetOwner(), "debris/beamstart15.wav"); + Effect("beam", "point", LIGHTNING_SPRITE, 200, /* TODO: $relpos */ $relpos(0, 0, 0), GetEntityOrigin(KSPELL_TARGET), Vector3(255, 255, 0), 150, 50, 0.5); + DoDamage(KSPELL_TARGET, "direct", 200, 100, GetOwner()); + ApplyEffect(HUNT_LASTTARGET, "effects/dot_lightning", 10, GetEntityIndex(GetOwner()), 10); + } + } + ClientEvent("new", "all", CAST_SCRIPT, GetEntityIndex(GetOwner()), 15, 2); + ClientEvent("new", "all", CAST_SCRIPT, GetEntityIndex(GetOwner()), 19, 2); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {"game.sound.maxvol", SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(true)) return; + I_DIED = 1; + ANIM_ATTACK = "lying_on_stomach"; + if (!(AM_SKELE)) + { + if (!(AM_GENERIC)) + { + SayText("This isn't the end!"); + } + int L_DEATHANIM = RandomInt(0, 1); + ANIM_DEATH = "diesimple"; + if (L_DEATHANIM == 1) + { + ANIM_DEATH = "dieforward"; + } + PlayAnim("hold", ANIM_DEATH); + SetAlive(1); + SetMoveDest("none"); + SetIdleAnim(ANIM_RESPAWN_DEADIDLE); + SetInvincible(true); + SetRoam(false); + CAN_ATTACK = 0; + CAN_HUNT = 0; + CAN_RETALIATE = 0; + CAN_HEAR = 1; + PLAYING_DEAD = 1; + ScheduleDelayedEvent(7.0, "skel_respawn"); + } + if ((AM_SKELE)) + { + PlayAnim("critical", ANIM_DEATH); + UseTrigger("wizard_died"); + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "keledrosruins") + { + int DO_DROP = 1; + } + if (L_MAP_NAME == "aleyesu") + { + int DO_DROP = 1; + } + if ((DO_DROP)) + { + SpawnNPC("chests/keledros", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); + } + if (!(AM_GENERIC)) + { + } + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "keledrosruins") + { + string T_SPAWN = GetMonsterProperty("origin"); + T_SPAWN += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 100, 40)); + SpawnNPC("chests/bag_o_gold_25", T_SPAWN, ScriptMode::Legacy); + string T_SPAWN = GetMonsterProperty("origin"); + T_SPAWN += /* TODO: $relpos */ $relpos(Vector3(0, 45, 0), Vector3(0, 100, 40)); + SpawnNPC("chests/bag_o_gold_25", T_SPAWN, ScriptMode::Legacy); + string T_SPAWN = GetMonsterProperty("origin"); + T_SPAWN += /* TODO: $relpos */ $relpos(Vector3(0, 90, 0), Vector3(0, 100, 40)); + SpawnNPC("chests/bag_o_gold_25", T_SPAWN, ScriptMode::Legacy); + string T_SPAWN = GetMonsterProperty("origin"); + T_SPAWN += /* TODO: $relpos */ $relpos(Vector3(0, 135, 0), Vector3(0, 100, 40)); + SpawnNPC("chests/bag_o_gold_50", T_SPAWN, ScriptMode::Legacy); + string T_SPAWN = GetMonsterProperty("origin"); + T_SPAWN += /* TODO: $relpos */ $relpos(Vector3(0, 180, 0), Vector3(0, 100, 40)); + SpawnNPC("chests/bag_o_gold_50", T_SPAWN, ScriptMode::Legacy); + string T_SPAWN = GetMonsterProperty("origin"); + T_SPAWN += /* TODO: $relpos */ $relpos(Vector3(0, 225, 0), Vector3(0, 100, 40)); + SpawnNPC("chests/bag_o_gold_25", T_SPAWN, ScriptMode::Legacy); + string T_SPAWN = GetMonsterProperty("origin"); + T_SPAWN += /* TODO: $relpos */ $relpos(Vector3(0, 270, 0), Vector3(0, 100, 40)); + SpawnNPC("chests/bag_o_gold_25", T_SPAWN, ScriptMode::Legacy); + string T_SPAWN = GetMonsterProperty("origin"); + T_SPAWN += /* TODO: $relpos */ $relpos(Vector3(0, 315, 0), Vector3(0, 100, 40)); + SpawnNPC("chests/bag_o_gold_25", T_SPAWN, ScriptMode::Legacy); + } + } + } + + void skel_respawn() + { + AM_SKELE = 1; + CANT_TRACK = 0; + SetModel("monsters/skeleton3.mdl"); + SetDamageResistance("slash", ".7"); + SetDamageResistance("pierce", ".5"); + SetDamageResistance("blunt", 1.2); + SetDamageResistance("fire", 0.0); + SetDamageResistance("all", 0.7); + if (!(AM_GENERIC)) + { + SetName("The animated remains of Keledros"); + } + SetHearingSensitivity(11); + ATTACK_HITCHANCE = 0.85; + ATTACK_DMG_LOW = 15; + ATTACK_DMG_HIGH = 30; + MOVE_RANGE = 150; + ATTACK_RANGE = 175; + ATTACK_HITRANGE = 200; + ANIM_RUN = "walk"; + ANIM_ATTACK = "attack1"; + ATTACK_SPEED = 1000; + ATTACK_CONE_OF_FIRE = 6; + ALLOW_CHANGE = 1; + SOUND_STRUCK1 = "zombie/zo_pain2.wav"; + SOUND_STRUCK2 = "zombie/zo_pain2.wav"; + SOUND_STRUCK3 = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + const string SOUND_DEATH = "x/x_die1.wav"; + SetSkillLevel(NPC_GIVE_EXP); + Precache(SOUND_DEATH); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + PlayAnim("critical", "getup"); + SetSolid("box"); + SKEL_RESPAWN_TIMES += 1; + SetHealth(SKEL_HP); + ScheduleDelayedEvent(2.5, "skel_respawn_revived"); + } + + void skel_respawn_revived() + { + PLAYING_DEAD = 0; + SetMoveDest(HUNT_LASTTARGET); + SetRoam(true); + SetInvincible(false); + CAN_ATTACK = 1; + CAN_HUNT = 1; + CAN_RETALIATE = 1; + CAN_HEAR = 1; + CAN_FLEE = 1; + kele.recharging = 0; + FLEE_HEALTH = 0; + FLEE_CHANCE = 1; + FLEE_DISTANCE = 4096; + SayText("You can't defeat me so easily!"); + string MAP_NAME = StringToLower(GetMapName()); + } + + void attack_1() + { + float L_DMG = Random(ATTACK_DMG_LOW, ATTACK_DMG_HIGH); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, L_DMG, ATTACK_HITCHANCE, "slash"); + } + + void npc_targetsighted() + { + if (!(AM_SKELE)) return; + if ((FIRE_BALL_DELAY)) return; + FIRE_BALL_DELAY = 1; + ScheduleDelayedEvent(2.0, "reset_fire_delay"); + if (!(GetEntityRange(param1) > 128)) return; + AS_ATTACKING = GetGameTime(); + PlayAnim("once", "attack2"); + } + + void reset_fire_delay() + { + FIRE_BALL_DELAY = 0; + } + + void attack_2() + { + float LCL_ATKDMG = Random(ATTACK_DMG_LOW, ATTACK_DMG_HIGH); + int ATTACK_TYPE = RandomInt(1, 2); + if (ATTACK_TYPE == 1) + { + TossProjectile("proj_fire_dart", /* TODO: $relpos */ $relpos(0, 10, 35), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + TossProjectile("proj_fire_dart", /* TODO: $relpos */ $relpos(0, 10, 35), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + TossProjectile("proj_fire_dart", /* TODO: $relpos */ $relpos(0, 10, 35), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + TossProjectile("proj_fire_dart", /* TODO: $relpos */ $relpos(0, 10, 35), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + } + if (ATTACK_TYPE == 2) + { + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 10, 35), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + } + ANIM_ATTACK = "attack1"; + MOVE_RANGE = 150; + ATTACK_RANGE = 175; + ALLOW_CHANGE = 0; + ScheduleDelayedEvent(2, "allow_change"); + } + + void allow_change() + { + ALLOW_CHANGE = 1; + } + + void allow_spawn() + { + SPAWNED = 0; + } + + void turn_undead() + { + if (!(GetMonsterProperty("isalive"))) return; + if ((AM_SKELE)) return; + if ((REBUKE_DELAY)) return; + REBUKE_DELAY = 1; + ScheduleDelayedEvent(2.0, "reset_rebuke_delay"); + string THE_EXCORCIST = param2; + RE_REBUKING = 1; + PlayAnim("once", "castspell"); + SetMoveDest(GetEntityIndex(THE_EXCORCIST)); + SetSayTextRange(1024); + SayText("Your so-called 'divine' magics shall only get you burned!"); + REBUKE_TARGET = THE_EXCORCIST; + ScheduleDelayedEvent(1, "rebuke_rebuker"); + } + + void reset_rebuke_delay() + { + REBUKE_DELAY = 0; + } + + void rebuke_rebuker() + { + EmitSound(GetOwner(), CHAN_VOICE, SOUND_POISON, 10); + int ALT_SPELL_CHOICE = RandomInt(1, 2); + if (ALT_SPELL_CHOICE == 1) + { + int ALT_SPELL_CHOICE = RandomInt(1, 2); + string AIM_ANGLE = GetEntityDist(REBUKE_TARGET); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 10, 5), "none", 1000, 400, 1, "none"); + } + if (ALT_SPELL_CHOICE == 2) + { + SetVolume(10); + EmitSound(GetOwner(), "debris/beamstart15.wav"); + Effect("beam", "point", LIGHTNING_SPRITE, 200, /* TODO: $relpos */ $relpos(0, 0, 0), GetEntityOrigin(REBUKE_TARGET), Vector3(255, 255, 0), 150, 50, 0.5); + DoDamage(REBUKE_TARGET, "direct", 200, 100, GetOwner()); + ApplyEffect(param1, "effects/dot_lightning", 10, GetEntityIndex(GetOwner()), 10); + } + } + + void OnDamage(int damage) override + { + if ((AM_SKELE)) return; + if (!((param3).findFirst("holy") >= 0)) return; + if ((RETAL_DELAY)) return; + string H_ATTACKER = param1; + RETAL_DELAY = 1; + SetSayTextRange(1024); + SayText("Holy weapons call for unholy magic!"); + ScheduleDelayedEvent(6.0, "reset_retal_delay"); + ScheduleDelayedEvent(1.0, "rebuke_rebuker"); + } + + void reset_retal_delay() + { + RETAL_DELAY = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + NEXT_TARGET = GetEntityOrigin(m_hLastStruck); + NEXT_TARGET_ID = GetEntityIndex(m_hLastStruck); + if ((AM_SKELE)) + { + if (!(FIRE_PULSE_DELAY)) + { + } + if (!(DID_BURST_A)) + { + if (GetMonsterHP() < 2500) + { + } + if (GetEntityRange(m_hLastStruck) < 256) + { + } + DID_BURST_A = 1; + ScheduleDelayedEvent(0.1, "fire_pulse"); + } + if (!(DID_BURST_B)) + { + if (GetMonsterHP() < 2000) + { + } + if (GetEntityRange(m_hLastStruck) < 256) + { + } + DID_BURST_B = 1; + ScheduleDelayedEvent(0.1, "fire_pulse"); + } + if (!(DID_BURST_C)) + { + if (GetMonsterHP() < 1500) + { + } + if (GetEntityRange(m_hLastStruck) < 256) + { + } + DID_BURST_C = 1; + ScheduleDelayedEvent(0.1, "fire_pulse"); + } + if (!(DID_BURST_D)) + { + if (GetMonsterHP() < 500) + { + } + if (GetEntityRange(m_hLastStruck) < 256) + { + } + DID_BURST_D = 1; + ScheduleDelayedEvent(0.1, "fire_pulse"); + } + } + } + + void fire_pulse() + { + if ((FIRE_PULSE_DELAY)) return; + if (!(GetMonsterHP() > 0)) return; + FIRE_PULSE_DELAY = 1; + ScheduleDelayedEvent(5.0, "reset_fire_pulse_delay"); + FIRE_PULSE = 1; + PlayAnim("critical", "throw_scientist"); + SpawnNPC("monsters/summon/flame_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 20.0 + npcatk_suspend_ai(1); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 512, 0.0, 1.0, 0.0); + ScheduleDelayedEvent(0.2, "reset_fire_pulse"); + } + + void reset_fire_pulse_delay() + { + FIRE_PULSE_DELAY = 0; + } + + void reset_fire_pulse() + { + FIRE_PULSE = 0; + } + + void game_dodamage() + { + if (!(FIRE_PULSE)) return; + if (!(GetEntityRange(param2) < 256)) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 800, 800)); + } + +} + +} diff --git a/scripts/angelscript/keledrosruins/keledros_cl_cast.as b/scripts/angelscript/keledrosruins/keledros_cl_cast.as new file mode 100644 index 00000000..58869841 --- /dev/null +++ b/scripts/angelscript/keledrosruins/keledros_cl_cast.as @@ -0,0 +1,58 @@ +#pragma context client + +namespace MS +{ + +class KeledrosClCast : CGameScript +{ + float OFS_NEG; + float OFS_POS; + string SPRITE_1; + string script.boneidx; + string script.duration; + string script.modelid; + + KeledrosClCast() + { + SPRITE_1 = "3dmflaora.spr"; + Precache(SPRITE_1); + OFS_POS = 0.2; + OFS_NEG = -0.2; + } + + void OnRepeatTimer() + { + SetRepeatDelay(RandomInt(0.15, 0.25)); + string l.pos = /* TODO: $getcl */ $getcl(script.modelid, "bonepos", script.boneidx); + l.pos += Vector3(RandomInt(OFS_NEG, OFS_POS), RandomInt(OFS_NEG, OFS_POS), RandomInt(OFS_NEG, OFS_POS)); + ClientEffect("tempent", "sprite", SPRITE_1, l.pos, "setup_flames"); + } + + void client_activate() + { + script.modelid = param1; + script.boneidx = param2; + script.duration = param3; + if (!(/* TODO: $getcl */ $getcl("local.modelid", "exists"))) + { + effect_die(); + } + script_duration("effect_die"); + } + + void setup_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.3); + ClientEffect("tempent", "set_current_prop", "scale", 0.05); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.1, 0.15)); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + } + + void effect_die() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/keledrosruins/map_startup.as b/scripts/angelscript/keledrosruins/map_startup.as new file mode 100644 index 00000000..06725343 --- /dev/null +++ b/scripts/angelscript/keledrosruins/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "keledrosruins"; + MAP_WEATHER = "clear;snow;clear;storm;rain;rain"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "Keledros Palace"); + SetGlobalVar("G_MAP_DESC", "The insane wizard Keledros has made his home here. Woe to those who find it."); + SetGlobalVar("G_MAP_DIFF", "Levels 20-25 / 250-400hp"); + SetGlobalVar("G_WARN_HP", 250); + } + +} + +} diff --git a/scripts/angelscript/keledrosruins/spawner1.as b/scripts/angelscript/keledrosruins/spawner1.as new file mode 100644 index 00000000..62a590cf --- /dev/null +++ b/scripts/angelscript/keledrosruins/spawner1.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "keledrosruins/spawner_base.as" + +namespace MS +{ + +class Spawner1 : CGameScript +{ + Spawner1() + { + SetName("spawner1"); + } + + void spawn_undead() + { + if (ONE_IS_DEAD == 1) + { + SpawnNPC("monsters/anim_archer", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + CallExternal(m_hLastCreated, "one_was_summoned"); + } + +} + +} diff --git a/scripts/angelscript/keledrosruins/spawner2.as b/scripts/angelscript/keledrosruins/spawner2.as new file mode 100644 index 00000000..4a83184e --- /dev/null +++ b/scripts/angelscript/keledrosruins/spawner2.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "keledrosruins/spawner_base.as" + +namespace MS +{ + +class Spawner2 : CGameScript +{ + Spawner2() + { + SetName("spawner2"); + } + + void spawn_undead() + { + if (TWO_IS_DEAD == 1) + { + SpawnNPC("monsters/anim_archer", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + CallExternal(m_hLastCreated, "two_was_summoned"); + } + +} + +} diff --git a/scripts/angelscript/keledrosruins/spawner3.as b/scripts/angelscript/keledrosruins/spawner3.as new file mode 100644 index 00000000..32315de0 --- /dev/null +++ b/scripts/angelscript/keledrosruins/spawner3.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "keledrosruins/spawner_base.as" + +namespace MS +{ + +class Spawner3 : CGameScript +{ + Spawner3() + { + SetName("spawner3"); + } + + void spawn_undead() + { + if (THREE_IS_DEAD == 1) + { + SpawnNPC("monsters/anim_archer", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + CallExternal(m_hLastCreated, "three_was_summoned"); + } + +} + +} diff --git a/scripts/angelscript/keledrosruins/spawner4.as b/scripts/angelscript/keledrosruins/spawner4.as new file mode 100644 index 00000000..8d4d31dc --- /dev/null +++ b/scripts/angelscript/keledrosruins/spawner4.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "keledrosruins/spawner_base.as" + +namespace MS +{ + +class Spawner4 : CGameScript +{ + Spawner4() + { + SetName("spawner4"); + } + + void spawn_undead() + { + if (FOUR_IS_DEAD == 1) + { + SpawnNPC("monsters/anim_archer", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + CallExternal(m_hLastCreated, "four_was_summoned"); + } + +} + +} diff --git a/scripts/angelscript/keledrosruins/spawner5.as b/scripts/angelscript/keledrosruins/spawner5.as new file mode 100644 index 00000000..34f1e61f --- /dev/null +++ b/scripts/angelscript/keledrosruins/spawner5.as @@ -0,0 +1,22 @@ +#pragma context server + +#include "keledrosruins/spawner_base.as" + +namespace MS +{ + +class Spawner5 : CGameScript +{ + Spawner5() + { + SetName("spawner5"); + } + + void spawn_undead() + { + SpawnNPC("monsters/anim_warrior2", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + +} + +} diff --git a/scripts/angelscript/keledrosruins/spawner6.as b/scripts/angelscript/keledrosruins/spawner6.as new file mode 100644 index 00000000..a576bf02 --- /dev/null +++ b/scripts/angelscript/keledrosruins/spawner6.as @@ -0,0 +1,22 @@ +#pragma context server + +#include "keledrosruins/spawner_base.as" + +namespace MS +{ + +class Spawner6 : CGameScript +{ + Spawner6() + { + SetName("spawner6"); + } + + void spawn_undead() + { + SpawnNPC("monsters/anim_warrior2", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + +} + +} diff --git a/scripts/angelscript/keledrosruins/spawner_base.as b/scripts/angelscript/keledrosruins/spawner_base.as new file mode 100644 index 00000000..7cf67cc7 --- /dev/null +++ b/scripts/angelscript/keledrosruins/spawner_base.as @@ -0,0 +1,32 @@ +#pragma context server + +namespace MS +{ + +class SpawnerBase : CGameScript +{ + int EXIST; + + SpawnerBase() + { + EXIST = 0; + } + + void make_undead() + { + if (!(EXIST < 3)) return; + string l.sky = "origin"; + l.sky += Vector3(0, 0, 4096); + string origin = GetEntityOrigin(GetOwner()); + EXIST += 1; + spawn_undead(); + } + + void undead_died() + { + EXIST -= 1; + } + +} + +} diff --git a/scripts/angelscript/kfortress/map_startup.as b/scripts/angelscript/kfortress/map_startup.as new file mode 100644 index 00000000..2fd0300c --- /dev/null +++ b/scripts/angelscript/kfortress/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "kfortress"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Kharaztorant Fortress"); + SetGlobalVar("G_MAP_DESC", "You've found what is rumored to be a fortress of the dragon worshipper's cult"); + SetGlobalVar("G_MAP_DIFF", "Levels 30-40 / 600-800hp"); + SetGlobalVar("G_WARN_HP", 600); + } + +} + +} diff --git a/scripts/angelscript/kfortress/nh_appear.as b/scripts/angelscript/kfortress/nh_appear.as new file mode 100644 index 00000000..804d7add --- /dev/null +++ b/scripts/angelscript/kfortress/nh_appear.as @@ -0,0 +1,158 @@ +#pragma context client + +namespace MS +{ + +class NhAppear : CGameScript +{ + int ANG_COUNT; + int ANG_SPEED; + string F_SPRITE_SPEED; + string GLOW_COLOR; + int GLOW_RAD; + string MY_POS; + int ROT_RATE; + int SPRITES_ON; + int SPRITE_SPEED; + int START_DIST; + int X_ANG; + int Y_ANG; + int Z_ANG; + + NhAppear() + { + GLOW_RAD = 512; + GLOW_COLOR = Vector3(256, 128, 64); + START_DIST = 256; + SPRITE_SPEED = 120; + ROT_RATE = 36; + } + + void client_activate() + { + X_ANG = 0; + Y_ANG = 0; + Z_ANG = 0; + MY_POS = param1; + ANG_COUNT = 0; + ANG_SPEED = 1; + ClientEffect("light", "new", MY_POS, GLOW_RAD, GLOW_COLOR, 17.0); + ClientEffect("tempent", "sprite", "weapons/projectiles.mdl", MY_POS, "setup_knife"); + SPRITES_ON = 1; + sprite_vacuum(); + EmitSound3D("ambience/alien_humongo.wav", 10, MY_POS); + ScheduleDelayedEvent(0.1, "spookie_sound"); + ScheduleDelayedEvent(10.0, "close_effect"); + } + + void spookie_sound() + { + EmitSound3D("ambience/alienflyby1.wav", 10, MY_POS); + } + + void close_effect() + { + SPRITES_ON = 0; + EmitSound3D("magic/cast.wav", 10, MY_POS); + glitter_effect(); + ScheduleDelayedEvent(6.0, "ting_sound"); + ScheduleDelayedEvent(7.0, "end_effect"); + } + + void ting_sound() + { + string GROUND_POS = MY_POS; + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(MY_POS); + GROUND_POS = "z"; + EmitSound3D("weapons/dagger/daggermetal1.wav", 10, GROUND_POS); + } + + void glitter_effect() + { + ScheduleDelayedEvent(0.1, "glitter_effect"); + string GLITTER_POS = MY_POS; + GLITTER_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, RandomInt(0, 20), 0)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", GLITTER_POS, "setup_glitter"); + } + + void end_effect() + { + RemoveScript(); + } + + void sprite_vacuum() + { + if (!(SPRITES_ON)) return; + ScheduleDelayedEvent(0.1, "sprite_vacuum"); + F_SPRITE_SPEED = SPRITE_SPEED; + for (int i = 0; i < 10; i++) + { + sprite_sphere(); + } + F_SPRITE_SPEED = /* TODO: $neg */ $neg(SPRITE_SPEED); + for (int i = 0; i < 10; i++) + { + sprite_sphere(); + } + ANG_SPEED += 0.1; + } + + void sprite_sphere() + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", MY_POS, "setup_vac_sprite"); + } + + void setup_knife() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 15.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "body", 44); + } + + void setup_vac_sprite() + { + X_ANG += ROT_RATE; + Y_ANG += ROT_RATE; + if (X_ANG > 359) + { + X_ANG -= 359; + } + if (Y_ANG > 359) + { + Y_ANG -= 359; + } + Vector3 SPRITE_ANGS = Vector3(X_ANG, Y_ANG, Z_ANG); + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(SPRITE_ANGS, Vector3(0, F_SPRITE_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "renderamt", 150); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void setup_glitter() + { + ClientEffect("tempent", "set_current_prop", "death_delay", Random(0.5, 1.5)); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", -2.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + +} + +} diff --git a/scripts/angelscript/kfortress/nh_appear_cl.as b/scripts/angelscript/kfortress/nh_appear_cl.as new file mode 100644 index 00000000..58500621 --- /dev/null +++ b/scripts/angelscript/kfortress/nh_appear_cl.as @@ -0,0 +1,165 @@ +#pragma context client + +namespace MS +{ + +class NhAppearCl : CGameScript +{ + int ANG_COUNT; + int DISPLAY_KNIFE; + string F_SPRITE_SPEED; + string GLOW_COLOR; + int GLOW_RAD; + string MY_POS; + int ROT_RATE; + int SPRITES_ON; + int SPRITE_SPEED; + int START_DIST; + int X_ANG; + int Y_ANG; + + NhAppearCl() + { + GLOW_RAD = 512; + GLOW_COLOR = Vector3(256, 128, 64); + START_DIST = 256; + SPRITE_SPEED = 120; + ROT_RATE = 36; + } + + void client_activate() + { + X_ANG = 0; + Y_ANG = 0; + MY_POS = param1; + ANG_COUNT = 0; + DISPLAY_KNIFE = 1; + if (param2 != "PARAM2") + { + string DISPLAY_KNIFE = param2; + } + ClientEffect("light", "new", MY_POS, GLOW_RAD, GLOW_COLOR, 17.0); + if ((DISPLAY_KNIFE)) + { + ClientEffect("tempent", "sprite", "weapons/projectiles.mdl", MY_POS, "setup_knife"); + } + SPRITES_ON = 1; + sprite_vacuum(); + EmitSound3D("ambience/alien_humongo.wav", 10, MY_POS); + ScheduleDelayedEvent(0.1, "spookie_sound"); + ScheduleDelayedEvent(10.0, "close_effect"); + } + + void spookie_sound() + { + EmitSound3D("ambience/alienflyby1.wav", 10, MY_POS); + } + + void close_effect() + { + SPRITES_ON = 0; + EmitSound3D("magic/cast.wav", 10, MY_POS); + glitter_effect(); + if ((DISPLAY_KNIFE)) + { + ScheduleDelayedEvent(6.0, "ting_sound"); + } + ScheduleDelayedEvent(7.0, "end_effect"); + } + + void glitter_effect() + { + ScheduleDelayedEvent(0.1, "glitter_effect"); + string GLITTER_POS = MY_POS; + GLITTER_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, RandomInt(0, 20), 0)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", GLITTER_POS, "setup_glitter"); + } + + void ting_sound() + { + string GROUND_POS = MY_POS; + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(MY_POS); + GROUND_POS = "z"; + EmitSound3D("weapons/dagger/daggermetal1.wav", 10, GROUND_POS); + } + + void end_effect() + { + RemoveScript(); + } + + void sprite_vacuum() + { + if (!(SPRITES_ON)) return; + ScheduleDelayedEvent(0.1, "sprite_vacuum"); + F_SPRITE_SPEED = SPRITE_SPEED; + for (int i = 0; i < 10; i++) + { + sprite_sphere(); + } + F_SPRITE_SPEED = /* TODO: $neg */ $neg(SPRITE_SPEED); + for (int i = 0; i < 10; i++) + { + sprite_sphere(); + } + } + + void sprite_sphere() + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", MY_POS, "setup_vac_sprite"); + } + + void setup_knife() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 15.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "body", 44); + } + + void setup_vac_sprite() + { + X_ANG += ROT_RATE; + Y_ANG += ROT_RATE; + if (X_ANG > 359) + { + X_ANG -= 359; + } + if (Y_ANG > 359) + { + Y_ANG -= 359; + } + Vector3 SPRITE_ANGS = Vector3(X_ANG, Y_ANG, Z_ANG); + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(SPRITE_ANGS, Vector3(0, F_SPRITE_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "renderamt", 150); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void setup_glitter() + { + ClientEffect("tempent", "set_current_prop", "death_delay", Random(0.5, 1.5)); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", -2.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + +} + +} diff --git a/scripts/angelscript/littleg/melanion.as b/scripts/angelscript/littleg/melanion.as new file mode 100644 index 00000000..8f47798f --- /dev/null +++ b/scripts/angelscript/littleg/melanion.as @@ -0,0 +1,183 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Melanion : CGameScript +{ + int B_QUEST_DONE; + int NO_JOB; + int NO_RUMOR; + string QUEST_COMPLETER; + int TALKED_SALANDRIA; + int TOLD_STORY; + + Melanion() + { + NO_JOB = 1; + NO_RUMOR = 1; + B_QUEST_DONE = 0; + TALKED_SALANDRIA = 0; + } + + void OnSpawn() override + { + SetName("melanion"); + SetHealth(30); + SetGold(50); + SetName("Ambassador Melanion Belore"); + SetWidth(32); + SetHeight(72); + SetRace("elf"); + SetRoam(false); + SetModel("npc/elf_f.mdl"); + SetInvincible(true); + // TODO: UNCONVERTED: setmodelbody 0 + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_job", "documents"); + } + + void askbook() + { + TALKED_SALANDRIA = 1; + } + + void say_hi() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(B_QUEST_DONE)) + { + PlayAnim("once", "no"); + SayText(I + " will loose my job...and the whole transaction will fail...please leave me alone."); + } + if ((B_QUEST_DONE)) + { + string WINNER_NAME = GetEntityName(QUEST_COMPLETER); + SayText("Hello! " + I + " m so happy now that WINNER_NAME has returned my documents!"); + } + } + + void say_job() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(TALKED_SALANDRIA)) return; + if ((B_QUEST_DONE)) return; + SayText("You know about the documents? You must have learned of it from Salandria."); + ScheduleDelayedEvent(4, "say_bothered1a"); + } + + void say_bothered1a() + { + PlayAnim("once", "no"); + SayText(..I + " am a diplomat from Kray Eldorad , i had some documents.."); + ScheduleDelayedEvent(4, "story"); + } + + void story() + { + PlayAnim("once", "converse1"); + SayText("We were planning a diplomatic meeting. " + I + " came all the way from Kray Eldorad."); + ScheduleDelayedEvent(5, "say_story2"); + } + + void say_story2() + { + PlayAnim("critial", "talkright"); + SayText(I + " was walking in the garden , when a man came by , he stole my documents!."); + ScheduleDelayedEvent(5, "say_story3"); + } + + void say_story3() + { + PlayAnim("critial", "converse1"); + SayText("Thoose Documents had very important information , i chased him all the way to Thornlands , to a place called the Spider Cavern."); + ScheduleDelayedEvent(7, "say_story4"); + } + + void say_story4() + { + PlayAnim("once", "converse1"); + SayText(I + "was then startled by many spiders , and had to flee , thoose documents " + MUST + " be back before the meeting , please help me."); + ScheduleDelayedEvent(6, "say_story5"); + } + + void say_story5() + { + PlayAnim("once", "converse1"); + SayText("He is in there somewhere , please find him...it is so important for me..."); + ScheduleDelayedEvent(5, "say_story6"); + } + + void say_story6() + { + PlayAnim("once", "converse1"); + SayText(I + " tried talking to Edrin but he said his guards were far too busy and that he could not spare one."); + ScheduleDelayedEvent(5, "say_story7"); + } + + void say_story7() + { + PlayAnim("once", "yes"); + SayText("If you can return my documents , i will make sure you will be rewarded."); + TOLD_STORY = 1; + } + + void give_book() + { + ReceiveOffer("accept"); + PlayAnim("once", "eye_wipe"); + SayText("The Documents! By Felewyn Bless you!"); + Say("[.10] [.20] [.20] [.10] [.10] [.10] [.25] [.20] [.10] [.30] [.20] [.40]"); + QUEST_COMPLETER = param1; + B_QUEST_DONE = 1; + ScheduleDelayedEvent(2, "recvdocuments_2"); + } + + void recvbook_2() + { + B_QUEST_DONE = 1; + CallExternal(FindEntityByName("salandria"), "documentsfound"); + SayText("Here , some coins , and a gift from Salandria."); + // TODO: offer QUEST_COMPLETER gold RandomInt(13, 16) + // TODO: offer QUEST_COMPLETE item_bracelet + } + + void game_menu_getoptions() + { + if ((ItemExists(param1, "item_documents"))) + { + string reg.mitem.title = "Return documents"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_documents"; + string reg.mitem.callback = "give_documents"; + } + if ((TALKED_SALANDRIA)) + { + if (!(B_QUEST_DONE)) + { + } + string reg.mitem.title = "Ask about Documents"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + } + } + +} + +} diff --git a/scripts/angelscript/littleg/salandria.as b/scripts/angelscript/littleg/salandria.as new file mode 100644 index 00000000..9083abdd --- /dev/null +++ b/scripts/angelscript/littleg/salandria.as @@ -0,0 +1,185 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Salandria : CGameScript +{ + string MEL_ID; + int NO_JOB; + int QUEST_DONE; + int SAID_MEL; + + Salandria() + { + NO_JOB = 1; + QUEST_DONE = 0; + } + + void OnSpawn() override + { + SetHealth(30); + SetGold(50); + SetName("Elven Child"); + SetWidth(32); + SetHeight(72); + SetRace("elf"); + SetRoam(false); + SetModel("npc/elf_fc.mdl"); + SetInvincible(true); + // TODO: UNCONVERTED: setmodelbody 0 + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_what", "documents"); + CatchSpeech("say_huh", "melanoin"); + CatchSpeech("say_rumour", "rumour"); + } + + void say_job() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + say_hi2(); + } + + void say_rumor() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + say_rumour(); + } + + void say_hi() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(QUEST_DONE)) + { + say_hi_normal(); + } + if ((QUEST_DONE)) + { + say_thanx(); + } + } + + void say_thanx() + { + SayText("Thanks again for what you ve done for Melanion, You are my new friend now."); + } + + void say_hi_normal() + { + SayText("Hello! My name is Salandria."); + SetName("Salandria"); + ScheduleDelayedEvent(3, "say_hi2"); + } + + void say_hi2() + { + MEL_ID = FindEntityByName("melanion"); + CallExternal(MEL_ID, "askdocuments"); + SayText("You look like a friendly person , maybe you can help me with something."); + ScheduleDelayedEvent(4, "say_hi3"); + } + + void say_hi3() + { + SayText("My mother s good friend Melanion took me here, but she is very distressed."); + ScheduleDelayedEvent(7, "say_hi4"); + } + + void say_hi4() + { + SayText("She lost some documents from our home. It means so much to her."); + SayText("she s been very quiet, barely eats, and talks of nothing but the documents."); + SAID_MEL = 1; + } + + void say_what() + { + if ((QUEST_DONE)) return; + SayText(I + " found her with a tragic look , and no documents."); + ScheduleDelayedEvent(3, "say_what2"); + } + + void say_what2() + { + SayText("She is getting better but she is still so sad."); + ScheduleDelayedEvent(3, "say_what3"); + } + + void say_what3() + { + SayText("You d best ask her, she s been distraught over the loss of her documents."); + } + + void say_huh() + { + SayText("Who are you talking about? You mean Melanion? She s up there."); + } + + void bookfound() + { + QUEST_DONE = 1; + } + + void say_rumour() + { + if (param1 == "PARAM1") + { + if (GetEntityRange("ent_lastspoke") > 128) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PlayAnim("once", "pondering"); + SayText(I + " heard Melanion s meeting has something to do with Eswen Sylen and about allowing humans inside."); + } + + void game_menu_getoptions() + { + if (!(SAID_URD)) + { + string reg.mitem.title = "Ask about Jobs"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + } + if (!(SAID_URD)) return; + if (!(QUEST_DONE)) + { + string reg.mitem.title = "Ask About Melanion"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_what"; + } + if ((QUEST_DONE)) + { + string reg.mitem.title = "Ask About Melanion"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_thanx"; + } + } + +} + +} diff --git a/scripts/angelscript/lodagond-1/map_startup.as b/scripts/angelscript/lodagond-1/map_startup.as new file mode 100644 index 00000000..ad501cde --- /dev/null +++ b/scripts/angelscript/lodagond-1/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "lodagond-1"; + MAP_WEATHER = "clear;clear;clear;snow;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Lodagond Skyfortress Part I"); + SetGlobalVar("G_MAP_DESC", "You managed to access Maldora's floating fortress... but can you survive?"); + SetGlobalVar("G_MAP_DIFF", "Levels 35-40 / 700+hp"); + SetGlobalVar("G_WARN_HP", 700); + } + +} + +} diff --git a/scripts/angelscript/lodagond-2/map_startup.as b/scripts/angelscript/lodagond-2/map_startup.as new file mode 100644 index 00000000..a378af2f --- /dev/null +++ b/scripts/angelscript/lodagond-2/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "lodagond-2"; + MAP_WEATHER = "clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Lodagond Skyfortress Part II"); + SetGlobalVar("G_MAP_DESC", "Deeper into the fortress you go..."); + SetGlobalVar("G_MAP_DIFF", "Levels 35-40 / 700+hp"); + SetGlobalVar("G_WARN_HP", 700); + } + +} + +} diff --git a/scripts/angelscript/lodagond-3/map_startup.as b/scripts/angelscript/lodagond-3/map_startup.as new file mode 100644 index 00000000..f4e99990 --- /dev/null +++ b/scripts/angelscript/lodagond-3/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "lodagond-3"; + MAP_WEATHER = "clear;clear;clear;rain"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "Lodagond Skyfortress Part III"); + SetGlobalVar("G_MAP_DESC", "The arboretum contains a fortress within a fortress."); + SetGlobalVar("G_MAP_DIFF", "Levels 35-40 / 700+hp"); + SetGlobalVar("G_WARN_HP", 700); + } + +} + +} diff --git a/scripts/angelscript/lodagond-4/map_startup.as b/scripts/angelscript/lodagond-4/map_startup.as new file mode 100644 index 00000000..b3441756 --- /dev/null +++ b/scripts/angelscript/lodagond-4/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "lodagond-4"; + MAP_WEATHER = "clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Lodagond Skyfortress Part IV"); + SetGlobalVar("G_MAP_DESC", "Onto the final battle..."); + SetGlobalVar("G_MAP_DIFF", "Levels 35-40 / 700+hp"); + SetGlobalVar("G_WARN_HP", 700); + } + +} + +} diff --git a/scripts/angelscript/lodagond/ice_mage_image.as b/scripts/angelscript/lodagond/ice_mage_image.as new file mode 100644 index 00000000..f088b492 --- /dev/null +++ b/scripts/angelscript/lodagond/ice_mage_image.as @@ -0,0 +1,152 @@ +#pragma context server + +namespace MS +{ + +class IceMageImage : CGameScript +{ + string ANIM_TALK; + float BEAM_DURATION; + string FINGER_ADJ; + float FREQ_BEAM; + int IS_UNHOLY; + string MAGE_NAME; + string MY_OWNER; + + IceMageImage() + { + IS_UNHOLY = 1; + FREQ_BEAM = 3.0; + BEAM_DURATION = 50.0; + ANIM_TALK = "ref_shoot_staff"; + FINGER_ADJ = "$relpos($vec(0,MY_YAW,0),$vec(0,30,54))"; + } + + void OnSpawn() override + { + SetModel("monsters/ice_mage.mdl"); + SetName("Ice Mage"); + SetInvincible(true); + SetRace("demon"); + SetWidth(32); + SetHeight(96); + SetProp(GetOwner(), "skin", 1); + SetNoPush(true); + SetSayTextRange(2048); + // svplaysound: svplaysound 1 1 magic/freezeray_loop_quiet.wav + EmitSound(1, 1, "magic/freezeray_loop_quiet.wav"); + SetIdleAnim("ref_shoot_rayspell"); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MAGE_NAME = param2; + if (MAGE_NAME == "mage1") + { + SetName("Ice Mage Zarcon"); + SetName("mage1"); + } + if (MAGE_NAME == "mage2") + { + SetName("Ice Mage Phrezax"); + SetName("mage2"); + } + if (MAGE_NAME == "mage3") + { + SetName("Ice Mage Frozon"); + SetName("mage3"); + } + if (MAGE_NAME == "mage4") + { + SetName("Ice Mage Depthaw"); + SetName("mage4"); + } + SetAngles("face"); + ScheduleDelayedEvent(0.1, "straighten_up"); + } + + void straighten_up() + { + string MY_YAW = GetMonsterProperty("angles.yaw"); + SetAngles("face"); + ScheduleDelayedEvent(1.0, "draw_beam"); + } + + void ext_convo2() + { + PlayAnim("critical", ANIM_TALK); + SayText(I + " m sorry, we were told to freeze you here forever."); + EmitSound(GetOwner(), 2, "voices/sc_convo2.wav", 10); + } + + void ext_convo3() + { + PlayAnim("critical", ANIM_TALK); + SayText("Yes , releasing you would rather countermand orders..."); + EmitSound(GetOwner(), 2, "voices/sc_convo3.wav", 10); + } + + void ext_convo4() + { + PlayAnim("critical", ANIM_TALK); + SayText("If only you had pledged your loyalty to Lor Malgoriand , we wouldn t have to waste our time."); + EmitSound(GetOwner(), 2, "voices/sc_convo4.wav", 10); + } + + void ext_convo6() + { + PlayAnim("critical", ANIM_TALK); + SayText("Maldora " + IS + " Lor Malgoriand you insolent fool!"); + EmitSound(GetOwner(), 2, "voices/sc_convo6.wav", 10); + } + + void ext_convo7() + { + PlayAnim("critical", ANIM_TALK); + SayText("And we will be there when he is restored to his throne in the Palace of Shae-hae-deed."); + EmitSound(GetOwner(), 2, "voices/sc_convo7.wav", 10); + } + + void ext_convo9() + { + PlayAnim("critical", ANIM_TALK); + SayText("Oh we see them , and when we re done with you..."); + EmitSound(GetOwner(), 2, "voices/sc_convo9.wav", 10); + } + + void ext_convo10() + { + PlayAnim("critical", ANIM_TALK); + SayText("We ll mount their corpses in this beautiful ice casket, along with yours."); + EmitSound(GetOwner(), 2, "voices/sc_convo10.wav", 10); + } + + void ext_mage_go() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + // svplaysound: svplaysound 1 0 magic/freezeray_loop_quiet.wav + EmitSound(1, 0, "magic/freezeray_loop_quiet.wav"); + SpawnNPC("monsters/ice_mage", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityName(GetOwner()), MY_OWNER + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void draw_beam() + { + string TRACE_START = GetEntityOrigin(GetOwner()); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + TRACE_START += FINGER_ADJ; + string TRACE_END = GetEntityOrigin(MY_OWNER); + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 64)); + Effect("beam", "point", "lgtning.spr", 10, TRACE_START, TRACE_END, Vector3(200, 200, 255), 255, 0, BEAM_DURATION); + } + +} + +} diff --git a/scripts/angelscript/lodagond/maldora.as b/scripts/angelscript/lodagond/maldora.as new file mode 100644 index 00000000..2f6df194 --- /dev/null +++ b/scripts/angelscript/lodagond/maldora.as @@ -0,0 +1,542 @@ +#pragma context server + +#include "lodagond/maldora_fragment.as" + +namespace MS +{ + +class Maldora : CGameScript +{ + int AM_UBER; + string APPLIED_BEAM; + string AS_ATTACKING; + string BARRIER_COLOR; + string BARRIER_DELAY; + float BASE_MOVESPEED; + string BEAM_COUNT; + string BEAM_ON; + string BEAM_TARGET; + string CHAIN_COUNT; + string CHAIN_ON; + string CUR_CHAIN_TARGET; + int DMG_BARRIER; + float DMG_CHAIN; + float DMG_PUSH_BEAM; + int DMG_ROCKS; + float DMG_SHOCK; + float DMG_WAND; + int EFFECT_DELAY; + int FIN_EXP; + float FREQ_SOUND; + string G_DEVELOPER; + int IMAGES_ALIVE; + int IS_UNHOLY; + string LAST_AXE_PICK; + string LIGHT_COLOR; + int LIGHT_RAD; + int ME_DEAD; + int MINIONS_ALIVE; + int MINION_LIMIT; + string MINION_SCRIPT; + int NOT_FRAGMENT; + int NO_INTRO; + int NO_MOVE; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_IFSEEN; + int NPC_PROXACT_RANGE; + int NPC_PROX_ACTIVATE; + int NUM_SPELLS; + string RND_AXE; + string SHADOW_SCRIPT; + int SORC_SPAWNED; + int SPELL_CHOICE; + int SPELL_SUSPEND; + int WAND_ATK; + int WAND_DOT; + string WAND_TARGET; + string WAND_TYPE; + + Maldora() + { + if ((StringToLower(GetMapName())).findFirst("lodagond") == 0) + { + NPC_IS_BOSS = 1; + } + LIGHT_COLOR = Vector3(128, 128, 128); + LIGHT_RAD = 256; + WAND_DOT = 40; + NPC_BOSS_REGEN_RATE = 0.02; + NPC_BOSS_RESTORATION = 0.25; + BASE_MOVESPEED = 2.0; + NUM_SPELLS = 8; + AM_UBER = 1; + IS_UNHOLY = 1; + SHADOW_SCRIPT = "ms_wicardoven/maldora_image"; + MINION_SCRIPT = "monsters/maldora_gminion_random"; + MINION_LIMIT = 4; + FREQ_SOUND = 10.0; + NO_INTRO = 1; + NPC_PROX_ACTIVATE = 1; + NOT_FRAGMENT = 1; + FIN_EXP = 20000; + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 640; + NPC_PROXACT_IFSEEN = 1; + NPC_PROXACT_EVENT = "combat_go"; + DMG_PUSH_BEAM = Random(20, 60); + DMG_CHAIN = Random(20, 60); + DMG_SHOCK = 100.0; + DMG_ROCKS = RandomInt(200, 800); + DMG_WAND = Random(200, 1000); + DMG_BARRIER = 400; + BARRIER_COLOR = Vector3(255, 0, 0); + } + + void game_precache() + { + Precache("monsters/sorc_chief2"); + Precache("ms_wicardoven/maldora_dead"); + Precache("lodagond/maldora_fragment"); + Precache("monsters/summon/rock_storm"); + Precache("monsters/maldora_gminion_random"); + Precache("ms_wicardoven/maldora_image"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal("players", "ext_clear_valid_gauntlets"); + ME_DEAD = 1; + CallExternal("all", "maldoraf_died"); + // svplaysound: svplaysound 2 0 ambience/alienvoices1.wav + EmitSound(2, 0, "ambience/alienvoices1.wav"); + SetProp(GetOwner(), "renderamt", 0); + if ((SORC_SPAWNED)) + { + WAND_TYPE = -1; + } + SpawnNPC("ms_wicardoven/maldora_dead", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: "crow_final", WAND_TYPE + SetSolid("none"); + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + } + + void OnSpawn() override + { + SetName("Maldora"); + SetHealth(10000); + SetRace("demon"); + SetWidth(32); + SetHeight(86); + // svplaysound: svplaysound 2 0 ambience/alienvoices1.wav + EmitSound(2, 0, "ambience/alienvoices1.wav"); + SetMoveSpeed(2.0); + NPC_GIVE_EXP = FIN_EXP; + SetRoam(false); + WAND_TARGET = "unset"; + SetHearingSensitivity(11); + SetInvincible(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetDamageResistance("all", 0.35); + SetDamageResistance("fire", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("magic", 0.0); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("dark", 0.65); + SetDamageResistance("holy", 1.0); + SetDamageResistance("stun", 0); + SetModel(MONSTER_MODEL); + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", 0); + npcatk_suspend_ai(); + IMAGES_ALIVE = 0; + MINIONS_ALIVE = 0; + SetSayTextRange(2048); + EmitSound(GetOwner(), 0, "magic/spawn_loud.wav", 10); + ScheduleDelayedEvent(0.1, "fade_me_in"); + SetProp(GetOwner(), "skin", AXESKIN_NULL); + combat_go(); + if (!(true)) return; + if (!(G_SHAD_ORC)) return; + ScheduleDelayedEvent(0.1, "spawn_shad"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void fade_me_in() + { + CallExternal(GAME_MASTER, "gm_fade_in", GetEntityIndex(GetOwner()), 2); + } + + void fade_in_done() + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + + void OnPostSpawn() override + { + SetGlobalVar("G_MALDORA_PRESENT", 1); + ClientEvent("persist", "all", "effects/sfx_motionblur_perm", GetEntityIndex(GetOwner()), 0); + } + + void reset_props() + { + SetRepeatDelay(FREQ_SOUND); + if ((ME_DEAD)) return; + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), LIGHT_COLOR, LIGHT_RAD, FREQ_SOUND); + // svplaysound: svplaysound 2 0 ambience/alienvoices1.wav + EmitSound(2, 0, "ambience/alienvoices1.wav"); + ScheduleDelayedEvent(0.1, "sound_loop"); + } + + void sound_loop() + { + // svplaysound: svplaysound 2 8 ambience/alienvoices1.wav + EmitSound(2, 8, "ambience/alienvoices1.wav"); + } + + void reset_effect_delay() + { + EFFECT_DELAY = 0; + } + + void pick_spell() + { + SPELL_CHOICE = RandomInt(1, NUM_SPELLS); + if ((BEAM_ON)) + { + int EXIT_SUB = 1; + } + if ((CHAIN_ON)) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) + { + ScheduleDelayedEvent(0.5, "pick_spell"); + } + if ((EXIT_SUB)) return; + if (G_DEVELOPER > 0) + { + SPELL_CHOICE = G_DEVELOPER; + G_DEVELOPER = 0; + } + if (GetEntityRange(SPELL_TARGET) > 2048) + { + SPELL_CHOICE = 0; + } + if (!(IsEntityAlive(SPELL_TARGET))) + { + SPELL_CHOICE = 0; + } + if (GetRelationship(SPELL_TARGET) == "ally") + { + SPELL_CHOICE = 0; + } + if ((SPELL_SUSPEND)) + { + SPELL_CHOICE = 0; + } + if (SPELL_CHOICE == 0) + { + int EXIT_SUB = 1; + if (!(BARRIER_ON)) + { + } + if ((NO_MOVE)) + { + resume_moving(); + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) + { + ScheduleDelayedEvent(0.5, "pick_spell"); + } + if ((EXIT_SUB)) return; + if (SPELL_CHOICE == 1) + { + if ((BARRIER_DELAY)) + { + SPELL_CHOICE = RandomInt(2, NUM_SPELLS); + LogDebug("barrier_no_go - barrier delay"); + int EXIT_SUB = 1; + } + if (!(BARRIER_DELAY)) + { + } + BARRIER_DELAY = 1; + BARRIER_FREQ("reset_barrier_delay"); + ScheduleDelayedEvent(0.1, "raise_barrier"); + } + if ((EXIT_SUB)) + { + ScheduleDelayedEvent(0.5, "pick_spell"); + } + if ((EXIT_SUB)) return; + if (SPELL_CHOICE == 2) + { + BEAM_ON = 1; + face_target(SPELL_TARGET); + PlayAnim("critical", ANIM_BOLT); + BEAM_COUNT = 0; + APPLIED_BEAM = 0; + BEAM_TARGET = SPELL_TARGET; + ScheduleDelayedEvent(0.1, "beam_push"); + } + if (SPELL_CHOICE == 3) + { + CHAIN_ON = 1; + CUR_CHAIN_TARGET = 0; + face_target(SPELL_TARGET); + PlayAnim("critical", ANIM_CAST); + CHAIN_COUNT = 0; + ScheduleDelayedEvent(0.1, "chain_lightning"); + } + if (SPELL_CHOICE == 4) + { + if ((G_MAL_ROCK_STORMS)) + { + ScheduleDelayedEvent(0.2, "pick_spell"); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + SetGlobalVar("G_MAL_ROCK_STORMS", 1); + PlayAnim("critical", ANIM_CAST); + string NUM_ROCKS = GetPlayerCount(); + if (NUM_ROCKS > 4) + { + int NUM_RUCKS = 4; + } + SpawnNPC("monsters/summon/rock_storm", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), NUM_ROCKS, DMG_ROCKS, 64, 90 + } + if ((EXIT_SUB)) return; + if (SPELL_CHOICE == 5) + { + if ((BARRIER_ON)) + { + ScheduleDelayedEvent(0.2, "pick_spell"); + int EXIT_SUB = 1; + } + if (!(BARRIER_ON)) + { + } + if (IMAGES_ALIVE >= 1) + { + SPELL_CHOICE = RandomInt(6, NUM_SPELLS); + } + if (IMAGES_ALIVE == 0) + { + } + if (RandomInt(1, 3) == 1) + { + if (!(AM_UBER)) + { + } + SayText("Shadows of my shadow..."); + EmitSound(GetOwner(), 0, "voices/lodagond-4/maldora_summoning.wav", 10); + } + ScheduleDelayedEvent(2.7, "laugh_it_up"); + stop_moving(); + PlayAnim("critical", ANIM_CAST); + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 2, 2); + SpawnNPC(SHADOW_SCRIPT, /* TODO: $relpos */ $relpos(0, 64, -35), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET, 45, AM_UBER + ScheduleDelayedEvent(0.1, "make_shadow2"); + if ((AM_UBER)) + { + ScheduleDelayedEvent(0.2, "make_shadow3"); + ScheduleDelayedEvent(0.4, "make_shadow4"); + } + IMAGES_ALIVE = 2; + ScheduleDelayedEvent(1.0, "resume_solid"); + ScheduleDelayedEvent(3.0, "resume_moving"); + } + if (SPELL_CHOICE == 6) + { + if ((BARRIER_ON)) + { + ScheduleDelayedEvent(0.2, "pick_spell"); + int EXIT_SUB = 1; + } + if (MINIONS_ALIVE >= MINION_LIMIT) + { + SPELL_CHOICE = RandomInt(7, NUM_SPELLS); + } + if (MINIONS_ALIVE < MINION_LIMIT) + { + } + MINIONS_ALIVE += 1; + PlayAnim("critical", ANIM_CAST); + EmitSound(GetOwner(), 0, "monsters/skeleton/calrain3.wav", 10); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 2, 2); + SpawnNPC(MINION_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, -64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET + stop_moving(0.9); + ScheduleDelayedEvent(1.0, "leap_away"); + } + if (SPELL_CHOICE == 7) + { + string L_LAST_AXE_PICK = LAST_AXE_PICK; + L_LAST_AXE_PICK += 20.0; + if (GetGameTime() < L_LAST_AXE_PICK) + { + int EXIT_SUB = 1; + ScheduleDelayedEvent(0.2, "pick_spell"); + } + if (GetGameTime() > L_LAST_AXE_PICK) + { + } + select_axe(); + LAST_AXE_PICK = GetGameTime(); + } + if ((EXIT_SUB)) return; + if (SPELL_CHOICE == 8) + { + ScheduleDelayedEvent(0.2, "pick_spell"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SPELL_FREQ("pick_spell"); + } + + void select_axe() + { + RND_AXE += 1; + SetProp(GetOwner(), "skin", AXESKIN_WHITE); + SPELL_SUSPEND = 1; + NO_MOVE = 1; + Effect("glow", GetOwner(), Vector3(255, 255, 255), 256, 2, 2); + EmitSound(GetOwner(), 0, "magic/spawn_loud.wav", 10); + if (RND_AXE == 5) + { + RND_AXE = 0; + } + if (RND_AXE == 0) + { + Vector3 WAND_COLOR = Vector3(255, 0, 0); + WAND_TYPE = AXESKIN_FIRE; + } + if (RND_AXE == 1) + { + Vector3 WAND_COLOR = Vector3(255, 255, 255); + WAND_TYPE = AXESKIN_DARK; + } + if (RND_AXE == 2) + { + Vector3 WAND_COLOR = Vector3(64, 64, 255); + WAND_TYPE = AXESKIN_COLD; + } + if (RND_AXE == 3) + { + Vector3 WAND_COLOR = Vector3(0, 255, 0); + WAND_TYPE = AXESKIN_POISON; + } + if (RND_AXE == 4) + { + Vector3 WAND_COLOR = Vector3(255, 255, 0); + WAND_TYPE = AXESKIN_LIGHTNING; + } + string BEAM_START = GetEntityProperty(GetOwner(), "attachpos"); + BEAM_START += "z"; + Effect("beam", "end", "lgtning.spr", 200, BEAM_START, GetEntityIndex(GetOwner()), 1, WAND_COLOR, 255, 100, 2.0); + ScheduleDelayedEvent(1.5, "select_axe2"); + } + + void select_axe2() + { + SPELL_SUSPEND = 0; + NO_MOVE = 0; + SetProp(GetOwner(), "skin", WAND_TYPE); + } + + void wand_strike_dmg() + { + WAND_ATK = 0; + if (WAND_TYPE == "WAND_TYPE") + { + if (RandomInt(1, 5) == 1) + { + } + ApplyEffect(param1, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + } + } + + void strike_wand() + { + AS_ATTACKING = GetGameTime(); + if (!(GetEntityRange(WAND_TARGET) < ATTACK_HITRANGE)) return; + WAND_ATK = 1; + if (WAND_TYPE == AXESKIN_FIRE) + { + string DMG_TYPE = "fire"; + string EFFECT_TYPE = WAND_FIRE_EFFECT; + } + if (WAND_TYPE == AXESKIN_DARK) + { + string DMG_TYPE = "magic"; + string EFFECT_TYPE = WAND_DARK_EFFECT; + } + if (WAND_TYPE == AXESKIN_COLD) + { + string DMG_TYPE = "cold"; + string EFFECT_TYPE = WAND_COLD_EFFECT; + } + if (WAND_TYPE == AXESKIN_POISON) + { + string DMG_TYPE = "poison"; + string EFFECT_TYPE = WAND_POISON_EFFECT; + } + if (WAND_TYPE == AXESKIN_LIGHTNING) + { + string DMG_TYPE = "lightning"; + string EFFECT_TYPE = WAND_LIGHTNING_EFFECT; + } + if (WAND_TYPE == "WAND_TYPE") + { + string DMG_TYPE = "blunt"; + string EFFECT_TYPE = "none"; + } + DoDamage(WAND_TARGET, ATTACK_HITRANGE, DMG_WAND, 0.8, "blunt"); + if (EFFECT_TYPE == WAND_DARK_EFFECT) + { + ApplyEffect(WAND_TARGET, WAND_DARK_EFFECT, 10.0, 0, 1); + } + else + { + if (EFFECT_TYPE != "none") + { + } + ApplyEffect(WAND_TARGET, EFFECT_TYPE, 5.0, GetEntityIndex(GetOwner()), WAND_DOT); + } + } + + void spawn_shad() + { + SORC_SPAWNED = 1; + SetGlobalVar("G_SHAD_ORC", 0); + SpawnNPC("monsters/sorc_chief2", /* TODO: $relpos */ $relpos(0, 64, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + ScheduleDelayedEvent(4.0, "spawn_shad2"); + } + + void spawn_shad2() + { + SayText("It'll take more than a renegade orc and a couple of wayward humans to defeat me!"); + EmitSound(GetOwner(), 0, "voices/lodagond-4/maldora_orcspot.wav", 10); + ScheduleDelayedEvent(5.9, "laugh_it_up"); + } + +} + +} diff --git a/scripts/angelscript/lodagond/maldora_fragment.as b/scripts/angelscript/lodagond/maldora_fragment.as new file mode 100644 index 00000000..80419302 --- /dev/null +++ b/scripts/angelscript/lodagond/maldora_fragment.as @@ -0,0 +1,1123 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class MaldoraFragment : CGameScript +{ + string ANIM_BOLT; + string ANIM_CAST; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_LOOK; + string ANIM_ROCK; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_WALK; + string ANIM_WALK_NORM; + string ANIM_WAND; + string APPLIED_BEAM; + string AS_ATTACKING; + int AXESKIN_COLD; + int AXESKIN_DARK; + int AXESKIN_FIRE; + int AXESKIN_LIGHTNING; + int AXESKIN_NULL; + int AXESKIN_POISON; + int AXESKIN_WHITE; + string BARRIER_COLOR; + int BARRIER_DELAY; + float BARRIER_FREQ; + int BARRIER_ON; + string BARRIER_TARGS; + string BEAM_COUNT; + string BEAM_ON; + string BEAM_TARGET; + string CHAIN_COUNT; + int CHAIN_COUNT_LIMIT; + string CHAIN_LIST; + string CHAIN_ON; + string CL_BEAM_IDX; + int COMBAT_ON; + string CUR_CHAIN_TARGET; + string DEBUG_CALLED_COMBAT; + int DEBUG_DID_POSTSPAWN; + int DEBUG_START_CONVO; + int DMG_BARRIER; + float DMG_CHAIN; + float DMG_PUSH_BEAM; + int DMG_ROCKS; + float DMG_SHOCK; + float DMG_WAND; + string FELLOW_FRAG_NEARBY; + string FINGER_ADJ; + int FIN_EXP; + int FREQ_SPAM; + int GAVE_WARNING; + string G_DEVELOPER; + int G_MALDORA_SPELLING; + string G_MALDORA_SPELLTIME; + int IMAGES_ALIVE; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + float LAVA_FREQ; + string MALDORA_IDX; + string MALDORA_LIST; + int MINIONS_ALIVE; + int MINION_LIMIT; + string MINION_SCRIPT; + string MONSTER_MODEL; + string NEXT_MINION; + string NME_LIST; + int NO_INTRO; + int NO_MOVE; + int NO_SPAWN_STUCK_CHECK; + int NO_STUCK_CHECKS; + int NPC_FORCED_MOVEDEST; + string NPC_GIVE_EXP; + string NPC_PROXACT_EVENT; + string NPC_PROXACT_IFSEEN; + int NPC_PROXACT_INRANGE; + string NPC_PROXACT_PLAYERID; + string NPC_PROXACT_RANGE; + int NPC_PROXACT_TRIPPED; + string NPC_PROX_ACTIVATE; + int NPC_PROX_LOOP; + int NUM_SPELLS; + string PUSH_BEAM_ID; + string PUSH_BEAM_VISIBLE; + string READY_TO_WAIT; + int REPULSE_ON; + string SHADOW_SCRIPT; + string SOUND_BEAM; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + int SPELL_CHOICE; + float SPELL_FREQ; + string SPELL_TARGET; + string WAND_ATK; + string WAND_COLD_EFFECT; + string WAND_DARK_EFFECT; + string WAND_FIRE_EFFECT; + string WAND_LIGHTNING_EFFECT; + string WAND_POISON_EFFECT; + string WAND_TARGET; + string XSOUND_LEVITATE; + string XSOUND_SPIN; + string XSOUND_SUMMON; + + MaldoraFragment() + { + CHAIN_COUNT_LIMIT = 20; + AXESKIN_WHITE = 6; + AXESKIN_NULL = 5; + AXESKIN_LIGHTNING = 4; + AXESKIN_POISON = 3; + AXESKIN_COLD = 2; + AXESKIN_DARK = 1; + AXESKIN_FIRE = 0; + WAND_LIGHTNING_EFFECT = "effects/dot_lightning"; + WAND_COLD_EFFECT = "effects/dot_cold"; + WAND_POISON_EFFECT = "effects/dot_poison"; + WAND_FIRE_EFFECT = "effects/dot_fire"; + WAND_DARK_EFFECT = "effects/debuff_stun"; + NME_LIST = "human;hguard;wildanimal;"; + FREQ_SPAM = 10; + NO_INTRO = 1; + IS_UNHOLY = 1; + NUM_SPELLS = 6; + MINION_LIMIT = 1; + FINGER_ADJ = "$relpos($vec(0,MY_YAW,0),$vec(0,30,54))"; + SHADOW_SCRIPT = "ms_wicardoven/maldora_image"; + MINION_SCRIPT = "monsters/maldora_minion_random"; + FIN_EXP = 2000; + ANIM_IDLE = "idle"; + ANIM_LOOK = "look_idle"; + ANIM_RUN_NORM = "run2"; + ANIM_WALK_NORM = "walk2handed"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "long_jump"; + ANIM_DEATH = "look_idle"; + ANIM_RUN = "run2"; + ANIM_WALK = "walk2handed"; + ANIM_CAST = "ref_shoot_trip"; + ANIM_ROCK = "ref_shoot_squeak"; + ANIM_BOLT = "shoot_1"; + ANIM_WAND = "ref_shoot_crowbar"; + LAVA_FREQ = Random(20.0, 40.0); + SPELL_FREQ = 9.0; + BARRIER_FREQ = 30.0; + DMG_PUSH_BEAM = Random(2, 6); + DMG_CHAIN = Random(15, 25); + DMG_SHOCK = 10.0; + DMG_ROCKS = RandomInt(50, 200); + DMG_WAND = Random(10, 20); + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + SOUND_BEAM = "weather/Storm_exclamation.wav"; + SOUND_STRUCK1 = "voices/human/male_hit2.wav"; + SOUND_STRUCK2 = "voices/human/male_hit1.wav"; + SOUND_STRUCK3 = "voices/human/male_hit3.wav"; + SOUND_STRUCK4 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK5 = "weapons/cbar_hitbod1.wav"; + NO_SPAWN_STUCK_CHECK = 1; + IMMUNE_VAMPIRE = 1; + MONSTER_MODEL = "monsters/maldora.mdl"; + Precache(MONSTER_MODEL); + Precache("ambience/the_horror1.wav"); + Precache("ambience/the_horror2.wav"); + Precache("ambience/the_horror3.wav"); + Precache("ambience/the_horror4.wav"); + Precache("monsters/skeleton_boss1.mdl"); + Precache("weapons/cbar_hitbod1.wav"); + Precache("weapons/cbar_hitbod2.wav"); + Precache("weapons/cbar_hitbod3.wav"); + Precache("zombie/zo_pain2.wav"); + Precache("zombie/zo_pain2.wav"); + Precache("zombie/claw_miss1.wav"); + Precache("zombie/claw_miss2.wav"); + Precache("null.wav"); + Precache("zombie/zo_pain1.wav"); + Precache("doors/aliendoor1.wav"); + Precache("debris/bustconcrete1.wav"); + Precache("debris/bustconcrete2.wav"); + Precache("debris/concrete3.wav"); + Precache("rockgibs.mdl"); + XSOUND_LEVITATE = "fans/fan4on.wav"; + XSOUND_SPIN = "magic/fan4_noloop.wav"; + XSOUND_SUMMON = "magic/volcano_start.wav"; + Precache(XSOUND_LEVITATE); + Precache(XSOUND_SPIN); + Precache(XSOUND_SUMMON); + Precache("ambience/alienvoices1.wav"); + BARRIER_COLOR = Vector3(255, 0, 0); + DMG_BARRIER = 400; + } + + void game_precache() + { + Precache("monsters/maldora_minion_random"); + Precache("ms_wicardoven/maldora_image"); + if ((AM_UBER)) + { + Precache("monsters/maldora_gminion_random"); + } + } + + void OnSpawn() override + { + if ((AM_UBER)) return; + SetName("Fragment of Maldora"); + SetHealth(5000); + SetRace("demon"); + SetWidth(32); + SetHeight(86); + SetBloodType("none"); + NPC_GIVE_EXP = FIN_EXP; + SetRoam(false); + WAND_TARGET = "unset"; + SetHearingSensitivity(11); + SetInvincible(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("magic", 0.0); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("stun", 0); + SetDamageResistance("holy", 0.25); + SetModel(MONSTER_MODEL); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + npcatk_suspend_ai(); + IMAGES_ALIVE = 0; + MINIONS_ALIVE = 0; + SetSayTextRange(2048); + if ((StringToLower(GetMapName())).findFirst("lodagond") >= 0) + { + if (!(G_MALDORA_PRESENT)) + { + } + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 768; + NPC_PROXACT_IFSEEN = 1; + NPC_PROXACT_EVENT = "start_convo"; + } + if (!(NPC_PROX_ACTIVATE)) + { + combat_go(); + } + if (!(AM_UBER)) + { + SetProp(GetOwner(), "skin", AXESKIN_NULL); + } + } + + void OnPostSpawn() override + { + ScheduleDelayedEvent(0.1, "init_beam_push"); + ScheduleDelayedEvent(0.2, "init_beam_chain"); + DEBUG_DID_POSTSPAWN = 1; + CallExternal(GAME_MASTER, "gm_add_maldora_fragment", GetEntityIndex(GetOwner())); + ScheduleDelayedEvent(0.1, "get_index"); + } + + void npcatk_proxact_scan() + { + if (!(READY_TO_WAIT)) return; + if ((NPC_PROXACT_TRIPPED)) return; + GetAllPlayers(LPLAYERS); + NPC_PROX_LOOP = 0; + NPC_PROXACT_INRANGE = 0; + for (int i = 0; i < GetTokenCount(LPLAYERS, ";"); i++) + { + npcatk_proxact_lplayers(); + } + if ((NPC_PROXACT_INRANGE)) + { + npcatk_prox_activated(NPC_PROXACT_SCANID, "player_scan"); + } + if ((NPC_PROXACT_TRIPPED)) return; + ScheduleDelayedEvent(1.0, "npcatk_proxact_scan"); + } + + void npcatk_prox_activated() + { + if (!(READY_TO_WAIT)) return; + if ((NPC_PROXACT_FOV)) + { + string TEST_ORIG = GetEntityOrigin(param1); + if (!(WithinCone2D(TEST_ORIG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) + { + } + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green " + GetEntityName(GetOwner()) + "npcatk_prox_activated " + GetEntityName(param1) + NPC_PROXACT_CONE + WithinCone2D(TEST_ORIG, GetMonsterProperty("origin"), GetMonsterProperty("angles"))); + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + NPC_PROXACT_PLAYERID = param1; + LogDebug("GetEntityName(NPC_PROXACT_PLAYERID) activated me by PARAM1 PARAM2"); + if ((NPC_PROXACT_TRIPPED)) return; + NPC_PROXACT_TRIPPED = 1; + NPC_PROXACT_EVENT(); + } + + void get_index() + { + if ((NPC_PROX_ACTIVATE)) + { + ScheduleDelayedEvent(1.0, "npcatk_proxact_scan"); + } + MALDORA_IDX = GetEntityProperty(GAME_MASTER, "scriptvar"); + NPC_PROXACT_TRIPPED = 0; + if (MALDORA_IDX > 0) + { + READY_TO_WAIT = 1; + } + if (MALDORA_IDX <= 0) + { + ScheduleDelayedEvent(0.1, "get_index"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + } + + void start_convo() + { + DEBUG_START_CONVO = 1; + if (MALDORA_IDX == 1) + { + SayText("Shall we?"); + EmitSound(GetOwner(), 0, "voices/lodagond-4/fragment_shallwe.wav", 10); + DEBUG_CALLED_COMBAT = 1; + ScheduleDelayedEvent(2.5, "combat_go"); + } + if (MALDORA_IDX == 2) + { + DEBUG_CALLED_COMBAT = 2; + ScheduleDelayedEvent(1.33, "start_convo2"); + ScheduleDelayedEvent(2.5, "combat_go"); + } + } + + void start_convo2() + { + SayText("Lets!"); + EmitSound(GetOwner(), 0, "voices/lodagond-4/fragment_lets.wav", 10); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((COMBAT_ON)) + { + if ((IsValidPlayer("ent_lastheard"))) + { + } + SPELL_TARGET = GetEntityIndex("ent_lastheard"); + } + } + + void shock_ambience() + { + EmitSound(GetOwner(), 0, "magic/shock_noloop.wav", 10); + } + + void combat_go() + { + CL_BEAM_IDX = "game.script.last_sent_id"; + SetInvincible(false); + SetMoveAnim(ANIM_RUN); + COMBAT_ON = 1; + cycle_up(); + pick_spell(); + ScheduleDelayedEvent(1.0, "movement_cycle"); + } + + void reset_barrier_delay() + { + BARRIER_DELAY = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(COMBAT_ON)) return; + if (!(false)) return; + SPELL_TARGET = GetEntityIndex(m_hLastSeen); + } + + void movement_cycle() + { + ScheduleDelayedEvent(0.5, "movement_cycle"); + if ((NO_MOVE)) return; + if ((SUSPEND_AI)) + { + npcatk_go_movedest(); + } + if (!(false)) + { + SetMoveAnim(ANIM_WALK); + } + if ((false)) + { + SetMoveAnim(ANIM_RUN); + } + if ((IsEntityAlive(WAND_TARGET))) + { + if (GetEntityRange(WAND_TARGET) < 1024) + { + } + npcatk_setmovedest(WAND_TARGET, MOVE_RANGE); + if (GetEntityRange(WAND_TARGET) < ATTACK_RANGE) + { + } + swing_fist(WAND_TARGET); + } + if ((IsEntityAlive(WAND_TARGET))) + { + if (GetEntityRange(WAND_TARGET) >= 1024) + { + } + WAND_TARGET = "unset"; + } + if (WAND_TARGET == "unset") + { + if (RandomInt(1, 20) == 1) + { + string NEW_WAND = SPELL_TARGET; + if (GetEntityRange(SPELL_TARGET) > 640) + { + if ((false)) + { + } + string NEW_WAND = GetEntityIndex(m_hLastSeen); + } + if (!(IsEntityAlive(SPELL_TARGET))) + { + if ((false)) + { + } + string NEW_WAND = GetEntityIndex(m_hLastSeen); + } + swing_fist(NEW_WAND); + } + } + if (WAND_TARGET != "unset") + { + int DISENGAGE = RandomInt(1, 10); + if (DISENGAGE == 1) + { + leap_away(WAND_TARGET); + WAND_TARGET = "unset"; + } + if (DISENGAGE > 1) + { + npcatk_setmovedest(WAND_TARGET, MOVE_RANGE); + } + } + if (!(IsEntityAlive(WAND_TARGET))) + { + if (RandomInt(1, 5) == 1) + { + } + int RAND_ANG = RandomInt(0, 359); + string TRACE_START = GetMonsterProperty("origin"); + string TRACE_END = TRACE_START; + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, RAND_ANG, 0), Vector3(0, 1000, 0)); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + npcatk_setmovedest(TRACE_LINE, MOVE_RANGE); + } + } + + void reset_props() + { + SetRepeatDelay(10.0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void thrash_strike() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, 0.8); + } + + void pick_spell() + { + SPELL_CHOICE = RandomInt(1, NUM_SPELLS); + if ((G_MALDORA_SPELLING)) + { + float RND_DELAY = Random(1, 5); + RND_DELAY("pick_spell"); + int EXIT_SUB = 1; + string TIME_DIFF = G_MALDORA_SPELLTIME; + TIME_DIFF += 30.0; + if (GetGameTime() > TIME_DIFF) + { + BEAM_COUNT = 0; + BEAM_ON = 1; + CHAIN_COUNT = 0; + CHAIN_ON = 0; + LogDebug("wtf , no spells for 30 seconds? spell flag must be jammed happens , dunno why"); + SetGlobalVar("G_MALDORA_SPELLING", 0); + } + } + if ((EXIT_SUB)) return; + if ((BEAM_ON)) + { + int EXIT_SUB = 1; + } + if ((CHAIN_ON)) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) + { + ScheduleDelayedEvent(0.5, "pick_spell"); + } + if ((EXIT_SUB)) return; + if (G_DEVELOPER > 0) + { + SPELL_CHOICE = G_DEVELOPER; + G_DEVELOPER = 0; + } + if (GetEntityRange(SPELL_TARGET) > 2048) + { + SPELL_CHOICE = 0; + } + if (!(IsEntityAlive(SPELL_TARGET))) + { + SPELL_CHOICE = 0; + } + if (GetRelationship(SPELL_TARGET) == "ally") + { + SPELL_CHOICE = 0; + } + if (SPELL_CHOICE == 0) + { + if (!(BARRIER_ON)) + { + } + if ((NO_MOVE)) + { + resume_moving(); + } + } + if (SPELL_CHOICE == 1) + { + if ((BARRIER_DELAY)) + { + SPELL_CHOICE = RandomInt(2, NUM_SPELLS); + LogDebug("barrier_no_go - barrier delay"); + } + if (!(BARRIER_DELAY)) + { + } + MALDORA_LIST = GetEntityProperty(GAME_MASTER, "scriptvar"); + LogDebug("maldist MALDORA_LIST"); + FELLOW_FRAG_NEARBY = 0; + for (int i = 0; i < GetTokenCount(MALDORA_LIST, ";"); i++) + { + check_nearby(); + } + if ((FELLOW_FRAG_NEARBY)) + { + LogDebug("barrier_no_go - fellow maldora nearby"); + SPELL_CHOICE = RandomInt(2, NUM_SPELLS); + } + if (!(FELLOW_FRAG_NEARBY)) + { + } + BARRIER_DELAY = 1; + BARRIER_FREQ("reset_barrier_delay"); + ScheduleDelayedEvent(0.1, "raise_barrier"); + } + if (SPELL_CHOICE == 2) + { + SetGlobalVar("G_MALDORA_SPELLING", 1); + G_MALDORA_SPELLTIME = GetGameTime(); + BEAM_ON = 1; + face_target(SPELL_TARGET); + PlayAnim("critical", ANIM_BOLT); + BEAM_COUNT = 0; + APPLIED_BEAM = 0; + BEAM_TARGET = SPELL_TARGET; + ScheduleDelayedEvent(0.1, "beam_push"); + } + if (SPELL_CHOICE == 3) + { + SetGlobalVar("G_MALDORA_SPELLING", 1); + G_MALDORA_SPELLTIME = GetGameTime(); + CHAIN_ON = 1; + CUR_CHAIN_TARGET = 0; + face_target(SPELL_TARGET); + PlayAnim("critical", ANIM_CAST); + CHAIN_COUNT = 0; + ScheduleDelayedEvent(0.1, "chain_lightning"); + } + if (SPELL_CHOICE == 4) + { + if ((G_MAL_ROCK_STORMS)) + { + ScheduleDelayedEvent(0.2, "pick_spell"); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + SetGlobalVar("G_MAL_ROCK_STORMS", 1); + PlayAnim("critical", ANIM_CAST); + string NUM_ROCKS = GetPlayerCount(); + if (NUM_ROCKS > 4) + { + int NUM_RUCKS = 4; + } + SpawnNPC("monsters/summon/rock_storm", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), NUM_ROCKS, DMG_ROCKS, 64, 90 + } + if ((EXIT_SUB)) return; + if (SPELL_CHOICE == 5) + { + if ((BARRIER_ON)) + { + ScheduleDelayedEvent(0.2, "pick_spell"); + int EXIT_SUB = 1; + } + if (!(BARRIER_ON)) + { + } + if (IMAGES_ALIVE >= 1) + { + SPELL_CHOICE = RandomInt(6, NUM_SPELLS); + } + if (IMAGES_ALIVE == 0) + { + } + if (RandomInt(1, 3) == 1) + { + if (!(AM_UBER)) + { + } + SayText("Shadows , of shadows , of shadows..."); + } + ScheduleDelayedEvent(0.1, "laugh_it_up"); + stop_moving(); + PlayAnim("critical", ANIM_CAST); + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 2, 2); + SpawnNPC(SHADOW_SCRIPT, /* TODO: $relpos */ $relpos(0, 64, -35), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET, 45, AM_UBER + ScheduleDelayedEvent(0.1, "make_shadow2"); + if ((AM_UBER)) + { + ScheduleDelayedEvent(0.2, "make_shadow3"); + ScheduleDelayedEvent(0.4, "make_shadow4"); + } + IMAGES_ALIVE = 2; + ScheduleDelayedEvent(1.0, "resume_solid"); + ScheduleDelayedEvent(3.0, "resume_moving"); + } + if (SPELL_CHOICE == 6) + { + if ((BARRIER_ON)) + { + ScheduleDelayedEvent(0.2, "pick_spell"); + int EXIT_SUB = 1; + } + if (MINIONS_ALIVE >= MINION_LIMIT) + { + SPELL_CHOICE = RandomInt(7, NUM_SPELLS); + } + if (GetGameTime() <= NEXT_MINION) + { + SPELL_CHOICE = RandomInt(7, NUM_SPELLS); + } + if (GetGameTime() > NEXT_MINION) + { + } + NEXT_MINION = GetGameTime(); + NEXT_MINION += 5.0; + if (MINIONS_ALIVE < MINION_LIMIT) + { + } + MINIONS_ALIVE += 1; + PlayAnim("critical", ANIM_CAST); + EmitSound(GetOwner(), 0, "monsters/skeleton/calrain3.wav", 10); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 2, 2); + SpawnNPC(MINION_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, -64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET + stop_moving(0.9); + ScheduleDelayedEvent(1.0, "leap_away"); + } + if (SPELL_CHOICE == 1) + { + ScheduleDelayedEvent(2.0, "pick_spell"); + int EXIT_SUB = 1; + } + if (SPELL_CHOICE == 7) + { + ScheduleDelayedEvent(0.2, "pick_spell"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SPELL_FREQ("pick_spell"); + } + + void make_shadow2() + { + SpawnNPC(SHADOW_SCRIPT, /* TODO: $relpos */ $relpos(0, -64, -35), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET, 135, AM_UBER + } + + void make_shadow3() + { + SpawnNPC(SHADOW_SCRIPT, /* TODO: $relpos */ $relpos(64, -64, -35), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET, 225, AM_UBER + } + + void make_shadow4() + { + SpawnNPC(SHADOW_SCRIPT, /* TODO: $relpos */ $relpos(-64, 64, -35), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET, 315, AM_UBER + } + + void reset_repulse() + { + REPULSE_ON = 0; + } + + void laugh_it_up() + { + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_exit4.wav", 10); + } + + void image_died() + { + IMAGES_ALIVE -= 1; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(NO_MOVE)) + { + if (GetEntityRange(m_hLastStruck) < ATTACK_RANGE) + { + } + swing_fist(GetEntityIndex(m_hLastStruck)); + } + if ((IsValidPlayer(m_hLastStruck))) + { + if (RandomInt(1, 2) == 1) + { + } + SPELL_TARGET = GetEntityIndex(m_hLastStruck); + } + if (!(param1 > 20)) return; + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(param1 > 50)) return; + leap_away(GetEntityIndex(m_hLastStruck)); + } + + void leap_away() + { + if ((CHAIN_ON)) return; + if ((BEAM_ON)) return; + if ((BARRIER_ON)) return; + if ((NO_MOVE)) return; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_away2"); + } + + void leap_away2() + { + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + if ((BARRIER_ON)) return; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 50)); + } + + void swing_fist() + { + if ((CHAIN_ON)) return; + if ((BEAM_ON)) return; + if ((BARRIER_ON)) return; + if ((NO_MOVE)) return; + WAND_TARGET = param1; + npcatk_setmovedest(WAND_TARGET, MOVE_RANGE); + if (!(GetEntityRange(WAND_TARGET) < ATTACK_RANGE)) return; + PlayAnim("once", ANIM_WAND); + } + + void stop_moving() + { + SetRoam(false); + NO_STUCK_CHECKS = 1; + NO_MOVE = 1; + SetMoveAnim(ANIM_IDLE); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + face_target(SPELL_TARGET); + PARAM1("resume_moving"); + } + + void resume_solid() + { + SetSolid("box"); + } + + void resume_moving() + { + SetRoam(true); + NO_STUCK_CHECKS = 0; + NO_MOVE = 0; + SetMoveAnim(ANIM_RUN); + ANIM_RUN = ANIM_RUN_NORM; + ANIM_WALK = ANIM_WALK_NORM; + } + + void raise_barrier() + { + LogDebug("raise_barrier BARRIER_COLOR DMG_BARRIER"); + stop_moving(); + BARRIER_ON = 1; + PlayAnim("critical", ANIM_CAST); + ClientEvent("new", "all", "effects/sfx_barrier", GetEntityIndex(GetOwner()), 128, BARRIER_COLOR, 10.0, 1, 1); + EmitSound(GetOwner(), 0, "magic/spawn_loud.wav", 10); + barrier_loop(); + ScheduleDelayedEvent(10.0, "lower_barrier"); + } + + void barrier_loop() + { + if (!(BARRIER_ON)) return; + ScheduleDelayedEvent(0.5, "barrier_loop"); + string SCAN_POINT = GetEntityOrigin(GetOwner()); + SCAN_POINT += "z"; + BARRIER_TARGS = FindEntitiesInSphere("enemy", 128); + if (!(BARRIER_TARGS != "none")) return; + EmitSound(GetOwner(), 0, "doors/aliendoor1.wav", 10); + for (int i = 0; i < GetTokenCount(BARRIER_TARGS, ";"); i++) + { + barrier_affect_targets(); + } + } + + void barrier_affect_targets() + { + string CUR_TARG = GetToken(BARRIER_TARGS, i, ";"); + if (DMG_BARRIER > 0) + { + XDoDamage(CUR_TARG, "direct", DMG_BARRIER, 1.0, GetOwner(), GetOwner(), "none", "magic"); + } + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(0, 1000, 110))); + } + + void lower_barrier() + { + BARRIER_ON = 0; + resume_moving(); + CallExternal(BARRIER_ID, "remove_barrier"); + } + + void beam_push() + { + BEAM_COUNT += 1; + if (BEAM_COUNT == 1) + { + init_beam_push(); + Effect("beam", "update", PUSH_BEAM_ID, "brightness", 255); + } + if (BEAM_COUNT < 30) + { + SetIdleAnim(ANIM_BOLT); + SetMoveAnim(ANIM_WALK); + } + if (BEAM_COUNT == 30) + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + swing_fist(GetEntityIndex(m_hLastStruck)); + BEAM_ON = 0; + SetGlobalVar("G_MALDORA_SPELLING", 0); + Effect("beam", "update", PUSH_BEAM_ID, "brightness", 0); + } + if (!(BEAM_COUNT < 30)) return; + ScheduleDelayedEvent(0.1, "beam_push"); + if (!(IsEntityAlive(BEAM_TARGET))) return; + face_target(BEAM_TARGET); + string BEAM_START = GetMonsterProperty("origin"); + string SEE_BTARGET = false; + if (!(SEE_BTARGET)) + { + PUSH_BEAM_VISIBLE = 0; + Effect("beam", "update", PUSH_BEAM_ID, "brightness", 0); + } + if (!(SEE_BTARGET)) return; + if (!(PUSH_BEAM_VISIBLE)) + { + Effect("beam", "update", PUSH_BEAM_ID, "brightness", 255); + } + PUSH_BEAM_VISIBLE = 1; + PlayAnim("once", ANIM_BOLT); + EmitSound(GetOwner(), 0, SOUND_BEAM, 10); + Effect("beam", "update", PUSH_BEAM_ID, "end_target", BEAM_TARGET, 0); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + MY_YAW += BEAM_COUNT; + if (MY_YAW > 359) + { + MY_YAW -= 359; + } + string VEL_SET = /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(500, 1000, 30)); + SetVelocity(BEAM_TARGET, VEL_SET); + DoDamage(BEAM_TARGET, "direct", DMG_PUSH_BEAM, 1.0, GetEntityIndex(GetOwner())); + if (!(APPLIED_BEAM)) + { + if ((/* TODO: $get_takedmg */ $get_takedmg(BEAM_TARGET, "stun"))) + { + } + ApplyEffect(BEAM_TARGET, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DMG_SHOCK); + APPLIED_BEAM = 1; + } + } + + void my_target_died() + { + if (param1 == WAND_TARGET) + { + WAND_TARGET = "unset"; + } + SPELL_TARGET = "unset"; + if ((GAVE_WARNING)) return; + GAVE_WARNING = 1; + SendInfoMsg(param1, "Beware! The Fragment of Malodra is immune to magic!"); + } + + void chain_lightning() + { + CHAIN_COUNT += 1; + if (CHAIN_COUNT == 1) + { + string SCAN_POINT = GetEntityOrigin(GetOwner()); + SCAN_POINT += "z"; + CHAIN_LIST = FindEntitiesInSphere("enemy", 1024); + } + if (CHAIN_COUNT < CHAIN_COUNT_LIMIT) + { + SetIdleAnim(ANIM_CAST); + SetMoveAnim(ANIM_WALK); + face_target(SPELL_TARGET); + } + if (CHAIN_COUNT == CHAIN_COUNT_LIMIT) + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + npcatk_flee(GetEntityIndex(m_hLastStruck), 800, 3.0); + CHAIN_ON = 0; + SetGlobalVar("G_MALDORA_SPELLING", 0); + } + if (!(CHAIN_COUNT < CHAIN_COUNT_LIMIT)) return; + ScheduleDelayedEvent(0.25, "chain_lightning"); + if (!(CHAIN_LIST != "none")) return; + PlayAnim("once", ANIM_CAST); + for (int i = 0; i < GetTokenCount(CHAIN_LIST, ";"); i++) + { + chain_affect_targets(); + } + } + + void chain_affect_targets() + { + string CUR_TARG = GetToken(CHAIN_LIST, i, ";"); + string TARG_RANGE = GetEntityRange(CUR_TARG); + TARG_RANGE *= 1.5; + DoDamage(CUR_TARG, TARG_RANGE, DMG_CHAIN, 1.0, GetOwner()); + } + + void game_dodamage() + { + if (!(param1)) + { + WAND_ATK = 0; + } + if ((REPULSE_ON)) + { + if (GetEntityRange(param2) < 128) + { + string INC_VEL = /* TODO: $vec.yaw */ $vec.yaw(GetEntityAngles(param2)); + INC_VEL -= 180; + if (INC_VEL < 0) + { + INC_VEL += 359; + } + string OUT_VEL = /* TODO: $relvel */ $relvel(Vector3(0, INC_VEL, 0), Vector3(0, 2000, 0)); + AddVelocity(GetEntityIndex(param2), OUT_VEL); + } + } + if (!(param1)) return; + if ((CHAIN_ON)) + { + if (GetGameTime() > NEXT_CHAIN_SOUND) + { + NEXT_CHAIN_SOUND = GetGameTime(); + NEXT_CHAIN_SOUND += 0.5; + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(0, 300, 0))); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, param2, 1, Vector3(255, 255, 255), 255, 10, 1.0); + if (GetGameTime() > NEXT_CHAIN_SHOCK) + { + NEXT_CHAIN_SHOCK = GetGameTime(); + NEXT_CHAIN_SHOCK += 1.0; + ApplyEffect(param2, "effects/dot_lightning", 3.0, GetEntityIndex(GetOwner()), DMG_SHOCK); + } + } + if ((WAND_ATK)) + { + wand_strike_dmg(GetEntityIndex(param2)); + } + } + + void wand_strike_dmg() + { + WAND_ATK = 0; + if (!(RandomInt(1, 5) == 1)) return; + ApplyEffect(param1, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + } + + void strike_wand() + { + AS_ATTACKING = GetGameTime(); + if (!(GetEntityRange(WAND_TARGET) < ATTACK_HITRANGE)) return; + WAND_ATK = 1; + DoDamage(WAND_TARGET, ATTACK_HITRANGE, DMG_WAND, 0.8, "blunt"); + } + + void quick_spell() + { + AS_ATTACKING = GetGameTime(); + } + + void quick_bolt() + { + AS_ATTACKING = GetGameTime(); + } + + void face_target() + { + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(param1); + } + + void skele_died() + { + MINIONS_ALIVE -= 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + G_MALDORA_SPELLING = 0; + Effect("beam", "update", CHAIN_BEAM_ID, "remove", 0); + Effect("beam", "update", PUSH_BEAM_ID, "remove", 0); + if (!(AM_UBER)) + { + CallExternal("all", "maldoraf_died", GetEntityIndex(GetOwner())); + } + if ((AM_UBER)) + { + CallExternal("all", "maldora_final_died", GetEntityIndex(GetOwner())); + } + SetProp(GetOwner(), "renderamt", 0); + SpawnNPC("ms_wicardoven/maldora_dead", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: "crow" + SetSolid("none"); + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + } + + void check_nearby() + { + string CUR_MAL = GetToken(MALDORA_LIST, i, ";"); + if (!(CUR_MAL != GetEntityIndex(GetOwner()))) return; + if (!(IsEntityAlive(CUR_MAL))) return; + if (GetEntityRange(CUR_MAL) < 256) + { + FELLOW_FRAG_NEARBY = 1; + } + } + + void ext_rock_storm_end() + { + SetGlobalVar("G_MAL_ROCK_STORMS", 0); + } + + void init_beam_push() + { + Effect("beam", "ents", "lgtning.spr", 200, GetEntityIndex(GetOwner()), 2, GetEntityIndex(GetOwner()), 0, Vector3(255, 255, 0), 0, 20, 30.0); + PUSH_BEAM_ID = GetEntityIndex(m_hLastCreated); + } + +} + +} diff --git a/scripts/angelscript/lodagond/sorc_image.as b/scripts/angelscript/lodagond/sorc_image.as new file mode 100644 index 00000000..e444d7e2 --- /dev/null +++ b/scripts/angelscript/lodagond/sorc_image.as @@ -0,0 +1,102 @@ +#pragma context server + +namespace MS +{ + +class SorcImage : CGameScript +{ + float ANIM_SPEED; + string FACE_YAW; + + SorcImage() + { + } + + void OnSpawn() override + { + SetModel("monsters/sorc.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 8); + SetNoPush(true); + SetInvincible(true); + SetSolid("none"); + SetRace("demon"); + SetName("Runegahr , Shadahar Orc Chieftain"); + SetSayTextRange(2048); + ANIM_SPEED = 1.0; + SetAnimFrameRate(ANIM_SPEED); + Effect("glow", GetOwner(), Vector3(200, 200, 255), 32, -1, 0); + } + + void ext_convo1() + { + SetSayTextRange(2048); + SayText("Release me!"); + EmitSound(GetOwner(), 0, "voices/sc_convo1.wav", 10); + PlayAnim("critical", "warcry"); + ScheduleDelayedEvent(0.1, "slow_down"); + } + + void ext_convo5() + { + PlayAnim("critical", "warcry"); + EmitSound(GetOwner(), 0, "voices/sc_convo5.wav", 10); + SayText("Ha! Maldora is NOT the Doom Bringer! He's an imposter with delusions of grandeur!"); + } + + void ext_convo8() + { + PlayAnim("critical", "warcry"); + EmitSound(GetOwner(), 0, "voices/sc_convo8.wav", 10); + SayText("You'll... be dead before that happens! If you'd bother to look behind you..."); + } + + void slow_down() + { + if (!(ANIM_SPEED >= 0.01)) return; + ScheduleDelayedEvent(0.25, "slow_down"); + ANIM_SPEED -= 0.05; + if (ANIM_SPEED <= 0.01) + { + ANIM_SPEED = 0.0001; + } + LogDebug("slow_down ANIM_SPEED"); + SetAnimFrameRate(ANIM_SPEED); + } + + void game_dynamically_created() + { + FACE_YAW = param1; + ScheduleDelayedEvent(0.1, "set_yaw"); + } + + void set_yaw() + { + SetAngles("face"); + } + + void sorc_in() + { + ScheduleDelayedEvent(1.0, "sorc_go"); + } + + void sorc_go() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + UseTrigger("sorc_go"); + SpawnNPC("monsters/sorc_chief1", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); + EmitSound(GetOwner(), 0, "debris/bustglass3.wav", 10); + Effect("tempent", "gibs", "glassgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 32), 1, 40, 10, 100, 30); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/lodagond/sorc_image_defeat.as b/scripts/angelscript/lodagond/sorc_image_defeat.as new file mode 100644 index 00000000..56ca66e9 --- /dev/null +++ b/scripts/angelscript/lodagond/sorc_image_defeat.as @@ -0,0 +1,115 @@ +#pragma context server + +namespace MS +{ + +class SorcImageDefeat : CGameScript +{ + string SOUND_TELE; + + SorcImageDefeat() + { + SOUND_TELE = "magic/teleport.wav"; + } + + void OnSpawn() override + { + SetModel("monsters/sorc.mdl"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 8); + SetNoPush(true); + SetInvincible(true); + SetRace("demon"); + SetHearingSensitivity(11); + SetName("Runegahr , Shadahar Orc Chieftain"); + SetSayTextRange(2048); + SetMenuAutoOpen(1); + CatchSpeech("say_hi", "hail"); + CatchSpeech("offer_accepted", "yes"); + CatchSpeech("offer_denied", "no"); + ScheduleDelayedEvent(0.1, "say_stop"); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if (!(IsValidPlayer(LAST_HEARD))) return; + SetMoveDest(LAST_HEARD); + } + + void say_hi() + { + say_stop(); + OpenMenu(GetEntityIndex("ent_lastspoke")); + } + + void say_stop() + { + SayText("ENOUGH! Maybe you aren't the pathetic creatures I took you for..."); + ScheduleDelayedEvent(4.0, "say_stop2"); + } + + void say_stop2() + { + SayText("However , defeating me alone is not enough to prove yourselves worthy of alliance."); + ScheduleDelayedEvent(4.0, "say_stop3"); + } + + void say_stop3() + { + SayText("For humans are treacherous , and fall easily to temptation and despair."); + ScheduleDelayedEvent(4.0, "say_stop4"); + } + + void say_stop4() + { + SayText("If you can reach Maldora's lair, at the heart of Lodagond, I swear upon this sword, that I will join you and aid in his defeat!"); + ScheduleDelayedEvent(4.0, "say_stop5"); + } + + void say_stop5() + { + SayText("Do you [accept] this offer? Or would you rather [die] at my hand here and now?"); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "I accept."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "offer_accepted"; + string reg.mitem.title = "Die evil orc!"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "offer_denied"; + } + + void offer_accepted() + { + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + SpawnNPC("monsters/summon/ibarrier", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 64, 2, 0, 0, 0, 1 + SayText("Very well. When the time comes , " + I + "will be there , and in exchange for your aid , " + I + " will give one of you this sword."); + PlayAnim("critical", "warcry"); + ScheduleDelayedEvent(1.0, "do_fadeout"); + SetGlobalVar("G_SHAD_ORC", 1); + } + + void offer_denied() + { + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + SpawnNPC("monsters/summon/ibarrier", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 64, 2, 0, 0, 0, 1 + PlayAnim("critical", "warcry"); + SayText("Impudent fools! You stand no chance against the charlatan without my help. So be it , die at his hands - you ll wish you d done so at mine."); + ScheduleDelayedEvent(1.0, "do_fadeout"); + SetGlobalVar("G_SHAD_ORC", 0); + } + + void do_fadeout() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/lodagond/sorc_image_final.as b/scripts/angelscript/lodagond/sorc_image_final.as new file mode 100644 index 00000000..252a089b --- /dev/null +++ b/scripts/angelscript/lodagond/sorc_image_final.as @@ -0,0 +1,99 @@ +#pragma context server + +namespace MS +{ + +class SorcImageFinal : CGameScript +{ + string SOUND_TELE; + + SorcImageFinal() + { + SOUND_TELE = "magic/teleport.wav"; + } + + void OnSpawn() override + { + SetModel("monsters/sorc.mdl"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 8); + SetNoPush(true); + SetInvincible(true); + SetRace("demon"); + SetName("Runegahr , Shadahar Orc Chieftain"); + SetSayTextRange(2048); + SetMenuAutoOpen(1); + CatchSpeech("say_hi", "hail"); + } + + void say_hi() + { + SayText(I + " got something you want , human?"); + OpenMenu(GetEntityIndex("ent_lastspoke")); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Demand Reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_sword"; + } + + void say_sword() + { + SayText("Since you were the first to have the guts to ask , here you are , as promised."); + SetModelBody(2, 0); + ScheduleDelayedEvent(4.0, "say_sword2"); + // TODO: offer PARAM1 swords_blooddrinker + } + + void say_sword2() + { + SayText("Worry not , " + I + "have a spare back at the Palace... " + A + " couple spares , actually."); + ScheduleDelayedEvent(4.0, "say_sword3"); + } + + void say_sword3() + { + SayText("If you ever dare to step foot within the walls of the palace , be sure to find me."); + ScheduleDelayedEvent(4.0, "say_sword4"); + } + + void say_sword4() + { + SayText("You maybe lowly human s, but you ve proven yourself mighty warriors all. Our doors are always open to true warriors."); + ScheduleDelayedEvent(4.0, "say_sword4b"); + } + + void say_sword4b() + { + SayText("...and when you do visit us, be sure to show me that sword. All you human's look alike to me."); + ScheduleDelayedEvent(4.0, "say_sword5"); + } + + void say_sword5() + { + SayText("That having been said , " + I + "must leave before this citidel comes crashing down - " + I + " suggest you do the same."); + ScheduleDelayedEvent(4.0, "tele_out"); + } + + void tele_out() + { + SayText("Sorry I can't take you with me..."); + PlayAnim("once", "warcry"); + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + SpawnNPC("monsters/summon/ibarrier", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 64, 2, 0, 0, 0, 1 + ScheduleDelayedEvent(0.1, "fade_away"); + } + + void fade_away() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/lodagond/sorc_intro.as b/scripts/angelscript/lodagond/sorc_intro.as new file mode 100644 index 00000000..fa063de7 --- /dev/null +++ b/scripts/angelscript/lodagond/sorc_intro.as @@ -0,0 +1,258 @@ +#pragma context server + +namespace MS +{ + +class SorcIntro : CGameScript +{ + string BARRIER_ID; + float CONV_DELAY; + int DEAD_MAGES; + int DETECT_RADIUS; + string ID_MAGE1; + string ID_MAGE2; + string ID_MAGE3; + string ID_MAGE4; + string ID_SORC; + string IMG_ICE_MAGE; + string IMG_SORC; + int INTRO_COMPLETE; + int MAGE_RADIUS; + float SPAWN_DELAY; + int STARTED_INTRO; + + SorcIntro() + { + IMG_SORC = "lodagond/sorc_image"; + IMG_ICE_MAGE = "lodagond/ice_mage_image"; + MAGE_RADIUS = 164; + DETECT_RADIUS = 256; + SPAWN_DELAY = 0.25; + CONV_DELAY = 3.0; + Precache("doors/aliendoor3.wav"); + Precache("magic/spawn.wav"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_BEAM); + if (!(INTRO_COMPLETE)) + { + } + Effect("tempent", "trail", "3dmflaora.spr", /* TODO: $relpos */ $relpos(0, 0, 64), /* TODO: $relpos */ $relpos(0, 0, 128), 10, 1, 1, 5, 12); + } + + void OnSpawn() override + { + SetName("Runegahr , Shadahar Orc Chieftain"); + SetFly(true); + SetGravity(0); + SetInvincible(true); + SetModel("null.mdl"); + SetNoPush(true); + SetRace("demon"); + SetWidth(20); + SetHeight(20); + SetModel("none"); + SetDamageResistance("stun", 0); + SetGravity(0.0); + SetName("sorc_intro"); + if (!(true)) return; + ScheduleDelayedEvent(0.1, "spawn_image_sorc"); + DEAD_MAGES = 0; + } + + void game_precache() + { + Precache("monsters/sorc_chief1"); + Precache("monsters/ice_mage"); + Precache("lodagond/sorc_image"); + Precache("lodagond/ice_mage_image"); + } + + void spawn_image_sorc() + { + SpawnNPC(IMG_SORC, /* TODO: $relpos */ $relpos(0, 0, 64), ScriptMode::Legacy); // params: /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")) + ID_SORC = GetEntityIndex(m_hLastCreated); + SPAWN_DELAY("spawn_image1"); + } + + void spawn_image1() + { + string SPAWN_LOC = GetMonsterProperty("origin"); + SPAWN_LOC += /* TODO: $relpos */ $relpos(Vector3(0, 45, 0), Vector3(0, MAGE_RADIUS, 0)); + SpawnNPC(IMG_ICE_MAGE, SPAWN_LOC, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "mage1" + SPAWN_DELAY("spawn_image2"); + } + + void spawn_image2() + { + string SPAWN_LOC = GetMonsterProperty("origin"); + SPAWN_LOC += /* TODO: $relpos */ $relpos(Vector3(0, 135, 0), Vector3(0, MAGE_RADIUS, 0)); + SpawnNPC(IMG_ICE_MAGE, SPAWN_LOC, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "mage2" + SPAWN_DELAY("spawn_image3"); + } + + void spawn_image3() + { + string SPAWN_LOC = GetMonsterProperty("origin"); + SPAWN_LOC += /* TODO: $relpos */ $relpos(Vector3(0, 225, 0), Vector3(0, MAGE_RADIUS, 0)); + SpawnNPC(IMG_ICE_MAGE, SPAWN_LOC, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "mage3" + SPAWN_DELAY("spawn_image4"); + } + + void spawn_image4() + { + string SPAWN_LOC = GetMonsterProperty("origin"); + SPAWN_LOC += /* TODO: $relpos */ $relpos(Vector3(0, 315, 0), Vector3(0, MAGE_RADIUS, 0)); + SpawnNPC(IMG_ICE_MAGE, SPAWN_LOC, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "mage4" + SPAWN_DELAY("spawn_barrier"); + } + + void spawn_barrier() + { + string BARRIER_RADIUS = MAGE_RADIUS; + BARRIER_RADIUS += 32; + BARRIER_ID = GetEntityIndex(m_hLastCreated); + scan_for_players(); + ID_MAGE1 = FindEntityByName("mage1"); + ID_MAGE2 = FindEntityByName("mage2"); + ID_MAGE3 = FindEntityByName("mage3"); + ID_MAGE4 = FindEntityByName("mage4"); + } + + void scan_for_players() + { + if ((STARTED_INTRO)) return; + ScheduleDelayedEvent(0.25, "scan_for_players"); + GetAllPlayers(L_PLAYERS); + for (int i = 0; i < GetTokenCount(L_PLAYERS, ";"); i++) + { + scan_loop(); + } + } + + void scan_loop() + { + if ((STARTED_INTRO)) return; + string CUR_PLAYER = GetToken(L_PLAYERS, i, ";"); + if (!(GetEntityRange(CU_PLAYER) < DETECT_RADIUS)) return; + STARTED_INTRO = 1; + do_intro1(); + } + + void do_intro1() + { + CallExternal(ID_SORC, "ext_convo1"); + ScheduleDelayedEvent(2.1, "do_intro2"); + UseTrigger("ice_crystal1"); + } + + void do_intro2() + { + CallExternal(ID_MAGE1, "ext_convo2"); + ScheduleDelayedEvent(4.3, "do_intro3"); + UseTrigger("ice_crystal2"); + } + + void do_intro3() + { + CallExternal(ID_MAGE2, "ext_convo3"); + ScheduleDelayedEvent(4.0, "do_intro4"); + UseTrigger("ice_crystal3"); + } + + void do_intro4() + { + CallExternal(ID_MAGE3, "ext_convo4"); + ScheduleDelayedEvent(6.3, "do_intro5"); + UseTrigger("ice_crystal4"); + } + + void do_intro5() + { + CallExternal(ID_SORC, "ext_convo5"); + ScheduleDelayedEvent(7.1, "do_intro6"); + UseTrigger("ice_crystal5"); + } + + void do_intro6() + { + CallExternal(ID_MAGE4, "ext_convo6"); + ScheduleDelayedEvent(3.5, "do_intro_oops"); + UseTrigger("ice_crystal6"); + } + + void do_intro_oops() + { + CallExternal(ID_MAGE3, "ext_convo7"); + ScheduleDelayedEvent(5.7, "do_intro7"); + UseTrigger("ice_crystal7"); + } + + void do_intro7() + { + CallExternal(ID_SORC, "ext_convo8"); + ScheduleDelayedEvent(7.1, "do_intro8"); + UseTrigger("ice_crystal8"); + } + + void do_intro8() + { + CallExternal(ID_MAGE2, "ext_convo9"); + ScheduleDelayedEvent(3.7, "do_intro9"); + UseTrigger("ice_crystal9"); + } + + void do_intro9() + { + CallExternal(ID_MAGE3, "ext_convo10"); + ScheduleDelayedEvent(5.6, "intro_complete"); + } + + void ext_ice_mage_died() + { + DEAD_MAGES += 1; + if (!(DEAD_MAGES == 4)) return; + spawn_sorc(); + } + + void spawn_sorc() + { + CallExternal(ID_SORC, "sorc_in"); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void intro_complete() + { + INTRO_COMPLETE = 1; + CallExternal(BARRIER_ID, "remove_barrier"); + CallExternal(ID_MAGE1, "ext_mage_go"); + ScheduleDelayedEvent(0.2, "intro_complete2"); + } + + void intro_complete2() + { + CallExternal(ID_MAGE2, "ext_mage_go"); + ScheduleDelayedEvent(0.2, "intro_complete3"); + } + + void intro_complete3() + { + CallExternal(ID_MAGE3, "ext_mage_go"); + ScheduleDelayedEvent(0.2, "intro_complete4"); + } + + void intro_complete4() + { + CallExternal(ID_MAGE4, "ext_mage_go"); + } + +} + +} diff --git a/scripts/angelscript/lostcastle_msc/map_startup.as b/scripts/angelscript/lostcastle_msc/map_startup.as new file mode 100644 index 00000000..a84e25c7 --- /dev/null +++ b/scripts/angelscript/lostcastle_msc/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "lostcastle_msc"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Curse of the Bear Gods: Lost Castle by Crow"); + SetGlobalVar("G_MAP_DESC", "The undead guardians of the Bear Gods dwell in this cursed castle."); + SetGlobalVar("G_MAP_DIFF", "Levels 15-25 / 150-400hp"); + SetGlobalVar("G_WARN_HP", 150); + } + +} + +} diff --git a/scripts/angelscript/lowlands/map_startup.as b/scripts/angelscript/lowlands/map_startup.as new file mode 100644 index 00000000..fee769c8 --- /dev/null +++ b/scripts/angelscript/lowlands/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "lowlands"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Curse of the Bear Gods: Lowlands by Crow & Dridje"); + SetGlobalVar("G_MAP_DESC", "Foglund has been cursed by the Bear Gods. Can you save him?"); + SetGlobalVar("G_MAP_DIFF", "Levels 15-20 / 200-300hp"); + SetGlobalVar("G_WARN_HP", 200); + } + +} + +} diff --git a/scripts/angelscript/m2_quest/bgoblin_weak.as b/scripts/angelscript/m2_quest/bgoblin_weak.as new file mode 100644 index 00000000..15cfc7ab --- /dev/null +++ b/scripts/angelscript/m2_quest/bgoblin_weak.as @@ -0,0 +1,463 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class BgoblinWeak : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BOW; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_PARRY; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WARCRY; + string AS_ATTACKING; + string ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string CAN_FIREBALL; + int CAN_FLINCH; + string CAN_STUN; + int CHARGE_SPEED; + string DBL_JUMP; + int DMG_AXE; + int DMG_CLUB; + int DMG_FIREBALL; + int DMG_FIREBALL_DOT; + int DMG_SWORD; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_HEALTH; + float FREQ_CHARGE; + float FREQ_FIREBALL; + string F_GOB_TYPE; + int GOBLIN_JUMPRANGE; + int GOB_CHARGER; + int GOB_CHARGE_MAX_DIST; + int GOB_CHARGE_MIN_DIST; + int GOB_JUMPER; + int GOB_JUMP_SCANNING; + int GOB_TYPE; + int GOB_TYPE_SET; + int MIN_FIREBALL_DIST; + int MOVE_RANGE; + int NEW_MODEL; + string NEXT_FIREBALL; + string NEXT_LEAP; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_GIVE_EXP; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_CHIEF_ALERT; + string SOUND_DEATH; + string SOUND_FIREBALL; + string SOUND_FIREBALL_CAST; + string SOUND_IDLE; + string SOUND_JUMP1; + string SOUND_JUMP2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PARRY1; + string SOUND_PARRY2; + string SOUND_PARRY3; + string SOUND_SHAM_ALERT; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string STUN_LIST; + int TOSS_FIREBALL; + + BgoblinWeak() + { + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 80; + ATTACK_MOVERANGE = 48; + MOVE_RANGE = 48; + NPC_GIVE_EXP = 100; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 15); + NPC_ALLY_RESPONSE_RANGE = 4096; + ANIM_DEATH = "die_fallback"; + CAN_FLINCH = 1; + FLINCH_ANIM = "flinch"; + FLINCH_CHANCE = 0.25; + FLINCH_HEALTH = 100; + ANIM_SMASH = "battleaxe_swing1_L"; + ANIM_SWIPE = "swordswing1_L"; + ANIM_WARCRY = "warcry"; + ANIM_KICK = "kick"; + ANIM_BOW = "shootorcbow"; + DMG_CLUB = RandomInt(8, 15); + DMG_AXE = RandomInt(10, 20); + DMG_SWORD = RandomInt(12, 15); + GOB_TYPE = RandomInt(1, 3); + GOBLIN_JUMPRANGE = 512; + DMG_FIREBALL = 10; + DMG_FIREBALL_DOT = 5; + FREQ_FIREBALL = Random(20.0, 30.0); + GOB_JUMPER = 1; + ANIM_PARRY = "deflectcounter"; + CHARGE_SPEED = 600; + FREQ_CHARGE = 5.0; + GOB_CHARGER = 1; + GOB_CHARGE_MIN_DIST = 96; + GOB_CHARGE_MAX_DIST = 256; + MIN_FIREBALL_DIST = 96; + NEW_MODEL = 1; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN1 = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_PAIN2 = "monsters/goblin/c_gargoyle_hit2.wav"; + SOUND_ALERT1 = "monsters/goblin/c_goblin_bat1.wav"; + SOUND_ALERT2 = "monsters/goblin/c_goblin_bat2.wav"; + SOUND_IDLE = "monsters/goblin/c_goblin_slct.wav"; + SOUND_ATTACK1 = "monsters/goblin/c_goblin_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_goblin_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_goblin_atk3.wav"; + SOUND_FIREBALL_CAST = "monsters/goblin/c_gargoyle_slct.wav"; + SOUND_FIREBALL = "magic/fireball_strike.wav"; + SOUND_IDLE = "monsters/goblin/c_goblin_slct.wav"; + SOUND_JUMP1 = "monsters/goblin/c_goblin_hit1.wav"; + SOUND_JUMP2 = "monsters/goblin/c_goblin_hit2.wav"; + SOUND_PARRY1 = "body/armour1.wav"; + SOUND_PARRY2 = "body/armour2.wav"; + SOUND_PARRY3 = "body/armour3.wav"; + SOUND_CHIEF_ALERT = "monsters/goblin/c_goblinchf_bat1.wav"; + SOUND_SHAM_ALERT = "monsters/goblin/c_goblinwiz_bat1.wav"; + SOUND_DEATH = "monsters/goblin/c_goblin_dead.wav"; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + goblin_spawn(); + ScheduleDelayedEvent(1.0, "idle_mode"); + ScheduleDelayedEvent(0.01, "goblin_pre_spawn"); + } + + void goblin_pre_spawn() + { + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 80; + ATTACK_MOVERANGE = 48; + MOVE_RANGE = 48; + } + + void goblin_spawn() + { + SetName("Blood Goblin"); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + } + SetRace("goblin"); + SetBloodType("red"); + SetHealth(200); + SetRoam(true); + SetHearingSensitivity(2); + if (!(NEW_MODEL)) + { + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + else + { + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 1); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 1.25); + if (!(F_GOB_TYPE == "F_GOB_TYPE")) return; + ScheduleDelayedEvent(0.01, "goblin_set_weapon"); + } + + void goblin_set_weapon() + { + if ((GOB_TYPE_SET)) return; + GOB_TYPE_SET = 1; + if ((param1).findFirst(PARAM) == 0) + { + F_GOB_TYPE = GOB_TYPE; + } + else + { + F_GOB_TYPE = param1; + } + if (F_GOB_TYPE == 1) + { + SetModelBody(0, 0); + SetModelBody(2, 7); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.75; + string MY_HP = GetEntityHealth(GetOwner()); + MY_HP *= 1.5; + SetHealth(MY_HP); + CAN_STUN = 0; + } + if (F_GOB_TYPE == 2) + { + SetModelBody(0, 0); + SetModelBody(2, 1); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.8; + string MY_HP = GetEntityHealth(GetOwner()); + MY_HP *= 1.25; + SetHealth(MY_HP); + CAN_STUN = 0; + } + if (F_GOB_TYPE == 3) + { + CAN_FIREBALL = 1; + SetModelBody(0, 1); + SetModelBody(2, 4); + ANIM_ATTACK = ANIM_SWIPE; + ATTACK_HITCHANCE = 0.9; + CAN_STUN = 0; + } + } + + void swing_axe() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (F_GOB_TYPE == 1) + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLUB, ATTACK_HITCHANCE, "blunt"); + } + if (F_GOB_TYPE == 2) + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, "slash"); + } + } + + void swing_sword() + { + if ((TOSS_FIREBALL)) + { + toss_fireball(); + } + if ((TOSS_FIREBALL)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWORD, ATTACK_HITCHANCE, "slash"); + } + + void toss_fireball() + { + TOSS_FIREBALL = 0; + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 48, -28), m_hAttackTarget, 400, DMG_FIREBALL, 0.5, "none"); + CallExternal("ent_lastprojectile", "lighten", DMG_FIREBALL_DOT, 0.01); + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + gob_hunt(); + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if ((SUSPEND_AI)) return; + if ((I_R_FROZEN)) return; + if ((CAN_FIREBALL)) + { + if (!(IS_FLEEING)) + { + } + if (GetGameTime() > NEXT_FIREBALL) + { + } + prep_fireball(); + } + if (!(GOB_CHARGER)) return; + if (!(GetGameTime() > NEXT_LEAP)) return; + if (!(GetEntityRange(m_hAttackTarget) > GOB_CHARGE_MIN_DIST)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOB_CHARGE_MAX_DIST)) return; + if ((I_R_FROZEN)) return; + leap_forward(); + } + + void prep_fireball() + { + if (!(GetEntityRange(m_hAttackTarget) > MIN_FIREBALL_DIST)) return; + if (!(false)) return; + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + TOSS_FIREBALL = 1; + PlayAnim("critical", ANIM_SWIPE); + EmitSound(GetOwner(), 0, SOUND_FIREBALL_CAST, 10); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + } + + void leap_forward() + { + NEXT_LEAP = GetGameTime(); + NEXT_LEAP += FREQ_CHARGE; + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2 + array sounds = {SOUND_JUMP1, SOUND_JUMP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_SMASH); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, CHARGE_SPEED, 100)); + ScheduleDelayedEvent(0.5, "leap_stun"); + } + + void leap_stun() + { + STUN_LIST = FindEntitiesInSphere("enemy", 64); + if (!(STUN_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(STUN_LIST, ";"); i++) + { + stun_targets(); + } + } + + void stun_targets() + { + string CUR_TARGET = GetToken(STUN_LIST, i, ";"); + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(0, 200, 120)); + if ((CAN_STUN)) + { + ApplyEffect(CUR_TARGET, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + } + } + + void cycle_up() + { + gob_cycle_up(); + } + + void gob_cycle_up() + { + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += Random(10, 30); + if ((GOB_JUMP_SCANNING)) return; + GOB_JUMP_SCANNING = 1; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + gob_jump_check(); + } + + void cycle_down() + { + GOB_JUMP_SCANNING = 0; + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(1.0, "idle_mode"); + } + + void gob_jump_check() + { + if (!(GOB_JUMPER)) return; + if (!(GOB_JUMP_SCANNING)) return; + float GOB_HOP_DELAY = Random(2, 4); + GOB_HOP_DELAY("gob_jump_check"); + if (!(m_hAttackTarget != "unset")) return; + if ((I_R_FROZEN)) return; + if ((IS_FLEEING)) return; + if ((SUSPEND_AI)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOBLIN_JUMPRANGE)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > GOB_JUMP_THRESH) + { + if (TARGET_Z_DIFFERENCE < 500) + { + } + PlayAnim("critical", ANIM_SMASH); + ScheduleDelayedEvent(0.1, "gob_hop"); + } + } + + void gob_hop() + { + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2 + array sounds = {SOUND_JUMP1, SOUND_JUMP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + int JUMP_HEIGHT = RandomInt(350, 550); + if ((DBL_JUMP)) + { + JUMP_HEIGHT *= 2.0; + DBL_JUMP = 0; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + } + + void idle_mode() + { + if (!(m_hAttackTarget == "unset")) return; + if (!(false)) return; + SetMoveDest(m_hLastSeen); + PlayAnim("once", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + Random(10, 20)("idle_mode"); + CallExternal(m_hLastSeen, "ext_faceme", GetEntityIndex(GetOwner())); + } + + void ext_faceme() + { + if (!(m_hAttackTarget == "unset")) return; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "reply_anim"); + } + + void reply_anim() + { + PlayAnim("once", ANIM_WARCRY); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + +} + +} diff --git a/scripts/angelscript/m2_quest/boar2_weak.as b/scripts/angelscript/m2_quest/boar2_weak.as new file mode 100644 index 00000000..7f857c3a --- /dev/null +++ b/scripts/angelscript/m2_quest/boar2_weak.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "monsters/boar_base_remake.as" + +namespace MS +{ + +class Boar2Weak : CGameScript +{ + float ATTACK_HITCHANCE; + string BOAR_MODEL; + int BOAR_SIZE; + int BOAR_SKIN; + int DMG_CHARGE; + float DMG_GORE_FORWARD; + float DMG_GORE_LEFT; + float DMG_GORE_RIGHT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int NPC_GIVE_EXP; + + Boar2Weak() + { + BOAR_SIZE = 2; + BOAR_SKIN = 0; + BOAR_MODEL = "monsters/boar2.mdl"; + NPC_GIVE_EXP = 75; + DMG_GORE_FORWARD = Random(10.0, 15.0); + DMG_GORE_LEFT = Random(10.0, 15.0); + DMG_GORE_RIGHT = Random(10.0, 15.0); + DMG_CHARGE = RandomInt(20, 50); + ATTACK_HITCHANCE = 0.7; + FLEE_CHANCE = 0.1; + } + + void boar_spawn() + { + SetName("Great Boar"); + SetHealth(250); + SetHearingSensitivity(2); + SetRoam(true); + } + + void OnPostSpawn() override + { + DROP_ITEM1 = "skin_boar_heavy"; + DROP_ITEM1_CHANCE = 0.5; + } + +} + +} diff --git a/scripts/angelscript/m2_quest/game_master.as b/scripts/angelscript/m2_quest/game_master.as new file mode 100644 index 00000000..fd97ac96 --- /dev/null +++ b/scripts/angelscript/m2_quest/game_master.as @@ -0,0 +1,26 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + void gm_map_m2_quest_setmusic() + { + string SYLPH_ID = FindEntityByName("sylphiel"); + if ((GetEntityProperty(SYLPH_ID, "scriptvar"))) + { + if (!(GetEntityProperty(SYLPH_ID, "scriptvar"))) + { + CallExternal(param1, "ext_play_music_me", "FortFraeyOrch.mp3"); + } + else + { + CallExternal(param1, "ext_play_music_me", "idemarks_tower_elegie-in-bb-minor.mp3"); + } + } + } + +} + +} diff --git a/scripts/angelscript/m2_quest/goblin_needler.as b/scripts/angelscript/m2_quest/goblin_needler.as new file mode 100644 index 00000000..3a979140 --- /dev/null +++ b/scripts/angelscript/m2_quest/goblin_needler.as @@ -0,0 +1,168 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class GoblinNeedler : CGameScript +{ + string ANIM_ATTACK; + string ARROW_SCRIPT; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FIREBALL; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DMG_BOW; + int DMG_KICK; + int DROPS_CONTAINER; + int DROP_GOLD_AMT; + float FREQ_KICK; + int GOB_CHARGER; + int GOB_JUMPER; + int KICK_ATTACK; + int KICK_HITCHANCE; + int KICK_RANGE; + int MOVE_RANGE; + int NEW_MODEL; + string NEXT_KICK; + int NPC_BASE_EXP; + int NPC_RANGED; + string SOUND_BOW; + + GoblinNeedler() + { + NEW_MODEL = 1; + NPC_BASE_EXP = 50; + SOUND_BOW = "weapons/bow/bow.wav"; + GOB_JUMPER = 0; + GOB_CHARGER = 0; + DMG_BOW = RandomInt(15, 25); + DMG_KICK = RandomInt(5, 10); + KICK_RANGE = 64; + KICK_HITCHANCE = 90; + FREQ_KICK = 10.0; + CAN_FIREBALL = 0; + NPC_RANGED = 1; + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_gpoison"; + ARROW_SCRIPT = "proj_arrow_npc"; + ANIM_ATTACK = "shootorcbow"; + } + + void goblin_spawn() + { + SetName("Goblin Needler"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(100); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + SetModelBody(0, 3); + SetModelBody(1, 4); + SetModelBody(2, 2); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 0); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetModelBody(0, 1); + SetModelBody(1, 2); + SetModelBody(2, 2); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 0); + } + SetRoam(true); + SetHearingSensitivity(2); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(0.01, "gob_extras"); + } + + void gob_extras() + { + MOVE_RANGE = 2000; + ATTACK_RANGE = 2000; + ATTACK_HITRANGE = 2000; + DROP_GOLD_AMT = RandomInt(10, 30); + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void shoot_arrow() + { + string TARGET_DIST = GetEntityRange(m_hLastSeen); + string FINAL_TARGET = GetEntityOrigin(m_hLastSeen); + FINAL_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, TARGET_DIST)); + TARGET_DIST /= 100; + SetAngles("add_view.pitch"); + TossProjectile(ARROW_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 4), "none", 900, DMG_BOW, 2, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + SetModelBody(3, 0); + EmitSound(GetOwner(), SOUND_BOW); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(3, 0); + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(GetEntityRange(m_hAttackTarget) < KICK_RANGE)) return; + if (!(GetGameTime() > NEXT_KICK)) return; + NEXT_KICK = GetGameTime(); + PlayAnim("once", "break"); + SetModelBody(3, 0); + NEXT_KICK += FREQ_KICK; + ANIM_ATTACK = ANIM_KICK; + } + + void kick_land() + { + DoDamage(m_hAttackTarget, KICK_RANGE, DMG_KICK, KICK_HITCHANCE, "blunt"); + KICK_ATTACK = 1; + ANIM_ATTACK = ANIM_BOW; + npcatk_flee(m_hAttackTarget, 1024, 3.0); + } + + void OnFlee() + { + SetMoveSpeed(2.0); + } + + void npcatk_stopflee() + { + SetMoveSpeed(1.0); + } + + void game_dodamage() + { + if ((KICK_ATTACK)) + { + if ((param1)) + { + } + if (GetEntityRange(param2) < KICK_RANGE) + { + } + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + KICK_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/m2_quest/pot.as b/scripts/angelscript/m2_quest/pot.as new file mode 100644 index 00000000..99dbfdeb --- /dev/null +++ b/scripts/angelscript/m2_quest/pot.as @@ -0,0 +1,41 @@ +#pragma context server + +namespace MS +{ + +class Pot : CGameScript +{ + string GLOW_COLOR; + int GLOW_RAD; + int PLAYING_DEAD; + + void OnSpawn() override + { + SetName("cooking_pot"); + SetInvincible(true); + PLAYING_DEAD = 1; + SetNoPush(true); + SetWidth(16); + SetHeight(72); + SetModel("props/pot1.mdl"); + GLOW_COLOR = Vector3(255, 200, 128); + GLOW_RAD = 64; + ScheduleDelayedEvent(0.1, "glow_loop"); + } + + void glow_loop() + { + ScheduleDelayedEvent(10.0, "glow_loop"); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), GLOW_COLOR, GLOW_RAD, 10.1); + } + + void ext_cooking() + { + SetModelBody(0, 1); + GLOW_COLOR = Vector3(255, 225, 164); + GLOW_RAD = 96; + } + +} + +} diff --git a/scripts/angelscript/m2_quest/sylphiel.as b/scripts/angelscript/m2_quest/sylphiel.as new file mode 100644 index 00000000..80cf6e8b --- /dev/null +++ b/scripts/angelscript/m2_quest/sylphiel.as @@ -0,0 +1,762 @@ +#pragma context server + +#include "monsters/base_chat_array.as" +#include "monsters/debug.as" + +namespace MS +{ + +class Sylphiel : CGameScript +{ + int ALL_QUESTS_DONE; + string ANIM_BLUSH; + string ANIM_COOK; + string ANIM_IDLE; + string ANIM_RAGE; + string ANIM_RAGE_WALK; + string ANIM_RANT; + string ANIM_VICTORY; + string ANIM_WALK; + string CHAT_CURRENT_SPEAKER; + int CHAT_TEMP_NO_AUTO_FACE; + string CHECK_PACING; + string CIRCLE_ACTIVE; + string COMPLAIN_BLOCKED; + string COOKING_POT_ID; + string COOK_COMPLAIN; + int COUNT_APPLE; + int COUNT_LADEL; + int COUNT_MEAD; + int COUNT_PEPPER; + int COUNT_SALT; + string DID_FIRST_HELP; + int DID_HELP; + int DID_INTRO; + int DO_THANK; + string LAST_GAVE_SOUP; + string LOCKED_PLAYER; + int MAX_APPLE; + int MAX_LADEL; + int MAX_MEAD; + int MAX_PEPPER; + int MAX_SALT; + int MENU_ENABLE_HELP; + string MY_ID; + string NEXT_ATTACK; + string NEXT_PACE; + string NPCATK_TARGET; + int NPC_NO_PLAYER_DMG; + string POS_SECOND_QUEST; + string QCODE_APPLE; + string QCODE_LADEL; + string QCODE_MEAD; + string QCODE_PEPPER; + string QCODE_SALT; + int QUEST_COMPLETE; + int QUEST_ENABLED; + string QUEST_PLAYER; + int QUEST_SOUP_COMPLETE; + string SECOND_QUEST_INPROGRESS; + int SECOND_QUEST_OFFERED; + string SECOND_QUEST_READY; + string SOUP_LIST; + int SOUP_READY; + string WASTING_MY_TIME; + + Sylphiel() + { + NPC_NO_PLAYER_DMG = 1; + ANIM_BLUSH = "anim_blush"; + ANIM_RANT = "anim_rant"; + QUEST_SOUP_COMPLETE = 0; + COUNT_APPLE = 0; + MAX_APPLE = 5; + COUNT_SALT = 0; + MAX_SALT = 1; + COUNT_PEPPER = 0; + MAX_PEPPER = 1; + COUNT_MEAD = 0; + MAX_MEAD = 5; + COUNT_LADEL = 0; + MAX_LADEL = 1; + QCODE_APPLE = "ap"; + QCODE_SALT = "bs"; + QCODE_PEPPER = "bp"; + QCODE_MEAD = "km"; + QCODE_LADEL = "la"; + ANIM_BLUSH = "anim_blush"; + ANIM_RAGE = "anim_rage"; + ANIM_RAGE_WALK = "anim_rage_walk"; + ANIM_VICTORY = "wave"; + ANIM_COOK = "keypad"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + SOUP_LIST = ""; + POS_SECOND_QUEST = Vector3(-888, -536, -544); + } + + void OnRepeatTimer() + { + SetRepeatDelay(5.0); + if ((CHECK_PACING)) + { + if (!(QUEST_COMPLETE)) + { + } + if (!(SECOND_QUEST_READY)) + { + } + if (!(SECOND_QUEST_INPROGRESS)) + { + } + if (!(SECOND_QUEST_OFFERED)) + { + } + if (GetGameTime() > NEXT_PACE) + { + } + GetAllPlayers(PLAYER_LIST); + string SORT_PLAYERS = /* TODO: $sort_entlist */ $sort_entlist(PLAYER_LIST, "range"); + string TEST_PLAYER = GetToken(SORT_PLAYERS, 0, ";"); + if (GetEntityRange(TEST_PLAYER) > 256) + { + } + if (!(CIRCLE_ACTIVE)) + { + } + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_WALK); + CIRCLE_ACTIVE = 1; + circle_pot(); + } + else + { + SetIdleAnim(ANIM_IDLE); + } + if ((false)) + { + } + NPCATK_TARGET = GetEntityIndex(m_hLastSeen); + if (GetEntityRange(m_hAttackTarget) < 128) + { + } + stop_circle(); + NEXT_PACE = GetGameTime(); + NEXT_PACE += 30.0; + SetMoveDest(m_hAttackTarget); + do_attack(); + } + + void OnSpawn() override + { + SetName("Sylphiel"); + SetName("sylphiel"); + SetRace("human"); + SetWidth(32); + SetHeight(72); + SetRoam(false); + SetModel("npc/human2.mdl"); + SetInvincible(true); + SetNoPush(true); + LOCKED_PLAYER = "none"; + GetAllPlayers(PLAYER_LIST); + SetSayTextRange(1024); + ScheduleDelayedEvent(3.0, "scan_for_players"); + ScheduleDelayedEvent(2.0, "get_pot_id"); + CIRCLE_ACTIVE = 1; + ScheduleDelayedEvent(3.0, "circle_pot"); + } + + void game_precache() + { + Precache("m2_quest/pot"); + } + + void get_pot_id() + { + COOKING_POT_ID = FindEntityByName("cooking_pot"); + } + + void game_dynamically_created() + { + ScheduleDelayedEvent(0.1, "setup_debug_pot"); + } + + void setup_debug_pot() + { + string POT_ORG = GetEntityOrigin(GetOwner()); + POT_ORG += "x"; + SpawnNPC("m2_quest/pot", POT_ORG, ScriptMode::Legacy); + } + + void scan_for_players() + { + SetMoveAnim(ANIM_RAGE_WALK); + SetIdleAnim(ANIM_RAGE_WALK); + LogDebug("scan_for_players"); + if ((DID_INTRO)) return; + ScheduleDelayedEvent(1.0, "scan_for_players"); + GetAllPlayers(PLAYER_LIST); + if (LOCKED_PLAYER == "none") + { + int FIND_NEW_LOCK = 1; + } + if (!((LOCKED_PLAYER !is null))) + { + int FIND_NEW_LOCK = 1; + } + if (GetEntityRange(LOCKED_PLAYER) > 512) + { + int FIND_NEW_LOCK = 1; + } + if (!(FIND_NEW_LOCK)) return; + string SORT_PLAYERS = /* TODO: $sort_entlist */ $sort_entlist(PLAYER_LIST, "range"); + string TEST_PLAYER = GetToken(SORT_PLAYERS, 0, ";"); + if (!(GetEntityRange(TEST_PLAYER) < 64)) return; + LOCKED_PLAYER = TEST_PLAYER; + if ((DID_INTRO)) return; + SetIdleAnim(ANIM_IDLE); + DID_INTRO = 1; + CHAT_CURRENT_SPEAKER = LOCKED_PLAYER; + do_intro(); + } + + void stop_circle() + { + if ((CIRCLE_ACTIVE)) + { + SetIdleAnim(ANIM_IDLE); + } + CIRCLE_ACTIVE = 0; + } + + void do_intro() + { + CHAT_TEMP_NO_AUTO_FACE = 1; + CIRCLE_ACTIVE = 1; + chat_now("By the blood of the gods! Those damn goblins!", 1.0, "none", "none", "clear_que", "add_to_que", "sound:voices/m2_quest/sylphiel_cuss.wav"); + chat_now("May The Lost take their filthy little souls!", 4.0, ANIM_RAGE, "do_intro2", "add_to_que", "sound:voices/m2_quest/sylphiel_rage.wav"); + } + + void do_intro2() + { + stop_circle(); + PlayAnim("once", "break"); + SetMoveDest(LOCKED_PLAYER); + chat_now("Oh, sorry...", 2.0, ANIM_BLUSH, "do_intro3", "add_to_que", "sound:voices/m2_quest/sylphiel_hi.wav"); + chat_now("Didn't mean for anyone to actually hear that.", 3.0, "lean", "none", "add_to_que"); + chat_now("Hey! Don't I know you from the Edana Inn?", 3.0, "pondering", "move_closer", "add_to_que"); + if (GetPlayerCount() > 1) + { + chat_now("You're adventurers, aren't you? Maybe you could [help] me?", 3.0, "pondering3", !"hold_for_help", "add_to_que"); + } + else + { + chat_now("You're an adventurer, aren't you? Maybe you could [help] me?", 3.0, "pondering3", !"hold_for_help", "add_to_que"); + } + } + + void move_closer() + { + EmitSound(GetOwner(), 0, "voices/m2_quest/sylphiel_help.wav", 10); + SetMoveDest(LOCKED_PLAYER); + } + + void hold_for_help() + { + MENU_ENABLE_HELP = 1; + SetMoveAnim("pondering3"); + SetIdleAnim("pondering3"); + CatchSpeech("menu_help", "help"); + } + + void game_menu_getoptions() + { + if (!(DID_INTRO)) + { + SetIdleAnim(ANIM_IDLE); + DID_INTRO = 1; + CHAT_CURRENT_SPEAKER = param1; + LOCKED_PLAYER = param1; + do_intro(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(DID_INTRO)) return; + CHAT_CURRENT_SPEAKER = param1; + LOCKED_PLAYER = param1; + if ((CIRCLE_ACTIVE)) + { + stop_circle(); + NEXT_PACE = GetGameTime(); + NEXT_PACE += 30.0; + } + if (!(DOING_SOUP)) + { + SetMoveDest(LOCKED_PLAYER); + } + if ((ALL_QUESTS_DONE)) + { + chat_now("Thanks for all the help! I'll see you in town in a few days.", 3.0, "none", "none", "add_to_que"); + } + if ((SOUP_READY)) + { + stop_circle(); + string L_PLR_INDEX = GetEntityIndex(param1); + LogDebug("game_menu_getoptions L_PLR_INDEX vs SOUP_LIST vs FindToken(SOUP_LIST, L_PLR_INDEX, ";")"); + if (FindToken(SOUP_LIST, L_PLR_INDEX, ";") == -1) + { + } + string reg.mitem.title = "(Get soup)"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_get_soup"; + } + if ((SECOND_QUEST_READY)) + { + stop_circle(); + string reg.mitem.title = "One other thing?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_help"; + } + if ((QUEST_COMPLETE)) return; + if ((SECOND_QUEST_READY)) return; + if ((SECOND_QUEST_INPROGRESS)) return; + if ((SECOND_QUEST_OFFERED)) return; + QUEST_PLAYER = param1; + if ((MENU_ENABLE_HELP)) + { + string reg.mitem.title = "How can I help?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_help"; + } + if (!(DID_FIRST_HELP)) return; + tally_quest_items(GetEntityIndex(param1)); + if ((QUEST_ENABLED)) + { + CHECK_PACING = 1; + string reg.mitem.title = "Golden Apples ("; + reg.mitem.title += int(COUNT_APPLE); + reg.mitem.title += "/"; + reg.mitem.title += int(MAX_APPLE); + reg.mitem.title += ")"; + if (COUNT_APPLE >= MAX_APPLE) + { + string reg.mitem.type = "green"; + } + else + { + string reg.mitem.type = "disabled"; + } + string reg.mitem.title = "Bag of Salt ("; + reg.mitem.title += int(COUNT_SALT); + reg.mitem.title += "/"; + reg.mitem.title += int(MAX_SALT); + reg.mitem.title += ")"; + if (COUNT_SALT >= MAX_SALT) + { + string reg.mitem.type = "green"; + } + else + { + string reg.mitem.type = "disabled"; + } + string reg.mitem.title = "Bag of Pepper ("; + reg.mitem.title += int(COUNT_PEPPER); + reg.mitem.title += "/"; + reg.mitem.title += int(MAX_PEPPER); + reg.mitem.title += ")"; + if (COUNT_PEPPER >= MAX_PEPPER) + { + string reg.mitem.type = "green"; + } + else + { + string reg.mitem.type = "disabled"; + } + string reg.mitem.title = "Barrel of Honeymead ("; + reg.mitem.title += int(COUNT_MEAD); + reg.mitem.title += "/"; + reg.mitem.title += int(MAX_MEAD); + reg.mitem.title += ")"; + if (COUNT_MEAD >= MAX_MEAD) + { + string reg.mitem.type = "green"; + } + else + { + string reg.mitem.type = "disabled"; + } + string reg.mitem.title = "Ladel ("; + reg.mitem.title += int(COUNT_LADEL); + reg.mitem.title += "/"; + reg.mitem.title += int(MAX_LADEL); + reg.mitem.title += ")"; + if (COUNT_LADEL >= MAX_LADEL) + { + string reg.mitem.type = "green"; + } + else + { + string reg.mitem.type = "disabled"; + } + } + } + + void menu_help() + { + if ((ALL_QUESTS_DONE)) return; + if ((IsValidPlayer(param1))) + { + CHAT_CURRENT_SPEAKER = param1; + LOCKED_PLAYER = param1; + } + else + { + CHAT_CURRENT_SPEAKER = GetEntityIndex("ent_lastspoke"); + LOCKED_PLAYER = CHAT_CURRENT_SPEAKER; + } + if ((SECOND_QUEST_READY)) + { + SECOND_QUEST_READY = 0; + SECOND_QUEST_INPROGRESS = 1; + chat_now("My grams, as you might guess by all the weird stuff on these shelves, was a bit of an alchemist.", 4.0, "converse1", "none", "add_to_que"); + chat_now("She passed on, just a bit ago, and I came here to maybe, try my hand at it...", 4.0, "none", "none", "add_to_que"); + chat_now("But there's a lot of secrets in this old house, and I'm a little afraid of what I might find...", 4.0, "lean", "none", "add_to_que"); + chat_now("Over here, for instance...", 2.0, "no_convo", "second_quest_show", "add_to_que"); + } + if ((SECOND_QUEST_READY)) return; + if ((SECOND_QUEST_INPROGRESS)) return; + if (!(DID_FIRST_HELP)) + { + WASTING_MY_TIME = -2; + DID_FIRST_HELP = 1; + } + if ((DID_HELP)) + { + chat_now("Just bring me these items, and we'll be golden.", 4.0, "pondering3", "none", "add_to_que", "sound:voices/m2_quest/sylphiel_help.wav"); + ScheduleDelayedEvent(0.1, "send_menu"); + } + if ((DID_HELP)) return; + enable_quest(); + chat_now("I came here, to my grand's house, to put together some of her special stew, for the inn.", 4.0, "converse1", "none", "add_to_que"); + chat_now("But I must have left the place unlocked on my last visit, as those damned goblins have been in here.", 3.0, "none", "none", "add_to_que"); + chat_now("The little green thieves went and pilfered all my ingredients!", 4.0, "none", "none", "add_to_que"); + chat_now("If you can track them down, and get my stuff back, maybe I can give you a free sample!", 5.0, "none", "none", "add_to_que"); + chat_now("Plus I'll have some more, when I get back to town.", 3.0, "pondering", "none", "add_to_que"); + chat_now("I need five of granny's golden apples, a sack of pepper, a sack of salt, and some honeymead.", 6.0, "none", "none", "add_to_que"); + chat_now("Waddya say ya help ol Sylphiel out, aye? Just find the ingredients and bring them back here.", 6.0, "pondering3", "none", "add_to_que"); + DID_HELP = 1; + } + + void send_menu() + { + OpenMenu(LOCKED_PLAYER); + } + + void enable_quest() + { + QUEST_ENABLED = 1; + } + + void tally_quest_items() + { + DO_THANK = 0; + MY_ID = GetEntityIndex(GetOwner()); + QUEST_PLAYER = param1; + check_quest_items(QCODE_APPLE); + check_quest_items(QCODE_SALT); + check_quest_items(QCODE_PEPPER); + check_quest_items(QCODE_MEAD); + check_quest_items(QCODE_LADEL); + int L_QUEST_COMPLETE = 1; + if (COUNT_APPLE < MAX_APPLE) + { + int L_QUEST_COMPLETE = 0; + } + if (COUNT_SALT < MAX_SALT) + { + int L_QUEST_COMPLETE = 0; + } + if (COUNT_PEPPER < MAX_PEPPER) + { + int L_QUEST_COMPLETE = 0; + } + if (COUNT_MEAD < MAX_MEAD) + { + int L_QUEST_COMPLETE = 0; + } + if (COUNT_LADEL < MAX_LADEL) + { + int L_QUEST_COMPLETE = 0; + } + if ((DO_THANK)) + { + WASTING_MY_TIME = 0; + if (!(L_QUEST_COMPLETE)) + { + } + THANK_INDEX += 1; + if (THANK_INDEX == 1) + { + chat_now("Thank you for that.", 1.0, "none", "none", "add_to_que"); + EmitSound(GetOwner(), 0, "voices/m2_quest/sylphiel_thanks1.wav", 10); + } + if (THANK_INDEX == 2) + { + THANK_INDEX = 0; + chat_now("I appreciate it.", 1.0, "none", "none", "add_to_que"); + EmitSound(GetOwner(), 0, "voices/m2_quest/sylphiel_thanks2.wav", 10); + } + } + else + { + if (!(L_QUEST_COMPLETE)) + { + } + WASTING_MY_TIME += 1; + if (WASTING_MY_TIME > 1) + { + chat_now("You're wasting time... Get going!", 2.0, "pondering3", "none", "add_to_que", "sound:voices/m2_quest/sylphiel_impatient.wav"); + WASTING_MY_TIME = 0; + } + } + if (!(L_QUEST_COMPLETE)) return; + QUEST_COMPLETE = 1; + CHECK_PACING = 0; + stop_circle(); + SetIdleAnim(ANIM_IDLE); + ScheduleDelayedEvent(1.0, "do_soup"); + } + + void check_quest_items() + { + string L_CODE = param1; + CallExternal(GAME_MASTER, "ext_check_quest_item", L_CODE, MY_ID); + } + + void ext_receive_quest_item() + { + if (param1 == QCODE_APPLE) + { + COUNT_APPLE += 1; + } + if (param1 == QCODE_SALT) + { + COUNT_SALT += 1; + } + if (param1 == QCODE_PEPPER) + { + COUNT_PEPPER += 1; + } + if (param1 == QCODE_MEAD) + { + COUNT_MEAD += 1; + } + if (param1 == QCODE_LADEL) + { + COUNT_LADEL += 1; + } + DO_THANK = 1; + } + + void do_soup() + { + SetMoveDest(QUEST_PLAYER); + chat_now("That's the way! All right!", 2.0, ANIM_VICTORY, "none", "add_to_que", "clear_que", "sound:voices/m2_quest/sylphiel_victory1.wav"); + chat_now("Haha! Alright, let's get cooking!", 2.0, "no_convo", "do_cook_loop", "add_to_que", "sound:voices/m2_quest/sylphiel_victory2.wav"); + COOK_COMPLAIN = GetGameTime(); + COOK_COMPLAIN += 10.0; + } + + void do_cook_loop() + { + SetMoveAnim(ANIM_WALK); + SetMoveDest(COOKING_POT_ID); + string POT_ORG = GetEntityOrigin(COOKING_POT_ID); + string MY_ORG = GetEntityOrigin(GetOwner()); + float POT_DIST = Distance2D(MY_ORG, POT_ORG); + LogDebug("do_cook_loop POT_DIST"); + if (POT_DIST > 32) + { + Random(1_0, 2_0)("do_cook_loop"); + if (GetGameTime() > COOK_COMPLAIN) + { + COOK_COMPLAIN = GetGameTime(); + COOK_COMPLAIN += 10.0; + SayText("Stand aside, you're between me and my pot!"); + EmitSound(GetOwner(), 0, "voices/m2_quest/sylphiel_blocked.wav", 10); + } + } + else + { + do_soup2(); + } + } + + void do_soup2() + { + SetMoveDest(COOKING_POT_ID); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_COOK); + CallExternal(COOKING_POT_ID, "ext_cooking"); + ScheduleDelayedEvent(6.0, "soups_on"); + } + + void soups_on() + { + chat_now("Alright, I'm done with this...", 2.0, ANIM_COOK, "none", "clear_que", "add_to_que", "sound:voices/m2_quest/sylphiel_done.wav"); + chat_now("Gather here, form up, and get your soup!", 3.0, "no_convo", "soups_on2", "add_to_que", "sound:voices/m2_quest/sylphiel_soupson.wav"); + } + + void soups_on2() + { + PlayAnim("once", "break"); + SetMoveDest(LOCKED_PLAYER); + SOUP_READY = 1; + } + + void circle_pot() + { + if ((CIRCLE_ACTIVE)) + { + string WANDER_POINT = GetEntityOrigin(COOKING_POT_ID); + string ANGLE_TO_NPC = /* TODO: $angles */ $angles(WANDER_POINT, GetMonsterProperty("origin")); + string MY_ORG = GetEntityOrigin(GetOwner()); + ANGLE_TO_NPC += 60.0; + if (ANGLE_TO_NPC > 359.99) + { + ANGLE_TO_NPC -= 359.99; + } + WANDER_POINT += /* TODO: $relpos */ $relpos(Vector3(0, ANGLE_TO_NPC, 0), Vector3(0, 32, 0)); + SetMoveDest(WANDER_POINT); + ScheduleDelayedEvent(1.0, "circle_pot"); + } + } + + void menu_get_soup() + { + if (SOUP_LIST.length() > 0) SOUP_LIST += ";"; + SOUP_LIST += GetEntityIndex(param1); + // TODO: offer PARAM1 mana_soup + string L_QUEST_COUNT = GetPlayerQuestData(param1, "sy"); + L_QUEST_COUNT += 1; + SetPlayerQuestData(param1, "sy"); + ShowHelpTip(param1, "generic", "Sylphiel's Soup", "Provides full health and three minutes of rapid mana regeneration"); + PlayAnim("once", "push_button"); + chat_now("There ya go, one free sample of Sylphee's delicious soup!", 2.0, "none", "none", "add_to_que"); + LAST_GAVE_SOUP = param1; + string L_NSOUPS = GetTokenCount(SOUP_LIST, ";"); + L_NSOUPS += 1; + if (L_NSOUPS >= "game.playersnb") + { + ScheduleDelayedEvent(2.0, "second_quest_start"); + } + if ((SECOND_QUEST_OFFERED)) return; + ScheduleDelayedEvent(90.0, "second_quest_start"); + } + + void second_quest_start() + { + if ((SECOND_QUEST_OFFERED)) return; + SECOND_QUEST_OFFERED = 1; + SECOND_QUEST_READY = 1; + SetMoveDest(LAST_GAVE_SOUP); + chat_now("Listen... There is one other little thing you can [help] me with, if you're interested.", 4.0, "ponder", "none", "add_to_que", "sound:voices/m2_quest/sylphiel_hey_listen.wav"); + } + + void second_quest_show() + { + PlayAnim("once", "break"); + SetMoveAnim("walk"); + SetMoveDest(POS_SECOND_QUEST); + COMPLAIN_BLOCKED = GetGameTime(); + COMPLAIN_BLOCKED += 10.0; + ScheduleDelayedEvent(1.0, "second_quest_show_loop"); + } + + void second_quest_show_loop() + { + string MY_POS = GetEntityOrigin(GetOwner()); + if (Distance(MY_POS, POS_SECOND_QUEST) > 8) + { + SetMoveDest(POS_SECOND_QUEST); + Random(1_0, 2_0)("second_quest_show_loop"); + if (GetGameTime() > COMPLAIN_BLOCKED) + { + COMPLAIN_BLOCKED = GetGameTime(); + COMPLAIN_BLOCKED += 10.0; + chat_now("Stand aside, you're in my way...", 1.0, "pondering3", "none", "add_to_que", "sound:voices/m2_quest/sylphiel_blocked.wav"); + } + } + else + { + second_quest_show2(); + } + } + + void second_quest_show2() + { + SetAngles("face"); + UseTrigger("spawn_sylph_reward"); + chat_now("Have a look behind here...", 3.0, "buysoda", "second_quest_open_secret", "add_to_que", "sound:voices/m2_quest/sylphiel_lookhere.wav"); + chat_now("Search this carefully... I just want to be sure it's safe - but if you find anything, it's yours.", 4.0, "ponder", "none", "add_to_que", "sound:voices/m2_quest/sylphiel_secrets.wav"); + } + + void second_quest_open_secret() + { + SetAngles("face"); + UseTrigger("door_syph1"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + NPCATK_TARGET = GetEntityIndex(m_hLastStruck); + SetMoveDest(m_hAttackTarget); + do_attack(); + NEXT_PACE = GetGameTime(); + NEXT_PACE += 30.0; + } + + void do_attack() + { + if (!(GetGameTime() > NEXT_ATTACK)) return; + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += 3.0; + if (RandomInt(1, 2) == 1) + { + chat_now("Bring it on!", 2.0, "seeya", "none", "add_to_que"); + EmitSound(GetOwner(), 0, "voices/m2_quest/sylphiel_attacked.wav", 10); + } + else + { + chat_now("You're messing with more trouble than you can handle!", 2.0, "seeya", "none", "add_to_que"); + EmitSound(GetOwner(), 0, "voices/m2_quest/sylphiel_warn.wav", 10); + } + ScheduleDelayedEvent(2.0, "fake_frame_attack"); + } + + void fake_frame_attack() + { + DoDamage(m_hAttackTarget, 64, 2, 1.0, "blunt"); + } + + void ext_saw_chest() + { + chat_now("Oh, will you look at that, a sinister looking chest...", 4.0, "pondering", "none", "add_to_que"); + chat_now("Eh, just, take it. I don't even want to know what's in there.", 4.0, "none", "none", "add_to_que"); + chat_now("...and I'm also not going to ask what's kept that candle burning all this time.", 4.0, "none", "none", "add_to_que"); + chat_now("*sigh* It's just so typical of grams, having something like this.", 4.0, "pondering3", "none", "add_to_que"); + ALL_QUESTS_DONE = 1; + } + + void npc_suicide() + { + if (param1 == "only_bad") + { + DeleteEntity(GetOwner()); + } + } + +} + +} diff --git a/scripts/angelscript/m2_quest/sylphiels_stuff.as b/scripts/angelscript/m2_quest/sylphiels_stuff.as new file mode 100644 index 00000000..f7bd6144 --- /dev/null +++ b/scripts/angelscript/m2_quest/sylphiels_stuff.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/qitem.as" + +namespace MS +{ + +class SylphielsStuff : CGameScript +{ +} + +} diff --git a/scripts/angelscript/m2_quest/vgoblin_weak.as b/scripts/angelscript/m2_quest/vgoblin_weak.as new file mode 100644 index 00000000..b4d72cc1 --- /dev/null +++ b/scripts/angelscript/m2_quest/vgoblin_weak.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class VgoblinWeak : CGameScript +{ + string ANIM_ATTACK; + string ATTACK_HITCHANCE; + string CAN_FIREBALL; + string CAN_POISON; + string CAN_STUN; + int DMG_AXE; + int DMG_CLUB; + int DMG_FIREBALL; + int DMG_SWORD; + int DOT_POISON; + string DROP_ITEM1; + string DROP_ITEM1_CHANCE; + string F_GOB_TYPE; + int GOB_TYPE_SET; + int NEW_MODEL; + int NPC_BASE_EXP; + string SOUND_FIREBALL; + int TOSS_FIREBALL; + + VgoblinWeak() + { + NEW_MODEL = 1; + NPC_BASE_EXP = 150; + DMG_CLUB = RandomInt(10, 20); + DMG_AXE = RandomInt(10, 25); + DMG_SWORD = RandomInt(5, 25); + DMG_FIREBALL = 20; + DOT_POISON = RandomInt(1, 5); + SOUND_FIREBALL = "bullchicken/bc_attack2.wav"; + } + + void goblin_spawn() + { + SetName("Vile Goblin"); + SetHealth(300); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + } + SetRace("goblin"); + SetBloodType("green"); + SetRoam(true); + SetHearingSensitivity(2); + if (!(NEW_MODEL)) + { + SetModelBody(0, 2); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 3); + } + else + { + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("poison", 0.5); + SetDamageResistance("lightning", 1.5); + ScheduleDelayedEvent(0.01, "goblin_set_weapon"); + } + + void goblin_set_weapon() + { + if ((GOB_TYPE_SET)) return; + GOB_TYPE_SET = 1; + F_GOB_TYPE = GOB_TYPE; + if ((param1).findFirst(PARAM) == 0) + { + int DO_NADDA = 1; + } + else + { + F_GOB_TYPE = param1; + } + if (F_GOB_TYPE == 1) + { + SetDamageResistance("all", 0.75); + SetModelBody(2, 7); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.75; + string MY_HP = GetEntityHealth(GetOwner()); + MY_HP *= 1.5; + SetHealth(MY_HP); + CAN_STUN = 0; + } + if (F_GOB_TYPE == 2) + { + SetDamageResistance("all", 0.75); + SetModelBody(2, 1); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.8; + string MY_HP = GetEntityHealth(GetOwner()); + MY_HP *= 1.25; + SetHealth(MY_HP); + CAN_STUN = 0; + CAN_POISON = 1; + DROP_ITEM1 = "axes_poison1"; + DROP_ITEM1_CHANCE = 0.05; + } + if (F_GOB_TYPE == 3) + { + CAN_FIREBALL = 1; + SetModelBody(0, 1); + SetModelBody(2, 4); + ANIM_ATTACK = ANIM_SWIPE; + ATTACK_HITCHANCE = 0.9; + CAN_STUN = 0; + CAN_POISON = 1; + DROP_ITEM1 = "swords_poison1"; + DROP_ITEM1_CHANCE = 0.05; + } + } + + void toss_fireball() + { + TOSS_FIREBALL = 0; + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 48, 0), m_hAttackTarget, 400, DMG_FIREBALL, 0.5, "none"); + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + } + + void swing_dodamage() + { + if (!(param1)) return; + if (!(CAN_POISON)) return; + if (!(RandomInt(1, 3) == 1)) return; + ApplyEffect(param2, "effects/dot_poison", 5, GetEntityIndex(GetOwner()), DOT_POISON); + } + +} + +} diff --git a/scripts/angelscript/mercenaries/archer.as b/scripts/angelscript/mercenaries/archer.as new file mode 100644 index 00000000..b3ac148b --- /dev/null +++ b/scripts/angelscript/mercenaries/archer.as @@ -0,0 +1,208 @@ +#pragma context server + +namespace MS +{ + +class Archer : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + float FLEE_CHANCE; + int FLEE_HEALTH; + int FLINCH_DELAY; + int IS_FLEEING; + int MOVE_RANGE; + int SEE_ENEMY; + string SND_ATTACK1; + string SND_ATTACK2; + string SND_ATTACK3; + string SND_BOW; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SOUND_PAINYELL; + string SOUND_WARCRY1; + + void OnSpawn() override + { + SetHealth(120); + SetWidth(32); + SetHeight(85); + SetRace("orc"); + SetName("Human Archer"); + SetRoam(true); + SetSkillLevel(0); + SetGold(RandomInt(6, 10)); + SetHearingSensitivity(3); + SetModel("npc/archer.mdl"); + SetDamageResistance("all", ".8"); + SetModelBody(0, 2); + SetModelBody(1, 1); + SetModelBody(2, 3); + SetIdleAnim("idle1"); + SetMoveAnim("walk"); + SetActionAnim("shootorcbow"); + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAINYELL = "voices/human/male_hit1.wav"; + SOUND_WARCRY1 = "voices/human/male_guard_shout.wav"; + SND_ATTACK1 = "voices/human/male_hit1.wav"; + SND_ATTACK2 = "voices/human/male_hit2.wav"; + SND_ATTACK3 = "voices/human/male_hit3.wav"; + SND_BOW = "weapons/bow/bow.wav"; + const string SOUND_DEATH = "voices/human/male_die.wav"; + CAN_FLINCH = 1; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + MOVE_RANGE = 40; + ATTACK_RANGE = 600; + ATTACK_HITRANGE = 650; + ATTACK_DAMAGE = 7; + ATTACK_HITCHANCE = 0.9; + FLINCH_DELAY = 4; + FLEE_HEALTH = 10; + FLEE_CHANCE = 0.15; + IS_FLEEING = 0; + SetStat("parry", 5); + hunt_look(); + } + + void wield_battleaxe() + { + SetModelBody(2, 2); + } + + void drop_battleaxe() + { + SetModelBody(2, 0); + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void hunt_look() + { + SetRepeatDelay(0.2); + CanSee("enemy"); + warcry(); + SetMoveAnim(ANIM_RUN); + SetMoveDest(m_hLastSeen); + SEE_ENEMY = 1; + hunt_attack(); + } + + void wander() + { + SetMoveAnim(ANIM_WALK); + SEE_ENEMY = 0; + } + + void hunt_attack() + { + if (!(LASTSEENENTITY_DISTANCE <= ATTACK_RANGE)) return; + SetMoveDest(m_hLastSeen); + // TODO: UNCONVERTED: attack anim + } + + void shoot_arrow() + { + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 0), m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, 0, "none"); + SetModelBody(3, 0); + EmitSound(GetOwner(), SND_BOW); + } + + void warcry() + { + SEE_ENEMY = "equals"; + SetVolume(10); + EmitSound(GetOwner(), SOUND_WARCRY1); + } + + void attackstrike() + { + SetVolume(10); + // PlayRandomSound from: SND_ATTACK1, SND_ATTACK2, SND_ATTACK3 + array sounds = {SND_ATTACK1, SND_ATTACK2, SND_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void struck() + { + SetVolume(10); + // PlayRandomSound from: SOUND_PAINYELL, SND_STRUCK2, SOUND_PAINYELL + array sounds = {SOUND_PAINYELL, SND_STRUCK2, SOUND_PAINYELL}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + flinch(); + retaliate(); + } + + void flinch() + { + if (!(CAN_FLINCH == 1)) return; + PlayAnim("critical", "flinch"); + CAN_FLINCH = 0; + ScheduleDelayedEvent(FLINCH_DELAY, "resetflinch"); + } + + void resetflinch() + { + CAN_FLINCH = 1; + } + + void retaliate() + { + if (!(RandomInt(1, 3) == 1)) return; + SetMoveDest(m_hLastStruck); + LookAt(GetOwner()); + hunt_look(); + } + + void checkflee() + { + if (!(CURRENT_HEALTH <= FLEE_HEALTH)) return; + if (!(RandomInt(0, 100) < FLEE_CHANCE)) return; + SetMoveAnim(ANIM_RUN); + SetMoveDest("flee"); + IS_FLEEING = 1; + ScheduleDelayedEvent(0.5, "stopflee"); + } + + void stopflee() + { + IS_FLEEING = 0; + } + + void facenewenemy() + { + if (!(IS_FLEEING == 0)) return; + SetMoveDest("moveto"); + LookAt(1024); + } + + void death() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_DEATH); + SetModelBody(2, 0); + dropstuff(); + } + + void dropstuff() + { + if (!(RandomInt(0, 100) >= 40)) return; + GiveItem("proj_arrow_iron", 30); + if (!(RandomInt(0, 100) >= 10)) return; + GiveItem(GetOwner(), "bows_shortbow"); + } + +} + +} diff --git a/scripts/angelscript/mercenaries/archerf.as b/scripts/angelscript/mercenaries/archerf.as new file mode 100644 index 00000000..583ca7e7 --- /dev/null +++ b/scripts/angelscript/mercenaries/archerf.as @@ -0,0 +1,116 @@ +#pragma context server + +#include "monsters/base_npc_attack.as" + +namespace MS +{ + +class Archerf : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string ANIM_WALK; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HUNT; + float FLEE_CHANCE; + int FLEE_HEALTH; + int FLINCH_DELAY; + int HUNT_AGRO; + int MOVE_RANGE; + string SND_ATTACK1; + string SND_ATTACK2; + string SND_ATTACK3; + string SND_BOW; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SOUND_DEATH; + string SOUND_PAINYELL; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + + Archerf() + { + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAINYELL = "voices/human/male_hit1.wav"; + SOUND_WARCRY1 = "voices/human/male_guard_shout.wav"; + SOUND_WARCRY2 = "voices/human/male_guard_shout2.wav"; + SND_ATTACK1 = "voices/human/male_hit1.wav"; + SND_ATTACK2 = "voices/human/male_hit2.wav"; + SND_ATTACK3 = "voices/human/male_hit3.wav"; + SND_BOW = "weapons/bow/bow.wav"; + SOUND_DEATH = "voices/human/male_die.wav"; + CAN_FLINCH = 1; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "shootorcbow"; + ARROW_DAMAGE_LOW = 8; + ARROW_DAMAGE_HIGH = 12; + MOVE_RANGE = 600; + ATTACK_RANGE = 650; + ATTACK_SPEED = 700; + ATTACK_CONE_OF_FIRE = 4; + FLINCH_DELAY = 4; + FLEE_HEALTH = 10; + FLEE_CHANCE = 0.15; + CAN_FLEE = 1; + CAN_HUNT = 1; + HUNT_AGRO = 1; + } + + void OnSpawn() override + { + SetHealth(120); + SetWidth(32); + SetHeight(85); + SetRace("human"); + SetName("Human Archer"); + SetRoam(true); + SetSkillLevel(30); + SetGold(RandomInt(6, 10)); + SetHearingSensitivity(3); + SetModel("npc/archer.mdl"); + SetDamageResistance("all", ".8"); + SetModelBody(2, 2); + SetIdleAnim("idle1"); + SetMoveAnim("walk"); + SetActionAnim("shootorcbow"); + GiveItem("proj_arrow_iron", 30); + SetStat("parry", 5); + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void shoot_arrow() + { + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= 30; + SetAngles("add_view.x"); + int LCL_ATKDMG = RandomInt(ARROW_DAMAGE_LOW, ARROW_DAMAGE_HIGH); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 6), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + SetModelBody(3, 0); + EmitSound(GetOwner(), SND_BOW); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(10); + // PlayRandomSound from: SOUND_PAINYELL, SND_STRUCK2, SOUND_PAINYELL + array sounds = {SOUND_PAINYELL, SND_STRUCK2, SOUND_PAINYELL}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/mercenaries/merc1.as b/scripts/angelscript/mercenaries/merc1.as new file mode 100644 index 00000000..3dfaa42c --- /dev/null +++ b/scripts/angelscript/mercenaries/merc1.as @@ -0,0 +1,314 @@ +#pragma context server + +#include "monsters/summon/base_summon.as" +#include "help/first_hireling.as" + +namespace MS +{ + +class Merc1 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SITIDLE; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int CONVERSE_PLAYER; + int DMG_MAX; + int DMG_MIN; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int HIRE_PRICE; + int IS_HIRED; + string MASTER_NAME; + int MERC_RESTING; + int MOVE_RANGE; + float RETALIATE_CHANGETARGET_CHANCE; + int SEE_ENEMY; + int SEE_PLAYER_NOW; + string SOUND_ALERT1; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SUMMON_MASTER; + int SUMMON_VICINITY; + string SUM_REPORT_SUFFIX; + string SUM_SAY_ATTACK; + string SUM_SAY_COME; + string SUM_SAY_DEATH; + string SUM_SAY_DEFEND; + string SUM_SAY_HUNT; + int VOLUME; + + Merc1() + { + SUM_SAY_COME = "Comin' right to ya sir."; + SUM_SAY_ATTACK = "Yes sir, that thing's gonna die right quick!"; + SUM_SAY_HUNT = "Gotta be somethin to smack around here somewhere..."; + SUM_SAY_DEFEND = "Watchin' yer back, sir."; + SUM_SAY_DEATH = "Mom alway said I'd end up this way."; + SUM_REPORT_SUFFIX = ", sir."; + ANIM_SITIDLE = "sitidle"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "swordswing1_L"; + MOVE_RANGE = 64; + ATTACK_RANGE = 72; + ATTACK_HITRANGE = 120; + DMG_MIN = 5; + DMG_MAX = 12; + ATTACK_HITCHANCE = 0.8; + SOUND_ALERT1 = "npc/prepdie.wav"; + SOUND_ATTACK1 = "weapons/swingsmall.wav"; + SOUND_ATTACK2 = "weapons/swingsmall.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_PAIN2 = "player/armhit1.wav"; + VOLUME = 5; + CAN_RETALIATE = 1; + CAN_ATTACK = 0; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_FLEE = 0; + CAN_HUNT = 0; + CAN_HEAR = 1; + CAN_FLINCH = 1; + FLINCH_ANIM = "raflinch"; + FLINCH_CHANCE = 0.1; + SUMMON_VICINITY = 360; + } + + void OnRepeatTimer() + { + SetRepeatDelay(2); + if (IS_HIRED == 0) + { + } + SetRace("human"); + if ((false)) + { + } + standandtalk(); + } + + void summon_spawn() + { + SetHealth(150); + SetName("Mercenary"); + SetWidth(32); + SetHeight(64); + SetRoam(false); + SetHearingSensitivity(3); + SetSkillLevel(0); + SetRace("neutral"); + SetModel("npc/guard1.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_SITIDLE); + SetMoveAnim(ANIM_WALK); + IS_HIRED = 0; + CONVERSE_PLAYER = 0; + SEE_PLAYER_NOW = 0; + SEE_ENEMY = 0; + SetStat("parry", 10); + SetDamageResistance("all", 0.8); + HIRE_PRICE = RandomInt(30, 50); + string reg.mitem.id = "hire"; + string reg.mitem.access = "all"; + string reg.mitem.title = "Hire for "; + reg.mitem.title += HIRE_PRICE; + reg.mitem.title += " gold"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + reg.mitem.data += HIRE_PRICE; + string reg.mitem.callback = "hired_by_player"; + HealEntity(GetOwner(), -3); + basesummon_attackall(); + } + + void hired_by_player() + { + RemoveMenuItem("hire"); + IS_HIRED = 1; + ANIM_IDLE = "idle1"; + SUMMON_MASTER = param1; + MASTER_NAME = GetEntityName(SUMMON_MASTER); + CAN_HUNT = 1; + CAN_ATTACK = 1; + SetRace("human"); + SayText("Lead on , " + MASTER_NAME); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", "yes"); + } + + void npc_targetsighted() + { + if (HUNT_LASTTARGET == SUMMON_MASTER) + { + if (GetEntityDist(HUNT_LASTTARGET) < 256) + { + } + SetMoveAnim(ANIM_WALK); + } + else + { + if (GetEntityIndex(m_hLastSeen) != HUNT_LASTTARGET) + { + // PlayRandomSound from: VOLUME, SOUND_ALERT1 + array sounds = {VOLUME, SOUND_ALERT1}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + } + + void attack_1() + { + EmitSound(GetOwner(), "game.sound.weapon", SOUND_ATTACK1, VOLUME); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, Random(DMG_MIN, DMG_MAX), ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: VOLUME, SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {VOLUME, SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((IS_HIRED)) + { + rest_getup(); + } + } + + void standandtalk() + { + if (!(CONVERSE_PLAYER == 0)) return; + if (!(CanSee("ally", 90))) return; + CONVERSE_PLAYER = 1; + PlayAnim("once", "sitstand"); + SetIdleAnim("idle1"); + ScheduleDelayedEvent(5, "offer_1"); + } + + void offer_1() + { + SayText("You shouldn t be alone here."); + Say("[30] [30] [30] [30] [20] [20] [30]"); + ScheduleDelayedEvent(2, "offer_2"); + } + + void offer_2() + { + SayText(I + " ll show you around these plains, if you pay me $int(HIRE_PRICE) gold"); + Say("[30] [30] [30] [30] [30] [30] [30] [30] [30]"); + PlayAnim("once", "yes"); + ScheduleDelayedEvent(5, "sitdown"); + } + + void sitdown() + { + if (!(IS_HIRED == 0)) return; + SEE_PLAYER_NOW = 0; + sitdownlater(); + sitdownnow(); + } + + void sitdownlater() + { + SetRace("human"); + LookAt(256); + sitdownlater2(); + } + + void sitdownlater2() + { + LookAt(256); + if (!(CanSee("player", 128))) return; + SEE_PLAYER_NOW = 1; + ScheduleDelayedEvent(5, "sitdown"); + } + + void sitdownnow() + { + if (!(SEE_PLAYER_NOW == 0)) return; + CONVERSE_PLAYER = 0; + SetIdleAnim(ANIM_IDLE); + } + + void npcatk_target_lost() + { + if ((MERC_RESTING)) return; + RandomInt(2, 5)("rest_checksit"); + } + + void game_movingto_dest() + { + if (!(MERC_RESTING)) return; + rest_getup(); + } + + void rest_checksit() + { + if ((IS_HUNTING)) return; + if ((IS_ATTACKING)) return; + if ((SUMMON_RETURNING)) return; + if (!(GetMonsterHP() < GetMonsterMaxHP())) return; + MERC_RESTING = 1; + SetIdleAnim(ANIM_SITIDLE); + HealEntity(GetOwner(), 1); + ScheduleDelayedEvent(5, "rest_checksit"); + if (!(GetMonsterHP() >= GetMonsterMaxHP())) return; + ScheduleDelayedEvent(3, "rest_getup"); + } + + void rest_getup() + { + SetIdleAnim(ANIM_IDLE); + MERC_RESTING = 0; + } + + void game_recvoffer_gold() + { + if (!(CONVERSE_PLAYER == 1)) return; + if ("game.offer.gold" == HIRE_PRICE) + { + ReceiveOffer("accept"); + hired_by_player(GetEntityIndex("ent_lastgave")); + } + else + { + if ("game.offer.gold" > HIRE_PRICE) + { + ReceiveOffer("reject"); + SayText("It s okay, really. $int(HIRE_PRICE) is all I need."); + Say("[10] [10] [10] [10] [10] [10] [4]"); + PlayAnim("once", "no"); + } + else + { + if ("game.offer.gold" < HIRE_PRICE) + { + ReceiveOffer("reject"); + SayText(I + "will not be persuaded for a lower price! " + int(HIRE_PRICE) + " . Nothing more , nothing less."); + Say("[10] [10] [10] [6] [12] [4] [20] [10] [10]"); + PlayAnim("once", "no"); + } + } + } + } + +} + +} diff --git a/scripts/angelscript/mercenaries/merc2.as b/scripts/angelscript/mercenaries/merc2.as new file mode 100644 index 00000000..40d8581d --- /dev/null +++ b/scripts/angelscript/mercenaries/merc2.as @@ -0,0 +1,319 @@ +#pragma context server + +#include "monsters/summon/base_summon.as" +#include "help/first_hireling.as" + +namespace MS +{ + +class Merc2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SITIDLE; + string ANIM_WALK; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int CONVERSE_PLAYER; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int HIRE_PRICE; + int IS_HIRED; + string MASTER_NAME; + int MERC_RESTING; + int MOVE_RANGE; + float RETALIATE_CHANGETARGET_CHANCE; + int SEE_ENEMY; + int SEE_PLAYER_NOW; + string SOUND_ALERT1; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SUMMON_MASTER; + int SUMMON_VICINITY; + string SUM_REPORT_SUFFIX; + string SUM_SAY_ATTACK; + string SUM_SAY_COME; + string SUM_SAY_DEATH; + string SUM_SAY_DEFEND; + string SUM_SAY_HUNT; + int VOLUME; + + Merc2() + { + SUM_SAY_COME = "Whaddya need?"; + SUM_SAY_ATTACK = "Right! Have at it then!"; + SUM_SAY_HUNT = "Hunt... Hunt... Hunt..."; + SUM_SAY_DEFEND = "Got your back - dunno who has mine though..."; + SUM_SAY_DEATH = "Gads! I knew I shoulda been a shop keeper!"; + SUM_REPORT_SUFFIX = ", boss."; + ANIM_SITIDLE = "sitidle"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "shootorcbow"; + MOVE_RANGE = 600; + ATTACK_RANGE = 650; + ATTACK_SPEED = 1200; + ARROW_DAMAGE_LOW = 7; + ARROW_DAMAGE_HIGH = 15; + ATTACK_CONE_OF_FIRE = 2; + SOUND_ALERT1 = "npc/prepdie.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_PAIN2 = "player/armhit1.wav"; + VOLUME = 5; + CAN_RETALIATE = 1; + CAN_ATTACK = 0; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_FLEE = 0; + CAN_HUNT = 0; + CAN_HEAR = 1; + CAN_FLINCH = 1; + FLINCH_ANIM = "raflinch"; + FLINCH_CHANCE = 0.1; + SUMMON_VICINITY = 360; + } + + void OnRepeatTimer() + { + SetRepeatDelay(2); + if (IS_HIRED == 0) + { + } + SetRace("human"); + if ((false)) + { + } + standandtalk(); + } + + void summon_spawn() + { + SetHealth(150); + SetName("Mercenary"); + SetWidth(32); + SetHeight(64); + SetRoam(false); + SetHearingSensitivity(3); + SetSkillLevel(0); + SetRace("neutral"); + SetModel("npc/archer.mdl"); + SetModelBody(2, 2); + SetIdleAnim(ANIM_SITIDLE); + SetMoveAnim(ANIM_WALK); + IS_HIRED = 0; + CONVERSE_PLAYER = 0; + SEE_PLAYER_NOW = 0; + SEE_ENEMY = 0; + SetStat("parry", 10); + HIRE_PRICE = RandomInt(30, 50); + string reg.mitem.id = "hire"; + string reg.mitem.access = "all"; + string reg.mitem.title = "Hire for "; + reg.mitem.title += HIRE_PRICE; + reg.mitem.title += " gold"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "gold:"; + reg.mitem.data += HIRE_PRICE; + string reg.mitem.callback = "hired_by_player"; + HealEntity(GetOwner(), -3); + basesummon_attackall(); + } + + void hired_by_player() + { + RemoveMenuItem("hire"); + IS_HIRED = 1; + ANIM_IDLE = "idle1"; + SUMMON_MASTER = param1; + MASTER_NAME = GetEntityName(SUMMON_MASTER); + CAN_HUNT = 1; + CAN_ATTACK = 1; + SetRace("human"); + SayText("Lead on , " + MASTER_NAME); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", "yes"); + } + + void npc_targetsighted() + { + if (HUNT_LASTTARGET == SUMMON_MASTER) + { + if (GetEntityDist(HUNT_LASTTARGET) < 256) + { + } + SetMoveAnim(ANIM_WALK); + } + else + { + if (GetEntityIndex(m_hLastSeen) != HUNT_LASTTARGET) + { + // PlayRandomSound from: VOLUME, SOUND_ALERT1 + array sounds = {VOLUME, SOUND_ALERT1}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + } + + void shoot_arrow() + { + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + float LCL_ATKDMG = Random(ARROW_DAMAGE_LOW, ARROW_DAMAGE_HIGH); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 16), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + SetModelBody(3, 0); + EmitSound(GetOwner(), SND_BOW); + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: VOLUME, SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {VOLUME, SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((IS_HIRED)) + { + rest_getup(); + } + } + + void standandtalk() + { + if (!(CONVERSE_PLAYER == 0)) return; + if (!(CanSee("ally", 90))) return; + CONVERSE_PLAYER = 1; + PlayAnim("once", "sitstand"); + SetIdleAnim("idle1"); + ScheduleDelayedEvent(5, "offer_1"); + } + + void offer_1() + { + SayText("You shouldn t be alone here."); + Say("[30] [30] [30] [30] [20] [20] [30]"); + ScheduleDelayedEvent(2, "offer_2"); + } + + void offer_2() + { + SayText(I + " ll show you around these plains, if you pay me $int(HIRE_PRICE) gold"); + Say("[30] [30] [30] [30] [30] [30] [30] [30] [30]"); + PlayAnim("once", "yes"); + ScheduleDelayedEvent(5, "sitdown"); + } + + void sitdown() + { + if (!(IS_HIRED == 0)) return; + SEE_PLAYER_NOW = 0; + sitdownlater(); + sitdownnow(); + } + + void sitdownlater() + { + SetRace("human"); + LookAt(256); + sitdownlater2(); + } + + void sitdownlater2() + { + LookAt(256); + if (!(CanSee("player", 128))) return; + SEE_PLAYER_NOW = 1; + ScheduleDelayedEvent(5, "sitdown"); + } + + void sitdownnow() + { + if (!(SEE_PLAYER_NOW == 0)) return; + CONVERSE_PLAYER = 0; + SetIdleAnim(ANIM_IDLE); + } + + void npcatk_target_lost() + { + if ((MERC_RESTING)) return; + RandomInt(2, 5)("rest_checksit"); + } + + void game_movingto_dest() + { + if (!(MERC_RESTING)) return; + rest_getup(); + } + + void rest_checksit() + { + if ((IS_HUNTING)) return; + if ((IS_ATTACKING)) return; + if ((SUMMON_RETURNING)) return; + if (!(GetMonsterHP() < GetMonsterMaxHP())) return; + MERC_RESTING = 1; + SetIdleAnim(ANIM_SITIDLE); + HealEntity(GetOwner(), 1); + ScheduleDelayedEvent(5, "rest_checksit"); + if (!(GetMonsterHP() >= GetMonsterMaxHP())) return; + ScheduleDelayedEvent(3, "rest_getup"); + } + + void rest_getup() + { + SetIdleAnim(ANIM_IDLE); + MERC_RESTING = 0; + } + + void game_recvoffer_gold() + { + if (!(CONVERSE_PLAYER == 1)) return; + if ("game.offer.gold" == HIRE_PRICE) + { + ReceiveOffer("accept"); + hired_by_player(GetEntityIndex("ent_lastgave")); + } + else + { + if ("game.offer.gold" > HIRE_PRICE) + { + ReceiveOffer("reject"); + SayText("It s okay, really. $int(HIRE_PRICE) is all I need."); + Say("[10] [10] [10] [10] [10] [10] [4]"); + PlayAnim("once", "no"); + } + else + { + if ("game.offer.gold" < HIRE_PRICE) + { + ReceiveOffer("reject"); + SayText(I + "will not be persuaded for a lower price! " + int(HIRE_PRICE) + " . Nothing more , nothing less."); + Say("[10] [10] [10] [6] [12] [4] [20] [10] [10]"); + PlayAnim("once", "no"); + } + } + } + } + +} + +} diff --git a/scripts/angelscript/mines/chest_good.as b/scripts/angelscript/mines/chest_good.as new file mode 100644 index 00000000..e67d2cc7 --- /dev/null +++ b/scripts/angelscript/mines/chest_good.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ChestGood : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 15)); + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "health_apple", 1, 0); + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORENAME, "blunt_hammer1", 1, 0); + } + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "armor_leather", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/mines/chest_great.as b/scripts/angelscript/mines/chest_great.as new file mode 100644 index 00000000..c9fd1a40 --- /dev/null +++ b/scripts/angelscript/mines/chest_great.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ChestGreat : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 25)); + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "health_apple", 1, 0); + if (RandomInt(1, 6) == 1) + { + AddStoreItem(STORENAME, "blunt_hammer1", 1, 0); + } + int CHANCE = RandomInt(1, 100); + if (CHANCE < 5) + { + AddStoreItem(STORENAME, "swords_katana4", 1, 0); + } + else + { + if (CHANCE < 10) + { + AddStoreItem(STORENAME, "swords_katana3", 1, 0); + } + else + { + if (CHANCE < 25) + { + AddStoreItem(STORENAME, "swords_katana2", 1, 0); + } + else + { + if (CHANCE < 50) + { + AddStoreItem(STORENAME, "swords_katana", 1, 0); + } + } + } + } + } + +} + +} diff --git a/scripts/angelscript/mines/chestmaker.as b/scripts/angelscript/mines/chestmaker.as new file mode 100644 index 00000000..01689ce2 --- /dev/null +++ b/scripts/angelscript/mines/chestmaker.as @@ -0,0 +1,35 @@ +#pragma context server + +namespace MS +{ + +class Chestmaker : CGameScript +{ + void OnSpawn() override + { + SetName("spawner"); + SetFly(true); + SetInvincible(true); + LogDebug("chest_maker spawned"); + ScheduleDelayedEvent(0.1, "make_chest"); + } + + void make_chest() + { + int ROLL = RandomInt(1, 6); + if (ROLL == 1) + { + LogDebug("spawning chest_great"); + SpawnNPC("mines/chest_great", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); + } + if (ROLL != 1) + { + LogDebug("spawning chest_good"); + SpawnNPC("mines/chest_good", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); + } + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/mines/map_startup.as b/scripts/angelscript/mines/map_startup.as new file mode 100644 index 00000000..b838ee4f --- /dev/null +++ b/scripts/angelscript/mines/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "mines"; + MAP_WEATHER = "clear;clear;clear;clear;rain;rain"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Abandoned Mines"); + SetGlobalVar("G_MAP_DESC", "These mines were abandoned when they were infested by evil creatures"); + SetGlobalVar("G_MAP_DIFF", "Levels 10-20 / 150-300hp"); + SetGlobalVar("G_WARN_HP", 150); + } + +} + +} diff --git a/scripts/angelscript/mines/rudolf.as b/scripts/angelscript/mines/rudolf.as new file mode 100644 index 00000000..96c4be2f --- /dev/null +++ b/scripts/angelscript/mines/rudolf.as @@ -0,0 +1,240 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Rudolf : CGameScript +{ + string ANIM_DEATH; + string ANIM_WALK; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_RETALIATE; + float FLEE_CHANCE; + int FLEE_DISTANCE; + int FLEE_HEALTH; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_DELAY; + int I_GOT_MY_MACE; + int NO_JOB; + int NO_RUMOR; + string QUEST_WINNER; + int REQ_QUEST_NOTDONE; + string SOUND_DEATH; + int SPOKE; + int recievedit; + + Rudolf() + { + CAN_ATTACK = 0; + CAN_FLEE = 1; + FLEE_HEALTH = 34; + FLEE_CHANCE = 1.0; + FLEE_DISTANCE = 1000; + CAN_RETALIATE = 0; + CAN_FLINCH = 1; + FLINCH_ANIM = "llflinch"; + FLINCH_CHANCE = 0.5; + FLINCH_DELAY = 1; + ANIM_DEATH = "dieforward"; + SOUND_DEATH = "player/stomachhit1.wav"; + ANIM_WALK = "run"; + NO_RUMOR = 1; + NO_JOB = 1; + } + + void OnSpawn() override + { + REQ_QUEST_NOTDONE = 1; + SetHealth(35); + SetName("Scared Rudolf"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(true); + SetModelBody(5, 3); + SetAngles("face"); + recievedit = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_what", "hammer"); + CatchSpeech("say_where", "where"); + CatchSpeech("say_thank", "thank"); + CatchSpeech("say_reward", "gold"); + CatchSpeech("say_thing", "things"); + } + + void say_hi() + { + if ((IS_FLEEING)) return; + if ((I_GOT_MY_MACE)) return; + SayText("Please help me , " + I + " lost my very valuable mace! Please recover it!"); + ScheduleDelayedEvent(3, "say_hi2"); + SPOKE = 1; + } + + void say_hi2() + { + SayText(.....I + "was venturing in the caves...I think " + I + " remember where..."); + ScheduleDelayedEvent(4, "say_hi3"); + PlayAnim("once", "panic"); + } + + void say_hi3() + { + SayText("All of a sudden , a bunch of things attacked me! " + I + "ran out as fast as " + I + " could..."); + ScheduleDelayedEvent(4, "say_hi4"); + PlayAnim("once", "panic"); + } + + void say_hi4() + { + SayText("When " + I + "came back out , " + I + " realized my mace was gone!"); + PlayAnim("once", "beatdoor"); + ScheduleDelayedEvent(4, "say_hi5"); + } + + void say_hi5() + { + SayText("It was a family heirloom...!"); + PlayAnim("once", "crouch_idle"); + } + + void say_where() + { + SayText("Well , you enter in here , then go across the bridge , then a right..."); + ScheduleDelayedEvent(3, "say_where2"); + if ((recievedit)) return; + SayText("There'll will be those things... I hope you're strong enough... here, take these."); + // TODO: offer ent_lastspoke health_mpotion + // TODO: offer ent_lastspoke item_torch + recievedit = 1; + } + + void say_thank() + { + SayText("Good luck!"); + } + + void say_what() + { + SayText("Yes , " + I + "lost my mace , please help me find it. " + I + "think " + I + " remember where.."); + ScheduleDelayedEvent(3, "say_what2"); + PlayAnim("once", "eye_wipe"); + } + + void say_what2() + { + SayText("I'll be happy to reward you!"); + PlayAnim("once", "idle2"); + } + + void say_reward() + { + SayText("I'll give you gold! Please, no more talking, find my mace!"); + PlayAnim("once", "llflinch"); + } + + void say_thing() + { + SayText("There were about 4 things that attacked me!"); + PlayAnim("once", "fear"); + ScheduleDelayedEvent(2, "say_thing2"); + } + + void say_thing2() + { + SayText("You'll probably have to kill them all to find my mace"); + PlayAnim("once", "fear"); + } + + void give_mace() + { + ReceiveOffer("accept"); + PlayAnim("once", "eye_wipe"); + SayText(THANK + YOU!!!); + QUEST_WINNER = param1; + ScheduleDelayedEvent(2, "recvmace_2"); + } + + void recvmace_2() + { + I_GOT_MY_MACE = 1; + SayText("As " + I + " promised you..."); + // TODO: offer QUEST_WINNER bows_crossbow_light + ScheduleDelayedEvent(3, "recvmace_3"); + if (!(ItemExists(QUEST_WINNER, "item_ring"))) return; + string RQUEST_STAGE = GetPlayerQuestData(QUEST_WINNER, "r"); + if (!(RQUEST_STAGE == 4)) return; + ScheduleDelayedEvent(0.1, "ring_comment"); + } + + void ring_comment() + { + SayText("Nice ring by the way! You know, I think Vadrel used to have one just like it!"); + SayText("If memory serves me right, he was stationed at some old outpost."); + SetPlayerQuestData(QUEST_WINNER, "r"); + REQ_QUEST_NOTDONE = 0; + } + + void recvmace_3() + { + SayText("Goodbye now! " + I + " must hurry!"); + SetMoveDest(Vector3(-3101, 351, 64)); + ScheduleDelayedEvent(5, "rudolfdelete"); + } + + void rudolfdelete() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void game_menu_getoptions() + { + if (SAY_SPOKE == 1) + { + string reg.mitem.title = "Mace?"; + string reg.mitem.type = "say"; + string reg.mitem.data = "Mace?"; + string reg.mitem.title = "Where?"; + string reg.mitem.type = "say"; + string reg.mitem.data = "Where?"; + string reg.mitem.title = "Say thanks"; + string reg.mitem.type = "say"; + string reg.mitem.data = "Thank you!"; + string reg.mitem.title = "Reward?"; + string reg.mitem.type = "say"; + string reg.mitem.data = "What do I get out of it?"; + string reg.mitem.title = "Things?"; + string reg.mitem.type = "say"; + string reg.mitem.data = "What about those things?"; + } + if ((ItemExists(param1, "blunt_rudolfsmace"))) + { + string reg.mitem.title = "Return mace"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "blunt_rudolfsmace"; + string reg.mitem.callback = "give_mace"; + } + if ((ItemExists(param1, "item_ring"))) + { + string RQUEST_STAGE = GetPlayerQuestData(param1, "r"); + if (RQUEST_STAGE == 5) + { + string reg.mitem.title = "Ask about the ring"; + string reg.mitem.type = "callback"; + string reg.mitem.data = RQUEST_STAGE; + string reg.mitem.callback = "ring_comment"; + } + } + } + +} + +} diff --git a/scripts/angelscript/mines/rudolfschest.as b/scripts/angelscript/mines/rudolfschest.as new file mode 100644 index 00000000..4ce21aba --- /dev/null +++ b/scripts/angelscript/mines/rudolfschest.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Rudolfschest : CGameScript +{ + void chest_additems() + { + AddStoreItem(STORENAME, "blunt_rudolfsmace", 1, 0); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_gholy", 15, 0, 0, 15); + } + AddStoreItem(STORENAME, "proj_bolt_wooden", 50, 0, 0, 25); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "proj_bolt_iron", 25, 0, 0, 25); + } + } + +} + +} diff --git a/scripts/angelscript/minibosses/bloodreaver.as b/scripts/angelscript/minibosses/bloodreaver.as new file mode 100644 index 00000000..7e2648ce --- /dev/null +++ b/scripts/angelscript/minibosses/bloodreaver.as @@ -0,0 +1,135 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Bloodreaver : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int HUNT_AGRO; + int I_AM_TURNABLE; + int MOVE_RANGE; + string MY_ENEMY; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_SPAWN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Bloodreaver() + { + ANIM_RUN = "walk"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + CAN_HUNT = 1; + HUNT_AGRO = 0; + ANIM_ATTACK = "attack1"; + MOVE_RANGE = 40; + ATTACK_DAMAGE = 30; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 200; + ATTACK_HITCHANCE = 0.85; + SOUND_STRUCK1 = "garg/gar_pain1.wav"; + SOUND_STRUCK2 = "garg/gar_pain2.wav"; + SOUND_STRUCK3 = "garg/gar_pain3.wav"; + SOUND_PAIN = "garg/gar_pain3.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_IDLE1 = "controller/con_attack3.wav"; + SOUND_SPAWN = "monsters/skeleton/calrian2.wav"; + MY_ENEMY = "enemy"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + DROP_GOLD = 1; + DROP_GOLD_MIN = 100; + DROP_GOLD_MAX = 240; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + SetName("Blood Reaver"); + SetRoam(false); + SetHearingSensitivity(8); + NPC_GIVE_EXP = 200; + SetRace("undead"); + SetModel("monsters/skeleton3.mdl"); + SetModelBody(1, 0); + SetHealth(2000); + SetWidth(64); + SetHeight(128); + SetDamageResistance("all", 0.65); + SetDamageResistance("holy", 2.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("blunt", 0.5); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + PlayAnim("once", ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + SetRoam(false); + SetVolume(10); + EmitSound(GetOwner(), SOUND_SPAWN); + GiveItem(GetOwner(), "scroll2_summon_undead"); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(GetRelationship(GetOwner()) == "enemy")) return; + SetRoam(true); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + if (RandomInt(0, 1) == 0) + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetRoam(true); + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), SOUND_DEATH); + EmitSound(GetOwner(), SND_DEATH2); + UseTrigger("bloodreaver_die"); + SetSayTextRange(1024); + SayText("After all this time , alas... " + I + " can rest."); + } + +} + +} diff --git a/scripts/angelscript/minibosses/bloodreaverminion.as b/scripts/angelscript/minibosses/bloodreaverminion.as new file mode 100644 index 00000000..2a68e0e0 --- /dev/null +++ b/scripts/angelscript/minibosses/bloodreaverminion.as @@ -0,0 +1,135 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Bloodreaverminion : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int I_AM_TURNABLE; + string MY_ENEMY; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SET_GREEK; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Bloodreaverminion() + { + ANIM_DEATH = "diesimple"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + CAN_HUNT = 1; + ANIM_ATTACK = "attack1"; + ATTACK_DAMAGE = 30; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 200; + ATTACK_HITCHANCE = 0.85; + SOUND_STRUCK1 = "controller/con_pain3.wav"; + SOUND_STRUCK2 = "controller/con_pain3.wav"; + SOUND_STRUCK3 = "zombie/zo_pain2.wav"; + SOUND_PAIN = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_DEATH = "controller/con_die2.wav"; + SOUND_IDLE1 = "controller/con_attack3.wav"; + MY_ENEMY = "enemy"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + DROP_GOLD = 1; + DROP_GOLD_MIN = 15; + DROP_GOLD_MAX = 240; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + SetHealth(400); + SetWidth(32); + SetHeight(80); + SetName("A minion of Bloodreaver"); + SetRoam(true); + SetHearingSensitivity(8); + NPC_GIVE_EXP = 100; + SetRace("undead"); + SetModel("monsters/skeleton_enraged.mdl"); + SetModelBody(0, 3); + SetModelBody(1, 6); + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + SetDamageResistance("all", 0.65); + SetDamageResistance("holy", 2.0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + } + + void attack_1() + { + npcatk_dodamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE); + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/dot_fire", 5, GetOwner(), 12); + if (RandomInt(0, 1) == 0) + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int TAUNT_COMMENT = RandomInt(1, 3); + if (TAUNT_COMMENT == 1) + { + SayText("Rejoice not! My master awaits..."); + } + if (TAUNT_COMMENT == 2) + { + SayText(I + " die easily , but my master , not so much so."); + } + if (TAUNT_COMMENT == 3) + { + SayText("Dead " + I + " maybe , but my master will have you join me soon."); + } + } + +} + +} diff --git a/scripts/angelscript/minibosses/flesheater.as b/scripts/angelscript/minibosses/flesheater.as new file mode 100644 index 00000000..721fc64b --- /dev/null +++ b/scripts/angelscript/minibosses/flesheater.as @@ -0,0 +1,351 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Flesheater : CGameScript +{ + string ANIM_ATTACK; + string ANIM_CLOUDCAST; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RESPAWN_DEADIDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_HEAR; + int CLOUD_DAMAGE; + int CLOUD_DELAY; + int CLOUD_DURATION; + int DIED_ONCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string GONE_ROAM; + int I_AM_TURNABLE; + string MONSTER_MODEL; + int MOVE_RANGE; + string MY_LIGHT_SCRIPT; + string MY_SCRIPT_ID; + int NPC_GIVE_EXP; + int PLAYING_DEAD; + int POISON_CLAW_DMG; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_SPAWN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Flesheater() + { + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_ATTACK = "attack1"; + ANIM_CLOUDCAST = "attack2"; + ATTACK_DAMAGE = RandomInt(15, 25); + ATTACK_RANGE = 120; + MOVE_RANGE = 80; + ATTACK_HITRANGE = 200; + ATTACK_HITCHANCE = 0.85; + SOUND_STRUCK1 = "controller/con_pain3.wav"; + SOUND_STRUCK2 = "controller/con_pain3.wav"; + SOUND_STRUCK3 = "controller/con_pain2.wav"; + SOUND_PAIN = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_DEATH1 = "zombie/zo_pain1.wav"; + SOUND_DEATH2 = "monsters/troll/trolldeath.wav"; + SOUND_IDLE = "controller/con_attack3.wav"; + SOUND_SPAWN = "monsters/skeleton/calrian2.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 100; + DROP_GOLD_MAX = 150; + SKEL_RESPAWN_CHANCE = 1.0; + SKEL_HP = 3000; + POISON_CLAW_DMG = RandomInt(13, 20); + CLOUD_DURATION = 10; + CLOUD_DAMAGE = 20; + Precache("poison_cloud.spr"); + MONSTER_MODEL = "monsters/flesheater.mdl"; + Precache(MONSTER_MODEL); + Precache("ambience/steamburst1.wav"); + Precache(SOUND_DEATH); + ANIM_RESPAWN_DEADIDLE = "dead_on_stomach"; + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + MY_SCRIPT_ID = "unset"; + SetHealth(3000); + int ON_UNREST = 0; + string MAP_NAME = GetMapName(); + if (MAP_NAME == "unrest2") + { + int ON_UNREST = 1; + } + if (MAP_NAME == "unrest2_beta1") + { + int ON_UNREST = 2; + } + if (!(ON_UNREST)) + { + SetWidth(50); + SetHeight(100); + } + if ((ON_UNREST)) + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetWidth(20); + SetHeight(72); + } + SetName("Flesh Eater"); + SetRoam(false); + SetHearingSensitivity(8); + NPC_GIVE_EXP = 250; + SetRace("undead"); + Precache(MONSTER_MODEL); + SetModel(MONSTER_MODEL); + SetModelBody(1, 0); + SetDamageResistance("all", 0.65); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 2.0); + } + + void game_postspawn() + { + } + + void attack_1() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", 5, GetOwner(), POISON_CLAW_DMG); + if (RandomInt(0, 1) == 0) + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + } + + void attack_2() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", 5, GetOwner(), POISON_CLAW_DMG); + if (RandomInt(0, 1) == 0) + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(GONE_ROAM)) + { + SetRoam(true); + GONE_ROAM = 1; + } + string MY_HP = GetEntityHealth(GetOwner()); + if (MY_HP <= 500) + { + if (MY_HP > 1) + { + } + if (!(DIED_ONCE)) + { + } + npcatk_clear_targets(); + fake_death(); + } + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void fake_death() + { + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_DEATH); + PLAYING_DEAD = 1; + EmitSound(GetOwner(), 0, SOUND_DEATH1, 10); + int L_DEATHANIM = RandomInt(0, 1); + ANIM_DEATH = "diesimple"; + if (LCL_DEATHANIM == 1) + { + ANIM_DEATH = "dieforward"; + } + DIED_ONCE = 1; + PLAYING_DEAD = 1; + CAN_HEAR = 0; + SetAlive(1); + SetMoveDest("none"); + SetIdleAnim(ANIM_RESPAWN_DEADIDLE); + SetInvincible(true); + SetRoam(false); + ScheduleDelayedEvent(8.0, "skel_respawn"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + UseTrigger("bloodreaver_died"); + string MAP_NAME = StringToLower(GetMapName()); + if (MAP_NAME != "bloodrose") + { + SayText(I + " shall return one day! ...and then your flesh shall adorn my bones!"); + } + if (MAP_NAME == "bloodrose") + { + string L_SPAWN = FindEntityByName("slithar_caves1"); + if (((L_SPAWN !is null))) + { + DeleteEntity(L_SPAWN); + } + string L_SPAWN = FindEntityByName("slithar_caves1_tele"); + if (((L_SPAWN !is null))) + { + DeleteEntity(L_SPAWN); + } + string L_SPAWN = FindEntityByName("slithar_caves2"); + if (((L_SPAWN !is null))) + { + DeleteEntity(L_SPAWN); + } + string L_SPAWN = FindEntityByName("slithar_caves2_tele"); + if (((L_SPAWN !is null))) + { + DeleteEntity(L_SPAWN); + } + string L_SPAWN = FindEntityByName("slithar_caves3"); + if (((L_SPAWN !is null))) + { + DeleteEntity(L_SPAWN); + } + string L_SPAWN = FindEntityByName("slithar_caves3_tele"); + if (((L_SPAWN !is null))) + { + DeleteEntity(L_SPAWN); + } + string L_SPAWN = FindEntityByName("slithar_caves4"); + if (((L_SPAWN !is null))) + { + DeleteEntity(L_SPAWN); + } + string L_MASTER_ID = FindEntityByName("snake_lord"); + if ((IsEntityAlive(L_MASTER_ID))) + { + SayText("Slithar, I have failed! Finish them!"); + CallExternal(L_MASTER_ID, "slithar_resume"); + } + else + { + SayText("For now, you have won, but you have not seen the last of me nor my master!"); + } + } + } + + void skel_respawn() + { + SetIdleAnim(ANIM_IDLE); + PlayAnim("critical", "getup"); + SetHealth(3000); + SetSayTextRange(1024); + SayText("No! I shall not be defeated so easily!"); + ScheduleDelayedEvent(2.5, "skel_respawn_revived"); + } + + void skel_respawn_revived() + { + PLAYING_DEAD = 0; + SetMoveDest(HUNT_LASTTARGET); + npcatk_resume_ai(); + CAN_HEAR = 1; + SetRoam(true); + SetInvincible(false); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((PLAYING_DEAD)) return; + if ((CLOUD_DELAY)) return; + if ((false)) + { + string L_ORIG = GetEntityOrigin(m_hAttackTarget); + } + else + { + string L_ORIG = GetEntityOrigin(GetOwner()); + } + SpawnNPC("monsters/summon/npc_poison_cloud2", L_ORIG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), CLOUD_DAMAGE, CLOUD_DURATION, 1 + PlayAnim("once", ANIM_CLOUDCAST); + CLOUD_DELAY = 1; + ScheduleDelayedEvent(10.0, "reset_cloud_delay"); + if ((GONE_ROAM)) return; + GONE_ROAM = 1; + SetRoam(true); + EmitSound(GetOwner(), 2, SOUND_SPAWN, 10); + if ((true)) + { + light_loop(); + } + } + + void reset_cloud_delay() + { + CLOUD_DELAY = 0; + } + + void light_loop() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(10.0, "light_loop"); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(0, 255, 0), 256, 10.0); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(IsEntityAlive(GetOwner()))) return; + if ((PLAYING_DEAD)) return; + if (!(GetEntityHealth(GetOwner()) > 500)) return; + string HP_TO_GIVE = param2; + HP_TO_GIVE *= 0.25; + string MAX_CHECK = GetMonsterHP(); + MAX_CHECK += HP_TO_GIVE; + if (!(MAX_CHECK < GetMonsterMaxHP())) return; + HealEntity(GetOwner(), HP_TO_GIVE); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 80, 0.25, 0.25); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + } + + void my_target_died() + { + Effect("glow", GetOwner(), Vector3(0, 255, 0), 255, 1.0, 1.0); + ScheduleDelayedEvent(0.4, "skele_laugh"); + EmitSound(GetOwner(), 0, "ambience/particle_suck1.wav", 10); + SetHealth(GetMonsterMaxHP()); + } + + void skele_laugh() + { + EmitSound(GetOwner(), 0, "x/x_laugh1.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/minibosses/flesheaterminion.as b/scripts/angelscript/minibosses/flesheaterminion.as new file mode 100644 index 00000000..42a2b2f3 --- /dev/null +++ b/scripts/angelscript/minibosses/flesheaterminion.as @@ -0,0 +1,141 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Flesheaterminion : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int HUNT_AGRO; + int I_AM_TURNABLE; + int MOVE_RANGE; + string MY_ENEMY; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SET_GREEK; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Flesheaterminion() + { + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_ATTACK = 1; + ANIM_ATTACK = "attack3"; + ATTACK_DAMAGE = 10; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 200; + MOVE_RANGE = 90; + ATTACK_HITCHANCE = 0.85; + SOUND_STRUCK1 = "controller/con_pain3.wav"; + SOUND_STRUCK2 = "controller/con_pain3.wav"; + SOUND_STRUCK3 = "none"; + SOUND_PAIN = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_DEATH = "controller/con_die2.wav"; + SOUND_IDLE1 = "controller/con_attack3.wav"; + MY_ENEMY = "enemy"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + DROP_GOLD = 1; + DROP_GOLD_MIN = 15; + DROP_GOLD_MAX = 240; + Precache(SOUND_DEATH); + Precache("monsters/skeleton_enraged.mdl"); + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + SetHealth(400); + SetWidth(32); + SetHeight(80); + SetName("A minion of Flesheater"); + SetRoam(true); + SetHearingSensitivity(8); + NPC_GIVE_EXP = 80; + SetRace("undead"); + SetModel("monsters/skeleton_enraged.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 7); + SetDamageResistance("all", 0.65); + SetDamageResistance("holy", 3.0); + SetDamageResistance("poison", 0.0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + ScheduleDelayedEvent(2, "game_wander"); + } + + void attack_3() + { + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", 5, GetOwner(), RandomInt(8, 12)); + if (RandomInt(0, 1) == 0) + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ANIM_DEATH = "dieheadshot"; + if (RandomInt(0, 1) == 0) + { + SayText("My master shall have your flesh!"); + } + } + + void go_greek() + { + SetModelBody(0, 10); + SET_GREEK = 1; + } + +} + +} diff --git a/scripts/angelscript/minibosses/phlame.as b/scripts/angelscript/minibosses/phlame.as new file mode 100644 index 00000000..51d2ec32 --- /dev/null +++ b/scripts/angelscript/minibosses/phlame.as @@ -0,0 +1,269 @@ +#pragma context server + +#include "monsters/base_npc_new.as" + +namespace MS +{ + +class Phlame : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BEAM; + string ANIM_BOULDERS; + string ANIM_DODGE; + string ANIM_FIRE_BREATH; + string ANIM_GUIDED_BURST; + string ANIM_IDLE; + string ANIM_IDLE_DEF; + string ANIM_LOOK; + string ANIM_METEOR; + string ANIM_REPULSE; + string ANIM_RUN; + string ANIM_RUN_DEF; + string ANIM_SUMMON; + string ANIM_WALK; + string ANIM_WALK_DEF; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float FREQ_GLOAT; + float FREQ_PAIN; + int IS_UNHOLY; + string IS_WEAK; + string NEXT_GLOBAL_GLOAT; + string NEXT_LEAP_AWAY; + string NEXT_PAIN; + int NO_STUCK_CHECKS; + float NPC_BOSS_REGEN_RATE; + int NPC_GIVE_EXP; + int NPC_IS_BOSS; + string SOUND_DEATH; + string SOUND_GLOAT1; + string SOUND_GLOAT2; + string SOUND_GLOAT3; + string SOUND_GLOAT4; + string SOUND_PAIN1; + string SOUND_PAIN_HEALTHY; + string SOUND_PAIN_WEAK; + string SOUND_STRONG_SWING1; + string SOUND_STRONG_SWING2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SUMMON; + string SOUND_SWING1; + string SOUND_SWING2; + string STAFF_STRIKE; + + Phlame() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk2handed"; + ANIM_RUN = "run2"; + ANIM_ATTACK = "staff_strike"; + ANIM_RUN_DEF = "run2"; + ANIM_WALK_DEF = "walk2handed"; + ANIM_IDLE_DEF = "idle"; + ANIM_LOOK = "idle_look"; + ANIM_SUMMON = "summon"; + ANIM_METEOR = "cieling_strike"; + ANIM_BOULDERS = "cieling_strike"; + ANIM_REPULSE = "fdeploy_strike"; + ANIM_DODGE = "staff_aim"; + ANIM_BEAM = "staff_aim"; + ANIM_FIRE_BREATH = "aim_1"; + ANIM_GUIDED_BURST = "shoot_1"; + NPC_IS_BOSS = 1; + NPC_BOSS_REGEN_RATE = 0.05; + NPC_GIVE_EXP = 15000; + ATTACK_MOVERANGE = 768; + ATTACK_RANGE = 200; + ATTACK_HITRANGE = 250; + FREQ_GLOAT = Random(30.0, 60.0); + FREQ_PAIN = Random(30.0, 40.0); + SOUND_GLOAT1 = "voices/phlame/vs_nx0headm_haha.wav"; + SOUND_GLOAT2 = "voices/phlame/vs_nx0headm_attk.wav"; + SOUND_GLOAT3 = "voices/phlame/vs_nx0headm_bat1.wav"; + SOUND_GLOAT4 = "voices/phlame/vs_nx0headm_bat3.wav"; + SOUND_SUMMON = "voices/phlame/vs_nx0headm_bat2.wav"; + SOUND_PAIN1 = "voices/phlame/vs_nx0headm_atk1.wav"; + SOUND_PAIN_HEALTHY = "voices/phlame/vs_nx0headm_yes.wav"; + SOUND_PAIN_WEAK = "voices/phlame/vs_nx0headm_no.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_SWING1 = "zombie/claw_miss1.wav"; + SOUND_SWING2 = "zombie/claw_miss2.wav"; + SOUND_STRONG_SWING1 = "zombie/claw_strike1.wav"; + SOUND_STRONG_SWING2 = "zombie/claw_strike2.wav"; + SOUND_DEATH = "none"; + } + + void game_precache() + { + Precache("c-tele1.spr"); + } + + void OnSpawn() override + { + SetName("Phlame the Ever Burning"); + SetRace("demon"); + SetHealth(15000); + SetName("phlame_wiz"); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("poison", 0.25); + SetDamageResistance("acid", 0.5); + SetDamageResistance("holy", 1.25); + IS_UNHOLY = 1; + SetMoveAnim(ANIM_LOOK); + SetIdleAnim(ANIM_LOOK); + SetInvincible(true); + SetSayTextRange(1024); + npcatk_suspend_ai(); + NO_STUCK_CHECKS = 1; + ScheduleDelayedEvent(2.0, "speak_begin"); + ScheduleDelayedEvent(5.0, "let_us_begin"); + } + + void speak_begin() + { + SayText("Then... Let us... Begin..."); + } + + void let_us_begin() + { + SetInvincible(false); + ANIM_RUN = ANIM_WALK_DEF; + ANIM_IDLE = ANIM_IDLE_DEF; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + npcatk_resume_ai(); + NO_STUCK_CHECKS = 0; + start_cycles(); + } + + void bs_global_command() + { + if (!(param3 == "death")) return; + if (!(IsEntityAlive(GetOwner()))) return; + if (!(GetGameTime() > NEXT_GLOBAL_GLOAT)) return; + NEXT_GLOBAL_GLOAT = GetGameTime(); + NEXT_GLOBAL_GLOAT += 15.0; + int RND_GLOAT = RandomInt(1, 4); + if (RND_GLOAT == 1) + { + UseTrigger("snd_gloat1"); + } + if (RND_GLOAT == 2) + { + UseTrigger("snd_gloat2"); + } + if (RND_GLOAT == 3) + { + UseTrigger("snd_gloat3"); + } + if (RND_GLOAT == 4) + { + UseTrigger("snd_gloat4"); + } + } + + void do_gloat() + { + // PlayRandomSound from: SOUND_GLOAT1, SOUND_GLOAT2, SOUND_GLOAT3, SOUND_GLOAT4 + array sounds = {SOUND_GLOAT1, SOUND_GLOAT2, SOUND_GLOAT3, SOUND_GLOAT4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetEntityHealth(GetOwner()) < HALF_HEALTH) + { + IS_WEAK = 1; + } + else + { + IS_WEAK = 0; + } + if (GetGameTime() > NEXT_PAIN) + { + NEXT_PAIN = GetGameTime(); + if (!(IS_WEAK)) + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN_HEALTHY + array sounds = {SOUND_PAIN1, SOUND_PAIN_HEALTHY}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN_WEAK + array sounds = {SOUND_PAIN1, SOUND_PAIN_WEAK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + if ((IS_WEAK)) + { + ANIM_RUN = ANIM_RUN_DEF; + SetMoveAnim(ANIM_RUN); + } + else + { + ANIM_RUN = ANIM_WALK_DEF; + SetMoveAnim(ANIM_RUN); + } + if (!(IS_WEAK)) return; + if ((BUSY_CASTING)) return; + if (GetEntityRange(m_hLastStruck) < 200) + { + if (GetGameTime() > NEXT_LEAP_AWAY) + { + } + NEXT_LEAP_AWAY = GetGameTime(); + NEXT_LEAP_AWAY += FREQ_LEAP_AWAY; + do_leap_away(); + } + } + + void game_dodamage() + { + if ((STAFF_STRIKE)) + { + ApplyEffect(m_hAttackTarget, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + STAFF_STRIKE = 0; + } + } + + void frame_staff_strike() + { + int RND_STRENGTH = RandomInt(1, 2); + if (RND_STRENGTH == 1) + { + // PlayRandomSound from: SOUND_SWING1, SOUND_SWING2 + array sounds = {SOUND_SWING1, SOUND_SWING2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_STRONG_SWING1, SOUND_STRONG_SWING2 + array sounds = {SOUND_STRONG_SWING1, SOUND_STRONG_SWING2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + string L_DMG = DMG_STAFF; + if (RND_STRENGTH == 2) + { + L_DMG *= 4; + } + STAFF_STRIKE = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, L_DMG, 0.9, "blunt"); + } + +} + +} diff --git a/scripts/angelscript/minibosses/titan.as b/scripts/angelscript/minibosses/titan.as new file mode 100644 index 00000000..ca89e54a --- /dev/null +++ b/scripts/angelscript/minibosses/titan.as @@ -0,0 +1,837 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Titan : CGameScript +{ + string ANIM_ATTACK; + string ANIM_CAST; + string ANIM_DEATH; + string ANIM_GRAB; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_METEOR; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SNAP; + string ANIM_SQUEEZE; + string ANIM_STOMP; + string ANIM_SWIPE; + string ANIM_THROW; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BALL_TARGETS; + int BIRD_COOLDOWN; + string BIRD_SCRIPT; + int CANT_FLEE; + int CAN_RETALIATE; + int CHANCE_KICK; + int CHANCE_STOMP; + string CL_GLOW_SPR; + string CL_IDX; + string CL_TELE_SPR; + int DMG_BALL; + int DMG_KICK; + int DMG_METEOR; + int DMG_SQUEEZE; + int DMG_STOMP; + int DMG_SWIPE; + int DMG_THROW; + int DO_GRAB; + string END_SQEEEZE_DMG_LOOP; + string FLINCH_ANIM; + int FLINCH_DAMAGE_THRESHOLD; + float FLINCH_DELAY; + int FLINCH_HEALTH; + float FREQ_GRAB; + float FREQ_KICK; + float FREQ_SMASH; + float FREQ_STOMP; + string GRAB_MODE; + int GRAB_TARG; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int LAST_BIRD; + int L_ARM_ATT_IDX; + int METEOR_COUNT; + string MONSTER_MODEL; + int MOVE_RANGE; + int M_BIRD_ROT; + int M_SUMMON_BIRDS; + int M_SUMMON_COUNT; + string M_SUMMON_POINT1; + string M_SUMMON_POINT2; + string M_SUMMON_POINT3; + string M_SUMMON_POINT4; + int M_SUMMON_POINTS; + string NEXT_GRAB; + string NEXT_KICK; + string NEXT_SMASH; + string NEXT_STOMP; + int NO_STEP_ADJ; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int NPC_MUST_SEE_TARGET; + int N_BIRDS; + int N_SCORPS; + string ROT_ANG; + int R_ARM_ATT_IDX; + int SCORP_RAD; + string SCORP_SCRIPT; + string SCORP_SCRIPT1; + string SCORP_SCRIPT2; + int SCORP_SPAWN_VADJ; + string SMASH_OFS; + int SMASH_RANGE; + string SMASH_SCAN_POINT; + string SMASH_TARGET; + string SOUND_DEATH; + string SOUND_GRAB; + string SOUND_KICK; + string SOUND_RAWR; + string SOUND_SQUEEZE; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_SUMMON; + string SOUND_SWIPE; + string SOUND_THROW; + string SOUND_YAWN1; + string SOUND_YAWN2; + string SOUND_YAWN3; + string STUN_BURST_DMG; + string STUN_BURST_POS; + string STUN_BURST_RAD; + string STUN_BURST_REPEL; + string STUN_LIST; + string SUM_POINT; + int SUM_RAD; + int SUM_VADJ; + string SWIPE_OFS; + int SWIPE_RAD; + int TITAN_RNDAMT; + int T_SUM_ANG; + int WALK_COUNT; + + Titan() + { + CANT_FLEE = 1; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle"; + ANIM_RUN = "walk"; + ANIM_ATTACK = "swipe2"; + ANIM_DEATH = "death"; + FLINCH_ANIM = "flinchheavy"; + FLINCH_HEALTH = 2000; + FLINCH_DAMAGE_THRESHOLD = 50; + FLINCH_DELAY = 20.0; + NPC_MUST_SEE_TARGET = 0; + ANIM_SWIPE = "swipe2"; + ANIM_METEOR = "roar2"; + ANIM_STOMP = "stomp"; + ANIM_SNAP = "bitehead"; + ANIM_GRAB = "throw1"; + ANIM_SQUEEZE = "throw2"; + ANIM_THROW = "throw3"; + ANIM_SMASH = "punch"; + ANIM_KICK = "kick"; + ANIM_CAST = "summon"; + IS_UNHOLY = 1; + NO_STEP_ADJ = 1; + ATTACK_RANGE = 300; + ATTACK_HITRANGE = 350; + ATTACK_MOVERANGE = 250; + MOVE_RANGE = 250; + CAN_RETALIATE = 0; + IMMUNE_VAMPIRE = 1; + MONSTER_MODEL = "monsters/titan.mdl"; + SCORP_SPAWN_VADJ = 650; + SCORP_RAD = 300; + SCORP_SCRIPT1 = "monsters/scorpion5_stone"; + SCORP_SCRIPT2 = "monsters/scorpion6_stone"; + CHANCE_KICK = 25; + FREQ_GRAB = 60.0; + DMG_THROW = 800; + SUM_RAD = 300; + SUM_VADJ = 650; + DMG_SWIPE = 150; + DMG_METEOR = 300; + DMG_KICK = 250; + DMG_STOMP = 100; + DMG_BALL = 200; + DMG_SQUEEZE = 30; + BIRD_SCRIPT = "monsters/eagle_stone"; + BIRD_COOLDOWN = 55; + LAST_BIRD = 0; + SMASH_OFS = /* TODO: $relpos */ $relpos(0, 230, -300); + SMASH_RANGE = 128; + SWIPE_OFS = /* TODO: $relpos */ $relpos(0, 230, -280); + SWIPE_RAD = 200; + R_ARM_ATT_IDX = 2; + L_ARM_ATT_IDX = 3; + FREQ_KICK = 10.0; + FREQ_STOMP = 10.0; + FREQ_SMASH = 5.0; + SOUND_SUMMON = "debris/beamstart1.wav"; + SOUND_YAWN1 = "garg/gar_breathe1.wav"; + SOUND_YAWN2 = "garg/gar_breathe2.wav"; + SOUND_YAWN3 = "garg/gar_breathe3.wav"; + SOUND_RAWR = "garg/gar_alert2.wav"; + SOUND_STEP1 = "garg/gar_step1.wav"; + SOUND_STEP2 = "garg/gar_step2.wav"; + SOUND_SWIPE = "weapons/swinghuge.wav"; + SOUND_KICK = "weapons/swinghuge.wav"; + SOUND_THROW = "weapons/swinghuge.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_GRAB = "garg/gar_attack2.wav"; + SOUND_SQUEEZE = "garg/gar_alert1.wav"; + Precache(SOUND_DEATH); + CL_GLOW_SPR = "3dmflaora.spr"; + CL_TELE_SPR = "c-tele1.spr"; + Precache(CL_GLOW_SPR); + Precache(CL_TELE_SPR); + if ((true)) + { + } + if ((StringToLower(GetMapName())).findFirst("thanatos") >= 0) + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 16000; + } + else + { + NPC_GIVE_EXP = 1000; + } + } + + void game_precache() + { + Precache(SCORP_SCRIPT1); + Precache(SCORP_SCRIPT2); + Precache("monsters/summon/lightning_ball_guided"); + Precache(BIRD_SCRIPT); + Precache("chests/olympus"); + } + + void OnSpawn() override + { + if (StringToLower(GetMapName()) == "thanatos") + { + SetName("Titan"); + } + else + { + SetName("Elder Earth Elemental"); + } + SetModel(MONSTER_MODEL); + SetHealth(18000); + SetWidth(200); + SetHeight(600); + SetRace("demon"); + SetRoam(false); + SetHearingSensitivity(11); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 0.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("stun", 0); + SetBloodType("none"); + SetStepSize(32); + SetIdleAnim("bust"); + SetMoveAnim("bust"); + PlayAnim("critical", "bust"); + if (!(true)) return; + TITAN_RNDAMT = 0; + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", 0); + titan_fade_in(); + npcatk_suspend_ai(); + ScheduleDelayedEvent(5.0, "do_special"); + ScheduleDelayedEvent(0.1, "smash_scanner"); + N_SCORPS = 0; + T_SUM_ANG = 0; + WALK_COUNT = 0; + DO_GRAB = 0; + CL_IDX = "const.localplayer.scriptID"; + ClientEvent("update", "all", CL_IDX, "titan_setup", GetEntityIndex(GetOwner()), CL_TELE_SPR, CL_GLOW_SPR); + ScheduleDelayedEvent(0.5, "get_map_summon_points"); + } + + void get_map_summon_points() + { + M_SUMMON_POINT1 = FindEntityByName("titan_summon_point1"); + M_SUMMON_POINT2 = FindEntityByName("titan_summon_point2"); + M_SUMMON_POINT3 = FindEntityByName("titan_summon_point3"); + M_SUMMON_POINT4 = FindEntityByName("titan_summon_point4"); + M_SUMMON_POINT1 = GetEntityOrigin(M_SUMMON_POINT1); + M_SUMMON_POINT2 = GetEntityOrigin(M_SUMMON_POINT2); + M_SUMMON_POINT3 = GetEntityOrigin(M_SUMMON_POINT3); + M_SUMMON_POINT4 = GetEntityOrigin(M_SUMMON_POINT4); + M_BIRD_ROT = 0; + M_SUMMON_COUNT = 0; + M_SUMMON_POINTS = 1; + if (!((M_SUMMON_POINT1).x == 0)) return; + if (!((M_SUMMON_POINT2).y == 0)) return; + if (!((M_SUMMON_POINT3).z == 0)) return; + M_SUMMON_POINTS = 0; + } + + void frame_spawn_done() + { + npcatk_resume_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void do_special() + { + if (!(IsEntityAlive(GetOwner()))) return; + if ((SUSPEND_AI)) + { + float NEXT_SPECIAL = 1.0; + NEXT_SPECIAL("do_special"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + float NEXT_SPECIAL = 20.0; + if ((IsEntityAlive(m_hAttackTarget))) + { + int N_SPECIALS = 4; + int RND_SPECIAL = RandomInt(1, N_SPECIALS); + if (RND_SPECIAL == 1) + { + if (N_SCORPS < 2) + { + do_scorps(); + float NEXT_SPECIAL = 20.0; + } + else + { + int RND_SPECIAL = RandomInt(2, N_SPECIALS); + } + } + if (RND_SPECIAL == 2) + { + do_birds(); + } + if (RND_SPECIAL == 3) + { + } + if (RND_SPECIAL == 4) + { + N_BALLS = 0; + do_lballs(); + } + } + NEXT_SPECIAL("do_special"); + } + + void do_scorps() + { + PlayAnim("critical", ANIM_CAST); + ScheduleDelayedEvent(1.0, "do_scorps2"); + } + + void do_scorps2() + { + SCORP_SCRIPT = SCORP_SCRIPT1; + if ("game.players.totalhp" > 4000) + { + SCORP_SCRIPT = SCORP_SCRIPT2; + } + N_SCORPS += 1; + M_SUMMON_BIRDS = 0; + get_summon_point(); + SpawnNPC(SCORP_SCRIPT, SUM_POINT, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + CallExternal(m_hLastCreated, "ext_delay_target", 3.0, "enemy"); + if (!(N_SCORPS < 2)) return; + if (!("game.players.totalhp" <= 4000)) return; + ScheduleDelayedEvent(0.1, "do_scorps3"); + } + + void do_scorps3() + { + N_SCORPS += 1; + M_SUMMON_BIRDS = 0; + get_summon_point(); + SpawnNPC(SCORP_SCRIPT, SUM_POINT, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + CallExternal(m_hLastCreated, "ext_delay_target", 3.0, "enemy"); + } + + void scorpion_died() + { + N_SCORPS -= 1; + } + + void do_meteors() + { + npcatk_suspend_ai(); + SetMoveAnim(ANIM_METEOR); + SetIdleAnim(ANIM_METEOR); + PlayAnim("once", ANIM_METEOR); + ROT_ANG = GetMonsterProperty("angles.yaw"); + METEOR_COUNT = 0; + EmitSound(GetOwner(), 0, SOUND_RAWR, 10); + do_meteors_loop(); + } + + void do_meteors_loop() + { + if (METEOR_COUNT < 18) + { + ROT_ANG += 20; + if (ROT_ANG > 359) + { + ROT_ANG -= 359; + } + string MOVE_DEST = GetMonsterProperty("origin"); + MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, ROT_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(MOVE_DEST); + METEOR_COUNT += 1; + ScheduleDelayedEvent(0.1, "do_meteors_loop"); + } + else + { + npcatk_resume_ai(); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", "break"); + } + } + + void frame_kick() + { + ANIM_ATTACK = ANIM_SWIPE; + NEXT_KICK = GetGameTime(); + NEXT_KICK += FREQ_KICK; + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, 1000, 200)); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 2.0, GetEntityIndex(GetOwner())); + DoDamage(m_hAttackTarget, "direct", DMG_KICK, 1.0, GetOwner()); + } + + void frame_stomp() + { + ANIM_ATTACK = ANIM_SWIPE; + string BURST_POS = /* TODO: $relpos */ $relpos(50, 50, 0); + string GRND_BURST = /* TODO: $get_ground_height */ $get_ground_height(BURST_POS); + BURST_POS = "z"; + stunburst_go(BURST_POS, 512, 1, DMG_STOMP); + NEXT_STOMP = GetGameTime(); + NEXT_STOMP += FREQ_STOMP; + } + + void frame_swipe() + { + EmitSound(GetOwner(), 0, SOUND_SWIPE, 10); + string SWIPE_POINT = SWIPE_OFS; + XDoDamage(SWIPE_POINT, SWIPE_RAD, DMG_SWIPE, 0.0, GetOwner(), GetOwner(), "none", "blunt"); + if (RandomInt(1, 100) < CHANCE_KICK) + { + if (GetGameTime() > NEXT_KICK) + { + } + ANIM_ATTACK = ANIM_KICK; + } + CHANCE_STOMP = 10; + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + stomp_check(); + } + if (CHANCE_STOMP > 50) + { + CHANCE_STOMP = 50; + } + if (!(RandomInt(1, 100) < CHANCE_STOMP)) return; + if (!(GetGameTime() > NEXT_STOMP)) return; + ANIM_ATTACK = ANIM_STOMP; + } + + void stomp_check() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + if (!(GetEntityRange(CUR_PLAYER) < ATTACK_HITRANGE)) return; + CHANCE_STOMP += 10; + } + + void do_lballs() + { + if (N_BALLS == 0) + { + PlayAnim("critical", ANIM_CAST); + } + BALL_TARGETS = FindEntitiesInSphere("enemy", 2048); + ScrambleTokens(BALL_TARGETS, ";"); + get_summon_point(); + SpawnNPC("monsters/summon/lightning_ball_guided", SUM_POINT, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_BALL, 30.0, 192, GetToken(BALL_TARGETS, 0, ";") + N_BALLS += 1; + string N_BALL_TARGS = GetTokenCount(BALL_TARGETS, ";"); + if (!(N_BALLS < 2)) return; + ScheduleDelayedEvent(0.1, "do_lballs"); + if (!(N_BALL_TARGS > 1)) return; + string N_BALLS_SANS2 = N_BALLS; + N_BALLS_SANS2 -= 2; + if (N_BALLS_SANS2 < N_BALL_TARGS) + { + string N_BALLS_F10 = N_BALLS; + N_BALLS_F10 *= 0.1; + N_BALLS_F10("do_lballs"); + } + } + + void do_birds() + { + string L_DIFF = (LAST_BIRD - GetGameTime()); + if (!(L_DIFF > BIRD_COOLDOWN)) return; + PlayAnim("critical", ANIM_CAST); + CallExternal("all", "summon_eagle_vanish"); + N_BIRDS = 0; + do_birds_loop(); + } + + void do_birds_loop() + { + M_SUMMON_BIRDS = 1; + get_summon_point(); + SpawnNPC(BIRD_SCRIPT, SUM_POINT, ScriptMode::Legacy); + CallExternal(m_hLastCreated, "ext_delay_target", 3.0, "enemy"); + N_BIRDS += 1; + if (!(N_BIRDS < 12)) return; + string DBL_NPLAYERS = GetPlayerCount(); + DBL_NPLAYERS *= 2; + if (!(N_BIRDS < DBL_NPLAYERS)) return; + ScheduleDelayedEvent(0.1, "do_birds_loop"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + string L_TITAN_ID = GetEntityIndex(GetOwner()); + string L_TITAN_DEATH_POS = GetEntityOrigin(GetOwner()); + string L_TITAN_STUN_POS = /* TODO: $relpos */ $relpos(0, 400, 0); + SpawnNPC("chests/olympus", NPC_HOME_LOC, ScriptMode::Legacy); + CallExternal(GAME_MASTER, "gm_createnpc", 4.0, "monsters/summon/stun_burst", L_TITAN_STUN_POS, L_TITAN_ID, 512, 1, 100); + CallExternal(GAME_MASTER, "gold_spew", 500, 2, 256, 4, 16, L_TITAN_DEATH_POS); + } + + void smash_scanner() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(0.5, "smash_scanner"); + if (!(GetGameTime() > NEXT_SMASH)) return; + SMASH_SCAN_POINT = SMASH_OFS; + SMASH_TARGET = "unset"; + GetAllPlayers(SMASH_PLAYER_LIST); + for (int i = 0; i < GetTokenCount(SMASH_PLAYER_LIST, ";"); i++) + { + check_for_smash(); + } + if (!(SMASH_TARGET != "unset")) return; + ANIM_ATTACK = ANIM_SMASH; + DO_GRAB = 0; + if (!(GetGameTime() > NEXT_GRAB)) return; + if (!(RandomInt(1, 2) == 1)) return; + DO_GRAB = 1; + ANIM_ATTACK = ANIM_GRAB; + } + + void check_for_smash() + { + string CUR_PLAYER = GetToken(SMASH_PLAYER_LIST, i, ";"); + string CUR_PLAYER_ORG = GetEntityOrigin(CUR_PLAYER); + if (Distance(CUR_PLAYER_ORG, SMASH_SCAN_POINT) < SMASH_RANGE) + { + SMASH_TARGET = CUR_PLAYER; + } + } + + void frame_smash() + { + NEXT_SMASH = GetGameTime(); + NEXT_SMASH += FREQ_SMASH; + ANIM_ATTACK = ANIM_SWIPE; + string SMASH_POINT = SMASH_OFS; + SMASH_POINT += "z"; + string BURST_POS = SMASH_POINT; + stunburst_go(BURST_POS, 128, 0, DMG_STOMP); + } + + void get_summon_point() + { + if (!(M_SUMMON_POINTS)) + { + if (ALTERNATE_SUM_POINT == 0) + { + T_SUM_ANG += 20; + if (T_SUM_ANG > 359) + { + T_SUM_ANG -= 359; + } + SUM_ANG = T_SUM_ANG; + ALTERNATE_SUM_POINT = 1; + } + else + { + SUM_ANG = T_SUM_ANG; + SUM_ANG += 180; + if (SUM_ANG > 359) + { + SUM_ANG -= 359; + } + ALTERNATE_SUM_POINT = 0; + } + SUM_POINT = NPC_HOME_LOC; + SUM_POINT += /* TODO: $relpos */ $relpos(Vector3(0, SUM_ANG, 0), Vector3(0, SUM_RAD, SUM_VADJ)); + if ((ALTERNATE_SUM_POINT)) + { + Effect("beam", "end", "lgtning.spr", 120, SUM_POINT, GetOwner(), R_ARM_ATT_IDX, Vector3(64, 64, 255), 200, 30, 1.0); + ClientEvent("update", "all", CL_IDX, "titan_summon_sprite", SUM_POINT); + } + else + { + Effect("beam", "end", "lgtning.spr", 120, SUM_POINT, GetOwner(), L_ARM_ATT_IDX, Vector3(64, 64, 255), 200, 30, 1.0); + ClientEvent("update", "all", CL_IDX, "titan_summon_sprite", SUM_POINT); + } + } + else + { + M_SUMMON_COUNT += 1; + if (M_SUMMON_COUNT == 1) + { + SUM_POINT = M_SUMMON_POINT1; + string L_ARM_IDX = R_ARM_ATT_IDX; + } + else + { + if (M_SUMMON_COUNT == 2) + { + SUM_POINT = M_SUMMON_POINT2; + string L_ARM_IDX = L_ARM_ATT_IDX; + } + else + { + if (M_SUMMON_COUNT == 3) + { + SUM_POINT = M_SUMMON_POINT3; + string L_ARM_IDX = R_ARM_ATT_IDX; + } + else + { + if (M_SUMMON_COUNT == 4) + { + SUM_POINT = M_SUMMON_POINT4; + string L_ARM_IDX = L_ARM_ATT_IDX; + M_SUMMON_COUNT = 0; + } + } + } + } + if ((M_SUMMON_BIRDS)) + { + M_BIRD_ROT += 90; + if (M_BIRD_ROT > 359.99) + { + M_BIRD_ROT = 0; + } + SUM_POINT += /* TODO: $relpos */ $relpos(Vector3(0, M_BIRD_ROT, 0), Vector3(0, 96, 0)); + } + LogDebug("get_summon_point - using map points SUM_POINT"); + Effect("beam", "end", "lgtning.spr", 120, SUM_POINT, GetOwner(), L_ARM_ATT_IDX, Vector3(64, 64, 255), 200, 30, 1.0); + ClientEvent("update", "all", CL_IDX, "titan_summon_sprite", SUM_POINT); + } + EmitSound(GetOwner(), 2, SOUND_SUMMON, 10); + } + + void frame_walk_step1() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 5); + } + + void frame_walk_step2() + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 5); + } + + void frame_idle_breath() + { + // PlayRandomSound from: SOUND_YAWN1, SOUND_YAWN2, SOUND_YAWN3 + array sounds = {SOUND_YAWN1, SOUND_YAWN2, SOUND_YAWN3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_idle_yawn() + { + // PlayRandomSound from: SOUND_YAWN1, SOUND_YAWN2, SOUND_YAWN3 + array sounds = {SOUND_YAWN1, SOUND_YAWN2, SOUND_YAWN3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_grab_player() + { + GRAB_TARG = 0; + if ((IsEntityAlive(SMASH_TARGET))) + { + EmitSound(GetOwner(), 0, SOUND_GRAB, 10); + string GRAB_TARG_ORG = GetEntityOrigin(SMASH_TARGET); + string FIST_ORG = GetEntityProperty(GetOwner(), "attachpos"); + LogDebug("frame_grab_body FIST_ORG vs GRAB_TARG_ORG"); + if (Distance(FIST_ORG, GRAB_TARG_ORG) < 128) + { + GRAB_TARG = SMASH_TARGET; + GRAB_MODE = 1; + ScheduleDelayedEvent(0.01, "lock_player_to_hand"); + npcatk_suspend_ai(); + ScheduleDelayedEvent(0.5, "face_home"); + } + else + { + NEXT_GRAB = GetGameTime(); + NEXT_GRAB += FREQ_GRAB; + ANIM_ATTACK = ANIM_SWIPE; + } + } + else + { + NEXT_GRAB = GetGameTime(); + NEXT_GRAB += 10.0; + ANIM_ATTACK = ANIM_SWIPE; + } + } + + void frame_start_squeeze() + { + if (!(IsEntityAlive(GRAB_TARG))) return; + PlayAnim("critical", ANIM_SQUEEZE); + } + + void frame_squeeze_player() + { + EmitSound(GetOwner(), 0, SOUND_SQUEEZE, 10); + END_SQEEEZE_DMG_LOOP = GetGameTime(); + END_SQEEEZE_DMG_LOOP += 2.0; + squeeze_dmg_loop(); + Effect("screenshake", GetEntityProperty(GRAB_TARG, "org"), 190, 20, 3, 32); + } + + void squeeze_dmg_loop() + { + if (!(GetGameTime() < END_SQEEEZE_DMG_LOOP)) return; + if (!(IsEntityAlive(GRAB_TARG))) + { + GRAB_MODE = 0; + } + if (!(IsEntityAlive(GRAB_TARG))) return; + if (!(GetEntityRange(GRAB_TARG) < 1024)) return; + ScheduleDelayedEvent(0.1, "squeeze_dmg_loop"); + DoDamage(GRAB_TARG, "direct", DMG_SQUEEZE, 1.0, GetOwner()); + } + + void frame_squeeze_done() + { + if (!(IsEntityAlive(GRAB_TARG))) + { + npcatk_resume_ai(); + GRAB_MODE = 0; + } + else + { + PlayAnim("critical", ANIM_THROW); + } + } + + void face_home() + { + SetMoveDest(NPC_HOME_LOC); + } + + void lock_player_to_hand() + { + if (!(GRAB_MODE)) return; + ScheduleDelayedEvent(0.01, "lock_player_to_hand"); + SetEntityOrigin(GRAB_TARG, GetEntityProperty(GetOwner(), "attachpos")); + SetVelocity(GRAB_TARG, Vector3(0, 0, 0)); + } + + void frame_toss_player() + { + npcatk_resume_ai(); + GRAB_MODE = 0; + NEXT_GRAB = GetGameTime(); + NEXT_GRAB += FREQ_GRAB; + string SHIFT_ORG = GetEntityProperty(GetOwner(), "attachpos"); + SHIFT_ORG += "z"; + SetEntityOrigin(GRAB_TARG, SHIFT_ORG); + SetProp(GRAB_TARG, "movetype", "const.movetype.bouncemissle"); + AddVelocity(GRAB_TARG, /* TODO: $relvel */ $relvel(0, 2000, 200)); + DoDamage(GRAB_TARG, "direct", DMG_THROW, 1.0, "blunt"); + ApplyEffect(GRAB_TARG, "effects/debuff_stun", 10.0, GetEntityIndex(GetOwner())); + EmitSound(GetOwner(), 0, SOUND_THROW, 10); + } + + void ext_popup() + { + string MY_Z = GetMonsterProperty("origin"); + MY_Z += "z"; + SetEntityOrigin(GetOwner(), MY_Z); + } + + void titan_fade_in() + { + if (TITAN_RNDAMT == 255) + { + SetProp(GetOwner(), "rendermode", 0); + SetRoam(true); + } + if (!(TITAN_RNDAMT < 255)) return; + TITAN_RNDAMT += 5; + SetProp(GetOwner(), "renderamt", TITAN_RNDAMT); + ScheduleDelayedEvent(0.1, "titan_fade_in"); + } + + void stunburst_go() + { + STUN_BURST_POS = param1; + STUN_BURST_RAD = param2; + STUN_BURST_REPEL = param3; + STUN_BURST_DMG = param4; + LogDebug("stunburst_go pos: STUN_BURST_POS rad: STUN_BURST_RAD repel: STUN_BURST_REPEL dmg: STUN_BURST_DMG"); + ClientEvent("update", "all", CL_IDX, "fx_stunburst_go_cl", STUN_BURST_POS, STUN_BURST_RAD); + ScheduleDelayedEvent(0.25, "stun_targets"); + } + + void stun_targets() + { + STUN_LIST = FindEntitiesInSphere("enemy", STUN_BURST_RAD); + LogDebug("stun_targets STUN_LIST"); + if (!(STUN_LIST != "none")) return; + if (!(GetTokenCount(STUN_LIST, ";") > 0)) return; + for (int i = 0; i < GetTokenCount(STUN_LIST, ";"); i++) + { + stunburst_affect_targets(); + } + } + + void stunburst_affect_targets() + { + string CHECK_ENT = GetToken(STUN_LIST, i, ";"); + if (!(IsOnGround(CHECK_ENT))) return; + ApplyEffect(CHECK_ENT, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + if (STUN_BURST_DMG > 0) + { + DoDamage(CHECK_ENT, "direct", STUN_BURST_DMG, 1.0, GetOwner()); + } + if (!(STUN_BURST_REPEL)) return; + string TARGET_ORG = GetEntityOrigin(CHECK_ENT); + string TARG_ANG = /* TODO: $angles */ $angles(STUN_BURST_POS, TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CHECK_ENT, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + +} + +} diff --git a/scripts/angelscript/monsters/abaddon.as b/scripts/angelscript/monsters/abaddon.as new file mode 100644 index 00000000..d15ae88c --- /dev/null +++ b/scripts/angelscript/monsters/abaddon.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/lslime.as" + +namespace MS +{ + +class Abaddon : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/abomination_bone.as b/scripts/angelscript/monsters/abomination_bone.as new file mode 100644 index 00000000..ffc100fc --- /dev/null +++ b/scripts/angelscript/monsters/abomination_bone.as @@ -0,0 +1,494 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_lightning_shield.as" + +namespace MS +{ + +class AbominationBone : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_LONG; + string ANIM_ATTACK_SHORT; + string ANIM_BREATH_ATTACK; + string ANIM_CRAWL; + string ANIM_DEATH; + string ANIM_FLING; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LIGHTNING; + string ANIM_RAWR; + string ANIM_RUN; + string ANIM_WALK; + string ANIM_WALK_ACTIVE; + string AS_ATTACKING; + int ATTACK_COUNTER; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_HITRANGE_LONG; + int ATTACK_HITRANGE_SHORT; + int ATTACK_RANGE; + int ATTACK_RANGE_LONG; + int ATTACK_RANGE_SHORT; + string BREATH_ANG; + int BREATH_ATTACK_ON; + int BREATH_COUNT; + string BREATH_IDX; + string CLOUD_TARGS; + int CUR_SPECIAL; + int DID_WARCRY; + int DMG_BITE_LONG; + int DMG_BITE_SHORT; + int DMG_LSHIELD; + int DOT_BREATH; + int DROP_HUNDERSWAMP_CHEST; + float FREQ_IDLE; + float FREQ_SPECIAL; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + float LSHIELD_FREQ_UPDATE; + int LSHIELD_PASSIVE; + int LSHIELD_RADIUS; + int LSHIELD_REPELL_STRENGTH; + int MELEE_ATTACK_LONG; + int MELEE_ATTACK_SHORT; + int MONSTER_HP; + string NEXT_IDLE; + string NEXT_SCAN; + string NEXT_SPECIAL; + int NPC_BASE_EXP; + string NPC_HALF_HEALTH; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK_LONG; + string SOUND_ATTACK_SHORT; + string SOUND_BREATH_LOOP; + string SOUND_BREATH_START; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_RAWR; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_ZAP_LOOP; + string SOUND_ZAP_START; + string STUN_TARGS; + + AbominationBone() + { + ANIM_WALK = "crawl"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "death1_die"; + ANIM_ATTACK_SHORT = "attack1"; + ANIM_ATTACK_LONG = "attack2"; + ANIM_CRAWL = "crawl"; + ANIM_WALK_ACTIVE = "walk"; + ANIM_LIGHTNING = "breath_fast"; + ANIM_FLING = "grab_fling"; + ANIM_JUMP = "jump"; + ANIM_BREATH_ATTACK = "breath"; + ANIM_RAWR = "rawr"; + NPC_BASE_EXP = 10000; + if (StringToLower(GetMapName()) == "deraliasewers") + { + NPC_BASE_EXP = 5000; + } + MONSTER_HP = 20000; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 200; + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + ATTACK_RANGE_SHORT = 100; + ATTACK_RANGE_LONG = 150; + ATTACK_HITRANGE_SHORT = 150; + ATTACK_HITRANGE_LONG = 200; + ATTACK_HITCHANCE = 0.8; + DOT_BREATH = 200; + DMG_BITE_SHORT = 300; + DMG_BITE_LONG = 600; + FREQ_SPECIAL = Random(10.0, 20.0); + FREQ_IDLE = Random(10.0, 15.0); + SOUND_RAWR = "monsters/abombination/rawr.wav"; + SOUND_ATTACK1 = "monsters/abombination/attack1.wav"; + SOUND_ATTACK2 = "monsters/abombination/attack2.wav"; + SOUND_IDLE1 = "monsters/abombination/growl1.wav"; + SOUND_IDLE2 = "monsters/abombination/growl2.wav"; + SOUND_PAIN1 = "monsters/abombination/pain1.wav"; + SOUND_PAIN2 = "monsters/abombination/pain2.wav"; + SOUND_DEATH = "monsters/abombination/die.wav"; + SOUND_STEP1 = "monsters/abombination/step1.wav"; + SOUND_STEP2 = "monsters/abombination/step2.wav"; + SOUND_STRUCK1 = "weapons/bullet_hit1.wav"; + SOUND_STRUCK2 = "weapons/bullet_hit2.wav"; + SOUND_ATTACK_LONG = "zombie/claw_miss1.wav"; + SOUND_ATTACK_SHORT = "zombie/claw_miss2.wav"; + SOUND_BREATH_START = "ambience/steamburst1.wav"; + SOUND_BREATH_LOOP = "ambience/steamjet1.wav"; + Precache("magic/boom.wav"); + LSHIELD_PASSIVE = 0; + LSHIELD_REPELL_STRENGTH = 300; + LSHIELD_FREQ_UPDATE = 0.25; + DMG_LSHIELD = 300; + LSHIELD_RADIUS = 128; + SOUND_ZAP_LOOP = "magic/bolt_loop.wav"; + SOUND_ZAP_START = "magic/bolt_end.wav"; + Precache(SOUND_ZAP_LOOP); + Precache(SOUND_ZAP_START); + } + + void OnSpawn() override + { + if (StringToLower(GetMapName()) == "shad_palace") + { + SetName("Bone Guardian"); + } + else + { + SetName("Bone Abomination"); + } + SetModel("monsters/abomination.mdl"); + SetHeight(72); + SetWidth(96); + SetRace("demon"); + SetBloodType("none"); + if (!(START_SUSPEND)) + { + SetRoam(true); + } + SetHearingSensitivity(4); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetHealth(MONSTER_HP); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.5); + SetDamageResistance("fire", 1.25); + SetDamageResistance("cold", 0.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("slash", 1.0); + SetDamageResistance("blunt", 1.25); + SetDamageResistance("pierce", 0.75); + SetDamageResistance("stun", 0.5); + if (!(true)) return; + CUR_SPECIAL = 0; + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += FREQ_IDLE; + ScheduleDelayedEvent(2.0, "final_adj"); + if (!(START_SUSPEND)) return; + SetInvincible(true); + npcatk_suspend_ai(); + } + + void final_adj() + { + NPC_HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + NPC_HALF_HEALTH *= 0.5; + if (!(START_SUSPEND)) return; + npcatk_suspend_ai(); + } + + void cycle_up() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + ATTACK_COUNTER = 0; + if ((DID_WARCRY)) return; + PlayAnim("critical", ANIM_RAWR); + EmitSound(GetOwner(), 0, SOUND_RAWR, 10); + DID_WARCRY = 1; + } + + void cycle_down() + { + DID_WARCRY = 0; + } + + void my_target_died() + { + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2 + array sounds = {SOUND_IDLE1, SOUND_IDLE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (m_hAttackTarget == "unset") + { + if (GetGameTime() > NEXT_IDLE) + { + } + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += FREQ_IDLE; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2 + array sounds = {SOUND_IDLE1, SOUND_IDLE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("once", "breath_slow"); + } + if (!(m_hAttackTarget != "unset")) return; + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE_LONG) + { + ANIM_ATTACK = ANIM_ATTACK_LONG; + ATTACK_RANGE = ATTACK_RANGE_LONG; + ATTACK_HITRANGE = ATTACK_HITRANGE_LONG; + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE_SHORT) + { + ANIM_ATTACK = ANIM_ATTACK_SHORT; + ATTACK_RANGE = ATTACK_RANGE_SHORT; + ATTACK_HITRANGE = ATTACK_HITRANGE_SHORT; + } + if (!(GetGameTime() > NEXT_SPECIAL)) return; + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + CUR_SPECIAL += 1; + if (CUR_SPECIAL == 1) + { + do_lfield(); + } + if (CUR_SPECIAL == 2) + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 3.0; + PlayAnim("critical", ANIM_JUMP); + ScheduleDelayedEvent(0.01, "jump_boost"); + } + if (CUR_SPECIAL == 3) + { + do_breath_attack(); + CUR_SPECIAL = 0; + } + } + + void jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, 200)); + } + + void do_lfield() + { + npcatk_suspend_ai(); + PlayAnim("once", "break"); + npcatk_suspend_movement(ANIM_LIGHTNING); + PlayAnim("critical", ANIM_LIGHTNING); + lshield_activate(10.0); + ScheduleDelayedEvent(10.0, "end_lfield"); + } + + void end_lfield() + { + npcatk_resume_ai(); + npcatk_resume_movement(); + lshield_toggle_off(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + } + + void do_breath_attack() + { + ClientEvent("new", "all", "monsters/abomination_cl", GetEntityIndex(GetOwner())); + BREATH_IDX = "game.script.last_sent_id"; + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_BREATH_ATTACK); + EmitSound(GetOwner(), 1, SOUND_BREATH_START, 10); + // svplaysound: svplaysound 2 10 SOUND_BREATH_LOOP + EmitSound(2, 10, SOUND_BREATH_LOOP); + PlayAnim("once", "break"); + PlayAnim("hold", ANIM_BREATH_ATTACK); + SetMoveDest(m_hAttackTarget); + BREATH_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + BREATH_ANG -= 45; + if (BREATH_ANG < 0) + { + BREATH_ANG += 359; + } + BREATH_COUNT = 0; + BREATH_ATTACK_ON = 1; + ScheduleDelayedEvent(0.01, "breath_attack_loop"); + } + + void breath_attack_loop() + { + if (!(BREATH_ATTACK_ON)) return; + BREATH_COUNT += 1; + if (BREATH_COUNT == 45) + { + end_breath_attack(); + } + if (!(BREATH_COUNT < 45)) return; + ScheduleDelayedEvent(0.05, "breath_attack_loop"); + BREATH_ANG += 1; + if (BREATH_ANG > 359) + { + BREATH_ANG -= 359; + } + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_ANG, 0), Vector3(0, 500, 0)); + SetMoveDest(FACE_POS); + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.25; + string SCAN_POINT = /* TODO: $relpos */ $relpos(0, 128, 0); + CLOUD_TARGS = FindEntitiesInSphere("enemy", 256); + if (CLOUD_TARGS != "none") + { + for (int i = 0; i < GetTokenCount(CLOUD_TARGS, ";"); i++) + { + breath_affect_targets(); + } + } + } + + void breath_affect_targets() + { + string CUR_TARGET = GetToken(CLOUD_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 384)) return; + ApplyEffect(CUR_TARGET, "effects/dot_poison_blind", 5.0, GetEntityIndex(GetOwner()), DOT_BREATH, 0, 0, "none"); + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(0, 800, 120)); + } + + void end_breath_attack() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + ClientEvent("update", "all", BREATH_IDX, "end_fx"); + npcatk_resume_ai(); + npcatk_resume_movement(); + PlayAnim("critical", ANIM_ATTACK); + // svplaysound: svplaysound 2 0 SOUND_BREATH_LOOP + EmitSound(2, 0, SOUND_BREATH_LOOP); + BREATH_ATTACK_ON = 0; + } + + void frame_attack_short() + { + EmitSound(GetOwner(), 1, SOUND_ATTACK_SHORT, 10); + ATTACK_COUNTER += 1; + if (ATTACK_COUNTER > 4) + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + ATTACK_COUNTER = Random(-2, 1); + } + MELEE_ATTACK_SHORT = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE_SHORT, ATTACK_HITCHANCE, "slash"); + } + + void frame_attack_long() + { + EmitSound(GetOwner(), 1, SOUND_ATTACK_LONG, 10); + ATTACK_COUNTER += 1; + if (ATTACK_COUNTER > 3) + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + ATTACK_COUNTER = Random(-2, 1); + } + MELEE_ATTACK_LONG = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE_LONG, ATTACK_HITCHANCE, "slash"); + } + + void frame_run() + { + // PlayRandomSound from: SOUND_STEP1, SOUND_STEP2 + array sounds = {SOUND_STEP1, SOUND_STEP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_jump_land() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + string MY_GROUND = GetEntityOrigin(GetOwner()); + MY_GROUND = "z"; + ClientEvent("new", "all", "effects/sfx_stun_burst", MY_GROUND, 256, 1, Vector3(64, 64, 255)); + STUN_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(STUN_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(STUN_TARGS, ";"); i++) + { + stun_targets(); + } + } + + void stun_targets() + { + string CUR_TARG = GetToken(STUN_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(IsOnGround(CUR_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARG, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 800, 110))); + } + + void game_dodamage() + { + if ((param1)) + { + if ((MELEE_ATTACK_LONG)) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 400, 110)); + } + if ((MELEE_ATTACK_SHORT)) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(-150, 200, 110)); + } + } + MELEE_ATTACK_LONG = 0; + MELEE_ATTACK_SHORT = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetEntityMaxHealth(GetOwner()) > NPC_HALF_HEALTH) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((DROP_HUNDERSWAMP_CHEST)) + { + UseTrigger("mm_abom_seal"); + UseTrigger("brk_weed"); + SpawnNPC("chests/hunderswamp1_extra", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); + } + if (!(BREATH_ATTACK_ON)) return; + ClientEvent("update", "all", BREATH_IDX, "end_fx"); + } + + void set_hunderswamp_north_spec() + { + LogDebug("set_hunderswamp_north_spec"); + SetRace("wildanimal"); + DROP_HUNDERSWAMP_CHEST = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/abomination_cl.as b/scripts/angelscript/monsters/abomination_cl.as new file mode 100644 index 00000000..84cfc20f --- /dev/null +++ b/scripts/angelscript/monsters/abomination_cl.as @@ -0,0 +1,138 @@ +#pragma context server + +namespace MS +{ + +class AbominationCl : CGameScript +{ + string ATTACHMENT_POS; + string BREATH_TYPE; + string CLOUD_ANG; + int FX_ACTIVE; + string FX_OWNER; + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + if ((FX_ACTIVE)) + { + } + ATTACHMENT_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + } + + void client_activate() + { + FX_OWNER = param1; + BREATH_TYPE = param2; + if ((BREATH_TYPE).findFirst("PARAM") == 0) + { + BREATH_TYPE = 0; + } + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), 256, Vector3(0, 255, 0), 1.0); + SetCallback("render", "enable"); + FX_ACTIVE = 1; + breath_loop(); + ScheduleDelayedEvent(15.0, "end_fx"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void breath_loop() + { + if (!(FX_ACTIVE)) return; + make_cloud(/* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw")); + ScheduleDelayedEvent(0.2, "breath_loop"); + } + + void make_cloud() + { + string CLOUD_ORG = param1; + CLOUD_ANG = param2; + if (BREATH_TYPE == 0) + { + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud", "update_cloud"); + } + else + { + ClientEffect("tempent", "sprite", "explode1.spr", CLOUD_ORG, "setup_fire_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", "explode1.spr", CLOUD_ORG, "setup_fire_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", "explode1.spr", CLOUD_ORG, "setup_fire_cloud", "update_cloud"); + } + } + + void end_fx() + { + if (!(FX_ACTIVE)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.25, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < 2) + { + CUR_SCALE += 0.1; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + float RND_RL = Random(-10, 10); + float RND_UD = Random(-30, 30); + float RND_FD = Random(300, 400); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, RND_FD, RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void setup_fire_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + if (RandomInt(1, 3) == 1) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 0)); + } + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/abomination_venom.as b/scripts/angelscript/monsters/abomination_venom.as new file mode 100644 index 00000000..4bb90dcf --- /dev/null +++ b/scripts/angelscript/monsters/abomination_venom.as @@ -0,0 +1,612 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class AbominationVenom : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_LONG; + string ANIM_ATTACK_SHORT; + string ANIM_BREATH_ATTACK; + string ANIM_CHARGE; + string ANIM_CRAWL; + string ANIM_DEATH; + string ANIM_FLING; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LIGHTNING; + string ANIM_RAWR; + string ANIM_RUN; + string ANIM_WALK; + string ANIM_WALK_ACTIVE; + string AS_ATTACKING; + int ATTACK_COUNTER; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_HITRANGE_LONG; + int ATTACK_HITRANGE_SHORT; + int ATTACK_RANGE; + int ATTACK_RANGE_LONG; + int ATTACK_RANGE_SHORT; + string BREATH_ANG; + int BREATH_ATTACK_ON; + int BREATH_COUNT; + string BREATH_IDX; + string BURST_TARGS; + string CHARGE_CL_FX; + string CHARGE_YAW; + string CLOUD_TARGS; + int CUR_SPECIAL; + int DID_WARCRY; + int DMG_BITE_LONG; + int DMG_BITE_SHORT; + int DMG_CHARGE; + int DMG_LSHIELD; + int DOT_BREATH; + int DOT_POISON_BURST; + int DROP_HUNDERSWAMP_CHEST; + float FREQ_IDLE; + float FREQ_SPECIAL; + int IMMUNE_VAMPIRE; + int IN_CHARGE; + int IS_UNHOLY; + float LSHIELD_FREQ_UPDATE; + int LSHIELD_PASSIVE; + int LSHIELD_RADIUS; + int LSHIELD_REPELL_STRENGTH; + int MELEE_ATTACK_LONG; + int MELEE_ATTACK_SHORT; + int MONSTER_HP; + string NEXT_IDLE; + string NEXT_SCAN; + string NEXT_SPECIAL; + string NEXT_TOUCH_CHECK; + int NPC_GIVE_EXP; + string NPC_HALF_HEALTH; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK_LONG; + string SOUND_ATTACK_SHORT; + string SOUND_BREATH_LOOP; + string SOUND_BREATH_START; + string SOUND_CHARGE_START; + string SOUND_DEATH; + string SOUND_FBREATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_RAWR; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_ZAP_LOOP; + string SOUND_ZAP_START; + string STUN_TARGS; + + AbominationVenom() + { + ANIM_WALK = "crawl"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "death1_die"; + ANIM_ATTACK_SHORT = "attack1"; + ANIM_ATTACK_LONG = "attack2"; + ANIM_CRAWL = "crawl"; + ANIM_WALK_ACTIVE = "walk"; + ANIM_LIGHTNING = "breath_fast"; + ANIM_FLING = "grab_fling"; + ANIM_JUMP = "jump"; + ANIM_BREATH_ATTACK = "breath"; + ANIM_RAWR = "rawr"; + ANIM_CHARGE = "run"; + MONSTER_HP = 20000; + NPC_GIVE_EXP = 8000; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 200; + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + ATTACK_RANGE_SHORT = 100; + ATTACK_RANGE_LONG = 150; + ATTACK_HITRANGE_SHORT = 150; + ATTACK_HITRANGE_LONG = 200; + ATTACK_HITCHANCE = 0.8; + DOT_BREATH = 200; + DMG_BITE_SHORT = 300; + DMG_BITE_LONG = 600; + DMG_CHARGE = 50; + DOT_POISON_BURST = 100; + FREQ_SPECIAL = Random(10.0, 20.0); + FREQ_IDLE = Random(10.0, 15.0); + SOUND_RAWR = "monsters/abombination/rawr.wav"; + SOUND_ATTACK1 = "monsters/abombination/attack1.wav"; + SOUND_ATTACK2 = "monsters/abombination/attack2.wav"; + SOUND_IDLE1 = "monsters/abombination/growl1.wav"; + SOUND_IDLE2 = "monsters/abombination/growl2.wav"; + SOUND_PAIN1 = "monsters/abombination/pain1.wav"; + SOUND_PAIN2 = "monsters/abombination/pain2.wav"; + SOUND_DEATH = "monsters/abombination/die.wav"; + SOUND_STEP1 = "monsters/abombination/step1.wav"; + SOUND_STEP2 = "monsters/abombination/step2.wav"; + SOUND_STRUCK1 = "weapons/bullet_hit1.wav"; + SOUND_STRUCK2 = "weapons/bullet_hit2.wav"; + SOUND_ATTACK_LONG = "zombie/claw_miss1.wav"; + SOUND_ATTACK_SHORT = "zombie/claw_miss2.wav"; + SOUND_BREATH_START = "ambience/steamburst1.wav"; + SOUND_BREATH_LOOP = "ambience/steamjet1.wav"; + SOUND_CHARGE_START = "monsters/abombination/rawr.wav"; + SOUND_FBREATH = "monsters/goblin/sps_fogfire.wav"; + Precache("magic/boom.wav"); + LSHIELD_PASSIVE = 0; + LSHIELD_REPELL_STRENGTH = 300; + LSHIELD_FREQ_UPDATE = 0.25; + DMG_LSHIELD = 300; + LSHIELD_RADIUS = 128; + SOUND_ZAP_LOOP = "magic/bolt_loop.wav"; + SOUND_ZAP_START = "magic/bolt_end.wav"; + Precache(SOUND_ZAP_LOOP); + Precache(SOUND_ZAP_START); + } + + void OnSpawn() override + { + SetName("Venomous Bone Abomination"); + SetModel("monsters/abomination.mdl"); + SetProp(GetOwner(), "skin", 1); + SetHeight(72); + SetWidth(96); + SetRace("demon"); + SetBloodType("green"); + SetRoam(true); + SetHearingSensitivity(4); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetHealth(MONSTER_HP); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 1.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 2.0); + SetDamageResistance("slash", 1.0); + SetDamageResistance("blunt", 1.25); + SetDamageResistance("pierce", 0.75); + SetDamageResistance("stun", 0.5); + if (!(true)) return; + CUR_SPECIAL = 0; + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += FREQ_IDLE; + ScheduleDelayedEvent(2.0, "final_adj"); + } + + void final_adj() + { + NPC_HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + NPC_HALF_HEALTH *= 0.5; + } + + void cycle_up() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + ATTACK_COUNTER = 0; + if ((DID_WARCRY)) return; + PlayAnim("critical", ANIM_RAWR); + EmitSound(GetOwner(), 0, SOUND_RAWR, 10); + DID_WARCRY = 1; + } + + void cycle_down() + { + DID_WARCRY = 0; + } + + void my_target_died() + { + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2 + array sounds = {SOUND_IDLE1, SOUND_IDLE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((IN_CHARGE)) return; + if ((I_R_FROZEN)) return; + if (m_hAttackTarget == "unset") + { + if (GetGameTime() > NEXT_IDLE) + { + } + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += FREQ_IDLE; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2 + array sounds = {SOUND_IDLE1, SOUND_IDLE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("once", "breath_slow"); + } + if (!(m_hAttackTarget != "unset")) return; + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE_LONG) + { + ANIM_ATTACK = ANIM_ATTACK_LONG; + ATTACK_RANGE = ATTACK_RANGE_LONG; + ATTACK_HITRANGE = ATTACK_HITRANGE_LONG; + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE_SHORT) + { + ANIM_ATTACK = ANIM_ATTACK_SHORT; + ATTACK_RANGE = ATTACK_RANGE_SHORT; + ATTACK_HITRANGE = ATTACK_HITRANGE_SHORT; + } + if (!(GetGameTime() > NEXT_SPECIAL)) return; + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + if (CUR_SPECIAL > 4) + { + CUR_SPECIAL = 0; + } + CUR_SPECIAL += 1; + if (CUR_SPECIAL == 1) + { + do_charge(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetEntityRange(m_hAttackTarget) > 400) + { + CUR_SPECIAL = 0; + NEXT_SPECIAL = GetGameTime(); + string L_SPECIAL = FREQ_SPECIAL; + L_SPECIAL *= 0.5; + NEXT_SPECIAL += L_SPECIAL; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (CUR_SPECIAL == 2) + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 3.0; + PlayAnim("critical", ANIM_JUMP); + ScheduleDelayedEvent(0.01, "jump_boost"); + } + if (CUR_SPECIAL == 3) + { + int RND_BREATH = RandomInt(1, 2); + if (RND_BREATH == 1) + { + BREATH_TYPE = 1; + } + else + { + BREATH_TYPE = 0; + } + do_breath_attack(); + } + if (CUR_SPECIAL == 4) + { + poison_burst(); + CUR_SPECIAL = 0; + } + } + + void jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, 200)); + } + + void do_breath_attack() + { + ClientEvent("new", "all", "monsters/abomination_cl", GetEntityIndex(GetOwner()), BREATH_TYPE); + BREATH_IDX = "game.script.last_sent_id"; + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_BREATH_ATTACK); + if (BREATH_TYPE == 0) + { + EmitSound(GetOwner(), 1, SOUND_BREATH_START, 10); + EmitSound(GetOwner(), 2, SOUND_BREATH_LOOP, 10); + } + else + { + EmitSound(GetOwner(), 1, SOUND_FBREATH, 10); + } + PlayAnim("once", "break"); + PlayAnim("hold", ANIM_BREATH_ATTACK); + SetMoveDest(m_hAttackTarget); + BREATH_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + BREATH_ANG -= 45; + if (BREATH_ANG < 0) + { + BREATH_ANG += 359; + } + BREATH_COUNT = 0; + BREATH_ATTACK_ON = 1; + ScheduleDelayedEvent(0.01, "breath_attack_loop"); + } + + void breath_attack_loop() + { + if (!(BREATH_ATTACK_ON)) return; + BREATH_COUNT += 1; + if (BREATH_COUNT == 45) + { + end_breath_attack(); + } + if (!(BREATH_COUNT < 45)) return; + ScheduleDelayedEvent(0.05, "breath_attack_loop"); + BREATH_ANG += 1; + if (BREATH_ANG > 359) + { + BREATH_ANG -= 359; + } + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_ANG, 0), Vector3(0, 500, 0)); + SetMoveDest(FACE_POS); + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.25; + string SCAN_POINT = /* TODO: $relpos */ $relpos(0, 128, 0); + CLOUD_TARGS = FindEntitiesInSphere("enemy", 256); + if (CLOUD_TARGS != "none") + { + for (int i = 0; i < GetTokenCount(CLOUD_TARGS, ";"); i++) + { + breath_affect_targets(); + } + } + } + + void breath_affect_targets() + { + string CUR_TARGET = GetToken(CLOUD_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 384)) return; + if (BREATH_TYPE == 0) + { + ApplyEffect(CUR_TARGET, "effects/dot_poison_blind", 5.0, GetEntityIndex(GetOwner()), DOT_BREATH, 0, 0, "none"); + } + else + { + ApplyEffect(CUR_TARGET, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_BREATH); + } + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(0, 800, 120)); + } + + void end_breath_attack() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + ClientEvent("update", "all", BREATH_IDX, "end_fx"); + npcatk_resume_ai(); + npcatk_resume_movement(); + PlayAnim("critical", ANIM_ATTACK); + // svplaysound: svplaysound 2 0 SOUND_BREATH_LOOP + EmitSound(2, 0, SOUND_BREATH_LOOP); + BREATH_ATTACK_ON = 0; + } + + void frame_attack_short() + { + EmitSound(GetOwner(), 1, SOUND_ATTACK_SHORT, 10); + ATTACK_COUNTER += 1; + if (ATTACK_COUNTER > 4) + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + ATTACK_COUNTER = Random(-2, 1); + } + MELEE_ATTACK_SHORT = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE_SHORT, ATTACK_HITCHANCE, "slash"); + } + + void frame_attack_long() + { + EmitSound(GetOwner(), 1, SOUND_ATTACK_LONG, 10); + ATTACK_COUNTER += 1; + if (ATTACK_COUNTER > 3) + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + ATTACK_COUNTER = Random(-2, 1); + } + MELEE_ATTACK_LONG = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE_LONG, ATTACK_HITCHANCE, "slash"); + } + + void frame_run() + { + // PlayRandomSound from: SOUND_STEP1, SOUND_STEP2 + array sounds = {SOUND_STEP1, SOUND_STEP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_jump_land() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + string MY_GROUND = GetEntityOrigin(GetOwner()); + MY_GROUND = "z"; + ClientEvent("new", "all", "effects/sfx_stun_burst", MY_GROUND, 256, 1, Vector3(64, 64, 255)); + STUN_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(STUN_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(STUN_TARGS, ";"); i++) + { + stun_targets(); + } + } + + void stun_targets() + { + string CUR_TARG = GetToken(STUN_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(IsOnGround(CUR_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARG, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 800, 110))); + } + + void game_dodamage() + { + if ((param1)) + { + if ((MELEE_ATTACK_LONG)) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 400, 110)); + } + if ((MELEE_ATTACK_SHORT)) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(-150, 200, 110)); + } + } + MELEE_ATTACK_LONG = 0; + MELEE_ATTACK_SHORT = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetEntityMaxHealth(GetOwner()) > NPC_HALF_HEALTH) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((DROP_HUNDERSWAMP_CHEST)) + { + if ("game.players.totalhp" < 3000) + { + UseTrigger("mm_abom_seal"); + UseTrigger("brk_weed"); + } + SpawnNPC("chests/hunderswamp1_extra", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); + } + if (!(BREATH_ATTACK_ON)) return; + ClientEvent("update", "all", BREATH_IDX, "end_fx"); + } + + void do_charge() + { + EmitSound(GetOwner(), 0, SOUND_CHARGE_START, 10); + IN_CHARGE = 1; + CHARGE_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + ClientEvent("new", "all", "effects/sfx_motionblur_perm", GetEntityIndex(GetOwner()), 0); + CHARGE_CL_FX = "game.script.last_sent_id"; + npcatk_suspend_ai(5.0); + SetCallback("touch", "enable"); + SetRoam(false); + SetAnimFrameRate(3.0); + SetMoveSpeed(3.0); + PlayAnim("critical", ANIM_RUN); + string CHARGE_DEST = GetEntityOrigin(GetOwner()); + CHARGE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, CHARGE_YAW, 0), Vector3(0, 4000, 0)); + SetMoveDest(CHARGE_DEST); + charge_scan_loop(); + ScheduleDelayedEvent(5.0, "end_charge"); + } + + void end_charge() + { + if (!(IN_CHARGE)) return; + ClientEvent("update", "all", CHARGE_CL_FX, "effect_die"); + IN_CHARGE = 0; + SetCallback("touch", "disable"); + SetRoam(true); + SetAnimFrameRate(1.0); + SetMoveSpeed(1.0); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + npcatk_resume_ai(); + PlayAnim("critical", ANIM_ATTACK_SHORT); + } + + void charge_scan_loop() + { + if (!(IN_CHARGE)) return; + ScheduleDelayedEvent(0.1, "charge_scan_loop"); + string CHARGE_DEST = GetEntityOrigin(GetOwner()); + CHARGE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, CHARGE_YAW, 0), Vector3(0, 256, 0)); + SetMoveDest(CHARGE_DEST); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 300, 0)); + PlayAnim("once", ANIM_RUN); + string TRACE_START = GetEntityOrigin(GetOwner()); + TRACE_START += "z"; + string TRACE_END = TRACE_START; + string MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 100, 0)); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE != TRACE_END)) return; + end_charge(); + } + + void OnTouch(CBaseEntity@ other) override + { + LogDebug("game_touch GetEntityName(param1)"); + if (!(GetGameTime() > NEXT_TOUCH_CHECK)) return; + NEXT_TOUCH_CHECK = GetGameTime(); + NEXT_TOUCH_CHECK += 0.1; + string TARG_ORG = GetEntityOrigin(param1); + string MY_ORG = GetEntityOrigin(GetOwner()); + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 2000, 400))); + DoDamage(param1, 110, DMG_CHARGE, 1.0, "blunt"); + } + + void poison_burst() + { + PlayAnim("critical", "grab_fling"); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + string BURST_ORG = GetEntityOrigin(GetOwner()); + BURST_ORG += "z"; + ClientEvent("new", "all", "effects/sfx_poison_burst", BURST_ORG, 196, 0); + BURST_TARGS = FindEntitiesInSphere("enemy", 196); + if (!(BURST_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + poison_burst_affect_targets(); + } + } + + void poison_burst_affect_targets() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 2000, 400))); + ApplyEffect(CUR_TARG, "effects/poison_spore", 5.0, GetEntityIndex(GetOwner()), DOT_POISON_BURST); + } + + void set_hunderswamp_north_spec() + { + LogDebug("set_hunderswamp_north_spec"); + DROP_HUNDERSWAMP_CHEST = 1; + SetRace("wildanimal"); + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_archer.as b/scripts/angelscript/monsters/anim_archer.as new file mode 100644 index 00000000..5ecc53d5 --- /dev/null +++ b/scripts/angelscript/monsters/anim_archer.as @@ -0,0 +1,247 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class AnimArcher : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + string AS_ATTACKING; + int ATTACK_CONE_OF_FIRE; + int ATTACK_DELAY; + int ATTACK_RANGE; + int ATTACK_SPEED; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DROPS_CONTAINER; + int DROP_GOLD; + int DROP_GOLD_AMT; + int FIN_EXP; + float FREQ_BOW; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int I_AM_FOUR; + int I_AM_ONE; + int I_AM_THREE; + int I_AM_TURNABLE; + int I_AM_TWO; + string LAST_ENEMY; + int MOVE_RANGE; + string NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BOW; + string SOUND_DEATH; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SPAWNER; + + AnimArcher() + { + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + FREQ_BOW = 2.0; + FIN_EXP = 45; + NPC_MUST_SEE_TARGET = 1; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_HIT = "body/armour3.wav"; + SOUND_HIT2 = "body/armour2.wav"; + SOUND_HIT3 = "body/armour1.wav"; + SOUND_PAIN = "body/armour1.wav"; + SOUND_ATTACK1 = "none"; + SOUND_ATTACK2 = "none"; + SOUND_ATTACK3 = "none"; + SOUND_DEATH = "none"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die"; + SOUND_BOW = "weapons/bow/bow.wav"; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 25); + NPC_GIVE_EXP = FIN_EXP; + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_silver"; + ANIM_ATTACK = "shootorcbow"; + AIM_RATIO = 50; + ARROW_DAMAGE_LOW = 12; + ARROW_DAMAGE_HIGH = 15; + MOVE_RANGE = 400; + ATTACK_RANGE = 60; + ATTACK_SPEED = 1000; + ATTACK_CONE_OF_FIRE = 2; + I_AM_TURNABLE = 0; + } + + void OnSpawn() override + { + SetName("Animated armor"); + SetRoam(true); + SetRace("demon"); + SetWidth(40); + SetHeight(90); + SetHealth(200); + SetStepSize(16); + SetModel("monsters/animarmor.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetBloodType("none"); + SetDamageResistance("all", 0.9); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 3.0); + SetDamageResistance("lightning", 1.2); + SetModelBody(1, 1); + SetModelBody(2, 3); + } + + void npc_targetsighted() + { + if (GetEntityRange(param1) < ATTACK_SPEED) + { + if (!(ATTACK_DELAY)) + { + } + if ((false)) + { + } + do_attack(); + } + string LASTSEEN_ENEMY = GetEntityIndex(m_hLastSeen); + if (!(LASTSEEN_ENEMY != LAST_ENEMY)) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_ATTACK2, 5); + LAST_ENEMY = LASTSEEN_ENEMY; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 1.0; + } + + void reset_attack_delay() + { + ATTACK_DELAY = 0; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {"game.sound.maxvol", SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(ATTACK_PUSH != "ATTACK_PUSH")) return; + if (!(ATTACK_PUSH != "none")) return; + AddVelocity(m_hLastStruckByMe, ATTACK_PUSH); + } + + void OnFlinch() + { + PlayAnim("critical", "flinch"); + } + + void retaliate() + { + if (!(RandomInt(1, 3) == 1)) return; + SetMoveDest(m_hLastStruck); + LookAt(GetOwner()); + hunt_look(); + } + + void shoot_arrow() + { + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + float LCL_ATKDMG = Random(ARROW_DAMAGE_LOW, ARROW_DAMAGE_HIGH); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 3), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + SetModelBody(3, 0); + EmitSound(GetOwner(), 2, SOUND_BOW, 10); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + } + + void grab_arrow() + { + SetModelBody(3, 1); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + } + + void game_dynamically_created() + { + SPAWNER = param1; + } + + void two_was_summoned() + { + SetGlobalVar("ONE_IS_DEAD", 0); + I_AM_ONE = 1; + SetGlobalVar("TWO_IS_DEAD", 0); + I_AM_TWO = 1; + } + + void three_was_summoned() + { + SetGlobalVar("THREE_IS_DEAD", 0); + I_AM_THREE = 1; + } + + void four_was_summoned() + { + SetGlobalVar("FOUR_IS_DEAD", 0); + I_AM_FOUR = 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (I_AM_ONE == 1) + { + SetGlobalVar("ONE_IS_DEAD", 1); + } + if (I_AM_TWO == 1) + { + SetGlobalVar("TWO_IS_DEAD", 1); + } + if (I_AM_THREE == 1) + { + SetGlobalVar("THREE_IS_DEAD", 1); + } + if (I_AM_FOUR == 1) + { + SetGlobalVar("FOUR_IS_DEAD", 1); + } + SetModelBody(2, 0); + SetModelBody(3, 0); + SetModelBody(4, 0); + CallExternal(SPAWNER, "undead_died"); + } + + void do_attack() + { + AS_ATTACKING = GetGameTime(); + ATTACK_DELAY = 1; + FREQ_BOW("reset_attack_delay"); + PlayAnim("once", ANIM_ATTACK); + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_archer_hard.as b/scripts/angelscript/monsters/anim_archer_hard.as new file mode 100644 index 00000000..2ccd6a5e --- /dev/null +++ b/scripts/angelscript/monsters/anim_archer_hard.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/anim_archer_hard_random.as" + +namespace MS +{ + +class AnimArcherHard : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/anim_archer_hard_fire.as b/scripts/angelscript/monsters/anim_archer_hard_fire.as new file mode 100644 index 00000000..bad426ee --- /dev/null +++ b/scripts/angelscript/monsters/anim_archer_hard_fire.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_archer_hard_random.as" + +namespace MS +{ + +class AnimArcherHardFire : CGameScript +{ + int ARMOR_TYPE; + + AnimArcherHardFire() + { + ARMOR_TYPE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_archer_hard_frost.as b/scripts/angelscript/monsters/anim_archer_hard_frost.as new file mode 100644 index 00000000..532e4b11 --- /dev/null +++ b/scripts/angelscript/monsters/anim_archer_hard_frost.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_archer_hard_random.as" + +namespace MS +{ + +class AnimArcherHardFrost : CGameScript +{ + int ARMOR_TYPE; + + AnimArcherHardFrost() + { + ARMOR_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_archer_hard_ice.as b/scripts/angelscript/monsters/anim_archer_hard_ice.as new file mode 100644 index 00000000..e8c2fcd8 --- /dev/null +++ b/scripts/angelscript/monsters/anim_archer_hard_ice.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_archer_hard_random.as" + +namespace MS +{ + +class AnimArcherHardIce : CGameScript +{ + int ARMOR_TYPE; + + AnimArcherHardIce() + { + ARMOR_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_archer_hard_lightning.as b/scripts/angelscript/monsters/anim_archer_hard_lightning.as new file mode 100644 index 00000000..2e0be451 --- /dev/null +++ b/scripts/angelscript/monsters/anim_archer_hard_lightning.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_archer_hard_random.as" + +namespace MS +{ + +class AnimArcherHardLightning : CGameScript +{ + int ARMOR_TYPE; + + AnimArcherHardLightning() + { + ARMOR_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_archer_hard_poison.as b/scripts/angelscript/monsters/anim_archer_hard_poison.as new file mode 100644 index 00000000..74fcf061 --- /dev/null +++ b/scripts/angelscript/monsters/anim_archer_hard_poison.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_archer_hard_random.as" + +namespace MS +{ + +class AnimArcherHardPoison : CGameScript +{ + int ARMOR_TYPE; + + AnimArcherHardPoison() + { + ARMOR_TYPE = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_archer_hard_random.as b/scripts/angelscript/monsters/anim_archer_hard_random.as new file mode 100644 index 00000000..698f1d1e --- /dev/null +++ b/scripts/angelscript/monsters/anim_archer_hard_random.as @@ -0,0 +1,255 @@ +#pragma context server + +#include "monsters/anim_archer.as" + +namespace MS +{ + +class AnimArcherHardRandom : CGameScript +{ + string ARMOR_TYPE; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + int ARROW_MISS_COUNT; + string AS_ATTACKING; + string CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + string DAMAGE_TYPE; + string DROPS_CONTAINER; + int FIN_EXP; + int FLIGHT_STUCK; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + string LIGHT_COLOR; + int LIGHT_RAD; + int MOVE_RANGE; + string MY_LIGHT_SCRIPT; + int STUCK_SENSITIVITY; + + AnimArcherHardRandom() + { + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + LIGHT_RAD = 64; + STUCK_SENSITIVITY = 10; + MOVE_RANGE = 300; + FIN_EXP = 320; + Precache("monsters/animarmor_fly.mdl"); + ARROW_DAMAGE_LOW = 30; + ARROW_DAMAGE_HIGH = 45; + } + + void OnRepeatTimer() + { + SetRepeatDelay(10.0); + Effect("glow", GetOwner(), LIGHT_COLOR, 64, -1, 0); + string GRND_LEVEL = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + string MY_Z = (GetMonsterProperty("origin")).z; + if (GRND_LEVEL >= MY_Z) + { + string DIST_DIFF = GRND_LEVEL; + DIST_DIFF -= MY_Z; + } + if (GRND_LEVEL < MY_Z) + { + string DIST_DIFF = MY_Z; + DIST_DIFF -= GRND_LEVEL; + } + if (DIST_DIFF < 32) + { + AddVelocity(GetOwner(), Vector3(0, 0, 110)); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string TRACE_START = GetMonsterProperty("origin"); + string TRACE_END = GetMonsterProperty("origin"); + TRACE_END += "z"; + string FIND_CEILING = TraceLine(TRACE_START, TRACE_END); + string CEIL_Z = (FIND_CEILING).z; + string SKY_Z = /* TODO: $get_sky_height */ $get_sky_height(GetMonsterProperty("origin")); + if (SKY_Z != "none") + { + if (SKY_Z < CEIL_Z) + { + } + string CEIL_Z = "equals"; + } + if (CEIL_Z >= MY_Z) + { + string DIST_DIFF = CEIL_Z; + DIST_DIFF -= MY_Z; + } + if (CEIL_Z < MY_Z) + { + string DIST_DIFF = MY_Z; + DIST_DIFF -= CEIL_Z; + } + if (DIST_DIFF < 32) + { + AddVelocity(GetOwner(), Vector3(0, 0, -110)); + } + } + + void OnSpawn() override + { + SetRoam(true); + SetRace("demon"); + SetWidth(64); + SetHeight(64); + SetHealth(500); + SetModel("monsters/animarmor_fly.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(8); + SetBloodType("none"); + SetFly(true); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 2.0); + SetModelBody(1, 1); + SetModelBody(2, 3); + ScheduleDelayedEvent(0.1, "select_armor"); + ARROW_MISS_COUNT = 0; + } + + void select_armor() + { + if (ARMOR_TYPE == "ARMOR_TYPE") + { + ARMOR_TYPE = RandomInt(1, 4); + } + if (ARMOR_TYPE == 1) + { + SetName("Animated Archer of Flame"); + DAMAGE_TYPE = "fire"; + SetDamageResistance("lightning", 1.2); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 2.0); + LIGHT_COLOR = Vector3(255, 0, 0); + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_fire"; + } + if (ARMOR_TYPE == 2) + { + SetName("Animated Archer of Thunder"); + DAMAGE_TYPE = "lightning"; + SetDamageResistance("lightning", 0.0); + SetDamageResistance("acid", 2.0); + LIGHT_COLOR = Vector3(255, 255, 0); + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_lightning"; + } + if (ARMOR_TYPE == 3) + { + SetName("Animated Archer of Frost"); + DAMAGE_TYPE = "cold"; + SetDamageResistance("fire", 2.0); + SetDamageResistance("lightning", 1.2); + SetDamageResistance("cold", 0.0); + LIGHT_COLOR = Vector3(200, 200, 255); + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_frost"; + } + if (ARMOR_TYPE == 4) + { + SetName("Animated Archer of Venom"); + DAMAGE_TYPE = "poison"; + SetDamageResistance("lightning", 2.5); + LIGHT_COLOR = Vector3(0, 255, 0); + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_gpoison"; + } + Effect("glow", GetOwner(), LIGHT_COLOR, 64, -1, 0); + string GRND_LEVEL = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + string MY_Z = (GetMonsterProperty("origin")).z; + if (/* TODO: $dest */ $dest(GRND_LEVEL, MY_Z) < 32) + { + AddVelocity(GetOwner(), Vector3(0, 0, 110)); + } + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!((param3).findFirst("pierce") >= 0)) return; + ARROW_MISS_COUNT = 0; + if (DAMAGE_TYPE == "fire") + { + ApplyEffect(param1, "effects/dot_fire", 30, GetEntityIndex(GetOwner()), RandomInt(5, 12)); + } + if (DAMAGE_TYPE == "poison") + { + ApplyEffect(param1, "effects/dot_poison", 30, GetEntityIndex(GetOwner()), RandomInt(5, 12)); + } + if (DAMAGE_TYPE == "cold") + { + ApplyEffect(param1, "effects/dot_cold", 10, GetEntityIndex(GetOwner()), RandomInt(5, 12)); + } + if (DAMAGE_TYPE == "lightning") + { + ApplyEffect(param1, "effects/dot_lightning", 10, GetEntityIndex(GetOwner()), RandomInt(5, 12)); + } + } + + void OnPostSpawn() override + { + ClientEvent("persist", "all", "monsters/lighted_cl", GetEntityIndex(GetOwner()), LIGHT_COLOR, LIGHT_RAD); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + ClientEvent("update", "all", MY_LIGHT_SCRIPT, "remove_me"); + } + + void bf_agrofly_boost() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, BF_BOOST_SPEED, 150)); + } + + void bf_agrofly_loop() + { + if (!(IsEntityAlive(HUNT_LASTTARGET))) return; + if ((false)) return; + FLIGHT_STUCK = 8; + } + + void chicken_run() + { + SetMoveSpeed(2.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -110, 120)); + } + + void chicken_end() + { + SetMoveSpeed(1.0); + } + + void do_attack() + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + + void shoot_arrow() + { + ARROW_MISS_COUNT += 1; + if (!(ARROW_MISS_COUNT > 3)) return; + chicken_run(2.0); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + } + + void npc_targetsighted() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 1.0; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_archer_hard_thunder.as b/scripts/angelscript/monsters/anim_archer_hard_thunder.as new file mode 100644 index 00000000..008a019f --- /dev/null +++ b/scripts/angelscript/monsters/anim_archer_hard_thunder.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_archer_hard_random.as" + +namespace MS +{ + +class AnimArcherHardThunder : CGameScript +{ + int ARMOR_TYPE; + + AnimArcherHardThunder() + { + ARMOR_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior.as b/scripts/angelscript/monsters/anim_warrior.as new file mode 100644 index 00000000..eb60cced --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior.as @@ -0,0 +1,175 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class AnimWarrior : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_AMT; + int HUNT_AGRO; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int I_AM_TURNABLE; + string LAST_ENEMY; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SPAWNER; + + AnimWarrior() + { + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_HIT = "body/armour3.wav"; + SOUND_HIT2 = "body/armour2.wav"; + SOUND_HIT3 = "body/armour1.wav"; + SOUND_PAIN = "body/armour1.wav"; + SOUND_ATTACK1 = "none"; + SOUND_ATTACK2 = "none"; + SOUND_ATTACK3 = "none"; + SOUND_DEATH = "none"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_HEAR = 1; + CAN_FLEE = 0; + CAN_FLINCH = 0; + LAST_ENEMY = "NONE"; + MOVE_RANGE = 54; + ATTACK_RANGE = 82; + ATTACK_HITRANGE = 128; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(20, 40); + NPC_GIVE_EXP = 65; + ANIM_ATTACK = "battleaxe_swing1_L"; + ATTACK_ACCURACY = 0.85; + ATTACK_DMG_LOW = 15; + ATTACK_DMG_HIGH = 25; + IMMUNE_VAMPIRE = 1; + I_AM_TURNABLE = 0; + } + + void OnSpawn() override + { + SetName("Animated armor"); + SetRoam(true); + SetRace("demon"); + SetBloodType("none"); + SetWidth(40); + SetHealth(275); + SetHeight(90); + SetModel("monsters/animarmor.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetStepSize(16); + SetDamageResistance("all", 0.9); + SetDamageResistance("holy", 3.0); + SetDamageResistance("lightning", 2.0); + SetDamageResistance("poison", 0.0); + SetModelBody(2, 1); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + SetModelBody(4, 0); + CallExternal(SPAWNER, "undead_died"); + } + + void npc_targetsighted() + { + string LASTSEEN_ENEMY = GetEntityIndex(m_hLastSeen); + if (!(LASTSEEN_ENEMY != LAST_ENEMY)) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_ATTACK2, 5); + LAST_ENEMY = LASTSEEN_ENEMY; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {"game.sound.maxvol", SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(ATTACK_PUSH != "ATTACK_PUSH")) return; + if (!(ATTACK_PUSH != "none")) return; + AddVelocity(m_hLastStruckByMe, ATTACK_PUSH); + } + + void OnFlinch() + { + PlayAnim("critical", "flinch"); + } + + void retaliate() + { + if (!(RandomInt(1, 3) == 1)) return; + SetMoveDest(m_hLastStruck); + LookAt(GetOwner()); + hunt_look(); + } + + void swing_axe() + { + float L_DMG = Random(ATTACK_DMG_LOW, ATTACK_DMG_HIGH); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, L_DMG, ATTACK_ACCURACY, "slash"); + } + + void swing_sword() + { + swing_axe(); + } + + void game_dynamically_created() + { + SPAWNER = param1; + } + + void turn_undead() + { + string INC_HOLY_DMG = param1; + INC_HOLY_DMG /= 2; + string THE_EXCORCIST = param2; + string ME_ME = GetEntityIndex(GetOwner()); + DoDamage(ME_ME, "direct", INC_HOLY_DMG, 100, THE_EXCORCIST); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 512, 1, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior2.as b/scripts/angelscript/monsters/anim_warrior2.as new file mode 100644 index 00000000..e425660a --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior2.as @@ -0,0 +1,176 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class AnimWarrior2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_AMT; + int HUNT_AGRO; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int I_AM_TURNABLE; + string LAST_ENEMY; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SPAWNER; + + AnimWarrior2() + { + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_HIT = "body/armour3.wav"; + SOUND_HIT2 = "body/armour2.wav"; + SOUND_HIT3 = "body/armour1.wav"; + SOUND_PAIN = "body/armour1.wav"; + SOUND_ATTACK1 = "none"; + SOUND_ATTACK2 = "none"; + SOUND_ATTACK3 = "none"; + SOUND_DEATH = "none"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_HEAR = 1; + CAN_FLEE = 0; + CAN_FLINCH = 0; + LAST_ENEMY = "NONE"; + MOVE_RANGE = 54; + ATTACK_RANGE = 82; + ATTACK_HITRANGE = 128; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(20, 40); + NPC_GIVE_EXP = 65; + ANIM_ATTACK = "battleaxe_swing1_L"; + ATTACK_ACCURACY = 0.85; + ATTACK_DMG_LOW = 25; + ATTACK_DMG_HIGH = 35; + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + SetName("Infernal Animated Armor"); + SetRoam(true); + SetRace("demon"); + SetWidth(40); + SetHealth(400); + SetFOV(359); + SetHeight(90); + SetModel("monsters/animarmor.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetStepSize(16); + SetDamageResistance("all", 0.9); + SetDamageResistance("lightning", 2.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 2.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 3.0); + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 5); + SetModelBody(3, 0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + SetModelBody(4, 0); + CallExternal(SPAWNER, "undead_died"); + DEAD_GUARDS += 1; + if (DEAD_GUARDS > 1000) + { + SetGlobalVar("DEAD_GUARDS", 0); + } + } + + void npc_targetsighted() + { + string LASTSEEN_ENEMY = GetEntityIndex(m_hLastSeen); + if (!(LASTSEEN_ENEMY != LAST_ENEMY)) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_ATTACK2, 5); + LAST_ENEMY = LASTSEEN_ENEMY; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {"game.sound.maxvol", SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(ATTACK_PUSH != "ATTACK_PUSH")) return; + if (!(ATTACK_PUSH != "none")) return; + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 10, GetOwner(), RandomInt(5, 12)); + AddVelocity(m_hLastStruckByMe, ATTACK_PUSH); + } + + void OnFlinch() + { + PlayAnim("critical", "flinch"); + } + + void retaliate() + { + if (!(RandomInt(1, 3) == 1)) return; + SetMoveDest(m_hLastStruck); + LookAt(GetOwner()); + hunt_look(); + } + + void swing_axe() + { + float L_DMG = Random(ATTACK_DMG_LOW, ATTACK_DMG_HIGH); + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 10, GetOwner(), RandomInt(5, 12)); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, L_DMG, ATTACK_ACCURACY, "slash"); + } + + void swing_sword() + { + swing_axe(); + } + + void game_dynamically_created() + { + SPAWNER = param1; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior_hard.as b/scripts/angelscript/monsters/anim_warrior_hard.as new file mode 100644 index 00000000..8a036394 --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior_hard.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/anim_warrior_hard_random.as" + +namespace MS +{ + +class AnimWarriorHard : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior_hard_fire.as b/scripts/angelscript/monsters/anim_warrior_hard_fire.as new file mode 100644 index 00000000..3673a25a --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior_hard_fire.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_warrior_hard_random.as" + +namespace MS +{ + +class AnimWarriorHardFire : CGameScript +{ + int ARMOR_TYPE; + + AnimWarriorHardFire() + { + ARMOR_TYPE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior_hard_frost.as b/scripts/angelscript/monsters/anim_warrior_hard_frost.as new file mode 100644 index 00000000..94819990 --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior_hard_frost.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_warrior_hard_random.as" + +namespace MS +{ + +class AnimWarriorHardFrost : CGameScript +{ + int ARMOR_TYPE; + + AnimWarriorHardFrost() + { + ARMOR_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior_hard_ice.as b/scripts/angelscript/monsters/anim_warrior_hard_ice.as new file mode 100644 index 00000000..70879703 --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior_hard_ice.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_warrior_hard_random.as" + +namespace MS +{ + +class AnimWarriorHardIce : CGameScript +{ + int ARMOR_TYPE; + + AnimWarriorHardIce() + { + ARMOR_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior_hard_lightning.as b/scripts/angelscript/monsters/anim_warrior_hard_lightning.as new file mode 100644 index 00000000..bdc84aac --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior_hard_lightning.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_warrior_hard_random.as" + +namespace MS +{ + +class AnimWarriorHardLightning : CGameScript +{ + int ARMOR_TYPE; + + AnimWarriorHardLightning() + { + ARMOR_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior_hard_poison.as b/scripts/angelscript/monsters/anim_warrior_hard_poison.as new file mode 100644 index 00000000..a6712c87 --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior_hard_poison.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_warrior_hard_random.as" + +namespace MS +{ + +class AnimWarriorHardPoison : CGameScript +{ + int ARMOR_TYPE; + + AnimWarriorHardPoison() + { + ARMOR_TYPE = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior_hard_random.as b/scripts/angelscript/monsters/anim_warrior_hard_random.as new file mode 100644 index 00000000..8eefde45 --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior_hard_random.as @@ -0,0 +1,247 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class AnimWarriorHardRandom : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string ARMOR_TYPE; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + string DAMAGE_TYPE; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FLINCH_CHANCE; + float FLINCH_DELAY; + int IMMUNE_POISON; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + string LAST_ENEMY; + string LIGHT_COLOR; + int LIGHT_RAD; + int MOVE_RANGE; + string MY_LIGHT_SCRIPT; + int NPC_GIVE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + AnimWarriorHardRandom() + { + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_HIT = "body/armour3.wav"; + SOUND_HIT2 = "body/armour2.wav"; + SOUND_HIT3 = "body/armour1.wav"; + SOUND_PAIN = "body/armour1.wav"; + SOUND_ATTACK1 = "none"; + SOUND_ATTACK2 = "none"; + SOUND_ATTACK3 = "none"; + SOUND_DEATH = "none"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die"; + LAST_ENEMY = "NONE"; + MOVE_RANGE = 44; + ATTACK_RANGE = 82; + ATTACK_HITRANGE = 128; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(20, 40); + NPC_GIVE_EXP = 450; + FLINCH_CHANCE = 0.1; + FLINCH_DELAY = 20.0; + CAN_FLINCH = 1; + ATTACK_ACCURACY = 0.85; + ATTACK_DMG_LOW = 50; + ATTACK_DMG_HIGH = 100; + LIGHT_RAD = 64; + IMMUNE_VAMPIRE = 1; + IMMUNE_POISON = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(20.0); + Effect("glow", GetOwner(), LIGHT_COLOR, 64, -1, 0); + } + + void OnSpawn() override + { + SetModel("monsters/animarmor.mdl"); + SetWidth(40); + SetHeight(90); + SetBloodType("none"); + SetRoam(true); + SetRace("demon"); + SetHealth(800); + SetHearingSensitivity(4); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(0.1, "select_armor"); + } + + void select_armor() + { + if (ARMOR_TYPE == "ARMOR_TYPE") + { + ARMOR_TYPE = RandomInt(1, 4); + } + if (ARMOR_TYPE == 1) + { + SetName("Enchanted Armor of Fire"); + DAMAGE_TYPE = "fire"; + SetDamageResistance("all", 0.4); + SetDamageResistance("lightning", 1.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 2.5); + ANIM_ATTACK = "battleaxe_swing1_L"; + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 5); + LIGHT_COLOR = Vector3(255, 0, 0); + } + if (ARMOR_TYPE == 2) + { + SetName("Enchanted Armor of Thunder"); + DAMAGE_TYPE = "lightning"; + SetDamageResistance("all", 0.4); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("acid", 3.0); + SetDamageResistance("fire", 1.0); + SetDamageResistance("cold", 1.0); + ANIM_ATTACK = "swordswing1_L"; + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 4); + LIGHT_COLOR = Vector3(255, 255, 0); + } + if (ARMOR_TYPE == 3) + { + SetName("Enchanted Armor of Frost"); + DAMAGE_TYPE = "cold"; + SetDamageResistance("all", 0.4); + SetDamageResistance("lightning", 1.5); + SetDamageResistance("fire", 2.5); + SetDamageResistance("cold", 0.0); + ANIM_ATTACK = "battleaxe_swing1_L"; + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 1); + LIGHT_COLOR = Vector3(200, 200, 255); + } + if (ARMOR_TYPE == 4) + { + SetName("Enchanted Armor of Venom"); + DAMAGE_TYPE = "poison"; + SetDamageResistance("all", 0.4); + SetDamageResistance("lightning", 3.0); + ANIM_ATTACK = "swordswing1_L"; + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 4); + LIGHT_COLOR = Vector3(0, 255, 0); + } + Effect("glow", GetOwner(), LIGHT_COLOR, 64, -1, 0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + SetModelBody(4, 0); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void swing_dodamage() + { + if (DAMAGE_TYPE == "fire") + { + ApplyEffect(param2, "effects/dot_fire", 30, GetEntityIndex(GetOwner()), RandomInt(5, 12)); + } + if (DAMAGE_TYPE == "cold") + { + ApplyEffect(param2, "effects/dot_cold", 10, GetEntityIndex(GetOwner()), RandomInt(5, 12)); + } + if (DAMAGE_TYPE == "lightning") + { + ApplyEffect(param2, "effects/dot_lightning", 10, GetEntityIndex(GetOwner()), RandomInt(5, 12)); + } + if (DAMAGE_TYPE == "poison") + { + ApplyEffect(param2, "effects/dot_poison", 30, GetEntityIndex(GetOwner()), RandomInt(5, 12)); + } + if (!(ATTACK_PUSH != "ATTACK_PUSH")) return; + if (!(ATTACK_PUSH != "none")) return; + AddVelocity(m_hLastStruckByMe, ATTACK_PUSH); + } + + void swing_axe() + { + float L_DMG = Random(ATTACK_DMG_LOW, ATTACK_DMG_HIGH); + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, L_DMG, ATTACK_ACCURACY, GetOwner(), GetOwner(), "none", DAMAGE_TYPE, "dmgevent:swing"); + } + + void swing_sword() + { + swing_axe(); + } + + void OnFlinch() + { + ANIM_FLINCH = "flinch"; + if (param1 > 100) + { + ANIM_FLINCH = "flinch2"; + } + if (param1 > 200) + { + ANIM_FLINCH = "flinch3"; + } + } + + void OnPostSpawn() override + { + ClientEvent("persist", "all", "monsters/lighted_cl", GetEntityIndex(GetOwner()), LIGHT_COLOR, LIGHT_RAD); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + ClientEvent("update", "all", MY_LIGHT_SCRIPT, "remove_me"); + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior_hard_thunder.as b/scripts/angelscript/monsters/anim_warrior_hard_thunder.as new file mode 100644 index 00000000..b13bd7f7 --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior_hard_thunder.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_warrior_hard_random.as" + +namespace MS +{ + +class AnimWarriorHardThunder : CGameScript +{ + int ARMOR_TYPE; + + AnimWarriorHardThunder() + { + ARMOR_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/anim_warrior_hard_venom.as b/scripts/angelscript/monsters/anim_warrior_hard_venom.as new file mode 100644 index 00000000..c7fd0688 --- /dev/null +++ b/scripts/angelscript/monsters/anim_warrior_hard_venom.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/anim_warrior_hard_random.as" + +namespace MS +{ + +class AnimWarriorHardVenom : CGameScript +{ + int ARMOR_TYPE; + + AnimWarriorHardVenom() + { + ARMOR_TYPE = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/ant_fire_cl.as b/scripts/angelscript/monsters/ant_fire_cl.as new file mode 100644 index 00000000..ea908e92 --- /dev/null +++ b/scripts/angelscript/monsters/ant_fire_cl.as @@ -0,0 +1,75 @@ +#pragma context server + +namespace MS +{ + +class AntFireCl : CGameScript +{ + string CLOUD_ANG; + string FLAME_SPRITE; + int FX_ACTIVE; + string FX_DEATH_DELAY; + string FX_DURATION; + string FX_OWNER; + int N_FRAMES; + + AntFireCl() + { + FLAME_SPRITE = "explode1.spr"; + N_FRAMES = 9; + } + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + FX_DEATH_DELAY = param3; + FX_ACTIVE = 1; + breath_loop(); + FX_DURATION("end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + string L_DELAY_REMOVE = FX_DEATH_DELAY; + L_DELAY_REMOVE *= 2.0; + L_DELAY_REMOVE("remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void breath_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "breath_loop"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + CLOUD_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + ClientEffect("tempent", "sprite", FLAME_SPRITE, CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", FLAME_SPRITE, CLOUD_ORG, "setup_cloud"); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DEATH_DELAY); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", N_FRAME); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/ant_fire_flyer.as b/scripts/angelscript/monsters/ant_fire_flyer.as new file mode 100644 index 00000000..7a1218c0 --- /dev/null +++ b/scripts/angelscript/monsters/ant_fire_flyer.as @@ -0,0 +1,337 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_jumper.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class AntFireFlyer : CGameScript +{ + string ANIM_2HOVER; + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + string ANIM_DEATH; + string ANIM_HOVER; + string ANIM_HOVER_BITE; + string ANIM_HOVER_BREATH; + string ANIM_IDLE; + string ANIM_LAND; + string ANIM_RUN; + string ANIM_WALK; + string ANIM_WALK1; + string ANIM_WALK2; + int ANT_AM_FLYING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BREATH_ON; + string BREATH_TARG; + string BREATH_TARGETS; + string CL_BREATH_IDX; + int DID_INTRO; + int DMG_BITE; + string DODGE_IDX; + int DOT_FIRE; + float FREQ_BREATH; + float FREQ_BUZZ; + float FREQ_DODGE; + int MOVE_RANGE; + string NEXT_BREATH; + string NEXT_DODGE; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + int NPC_JUMPER; + int NPC_PROPELL_SUSPEND; + string SCAN_POINT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BREATH; + string SOUND_DEATH; + string SOUND_FLY_LOOP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + + AntFireFlyer() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_RUN = "walk"; + ANIM_DEATH = "anim_hover_death"; + NPC_JUMPER = 1; + ANIM_HOVER = "anim_hover"; + ANIM_2HOVER = "anim_2hover"; + ANIM_LAND = "anim_land"; + ANIM_HOVER_BREATH = "anim_hover_breath"; + ANIM_HOVER_BITE = "anim_hover_shoot"; + ANIM_WALK1 = "walk"; + ANIM_WALK2 = "walk2"; + ANIM_ATTACK1 = "attack"; + ANIM_ATTACK2 = "attack2"; + NPC_GIVE_EXP = 150; + NPC_ALLY_RESPONSE_RANGE = 1024; + FREQ_BREATH = Random(5.0, 10.0); + FREQ_BUZZ = 4.45; + FREQ_DODGE = 1.0; + DMG_BITE = 50; + DOT_FIRE = 10; + ATTACK_MOVERANGE = 192; + MOVE_RANGE = 192; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 100; + SOUND_FLY_LOOP = "monsters/beetle/fly1_noloop.wav"; + SOUND_PAIN1 = "monsters/beetle/pain1.wav"; + SOUND_PAIN2 = "monsters/beetle/pain2.wav"; + SOUND_STRUCK1 = "monsters/beetle/shell_impact1.wav"; + SOUND_STRUCK2 = "monsters/beetle/shell_impact2.wav"; + SOUND_STRUCK3 = "monsters/beetle/shell_impact3.wav"; + SOUND_STRUCK4 = "monsters/beetle/shell_impact4.wav"; + SOUND_ATTACK1 = "monsters/beetle/attack_single1.wav"; + SOUND_ATTACK2 = "monsters/beetle/attack_single2.wav"; + SOUND_ATTACK3 = "monsters/beetle/attack_single3.wav"; + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + SOUND_DEATH = "monsters/beetle/pain2.wav"; + NPC_HACKED_MOVE_SPEED = 0; + } + + void OnSpawn() override + { + SetName("Elite Fire Ant Warrior"); + SetModel("monsters/ant_size2.mdl"); + SetWidth(32); + SetHeight(64); + SetBloodType("green"); + SetRace("ant_red"); + SetHealth(500); + SetDamageResistance("pierce", 1.25); + SetRoam(false); + SetHearingSensitivity(5); + SetModelBody(1, 1); + SetDamageResistance("cold", 1.25); + SetDamageResistance("fire", 0.5); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + + void npc_targetsighted() + { + if ((DID_INTRO)) return; + SetMoveAnim(ANIM_HOVER); + SetIdleAnim(ANIM_HOVER); + ANIM_WALK = ANIM_HOVER; + ANIM_RUN = ANIM_HOVER; + ANIM_IDLE = ANIM_HOVER; + PlayAnim("critical", ANIM_2HOVER); + DID_INTRO = 1; + ANT_AM_FLYING = 1; + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += 3.0; + NPC_PROPELL_SUSPEND = 1; + NPC_HACKED_MOVE_SPEED = 0; + } + + void my_target_died() + { + ANT_AM_FLYING = 0; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_IDLE = "idle"; + PlayAnim("critical", ANIM_LAND); + DID_INTRO = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if ((ANT_AM_FLYING)) + { + NPC_PROPELL_SUSPEND = 0; + if (NPC_HACKED_MOVE_SPEED < 300) + { + if (GetEntityRange(m_hAttackTarget) > ATTACK_MOVERANGE) + { + NPC_HACKED_MOVE_SPEED += 10; + } + else + { + if (GetEntityRange(m_hAttackTarget) <= ATTACK_MOVERANGE) + { + } + if (NPC_HACKED_MOVE_SPEED > 0) + { + } + NPC_HACKED_MOVE_SPEED -= 1; + } + } + if (GetGameTime() > NEXT_BUZZ_SOUND) + { + NEXT_BUZZ_SOUND = GetGameTime(); + NEXT_BUZZ_SOUND += FREQ_BUZZ; + // svplaysound: svplaysound 2 10 SOUND_FLY_LOOP + EmitSound(2, 10, SOUND_FLY_LOOP); + } + ANIM_ATTACK = ANIM_HOVER_BITE; + if (GetGameTime() > NEXT_BREATH) + { + } + if (GetEntityRange(m_hAttackTarget) < 256) + { + } + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + PlayAnim("critical", "anim_hover_breath"); + } + else + { + NPC_PROPELL_SUSPEND = 1; + NPC_HACKED_MOVE_SPEED = 0; + } + } + + void game_stopmoving() + { + NPC_HACKED_MOVE_SPEED = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 10); + } + + void frame_breath_start() + { + SetAnimMoveSpeed(0); + NPC_PROPELL_SUSPEND = 1; + NPC_HACKED_MOVE_SPEED = 0; + NPC_JUMPER = 0; + SetMoveDest(BREATH_TARG); + BREATH_TARG = m_hAttackTarget; + npcatk_suspend_ai(3.0); + BREATH_ON = 1; + EmitSound(GetOwner(), 0, SOUND_BREATH, 10); + ClientEvent("new", "all", "monsters/ant_fire_cl", GetEntityIndex(GetOwner()), 5.0, 0.5); + CL_BREATH_IDX = "game.script.last_sent_id"; + SCAN_POINT = /* TODO: $relpos */ $relpos(0, 64, 32); + breath_loop(); + } + + void breath_loop() + { + if (!(BREATH_ON)) return; + SetMoveDest(SCAN_POINT); + ScheduleDelayedEvent(0.5, "breath_loop"); + BREATH_TARGETS = FindEntitiesInSphere("enemy", 196); + if (!(BREATH_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(BREATH_TARGETS, ";"); i++) + { + breath_affect_targets(); + } + } + + void breath_affect_targets() + { + string CUR_TARG = GetToken(BREATH_TARGETS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARG) < 384)) return; + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = TARG_ORG; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + if (!(GetEntityProperty(CUR_TARG, "haseffect"))) + { + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + string PUSH_RATIO = GetEntityRange(CUR_TARG); + if (PUSH_RATIO < 256) + { + PUSH_RATIO /= 256; + string PUSH_RATIO = /* TODO: $ratio */ $ratio(PUSH_RATIO, 2000, 200); + } + else + { + int PUSH_RATIO = 200; + } + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, PUSH_RATIO, 110)); + } + + void frame_breath_end() + { + NPC_PROPELL_SUSPEND = 0; + NPC_JUMPER = 1; + BREATH_ON = 0; + npcatk_resume_ai(); + ClientEvent("update", "all", CL_BREATH_IDX, "end_fx"); + } + + void frame_shoot() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, 0.9, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bite"); + } + + void bite_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + if ((GetEntityProperty(param2, "haseffect"))) return; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((BREATH_ON)) + { + frame_breath_end(); + } + if ((ANT_ANT_AM_FLYING)) + { + // svplaysound: svplaysound 2 0 SOUND_FLY_LOOP + EmitSound(2, 0, SOUND_FLY_LOOP); + ANIM_DEATH = "anim_hover_death"; + } + else + { + ANIM_DEATH = "die"; + } + } + + void OnDamage(int damage) override + { + if (!(ANT_AM_FLYING)) return; + if (!(param2 < GetEntityHealth(GetOwner()))) return; + if ((param3).findFirst("effect") >= 0) + { + int L_IS_DOT = 1; + } + if ((L_IS_DOT)) return; + if (!(GetGameTime() > NEXT_DODGE)) return; + NEXT_DODGE = GetGameTime(); + NEXT_DODGE += FREQ_DODGE; + DODGE_IDX += 1; + if (DODGE_IDX == 1) + { + int RND_LR = 400; + } + if (DODGE_IDX == 2) + { + int RND_LR = -400; + DODGE_IDX = 0; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_LR, -200, 0)); + } + +} + +} diff --git a/scripts/angelscript/monsters/ant_fire_warrior.as b/scripts/angelscript/monsters/ant_fire_warrior.as new file mode 100644 index 00000000..259d8185 --- /dev/null +++ b/scripts/angelscript/monsters/ant_fire_warrior.as @@ -0,0 +1,254 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class AntFireWarrior : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string ANIM_WALK1; + string ANIM_WALK2; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BREATH_ON; + string BREATH_TARG; + string BREATH_TARGETS; + string CL_BREATH_IDX; + int DID_INTRO; + int DMG_BITE; + int DOT_FIRE; + float FREQ_BREATH; + float FREQ_SWITCH_ANIM; + int MOVE_RANGE; + string NEXT_BREATH; + string NEXT_SWITCH_ANIM; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_GIVE_EXP; + string SCAN_POINT; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_BREATH; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + + AntFireWarrior() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_RUN = "walk"; + ANIM_DEATH = "die"; + ANIM_WALK1 = "walk"; + ANIM_WALK2 = "walk2"; + ANIM_ATTACK1 = "attack"; + ANIM_ATTACK2 = "attack2"; + NPC_GIVE_EXP = 150; + NPC_ALLY_RESPONSE_RANGE = 1024; + FREQ_SWITCH_ANIM = Random(5.0, 15.0); + FREQ_BREATH = Random(20.0, 40.0); + DMG_BITE = 50; + DOT_FIRE = 10; + ATTACK_RANGE = 32; + MOVE_RANGE = 16; + ATTACK_MOVERANGE = 16; + ATTACK_HITRANGE = 64; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + SOUND_ATTACK1 = "monsters/spider/spiderhiss2.wav"; + SOUND_ATTACK2 = "monsters/spider/spiderhiss.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(3.6); + if ((IsEntityAlive(GetOwner()))) + { + } + // svplaysound: svplaysound 4 5 SOUND_IDLE1 + EmitSound(4, 5, SOUND_IDLE1); + } + + void OnSpawn() override + { + SetName("Fire Ant Warrior"); + SetModel("monsters/ant_size2.mdl"); + SetWidth(32); + SetHeight(16); + SetBloodType("green"); + SetRace("ant_red"); + SetHealth(500); + SetDamageResistance("pierce", 1.25); + SetRoam(true); + SetHearingSensitivity(5); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetDamageResistance("cold", 1.25); + SetDamageResistance("fire", 0.5); + SetAnimMoveSpeed(2.0); + SetMoveSpeed(2.0); + } + + void OnPostSpawn() override + { + if (RandomInt(1, 2) == 1) + { + ANIM_ATTACK = ANIM_ATTACK1; + } + else + { + ANIM_ATTACK = ANIM_ATTACK2; + } + } + + void frame_attack() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, 0.9, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bite"); + if (RandomInt(1, 2) == 1) + { + ANIM_ATTACK = ANIM_ATTACK1; + } + else + { + ANIM_ATTACK = ANIM_ATTACK2; + } + } + + void bite_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + if ((GetEntityProperty(param2, "haseffect"))) return; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + + void npc_targetsighted() + { + if ((DID_INTRO)) return; + DID_INTRO = 1; + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + } + + void my_target_died() + { + DID_INTRO = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) return; + if (m_hAttackTarget != "unset") + { + if (GetGameTime() > NEXT_BREATH) + { + } + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + do_breath(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetGameTime() > NEXT_SWITCH_ANIM)) return; + NEXT_SWITCH_ANIM = GetGameTime(); + NEXT_SWITCH_ANIM += FREQ_SWITCH_ANIM; + if (RandomInt(1, 2) == 1) + { + ANIM_RUN = ANIM_WALK1; + ANIM_WALK = ANIM_WALK1; + SetMoveAnim(ANIM_RUN); + } + else + { + ANIM_RUN = ANIM_WALK2; + ANIM_WALK = ANIM_WALK2; + SetMoveAnim(ANIM_RUN); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SOUND_PAIN, SOUND_PAIN + array sounds = {SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SOUND_PAIN, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((BREATH_ON)) + { + ClientEvent("update", "all", CL_BREATH_IDX, "end_fx"); + } + // svplaysound: svplaysound 4 0 SOUND_IDLE1 + EmitSound(4, 0, SOUND_IDLE1); + } + + void do_breath() + { + SetMoveDest(BREATH_TARG); + BREATH_TARG = m_hAttackTarget; + npcatk_suspend_movement("attack2", 5.0); + npcatk_suspend_ai(5.0); + BREATH_ON = 1; + EmitSound(GetOwner(), 0, SOUND_BREATH, 10); + ClientEvent("new", "all", "monsters/ant_fire_cl", GetEntityIndex(GetOwner()), 5.0, 0.25); + CL_BREATH_IDX = "game.script.last_sent_id"; + SCAN_POINT = /* TODO: $relpos */ $relpos(0, 64, 32); + breath_loop(); + ScheduleDelayedEvent(5.0, "breath_end"); + } + + void breath_loop() + { + if (!(BREATH_ON)) return; + SetMoveDest(SCAN_POINT); + ScheduleDelayedEvent(1.0, "breath_loop"); + BREATH_TARGETS = FindEntitiesInSphere("enemy", 128); + if (!(BREATH_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(BREATH_TARGETS, ";"); i++) + { + breath_affect_targets(); + } + } + + void breath_affect_targets() + { + string CUR_TARG = GetToken(BREATH_TARGETS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARG) < 256)) return; + if ((GetEntityProperty(CUR_TARG, "haseffect"))) return; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + + void breath_end() + { + BREATH_ON = 0; + npcatk_resume_ai(); + npcatk_resume_movement(); + } + +} + +} diff --git a/scripts/angelscript/monsters/ant_red_warrior.as b/scripts/angelscript/monsters/ant_red_warrior.as new file mode 100644 index 00000000..b5666417 --- /dev/null +++ b/scripts/angelscript/monsters/ant_red_warrior.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class AntRedWarrior : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string ANIM_WALK1; + string ANIM_WALK2; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DMG_BITE; + float FREQ_SWITCH_ANIM; + int MOVE_RANGE; + string NEXT_SWITCH_ANIM; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_GIVE_EXP; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + + AntRedWarrior() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_RUN = "walk"; + ANIM_DEATH = "die"; + ANIM_WALK1 = "walk"; + ANIM_WALK2 = "walk2"; + ANIM_ATTACK1 = "attack"; + ANIM_ATTACK2 = "attack2"; + NPC_GIVE_EXP = 100; + NPC_ALLY_RESPONSE_RANGE = 1024; + FREQ_SWITCH_ANIM = Random(5.0, 15.0); + DMG_BITE = 50; + ATTACK_RANGE = 32; + MOVE_RANGE = 16; + ATTACK_MOVERANGE = 16; + ATTACK_HITRANGE = 64; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SOUND_ATTACK1 = "monsters/spider/spiderhiss2.wav"; + SOUND_ATTACK2 = "monsters/spider/spiderhiss.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(3.6); + if ((IsEntityAlive(GetOwner()))) + { + } + // svplaysound: svplaysound 4 5 SOUND_IDLE1 + EmitSound(4, 5, SOUND_IDLE1); + } + + void OnSpawn() override + { + SetName("Giant Ant"); + SetModel("monsters/ant_size1.mdl"); + SetWidth(32); + SetHeight(16); + SetRace("ant_red"); + SetHealth(200); + SetDamageResistance("pierce", 1.25); + SetRoam(true); + SetHearingSensitivity(5); + SetAnimMoveSpeed(2.0); + SetMoveSpeed(2.0); + } + + void OnPostSpawn() override + { + if (RandomInt(1, 2) == 1) + { + ANIM_ATTACK = ANIM_ATTACK1; + } + else + { + ANIM_ATTACK = ANIM_ATTACK2; + } + } + + void frame_attack() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, 0.9, "pierce"); + if (RandomInt(1, 2) == 1) + { + ANIM_ATTACK = ANIM_ATTACK1; + } + else + { + ANIM_ATTACK = ANIM_ATTACK2; + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(GetGameTime() > NEXT_SWITCH_ANIM)) return; + NEXT_SWITCH_ANIM = GetGameTime(); + NEXT_SWITCH_ANIM += FREQ_SWITCH_ANIM; + if (RandomInt(1, 2) == 1) + { + ANIM_RUN = ANIM_WALK1; + ANIM_WALK = ANIM_WALK1; + SetMoveAnim(ANIM_RUN); + } + else + { + ANIM_RUN = ANIM_WALK2; + ANIM_WALK = ANIM_WALK2; + SetMoveAnim(ANIM_RUN); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SOUND_PAIN, SOUND_PAIN + array sounds = {SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SOUND_PAIN, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // svplaysound: svplaysound 4 0 SOUND_IDLE1 + EmitSound(4, 0, SOUND_IDLE1); + } + +} + +} diff --git a/scripts/angelscript/monsters/attack_hack.as b/scripts/angelscript/monsters/attack_hack.as new file mode 100644 index 00000000..199f6e1c --- /dev/null +++ b/scripts/angelscript/monsters/attack_hack.as @@ -0,0 +1,49 @@ +#pragma context server + +namespace MS +{ + +class AttackHack : CGameScript +{ + string ATTACK_COUNTER; + string ATTACK_DAMAGE; + string ATTACK_FREQUENCY; + + void npcatk_attackenemy() + { + if (ATTACK_DAMAGE == "ATTACK_DAMAGE") + { + ATTACK_DAMAGE = 5; + } + if (ATTACK_FREQUENCY == "ATTACK_FREQUENCY") + { + ATTACK_FREQUENCY = 10; + } + can_reach_nme(); + npc_attack(); + npc_selectattack(); + SetMoveDest(m_hLastSeen); + PlayAnim("once", ANIM_ATTACK); + ScheduleDelayedEvent(1, "do_stuff"); + ATTACK_COUNTER += 1; + if (ATTACK_COUNTER == ATTACK_FREQUENCY) + { + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + if (ATTACK_HACK_STUN == 1) + { + if (RandomInt(1, ATTACK_HACK_STUNCHANCE) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", 3, GetEntityIndex(GetOwner())); + } + } + ATTACK_COUNTER = 0; + } + } + + void do_stuff() + { + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit.as b/scripts/angelscript/monsters/bandit.as new file mode 100644 index 00000000..6a28f807 --- /dev/null +++ b/scripts/angelscript/monsters/bandit.as @@ -0,0 +1,469 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Bandit : CGameScript +{ + string ALLY_CHECK_ID; + string ANIM_AIM_SPELL; + string ANIM_ATTACK; + string ANIM_CAST_SPELL; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_PREP_SPELL; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + float ATTACK1_DAMAGE; + int ATTACK_COF; + string ATTACK_HITRANGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + string BANDIT_FLEE_DELAY; + string BD_COUNT; + int CAN_ATTACK; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + string CASTING_SPELL; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DROPS_CONTAINER; + string FIREBALL_DELAY; + float FIREBALL_FREQ; + int HUNT_AGRO; + string ICE_SHIELD_CHECK; + int IS_BUFFING; + int MOVE_RANGE; + int NO_STEP_ADJ; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + float RETALIATE_CHANGETARGET_CHANCE; + string SOUND_BOW; + string SOUND_PAIN; + string SOUND_PAIN2; + int SPELL_RANGE; + string SPELL_TARGET; + string WEAPON; + + Bandit() + { + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_random_lesser"; + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_PAIN2 = "player/armhit1.wav"; + SOUND_BOW = "weapons/bow/bow.wav"; + ANIM_IDLE = "idle"; + ANIM_RUN = "run"; + ANIM_WALK = "walk2"; + ANIM_DEATH = "die_simple"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_ATTACK = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_HEAR = 1; + NPC_GIVE_EXP = 60; + bowey(); + fistey(); + daggerey(); + swordey(); + axey(); + macey(); + magey(); + ATTACK_HITRANGE = ATTACK_RANGE; + ATTACK_HITRANGE *= 1.5; + NO_STEP_ADJ = 1; + FIREBALL_FREQ = 5.0; + SPELL_RANGE = 700; + ANIM_PREP_SPELL = "prepare_fireball"; + ANIM_AIM_SPELL = "aim_fireball_R"; + ANIM_CAST_SPELL = "throw_fireball_R"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(2.0); + if ((SUSPEND_AI)) + { + BD_COUNT += 1; + } + if (!(SUSPEND_AI)) + { + BD_COUNT = 0; + } + if (BD_COUNT > 10) + { + npcatk_resume_ai(); + } + } + + void OnSpawn() override + { + BD_COUNT = 0; + if (WEAPON == "WEAPON") + { + WEAPON = RandomInt(0, 6); + } + SetGold(RandomInt(13, 27)); + SetWidth(32); + SetHeight(92); + SetRace("rogue"); + SetDamageResistance("all", 0.7); + SetHearingSensitivity(3); + SetRoam(true); + SetModel("npc/rogue.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void bowey() + { + if (!(WEAPON == 0)) return; + SetName("Bandit Archer"); + SetHealth(130); + MOVE_RANGE = 300; + ATTACK_RANGE = 800; + ATTACK_SPEED = 1200; + ATTACK1_DAMAGE = Random(8.5, 12.0); + ATTACK_COF = 0; + ANIM_ATTACK = "shootbow"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 5); + DROPS_CONTAINER = 1; + NO_STUCK_CHECKS = 1; + } + + void daggerey() + { + if (!(WEAPON == 1)) return; + SetName("Bandit Rogue"); + SetHealth(130); + MOVE_RANGE = 50; + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = Random(8.5, 10.0); + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "swordjab1_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 1); + } + + void fistey() + { + if (!(WEAPON == 2)) return; + SetName("Bandit Martial Artist"); + SetHealth(160); + MOVE_RANGE = 50; + ATTACK_RANGE = 80; + ATTACK1_DAMAGE = Random(6.5, 8.0); + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "aim_punch1"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 0); + } + + void swordey() + { + if (!(WEAPON == 3)) return; + SetName("Bandit Swordsman"); + SetHealth(160); + MOVE_RANGE = 80; + ATTACK_RANGE = 120; + ATTACK1_DAMAGE = Random(8.5, 10.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "swordswing2_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 4); + } + + void axey() + { + if (!(WEAPON == 4)) return; + SetName("Bandit Axeman"); + SetHealth(200); + MOVE_RANGE = 80; + ATTACK_RANGE = 120; + ATTACK1_DAMAGE = Random(9.5, 11.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 3); + } + + void macey() + { + if (!(WEAPON == 5)) return; + SetName("Bandit Berserker"); + SetHealth(200); + MOVE_RANGE = 80; + ATTACK_RANGE = 130; + ATTACK1_DAMAGE = Random(9.5, 11.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 2); + } + + void magey() + { + if (!(WEAPON == 6)) return; + SetName("Bandit Mage"); + SetHealth(100); + MOVE_RANGE = 300; + ATTACK_RANGE = 32; + ATTACK1_DAMAGE = Random(20.0, 40.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "aim_punch1"; + CAN_FLINCH = 0; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 0); + ScheduleDelayedEvent(1.0, "scan_for_allies"); + CatchSpeech("debug_params", "debug"); + } + + void debug_params() + { + SetSayTextRange(1024); + SayText("Mov " + MOVE_RANGE); + } + + void attack() + { + if (WEAPON == 0) + { + SetAngles("add_view.pitch"); + AS_ATTACKING = GetGameTime(); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 2), "none", ATTACK_SPEED, ATTACK1_DAMAGE, ATTACK_COF, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + EmitSound(GetOwner(), SOUND_BOW); + } + else + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + } + + void attack_jab() + { + attack(); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + int L_DEATHANIM = RandomInt(0, 6); + if (L_DEATHANIM == 0) + { + ANIM_DEATH = "die_simple"; + } + if (L_DEATHANIM == 1) + { + ANIM_DEATH = "die_backwards1"; + } + if (L_DEATHANIM == 2) + { + ANIM_DEATH = "die_backwards"; + } + if (L_DEATHANIM == 3) + { + ANIM_DEATH = "die_forwards"; + } + if (L_DEATHANIM == 4) + { + ANIM_DEATH = "headshot"; + } + if (L_DEATHANIM == 5) + { + ANIM_DEATH = "die_spin"; + } + if (L_DEATHANIM == 6) + { + ANIM_DEATH = "gutshot"; + } + } + + void npc_targetsighted() + { + if (WEAPON == 0) + { + if (!(IS_FLEEING)) + { + } + if ((false)) + { + } + PlayAnim("once", ANIM_ATTACK); + } + if (WEAPON == 6) + { + if (!(IS_FLEEING)) + { + } + if (!(FIREBALL_DELAY)) + { + } + if (!(CASTING_SPELL)) + { + } + if (!(IS_BUFFING)) + { + } + FIREBALL_DELAY = 1; + FIREBALL_FREQ("reset_fireball_delay"); + if ((CanSee("enemy", SPELL_RANGE))) + { + } + string L_SPELL_TARGET = GetEntityIndex(m_hLastSeen); + spell_attack(L_SPELL_TARGET); + CASTING_SPELL = 1; + } + } + + void reset_fireball_delay() + { + FIREBALL_DELAY = 0; + } + + void spell_attack() + { + AS_ATTACKING = GetGameTime(); + EmitSound(GetOwner(), 0, "magic/fireball_powerup.wav", 10); + SPELL_TARGET = param1; + SetMoveDest(SPELL_TARGET); + PlayAnim("once", ANIM_PREP_SPELL); + ScheduleDelayedEvent(0.5, "spell_attack2"); + } + + void spell_attack2() + { + SetMoveDest(SPELL_TARGET); + PlayAnim("critical", ANIM_AIM_SPELL); + ScheduleDelayedEvent(0.5, "spell_attack3"); + } + + void spell_attack3() + { + SetMoveDest(SPELL_TARGET); + string TARG_ORG = GetEntityOrigin(SPELL_TARGET); + SetAngles("face_origin"); + ScheduleDelayedEvent(0.1, "straighten_out"); + EmitSound(GetOwner(), 0, "magic/fireball_strike.wav", 10); + PlayAnim("critical", ANIM_CAST_SPELL); + TossProjectile("proj_fire_dart", /* TODO: $relpos */ $relpos(0, 48, 2), SPELL_TARGET, 400, ATTACK1_DAMAGE, 5, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0); + CASTING_SPELL = 0; + } + + void straighten_out() + { + string MY_ANG = GetMonsterProperty("angles"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(SPELL_TARGET); + SetAngles("face"); + ScheduleDelayedEvent(1.0, "mage_reposition"); + } + + void mage_reposition() + { + if (GetEntityRange(HUNT_LASTTARGET) < SPELL_RANGE) + { + npcatk_flee(GetEntityIndex(HUNT_LASTTARGET), 700, 1.0); + } + if (GetEntityRange(HUNT_LASTTARGET) >= MOVE_RANGE) + { + chicken_run(1.0); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (WEAPON == 6) + { + if (!(BANDIT_FLEE_DELAY)) + { + } + BANDIT_FLEE_DELAY = 1; + ScheduleDelayedEvent(10.0, "reset_bandit_flee_delay"); + npcatk_flee(GetEntityIndex(m_hLastStruck), 2000, 5.0); + } + } + + void reset_bandit_flee_delay() + { + BANDIT_FLEE_DELAY = 0; + } + + void npcatk_ally_alert() + { + if ((SUSPEND_AI)) return; + if ((IsValidPlayer(param1))) + { + cycle_up("ally_hit_by_player"); + } + if (!(GetEntityIndex(param2) != GetEntityIndex(GetOwner()))) return; + if (!(WEAPON == 6)) return; + if ((IS_BUFFING)) return; + if (!(GetEntityRange(param2) < SPELL_RANGE)) return; + ALLY_CHECK_ID = GetEntityIndex(param2); + check_can_shield(); + } + + void check_can_shield() + { + if ((IS_BUFFING)) return; + if (!(CYCLED_UP)) return; + if (!(GetEntityRace(ALLY_CHECK_ID) == GetEntityRace(GetOwner()))) return; + ICE_SHIELD_CHECK = GetEntityProperty(ALLY_CHECK_ID, "haseffect"); + ScheduleDelayedEvent(0.1, "check_can_shield2"); + } + + void check_can_shield2() + { + AS_ATTACKING = GetGameTime(); + if (!(ICE_SHIELD_CHECK != 1)) return; + IS_BUFFING = 1; + PlayAnim("critical", ANIM_PREP_SPELL); + SetMoveDest(ALLY_CHECK_ID); + npcatk_suspend_ai(1.0); + ScheduleDelayedEvent(0.1, "shield_ally"); + } + + void shield_ally() + { + if (!(false)) return; + ScheduleDelayedEvent(0.5, "cast_shield"); + } + + void cast_shield() + { + IS_BUFFING = 0; + EmitSound(GetOwner(), 0, "magic/cast.wav", 10); + ApplyEffect(ALLY_CHECK_ID, "effects/iceshield", 20, GetEntityIndex(GetOwner()), 0.5); + } + + void scan_for_allies() + { + ScheduleDelayedEvent(0.7, "scan_for_allies"); + if (!(false)) return; + ALLY_CHECK_ID = GetEntityIndex(m_hLastSeen); + check_can_shield(m_hLastSeen); + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_archer.as b/scripts/angelscript/monsters/bandit_archer.as new file mode 100644 index 00000000..f380ebc7 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_archer.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit.as" + +namespace MS +{ + +class BanditArcher : CGameScript +{ + int WEAPON; + + BanditArcher() + { + WEAPON = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_axe.as b/scripts/angelscript/monsters/bandit_axe.as new file mode 100644 index 00000000..f8209259 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_axe.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit.as" + +namespace MS +{ + +class BanditAxe : CGameScript +{ + int WEAPON; + + BanditAxe() + { + WEAPON = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_boss.as b/scripts/angelscript/monsters/bandit_boss.as new file mode 100644 index 00000000..3ac36038 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_boss.as @@ -0,0 +1,1829 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class BanditBoss : CGameScript +{ + int AM_LEAPING; + string ANIM_ATTACK; + string ANIM_AXE_FAST; + string ANIM_AXE_SLOW; + string ANIM_BOW; + string ANIM_CAST; + string ANIM_DEATH; + string ANIM_DRINK; + string ANIM_FLINCH; + string ANIM_HOP; + string ANIM_JAB; + string ANIM_KICK_HIGH; + string ANIM_KICK_LOW; + string ANIM_LEAP; + string ANIM_MOVE_SLOW; + string ANIM_PARRY; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_SPELL; + string ANIM_SWING_FAST; + string ANIM_SWING_SLOW; + string ANIM_SWORD_FAST; + string ANIM_SWORD_SLOW; + string ANIM_WALK; + string ANIM_WALK_NORM; + int ARROW_SPEED; + int AS_ATK_VALUE; + string AS_ATTACKING; + string ATTACK_ANIMINDEX; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string AVOID_DELAY; + string BALL_DMG; + string BALL_SIZE; + string BALL_SPEED; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int BB_IN_ATTACK; + string BD_COUNT; + string BEAM_SPRITE; + string BOSS_TYPE; + int CAN_FLINCH; + int COLD_STRUCK; + int CYCLES_ON; + string DEMON_BLOOD; + string DEMON_NOHP_LOSS; + string DID_FIRST_POT; + string DID_SECOND_POT; + int DMG_ARROW; + int DMG_AXE_FAST; + int DMG_AXE_SLOW; + int DMG_BLIZ; + int DMG_BURN_DAGGER; + int DMG_BURN_MACE; + int DMG_DAGGER; + int DMG_FIRE_BALL; + int DMG_FLAME_BURST; + int DMG_KICK; + int DMG_MACE; + int DMG_NOVA_FAST; + int DMG_NOVA_SLOW; + int DMG_NOVA_STAB; + int DMG_SKULL; + int DMG_SWING_FAST; + int DMG_SWING_SLOW; + int DMG_SWORD_FAST; + int DMG_SWORD_JAB; + int DMG_SWORD_SLOW; + string DOING_NOVA; + int DOING_PULL; + int DRINKING_POT; + string DRINK_TYPE; + int ELEMENT_DMG_THRESH; + int ELEMENT_LIMIT; + int FAST_SWINGS; + int FIRE_STRUCK; + string FIRST_SPEC_POT_HEALTH; + int FLANK_DELAY; + string FLINCH_ANIM; + int FLINCH_CHANCE; + int FLINCH_DAMAGE_THRESHOLD; + int FREEZE_ATTACK; + string FREQ_ATTACK; + float FREQ_AVOID; + float FREQ_FLANK; + float FREQ_HEALTH; + int FREQ_INVIS; + int FREQ_KICK; + float FREQ_PULL; + float FREQ_SPECIAL; + float FREQ_TURBO; + float FREQ_VOLCANO; + string GLOW_LOOP_COLOR; + string GLOW_ON; + string HALF_HEALTH; + int HEALTH_AMMO; + string HEALTH_POT_DELAY; + string IN_RESIST; + int KICK_ATTACK; + string LEAP_TARGET; + int LEGAL_ACT; + int LIGHTNING_STRUCK; + string MELEE_HIT; + string MONSTER_MODEL; + int MOVE_RANGE; + string NEXT_ATTACK; + int NORM_ATTACK; + string NOVA_ATTACK; + int NOVA_PICK_ATK; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_FORCED_MOVEDEST; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int NPC_NO_MOVE; + string ORIG_ATTACK; + string ORIG_FREQ_ATTACK; + string ORIG_MOVE_RANGE; + string ORIG_WEAPON; + int POISON_STRUCK; + string POWER_ATTACK; + int PULL_DELAY; + string QUARTER_HEALTH; + int RESIST_AMMO; + string SCATTER_COUNT; + string SCATTER_SHOT; + string SOUND_BOW_SHOOT; + string SOUND_BOW_STRETCH; + string SOUND_DEATH; + string SOUND_LEAP; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_PARRY; + string SOUND_POWERUP; + string SOUND_PULL; + string SOUND_SATTACK; + string SOUND_SWING_FAST; + string SOUND_SWING_SLOW1; + string SOUND_SWING_SLOW2; + string SOUND_TAUNT1; + string SOUND_TAUNT2; + int SPECIAL_AMMO; + string SPEC_TYPE; + int STUN_ATTACK; + int SWEEP_KICK_DELAY; + string USED_COLD_POT; + string USED_FIRE_POT; + string USED_LIGHTNING_POT; + string USED_POISON_POT; + + BanditBoss() + { + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 0.25; + if (StringToLower(GetMapName()) == "the_keep") + { + NPC_IS_BOSS = 1; + } + ANIM_DRINK = "swordready1_R"; + ANIM_AXE_FAST = "battleaxe_swing1_R"; + ANIM_AXE_SLOW = "battleaxe_swing1_L"; + ANIM_SWORD_FAST = "longsword_swipe_R"; + ANIM_SWORD_SLOW = "longsword_swipe_L"; + ANIM_BOW = "shootbow"; + ANIM_SWING_SLOW = "swordswing1_R"; + ANIM_SWING_FAST = "swordswing2_R"; + ANIM_JAB = "swordjab1_R"; + ANIM_KICK_HIGH = "stance_normal_highkick_r1"; + ANIM_KICK_LOW = "stance_normal_lowkick_r1"; + ANIM_PARRY = "longsword_parry"; + ANIM_SPELL = "prepare_fireball"; + ANIM_CAST = "throw_fireball_R"; + ANIM_FLINCH = ANIM_PARRY; + ANIM_WALK_NORM = "walk2"; + ANIM_RUN_NORM = "run"; + ANIM_MOVE_SLOW = "run_squatwalk1_R"; + ANIM_WALK = "walk2"; + ANIM_RUN = "run"; + ANIM_HOP = "jump"; + ANIM_LEAP = "long_jump"; + ANIM_DEATH = "die_backwards1"; + SOUND_PARRY = "weapons/parry.wav"; + SOUND_POWERUP = "voices/big_swordready.wav"; + SOUND_LEAP = "voices/big_shout1.wav"; + SOUND_SATTACK = "voices/big_shout1.wav"; + SOUND_TAUNT1 = "voices/big_yeah1.wav"; + SOUND_TAUNT2 = "voices/big_taunt1.wav"; + SOUND_PULL = "voices/big_pull.wav"; + SOUND_SWING_FAST = "weapons/cbar_miss1.wav"; + SOUND_SWING_SLOW1 = "zombie/claw_miss1.wav"; + SOUND_SWING_SLOW2 = "zombie/claw_miss2.wav"; + SOUND_DEATH = "voices/big_death.wav"; + SOUND_BOW_STRETCH = "weapons/bow/stretch.wav"; + SOUND_BOW_SHOOT = "weapons/bow/crossbow.wav"; + SOUND_PAIN = "voices/big_chesthit1.wav"; + SOUND_PAIN2 = "voices/big_armhit1.wav"; + FREQ_HEALTH = 20.0; + FREQ_PULL = 10.0; + FREQ_KICK = RandomInt(10, 30); + FREQ_VOLCANO = 45.0; + FREQ_TURBO = Random(40, 60); + FREQ_SPECIAL = Random(15, 30); + FREQ_INVIS = RandomInt(30, 120); + FREQ_FLANK = 5.0; + FREQ_AVOID = 10.0; + CAN_FLINCH = 1; + FLINCH_DAMAGE_THRESHOLD = 75; + FLINCH_CHANCE = 50; + FLINCH_ANIM = "longsword_parry"; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 180; + ATTACK_HITCHANCE = 0.85; + ATTACK_MOVERANGE = 90; + MOVE_RANGE = 90; + DMG_KICK = RandomInt(50, 100); + DMG_MACE = RandomInt(300, 500); + DMG_SWORD_FAST = RandomInt(30, 80); + DMG_SWORD_SLOW = RandomInt(50, 100); + DMG_SWORD_JAB = RandomInt(50, 100); + DMG_SWING_FAST = RandomInt(30, 80); + DMG_SWING_SLOW = RandomInt(50, 100); + DMG_AXE_FAST = RandomInt(80, 150); + DMG_AXE_SLOW = RandomInt(400, 600); + DMG_DAGGER = RandomInt(30, 80); + DMG_NOVA_SLOW = RandomInt(100, 300); + DMG_NOVA_FAST = RandomInt(50, 100); + DMG_NOVA_STAB = RandomInt(100, 200); + DMG_BURN_DAGGER = RandomInt(10, 20); + DMG_BURN_MACE = RandomInt(30, 60); + DMG_FLAME_BURST = 400; + DMG_FIRE_BALL = 200; + DMG_ARROW = RandomInt(50, 100); + DMG_BLIZ = 50; + DMG_SKULL = 60; + ELEMENT_LIMIT = 5; + ELEMENT_DMG_THRESH = 30; + ARROW_SPEED = 1200; + AS_ATK_VALUE = 10; + BEAM_SPRITE = "lgtning.spr"; + MONSTER_MODEL = "npc/bandit_boss.mdl"; + Precache(MONSTER_MODEL); + Precache("nhth1.spr"); + Precache("ambience/alienflyby1.wav"); + Precache("monsters/bat.mdl"); + Precache("misc/gold.wav"); + Precache("amb/quest1.wav"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(2.0); + if ((SUSPEND_AI)) + { + BD_COUNT += 1; + } + if (!(SUSPEND_AI)) + { + BD_COUNT = 0; + } + if (BD_COUNT > 20) + { + npcatk_resume_ai(); + } + } + + void game_precache() + { + Precache("monsters/summon/ice_blast"); + Precache("monsters/summon/summon_blizzard"); + Precache("monsters/summon/stun_burst"); + Precache("monsters/summon/flame_burst"); + Precache("monsters/summon/bandit_boss_fire_wall"); + Precache("monsters/summon/flame_burst"); + Precache("monsters/summon/npc_volcano"); + Precache("monsters/summon/flame_skull"); + Precache("helena/bandit_boss_chest"); + } + + void OnSpawn() override + { + SetInvincible(true); + SetModel(MONSTER_MODEL); + SetWidth(40); + SetHeight(120); + SetRace("rogue"); + SetDamageResistance("all", 0.5); + SetDamageResistance("stun", 0.5); + SetSayTextRange(2048); + SetRoam(true); + SetHealth(9999); + SetHearingSensitivity(8); + HEALTH_AMMO = 1; + RESIST_AMMO = 2; + SPECIAL_AMMO = 2; + FIRE_STRUCK = 0; + COLD_STRUCK = 0; + POISON_STRUCK = 0; + LIGHTNING_STRUCK = 0; + FAST_SWINGS = 0; + NEXT_ATTACK = "unset"; + BD_COUNT = 0; + NOVA_PICK_ATK = 0; + ANIM_RUN = "run"; + ANIM_WALK = "walk2"; + ScheduleDelayedEvent(0.1, "setup_boss"); + } + + void setup_boss() + { + if (!(BOSS_TYPE_OVERRIDE)) + { + BOSS_TYPE = RandomInt(1, 6); + } + if (BOSS_TYPE == 1) + { + SetName("Plevmus of the Hidden Knife"); + SetHealth(2500); + SetModelBody(1, 1); + ANIM_ATTACK = ANIM_JAB; + SetSkillLevel(1000); + } + if (BOSS_TYPE == 2) + { + SetName("Golgar the Hammer"); + SetHealth(6000); + SetModelBody(1, 2); + ANIM_ATTACK = ANIM_AXE_SLOW; + NPC_GIVE_EXP = 1000; + } + if (BOSS_TYPE == 3) + { + SetName("Vultekh of the Runes"); + SetHealth(4000); + SetModelBody(1, 3); + ANIM_ATTACK = ANIM_AXE_FAST; + NPC_GIVE_EXP = 1000; + } + if (BOSS_TYPE == 4) + { + SetName("Kryoh of the Frozen Blade"); + SetHealth(3000); + SetModelBody(1, 4); + ATTACK_MOVERANGE = 256; + ANIM_ATTACK = ANIM_SWING_FAST; + NPC_GIVE_EXP = 1500; + } + if (BOSS_TYPE == 5) + { + SetName("Xaron of the Orion Bow"); + SetHealth(3000); + SetModelBody(1, 5); + ANIM_ATTACK = ANIM_BOW; + NPC_GIVE_EXP = 2000; + } + if (BOSS_TYPE == 6) + { + SetName("Demonicus of the Burning Blade"); + SetHealth(6000); + SetModelBody(1, 6); + SetStat("parry", 100); + ANIM_ATTACK = ANIM_SWORD_FAST; + NPC_GIVE_EXP = 500; + } + if (StringToLower(GetMapName()) == "helena") + { + NPC_GIVE_EXP *= 4; + } + SetMoveAnim(ANIM_WALK); + string L_MAP_NAME = StringToLower(GetMapName()); + int GENERIC_NAME = 1; + if (L_MAP_NAME == "keep_test") + { + int GENERIC_NAME = 0; + } + if (L_MAP_NAME == "the_keep") + { + int GENERIC_NAME = 0; + } + if ((GENERIC_NAME)) + { + SetName("Bandit Leader"); + } + SetInvincible(false); + } + + void OnPostSpawn() override + { + ORIG_MOVE_RANGE = ATTACK_MOVERANGE; + HALF_HEALTH = GetMonsterMaxHP(); + HALF_HEALTH /= 2; + FIRST_SPEC_POT_HEALTH = GetMonsterMaxHP(); + FIRST_SPEC_POT_HEALTH *= 0.75; + QUARTER_HEALTH = GetMonsterMaxHP(); + QUARTER_HEALTH *= 0.25; + ORIG_ATTACK = ANIM_ATTACK; + ORIG_WEAPON = BOSS_TYPE; + if ((BOSS_TYPE + "=" + 1)) + { + FREQ_ATTACK = 0.25; + } + if ((BOSS_TYPE + "=" + 2)) + { + FREQ_ATTACK = 2.0; + } + if ((BOSS_TYPE + "=" + 3)) + { + FREQ_ATTACK = 1.75; + } + if ((BOSS_TYPE + "=" + 4)) + { + FREQ_ATTACK = 0.25; + } + if ((BOSS_TYPE + "=" + 5)) + { + FREQ_ATTACK = 0.1; + } + if ((BOSS_TYPE + "=" + 6)) + { + FREQ_ATTACK = 1.5; + } + ORIG_FREQ_ATTACK = FREQ_ATTACK; + } + + void OnDamage(int damage) override + { + if (!(GetMonsterProperty("isalive"))) return; + if (param2 > 30) + { + // TODO: getents player 128 + if (getCount >= 3) + { + if (!(SWEEP_KICK_DELAY)) + { + } + if (!(DRINKING_POT)) + { + } + if (BOSS_TYPE != 5) + { + } + SWEEP_KICK_DELAY = 1; + FREQ_KICK("reset_sweep_kick_delay"); + int SWEEP_KICK = 1; + CAN_FLINCH = 0; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_KICK_LOW); + } + } + if (BOSS_TYPE == 5) + { + if (GetEntityRange(param1) < 120) + { + } + if (!(AVOID_DELAY)) + { + } + if (!(DRINKING_POT)) + { + } + AVOID_DELAY = 1; + FREQ_AVOID("reset_avoid_delay"); + int AVOID_TYPE = RandomInt(1, 3); + AS_ATTACKING = GetGameTime(); + if (AVOID_TYPE == 1) + { + leap_away(GetEntityIndex(param1)); + } + if (AVOID_TYPE == 2) + { + PlayAnim("critical", ANIM_KICK_HIGH); + } + if (AVOID_TYPE == 3) + { + PlayAnim("critical", ANIM_KICK_LOW); + } + } + if (HEALTH_AMMO > 0) + { + if (!(AM_INVISIBLE)) + { + } + if (!(DRINKING_POT)) + { + } + if (GetMonsterHP() < HALF_HEALTH) + { + } + if (!(HEALTH_POT_DELAY)) + { + } + HEALTH_POT_DELAY = 1; + FREQ_HEALTH("reset_health_pot_delay"); + drink_pot("health"); + } + if (!(DID_FIRST_POT)) + { + if (!(DRINKING_POT)) + { + } + if (!(SPEC_TYPE)) + { + } + if (GetMonsterHP() < FIRST_SPEC_POT_HEALTH) + { + } + DID_FIRST_POT = 1; + drink_special(); + } + if (!(DID_SECOND_POT)) + { + if (!(DRINKING_POT)) + { + } + if (!(SPEC_TYPE)) + { + } + if (GetMonsterHP() < QUARTER_HEALTH) + { + } + DID_SECOND_POT = 1; + drink_special(); + } + if (GetEntityRange(param1) > ATTACK_HITRANGE) + { + if (BOSS_TYPE != 5) + { + if (!(AM_INVISIBLE)) + { + } + if (!(DRINKING_POT)) + { + } + PULL_TARGET = param1; + if (param2 > 20) + { + int PULL_CHANCE = RandomInt(1, 10); + } + if (param2 > 60) + { + int PULL_CHANCE = RandomInt(1, 2); + } + if (!(PULL_DELAY)) + { + } + PULL_DELAY = 1; + FREQ_PULL("reset_pull_delay"); + tractor_beam(PULL_TARGET); + } + } + if (RESIST_AMMO > 0) + { + if (param2 > ELEMENT_DMG_THRESH) + { + } + if (!(AM_INVISIBLE)) + { + } + if (!(DRINKING_POT)) + { + } + if (!(IN_RESIST)) + { + } + if (param3 == "fire") + { + FIRE_STRUCK += 1; + } + if (param3 == "cold") + { + COLD_STRUCK += 1; + } + if (param3 == "lightning") + { + LIGHTNING_STRUCK += 1; + } + if (param3 == "poison") + { + POISON_STRUCK += 1; + } + if (FIRE_STRUCK >= ELEMENT_LIMIT) + { + if (!(USED_FIRE_POT)) + { + drink_pot("fire"); + } + } + if (COLD_STRUCK >= ELEMENT_LIMIT) + { + if (!(USED_COLD_POT)) + { + drink_pot("cold"); + } + } + if (LIGHTNING_STRUCK >= ELEMENT_LIMIT) + { + if (!(USED_LIGHTNING_POT)) + { + drink_pot("lightning"); + } + } + if (POISON_STRUCK >= ELEMENT_LIMIT) + { + if (!(USED_POISON_POT)) + { + drink_pot("poison"); + } + } + } + } + + void reset_avoid_delay() + { + AVOID_DELAY = 0; + } + + void reset_sweep_kick_delay() + { + SWEEP_KICK_DELAY = 0; + } + + void reset_health_pot_delay() + { + HEALTH_POT_DELAY = 0; + } + + void reset_pull_delay() + { + PULL_DELAY = 0; + } + + void drink_special() + { + int RND_POT = RandomInt(1, 3); + if (BOSS_TYPE == 1) + { + int RND_POT = RandomInt(1, 2); + } + if (RND_POT == 1) + { + drink_pot("demon"); + } + if (RND_POT == 2) + { + drink_pot("protection"); + } + if (RND_POT == 3) + { + drink_pot("speed"); + } + } + + void drink_pot() + { + if (!(GetMonsterProperty("isalive"))) return; + if ((DRINKING_POT)) return; + DRINKING_POT = 1; + if (param1 != "health") + { + SetModelBody(1, 8); + } + if (param1 == "health") + { + SetModelBody(1, 7); + } + npcatk_suspend_ai(2.0); + PlayAnim("once", "break"); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_DRINK); + DRINK_TYPE = param1; + } + + void drink_done() + { + npcatk_resume_ai(); + DRINKING_POT = 0; + EmitSound(GetOwner(), 0, "items/drink.wav", 10); + if (DRINK_TYPE == "fire") + { + USED_FIRE_POT = 1; + RESIST_AMMO -= 1; + IN_RESIST = 1; + Vector3 GLOW_COLOR = Vector3(255, 0, 0); + SetDamageResistance("fire", 0.5); + ScheduleDelayedEvent(60, "normal_immune"); + string OUT_MSG = GetMonsterProperty("name"); + OUT_MSG += " has drank a potion and is now resistant to fire!"; + SendInfoMsg("all", "POTION OF RESISTANCE TO FIRE " + OUT_MSG); + } + if (DRINK_TYPE == "cold") + { + USED_COLD_POT = 1; + RESIST_AMMO -= 1; + IN_RESIST = 1; + Vector3 GLOW_COLOR = Vector3(128, 128, 255); + SetDamageResistance("cold", 0.5); + ScheduleDelayedEvent(60, "normal_immune"); + string OUT_MSG = GetMonsterProperty("name"); + OUT_MSG += " has drank a potion and is now resistant to cold!"; + SendInfoMsg("all", "POTION OF RESISTANCE TO COLD " + OUT_MSG); + } + if (DRINK_TYPE == "poison") + { + USED_POISON_POT = 1; + RESIST_AMMO -= 1; + IN_RESIST = 1; + Vector3 GLOW_COLOR = Vector3(0, 255, 0); + SetDamageResistance("poison", 0.5); + ScheduleDelayedEvent(60, "normal_immune"); + string OUT_MSG = GetMonsterProperty("name"); + OUT_MSG += " has drank a potion and is now resistant to poison!"; + SendInfoMsg("all", "POTION OF RESISTANCE TO POISON " + OUT_MSG); + } + if (DRINK_TYPE == "lightning") + { + USED_LIGHTNING_POT = 1; + RESIST_AMMO -= 1; + IN_RESIST = 1; + Vector3 GLOW_COLOR = Vector3(255, 255, 0); + SetDamageResistance("lightning", 0.5); + ScheduleDelayedEvent(60, "normal_immune"); + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += " has drank a potion and is now resistant to lightning!"; + SendInfoMsg("all", "POTION OF RESISTANCE TO LIGHTNING " + OUT_MSG); + } + if (DRINK_TYPE == "health") + { + HEALTH_AMMO -= 1; + Vector3 GLOW_COLOR = Vector3(0, 255, 0); + string HP_GIVE = GetMonsterMaxHP(); + HP_GIVE -= GetMonsterHP(); + HealEntity(GetOwner(), HP_GIVE); + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += " has used a potion of health!"; + SendInfoMsg("all", "POTION OF HEALTH " + OUT_MSG); + } + if (DRINK_TYPE == "protection") + { + SPEC_TYPE = "protection"; + Vector3 GLOW_COLOR = Vector3(255, 255, 255); + GLOW_ON = 1; + GLOW_LOOP_COLOR = Vector3(255, 255, 255); + ScheduleDelayedEvent(5.0, "glow_loop"); + SetDamageResistance("all", 0.25); + ScheduleDelayedEvent(60, "end_special_effect"); + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += " has used a potion of protection!"; + SendInfoMsg("all", "POTION OF PROTECTION " + OUT_MSG); + } + if (DRINK_TYPE == "demon") + { + SPEC_TYPE = "demon"; + Vector3 GLOW_COLOR = Vector3(255, 0, 0); + DEMON_NOHP_LOSS = 1; + ScheduleDelayedEvent(5.0, "demon_blood"); + ScheduleDelayedEvent(60, "end_special_effect"); + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += " has used a vial of demon blood!"; + SendInfoMsg("all", "POTION OF DEMON BLOOD " + OUT_MSG); + } + if (DRINK_TYPE == "speed") + { + if (BOSS_TYPE != 1) + { + } + SPEC_TYPE = "speed"; + Vector3 GLOW_COLOR = Vector3(255, 0, 255); + ScheduleDelayedEvent(5.0, "turbo_on"); + ScheduleDelayedEvent(60, "end_special_effect"); + FREQ_ATTACK /= 2; + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += " has used a potion of speed!"; + SendInfoMsg("all", "POTION OF SPEED " + OUT_MSG); + } + Effect("glow", GetOwner(), GLOW_COLOR, 128, 5, 5); + DRINK_TYPE = "unset"; + SetModelBody(1, ORIG_WEAPON); + } + + void normal_immune() + { + IN_RESIST = 0; + } + + void OnFlinch() + { + npcatk_resume_ai(); + if (DRINK_TYPE == "health") + { + SpawnItem("health_spotion", /* TODO: $relpos */ $relpos(0, 0, 0)); + } + } + + void npcatk_resume_ai() + { + SetModelBody(1, ORIG_WEAPON); + DRINKING_POT = 0; + } + + void npcatk_checkflinch() + { + if ((CAN_FLINCH)) + { + if (!(FLINCHED_RECENTLY)) + { + } + if (GetMonsterHP() < HALF_HEALTH) + { + if (param1 > FLINCH_DAMAGE_THRESHOLD) + { + } + if (RandomInt(1, 100) <= FLINCH_CHANCE) + { + npc_flinch(); + PlayAnim("once", "break"); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", FLINCH_ANIM); + } + FLINCHED_RECENTLY = 1; + FLINCH_DELAY("npcatk_reset_flinch"); + } + } + } + + void OnParry(CBaseEntity@ attacker) override + { + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_PARRY); + EmitSound(GetOwner(), 0, SOUND_PARRY, 10); + } + + void end_special_effect() + { + if (SPEC_TYPE == "demon") + { + DEMON_BLOOD = 0; + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += "'s demon blood potion has run out."; + SendInfoMsg("all", "EFFECT ENDED " + OUT_MSG); + } + if (SPEC_TYPE == "protection") + { + SetDamageResistance("all", 0.5); + GLOW_ON = 0; + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += "'s protection potion has run out."; + SendInfoMsg("all", "EFFECTED ENDED " + OUT_MSG); + } + if (SPEC_TYPE == "speed") + { + FREQ_ATTACK = ORIG_FREQ_ATTACK; + turbo_off(); + string OUT_MSG = GetMonsterProperty("name.full"); + OUT_MSG += "'s speed potion has run out."; + SendInfoMsg("all", "EFFECTED ENDED " + OUT_MSG); + } + SPEC_TYPE = 0; + } + + void turbo_on() + { + if (!(GLOW_ON)) + { + GLOW_ON = 1; + GLOW_LOOP_COLOR = Vector3(255, 255, 0); + glow_loop(); + } + SPEC_TYPE = "speed"; + SetMoveSpeed(2.0); + SetAnimMoveSpeed(2.0); + SetAnimFrameRate(3.0); + BASE_FRAMERATE = 3.0; + BASE_MOVESPEED = 3.0; + ScheduleDelayedEvent(0.1, "stuck_fix"); + } + + void stuck_fix() + { + PlayAnim("critical", ANIM_ATTACK); + } + + void do_turbo() + { + turbo_on(); + ScheduleDelayedEvent(10.0, "turbo_off"); + } + + void turbo_off() + { + SetMoveSpeed(1.0); + SetAnimMoveSpeed(1.0); + SetAnimFrameRate(1.0); + BASE_FRAMERATE = 1.0; + BASE_MOVESPEED = 1.0; + if (BOSS_TYPE == 1) + { + FREQ_TURBO("do_turbo"); + } + } + + void tractor_beam() + { + DOING_PULL = 1; + if (!(GetEntityRange(PULL_TARGET) < 4000)) return; + npcatk_suspend_ai(); + SetMoveDest(PULL_TARGET); + EmitSound(GetOwner(), 0, SOUND_PULL, 10); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_JAB); + string BEAM_START = /* TODO: $relpos */ $relpos(0, 0, 60); + string BEAM_END = GetEntityOrigin(PULL_TARGET); + Effect("beam", "end", BEAM_SPRITE, 30, BEAM_START, PULL_TARGET, 0, Vector3(255, 255, 0), 200, 30, 1.5); + ScheduleDelayedEvent(1.0, "tractor_beam2"); + } + + void tractor_beam2() + { + SayText("Get over here!"); + SetAngles("face"); + AddVelocity(PULL_TARGET, /* TODO: $relvel */ $relvel(10, -3000, 10)); + ScheduleDelayedEvent(0.25, "npcatk_resume_ai"); + ScheduleDelayedEvent(0.5, "tractor_beam3"); + } + + void tractor_beam3() + { + SetAngles("face"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + SetAngles("face"); + npcatk_settarget(PULL_TARGET); + } + + void kick_low() + { + KICK_ATTACK = 1; + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 256, 1, 100 + npcatk_dodamage(m_hAttackTarget, ATTACK_RANGE, DMG_KICK, 1.0, "blunt"); + CAN_FLINCH = 1; + ANIM_ATTACK = ORIG_ATTACK; + } + + void kick_high() + { + KICK_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, 1.0, "blunt"); + ANIM_ATTACK = ORIG_ATTACK; + } + + void game_dodamage() + { + if ((param1)) + { + if (GetEntityRange(param2) < ATTACK_HITRANGE) + { + } + if ((KICK_ATTACK)) + { + ApplyEffect(param2, "effects/debuff_stun", 10, GetEntityIndex(GetOwner())); + if (BOSS_TYPE == 5) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(10, 800, 10)); + } + ANIM_ATTACK = ORIG_ATTACK; + } + if ((FREEZE_ATTACK)) + { + int FREEZE_CHANCE = RandomInt(1, 4); + if (FREEZE_CHANCE < 4) + { + EmitSound(GetOwner(), 0, "playsound", 10); + ApplyEffect(param2, "effects/dot_cold_freeze", 10, GetEntityIndex(GetOwner()), 30); + } + if (FREEZE_CHANCE == 4) + { + EmitSound(GetOwner(), 0, "debris/zap1.wav", 10); + } + ANIM_ATTACK = ORIG_ATTACK; + } + if ((STUN_ATTACK)) + { + ApplyEffect(param2, "effects/debuff_stun", 10, GetEntityIndex(GetOwner())); + } + if ((MELEE_HIT)) + { + } + MELEE_HIT = 0; + if (BOSS_TYPE == 1) + { + if (!(KICK_ATTACK)) + { + } + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_BURN_DAGGER); + } + if (BOSS_TYPE == 2) + { + if (!(KICK_ATTACK)) + { + } + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_BURN_MACE); + } + if (BOSS_TYPE == 6) + { + if ((NORM_ATTACK)) + { + } + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_BURN_MACE); + } + } + KICK_ATTACK = 0; + FREEZE_ATTACK = 0; + STUN_ATTACK = 0; + NORM_ATTACK = 0; + } + + void cycle_up() + { + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + FREQ_KICK("do_kick"); + if (BOSS_TYPE == 1) + { + FREQ_SPECIAL("do_special"); + FREQ_TURBO("do_turbo"); + FREQ_INVIS("do_invis"); + } + if (BOSS_TYPE == 2) + { + FREQ_SPECIAL("do_special"); + } + if (BOSS_TYPE == 3) + { + FREQ_SPECIAL("do_special"); + } + if (BOSS_TYPE == 4) + { + FREQ_SPECIAL("do_special"); + } + if (BOSS_TYPE == 5) + { + FREQ_SPECIAL("do_special"); + FREQ_INVIS("do_invis"); + } + if (BOSS_TYPE == 6) + { + FREQ_VOLCANO("do_volcano"); + FREQ_SPECIAL("do_special"); + } + } + + void do_special() + { + string L_FREQ_SPECIAL = FREQ_SPECIAL; + check_legal_act(); + if (!(LEGAL_ACT)) + { + int L_FREQ_SPECIAL = 5; + } + string CAN_SEE_NME = false; + if (!(CAN_SEE_NME)) + { + int L_FREQ_SPECIAL = 5; + } + L_FREQ_SPECIAL("do_special"); + if (!(CAN_SEE_NME)) return; + if (!(LEGAL_ACT)) return; + if (BOSS_TYPE == 1) + { + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 128, 3, 3); + AS_ATTACKING = 20; + PlayAnim("critical", ANIM_SPELL); + } + if (BOSS_TYPE == 2) + { + NEXT_ATTACK = ANIM_SWORD_SLOW; + } + if (BOSS_TYPE == 3) + { + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + PlayAnim("once", "break"); + LEAP_TARGET = GetEntityIndex(m_hLastSeen); + POWER_ATTACK = 1; + if (GetEntityRange(LEAP_TARGET) < 200) + { + PURE_FLEE = 1; + npcatk_flee(LEAP_TARGET, 300, 2.0); + ScheduleDelayedEvent(2.1, "leap_scan"); + int LEAP_EXIT_SUB = 1; + } + if (!(LEAP_EXIT_SUB)) + { + } + ScheduleDelayedEvent(0.1, "leap_scan"); + } + if (BOSS_TYPE == 4) + { + int PICK_ATK = RandomInt(1, 2); + if (PICK_ATK == 1) + { + npcatk_find_distant(2048); + npcatk_suspend_ai(); + SetMoveDest(NPC_MOST_DISTANT); + BLIZZ_TARGET = NPC_MOST_DISTANT; + ScheduleDelayedEvent(0.1, "go_blizz"); + } + if (PICK_ATK == 2) + { + Effect("glow", GetOwner(), Vector3(128, 128, 255), 128, 3, 3); + ScheduleDelayedEvent(2.0, "do_sphere"); + } + } + if (BOSS_TYPE == 5) + { + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + Effect("glow", GetOwner(), Vector3(0, 255, 255), 128, 3, 3); + SCATTER_SHOT = 1; + } + if (BOSS_TYPE == 6) + { + NOVA_PICK_ATK += 1; + DOING_NOVA = 1; + ScheduleDelayedEvent(10.0, "reset_doing_nova"); + if (NOVA_PICK_ATK > 4) + { + NOVA_PICK_ATK = 1; + } + if (NOVA_PICK_ATK == 1) + { + npcatk_find_distant(2048); + SetMoveDest(NPC_MOST_DISTANT); + NOvA_TARGET = NPC_MOST_DISTANT; + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + AS_ATTACKING = 20; + NOVA_ATTACK = "fire_wall"; + ScheduleDelayedEvent(0.1, "do_fire_wall"); + } + if (NOVA_PICK_ATK == 2) + { + NOVA_ATTACK = "flame_burst"; + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 128, 3, 3); + AS_ATTACKING = 20; + PlayAnim("critical", ANIM_SPELL); + } + if (NOVA_PICK_ATK == 3) + { + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + Effect("glow", GetOwner(), Vector3(255, 72, 0), 128, 3, 3); + ScheduleDelayedEvent(2.0, "do_fireball"); + } + if (NOVA_PICK_ATK == 4) + { + NOVA_ATTACK = "flame_skull"; + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 128, 3, 3); + AS_ATTACKING = 20; + PlayAnim("critical", ANIM_SPELL); + } + } + } + + void reset_doing_nova() + { + DOING_NOVA = 0; + } + + void do_fire_wall() + { + PlayAnim("critical", ANIM_SPELL); + Effect("glow", GetOwner(), Vector3(255, 255, 128), 128, 3, 3); + } + + void do_fireball() + { + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_JAB); + } + + void do_sphere() + { + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_JAB); + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + SpawnNPC("monsters/summon/ice_blast", /* TODO: $relpos */ $relpos(0, 64, 32), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 20.0, /* TODO: $relpos */ $relpos(0, 2000, 0) + } + + void go_blizz() + { + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_JAB); + Effect("glow", GetOwner(), Vector3(128, 128, 255), 128, 3, 3); + string BLIZZ_POS = GetEntityOrigin(BLIZZ_TARGET); + SpawnNPC("monsters/summon/summon_blizzard", BLIZZ_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityAngles(GetOwner()), DMG_BLIZZ, 20.0 + npcatk_resume_ai(); + } + + void do_kick() + { + FREQ_KICK("do_kick"); + check_legal_act(); + if (!(LEGAL_ACT)) return; + int KICK_TYPE = RandomInt(1, 3); + if (KICK_TYPE <= 2) + { + NEXT_ATTACK = ANIM_KICK_HIGH; + } + if (KICK_TYPE == 3) + { + NEXT_ATTACK = ANIM_KICK_LOW; + } + } + + void do_volcano() + { + string L_FREQ_VOLCANO = FREQ_VOLCANO; + check_legal_act(); + if ((DOING_NOVA)) + { + float L_FREQ_VOLCANO = 5.0; + } + if (!(LEGAL_ACT)) + { + float L_FREQ_VOLCANO = 5.0; + } + L_FREQ_VOLCANO("do_volcano"); + if (!(LEGAL_ACT)) return; + if ((DOING_NOVA)) return; + NOVA_ATTACK = "volcano"; + AS_ATTACKING = 20; + PlayAnim("critical", ANIM_SPELL); + } + + void do_scatter_shot() + { + SCATTER_COUNT += 1; + if (SCATTER_COUNT < 10) + { + ScheduleDelayedEvent(0.1, "do_scatter_shot"); + } + EmitSound(GetOwner(), 0, SOUND_BOW_SHOOT, 10); + int RND_ARROW = RandomInt(1, 3); + string FIN_DMG = DMG_ARROW; + if (RND_ARROW == 1) + { + string ARROW_TYPE = "proj_arrow_frost"; + } + if (RND_ARROW == 2) + { + string ARROW_TYPE = "proj_arrow_gpoison"; + } + if (RND_ARROW == 3) + { + string ARROW_TYPE = "proj_arrow_jagged"; + FIN_DMG *= 4; + } + TossProjectile(ARROW_TYPE, /* TODO: $relpos */ $relpos(0, 32, 32), "none", ARROW_SPEED, FIN_DMG, 10, "none"); + CallExternal("ent_lastprojectile", "ext_lighten", 0.1); + } + + void axe_fast() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + if (BOSS_TYPE == 2) + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_FAST, ATTACK_HITCHANCE, "dark"); + MELEE_HIT = 1; + } + else + { + NORM_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_FAST, ATTACK_HITCHANCE, "slash"); + MELEE_HIT = 1; + } + if (BOSS_TYPE == 3) + { + if (RandomInt(1, 10) == 1) + { + } + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 1, 1); + NEXT_ATTACK = ANIM_AXE_SLOW; + } + } + + void axe_slow() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + if (BOSS_TYPE == 3) + { + NEXT_ATTACK = ANIM_SWING_FAST; + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + } + if (BOSS_TYPE != 3) + { + NORM_ATTACK = 1; + } + if (BOSS_TYPE == 2) + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_FAST, ATTACK_HITCHANCE, "dark"); + MELEE_HIT = 1; + } + else + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_SLOW, ATTACK_HITCHANCE, "blunt"); + MELEE_HIT = 1; + } + } + + void sword_fast() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + NORM_ATTACK = 1; + if (BOSS_TYPE == 6) + { + if (RandomInt(1, 10) == 1) + { + } + NEXT_ATTACK = ANIM_SWORD_SLOW; + } + if (BOSS_TYPE == 2) + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_FAST, ATTACK_HITCHANCE, "dark"); + MELEE_HIT = 1; + } + else + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWORD_FAST, ATTACK_HITCHANCE, "slash"); + MELEE_HIT = 1; + } + } + + void sword_slow() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + if (BOSS_TYPE == 2) + { + STUN_ATTACK = 1; + ANIM_ATTACK = ORIG_ATTACK; + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 256, 0, 200 + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_FAST, ATTACK_HITCHANCE, "dark"); + MELEE_HIT = 1; + } + else + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWORD_SLOW, ATTACK_HITCHANCE, "slash"); + MELEE_HIT = 1; + } + if (BOSS_TYPE != 2) + { + NORM_ATTACK = 1; + } + } + + void swing_slow() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + NORM_ATTACK = 1; + if (BOSS_TYPE == 2) + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_FAST, ATTACK_HITCHANCE, "dark"); + MELEE_HIT = 1; + } + else + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWING_SLOW, ATTACK_HITCHANCE, "slash"); + MELEE_HIT = 1; + } + } + + void swing_fast() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + if (BOSS_TYPE == 3) + { + FAST_SWINGS += 1; + if (FAST_SWINGS >= 20) + { + NEXT_ATTACK = ANIM_AXE_FAST; + FAST_SWINGS = 0; + } + } + NORM_ATTACK = 1; + if (BOSS_TYPE == 2) + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_FAST, ATTACK_HITCHANCE, "dark"); + MELEE_HIT = 1; + } + else + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWING_FAST, ATTACK_HITCHANCE, "slash"); + MELEE_HIT = 1; + } + } + + void attack_jab() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + if ((DOING_PULL)) + { + DOING_PULL = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (BOSS_TYPE == 1) + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_DAGGER, ATTACK_HITCHANCE, "slash"); + MELEE_HIT = 1; + if (RandomInt(1, 20) == 1) + { + if (!(FLANK_DELAY)) + { + } + FLANK_DELAY = 1; + FREQ_FLANK("flank_delay_reset"); + npcatk_flank(m_hAttackTarget); + } + } + if (BOSS_TYPE == 2) + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE_FAST, ATTACK_HITCHANCE, "dark"); + MELEE_HIT = 1; + } + if (BOSS_TYPE == 4) + { + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + FREEZE_ATTACK = 1; + ANIM_ATTACK = ORIG_ATTACK; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWORD_STAB, ATTACK_HITCHANCE, "pierce"); + MELEE_HIT = 1; + } + if (BOSS_TYPE == 6) + { + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + ANIM_ATTACK = ORIG_ATTACK; + TossProjectile("proj_fire_ball2", /* TODO: $relpos */ $relpos(0, 48, 36), "none", 200, DMG_FIRE_BALL, 0, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "lighten", 20); + } + } + + void prep_done() + { + BB_IN_ATTACK = 0; + if (BOSS_TYPE == 1) + { + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + SpawnNPC("monsters/summon/flame_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_FLAME_BURST, 1 + } + if (BOSS_TYPE == 6) + { + if (NOVA_ATTACK == "fire_wall") + { + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + SpawnNPC("monsters/summon/bandit_boss_fire_wall", GetEntityOrigin(NOvA_TARGET), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityAngles(GetOwner()), 75, 20 + } + if (NOVA_ATTACK == "flame_burst") + { + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + string BURST_DAM = DMG_FLAME_BURST; + BURST_DAM *= 2; + SpawnNPC("monsters/summon/flame_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), BURST_DAM, 1 + } + if (NOVA_ATTACK == "volcano") + { + if ((false)) + { + string pos = GetEntityOrigin(m_hLastSeen); + } + if (GetRelationship(m_hLastSeen) == "enemy") + { + string pos = GetEntityOrigin(m_hLastSeen); + } + if (!(false)) + { + if (Distance(GetMonsterProperty("origin"), pos) > 2000) + { + } + Vector3 pos = Vector3(0, 0, 0); + pos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 500, 0)); + string pos = TraceLine(GetMonsterProperty("origin"), pos); + } + string temp = /* TODO: $get_ground_height */ $get_ground_height(pos); + string x = (pos).x; + string y = (pos).y; + Vector3 pos = Vector3(x, y, temp); + SetGlobalVar("VOLCANO_DMG", 2); + DMG_VOLCANO = 40; + SpawnNPC("monsters/summon/npc_volcano", pos, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 100, 40.0 + } + if (NOVA_ATTACK == "flame_skull") + { + SpawnNPC("monsters/summon/flame_skull", /* TODO: $relpos */ $relpos(0, 0, 64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_SKULL, 256 + } + NOVA_ATTACK = "none"; + } + } + + void bow_shoot() + { + BB_IN_ATTACK = 0; + if (NEXT_ATTACK != "unset") + { + ANIM_ATTACK = NEXT_ATTACK; + NEXT_ATTACK = "unset"; + } + EmitSound(GetOwner(), 0, SOUND_BOW_SHOOT, 10); + if (!(SCATTER_SHOT)) + { + BALL_SIZE = Random(1, 9); + BALL_SPEED = 1000; + int BALL_SADJ = 90; + BALL_SADJ *= BALL_SIZE; + BALL_SPEED -= BALL_SADJ; + BALL_DMG = BALL_SIZE; + BALL_DMG *= 30; + Vector3 OFS_ADJ = Vector3(0, 28, 36); + if (GetEntityRange(m_hAttackTarget) < 100) + { + Vector3 OFS_ADJ = Vector3(0, 28, -28); + } + TossProjectile("proj_mana", /* TODO: $relpos */ $relpos(OFS_ADJ), "none", BALL_SPEED, BALL_DMG, 1, "none"); + } + if ((SCATTER_SHOT)) + { + EmitSound(GetOwner(), 0, SOUND_SATTACK, 10); + SCATTER_SHOT = 0; + SCATTER_COUNT = 0; + do_scatter_shot(); + } + } + + void bow_stretch() + { + BB_IN_ATTACK = 0; + EmitSound(GetOwner(), 0, SOUND_BOW_STRETCH, 10); + } + + void sound_fast() + { + if (NEXT_ATTACK == "unset") + { + EmitSound(GetOwner(), 0, SOUND_SWING_FAST, 10); + } + if (NEXT_ATTACK != "unset") + { + if (NEXT_ATTACK != ANIM_KICK_HIGH) + { + } + if (NEXT_ATTACK != ANIM_KICK_LOW) + { + } + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + } + } + + void sound_slow() + { + if (NEXT_ATTACK == "unset") + { + // PlayRandomSound from: SOUND_SWING_SLOW1, SOUND_SWING_SLOW2 + array sounds = {SOUND_SWING_SLOW1, SOUND_SWING_SLOW2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + if (NEXT_ATTACK != "unset") + { + if (NEXT_ATTACK != ANIM_KICK_HIGH) + { + } + if (NEXT_ATTACK != ANIM_KICK_LOW) + { + } + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 2, 2); + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + } + } + + void leap_scan() + { + if (!(POWER_ATTACK)) return; + ScheduleDelayedEvent(0.25, "leap_scan"); + if ((IS_FLEEING)) return; + if ((IsEntityAlive(LEAP_TARGET))) + { + leap_at(LEAP_TARGET); + } + if (!(IsEntityAlive(LEAP_TARGET))) + { + LEAP_TARGET = m_hAttackTarget; + if (m_hAttackTarget == "unset") + { + leap_at(LEAP_TARGET); + } + } + } + + void leap_at() + { + if ((AM_LEAPING)) return; + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + POWER_ATTACK = 0; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_at2"); + } + + void leap_at2() + { + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "bandit_charge"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + ScheduleDelayedEvent(0.9, "bullrush_stun"); + } + + void bandit_charge() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void reset_leaping() + { + AM_LEAPING = 0; + } + + void bullrush_stun() + { + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 60, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 256, 1, 150 + } + + void leap_away() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_away2"); + } + + void leap_away2() + { + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_HOP); + ScheduleDelayedEvent(0.1, "bandit_hop"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + } + + void bandit_hop() + { + int JUMP_HEIGHT = RandomInt(350, 450); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void flank_delay_reset() + { + FLANK_DELAY = 0; + } + + void my_target_died() + { + ScheduleDelayedEvent(0.1, "taunt_sound"); + AS_ATTACKING = GetGameTime(); + if ((DRINKING_POT)) return; + if ((GetEntityProperty(param1, "scriptvar"))) return; + PlayAnim("critical", "aim_punch1"); + } + + void taunt_sound() + { + // PlayRandomSound from: SOUND_TAUNT1, SOUND_TAUNT2 + array sounds = {SOUND_TAUNT1, SOUND_TAUNT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "helena") + { + CallExternal(GAME_MASTER, "helena_bandit_chest", /* TODO: $relpos */ $relpos(0, 0, 0)); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (L_MAP_NAME == "keep_test") + { + int TREASURE_MAP = 1; + } + if (L_MAP_NAME == "the_keep") + { + int TREASURE_MAP = 1; + } + SetGlobalVar("G_BANDIT_BOSS_TYPE", BOSS_TYPE); + } + + void glow_loop() + { + if (!(GLOW_ON)) return; + ScheduleDelayedEvent(5.1, "glow_loop"); + Effect(GetOwner(), "glow", GLOW_LOOP_COLOR, 128, 5, 0); + } + + void npc_targetsighted() + { + if (BOSS_TYPE == 5) + { + if (!(IS_FLEEING)) + { + } + if ((false)) + { + } + AS_ATTACKING = GetGameTime(); + PlayAnim("once", ANIM_BOW); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void do_invis() + { + } + + void check_legal_act() + { + LEGAL_ACT = 1; + if ((I_R_FROZEN)) + { + LEGAL_ACT = 0; + } + if (ANIM_ATTACK == ANIM_KICK_HIGH) + { + LEGAL_ACT = 0; + } + if (ANIM_ATTACK == ANIM_KICK_LOW) + { + LEGAL_ACT = 0; + } + if ((IS_FLEEING)) + { + LEGAL_ACT = 0; + } + if ((SUSPEND_AI)) + { + LEGAL_ACT = 0; + } + if ((DRINKING_POT)) + { + LEGAL_ACT = 0; + } + } + + void npcatk_attack() + { + if ((NPC_NO_ATTACK)) return; + npc_selectattack(); + PlayAnim("once", ANIM_ATTACK); + ATTACK_ANIMINDEX = GetEntityProperty(GetOwner(), "anim.index"); + ATTACK_MOVERANGE = 9999; + NPC_NO_MOVE = 1; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (ATTACK_ANIMINDEX == GetEntityProperty(GetOwner(), "anim.index")) + { + NPC_NO_MOVE = 1; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + AS_ATTACKING = 5; + } + if (!(ATTACK_ANIMINDEX != GetEntityProperty(GetOwner(), "anim.index"))) return; + ATTACK_MOVERANGE = ORIG_MOVE_RANGE; + NPC_NO_MOVE = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_boss_archer.as b/scripts/angelscript/monsters/bandit_boss_archer.as new file mode 100644 index 00000000..89765bb6 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_boss_archer.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bandit_boss.as" + +namespace MS +{ + +class BanditBossArcher : CGameScript +{ + int BOSS_TYPE; + int BOSS_TYPE_OVERRIDE; + + BanditBossArcher() + { + BOSS_TYPE = 5; + BOSS_TYPE_OVERRIDE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_boss_axe.as b/scripts/angelscript/monsters/bandit_boss_axe.as new file mode 100644 index 00000000..66dccc82 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_boss_axe.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bandit_boss.as" + +namespace MS +{ + +class BanditBossAxe : CGameScript +{ + int BOSS_TYPE; + int BOSS_TYPE_OVERRIDE; + + BanditBossAxe() + { + BOSS_TYPE = 3; + BOSS_TYPE_OVERRIDE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_boss_dagger.as b/scripts/angelscript/monsters/bandit_boss_dagger.as new file mode 100644 index 00000000..7e762bf9 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_boss_dagger.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bandit_boss.as" + +namespace MS +{ + +class BanditBossDagger : CGameScript +{ + int BOSS_TYPE; + int BOSS_TYPE_OVERRIDE; + + BanditBossDagger() + { + BOSS_TYPE = 1; + BOSS_TYPE_OVERRIDE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_boss_mace.as b/scripts/angelscript/monsters/bandit_boss_mace.as new file mode 100644 index 00000000..d4321b41 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_boss_mace.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bandit_boss.as" + +namespace MS +{ + +class BanditBossMace : CGameScript +{ + int BOSS_TYPE; + int BOSS_TYPE_OVERRIDE; + + BanditBossMace() + { + BOSS_TYPE = 2; + BOSS_TYPE_OVERRIDE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_boss_nova.as b/scripts/angelscript/monsters/bandit_boss_nova.as new file mode 100644 index 00000000..225127ab --- /dev/null +++ b/scripts/angelscript/monsters/bandit_boss_nova.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bandit_boss.as" + +namespace MS +{ + +class BanditBossNova : CGameScript +{ + int BOSS_TYPE; + int BOSS_TYPE_OVERRIDE; + + BanditBossNova() + { + BOSS_TYPE = 6; + BOSS_TYPE_OVERRIDE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_boss_random.as b/scripts/angelscript/monsters/bandit_boss_random.as new file mode 100644 index 00000000..321093e4 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_boss_random.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bandit_boss.as" + +namespace MS +{ + +class BanditBossRandom : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/bandit_boss_sword.as b/scripts/angelscript/monsters/bandit_boss_sword.as new file mode 100644 index 00000000..2e327ec3 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_boss_sword.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bandit_boss.as" + +namespace MS +{ + +class BanditBossSword : CGameScript +{ + int BOSS_TYPE; + int BOSS_TYPE_OVERRIDE; + + BanditBossSword() + { + BOSS_TYPE = 4; + BOSS_TYPE_OVERRIDE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_dagger.as b/scripts/angelscript/monsters/bandit_dagger.as new file mode 100644 index 00000000..6801a5d9 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_dagger.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit.as" + +namespace MS +{ + +class BanditDagger : CGameScript +{ + int WEAPON; + + BanditDagger() + { + WEAPON = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_elite.as b/scripts/angelscript/monsters/bandit_elite.as new file mode 100644 index 00000000..12f33df0 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_elite.as @@ -0,0 +1,865 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/base_aim_proj.as" + +namespace MS +{ + +class BanditElite : CGameScript +{ + string ADJ_RANGE; + int AIM_RATIO; + int AM_LEAPING; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ARROW_DAMAGE; + string AS_ATTACKING; + string ATK_TYPE; + string ATTACK1_DAMAGE; + int ATTACK_COF; + float ATTACK_PERCENTAGE; + string ATTACK_RANGE; + int ATTACK_SPEED; + string BANDIT_TYPE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int CAN_ATTACK; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + string CHANGE_POSITION; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + float DMG_AXE; + float DMG_DAGGER; + int DMG_MA; + float DMG_MACE; + float DMG_SWORD; + int DO_STUN; + int DROPS_CONTAINER; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string FINAL_DAMAGE; + float FREQ_AXE; + float FREQ_BOW; + float FREQ_DAGGER; + float FREQ_MA; + float FREQ_MACE; + string FREQ_SPEC_ATTACK; + float FREQ_SWORD; + int HUNT_AGRO; + string LEAP_TARGET; + int LEAP_UP_DELAY; + string MONSTER_MODEL; + string MOVE_RANGE; + int NO_STUCK_CHECKS; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string OLD_Z; + string ORIG_ATTACK; + string POWER_ATTACK; + string PURE_FLEE; + float RETALIATE_CHANGETARGET_CHANCE; + string SOUND_BOW; + string SOUND_PAIN; + string SOUND_PAIN2; + int SPEC_LOOP; + int TOO_CLOSE; + string WEAPON; + + BanditElite() + { + Precache("magic/boom.wav"); + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_frost_arrows"; + MONSTER_MODEL = "npc/rogue_1337.mdl"; + Precache(MONSTER_MODEL); + ANIM_HOP = "long_jump"; + FREQ_BOW = Random(15, 30); + FREQ_DAGGER = Random(20, 30); + FREQ_MA = Random(10, 15); + FREQ_SWORD = Random(15, 30); + FREQ_AXE = Random(15, 30); + FREQ_MACE = Random(15, 30); + DMG_DAGGER = Random(20, 30); + DMG_MA = 25; + DMG_SWORD = Random(20, 30); + DMG_AXE = Random(30, 60); + DMG_MACE = Random(60, 75); + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_PAIN2 = "player/armhit1.wav"; + SOUND_BOW = "weapons/bow/bow.wav"; + ANIM_IDLE = "idle"; + ANIM_RUN = "run"; + ANIM_WALK = "walk2"; + ANIM_DEATH = "die_simple"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_ATTACK = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_HEAR = 1; + NPC_GIVE_EXP = 300; + AIM_RATIO = 50; + ARROW_DAMAGE = "$rand(50,120)"; + if (!(OVERRIDE_BANDIT_SPAWN)) + { + } + bowey(); + fistey(); + daggerey(); + swordey(); + axey(); + macey(); + } + + void OnSpawn() override + { + if ((OVERRIDE_BANDIT_SPAWN)) return; + if (WEAPON == "WEAPON") + { + WEAPON = RandomInt(0, 5); + } + SetGold(RandomInt(30, 40)); + SetWidth(32); + SetHeight(92); + SetRace("rogue"); + SetDamageResistance("all", 0.6); + SetHearingSensitivity(3); + SetRoam(true); + SetModel(MONSTER_MODEL); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void bowey() + { + if (!(WEAPON == 0)) return; + SetName("Elite Bandit Archer"); + SetHealth(800); + ATTACK_SPEED = 1200; + MOVE_RANGE = ATTACK_SPEED; + ATTACK_RANGE = ATTACK_SPEED; + ATTACK_COF = 0; + ANIM_ATTACK = "shootbow"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 5); + TOO_CLOSE = 0; + DROPS_CONTAINER = 1; + NO_STUCK_CHECKS = 1; + BANDIT_TYPE = "bow"; + } + + void daggerey() + { + if (!(WEAPON == 1)) return; + SetName("Elite Bandit Rogue"); + SetHealth(800); + MOVE_RANGE = 30; + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = DMG_DAGGER; + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "swordjab1_R"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 1); + DROP_ITEM1 = "smallarms_fangstooth"; + DROP_ITEM1_CHANCE = 0.05; + BANDIT_TYPE = "dagger"; + } + + void fistey() + { + if (!(WEAPON == 2)) return; + SetName("Elite Bandit Martial Artist"); + SetHealth(1000); + SetMoveSpeed(1.5); + SetAnimMoveSpeed(1.5); + BASE_FRAMERATE = 1.5; + BASE_MOVESPEED = 1.5; + MOVE_RANGE = 30; + ATTACK_RANGE = 80; + ATTACK1_DAMAGE = DMG_MA; + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "aim_punch1"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 0); + BANDIT_TYPE = "ma"; + } + + void swordey() + { + if (!(WEAPON == 3)) return; + SetName("Elite Bandit Swordsman"); + SetHealth(1000); + MOVE_RANGE = 60; + ATTACK_RANGE = 100; + ATTACK1_DAMAGE = Random(20, 30); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "swordswing2_R"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 4); + BANDIT_TYPE = "sword"; + } + + void axey() + { + if (!(WEAPON == 4)) return; + SetName("Elite Bandit Axeman"); + SetHealth(1500); + MOVE_RANGE = 80; + ATTACK_RANGE = 100; + ATTACK1_DAMAGE = Random(30, 60); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 3); + BANDIT_TYPE = "axe"; + } + + void macey() + { + if (!(WEAPON == 5)) return; + SetName("Elite Bandit Berserker"); + SetHealth(1750); + MOVE_RANGE = 80; + ATTACK_RANGE = 100; + ATTACK1_DAMAGE = Random(30, 60); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 2); + BANDIT_TYPE = "mace"; + } + + void check_attack() + { + if (!(WEAPON == 0)) return; + if ((IS_FLEEING)) return; + if (CHANGE_POSITION > 3) + { + CHANGE_POSITION = 0; + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_RUN); + chicken_run(3); + } + if (!(false)) return; + if (GetEntityRange(m_hLastSeen) < 100) + { + TOO_CLOSE += 0.1; + } + if (TOO_CLOSE > 5) + { + TOO_CLOSE = 0; + PURE_FLEE = 1; + npcatk_flee(m_hLastSeen, 600, 5); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(WEAPON == 0)) return; + if (!(IsValidPlayer(m_hLastStruck) + "add" + CHANGE_POSITION + 1)) return; + } + + void OnDeath(CBaseEntity@ attacker) override + { + int L_DEATHANIM = RandomInt(0, 6); + if (L_DEATHANIM == 0) + { + ANIM_DEATH = "die_simple"; + } + if (L_DEATHANIM == 1) + { + ANIM_DEATH = "die_backwards1"; + } + if (L_DEATHANIM == 2) + { + ANIM_DEATH = "die_backwards"; + } + if (L_DEATHANIM == 3) + { + ANIM_DEATH = "die_forwards"; + } + if (L_DEATHANIM == 4) + { + ANIM_DEATH = "headshot"; + } + if (L_DEATHANIM == 5) + { + ANIM_DEATH = "die_spin"; + } + if (L_DEATHANIM == 6) + { + ANIM_DEATH = "gutshot"; + } + } + + void npc_targetsighted() + { + if (WEAPON == 0) + { + if (!(IS_FLEEING)) + { + } + if ((false)) + { + } + AS_ATTACKING = GetGameTime(); + PlayAnim("once", ANIM_ATTACK); + } + if (!(BANDIT_TYPE != "bow")) return; + if ((LEAP_UP_DELAY)) return; + LEAP_UP_DELAY = 1; + ScheduleDelayedEvent(2.0, "reset_leap_up_delay"); + string TARG_POS = GetEntityOrigin(HUNT_LASTTARGET); + string MY_Z = (GetMonsterProperty("origin")).z; + string TARG_Z = (TARG_POS).z; + string Z_DIFF = TARG_Z; + MY_Z += PLAYER_HALFHEIGHT; + Z_DIFF -= MY_Z; + if (Z_DIFF < 0) + { + string Z_DIFF = /* TODO: $neg */ $neg(Z_DIFF); + } + if (Z_DIFF > 96) + { + if (Z_DIFF < 300) + { + leap_at(GetEntityIndex(HUNT_LASTTARGET)); + } + } + } + + void cycle_up() + { + if ((SPEC_LOOP)) return; + SPEC_LOOP = 1; + if (BANDIT_TYPE == "bow") + { + FREQ_SPEC_ATTACK = FREQ_BOW; + } + if (BANDIT_TYPE == "dagger") + { + FREQ_SPEC_ATTACK = FREQ_DAGGER; + } + if (BANDIT_TYPE == "ma") + { + FREQ_SPEC_ATTACK = FREQ_MA; + } + if (BANDIT_TYPE == "sword") + { + FREQ_SPEC_ATTACK = FREQ_SWORD; + } + if (BANDIT_TYPE == "axe") + { + FREQ_SPEC_ATTACK = FREQ_AXE; + } + if (BANDIT_TYPE == "mace") + { + FREQ_SPEC_ATTACK = FREQ_MACE; + } + FREQ_SPEC_ATTACK("special_attack"); + } + + void special_attack() + { + if (BANDIT_TYPE == "bow") + { + FREQ_SPEC_ATTACK = FREQ_BOW; + } + if (BANDIT_TYPE == "dagger") + { + FREQ_SPEC_ATTACK = FREQ_DAGGER; + } + if (BANDIT_TYPE == "ma") + { + FREQ_SPEC_ATTACK = FREQ_MA; + } + if (BANDIT_TYPE == "sword") + { + FREQ_SPEC_ATTACK = FREQ_SWORD; + } + if (BANDIT_TYPE == "axe") + { + FREQ_SPEC_ATTACK = FREQ_AXE; + } + if (BANDIT_TYPE == "mace") + { + FREQ_SPEC_ATTACK = FREQ_MACE; + } + FREQ_SPEC_ATTACK("special_attack"); + if ((I_R_FROZEN)) + { + ScheduleDelayedEvent(10.0, "freeze_solid_end"); + } + if ((I_R_FROZEN)) return; + if (!(false)) return; + EmitSound(GetOwner(), 0, "player/swordready.wav", 10); + if (BANDIT_TYPE != "dagger") + { + Effect("glow", GetOwner(), Vector3(255, 255, 255), 64, 1, 1); + } + ScheduleDelayedEvent(0.75, "special_attack2"); + } + + void special_attack2() + { + if (BANDIT_TYPE == "bow") + { + if ((false)) + { + SetAngles("add_view.pitch"); + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + ScheduleDelayedEvent(0.1, "bow_sound"); + ScheduleDelayedEvent(0.2, "bow_sound"); + ScheduleDelayedEvent(0.3, "bow_sound"); + ScheduleDelayedEvent(0.4, "bow_sound"); + string L_POS = /* TODO: $relpos */ $relpos(0, 0, 2); + TossProjectile("proj_arrow_gpoison", L_POS, "none", ATTACK_SPEED, FINAL_DAMAGE, 10, "none"); + TossProjectile("proj_arrow_gpoison", L_POS, "none", ATTACK_SPEED, FINAL_DAMAGE, 10, "none"); + TossProjectile("proj_arrow_gpoison", L_POS, "none", ATTACK_SPEED, FINAL_DAMAGE, 10, "none"); + TossProjectile("proj_arrow_gpoison", L_POS, "none", ATTACK_SPEED, FINAL_DAMAGE, 10, "none"); + } + } + if (BANDIT_TYPE == "dagger") + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + turbo_attack(); + } + if (BANDIT_TYPE == "ma") + { + POWER_ATTACK = 1; + PlayAnim("once", "break"); + } + if (BANDIT_TYPE == "sword") + { + PlayAnim("once", "break"); + POWER_ATTACK = 1; + } + if (BANDIT_TYPE == "axe") + { + if ((false)) + { + PlayAnim("once", "break"); + LEAP_TARGET = GetEntityIndex(m_hLastSeen); + POWER_ATTACK = 1; + if (GetEntityRange(LEAP_TARGET) < 200) + { + PURE_FLEE = 1; + npcatk_flee(LEAP_TARGET, 300, 2.0); + } + ScheduleDelayedEvent(0.1, "leap_scan"); + } + } + if (BANDIT_TYPE == "mace") + { + PlayAnim("once", "break"); + POWER_ATTACK = 1; + } + } + + void turbo_attack() + { + PlayAnim("critical", ANIM_ATTACK); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 64, 10, 10); + SetMoveSpeed(2.0); + SetAnimMoveSpeed(2.0); + SetAnimFrameRate(3.0); + BASE_FRAMERATE = 3.0; + BASE_MOVESPEED = 3.0; + ScheduleDelayedEvent(10.0, "end_turbo"); + } + + void end_turbo() + { + SetMoveSpeed(1.0); + SetAnimMoveSpeed(1.0); + SetAnimFrameRate(1.0); + BASE_FRAMERATE = 1.0; + BASE_MOVESPEED = 1.0; + } + + void npc_selectattack() + { + if (BANDIT_TYPE == "ma") + { + ATK_TYPE = RandomInt(1, 3); + if ((POWER_ATTACK)) + { + ATK_TYPE = 2; + } + if (ATK_TYPE == 1) + { + ANIM_ATTACK = "aim_punch1"; + } + if (ATK_TYPE == 2) + { + ANIM_ATTACK = "stance_normal_highkick_r1"; + } + if (ATK_TYPE == 3) + { + ANIM_ATTACK = "stance_normal_lowkick_r1"; + } + } + if ((POWER_ATTACK)) + { + if (BANDIT_TYPE == "sword") + { + SetMoveAnim("walk_squatwalk1_R"); + ANIM_ATTACK = "swordjab1_R"; + } + if (BANDIT_TYPE == "axe") + { + if (!(IS_FLEEING)) + { + } + if (!(IsEntityAlive(LEAP_TARGET))) + { + LEAP_TARGET = HUNT_LASTTARGET; + } + } + if (BANDIT_TYPE == "mace") + { + SetMoveAnim("walk_squatwalk1_R"); + ANIM_ATTACK = "battleaxe_swing1_R"; + } + } + } + + void leap_at() + { + if ((AM_LEAPING)) return; + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + POWER_ATTACK = 0; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_at2"); + } + + void leap_at2() + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + PlayAnim("critical", ANIM_HOP); + AS_ATTACKING = GetGameTime(); + ScheduleDelayedEvent(0.1, "bandit_charge"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + OLD_Z = (GetMonsterProperty("origin")).z; + DO_STUN = 1; + ScheduleDelayedEvent(0.5, "ground_scan"); + } + + void leap_away() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_away2"); + } + + void leap_away2() + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + PlayAnim("critical", ANIM_HOP); + AS_ATTACKING = GetGameTime(); + ScheduleDelayedEvent(0.1, "bandit_hop"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + } + + void bandit_charge() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void bandit_hop() + { + int JUMP_HEIGHT = RandomInt(350, 450); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void reset_leaping() + { + AM_LEAPING = 0; + } + + void ground_scan() + { + if (!(DO_STUN)) return; + ScheduleDelayedEvent(0.2, "ground_scan"); + string MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + string MY_Z = (GetMonsterProperty("origin")).z; + string DIFF = MY_Z; + DIFF -= MY_GROUND; + if (DIFF < 5) + { + DO_STUN = 0; + } + if ((DO_STUN)) return; + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 60, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128, 1, 100 + } + + void attack() + { + AS_ATTACKING = GetGameTime(); + if ((IS_FLEEING)) return; + if (WEAPON == 0) + { + SetAngles("add_view.pitch"); + FINAL_DAMAGE = ARROW_DAMAGE; + npcatk_adj_attack(); + AS_ATTACKING = GetGameTime(); + TossProjectile("proj_arrow_frost", /* TODO: $relpos */ $relpos(0, 0, 2), "none", ATTACK_SPEED, FINAL_DAMAGE, ATTACK_COF, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + bow_sound(); + } + if (WEAPON != 0) + { + ADJ_RANGE = ATTACK_RANGE; + npcatk_range_adj(); + } + if (BANDIT_TYPE == "dagger") + { + smallswing_sound(); + string FINAL_DAMAGE = DMG_DAGGER; + if ((TURBO_ON)) + { + FINAL_DAMAGE *= 2; + } + npcatk_adj_attack(); + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + if (BANDIT_TYPE == "ma") + { + ma_sound(); + string FINAL_DAMAGE = DMG_MA; + string HIT_CHANCE = ATTACK_PERCENTAGE; + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + float HIT_CHANCE = 1.0; + } + npcatk_adj_attack(); + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, HIT_CHANCE, "slash"); + } + if (BANDIT_TYPE == "sword") + { + bigswing_sound(); + string FINAL_DAMAGE = DMG_SWORD; + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + } + npcatk_adj_attack(); + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + if (BANDIT_TYPE == "axe") + { + bigswing_sound(); + string FINAL_DAMAGE = DMG_AXE; + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + } + npcatk_adj_attack(); + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, ATTACK_PERCENTAGE, "slash"); + } + if (BANDIT_TYPE == "mace") + { + bigswing_sound(); + string FINAL_DAMAGE = DMG_MACE; + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + } + npcatk_adj_attack(); + if ((POWER_ATTACK)) + { + FINAL_DAMAGE *= 2; + } + DoDamage(HUNT_LASTTARGET, ADJ_RANGE, FINAL_DAMAGE, ATTACK_PERCENTAGE, "slash"); + if (RandomInt(1, 3) == 1) + { + ApplyEffect(HUNT_LASTTARGET, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), RandomInt(10, 20)); + } + } + } + + void reset_power_attack() + { + POWER_ATTACK = 0; + ANIM_ATTACK = ORIG_ATTACK; + SetMoveAnim(ANIM_RUN); + } + + void game_dodamage() + { + if (WEAPON == 0) + { + if (!(param1)) + { + CHANGE_POSITION += 1; + } + if ((param1)) + { + if (IsValidPlayer(param2) == 1) + { + CHANGE_POSITION = -2; + } + if (CHANGE_POSITION < -5) + { + CHANGE_POSITION = 0; + } + } + } + if (BANDIT_TYPE == "ma") + { + if ((param1)) + { + } + if (!(POWER_ATTACK)) + { + } + if (ATK_TYPE > 1) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(10, 200, 10)); + } + if ((POWER_ATTACK)) + { + if (BANDIT_TYPE == "ma") + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + reset_power_attack(); + if ((param1)) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 200, 200)); + ApplyEffect(param2, "effects/debuff_stun", 10, GetEntityIndex(GetOwner())); + } + if (BANDIT_TYPE == "sword") + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + reset_power_attack(); + if ((param1)) + { + } + ApplyEffect(param2, "effects/dot_cold_freeze", Random(5, 10), GetEntityIndex(GetOwner())); + } + if (BANDIT_TYPE == "mace") + { + EmitSound(GetOwner(), 0, "player/shout1.wav", 10); + reset_power_attack(); + SpawnNPC("monsters/summon/stun_burst", GetEntityOrigin(param2), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128 + } + } + } + + void bow_sound() + { + EmitSound(GetOwner(), 0, SOUND_BOW, 10); + } + + void bigswing_sound() + { + EmitSound(GetOwner(), 0, "weapons/swingsmall.wav", 8); + } + + void smallswing_sound() + { + EmitSound(GetOwner(), 0, "weapons/swingsmall.wav", 8); + } + + void ma_sound() + { + // PlayRandomSound from: "player/jab1.wav", "player/jab2.wav" + array sounds = {"player/jab1.wav", "player/jab2.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void attack_jab() + { + attack(); + } + + void kick_high() + { + attack(); + } + + void kick_low() + { + attack(); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(BANDIT_TYPE == "ma")) return; + if ((I_R_FROZEN)) return; + int LEAP_CHANCE = RandomInt(1, 10); + if (param1 > 100) + { + int LEAP_CHANCE = 1; + } + if (param1 > 20) + { + if (LEAP_CHANCE == 1) + { + } + leap_away(GetEntityIndex(m_hLastStruck)); + } + } + + void reset_leap_up_delay() + { + LEAP_UP_DELAY = 0; + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(BANDIT_TYPE == "dagger")) return; + string HP_TO_GIVE = param2; + string MAX_CHECK = GetMonsterHP(); + MAX_CHECK += HP_TO_GIVE; + if (!(MAX_CHECK < GetMonsterMaxHP())) return; + HealEntity(GetOwner(), HP_TO_GIVE); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 80, 0.5, 0.5); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + } + + void leap_scan() + { + if (!(POWER_ATTACK)) return; + ScheduleDelayedEvent(0.25, "leap_scan"); + if ((IS_FLEEING)) return; + if ((IsEntityAlive(LEAP_TARGET))) + { + leap_at(LEAP_TARGET); + } + if (!(IsEntityAlive(LEAP_TARGET))) + { + LEAP_TARGET = m_hAttackTarget; + if (m_hAttackTarget == "unset") + { + leap_at(LEAP_TARGET); + } + } + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_elite_archer.as b/scripts/angelscript/monsters/bandit_elite_archer.as new file mode 100644 index 00000000..dc6776cd --- /dev/null +++ b/scripts/angelscript/monsters/bandit_elite_archer.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_elite.as" + +namespace MS +{ + +class BanditEliteArcher : CGameScript +{ + int WEAPON; + + BanditEliteArcher() + { + WEAPON = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_elite_axe.as b/scripts/angelscript/monsters/bandit_elite_axe.as new file mode 100644 index 00000000..5db470fc --- /dev/null +++ b/scripts/angelscript/monsters/bandit_elite_axe.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_elite.as" + +namespace MS +{ + +class BanditEliteAxe : CGameScript +{ + int WEAPON; + + BanditEliteAxe() + { + WEAPON = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_elite_dagger.as b/scripts/angelscript/monsters/bandit_elite_dagger.as new file mode 100644 index 00000000..980a7cb5 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_elite_dagger.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_elite.as" + +namespace MS +{ + +class BanditEliteDagger : CGameScript +{ + int WEAPON; + + BanditEliteDagger() + { + WEAPON = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_elite_mace.as b/scripts/angelscript/monsters/bandit_elite_mace.as new file mode 100644 index 00000000..55cee88c --- /dev/null +++ b/scripts/angelscript/monsters/bandit_elite_mace.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_elite.as" + +namespace MS +{ + +class BanditEliteMace : CGameScript +{ + int WEAPON; + + BanditEliteMace() + { + WEAPON = 5; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_elite_random.as b/scripts/angelscript/monsters/bandit_elite_random.as new file mode 100644 index 00000000..3e0d8008 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_elite_random.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bandit_elite.as" + +namespace MS +{ + +class BanditEliteRandom : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/bandit_elite_sword.as b/scripts/angelscript/monsters/bandit_elite_sword.as new file mode 100644 index 00000000..5468bb32 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_elite_sword.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_elite.as" + +namespace MS +{ + +class BanditEliteSword : CGameScript +{ + int WEAPON; + + BanditEliteSword() + { + WEAPON = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_elite_unarmed.as b/scripts/angelscript/monsters/bandit_elite_unarmed.as new file mode 100644 index 00000000..3c6378a6 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_elite_unarmed.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_elite.as" + +namespace MS +{ + +class BanditEliteUnarmed : CGameScript +{ + int WEAPON; + + BanditEliteUnarmed() + { + WEAPON = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_hard.as b/scripts/angelscript/monsters/bandit_hard.as new file mode 100644 index 00000000..a66f7f1b --- /dev/null +++ b/scripts/angelscript/monsters/bandit_hard.as @@ -0,0 +1,310 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/base_aim_proj.as" + +namespace MS +{ + +class BanditHard : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ARROW_DAMAGE; + string AS_ATTACKING; + float ATTACK1_DAMAGE; + int ATTACK_COF; + float ATTACK_PERCENTAGE; + string ATTACK_RANGE; + int ATTACK_SPEED; + int CAN_ATTACK; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + string CHANGE_POSITION; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DROPS_CONTAINER; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string FINAL_DAMAGE; + int HUNT_AGRO; + string MOVE_RANGE; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + string PURE_FLEE; + float RETALIATE_CHANGETARGET_CHANCE; + string SOUND_BOW; + string SOUND_PAIN; + string SOUND_PAIN2; + int TOO_CLOSE; + string WEAPON; + + BanditHard() + { + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_poison"; + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_PAIN2 = "player/armhit1.wav"; + SOUND_BOW = "weapons/bow/bow.wav"; + ANIM_IDLE = "idle"; + ANIM_RUN = "run"; + ANIM_WALK = "walk2"; + ANIM_DEATH = "die_simple"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_ATTACK = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_HEAR = 1; + NPC_GIVE_EXP = 120; + AIM_RATIO = 50; + ARROW_DAMAGE = "$rand(15,40)"; + bowey(); + fistey(); + daggerey(); + swordey(); + axey(); + macey(); + } + + void OnSpawn() override + { + if (WEAPON == "WEAPON") + { + WEAPON = RandomInt(0, 5); + } + SetGold(RandomInt(23, 37)); + SetWidth(32); + SetHeight(92); + SetRace("rogue"); + SetDamageResistance("all", 0.6); + SetHearingSensitivity(3); + SetRoam(true); + SetModel("npc/rogue.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void bowey() + { + if (!(WEAPON == 0)) return; + SetName("Trained Bandit Archer"); + SetHealth(190); + ATTACK_SPEED = 1200; + MOVE_RANGE = ATTACK_SPEED; + ATTACK_RANGE = ATTACK_SPEED; + ATTACK_COF = 0; + ANIM_ATTACK = "shootbow"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 5); + TOO_CLOSE = 0; + DROPS_CONTAINER = 1; + NO_STUCK_CHECKS = 1; + } + + void daggerey() + { + if (!(WEAPON == 1)) return; + SetName("Trained Bandit Rogue"); + SetHealth(190); + MOVE_RANGE = 50; + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = Random(10.5, 12.0); + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "swordjab1_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 1); + DROP_ITEM1 = "smallarms_fangstooth"; + DROP_ITEM1_CHANCE = 0.05; + } + + void fistey() + { + if (!(WEAPON == 2)) return; + SetName("Trained Bandit Martial Artist"); + SetHealth(220); + MOVE_RANGE = 50; + ATTACK_RANGE = 80; + ATTACK1_DAMAGE = Random(8.5, 10.0); + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "aim_punch1"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 0); + } + + void swordey() + { + if (!(WEAPON == 3)) return; + SetName("Trained Bandit Swordsman"); + SetHealth(220); + MOVE_RANGE = 80; + ATTACK_RANGE = 120; + ATTACK1_DAMAGE = Random(10.5, 12.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "swordswing2_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 4); + } + + void axey() + { + if (!(WEAPON == 4)) return; + SetName("Trained Bandit Axeman"); + SetHealth(260); + MOVE_RANGE = 80; + ATTACK_RANGE = 120; + ATTACK1_DAMAGE = Random(11.5, 13.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 3); + } + + void macey() + { + if (!(WEAPON == 5)) return; + SetName("Trained Bandit Berserker"); + SetHealth(260); + MOVE_RANGE = 80; + ATTACK_RANGE = 130; + ATTACK1_DAMAGE = Random(11.5, 13.0); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 2); + } + + void attack() + { + if ((IS_FLEEING)) return; + if (WEAPON == 0) + { + SetAngles("add_view.pitch"); + FINAL_DAMAGE = ARROW_DAMAGE; + npcatk_adj_attack(); + AS_ATTACKING = GetGameTime(); + TossProjectile("proj_arrow_poison", /* TODO: $relpos */ $relpos(0, 0, 2), "none", ATTACK_SPEED, FINAL_DAMAGE, ATTACK_COF, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + EmitSound(GetOwner(), SOUND_BOW); + } + else + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK1_DAMAGE, ATTACK_PERCENTAGE, "slash"); + if (WEAPON == 1) + { + if (RandomInt(1, 3) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", 5, GetOwner(), RandomInt(3, 5)); + } + } + } + } + + void check_attack() + { + if (!(WEAPON == 0)) return; + if ((IS_FLEEING)) return; + if (CHANGE_POSITION > 3) + { + CHANGE_POSITION = 0; + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_RUN); + chicken_run(3); + } + if (!(false)) return; + if (GetEntityRange(m_hLastSeen) < 100) + { + TOO_CLOSE += 0.1; + } + if (TOO_CLOSE > 5) + { + TOO_CLOSE = 0; + PURE_FLEE = 1; + npcatk_flee(m_hLastSeen, 600, 5); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(WEAPON == 0)) return; + if (!(IsValidPlayer(m_hLastStruck) + "add" + CHANGE_POSITION + 1)) return; + } + + void OnDeath(CBaseEntity@ attacker) override + { + int L_DEATHANIM = RandomInt(0, 6); + if (L_DEATHANIM == 0) + { + ANIM_DEATH = "die_simple"; + } + if (L_DEATHANIM == 1) + { + ANIM_DEATH = "die_backwards1"; + } + if (L_DEATHANIM == 2) + { + ANIM_DEATH = "die_backwards"; + } + if (L_DEATHANIM == 3) + { + ANIM_DEATH = "die_forwards"; + } + if (L_DEATHANIM == 4) + { + ANIM_DEATH = "headshot"; + } + if (L_DEATHANIM == 5) + { + ANIM_DEATH = "die_spin"; + } + if (L_DEATHANIM == 6) + { + ANIM_DEATH = "gutshot"; + } + } + + void game_dodamage() + { + if (!(WEAPON == 0)) return; + if (!(param1)) + { + CHANGE_POSITION += 1; + } + if ((param1)) + { + if (IsValidPlayer(param2) == 1) + { + CHANGE_POSITION = -2; + } + if (CHANGE_POSITION < -5) + { + CHANGE_POSITION = 0; + } + } + } + + void npc_targetsighted() + { + if (!(WEAPON == 0)) return; + if ((IS_FLEEING)) return; + if (!(false)) return; + PlayAnim("once", ANIM_ATTACK); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetSolid("none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_hard_archer.as b/scripts/angelscript/monsters/bandit_hard_archer.as new file mode 100644 index 00000000..2d980971 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_hard_archer.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_hard.as" + +namespace MS +{ + +class BanditHardArcher : CGameScript +{ + int WEAPON; + + BanditHardArcher() + { + WEAPON = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_hard_axe.as b/scripts/angelscript/monsters/bandit_hard_axe.as new file mode 100644 index 00000000..3efb3c8d --- /dev/null +++ b/scripts/angelscript/monsters/bandit_hard_axe.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_hard.as" + +namespace MS +{ + +class BanditHardAxe : CGameScript +{ + int WEAPON; + + BanditHardAxe() + { + WEAPON = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_hard_dagger.as b/scripts/angelscript/monsters/bandit_hard_dagger.as new file mode 100644 index 00000000..1ba04321 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_hard_dagger.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_hard.as" + +namespace MS +{ + +class BanditHardDagger : CGameScript +{ + int WEAPON; + + BanditHardDagger() + { + WEAPON = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_hard_mace.as b/scripts/angelscript/monsters/bandit_hard_mace.as new file mode 100644 index 00000000..b159b7ea --- /dev/null +++ b/scripts/angelscript/monsters/bandit_hard_mace.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_hard.as" + +namespace MS +{ + +class BanditHardMace : CGameScript +{ + int WEAPON; + + BanditHardMace() + { + WEAPON = 5; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_hard_random.as b/scripts/angelscript/monsters/bandit_hard_random.as new file mode 100644 index 00000000..ac8dc2c6 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_hard_random.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bandit_hard.as" + +namespace MS +{ + +class BanditHardRandom : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/bandit_hard_sword.as b/scripts/angelscript/monsters/bandit_hard_sword.as new file mode 100644 index 00000000..1df4781c --- /dev/null +++ b/scripts/angelscript/monsters/bandit_hard_sword.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_hard.as" + +namespace MS +{ + +class BanditHardSword : CGameScript +{ + int WEAPON; + + BanditHardSword() + { + WEAPON = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_hard_unarmed.as b/scripts/angelscript/monsters/bandit_hard_unarmed.as new file mode 100644 index 00000000..dbfd53fe --- /dev/null +++ b/scripts/angelscript/monsters/bandit_hard_unarmed.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit_hard.as" + +namespace MS +{ + +class BanditHardUnarmed : CGameScript +{ + int WEAPON; + + BanditHardUnarmed() + { + WEAPON = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_mace.as b/scripts/angelscript/monsters/bandit_mace.as new file mode 100644 index 00000000..4d158c73 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_mace.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit.as" + +namespace MS +{ + +class BanditMace : CGameScript +{ + int WEAPON; + + BanditMace() + { + WEAPON = 5; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_mage.as b/scripts/angelscript/monsters/bandit_mage.as new file mode 100644 index 00000000..d59959e0 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_mage.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit.as" + +namespace MS +{ + +class BanditMage : CGameScript +{ + int WEAPON; + + BanditMage() + { + WEAPON = 6; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_random.as b/scripts/angelscript/monsters/bandit_random.as new file mode 100644 index 00000000..4e292700 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_random.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bandit.as" + +namespace MS +{ + +class BanditRandom : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/bandit_sword.as b/scripts/angelscript/monsters/bandit_sword.as new file mode 100644 index 00000000..102ab88e --- /dev/null +++ b/scripts/angelscript/monsters/bandit_sword.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit.as" + +namespace MS +{ + +class BanditSword : CGameScript +{ + int WEAPON; + + BanditSword() + { + WEAPON = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/bandit_unarmed.as b/scripts/angelscript/monsters/bandit_unarmed.as new file mode 100644 index 00000000..ac794aa3 --- /dev/null +++ b/scripts/angelscript/monsters/bandit_unarmed.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bandit.as" + +namespace MS +{ + +class BanditUnarmed : CGameScript +{ + int WEAPON; + + BanditUnarmed() + { + WEAPON = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/base_aim_proj.as b/scripts/angelscript/monsters/base_aim_proj.as new file mode 100644 index 00000000..f7f79d4c --- /dev/null +++ b/scripts/angelscript/monsters/base_aim_proj.as @@ -0,0 +1,55 @@ +#pragma context server + +namespace MS +{ + +class BaseAimProj : CGameScript +{ + void baseaim_adjust_angles() + { + if (ANGLE_ADJ_DIVIDER == "ANGLE_ADJ_DIVIDER") + { + if (ATTACK_SPEED >= 1000) + { + ANGLE_ADJ_DIVIDER = 60; + } + if (ATTACK_SPEED >= 900) + { + ANGLE_ADJ_DIVIDER = 45; + } + if (ATTACK_SPEED >= 800) + { + ANGLE_ADJ_DIVIDER = 40; + } + if (ATTACK_SPEED >= 700) + { + ANGLE_ADJ_DIVIDER = 30; + } + if (ATTACK_SPEED >= 600) + { + ANGLE_ADJ_DIVIDER = 20; + } + if (ATTACK_SPEED >= 500) + { + ANGLE_ADJ_DIVIDER = 12; + } + if (ATTACK_SPEED < 500) + { + ANGLE_ADJ_DIVIDER = 10; + } + } + string TARGET_POS = GetEntityOrigin(HUNT_LASTTARGET); + if (!(IsValidPlayer(HUNT_LASTTARGET))) + { + string HALF_HEIGHT = GetEntityHeight(HUNT_LASTTARGET); + HALF_HEIGHT /= 2; + TARGET_POS += "z"; + } + float TARGET_DIST = Distance(TARGET_POS, GetMonsterProperty("origin")); + TARGET_DIST /= ANGLE_ADJ_DIVIDER; + SetAngles("add_view.pitch"); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_anti_stuck.as b/scripts/angelscript/monsters/base_anti_stuck.as new file mode 100644 index 00000000..bd729b03 --- /dev/null +++ b/scripts/angelscript/monsters/base_anti_stuck.as @@ -0,0 +1,659 @@ +#pragma context server + +namespace MS +{ + +class BaseAntiStuck : CGameScript +{ + string AS_ATTACKING; + int AS_CAN_MOVE; + int AS_CRITICAL_THRESH; + int AS_DIST_THRESH; + string AS_FLEE_POINT; + int AS_HITBACK_FRUST; + string AS_HITBACK_FRUST_RUNS; + int AS_IN_RANGE_CLICKS; + string AS_LAST_HIT; + string AS_LAST_POS; + string AS_LAST_POS_SET; + string AS_LAST_STRIKE; + float AS_MAX_ATTACK_TIME; + int AS_MISS_COUNT; + string AS_MOVEPROX; + string AS_NEXT_CHECK; + string AS_SPAWN_POINT; + string AS_STARTED; + float AS_STUCK_FREQ; + string AS_TELE_OUT; + string AS_TELE_POINT; + int AS_TELE_THRESH; + int AS_UNSTUCK_ANG; + float AS_WIGGLE_DURATION; + string BAST_DID_INIT; + string BAST_FIRST_TEST; + string BAST_FWD; + string BAST_ROT; + string BAST_SPAWN_POS; + string BAST_STUCK_DID_INIT; + int BAST_TELEPORTING; + string BAST_VFLOAT; + string NEXT_HITFRUST_RECORD; + string NO_SPAWN_STUCK_CHECK; + int NPC_FORCED_MOVEDEST; + int STUCK_COUNT; + + BaseAntiStuck() + { + AS_MAX_ATTACK_TIME = 3.0; + AS_STUCK_FREQ = 0.25; + AS_WIGGLE_DURATION = 2.0; + AS_TELE_THRESH = 10; + AS_CRITICAL_THRESH = 40; + AS_DIST_THRESH = 1; + } + + void OnSpawn() override + { + STUCK_COUNT = 0; + AS_HITBACK_FRUST = 0; + AS_UNSTUCK_ANG = 0; + AS_IN_RANGE_CLICKS = 0; + AS_MISS_COUNT = 0; + if ((I_R_PET)) + { + NO_SPAWN_STUCK_CHECK = 1; + } + if ((NO_SPAWN_STUCK_CHECK)) return; + AS_SPAWN_POINT = GetMonsterProperty("origin"); + ScheduleDelayedEvent(1.0, "as_check_spawn_stuck"); + } + + void as_check_spawn_stuck() + { + AS_MOVEPROX = GetMonsterProperty("moveprox"); + if ((NO_SPAWN_STUCK_CHECK)) return; + } + + void as_tell_allies_move() + { + string CUR_TARG = GetToken(AS_ALLY_LIST, i, ";"); + if (GetRelationship(GetOwner()) == "ally") + { + string L_AS_MOVEPROX = AS_MOVEPROX; + L_AS_MOVEPROX /= 3; + if (GetEntityRange(CUR_TARG) < L_AS_MOVEPROX) + { + } + AS_TELE_OUT = 1; + CallExternal(CUR_TARG, "as_ally_stuck_so_move", AS_SPAWN_POINT); + } + if (!(NPC_NO_AUTO_ACTIVATE)) + { + if ((IsValidPlayer(CUR_TARG))) + { + } + cycle_up("spawned_near_player"); + } + } + + void as_tele_out() + { + if ((param2).findFirst(PARAM) == 0) + { + AS_TELE_POINT = GetEntityOrigin(GetOwner()); + } + else + { + AS_TELE_POINT = param2; + } + string L_SCAN_RANGE = AS_MOVEPROX; + L_SCAN_RANGE *= 2; + // svplaysound: emitsound ent_me $get(ent_me,origin) AS_MOVEPROX PARAM1 danger L_SCAN_RANGE + EmitSound(GetOwner(), GetEntityOrigin(GetOwner()), AS_MOVEPROX, param1, "danger", L_SCAN_RANGE); + SetEntityOrigin(GetOwner(), Vector3(20000, 10000, -10000)); + PARAM1("as_tele_return"); + } + + void as_tele_return() + { + LogDebug("as_tele_return AS_TELE_POINT"); + SetEntityOrigin(GetOwner(), AS_TELE_POINT); + ScheduleDelayedEvent(0.5, "as_check_spawn_stuck"); + } + + void as_ally_stuck_so_move() + { + if (!(SUSPEND_AI)) + { + npcatk_suspend_ai(3.0, "allystuck"); + } + NPC_FORCED_MOVEDEST = 1; + Vector3 TARGET_ORG = Vector3(0, 0, 0); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + npcatk_setmovedest(/* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0)), 1); + AS_FLEE_POINT = param1; + ScheduleDelayedEvent(0.1, "as_flee_nudge"); + } + + void as_flee_nudge() + { + Vector3 TARGET_ORG = Vector3(0, 0, 0); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 200, 0))); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(AS_STARTED)) + { + string L_SPAWN_TIME = NPC_SPAWN_TIME; + L_SPAWN_TIME += 5.0; + if (GetGameTime() > L_SPAWN_TIME) + { + } + AS_STARTED = 1; + } + else + { + npcatk_anti_stuck(); + } + } + + void npcatk_anti_stuck() + { + float GAME_TIME = GetGameTime(); + if (!(GAME_TIME > AS_NEXT_CHECK)) return; + if ((NO_STUCK_CHECKS)) + { + AS_LAST_POS_SET = 0; + AS_NEXT_CHECK = GAME_TIME; + AS_NEXT_CHECK += 3.0; + } + if ((NO_STUCK_CHECKS)) return; + AS_NEXT_CHECK = GAME_TIME; + AS_NEXT_CHECK += AS_STUCK_FREQ; + if (!(NEW_AI)) + { + string TARG_CHECK = HUNT_LASTTARGET; + } + else + { + string TARG_CHECK = m_hAttackTarget; + } + if (!(IsEntityAlive(TARG_CHECK))) return; + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + string LAST_ATK = AS_ATTACKING; + LAST_ATK += AS_MAX_ATTACK_TIME; + if (TARG_RANGE < ATTACK_HITRANGE) + { + int IN_RANGE = 1; + AS_IN_RANGE_CLICKS += 1; + } + else + { + AS_IN_RANGE_CLICKS = 0; + } + if (AS_MISS_COUNT > 3) + { + if (!(NPC_RANGED)) + { + } + if ((IN_RANGE)) + { + } + if (GAME_TIME < LAST_ATK) + { + } + LogDebug("anti-stuck can t reach)"); + chicken_run(1.0); + AS_MISS_COUNT = 0; + } + if (!(GAME_TIME > LAST_ATK)) return; + if ((I_R_FROZEN)) return; + if ((IS_FLEEING)) return; + if ((SUSPEND_AI)) return; + if ((NPC_WINKED_OUT)) return; + if (!(IsEntityAlive(GetOwner()))) return; + if (!(NPC_RANGED)) + { + if ((IsEntityAlive(m_hAttackTarget))) + { + if (TARG_RANGE < ATTACK_RANGE) + { + int EXIT_SUB = 1; + } + if (TARG_RANGE < ATTACK_MOVERANGE) + { + int EXIT_SUB = 1; + } + } + if (!(EXIT_SUB)) + { + } + } + else + { + if ((NPC_CANSEE_TARGET)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string MY_ORG = GetEntityOrigin(GetOwner()); + if (!(Distance(MY_ORG, GetMonsterProperty("movedest.origin")) >= GetMonsterProperty("movedest.prox"))) return; + if (Distance(AS_LAST_POS, MY_ORG) < AS_DIST_THRESH) + { + if ((AS_LAST_POS_SET)) + { + } + LogDebug("anti-stuck no progress"); + STUCK_COUNT += 1; + if (STUCK_COUNT >= 1) + { + } + if (!(AS_FIRST_STUCK)) + { + LogDebug("base_anti_stuck - first stuck"); + AS_FIRST_STUCK = 1; + string L_ORG = GetEntityOrigin(GetOwner()); + string L_TESTPOS = L_ORG; + SetEntityOrigin(GetOwner(), L_TESTPOS); + string reg.npcmove.endpos = L_TESTPOS; + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 16, 0)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner()); + if ("game.ret.npcmove.dist" == 0) + { + BAST_SPAWNCHECK = 1; + as_tele_stuck_check(); + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if ((AS_CUSTOM_UNSTUCK)) + { + npc_stuck(); + } + else + { + chicken_run(Random(0.5, 1.0)); + } + } + else + { + STUCK_COUNT = 0; + } + AS_LAST_POS = MY_ORG; + AS_LAST_POS_SET = 1; + if (STUCK_COUNT == AS_TELE_THRESH) + { + LogDebug("anti-stuck tele"); + if (!(I_R_PET)) + { + ext_wink_out(MY_ORG, Random(4, 5)); + } + STUCK_COUNT += 1; + } + if (!(STUCK_COUNT >= AS_CRITICAL_THRESH)) return; + LogDebug("anti-stuck critical! tele home"); + if (!(I_R_PET)) + { + ext_wink_out(NPC_SPAWN_LOC, Random(4, 5)); + } + STUCK_COUNT = 0; + } + + void npc_selectattack() + { + AS_ATTACKING = GetGameTime(); + } + + void game_dynamically_created() + { + NO_SPAWN_STUCK_CHECK = 1; + if (!(AS_SUMMON_TELE_CHECK)) return; + as_tele_stuck_check(); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + AS_LAST_HIT = GetGameTime(); + AS_MISS_COUNT = 0; + } + + void game_dodamage() + { + if ((NO_STUCK_CHECKS)) return; + if ((SUSPEND_AI)) return; + if (!(param1)) + { + AS_MISS_COUNT += 1; + } + else + { + AS_MISS_COUNT = 0; + AS_HITBACK_FRUST = 0; + AS_HITBACK_FRUST_RUNS = 0; + } + AS_LAST_STRIKE = GetGameTime(); + } + + void OnDamage(int damage) override + { + if ((NO_STUCK_CHECKS)) return; + if ((SUSPEND_AI)) return; + if (GetGameTime() > AS_ATTACKING) + { + if (GetGameTime() > NEXT_HITFRUST_RECORD) + { + } + NEXT_HITFRUST_RECORD = GetGameTime(); + NEXT_HITFRUST_RECORD += 1.0; + AS_HITBACK_FRUST += 1; + } + if (AS_HITBACK_FRUST >= 7) + { + string LS_PLUS5 = AS_LAST_STRIKE; + LS_PLUS5 += 5.0; + if (GetGameTime() > AS_LAST_STRIKE) + { + } + AS_HITBACK_FRUST = 0; + AS_HITBACK_FRUST_RUNS += 1; + float MAX_RUN_TIME = 3.0; + MAX_RUN_TIME *= AS_HITBACK_FRUST_RUNS; + chicken_run(Random(1.0, MAX_RUN_TIME)); + LogDebug("anti-stuck hitback frust"); + } + } + + void game_stuck() + { + LogDebug("game_stuck"); + if (!(G_DEVELOPER_MODE)) return; + EmitSound(GetOwner(), 0, "amb/quest1.wav", 10); + } + + void npcatk_setmovedest() + { + if (!(NPC_NO_AI)) return; + SetMoveDest(param1); + } + + void as_check_can_move() + { + AS_CAN_MOVE = 0; + string reg.npcmove.endpos = GetEntityOrigin(GetOwner()); + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 2)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), m_hAttackTarget); + if ("game.ret.npcmove.dist" > 0) + { + AS_CAN_MOVE = 1; + } + if ((AS_CAN_MOVE)) return; + string reg.npcmove.endpos = GetEntityOrigin(GetOwner()); + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 2, 0)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), m_hAttackTarget); + if ("game.ret.npcmove.dist" > 0) + { + AS_CAN_MOVE = 1; + } + if ((AS_CAN_MOVE)) return; + string reg.npcmove.endpos = GetEntityOrigin(GetOwner()); + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 2)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), m_hAttackTarget); + if ("game.ret.npcmove.dist" > 0) + { + AS_CAN_MOVE = 1; + } + if ((AS_CAN_MOVE)) return; + string reg.npcmove.endpos = GetEntityOrigin(GetOwner()); + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, -2)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), m_hAttackTarget); + if ("game.ret.npcmove.dist" > 0) + { + AS_CAN_MOVE = 1; + } + if ((AS_CAN_MOVE)) return; + string reg.npcmove.endpos = GetEntityOrigin(GetOwner()); + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, -2, 0)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), m_hAttackTarget); + if ("game.ret.npcmove.dist" > 0) + { + AS_CAN_MOVE = 1; + } + if ((AS_CAN_MOVE)) return; + } + + void as_tele_stuck_check() + { + if (!(BAST_STUCK_DID_INIT)) + { + BAST_STUCK_DID_INIT = 1; + BAST_FIRST_TEST = 1; + BAST_ROT = 0; + BAST_FWD = 0; + BAST_VFLOAT = 0; + BAST_SPAWN_POS = GetEntityOrigin(GetOwner()); + if ((GetEntityProperty(GetOwner(), "fly"))) + { + BAST_MOB_HEIGHT_ADJ = GetEntityHeight(GetOwner()); + BAST_MOB_HEIGHT_ADJ *= 1.1; + } + } + string L_TESTPOS = BAST_SPAWN_POS; + string L_VADJ = BAST_MOB_HEIGHT_ADJ; + L_VADJ += BAST_VFLOAT; + L_TESTPOS += /* TODO: $relpos */ $relpos(Vector3(0, BAST_ROT, 0), Vector3(0, BAST_FWD, BAST_VFLOAT)); + if ((G_DEVELOPER_MODE)) + { + string L_TESTPOS_ADJ = L_TESTPOS; + L_TESTPOS_ADJ += "z"; + Effect("beam", "point", "lgtning.spr", 20, L_TESTPOS, L_TESTPOS_ADJ, Vector3(255, 0, 255), 200, 0, 0.1); + } + SetEntityOrigin(GetOwner(), L_TESTPOS); + string reg.npcmove.endpos = L_TESTPOS; + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 16, 0)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner()); + if ("game.ret.npcmove.dist" == 0) + { + LogDebug("as_tele_stuck_check stuck @ BAST_FWD BAST_MOB_HEIGHT_ADJ L_TESTPOS"); + BAST_ROT += 15; + BAST_FWD += 4; + BAST_VFLOAT += 2; + if (BAST_VFLOAT > 64) + { + BAST_VFLOAT = -64; + } + if (BAST_ROT > 359) + { + BAST_ROT = 0; + } + SetEntityOrigin(GetOwner(), BAST_SPAWN_POS); + if (BAST_FWD < 640) + { + BAST_FIRST_TEST = 0; + ScheduleDelayedEvent(0.1, "as_tele_stuck_check"); + } + else + { + if ((BAST_SPAWNCHECK)) + { + BAST_SPAWNCHECK = 0; + return; + } + BAST_STUCK_DID_INIT = 0; + BAST_PLAYER_LIST = "BAST_PLAYER_LIST"; + as_tele_to_player_loop(); + } + } + else + { + BAST_STUCK_DID_INIT = 0; + STUCK_COUNT = 0; + if (!(BAST_FIRST_TEST)) + { + } + SetEntityOrigin(GetOwner(), L_TESTPOS); + } + } + + void as_tele_to_player_loop() + { + BAST_TELEPORTING = 1; + if (GetPlayerCount() == 0) + { + LogDebug("as_tele_to_player_loop noplayers"); + ScheduleDelayedEvent(20.0, "as_tele_to_player_loop"); + BAST_DID_INIT = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(BAST_DID_INIT)) + { + LogDebug("as_tele_to_player_loop init"); + BAST_DID_INIT = 1; + BAST_SPAWN_POS = GetEntityOrigin(GetOwner()); + if ((param1).findFirst(PARAM) == 0) + { + GetAllPlayers(BAST_PLAYER_LIST); + BAST_PLAYER_LIST = /* TODO: $sort_entlist */ $sort_entlist(BAST_PLAYER_LIST, "range"); + BAST_TEST_PLAYER = GetToken(BAST_PLAYER_LIST, 0, ";"); + } + else + { + BAST_TEST_PLAYER = param1; + } + if ((GetEntityProperty(GetOwner(), "fly"))) + { + BAST_MOB_HEIGHT_ADJ = GetEntityHeight(GetOwner()); + BAST_MOB_HEIGHT_ADJ *= 1.1; + } + LogDebug("as_tele_to_player_loop init selecttarget GetEntityName(param1)"); + } + BAST_ROT += 5; + if (BAST_ROT > 359) + { + BAST_ROT = 0; + } + if ((NPC_TELEHUNT)) + { + BAST_ROT = Random(0, 359.99); + } + string L_DIST = GetEntityWidth(GetOwner()); + L_DIST *= 2; + if (L_DIST < 48) + { + int L_DIST = 48; + } + if ((NPC_TELEHUNT)) + { + if ((NPC_RANGED)) + { + } + if ((NPC_BATTLE_ALLY)) + { + if ((IsValidPlayer(BAST_TEST_PLAYER))) + { + int EXIT_SUB = 1; + } + } + if (!(EXIT_SUB)) + { + } + float L_DIST = Random(384, 768); + } + string L_TELE_POINT = GetEntityOrigin(BAST_TEST_PLAYER); + L_TELE_POINT += /* TODO: $relpos */ $relpos(Vector3(0, BAST_ROT, 0), Vector3(0, L_DIST, BAST_MOB_HEIGHT_ADJ)); + if ((G_DEVELOPER_MODE)) + { + string L_TELE_POINT_ADJ = L_TELE_POINT; + L_TEST_POS_ADJ += "z"; + Effect("beam", "point", "lgtning.spr", 20, L_TELE_POINT, L_TELE_POINT_ADJ, Vector3(255, 0, 255), 200, 0, 0.1); + } + SetEntityOrigin(GetOwner(), L_TELE_POINT); + string reg.npcmove.endpos = L_TELE_POINT; + string L_MY_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, L_MY_ANG, 0), Vector3(-16, 0, 0)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner()); + if ("game.ret.npcmove.dist" == 0) + { + LogDebug("as_tele_to_player_loop stuck @ GetEntityName(BAST_TEST_PLAYER) L_DIST BAST_MOB_HEIGHT_ADJ L_TELE_POINT"); + SetEntityOrigin(GetOwner(), BAST_SPAWN_POS); + if (!(IsEntityAlive(BAST_TEST_PLAYER))) + { + BAST_DID_INIT = 0; + if ((NPC_TELEHUNT)) + { + BAST_TELEPORTING = 0; + int EXIT_SUB = 1; + } + } + if (!(EXIT_SUB)) + { + } + ScheduleDelayedEvent(0.1, "as_tele_to_player_loop"); + } + else + { + LogDebug("as_tele_to_player_loop success , exiting"); + STUCK_COUNT = 0; + BAST_DID_INIT = 0; + BAST_TELEPORTING = 0; + SetEntityOrigin(GetOwner(), L_TELE_POINT); + if ((NPC_TELEHUNTER_FX)) + { + if (NPC_TELEHUNTER_FX == 1) + { + string L_SCALE1 = GetEntityHeight(GetOwner()); + if (L_SCALE1 > 256) + { + int L_SCALE1 = 256; + } + string L_SCALE_RATIO = L_SCALE1; + L_SCALE_RATIO /= 256; + string L_SCALE1 = /* TODO: $ratio */ $ratio(L_SCALE_RATIO, 0.5, 3.0); + string L_SCALE2 = /* TODO: $ratio */ $ratio(L_SCALE_RATIO, 1.0, 6.0); + string L_LIGHT_RAD1 = /* TODO: $ratio */ $ratio(L_SCALE_RATIO, 64, 256); + string L_LIGHT_RAD2 = /* TODO: $ratio */ $ratio(L_SCALE_RATIO, 128, 512); + LogDebug("as_tele_to_player_loop L_SCALE_RATIO"); + ClientEvent("new", "all", "effects/sfx_sprite_in_fancy", BAST_SPAWN_POS, "xflare1.spr", 20, L_SCALE1, Vector3(255, 255, 255), L_LIGHT_RAD1, "magic/teleport.wav"); + ClientEvent("new", "all", "effects/sfx_sprite_in_fancy", GetEntityOrigin(GetOwner()), "xflare1.spr", 20, L_SCALE2, Vector3(255, 255, 255), L_LIGHT_RAD2, "magic/spawn.wav"); + } + else + { + if (NPC_TELEHUNTER_FX == 2) + { + } + else + { + if (NPC_TELEHUNTER_FX > 2) + { + npc_teleport_fx(BAST_SPAWN_POS, GetEntityOrigin(GetOwner())); + } + } + } + } + else + { + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + } + npcatk_settarget(BAST_TEST_PLAYER); + npc_teleported(); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_battle_ally.as b/scripts/angelscript/monsters/base_battle_ally.as new file mode 100644 index 00000000..7c724f2a --- /dev/null +++ b/scripts/angelscript/monsters/base_battle_ally.as @@ -0,0 +1,318 @@ +#pragma context server + +namespace MS +{ + +class BaseBattleAlly : CGameScript +{ + string AI_NO_TARGET_STRING; + int ALLY_AS_UNSTUCK_ANG; + int ALLY_FOLLOW_CLOSE_DIST; + int ALLY_FOLLOW_NORM_DIST; + int ALLY_FOLLOW_ON; + int ALLY_FOLLOW_PLR_DIST; + string ALLY_FOLLOW_PLR_ID; + string ALLY_FPLAYER_LIST; + string ALLY_FWD_JUMP_STR; + int ALLY_IS_LEADER; + string ALLY_JUMP_STR; + int ALLY_JUMP_THRESHOLD; + int ALLY_MAX_JUMP_RANGE; + int ALLY_MIN_DISTANCE; + int ALLY_MOVE_AWAY_DIST; + string ALLY_NEXT_FAS_CHECK; + string ALLY_NEXT_FOLLOW_CHECK; + string ALLY_NEXT_REGEN; + string ALLY_OLD_DIST; + float ALLY_REGEN_RATIO; + int ALLY_STUCK_COUNT; + string ANIM_ALLY_JUMP; + float CYCLE_TIME; + float FREQ_ALLYJUMP; + int NO_STUCK_CHECKS; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_BATTLE_ALLY; + int NPC_FIGHTS_NPCS; + int NPC_NO_PLAYER_DMG; + string SOUND_ALLY_JUMP; + + BaseBattleAlly() + { + NPC_NO_PLAYER_DMG = 1; + NPC_BATTLE_ALLY = 1; + NPC_FIGHTS_NPCS = 1; + SetSayTextRange(2048); + NO_STUCK_CHECKS = 1; + AI_NO_TARGET_STRING = "unset"; + NPC_ALLY_RESPONSE_RANGE = 4096; + ALLY_MIN_DISTANCE = 42; + ALLY_FOLLOW_CLOSE_DIST = 60; + ALLY_FOLLOW_NORM_DIST = 128; + ALLY_MOVE_AWAY_DIST = 64; + ALLY_FOLLOW_PLR_DIST = 128; + ALLY_REGEN_RATIO = 0.1; + ALLY_MAX_JUMP_RANGE = 600; + FREQ_ALLYJUMP = Random(4.0, 5.0); + ALLY_STUCK_COUNT = 0; + ALLY_AS_UNSTUCK_ANG = 0; + ANIM_ALLY_JUMP = "jump"; + SOUND_ALLY_JUMP = "monsters/orc/attack1.wav"; + ALLY_JUMP_THRESHOLD = 150; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) return; + if (!(ALLY_FOLLOW_ON)) return; + float GAME_TIME = GetGameTime(); + CYCLE_TIME = 0.1; + if (!(m_hAttackTarget == AI_NO_TARGET_STRING)) return; + if (GAME_TIME > ALLY_NEXT_FAS_CHECK) + { + if ((IsEntityAlive(ALLY_FOLLOW_PLR_ID))) + { + } + ALLY_NEXT_FAS_CHECK = GAME_TIME; + ALLY_NEXT_FAS_CHECK += 0.5; + ally_stuck_check(); + } + if (GAME_TIME > ALLY_NEXT_REGEN) + { + if (GetEntityHealth(GetOwner()) < GetEntityMaxHealth(GetOwner())) + { + } + string ALLY_REGEN_AMT = GetEntityMaxHealth(GetOwner()); + ALLY_REGEN_AMT *= ALLY_REGEN_RATIO; + HealEntity(GetOwner(), ALLY_REGEN_AMT); + ALLY_NEXT_REGEN = GAME_TIME; + ALLY_NEXT_REGEN += 1.0; + } + if ((SUSPEND_AI)) return; + if (!(GetPlayerCount() > 0)) return; + if (GAME_TIME > ALLY_NEXT_FOLLOW_CHECK) + { + int FIND_NEW_FOLLOW = 1; + } + if (!(IsEntityAlive(ALLY_FOLLOW_PLR_ID))) + { + int FIND_NEW_FOLLOW = 1; + } + if ((FIND_NEW_FOLLOW)) + { + if ("game.playersnb" > 0) + { + } + ALLY_NEXT_FOLLOW_CHECK = GAME_TIME; + ALLY_NEXT_FOLLOW_CHECK += 10.0; + ALLY_FPLAYER_LIST = 0; + GetAllPlayers(ALLY_FPLAYER_LIST); + ALLY_FPLAYER_LIST = /* TODO: $sort_entlist */ $sort_entlist(ALLY_FPLAYER_LIST, "range"); + ALLY_FOLLOW_PLR_ID = GetToken(ALLY_FPLAYER_LIST, 0, ";"); + } + if (!(IsEntityAlive(ALLY_FOLLOW_PLR_ID))) return; + string L_ALLY_RANGE = GetEntityRange(ALLY_FOLLOW_PLR_ID); + string L_ALLY_ORG = GetEntityOrigin(ALLY_FOLLOW_PLR_ID); + int L_ALLY_RUN_RANGE = 200; + if ((ALLY_IS_LEADER)) + { + string L_ORG = GetEntityOrigin(GetOwner()); + float L_ALLY_RANGE = Distance(L_ORG, ALLY_LEADER_DEST); + string L_ALLY_ORG = ALLY_LEADER_DEST; + int L_ALLY_RUN_RANGE = 64; + } + if (GAME_TIME > NEXT_ALLYJUMP) + { + if (L_ALLY_RANGE < ALLY_MAX_JUMP_RANGE) + { + } + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARG_Z = (L_ALLY_ORG).z; + if (!(ALLY_IS_LEADER)) + { + TARG_Z -= 38; + } + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > ALLY_JUMP_THRESHOLD) + { + ally_hop(Z_DIFF); + NEXT_ALLYJUMP = GAME_TIME; + NEXT_ALLYJUMP += FREQ_ALLYJUMP; + } + } + if (L_ALLY_RANGE > L_ALLY_RUN_RANGE) + { + SetMoveAnim(ANIM_RUN); + } + else + { + SetMoveAnim(ANIM_WALK); + } + if (GetEntityRange(ALLY_FOLLOW_PLR_ID) > ALLY_MIN_DISTANCE) + { + if (!(ALLY_IS_LEADER)) + { + SetMoveDest(ALLY_FOLLOW_PLR_ID); + } + else + { + if (GetGameTime() > ALLY_NEXT_LEADER_UPDATE) + { + ALLY_NEXT_LEADER_UPDATE = GetGameTime(); + ALLY_NEXT_LEADER_UPDATE += 0.5; + string L_MOVE_DEST = GetEntityOrigin(ALLY_FOLLOW_PLR_ID); + string L_TRACE_START = L_MOVE_DEST; + string L_PLR_VIEW = GetEntityProperty(ALLY_FOLLOW_PLR_ID, "viewangles"); + L_MOVE_DEST += /* TODO: $relpos */ $relpos(L_PLR_VIEW, Vector3(0, 640, 0)); + string L_MOVE_DEST = TraceLine(L_TRACE_START, L_MOVE_DEST); + L_MOVE_DEST = "z"; + string L_MY_WIDTH = GetEntityWidth(GetOwner()); + SetMoveDest(L_MOVE_DEST); + ALLY_LEADER_DEST = L_MOVE_DEST; + string L_ORG = GetEntityOrigin(GetOwner()); + if (Distance(L_MOVE_DEST, L_ORG) <= L_MY_WIDTH) + { + SetAngles("face.y"); + } + if ((G_DEVELOPER_MODE)) + { + string L_BEAM_Z = L_MOVE_DEST; + L_BEAM_Z += "z"; + Effect("beam", "point", "lgtning.spr", 20, L_MOVE_DEST, L_BEAM_Z, Vector3(255, 0, 255), 200, 0, 0.2); + } + } + } + } + else + { + SetMoveDest(ALLY_FOLLOW_PLR_ID); + } + } + + void OnDamage(int damage) override + { + if (!(GetRelationship(param1) == "enemy")) return; + ALLY_NEXT_REGEN = GetGameTime(); + ALLY_NEXT_REGEN += 20.0; + } + + void ally_follow_close() + { + ALLY_FOLLOW_PLR_DIST = ALLY_FOLLOW_CLOSE_DIST; + } + + void ally_follow_normal() + { + ALLY_FOLLOW_PLR_DIST = ALLY_FOLLOW_NORM_DIST; + } + + void ally_hop() + { + LogDebug("ally_hop"); + EmitSound(GetOwner(), 0, SOUND_ALLY_JUMP, 10); + ALLY_JUMP_STR = param1; + if (ALLY_JUMP_STR > 100) + { + ScheduleDelayedEvent(0.5, "ally_push_forward"); + } + ALLY_JUMP_STR *= 5; + npcatk_suspend_ai(1.0); + if (!(ALLY_IS_LEADER)) + { + ALLY_FWD_JUMP_STR = GetEntityRange(ALLY_FOLLOW_PLR_ID); + } + else + { + string L_ORG = GetEntityOrigin(GetOwner()); + ALLY_FWD_JUMP_STR = Distance(L_ORG, ALLY_LEADER_DEST); + LogDebug("ally_hop fwd ALLY_FWD_JUMP_STR"); + } + PlayAnim("critical", ANIM_ALLY_JUMP); + ScheduleDelayedEvent(0.1, "ally_jump_boost"); + } + + void ally_jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, ALLY_FWD_JUMP_STR, ALLY_JUMP_STR)); + } + + void ally_push_forward() + { + if (!(ALLY_IS_LEADER)) + { + SetMoveDest(ALLY_FOLLOW_PLR_ID); + } + else + { + SetMoveDest(ALLY_LEADER_DEST); + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 110, 0)); + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string GROUND_POS = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + MY_Z -= GROUND_POS; + if (!(MY_Z > 20)) return; + ScheduleDelayedEvent(0.1, "ally_push_forward"); + } + + void ally_stuck_check() + { + string MY_ORG = GetEntityOrigin(GetOwner()); + string MY_DEST = GetMonsterProperty("movedest.origin"); + float CUR_DIST = Distance(MY_ORG, MY_DEST); + if (!(CUR_DIST >= GetMonsterProperty("movedest.prox"))) return; + if (CUR_DIST >= ALLY_OLD_DIST) + { + if (ALLY_OLD_DIST != 0) + { + } + ALLY_STUCK_COUNT += 1; + } + else + { + ALLY_STUCK_COUNT = 0; + ALLY_AS_UNSTUCK_ANG = Random(-15.0, 15.0); + ALLY_OLD_DIST = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ALLY_OLD_DIST = CUR_DIST; + if (ALLY_STUCK_COUNT > 1) + { + LogDebug("fsorc_friendly_stuck_check no_progress"); + string MOVE_DEST = MY_ORG; + npcatk_suspend_ai(Random(0.5, 1.0)); + ALLY_AS_UNSTUCK_ANG += 36; + if (ALLY_AS_UNSTUCK_ANG > 359) + { + ALLY_AS_UNSTUCK_ANG = 0; + } + string MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + MY_YAW += ALLY_AS_UNSTUCK_ANG; + if (MY_YAW > 359) + { + MY_YAW = 0; + } + MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 200, 0)); + SetMoveDest(MOVE_DEST); + ALLY_STUCK_COUNT = 0; + } + } + + void set_leader() + { + ALLY_IS_LEADER = 1; + ALLY_FOLLOW_ON = 1; + if (param1 == 0) + { + ALLY_IS_LEADER = 0; + } + } + + void set_follower() + { + ALLY_FOLLOW_ON = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/base_chat.as b/scripts/angelscript/monsters/base_chat.as new file mode 100644 index 00000000..213e06f4 --- /dev/null +++ b/scripts/angelscript/monsters/base_chat.as @@ -0,0 +1,546 @@ +#pragma context server + +namespace MS +{ + +class BaseChat : CGameScript +{ + string ANIM_STEP1; + string ANIM_STEP10; + string ANIM_STEP2; + string ANIM_STEP3; + string ANIM_STEP4; + string ANIM_STEP5; + string ANIM_STEP6; + string ANIM_STEP7; + string ANIM_STEP8; + string ANIM_STEP9; + string BC_END_AUTO_MOUTH_MOVE; + int BC_TOTAL_MOUTH_TIME; + string BUSY_CHATTING; + float CHAT_DELAY; + string CHAT_DELAY_STEP1; + string CHAT_DELAY_STEP10; + string CHAT_DELAY_STEP2; + string CHAT_DELAY_STEP3; + string CHAT_DELAY_STEP4; + string CHAT_DELAY_STEP5; + string CHAT_DELAY_STEP6; + string CHAT_DELAY_STEP7; + string CHAT_DELAY_STEP8; + string CHAT_DELAY_STEP9; + string CHAT_EVENT_STEP1; + string CHAT_EVENT_STEP10; + string CHAT_EVENT_STEP2; + string CHAT_EVENT_STEP3; + string CHAT_EVENT_STEP4; + string CHAT_EVENT_STEP5; + string CHAT_EVENT_STEP6; + string CHAT_EVENT_STEP7; + string CHAT_EVENT_STEP8; + string CHAT_EVENT_STEP9; + string CHAT_SOUND1; + string CHAT_SOUND10; + string CHAT_SOUND2; + string CHAT_SOUND3; + string CHAT_SOUND4; + string CHAT_SOUND5; + string CHAT_SOUND6; + string CHAT_SOUND7; + string CHAT_SOUND8; + string CHAT_SOUND9; + string CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP10; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEP7; + string CHAT_STEP8; + string CHAT_STEP9; + string CHAT_STEPS; + string CONV_ANIMS; + int HAS_BASE_CHAT_INCLUDE; + string RQUEST_NAMES; + string TRADE_RING; + + BaseChat() + { + HAS_BASE_CHAT_INCLUDE = 1; + CONV_ANIMS = "converse2;converse1;talkleft;talkright;lean;pondering;pondering2;pondering3;"; + CHAT_DELAY = 3.0; + RQUEST_NAMES = "0;Galan;Narad;Darrelin;Rudolf;Vadrel;Edrin;Thordac;Slinker;Slinker;Gerald;Mosor;Cathain;"; + } + + void OnSpawn() override + { + SetMenuAutoOpen(1); + } + + void game_menu_getoptions() + { + LogDebug("base_chat game_menu_getoptions"); + if (!(CAN_CHAT != 0)) return; + if ((NO_CHAT)) return; + bchat_before_menus(); + if (!(NO_HAIL)) + { + LogDebug("base_chat reghail"); + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + } + if (!(NO_JOB)) + { + LogDebug("base_chat regjob"); + string reg.mitem.title = "Ask about Jobs"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + } + if (!(NO_RUMOR)) + { + LogDebug("base_chat regrumor"); + string reg.mitem.title = "Ask about Rumors"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_rumor"; + } + LogDebug("game_menu_getoptions Ring Check"); + if ((IsValidPlayer(param1))) + { + if ((ItemExists(param1, "item_ring"))) + { + } + string RQUEST_STAGE = GetPlayerQuestData(param1, "r"); + if (RQUEST_STAGE >= 1) + { + } + string RQUEST_NAME = GetToken(RQUEST_NAMES, RQUEST_STAGE, ";"); + if ((GetMonsterProperty("name")).findFirst(RQUEST_NAME) >= 0) + { + if (REQ_QUEST_NOTDONE == 1) + { + string reg.mitem.title = "Ask about the ring"; + string reg.mitem.type = "callback"; + string reg.mitem.data = RQUEST_STAGE; + string reg.mitem.callback = "rquest_rub_my_back_first"; + } + if (!(REQ_QUEST_NOTDONE)) + { + } + string reg.mitem.title = "Ask about the ring"; + string reg.mitem.type = "callback"; + string reg.mitem.data = RQUEST_STAGE; + string reg.mitem.callback = "give_runaround"; + } + } + bchat_after_menus(); + LogDebug("game_menu_getoptions Post Ring Check"); + } + + void say_rumor() + { + } + + void face_speaker() + { + SetMoveDest(param1); + } + + void chat_loop() + { + if (!(true)) return; + if (!(BUSY_CHATTING)) + { + BUSY_CHATTING = 1; + CHAT_STEP = 0; + } + CHAT_STEP += 1; + if (CHAT_STEP == CHAT_STEPS) + { + BUSY_CHATTING = 0; + npc_chat_done(); + } + if (!(CHAT_STEP <= CHAT_STEPS)) return; + string L_ANIM = "none"; + string L_CHAT_DELAY = CHAT_DELAY; + string L_CHAT_TEXT = "none"; + if (CHAT_STEP == 1) + { + string L_CHAT_TEXT = CHAT_STEP1; + string L_ANIM = ANIM_STEP1; + string L_CHAT_DELAY = CHAT_DELAY_STEP1; + string L_CHAT_SOUND = CHAT_SOUND1; + CHAT_STEP1 = "CHAT_STEP1"; + CHAT_DELAY_STEP1 = "CHAT_DELAY_STEP1"; + ANIM_STEP1 = "ANIM_STEP1"; + string L_CHAT_EVENT = CHAT_EVENT_STEP1; + CHAT_EVENT_STEP1 = "CHAT_EVENT_STEP1"; + CHAT_SOUND1 = "CHAT_SOUND1"; + } + if (CHAT_STEP == 2) + { + string L_CHAT_TEXT = CHAT_STEP2; + string L_ANIM = ANIM_STEP2; + string L_CHAT_DELAY = CHAT_DELAY_STEP2; + string L_CHAT_SOUND = CHAT_SOUND2; + CHAT_STEP2 = "CHAT_STEP2"; + CHAT_DELAY_STEP2 = "CHAT_DELAY_STEP2"; + ANIM_STEP2 = "ANIM_STEP2"; + string L_CHAT_EVENT = CHAT_EVENT_STEP2; + CHAT_EVENT_STEP2 = "CHAT_EVENT_STEP2"; + CHAT_SOUND2 = "CHAT_SOUND2"; + } + if (CHAT_STEP == 3) + { + string L_CHAT_TEXT = CHAT_STEP3; + string L_ANIM = ANIM_STEP3; + string L_CHAT_DELAY = CHAT_DELAY_STEP3; + string L_CHAT_SOUND = CHAT_SOUND3; + CHAT_STEP3 = "CHAT_STEP3"; + CHAT_DELAY_STEP3 = "CHAT_DELAY_STEP3"; + ANIM_STEP3 = "ANIM_STEP3"; + string L_CHAT_EVENT = CHAT_EVENT_STEP3; + CHAT_EVENT_STEP3 = "CHAT_EVENT_STEP3"; + CHAT_SOUND3 = "CHAT_SOUND3"; + } + if (CHAT_STEP == 4) + { + string L_CHAT_TEXT = CHAT_STEP4; + string L_ANIM = ANIM_STEP4; + string L_CHAT_DELAY = CHAT_DELAY_STEP4; + string L_CHAT_SOUND = CHAT_SOUND4; + CHAT_STEP4 = "CHAT_STEP4"; + CHAT_DELAY_STEP4 = "CHAT_DELAY_STEP4"; + ANIM_STEP4 = "ANIM_STEP4"; + string L_CHAT_EVENT = CHAT_EVENT_STEP4; + CHAT_EVENT_STEP4 = "CHAT_EVENT_STEP4"; + CHAT_SOUND4 = "CHAT_SOUND4"; + } + if (CHAT_STEP == 5) + { + string L_CHAT_TEXT = CHAT_STEP5; + string L_ANIM = ANIM_STEP5; + string L_CHAT_DELAY = CHAT_DELAY_STEP5; + string L_CHAT_SOUND = CHAT_SOUND5; + CHAT_STEP5 = "CHAT_STEP5"; + CHAT_DELAY_STEP5 = "CHAT_DELAY_STEP5"; + ANIM_STEP5 = "ANIM_STEP5"; + string L_CHAT_EVENT = CHAT_EVENT_STEP5; + CHAT_EVENT_STEP5 = "CHAT_EVENT_STEP5"; + CHAT_SOUND5 = "CHAT_SOUND5"; + } + if (CHAT_STEP == 6) + { + string L_CHAT_TEXT = CHAT_STEP6; + string L_ANIM = ANIM_STEP6; + string L_CHAT_DELAY = CHAT_DELAY_STEP6; + string L_CHAT_SOUND = CHAT_SOUND6; + CHAT_STEP6 = "CHAT_STEP6"; + CHAT_DELAY_STEP6 = "CHAT_DELAY_STEP6"; + ANIM_STEP6 = "ANIM_STEP6"; + string L_CHAT_EVENT = CHAT_EVENT_STEP6; + CHAT_EVENT_STEP6 = "CHAT_EVENT_STEP6"; + CHAT_SOUND6 = "CHAT_SOUND6"; + } + if (CHAT_STEP == 7) + { + string L_CHAT_TEXT = CHAT_STEP7; + string L_ANIM = ANIM_STEP7; + string L_CHAT_DELAY = CHAT_DELAY_STEP7; + string L_CHAT_SOUND = CHAT_SOUND7; + CHAT_STEP7 = "CHAT_STEP7"; + CHAT_DELAY_STEP7 = "CHAT_DELAY_STEP7"; + ANIM_STEP7 = "ANIM_STEP7"; + string L_CHAT_EVENT = CHAT_EVENT_STEP7; + CHAT_EVENT_STEP7 = "CHAT_EVENT_STEP7"; + CHAT_SOUND7 = "CHAT_SOUND7"; + } + if (CHAT_STEP == 8) + { + string L_CHAT_TEXT = CHAT_STEP8; + string L_ANIM = ANIM_STEP8; + string L_CHAT_DELAY = CHAT_DELAY_STEP8; + string L_CHAT_SOUND = CHAT_SOUND8; + CHAT_STEP8 = "CHAT_STEP8"; + CHAT_DELAY_STEP8 = "CHAT_DELAY_STEP8"; + ANIM_STEP8 = "ANIM_STEP8"; + string L_CHAT_EVENT = CHAT_EVENT_STEP8; + CHAT_EVENT_STEP8 = "CHAT_EVENT_STEP8"; + CHAT_SOUND8 = "CHAT_SOUND8"; + } + if (CHAT_STEP == 9) + { + string L_CHAT_TEXT = CHAT_STEP9; + string L_ANIM = ANIM_STEP9; + string L_CHAT_DELAY = CHAT_DELAY_STEP9; + string L_CHAT_SOUND = CHAT_SOUND9; + CHAT_STEP9 = "CHAT_STEP9"; + CHAT_DELAY_STEP9 = "CHAT_DELAY_STEP9"; + ANIM_STEP9 = "ANIM_STEP9"; + string L_CHAT_EVENT = CHAT_EVENT_STEP9; + CHAT_EVENT_STEP9 = "CHAT_EVENT_STEP9"; + CHAT_SOUND9 = "CHAT_SOUND9"; + } + if (CHAT_STEP == 10) + { + string L_CHAT_TEXT = CHAT_STEP10; + string L_ANIM = ANIM_STEP10; + string L_CHAT_DELAY = CHAT_DELAY_STEP10; + string L_CHAT_SOUND = CHAT_SOUND10; + CHAT_STEP10 = "CHAT_STEP10"; + CHAT_DELAY_STEP10 = "CHAT_DELAY_STEP10"; + ANIM_STEP10 = "ANIM_STEP10"; + string L_CHAT_EVENT = CHAT_EVENT_STEP10; + CHAT_EVENT_STEP10 = "CHAT_EVENT_STEP10"; + CHAT_SOUND10 = "CHAT_SOUND10"; + } + if ((L_ANIM).findFirst("ANIM_STEP") == 0) + { + int NO_ANIM = 1; + } + if (!(NO_ANIM)) + { + PlayAnim("critical", L_ANIM); + } + SayText(L_CHAT_TEXT); + if ((L_CHAT_DELAY).findFirst("CHAT_DELAY_STEP") == 0) + { + string L_CHAT_DELAY = CHAT_DELAY; + } + if ((L_CHAT_EVENT).findFirst("CHAT_EVENT_STEP") == 0) + { + int NO_EVENT = 1; + } + if (!(NO_EVENT)) + { + L_CHAT_DELAY(L_CHAT_EVENT); + } + if ((L_CHAT_SOUND).findFirst("CHAT_SOUND") == 0) + { + int NO_SOUND = 1; + } + if (!(NO_SOUND)) + { + if (L_CHAT_SOUND != "none") + { + } + EmitSound(GetOwner(), 0, L_CHAT_SOUND, 10); + } + if (!(NO_MOUTH_MOVE)) + { + bchat_auto_mouth_move(L_CHAT_DELAY); + } + if (!(CHAT_STEP < CHAT_STEPS)) return; + L_CHAT_DELAY("chat_loop"); + } + + void bchat_mouth_move() + { + BC_TOTAL_MOUTH_TIME = 0; + string RND_SAY1 = "["; + float M_TIME = Random(0.1, 0.3); + BC_TOTAL_MOUTH_TIME += M_TIME; + RND_SAY1 += M_TIME; + RND_SAY1 += "]"; + string RND_SAY2 = "["; + float M_TIME = Random(0.1, 0.3); + BC_TOTAL_MOUTH_TIME += M_TIME; + RND_SAY2 += M_TIME; + RND_SAY2 += "]"; + string RND_SAY3 = "["; + float M_TIME = Random(0.1, 0.3); + BC_TOTAL_MOUTH_TIME += M_TIME; + RND_SAY3 += M_TIME; + RND_SAY3 += "]"; + string RND_SAY4 = "["; + float M_TIME = Random(0.1, 0.3); + BC_TOTAL_MOUTH_TIME += M_TIME; + RND_SAY4 += M_TIME; + RND_SAY4 += "]"; + Say("RND_SAY1 RND_SAY2 RND_SAY3 RND_SAY4"); + BC_TOTAL_MOUTH_TIME += 1.0; + BC_TOTAL_MOUTH_TIME("bchat_close_mouth"); + } + + void bchat_auto_mouth_move() + { + if ((param1).findFirst("PARAM") == 0) + { + } + else + { + BC_END_AUTO_MOUTH_MOVE = GetGameTime(); + BC_END_AUTO_MOUTH_MOVE += param1; + BC_END_AUTO_MOUTH_MOVE -= 1.0; + } + if (GetGameTime() < BC_END_AUTO_MOUTH_MOVE) + { + string RND_SAY = "["; + float M_TIME = Random(0.1, 0.3); + RND_SAY += M_TIME; + RND_SAY += "]"; + Say("RND_SAY"); + M_TIME += 0.1; + M_TIME("bchat_close_mouth"); + M_TIME += 0.1; + M_TIME("bchat_auto_mouth_move"); + } + } + + void bchat_mouth_twitch() + { + float RND_DIST = Random(-1.0, 0.0); + LogDebug("bchat_mouth_twitch RND_DIST"); + SetProp(GetOwner(), "controller1", RND_DIST); + } + + void bchat_close_mouth() + { + if ((NO_CLOSE_MOUTH)) return; + SetProp(GetOwner(), "controller1", 0); + } + + void bchat_open_mouth() + { + SetProp(GetOwner(), "controller1", -1); + } + + void give_runaround() + { + if ((BUSY_CHATTING)) return; + string RQUEST_STEP = param2; + if (RQUEST_STEP == 1) + { + CHAT_STEP = 0; + CHAT_STEPS = 4; + CHAT_STEP1 = "My goodness, Olof sent you to me with this? It almost looks like one of those old bloodstone rings..."; + CHAT_STEP2 = "It's no good without the stone though. I remember Narad was saying he saw one once. They are very rare..."; + CHAT_STEP3 = "So it could be the same one. I don't remember WHERE he said he saw it though..."; + CHAT_STEP4 = "You can find him over in Daragoth, on the outskirts of Deralia. Provided the orcs and spiders haven't killed him."; + chat_loop(); + SetPlayerQuestData(param1, "r"); + } + if (RQUEST_STEP == 2) + { + CHAT_STEP = 0; + CHAT_STEPS = 2; + CHAT_STEP1 = "Oh, yeah, I've seen that ring before... In a play I believe... A famous actor had it..."; + CHAT_STEP2 = "Darrelin, was his name, I believe. Last I heard he moved out by the orc caves to aid actors travelling to Gatecity."; + chat_loop(); + SetPlayerQuestData(param1, "r"); + } + if (RQUEST_STEP == 3) + { + EmitSound(GetOwner(), 0, "voices/mscave/actor-bloodstone.wav", 10); + CHAT_STEP = 0; + CHAT_STEPS = 2; + CHAT_STEP1 = "Ah... That ring looks familiar... It almost looks like Rudolf's old battle ring."; + CHAT_STEP2 = "I think he's up by the old mines playing adventurer again. He's far too old for that..."; + chat_loop(); + SetPlayerQuestData(param1, "r"); + } + if (RQUEST_STEP == 4) + { + SayText("Nice ring by the way! You know, I think Vadrel used to have one just like it!"); + SayText("If memory serves me right, he was stationed at some old outpost."); + } + if (RQUEST_STEP == 5) + { + CHAT_STEP = 0; + CHAT_STEPS = 2; + CHAT_STEP1 = "Ah yes, an old warrior friend of mine had one of those, very useful if you have the stone that goes in it."; + CHAT_STEP2 = "Edrin, his name was. I believe he's now captain of the guard in Edana. He might be able to help you with it."; + chat_loop(); + SetPlayerQuestData(param1, "r"); + } + if (RQUEST_STEP == 6) + { + CHAT_STEP = 0; + CHAT_STEPS = 2; + CHAT_STEP1 = "Oh, one of those old golden bloodstone rings, too bad the stone has come out of it."; + CHAT_STEP2 = "It looks a lot like the one Thordac forged and used to wear. You can find him in Deralia."; + chat_loop(); + SetPlayerQuestData(param1, "r"); + } + if (RQUEST_STEP == 7) + { + CHAT_STEP = 0; + CHAT_STEPS = 2; + CHAT_STEP1 = "Oh, wow! That old thing, I've not seen it since I sold it of to..."; + CHAT_STEP2 = "Slinker! Yeah, that was his name. Slimey guy - still slinks about here somewhere..."; + chat_loop(); + SetPlayerQuestData(param1, "r"); + } + if (RQUEST_STEP == 9) + { + CHAT_STEP = 0; + CHAT_STEPS = 2; + CHAT_STEP1 = "Oh that old ring... Was handy for extort... I mean handy for business back in the day."; + CHAT_SOUND1 = "voices/deralia/slinker_ring.wav"; + CHAT_DELAY_STEP1 = 7.0; + CHAT_STEP2 = "I lost it in a card game with Gerald a looong time ago. He runs the inn now."; + CHAT_DELAY_STEP2 = 5.8; + chat_loop(); + SetPlayerQuestData(param1, "r"); + } + if (RQUEST_STEP == 10) + { + CHAT_STEP = 0; + CHAT_STEPS = 3; + CHAT_STEP1 = "Ah that, I won it in card game, if I recall correctly... Lost it in another the next day."; + CHAT_STEP2 = "Long time ago that was, yet somehow you remember these things..."; + CHAT_STEP3 = "Eh, it was that whino, Mosor, over there in the corner who won it. He might know something about it."; + chat_loop(); + SetPlayerQuestData(param1, "r"); + } + if (RQUEST_STEP == 11) + { + CHAT_STEP = 0; + CHAT_STEPS = 4; + CHAT_STEP1 = "Oh that old thing, not seen it in... Must be twenty seasons now... Before I took to the drink so hard."; + CHAT_STEP2 = "Yeaah, shouldn't have parted with it. I traded it for some ale to Cathain, who made a lot of money off it."; + CHAT_STEP3 = "Boxing, as I recall. Suppose you have to be a warrior to make real use of it. Too bad the stone's gone."; + CHAT_STEP4 = "He's the Quartermaster of the local militia... Might find him in the barracks."; + chat_loop(); + SetPlayerQuestData(param1, "r"); + } + if (RQUEST_STEP == 12) + { + if (!(ItemExists(param1, "item_ring_percept"))) + { + } + CHAT_STEP = 0; + CHAT_STEPS = 5; + SetMoveAnim("idle1"); + SetRoam(false); + SetMoveDest(param1); + CHAT_STEP1 = "Oh wow! I've not seen that thing since I was in the boxing circuit!"; + CHAT_STEP2 = "I used to use it to outlast my opponents, let me wear them down before I go in for the kill!"; + CHAT_STEP3 = "Oh, I'm far too old for that now though. Easier just to keep the recruits in line around here."; + CHAT_STEP4 = "I still have the stone though... It broke off in a fight! Never saw where the ring went till now."; + CHAT_STEP5 = "Tell ya what, you look like someone who could use it. Give me 500 gold, and I'll give you the stone!"; + chat_loop(); + TRADE_RING = 1; + npcatk_suspend_ai(); + } + } + + void rquest_rub_my_back_first() + { + ScheduleDelayedEvent(3.0, "say_job"); + SayText("Oh , " + I + " know a little something about that... If you could just help me with my little problem first."); + } + + void convo_anim() + { + string N_ANIMS = GetTokenCount(CONV_ANIMS, ";"); + N_ANIMS -= 1; + int RND_ANIM = RandomInt(0, N_ANIMS); + PlayAnim("critical", GetToken(CONV_ANIMS, RND_ANIM, ";")); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_chat_array.as b/scripts/angelscript/monsters/base_chat_array.as new file mode 100644 index 00000000..0e939003 --- /dev/null +++ b/scripts/angelscript/monsters/base_chat_array.as @@ -0,0 +1,789 @@ +#pragma context server + +namespace MS +{ + +class BaseChatArray : CGameScript +{ + int CHAT_ABORT; + string CHAT_ANIMS_ANAME; + int CHAT_AUTO_FACE; + int CHAT_AUTO_HAIL; + int CHAT_AUTO_JOB; + int CHAT_AUTO_RUMOR; + string CHAT_BUSY; + string CHAT_CONV_ANIMS; + string CHAT_CURRENT_SPEAKER; + float CHAT_DELAY; + string CHAT_DELAYS_ANAME; + string CHAT_END_MOVE_MOUTH; + string CHAT_END_TIME; + string CHAT_EVENTS_ANAME; + int CHAT_FACE_ON_USE; + int CHAT_IGNORE_WHILE_BUSY; + string CHAT_LAST_USED_MENU; + string CHAT_LINES_ANAME; + int CHAT_MAX_LINE_LEN; + int CHAT_MENU_ENABLE; + int CHAT_MENU_ON; + int CHAT_MOVE_MOUTH; + int CHAT_NEVER_INTERRUPT; + int CHAT_NO_CLOSE_MOUTH; + string CHAT_PLAYANIM_STYLE; + string CHAT_QUE_ACTIVE; + int CHAT_RESET_ON_NEW; + string CHAT_SEQUENCE; + string CHAT_SOUNDS_ANAME; + int CHAT_SPOOL_OUT_ALL_COUNT; + int CHAT_SPOOL_OUT_COUNT; + int CHAT_USE_BUSY_MESSAGE; + int CHAT_USE_CONV_ANIMS; + string DUMP_CONVO; + int HAS_BASE_CHAT_ARRAY_INCLUDE; + + BaseChatArray() + { + CHAT_CONV_ANIMS = "converse2;converse1;talkleft;talkright;lean;pondering;pondering2;pondering3;"; + HAS_BASE_CHAT_ARRAY_INCLUDE = 1; + CHAT_NEVER_INTERRUPT = 0; + CHAT_USE_BUSY_MESSAGE = 1; + CHAT_USE_CONV_ANIMS = 1; + CHAT_MOVE_MOUTH = 1; + CHAT_NO_CLOSE_MOUTH = 0; + CHAT_AUTO_FACE = 1; + CHAT_FACE_ON_USE = 1; + CHAT_MENU_ENABLE = 1; + CHAT_RESET_ON_NEW = 0; + CHAT_IGNORE_WHILE_BUSY = 0; + CHAT_PLAYANIM_STYLE = "critical"; + CHAT_MENU_ON = 1; + CHAT_AUTO_HAIL = 0; + CHAT_AUTO_JOB = 0; + CHAT_AUTO_RUMOR = 0; + CHAT_MAX_LINE_LEN = 192; + CHAT_DELAY = 4.0; + CHAT_CURRENT_SPEAKER = "none"; + } + + void OnSpawn() override + { + SetMenuAutoOpen(CHAT_MENU_ENABLE); + if ((CHAT_AUTO_HAIL)) + { + CatchSpeech("say_hi", "hail"); + } + if ((CHAT_AUTO_JOB)) + { + CatchSpeech("say_job", "job"); + } + if ((CHAT_AUTO_RUMOR)) + { + CatchSpeech("say_rumor", "rumour"); + } + array CONVO_QUE_LINES; + array CONVO_QUE_DELAYS; + array CONVO_QUE_ANIMS; + array CONVO_QUE_EVENTS; + array CONVO_QUE_SOUNDS; + } + + void game_menu_getoptions() + { + CHAT_CURRENT_SPEAKER = param1; + CHAT_LAST_USED_MENU = param1; + if ((CHAT_FACE_ON_USE)) + { + SetMoveDest(param1); + } + if (!(CHAT_MENU_ON)) return; + if ((CHAT_AUTO_HAIL)) + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + } + if ((CHAT_AUTO_JOB)) + { + string reg.mitem.title = "Ask about Jobs"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_job"; + } + if ((CHAT_AUTO_RUMOR)) + { + string reg.mitem.title = "Ask about Rumors"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_rumor"; + } + } + + void chat_add_text() + { + string CONVO_NAME = param1; + string CONVO_DELAYS = CONVO_NAME; + CONVO_DELAYS += "_DELAYS"; + string CONVO_ANIMS = CONVO_NAME; + CONVO_ANIMS += "_ANIMS"; + string CONVO_EVENTS = CONVO_NAME; + CONVO_EVENTS += "_EVENTS"; + string CONVO_SOUNDS = CONVO_NAME; + CONVO_SOUNDS += "_SOUNDS"; + string CONV_ARRAY_EXISTS = param1[int(0)]; + if ((CONV_ARRAY_EXISTS).findFirst("[ERROR_NO_ARRAY]") >= 0) + { + LogDebug("chat_add_text creating new array for CONVO_NAME"); + array CONVO_NAME; + array CONVO_DELAYS; + array CONVO_ANIMS; + array CONVO_EVENTS; + array CONVO_SOUNDS; + } + string L_CHAT_TEXT = param2; + string L_CHAT_DELAY = param3; + if ((L_CHAT_DELAY).findFirst("PARAM") == 0) + { + string L_CHAT_DELAY = CHAT_DELAY; + } + string L_CHAT_ANIM = param4; + if ((L_CHAT_ANIM).findFirst("PARAM") == 0) + { + string L_CHAT_ANIM = "none"; + } + string L_CHAT_EVENT = param5; + if ((L_CHAT_EVENT).findFirst("PARAM") == 0) + { + string L_CHAT_EVENT = "none"; + } + string L_CHAT_SOUND = "none"; + if ((param3).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param3; + } + if ((param4).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param4; + } + if ((param5).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param5; + } + if ((param6).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param6; + } + if ((param7).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param7; + } + if ((param8).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param8; + } + if (L_CHAT_SOUND != "none") + { + string L_SOUND_LENGTH = (L_CHAT_SOUND).length(); + L_SOUND_LENGTH -= 6; + string L_CHAT_SOUND = (L_CHAT_SOUND).substr((L_CHAT_SOUND).length() - L_SOUND_LENGTH); + LogDebug("chat_add_text SOUND: L_CHAT_SOUND"); + } + CONVO_NAME.insertLast(L_CHAT_TEXT); + CONVO_DELAYS.insertLast(L_CHAT_DELAY); + CONVO_ANIMS.insertLast(L_CHAT_ANIM); + CONVO_EVENTS.insertLast(L_CHAT_EVENT); + CONVO_SOUNDS.insertLast(L_CHAT_SOUND); + int ARRAY_IDX = int(CONVO_NAME.length()); + ARRAY_IDX -= 1; + string DBG_TXT = CONVO_NAME[int(ARRAY_IDX)]; + LogDebug("chat_add_text final PARAM1 step ARRAY_IDX txt[ (DBG_TXT).substr(0, 11) ] del CONVO_DELAYS[int(ARRAY_IDX)] anim CONVO_ANIMS[int(ARRAY_IDX)] event CONVO_EVENTS[int(ARRAY_IDX)]"); + } + + void chat_start_sequence() + { + LogDebug("chat_start_sequence PARAM1 PARAM2"); + if (param2 == "clear_que") + { + int CLEAR_QUE = 1; + } + if (param3 == "clear_que") + { + int CLEAR_QUE = 1; + } + if (param4 == "clear_que") + { + int CLEAR_QUE = 1; + } + if (param2 == "add_to_que") + { + int ADD_TO_QUE = 1; + } + if (param3 == "add_to_que") + { + int ADD_TO_QUE = 1; + } + if (param4 == "add_to_que") + { + int ADD_TO_QUE = 1; + } + if ((CHAT_RESET_ON_NEW)) + { + int CLEAR_QUE = 1; + } + if ((CHAT_AUTO_FACE)) + { + if (!(CHAT_TEMP_NO_AUTO_FACE)) + { + } + chat_face_speaker(); + } + CHAT_ABORT = 0; + string CONVO_NAME = param1; + string CONV_ARRAY_EXISTS = param1[int(0)]; + if ((CONV_ARRAY_EXISTS).findFirst("[ERROR_NO_ARRAY]") >= 0) + { + SayText("[error] conversation " + CONVO_NAME + " does not exist!"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(ADD_TO_QUE)) + { + if ((CHAT_BUSY)) + { + } + if ((CLEAR_QUE)) + { + npc_chat_was_busy("started_new"); + } + if (!(CLEAR_QUE)) + { + } + if ((CHAT_IGNORE_WHILE_BUSY)) + { + LogDebug("chat_start_sequence: Attempted to start new chat PARAM1 while already in conversation and ignore flag set"); + npc_chat_was_busy("ignored"); + int EXIT_SUB = 1; + } + else + { + npc_chat_was_busy("added"); + } + } + if ((EXIT_SUB)) return; + if ((CLEAR_QUE)) + { + chat_clear_que("chat_start_sequence"); + } + if (param2 == "prioritize") + { + CHAT_IGNORE_WHILE_BUSY = 1; + } + if (param3 == "prioritize") + { + CHAT_IGNORE_WHILE_BUSY = 1; + } + if (param4 == "prioritize") + { + CHAT_IGNORE_WHILE_BUSY = 1; + } + if ((CHAT_NEVER_INTERRUPT)) + { + CHAT_IGNORE_WHILE_BUSY = 1; + } + CHAT_SEQUENCE = CONVO_NAME; + CHAT_LINES_ANAME = CONVO_NAME; + CHAT_DELAYS_ANAME = CONVO_NAME; + CHAT_DELAYS_ANAME += "_DELAYS"; + CHAT_ANIMS_ANAME = CONVO_NAME; + CHAT_ANIMS_ANAME += "_ANIMS"; + CHAT_EVENTS_ANAME = CONVO_NAME; + CHAT_EVENTS_ANAME += "_EVENTS"; + CHAT_SOUNDS_ANAME = CONVO_NAME; + CHAT_SOUNDS_ANAME += "_SOUNDS"; + LogDebug("requesting_que int(CHAT_LINES_ANAME.length()) lines"); + for (int i = 0; i < int(CHAT_LINES_ANAME.length()); i++) + { + chat_add_to_que(); + } + if (!(CHAT_QUE_ACTIVE)) + { + CHAT_QUE_ACTIVE = 1; + chat_cycle_que(); + } + } + + void chat_convo_anim() + { + string N_ANIMS = GetTokenCount(CHAT_CONV_ANIMS, ";"); + N_ANIMS -= 1; + int RND_ANIM = RandomInt(0, N_ANIMS); + PlayAnim("CHAT_PLAYANIM_STYLE", GetToken(CHAT_CONV_ANIMS, RND_ANIM, ";")); + } + + void chat_move_mouth() + { + if ((param1).findFirst("PARAM") == 0) + { + int DO_NADDA = 1; + } + else + { + CHAT_END_MOVE_MOUTH = GetGameTime(); + CHAT_END_MOVE_MOUTH += param1; + CHAT_END_MOVE_MOUTH -= 1.0; + LogDebug("bchat_auto_mouth_move PARAM1"); + } + if (GetGameTime() < CHAT_END_MOVE_MOUTH) + { + string RND_SAY = "["; + float M_TIME = Random(0.1, 0.3); + RND_SAY += M_TIME; + RND_SAY += "]"; + Say("RND_SAY"); + M_TIME += 0.1; + M_TIME("chat_close_mouth"); + M_TIME += 0.1; + M_TIME("chat_move_mouth"); + } + } + + void chat_close_mouth() + { + if ((CHAT_NO_CLOSE_MOUTH)) return; + SetProp(GetOwner(), "controller1", 0); + } + + void chat_open_mouth() + { + SetProp(GetOwner(), "controller1", -1); + } + + void chat_face_speaker() + { + if (param1 != "PARAM1") + { + CHAT_CURRENT_SPEAKER = param1; + } + else + { + chat_find_speaker_id(); + } + SetMoveDest(CHAT_CURRENT_SPEAKER); + } + + void chat_find_speaker_id() + { + string L_LAST_SPOKE = GetEntityIndex("ent_lastspoke"); + if ((IsEntityAlive(L_LAST_SPOKE))) + { + if (GetEntityRange(L_LAST_SPOKE) < 512) + { + } + CHAT_CURRENT_SPEAKER = L_LAST_SPOKE; + } + else + { + if ((IsEntityAlive(CHAT_LAST_USED_MENU))) + { + if (GetEntityRange(CHAT_LAST_USED_MENU) < 512) + { + } + CHAT_CURRENT_SPEAKER = CHAT_LAST_USED_MENU; + } + else + { + if (!(IsEntityAlive(CHAT_CURRENT_SPEAKER))) + { + LogDebug("failed to find speaker , wild guess"); + CHAT_CURRENT_SPEAKER = /* TODO: $get_insphere */ $get_insphere("player", 512); + } + else + { + if (!(IsEntityAlive(CHAT_CURRENT_SPEAKER))) + { + GetAllPlayers(PLAYER_LIST); + CHAT_CURRENT_SPEAKER = GetToken(PLAYER_LIST, 0, ";"); + } + } + } + } + } + + void chat_now() + { + if ((param2).findFirst(PARAM) == 0) + { + string L_LINE_LENGTH = (param1).length(); + if (L_LINE_LENGTH > 100) + { + // TODO: UNCONVERTED: if ( L_LINE_LENGTH > 100 ) L_LINE_LENGTH 100 + } + string L_LINE_RATIO = L_LINE_LENGTH; + L_LINE_RATIO /= 100; + string PARAM2 = /* TODO: $ratio */ $ratio(L_LINE_RATIO, 1.5, 6.0); + } + if (param2 == "clear_que") + { + int CLEAR_QUE = 1; + } + if (param3 == "clear_que") + { + int CLEAR_QUE = 1; + } + if (param4 == "clear_que") + { + int CLEAR_QUE = 1; + } + if ((CHAT_RESET_ON_NEW)) + { + int CLEAR_QUE = 1; + } + if (param2 == "add_to_que") + { + int ADD_TO_QUE = 1; + } + if (param3 == "add_to_que") + { + int ADD_TO_QUE = 1; + } + if (param4 == "add_to_que") + { + int ADD_TO_QUE = 1; + } + if (param2 == "add_to_que") + { + string PARAM2 = "PARAM"; + } + if (param3 == "add_to_que") + { + string PARAM3 = "PARAM"; + } + if (param4 == "add_to_que") + { + string PARAM4 = "PARAM"; + } + if (param2 == "clear_que") + { + string PARAM2 = "PARAM"; + } + if (param3 == "clear_que") + { + string PARAM3 = "PARAM"; + } + if (param4 == "clear_que") + { + string PARAM4 = "PARAM"; + } + string L_CHAT_SOUND = "none"; + if ((param3).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param3; + } + if ((param4).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param4; + } + if ((param5).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param5; + } + if ((param6).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param6; + } + if ((param7).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param7; + } + if ((param8).findFirst("sound:") == 0) + { + string L_CHAT_SOUND = param8; + } + if (L_CHAT_SOUND != "none") + { + string L_SOUND_LENGTH = (L_CHAT_SOUND).length(); + L_SOUND_LENGTH -= 6; + string L_CHAT_SOUND = (L_CHAT_SOUND).substr(6, L_SOUND_LENGTH); + LogDebug("L_CHAT_SOUND"); + } + if ((CHAT_AUTO_FACE)) + { + if (!(CHAT_TEMP_NO_AUTO_FACE)) + { + } + chat_face_speaker(); + } + if (!(ADD_TO_QUE)) + { + if ((CHAT_BUSY)) + { + } + if ((CLEAR_QUE)) + { + npc_chat_was_busy("started_new"); + } + if (!(CLEAR_QUE)) + { + } + if ((CHAT_IGNORE_WHILE_BUSY)) + { + LogDebug("chat_now: Attempted to start new chat PARAM1 while already in conversation and Ignore flag set"); + npc_chat_was_busy("ignored"); + int EXIT_SUB = 1; + } + else + { + npc_chat_was_busy("added"); + } + } + if ((EXIT_SUB)) return; + if ((CLEAR_QUE)) + { + chat_clear_que("chat_now"); + } + string L_CHAT_TEXT = param1; + string L_CHAT_DELAY = param2; + if ((L_CHAT_DELAY).findFirst("PARAM") == 0) + { + string L_CHAT_DELAY = CHAT_DELAY; + } + string L_CHAT_ANIM = param3; + if ((L_CHAT_ANIM).findFirst("PARAM") == 0) + { + string L_CHAT_ANIM = "none"; + } + string L_CHAT_EVENT = param4; + if ((L_CHAT_EVENT).findFirst("PARAM") == 0) + { + string L_CHAT_EVENT = "none"; + } + CONVO_QUE_LINES.insertLast(L_CHAT_TEXT); + CONVO_QUE_DELAYS.insertLast(L_CHAT_DELAY); + CONVO_QUE_ANIMS.insertLast(L_CHAT_ANIM); + CONVO_QUE_EVENTS.insertLast(L_CHAT_EVENT); + CONVO_QUE_SOUNDS.insertLast(L_CHAT_SOUND); + if (!(CHAT_QUE_ACTIVE)) + { + CHAT_QUE_ACTIVE = 1; + chat_cycle_que(); + } + } + + void chat_pause() + { + CHAT_QUE_ACTIVE = 0; + } + + void chat_resume() + { + if (!(CHAT_QUE_ACTIVE)) + { + CHAT_QUE_ACTIVE = 1; + chat_cycle_que(); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(CHAT_BUSY)) return; + chat_pause(); + } + + void ext_dump_chat() + { + DUMP_CONVO = param1; + for (int i = 0; i < int(DUMP_CONVO.length()); i++) + { + dump_chat(); + } + } + + void dump_chat() + { + string CUR_IDX = i; + string CUR_LINES_ANAME = DUMP_CONVO; + string CUR_DELAYS = DUMP_CONVO; + CUR_DELAYS += _DELAYS; + string CUR_ANIMS = DUMP_CONVO; + CUR_ANIMS += "_ANIMS"; + string CUR_EVENTS = DUMP_CONVO; + CUR_EVENTS += "_EVENTS"; + string CUR_SOUNDS = DUMP_CONVO; + CUR_SOUNDS += "_SOUNDS"; + string CUR_TEXT = CUR_LINES_ANAME[int(CUR_IDX)]; + string CUR_DELAY = CUR_DELAYS[int(CUR_IDX)]; + string CUR_ANIM = CUR_ANIMS[int(CUR_IDX)]; + string CUR_EVENT = CUR_EVENTS[int(CUR_IDX)]; + string CUR_SOUND = CUR_SOUNDS[int(CUR_IDX)]; + LogDebug("dump DUMP_CONVO # CUR_IDX txt[ (CUR_TEXT).substr(0, 11) ] del CUR_DELAY anim CUR_ANIM evt CUR_EVENT snd CUR_SOUND"); + } + + void chat_add_to_que() + { + string CUR_IDX = i; + string CUR_LINE = CHAT_LINES_ANAME[int(CUR_IDX)]; + string CUR_DELAY = CHAT_DELAYS_ANAME[int(CUR_IDX)]; + string CUR_ANIM = CHAT_ANIMS_ANAME[int(CUR_IDX)]; + string CUR_EVENT = CHAT_EVENTS_ANAME[int(CUR_IDX)]; + string CUR_SOUND = CHAT_SOUNDS_ANAME[int(CUR_IDX)]; + LogDebug("chat_add_to_que: CUR_IDX [ (CUR_LINE).substr(0, 20) ... ]"); + CONVO_QUE_LINES.insertLast(CUR_LINE); + CONVO_QUE_DELAYS.insertLast(CUR_DELAY); + CONVO_QUE_ANIMS.insertLast(CUR_ANIM); + CONVO_QUE_EVENTS.insertLast(CUR_EVENT); + CONVO_QUE_SOUNDS.insertLast(CUR_SOUND); + } + + void chat_clear_que() + { + LogDebug("chat_clear_que called from PARAM1"); + CHAT_SPOOL_OUT_ALL_COUNT = int(CONVO_QUE_LINES.length()); + chat_clear_que_loop(); + } + + void chat_clear_que_loop() + { + CHAT_SPOOL_OUT_COUNT = 0; + spool_out_line(); + CHAT_SPOOL_OUT_ALL_COUNT -= 1; + if (!(CHAT_SPOOL_OUT_ALL_COUNT > 0)) return; + ScheduleDelayedEvent(0.26, "chat_clear_que_loop"); + } + + void chat_cycle_que() + { + if (!(CHAT_QUE_ACTIVE)) return; + if (int(CONVO_QUE_LINES.length()) == 0) + { + CHAT_BUSY = 0; + CHAT_QUE_ACTIVE = 0; + CHAT_IGNORE_WHILE_BUSY = 0; + int EXIT_SUB = 1; + } + else + { + string CUR_DELAY = CONVO_QUE_DELAYS[int(0)]; + CHAT_END_TIME = GetGameTime(); + CHAT_END_TIME += CUR_DELAY; + string L_CHAT_END_PLUS = CUR_DELAY; + L_CHAT_END_PLUS += 0.1; + if (L_CHAT_END_PLUS < 1) + { + float L_CHAT_END_PLUS = 1.0; + } + L_CHAT_END_PLUS("chat_cycle_que"); + } + if ((EXIT_SUB)) return; + string CUR_DELAY = CONVO_QUE_DELAYS[int(0)]; + CHAT_END_TIME = GetGameTime(); + CHAT_END_TIME += CUR_DELAY; + if ((G_DEVELOPER_MODE)) + { + string L_CUR_TEXT = CONVO_QUE_LINES[int(0)]; + string L_CUR_DELAY = CONVO_QUE_DELAYS[int(0)]; + string L_CUR_ANIM = CONVO_QUE_ANIMS[int(0)]; + string L_CUR_EVENT = CONVO_QUE_EVENTS[int(0)]; + string L_CUR_SOUND = CONVO_QUE_SOUNDS[int(0)]; + LogDebug("chat_cycle_que line# int(CONVO_QUE_LINES.length()) txt [ (L_CUR_TEXT).substr(0, 11) ] delay L_CUR_DELAY anim L_CUR_ANIM evnt L_CUR_EVENT snd L_CUR_SOUND"); + } + string CUR_LINE = CONVO_QUE_LINES[int(0)]; + string CUR_LEN = (CUR_LINE).length(); + CUR_LEN += (GetMonsterProperty("name")).length(); + CUR_LEN += 6; + if (CUR_LEN < CHAT_MAX_LINE_LEN) + { + SayText(CUR_LINE); + } + else + { + SayText([ERROR: + LINE + TOO + LONG!] + "[ " + CHAT_LINES_ANAME + int(CUR_LEN) + "/ " + int(CHAT_MAX_LINE_LEN) + " ]"); + } + CHAT_BUSY = 1; + string CUR_ANIM = CONVO_QUE_ANIMS[int(0)]; + if (CUR_ANIM != "none") + { + if (CUR_ANIM != "no_convo") + { + PlayAnim("CHAT_PLAYANIM_STYLE", CUR_ANIM); + } + } + else + { + if ((CHAT_USE_CONV_ANIMS)) + { + } + chat_convo_anim(); + } + string CUR_SOUND = CONVO_QUE_SOUNDS[int(0)]; + if (CUR_SOUND != "none") + { + EmitSound(GetOwner(), 0, CUR_SOUND, 10); + } + string CUR_EVENT = CONVO_QUE_EVENTS[int(0)]; + if (CUR_EVENT != "none") + { + LogDebug("calling chat_event CUR_EVENT"); + if ((CUR_EVENT).findFirst("!") == 0) + { + string LEN_CUR_EVENT = (CUR_EVENT).length(); + LEN_CUR_EVENT -= 1; + string CUR_EVENT = (CUR_EVENT).substr((CUR_EVENT).length() - LEN_CUR_EVENT); + CUR_EVENT(); + } + else + { + CUR_DELAY(CUR_EVENT); + } + } + if ((CHAT_MOVE_MOUTH)) + { + chat_move_mouth(CUR_DELAY); + } + CHAT_SPOOL_OUT_COUNT = 0; + spool_out_line(); + } + + void spool_out_line() + { + CHAT_SPOOL_OUT_COUNT += 1; + if (CHAT_SPOOL_OUT_COUNT == 1) + { + CONVO_QUE_LINES.removeAt(0); + } + if (CHAT_SPOOL_OUT_COUNT == 2) + { + CONVO_QUE_DELAYS.removeAt(0); + } + if (CHAT_SPOOL_OUT_COUNT == 3) + { + CONVO_QUE_ANIMS.removeAt(0); + } + if (CHAT_SPOOL_OUT_COUNT == 4) + { + CONVO_QUE_EVENTS.removeAt(0); + } + if (CHAT_SPOOL_OUT_COUNT == 5) + { + CONVO_QUE_SOUNDS.removeAt(0); + } + if (!(CHAT_SPOOL_OUT_COUNT < 5)) return; + ScheduleDelayedEvent(0.05, "spool_out_line"); + } + + void npc_chat_was_busy() + { + LogDebug("npc_chat_was_busy PARAM1"); + if (!(CHAT_USE_BUSY_MESSAGE)) return; + if (!(param1 == "ignored")) return; + chat_busy_message(); + } + + void chat_busy_message() + { + if (!(IsEntityAlive(CHAT_CURRENT_SPEAKER))) + { + chat_find_speaker_id(); + } + SendColoredMessage(CHAT_CURRENT_SPEAKER, "It would be polite to wait until " + GetEntityName(GetOwner()) + " has finished speaking."); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_civilian.as b/scripts/angelscript/monsters/base_civilian.as new file mode 100644 index 00000000..88389158 --- /dev/null +++ b/scripts/angelscript/monsters/base_civilian.as @@ -0,0 +1,43 @@ +#pragma context server + +namespace MS +{ + +class BaseCivilian : CGameScript +{ + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + call_for_help(GetEntityIndex(m_hLastStruck)); + } + + void call_for_help() + { + SetSayTextRange(1024); + int RAND_SCREAM = RandomInt(1, 4); + if (RAND_SCREAM == 1) + { + SayText("Help! Help!"); + } + if (RAND_SCREAM == 2) + { + SayText("Guards! Call the guards!"); + } + if (RAND_SCREAM == 3) + { + SayText("Save me!"); + } + if (RAND_SCREAM == 4) + { + SayText("Help! Help! " + I + " m being repressed!"); + } + CallExternal("all", "civilian_attacked", param1, IsValidPlayer(param1)); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal("all", "civilian_attacked", GetEntityIndex(m_hLastStruck), IsValidPlayer(m_hLastStruck)); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_damage_stack.as b/scripts/angelscript/monsters/base_damage_stack.as new file mode 100644 index 00000000..73abd3ba --- /dev/null +++ b/scripts/angelscript/monsters/base_damage_stack.as @@ -0,0 +1,93 @@ +#pragma context server + +namespace MS +{ + +class BaseDamageStack : CGameScript +{ + int CALLING_DMGSTK; + int STACK_ADJUST_DMG; + int STACK_EXPIRE; + string STACK_FLAG_NAME; + string STACK_ID; + float STACK_MULT_ADD; + int STACK_MULT_MAX; + int STACK_RETURNDATA; + int STACK_SETDMG; + + BaseDamageStack() + { + STACK_FLAG_NAME = "stackdmg_generic"; + STACK_MULT_ADD = 0.1; + STACK_MULT_MAX = 10; + STACK_EXPIRE = 5; + STACK_ID = "stackdmg"; + CALLING_DMGSTK = 0; + STACK_ADJUST_DMG = 0; + STACK_SETDMG = 0; + STACK_RETURNDATA = 0; + } + + void dmgstk_dodamage() + { + CALLING_DMGSTK = 1; + LogDebug("Using dmgstk_dodamage for stack."); + if ((param1)) + { + string L_TARGET = param2; + if (GetRelationship(L_TARGET) == "enemy") + { + string L_PASS_PARAM = param6; + do_stack(L_TARGET, L_PASS_PARAM); + } + } + } + + void game_dodamage() + { + if (!(CALLING_DMGSTK)) + { + LogDebug("Using game_dodamage for stack; potentially unwanted; potential problems."); + if ((param1)) + { + string L_TARGET = param2; + if (GetRelationship(L_TARGET) == "enemy") + { + string L_PASS_PARAM = param6; + do_stack(L_TARGET, L_PASS_PARAM); + } + } + } + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (STACK_ADJUST_DMG > 0) + { + SetDamage(param3); + return; + STACK_ADJUST_DMG -= 1; + } + } + + void do_stack() + { + string L_TARGET = param1; + string L_DMG = param2; + STACK_ADJUST_DMG += 1; + if (!(/* TODO: $get_scriptflag */ $get_scriptflag(L_TARGET, STACK_FLAG_NAME, "name_exists"))) + { + SetScriptFlags(L_TARGET, "add", STACK_FLAG_NAME, STACK_ID, 1, STACK_EXPIRE, "none"); + } + string L_CUR_MULT = /* TODO: $get_scriptflag */ $get_scriptflag(L_TARGET, STACK_FLAG_NAME, "name_value"); + L_CUR_MULT = max(1, min(STACK_MULT_MAX, L_CUR_MULT)); + STACK_SETDMG = (L_DMG * L_CUR_MULT); + STACK_RETURNDATA = L_CUR_MULT; + LogDebug("do_stack STACK_RETURNDATA"); + L_CUR_MULT += STACK_MULT_ADD; + SetScriptFlags(L_TARGET, "edit", STACK_FLAG_NAME, STACK_ID, L_CUR_MULT, STACK_EXPIRE, "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_fish2.as b/scripts/angelscript/monsters/base_fish2.as new file mode 100644 index 00000000..e3f67f36 --- /dev/null +++ b/scripts/angelscript/monsters/base_fish2.as @@ -0,0 +1,79 @@ +#pragma context server + +namespace MS +{ + +class BaseFish2 : CGameScript +{ + int BF_STAY_IN_WATER; + int FISH_VRANGE; + int FISH_VSPEED_DOWN; + int FISH_VSPEED_UP; + int NPC_IS_FISH; + + BaseFish2() + { + FISH_VSPEED_UP = 25; + FISH_VSPEED_DOWN = -25; + FISH_VRANGE = 50; + BF_STAY_IN_WATER = 1; + NPC_IS_FISH = 1; + } + + void OnSpawn() override + { + SetGravity(0); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(IsEntityAlive(GetOwner()))) return; + string MOVE_DEST_Z = (GetMonsterProperty("movedest.origin")).z; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string L_FISH_VSPEED_UP = FISH_VSPEED_UP; + string L_FISH_VSPEED_DOWN = FISH_VSPEED_DOWN; + if ((BF_STAY_IN_WATER)) + { + if (IsInWater(GetOwner()) < 1) + { + if (!(SUSPEND_AI)) + { + npcatk_suspend_ai(2.0); + } + SetMoveDest(NPC_HOME_LOC); + string MOVE_DEST_Z = (NPC_HOME_LOC).z; + SetGravity(0.5); + L_FISH_VSPEED_UP *= 0.5; + L_FISH_VSPEED_DOWN *= 2; + } + else + { + SetGravity(0); + } + } + if (MOVE_DEST_Z > MY_Z) + { + if ((IsInWater(GetOwner()))) + { + } + string Z_DIFF = MOVE_DEST_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > FISH_VRANGE) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, L_FISH_VSPEED_UP)); + } + if (MOVE_DEST_Z < MY_Z) + { + string Z_DIFF = MY_Z; + Z_DIFF -= MOVE_DEST_Z; + if (Z_DIFF > FISH_VRANGE) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, L_FISH_VSPEED_DOWN)); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_flyer.as b/scripts/angelscript/monsters/base_flyer.as new file mode 100644 index 00000000..17875504 --- /dev/null +++ b/scripts/angelscript/monsters/base_flyer.as @@ -0,0 +1,163 @@ +#pragma context server + +namespace MS +{ + +class BaseFlyer : CGameScript +{ + float BF_CHECK_FREQ; + int BF_NO_STUCK; + float BF_RETREAT_TIME; + string BF_UNSTUCK_ADJ; + string BOUNCED; + string FLIGHT_CHECK_FREQ; + int FLIGHT_SCANNING; + string FLY_OLD_POS; + string NEW_DEST; + int NO_STUCK_CHECKS; + + BaseFlyer() + { + BF_CHECK_FREQ = 0.2; + BF_RETREAT_TIME = 1.0; + BF_UNSTUCK_ADJ = /* TODO: $relvel */ $relvel(0, 50, 0); + FLIGHT_CHECK_FREQ = BF_CHECK_FREQ; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + ScheduleDelayedEvent(0.2, "setup_flight"); + } + + void setup_flight() + { + FLY_OLD_POS = GetMonsterProperty("pos"); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((FLIGHT_SCANNING)) return; + FLIGHT_SCANNING = 1; + ScheduleDelayedEvent(1.0, "flight_check"); + } + + void flight_check() + { + float FLY_MOVED = Distance(FLY_OLD_POS, GetMonsterProperty("origin")); + string HIT_WALL = TraceLine(GetMonsterProperty("origin"), GetMonsterProperty("movedest")); + if (HIT_WALL != GetMonsterProperty("movedest")) + { + if (Distance(GetMonsterProperty("origin"), GetMonsterProperty("movedest")) < 50) + { + } + npcatk_suspend_ai(0.2); + do_one_eighty(); + SetMoveDest(NEW_DEST); + ScheduleDelayedEvent(0.1, "bat_boost"); + } + if (FLY_MOVED == 0) + { + if (!(BF_NO_STUCK)) + { + } + npcatk_suspend_ai(0.2); + BOUNCED = 1; + FLIGHT_CHECK_FREQ = BF_RETREAT_TIME; + if (!(false)) + { + } + do_one_eighty(); + SetMoveDest(NEW_DEST); + ScheduleDelayedEvent(0.1, "bat_boost"); + } + if (FLY_MOVED != 0) + { + if (!(BF_NO_STUCK)) + { + } + if ((BOUNCED)) + { + } + BOUNCED = 0; + FLIGHT_CHECK_FREQ = BF_CHECK_FREQ; + } + FLY_OLD_POS = GetMonsterProperty("origin"); + FLIGHT_CHECK_FREQ("flight_check"); + } + + void npc_selectattack() + { + FLY_OLD_POS = Vector3(20000, 20000, 20000); + } + + void bf_suspend_stuck() + { + PARAM1("bf_resume_stuck"); + BF_NO_STUCK = 1; + } + + void bf_resume_stuck() + { + FLY_OLD_POS = Vector3(20000, 20000, 20000); + BF_NO_STUCK = 0; + } + + void bat_boost() + { + AddVelocity(GetOwner(), BF_UNSTUCK_ADJ); + ScheduleDelayedEvent(1.0, "bf_reset_target"); + } + + void bf_reset_target() + { + SetMoveDest(m_hAttackTarget); + } + + void do_one_eighty2() + { + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + MY_YAW += 180; + if (MY_YAW > 359) + { + MY_YAW -= 359; + } + string MY_PITCH = /* TODO: $vec.pitch */ $vec.pitch(GetMonsterProperty("angles")); + MY_PITCH += 180; + if (MY_PITCH > 359) + { + MY_PITCH -= 359; + } + NEW_DEST = /* TODO: $relpos */ $relpos(Vector3(0, MY_PITCH, 0), Vector3(0, 1000, 0)); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + MY_YAW += 180; + if (MY_YAW > 359) + { + MY_YAW -= 359; + } + string MY_PITCH = /* TODO: $vec.pitch */ $vec.pitch(GetMonsterProperty("angles")); + MY_PITCH += 180; + if (MY_PITCH > 359) + { + MY_PITCH -= 359; + } + string MY_ROLL = /* TODO: $vec.roll */ $vec.roll(GetMonsterProperty("angles")); + MY_ROLL += 180; + if (MY_ROLL > 359) + { + MY_ROLL -= 359; + } + NEW_DEST = /* TODO: $relpos */ $relpos(Vector3(MY_PITCH, MY_YAW, MY_ROLL), Vector3(0, 1000, 0)); + } + + void do_rand_tweedee() + { + int MY_PITCH = RandomInt(0, 359); + int MY_YAW = RandomInt(0, 359); + int MY_ROLL = RandomInt(0, 359); + NEW_DEST = /* TODO: $relpos */ $relpos(Vector3(MY_PITCH, MY_YAW, MY_ROLL), Vector3(0, 1000, 0)); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_flyer_agro.as b/scripts/angelscript/monsters/base_flyer_agro.as new file mode 100644 index 00000000..ea4d8a69 --- /dev/null +++ b/scripts/angelscript/monsters/base_flyer_agro.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "monsters/base_flyer.as" + +namespace MS +{ + +class BaseFlyerAgro : CGameScript +{ + int AS_ATTACKING; + int BF_BOOST_SPEED; + int BF_CRUISE_SPEED; + int BF_FLIGHT_STUCK_LIMIT; + string FLIGHT_STUCK; + string LAST_POS; + float LAST_PROG; + + BaseFlyerAgro() + { + BF_CRUISE_SPEED = 200; + BF_BOOST_SPEED = 500; + BF_FLIGHT_STUCK_LIMIT = 4; + } + + void bf_agrofly_loop() + { + ScheduleDelayedEvent(0.5, "bf_agrofly_loop"); + if (!(IS_HUNTING)) return; + npcatk_faceattacker(); + if (GetEntityRange(HUNT_LASTTARGET) > MOVE_RANGE) + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, BF_CRUISE_SPEED, 0)); + } + if (GetEntityRange(HUNT_LASTTARGET) < MOVE_RANGE) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if ((I_R_FROZEN)) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if (FLIGHT_STUCK > BF_FLIGHT_STUCK_LIMIT) + { + do_rand_tweedee(); + npcatk_suspend_ai(Random(0.3, 0.9)); + SetMoveDest(NEW_DEST); + ScheduleDelayedEvent(0.1, "bf_agrofly_boost"); + FLIGHT_STUCK = 0; + } + AS_ATTACKING -= 2; + string TARG_POS = GetEntityOrigin(HUNT_LASTTARGET); + if (!(SUSPEND_AI)) + { + SetAngles("face_origin"); + } + if (!(AS_ATTACKING <= 0)) return; + AS_ATTACKING = 0; + if ((IS_FLEEING)) return; + if ((SPITTING)) return; + if (!(GetEntityRange(HUNT_LASTTARGET) > ATTACK_RANGE)) return; + float CUR_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + if (LAST_PROG >= CUR_PROG) + { + FLIGHT_STUCK += 1; + } + LAST_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + LAST_POS = GetMonsterProperty("origin"); + } + + void chicken_run() + { + ScheduleDelayedEvent(0.1, "bf_agrofly_boost"); + } + + void bf_agrofly_boost() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, BF_BOOST_SPEED, 0)); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_flyer_grav.as b/scripts/angelscript/monsters/base_flyer_grav.as new file mode 100644 index 00000000..c3a488b3 --- /dev/null +++ b/scripts/angelscript/monsters/base_flyer_grav.as @@ -0,0 +1,85 @@ +#pragma context server + +namespace MS +{ + +class BaseFlyerGrav : CGameScript +{ + int BFLY_AGRESSIVE; + int BFLY_AGRESSIVE_MAX_THRUST; + int BFLY_AGRESSIVE_MIN_RANGE; + float BFLY_MIN_REMOVE_DELAY; + int BFLY_VRANGE; + int BFLY_VSPEED_DOWN; + int BFLY_VSPEED_UP; + + BaseFlyerGrav() + { + BFLY_VSPEED_UP = 25; + BFLY_VSPEED_DOWN = -25; + BFLY_VRANGE = 50; + BFLY_MIN_REMOVE_DELAY = 15.0; + BFLY_AGRESSIVE = 0; + BFLY_AGRESSIVE_MAX_THRUST = 100; + BFLY_AGRESSIVE_MIN_RANGE = 128; + } + + void OnSpawn() override + { + SetGravity(0); + } + + void npc_targetsighted() + { + if (!(BFLY_AGRESSIVE)) return; + if (!(GetEntityRange(m_hAttackTarget) > BFLY_AGRESSIVE_MIN_RANGE)) return; + string L_THRUST_RATIO = GetEntityRange(m_hAttackTarget); + if (L_THRUST_RATIO > 640) + { + int L_THRUST_RATIO = 640; + } + L_THRUST_RATIO /= 640; + string L_THRUST_RATIO = /* TODO: $ratio */ $ratio(L_THRUST_RATIO, 0, BFLY_AGRESSIVE_MAX_THRUST); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, L_THRUST_RATIO, 0)); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(IsEntityAlive(GetOwner()))) return; + if ((SUSPEND_AI)) return; + if ((I_R_FROZEN)) return; + if ((BFLY_SUSPEND_FLY)) return; + string MOVE_DEST_Z = (GetMonsterProperty("movedest.origin")).z; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + if (MOVE_DEST_Z > MY_Z) + { + string Z_DIFF = MOVE_DEST_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > BFLY_VRANGE) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, BFLY_VSPEED_UP)); + } + if (MOVE_DEST_Z < MY_Z) + { + string Z_DIFF = MY_Z; + Z_DIFF -= MOVE_DEST_Z; + if (Z_DIFF > BFLY_VRANGE) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, BFLY_VSPEED_DOWN)); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((BFLY_NO_FAKE_DEATH)) return; + PlayAnim("critical", ANIM_DEATH); + ClientEvent("update", "all", "const.localplayer.scriptID", "spawn_corpse", GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "anim.index"), GetEntityProperty(GetOwner(), "renderprops")); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_glow.as b/scripts/angelscript/monsters/base_glow.as new file mode 100644 index 00000000..272edc6e --- /dev/null +++ b/scripts/angelscript/monsters/base_glow.as @@ -0,0 +1,52 @@ +#pragma context server + +namespace MS +{ + +class BaseGlow : CGameScript +{ + string GLOW_COLOR; + int GLOW_RAD; + string MY_LIGHT; + string MY_LIGHT_SCRIPT; + string SKEL_ID; + string SKEL_LIGHT_ID; + + BaseGlow() + { + GLOW_COLOR = Vector3(255, 255, 128); + GLOW_RAD = 200; + } + + void OnSpawn() override + { + ClientEffect("persists", "player/player_conartist", "glow", GetEntityIndex(GetOwner()), GLOW_COLOR, GLOW_RAD); + MY_LIGHT = "game.script.last_light_id"; + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEffect("remove", "all", MY_LIGHT); + ClientEffect("remove", "all", MY_LIGHT_SCRIPT); + ClientEffect("remove", SKEL_LIGHT_ID); + } + + void client_activate() + { + SKEL_ID = param1; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + if (!(GetMonsterProperty("isalive") == 1)) return; + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, 256, Vector3(0, 255, 0), 5.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_guard.as b/scripts/angelscript/monsters/base_guard.as new file mode 100644 index 00000000..37757078 --- /dev/null +++ b/scripts/angelscript/monsters/base_guard.as @@ -0,0 +1,115 @@ +#pragma context server + +namespace MS +{ + +class BaseGuard : CGameScript +{ + string HUNT_LASTTARGET; + int MADE_IT_HOME; + string MY_GUARD_POST; + string MY_ORG_ANGLES; + int OH_IT_IS_ON; + + void OnSpawn() override + { + SetRoam(false); + SetMoveSpeed(0.0); + ScheduleDelayedEvent(1.0, "set_guard_post"); + ScheduleDelayedEvent(1.0, "scan_for_enemies"); + } + + void set_guard_post() + { + MY_GUARD_POST = GetEntityOrigin(GetOwner()); + MY_ORG_ANGLES = GetEntityAngles(GetOwner()); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if ((OH_IT_IS_ON)) return; + baseguard_tobattle(); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((OH_IT_IS_ON)) return; + if (!(false)) return; + baseguard_tobattle(); + } + + void baseguard_tobattle() + { + OH_IT_IS_ON = 1; + SetMoveSpeed(1.0); + SetRoam(true); + SetMoveAnim(ANIM_RUN); + SetActionAnim(ANIM_ATTACK); + PlayAnim("loop", ANIM_ATTACK); + if (param1 != "PARAM1") + { + SetMoveDest(param1); + } + } + + void my_target_died() + { + if ((false)) return; + OH_IT_IS_ON = 0; + SetAngles("face_origin"); + SetMoveDest(MY_GUARD_POST); + MADE_IT_HOME = 0; + going_home(); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(GetRelationship("ent_lastheard") == "enemy")) return; + if ((IsValidPlayer("ent_lastheard"))) return; + HUNT_LASTTARGET = m_hLastSeen; + SetMoveDest("ent_lastheard"); + baseguard_tobattle(GetEntityIndex("ent_lastheard")); + } + + void scan_for_enemies() + { + if ((OH_IT_IS_ON)) return; + ScheduleDelayedEvent(1.1, "scan_for_enemies"); + if (!(false)) return; + if ((IsValidPlayer(m_hLastSeen))) return; + HUNT_LASTTARGET = m_hLastSeen; + SetMoveDest(m_hLastSeen); + baseguard_tobattle(GetEntityIndex(m_hLastSeen)); + } + + void going_home() + { + if ((false)) return; + if ((MADE_IT_HOME)) return; + if ((OH_IT_IS_ON)) return; + ScheduleDelayedEvent(1.0, "going_home"); + string MY_POS = GetEntityOrigin(GetOwner()); + if (GetMonsterProperty("movedest.origin") != MY_GUARD_POST) + { + SetMoveDest(MY_GUARD_POST); + } + if (Distance(MY_POS, MY_GUARD_POST) < 10) + { + if (!(OH_IT_IS_ON)) + { + } + string MY_POS = GetEntityOrigin(GetOwner()); + SetMoveDest("none"); + SetRoam(false); + SetMoveSpeed(0.0); + SetMoveAnim(ANIM_IDLE); + SetActionAnim(ANIM_IDLE); + SetAngles("face"); + ScheduleDelayedEvent(1.0, "scan_for_enemies"); + MADE_IT_HOME = 1; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_guard_friendly.as b/scripts/angelscript/monsters/base_guard_friendly.as new file mode 100644 index 00000000..367e76ad --- /dev/null +++ b/scripts/angelscript/monsters/base_guard_friendly.as @@ -0,0 +1,136 @@ +#pragma context server + +namespace MS +{ + +class BaseGuardFriendly : CGameScript +{ + string HUNT_LASTTARGET; + string IS_HUNTING; + int MADE_IT_HOME; + string MY_GUARD_POST; + string MY_ORG_ANGLES; + int NO_STUCK_CHECKS; + string NPC_ATTACK_TARGET; + string NPC_MOVE_TARGET; + int OH_IT_IS_ON; + int STRUCK_BY_PLAYER; + + BaseGuardFriendly() + { + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetRoam(false); + SetMoveSpeed(0.0); + npcatk_suspend_ai(); + ScheduleDelayedEvent(1.0, "set_guard_post"); + ScheduleDelayedEvent(1.0, "scan_for_enemies"); + } + + void set_guard_post() + { + MY_GUARD_POST = GetEntityOrigin(GetOwner()); + MY_ORG_ANGLES = GetEntityAngles(GetOwner()); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((OH_IT_IS_ON)) return; + baseguard_tobattle(GetEntityIndex(m_hLastStruck)); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((OH_IT_IS_ON)) return; + if (!(false)) return; + baseguard_tobattle(); + } + + void baseguard_tobattle() + { + npcatk_resume_ai(); + OH_IT_IS_ON = 1; + SetMoveSpeed(1.0); + SetRoam(true); + SetMoveAnim(ANIM_RUN); + SetActionAnim(ANIM_ATTACK); + PlayAnim("critical", ANIM_ATTACK); + if (param1 != "PARAM1") + { + IS_HUNTING = 1; + HUNT_LASTTARGET = param1; + NPC_MOVE_TARGET = param1; + SetMoveDest(HUNT_LASTTARGET); + } + } + + void my_target_died() + { + if ((false)) return; + STRUCK_BY_PLAYER = 0; + OH_IT_IS_ON = 0; + SetAngles("face_origin"); + SetMoveDest(MY_GUARD_POST); + MADE_IT_HOME = 0; + going_home(); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(GetRelationship("ent_lastheard") == "enemy")) return; + if ((IsValidPlayer("ent_lastheard"))) return; + HUNT_LASTTARGET = m_hLastSeen; + SetMoveDest("ent_lastheard"); + baseguard_tobattle(GetEntityIndex("ent_lastheard")); + } + + void scan_for_enemies() + { + if ((OH_IT_IS_ON)) return; + ScheduleDelayedEvent(1.1, "scan_for_enemies"); + if (!(false)) return; + if ((IsValidPlayer(m_hLastSeen))) return; + HUNT_LASTTARGET = m_hLastSeen; + SetMoveDest(m_hLastSeen); + baseguard_tobattle(GetEntityIndex(m_hLastSeen)); + } + + void going_home() + { + if ((false)) return; + if ((MADE_IT_HOME)) return; + if ((OH_IT_IS_ON)) return; + ScheduleDelayedEvent(1.0, "going_home"); + string MY_POS = GetEntityOrigin(GetOwner()); + if (GetMonsterProperty("movedest.origin") != MY_GUARD_POST) + { + SetMoveDest(MY_GUARD_POST); + } + if (Distance(MY_POS, MY_GUARD_POST) < 10) + { + if (!(OH_IT_IS_ON)) + { + } + string MY_POS = GetEntityOrigin(GetOwner()); + SetMoveDest("none"); + SetRoam(false); + SetMoveSpeed(0.0); + SetMoveAnim(ANIM_IDLE); + SetActionAnim(ANIM_IDLE); + SetAngles("face"); + ScheduleDelayedEvent(1.0, "scan_for_enemies"); + MADE_IT_HOME = 1; + } + } + + void check_attack() + { + NPC_ATTACK_TARGET = HUNT_LASTTARGET; + } + +} + +} diff --git a/scripts/angelscript/monsters/base_guard_friendly_new.as b/scripts/angelscript/monsters/base_guard_friendly_new.as new file mode 100644 index 00000000..3e66216f --- /dev/null +++ b/scripts/angelscript/monsters/base_guard_friendly_new.as @@ -0,0 +1,189 @@ +#pragma context server + +namespace MS +{ + +class BaseGuardFriendlyNew : CGameScript +{ + float BG_BASESPEED; + int BG_HOME_RANGE; + int BG_MAX_HEAR_CIV; + int BG_NO_GO_HOME; + int BG_ROAM; + int CHECKING_CLEAR; + string HOME_YAW; + int MADE_IT_HOME; + string MY_GUARD_POST; + string MY_ORG_ANGLES; + int NO_STUCK_CHECKS; + string NPC_MOVEDEST_TARGET; + int OH_IT_IS_ON; + + BaseGuardFriendlyNew() + { + BG_BASESPEED = 1.0; + BG_ROAM = 0; + BG_NO_GO_HOME = 0; + BG_MAX_HEAR_CIV = 2048; + BG_HOME_RANGE = 10; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetRoam(BG_ROAM); + if (!(BG_ROAM)) + { + SetMoveSpeed(0.0); + NO_STUCK_CHECKS = 1; + } + if (BG_ROAM > 0) + { + SetMoveAnim(ANIM_WALK); + SetMoveSpeed(BG_BASESPEED); + } + ScheduleDelayedEvent(1.0, "set_guard_post"); + } + + void set_guard_post() + { + MY_GUARD_POST = GetMonsterProperty("origin"); + MY_ORG_ANGLES = GetMonsterProperty("angles"); + HOME_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ORG_ANGLES); + guard_loop(); + } + + void guard_loop() + { + ScheduleDelayedEvent(1.0, "guard_loop"); + if ((OH_IT_IS_ON)) return; + if (!(false)) return; + baseguard_tobattle(); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((OH_IT_IS_ON)) return; + baseguard_tobattle(GetEntityIndex(m_hLastStruck)); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((OH_IT_IS_ON)) return; + baseguard_tobattle(); + } + + void baseguard_tobattle() + { + NO_STUCK_CHECKS = 0; + MADE_IT_HOME = 0; + OH_IT_IS_ON = 1; + SetMoveSpeed(BG_BASESPEED); + SetRoam(true); + SetMoveAnim(ANIM_RUN); + if ((CHECKING_CLEAR)) return; + CHECKING_CLEAR = 1; + ScheduleDelayedEvent(5.0, "baseguard_check_clear"); + } + + void npcatk_clear_targets() + { + baseguard_check_clear(); + } + + void baseguard_check_clear() + { + if ((false)) return; + if ((false)) return; + if ((NPC_MOVING_LAST_KNOWN)) return; + OH_IT_IS_ON = 0; + if ((MADE_IT_HOME)) + { + SetAngles("face"); + } + if (!(BG_NO_GO_HOME)) + { + npcatk_setmovedest(MY_GUARD_POST, 1); + if (!(MADE_IT_HOME)) + { + } + going_home("check_clear"); + LogDebug("baseguard_check_clear going_home"); + } + } + + void going_home() + { + LogDebug("going_home PARAM1"); + if ((false)) return; + if ((MADE_IT_HOME)) return; + if ((OH_IT_IS_ON)) return; + if ((BG_NO_GO_HOME)) return; + ScheduleDelayedEvent(1.0, "going_home"); + string MY_POS = GetEntityOrigin(GetOwner()); + if (GetMonsterProperty("movedest.origin") != MY_GUARD_POST) + { + npcatk_setmovedest(MY_GUARD_POST, 1, "going_home"); + } + string MY_POS = GetMonsterProperty("origin"); + if (Distance(MY_POS, MY_GUARD_POST) < BG_HOME_RANGE) + { + if (!(OH_IT_IS_ON)) + { + } + npcatk_clear_movedest(); + SetRoam(BG_ROAM); + SetMoveSpeed(BG_ROAM); + SetMoveAnim(ANIM_IDLE); + SetEntityOrigin(GetOwner(), MY_GUARD_POST); + SetAngles("face"); + MADE_IT_HOME = 1; + NO_STUCK_CHECKS = 1; + baseguard_made_it_home(); + } + } + + void npc_pre_flee() + { + SetMoveSpeed(BG_BASESPEED); + } + + void civilian_attacked() + { + string OFFENDER = param1; + if (!(GetEntityRace(OFFENDER) != "hguard")) return; + if (!(GetEntityRange(OFFENDER) <= BG_MAX_HEAR_CIV)) return; + if (!(m_hAttackTarget == "unset")) return; + if ((NPC_MOVING_LAST_KNOWN)) return; + NO_STUCK_CHECKS = 0; + npcatk_settarget(param1); + if (!(false)) return; + SetSayTextRange(1024); + int RAND_HALT = RandomInt(1, 4); + if (RAND_HALT == 1) + { + SayText("Hey you! Leave him alone!"); + } + if (RAND_HALT == 2) + { + SayText("You there , leave him be " + I + " said!"); + } + if (RAND_HALT == 3) + { + SayText("Stop that!"); + } + if (RAND_HALT == 4) + { + SayText("Halt! We'll have no trouble making around here!"); + } + } + + void npcatk_clear_movedest() + { + SetMoveDest("none"); + NPC_MOVEDEST_TARGET = "unset"; + } + +} + +} diff --git a/scripts/angelscript/monsters/base_ice_race.as b/scripts/angelscript/monsters/base_ice_race.as new file mode 100644 index 00000000..b6c70b64 --- /dev/null +++ b/scripts/angelscript/monsters/base_ice_race.as @@ -0,0 +1,16 @@ +#pragma context server + +namespace MS +{ + +class BaseIceRace : CGameScript +{ + void OnSpawn() override + { + SetDamageResistance("fire", 1.5); + SetDamageResistance("cold", 0.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_jumper.as b/scripts/angelscript/monsters/base_jumper.as new file mode 100644 index 00000000..b559579a --- /dev/null +++ b/scripts/angelscript/monsters/base_jumper.as @@ -0,0 +1,104 @@ +#pragma context server + +namespace MS +{ + +class BaseJumper : CGameScript +{ + string AS_ATTACKING; + int BJUMPER_FACTOR; + float FREQ_NPC_JUMP; + string FWD_NPC_JUMP_STR; + int NPC_JUMPER; + int NPC_JUMPER_MAX_RANGE; + string NPC_LAST_JUMP; + string NPC_NEXT_JUMP_CHECK; + string NPC_UP_JUMP_STR; + + BaseJumper() + { + BJUMPER_FACTOR = 5; + FREQ_NPC_JUMP = Random(2.0, 5.0); + NPC_JUMPER_MAX_RANGE = 600; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) return; + if ((NPC_MOVEMENT_SUSPENDED)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(NPC_JUMPER)) return; + if (!(GetGameTime() > NPC_NEXT_JUMP_CHECK)) return; + string L_NEXT_JUMP = FREQ_NPC_JUMP; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 3.0; + if (m_hAttackTarget != "unset") + { + if (GetEntityRange(m_hAttackTarget) < NPC_JUMPER_MAX_RANGE) + { + } + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > ATTACK_RANGE) + { + npcatk_jump(Z_DIFF); + } + else + { + float L_NEXT_JUMP = 1.0; + } + } + NPC_NEXT_JUMP_CHECK = GetGameTime(); + NPC_NEXT_JUMP_CHECK += L_NEXT_JUMP; + L_NEXT_JUMP("npcatk_jump_cycle"); + } + + void npcatk_jump() + { + if (SOUND_NPC_JUMP != "SOUND_NPC_JUMP") + { + EmitSound(GetOwner(), 0, SOUND_NPC_JUMP, 10); + } + NPC_UP_JUMP_STR = param1; + NPC_UP_JUMP_STR *= BJUMPER_FACTOR; + if (NPC_UP_JUMP_STR > 300) + { + ScheduleDelayedEvent(0.75, "npcatk_jump_forward_adj"); + } + npcatk_suspend_ai(1.0); + FWD_NPC_JUMP_STR = GetEntityRange(m_hAttackTarget); + PlayAnim("critical", ANIM_NPC_JUMP); + NPC_LAST_JUMP = GetGameTime(); + if ((BJUMPER_CUSTOM_BOOST)) return; + ScheduleDelayedEvent(0.1, "npcatk_jump_boost"); + } + + void npcatk_jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, FWD_NPC_JUMP_STR, NPC_UP_JUMP_STR)); + } + + void npcatk_jump_forward_adj() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, FWD_NPC_JUMP_STR, 0)); + } + + void set_no_jump() + { + NPC_JUMPER = 0; + } + + void set_jump() + { + NPC_JUMPER = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/base_lightning_shield.as b/scripts/angelscript/monsters/base_lightning_shield.as new file mode 100644 index 00000000..72cc55da --- /dev/null +++ b/scripts/angelscript/monsters/base_lightning_shield.as @@ -0,0 +1,196 @@ +#pragma context server + +namespace MS +{ + +class BaseLightningShield : CGameScript +{ + int CHANNEL_ZAP_LOOP; + int CHANNEL_ZAP_START; + int DMG_LSHIELD; + int LSHIELD_ACTIVE; + string LSHIELD_CLFX_SCRIPT; + string LSHIELD_CL_IDX; + string LSHIELD_DMG_TYPE; + string LSHIELD_DURATION; + float LSHIELD_FREQ_UPDATE; + int LSHIELD_FX_ON; + string LSHIELD_NEXT_SCAN; + string LSHIELD_NEXT_UPDATE; + int LSHIELD_PASSIVE; + int LSHIELD_PASSIVE_ENABLE; + int LSHIELD_RADIUS; + int LSHIELD_REPELL_STRENGTH; + string LSHIELD_TARGET; + int LSHIELD_V_CENTER; + string SOUND_ZAP_LOOP; + string SOUND_ZAP_START; + + BaseLightningShield() + { + LSHIELD_PASSIVE_ENABLE = 1; + LSHIELD_PASSIVE = 1; + LSHIELD_RADIUS = 96; + DMG_LSHIELD = 100; + LSHIELD_REPELL_STRENGTH = 1000; + LSHIELD_V_CENTER = 36; + CHANNEL_ZAP_START = 3; + CHANNEL_ZAP_LOOP = 1; + LSHIELD_CLFX_SCRIPT = "effects/sfx_lightning_shield"; + LSHIELD_DMG_TYPE = "lightning_effect"; + LSHIELD_FREQ_UPDATE = 0.5; + SOUND_ZAP_LOOP = "magic/bolt_loop.wav"; + SOUND_ZAP_START = "magic/bolt_end.wav"; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(LSHIELD_PASSIVE)) return; + if (!(LSHIELD_PASSIVE_ENABLE)) return; + if ((LSHIELD_ACTIVE)) return; + if (m_hAttackTarget != "unset") + { + if (GetGameTime() > LSHIELD_NEXT_SCAN) + { + lshield_scan(); + } + } + if (!(IsEntityAlive(LSHIELD_TARGET))) + { + lshield_passive_fx_off(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetEntityRange(LSHIELD_TARGET) <= LSHIELD_RADIUS) + { + lshield_passive_zap_target(); + } + else + { + lshield_passive_fx_off(); + } + } + + void lshield_passive_zap_target() + { + if (!(LSHIELD_FX_ON)) + { + lshield_passive_fx_start(); + } + if (GetGameTime() > LSHIELD_NEXT_UPDATE) + { + LSHIELD_NEXT_UPDATE = GetGameTime(); + LSHIELD_NEXT_UPDATE += LSHIELD_FREQ_UPDATE; + ClientEvent("update", "all", LSHIELD_CL_IDX, "lshield_on", 0.5); + } + DoDamage(LSHIELD_TARGET, "direct", DMG_LSHIELD, 1.0, GetOwner()); + string ZAP_TARG_RESIST = /* TODO: $get_takedmg */ $get_takedmg(LSHIELD_TARGET, "lightning"); + float ZAP_ROLL = Random(0.0, 2.0); + if (!(ZAP_ROLL < ZAP_TARG_RESIST)) return; + string TARG_ORG = GetEntityOrigin(LSHIELD_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(LSHIELD_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, LSHIELD_REPELL_STRENGTH, 10))); + } + + void lshield_passive_fx_start() + { + LSHIELD_FX_ON = 1; + EmitSound(GetOwner(), CHANNEL_ZAP_LOOP, SOUND_ZAP_LOOP, 10); + EmitSound(GetOwner(), CHANNEL_ZAP_START, SOUND_ZAP_START, 10); + if (LSHIELD_CL_IDX == 0) + { + lshield_start_cl_fx(10.1); + } + } + + void lshield_passive_fx_off() + { + if (!(LSHIELD_FX_ON)) return; + LSHIELD_FX_ON = 0; + EmitSound(GetOwner(), CHANNEL_ZAP_LOOP, SOUND_ZAP_LOOP, 0); + } + + void lshield_scan() + { + LSHIELD_NEXT_SCAN = GetGameTime(); + LSHIELD_NEXT_SCAN += 1.0; + string LSHIELD_LIST = FindEntitiesInSphere("enemy", LSHIELD_RADIUS); + if (!(LSHIELD_LIST != "none")) return; + if (GetTokenCount(LSHIELD_LIST, ";") > 1) + { + ScrambleTokens(LSHIELD_LIST, ";"); + } + LSHIELD_TARGET = GetToken(LSHIELD_LIST, 0, ";"); + } + + void lshield_start_cl_fx() + { + ClientEvent("new", "all", LSHIELD_CLFX_SCRIPT, GetEntityIndex(GetOwner()), LSHIELD_RADIUS, 10.0, LSHIELD_V_CENTER, 1); + LSHIELD_CL_IDX = "game.script.last_sent_id"; + PARAM1("lshield_reset_fx"); + } + + void lshield_reset_fx() + { + LSHIELD_CL_IDX = 0; + } + + void lshield_activate() + { + LSHIELD_ACTIVE = 1; + LSHIELD_DURATION = param1; + lshield_loop(); + LSHIELD_DURATION("lshield_toggle_off"); + LSHIELD_FX_ON = 1; + EmitSound(GetOwner(), CHANNEL_ZAP_LOOP, SOUND_ZAP_LOOP, 10); + EmitSound(GetOwner(), CHANNEL_ZAP_START, SOUND_ZAP_START, 10); + if (LSHIELD_CL_IDX == 0) + { + lshield_start_active_cl_fx(LSHIELD_DURATION); + } + } + + void lshield_start_active_cl_fx() + { + ClientEvent("new", "all", LSHIELD_CLFX_SCRIPT, GetEntityIndex(GetOwner()), LSHIELD_RADIUS, LSHIELD_DURATION, LSHIELD_V_CENTER, 0); + } + + void lshield_toggle_off() + { + LSHIELD_ACTIVE = 0; + LSHIELD_FX_ON = 0; + EmitSound(GetOwner(), CHANNEL_ZAP_LOOP, SOUND_ZAP_LOOP, 0); + LogDebug("lshield_toggle_off"); + } + + void lshield_loop() + { + if (!(LSHIELD_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "lshield_loop"); + if (GetGameTime() > LSHIELD_NEXT_SCAN) + { + lshield_scan(); + } + if (!(IsEntityAlive(LSHIELD_TARGET))) return; + if (!(GetEntityRange(LSHIELD_TARGET) <= LSHIELD_RADIUS)) return; + DoDamage(LSHIELD_TARGET, "direct", DMG_LSHIELD, 1.0, GetOwner()); + string ZAP_TARG_RESIST = /* TODO: $get_takedmg */ $get_takedmg(LSHIELD_TARGET, "lightning"); + float ZAP_ROLL = Random(0.0, 2.0); + LogDebug("lshield_loop ZAP_ROLL vs ZAP_TARG_RESIST"); + if (!(ZAP_ROLL < ZAP_TARG_RESIST)) return; + string TARG_ORG = GetEntityOrigin(LSHIELD_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(LSHIELD_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, LSHIELD_REPELL_STRENGTH, 10))); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((LSHIELD_FX_ON)) + { + EmitSound(GetOwner(), CHANNEL_ZAP_LOOP, SOUND_ZAP_LOOP, 0); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_monster.as b/scripts/angelscript/monsters/base_monster.as new file mode 100644 index 00000000..a6fe110f --- /dev/null +++ b/scripts/angelscript/monsters/base_monster.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "monsters/base_npc_attack.as" +#include "monsters/base_monster_shared.as" + +namespace MS +{ + +class BaseMonster : CGameScript +{ + BaseMonster() + { + } + +} + +} diff --git a/scripts/angelscript/monsters/base_monster_explode.as b/scripts/angelscript/monsters/base_monster_explode.as new file mode 100644 index 00000000..522ce731 --- /dev/null +++ b/scripts/angelscript/monsters/base_monster_explode.as @@ -0,0 +1,49 @@ +#pragma context server + +namespace MS +{ + +class BaseMonsterExplode : CGameScript +{ + int EXPLOSION_DAMAGE; + float EXPLOSION_DAMAGE_FALLOFF; + int EXPLOSION_DISTANCE; + int EXPLOSION_FORCE; + string EXPLOSION_TYPE; + + BaseMonsterExplode() + { + EXPLOSION_DISTANCE = 120; + EXPLOSION_DAMAGE = 300; + EXPLOSION_DAMAGE_FALLOFF = 0.2; + EXPLOSION_FORCE = 300; + EXPLOSION_TYPE = "blunt_effect"; + } + + void do_explode() + { + if ((EXPLOSION_DAMAGE)) + { + XDoDamage(GetEntityOrigin(GetOwner()), EXPLOSION_DISTANCE, EXPLOSION_DAMAGE, EXPLOSION_DAMAGE_FALLOFF, GetOwner(), GetOwner(), "none", EXPLOSION_TYPE, "dmgevent:beam"); + } + } + + void beam_dodamage() + { + if ((param1)) + { + string L_TARGET = param2; + if (GetRelationship(L_TARGET) == "enemy") + { + if (EXPLOSION_FORCE != 0) + { + string L_YAW = /* TODO: $angles */ $angles(GetEntityOrigin(GetOwner()), GetEntityOrigin(L_TARGET)); + AddVelocity(L_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, L_YAW, 0), Vector3(0, EXPLOSION_FORCE, (EXPLOSION_FORCE / 1.3)))); + } + } + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_monster_new.as b/scripts/angelscript/monsters/base_monster_new.as new file mode 100644 index 00000000..e3f6269e --- /dev/null +++ b/scripts/angelscript/monsters/base_monster_new.as @@ -0,0 +1,13 @@ +#pragma context server + +#include "monsters/base_npc_attack_new.as" +#include "monsters/base_monster_shared.as" + +namespace MS +{ + +class BaseMonsterNew : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/base_monster_shared.as b/scripts/angelscript/monsters/base_monster_shared.as new file mode 100644 index 00000000..e2614a39 --- /dev/null +++ b/scripts/angelscript/monsters/base_monster_shared.as @@ -0,0 +1,1433 @@ +#pragma context server + +#include "monsters/base_anti_stuck.as" + +namespace MS +{ + +class BaseMonsterShared : CGameScript +{ + string ADJ_RANGE; + int AM_FLANKING; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int BAST_TELEPORTING; + int BMS_RENDERAMT; + int DEF_STEP_SIZE; + int DID_HELP_TIP; + int FD_LOOP_COUNT; + string FD_MAX_RANGE; + string LAST_STRUCK_FOR; + string MIN_ATTACK_RANGE; + int MOVE_TARGET_IS_NPC; + string MUMMY_LIVES; + int NO_STUCK_CHECKS; + int NPC_ALERTED_ALL; + string NPC_ALERT_LIST; + string NPC_ALERT_OF; + string NPC_ALLY_RESPONSE_RANGE; + string NPC_ALLY_TO_AID; + int NPC_ATTACK_MISS; + string NPC_BOSS_KILLS; + string NPC_BOSS_KNOWS; + string NPC_BOSS_KNOWS_AMTS; + float NPC_BOSS_REGEN_FREQ; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + string NPC_CANT_PARRY_TYPES; + int NPC_FORCED_MOVEDEST; + string NPC_GOING_HOME; + string NPC_HALF_HEIGHT; + string NPC_HEIGHT; + string NPC_HOMER_FIRST_CALL; + string NPC_HOME_ANG; + string NPC_HOME_LOC; + int NPC_IGNORE_PLAYERS; + string NPC_INVISIBLE_SUICIDE; + string NPC_LASTSEEN_ENEMY_TIME; + string NPC_LAST_DAMAGED_OTHER_TIME; + string NPC_LAST_DAMAGED_TIME; + string NPC_LAST_STRUCK_TIME; + string NPC_LAST_SUSPEND_AI; + string NPC_MADE_IT_HOME; + float NPC_MAX_UNSEEN_TIME; + string NPC_MOST_DISTANT; + string NPC_MOVEDEST_TARGET; + int NPC_MOVEMENT_SUSPENDED; + int NPC_NEVER_RESUME; + string NPC_NEVER_RESUME_AI; + string NPC_NEXT_RHOME_WIGGLE; + string NPC_NO_AGRO; + int NPC_NO_ATTACK; + string NPC_NO_COUNT; + string NPC_OLD_ANIM_IDLE; + string NPC_OLD_ANIM_RUN; + string NPC_OLD_ANIM_WALK; + string NPC_OLD_ROAM; + string NPC_PREV_TARGET; + int NPC_PROXACT_INRANGE; + string NPC_PROXACT_PLAYERID; + string NPC_PROXACT_SCANID; + int NPC_PROXACT_TRIPPED; + int NPC_PROX_LOOP; + string NPC_RESUME_AI_TIME; + int NPC_RETURNING_HOME; + string NPC_SILENT_SUICIDE; + string NPC_SPAWN_ANGLES; + string NPC_SPAWN_LOC; + string NPC_SPAWN_TIME; + string NPC_XPTR; + string OLD_NO_STUCK_CHECKS; + string PARRY_TYPE; + string SKEL_RESPAWN_TIMES; + + BaseMonsterShared() + { + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_REGEN_FREQ = 60.0; + NPC_BOSS_RESTORATION = 0.5; + NPC_MAX_UNSEEN_TIME = 120.0; + NPC_CANT_PARRY_TYPES = "target;magic"; + DEF_STEP_SIZE = 32; + PARRY_TYPE = "parried!"; + } + + void OnSpawn() override + { + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SetEntityOrigin(GetOwner(), Vector3(20000, 10000, 0)); + npcatk_suspend_ai(); + NPC_SILENT_SUICIDE = 1; + NPC_INVISIBLE_SUICIDE = 1; + NPC_NO_COUNT = 1; + npc_suicide(); + } + NPC_SPAWN_TIME = GetGameTime(); + if ((G_SIEGE_MAP)) + { + if (GetTokenCount(G_CRITICAL_NPCS, ";") > 0) + { + } + ScheduleDelayedEvent(0.1, "npcatk_setup_siege"); + } + } + + void OnSpawn() override + { + npc_initialdrop(); + } + + void npcatk_setup_siege() + { + if ((NPC_NO_SIEGE_HUNT)) return; + if (!(GetEntityRace(GetOwner()) != "hguard")) return; + if (!(GetEntityRace(GetOwner()) != "human")) return; + if (!(RandomInt(1, 3) == 1)) return; + if ((StringToLower(GetMapName())).findFirst("gertenheld_forest") >= 0) + { + if (GetEntityRace(GetOwner()) == "goblin") + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + NPC_IGNORE_PLAYERS = 1; + npcatk_npc_hunter_loop(); + if ((G_DEVELOPER_MODE)) + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + } + + void npc_initialdrop() + { + string ORIGIN = GetMonsterProperty("origin"); + ORIGIN += Vector3(0, 0, 5); + SetOrigin(ORIGIN); + NPC_HOME_LOC = GetEntityOrigin(GetOwner()); + NPC_HOME_ANG = GetEntityAngles(GetOwner()); + } + + void OnPostSpawn() override + { + if (NPC_ALLY_RESPONSE_RANGE == "NPC_ALLY_RESPONSE_RANGE") + { + NPC_ALLY_RESPONSE_RANGE = GetMonsterMaxHP(); + string L_NPC_ALLY_RANGE_RATIO = NPC_ALLY_RESPONSE_RANGE; + if (L_NPC_ALLY_RANGE_RATIO > 1000) + { + int L_NPC_ALLY_RANGE_RATIO = 1000; + } + L_NPC_ALLY_RANGE_RATIO /= 1000; + NPC_ALLY_RESPONSE_RANGE = /* TODO: $ratio */ $ratio(L_NPC_ALLY_RANGE_RATIO, 256, 1024); + } + if ((NPC_NO_AGRO)) + { + npcatk_suspend_ai(); + } + if ((NPC_NO_ROAM)) + { + SetRoam(false); + } + if ((NPC_FORCE_ROAM)) + { + SetRoam(true); + } + if ((NPC_IS_BOSS)) + { + NPC_BOSS_KILLS = ""; + NPC_BOSS_KNOWS = ""; + NPC_BOSS_KNOWS_AMTS = ""; + ScheduleDelayedEvent(0.1, "npcatk_boss_regen"); + } + if ((DROP_GOLD)) + { + if (DROP_GOLD_MAX != 0) + { + int L_DROP_GOLD = RandomInt(DROP_GOLD_MIN, DROP_GOLD_MAX); + } + if (DROP_GOLD_AMT != 0) + { + if (OVR_DROP_GOLD_AMT == "OVR_DROP_GOLD_AMT") + { + string L_DROP_GOLD = DROP_GOLD_AMT; + } + else + { + string L_DROP_GOLD = OVR_DROP_GOLD_AMT; + } + } + if (NPC_TOTAL_MULTI > 0) + { + L_DROP_GOLD *= NPC_TOTAL_MULTI; + } + SetGold(L_DROP_GOLD); + } + if (!(OVERRIDE_NODROP)) + { + if ((G_NO_DROP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((NPC_NO_DROPS)) return; + if (RandomInt(1, 100) <= DROP_ITEM1_CHANCE) + { + GiveItem(GetOwner(), DROP_ITEM1); + } + if (RandomInt(1, 100) <= DROP_ITEM2_CHANCE) + { + GiveItem(GetOwner(), DROP_ITEM2); + } + if (RandomInt(1, 100) <= DROP_ITEM3_CHANCE) + { + GiveItem(GetOwner(), DROP_ITEM3); + } + if (RandomInt(1, 100) <= DROP_ITEM4_CHANCE) + { + GiveItem(GetOwner(), DROP_ITEM4); + } + if (RandomInt(1, 100) <= DROP_ITEM5_CHANCE) + { + GiveItem(GetOwner(), DROP_ITEM5); + } + } + + void game_targeted_by_player() + { + if ((NPC_CRITICAL)) + { + CallExternal(param1, "ext_show_hbar_monster", GetEntityIndex(GetOwner()), 1); + } + if ((NPC_BATTLE_ALLY)) + { + CallExternal(param1, "ext_show_hbar_monster", GetEntityIndex(GetOwner()), 1); + } + if ((NPC_PROX_ACTIVATE)) + { + if (!(NPC_PROXACT_TRIPPED)) + { + } + if (GetEntityRange(param1) < NPC_PROXACT_RANGE) + { + npcatk_prox_activated(GetEntityIndex(param1), "spottedme_inrange"); + } + if (!(NPC_PROXACT_TRIPPED)) + { + } + if ((NPC_PROXACT_IFSEEN)) + { + } + npcatk_prox_activated(GetEntityIndex(param1), "spottedme"); + } + if ((DID_HELP_TIP)) return; + DID_HELP_TIP = 1; + string TEXT = "You are looking at "; + TEXT += GetMonsterProperty("name"); + TEXT += ".|It's hostile! Kill it!"; + TEXT += "|You gain skill this way. Eventually gaining skill"; + string TEXT2 = "|in a weapon will earn you a title and access to"; + TEXT2 += "|new abilities."; + ShowHelpTip(param1, "help_monster", "Monster", TEXT, TEXT2); + } + + void bm_gold_spew() + { + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + string OUT_PAR3 = param3; + string OUT_PAR4 = param4; + string OUT_PAR5 = param5; + CallExternal(GAME_MASTER, "gold_spew", OUT_PAR1, OUT_PAR2, OUT_PAR3, OUT_PAR4, OUT_PAR5, GetEntityOrigin(GetOwner())); + } + + void npcatk_get_postspawn_properties() + { + if (NPC_RANGED == "NPC_RANGED") + { + if (ATTACK_RANGE > 255) + { + NPC_RANGED = 1; + } + if (MOVE_RANGE > 255) + { + NPC_RANGED = 1; + } + } + NPC_SPAWN_LOC = GetMonsterProperty("origin"); + NPC_SPAWN_ANGLES = GetMonsterProperty("angles"); + NPC_HEIGHT = GetMonsterProperty("height"); + NPC_HALF_HEIGHT = NPC_HEIGHT; + NPC_HALF_HEIGHT /= 2; + MIN_ATTACK_RANGE = NPC_HALF_HEIGHT; + MIN_ATTACK_RANGE += 37; + MIN_ATTACK_RANGE += 10; + if ((NPC_PROX_ACTIVATE)) + { + if (!(NPC_PROXACT_TRIPPED)) + { + } + npcatk_suspend_ai("proxact:postspawn_props"); + npcatk_proxact_scan(); + } + } + + void adj_step_size() + { + if ((G_NO_STEP_ADJ)) return; + if ((NO_STEP_ADJ)) return; + if (GetMonsterProperty("race") == "human") + { + if (!(NPC_BATTLE_ALLY)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string L_MAP_NAME = GetMapName(); + if (L_MAP_NAME == "unrest2_beta1") + { + int EXIT_SUB = 1; + } + if (L_MAP_NAME == "unrest2") + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) + { + // TODO: maxslope 90 + SetStepSize(1000); + } + if ((EXIT_SUB)) return; + string FINAL_STEPSIZE = DEF_STEP_SIZE; + if (GetMonsterProperty("height") < DEF_STEP_SIZE) + { + string FINAL_STEPSIZE = GetMonsterProperty("height"); + if (GetMonsterProperty("height") < 18) + { + int FINAL_STEPSIZE = 18; + } + } + SetStepSize(FINAL_STEPSIZE); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + NPC_LAST_DAMAGED_OTHER_TIME = GetGameTime(); + NPC_ATTACK_MISS = 0; + } + + void npcatk_suspend_attack() + { + if ((NPC_NO_ATTACK)) return; + NPC_NO_ATTACK = 1; + PARAM1("npcatk_resume_attack"); + } + + void npcatk_resume_attack() + { + if (!(NPC_NO_ATTACK)) return; + NPC_NO_ATTACK = 0; + } + + void npcatk_flank() + { + string NEW_DEST = GetEntityOrigin(param1); + int R_ANG = RandomInt(0, 359); + NEW_DEST += /* TODO: $relpos */ $relpos(Vector3(0, R_ANG, 0), Vector3(0, MONSTER_WIDTH, 0)); + npcatk_suspend_attack(2.0); + MOVE_TARGET_IS_NPC = 0; + NPC_MOVEDEST_TARGET = NEW_DEST; + SetMoveDest(NPC_MOVEDEST_TARGET); + } + + void flank_thrash_move_dest() + { + if (!(AM_FLANKING)) return; + SetMoveDest(NPC_FLANK_REPOS); + ScheduleDelayedEvent(0.1, "flank_thrash_move_dest"); + } + + void npcatk_resume_ai() + { + AM_FLANKING = 0; + if (!(SUSPEND_AI)) return; + NPC_NEVER_RESUME = 0; + } + + void game_reached_dest() + { + if (!(AM_FLANKING)) return; + if (!(Distance(GetMonsterProperty("origin"), NPC_FLANK_REPOS) <= 2)) return; + npcatk_resume_ai(); + } + + void npcatk_range_adj() + { + if (!(NEW_AI)) + { + string TARG = GetEntityIndex(HUNT_LASTTARGET); + } + if ((NEW_AI)) + { + string TARG = GetEntityIndex(m_hAttackTarget); + } + string TARGET_HALFHEIGHT = GetEntityHeight(TARG); + TARGET_HALFHEIGHT /= 2; + TARGET_HALFHEIGHT = max(37, min(2000, TARGET_HALFHEIGHT)); + ADJ_RANGE = ATTACK_RANGE; + if (!(ATTACK_RANGE < 256)) return; + string TARG_POS = GetEntityOrigin(TARG); + string MY_Z = (GetMonsterProperty("origin")).z; + string TARG_Z = (TARG_POS).z; + string Z_DIFF = TARG_Z; + MY_Z += TARGET_HALFHEIGHT; + Z_DIFF -= MY_Z; + if (Z_DIFF < 0) + { + string Z_DIFF = /* TODO: $neg */ $neg(Z_DIFF); + } + string FINAL_ATTACK_RANGE = ATTACK_RANGE; + if (Z_DIFF > TARGET_HALFHEIGHT) + { + ADJ_RANGE = ATTACK_HITRANGE; + } + } + + void OnParry(CBaseEntity@ attacker) override + { + SendPlayerMessage(GetEntityIndex(param1), "Your attack was " + PARRY_TYPE); + } + + void npcatk_find_distant() + { + NPC_MOST_DISTANT = "unset"; + FD_MAX_RANGE = param1; + if (FD_MAX_RANGE == "PARAM1") + { + FD_MAX_RANGE = 1024; + } + GetAllPlayers(FD_PLIST); + FD_LOOP_COUNT = 0; + for (int i = 0; i < GetTokenCount(FD_PLIST, ";"); i++) + { + npcatk_fd_loop("rng", FD_MAX_RANGE); + } + } + + void npcatk_fd_loop() + { + string CUR_PLAYER = GetToken(FD_PLIST, FD_LOOP_COUNT, ";"); + FD_LOOP_COUNT += 1; + int DO_NOT_STORE = 0; + if (GetEntityRange(CUR_PLAYER) > FD_MAX_RANGE) + { + int DO_NOT_STORE = 1; + } + if (!(IsEntityAlive(CUR_PLAYER))) + { + int DO_NOT_STORE = 1; + } + if ((DO_NOT_STORE)) return; + if (!(GetEntityRange(CUR_PLAYER) > GetEntityRange(NPC_MOST_DISTANT))) return; + NPC_MOST_DISTANT = CUR_PLAYER; + } + + void npcatk_proxact_scan() + { + if ((NPC_PROXACT_TRIPPED)) return; + GetAllPlayers(LPLAYERS); + NPC_PROX_LOOP = 0; + NPC_PROXACT_INRANGE = 0; + for (int i = 0; i < GetTokenCount(LPLAYERS, ";"); i++) + { + npcatk_proxact_lplayers(); + } + if ((NPC_PROXACT_INRANGE)) + { + npcatk_prox_activated(NPC_PROXACT_SCANID, "player_scan"); + } + if ((NPC_PROXACT_TRIPPED)) return; + ScheduleDelayedEvent(1.0, "npcatk_proxact_scan"); + } + + void npcatk_prox_activated() + { + LogDebug("npcatk_prox_activated: GetEntityName(param1) PARAM2"); + if (param2 != "struck") + { + if ((NPC_PROXACT_FOV)) + { + string TEST_ORIG = GetEntityOrigin(param1); + if (!(WithinCone2D(TEST_ORIG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) + { + } + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green " + GetEntityName(GetOwner()) + "npcatk_prox_activated " + GetEntityName(param1) + NPC_PROXACT_CONE + WithinCone2D(TEST_ORIG, GetMonsterProperty("origin"), GetMonsterProperty("angles"))); + } + int EXIT_SUB = 1; + LogDebug("npcatk_prox_activated: Not in FOV!"); + } + } + if ((EXIT_SUB)) return; + NPC_PROXACT_PLAYERID = param1; + if ((NPC_PROXACT_TRIPPED)) return; + NPC_PROXACT_TRIPPED = 1; + if (NPC_PROXACT_DELAY == "NPC_PROXACT_DELAY") + { + NPC_PROXACT_EVENT(); + } + else + { + NPC_PROXACT_DELAY(NPC_PROXACT_EVENT); + } + } + + void npcatk_proxact_lplayers() + { + string CUR_PLAYER = GetToken(LPLAYERS, i, ";"); + if (!(GetEntityRange(CUR_PLAYER) < NPC_PROXACT_RANGE)) return; + NPC_PROXACT_INRANGE = 1; + NPC_PROXACT_SCANID = CUR_PLAYER; + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((NPC_HEARDSOUND_OVERRIDE)) return; + if ((NPC_PROX_ACTIVATE)) + { + if (!(NPC_PROXACT_TRIPPED)) + { + } + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if ((IsValidPlayer(LAST_HEARD))) + { + } + if (GetEntityRange(LAST_HEARD) < NPC_PROXACT_RANGE) + { + } + npcatk_prox_activated(LAST_HEARD, LAST_HEARD, "hearing"); + } + } + + void ext_super_lure() + { + string LURE_ID = param1; + string LURE_RACE = param2; + string LURE_RUNWALK = param3; + if (!(IsEntityAlive(GetOwner()))) return; + if ((IsEntityAlive(m_hAttackTarget))) return; + if ((false)) return; + if (LURE_RACE != "all") + { + if (GetEntityRace(GetOwner()) != LURE_RACE) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityRace(GetOwner()) != "human")) return; + if (!(GetEntityRace(GetOwner()) != "hguard")) return; + if (LURE_RUNWALK == "run") + { + npcatk_run(); + } + npcatk_setmovedest(param1, 32, "superlure"); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(param1); + } + + void npcatk_run() + { + SetMoveAnim(ANIM_RUN); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 1.0; + if ((IsEntityAlive(m_hAttackTarget))) + { + // TODO: UNCONVERTED: $get(NPCATK_TARGET,range) < ATTACK_MOVERANGE + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + } + + void npcatk_walk() + { + SetMoveAnim(ANIM_WALK); + PlayAnim("once", ANIM_WALK); + AS_ATTACKING = GetGameTime(); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((NPC_XPTR)) + { + if ((IsValidPlayer(m_hLastStruck))) + { + } + NPC_XPTR = 0; + } + if (NPC_NO_AGRO == 1) + { + if ((SUSPEND_AI)) + { + } + NPC_NO_AGRO = 2; + npcatk_resume_ai(); + npcatk_settarget(GetEntityIndex(m_hLastStruck), "go_agro"); + } + if ((NPC_PROX_ACTIVATE)) + { + if (!(NPC_PROXACT_TRIPPED)) + { + } + npcatk_prox_activated(GetEntityIndex(m_hLastStruck), "struck"); + } + LAST_STRUCK_FOR = param1; + if (m_hAttackTarget == "unset") + { + if (GetRelationship(m_hLastStruck) != "ally") + { + } + if (!(/* TODO: $can_damage */ $can_damage(m_hLastStruck))) + { + } + npcatk_flee(GetEntityIndex(m_hLastStruck), 768, 5.0); + } + if (!(IsValidPlayer(m_hLastStruck))) return; + if ((NPC_IGNORE_PLAYERS)) + { + NPC_LAST_STRUCK_TIME = GetGameTime(); + ScheduleDelayedEvent(10.0, "npcatk_resume_civi_hunt"); + } + NPC_IGNORE_PLAYERS = 0; + } + + void npcatk_resume_civi_hunt() + { + if ((NPC_IGNORE_PLAYERS)) return; + float TIME_SINCE_STRUCK = GetGameTime(); + TIME_SINCE_STRUCK -= NPC_LAST_STRUCK_TIME; + if (!(TIME_SINCE_STRUCK > 8)) return; + npcatk_clear_targets("not_struck"); + NPC_IGNORE_PLAYERS = 1; + npcatk_npc_hunter_loop(); + } + + void npcatk_npc_hunter_loop() + { + if (!(NPC_IGNORE_PLAYERS)) return; + ScheduleDelayedEvent(5.0, "npcatk_npc_hunter_loop"); + string N_CRITS = GetTokenCount(G_CRITICAL_NPCS, ";"); + int RND_CRIT = RandomInt(0, N_CRITS); + if ((IsEntityAlive(m_hAttackTarget))) return; + npcatk_settarget(GetToken(G_CRITICAL_NPCS, RND_CRIT, ";")); + } + + void OnDamage(int damage) override + { + if ((param3).findFirst("holy") >= 0) + { + SKEL_RESPAWN_TIMES = 99; + MUMMY_LIVES = 0; + } + NPC_LAST_DAMAGED_TIME = GetGameTime(); + float SINCE_SPAWN = GetGameTime(); + SINCE_SPAWN -= NPC_SPAWN_TIME; + if (SINCE_SPAWN < 2.0) + { + if (!(NPC_OVERRIDE_DEATH)) + { + } + if (GetRelationship(param1) == "enemy") + { + int BLOCK_PREMATURE_DAMAGE = 1; + } + if ((IsValidPlayer(param1))) + { + int BLOCK_PREMATURE_DAMAGE = 1; + } + if ((BLOCK_PREMATURE_DAMAGE)) + { + } + SetDamage("dmg"); + SetDamage("hit"); + return; + } + if ((NPC_NO_PLAYER_DMG)) + { + if ((IsValidPlayer(param1))) + { + } + SetDamage("dmg"); + SetDamage("hit"); + return; + } + if (!(MONSTER_PARRY > 0)) return; + if ((NPC_CANT_PARRY_TYPES).findFirst(param3) >= 0) + { + int NO_PARRY = 1; + } + if ((param3).findFirst("effect") >= 0) + { + int NO_PARRY = 1; + } + if ((NO_PARRY)) return; + int ACCU_ROLL = RandomInt(param4, 100); + int PARRY_ROLL = RandomInt(1, MONSTER_PARRY); + if (PARRY_ROLL > 90) + { + int PARRY_ROLL = 90; + } + if (!(PARRY_ROLL > ACCU_ROLL)) return; + string ATTACKER_ID = param1; + game_parry(ATTACKER_ID); + return; + if (!(NPC_IS_BOSS)) return; + if (!(IsValidPlayer(param1))) return; + string PLAYER_ID = GetPlayerAuthId(param1); + string PLAYER_ID = (PLAYER_ID).substr((PLAYER_ID).length() - 6); + string KNOW_IDX = FindToken(NPC_BOSS_KNOWS, PLAYER_ID, ";"); + if (KNOW_IDX > -1) + { + string N_KNOWS = GetTokenCount(NPC_BOSS_KNOWS, ";"); + string N_KNOWS_AMTS = GetTokenCount(NPC_BOSS_KNOWS_AMTS, ";"); + if (N_KNOWS != N_KNOWS_AMTS) + { + NPC_BOSS_KNOWS = ""; + NPC_BOSS_KNOWS_AMTS = ""; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string RESIST_AMT = GetToken(NPC_BOSS_KNOWS_AMTS, KNOW_IDX, ";"); + string IN_DMG = param2; + IN_DMG *= RESIST_AMT; + SetDamage("dmg"); + return; + if (RESIST_AMT <= 0) + { + SendInfoMsg(param1, "Useless... Your weapons and spells no longer have any affect."); + } + } + } + + void start_running() + { + ScheduleDelayedEvent(0.1, "cycle_up"); + ScheduleDelayedEvent(0.2, "npcatk_run"); + } + + void make_fade_in() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 2); + BMS_RENDERAMT = 0; + ScheduleDelayedEvent(0.1, "make_fade_in_loop"); + } + + void make_fade_in_loop() + { + BMS_RENDERAMT += 10; + if (BMS_RENDERAMT < 255) + { + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", BMS_RENDERAMT); + ScheduleDelayedEvent(0.1, "make_fade_in_loop"); + } + if (BMS_RENDERAMT >= 255) + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + } + + void game_killed_player() + { + if (!(IsValidPlayer(param1))) return; + if (!(NPC_IS_BOSS)) + { + HealEntity(GetOwner(), GetEntityMaxHealth(param1)); + } + if ((NPC_IS_BOSS)) + { + if (!(GetEntityProperty(param1, "scriptvar"))) + { + } + string PLAYER_ID = GetPlayerAuthId(param1); + string PLAYER_ID = (PLAYER_ID).substr((PLAYER_ID).length() - 6); + string KNOW_IDX = FindToken(NPC_BOSS_KNOWS, PLAYER_ID, ";"); + if (KNOW_IDX == -1) + { + if ((NPC_BOSS_KNOWS).length() < 210) + { + } + if (NPC_BOSS_KNOWS.length() > 0) NPC_BOSS_KNOWS += ";"; + NPC_BOSS_KNOWS += PLAYER_ID; + if (NPC_BOSS_KNOWS_AMTS.length() > 0) NPC_BOSS_KNOWS_AMTS += ";"; + NPC_BOSS_KNOWS_AMTS += 0.95; + float RESIST_AMT = 0.95; + } + if (KNOW_IDX > -1) + { + string RESIST_AMT = GetToken(NPC_BOSS_KNOWS_AMTS, KNOW_IDX, ";"); + if (RESIST_AMT > 0) + { + } + RESIST_AMT -= 0.05; + SetToken(NPC_BOSS_KNOWS_AMTS, KNOW_IDX, RESIST_AMT, ";"); + } + if (RESIST_AMT > 0) + { + string MSG_TITLE = "Defeated by Boss "; + MSG_TITLE += GetEntityName(GetOwner()); + string MSG_TEXT = "Your weapons and spells are now only "; + if (RESIST_AMT == 0.95) + { + ShowHelpTip(param1, "generic", "Boss Monsters learn your tactics!", "Boss monsters become more effective at defending themselves against you each they defeat you.|Try to avoid being slain by them!"); + } + RESIST_AMT *= 100; + MSG_TEXT += int(RESIST_AMT); + MSG_TEXT += "% effective against him."; + SendInfoMsg(param1, MSG_TITLE + MSG_TEXT); + } + if (RESIST_AMT <= 0) + { + SendInfoMsg(param1, "Useless... You've been defeated so many times by this boss that your attacks are no longer effective."); + } + } + } + + void npcatk_boss_regen() + { + if (!(NPC_BOSS_REGEN_RATE > 0)) return; + string L_DIFF = (GetGameTime() - NPC_LAST_DAMAGED_TIME); + if (L_DIFF > 240) + { + NPC_BOSS_REGEN_FREQ("npcatk_boss_regen"); + if (!(NPC_BOSS_PAUSE_REGEN)) + { + } + if ((IsEntityAlive(GetOwner()))) + { + } + if (GetEntityHealth(GetOwner()) > 0) + { + } + string HP_TO_GIVE = GetEntityHealth(GetOwner()); + HP_TO_GIVE *= NPC_BOSS_REGEN_RATE; + HealEntity(GetOwner(), HP_TO_GIVE); + } + else + { + L_DIFF("npcatk_boss_regen"); + } + } + + void npcatk_settarget() + { + if ((NPC_ALERTED_ALL)) return; + if (!(NPC_FIGHTS_NPCS)) + { + if (!(IsValidPlayer(param1))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string OUT_PARM1 = param1; + npcatk_alert_all_allies(OUT_PARM1); + } + + void npcatk_alert_all_allies() + { + LogDebug("npcatk_alert_all_allies of GetEntityName(param1) NPC_ALLY_RESPONSE_RANGE NO_ALERT_ALLIES"); + if (!(param1 != GAME_MASTER)) return; + if (!(GetRelationship(param1) == "enemy")) return; + NPC_ALERTED_ALL = 1; + if ((NO_ALERT_ALLIES)) return; + NPC_ALERT_LIST = FindEntitiesInSphere("ally", NPC_ALLY_RESPONSE_RANGE); + if (!(NPC_ALERT_LIST != "none")) return; + NPC_ALERT_OF = param1; + for (int i = 0; i < GetTokenCount(NPC_ALERT_LIST, ";"); i++) + { + npcatk_alert_in_range(); + } + } + + void npcatk_alert_in_range() + { + string CUR_ALLY = GetToken(NPC_ALERT_LIST, i, ";"); + CallExternal(CUR_ALLY, "npcatk_ally_alert", NPC_ALERT_OF, GetEntityIndex(GetOwner()), "alert_all_in_range"); + } + + void npcatk_ally_alert() + { + if ((NPC_NO_AGRO)) + { + if ((SUSPEND_AI)) + { + } + npcatk_resume_ai(); + npcatk_settarget(GetEntityIndex(param2), "go_agro_ally_alert"); + } + if ((SUSPEND_AI)) return; + if ((NEW_AI)) + { + if (m_hAttackTarget == "unset") + { + } + if (!(NPC_MOVING_LAST_KNOWN)) + { + } + if (!(NPC_IGNORE_ALLIES)) + { + } + string NME_TO_TARGET = param1; + NPC_ALLY_TO_AID = param2; + npcatk_settarget(NME_TO_TARGET, "ally_alerted"); + npc_aiding_ally(NPC_ALLY_TO_AID); + } + else + { + if (HUNT_LASTTARGET == �NONE�) + { + } + if (!(IS_HUNTING)) + { + } + if (!(NPC_IGNORE_ALLIES)) + { + } + string NME_TO_TARGET = param1; + NPC_ALLY_TO_AID = param2; + npcatk_target(NME_TO_TARGET, "ally_alerted"); + npc_aiding_ally(NPC_ALLY_TO_AID); + } + } + + void cycle_down() + { + NPC_ALERTED_ALL = 0; + if (!(NPC_NO_AGRO == 2)) return; + NPC_NO_AGRO = 1; + npcatk_suspend_ai(); + npcatk_clear_music(); + } + + void OnAttackDoDamage(CBaseEntity@ target) + { + if ((CANT_DAMAGE)) return; + string ADJ_DAMAGE = param3; + string ADJ_HITCHANCE = param4; + ADJ_DAMAGE *= EXT_DAMAGE_ADJUSTMENT; + ADJ_HITCHANCE *= EXT_HITCHANCE_ADJUSTMENT; + string NPC_DMG_PARAM1 = param1; + string NPC_DMG_PARAM2 = param2; + string NPC_DMG_PARAM5 = param5; + string NPC_DMG_PARAM6 = param6; + string NPC_DMG_PARAM7 = param7; + DoDamage(NPC_DMG_PARAM1, NPC_DMG_PARAM2, ADJ_DAMAGE, ADJ_HITCHANCE, NPC_DMG_PARAM5); + } + + void npcatk_go_home() + { + if (!(NPC_HOMER_FIRST_CALL)) + { + NPC_HOMER_FIRST_CALL = 1; + NPC_MADE_IT_HOME = 0; + NPC_GOING_HOME = 1; + } + if (m_hAttackTarget != "unset") + { + NPC_HOMER_FIRST_CALL = 0; + NPC_MADE_IT_HOME = 1; + NPC_GOING_HOME = 0; + } + if (!(m_hAttackTarget == "unset")) return; + if ((NPC_MADE_IT_HOME)) return; + if (GetMonsterProperty("movedest.origin") != NPC_SPAWN_LOC) + { + npcatk_setmovedest(NPC_SPAWN_LOC, 1, "going_home"); + } + if (Distance(GetMonsterProperty("origin"), NPC_SPAWN_LOC) <= MONSTER_WIDTH) + { + SetMoveDest("none"); + SetAngles("face"); + NPC_GOING_HOME = 0; + NPC_MADE_IT_HOME = 1; + NPC_HOMER_FIRST_CALL = 0; + npc_made_it_home(); + } + else + { + ScheduleDelayedEvent(1.0, "npcatk_go_home"); + } + } + + void npcatk_suspend_movement() + { + SetRoam(false); + SetMoveAnim(param1); + SetIdleAnim(param1); + if (!(NPC_MOVEMENT_SUSPENDED)) + { + NPC_OLD_ANIM_RUN = ANIM_RUN; + NPC_OLD_ANIM_WALK = ANIM_WALK; + NPC_OLD_ANIM_IDLE = ANIM_IDLE; + OLD_NO_STUCK_CHECKS = int(NO_STUCK_CHECKS); + NPC_OLD_ROAM = GetRoam(GetOwner()); + LogDebug("npcatk_suspend_movement oldroam NPC_OLD_ROAM"); + } + NPC_MOVEMENT_SUSPENDED = 1; + ANIM_RUN = param1; + ANIM_WALK = param1; + ANIM_IDLE = param1; + NO_STUCK_CHECKS = 1; + if ((param2).findFirst(PARAM) == 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PARAM2("npcatk_resume_movement"); + } + + void npcatk_resume_movement() + { + if (!(NPC_MOVEMENT_SUSPENDED)) return; + NPC_MOVEMENT_SUSPENDED = 0; + LogDebug("npcatk_resume_movement"); + SetRoam(NPC_OLD_ROAM); + ANIM_RUN = NPC_OLD_ANIM_RUN; + ANIM_WALK = NPC_OLD_ANIM_WALK; + ANIM_IDLE = NPC_OLD_ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + NO_STUCK_CHECKS = OLD_NO_STUCK_CHECKS; + PlayAnim("once", "break"); + } + + void npcatk_clear_targets() + { + if (!(NPC_RETURN_HOME)) return; + if ((NPC_RETURNING_HOME)) return; + NPC_RETURNING_HOME = 1; + NPC_NEXT_RHOME_WIGGLE = GetGameTime(); + NPC_NEXT_RHOME_WIGGLE += Random(10.0, 20.0); + LogDebug("npcatk_clear_targets returning home"); + ScheduleDelayedEvent(1.0, "npcatk_go_home_loop"); + if (!(NPC_NO_AGRO == 2)) return; + NPC_NO_AGRO = 1; + npcatk_suspend_ai(); + } + + void npcatk_go_home_loop() + { + if (m_hAttackTarget != "unset") + { + NPC_RETURNING_HOME = 0; + } + if (!(m_hAttackTarget == "unset")) return; + if ((NPC_RETURNING_HOME)) + { + float HOME_DIST = Distance(NPC_HOME_LOC, GetMonsterProperty("origin")); + LogDebug("npcatk_go_home_loop dist HOME_DIST getdist GetEntityProperty(GetOwner(), "movedest.prox")"); + if (HOME_DIST > 64) + { + if (GetGameTime() > NPC_NEXT_RHOME_WIGGLE) + { + npcatk_setmovedest(/* TODO: $relpos */ $relpos(Vector3(0, Random(0.0, 359.0), 0), Vector3(0, 500, 0)), 0); + PlayAnim("once", ANIM_RUN); + NPC_NEXT_RHOME_WIGGLE = GetGameTime(); + NPC_NEXT_RHOME_WIGGLE += Random(10.0, 20.0); + } + else + { + npcatk_setmovedest(NPC_HOME_LOC, 32, "return_home"); + SetRoam(true); + } + Random(0_5, 1_5)("npcatk_go_home_loop"); + } + else + { + NPC_RETURNING_HOME = 0; + string HOME_YAW = /* TODO: $vec.yaw */ $vec.yaw(NPC_HOME_ANG); + SetAngles("face"); + ScheduleDelayedEvent(1.0, "npcatk_return_home_pos_reset"); + SetRoam(false); + LogDebug("npcatk_clear_targets made it home"); + } + } + } + + void npcatk_return_home_pos_reset() + { + string FACE_SPOT = NPC_HOME_LOC; + string FACE_DIR = /* TODO: $vec.yaw */ $vec.yaw(NPC_HOME_ANG); + FACE_SPOT += /* TODO: $relpos */ $relpos(Vector3(0, FACE_DIR, 0), Vector3(0, 256, 0)); + SetMoveDest(FACE_SPOT); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!((param5).findFirst("_effect") >= 0)) return; + if ((NPC_DOT_POISON)) + { + string L_DOT = GetEntityMaxHealth(param2); + L_DOT *= 0.05; + L_DOT *= NPC_DOT_POISON_RATIO; + if (GetEntityProperty(GetOwner(), "dmgmulti") > 1) + { + L_DOT /= GetEntityProperty(GetOwner(), "dmgmulti"); + } + ApplyEffect(param2, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), L_DOT); + } + if ((NPC_DOT_FIRE)) + { + string L_DOT = GetEntityMaxHealth(param2); + L_DOT *= 0.15; + L_DOT *= NPC_DOT_FIRE_RATIO; + if (GetEntityProperty(GetOwner(), "dmgmulti") > 1) + { + L_DOT /= GetEntityProperty(GetOwner(), "dmgmulti"); + } + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), L_DOT); + } + if ((NPC_DOT_COLD)) + { + string L_DOT = GetEntityMaxHealth(param2); + L_DOT *= 0.05; + L_DOT *= NPC_DOT_COLD_RATIO; + if (GetEntityProperty(GetOwner(), "dmgmulti") > 1) + { + L_DOT /= GetEntityProperty(GetOwner(), "dmgmulti"); + } + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), L_DOT); + } + if ((NPC_DOT_LIGHTNING)) + { + string L_DOT = GetEntityMaxHealth(param2); + L_DOT *= 0.1; + L_DOT *= NPC_DOT_LIGHTNING_RATIO; + if (GetEntityProperty(GetOwner(), "dmgmulti") > 1) + { + L_DOT /= GetEntityProperty(GetOwner(), "dmgmulti"); + } + ApplyEffect(param2, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), L_DOT); + } + } + + void npcatk_suspend_roam() + { + SetRoam(false); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += param1; + PARAM1("npcatk_resume_roam"); + } + + void npcatk_resume_roam() + { + SetRoam(true); + } + + void OnSuspendAI() + { + if ((SUSPEND_AI)) return; + NPC_LAST_SUSPEND_AI = GetGameTime(); + NPC_RESUME_AI_TIME = GetGameTime(); + if (param1 != "PARAM1") + { + NPC_RESUME_AI_TIME += param1; + } + else + { + NPC_NEVER_RESUME_AI = 1; + NPC_RESUME_AI_TIME = 999; + } + } + + void npcatk_fx_sprite_in1() + { + if (GetEntityHeight(GetOwner()) <= 64) + { + float SPRITE_SCALE = 1.0; + } + if (GetEntityHeight(GetOwner()) > 128) + { + float SPRITE_SCALE = 2.0; + } + if (GetEntityHeight(GetOwner()) > 200) + { + float SPRITE_SCALE = 4.0; + } + string L_ORIGIN = GetEntityOrigin(GetOwner()); + if (!(GetEntityProperty(GetOwner(), "fly"))) + { + string L_HHEIGHT = GetEntityHeight(GetOwner()); + L_HHEIGHT *= 0.5; + L_ORIGIN += "z"; + } + ClientEvent("new", "all", "effects/sfx_sprite_in", L_ORIGIN, "c-tele1.spr", 25, SPRITE_SCALE); + if ((NPC_DO_SPAWN_SOUND)) + { + EmitSound(GetOwner(), 0, "magic/spawn_loud.wav", 10); + } + } + + void npcatk_fx_sprite_in2() + { + if (GetEntityHeight(GetOwner()) <= 64) + { + float SPRITE_SCALE = 3.0; + } + if (GetEntityHeight(GetOwner()) > 128) + { + float SPRITE_SCALE = 5.0; + } + if (GetEntityHeight(GetOwner()) > 200) + { + float SPRITE_SCALE = 7.0; + } + string L_ORIGIN = GetEntityOrigin(GetOwner()); + if (!(GetEntityProperty(GetOwner(), "fly"))) + { + string L_HHEIGHT = GetEntityHeight(GetOwner()); + L_HHEIGHT *= 0.5; + L_ORIGIN += "z"; + } + ClientEvent("new", "all", "effects/sfx_sprite_in", L_ORIGIN, "xflare1.spr", 20, SPRITE_SCALE); + if ((NPC_DO_SPAWN_SOUND)) + { + EmitSound(GetOwner(), 0, "magic/spawn_loud.wav", 10); + } + } + + void npcatk_handle_postevents() + { + if (NPC_SPRITE_IN == 1) + { + npcatk_fx_sprite_in1(); + } + else + { + if (NPC_SPRITE_IN == 2) + { + npcatk_fx_sprite_in2(); + } + else + { + if ((NPC_DO_SPAWN_SOUND)) + { + EmitSound(GetOwner(), 0, "magic/spawn_loud.wav", 10); + } + } + } + } + + void npcatk_clear_music() + { + if (!(NPC_CUSTOM_COMBAT_MUSIC)) return; + // TODO: playmp3 all stop + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((NPC_WAS_IN_BATTLE)) + { + CallExternal("players", "ext_untargeted_by_mob", GetEntityIndex(GetOwner())); + } + cycle_down(); + NPC_PREV_TARGET = "unset"; + if (NPC_DO_ON_DIE > 0) + { + if (NPC_SAY_ON_DIE != "NPC_SAY_ON_DIE") + { + NPC_DO_ON_DIE -= 1; + SayText(NPC_SAY_ON_DIE); + } + } + } + + void npc_targetsighted() + { + if (NPC_DO_ON_SPOT > 0) + { + if (NPC_SAY_ON_SPOT != "NPC_SAY_ON_SPOT") + { + NPC_DO_ON_SPOT -= 1; + SayText(NPC_SAY_ON_SPOT); + } + } + if ((NEW_AI)) + { + if (m_hAttackTarget != NPC_PREV_TARGET) + { + NPC_PREV_TARGET = m_hAttackTarget; + if ((IsValidPlayer(m_hAttackTarget))) + { + } + NPC_WAS_IN_BATTLE = 1; + CallExternal(m_hAttackTarget, "ext_targeted_by_mob", GetEntityIndex(GetOwner())); + } + } + else + { + if (HUNT_LASTTARGET != NPC_PREV_TARGET) + { + NPC_PREV_TARGET = HUNT_LASTTARGET; + if ((IsValidPlayer(HUNT_LASTTARGET))) + { + } + NPC_WAS_IN_BATTLE = 1; + CallExternal(HUNT_LASTTARGET, "ext_targeted_by_mob", GetEntityIndex(GetOwner())); + } + } + if (!(NPC_CUSTOM_COMBAT_MUSIC)) return; + // TODO: playmp3 NPC_PREV_TARGET combat NPC_CMUSIC_FILE + if ((NPC_NEVER_UNAGRO)) return; + NPC_LASTSEEN_ENEMY_TIME = GetGameTime(); + } + + void npc_targetvalidate() + { + if (NPC_LASTSEEN_ENEMY_TIME > 0) + { + if (!(NPC_NEVER_UNAGRO)) + { + } + string L_CALM_TIME = NPC_LASTSEEN_ENEMY_TIME; + L_CALM_TIME += NPC_MAX_UNSEEN_TIME; + if (GetGameTime() > L_CALM_TIME) + { + LogDebug("npc_targetvalidate shared LongTimeNoSee L_CALM_TIME max NPC_MAX_UNSEEN_TIME last NPC_LASTSEEN_ENEMY_TIME cur game.time to L_CALM_TIME"); + if ((NEW_AI)) + { + string L_TARG_RANGE = GetEntityRange(m_hAttackTarget); + } + else + { + string L_TARG_RANGE = GetEntityRange(HUNT_LASTTARGET); + } + if (L_TARG_RANGE < ATTACK_HITRANGE) + { + if (!(NPC_RANGED)) + { + } + LogDebug("npcatk_targetvalidate shared aborting calm down , near target"); + NPC_LASTSEEN_ENEMY_TIME = GetGameTime(); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + NPC_LASTSEEN_ENEMY_TIME = 0; + if ((NEW_AI)) + { + NPC_PREV_TARGET = "unset"; + } + else + { + NPC_PREV_TARGET = �NONE�; + NPC_TARGET_INVALID = 1; + } + npcatk_clear_targets("LongTimeNoSee"); + } + } + } + + void npc_selectattack() + { + NPC_LASTSEEN_ENEMY_TIME = GetGameTime(); + } + + void npcatk_tele_hunter_loop() + { + LogDebug("npcatk_tele_hunter_loop BAST_TELEPORTING"); + if (!(NPC_TELEHUNT)) return; + if (!(IsEntityAlive(GetOwner()))) return; + NPC_TELEHUNT_FREQ("npcatk_tele_hunter_loop"); + if ((BAST_TELEPORTING)) return; + string L_TELE_TARG = "none"; + if ((NPC_TELEHUNT_RANDOM)) + { + if (GetPlayerCount() > 0) + { + } + GetAllPlayers(TELEHUNT_PLR_LIST); + string L_NPLAYERS = GetTokenCount(TELEHUNT_PLR_LIST, ";"); + L_NPLAYERS -= 1; + int RND_PLR = RandomInt(0, L_NPLAYERS); + string L_TELE_TARG = GetToken(TELEHUNT_PLR_LIST, 0, ";"); + LogDebug("npcatk_tele_hunter_loop random GetEntityName(L_TELE_TARG)"); + } + else + { + string L_TELE_TARG = m_hAttackTarget; + } + if (!(L_TELE_TARG != "none")) return; + npc_telehunt_attempt(L_TELE_TARG); + if ((NPC_TELEHUNT_ABORT)) return; + BAST_TELEPORTING = 1; + if (NPC_TELEHUNT_DELAY > 0) + { + NPC_TELEHUNT_DELAY("as_tele_to_player_loop", L_TELE_TARG); + } + else + { + LogDebug("npcatk_tele_hunter_loop as_tele_to_player_loop GetEntityName(L_TELE_TARG)"); + as_tele_to_player_loop(L_TELE_TARG); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_noclip.as b/scripts/angelscript/monsters/base_noclip.as new file mode 100644 index 00000000..2e9d464c --- /dev/null +++ b/scripts/angelscript/monsters/base_noclip.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "monsters/base_propelled.as" + +namespace MS +{ + +class BaseNoclip : CGameScript +{ + int NPC_HACKED_MOVE_SPEED; + + BaseNoclip() + { + NPC_HACKED_MOVE_SPEED = 1; + } + + void OnSpawn() override + { + basenoclip_flight(); + } + + void basenoclip_flight() + { + ScheduleDelayedEvent(0.1, "basenoclip_flight"); + string MY_ORG = GetMonsterProperty("origin"); + MY_ORG += /* TODO: $relvel */ $relvel(0, FWD_SPEED, 0); + SetEntityOrigin(GetOwner(), MY_ORG); + if (!(IS_FLEEING)) + { + SetMoveDest(NPC_NOCLIP_DEST); + } + else + { + SetMoveDest(NPC_NOCLIP_DEST); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_npc.as b/scripts/angelscript/monsters/base_npc.as new file mode 100644 index 00000000..bd7bd88b --- /dev/null +++ b/scripts/angelscript/monsters/base_npc.as @@ -0,0 +1,349 @@ +#pragma context server + +#include "monsters/externals.as" +#include "monsters/base_self_adjust.as" + +namespace MS +{ + +class BaseNpc : CGameScript +{ + int EFFECT_DAMAGE_DELAY; + int EXT_DAMAGE_ADJUSTMENT; + int EXT_HITCHANCE_ADJUSTMENT; + int HAS_INCLUDE_NPC; + string IMMUNE_VAMPIRE; + string IN_ICECAGE; + string IS_BLOODLESS; + int NPC_AUTO_DEATH; + int NPC_CRIT_WARN_DELAY; + string NPC_DEATH_MSG; + int NPC_DID_DEATH; + string NPC_FIGHTS_NPCS; + float NPC_FREQ_WARN; + string NPC_FRIENDLY; + string NPC_GAVE_XP_MSG; + string NPC_REACT_CANSEETARGET; + string NPC_REACT_LAST_TARGET; + string NPC_REACT_RESET_TARGET_TIME; + string SOUND_DEATH; + + BaseNpc() + { + NPC_FREQ_WARN = 5.0; + HAS_INCLUDE_NPC = 1; + NPC_DEATH_MSG = "unset"; + NPC_AUTO_DEATH = 1; + SOUND_DEATH = "none"; + } + + void display_timing() + { + SendInfoMsg("all", param1 + param2); + } + + void OnSpawn() override + { + SetBloodType("red"); + npc_spawn(); + ScheduleDelayedEvent(1.0, "npc_post_spawn"); + if ((G_CHRISTMAS_MODE)) + { + if (GetEntityRace(GetOwner()) == "human") + { + } + SetModelBody(2, 1); + } + string MY_RACE = GetMonsterProperty("race"); + if (MY_RACE == "human") + { + NPC_FRIENDLY = 1; + } + if (MY_RACE == "hguard") + { + NPC_FRIENDLY = 1; + } + if (MY_RACE == "elf") + { + NPC_FRIENDLY = 1; + } + if (MY_RACE == "dwarf") + { + NPC_FRIENDLY = 1; + } + if ((NPC_FRIENDLY)) + { + NPC_FIGHTS_NPCS = 1; + } + if ((G_NPC_COMBAT_MAP)) + { + NPC_FIGHTS_NPCS = 1; + } + if (MY_RACE != "undead") + { + if (/* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "holy") != 0) + { + if (!(IS_SKELETON)) + { + } + if (!(IS_UNHOLY)) + { + SetDamageResistance("holy", 0.0); + } + } + } + else + { + SetDamageResistance("poison", 0.0); + IMMUNE_VAMPIRE = 1; + } + EFFECT_DAMAGE_DELAY = 0; + } + + void game_postspawn() + { + if ((NPC_REACTS)) + { + npc_react_loop(); + } + if ((GetEntityName(GetOwner())).findFirst("metal") >= 0) + { + IS_BLOODLESS = 1; + } + if ((GetEntityName(GetOwner())).findFirst("iron") >= 0) + { + IS_BLOODLESS = 1; + } + if ((GetEntityName(GetOwner())).findFirst("stone") >= 0) + { + IS_BLOODLESS = 1; + } + if ((IS_BLOODLESS)) + { + IMMUNE_VAMPIRE = 1; + SetDamageResistance("poison", 0.0); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((NPC_DID_DEATH)) return; + NPC_DID_DEATH = 1; + if ((true)) + { + if ((G_APRIL_FOOLS_MODE)) + { + CallExternal(GAME_MASTER, "gm_april_fools_spawn_add", GetEntityOrigin(GetOwner())); + } + if ((NPC_SUMMON)) + { + G_NPC_SUMMON_COUNT -= 1; + if (G_NPC_SUMMON_COUNT < 0) + { + SetGlobalVar("G_NPC_SUMMON_COUNT", 0); + } + LogDebug("game_death_summoned G_NPC_SUMMON_COUNT"); + } + } + if (!(NPC_NO_END_FLY)) + { + SetFly(false); + } + if ((GOLD_BAGS)) + { + if (!(NPC_NO_DROPS)) + { + } + bm_gold_spew(GOLD_PER_BAG, GOLD_BAGS_PPLAYER, GOLD_RADIUS, GOLD_BAGS_PPLAYER, GOLD_MAX_BAGS); + } + if (DROPS_CONTAINER == 1) + { + if (!(G_NO_DROP)) + { + } + if (RandomInt(1, 100) <= CONTAINER_DROP_CHANCE) + { + SpawnNPC(CONTAINER_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: CONTAINER_PARAM1, CONTAINER_PARAM2, CONTAINER_PARAM3, CONTAINER_PARAM4 + } + } + if ((EXT_FADE_ON_DEATH)) + { + if (GetMonsterMaxHP() < 1000) + { + } + if (!(NPC_NEVER_FADE)) + { + } + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner())); + } + SetAnimFrameRate(BASE_FRAMERATE); + SetAnimMoveSpeed(BASE_MOVESPEED); + if ((IN_ICECAGE)) + { + ClientEvent("update", "all", SCRIPT_ICECAGE, "end_cage_fx"); + IN_ICECAGE = 0; + } + if ((NPC_CRITICAL)) + { + string INFO_TITLE = "A CRITICAL NPC HAS DIED!"; + string INFO_MSG = GetEntityName(GetOwner()); + INFO_MSG += " has been slain! "; + SendInfoMsg("all", INFO_TITLE + INFO_MSG); + CallExternal(GAME_MASTER, "gm_crit_npc_died", GetEntityIndex(GetOwner()), GetEntityIndex(m_hLastStruck)); + } + npc_death(); + if ((NPC_AUTO_DEATH)) + { + SetMenuAutoOpen(0); + if (!(NPC_ALERTED_ALL)) + { + if ((HAS_AI)) + { + } + npcatk_alert_all_allies(GetEntityIndex(m_hLastStruck)); + } + if (!(NPC_SILENT_DEATH)) + { + if (NPC_ALT_SOUND_DEATH == "NPC_ALT_SOUND_DEATH") + { + EmitSound(GetOwner(), 0, SOUND_DEATH, 5); + } + else + { + EmitSound(GetOwner(), 0, NPC_ALT_SOUND_DEATH, 5); + } + } + PlayAnim("critical", ANIM_DEATH); + if ((CHEAT_MAP)) + { + DeleteEntity(GetOwner(), true); // fade out + } + if (!(NPC_GAVE_XP_MSG)) + { + } + NPC_GAVE_XP_MSG = 1; + string MON_FULL = GetMonsterProperty("name.full"); + string OUT_MSG = "You've slain "; + OUT_MSG += MON_FULL; + if (NPC_DEATH_MSG != "unset") + { + string OUT_MSG = NPC_DEATH_MSG; + } + SendColoredMessage(GetEntityIndex(m_hLastStruck), OUT_MSG); + } + CallExternal(GetOwner(), "effect_die", "base_npc"); + ClearFX(); + } + + void game_fake_death() + { + NPC_DID_DEATH = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((NPC_CRITICAL)) + { + if (!(NPC_CRIT_WARN_DELAY)) + { + NPC_CRIT_WARN_DELAY = 1; + NPC_FREQ_WARN("npcatk_reset_warn_delay"); + string INFO_TITLE = "Critical NPC Under Attack!"; + string INFO_MSG = GetEntityName(GetOwner()); + INFO_MSG += " is under attack!"; + SendInfoMsg("all", INFO_TITLE + INFO_MSG); + } + } + } + + void npcatk_reset_warn_delay() + { + NPC_CRIT_WARN_DELAY = 0; + } + + void npcatk_get_postspawn_properties() + { + LogDebug("npcatk_get_postspawn_properties NPC_HP_MULTI"); + EXT_HITCHANCE_ADJUSTMENT = 1; + EXT_DAMAGE_ADJUSTMENT = 1; + } + + void npc_react_loop() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(1.0, "npc_react_loop"); + if ((CanSee(NPC_REACT_SEETARGET, NPC_REACT_SEETARGET_RANGE))) + { + if (GetEntityIndex(m_hLastSeen) != NPC_REACT_LAST_TARGET) + { + } + NPC_REACT_LAST_TARGET = GetEntityIndex(m_hLastSeen); + NPC_REACT_RESET_TARGET_TIME = GetGameTime(); + NPC_REACT_RESET_TARGET_TIME += 60.0; + if (!(NPC_REACT_CANSEETARGET)) + { + npcreact_targetsighted(NPC_REACT_LAST_TARGET); + } + NPC_REACT_CANSEETARGET = 1; + } + else + { + if ((NPC_REACT_CANSEETARGET)) + { + npc_react_sightlost(); + } + NPC_REACT_CANSEETARGET = 0; + if (GetGameTime() > NPC_REACT_RESET_TARGET_TIME) + { + } + NPC_REACT_LAST_TARGET = 0; + } + } + + void OnPostSpawn() override + { + if (!(/* TODO: $anim_exists */ $anim_exists(ANIM_DEATH))) + { + LogDebug("WARNING! ANIM_DEATH does not exist in GetScriptName(GetOwner())"); + string TEST_ANIM_DEATH = "diesimple"; + if (/* TODO: $anim_exists */ $anim_exists(TEST_ANIM_DEATH) > -1) + { + ANIM_DEATH = TEST_ANIM_DEATH; + } + string TEST_ANIM_DEATH = "diesforward"; + if (/* TODO: $anim_exists */ $anim_exists(TEST_ANIM_DEATH) > -1) + { + ANIM_DEATH = TEST_ANIM_DEATH; + } + string TEST_ANIM_DEATH = "die"; + if (/* TODO: $anim_exists */ $anim_exists(TEST_ANIM_DEATH) > -1) + { + ANIM_DEATH = TEST_ANIM_DEATH; + } + string TEST_ANIM_DEATH = "die_fallback"; + if (/* TODO: $anim_exists */ $anim_exists(TEST_ANIM_DEATH) > -1) + { + ANIM_DEATH = TEST_ANIM_DEATH; + } + string TEST_ANIM_DEATH = "death"; + if (/* TODO: $anim_exists */ $anim_exists(TEST_ANIM_DEATH) > -1) + { + ANIM_DEATH = TEST_ANIM_DEATH; + } + if ((G_DEVELOPER_MODE)) + { + } + if (/* TODO: $anim_exists */ $anim_exists(ANIM_DEATH) > -1) + { + LogDebug("Substituting with ANIM_DEATH"); + } + else + { + LogDebug("WARNING! COULD NOT FIND ALT DEATH ANIM FOR GetScriptName(GetOwner()) [ ANIM_DEATH ]"); + } + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_npc_attack.as b/scripts/angelscript/monsters/base_npc_attack.as new file mode 100644 index 00000000..37ae610f --- /dev/null +++ b/scripts/angelscript/monsters/base_npc_attack.as @@ -0,0 +1,846 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class BaseNpcAttack : CGameScript +{ + string ATTACK_HITRANGE; + string ATTACK_RANGE; + string CANT_TRACK; + string CAN_ATTACK; + string CAN_FLEE; + string CAN_FLINCH; + string CAN_HEAR; + string CAN_HUNT; + string CAN_RETALIATE; + string CHASE_RANGE; + int CHICKEN_RUN; + string CKN_MY_OLD_POS; + int CKN_STUCK_COUNTER; + string CKN_TIME_END; + int CYCLED_UP; + string CYCLE_TIME; + float CYCLE_TIME_BATTLE; + float CYCLE_TIME_IDLE; + string ENTITY_ENEMY; + int FLEE_DIR; + string FLEE_DISTANCE; + string FLINCH_DELAY; + string FLINCH_DMG_REQ; + int HAS_AI; + int HEARD_PLAYER; + string HEAR_RANGE_MAX; + string HEAR_RANGE_PLAYER; + string HUNTING_PLAYER; + int HUNT_AGRO; + string HUNT_LASTTARGET; + int IS_FLEEING; + string IS_HUNTING; + int MONSTER_ID; + string MOVE_RANGE; + string M_ATTACK_HITRANGE; + string NPCATK_FLEE_RESTORETARGET; + string NPCATK_TARGET; + int NPC_ALERTED_ALL; + string NPC_ALLY_RESPONSE_RANGE; + string NPC_CANSEE_TARGET; + int NPC_DELAYING_FLINCH; + string NPC_HEAR_TARGET; + int NPC_INITIALIZED; + string NPC_LASTSEEN_POS; + string NPC_MOVE_TARGET; + string NPC_MUST_SEE_TARGET; + int NPC_STUCK_TELEPORT; + int NPC_TARGET_INVALID; + string NPC_TARG_HALFHEIGHT; + string NPC_VANISHED_AT; + string NPC_VANISH_RETURN_TIME; + string ORIG_HUNT_AGRO; + string ORIG_NPC_MOVE_TARGET; + int OUT_OF_RANGE; + int PURE_FLEE; + string RETALIATE_CHANCE; + int SUSPEND_AI; + + BaseNpcAttack() + { + HAS_AI = 1; + CYCLE_TIME_IDLE = 2.8; + CYCLE_TIME_BATTLE = 0.1; + CYCLE_TIME = CYCLE_TIME_IDLE; + MONSTER_ID = RandomInt(1000, 9999); + } + + void OnSpawn() override + { + Random(0_5, 1_0)("npcatk_get_postspawn_properties"); + } + + void npcatk_get_postspawn_properties() + { + npcatk_check_sets(); + ORIG_HUNT_AGRO = HUNT_AGRO; + IS_FLEEING = 0; + HUNT_LASTTARGET = �NONE�; + NPCATK_TARGET = "unset"; + NPC_INITIALIZED = 1; + } + + void hunting_mode_go() + { + SetRepeatDelay(CYCLE_TIME); + npcatk_hunt(); + if (!(NPC_INITIALIZED)) return; + if (!(CAN_HUNT)) return; + if ((SUSPEND_AI)) return; + if ((IS_FLEEING)) return; + if ((PLAYING_DEAD)) return; + NPCATK_TARGET = HUNT_LASTTARGET; + if (HUNT_LASTTARGET != �NONE�) + { + if (GetEntityRange(HUNT_LASTTARGET) > CHASE_RANGE) + { + SetMoveAnim(ANIM_WALK); + npcatk_clear_targets("targ_out_of_range"); + } + if (!(IsEntityAlive(HUNT_LASTTARGET))) + { + int TARG_DIED = 1; + } + if (!((HUNT_LASTTARGET !is null))) + { + int TARG_DIED = 1; + } + if ((TARG_DIED)) + { + my_target_died(HUNT_LASTTARGET); + HUNT_LASTTARGET = �NONE�; + NPCATK_TARGET = "unset"; + game_wander(); + } + } + if (HUNT_LASTTARGET == �NONE�) + { + IS_HUNTING = 0; + } + if ((IS_HUNTING)) + { + float L_GAME_TIME = GetGameTime(); + NPC_CANSEE_TARGET = false; + if (!(CANT_TRACK)) + { + if ((NPC_CANSEE_TARGET)) + { + NPC_LASTSEEN_POS = GetEntityOrigin(HUNT_LASTTARGET); + npcatk_setmovedest(HUNT_LASTTARGET, MOVE_RANGE, "hunt:saw_target"); + } + if (!(NPC_CANSEE_TARGET)) + { + npcatk_setmovedest(NPC_LASTSEEN_POS, GetMonsterProperty("moveprox"), "hunt:blind_move"); + } + } + if ((NPC_CANSEE_TARGET)) + { + npc_targetsighted(HUNT_LASTTARGET); + if ((NPC_MUST_SEE_TARGET)) + { + } + if (GetEntityRange(HUNT_LASTTARGET) < ATTACK_HITRANGE) + { + check_attack(); + } + } + if (!(NPC_MUST_SEE_TARGET)) + { + if (GetEntityRange(HUNT_LASTTARGET) < ATTACK_HITRANGE) + { + check_attack(); + } + } + if ((false)) + { + if (m_hLastSeen != HUNT_LASTTARGET) + { + } + if ((IsValidPlayer(m_hLastSeen))) + { + } + if (GetEntityRange(m_hLastSeen) < GetEntityRange(HUNT_LASTTARGET)) + { + } + npcatk_target(GetEntityIndex(m_hLastSeen), "is_closer_enemy"); + } + npcatk_targetvalidate(HUNT_LASTTARGET); + } + if ((IS_HUNTING)) return; + if (!(HUNT_AGRO)) return; + if ((false)) + { + npcatk_targetvalidate(GetEntityIndex(m_hLastSeen)); + if (HUNT_LASTTARGET != �NONE�) + { + } + npc_targetsighted(HUNT_LASTTARGET); + } + } + + void game_wander() + { + if ((IS_HUNTING)) return; + npc_wander(); + } + + void game_reached_dest() + { + if ((CHICKEN_RUN)) + { + npcatk_setmovedest(/* TODO: $relpos */ $relpos(0, 50, 0), 0, "chicken_run_reachdest"); + } + } + + void check_attack() + { + if (!(CAN_ATTACK)) return; + if ((IS_FLEEING)) return; + if ((SUSPEND_AI)) return; + string TARG_POS = GetEntityOrigin(HUNT_LASTTARGET); + string MY_Z = (GetMonsterProperty("origin")).z; + string TARG_Z = (TARG_POS).z; + string Z_DIFF = TARG_Z; + MY_Z += NPC_TARG_HALFHEIGHT; + Z_DIFF -= MY_Z; + if (Z_DIFF < 0) + { + string Z_DIFF = /* TODO: $neg */ $neg(Z_DIFF); + } + string FINAL_ATTACK_RANGE = ATTACK_RANGE; + if (Z_DIFF > NPC_TARG_HALFHEIGHT) + { + string FINAL_ATTACK_RANGE = ATTACK_HITRANGE; + } + if (!(CanSee(HUNT_LASTTARGET, FINAL_ATTACK_RANGE))) return; + npcatk_attackenemy(); + } + + void npcatk_attackenemy() + { + if ((NPC_NO_ATTACK)) return; + npc_selectattack(); + npcatk_faceenemy(); + PlayAnim("once", ANIM_ATTACK); + npc_attack(); + } + + void npcatk_go_agro() + { + if ((CANT_TRACK)) return; + HUNT_AGRO = 1; + NPC_MOVE_TARGET = GetEntityIndex(m_hLastStruck); + if (!(IsEntityAlive(HUNT_LASTTARGET))) + { + npcatk_target(NPC_MOVE_TARGET); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(HUNT_AGRO)) + { + npcatk_go_agro(GetEntityIndex(m_hLastStruck)); + } + if (!(IsEntityAlive(HUNT_LASTTARGET))) + { + npcatk_target(GetEntityIndex(m_hLastStruck), "struck_while_idle"); + } + if ((IsValidPlayer(m_hLastStruck))) + { + if (!(CYCLED_UP)) + { + } + cycle_up("stuck_by_player"); + } + if (GetRelationship(m_hLastStruck) != "ally") + { + npcatk_retaliate(GetEntityIndex(m_hLastStruck)); + } + npcatk_checkflee(); + if (param1 > FLINCH_DMG_REQ) + { + npcatk_checkflinch(); + } + npc_struck(); + } + + void npcatk_retaliate() + { + if (!(CAN_RETALIATE)) return; + if (!((HUNT_LASTTARGET !is null))) + { + npcatk_target(GetEntityIndex(m_hLastStruck), "retaliate"); + } + if (!(GetEntityIndex(m_hLastStruck) != HUNT_LASTTARGET)) return; + string L_RETALITE_CHANCE = RETALIATE_CHANCE; + if (RETALIATE_CHANGETARGET_CHANCE != "RETALIATE_CHANGETARGET_CHANCE") + { + string L_RETALITE_CHANCE = RETALIATE_CHANGETARGET_CHANCE; + } + if (!(RandomInt(1, 100) < L_RETALITE_CHANCE)) return; + npcatk_target(GetEntityIndex(m_hLastStruck), "retaliate"); + } + + void npcatk_faceattacker() + { + if ((IS_FLEEING)) return; + if ((SUSPEND_AI)) return; + if (param1 == "PARAM1") + { + npcatk_setmovedest(HUNT_LASTTARGET, 9999, "npcatk_faceattacker:undef"); + } + if (param1 != "PARAM1") + { + npcatk_setmovedest(GetEntityIndex(param1), 9999, "npcatk_faceattacker:p1"); + } + } + + void npcatk_checkflee() + { + if (!(CAN_FLEE == 1)) return; + if (!(GetMonsterHP() <= FLEE_HEALTH)) return; + if (!(RandomInt(0, 100) < FLEE_CHANCE)) return; + npcatk_flee(GetEntityIndex(m_hLastStruck), FLEE_DISTANCE, 3.0); + } + + void npcatk_stopflee() + { + IS_FLEEING = 0; + if ((NPCATK_FLEE_RESTORETARGET)) + { + npcatk_target(HUNT_LASTTARGET); + } + npc_stopflee(); + } + + void OnFlee() + { + if (!(GetEntityIndex(param1) != GetEntityIndex(GetOwner()))) return; + PlayAnim("once", "break"); + SetMoveDest(param1); + SetMoveAnim(ANIM_RUN); + IS_FLEEING = 1; + NPCATK_FLEE_RESTORETARGET = IS_HUNTING; + string FLEE_TIME = param3; + if (FLEE_TIME == "PARAM3") + { + float FLEE_TIME = 5.0; + } + if (FLEE_TIME > 10.0) + { + float PARAM3 = 10.0; + } + FLEE_TIME("npcatk_stopflee"); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(CAN_HEAR)) return; + if ((NPC_HEARDSOUND_OVERRIDE)) return; + if ((SUSPEND_AI)) return; + if ((IS_FLEEING)) return; + string I_HEARD = GetEntityIndex("ent_lastheard"); + if (param1 != "danger") + { + if (!(IS_HUNTING)) + { + } + if (GetRelationship(I_HEARD) == "enemy") + { + } + if (GetEntityRange(I_HEARD) < HEAR_RANGE_MAX) + { + } + if (!(GetEntityProperty(I_HEARD, "scriptvar"))) + { + } + if (!(NPC_IGNORE_PLAYERS)) + { + } + npc_heardenemy(); + if ((IsValidPlayer(I_HEARD))) + { + if (GetEntityRange(I_HEARD) < HEAR_RANGE_PLAYER) + { + } + if (!(CYCLED_UP)) + { + } + cycle_up("heard_player"); + if (!(HEARD_PLAYER)) + { + } + HEARD_PLAYER = 1; + ScheduleDelayedEvent(5.0, "heard_cycle_down"); + } + if (GetMonsterProperty("race") != "hguard") + { + } + string SEE_HEARD = false; + if ((SEE_HEARD)) + { + npcatk_target(GetEntityIndex(m_hLastSeen), "spotted_heard"); + } + if (!(SEE_HEARD)) + { + if (GetMonsterProperty("race") != "hguard") + { + } + npcatk_setmovedest(I_HEARD, GetMonsterProperty("moveprox"), "heard_enemy"); + } + } + } + + void npcatk_checkflinch() + { + if ((SUSPEND_AI)) return; + if (!(CAN_FLINCH)) return; + if ((NPC_DELAYING_FLINCH)) return; + if (!(RandomInt(0, 99) < FLINCH_CHANCE)) return; + if (FLINCH_ANIM != "FLINCH_ANIM") + { + PlayAnim("critical", FLINCH_ANIM); + } + NPC_DELAYING_FLINCH = 0; + FLINCH_DELAY("npcatk_resetflinch"); + npc_flinch(); + } + + void npcatk_resetflinch() + { + NPC_DELAYING_FLINCH = 1; + } + + void npcatk_vanish() + { + NPC_VANISHED_AT = GetMonsterProperty("origin"); + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + if (NPC_VANISH_RETURN_TIME == "NPC_VANISH_RETURN_TIME") + { + NPC_VANISH_RETURN_TIME = param1; + } + NPC_VANISH_RETURN_TIME("npcatk_vanish_return"); + } + + void npcatk_vanish_return() + { + SetEntityOrigin(GetOwner(), NPC_VANISHED_AT); + NPC_STUCK_TELEPORT = 0; + } + + void OnTargetValidate(CBaseEntity@ target) + { + string OLD_HUNT_LASTTARGET = HUNT_LASTTARGET; + NPC_TARGET_INVALID = 0; + if (HUNT_LASTTARGET == �NONE�) + { + HUNT_LASTTARGET = param1; + NPCATK_TARGET = HUNT_LASTTARGET; + } + if (GetRelationship(param1) == "ally") + { + npcatk_clear_targets("validate:targ_is_ally"); + } + if ((GetEntityProperty(HUNT_LASTTARGET, "scriptvar"))) + { + NPC_TARGET_INVALID = 1; + } + if (!(CYCLED_UP)) + { + if ((IsValidPlayer(HUNT_LASTTARGET))) + { + } + cycle_up("spotted_player"); + } + if (GetRelationship(m_hAttackTarget) == "ally") + { + HUNT_LASTTARGET = �NONE�; + NPCATK_TARGET = "unset"; + NPC_TARGET_INVALID = 1; + } + if ((IsValidPlayer(param1))) + { + if ((NPC_IGNORE_PLAYERS)) + { + } + NPC_TARGET_INVALID = 1; + } + npc_targetvalidate(GetEntityIndex(param1)); + if ((NPC_TARGET_INVALID)) + { + if (param1 != OLD_HUNT_LASTTARGET) + { + HUNT_LASTTARGET = OLD_HUNT_LASTTARGET; + NPCATK_TARGET = HUNT_LASTTARGET; + } + if (HUNT_LASTTARGET == param1) + { + npcatk_clear_targets(); + HUNT_LASTTARGET = �NONE�; + NPCATK_TARGET = "unset"; + } + } + if ((NPC_TARGET_INVALID)) return; + if (!(HUNT_LASTTARGET != �NONE�)) return; + NPC_LASTSEEN_POS = GetEntityOrigin(HUNT_LASTTARGET); + npc_targetsighted(HUNT_LASTTARGET); + if ((IS_HUNTING)) return; + ENTITY_ENEMY = HUNT_LASTTARGET; + NPCATK_TARGET = HUNT_LASTTARGET; + if ((IsValidPlayer(param1))) + { + HUNTING_PLAYER = 1; + check_attack(); + if (!(CYCLED_UP)) + { + cycle_up("spotted_player_redund"); + } + } + if (GetMonsterProperty("race") == "hguard") + { + CYCLE_TIME = CYCLE_TIME_BATTLE; + } + SetMoveAnim(ANIM_RUN); + IS_HUNTING = 1; + NPC_TARG_HALFHEIGHT = GetEntityHeight(HUNT_LASTTARGET); + NPC_TARG_HALFHEIGHT /= 2; + NPC_TARG_HALFHEIGHT = max(37, min(2000, NPC_TARG_HALFHEIGHT)); + } + + void my_target_died() + { + OUT_OF_RANGE = 0; + npcatk_clear_targets("target_dead"); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(2.0, "game_wander"); + } + + void npcatk_clear_targets() + { + NPC_MOVE_TARGET = ORIG_NPC_MOVE_TARGET; + HUNT_AGRO = ORIG_HUNT_AGRO; + HUNTING_PLAYER = 0; + IS_HUNTING = 0; + HUNT_LASTTARGET = �NONE�; + NPCATK_TARGET = "unset"; + cycle_down("clear_targets"); + } + + void super_lure() + { + string TARG_RACE = GetMonsterProperty("race"); + if (param2 != "PARAM2") + { + string TARG_RACE = param2; + } + if (!(GetMonsterProperty("race") == TARG_RACE)) return; + if (!(HUNT_LASTTARGET == �NONE�)) return; + if ((IS_HUNTING)) return; + npcatk_target(param1, "super_lure"); + } + + void OnAttackTarget(CBaseEntity@ target) + { + string OLD_TARGET = HUNT_LASTTARGET; + HUNT_LASTTARGET = GetEntityIndex(param1); + NPCATK_TARGET = HUNT_LASTTARGET; + npcatk_targetvalidate(HUNT_LASTTARGET); + if (!(IsEntityAlive(HUNT_LASTTARGET))) + { + if (GetEntityIndex(param1) != OLD_TARGET) + { + } + if ((IsEntityAlive(OLD_TARGET))) + { + } + HUNT_LASTTARGET = OLD_TARGET; + NPCATK_TARGET = HUNT_LASTTARGET; + } + if (!(IsEntityAlive(HUNT_LASTTARGET))) return; + if (!(HUNT_AGRO)) + { + npcatk_go_agro(); + } + } + + void chicken_run() + { + if ((PLAYING_DEAD)) return; + if ((CANT_FLEE)) return; + if ((IS_FLEEING)) return; + IS_FLEEING = 1; + CHICKEN_RUN = 1; + PURE_FLEE = 1; + NPCATK_FLEE_RESTORETARGET = IS_HUNTING; + SetMoveAnim(ANIM_RUN); + SetActionAnim(ANIM_RUN); + SetIdleAnim(ANIM_RUN); + FLEE_DIR = RandomInt(1, 359); + CKN_TIME_END = param1; + CKN_STUCK_COUNTER = 0; + npcatk_clearmovedest("chicken_run:prep"); + ScheduleDelayedEvent(0.1, "init_chicken_run"); + } + + void npcatk_chicken_run() + { + chicken_run(param1, param2); + } + + void npcatk_chickenrun() + { + chicken_run(param1, param2); + } + + void init_chicken_run() + { + npcatk_setmovedest(/* TODO: $relpos */ $relpos(Vector3(0, FLEE_DIR, 0), Vector3(0, 500, 0)), 0, "init_chicken_run"); + CKN_MY_OLD_POS = GetEntityOrigin(GetOwner()); + ScheduleDelayedEvent(0.5, "chicken_run_stuckcheck"); + CKN_TIME_END("chicken_run_end", "time_up"); + } + + void chicken_run_stuckcheck() + { + if (!(CHICKEN_RUN)) return; + string CKN_MY_POS = GetEntityOrigin(GetOwner()); + float CKN_MOVE_DIST = Distance(CKN_MY_POS, CKN_MY_OLD_POS); + if (CKN_MOVE_DIST == 0) + { + SetMoveAnim(ANIM_RUN); + FLEE_DIR = RandomInt(1, 359); + npcatk_clearmovedest("chicken_run_stuckcheck"); + string RUN_DIR = /* TODO: $relpos */ $relpos(Vector3(0, FLEE_DIR, 0), Vector3(0, 500, 0)); + npcatk_setmovedest(RUN_DIR, 0, "chicken_run_stuckcheck"); + PlayAnim("once", ANIM_RUN); + CKN_STUCK_COUNTER += 1; + } + CKN_MY_OLD_POS = CKN_MY_POS; + if (CKN_MOVE_DIST > 0) + { + CKN_STUCK_COUNTER = 0; + } + if (CKN_STUCK_COUNTER > 4) + { + chicken_run_end("stuck_too_long"); + } + ScheduleDelayedEvent(0.25, "chicken_run_stuckcheck"); + } + + void chicken_run_end() + { + if (!(CHICKEN_RUN)) return; + SetMoveAnim(ANIM_RUN); + CHICKEN_RUN = 0; + IS_FLEEING = 0; + PURE_FLEE = 0; + if ((NPCATK_FLEE_RESTORETARGET)) + { + npcatk_faceattacker(HUNT_LASTTARGET); + } + } + + void OnSuspendAI() + { + SUSPEND_AI = 1; + PARAM1("npcatk_resume_ai"); + } + + void npcatk_resume_ai() + { + SUSPEND_AI = 0; + } + + void npcatk_adj_attack() + { + if (EXT_DAMAGE_ADJUSTMENT != "EXT_DAMAGE_ADJUSTMENT") + { + FINAL_ATTACK_DAMAGE += EXT_DAMAGE_ADJUSTMENT; + } + if (EXT_HITCHANCE_ADJUSTMENT != "EXT_HITCHANCE_ADJUSTMENT") + { + FINAL_HITCHANCE_DAMAGE += EXT_HITCHANCE_ADJUSTMENT; + } + } + + void npcatk_settarget() + { + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + npcatk_target(OUT_PAR1, "compatibility", OUT_PAR2); + } + + void cycle_up() + { + CYCLED_UP = 1; + if (!(IS_HUNTING)) + { + if (!(NO_STEP_ADJ)) + { + } + adj_step_size(); + } + CYCLE_TIME = CYCLE_TIME_BATTLE; + } + + void cycle_down() + { + NPC_ALERTED_ALL = 0; + CYCLED_UP = 0; + CYCLE_TIME = CYCLE_TIME_IDLE; + } + + void heard_cycle_down() + { + if ((false)) return; + if ((HUNTING_PLAYER)) return; + HEARD_PLAYER = 0; + cycle_down("heard+never_found"); + } + + void npcatk_clearmovedest() + { + SetMoveDest("none"); + } + + void npcatk_setmovedest() + { + SetMoveDest(param1); + } + + void npcatk_check_sets() + { + if (NPC_MUST_SEE_TARGET == "NPC_MUST_SEE_TARGET") + { + NPC_MUST_SEE_TARGET = 1; + } + if (HUNT_AGRO == "HUNT_AGRO") + { + HUNT_AGRO = 1; + } + ORIG_HUNT_AGRO = HUNT_AGRO; + if (CANT_TRACK == "CANT_TRACK") + { + CANT_TRACK = 0; + } + if (CAN_HUNT == "CAN_HUNT") + { + CAN_HUNT = 1; + } + if (CAN_ATTACK == "CAN_ATTACK") + { + CAN_ATTACK = 1; + } + if (CAN_HEAR == "CAN_HEAR") + { + CAN_HEAR = 1; + } + if (CAN_FLEE == "CAN_FLEE") + { + CAN_FLEE = 1; + } + if (CAN_RETALIATE == "CAN_RETALIATE") + { + CAN_RETALIATE = 1; + } + if (CAN_FLINCH == "CAN_FLINCH") + { + CAN_FLINCH = 0; + } + if (RETALIATE_CHANCE == "RETALIATE_CHANCE") + { + RETALIATE_CHANCE = 75; + } + if (NPC_HEAR_TARGET == "NPC_HEAR_TARGET") + { + NPC_HEAR_TARGET = "enemy"; + } + if (FLEE_DISTANCE == "FLEE_DISTANCE") + { + FLEE_DISTANCE = 1024; + } + if (RETALIATE_CHANGETARGET_CHANCE != "RETALIATE_CHANGETARGET_CHANCE") + { + RETALIATE_CHANCE = RETALIATE_CHANGETARGET_CHANCE; + } + if (MY_ENEMY != "MY_ENEMY") + { + NPC_MOVE_TARGET = MY_ENEMY; + } + if (NPC_MOVE_TARGET == "NPC_MOVE_TARGET") + { + if ((HUNT_AGRO)) + { + } + NPC_MOVE_TARGET = "enemy"; + } + ORIG_NPC_MOVE_TARGET = NPC_MOVE_TARGET; + if (!(HUNT_AGRO)) + { + if (NPC_MOVE_TARGET == "NPC_MOVE_TARGET") + { + NPC_MOVE_TARGET = "none"; + } + } + if (NPC_ALLY_RESPONSE_RANGE == "NPC_ALLY_RESPONSE_RANGE") + { + NPC_ALLY_RESPONSE_RANGE = GetMonsterMaxHP(); + NPC_ALLY_RESPONSE_RANGE *= 10; + NPC_ALLY_RESPONSE_RANGE = max(96, min(1024, NPC_ALLY_RESPONSE_RANGE)); + } + if (FLINCH_DMG_REQ == "FLINCH_DMG_REQ") + { + FLINCH_DMG_REQ = GetMonsterMaxHP(); + FLINCH_DMG_REQ *= 0.1; + } + if (HEAR_RANGE_MAX == "HEAR_RANGE_MAX") + { + HEAR_RANGE_MAX = 1024; + } + if (HEAR_RANGE_PLAYER == "HEAR_RANGE_PLAYER") + { + HEAR_RANGE_PLAYER = 800; + } + if (CHASE_RANGE == "CHASE_RANGE") + { + CHASE_RANGE = 4000; + } + if (FLINCH_DELAY == "FLINCH_DELAY") + { + FLINCH_DELAY = 5.0; + } + if (MOVE_RANGE == "MOVE_RANGE") + { + MOVE_RANGE = GetMonsterProperty("moveprox"); + } + if (ATTACK_RANGE == "ATTACK_RANGE") + { + ATTACK_RANGE = GetMonsterProperty("moveprox"); + ATTACK_RANGE *= 2.5; + } + M_ATTACK_HITRANGE = GetMonsterProperty("height"); + M_ATTACK_HITRANGE += 10; + M_ATTACK_HITRANGE += 38; + if (ATTACK_HITRANGE == "ATTACK_HITRANGE") + { + ATTACK_HITRANGE = M_ATTACK_HITRANGE; + } + if (ATTACK_HITRANGE < M_ATTACK_HITRANGE) + { + ATTACK_HITRANGE = M_ATTACK_HITRANGE; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_npc_attack_new.as b/scripts/angelscript/monsters/base_npc_attack_new.as new file mode 100644 index 00000000..be2dbc12 --- /dev/null +++ b/scripts/angelscript/monsters/base_npc_attack_new.as @@ -0,0 +1,1131 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class BaseNpcAttackNew : CGameScript +{ + int ALLY_RESPONSE_DELAY; + string ATTACK_ANIMINDEX; + string ATTACK_HITRANGE; + string ATTACK_RANGE; + string CAN_FLEE; + string CAN_FLINCH; + string CAN_HEAR; + string CAN_RETALIATE; + string CHASE_RANGE; + int CHICKEN_RUN; + string CKN_MY_OLD_POS; + int CKN_STUCK_COUNTER; + int CYCLED_UP; + string CYCLE_TIME; + float CYCLE_TIME_BATTLE; + float CYCLE_TIME_IDLE; + float CYCLE_TIME_NPC; + string ENTITY_ENEMY; + float EXT_DAMAGE_ADJUSTMENT; + float EXT_HITCHANCE_ADJUSTMENT; + string FLEESTUCK_OLDPOS; + int FLEE_DIR; + string FLEE_DISTANCE; + string FLEE_STUCKCHECK_FREQ; + int FLEE_STUCK_COUNT; + string FLEE_TARGET; + string FLEE_TIME; + int FLINCHED_RECENTLY; + string FLINCH_ANIM; + string FLINCH_DAMAGE_THRESHOLD; + string FLINCH_DELAY; + string FLINCH_DMG_REQ; + string FLINCH_HEALTH; + float HACK_ATTACK_DELAY; + float HACK_DAMAGE_DELAY; + int HACK_DELAYING_ATTACK; + int HAS_AI; + int HAVE_TARGET; + int HEARD_PLAYER; + int HEARD_VERIFY; + string HEAR_RANGE_MAX; + string HEAR_RANGE_PLAYER; + int HUNTING_PLAYER; + string HUNT_LASTTARGET; + int IS_FLEEING; + int IS_HUNTING; + string I_HEARD; + float MAX_ADV_SEARCHTIME; + int MONSTER_ID; + string MONSTER_WIDTH; + int NEW_AI; + string NPCATK_TARGET; + string NPC_CANSEE_TARGET; + string NPC_CHASE_RANGE; + string NPC_CLOSEIN_RANGE; + string NPC_COULD_SEE_TARGET; + string NPC_DBL_MOVEPROX; + float NPC_DELAY_RETALITATE; + int NPC_DID_STEP_ADJ; + int NPC_FORCED_MOVEDEST; + int NPC_FRUST_THRESHOLD; + string NPC_HALF_HEIGHT; + string NPC_HALF_WIDTH; + string NPC_HAS_TARGET; + string NPC_HEIGHT; + string NPC_HUNTING_BLIND; + string NPC_INALLY; + string NPC_LASTSEEN_POS; + string NPC_LAST_ORIGIN; + string NPC_LOST_TARGET; + string NPC_MAX_RANGE; + string NPC_MOVEDEST_TARGET; + string NPC_MOVEPROX; + string NPC_MUST_SEE_TARGET; + string NPC_RANGED; + string NPC_RANGE_TYPE; + int NPC_RETALIATING; + int NPC_ROAMING_HOME; + float NPC_SPAWN_PRED1; + float NPC_SPAWN_PRED2; + string NPC_STOREHUNTSTATE_ADVANCED; + string NPC_STOREHUNTSTATE_MLK; + string NPC_STORE_HP; + string NPC_STORE_LOST_TARGET; + string NPC_STORE_TARGET; + int NPC_STUCK_TELEPORT; + string NPC_VANISHED_AT; + string NPC_VANISH_RETURN_TIME; + int NPC_WANDER_RANGE; + string ORIG_MOVERANGE; + string RETALIATE_CHANCE; + string RE_FLEE_DELAY; + int SEARCH_ROTATION; + int SUSPEND_AI; + string TOFLEE_DISTANCE; + + BaseNpcAttackNew() + { + NEW_AI = 1; + HAS_AI = 1; + NPC_FRUST_THRESHOLD = 4; + MAX_ADV_SEARCHTIME = 45.0; + HACK_ATTACK_DELAY = 1.0; + HACK_DAMAGE_DELAY = 0.1; + NPC_WANDER_RANGE = 1024; + NPC_SPAWN_PRED1 = 0.5; + NPC_SPAWN_PRED2 = 0.75; + CYCLE_TIME_BATTLE = 0.1; + CYCLE_TIME_IDLE = 2.0; + CYCLE_TIME_NPC = 0.8; + NPC_RANGE_TYPE = "range"; + NPC_DELAY_RETALITATE = Random(5.0, 10.0); + } + + void npcatk_post_load() + { + NPC_LASTSEEN_POS = "unset"; + NPC_MOVEPROX = GetMonsterProperty("moveprox"); + NPC_DBL_MOVEPROX = NPC_MOVEPROX; + NPC_DBL_MOVEPROX *= 2.0; + if (CYCLE_TIME == 0) + { + CYCLE_TIME = CYCLE_TIME_IDLE; + } + if (HEAR_RANGE_MAX == 0) + { + HEAR_RANGE_MAX = 1024; + } + if (HEAR_RANGE_PLAYER == 0) + { + HEAR_RANGE_PLAYER = 800; + } + if (RETALIATE_CHANCE == 0) + { + RETALIATE_CHANCE = 75; + } + if (CHASE_RANGE == 0) + { + CHASE_RANGE = 4000; + } + NPC_CHASE_RANGE = CHASE_RANGE; + if (NPC_MUST_SEE_TARGET == "NPC_MUST_SEE_TARGET") + { + NPC_MUST_SEE_TARGET = 1; + } + if (CAN_RETALIATE == "CAN_RETALIATE") + { + CAN_RETALIATE = 1; + } + if (CAN_HEAR == "CAN_HEAR") + { + CAN_HEAR = 1; + } + if (CAN_FLEE == "CAN_FLEE") + { + CAN_FLEE = 1; + } + if (CAN_FLINCH == "CAN_FLINCH") + { + CAN_FLINCH = 0; + } + if (FLINCH_DELAY == "FLINCH_DELAY") + { + FLINCH_DELAY = 5.0; + } + if (ANIM_FLINCH != "ANIM_FLINCH") + { + FLINCH_ANIM = ANIM_FLINCH; + } + if (FLEE_DISTANCE == 0) + { + FLEE_DISTANCE = 1000; + } + if (FLEE_TIME == 0) + { + FLEE_TIME = 10.0; + } + if (FLEE_STUCKCHECK_FREQ == 0) + { + FLEE_STUCKCHECK_FREQ = 1.0; + } + IS_FLEEING = 0; + HAVE_TARGET = 0; + NPCATK_TARGET = "unset"; + NPC_MOVEDEST_TARGET = "unset"; + SEARCH_ROTATION = 0; + EXT_DAMAGE_ADJUSTMENT = 1.0; + EXT_HITCHANCE_ADJUSTMENT = 1.0; + NPC_LOST_TARGET = "unset"; + HUNT_LASTTARGET = �NONE�; + } + + void OnSpawn() override + { + NPC_SPAWN_PRED1("npcatk_get_postspawn_properties"); + NPC_SPAWN_PRED2("npcatk_hunt"); + MONSTER_ID = RandomInt(1000, 9999); + } + + void npcatk_get_postspawn_properties() + { + npcatk_post_load(); + NPC_HALF_HEIGHT = GetEntityHeight(GetOwner()); + NPC_HEIGHT = NPC_HALF_HEIGHT; + NPC_HALF_HEIGHT *= 0.5; + NPC_HALF_WIDTH = GetEntityWidth(GetOwner()); + NPC_HALF_WIDTH *= 0.5; + if (FLINCH_DAMAGE_THRESHOLD == "FLINCH_DAMAGE_THRESHOLD") + { + FLINCH_DAMAGE_THRESHOLD = GetMonsterMaxHP(); + FLINCH_DAMAGE_THRESHOLD *= 0.1; + } + if (FLINCH_HEALTH == "FLINCH_HEALTH") + { + FLINCH_HEALTH = GetMonsterMaxHP(); + } + if (FLINCH_DMG_REQ == "FLINCH_DMG_REQ") + { + FLINCH_DMG_REQ = FLINCH_DAMAGE_THRESHOLD; + } + if (MONSTER_WIDTH == 0) + { + MONSTER_WIDTH = GetMonsterProperty("moveprox"); + } + if (ATTACK_MOVERANGE == "ATTACK_MOVERANGE") + { + if (MOVE_RANGE != "MOVE_RANGE") + { + ATTACK_MOVERANGE = MOVE_RANGE; + } + else + { + ATTACK_MOVERANGE = MONSTER_WIDTH; + MOVE_RANGE = MONSTER_WIDTH; + } + } + if (MOVE_RANGE == "MOVE_RANGE") + { + if (ATTACK_MOVERANGE != "ATTACK_MOVERANGE") + { + MOVE_RANGE = ATTACK_MOVERANGE; + } + else + { + MOVE_RANGE = MONSTER_WIDTH; + } + } + if (ATTACK_MOVERANGE > 300) + { + NPC_RANGED = 1; + LogDebug("npcatk_get_postspawn_properties moveange > 300 , setting ranged flag"); + NPC_MAX_RANGE = ATTACK_MOVERANGE; + } + if (ATTACK_RANGE == "ATTACK_RANGE") + { + ATTACK_RANGE = MONSTER_WIDTH; + ATTACK_RANGE *= 2.5; + } + if (ATTACK_HITRANGE == "ATTACK_HITRANGE") + { + ATTACK_HITRANGE = MONSTER_WIDTH; + ATTACK_HITRANGE *= 4.0; + } + NPC_CLOSEIN_RANGE = MONSTER_WIDTH; + NPC_CLOSEIN_RANGE *= 2.0; + NPC_LAST_ORIGIN = GetMonsterProperty("origin"); + if ((NO_VICTORY_HEAL)) + { + NPC_STORE_HP = GetMonsterHP(); + } + ORIG_MOVERANGE = ATTACK_MOVERANGE; + } + + void OnHuntTarget(CBaseEntity@ target) + { + CYCLE_TIME("npcatk_hunt"); + if ((NPC_CUSTOM_HUNT)) return; + if ((SUSPEND_AI)) return; + if ((IS_FLEEING)) return; + if (m_hAttackTarget == "unset") + { + if ((false)) + { + npcatk_settarget(GetEntityIndex(m_hLastSeen), "saw_new_enemy"); + } + } + if (!(m_hAttackTarget != "unset")) return; + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + npcatk_targetvalidate(m_hAttackTarget); + if (m_hAttackTarget == "unset") + { + npcatk_clear_targets("no_longer_valid"); + } + else + { + if (Distance(MY_ORG, TARG_ORG) > NPC_CHASE_RANGE) + { + npcatk_clear_targets("out_of_range"); + } + npcatk_check_for_victory(m_hAttackTarget); + } + if (!(m_hAttackTarget != "unset")) return; + NPC_CANSEE_TARGET = false; + if (!(NPC_CANSEE_TARGET)) + { + if ((NPC_COULD_SEE_TARGET)) + { + npcatk_lost_sight(); + NPC_COULD_SEE_TARGET = 0; + } + if ((false)) + { + string OLD_TARGET = m_hAttackTarget; + npcatk_settarget(GetEntityIndex(m_hLastSeen), "favor_new_enemy"); + if (OLD_TARGET != m_hAttackTarget) + { + int EXIT_SUB = 1; + } + } + if (!(EXIT_SUB)) + { + } + if (NPC_LASTSEEN_POS == "unset") + { + npcatk_setmovedest(m_hAttackTarget, ATTACK_MOVERANGE); + } + else + { + if (!(NPC_IS_TURRET)) + { + npcatk_setmovedest(NPC_LASTSEEN_POS, 1); + } + if (Distance(MY_ORG, NPC_LASTSEEN_POS) <= NPC_DBL_MOVEPROX) + { + NPC_LASTSEEN_POS = GetEntityOrigin(m_hAttackTarget); + NPC_LASTSEEN_POS += /* TODO: $relpos */ $relpos(Vector3(0, Random(0.0, 359.99), 0), Vector3(0, 128, 0)); + } + } + } + else + { + NPC_COULD_SEE_TARGET = 1; + NPC_HUNTING_BLIND = 0; + npc_targetsighted(m_hAttackTarget); + npcatk_setmovedest(m_hAttackTarget, ATTACK_MOVERANGE); + NPC_LASTSEEN_POS = TARG_ORG; + if ((false)) + { + if ((CAN_RETALIATE)) + { + } + if (GetEntityProperty(m_hAttackTarget, "npc_range_type") > GetEntityProperty(m_hLastSeen, "npc_range_type")) + { + if ((IsValidPlayer(m_hLastSeen))) + { + } + npcatk_settarget(GetEntityIndex(m_hLastSeen)); + } + } + } + if ((EXIT_SUB)) return; + if ((NPC_NO_ATTACK)) return; + string TARG_RANGE = GetEntityProperty(m_hAttackTarget, "npc_range_type"); + if (TARG_RANGE < ATTACK_HITRANGE) + { + if ((NPC_MUST_SEE_TARGET)) + { + if (!(NPC_CANSEE_TARGET)) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string FINAL_ATTACK_RANGE = ATTACK_RANGE; + if (!(NPC_NO_VADJ)) + { + NPC_VADJSTING = 0; + if (TARG_RANGE > ATTACK_RANGE) + { + } + if (GetEntityProperty(m_hAttackTarget, "range2d") < ATTACK_HITRANGE) + { + } + string L_MY_Z_PLUS = (MY_ORG).z; + L_MY_Z_PLUS += NPC_HALF_HEIGHT; + if ((TARG_ORG).z > L_MY_Z_PLUS) + { + string L_ATK_START = MY_ORG; + L_ATK_START += "z"; + L_ATK_START += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, NPC_HALF_WIDTH, 0)); + if (Distance(L_ATK_START, TARG_ORG) < ATTACK_HITRANGE) + { + } + string FINAL_ATTACK_RANGE = ATTACK_HITRANGE; + FINAL_ATTACK_RANGE += NPC_HEIGHT; + NPC_VADJSTING = 1; + } + } + if (TARG_RANGE < FINAL_ATTACK_RANGE) + { + } + npcatk_attack(); + } + } + + void npcatk_setmovedest() + { + if ((NPC_NO_MOVE)) return; + SetMoveDest(param1); + } + + void OnAttackTarget(CBaseEntity@ target) + { + npcatk_settarget(param1, param2); + } + + void npcatk_settarget() + { + if ((IS_FLEEING)) return; + string CHECK_TARGET = GetEntityIndex(param1); + string IS_PLAYER = IsValidPlayer(CHECK_TARGET); + string DEBUG_PROC = param2; + if (!(CHECK_TARGET != m_hAttackTarget)) return; + if ((G_SIEGE_MAP)) + { + if ((NPC_IGNORE_PLAYERS)) + { + } + if ((IS_PLAYER)) + { + } + int EXIT_SUB = 1; + } + if (GetRelationship(param1) == "ally") + { + int EXIT_SUB = 1; + } + if (GetEntityProperty(param1, "scriptvar") == 1) + { + int EXIT_SUB = 1; + } + if (!(G_SIEGE_MAP)) + { + if ((IsValidPlayer(m_hAttackTarget))) + { + if (CYCLE_TIME != CYCLE_TIME_BATTLE) + { + cycle_up(DEBUG_PROC); + } + } + } + if ((EXIT_SUB)) return; + string OLD_ATTACK_TARGET = m_hAttackTarget; + NPC_ROAMING_HOME = 0; + NPCATK_TARGET = CHECK_TARGET; + npcatk_targetvalidate(m_hAttackTarget); + if (m_hAttackTarget == "unset") + { + if ((IsEntityAlive(OLD_ATTACK_TARGET))) + { + if (GetEntityProperty(OLD_ATTACK_TARGET, "npc_range_type") < 1024) + { + } + NPCATK_TARGET = OLD_ATTACK_TARGET; + } + } + if (!(m_hAttackTarget != "unset")) return; + if (CYCLE_TIME != CYCLE_TIME_BATTLE) + { + if ((IS_PLAYER)) + { + CYCLED_UP = 0; + cycle_up(DEBUG_PROC); + HUNTING_PLAYER = 1; + } + else + { + if (!(NPC_FIGHTS_NPCS)) + { + cycle_npc(param2); + } + else + { + cycle_up(param2); + } + } + } + if (GetMonsterProperty("race") == "hguard") + { + cycle_up("hguard_saw_npc"); + } + NPC_LASTSEEN_POS = GetEntityOrigin(m_hAttackTarget); + if (m_hAttackTarget != OLD_ATTACK_TARGET) + { + npc_found_new_target(m_hAttackTarget); + } + npcatk_run("set_target"); + SetAngles("view.yaw"); + IS_HUNTING = 1; + HUNT_LASTTARGET = m_hAttackTarget; + ENTITY_ENEMY = m_hAttackTarget; + } + + void OnTargetValidate(CBaseEntity@ target) + { + string OLD_ATTACK_TARGET = m_hAttackTarget; + if (!(/* TODO: $can_damage */ $can_damage(m_hAttackTarget))) + { + if (!(GetEntityProperty(m_hAttackTarget, "scriptvar"))) + { + } + NPCATK_TARGET = "unset"; + } + if (!(IsEntityAlive(m_hAttackTarget))) + { + NPCATK_TARGET = "unset"; + } + if (GetEntityProperty(m_hAttackTarget, "scriptvar") == 1) + { + NPCATK_TARGET = "unset"; + } + if (GetRelationship(m_hAttackTarget) == "ally") + { + NPCATK_TARGET = "unset"; + } + npc_targetvalidate(); + if (m_hAttackTarget != "unset") + { + NPC_HAS_TARGET = 1; + } + else + { + if ((NPC_HAS_TARGET)) + { + } + NPC_HAS_TARGET = 0; + if (((OLD_ATTACK_TARGET !is null))) + { + } + if (!(IsEntityAlive(OLD_ATTACK_TARGET))) + { + } + my_target_died(OLD_ATTACK_TARGET); + } + } + + void npcatk_check_for_victory() + { + string CHECK_TARGET = param1; + if ((GetEntityProperty(CHECK_TARGET, "scriptvar"))) + { + npcatk_clear_targets("target_playing_dead"); + } + if (!(IsEntityAlive(CHECK_TARGET))) + { + int TARGET_DEAD = 1; + } + if (!((CHECK_TARGET !is null))) + { + int TARGET_DEAD = 1; + } + if (!(TARGET_DEAD)) return; + npcatk_clear_targets("target_died"); + } + + void npcatk_faceattacker() + { + if ((SUSPEND_AI)) return; + if ((I_R_FROZEN)) return; + if ((CANT_TURN)) return; + NPC_FORCED_MOVEDEST = 1; + if (param1 == "PARAM1") + { + npcatk_setmovedest(m_hAttackTarget, 9999); + } + if (param1 != "PARAM1") + { + string L_PARAM = param1; + npcatk_setmovedest(L_PARAM, 9999); + } + } + + void npcatk_vanish() + { + npcatk_suspend_ai("vanish"); + NPC_VANISHED_AT = GetMonsterProperty("origin"); + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + if (NPC_VANISH_RETURN_TIME == "NPC_VANISH_RETURN_TIME") + { + NPC_VANISH_RETURN_TIME = param1; + } + NPC_VANISH_RETURN_TIME("npcatk_vanish_return"); + } + + void npcatk_vanish_return() + { + SetEntityOrigin(GetOwner(), NPC_VANISHED_AT); + npcatk_resume_ai(); + if ((NPC_STUCK_TELEPORT)) + { + Random(0_1, 1)("npcatk_stuck_check_inally"); + } + NPC_STUCK_TELEPORT = 0; + } + + void npcatk_attack() + { + if ((NPC_NO_ATTACK)) return; + npc_selectattack(); + if (NPC_MOVEDEST_TARGET != m_hAttackTarget) + { + npcatk_faceattacker(m_hAttackTarget); + } + PlayAnim("once", ANIM_ATTACK); + ATTACK_ANIMINDEX = GetEntityProperty(GetOwner(), "anim.index"); + } + + void npcatk_attack_hack() + { + npcatk_faceattacker(); + if ((HACK_DELAYING_ATTACK)) return; + PlayAnim("once", ANIM_ATTACK); + ATTACK_ANIMINDEX = GetEntityProperty(GetOwner(), "anim.index"); + HACK_DELAYING_ATTACK = 1; + HACK_DAMAGE_DELAY("npcatk_attack_hack_dodamage"); + HACK_ATTACK_DELAY("npcatk_attack_hack_reset"); + } + + void npcatk_attack_hack_reset() + { + HACK_DELAYING_ATTACK = 0; + } + + void npcatk_lost_sight() + { + NPC_HUNTING_BLIND = 1; + } + + void npcatk_clear_targets() + { + if (!(param1 == GetEntityIndex(GetOwner()))) return; + LogDebug("npcatk_clear_targets PARAM1"); + NPCATK_TARGET = "unset"; + NPC_MOVEDEST_TARGET = "unset"; + NPC_LOST_TARGET = "unset"; + HUNT_LASTTARGET = �NONE�; + NPC_ROAMING_HOME = 1; + IS_HUNTING = 0; + HUNTING_PLAYER = 0; + npcatk_walk("clear_targets"); + cycle_down("clear_targets"); + } + + void OnFlee() + { + if (!(GetEntityIndex(param1) != GetEntityIndex(GetOwner()))) return; + if (!(CAN_FLEE)) return; + if ((IS_FLEEING)) return; + if ((CANT_FLEE)) return; + if ((RE_FLEE_DELAY)) return; + npc_pre_flee(); + if ((ABORT_FLEE)) return; + IS_FLEEING = 1; + npcatk_run("flee"); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_RUN); + npcatk_store_target(); + FLEE_TARGET = param1; + TOFLEE_DISTANCE = param2; + FLEE_STUCK_COUNT = 0; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(FLEE_TARGET); + if ((false)) + { + string MY_YAW = GetMonsterProperty("angles.yaw"); + MY_YAW += 180; + if (MY_YAW > 359) + { + MY_YAW -= 359; + } + SetAngles("face"); + } + FLEESTUCK_OLDPOS = GetMonsterProperty("origin"); + FLEE_STUCKCHECK_FREQ("npcatk_flee_stuck_check"); + string L_FLEE_TIME = param3; + if (L_FLEE_TIME < 1) + { + float L_FLEE_TIME = 5.0; + } + if (L_FLEE_TIME > 10.0) + { + float L_FLEE_TIME = 10.0; + } + L_FLEE_TIME("npcatk_stopflee"); + } + + void npcatk_flee_stuck_check() + { + if (!(IS_FLEEING)) return; + FLEE_STUCKCHECK_FREQ("npcatk_flee_stuck_check"); + npcatk_setmovedest(FLEE_TARGET, FLEE_DISTANCE, "flee"); + if ((false)) + { + string NPC_FLEE_YAW = GetMonsterProperty("angles.yaw"); + NPC_FLEE_YAW += 180; + if (NPC_FLEE_YAW > 359) + { + NPC_FLEE_YAW -= 359; + } + SetAngles("face"); + PlayAnim("critical", ANIM_RUN); + } + if (STUCK_COUNT > 2) + { + npcatk_stopflee("npcatk_flee_stuck_check"); + } + } + + void npcatk_stopflee() + { + if (!(IS_FLEEING)) return; + if (FLEE_STUCK_COUNT > 5) + { + RE_FLEE_DELAY = 1; + ScheduleDelayedEvent(2.5, "npcatk_reset_flee_delay"); + } + if (GetEntityProperty(FLEE_TARGET, "npc_range_type") <= ATTACK_RANGE) + { + RE_FLEE_DELAY = 1; + ScheduleDelayedEvent(10.0, "npcatk_reset_flee_delay"); + } + IS_FLEEING = 0; + npcatk_restore_target(); + } + + void npcatk_reset_flee_delay() + { + RE_FLEE_DELAY = 0; + } + + void chicken_run() + { + if ((IS_FLEEING)) return; + if ((CANT_FLEE)) return; + npc_pre_flee(); + IS_FLEEING = 1; + CHICKEN_RUN = 1; + npcatk_store_target(); + npcatk_run("chicken_run"); + CKN_STUCK_COUNTER = 0; + FLEE_DIR = RandomInt(1, 359); + NPC_FORCED_MOVEDEST = 1; + npcatk_setmovedest(/* TODO: $relpos */ $relpos(Vector3(0, FLEE_DIR, 0), Vector3(0, 500, 0)), 0); + CKN_MY_OLD_POS = GetEntityOrigin(GetOwner()); + ScheduleDelayedEvent(0.5, "chicken_run_stuckcheck"); + PARAM1("chicken_run_end", "time_up"); + } + + void chicken_run_stuckcheck() + { + if (!(CHICKEN_RUN)) return; + float CKN_MOVE_DIST = Distance(GetMonsterProperty("origin"), CKN_MY_OLD_POS); + if (CKN_MOVE_DIST == 0) + { + FLEE_DIR = RandomInt(1, 359); + NPC_FORCED_MOVEDEST = 1; + npcatk_setmovedest(/* TODO: $relpos */ $relpos(Vector3(0, FLEE_DIR, 0), Vector3(0, 500, 0)), 0); + PlayAnim("once", ANIM_RUN); + CKN_STUCK_COUNTER += 1; + } + CKN_MY_OLD_POS = CKN_MY_POS; + if (CKN_MOVE_DIST > 0) + { + CKN_STUCK_COUNTER = 0; + } + if (CKN_STUCK_COUNTER > 4) + { + chicken_run_end("stuck_during_chickenrun"); + } + ScheduleDelayedEvent(0.25, "chicken_run_stuckcheck"); + } + + void chicken_run_end() + { + if (!(CHICKEN_RUN)) return; + CHICKEN_RUN = 0; + IS_FLEEING = 0; + npcatk_restore_target(); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((SUSPEND_AI)) return; + if ((IS_FLEEING)) return; + if (!(CAN_HEAR)) return; + if ((NPC_HEARDSOUND_OVERRIDE)) return; + I_HEARD = GetEntityIndex("ent_lastheard"); + string HEARD_RANGE = GetEntityProperty("ent_lastheard", "npc_range_type"); + HEARD_VERIFY = 1; + if ((NPC_VALIDATE_HEARING)) + { + npc_validate_heard(); + } + if (!(HEARD_VERIFY)) return; + string HEAR_RELATIONSHIP = GetRelationship(I_HEARD); + if (m_hAttackTarget == "unset") + { + if (param1 != "danger") + { + if (HEAR_RELATIONSHIP == "enemy") + { + if (!(NPC_IGNORE_PLAYERS)) + { + } + HEARD_PLAYER = IsValidPlayer(I_HEARD); + if ((HEARD_PLAYER)) + { + if (GetMonsterProperty("race") == "hguard") + { + int EXIT_SUB = 1; + } + if ((NPC_IGNORE_PLAYERS)) + { + int EXIT_SUB = 1; + } + } + if (!(EXIT_SUB)) + { + } + if (HEARD_RANGE < HEAR_RANGE_MAX) + { + } + if (!(GetEntityProperty(I_HEARD, "scriptvar"))) + { + } + if (!(NPC_HUNTING_BLIND)) + { + } + NPC_FORCED_MOVEDEST = 1; + npcatk_setmovedest(GetEntityOrigin(I_HEARD), ATTACK_MOVERANGE); + if ((HEARD_PLAYER)) + { + } + npc_heard_player(); + if (HEARD_RANGE < HEAR_RANGE_PLAYER) + { + } + if (CYCLE_TIME != CYCLE_TIME_BATTLE) + { + CYCLED_UP = 0; + cycle_up("heard_player"); + ScheduleDelayedEvent(5.0, "heard_cycle_down"); + } + } + } + } + npc_heardsound(); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((SUSPEND_AI)) return; + if ((NO_VICTORY_HEAL)) + { + NPC_STORE_HP = GetMonsterHP(); + } + string INC_PARAM = param1; + if ((IsValidPlayer(m_hAttackTarget))) + { + int L_FIRST_STRUCK = 1; + } + if (m_hAttackTarget == "unset") + { + int L_FIRST_STRUCK = 1; + } + if ((L_FIRST_STRUCK)) + { + if (!(IS_FLEEING)) + { + } + if (GetRelationship(m_hLastStruck) == "wary") + { + } + npcatk_settarget(GetEntityIndex(m_hLastStruck), "struck_by_enemy"); + } + else + { + if (GetEntityIndex(m_hLastStruck) != m_hAttackTarget) + { + } + npcatk_retaliate(INC_PARAM); + } + npcatk_checkflee(INC_PARAM); + npcatk_checkflinch(INC_PARAM); + npc_struck(INC_PARAM, GetEntityIndex(m_hLastStruck)); + } + + void npcatk_retaliate() + { + if ((IS_FLEEING)) return; + if (!(CAN_RETALIATE)) return; + string L_RETALIATE_CHANCE = RETALIATE_CHANCE; + if (NPC_DELAY_RETALITATE > 0) + { + if (GetGameTime() < NPC_NEXT_RETALITATE) + { + NPC_NEXT_RETALITATE = GetGameTime(); + NPC_NEXT_RETALITATE += NPC_DELAY_RETALITATE; + } + else + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (!(IsValidPlayer(m_hAttackTarget))) + { + if (!(GetEntityProperty(m_hAttackTarget, "scriptvar"))) + { + } + if (!(GetEntityProperty(m_hAttackTarget, "scriptvar"))) + { + } + int L_RETALIATE_CHANCE = 101; + } + if (RandomInt(1, 100) <= L_RETALIATE_CHANCE) + { + npcatk_settarget(GetEntityIndex(m_hLastStruck), "NPC_RETALIATING"); + } + } + + void reset_retaliate() + { + NPC_RETALIATING = 0; + } + + void npcatk_checkflee() + { + if ((CANT_FLEE)) return; + if (FLEE_HEALTH > 0) + { + if (GetMonsterHP() < FLEE_HEALTH) + { + if (RandomInt(1, 100) <= FLEE_CHANCE) + { + npcatk_flee(GetEntityIndex(m_hLastStruck), FLEE_DISTANCE, FLEE_TIME); + } + } + } + } + + void npcatk_checkflinch() + { + if ((SUSPEND_AI)) return; + if ((CAN_FLINCH)) + { + if (!(FLINCHED_RECENTLY)) + { + } + if (GetMonsterHP() < FLINCH_HEALTH) + { + if (param1 > FLINCH_DAMAGE_THRESHOLD) + { + } + if (RandomInt(1, 100) <= FLINCH_CHANCE) + { + npc_flinch(); + PlayAnim("once", "break"); + PlayAnim("critical", FLINCH_ANIM); + AS_ATTACKING = GetGameTime(); + } + FLINCHED_RECENTLY = 1; + FLINCH_DELAY("npcatk_reset_flinch"); + } + } + } + + void npcatk_reset_flinch() + { + FLINCHED_RECENTLY = 0; + } + + void game_reached_dest() + { + if ((SUSPEND_AI)) return; + if ((CHICKEN_RUN)) + { + npcatk_setmovedest(/* TODO: $relpos */ $relpos(0, 50, 0), 0, "chicken_reachdest"); + } + } + + void my_target_died() + { + LogDebug("my_target_died GetEntityName(param1) PARAM1"); + if ((NO_VICTORY_HEAL)) + { + SetHealth(NPC_STORE_HP); + } + } + + void OnSuspendAI() + { + if ((SUSPEND_AI)) return; + npcatk_store_target(); + SUSPEND_AI = 1; + PARAM1("npcatk_resume_ai"); + } + + void npcatk_resume_ai() + { + if (!(SUSPEND_AI)) return; + if (NPC_STORE_TARGET != "unset") + { + npcatk_restore_target(); + } + SUSPEND_AI = 0; + } + + void npcatk_store_target() + { + NPC_STORE_TARGET = m_hAttackTarget; + NPC_STORE_LOST_TARGET = NPC_LOST_TARGET; + } + + void npcatk_restore_target() + { + NPCATK_TARGET = NPC_STORE_TARGET; + NPC_LOST_TARGET = NPC_STORE_LOST_TARGET; + NPC_STORE_TARGET = "unset"; + NPC_STORE_LOST_TARGET = "unset"; + NPC_STOREHUNTSTATE_ADVANCED = "unset"; + NPC_STOREHUNTSTATE_MLK = "unset"; + if (m_hAttackTarget == "unset") + { + if (NPC_LOST_TARGET == "unset") + { + NPC_MOVEDEST_TARGET = "unset"; + npcatk_walk("restore_walk"); + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (!(m_hAttackTarget != "unset")) return; + npcatk_settarget(m_hAttackTarget, "restore_standard"); + } + + void game_dodamage() + { + if ((NPC_SCANNING_INALLY)) + { + if ((GetRelationship(param2) + "is" + "ally")) + { + } + CallExternal(GetEntityIndex(param2), "chicken_run", 3.0, "ally_stuck"); + NPC_INALLY = 1; + } + } + + void npcatk_reset_ally_resp_delay() + { + ALLY_RESPONSE_DELAY = 0; + } + + void super_lure() + { + string TARG_RACE = GetMonsterProperty("race"); + if (param2 != "PARAM2") + { + string TARG_RACE = param2; + } + if (!(GetMonsterProperty("race") == TARG_RACE)) return; + if (!(m_hAttackTarget == "unset")) return; + if ((NPC_MOVING_LAST_KNOWN)) return; + npcatk_setmovedest(GetEntityOrigin(param1), ATTACK_MOVERANGE, "superlure"); + npcatk_settarget(param1, "super_lure"); + } + + void cycle_up() + { + LogDebug("cycled_up PARAM1 SUSPEND_AI"); + if ((CYCLED_UP)) return; + CYCLED_UP = 1; + CYCLE_TIME = CYCLE_TIME_BATTLE; + npc_alert(); + if ((NO_STEP_ADJ)) return; + if ((NPC_DID_STEP_ADJ)) return; + NPC_DID_STEP_ADJ = 1; + adj_step_size(); + } + + void cycle_down() + { + CYCLED_UP = 0; + CYCLE_TIME = CYCLE_TIME_IDLE; + } + + void cycle_npc() + { + CYCLED_UP = 0; + CYCLE_TIME = CYCLE_TIME_NPC; + npc_alert(); + } + + void heard_cycle_down() + { + if ((IsValidPlayer(m_hAttackTarget))) return; + if ((HUNTING_PLAYER)) return; + if ((NPC_MOVING_LAST_KNOWN)) return; + HEARD_PLAYER = 0; + cycle_down("heard+never_found"); + if (m_hAttackTarget == "unset") + { + npcatk_walk("heard_cycledown"); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_npc_attack_shared.as b/scripts/angelscript/monsters/base_npc_attack_shared.as new file mode 100644 index 00000000..7610dc46 --- /dev/null +++ b/scripts/angelscript/monsters/base_npc_attack_shared.as @@ -0,0 +1,15 @@ +#pragma context server + +namespace MS +{ + +class BaseNpcAttackShared : CGameScript +{ + BaseNpcAttackShared() + { + int DO_NADDA = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/base_npc_vendor.as b/scripts/angelscript/monsters/base_npc_vendor.as new file mode 100644 index 00000000..bcc9db55 --- /dev/null +++ b/scripts/angelscript/monsters/base_npc_vendor.as @@ -0,0 +1,233 @@ +#pragma context server + +#include "help/first_vendor.as" + +namespace MS +{ + +class BaseNpcVendor : CGameScript +{ + string BUSY_COMMENT; + int HAS_INCLUDE_VENDOR; + string L_SERVICE; + string STORE_BUYMENU; + int STORE_RESTOCK; + int STORE_RESTOCK_TIME_HI; + int STORE_RESTOCK_TIME_LO; + string STORE_TRADEEXT; + int VENDOR_STORE_ACTIVE; + string VENDOR_TARGET; + int VEND_NO_GOODBYE; + + BaseNpcVendor() + { + HAS_INCLUDE_VENDOR = 1; + STORE_RESTOCK = 1; + STORE_RESTOCK_TIME_LO = 300; + STORE_RESTOCK_TIME_HI = 600; + BUSY_COMMENT = "One at a time, please."; + if (STORE_TRADEEXT == "STORE_TRADEEXT") + { + STORE_TRADEEXT = "trade"; + } + if (STORE_BUYMENU == "STORE_BUYMENU") + { + STORE_BUYMENU = 1; + } + } + + void OnSpawn() override + { + CatchSpeech("npc_say_store", "store"); + ScheduleDelayedEvent(0.1, "vendor_setup_store"); + if (!(GetMonsterProperty("race") == "human")) return; + SetModelBody(0, 3); + } + + void vendor_setup_store() + { + if ((VEND_INDIVIDUAL)) return; + NpcStoreCreate(STORE_NAME); + ScheduleDelayedEvent(1.0, "vendor_addstoreitems"); + } + + void OnSpawn() override + { + if (!(GetMonsterProperty("race") == "human")) return; + SetModelBody(0, 3); + } + + void game_menu_getoptions() + { + vendor_addstoremenu(param1); + } + + void vendor_addstoremenu() + { + if ((VENDOR_MENU_OFF)) return; + string reg.mitem.id = "genericstore"; + int reg.mitem.priority = -100; + string reg.mitem.access = "all"; + if (!(STORE_CLOSED)) + { + if (VEND_CHAT_MODE != "weapons") + { + } + string reg.mitem.title = "Shop"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "vendor_offerstore"; + } + else + { + string reg.mitem.title = "Closed"; + string reg.mitem.type = "disabled"; + } + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + vendor_used(); + if ((VENDOR_NOT_ON_USE)) return; + vendor_offerstore(GetEntityIndex(m_hLastUsed)); + } + + void npc_say_store() + { + vendor_offerstore(GetEntityIndex("ent_lastspoke")); + } + + void vendor_offerstore() + { + LogDebug("vendor_offerstore to GetEntityName(param1)"); + VENDOR_STORE_ACTIVE = 1; + if (!(STORE_CLOSED)) + { + VENDOR_TARGET = param1; + if (VENDOR_DELAY > 0) + { + VENDOR_DELAY("basevendor_offerstore"); + } + else + { + basevendor_offerstore(); + } + } + else + { + vendor_say_closed(); + VENDOR_STORE_ACTIVE = 0; + } + } + + void vendor_fail() + { + VENDOR_STORE_ACTIVE = 0; + } + + void basevendor_offerstore() + { + if (param1 != "PARAM1") + { + VENDOR_TARGET = param1; + } + int L_SERVICE = 0; + if ((STORE_BUYMENU)) + { + L_SERVICE = "buy"; + } + if ((STORE_SELLMENU)) + { + L_SERVICE += ";sell"; + } + if (SELL_WEAPON_LEVEL > 0) + { + SendColoredMessage(VENDOR_TARGET, "This vendor's weapons require proficiency level " + SELL_WEAPON_LEVEL); + } + if (!(VEND_INDIVIDUAL)) + { + NpcStoreOffer(STORE_NAME, VENDOR_TARGET, L_SERVICE, "trade"); + } + else + { + if (VEND_PREFIX == "VEND_PREFIX") + { + VEND_PREFIX = STORE_NAME; + array ARRAY_STORES; + LogDebug("basevendor_offerstore initiated array"); + } + string L_TARGET_STORE = VEND_PREFIX; + L_TARGET_STORE += GetPlayerAuthId(VENDOR_TARGET); + if (ArrayFind(ARRAY_STORES, L_TARGET_STORE, 0) > -1) + { + LogDebug("basevendor_offerstore setupstore L_TARGET_STORE"); + NpcStoreOffer(L_TARGET_STORE, VENDOR_TARGET, L_SERVICE, "trade"); + } + else + { + ShowHelpTip(VENDOR_TARGET, "generic", "Individualized Store", "This merchant shows a seperate inventory for each player."); + ARRAY_STORES.insertLast(L_TARGET_STORE); + STORE_NAME = L_TARGET_STORE; + NpcStoreCreate(STORE_NAME); + vendor_addstoreitems(); + NpcStoreOffer(STORE_NAME, VENDOR_TARGET, L_SERVICE, "trade"); + } + } + } + + void trade_busy() + { + if (!(IsEntityAlive(param1))) return; + if (!(GetEntityRange(param1) < 256)) return; + SayText(BUSY_COMMENT); + } + + void trade_success() + { + VENDOR_STORE_ACTIVE = 0; + } + + void vendor_store_reset() + { + NpcStoreRemove(STORE_NAME, "allitems"); + ScheduleDelayedEvent(0.1, "vendor_addstoreitems"); + } + + void vendor_clear() + { + NpcStoreRemove(STORE_NAME, "allitems"); + } + + void game_confirm_buy() + { + LogDebug("game_confirm_buy id PARAM1 script PARAM2 cost PARAM3 disp PARAM4 stat PARAM5"); + string PLAYER_ID = param1; + string ITEM_NAME = param2; + string ITEM_SCRIPT = param3; + string ITEM_TYPE = param4; + string ITEM_STAT = "skill."; + ITEM_STAT += param4; + SayText(I + "do not think you yet have the skill to use a " + ITEM_NAME + " properly."); + SayText("You might consider buying one of my other " + ITEM_TYPE + " items instead."); + VEND_NO_GOODBYE = 1; + if (SELL_WEAPON_LEVEL > 0) + { + if (StringToLower(GetMapName()) != "edana") + { + } + string MSG_TEXT = "This vendor offers weapons requiring levels "; + MSG_TEXT += SELL_WEAPON_LEVEL; + SendInfoMsg(param1, "VENDOR LEVEL"); + } + if ((HAS_BASE_CHAT_INCLUDE)) + { + bchat_mouth_move(); + } + if ((HAS_BASE_CHAT_ARRAY_INCLUDE)) + { + chat_mouth_move(); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_npc_vendor_confirm.as b/scripts/angelscript/monsters/base_npc_vendor_confirm.as new file mode 100644 index 00000000..6ad3bd01 --- /dev/null +++ b/scripts/angelscript/monsters/base_npc_vendor_confirm.as @@ -0,0 +1,294 @@ +#pragma context server + +namespace MS +{ + +class BaseNpcVendorConfirm : CGameScript +{ + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEPS; + float FREQ_HINT_TEXT; + int HAS_INCLUDE_VENDOR_CONFIRM; + string NEXT_HINT_TEXT; + int NPC_CHECK_LEVEL; + string VEND_CHAT_MODE; + string VEND_USER; + + BaseNpcVendorConfirm() + { + HAS_INCLUDE_VENDOR_CONFIRM = 1; + NPC_CHECK_LEVEL = 1; + string L_MAP_NAME = StringToLower(GetMapName()); + if (VEND_NEWBIE == "VEND_NEWBIE") + { + if (L_MAP_NAME == "edana") + { + VEND_NEWBIE = 1; + } + if (L_MAP_NAME == "deralia") + { + VEND_NEWBIE = 1; + } + if (L_MAP_NAME == "gatecity") + { + VEND_NEWBIE = 1; + } + if (L_MAP_NAME == "helena") + { + VEND_NEWBIE = 1; + } + } + FREQ_HINT_TEXT = 120.0; + } + + void OnSpawn() override + { + ScheduleDelayedEvent(1.0, "player_scan"); + ScheduleDelayedEvent(2.0, "vend_post_spawn"); + } + + void vend_post_spawn() + { + if ((VEND_WEAPONS)) + { + CatchSpeech("say_weapons", "weapon"); + } + if ((VEND_CONTAINERS)) + { + CatchSpeech("say_containers", "sheath"); + } + VEND_CHAT_MODE = "none"; + } + + void player_scan() + { + if ((NPC_REACTS)) return; + ScheduleDelayedEvent(1.0, "player_scan"); + if (!(CanSee("player", 128))) return; + if (!(GetEntityMaxHealth(m_hLastSeen) < 100)) return; + vendor_offer_help(); + } + + void vendor_offerstore() + { + if (!(true)) return; + vendor_offer_help(GetEntityIndex(param1)); + } + + void vendor_offer_help() + { + if (!(true)) return; + if ((BUSY_CHATTING)) return; + if (!(GetGameTime() > NEXT_HINT_TEXT)) return; + NEXT_HINT_TEXT = GetGameTime(); + NEXT_HINT_TEXT += FREQ_HINT_TEXT; + if (!(GetEntityMaxHealth(param1) < 200)) return; + if ((VEND_WEAPONS)) + { + CatchSpeech("say_weapons", "weapon"); + if (!(VEND_CONTAINERS)) + { + } + SayText(I + "can tell you about the [weapons] " + I + " have for sale."); + bchat_mouth_move(); + } + if ((VEND_CONTAINERS)) + { + CatchSpeech("say_containers", "sheath"); + bchat_mouth_move(); + if (!(VEND_WEAPONS)) + { + SayText(I + "can tell you about the [containers] " + I + " have for sale."); + } + if ((VEND_WEAPONS)) + { + } + SayText(I + "can tell you about the types [weapons] and [containers] " + I + " have for sale , if you like."); + } + if ((VEND_ARMORER)) + { + if (GetEntityProperty(param1, "strength") < 10) + { + SayText("You might want to bulk up a bit before you try wearing any of my armors."); + bchat_mouth_move(); + } + else + { + if (GetEntityProperty(param1, "strength") < 20) + { + } + SayText("You look like you have enough muscle on you to handle my leather armors."); + SayText("Still, I'd bulk up a bit more before trying the platemail, if I were you."); + bchat_mouth_move(); + } + } + } + + void game_menu_getoptions() + { + if (!(VEND_NEWBIE)) return; + if (VEND_CHAT_MODE == "none") + { + if ((VEND_WEAPONS)) + { + string reg.mitem.title = "About Weapons"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_weapons"; + int OFFER_HELP = 1; + } + if ((VEND_CONTAINERS)) + { + string reg.mitem.title = "About Containers"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_containers"; + int OFFER_HELP = 1; + } + if ((OFFER_HELP)) + { + vendor_offer_help(GetEntityIndex(param1)); + } + } + if (VEND_CHAT_MODE == "weapons") + { + SayText("Which sort of weapon would you like to know about?"); + string reg.mitem.title = "Bows"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "archery"; + string reg.mitem.callback = "say_weapon_desc"; + string reg.mitem.title = "Axes"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "axehandling"; + string reg.mitem.callback = "say_weapon_desc"; + string reg.mitem.title = "Blunt Arms"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "bluntarms"; + string reg.mitem.callback = "say_weapon_desc"; + string reg.mitem.title = "Gauntlets"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "martialarts"; + string reg.mitem.callback = "say_weapon_desc"; + string reg.mitem.title = "Smallarms"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "smallarms"; + string reg.mitem.callback = "say_weapon_desc"; + string reg.mitem.title = "Swords"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "swordsmanship"; + string reg.mitem.callback = "say_weapon_desc"; + string reg.mitem.title = "Polearms"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "polearms"; + string reg.mitem.callback = "say_weapon_desc"; + string reg.mitem.title = "Scrolls and Tomes"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "spellcasting"; + string reg.mitem.callback = "say_weapon_desc"; + } + bchat_mouth_move(); + } + + void game_menu_cancel() + { + VEND_CHAT_MODE = "none"; + } + + void say_weapons() + { + VEND_CHAT_MODE = "weapons"; + VEND_USER = param1; + if (!(IsEntityAlive(VEND_USER))) + { + VEND_USER = GetEntityIndex("ent_lastspoke"); + } + ScheduleDelayedEvent(0.1, "send_chat_menu"); + } + + void send_chat_menu() + { + OpenMenu(VEND_USER); + } + + void say_weapon_desc() + { + VEND_CHAT_MODE = "none"; + if ((BUSY_CHATTING)) return; + if (param2 == "archery") + { + CHAT_STEPS = 4; + CHAT_STEP1 = "Bows are excellent for wearing down opponents from a distance, before they can reach you."; + CHAT_STEP2 = "Basic arrows are always available, but for that extra kick, you'll want to purchase more specialized arrows."; + CHAT_STEP3 = "Training with bows doesn't bulk one up much, but aids in awareness and concentration, honing the mind for other tasks."; + CHAT_STEP4 = "Such mental discipline can also aid in the working of magic. But one does not live by bow and spell alone."; + } + if (param2 == "axehandling") + { + CHAT_STEPS = 3; + CHAT_STEP1 = "Smaller axes offer quick and steady damage. The large ones are slow and difficult to strike with, but can inflict massive wounds."; + CHAT_STEP2 = "Either way, axe training offers rapid gains in both strength and endurance."; + CHAT_STEP3 = "Nonetheless, the wise adventure always trains in as wide a range of weaponry as possible."; + } + if (param2 == "bluntarms") + { + CHAT_STEPS = 2; + CHAT_STEP1 = "Maces and hammers can be used to stun opponents, in addition to offering formidable strength."; + CHAT_STEP2 = "It's a good idea, however, to balance the brute strength they offer with the other weapon disciplines as well."; + } + if (param2 == "martialarts") + { + CHAT_STEPS = 3; + CHAT_STEP1 = "Gauntlets are for aiding in brawling and martial arts training."; + CHAT_STEP2 = "Virtually unarmed combat of this sort can get you out of a pinch!"; + CHAT_STEP3 = "But you'll have to learn all the combat skills you can, or risk always being in one!"; + } + if (param2 == "smallarms") + { + CHAT_STEPS = 3; + CHAT_STEP1 = "Knives and daggers require that you get in close with your opponent."; + CHAT_STEP2 = "But they offer swift attack speeds and thus are not to be underestimated."; + CHAT_STEP3 = "Training in smallarms offers little endurance, but great speed and agility."; + } + if (param2 == "swordsmanship") + { + CHAT_STEPS = 3; + CHAT_STEP1 = "Swordsmanship training is a balanced art, offering moderate gains in most all physical abilities."; + CHAT_STEP2 = "While it is good to be a well rounded warrior, however, it is wise to learn all one can of all the weapons."; + CHAT_STEP3 = "This ensures one doesn't fall behind the extremists by taking the moderate approach!"; + } + if (param2 == "spellcasting") + { + CHAT_STEPS = 3; + CHAT_STEP1 = "Memorizing tomes, or invoking scrolls, allows access to a wide range of magical abilities."; + CHAT_STEP2 = "It's an entirely mental activity though, and does nothing for the physique."; + CHAT_STEP3 = "So while magical ability is cruicial for the adventurer, to be sure, man cannot live by magic alone."; + } + if (param2 == "polearms") + { + CHAT_STEPS = 4; + CHAT_STEP1 = "Polearms are tricky to employ effectively in one on one combat, but deadly in the hands of an agile warrior."; + CHAT_STEP2 = "They are very dynamic weapons, but you need to keep you enemy at a fair distance to optimize the damage."; + CHAT_STEP3 = "While they aren't very effective at close range, the careful warrior can hold his opponent at bay, for a solid strike."; + CHAT_STEP4 = "They do little to train robustness, but the footwork involved favors speed, concentration, and the like."; + } + chat_loop(); + } + + void say_containers() + { + CHAT_STEPS = 3; + CHAT_STEP1 = "Weapon straps hold any type of weapon. Quivers hold amunition. Big sacks hold nearly everything else."; + CHAT_STEP2 = "Backpacks can hold nearly anything, useful for more a more generalized inventory."; + CHAT_STEP3 = "Spellbooks hold magic scrolls. The small sack can hold most items, but has very little room, so it can't hold very many."; + if ((VEND_SPEC_SHEATHS)) + { + CHAT_STEP4 = "I also offer more specialized sheaths, that can only hold specific weapon types."; + CHAT_STEPS = 4; + } + chat_loop(); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_pain.as b/scripts/angelscript/monsters/base_pain.as new file mode 100644 index 00000000..38ca4e65 --- /dev/null +++ b/scripts/angelscript/monsters/base_pain.as @@ -0,0 +1,122 @@ +#pragma context server + +namespace MS +{ + +class BasePain : CGameScript +{ + string BPAIN_CAN_FLINCH; + float BPAIN_FLINCH_HEALTH; + string BPAIN_FLINCH_HP; + string BPAIN_FLINCH_TOKENS; + float BPAIN_FREQ_FLINCH; + float BPAIN_PAIN_HEALTH; + string BPAIN_PAIN_HP; + int BPAIN_USE_FLINCH; + int BPAIN_USE_PAIN; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + BasePain() + { + BPAIN_USE_PAIN = 1; + BPAIN_USE_FLINCH = 1; + BPAIN_FREQ_FLINCH = Random(10.0, 20.0); + BPAIN_FLINCH_HEALTH = 0.75; + BPAIN_PAIN_HEALTH = 0.5; + BPAIN_FLINCH_TOKENS = "flinchsmall;flinch;bigflinch;laflinch;raflinch;llflinch;rlflinch"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "garg/gar_pain1.wav"; + SOUND_PAIN2 = "garg/gar_pain2.wav"; + } + + void OnSpawn() override + { + if ((BPAIN_USE_FLINCH)) + { + BPAIN_CAN_FLINCH = 1; + } + ScheduleDelayedEvent(2.0, "bpain_finalize"); + } + + void bpain_finalize() + { + BPAIN_PAIN_HP = GetEntityMaxHealth(GetOwner()); + BPAIN_FLINCH_HP = BPAIN_PAIN_HP; + BPAIN_PAIN_HP *= BPAIN_PAIN_HEALTH; + BPAIN_FLINCH_HP *= BPAIN_FLINCH_HEALTH; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((BPAIN_USE_PAIN)) + { + if ((BPAIN_USE_FLINCH)) + { + if ((BPAIN_CAN_FLINCH)) + { + } + if (GetEntityHealth(GetOwner()) < BPAIN_FLINCH_HP) + { + } + if (GetGameTime() > BPAIN_NEXT_FLINCH) + { + } + BPAIN_NEXT_FLINCH = GetGameTime(); + BPAIN_NEXT_FLINCH += BPAIN_FREQ_FLINCH; + npc_flinch(); + string L_NFLINCH_ANIMS = GetTokenCount(BPAIN_FLINCH_TOKENS, ";"); + L_NFLINCH_ANIMS -= 1; + int L_RND_FLINCH = RandomInt(0, L_NFLINCH_ANIMS); + PlayAnim("critical", GetToken(BPAIN_FLINCH_TOKENS, L_NFLINCH_ANIMS, ";")); + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetEntityHealth(GetOwner()) < BPAIN_PAIN_HP) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void bflinch_suspend_flinch() + { + if (!(BPAIN_CAN_FLINCH)) return; + BPAIN_CAN_FLINCH = 0; + if (!((param1).findFirst(PARAM) == 0)) return; + PARAM1("bflinch_restore_flinch"); + } + + void bflinch_restore_flinch() + { + if ((BPAIN_CAN_FLINCH)) return; + BPAIN_CAN_FLINCH = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/base_patrol_radius.as b/scripts/angelscript/monsters/base_patrol_radius.as new file mode 100644 index 00000000..4892528c --- /dev/null +++ b/scripts/angelscript/monsters/base_patrol_radius.as @@ -0,0 +1,227 @@ +#pragma context server + +namespace MS +{ + +class BasePatrolRadius : CGameScript +{ + float BPATROL_AGRO_RATIO; + float BPATROL_ATK_COOLDOWN; + string BPATROL_CENTER; + float BPATROL_COOL_DOWN; + int BPATROL_DEF_HEARING; + string BPATROL_LAST_ATK; + string BPATROL_MOVEPROX; + string BPATROL_NEXT_REGEN; + string BPATROL_OUTSIDE_RANGE; + int BPATROL_RAD; + float BPATROL_REGEN_AMT; + float BPATROL_REGEN_FREQ; + string BPATROL_ROT; + string BPATROL_STRUCK_DELAY; + int BPATROL_TARGET_VALIDATED; + string BPATRON_NEXT_BEAM; + int NPC_EXTRA_VALIDATIONS; + + BasePatrolRadius() + { + BPATROL_RAD = 512; + BPATROL_AGRO_RATIO = 2.0; + BPATROL_COOL_DOWN = Random(10.0, 15.0); + BPATROL_ATK_COOLDOWN = 10.0; + BPATROL_MOVEPROX = GetMonsterProperty("moveprox"); + BPATROL_DEF_HEARING = 10; + NPC_EXTRA_VALIDATIONS = 1; + BPATROL_REGEN_FREQ = 10.0; + BPATROL_REGEN_AMT = 0.01; + } + + void OnSpawn() override + { + BPATROL_CENTER = GetEntityOrigin(GetOwner()); + } + + void bpatrol_debug_beams() + { + if (!(BPATROL_ACTIVE)) return; + string BEAM_START = BPATROL_CENTER; + string BEAM_END = BPATROL_CENTER; + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, BPATROL_ROT, 0), Vector3(0, BPATROL_RAD, 32)); + BPATROL_ROT += 22.5; + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, BPATROL_ROT, 0), Vector3(0, BPATROL_RAD, 32)); + Effect("beam", "point", "lgtning.spr", 20, BEAM_START, BEAM_END, Vector3(255, 0, 255), 200, 0, 20.0); + string BEAM_START = BPATROL_CENTER; + string BEAM_END = BPATROL_CENTER; + string L_BPATROL_RAD = BPATROL_RAD; + L_BPATROL_RAD *= BPATROL_AGRO_RATIO; + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, BPATROL_ROT, 0), Vector3(0, L_BPATROL_RAD, 32)); + BPATROL_ROT += 22.5; + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, BPATROL_ROT, 0), Vector3(0, L_BPATROL_RAD, 32)); + Effect("beam", "point", "lgtning.spr", 20, BEAM_START, BEAM_END, Vector3(255, 0, 0), 200, 0, 20.0); + BPATROL_ROT -= 22.5; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(BPATROL_ACTIVE)) return; + if (GetGameTime() > BPATROL_NEXT_REGEN) + { + if (!(BPATROL_TARGET_VALIDATED)) + { + } + BPATROL_NEXT_REGEN = GetGameTime(); + BPATROL_NEXT_REGEN += BPATROL_REGEN_FREQ; + if (GetEntityHealth(GetOwner()) < GetEntityMaxHealth(GetOwner())) + { + } + string HP_TO_GIVE = GetEntityMaxHealth(GetOwner()); + HP_TO_GIVE *= BPATROL_REGEN_AMT; + HealEntity(GetOwner(), HP_TO_GIVE); + } + if ((G_DEVELOPER_MODE)) + { + if (GetGameTime() > BPATRON_NEXT_BEAM) + { + } + BPATRON_NEXT_BEAM = GetGameTime(); + BPATRON_NEXT_BEAM += 20.0; + string BEAM_START = BPATROL_CENTER; + string BEAM_END = BEAM_START; + BEAM_END += "z"; + Effect("beam", "point", "lgtning.spr", 20, BEAM_START, BEAM_END, Vector3(255, 0, 255), 200, 0, 20.0); + BPATROL_ROT = 0; + for (int i = 0; i < 16; i++) + { + bpatrol_debug_beams(); + } + } + string MY_POS = GetEntityOrigin(GetOwner()); + float L_PATROL_DIST = Distance(MY_POS, BPATROL_CENTER); + string L_BPATROL_RAD = BPATROL_RAD; + if (m_hAttackTarget != "unset") + { + if ((BPATROL_TARGET_VALIDATED)) + { + } + L_BPATROL_RAD *= BPATROL_AGRO_RATIO; + } + if (L_PATROL_DIST > L_BPATROL_RAD) + { + BPATROL_OUTSIDE_RANGE = 1; + } + if (L_PATROL_DIST <= L_BPATROL_RAD) + { + BPATROL_OUTSIDE_RANGE = 0; + } + if ((BPATROL_OUTSIDE_RANGE)) + { + if (m_hAttackTarget == "unset") + { + npcatk_setmovedest(BPATROL_CENTER, BPATROL_MOVEPROX); + } + if (m_hAttackTarget != "unset") + { + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetGameTime() > BPATROL_STRUCK_DELAY) + { + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + if (Distance(TARG_POS, BPATROL_CENTER) > BPATROL_RAD) + { + } + LogDebug("targ_outside_patrol_hunt Distance(TARG_POS, BPATROL_CENTER)"); + BPATROL_LAST_TARGET = m_hAttackTarget; + npc_bpatrol_target_invalid(BPATROL_LAST_TARGET); + if ((IsEntityAlive(m_hAttackTarget))) + { + npcatk_clear_targets("beyond_patrol_range"); + } + npcatk_setmovedest(BPATROL_CENTER, BPATROL_MOVEPROX); + } + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(BPATROL_ACTIVE)) return; + BPATROL_STRUCK_DELAY = GetGameTime(); + BPATROL_STRUCK_DELAY += BPATROL_COOL_DOWN; + SetHearingSensitivity(BPATROL_DEF_HEARING); + BPATROL_TARGET_VALIDATED = 1; + } + + void npcatk_clear_targets() + { + if (!(BPATROL_ACTIVE)) return; + SetHearingSensitivity(0); + BPATROL_TARGET_VALIDATED = 0; + } + + void npc_selectattack() + { + if (!(BPATROL_ACTIVE)) return; + BPATROL_LAST_ATK = GetGameTime(); + } + + void npc_targetvalidate() + { + if (!(BPATROL_ACTIVE)) return; + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + BPATROL_TARGET_VALIDATED = 1; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetGameTime() > BPATROL_STRUCK_DELAY) + { + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + float L_TARG_DIST_FROM_PATROLPOINT = Distance(TARG_POS, BPATROL_CENTER); + string MY_POS = GetEntityOrigin(GetOwner()); + float L_MY_DIST_FROM_PATROLPOINT = Distance(MY_POS, BPATROL_CENTER); + string L_BPATROL_RAD = BPATROL_RAD; + string L_BPATROL_LAST_ATK = BPATROL_LAST_ATK; + L_BPATROL_LAST_ATK += BPATROL_ATK_COOLDOWN; + if (GetGameTime() < L_BPATROL_LAST_ATK) + { + L_BPATROL_RAD *= BPATROL_AGRO_RATIO; + } + if (L_TARG_DIST_FROM_PATROLPOINT > L_BPATROL_RAD) + { + if (L_MY_DIST_FROM_PATROLPOINT < L_TARG_DIST_FROM_PATROLPOINT) + { + LogDebug("targ_outside_patrol Distance(TARG_POS, BPATROL_CENTER)"); + BPATROL_LAST_TARGET = m_hAttackTarget; + npc_bpatrol_target_invalid(BPATROL_LAST_TARGET); + npcatk_clear_targets("beyond_patrol_range"); + } + else + { + LogDebug("targ_between_me_and_home"); + SetHearingSensitivity(BPATROL_DEF_HEARING); + BPATROL_TARGET_VALIDATED = 1; + } + } + else + { + SetHearingSensitivity(BPATROL_DEF_HEARING); + BPATROL_TARGET_VALIDATED = 1; + } + } + else + { + SetHearingSensitivity(BPATROL_DEF_HEARING); + BPATROL_TARGET_VALIDATED = 1; + } + if (!(BPATROL_TARGET_VALIDATED)) return; + npc_bpatrol_target_valid(); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_propelled.as b/scripts/angelscript/monsters/base_propelled.as new file mode 100644 index 00000000..e4655e2c --- /dev/null +++ b/scripts/angelscript/monsters/base_propelled.as @@ -0,0 +1,39 @@ +#pragma context server + +namespace MS +{ + +class BasePropelled : CGameScript +{ + string NPC_HACKED_MOVE_SPEED; + int NPC_PROPELLED; + + BasePropelled() + { + NPC_PROPELLED = 1; + } + + void OnPostSpawn() override + { + if (NPC_HACKED_MOVE_SPEED == "NPC_HACKED_MOVE_SPEED") + { + NPC_HACKED_MOVE_SPEED = 250; + } + } + + void game_movingto_dest() + { + if ((NPC_PROPELL_SUSPEND)) return; + if ((I_R_FROZEN)) return; + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + } + + void game_stopmoving() + { + if ((NPC_PROPELL_SUSPEND)) return; + SetAnimMoveSpeed(0); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_race_cold.as b/scripts/angelscript/monsters/base_race_cold.as new file mode 100644 index 00000000..cdfddd81 --- /dev/null +++ b/scripts/angelscript/monsters/base_race_cold.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/base_ice_race.as" + +namespace MS +{ + +class BaseRaceCold : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/base_react.as b/scripts/angelscript/monsters/base_react.as new file mode 100644 index 00000000..22c0784a --- /dev/null +++ b/scripts/angelscript/monsters/base_react.as @@ -0,0 +1,55 @@ +#pragma context server + +namespace MS +{ + +class BaseReact : CGameScript +{ + int NPC_REACTS; + string NPC_REACT_CANSEETARGET; + string NPC_REACT_LAST_TARGET; + string NPC_REACT_RESET_TARGET_TIME; + string NPC_REACT_SEETARGET; + int NPC_REACT_SEETARGET_RANGE; + + BaseReact() + { + NPC_REACT_SEETARGET = "player"; + NPC_REACT_SEETARGET_RANGE = 128; + NPC_REACTS = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1); + if ((CanSee(NPC_REACT_SEETARGET, NPC_REACT_SEETARGET_RANGE))) + { + if (GetEntityIndex(m_hLastSeen) != NPC_REACT_LAST_TARGET) + { + } + NPC_REACT_LAST_TARGET = GetEntityIndex(m_hLastSeen); + NPC_REACT_RESET_TARGET_TIME = GetGameTime(); + NPC_REACT_RESET_TARGET_TIME += 60.0; + if (!(NPC_REACT_CANSEETARGET)) + { + npcreact_targetsighted(NPC_REACT_LAST_TARGET); + } + NPC_REACT_CANSEETARGET = 1; + } + else + { + if ((NPC_REACT_CANSEETARGET)) + { + npc_react_sightlost(); + } + NPC_REACT_CANSEETARGET = 0; + if (GetGameTime() > NPC_REACT_RESET_TARGET_TIME) + { + } + NPC_REACT_LAST_TARGET = 0; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_script_skills.as b/scripts/angelscript/monsters/base_script_skills.as new file mode 100644 index 00000000..564f6bb3 --- /dev/null +++ b/scripts/angelscript/monsters/base_script_skills.as @@ -0,0 +1,358 @@ +#pragma context server + +namespace MS +{ + +class BaseScriptSkills : CGameScript +{ + string FOUND_EMPTY_SLOT; + string NPC_ADJUSTED_DMG; + int NPC_HITDATA_ARCHERY; + int NPC_HITDATA_AXEHANDLING; + string NPC_HITDATA_DMG; + string NPC_HITDATA_IDS; + string NPC_HITDATA_INIT_SKILLS; + int NPC_HITDATA_MARTIALARTS; + int NPC_HITDATA_SMALLARMS; + int NPC_HITDATA_SPELLS_AFFLICTION; + int NPC_HITDATA_SPELLS_DIVINATION; + int NPC_HITDATA_SPELLS_EARTH; + int NPC_HITDATA_SPELLS_FIRE; + int NPC_HITDATA_SPELLS_ICE; + int NPC_HITDATA_SPELLS_LIGHTNING; + int NPC_HITDATA_SPELLS_SUMMON; + int NPC_HITDATA_SWORDSMANSHIP; + string NPC_SKILLS_LIST; + string NPC_TOTAL_DAMAGE; + string OUT_IDX; + string PLAYER_HITDATA_SKILLS_0; + string PLAYER_HITDATA_SKILLS_1; + string PLAYER_HITDATA_SKILLS_2; + string PLAYER_HITDATA_SKILLS_3; + string PLAYER_HITDATA_SKILLS_4; + string PLAYER_HITDATA_SKILLS_5; + string PLAYER_HITDATA_SKILLS_6; + string PLAYER_HITDATA_SKILLS_7; + string PLAYER_HITDATA_SKILLS_8; + string PLAYER_HITDATA_SKILLS_9; + string TOTAL_XP_TO_GIVE; + string T_SKILL_LIST; + + BaseScriptSkills() + { + NPC_HITDATA_SWORDSMANSHIP = 0; + NPC_HITDATA_MARTIALARTS = 1; + NPC_HITDATA_AXEHANDLING = 2; + NPC_HITDATA_SMALLARMS = 3; + NPC_HITDATA_ARCHERY = 4; + NPC_HITDATA_SPELLS_FIRE = 5; + NPC_HITDATA_SPELLS_ICE = 6; + NPC_HITDATA_SPELLS_LIGHTNING = 7; + NPC_HITDATA_SPELLS_EARTH = 8; + NPC_HITDATA_SPELLS_SUMMON = 9; + NPC_HITDATA_SPELLS_DIVINATION = 10; + NPC_HITDATA_SPELLS_AFFLICTION = 11; + NPC_HITDATA_INIT_SKILLS = "0;0;0;0;0;0;0;0;0;0;0;0"; + NPC_SKILLS_LIST = "swordsmanship;martialarts;axehandling;bluntarms;smallarms;archery;spellcasting.fire;spellcasting.ice;spellcasting.lightning;spellcasting.earth;spellcasting.summon;spellcasting.divination;spellcasting.affliction"; + } + + void OnSpawn() override + { + NPC_HITDATA_IDS = ""; + NPC_HITDATA_DMG = ""; + NPC_TOTAL_DAMAGE = ""; + } + + void OnDamage(int damage) override + { + string PLR_ATTACKER = param1; + string INC_DMG = param2; + string INC_DMG_TYPE = param3; + string ACC_ROLL = param4; + string SKILL_TYPE = param5; + NPC_ADJUSTED_DMG = INC_DMG; + npc_resist_damage(PLR_ATTACKER, INC_DMG, INC_DMG_TYPE); + string INC_DMG = NPC_ADJUSTED_DMG; + if (!(SKILL_TYPE != "none")) return; + if (!(INC_DMG > 0)) return; + if (!(IsValidPlayer(PLR_ATTACKER))) return; + string PLAYER_HITDATA_IDX = FindToken(NPC_HITDATA_IDS, PLR_ATTACKER, ";"); + if (PLAYER_HITDATA_IDX == -1) + { + string PLAYER_HITDATA_IDX = GetTokenCount(NPC_HITDATA_IDS, ";"); + if (PLAYER_HITDATA_IDX > 15) + { + for (int i = 0; i < PLAYER_HITDATA_IDX; i++) + { + npcexp_drop_exp_counter(); + } + FOUND_EMPTY_SLOT = -1; + for (int i = 0; i < PLAYER_HITDATA_IDX; i++) + { + npcexp_find_empty_slot(); + } + } + if (PLAYER_HITDATA_IDX >= 10) + { + SendPlayerMessage(PLR_ATTACKER, "XP Sys Warning: " + GetEntityName(GetOwner()) + "cannot find anymore " + XP + " slots"); + } + if (PLAYER_HITDATA_IDX < 10) + { + } + if (NPC_HITDATA_IDS.length() > 0) NPC_HITDATA_IDS += ";"; + NPC_HITDATA_IDS += PLR_ATTACKER; + } + string SKILL_IDX = FindToken(NPC_SKILLS_LIST, SKILL_TYPE, ";"); + if (PLAYER_HITDATA_IDX == 0) + { + string GET_AMT = GetToken(PLAYER_HITDATA_SKILLS_0, SKILL_IDX, ";"); + } + if (PLAYER_HITDATA_IDX == 1) + { + string GET_AMT = GetToken(PLAYER_HITDATA_SKILLS_1, SKILL_IDX, ";"); + } + if (PLAYER_HITDATA_IDX == 2) + { + string GET_AMT = GetToken(PLAYER_HITDATA_SKILLS_2, SKILL_IDX, ";"); + } + if (PLAYER_HITDATA_IDX == 3) + { + string GET_AMT = GetToken(PLAYER_HITDATA_SKILLS_3, SKILL_IDX, ";"); + } + if (PLAYER_HITDATA_IDX == 4) + { + string GET_AMT = GetToken(PLAYER_HITDATA_SKILLS_4, SKILL_IDX, ";"); + } + if (PLAYER_HITDATA_IDX == 5) + { + string GET_AMT = GetToken(PLAYER_HITDATA_SKILLS_5, SKILL_IDX, ";"); + } + if (PLAYER_HITDATA_IDX == 6) + { + string GET_AMT = GetToken(PLAYER_HITDATA_SKILLS_6, SKILL_IDX, ";"); + } + if (PLAYER_HITDATA_IDX == 7) + { + string GET_AMT = GetToken(PLAYER_HITDATA_SKILLS_7, SKILL_IDX, ";"); + } + if (PLAYER_HITDATA_IDX == 8) + { + string GET_AMT = GetToken(PLAYER_HITDATA_SKILLS_8, SKILL_IDX, ";"); + } + if (PLAYER_HITDATA_IDX == 9) + { + string GET_AMT = GetToken(PLAYER_HITDATA_SKILLS_9, SKILL_IDX, ";"); + } + GET_AMT += INC_DMG; + if (PLAYER_HITDATA_IDX == 0) + { + SetToken(PLAYER_HITDATA_SKILLS_0, SKILL_IDX, GET_AMT, ";"); + } + if (PLAYER_HITDATA_IDX == 1) + { + SetToken(PLAYER_HITDATA_SKILLS_1, SKILL_IDX, GET_AMT, ";"); + } + if (PLAYER_HITDATA_IDX == 2) + { + SetToken(PLAYER_HITDATA_SKILLS_2, SKILL_IDX, GET_AMT, ";"); + } + if (PLAYER_HITDATA_IDX == 3) + { + SetToken(PLAYER_HITDATA_SKILLS_3, SKILL_IDX, GET_AMT, ";"); + } + if (PLAYER_HITDATA_IDX == 4) + { + SetToken(PLAYER_HITDATA_SKILLS_4, SKILL_IDX, GET_AMT, ";"); + } + if (PLAYER_HITDATA_IDX == 5) + { + SetToken(PLAYER_HITDATA_SKILLS_5, SKILL_IDX, GET_AMT, ";"); + } + if (PLAYER_HITDATA_IDX == 6) + { + SetToken(PLAYER_HITDATA_SKILLS_6, SKILL_IDX, GET_AMT, ";"); + } + if (PLAYER_HITDATA_IDX == 7) + { + SetToken(PLAYER_HITDATA_SKILLS_7, SKILL_IDX, GET_AMT, ";"); + } + if (PLAYER_HITDATA_IDX == 8) + { + SetToken(PLAYER_HITDATA_SKILLS_8, SKILL_IDX, GET_AMT, ";"); + } + if (PLAYER_HITDATA_IDX == 9) + { + SetToken(PLAYER_HITDATA_SKILLS_9, SKILL_IDX, GET_AMT, ";"); + } + string GET_TOTAL_AMT = GetToken(NPC_HITDATA_DMG, PLAYER_HITDATA_IDX, ";"); + GET_TOTAL_AMT += INC_DMG; + SetToken(NPC_HITDATA_DMG, PLAYER_HITDATA_IDX, GET_TOTAL_AMT, ";"); + } + + void npcexp_drop_exp_counter() + { + string CUR_EXP_PLAYER = GetToken(NPC_HITDATA_IDS, i, ";"); + int DROP_THIS_PLAYER = 0; + if (!((CUR_EXP_PLAYER !is null))) + { + int DROP_THIS_PLAYER = 1; + } + if (!(IsValidPlayer(CUR_EXP_PLAYER))) + { + int DROP_THIS_PLAYER = 1; + } + if (!(DROP_THIS_PLAYER)) return; + npcexp_reset_skills(CUR_EXP_PLAYER); + } + + void npcexp_find_empty_slot() + { + if (!(FOUND_EMPTY_SLOT < 0)) return; + string CUR_EXP_PLAYER = GetToken(NPC_HITDATA_IDS, i, ";"); + if (CUR_EXP_PLAYER == 0) + { + FOUND_EMPTY_SLOT = i; + } + } + + void player_left() + { + string PLAYER_HITDATA_IDX = FindToken(NPC_HITDATA_IDS, i, ";"); + if (!(PLAYER_HITDATA_IDX > -1)) return; + npcexp_reset_skills(PLAYER_HITDATA_IDX); + } + + void npcexp_reset_skills() + { + SetToken(NPC_HITDATA_DMG, param1, 0, ";"); + SetToken(NPC_HITDATA_IDS, param1, 0, ";"); + if (param1 == 0) + { + PLAYER_HITDATA_SKILLS_0 = NPC_HITDATA_INIT_SKILLS; + } + if (param1 == 1) + { + PLAYER_HITDATA_SKILLS_1 = NPC_HITDATA_INIT_SKILLS; + } + if (param1 == 2) + { + PLAYER_HITDATA_SKILLS_2 = NPC_HITDATA_INIT_SKILLS; + } + if (param1 == 3) + { + PLAYER_HITDATA_SKILLS_3 = NPC_HITDATA_INIT_SKILLS; + } + if (param1 == 4) + { + PLAYER_HITDATA_SKILLS_4 = NPC_HITDATA_INIT_SKILLS; + } + if (param1 == 5) + { + PLAYER_HITDATA_SKILLS_5 = NPC_HITDATA_INIT_SKILLS; + } + if (param1 == 6) + { + PLAYER_HITDATA_SKILLS_6 = NPC_HITDATA_INIT_SKILLS; + } + if (param1 == 7) + { + PLAYER_HITDATA_SKILLS_7 = NPC_HITDATA_INIT_SKILLS; + } + if (param1 == 8) + { + PLAYER_HITDATA_SKILLS_8 = NPC_HITDATA_INIT_SKILLS; + } + if (param1 == 9) + { + PLAYER_HITDATA_SKILLS_9 = NPC_HITDATA_INIT_SKILLS; + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(NPC_GIVE_EXP > 0)) return; + for (int i = 0; i < GetTokenCount(NPC_HITDATA_IDS, ";"); i++) + { + npcexp_dish_out_exp(); + } + } + + void npcexp_dish_out_exp() + { + string CUR_IDX = i; + string CUR_PLAYER = GetToken(NPC_HITDATA_IDS, CUR_IDX, ";"); + string CUR_DMG = GetToken(NPC_HITDATA_DMG, CUR_IDX, ";"); + if (CUR_IDX == 0) + { + T_SKILL_LIST = PLAYER_HITDATA_SKILLS_0; + } + if (CUR_IDX == 1) + { + T_SKILL_LIST = PLAYER_HITDATA_SKILLS_1; + } + if (CUR_IDX == 2) + { + T_SKILL_LIST = PLAYER_HITDATA_SKILLS_2; + } + if (CUR_IDX == 3) + { + T_SKILL_LIST = PLAYER_HITDATA_SKILLS_3; + } + if (CUR_IDX == 4) + { + T_SKILL_LIST = PLAYER_HITDATA_SKILLS_4; + } + if (CUR_IDX == 5) + { + T_SKILL_LIST = PLAYER_HITDATA_SKILLS_5; + } + if (CUR_IDX == 6) + { + T_SKILL_LIST = PLAYER_HITDATA_SKILLS_6; + } + if (CUR_IDX == 7) + { + T_SKILL_LIST = PLAYER_HITDATA_SKILLS_7; + } + if (CUR_IDX == 8) + { + T_SKILL_LIST = PLAYER_HITDATA_SKILLS_8; + } + if (CUR_IDX == 9) + { + T_SKILL_LIST = PLAYER_HITDATA_SKILLS_9; + } + TOTAL_XP_TO_GIVE = NPC_GIVE_EXP; + string MY_HP = GetMonsterMaxHP(); + if (CUR_DMG < MY_HP) + { + CUR_DMG /= MY_HP; + TOTAL_XP_TO_GIVE *= CUR_DMG; + } + if (CUR_DMG > MY_HP) + { + TOTAL_XP_TO_GIVE = NPC_GIVE_EXP; + } + OUT_IDX = CUR_IDX; + for (int i = 0; i < GetTokenCount(T_SKILL_LIST, ";"); i++) + { + npcexp_learn_skill(); + } + } + + void npcexp_learn_skill() + { + string THIS_PLAYER = GetToken(NPC_HITDATA_IDS, OUT_IDX, ";"); + string TOTAL_DMG = GetToken(NPC_HITDATA_DMG, OUT_IDX, ";"); + string SKILL_IDX = i; + string DMG_WITH_THIS_SKILL = GetToken(T_SKILL_LIST, SKILL_IDX, ";"); + string PERCENT_DMG_DONE_W_SKILL = DMG_WITH_THIS_SKILL; + PERCENT_DMG_DONE_W_SKILL /= TOTAL_DMG; + string SKILL_POINTS_TO_GIVE_SKILL = TOTAL_XP_TO_GIVE; + SKILL_POINTS_TO_GIVE_SKILL *= PERCENT_DMG_DONE_W_SKILL; + // TODO: UNCONVERTED: learnskill THIS_PLAYER $get_token(PLAYER_SKILLS_LIST,SKILL_IDX) SKILL_POINTS_TO_GIVE_SKILL + } + +} + +} diff --git a/scripts/angelscript/monsters/base_self_adjust.as b/scripts/angelscript/monsters/base_self_adjust.as new file mode 100644 index 00000000..2fce018f --- /dev/null +++ b/scripts/angelscript/monsters/base_self_adjust.as @@ -0,0 +1,659 @@ +#pragma context server + +namespace MS +{ + +class BaseSelfAdjust : CGameScript +{ + string BASE_FRAMERATE; + string BASE_MOVESPEED; + string NEW_NAME; + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + int NPC_ADJ_LEVEL; + string NPC_ADJ_TIERS; + int NPC_ALL_XP_ADJ; + string NPC_CUSTOM_NAME; + string NPC_CUSTOM_NAME_STRING; + string NPC_DMG_MULTI; + string NPC_DO_EVENTS; + int NPC_EVENT_COUNTER; + string NPC_EXP_FINAL; + string NPC_GIVE_EXP; + int NPC_HP_MULTI; + string NPC_MAXHP; + + BaseSelfAdjust() + { + NPC_ADJ_TIERS = "0;500;1000;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;2.0;3.0;3.5;4.0;5.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;2.0;3.0;3.5;4.0;5.0;"; + } + + void game_postspawn() + { + string L_IN_DMGMULTI = param2; + string L_IN_HPMULTI = param3; + LogDebug("game_postspawn got name PARAM1 dmg PARAM2 hp PARAM3 PARAMS: PARAM4"); + NEW_NAME = param1; + if (NEW_NAME != "default") + { + SetName(NEW_NAME); + NPC_CUSTOM_NAME = 1; + NPC_CUSTOM_NAME_STRING = NEW_NAME; + } + if (NPC_DMG_MULTI == "NPC_DMG_MULTI") + { + NPC_DMG_MULTI = 1; + } + if (L_IN_DMGMULTI > 1) + { + NPC_DMG_MULTI = L_IN_DMGMULTI; + if (NPC_DMG_MULTI_ADD > 0) + { + NPC_DMG_MULTI += NPC_DMG_MULTI_ADD; + } + SetDamageMultiplier(NPC_DMG_MULTI); + int CREAT_ADJ = 1; + } + NPC_HP_MULTI = 1; + if (L_IN_HPMULTI > 1) + { + NPC_HP_MULTI = L_IN_HPMULTI; + if (NPC_HP_MULTI_ADD > 0) + { + NPC_HP_MULTI += NPC_HP_MULTI_ADD; + } + int CREAT_ADJ = 1; + } + if (param4 != "none") + { + NPC_DO_EVENTS = param4; + ScheduleDelayedEvent(0.01, "npcatk_setup_addparams"); + } + } + + void game_dynamically_created() + { + if (G_MAP_ADDPARAMS != 0) + { + npcatk_setup_addparams(); + } + if (!(param1 == "events")) return; + NPC_DO_EVENTS = param2; + ScheduleDelayedEvent(0.01, "npcatk_setup_addparams"); + } + + void npcatk_setup_addparams() + { + LogDebug("npcatk_setup_addparams [ NPC_DO_EVENTS ]"); + if (G_MAP_ADDPARAMS != 0) + { + if ((NPC_DO_EVENTS).findFirst("no_global") >= 0) + { + } + if (!(I_R_PET)) + { + } + string L_NPC_DO_EVENTS = G_MAP_ADDPARAMS; + L_NPC_DO_EVENTS += NPC_DO_EVENTS; + NPC_DO_EVENTS = L_NPC_DO_EVENTS; + LogDebug("npcatk_setup_addparams gaddparamsout NPC_DO_EVENTS"); + } + NPC_EVENT_COUNTER = 0; + npcatk_do_events(); + } + + void npcatk_do_events() + { + string L_N_EVENTS = GetTokenCount(NPC_DO_EVENTS, ";"); + L_N_EVENTS -= 1; + LogDebug("npcatk_do_events checking int((NPC_EVENT_COUNTER + 1)) / int((L_N_EVENTS + 1))"); + string L_EVENT_NAME = GetToken(NPC_DO_EVENTS, NPC_EVENT_COUNTER, ";"); + string L_NEXT_EVENT_IDX = (NPC_EVENT_COUNTER + 1); + if (L_NEXT_EVENT_IDX <= L_N_EVENTS) + { + string L_NEXT_EVENT = GetToken(NPC_DO_EVENTS, L_NEXT_EVENT_IDX, ";"); + if (!("npcatk_do_events_isnum"(L_EVENT_NAME))) + { + } + LogDebug("npcatk_do_events int((NPC_EVENT_COUNTER + 1)) / int((L_N_EVENTS + 1)) = L_EVENT_NAME L_NEXT_EVENT"); + L_EVENT_NAME(L_NEXT_EVENT); + } + else + { + if (!("npcatk_do_events_isnum"(L_EVENT_NAME))) + { + } + LogDebug("npcatk_do_events int((NPC_EVENT_COUNTER + 1)) / int((L_N_EVENTS + 1)) = L_EVENT_NAME"); + L_EVENT_NAME(); + } + if (NPC_EVENT_COUNTER < L_N_EVENTS) + { + NPC_EVENT_COUNTER += 1; + ScheduleDelayedEvent(0.01, "npcatk_do_events"); + } + else + { + if ((NPC_USES_HANDLE_EVENTS)) + { + npcatk_handle_postevents(); + } + } + } + + void npcatk_do_events_isnum() + { + string L_FIRST_CHAR = (param1).substr(0, 1); + int L_IS_NUM = 0; + string L_NUMCHARS = "0123456789.,)($"; + if ((L_NUMCHARS).findFirst(L_FIRST_CHAR) > -1) + { + LogDebug("npcatk_do_events_isnum PARAM1 seems to be a parameter , skipping"); + int L_IS_NUM = 1; + } + return; + } + + void OnPostSpawn() override + { + if ((I_R_PET)) return; + if ((NPC_SELF_ADJUST)) + { + npcatk_self_adjust(); + } + npcatk_set_skill(); + LogDebug("npc_post_spawn Final Adjustments - mdmg NPC_DMG_MULTI mhp NPC_HP_MULTI xp NPC_GIVE_EXP"); + NPC_MAXHP = GetMonsterMaxHP(); + if (NPC_HP_MULTI > 0) + { + NPC_MAXHP *= NPC_HP_MULTI; + SetHealth(NPC_MAXHP); + } + if (BASE_FRAMERATE == "BASE_FRAMERATE") + { + BASE_FRAMERATE = 1.0; + } + if (BASE_MOVESPEED == "BASE_MOVESPEED") + { + BASE_MOVESPEED = 1.0; + } + if ((NPC_CUSTOM_NAME)) + { + if ((GetEntityName(GetOwner())).findFirst(NPC_CUSTOM_NAME_STRING) >= 0) + { + int GOT_NAME = 1; + } + if (!(GOT_NAME)) + { + SetName(NPC_CUSTOM_NAME_STRING); + LogDebug("npc_post_spawn NPC_CUSTOM_NAME_STRING"); + } + } + if (NPC_ADJ_LEVEL > 0) + { + if (NPC_ADJ_LEVEL == 1) + { + string ADD_STR = " II"; + } + if (NPC_ADJ_LEVEL == 2) + { + string ADD_STR = " III"; + } + if (NPC_ADJ_LEVEL == 3) + { + string ADD_STR = " IV"; + } + if (NPC_ADJ_LEVEL == 4) + { + string ADD_STR = " V"; + } + if (NPC_ADJ_LEVEL == 5) + { + string ADD_STR = " VI"; + } + string L_NEW_NAME = GetEntityProperty(GetOwner(), "name.prefix"); + L_NEW_NAME += "|"; + L_NEW_NAME += GetEntityName(GetOwner()); + L_NEW_NAME += ADD_STR; + SetName(L_NEW_NAME); + } + } + + void npcatk_self_adjust() + { + string L_TOTAL_HP = "game.players.totalhp"; + NPC_ADJ_LEVEL = 0; + if (L_TOTAL_HP > GetToken(NPC_ADJ_TIERS, 1, ";")) + { + NPC_ADJ_LEVEL = 1; + } + if (L_TOTAL_HP > GetToken(NPC_ADJ_TIERS, 2, ";")) + { + NPC_ADJ_LEVEL = 2; + } + if (L_TOTAL_HP > GetToken(NPC_ADJ_TIERS, 3, ";")) + { + NPC_ADJ_LEVEL = 3; + } + if (L_TOTAL_HP > GetToken(NPC_ADJ_TIERS, 4, ";")) + { + NPC_ADJ_LEVEL = 4; + } + if (L_TOTAL_HP > GetToken(NPC_ADJ_TIERS, 5, ";")) + { + NPC_ADJ_LEVEL = 5; + } + if (NPC_ADJ_DOWN > 0) + { + NPC_ADJ_LEVEL -= NPC_ADJ_DOWN; + if (NPC_ADJ_LEVEL < 0) + { + NPC_ADJ_LEVEL = 0; + } + } + string ADD_NPC_HP_MULTI = GetToken(NPC_ADJ_HP_MUTLI_TOKENS, NPC_ADJ_LEVEL, ";"); + if (NPC_HP_MULTI == 1) + { + ADD_NPC_HP_MULTI -= 1; + } + NPC_HP_MULTI += ADD_NPC_HP_MULTI; + string ADD_NPC_DMG_MULTI = GetToken(NPC_ADJ_DMG_MUTLI_TOKENS, NPC_ADJ_LEVEL, ";"); + if (NPC_DMG_MULTI == 1) + { + ADD_NPC_DMG_MULTI -= 1; + } + NPC_DMG_MULTI += ADD_NPC_DMG_MULTI; + SetDamageMultiplier(NPC_DMG_MULTI); + string ORG_EXP = NPC_GIVE_EXP; + if (NPC_ADJ_EXPS != "NPC_ADJ_EXPS") + { + NPC_GIVE_EXP = GetToken(NPC_ADJ_EXPS, NPC_ADJ_LEVEL, ";"); + } + if (NPC_GIVE_EXP == 0) + { + if (ORG_EXP > 0) + { + NPC_GIVE_EXP = ORG_EXP; + } + } + LogDebug("npcatk_self_adjust NPC_ADJ_LEVEL"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((NPC_SELF_ADJUST)) + { + if (!(NPC_NO_COUNT)) + { + } + if (!(NPC_SELF_ADJUST_NOAVG)) + { + } + G_SADJ_DEATHS += 1; + string F_NPC_ADJ_LEVEL = NPC_ADJ_LEVEL; + F_NPC_ADJ_LEVEL += 1; + if (NPC_ADJ_DOWN > 0) + { + F_NPC_ADJ_LEVEL += 1; + F_NPC_ADJ_LEVEL += NPC_ADJ_DOWN; + } + G_SADJ_LEVELS += F_NPC_ADJ_LEVEL; + LogDebug("SelfAdj_Count: kills G_SADJ_DEATHS levels G_SADJ_LEVELS"); + if ((G_DEVELOPER_MODE)) + { + string TOTAL_KILLS = G_SADJ_DEATHS; + string TOTAL_LEVELS = G_SADJ_LEVELS; + string AVG_LEVELS = TOTAL_LEVELS; + AVG_LEVELS /= TOTAL_KILLS; + string OUT_TITLE = "+"; + OUT_TITLE += F_NPC_ADJ_LEVEL; + string OUT_MSG = "Average="; + OUT_MSG += AVG_LEVELS; + SendInfoMsg("all", OUT_TITLE + OUT_MSG); + } + } + if (G_TRACK_HP > 0) + { + if (!(NPC_SELF_ADJUST_NOAVG)) + { + } + if (!(I_R_PET)) + { + } + G_TRACK_HP += "game.players.totalhp"; + G_TRACK_KILLS += 1; + } + if (!(G_TRACK_DEATHS > 0)) return; + if ((AM_SUMMONED)) return; + if ((I_R_PET)) return; + if ((NPC_NO_COUNT)) return; + if ((GetScriptName(GetOwner())).findFirst("summon") >= 0) + { + int EXIT_SUB = 1; + } + if ((GetScriptName(GetOwner())).findFirst("companion") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + G_TRACK_DEATHS += 1; + if (G_TRACK_DEATHS >= G_TRACK_DEATHS_TRIGGER) + { + if (G_TRACK_DEATHS_EVENT != "none") + { + } + CallExternal(GAME_MASTER, "G_TRACK_DEATHS_EVENT"); + SetGlobalVar("G_TRACK_DEATHS_EVENT", "none"); + } + } + + void npcatk_set_skill() + { + if (!(true)) return; + if (NPC_BASE_EXP != "NPC_BASE_EXP") + { + NPC_GIVE_EXP = NPC_BASE_EXP; + } + if (NPC_GIVE_EXP == "NPC_GIVE_EXP") + { + NPC_GIVE_EXP = GetXP(GetOwner()); + } + if (NPC_EXP_MULTI != "NPC_EXP_MULTI") + { + NPC_GIVE_EXP *= NPC_EXP_MULTI; + } + if (GetXP(GetOwner()) == 0) + { + LogDebug("npcatk_set_skill xp wasn't set, using NPC_GIVE_EXP"); + SetSkillLevel(NPC_GIVE_EXP); + } + else + { + LogDebug("npcatk_set_skill NPC_GIVE_EXP was not set , using GetXP(GetOwner())"); + NPC_GIVE_EXP = GetXP(GetOwner()); + } + if (!(NPC_GIVE_EXP > 0)) return; + NPC_ALL_XP_ADJ = 1; + if (NPC_DMG_MULTI >= NPC_HP_MULTI) + { + string L_ADJ_RATIO = NPC_HP_MULTI; + L_ADJ_RATIO /= NPC_DMG_MULTI; + } + else + { + string L_ADJ_RATIO = NPC_DMG_MULTI; + ADJ_RATIO /= NPC_HP_MULTI; + } + if (L_ADJ_RATIO < 0.25) + { + int L_OVER_ADJUST = 1; + } + if (StringToLower(GetMapName()) == "undercliffs") + { + int L_OVER_ADJUST = 0; + } + if ((L_OVER_ADJUST)) + { + string MSG_TITLE = "MAP ERROR: "; + MSG_TITLE += GetEntityName(GetOwner()); + SendInfoMsg("all", MSG_TITLE + " HP/DMG multipliers cannot be more than 4x one another, or XP will not be adjusted"); + } + if (!(L_OVER_ADJUST)) + { + if (NPC_DMG_MULTI > 1) + { + string L_ADJ = NPC_DMG_MULTI; + if (L_ADJ > 5) + { + int L_ADJ = 5; + } + L_ADJ -= 1; + L_ADJ *= 0.5; + L_ADJ += 1; + string L_DEBUG = "dmgmulti:"; + L_DEBUG += NPC_DMG_MULTI; + LogDebug("expadj L_ADJ noscale L_DEBUG"); + NPC_ALL_XP_ADJ += L_ADJ; + } + if (NPC_HP_MULTI > 1) + { + string L_ADJ = NPC_HP_MULTI; + if (L_ADJ > 5) + { + int L_ADJ = 5; + } + L_ADJ -= 1; + L_ADJ *= 0.5; + L_ADJ += 1; + string L_DEBUG = "hpmulti:"; + L_DEBUG += NPC_HP_MULTI; + LogDebug("expadj L_ADJ noscale L_DEBUG"); + NPC_ALL_XP_ADJ += L_ADJ; + } + } + if (NPC_ADJ_FLAGS != "NPC_ADJ_FLAGS") + { + if ((NPC_ADJ_FLAGS).findFirst("telehunt") >= 0) + { + int L_ADJ = 0; + if (NPC_TELEHUNT_FREQ > 30) + { + L_ADJ += 1.5; + } + else + { + if (NPC_TELEHUNT_FREQ >= 20) + { + L_ADJ += 2.0; + } + else + { + if (EXT_DEMON_BLOOD_RATIO >= 10) + { + L_ADJ += 2.25; + } + else + { + if (NPC_TELEHUNT_FREQ >= 6) + { + L_ADJ += 2.5; + } + else + { + if (NPC_TELEHUNT_FREQ >= 0) + { + L_ADJ += 3.0; + } + } + } + } + } + LogDebug("expadj L_ADJ noscale telehunt"); + NPC_ALL_XP_ADJ += L_ADJ; + } + int L_ADJ = 0; + if ((NPC_ADJ_FLAGS).findFirst("speed_x2") >= 0) + { + L_ADJ += 1.5; + } + if ((NPC_ADJ_FLAGS).findFirst("speed_x3") >= 0) + { + L_ADJ += 1.75; + } + if ((NPC_ADJ_FLAGS).findFirst("speed_x4") >= 0) + { + L_ADJ += 2.0; + } + if (L_ADJ > 0) + { + LogDebug("expadj 2.0 noscale speed_xX"); + } + NPC_ALL_XP_ADJ += L_ADJ; + if ((NPC_ADJ_FLAGS).findFirst("demon_blood") >= 0) + { + int L_ADJ = 0; + if (EXT_DEMON_BLOOD_RATIO > 1) + { + } + int L_MAX_SCALE = 5; + string L_IN_SCALE = EXT_DEMON_BLOOD_RATIO; + if (L_IN_SCALE > 5) + { + int L_IN_SCALE = 5; + } + L_IN_SCALE /= L_MAX_SCALE; + string L_DEBUG = "demon_blood:"; + L_DEBUG += EXT_DEMON_BLOOD_RATIO; + LogDebug("expadj /* TODO: $ratio */ $ratio(L_IN_SCALE, 1.1, 2.0) noscale L_DEBUG"); + L_ADJ += /* TODO: $ratio */ $ratio(L_IN_SCALE, 1.1, 2.0); + NPC_ALL_XP_ADJ += L_ADJ; + } + if ((NPC_ADJ_FLAGS).findFirst("mspeed") >= 0) + { + if (NPC_MOVE_SPEED_ADJ > 1) + { + int L_ADJ = 0; + float L_TO_ADD = 0.25; + string L_TIMES_TO_ADD = NPC_MOVE_SPEED_ADJ; + L_TO_ADD *= L_TIMES_TO_ADD; + L_TO_ADD = max(0.25, min(2, L_TO_ADD)); + L_TO_ADD += 1; + LogDebug("expadj L_TO_ADD noscale mspeed+"); + L_ADJ += L_TO_ADD; + NPC_ALL_XP_ADJ += L_ADJ; + } + if (NPC_MOVE_SPEED_ADJ < 1) + { + int L_ADJ = 0; + if (NPC_MOVE_SPEED_ADJ >= 0.75) + { + L_ADJ -= 0.25; + } + else + { + if (NPC_MOVE_SPEED_ADJ >= 0.5) + { + L_ADJ -= 0.5; + } + else + { + if (NPC_MOVE_SPEED_ADJ >= 0.25) + { + L_ADJ -= 0.75; + } + else + { + if (NPC_MOVE_SPEED_ADJ < 0.25) + { + L_ADJ -= 0.9; + } + } + } + } + LogDebug("expadj L_ADJ noscale mspeed-"); + NPC_ALL_XP_ADJ += L_ADJ; + } + } + } + if ((NPC_DOT_POISON)) + { + float L_TOTAL_MULTI_TO_ADD = 0.25; + L_TOTAL_MULTI_TO_ADD *= NPC_DOT_POISON_RATIO; + L_TOTAL_MULTI_TO_ADD += 1; + LogDebug("expadj L_TOTAL_MULTI_TO_ADD noscale NPC_DOT_POISON"); + NPC_ALL_XP_ADJ += L_TOTAL_MULTI_TO_ADD; + } + if ((NPC_DOT_FIRE)) + { + float L_TOTAL_MULTI_TO_ADD = 0.25; + L_TOTAL_MULTI_TO_ADD *= NPC_DOT_FIRE_RATIO; + L_TOTAL_MULTI_TO_ADD += 1; + LogDebug("expadj L_TOTAL_MULTI_TO_ADD noscale NPC_DOT_FIRE"); + NPC_ALL_XP_ADJ += L_TOTAL_MULTI_TO_ADD; + } + if ((NPC_DOT_COLD)) + { + float L_TOTAL_MULTI_TO_ADD = 0.25; + L_TOTAL_MULTI_TO_ADD *= NPC_DOT_COLD_RATIO; + L_TOTAL_MULTI_TO_ADD += 1; + LogDebug("expadj L_TOTAL_MULTI_TO_ADD noscale NPC_DOT_COLD"); + NPC_ALL_XP_ADJ += L_TOTAL_MULTI_TO_ADD; + } + if ((NPC_DOT_LIGHTNING)) + { + float L_TOTAL_MULTI_TO_ADD = 0.25; + L_TOTAL_MULTI_TO_ADD *= NPC_DOT_LIGHTNING_RATIO; + L_TOTAL_MULTI_TO_ADD += 1; + LogDebug("expadj L_TOTAL_MULTI_TO_ADD noscale NPC_DOT_LIGHTNING"); + NPC_ALL_XP_ADJ += L_TOTAL_MULTI_TO_ADD; + } + if (NPC_BONUS_XP_RATIO != "NPC_BONUS_XP_RATIO") + { + NPC_ALL_XP_ADJ += NPC_BONUS_XP_RATO; + } + if (!(NO_EXP_MULTI)) + { + AdjustExp(NPC_ALL_XP_ADJ); + } + if (NPC_EXP_REDUCT != "NPC_EXP_REDUCT") + { + AdjustExp(NPC_EXP_REDUCT); + } + if (G_EXP_MULTI != "G_EXP_MULTI") + { + if (G_EXP_MULTI != 1) + { + } + AdjustExp(G_EXP_MULTI); + } + if ((NO_EXP_MULTI)) + { + LogDebug("expadj No XP Multi Allowed , resetting."); + SetSkillLevel(NPC_ORIG_EXP); + if (NPC_EXP_REDUCT != "NPC_EXP_REDUCT") + { + AdjustExp(NPC_EXP_REDUCT); + } + } + LogDebug("expadj [PRE-FN] GetXP(GetOwner())"); + if (("game.central")) + { + AdjustExp(2.0); + string L_N_PLAYER_ADJ = "game.playersnb.noafk"; + string L_DEBUG = "FN+Players>1:"; + L_DEBUG += L_N_PLAYER_ADJ; + if ((NPC_IS_BOSS)) + { + AdjustExp(4.0); + } + if (L_N_PLAYER_ADJ > 1) + { + } + L_N_PLAYER_ADJ -= 1; + L_N_PLAYER_ADJ *= 0.5; + L_N_PLAYER_ADJ += 1; + AdjustExp(L_N_PLAYER_ADJ); + } + NPC_GIVE_EXP = GetXP(GetOwner()); + NPC_EXP_FINAL = NPC_GIVE_EXP; + if (("game.central")) + { + if (NPC_GIVE_EXP != 0) + { + } + if (NPC_ORIG_EXP != "NPC_ORIG_EXP") + { + } + string L_TOTAL_XP_ADJ = NPC_GIVE_EXP; + L_TOTAL_XP_ADJ /= NPC_ORIG_EXP; + if (DROP_GOLD_AMT != "DROP_GOLD_AMT") + { + DROP_GOLD_AMT *= L_TOTAL_XP_ADJ; + } + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_stripped_ai.as b/scripts/angelscript/monsters/base_stripped_ai.as new file mode 100644 index 00000000..8c888791 --- /dev/null +++ b/scripts/angelscript/monsters/base_stripped_ai.as @@ -0,0 +1,132 @@ +#pragma context server + +#include "monsters/base_self_adjust.as" +#include "monsters/externals.as" + +namespace MS +{ + +class BaseStrippedAi : CGameScript +{ + string IN_ICECAGE; + int NPC_DID_DEATH; + string NPC_GAVE_XP_MSG; + + void OnSpawn() override + { + if ((HAS_INCLUDE_NPC)) return; + ScheduleDelayedEvent(1.0, "npc_post_spawn"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((NPC_DID_DEATH)) return; + NPC_DID_DEATH = 1; + if ((true)) + { + if ((G_APRIL_FOOLS_MODE)) + { + CallExternal(GAME_MASTER, "gm_april_fools_spawn_add", GetEntityOrigin(GetOwner())); + } + if ((NPC_SUMMON)) + { + G_NPC_SUMMON_COUNT -= 1; + if (G_NPC_SUMMON_COUNT < 0) + { + SetGlobalVar("G_NPC_SUMMON_COUNT", 0); + } + LogDebug("game_death_summoned G_NPC_SUMMON_COUNT"); + } + } + if (!(NPC_NO_END_FLY)) + { + SetFly(false); + } + if ((GOLD_BAGS)) + { + if (!(NPC_NO_DROPS)) + { + } + bm_gold_spew(GOLD_PER_BAG, GOLD_BAGS_PPLAYER, GOLD_RADIUS, GOLD_BAGS_PPLAYER, GOLD_MAX_BAGS); + } + if (DROPS_CONTAINER == 1) + { + if (!(G_NO_DROP)) + { + } + if (RandomInt(1, 100) <= CONTAINER_DROP_CHANCE) + { + SpawnNPC(CONTAINER_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: CONTAINER_PARAM1, CONTAINER_PARAM2, CONTAINER_PARAM3, CONTAINER_PARAM4 + } + } + if ((EXT_FADE_ON_DEATH)) + { + if (GetMonsterMaxHP() < 1000) + { + } + if (!(NPC_NEVER_FADE)) + { + } + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner())); + } + SetAnimFrameRate(BASE_FRAMERATE); + SetAnimMoveSpeed(BASE_MOVESPEED); + if ((IN_ICECAGE)) + { + ClientEvent("update", "all", SCRIPT_ICECAGE, "end_cage_fx"); + IN_ICECAGE = 0; + } + if ((NPC_CRITICAL)) + { + string INFO_TITLE = "A CRITICAL NPC HAS DIED!"; + string INFO_MSG = GetEntityName(GetOwner()); + INFO_MSG += " has been slain! "; + SendInfoMsg("all", INFO_TITLE + INFO_MSG); + CallExternal(GAME_MASTER, "gm_crit_npc_died", GetEntityIndex(GetOwner()), GetEntityIndex(m_hLastStruck)); + } + npc_death(); + if ((NPC_AUTO_DEATH)) + { + SetMenuAutoOpen(0); + if (!(NPC_ALERTED_ALL)) + { + if ((HAS_AI)) + { + } + npcatk_alert_all_allies(GetEntityIndex(m_hLastStruck)); + } + if (!(NPC_SILENT_DEATH)) + { + if (NPC_ALT_SOUND_DEATH == "NPC_ALT_SOUND_DEATH") + { + EmitSound(GetOwner(), 0, SOUND_DEATH, 5); + } + else + { + EmitSound(GetOwner(), 0, NPC_ALT_SOUND_DEATH, 5); + } + } + PlayAnim("critical", ANIM_DEATH); + if ((CHEAT_MAP)) + { + DeleteEntity(GetOwner(), true); // fade out + } + if (!(NPC_GAVE_XP_MSG)) + { + } + NPC_GAVE_XP_MSG = 1; + string MON_FULL = GetMonsterProperty("name.full"); + string OUT_MSG = "You've slain "; + OUT_MSG += MON_FULL; + if (NPC_DEATH_MSG != "unset") + { + string OUT_MSG = NPC_DEATH_MSG; + } + SendColoredMessage(GetEntityIndex(m_hLastStruck), OUT_MSG); + } + ClearFX(); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_struck.as b/scripts/angelscript/monsters/base_struck.as new file mode 100644 index 00000000..a3d10420 --- /dev/null +++ b/scripts/angelscript/monsters/base_struck.as @@ -0,0 +1,453 @@ +#pragma context server + +namespace MS +{ + +class BaseStruck : CGameScript +{ + string BS_SOUND_STRUCK1; + string BS_SOUND_STRUCK2; + string BS_SOUND_STRUCK3; + float NPC_ATN_FLINCH; + float NPC_ATN_IDLE; + float NPC_ATN_PAIN; + float NPC_ATN_STRUCK; + string NPC_BS_HALF_HEALTH; + string NPC_CUR_MATERIAL_TYPE; + int NPC_FLINCH_ALLOW_SUSPEND_AI; + int NPC_FLINCH_ALLOW_SUSPEND_MOVEMENT; + float NPC_FLINCH_THRESH; + float NPC_FLINCH_TIME; + float NPC_FREQ_FLINCH; + float NPC_FREQ_IDLE; + float NPC_FREQ_PAIN; + string NPC_MATERIAL_TYPE; + string NPC_NEXT_IDLE; + string NPC_NEXT_PAIN; + string NPC_PAIN_LEVEL; + int NPC_PITCH_FLINCH; + int NPC_PITCH_IDLE; + int NPC_PITCH_PAIN; + int NPC_PITCH_STRUCK; + int NPC_STRUCK_CHANNEL; + int NPC_STRUCK_SOUND_EVENT; + int NPC_STRUCK_VOL; + int NPC_USE_FLINCH; + int NPC_USE_IDLE; + int NPC_USE_PAIN; + + BaseStruck() + { + NPC_MATERIAL_TYPE = "default"; + NPC_STRUCK_VOL = 10; + NPC_STRUCK_CHANNEL = 2; + NPC_PITCH_STRUCK = 100; + NPC_ATN_STRUCK = 0.8; + NPC_STRUCK_SOUND_EVENT = 0; + NPC_USE_PAIN = 0; + NPC_FREQ_PAIN = Random(5.0, 10.0); + NPC_PITCH_PAIN = 100; + NPC_ATN_PAIN = 0.8; + NPC_FLINCH_ALLOW_SUSPEND_AI = 0; + NPC_FLINCH_ALLOW_SUSPEND_MOVEMENT = 0; + NPC_USE_FLINCH = 0; + NPC_FREQ_FLINCH = 30.0; + NPC_FLINCH_THRESH = 0.1; + NPC_FLINCH_TIME = 1.5; + NPC_PITCH_FLINCH = 100; + NPC_ATN_FLINCH = 0.8; + NPC_USE_IDLE = 0; + NPC_FREQ_IDLE = Random(10.0, 20.0); + NPC_PITCH_IDLE = 100; + NPC_ATN_IDLE = 0.8; + BS_SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + BS_SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + BS_SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + } + + void OnSpawn() override + { + ScheduleDelayedEvent(0.5, "set_material"); + } + + void set_material() + { + NPC_BS_HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + NPC_BS_HALF_HEALTH *= 0.5; + NPC_PAIN_LEVEL = ""; + if ((param1).findFirst(PARAM) == 0) + { + NPC_CUR_MATERIAL_TYPE = NPC_MATERIAL_TYPE; + } + else + { + NPC_CUR_MATERIAL_TYPE = param1; + } + if (SOUND_STRUCK1 != "SOUND_STRUCK1") + { + BS_SOUND_STRUCK1 = SOUND_STRUCK1; + BS_SOUND_STRUCK2 = SOUND_STRUCK2; + BS_SOUND_STRUCK3 = SOUND_STRUCK3; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (NPC_CUR_MATERIAL_TYPE == "default") + { + BS_SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + BS_SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + BS_SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "flesh") + { + BS_SOUND_STRUCK1 = "body/flesh1.wav"; + BS_SOUND_STRUCK2 = "body/flesh2.wav"; + BS_SOUND_STRUCK3 = "body/flesh3.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "stone") + { + BS_SOUND_STRUCK1 = "weapons/axemetal1.wav"; + BS_SOUND_STRUCK2 = "weapons/axemetal2.wav"; + BS_SOUND_STRUCK3 = "debris/concrete1.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "metal") + { + BS_SOUND_STRUCK1 = "doors/doorstop5.wav"; + BS_SOUND_STRUCK2 = "weapons/axemetal2.wav"; + BS_SOUND_STRUCK3 = "weapons/axemetal1.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "glass") + { + const string SOUND_STRUCK = "debris/glass1.wav"; + const string SOUND_PAIN = "debris/glass2.wav"; + const string SOUND_PAIN2 = "debris/glass3.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "bloat") + { + BS_SOUND_STRUCK1 = "debris/flesh2.wav"; + BS_SOUND_STRUCK2 = "debris/flesh5.wav"; + BS_SOUND_STRUCK3 = "debris/flesh7.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "plant") + { + BS_SOUND_STRUCK1 = "weapons/xbow_hitbod1.wav"; + BS_SOUND_STRUCK2 = "weapons/xbow_hitbod2.wav"; + BS_SOUND_STRUCK3 = "weapons/bustflesh2.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "bullet") + { + BS_SOUND_STRUCK1 = "weapons/ric1.wav"; + BS_SOUND_STRUCK2 = "weapons/ric2.wav"; + BS_SOUND_STRUCK3 = "weapons/ric3.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "carapace") + { + BS_SOUND_STRUCK1 = "weapons/bustflesh1.wav"; + BS_SOUND_STRUCK2 = "weapons/bullet_hit2.wav"; + BS_SOUND_STRUCK3 = "weapons/cbar_hitbod1.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "wood") + { + BS_SOUND_STRUCK1 = "debris/wood2.wav"; + BS_SOUND_STRUCK2 = "debris/wood3.wav"; + BS_SOUND_STRUCK3 = "debris/wood1.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "electric") + { + BS_SOUND_STRUCK1 = "debris/zap1.wav"; + BS_SOUND_STRUCK2 = "debris/zap3.wav"; + BS_SOUND_STRUCK3 = "debris/zap8.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "bone") + { + BS_SOUND_STRUCK1 = "monsters/undeadz/c_skeleton_hit1.wav"; + BS_SOUND_STRUCK2 = "monsters/undeadz/c_skeleton_hit2.wav"; + BS_SOUND_STRUCK3 = "monsters/undeadz/c_hookhorr_hit1.wav"; + } + else + { + if (NPC_CUR_MATERIAL_TYPE == "bone_large") + { + BS_SOUND_STRUCK1 = "monsters/undeadz/c_golmbone_hit1.wav"; + BS_SOUND_STRUCK2 = "monsters/undeadz/c_golmbone_slct.wav"; + BS_SOUND_STRUCK3 = "monsters/undeadz/c_shadow_hit1.wav"; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + + void OnDamage(int damage) override + { + if (!(IsEntityAlive(GetOwner()))) return; + string MY_HP = GetEntityHealth(GetOwner()); + MY_HP -= param2; + if (!(MY_HP > 0)) return; + LogDebug("$currentscript uf NPC_USE_FLINCH thr NPC_FLINCH_THRESH"); + if ((NPC_USE_FLINCH)) + { + if (!(NPC_FLINCH_DISABLE)) + { + } + if (GetGameTime() > NPC_NEXT_FLINCH) + { + } + string L_MIN_DMG = GetEntityHealth(GetOwner()); + L_MIN_DMG *= NPC_FLINCH_THRESH; + if (param2 > L_MIN_DMG) + { + int L_CAN_FLINCH = 1; + } + if (/* TODO: $get_takedmg */ $get_takedmg(GetOwner(), param3) >= 2) + { + int L_CAN_FLINCH = 1; + } + if ((SUSPEND_AI)) + { + if (!(NPC_FLINCH_ALLOW_SUSPEND_AI)) + { + } + int L_CAN_FLINCH = 0; + } + if ((NPC_MOVEMENT_SUSPENDED)) + { + if (!(NPC_FLINCH_ALLOW_SUSPEND_MOVEMENT)) + { + } + int L_CAN_FLINCH = 0; + } + LogDebug("$currentscript flinch_check result L_CAN_FLINCH"); + if ((L_CAN_FLINCH)) + { + } + npc_flinch(); + if (!(NPC_FLINCH_DISABLE_ONCE)) + { + PlayAnim("critical", ANIM_FLINCH); + int L_RND_SOUND = RandomInt(1, 3); + if (NPC_STRUCK_SOUND_EVENT == 0) + { + if (L_RND_SOUND == 1) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, SOUND_FLINCH1, NPC_STRUCK_VOL); + } + else + { + if (L_RND_SOUND == 2) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, SOUND_FLINCH2, NPC_STRUCK_VOL); + } + else + { + if (L_RND_SOUND == 3) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, SOUND_FLINCH3, NPC_STRUCK_VOL); + } + } + } + } + else + { + if (L_RND_SOUND == 1) + { + NPC_STRUCK_SOUND_EVENT(NPC_STRUCK_CHANNEL, NPC_STRUCK_VOL, SOUND_FLINCH1, NPC_ATN_STRUCK, NPC_PITCH_STRUCK); + } + else + { + if (L_RND_SOUND == 2) + { + NPC_STRUCK_SOUND_EVENT(NPC_STRUCK_CHANNEL, NPC_STRUCK_VOL, SOUND_FLINCH2, NPC_ATN_STRUCK, NPC_PITCH_STRUCK); + } + else + { + if (L_RND_SOUND == 3) + { + NPC_STRUCK_SOUND_EVENT(NPC_STRUCK_CHANNEL, NPC_STRUCK_VOL, SOUND_FLINCH3, NPC_ATN_STRUCK, NPC_PITCH_STRUCK); + } + } + } + } + NPC_NEXT_FLINCH = GetGameTime(); + NPC_NEXT_FLINCH += NPC_FREQ_FLINCH; + if (NPC_FLINCH_TIME > 0) + { + npcatk_suspend_ai(NPC_FLINCH_TIME); + } + int EXIT_SUB = 1; + } + else + { + NPC_FLINCH_DISABLE_ONCE = 0; + } + } + if ((EXIT_SUB)) return; + npc_bs_struck(GetEntityIndex(param1)); + if ((NPC_USE_PAIN)) + { + if (!(NPC_PAIN_DISABLE)) + { + } + LogDebug("$currentscript use pain if GetEntityHealth(GetOwner()) < NPC_BS_HALF_HEALTH"); + if (GetEntityHealth(GetOwner()) < NPC_BS_HALF_HEALTH) + { + } + if (GetGameTime() > NPC_NEXT_PAIN) + { + int L_CAN_PAIN = 1; + } + if (/* TODO: $get_takedmg */ $get_takedmg(GetOwner(), param3) >= 3) + { + int L_CAN_PAIN = 1; + } + if ((L_CAN_PAIN)) + { + } + NPC_NEXT_PAIN = GetGameTime(); + NPC_NEXT_PAIN += NPC_FREQ_PAIN; + int L_RND_SOUND = RandomInt(1, 3); + if (NPC_STRUCK_SOUND_EVENT == 0) + { + if (L_RND_SOUND == 1) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, SOUND_PAIN1, NPC_STRUCK_VOL); + } + else + { + if (L_RND_SOUND == 2) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, SOUND_PAIN2, NPC_STRUCK_VOL); + } + else + { + if (L_RND_SOUND == 3) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, SOUND_PAIN3, NPC_STRUCK_VOL); + } + } + } + } + else + { + if (L_RND_SOUND == 1) + { + NPC_STRUCK_SOUND_EVENT(NPC_STRUCK_CHANNEL, NPC_STRUCK_VOL, SOUND_PAIN1, NPC_ATN_STRUCK, NPC_PITCH_STRUCK); + } + else + { + if (L_RND_SOUND == 2) + { + NPC_STRUCK_SOUND_EVENT(NPC_STRUCK_CHANNEL, NPC_STRUCK_VOL, SOUND_PAIN2, NPC_ATN_STRUCK, NPC_PITCH_STRUCK); + } + else + { + if (L_RND_SOUND == 3) + { + NPC_STRUCK_SOUND_EVENT(NPC_STRUCK_CHANNEL, NPC_STRUCK_VOL, SOUND_PAIN3, NPC_ATN_STRUCK, NPC_PITCH_STRUCK); + } + } + } + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + int L_RND_SOUND = RandomInt(1, 3); + if (NPC_STRUCK_SOUND_EVENT == 0) + { + if (L_RND_SOUND == 1) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, BS_SOUND_STRUCK1, NPC_STRUCK_VOL); + } + else + { + if (L_RND_SOUND == 2) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, BS_SOUND_STRUCK2, NPC_STRUCK_VOL); + } + else + { + if (L_RND_SOUND == 3) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, BS_SOUND_STRUCK3, NPC_STRUCK_VOL); + } + } + } + } + else + { + if (L_RND_SOUND == 1) + { + NPC_STRUCK_SOUND_EVENT(NPC_STRUCK_CHANNEL, NPC_STRUCK_VOL, BS_SOUND_STRUCK1, NPC_ATN_STRUCK, NPC_PITCH_STRUCK); + } + else + { + if (L_RND_SOUND == 2) + { + NPC_STRUCK_SOUND_EVENT(NPC_STRUCK_CHANNEL, NPC_STRUCK_VOL, BS_SOUND_STRUCK2, NPC_ATN_STRUCK, NPC_PITCH_STRUCK); + } + else + { + if (L_RND_SOUND == 3) + { + NPC_STRUCK_SOUND_EVENT(NPC_STRUCK_CHANNEL, NPC_STRUCK_VOL, BS_SOUND_STRUCK3, NPC_ATN_STRUCK, NPC_PITCH_STRUCK); + } + } + } + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(NPC_USE_IDLE)) return; + if ((NPC_IDLE_DISABLE)) return; + if (!(m_hAttackTarget == "unset")) return; + if (!(GetGameTime() > NPC_NEXT_IDLE)) return; + NPC_NEXT_IDLE = GetGameTime(); + NPC_NEXT_IDLE += NPC_FREQ_IDLE; + int L_RND_SOUND = RandomInt(1, 3); + if (L_RND_SOUND == 1) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, SOUND_IDLE1, 10); + } + if (L_RND_SOUND == 2) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, SOUND_IDLE2, 10); + } + if (L_RND_SOUND == 3) + { + EmitSound(GetOwner(), NPC_STRUCK_CHANNEL, SOUND_IDLE3, 10); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/base_temporary.as b/scripts/angelscript/monsters/base_temporary.as new file mode 100644 index 00000000..b6dd9981 --- /dev/null +++ b/scripts/angelscript/monsters/base_temporary.as @@ -0,0 +1,42 @@ +#pragma context server + +namespace MS +{ + +class BaseTemporary : CGameScript +{ + float DEATH_DELAY; + int PLAYING_DEAD; + + BaseTemporary() + { + DEATH_DELAY = 0.5; + } + + void OnSpawn() override + { + SetModel("null.mdl"); + SetHealth(1); + SetWidth(0); + SetHeight(0); + SetSolid("none"); + SetName("tempent"); + SetRoam(false); + SetFly(true); + SetInvincible(true); + SetHearingSensitivity(0); + SetSkillLevel(0); + SetRace("beloved"); + SetBloodType("none"); + DEATH_DELAY("end_me"); + PLAYING_DEAD = 1; + } + + void end_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/base_xmass.as b/scripts/angelscript/monsters/base_xmass.as new file mode 100644 index 00000000..59882f0f --- /dev/null +++ b/scripts/angelscript/monsters/base_xmass.as @@ -0,0 +1,58 @@ +#pragma context server + +namespace MS +{ + +class BaseXmass : CGameScript +{ + string ANIM_XMASS_WAVE; + + BaseXmass() + { + ANIM_XMASS_WAVE = "wave"; + } + + void OnSpawn() override + { + if ((G_CHRISTMAS_MODE)) + { + CatchSpeech("say_xmass", "christmas"); + if (GetEntityRace(GetOwner()) == "human") + { + } + SetModelBody(GetOwner(), 2); + } + } + + void say_xmass() + { + if (!(G_CHRISTMAS_MODE)) return; + PlayAnim("critical", ANIM_XMASS_WAVE); + SayText(A + " happy Hogswatch to you too!"); + if ((RandomInt(0, 1))) + { + // TODO: playmp3 all system xmass_annoy.mp3 + } + else + { + // TODO: playmp3 all system xmass.mp3 + } + if ((XMASS_OLD_GUY)) + { + EmitSound(GetOwner(), 0, "npc/happy_hogswatch.wav", 10); + Say("[.20] [.20] [.30] [.10] [.20] [.10] [.10] [.10] [.10]"); + } + else + { + EmitSound(GetOwner(), 0, "npc/xmass_male.wav", 10); + Say("[.20] [.20] [.30] [.10] [.20] [.10] [.10] [.10] [.10]"); + } + if (!(IS_SNOWING)) + { + CallExternal("players", "ext_weather_change", "snow"); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/bat.as b/scripts/angelscript/monsters/bat.as new file mode 100644 index 00000000..6dd565b1 --- /dev/null +++ b/scripts/angelscript/monsters/bat.as @@ -0,0 +1,118 @@ +#pragma context server + +#include "monsters/bat_base.as" + +namespace MS +{ + +class Bat : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE_FLY; + string ANIM_IDLE_HANG; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string BAT_STATUS; + int CAN_FLEE; + int CAN_HUNT; + float FLEE_CHANCE; + int FLEE_HEALTH; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Bat() + { + ANIM_WALK = "IdleFlyNormal"; + ANIM_RUN = ANIM_WALK; + ANIM_ATTACK = "bite"; + ANIM_IDLE_HANG = "IdleHang"; + ANIM_IDLE_FLY = "IdleFlyNormal"; + ANIM_DEATH = "IdleFlyNormal"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_IDLE = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + MOVE_RANGE = 30; + ATTACK_RANGE = 65; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.6; + if (StringToLower(GetMapName()) == "catacombs") + { + ATTACK_HITCHANCE = 0.8; + } + ATTACK_DAMAGE = 1; + NPC_GIVE_EXP = 5; + CAN_FLEE = 1; + FLEE_HEALTH = 0; + FLEE_CHANCE = 1.0; + Precache(SOUND_IDLE); + } + + void bat_spawn() + { + SetName("Bat"); + if ((true)) + { + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "edanasewers") + { + int MY_HP = 8; + } + if (L_MAP_NAME != "edanasewers") + { + int MY_HP = 20; + } + if (L_MAP_NAME == "nightmare_edana") + { + SetMonsterClip(0); + } + SetHealth(MY_HP); + } + SetWidth(16); + SetHeight(16); + SetHearingSensitivity(3.5); + SetVolume(5); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 0)); + SetModel("monsters/bat.mdl"); + } + + void game_postspawn() + { + } + + void bat_drop_down() + { + CAN_HUNT = 1; + BAT_STATUS = BAT_FLYING; + SetIdleAnim(ANIM_IDLE_FLY); + } + + void bite1() + { + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + DoDamage(m_hAttackTarget, "direct", ATTACK_DAMAGE, ATTACK_HITCHANCE, GetOwner()); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/bat_base.as b/scripts/angelscript/monsters/bat_base.as new file mode 100644 index 00000000..080f59e0 --- /dev/null +++ b/scripts/angelscript/monsters/bat_base.as @@ -0,0 +1,181 @@ +#pragma context server + +#include "monsters/base_flyer.as" +#include "monsters/base_monster.as" + +namespace MS +{ + +class BatBase : CGameScript +{ + string ANIM_DEAD; + string ANIM_DEATH; + string ANIM_DEATH_NEW; + string ANIM_IDLE; + int AS_ATTACKING; + int BAT_DROPPING; + int BAT_FLYING; + int BAT_HANGING; + string BAT_STATUS; + int CAN_HEAR; + int CAN_HUNT; + string FLIGHT_STUCK; + int HUNT_AGRO; + string LAST_POS; + float LAST_PROG; + float RETALIATE_CHANCE; + + BatBase() + { + BAT_FLYING = 0; + BAT_HANGING = 1; + BAT_DROPPING = 2; + ANIM_DEATH = "die"; + ANIM_DEATH_NEW = "die"; + ANIM_DEAD = "deadground"; + ANIM_IDLE = "IdleFlyNormal"; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.75; + CAN_HEAR = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.5); + if ((IS_HUNTING)) + { + } + npcatk_faceattacker(); + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 100, 0)); + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if ((SPITTING)) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if (FLIGHT_STUCK > 4) + { + do_rand_tweedee(); + npcatk_suspend_ai(Random(0.3, 0.9)); + SetMoveDest(NEW_DEST); + ScheduleDelayedEvent(0.1, "horror_boost"); + FLIGHT_STUCK = 0; + } + AS_ATTACKING -= 2; + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + if (!(SUSPEND_AI)) + { + SetAngles("face_origin"); + } + if (AS_ATTACKING <= 0) + { + } + AS_ATTACKING = 0; + if (!(IS_FLEEING)) + { + } + if (!(SPITTING)) + { + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + } + float CUR_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + if (LAST_PROG >= CUR_PROG) + { + FLIGHT_STUCK += 1; + } + LAST_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + LAST_POS = GetMonsterProperty("origin"); + } + + void OnSpawn() override + { + SetFly(true); + SetRace("wildanimal"); + ScheduleDelayedEvent(0.1, "bat_spawn"); + bat_hang(); + } + + void OnPostSpawn() override + { + string L_MAP_NAME = StringToLower(GetMapName()); + if (!(L_MAP_NAME == "sfor")) return; + SetMonsterClip(0); + } + + void bat_hang() + { + SetIdleAnim(ANIM_IDLE_HANG); + SetMoveAnim(ANIM_WALK); + SetRoam(false); + BAT_STATUS = BAT_HANGING; + CAN_HUNT = 0; + } + + void npc_targetsighted() + { + basebat_drop_down(); + } + + void npc_heardenemy() + { + basebat_drop_down(); + } + + void basebat_drop_down() + { + CAN_HUNT = 1; + if (!(BAT_STATUS == BAT_HANGING)) return; + bat_drop_down(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((BAT_NO_FAKE_DEATH)) return; + SetMoveDest(/* TODO: $relpos */ $relpos(0, 0, 2048)); + SetSolid("none"); + SetFly(false); + SetIdleAnim(ANIM_DEAD); + SetMoveAnim(ANIM_DEAD); + SetProp(GetOwner(), "movetype", "const.movetype.noclip"); + PlayAnim("critical", ANIM_DEATH_NEW); + DropToFloor(); + DropToFloor(); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, -10)); + string SLAYER_LOC = GetEntityOrigin(m_hLastStruck); + string SLAYER_X = (SLAYER_LOC).x; + string MY_LOC = GetEntityOrigin(GetOwner()); + string MY_X = (MY_LOC).x; + string DISTANCE_X = SLAYER_X; + DISTANCE_X -= MY_X; + if (DISTANCE_X < 0) + { + string HOLDER = DISTANCE_X; + HOLDER *= 2; + DISTANCE_X -= HOLDER; + } + if (DISTANCE_X < 12) + { + SetModel("none"); + } + } + + void chicken_run() + { + ScheduleDelayedEvent(0.1, "horror_boost"); + } + + void horror_boost() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 200, 0)); + } + +} + +} diff --git a/scripts/angelscript/monsters/bat_giant.as b/scripts/angelscript/monsters/bat_giant.as new file mode 100644 index 00000000..3f122fb8 --- /dev/null +++ b/scripts/angelscript/monsters/bat_giant.as @@ -0,0 +1,262 @@ +#pragma context server + +#include "monsters/bat_base.as" + +namespace MS +{ + +class BatGiant : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DROP; + string ANIM_IDLE_FLY; + string ANIM_IDLE_HANG; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BAT_SUMMON_AMT; + float BAT_SUMMON_CHANCE; + int BAT_SUMMON_DMG; + int BAT_SUMMON_HEIGHT; + int BAT_SUMMON_LIFETIME; + string BAT_SUMMON_NUM; + string BAT_SUMMON_SCRIPT; + string BAT_SUMMON_SND_RETREAT; + string BAT_SUMMON_SND_SUMMON; + int CAN_HUNT; + string CHAPEL_BAT; + string CL_FLAP_SND; + float FREQ_SUMMON; + int HEAR_RANGE_MAX; + int HEAR_RANGE_PLAYER; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string OLD_TARG; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_FLAP1; + string SOUND_FLAP2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + BatGiant() + { + HEAR_RANGE_PLAYER = 256; + HEAR_RANGE_MAX = 300; + ANIM_RUN = "fly"; + ANIM_WALK = "fly"; + ANIM_ATTACK = "attack2"; + ANIM_IDLE_HANG = "idle"; + ANIM_IDLE_FLY = "idle"; + ANIM_DROP = "idle"; + ANIM_DEATH = "die"; + MOVE_RANGE = 10; + ATTACK_DAMAGE = 15; + ATTACK_RANGE = 200; + ATTACK_HITRANGE = 250; + ATTACK_HITCHANCE = 0.85; + NPC_GIVE_EXP = 150; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "monsters/bat/pain1.wav"; + SOUND_PAIN2 = "monsters/bat/pain2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACK3 = "monsters/orc/attack3.wav"; + SOUND_ALERT = "monsters/bat/alert.wav"; + SOUND_FLAP1 = "monsters/bat/flap_big1.wav"; + SOUND_FLAP2 = "monsters/bat/flap_big2.wav"; + SOUND_DEATH = "monsters/bat/death.wav"; + BAT_SUMMON_SCRIPT = "monsters/bat_summon"; + BAT_SUMMON_AMT = 5; + BAT_SUMMON_LIFETIME = 15; + BAT_SUMMON_DMG = 4; + BAT_SUMMON_HEIGHT = 300; + BAT_SUMMON_CHANCE = 0.6; + BAT_SUMMON_SND_RETREAT = "monsters/bat/pain1.wav"; + BAT_SUMMON_SND_SUMMON = "monsters/bat/death.wav"; + Precache("monsters/bat_summon"); + FREQ_SUMMON = 17.0; + Precache("monsters/bat.mdl"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if ((IsEntityAlive(m_hAttackTarget))) + { + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + PlayAnim("critical", ANIM_ATTACK); + } + } + + void bat_spawn() + { + SetName("Giant Bat"); + SetHealth(500); + SetWidth(70); + SetHeight(70); + SetHearingSensitivity(10); + SetModel("monsters/giant_bat.mdl"); + SetVolume(10); + SetRace("demon"); + } + + void bat_hang() + { + SetRoam(true); + CAN_HUNT = 1; + } + + void OnPostSpawn() override + { + if (StringToLower(GetMapName()) == "chapel") + { + ATTACK_DAMAGE /= 2; + NPC_GIVE_EXP /= 2; + SetHealth(250); + ATTACK_HITCHANCE = 75; + CHAPEL_BAT = 1; + } + } + + void cycle_up() + { + SetIdleAnim(ANIM_IDLE_FLY); + SetMoveAnim(ANIM_RUN); + PlayAnim("critical", ANIM_DROP); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + SetRoam(true); + FREQ_SUMMON("make_babies"); + } + + void make_babies() + { + FREQ_SUMMON("make_babies"); + OLD_TARG = m_hAttackTarget; + npcatk_suspend_ai(2.0); + string DEST_POS = GetMonsterProperty("origin"); + DEST_POS += "z"; + SetMoveDest(DEST_POS); + AddVelocity(GetOwner(), Vector3(0, -50, 900)); + ScheduleDelayedEvent(0.5, "make_babies2"); + } + + void make_babies2() + { + AddVelocity(GetOwner(), Vector3(0, -50, 900)); + SetMoveDest(OLD_TARG); + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + ScheduleDelayedEvent(0.1, "make_babies3"); + } + + void make_babies3() + { + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + SetAngles("face"); + PlayAnim("critical", ANIM_ATTACK); + ScheduleDelayedEvent(0.1, "bat_summon_all"); + } + + void bat_summon_all() + { + EmitSound(GetOwner(), CHAN_VOICE, BAT_SUMMON_SND_SUMMON, "game.sound.maxvol"); + PlayAnim("once", "attack2"); + BAT_SUMMON_NUM = BAT_SUMMON_AMT; + ScheduleDelayedEvent(0.1, "bat_summon_loop"); + } + + void bat_summon_loop() + { + if (!(BAT_SUMMON_NUM)) return; + BAT_SUMMON_NUM -= 1; + string L_TARGETPOS = GetEntityOrigin(GetOwner()); + int L_OFS_X = RandomInt(-100, 100); + int L_OFS_Y = RandomInt(-100, 100); + L_TARGETPOS += Vector3(L_OFS_X, L_OFS_Y, -64); + SpawnNPC(BAT_SUMMON_SCRIPT, L_TARGETPOS, ScriptMode::Legacy); // params: BAT_SUMMON_LIFETIME, BAT_SUMMON_DMG, HUNT_LASTTARGET + ScheduleDelayedEvent(0.1, "bat_summon_loop"); + } + + void frame_attack1() + { + attack_yell(); + DoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void frame_attack2() + { + attack_yell(); + DoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void attack_yell() + { + if (!(RandomInt(0, 1) == 0)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), CHAN_BODY, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(FindEntityByName("spawner"), "makechest"); + } + + void cl_frame_flap() + { + if (!(CL_FLAP_SND)) + { + EmitSound(GetOwner(), 0, SOUND_FLAP1, 10); + CL_FLAP_SND = 1; + } + else + { + EmitSound(GetOwner(), 0, SOUND_FLAP2, 10); + CL_FLAP_SND = 0; + } + } + + void npcatk_setmovedest() + { + if (GetEntityIndex(param1) != m_hAttackTarget) + { + SetMoveDest(param1); + } + if (GetEntityIndex(param1) == m_hAttackTarget) + { + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + TARG_ORG += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 128)); + SetMoveDest(TARG_ORG); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(CHAPEL_BAT)) return; + CallExternal(GAME_MASTER, "gm_createnpc", 0.1, "chests/chapel_bat", /* TODO: $relpos */ $relpos(0, 0, 0)); + } + +} + +} diff --git a/scripts/angelscript/monsters/bat_large.as b/scripts/angelscript/monsters/bat_large.as new file mode 100644 index 00000000..23359e74 --- /dev/null +++ b/scripts/angelscript/monsters/bat_large.as @@ -0,0 +1,117 @@ +#pragma context server + +#include "monsters/bat_base.as" + +namespace MS +{ + +class BatLarge : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE_FLY; + string ANIM_IDLE_HANG; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string BAT_STATUS; + int CAN_FLEE; + int CAN_HUNT; + float FLEE_CHANCE; + int FLEE_HEALTH; + int MOVE_RANGE; + string NEXT_DODGE; + int NPC_GIVE_EXP; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + BatLarge() + { + ANIM_WALK = "IdleFlyNormal"; + ANIM_RUN = ANIM_WALK; + ANIM_ATTACK = "bite"; + ANIM_IDLE_HANG = "IdleHang"; + ANIM_IDLE_FLY = "IdleFlyNormal"; + ANIM_DEATH = "IdleFlyNormal"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_IDLE = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + MOVE_RANGE = 30; + ATTACK_RANGE = 65; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.8; + if (StringToLower(GetMapName()) == "catacombs") + { + ATTACK_HITCHANCE = 0.8; + } + ATTACK_DAMAGE = 20; + NPC_GIVE_EXP = 25; + CAN_FLEE = 1; + FLEE_HEALTH = 0; + FLEE_CHANCE = 1.0; + Precache(SOUND_IDLE); + } + + void bat_spawn() + { + SetName("Large Bat"); + SetHealth(100); + SetWidth(32); + SetHeight(32); + SetHearingSensitivity(3.5); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 0)); + SetModel("monsters/bat_large.mdl"); + if (StringToLower(GetMapName()) == "nightmare_edana") + { + SetMonsterClip(0); + } + } + + void game_postspawn() + { + } + + void bat_drop_down() + { + CAN_HUNT = 1; + BAT_STATUS = BAT_FLYING; + SetIdleAnim(ANIM_IDLE_FLY); + } + + void bite1() + { + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + DoDamage(m_hAttackTarget, "direct", ATTACK_DAMAGE, ATTACK_HITCHANCE, GetOwner()); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDamage(int damage) override + { + if (!(GetGameTime() > NEXT_DODGE)) return; + NEXT_DODGE = GetGameTime(); + NEXT_DODGE += Random(1.0, 3.0); + float RND_LF = Random(-300, 300); + float RND_FB = Random(-1000, 0); + float RND_UP = Random(0, 300); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_LF, RND_FB, RND_UP)); + } + +} + +} diff --git a/scripts/angelscript/monsters/bat_large2.as b/scripts/angelscript/monsters/bat_large2.as new file mode 100644 index 00000000..842078b4 --- /dev/null +++ b/scripts/angelscript/monsters/bat_large2.as @@ -0,0 +1,276 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_flyer_grav.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class BatLarge2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEAD_GROUND; + string ANIM_DEATH; + string ANIM_HOVER; + string ANIM_IDLE; + string ANIM_IDLE_HANG; + string ANIM_RUN; + string ANIM_WALK; + int AS_CUSTOM_UNSTUCK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BFLY_NO_FAKE_DEATH; + int DID_ALERT; + int DMG_BITE; + int HORROR_BOOST_SPEED; + int IS_ACTIVE; + string MONSTER_WIDTH; + string NEXT_HORROR_BOOST; + string NEXT_RETREAT; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string NPC_MODEL_SCALED; + string NPC_ORG_HEIGHT; + string NPC_ORG_WIDTH; + int NPC_USES_HANDLE_EVENTS; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BOOST1; + string SOUND_BOOST2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + BatLarge2() + { + BFLY_NO_FAKE_DEATH = 1; + AS_CUSTOM_UNSTUCK = 1; + NPC_HACKED_MOVE_SPEED = 100; + ANIM_IDLE = "IdleFlyNormal"; + ANIM_WALK = "IdleFlyFace"; + ANIM_RUN = "IdleFlyNormal"; + ANIM_ATTACK = "Bite"; + ANIM_DEATH = "Deadground"; + ANIM_DEAD_GROUND = "Deadground"; + ANIM_HOVER = "IdleFlyFace"; + ANIM_IDLE_HANG = "IdleHang"; + ATTACK_MOVERANGE = 15; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 150; + NPC_GIVE_EXP = 150; + DMG_BITE = 100; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/bat/c_bat_hit1.wav"; + SOUND_IDLE = "monsters/bat/c_bat_hit2.wav"; + SOUND_DEATH = "monsters/bat/c_bat_yes.wav"; + SOUND_BOOST1 = "monsters/bat/c_bat_bat1.wav"; + SOUND_BOOST2 = "monsters/bat/c_bat_bat2.wav"; + SOUND_ATTACK1 = "monsters/bat/c_bat_atk1.wav"; + SOUND_ATTACK2 = "monsters/bat/c_bat_atk2.wav"; + SOUND_ATTACK3 = "monsters/bat/c_bat_atk3.wav"; + SOUND_ALERT = "monsters/bat/death.wav"; + HORROR_BOOST_SPEED = 300; + } + + void OnSpawn() override + { + SetName("Huge Bat"); + SetModel("monsters/bat_large.mdl"); + SetHealth(500); + SetRace("vermin"); + SetWidth(24); + SetHeight(24); + SetGravity(0); + SetHearingSensitivity(3.5); + SetIdleAnim(ANIM_IDLE_HANG); + SetMoveAnim(ANIM_RUN); + PlayAnim("once", ANIM_IDLE_HANG); + IS_ACTIVE = 0; + npcatk_suspend_ai(); + ScheduleDelayedEvent(2.0, "final_props"); + if (StringToLower(GetMapName()) == "nightmare_edana") + { + SetMonsterClip(0); + } + re_scale(2.0, 1, 0); + SetAnimFrameRate(0.75); + } + + void re_scale() + { + LogDebug("ext_scale PARAM1 PARAM2 PARAM3"); + if (!(param1 > 0)) return; + string MY_WIDTH = GetEntityWidth(GetOwner()); + string MY_HEIGHT = GetEntityHeight(GetOwner()); + if (NPC_ORG_WIDTH == "NPC_ORG_WIDTH") + { + NPC_ORG_WIDTH = MY_WIDTH; + NPC_ORG_HEIGHT = MY_HEIGHT; + } + else + { + string MY_WIDTH = NPC_ORG_WIDTH; + string MY_HEIGHT = NPC_ORG_HEIGHT; + } + SetProp(GetOwner(), "scale", param1); + MY_WIDTH *= param1; + MY_HEIGHT *= param1; + if (MY_WIDTH < 16) + { + int MY_WIDTH = 16; + } + if (MY_HEIGHT < 16) + { + int MY_HEIGHT = 16; + } + SetWidth(MY_WIDTH); + SetHeight(MY_WIDTH); + MONSTER_WIDTH = MY_WIDTH; + NPC_MODEL_SCALED = param1; + NPC_USES_HANDLE_EVENTS = 1; + string L_HALF_W = MY_WIDTH; + L_HALF_W *= 0.5; + if (param2 != 1) + { + SetBBox(Vector3(/* TODO: $neg */ $neg(L_HALF_W), /* TODO: $neg */ $neg(L_HALF_W), 0), Vector3(L_HALF_W, L_HALF_W, MY_HEIGHT)); + } + if (param1 > 1) + { + if (BASE_MOVESPEED == "BASE_MOVESPEED") + { + BASE_MOVESPEED = param1; + NPC_ORG_BASE_MOVESPEED = BASE_MOVESPEED; + } + else + { + if (NPC_ORG_BASE_MOVESPEED == "NPC_ORG_BASE_MOVESPEED") + { + BASE_MOVESPEED = NPC_ORG_BASE_MOVESPEED; + } + else + { + NPC_ORG_BASE_MOVESPEED = BASE_MOVESPEED; + } + BASE_MOVESPEED += param1; + } + SetAnimMoveSpeed(BASE_MOVESPEED); + SetMoveSpeed(BASE_MOVESPEED); + } + NPC_MODEL_SCALED = param1; + if (!(param3 != 1)) return; + if (!(NPC_RANGED)) + { + LogDebug("ext_scale adjusting ranges"); + ScheduleDelayedEvent(1.9, "ext_adjust_scale_range"); + } + else + { + LogDebug("ext_scale not changing reach , mob is ranged"); + } + } + + void set_spawn_active() + { + ScheduleDelayedEvent(0.1, "active_mode"); + } + + void active_mode() + { + PlayAnim("critical", ANIM_WALK); + SetIdleAnim(ANIM_WALK); + SetMoveAnim(ANIM_RUN); + IS_ACTIVE = 1; + npcatk_resume_ai(); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((IS_ACTIVE)) return; + string HEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(HEARD_ID) == "enemy")) return; + active_mode(); + } + + void OnDamage(int damage) override + { + if (!(IS_ACTIVE)) + { + active_mode(); + } + if (!(GetGameTime() > NEXT_RETREAT)) return; + NEXT_RETREAT = GetGameTime(); + NEXT_RETREAT += Random(10.0, 20.0); + float RND_LR = Random(-300.0, 300.0); + float RND_FB = Random(-1500.0, 500.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_LR, RND_FB, 0)); + } + + void bite1() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, 0.9, "pierce"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npc_targetsighted() + { + if (GetGameTime() > NEXT_HORROR_BOOST) + { + NEXT_HORROR_BOOST = GetGameTime(); + NEXT_HORROR_BOOST += Random(3.0, 5.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, HORROR_BOOST_SPEED, 0)); + // PlayRandomSound from: SOUND_BOOST1, SOUND_BOOST2 + array sounds = {SOUND_BOOST1, SOUND_BOOST2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(-50, 0, 0)); + } + if ((DID_ALERT)) return; + DID_ALERT = 1; + // svplaysound: svplaysound 0 10 SOUND_ALERT + EmitSound(0, 10, SOUND_ALERT); + } + + void my_target_died() + { + DID_ALERT = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + ClientEvent("new", "all", "monsters/bat_large_corpse_cl", GetEntityOrigin(GetOwner()), 0, 2.0); + } + + void OnSuspendAI() + { + LogDebug("npcatk_suspend_ai PARAM1 PARAM2"); + } + + void as_npcatk_suspend_ai() + { + LogDebug("as_npcatk_suspend_ai PARAM1 PARAM2"); + } + + void npc_stuck() + { + LogDebug("npc_stuck"); + chicken_run(1.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/bat_large_corpse_cl.as b/scripts/angelscript/monsters/bat_large_corpse_cl.as new file mode 100644 index 00000000..c8759a99 --- /dev/null +++ b/scripts/angelscript/monsters/bat_large_corpse_cl.as @@ -0,0 +1,39 @@ +#pragma context server + +namespace MS +{ + +class BatLargeCorpseCl : CGameScript +{ + string USE_SKIN; + + void client_activate() + { + USE_SKIN = param2; + string FX_ORIGIN = param1; + ClientEffect("tempent", "model", "monsters/bat_large.mdl", FX_ORIGIN, "setup_corpse"); + ScheduleDelayedEvent(7.0, "remove_script"); + } + + void remove_script() + { + RemoveScript(); + } + + void setup_corpse() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 5.0); + ClientEffect("tempent", "set_current_prop", "framerate", 0.1); + ClientEffect("tempent", "set_current_prop", "sequence", 6); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "skin", USE_SKIN); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "frames", 40); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + } + +} + +} diff --git a/scripts/angelscript/monsters/bat_large_shreaker.as b/scripts/angelscript/monsters/bat_large_shreaker.as new file mode 100644 index 00000000..bda97ac5 --- /dev/null +++ b/scripts/angelscript/monsters/bat_large_shreaker.as @@ -0,0 +1,176 @@ +#pragma context server + +#include "monsters/bat_base.as" + +namespace MS +{ + +class BatLargeShreaker : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_HOVER; + string ANIM_IDLE_FLY; + string ANIM_IDLE_HANG; + string ANIM_RUN; + string ANIM_SHREAK; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BAT_NO_FAKE_DEATH; + string BAT_STATUS; + int CAN_HUNT; + int DMG_SHREAK; + float FREQ_SHREAK; + string MOVE_MODE; + int MOVE_RANGE; + string NEXT_RETREAT; + string NEXT_SHREAK; + int NPC_GIVE_EXP; + string SOUND_ALERT; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_SHREAK; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + BatLargeShreaker() + { + BAT_NO_FAKE_DEATH = 1; + DMG_SHREAK = 150; + FREQ_SHREAK = 5.0; + SOUND_SHREAK = "monsters/bat/zoobat.wav"; + ANIM_SHREAK = ""; + ANIM_WALK = "IdleFlyNormal"; + ANIM_RUN = ANIM_WALK; + ANIM_ATTACK = "bite"; + ANIM_IDLE_HANG = "IdleHang"; + ANIM_IDLE_FLY = "IdleFlyNormal"; + ANIM_DEATH = "IdleFlyNormal"; + ANIM_HOVER = "IdleFlyFace"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_IDLE = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + MOVE_RANGE = 128; + ATTACK_RANGE = 65; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE = 50; + NPC_GIVE_EXP = 75; + SOUND_ALERT = "monsters/bat/alert.wav"; + Precache("monsters/zubat_sphere.mdl"); + } + + void bat_spawn() + { + SetName("Shrieker Bat"); + SetHealth(300); + SetWidth(32); + SetHeight(32); + SetHearingSensitivity(3.5); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 0)); + SetModel("monsters/bat_large.mdl"); + SetProp(GetOwner(), "skin", 2); + } + + void game_postspawn() + { + } + + void bat_drop_down() + { + CAN_HUNT = 1; + BAT_STATUS = BAT_FLYING; + SetIdleAnim(ANIM_IDLE_FLY); + } + + void bite1() + { + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + DoDamage(m_hAttackTarget, "direct", ATTACK_DAMAGE, ATTACK_HITCHANCE, GetOwner()); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(GetGameTime() > NEXT_RETREAT)) return; + NEXT_RETREAT = GetGameTime(); + NEXT_RETREAT += Random(3.0, 5.0); + float RND_LR = Random(-300.0, 300.0); + float RND_FB = Random(-1500.0, 500.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_LR, RND_FB, 0)); + } + + void npc_targetsighted() + { + if (!(GetEntityRange(m_hAttackTarget) < 256)) return; + if (!(GetGameTime() > NEXT_SHREAK)) return; + NEXT_SHREAK = GetGameTime(); + if ((I_R_FROZEN)) + { + RemoveEffect(GetOwner(), "debuff_frozen"); + } + NEXT_SHREAK += FREQ_SHREAK; + EmitSound(GetOwner(), 2, SOUND_SHREAK, 10); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 32, 3.0, 2.0); + ClientEvent("new", "all", "effects/sfx_pulse_sphere", GetEntityOrigin(GetOwner()), 10.0, GetEntityIndex(GetOwner()), 2, 2, 0); + ScheduleDelayedEvent(0.5, "shreak_blast"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 512, 90, 3.0, 512); + } + + void shreak_blast() + { + XDoDamage(GetEntityOrigin(GetOwner()), 256, DMG_SHREAK, 0.1, GetOwner(), GetOwner(), "none", "magic_effect", "dmgevent:shreak"); + } + + void shreak_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (GetEntityRange(m_hAttackTarget) < 256) + { + SetMoveAnim(ANIM_HOVER); + PlayAnim("once", ANIM_HOVER); + SetAnimMoveSpeed(0); + MOVE_MODE = 0; + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, 0))); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 2.0; + } + else + { + SetAnimMoveSpeed(1); + SetMoveAnim(ANIM_WALK); + if (!(MOVE_MODE)) + { + } + PlayAnim("once", "break"); + MOVE_MODE = 1; + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + ClientEvent("new", "all", "monsters/bat_large_corpse_cl", GetEntityOrigin(GetOwner()), 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/bat_large_shreaker_cl.as b/scripts/angelscript/monsters/bat_large_shreaker_cl.as new file mode 100644 index 00000000..a7bed57e --- /dev/null +++ b/scripts/angelscript/monsters/bat_large_shreaker_cl.as @@ -0,0 +1,139 @@ +#pragma context server + +namespace MS +{ + +class BatLargeShreakerCl : CGameScript +{ + string BLUR_ANG; + string BLUR_VEL; + int FX_ACTIVE; + string FX_ANIM; + string FX_MAX_SCALE; + string FX_ORIGIN; + string FX_OWNER; + string FX_SKIN; + string NO_BLUR; + int VEL_X; + + void client_activate() + { + FX_ORIGIN = param1; + FX_MAX_SCALE = param2; + FX_OWNER = param3; + FX_SKIN = param4; + FX_ANIM = param5; + if ((FX_OWNER).findFirst(PARAM) == 0) + { + NO_BLUR = 1; + } + FX_ACTIVE = 1; + ScheduleDelayedEvent(5.0, "end_fx"); + EmitSound3D("magic/sff_explsonic.wav", 10, FX_ORIGIN); + if ((param6).findFirst(PARAM) == 0) + { + string SPR_POS = FX_ORIGIN; + } + else + { + if (param6 == 0) + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + } + if (param6 == 1) + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + } + if (param6 == 2) + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment2"); + } + if (param6 == 3) + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment3"); + } + LogDebug("*** SPR_POS"); + } + ClientEffect("tempent", "model", "monsters/zubat_sphere.mdl", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_sphere", "update_sphere"); + if ((NO_BLUR)) return; + VEL_X = 0; + for (int i = 0; i < 8; i++) + { + blur_loop(); + } + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void blur_loop() + { + VEL_R += 20; + BLUR_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + BLUR_VEL = /* TODO: $relvel */ $relvel(BLUR_ANG, Vector3(/* TODO: $neg */ $neg(VEL_R), 0, 0)); + ClientEffect("tempent", "model", /* TODO: $getcl */ $getcl(FX_OWNER, "model"), /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_blur"); + BLUR_VEL = /* TODO: $relvel */ $relvel(BLUR_ANG, Vector3(VEL_R, 0, 0)); + ClientEffect("tempent", "model", /* TODO: $getcl */ $getcl(FX_OWNER, "model"), /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_blur"); + } + + void setup_blur() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "angles", BLUR_ANG); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 50); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "skin", FX_SKIN); + ClientEffect("tempent", "set_current_prop", "velocity", BLUR_VEL); + ClientEffect("tempent", "set_current_prop", "sequence", FX_ANIM); + } + + void setup_sphere() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 4.0); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 999); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 64, 255)); + ClientEffect("tempent", "set_current_prop", "color", Vector3(64, 64, 255)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.25); + } + + void update_sphere() + { + if ((FX_ACTIVE)) + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < FX_MAX_SCALE) + { + } + CUR_SCALE += 0.05; + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 2000)); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/bat_large_vampire.as b/scripts/angelscript/monsters/bat_large_vampire.as new file mode 100644 index 00000000..68835987 --- /dev/null +++ b/scripts/angelscript/monsters/bat_large_vampire.as @@ -0,0 +1,235 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_flyer_grav.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class BatLargeVampire : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEAD_GROUND; + string ANIM_DEATH; + string ANIM_HOVER; + string ANIM_IDLE; + string ANIM_IDLE_HANG; + string ANIM_RUN; + string ANIM_WALK; + int AS_CUSTOM_UNSTUCK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BFLY_NO_FAKE_DEATH; + int DID_ALERT; + int DMG_BITE; + float DOT_POISON; + int IS_ACTIVE; + string NEXT_HORROR_BOOST; + string NEXT_RETREAT; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string OLD_TARGET; + string REGEN_RATE; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BOOST1; + string SOUND_BOOST2; + string SOUND_DEATH; + string SOUND_HEARTBEAT; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string TRACK_HIT; + + BatLargeVampire() + { + BFLY_NO_FAKE_DEATH = 1; + AS_CUSTOM_UNSTUCK = 1; + NPC_HACKED_MOVE_SPEED = 500; + ANIM_IDLE = "IdleFlyNormal"; + ANIM_WALK = "IdleFlyFace"; + ANIM_RUN = "IdleFlyNormal"; + ANIM_ATTACK = "Bite"; + ANIM_DEATH = "Deadground"; + ANIM_DEAD_GROUND = "Deadground"; + ANIM_HOVER = "IdleFlyFace"; + ANIM_IDLE_HANG = "IdleHang"; + ATTACK_MOVERANGE = 15; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 100; + NPC_GIVE_EXP = 150; + DMG_BITE = 50; + DOT_POISON = 10.0; + SOUND_HEARTBEAT = "player/heartbeat_noloop.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/bat/c_bat_hit1.wav"; + SOUND_IDLE = "monsters/bat/c_bat_hit2.wav"; + SOUND_DEATH = "monsters/bat/c_bat_yes.wav"; + SOUND_BOOST1 = "monsters/bat/c_bat_bat1.wav"; + SOUND_BOOST2 = "monsters/bat/c_bat_bat2.wav"; + SOUND_ATTACK1 = "monsters/bat/c_bat_atk1.wav"; + SOUND_ATTACK2 = "monsters/bat/c_bat_atk2.wav"; + SOUND_ATTACK3 = "monsters/bat/c_bat_atk3.wav"; + SOUND_ALERT = "monsters/bat/death.wav"; + } + + void OnSpawn() override + { + SetName("Vampire Bat"); + SetModel("monsters/bat_large.mdl"); + SetHealth(200); + SetRace("vermin"); + SetWidth(32); + SetHeight(32); + SetGravity(0); + SetHearingSensitivity(3.5); + SetIdleAnim(ANIM_IDLE_HANG); + SetMoveAnim(ANIM_RUN); + PlayAnim("once", ANIM_IDLE_HANG); + IS_ACTIVE = 0; + npcatk_suspend_ai(); + ScheduleDelayedEvent(2.0, "final_props"); + SetProp(GetOwner(), "skin", 1); + if (StringToLower(GetMapName()) == "nightmare_edana") + { + SetMonsterClip(0); + } + } + + void final_props() + { + REGEN_RATE = GetEntityMaxHealth(GetOwner()); + REGEN_RATE *= 0.1; + } + + void set_spawn_active() + { + ScheduleDelayedEvent(0.1, "active_mode"); + } + + void active_mode() + { + PlayAnim("critical", ANIM_WALK); + SetIdleAnim(ANIM_WALK); + SetMoveAnim(ANIM_RUN); + IS_ACTIVE = 1; + npcatk_resume_ai(); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((IS_ACTIVE)) return; + string HEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(HEARD_ID) == "enemy")) return; + active_mode(); + } + + void OnDamage(int damage) override + { + if (!(IS_ACTIVE)) + { + active_mode(); + } + if (!(GetGameTime() > NEXT_RETREAT)) return; + NEXT_RETREAT = GetGameTime(); + NEXT_RETREAT += Random(3.0, 5.0); + float RND_LR = Random(-300.0, 300.0); + float RND_FB = Random(-1500.0, 500.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_LR, RND_FB, 0)); + } + + void bite_dodamage() + { + if (!(GetEntityProperty(param2, "scriptvar"))) + { + HealEntity(GetOwner(), REGEN_RATE); + EmitSound(GetOwner(), 0, SOUND_HEARTBEAT, 10); + } + if (!(IsEntityAlive(OLD_TARGET))) + { + OLD_TARGET = param1; + } + if (OLD_TARGET == param2) + { + TRACK_HIT += 1; + } + else + { + TRACK_HIT = 0; + } + if (TRACK_HIT > 3) + { + TRACK_HIT = 0; + ApplyEffect(param2, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_POISON, 1); + } + OLD_TARGET = param2; + } + + void bite1() + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, 0.9, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bite"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npc_targetsighted() + { + if (GetGameTime() > NEXT_HORROR_BOOST) + { + NEXT_HORROR_BOOST = GetGameTime(); + NEXT_HORROR_BOOST += Random(3.0, 5.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 0)); + // PlayRandomSound from: SOUND_BOOST1, SOUND_BOOST2 + array sounds = {SOUND_BOOST1, SOUND_BOOST2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(-50, 0, 0)); + } + if ((DID_ALERT)) return; + DID_ALERT = 1; + // svplaysound: svplaysound 0 10 SOUND_ALERT + EmitSound(0, 10, SOUND_ALERT); + } + + void my_target_died() + { + DID_ALERT = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + ClientEvent("new", "all", "monsters/bat_large_corpse_cl", GetEntityOrigin(GetOwner()), 1); + } + + void OnSuspendAI() + { + LogDebug("npcatk_suspend_ai PARAM1 PARAM2"); + } + + void as_npcatk_suspend_ai() + { + LogDebug("as_npcatk_suspend_ai PARAM1 PARAM2"); + } + + void npc_stuck() + { + LogDebug("npc_stuck"); + chicken_run(1.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/bat_summon.as b/scripts/angelscript/monsters/bat_summon.as new file mode 100644 index 00000000..eea9013c --- /dev/null +++ b/scripts/angelscript/monsters/bat_summon.as @@ -0,0 +1,60 @@ +#pragma context server + +#include "monsters/bat.as" + +namespace MS +{ + +class BatSummon : CGameScript +{ + string BAT_ATTACK_DMG; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_HEAR; + int CAN_HUNT; + int NPC_GIVE_EXP; + + BatSummon() + { + NPC_GIVE_EXP = 5; + CAN_FLEE = 0; + } + + void game_dynamically_created() + { + BAT_ATTACK_DMG = param2; + SetMoveDest(param3); + PARAM1("bat_die"); + } + + void bat_die() + { + CAN_ATTACK = 0; + CAN_HUNT = 0; + CAN_HEAR = 0; + DeleteEntity(GetOwner(), true); // fade out + } + + void bat_spawn() + { + SetName("Summoned Bat"); + SetHealth(20); + SetWidth(1); + SetHeight(1); + SetHearingSensitivity(3.5); + SetIdleAnim(ANIM_IDLE_FLY); + SetMoveAnim(ANIM_WALK); + } + + void bat_hang() + { + } + + void bite1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, BAT_ATTACK_DMG, ATTACK_HITCHANCE, "slash"); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_base.as b/scripts/angelscript/monsters/bear_base.as new file mode 100644 index 00000000..2f584faf --- /dev/null +++ b/scripts/angelscript/monsters/bear_base.as @@ -0,0 +1,92 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class BearBase : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string BEAR_VOLUME; + int CAN_FLEE; + int CAN_HEAR; + int CAN_RETALIATE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int HUNT_AGRO; + string NPC_HEAR_TARGET; + float RETALIATE_CHANGETARGET_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + + BearBase() + { + ANIM_IDLE = "idle"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + SOUND_ATTACK1 = "monsters/bear/cubattack.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACK3 = "none"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_STRUCK4 = "monsters/bear/cubpain.wav"; + SOUND_STRUCK5 = "none"; + SOUND_DEATH = "monsters/bear/cubdeath.wav"; + HUNT_AGRO = 1; + CAN_FLEE = 0; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.2; + CAN_HEAR = 1; + NPC_HEAR_TARGET = "enemy"; + DROP_ITEM1 = "skin_bear"; + DROP_ITEM1_CHANCE = 0.5; + BEAR_VOLUME = "game.sound.maxvol"; + } + + void OnSpawn() override + { + SetRoam(true); + SetRace("wildanimal"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void game_postspawn() + { + if ((StringToLower(GetMapName())).findFirst("skycastle") == 0) + { + DROP_ITEM1_CHANCE = 0.0; + } + } + + void bite1() + { + // PlayRandomSound from: BEAR_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {BEAR_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: BEAR_VOLUME, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {BEAR_VOLUME, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_base_giant.as b/scripts/angelscript/monsters/bear_base_giant.as new file mode 100644 index 00000000..13398b02 --- /dev/null +++ b/scripts/angelscript/monsters/bear_base_giant.as @@ -0,0 +1,279 @@ +#pragma context server + +#include "monsters/bear_base.as" + +namespace MS +{ + +class BearBaseGiant : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + string ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_NORMAL_DAMAGE; + int ATTACK_RANGE; + float ATTACK_STANDING_DAMAGE; + int ATTACK_STOMPDMG; + int ATTACK_STOMPRANGE; + int BEAR_CANSTAND; + int BEAR_ISDDEAD; + int BEAR_ISDEAD; + int BEAR_ISSTOMPATK; + int BEAR_STANDING; + string BEAR_VOLUME; + int CAN_ATTACK; + string DROP_ITEM1_CHANCE; + string FORWARDPUSH; + int MOVE_RANGE; + float MSC_PUSH_RESIST; + int NPC_AUTO_DEATH; + int NPC_BASE_EXP; + string SIDEPUSH; + string SOUND_DEATH; + string SOUND_DEATH2; + string SOUND_GETDOWN; + string SOUND_GETUP; + string SOUND_GETUP_GROWL; + string SOUND_UPSNARL; + string SOUND_UPSTEP1; + string SOUND_UPSTEP2; + string STAND_HEALTH; + string UPPUSH; + + BearBaseGiant() + { + ANIM_IDLE = ANIM_IDLE; + ANIM_WALK = ANIM_WALK; + ANIM_RUN = ANIM_RUN; + ANIM_ATTACK = ANIM_ATTACK; + MSC_PUSH_RESIST = 0.75; + ATTACK_NORMAL_DAMAGE = 10; + ATTACK_STANDING_DAMAGE = Random(15, 20); + ATTACK_DAMAGE = ATTACK_NORMAL_DAMAGE; + MOVE_RANGE = 108; + ATTACK_RANGE = 128; + ATTACK_HITRANGE = 160; + ATTACK_STOMPRANGE = 160; + ATTACK_STOMPDMG = 5; + NPC_BASE_EXP = 90; + BEAR_VOLUME = "game.sound.maxvol"; + SOUND_DEATH = "monsters/bear/giantbeardeath.wav"; + SOUND_DEATH2 = "monsters/bear/giantbeardeath2.wav"; + SOUND_GETUP_GROWL = "monsters/bear/giantbeardeath2.wav"; + SOUND_GETUP = "monsters/troll/step1.wav"; + SOUND_GETDOWN = "monsters/troll/step2.wav"; + SOUND_UPSNARL = "monsters/bear/giantbearupsnarl.wav"; + SOUND_UPSTEP1 = "monsters/bear/giantbearstep1.wav"; + SOUND_UPSTEP2 = "monsters/bear/giantbearstep2.wav"; + NPC_AUTO_DEATH = 0; + // TODO: removesetvar ANIM_IDLE + // TODO: removesetvar ANIM_RUN + // TODO: removesetvar ANIM_WALK + // TODO: removesetvard ANIM_ATTACK + } + + void OnRepeatTimer() + { + SetRepeatDelay(3); + if ((BEAR_STANDING)) + { + if (RandomInt(0, 100) < 25) + { + } + EmitSound(GetOwner(), 0, BEAR_VOLUME, 10); + } + if (RandomInt(0, 100) < 50) + { + } + if (GetMonsterHP() < STAND_HEALTH) + { + } + if (!(BEAR_STANDING)) + { + } + if ((BEAR_CANSTAND)) + { + } + if ((IS_HUNTING)) + { + } + if (CanSee(m_hLastSeen, "range") < 250) + { + } + bear_standup(); + } + + void game_postspawn() + { + if ((StringToLower(GetMapName())).findFirst("skycastle") == 0) + { + DROP_ITEM1_CHANCE = 0.0; + } + } + + void OnSpawn() override + { + SetHealth(170); + SetWidth(105); + SetHeight(95); + SetVolume(10); + SetModel("monsters/giant_bear.mdl"); + SetHearingSensitivity(8); + ANIM_ATTACK = "attack"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + BEAR_STANDING = 0; + BEAR_CANSTAND = 1; + BEAR_ISSTOMPATK = 0; + BEAR_ISDDEAD = 0; + } + + void OnPostSpawn() override + { + STAND_HEALTH = GetMonsterMaxHP(); + STAND_HEALTH *= 0.75; + } + + void frame_runstomp() + { + bear_shake(); + } + + void frame_attack1() + { + // PlayRandomSound from: BEAR_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {BEAR_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + BEAR_ISSTOMPATK = 0; + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + int SHOULD_PUSH_ENTITY = 1; + if ((BEAR_ISSTOMPATK)) + { + if (!(IsOnGround(m_hLastStruckByMe))) + { + SHOULD_PUSH_ENTITY = 0; + game.monster.canceldamage = 1; + } + } + if (!(SHOULD_PUSH_ENTITY)) return; + int FORWARDPUSH = 190; + float SIDEPUSH = Random(-60, 0); + int UPPUSH = 10; + if ((BEAR_ISDEAD)) + { + FORWARDPUSH = 100; + SIDEPUSH = 0; + UPPUSH = 200; + } + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(SIDEPUSH, FORWARDPUSH, UPPUSH)); + } + + void bear_standup() + { + BEAR_STANDING = 1; + ANIM_ATTACK = "upattack"; + ANIM_IDLE = "upidle"; + ANIM_WALK = "upwalk"; + ANIM_RUN = "upwalk"; + ATTACK_DAMAGE = ATTACK_STANDING_DAMAGE; + RandomInt(7, 15)("bear_getdown"); + SetIdleAnim("upidle"); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("all", 0.6); + PlayAnim("critical", "getup"); + AS_ATTACKING = GetGameTime(); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_GETUP_GROWL, BEAR_VOLUME); + } + + void bear_getdown() + { + BEAR_STANDING = 0; + BEAR_CANSTAND = 0; + ANIM_ATTACK = "attack"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ATTACK_DAMAGE = ATTACK_NORMAL_DAMAGE; + CAN_ATTACK = 0; + SetIdleAnim("idle"); + SetMoveAnim(ANIM_WALK); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", "getdown"); + SetDamageResistance("all", 1); + bear_stomp(); + ScheduleDelayedEvent(15, "bear_resetstand"); + ScheduleDelayedEvent(3, "bear_falldelay"); + } + + void bear_falldelay() + { + CAN_ATTACK = 1; + } + + void frame_getup() + { + EmitSound(GetOwner(), CHAN_VOICE, SOUND_GETUP, BEAR_VOLUME); + } + + void frame_upstep() + { + bear_walkeffect(); + } + + void frame_hitground() + { + bear_shake(); + bear_stomp(); + } + + void bear_resetstand() + { + BEAR_CANSTAND = 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_DEATH, SOUND_DEATH2 + array sounds = {SOUND_DEATH, SOUND_DEATH2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((BEAR_STANDING)) + { + ANIM_DEATH = "updeath"; + } + PlayAnim("critical", ANIM_DEATH); + BEAR_ISDEAD = 1; + } + + void bear_shake() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 190, 20, 1, 256); + EmitSound(GetOwner(), SOUND_GETDOWN); + } + + void bear_walkeffect() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 128, 10, 1, 128); + // PlayRandomSound from: SOUND_UPSTEP1, SOUND_UPSTEP2 + array sounds = {SOUND_UPSTEP1, SOUND_UPSTEP2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void bear_stomp() + { + BEAR_ISSTOMPATK = 1; + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), ATTACK_STOMPRANGE, ATTACK_STOMPDMG, 1.0, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_black.as b/scripts/angelscript/monsters/bear_black.as new file mode 100644 index 00000000..81c3d350 --- /dev/null +++ b/scripts/angelscript/monsters/bear_black.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "monsters/bear_base.as" + +namespace MS +{ + +class BearBlack : CGameScript +{ + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int MOVE_RANGE; + int NPC_BASE_EXP; + float RETALIATE_CHANGETARGET_CHANCE; + + BearBlack() + { + MOVE_RANGE = 70; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 200; + ATTACK_DAMAGE = "$rand(5,7)"; + ATTACK_HITCHANCE = 0.6; + NPC_BASE_EXP = 40; + RETALIATE_CHANGETARGET_CHANCE = 0.5; + DROP_ITEM1 = "skin_bear"; + DROP_ITEM1_CHANCE = 0.75; + } + + void OnSpawn() override + { + SetHealth(140); + SetWidth(64); + SetHeight(95); + SetName("Black bear"); + SetHearingSensitivity(3); + SetModel("monsters/bear.mdl"); + SetModelBody(0, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_brown.as b/scripts/angelscript/monsters/bear_brown.as new file mode 100644 index 00000000..11c146a8 --- /dev/null +++ b/scripts/angelscript/monsters/bear_brown.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "monsters/bear_base.as" + +namespace MS +{ + +class BearBrown : CGameScript +{ + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int MOVE_RANGE; + int NPC_BASE_EXP; + float RETALIATE_CHANGETARGET_CHANCE; + + BearBrown() + { + MOVE_RANGE = 70; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 200; + ATTACK_DAMAGE = "$rand(10,15)"; + ATTACK_HITCHANCE = 0.6; + NPC_BASE_EXP = 50; + RETALIATE_CHANGETARGET_CHANCE = 0.5; + DROP_ITEM1 = "skin_bear"; + DROP_ITEM1_CHANCE = 0.75; + } + + void OnSpawn() override + { + SetHealth(180); + SetWidth(64); + SetHeight(95); + SetName("Brown Bear"); + SetHearingSensitivity(3); + SetModel("monsters/bear.mdl"); + SetModelBody(0, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_cub_black.as b/scripts/angelscript/monsters/bear_cub_black.as new file mode 100644 index 00000000..0b258eed --- /dev/null +++ b/scripts/angelscript/monsters/bear_cub_black.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "monsters/bear_base.as" + +namespace MS +{ + +class BearCubBlack : CGameScript +{ + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int MOVE_RANGE; + int NPC_BASE_EXP; + + BearCubBlack() + { + MOVE_RANGE = 60; + ATTACK_RANGE = 70; + ATTACK_HITRANGE = 120; + ATTACK_DAMAGE = "$rand(2.5,4)"; + ATTACK_DAMAGE = 6; + ATTACK_HITCHANCE = 0.6; + NPC_BASE_EXP = 20; + DROP_ITEM1 = "skin_bear"; + DROP_ITEM1_CHANCE = 0.5; + } + + void OnSpawn() override + { + SetHealth(50); + SetWidth(40); + SetHeight(80); + SetName("Black bear cub"); + SetHearingSensitivity(2); + SetModel("monsters/bearcub.mdl"); + SetModelBody(0, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_cub_brown.as b/scripts/angelscript/monsters/bear_cub_brown.as new file mode 100644 index 00000000..6a318ebf --- /dev/null +++ b/scripts/angelscript/monsters/bear_cub_brown.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "monsters/bear_base.as" + +namespace MS +{ + +class BearCubBrown : CGameScript +{ + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int MOVE_RANGE; + int NPC_BASE_EXP; + + BearCubBrown() + { + MOVE_RANGE = 60; + ATTACK_RANGE = 70; + ATTACK_HITRANGE = 120; + ATTACK_DAMAGE = "$rand(2.5,6)"; + ATTACK_HITCHANCE = 0.6; + NPC_BASE_EXP = 20; + DROP_ITEM1 = "skin_bear"; + DROP_ITEM1_CHANCE = 0.5; + } + + void OnSpawn() override + { + SetHealth(50); + SetWidth(40); + SetHeight(80); + SetName("Brown bear cub"); + SetHearingSensitivity(2); + SetModel("monsters/bearcub.mdl"); + SetModelBody(0, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_cub_polar.as b/scripts/angelscript/monsters/bear_cub_polar.as new file mode 100644 index 00000000..f1e561ce --- /dev/null +++ b/scripts/angelscript/monsters/bear_cub_polar.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "monsters/bear_base.as" +#include "monsters/base_ice_race.as" + +namespace MS +{ + +class BearCubPolar : CGameScript +{ + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int MOVE_RANGE; + int NPC_BASE_EXP; + + BearCubPolar() + { + MOVE_RANGE = 60; + ATTACK_RANGE = 70; + ATTACK_HITRANGE = 120; + ATTACK_DAMAGE = "$rand(5,8)"; + ATTACK_HITCHANCE = 0.6; + NPC_BASE_EXP = 20; + DROP_ITEM1 = "skin_bear"; + DROP_ITEM1_CHANCE = 0.5; + } + + void OnSpawn() override + { + SetHealth(80); + SetWidth(40); + SetHeight(80); + SetName("Polar Bear Cub"); + SetHearingSensitivity(2); + SetDamageResistance("cold", 0.0); + SetModel("monsters/bearcub.mdl"); + SetModelBody(0, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_giant_black.as b/scripts/angelscript/monsters/bear_giant_black.as new file mode 100644 index 00000000..d5ea5816 --- /dev/null +++ b/scripts/angelscript/monsters/bear_giant_black.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "monsters/bear_base_giant.as" + +namespace MS +{ + +class BearGiantBlack : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_NORMAL_DAMAGE; + float ATTACK_STANDING_DAMAGE; + int ATTACK_STOMPDMG; + int ATTACK_STOMPRANGE; + int NPC_BASE_EXP; + + BearGiantBlack() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ATTACK_NORMAL_DAMAGE = 30; + ATTACK_STANDING_DAMAGE = Random(18, 33); + ATTACK_STOMPRANGE = 225; + ATTACK_STOMPDMG = 30; + ATTACK_HITCHANCE = 0.7; + NPC_BASE_EXP = 190; + } + + void OnSpawn() override + { + SetHealth(500); + SetName("Giant Black bear"); + SetModelBody(0, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_giant_brown.as b/scripts/angelscript/monsters/bear_giant_brown.as new file mode 100644 index 00000000..e1a1bbc5 --- /dev/null +++ b/scripts/angelscript/monsters/bear_giant_brown.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "monsters/bear_base_giant.as" + +namespace MS +{ + +class BearGiantBrown : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_NORMAL_DAMAGE; + float ATTACK_STANDING_DAMAGE; + int ATTACK_STOMPDMG; + int ATTACK_STOMPRANGE; + int NPC_BASE_EXP; + + BearGiantBrown() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ATTACK_NORMAL_DAMAGE = 15; + ATTACK_STANDING_DAMAGE = Random(18, 23); + ATTACK_STOMPRANGE = 160; + ATTACK_STOMPDMG = 10; + ATTACK_HITCHANCE = 0.7; + NPC_BASE_EXP = 90; + } + + void OnSpawn() override + { + SetHealth(200); + SetName("Giant brown bear"); + SetModelBody(0, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_giant_polar.as b/scripts/angelscript/monsters/bear_giant_polar.as new file mode 100644 index 00000000..0429f6e4 --- /dev/null +++ b/scripts/angelscript/monsters/bear_giant_polar.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "monsters/bear_base_giant.as" +#include "monsters/base_ice_race.as" + +namespace MS +{ + +class BearGiantPolar : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_NORMAL_DAMAGE; + int ATTACK_STANDING_DAMAGE; + int ATTACK_STOMPDMG; + int ATTACK_STOMPRANGE; + int NPC_BASE_EXP; + + BearGiantPolar() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ATTACK_NORMAL_DAMAGE = "$rand(40,80)"; + ATTACK_STANDING_DAMAGE = "$rand(40,58)"; + ATTACK_STOMPRANGE = 200; + ATTACK_STOMPDMG = 50; + ATTACK_HITCHANCE = 0.7; + NPC_BASE_EXP = 200; + } + + void OnSpawn() override + { + SetHealth(1600); + SetName("Giant Polar bear"); + SetDamageResistance("cold", 0.0); + SetModelBody(0, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_god_black.as b/scripts/angelscript/monsters/bear_god_black.as new file mode 100644 index 00000000..1300e2ff --- /dev/null +++ b/scripts/angelscript/monsters/bear_god_black.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bear_god_random.as" + +namespace MS +{ + +class BearGodBlack : CGameScript +{ + int BEAR_TYPE; + int OVERRIDE_BEAR; + + BearGodBlack() + { + OVERRIDE_BEAR = 1; + BEAR_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_god_brown.as b/scripts/angelscript/monsters/bear_god_brown.as new file mode 100644 index 00000000..50e7dab3 --- /dev/null +++ b/scripts/angelscript/monsters/bear_god_brown.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bear_god_random.as" + +namespace MS +{ + +class BearGodBrown : CGameScript +{ + int BEAR_TYPE; + int OVERRIDE_BEAR; + + BearGodBrown() + { + OVERRIDE_BEAR = 1; + BEAR_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_god_polar.as b/scripts/angelscript/monsters/bear_god_polar.as new file mode 100644 index 00000000..f1a9f3e6 --- /dev/null +++ b/scripts/angelscript/monsters/bear_god_polar.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bear_god_random.as" + +namespace MS +{ + +class BearGodPolar : CGameScript +{ + int BEAR_TYPE; + int OVERRIDE_BEAR; + + BearGodPolar() + { + OVERRIDE_BEAR = 1; + BEAR_TYPE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_god_random.as b/scripts/angelscript/monsters/bear_god_random.as new file mode 100644 index 00000000..0dd5fe93 --- /dev/null +++ b/scripts/angelscript/monsters/bear_god_random.as @@ -0,0 +1,431 @@ +#pragma context server + +#include "monsters/bear_base_giant.as" + +namespace MS +{ + +class BearGodRandom : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_INTRO; + string ANIM_RUN; + string ANIM_WALK; + int AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_NORMAL_DAMAGE; + int ATTACK_RANGE; + int ATTACK_STANDING_DAMAGE; + int ATTACK_STOMPDMG; + int ATTACK_STOMPRANGE; + int BEAR_ISSTOMPATK; + string BEAR_TYPE; + int BG_LOOP_COUNT; + string BG_LPLAYERS_INRANGE; + int BG_PUSH_ATK; + string BG_RANGE; + int BG_STAND_DELAY; + float DMG_STORM; + string FORWARDPUSH; + int FOUND_TARGET; + float FREQ_BOLT; + float FREQ_STAND; + float FREQ_STOMP; + float FREQ_TREE; + int GOLD_BAGS; + int GOLD_BAGS_PPLAYER; + int GOLD_MAX_BAGS; + int GOLD_PER_BAG; + int GOLD_RADIUS; + string INTRO_YAW; + int IN_INTRO; + int NPC_BASE_EXP; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_GIVE_EXP; + int NPC_IS_BOSS; + int NPC_MUST_SEE_TARGET; + int NPC_OVERSIZED; + string P_TARGET; + string SIDEPUSH; + int SMASH_DAMAGE; + string SOUND_ATTACK1; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + int STOMP_DELAY; + float STORM_DUR; + int STORM_RAD; + int SUSPEND_AI; + string UPPUSH; + + BearGodRandom() + { + NPC_OVERSIZED = 1; + NPC_BOSS_REGEN_RATE = 0.05; + NPC_BOSS_RESTORATION = 0.25; + NPC_BASE_EXP = 4000; + NPC_IS_BOSS = 1; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ATTACK_STOMPRANGE = 512; + FREQ_STOMP = 20.0; + FREQ_STAND = "$randf(15,25)"; + FREQ_BOLT = "$randf(10,20)"; + FREQ_TREE = "$randf(20,30)"; + DMG_STORM = 20.0; + STORM_DUR = 60.0; + STORM_RAD = 1024; + SMASH_DAMAGE = "$rand(50,150)"; + ATTACK_NORMAL_DAMAGE = "$rand(40,80)"; + ATTACK_STANDING_DAMAGE = "$rand(40,58)"; + ATTACK_STOMPRANGE = 200; + ATTACK_STOMPDMG = 50; + ATTACK_HITCHANCE = 0.7; + NPC_GIVE_EXP = 2000; + GOLD_BAGS = 1; + GOLD_BAGS_PPLAYER = 4; + GOLD_PER_BAG = 50; + GOLD_RADIUS = 200; + GOLD_MAX_BAGS = 32; + SOUND_ATTACK1 = "monsters/bear/giantbearattack.wav"; + SOUND_STRUCK4 = "monsters/bear/giantbearpain.wav"; + SOUND_STRUCK5 = "none"; + NPC_MUST_SEE_TARGET = 0; + Precache("magic/boom.wav"); + Precache("weather/Storm_exclamation.wav"); + Precache("weather/lightning.wav"); + Precache("magic/eraticlightfail.wav"); + Precache("magic/lightning_strike_replica.wav"); + Precache("monsters/dewm_shrub.mdl"); + Precache("monsters/dewm_bush.mdl"); + Precache("monsters/dewm_tree.mdl"); + Precache("cactusgibs.mdl"); + Precache("debris/bustflesh1.wav"); + Precache("zombie/claw_miss1.wav"); + Precache("headcrab/hc_attack1.wav"); + Precache("weapons/bow/crossbow.wav"); + Precache("weapons/bow/stretch.wav"); + Precache("weapons/xbow_hitbod1.wav"); + Precache("weapons/xbow_hitbod2.wav"); + } + + void game_precache() + { + Precache("weather/sfx_weather_snow"); + Precache("weather/sfx_weather_fog_black"); + Precache("weather/sfx_weather_rain_storm"); + Precache("monsters/summon/uber_blizzard"); + Precache("monsters/summon/stun_burst"); + Precache("monsters/summon/shock_beam"); + Precache("monsters/summon/doom_plant"); + } + + void OnSpawn() override + { + SetHealth(6000); + SetModel("monsters/bear_huge.mdl"); + SetWidth(200); + SetHeight(96); + SetDamageResistance("stun", 0.3); + SetInvincible(true); + SetIdleAnim("upattack"); + SetMoveAnim("upattack"); + ScheduleDelayedEvent(0.1, "select_bear_type"); + IN_INTRO = 1; + ANIM_INTRO = "upattack"; + ScheduleDelayedEvent(0.1, "intro_loop"); + ScheduleDelayedEvent(3.0, "intro_down"); + ScheduleDelayedEvent(5.0, "end_intro"); + npcatk_suspend_ai(); + SetNoPush(true); + } + + void select_bear_type() + { + npcatk_suspend_ai(); + INTRO_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + SetAngles("face"); + SetDamageResistance("dark", 0.5); + if (!(OVERRIDE_BEAR)) + { + BEAR_TYPE = RandomInt(1, 3); + } + if (BEAR_TYPE == 1) + { + SetName("Bear God of the Frozen Tundra"); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 1.25); + SetModelBody(0, 0); + CallExternal("players", "ext_weather_change", "snow"); + ScheduleDelayedEvent(2.0, "make_uber_blizzard"); + UseTrigger("make_ice"); + SendInfoMsg("all", "The Bear God of the Frozen Tundra Has appeared..."); + } + if (BEAR_TYPE == 2) + { + SetName("Bear God of the Thundering Plains"); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("poison", 1.25); + SetModelBody(0, 1); + CallExternal("players", "ext_weather_change", "rain_storm"); + ScheduleDelayedEvent(10.0, "make_storm_bolt"); + UseTrigger("make_plains"); + SendInfoMsg("all", "The Bear God of the Thundering Plains Has appeared..."); + } + if (BEAR_TYPE == 3) + { + SetName("Bear God of the Black Forest"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + SetModelBody(0, 2); + SetGlobalVar("G_WEATHER_LOCK", "fog_black"); + CallExternal("players", "ext_weather_change", G_WEATHER_LOCK); + ScheduleDelayedEvent(10.0, "make_dewm_tree"); + UseTrigger("make_trees"); + SendInfoMsg("all", "The Bear God of the Black Forest Has appeared..."); + } + SetInvincible(false); + } + + void intro_loop() + { + if (!(IN_INTRO)) return; + AS_ATTACKING = 20; + SUSPEND_AI = 1; + SetAngles("face"); + PlayAnim("once", ANIM_INTRO); + SetIdleAnim(ANIM_INTRO); + SetMoveAnim(ANIM_INTRO); + ScheduleDelayedEvent(0.1, "intro_loop"); + } + + void intro_down() + { + AS_ATTACKING = 20; + SetAngles("face"); + ANIM_INTRO = "attack"; + } + + void end_intro() + { + SetAngles("face"); + IN_INTRO = 0; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + npcatk_resume_ai(); + string FIRST_DEST = GetMonsterProperty("origin"); + FIRST_TEST += /* TODO: $relpos */ $relpos(Vector3(0, INTRO_YAW, 0), Vector3(0, 1024, 0)); + SetMoveDest(FIRST_TEST); + } + + void OnPostSpawn() override + { + SetAngles("face"); + ATTACK_RANGE = 250; + ATTACK_HITRANGE = 275; + ATTACK_MOVERANGE = 200; + } + + void make_uber_blizzard() + { + if (!(GetMonsterProperty("isalive"))) return; + SpawnNPC("monsters/summon/uber_blizzard", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_STORM, STORM_DUR, STORM_RAD, 0.3 + string REFRESH_BLIZ = STORM_DUR; + REFRESH_BLIZ += 5; + REFRESH_BLIZ("make_uber_blizzard"); + } + + void bear_stomp() + { + if ((STOMP_DELAY)) return; + STOMP_DELAY = 1; + FREQ_STOMP("bg_reset_stomp_delay"); + ScheduleDelayedEvent(0.5, "repulse_stomp"); + BG_PUSH_ATK = 1; + } + + void repulse_stomp() + { + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 512, 0, SMASH_DAMAGE + } + + void bg_reset_stomp_delay() + { + STOMP_DELAY = 0; + } + + void bear_shake() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 380, 20, 1, 512); + EmitSound(GetOwner(), SOUND_GETDOWN); + } + + void bear_walkeffect() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 256, 10, 1, 256); + // PlayRandomSound from: SOUND_UPSTEP1, SOUND_UPSTEP2 + array sounds = {SOUND_UPSTEP1, SOUND_UPSTEP2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_attack1() + { + // PlayRandomSound from: BEAR_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {BEAR_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + BEAR_ISSTOMPATK = 0; + if (!(GetEntityRange(HUNT_LASTTARGET) < ATTACK_HITRANGE)) return; + DoDamage(m_hLastSeen, "direct", ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + BG_PUSH_ATK = 1; + } + + void npc_selectattack() + { + if ((BG_STAND_DELAY)) return; + BG_STAND_DELAY = 1; + FREQ_STAND("bg_reset_stand_delay"); + bear_standup(); + } + + void bg_reset_stand_delay() + { + BG_STAND_DELAY = 0; + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + int SHOULD_PUSH_ENTITY = 1; + if ((BEAR_ISSTOMPATK)) + { + if (!(IsOnGround(m_hLastStruckByMe))) + { + SHOULD_PUSH_ENTITY = 0; + game.monster.canceldamage = 1; + } + } + if (!(SHOULD_PUSH_ENTITY)) return; + int FORWARDPUSH = 190; + float SIDEPUSH = Random(-60, 0); + int UPPUSH = 10; + if ((BEAR_ISDEAD)) + { + FORWARDPUSH = 100; + SIDEPUSH = 0; + UPPUSH = 200; + } + if (!(BG_PUSH_ATK)) return; + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(SIDEPUSH, FORWARDPUSH, UPPUSH)); + BG_PUSH_ATK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetGlobalVar("G_WEATHER_LOCK", 0); + if (StringToLower(GetMapName()) == "tundra") + { + if ("game.players.totalhp" < 2000) + { + } + UseTrigger("mm_early_release"); + } + if (StringToLower(GetMapName()) == "skycastle") + { + CallExternal("players", "ext_clear_valid_gauntlets"); + CallExternal("players", "ext_play_music", GetOwner(), "Nashalrath.mp3"); + } + CallExternal("players", "ext_weather_change", "clear"); + CallExternal(GAME_MASTER, "gm_bear_god_death"); + } + + void make_storm_bolt() + { + FREQ_BOLT("make_storm_bolt"); + FOUND_TARGET = 0; + pick_player_inrange(2048); + if ((FOUND_TARGET)) + { + make_storm_bolt2(); + } + } + + void make_storm_bolt2() + { + string P_ORG = GetEntityOrigin(P_TARGET); + P_ORG = "z"; + SpawnNPC("monsters/summon/shock_beam", P_ORG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128, 7.0, 40, Vector3(255, 255, 0), 2.0 + } + + void pick_player_inrange() + { + GetAllPlayers(BG_LPLAYERS); + string N_TARGETS = GetTokenCount(BG_LPLAYERS, ";"); + BG_LOOP_COUNT = 0; + BG_RANGE = param1; + BG_LPLAYERS_INRANGE = ""; + for (int i = 0; i < N_TARGETS; i++) + { + filter_range_loop(); + } + string N_TARGETS = GetTokenCount(BG_LPLAYERS_INRANGE, ";"); + int RND_TARGET = RandomInt(1, N_TARGETS); + RND_TARGET -= 1; + P_TARGET = GetToken(BG_LPLAYERS, RND_TARGET, ";"); + if ((IsEntityAlive(P_TARGET))) + { + FOUND_TARGET = 1; + } + } + + void filter_range_loop() + { + string CUR_PLAYER = GetToken(BG_LPLAYERS, BG_LOOP_COUNT, ";"); + BG_LOOP_COUNT += 1; + if (GetEntityRange(CUR_PLAYER) <= BG_RANGE) + { + if (BG_LPLAYERS_INRANGE.length() > 0) BG_LPLAYERS_INRANGE += ";"; + BG_LPLAYERS_INRANGE += CUR_PLAYER; + } + } + + void make_dewm_tree() + { + FREQ_TREE("make_dewm_tree"); + if (!(N_TREES < 3)) return; + FOUND_TARGET = 0; + pick_player_inrange(2048); + if (!(FOUND_TARGET)) return; + string P_ORG = GetEntityOrigin(P_TARGET); + SpawnNPC("monsters/summon/doom_plant", P_ORG, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 20 + N_TREES += 1; + } + + void plant_died() + { + N_TREES -= 1; + } + + void npc_monster_stuck() + { + if (!(STUCK_COUNT > 2)) return; + CallExternal("all", "master_stuck"); + } + + void worldevent_time() + { + if (!(BEAR_TYPE == 3)) return; + ScheduleDelayedEvent(0.1, "re_black"); + } + + void re_black() + { + CallExternal("all", "game_playercmd_setweather", "fog_black", 1, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_guard1.as b/scripts/angelscript/monsters/bear_guard1.as new file mode 100644 index 00000000..fa85469f --- /dev/null +++ b/scripts/angelscript/monsters/bear_guard1.as @@ -0,0 +1,310 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class BearGuard1 : CGameScript +{ + int AM_LEAPING; + int AM_STANDING; + string ANIM_ATTACK; + string ANIM_CLAW_NORM; + string ANIM_CLAW_STAND; + string ANIM_DEATH; + string ANIM_DEATH_NORM; + string ANIM_DEATH_STAND; + string ANIM_FLINCH; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_IDLE_NORM; + string ANIM_IDLE_STAND; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_STANDDOWN; + string ANIM_STANDUP; + string ANIM_WALK; + string ANIM_WALK_NORM; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int CHECK_STAND_DELAY; + int DID_STUN; + int DMG_CLAW_NORM; + int DMG_CLAW_STAND; + int FLINCH_CHANCE; + int FLINCH_DELAY; + int FLINCH_HEALTH; + float FREQ_CHECK_STAND; + float FREQ_HOP; + float FREQ_STAND; + int LEAP_DELAY; + int LEAP_RANGE; + int LEAP_RANGE_MAX; + int NO_STUCK_CHECKS; + int NPC_BASE_EXP; + int NPC_FORCED_MOVEDEST; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_DEATH2; + string SOUND_GETDOWN; + string SOUND_GETUP; + string SOUND_GETUP_GROWL; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + string SOUND_UPSNARL; + int STAND_DELAY; + + BearGuard1() + { + ANIM_WALK = "bear_walk"; + ANIM_RUN = "bear_run"; + ANIM_IDLE = "bear_idle01"; + ANIM_FLINCH = "bear_flinch"; + ANIM_ATTACK = "bear_claw02"; + ANIM_DEATH = "bear_die02"; + ANIM_RUN_NORM = "bear_run"; + ANIM_WALK_NORM = "bear_walk"; + ANIM_HOP = "bear_pounce"; + ANIM_IDLE_NORM = "bear_idle01"; + ANIM_IDLE_STAND = "bear_standingidle01"; + ANIM_CLAW_STAND = "bear_claw"; + ANIM_CLAW_NORM = "bear_claw02"; + ANIM_DEATH_STAND = "bear_diestanding"; + ANIM_DEATH_NORM = "bear_die02"; + ANIM_STANDUP = "bear_standup"; + ANIM_STANDDOWN = "bear_standdown"; + ATTACK_MOVERANGE = 140; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 200; + CAN_FLINCH = 0; + FLINCH_CHANCE = 25; + FLINCH_HEALTH = 500; + FLINCH_DELAY = 10; + NPC_BASE_EXP = 200; + NPC_MUST_SEE_TARGET = 0; + DMG_CLAW_NORM = RandomInt(40, 60); + DMG_CLAW_STAND = RandomInt(30, 40); + FREQ_HOP = 5.0; + FREQ_CHECK_STAND = 1.0; + FREQ_STAND = Random(5, 10); + LEAP_RANGE = 256; + LEAP_RANGE_MAX = 512; + ATTACK_HITCHANCE = 90; + SOUND_DEATH = "monsters/bear/giantbeardeath.wav"; + SOUND_DEATH2 = "monsters/bear/giantbeardeath2.wav"; + SOUND_GETUP_GROWL = "monsters/bear/giantbeardeath2.wav"; + SOUND_GETUP = "monsters/troll/step1.wav"; + SOUND_GETDOWN = "monsters/troll/step2.wav"; + SOUND_UPSNARL = "monsters/bear/giantbearupsnarl.wav"; + SOUND_ATTACK1 = "monsters/bear/cubattack.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACK3 = "none"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_STRUCK4 = "monsters/bear/cubpain.wav"; + SOUND_STRUCK5 = "none"; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Bear Guardian"); + SetRace("wildanimal"); + SetHealth(800); + SetWidth(100); + SetHeight(80); + SetModel("monsters/bear_mean.mdl"); + SetRoam(true); + } + + void OnPostSpawn() override + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE_NORM); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((AM_STANDING)) + { + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + } + bear_getdown(); + } + if ((AM_STANDING)) return; + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (GetEntityRange(m_hAttackTarget) >= LEAP_RANGE) + { + if (GetEntityRange(m_hAttackTarget) <= LEAP_RANGE_MAX) + { + } + bear_leap(m_hAttackTarget); + } + if ((AM_LEAPING)) return; + if ((STAND_DELAY)) return; + if ((CHECK_STAND_DELAY)) return; + CHECK_STAND_DELAY = 1; + FREQ_CHECK_STAND("reset_check_stand_delay"); + if (GetEntityRange(m_hAttackTarget) <= ATTACK_RANGE) + { + if (!(AM_STANDING)) + { + } + bear_getup(); + } + } + + void reset_check_stand_delay() + { + CHECK_STAND_DELAY = 0; + } + + void bear_getup() + { + EmitSound(GetOwner(), 0, SOUND_GETUP_GROWL, 10); + CAN_FLINCH = 0; + ANIM_ATTACK = ANIM_CLAW_STAND; + PlayAnim("critical", ANIM_STANDUP); + ANIM_RUN = ANIM_IDLE_STAND; + ANIM_WALK = ANIM_IDLE_STAND; + ANIM_IDLE = ANIM_IDLE_STAND; + SetMoveAnim(ANIM_IDLE_STAND); + SetIdleAnim(ANIM_IDLE_STAND); + NO_STUCK_CHECKS = 1; + AM_STANDING = 1; + ScheduleDelayedEvent(1.0, "resume_flinch"); + } + + void bear_getdown() + { + CAN_FLINCH = 0; + ANIM_ATTACK = ANIM_CLAW_NORM; + PlayAnim("critical", ANIM_STANDDOWN); + ANIM_RUN = ANIM_RUN_NORM; + ANIM_WALK = ANIM_WALK_NORM; + ANIM_IDLE = ANIM_IDLE_NORM; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE_NORM); + AM_STANDING = 0; + ScheduleDelayedEvent(0.5, "resume_stuck"); + STAND_DELAY = 1; + FREQ_STAND("reset_stand_delay"); + } + + void reset_stand_delay() + { + STAND_DELAY = 0; + } + + void resume_stuck() + { + EmitSound(GetOwner(), 0, SOUND_GETDOWN, 10); + NO_STUCK_CHECKS = 0; + } + + void resume_flinch() + { + CAN_FLINCH = 1; + } + + void bear_leap() + { + if ((LEAP_DELAY)) return; + LEAP_DELAY = 1; + FREQ_HOP("reset_leap_delay"); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(param1); + EmitSound(GetOwner(), 0, SOUND_UPSNARL, 10); + PlayAnim("critical", ANIM_HOP); + AM_LEAPING = 1; + DID_STUN = 0; + ScheduleDelayedEvent(0.1, "bear_leap2"); + ScheduleDelayedEvent(0.5, "bear_leap_done"); + } + + void reset_leap_delay() + { + LEAP_DELAY = 0; + } + + void bear_leap_done() + { + AM_LEAPING = 0; + } + + void bear_leap2() + { + bear_leap_scan(); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 500, 100)); + } + + void bear_leap_scan() + { + if (!(AM_LEAPING)) return; + ScheduleDelayedEvent(0.1, "bear_leap_scan"); + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + if (!(DID_STUN)) + { + } + DID_STUN = 1; + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(0, 100, 100)); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void attack_sound() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npcatk_clear_targets() + { + bear_getdown(); + } + + void standclaw_1() + { + attack_sound(); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + npcatk_dodamage(m_hAttackTarget, "direct", DMG_CLAW_STAND, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + } + + void standclaw_2() + { + attack_sound(); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + npcatk_dodamage(m_hAttackTarget, "direct", DMG_CLAW_STAND, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + } + + void crawlclaw_1() + { + attack_sound(); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + npcatk_dodamage(m_hAttackTarget, "direct", DMG_CLAW_NORM, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + } + +} + +} diff --git a/scripts/angelscript/monsters/bear_kodiak.as b/scripts/angelscript/monsters/bear_kodiak.as new file mode 100644 index 00000000..ec31de78 --- /dev/null +++ b/scripts/angelscript/monsters/bear_kodiak.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/kodiak.as" + +namespace MS +{ + +class BearKodiak : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/bear_polar.as b/scripts/angelscript/monsters/bear_polar.as new file mode 100644 index 00000000..de8dc7b0 --- /dev/null +++ b/scripts/angelscript/monsters/bear_polar.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "monsters/bear_base.as" +#include "monsters/base_ice_race.as" + +namespace MS +{ + +class BearPolar : CGameScript +{ + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int MOVE_RANGE; + int NPC_BASE_EXP; + float RETALIATE_CHANGETARGET_CHANCE; + + BearPolar() + { + MOVE_RANGE = 70; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 200; + ATTACK_DAMAGE = "$rand(16,26)"; + ATTACK_HITCHANCE = 0.6; + NPC_BASE_EXP = 45; + RETALIATE_CHANGETARGET_CHANCE = 0.5; + DROP_ITEM1 = "skin_bear"; + DROP_ITEM1_CHANCE = 0.75; + } + + void OnSpawn() override + { + SetHealth(360); + SetWidth(64); + SetHeight(95); + SetName("Polar Bear"); + SetHearingSensitivity(4); + SetDamageResistance("cold", 0.0); + SetModel("monsters/bear.mdl"); + SetModelBody(0, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/beetle_base.as b/scripts/angelscript/monsters/beetle_base.as new file mode 100644 index 00000000..f141d48c --- /dev/null +++ b/scripts/angelscript/monsters/beetle_base.as @@ -0,0 +1,756 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class BeetleBase : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_ATTACK_CLAW; + string ANIM_ATTACK_GORE; + string ANIM_ATTACK_LEAP; + string ANIM_ATTACK_SLAM; + string ANIM_BACK_TO_FEET; + string ANIM_DEATH; + string ANIM_DEATH_NORMAL; + string ANIM_DEATH_ONBACK; + string ANIM_FLINCH; + string ANIM_FLY; + string ANIM_IDLE; + string ANIM_IDLE_DEFAULT; + string ANIM_IDLE_ONBACK; + string ANIM_RAWR; + string ANIM_RISE_FROM_GROUND; + string ANIM_RUN; + string ANIM_RUN_DEFAULT; + string ANIM_SPECIAL; + string ANIM_TO_BACK; + string ANIM_WALK; + string ANIM_WALK_DEFAULT; + int AOE_GORE; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + string ATTACK_HITRANGE; + string ATTACK_HITRANGE_CLAW; + string ATTACK_HITRANGE_GORE; + string ATTACK_HITRANGE_LEAP; + string ATTACK_MOVERANGE; + string ATTACK_RANGE; + string ATTACK_RANGE_CLAW; + string ATTACK_RANGE_GORE; + string ATTACK_RANGE_LEAP; + int BBET_BURROWER; + string BBET_BURROW_CLOUD_RADIUS; + int BBET_CAN_FLY; + int BBET_CAN_LEAP; + int BBET_CAN_SLAM; + string BBET_CL_SCRIPT; + int BBET_DID_FAKE_DEATH; + int BBET_DID_GROWL; + int BBET_FAKE_DEATH; + int BBET_FLYING; + int BBET_FLY_LEAP; + string BBET_GIANT_MODEL; + int BBET_GORE_PUSH_STR; + string BBET_HALF_HP; + int BBET_HORN; + string BBET_LARGE_MODEL; + float BBET_MAX_FLY_TIME; + string BBET_NEXT_FLY; + string BBET_NEXT_FLY_LEAP; + int BBET_ONBACK; + int BBET_RENDERAMT; + int BBET_RISE_FINALIZED; + int BBET_SIZE; + string BBET_SLAM_RADIUS; + int BBET_WAITING_TO_DROP; + string BBET_WILL_FAKE_DEATH; + string BBET_WINGS_CL_IDX; + string DMGTYPE_GORE; + int DMG_GORE; + int DMG_LEAP; + int DMG_SLAM; + int DMG_SLASH; + float FREQ_ALERT; + float FREQ_FLY; + float FREQ_FLY_LEAP; + float FREQ_FORCE_GORE; + float FREQ_SEARCH; + float FREQ_SLAM; + int GORE_ATTACK; + int LEAP_ATTACK; + string NEXT_ALERT; + string NEXT_FORCE_GORE; + string NEXT_SEARCH; + string NEXT_SLAM; + int NPC_NO_ATTACK; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_CHITTER_LOOP; + string SOUND_DEATH; + string SOUND_DIG1; + string SOUND_DIG2; + string SOUND_DIGWARN; + string SOUND_FLY_LOOP; + string SOUND_GIBBED; + string SOUND_GROWL; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_LAND; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SLAM; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_SWIPE; + + BeetleBase() + { + ANIM_WALK = "bug_walk"; + ANIM_IDLE = "bug_idle"; + ANIM_RUN = "bug_run"; + ANIM_ATTACK = "bug_leapatk"; + ANIM_DEATH = "bug_death"; + ANIM_FLINCH = "bug_flinch"; + ANIM_RUN_DEFAULT = "bug_run"; + ANIM_WALK_DEFAULT = "bug_walk"; + ANIM_IDLE_DEFAULT = "bug_idle"; + ANIM_ATTACK_LEAP = "bug_leapatk"; + ANIM_ATTACK_CLAW = "bug_claw_up"; + ANIM_ATTACK_GORE = "bug_gore"; + ANIM_ATTACK_SLAM = "bug_slam"; + ANIM_TO_BACK = "bug_toback"; + ANIM_BACK_TO_FEET = "bug_backtofeet"; + ANIM_IDLE_ONBACK = "bug_onback"; + ANIM_DEATH_ONBACK = "bug_back_to_death"; + ANIM_DEATH_NORMAL = "bug_death"; + ANIM_FLY = "bug_jump"; + ANIM_SPECIAL = "bug_conjure"; + ANIM_RISE_FROM_GROUND = "bug_rise"; + ANIM_RAWR = "bug_rawr"; + ANIM_ALERT = "bug_alert"; + BBET_LARGE_MODEL = "monsters/beetles.mdl"; + BBET_GIANT_MODEL = "monsters/beetles_giant.mdl"; + BBET_SIZE = 1; + BBET_CAN_FLY = 1; + BBET_CAN_LEAP = 1; + BBET_CAN_SLAM = 0; + BBET_GORE_PUSH_STR = 400; + BBET_FAKE_DEATH = RandomInt(0, 1); + BBET_MAX_FLY_TIME = 8.0; + BBET_HORN = 0; + FREQ_ALERT = 10.0; + FREQ_SEARCH = 10.0; + FREQ_FORCE_GORE = 15.0; + FREQ_SLAM = Random(10.0, 20.0); + FREQ_FLY = Random(5.0, 15.0); + FREQ_FLY_LEAP = Random(20.0, 60.0); + AOE_GORE = 96; + DMG_SLASH = 60; + DMG_GORE = 120; + DMG_LEAP = 300; + DMG_SLAM = 400; + ATTACK_HITCHANCE = 0.9; + DMGTYPE_GORE = "pierce"; + BBET_CL_SCRIPT = "monsters/beetle_base_cl"; + SOUND_ATTACK1 = "monsters/beetle/attack_single1.wav"; + SOUND_ATTACK2 = "monsters/beetle/attack_single2.wav"; + SOUND_ATTACK3 = "monsters/beetle/attack_single3.wav"; + SOUND_SWIPE = "zombie/claw_miss1.wav"; + SOUND_GROWL = "monsters/beetle/distract1.wav"; + SOUND_DIG1 = "monsters/beetle/dig1.wav"; + SOUND_DIG2 = "monsters/beetle/dig2.wav"; + SOUND_DIGWARN = "monsters/beetle/rumble1.wav"; + SOUND_IDLE1 = "monsters/beetle/idle1.wav"; + SOUND_IDLE2 = "monsters/beetle/idle2.wav"; + SOUND_IDLE3 = "monsters/beetle/idle3.wav"; + SOUND_IDLE4 = "monsters/beetle/idle4.wav"; + SOUND_IDLE5 = "monsters/beetle/idle5.wav"; + SOUND_FLY_LOOP = "monsters/beetle/fly1.wav"; + SOUND_CHITTER_LOOP = "monsters/beetle/charge_loop1.wav"; + SOUND_LAND = "monsters/beetle/land1.wav"; + SOUND_SLAM = "magic/boom.wav"; + SOUND_PAIN1 = "monsters/beetle/pain1.wav"; + SOUND_PAIN2 = "monsters/beetle/pain2.wav"; + SOUND_STRUCK1 = "monsters/beetle/shell_impact1.wav"; + SOUND_STRUCK2 = "monsters/beetle/shell_impact2.wav"; + SOUND_STRUCK3 = "monsters/beetle/shell_impact3.wav"; + SOUND_STRUCK4 = "monsters/beetle/shell_impact4.wav"; + SOUND_GIBBED = "monsters/beetle/squashed.wav"; + SOUND_DEATH = "monsters/beetle/pain2.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(8.0, 15.0)); + if ((IsEntityAlive(GetOwner()))) + { + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnSpawn() override + { + if (BBET_SIZE == 1) + { + SetModel(BBET_LARGE_MODEL); + SetWidth(40); + SetHeight(40); + ATTACK_MOVERANGE = 48; + ATTACK_RANGE = 130; + ATTACK_HITRANGE = 160; + ATTACK_RANGE_LEAP = 150; + ATTACK_HITRANGE_LEAP = 175; + ATTACK_RANGE_GORE = 64; + ATTACK_HITRANGE_GORE = 100; + ATTACK_RANGE_CLAW = 32; + ATTACK_HITRANGE_CLAW = 64; + BBET_SLAM_RADIUS = 128; + BBET_BURROW_CLOUD_RADIUS = 64; + } + if (BBET_SIZE == 2) + { + SetModel(BBET_GIANT_MODEL); + SetWidth(72); + SetHeight(72); + ATTACK_MOVERANGE = 64; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 150; + ATTACK_RANGE_GORE = 80; + ATTACK_HITRANGE_GORE = 150; + ATTACK_RANGE_CLAW = 48; + ATTACK_HITRANGE_CLAW = 96; + BBET_SLAM_RADIUS = 256; + BBET_BURROW_CLOUD_RADIUS = 128; + } + SetRace("spider"); + SetHearingSensitivity(4); + SetRoam(true); + if (!(BBET_BURROWER)) + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + BBET_WILL_FAKE_DEATH = BBET_FAKE_DEATH; + beetle_spawn(); + } + + void OnPostSpawn() override + { + BBET_HALF_HP = GetEntityMaxHealth(GetOwner()); + BBET_HALF_HP /= 2; + if (BBET_SIZE == 2) + { + SetStepSize(16); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(BBET_CAN_FLY)) return; + if ((BBET_ONBACK)) return; + if ((SUSPEND_AI)) return; + if ((BBET_FLYING)) return; + if ((I_R_FROZEN)) return; + if (!(GetGameTime() > BBET_NEXT_FLY)) return; + if (m_hAttackTarget != "unset") + { + if (GetEntityRange(m_hAttackTarget) < 800) + { + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > 64) + { + bbet_fly_start(); + } + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE) + { + } + if (GetGameTime() > BBET_NEXT_FLY_LEAP) + { + } + BBET_NEXT_FLY_LEAP = GetGameTime(); + BBET_NEXT_FLY_LEAP += FREQ_FLY_LEAP; + bbet_fly_leap(); + } + if (!(BBET_FLYING)) return; + if (!(IsEntityAlive(GetOwner()))) return; + if (m_hAttackTarget != "unset") + { + if (!(BBET_FLY_LEAP)) + { + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > 64) + { + if (Z_DIFF < 384) + { + SetGravity(0); + float RND_LR = Random(-10, 10); + int FWD_SPEED = 110; + if (GetEntityRange(m_hAttackTarget) > 400) + { + int FWD_SPEED = 210; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_LR, FWD_SPEED, 200)); + } + else + { + SetGravity(0.5); + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + bbet_end_flight(); + } + else + { + string MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + if ((GetMonsterProperty("origin")).z == MY_GROUND) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 110, 200)); + } + } + } + else + { + SetGravity(0.5); + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + bbet_end_flight(); + } + else + { + string MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + if ((GetMonsterProperty("origin")).z == MY_GROUND) + { + } + LogDebug("stuck_ground"); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 110, 150)); + } + } + } + else + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + bbet_end_flight(); + } + else + { + LogDebug("leap_flight"); + SetGravity(0.5); + float RND_LR = Random(-10, 10); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_LR, 150, 200)); + } + } + } + else + { + bbet_end_flight(); + } + if (!(BBET_FLYING)) return; + if (!(STUCK_COUNT >= 1)) return; + bbet_end_flight(); + } + + void npc_selectattack() + { + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if ((BBET_CAN_LEAP)) + { + if (TARG_RANGE < ATTACK_RANGE_LEAP) + { + } + if (TARG_RANGE > ATTACK_RANGE_GORE) + { + } + ANIM_ATTACK = ANIM_ATTACK_LEAP; + } + if (TARG_RANGE < ATTACK_RANGE_GORE) + { + if (TARG_RANGE > ATTACK_RANGE_CLAW) + { + } + ANIM_ATTACK = ANIM_ATTACK_GORE; + } + if (TARG_RANGE < ATTACK_RANGE_CLAW) + { + ANIM_ATTACK = ANIM_ATTACK_CLAW; + if (GetGameTime() > NEXT_FORCE_GORE) + { + } + ANIM_ATTACK = ANIM_ATTACK_GORE; + } + if ((BBET_CAN_SLAM)) + { + if (GetGameTime() > NEXT_SLAM) + { + } + ANIM_ATTACK = ANIM_ATTACK_SLAM; + } + } + + void cycle_up() + { + if ((BBET_CAN_SLAM)) + { + NEXT_SLAM = GetGameTime(); + NEXT_SLAM += FREQ_SLAM; + } + if ((BBET_CAN_FLY)) + { + if (RandomInt(1, 2) == 1) + { + } + BBET_NEXT_FLY_LEAP = GetGameTime(); + BBET_NEXT_FLY_LEAP += FREQ_FLY_LEAP; + } + if (!(GetGameTime() > NEXT_ALERT)) return; + NEXT_ALERT = GetGameTime(); + NEXT_ALERT += FREQ_ALERT; + AS_ATTACKING = GetGameTime(); + int RND_ANIM = RandomInt(1, 2); + if (RND_ANIM == 1) + { + PlayAnim("critical", ANIM_ALERT); + } + if (RND_ANIM == 2) + { + PlayAnim("critical", ANIM_RAWR); + } + EmitSound(GetOwner(), 0, SOUND_GROWL, 10); + } + + void npc_targetsighted() + { + if ((BBET_DID_GROWL)) return; + BBET_DID_GROWL = 1; + AS_ATTACKING = GetGameTime(); + int RND_ANIM = RandomInt(1, 2); + if (RND_ANIM == 1) + { + PlayAnim("critical", ANIM_ALERT); + } + if (RND_ANIM == 2) + { + PlayAnim("critical", ANIM_RAWR); + } + EmitSound(GetOwner(), 0, SOUND_GROWL, 10); + } + + void cycle_down() + { + BBET_DID_GROWL = 0; + } + + void npcatk_lost_sight() + { + if (!(GetGameTime() > NEXT_SEARCH)) return; + NEXT_SEARCH = GetGameTime(); + NEXT_SEARCH += FREQ_SEARCH; + PlayAnim("once", ANIM_ALERT); + EmitSound(GetOwner(), 0, SOUND_GROWL, 10); + } + + void frame_gore_start() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_gore() + { + NEXT_FORCE_GORE = GetGameTime(); + NEXT_FORCE_GORE += FREQ_FORCE_GORE; + GORE_ATTACK = 1; + if (BBET_SIZE == 1) + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE_GORE, DMG_GORE, ATTACK_HITCHANCE, DMGTYPE_GORE); + } + else + { + XDoDamage(GetEntityProperty(GetOwner(), "attachpos"), AOE_GORE, DMG_GORE, 0, GetOwner(), GetOwner(), "none", DMGTYPE_GORE); + } + ScheduleDelayedEvent(0.1, "bbet_reset_gore_attack"); + } + + void frame_leap_start() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + // svplaysound: svplaysound 1 10 SOUND_CHITTER_LOOP + EmitSound(1, 10, SOUND_CHITTER_LOOP); + } + + void frame_leap_attack1() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE_LEAP, DMG_LEAP, ATTACK_HITCHANCE, "slash"); + LEAP_ATTACK = 1; + EmitSound(GetOwner(), 0, SOUND_LAND, 5); + // svplaysound: svplaysound 1 0 SOUND_CHITTER_LOOP + EmitSound(1, 0, SOUND_CHITTER_LOOP); + } + + void frame_claw_up() + { + if (RandomInt(1, 5) != 1) + { + EmitSound(GetOwner(), 0, SOUND_SWIPE, 10); + } + else + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + DoDamage(m_hAttackTarget, ATTACK_HITRANGE_CLAW, DMG_LEAP, ATTACK_HITCHANCE, "slash"); + } + + void bbet_reset_gore_attack() + { + GORE_ATTACK = 0; + } + + void game_dodamage() + { + if ((GORE_ATTACK)) + { + if (((param2 !is null))) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(-10, BBET_GORE_PUSH_STR, 110)); + } + if ((LEAP_ATTACK)) + { + if (((param2 !is null))) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(-10, BBET_GORE_PUSH_STR, 110)); + } + LEAP_ATTACK = 0; + } + + void frame_rise_done() + { + bbet_rise_complete(); + } + + void frame_slam_start() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_slam() + { + // PlayRandomSound from: SOUND_SLAM + array sounds = {SOUND_SLAM}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_SLAM = GetGameTime(); + NEXT_SLAM += FREQ_SLAM; + beetle_slam(); + } + + void frame_on_back() + { + PlayAnim("critical", ANIM_IDLE_ONBACK); + } + + void set_burrower() + { + BBET_BURROWER = 1; + SetProp(GetOwner(), "rendermode", 1); + SetProp(GetOwner(), "renderamt", 0); + SetIdleAnim(ANIM_RISE_FROM_GROUND); + SetMoveAnim(ANIM_RISE_FROM_GROUND); + ScheduleDelayedEvent(0.1, "bbet_burrower_effect"); + } + + void bbet_burrower_effect() + { + string EFFECT_ORG = GetEntityOrigin(GetOwner()); + EFFECT_ORG = "z"; + EmitSound(GetOwner(), 0, SOUND_DIG1, 10); + ClientEvent("new", "all", BBET_CL_SCRIPT, "burrow", EFFECT_ORG, BBET_BURROW_CLOUD_RADIUS); + BBET_RENDERAMT = 0; + bbet_burrower_effect_fadein(); + PlayAnim("critical", ANIM_RISE_FROM_GROUND); + } + + void bbet_burrower_effect_fadein() + { + BBET_RENDERAMT += 50; + if (BBET_RENDERAMT > 255) + { + BBET_RENDERAMT = 255; + } + SetProp(GetOwner(), "renderamt", BBET_RENDERAMT); + if (BBET_RENDERAMT < 255) + { + ScheduleDelayedEvent(0.1, "bbet_burrower_effect_fadein"); + } + if (!(BBET_RENDERAMT == 255)) return; + SetProp(GetOwner(), "rendermode", 0); + ScheduleDelayedEvent(2.0, "bbet_rise_complete"); + } + + void bbet_rise_complete() + { + if ((BBET_RISE_FINALIZED)) return; + BBET_RISE_FINALIZED = 1; + EmitSound(GetOwner(), 0, SOUND_DIG2, 10); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // svplaysound: svplaysound 1 0 SOUND_CHITTER_LOOP + EmitSound(1, 0, SOUND_CHITTER_LOOP); + // svplaysound: svplaysound 2 0 SOUND_FLY_LOOP + EmitSound(2, 0, SOUND_FLY_LOOP); + if ((BBET_ONBACK)) + { + ANIM_DEATH = ANIM_DEATH_ONBACK; + } + else + { + ANIM_DEATH = ANIM_DEATH_NORMAL; + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 10); + if (!(BBET_WILL_FAKE_DEATH)) return; + if ((BBET_DID_FAKE_DEATH)) return; + if ((BBET_FLYING)) return; + if (!(GetEntityHealth(GetOwner()) < BBET_HALF_HP)) return; + BBET_DID_FAKE_DEATH = 1; + bbet_fake_death(); + } + + void bbet_fake_death() + { + npcatk_suspend_movement(ANIM_IDLE_ONBACK); + PlayAnim("critical", ANIM_TO_BACK); + BBET_ONBACK = 1; + Random(4_0, 8_0)("bbet_get_up"); + } + + void bbet_get_up() + { + npcatk_resume_movement(); + PlayAnim("critical", ANIM_BACK_TO_FEET); + BBET_ONBACK = 0; + } + + void bbet_fly_leap() + { + BBET_FLY_LEAP = 1; + bbet_fly_start(); + } + + void bbet_fly_start() + { + BBET_FLYING = 1; + SetGravity(0); + SetModelBody(1, 1); + BBET_WINGS_CL_IDX = "game.script.last_sent_id"; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 200)); + if (!(BBET_FLY_LEAP)) + { + BBET_MAX_FLY_TIME("bbet_end_flight"); + } + else + { + ScheduleDelayedEvent(2.0, "bbet_end_flight"); + } + SetMoveAnim(ANIM_FLY); + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + NPC_NO_ATTACK = 1; + // svplaysound: svplaysound 2 10 SOUND_FLY_LOOP + EmitSound(2, 10, SOUND_FLY_LOOP); + } + + void bbet_end_flight() + { + if (!(BBET_FLYING)) return; + BBET_NEXT_FLY = GetGameTime(); + BBET_NEXT_FLY += FREQ_FLY; + BBET_FLYING = 0; + BBET_FLY_LEAP = 0; + // svplaysound: svplaysound 2 0 SOUND_FLY_LOOP + EmitSound(2, 0, SOUND_FLY_LOOP); + SetGravity(1); + ANIM_WALK = ANIM_WALK_DEFAULT; + ANIM_RUN = ANIM_RUN_DEFAULT; + SetMoveAnim(ANIM_RUN); + NPC_NO_ATTACK = 0; + SetModelBody(1, 0); + string MY_POS = GetEntityOrigin(GetOwner()); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(MY_POS); + if (!((MY_POS).z != GROUND_Z)) return; + BBET_WAITING_TO_DROP = 1; + ScheduleDelayedEvent(5.0, "bbet_stop_waiting_for_drop"); + bbet_wait_to_drop_loop(); + } + + void bbet_stop_waiting_for_drop() + { + BBET_WAITING_TO_DROP = 0; + } + + void bbet_wait_to_drop_loop() + { + if (!(BBET_WAITING_TO_DROP)) return; + string MY_POS = GetEntityOrigin(GetOwner()); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(MY_POS); + if ((MY_POS).z != GROUND_Z) + { + ScheduleDelayedEvent(0.1, "bbet_wait_to_drop_loop"); + } + else + { + EmitSound(GetOwner(), 0, SOUND_LAND, 10); + BBET_WAITING_TO_DROP = 0; + } + } + + void freeze_solid() + { + if (!(BBET_FLYING)) return; + bbet_end_flight(); + } + +} + +} diff --git a/scripts/angelscript/monsters/beetle_fire.as b/scripts/angelscript/monsters/beetle_fire.as new file mode 100644 index 00000000..c075a131 --- /dev/null +++ b/scripts/angelscript/monsters/beetle_fire.as @@ -0,0 +1,114 @@ +#pragma context server + +#include "monsters/beetle_base.as" + +namespace MS +{ + +class BeetleFire : CGameScript +{ + string ANIM_SPECIAL; + string AS_ATTACKING; + int BBET_CAN_FLY; + int BBET_CAN_LEAP; + int BBET_CAN_SLAM; + int BBET_FAKE_DEATH; + int BBET_GORE_PUSH_STR; + int BBET_SIZE; + int DMG_BURST; + int DMG_GORE; + int DMG_LEAP; + int DMG_SLASH; + float DOT_POISON; + int FLAME_JET_DMG; + int FLAME_JET_DOT; + float FREQ_SPIT; + string NEXT_SPIT; + int NPC_GIVE_EXP; + string POISON_TARGS; + string SOUND_POISON_BURST; + + BeetleFire() + { + NPC_GIVE_EXP = 1200; + BBET_SIZE = 1; + BBET_CAN_FLY = 1; + BBET_CAN_LEAP = 1; + BBET_CAN_SLAM = 0; + BBET_GORE_PUSH_STR = 300; + BBET_FAKE_DEATH = 1; + DMG_SLASH = 80; + DMG_GORE = 120; + DMG_LEAP = 150; + DOT_POISON = 100.0; + DMG_BURST = 400; + ANIM_SPECIAL = "bug_conjure"; + FREQ_SPIT = Random(5.0, 10.0); + SOUND_POISON_BURST = "weapons/explode3.wav"; + FLAME_JET_DMG = 100; + FLAME_JET_DOT = 100; + } + + void game_precache() + { + Precache("monsters/beetles.mdl"); + Precache("cactusgibs.mdl"); + Precache("ambience/steamburst1.wav"); + Precache("explode1.spr"); + Precache("xfireball3.spr"); + } + + void beetle_spawn() + { + SetName("Fire Beetle"); + SetHealth(3500); + SetDamageResistance("fire", 0.0); + SetModelBody(0, 2); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + EmitSound(GetOwner(), 0, SOUND_POISON_BURST, 10); + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 256, DMG_BURST, 0, GetOwner(), GetOwner(), "none", "blunt"); + ClientEvent("new", "all", "effects/sfx_explode", GetEntityOrigin(GetOwner()), 256); + Effect("tempent", "gibs", "cactusgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, 50, 50, 15, 2.0); + POISON_TARGS = FindEntitiesInSphere("enemy", 256); + EmitSound(GetOwner(), 0, SOUND_POISON_BURST, 10); + if (!(POISON_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(POISON_TARGS, ";"); i++) + { + poison_affect_targets(); + } + } + + void poison_affect_targets() + { + string CUR_TARG = GetToken(POISON_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_POISON); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) > 200)) return; + if (!(false)) return; + if (!(GetGameTime() > NEXT_SPIT)) return; + NEXT_SPIT = GetGameTime(); + NEXT_SPIT += FREQ_SPIT; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_SPECIAL); + } + + void frame_spell() + { + TossProjectile("proj_flame_jet", /* TODO: $relpos */ $relpos(0, 64, 44), m_hAttackTarget, 300, DMG_SPIT, 2, "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/beetle_fire_giant.as b/scripts/angelscript/monsters/beetle_fire_giant.as new file mode 100644 index 00000000..d8d09d17 --- /dev/null +++ b/scripts/angelscript/monsters/beetle_fire_giant.as @@ -0,0 +1,158 @@ +#pragma context server + +#include "monsters/beetle_base.as" + +namespace MS +{ + +class BeetleFireGiant : CGameScript +{ + string ANIM_SPECIAL; + string AS_ATTACKING; + int BBET_CAN_FLY; + int BBET_CAN_LEAP; + int BBET_CAN_SLAM; + int BBET_FAKE_DEATH; + int BBET_GORE_PUSH_STR; + int BBET_HORN; + int BBET_SIZE; + int DMG_BURST; + int DMG_GORE; + int DMG_SLAM; + int DMG_SLASH; + float DOT_POISON; + int FLAME_JET_DMG; + int FLAME_JET_DOT; + float FREQ_SPIT; + string NEXT_SPIT; + int NPC_GIVE_EXP; + string POISON_TARGS; + string SLAM_POS; + string SOUND_POISON_BURST; + string SPIT_LIST; + int SPIT_TARG_IDX; + string STUN_TARGS; + + BeetleFireGiant() + { + NPC_GIVE_EXP = 5000; + BBET_SIZE = 2; + BBET_CAN_FLY = 0; + BBET_CAN_LEAP = 0; + BBET_CAN_SLAM = 1; + BBET_GORE_PUSH_STR = 300; + BBET_FAKE_DEATH = 0; + DMG_SLASH = 160; + DMG_GORE = 240; + DOT_POISON = 100.0; + DMG_BURST = 2000; + DMG_SLAM = 1000; + BBET_HORN = 1; + ANIM_SPECIAL = "bug_conjure"; + FREQ_SPIT = Random(10.0, 20.0); + SOUND_POISON_BURST = "weapons/explode3.wav"; + FLAME_JET_DMG = 200; + FLAME_JET_DOT = 200; + } + + void game_precache() + { + Precache("monsters/beetles_giant.mdl"); + Precache("cactusgibs.mdl"); + Precache("explode1.spr"); + Precache("xfireball3.spr"); + } + + void beetle_spawn() + { + SetName("Giant Fire Beetle"); + SetHealth(10000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetModelBody(0, 2); + } + + void beetle_slam() + { + SLAM_POS = GetEntityProperty(GetOwner(), "attachpos"); + SLAM_POS = "z"; + DoDamage(SLAM_POS, BBET_SLAM_RADIUS, DMG_SLAM, 1.0, 0); + ClientEvent("new", "all", "effects/sfx_stun_burst", SLAM_POS, 256, 0); + STUN_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(STUN_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(STUN_TARGS, ";"); i++) + { + affect_targets(); + } + } + + void affect_targets() + { + string CUR_TARG = GetToken(STUN_TARGS, i, ";"); + if (!(IsOnGround(CUR_TARG))) return; + ApplyEffect(CUR_TARG, "effects/debuff_stun", 8.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(SLAM_POS, TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + EmitSound(GetOwner(), 0, SOUND_POISON_BURST, 10); + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 256, DMG_BURST, 0, GetOwner(), GetOwner(), "none", "generic"); + ClientEvent("new", "all", "effects/sfx_explode", GetEntityOrigin(GetOwner()), 512); + Effect("tempent", "gibs", "cactusgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, 50, 50, 15, 2.0); + POISON_TARGS = FindEntitiesInSphere("enemy", 512); + EmitSound(GetOwner(), 0, SOUND_POISON_BURST, 10); + if (!(POISON_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(POISON_TARGS, ";"); i++) + { + poison_affect_targets(); + } + } + + void poison_affect_targets() + { + string CUR_TARG = GetToken(POISON_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_POISON); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (!(GetGameTime() > NEXT_SPIT)) return; + NEXT_SPIT = GetGameTime(); + NEXT_SPIT += FREQ_SPIT; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_SPECIAL); + } + + void frame_spell() + { + SPIT_LIST = FindEntitiesInSphere("enemy", 1024); + if (!(SPIT_LIST != "none")) return; + SPIT_TARG_IDX = 0; + spit_targets(); + } + + void spit_targets() + { + string CUR_SPIT_TARG = GetToken(SPIT_LIST, SPIT_TARG_IDX, ";"); + TossProjectile("proj_flame_jet", /* TODO: $relpos */ $relpos(0, 64, 28), CUR_SPIT_TARG, 300, DMG_SPIT, 2, "none"); + SPIT_TARG_IDX += 1; + string N_SPIT_TARGS = GetTokenCount(SPIT_LIST, ";"); + N_SPIT_TARGS -= 1; + if (!(SPIT_TARG_IDX < N_SPIT_TARGS)) return; + SPIT_TARG_IDX += 1; + ScheduleDelayedEvent(0.1, "spit_targets"); + } + +} + +} diff --git a/scripts/angelscript/monsters/beetle_horned.as b/scripts/angelscript/monsters/beetle_horned.as new file mode 100644 index 00000000..38baad53 --- /dev/null +++ b/scripts/angelscript/monsters/beetle_horned.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "monsters/beetle_base.as" + +namespace MS +{ + +class BeetleHorned : CGameScript +{ + int BBET_CAN_FLY; + int BBET_CAN_LEAP; + int BBET_CAN_SLAM; + int BBET_FAKE_DEATH; + int BBET_GORE_PUSH_STR; + int BBET_SIZE; + int DMG_GORE; + int DMG_LEAP; + int DMG_SLASH; + int NPC_GIVE_EXP; + + BeetleHorned() + { + NPC_GIVE_EXP = 300; + BBET_SIZE = 1; + BBET_CAN_FLY = 1; + BBET_CAN_LEAP = 1; + BBET_CAN_SLAM = 0; + BBET_GORE_PUSH_STR = 300; + BBET_FAKE_DEATH = 1; + DMG_SLASH = 20; + DMG_GORE = 30; + DMG_LEAP = 50; + } + + void game_precache() + { + Precache("monsters/beetles.mdl"); + } + + void beetle_spawn() + { + SetName("Horned Beetle"); + SetHealth(500); + SetModelBody(0, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/beetle_horned_giant.as b/scripts/angelscript/monsters/beetle_horned_giant.as new file mode 100644 index 00000000..e27325bc --- /dev/null +++ b/scripts/angelscript/monsters/beetle_horned_giant.as @@ -0,0 +1,85 @@ +#pragma context server + +#include "monsters/beetle_base.as" + +namespace MS +{ + +class BeetleHornedGiant : CGameScript +{ + int BBET_CAN_FLY; + int BBET_CAN_LEAP; + int BBET_CAN_SLAM; + int BBET_FAKE_DEATH; + int BBET_GORE_PUSH_STR; + int BBET_SIZE; + int DMG_GORE; + int DMG_SLAM; + int DMG_SLASH; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string SLAM_POS; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string STUN_TARGS; + + BeetleHornedGiant() + { + NPC_GIVE_EXP = 600; + BBET_SIZE = 2; + BBET_CAN_FLY = 0; + BBET_CAN_LEAP = 0; + BBET_CAN_SLAM = 1; + BBET_GORE_PUSH_STR = 800; + BBET_FAKE_DEATH = 0; + DMG_SLASH = 80; + DMG_GORE = 100; + DMG_SLAM = 300; + NPC_MUST_SEE_TARGET = 0; + SOUND_ATTACK1 = "monsters/beetle/attack_double1.wav"; + SOUND_ATTACK2 = "monsters/beetle/attack_double2.wav"; + SOUND_ATTACK3 = "monsters/beetle/attack_double3.wav"; + } + + void game_precache() + { + Precache("monsters/beetles_giant.mdl"); + Precache("magic/boom.wav"); + } + + void beetle_spawn() + { + SetName("Giant Horned Beetle"); + SetHealth(2000); + SetDamageResistance("all", 0.75); + SetModelBody(0, 0); + } + + void beetle_slam() + { + SLAM_POS = GetEntityProperty(GetOwner(), "attachpos"); + SLAM_POS = "z"; + DoDamage(SLAM_POS, BBET_SLAM_RADIUS, DMG_SLAM, 1.0, 0); + ClientEvent("new", "all", "effects/sfx_stun_burst", SLAM_POS, 256, 0); + STUN_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(STUN_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(STUN_TARGS, ";"); i++) + { + affect_targets(); + } + } + + void affect_targets() + { + string CUR_TARG = GetToken(STUN_TARGS, i, ";"); + if (!(IsOnGround(CUR_TARG))) return; + ApplyEffect(CUR_TARG, "effects/debuff_stun", 8.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(SLAM_POS, TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + +} + +} diff --git a/scripts/angelscript/monsters/beetle_venom.as b/scripts/angelscript/monsters/beetle_venom.as new file mode 100644 index 00000000..8d9975bb --- /dev/null +++ b/scripts/angelscript/monsters/beetle_venom.as @@ -0,0 +1,98 @@ +#pragma context server + +#include "monsters/beetle_base.as" + +namespace MS +{ + +class BeetleVenom : CGameScript +{ + int BBET_CAN_FLY; + int BBET_CAN_LEAP; + int BBET_CAN_SLAM; + int BBET_FAKE_DEATH; + int BBET_GORE_PUSH_STR; + int BBET_SIZE; + int DMG_BURST; + int DMG_GORE; + int DMG_LEAP; + int DMG_SLASH; + float DOT_POISON; + string FART_CL_IDX; + int NPC_GIVE_EXP; + string POISON_TARGS; + string SOUND_POISON_BURST; + + BeetleVenom() + { + NPC_GIVE_EXP = 600; + BBET_SIZE = 1; + BBET_CAN_FLY = 1; + BBET_CAN_LEAP = 1; + BBET_CAN_SLAM = 0; + BBET_GORE_PUSH_STR = 300; + BBET_FAKE_DEATH = 1; + DMG_SLASH = 40; + DMG_GORE = 60; + DMG_LEAP = 100; + DOT_POISON = 50.0; + DMG_BURST = 200; + SOUND_POISON_BURST = "weapons/explode3.wav"; + } + + void game_precache() + { + Precache("monsters/beetles.mdl"); + Precache("cactusgibs.mdl"); + Precache("ambience/steamburst1.wav"); + Precache("poison_cloud.spr"); + } + + void beetle_spawn() + { + SetName("Venomsack Beetle"); + SetHealth(1000); + SetModelBody(0, 1); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + EmitSound(GetOwner(), 0, SOUND_POISON_BURST, 10); + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 256, DMG_BURST, 0, GetOwner(), GetOwner(), "none", "poison"); + ClientEvent("new", "all", "effects/sfx_poison_explode", GetEntityOrigin(GetOwner()), 256); + Effect("tempent", "gibs", "cactusgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, 50, 50, 15, 2.0); + POISON_TARGS = FindEntitiesInSphere("enemy", 256); + EmitSound(GetOwner(), 0, SOUND_POISON_BURST, 10); + if (!(POISON_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(POISON_TARGS, ";"); i++) + { + poison_affect_targets(); + } + } + + void poison_affect_targets() + { + string CUR_TARG = GetToken(POISON_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_POISON); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void bbet_fly_start() + { + ClientEvent("new", "all", "monsters/beetle_venom_cl", GetEntityIndex(GetOwner()), 10.0); + FART_CL_IDX = "game.script.last_sent_id"; + } + + void bbet_end_flight() + { + if (!(BBET_FLYING)) return; + ClientEvent("update", "all", FART_CL_IDX, "remove_fx"); + } + +} + +} diff --git a/scripts/angelscript/monsters/beetle_venom_cl.as b/scripts/angelscript/monsters/beetle_venom_cl.as new file mode 100644 index 00000000..854547ee --- /dev/null +++ b/scripts/angelscript/monsters/beetle_venom_cl.as @@ -0,0 +1,66 @@ +#pragma context server + +namespace MS +{ + +class BeetleVenomCl : CGameScript +{ + int FX_ACTIVE; + string FX_OWNER; + string SPRITE_NAME; + int SPRITE_NFRAMES; + + BeetleVenomCl() + { + SPRITE_NAME = "poison_cloud.spr"; + SPRITE_NFRAMES = 17; + } + + void client_activate() + { + FX_OWNER = param1; + string FX_MAX_DURATION = param2; + FX_ACTIVE = 1; + fart_loop(); + FX_MAX_DURATION("remove_fx"); + } + + void remove_fx() + { + if (!(FX_ACTIVE)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(3.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void fart_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "fart_loop"); + string SPRITE_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string OWNER_YAW = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, -64, -32)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_sprite"); + } + + void setup_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0.5); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/monsters/beetle_venom_giant.as b/scripts/angelscript/monsters/beetle_venom_giant.as new file mode 100644 index 00000000..212d8eae --- /dev/null +++ b/scripts/angelscript/monsters/beetle_venom_giant.as @@ -0,0 +1,249 @@ +#pragma context server + +#include "monsters/beetle_base.as" + +namespace MS +{ + +class BeetleVenomGiant : CGameScript +{ + string ANIM_SPECIAL; + string APOISON_TARGS; + int BBET_CAN_FLY; + int BBET_CAN_LEAP; + int BBET_CAN_SLAM; + int BBET_FAKE_DEATH; + int BBET_GORE_PUSH_STR; + int BBET_SIZE; + int DMG_BURST; + int DMG_GORE; + int DMG_SLAM; + int DMG_SLASH; + int DOING_SLIME; + int DOT_APOISON; + int DOT_POISON; + int DOT_SLIME; + float FREQ_SLIME; + string NEXT_SLIME; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string POISON_TARGS; + string SLAM_POS; + float SLIME_ATTACK_DURATION; + string SLIME_TARGETS; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_POISON_BURST; + string SOUND_SLIME; + string SOUND_SLIME_LOOP; + string SPIN_ANG; + string STUN_TARGS; + + BeetleVenomGiant() + { + NPC_GIVE_EXP = 3000; + BBET_SIZE = 2; + BBET_CAN_FLY = 0; + BBET_CAN_LEAP = 0; + BBET_CAN_SLAM = 1; + BBET_GORE_PUSH_STR = 800; + BBET_FAKE_DEATH = 0; + DMG_SLASH = 160; + DMG_GORE = 150; + DMG_SLAM = 600; + DOT_APOISON = 50; + DOT_POISON = 100; + DOT_SLIME = 50; + DMG_BURST = 800; + SOUND_SLIME = "monsters/gonome/gonome_eat.wav"; + SOUND_SLIME_LOOP = "ambience/steamjet1.wav"; + ANIM_SPECIAL = "bug_conjure"; + FREQ_SLIME = Random(20.0, 30.0); + SLIME_ATTACK_DURATION = 4.0; + NPC_MUST_SEE_TARGET = 0; + SOUND_ATTACK1 = "monsters/beetle/attack_double1.wav"; + SOUND_ATTACK2 = "monsters/beetle/attack_double2.wav"; + SOUND_ATTACK3 = "monsters/beetle/attack_double3.wav"; + SOUND_POISON_BURST = "weapons/explode3.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if ((IsEntityAlive(GetOwner()))) + { + } + APOISON_TARGS = FindEntitiesInSphere("enemy", 256); + if (APOISON_TARGS != "none") + { + } + for (int i = 0; i < GetTokenCount(APOISON_TARGS, ";"); i++) + { + apoison_affect_targets(); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(10.0); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_poison_aura", GetEntityIndex(GetOwner()), 256, 10.0); + } + + void game_precache() + { + Precache("monsters/beetles_giant.mdl"); + Precache("magic/boom.wav"); + Precache("cactusgibs.mdl"); + Precache("ambience/steamburst1.wav"); + Precache("poison_cloud.spr"); + } + + void beetle_spawn() + { + SetName("Giant Venomsack"); + SetHealth(4000); + SetDamageResistance("all", 0.5); + SetDamageResistance("poison", 0.1); + SetModelBody(0, 1); + ClientEvent("new", "all", "effects/sfx_poison_aura", GetEntityIndex(GetOwner()), 256, 10.0); + } + + void beetle_slam() + { + SLAM_POS = GetEntityProperty(GetOwner(), "attachpos"); + SLAM_POS = "z"; + DoDamage(SLAM_POS, BBET_SLAM_RADIUS, DMG_SLAM, 1.0, 0); + ClientEvent("new", "all", "effects/sfx_stun_burst", SLAM_POS, 256, 0); + STUN_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(STUN_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(STUN_TARGS, ";"); i++) + { + affect_targets(); + } + } + + void affect_targets() + { + string CUR_TARG = GetToken(STUN_TARGS, i, ";"); + if (!(IsOnGround(CUR_TARG))) return; + ApplyEffect(CUR_TARG, "effects/debuff_stun", 8.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(SLAM_POS, TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void apoison_affect_targets() + { + string CUR_TARG = GetToken(APOISON_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_APOISON); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + EmitSound(GetOwner(), 0, SOUND_POISON_BURST, 10); + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 512, DMG_BURST, 0, GetOwner(), GetOwner(), "none", "poison_effect"); + ClientEvent("new", "all", "effects/sfx_poison_explode", GetEntityOrigin(GetOwner()), 512); + Effect("tempent", "gibs", "cactusgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, 50, 50, 15, 2.0); + POISON_TARGS = FindEntitiesInSphere("enemy", 512); + EmitSound(GetOwner(), 0, SOUND_POISON_BURST, 10); + if (!(POISON_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(POISON_TARGS, ";"); i++) + { + poison_affect_targets(); + } + } + + void poison_affect_targets() + { + string CUR_TARG = GetToken(POISON_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_POISON); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 200))); + } + + void cycle_up() + { + NEXT_SLIME = GetGameTime(); + NEXT_SLIME += FREQ_SLIME; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if ((DOING_SLIME)) return; + if (!(GetGameTime() > NEXT_SLIME)) return; + do_slime(); + } + + void do_slime() + { + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_SPECIAL); + PlayAnim("critical", ANIM_SPECIAL); + ClientEvent("new", "all", "monsters/beetle_venom_giant_cl", GetEntityIndex(GetOwner()), SLIME_ATTACK_DURATION); + // svplaysound: svplaysound 2 10 SOUND_SLIME_LOOP + EmitSound(2, 10, SOUND_SLIME_LOOP); + EmitSound(GetOwner(), 0, SOUND_SLIME, 10); + SPIN_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + DOING_SLIME = 1; + slime_scan(); + SLIME_ATTACK_DURATION("end_slime"); + } + + void end_slime() + { + DOING_SLIME = 0; + npcatk_resume_ai(); + npcatk_resume_movement(); + PlayAnim("once", "break"); + NEXT_SLIME = GetGameTime(); + NEXT_SLIME += FREQ_SLIME; + // svplaysound: svplaysound 2 0 SOUND_SLIME_LOOP + EmitSound(2, 0, SOUND_SLIME_LOOP); + } + + void slime_scan() + { + if (!(DOING_SLIME)) return; + ScheduleDelayedEvent(0.5, "slime_scan"); + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, SPIN_ANG, 0), Vector3(0, 100, 0)); + SPIN_ANG += 10; + if (SPIN_ANG > 359) + { + SPIN_ANG -= 359; + } + string SLIME_CENTER = GetEntityProperty(GetOwner(), "attachpos"); + SLIME_CENTER += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 128, 0)); + SLIME_CENTER = "z"; + SLIME_TARGETS = FindEntitiesInSphere("enemy", 96); + if (!(SLIME_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(SLIME_TARGETS, ";"); i++) + { + slime_affect_targets(); + } + } + + void slime_affect_targets() + { + string CUR_TARG = GetToken(SLIME_TARGETS, i, ";"); + if (!(GetEntityRange(CUR_TARG) < 256)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = TARG_ORG; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + ApplyEffect(CUR_TARG, "effects/dot_poison_blind", 5.0, GetEntityIndex(GetOwner()), DOT_SLIME); + } + +} + +} diff --git a/scripts/angelscript/monsters/beetle_venom_giant_cl.as b/scripts/angelscript/monsters/beetle_venom_giant_cl.as new file mode 100644 index 00000000..d6722003 --- /dev/null +++ b/scripts/angelscript/monsters/beetle_venom_giant_cl.as @@ -0,0 +1,62 @@ +#pragma context server + +namespace MS +{ + +class BeetleVenomGiantCl : CGameScript +{ + string CLOUD_ANG; + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + fx_loop(); + FX_DURATION("end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "fx_loop"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + CLOUD_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud"); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + float RND_RL = Random(-10, 10); + float RND_UD = Random(-220, -180); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, 400, RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/bgoblin.as b/scripts/angelscript/monsters/bgoblin.as new file mode 100644 index 00000000..691d1f1e --- /dev/null +++ b/scripts/angelscript/monsters/bgoblin.as @@ -0,0 +1,463 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Bgoblin : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BOW; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_PARRY; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WARCRY; + string AS_ATTACKING; + string ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string CAN_FIREBALL; + int CAN_FLINCH; + string CAN_STUN; + int CHARGE_SPEED; + string DBL_JUMP; + int DMG_AXE; + int DMG_CLUB; + int DMG_FIREBALL; + int DMG_FIREBALL_DOT; + int DMG_SWORD; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_HEALTH; + float FREQ_CHARGE; + float FREQ_FIREBALL; + string F_GOB_TYPE; + int GOBLIN_JUMPRANGE; + int GOB_CHARGER; + int GOB_CHARGE_MAX_DIST; + int GOB_CHARGE_MIN_DIST; + int GOB_JUMPER; + int GOB_JUMP_SCANNING; + int GOB_TYPE; + int GOB_TYPE_SET; + int MIN_FIREBALL_DIST; + int MOVE_RANGE; + int NEW_MODEL; + string NEXT_FIREBALL; + string NEXT_LEAP; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_GIVE_EXP; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_CHIEF_ALERT; + string SOUND_DEATH; + string SOUND_FIREBALL; + string SOUND_FIREBALL_CAST; + string SOUND_IDLE; + string SOUND_JUMP1; + string SOUND_JUMP2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PARRY1; + string SOUND_PARRY2; + string SOUND_PARRY3; + string SOUND_SHAM_ALERT; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string STUN_LIST; + int TOSS_FIREBALL; + + Bgoblin() + { + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 80; + ATTACK_MOVERANGE = 48; + MOVE_RANGE = 48; + NPC_GIVE_EXP = 200; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 15); + NPC_ALLY_RESPONSE_RANGE = 4096; + ANIM_DEATH = "die_fallback"; + CAN_FLINCH = 1; + FLINCH_ANIM = "flinch"; + FLINCH_CHANCE = 0.25; + FLINCH_HEALTH = 100; + ANIM_SMASH = "battleaxe_swing1_L"; + ANIM_SWIPE = "swordswing1_L"; + ANIM_WARCRY = "warcry"; + ANIM_KICK = "kick"; + ANIM_BOW = "shootorcbow"; + DMG_CLUB = RandomInt(40, 75); + DMG_AXE = RandomInt(50, 60); + DMG_SWORD = RandomInt(25, 50); + GOB_TYPE = RandomInt(1, 3); + GOBLIN_JUMPRANGE = 512; + DMG_FIREBALL = 50; + DMG_FIREBALL_DOT = 10; + FREQ_FIREBALL = Random(20.0, 30.0); + GOB_JUMPER = 1; + ANIM_PARRY = "deflectcounter"; + CHARGE_SPEED = 600; + FREQ_CHARGE = 5.0; + GOB_CHARGER = 1; + GOB_CHARGE_MIN_DIST = 96; + GOB_CHARGE_MAX_DIST = 256; + MIN_FIREBALL_DIST = 96; + NEW_MODEL = 1; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN1 = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_PAIN2 = "monsters/goblin/c_gargoyle_hit2.wav"; + SOUND_ALERT1 = "monsters/goblin/c_goblin_bat1.wav"; + SOUND_ALERT2 = "monsters/goblin/c_goblin_bat2.wav"; + SOUND_IDLE = "monsters/goblin/c_goblin_slct.wav"; + SOUND_ATTACK1 = "monsters/goblin/c_goblin_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_goblin_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_goblin_atk3.wav"; + SOUND_FIREBALL_CAST = "monsters/goblin/c_gargoyle_slct.wav"; + SOUND_FIREBALL = "magic/fireball_strike.wav"; + SOUND_IDLE = "monsters/goblin/c_goblin_slct.wav"; + SOUND_JUMP1 = "monsters/goblin/c_goblin_hit1.wav"; + SOUND_JUMP2 = "monsters/goblin/c_goblin_hit2.wav"; + SOUND_PARRY1 = "body/armour1.wav"; + SOUND_PARRY2 = "body/armour2.wav"; + SOUND_PARRY3 = "body/armour3.wav"; + SOUND_CHIEF_ALERT = "monsters/goblin/c_goblinchf_bat1.wav"; + SOUND_SHAM_ALERT = "monsters/goblin/c_goblinwiz_bat1.wav"; + SOUND_DEATH = "monsters/goblin/c_goblin_dead.wav"; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + goblin_spawn(); + ScheduleDelayedEvent(1.0, "idle_mode"); + ScheduleDelayedEvent(0.01, "goblin_pre_spawn"); + } + + void goblin_pre_spawn() + { + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 80; + ATTACK_MOVERANGE = 48; + MOVE_RANGE = 48; + } + + void goblin_spawn() + { + SetName("Blood Goblin"); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + } + SetRace("goblin"); + SetBloodType("red"); + SetHealth(500); + SetRoam(true); + SetHearingSensitivity(2); + if (!(NEW_MODEL)) + { + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + else + { + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 1); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 1.25); + if (!(F_GOB_TYPE == "F_GOB_TYPE")) return; + ScheduleDelayedEvent(0.01, "goblin_set_weapon"); + } + + void goblin_set_weapon() + { + if ((GOB_TYPE_SET)) return; + GOB_TYPE_SET = 1; + if ((param1).findFirst(PARAM) == 0) + { + F_GOB_TYPE = GOB_TYPE; + } + else + { + F_GOB_TYPE = param1; + } + if (F_GOB_TYPE == 1) + { + SetModelBody(0, 0); + SetModelBody(2, 7); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.75; + string MY_HP = GetEntityHealth(GetOwner()); + MY_HP *= 1.5; + SetHealth(MY_HP); + CAN_STUN = 0; + } + if (F_GOB_TYPE == 2) + { + SetModelBody(0, 0); + SetModelBody(2, 1); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.8; + string MY_HP = GetEntityHealth(GetOwner()); + MY_HP *= 1.25; + SetHealth(MY_HP); + CAN_STUN = 0; + } + if (F_GOB_TYPE == 3) + { + CAN_FIREBALL = 1; + SetModelBody(0, 1); + SetModelBody(2, 4); + ANIM_ATTACK = ANIM_SWIPE; + ATTACK_HITCHANCE = 0.9; + CAN_STUN = 0; + } + } + + void swing_axe() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (F_GOB_TYPE == 1) + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLUB, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:swing"); + } + if (F_GOB_TYPE == 2) + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "slash", "dmgevent:swing"); + } + } + + void swing_sword() + { + if ((TOSS_FIREBALL)) + { + toss_fireball(); + } + if ((TOSS_FIREBALL)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWORD, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "slash", "dmgevent:swing"); + } + + void toss_fireball() + { + TOSS_FIREBALL = 0; + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 48, 0), m_hAttackTarget, 400, DMG_FIREBALL, 0.5, "none"); + CallExternal("ent_lastprojectile", "lighten", DMG_FIREBALL_DOT, 0.01); + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + gob_hunt(); + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if ((SUSPEND_AI)) return; + if ((I_R_FROZEN)) return; + if ((CAN_FIREBALL)) + { + if (!(IS_FLEEING)) + { + } + if (GetGameTime() > NEXT_FIREBALL) + { + } + prep_fireball(); + } + if (!(GOB_CHARGER)) return; + if (!(GetGameTime() > NEXT_LEAP)) return; + if (!(GetEntityRange(m_hAttackTarget) > GOB_CHARGE_MIN_DIST)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOB_CHARGE_MAX_DIST)) return; + if ((I_R_FROZEN)) return; + leap_forward(); + } + + void prep_fireball() + { + if (!(GetEntityRange(m_hAttackTarget) > MIN_FIREBALL_DIST)) return; + if (!(false)) return; + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + TOSS_FIREBALL = 1; + PlayAnim("critical", ANIM_SWIPE); + EmitSound(GetOwner(), 0, SOUND_FIREBALL_CAST, 10); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + } + + void leap_forward() + { + NEXT_LEAP = GetGameTime(); + NEXT_LEAP += FREQ_CHARGE; + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2 + array sounds = {SOUND_JUMP1, SOUND_JUMP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_SMASH); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, CHARGE_SPEED, 100)); + ScheduleDelayedEvent(0.5, "leap_stun"); + } + + void leap_stun() + { + STUN_LIST = FindEntitiesInSphere("enemy", 64); + if (!(STUN_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(STUN_LIST, ";"); i++) + { + stun_targets(); + } + } + + void stun_targets() + { + string CUR_TARGET = GetToken(STUN_LIST, i, ";"); + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(0, 200, 120)); + if ((CAN_STUN)) + { + ApplyEffect(CUR_TARGET, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + } + } + + void cycle_up() + { + gob_cycle_up(); + } + + void gob_cycle_up() + { + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += Random(10, 30); + if ((GOB_JUMP_SCANNING)) return; + GOB_JUMP_SCANNING = 1; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + gob_jump_check(); + } + + void cycle_down() + { + GOB_JUMP_SCANNING = 0; + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(1.0, "idle_mode"); + } + + void gob_jump_check() + { + if (!(GOB_JUMPER)) return; + if (!(GOB_JUMP_SCANNING)) return; + float GOB_HOP_DELAY = Random(2, 4); + GOB_HOP_DELAY("gob_jump_check"); + if (!(m_hAttackTarget != "unset")) return; + if ((I_R_FROZEN)) return; + if ((IS_FLEEING)) return; + if ((SUSPEND_AI)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOBLIN_JUMPRANGE)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > GOB_JUMP_THRESH) + { + if (TARGET_Z_DIFFERENCE < 500) + { + } + PlayAnim("critical", ANIM_SMASH); + ScheduleDelayedEvent(0.1, "gob_hop"); + } + } + + void gob_hop() + { + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2 + array sounds = {SOUND_JUMP1, SOUND_JUMP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + int JUMP_HEIGHT = RandomInt(350, 550); + if ((DBL_JUMP)) + { + JUMP_HEIGHT *= 2.0; + DBL_JUMP = 0; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + } + + void idle_mode() + { + if (!(m_hAttackTarget == "unset")) return; + if (!(false)) return; + SetMoveDest(m_hLastSeen); + PlayAnim("once", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + Random(10, 20)("idle_mode"); + CallExternal(m_hLastSeen, "ext_faceme", GetEntityIndex(GetOwner())); + } + + void ext_faceme() + { + if (!(m_hAttackTarget == "unset")) return; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "reply_anim"); + } + + void reply_anim() + { + PlayAnim("once", ANIM_WARCRY); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + +} + +} diff --git a/scripts/angelscript/monsters/bgoblin_chief.as b/scripts/angelscript/monsters/bgoblin_chief.as new file mode 100644 index 00000000..62114b17 --- /dev/null +++ b/scripts/angelscript/monsters/bgoblin_chief.as @@ -0,0 +1,354 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class BgoblinChief : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int AXE_SWING; + string BREATH_ANG; + int BREATH_COUNT; + int CAN_STUN; + string CLOUD_TARGS; + string CL_IDX; + int DMG_AXE; + int DMG_CHARGE; + int DOT_FIRE; + int DROP_GOLD; + int FIRE_BREATH_ON; + string FIRE_BREATH_SCRIPT; + float FREQ_BREATH; + int MOVE_RANGE; + int NEW_MODEL; + string NEXT_SCAN; + int NPC_BASE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BREATH; + string SOUND_REPEL; + int STARTED_CYCLES; + int STEP_SIZE_NORM; + string STUN_BURST_DMG; + string STUN_BURST_POS; + string STUN_BURST_RAD; + string STUN_BURST_REPEL; + string STUN_LIST; + + BgoblinChief() + { + NEW_MODEL = 1; + NPC_BASE_EXP = 3000; + SOUND_ATTACK1 = "monsters/goblin/c_gargoyle_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_gargoyle_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_gargoyle_atk3.wav"; + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + STEP_SIZE_NORM = 36; + CAN_STUN = 1; + DROP_GOLD = 0; + ANIM_ATTACK = "battleaxe_swing1_L"; + DMG_AXE = RandomInt(100, 300); + DOT_FIRE = 75; + DMG_CHARGE = 50; + FREQ_BREATH = Random(10.0, 30.0); + FIRE_BREATH_SCRIPT = "monsters/bgoblin_chief_cl"; + SOUND_REPEL = "ambience/alien_humongo.wav"; + ATTACK_HITCHANCE = 0.9; + } + + void game_precache() + { + Precache(FIRE_BREATH_SCRIPT); + } + + void goblin_spawn() + { + SetName("Blood Goblin Chieftain"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(5000); + SetRoam(true); + SetAnimFrameRate(1.5); + SetHearingSensitivity(4); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2_boss.mdl"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 2); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + else + { + SetModel("monsters/goblin_new_boss.mdl"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 0); + SetModelBody(1, 3); + SetModelBody(2, 2); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 1); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(GAME_MASTER, "bgoblin_chief_died", GetEntityOrigin(GetOwner())); + if ((FIRE_BREATH_ON)) + { + ClientEvent("update", "all", CL_IDX, "end_fx"); + } + } + + void swing_axe() + { + AXE_SWING = 1; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, "slash"); + } + + void cycle_up() + { + if ((STARTED_CYCLES)) return; + STARTED_CYCLES = 1; + cl_effect_loop(); + FREQ_BREATH("do_fire_breath"); + } + + void game_dodamage() + { + if ((param1)) + { + if ((AXE_SWING)) + { + } + ApplyEffect(param2, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DOT_FIRE); + AXE_SWING = 0; + } + } + + void do_fire_breath() + { + FREQ_BREATH("do_fire_breath"); + if (!(m_hAttackTarget != "unset")) return; + npcatk_suspend_ai(); + BREATH_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + BREATH_ANG -= 30; + if (BREATH_ANG < 0) + { + BREATH_ANG += 359; + } + BREATH_COUNT = 0; + SetMoveAnim(ANIM_WARCRY); + SetIdleAnim(ANIM_WARCRY); + PlayAnim("critical", ANIM_WARCRY); + ScheduleDelayedEvent(0.01, "fire_breath_loop"); + FIRE_BREATH_ON = 1; + // svplaysound: svplaysound 1 10 SOUND_BREATH + EmitSound(1, 10, SOUND_BREATH); + ClientEvent("new", "all", "monsters/bgoblin_chief_cl", GetEntityIndex(GetOwner())); + CL_IDX = "game.script.last_sent_id"; + } + + void fire_breath_loop() + { + BREATH_COUNT += 1; + if (BREATH_COUNT == 60) + { + end_fire_breath(); + } + if (!(BREATH_COUNT < 60)) return; + ScheduleDelayedEvent(0.05, "fire_breath_loop"); + BREATH_ANG += 1; + if (BREATH_ANG > 359) + { + BREATH_ANG -= 359; + } + string FACE_POS = GetMonsterProperty("origin"); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_ANG, 0), Vector3(0, 500, 0)); + SetMoveDest(FACE_POS); + string CLOUD_START = GetEntityProperty(GetOwner(), "svbonepos"); + CLOUD_START += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 16, 0)); + if (CLOUD_TARGS != "none") + { + for (int i = 0; i < GetTokenCount(CLOUD_TARGS, ";"); i++) + { + burn_targets(); + } + } + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.5; + string SCAN_POINT = /* TODO: $relpos */ $relpos(0, 128, 0); + CLOUD_TARGS = /* TODO: $get_tbox */ $get_tbox("enemy", 128, SCAN_POINT); + PlayAnim("once", ANIM_WARCRY); + } + + void burn_targets() + { + string CUR_TARGET = GetToken(CLOUD_TARGS, i, ";"); + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 256)) return; + ApplyEffect(CUR_TARGET, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DOT_FIRE); + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(0, 300, 120)); + } + + void end_fire_breath() + { + ClientEvent("update", "all", CL_IDX, "end_fx"); + npcatk_resume_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + // svplaysound: svplaysound 1 0 SOUND_BREATH + EmitSound(1, 0, SOUND_BREATH); + FIRE_BREATH_ON = 0; + } + + void leap_stun() + { + string BURST_POS = /* TODO: $relpos */ $relpos(0, 64, 0); + stunburst_go(BURST_POS, 64, 0, DMG_CHARGE); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((FIRE_BREATH_ON)) + { + if (GetEntityRange(m_hLastStruck) < 128) + { + } + string TARGET_ORG = GetEntityOrigin(m_hLastStruck); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + SetVelocity(m_hLastStruck, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + EmitSound(GetOwner(), 0, SOUND_REPEL, 10); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 60, 2.0, 2.0); + } + } + + void gob_jump_check() + { + if (!(GOB_JUMPER)) return; + if (!(GOB_JUMP_SCANNING)) return; + float GOB_HOP_DELAY = Random(2, 4); + GOB_HOP_DELAY("gob_jump_check"); + if (!(m_hAttackTarget != "unset")) return; + if ((IS_FLEEING)) return; + if ((SUSPEND_AI)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOBLIN_JUMPRANGE)) return; + string ME_Z = GetMonsterProperty("origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + if (ME_Z > TARG_Z) + { + string Z_DIFF = ME_Z; + ME_Z -= TARG_Z; + } + else + { + string Z_DIFF = TARG_Z; + Z_DIFF -= ME_Z; + } + if (Z_DIFF > ATTACK_RANGE) + { + PlayAnim("critical", ANIM_SMASH); + ScheduleDelayedEvent(0.1, "do_jump"); + } + } + + void do_jump() + { + SetStepSize(1000); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 800)); + ScheduleDelayedEvent(0.5, "push_forward"); + ScheduleDelayedEvent(1.0, "jump_done"); + } + + void push_forward() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void jump_done() + { + SetStepSize(STEP_SIZE_NORM); + SetMoveAnim(ANIM_RUN); + } + + void my_target_died() + { + ScheduleDelayedEvent(1.0, "npcatk_go_home"); + } + + void stunburst_go() + { + STUN_BURST_POS = param1; + STUN_BURST_RAD = param2; + STUN_BURST_REPEL = param3; + STUN_BURST_DMG = param4; + LogDebug("stunburst_go pos: STUN_BURST_POS rad: STUN_BURST_RAD repel: STUN_BURST_REPEL dmg: STUN_BURST_DMG"); + ClientEvent("new", "all", "effects/sfx_stun_burst", STUN_BURST_POS, STUN_BURST_RAD, 0); + EmitSound(GetOwner(), 0, "magic/boom.wav", 10); + ScheduleDelayedEvent(0.25, "stun_targets"); + } + + void stun_targets() + { + STUN_LIST = FindEntitiesInSphere("enemy", STUN_BURST_RAD); + LogDebug("stun_targets STUN_LIST"); + if (!(STUN_LIST != "none")) return; + if (!(GetTokenCount(STUN_LIST, ";") > 0)) return; + for (int i = 0; i < GetTokenCount(STUN_LIST, ";"); i++) + { + stunburst_affect_targets(); + } + } + + void stunburst_affect_targets() + { + string CHECK_ENT = GetToken(STUN_LIST, i, ";"); + if (!(IsOnGround(CHECK_ENT))) return; + ApplyEffect(CHECK_ENT, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + if (STUN_BURST_DMG > 0) + { + DoDamage(CHECK_ENT, "direct", STUN_BURST_DMG, 1.0, GetOwner()); + } + if (!(STUN_BURST_REPEL)) return; + string TARGET_ORG = GetEntityOrigin(CHECK_ENT); + string TARG_ANG = /* TODO: $angles */ $angles(STUN_BURST_POS, TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CHECK_ENT, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + + void goblin_pre_spawn() + { + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 48; + MOVE_RANGE = 48; + } + +} + +} diff --git a/scripts/angelscript/monsters/bgoblin_chief_cl.as b/scripts/angelscript/monsters/bgoblin_chief_cl.as new file mode 100644 index 00000000..77f91102 --- /dev/null +++ b/scripts/angelscript/monsters/bgoblin_chief_cl.as @@ -0,0 +1,70 @@ +#pragma context client + +namespace MS +{ + +class BgoblinChiefCl : CGameScript +{ + string CLOUD_ANG; + string FLAME_SPRITE; + int FX_ACTIVE; + string FX_OWNER; + int N_FRAMES; + + BgoblinChiefCl() + { + FLAME_SPRITE = "explode1.spr"; + N_FRAMES = 9; + } + + void client_activate() + { + FX_OWNER = param1; + FX_ACTIVE = 1; + breath_loop(); + ScheduleDelayedEvent(20.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void breath_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "breath_loop"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment2"); + CLOUD_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + ClientEffect("tempent", "sprite", FLAME_SPRITE, CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", FLAME_SPRITE, CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", FLAME_SPRITE, CLOUD_ORG, "setup_cloud"); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", N_FRAME); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/bgoblin_guard.as b/scripts/angelscript/monsters/bgoblin_guard.as new file mode 100644 index 00000000..6e9563db --- /dev/null +++ b/scripts/angelscript/monsters/bgoblin_guard.as @@ -0,0 +1,151 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class BgoblinGuard : CGameScript +{ + string ANIM_ATTACK; + int ATTACK_HITCHANCE; + int AXE_SWING; + int CAN_FIREBALL; + int CAN_STUN; + int CHARGE_SPEED; + int DMG_AXE; + int DMG_SWORD; + int DOT_FIRE; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FLINCH_ANIM; + int FLINCH_HEALTH; + float FREQ_CHARGE; + string F_GOB_TYPE; + int GOB_CHARGE_MAX_DIST; + int GOB_CHARGE_MIN_DIST; + int GOB_JUMPER; + int GOB_TYPE; + int NEW_MODEL; + int NPC_BASE_EXP; + + BgoblinGuard() + { + NEW_MODEL = 1; + NPC_BASE_EXP = 500; + DOT_FIRE = 40; + CAN_FIREBALL = 0; + CAN_FIREBALL = 0; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(25, 50); + ATTACK_HITCHANCE = 80; + CAN_STUN = 1; + GOB_TYPE = RandomInt(1, 2); + DMG_AXE = RandomInt(60, 150); + DMG_SWORD = RandomInt(50, 80); + GOB_JUMPER = 0; + CHARGE_SPEED = 300; + FREQ_CHARGE = 10.0; + GOB_CHARGE_MIN_DIST = 96; + GOB_CHARGE_MAX_DIST = 128; + FLINCH_HEALTH = 300; + } + + void goblin_spawn() + { + SetName("Blood Goblin Guard"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(1500); + SetRoam(true); + SetHearingSensitivity(2); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetModelBody(0, 0); + SetModelBody(1, RandomInt(1, 2)); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 1); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("all", 0.75); + SetDamageResistance("fire", 0.25); + SetDamageResistance("cold", 1.25); + ScheduleDelayedEvent(0.01, "gob_guard_set_weapon"); + } + + void gob_guard_set_weapon() + { + F_GOB_TYPE = GOB_TYPE; + if (F_GOB_TYPE == 1) + { + SetModelBody(2, 5); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.8; + CAN_STUN = 1; + } + if (F_GOB_TYPE == 2) + { + SetModelBody(2, 6); + ANIM_ATTACK = ANIM_SWIPE; + ATTACK_HITCHANCE = 0.9; + SetStat("parry", 120); + FLINCH_ANIM = "shielddeflect1"; + CAN_STUN = 1; + } + } + + void OnParry(CBaseEntity@ attacker) override + { + PlayAnim("critical", ANIM_PARRY); + // PlayRandomSound from: SOUND_PARRY1, SOUND_PARRY2, SOUND_PARRY3 + array sounds = {SOUND_PARRY1, SOUND_PARRY2, SOUND_PARRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(0.75, "swing_sword"); + } + + void swing_axe() + { + AXE_SWING = 1; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, "slash"); + } + + void game_dodamage() + { + if ((param1)) + { + if ((AXE_SWING)) + { + } + if (F_GOB_TYPE == 1) + { + } + if (RandomInt(1, 3) == 1) + { + } + ApplyEffect(m_hAttackTarget, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + AXE_SWING = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/bgoblin_shaman.as b/scripts/angelscript/monsters/bgoblin_shaman.as new file mode 100644 index 00000000..948f5110 --- /dev/null +++ b/scripts/angelscript/monsters/bgoblin_shaman.as @@ -0,0 +1,330 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class BgoblinShaman : CGameScript +{ + string ANIM_ATTACK; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_MOVERANGE; + int CAN_FIREBALL; + string DEATH_SCRIPT; + int DMG_FIREBALL; + int DMG_FIREBALL_DOT; + int DMG_FIREWALL; + int DMG_FIST; + int DOT_FIST; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FIREWALL_SCRIPT; + string FIRE_FIST_SCRIPT; + int FLAME_FIST; + float FREQ_FIREBALL; + float FREQ_FIREWALL; + float FREQ_FLEE; + float FREQ_SUMMON; + int GOB_CHARGER; + int GOB_JUMPER; + int GOB_JUMP_SCANNING; + string LAST_STRUCK; + int MIN_FIREBALL_DIST; + int MOVE_RANGE; + string MY_CL_SCRIPT_IDX; + int NEW_MODEL; + string NEXT_FIREBALL; + string NEXT_FIREWALL; + string NEXT_FLEE; + string NEXT_SUMMON; + int NO_DEATH_EVENT; + int NO_SUMMONS; + int NPC_BASE_EXP; + int SUMMON_ALIVE; + string SUMMON_POS; + string SUMMON_SCRIPT; + string TOSS_FIREBALL; + + BgoblinShaman() + { + NEW_MODEL = 1; + GOB_JUMPER = 0; + GOB_CHARGER = 0; + CAN_FIREBALL = 1; + FREQ_FIREBALL = 3.0; + DMG_FIREBALL = 150; + DMG_FIREBALL_DOT = 25; + FREQ_FIREBALL = 20.0; + DMG_FIST = 10; + DOT_FIST = 50; + DMG_FIREWALL = 100; + ATTACK_HITCHANCE = 0.75; + NPC_BASE_EXP = 800; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(50, 75); + ATTACK_MOVERANGE = 800; + MOVE_RANGE = 800; + FREQ_FLEE = 20.0; + FREQ_FIREWALL = 18.0; + FREQ_SUMMON = 15.0; + MIN_FIREBALL_DIST = 70; + FIRE_FIST_SCRIPT = "monsters/fire_fist_cl"; + ANIM_ATTACK = "swordswing1_L"; + SUMMON_SCRIPT = "monsters/elemental_fire1"; + DEATH_SCRIPT = "monsters/elemental_fire2"; + FIREWALL_SCRIPT = "traps/fire_wall2"; + } + + void goblin_spawn() + { + SetName("Blood Goblin Evoker"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(800); + SetRoam(true); + SetHearingSensitivity(2); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 1); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + ClientEvent("persist", "all", FIRE_FIST_SCRIPT, GetEntityIndex(GetOwner()), 19); + MY_CL_SCRIPT_IDX = "game.script.last_sent_id"; + Precache("ambience/burning2.wav"); + } + + void game_precache() + { + Precache(SUMMON_SCRIPT); + Precache(DEATH_SCRIPT); + Precache(FIREWALL_SCRIPT); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", MY_CL_SCRIPT_IDX); + if ((NO_DEATH_EVENT)) return; + SpawnNPC(DEATH_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner()), 5); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + LAST_STRUCK = GetGameTime(); + if (GetEntityRange(m_hAttackTarget) < 96) + { + if (GetGameTime() > NEXT_FLEE) + { + } + NEXT_FLEE = GetGameTime(); + NEXT_FLEE += FREQ_FLEE; + SetMoveAnim(ANIM_RUN); + SetMoveSpeed(2.0); + ScheduleDelayedEvent(5.0, "reset_move_speed"); + npcatk_flee(/* TODO: $get with insufficient args */ null, 5.0); + } + } + + void reset_move_speed() + { + SetMoveSpeed(1.0); + } + + void swing_sword() + { + if ((TOSS_FIREBALL)) + { + TOSS_FIREBALL = 0; + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 48, 0), m_hAttackTarget, 400, DMG_FIREBALL, 0.5, "none"); + CallExternal("ent_lastprojectile", "lighten", DMG_FIREBALL_DOT, 0.01); + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + } + if ((TOSS_FIREBALL)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + FLAME_FIST = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_FIST, ATTACK_HITCHANCE, "blunt"); + } + + void gob_cycle_up() + { + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += 3.0; + NEXT_FIREWALL = GetGameTime(); + NEXT_FIREWALL += Random(5.0, 10.0); + NEXT_SUMMON = GetGameTime(); + NEXT_SUMMON += Random(15.0, 20.0); + if ((GOB_JUMP_SCANNING)) return; + GOB_JUMP_SCANNING = 1; + EmitSound(GetOwner(), 0, SOUND_SHAM_ALERT, 10); + gob_jump_check(); + } + + void game_dodamage() + { + if ((param1)) + { + if ((FLAME_FIST)) + { + } + ApplyEffect(param2, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DOT_FIST); + FLAME_FIST = 0; + } + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if ((SUSPEND_AI)) return; + if ((IS_FLEEING)) return; + if (GetGameTime() > NEXT_FIREWALL) + { + if ((false)) + { + } + NEXT_FIREWALL = GetGameTime(); + NEXT_FIREWALL += FREQ_FIREWALL; + PlayAnim("critical", ANIM_WARCRY); + npcatk_suspend_ai(1.5); + EmitSound(GetOwner(), 0, SOUND_SHAM_ALERT, 10); + string FIREWALL_POS = GetEntityOrigin(m_hAttackTarget); + int FIREWALL_OFS = RandomInt(1, 4); + if (FIREWALL_OFS == 1) + { + FIREWALL_POS += "x"; + } + if (FIREWALL_OFS == 2) + { + FIREWALL_POS += "y"; + } + if (FIREWALL_OFS == 3) + { + FIREWALL_POS += "x"; + } + if (FIREWALL_OFS == 4) + { + FIREWALL_POS += "y"; + } + SpawnNPC(FIREWALL_SCRIPT, FIREWALL_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(m_hAttackTarget, "angles.y"), DMG_FIREWALL + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SUMMON_ALIVE)) + { + if (!(NO_SUMMONS)) + { + } + if (GetGameTime() > NEXT_SUMMON) + { + } + if (GetEntityRange(m_hAttackTarget) < 1024) + { + } + NEXT_SUMMON = GetGameTime(); + NEXT_SUMMON += FREQ_SUMMON; + PlayAnim("critical", ANIM_WARCRY); + npcatk_suspend_ai(1.5); + EmitSound(GetOwner(), 0, SOUND_SHAM_ALERT, 10); + SUMMON_POS = GetEntityOrigin(m_hAttackTarget); + if ((IsValidPlayer(m_hAttackTarget))) + { + SUMMON_POS += "z"; + } + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(-120, 500, 200)); + ScheduleDelayedEvent(0.2, "summon_elemental"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((CAN_FIREBALL)) + { + if (GetGameTime() > NEXT_FIREBALL) + { + } + if (GetEntityRange(m_hAttackTarget) > MIN_FIREBALL_DIST) + { + } + if ((false)) + { + } + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + TOSS_FIREBALL = 1; + PlayAnim("critical", ANIM_SWIPE); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + EmitSound(GetOwner(), 0, SOUND_FIREBALL_CAST, 10); + } + if ((false)) + { + float STRUCK_CHECK = GetGameTime(); + STRUCK_CHECK -= 5.0; + if (STRUCK_CHECK > LAST_STRUCK) + { + if (!(IS_FLEEING)) + { + } + SetMoveAnim(ANIM_IDLE); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + } + else + { + SetMoveAnim(ANIM_RUN); + } + } + else + { + SetMoveAnim(ANIM_RUN); + } + } + + void summon_elemental() + { + SUMMON_ALIVE = 1; + SpawnNPC(SUMMON_SCRIPT, SUMMON_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + + void elemental_died() + { + NEXT_SUMMON = GetGameTime(); + NEXT_SUMMON += FREQ_SUMMON; + SUMMON_ALIVE = 0; + } + + void set_no_summons() + { + NO_SUMMONS = 1; + } + + void no_death_event() + { + NO_DEATH_EVENT = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bgoblin_skirmisher.as b/scripts/angelscript/monsters/bgoblin_skirmisher.as new file mode 100644 index 00000000..ae749819 --- /dev/null +++ b/scripts/angelscript/monsters/bgoblin_skirmisher.as @@ -0,0 +1,146 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class BgoblinSkirmisher : CGameScript +{ + string ANIM_ATTACK; + int ATTACK_HITCHANCE; + float BASE_FRAMERATE; + int CAN_FIREBALL; + int CAN_STUN; + int DMG_FIREBALL; + int DMG_FIREBALL_DOT; + int DMG_KNIFE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int FLINCH_HEALTH; + float FREQ_FIREBALL; + int NEW_MODEL; + int NPC_BASE_EXP; + string TOSS_FIREBALL; + + BgoblinSkirmisher() + { + NEW_MODEL = 1; + NPC_BASE_EXP = 350; + CAN_FIREBALL = 1; + DMG_FIREBALL = 100; + DMG_FIREBALL_DOT = 25; + FREQ_FIREBALL = 20.0; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(25, 50); + DMG_KNIFE = RandomInt(40, 60); + BASE_FRAMERATE = 2.0; + ATTACK_HITCHANCE = 80; + CAN_STUN = 0; + FLINCH_HEALTH = 200; + } + + void goblin_spawn() + { + SetName("Blood Goblin Skirmisher"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(1000); + SetRoam(true); + SetHearingSensitivity(4); + SetAnimFrameRate(2.0); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + SetModelBody(0, 1); + SetModelBody(1, 4); + SetModelBody(2, 8); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetModelBody(0, 1); + SetModelBody(1, 4); + SetModelBody(2, 8); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 1); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("fire", 0.25); + SetDamageResistance("cold", 1.25); + ANIM_ATTACK = "swordswing1_L"; + } + + void swing_axe() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KNIFE, ATTACK_HITCHANCE, "slash"); + } + + void swing_sword() + { + if ((TOSS_FIREBALL)) + { + TOSS_FIREBALL = 0; + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 48, 0), m_hAttackTarget, 400, DMG_FIREBALL, 0.5, "none"); + CallExternal("ent_lastprojectile", "lighten", DMG_FIREBALL_DOT, 0.01); + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + } + if ((TOSS_FIREBALL)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KNIFE, ATTACK_HITCHANCE, "pierce"); + } + + void gob_jump_check() + { + if (!(GOB_JUMP_SCANNING)) return; + float GOB_HOP_DELAY = Random(2, 4); + GOB_HOP_DELAY("gob_jump_check"); + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE)) return; + if (!(m_hAttackTarget != "unset")) return; + if ((I_R_FROZEN)) return; + if ((IS_FLEEING)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOBLIN_JUMPRANGE)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > GOB_JUMP_THRESH) + { + if (TARGET_Z_DIFFERENCE < 500) + { + } + PlayAnim("critical", ANIM_SMASH); + ScheduleDelayedEvent(0.1, "gob_hop"); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(param1 > 50)) return; + if (!(RandomInt(1, 5) == 1)) return; + jump_away(); + } + + void jump_away() + { + npcatk_flee(GetEntityIndex(m_hLastStruck), 100, 1.0); + ScheduleDelayedEvent(0.1, "gob_hop"); + } + +} + +} diff --git a/scripts/angelscript/monsters/blackbear.as b/scripts/angelscript/monsters/blackbear.as new file mode 100644 index 00000000..3ed4a4bc --- /dev/null +++ b/scripts/angelscript/monsters/blackbear.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bear_black.as" + +namespace MS +{ + +class Blackbear : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/blackbearcub.as b/scripts/angelscript/monsters/blackbearcub.as new file mode 100644 index 00000000..d106aa8a --- /dev/null +++ b/scripts/angelscript/monsters/blackbearcub.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bear_cub_black.as" + +namespace MS +{ + +class Blackbearcub : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/bludgeon.as b/scripts/angelscript/monsters/bludgeon.as new file mode 100644 index 00000000..047ba8ea --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon.as @@ -0,0 +1,263 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Bludgeon : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BASE_MOVESPEED; + int CHARGE_DAMAGE; + int CHARGE_HITRANGE; + int CHARGE_MOVESPEED; + string CHARGE_TARGET; + string CL_SCRIPT; + string CL_SCRIPT_ID; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int IN_CHARGE; + int IN_JUMP; + int IS_JUMPING; + int IS_UNHOLY; + int MOVE_RANGE; + int NO_ADJ_RANGES; + string NPC_GIVE_EXP; + string PUSH_VEL; + string SOUND_CHARGE; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Bludgeon() + { + IS_UNHOLY = 1; + if (StringToLower(GetMapName()) != "islesofdread2") + { + NPC_GIVE_EXP = 120; + } + else + { + NPC_GIVE_EXP = 0; + } + DROP_GOLD = 1; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 30; + SOUND_STRUCK1 = "monsters/bludgeon/bludgeonattack.wav"; + SOUND_STRUCK2 = "monsters/bludgeon/bludgeonattack.wav"; + SOUND_STRUCK3 = "monsters/bludgeon/bludgeonattack.wav"; + SOUND_PAIN = "monsters/bludgeon/bludgeonpain.wav"; + SOUND_IDLE1 = "monsters/bludgeon/bludgeonidle.wav"; + SOUND_IDLE2 = "monsters/bludgeon/bludgeonidle.wav"; + SOUND_CHARGE = "monsters/boar/boarsight.wav"; + SOUND_DEATH = "monsters/bludgeon/bludgeonpain.wav"; + BASE_MOVESPEED = 2; + CHARGE_MOVESPEED = 6; + Precache(SOUND_DEATH); + NO_ADJ_RANGES = 1; + MOVE_RANGE = 32; + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 120; + ATTACK_DAMAGE = "$rand(20,40)"; + CHARGE_DAMAGE = "$rand(40,80)"; + CHARGE_HITRANGE = 32; + ANIM_IDLE = "stand"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "punch1"; + ANIM_JUMP = "jump"; + CL_SCRIPT = "monsters/boar_base_cl_charge"; + Precache(CL_SCRIPT); + } + + void OnSpawn() override + { + SetName("Bludgeon Demon"); + SetModel("monsters/bludgeon.mdl"); + SetHealth(200); + SetWidth(32); + SetHeight(72); + SetRace("demon"); + SetRoam(true); + SetHearingSensitivity(8); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 5.0); + SetDamageResistance("lightning", 2.0); + SetDamageResistance("holy", 30.0); + SetMoveSpeed(BASE_MOVESPEED); + ScheduleDelayedEvent(5.0, "idle_loop"); + CatchSpeech("debug_props", "debug"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + PlayAnim("once", ANIM_IDLE); + } + + void debug_props() + { + SetSayTextRange(2048); + SayText("Range " + ATTACK_RANGE); + } + + void my_target_died() + { + IS_JUMPING = 0; + SayText("Little-G rox0rz your box0rz!"); + } + + void npc_targetsighted() + { + if (!(IS_JUMPING)) + { + IS_JUMPING = 1; + ScheduleDelayedEvent(2.0, "jump_checks"); + } + if (!(GetEntityRange(param1) > 256)) return; + if ((IN_CHARGE)) return; + if ((IN_JUMP)) return; + CHARGE_TARGET = HUNT_LASTTARGET; + do_charge(); + } + + void do_charge() + { + IN_CHARGE = 1; + SetMoveAnim(ANIM_RUN); + EmitSound(GetOwner(), 0, SOUND_CHARGE, 10); + npcatk_suspend_ai(); + SetMoveDest(CHARGE_TARGET); + ScheduleDelayedEvent(1.0, "charge_noise"); + ClientEvent("new", "all_in_sight", CL_SCRIPT, GetEntityIndex(GetOwner())); + CL_SCRIPT_ID = "game.script.last_sent_id"; + ScheduleDelayedEvent(15.0, "charge_stop"); + charge_scan(); + } + + void charge_noise() + { + SetMoveSpeed(CHARGE_MOVESPEED); + EmitSound(GetOwner(), 0, SOUND_CHARGE, 10); + } + + void charge_scan() + { + if (!(IN_CHARGE)) return; + ScheduleDelayedEvent(0.1, "charge_scan"); + SetMoveDest(CHARGE_TARGET); + if (!(GetEntityRange(CHARGE_TARGET) <= ATTACK_RANGE)) return; + DoDamage(CHARGE_TARGET, ATTACK_HITRANGE, CHARGE_DAMAGE, 1.0, "slash"); + ScheduleDelayedEvent(0.1, "charge_stop"); + } + + void charge_stop() + { + SetMoveSpeed(BASE_MOVESPEED); + IN_CHARGE = 0; + ClientEvent("remove", "all", CL_SCRIPT); + npcatk_resume_ai(); + if ((IsEntityAlive(CHARGE_TARGET))) + { + npcatk_target(CHARGE_TARGET); + } + } + + void jump_checks() + { + if (!(IS_JUMPING)) return; + Random(2, 6)("jump_checks"); + PlayAnim("critical", ANIM_JUMP); + } + + void attack_1() + { + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 10); + DoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, CHARGE_DAMAGE, 1.0, "slash"); + } + + void jump_start() + { + IN_JUMP = 1; + ScheduleDelayedEvent(0.1, "jump_boost"); + EmitSound(GetOwner(), 0, SOUND_CHARGE, 10); + } + + void jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 600)); + } + + void jump_land() + { + EmitSound(GetOwner(), 0, SOUND_IDLE1, 10); + } + + void jump_done() + { + IN_JUMP = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void idle_loop() + { + Random(5, 10)("idle_loop"); + if ((false)) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2 + array sounds = {SOUND_IDLE1, SOUND_IDLE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + int L_R = RandomInt(50, 100); + if (RandomInt(1, 2) == 1) + { + string L_R = /* TODO: $neg */ $neg(L_R); + } + PUSH_VEL = /* TODO: $relvel */ $relvel(L_R, 50, 10); + if ((IN_CHARGE)) + { + charge_hit(); + } + else + { + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + } + + void charge_hit() + { + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(0, 200, 200)); + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", 3, GetEntityIndex(GetOwner())); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", CL_SCRIPT); + if (RandomInt(1, 50) == 1) + { + SayText("No , little-G , " + I + " have failed you!"); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon1.as b/scripts/angelscript/monsters/bludgeon1.as new file mode 100644 index 00000000..b28ac793 --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon1.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "monsters/bludgeon.as" + +namespace MS +{ + +class Bludgeon1 : CGameScript +{ + int IS_JUMPING; + + void OnSpawn() override + { + SetDamageResistance("holy", 1.0); + } + + void my_target_died() + { + IS_JUMPING = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon2.as b/scripts/angelscript/monsters/bludgeon2.as new file mode 100644 index 00000000..30f39152 --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon2.as @@ -0,0 +1,85 @@ +#pragma context server + +#include "monsters/bludgeon.as" + +namespace MS +{ + +class Bludgeon2 : CGameScript +{ + int ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CHARGE_DAMAGE; + string CL_SCRIPT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int IS_JUMPING; + int IS_UNHOLY; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string SOUND_CHARGE; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Bludgeon2() + { + IS_UNHOLY = 1; + NPC_GIVE_EXP = 250; + DROP_GOLD = 1; + DROP_GOLD_MIN = 15; + DROP_GOLD_MAX = 50; + SOUND_STRUCK1 = "monsters/bludgeon/bludgeonattack2.wav"; + SOUND_STRUCK2 = "monsters/bludgeon/bludgeonattack2.wav"; + SOUND_STRUCK3 = "monsters/bludgeon/bludgeonattack2.wav"; + SOUND_PAIN = "monsters/bludgeon/bludgeonpain2.wav"; + SOUND_IDLE1 = "monsters/bludgeon/bludgeonidle2.wav"; + SOUND_IDLE2 = "monsters/bludgeon/bludgeonidle2.wav"; + SOUND_CHARGE = "monsters/boar/boarsight.wav"; + SOUND_DEATH = "monsters/bludgeon/bludgeonpain2.wav"; + Precache(SOUND_DEATH); + MOVE_RANGE = 32; + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 120; + ATTACK_DAMAGE = "$rand(40,80)"; + CHARGE_DAMAGE = "$rand(80,160)"; + CL_SCRIPT = "monsters/boar_base_cl_charge"; + Precache(CL_SCRIPT); + } + + void OnSpawn() override + { + SetName("Bludgeon Demon Warrior"); + SetModel("monsters/bludgeon.mdl"); + SetHealth(800); + SetWidth(32); + SetHeight(72); + SetRace("demon"); + SetRoam(true); + SetHearingSensitivity(8); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 2.0); + SetDamageResistance("lightning", 2.0); + SetDamageResistance("holy", 1.0); + SetMoveSpeed(BASE_MOVESPEED); + ScheduleDelayedEvent(5.0, "idle_loop"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + PlayAnim("once", ANIM_IDLE); + } + + void my_target_died() + { + IS_JUMPING = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz1.as b/scripts/angelscript/monsters/bludgeon_gaz1.as new file mode 100644 index 00000000..7a8eb370 --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz1.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz1 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz1_corrupt.as b/scripts/angelscript/monsters/bludgeon_gaz1_corrupt.as new file mode 100644 index 00000000..47dbdbc7 --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz1_corrupt.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz1Corrupt : CGameScript +{ + int AM_CORRUPT; + + BludgeonGaz1Corrupt() + { + AM_CORRUPT = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz1_corrupt_mini.as b/scripts/angelscript/monsters/bludgeon_gaz1_corrupt_mini.as new file mode 100644 index 00000000..eace856f --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz1_corrupt_mini.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz1CorruptMini : CGameScript +{ + int AM_CORRUPT; + int AM_MINI; + string MONSTER_MODEL; + + BludgeonGaz1CorruptMini() + { + AM_CORRUPT = 1; + MONSTER_MODEL = "monsters/bludgeon_gaz_mini.mdl"; + AM_MINI = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz1_demon.as b/scripts/angelscript/monsters/bludgeon_gaz1_demon.as new file mode 100644 index 00000000..429d880b --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz1_demon.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz1Demon : CGameScript +{ + int AM_DEMON; + + BludgeonGaz1Demon() + { + AM_DEMON = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz1_demon_mini.as b/scripts/angelscript/monsters/bludgeon_gaz1_demon_mini.as new file mode 100644 index 00000000..ac7243e4 --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz1_demon_mini.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz1DemonMini : CGameScript +{ + int AM_DEMON; + int AM_MINI; + string MONSTER_MODEL; + + BludgeonGaz1DemonMini() + { + AM_DEMON = 1; + MONSTER_MODEL = "monsters/bludgeon_gaz_mini.mdl"; + AM_MINI = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz1_mini.as b/scripts/angelscript/monsters/bludgeon_gaz1_mini.as new file mode 100644 index 00000000..82c3ab8c --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz1_mini.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz1Mini : CGameScript +{ + int AM_MINI; + string MONSTER_MODEL; + + BludgeonGaz1Mini() + { + MONSTER_MODEL = "monsters/bludgeon_gaz_mini.mdl"; + AM_MINI = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz2.as b/scripts/angelscript/monsters/bludgeon_gaz2.as new file mode 100644 index 00000000..138ea3ac --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz2.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz2 : CGameScript +{ + int AM_HAMMER; + + BludgeonGaz2() + { + AM_HAMMER = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz2_corrupt.as b/scripts/angelscript/monsters/bludgeon_gaz2_corrupt.as new file mode 100644 index 00000000..ad8f5abf --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz2_corrupt.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz2Corrupt : CGameScript +{ + int AM_CORRUPT; + int AM_HAMMER; + + BludgeonGaz2Corrupt() + { + AM_CORRUPT = 1; + AM_HAMMER = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz2_corrupt_mini.as b/scripts/angelscript/monsters/bludgeon_gaz2_corrupt_mini.as new file mode 100644 index 00000000..ffcbf006 --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz2_corrupt_mini.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz2CorruptMini : CGameScript +{ + int AM_CORRUPT; + int AM_HAMMER; + int AM_MINI; + string MONSTER_MODEL; + + BludgeonGaz2CorruptMini() + { + AM_CORRUPT = 1; + AM_HAMMER = 1; + MONSTER_MODEL = "monsters/bludgeon_gaz_mini.mdl"; + AM_MINI = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz2_demon.as b/scripts/angelscript/monsters/bludgeon_gaz2_demon.as new file mode 100644 index 00000000..8d6ca6a1 --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz2_demon.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz2Demon : CGameScript +{ + int AM_DEMON; + int AM_HAMMER; + + BludgeonGaz2Demon() + { + AM_DEMON = 1; + AM_HAMMER = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz2_demon_mini.as b/scripts/angelscript/monsters/bludgeon_gaz2_demon_mini.as new file mode 100644 index 00000000..bbbf44b9 --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz2_demon_mini.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz2DemonMini : CGameScript +{ + int AM_DEMON; + int AM_HAMMER; + int AM_MINI; + string MONSTER_MODEL; + + BludgeonGaz2DemonMini() + { + AM_DEMON = 1; + AM_HAMMER = 1; + MONSTER_MODEL = "monsters/bludgeon_gaz_mini.mdl"; + AM_MINI = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz2_mini.as b/scripts/angelscript/monsters/bludgeon_gaz2_mini.as new file mode 100644 index 00000000..47ce0da1 --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz2_mini.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "monsters/bludgeon_gaz_base.as" + +namespace MS +{ + +class BludgeonGaz2Mini : CGameScript +{ + int AM_HAMMER; + int AM_MINI; + string MONSTER_MODEL; + + BludgeonGaz2Mini() + { + AM_HAMMER = 1; + MONSTER_MODEL = "monsters/bludgeon_gaz_mini.mdl"; + AM_MINI = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/bludgeon_gaz_base.as b/scripts/angelscript/monsters/bludgeon_gaz_base.as new file mode 100644 index 00000000..7e51c977 --- /dev/null +++ b/scripts/angelscript/monsters/bludgeon_gaz_base.as @@ -0,0 +1,700 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class BludgeonGazBase : CGameScript +{ + int AM_CHARGING; + int AM_DEMON; + int AM_HAMMER; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HAMMER; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_THROW; + string ANIM_THROW_HOLD; + string ANIM_TRICK; + string ANIM_WALK; + string ANIM_WARCRY; + string AS_ATTACKING; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + float CHANCE_STUN; + int CHARGE_COUNT; + string CHARGE_DELAY; + string CHARGE_DEST; + string CHARGE_LIST; + string CHARGE_TARGET; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int CYCLES_STARTED; + string DID_WARCRY; + int DMG_CHARGE; + int DMG_STUN; + int DMG_SWING; + int DMG_THROW; + int DOT_BURN; + int DOT_POISON; + int DROPS_CONTAINER; + float FREQ_CHARGE; + float FREQ_IDLE; + float FREQ_JUMP; + float FREQ_LEAP; + float FREQ_STOMP; + float FREQ_THROW; + int GOLD_BAGS; + int GOLD_BAGS_PPLAYER; + int GOLD_MAX_BAGS; + int GOLD_PER_BAG; + int GOLD_RADIUS; + int IS_UNHOLY; + string LEAP_DELAY; + int LEAP_RANGE; + string MONSTER_MODEL; + string MY_AXE; + int NPC_GIVE_EXP; + string POISON_TARGETS; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BURN; + string SOUND_CHARGE_GO; + string SOUND_CHARGE_START; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_LAND; + string SOUND_LEAP; + string SOUND_PAIN; + string SOUND_SNORT; + string SOUND_SPELL; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWING_HIT; + string SOUND_SWING_MISS; + string SOUND_THROW; + string SOUND_WARCRY; + int STEP_SIZE_NORM; + string SWING_ATTACK; + int SWING_STEP; + string THROWING_AXE; + string THROW_DELAY; + + BludgeonGazBase() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "m_attack1"; + ANIM_FLINCH = "flinch2"; + ANIM_DEATH = "death"; + GOLD_BAGS = 1; + GOLD_BAGS_PPLAYER = 1; + GOLD_PER_BAG = 50; + GOLD_RADIUS = 128; + GOLD_MAX_BAGS = 8; + ANIM_TRICK = "idle2"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "longjump"; + ANIM_THROW = "m_attack1"; + ANIM_THROW_HOLD = "m_attack1"; + ANIM_HAMMER = "m_attack2"; + ANIM_WARCRY = "warcry"; + ATTACK_MOVERANGE = 48; + ATTACK_RANGE = 110; + ATTACK_HITRANGE = 180; + CAN_FLINCH = 1; + LEAP_RANGE = 220; + ATTACK_HITCHANCE = 80; + STEP_SIZE_NORM = 48; + FREQ_IDLE = Random(5, 10); + FREQ_LEAP = 10.0; + FREQ_THROW = Random(5, 20); + FREQ_JUMP = Random(2, 5); + FREQ_STOMP = Random(10, 20); + FREQ_CHARGE = Random(10, 20); + DMG_SWING = RandomInt(50, 100); + DMG_STUN = RandomInt(25, 50); + DOT_BURN = RandomInt(100, 200); + DOT_POISON = RandomInt(25, 75); + DMG_CHARGE = RandomInt(50, 75); + DMG_THROW = 80; + CHANCE_STUN = 0.1; + SOUND_LEAP = "monsters/bludgeon/bludgeonattack2.wav"; + SOUND_WARCRY = "monsters/bludgeon/bludgeon_gaz_bat2.wav"; + SOUND_ALERT = "monsters/bludgeon/bludgeon_gaz_bat1.wav"; + SOUND_SWING_MISS = "zombie/claw_miss2.wav"; + SOUND_SWING_HIT = "zombie/claw_strike1.wav"; + SOUND_ATTACK1 = "monsters/bludgeon/bludgeon_gaz_atk1.wav"; + SOUND_ATTACK2 = "monsters/bludgeon/bludgeon_gaz_atk2.wav"; + SOUND_ATTACK3 = "monsters/bludgeon/bludgeon_gaz_atk3.wav"; + SOUND_THROW = "monsters/bludgeon/bludgeon_gaz_snort.wav"; + SOUND_DEATH = "monsters/bludgeon/bludgeon_gaz_death.wav"; + SOUND_IDLE1 = "monsters/bludgeon/bludgeon_gaz_ask.wav"; + SOUND_IDLE2 = "monsters/bludgeon/bludgeon_gaz_answer.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_PAIN = "monsters/bludgeon/bludgeon_gaz_pain.wav"; + SOUND_SPELL = "monsters/bludgeon/bludgeon_gaz_spell.wav"; + SOUND_SNORT = "monsters/bludgeon/bludgeon_gaz_snort.wav"; + SOUND_STEP1 = "gonarch/gon_step1.wav"; + SOUND_STEP2 = "gonarch/gon_step2.wav"; + SOUND_LAND = "garg/gar_step2.wav"; + SOUND_CHARGE_START = "monsters/bludgeon/bludgeon_gaz_snort.wav"; + SOUND_CHARGE_GO = "monsters/bludgeon/bludgeondeath2.wav"; + SOUND_BURN = "ambience/steamburst1.wav"; + Precache("magic/boom.wav"); + Precache("poison_cloud.spr"); + MONSTER_MODEL = "monsters/bludgeon_gaz.mdl"; + Precache(SOUND_DEATH); + Precache(MONSTER_MODEL); + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_IDLE); + if (m_hAttackTarget == "unset") + { + } + int RND_IDLE = RandomInt(1, 2); + if (RND_IDLE == 1) + { + EmitSound(GetOwner(), 0, SOUND_IDLE1, 10); + PlayAnim("critical", ANIM_TRICK); + } + if (RND_IDLE == 2) + { + EmitSound(GetOwner(), 0, SOUND_IDLE2, 10); + PlayAnim("critical", ANIM_WARCRY); + } + } + + void OnSpawn() override + { + SetModel(MONSTER_MODEL); + SetWidth(32); + SetHeight(96); + if (!(true)) return; + if (!(AM_MINI)) + { + SetName("Bludgeon"); + } + if ((AM_MINI)) + { + SetName("Young Bludgeon"); + } + if (!(AM_HAMMER)) + { + axe_mode(); + } + if ((AM_HAMMER)) + { + hammer_mode(); + } + SetDamageResistance("all", 0.6); + SetRace("demon"); + SetRoam(true); + SetHearingSensitivity(4); + SWING_STEP = 0; + if ((AM_DEMON)) + { + demon_mode(); + } + if ((AM_CORRUPT)) + { + corrupt_mode(); + } + } + + void axe_mode() + { + SetHealth(2000); + LogDebug("Axer"); + NPC_GIVE_EXP = 450; + SetModelBody(4, 1); + } + + void hammer_mode() + { + SetHealth(3000); + LogDebug("Hammah"); + NPC_GIVE_EXP = 550; + SetModelBody(4, 2); + } + + void demon_mode() + { + if (!(NPC_CUSTOM_NAME)) + { + if (!(AM_MINI)) + { + SetName("Demon Bludgeon"); + } + if ((AM_MINI)) + { + SetName("Young Demon Bludgeon"); + } + } + SetProp(GetOwner(), "skin", 1); + IS_UNHOLY = 1; + SetDamageResistance("all", 0.4); + SetDamageResistance("fire", 0.0); + SetDamageResistance("holy", 0.25); + NPC_GIVE_EXP *= 3.0; + } + + void corrupt_mode() + { + if (!(NPC_CUSTOM_NAME)) + { + if (!(AM_MINI)) + { + SetName("Corrupted Bludgeon"); + } + if ((AM_MINI)) + { + SetName("Young Corrupted Bludgeon"); + } + } + SetProp(GetOwner(), "skin", 2); + IS_UNHOLY = 1; + SetDamageResistance("all", 0.4); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 0.25); + NPC_GIVE_EXP *= 3.0; + ScheduleDelayedEvent(0.1, "poison_aura"); + ScheduleDelayedEvent(0.1, "poison_aura_scan"); + } + + void OnPostSpawn() override + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + if ((AM_HAMMER)) + { + ANIM_ATTACK = ANIM_HAMMER; + } + } + + void npc_targetsighted() + { + if ((I_R_FROZEN)) return; + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + int WARCRY_TYPE = RandomInt(1, 2); + if (WARCRY_TYPE == 1) + { + PlayAnim("critical", "warcry"); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + } + if (WARCRY_TYPE == 2) + { + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + } + if (!(AM_HAMMER)) + { + } + CHARGE_DELAY = 1; + FREQ_CHARGE("reset_charge_delay"); + } + string TARGET_RANGE = GetEntityRange(m_hAttackTarget); + if (!(TARGET_RANGE > ATTACK_RANGE)) return; + if (!(CHARGE_DELAY)) + { + if (!(I_R_FROZEN)) + { + } + CHARGE_TARGET = m_hAttackTarget; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 20.0; + CHARGE_DELAY = 1; + FREQ_CHARGE("reset_charge_delay"); + npcatk_suspend_ai(); + SetMoveAnim("charge_start"); + SetIdleAnim("charge_start"); + PlayAnim("critical", "charge_start"); + ScheduleDelayedEvent(1.0, "do_charge"); + EmitSound(GetOwner(), 0, SOUND_CHARGE_START, 10); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (TARGET_RANGE < LEAP_RANGE) + { + if (!(THROWING_AXE)) + { + } + if (!(LEAP_DELAY)) + { + } + if (!(AM_CHARGING)) + { + } + LEAP_DELAY = 1; + FREQ_LEAP("reset_leap_delay"); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 20.0; + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + SetMoveAnim(ANIM_LEAP); + PlayAnim("critical", ANIM_LEAP); + } + if (TARGET_RANGE > LEAP_RANGE) + { + if (!(AM_HAMMER)) + { + } + if (!(THROW_DELAY)) + { + } + THROW_DELAY = 1; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 20.0; + THROWING_AXE = 1; + EmitSound(GetOwner(), 0, SOUND_THROW, 10); + npcatk_suspend_ai(); + SetIdleAnim(ANIM_THROW_HOLD); + SetMoveAnim(ANIM_THROW_HOLD); + SetRoam(false); + PlayAnim("once", "break"); + PlayAnim("hold", ANIM_THROW); + ScheduleDelayedEvent(0.5, "throw_axe"); + } + } + + void throw_axe() + { + SetModelBody(4, 0); + string TARG_DEST = GetEntityOrigin(m_hAttackTarget); + TARG_DEST += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, ATTACK_RANGE, 0)); + string TRACE_START = GetMonsterProperty("origin"); + TRACE_START += "z"; + string TRACE_TARG = TraceLine(TRACE_START, TARGET_DEST); + string TRACE_DEST = TRACE_TARG; + if (!(IsValidPlayer(m_hAttackTarget))) + { + TARG_DEST += "z"; + } + SpawnNPC("monsters/summon/bludgeon_axe", /* TODO: $relpos */ $relpos(0, 40, 48), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), TARG_DEST, DMG_THROW + MY_AXE = m_hLastCreated; + throw_axe_loop(); + } + + void throw_axe_loop() + { + if (!(THROWING_AXE)) return; + SetMoveDest(MY_AXE); + ScheduleDelayedEvent(0.1, "throw_axe_loop"); + } + + void reset_throw_delay() + { + THROW_DELAY = 0; + } + + void do_charge() + { + SetMoveSpeed(3.0); + CHARGE_DEST = GetEntityOrigin(CHARGE_TARGET); + CHARGE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 256, 0)); + SetMoveAnim("charge"); + SetIdleAnim("charge"); + CHARGE_COUNT = 0; + AM_CHARGING = 1; + EmitSound(GetOwner(), 0, SOUND_CHARGE_GO, 10); + charge_loop(); + } + + void charge_loop() + { + CHARGE_COUNT += 1; + SetMoveDest(CHARGE_DEST); + if (CHARGE_COUNT == 30) + { + end_charge(); + } + if (Distance(CHARGE_DEST, GetMonsterProperty("origin")) < ATTACK_MOVERANGE) + { + end_charge(); + } + if (!(AM_CHARGING)) return; + ScheduleDelayedEvent(0.1, "charge_loop"); + string SCAN_LOC = /* TODO: $relpos */ $relpos(0, 32, 0); + CHARGE_LIST = FindEntitiesInSphere("enemy", 96); + if (CHARGE_LIST != "none") + { + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 10); + for (int i = 0; i < GetTokenCount(CHARGE_LIST, ";"); i++) + { + charge_affect_targets(); + } + } + } + + void charge_affect_targets() + { + string CUR_TARG = GetToken(CHARGE_LIST, i, ";"); + float LR_RAND = Random(-200, 200); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(LR_RAND, 600, 110)); + DoDamage(CUR_TARG, "direct", DMG_CHARGE, 1.0, GetOwner()); + } + + void end_charge() + { + AM_CHARGING = 0; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + SetMoveSpeed(1.0); + npcatk_resume_ai(); + } + + void swing_dodamage() + { + if ((AM_DEMON)) + { + ApplyEffect(param2, "effects/dot_fire", 3, GetEntityIndex(GetOwner()), DOT_BURN); + } + if ((AM_CORRUPT)) + { + ApplyEffect(param2, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + if ((SWING_ATTACK)) + { + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_SWING_MISS, 10); + } + if ((param1)) + { + } + EmitSound(GetOwner(), 0, SOUND_SWING_HIT, 10); + AddVelocity(param2, /* TODO: $relvel */ $relvel(-100, 130, 120)); + SWING_ATTACK = 0; + } + if ((AM_HAMMER)) + { + if ((param1)) + { + } + if (RandomInt(1, 100) < CHANCE_STUN) + { + } + if (GetEntityRange(param2) < ATTACK_HITRANGE) + { + } + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + EmitSound(GetOwner(), 0, SOUND_SNORT, 10); + } + } + + void reset_charge_delay() + { + CHARGE_DELAY = 0; + } + + void reset_leap_delay() + { + LEAP_DELAY = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void ext_bd_toggle() + { + if ((SUSPEND_AI)) + { + SetRoam(true); + npcatk_resume_ai(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SUSPEND_AI)) + { + SetRoam(false); + npcatk_suspend_ai(); + } + } + + void ext_follow() + { + SetMoveDest(param1); + } + + void ext_playanim() + { + PlayAnim("critical", param1); + } + + void ext_demon() + { + AM_DEMON = 1; + SetProp(GetOwner(), "skin", param1); + } + + void ext_hammer() + { + AM_HAMMER = 1; + SetModelBody(4, 2); + } + + void ext_axe() + { + AM_HAMMER = 0; + SetModelBody(4, 1); + } + + void cycle_up() + { + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + jump_check(); + } + + void jump_check() + { + FREQ_JUMP("jump_check"); + if (!(m_hAttackTarget != "unset")) return; + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + string MY_Z = (GetMonsterProperty("origin")).z; + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (!(Z_DIFF > ATTACK_RANGE)) return; + npcatk_faceattacker(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "do_jump"); + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + } + + void do_jump() + { + SetStepSize(1000); + SetMoveAnim(ANIM_JUMP); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 800)); + ScheduleDelayedEvent(0.5, "push_forward"); + ScheduleDelayedEvent(1.0, "jump_done"); + } + + void push_forward() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void jump_done() + { + SetStepSize(STEP_SIZE_NORM); + SetMoveAnim(ANIM_RUN); + } + + void leap_land() + { + SetMoveAnim(ANIM_RUN); + EmitSound(GetOwner(), 0, SOUND_LAND, 10); + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128, 0, DMG_STUN + } + + void attack1() + { + SWING_ATTACK = 1; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWING, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "slash", "dmgevent:swing"); + if ((THROWING_AXE)) + { + SetAnimFrameRate(0.0001); + } + } + + void attack2() + { + attack1(); + } + + void walk_step() + { + } + + void run_step() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 10); + } + + void swing_start() + { + SWING_STEP += 1; + if (!(SWING_STEP > 2)) return; + SWING_STEP = 0; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void my_target_died() + { + PlayAnim("once", "warcry"); + EmitSound(GetOwner(), 0, SOUND_SPELL, 10); + } + + void catch_axe() + { + npcatk_resume_ai(); + PlayAnim("once", "break"); + SetRoam(true); + THROWING_AXE = 0; + SetModelBody(4, 1); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + FREQ_THROW("reset_throw_delay"); + SetAnimFrameRate(1.0); + } + + void chest_b_castle_bonus() + { + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 1.0; + CONTAINER_SCRIPT = "chests/lostcaverns2"; + } + + void poison_aura() + { + if (!(IsEntityAlive(GetOwner()))) return; + ClientEvent("new", "all", "effects/sfx_poison_aura", GetEntityIndex(GetOwner()), 96, 19.0); + ScheduleDelayedEvent(20.0, "poison_aura"); + } + + void poison_aura_scan() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(0.5, "poison_aura_scan"); + if (!(m_hAttackTarget != "unset")) return; + if ((AM_CHARGING)) return; + POISON_TARGETS = FindEntitiesInSphere("enemy", 96); + if (!(POISON_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(POISON_TARGETS, ";"); i++) + { + poison_aura_affect(); + } + } + + void poison_aura_affect() + { + string CUR_TARG = GetToken(POISON_TARGETS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + +} + +} diff --git a/scripts/angelscript/monsters/boar.as b/scripts/angelscript/monsters/boar.as new file mode 100644 index 00000000..6d29bc56 --- /dev/null +++ b/scripts/angelscript/monsters/boar.as @@ -0,0 +1,57 @@ +#pragma context server + +#include "monsters/boar_base.as" + +namespace MS +{ + +class Boar : CGameScript +{ + int BOAR_CAN_CHARGE; + int CAN_FLEE; + float FLEE_CHANCE; + int FLEE_HEALTH; + float GORE_FORWARD_DAMAGE; + float GORE_SIDE_DAMAGE; + int NPC_GIVE_EXP; + string PUSH_VEL; + + Boar() + { + CAN_FLEE = 1; + FLEE_HEALTH = 10; + FLEE_CHANCE = 0.25; + NPC_GIVE_EXP = 6; + GORE_FORWARD_DAMAGE = 1.0; + GORE_SIDE_DAMAGE = 0.7; + BOAR_CAN_CHARGE = 0; + } + + void OnSpawn() override + { + SetHealth(20); + SetName("Wild Boar"); + SetHearingSensitivity(0); + } + + void gore_forward() + { + PUSH_VEL = Vector3(0, 0, 0); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, GORE_FORWARD_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void gore_left() + { + PUSH_VEL = /* TODO: $relvel */ $relvel(100, 50, 10); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, GORE_SIDE_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void gore_right() + { + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, 50, 10); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, GORE_SIDE_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + +} + +} diff --git a/scripts/angelscript/monsters/boar1.as b/scripts/angelscript/monsters/boar1.as new file mode 100644 index 00000000..e5142d8e --- /dev/null +++ b/scripts/angelscript/monsters/boar1.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "monsters/boar.as" + +namespace MS +{ + +class Boar1 : CGameScript +{ + int NPC_GIVE_EXP; + + void OnSpawn() override + { + SetHealth(15); + SetWidth(50); + SetHeight(40); + if ((StringToLower(GetMapName())).findFirst("goblin") >= 0) + { + SetRace("goblin"); + } + else + { + SetRace("wildanimal"); + } + SetName("Tamed Boar"); + SetRoam(true); + SetHearingSensitivity(0); + NPC_GIVE_EXP = 6; + SetModel("monsters/boar.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle1"); + SetMoveAnim("walk"); + SetActionAnim("gore_forward"); + SetEntitySkin(GetOwner(), SKIN_NAME); + } + + void npc_enemysighted() + { + SetMoveSpeed(1); + } + + void npc_attack() + { + } + +} + +} diff --git a/scripts/angelscript/monsters/boar2.as b/scripts/angelscript/monsters/boar2.as new file mode 100644 index 00000000..f53027cd --- /dev/null +++ b/scripts/angelscript/monsters/boar2.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "monsters/boar_base_remake.as" + +namespace MS +{ + +class Boar2 : CGameScript +{ + float ATTACK_HITCHANCE; + string BOAR_MODEL; + int BOAR_SIZE; + int BOAR_SKIN; + int DMG_CHARGE; + float DMG_GORE_FORWARD; + float DMG_GORE_LEFT; + float DMG_GORE_RIGHT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int NPC_GIVE_EXP; + + Boar2() + { + BOAR_SIZE = 2; + BOAR_SKIN = 0; + BOAR_MODEL = "monsters/boar2.mdl"; + NPC_GIVE_EXP = 125; + DMG_GORE_FORWARD = Random(15.0, 20.0); + DMG_GORE_LEFT = Random(10.0, 15.0); + DMG_GORE_RIGHT = Random(10.0, 15.0); + DMG_CHARGE = RandomInt(50, 100); + ATTACK_HITCHANCE = 0.7; + FLEE_CHANCE = 0.1; + } + + void boar_spawn() + { + SetName("Great Boar"); + SetHealth(400); + SetHearingSensitivity(2); + SetRoam(true); + } + + void OnPostSpawn() override + { + DROP_ITEM1 = "skin_boar_heavy"; + DROP_ITEM1_CHANCE = 0.5; + } + +} + +} diff --git a/scripts/angelscript/monsters/boar3.as b/scripts/angelscript/monsters/boar3.as new file mode 100644 index 00000000..43c02e85 --- /dev/null +++ b/scripts/angelscript/monsters/boar3.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "monsters/boar_base_remake.as" + +namespace MS +{ + +class Boar3 : CGameScript +{ + float ATTACK_HITCHANCE; + string BOAR_MODEL; + int BOAR_SIZE; + int BOAR_SKIN; + int DMG_CHARGE; + int DMG_GORE_FORWARD; + float DMG_GORE_LEFT; + float DMG_GORE_RIGHT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int NPC_GIVE_EXP; + + Boar3() + { + BOAR_SIZE = 3; + BOAR_SKIN = 0; + BOAR_MODEL = "monsters/boar3.mdl"; + NPC_GIVE_EXP = 350; + DMG_GORE_FORWARD = 60; + DMG_GORE_LEFT = Random(40.0, 60.0); + DMG_GORE_RIGHT = Random(40.0, 60.0); + DMG_CHARGE = RandomInt(200, 300); + ATTACK_HITCHANCE = 0.7; + FLEE_CHANCE = 0.1; + } + + void boar_spawn() + { + SetName("Gigantic Boar"); + SetHealth(1000); + SetHearingSensitivity(2); + SetRoam(true); + } + + void OnPostSpawn() override + { + DROP_ITEM1 = "skin_boar_heavy"; + DROP_ITEM1_CHANCE = 0.5; + } + +} + +} diff --git a/scripts/angelscript/monsters/boar_base.as b/scripts/angelscript/monsters/boar_base.as new file mode 100644 index 00000000..ff9897b8 --- /dev/null +++ b/scripts/angelscript/monsters/boar_base.as @@ -0,0 +1,271 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class BoarBase : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BOAR_RUN; + string ANIM_CHARGE; + string ANIM_DEATH; + string ANIM_FORWARD; + string ANIM_IDLE; + string ANIM_IDLE_EATGRASS; + string ANIM_LEFT; + string ANIM_RIGHT; + string ANIM_RUN; + string ANIM_STOMP; + string ANIM_WALK; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string BOAR_CAN_FLEE; + string BOAR_CHARGE_TARGET; + int BOAR_IS_CHARGING; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_HEAR; + int CAN_RETALIATE; + string CL_SCRIPT; + string CL_SCRIPT_ID; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int HUNT_AGRO; + int MOVE_RANGE; + float RETALIATE_CHANGETARGET_CHANCE; + string SOUND_CHARGE; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + BoarBase() + { + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/boar/boarpain.wav"; + SOUND_IDLE1 = "monsters/boar/boaridle.wav"; + SOUND_IDLE2 = "monsters/boar/boarsight2.wav"; + SOUND_CHARGE = "monsters/boar/boarsight.wav"; + SOUND_DEATH = "monsters/boar/boardeath.wav"; + HUNT_AGRO = 0; + Precache(SOUND_IDLE1); + Precache(SOUND_IDLE2); + Precache(SOUND_DEATH); + Precache(SOUND_CHARGE); + ANIM_IDLE = "idle1"; + ANIM_IDLE_EATGRASS = "idle2"; + ANIM_RUN = "run"; + ANIM_BOAR_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_FORWARD = "gore_forward"; + ANIM_RIGHT = "gore_right"; + ANIM_LEFT = "gore_left"; + ANIM_STOMP = "stompsnort"; + ANIM_CHARGE = "charge"; + ANIM_DEATH = "die1"; + MOVE_RANGE = 64; + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.5; + DROP_ITEM1 = "skin_boar"; + DROP_ITEM1_CHANCE = 0.2; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + BOAR_IS_CHARGING = 0; + BOAR_CHARGE_TARGET = �PNONE�P; + ANIM_ATTACK = ANIM_FORWARD; + CL_SCRIPT = "monsters/boar_base_cl_charge"; + Precache(CL_SCRIPT); + } + + void OnRepeatTimer() + { + SetRepeatDelay(RandomInt(10, 25)); + if (!(IS_HUNTING)) + { + } + if (!(IS_FLEEING)) + { + } + // PlayRandomSound from: "game.sound.maxvol", SOUND_IDLE1, SOUND_IDLE2 + array sounds = {"game.sound.maxvol", SOUND_IDLE1, SOUND_IDLE2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(RandomInt(8, 12)); + if (!(IS_HUNTING)) + { + } + if (!(IS_FLEEING)) + { + } + PlayAnim("once", ANIM_IDLE_EATGRASS); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(0.1); + if ((BOAR_IS_CHARGING)) + { + } + if (!(IS_FLEEING)) + { + } + string CHARGE_RANGE = MOVE_RANGE; + CHARGE_RANGE *= 1.8; + if (GetEntityDist(BOAR_CHARGE_TARGET) <= CHARGE_RANGE) + { + } + DoDamage(BOAR_CHARGE_TARGET, ATTACK_HITRANGE, BOAR_CHARGE_DMG, 1.0, "slash"); + boar_charge_stop(); + } + + void OnSpawn() override + { + SetWidth(50); + SetHeight(40); + SetRace("wildanimal"); + SetRoam(true); + SetHearingSensitivity(0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetEntitySkin(GetOwner(), SKIN_NAME); + SetModel("monsters/boar.mdl"); + if (StringToLower(GetMapName()) == "nightmare_thornlands") + { + SetMonsterClip(0); + } + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(PUSH_VEL != "PUSH_VEL")) return; + if ((BOAR_IS_CHARGING)) + { + boar_charge_hit(); + } + else + { + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void npc_attack() + { + int NEXT_ATTACK = RandomInt(0, 2); + if (NEXT_ATTACK == 0) + { + ANIM_ATTACK = ANIM_FORWARD; + } + else + { + if (NEXT_ATTACK == 1) + { + ANIM_ATTACK = ANIM_LEFT; + } + else + { + if (NEXT_ATTACK == 2) + { + ANIM_ATTACK = ANIM_RIGHT; + } + } + } + } + + void npc_targetsighted() + { + if (!(BOAR_CAN_CHARGE)) return; + if ((BOAR_IS_CHARGING)) return; + if (!(GetEntityDist(HUNT_LASTTARGET) > 256)) return; + BOAR_CHARGE_TARGET = HUNT_LASTTARGET; + boar_charge(); + } + + void boar_charge() + { + EmitSound(GetOwner(), CHAN_VOICE, SOUND_CHARGE, "game.sound.maxvol"); + AS_ATTACKING = GetGameTime(); + PlayAnim("once", ANIM_STOMP); + SetMoveSpeed(3); + ANIM_RUN = ANIM_CHARGE; + BOAR_IS_CHARGING = 1; + CAN_ATTACK = 0; + CAN_HEAR = 0; + CAN_RETALIATE = 0; + BOAR_CAN_FLEE = CAN_FLEE; + CAN_FLEE = 0; + ScheduleDelayedEvent(1, "boar_charge2"); + ScheduleDelayedEvent(15, "boar_charge_stop"); + ClientEvent("new", "all_in_sight", CL_SCRIPT, GetEntityIndex(GetOwner())); + CL_SCRIPT_ID = "game.script.last_sent_id"; + } + + void boar_charge2() + { + EmitSound(GetOwner(), CHAN_VOICE, SOUND_CHARGE, "game.sound.maxvol"); + } + + void boar_charge_stop() + { + if (!(BOAR_IS_CHARGING)) return; + SetMoveSpeed(1); + ANIM_RUN = ANIM_BOAR_RUN; + BOAR_CHARGE_TARGET = �PNONE�P; + BOAR_IS_CHARGING = 0; + CAN_ATTACK = 1; + CAN_HEAR = 1; + CAN_RETALIATE = 1; + CAN_FLEE = BOAR_CAN_FLEE; + ClientEvent("remove", "all", CL_SCRIPT); + } + + void boar_charge_hit() + { + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(0, 200, 200)); + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", 3, GetEntityIndex(GetOwner())); + } + + void npc_wander() + { + if (!(BOAR_IS_CHARGING)) return; + boar_charge_stop(); + } + + void gore_forward() + { + if (!(IS_HARD)) return; + string TARG_RANGE = GetEntityRange(HUNT_LASTTARGET); + int MAX_PUSH_RANGE = 96; + if (!(TARG_RANGE < MAX_PUSH_RANGE)) return; + string RANGE_PERCENT = TARG_RANGE; + RANGE_PERCENT /= MAX_PUSH_RANGE; + string PUSH_STR = /* TODO: $get_skill_ratio */ $get_skill_ratio(RANGE_PERCENT, 400, 110); + if ((G_DEVELOPER_MODE)) + { + SendColoredMessage(HUNT_LASTTARGET, "gore - " + PUSH + "str " + PUSH_STR + "per " + RANGE_PERCENT + "rng " + TARG_RANGE); + } + AddVelocity(HUNT_LASTTARGET, /* TODO: $relvel */ $relvel(0, PUSH_STR, 110)); + } + +} + +} diff --git a/scripts/angelscript/monsters/boar_base_cl_charge.as b/scripts/angelscript/monsters/boar_base_cl_charge.as new file mode 100644 index 00000000..46c0ffcf --- /dev/null +++ b/scripts/angelscript/monsters/boar_base_cl_charge.as @@ -0,0 +1,92 @@ +#pragma context client + +namespace MS +{ + +class BoarBaseClCharge : CGameScript +{ + int IS_ACTIVE; + int OFS_NEG; + int OFS_POS; + string SPRITE_1; + string l.charging; + int script.boneidx1; + int script.boneidx2; + string script.modelid; + + BoarBaseClCharge() + { + SPRITE_1 = "bigsmoke.spr"; + OFS_POS = 8; + OFS_NEG = -8; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.15, 0.3)); + if ((IS_ACTIVE)) + { + } + if (script.modelid > 0) + { + } + int l.charging = 0; + if (/* TODO: $getcl */ $getcl(script.modelid, "anim") == 3) + { + l.charging = 1; + } + if (/* TODO: $getcl */ $getcl(script.modelid, "anim") == 5) + { + l.charging = 1; + } + if ((l.charging)) + { + } + string l.pos = /* TODO: $getcl */ $getcl(script.modelid, "bonepos", script.boneidx1); + do_effect(l.pos); + string l.pos = /* TODO: $getcl */ $getcl(script.modelid, "bonepos", script.boneidx2); + do_effect(l.pos); + } + + void client_activate() + { + script.modelid = param1; + script.boneidx1 = 4; + script.boneidx2 = 5; + ScheduleDelayedEvent(30, "effect_die"); + } + + void do_effect() + { + if (!(IS_ACTIVE)) return; + string l.pos = param1; + l.pos += Vector3(RandomInt(OFS_NEG, OFS_POS), RandomInt(OFS_NEG, OFS_POS), 0); + ClientEffect("tempent", "sprite", SPRITE_1, l.pos, "setup_sprite1"); + } + + void setup_sprite1() + { + ClientEffect("tempent", "set_current_prop", "death_delay", Random(0.5, 1.2)); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 80); + ClientEffect("tempent", "set_current_prop", "gravity", Random(-0.02, -0.01)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + + void effect_die() + { + RemoveScript(); + } + + void remove_fx() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(1.5, "effect_die"); + } + +} + +} diff --git a/scripts/angelscript/monsters/boar_base_cl_charge2.as b/scripts/angelscript/monsters/boar_base_cl_charge2.as new file mode 100644 index 00000000..27331ea0 --- /dev/null +++ b/scripts/angelscript/monsters/boar_base_cl_charge2.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class BoarBaseClCharge2 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/boar_base_remake.as b/scripts/angelscript/monsters/boar_base_remake.as new file mode 100644 index 00000000..a5bdb4e2 --- /dev/null +++ b/scripts/angelscript/monsters/boar_base_remake.as @@ -0,0 +1,362 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class BoarBaseRemake : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1_LARGE; + string ANIM_ATTACK1_NORM; + string ANIM_ATTACK_DEF; + string ANIM_ATTACK_GORE_LEFT; + string ANIM_ATTACK_GORE_RIGHT; + string ANIM_BACKUP; + string ANIM_CHARGE; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_IDLE2; + string ANIM_RUN; + string ANIM_STOMP; + string ANIM_WALK; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + string ATTACK_HITRANGE; + string ATTACK_MOVERANGE; + string ATTACK_RANGE; + string BOAR_CHARGE_FX_IDX; + string BOAR_CHARGE_TARGET; + string BOAR_CHARGING; + string BOAR_HEIGHT; + int BOAR_HEIGHT1; + int BOAR_HEIGHT2; + int BOAR_HEIGHT3; + string BOAR_LEFT_PUSH; + string BOAR_MODEL; + string BOAR_RIGHT_PUSH; + int BOAR_SIZE; + int BOAR_SKIN; + string BOAR_WIDTH; + int BOAR_WIDTH1; + int BOAR_WIDTH2; + int BOAR_WIDTH3; + string CL_CHARGE_SCRIPT; + string DMG_ATTACK; + float FREQ_BACKUP; + float FREQ_CHARGE; + string NEXT_BACKUP; + string NEXT_CHARGE; + string PUSH_VEL; + string SOUND_CHARGE; + string SOUND_DEATH; + string SOUND_GORE; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWIPE1; + string SOUND_SWIPE2; + + BoarBaseRemake() + { + ANIM_IDLE = "idle1"; + ANIM_IDLE2 = "idle2"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "gore_forward"; + ANIM_ATTACK1_NORM = "gore_forward"; + ANIM_ATTACK1_LARGE = "gore_forward2"; + ANIM_ATTACK_GORE_RIGHT = "gore_right"; + ANIM_ATTACK_GORE_LEFT = "gore_left"; + ANIM_STOMP = "stompsnort"; + ANIM_CHARGE = "charge"; + ANIM_DEATH = "die1"; + ANIM_BACKUP = "back_off"; + ATTACK_HITCHANCE = 0.5; + BOAR_WIDTH1 = 50; + BOAR_HEIGHT1 = 50; + BOAR_WIDTH2 = 75; + BOAR_HEIGHT2 = 75; + BOAR_WIDTH3 = 96; + BOAR_HEIGHT3 = 96; + BOAR_RIGHT_PUSH = /* TODO: $relvel */ $relvel(-50, 50, 10); + BOAR_LEFT_PUSH = /* TODO: $relvel */ $relvel(-100, 50, 10); + BOAR_SIZE = 1; + BOAR_SKIN = 0; + BOAR_MODEL = "monsters/boar1.mdl"; + FREQ_CHARGE = 20.0; + FREQ_BACKUP = 10.0; + CL_CHARGE_SCRIPT = "monsters/boar_base_cl_charge"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/boar/boarpain.wav"; + SOUND_IDLE1 = "monsters/boar/boaridle.wav"; + SOUND_IDLE2 = "monsters/boar/boarsight2.wav"; + SOUND_CHARGE = "monsters/boar/boarsight.wav"; + SOUND_DEATH = "monsters/boar/boardeath.wav"; + SOUND_SWIPE1 = "zombie/claw_miss1.wav"; + SOUND_SWIPE2 = "zombie/claw_miss2.wav"; + SOUND_GORE = "zombie/claw_strike3.wav"; + } + + void game_precache() + { + Precache("monsters/boar/hoofbeats_loop.wav"); + } + + void game_postspawn() + { + ATTACK_RANGE = BOAR_WIDTH; + ATTACK_RANGE *= 1.25; + ATTACK_HITRANGE = BOAR_WIDTH; + ATTACK_HITRANGE *= 1.5; + ATTACK_MOVERANGE = BOAR_WIDTH; + ATTACK_MOVERANGE *= 1.2; + if (BOAR_SIZE > 1) + { + ANIM_ATTACK = ANIM_ATTACK1_LARGE; + ANIM_ATTACK_DEF = ANIM_ATTACK1_LARGE; + } + else + { + ANIM_ATTACK = ANIM_ATTACK1_NORM; + ANIM_ATTACK_DEF = ANIM_ATTACK1_NORM; + } + } + + void OnSpawn() override + { + SetModel(BOAR_MODEL); + SetProp(GetOwner(), "skin", BOAR_SKIN); + if (BOAR_SIZE == 1) + { + BOAR_WIDTH = BOAR_WIDTH1; + BOAR_HEIGHT = BOAR_HEIGHT1; + } + if (BOAR_SIZE == 2) + { + BOAR_WIDTH = BOAR_WIDTH2; + BOAR_HEIGHT = BOAR_HEIGHT2; + } + if (BOAR_SIZE == 3) + { + BOAR_WIDTH = BOAR_WIDTH3; + BOAR_HEIGHT = BOAR_HEIGHT3; + } + SetWidth(BOAR_WIDTH); + SetHeight(BOAR_HEIGHT); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + if (StringToLower(GetMapName()) == "nightmare_thornlands") + { + SetMonsterClip(0); + } + SetRace("wildanimal"); + SetRoam(true); + boar_spawn(); + } + + void npc_targetsighted() + { + if ((BOAR_CHARGING)) return; + if (!(GetGameTime() > NEXT_CHARGE)) return; + if (!(false)) return; + if (GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE) + { + NEXT_CHARGE = GetGameTime(); + NEXT_CHARGE += FREQ_CHARGE; + BOAR_CHARGING = 1; + boar_charge_sequence(); + } + else + { + if (GetGameTime() > NEXT_BACKUP) + { + } + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 6.0; + NEXT_BACKUP = GetGameTime(); + NEXT_BACKUP += FREQ_BACKUP; + SetRoam(false); + PlayAnim("critical", ANIM_BACKUP); + npcatk_suspend_movement(ANIM_BACKUP, 1.0); + LogDebug("backingup"); + } + } + + void npcatk_resume_movement() + { + SetRoam(true); + } + + void boar_charge_sequence() + { + BOAR_CHARGE_TARGET = m_hAttackTarget; + EmitSound(GetOwner(), 1, SOUND_CHARGE, 10); + SetRoam(false); + PlayAnim("critical", ANIM_STOMP); + SetMoveAnim(ANIM_CHARGE); + SetMoveSpeed(2); + ScheduleDelayedEvent(1.0, "boar_charge_sequence2"); + ScheduleDelayedEvent(5.0, "boar_charge_stop"); + } + + void boar_charge_sequence2() + { + if (!(IsEntityAlive(GetOwner()))) return; + ClientEvent("new", "all", CL_CHARGE_SCRIPT, GetEntityIndex(GetOwner()), BOAR_SIZE); + BOAR_CHARGE_FX_IDX = "game.script.last_sent_id"; + if (BOAR_SIZE == 3) + { + LogDebug("sound_loop_start"); + // svplaysound: svplaysound 2 10 monsters/boar/hoofbeats_loop.wav + EmitSound(2, 10, "monsters/boar/hoofbeats_loop.wav"); + } + boar_charge_loop(); + } + + void boar_charge_loop() + { + if (!(BOAR_CHARGING)) return; + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(0.1, "boar_charge_loop"); + SetMoveDest(BOAR_CHARGE_TARGET); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 200, 0)); + if (GetEntityRange(BOAR_CHARGE_TARGET) < ATTACK_RANGE) + { + DoDamage(BOAR_CHARGE_TARGET, ATTACK_HITRANGE, DMG_CHARGE, 1.0, "blunt"); + AddVelocity(BOAR_CHARGE_TARGET, /* TODO: $relvel */ $relvel(0, 200, 200)); + ApplyEffect(BOAR_CHARGE_TARGET, "effects/debuff_stun", 3, GetEntityIndex(GetOwner())); + boar_charge_stop(); + } + } + + void boar_charge_stop() + { + if (BOAR_SIZE == 3) + { + LogDebug("sound_loop_stop"); + // svplaysound: svplaysound 2 0 monsters/boar/hoofbeats_loop.wav + EmitSound(2, 0, "monsters/boar/hoofbeats_loop.wav"); + } + if (BOAR_CHARGE_FX_IDX > 0) + { + ClientEvent("update", "all", BOAR_CHARGE_FX_IDX, "remove_fx"); + } + BOAR_CHARGE_FX_IDX = 0; + SetMoveSpeed(1); + SetRoam(true); + BOAR_CHARGING = 0; + SetMoveAnim(ANIM_RUN); + NEXT_CHARGE = GetGameTime(); + NEXT_CHARGE += FREQ_CHARGE; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((BOAR_CHARGING)) + { + if (BOAR_SIZE == 3) + { + } + // svplaysound: svplaysound 2 0 monsters/boar/hoofbeats_loop.wav + EmitSound(2, 0, "monsters/boar/hoofbeats_loop.wav"); + } + BOAR_CHARGING = 0; + if (BOAR_CHARGE_FX_IDX > 0) + { + ClientEvent("update", "all", BOAR_CHARGE_FX_IDX, "remove_fx"); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN, SOUND_PAIN, SOUND_PAIN + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN, SOUND_PAIN, SOUND_PAIN}; + EmitSound(GetOwner(), 4, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void npc_selectattack() + { + int NEXT_ATTACK = RandomInt(0, 2); + if (NEXT_ATTACK == 0) + { + ANIM_ATTACK = ANIM_ATTACK_DEF; + } + if (NEXT_ATTACK == 1) + { + ANIM_ATTACK = ANIM_ATTACK_GORE_RIGHT; + } + if (NEXT_ATTACK == 2) + { + ANIM_ATTACK = ANIM_ATTACK_GORE_LEFT; + } + } + + void gore_left() + { + PUSH_VEL = BOAR_LEFT_PUSH; + DMG_ATTACK = DMG_GORE_LEFT; + if (BOAR_SIZE == 3) + { + // PlayRandomSound from: SOUND_SWIPE1, SOUND_SWIPE2 + array sounds = {SOUND_SWIPE1, SOUND_SWIPE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + gore_damage(); + } + + void gore_right() + { + PUSH_VEL = BOAR_RIGHT_PUSH; + DMG_ATTACK = DMG_GORE_RIGHT; + if (BOAR_SIZE == 3) + { + // PlayRandomSound from: SOUND_SWIPE1, SOUND_SWIPE2 + array sounds = {SOUND_SWIPE1, SOUND_SWIPE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + gore_damage(); + } + + void gore_forward() + { + DMG_ATTACK = DMG_GORE_FORWARD; + gore_damage(); + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + string MAX_PUSH_RANGE = ATTACK_HITRANGE; + if (!(TARG_RANGE < MAX_PUSH_RANGE)) return; + string RANGE_PERCENT = TARG_RANGE; + RANGE_PERCENT /= MAX_PUSH_RANGE; + string PUSH_STR = /* TODO: $ratio */ $ratio(RANGE_PERCENT, 400, 110); + PUSH_VEL = /* TODO: $relvel */ $relvel(0, PUSH_STR, 110); + if (BOAR_SIZE == 3) + { + // PlayRandomSound from: SOUND_GORE + array sounds = {SOUND_GORE}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + } + + void gore_damage() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_ATTACK, ATTACK_HITCHANCE, "slash"); + if (!(PUSH_VEL != "PUSH_VEL")) return; + AddVelocity(m_hAttackTarget, PUSH_VEL); + } + + void back_off() + { + LogDebug("animevent back_off"); + if ((I_R_FROZEN)) return; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -400, 110)); + } + +} + +} diff --git a/scripts/angelscript/monsters/boar_hard.as b/scripts/angelscript/monsters/boar_hard.as new file mode 100644 index 00000000..74b24ec0 --- /dev/null +++ b/scripts/angelscript/monsters/boar_hard.as @@ -0,0 +1,47 @@ +#pragma context server + +#include "monsters/boar.as" + +namespace MS +{ + +class BoarHard : CGameScript +{ + int BOAR_CAN_CHARGE; + int BOAR_CHARGE_DMG; + int CAN_HEAR; + float FLEE_CHANCE; + int GORE_FORWARD_DAMAGE; + float GORE_SIDE_DAMAGE; + int HUNT_AGRO; + int IS_HARD; + int NPC_BASE_EXP; + + BoarHard() + { + GORE_FORWARD_DAMAGE = 2; + GORE_SIDE_DAMAGE = 1.2; + BOAR_CAN_CHARGE = 1; + BOAR_CHARGE_DMG = 4; + HUNT_AGRO = 1; + CAN_HEAR = 1; + FLEE_CHANCE = 0.1; + IS_HARD = 1; + NPC_BASE_EXP = 9; + } + + void OnSpawn() override + { + SetHealth(25); + SetName("Ferocious Wild Boar"); + SetHearingSensitivity(2); + SetModel("monsters/boar1.mdl"); + if (StringToLower(GetMapName()) == "nightmare_thornlands") + { + SetMonsterClip(0); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/boar_lava3.as b/scripts/angelscript/monsters/boar_lava3.as new file mode 100644 index 00000000..97fd890d --- /dev/null +++ b/scripts/angelscript/monsters/boar_lava3.as @@ -0,0 +1,102 @@ +#pragma context server + +#include "monsters/boar_base_remake.as" + +namespace MS +{ + +class BoarLava3 : CGameScript +{ + float ATTACK_HITCHANCE; + string BOAR_MODEL; + int BOAR_SIZE; + int BOAR_SKIN; + string BURST_TARGS; + string CL_CHARGE_SCRIPT; + int DMG_CHARGE; + float DMG_GORE_FORWARD; + float DMG_GORE_LEFT; + float DMG_GORE_RIGHT; + int DOT_FIRE; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int NPC_GIVE_EXP; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + BoarLava3() + { + BOAR_SIZE = 3; + BOAR_SKIN = 2; + BOAR_MODEL = "monsters/boar3.mdl"; + NPC_GIVE_EXP = 1000; + DMG_GORE_FORWARD = Random(60.0, 80.0); + DMG_GORE_LEFT = Random(60.0, 80.0); + DMG_GORE_RIGHT = Random(60.0, 80.0); + DMG_CHARGE = RandomInt(300, 500); + DOT_FIRE = 75; + ATTACK_HITCHANCE = 0.7; + FLEE_CHANCE = 0.1; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + CL_CHARGE_SCRIPT = "monsters/boar_lava_cl"; + } + + void game_precache() + { + Precache("fire1_fixed2.spr"); + } + + void boar_spawn() + { + SetName("Great Lava Boar"); + SetRace("demon"); + SetHealth(3000); + SetHearingSensitivity(4); + SetRoam(true); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("holy", 0.5); + } + + void OnPostSpawn() override + { + DROP_ITEM1_CHANCE = 0.0; + } + + void game_dodamage() + { + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + ApplyEffect(m_hAttackTarget, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + + void boar_charge_sequence() + { + string BURST_ORG = GetEntityOrigin(GetOwner()); + BURST_ORG += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, -50, 0)); + ClientEvent("new", "all", "effects/sfx_fire_burst", BURST_ORG, 196, 1, Vector3(255, 128, 0)); + BURST_TARGS = FindEntitiesInSphere("enemy", 196); + if (!(BURST_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + burst_affect_targets(); + } + } + + void burst_affect_targets() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 2000, 400))); + } + +} + +} diff --git a/scripts/angelscript/monsters/boar_lava_cl.as b/scripts/angelscript/monsters/boar_lava_cl.as new file mode 100644 index 00000000..d203fa27 --- /dev/null +++ b/scripts/angelscript/monsters/boar_lava_cl.as @@ -0,0 +1,125 @@ +#pragma context client + +namespace MS +{ + +class BoarLavaCl : CGameScript +{ + string FB_OFS; + int FLIP_SPRITE; + int FX_ACTIVE; + string FX_OWNER; + string OWNER_YAW; + string RL_OFS; + string SPRITE_NAME; + string START_SCALE; + + BoarLavaCl() + { + SPRITE_NAME = "fire1_fixed2.spr"; + } + + void client_activate() + { + FX_OWNER = param1; + FX_ACTIVE = 1; + string BOAR_SIZE = param2; + if (BOAR_SIZE == 1) + { + FB_OFS = -25; + RL_OFS = 10; + START_SCALE = 0.5; + } + if (BOAR_SIZE == 2) + { + FB_OFS = -35; + RL_OFS = 20; + START_SCALE = 1.0; + } + if (BOAR_SIZE == 3) + { + FB_OFS = -45; + RL_OFS = 30; + START_SCALE = 2.0; + } + LogDebug("boar_lava_cl:client_activate FX_OWNER BOAR_SIZE"); + fx_loop(); + ScheduleDelayedEvent(10.0, "remove_fx"); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "fx_loop"); + OWNER_YAW = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + FLIP_SPRITE = 0; + string SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(RL_OFS, FB_OFS, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_ORG, "setup_hoof_sprite", "update_hoof_sprite"); + string SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string NEG_RL_OFS = /* TODO: $neg */ $neg(RL_OFS); + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(NEG_RL_OFS, FB_OFS, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_ORG, "setup_hoof_sprite", "update_hoof_sprite"); + FLIP_SPRITE = 1; + string SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(RL_OFS, FB_OFS, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_ORG, "setup_hoof_sprite", "update_hoof_sprite"); + string SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string NEG_RL_OFS = /* TODO: $neg */ $neg(RL_OFS); + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(NEG_RL_OFS, FB_OFS, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_ORG, "setup_hoof_sprite", "update_hoof_sprite"); + } + + void remove_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(4.0, "remove_fx2"); + } + + void remove_fx2() + { + RemoveScript(); + } + + void update_hoof_sprite() + { + string CUR_SIZE = "game.tempent.fuser1"; + CUR_SIZE -= 0.01; + if (!(CUR_SIZE > 0)) return; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + + void setup_hoof_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "frames", 23); + string L_YAW = OWNER_YAW; + L_YAW += 90; + if (L_YAW > 359.99) + { + L_YAW -= 359.99; + } + if ((FLIP_SPRITE)) + { + L_YAW += 180; + if (L_YAW > 359.99) + { + L_YAW -= 359.99; + } + } + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, L_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "scale", START_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", START_SCALE); + } + +} + +} diff --git a/scripts/angelscript/monsters/borc.as b/scripts/angelscript/monsters/borc.as new file mode 100644 index 00000000..9330677b --- /dev/null +++ b/scripts/angelscript/monsters/borc.as @@ -0,0 +1,261 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_jumper.as" + +namespace MS +{ + +class Borc : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DASH_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_LOOK; + string ANIM_MIGHTY_BLOW; + string ANIM_NPC_JUMP; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int ATTACK_REACH; + int BJUMPER_CUSTOM_BOOST; + int BJUMPER_FACTOR; + int BJUMPER_NO_FORWARD; + int DID_ALERT; + int DMG_PUNCH_STRONG; + int DMG_PUNCH_WEAK; + float FREQ_MIGHTY_BLOW; + string HALF_HEALTH; + int HUNDERSWAMP_BORC; + int MOVE_RANGE; + float MSC_PUSH_RESIST; + string NEXT_LOOK; + string NEXT_MIGHTY_BLOW; + int NPC_GIVE_EXP; + int NPC_JUMPER; + string QUART_HEALTH; + string SOUND_ALERT; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_MIGHTY1; + string SOUND_MIGHTY2; + string SOUND_NPC_JUMP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_PAIN4; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Borc() + { + ANIM_IDLE = "anim_borsh_idle_norm"; + ANIM_WALK = "anim_borsh_walk"; + ANIM_RUN = "anim_borsh_run"; + ANIM_ATTACK = "anim_borsh_dashattack2"; + ANIM_DEATH = "anim_borsh_death"; + ANIM_LOOK = "anim_borsh_idle_look"; + ANIM_NPC_JUMP = "anim_borsh_jump"; + ANIM_MIGHTY_BLOW = "anim_borsh_dashattack1"; + ANIM_DASH_ATTACK = "anim_borsh_dashattack2"; + NPC_JUMPER = 1; + MSC_PUSH_RESIST = 0.75; + BJUMPER_CUSTOM_BOOST = 1; + BJUMPER_NO_FORWARD = 1; + BJUMPER_FACTOR = 4; + NPC_GIVE_EXP = 1000; + DMG_PUNCH_STRONG = 500; + DMG_PUNCH_WEAK = 200; + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 128; + ATTACK_REACH = 64; + ATTACK_MOVERANGE = 80; + MOVE_RANGE = 80; + FREQ_MIGHTY_BLOW = Random(5.0, 10.0); + SOUND_MIGHTY1 = "monsters/orc/attack1.wav"; + SOUND_MIGHTY2 = "monsters/orc/attack3.wav"; + SOUND_ATTACK = "monsters/orc/attack2.wav"; + SOUND_ALERT = "monsters/orc/battlecry.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "monsters/orc/zo_alert10.wav"; + SOUND_PAIN2 = "voices/orc/hit2.wav"; + SOUND_PAIN3 = "voices/orc/hit3.wav"; + SOUND_PAIN4 = "voices/orc/hit.wav"; + SOUND_DEATH = "voices/orc/die2.wav"; + SOUND_NPC_JUMP = "monsters/orc/attack1.wav"; + } + + void OnSpawn() override + { + SetName("Feral Borsh"); + SetModel("monsters/borsh.mdl"); + SetWidth(64); + SetHeight(64); + SetHealth(4000); + SetRace("orc"); + SetRoam(true); + SetHearingSensitivity(2); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetModelBody(1, RandomInt(0, 1)); + ScheduleDelayedEvent(2.0, "finalize_npc"); + } + + void finalize_npc() + { + string MAX_HP = GetEntityMaxHealth(GetOwner()); + HALF_HEALTH = MAX_HP; + HALF_HEALTH *= 0.5; + QUART_HEALTH = MAX_HP; + HALF_HEALTH *= 0.25; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + string MY_HP = GetEntityHealth(GetOwner()); + if (MY_HP > HALF_HEALTH) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HP <= HALF_HEALTH) + { + if (MY_HP > QUART_HEALTH) + { + } + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN2, SOUND_PAIN1 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN2, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HP <= QUART_HEALTH) + { + // TODO: UNCONVERTED: if ( MY_HP <= QUART_HEALTH ) layrandomsound 0 10 SOUND_STRUCK1 SOUND_STRUCK2 SOUND_STRUCK3 SOUND_STRUCK1 SOUND_PAIN1 SOUND_PAIN2 SOUND_PAIN3 SOUND_PAIN4 + } + } + + void npcatk_lost_sight() + { + LogDebug("npcatk_lost_sight"); + if (!(GetGameTime() > NEXT_LOOK)) return; + NEXT_LOOK = GetGameTime(); + NEXT_LOOK += 15.0; + PlayAnim("once", ANIM_LOOK); + } + + void npc_targetsighted() + { + if ((DID_ALERT)) return; + DID_ALERT = 1; + NEXT_MIGHTY_BLOW = GetGameTime(); + NEXT_MIGHTY_BLOW += FREQ_MIGHTY_BLOW; + } + + void npc_selectattack() + { + if (!(GetGameTime() > NEXT_MIGHTY_BLOW)) return; + NEXT_MIGHTY_BLOW = GetGameTime(); + NEXT_MIGHTY_BLOW += 200; + ANIM_ATTACK = ANIM_MIGHTY_BLOW; + } + + void frame_jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, FWD_NPC_JUMP_STR, NPC_UP_JUMP_STR)); + } + + void frame_jump_land() + { + npcatk_resume_ai(); + } + + void frame_attack_dash2a() + { + // PlayRandomSound from: SOUND_MIGHTY1, SOUND_MIGHTY2 + array sounds = {SOUND_MIGHTY1, SOUND_MIGHTY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_PUNCH_STRONG, 0.8, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:strong_punch"); + } + + void frame_attack_dash2b() + { + // svplaysound: svplaysound 0 10 SOUND_ATTACK + EmitSound(0, 10, SOUND_ATTACK); + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_PUNCH_WEAK, 0.8, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:weak_punch"); + } + + void frame_mighty_blow() + { + // svplaysound: svplaysound 0 10 voices/orc/attack3.wav + EmitSound(0, 10, "voices/orc/attack3.wav"); + NEXT_MIGHTY_BLOW = GetGameTime(); + NEXT_MIGHTY_BLOW += FREQ_MIGHTY_BLOW; + ANIM_ATTACK = ANIM_DASH_ATTACK; + XDoDamage(m_hAttackTarget, ATTACK_REACH, DMG_PUNCH_STRONG, 0.9, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:mighty_blow"); + } + + void strong_punch_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 350, 180)); + if (!(RandomInt(1, 3) == 1)) return; + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + + void weak_punch_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 110, 110)); + } + + void mighty_blow_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 300, 400)); + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget == "unset")) return; + if (!(GetGameTime() > NEXT_LOOK)) return; + NEXT_LOOK = GetGameTime(); + NEXT_LOOK += Random(10.0, 20.0); + LogDebug("npcatk_hunt look"); + PlayAnim("once", ANIM_LOOK); + } + + void frame_run_land() + { + // PlayRandomSound from: "common/bodydrop1.wav", "common/bodydrop2.wav", "common/bodydrop3.wav", "common/bodydrop4.wav" + array sounds = {"common/bodydrop1.wav", "common/bodydrop2.wav", "common/bodydrop3.wav", "common/bodydrop4.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void set_hunderswamp_north_borc() + { + LogDebug("set_hunderswamp_north_borc"); + HUNDERSWAMP_BORC = 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(HUNDERSWAMP_BORC)) return; + if (!(RandomInt(1, 2) == 1)) return; + SpawnNPC("chests/hunderswamp1_borc", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner()), 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/brownbear.as b/scripts/angelscript/monsters/brownbear.as new file mode 100644 index 00000000..2da677c6 --- /dev/null +++ b/scripts/angelscript/monsters/brownbear.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bear_brown.as" + +namespace MS +{ + +class Brownbear : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/brownbearcub.as b/scripts/angelscript/monsters/brownbearcub.as new file mode 100644 index 00000000..7a3c9aa2 --- /dev/null +++ b/scripts/angelscript/monsters/brownbearcub.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bear_cub_brown.as" + +namespace MS +{ + +class Brownbearcub : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/burning_one.as b/scripts/angelscript/monsters/burning_one.as new file mode 100644 index 00000000..8f335299 --- /dev/null +++ b/scripts/angelscript/monsters/burning_one.as @@ -0,0 +1,815 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_lightning_shield.as" + +namespace MS +{ + +class BurningOne : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEPLOY; + string ANIM_DUCK_ATTACK; + string ANIM_DUCK_BEAM; + string ANIM_DUCK_IDLE; + string ANIM_DUCK_MOVE; + string ANIM_DUCK_RPG; + string ANIM_DUCK_SPELL; + string ANIM_DUCK_THROW; + string ANIM_ICE_BREATH; + string ANIM_ICE_SPIRAL; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LIMP_WRIST; + string ANIM_LONG_JUMP; + string ANIM_MIRROR_PREP; + string ANIM_PREP_DEPLOY; + string ANIM_RELEASE_DEPLOY; + string ANIM_RUN; + string ANIM_RUN_SKELE_MODE; + string ANIM_SHOOT; + string ANIM_SKELE_DUCK_SWIPE; + string ANIM_SKELE_SWIPE; + string ANIM_THROW; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_HITRANGE_MELEE; + int ATTACK_MOVERANGE; + int ATTACK_MOVERANGE_LONG; + int ATTACK_MOVERANGE_MELEE; + int ATTACK_RANGE; + int ATTACK_RANGE_MELEE; + string BALL_TYPE; + string CFB_EST_ANG; + string CFB_EST_ORG; + int CFB_FIREBALL_ACTIVE; + string CFB_FIREBALL_IDX; + int CFB_FIRST_TARGET_FOUND; + string CFB_FORCE_END; + string CFB_LIST; + string CFB_NEXT_SCAN; + string CL_PRIMARY_SCRIPT; + string DEF_ANIM_IDLE; + string DEF_ANIM_RUN; + string DEF_ANIM_WALK; + string DID_INTRO; + string DID_SUMMONS; + int DMG_ICE_BALL; + int DMG_PALPATINE; + int DMG_SWIPE; + int DOT_FROST; + int DOT_ICE_BALL; + int DOT_ICE_CAGE; + string DUCK_MODE; + string FREEZE_LIST; + string FREEZE_SCRIPT_IDX; + float FREQ_DODGE; + float FREQ_DUCK_SWITCH; + float FREQ_JUMP; + string HALF_HP; + int ICE_BREATH_ON; + int IS_UNHOLY; + int LHAND_ATCH; + string LSHIELD_CLFX_SCRIPT; + int LSHIELD_RADIUS; + string LSHIELD_TARGET; + int MOUTH_ATCH; + string NEXT_DODGE; + string NEXT_FREEZE; + string NEXT_SPECIAL; + string NEXT_TOUCH_ZAP; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int NPC_NO_ATTACK; + int N_SPECIALS; + int PALPATINE_ON; + string PALPATINE_TARGETS; + float PROJ_HOLD_DURATION; + string REPULSE_LIST; + int RHAND_ATCH; + string SHENDER_MAP; + string SOUND_BREATH; + string SOUND_DEATH; + string SOUND_DODGE; + string SOUND_FREEZE_SLAP; + string SOUND_ICEBALL_RELEASE; + string SOUND_ICE_PREP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SCREAM; + string SOUND_SKELE_LAUGH1; + string SOUND_SKELE_LAUGH2; + string SOUND_SWIPE1; + string SOUND_SWIPE2; + string SOUND_SWIPE3; + string SOUND_SWIPE4; + string SOUND_ZAP_LOOP; + string SOUND_ZAP_START; + int SPECIAL_CYCLE; + string SPECIAL_OVERRIDE; + string SPIN_ANG; + int SPIN_ON; + string SWIPE_ATTACK; + + BurningOne() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_IDLE = "idle"; + ANIM_DEATH = "die_forwards2"; + ANIM_RUN_SKELE_MODE = "run"; + ANIM_JUMP = "jump"; + ANIM_LONG_JUMP = "long_jump"; + ANIM_THROW = "ref_shoot_crowbar"; + ANIM_SHOOT = "ref_shoot_smartgun"; + ANIM_DEPLOY = "ref_shoot_grenade"; + ANIM_SKELE_SWIPE = "ref_shoot_crowbar"; + ANIM_SKELE_DUCK_SWIPE = "crouch_shoot_crowbar"; + ANIM_LIMP_WRIST = "ref_aim_crowbar"; + ANIM_PREP_DEPLOY = "ref_aim_trip"; + ANIM_RELEASE_DEPLOY = "ref_shoot_trip"; + ANIM_MIRROR_PREP = "ref_aim_grenade"; + ANIM_ICE_SPIRAL = "ref_shoot_smartgun"; + ANIM_ICE_BREATH = "float"; + ANIM_DUCK_IDLE = "crouch_idle"; + ANIM_DUCK_MOVE = "crawl"; + ANIM_DUCK_BEAM = "crouch_shoot_smartgun"; + ANIM_DUCK_THROW = "crouch_shoot_grenade"; + ANIM_DUCK_ATTACK = "crouch_shoot_crowbar"; + ANIM_DUCK_RPG = "crouch_shoot_rpg"; + ANIM_DUCK_SPELL = "crouch_shoot_trip"; + IS_UNHOLY = 1; + ATTACK_RANGE = 256; + ATTACK_MOVERANGE = 256; + ATTACK_HITRANGE = 256; + NPC_NO_ATTACK = 1; + NPC_GIVE_EXP = 8000; + LSHIELD_CLFX_SCRIPT = "monsters/burning_one_lshield_cl"; + LSHIELD_RADIUS = 64; + SPECIAL_CYCLE = 0; + N_SPECIALS = 4; + PROJ_HOLD_DURATION = 20.0; + CL_PRIMARY_SCRIPT = "monsters/burning_one_cl"; + ATTACK_RANGE_MELEE = 96; + ATTACK_HITRANGE_MELEE = 160; + ATTACK_MOVERANGE_MELEE = 64; + ATTACK_MOVERANGE_LONG = 256; + LHAND_ATCH = 1; + RHAND_ATCH = 2; + MOUTH_ATCH = 3; + FREQ_DODGE = 4.0; + DOT_ICE_BALL = 200; + DMG_ICE_BALL = 800; + DOT_ICE_CAGE = 200; + DMG_PALPATINE = 75; + DMG_SWIPE = 200; + DOT_FROST = 200; + FREQ_JUMP = Random(5.0, 15.0); + FREQ_DUCK_SWITCH = Random(10.0, 20.0); + SOUND_ICEBALL_RELEASE = "ambience/alienflyby1.wav"; + SOUND_ICE_PREP = "magic/spookie1.wav"; + SOUND_DODGE = "magic/frost_reverse.wav"; + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + SOUND_ZAP_LOOP = "magic/bolt_loop.wav"; + SOUND_ZAP_START = "magic/bolt_end.wav"; + SOUND_SCREAM = "monsters/spooky_scream.wav"; + SOUND_SWIPE1 = "zombie/claw_miss1.wav"; + SOUND_SWIPE2 = "zombie/claw_miss2.wav"; + SOUND_SWIPE3 = "monsters/goblin/c_gargoyle_atk1.wav"; + SOUND_SWIPE4 = "monsters/goblin/c_gargoyle_atk2.wav"; + SOUND_DEATH = "monsters/goblin/c_gargoyle_dead.wav"; + SOUND_PAIN1 = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_PAIN2 = "monsters/goblin/c_gargoyle_hit2.wav"; + SOUND_SKELE_LAUGH1 = "monsters/goblin/c_gargoyle_bat1.wav"; + SOUND_SKELE_LAUGH2 = "monsters/goblin/c_gargoyle_bat2.wav"; + SOUND_FREEZE_SLAP = "monsters/goblin/c_gargoyle_atk3.wav"; + SetCallback("touch", "enable"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(20.0); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 128, 0), 256, 20.0); + } + + void game_precache() + { + Precache("monsters/summon/client_side_fireball"); + Precache("effects/sfx_motionblur_perm"); + Precache("monsters/burning_one_cl"); + } + + void OnSpawn() override + { + SetName("Burning One"); + SetRace("demon"); + SetWidth(32); + SetHeight(80); + SetModel("monsters/hollow_one.mdl"); + SetRoam(false); + SetHealth(9000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + SetProp(GetOwner(), "skin", 0); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetHearingSensitivity(10); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + } + + void cycle_up() + { + if (!(DID_INTRO)) + { + DID_INTRO = 1; + if (StringToLower(GetMapName()) == "shender_east") + { + } + SHENDER_MAP = 1; + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + UseTrigger("spawn_ruins_escort"); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 128, 0), 256, 20.0); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (GetGameTime() > NEXT_SPECIAL) + { + do_special(); + } + if (GetGameTime() > NEXT_DODGE) + { + if (GetEntityRange(m_hAttackTarget) < 96) + { + } + shadow_shift(); + } + } + + void resume_movement() + { + if (!(FLIGHT_MODE)) + { + ANIM_WALK = DEF_ANIM_WALK; + ANIM_RUN = DEF_ANIM_RUN; + ANIM_IDLE = DEF_ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + } + else + { + SetMoveAnim(ANIM_FLOAT); + SetIdleAnim(ANIM_FLOAT); + } + } + + void suspend_movement() + { + if (!(FLIGHT_MODE)) + { + ANIM_WALK = param1; + ANIM_RUN = param1; + ANIM_IDLE = param1; + SetMoveAnim(param1); + SetIdleAnim(param1); + SetRoam(false); + } + } + + void do_special() + { + if (!(IsEntityAlive(GetOwner()))) return; + SPECIAL_CYCLE += 1; + if (SPECIAL_CYCLE > N_SPECIALS) + { + SPECIAL_CYCLE = 1; + } + if ((G_DEVELOPER_MODE)) + { + if (SPECIAL_OVERRIDE > 0) + { + } + SPECIAL_CYCLE = SPECIAL_OVERRIDE; + } + if (SPECIAL_CYCLE == 1) + { + LogDebug("do_special: iceball"); + prep_iceball(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 25.0; + } + if (SPECIAL_CYCLE == 2) + { + do_ice_breath(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + if (SPECIAL_CYCLE == 3) + { + prep_hold_person(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 5.0; + } + if (SPECIAL_CYCLE == 4) + { + if (!(DUCK_MODE)) + { + } + do_palpatine(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + } + + void prep_iceball() + { + ScheduleDelayedEvent(2.0, "prep_iceball2"); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_PREP_DEPLOY); + SetIdleAnim(ANIM_PREP_DEPLOY); + SetMoveAnim(ANIM_PREP_DEPLOY); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), LHAND_ATCH, GetOwner(), RHAND_ATCH, Vector3(255, 128, 0), 200, 200, 2.0); + EmitSound(GetOwner(), 0, SOUND_ICE_PREP, 10); + } + + void prep_iceball2() + { + PlayAnim("critical", ANIM_RELEASE_DEPLOY); + EmitSound(GetOwner(), 0, SOUND_ICEBALL_RELEASE, 10); + npcatk_resume_ai(); + resume_movement(); + BALL_TYPE = "ice"; + start_ball(); + } + + void start_ball() + { + if ((CFB_FIREBALL_ACTIVE)) return; + CFB_FIREBALL_ACTIVE = 1; + CFB_FIRST_TARGET_FOUND = 0; + CFB_EST_ORG = /* TODO: $relpos */ $relpos(0, 32, 0); + string START_ANGS = GetEntityAngles(GetOwner()); + CFB_EST_ANG = START_ANGS; + ClientEvent("new", "all", "monsters/summon/client_side_fireball", CFB_EST_ORG, START_ANGS); + CFB_FIREBALL_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.1, "cfb_fireball_loop"); + CFB_FORCE_END = GetGameTime(); + CFB_FORCE_END += 20.0; + } + + void cfb_fireball_loop() + { + if (!(CFB_FIREBALL_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "cfb_fireball_loop"); + if (GetGameTime() > CFB_NEXT_SCAN) + { + CFB_NEXT_SCAN = GetGameTime(); + CFB_NEXT_SCAN += 2.0; + if (!(IsEntityAlive(CFB_TARGET))) + { + string OWNER_ORG = GetEntityOrigin(GetOwner()); + string TARGET_TOKENS = FindEntitiesInSphere("enemy", 512); + if (TARGET_TOKENS != "none") + { + } + if (GetTokenCount(TARGET_TOKENS, ";") > 1) + { + ScrambleTokens(TARGET_TOKENS, ";"); + } + string TEST_TARG = GetToken(TARGET_TOKENS, 0, ";"); + if ((IsEntityAlive(TEST_TARG))) + { + } + if (!(GetEntityProperty(TEST_TARG, "scriptvar"))) + { + } + CFB_TARGET = TEST_TARG; + if (!(CFB_FIRST_TARGET_FOUND)) + { + } + CFB_FIRST_TARGET_FOUND = 1; + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(CFB_EST_ORG, TARG_ORG); + } + else + { + string SCAN_DOWN = CFB_EST_ORG; + string TARGET_TOKENS = FindEntitiesInSphere("enemy", 96); + if (TARGET_TOKENS != "none") + { + } + cfb_explode("hit_nme"); + } + } + if (!(CFB_FIREBALL_ACTIVE)) return; + if ((IsEntityAlive(CFB_TARGET))) + { + string TARG_ORG = GetEntityOrigin(CFB_TARGET); + if (!(IsValidPlayer(CFB_TARGET))) + { + TARG_ORG += "z"; + } + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(CFB_EST_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + ClientEvent("update", "all", CFB_FIREBALL_IDX, "svr_update_fireball_vec", ANG_TO_TARG, CFB_EST_ORG); + CFB_EST_ANG = ANG_TO_TARG; + CFB_EST_ORG += /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, 60, 0)); + } + else + { + CFB_EST_ORG += /* TODO: $relvel */ $relvel(CFB_EST_ANG, Vector3(0, 60, 0)); + } + string TRACE_DEST = CFB_EST_ORG; + TRACE_DEST += /* TODO: $relvel */ $relvel(CFB_EST_ANG, Vector3(0, 60, 0)); + string TRACE_RESULT = TraceLine(CFB_EST_ORG, TRACE_DEST); + if (TRACE_RESULT != TRACE_DEST) + { + cfb_explode("hitwall"); + } + if (!(CFB_FIREBALL_ACTIVE)) return; + if (!(GetGameTime() > CFB_FORCE_END)) return; + cfb_explode("time_out"); + } + + void cfb_explode() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + CFB_FIREBALL_ACTIVE = 0; + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_explode"); + ScheduleDelayedEvent(0.1, "cfb_fireball_release"); + CFB_LIST = FindEntitiesInSphere("enemy", 128); + if (!(CFB_LIST != "none")) return; + if (!(GetTokenCount(CFB_LIST, ";") > 0)) return; + XDoDamage(CFB_EST_ORG, 128, DMG_ICE_BALL, 0, GetOwner(), GetOwner(), "none", "fire_effect"); + for (int i = 0; i < GetTokenCount(CFB_LIST, ";"); i++) + { + cfb_affect_targets(); + } + } + + void cfb_affect_targets() + { + string CHECK_ENT = GetToken(CFB_LIST, i, ";"); + string TARGET_ORG = GetEntityOrigin(CHECK_ENT); + string TARG_ANG = /* TODO: $angles */ $angles(CFB_EST_ORG, TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CHECK_ENT, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + ApplyEffect(CHECK_ENT, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_ICE_BALL); + } + + void cfb_fireball_end() + { + LogDebug("cfb_fireball_end"); + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_end"); + ScheduleDelayedEvent(0.1, "cfb_fireball_release"); + } + + void cfb_fireball_release() + { + LogDebug("cfb_fireball_release"); + CFB_FIREBALL_ACTIVE = 0; + } + + void prep_hold_person() + { + ScheduleDelayedEvent(2.0, "prep_hold_person2"); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_PREP_DEPLOY); + SetIdleAnim(ANIM_PREP_DEPLOY); + SetMoveAnim(ANIM_PREP_DEPLOY); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "hand_sprites", GetEntityIndex(GetOwner()), 2.0, Vector3(64, 64, 255)); + EmitSound(GetOwner(), 0, SOUND_ICE_PREP, 10); + } + + void prep_hold_person2() + { + PlayAnim("critical", ANIM_RELEASE_DEPLOY); + EmitSound(GetOwner(), 0, SOUND_ICEBALL_RELEASE, 10); + npcatk_resume_ai(); + resume_movement(); + TossProjectile("proj_hold_person", /* TODO: $relpos */ $relpos(0, 0, 24), m_hAttackTarget, 50, 0, 0, "none"); + } + + void shadow_shift() + { + if (!(GetGameTime() > NEXT_DODGE)) return; + NEXT_DODGE = GetGameTime(); + NEXT_DODGE += FREQ_DODGE; + ClientEvent("persist", "all", "effects/sfx_motionblur_temp", GetEntityIndex(GetOwner()), 0, 1, 3.0); + float RND_ANG = Random(0, 359); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(0, 1000, 0))); + EmitSound(GetOwner(), 0, SOUND_DODGE, 10); + ScheduleDelayedEvent(0.25, "stop_shadow_shift"); + } + + void stop_shadow_shift() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 0)); + } + + void OnDamage(int damage) override + { + if ((SHENDER_MAP)) + { + if (GetEntityHealth(GetOwner()) < HALF_HP) + { + } + if (!(DID_SUMMONS)) + { + } + DID_SUMMONS = 1; + UseTrigger("spawn_ruins_summons"); + } + if ((PALPATINE_ON)) + { + if (GetEntityRange(param1) < 256) + { + } + SetMoveDest(param1); + } + if ((PALPATINE_ON)) return; + if (!(GetEntityRange(param1) > 128)) return; + if (!(param2 > 75)) return; + shadow_shift(); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(LSHIELD_PASSIVE_ENABLE)) return; + if (!(GetGameTime() > NEXT_TOUCH_ZAP)) return; + NEXT_TOUCH_ZAP = GetGameTime(); + NEXT_TOUCH_ZAP += 0.1; + if (!(GetRelationship(GetOwner()) == "enemy")) return; + LSHIELD_TARGET = param1; + lshield_passive_zap_target(); + } + + void do_ice_breath() + { + npcatk_suspend_ai(); + suspend_movement(ANIM_ICE_BREATH); + PlayAnim("critical", ANIM_ICE_BREATH); + SPIN_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + SPIN_ON = 1; + SPIN_ANG -= 45; + if (SPIN_ANG < 0) + { + SPIN_ANG += 359; + } + // svplaysound: svplaysound 1 10 SOUND_BREATH + EmitSound(1, 10, SOUND_BREATH); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "ice_breath", GetEntityIndex(GetOwner()), 8.0); + FREEZE_SCRIPT_IDX = "game.script.last_sent_id"; + ice_breath_spin(); + ScheduleDelayedEvent(8.0, "stop_ice_breath_spin"); + ICE_BREATH_ON = 1; + } + + void stop_ice_breath_spin() + { + // svplaysound: svplaysound 1 0 SOUND_BREATH + EmitSound(1, 0, SOUND_BREATH); + ClientEvent("update", "all", FREEZE_SCRIPT_IDX, "ice_breath_off"); + SPIN_ON = 0; + resume_movement(); + npcatk_resume_ai(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + ICE_BREATH_ON = 0; + } + + void ice_breath_spin() + { + if (!(SPIN_ON)) return; + ScheduleDelayedEvent(0.05, "ice_breath_spin"); + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, SPIN_ANG, 0), Vector3(0, 100, 0)); + SetMoveDest(FACE_POS); + if (GetGameTime() > NEXT_FREEZE) + { + NEXT_FREEZE = GetGameTime(); + NEXT_FREEZE += 0.5; + FREEZE_LIST = FindEntitiesInSphere("enemy", 512); + if (FREEZE_LIST != "none") + { + } + for (int i = 0; i < GetTokenCount(FREEZE_LIST, ";"); i++) + { + freeze_targets(); + } + } + SPIN_ANG += 10; + if (SPIN_ANG > 359) + { + SPIN_ANG -= 359; + } + } + + void freeze_targets() + { + string CUR_TARGET = GetToken(FREEZE_LIST, i, ";"); + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 256)) return; + if (!(GetEntityHeight(CUR_TARGET) > 36)) return; + LogDebug("freeze_targets GetEntityName(CUR_TARGET)"); + ApplyEffect(CUR_TARGET, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DOT_ICE_CAGE); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + SetVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(0, 500, 0))); + } + + void do_palpatine() + { + ATTACK_MOVERANGE = ATTACK_MOVERANGE_LONG; + SetMoveDest(m_hAttackTarget); + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(); + suspend_movement(ANIM_PREP_DEPLOY); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "palpatine", GetEntityIndex(GetOwner()), 8.0); + EmitSound(GetOwner(), 0, SOUND_ZAP_START, 10); + // svplaysound: svplaysound 1 10 SOUND_ZAP_LOOP + EmitSound(1, 10, SOUND_ZAP_LOOP); + PALPATINE_ON = 1; + ScheduleDelayedEvent(8.0, "palpatine_end"); + palpatine_loop(); + } + + void palpatine_end() + { + PALPATINE_ON = 0; + npcatk_resume_ai(); + resume_movement(); + // svplaysound: svplaysound 1 0 SOUND_ZAP_LOOP + EmitSound(1, 0, SOUND_ZAP_LOOP); + } + + void palpatine_loop() + { + if (!(PALPATINE_ON)) return; + ScheduleDelayedEvent(0.1, "palpatine_loop"); + PALPATINE_TARGETS = FindEntitiesInSphere("enemy", 256); + if (!(PALPATINE_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(PALPATINE_TARGETS, ";"); i++) + { + palpatine_shock_targs(); + } + } + + void palpatine_shock_targs() + { + string CUR_TARG = GetToken(PALPATINE_TARGETS, i, ";"); + if (!(IsEntityAlive(CUR_TARG))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityHeight(CUR_TARG) > 36)) return; + DoDamage(CUR_TARG, "direct", DMG_PALPATINE, 1.0, GetOwner()); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, 200, 110)); + } + + void game_dynamically_created() + { + if (!(param1 > 0)) return; + SPECIAL_OVERRIDE = param1; + } + + void toggle_duck_mode() + { + if ((DUCK_MODE)) + { + DUCK_MODE = 1; + ANIM_ATTACK = ANIM_SKELE_DUCK_SWIPE; + ANIM_WALK = ANIM_DUCK_MOVE; + ANIM_RUN = ANIM_DUCK_MOVE; + ANIM_IDLE = ANIM_DUCK_IDLE; + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(DUCK_MODE)) + { + DUCK_MODE = 0; + ANIM_ATTACK = ANIM_SKELE_SWIPE; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle"; + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + } + } + + void leap_away() + { + npcatk_suspend_ai(2.0); + ScheduleDelayedEvent(2.0, "force_leap_end"); + suspend_movement(ANIM_LONG_JUMP); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + if (!(IsEntityAlive(param1))) + { + SetMoveDest(m_hAttackTarget); + } + else + { + SetMoveDest(param1); + } + NPC_FORCED_MOVEDEST = 1; + PlayAnim("critical", ANIM_LONG_JUMP); + repulse_area(GetEntityOrigin(GetOwner())); + ScheduleDelayedEvent(0.1, "leap_away_boost"); + } + + void leap_away_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 1000, 800)); + } + + void frame_long_jump_land() + { + npcatk_resume_ai(); + resume_movement(); + } + + void force_leap_end() + { + npcatk_resume_ai(); + resume_movement(); + } + + void repulse_area() + { + EmitSound(GetOwner(), 0, "magic/boom.wav", 10); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "repulse", GetEntityOrigin(GetOwner()), 128); + REPULSE_LIST = FindEntitiesInSphere("any", 128); + if (!(REPULSE_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(REPULSE_LIST, ";"); i++) + { + repulse_targets(); + } + } + + void repulse_targets() + { + string CUR_TARG = GetToken(REPULSE_LIST, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 10))); + } + + void my_target_died() + { + // PlayRandomSound from: SOUND_SKELE_LAUGH1, SOUND_SKELE_LAUGH2 + array sounds = {SOUND_SKELE_LAUGH1, SOUND_SKELE_LAUGH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if ((SWIPE_ATTACK)) + { + if (RandomInt(1, 3) == 1) + { + } + if ((param1)) + { + } + if (GetRelationship(param2) == "enemy") + { + } + // PlayRandomSound from: SOUND_FREEZE_SLAP + array sounds = {SOUND_FREEZE_SLAP}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + SWIPE_ATTACK = 0; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/burning_one_cl.as b/scripts/angelscript/monsters/burning_one_cl.as new file mode 100644 index 00000000..0940dbf7 --- /dev/null +++ b/scripts/angelscript/monsters/burning_one_cl.as @@ -0,0 +1,252 @@ +#pragma context client + +namespace MS +{ + +class BurningOneCl : CGameScript +{ + int CUR_BONE; + float DEATH_FLAME_SCALE; + string FX_DURATION; + string FX_ORIGIN; + string FX_RADIUS; + string FX_TYPE; + string GLOW_SPRITE; + string HAND_SPRITES_ON; + string ICE_BREATH_COLOR; + string ICE_BREATH_ON; + string ICE_BREATH_SPRITE; + string MODEL_IDX; + string PALPATINE_ON; + string REMOVE_DELAY; + string SPR_COLOR; + int TOTAL_OFS; + + BurningOneCl() + { + GLOW_SPRITE = "3dmflaora.spr"; + ICE_BREATH_SPRITE = "explode1.spr"; + ICE_BREATH_COLOR = Vector3(255, 128, 0); + TOTAL_OFS = 10; + } + + void client_activate() + { + FX_TYPE = param1; + LogDebug("*** cold_one_cl: PARAM1 PARAM2 PARAM3 PARAM4"); + if (FX_TYPE == "hand_sprites") + { + MODEL_IDX = param2; + FX_DURATION = param3; + SPR_COLOR = param4; + HAND_SPRITES_ON = 1; + REMOVE_DELAY = 2.1; + FX_DURATION("end_fx"); + hand_sprite_loop(); + } + if (FX_TYPE == "ice_breath") + { + MODEL_IDX = param2; + FX_DURATION = param3; + REMOVE_DELAY = 2.0; + ICE_BREATH_ON = 1; + ice_breath_loop(); + FX_DURATION("end_fx"); + } + if (FX_TYPE == "palpatine") + { + MODEL_IDX = param2; + FX_DURATION = param3; + PALPATINE_ON = 1; + REMOVE_DELAY = 1.0; + palpatine_loop(); + FX_DURATION("end_fx"); + } + if (FX_TYPE == "repulse") + { + FX_ORIGIN = param2; + FX_RADIUS = param3; + REMOVE_DELAY = 2.0; + string POS_GROUND = /* TODO: $get_ground_height */ $get_ground_height(FX_ORIGIN); + FX_ORIGIN = "z"; + for (int i = 0; i < 17; i++) + { + stun_burst_fx(); + } + FX_DURATION("end_fx"); + } + } + + void end_fx() + { + HAND_SPRITES_ON = 0; + ICE_BREATH_ON = 0; + PALPATINE_ON = 0; + REMOVE_DELAY("remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void hand_sprite_loop() + { + if (!(HAND_SPRITES_ON)) return; + ScheduleDelayedEvent(0.1, "hand_sprite_loop"); + string SPAWN_POS = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", 20); + ClientEffect("tempent", "sprite", GLOW_SPRITE, SPAWN_POS, "setup_hand_sprite"); + string SPAWN_POS = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", 16); + ClientEffect("tempent", "sprite", GLOW_SPRITE, SPAWN_POS, "setup_hand_sprite"); + } + + void setup_hand_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(Random(-20, 20), 0, 0))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPR_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void ice_breath_loop() + { + if (!(ICE_BREATH_ON)) return; + ScheduleDelayedEvent(0.01, "ice_breath_loop"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(MODEL_IDX, "attachment2"); + ClientEffect("tempent", "sprite", ICE_BREATH_SPRITE, CLOUD_ORG, "setup_ice_breath_sprite"); + ClientEffect("tempent", "sprite", ICE_BREATH_SPRITE, CLOUD_ORG, "setup_ice_breath_sprite"); + } + + void ice_breath_off() + { + end_fx(); + } + + void setup_ice_breath_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", ICE_BREATH_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string MY_ANG = /* TODO: $getcl */ $getcl(MODEL_IDX, "angles"); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(MY_ANG, Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void palpatine_loop() + { + if (!(PALPATINE_ON)) return; + ScheduleDelayedEvent(0.1, "palpatine_loop"); + string OWNER_YAW = /* TODO: $getcl */ $getcl(MODEL_IDX, "angles.yaw"); + string BEAM_START = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", 20); + string BEAM_END = BEAM_START; + float RND_LR = Random(-128, 128); + float RND_UD = Random(-10, 10); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(RND_LR, 256, RND_UD)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.25, 2.5, 0.5, 255, 50, 30, Vector3(1.5, 0.5, 0)); + string BEAM_START = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", 16); + string BEAM_END = BEAM_START; + float RND_LR = Random(-128, 128); + float RND_UD = Random(-10, 10); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(RND_LR, 256, RND_UD)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.25, 2.5, 0.5, 255, 50, 30, Vector3(1.5, 0.5, 0)); + } + + void stun_burst_fx() + { + string FLAME_POS = FX_ORIGIN; + FLAME_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, 0)); + ClientEffect("tempent", "sprite", "fire1_fixed.spr", FLAME_POS, "stunburst_flame"); + CYCLE_ANGLE += 20; + } + + void stunburst_flame() + { + float FADE_DEL = 1.0; + if (FX_RADIUS > 128) + { + float FADE_DEL = 2.0; + } + int SPRITE_SPEED = 100; + if (FX_RADIUS > 128) + { + int SPRITE_SPEED = 400; + } + ClientEffect("tempent", "set_current_prop", "death_delay", FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void head_flame() + { + DEATH_FLAME_SCALE = 1.0; + string FLAME_POS = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", 29); + CUR_BONE = 29; + ClientEffect("tempent", "sprite", "fire1_fixed.spr", FLAME_POS, "death_flame", "death_flame_update"); + } + + void body_flame() + { + DEATH_FLAME_SCALE = 0.5; + for (int i = 0; i < 28; i++) + { + setup_body_flames(); + } + } + + void setup_body_flames() + { + string FLAME_POS = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", i); + CUR_BONE = i; + ClientEffect("tempent", "sprite", "fire1_fixed.spr", FLAME_POS, "death_flame", "death_flame_update"); + } + + void death_flame() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 64, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", DEATH_FLAME_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "update", 1); + ClientEffect("tempent", "set_current_prop", "fuser2", CUR_BONE); + } + + void death_flame_update() + { + string MY_BONE = "game.tempent.fuser2"; + ClientEffect("tempent", "set_current_prop", "origin", /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", MY_BONE)); + } + +} + +} diff --git a/scripts/angelscript/monsters/burning_one_lshield_cl.as b/scripts/angelscript/monsters/burning_one_lshield_cl.as new file mode 100644 index 00000000..dcd80254 --- /dev/null +++ b/scripts/angelscript/monsters/burning_one_lshield_cl.as @@ -0,0 +1,19 @@ +#pragma context client + +#include "effects/sfx_lightning_shield.as" + +namespace MS +{ + +class BurningOneLshieldCl : CGameScript +{ + string SHIELD_COLOR; + + BurningOneLshieldCl() + { + SHIELD_COLOR = Vector3(2.0, 0.5, 0.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/cadaver.as b/scripts/angelscript/monsters/cadaver.as new file mode 100644 index 00000000..cf43eaaf --- /dev/null +++ b/scripts/angelscript/monsters/cadaver.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Cadaver : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + Cadaver() + { + SKEL_HP = 150; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 14; + ATTACK_DAMAGE_HIGH = 17; + NPC_GIVE_EXP = 48; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 3; + DROP_GOLD_MAX = 11; + SKEL_RESPAWN_CHANCE = 0.75; + SKEL_RESPAWN_LIVES = 3; + } + + void skeleton_spawn() + { + SetName("Ghastly Knight"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/cadaver_once.as b/scripts/angelscript/monsters/cadaver_once.as new file mode 100644 index 00000000..738f690b --- /dev/null +++ b/scripts/angelscript/monsters/cadaver_once.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class CadaverOnce : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + CadaverOnce() + { + SKEL_HP = 150; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 14; + ATTACK_DAMAGE_HIGH = 17; + NPC_GIVE_EXP = 48; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 3; + DROP_GOLD_MAX = 11; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + } + + void skeleton_spawn() + { + SetName("Ghastly Knight"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(0, 5); + SetModelBody(1, 4); + } + +} + +} diff --git a/scripts/angelscript/monsters/chumtoad.as b/scripts/angelscript/monsters/chumtoad.as new file mode 100644 index 00000000..b4ced659 --- /dev/null +++ b/scripts/angelscript/monsters/chumtoad.as @@ -0,0 +1,352 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_monster_explode.as" +#include "monsters/base_damage_stack.as" + +namespace MS +{ + +class Chumtoad : CGameScript +{ + string ANIM_ATTACK; + string ANIM_CHARGE; + string ANIM_IDLE; + int ANIM_IDLE3_CHANCE; + string ANIM_RUN; + string ANIM_SUICIDE; + string ANIM_WALK; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BLINK_CYCLE; + float BLINK_DUR; + int BLINK_FREQ; + int BLINK_MAX; + int BLINK_STEP; + int CANT_FLEE; + int CAN_FLINCH; + int CAN_RETALIATE; + string DEATH_SOUND1; + string DEATH_SOUND2; + string DEATH_SOUND3; + string DEATH_SOUND4; + int DO_IDLE_NOISES; + int EXPLOSION_DAMAGE; + string EXPLOSION_SFX; + string EXPLOSION_SFX_SOUND; + string EXPLOSION_SPRITE; + int FLEE_CHANCE; + int FLEE_HEALTH; + int GIB_BURSTER_FORCE; + string GIB_BURSTER_SCRIPT; + int HACKING_ATK_DIST; + string HIT_SOUNDS; + int IDLE_NOISE_FREQ; + string IDLE_SOUND1; + string IDLE_SOUND2; + string IDLE_SOUND3; + int LONG_ATTACK; + string MONSTER_HEALTH; + int NPC_GIVE_EXP; + int NPC_NO_ATTACK; + string PAIN_SOUND1; + string PAIN_SOUND2; + string PAIN_SOUND3; + int PITCH_MAX; + int PITCH_MIN; + int SHORT_ATTACK; + string SOUND_CHANNEL; + int SUICIDE_CHANCE; + int SUICIDE_DISTANCE; + float SUICIDE_THRESHOLD; + int SUICIDING; + int TRIED_SUICIDE; + + Chumtoad() + { + ANIM_RUN = "hop_1"; + ANIM_WALK = "hop_1"; + ANIM_IDLE = "idle"; + ANIM_ATTACK = "flinch2"; + NPC_NO_ATTACK = 0; + ATTACK_MOVERANGE = 10; + ATTACK_RANGE = 50; + ATTACK_HITRANGE = 70; + ATTACK_HITCHANCE = 80; + FLEE_HEALTH = 0; + FLEE_CHANCE = 0; + CANT_FLEE = 1; + CAN_RETALIATE = 1; + CAN_FLINCH = 0; + EXPLOSION_DAMAGE = 65; + ANIM_CHARGE = "idle2"; + ANIM_SUICIDE = "flinch1"; + ANIM_IDLE3_CHANCE = 5; + LONG_ATTACK = 35; + SHORT_ATTACK = 15; + MONSTER_HEALTH = GetEntityMaxHealth(GetOwner()); + GIB_BURSTER_SCRIPT = "effects/sfx_gib_burst"; + GIB_BURSTER_FORCE = 200; + EXPLOSION_SFX = "effects/sfx_sprite"; + EXPLOSION_SPRITE = "oculus/exp_green.spr"; + EXPLOSION_SFX_SOUND = "monsters/tube/Tube_ExplodingDeath.wav"; + IDLE_SOUND1 = "monsters/ogre_welp/bc_idle2.wav"; + IDLE_SOUND2 = "monsters/ogre_welp/bc_idle3.wav"; + IDLE_SOUND3 = "monsters/ogre_welp/bc_idle4.wav"; + DEATH_SOUND1 = "monsters/bat/pain1.wav"; + DEATH_SOUND2 = "monsters/bat/pain2.wav"; + DEATH_SOUND3 = "monsters/beetle/idle.wav2"; + DEATH_SOUND4 = "monsters/beetle/idle3.wav"; + PAIN_SOUND1 = "monsters/ogre_welp/bc_pain1.wav"; + PAIN_SOUND2 = "monsters/ogre_welp/bc_pain2.wav"; + PAIN_SOUND3 = "monsters/ogre_welp/bc_pain3.wav"; + HIT_SOUNDS = "monsters/tube/TubeCritter_Hit1.wav;monsters/tube/TuberCritter_Hit2.wav;monsters/tube/TubeCritter_Hit3.wav"; + PITCH_MIN = 30; + PITCH_MAX = 200; + SUICIDE_CHANCE = 5; + SUICIDE_THRESHOLD = 0.7; + SUICIDE_DISTANCE = 100; + SUICIDING = 0; + TRIED_SUICIDE = 0; + BLINK_FREQ = 5; + BLINK_DUR = 0.2; + BLINK_STEP = 0; + BLINK_MAX = 2; + BLINK_CYCLE = 1; + HACKING_ATK_DIST = 0; + DO_IDLE_NOISES = 1; + IDLE_NOISE_FREQ = 5; + NPC_GIVE_EXP = 200; + } + + void game_precache() + { + Precache("monsters/chumtoad.mdl"); + Precache(EXPLOSION_SPRITE); + Precache("agibs.mdl"); + } + + void OnSpawn() override + { + SetName("Chumtoad"); + SetRace("vermin"); + SetHealth(300); + SetModel("monsters/chumtoad.mdl"); + SetWidth(20); + SetHeight(8); + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + SetBloodType("green"); + SetRoam(false); + PlayAnim("once", ANIM_IDLE); + SOUND_CHANNEL = CHAN_VOICE; + BLINK_FREQ("do_blinking"); + IDLE_NOISE_FREQ("play_idle"); + } + + void play_idle() + { + if ((DO_IDLE_NOISES)) + { + // PlayRandomSound from: IDLE_SOUND1, IDLE_SOUND2, IDLE_SOUND3 + array sounds = {IDLE_SOUND1, IDLE_SOUND2, IDLE_SOUND3}; + EmitSound(GetOwner(), SOUND_CHANNEL, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + IDLE_NOISE_FREQ("play_idle"); + } + + void do_blinking() + { + string L_PROPS = GetEntityProperty(GetOwner(), "renderprops"); + string L_SKIN = GetToken(L_PROPS, 4, ";"); + BLINK_STEP = (BLINK_STEP + BLINK_CYCLE); + if (BLINK_STEP >= BLINK_MAX) + { + BLINK_CYCLE = -1; + } + else + { + if (BLINK_STEP <= 0) + { + BLINK_CYCLE = 1; + } + } + if (L_SKIN < 3) + { + SetProp(GetOwner(), "skin", BLINK_STEP); + } + if (BLINK_STEP == 0) + { + BLINK_FREQ("do_blinking"); + } + else + { + BLINK_DUR("do_blinking"); + } + } + + void OnDamage(int damage) override + { + string L_HP = GetEntityHealth(GetOwner()); + if (L_HP <= (MONSTER_HEALTH * SUICIDE_THRESHOLD)) + { + if (!(TRIED_SUICIDE)) + { + TRIED_SUICIDE = 1; + if (RandomInt(1, 100) <= SUICIDE_CHANCE) + { + do_suicide_charge(); + } + } + } + // PlayRandomSound from: PAIN_SOUND1, PAIN_SOUND2, PAIN_SOUND3 + array sounds = {PAIN_SOUND1, PAIN_SOUND2, PAIN_SOUND3}; + EmitSound(GetOwner(), SOUND_CHANNEL, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void dmgstk_dodamage() + { + if ((param1)) + { + string L_TARGET = param2; + HACKING_ATK_DIST = 1; + string L_MULT = /* TODO: $get_scriptflag */ $get_scriptflag(L_TARGET, STACK_FLAG_NAME, "name_value"); + L_MULT -= 0.1; + string L_PITCH = /* TODO: $ratio */ $ratio((L_MULT / STACK_MULT_MAX), PITCH_MIN, PITCH_MAX); + EmitSound(GetOwner(), SOUND_CHANNEL, GetRandomToken(HIT_SOUNDS, ";"), 10); + } + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + LogDebug("chumtoad-game_damaged_other PARAM4"); + if ((HACKING_ATK_DIST)) + { + string L_HACK_START = GetEntityOrigin(GetOwner()); + string L_HACK_END = GetEntityOrigin(param1); + string L_HACK_HITRANGE = ATTACK_HITRANGE; + L_HACK_HITRANGE += (GetEntityWidth(param1) / 2); + if ((IsValidPlayer(param1))) + { + L_HACK_HITRANGE += (GetEntityHeight(param1) / 2); + } + if (Distance(L_HACK_START, L_HACK_END) >= L_HACK_HITRANGE) + { + return; + } + else + { + if ((TraceLine(L_HACK_START, L_HACK_END))) + { + return; + } + } + HACKING_ATK_DIST = 0; + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + // PlayRandomSound from: DEATH_SOUND1, DEATH_SOUND2, DEATH_SOUND3, DEATH_SOUND4 + array sounds = {DEATH_SOUND1, DEATH_SOUND2, DEATH_SOUND3, DEATH_SOUND4}; + EmitSound(GetOwner(), SOUND_CHANNEL, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void do_suicide_charge() + { + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_CHARGE); + SUICIDING = 1; + } + + void finish_charge() + { + PlayAnim("critical", ANIM_SUICIDE); + } + + void finish_suicide() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + do_explode(); + npc_suicide(); + } + + void do_explode() + { + string L_VEC = GetEntityOrigin(GetOwner()); + L_VEC += Vector3(0, 0, 30); + string L_COL = /* TODO: $clcol */ $clcol(0, 0, 0); + string L_STR = "0;3;255;add;"; + L_STR += L_COL; + L_STR += ";20;10"; + ClientEvent("new", "all", EXPLOSION_SFX, L_VEC, EXPLOSION_SPRITE, L_STR, 0.5); + ClientEvent("new", "all", GIB_BURSTER_SCRIPT, L_VEC, "agibs.mdl", "0;1;2;3", "1;0.5;255;normal", 4, GIB_BURSTER_FORCE, 5); + EmitSound(GetOwner(), 0, EXPLOSION_SFX_SOUND, 10); + } + + void beam_dodamage() + { + if ((param1)) + { + string L_TARGET = param2; + if (GetRelationship(L_TARGET) == "enemy") + { + string L_PASS_PARAM = param6; + do_stack(L_TARGET, L_PASS_PARAM); + } + } + } + + void npc_selectattack() + { + if (RandomInt(0, 100) <= ANIM_IDLE3_CHANCE) + { + ANIM_ATTACK = "idle3"; + } + else + { + ANIM_ATTACK = "flinch2"; + } + } + + void attack_1() + { + do_attack(LONG_ATTACK); + } + + void attack_2() + { + do_attack(SHORT_ATTACK); + } + + void do_attack() + { + XDoDamage(m_hAttackTarget, "direct", param1, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:dmgstk"); + } + + void dmgstk_damaged_other() + { + LogDebug("dmgstk_damaged_other PARAM1 PARAM2 PARAM3"); + } + + void cycle_up() + { + DO_IDLE_NOISES = 0; + } + + void cycle_down() + { + DO_IDLE_NOISES = 1; + } + + void ext_suicide_chance() + { + SUICIDE_CHANCE = param1; + } + +} + +} diff --git a/scripts/angelscript/monsters/cl_corpse.as b/scripts/angelscript/monsters/cl_corpse.as new file mode 100644 index 00000000..d7f583fb --- /dev/null +++ b/scripts/angelscript/monsters/cl_corpse.as @@ -0,0 +1,58 @@ +#pragma context server + +namespace MS +{ + +class ClCorpse : CGameScript +{ + string FX_ANGLES; + string FX_BODY; + string FX_FADE_START; + string FX_NOBOUNCE; + string FX_OWNER; + string FX_SEQ; + string FX_SKIN; + + void client_activate() + { + FX_OWNER = param1; + string FX_MODEL = /* TODO: $getcl */ $getcl(FX_OWNER, "model"); + FX_SEQ = param2; + FX_SKIN = param3; + FX_BODY = param4; + FX_NOBOUNCE = param5; + FX_FADE_START = GetGameTime(); + FX_FADE_START += 10.0; + FX_ANGLES = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + ClientEffect("tempent", "model", FX_MODEL, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_corpse"); + ScheduleDelayedEvent(18.0, "remove_script"); + } + + void remove_script() + { + RemoveScript(); + } + + void setup_corpse() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 15.0); + ClientEffect("tempent", "set_current_prop", "body", FX_BODY); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", FX_SEQ); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "skin", FX_SKIN); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "frames", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "angles", FX_ANGLES); + if (FX_NOBOUNCE == 1) + { + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/cobra.as b/scripts/angelscript/monsters/cobra.as new file mode 100644 index 00000000..6ae4580b --- /dev/null +++ b/scripts/angelscript/monsters/cobra.as @@ -0,0 +1,110 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Cobra : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK1_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float DMG_POISON; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_PAIN; + string SOUND_WALK; + + Cobra() + { + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_ATTACK1 = "monsters/spider/spiderhiss.wav"; + SOUND_ATTACK2 = "monsters/spider/spiderhiss.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK = "monsters/troll/trollidle.wav"; + ATTACK_HITCHANCE = 0.95; + ANIM_RUN = "walk"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_DEATH = "diesimple"; + ANIM_ATTACK = "attack1"; + ATTACK1_DAMAGE = 45; + ATTACK_RANGE = 230; + ATTACK_HITRANGE = 230; + MOVE_RANGE = 64; + DMG_POISON = Random(10, 15); + } + + void OnSpawn() override + { + SetHealth(200); + SetMaxHealth(200); + SetWidth(64); + SetHeight(64); + SetRace("demon"); + SetName("Cobra"); + SetRoam(false); + NPC_GIVE_EXP = 100; + SetModel("monsters/kcobra.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + PlayAnim("once", "idle1"); + SetHearingSensitivity(5); + npcatk_suspend_ai(); + } + + void attack1() + { + DoDamage(ENTITY_ENEMY, ATTACK_RANGE, ATTACK1_DAMAGE, 0.75, "slash"); + if (RandomInt(1, 3) == 1) + { + ApplyEffect(m_hLastSeen, "effects/dot_poison", 15, GetEntityIndex(GetOwner()), DMG_POISON); + } + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(SUSPEND_AI)) return; + if (!(IsValidPlayer("ent_lastheard"))) return; + SetMoveDest(GetEntityIndex("ent_lastheard")); + if (RandomInt(1, 10) == 1) + { + PlayAnim("once", "idle3"); + } + else + { + PlayAnim("once", "idle1"); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((SUSPEND_AI)) + { + npcatk_resume_ai(); + SetMoveAnim(ANIM_RUN); + SetRoam(true); + } + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/cold_lady.as b/scripts/angelscript/monsters/cold_lady.as new file mode 100644 index 00000000..497a2ece --- /dev/null +++ b/scripts/angelscript/monsters/cold_lady.as @@ -0,0 +1,360 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_noclip.as" + +namespace MS +{ + +class ColdLady : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BEAM_ATTACK; + int DEST_ROT; + string DID_INTRO; + int DMG_ICE; + int DOT_FREEZE; + float FREQ_PICK; + int FWD_SPEED; + int FWD_SPEED_FAST; + int FWD_SPEED_NORM; + int IS_UNHOLY; + int MAX_ROAM_RANGE; + int MOVE_STEP; + string MOVE_TARGET; + int MOVING_IN; + int NPC_GIVE_EXP; + string NPC_NOCLIP_DEST; + int N_VALID; + string PICK_PLAYER_DELAY; + int ROAM_RANGE; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_FREEZE; + string SOUND_INTRO1; + string SOUND_INTRO2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string VALID_PLAYERS; + float VERT_WOBBLE_ACTIVE; + int VERT_WOBBLE_IDLE; + + ColdLady() + { + IS_UNHOLY = 1; + FREQ_PICK = 5.0; + DMG_ICE = RandomInt(100, 200); + DOT_FREEZE = RandomInt(40, 80); + ANIM_WALK = "treadwater"; + ANIM_RUN = "swim"; + ANIM_IDLE = "treadwater"; + ANIM_ATTACK = "crouch_shoot_onehanded"; + ATTACK_RANGE = 128; + ATTACK_MOVERANGE = 100; + ATTACK_HITRANGE = 200; + NPC_GIVE_EXP = 400; + FWD_SPEED_NORM = 10; + FWD_SPEED_FAST = 30; + VERT_WOBBLE_ACTIVE = Random(-128, 128); + VERT_WOBBLE_IDLE = 0; + FWD_SPEED = 10; + ROAM_RANGE = 512; + MAX_ROAM_RANGE = 4096; + SOUND_FREEZE = "debris/beamstart14.wav"; + SOUND_ATTACK1 = "voices/icelady_giggle1.wav"; + SOUND_ATTACK2 = "voices/icelady_giggle2.wav"; + SOUND_ATTACK3 = "voices/icelady_giggle3.wav"; + SOUND_ALERT = "voices/icelady_taunt1.wav"; + SOUND_INTRO1 = "voices/icelady_taunt2.wav"; + SOUND_INTRO2 = "voices/icelady_taunt2b.wav"; + SOUND_PAIN1 = "voices/icelady_pain1.wav"; + SOUND_PAIN2 = "voices/icelady_pain2.wav"; + SOUND_STRUCK1 = "debris/glass1.wav"; + SOUND_STRUCK2 = "debris/glass2.wav"; + SOUND_DEATH = "voices/icelady_pain2.wav"; + ANIM_DEATH = "die_simple"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(3.0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void OnSpawn() override + { + SetName("Cold Lady"); + SetBloodType("none"); + SetRace("demon"); + SetHealth(900); + SetModel("monsters/icelady.mdl"); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 1.5); + SetDamageResistance("holy", 1.5); + SetFly(true); + SetWidth(32); + SetHeight(96); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_RUN); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + DEST_ROT = 0; + MOVE_STEP = 0; + MOVE_TARGET = "unset"; + npcatk_suspend_ai(); + } + + void OnHuntTarget(CBaseEntity@ target) + { + } + + void OnPostSpawn() override + { + NPC_NOCLIP_DEST = GetMonsterProperty("origin"); + npcatk_suspend_ai(); + } + + void clear_target() + { + LogDebug("targ_reset_cuz PARAM1"); + MOVE_TARGET = "unset"; + MOVE_STEP = 0; + move_away("clear_targets"); + } + + void basenoclip_flight() + { + if (!(IsEntityAlive(MOVE_TARGET))) + { + if (MOVE_TARGET != "unset") + { + } + clear_target("dead"); + } + if (MOVE_TARGET == "unset") + { + if (Distance(GetMonsterProperty("origin"), NPC_NOCLIP_DEST) < ATTACK_MOVERANGE) + { + MOVE_STEP = 128; + VERT_WOBBLE = VERT_WOBBLE_IDLE; + NPC_NOCLIP_DEST = NPC_HOME_LOC; + do_move_step(); + } + if (!(PICK_PLAYER_DELAY)) + { + } + PICK_PLAYER_DELAY = 1; + FREQ_PICK("reset_pplayer"); + pick_a_player(); + } + if (!(DID_INTRO)) + { + if ((false)) + { + } + DID_INTRO = 1; + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + ScheduleDelayedEvent(4.0, "do_intro"); + } + if (MOVE_TARGET != "unset") + { + if ((MOVING_IN)) + { + if (GetEntityRange(MOVE_TARGET) < ATTACK_RANGE) + { + do_attack(MOVE_TARGET); + } + if (Distance(GetMonsterProperty("origin"), NPC_HOME_LOC) > MAX_ROAM_RANGE) + { + clear_targets("too_far_from_home"); + } + if ((MOVING_IN)) + { + } + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_WALK); + PlayAnim("once", ANIM_WALK); + if (Distance(GetMonsterProperty("origin"), NPC_NOCLIP_DEST) < ATTACK_MOVERANGE) + { + } + FWD_SPEED = FWD_SPEED_NORM; + VERT_WOBBLE = VERT_WOBBLE_ACTIVE; + if (GetEntityRange(MOVE_TARGET) < ATTACK_MOVERANGE) + { + move_away("in_range"); + } + MOVE_STEP -= 100; + if (MOVE_STEP < 0) + { + MOVE_STEP = 0; + } + NPC_NOCLIP_DEST = GetEntityOrigin(MOVE_TARGET); + do_move_step(); + } + if (!(MOVING_IN)) + { + if (Distance(GetMonsterProperty("origin"), NPC_NOCLIP_DEST) < ATTACK_MOVERANGE) + { + } + FWD_SPEED = FWD_SPEED_FAST; + NPC_NOCLIP_DEST = GetEntityOrigin(MOVE_TARGET); + VERT_WOBBLE = VERT_WOBBLE_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_RUN); + PlayAnim("once", ANIM_RUN); + MOVE_STEP += 100; + if (GetEntityRange(MOVE_TARGET) > ROAM_RANGE) + { + move_in("too_far"); + } + NPC_NOCLIP_DEST = GetEntityOrigin(MOVE_TARGET); + do_move_step(); + } + } + } + + void do_move_step() + { + DEST_ROT += 45; + if (DEST_ROT > 359) + { + DEST_ROT -= 359; + } + NPC_NOCLIP_DEST += /* TODO: $relpos */ $relpos(Vector3(0, DEST_ROT, 0), Vector3(0, MOVE_STEP, VERT_WOBBLE)); + } + + void do_intro() + { + float INTRO_DIFF = GetGameTime(); + INTRO_DIFF -= G_ICELADY_INTRO; + if (!(INTRO_DIFF > 10)) return; + SetGlobalVar("G_ICELADY_INTRO", GetGameTime()); + // PlayRandomSound from: SOUND_INTRO1, SOUND_INTRO2 + array sounds = {SOUND_INTRO1, SOUND_INTRO2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void reset_pplayer() + { + PICK_PLAYER_DELAY = 0; + } + + void pick_a_player() + { + GetAllPlayers(PLAYER_LIST); + VALID_PLAYERS = ""; + N_VALID = 0; + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + pick_player_loop(); + } + if (N_VALID == 1) + { + move_in("new_target"); + MOVE_TARGET = GetToken(PLAYER_LIST, 0, ";"); + } + if (N_VALID == 0) + { + MOVE_TARGET = "unset"; + } + if (!(N_VALID > 1)) return; + N_VALID -= 1; + int RND_VALID = RandomInt(0, N_VALID); + move_in("new_target_multi"); + MOVE_TARGET = GetToken(PLAYER_LIST, RND_VALID, ";"); + } + + void pick_player_loop() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + if (!(GetEntityRange(CUR_PLAYER) < ROAM_RANGE)) return; + if (VALID_PLAYERS.length() > 0) VALID_PLAYERS += ";"; + VALID_PLAYERS += i; + N_VALID += 1; + } + + void do_attack() + { + BEAM_ATTACK = 1; + PlayAnim("once", ANIM_ATTACK); + DoDamage(MOVE_TARGET, ATTACK_HITRANGE, DMG_ICE, 1.0, "cold"); + move_away("did_attack"); + ScheduleDelayedEvent(10.0, "check_froze"); + } + + void check_froze() + { + if ((GetEntityProperty(MOVE_TARGET, "scriptvar"))) + { + pick_a_player(); + } + } + + void game_dodamage() + { + if (!(BEAM_ATTACK)) return; + BEAM_ATTACK = 0; + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = GetEntityOrigin(MOVE_TARGET); + string TRACE_IT = TraceLine(TRACE_START, TRACE_END); + Effect("beam", "point", "lgtning.spr", 60, TRACE_START, TRACE_IT, Vector3(128, 128, 255), 200, 60, 1.0); + if (!(param1)) return; + if (!(GetEntityRange(param2) <= ATTACK_HITRANGE)) return; + ApplyEffect(param2, "effects/dot_cold_freeze", 4.0, GetEntityIndex(GetOwner()), DOT_FREEZE); + EmitSound(GetOwner(), 0, SOUND_FREEZE, 10); + ScheduleDelayedEvent(0.5, "do_giggle"); + } + + void do_giggle() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(MOVE_TARGET == "unset")) return; + if (!(GetRelationship(m_hLastStruck) == "enemy")) return; + MOVE_TARGET = GetEntityIndex(m_hLastStruck); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetFly(false); + SetGravity(1.0); + SetVelocity(GetOwner(), Vector3(0, 0, -200)); + SetProp(GetOwner(), "movetype", "const.movetype.noclip"); + } + + void move_away() + { + LogDebug("moving_away PARAM1"); + MOVING_IN = 0; + } + + void move_in() + { + LogDebug("moving_in PARAM1"); + MOVING_IN = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/cold_one.as b/scripts/angelscript/monsters/cold_one.as new file mode 100644 index 00000000..e3e00cdc --- /dev/null +++ b/scripts/angelscript/monsters/cold_one.as @@ -0,0 +1,926 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_lightning_shield.as" + +namespace MS +{ + +class ColdOne : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEPLOY; + string ANIM_DUCK_ATTACK; + string ANIM_DUCK_BEAM; + string ANIM_DUCK_IDLE; + string ANIM_DUCK_MOVE; + string ANIM_DUCK_RPG; + string ANIM_DUCK_SPELL; + string ANIM_DUCK_THROW; + string ANIM_ICE_BREATH; + string ANIM_ICE_SPIRAL; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LIMP_WRIST; + string ANIM_LONG_JUMP; + string ANIM_MIRROR_PREP; + string ANIM_PREP_DEPLOY; + string ANIM_RELEASE_DEPLOY; + string ANIM_RUN; + string ANIM_RUN_SKELE_MODE; + string ANIM_SHOOT; + string ANIM_SKELE_DUCK_SWIPE; + string ANIM_SKELE_SWIPE; + string ANIM_THROW; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_HITRANGE_MELEE; + int ATTACK_MOVERANGE; + int ATTACK_MOVERANGE_LONG; + int ATTACK_MOVERANGE_MELEE; + int ATTACK_RANGE; + int ATTACK_RANGE_MELEE; + string BALL_TYPE; + string CFB_EST_ANG; + string CFB_EST_ORG; + int CFB_FIREBALL_ACTIVE; + string CFB_FIREBALL_IDX; + int CFB_FIRST_TARGET_FOUND; + string CFB_FORCE_END; + string CFB_LIST; + string CFB_NEXT_SCAN; + string CL_PRIMARY_SCRIPT; + string DEF_ANIM_IDLE; + string DEF_ANIM_RUN; + string DEF_ANIM_WALK; + int DMG_ICE_BALL; + int DMG_PALPATINE; + int DMG_SWIPE; + int DOT_FROST; + int DOT_ICE_BALL; + int DOT_ICE_CAGE; + string DUCK_MODE; + string FREEZE_LIST; + string FREEZE_SCRIPT_IDX; + float FREQ_DODGE; + float FREQ_DUCK_SWITCH; + float FREQ_JUMP; + int ICE_BREATH_ON; + int IS_UNHOLY; + int LHAND_ATCH; + string LSHIELD_CLFX_SCRIPT; + int LSHIELD_RADIUS; + string LSHIELD_TARGET; + int MOUTH_ATCH; + string NEXT_DODGE; + string NEXT_FREEZE; + string NEXT_SPECIAL; + string NEXT_TOUCH_ZAP; + int NO_HEAD; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int NPC_NO_ATTACK; + int N_SPECIALS; + int PALPATINE_ON; + string PALPATINE_TARGETS; + float PROJ_HOLD_DURATION; + string REPULSE_LIST; + int RHAND_ATCH; + int SKELE_MODE; + string SOUND_BREATH; + string SOUND_DEATH; + string SOUND_DODGE; + string SOUND_FREEZE_SLAP; + string SOUND_ICEBALL_RELEASE; + string SOUND_ICE_PREP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SCREAM; + string SOUND_SKELE_LAUGH1; + string SOUND_SKELE_LAUGH2; + string SOUND_SWIPE1; + string SOUND_SWIPE2; + string SOUND_SWIPE3; + string SOUND_SWIPE4; + string SOUND_ZAP_LOOP; + string SOUND_ZAP_START; + int SPECIAL_CYCLE; + string SPECIAL_OVERRIDE; + string SPIN_ANG; + int SPIN_ON; + int STAGE_ONE_DONE; + string STAGE_ONE_THRESH; + int STAGE_TWO_DONE; + string STAGE_TWO_THRESH; + int SWIPE_ATTACK; + + ColdOne() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_IDLE = "idle"; + ANIM_DEATH = "die_forwards2"; + ANIM_RUN_SKELE_MODE = "run"; + ANIM_JUMP = "jump"; + ANIM_LONG_JUMP = "long_jump"; + ANIM_THROW = "ref_shoot_crowbar"; + ANIM_SHOOT = "ref_shoot_smartgun"; + ANIM_DEPLOY = "ref_shoot_grenade"; + ANIM_SKELE_SWIPE = "ref_shoot_crowbar"; + ANIM_SKELE_DUCK_SWIPE = "crouch_shoot_crowbar"; + ANIM_LIMP_WRIST = "ref_aim_crowbar"; + ANIM_PREP_DEPLOY = "ref_aim_trip"; + ANIM_RELEASE_DEPLOY = "ref_shoot_trip"; + ANIM_MIRROR_PREP = "ref_aim_grenade"; + ANIM_ICE_SPIRAL = "ref_shoot_smartgun"; + ANIM_ICE_BREATH = "float"; + ANIM_DUCK_IDLE = "crouch_idle"; + ANIM_DUCK_MOVE = "crawl"; + ANIM_DUCK_BEAM = "crouch_shoot_smartgun"; + ANIM_DUCK_THROW = "crouch_shoot_grenade"; + ANIM_DUCK_ATTACK = "crouch_shoot_crowbar"; + ANIM_DUCK_RPG = "crouch_shoot_rpg"; + ANIM_DUCK_SPELL = "crouch_shoot_trip"; + IS_UNHOLY = 1; + ATTACK_RANGE = 768; + ATTACK_MOVERANGE = 768; + ATTACK_HITRANGE = 768; + NPC_NO_ATTACK = 1; + NPC_GIVE_EXP = 9000; + LSHIELD_CLFX_SCRIPT = "monsters/cold_one_lshield_cl"; + LSHIELD_RADIUS = 64; + SPECIAL_CYCLE = 0; + N_SPECIALS = 4; + PROJ_HOLD_DURATION = 20.0; + CL_PRIMARY_SCRIPT = "monsters/cold_one_cl"; + ATTACK_RANGE_MELEE = 96; + ATTACK_HITRANGE_MELEE = 160; + ATTACK_MOVERANGE_MELEE = 64; + ATTACK_MOVERANGE_LONG = 768; + LHAND_ATCH = 1; + RHAND_ATCH = 2; + MOUTH_ATCH = 3; + FREQ_DODGE = 4.0; + DOT_ICE_BALL = 50; + DMG_ICE_BALL = 400; + DOT_ICE_CAGE = 50; + DMG_PALPATINE = 75; + DMG_SWIPE = 200; + DOT_FROST = 75; + FREQ_JUMP = Random(5.0, 15.0); + FREQ_DUCK_SWITCH = Random(10.0, 20.0); + SOUND_ICEBALL_RELEASE = "ambience/alienflyby1.wav"; + SOUND_ICE_PREP = "magic/spookie1.wav"; + SOUND_DODGE = "magic/frost_reverse.wav"; + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + SOUND_ZAP_LOOP = "magic/bolt_loop.wav"; + SOUND_ZAP_START = "magic/bolt_end.wav"; + SOUND_SCREAM = "monsters/spooky_scream.wav"; + SOUND_SWIPE1 = "zombie/claw_miss1.wav"; + SOUND_SWIPE2 = "zombie/claw_miss2.wav"; + SOUND_SWIPE3 = "monsters/goblin/c_gargoyle_atk1.wav"; + SOUND_SWIPE4 = "monsters/goblin/c_gargoyle_atk2.wav"; + SOUND_DEATH = "monsters/goblin/c_gargoyle_dead.wav"; + SOUND_PAIN1 = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_PAIN2 = "monsters/goblin/c_gargoyle_hit2.wav"; + SOUND_SKELE_LAUGH1 = "monsters/goblin/c_gargoyle_bat1.wav"; + SOUND_SKELE_LAUGH2 = "monsters/goblin/c_gargoyle_bat2.wav"; + SOUND_FREEZE_SLAP = "monsters/goblin/c_gargoyle_atk3.wav"; + SetCallback("touch", "enable"); + } + + void game_precache() + { + Precache("monsters/summon/client_side_iceball"); + Precache("effects/sfx_motionblur_perm"); + Precache("monsters/cold_one_cl"); + } + + void OnSpawn() override + { + SetName("Cold One"); + SetRace("demon"); + SetWidth(32); + SetHeight(80); + SetModel("monsters/hollow_one.mdl"); + SetRoam(false); + SetHealth(9000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 1.25); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + SetProp(GetOwner(), "skin", 1); + SetHearingSensitivity(10); + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + STAGE_ONE_DONE = 0; + STAGE_TWO_DONE = 0; + } + + void OnPostSpawn() override + { + STAGE_ONE_THRESH = GetEntityMaxHealth(GetOwner()); + STAGE_ONE_THRESH *= 0.5; + STAGE_TWO_THRESH = GetEntityMaxHealth(GetOwner()); + STAGE_TWO_THRESH *= 0.25; + } + + void cycle_up() + { + SetRoam(true); + if (!(SKELE_MODE)) return; + // PlayRandomSound from: SOUND_SKELE_LAUGH1, SOUND_SKELE_LAUGH2 + array sounds = {SOUND_SKELE_LAUGH1, SOUND_SKELE_LAUGH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (GetGameTime() > NEXT_SPECIAL) + { + do_special(); + } + if ((SKELE_MODE)) + { + if (GetGameTime() > NEXT_JUMP) + { + if (!(PALPATINE_ON)) + { + } + NEXT_JUMP = GetGameTime(); + NEXT_JUMP += FREQ_JUMP; + leap_away(); + } + if (GetGameTime() > NEXT_DUCK_SWITCH) + { + NEXT_DUCK_SWITCH = GetGameTime(); + NEXT_DUCK_SWITCH += FREQ_DUCK_SWITCH; + toggle_duck_mode(); + } + } + if ((SKELE_MODE)) return; + if (GetGameTime() > NEXT_DODGE) + { + if (GetEntityRange(m_hAttackTarget) < 96) + { + } + shadow_shift(); + } + } + + void resume_movement() + { + if (!(FLIGHT_MODE)) + { + ANIM_WALK = DEF_ANIM_WALK; + ANIM_RUN = DEF_ANIM_RUN; + ANIM_IDLE = DEF_ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + } + else + { + SetMoveAnim(ANIM_FLOAT); + SetIdleAnim(ANIM_FLOAT); + } + } + + void suspend_movement() + { + if (!(FLIGHT_MODE)) + { + ANIM_WALK = param1; + ANIM_RUN = param1; + ANIM_IDLE = param1; + SetMoveAnim(param1); + SetIdleAnim(param1); + SetRoam(false); + } + } + + void do_special() + { + if (!(IsEntityAlive(GetOwner()))) return; + SPECIAL_CYCLE += 1; + if (SPECIAL_CYCLE > N_SPECIALS) + { + SPECIAL_CYCLE = 1; + } + if ((G_DEVELOPER_MODE)) + { + if (SPECIAL_OVERRIDE > 0) + { + } + SPECIAL_CYCLE = SPECIAL_OVERRIDE; + } + if (SPECIAL_CYCLE == 1) + { + LogDebug("do_special: iceball"); + if (!(SKELE_MODE)) + { + } + prep_iceball(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 25.0; + } + if (SPECIAL_CYCLE == 2) + { + if (!(NO_HEAD)) + { + } + if (!(SKELE_MODE)) + { + } + do_ice_breath(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + if (SPECIAL_CYCLE == 3) + { + prep_hold_person(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 5.0; + } + if (SPECIAL_CYCLE == 4) + { + if (!(DUCK_MODE)) + { + } + do_palpatine(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + if ((SKELE_MODE)) + { + NEXT_SPECIAL += 10.0; + } + } + + void prep_iceball() + { + ScheduleDelayedEvent(2.0, "prep_iceball2"); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_PREP_DEPLOY); + SetIdleAnim(ANIM_PREP_DEPLOY); + SetMoveAnim(ANIM_PREP_DEPLOY); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), LHAND_ATCH, GetOwner(), RHAND_ATCH, Vector3(128, 164, 255), 200, 200, 2.0); + EmitSound(GetOwner(), 0, SOUND_ICE_PREP, 10); + } + + void prep_iceball2() + { + PlayAnim("critical", ANIM_RELEASE_DEPLOY); + EmitSound(GetOwner(), 0, SOUND_ICEBALL_RELEASE, 10); + npcatk_resume_ai(); + resume_movement(); + BALL_TYPE = "ice"; + start_ball(); + } + + void start_ball() + { + if ((CFB_FIREBALL_ACTIVE)) return; + CFB_FIREBALL_ACTIVE = 1; + CFB_FIRST_TARGET_FOUND = 0; + CFB_EST_ORG = /* TODO: $relpos */ $relpos(0, 32, 0); + string START_ANGS = GetEntityAngles(GetOwner()); + CFB_EST_ANG = START_ANGS; + ClientEvent("new", "all", "monsters/summon/client_side_iceball", CFB_EST_ORG, START_ANGS); + CFB_FIREBALL_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.1, "cfb_fireball_loop"); + CFB_FORCE_END = GetGameTime(); + CFB_FORCE_END += 20.0; + } + + void cfb_fireball_loop() + { + if (!(CFB_FIREBALL_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "cfb_fireball_loop"); + if (GetGameTime() > CFB_NEXT_SCAN) + { + CFB_NEXT_SCAN = GetGameTime(); + CFB_NEXT_SCAN += 2.0; + if (!(IsEntityAlive(CFB_TARGET))) + { + string OWNER_ORG = GetEntityOrigin(GetOwner()); + string TARGET_TOKENS = FindEntitiesInSphere("enemy", 512); + if (TARGET_TOKENS != "none") + { + } + if (GetTokenCount(TARGET_TOKENS, ";") > 1) + { + ScrambleTokens(TARGET_TOKENS, ";"); + } + string TEST_TARG = GetToken(TARGET_TOKENS, 0, ";"); + if ((IsEntityAlive(TEST_TARG))) + { + } + if (!(GetEntityProperty(TEST_TARG, "scriptvar"))) + { + } + CFB_TARGET = TEST_TARG; + if (!(CFB_FIRST_TARGET_FOUND)) + { + } + CFB_FIRST_TARGET_FOUND = 1; + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(CFB_EST_ORG, TARG_ORG); + } + else + { + string SCAN_DOWN = CFB_EST_ORG; + string TARGET_TOKENS = FindEntitiesInSphere("enemy", 96); + if (TARGET_TOKENS != "none") + { + } + cfb_explode("hit_nme"); + } + } + if (!(CFB_FIREBALL_ACTIVE)) return; + if ((IsEntityAlive(CFB_TARGET))) + { + string TARG_ORG = GetEntityOrigin(CFB_TARGET); + if (!(IsValidPlayer(CFB_TARGET))) + { + TARG_ORG += "z"; + } + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(CFB_EST_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + ClientEvent("update", "all", CFB_FIREBALL_IDX, "svr_update_fireball_vec", ANG_TO_TARG, CFB_EST_ORG); + CFB_EST_ANG = ANG_TO_TARG; + CFB_EST_ORG += /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, 60, 0)); + } + else + { + CFB_EST_ORG += /* TODO: $relvel */ $relvel(CFB_EST_ANG, Vector3(0, 60, 0)); + } + string TRACE_DEST = CFB_EST_ORG; + TRACE_DEST += /* TODO: $relvel */ $relvel(CFB_EST_ANG, Vector3(0, 60, 0)); + string TRACE_RESULT = TraceLine(CFB_EST_ORG, TRACE_DEST); + if (TRACE_RESULT != TRACE_DEST) + { + cfb_explode("hitwall"); + } + if (!(CFB_FIREBALL_ACTIVE)) return; + if (!(GetGameTime() > CFB_FORCE_END)) return; + cfb_explode("time_out"); + } + + void cfb_explode() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + CFB_FIREBALL_ACTIVE = 0; + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_explode"); + ScheduleDelayedEvent(0.1, "cfb_fireball_release"); + CFB_LIST = FindEntitiesInSphere("enemy", 128); + if (!(CFB_LIST != "none")) return; + if (!(GetTokenCount(CFB_LIST, ";") > 0)) return; + XDoDamage(CFB_EST_ORG, 128, DMG_ICE_BALL, 0, GetOwner(), GetOwner(), "none", "cold_effect"); + for (int i = 0; i < GetTokenCount(CFB_LIST, ";"); i++) + { + cfb_affect_targets(); + } + } + + void cfb_affect_targets() + { + string CHECK_ENT = GetToken(CFB_LIST, i, ";"); + string TARGET_ORG = GetEntityOrigin(CHECK_ENT); + string TARG_ANG = /* TODO: $angles */ $angles(CFB_EST_ORG, TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CHECK_ENT, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + ApplyEffect(CHECK_ENT, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_ICE_BALL); + } + + void cfb_fireball_end() + { + LogDebug("cfb_fireball_end"); + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_end"); + ScheduleDelayedEvent(0.1, "cfb_fireball_release"); + } + + void cfb_fireball_release() + { + LogDebug("cfb_fireball_release"); + CFB_FIREBALL_ACTIVE = 0; + } + + void prep_hold_person() + { + ScheduleDelayedEvent(2.0, "prep_hold_person2"); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_PREP_DEPLOY); + SetIdleAnim(ANIM_PREP_DEPLOY); + SetMoveAnim(ANIM_PREP_DEPLOY); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "hand_sprites", GetEntityIndex(GetOwner()), 2.0, Vector3(64, 64, 255)); + EmitSound(GetOwner(), 0, SOUND_ICE_PREP, 10); + } + + void prep_hold_person2() + { + PlayAnim("critical", ANIM_RELEASE_DEPLOY); + EmitSound(GetOwner(), 0, SOUND_ICEBALL_RELEASE, 10); + npcatk_resume_ai(); + resume_movement(); + TossProjectile("proj_hold_person", /* TODO: $relpos */ $relpos(0, 0, 24), m_hAttackTarget, 50, 0, 0, "none"); + } + + void shadow_shift() + { + if (!(GetGameTime() > NEXT_DODGE)) return; + NEXT_DODGE = GetGameTime(); + NEXT_DODGE += FREQ_DODGE; + ClientEvent("persist", "all", "effects/sfx_motionblur_temp", GetEntityIndex(GetOwner()), 0, 1, 3.0); + float RND_ANG = Random(0, 359); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(0, 1000, 0))); + EmitSound(GetOwner(), 0, SOUND_DODGE, 10); + ScheduleDelayedEvent(0.25, "stop_shadow_shift"); + } + + void stop_shadow_shift() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 0)); + } + + void OnDamage(int damage) override + { + LogDebug("game_damaged stg1 STAGE_ONE_DONE stg2 STAGE_TWO_DONE hp GetEntityHealth(GetOwner()) vs STAGE_TWO_THRESH"); + if ((SKELE_MODE)) + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (GetEntityRange(param1) > 128) + { + } + if (param2 > 40) + { + } + if (RandomInt(1, 3) == 1) + { + } + leap_away(GetEntityIndex(param1)); + } + if ((PALPATINE_ON)) + { + if (GetEntityRange(param1) < 256) + { + } + SetMoveDest(param1); + } + if (!(STAGE_ONE_DONE)) + { + if (GetEntityHealth(GetOwner()) < STAGE_ONE_THRESH) + { + } + SetDamage("dmg"); + SetDamage("hit"); + return; + SetHealth(STAGE_ONE_THRESH); + STAGE_ONE_DONE = 1; + pop_head_off(); + } + if (!(STAGE_TWO_DONE)) + { + if ((STAGE_ONE_DONE)) + { + } + if (GetEntityHealth(GetOwner()) < STAGE_TWO_THRESH) + { + } + SetDamage("dmg"); + SetDamage("hit"); + return; + SetHealth(STAGE_ONE_THRESH); + STAGE_TWO_DONE = 1; + set_skele_mode(); + if (StringToLower(GetMapName()) == "the_wall") + { + UseTrigger("co_final_stage"); + } + } + if ((PALPATINE_ON)) return; + if ((SKELE_MODE)) return; + if (!(GetEntityRange(param1) > 128)) return; + if (!(param2 > 75)) return; + shadow_shift(); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(LSHIELD_PASSIVE_ENABLE)) return; + if (!(GetGameTime() > NEXT_TOUCH_ZAP)) return; + NEXT_TOUCH_ZAP = GetGameTime(); + NEXT_TOUCH_ZAP += 0.1; + if (!(GetRelationship(GetOwner()) == "enemy")) return; + LSHIELD_TARGET = param1; + lshield_passive_zap_target(); + } + + void do_ice_breath() + { + npcatk_suspend_ai(); + suspend_movement(ANIM_ICE_BREATH); + PlayAnim("critical", ANIM_ICE_BREATH); + SPIN_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + SPIN_ON = 1; + SPIN_ANG -= 45; + if (SPIN_ANG < 0) + { + SPIN_ANG += 359; + } + EmitSound(GetOwner(), 1, SOUND_BREATH, 10); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "ice_breath", GetEntityIndex(GetOwner()), 8.0); + FREEZE_SCRIPT_IDX = "game.script.last_sent_id"; + ice_breath_spin(); + ScheduleDelayedEvent(8.0, "stop_ice_breath_spin"); + ICE_BREATH_ON = 1; + } + + void stop_ice_breath_spin() + { + EmitSound(GetOwner(), 1, SOUND_BREATH, 0); + ClientEvent("update", "all", FREEZE_SCRIPT_IDX, "ice_breath_off"); + SPIN_ON = 0; + resume_movement(); + npcatk_resume_ai(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + ICE_BREATH_ON = 0; + } + + void ice_breath_spin() + { + if (!(SPIN_ON)) return; + ScheduleDelayedEvent(0.05, "ice_breath_spin"); + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, SPIN_ANG, 0), Vector3(0, 100, 0)); + SetMoveDest(FACE_POS); + if (GetGameTime() > NEXT_FREEZE) + { + NEXT_FREEZE = GetGameTime(); + NEXT_FREEZE += 0.5; + FREEZE_LIST = FindEntitiesInSphere("enemy", 512); + if (FREEZE_LIST != "none") + { + } + for (int i = 0; i < GetTokenCount(FREEZE_LIST, ";"); i++) + { + freeze_targets(); + } + } + SPIN_ANG += 10; + if (SPIN_ANG > 359) + { + SPIN_ANG -= 359; + } + } + + void freeze_targets() + { + string CUR_TARGET = GetToken(FREEZE_LIST, i, ";"); + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 256)) return; + if (!(GetEntityHeight(CUR_TARGET) > 36)) return; + LogDebug("freeze_targets GetEntityName(CUR_TARGET)"); + ApplyEffect(CUR_TARGET, "effects/dot_cold_freeze", 10.0, GetEntityIndex(GetOwner()), DOT_ICE_CAGE); + } + + void do_palpatine() + { + ATTACK_MOVERANGE = ATTACK_MOVERANGE_LONG; + SetMoveDest(m_hAttackTarget); + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(); + suspend_movement(ANIM_PREP_DEPLOY); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "palpatine", GetEntityIndex(GetOwner()), 8.0); + EmitSound(GetOwner(), 0, SOUND_ZAP_START, 10); + // svplaysound: svplaysound 1 10 SOUND_ZAP_LOOP + EmitSound(1, 10, SOUND_ZAP_LOOP); + PALPATINE_ON = 1; + ScheduleDelayedEvent(8.0, "palpatine_end"); + palpatine_loop(); + } + + void palpatine_end() + { + if ((SKELE_MODE)) + { + ATTACK_MOVERANGE = ATTACK_MOVERANGE_MELEE; + } + PALPATINE_ON = 0; + npcatk_resume_ai(); + resume_movement(); + // svplaysound: svplaysound 1 0 SOUND_ZAP_LOOP + EmitSound(1, 0, SOUND_ZAP_LOOP); + } + + void palpatine_loop() + { + if (!(PALPATINE_ON)) return; + ScheduleDelayedEvent(0.1, "palpatine_loop"); + PALPATINE_TARGETS = FindEntitiesInSphere("enemy", 256); + if (!(PALPATINE_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(PALPATINE_TARGETS, ";"); i++) + { + palpatine_shock_targs(); + } + } + + void palpatine_shock_targs() + { + string CUR_TARG = GetToken(PALPATINE_TARGETS, i, ";"); + if (!(IsEntityAlive(CUR_TARG))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityHeight(CUR_TARG) > 36)) return; + DoDamage(CUR_TARG, "direct", DMG_PALPATINE, 1.0, GetOwner()); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, 200, 110)); + } + + void game_dynamically_created() + { + if (!(param1 > 0)) return; + SPECIAL_OVERRIDE = param1; + } + + void pop_head_off() + { + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "head_burn", GetEntityIndex(GetOwner())); + SetModelBody(1, 1); + EmitSound(GetOwner(), 0, SOUND_SCREAM, 10); + NO_HEAD = 1; + } + + void set_skele_mode() + { + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "body_burn", GetEntityIndex(GetOwner())); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 255, 30, 10.0, 1024); + EmitSound(GetOwner(), 0, SOUND_SCREAM, 10); + SetModelBody(1, 3); + SetModelBody(0, 1); + SKELE_MODE = 1; + ATTACK_RANGE = ATTACK_RANGE_MELEE; + ATTACK_HITRANGE = ATTACK_HITRANGE_MELEE; + ATTACK_MOVERANGE = ATTACK_MOVERANGE_MELEE; + ANIM_ATTACK = ANIM_SKELE_SWIPE; + DEF_ANIM_RUN = "run"; + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_RUN); + NPC_NO_ATTACK = 0; + } + + void toggle_duck_mode() + { + if ((DUCK_MODE)) + { + DUCK_MODE = 1; + ANIM_ATTACK = ANIM_SKELE_DUCK_SWIPE; + ANIM_WALK = ANIM_DUCK_MOVE; + ANIM_RUN = ANIM_DUCK_MOVE; + ANIM_IDLE = ANIM_DUCK_IDLE; + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(DUCK_MODE)) + { + DUCK_MODE = 0; + ANIM_ATTACK = ANIM_SKELE_SWIPE; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle"; + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + } + } + + void leap_away() + { + npcatk_suspend_ai(2.0); + ScheduleDelayedEvent(2.0, "force_leap_end"); + suspend_movement(ANIM_LONG_JUMP); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + if (!(IsEntityAlive(param1))) + { + SetMoveDest(m_hAttackTarget); + } + else + { + SetMoveDest(param1); + } + NPC_FORCED_MOVEDEST = 1; + PlayAnim("critical", ANIM_LONG_JUMP); + repulse_area(GetEntityOrigin(GetOwner())); + ScheduleDelayedEvent(0.1, "leap_away_boost"); + } + + void leap_away_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 1000, 800)); + } + + void frame_long_jump_land() + { + npcatk_resume_ai(); + resume_movement(); + } + + void force_leap_end() + { + npcatk_resume_ai(); + resume_movement(); + } + + void repulse_area() + { + EmitSound(GetOwner(), 0, "magic/boom.wav", 10); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "repulse", GetEntityOrigin(GetOwner()), 128); + REPULSE_LIST = FindEntitiesInSphere("any", 128); + if (!(REPULSE_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(REPULSE_LIST, ";"); i++) + { + repulse_targets(); + } + } + + void repulse_targets() + { + string CUR_TARG = GetToken(REPULSE_LIST, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 10))); + } + + void frame_castspell() + { + if (!(SKELE_MODE)) return; + skele_swipe(); + } + + void frame_crouch_slap() + { + if (!(SKELE_MODE)) return; + skele_swipe(); + } + + void skele_swipe() + { + SWIPE_ATTACK = 1; + // PlayRandomSound from: SOUND_SWIPE1, SOUND_SWIPE2, SOUND_SWIPE1, SOUND_SWIPE2, SOUND_SWIPE3, SOUND_SWIPE4 + array sounds = {SOUND_SWIPE1, SOUND_SWIPE2, SOUND_SWIPE1, SOUND_SWIPE2, SOUND_SWIPE3, SOUND_SWIPE4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE_MELEE, DMG_SWIPE, 0.9, "slash"); + } + + void my_target_died() + { + if (!(SKELE_MODE)) return; + // PlayRandomSound from: SOUND_SKELE_LAUGH1, SOUND_SKELE_LAUGH2 + array sounds = {SOUND_SKELE_LAUGH1, SOUND_SKELE_LAUGH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if ((SWIPE_ATTACK)) + { + if (RandomInt(1, 3) == 1) + { + } + if ((param1)) + { + } + if (GetRelationship(param2) == "enemy") + { + } + // PlayRandomSound from: SOUND_FREEZE_SLAP + array sounds = {SOUND_FREEZE_SLAP}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + SWIPE_ATTACK = 0; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/cold_one_cl.as b/scripts/angelscript/monsters/cold_one_cl.as new file mode 100644 index 00000000..e565ea4e --- /dev/null +++ b/scripts/angelscript/monsters/cold_one_cl.as @@ -0,0 +1,266 @@ +#pragma context client + +namespace MS +{ + +class ColdOneCl : CGameScript +{ + int CUR_BONE; + float DEATH_FLAME_SCALE; + string FX_DURATION; + string FX_ORIGIN; + string FX_RADIUS; + string FX_TYPE; + string GLOW_SPRITE; + string HAND_SPRITES_ON; + string ICE_BREATH_COLOR; + string ICE_BREATH_ON; + string ICE_BREATH_SPRITE; + string MODEL_IDX; + string PALPATINE_ON; + string REMOVE_DELAY; + string SPR_COLOR; + int TOTAL_OFS; + + ColdOneCl() + { + GLOW_SPRITE = "3dmflaora.spr"; + ICE_BREATH_SPRITE = "explode1.spr"; + ICE_BREATH_COLOR = Vector3(64, 64, 255); + TOTAL_OFS = 10; + } + + void client_activate() + { + FX_TYPE = param1; + LogDebug("*** cold_one_cl: PARAM1 PARAM2 PARAM3 PARAM4"); + if (FX_TYPE == "hand_sprites") + { + MODEL_IDX = param2; + FX_DURATION = param3; + SPR_COLOR = param4; + HAND_SPRITES_ON = 1; + REMOVE_DELAY = 2.1; + FX_DURATION("end_fx"); + hand_sprite_loop(); + } + if (FX_TYPE == "ice_breath") + { + MODEL_IDX = param2; + FX_DURATION = param3; + REMOVE_DELAY = 2.0; + ICE_BREATH_ON = 1; + ice_breath_loop(); + FX_DURATION("end_fx"); + } + if (FX_TYPE == "palpatine") + { + MODEL_IDX = param2; + FX_DURATION = param3; + PALPATINE_ON = 1; + REMOVE_DELAY = 1.0; + palpatine_loop(); + FX_DURATION("end_fx"); + } + if (FX_TYPE == "repulse") + { + FX_ORIGIN = param2; + FX_RADIUS = param3; + REMOVE_DELAY = 2.0; + string POS_GROUND = /* TODO: $get_ground_height */ $get_ground_height(FX_ORIGIN); + FX_ORIGIN = "z"; + for (int i = 0; i < 17; i++) + { + stun_burst_fx(); + } + FX_DURATION("end_fx"); + } + if (FX_TYPE == "head_burn") + { + MODEL_IDX = param2; + REMOVE_DELAY = 12.0; + head_flame(); + FX_DURATION("end_fx"); + } + if (FX_TYPE == "body_burn") + { + MODEL_IDX = param2; + REMOVE_DELAY = 12.0; + body_flame(); + FX_DURATION("end_fx"); + } + } + + void end_fx() + { + HAND_SPRITES_ON = 0; + ICE_BREATH_ON = 0; + PALPATINE_ON = 0; + REMOVE_DELAY("remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void hand_sprite_loop() + { + if (!(HAND_SPRITES_ON)) return; + ScheduleDelayedEvent(0.1, "hand_sprite_loop"); + string SPAWN_POS = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", 20); + ClientEffect("tempent", "sprite", GLOW_SPRITE, SPAWN_POS, "setup_hand_sprite"); + string SPAWN_POS = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", 16); + ClientEffect("tempent", "sprite", GLOW_SPRITE, SPAWN_POS, "setup_hand_sprite"); + } + + void setup_hand_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(Random(-20, 20), 0, 0))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPR_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void ice_breath_loop() + { + if (!(ICE_BREATH_ON)) return; + ScheduleDelayedEvent(0.01, "ice_breath_loop"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(MODEL_IDX, "attachment2"); + ClientEffect("tempent", "sprite", ICE_BREATH_SPRITE, CLOUD_ORG, "setup_ice_breath_sprite"); + ClientEffect("tempent", "sprite", ICE_BREATH_SPRITE, CLOUD_ORG, "setup_ice_breath_sprite"); + } + + void ice_breath_off() + { + end_fx(); + } + + void setup_ice_breath_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", ICE_BREATH_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string MY_ANG = /* TODO: $getcl */ $getcl(MODEL_IDX, "angles"); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(MY_ANG, Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void palpatine_loop() + { + if (!(PALPATINE_ON)) return; + ScheduleDelayedEvent(0.1, "palpatine_loop"); + string OWNER_YAW = /* TODO: $getcl */ $getcl(MODEL_IDX, "angles.yaw"); + string BEAM_START = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", 20); + string BEAM_END = BEAM_START; + float RND_LR = Random(-128, 128); + float RND_UD = Random(-10, 10); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(RND_LR, 256, RND_UD)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.25, 5.0, 0.5, 255, 50, 30, Vector3(255, 255, 255)); + string BEAM_START = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", 16); + string BEAM_END = BEAM_START; + float RND_LR = Random(-128, 128); + float RND_UD = Random(-10, 10); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(RND_LR, 256, RND_UD)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.25, 5.0, 0.5, 255, 50, 30, Vector3(255, 255, 255)); + } + + void stun_burst_fx() + { + string FLAME_POS = FX_ORIGIN; + FLAME_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, 0)); + ClientEffect("tempent", "sprite", "fire1_fixed.spr", FLAME_POS, "stunburst_flame"); + CYCLE_ANGLE += 20; + } + + void stunburst_flame() + { + float FADE_DEL = 1.0; + if (FX_RADIUS > 128) + { + float FADE_DEL = 2.0; + } + int SPRITE_SPEED = 100; + if (FX_RADIUS > 128) + { + int SPRITE_SPEED = 400; + } + ClientEffect("tempent", "set_current_prop", "death_delay", FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void head_flame() + { + DEATH_FLAME_SCALE = 1.0; + string FLAME_POS = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", 29); + CUR_BONE = 29; + ClientEffect("tempent", "sprite", "fire1_fixed.spr", FLAME_POS, "death_flame", "death_flame_update"); + } + + void body_flame() + { + DEATH_FLAME_SCALE = 0.5; + for (int i = 0; i < 28; i++) + { + setup_body_flames(); + } + } + + void setup_body_flames() + { + string FLAME_POS = /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", i); + CUR_BONE = i; + ClientEffect("tempent", "sprite", "fire1_fixed.spr", FLAME_POS, "death_flame", "death_flame_update"); + } + + void death_flame() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 64, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", DEATH_FLAME_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "update", 1); + ClientEffect("tempent", "set_current_prop", "fuser2", CUR_BONE); + } + + void death_flame_update() + { + string MY_BONE = "game.tempent.fuser2"; + ClientEffect("tempent", "set_current_prop", "origin", /* TODO: $getcl */ $getcl(MODEL_IDX, "bonepos", MY_BONE)); + } + +} + +} diff --git a/scripts/angelscript/monsters/cold_one_lshield_cl.as b/scripts/angelscript/monsters/cold_one_lshield_cl.as new file mode 100644 index 00000000..19dcae55 --- /dev/null +++ b/scripts/angelscript/monsters/cold_one_lshield_cl.as @@ -0,0 +1,19 @@ +#pragma context client + +#include "effects/sfx_lightning_shield.as" + +namespace MS +{ + +class ColdOneLshieldCl : CGameScript +{ + string SHIELD_COLOR; + + ColdOneLshieldCl() + { + SHIELD_COLOR = Vector3(1.5, 1.5, 2.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/base_companion.as b/scripts/angelscript/monsters/companion/base_companion.as new file mode 100644 index 00000000..34104a34 --- /dev/null +++ b/scripts/angelscript/monsters/companion/base_companion.as @@ -0,0 +1,477 @@ +#pragma context server + +namespace MS +{ + +class BaseCompanion : CGameScript +{ + string ACT_NAME; + string BCOMP_LAST_TELEPORT; + string BCOMP_START_CATCHUP; + int BCOMP_UPDATE_XP; + int COMPANION_CONFIRM_DISMISS; + string COMPANION_HP; + int COMPANION_LR; + string COMPANION_NAME; + int COMPANION_NEW_TYPE; + string COMPANION_NEXT_REGEN; + string COMPANION_XP; + int CONVERTING_COMPANION; + int IS_HIRED; + int I_R_COMPANION; + int I_R_PET; + string NAMEPREFIX; + int NO_SPAWN_STUCK_CHECK; + string PET_LAST_ATTACK; + string SUMMON_MASTER; + string companion.save.health; + string companion.save.xp; + + BaseCompanion() + { + I_R_COMPANION = 1; + I_R_PET = 1; + COMPANION_LR = 0; + NO_SPAWN_STUCK_CHECK = 1; + COMPANION_NEW_TYPE = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(5.0); + if ((IsEntityAlive(GetOwner()))) + { + } + if ((COMPANION_NEW_TYPE)) + { + } + if ((BCOMP_UPDATE_XP)) + { + } + string MY_SCRIPT = GetEntityProperty(GetOwner(), "itemname"); + SetPlayerQuestData(SUMMON_MASTER, MY_SCRIPT); + MY_SCRIPT += "_hp"; + LogDebug("update_hp MY_SCRIPT GetEntityHealth(GetOwner())"); + SetPlayerQuestData(SUMMON_MASTER, MY_SCRIPT); + BCOMP_UPDATE_XP = 0; + } + + void OnSpawn() override + { + pet_spawn(); + COMPANION_NAME = ACT_NAME; + ext_companion_update_name(); + } + + void ext_companion_update_name() + { + string MY_NAME = GetEntityProperty(GetOwner(), "itemname"); + MY_NAME += "_name"; + string MY_NAME = GetPlayerQuestData(SUMMON_MASTER, MY_NAME); + if (MY_NAME != 0) + { + string L_NEW_NAME = MY_NAME; + COMPANION_NAME = MY_NAME; + L_NEW_NAME += " ("; + L_NEW_NAME += GetEntityName(SUMMON_MASTER); + L_NEW_NAME += "s"; + L_NEW_NAME += ")"; + SetName(L_NEW_NAME); + } + else + { + ACT_NAME = GetEntityName(GetOwner()); + NAMEPREFIX = GetEntityName(SUMMON_MASTER); + NAMEPREFIX += "s"; + NAMEPREFIX += " "; + NAMEPREFIX += GetEntityName(GetOwner()); + SetName(NAMEPREFIX); + } + } + + void game_companion_save() + { + companion.save.health = GetEntityHealth(GetOwner()); + companion.save.xp = COMPANION_XP; + LogDebug("game_companion_save COMPANION_XP"); + } + + void game_companion_restore() + { + SUMMON_MASTER = GetEntityIndex(GetOwner()); + SetHealth(companion.save.health); + COMPANION_XP = companion.save.xp; + CONVERTING_COMPANION = 1; + LogDebug("game_companion_restore COMPANION_XP"); + } + + void companion_update_hp() + { + if (COMPANION_XP == "COMPANION_XP") + { + COMPANION_XP = 0; + } + string FINAL_HP = BASE_HP; + FINAL_HP += COMPANION_XP; + if (FINAL_HP > COMPANION_MAXHP) + { + string FINAL_HP = COMPANION_MAXHP; + } + SetHealth(GetEntityHealth(GetOwner())); + LogDebug("companion_update_hp GetEntityHealth(GetOwner()) GetEntityMaxHealth(GetOwner())"); + } + + void game_dodamage() + { + PET_LAST_ATTACK = GetGameTime(); + PET_LAST_ATTACK += 10.0; + } + + void bs_set_follow_mode() + { + basecompanion_catchup(1); + } + + void basecompanion_catchup() + { + string L_EMERGENCY_TELEPORT = param1; + if (!(L_EMERGENCY_TELEPORT)) + { + if ((GUARD_MODE)) + { + int EXIT_SUB = 1; + } + if (!(IS_HIRED)) + { + int EXIT_SUB = 1; + } + if (m_hAttackTarget != "unset") + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + string L_POS = GetEntityOrigin(SUMMON_MASTER); + if (!(L_EMERGENCY_TELEPORT)) + { + L_POS = "z"; + } + string L_TELE_PLUS10 = BCOMP_LAST_TELEPORT; + L_TELE_PLUS10 += 1.0; + if (GetGameTime() > L_TELE_PLUS10) + { + COMPANION_LR = GetEntityProperty(SUMMON_MASTER, "viewangles"); + } + else + { + COMPANION_TELE_ANG += 16; + if (COMPANION_TELE_ANG > 359) + { + COMPANION_TELE_ANG -= 359; + } + } + BCOMP_LAST_TELEPORT = GetGameTime(); + string L_ANG = /* TODO: $vec.yaw */ $vec.yaw(COMPANION_LR); + L_ANG += COMPANION_TELE_ANG; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_ANG, 0), Vector3(-48, 0, 0)); + string OLD_POS = GetEntityOrigin(GetOwner()); + SetEntityOrigin(GetOwner(), L_POS); + string reg.npcmove.endpos = L_POS; + reg.npcmove.endpos += "z"; + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), SUMMON_MASTER); + if ("game.ret.npcmove.dist" <= 0) + { + SetEntityOrigin(GetOwner(), OLD_POS); + } + else + { + if (GetGameTime() > COMPANION_NEXT_TELE_SOUND) + { + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + COMPANION_NEXT_TELE_SOUND = GetGameTime(); + COMPANION_NEXT_TELE_SOUND += 2.0; + } + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((CONVERTING_COMPANION)) + { + SUMMON_MASTER = GetEntityIndex(GetOwner()); + if (!(GetEntityProperty(SUMMON_MASTER, "scriptvar"))) + { + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + COMPANION_XP = companion.save.xp; + COMPANION_HP = companion.save.health; + LogDebug("convert_companion GetEntityName(SUMMON_MASTER) COMPANION_XP COMPANION_HP GetEntityProperty(SUMMON_MASTER, "scriptvar")"); + string MY_SCRIPT = GetEntityProperty(GetOwner(), "itemname"); + string PET_LIST = GetPlayerQuestData(SUMMON_MASTER, "pets"); + if (PET_LIST == 0) + { + string ADD_PET = MY_SCRIPT; + SetPlayerQuestData(SUMMON_MASTER, "pets"); + } + else + { + if (PET_LIST.length() > 0) PET_LIST += ";"; + PET_LIST += MY_SCRIPT; + SetPlayerQuestData(SUMMON_MASTER, "pets"); + } + SetPlayerQuestData(SUMMON_MASTER, MY_SCRIPT); + MY_SCRIPT += "_hp"; + SetPlayerQuestData(SUMMON_MASTER, MY_SCRIPT); + // TODO: companion remove ent_me ent_owner + SetAlive(0); + CONVERTING_COMPANION = 0; + int EXIT_SUB = 1; + SendColoredMessage(SUMMON_MASTER, "Companion converted to new system"); + DeleteEntity(GetOwner()); + } + if ((EXIT_SUB)) return; + if (!(GetGameTime() > BCOMP_START_CATCHUP)) return; + if (!(IsEntityAlive(SUMMON_MASTER))) + { + companion_unsummon(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityDist(SUMMON_MASTER) > 512)) return; + basecompanion_catchup(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((COMPANION_NEW_TYPE)) + { + newtype_remove_pet(1); + } + if ((COMPANION_NEW_TYPE)) return; + // TODO: companion remove ent_me ent_owner + } + + void bcompanion_regme() + { + if ((COMPANION_NEW_TYPE)) + { + if ((NEW_PET)) + { + } + CallExternal(SUMMON_MASTER, "ext_summon_register_pet", GetEntityIndex(GetOwner())); + string MY_SCRIPT = GetEntityProperty(GetOwner(), "itemname"); + string PET_LIST = GetPlayerQuestData(SUMMON_MASTER, "pets"); + if (PET_LIST == 0) + { + string ADD_PET = MY_SCRIPT; + SetPlayerQuestData(SUMMON_MASTER, "pets"); + } + else + { + if (PET_LIST.length() > 0) PET_LIST += ";"; + PET_LIST += MY_SCRIPT; + SetPlayerQuestData(SUMMON_MASTER, "pets"); + } + if (COMPANION_XP == 0) + { + // TODO: UNCONVERTED: if ( COMPANION_XP == 0 ) quest.set SUMMON_MASTER MY_SCRIPT COMPANION_XP + } + string MY_SCRIPT = GetEntityProperty(GetOwner(), "itemname"); + MY_SCRIPT += "_hp"; + SetPlayerQuestData(MY_SCRIPT, GetEntityMaxHealth(GetOwner())); + } + if ((COMPANION_NEW_TYPE)) return; + // TODO: companion add ent_me PARAM1 + } + + void game_dynamically_created() + { + if ((CONVERTING_COMPANION)) return; + if ((COMPANION_NEW_TYPE)) + { + BCOMP_START_CATCHUP = GetGameTime(); + BCOMP_START_CATCHUP += 3.0; + SUMMON_MASTER = param1; + string MY_SCRIPT = GetEntityProperty(GetOwner(), "itemname"); + COMPANION_XP = GetPlayerQuestData(SUMMON_MASTER, MY_SCRIPT); + if (param2 == 1) + { + NEW_PET = 1; + } + if (!(NEW_PET)) + { + string FINAL_HP = BASE_HP; + FINAL_HP += COMPANION_XP; + if (FINAL_HP > COMPANION_MAXHP) + { + string FINAL_HP = COMPANION_MAXHP; + } + string MY_SCRIPT = GetEntityProperty(GetOwner(), "itemname"); + MY_SCRIPT += "_hp"; + COMPANION_HP = GetPlayerQuestData(SUMMON_MASTER, MY_SCRIPT); + SetHealth(COMPANION_HP); + LogDebug("game_dynamically_created GetEntityHealth(GetOwner()) / GetEntityMaxHealth(GetOwner())"); + ScheduleDelayedEvent(0.1, "bcomp_restore_old_hp"); + } + else + { + SetHealth(BASE_HP); + } + } + bcompanion_regme(param1); + } + + void bcomp_restore_old_hp() + { + string FINAL_HP = BASE_HP; + FINAL_HP += COMPANION_XP; + if (FINAL_HP > COMPANION_MAXHP) + { + string FINAL_HP = COMPANION_MAXHP; + } + string MY_SCRIPT = GetEntityProperty(GetOwner(), "itemname"); + MY_SCRIPT += "_hp"; + COMPANION_HP = GetPlayerQuestData(SUMMON_MASTER, MY_SCRIPT); + if (COMPANION_HP == 0) + { + COMPANION_HP = FINAL_HP; + } + SetHealth(COMPANION_HP); + LogDebug("bcomp_restore_old_hp GetEntityHealth(GetOwner()) GetEntityMaxHealth(GetOwner())"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + string TARG_VALUE = GetEntityProperty(param1, "skilllevel"); + if (!(TARG_VALUE > 0)) return; + string MIN_VALUE = COMPANION_XP; + MIN_VALUE *= 0.1; + if (!(TARG_VALUE > MIN_VALUE)) return; + string IN_DMG = param2; + IN_DMG *= 0.01; + COMPANION_XP += IN_DMG; + BCOMP_UPDATE_XP = 1; + } + + void ext_unreg_pets() + { + if (!(param1 == SUMMON_MASTER)) return; + bcompanion_un_regme(); + } + + void OnDamage(int damage) override + { + BCOMP_UPDATE_XP = 1; + if (!(IsValidPlayer(param1))) + { + if (GetEntityRange(SUMMON_MASTER) > 512) + { + SendPlayerMessage(SUMMON_MASTER, COMPANION_NAME + " is under attack!"); + } + string QUART_HEALTH = GetEntityMaxHealth(GetOwner()); + QUART_HEALTH *= 0.25; + if (GetEntityHealth(GetOwner()) < QUART_HEALTH) + { + SendPlayerMessage(SUMMON_MASTER, COMPANION_NAME + " is low on health! int(GetEntityHealth(GetOwner())) hp"); + } + COMPANION_NEXT_REGEN = GetGameTime(); + COMPANION_NEXT_REGEN += 30.0; + } + if ((NEW_AI)) return; + if (!(IsValidPlayer(param1))) return; + SetDamage("dmg"); + SetDamage("hit"); + return; + } + + void my_target_died() + { + companion_update_hp(); + } + + void ext_givexp() + { + COMPANION_XP += param1; + BCOMP_UPDATE_XP = 1; + } + + void companion_abandon() + { + if (!(param2 == "from_menu")) return; + COMPANION_CONFIRM_DISMISS = 1; + ScheduleDelayedEvent(0.5, "companion_give_menu"); + } + + void companion_give_menu() + { + OpenMenu(SUMMON_MASTER); + } + + void game_menu_cancel() + { + COMPANION_CONFIRM_DISMISS = 0; + } + + void companion_release_cancel() + { + COMPANION_CONFIRM_DISMISS = 0; + } + + void companion_release() + { + ShowHelpTip(SUMMON_MASTER, "generic", "PET DISMISSED", "This pet will continue to remain with you until map change or death."); + SendPlayerMessage(SUMMON_MASTER, "Pet dismissed..."); + bs_set_defend_mode(); + IS_HIRED = 0; + ScheduleDelayedEvent(0.1, "bcompanion_un_regme"); + if (!(COMPANION_NEW_TYPE)) return; + newtype_remove_pet(); + } + + void companion_unsummon() + { + if (!(IS_HIRED)) return; + if (param1 == "trigger_hurt") + { + EmitSound(GetOwner(), 0, SOUND_PAIN, 10); + ShowHelpTip(SUMMON_MASTER, "generic", "PET UNSUMMONED DUE TO HAZARD", "You can re-summon your pet by using Summon Pet on the player menu [default: F11]"); + } + else + { + ShowHelpTip(SUMMON_MASTER, "generic", "PET UNSUMMONED", "You can re-summon your pet by using Summon Pet on the player menu [default: F11]"); + } + if (!(COMPANION_NEW_TYPE)) return; + string MY_SCRIPT = GetEntityProperty(GetOwner(), "itemname"); + SetPlayerQuestData(SUMMON_MASTER, MY_SCRIPT); + MY_SCRIPT += "_hp"; + LogDebug("update_hp MY_SCRIPT GetEntityHealth(GetOwner())"); + SetPlayerQuestData(SUMMON_MASTER, MY_SCRIPT); + BCOMP_UPDATE_XP = 0; + if (!(param3)) + { + CallExternal(SUMMON_MASTER, "ext_unsummon_pets_new", SUMMON_MASTER, GetEntityIndex(GetOwner()), 1); + } + SetAlive(0); + DeleteEntity(GetOwner(), true); // fade out + } + + void newtype_remove_pet() + { + string PET_LIST = GetPlayerQuestData(SUMMON_MASTER, "pets"); + string MY_SCRIPT = GetEntityProperty(GetOwner(), "itemname"); + string PET_IDX = FindToken(PET_LIST, MY_SCRIPT, ";"); + RemoveToken(PET_LIST, PET_IDX, ";"); + LogDebug("newtype_remove_pet PET_LIST"); + SetPlayerQuestData(SUMMON_MASTER, "pets"); + SetPlayerQuestData(SUMMON_MASTER, MY_SCRIPT); + if (!(param1)) return; + CallExternal(SUMMON_MASTER, "ext_unsummon_pets_new", SUMMON_MASTER, GetEntityIndex(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/bear_image.as b/scripts/angelscript/monsters/companion/bear_image.as new file mode 100644 index 00000000..cf20fd2d --- /dev/null +++ b/scripts/angelscript/monsters/companion/bear_image.as @@ -0,0 +1,85 @@ +#pragma context server + +namespace MS +{ + +class BearImage : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + int DID_DEATH; + string MY_OWNER; + int PLAYING_DEAD; + + BearImage() + { + ANIM_ATTACK = "bear_claw"; + ANIM_IDLE = "bear_standingidle02"; + } + + void OnSpawn() override + { + SetModel("monsters/giant_rat.mdl"); + SetModelBody(0, 5); + PLAYING_DEAD = 1; + SetSolid("none"); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + SetInvincible(true); + SetGravity(0); + SetRoam(false); + SetRace("beloved"); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + string OWNER_YAW = GetEntityProperty(MY_OWNER, "angles.yaw"); + SetAngles("face"); + SetFollow(MY_OWNER); + } + + void ext_attack() + { + PlayAnim("once", ANIM_ATTACK); + } + + void player_left() + { + LogDebug("bear_delete player_left"); + DeleteEntity(GetOwner()); + } + + void remove_bear() + { + LogDebug("bear_delete remove_bear"); + DeleteEntity(GetOwner()); + } + + void ext_bear_die() + { + LogDebug("bear_delete ext_bear_die PARAM1"); + if ((DID_DEATH)) return; + DID_DEATH = 1; + SetFollow("none"); + string OWNER_POS = GetEntityOrigin(MY_OWNER); + OWNER_POS = "z"; + SetEntityOrigin(GetOwner(), OWNER_POS); + string OWNER_YAW = GetEntityProperty(MY_OWNER, "angles.yaw"); + SetAngles("face"); + SetIdleAnim("bear_diestanding"); + SetMoveAnim("bear_diestanding"); + PlayAnim("once", "break"); + PlayAnim("hold", "bear_diestanding"); + ScheduleDelayedEvent(3.0, "bear_fade"); + } + + void bear_fade() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/body_maker.as b/scripts/angelscript/monsters/companion/body_maker.as new file mode 100644 index 00000000..cb849f94 --- /dev/null +++ b/scripts/angelscript/monsters/companion/body_maker.as @@ -0,0 +1,20 @@ +#pragma context server + +namespace MS +{ + +class BodyMaker : CGameScript +{ + void game_dynamically_created() + { + } + + void remove_me() + { + RemoveScript(); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/dridje.as b/scripts/angelscript/monsters/companion/dridje.as new file mode 100644 index 00000000..f45da0a0 --- /dev/null +++ b/scripts/angelscript/monsters/companion/dridje.as @@ -0,0 +1,154 @@ +#pragma context server + +namespace MS +{ + +class Dridje : CGameScript +{ + int CUR_ROT; + float FREQ_ROTATE; + float FREQ_ZAP; + string GLOW_COLOR; + int GLOW_RAD; + string MY_LIGHT_SCRIPT; + string MY_OWNER; + int PLAYING_DEAD; + int ROAM_DISTANCE; + int ROAM_HEIGHT; + string SKEL_ID; + string SKEL_LIGHT_ID; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + int SPAWN_ZAP; + + Dridje() + { + FREQ_ROTATE = 0.1; + FREQ_ZAP = Random(10, 60); + ROAM_DISTANCE = 28; + ROAM_HEIGHT = 0; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart15.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + GLOW_COLOR = Vector3(255, 255, 0); + GLOW_RAD = 64; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_ZAP); + zap_dridje(MY_OWNER); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(FREQ_ROTATE); + string DEST_POS = GetEntityOrigin(MY_OWNER); + CUR_ROT += 5; + if (CUR_ROT > 359) + { + CUR_ROT -= 359; + } + DEST_POS += /* TODO: $relpos */ $relpos(Vector3(0, CUR_ROT, 0), Vector3(0, ROAM_DISTANCE, ROAM_HEIGHT)); + SetEntityOrigin(GetOwner(), DEST_POS); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + } + + void OnSpawn() override + { + SetName("The Mighty Sphere of Dridje"); + SetName("dridje_sphere"); + SetBlind(true); + SetFly(true); + SetInvincible(true); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 13); + SetSolid("none"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 64); + CatchSpeech("zap_dridje", "zap"); + CatchSpeech("go_away", "vanish"); + PLAYING_DEAD = 1; + SetIdleAnim("spin_horizontal_norm"); + CUR_ROT = 0; + ClientEvent("persist", "all", currentscript, GetEntityIndex(GetOwner())); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + SPAWN_ZAP = 1; + ScheduleDelayedEvent(0.1, "zap_dridje"); + } + + void go_away() + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + SayText("Yes , my master..."); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void zap_dridje() + { + if (param1 == MY_OWNER) + { + int ZAP_GO = 1; + } + if (GetEntityIndex("ent_lastspoke") == MY_OWNER) + { + if (param1 != MY_OWNER) + { + } + SayText("Yes master..."); + int ZAP_GO = 1; + } + if ((SPAWN_ZAP)) + { + SPAWN_ZAP = 0; + int ZAP_GO = 1; + } + if (!(ZAP_GO)) return; + Effect("beam", "ents", "lgtning.spr", 20, GetOwner(), 0, MY_OWNER, 1, Vector3(255, 255, 0), 200, 200, 3.0); + Effect("beam", "ents", "lgtning.spr", 20, GetOwner(), 0, MY_OWNER, 2, Vector3(255, 255, 0), 200, 200, 3.0); + SetModelBody(0, 16); + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + Effect("glow", MY_OWNER, Vector3(255, 255, 0), 128, 8.0, 10.0); + ScheduleDelayedEvent(2.0, "zap_down"); + } + + void zap_down() + { + SetModelBody(0, 13); + } + + void client_activate() + { + SKEL_ID = param1; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/giver.as b/scripts/angelscript/monsters/companion/giver.as new file mode 100644 index 00000000..cb80d5ea --- /dev/null +++ b/scripts/angelscript/monsters/companion/giver.as @@ -0,0 +1,44 @@ +#pragma context server + +namespace MS +{ + +class Giver : CGameScript +{ + string ITEM_TO_GRANT; + string MY_OWNER; + int NO_SPAWN_STUCK_CHECK; + + Giver() + { + NO_SPAWN_STUCK_CHECK = 1; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + ITEM_TO_GRANT = param2; + } + + void OnSpawn() override + { + SetModel("none"); + SetRace("beloved"); + ScheduleDelayedEvent(0.5, "grant_item"); + } + + void grant_item() + { + // TODO: offer MY_OWNER ITEM_TO_GRANT MY_OWNER + ScheduleDelayedEvent(1.0, "me_vanish"); + } + + void me_vanish() + { + SetAlive(0); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/pet_crow.as b/scripts/angelscript/monsters/companion/pet_crow.as new file mode 100644 index 00000000..2fd2b34f --- /dev/null +++ b/scripts/angelscript/monsters/companion/pet_crow.as @@ -0,0 +1,117 @@ +#pragma context server + +#include "monsters/summon/base_summon.as" +#include "monsters/companion/base_companion.as" + +namespace MS +{ + +class PetCrow : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATK_MAX; + int ATK_MIN; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int MOVE_RANGE; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SUMMON_MASTER; + + PetCrow() + { + ANIM_IDLE = "glide"; + ANIM_WALK = "fly_slow"; + ANIM_RUN = "fly"; + ANIM_ATTACK = "fly"; + MOVE_RANGE = 48; + ATTACK_RANGE = 64; + ATK_MIN = 2; + ATK_MAX = 4; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.9; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod1.wav"; + SOUND_PAIN = "none"; + SOUND_ATTACK1 = "monsters/rat/squeak2.wav"; + SOUND_IDLE1 = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + CAN_HUNT = 1; + CAN_HEAR = 0; + CAN_FLINCH = 0; + } + + void summon_spawn() + { + SetName("Pet Crow"); + SetHealth(10); + SetWidth(32); + SetHeight(20); + SetRoam(true); + SetHearingSensitivity(3); + SetSkillLevel(5); + SetRace("human"); + SetFly(true); + SetModel("monsters/crow.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + basesummon_attackall(); + CatchSpeech("regme", "reg"); + CatchSpeech("unregme", "unreg"); + } + + void regme() + { + // TODO: companion add ent_me ent_lastspoke + SUMMON_MASTER = GetEntityIndex("ent_lastspoke"); + basesummon_follow_master(); + } + + void unregme() + { + if (GetEntityIndex("ent_lastspoke") == SUMMON_MASTER) + { + // TODO: companion remove ent_me ent_lastspoke + SUMMON_MASTER = "-!-"; + basesummon_say_attackall(); + } + } + + void bite1() + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1 + array sounds = {SOUND_ATTACK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, Random(ATK_MIN, ATK_MAX), ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/pet_rat.as b/scripts/angelscript/monsters/companion/pet_rat.as new file mode 100644 index 00000000..f4536a56 --- /dev/null +++ b/scripts/angelscript/monsters/companion/pet_rat.as @@ -0,0 +1,124 @@ +#pragma context server + +#include "monsters/summon/base_summon.as" +#include "monsters/companion/base_companion.as" + +namespace MS +{ + +class PetRat : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATK_MAX; + int ATK_MIN; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int MOVE_RANGE; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SUMMON_MASTER; + + PetRat() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + MOVE_RANGE = 48; + ATTACK_RANGE = 64; + ATK_MIN = 2; + ATK_MAX = 4; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.9; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_ATTACK1 = "monsters/rat/squeak2.wav"; + SOUND_IDLE1 = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + CAN_HUNT = 1; + CAN_HEAR = 0; + CAN_FLINCH = 0; + } + + void summon_spawn() + { + SetName("Pet Rat"); + SetHealth(10); + SetWidth(32); + SetHeight(20); + SetRoam(true); + SetHearingSensitivity(3); + SetSkillLevel(5); + SetRace("human"); + SetModel("monsters/rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + basesummon_attackall(); + CatchSpeech("rat_standup", "stand"); + CatchSpeech("regme", "reg"); + CatchSpeech("unregme", "unreg"); + } + + void regme() + { + // TODO: companion add ent_me ent_lastspoke + SUMMON_MASTER = GetEntityIndex("ent_lastspoke"); + basesummon_follow_master(); + } + + void unregme() + { + if (GetEntityIndex("ent_lastspoke") == SUMMON_MASTER) + { + // TODO: companion remove ent_me ent_lastspoke + SUMMON_MASTER = "-!-"; + basesummon_say_attackall(); + } + } + + void bite1() + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1 + array sounds = {SOUND_ATTACK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, Random(ATK_MIN, ATK_MAX), ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void rat_standup() + { + if (!(RandomInt(1, 10) > 2)) return; + SetAngles("face"); + PlayAnim("once", "idle2"); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/pet_wolf.as b/scripts/angelscript/monsters/companion/pet_wolf.as new file mode 100644 index 00000000..7b301fdf --- /dev/null +++ b/scripts/angelscript/monsters/companion/pet_wolf.as @@ -0,0 +1,586 @@ +#pragma context server + +#include "monsters/companion/base_companion.as" +#include "monsters/summon/base_summon.as" + +namespace MS +{ + +class PetWolf : CGameScript +{ + string ACT_NAME; + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_BITE; + string ANIM_CLAW; + string ANIM_DEATH; + string ANIM_EAT; + string ANIM_FLINCH; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_FLINCH3; + string ANIM_HOWL; + string ANIM_IDLE; + string ANIM_IDLE_SIT; + string ANIM_IDLE_SIT2; + string ANIM_IDLE_STAND; + string ANIM_IDLE_STAND2; + string ANIM_IDLE_STAND3; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_RUN_BASE; + string ANIM_TOSTAND; + string ANIM_WALK; + string ANIM_WALK_BASE; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string ATTACK_TYPE; + int BASE_DMG; + int BASE_HP; + int CHANCE_CLAW; + int COMPANION_MAXHP; + string COMPANION_TYPE; + float DMG_BITE; + float DMG_CLAW; + string FLINCH_ANIM; + float FREQ_HOWL; + float FREQ_IDLE; + float FREQ_LOOK; + int HOVER_CLOSE; + int HOVER_FAR; + int IS_COMPANION; + int IS_HIRED; + int LEAP_RANGE; + int MAX_DMG; + int MELEE_ATTACK; + string NEXT_HOWL; + string NEXT_REFACE; + string NO_STUCK_CHECKS; + int NPC_BATTLE_ALLY; + int NPC_NO_PLAYER_DMG; + string NPC_REVIVAL_SCRIPT; + string PET_LAST_ATTACK; + int SEARCH_DELAY; + int SIT_MODE; + string SOUND_ATK1; + string SOUND_ATK2; + string SOUND_ATK3; + string SOUND_DEATH; + string SOUND_GROWL; + string SOUND_HOWL1; + string SOUND_HOWL2; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_TELE; + string SOUND_YELP; + int SUMMON_CIRCLE_INDEX; + int SUMMON_RUN_DIST; + int SUM_NO_TALK; + float XPDMG_MULTI; + + PetWolf() + { + IS_COMPANION = 1; + SUMMON_CIRCLE_INDEX = 13; + SUMMON_RUN_DIST = 160; + ANIM_WALK_BASE = "walk_wolf"; + ANIM_RUN_BASE = "run_wolf"; + BASE_HP = 150; + IS_HIRED = 1; + SUM_NO_TALK = 1; + COMPANION_MAXHP = 3000; + MAX_DMG = 50; + XPDMG_MULTI = 0.01; + BASE_DMG = 4; + COMPANION_TYPE = "wolf"; + ACT_NAME = "pet wolf"; + NPC_REVIVAL_SCRIPT = currentscript; + SOUND_TELE = "monsters/wolves/wolf_atk2.wav"; + HOVER_FAR = 256; + HOVER_CLOSE = 128; + ANIM_WALK = "walk_wolf"; + ANIM_RUN = "run_wolf"; + ANIM_IDLE = "standidle1"; + ANIM_DEATH = "die1"; + ANIM_ATTACK = "attack1"; + ANIM_FLINCH = "hopback"; + ANIM_LEAP = "attack2"; + ANIM_CLAW = "attack2"; + ANIM_HOWL = "howl"; + ANIM_ALERT = "threat"; + ANIM_IDLE_SIT = "sit_idle1"; + ANIM_IDLE_SIT2 = "sit_idle2"; + ANIM_IDLE_STAND = "standidle1"; + ANIM_IDLE_STAND2 = "standidle2"; + ANIM_IDLE_STAND3 = "guard"; + ANIM_TOSTAND = "standup"; + ANIM_BITE = "attack1"; + ANIM_CLAW = "attack2"; + ANIM_EAT = "eat"; + ANIM_FLINCH1 = "hopback"; + ANIM_FLINCH2 = "pain1"; + ANIM_FLINCH3 = "pain2"; + ATTACK_RANGE = 92; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 72; + NPC_BATTLE_ALLY = 1; + NPC_NO_PLAYER_DMG = 1; + ATTACK_HITCHANCE = 70; + LEAP_RANGE = 256; + DMG_BITE = Random(3.0, 6.0); + DMG_CLAW = Random(4.0, 5.0); + FREQ_LOOK = 20.0; + FREQ_IDLE = Random(10, 30); + FREQ_HOWL = Random(30, 60); + CHANCE_CLAW = 50; + SOUND_HOWL1 = "monsters/wolves/wolf_howl1.wav"; + SOUND_HOWL2 = "monsters/wolves/wolf_howl2.wav"; + SOUND_GROWL = "monsters/wolves/wolf_alert.wav"; + SOUND_ATK1 = "monsters/wolves/wolf_atk1.wav"; + SOUND_ATK2 = "monsters/wolves/wolf_atk2.wav"; + SOUND_ATK3 = "monsters/wolves/wolf_atk3.wav"; + SOUND_PAIN = "monsters/wolves/wolf_yelp1.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_YELP = "monsters/wolves/wolf_yelp2.wav"; + SOUND_DEATH = "monsters/wolves/wolf_death.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_IDLE); + if (!(SUSPEND_AI)) + { + } + if (!(AM_ALPHA)) + { + if (MY_ALPHA != "unset") + { + } + npcatk_setmovedest(G_ALPHA, ATTACK_MOVERANGE); + } + if (m_hAttackTarget == "unset") + { + } + if (GetGameTime() > NEXT_HOWL) + { + LogDebug("idle howl"); + NEXT_HOWL = GetGameTime(); + NEXT_HOWL += FREQ_HOWL; + do_howl(); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if ((SIT_MODE)) + { + NO_STUCK_CHECKS = 1; + PlayAnim("critical", ANIM_IDLE_SIT2); + } + else + { + NO_STUCK_CHECKS = 0; + int RND_IDLE = RandomInt(1, 2); + if (RND_IDLE == 1) + { + atk_sound(); + PlayAnim("critical", ANIM_IDLE_STAND2); + AS_ATTACKING = GetGameTime(); + } + if (RND_IDLE == 2) + { + EmitSound(GetOwner(), 0, SOUND_GROWL, 10); + PlayAnim("critical", ANIM_IDLE_STAND3); + AS_ATTACKING = GetGameTime(); + } + } + if ((AM_ALPHA)) + { + } + if (RandomInt(1, 2) == 1) + { + } + if (!(GUARD_MODE)) + { + } + if ((SIT_MODE)) + { + ScheduleDelayedEvent(0.5, "sitmode_off"); + } + if (!(SIT_MODE)) + { + ScheduleDelayedEvent(0.5, "sitmode_on"); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(15.0); + if (GetGameTime() > COMPANION_NEXT_REGEN) + { + } + if (m_hAttackTarget == "unset") + { + } + if (GetEntityHealth(GetOwner()) < GetEntityMaxHealth(GetOwner())) + { + } + string TEN_PERCENT = GetEntityMaxHealth(GetOwner()); + TEN_PERCENT *= 0.1; + HealEntity(GetOwner(), TEN_PERCENT); + sitmode_on(); + } + + void pet_spawn() + { + SetName("pet wolf"); + SetRace("human"); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(0, 1); + SetHearingSensitivity(8); + SetWidth(36); + SetHeight(48); + SetRoam(false); + SetHealth(BASE_HP); + NEXT_HOWL = 0; + CatchSpeech("say_sit", "sit"); + CatchSpeech("say_speak", "speak"); + } + + void OnPostSpawn() override + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + + void sitmode_off() + { + if ((SIT_MODE)) + { + PlayAnim("critical", ANIM_TOSTAND); + } + SIT_MODE = 0; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + } + + void sitmode_on() + { + SIT_MODE = 1; + SetMoveAnim(ANIM_IDLE_SIT); + SetIdleAnim(ANIM_IDLE_SIT); + } + + void bite1() + { + PET_LAST_ATTACK = GetGameTime(); + ATTACK_TYPE = "bite"; + string DMG_FINAL = DMG_BITE; + string ADD_DMG = COMPANION_XP; + ADD_DMG *= XPDMG_MULTI; + DMG_FINAL += ADD_DMG; + if (DMG_FINAL > MAX_DMG) + { + string DMG_FINAL = MAX_DMG; + } + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_FINAL, ATTACK_HITCHANCE, "slash"); + atk_sound(); + if (RandomInt(1, 100) < CHANCE_CLAW) + { + ANIM_ATTACK = ANIM_CLAW; + } + MELEE_ATTACK = 1; + } + + void claw1() + { + ATTACK_TYPE = "claw"; + string DMG_FINAL = DMG_CLAW; + string ADD_DMG = COMPANION_XP; + ADD_DMG *= XPDMG_MULTI; + DMG_FINAL += ADD_DMG; + if (DMG_FINAL > MAX_DMG) + { + string DMG_FINAL = MAX_DMG; + } + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_FINAL, ATTACK_HITCHANCE, "slash"); + atk_sound(); + MELEE_ATTACK = 1; + ANIM_ATTACK = ANIM_BITE; + } + + void do_howl() + { + if ((IsEntityAlive(GetOwner()))) + { + PlayAnim("critical", ANIM_HOWL); + } + // PlayRandomSound from: SOUND_HOWL1, SOUND_HOWL2 + array sounds = {SOUND_HOWL1, SOUND_HOWL2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npcatk_lost_sight() + { + if ((false)) return; + if ((SEARCH_DELAY)) return; + SEARCH_DELAY = 1; + EmitSound(GetOwner(), 0, SOUND_GROWL, 10); + FREQ_LOOK("reset_search_delay"); + do_howl(); + } + + void reset_search_delay() + { + SEARCH_DELAY = 0; + } + + void OnFlinch() + { + int RND_FLINCH = RandomInt(1, 5); + if (RND_FLINCH == 1) + { + FLINCH_ANIM = ANIM_FLINCH2; + } + if (RND_FLINCH == 2) + { + FLINCH_ANIM = ANIM_FLINCH3; + } + if (RND_FLINCH > 2) + { + FLINCH_ANIM = ANIM_FLINCH1; + } + EmitSound(GetOwner(), 0, SOUND_YELP, 10); + } + + void cycle_up() + { + if ((SIT_MODE)) + { + sitmode_off(); + } + } + + void atk_sound() + { + // PlayRandomSound from: SOUND_ATK1, SOUND_ATK2, SOUND_ATK3 + array sounds = {SOUND_ATK1, SOUND_ATK2, SOUND_ATK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + string HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + HALF_HEALTH *= 0.5; + string QUART_HEALTH = GetEntityMaxHealth(GetOwner()); + QUART_HEALTH *= 0.25; + if (GetEntityHealth(GetOwner()) > HALF_HEALTH) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (GetEntityHealth(GetOwner()) > QUART_HEALTH) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_PAIN + array sounds = {SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + } + + void game_dodamage() + { + if (!(param1)) return; + if (ATTACK_TYPE == "bite") + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(-50, 110, 105)); + } + if (ATTACK_TYPE == "claw") + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(-100, 130, 120)); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RND_DEATH = RandomInt(1, 2); + if (RND_DEATH == 1) + { + ANIM_DEATH = "die1"; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = "die2"; + } + } + + void my_target_died() + { + if ((false)) return; + PlayAnim("once", ANIM_EAT); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SendInfoMsg(SUMMON_MASTER, "YOUR PET HAS BEEN SLAIN! " + COMPANION_NAME + " has been slain!"); + summon_death(); + bcompanion_un_regme(); + } + + void bs_set_guard_mode() + { + EmitSound(GetOwner(), 0, SOUND_ATK2, 10); + sitmode_on(); + } + + void bs_set_hunt_mode() + { + EmitSound(GetOwner(), 0, SOUND_ATK2, 10); + sitmode_off(); + bs_set_defend_mode(); + } + + void bs_set_follow_mode() + { + EmitSound(GetOwner(), 0, SOUND_ATK2, 10); + sitmode_off(); + } + + void bs_set_defend_mode() + { + EmitSound(GetOwner(), 0, SOUND_ATK2, 10); + sitmode_off(); + } + + void basesummon_say_report() + { + if (param2 != "from_menu") + { + if (GetEntityIndex("ent_lastspoke") != SUMMON_MASTER) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (ATK_MIN == "ATK_MIN") + { + string ATK_MIN = DMG_MAX; + } + string ME_HEALTH = GetMonsterHP(); + string ME_MAX_HEALTH = GetMonsterMaxHP(); + string HEALTH_STRING = "("; + HEALTH_STRING += ME_HEALTH; + HEALTH_STRING += "/"; + HEALTH_STRING += ME_MAX_HEALTH; + HEALTH_STRING += ")"; + string DMG_FINAL = BASE_DMG; + string ADD_DMG = COMPANION_XP; + ADD_DMG *= XPDMG_MULTI; + DMG_FINAL += ADD_DMG; + if (DMG_FINAL > MAX_DMG) + { + string DMG_FINAL = MAX_DMG; + } + string ME_STRENGTH = DMG_FINAL; + SetSayTextRange(1024); + SayText("[status] " + HP + HEALTH_STRING + DMG/ATK: + ME_STRENGTH + XP: + int(COMPANION_XP)); + } + + void OnHuntTarget(CBaseEntity@ target) + { + cliff_check(); + if ((SUSPEND_AI)) return; + if (!(m_hAttackTarget == "unset")) return; + if (!(IsEntityAlive(SUMMON_MASTER))) return; + string ESCORT_DIST = GetEntityRange(SUMMON_MASTER); + if (ESCORT_DIST > 128) + { + if ((SIT_MODE)) + { + sitmode_off(); + } + NEXT_REFACE = GetGameTime(); + NEXT_REFACE += 2.0; + NO_STUCK_CHECKS = 0; + npcatk_setmovedest(SUMMON_MASTER, 128); + if (ESCORT_DIST > SUMMON_RUN_DIST) + { + SetMoveAnim(ANIM_RUN); + } + else + { + SetMoveAnim(ANIM_WALK); + } + } + else + { + NO_STUCK_CHECKS = 1; + if (GetGameTime() > NEXT_REFACE) + { + } + SetMoveDest("none"); + string ESCORT_FACE = GetEntityProperty(SUMMON_MASTER, "angles.yaw"); + SetAngles("face"); + } + } + + void game_targeted_by_player() + { + LogDebug("game_targeted_by_player GetEntityName(param1)"); + CallExternal(param1, "ext_show_hbar_monster", GetEntityIndex(GetOwner()), 1); + } + + void OnDamage(int damage) override + { + if (!(SIT_MODE)) return; + SetIdleAnim(ANIM_IDLE); + } + + void summon_cycle() + { + } + + void cliff_check() + { + if ((IsOnGround(GetOwner()))) return; + string TRACE_START = GetEntityOrigin(GetOwner()); + TRACE_START += "z"; + string TRACE_END = TRACE_START; + TRACE_END += "z"; + if (!(TraceLine(TRACE_START, TRACE_END) == TRACE_END)) return; + LogDebug("OMG cliff!"); + basecompanion_catchup(1); + } + + void npcatk_anti_stuck() + { + if (!(STUCK_COUNT > 1)) return; + basecompanion_catchup(); + } + + void say_sit() + { + PlayAnim("hold", ANIM_IDLE_SIT); + } + + void say_speak() + { + EmitSound(GetOwner(), 0, "monsters/wolves/wolf_alert.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/pet_wolf_ice.as b/scripts/angelscript/monsters/companion/pet_wolf_ice.as new file mode 100644 index 00000000..43f8d405 --- /dev/null +++ b/scripts/angelscript/monsters/companion/pet_wolf_ice.as @@ -0,0 +1,148 @@ +#pragma context server + +#include "monsters/companion/pet_wolf.as" + +namespace MS +{ + +class PetWolfIce : CGameScript +{ + string ACT_NAME; + int ATTACK_HITCHANCE; + int BASE_DMG; + int BASE_HP; + int CHANCE_CLAW; + int COMPANION_MAXHP; + string COMPANION_TYPE; + float DMG_BITE; + float DMG_CLAW; + int DOT_ICE; + string FREEZE_TARGS; + float FREQ_COMBAT_HOWL; + float FREQ_HOWL; + float FREQ_IDLE; + float FREQ_LOOK; + int LEAP_RANGE; + int MAX_DMG; + int MELEE_ATTACK; + string NEXT_COMBAT_HOWL; + int NEXT_HOWL; + string NPC_REVIVAL_SCRIPT; + int SUMMON_CIRCLE_INDEX; + float XPDMG_MULTI; + + PetWolfIce() + { + SUMMON_CIRCLE_INDEX = 7; + BASE_HP = 1000; + COMPANION_MAXHP = 8000; + MAX_DMG = 125; + XPDMG_MULTI = 0.02; + BASE_DMG = 20; + COMPANION_TYPE = "wolf"; + ACT_NAME = "pet winter wolf"; + NPC_REVIVAL_SCRIPT = currentscript; + ATTACK_HITCHANCE = 90; + LEAP_RANGE = 256; + DMG_BITE = Random(10.0, 15.0); + DMG_CLAW = Random(10.0, 20.0); + FREQ_LOOK = 20.0; + FREQ_IDLE = Random(10, 30); + FREQ_HOWL = Random(30, 60); + CHANCE_CLAW = 50; + DOT_ICE = 5; + FREQ_COMBAT_HOWL = 30.0; + } + + void pet_spawn() + { + SetName("pet winter wolf"); + SetRace("human"); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(0, 3); + SetHearingSensitivity(8); + SetWidth(36); + SetHeight(48); + SetRoam(false); + SetDamageResistance("all", 0.5); + SetDamageResistance("cold", 0); + SetDamageResistance("fire", 1.5); + NEXT_HOWL = 0; + CatchSpeech("say_sit", "sit"); + CatchSpeech("say_speak", "speak"); + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (RandomInt(1, 4) == 1) + { + } + if (GetRelationship(param2) == "enemy") + { + } + if (!(IsValidPlayer(param2))) + { + } + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_ICE); + EmitSound(GetOwner(), 0, "magic/frost_reverse.wav", 10); + Effect("glow", GetOwner(), Vector3(0, 75, 255), 128, 1, 1); + } + MELEE_ATTACK = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) < 75)) return; + if (!(GetGameTime() > NEXT_COMBAT_HOWL)) return; + NEXT_COMBAT_HOWL = GetGameTime(); + NEXT_COMBAT_HOWL += FREQ_COMBAT_HOWL; + do_combat_howl(); + } + + void do_combat_howl() + { + npcatk_suspend_ai(1.0); + if ((IsEntityAlive(GetOwner()))) + { + PlayAnim("critical", ANIM_HOWL); + } + // PlayRandomSound from: SOUND_HOWL1, SOUND_HOWL2 + array sounds = {SOUND_HOWL1, SOUND_HOWL2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ClientEvent("new", "all", "effects/sfx_ice_burst", GetEntityOrigin(GetOwner()), 128, 1, Vector3(128, 128, 255)); + FREEZE_TARGS = FindEntitiesInSphere("enemy", 128); + if (!(FREEZE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(FREEZE_TARGS, ";"); i++) + { + freeze_targets(); + } + } + + void freeze_targets() + { + string CUR_TARG = GetToken(FREEZE_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) return; + int FREEZE_CHANCE = 1; + if (GetEntityMaxHealth(GetOwner()) > 3000) + { + int FREEZE_CHANCE = RandomInt(1, 2); + } + if (FREEZE_CHANCE == 1) + { + ApplyEffect(CUR_TARG, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_ICE); + } + else + { + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", 5.0, GetEntityIndex(GetOwner())); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/pet_wolf_shadow.as b/scripts/angelscript/monsters/companion/pet_wolf_shadow.as new file mode 100644 index 00000000..f7d55823 --- /dev/null +++ b/scripts/angelscript/monsters/companion/pet_wolf_shadow.as @@ -0,0 +1,137 @@ +#pragma context server + +#include "monsters/companion/pet_wolf.as" + +namespace MS +{ + +class PetWolfShadow : CGameScript +{ + string ACT_NAME; + int ATTACK_HITCHANCE; + int BASE_DMG; + int BASE_HP; + int CHANCE_CLAW; + int COMPANION_MAXHP; + string COMPANION_TYPE; + float DMG_BITE; + float DMG_CLAW; + int DOT_ICE; + string FREEZE_TARGS; + float FREQ_COMBAT_HOWL; + float FREQ_HOWL; + float FREQ_IDLE; + float FREQ_LOOK; + int LEAP_RANGE; + int MAX_DMG; + int MELEE_ATTACK; + string NEXT_COMBAT_HOWL; + int NEXT_HOWL; + string NPC_REVIVAL_SCRIPT; + int SUMMON_CIRCLE_INDEX; + float XPDMG_MULTI; + + PetWolfShadow() + { + SUMMON_CIRCLE_INDEX = 1; + BASE_HP = 500; + COMPANION_MAXHP = 6000; + MAX_DMG = 80; + XPDMG_MULTI = 0.01; + BASE_DMG = 10; + COMPANION_TYPE = "wolf"; + ACT_NAME = "pet shadow wolf"; + NPC_REVIVAL_SCRIPT = currentscript; + ATTACK_HITCHANCE = 90; + LEAP_RANGE = 256; + DMG_BITE = Random(5.0, 10.0); + DMG_CLAW = Random(5.0, 10.0); + FREQ_LOOK = 20.0; + FREQ_IDLE = Random(10, 30); + FREQ_HOWL = Random(30, 60); + CHANCE_CLAW = 50; + DOT_ICE = 5; + FREQ_COMBAT_HOWL = 30.0; + } + + void pet_spawn() + { + SetName("pet shadow wolf"); + SetRace("human"); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(0, 4); + SetHearingSensitivity(8); + SetWidth(36); + SetHeight(48); + SetRoam(false); + SetDamageResistance("all", 0.75); + SetDamageResistance("cold", 1.5); + SetDamageResistance("fire", 0); + NEXT_HOWL = 0; + CatchSpeech("say_sit", "sit"); + CatchSpeech("say_speak", "speak"); + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (RandomInt(1, 4) == 1) + { + } + if (GetRelationship(param2) == "enemy") + { + } + if (!(IsValidPlayer(param2))) + { + } + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_ICE); + EmitSound(GetOwner(), 0, "ambience/steamburst1.wav", 10); + Effect("glow", GetOwner(), Vector3(255, 128, 64), 128, 1, 1); + } + MELEE_ATTACK = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) < 75)) return; + if (!(GetGameTime() > NEXT_COMBAT_HOWL)) return; + NEXT_COMBAT_HOWL = GetGameTime(); + NEXT_COMBAT_HOWL += FREQ_COMBAT_HOWL; + do_combat_howl(); + } + + void do_combat_howl() + { + npcatk_suspend_ai(1.0); + if ((IsEntityAlive(GetOwner()))) + { + PlayAnim("critical", ANIM_HOWL); + } + // PlayRandomSound from: SOUND_HOWL1, SOUND_HOWL2 + array sounds = {SOUND_HOWL1, SOUND_HOWL2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ClientEvent("new", "all", "effects/sfx_fire_burst", GetEntityOrigin(GetOwner()), 128, 1, Vector3(128, 128, 255)); + FREEZE_TARGS = FindEntitiesInSphere("enemy", 128); + if (!(FREEZE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(FREEZE_TARGS, ";"); i++) + { + freeze_targets(); + } + } + + void freeze_targets() + { + string CUR_TARG = GetToken(FREEZE_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) return; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_ICE); + ApplyEffect(CUR_TARG, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/spell_maker_affliction.as b/scripts/angelscript/monsters/companion/spell_maker_affliction.as new file mode 100644 index 00000000..4b7a84af --- /dev/null +++ b/scripts/angelscript/monsters/companion/spell_maker_affliction.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "monsters/companion/spell_maker_base.as" + +namespace MS +{ + +class SpellMakerAffliction : CGameScript +{ + string ANIM_IDLE; + int FX_GLOW; + string FX_SCRIPT; + int GLOW_AMT; + string GLOW_COLOR; + int MODEL_OFSET; + int NO_FADE; + float REMOVE_DELAY; + int SHOW_FX; + string SOUND_SPAWN; + string SPAWNER_MODEL; + int SPELL_MAKER_HEIGHT; + + SpellMakerAffliction() + { + FX_SCRIPT = "none"; + ANIM_IDLE = "idle_standard"; + SPAWNER_MODEL = "weapons/projectiles.mdl"; + MODEL_OFSET = 8; + SOUND_SPAWN = "x/x_laugh1.wav"; + REMOVE_DELAY = 5.0; + SHOW_FX = 0; + NO_FADE = 0; + SPELL_MAKER_HEIGHT = 72; + FX_GLOW = 1; + GLOW_COLOR = Vector3(0, 255, 0); + GLOW_AMT = 255; + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/spell_maker_base.as b/scripts/angelscript/monsters/companion/spell_maker_base.as new file mode 100644 index 00000000..4f0bcbb0 --- /dev/null +++ b/scripts/angelscript/monsters/companion/spell_maker_base.as @@ -0,0 +1,139 @@ +#pragma context server + +namespace MS +{ + +class SpellMakerBase : CGameScript +{ + string FADE_LEVEL; + string FADE_RATE; + int GLOW_AMT; + string ITEM_CREATED_ME; + string ITEM_TO_REMOVE; + string MY_OWNER; + string MY_SPAWN_HEIGHT; + string SPAWNER_MODEL; + int SPELL_MAKER_HEIGHT; + string SPELL_TO_GRANT; + + SpellMakerBase() + { + SPELL_MAKER_HEIGHT = 64; + GLOW_AMT = 50; + SPAWNER_MODEL = "null.mdl"; + } + + void OnSpawn() override + { + SetName("Spell Spawner"); + SetRace("beloved"); + SetInvincible(true); + SetFly(true); + SetGravity(0); + SetModel(SPAWNER_MODEL); + SetSolid("none"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + if (MODEL_OFSET != "MODEL_OFSET") + { + SetModelBody(0, MODEL_OFSET); + } + if (ANIM_IDLE != "") + { + PlayAnim("loop", ANIM_IDLE); + } + if (SOUND_SPAWN != "SOUND_SPAWN") + { + EmitSound(GetOwner(), 0, SOUND_SPAWN, 10); + } + if ((FX_GLOW)) + { + Effect("glow", GetOwner(), GLOW_COLOR, GLOW_AMT, REMOVE_DELAY, REMOVE_DELAY); + } + } + + void game_dynamically_created() + { + MY_OWNER = GetEntityIndex(param1); + SPELL_TO_GRANT = param2; + if (SPELL_TO_GRANT != "none") + { + ITEM_CREATED_ME = param3; + MY_SPAWN_HEIGHT = param4; + ITEM_TO_REMOVE = param5; + SetAngles("face.y"); + } + if (SPAWNER_MODEL != "none") + { + FADE_LEVEL = 255; + FADE_RATE = REMOVE_DELAY; + FADE_RATE *= 0.1; + stick_to_owner(); + } + if ((SHOW_FX)) + { + ScheduleDelayedEvent(0.1, "show_fx"); + } + if (SPELL_TO_GRANT != "none") + { + ScheduleDelayedEvent(0.1, "remove_scroll"); + } + REMOVE_DELAY("me_vanish"); + } + + void show_fx() + { + ClientEvent("new", "all", FX_SCRIPT, GetEntityIndex(GetOwner()), GetEntityIndex(MY_OWNER), EXTRA_PARAM1, EXTRA_PARAM2, EXTRA_PARAM3); + } + + void remove_scroll() + { + if (ITEM_TO_REMOVE != "none") + { + CallExternal(ITEM_TO_REMOVE, "clear_hands"); + } + ScheduleDelayedEvent(0.1, "grant_spell"); + } + + void grant_spell() + { + if (SPELL_TO_GRANT != "none") + { + // TODO: offer MY_OWNER SPELL_TO_GRANT + } + ScheduleDelayedEvent(0.1, "restore_scroll"); + } + + void restore_scroll() + { + if (ITEM_CREATED_ME != "none") + { + // TODO: offer MY_OWNER ITEM_CREATED_ME + } + } + + void me_vanish() + { + SetAlive(0); + DeleteEntity(GetOwner()); + } + + void stick_to_owner() + { + FADE_LEVEL -= FADE_RATE; + if (!(FADE_LEVEL > 0)) return; + ScheduleDelayedEvent(0.1, "stick_to_owner"); + SetProp(GetOwner(), "rendermode", 1); + SetProp(GetOwner(), "renderamt", int(FADE_LEVEL)); + SetAngles("face.yaw"); + string OWNER_POS = GetEntityOrigin(MY_OWNER); + string OWNER_X = (OWNER_POS).x; + string OWNER_Y = (OWNER_POS).y; + string Z_POS = /* TODO: $get_ground_height */ $get_ground_height(OWNER_POS); + Z_POS += SPELL_MAKER_HEIGHT; + SetEntityOrigin(GetOwner(), Vector3(OWNER_X, OWNER_Y, Z_POS)); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/spell_maker_divination.as b/scripts/angelscript/monsters/companion/spell_maker_divination.as new file mode 100644 index 00000000..92e62231 --- /dev/null +++ b/scripts/angelscript/monsters/companion/spell_maker_divination.as @@ -0,0 +1,102 @@ +#pragma context server + +#include "monsters/companion/spell_maker_base.as" + +namespace MS +{ + +class SpellMakerDivination : CGameScript +{ + string ANIM_IDLE; + string CYCLE_ANGLE; + float DEATH_DELAY; + string FX_SCRIPT; + float LIGHT_DROPPED_SCALE; + float LIGHT_PLAYER_SCALE; + int MODEL_OFSET; + int NO_FADE; + int OFSZ_NEG; + int OFSZ_POS; + int OFS_NEG; + int OFS_POS; + float REMOVE_DELAY; + int SHOW_FX; + string SOUND_SPAWN; + string SPAWNER_MODEL; + string SPRITE_1; + int TOTAL_OFS; + string sfx.npcid; + + SpellMakerDivination() + { + FX_SCRIPT = "monsters/companion/spell_maker_divination"; + ANIM_IDLE = ""; + SPAWNER_MODEL = "none"; + MODEL_OFSET = 0; + SOUND_SPAWN = "magic/heal_powerup.wav"; + REMOVE_DELAY = 10.0; + SHOW_FX = 1; + NO_FADE = 1; + DEATH_DELAY = 9.0; + OFS_POS = 16; + OFS_NEG = -16; + OFSZ_POS = 32; + OFSZ_NEG = -10; + LIGHT_PLAYER_SCALE = 0.3; + LIGHT_DROPPED_SCALE = 0.5; + SPRITE_1 = "blueflare1.spr"; + } + + void client_activate() + { + sfx.npcid = param2; + DEATH_DELAY("remove_me"); + ScheduleDelayedEvent(0.1, "spriteify"); + } + + void spriteify() + { + TOTAL_OFS = 64; + for (int i = 0; i < 18; i++) + { + createsprite(); + } + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + if (CYCLE_ANGLE == "CYCLE_ANGLE") + { + CYCLE_ANGLE = 0; + } + CYCLE_ANGLE += 20; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, -36)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", l.pos, "setup_sprite1_sparkle"); + string l.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, -72)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", l.pos, "setup_sprite1_sparkle"); + string l.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, -104)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", l.pos, "setup_sprite1_sparkle"); + } + + void setup_sprite1_sparkle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 7.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", -0.01); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/spell_maker_fire.as b/scripts/angelscript/monsters/companion/spell_maker_fire.as new file mode 100644 index 00000000..7c8f4705 --- /dev/null +++ b/scripts/angelscript/monsters/companion/spell_maker_fire.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "monsters/companion/spell_maker_base.as" + +namespace MS +{ + +class SpellMakerFire : CGameScript +{ + string ANIM_IDLE; + string FX_SCRIPT; + int MODEL_OFSET; + int NO_FADE; + float REMOVE_DELAY; + int SHOW_FX; + string SOUND_SPAWN; + string SPAWNER_MODEL; + + SpellMakerFire() + { + FX_SCRIPT = "none"; + SPAWNER_MODEL = "weapons/projectiles.mdl"; + MODEL_OFSET = 50; + SOUND_SPAWN = "scream/battlecry.wav"; + ANIM_IDLE = "stukabat_Hover"; + REMOVE_DELAY = 5.0; + SHOW_FX = 0; + NO_FADE = 0; + SOUND_SPAWN = "scream/battlecry.wav"; + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/spell_maker_ice.as b/scripts/angelscript/monsters/companion/spell_maker_ice.as new file mode 100644 index 00000000..fa14053b --- /dev/null +++ b/scripts/angelscript/monsters/companion/spell_maker_ice.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "monsters/companion/spell_maker_base.as" + +namespace MS +{ + +class SpellMakerIce : CGameScript +{ + string ANIM_IDLE; + int FX_GLOW; + string FX_SCRIPT; + string GLOW_COLOR; + int MODEL_OFSET; + int NO_FADE; + float REMOVE_DELAY; + int SHOW_FX; + string SOUND_SPAWN; + string SPAWNER_MODEL; + int SPELL_MAKER_HEIGHT; + + SpellMakerIce() + { + FX_SCRIPT = "none"; + ANIM_IDLE = "iceblade_idle"; + SPAWNER_MODEL = "weapons/P_weapons1.mdl"; + MODEL_OFSET = 8; + SOUND_SPAWN = "magic/ice_powerup.wav"; + SPELL_MAKER_HEIGHT = 32; + REMOVE_DELAY = 5.0; + SHOW_FX = 0; + NO_FADE = 0; + FX_GLOW = 1; + GLOW_COLOR = Vector3(128, 128, 255); + Precache(SOUND_SPAWN); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/spell_maker_invisible.as b/scripts/angelscript/monsters/companion/spell_maker_invisible.as new file mode 100644 index 00000000..55269f4a --- /dev/null +++ b/scripts/angelscript/monsters/companion/spell_maker_invisible.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "monsters/companion/spell_maker_base.as" + +namespace MS +{ + +class SpellMakerInvisible : CGameScript +{ + string ANIM_IDLE; + int NO_FADE; + float REMOVE_DELAY; + int SHOW_FX; + string SPAWNER_MODEL; + + SpellMakerInvisible() + { + ANIM_IDLE = ""; + SPAWNER_MODEL = "none"; + REMOVE_DELAY = 5.0; + SHOW_FX = 0; + NO_FADE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/spell_maker_lightning.as b/scripts/angelscript/monsters/companion/spell_maker_lightning.as new file mode 100644 index 00000000..940e8491 --- /dev/null +++ b/scripts/angelscript/monsters/companion/spell_maker_lightning.as @@ -0,0 +1,234 @@ +#pragma context server + +#include "monsters/companion/spell_maker_base.as" + +namespace MS +{ + +class SpellMakerLightning : CGameScript +{ + string ANIM_IDLE; + int BEAMS_SETUP; + string BEAM_COLOR; + int BEAM_ROT; + string BOTTOM_MID; + int B_BRIGHT; + int B_COUNT; + string C_FX_SPRITE; + float DEATH_DELAY; + string EFFECTS_SPRITE; + string FLOOR; + string FX_SCRIPT; + int LIGHTING_RADIUS; + int MODEL_OFSET; + string OWNER_IDX; + float REMOVE_DELAY; + string ROOF; + int SHOW_FX; + string SOUND_SPAWN; + string SPAWNER_MODEL; + int SPR_RENDER; + + SpellMakerLightning() + { + FX_SCRIPT = "monsters/companion/spell_maker_lightning"; + ANIM_IDLE = ""; + SPAWNER_MODEL = "none"; + MODEL_OFSET = 0; + SOUND_SPAWN = "weather/Storm_exclamation.wav"; + REMOVE_DELAY = 10.0; + SHOW_FX = 1; + EFFECTS_SPRITE = "lgtning.spr"; + C_FX_SPRITE = "lgtning.spr"; + LIGHTING_RADIUS = 32; + DEATH_DELAY = 5.0; + BEAM_COLOR = Vector3(20, 20, 255); + } + + void OnSpawn() override + { + } + + void client_activate() + { + OWNER_IDX = param2; + string C_POS = /* TODO: $getcl */ $getcl(OWNER_IDX, "origin"); + string C_POS_X = (C_POS).x; + string C_POS_Y = (C_POS).y; + string C_POS_Z = (C_POS).z; + string Z_END = C_POS_Z; + Z_END += 4000; + Vector3 TRACE_END = Vector3(C_POS_X, C_POS_Y, Z_END); + ROOF = TraceLine(C_POS, TRACE_END); + ROOF = (ROOF).z; + FLOOR = /* TODO: $get_ground_height */ $get_ground_height(C_POS); + string MID = FLOOR; + MID += 36; + BEAM_ROT = 0; + B_BRIGHT = 1; + B_COUNT = 0; + SPR_RENDER = 200; + BEAMS_SETUP = 1; + cl_make_beams(); + DEATH_DELAY("remove_me"); + BOTTOM_MID = Vector3(C_POS_X, C_POS_Y, MID); + ClientEffect("tempent", "sprite", "blueflare1.spr", BOTTOM_MID, "setup_sprite1_sparkle", "sprite_update"); + } + + void setup_sprite1_sparkle() + { + string SPR_DEATH = DEATH_DELAY; + SPR_DEATH += 1.0; + ClientEffect("tempent", "set_current_prop", "origin", BOTTOM_MID); + ClientEffect("tempent", "set_current_prop", "death_delay", SPR_DEATH); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 1.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", SPR_RENDER); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(254, 254, 254)); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void sprite_update() + { + ClientEffect("tempent", "set_current_prop", "origin", BOTTOM_MID); + if (B_COUNT > 35) + { + SPR_RENDER -= 1; + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", SPR_RENDER); + } + } + + void game_prerender() + { + sprite_update(); + } + + void cl_make_beams() + { + SetRepeatDelay(0.1); + B_COUNT += 1; + if (!(BEAMS_SETUP)) return; + string C_POS = /* TODO: $getcl */ $getcl(OWNER_IDX, "origin"); + string C_POS_X = (C_POS).x; + string C_POS_Y = (C_POS).y; + string C_POS_Z = (C_POS).z; + Vector3 TOP_CENTER = Vector3(C_POS_X, C_POS_Y, ROOF); + BOTTOM_MID = Vector3(C_POS_X, C_POS_Y, MID); + Vector3 BOTTOM_CENTER = Vector3(C_POS_X, C_POS_Y, FLOOR); + if (B_COUNT < 40) + { + BEAM_ROT += 10; + if (BEAM_ROT > 359) + { + BEAM_ROT = 0; + } + string BEAM_END = BOTTOM_CENTER; + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, BEAM_ROT, 0), Vector3(0, LIGHTING_RADIUS, 0)); + ClientEffect("beam_points", TOP_CENTER, BEAM_END, "lgtning.spr", 0.2, 3.0, 0.2, B_BRIGHT, 50, 30, BEAM_COLOR); + ClientEffect("beam_points", BEAM_END, BOTTOM_MID, "lgtning.spr", 0.2, 3.0, 0.2, B_BRIGHT, 50, 30, BEAM_COLOR); + string BEAM_END = BOTTOM_CENTER; + int ANG_ADJ = 120; + ANG_ADJ += BEAM_ROT; + if (ANG_ADJ > 359) + { + ANG_ADJ -= 359; + } + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, LIGHTING_RADIUS, 0)); + ClientEffect("beam_points", TOP_CENTER, BEAM_END, "lgtning.spr", 0.2, 3.0, 0.2, B_BRIGHT, 50, 30, BEAM_COLOR); + ClientEffect("beam_points", BEAM_END, BOTTOM_MID, "lgtning.spr", 0.2, 3.0, 0.2, B_BRIGHT, 50, 30, BEAM_COLOR); + string BEAM_END = BOTTOM_CENTER; + int ANG_ADJ = 240; + ANG_ADJ += BEAM_ROT; + if (ANG_ADJ > 359) + { + ANG_ADJ -= 359; + } + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, LIGHTING_RADIUS, 0)); + ClientEffect("beam_points", TOP_CENTER, BEAM_END, "lgtning.spr", 0.2, 3.0, 0.1, B_BRIGHT, 50, 30, BEAM_COLOR); + ClientEffect("beam_points", BEAM_END, BOTTOM_MID, "lgtning.spr", 0.2, 3.0, 0.2, B_BRIGHT, 50, 30, BEAM_COLOR); + } + sprite_update(); + } + + void remove_me() + { + RemoveScript(); + } + + void svr_show_fx() + { + string BEAM_WIDTH = GetSkillLevel(MY_OWNER, "spellcasting.lightning"); + int BEAM_WIDTH = int(BEAM_WIDTH); + int x = -64; + int y = -64; + string z = (/* TODO: $relpos */ $relpos(0, 0, 0)).z; + string gnd = /* TODO: $get_ground_height */ $get_ground_height(/* TODO: $relpos */ $relpos(x, y, 250)); + gnd -= z; + gnd *= -1; + string temp = gnd; + temp -= 64; + beam_silent(x, y, gnd); + int x = 64; + int y = 64; + string z = (/* TODO: $relpos */ $relpos(0, 0, 0)).z; + string gnd = /* TODO: $get_ground_height */ $get_ground_height(/* TODO: $relpos */ $relpos(x, y, 250)); + gnd -= z; + gnd *= -1; + string temp = gnd; + temp -= 64; + beam_silent(x, y, gnd); + int x = -64; + int y = 64; + string z = (/* TODO: $relpos */ $relpos(0, 0, 0)).z; + string gnd = /* TODO: $get_ground_height */ $get_ground_height(/* TODO: $relpos */ $relpos(x, y, 250)); + gnd -= z; + gnd *= -1; + string temp = gnd; + temp -= 64; + beam_silent(x, y, gnd); + int x = 64; + int y = -64; + string z = (/* TODO: $relpos */ $relpos(0, 0, 0)).z; + string gnd = /* TODO: $get_ground_height */ $get_ground_height(/* TODO: $relpos */ $relpos(x, y, 250)); + gnd -= z; + gnd *= -1; + string temp = gnd; + temp -= 64; + beam_silent(x, y, gnd); + int x = 0; + int y = 0; + string z = (/* TODO: $relpos */ $relpos(0, 0, 0)).z; + string gnd = /* TODO: $get_ground_height */ $get_ground_height(/* TODO: $relpos */ $relpos(x, y, 250)); + gnd -= z; + gnd *= -1; + string temp = gnd; + temp -= 64; + center_beam(x, y, gnd); + } + + void beam_silent() + { + string BEAM_WIDTH = GetSkillLevel(MY_OWNER, "spellcasting.lightning"); + int BEAM_WIDTH = int(BEAM_WIDTH); + BEAM_WIDTH *= 8; + int GROUND_LEVEL = -1000; + int HEIGHT = 1000; + Effect("beam", "point", EFFECTS_SPRITE, BEAM_WIDTH, /* TODO: $relpos */ $relpos(param1, param2, 1000), /* TODO: $relpos */ $relpos(param1, param2, -1000), Vector3(128, 128, 255), 64, 64, 2); + } + + void center_beam() + { + int BEAM_WIDTH = 1600; + int GROUND_LEVEL = -1000; + int HEIGHT = 1000; + Effect("beam", "point", C_FX_SPRITE, BEAM_WIDTH, /* TODO: $relpos */ $relpos(param1, param2, 1000), /* TODO: $relpos */ $relpos(param1, param2, -1000), Vector3(255, 255, 255), 64, 64, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/spell_maker_protection.as b/scripts/angelscript/monsters/companion/spell_maker_protection.as new file mode 100644 index 00000000..d521a723 --- /dev/null +++ b/scripts/angelscript/monsters/companion/spell_maker_protection.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "monsters/base_npc_attack.as" +#include "monsters/companion/spell_maker_base.as" + +namespace MS +{ + +class SpellMakerProtection : CGameScript +{ + string ANIM_IDLE; + int CAN_ATTACK; + int CAN_HUNT; + int MODEL_OFSET; + string SOUND_SPAWN; + string SPAWNER_MODEL; + + SpellMakerProtection() + { + ANIM_IDLE = "idle1"; + SPAWNER_MODEL = "weapons/p_weapons2.mdl"; + MODEL_OFSET = 5; + SOUND_SPAWN = "magic/heal_powerup.wav"; + CAN_ATTACK = 0; + CAN_HUNT = 0; + Precache("monsters/companion/spell_maker_base"); + } + + void OnSpawn() override + { + SetHealth(1); + SetName("Spell Spawner"); + SetWidth(32); + SetHeight(32); + SetRace("beloved"); + SetRoam(false); + SetFly(true); + 1 = float(1); + SetModel(SPAWNER_MODEL); + SetModelBody(0, MODEL_OFSET); + SetInvincible(true); + SetSolid("none"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + PlayAnim("loop", ANIM_IDLE); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 255, 2, 2); + SetVolume(4); + EmitSound(GetOwner(), SOUND_SPAWN); + } + +} + +} diff --git a/scripts/angelscript/monsters/companion/spell_maker_summoning.as b/scripts/angelscript/monsters/companion/spell_maker_summoning.as new file mode 100644 index 00000000..0e89e311 --- /dev/null +++ b/scripts/angelscript/monsters/companion/spell_maker_summoning.as @@ -0,0 +1,98 @@ +#pragma context server + +#include "monsters/companion/spell_maker_base.as" + +namespace MS +{ + +class SpellMakerSummoning : CGameScript +{ + string ANIM_IDLE; + string CYCLE_ANGLE; + float DEATH_DELAY; + string FX_SCRIPT; + float LIGHT_DROPPED_SCALE; + float LIGHT_PLAYER_SCALE; + int MODEL_OFSET; + int NO_FADE; + int OFSZ_NEG; + int OFSZ_POS; + int OFS_NEG; + int OFS_POS; + float REMOVE_DELAY; + int SHOW_FX; + string SOUND_SPAWN; + string SPAWNER_MODEL; + string SPRITE_1; + int TOTAL_OFS; + string sfx.npcid; + + SpellMakerSummoning() + { + FX_SCRIPT = "monsters/companion/spell_maker_summoning"; + ANIM_IDLE = ""; + SPAWNER_MODEL = "none"; + MODEL_OFSET = 0; + SOUND_SPAWN = "magic/heal_powerup.wav"; + REMOVE_DELAY = 10.0; + SHOW_FX = 1; + NO_FADE = 1; + Precache(SOUND_SPAWN); + DEATH_DELAY = 9.0; + OFS_POS = 16; + OFS_NEG = -16; + OFSZ_POS = 32; + OFSZ_NEG = -10; + LIGHT_PLAYER_SCALE = 0.3; + LIGHT_DROPPED_SCALE = 0.5; + SPRITE_1 = "blueflare1.spr"; + } + + void client_activate() + { + sfx.npcid = param2; + DEATH_DELAY("remove_me"); + ScheduleDelayedEvent(0.1, "spriteify"); + } + + void spriteify() + { + TOTAL_OFS = 64; + for (int i = 0; i < 18; i++) + { + createsprite(); + } + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + if (CYCLE_ANGLE == "CYCLE_ANGLE") + { + CYCLE_ANGLE = 0; + } + CYCLE_ANGLE += 20; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, -36)); + ClientEffect("tempent", "sprite", "char_breath.spr", l.pos, "setup_sprite1_sparkle"); + string l.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + } + + void setup_sprite1_sparkle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 7.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 3.0); + ClientEffect("tempent", "set_current_prop", "gravity", -0.01); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/corrupted_reaver.as b/scripts/angelscript/monsters/corrupted_reaver.as new file mode 100644 index 00000000..47deeb56 --- /dev/null +++ b/scripts/angelscript/monsters/corrupted_reaver.as @@ -0,0 +1,92 @@ +#pragma context server + +#include "monsters/swamp_reaver.as" + +namespace MS +{ + +class CorruptedReaver : CGameScript +{ + string BREATH_TYPE; + string DOT_ACID_BOMB; + string DOT_DMG; + string DOT_DURATION; + string DOT_EFFECT; + string EFFECT_ACID_BOMB; + string ERRUPT_TYPE; + float FIREBALL1_DURATION; + string FIREBALL1_SCRIPT; + float FIREBALL2_DURATION; + string FIREBALL2_SCRIPT; + int MIXED_REAVER; + string MIX_COUNT; + string PROJECTILE_SCRIPT; + int REAVER_MAXHP; + string REAVER_NAME; + int REAVER_SKIN; + int REAVER_XP; + + CorruptedReaver() + { + REAVER_NAME = "Corrupted Reaver"; + REAVER_MAXHP = 5000; + REAVER_XP = 3750; + REAVER_SKIN = 2; + FIREBALL1_SCRIPT = "monsters/summon/fire_ball_guided"; + FIREBALL2_SCRIPT = "monsters/summon/acid_ball_guided"; + FIREBALL1_DURATION = 15.0; + FIREBALL2_DURATION = 8.0; + MIXED_REAVER = 1; + } + + void game_precache() + { + Precache("monsters/summon/fire_ball_guided"); + Precache("monsters/summon/acid_ball_guided"); + Precache("effects/sfx_acid_splash"); + Precache("xfireball3.spr"); + } + + void mixed_reaver_switch() + { + MIX_COUNT += 1; + if (MIX_COUNT == 1) + { + DOT_EFFECT = "effects/dot_fire"; + DOT_DURATION = 5.0; + DOT_DMG = 60.0; + ERRUPT_TYPE = "fire"; + BREATH_TYPE = "fire"; + PROJECTILE_SCRIPT = "proj_fire_bomb"; + DOT_ACID_BOMB = 200; + EFFECT_ACID_BOMB = "effects/dot_fire"; + SetBloodType("red"); + } + if (MIX_COUNT == 2) + { + DOT_EFFECT = "effects/dot_poison"; + DOT_DURATION = 10.0; + DOT_DMG = 30.0; + ERRUPT_TYPE = "poison"; + BREATH_TYPE = "poison"; + PROJECTILE_SCRIPT = "proj_acid_bomb"; + DOT_ACID_BOMB = 150; + EFFECT_ACID_BOMB = "effects/dot_acid"; + SetBloodType("green"); + MIX_COUNT = 0; + } + } + + void reaver_immunes() + { + SetDamageResistance("lightning", 1.25); + SetDamageResistance("cold", 1.25); + SetDamageResistance("acid", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("holy", 0.5); + } + +} + +} diff --git a/scripts/angelscript/monsters/croc1.as b/scripts/angelscript/monsters/croc1.as new file mode 100644 index 00000000..fdec874a --- /dev/null +++ b/scripts/angelscript/monsters/croc1.as @@ -0,0 +1,216 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Croc1 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_CUSTOM_FLINCH; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_RUN_NORMAL; + string ANIM_SWIM; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DID_INTRO; + int DMG_BITE; + int FISH_VRANGE; + int FISH_VSPEED_DOWN; + int FISH_VSPEED_UP; + string HALF_HP; + int MOVE_RANGE; + string NEXT_FLINCH; + string NEXT_IDLE_SOUND; + string NEXT_VICTORY; + int NPC_GIVE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int STEP_COUNT; + + Croc1() + { + ANIM_SWIM = "swim"; + ANIM_RUN_NORMAL = "Run"; + ANIM_RUN = "Run"; + ANIM_WALK = "Walk"; + ANIM_IDLE = "idle"; + ANIM_DEATH = "diesimple"; + ANIM_CUSTOM_FLINCH = "Sflinch"; + ANIM_ATTACK = "biteattack"; + DMG_BITE = 300; + NPC_GIVE_EXP = 600; + MOVE_RANGE = 50; + ATTACK_MOVERANGE = 50; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 90; + FISH_VSPEED_UP = 25; + FISH_VSPEED_DOWN = -25; + FISH_VRANGE = 50; + SOUND_STEP1 = "monsters/gator/Gator_Footstep1.wav"; + SOUND_STEP2 = "monsters/gator/Gator_Footstep2.wav"; + SOUND_IDLE1 = "monsters/gator/Gator_IdleNormal_F0.wav"; + SOUND_IDLE2 = "monsters/gator/Gator_IdleRoarLow_F0.wav"; + SOUND_ATTACK1 = "monsters/gator/Gator_BiteAttack.wav"; + SOUND_ATTACK2 = "monsters/gator/Gator_BiteAttack_1.wav"; + SOUND_ATTACK3 = "monsters/gator/Gator_BiteAttack_2_f0.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_DEATH = "monsters/Gator_DieSimple.wav"; + } + + void OnSpawn() override + { + SetName("Crocodile"); + SetModel("monsters/gator.mdl"); + SetWidth(32); + SetHeight(32); + SetRace("wildanimal"); + SetHealth(3000); + SetDamageResistance("cold", 1.25); + SetRoam(true); + SetHearingSensitivity(4); + STEP_COUNT = 0; + ScheduleDelayedEvent(2.0, "finalize_me"); + } + + void finalize_me() + { + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + } + + void npc_targetsighted() + { + if ((DID_INTRO)) return; + DID_INTRO = 1; + npcatk_suspend_roam(2.0); + EmitSound(GetOwner(), 0, "monsters/gator/Gator_SeePlayer_f0.wav", 10); + PlayAnim("critical", "idleroarlow"); + } + + void my_target_died() + { + if (!(GetGameTime() > NEXT_VICTORY)) return; + npcatk_suspend_roam(2.0); + NEXT_VICTORY = GetGameTime(); + NEXT_VICTORY += 20.0; + EmitSound(GetOwner(), 0, "monsters/gator/Gator_IdleRoarLow_F0.wav", 10); + PlayAnim("critical", "idleroarlow"); + } + + void cycle_down() + { + DID_INTRO = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (m_hAttackTarget == "unset") + { + if (GetGameTime() > NEXT_IDLE_SOUND) + { + } + NEXT_IDLE_SOUND = GetGameTime(); + NEXT_IDLE_SOUND += Random(5.0, 15.0); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(m_hAttackTarget != "unset")) return; + if ((IsInWater(GetOwner()))) + { + ANIM_RUN = ANIM_SWIM; + SetMoveAnim(ANIM_RUN); + string MOVE_DEST_Z = (GetMonsterProperty("movedest.origin")).z; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + SetGravity(0); + if (MOVE_DEST_Z > MY_Z) + { + if ((IsInWater(GetOwner()))) + { + } + string Z_DIFF = MOVE_DEST_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > FISH_VRANGE) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, FISH_VSPEED_UP)); + } + if (MOVE_DEST_Z < MY_Z) + { + string Z_DIFF = MY_Z; + Z_DIFF -= MOVE_DEST_Z; + if (Z_DIFF > FISH_VRANGE) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, FISH_VSPEED_DOWN)); + } + } + else + { + SetGravity(1); + ANIM_RUN = "Run"; + SetMoveAnim(ANIM_RUN); + } + } + + void frame_step() + { + STEP_COUNT += 1; + if (STEP_COUNT == 1) + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 10); + } + else + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 10); + } + } + + void frame_bite() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, 0.8, "pierce"); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, 250, 110)); + } + + void OnDamage(int damage) override + { + if (!(GetEntityHealth(GetOwner()) < HALF_HP)) return; + if (!(GetGameTime() > NEXT_FLINCH)) return; + NEXT_FLINCH = GetGameTime(); + NEXT_FLINCH += 20.0; + npcatk_suspend_roam(2.0); + PlayAnim("critical", ANIM_CUSTOM_FLINCH); + EmitSound(GetOwner(), 0, "monsters/gator/Gator_Sflinch_f0.wav", 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + +} + +} diff --git a/scripts/angelscript/monsters/debug.as b/scripts/angelscript/monsters/debug.as new file mode 100644 index 00000000..3ad4eb2d --- /dev/null +++ b/scripts/angelscript/monsters/debug.as @@ -0,0 +1,142 @@ +#pragma context server + +namespace MS +{ + +class Debug : CGameScript +{ + string DUMP_ARRAY_CALLER; + string DUMP_ARRAY_GLOBAL; + string DUMP_ARRAY_NAME; + + void bd_debug() + { + string L_DEBUG_CALLER = param1; + string L_DEBUG_TYPE = param2; + string L_EXTRA_EVENT = "none"; + string L_OUT_MSG = GetEntityName(GetOwner()); + L_OUT_MSG += "["; + L_OUT_MSG += GetEntityIndex(GetOwner()); + L_OUT_MSG += "]: "; + if (L_DEBUG_TYPE == "array") + { + L_OUT_MSG += "Array "; + L_OUT_MSG += param3; + L_OUT_MSG += "#"; + L_OUT_MSG += param4; + L_OUT_MSG += " is "; + L_OUT_MSG += param3[int(param4)]; + int L_PROCESSED = 1; + } + if (L_DEBUG_TYPE == "garray") + { + L_OUT_MSG += "g_Array "; + L_OUT_MSG += param3; + L_OUT_MSG += "#"; + L_OUT_MSG += param4; + L_OUT_MSG += " is "; + L_OUT_MSG += GetGlobalArray(param3, int(param4)); + int L_PROCESSED = 1; + } + if (L_DEBUG_TYPE == "darray") + { + L_OUT_MSG += "Dumping Array: "; + L_OUT_MSG += param3; + DUMP_ARRAY_NAME = param3; + DUMP_ARRAY_GLOBAL = 0; + DUMP_ARRAY_CALLER = L_DEBUG_CALLER; + string L_EXTRA_EVENT = "dbg_dump_array"; + int L_PROCESSED = 1; + } + if (L_DEBUG_TYPE == "dgarray") + { + L_OUT_MSG += "Dumping Global Array: "; + L_OUT_MSG += param3; + DUMP_ARRAY_NAME = param3; + DUMP_ARRAY_GLOBAL = 1; + DUMP_ARRAY_CALLER = L_DEBUG_CALLER; + string L_EXTRA_EVENT = "dbg_dump_array"; + int L_PROCESSED = 1; + } + if (L_DEBUG_TYPE == "var") + { + L_OUT_MSG += "var "; + L_OUT_MSG += param3; + L_OUT_MSG += " prop "; + L_OUT_MSG += GetEntityProperty(param3, "param4"); + int L_PROCESSED = 1; + } + if (!(L_PROCESSED)) + { + if (param2 == "PARAM2") + { + L_OUT_MSG += "exists"; + } + else + { + L_OUT_MSG += param2; + if (param3 != "PARAM3") + { + if (param4 == "PARAM4") + { + } + L_OUT_MSG += "->"; + L_OUT_MSG += param3; + L_OUT_MSG += "="; + L_OUT_MSG += GetEntityProperty(param2, "param3"); + } + if (param4 != "PARAM4") + { + L_OUT_MSG += "->"; + L_OUT_MSG += param3; + L_OUT_MSG += "["; + L_OUT_MSG += param4; + L_OUT_MSG += "]="; + L_OUT_MSG += GetEntityProperty(param2, "param3"); + } + } + int L_PROCESSED = 1; + } + CallExternal(L_DEBUG_CALLER, "ext_debug_que", L_OUT_MSG); + if (!(L_EXTRA_EVENT != "none")) return; + L_EXTRA_EVENT(); + } + + void dbg_dump_array() + { + if ((DUMP_ARRAY_GLOBAL)) + { + string L_N_ELEMENTS = GetGlobalArrayLength(DUMP_ARRAY_NAME); + } + else + { + int L_N_ELEMENTS = int(DUMP_ARRAY_NAME.length()); + } + LogDebug("dbg_dump_array L_N_ELEMENTS of DUMP_ARRAY_NAME to GetEntityName(DUMP_ARRAY_CALLER)"); + for (int i = 0; i < L_N_ELEMENTS; i++) + { + dbg_dump_array_elements(); + } + } + + void dbg_dump_array_elements() + { + string CUR_IDX = i; + if ((DUMP_ARRAY_GLOBAL)) + { + string L_ELEMENT = GetGlobalArray(DUMP_ARRAY_NAME, int(CUR_IDX)); + } + else + { + string L_ELEMENT = DUMP_ARRAY_NAME[int(CUR_IDX)]; + } + string L_OUT_MSG = "#"; + L_OUT_MSG += int(CUR_IDX); + L_OUT_MSG += " "; + L_OUT_MSG += L_ELEMENT; + CallExternal(DUMP_ARRAY_CALLER, "ext_debug_que", L_OUT_MSG); + } + +} + +} diff --git a/scripts/angelscript/monsters/demonwing_giant_ice.as b/scripts/angelscript/monsters/demonwing_giant_ice.as new file mode 100644 index 00000000..205a36d8 --- /dev/null +++ b/scripts/angelscript/monsters/demonwing_giant_ice.as @@ -0,0 +1,924 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_flyer_grav.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class DemonwingGiantIce : CGameScript +{ + int ACTIVE_BABIES; + string ANIM_ATTACK; + string ANIM_BOOST; + string ANIM_CEILING_DETATCH; + string ANIM_CEILING_IDLE1; + string ANIM_CEILING_IDLE2; + string ANIM_CEILING_IDLE3; + string ANIM_CEILING_LAND; + string ANIM_DEATH; + string ANIM_DEATH_FLY_MODE; + string ANIM_DEATH_GROUND_MODE; + string ANIM_DIVE; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_FLY; + string ANIM_HOVER; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int AS_CUSTOM_UNSTUCK; + string ATTACK_BOMB; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string BABY_SCRIPT; + int BFLY_SUSPEND_FLY; + string BREATH_CL_SCRIPT; + int BREATH_FREEZE; + string BREATH_TARGS; + string B_MY_ANGLES; + string B_MY_ORG; + int CANT_TURN; + int CIELING_MODE; + int CLAW_ATTACK; + int DMG_BOMB; + int DMG_CLAW; + int DMG_SPIT; + int DOT_DMG; + string DOT_EFFECT; + int FIRE_BOMB_ATTACK; + string FIRE_BOMB_POS; + int FIRE_BREATH_ON; + int FLAP_STEP; + float FREQ_BOMB; + float FREQ_BOMB_CHECK; + float FREQ_HORROR_BOOST; + float FREQ_SPIT_CYCLE; + float FREQ_SWITCH_GROUND_MODE; + string GO_TO_SLEEP; + int GROUND_MODE; + string HEARD_VERIFY; + int ICELANCE_DOT; + int IS_FIRE_BOMB; + int IS_UNHOLY; + string KILL_BABBIES; + string MIN_FLINCH_DAMAGE; + string NEXT_BOMB_SCAN; + string NEXT_CIELING_FIDGET; + string NEXT_FLINCH; + string NEXT_GROUND_MODE; + string NEXT_HORROR_BOOST; + string NEXT_RAD_TELE; + string NEXT_SCAN; + string NEXT_SPIT_CYCLE; + int NO_BOMB; + int NO_CIELING_IDLE; + int NO_STUCK_CHECKS; + string NPCATK_TARGET; + int NPC_DID_DEATH; + int NPC_EXTRA_VALIDATIONS; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string NPC_IS_BOSS; + int NPC_NO_MOVE; + int NPC_PROPELL_SUSPEND; + int NPC_VALIDATE_HEARING; + int RADIAL_BIRD; + string RADIAL_CENTER; + string RADIAL_RANGE; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_CIELING_FIDGET; + string SOUND_DEATH; + string SOUND_FIRE_BREATH; + string SOUND_FLAP1; + string SOUND_FLAP2; + string SOUND_HOVER; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SPIT; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SPIT_FIRE_CYCLE; + string SPIT_MODE; + string SPIT_PROJECTILE; + int SPIT_TARGET; + int SUSPEND_AI; + string TARGET_LIST; + int TELED_OUT; + + DemonwingGiantIce() + { + ANIM_WALK = "Flying_cycler"; + ANIM_RUN = "Flying_cycler"; + ANIM_IDLE = "Hover_slow"; + ANIM_ATTACK = "Attack_claw"; + AS_CUSTOM_UNSTUCK = 1; + ANIM_CEILING_LAND = "Land_ceiling"; + ANIM_CEILING_DETATCH = "ceiling_detatch"; + ANIM_CEILING_IDLE1 = "Subtle_fidget"; + ANIM_CEILING_IDLE2 = "Preen_fidget"; + ANIM_CEILING_IDLE3 = "Swing_fidget"; + ANIM_FLY = "Flying_cycler"; + ANIM_HOVER = "Hover_slow"; + ANIM_BOOST = "Dive_cycler"; + ANIM_IDLE = "Hover_slow"; + FREQ_SPIT_CYCLE = 30.0; + ANIM_DEATH = "Death_fall_simple"; + ANIM_DEATH_FLY_MODE = "Death_fall_simple"; + ANIM_DEATH_GROUND_MODE = "Die_on_ground"; + ANIM_FLINCH1 = "Flinch_big"; + ANIM_FLINCH2 = "Flinch_small"; + AS_CUSTOM_UNSTUCK = 1; + ATTACK_BOMB = "Attack_bomb"; + ANIM_DIVE = "Dive_cycler"; + ICELANCE_DOT = 25; + BREATH_FREEZE = 1; + SPIT_PROJECTILE = "proj_icelance"; + BREATH_CL_SCRIPT = "monsters/demonwing_giant_ice_cl"; + NPC_EXTRA_VALIDATIONS = 1; + NPC_VALIDATE_HEARING = 1; + NO_BOMB = 1; + DOT_EFFECT = "effects/dot_cold"; + NPC_GIVE_EXP = 1000; + if (StringToLower(GetMapName()) == "shender_east") + { + NPC_GIVE_EXP = 3000; + NPC_IS_BOSS = 1; + } + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 180; + DMG_CLAW = 150; + DOT_DMG = 30; + FREQ_HORROR_BOOST = Random(3.0, 6.0); + DMG_SPIT = 75; + DMG_BOMB = 300; + FREQ_SWITCH_GROUND_MODE = 60.0; + SOUND_FLAP1 = "monsters/bat/flap_big1.wav"; + SOUND_FLAP2 = "monsters/bat/flap_big2.wav"; + SOUND_HOVER = "monsters/bat/flap_big.wav"; + SOUND_ATTACK1 = "monsters/demonwing/demonwing_atk1.wav"; + SOUND_ATTACK2 = "monsters/demonwing/demonwing_atk2.wav"; + SOUND_ATTACK3 = "monsters/demonwing/demonwing_atk3.wav"; + SOUND_ALERT1 = "monsters/demonwing/demonwing_bat1.wav"; + SOUND_ALERT2 = "monsters/demonwing/demonwing_bat2.wav"; + SOUND_ALERT1 = "monsters/demonwing/demonwing_bat1.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "monsters/demonwing/demonwing_hit1.wav"; + SOUND_PAIN2 = "monsters/demonwing/demonwing_hit2.wav"; + SOUND_DEATH = "monsters/demonwing/demonwing_dead.wav"; + SOUND_SPIT = "magic/ice_strike2.wav"; + Precache(SOUND_DEATH); + SOUND_CIELING_FIDGET = "monsters/demonwing/demonwing_slct.wav"; + FREQ_BOMB = 10.0; + FREQ_BOMB_CHECK = 1.0; + SOUND_FIRE_BREATH = "magic/cold_breath.wav"; + NO_CIELING_IDLE = 1; + NPC_HACKED_MOVE_SPEED = 400; + BABY_SCRIPT = "monsters/demonwing_ice"; + } + + void game_precache() + { + Precache(BABY_SCRIPT); + } + + void OnSpawn() override + { + SetName("Gigantic Icewing"); + SetModel("monsters/demonwing_large_fancy.mdl"); + SetHealth(5000); + SetWidth(64); + SetHeight(96); + SetRoam(true); + SetRace("demon"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(4); + SetDamageResistance("fire", 1.5); + SetDamageResistance("cold", 0.0); + SetDamageResistance("holy", 1.5); + IS_UNHOLY = 1; + SetProp(GetOwner(), "skin", 2); + if (!(true)) return; + FLAP_STEP = 0; + ScheduleDelayedEvent(2.0, "final_props"); + if ((NO_CIELING_IDLE)) + { + SetHearingSensitivity(8); + } + SPIT_FIRE_CYCLE = 0; + ACTIVE_BABIES = 0; + ScheduleDelayedEvent(0.1, "find_tele_point"); + if ((NO_CIELING_IDLE)) return; + npcatk_suspend_ai(2.0); + CIELING_MODE = 1; + ScheduleDelayedEvent(0.1, "stick_ceiling"); + } + + void find_tele_point() + { + RADIAL_CENTER = GetEntityOrigin(GetOwner()); + RADIAL_CENTER = "z"; + } + + void final_props() + { + MIN_FLINCH_DAMAGE = GetEntityMaxHealth(GetOwner()); + MIN_FLINCH_DAMAGE *= 0.05; + NPC_DID_DEATH = 1; + } + + void stick_ceiling() + { + SetRoam(false); + NO_STUCK_CHECKS = 1; + NPC_PROPELL_SUSPEND = 1; + CANT_TURN = 1; + NPC_NO_MOVE = 1; + SetGravity(0); + SetHearingSensitivity(4); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 800)); + BFLY_SUSPEND_FLY = 1; + CIELING_MODE = 1; + GROUND_MODE = 0; + PlayAnim("critical", ANIM_CEILING_LAND); + ANIM_IDLE = ANIM_CEILING_IDLE1; + ANIM_WALK = ANIM_CEILING_IDLE1; + ANIM_RUN = ANIM_CEILING_IDLE1; + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + NEXT_CIELING_FIDGET = GetGameTime(); + NEXT_CIELING_FIDGET += Random(3.0, 6.0); + } + + void set_telebird() + { + RADIAL_BIRD = 1; + RADIAL_RANGE = param1; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) + { + string L_TIME_SUSPENDED = NPC_LAST_SUSPEND_AI; + L_TIME_SUSPENDED += 5.0; + if (GetGameTime() > L_TIME_SUSPENDED) + { + } + npcatk_resume_ai(); + } + if ((RADIAL_BIRD)) + { + if ((TELED_OUT)) + { + if (GetGameTime() > NEXT_RAD_TELE) + { + } + string CHECK_AREA = FindEntitiesInSphere("enemy", RADIAL_RANGE); + if (CHECK_AREA != "none") + { + } + LogDebug("radialbird_tele_in"); + do_tele_in(); + TELE_IN_TARG = GetToken(CHECK_AREA, 0, ";"); + NEXT_RAD_TELE = GetGameTime(); + NEXT_RAD_TELE += 5.0; + } + else + { + if (GetGameTime() > NEXT_RAD_TELE) + { + } + int GET_NEW_TARG = 1; + if (m_hAttackTarget != "unset") + { + string RAD_TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (Distance(RAD_TARG_ORG, RADIAL_CENTER) <= RADIAL_RANGE) + { + int GET_NEW_TARG = 0; + } + } + if ((GET_NEW_TARG)) + { + string CHECK_AREA = FindEntitiesInSphere("enemy", RADIAL_RANGE); + if (CHECK_AREA != "none") + { + string CHECK_AREA = /* TODO: $sort_entlist */ $sort_entlist(CHECK_AREA, "range"); + npcatk_settarget(GetToken(CHECK_AREA, 0, ";")); + int GOT_NEW_TARG = 1; + } + if (!(GOT_NEW_TARG)) + { + } + NEXT_RAD_TELE = GetGameTime(); + NEXT_RAD_TELE += 5.0; + center_dash(); + ScheduleDelayedEvent(1.0, "do_tele_out"); + } + } + } + if (m_hAttackTarget == "unset") + { + if ((CIELING_MODE)) + { + SetGravity(0); + SetVelocity(GetOwner(), Vector3(0, 0, 800)); + if (GetGameTime() > NEXT_CIELING_FIDGET) + { + } + NEXT_CIELING_FIDGET = GetGameTime(); + NEXT_CIELING_FIDGET += Random(3.0, 6.0); + int RND_IDLE = RandomInt(1, 2); + if (RND_IDLE == 1) + { + PlayAnim("once", ANIM_CEILING_IDLE2); + EmitSound(GetOwner(), 0, SOUND_CIELING_FIDGET, 10); + } + if (RND_IDLE == 2) + { + PlayAnim("once", ANIM_CEILING_IDLE3); + } + } + if (!(CIELING_MODE)) + { + if (!(NO_CIELING_IDLE)) + { + } + if (GetGameTime() > GO_TO_SLEEP) + { + } + stick_ceiling(); + } + } + if (!(m_hAttackTarget != "unset")) return; + GO_TO_SLEEP = GetGameTime(); + GO_TO_SLEEP += 10.0; + if ((I_R_FROZEN)) return; + if ((CIELING_MODE)) + { + detatch_from_cieling(); + } + if (GetGameTime() > NEXT_SPIT_CYCLE) + { + if ((false)) + { + } + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + do_spit_cycle(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(NO_BOMB)) + { + if (GetGameTime() > NEXT_BOMB_SCAN) + { + if (!(SPIT_MODE)) + { + } + NEXT_BOMB_SCAN = GetGameTime(); + NEXT_BOMB_SCAN += FREQ_BOMB_SCAN; + string BOMB_POINT = GetEntityOrigin(GetOwner()); + BOMB_POINT = "z"; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + if (MY_Z > (BOMB_POINT).z) + { + MY_Z -= (BOMB_POINT).z; + if (MY_Z < 100) + { + } + int EXIT_SUB = 1; + } + else + { + string BOMB_Z = (BOMB_POINT).z; + BOMB_Z -= MY_Z; + if (MY_Z < 100) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + BOMB_TARGET = FindEntitiesInSphere("enemy", 128); + if (BOMB_TARGET != "none") + { + } + BOMB_TARGET = GetToken(BOMB_TARGET, 0, ";"); + if (GetGameTime() > NEXT_BOMB) + { + } + NEXT_BOMB = GetGameTime(); + NEXT_BOMB += FREQ_BOMB; + PlayAnim("critical", ATTACK_BOMB); + } + } + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_RANGE)) return; + if ((SPIT_MODE)) return; + if (!(GetGameTime() > NEXT_HORROR_BOOST)) return; + NEXT_HORROR_BOOST = GetGameTime(); + NEXT_HORROR_BOOST += FREQ_HORROR_BOOST; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + // svplaysound: svplaysound 0 10 SOUND_HOVER + EmitSound(0, 10, SOUND_HOVER); + PlayAnim("once", ANIM_BOOST); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 0)); + } + + void detatch_from_cieling() + { + NEXT_HORROR_BOOST = GetGameTime(); + NEXT_HORROR_BOOST += 6.0; + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + SetHearingSensitivity(8); + CANT_TURN = 0; + NPC_NO_MOVE = 0; + SetMoveDest(m_hAttackTarget); + SetGravity(0); + ScheduleDelayedEvent(3.0, "frame_detatch_done"); + npcatk_suspend_ai(1.0); + fly_mode(); + PlayAnim("critical", ANIM_CEILING_DETATCH); + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + CIELING_MODE = 0; + NEXT_GROUND_MODE = GetGameTime(); + NEXT_GROUND_MODE += FREQ_SWITCH_GROUND_MODE; + } + + void frame_detatch_done() + { + BFLY_SUSPEND_FLY = 0; + NO_STUCK_CHECKS = 0; + NPC_PROPELL_SUSPEND = 0; + SetRoam(true); + } + + void fly_mode() + { + SetGravity(0); + ANIM_IDLE = ANIM_HOVER; + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + SetMoveAnim(ANIM_FLY); + SetIdleAnim(ANIM_HOVER); + } + + void set_no_ceiling_idle() + { + NO_CIELING_IDLE = 1; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetGameTime() > NEXT_FLINCH) + { + if (param1 > MIN_FLINCH_DAMAGE) + { + } + NEXT_FLINCH = GetGameTime(); + NEXT_FLINCH += Random(10.0, 20.0); + npcatk_suspend_ai(1.0); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + if (RandomInt(1, 2) == 1) + { + PlayAnim("critical", ANIM_FLINCH1); + } + else + { + PlayAnim("critical", ANIM_FLINCH2); + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -300, 0)); + int EXIT_SUB = 1; + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((EXIT_SUB)) return; + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void frame_flap() + { + FLAP_STEP += 1; + if (FLAP_STEP == 1) + { + // svplaysound: svplaysound 0 10 SOUND_FLAP1 + EmitSound(0, 10, SOUND_FLAP1); + } + else + { + // svplaysound: svplaysound 0 10 SOUND_FLAP2 + EmitSound(0, 10, SOUND_FLAP2); + FLAP_STEP = 0; + } + } + + void frame_attack_claw() + { + if ((SPIT_MODE)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + CLAW_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW, 0.9, "slash"); + } + + void game_dodamage() + { + if ((CLAW_ATTACK)) + { + if (RandomInt(1, 4) == 1) + { + } + ApplyEffect(param2, DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + CLAW_ATTACK = 0; + if ((FIRE_BOMB_ATTACK)) + { + if ((param1)) + { + } + if (GetRelationship(param2) == "enemy") + { + } + ApplyEffect(param2, DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = FIRE_BOMB_POS; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 200))); + } + } + + void npc_stuck() + { + if (!(SUSPEND_AI)) + { + as_npcatk_suspend_ai(AS_WIGGLE_DURATION); + } + NPC_FORCED_MOVEDEST = 1; + string MY_ORG = GetEntityOrigin(GetOwner()); + string MOVE_DEST = MY_ORG; + AS_UNSTUCK_ANG += 36; + if (AS_UNSTUCK_ANG > 359) + { + AS_UNSTUCK_ANG -= 359; + } + MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, AS_UNSTUCK_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(MOVE_DEST); + PlayAnim("once", ANIM_RUN); + float RND_UD = Random(-200, 200); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, RND_UD)); + if (!(ACTIVE_BABIES > 0)) return; + KILL_BABBIES = FindEntitiesInSphere("ally", 128); + if (!(KILL_BABBIES != "none")) return; + for (int i = 0; i < GetTokenCount(KILL_BABBIES, ";"); i++) + { + remove_babbies(); + } + } + + void do_spit_cycle() + { + npcatk_suspend_ai(); + NPC_PROPELL_SUSPEND = 1; + ANIM_WALK = ANIM_HOVER; + ANIM_RUN = ANIM_HOVER; + ANIM_IDLE = ANIM_HOVER; + SetMoveAnim(ANIM_HOVER); + SetIdleAnim(ANIM_HOVER); + SPIT_FIRE_CYCLE += 1; + if (SPIT_FIRE_CYCLE == 1) + { + SPIT_MODE = 1; + do_spit_cycle_loop(); + ScheduleDelayedEvent(5.0, "end_spit_cycle"); + } + else + { + if (GetEntityRange(m_hAttackTarget) < 256) + { + SPIT_MODE = 1; + do_fire_breath_loop(); + FIRE_BREATH_ON = 1; + ClientEvent("new", "all", BREATH_CL_SCRIPT, GetEntityIndex(GetOwner()), 10.0); + FB_CL_SCRIPT_ID = "game.script.last_sent_id"; + EmitSound(GetOwner(), 0, SOUND_FIRE_BREATH, 10); + BREATH_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + fire_breath_loop(); + ScheduleDelayedEvent(10.0, "end_fire_breath"); + } + SPIT_FIRE_CYCLE = 0; + } + } + + void do_spit_cycle_loop() + { + if (!(SPIT_MODE)) return; + ScheduleDelayedEvent(2.0, "do_spit_cycle_loop"); + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + TARGET_LIST = FindEntitiesInSphere("enemy", 2048); + if (!(TARGET_LIST != "none")) return; + ScrambleTokens(TARGET_LIST, ";"); + SPIT_TARGET = 0; + for (int i = 0; i < GetTokenCount(TARGET_LIST, ";"); i++) + { + pick_target(); + } + if (!(IsEntityAlive(SPIT_TARGET))) return; + SetMoveDest(SPIT_TARGET); + EmitSound(GetOwner(), 0, SOUND_SPIT, 10); + PlayAnim("once", ANIM_ATTACK); + TossProjectile(SPIT_PROJECTILE, /* TODO: $relpos */ $relpos(0, 0, -16), SPIT_TARGET, 300, DMG_BOMB, 1, "none"); + CallExternal("ent_lastprojectile", "ext_lighten", 0.0); + } + + void pick_target() + { + if ((IsEntityAlive(SPIT_TARGET))) return; + string CUR_TARG = GetToken(TARGET_LIST, i, ";"); + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = GetEntityOrigin(CUR_TARG); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + SPIT_TARGET = CUR_TARG; + } + + void end_spit_cycle() + { + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + NPC_PROPELL_SUSPEND = 0; + SPIT_MODE = 0; + ANIM_IDLE = ANIM_HOVER; + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + SetMoveAnim(ANIM_FLY); + SetIdleAnim(ANIM_HOVER); + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + NEXT_BOMB_SCAN = GetGameTime(); + NEXT_BOMB_SCAN += FREQ_BOMB_SCAN; + center_dash(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((FIRE_BREATH_ON)) + { + ClientEvent("update", "all", FB_CL_SCRIPT_ID, "end_fx"); + } + } + + void frame_attack_bomb() + { + TossProjectile("proj_fire_bomb", /* TODO: $relpos */ $relpos(0, 0, -16), BOMB_TARGET, 300, DMG_BOMB, 1, "none"); + } + + void fire_breath_loop() + { + if (!(FIRE_BREATH_ON)) return; + ScheduleDelayedEvent(0.1, "fire_breath_loop"); + BREATH_YAW += 4; + if (BREATH_YAW > 359.99) + { + BREATH_YAW -= 359.99; + } + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_YAW, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_POS); + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 1.0; + BREATH_TARGS = FindEntitiesInSphere("enemy", 512); + if (!(BREATH_TARGS != "none")) return; + B_MY_ORG = GetEntityOrigin(GetOwner()); + B_MY_ANGLES = GetEntityAngles(GetOwner()); + for (int i = 0; i < GetTokenCount(BREATH_TARGS, ";"); i++) + { + breath_affect_targets(); + } + } + + void breath_affect_targets() + { + string CUR_TARG = GetToken(BREATH_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, B_MY_ORG, B_MY_ANGLES))) return; + if (!(BREATH_FREEZE)) + { + ApplyEffect(CUR_TARG, DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + else + { + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, 1000, 110)); + } + + void end_fire_breath() + { + FIRE_BREATH_ON = 0; + NPC_PROPELL_SUSPEND = 0; + SPIT_MODE = 0; + ANIM_IDLE = ANIM_HOVER; + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + SetMoveAnim(ANIM_FLY); + SetIdleAnim(ANIM_HOVER); + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + PlayAnim("once", "break"); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + center_dash(); + } + + void center_dash() + { + SetRoam(false); + PlayAnim("critical", ANIM_DIVE); + if ((PHLAME_BIRD)) + { + string CENTER_POINT = GetEntityProperty(MY_OWNER, "scriptvar"); + } + else + { + string CENTER_POINT = NPC_HOME_LOC; + } + SetMoveDest(CENTER_POINT); + LogDebug("center_dash CENTER_POINT"); + // svplaysound: svplaysound 0 10 SOUND_FLAP2 + EmitSound(0, 10, SOUND_FLAP2); + ScheduleDelayedEvent(0.1, "center_dash_boost"); + ScheduleDelayedEvent(1.5, "center_dash_stop"); + } + + void center_dash_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 1000, 300)); + } + + void center_dash_stop() + { + SetRoam(true); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, 0))); + } + + void ext_fire_bomb() + { + FIRE_BOMB_ATTACK = 1; + FIRE_BOMB_POS = param1; + IS_FIRE_BOMB = 1; + XDoDamage(FIRE_BOMB_POS, 250, DMG_BOMB, 0.1, GetOwner(), GetOwner(), "none", "blunt"); + ScheduleDelayedEvent(0.1, "fire_bomb_reset"); + } + + void fire_bomb_reset() + { + FIRE_BOMB_ATTACK = 0; + } + + void frame_flap_panic() + { + // svplaysound: svplaysound 0 10 SOUND_HOVER + EmitSound(0, 10, SOUND_HOVER); + ScheduleDelayedEvent(0.1, "frame_flap_panic2"); + } + + void frame_flap_panic2() + { + // svplaysound: svplaysound 0 10 SOUND_HOVER + EmitSound(0, 10, SOUND_HOVER); + } + + void do_tele_out() + { + ScheduleDelayedEvent(0.1, "spawn_babies"); + SetEntityOrigin(GetOwner(), Vector3(5000, 5000, 5000)); + ClientEvent("new", "all", "effects/sfx_sprite_in", NPC_HOME_LOC, "xflare1.spr", 20, 8.0); + TELED_OUT = 1; + } + + void spawn_babies() + { + if (!(ACTIVE_BABIES < 1)) return; + string SPAWN_POINT = NPC_HOME_LOC; + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(-96, 0, -64)); + SpawnNPC(BABY_SCRIPT, SPAWN_POINT, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 60.0 + ACTIVE_BABIES += 1; + ScheduleDelayedEvent(0.1, "spawn_babies2"); + } + + void spawn_babies2() + { + if (!(ACTIVE_BABIES < 2)) return; + string SPAWN_POINT = NPC_HOME_LOC; + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(96, 0, -64)); + SpawnNPC(BABY_SCRIPT, SPAWN_POINT, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 60.0 + ACTIVE_BABIES += 1; + ScheduleDelayedEvent(0.1, "spawn_babies3"); + } + + void spawn_babies3() + { + if (!(GetPlayerCount() > 2)) return; + if (!(ACTIVE_BABIES < 3)) return; + string SPAWN_POINT = NPC_HOME_LOC; + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 96, -64)); + SpawnNPC(BABY_SCRIPT, SPAWN_POINT, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 60.0 + ACTIVE_BABIES += 1; + ScheduleDelayedEvent(0.1, "spawn_babies4"); + } + + void spawn_babies4() + { + if (!(GetPlayerCount() > 3)) return; + if (!(ACTIVE_BABIES < 4)) return; + string SPAWN_POINT = NPC_HOME_LOC; + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, -96, -64)); + SpawnNPC(BABY_SCRIPT, SPAWN_POINT, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 60.0 + ACTIVE_BABIES += 1; + } + + void babbie_died() + { + ACTIVE_BABIES -= 1; + } + + void do_tele_in() + { + NEXT_RAD_TELE = GetGameTime(); + NEXT_RAD_TELE += 5.0; + SetEntityOrigin(GetOwner(), NPC_HOME_LOC); + TELED_OUT = 0; + npcatk_resume_ai(); + npcatk_settarget(TELE_IN_TARG); + ScheduleDelayedEvent(1.0, "double_resume"); + ClientEvent("new", "all", "effects/sfx_sprite_in", NPC_HOME_LOC, "xflare1.spr", 20, 8.0); + } + + void double_resume() + { + npcatk_resume_ai(); + SUSPEND_AI = 0; + npcatk_settarget(TELE_IN_TARG); + } + + void npc_targetvalidate() + { + if (!(RADIAL_BIRD)) return; + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (Distance(TARG_ORG, RADIAL_CENTER) > RADIAL_RANGE) + { + NPCATK_TARGET = "none"; + } + } + + void npc_validate_heard() + { + if (!(RADIAL_BIRD)) return; + string TARG_ORG = GetEntityOrigin(I_HEARD); + if (Distance(TARG_ORG, RADIAL_CENTER) > RADIAL_RANGE) + { + HEARD_VERIFY = 0; + } + } + + void remove_babbies() + { + string CUR_TARG = GetToken(KILL_BABBIES, i, ";"); + CallExternal(CUR_TARG, "npc_suicide"); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 monsters/bat/flap_big1.wav + EmitSound(0, 0, "monsters/bat/flap_big1.wav"); + // svplaysound: svplaysound 0 0 monsters/bat/flap_big2.wav + EmitSound(0, 0, "monsters/bat/flap_big2.wav"); + // svplaysound: svplaysound 0 0 monsters/bat/flap_big.wav + EmitSound(0, 0, "monsters/bat/flap_big.wav"); + } + +} + +} diff --git a/scripts/angelscript/monsters/demonwing_giant_ice_cl.as b/scripts/angelscript/monsters/demonwing_giant_ice_cl.as new file mode 100644 index 00000000..1668d02c --- /dev/null +++ b/scripts/angelscript/monsters/demonwing_giant_ice_cl.as @@ -0,0 +1,75 @@ +#pragma context server + +namespace MS +{ + +class DemonwingGiantIceCl : CGameScript +{ + string CLOUD_YAW; + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + fire_breath_loop(); + FX_DURATION("end_fx"); + } + + void fire_breath_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.2, "fire_breath_loop"); + CLOUD_YAW = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + ClientEffect("tempent", "sprite", "rain_mist.spr", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "setup_fire_cloud", "update_fire_cloud"); + ClientEffect("tempent", "sprite", "rain_mist.spr", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "setup_fire_cloud", "update_fire_cloud"); + ClientEffect("tempent", "sprite", "rain_mist.spr", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "setup_fire_cloud", "update_fire_cloud"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_fire_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < 2) + { + CUR_SCALE += 0.05; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + } + + void setup_fire_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.01); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.01); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_YAW, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/demonwing_ice.as b/scripts/angelscript/monsters/demonwing_ice.as new file mode 100644 index 00000000..609eab05 --- /dev/null +++ b/scripts/angelscript/monsters/demonwing_ice.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "monsters/demonwing_venom.as" + +namespace MS +{ + +class DemonwingIce : CGameScript +{ + int DMG_CLAW; + int DMG_SPIT; + int DOT_DMG; + string DOT_EFFECT; + int MONSTER_HP; + string MONSTER_NAME; + int MONSTER_SKIN_IDX; + int NPC_BASE_EXP; + string SOUND_SPIT; + string SPIT_PROJECTILE; + + DemonwingIce() + { + MONSTER_NAME = "Icewing"; + MONSTER_SKIN_IDX = 2; + SPIT_PROJECTILE = "proj_ice_bolt"; + DOT_EFFECT = "effects/dot_cold"; + MONSTER_HP = 1000; + DMG_CLAW = 100; + DOT_DMG = 20; + DMG_SPIT = 50; + NPC_BASE_EXP = 200; + SetDamageResistance("cold", 0.5); + SetDamageResistance("fire", 1.25); + SOUND_SPIT = "magic/ice_strike.wav"; + } + + void game_dynamically_created() + { + ScheduleDelayedEvent(0.05, "scale_down"); + } + + void scale_down() + { + SetProp(GetOwner(), "scale", 0.5); + } + +} + +} diff --git a/scripts/angelscript/monsters/demonwing_venom.as b/scripts/angelscript/monsters/demonwing_venom.as new file mode 100644 index 00000000..9350f823 --- /dev/null +++ b/scripts/angelscript/monsters/demonwing_venom.as @@ -0,0 +1,517 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_flyer_grav.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class DemonwingVenom : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BOOST; + string ANIM_CEILING_DETATCH; + string ANIM_CEILING_IDLE1; + string ANIM_CEILING_IDLE2; + string ANIM_CEILING_IDLE3; + string ANIM_CEILING_LAND; + string ANIM_DEATH; + string ANIM_DEATH_FLY_MODE; + string ANIM_DEATH_GROUND_MODE; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_FLY; + string ANIM_HOVER; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int AS_CUSTOM_UNSTUCK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BFLY_SUSPEND_FLY; + int CANT_TURN; + int CIELING_MODE; + int CLAW_ATTACK; + int DMG_CLAW; + int DMG_SPIT; + int DOT_DMG; + string DOT_EFFECT; + int FLAP_STEP; + float FREQ_HORROR_BOOST; + float FREQ_SPIT_CYCLE; + float FREQ_SWITCH_GROUND_MODE; + string GO_TO_SLEEP; + int GROUND_MODE; + int IS_SUMMONED; + string MIN_FLINCH_DAMAGE; + int MONSTER_HP; + string MONSTER_NAME; + int MONSTER_SKIN_IDX; + string MY_MASTER; + string NEXT_CIELING_FIDGET; + string NEXT_FLINCH; + string NEXT_GROUND_MODE; + string NEXT_HORROR_BOOST; + string NEXT_SPIT_CYCLE; + int NO_CIELING_IDLE; + int NO_STUCK_CHECKS; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int NPC_NO_MOVE; + int NPC_PROPELL_SUSPEND; + int NPC_SPRITE_IN; + int NPC_USES_HANDLE_EVENTS; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_CIELING_FIDGET; + string SOUND_DEATH; + string SOUND_FLAP1; + string SOUND_FLAP2; + string SOUND_HOVER; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SPIT; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SPIT_MODE; + string SPIT_PROJECTILE; + int SPIT_TARGET; + string TARGET_LIST; + + DemonwingVenom() + { + ANIM_ATTACK = "Attack_claw"; + ANIM_CEILING_LAND = "Land_ceiling"; + ANIM_CEILING_DETATCH = "ceiling_detatch"; + ANIM_CEILING_IDLE1 = "Subtle_fidget"; + ANIM_CEILING_IDLE2 = "Preen_fidget"; + ANIM_CEILING_IDLE3 = "Swing_fidget"; + ANIM_FLY = "Flying_cycler"; + ANIM_HOVER = "Hover"; + ANIM_BOOST = "Dive_cycler"; + ANIM_RUN = "Flying_cycler"; + ANIM_WALK = "Flying_cycler"; + ANIM_IDLE = "Hover_slow"; + FREQ_SPIT_CYCLE = 30.0; + ANIM_DEATH = "Death_fall_simple"; + ANIM_DEATH_FLY_MODE = "Death_fall_simple"; + ANIM_DEATH_GROUND_MODE = "Die_on_ground"; + ANIM_FLINCH1 = "Flinch_big"; + ANIM_FLINCH2 = "Flinch_small"; + AS_CUSTOM_UNSTUCK = 1; + DOT_EFFECT = "effects/dot_poison"; + SPIT_PROJECTILE = "proj_poison_spit2"; + NPC_GIVE_EXP = 600; + ATTACK_RANGE = 72; + ATTACK_HITRANGE = 72; + DMG_CLAW = 200; + DOT_DMG = 20; + FREQ_HORROR_BOOST = Random(3.0, 6.0); + DMG_SPIT = 50; + FREQ_SWITCH_GROUND_MODE = 60.0; + SOUND_FLAP1 = "monsters/bat/flap_big1.wav"; + SOUND_FLAP2 = "monsters/bat/flap_big2.wav"; + SOUND_HOVER = "monsters/bat/flap_big.wav"; + SOUND_ATTACK1 = "monsters/demonwing/demonwing_atk1.wav"; + SOUND_ATTACK2 = "monsters/demonwing/demonwing_atk2.wav"; + SOUND_ATTACK3 = "monsters/demonwing/demonwing_atk3.wav"; + SOUND_ALERT1 = "monsters/demonwing/demonwing_bat1.wav"; + SOUND_ALERT2 = "monsters/demonwing/demonwing_bat2.wav"; + SOUND_ALERT1 = "monsters/demonwing/demonwing_bat1.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "monsters/demonwing/demonwing_hit1.wav"; + SOUND_PAIN2 = "monsters/demonwing/demonwing_hit2.wav"; + SOUND_DEATH = "monsters/demonwing/demonwing_dead.wav"; + SOUND_SPIT = "bullchicken/bc_attack2.wav"; + Precache(SOUND_DEATH); + SOUND_CIELING_FIDGET = "monsters/demonwing/demonwing_slct.wav"; + MONSTER_NAME = "Demonwing"; + MONSTER_SKIN_IDX = 1; + MONSTER_HP = 3000; + } + + void OnSpawn() override + { + SetName(MONSTER_NAME); + SetModel("monsters/demonwing.mdl"); + SetProp(GetOwner(), "skin", MONSTER_SKIN_IDX); + SetHealth(MONSTER_HP); + SetWidth(32); + SetHeight(32); + SetRoam(true); + SetRace("demon"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(4); + if (!(true)) return; + FLAP_STEP = 0; + ScheduleDelayedEvent(2.0, "final_props"); + ScheduleDelayedEvent(0.01, "check_ceiling"); + } + + void check_ceiling() + { + if ((NO_CIELING_IDLE)) + { + SetHearingSensitivity(8); + } + if ((NO_CIELING_IDLE)) return; + npcatk_suspend_ai(2.0); + CIELING_MODE = 1; + ScheduleDelayedEvent(0.1, "stick_ceiling"); + } + + void final_props() + { + MIN_FLINCH_DAMAGE = GetEntityMaxHealth(GetOwner()); + MIN_FLINCH_DAMAGE *= 0.05; + } + + void stick_ceiling() + { + if ((NO_CIELING_IDLE)) return; + if ((IS_SUMMONED)) return; + SetRoam(false); + NO_STUCK_CHECKS = 1; + NPC_PROPELL_SUSPEND = 1; + CANT_TURN = 1; + NPC_NO_MOVE = 1; + SetGravity(0); + SetHearingSensitivity(4); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 800)); + BFLY_SUSPEND_FLY = 1; + CIELING_MODE = 1; + GROUND_MODE = 0; + PlayAnim("critical", ANIM_CEILING_LAND); + ANIM_IDLE = ANIM_CEILING_IDLE1; + ANIM_WALK = ANIM_CEILING_IDLE1; + ANIM_RUN = ANIM_CEILING_IDLE1; + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + NEXT_CIELING_FIDGET = GetGameTime(); + NEXT_CIELING_FIDGET += Random(3.0, 6.0); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((IS_SUMMONED)) + { + if (!(IsEntityAlive(MY_MASTER))) + { + } + npc_suicide(); + } + if (m_hAttackTarget == "unset") + { + if ((CIELING_MODE)) + { + SetGravity(0); + SetVelocity(GetOwner(), Vector3(0, 0, 800)); + if (GetGameTime() > NEXT_CIELING_FIDGET) + { + } + NEXT_CIELING_FIDGET = GetGameTime(); + NEXT_CIELING_FIDGET += Random(3.0, 6.0); + int RND_IDLE = RandomInt(1, 2); + if (RND_IDLE == 1) + { + PlayAnim("once", ANIM_CEILING_IDLE2); + EmitSound(GetOwner(), 0, SOUND_CIELING_FIDGET, 10); + } + if (RND_IDLE == 2) + { + PlayAnim("once", ANIM_CEILING_IDLE3); + } + } + if (!(CIELING_MODE)) + { + if (!(NO_CIELING_IDLE)) + { + } + if (GetGameTime() > GO_TO_SLEEP) + { + } + stick_ceiling(); + } + } + if (!(m_hAttackTarget != "unset")) return; + GO_TO_SLEEP = GetGameTime(); + GO_TO_SLEEP += 10.0; + if ((I_R_FROZEN)) return; + if ((CIELING_MODE)) + { + detatch_from_cieling(); + } + if (GetGameTime() > NEXT_SPIT_CYCLE) + { + if ((false)) + { + } + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + do_spit_cycle(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_RANGE)) return; + if ((SPIT_MODE)) return; + if (!(GetGameTime() > NEXT_HORROR_BOOST)) return; + NEXT_HORROR_BOOST = GetGameTime(); + NEXT_HORROR_BOOST += FREQ_HORROR_BOOST; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + // svplaysound: svplaysound 2 10 SOUND_FLAP + EmitSound(2, 10, SOUND_FLAP); + PlayAnim("once", ANIM_BOOST); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 0)); + } + + void detatch_from_cieling() + { + NEXT_HORROR_BOOST = GetGameTime(); + NEXT_HORROR_BOOST += 6.0; + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + SetHearingSensitivity(8); + CANT_TURN = 0; + NPC_NO_MOVE = 0; + SetMoveDest(m_hAttackTarget); + SetGravity(0); + ScheduleDelayedEvent(3.0, "frame_detatch_done"); + npcatk_suspend_ai(1.0); + fly_mode(); + PlayAnim("critical", ANIM_CEILING_DETATCH); + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + CIELING_MODE = 0; + NEXT_GROUND_MODE = GetGameTime(); + NEXT_GROUND_MODE += FREQ_SWITCH_GROUND_MODE; + } + + void frame_detatch_done() + { + BFLY_SUSPEND_FLY = 0; + NO_STUCK_CHECKS = 0; + NPC_PROPELL_SUSPEND = 0; + SetRoam(true); + } + + void fly_mode() + { + SetGravity(0); + ANIM_IDLE = ANIM_HOVER; + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + SetMoveAnim(ANIM_FLY); + SetIdleAnim(ANIM_HOVER); + } + + void set_no_ceiling_idle() + { + NO_CIELING_IDLE = 1; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetGameTime() > NEXT_FLINCH) + { + if (param1 > MIN_FLINCH_DAMAGE) + { + } + NEXT_FLINCH = GetGameTime(); + NEXT_FLINCH += Random(10.0, 20.0); + npcatk_suspend_ai(1.0); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + if (RandomInt(1, 2) == 1) + { + PlayAnim("critical", ANIM_FLINCH1); + } + else + { + PlayAnim("critical", ANIM_FLINCH2); + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -300, 0)); + int EXIT_SUB = 1; + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((EXIT_SUB)) return; + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void frame_flap() + { + FLAP_STEP += 1; + if (FLAP_STEP == 1) + { + // svplaysound: svplaysound 2 5 SOUND_FLAP1 + EmitSound(2, 5, SOUND_FLAP1); + } + else + { + // svplaysound: svplaysound 2 5 SOUND_FLAP2 + EmitSound(2, 5, SOUND_FLAP2); + FLAP_STEP = 0; + } + } + + void frame_attack_claw() + { + if ((SPIT_MODE)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + CLAW_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW, 0.9, "slash"); + } + + void game_dodamage() + { + if ((CLAW_ATTACK)) + { + if (RandomInt(1, 4) == 1) + { + } + ApplyEffect(param2, DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + CLAW_ATTACK = 0; + } + + void npc_stuck() + { + if (!(SUSPEND_AI)) + { + as_npcatk_suspend_ai(AS_WIGGLE_DURATION); + } + NPC_FORCED_MOVEDEST = 1; + string MOVE_DEST = GetEntityOrigin(GetOwner()); + AS_UNSTUCK_ANG += 36; + if (AS_UNSTUCK_ANG > 359) + { + AS_UNSTUCK_ANG -= 359; + } + MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, AS_UNSTUCK_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(MOVE_DEST); + PlayAnim("once", ANIM_RUN); + float RND_UD = Random(-200, 200); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, RND_UD)); + } + + void do_spit_cycle() + { + npcatk_suspend_ai(); + NPC_PROPELL_SUSPEND = 1; + ANIM_WALK = ANIM_HOVER; + ANIM_RUN = ANIM_HOVER; + ANIM_IDLE = ANIM_HOVER; + SetMoveAnim(ANIM_HOVER); + SetIdleAnim(ANIM_HOVER); + SPIT_MODE = 1; + do_spit_cycle_loop(); + ScheduleDelayedEvent(5.0, "end_spit_cycle"); + } + + void do_spit_cycle_loop() + { + if (!(SPIT_MODE)) return; + ScheduleDelayedEvent(1.0, "do_spit_cycle_loop"); + TARGET_LIST = FindEntitiesInSphere("enemy", 2048); + if (!(TARGET_LIST != "none")) return; + ScrambleTokens(TARGET_LIST, ";"); + SPIT_TARGET = 0; + for (int i = 0; i < GetTokenCount(TARGET_LIST, ";"); i++) + { + pick_target(); + } + if (!(IsEntityAlive(SPIT_TARGET))) return; + SetMoveDest(SPIT_TARGET); + // svplaysound: svplaysound 2 10 SOUND_SPIT + EmitSound(2, 10, SOUND_SPIT); + PlayAnim("once", ANIM_ATTACK); + TossProjectile(SPIT_PROJECTILE, /* TODO: $relpos */ $relpos(0, 0, -8), SPIT_TARGET, 300, DMG_SPIT, 1, "none"); + } + + void pick_target() + { + if ((IsEntityAlive(SPIT_TARGET))) return; + string CUR_TARG = GetToken(TARGET_LIST, i, ";"); + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = GetEntityOrigin(CUR_TARG); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + SPIT_TARGET = CUR_TARG; + } + + void end_spit_cycle() + { + npcatk_resume_ai(); + NPC_PROPELL_SUSPEND = 0; + SPIT_MODE = 0; + ANIM_IDLE = ANIM_HOVER; + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + SetMoveAnim(ANIM_FLY); + SetIdleAnim(ANIM_HOVER); + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + } + + void game_dynamically_created() + { + NO_CIELING_IDLE = 1; + MY_MASTER = param1; + IS_SUMMONED = 1; + NPC_USES_HANDLE_EVENTS = 1; + NPC_SPRITE_IN = 2; + ScheduleDelayedEvent(60.0, "baby_suicide"); + ScheduleDelayedEvent(0.1, "instant_target"); + } + + void instant_target() + { + string GET_TARGET = FindEntitiesInSphere("enemy", 1024); + if (!(GET_TARGET != "none")) return; + cycle_up("instant_target"); + string GET_TARGET = /* TODO: $sort_entlist */ $sort_entlist(GET_TARGET, "range"); + npcatk_settarget(GetToken(GET_TARGET, 0, ";")); + } + + void baby_suicide() + { + npc_suicide(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(IS_SUMMONED)) return; + CallExternal(MY_MASTER, "babbie_died"); + DeleteEntity(GetOwner(), true); // fade out + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 monsters/bat/flap_big1.wav + EmitSound(0, 0, "monsters/bat/flap_big1.wav"); + // svplaysound: svplaysound 0 0 monsters/bat/flap_big2.wav + EmitSound(0, 0, "monsters/bat/flap_big2.wav"); + // svplaysound: svplaysound 0 0 monsters/bat/flap_big.wav + EmitSound(0, 0, "monsters/bat/flap_big.wav"); + } + +} + +} diff --git a/scripts/angelscript/monsters/djinn_fire.as b/scripts/angelscript/monsters/djinn_fire.as new file mode 100644 index 00000000..84cbac2f --- /dev/null +++ b/scripts/angelscript/monsters/djinn_fire.as @@ -0,0 +1,327 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class DjinnFire : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HUNT; + int DID_ROAR_INTRO; + string DROP_ITEM1; + string DROP_ITEM1_CHANCE; + int FIRE_DAMAGE; + string FIRE_SCRIPT; + int FLEE_HEALTH; + int GOLD_BAGS; + int GOLD_BAGS_PPLAYER; + int GOLD_MAX_BAGS; + int GOLD_PER_BAG; + int GOLD_RADIUS; + int HUNT_AGRO; + int IS_UNHOLY; + int I_ATTACKED; + int MOVE_RANGE; + string MY_ICE_TROLL; + int NO_SUMMON; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int PUSH_CHANCE; + string PUSH_VEL; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_ROAR; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SUMMON; + string SOUND_WALK; + string SOUND_WALK1; + string SOUND_WALK2; + string SUMMON_NEXT_CHECK; + string SUMMON_SCRIPT; + string TORCH_LIGHT_SCRIPT; + + DjinnFire() + { + if (StringToLower(GetMapName()) == "demontemple") + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 3000; + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green Djinn Var-sul set " + BOSS + MODE); + } + } + else + { + NPC_GIVE_EXP = 800; + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 1.0; + IS_UNHOLY = 1; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "monsters/troll/trollpain.wav"; + SOUND_ATTACK1 = "monsters/troll/trollattack.wav"; + SOUND_ATTACK2 = "monsters/troll/trollattack.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK = "monsters/troll/walk.wav"; + SOUND_SUMMON = "ambience/particle_suck2.wav"; + SOUND_ROAR = "monsters/troll/trollidle2.wav"; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + Precache(SOUND_STRUCK1); + Precache(SOUND_STRUCK2); + Precache(SOUND_ATTACK1); + Precache(SOUND_ATTACK2); + Precache(SOUND_WALK); + Precache(SOUND_DEATH); + Precache(SOUND_SUMMON); + Precache(SOUND_ROAR); + PUSH_CHANCE = 10; + GOLD_BAGS = 1; + GOLD_BAGS_PPLAYER = 3; + GOLD_PER_BAG = 50; + GOLD_RADIUS = 64; + GOLD_MAX_BAGS = 32; + ANIM_IDLE = "idle0"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "double_punch"; + ANIM_DEATH = "die_fall"; + ATTACK_RANGE = 125; + ATTACK_HITRANGE = 200; + CAN_FLINCH = 0; + MOVE_RANGE = 100; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_FLEE = 1; + FLEE_HEALTH = 1; + SUMMON_SCRIPT = "monsters/troll_fire"; + TORCH_LIGHT_SCRIPT = "items/item_djinn_fire"; + FIRE_DAMAGE = "$rand(50,150)"; + Precache(TORCH_LIGHT_SCRIPT); + } + + void OnSpawn() override + { + SetHealth(4000); + SetWidth(100); + SetHeight(100); + SetRace("demon"); + SetName("Fire Djinn Val-sul"); + SetRoam(false); + SetDamageResistance("all", 0.7); + SetDamageResistance("fire", 0.0); + SetDamageResistance("lightning", 0.5); + SetHearingSensitivity(10); + SetDamageResistance("cold", 1.25); + SetDamageResistance("holy", 0.25); + SetModel("monsters/troll.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetActionAnim(ANIM_ATTACK); + ScheduleDelayedEvent(10.0, "summon_firetroll"); + SetGlobalVar("ICE_TROLL_DEAD", 1); + troll_spawn(); + ClientEvent("persist", "all", TORCH_LIGHT_SCRIPT, GetEntityIndex(GetOwner()), 1); + FIRE_SCRIPT = "game.script.last_sent_id"; + Effect("glow", GetOwner(), Vector3(128, 50, 4), 64, -1, 0); + Precache("monsters/firetroll.mdl"); + if (RandomInt(1, 16) < "game.playersnb") + { + DROP_ITEM1 = "item_eh"; + DROP_ITEM1_CHANCE = 100; + } + } + + void attack_1() + { + I_ATTACKED = 1; + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 30, 10); + if (GetEntityRange(HUNT_LASTTARGET) <= ATTACK_HITRANGE) + { + XDoDamage(HUNT_LASTTARGET, "direct", Random(45, 80), 0.75, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:swing"); + } + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = "hit_down"; + } + attack_sound(); + } + + void attack_2() + { + I_ATTACKED = 1; + if (GetEntityRange(HUNT_LASTTARGET) <= ATTACK_HITRANGE) + { + XDoDamage(HUNT_LASTTARGET, "direct", Random(80, 200), 0.75, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:swing"); + } + ANIM_ATTACK = "double_punch"; + if (RandomInt(1, PUSH_CHANCE) == 1) + { + ScheduleDelayedEvent(0.1, "rawr"); + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + } + attack_sound(); + } + + void swing_dodamage() + { + if (!(param1)) return; + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/dot_fire", 3, GetEntityIndex(GetOwner()), FIRE_DAMAGE); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK2}; + EmitSound(GetOwner(), CHAN_BODY, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_sound() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK1, 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", FIRE_SCRIPT); + if (MY_ICE_TROLL != "MY_ICE_TROLL") + { + DeleteEntity(MY_ICE_TROLL, true); // fade out + } + ClientEvent("remove", "all", SCRIPT_ID); + ClientEvent("remove", TORCH_LIGHT_SCRIPT); + ClientEvent("remove", "all", TORCH_LIGHT_SCRIPT); + } + + void summon_firetroll() + { + if ((NO_SUMMON)) return; + ScheduleDelayedEvent(10.0, "summon_firetroll"); + if ((IsEntityAlive(MY_ICE_TROLL))) return; + int EXIT_SUB = 0; + if (!(SUMMON_NEXT_CHECK)) + { + SUMMON_NEXT_CHECK = 1; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(false)) return; + if (MY_ICE_TROLL != "MY_ICE_TROLL") + { + DeleteEntity(MY_ICE_TROLL, true); // fade out + } + SetVolume(10); + EmitSound(GetOwner(), SOUND_SUMMON); + string SUMMON_POS = /* TODO: $relpos */ $relpos(0, 0, 0); + PlayAnim("critical", "throw_rock"); + string SUMMON_POINT1 = FindEntityByName("summon_point1"); + if (((SUMMON_POINT1 !is null))) + { + string SUMMON_POS = GetEntityOrigin(SUMMON_POINT1); + } + if (!((SUMMON_POINT1 !is null))) + { + SetSolid("none"); + } + SpawnNPC(SUMMON_SCRIPT, SUMMON_POS, ScriptMode::Legacy); + ScheduleDelayedEvent(1, "solidify_djinn"); + MY_ICE_TROLL = GetEntityIndex(m_hLastCreated); + if (I_AM_BEAR == 1) + { + CallExternal(MY_ICE_TROLL, "bearguard"); + } + SUMMON_NEXT_CHECK = 0; + if (!(IS_FLEEING)) + { + npcatk_flee(MY_ICE_TROLL, 275, 3); + } + } + + void solidify_djinn() + { + string MY_LOC = GetEntityOrigin(GetOwner()); + string MY_PET_LOC = GetEntityOrigin(MY_ICE_TROLL); + float PET_DISTANCE = Distance(MY_LOC, MY_PET_LOC); + if (PET_DISTANCE > 80) + { + SetSolid("box"); + } + if (PET_DISTANCE <= 80) + { + ScheduleDelayedEvent(0.25, "solidify_djinn"); + } + } + + void npc_targetsighted() + { + if ((DID_ROAR_INTRO)) return; + SetVolume(10); + EmitSound(GetOwner(), SOUND_ROAR); + DID_ROAR_INTRO = 1; + } + + void rawr() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_ROAR); + } + + void my_pet_stuck() + { + DeleteEntity(MY_ICE_TROLL, true); // fade out + SetVolume(10); + EmitSound(GetOwner(), SOUND_SUMMON); + string SUMMON_POS = /* TODO: $relpos */ $relpos(0, 0, 0); + AS_ATTACKING = 20; + PlayAnim("critical", "throw_rock"); + SetSolid("none"); + SpawnNPC(SUMMON_SCRIPT, SUMMON_POS, ScriptMode::Legacy); + ScheduleDelayedEvent(1.0, "solidify_djinn"); + MY_ICE_TROLL = GetEntityIndex(m_hLastCreated); + SUMMON_NEXT_CHECK = 0; + if (!(IS_FLEEING)) + { + npcatk_flee(MY_ICE_TROLL, 275, 3); + } + } + + void stomp_1() + { + EmitSound(GetOwner(), 2, SOUND_WALK1, 8); + } + + void stomp_2() + { + EmitSound(GetOwner(), 2, SOUND_WALK2, 8); + } + + void cycle_up() + { + if ((CYCLED_UP)) return; + SetRoam(true); + } + + void set_no_summons() + { + NO_SUMMON = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/djinn_ice.as b/scripts/angelscript/monsters/djinn_ice.as new file mode 100644 index 00000000..e890c968 --- /dev/null +++ b/scripts/angelscript/monsters/djinn_ice.as @@ -0,0 +1,446 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class DjinnIce : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SUMMON; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_FLINCH; + int CUR_SUMMON_POS; + int DID_ROAR_INTRO; + int FLEE_HEALTH; + int I_ATTACKED; + int LOOP_COUNT; + int MELEE_ATTACK; + int MOVE_RANGE; + string MY_ICE_TROLL; + string MY_PET_CLOC_NEW; + int NO_STEP_ADJ; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int N_SUMMON_POS; + string PUSH_VEL; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_ROAR; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SUMMON; + string SOUND_WALK; + string SUMMON_NEXT_CHECK; + string SUMMON_POS; + string SUMMON_POS1; + string SUMMON_POS2; + string SUMMON_POS3; + string SUMMON_POS4; + string SUMMON_POS5; + int TOO_CLOSE; + string TORCH_LIGHT_SCRIPT; + string WIN_PRIZE; + + DjinnIce() + { + TOO_CLOSE = 100; + if ((StringToLower(GetMapName())).findFirst("keledrosprelude") == 0) + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 1000; + if ((G_DEVELOPER_MODE)) + { + // TODO: chatlog Djinn Ji-ax set BOSS MODE + } + } + else + { + NPC_GIVE_EXP = 500; + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 1.0; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "monsters/troll/trollpain.wav"; + SOUND_ATTACK1 = "monsters/troll/trollattack.wav"; + SOUND_ATTACK2 = "monsters/troll/trollattack.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK = "monsters/troll/walk.wav"; + SOUND_SUMMON = "ambience/particle_suck2.wav"; + SOUND_ROAR = "monsters/troll/trollidle2.wav"; + Precache(SOUND_STRUCK1); + Precache(SOUND_STRUCK2); + Precache(SOUND_ATTACK1); + Precache(SOUND_ATTACK2); + Precache(SOUND_WALK); + Precache(SOUND_DEATH); + Precache(SOUND_SUMMON); + Precache(SOUND_ROAR); + ANIM_SUMMON = "throw_rock"; + ANIM_IDLE = "idle0"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "double_punch"; + ANIM_DEATH = "die_fall"; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 200; + CAN_FLINCH = 0; + MOVE_RANGE = 70; + CAN_FLEE = 1; + FLEE_HEALTH = 1; + NO_STEP_ADJ = 1; + TORCH_LIGHT_SCRIPT = "items/item_djinn_light"; + Precache("weapons/cbar_hitbod1.wav"); + Precache("monsters/troll/trollpain.wav"); + Precache("monsters/troll/trollpain.wav"); + Precache("monsters/troll/trollpain.wav"); + Precache("monsters/troll/trollattack.wav"); + Precache("monsters/troll/trollattack.wav"); + Precache("monsters/troll/trolldeath.wav"); + Precache("monsters/troll/trollidle.wav"); + Precache("monsters/troll/step1.wav"); + Precache("monsters/troll/step2.wav"); + Precache("monsters/troll/trollidle.wav"); + Precache("monsters/icetroll.mdl"); + Precache("doors/aliendoor3.wav"); + CUR_SUMMON_POS = 0; + N_SUMMON_POS = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(10.0); + if ((CYCLED_UP)) + { + } + if (STUCK_COUNT == 0) + { + } + CUR_SUMMON_POS += 1; + if (CUR_SUMMON_POS > 5) + { + CUR_SUMMON_POS = 0; + } + if (CUR_SUMMON_POS == 1) + { + SUMMON_POS1 = GetMonsterProperty("origin"); + } + if (CUR_SUMMON_POS == 2) + { + SUMMON_POS2 = GetMonsterProperty("origin"); + } + if (CUR_SUMMON_POS == 3) + { + SUMMON_POS3 = GetMonsterProperty("origin"); + } + if (CUR_SUMMON_POS == 4) + { + SUMMON_POS4 = GetMonsterProperty("origin"); + } + if (CUR_SUMMON_POS == 5) + { + SUMMON_POS5 = GetMonsterProperty("origin"); + } + if (CUR_SUMMON_POS > N_SUMMON_POS) + { + N_SUMMON_POS += 1; + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(1.0); + if ((IsEntityAlive(MY_ICE_TROLL))) + { + } + if (Distance(MY_ICE_TROLL, GetMonsterProperty("origin")) < TOO_CLOSE) + { + AddVelocity(MY_ICE_TROLL, /* TODO: $relvel */ $relvel(0, 800, 10)); + } + if (Distance(MY_ICE_TROLL, GetMonsterProperty("origin")) > TOO_CLOSE) + { + if ((IsEntityAlive(HUNT_LASTTARGET))) + { + } + CallExternal(MY_ICE_TROLL, "ext_attack_master_target", HUNT_LASTTARGET); + } + } + + void game_precache() + { + Precache("items/item_djinn_light"); + } + + void OnSpawn() override + { + SetHealth(3000); + SetWidth(60); + SetHeight(100); + SetRace("orc"); + SetName("Ice Djinn"); + SetRoam(true); + SetDamageResistance("all", 0.7); + SetDamageResistance("fire", 1.5); + SetDamageResistance("lightning", 1.5); + SetDamageResistance("cold", 0.0); + SetDamageResistance("holy", 0.2); + SetModel("monsters/troll.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetActionAnim(ANIM_ATTACK); + ScheduleDelayedEvent(20, "summon_icetroll"); + SetHearingSensitivity(10); + SetGlobalVar("ICE_TROLL_DEAD", 1); + Precache("monsters/troll_ice"); + if (RandomInt(1, 8) == 1) + { + WIN_PRIZE = 1; + } + troll_spawn(); + ClientEvent("persist", "all", TORCH_LIGHT_SCRIPT, GetEntityIndex(GetOwner()), 1); + Effect("glow", GetOwner(), Vector3(4, 50, 128), 64, -1, 0); + } + + void attack_1() + { + I_ATTACKED = 1; + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 30, 10); + DoDamage(m_hLastSeen, ATTACK_RANGE, Random(4.5, 6.0), ATTACK_HITCHANCE, "slash"); + MELEE_ATTACK = 1; + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = "hit_down"; + } + attack_sound(); + } + + void attack_2() + { + I_ATTACKED = 1; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(40, 70), 0.75, "slash"); + MELEE_ATTACK = 1; + ANIM_ATTACK = "double_punch"; + if (RandomInt(1, 10) == 1) + { + ScheduleDelayedEvent(0.1, "rawr"); + if (GetEntityIndex(m_hLastStruckByMe) != GetEntityIndex(GetOwner())) + { + } + if (GetEntityRange(ENTITY_ENEMY) < ATTACK_HITRANGE) + { + } + ApplyEffect(ENTITY_ENEMY, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + } + attack_sound(); + } + + void bite1() + { + I_ATTACKED = 1; + DoDamage(m_hLastSeen, ATTACK_RANGE, Random(4.5, 6.0), ATTACK_HITCHANCE, "slash"); + MELEE_ATTACK = 1; + } + + void struck() + { + SetVolume(10); + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_sound() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_ATTACK1); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (MY_ICE_TROLL != "MY_ICE_TROLL") + { + DeleteEntity(MY_ICE_TROLL, true); // fade out + } + ClientEvent("remove", "all", SCRIPT_ID); + bm_gold_spew(10, 4, 100, 1, 20); + } + + void summon_icetroll() + { + ScheduleDelayedEvent(15, "summon_icetroll"); + if ((IsEntityAlive(MY_ICE_TROLL))) return; + int EXIT_SUB = 0; + if (!(SUMMON_NEXT_CHECK)) + { + SUMMON_NEXT_CHECK = 1; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(false)) return; + if (MY_ICE_TROLL != "MY_ICE_TROLL") + { + DeleteEntity(MY_ICE_TROLL, true); // fade out + } + SetVolume(10); + EmitSound(GetOwner(), SOUND_SUMMON); + npcatk_suspend_ai(1.0); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_SUMMON); + SetSolid("none"); + find_summon_pos(); + SpawnNPC("monsters/summon/ibarrier", SUMMON_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 96, 1 + SpawnNPC("monsters/summon/ibarrier", GetMonsterProperty("origin"), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 60, 1 + ScheduleDelayedEvent(0.25, "act_make_summon"); + ScheduleDelayedEvent(1, "solidify_djinn"); + SUMMON_NEXT_CHECK = 0; + if (!(IS_FLEEING)) + { + if (SUMMON_POS == GetMonsterProperty("origin")) + { + } + npcatk_flee(MY_ICE_TROLL, 275, 3); + } + } + + void solidify_djinn() + { + string MY_LOC = GetEntityOrigin(GetOwner()); + string MY_PET_LOC = GetEntityOrigin(MY_ICE_TROLL); + float PET_DISTANCE = Distance(MY_LOC, MY_PET_LOC); + if (PET_DISTANCE > 80) + { + SetSolid("box"); + } + if (PET_DISTANCE <= 80) + { + ScheduleDelayedEvent(0.25, "solidify_djinn"); + } + } + + void npc_targetsighted() + { + if ((DID_ROAR_INTRO)) return; + SetVolume(10); + EmitSound(GetOwner(), SOUND_ROAR); + DID_ROAR_INTRO = 1; + ScheduleDelayedEvent(0.5, "walker_go"); + } + + void walker_go() + { + SetRepeatDelay(2.0); + int DID_ATTACK = 0; + if ((I_ATTACKED)) + { + int DID_ATTACK = 1; + } + if ((DID_ATTACK)) + { + I_ATTACKED = 0; + } + MY_PET_CLOC_NEW = GetEntityOrigin(MY_ICE_TROLL); + if ((DID_ATTACK)) return; + if (!(HUNT_LASTTARGET != �NONE�)) return; + if (GetEntityDist(HUNT_LASTTARGET) > MOVE_RANGE) + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_WALK); + } + } + + void rawr() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_ROAR); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(MELEE_ATTACK)) return; + if (RandomInt(1, 4) == 1) + { + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/dot_cold", 5, GetOwner(), RandomInt(13, 25), "none"); + } + MELEE_ATTACK = 0; + } + + void my_pet_stuck() + { + DeleteEntity(MY_ICE_TROLL, true); // fade out + SetVolume(10); + EmitSound(GetOwner(), SOUND_SUMMON); + npcatk_suspend_ai(1.0); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_SUMMON); + SetSolid("none"); + SetEntityOrigin(MY_ICE_TROLL, GetMonsterProperty("origin")); + AddVelocity(MY_ICE_TROLL, /* TODO: $relpos */ $relpos(0, 800, 10)); + SpawnNPC("monsters/summon/ibarrier", GetMonsterProperty("origin"), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 60, 1 + CallExternal(MY_ICE_TROLL, "npcatk_flee", GetEntityIndex(GetOwner()), 100, 10.0, "master_told_me_to"); + ScheduleDelayedEvent(1, "solidify_djinn"); + SUMMON_NEXT_CHECK = 0; + } + + void find_summon_pos() + { + LOOP_COUNT = 0; + SUMMON_POS = GetMonsterProperty("origin"); + for (int i = 0; i < N_SUMMON_POS; i++) + { + find_summon_pos_loop(); + } + } + + void find_summon_pos_loop() + { + LOOP_COUNT += 1; + if (LOOP_COUNT == 1) + { + string CHECK_POS = SUMMON_POS1; + } + if (LOOP_COUNT == 2) + { + string CHECK_POS = SUMMON_POS2; + } + if (LOOP_COUNT == 3) + { + string CHECK_POS = SUMMON_POS3; + } + if (LOOP_COUNT == 4) + { + string CHECK_POS = SUMMON_POS4; + } + if (LOOP_COUNT == 5) + { + string CHECK_POS = SUMMON_POS5; + } + if (Distance(GetMonsterProperty("origin"), CHECK_POS) > TOO_CLOSE) + { + SUMMON_POS = CHECK_POS; + } + if (Distance(GetMonsterProperty("origin"), CHECK_POS) > Distance(GetMonsterProperty("origin"), SUMMON_POS)) + { + SUMMON_POS = CHECK_POS; + } + } + + void act_make_summon() + { + SpawnNPC("monsters/troll_ice", SUMMON_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + MY_ICE_TROLL = GetEntityIndex(m_hLastCreated); + } + +} + +} diff --git a/scripts/angelscript/monsters/djinn_lightning.as b/scripts/angelscript/monsters/djinn_lightning.as new file mode 100644 index 00000000..f1ca7e81 --- /dev/null +++ b/scripts/angelscript/monsters/djinn_lightning.as @@ -0,0 +1,341 @@ +#pragma context server + +#include "monsters/swamp_ogre.as" + +namespace MS +{ + +class DjinnLightning : CGameScript +{ + int AM_BOUNCING; + string BEAM_ID; + string BEAM_LIST; + string BEAM_TARGET_LIST; + int BOUNCE_COUNT; + int CHAIN_COUNT; + int CHAIN_ON; + int CHANCE_SHOCK; + int CUR_BEAM; + int CYCLES_ON; + float DMG_CHAIN; + string FINGER_ADJ; + float FREQ_BIGJUMP; + float FREQ_CHAIN; + float FREQ_CRAZY; + int GOLD_BAGS; + int GOLD_BAGS_PPLAYER; + int GOLD_MAX_BAGS; + int GOLD_PER_BAG; + int GOLD_RADIUS; + float HEADBUTT_FREQ; + int IS_UNHOLY; + string NPC_BASE_EXP; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_FORCED_MOVEDEST; + string NPC_IS_BOSS; + int RUN_STEP; + string SOUND_BCHARGE; + string SOUND_BFIRE; + string SOUND_LOOP; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SWIPE_ATTACK; + + DjinnLightning() + { + if (StringToLower(GetMapName()) == "cleicert") + { + NPC_IS_BOSS = 1; + NPC_BASE_EXP = 4000; + } + else + { + NPC_BASE_EXP = 1000; + } + NPC_BOSS_REGEN_RATE = 0.05; + NPC_BOSS_RESTORATION = 0.25; + IS_UNHOLY = 1; + FREQ_CRAZY = Random(20, 30); + FREQ_CHAIN = Random(10, 20); + FREQ_BIGJUMP = Random(10, 20); + CHANCE_SHOCK = 30; + DMG_CHAIN = Random(2, 6); + FINGER_ADJ = "$relpos($vec(0,MY_YAW,0),$vec(0,30,54))"; + SOUND_BCHARGE = "magic/bolt_start.wav"; + SOUND_LOOP = "magic/bolt_loop.wav"; + SOUND_BFIRE = "magic/bolt_end.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + HEADBUTT_FREQ = 20.0; + GOLD_BAGS = 1; + GOLD_BAGS_PPLAYER = 3; + GOLD_PER_BAG = 25; + GOLD_RADIUS = 128; + GOLD_MAX_BAGS = 20; + } + + void OnSpawn() override + { + if (StringToLower(GetMapName()) == "cleicert") + { + SetName("Lightning Djinn Ji'Azolt"); + } + if (StringToLower(GetMapName()) != "cleicert") + { + SetName("Lightning Djinn"); + } + SetHealth(3000); + SetRace("demon"); + SetRoam(true); + SetGold(0); + SetModel(MONSTER_MODEL); + SetMoveAnim(ANIM_WALK); + SetHeight(64); + SetWidth(32); + SetHearingSensitivity(8); + SetBloodType("green"); + SetIdleAnim(ANIM_IDLE); + SetProp(GetOwner(), "skin", 4); + RUN_STEP = 0; + ScheduleDelayedEvent(1.0, "idle_sounds"); + CUR_BEAM = 0; + BEAM_LIST = ""; + ScheduleDelayedEvent(0.1, "init_beam1"); + } + + void OnPostSpawn() override + { + SetDamageResistance("all", 0.7); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("holy", 0.25); + } + + void cycle_up() + { + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + FREQ_CHAIN("do_lightning"); + FREQ_CRAZY("go_crazy"); + FREQ_BIGJUMP("do_big_jump"); + } + + void go_crazy() + { + npcatk_suspend_ai(); + PlayAnim("critical", "idle2"); + SetIdleAnim("idle2"); + SetMoveAnim("idle2"); + EmitSound(GetOwner(), 0, SOUND_BCHARGE, 10); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 128, 0.9, 0.9); + ScheduleDelayedEvent(1.1, "go_crazy2"); + } + + void go_crazy2() + { + EmitSound(GetOwner(), 0, SOUND_BFIRE, 10); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "movetype", "const.movetype.bounce"); + AM_BOUNCING = 1; + BOUNCE_COUNT = 0; + bounce_loop(); + ScheduleDelayedEvent(1.0, "resume_attack"); + } + + void resume_attack() + { + npcatk_resume_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + } + + void bounce_loop() + { + BOUNCE_COUNT += 1; + if (BOUNCE_COUNT == 20) + { + SetProp(GetOwner(), "movetype", "const.movetype.step"); + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + FREQ_CRAZY("go_crazy"); + } + if (!(BOUNCE_COUNT < 20)) return; + ScheduleDelayedEvent(0.5, "bounce_loop"); + int TOSS_DIR = RandomInt(-600, 600); + int TOSS_HOR = RandomInt(-600, 600); + int TOSS_VER = RandomInt(-600, 800); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(TOSS_DIR, TOSS_HOR, TOSS_VER)); + } + + void do_lightning() + { + CHAIN_ON = 1; + CHAIN_COUNT = 0; + npcatk_suspend_ai(); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 128, 3, 1); + CUR_BEAM = 0; + BEAM_TARGET_LIST = FindEntitiesInSphere("enemy", 1024); + LogDebug("BEAM_TARGET_LIST"); + for (int i = 0; i < GetTokenCount(BEAM_TARGET_LIST, ";"); i++) + { + set_beam(); + } + ScheduleDelayedEvent(0.1, "chain_lightning"); + } + + void chain_lightning() + { + CHAIN_COUNT += 1; + if (CHAIN_COUNT < 30) + { + SetIdleAnim("idle2"); + SetMoveAnim("idle2"); + } + if (CHAIN_COUNT == 30) + { + CHAIN_ON = 0; + for (int i = 0; i < GetTokenCount(BEAM_LIST, ";"); i++) + { + beams_off(); + } + ScheduleDelayedEvent(1.0, "resume_attack"); + FREQ_CHAIN("do_lightning"); + } + if (!(CHAIN_COUNT < 30)) return; + ScheduleDelayedEvent(0.1, "chain_lightning"); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + for (int i = 0; i < GetTokenCount(BEAM_TARGET_LIST, ";"); i++) + { + push_targets(); + } + } + + void push_targets() + { + string CUR_TARGET = GetToken(BEAM_TARGET_LIST, i, ";"); + if (!(GetEntityName(CUR_TARGET) != "Npc")) return; + if (!(GetEntityName(CUR_TARGET) != "0")) return; + string TARG_ORG = GetEntityOrigin(BEAM_TARGET_LIST); + string TRACE_LINE = TraceLine(GetMonsterProperty("origin"), TARG_ORG); + if (!(TRACE_LINE == TARG_ORG)) return; + string FIN_DMG = DMG_CHAIN; + string RESIST_FLOAT = /* TODO: $get_takedmg */ $get_takedmg(CUR_TARGET, "lightning"); + FIN_DMG *= RESIST_FLOAT; + DamageEntity(CUR_TARGET, GetOwner()); + AddVelocity(CUR_TARGET, Vector3(0, -110, 130)); + } + + void game_dodamage() + { + if (!(param1)) return; + if ((SWIPE_ATTACK)) + { + SWIPE_ATTACK = 0; + if (RandomInt(1, 100) < CHANCE_SHOCK) + { + } + EmitSound(GetOwner(), 0, SOUND_BFIRE, 10); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 64, 1, 1); + ApplyEffect(param2, "effects/dot_lightning", RandomInt(2, 5), GetEntityIndex(GetOwner()), 10); + } + if ((CHAIN_ON)) + { + AddVelocity(param2, Vector3(0, -50, 50)); + } + } + + void set_beam() + { + string CUR_BEAM_ID = GetToken(BEAM_LIST, CUR_BEAM, ";"); + string CUR_TARGET = GetToken(BEAM_TARGET_LIST, i, ";"); + if (!(GetEntityName(CUR_TARGET) != "Npc")) return; + if (!(GetEntityName(CUR_TARGET) != "0")) return; + if (!(CUR_BEAM_ID != 0)) return; + LogDebug("beam CUR_BEAM_ID to GetEntityName(CUR_TARGET)"); + Effect("beam", "update", CUR_BEAM_ID, "brightness", 200); + Effect("beam", "update", CUR_BEAM_ID, "end_target", CUR_TARGET, 0); + CUR_BEAM += 1; + if (!(CUR_BEAM > GetTokenCount(BEAM_LIST, ";"))) return; + CUR_BEAM = 0; + } + + void beams_off() + { + Effect("beam", "update", GetToken(BEAM_LIST, i, ";"), "brightness", 0); + } + + void beams_remove() + { + Effect("beam", "update", GetToken(BEAM_LIST, i, ";"), "remove", 0); + } + + void do_big_jump() + { + FREQ_BIGJUMP("do_big_jump"); + if (!(m_hAttackTarget != "unset")) return; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + PlayAnim("critical", ANIM_LEAP); + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + int JUMP_HEIGHT = RandomInt(550, 650); + int JUMP_DIST = RandomInt(800, 900); + ScheduleDelayedEvent(0.1, "big_jump_boost"); + } + + void big_jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, JUMP_DIST, JUMP_HEIGHT)); + } + + void OnDeath(CBaseEntity@ attacker) override + { + for (int i = 0; i < GetTokenCount(BEAM_LIST, ";"); i++) + { + beams_remove(); + } + } + + void init_beam1() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + BEAM_ID = GetEntityIndex(m_hLastCreated); + LogDebug("init_beam1 BEAM_ID"); + ScheduleDelayedEvent(0.1, "init_beam2"); + } + + void init_beam2() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam2 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + ScheduleDelayedEvent(0.1, "init_beam3"); + } + + void init_beam3() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam3 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + ScheduleDelayedEvent(0.1, "init_beam4"); + } + + void init_beam4() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam4 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + } + +} + +} diff --git a/scripts/angelscript/monsters/djinn_lightning_lesser.as b/scripts/angelscript/monsters/djinn_lightning_lesser.as new file mode 100644 index 00000000..86e55a81 --- /dev/null +++ b/scripts/angelscript/monsters/djinn_lightning_lesser.as @@ -0,0 +1,651 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_lightning_shield.as" + +namespace MS +{ + +class DjinnLightningLesser : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HEADBUTT; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_RUN_DEFAULT; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WALK_DEFAULT; + string ANIM_WARCRY; + float ATTACK_HITCHANCE; + string BEAM_ID; + string BEAM_LIST; + string BEAM_TARGET_LIST; + int CAN_FLINCH; + int CAN_LEAP; + int CHAIN_COUNT; + int CHAIN_ON; + int CHANCE_SHOCK; + int CUR_BEAM; + int DID_WARCRY; + float DMG_CHAIN; + int DMG_LSHIELD; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + float FLINCH_CHANCE; + float FLINCH_DELAY; + int FLINCH_HEALTH; + int FREQ_CHAIN; + float FREQ_SHIELD; + float HEADBUTT_CHANCE; + int HEADBUTT_DAMAGE; + int HEADBUTT_DELAY; + float HEADBUTT_FREQ; + int HEADBUTT_ON; + int LEAP_AWAY_INTERVAL; + int LEAP_DAMAGE; + int LEAP_ENABLED; + int LEAP_RANGE_TOOCLOSE; + int LEAP_RANGE_TOOFAR; + float LEAP_STUNCHANCE; + int LSHIELD_PASSIVE; + int LSHIELD_RADIUS; + string MONSTER_MODEL; + int NEXT_LEAP_AWAY; + string NEXT_SHIELD; + float NPC_DELAYING_UNSTUCK; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + float ORC_HOP_DELAY; + int ORC_JUMPING; + int ORC_JUMP_THRESH; + int RUN_STEP; + int SEARCH_ANIM_DELAY; + string SOUND_DEATH; + string SOUND_FLINCH; + string SOUND_HEADBUTT; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_LEAP; + string SOUND_LEAP_LAND; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWIPEHIT1; + string SOUND_SWIPEHIT2; + string SOUND_SWIPEMISS1; + string SOUND_SWIPEMISS2; + string SOUND_WARCRY; + int SWIPE_ATTACK; + int SWIPE_DAMAGE; + int WEAK_THRESHOLD; + + DjinnLightningLesser() + { + ORC_HOP_DELAY = 1.0; + ORC_JUMP_THRESH = 80; + NPC_GIVE_EXP = 800; + ANIM_SEARCH = "idle_look"; + ANIM_IDLE = "idle1"; + ANIM_SWIPE = "attack1"; + ANIM_HEADBUTT = "attack2"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "jump"; + ANIM_WALK_DEFAULT = "walk"; + ANIM_RUN_DEFAULT = "run1"; + ANIM_DEATH = "dieforward"; + ANIM_WARCRY = "warcry"; + ANIM_FLINCH = "bigflinch"; + ANIM_WALK = ANIM_WALK_DEFAULT; + ANIM_RUN = ANIM_RUN_DEFAULT; + ANIM_ATTACK = ANIM_SWIPE; + SOUND_IDLE1 = "bullchicken/bc_idle1.wav"; + SOUND_IDLE2 = "bullchicken/bc_idle2.wav"; + SOUND_IDLE3 = "bullchicken/bc_idle3.wav"; + SOUND_IDLE4 = "bullchicken/bc_idle4.wav"; + SOUND_IDLE5 = "bullchicken/bc_idle5.wav"; + SOUND_DEATH = "bullchicken/bc_die1.wav"; + SOUND_HEADBUTT = "bullchicken/bc_spithit1.wav"; + SOUND_SWIPEHIT1 = "zombie/claw_strike1.wav"; + SOUND_SWIPEHIT2 = "zombie/claw_strike2.wav"; + SOUND_SWIPEMISS1 = "zombie/claw_miss1.wav"; + SOUND_SWIPEMISS2 = "zombie/claw_miss2.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STEP1 = "player/pl_dirt1.wav"; + SOUND_STEP2 = "player/pl_dirt2.wav"; + SOUND_PAIN_WEAK = "bullchicken/bc_pain2.wav"; + SOUND_PAIN_STRONG = "bullchicken/bc_pain1.wav"; + SOUND_WARCRY = "bullchicken/bc_attackgrowl3.wav"; + SOUND_LEAP = "bullchicken/bc_attackgrowl2.wav"; + SOUND_LEAP_LAND = "weapons/g_bounce2.wav"; + SOUND_FLINCH = "bullchicken/bc_pain3.wav"; + Precache(SOUND_DEATH); + WEAK_THRESHOLD = 1250; + SWIPE_DAMAGE = "$rand(75,110)"; + HEADBUTT_CHANCE = 1.0; + HEADBUTT_FREQ = 7.0; + HEADBUTT_DAMAGE = "$rand(75,110)"; + LEAP_DAMAGE = "$rand(20,75)"; + LEAP_STUNCHANCE = 0.35; + LEAP_RANGE_TOOFAR = 512; + LEAP_RANGE_TOOCLOSE = 128; + LEAP_AWAY_INTERVAL = 500; + NEXT_LEAP_AWAY = 1800; + FREQ_CHAIN = RandomInt(10, 40); + CHANCE_SHOCK = 30; + DMG_CHAIN = Random(2, 6); + CAN_LEAP = 1; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 30; + DROP_GOLD_MAX = 50; + ATTACK_HITCHANCE = 0.95; + CAN_FLINCH = 1; + FLINCH_CHANCE = 0.1; + FLINCH_DELAY = 10.0; + FLINCH_HEALTH = 1750; + LSHIELD_PASSIVE = 0; + LSHIELD_RADIUS = 120; + DMG_LSHIELD = 60; + FREQ_SHIELD = Random(30, 50); + MONSTER_MODEL = "monsters/swamp_ogre.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + SetName("Lesser Lightning Djinn"); + SetHealth(2750); + SetRace("demon"); + SetRoam(true); + SetModel(MONSTER_MODEL); + SetMoveAnim(ANIM_WALK); + SetHeight(64); + SetWidth(32); + SetHearingSensitivity(2); + SetBloodType("green"); + SetIdleAnim(ANIM_IDLE); + RUN_STEP = 0; + if (!(true)) return; + ScheduleDelayedEvent(1.0, "idle_sounds"); + CUR_BEAM = 0; + BEAM_LIST = ""; + ScheduleDelayedEvent(0.1, "init_beam1"); + } + + void OnPostSpawn() override + { + SetDamageResistance("all", 0.8); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("holy", 0.25); + SetDamageResistance("poison", 1.5); + } + + void npcatk_validatetarget() + { + if (!(IsValidPlayer(param1))) return; + if ((DID_WARCRY)) return; + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + } + + void my_target_died() + { + if (!(false)) + { + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 0; + ScheduleDelayedEvent(1.0, "enable_leap"); + } + if ((false)) return; + ORC_JUMPING = 0; + } + + void enable_leap() + { + LEAP_ENABLED = 1; + } + + void cycle_up() + { + FREQ_CHAIN("do_lightning"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(GetGameTime() > NEXT_SHIELD)) return; + NEXT_SHIELD = GetGameTime(); + NEXT_SHIELD += FREQ_SHIELD; + ext_lshield_on(); + if (GetMonsterHP() < GetMonsterMaxHP()) + { + HealEntity(GetOwner(), 0.1); + } + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) <= LEAP_RANGE_TOOFAR)) return; + if (!(GetEntityRange(m_hAttackTarget) > LEAP_RANGE_TOOCLOSE)) return; + if (!(LEAP_ENABLED)) return; + LEAP_ENABLED = 0; + ScheduleDelayedEvent(5.0, "enable_leap"); + script_leap(); + } + + void script_leap() + { + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + if ((I_R_FROZEN)) return; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 600, 100)); + } + + void npc_selectattack() + { + if ((HEADBUTT_DELAY)) + { + ANIM_ATTACK = ANIM_SWIPE; + } + else + { + if (RandomInt(1, 100) < HEADBUTT_CHANCE) + { + ANIM_ATTACK = ANIM_HEADBUTT; + HEADBUTT_DELAY = 1; + HEADBUTT_FREQ("headbutt_reset"); + } + } + } + + void headbutt_reset() + { + HEADBUTT_DELAY = 0; + } + + void attack1() + { + SWIPE_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, SWIPE_DAMAGE, ATTACK_HITCHANCE); + } + + void attack2() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, HEADBUTT_DAMAGE, ATTACK_HITCHANCE); + HEADBUTT_ON = 1; + } + + void game_dodamage() + { + if ((HEADBUTT_ON)) + { + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_HEADBUTT, 10); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + ANIM_ATTACK = ANIM_SWIPE; + HEADBUTT_ON = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((SWIPE_ATTACK)) + { + SWIPE_ATTACK = 0; + if (RandomInt(1, 100) < CHANCE_SHOCK) + { + } + EmitSound(GetOwner(), 0, SOUND_BFIRE, 10); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 64, 1, 1); + ApplyEffect(param2, "effects/dot_lightning", RandomInt(2, 5), GetEntityIndex(GetOwner()), 10); + } + if ((param1)) + { + // PlayRandomSound from: SOUND_SWIPEHIT1, SOUND_SWIPEHIT2 + array sounds = {SOUND_SWIPEHIT1, SOUND_SWIPEHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(-100, 130, 120)); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((CHAIN_ON)) + { + AddVelocity(param2, Vector3(0, 0, 0)); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetMonsterHP() > WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (GetMonsterHP() <= WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (param1 > 200) + { + leap_away(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string HP_AFTER = GetMonsterHP(); + HP_AFTER -= param1; + if (HP_AFTER < NEXT_LEAP_AWAY) + { + NEXT_LEAP_AWAY -= LEAP_AWAY_INTERVAL; + leap_away(); + } + } + + void leap_away() + { + PlayAnim("critical", ANIM_LEAP); + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "leap_boost"); + npcatk_suspend_ai(3.0); + } + + void leap_attack() + { + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + if ((CanSee("enemy", 128))) + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, LEAP_DAMAGE, ATTACK_HITCHANCE); + if (RandomInt(1, 100) < LEAP_STUNCHANCE) + { + ApplyEffect(GetEntityIndex(m_hLastSeen), "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + } + } + + void leap_done() + { + EmitSound(GetOwner(), 0, SOUND_LEAP_LAND, 10); + SetMoveAnim(ANIM_RUN); + } + + void npcatk_search_init_advanced() + { + if ((SEARCH_ANIM_DELAY)) return; + NPC_DELAYING_UNSTUCK = 10.0; + PlayAnim("critical", ANIM_SEARCH); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SEARCH_ANIM_DELAY = 1; + ScheduleDelayedEvent(5.0, "reset_search_anim"); + } + + void reset_search_anim() + { + // TODO: setrvard SEARCH_ANIM_DELAY 0 + } + + void OnFlinch() + { + EmitSound(GetOwner(), 0, SOUND_FLINCH, 10); + } + + void idle_sounds() + { + Random(3, 10)("idle_sounds"); + if (!(m_hAttackTarget == "unset")) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void run_step1() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 5); + } + + void run_step2() + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 5); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((ORC_JUMPING)) return; + if (!(IsValidPlayer(m_hAttackTarget))) return; + ORC_JUMPING = 1; + ScheduleDelayedEvent(1.0, "orc_jump_check"); + } + + void orc_jump_check() + { + if (!(ORC_JUMPING)) return; + ORC_HOP_DELAY("orc_jump_check"); + if (!(CAN_LEAP)) return; + if ((IS_FLEEING)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(false)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > ORC_JUMP_THRESH) + { + orc_hop(); + } + } + + void orc_hop() + { + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + PlayAnim("critical", ANIM_LEAP); + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + int JUMP_HEIGHT = RandomInt(550, 650); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void bo_zombie_mode() + { + npc_suicide(); + } + + void ext_lshield_on() + { + CAN_LEAP = 0; + string SHIELD_DURATION = param1; + if (SHIELD_DURATION == 0) + { + float SHIELD_DURATION = 3.0; + } + npcatk_suspend_ai(); + SetRoam(false); + lshield_activate(SHIELD_DURATION); + SetIdleAnim("warcry"); + SetMoveAnim("warcry"); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + SHIELD_DURATION("ext_end_shield"); + } + + void ext_end_shield() + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + npcatk_resume_ai(); + SetRoam(true); + CAN_LEAP = 1; + } + + void do_lightning() + { + CHAIN_ON = 1; + CHAIN_COUNT = 0; + CAN_LEAP = 0; + npcatk_suspend_ai(); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 128, 3, 1); + CUR_BEAM = 0; + BEAM_TARGET_LIST = FindEntitiesInSphere("enemy", 1024); + LogDebug("BEAM_TARGET_LIST"); + for (int i = 0; i < GetTokenCount(BEAM_TARGET_LIST, ";"); i++) + { + set_beam(); + } + ScheduleDelayedEvent(0.1, "chain_lightning"); + } + + void chain_lightning() + { + CHAIN_COUNT += 1; + if (CHAIN_COUNT < 10) + { + SetIdleAnim("idle2"); + SetMoveAnim("idle2"); + CAN_LEAP = 0; + } + if (CHAIN_COUNT == 10) + { + CHAIN_ON = 0; + for (int i = 0; i < GetTokenCount(BEAM_LIST, ";"); i++) + { + beams_off(); + } + ScheduleDelayedEvent(1.0, "resume_attack"); + FREQ_CHAIN("do_lightning"); + } + if (!(CHAIN_COUNT < 10)) return; + ScheduleDelayedEvent(0.1, "chain_lightning"); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + for (int i = 0; i < GetTokenCount(BEAM_TARGET_LIST, ";"); i++) + { + push_targets(); + } + CAN_LEAP = 1; + } + + void push_targets() + { + string CUR_TARGET = GetToken(BEAM_TARGET_LIST, i, ";"); + string TARG_ORG = GetEntityOrigin(BEAM_TARGET_LIST); + string TRACE_LINE = TraceLine(GetMonsterProperty("origin"), TARG_ORG); + if (!(TRACE_LINE == TARG_ORG)) return; + string FIN_DMG = DMG_CHAIN; + string RESIST_FLOAT = /* TODO: $get_takedmg */ $get_takedmg(CUR_TARGET, "lightning"); + FIN_DMG *= RESIST_FLOAT; + DamageEntity(CUR_TARGET, GetOwner()); + AddVelocity(CUR_TARGET, Vector3(130, 0, 0)); + } + + void set_beam() + { + string CUR_BEAM_ID = GetToken(BEAM_LIST, CUR_BEAM, ";"); + string CUR_TARGET = GetToken(BEAM_TARGET_LIST, i, ";"); + if (!(CUR_BEAM_ID != 0)) return; + LogDebug("beam CUR_BEAM_ID to GetEntityName(CUR_TARGET)"); + Effect("beam", "update", CUR_BEAM_ID, "brightness", 200); + Effect("beam", "update", CUR_BEAM_ID, "end_target", CUR_TARGET, 0); + CUR_BEAM += 1; + if (!(CUR_BEAM > GetTokenCount(BEAM_LIST, ";"))) return; + CUR_BEAM = 0; + } + + void beams_off() + { + Effect("beam", "update", GetToken(BEAM_LIST, i, ";"), "brightness", 0); + } + + void beams_remove() + { + Effect("beam", "update", GetToken(BEAM_LIST, i, ";"), "remove", 0); + } + + void resume_attack() + { + npcatk_resume_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + } + + void init_beam1() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + BEAM_ID = GetEntityIndex(m_hLastCreated); + LogDebug("init_beam1 BEAM_ID"); + ScheduleDelayedEvent(0.1, "init_beam2"); + } + + void init_beam2() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam2 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + ScheduleDelayedEvent(0.1, "init_beam3"); + } + + void init_beam3() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam3 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + ScheduleDelayedEvent(0.1, "init_beam4"); + } + + void init_beam4() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam4 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + for (int i = 0; i < GetTokenCount(BEAM_LIST, ";"); i++) + { + beams_remove(); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/djinn_lightning_lesser_alt.as b/scripts/angelscript/monsters/djinn_lightning_lesser_alt.as new file mode 100644 index 00000000..e3871719 --- /dev/null +++ b/scripts/angelscript/monsters/djinn_lightning_lesser_alt.as @@ -0,0 +1,685 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_lightning_shield.as" + +namespace MS +{ + +class DjinnLightningLesserAlt : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BEAM; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HEADBUTT; + string ANIM_IDLE; + string ANIM_IDLE_DEFAULT; + string ANIM_JUMP; + string ANIM_JUMPING_JACKS; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_RUN_DEFAULT; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WALK_DEFAULT; + string ANIM_WARCRY; + int ATTACK_HIDX; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BEAM1_ID; + string BEAM2_ID; + int BEAM_ACTIVE; + string BEAM_TARGET; + string BEAM_TYPE; + int CAN_FLINCH; + int CHANCE_SHOCK; + string CL_SCRIPT; + string CL_SCRIPT_IDX; + int DID_WARCRY; + int DMG_BEAM; + int DMG_BEAM_SECONDARY; + int DMG_FROM_BEAM; + int DMG_HEADBUTT; + int DMG_SWIPE; + float DOT_SHOCK; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FLINCH_CHANCE; + float FLINCH_DELAY; + int FLINCH_HEALTH; + float FREQ_BLAST; + float FREQ_FX_REFRESH; + float FREQ_HEADBUTT; + float FREQ_JUMP; + float FREQ_RNDJUMP; + float FREQ_SHIELD; + string FWD_JUMP_STR; + int HEADBUTT_ATTACK; + int IS_UNHOLY; + int LSHIELD_PASSIVE; + int LSHIELD_RADIUS; + int LSHIELD_REPELL_STRENGTH; + int MAX_JUMP_RANGE; + string MAX_SUSPEND_AI; + int MOVE_RANGE; + string NEXT_BLAST; + string NEXT_HEADBUTT; + string NEXT_JUMP; + string NEXT_RNDJUMP; + string NEXT_SHIELD; + int NPC_DIRECT_ATTACK; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + int RANGE_HEADBUTT; + int RANGE_SWIPE; + string SOUND_BCHARGE; + string SOUND_BFIRE; + string SOUND_DEATH; + string SOUND_FLINCH; + string SOUND_HEADBUTT; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_LEAP; + string SOUND_LEAP_LAND; + string SOUND_LOOP; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWIPEHIT1; + string SOUND_SWIPEHIT2; + string SOUND_SWIPEMISS1; + string SOUND_SWIPEMISS2; + string SOUND_WARCRY; + string SOUND_ZAP_LOOP; + string SOUND_ZAP_START; + int SWIPE_ATTACK; + string UP_JUMP_STR; + string WEAK_THRESHOLD; + + DjinnLightningLesserAlt() + { + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "run1"; + ANIM_DEATH = "dieforward"; + ANIM_FLINCH = "bigflinch"; + ANIM_ATTACK = "attack1"; + ANIM_SWIPE = "attack1"; + ANIM_HEADBUTT = "attack2"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "jump"; + ANIM_SEARCH = "idle_look"; + ANIM_WALK_DEFAULT = "walk"; + ANIM_RUN_DEFAULT = "run1"; + ANIM_IDLE_DEFAULT = "idle1"; + ANIM_WARCRY = "warcry"; + ANIM_JUMPING_JACKS = "idle2"; + ANIM_BEAM = "beam"; + NPC_GIVE_EXP = 2000; + IS_UNHOLY = 1; + DROP_GOLD = 1; + DROP_GOLD_AMT = 500; + ATTACK_MOVERANGE = 88; + MOVE_RANGE = 88; + ATTACK_RANGE = 140; + ATTACK_HITRANGE = 160; + RANGE_SWIPE = 140; + RANGE_HEADBUTT = 100; + CAN_FLINCH = 1; + FLINCH_CHANCE = 0.1; + FLINCH_DELAY = 10.0; + FLINCH_HEALTH = 2000; + FREQ_JUMP = 5.0; + MAX_JUMP_RANGE = 600; + FREQ_RNDJUMP = Random(10.0, 20.0); + FREQ_HEADBUTT = 7.0; + CHANCE_SHOCK = 30; + DOT_SHOCK = 40.0; + DMG_SWIPE = 100; + DMG_HEADBUTT = 50; + ATTACK_HITCHANCE = 0.95; + CL_SCRIPT = "monsters/djinn_lightning_lesser_cl"; + FREQ_FX_REFRESH = 15.0; + FREQ_SHIELD = 45.0; + FREQ_BLAST = Random(10.0, 20.0); + DMG_BEAM = 100; + DMG_BEAM_SECONDARY = 100; + SOUND_BCHARGE = "magic/bolt_start.wav"; + SOUND_LOOP = "magic/bolt_loop.wav"; + SOUND_BFIRE = "magic/bolt_end.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + SOUND_IDLE1 = "bullchicken/bc_idle1.wav"; + SOUND_IDLE2 = "bullchicken/bc_idle2.wav"; + SOUND_IDLE3 = "bullchicken/bc_idle3.wav"; + SOUND_IDLE4 = "bullchicken/bc_idle4.wav"; + SOUND_IDLE5 = "bullchicken/bc_idle5.wav"; + SOUND_DEATH = "bullchicken/bc_die1.wav"; + SOUND_HEADBUTT = "bullchicken/bc_spithit1.wav"; + SOUND_SWIPEHIT1 = "zombie/claw_strike1.wav"; + SOUND_SWIPEHIT2 = "zombie/claw_strike2.wav"; + SOUND_SWIPEMISS1 = "zombie/claw_miss1.wav"; + SOUND_SWIPEMISS2 = "zombie/claw_miss2.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STEP1 = "player/pl_dirt1.wav"; + SOUND_STEP2 = "player/pl_dirt2.wav"; + SOUND_PAIN_WEAK = "bullchicken/bc_pain2.wav"; + SOUND_PAIN_STRONG = "bullchicken/bc_pain1.wav"; + SOUND_WARCRY = "bullchicken/bc_attackgrowl3.wav"; + SOUND_LEAP = "bullchicken/bc_attackgrowl2.wav"; + SOUND_LEAP_LAND = "weapons/g_bounce2.wav"; + SOUND_FLINCH = "bullchicken/bc_pain3.wav"; + LSHIELD_PASSIVE = 0; + LSHIELD_RADIUS = 256; + LSHIELD_REPELL_STRENGTH = 500; + SOUND_ZAP_LOOP = "magic/bolt_loop.wav"; + SOUND_ZAP_START = "magic/bolt_end.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(3.0, 10.0)); + if ((IsEntityAlive(GetOwner()))) + { + } + if (m_hAttackTarget == "unset") + { + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(FREQ_FX_REFRESH); + if ((IsEntityAlive(GetOwner()))) + { + } + if (CL_SCRIPT_IDX != "CL_SCRIPT_IDX") + { + ClientEvent("update", "all", CL_SCRIPT_IDX, "remove_fx"); + } + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner()), FREQ_FX_REFRESH); + CL_SCRIPT_IDX = "game.script.last_sent_id"; + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(10.0); + if ((IsEntityAlive(GetOwner()))) + { + } + if ((SUSPEND_AI)) + { + } + if (GetGameTime() > MAX_SUSPEND_AI) + { + } + npcatk_resume_ai(); + } + + void game_precache() + { + Precache(CL_SCRIPT); + } + + void OnSpawn() override + { + SetName("Lesser Lightning Djinn"); + SetHealth(5000); + SetRace("demon"); + SetRoam(true); + SetGold(0); + SetModel("monsters/swamp_ogre.mdl"); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetHeight(64); + SetWidth(32); + SetHearingSensitivity(8); + SetBloodType("green"); + SetProp(GetOwner(), "skin", 4); + string DEF_ATTACK_RANGE = GetMonsterProperty("moveprox"); + DEF_ATTACK_RANGE *= 1.5; + LogDebug("npc_spawn DEF_ATTACK_RANGE"); + SetDamageResistance("all", 0.7); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("holy", 0.5); + SetDamageResistance("acid", 2.0); + SetDamageResistance("poison", 1.25); + ATTACK_HIDX = 0; + WEAK_THRESHOLD = GetEntityMaxHealth(GetOwner()); + WEAK_THRESHOLD *= 0.3; + ScheduleDelayedEvent(0.1, "setup_client"); + ScheduleDelayedEvent(0.2, "init_beam1"); + ScheduleDelayedEvent(0.3, "init_beam2"); + } + + void setup_client() + { + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner()), FREQ_FX_REFRESH); + CL_SCRIPT_IDX = "game.script.last_sent_id"; + } + + void init_beam1() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + BEAM1_ID = GetEntityIndex(m_hLastCreated); + } + + void init_beam2() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + BEAM2_ID = GetEntityIndex(m_hLastCreated); + } + + void npc_targetsighted() + { + if (!(IsValidPlayer(param1))) return; + if ((DID_WARCRY)) return; + float GAME_TIME = GetGameTime(); + NEXT_JUMP = GAME_TIME; + NEXT_JUMP += FREQ_JUMP; + NEXT_BLAST = GAME_TIME; + NEXT_BLAST += FREQ_BLAST; + NEXT_SHIELD = GAME_TIME; + NEXT_SHIELD += FREQ_SHIELD; + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + } + + void cycle_down() + { + DID_WARCRY = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + beams_remove(); + } + + void beams_remove() + { + Effect("beam", "update", BEAM1_ID, "brightness", 0); + Effect("beam", "update", BEAM2_ID, "brightness", 0); + Effect("beam", "update", BEAM1_ID, "remove", 0.1); + Effect("beam", "update", BEAM2_ID, "remove", 0.1); + } + + void do_hop() + { + PlayAnim("critical", ANIM_LEAP); + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + UP_JUMP_STR = param1; + UP_JUMP_STR *= 5; + npcatk_suspend_ai(1.0); + FWD_JUMP_STR = GetEntityRange(m_hAttackTarget); + LogDebug("do_hop UP_JUMP_STR FWD_JUMP_STR"); + ScheduleDelayedEvent(0.1, "do_jump_boost"); + } + + void do_jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, FWD_JUMP_STR, UP_JUMP_STR)); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if ((SUSPEND_AI)) return; + if ((I_R_FROZEN)) return; + float GAME_TIME = GetGameTime(); + if (GAME_TIME > NEXT_BLAST) + { + if ((false)) + { + } + do_blast(); + NEXT_BLAST = GAME_TIME; + NEXT_BLAST += FREQ_BLAST; + string GAME_TIME_PLUS = GAME_TIME; + GAME_TIME_PLUS += 5.0; + if (GAME_TIME_PLUS > NEXT_SHIELD) + { + } + NEXT_SHIELD += 10.0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_SHIELD) + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + } + do_shield(); + NEXT_SHIELD = GAME_TIME; + NEXT_SHIELD += FREQ_SHIELD; + string GAME_TIME_PLUS = GAME_TIME; + GAME_TIME_PLUS += 10.0; + if (GAME_TIME_PLUS > NEXT_BLAST) + { + } + NEXT_BLAST += 15.0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_JUMP) + { + if (GetEntityRange(m_hAttackTarget) < MAX_JUMP_RANGE) + { + } + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > ATTACK_RANGE) + { + do_hop(Z_DIFF); + int EXIT_SUB = 1; + NEXT_JUMP = GAME_TIME; + NEXT_JUMP += FREQ_JUMP; + NEXT_RNDJUMP = GAME_TIME; + NEXT_RNDJUMP += FREQ_RNDJUMP; + } + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_RNDJUMP) + { + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + } + NEXT_RNDJUMP = GAME_TIME; + NEXT_RNDJUMP += FREQ_RNDJUMP; + do_hop(RandomInt(80, 200)); + } + } + + void run_step1() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 5); + } + + void run_step2() + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 5); + } + + void attack1() + { + SWIPE_ATTACK = 1; + if (!(NPC_DIRECT_ATTACK)) + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, ATTACK_HITCHANCE, "slash"); + } + else + { + DoDamage(m_hAttackTarget, "direct", DMG_SWIPE, ATTACK_HITCHANCE, GetOwner()); + } + string ATTACK_START = GetEntityProperty(GetOwner(), "attachpos"); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(ATTACK_START, TARG_ORG); + ANG_TO_TARG = "x"; + ClientEvent("update", "all", CL_SCRIPT_IDX, "hand_sprite", ANG_TO_TARG, ATTACK_HIDX); + ATTACK_HIDX += 1; + if (ATTACK_HIDX > 1) + { + ATTACK_HIDX = 0; + } + if (!(GetGameTime() > NEXT_HEADBUTT)) return; + ANIM_ATTACK = ANIM_HEADBUTT; + ATTACK_RANGE = RANGE_HEADBUTT; + } + + void attack2() + { + HEADBUTT_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_HEADBUTT, ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = ANIM_SWIPE; + ATTACK_RANGE = RANGE_SWIPE; + NEXT_HEADBUTT = GetGameTime(); + NEXT_HEADBUTT += FREQ_HEADBUTT; + } + + void leap_done() + { + EmitSound(GetOwner(), 0, SOUND_LEAP_LAND, 10); + SetMoveAnim(ANIM_RUN); + } + + void game_dodamage() + { + if ((DMG_FROM_BEAM)) + { + if (BEAM_TYPE == "push") + { + SetVelocity(BEAM_TARGET, /* TODO: $relvel */ $relvel(MON_ANGLES, Vector3(0, 1000, 110))); + } + else + { + SetVelocity(BEAM_TARGET, /* TODO: $relvel */ $relvel(MON_ANGLES, Vector3(0, -1000, 110))); + } + } + DMG_FROM_BEAM = 0; + if ((SWIPE_ATTACK)) + { + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((param1)) + { + } + // PlayRandomSound from: SOUND_SWIPEHIT1, SOUND_SWIPEHIT2 + array sounds = {SOUND_SWIPEHIT1, SOUND_SWIPEHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RandomInt(1, 100) < CHANCE_SHOCK) + { + } + EmitSound(GetOwner(), 2, SOUND_BFIRE, 10); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 64, 1, 1); + if (GetEntityRange(param2) < ATTACK_HITRANGE) + { + } + ApplyEffect(param2, "effects/dot_lightning", RandomInt(2, 5), GetEntityIndex(GetOwner()), DOT_SHOCK); + } + SWIPE_ATTACK = 0; + if ((HEADBUTT_ATTACK)) + { + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((param1)) + { + } + EmitSound(GetOwner(), 0, SOUND_HEADBUTT, 10); + if (GetEntityRange(param2) < RANGE_HEADBUTT) + { + } + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + HEADBUTT_ATTACK = 0; + } + + void OnFlinch() + { + EmitSound(GetOwner(), 0, SOUND_FLINCH, 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetEntityHealth(GetOwner()) > WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (GetEntityHealth(GetOwner()) <= WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((I_R_FROZEN)) return; + if (param1 > 200) + { + if (RandomInt(1, 2) == 1) + { + } + leap_away(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetEntityRange(m_hLastStruck) < ATTACK_RANGE) + { + if (RandomInt(1, 10) == 1) + { + } + leap_away(); + } + } + + void leap_away() + { + PlayAnim("critical", ANIM_LEAP); + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "leap_boost"); + npcatk_suspend_ai(2.0); + } + + void leap_boost() + { + if ((I_R_FROZEN)) return; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 600, 100)); + } + + void do_shield() + { + LogDebug("do_shield"); + npcatk_suspend_ai(); + suspend_movement(ANIM_JUMPING_JACKS); + lshield_activate(10.0); + ScheduleDelayedEvent(10.0, "end_shield"); + } + + void end_shield() + { + npcatk_resume_ai(); + resume_movement(); + } + + void suspend_movement() + { + CAN_FLINCH = 0; + SetRoam(false); + ANIM_RUN = param1; + ANIM_IDLE = param1; + SetMoveAnim(param1); + SetIdleAnim(param1); + PlayAnim("critical", param1); + } + + void resume_movement() + { + CAN_FLINCH = 1; + SetRoam(true); + ANIM_RUN = ANIM_RUN_DEFAULT; + ANIM_IDLE = ANIM_IDLE_DEFAULT; + SetMoveAnim(ANIM_RUN_DEFAULT); + SetIdleAnim(ANIM_IDLE_DEFAULT); + } + + void do_blast() + { + LogDebug("do_blast entered"); + BEAM_TARGET = m_hAttackTarget; + npcatk_suspend_ai(); + suspend_movement(ANIM_BEAM); + LogDebug("do_blast setup_beams"); + Effect("beam", "update", BEAM1_ID, "end_target", BEAM_TARGET, 1); + Effect("beam", "update", BEAM1_ID, "brightness", 200); + Effect("beam", "update", BEAM2_ID, "end_target", BEAM_TARGET, 2); + Effect("beam", "update", BEAM2_ID, "brightness", 200); + LogDebug("do_blast setup_sounds"); + EmitSound(GetOwner(), 0, SOUND_ZAP_START, 10); + // svplaysound: svplaysound 1 10 SOUND_ZAP_LOOP + EmitSound(1, 10, SOUND_ZAP_LOOP); + if (GetEntityRange(BEAM_TARGET) > 300) + { + BEAM_TYPE = "pull"; + } + else + { + BEAM_TYPE = "push"; + } + DoDamage(BEAM_TARGET, 2048, DMG_BEAM, 1.0, "lightning"); + ApplyEffect(BEAM_TARGET, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + BEAM_ACTIVE = 1; + beam_loop(); + ScheduleDelayedEvent(2.0, "end_beam"); + } + + void end_beam() + { + BEAM_ACTIVE = 0; + npcatk_resume_ai(); + resume_movement(); + // svplaysound: svplaysound 1 0 SOUND_ZAP_LOOP + EmitSound(1, 0, SOUND_ZAP_LOOP); + Effect("beam", "update", BEAM1_ID, "end_target", GetOwner(), 0); + Effect("beam", "update", BEAM1_ID, "brightness", 0); + Effect("beam", "update", BEAM2_ID, "end_target", GetOwner(), 1); + Effect("beam", "update", BEAM2_ID, "brightness", 0); + } + + void beam_loop() + { + if (!(BEAM_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "beam_loop"); + SetMoveDest(BEAM_TARGET); + DMG_FROM_BEAM = 1; + DoDamage(BEAM_TARGET, 2048, DMG_BEAM_SECONDARY, 1.0, "lightning"); + DMG_FROM_BEAM = 0; + string MON_ANGLES = GetEntityAngles(GetOwner()); + MON_ANGLES = "x"; + } + + void set_direct_attack() + { + NPC_DIRECT_ATTACK = 1; + NPC_MUST_SEE_TARGET = 0; + } + + void OnSuspendAI() + { + MAX_SUSPEND_AI = GetGameTime(); + MAX_SUSPEND_AI += 20.0; + } + +} + +} diff --git a/scripts/angelscript/monsters/djinn_lightning_lesser_cl.as b/scripts/angelscript/monsters/djinn_lightning_lesser_cl.as new file mode 100644 index 00000000..9b2cb522 --- /dev/null +++ b/scripts/angelscript/monsters/djinn_lightning_lesser_cl.as @@ -0,0 +1,180 @@ +#pragma context client + +namespace MS +{ + +class DjinnLightningLesserCl : CGameScript +{ + string ASPRITE_ANG; + string FX_DURATION; + string GLOW_COLOR; + int GLOW_RAD; + int HAND_POWERUP; + string HAND_POWER_IDX; + float HAND_SCALE; + int IS_ACTIVE; + string LEFT_HAND_POS; + string MY_LIGHT_ID; + string MY_OWNER; + string RIGHT_HAND_POS; + + DjinnLightningLesserCl() + { + GLOW_RAD = 128; + GLOW_COLOR = Vector3(255, 255, 0); + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + RIGHT_HAND_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"); + LEFT_HAND_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment1"); + } + + void client_activate() + { + MY_OWNER = param1; + FX_DURATION = param2; + SetCallback("render", "enable"); + IS_ACTIVE = 1; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + MY_LIGHT_ID = "game.script.last_light_id"; + RIGHT_HAND_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"); + LEFT_HAND_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment1"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", RIGHT_HAND_POS, "setup_hand_sprite", "update_rhand_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", LEFT_HAND_POS, "setup_hand_sprite", "update_lhand_sprite"); + FX_DURATION("remove_fx"); + } + + void game_prerender() + { + if (!(IS_ACTIVE)) return; + string L_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + ClientEffect("light", MY_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void remove_fx() + { + if (!(IS_ACTIVE)) return; + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void hand_sprite() + { + LogDebug("**** hand_sprite PARAM1 PARAM2"); + ASPRITE_ANG = param1; + if (param2 == 0) + { + string SPRITE_POS = RIGHT_HAND_POS; + } + if (param2 == 1) + { + string SPRITE_POS = LEFT_HAND_POS; + } + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_POS, "setup_attack_sprite"); + } + + void hand_powerup() + { + HAND_POWERUP = 1; + HAND_POWER_IDX = param1; + HAND_SCALE = 0.3; + ScheduleDelayedEvent(3.0, "end_hand_powerup"); + } + + void end_hand_powerup() + { + HAND_POWERUP = 2; + } + + void update_rhand_sprite() + { + if ((IS_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", RIGHT_HAND_POS); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + if (HAND_POWERUP == 1) + { + if (HAND_POWER_IDX == 0) + { + } + HAND_SCALE += 0.01; + ClientEffect("tempent", "set_current_prop", "scale", HAND_SCALE); + } + if (HAND_POWERUP == 2) + { + if (HAND_POWER_IDX == 0) + { + } + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + HAND_POWERUP = 0; + } + } + + void update_lhand_sprite() + { + if ((IS_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", LEFT_HAND_POS); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + if (HAND_POWERUP == 1) + { + if (HAND_POWER_IDX == 1) + { + } + HAND_SCALE += 0.01; + ClientEffect("tempent", "set_current_prop", "scale", HAND_SCALE); + } + if (HAND_POWERUP == 2) + { + if (HAND_POWER_IDX == 1) + { + } + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + HAND_POWERUP = 0; + } + } + + void setup_attack_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(254, 254, 1)); + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(ASPRITE_ANG, Vector3(0, 300, 0))); + } + + void setup_hand_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(254, 254, 1)); + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/djinn_lightning_troll.as b/scripts/angelscript/monsters/djinn_lightning_troll.as new file mode 100644 index 00000000..7510bc7a --- /dev/null +++ b/scripts/angelscript/monsters/djinn_lightning_troll.as @@ -0,0 +1,396 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class DjinnLightningTroll : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + string ANIM_DBLPUNCH; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_PUNCH; + string ANIM_RUN; + string ANIM_THROW; + string ANIM_WALK; + string ANIM_WARCRY; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + float BALL_DURATION; + string BALL_SCRIPT; + int CAN_FLINCH; + int CAN_HUNT; + int COMBAT_REPOS; + int DID_WARCRY; + int DMG_BALL; + int DMG_DBL_PUNCH; + int DMG_GUIDED; + int DMG_PUNCH; + int DOT_PUNCH; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string FLINCH_ANIM; + int FLINCH_CHANCE; + float FLINCH_DELAY; + float FREQ_GUIDED; + int HUNT_AGRO; + int LAUNCH_GUIDED_COUNT; + int LEFT_FIST_INDEX; + int MELEE_RANGE; + int MELEE_STIKE; + int MELEE_STRIKE; + int MELE_HITRANGE; + int MELE_RANGE; + int MOVE_RANGE; + string NEXT_GUIDED; + int NPC_GIVE_EXP; + int PROJ_SHOCK_DMG; + int PROJ_SHOCK_DOT; + string PUSH_VEL; + int RIGHT_FIST_INDEX; + int ROCK_DAMAGE; + int ROCK_RANGE; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WALK1; + string SOUND_WALK2; + string SPOT_SPEECH; + int SWING_RANGE; + + DjinnLightningTroll() + { + FREQ_GUIDED = Random(15.0, 30.0); + DMG_GUIDED = 300; + DOT_PUNCH = 100; + DMG_PUNCH = 200; + DMG_DBL_PUNCH = 100; + NPC_GIVE_EXP = 3000; + LEFT_FIST_INDEX = 0; + RIGHT_FIST_INDEX = 1; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod1.wav"; + SOUND_PAIN = "monsters/troll/trollpain.wav"; + SOUND_ATTACK = "monsters/troll/trollattack.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + SOUND_IDLE = "monsters/troll/trollidle2.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 500; + DROP_GOLD_MAX = 600; + ANIM_IDLE = "idle0"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die_fall"; + ANIM_ATTACK = "throw_rock"; + ANIM_PUNCH = "hit_down"; + ANIM_DBLPUNCH = "double_punch"; + ANIM_THROW = "throw_rock"; + ROCK_RANGE = 800; + SWING_RANGE = 130; + ATTACK_RANGE = 800; + ATTACK_HITRANGE = 200; + MOVE_RANGE = 400; + MELE_RANGE = 128; + MELE_HITRANGE = 164; + CAN_FLINCH = 1; + FLINCH_CHANCE = 33; + FLINCH_ANIM = "flinch2"; + FLINCH_DELAY = 2.0; + CAN_HUNT = 1; + HUNT_AGRO = 1; + AIM_RATIO = 25; + ATTACK_SPEED = 500; + ROCK_DAMAGE = "$rand(400,600)"; + PROJ_SHOCK_DOT = 100; + PROJ_SHOCK_DMG = 400; + BALL_SCRIPT = "monsters/summon/guided_lball_alt"; + BALL_DURATION = 10.0; + ANIM_WARCRY = "idle2"; + MELEE_RANGE = 200; + DMG_BALL = 400; + Precache(SOUND_DEATH); + } + + void OnRepeatTimer() + { + SetRepeatDelay(15.0); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 0), 128, 14.9); + } + + void game_precache() + { + Precache(BALL_SCRIPT); + } + + void OnSpawn() override + { + SetHealth(6000); + SetWidth(100); + SetHeight(125); + SetRace("orc"); + SetName("Shadahar Lightning Djinn"); + SetRoam(true); + SetDamageResistance("all", ".7"); + SetDamageResistance("poison", 1.2); + SetDamageResistance("acid", 2.0); + SetDamageResistance("lightning", 0); + SetModel("monsters/troll_shad.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(10); + COMBAT_REPOS = 0; + ScheduleDelayedEvent(10.0, "random_idle"); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 0), 128, 15.0); + } + + void npc_selectattack() + { + if (GetEntityRange(m_hAttackTarget) > MELEE_RANGE) + { + ANIM_ATTACK = "rock_throw"; + } + else + { + int RND_MELEE = RandomInt(1, 2); + if (RND_MELEE == 1) + { + ANIM_ATTACK = "hit_down"; + } + if (RND_MELEE == 2) + { + ANIM_ATTACK = "double_punch"; + } + } + } + + void rock_pickup() + { + SetModelBody(1, 1); + } + + void rock_throw() + { + string ME_POS = GetEntityOrigin(GetOwner()); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(HUNT_LASTTARGET); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + string FIN_ATTACK_SPEED = ATTACK_SPEED; + string AIM_ANGLE = GetEntityRange(HUNT_LASTTARGET); + AIM_ANGLE /= AIM_RATIO; + if (TARGET_Z_DIFFERENCE > 200) + { + TARGET_Z_DIFFERENCE /= 2; + AIM_ANGLE /= 2; + FIN_ATTACK_SPEED += TARGET_Z_DIFFERENCE; + } + SetAngles("add_view.x"); + TossProjectile("proj_troll_lightning", /* TODO: $relpos */ $relpos(0, 0, 33), "none", FIN_ATTACK_SPEED, ROCK_DAMAGE, 0.75, "none"); + COMBAT_REPOS += 1; + SetModelBody(1, 0); + if (!(COMBAT_REPOS > 4)) return; + COMBAT_REPOS = 0; + chicken_run(5.0, "combat_repos"); + } + + void cycle_up() + { + NEXT_GUIDED = GetGameTime(); + NEXT_GUIDED += FREQ_GUIDED; + if ((DID_WARCRY)) return; + PlayAnim("critical", ANIM_WARCRY); + DID_WARCRY = 1; + if (!(SPOT_SPEECH != "SPOT_SPEECH")) return; + SayText(SPOT_SPEECH); + SPOT_SPEECH = "SPOT_SPEECH"; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "none")) return; + if (!(false)) return; + if (!(GetGameTime() > NEXT_GUIDED)) return; + if (!(false)) return; + LAUNCH_GUIDED_COUNT = 2; + NEXT_GUIDED = GetGameTime(); + NEXT_GUIDED += FREQ_GUIDED; + PlayAnim("critical", "double_punch_slow"); + } + + void game_dodamage() + { + if ((MELEE_STRIKE)) + { + if (((param2 !is null))) + { + } + if (GetRelationship(param2) == "enemy") + { + } + if (GetEntityRange(param2) < ATTACK_HITRANGE) + { + } + AddVelocity(param2, PUSH_VEL); + if (RandomInt(1, 4) == 1) + { + } + ApplyEffect(param2, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_PUNCH); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 64, 1, 1); + } + MELEE_STRIKE = 0; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(false)) return; + ANIM_ATTACK = ANIM_DBLPUNCH; + ATTACK_RANGE = SWING_RANGE; + if (GetEntityRange(param1) <= ROCK_RANGE) + { + if (GetEntityRange(param1) > ATTACK_RANGE) + { + } + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10; + PlayAnim("once", ANIM_THROW); + } + if (GetEntityRange(param1) < ATTACK_RANGE) + { + ANIM_ATTACK = ANIM_DBLPUNCH; + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + EmitSound(GetOwner(), 2, SOUND_PAIN, 5); + if (GetEntityRange(m_hLastStruck) < MELE_RANGE) + { + ANIM_ATTACK = ANIM_DBLPUNCH; + } + } + + void stomp_1() + { + EmitSound(GetOwner(), 2, SOUND_WALK1, 8); + } + + void stomp_2() + { + EmitSound(GetOwner(), 2, SOUND_WALK2, 8); + } + + void random_idle() + { + ScheduleDelayedEvent(10.0, "random_idle"); + if ((IS_HUNTING)) return; + if ((false)) return; + if ((IS_FLEEING)) return; + int ANIM_SELECT = RandomInt(0, 3); + if (ANIM_SELECT == 0) + { + ANIM_IDLE = "idle0"; + } + if (ANIM_SELECT == 1) + { + ANIM_IDLE = "idle1"; + } + if (ANIM_SELECT == 2) + { + ANIM_IDLE = "idle2"; + } + if (ANIM_SELECT == 3) + { + ANIM_IDLE = "idle3"; + } + if ((ADVANCED_SEARCHING)) + { + ANIM_IDLE = "idle0"; + } + PlayAnim("once", ANIM_IDLE); + } + + void warcry() + { + EmitSound(GetOwner(), 2, SOUND_IDLE, 10); + EmitSound(GetOwner(), 2, SOUND_IDLE, 10); + } + + void my_target_died() + { + DID_WARCRY = 0; + if ((false)) return; + PlayAnim("critical", "idle2"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(param1 == HUNT_LASTTARGET)) return; + if (!(param2 > 1)) return; + COMBAT_REPOS = 0; + } + + void attack_1() + { + MELEE_STRIKE = 1; + SetModelBody(1, 0); + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 300, 110); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_DBL_PUNCH, 0.75, "blunt"); + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + if (!(LAUNCH_GUIDED_COUNT >= 1)) return; + if (LAUNCH_GUIDED_COUNT == 1) + { + spawn_guided_ball1(); + } + if (LAUNCH_GUIDED_COUNT == 2) + { + spawn_guided_ball2(); + } + LAUNCH_GUIDED_COUNT -= 1; + } + + void attack_2() + { + MELEE_STIKE = 1; + SetModelBody(1, 0); + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 600, 110); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_PUNCH, 0.75, "blunt"); + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + } + + void spawn_guided_ball1() + { + SpawnNPC(BALL_SCRIPT, GetEntityProperty(GetOwner(), "attachpos"), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_BALL, 256, 20.0 + } + + void spawn_guided_ball2() + { + SpawnNPC(BALL_SCRIPT, GetEntityProperty(GetOwner(), "attachpos"), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_BALL, 256, 20.0 + } + + void set_sorcpal_djinn1() + { + SetSayTextRange(2048); + SPOT_SPEECH = "You say smash? ME SMASH!!"; + } + +} + +} diff --git a/scripts/angelscript/monsters/djinn_ogre_fire.as b/scripts/angelscript/monsters/djinn_ogre_fire.as new file mode 100644 index 00000000..99530d62 --- /dev/null +++ b/scripts/angelscript/monsters/djinn_ogre_fire.as @@ -0,0 +1,683 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class DjinnOgreFire : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BEAM; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HEADBUTT; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_RUN_DEFAULT; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WALK_DEFAULT; + string ANIM_WARCRY; + float ATTACK_HITCHANCE; + string BREATH_ANG; + int BREATH_COUNT; + string BURST_TARGS; + int CAN_FLINCH; + string CLOUD_TARGS; + string CL_IDX; + int CL_REFRESH_LOOP_ON; + int CUR_SPECIAL; + int DID_WARCRY; + int DOING_FIRE_BURST; + int DOING_FIRE_STORM; + float DOT_FIRE; + float DOT_FIRE_SPELL; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int FIRE_BREATH_ON; + float FLINCH_CHANCE; + float FLINCH_DELAY; + int FLINCH_HEALTH; + float FREQ_LEAP_AWAY; + float FREQ_SPECIAL; + float HEADBUTT_CHANCE; + int HEADBUTT_DAMAGE; + int HEADBUTT_DELAY; + float HEADBUTT_FREQ; + int HEADBUTT_ON; + int LEAP_AWAY_INTERVAL; + int LEAP_DAMAGE; + int LEAP_ENABLED; + int LEAP_RANGE_TOOCLOSE; + int LEAP_RANGE_TOOFAR; + float LEAP_STUNCHANCE; + string MONSTER_MODEL; + string NEXT_DMG_LEAP_AWAY; + string NEXT_SCAN; + string NEXT_SPECIAL; + float NPC_DELAYING_UNSTUCK; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + float ORC_HOP_DELAY; + int ORC_JUMPING; + int ORC_JUMP_THRESH; + int RUN_STEP; + int SEARCH_ANIM_DELAY; + string SOUND_BREATH; + string SOUND_DEATH; + string SOUND_FLINCH; + string SOUND_HEADBUTT; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_LEAP; + string SOUND_LEAP_LAND; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWIPEHIT1; + string SOUND_SWIPEHIT2; + string SOUND_SWIPEMISS1; + string SOUND_SWIPEMISS2; + string SOUND_WARCRY; + int SWIPE_ATTACK; + int SWIPE_DAMAGE; + int WEAK_THRESHOLD; + + DjinnOgreFire() + { + ANIM_SEARCH = "idle_look"; + ANIM_IDLE = "idle1"; + ANIM_SWIPE = "attack1"; + ANIM_HEADBUTT = "attack2"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "jump"; + ANIM_WALK_DEFAULT = "walk"; + ANIM_RUN_DEFAULT = "run1"; + ANIM_DEATH = "dieforward"; + ANIM_WARCRY = "warcry"; + ANIM_FLINCH = "bigflinch"; + ANIM_BEAM = "beam"; + ANIM_WALK = ANIM_WALK_DEFAULT; + ANIM_RUN = ANIM_RUN_DEFAULT; + ANIM_ATTACK = ANIM_SWIPE; + ORC_HOP_DELAY = 1.0; + ORC_JUMP_THRESH = 80; + NPC_GIVE_EXP = 1500; + DOT_FIRE = 20.0; + DOT_FIRE_SPELL = 40.0; + FREQ_SPECIAL = Random(10.0, 20.0); + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + SOUND_IDLE1 = "bullchicken/bc_idle1.wav"; + SOUND_IDLE2 = "bullchicken/bc_idle2.wav"; + SOUND_IDLE3 = "bullchicken/bc_idle3.wav"; + SOUND_IDLE4 = "bullchicken/bc_idle4.wav"; + SOUND_IDLE5 = "bullchicken/bc_idle5.wav"; + SOUND_DEATH = "bullchicken/bc_die1.wav"; + SOUND_HEADBUTT = "bullchicken/bc_spithit1.wav"; + SOUND_SWIPEHIT1 = "zombie/claw_strike1.wav"; + SOUND_SWIPEHIT2 = "zombie/claw_strike2.wav"; + SOUND_SWIPEMISS1 = "zombie/claw_miss1.wav"; + SOUND_SWIPEMISS2 = "zombie/claw_miss2.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STEP1 = "player/pl_dirt1.wav"; + SOUND_STEP2 = "player/pl_dirt2.wav"; + SOUND_PAIN_WEAK = "bullchicken/bc_pain2.wav"; + SOUND_PAIN_STRONG = "bullchicken/bc_pain1.wav"; + SOUND_WARCRY = "bullchicken/bc_attackgrowl3.wav"; + SOUND_LEAP = "bullchicken/bc_attackgrowl2.wav"; + SOUND_LEAP_LAND = "weapons/g_bounce2.wav"; + SOUND_FLINCH = "bullchicken/bc_pain3.wav"; + Precache(SOUND_DEATH); + WEAK_THRESHOLD = 1000; + SWIPE_DAMAGE = "$rand(50,75)"; + HEADBUTT_CHANCE = 1.0; + HEADBUTT_FREQ = 7.0; + HEADBUTT_DAMAGE = "$rand(50,75)"; + LEAP_DAMAGE = "$rand(10,30)"; + LEAP_STUNCHANCE = 0.3; + LEAP_RANGE_TOOFAR = 512; + LEAP_RANGE_TOOCLOSE = 128; + LEAP_AWAY_INTERVAL = 500; + FREQ_LEAP_AWAY = Random(5.0, 15.0); + DROP_GOLD = 1; + DROP_GOLD_MIN = 30; + DROP_GOLD_MAX = 50; + ATTACK_HITCHANCE = 0.95; + CAN_FLINCH = 1; + FLINCH_CHANCE = 0.2; + FLINCH_DELAY = 10.0; + FLINCH_HEALTH = 1500; + MONSTER_MODEL = "monsters/swamp_ogre.mdl"; + Precache(MONSTER_MODEL); + } + + void game_precache() + { + Precache("monsters/djinn_ogre_fire_cl"); + } + + void OnSpawn() override + { + SetName("Lesser Fire Djinn"); + SetHealth(2000); + SetRace("orc"); + if (!(START_SUSPEND)) + { + SetRoam(true); + } + SetModel(MONSTER_MODEL); + SetMoveAnim(ANIM_WALK); + SetHeight(64); + SetWidth(32); + SetHearingSensitivity(2); + SetBloodType("green"); + SetIdleAnim(ANIM_IDLE); + SetProp(GetOwner(), "skin", 5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("holy", 0.5); + RUN_STEP = 0; + if (!(true)) return; + if ((G_SHAD_PRESENT)) + { + SetRace("undead"); + SetProp(GetOwner(), "skin", 2); + } + else + { + SetRace("orc"); + } + CUR_SPECIAL = 1; + if (!(START_SUSPEND)) + { + ScheduleDelayedEvent(1.0, "idle_sounds"); + } + ScheduleDelayedEvent(2.0, "final_postspawn"); + } + + void npcatk_validatetarget() + { + if (!(IsValidPlayer(param1))) return; + if ((DID_WARCRY)) return; + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + } + + void my_target_died() + { + if (!(false)) + { + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 0; + if (!(LEAP_ENABLED)) + { + } + ScheduleDelayedEvent(1.0, "enable_leap"); + } + if ((false)) return; + ORC_JUMPING = 0; + } + + void enable_leap() + { + LEAP_ENABLED = 1; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetMonsterHP() < GetMonsterMaxHP()) + { + HealEntity(GetOwner(), 0.1); + } + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) <= LEAP_RANGE_TOOFAR)) return; + if (!(GetEntityRange(m_hAttackTarget) > LEAP_RANGE_TOOCLOSE)) return; + if (!(LEAP_ENABLED)) return; + if ((DOING_FIRE_STORM)) return; + if ((DOING_FIRE_BURST)) return; + LEAP_ENABLED = 0; + ScheduleDelayedEvent(5.0, "enable_leap"); + script_leap(); + } + + void script_leap() + { + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + if ((I_R_FROZEN)) return; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 600, 100)); + } + + void npc_selectattack() + { + if ((HEADBUTT_DELAY)) + { + ANIM_ATTACK = ANIM_SWIPE; + } + else + { + if (RandomInt(1, 100) < HEADBUTT_CHANCE) + { + ANIM_ATTACK = ANIM_HEADBUTT; + HEADBUTT_DELAY = 1; + HEADBUTT_FREQ("headbutt_reset"); + } + } + } + + void headbutt_reset() + { + HEADBUTT_DELAY = 0; + } + + void attack1() + { + SWIPE_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, SWIPE_DAMAGE, ATTACK_HITCHANCE); + } + + void attack2() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, HEADBUTT_DAMAGE, ATTACK_HITCHANCE); + HEADBUTT_ON = 1; + } + + void game_dodamage() + { + if ((HEADBUTT_ON)) + { + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_HEADBUTT, 10); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + ANIM_ATTACK = ANIM_SWIPE; + HEADBUTT_ON = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SWIPE_ATTACK)) return; + SWIPE_ATTACK = 0; + if ((param1)) + { + // PlayRandomSound from: SOUND_SWIPEHIT1, SOUND_SWIPEHIT2 + array sounds = {SOUND_SWIPEHIT1, SOUND_SWIPEHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(-100, 130, 120)); + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetMonsterHP() > WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (GetMonsterHP() <= WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((DOING_FIRE_STORM)) return; + if ((DOING_FIRE_BURST)) return; + if (param1 > 200) + { + if (GetGameTime() > NEXT_DMG_LEAP_AWAY) + { + } + NEXT_DMG_LEAP_AWAY = GetGameTime(); + NEXT_DMG_LEAP_AWAY += FREQ_LEAP_AWAY; + leap_away(); + } + } + + void leap_away() + { + PlayAnim("critical", ANIM_LEAP); + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "leap_boost"); + npcatk_suspend_ai(3.0); + } + + void leap_attack() + { + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + if ((CanSee("enemy", 128))) + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, LEAP_DAMAGE, ATTACK_HITCHANCE); + if (RandomInt(1, 100) < LEAP_STUNCHANCE) + { + ApplyEffect(GetEntityIndex(m_hLastSeen), "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + } + } + + void leap_done() + { + EmitSound(GetOwner(), 0, SOUND_LEAP_LAND, 10); + SetMoveAnim(ANIM_RUN); + } + + void npcatk_search_init_advanced() + { + if ((SEARCH_ANIM_DELAY)) return; + NPC_DELAYING_UNSTUCK = 10.0; + PlayAnim("critical", ANIM_SEARCH); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SEARCH_ANIM_DELAY = 1; + ScheduleDelayedEvent(5.0, "reset_search_anim"); + } + + void reset_search_anim() + { + SEARCH_ANIM_DELAY = 0; + } + + void OnFlinch() + { + EmitSound(GetOwner(), 0, SOUND_FLINCH, 10); + } + + void idle_sounds() + { + Random(3, 10)("idle_sounds"); + if (!(m_hAttackTarget == "unset")) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void run_step1() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 5); + } + + void run_step2() + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 5); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((ORC_JUMPING)) return; + if (!(IsValidPlayer(m_hAttackTarget))) return; + ORC_JUMPING = 1; + ScheduleDelayedEvent(1.0, "orc_jump_check"); + } + + void orc_jump_check() + { + if (!(ORC_JUMPING)) return; + ORC_HOP_DELAY("orc_jump_check"); + if ((IS_FLEEING)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(false)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > ORC_JUMP_THRESH) + { + orc_hop(); + } + } + + void orc_hop() + { + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + PlayAnim("critical", ANIM_LEAP); + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + int JUMP_HEIGHT = RandomInt(550, 650); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void bo_zombie_mode() + { + npc_suicide(); + } + + void cycle_up() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + if ((CL_REFRESH_LOOP_ON)) return; + CL_REFRESH_LOOP_ON = 1; + refresh_cl_loop(); + } + + void npc_targetsighted() + { + if ((DOING_FIRE_STORM)) return; + if ((DOING_FIRE_BURST)) return; + if ((SUSPEND_AI)) return; + if ((I_R_FROZEN)) return; + if (!(GetGameTime() > NEXT_SPECIAL)) return; + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + if (CUR_SPECIAL > 3) + { + CUR_SPECIAL = 1; + } + if (CUR_SPECIAL == 3) + { + if (GetEntityRange(m_hAttackTarget) < 512) + { + } + do_fire_burst(); + CUR_SPECIAL += 1; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (CUR_SPECIAL == 2) + { + if (GetEntityRange(m_hAttackTarget) < 512) + { + } + do_fire_burst(); + CUR_SPECIAL += 1; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (CUR_SPECIAL == 1) + { + if (GetEntityRange(m_hAttackTarget) < 256) + { + } + do_fire_storm(); + CUR_SPECIAL += 1; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + } + + void do_fire_burst() + { + DOING_FIRE_BURST = 1; + XDoDamage(GetEntityOrigin(GetOwner()), 128, DOT_FIRE_SPELL, 0, GetOwner(), GetOwner(), "none", "fire_effect"); + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_WARCRY); + PlayAnim("critical", ANIM_WARCRY); + ClientEvent("new", "all", "effects/sfx_fire_burst", GetEntityOrigin(GetOwner()), 768, 1, Vector3(255, 128, 0)); + BURST_TARGS = FindEntitiesInSphere("enemy", 768); + if (!(BURST_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + fire_burst_affect_targets(); + } + ScheduleDelayedEvent(1.5, "end_fire_burst"); + } + + void end_fire_burst() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + npcatk_resume_ai(); + npcatk_resume_movement(); + DOING_FIRE_BURST = 0; + } + + void fire_burst_affect_targets() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(IsOnGround(CUR_TARG))) + { + } + string EXIT_SUB = ""; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE_SPELL); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + + void do_fire_storm() + { + DOING_FIRE_STORM = 1; + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_BEAM); + PlayAnim("critical", ANIM_WARCRY); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + ClientEvent("update", "all", CL_IDX, "fire_storm_on"); + BREATH_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + BREATH_ANG -= 45; + if (BREATH_ANG < 0) + { + BREATH_ANG += 359; + } + BREATH_COUNT = 0; + ScheduleDelayedEvent(0.01, "fire_breath_loop"); + FIRE_BREATH_ON = 1; + // svplaysound: svplaysound 1 10 SOUND_BREATH + EmitSound(1, 10, SOUND_BREATH); + } + + void fire_breath_loop() + { + if (!(DOING_FIRE_STORM)) return; + BREATH_COUNT += 1; + if (BREATH_COUNT == 45) + { + end_fire_breath(); + } + if (!(BREATH_COUNT < 45)) return; + ScheduleDelayedEvent(0.05, "fire_breath_loop"); + BREATH_ANG += 1; + if (BREATH_ANG > 359) + { + BREATH_ANG -= 359; + } + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_ANG, 0), Vector3(0, 500, 0)); + SetMoveDest(FACE_POS); + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.25; + string SCAN_POINT = /* TODO: $relpos */ $relpos(0, 128, 0); + CLOUD_TARGS = /* TODO: $get_tbox */ $get_tbox("enemy", 128, SCAN_POINT); + if (CLOUD_TARGS != "none") + { + for (int i = 0; i < GetTokenCount(CLOUD_TARGS, ";"); i++) + { + burn_targets(); + } + } + } + + void burn_targets() + { + string CUR_TARGET = GetToken(CLOUD_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 256)) return; + ApplyEffect(CUR_TARGET, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DOT_FIRE_SPELL); + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(0, 800, 120)); + } + + void end_fire_breath() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += FREQ_SPECIAL; + ClientEvent("update", "all", CL_IDX, "fire_storm_off"); + npcatk_resume_ai(); + npcatk_resume_movement(); + // svplaysound: svplaysound 1 0 SOUND_BREATH + EmitSound(1, 0, SOUND_BREATH); + DOING_FIRE_STORM = 0; + } + + void final_postspawn() + { + LEAP_AWAY_INTERVAL = GetEntityHealth(GetOwner()); + LEAP_AWAY_INTERVAL *= 0.25; + if (!(NPC_ADJ_LEVEL >= 2)) return; + SetName("Fire Djinn"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (CL_IDX != "CL_IDX") + { + ClientEvent("update", "all", CL_IDX, "end_fx"); + } + } + + void refresh_cl_loop() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(10.0, "refresh_cl_loop"); + if (CL_IDX != "CL_IDX") + { + ClientEvent("update", "all", CL_IDX, "end_fx"); + } + ClientEvent("new", "all", "monsters/djinn_ogre_fire_cl", GetEntityIndex(GetOwner()), 10.0, DOING_FIRE_STORM); + CL_IDX = "game.script.last_sent_id"; + } + +} + +} diff --git a/scripts/angelscript/monsters/djinn_ogre_fire_cl.as b/scripts/angelscript/monsters/djinn_ogre_fire_cl.as new file mode 100644 index 00000000..256104ba --- /dev/null +++ b/scripts/angelscript/monsters/djinn_ogre_fire_cl.as @@ -0,0 +1,171 @@ +#pragma context server + +namespace MS +{ + +class DjinnOgreFireCl : CGameScript +{ + string CLOUD_ANG; + string FLAME_SPRITE; + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + int FX_STORM_ON; + string GLOW_COLOR; + int GLOW_RAD; + string LEFT_HAND_POS; + string MY_LIGHT_ID; + int N_FRAMES; + string RIGHT_HAND_POS; + + DjinnOgreFireCl() + { + GLOW_RAD = 128; + GLOW_COLOR = Vector3(255, 128, 0); + FLAME_SPRITE = "explode1.spr"; + N_FRAMES = 9; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + RIGHT_HAND_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + LEFT_HAND_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + } + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + SetCallback("render", "enable"); + FX_ACTIVE = 1; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + MY_LIGHT_ID = "game.script.last_light_id"; + RIGHT_HAND_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + LEFT_HAND_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + ClientEffect("tempent", "sprite", "Fire1_fixed.spr", RIGHT_HAND_POS, "setup_hand_sprite", "update_rhand_sprite"); + ClientEffect("tempent", "sprite", "Fire1_fixed.spr", LEFT_HAND_POS, "setup_hand_sprite", "update_lhand_sprite"); + if (param3 == 1) + { + fire_storm_on(); + } + FX_DURATION("end_fx"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + ClientEffect("light", MY_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void update_rhand_sprite() + { + if ((FX_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", RIGHT_HAND_POS); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + } + + void update_lhand_sprite() + { + if ((FX_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", LEFT_HAND_POS); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + } + + void fire_storm_on() + { + FX_STORM_ON = 1; + fire_storm_loop(); + } + + void fire_storm_off() + { + FX_STORM_ON = 0; + } + + void fire_storm_loop() + { + if (!(FX_STORM_ON)) return; + make_cloud(RIGHT_HAND_POS, /* TODO: $getcl */ $getcl(FX_OWNER, "angles")); + make_cloud(LEFT_HAND_POS, /* TODO: $getcl */ $getcl(FX_OWNER, "angles")); + ScheduleDelayedEvent(0.1, "fire_storm_loop"); + } + + void end_fx() + { + FX_ACTIVE = 0; + FX_STORM_ON = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void make_cloud() + { + string CLOUD_ORG = param1; + CLOUD_ANG = param2; + ClientEffect("tempent", "sprite", FLAME_SPRITE, CLOUD_ORG, "setup_cloud", "update_cloud"); + } + + void update_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < 2) + { + CUR_SCALE += 0.1; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", N_FRAME); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + ClientEffect("tempent", "set_current_prop", "angles", CLOUD_ANG); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(CLOUD_ANG, Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void setup_hand_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/djinn_troll_lesser_fire.as b/scripts/angelscript/monsters/djinn_troll_lesser_fire.as new file mode 100644 index 00000000..3d5f1e66 --- /dev/null +++ b/scripts/angelscript/monsters/djinn_troll_lesser_fire.as @@ -0,0 +1,76 @@ +#pragma context server + +#include "monsters/troll_lobber.as" + +namespace MS +{ + +class DjinnTrollLesserFire : CGameScript +{ + string BURST_ELEMENT; + int DMG_AOE; + int DOT_DMG; + float DOT_DUR; + string EFFECT_DOT; + string ELEMENT_COLOR; + string FX_BURST_SCRIPT; + string PROJ_SCRIPT; + int ROCK_DAMAGE; + int TROLL_EXP; + string TROLL_MODEL; + string TROLL_NAME; + + DjinnTrollLesserFire() + { + TROLL_EXP = 200; + PROJ_SCRIPT = "proj_troll_rock_fire"; + TROLL_MODEL = "monsters/troll_fire.mdl"; + TROLL_NAME = "Lesser Fire Djinn"; + ROCK_DAMAGE = 0; + DMG_AOE = RandomInt(300, 500); + DOT_DMG = RandomInt(40, 60); + DOT_DUR = 5.0; + FX_BURST_SCRIPT = "effects/sfx_fire_burst"; + EFFECT_DOT = "effects/dot_fire"; + ELEMENT_COLOR = Vector3(255, 0, 0); + BURST_ELEMENT = "fire_effect"; + } + + void game_precache() + { + Precache(FX_BURST_SCRIPT); + } + + void OnPostSpawn() override + { + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("holy", 1.5); + } + + void ext_proj_landed() + { + string L_BURST_POS = param1; + XDoDamage(param1, 256, DMG_AOE, 0.01, GetOwner(), GetOwner(), "none", BURST_ELEMENT, "dmgevent:proj"); + ClientEvent("new", "all", FX_BURST_SCRIPT, L_BURST_POS, 256, 1, ELEMENT_COLOR); + } + + void proj_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(GetOwner()) == "enemy")) return; + ApplyEffect(param2, EFFECT_DOT, DUR_DOT, GetEntityIndex(GetOwner()), DOT_DMG); + } + + void game_dodamage() + { + if (!((param5).findFirst("effect") >= 0)) return; + if (!(param1)) return; + if (!(GetRelationship(GetOwner()) == "enemy")) return; + if (!(RandomInt(1, 5) == 1)) return; + ApplyEffect(param2, EFFECT_DOT, DUR_DOT, GetEntityIndex(GetOwner()), DOT_DMG); + } + +} + +} diff --git a/scripts/angelscript/monsters/doom_plant1.as b/scripts/angelscript/monsters/doom_plant1.as new file mode 100644 index 00000000..d2283d6a --- /dev/null +++ b/scripts/angelscript/monsters/doom_plant1.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/summon/doom_plant.as" + +namespace MS +{ + +class DoomPlant1 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/doom_plant2.as b/scripts/angelscript/monsters/doom_plant2.as new file mode 100644 index 00000000..036ebe6a --- /dev/null +++ b/scripts/angelscript/monsters/doom_plant2.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/summon/doom_plant.as" + +namespace MS +{ + +class DoomPlant2 : CGameScript +{ + int START_STAGE; + + DoomPlant2() + { + START_STAGE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/doom_plant3.as b/scripts/angelscript/monsters/doom_plant3.as new file mode 100644 index 00000000..89bb84d0 --- /dev/null +++ b/scripts/angelscript/monsters/doom_plant3.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/summon/doom_plant.as" + +namespace MS +{ + +class DoomPlant3 : CGameScript +{ + int START_STAGE; + + DoomPlant3() + { + START_STAGE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/doom_plant_cl.as b/scripts/angelscript/monsters/doom_plant_cl.as new file mode 100644 index 00000000..b53929e2 --- /dev/null +++ b/scripts/angelscript/monsters/doom_plant_cl.as @@ -0,0 +1,77 @@ +#pragma context server + +namespace MS +{ + +class DoomPlantCl : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string SPUR_YAW; + string TRAIL_ANG; + + void client_activate() + { + FX_DURATION = param1; + FX_ACTIVE = 1; + FX_DURATION("end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.1, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void shoot_spur() + { + if (!(FX_ACTIVE)) return; + string SPUR_START = param1; + SPUR_YAW = param2; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", SPUR_START, "setup_spur", "update_spur"); + } + + void update_spur() + { + if (!(GetGameTime() > NEXT_SHADOW)) return; + string MY_ORG = "game.tempent.origin"; + TRAIL_ANG = "game.tempent.angles"; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", MY_ORG, "spur_trail"); + } + + void spur_trail() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.15); + ClientEffect("tempent", "set_current_prop", "fade", 0.15); + ClientEffect("tempent", "set_current_prop", "body", 24); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 7); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 50); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", TRAIL_ANG); + } + + void setup_spur() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "body", 24); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 7); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, SPUR_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, SPUR_YAW, 0), Vector3(0, 1000, 0))); + } + +} + +} diff --git a/scripts/angelscript/monsters/doom_plant_new.as b/scripts/angelscript/monsters/doom_plant_new.as new file mode 100644 index 00000000..aa9f219b --- /dev/null +++ b/scripts/angelscript/monsters/doom_plant_new.as @@ -0,0 +1,322 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class DoomPlantNew : CGameScript +{ + int AM_GROWING; + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string ATTACK_HITRANGE; + string ATTACK_RANGE; + float DMG_SLASH; + float DMG_SPORE; + float DMG_SPUR; + int DOT_POISON; + float FREQ_CL_REFRESH; + float FREQ_GROW; + float FREQ_IDLE; + float FREQ_SHOOT; + float FREQ_SPORE; + string GIB_MODEL; + string HALF_HP; + string LEVEL_PREFIX; + string NEXT_CL_REFRESH; + string NEXT_GROW; + string NEXT_IDLE; + string NEXT_SHOOT; + string NEXT_SPORE; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + int SLASH_ATTACK; + string SOUND_GIB; + string SOUND_GROW; + string SOUND_SCRATCH; + string SOUND_SLASH; + string SOUND_SPORE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SPORE_POISON_DMG; + string TREE_CL_INDEX; + int TREE_LEVEL; + + DoomPlantNew() + { + NPC_GIVE_EXP = 200; + NO_STUCK_CHECKS = 1; + DMG_SPUR = 5.0; + DMG_SLASH = 8.0; + DMG_SPORE = 50.0; + DOT_POISON = 30; + FREQ_GROW = 40.0; + FREQ_SHOOT = 0.5; + FREQ_SPORE = 15.0; + FREQ_CL_REFRESH = 20.0; + FREQ_IDLE = Random(3.0, 6.0); + GIB_MODEL = "cactusgibs.mdl"; + SOUND_GIB = "debris/bustflesh1.wav"; + SOUND_SLASH = "zombie/claw_miss1.wav"; + SOUND_SCRATCH = "headcrab/hc_attack1.wav"; + SOUND_SPORE = "weapons/bow/crossbow.wav"; + SOUND_GROW = "weapons/bow/stretch.wav"; + SOUND_STRUCK1 = "weapons/xbow_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/xbow_hitbod2.wav"; + Precache(GIB_MODEL); + } + + void OnSpawn() override + { + SetName("Doom Tree"); + SetModel("monsters/dewm_tree_combo.mdl"); + SetRace("demon"); + SetBloodType("green"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("fire", 1.5); + SetHealth(100); + SetNoPush(true); + SetHearingSensitivity(4); + SetWidth(48); + SetHeight(96); + TREE_LEVEL = 1; + AM_GROWING = 1; + ScheduleDelayedEvent(0.1, "setup_tree_level"); + ScheduleDelayedEvent(2.0, "set_final_params"); + } + + void set_final_params() + { + } + + void do_grow() + { + if (!(TREE_LEVEL < 3)) return; + TREE_LEVEL += 1; + AM_GROWING = 1; + setup_tree_level(); + } + + void setup_tree_level() + { + NEXT_GROW = GetGameTime(); + NEXT_GROW += FREQ_GROW; + TREE_LEVEL = int(TREE_LEVEL); + LEVEL_PREFIX = /* TODO: $stradd */ $stradd("level", TREE_LEVEL, _); + string TREE_LEVEL_M1 = TREE_LEVEL; + TREE_LEVEL_M1 -= 1; + SetModelBody(0, TREE_LEVEL_M1); + npcatk_suspend_ai(1.0); + if ((AM_GROWING)) + { + PlayAnim("critical", /* TODO: $stradd */ $stradd(LEVEL_PREFIX, "grow")); + } + AM_GROWING = 0; + ANIM_ATTACK = /* TODO: $stradd */ $stradd(LEVEL_PREFIX, "attack"); + ANIM_IDLE = /* TODO: $stradd */ $stradd(LEVEL_PREFIX, "idle1"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + ANIM_WALK = ANIM_IDLE; + ANIM_RUN = ANIM_IDLE; + int FINAL_HP = 100; + if (TREE_LEVEL == 1) + { + FINAL_HP *= 1.0; + } + if (TREE_LEVEL == 2) + { + FINAL_HP *= 5.0; + } + if (TREE_LEVEL == 3) + { + FINAL_HP *= 10.0; + } + if (TREE_LEVEL < 3) + { + ATTACK_RANGE = 72; + } + if (TREE_LEVEL == 3) + { + ATTACK_RANGE = 128; + } + ATTACK_HITRANGE = ATTACK_RANGE; + if (StringToLower(GetMapName()) == "underpath") + { + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + } + if (NPC_SET_RANGE != "NPC_SET_RANGE") + { + ATTACK_RANGE = NPC_SET_RANGE; + ATTACK_HITRANGE = NPC_SET_RANGE; + } + FINAL_HP *= NPC_HP_MULTI; + SetHealth(FINAL_HP); + HALF_HP = FINAL_HP; + HALF_HP *= 0.5; + } + + void grow_done() + { + npcatk_resume_ai(); + } + + void OnDamage(int damage) override + { + if (!(TREE_LEVEL > 1)) return; + if (!(GetEntityHealth(GetOwner()) < HALF_HP)) return; + SetDamage("dmg"); + SetDamage("hit"); + return; + do_shrink(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + EmitSound(GetOwner(), 0, SOUND_GIB, 10); + Effect("tempent", "gibs", GIB_MODEL, /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, 100, 30, 20, 4.0); + if ((TREE_SUMMONED)) + { + if ((IsEntityAlive(MY_OWNER))) + { + } + CallExternal(MY_OWNER, "plant_died"); + } + } + + void start_level2() + { + TREE_LEVEL = 2; + NPC_GIVE_EXP *= 2; + setup_tree_level(); + } + + void start_level3() + { + TREE_LEVEL = 3; + NPC_GIVE_EXP *= 3; + setup_tree_level(); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetGameTime() > NEXT_CL_REFRESH) + { + NEXT_CL_REFRESH = GetGameTime(); + NEXT_CL_REFRESH += FREQ_CL_REFRESH; + if (TREE_CL_INDEX != "TREE_CL_INDEX") + { + ClientEvent("update", "all", TREE_CL_INDEX, "remove_fx"); + } + ClientEvent("new", "all", "monsters/doom_plant_cl", FREQ_CL_REFRESH); + TREE_CL_INDEX = "game.script.last_sent_id"; + } + if (GetGameTime() > NEXT_GROW) + { + NEXT_GROW = GetGameTime(); + NEXT_GROW += FREQ_GROW; + do_grow(); + } + if ((SUSPEND_AI)) return; + if (m_hAttackTarget != "unset") + { + if ((false)) + { + } + if (TREE_LEVEL >= 2) + { + EmitSound(GetOwner(), 0, SOUND_SLASH, 10); + PlayAnim("once", ANIM_ATTACK); + } + } + if (TREE_LEVEL == 1) + { + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + } + int DO_IDLE = 1; + } + if (!(false)) + { + int DO_IDLE = 1; + } + if (!(DO_IDLE)) return; + if (!(GetGameTime() > NEXT_IDLE)) return; + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += FREQ_IDLE; + int RND_ANIM = RandomInt(1, 5); + PlayAnim("once", /* TODO: $stradd */ $stradd(LEVEL_PREFIX, "idle", RND_ANIM)); + } + + void spur_damage() + { + string L_DMG_SPUR = DMG_SPUR; + L_DMG_SPUR *= TREE_LEVEL; + DoDamage(m_hAttackTarget, "direct", L_DMG_SPUR, 1.0, GetOwner()); + } + + void attack_slash() + { + EmitSound(GetOwner(), 0, SOUND_SLASH, 10); + string L_DMG_SLASH = DMG_SLASH; + L_DMG_SLASH *= TREE_LEVEL; + SLASH_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_RANGE, L_DMG_SLASH, 1.0, GetOwner()); + if (!(TREE_LEVEL > 1)) return; + if (!(GetGameTime() > NEXT_SHOOT)) return; + NEXT_SHOOT = GetGameTime(); + NEXT_SHOOT += FREQ_SHOOT; + string TRACE_START = GetEntityOrigin(GetOwner()); + string MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + TRACE_START += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 32, 32)); + if (TREE_LEVEL == 3) + { + TRACE_START += "z"; + } + string TRACE_END = GetEntityOrigin(m_hAttackTarget); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + ClientEvent("update", "all", TREE_CL_INDEX, "shoot_spur", TRACE_START, GetEntityProperty(GetOwner(), "angles.yaw")); + ScheduleDelayedEvent(0.1, "spur_damage"); + if (!(TREE_LEVEL == 3)) return; + if (!(GetGameTime() > NEXT_SPORE)) return; + NEXT_SPORE = GetGameTime(); + NEXT_SPORE += FREQ_SPORE; + EmitSound(GetOwner(), 0, SOUND_SPORE, 10); + SPORE_POISON_DMG = DOT_POISON; + TossProjectile("proj_spore", /* TODO: $relpos */ $relpos(0, 32, 16), m_hAttackTarget, 500, DMG_SPORE, 0.1, "none"); + } + + void game_dodamage() + { + if ((SLASH_ATTACK)) + { + EmitSound(GetOwner(), 0, SOUND_SCRATCH, 10); + } + SLASH_ATTACK = 0; + } + + void do_shrink() + { + NEXT_GROW = GetGameTime(); + NEXT_GROW += FREQ_GROW; + PlayAnim("critical", /* TODO: $stradd */ $stradd(LEVEL_PREFIX, "shrink")); + TREE_LEVEL -= 1; + npcatk_suspend_ai(0.75); + } + + void shrink_done() + { + AM_GROWING = 0; + npcatk_resume_ai(); + setup_tree_level(); + } + +} + +} diff --git a/scripts/angelscript/monsters/dragon_guard.as b/scripts/angelscript/monsters/dragon_guard.as new file mode 100644 index 00000000..64a2dd9d --- /dev/null +++ b/scripts/angelscript/monsters/dragon_guard.as @@ -0,0 +1,2028 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_jumper.as" + +namespace MS +{ + +class DragonGuard : CGameScript +{ + string AM_WOUNDED; + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + string ANIM_ATTACK_DEFAULT; + string ANIM_ATTACK_REACH; + string ANIM_BREATH; + string ANIM_BREATH_LOOP; + string ANIM_CAUTIOUS_APPROACH; + string ANIM_CAUTIOUS_RETREAT; + string ANIM_DEATH; + string ANIM_DRINK; + string ANIM_IDLE; + string ANIM_IDLE_COMBAT; + string ANIM_IDLE_DEEP; + string ANIM_KICK; + string ANIM_NPC_JUMP; + string ANIM_RUN; + string ANIM_SHOCK; + string ANIM_THROW; + string ANIM_WALK; + string ANIM_WALK_HEARDSOUND; + string ANIM_WALK_WOUNDED; + string ATTACK_HITRANGE; + string ATTACK_MOVERANGE; + string ATTACK_RANGE; + string ATTACK_RANGE_DEFAULT; + int ATTACK_REACH_RANGE; + string ATTEMPTED_HEAL; + int BREATH_ATTACK; + string BREATH_CL_IDX; + int BREATH_DOT; + int BREATH_MIN_RANGE; + string BREATH_ON; + int BREATH_PUSH_VEL; + int BREATH_QUICK; + int BREATH_RANGE; + string BREATH_TARGS; + string BREATH_TYPE; + string BURST_START; + string BURST_TARGS; + int CAN_STUN; + int CAN_THROW; + int CAUTIOUS_APPROACH; + string DEFAULT_TAKDMG_ACID; + string DEFAULT_TAKDMG_COLD; + string DEFAULT_TAKDMG_FIRE; + string DEFAULT_TAKDMG_LIGHTNING; + string DEFAULT_TAKDMG_POISON; + int DG_FAURA; + int DG_FAURA_AOE; + string DG_FAURA_CLIDX; + float DG_FAURA_CL_RATE; + int DG_FAURA_DOT; + string DG_FAURA_NEXT_CL; + string DG_FAURA_SCAN; + string DG_SUSPEND; + int DID_INIT; + int DMG_CRESCENT; + int DMG_KICK; + int DMG_MELEE; + string DMG_MELEE_TYPE; + int DMG_STUN_BURST; + int DMG_XBOW; + string DO_HEAL; + string ELF_AIM_ANGLES; + string ELF_BOLT_LAND; + int ELF_XBOW_SHOT; + string EXPLOSIVE_BOLT; + int EXTEND_KICK_RANGE; + float EXT_DEMON_BLOOD_RATIO; + float FREQ_BREATH; + float FREQ_KICK; + float FREQ_REACH_ATTACK; + float FREQ_SHIELD_BASH; + string HALF_HP; + int HAS_DOT; + int HAS_SHIELD; + float HEAL_DELAY; + string HEAL_READY; + int HITRANGE_MELEE_STANDARD; + int HITRANGE_POLE_SHORT; + int IS_ARMORED; + int IS_BLACK; + int IS_GREEN; + int IS_RED; + int MELEE_ATTACK; + int MELEE_DOT; + int MELEE_DOT_DUR; + string MELEE_DOT_EFFECT; + int MELEE_VAMPIRE; + string MISS_COUNT; + int MOVERANGE_MELEE_STANDARD; + string MOVE_RANGE; + string NAME_PREF; + int NEVER_JUMPS; + string NEW_NAME; + string NEXT_ALERT_SOUND; + string NEXT_BREATH; + string NEXT_BREATH_REMOVE; + string NEXT_CALM; + string NEXT_CRE_THROW; + string NEXT_GLOAT; + string NEXT_HEAL; + string NEXT_KICK; + string NEXT_REACH_ATTACK; + string NEXT_SHIELD_BASH; + string NEXT_SPLODIE_BOLT; + int NO_ARMOR; + int NO_BREATH; + int NO_POTION; + int NO_REACH_ATTACK; + int NPC_GIVE_EXP; + int NPC_JUMPER; + int NPC_MUST_SEE_TARGET; + int NPC_NO_VADJ; + int NPC_RANGED; + string PLR_POT_ALERT_LIST; + string POT_HEAL; + int POT_SPECIAL; + string POT_TYPE; + string PROJECTILE_THROW; + string QUARTER_HP; + int RANGE_MELEE_STANDARD; + int RETREATS_NEAR_RANGE; + string RETREATS_NEAR_TYPE; + int RETREATS_WHEN_NEAR; + string SELECTED_RND_ARMOR; + string SELECTED_RND_POT; + string SELECTED_RND_WEP; + int SKIN_SET; + string SOUNDA_ATTACK1; + string SOUNDA_ATTACK2; + string SOUNDA_ATTACK3; + string SOUNDA_DEATH1; + string SOUNDA_DEATH2; + string SOUNDA_HEAL; + string SOUNDA_HEARD_ALERT1; + string SOUNDA_HEARD_ALERT2; + string SOUNDA_INVESTIGATE; + string SOUNDA_NPC_JUMP; + string SOUNDA_PAIN1; + string SOUNDA_PAIN2; + string SOUNDA_PAIN3; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BOLT_HIT; + string SOUND_BREATH_ACID_BOLT; + string SOUND_BREATH_ACID_READY; + string SOUND_BREATH_LIGHTNING; + string SOUND_BREATH_LIGHTNING_READY; + string SOUND_BREATH_LOOP; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_HEARD_ALERT1; + string SOUND_HEARD_ALERT2; + string SOUND_INVESTIGATE; + string SOUND_MELEE1; + string SOUND_MELEE2; + string SOUND_MELEE_LARGE; + string SOUND_NPC_JUMP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK_ARMOR1; + string SOUND_STRUCK_ARMOR2; + string SOUND_XBOW_SHOOT; + string SOUND_XBOW_STRETCH; + int STUN_BURST; + float STUN_CHANCE; + int TAKEDMG_ADJ_ACID; + int TAKEDMG_ADJ_COLD; + int TAKEDMG_ADJ_FIRE; + int TAKEDMG_ADJ_LIGHTNING; + int TAKEDMG_ADJ_POISON; + int WEAPON_TYPE; + int XBOW_ACCURACY; + + DragonGuard() + { + ANIM_CAUTIOUS_APPROACH = "cwalkf"; + ANIM_CAUTIOUS_RETREAT = "cwalkb"; + ANIM_DEATH = "death_long"; + ANIM_KICK = "kick"; + ANIM_SHOCK = "spasm"; + ANIM_THROW = "throwr"; + ANIM_DRINK = "drink"; + ANIM_WALK_HEARDSOUND = "cwalkf"; + ANIM_WALK_WOUNDED = "walkinj"; + ANIM_NPC_JUMP = "kick"; + ANIM_BREATH_LOOP = "breath_loop"; + ANIM_WALK = "walk"; + ANIM_IDLE = "deep_idle"; + ANIM_RUN = "run"; + SOUND_XBOW_STRETCH = "weapons/bow/stretch.wav"; + SOUND_XBOW_SHOOT = "weapons/bow/crossbow.wav"; + SOUND_BOLT_HIT = "weapons/bow/bolthit1.wav"; + TAKEDMG_ADJ_ACID = 0; + TAKEDMG_ADJ_COLD = 0; + TAKEDMG_ADJ_FIRE = 0; + TAKEDMG_ADJ_POISON = 0; + TAKEDMG_ADJ_LIGHTNING = 0; + SetGlobalVar("DEV_STRING", "Flags: "); + IS_GREEN = 1; + NPC_GIVE_EXP = 1500; + RANGE_MELEE_STANDARD = 64; + MOVERANGE_MELEE_STANDARD = 32; + HITRANGE_MELEE_STANDARD = 96; + HITRANGE_POLE_SHORT = 75; + FREQ_KICK = Random(20.0, 30.0); + FREQ_SHIELD_BASH = Random(10.0, 20.0); + HEAL_DELAY = 15.0; + DMG_STUN_BURST = 300; + DMG_CRESCENT = 60; + DMG_KICK = 100; + DG_FAURA_DOT = 100; + DG_FAURA_AOE = 64; + DG_FAURA_CL_RATE = 15.0; + DMG_XBOW = 100; + XBOW_ACCURACY = 75; + SOUND_HEARD_ALERT1 = "monsters/dg/c_lizardm_bat1.wav"; + SOUND_HEARD_ALERT2 = "monsters/dg/c_lizardm_bat2.wav"; + SOUND_PAIN1 = "monsters/dg/c_lizardm_hit1.wav"; + SOUND_PAIN2 = "monsters/dg/c_lizardm_hit2.wav"; + SOUND_NPC_JUMP = "monsters/dg/c_lizardm_atk1.wav"; + SOUND_DEATH1 = "monsters/dg/c_lizardm_dead.wav"; + SOUND_DEATH2 = "monsters/dg/vs_nlizardm_bye.wav"; + SOUND_INVESTIGATE = "monsters/dg/c_lizardmw_bat1.wav"; + SOUND_ATTACK1 = "monsters/dg/c_lizardm_atk1.wav"; + SOUND_ATTACK2 = "monsters/dg/c_lizardm_atk2.wav"; + SOUND_ATTACK3 = "monsters/dg/c_lizardm_atk3.wav"; + SOUNDA_HEARD_ALERT1 = "monsters/dg/c_lizardmc_bat1.wav"; + SOUNDA_HEARD_ALERT2 = "monsters/dg/c_lizardmw_bat2.wav"; + SOUNDA_PAIN1 = "monsters/dg/vs_nlizardm_hit1.wav"; + SOUNDA_PAIN2 = "monsters/dg/vs_nlizardm_hit2.wav"; + SOUNDA_PAIN3 = "monsters/dg/vs_nlizardm_hit3.wav"; + SOUNDA_NPC_JUMP = "monsters/dg/vs_nlizardm_atk1.wav"; + SOUNDA_DEATH1 = "monsters/dg/vs_nlizardm_dead.wav"; + SOUNDA_DEATH2 = "monsters/dg/vs_nlizardm_bye.wav"; + SOUNDA_INVESTIGATE = "monsters/dg/vs_nlizardm_bat2.wav"; + SOUNDA_ATTACK1 = "monsters/dg/vs_nlizardm_atk1.wav"; + SOUNDA_ATTACK2 = "monsters/dg/vs_nlizardm_atk2.wav"; + SOUNDA_ATTACK3 = "monsters/dg/vs_nlizardm_atk3.wav"; + SOUNDA_HEAL = "monsters/dg/vs_nlizardm_heal.wav"; + SOUND_BREATH_LOOP = "monsters/goblin/sps_fogfire.wav"; + SOUND_BREATH_ACID_READY = "bullchicken/bc_attack1.wav"; + SOUND_BREATH_ACID_BOLT = "bullchicken/bc_attack2.wav"; + SOUND_BREATH_LIGHTNING_READY = "debris/beamstart1.wav"; + SOUND_BREATH_LIGHTNING = "debris/zap1.wav"; + SOUND_MELEE1 = "zombie/claw_miss1.wav"; + SOUND_MELEE2 = "zombie/claw_miss2.wav"; + SOUND_MELEE_LARGE = "weapons/swinghuge.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_STRUCK_ARMOR1 = "weapons/axemetal1.wav"; + SOUND_STRUCK_ARMOR2 = "weapons/axemetal2.wav"; + NPC_JUMPER = 1; + } + + void game_precache() + { + Precache("monsters/dragon_guard_breath_cl"); + Precache("monsters/elf_xbow_cl"); + Precache(SOUND_DEATH1); + Precache(SOUND_DEATH2); + Precache(SOUNDA_DEATH1); + Precache(SOUNDA_DEATH2); + Precache("rain_mist.spr"); + Precache("explode1.spr"); + Precache("poison_cloud.spr"); + } + + void OnSpawn() override + { + SetName("Dragon Guard"); + SetModel("monsters/dragon_guard.mdl"); + SetWidth(32); + SetHeight(90); + SetRace("demon"); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetHealth(4000); + SetHearingSensitivity(6); + SetRoam(true); + SetDamageResistance("stun", 0.75); + if (!(true)) return; + PLR_POT_ALERT_LIST = ""; + ScheduleDelayedEvent(0.2, "pick_specials"); + ScheduleDelayedEvent(2.0, "dragon_guard_finalize"); + } + + void OnPostSpawn() override + { + EXT_DEMON_BLOOD_RATIO = 3.0; + ANIM_IDLE = ANIM_IDLE_DEEP; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + MOVE_RANGE = ATTACK_RANGE; + ANIM_ATTACK = ANIM_ATTACK1; + } + + void pick_specials() + { + if (!(NO_POTION)) + { + POT_HEAL = RandomInt(0, 1); + if ((POT_HEAL)) + { + if ((G_DEVELOPER_MODE)) + { + DEV_STRING += "Pot_Healing "; + } + NPC_GIVE_EXP += 200; + } + if (RandomInt(1, 5) == 1) + { + POT_SPECIAL = 1; + } + if ((POT_SPECIAL)) + { + } + int RND_POT = RandomInt(1, 4); + if (RND_POT == 1) + { + dg_potd(); + } + if (RND_POT == 2) + { + dg_potp(); + } + if (RND_POT == 3) + { + dg_potf(); + } + if (RND_POT == 4) + { + dg_pots(); + } + SELECTED_RND_POT = 1; + } + if (!(NO_BREATH)) + { + if (!(BREATH_ATTACK)) + { + } + if (RandomInt(1, 4) == 1) + { + } + int RND_BREATH = RandomInt(1, 5); + if (RND_BREATH == 1) + { + dg_bfir(); + } + if (RND_BREATH == 2) + { + dg_bice(); + } + if (RND_BREATH == 3) + { + dg_bpoi(); + } + if (RND_BREATH == 4) + { + dg_bacd(); + } + if (RND_BREATH == 5) + { + dg_blgt(); + } + } + if (!(IS_ARMORED)) + { + if (!(NO_ARMOR)) + { + } + if (RandomInt(1, 5) == 1) + { + } + dg_armr(); + SELECTED_RND_ARMOR = 1; + } + if (!(WEAPON_TYPE)) + { + int RND_WEP = RandomInt(1, 8); + SELECTED_RND_WEP = 1; + if (StringToLower(GetMapName()) == "nashalrath") + { + if (RND_WEP == 4) + { + int RND_WEP = 5; + } + } + if (RND_WEP == 6) + { + int L_STRIKE_COUNT = 1; + if ((SELECTED_RND_ARMOR)) + { + if ((IS_ARMORED)) + { + } + L_STRIKE_COUNT += 1; + } + if ((SELECTED_RND_POT)) + { + if (RND_POT == 4) + { + } + L_STRIKE_COUNT += 1; + } + if (L_STRIKE_COUNT == 3) + { + int RND_WEP = 5; + } + } + if (RND_WEP == 1) + { + dg_wice(); + } + if (RND_WEP == 2) + { + dg_wbow(); + } + if (RND_WEP == 3) + { + dg_wpol(); + } + if (RND_WEP == 4) + { + dg_wham(); + } + if (RND_WEP == 5) + { + dg_wcre(); + } + if (RND_WEP == 6) + { + dg_wdbl(); + } + if (RND_WEP == 7) + { + dg_wfrb(); + } + if (RND_WEP == 8) + { + dg_wgrb(); + } + } + } + + void dragon_guard_finalize() + { + if (!(NPC_CUSTOM_NAME)) + { + if (NAME_PREF != "NAME_PREF") + { + string L_NEW_NAME = NAME_PREF; + L_NEW_NAME += " "; + L_NEW_NAME += NEW_NAME; + NEW_NAME = L_NEW_NAME; + } + if (("aeiou").findFirst((NEW_NAME).substr(0, 0)) >= 0) + { + SetName("an"); + } + if (BREATH_TYPE == "lightning") + { + string L_START = (NEW_NAME).findFirst("Guard"); + string L_LEFT = (NEW_NAME).substr(0, L_START); + L_LEFT += "Thunderguard"; + string L_LEN = (NEW_NAME).length(); + L_LEN -= L_START; + L_LEN -= 5; + string L_RIGHT = (NEW_NAME).substr((NEW_NAME).length() - L_LEN); + NEW_NAME = L_LEFT; + NEW_NAME += L_RIGHT; + } + SetName(NEW_NAME); + } + ANIM_IDLE = ANIM_IDLE_DEEP; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + QUARTER_HP = GetEntityMaxHealth(GetOwner()); + QUARTER_HP *= 0.25; + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + if ((HAS_SHIELD)) + { + SetStat("parry", 150); + } + ATTACK_RANGE_DEFAULT = ATTACK_RANGE; + ANIM_ATTACK_DEFAULT = ANIM_ATTACK; + if (!(CAUTIOUS_APPROACH)) + { + ANIM_RUN = "run"; + } + float F_TAKEDMG_ADJ_ACID = 0.75; + float F_TAKEDMG_ADJ_COLD = 0.75; + float F_TAKEDMG_ADJ_FIRE = 0.75; + float F_TAKEDMG_ADJ_POISON = 0.75; + float F_TAKEDMG_ADJ_LIGHTNING = 0.75; + if ((IS_GREEN)) + { + F_TAKEDMG_ADJ_ACID += -0.25; + F_TAKEDMG_ADJ_POISON += -0.25; + F_TAKEDMG_ADJ_LIGHTNING += 0.25; + } + if ((IS_RED)) + { + F_TAKEDMG_ADJ_FIRE += -1.0; + F_TAKEDMG_ADJ_COLD += 0.5; + } + if ((IS_BLACK)) + { + F_TAKEDMG_ADJ_ACID += -0.5; + F_TAKEDMG_ADJ_FIRE += -0.5; + F_TAKEDMG_ADJ_COLD += -0.5; + F_TAKEDMG_ADJ_POISON += -0.5; + F_TAKEDMG_ADJ_LIGHTNING += -0.5; + SetDamageResistance("holy", 2.0); + SetDamageResistance("stun", 0.25); + } + if ((IS_ARMORED)) + { + string L_ADJ = /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "stun"); + L_ADJ -= 0.25; + SetDamageResistance("stun", L_ADJ); + } + DEFAULT_TAKDMG_ACID = F_TAKEDMG_ADJ_ACID; + DEFAULT_TAKDMG_COLD = F_TAKEDMG_ADJ_COLD; + DEFAULT_TAKDMG_FIRE = F_TAKEDMG_ADJ_FIRE; + DEFAULT_TAKDMG_POISON = F_TAKEDMG_ADJ_POISON; + DEFAULT_TAKDMG_LIGHTNING = F_TAKEDMG_ADJ_LIGHTNING; + F_TAKEDMG_ADJ_ACID += TAKEDMG_ADJ_ACID; + F_TAKEDMG_ADJ_COLD += TAKEDMG_ADJ_COLD; + F_TAKEDMG_ADJ_FIRE += TAKEDMG_ADJ_FIRE; + F_TAKEDMG_ADJ_POISON += TAKEDMG_ADJ_POISON; + F_TAKEDMG_ADJ_LIGHTNING += TAKEDMG_ADJ_LIGHTNING; + if (F_TAKEDMG_ADJ_ACID < 0) + { + int F_TAKEDMG_ADJ_ACID = 0; + } + if (F_TAKEDMG_ADJ_COLD < 0) + { + int F_TAKEDMG_ADJ_COLD = 0; + } + if (F_TAKEDMG_ADJ_FIRE < 0) + { + int F_TAKEDMG_ADJ_FIRE = 0; + } + if (F_TAKEDMG_ADJ_POISON < 0) + { + int F_TAKEDMG_ADJ_POISON = 0; + } + if (F_TAKEDMG_ADJ_LIGHTNING < 0) + { + int F_TAKEDMG_ADJ_LIGHTNING = 0; + } + if (F_TAKEDMG_ADJ_ACID > 3) + { + int F_TAKEDMG_ADJ_ACID = 3; + } + if (F_TAKEDMG_ADJ_COLD > 3) + { + int F_TAKEDMG_ADJ_COLD = 3; + } + if (F_TAKEDMG_ADJ_FIRE > 3) + { + int F_TAKEDMG_ADJ_FIRE = 3; + } + if (F_TAKEDMG_ADJ_POISON > 3) + { + int F_TAKEDMG_ADJ_POISON = 3; + } + if (F_TAKEDMG_ADJ_LIGHTNING > 3) + { + int F_TAKEDMG_ADJ_LIGHTNING = 3; + } + SetDamageResistance("acid", F_TAKEDMG_ADJ_ACID); + SetDamageResistance("cold", F_TAKEDMG_ADJ_COLD); + SetDamageResistance("fire", F_TAKEDMG_ADJ_FIRE); + SetDamageResistance("poison", F_TAKEDMG_ADJ_POISON); + SetDamageResistance("lightning", F_TAKEDMG_ADJ_LIGHTNING); + if ((G_DEVELOPER_MODE)) + { + SetSayTextRange(1024); + dev_text(); + } + } + + void dev_text() + { + SayText(DEV_STRING); + SayText("Takedmg: acd: " + /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "acid") + "cld: " + /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "cold") + "fir: " + /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "fire") + "poi: " + /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "poison") + "lgt: " + /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "lightning") + "stun: " + IMMUNE_STUN); + SayText("hp: " + GetEntityMaxHealth(GetOwner()) + "exp: " + NPC_GIVE_EXP); + LogDebug("DEV_STRING"); + LogDebug("Takedmg: acd: /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "acid") cld: /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "cold") fir: /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "fire") poi: /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "poison") lgt: /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "lightning") stun: IMMUNE_STUN"); + LogDebug("hp: GetEntityMaxHealth(GetOwner()) exp: NPC_GIVE_EXP"); + } + + void dg_narm() + { + NO_ARMOR = 1; + } + + void dg_armr() + { + IS_ARMORED = 1; + SetModelBody(0, 1); + SetDamageResistance("all", 0.5); + NPC_GIVE_EXP += 350; + } + + void dg_red() + { + if ((SKIN_SET)) + { + SendInfoMsg("all", "MAPPER ERROR Two skins set on Dragon Guard"); + } + if ((SKIN_SET)) return; + SKIN_SET = 1; + IS_RED = 1; + IS_GREEN = 0; + IS_BLACK = 0; + SetProp(GetOwner(), "skin", 1); + NPC_GIVE_EXP += 50; + } + + void dg_black() + { + if ((SKIN_SET)) + { + SendInfoMsg("all", "MAPPER ERROR Two skins set on Dragon Guard"); + } + if ((SKIN_SET)) return; + SKIN_SET = 1; + IS_BLACK = 1; + IS_GREEN = 0; + IS_RED = 0; + SetProp(GetOwner(), "skin", 2); + NPC_GIVE_EXP += 1000; + } + + void dg_wice() + { + if ((WEAPON_TYPE)) return; + WEAPON_TYPE = 1; + SetModelBody(1, WEAPON_TYPE); + NPC_GIVE_EXP += 200; + ATTACK_REACH_RANGE = 128; + ATTACK_RANGE = RANGE_MELEE_STANDARD; + ATTACK_HITRANGE = HITRANGE_MELEE_STANDARD; + ATTACK_MOVERANGE = MOVERANGE_MELEE_STANDARD; + ANIM_IDLE_COMBAT = "combat_idle"; + ANIM_IDLE_DEEP = "deep_idle"; + ANIM_ATTACK1 = "1h_slash1"; + ANIM_ATTACK2 = "1h_slash2"; + ANIM_ATTACK_REACH = "1h_reach"; + NPC_JUMPER = 1; + FREQ_REACH_ATTACK = 15.0; + CAUTIOUS_APPROACH = 0; + DMG_MELEE = 200; + DMG_MELEE_TYPE = "slash"; + HAS_DOT = 1; + MELEE_DOT_DUR = 5; + MELEE_DOT = 50; + MELEE_DOT_EFFECT = "effects/dot_cold"; + NEW_NAME = "Dragon Guard Iceblade"; + } + + void dg_wbow() + { + if ((WEAPON_TYPE)) return; + WEAPON_TYPE = 2; + SetModelBody(1, WEAPON_TYPE); + NPC_GIVE_EXP -= 200; + ATTACK_RANGE = 1024; + ATTACK_MOVERANGE = 384; + ATTACK_HITRANGE = 1024; + NO_REACH_ATTACK = 1; + NPC_NO_VADJ = 1; + ANIM_IDLE_COMBAT = "xbowrdy"; + ANIM_IDLE_DEEP = "deep_idle"; + ANIM_ATTACK1 = "xbowshot"; + ANIM_ATTACK2 = "xbowshot"; + NPC_JUMPER = 0; + NEVER_JUMPS = 1; + FREQ_KICK = 8.0; + EXTEND_KICK_RANGE = 1; + RETREATS_WHEN_NEAR = 1; + RETREATS_NEAR_RANGE = 72; + RETREATS_NEAR_TYPE = "flee"; + ATTACK_REACH_RANGE = 128; + CAUTIOUS_APPROACH = 0; + NPC_RANGED = 1; + DMG_MELEE = 200; + DMG_MELEE_TYPE = "pierce"; + HAS_DOT = 1; + MELEE_DOT_DUR = 5; + MELEE_DOT = 50; + MELEE_DOT_EFFECT = "effects/dot_poison"; + NEW_NAME = "Dragon Guard Bowman"; + } + + void dg_wpol() + { + if ((WEAPON_TYPE)) return; + WEAPON_TYPE = 3; + SetModelBody(1, WEAPON_TYPE); + NPC_GIVE_EXP += 150; + ATTACK_REACH_RANGE = 196; + ATTACK_RANGE = 128; + ATTACK_HITRANGE = 190; + ATTACK_MOVERANGE = 96; + NPC_JUMPER = 1; + NPC_MUST_SEE_TARGET = 0; + ANIM_IDLE_COMBAT = "pole_idle2"; + ANIM_IDLE_DEEP = "pole_idle1"; + ANIM_ATTACK1 = "pole_close"; + ANIM_ATTACK2 = "plparryl"; + ANIM_ATTACK_REACH = "pole_reach"; + FREQ_REACH_ATTACK = 1.0; + FREQ_KICK = 8.0; + RETREATS_WHEN_NEAR = 1; + RETREATS_NEAR_RANGE = 96; + RETREATS_NEAR_TYPE = "walk"; + CAUTIOUS_APPROACH = 1; + DMG_MELEE = 600; + DMG_MELEE_TYPE = "pierce"; + HAS_DOT = 0; + NEW_NAME = "Dragon Guard Pikeman"; + } + + void dg_wham() + { + if ((WEAPON_TYPE)) return; + WEAPON_TYPE = 4; + SetModelBody(1, WEAPON_TYPE); + NPC_GIVE_EXP += 400; + ATTACK_REACH_RANGE = 196; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 110; + ATTACK_MOVERANGE = 48; + NPC_JUMPER = 1; + FREQ_KICK = 9999; + ANIM_IDLE_COMBAT = "2w_idle"; + ANIM_IDLE_DEEP = "combat_idle"; + ANIM_ATTACK1 = "2hclosel"; + ANIM_ATTACK2 = "2hcloseh"; + ANIM_ATTACK_REACH = "hammer_reach"; + FREQ_REACH_ATTACK = 15.0; + CAUTIOUS_APPROACH = 0; + DMG_MELEE = 400; + DMG_MELEE_TYPE = "blunt"; + HAS_DOT = 0; + CAN_STUN = 1; + STUN_BURST = 1; + STUN_CHANCE = 0.25; + NEW_NAME = "Dragon Guard Mauler"; + } + + void dg_wcre() + { + if ((WEAPON_TYPE)) return; + WEAPON_TYPE = 5; + SetModelBody(1, WEAPON_TYPE); + NPC_GIVE_EXP += 200; + ATTACK_REACH_RANGE = 128; + ATTACK_RANGE = 52; + ATTACK_HITRANGE = 70; + ATTACK_MOVERANGE = MOVERANGE_MELEE_STANDARD; + NPC_JUMPER = 1; + FREQ_KICK = Random(10.0, 15.0); + ANIM_IDLE_COMBAT = "2w_readyvs"; + ANIM_IDLE_DEEP = "2w_idle"; + ANIM_ATTACK1 = "2wslashl"; + ANIM_ATTACK2 = "2wcloseh"; + ANIM_ATTACK_REACH = "2wreach"; + FREQ_REACH_ATTACK = 10.0; + CAUTIOUS_APPROACH = 1; + DMG_MELEE = 100; + DMG_MELEE_TYPE = "slash"; + HAS_DOT = 1; + MELEE_DOT = 50; + MELEE_DOT_DUR = 5; + MELEE_DOT_EFFECT = "effects/dot_poison"; + CAN_THROW = 1; + PROJECTILE_THROW = "proj_crescent"; + NEW_NAME = "Dragon Guard Ravager"; + } + + void dg_wdbl() + { + if ((WEAPON_TYPE)) return; + WEAPON_TYPE = 6; + SetModelBody(1, WEAPON_TYPE); + NPC_GIVE_EXP += 250; + ATTACK_REACH_RANGE = 128; + ATTACK_RANGE = RANGE_MELEE_STANDARD; + ATTACK_HITRANGE = HITRANGE_MELEE_STANDARD; + ATTACK_MOVERANGE = MOVERANGE_MELEE_STANDARD; + NPC_JUMPER = 1; + ANIM_IDLE_COMBAT = "2w_readyvs"; + ANIM_IDLE_DEEP = "deep_idle"; + ANIM_ATTACK1 = "2wslashl"; + ANIM_ATTACK2 = "2wcloseh"; + ANIM_ATTACK_REACH = "2wreach"; + FREQ_REACH_ATTACK = 10.0; + CAUTIOUS_APPROACH = 1; + DMG_MELEE = 150; + DMG_MELEE_TYPE = "dark"; + HAS_DOT = 0; + MELEE_VAMPIRE = 1; + NEW_NAME = "Dragon Guard Bladesman"; + } + + void dg_wfrb() + { + if ((WEAPON_TYPE)) return; + WEAPON_TYPE = 7; + SetModelBody(1, WEAPON_TYPE); + NPC_GIVE_EXP += 150; + TAKEDMG_ADJ_FIRE += -0.5; + ATTACK_REACH_RANGE = 128; + ATTACK_RANGE = RANGE_MELEE_STANDARD; + ATTACK_HITRANGE = HITRANGE_MELEE_STANDARD; + ATTACK_MOVERANGE = MOVERANGE_MELEE_STANDARD; + NPC_JUMPER = 1; + FREQ_KICK = 9999; + ANIM_IDLE_COMBAT = "2w_idle"; + ANIM_IDLE_DEEP = "deep_idle"; + ANIM_ATTACK1 = "1h_slash1"; + ANIM_ATTACK2 = "1h_slash2"; + ANIM_ATTACK_REACH = "1h_reach"; + FREQ_REACH_ATTACK = 10.0; + CAUTIOUS_APPROACH = 1; + HAS_SHIELD = 1; + DMG_MELEE = 200; + DMG_MELEE_TYPE = "slash"; + HAS_DOT = 1; + MELEE_DOT = 150; + MELEE_DOT_DUR = 5; + MELEE_DOT_EFFECT = "effects/dot_fire"; + NEW_NAME = "Dragon Guard Flameblade"; + } + + void dg_wgrb() + { + if ((WEAPON_TYPE)) return; + WEAPON_TYPE = 8; + SetModelBody(1, WEAPON_TYPE); + NPC_GIVE_EXP += 200; + TAKEDMG_ADJ_POISON += -0.5; + ATTACK_REACH_RANGE = 128; + ATTACK_RANGE = RANGE_MELEE_STANDARD; + ATTACK_HITRANGE = HITRANGE_MELEE_STANDARD; + ATTACK_MOVERANGE = MOVERANGE_MELEE_STANDARD; + NPC_JUMPER = 1; + FREQ_KICK = 9999; + ANIM_IDLE_COMBAT = "2w_idle"; + ANIM_IDLE_DEEP = "deep_idle"; + ANIM_ATTACK1 = "1h_slash1"; + ANIM_ATTACK2 = "1h_slash2"; + ANIM_ATTACK_REACH = "1h_reach"; + FREQ_REACH_ATTACK = 10.0; + CAUTIOUS_APPROACH = 1; + HAS_SHIELD = 1; + HAS_DOT = 1; + DMG_MELEE = 150; + DMG_MELEE_TYPE = "slash"; + MELEE_DOT = 50; + MELEE_DOT_DUR = 10; + MELEE_DOT_EFFECT = "effects/dot_poison"; + NEW_NAME = "Dragon Guard Plaguebringer"; + } + + void dg_bfir() + { + if ((G_DEVELOPER_MODE)) + { + DEV_STRING += "Breath_Fire "; + } + NAME_PREF = "Infernal"; + BREATH_ATTACK = 1; + BREATH_TYPE = "fire"; + NPC_GIVE_EXP += 100; + BREATH_DOT = 200; + ANIM_BREATH = "breath_start"; + BREATH_MIN_RANGE = 0; + BREATH_PUSH_VEL = 200; + TAKEDMG_ADJ_FIRE += -0.5; + TAKEDMG_ADJ_COLD += 0.75; + BREATH_RANGE = 256; + FREQ_BREATH = 20.0; + } + + void dg_bice() + { + if ((IS_RED)) return; + if ((G_DEVELOPER_MODE)) + { + DEV_STRING += "Breath_Cold "; + } + NAME_PREF = "Freezing"; + LogDebug("dg_bice"); + BREATH_ATTACK = 1; + BREATH_TYPE = "cold"; + NPC_GIVE_EXP += 200; + TAKEDMG_ADJ_FIRE += 0.75; + TAKEDMG_ADJ_COLD += -0.5; + BREATH_DOT = 50; + BREATH_MIN_RANGE = 0; + BREATH_PUSH_VEL = 0; + ANIM_BREATH = "breath_start"; + FREQ_BREATH = 20.0; + BREATH_RANGE = 256; + } + + void dg_bpoi() + { + if ((G_DEVELOPER_MODE)) + { + DEV_STRING += "Breath_Poison "; + } + NAME_PREF = "Noxious"; + BREATH_ATTACK = 1; + BREATH_TYPE = "poison"; + NPC_GIVE_EXP += 100; + TAKEDMG_ADJ_POISON += -0.5; + TAKEDMG_ADJ_ACID += -0.5; + TAKEDMG_ADJ_LIGHTNING += 0.75; + BREATH_DOT = 50; + ANIM_BREATH = "breath_start"; + BREATH_MIN_RANGE = 0; + BREATH_PUSH_VEL = 200; + FREQ_BREATH = 20.0; + BREATH_RANGE = 256; + } + + void dg_bacd() + { + if ((G_DEVELOPER_MODE)) + { + DEV_STRING += "Breath_Acid "; + } + NAME_PREF = "Caustic"; + BREATH_ATTACK = 1; + BREATH_TYPE = "acid"; + NPC_GIVE_EXP += 100; + TAKEDMG_ADJ_ACID += -0.5; + TAKEDMG_ADJ_LIGHTNING += 0.5; + ANIM_BREATH = "breath_quick"; + BREATH_QUICK = 1; + FREQ_BREATH = 6.0; + BREATH_RANGE = 1024; + BREATH_MIN_RANGE = 150; + } + + void dg_blgt() + { + if ((G_DEVELOPER_MODE)) + { + DEV_STRING += "Breath_lightning "; + } + BREATH_ATTACK = 1; + BREATH_TYPE = "lightning"; + NPC_GIVE_EXP += 100; + TAKEDMG_ADJ_ACID += 0.75; + TAKEDMG_ADJ_POISON += 0.5; + TAKEDMG_ADJ_LIGHTNING += -0.5; + ANIM_BREATH = "breath_quick"; + BREATH_QUICK = 1; + FREQ_BREATH = 6.0; + BREATH_RANGE = 1024; + BREATH_MIN_RANGE = 0; + } + + void dg_nbrt() + { + NO_BREATH = 1; + } + + void dg_npot() + { + NO_POTION = 1; + } + + void dg_potd() + { + if ((G_DEVELOPER_MODE)) + { + DEV_STRING += "Pot_Demonblood "; + } + NO_POTION = 1; + POT_SPECIAL = 1; + POT_TYPE = "demon"; + NPC_GIVE_EXP += 750; + } + + void dg_potp() + { + if ((G_DEVELOPER_MODE)) + { + DEV_STRING += "Pot_Protection"; + } + NO_POTION = 1; + POT_SPECIAL = 1; + POT_TYPE = "protection"; + NPC_GIVE_EXP += 200; + } + + void dg_potf() + { + if ((G_DEVELOPER_MODE)) + { + DEV_STRING += "Pot_Faura "; + } + NO_POTION = 1; + POT_SPECIAL = 1; + POT_TYPE = "faura"; + NPC_GIVE_EXP += 100; + } + + void dg_pots() + { + if ((G_DEVELOPER_MODE)) + { + DEV_STRING += "Pot_Speed "; + } + NO_POTION = 1; + POT_SPECIAL = 1; + POT_TYPE = "speed"; + NPC_GIVE_EXP += 500; + } + + void npc_targetsighted() + { + if ((DID_INIT)) return; + DID_INIT = 1; + float GAME_TIME = GetGameTime(); + NEXT_ALERT_SOUND = GAME_TIME; + NEXT_ALERT_SOUND += 10.0; + NEXT_KICK = GAME_TIME; + NEXT_KICK += FREQ_KICK; + NEXT_BREATH = GAME_TIME; + NEXT_BREATH += FREQ_BREATH; + if ((IS_ARMORED)) + { + if (RandomInt(1, 3) == 1) + { + } + // PlayRandomSound from: SOUNDA_HEARD_ALERT1, SOUNDA_HEARD_ALERT2 + array sounds = {SOUNDA_HEARD_ALERT1, SOUNDA_HEARD_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (RandomInt(1, 5) == 1) + { + } + // PlayRandomSound from: SOUND_HEARD_ALERT1, SOUND_HEARD_ALERT2 + array sounds = {SOUND_HEARD_ALERT1, SOUND_HEARD_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (StringToLower(GetMapName()) == "nashalrath") + { + string MAH_DADDY = FindEntityByName("gdragon_img"); + if (!(IsEntityAlive(MAH_DADDY))) + { + } + CallExternal(m_hAttackTarget, "ext_play_music", "DemonicFlesh2.mp3"); + } + if (!(POT_SPECIAL)) return; + npcatk_suspend_ai(2.0); + PlayAnim("critical", ANIM_DRINK); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) + { + string L_LAST_AI_SUSPEND_PLUS10 = NPC_LAST_SUSPEND_AI; + L_LAST_AI_SUSPEND_PLUS10 += 10.0; + if (GetGameTime() > L_LAST_AI_SUSPEND_PLUS10) + { + LogDebug("AI SUSPENDED TOO LONG"); + npcatk_resume_ai(); + DG_SUSPEND = 0; + } + } + if ((SUSPEND_AI)) return; + if (ATTACK_HITRANGE < ATTACK_RANGE) + { + ATTACK_HITRANGE = ATTACK_RANGE; + ATTACK_HITRANGE *= 1.25; + } + float GAME_TIME = GetGameTime(); + if (!(m_hAttackTarget != "unset")) return; + if ((HEAL_READY)) + { + if (!(ATTEMPTED_HEAL)) + { + } + if (GAME_TIME > NEXT_HEAL) + { + } + SetModelBody(1, 10); + DO_HEAL = 1; + ATTEMPTED_HEAL = 1; + npcatk_suspend_ai(2.0); + PlayAnim("critical", ANIM_DRINK); + if ((IS_ARMORED)) + { + EmitSound(GetOwner(), 0, SOUNDA_HEAL, 10); + } + ScheduleDelayedEvent(5.0, "reset_weapon_submodel"); + } + if ((SUSPEND_AI)) return; + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if ((BREATH_ATTACK)) + { + if (GAME_TIME > NEXT_BREATH) + { + } + if (TARG_RANGE < BREATH_RANGE) + { + } + if (TARG_RANGE > BREATH_MIN_RANGE) + { + } + if ((false)) + { + } + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + PlayAnim("critical", ANIM_BREATH); + DG_SUSPEND = GAME_TIME; + if ((BREATH_QUICK)) + { + DG_SUSPEND += 1.0; + } + else + { + DG_SUSPEND += 2.5; + } + } + if (!(GAME_TIME > DG_SUSPEND)) return; + if ((CAUTIOUS_APPROACH)) + { + if (TARG_RANGE < 256) + { + if (GetEntityHealth(GetOwner()) > QUARTER_HP) + { + } + if (GAME_TIME > NEXT_CALM) + { + } + ANIM_RUN = ANIM_CAUTIOUS_APPROACH; + SetMoveAnim(ANIM_RUN); + } + else + { + if (GetEntityHealth(GetOwner()) > QUARTER_HP) + { + } + ANIM_RUN = "run"; + SetMoveAnim(ANIM_RUN); + } + } + else + { + if (GetEntityHealth(GetOwner()) > QUARTER_HP) + { + } + SetMoveAnim(ANIM_RUN); + } + if ((BREATH_ON)) + { + if (GAME_TIME > NEXT_BREATH_REMOVE) + { + } + NEXT_BREATH_REMOVE = ""; + NEXT_BREATH_REMOVE += 1.0; + BREATH_ON = 0; + ClientEvent("update", "all", BREATH_CL_IDX, "end_fx"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((RETREATS_WHEN_NEAR)) + { + if (TARG_RANGE < RETREATS_NEAR_RANGE) + { + } + if (GAME_TIME > NEXT_BACK_OFF) + { + } + if (RETREATS_NEAR_TYPE == "walk") + { + PlayAnim("critical", ANIM_CAUTIOUS_RETREAT); + NEXT_BACK_OFF = GAME_TIME; + NEXT_BACK_OFF += 10.0; + } + if (RETREATS_NEAR_TYPE == "flee") + { + if (GetEntityHealth(GetOwner()) > QUARTER_HP) + { + ANIM_RUN = "run"; + SetMoveAnim(ANIM_RUN); + } + else + { + ANIM_RUN = "walkinj"; + SetMoveAnim(ANIM_RUN); + } + npcatk_flee(m_hAttackTarget, 512, 2.0); + NEXT_BACK_OFF = GAME_TIME; + NEXT_BACK_OFF += 20.0; + } + } + if (!(NO_REACH_ATTACK)) + { + if (WEAPON_TYPE != 3) + { + } + if (TARG_RANGE < ATTACK_REACH_RANGE) + { + } + if (GAME_TIME > NEXT_REACH_ATTACK) + { + } + NEXT_REACH_ATTACK = GAME_TIME; + NEXT_REACH_ATTACK += FREQ_REACH_ATTACK; + ATTACK_RANGE = ATTACK_REACH_RANGE; + ANIM_ATTACK = ANIM_ATTACK_REACH; + } + if (WEAPON_TYPE == 3) + { + if (TARG_RANGE < 70) + { + int RND_ATK = RandomInt(1, 2); + if (RND_ATK == 1) + { + ANIM_ATTACK = "plparryl"; + } + if (RND_ATK == 2) + { + ANIM_ATTACK = "pole_close"; + } + } + else + { + ANIM_ATTACK = "pole_reach"; + } + } + if (WEAPON_TYPE == 5) + { + if (GAME_TIME > NEXT_CRE_THROW) + { + } + if ((false)) + { + } + NEXT_CRE_THROW = GetGameTime(); + NEXT_CRE_THROW += 3.0; + PlayAnim("critical", ANIM_THROW); + } + if ((HAS_SHIELD)) + { + if (TARG_RANGE < 48) + { + } + if (GAME_TIME > NEXT_SHIELD_BASH) + { + } + NEXT_SHIELD_BASH = GAME_TIME; + NEXT_SHIELD_BASH += FREQ_SHIELD_BASH; + PlayAnim("critical", "shieldl"); + } + if (GAME_TIME > NEXT_KICK) + { + if (!(AM_WOUNDED)) + { + } + string L_KICK_RANGE = MOVERANGE_MELEE_STANDARD; + if ((EXTEND_KICK_RANGE)) + { + string L_KICK_RANGE = RANGE_MELEE_STANDARD; + } + if (GetEntityRange(m_hAttackTarget) < L_KICK_RANGE) + { + } + ANIM_ATTACK = ANIM_KICK; + NEXT_KICK = GetGameTime(); + NEXT_KICK += FREQ_KICK; + NEXT_KICK += 2.0; + int EXIT_SUB = 1; + } + else + { + string L_KICK_RANGE = MOVERANGE_MELEE_STANDARD; + if ((EXTEND_KICK_RANGE)) + { + string L_KICK_RANGE = RANGE_MELEE_STANDARD; + } + if (GetEntityRange(m_hAttackTarget) > L_KICK_RANGE) + { + } + if (ANIM_ATTACK == ANIM_KICK) + { + } + ANIM_ATTACK = ANIM_ATTACK1; + } + if ((EXIT_SUB)) return; + if (MISS_COUNT > 3) + { + MISS_COUNT = 0; + chicken_run(2.0); + } + } + + void frame_kick_strike() + { + if ((IS_ARMORED)) + { + EmitSound(GetOwner(), 2, SOUNDA_NPC_JUMP, 10); + } + else + { + EmitSound(GetOwner(), 2, SOUND_NPC_JUMP, 10); + } + // PlayRandomSound from: SOUND_MELEE1, SOUND_MELEE2 + array sounds = {SOUND_MELEE1, SOUND_MELEE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + XDoDamage(m_hAttackTarget, HITRANGE_MELEE_STANDARD, DMG_KICK, 0.9, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:kick"); + ANIM_ATTACK = ANIM_ATTACK1; + } + + void kick_dodamage() + { + if (!(param1)) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 300, 110)); + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + + void OnDamage(int damage) override + { + string MY_HP = GetEntityHealth(GetOwner()); + if (!(IS_ARMORED)) + { + if (MY_HP > HALF_HP) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + else + { + if (MY_HP > HALF_HP) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK_ARMOR1, SOUND_STRUCK_ARMOR2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK_ARMOR1, SOUND_STRUCK_ARMOR2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK_ARMOR1, SOUND_STRUCK_ARMOR2, SOUNDA_PAIN1, SOUNDA_PAIN2, SOUNDA_PAIN3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK_ARMOR1, SOUND_STRUCK_ARMOR2, SOUNDA_PAIN1, SOUNDA_PAIN2, SOUNDA_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + if ((POT_HEAL)) + { + if (MY_HP < HALF_HP) + { + } + NEXT_HEAL = GAME_TIME; + NEXT_HEAL += HEAL_DELAY; + HEAL_READY = 1; + POT_HEAL = 0; + } + NEXT_CALM = GetGameTime(); + NEXT_CALM += 20.0; + if (MY_HP > QUARTER_HP) + { + AM_WOUNDED = 0; + if (!(NEVER_JUMPS)) + { + NPC_JUMPER = 1; + } + ANIM_RUN = "run"; + SetMoveAnim(ANIM_RUN); + } + else + { + AM_WOUNDED = 1; + NPC_JUMPER = 0; + ANIM_RUN = "walkinj"; + SetMoveAnim(ANIM_RUN); + } + } + + void cycle_up() + { + ANIM_IDLE = ANIM_IDLE_COMBAT; + SetIdleAnim(ANIM_IDLE); + } + + void cycle_down() + { + ANIM_IDLE = ANIM_IDLE_DEEP; + SetIdleAnim(ANIM_IDLE); + if (!(GetEntityHealth(GetOwner()) > QUARTER_HP)) return; + ANIM_WALK = "walk"; + SetMoveAnim(ANIM_WALK); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(m_hAttackTarget == "unset")) return; + string HEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(HEARD_ID) == "enemy")) return; + if (GetEntityHealth(GetOwner()) > QUARTER_HP) + { + ANIM_WALK = ANIM_WALK_HEARDSOUND; + SetMoveAnim(ANIM_WALK); + } + if (!(GetGameTime() > NEXT_ALERT_SOUND)) return; + NEXT_ALERT_SOUND = GetGameTime(); + NEXT_ALERT_SOUND += 30.0; + if ((IS_ARMORED)) + { + EmitSound(GetOwner(), 0, SOUNDA_INVESTIGATE, 10); + } + else + { + EmitSound(GetOwner(), 0, SOUND_INVESTIGATE, 10); + } + } + + void frame_melee_strike() + { + // PlayRandomSound from: SOUND_MELEE1, SOUND_MELEE2 + array sounds = {SOUND_MELEE1, SOUND_MELEE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((IS_ARMORED)) + { + if (RandomInt(1, 5) == 1) + { + } + // PlayRandomSound from: SOUNDA_ATTACK1, SOUNDA_ATTACK2, SOUNDA_ATTACK3 + array sounds = {SOUNDA_ATTACK1, SOUNDA_ATTACK2, SOUNDA_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (RandomInt(1, 5) == 1) + { + } + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + MELEE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_MELEE, 0.9, DMG_MELEE_TYPE); + } + + void frame_reach_strike() + { + if ((IS_ARMORED)) + { + if (RandomInt(1, 3) == 1) + { + } + // PlayRandomSound from: SOUNDA_ATTACK1, SOUNDA_ATTACK2, SOUNDA_ATTACK3 + array sounds = {SOUNDA_ATTACK1, SOUNDA_ATTACK2, SOUNDA_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (RandomInt(1, 3) == 1) + { + } + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + // PlayRandomSound from: SOUND_MELEE1, SOUND_MELEE2 + array sounds = {SOUND_MELEE1, SOUND_MELEE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + MELEE_ATTACK = 1; + string L_HIT_RANGE = ATTACK_HITRANGE; + L_HIT_RANGE *= 1.5; + DoDamage(m_hAttackTarget, L_HIT_RANGE, DMG_MELEE, 0.9, DMG_MELEE_TYPE); + ANIM_ATTACK = ANIM_ATTACK_DEFAULT; + ATTACK_RANGE = ATTACK_RANGE_DEFAULT; + } + + void frame_hammer_slam() + { + if ((IS_ARMORED)) + { + // PlayRandomSound from: SOUNDA_ATTACK1, SOUNDA_ATTACK2, SOUNDA_ATTACK3 + array sounds = {SOUNDA_ATTACK1, SOUNDA_ATTACK2, SOUNDA_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + ANIM_ATTACK = ANIM_ATTACK_DEFAULT; + ATTACK_RANGE = ATTACK_RANGE_DEFAULT; + EmitSound(GetOwner(), 0, SOUND_MELEE_LARGE, 10); + BURST_START = /* TODO: $relpos */ $relpos(0, 150, 0); + ClientEvent("new", "all", "effects/sfx_stun_burst", BURST_START, 256, 0); + BURST_START += "z"; + BURST_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(BURST_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + stun_burst_affect_targets(); + } + } + + void stun_burst_affect_targets() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + if (!(IsOnGround(CUR_TARG))) return; + ApplyEffect(CUR_TARG, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = BURST_START; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + XDoDamage(CUR_TARG, "direct", DMG_STUN_BURST, 1.0, GetOwner(), GetOwner(), "none", "blunt"); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 200))); + } + + void frame_pole_close() + { + // PlayRandomSound from: SOUND_MELEE1, SOUND_MELEE2 + array sounds = {SOUND_MELEE1, SOUND_MELEE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, 300, 110)); + int L_DMG_MELEE = 100; + DoDamage(m_hAttackTarget, HITRANGE_POLE_SHORT, L_DMG_MELEE, 0.9, DMG_MELEE_TYPE); + } + + void frame_pole_strike() + { + if ((IS_ARMORED)) + { + if (RandomInt(1, 3) == 1) + { + } + // PlayRandomSound from: SOUNDA_ATTACK1, SOUNDA_ATTACK2, SOUNDA_ATTACK3 + array sounds = {SOUNDA_ATTACK1, SOUNDA_ATTACK2, SOUNDA_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (RandomInt(1, 3) == 1) + { + } + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + // PlayRandomSound from: SOUND_MELEE1, SOUND_MELEE2 + array sounds = {SOUND_MELEE1, SOUND_MELEE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(IsEntityAlive(m_hAttackTarget))) return; + string RANGE_RATIO = GetEntityRange(m_hAttackTarget); + RANGE_RATIO /= ATTACK_RANGE; + string HALF_MAX = DMG_MELEE; + HALF_MAX *= 0.5; + string L_DMG_MELEE = /* TODO: $ratio */ $ratio(RANGE_RATIO, HALF_MAX, DMG_MELEE); + if ((NPC_MUST_SEE_TARGET)) + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, L_DMG_MELEE, 0.9, DMG_MELEE_TYPE); + } + else + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + } + DoDamage(m_hAttackTarget, "direct", L_DMG_MELEE, 0.9, GetOwner()); + } + } + + void frame_shield_bash() + { + if (!(GetEntityRange(m_hAttackTarget) < 64)) return; + string L_DMG_MELEE = DMG_MELEE; + L_DMG_MELEE *= 0.25; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, L_DMG_MELEE, 0.9, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:shieldbash"); + } + + void shieldbash_dodamage() + { + if (!(param1)) return; + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, 200, 110)); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + EmitSound(GetOwner(), 0, "body/armour1.wav", 10); + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((MELEE_VAMPIRE)) + { + string GIVE_HP = GetEntityMaxHealth(GetOwner()); + if (GetEntityHealth(GetOwner()) < GIVE_HP) + { + } + GIVE_HP *= 0.01; + HealEntity(GetOwner(), GIVE_HP); + } + if (WEAPON_TYPE == 1) + { + if (param2 == OLD_ATTACK_TARGET) + { + if (!(GetEntityProperty(param2, "scriptvar"))) + { + FREEZE_COUNT += 1; + } + else + { + FREEZE_COUNT = 0; + } + if (FREEZE_COUNT >= 4) + { + if ((param1)) + { + } + FREEZE_COUNT = 0; + ApplyEffect(param2, "effects/dot_cold_freeze", MELEE_DOT_DUR, GetEntityIndex(GetOwner()), 0); + } + } + else + { + OLD_ATTACK_TARGET = param2; + FREEZE_COUNT = 0; + } + } + if ((param1)) + { + } + if ((HAS_DOT)) + { + } + ApplyEffect(param2, MELEE_DOT_EFFECT, MELEE_DOT_DUR, GetEntityIndex(GetOwner()), MELEE_DOT); + } + MELEE_ATTACK = 0; + } + + void frame_drink_done() + { + string LAST_FLINCH_P3 = LAST_FLINCH; + LAST_FLINCH_P3 += 3.0; + if (GetGameTime() < LAST_FLINCH_P3) + { + int FUMBLE_POTION = 0; + } + if ((DO_HEAL)) + { + DO_HEAL = 0; + HEAL_READY = 0; + if (!(FUMBLE_POTION)) + { + Effect("glow", GetOwner(), Vector3(0, 255, 255), 64, 1.0, 1.0); + EmitSound(GetOwner(), 0, "magic/cast.wav", 10); + string HP_TO_GIVE = GetEntityMaxHealth(GetOwner()); + HP_TO_GIVE -= GetEntityHealth(GetOwner()); + HealEntity(GetOwner(), HP_TO_GIVE); + POT_OUT_MSG = "Quaffs a potion of healing."; + GetAllPlayers(PLR_POT_ALERT_LIST); + if (PLR_POT_ALERT_LIST != "none") + { + } + for (int i = 0; i < GetTokenCount(PLR_POT_ALERT_LIST, ";"); i++) + { + pot_message(); + } + } + } + if ((POT_SPECIAL)) + { + POT_SPECIAL = 0; + if (!(FUMBLE_POTION)) + { + } + if (POT_TYPE == "demon") + { + POT_OUT_MSG = "Quaffs a potion of demon blood."; + DEMON_NOHP_LOSS = 1; + demon_blood(); + } + if (POT_TYPE == "protection") + { + POT_OUT_MSG = "Quaffs a potion of greater protection."; + ApplyEffect(GetOwner(), "effects/protection", 9999, 0.5); + } + if (POT_TYPE == "faura") + { + POT_OUT_MSG = "Quaffs a potion of flame aura."; + string CUR_COLD_DMG = /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "cold"); + CUR_COLD_DMG *= 0.5; + SetDamageResistance("cold", CUR_COLD_DMG); + ext_fire_aura_activate(); + } + if (POT_TYPE == "speed") + { + POT_OUT_MSG = "Quaffs a potion of speed."; + ClientEvent("persist", "all", "effects/sfx_motionblur_perm", GetEntityIndex(GetOwner()), 0); + speed_x2_5(); + } + GetAllPlayers(PLR_POT_ALERT_LIST); + if (PLR_POT_ALERT_LIST != "none") + { + } + for (int i = 0; i < GetTokenCount(PLR_POT_ALERT_LIST, ";"); i++) + { + pot_message(); + } + } + if ((SUSPEND_AI)) + { + npcatk_resume_ai(); + } + SetModelBody(1, WEAPON_TYPE); + } + + void reset_weapon_submodel() + { + SetModelBody(1, WEAPON_TYPE); + } + + void pot_message() + { + string CUR_PLAYER = GetToken(PLR_POT_ALERT_LIST, i, ";"); + if (!(GetEntityRange(CUR_PLAYER) < 1024)) return; + SendInfoMsg(CUR_PLAYER, GetEntityName(GetOwner()) + POT_OUT_MSG); + } + + void ext_fire_aura_activate() + { + if ((DG_FAURA)) return; + DG_FAURA = 1; + ClientEvent("new", "all", "items/armor_faura_cl", GetEntityIndex(GetOwner()), DG_FAURA_AOE, DG_FAURA_CL_RATE, 1); + DG_FAURA_CLIDX = "game.script.last_sent_id"; + DG_FAURA_NEXT_CL = GetGameTime(); + DG_FAURA_NEXT_CL += DG_FAURA_CL_RATE; + fire_aura_loop(); + } + + void fire_aura_loop() + { + if (!(DG_FAURA)) return; + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(1.0, "fire_aura_loop"); + float GAME_TIME = GetGameTime(); + if (GAME_TIME > DG_FAURA_NEXT_CL) + { + ClientEvent("new", "all", "items/armor_faura_cl", GetEntityIndex(GetOwner()), DG_FAURA_AOE, DG_FAURA_CL_RATE, 1); + DG_FAURA_CLIDX = "game.script.last_sent_id"; + DG_FAURA_NEXT_CL = GAME_TIME; + DG_FAURA_NEXT_CL += DG_FAURA_CL_RATE; + } + string SCAN_AOE = DG_FAURA_AOE; + SCAN_AOE *= 1.5; + DG_FAURA_SCAN = FindEntitiesInSphere("enemy", SCAN_AOE); + if (!(DG_FAURA_SCAN != "none")) return; + for (int i = 0; i < GetTokenCount(DG_FAURA_SCAN, ";"); i++) + { + fire_aura_burn(); + } + } + + void fire_aura_burn() + { + string CUR_TARG = GetToken(DG_FAURA_SCAN, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DG_FAURA_DOT); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((IS_ARMORED)) + { + if (RandomInt(1, 2) == 1) + { + NPC_ALT_SOUND_DEATH = SOUNDA_DEATH1; + } + else + { + NPC_ALT_SOUND_DEATH = SOUNDA_DEATH2; + } + } + else + { + if (RandomInt(1, 2) == 1) + { + NPC_ALT_SOUND_DEATH = SOUND_DEATH1; + } + else + { + NPC_ALT_SOUND_DEATH = SOUND_DEATH2; + } + } + if ((DG_FAURA)) + { + ClientEvent("update", "all", DG_FAURA_CLIDX, "remove_fx"); + } + if ((BREATH_ON)) + { + ClientEvent("update", "all", BREATH_CL_IDX, "end_fx"); + } + SetModelBody(1, 0); + } + + void frame_breath_start() + { + if ((BREATH_ON)) return; + SetRoam(false); + npcatk_suspend_ai(5.0); + npcatk_suspend_movement(ANIM_BREATH_LOOP, 5.0); + ClientEvent("new", "all", "monsters/dragon_guard_breath_cl", GetEntityIndex(GetOwner()), BREATH_TYPE); + BREATH_CL_IDX = "game.script.last_sent_id"; + BREATH_ON = 1; + breath_loop(); + // svplaysound: svplaysound 1 10 SOUND_BREATH_LOOP + EmitSound(1, 10, SOUND_BREATH_LOOP); + ScheduleDelayedEvent(5.0, "breath_attack_end"); + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + } + + void breath_loop() + { + if (!(BREATH_ON)) return; + ScheduleDelayedEvent(0.5, "breath_loop"); + string L_BREATH_RANGE = BREATH_RANGE; + L_BREATH_RANGE *= 2.0; + BREATH_TARGS = FindEntitiesInSphere("enemy", L_BREATH_RANGE); + if (!(BREATH_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(BREATH_TARGS, ";"); i++) + { + breath_affect_targets(); + } + } + + void breath_affect_targets() + { + string CUR_TARG = GetToken(BREATH_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + string TRACE_START = GetEntityOrigin(GetOwner()); + TRACE_START += /* TODO: $relpos */ $relpos(0, 24, 80); + string TRACE_END = TARG_ORG; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE != TRACE_END)) return; + if (BREATH_TYPE == "cold") + { + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", 6.0, GetEntityIndex(GetOwner()), BREATH_DOT); + } + if (BREATH_TYPE == "fire") + { + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), BREATH_DOT); + } + if (BREATH_TYPE == "poison") + { + ApplyEffect(CUR_TARG, "effects/dot_poison_blind", 5.0, GetEntityIndex(GetOwner()), BREATH_DOT); + } + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, BREATH_PUSH_VEL, 0)); + } + + void breath_attack_end() + { + npcatk_resume_ai(); + npcatk_resume_movement(); + PlayAnim("once", "break"); + SetRoam(true); + BREATH_ON = 0; + // svplaysound: svplaysound 1 0 SOUND_BREATH_LOOP + EmitSound(1, 0, SOUND_BREATH_LOOP); + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + } + + void frame_breath_quick() + { + if (BREATH_TYPE == "acid") + { + EmitSound(GetOwner(), 0, SOUND_BREATH_ACID_BOLT, 10); + TossProjectile("proj_acid_bolt", /* TODO: $relpos */ $relpos(0, 24, 35), m_hAttackTarget, 300, 800, 0.1, "none"); + } + if (BREATH_TYPE == "lightning") + { + EmitSound(GetOwner(), 0, SOUND_BREATH_LIGHTNING, 10); + string BEAM_START = GetEntityProperty(GetOwner(), "attachpos"); + string BEAM_END = GetEntityOrigin(m_hAttackTarget); + string BEAM_ANGS = /* TODO: $angles3d */ $angles3d(BEAM_START, BEAM_END); + BEAM_ANGS = "x"; + BEAM_END += /* TODO: $relpos */ $relpos(BEAM_ANGS, Vector3(0, 1024, 0)); + Effect("beam", "end", "lgtning.spr", 60, BEAM_END, GetOwner(), 1, Vector3(255, 255, 0), 200, 20, 1.0); + XDoDamage(BEAM_START, BEAM_END, 500, 1.0, GetOwner(), GetOwner(), "none", "lightning", "dmgevent:zapbreath"); + } + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + } + + void zapbreath_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), 200); + } + + void frame_throw() + { + if (WEAPON_TYPE == 5) + { + TossProjectile("proj_crescent", /* TODO: $relpos */ $relpos(-20, 0, 3), m_hAttackTarget, 200, 0, 0, "none"); + } + } + + void frame_xbow() + { + if (GetGameTime() > NEXT_SPLODIE_BOLT) + { + EXPLOSIVE_BOLT = 1; + NEXT_SPLODIE_BOLT = GetGameTime(); + NEXT_SPLODIE_BOLT += 3.0; + } + else + { + EXPLOSIVE_BOLT = 0; + } + EmitSound(GetOwner(), 1, SOUND_XBOW_SHOOT, 10); + string START_LINE = GetEntityProperty(GetOwner(), "svbonepos"); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if ((EXPLOSIVE_BOLT)) + { + TARG_ORG = "z"; + } + if (RandomInt(1, 100) > XBOW_ACCURACY) + { + LogDebug("elf_shoot_xbow miss"); + float RND_X = Random(-64.0, 64.0); + float RND_Y = Random(-64.0, 64.0); + TARG_ORG += "x"; + TARG_ORG += "y"; + TARG_ORG = "z"; + } + ELF_AIM_ANGLES = /* TODO: $angles3d */ $angles3d(START_LINE, TARG_ORG); + LogDebug("before ELF_AIM_ANGLES"); + ELF_AIM_ANGLES = "x"; + LogDebug("after ELF_AIM_ANGLES"); + string END_LINE = START_LINE; + END_LINE += /* TODO: $relpos */ $relpos(ELF_AIM_ANGLES, Vector3(0, 2048, 0)); + ELF_XBOW_SHOT = 1; + string END_LINE = TraceLine(START_LINE, END_LINE); + ELF_BOLT_LAND = END_LINE; + MISS_COUNT += 1; + XDoDamage(START_LINE, END_LINE, DMG_XBOW, 1.0, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:xbow"); + ClientEvent("new", "all", "monsters/elf_xbow_cl", START_LINE, ELF_BOLT_LAND, GetEntityAngles(GetOwner()), EXPLOSIVE_BOLT); + if (!(EXPLOSIVE_BOLT)) return; + ScheduleDelayedEvent(0.1, "bolt_explode"); + } + + void bolt_explode() + { + XDoDamage(ELF_BOLT_LAND, 128, DMG_XBOW, 0.2, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:exbow"); + } + + void xbow_dodamage() + { + if (!(param1)) return; + MISS_COUNT = 0; + } + + void exbow_dodamage() + { + if (!(param1)) return; + MISS_COUNT = 0; + string CUR_TARG = param2; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(ELF_BOLT_LAND, TARG_ORG); + float TARG_DIST = Distance(TARG_ORG, ELF_BOLT_LAND); + TARG_DIST /= 128; + string PUSH_STR = /* TODO: $get_skill_ratio */ $get_skill_ratio(TARG_DIST, 600, 100); + LogDebug("game_dodamage str PUSH_STR ratio TARG_DIST"); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, PUSH_STR, 120))); + } + + void my_target_died() + { + if (!(IS_ARMORED)) return; + if (!(GetGameTime() > NEXT_GLOAT)) return; + NEXT_GLOAT = GetGameTime(); + NEXT_GLOAT += 20.0; + EmitSound(GetOwner(), 0, "monsters/dg/vs_nlizardm_haha.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/dragon_guard_breath_cl.as b/scripts/angelscript/monsters/dragon_guard_breath_cl.as new file mode 100644 index 00000000..d2bee405 --- /dev/null +++ b/scripts/angelscript/monsters/dragon_guard_breath_cl.as @@ -0,0 +1,142 @@ +#pragma context server + +namespace MS +{ + +class DragonGuardBreathCl : CGameScript +{ + int BREATH_ON; + string BREATH_TYPE; + string CLOUD_ANG; + float FX_DURATION; + string FX_OWNER; + string SPR_EVENT; + string SPR_NAME; + + DragonGuardBreathCl() + { + FX_DURATION = 5.0; + } + + void client_activate() + { + FX_OWNER = param1; + BREATH_TYPE = param2; + LogDebug("*** breath_activate FX_OWNER BREATH_TYPE"); + FX_DURATION("end_fx"); + if (BREATH_TYPE == "cold") + { + SPR_NAME = "rain_mist.spr"; + SPR_EVENT = "setup_cloud_cold"; + } + if (BREATH_TYPE == "fire") + { + SPR_NAME = "explode1.spr"; + SPR_EVENT = "setup_cloud_fire"; + } + if (BREATH_TYPE == "poison") + { + SPR_NAME = "poison_cloud.spr"; + SPR_EVENT = "setup_cloud_poison"; + } + BREATH_ON = 1; + breath_loop(); + } + + void end_fx() + { + BREATH_ON = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void breath_loop() + { + if (!(BREATH_ON)) return; + ScheduleDelayedEvent(0.2, "breath_loop"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + CLOUD_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + ClientEffect("tempent", "sprite", SPR_NAME, CLOUD_ORG, SPR_EVENT, "update_cloud"); + ClientEffect("tempent", "sprite", SPR_NAME, CLOUD_ORG, SPR_EVENT, "update_cloud"); + ClientEffect("tempent", "sprite", SPR_NAME, CLOUD_ORG, SPR_EVENT, "update_cloud"); + } + + void setup_cloud_cold() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.01); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.01); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void update_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < 1.5) + { + CUR_SCALE += 0.05; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + } + + void setup_cloud_fire() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.2); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + if (RandomInt(1, 3) == 1) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 0)); + } + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.2); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void setup_cloud_poison() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/dragonfly.as b/scripts/angelscript/monsters/dragonfly.as new file mode 100644 index 00000000..862adbd4 --- /dev/null +++ b/scripts/angelscript/monsters/dragonfly.as @@ -0,0 +1,202 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/attack_hack.as" +#include "monsters/base_flyer.as" + +namespace MS +{ + +class Dragonfly : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_IDLE_FLY; + string ANIM_IDLE_HANG; + string ANIM_RUN; + string ANIM_WALK; + int AS_ATTACKING; + int ATTACK_DAMAGE; + int ATTACK_FREQUENCY; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DELETE_ON_DEATH; + float FLEE_CHANCE; + int FLEE_HEALTH; + string FLIGHT_STUCK; + float FREQ_SOUND_HOVER; + int HUNT_AGRO; + string LAST_POS; + float LAST_PROG; + int NPC_GIVE_EXP; + int NPC_NO_END_FLY; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_HOVER; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Dragonfly() + { + NPC_NO_END_FLY = 1; + DELETE_ON_DEATH = 1; + ANIM_IDLE_HANG = "flapping"; + ANIM_IDLE_FLY = "fly"; + ANIM_RUN = "fly"; + ANIM_WALK = "fly"; + ANIM_ATTACK = "attack"; + ANIM_IDLE = "flapping"; + ATTACK_DAMAGE = 2; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 80; + ATTACK_HITCHANCE = 0.3; + ATTACK_FREQUENCY = 10; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/sludge/null.wav"; + SOUND_ATTACK1 = "monsters/sludge/null.wav"; + SOUND_ATTACK2 = "monsters/sludge/null.wav"; + SOUND_ATTACK3 = "monsters/sludge/null.wav"; + SOUND_IDLE = "monsters/sludge/null.wav"; + SOUND_DEATH = "monsters/sludge/null.wav"; + HUNT_AGRO = 1; + CAN_HUNT = 1; + CAN_FLEE = 1; + FLEE_HEALTH = 5; + FLEE_CHANCE = 0.5; + SOUND_HOVER = "monsters/dragonfly.wav"; + FREQ_SOUND_HOVER = 5.9; + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + if (!(IS_HUNTING)) + { + } + if ((RandomInt(0, 1))) + { + } + PlayAnim("once", ANIM_IDLE); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.5); + if ((IS_HUNTING)) + { + } + npcatk_faceattacker(); + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 200, 0)); + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if ((SPITTING)) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if (FLIGHT_STUCK > 4) + { + do_rand_tweedee(); + npcatk_suspend_ai(Random(0.3, 0.9)); + SetMoveDest(NEW_DEST); + ScheduleDelayedEvent(0.1, "horror_boost"); + FLIGHT_STUCK = 0; + } + AS_ATTACKING -= 2; + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + if (!(SUSPEND_AI)) + { + SetAngles("face_origin"); + } + if (AS_ATTACKING <= 0) + { + } + AS_ATTACKING = 0; + if (!(IS_FLEEING)) + { + } + if (!(SPITTING)) + { + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + } + float CUR_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + if (LAST_PROG >= CUR_PROG) + { + FLIGHT_STUCK += 1; + } + LAST_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + LAST_POS = GetMonsterProperty("origin"); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(FREQ_SOUND_HOVER); + EmitSound(GetOwner(), 2, SOUND_HOVER, 10); + } + + void OnSpawn() override + { + SetName("Giant dragonfly"); + SetFly(true); + SetRace("vermin"); + SetHealth(20); + SetWidth(24); + SetHeight(24); + SetHearingSensitivity(2); + SetVolume(5); + SetRoam(true); + SetDamageResistance("pierce", 0.5); + SetMonsterClip(0); + NPC_GIVE_EXP = 10; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetActionAnim(ANIM_ATTACK); + SetModel("monsters/dragonfly.mdl"); + } + + void bite1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void chicken_run() + { + ScheduleDelayedEvent(0.1, "horror_boost"); + } + + void horror_boost() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 200, 0)); + } + + void OnDeath(CBaseEntity@ attacker) override + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, -200)); + } + +} + +} diff --git a/scripts/angelscript/monsters/dragonfly_queen.as b/scripts/angelscript/monsters/dragonfly_queen.as new file mode 100644 index 00000000..971df0b5 --- /dev/null +++ b/scripts/angelscript/monsters/dragonfly_queen.as @@ -0,0 +1,280 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/attack_hack.as" +#include "monsters/base_flyer.as" + +namespace MS +{ + +class DragonflyQueen : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_IDLE_FLY; + string ANIM_IDLE_HANG; + string ANIM_RUN; + string ANIM_WALK; + int AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BAT_SUMMON_AMT; + int BAT_SUMMON_HEIGHT; + string BAT_SUMMON_NUM; + int DMG_BITE; + float DMG_SUMMON; + string FLIGHT_STUCK; + float FREQ_RETURN; + float FREQ_SOUND_HOVER; + float FREQ_SUMMON; + string LAST_POS; + float LAST_PROG; + int MOVE_RAGE; + int NPC_GIVE_EXP; + string OLD_TARG; + string RETURNING_HOME; + int ROAM_RADIUS; + string SOUND_DEATH; + string SOUND_HOVER; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int STARTED_CYCLES; + int SUMMON_HEALTH; + float SUMMON_LIFETIME; + string SUMMON_SCRIPT; + + DragonflyQueen() + { + ANIM_RUN = "fly"; + ANIM_WALK = "fly"; + ANIM_ATTACK = "attack"; + ANIM_IDLE = "flapping"; + NPC_GIVE_EXP = 150; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 125; + MOVE_RAGE = 40; + ATTACK_HITCHANCE = 0.8; + DMG_BITE = RandomInt(25, 35); + ANIM_IDLE_HANG = "flapping"; + ANIM_IDLE_FLY = "fly"; + FREQ_RETURN = Random(5, 10); + FREQ_SUMMON = Random(15, 30); + ROAM_RADIUS = 1024; + SUMMON_HEALTH = 30; + SUMMON_SCRIPT = "monsters/summon/dragonfly"; + DMG_SUMMON = Random(5, 10); + SUMMON_LIFETIME = 15.0; + BAT_SUMMON_HEIGHT = 300; + BAT_SUMMON_AMT = 8; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_HOVER = "monsters/dragonfly_queen.wav"; + FREQ_SOUND_HOVER = 9.5; + SOUND_DEATH = "none"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_RETURN); + if (Distance(GetMonsterProperty("origin"), NPC_HOME_LOC) > ROAM_RADIUS) + { + return_home(); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.5); + if ((RETURNING_HOME)) + { + SetMoveDest(NPC_HOME_LOC); + if (Distance(GetMonsterProperty("origin"), NPC_HOME_LOC) < ATTACK_MOVERANGE) + { + } + RETURNING_HOME = 0; + npcatk_resume_ai(); + } + if ((IS_HUNTING)) + { + } + npcatk_faceattacker(); + if (GetEntityRange(m_hAttackTarget) > MOVE_RANGE) + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 200, 0)); + } + if (GetEntityRange(m_hAttackTarget) < MOVE_RANGE) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if ((HOVER_MODE)) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if (FLIGHT_STUCK > 4) + { + do_rand_tweedee(); + npcatk_suspend_ai(Random(0.3, 0.9)); + SetMoveDest(NEW_DEST); + ScheduleDelayedEvent(0.1, "horror_boost"); + FLIGHT_STUCK = 0; + } + AS_ATTACKING -= 2; + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + if (!(SUSPEND_AI)) + { + SetAngles("face_origin"); + } + if (AS_ATTACKING <= 0) + { + } + AS_ATTACKING = 0; + if (!(IS_FLEEING)) + { + } + if (!(SPITTING)) + { + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + } + float CUR_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + if (LAST_PROG >= CUR_PROG) + { + FLIGHT_STUCK += 1; + } + LAST_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + LAST_POS = GetMonsterProperty("origin"); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(FREQ_SOUND_HOVER); + // svplaysound: svplaysound 2 10 SOUND_HOVER + EmitSound(2, 10, SOUND_HOVER); + } + + void OnSpawn() override + { + SetName("Dread Dragonfly"); + SetRace("demon"); + SetHealth(400); + SetRoam(true); + SetModel("monsters/dragonfly_queen.mdl"); + SetHearingSensitivity(10); + SetMonsterClip(0); + SetFly(true); + SetWidth(32); + SetHeight(32); + } + + void OnPostSpawn() override + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void cycle_up() + { + if ((STARTED_CYCLES)) return; + STARTED_CYCLES = 1; + FREQ_SUMMON("make_babies"); + } + + void return_home() + { + npcatk_suspend_ai(); + RETURNING_HOME = 1; + SetMoveDest(NPC_HOME_LOC); + } + + void chicken_run() + { + ScheduleDelayedEvent(0.1, "horror_boost"); + } + + void horror_boost() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 200, 0)); + } + + void npcatk_setmovedest() + { + if ((RETURNING_HOME)) return; + if (GetEntityIndex(param1) != m_hAttackTarget) + { + SetMoveDest(param1); + } + if (GetEntityIndex(param1) == m_hAttackTarget) + { + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + TARG_ORG += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 64)); + SetMoveDest(TARG_ORG); + } + } + + void make_babies() + { + FREQ_SUMMON("make_babies"); + OLD_TARG = m_hAttackTarget; + npcatk_suspend_ai(2.0); + string DEST_POS = GetMonsterProperty("origin"); + DEST_POS += "z"; + SetMoveDest(DEST_POS); + AddVelocity(GetOwner(), Vector3(0, -50, 900)); + ScheduleDelayedEvent(0.5, "make_babies2"); + } + + void make_babies2() + { + AddVelocity(GetOwner(), Vector3(0, -50, 900)); + SetMoveDest(OLD_TARG); + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + ScheduleDelayedEvent(0.1, "make_babies3"); + } + + void make_babies3() + { + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + SetAngles("face"); + PlayAnim("critical", ANIM_ATTACK); + ScheduleDelayedEvent(0.1, "bat_summon_all"); + } + + void bat_summon_all() + { + EmitSound(GetOwner(), 0, BAT_SUMMON_SND_SUMMON, 10); + PlayAnim("once", "attack2"); + BAT_SUMMON_NUM = BAT_SUMMON_AMT; + ScheduleDelayedEvent(0.1, "bat_summon_loop"); + FREQ_SUMMON("make_babies"); + } + + void bat_summon_loop() + { + if (!(BAT_SUMMON_NUM)) return; + BAT_SUMMON_NUM -= 1; + string L_TARGETPOS = GetEntityOrigin(GetOwner()); + int L_OFS_X = RandomInt(-100, 100); + int L_OFS_Y = RandomInt(-100, 100); + L_TARGETPOS += Vector3(L_OFS_X, L_OFS_Y, -64); + SpawnNPC(SUMMON_SCRIPT, L_TARGETPOS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_SUMMON, SUMMON_HEALTH, SUMMON_LIFETIME, HUNT_LASTTARGET + ScheduleDelayedEvent(0.1, "bat_summon_loop"); + } + + void bite1() + { + DoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, DMG_BITE, ATTACK_HITCHANCE, "pierce"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // svplaysound: svplaysound 2 0 SOUND_HOVER + EmitSound(2, 0, SOUND_HOVER); + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_bomber.as b/scripts/angelscript/monsters/dwarf_bomber.as new file mode 100644 index 00000000..64b782fe --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_bomber.as @@ -0,0 +1,698 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_struck.as" +#include "NPCs/dwarf_lantern_base.as" + +namespace MS +{ + +class DwarfBomber : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_EXPLODE; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_RELOAD_L; + string ANIM_RELOAD_R; + string ANIM_RUN; + string ANIM_THROW_L; + string ANIM_THROW_R; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float BASE_MOVESPEED; + string CL_SCRIPT; + int CL_SCRIPT_IDX; + int DID_FAKE_DEATH; + int DID_FSUICIDE; + int DID_INTRO; + int DMG_BOMB; + int DMG_SUICIDE; + string DROP_TNT; + float FREQ_BOMB_DRAW; + float FREQ_CL_UPDATE; + float FREQ_DODGE; + float FREQ_LBOMB_BEAM; + float FREQ_LEAP_FORWARD; + float FREQ_RBOMB_BEAM; + int HL_ACTIVE; + int HL_ATTACH_IDX; + int HL_CHAN; + int HR_ACTIVE; + int HR_ATTACH_IDX; + int HR_CHAN; + string MODEL_TNT; + string NEXT_ALERT; + string NEXT_BOMB_DRAW; + string NEXT_CL_UPDATE; + string NEXT_DODGE; + int NEXT_LBOMB_BEAM; + int NEXT_RBOMB_BEAM; + int NPC_GIVE_EXP; + string NPC_MATERIAL_TYPE; + string NPC_NEXT_FLINCH; + int NPC_RANGED; + int NPC_USE_FLINCH; + int NPC_USE_IDLE; + int NPC_USE_PAIN; + string PROJ_SCRIPT; + int ROLL_DIR; + string SOUND_ALERT; + string SOUND_DEATH; + string SOUND_EXPLODE; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_FLINCH3; + string SOUND_FUSE_LIGHT; + string SOUND_FUSE_LOOP; + string SOUND_GIGGLE1; + string SOUND_GIGGLE2; + string SOUND_GIGGLE3; + string SOUND_GIGGLE4; + string SOUND_GIGGLE5; + string SOUND_GLOAT; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_SUICIDE; + string SOUND_YELP; + string VEC_ENGLISH; + + DwarfBomber() + { + ANIM_RELOAD_R = "anim_draw_r"; + ANIM_RELOAD_L = "anim_draw_l"; + ANIM_THROW_R = "anim_throw_r"; + ANIM_THROW_L = "anim_throw_l"; + ANIM_EXPLODE = "anim_explode"; + ANIM_JUMP = "anim_jump_back"; + ANIM_DODGE = "anim_roll_back"; + FREQ_LEAP_FORWARD = Random(15.0, 20.0); + FREQ_DODGE = Random(10.0, 15.0); + ANIM_ALERT = "nod"; + MODEL_TNT = "monsters/dwarf_bomber_tnt.mdl"; + PROJ_SCRIPT = "monsters/summon/tnt_bomb"; + CL_SCRIPT = "monsters/dwarf_bomber_cl"; + FREQ_CL_UPDATE = 15.0; + CL_SCRIPT_IDX = -1; + HR_ACTIVE = 0; + HL_ACTIVE = 0; + HR_ATTACH_IDX = 1; + HL_ATTACH_IDX = 2; + FREQ_BOMB_DRAW = 5.0; + HR_CHAN = 1; + HL_CHAN = 3; + FREQ_RBOMB_BEAM = 5.0; + FREQ_LBOMB_BEAM = 5.0; + NEXT_RBOMB_BEAM = 0; + NEXT_LBOMB_BEAM = 0; + VEC_ENGLISH = Vector3(0, 0, 0); + DMG_BOMB = 100; + DMG_SUICIDE = 300; + SOUND_FUSE_LOOP = "monsters/dwarf_bomber/fuse_loop.wav"; + SOUND_FUSE_LIGHT = "monsters/dwarf_bomber/fuse_lit.wav"; + SOUND_YELP = "monsters/dwarf_bomber/db_yelp.wav"; + SOUND_GIGGLE1 = "monsters/dwarf_bomber/db_giggle1.wav"; + SOUND_GIGGLE2 = "monsters/dwarf_bomber/db_giggle2.wav"; + SOUND_GIGGLE3 = "monsters/dwarf_bomber/db_giggle3.wav"; + SOUND_GIGGLE4 = "monsters/dwarf_bomber/db_giggle4.wav"; + SOUND_GIGGLE5 = "monsters/dwarf_bomber/db_giggle5.wav"; + SOUND_EXPLODE = "weapons/explode3.wav"; + SOUND_GLOAT = "monsters/dwarf_bomber/db_gloat.wav"; + SOUND_ALERT = "monsters/dwarf_bomber/db_alert1.wav"; + SOUND_SUICIDE = "monsters/dwarf_bomber/db_suicide.wav"; + NPC_GIVE_EXP = 300; + NPC_RANGED = 1; + ATTACK_RANGE = 640; + ATTACK_HITRANGE = 640; + ATTACK_MOVERANGE = 512; + ANIM_ATTACK = "frame_release_r"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle"; + ANIM_DEATH = "none"; + SOUND_DEATH = "none"; + BASE_MOVESPEED = 2.0; + SetMoveSpeed(BASE_MOVESPEED); + SetAnimMoveSpeed(BASE_MOVESPEED); + SOUND_IDLE1 = "monsters/dwarf_bomber/db_idle1.wav"; + SOUND_IDLE2 = "monsters/dwarf_bomber/db_idle2.wav"; + SOUND_IDLE3 = "monsters/dwarf_bomber/db_idle3.wav"; + SOUND_PAIN1 = "monsters/dwarf_bomber/db_pain1.wav"; + SOUND_PAIN2 = "monsters/dwarf_bomber/db_pain2.wav"; + SOUND_PAIN3 = "monsters/dwarf_bomber/db_pain3.wav"; + SOUND_FLINCH1 = "monsters/dwarf_bomber/db_flinch1.wav"; + SOUND_FLINCH2 = "monsters/dwarf_bomber/db_flinch2.wav"; + SOUND_FLINCH3 = "monsters/dwarf_bomber/db_flinch3.wav"; + ANIM_FLINCH = "anim_xbow_flinch"; + NPC_MATERIAL_TYPE = "flesh"; + NPC_USE_PAIN = 1; + NPC_USE_IDLE = 1; + NPC_USE_FLINCH = 1; + } + + void game_precache() + { + Precache("monsters/dwarf_bomber_tnt.mdl"); + Precache("bigsmoke.spr"); + Precache(CL_SCRIPT); + Precache(PROJ_SCRIPT); + Precache("fleshgibs.mdl"); + Precache("misc/sylphiels_stuff.mdl"); + // svplaysound: svplaysound 0 0 monsters/dwarf_bomber/fuse_loop.wav + EmitSound(0, 0, "monsters/dwarf_bomber/fuse_loop.wav"); + } + + void OnSpawn() override + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + dbomber_spawn(); + } + + void dbomber_spawn() + { + SetName("Mad Dwarven Bomber"); + SetModel("monsters/dwarf_bomber.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 6); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetWidth(32); + SetHeight(48); + SetRoam(true); + SetHealth(300); + SetRace("evil"); + SetHearingSensitivity(8); + } + + void npc_targetsighted() + { + if ((DID_INTRO)) return; + DID_INTRO = 1; + NPC_NEXT_FLINCH = GetGameTime(); + NPC_NEXT_FLINCH += NPC_FREQ_FLINCH; + if (GetGameTime() > NEXT_ALERT) + { + PlayAnim("critical", ANIM_ALERT); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + NEXT_ALERT = GetGameTime(); + NEXT_ALERT += 20.0; + } + NEXT_BOMB_DRAW = GetGameTime(); + NEXT_BOMB_DRAW += 1.0; + if (!(GetGameTime() > NEXT_CL_UPDATE)) return; + if (CL_SCRIPT_IDX > -1) + { + ClientEvent("update", "all", CL_SCRIPT_IDX, "end_fx"); + } + CL_SCRIPT_IDX = -1; + update_cl_script(); + } + + void cycle_down() + { + DID_INTRO = 0; + PlayAnim("critical", ANIM_ALERT); + EmitSound(GetOwner(), 0, SOUND_GLOAT, 10); + NEXT_ALERT = GetGameTime(); + NEXT_ALERT += 20.0; + } + + void npc_selectattack() + { + if ((HR_ACTIVE)) + { + ANIM_ATTACK = ANIM_THROW_R; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((HL_ACTIVE)) + { + ANIM_ATTACK = ANIM_THROW_L; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (RandomInt(1, 2) == 1) + { + ANIM_ATTACK = ANIM_DRAW_R; + } + else + { + ANIM_ATTACK = ANIM_DRAW_L; + } + } + + void draw_random_bomb() + { + if ((SUSPEND_AI)) return; + string L_N_ACTIVE = (HR_ACTIVE + HL_ACTIVE); + if (!(L_N_ACTIVE < 2)) return; + int L_RND_HAND = RandomInt(1, 2); + if (L_RND_HAND == 1) + { + if (!(HR_ACTIVE)) + { + int L_DRAWING_BOMB = 1; + PlayAnim("critical", ANIM_DRAW_R); + } + } + else + { + if (!(HL_ACTIVE)) + { + int L_DRAWING_BOMB = 1; + PlayAnim("critical", ANIM_DRAW_L); + } + } + if ((L_DRAWING_BOMB)) return; + if (!(HR_ACTIVE)) + { + PlayAnim("critical", ANIM_DRAW_R); + } + if (!(HL_ACTIVE)) + { + PlayAnim("critical", ANIM_DRAW_L); + } + } + + void frame_draw_r() + { + EmitSound(GetOwner(), 0, SOUND_FUSE_LIGHT, 10); + update_submodels("activate", "right"); + } + + void frame_draw_l() + { + EmitSound(GetOwner(), 0, SOUND_FUSE_LIGHT, 10); + update_submodels("activate", "left"); + } + + void update_submodels() + { + if (param1 == "activate") + { + if (param2 == "right") + { + if (!(HR_ACTIVE)) + { + HR_ACTIVE = 1; + // svplaysound: svplaysound HR_CHAN 5 SOUND_FUSE_LOOP + EmitSound(HR_CHAN, 5, SOUND_FUSE_LOOP); + } + } + else + { + if (param2 == "left") + { + if (!(HL_ACTIVE)) + { + HL_ACTIVE = 1; + // svplaysound: svplaysound HL_CHAN 5 SOUND_FUSE_LOOP + EmitSound(HL_CHAN, 5, SOUND_FUSE_LOOP); + } + } + else + { + if (param2 == "both") + { + if (!(HR_ACTIVE)) + { + HR_ACTIVE = 1; + // svplaysound: svplaysound HR_CHAN 5 SOUND_FUSE_LOOP + EmitSound(HR_CHAN, 5, SOUND_FUSE_LOOP); + } + if (!(HL_ACTIVE)) + { + HL_ACTIVE = 1; + // svplaysound: svplaysound HL_CHAN 5 SOUND_FUSE_LOOP + EmitSound(HL_CHAN, 5, SOUND_FUSE_LOOP); + } + } + } + } + } + else + { + if (param1 == "deactivate") + { + if (param2 == "right") + { + if ((HR_ACTIVE)) + { + // svplaysound: if ( HR_ACTIVE ) svplaysound HR_CHAN 0 SOUND_FUSE_LOOP + EmitSound(HR_CHAN, 0, SOUND_FUSE_LOOP); + } + HR_ACTIVE = 0; + } + else + { + if (param2 == "left") + { + if ((HL_ACTIVE)) + { + // svplaysound: if ( HL_ACTIVE ) svplaysound HL_CHAN 0 SOUND_FUSE_LOOP + EmitSound(HL_CHAN, 0, SOUND_FUSE_LOOP); + } + HL_ACTIVE = 0; + } + else + { + if (param2 == "both") + { + if ((HR_ACTIVE)) + { + // svplaysound: if ( HR_ACTIVE ) svplaysound HR_CHAN 0 SOUND_FUSE_LOOP + EmitSound(HR_CHAN, 0, SOUND_FUSE_LOOP); + } + if ((HL_ACTIVE)) + { + // svplaysound: if ( HL_ACTIVE ) svplaysound HL_CHAN 0 SOUND_FUSE_LOOP + EmitSound(HL_CHAN, 0, SOUND_FUSE_LOOP); + } + HR_ACTIVE = 0; + HL_ACTIVE = 0; + } + } + } + } + } + string L_N_ACTIVE = (HR_ACTIVE + HL_ACTIVE); + if (L_N_ACTIVE == 2) + { + SetModelBody(1, 3); + } + else + { + if ((HR_ACTIVE)) + { + SetModelBody(1, 1); + } + if ((HL_ACTIVE)) + { + SetModelBody(1, 2); + } + if (L_N_ACTIVE == 0) + { + SetModelBody(1, 0); + } + } + if (CL_SCRIPT_IDX > -1) + { + ClientEvent("update", "all", CL_SCRIPT_IDX, "set_hands", HR_ACTIVE, HL_ACTIVE); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + float L_GAME_TIME = GetGameTime(); + if (m_hAttackTarget != "unset") + { + if (!(SUSPEND_AI)) + { + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + if (!(NPC_IS_TURRET)) + { + } + if (L_GAME_TIME > NEXT_LEAP_FORWARD) + { + } + NEXT_LEAP_FORWARD = L_GAME_TIME; + LogDebug("npcatk_hunt leap forward"); + NEXT_LEAP_FORWARD += FREQ_LEAP_FORWARD; + ROLL_DIR = 200; + PlayAnim("critical", ANIM_JUMP); + // PlayRandomSound from: SOUND_GIGGLE1, SOUND_GIGGLE2, SOUND_GIGGLE3, SOUND_GIGGLE4, SOUND_GIGGLE5 + array sounds = {SOUND_GIGGLE1, SOUND_GIGGLE2, SOUND_GIGGLE3, SOUND_GIGGLE4, SOUND_GIGGLE5}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetEntityRange(m_hAttackTarget) < 96) + { + if (!(NPC_IS_TURRET)) + { + } + if (L_GAME_TIME > NEXT_DODGE) + { + } + NEXT_DODGE = L_GAME_TIME; + NEXT_DODGE += FREQ_DODGE; + LogDebug("npcatk_hunt dodge"); + ROLL_DIR = -100; + // PlayRandomSound from: SOUND_GIGGLE1, SOUND_GIGGLE2, SOUND_GIGGLE3, SOUND_GIGGLE4, SOUND_GIGGLE5 + array sounds = {SOUND_GIGGLE1, SOUND_GIGGLE2, SOUND_GIGGLE3, SOUND_GIGGLE4, SOUND_GIGGLE5}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RandomInt(1, 2) == 1) + { + PlayAnim("critical", ANIM_DODGE); + } + else + { + PlayAnim("critical", ANIM_JUMP); + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (L_GAME_TIME > NEXT_BOMB_DRAW) + { + string L_N_ACTIVE = (HR_ACTIVE + HL_ACTIVE); + if (L_N_ACTIVE < 2) + { + } + NEXT_BOMB_DRAW = L_GAME_TIME; + NEXT_BOMB_DRAW += FREQ_BOMB_DRAW; + draw_random_bomb(); + } + } + if ((HR_ACTIVE)) + { + if (L_GAME_TIME > NEXT_RBOMB_BEAM) + { + } + NEXT_RBOMB_BEAM = L_GAME_TIME; + NEXT_RBOMB_BEAM += FREQ_RBOMB_BEAM; + Effect("beam", "follow", "lgtning.spr", GetOwner(), HR_ATTACH_IDX, 1, 4.0, 200, Vector3(255, 0, 0)); + } + if ((HL_ACTIVE)) + { + if (L_GAME_TIME > NEXT_LBOMB_BEAM) + { + } + NEXT_LBOMB_BEAM = L_GAME_TIME; + NEXT_LBOMB_BEAM += FREQ_LBOMB_BEAM; + Effect("beam", "follow", "lgtning.spr", GetOwner(), HL_ATTACH_IDX, 1, 4.0, 200, Vector3(255, 0, 0)); + } + if (CL_SCRIPT_IDX > -1) + { + if (L_GAME_TIME > NEXT_CL_UPDATE) + { + } + ClientEvent("update", "all", CL_SCRIPT_IDX, "end_fx"); + CL_SCRIPT_IDX = -1; + update_cl_script(); + } + } + + void npc_bs_struck() + { + if (!(GetEntityRange(param1) < 128)) return; + if (!(GetGameTime() > NEXT_DODGE)) return; + NEXT_DODGE = GetGameTime(); + NEXT_DODGE += FREQ_DODGE; + LogDebug("npc_bs_struck dodge"); + ROLL_DIR = -100; + if (RandomInt(1, 2) == 1) + { + PlayAnim("critical", ANIM_DODGE); + } + else + { + PlayAnim("critical", ANIM_JUMP); + } + } + + void update_cl_script() + { + if (CL_SCRIPT_IDX > 0) + { + ClientEvent("update", "all", CL_SCRIPT_IDX, "set_hands", HR_ACTIVE, HL_ACTIVE); + } + else + { + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner()), FREQ_CL_UPDATE, HR_ACTIVE, HL_ACTIVE); + CL_SCRIPT_IDX = "game.script.last_sent_id"; + NEXT_CL_UPDATE = GetGameTime(); + NEXT_CL_UPDATE += FREQ_CL_UPDATE; + } + } + + void frame_release_r() + { + update_submodels("deactivate", "right"); + string L_MY_ORG = GetEntityOrigin(GetOwner()); + string L_TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string L_TARG_RANGE = GetEntityRange(m_hAttackTarget); + string L_TARG_DIR = (L_TARG_ORG - L_MY_ORG).Normalize(); + L_TARG_DIR *= Vector3(L_TARG_RANGE, L_TARG_RANGE, L_TARG_RANGE); + L_TARG_DIR += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 110)); + if ((L_MY_ORG).z < (L_TARG_ORG).z) + { + string L_VADJ = ((L_TARG_ORG).z - (L_MY_ORG).z); + L_VADJ *= 4.0; + L_VADJ += L_TARG_RANGE; + L_TARG_DIR += /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, L_VADJ)); + } + L_TARG_DIR += VEC_ENGLISH; + SpawnNPC(PROJ_SCRIPT, GetEntityProperty(GetOwner(), "attachpos"), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), L_TARG_DIR + VEC_ENGLISH += "z"; + } + + void frame_release_l() + { + update_submodels("deactivate", "left"); + string L_MY_ORG = GetEntityOrigin(GetOwner()); + string L_TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string L_TARG_RANGE = GetEntityRange(m_hAttackTarget); + string L_TARG_DIR = (L_TARG_ORG - L_MY_ORG).Normalize(); + L_TARG_DIR *= Vector3(L_TARG_RANGE, L_TARG_RANGE, L_TARG_RANGE); + if ((L_MY_ORG).z < (L_TARG_ORG).z) + { + string L_VADJ = ((L_TARG_ORG).z - (L_MY_ORG).z); + L_VADJ *= 4.0; + LogDebug("vadj frame_release_l L_VADJ [ ((L_TARG_ORG).z - (L_MY_ORG).z) ]"); + L_TARG_DIR += /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, L_VADJ)); + } + L_TARG_DIR += VEC_ENGLISH; + SpawnNPC(PROJ_SCRIPT, GetEntityProperty(GetOwner(), "attachpos"), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), L_TARG_DIR + VEC_ENGLISH += "z"; + } + + void ext_hittarget() + { + VEC_ENGLISH = Vector3(0, 0, 0); + } + + void frame_dodge() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, ROLL_DIR, 0)); + } + + void frame_dodge_up() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, ROLL_DIR, 150)); + } + + void friendly_fire() + { + float RND_PITCH = Random(85.00, 115.00); + // svplaysound: svplaysound 2 10 SOUND_YELP 0.8 RND_PITCH + EmitSound(2, 10, SOUND_YELP, 0.8, RND_PITCH); + ROLL_DIR = 0; + if (RandomInt(1, 2) == 1) + { + PlayAnim("critical", ANIM_DODGE); + } + else + { + PlayAnim("critical", ANIM_JUMP); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((DID_FAKE_DEATH)) return; + DID_FAKE_DEATH = 1; + EmitSound(GetOwner(), 2, SOUND_SUICIDE, 10); + SetDamageResistance("cold", 0); + ClientEvent("update", "all", CL_SCRIPT_IDX, "end_fx"); + CL_SCRIPT_IDX = -1; + update_cl_script(); + ClearFX(); + SetAlive(1); + SetInvincible(true); + SetHealth(1); + npcatk_suspend_movement(ANIM_EXPLODE); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_EXPLODE); + ScheduleDelayedEvent(20.0, "remove_me"); + } + + void frame_explode_draw() + { + EmitSound(GetOwner(), 0, SOUND_FUSE_LIGHT, 10); + update_submodels("activate", "both"); + } + + void frame_explode_land() + { + } + + void frame_explode_prep() + { + } + + void frame_explode_fin() + { + Effect("tempent", "gibs", "fleshgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, 50, 50, 15, 20.0); + ClientEvent("update", "all", CL_SCRIPT_IDX, "end_fx"); + ClientEvent("new", "all", "effects/sfx_explode", GetEntityOrigin(GetOwner()), 256); + // svplaysound: svplaysound HR_CHAN 0 SOUND_FUSE_LOOP + EmitSound(HR_CHAN, 0, SOUND_FUSE_LOOP); + // svplaysound: svplaysound HL_CHAN 0 SOUND_FUSE_LOOP + EmitSound(HL_CHAN, 0, SOUND_FUSE_LOOP); + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 32), 256, DMG_SUICIDE, 0.1, GetOwner(), GetOwner(), "none", "generic", "dmgevent:suicide"); + ScheduleDelayedEvent(0.1, "remove_me"); + if ((StringToLower(GetMapName())).findFirst("rmine") == 0) + { + DROP_TNT = 1; + } + if ((DROP_TNT)) + { + SpawnNPC("other/qitem", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: "tnt" + float RND_YAW = Random(0, 359.99); + SetVelocity(m_hLastCreated, /* TODO: $relvel */ $relvel(Vector3(0, RND_YAW, 0), 0, ",", 800, ",", 120)); + Effect("beam", "follow", "lgtning.spr", m_hLastCreated, 1, 1, 8.0, 200, Vector3(0, 255, 0)); + } + } + + void set_drop_tnt() + { + DROP_TNT = 1; + } + + void suicide_dodamage() + { + string CUR_TARGET = param2; + string TARGET_ORG = GetEntityOrigin(CUR_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + SetVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 110))); + } + + void remove_me() + { + if ((DID_FSUICIDE)) return; + DID_FSUICIDE = 1; + SetInvincible(false); + SetEntityOrigin(GetOwner(), Vector3(20000, -20000, 20000)); + npc_suicide(); + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_bomber_cl.as b/scripts/angelscript/monsters/dwarf_bomber_cl.as new file mode 100644 index 00000000..3f955487 --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_bomber_cl.as @@ -0,0 +1,130 @@ +#pragma context server + +namespace MS +{ + +class DwarfBomberCl : CGameScript +{ + string FX_ACTIVATE_TIME; + int FX_ACTIVE; + string FX_DURATION; + string FX_LACTIVE; + string FX_OWNER; + string FX_RACTIVE; + string GLOW_COLOR; + int GLOW_RAD; + string LHAND_IDX; + string LIGHT_LHAND; + string LIGHT_RHAND; + string RHAND_IDX; + + DwarfBomberCl() + { + RHAND_IDX = "attachment0"; + LHAND_IDX = "attachment1"; + GLOW_RAD = 64; + GLOW_COLOR = Vector3(255, 64, 0); + } + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + FX_ACTIVATE_TIME = GetGameTime(); + FX_RACTIVE = param3; + FX_LACTIVE = param4; + set_hands(FX_RACTIVE, FX_LACTIVE); + sparks_loop(); + SetCallback("render", "enable"); + FX_DURATION("end_fx"); + } + + void sparks_loop() + { + if (!(FX_ACTIVE)) return; + Random(0_1, 0_5)("sparks_loop"); + if ((FX_RACTIVE)) + { + ClientEffect("spark", FX_OWNER, 0); + } + if ((FX_LACTIVE)) + { + ClientEffect("spark", FX_OWNER, 1); + } + } + + void game_prerender() + { + if ((FX_ACTIVE)) + { + if ((FX_RACTIVE)) + { + ClientEffect("light", LIGHT_RHAND, /* TODO: $getcl */ $getcl(FX_OWNER, RHAND_IDX), GLOW_RAD, GLOW_COLOR, 1.0); + } + else + { + if (LIGHT_RHAND > 0) + { + } + ClientEffect("light", LIGHT_RHAND, /* TODO: $getcl */ $getcl(FX_OWNER, RHAND_IDX), 0, Vector3(0, 0, 0), 1.0); + LIGHT_RHAND = -1; + } + if ((FX_LACTIVE)) + { + ClientEffect("light", LIGHT_LHAND, /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_IDX), GLOW_RAD, GLOW_COLOR, 1.0); + } + else + { + if (LIGHT_LHAND > 0) + { + } + ClientEffect("light", LIGHT_LHAND, /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_IDX), 0, Vector3(0, 0, 0), 1.0); + LIGHT_LHAND = -1; + } + } + else + { + if (LIGHT_RHAND > 0) + { + ClientEffect("light", LIGHT_RHAND, /* TODO: $getcl */ $getcl(FX_OWNER, RHAND_IDX), 0, Vector3(0, 0, 0), 1.0); + LIGHT_RHAND = -1; + } + if (LIGHT_LHAND > 0) + { + ClientEffect("light", LIGHT_LHAND, /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_IDX), 0, Vector3(0, 0, 0), 1.0); + LIGHT_LHAND = -1; + } + } + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void set_hands() + { + FX_RACTIVE = param1; + FX_LACTIVE = param2; + if ((FX_RACTIVE)) + { + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, RHAND_IDX), GLOW_RAD, GLOW_COLOR, FX_DURATION); + LIGHT_RHAND = "game.script.last_light_id"; + } + if ((FX_LACTIVE)) + { + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_IDX), GLOW_RAD, GLOW_COLOR, FX_DURATION); + LIGHT_LHAND = "game.script.last_light_id"; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_bigaxe.as b/scripts/angelscript/monsters/dwarf_zombie_bigaxe.as new file mode 100644 index 00000000..a061805a --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_bigaxe.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/dwarf_zombie_random.as" + +namespace MS +{ + +class DwarfZombieBigaxe : CGameScript +{ + int WEAPON_TYPE; + + void pick_weapon_type() + { + WEAPON_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_bloat.as b/scripts/angelscript/monsters/dwarf_zombie_bloat.as new file mode 100644 index 00000000..e230b24d --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_bloat.as @@ -0,0 +1,481 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class DwarfZombieBloat : CGameScript +{ + int AM_EXPLODING; + int AM_PUKING; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_EXPLODE; + string ANIM_IDLE; + string ANIM_PUKE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int DID_FAKE_DEATH; + int DID_INTRO; + int DMG_EXPLODE; + int DMG_PROJECTILE; + int DMG_SWIPE; + int DOT_PUKE; + string DO_PROJECTILE; + string DRIFT_ANG; + float FREQ_PUKE; + float FREQ_SPIT; + int IS_BLOODLESS; + int I_AM_TURNABLE; + int LIGHT_SIZE; + float MSC_PUSH_RESIST; + string MY_HEAD_POS; + string MY_LIGHT_IDX; + string MY_PUKE_POS; + string NEARBY_ALLIES; + string NEW_ALLY_TARGET; + string NEXT_ALLY_ALERT; + string NEXT_CONFUSED; + string NEXT_IDLE_SOUND; + string NEXT_LIGHT; + string NEXT_PUKE; + string NEXT_SPIT; + int NPC_GIVE_EXP; + int PUKE_RANGE; + string PUKE_SCRIPT_IDX; + string PUKE_TARGS; + int RAD_EXPLODE; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACKHIT1; + string SOUND_ATTACKHIT2; + string SOUND_ATTACKHIT3; + string SOUND_DEATH; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_DEATH3; + string SOUND_HOLYPAIN1; + string SOUND_HOLYPAIN2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_PUKE; + string SOUND_SPIT1; + string SOUND_SPIT2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_TURNED1; + string SOUND_TURNED2; + string SOUND_TURNED3; + string SOUND_TURNED4; + + DwarfZombieBloat() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_IDLE = "idle"; + ANIM_DEATH = "none"; + SOUND_DEATH = "none"; + MSC_PUSH_RESIST = 0.25; + NPC_GIVE_EXP = 400; + ANIM_ATTACK = "attack"; + ANIM_PUKE = "anim_puke"; + ANIM_EXPLODE = "anim_death"; + FREQ_PUKE = Random(10.0, 20.0); + FREQ_SPIT = Random(1.0, 5.0); + PUKE_RANGE = 256; + RAD_EXPLODE = 300; + SOUND_PUKE = "monsters/mummy/c_mummycom_bat1.wav"; + SOUND_DEATH1 = "agrunt/ag_die5.wav"; + SOUND_DEATH2 = "agrunt/ag_die4.wav"; + SOUND_DEATH3 = "agrunt/ag_die3.wav"; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 120; + SOUND_TURNED1 = "ambience/the_horror1.wav"; + SOUND_TURNED2 = "ambience/the_horror2.wav"; + SOUND_TURNED3 = "ambience/the_horror3.wav"; + SOUND_TURNED4 = "ambience/the_horror4.wav"; + SOUND_HOLYPAIN1 = "agrunt/ag_pain4.wav"; + SOUND_HOLYPAIN2 = "agrunt/ag_die3.wav"; + DMG_PROJECTILE = 300; + DOT_PUKE = 100; + DMG_SWIPE = 100; + DMG_EXPLODE = 2000; + SOUND_SPIT1 = "bullchicken/bc_attack2.wav"; + SOUND_SPIT2 = "bullchicken/bc_attack3.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACKHIT1 = "zombie/claw_strike1.wav"; + SOUND_ATTACKHIT2 = "zombie/claw_strike2.wav"; + SOUND_ATTACKHIT3 = "zombie/claw_strike3.wav"; + SOUND_IDLE1 = "agrunt/ag_idle2.wav"; + SOUND_IDLE2 = "agrunt/ag_alert3.wav"; + SOUND_IDLE3 = "agrunt/ag_idle5.wav"; + SOUND_STRUCK1 = "debris/flesh2.wav"; + SOUND_STRUCK2 = "debris/flesh5.wav"; + SOUND_STRUCK3 = "debris/flesh7.wav"; + SOUND_PAIN1 = "agrunt/ag_pain2.wav"; + SOUND_PAIN2 = "agrunt/ag_pain3.wav"; + SOUND_PAIN3 = "agrunt/ag_pain5.wav"; + SOUND_ALERT = "agrunt/ag_alert2.wav"; + I_AM_TURNABLE = 1; + } + + void game_precache() + { + Precache("bloodspray.spr"); + } + + void OnSpawn() override + { + SetName("Bloated Dwarven Zombie"); + SetModel("monsters/dwarf_bloat.mdl"); + SetWidth(48); + SetHeight(96); + SetRace("undead"); + SetBloodType("green"); + SetHealth(2000); + SetRoam(true); + SetHearingSensitivity(5); + SetDamageResistance("poison", 0.0); + IS_BLOODLESS = 1; + SetDamageResistance("pierce", 1.5); + SetDamageResistance("blunt", 0.75); + SetDamageResistance("holy", 2.5); + SetDamageResistance("cold", 0.5); + SetDamageResistance("lightning", 1.0); + SetDamageResistance("acid", 0.75); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + LIGHT_SIZE = 64; + NEXT_SPIT = GetGameTime(); + NEXT_SPIT += FREQ_SPIT; + NEXT_PUKE = GetGameTime(); + NEXT_PUKE += FREQ_PUKE; + } + + void OnPostSpawn() override + { + LIGHT_SIZE = 64; + ClientEvent("new", "all", "monsters/dwarf_zombie_bloat_light_cl", GetEntityIndex(GetOwner()), Vector3(0, 255, 0), LIGHT_SIZE, 30.0); + MY_LIGHT_IDX = "game.script.last_sent_id"; + NEXT_LIGHT = GetGameTime(); + NEXT_LIGHT += 15.0; + } + + void npc_targetsighted() + { + if ((DID_INTRO)) return; + DID_INTRO = 1; + PlayAnim("critical", ANIM_IDLE); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + NEXT_SPIT = GetGameTime(); + NEXT_SPIT += FREQ_SPIT; + NEXT_PUKE = GetGameTime(); + NEXT_PUKE += FREQ_PUKE; + LIGHT_SIZE = 64; + ClientEvent("update", "all", MY_LIGHT_IDX, "remove_light"); + ClientEvent("new", "all", "monsters/dwarf_zombie_bloat_light_cl", GetEntityIndex(GetOwner()), Vector3(0, 255, 0), LIGHT_SIZE, 30.0); + MY_LIGHT_IDX = "game.script.last_sent_id"; + NEXT_LIGHT = GetGameTime(); + NEXT_LIGHT += 15.0; + } + + void my_target_died() + { + if (!(GetGameTime() > NEXT_CONFUSED)) return; + NEXT_CONFUSED = GetGameTime(); + NEXT_CONFUSED += 20.0; + PlayAnim("critical", ANIM_IDLE); + EmitSound(GetOwner(), 0, SOUND_IDLE2, 10); + DID_INTRO = 0; + } + + void npcatk_lost_sight() + { + if (!(GetGameTime() > NEXT_CONFUSED)) return; + NEXT_CONFUSED = GetGameTime(); + NEXT_CONFUSED += 20.0; + PlayAnim("critical", ANIM_IDLE); + EmitSound(GetOwner(), 0, SOUND_IDLE1, 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((AM_EXPLODING)) return; + if (!(IsEntityAlive(GetOwner()))) return; + float L_GAME_TIME = GetGameTime(); + if (L_GAME_TIME > NEXT_LIGHT) + { + ClientEvent("new", "all", "monsters/dwarf_zombie_bloat_light_cl", GetEntityIndex(GetOwner()), Vector3(0, 255, 0), LIGHT_SIZE, 15.0); + MY_LIGHT_IDX = "game.script.last_sent_id"; + NEXT_LIGHT = L_GAME_TIME; + NEXT_LIGHT += 15.0; + } + if ((SUSPEND_AI)) return; + if ((AM_PUKING)) return; + if (L_GAME_TIME > NEXT_IDLE_SOUND) + { + NEXT_IDLE_SOUND = L_GAME_TIME; + NEXT_IDLE_SOUND += Random(5.0, 15.0); + int RND_SOUND = RandomInt(1, 3); + if (RND_SOUND == 1) + { + EmitSound(GetOwner(), 0, SOUND_IDLE1, 10); + } + if (RND_SOUND == 2) + { + EmitSound(GetOwner(), 0, SOUND_IDLE2, 10); + } + if (RND_SOUND == 3) + { + EmitSound(GetOwner(), 0, SOUND_IDLE3, 10); + } + } + if (!(m_hAttackTarget != "none")) return; + if (L_GAME_TIME > NEXT_SPIT) + { + if (GetEntityRange(m_hAttackTarget) > 256) + { + } + if ((NPC_CANSEE_TARGET)) + { + } + DO_PROJECTILE = 1; + NEXT_SPIT = L_GAME_TIME; + NEXT_SPIT += FREQ_SPIT; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("once", ANIM_ATTACK); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityRange(m_hAttackTarget) < 256)) return; + if (!(L_GAME_TIME > NEXT_PUKE)) return; + NEXT_PUKE = L_GAME_TIME; + NEXT_PUKE += FREQ_PUKE; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 15.0; + do_puke(); + } + + void frame_attack() + { + if ((DO_PROJECTILE)) + { + // PlayRandomSound from: SOUND_SPIT1, SOUND_SPIT2 + array sounds = {SOUND_SPIT1, SOUND_SPIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DO_PROJECTILE = 0; + TossProjectile("proj_poison_spit2", GetEntityProperty(GetOwner(), "attachpos"), m_hAttackTarget, 250, DMG_PROJECTILE, 2, "none"); + Effect("glow", "ent_lastprojectile", Vector3(0, 255, 0), 64, -1, 0); + } + else + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, 0.8, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:swipe"); + } + } + + void swipe_dodamage() + { + if ((param1)) + { + // PlayRandomSound from: SOUND_ATTACKHIT1, SOUND_ATTACKHIT2, SOUND_ATTACKHIT3 + array sounds = {SOUND_ATTACKHIT1, SOUND_ATTACKHIT2, SOUND_ATTACKHIT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + AddVelocity(m_hAttackTarget, Vector3(-25, 150, 110)); + } + else + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void do_puke() + { + AM_PUKING = 1; + npcatk_suspend_ai(); + CAN_FLINCH = 0; + npcatk_suspend_movement(ANIM_PUKE); + PlayAnim("critical", ANIM_PUKE); + EmitSound(GetOwner(), 2, SOUND_PUKE, 10); + LIGHT_SIZE = PUKE_RANGE; + ClientEvent("update", "all", MY_LIGHT_IDX, "light_grow", PUKE_RANGE, 0.5); + } + + void frame_puke_start() + { + ClientEvent("new", "all", "monsters/dwarf_zombie_bloat_cl", GetEntityIndex(GetOwner())); + PUKE_SCRIPT_IDX = "game.script.last_sent_id"; + DRIFT_ANG = GetEntityAngles(GetOwner()); + puke_scan_loop(); + } + + void puke_scan_loop() + { + if (!(AM_PUKING)) return; + ScheduleDelayedEvent(0.25, "puke_scan_loop"); + DRIFT_ANG = GetEntityAngles(GetOwner()); + MY_HEAD_POS = GetEntityProperty(GetOwner(), "attachpos"); + MY_PUKE_POS = GetEntityProperty(GetOwner(), "attachpos"); + // TODO: UNCONVERTED: vectorset.yaw DRIFT_ANG $angles(MY_HEAD_POS,MY_PUKE_POS) + PUKE_TARGS = FindEntitiesInSphere("enemy", PUKE_RANGE); + if (!(PUKE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(PUKE_TARGS, ";"); i++) + { + puke_affect_targets(); + } + } + + void puke_affect_targets() + { + string CUR_TARG = GetToken(PUKE_TARGS, i, ";"); + string CUR_TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(CUR_TARG_ORG, MY_HEAD_POS, DRIFT_ANG))) return; + string TRACE_START = MY_HEAD_POS; + string TRACE_END = CUR_TARG_ORG; + string TRACE_LINE = TraceLine(MY_HEAD_POS, CUR_TARG_ORG); + if (!(TRACE_LINE == TRACE_END)) return; + ApplyEffect(CUR_TARG, "effects/dot_poison_blind", 5.0, GetEntityIndex(GetOwner()), DOT_PUKE); + if (!(GetGameTime() > NEXT_ALLY_ALERT)) return; + set_ally_targets(CUR_TARG); + } + + void frame_puke_finish() + { + ClientEvent("update", "all", PUKE_SCRIPT_IDX, "end_puke"); + AM_PUKING = 0; + npcatk_resume_movement(); + npcatk_resume_ai(); + LIGHT_SIZE = 64; + ClientEvent("update", "all", MY_LIGHT_IDX, "light_shrink", 64, 1); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((DID_FAKE_DEATH)) return; + DID_FAKE_DEATH = 1; + ClientEvent("update", "all", MY_LIGHT_IDX, "remove_light"); + ClientEvent("new", "all", "monsters/dwarf_zombie_bloat_light_cl", GetEntityIndex(GetOwner()), Vector3(0, 255, 0), LIGHT_SIZE, 30.0); + MY_LIGHT_IDX = "game.script.last_sent_id"; + if ((AM_PUKING)) + { + ClientEvent("update", "all", PUKE_SCRIPT_IDX, "end_puke"); + EmitSound(GetOwner(), 2, SOUND_PUKE, 0); + } + ClearFX(); + SetAlive(1); + SetInvincible(true); + npcatk_suspend_movement(ANIM_EXPLODE); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_EXPLODE); + EmitSound(GetOwner(), 0, SOUND_DEATH1, 10); + DID_FAKE_DEATH = 1; + AM_EXPLODING = 1; + ScheduleDelayedEvent(0.1, "light_flicker"); + } + + void light_flicker() + { + ClientEvent("update", "all", MY_LIGHT_IDX, "light_flicker"); + } + + void frame_death_buckle1() + { + EmitSound(GetOwner(), 0, SOUND_DEATH2, 10); + ClientEvent("update", "all", MY_LIGHT_IDX, "light_grow", 512, 2); + } + + void frame_death_buckle2() + { + EmitSound(GetOwner(), 0, SOUND_DEATH3, 10); + LIGHT_SIZE = 512; + } + + void frame_death_explode() + { + ClientEvent("new", "all", "effects/sfx_acid_splash", GetEntityOrigin(GetOwner()), 512); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), RAD_EXPLODE, DMG_EXPLODE, 0.1, GetOwner(), GetOwner(), "none", "poison_effect", "dmgevent:explode"); + } + + void explode_dodamage() + { + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_poison_blind", 8.0, GetEntityIndex(GetOwner()), DOT_PUKE); + if (!(GetGameTime() > NEXT_ALLY_ALERT)) return; + set_ally_targets(GetEntityIndex(param2)); + } + + void frame_death_done() + { + SetInvincible(false); + SetEntityOrigin(GetOwner(), Vector3(20000, -20000, 20000)); + npc_suicide(); + } + + void set_ally_targets() + { + NEXT_ALLY_ALERT = GetGameTime(); + NEXT_ALLY_ALERT += 15.0; + NEW_ALLY_TARGET = param1; + NEARBY_ALLIES = FindEntitiesInSphere("ally", 1024); + if (!(NEARBY_ALLIES != "none")) return; + for (int i = 0; i < GetTokenCount(NEARBY_ALLIES, ";"); i++) + { + set_allies_target_loop(); + } + } + + void set_allies_target_loop() + { + string CUR_ALLY = GetToken(NEARBY_ALLIES, i, ";"); + CallExternal(CUR_ALLY, "npcatk_settarget", NEW_ALLY_TARGET); + } + + void OnDamage(int damage) override + { + if ((param3).findFirst("effect") >= 0) + { + int L_DO_PAIN = RandomInt(1, 3); + } + if (L_DO_PAIN == 1) + { + float L_RND_SND = Random(1, 3); + if (L_RND_SND == 1) + { + EmitSound(GetOwner(), 0, SOUND_PAIN1, 10); + } + if (L_RND_SND == 2) + { + EmitSound(GetOwner(), 0, SOUND_PAIN2, 10); + } + if (L_RND_SND == 3) + { + EmitSound(GetOwner(), 0, SOUND_PAIN3, 10); + } + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_bloat_cl.as b/scripts/angelscript/monsters/dwarf_zombie_bloat_cl.as new file mode 100644 index 00000000..8966faf4 --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_bloat_cl.as @@ -0,0 +1,81 @@ +#pragma context client + +namespace MS +{ + +class DwarfZombieBloatCl : CGameScript +{ + string CLOUD_ANG; + int DO_PUKE; + string MY_OWNER; + string PUKE_SPRITE; + int PUKE_SPRITE_FRAMES; + + DwarfZombieBloatCl() + { + PUKE_SPRITE = "bloodspray.spr"; + PUKE_SPRITE_FRAMES = 10; + Precache(PUKE_SPRITE); + } + + void client_activate() + { + MY_OWNER = param1; + DO_PUKE = 1; + puke_loop(); + ScheduleDelayedEvent(15.0, "end_puke"); + } + + void end_puke() + { + DO_PUKE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void puke_loop() + { + if (!(DO_PUKE)) return; + ScheduleDelayedEvent(0.1, "puke_loop"); + string OWNER_HEAD = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"); + string OWNER_PUKE = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment1"); + CLOUD_ANG = /* TODO: $angles */ $angles(OWNER_HEAD, OWNER_PUKE); + CLOUD_ANG = /* TODO: $vec.yaw */ $vec.yaw(CLOUD_ANG); + ClientEffect("tempent", "sprite", PUKE_SPRITE, /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"), "setup_puke", "update_puke"); + } + + void update_puke() + { + string L_CUR_SCALE = "game.tempent.fuser1"; + L_CUR_SCALE += 0.1; + ClientEffect("tempent", "set_current_prop", "scale", L_CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", L_CUR_SCALE); + } + + void setup_puke() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", PUKE_SPRITE_FRAMES); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + float L_START_SCALE = Random(0.25, 1.0); + ClientEffect("tempent", "set_current_prop", "scale", L_START_SCALE); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(2, 4)); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "fuser1", L_START_SCALE); + float RND_RL = Random(-10, 10); + float RND_UD = Random(-220, -180); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(-75, CLOUD_ANG, 0), Vector3(RND_RL, 400, RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_bloat_light_cl.as b/scripts/angelscript/monsters/dwarf_zombie_bloat_light_cl.as new file mode 100644 index 00000000..ee18bb80 --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_bloat_light_cl.as @@ -0,0 +1,111 @@ +#pragma context client + +namespace MS +{ + +class DwarfZombieBloatLightCl : CGameScript +{ + int FLICKER_COUNT; + string GLOW_COLOR; + string GLOW_RAD; + string LIGHT_RAD_RATE; + string NEW_GLOW_RAD; + string SKEL_ID; + string SKEL_LIGHT_ID; + int SND_COUNT; + + void client_activate() + { + SKEL_ID = param1; + GLOW_COLOR = param2; + GLOW_RAD = param3; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + PARAM4("remove_light"); + } + + void game_prerender() + { + if (NEW_GLOW_RAD > 0) + { + if (GLOW_RAD < NEW_GLOW_RAD) + { + GLOW_RAD += LIGHT_RAD_RATE; + } + if (GLOW_RAD > NEW_GLOW_RAD) + { + GLOW_RAD -= LIGHT_RAD_RATE; + } + } + if (!(/* TODO: $getcl */ $getcl(SKEL_ID, "exists"))) return; + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void remove_light() + { + RemoveScript(); + } + + void light_grow() + { + NEW_GLOW_RAD = param1; + LIGHT_RAD_RATE = param2; + FLICKER_COUNT -= 0; + } + + void light_shrink() + { + NEW_GLOW_RAD = param1; + LIGHT_RAD_RATE = param2; + } + + void light_flicker() + { + FLICKER_COUNT = 5; + SND_COUNT = 0; + do_flicker(); + } + + void do_flicker() + { + if (!(FLICKER_COUNT > 0)) return; + FLICKER_COUNT -= 1; + if (GLOW_RAD != 1) + { + NEW_GLOW_RAD = 1; + GLOW_RAD = 1; + } + else + { + NEW_GLOW_RAD = 128; + GLOW_RAD = 128; + } + SND_COUNT += 1; + string L_SND_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + L_SND_POS += "z"; + if (SND_COUNT == 1) + { + EmitSound3D("magic/energy1.wav", 10, L_SND_POS, 0.8, 3, 100); + } + if (SND_COUNT == 2) + { + EmitSound3D("magic/energy2.wav", 10, L_SND_POS, 0.8, 3, 100); + } + if (SND_COUNT == 3) + { + EmitSound3D("magic/energy3.wav", 10, L_SND_POS, 0.8, 3, 100); + } + if (SND_COUNT == 4) + { + EmitSound3D("magic/energy4.wav", 10, L_SND_POS, 0.8, 3, 100); + SND_COUNT = 0; + } + Random(0_2, 0_6)("do_flicker"); + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_hbow.as b/scripts/angelscript/monsters/dwarf_zombie_hbow.as new file mode 100644 index 00000000..4bbbbfdd --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_hbow.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "monsters/dwarf_zombie_sbow.as" + +namespace MS +{ + +class DwarfZombieHbow : CGameScript +{ + string AMMO_TYPE; + int DMG_XBOW; + int IMMUNE_VAMPIRE; + int IS_BLOODLESS; + int IS_UNHOLY; + string LANTERN_COLOR; + float PBOLT_DURATION; + string SOUND_XBOW_STRETCH; + int XBOW_TYPE; + + DwarfZombieHbow() + { + XBOW_TYPE = 0; + DMG_XBOW = 60; + PBOLT_DURATION = 15.0; + SOUND_XBOW_STRETCH = "weapons/bow/stretch.wav"; + LANTERN_COLOR = Vector3(32, 0, 16); + } + + void frame_reload_hxbow() + { + EmitSound(GetOwner(), 0, SOUND_XBOW_STRETCH, 10); + } + + void frame_attack_hxbow() + { + bow_fire(); + } + + void select_ammo() + { + if (!(AMMO_TYPE == "unset")) return; + int L_RND_TYPE = RandomInt(1, 3); + if (L_RND_TYPE == 1) + { + AMMO_TYPE = "poison"; + } + if (L_RND_TYPE == 2) + { + AMMO_TYPE = "explode"; + } + if (L_RND_TYPE == 3) + { + AMMO_TYPE = "pierce"; + } + adjust_xp(); + } + + void darcher_spawn() + { + SetName("Dwarven Zombie Bowman"); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 7); + SetWidth(32); + SetHeight(48); + SetRoam(true); + SetHealth(300); + SetRace("undead"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 2.0); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("cold", 0.5); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("fire", 1.25); + SetDamageResistance("slash", 1.25); + SetHearingSensitivity(8); + IS_BLOODLESS = 1; + IMMUNE_VAMPIRE = 1; + IS_UNHOLY = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_pickaxe.as b/scripts/angelscript/monsters/dwarf_zombie_pickaxe.as new file mode 100644 index 00000000..ce5544e8 --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_pickaxe.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/dwarf_zombie_random.as" + +namespace MS +{ + +class DwarfZombiePickaxe : CGameScript +{ + int WEAPON_TYPE; + + void pick_weapon_type() + { + WEAPON_TYPE = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_random.as b/scripts/angelscript/monsters/dwarf_zombie_random.as new file mode 100644 index 00000000..1cdc3d2e --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_random.as @@ -0,0 +1,543 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "NPCs/dwarf_lantern_base.as" + +namespace MS +{ + +class DwarfZombieRandom : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_LEAP; + string ANIM_NOD; + string ANIM_RUN; + string ANIM_SLASH; + string ANIM_WALK; + float ATTACK2_ACCURACY; + string ATTACK2_CHANCE; + string ATTACK2_DAMAGE; + float ATTACK_ACCURACY; + string ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_VOLUME; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int CAN_WANDER; + int DID_ALERT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string DROP_ITEM1; + string DROP_ITEM1_CHANCE; + int FLEE_CHANCE; + int FLEE_DISTANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + float HURT_POINT; + int IS_FLEEING; + int I_AM_TURNABLE; + int JUST_SPAWNED; + string LANTERN_COLOR; + string LNT_B; + string LNT_G; + string LNT_R; + int MAX_TYPE; + int MONSTER_WIDTH; + int MOVE_RAGE; + string NPCATK_FLEE_RESTORETARGET; + string NPC_GIVE_EXP; + int RETALIATE_CHANGETARGET_CHANCE; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACKHIT1; + string SOUND_ATTACKHIT2; + string SOUND_ATTACKHIT3; + string SOUND_DEATH; + string SOUND_HOLYPAIN1; + string SOUND_HOLYPAIN2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_LEAP; + string SOUND_NOD; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STEP3; + string SOUND_STEP4; + string SOUND_STRUCK; + string SOUND_TURNED1; + string SOUND_TURNED2; + string SOUND_TURNED3; + string SOUND_TURNED4; + string STRUCK_BY_HOLY; + int STUCK_COUNT; + string WALKING_MY_OLD_POS; + int WALK_STEP; + int WEAPON_TYPE; + + DwarfZombieRandom() + { + CAN_ATTACK = 1; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_HEAR = 1; + CAN_WANDER = 1; + MAX_TYPE = 4; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 80; + CAN_FLINCH = 0; + CAN_FLEE = 1; + FLEE_HEALTH = 25; + FLEE_CHANCE = 25; + FLEE_DISTANCE = 2048; + ATTACK_RANGE = 125; + ATTACK_HITRANGE = 200; + MOVE_RAGE = 65; + ATTACK_ACCURACY = 0.8; + ATTACK2_ACCURACY = 0.75; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "attack"; + ANIM_LEAP = "attack2"; + ANIM_SLASH = "attack"; + ANIM_NOD = "nod"; + SOUND_IDLE1 = "agrunt/ag_idle2.wav"; + SOUND_IDLE2 = "agrunt/ag_alert3.wav"; + SOUND_IDLE3 = "agrunt/ag_idle5.wav"; + SOUND_ALERT = "agrunt/ag_alert2.wav"; + SOUND_LEAP = "agrunt/ag_attack2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACKHIT1 = "zombie/claw_strike1.wav"; + SOUND_ATTACKHIT2 = "zombie/claw_strike2.wav"; + SOUND_ATTACKHIT3 = "zombie/claw_strike3.wav"; + SOUND_DEATH = "agrunt/ag_die5.wav"; + SOUND_STRUCK = "debris/flesh2.wav"; + SOUND_PAIN1 = "agrunt/ag_pain3.wav"; + SOUND_PAIN2 = "agrunt/ag_pain5.wav"; + HURT_POINT = 0.5; + SOUND_TURNED1 = "ambience/the_horror1.wav"; + SOUND_TURNED2 = "ambience/the_horror2.wav"; + SOUND_TURNED3 = "ambience/the_horror3.wav"; + SOUND_TURNED4 = "ambience/the_horror4.wav"; + SOUND_HOLYPAIN1 = "agrunt/ag_pain4.wav"; + SOUND_HOLYPAIN2 = "agrunt/ag_die3.wav"; + SOUND_STEP1 = "player/pl_grate1.wav"; + SOUND_STEP2 = "player/pl_grate2.wav"; + SOUND_STEP3 = "player/pl_grate3.wav"; + SOUND_STEP4 = "player/pl_grate4.wav"; + SOUND_NOD = "x/x_laugh1.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 5; + DROP_GOLD_MAX = 30; + I_AM_TURNABLE = 1; + MONSTER_WIDTH = 32; + Precache(SOUND_DEATH); + LANTERN_COLOR = Vector3(LNT_R, LNT_G, LNT_B); + int L_RND = RandomInt(1, 5); + if (L_RND == 1) + { + LNT_R = Random(16, 64); + LNT_B = 0; + LNT_G = 0; + } + else + { + if (L_RND == 2) + { + LNT_R = 0; + LNT_G = Random(16, 64); + LNT_B = 0; + } + else + { + if (L_RND == 3) + { + LNT_R = 0; + LNT_G = 0; + LNT_B = Random(16, 64); + } + else + { + if (L_RND == 4) + { + LNT_R = 0; + LNT_G = Random(16, 64); + LNT_B = Random(16, 64); + } + else + { + if (L_RND == 5) + { + LNT_R = Random(16, 64); + LNT_G = 0; + LNT_B = Random(16, 64); + } + } + } + } + } + } + + void OnSpawn() override + { + if ((ZOMBIE_QUEST_COMPLETE)) + { + DeleteEntity(GetOwner()); + } + JUST_SPAWNED = 1; + SetName("Dwarven Zombie"); + SetWidth(32); + SetHeight(48); + SetRoam(true); + SetRace("undead"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("holy", 2.5); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("cold", 0.25); + SetDamageResistance("lightning", 0.5); + SetHearingSensitivity(10); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 2); + SetModelBody(2, 0); + pick_weapon_type(); + if (GetMapName() == "gatecity") + { + SetMonsterClip(0); + } + if (WEAPON_TYPE == 0) + { + NPC_GIVE_EXP = 40; + SetHealth(150); + SetModelBody(1, 0); + ATTACK_DAMAGE = 20; + ATTACK2_DAMAGE = 80; + ATTACK_RANGE = 50; + ATTACK_HITRANGE = 100; + MOVE_RAGE = 48; + ATTACK2_CHANCE = 0; + DROP_GOLD_MIN = 5; + DROP_GOLD_MAX = 15; + if (RandomInt(1, 100) < 25) + { + if (!(LANTERN_SET)) + { + } + set_lantern(); + } + } + if (WEAPON_TYPE == 1) + { + NPC_GIVE_EXP = 50; + SetHealth(200); + SetModelBody(1, 1); + ATTACK_DAMAGE = 30; + ATTACK2_DAMAGE = 90; + ATTACK_RANGE = 125; + ATTACK_HITRANGE = 175; + MOVE_RAGE = 48; + ATTACK2_CHANCE = 0; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 20; + DROP_ITEM1 = "axes_smallaxe"; + DROP_ITEM1_CHANCE = 0.1; + if (RandomInt(1, 100) < 25) + { + if (!(LANTERN_SET)) + { + } + set_lantern(); + } + } + if (WEAPON_TYPE == 2) + { + NPC_GIVE_EXP = 100; + SetHealth(300); + SetModelBody(1, 2); + ATTACK_DAMAGE = 40; + ATTACK2_DAMAGE = 100; + ATTACK_RANGE = 125; + ATTACK_HITRANGE = 200; + MOVE_RAGE = 65; + ATTACK2_CHANCE = 25; + DROP_GOLD_MIN = 15; + DROP_GOLD_MAX = 30; + DROP_ITEM1 = "axes_doubleaxe"; + DROP_ITEM1_CHANCE = 0.1; + } + if (WEAPON_TYPE == 3) + { + NPC_GIVE_EXP = 200; + SetHealth(400); + SetModelBody(1, 3); + ATTACK_DAMAGE = 55; + ATTACK2_DAMAGE = 150; + ATTACK_RANGE = 125; + ATTACK_HITRANGE = 200; + MOVE_RAGE = 65; + ATTACK2_CHANCE = 15; + DROP_GOLD_MIN = 15; + DROP_GOLD_MAX = 40; + DROP_ITEM1 = "swords_bastardsword"; + DROP_ITEM1_CHANCE = 0.05; + } + if (WEAPON_TYPE == 4) + { + NPC_GIVE_EXP = 175; + SetHealth(300); + SetModelBody(1, 8); + ATTACK_DAMAGE = 50; + ATTACK2_DAMAGE = 150; + ATTACK_RANGE = 125; + ATTACK_HITRANGE = 200; + MOVE_RAGE = 65; + ATTACK2_CHANCE = 30; + DROP_GOLD_MIN = 50; + DROP_GOLD_MAX = 100; + if (RandomInt(1, 100) < 25) + { + if (!(LANTERN_SET)) + { + } + set_lantern(); + } + } + WALKING_MY_OLD_POS = GetEntityOrigin(GetOwner()); + WALK_STEP = 1; + ScheduleDelayedEvent(1.0, "walking"); + } + + void npcatk_get_postspawn_properties() + { + if (StringToLower(GetMapName()) == "gatecity") + { + string MY_POS = GetEntityOrigin(GetOwner()); + string MY_X = (MY_POS).x; + string MY_Y = (MY_POS).y; + string MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(MY_POS); + LogDebug("npcatk_get_postspawn_properties MY_X MY_Y MY_GROUND"); + SetEntityOrigin(GetOwner(), Vector3(MY_X, MY_Y, MY_GROUND)); + } + ATTACK_RANGE *= 0.5; + ATTACK_HITRANGE *= 0.5; + } + + void attack_1() + { + STUCK_COUNT = 0; + ATTACK_VOLUME = 5; + npcatk_dodamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY); + if (RandomInt(1, 100) < ATTACK2_CHANCE) + { + ANIM_ATTACK = ANIM_LEAP; + } + } + + void attack_2() + { + STUCK_COUNT = 0; + ATTACK_VOLUME = 10; + npcatk_dodamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK2_DAMAGE, ATTACK2_ACCURACY); + ANIM_ATTACK = ANIM_SLASH; + EmitSound(GetOwner(), CHAN_ITEM, SOUND_LEAP, 10); + if (!(GetEntityRange(m_hLastStruckByMe) <= ATTACK_HITRANGE)) return; + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/debuff_stun", RandomInt(2, 8), GetEntityIndex(GetOwner())); + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/effect_push", 2, /* TODO: $relvel */ $relvel(10, -200, 10), 0); + } + + void game_dodamage() + { + if (!(param1)) + { + // PlayRandomSound from: ATTACK_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {ATTACK_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((param1)) + { + // PlayRandomSound from: ATTACK_VOLUME, SOUND_ATTACKHIT1, SOUND_ATTACKHIT2, SOUND_ATTACKHIT3 + array sounds = {ATTACK_VOLUME, SOUND_ATTACKHIT1, SOUND_ATTACKHIT2, SOUND_ATTACKHIT3}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + string HURT_THRESHOLD = GetEntityMaxHealth(GetOwner()); + HURT_THRESHOLD *= HURT_POINT; + if ((STRUCK_BY_HOLY)) + { + // PlayRandomSound from: SOUND_HOLYPAIN1, SOUND_HOLYPAIN2 + array sounds = {SOUND_HOLYPAIN1, SOUND_HOLYPAIN2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + STRUCK_BY_HOLY = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (MY_HEALTH > HURT_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN1 + array sounds = {SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN1}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + if (MY_HEALTH <= HURT_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN2 + array sounds = {SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + } + + void walking() + { + string MY_POS = GetEntityOrigin(GetOwner()); + float TRAVEL_DIST = Distance(MY_POS, WALKING_MY_OLD_POS); + if (TRAVEL_DIST > 32) + { + if (WALK_STEP == 1) + { + EmitSound(GetOwner(), CHAN_ITEM, SOUND_STEP1, 2); + } + if (WALK_STEP == 2) + { + EmitSound(GetOwner(), CHAN_ITEM, SOUND_STEP2, 2); + } + if (WALK_STEP == 3) + { + EmitSound(GetOwner(), CHAN_ITEM, SOUND_STEP3, 2); + } + if (WALK_STEP == 4) + { + EmitSound(GetOwner(), CHAN_ITEM, SOUND_STEP4, 2); + } + WALK_STEP += 1; + if (WALK_STEP > 4) + { + WALK_STEP = 1; + } + } + WALKING_MY_OLD_POS = MY_POS; + ScheduleDelayedEvent(1.0, "walking"); + } + + void OnTargetValidate(CBaseEntity@ target) + { + alert_dwarf_zombie(); + } + + void alert_dwarf_zombie() + { + if ((DID_ALERT)) return; + if (!(false)) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_ALERT, 10); + PlayAnim("critical", ANIM_NOD); + DID_ALERT = 1; + } + + void pick_weapon_type() + { + int MIN_TYPE = 0; + string MAYOR_ENT = FindEntityByName("dwarf_mayor"); + string MAYOR_ID = GetEntityIndex(MAYOR_ENT); + if (GetEntityProperty(MAYOR_ID, "scriptvar") == 1) + { + string C_ZOMBIE_COUNT = GetEntityProperty(MAYOR_ID, "scriptvar"); + string C_ZOMBIE_REQ = GetEntityProperty(MAYOR_ID, "scriptvar"); + string QUART_WAY = C_ZOMBIE_REQ; + QUART_WAY *= 0.2; + string HALF_WAY = C_ZOMBIE_REQ; + HALF_WAY *= 0.4; + string ALMOST_THERE = C_ZOMBIE_REQ; + ALMOST_THERE *= 0.6; + if (C_ZOMBIE_COUNT > QUART_WAY) + { + int MIN_TYPE = 1; + } + if (C_ZOMBIE_COUNT > HALF_WAY) + { + int MIN_TYPE = 2; + } + if (C_ZOMBIE_COUNT > ALMOST_THERE) + { + int MIN_TYPE = 3; + } + } + WEAPON_TYPE = RandomInt(MIN_TYPE, MAX_TYPE); + } + + void my_target_died() + { + if ((JUST_SPAWNED)) + { + JUST_SPAWNED = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PlayAnim("critical", ANIM_NOD); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_NOD, 10); + } + + void OnFlee() + { + ANIM_RUN = "run"; + if ((IS_FLEEING)) return; + PlayAnim("once", "break"); + SetMoveDest(param1); + SetMoveAnim(ANIM_RUN); + IS_FLEEING = 1; + NPCATK_FLEE_RESTORETARGET = IS_HUNTING; + if (param3 != "PARAM3") + { + PARAM3("npcatk_stopflee"); + } + } + + void npcatk_stopflee() + { + ANIM_RUN = "walk"; + } + + void OnDeath(CBaseEntity@ attacker) override + { + string MAYOR_ENT = FindEntityByName("dwarf_mayor"); + string MAYOR_ID = GetEntityIndex(MAYOR_ENT); + if (!(GetEntityProperty(MAYOR_ID, "scriptvar") == 1)) return; + CallExternal(MAYOR_ID, "zombie_died"); + string C_ZOMBIE_COUNT = GetEntityProperty(MAYOR_ID, "scriptvar"); + string C_ZOMBIE_REQ = GetEntityProperty(MAYOR_ID, "scriptvar"); + int C_ZOMBIE_REQ = int(C_ZOMBIE_REQ); + if (C_ZOMBIE_COUNT < C_ZOMBIE_REQ) + { + int Z_COUNT = int(C_ZOMBIE_COUNT); + SendPlayerMessage(m_hLastStruck, "You have slain " + Z_COUNT + "/ " + C_ZOMBIE_REQ + " dwarven zombies."); + } + if (!(C_ZOMBIE_COUNT == C_ZOMBIE_REQ)) return; + UseTrigger("zombie_remove"); + SendColoredMessage(m_hLastStruck, "You have completed the dwarven zombie quest. Return to the mayor for your reward."); + SetGlobalVar("ZOMBIE_QUEST_COMPLETE", 1); + CallExternal("all", "zombie_remove"); + } + + void zombie_remove() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_sbow.as b/scripts/angelscript/monsters/dwarf_zombie_sbow.as new file mode 100644 index 00000000..2e753a95 --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_sbow.as @@ -0,0 +1,553 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_struck.as" +#include "NPCs/dwarf_lantern_base.as" + +namespace MS +{ + +class DwarfZombieSbow : CGameScript +{ + string ACT_ANIM_RUN; + int ADJUSTED_XP; + int AMMO_COUNT; + int AMMO_MAX; + string AMMO_TYPE; + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_DODGE; + string ANIM_FLINCH; + string ANIM_HXBOW_ATTACK; + string ANIM_IDLE; + string ANIM_RELOAD; + string ANIM_RELOAD_DONE; + string ANIM_RUN; + string ANIM_SXBOW_ATTACK; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string CUR_PBOLT_ORG; + int DID_ALERT; + int DMG_XBOW; + int DOT_POISON; + string DROP_GOLD; + string DROP_GOLD_AMT; + string EXPLOSIVE_BOLTS; + float FREQ_CLIENT_REFRESH; + int IMMUNE_VAMPIRE; + int IN_RELOAD; + int IS_BLOODLESS; + int IS_UNHOLY; + int I_AM_TURNABLE; + string LANTERN_COLOR; + int LANTERN_HAND_INDEX; + int LANTERN_HAND_SUBMODEL; + int MISS_COUNT; + string NEXT_ALERT; + string NEXT_DZOMB_FLEE; + string NEXT_SCRIPT_UPDATE; + string NPC_GIVE_EXP; + string NPC_MATERIAL_TYPE; + int NPC_RANGED; + int NPC_USE_FLINCH; + int NPC_USE_IDLE; + int NPC_USE_PAIN; + int PBOLT_ACTIVE; + int PBOLT_AOE; + string PBOLT_ARRAY_NAME; + int PBOLT_COUNTER; + float PBOLT_DURATION; + string SOUND_ALERT; + string SOUND_BOLT_HIT; + string SOUND_DEATH; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_FLINCH3; + string SOUND_HOLYPAIN1; + string SOUND_HOLYPAIN2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_RELOAD; + string SOUND_TURNED1; + string SOUND_TURNED2; + string SOUND_TURNED3; + string SOUND_TURNED4; + string SOUND_XBOW_SHOOT; + string SOUND_XBOW_STRETCH; + int XBOW_ACCURACY; + string XBOW_AIM_ANGLES; + string XBOW_BOLT_LAND; + string XBOW_BOLT_START; + int XBOW_BONE; + string XBOW_CL_SCRIPT; + string XBOW_CL_SCRIPT_ID; + string XBOW_REPELL_POINT; + int XBOW_TYPE; + + DwarfZombieSbow() + { + XBOW_TYPE = 1; + ANIM_SXBOW_ATTACK = "anim_sxbow_shoot"; + ANIM_HXBOW_ATTACK = "anim_hxbow_shoot_reload"; + SOUND_DEATH = "agrunt/ag_die5.wav"; + ANIM_WALK = "walk"; + ACT_ANIM_RUN = "walk"; + ANIM_RUN = ACT_ANIM_RUN; + ANIM_IDLE = "idle"; + if (XBOW_TYPE == 1) + { + NPC_GIVE_EXP = 200; + DROP_GOLD = 1; + DROP_GOLD_AMT = 100; + ANIM_ATTACK = ANIM_SXBOW_ATTACK; + } + else + { + NPC_GIVE_EXP = 150; + DROP_GOLD = 1; + DROP_GOLD_AMT = 75; + ANIM_ATTACK = ANIM_HXBOW_ATTACK; + } + ANIM_RELOAD = "anim_sxbow_reload"; + ANIM_RELOAD_DONE = "anim_sxbow_reload_done"; + ANIM_DODGE = "anim_roll_back"; + ANIM_ALERT = "nod"; + AMMO_TYPE = "unset"; + NPC_RANGED = 1; + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + ATTACK_MOVERANGE = 768; + AMMO_MAX = 5; + AMMO_COUNT = 5; + SOUND_TURNED1 = "ambience/the_horror1.wav"; + SOUND_TURNED2 = "ambience/the_horror2.wav"; + SOUND_TURNED3 = "ambience/the_horror3.wav"; + SOUND_TURNED4 = "ambience/the_horror4.wav"; + SOUND_HOLYPAIN1 = "agrunt/ag_pain4.wav"; + SOUND_HOLYPAIN2 = "agrunt/ag_die3.wav"; + SOUND_ALERT = "agrunt/ag_alert2.wav"; + I_AM_TURNABLE = 1; + SOUND_XBOW_STRETCH = "weapons/bow/stretch.wav"; + SOUND_XBOW_SHOOT = "weapons/bow/crossbow.wav"; + SOUND_BOLT_HIT = "weapons/bow/bolthit1.wav"; + SOUND_RELOAD = "weapons/357_reload1.wav"; + XBOW_ACCURACY = 80; + XBOW_CL_SCRIPT = "monsters/elf_xbow_cl"; + XBOW_BONE = 35; + DMG_XBOW = 30; + DOT_POISON = 5; + PBOLT_DURATION = 8.0; + PBOLT_AOE = 64; + FREQ_CLIENT_REFRESH = 40.0; + SOUND_IDLE1 = "agrunt/ag_idle2.wav"; + SOUND_IDLE2 = "agrunt/ag_alert3.wav"; + SOUND_IDLE3 = "agrunt/ag_idle5.wav"; + SOUND_PAIN1 = "agrunt/ag_pain3.wav"; + SOUND_PAIN2 = "agrunt/ag_pain5.wav"; + SOUND_PAIN3 = "agrunt/ag_pain2.wav"; + SOUND_FLINCH1 = "agrunt/ag_pain3.wav"; + SOUND_FLINCH2 = "agrunt/ag_pain5.wav"; + SOUND_FLINCH3 = "agrunt/ag_pain2.wav"; + ANIM_FLINCH = "anim_xbow_flinch"; + NPC_MATERIAL_TYPE = "flesh"; + NPC_USE_PAIN = 1; + NPC_USE_IDLE = 1; + NPC_USE_FLINCH = 1; + LANTERN_HAND_SUBMODEL = 2; + LANTERN_HAND_INDEX = 0; + LANTERN_COLOR = Vector3(0, 64, 32); + } + + void game_precache() + { + Precache(XBOW_CL_SCRIPT); + Precache("weapons/bows/boltexplosive.mdl"); + Precache("explode1.spr"); + // svplaysound: svplaysound 0 0 agrunt/ag_pain3.wav + EmitSound(0, 0, "agrunt/ag_pain3.wav"); + } + + void OnSpawn() override + { + darcher_spawn(); + select_ammo(); + } + + void darcher_spawn() + { + SetName("Dwarven Zombie Bowman"); + SetModel("dwarf/male1.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 6); + SetWidth(32); + SetHeight(48); + SetRoam(true); + SetHealth(300); + SetRace("undead"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 2.0); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("cold", 0.5); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("fire", 1.25); + SetDamageResistance("slash", 1.25); + SetHearingSensitivity(8); + IS_BLOODLESS = 1; + IMMUNE_VAMPIRE = 1; + IS_UNHOLY = 1; + } + + void npc_targetsighted() + { + if (XBOW_CL_SCRIPT_ID == "XBOW_CL_SCRIPT_ID") + { + ClientEvent("new", "all", XBOW_CL_SCRIPT, FREQ_CLIENT_REFRESH); + NEXT_SCRIPT_UPDATE = GetGameTime(); + NEXT_SCRIPT_UPDATE += FREQ_CLIENT_REFRESH; + XBOW_CL_SCRIPT_ID = "game.script.last_sent_id"; + } + else + { + if (GetGameTime() > NEXT_SCRIPT_UPDATE) + { + } + XBOW_CL_SCRIPT_ID = "XBOW_CL_SCRIPT_ID"; + } + if (GetEntityRange(m_hAttackTarget) < 64) + { + if (!(NPC_IS_TURRET)) + { + } + if (GetGameTime() > NEXT_DZOMB_FLEE) + { + } + NEXT_DZOMB_FLEE = GetGameTime(); + NEXT_DZOMB_FLEE += Random(8, 12); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + // svplaysound: svplaysound 2 10 SOUND_PAIN1 + EmitSound(2, 10, SOUND_PAIN1); + PlayAnim("critical", ANIM_DODGE); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 100)); + } + if ((DID_ALERT)) return; + DID_ALERT = 1; + NEXT_DZOMB_FLEE = GetGameTime(); + NEXT_DZOMB_FLEE += Random(8, 12); + if (!(GetGameTime() > NEXT_ALERT)) return; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("critical", ANIM_ALERT); + if (!(NPC_NO_PLAYER_DMG)) + { + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + } + else + { + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + NEXT_ALERT = GetGameTime(); + NEXT_ALERT += 20.0; + } + + void frame_roll_back_push() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -100, 100)); + } + + void npcatk_clear_targets() + { + DID_ALERT = 0; + } + + void select_ammo() + { + if (!(AMMO_TYPE == "unset")) return; + AMMO_TYPE = "pierce"; + } + + void set_ammo() + { + AMMO_TYPE = param1; + if ((param1).findFirst("poison") == 0) + { + AMMO_TYPE = "poison"; + } + else + { + if ((param1).findFirst("fire") == 0) + { + AMMO_TYPE = "explode"; + } + else + { + if ((param1).findFirst("pierce") == 0) + { + AMMO_TYPE = "pierce"; + } + else + { + AMMO_TYPE = "unset"; + } + } + } + adjust_xp(); + if (AMMO_TYPE == "unset") + { + string L_TITLE = "MAP ERROR - "; + L_TITLE += GetScriptName(GetOwner()); + SendInfoMsg("all", L_TITLE + " Ammo type incorrectly set, options are: set_ammo;poison | fire | pierce"); + } + } + + void adjust_xp() + { + if ((ADJUSTED_XP)) return; + if (AMMO_TYPE == "explode") + { + EXPLOSIVE_BOLTS = 1; + NPC_GIVE_EXP += 100; + } + if (AMMO_TYPE == "poison") + { + NPC_GIVE_EXP += 100; + } + ADJUSTED_XP = 1; + } + + void frame_attack_sxbow() + { + if (AMMO_COUNT >= 1) + { + AMMO_COUNT -= 1; + bow_fire(); + } + else + { + if (!(NPC_NO_ATTACK)) + { + npcatk_suspend_attack(1.0); + } + bow_reload(); + } + } + + void bow_fire() + { + if (AMMO_TYPE == "unset") + { + select_ammo(); + } + EmitSound(GetOwner(), 1, SOUND_XBOW_SHOOT, 10); + MISS_COUNT += 1; + string L_START_LINE = GetEntityProperty(GetOwner(), "svbonepos"); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (RandomInt(1, 100) > XBOW_ACCURACY) + { + float RND_X = Random(-64.0, 64.0); + float RND_Y = Random(-64.0, 64.0); + TARG_ORG += "x"; + TARG_ORG += "y"; + } + if (AMMO_TYPE != "pierce") + { + if (AMMO_TYPE == "poison") + { + int L_NBOLTS = int(PBOLT_ARRAY_NAME.length()); + if (L_NBOLTS >= 5) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB + 1)) + { + } + string L_MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + TARG_ORG += /* TODO: $relpos */ $relpos(Vector3(0, L_MY_YAW, 0), Vector3(0, -32, 0)); + TARG_ORG = "z"; + XBOW_REPELL_POINT = TARG_ORG; + } + else + { + if (!(IsValidPlayer(m_hAttackTarget))) + { + } + string L_THHEIGHT = GetEntityHeight(m_hAttackTarget); + L_THHEIGHT *= 0.5; + TARG_ORG += "z"; + } + XBOW_AIM_ANGLES = /* TODO: $angles3d */ $angles3d(L_START_LINE, TARG_ORG); + string L_ANG_PITCH = (XBOW_AIM_ANGLES).x; + string L_ANG_PITCH = /* TODO: $neg */ $neg(L_ANG_PITCH); + XBOW_AIM_ANGLES = "x"; + string L_END_LINE = L_START_LINE; + L_END_LINE += /* TODO: $relpos */ $relpos(XBOW_AIM_ANGLES, Vector3(0, 2048, 0)); + string L_END_LINE = TraceLine(L_START_LINE, L_END_LINE); + XBOW_BOLT_START = L_START_LINE; + XBOW_BOLT_LAND = L_END_LINE; + XDoDamage(XBOW_BOLT_START, XBOW_BOLT_LAND, DMG_XBOW, 1.0, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bolt"); + if ((EXPLOSIVE_BOLTS)) + { + ScheduleDelayedEvent(0.1, "bolt_explode"); + } + if (AMMO_TYPE == "poison") + { + if (L_NBOLTS < 5) + { + } + ScheduleDelayedEvent(0.1, "pbolt_explode"); + } + if (XBOW_CL_SCRIPT_ID != "XBOW_CL_SCRIPT_ID") + { + string L_LAND_POINT = XBOW_BOLT_LAND; + if (AMMO_TYPE != "pierce") + { + string L_LAND_POINT = XBOW_REPELL_POINT; + } + ClientEvent("update", "all", XBOW_CL_SCRIPT_ID, "fire_bolt", XBOW_BOLT_START, L_LAND_POINT, XBOW_AIM_ANGLES, EXPLOSIVE_BOLTS); + } + if (!(MISS_COUNT > 4)) return; + MISS_COUNT = 0; + chicken_run(3.0); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + MISS_COUNT = 0; + } + + void bolt_dodamage() + { + if (!(param1)) return; + MISS_COUNT = 0; + if (AMMO_TYPE == "poison") + { + if (GetRelationship(param2) == "enemy") + { + } + ApplyEffect(param2, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + } + + void bolt_explode() + { + XDoDamage(XBOW_REPELL_POINT, 128, DMG_XBOW, 0, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:explode"); + } + + void explode_dodamage() + { + string CUR_TARG = param2; + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(XBOW_REPELL_POINT, TARG_ORG); + float TARG_DIST = Distance(TARG_ORG, XBOW_REPELL_POINT); + TARG_DIST /= 128; + string PUSH_STR = /* TODO: $ratio */ $ratio(TARG_DIST, 500, 100); + string HALF_PUSH_STR = PUSH_STR; + HALF_PUSH_STR /= 2; + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, PUSH_STR, HALF_PUSH_STR))); + } + + void bow_reload() + { + IN_RELOAD = 1; + PlayAnim("critical", ANIM_RELOAD); + } + + void frame_reload_sxbow() + { + EmitSound(GetOwner(), 2, SOUND_RELOAD, 10); + AMMO_COUNT += 1; + if (AMMO_COUNT >= AMMO_MAX) + { + PlayAnim("critical", ANIM_RELOAD_DONE); + } + } + + void frame_reload_sxbow_done() + { + IN_RELOAD = 0; + } + + void pbolt_explode() + { + add_poison_bolt(XBOW_REPELL_POINT); + } + + void add_poison_bolt() + { + string L_PBOLT_LOC = param1; + SetScriptFlags(GetOwner(), "add", "stack_pbolt", "pbolt", L_PBOLT_LOC, PBOLT_DURATION); + ClientEvent("new", "all", "effects/sfx_poison_cloud", L_PBOLT_LOC, PBOLT_AOE, PBOLT_DURATION); + if ((PBOLT_ACTIVE)) return; + PBOLT_ACTIVE = 1; + PBOLT_COUNTER = 0; + ext_poison_bolt_loop(); + } + + void ext_poison_bolt_loop() + { + if (!(PBOLT_ACTIVE)) return; + PBOLT_ARRAY_NAME = /* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "pbolt", "type_array"); + if (PBOLT_ARRAY_NAME != "none") + { + int L_NBOLTS = int(PBOLT_ARRAY_NAME.length()); + L_NBOLTS -= 1; + if (PBOLT_COUNTER > L_NBOLTS) + { + PBOLT_COUNTER = 0; + } + CUR_PBOLT_ORG = PBOLT_ARRAY_NAME[int(PBOLT_COUNTER)]; + ext_poison_bolt_dmg(); + float L_BOLT_SCAN_SPEED = 1.0; + if (L_NBOLTS > 0) + { + L_BOLT_SCAN_SPEED /= L_NBOLTS; + } + if (L_BOLT_SCAN_SPEED < 0.1) + { + float L_BOLT_SCAN_SPEED = 0.2; + } + PBOLT_COUNTER += 1; + L_BOLT_SCAN_SPEED("ext_poison_bolt_loop"); + } + else + { + PBOLT_ACTIVE = 0; + } + } + + void ext_poison_bolt_dmg() + { + string L_SCAN_POINT = CUR_PBOLT_ORG; + L_SCAN_POINT += "z"; + XDoDamage(L_SCAN_POINT, PBOLT_AOE, DMG_XBOW, 0.1, GetOwner(), GetOwner(), "none", "poison_effect", "dmgevent:pbolt_cloud"); + } + + void pbolt_cloud_dodamage() + { + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((NPC_NO_DROP)) return; + string L_CHANCE = "game.playersnb"; + L_CHANCE *= 2; + if (!(RandomInt(1, 100) < L_CHANCE)) return; + SpawnNPC("chests/base_quiver_of", "proj_bolt_poison", ScriptMode::Legacy); // params: 25 + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_smallaxe.as b/scripts/angelscript/monsters/dwarf_zombie_smallaxe.as new file mode 100644 index 00000000..9c5c6577 --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_smallaxe.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/dwarf_zombie_random.as" + +namespace MS +{ + +class DwarfZombieSmallaxe : CGameScript +{ + int WEAPON_TYPE; + + void pick_weapon_type() + { + WEAPON_TYPE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_sword.as b/scripts/angelscript/monsters/dwarf_zombie_sword.as new file mode 100644 index 00000000..cb6f624f --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_sword.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/dwarf_zombie_random.as" + +namespace MS +{ + +class DwarfZombieSword : CGameScript +{ + int WEAPON_TYPE; + + void pick_weapon_type() + { + WEAPON_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/dwarf_zombie_unarmed.as b/scripts/angelscript/monsters/dwarf_zombie_unarmed.as new file mode 100644 index 00000000..549d310d --- /dev/null +++ b/scripts/angelscript/monsters/dwarf_zombie_unarmed.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/dwarf_zombie_random.as" + +namespace MS +{ + +class DwarfZombieUnarmed : CGameScript +{ + int WEAPON_TYPE; + + void pick_weapon_type() + { + WEAPON_TYPE = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/eagle.as b/scripts/angelscript/monsters/eagle.as new file mode 100644 index 00000000..380d18ff --- /dev/null +++ b/scripts/angelscript/monsters/eagle.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/eagle_base.as" + +namespace MS +{ + +class Eagle : CGameScript +{ + int NO_DIVE; + int NPC_GIVE_EXP; + + Eagle() + { + NO_DIVE = 1; + NPC_GIVE_EXP = 100; + } + +} + +} diff --git a/scripts/angelscript/monsters/eagle_base.as b/scripts/angelscript/monsters/eagle_base.as new file mode 100644 index 00000000..c8503d9d --- /dev/null +++ b/scripts/angelscript/monsters/eagle_base.as @@ -0,0 +1,395 @@ +#pragma context server + +#include "monsters/base_flyer.as" +#include "monsters/base_propelled.as" +#include "monsters/base_monster.as" + +namespace MS +{ + +class EagleBase : CGameScript +{ + int AM_PERCHED; + int AM_SUMMONED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DIVE; + string ANIM_FIGIT; + string ANIM_IDLE; + string ANIM_IDLE_FLIGHT; + string ANIM_PERCH1; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_RANGE_STANDARD; + int COUNT_ATK; + string DIVE_POS; + string DIVE_START; + float DMG_ATTACK; + int DMG_DIVE; + int FLEE_COUNT; + string FLIGHT_STUCK; + int FREQ_DIVE; + int IN_DIVE; + string LAST_POS; + float LAST_PROG; + int MELEE_ATTACK; + int MOVE_RANGE; + int NPC_HACKED_MOVE_SPEED; + int NPC_NO_END_FLY; + int NPC_PROXACT_CONE; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_FOV; + string NPC_PROXACT_PLAYERID; + int NPC_PROXACT_RANGE; + string NPC_PROXACT_TRIPPED; + int NPC_PROX_ACTIVATE; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_FLAP; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_STRUCK; + string SOUND_VICTORY; + string SOUND_WARCRY; + int SPEED_DIVE; + int SPEED_STANDARD; + + EagleBase() + { + ANIM_IDLE = "flapping"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "fall"; + ANIM_WALK = "flapping"; + ANIM_RUN = "flapping"; + MOVE_RANGE = 20; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 72; + NPC_HACKED_MOVE_SPEED = 200; + ANIM_PERCH1 = "idle"; + ANIM_FIGIT = "idle2"; + ANIM_IDLE_FLIGHT = "flapping"; + ANIM_DIVE = "dive"; + NPC_NO_END_FLY = 1; + DMG_ATTACK = Random(5, 20); + DMG_DIVE = RandomInt(30, 100); + FREQ_DIVE = RandomInt(20, 30); + SPEED_STANDARD = 200; + SPEED_DIVE = 400; + FLEE_COUNT = 10; + ATTACK_RANGE_STANDARD = 64; + SOUND_FLAP = "monsters/birds/hawkidle.wav"; + SOUND_WARCRY = "monsters/birds/bird.wav"; + SOUND_DEATH = "monsters/birds/hawk.wav"; + SOUND_ATTACK = "monsters/birds/flutter.wav"; + SOUND_STRUCK = "debris/flesh2.wav"; + SOUND_PAIN = "monsters/birds/vulture.wav"; + SOUND_PAIN2 = "monsters/birds/cry.wav"; + SOUND_VICTORY = "monsters/birds/hawkcaw.wav"; + Precache(SOUND_DEATH); + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.5); + if (!(I_R_FROZEN)) + { + } + if ((AM_PERCHED)) + { + if (RandomInt(1, 50) == 1) + { + PlayAnim("once", ANIM_FIGIT); + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (!(SUSPEND_AI)) + { + } + string MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + string MY_ALTI = GetMonsterProperty("origin.z"); + MY_ALTI -= MY_GROUND; + if (MY_ALTI < 32) + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 300)); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if ((IS_HUNTING)) + { + } + if (!(SUSPEND_AI)) + { + } + npcatk_faceattacker(); + if (GetEntityRange(HUNT_LASTTARGET) > MOVE_RANGE) + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 200, 0)); + } + if (GetEntityRange(HUNT_LASTTARGET) <= MOVE_RANGE) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if (FLIGHT_STUCK > 2) + { + PlayAnim("once", ANIM_DIVE); + do_rand_tweedee(); + npcatk_suspend_ai(Random(0.3, 0.9)); + SetMoveDest(NEW_DEST); + ScheduleDelayedEvent(0.1, "horror_boost"); + FLIGHT_STUCK = 0; + } + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + if (!(SUSPEND_AI)) + { + SetAngles("face_origin"); + } + if (!(IS_FLEEING)) + { + } + if (!(SPITTING)) + { + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + } + float CUR_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + if (LAST_PROG >= CUR_PROG) + { + FLIGHT_STUCK += 1; + } + LAST_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + LAST_POS = GetMonsterProperty("origin"); + } + + void OnSpawn() override + { + SetName("Eagle"); + SetRace("wildanimal"); + SetHealth(300); + SetWidth(32); + SetHeight(32); + SetModel("monsters/eagle.mdl"); + SetIdleAnim("flapping"); + SetMoveAnim("flapping"); + SetHearingSensitivity(11); + SetRoam(true); + SetFly(true); + SetDamageResistance("poison", 2.0); + if (!(true)) return; + if (StringToLower(GetMapName()) == "thanatos") + { + int KEEP_CLIP = 1; + } + if (StringToLower(GetMapName()) == "the_wall") + { + int KEEP_CLIP = 1; + } + if (!(KEEP_CLIP)) + { + SetMonsterClip(0); + } + COUNT_ATK = 0; + } + + void npc_targetsighted() + { + if (!(IsValidPlayer(HUNT_LASTTARGET))) + { + ATTACK_RANGE = GetEntityHeight(HUNT_LASTTARGET); + if (!(CYCLED_UP)) + { + cycle_up(); + } + } + else + { + ATTACK_RANGE = ATTACK_RANGE_STANDARD; + } + } + + void start_perched() + { + SetIdleAnim("idle"); + SetMoveAnim("idle"); + SetRoam(false); + AM_PERCHED = 1; + SetHearingSensitivity(0); + npcatk_suspend_ai(); + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 384; + NPC_PROXACT_EVENT = "un_perch"; + NPC_PROXACT_FOV = 1; + NPC_PROXACT_CONE = 90; + ScheduleDelayedEvent(0.1, "npcatk_proxact_scan"); + } + + void un_perch() + { + SetHearingSensitivity(8); + AM_PERCHED = 0; + SetIdleAnim(ANIM_WALK); + SetMoveAnim(ANIM_WALK); + npcatk_suspend_ai(); + NPC_HACKED_MOVE_SPEED = SPEED_STANDARD; + PlayAnim("critical", "divestart"); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 100)); + SetMoveDest(DIVE_START); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + ScheduleDelayedEvent(1.1, "target_invader"); + } + + void target_invader() + { + npcatk_target(NPC_PROXACT_PLAYERID); + } + + void cycle_up() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + ScheduleDelayedEvent(1.0, "dive_check"); + } + + void dive_check() + { + if ((NO_DIVE)) return; + FREQ_DIVE("dive_check"); + if (!(IsEntityAlive(HUNT_LASTTARGET))) return; + if (!(false)) return; + DIVE_POS = GetEntityOrigin(HUNT_LASTTARGET); + DIVE_START = GetMonsterProperty("origin"); + IN_DIVE = 1; + NPC_HACKED_MOVE_SPEED = SPEED_DIVE; + npcatk_suspend_ai(); + PlayAnim("critical", "divestart"); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, -200)); + ScheduleDelayedEvent(1.0, "dive_go"); + } + + void dive_go() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + SetMoveAnim("dive"); + SetIdleAnim("dive"); + SetMoveDest(DIVE_POS); + dive_dmg_loop(); + } + + void dive_dmg_loop() + { + if (!(IN_DIVE)) return; + ScheduleDelayedEvent(0.1, "dive_dmg_loop"); + SetMoveDest(DIVE_POS); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 64, DMG_DIVE, 1.0, 0); + string MY_ORG = GetEntityOrigin(GetOwner()); + string GRND_LEVEL = /* TODO: $get_ground_height */ $get_ground_height(MY_ORG); + if (GRND_LEVEL <= 32) + { + dive_end(); + } + if (!(Distance(MY_ORG, DIVE_POS) < 32)) return; + dive_end(); + } + + void dive_end() + { + IN_DIVE = 0; + SetIdleAnim(ANIM_WALK); + SetMoveAnim(ANIM_WALK); + NPC_HACKED_MOVE_SPEED = SPEED_STANDARD; + PlayAnim("critical", "divestart"); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -400, -200)); + SetMoveDest(DIVE_START); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + } + + void game_dodamage() + { + if (!(IN_DIVE)) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(Random(-20, 20), 200, 10)); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((AM_PERCHED)) + { + NPC_PROXACT_PLAYERID = GetEntityIndex(m_hLastStruck); + NPC_PROXACT_TRIPPED = 1; + un_perch(); + } + // PlayRandomSound from: SOUND_STRUCK, SOUND_STRUCK, SOUND_STRUCK, SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_STRUCK, SOUND_STRUCK, SOUND_STRUCK, SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(param1 > 30)) return; + float RND_RL = Random(-40, 40); + float RND_FB = Random(-40, 40); + float RND_UD = Random(-40, 40); + AddVelocity(GetOwner(), Vector3(RND_RL, RND_FB, RND_UD)); + } + + void attack1() + { + MELEE_ATTACK = 1; + EmitSound(GetOwner(), 0, SOUND_ATTACK, 5); + DoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, DMG_ATTACK, 0.9, "slash"); + } + + void attack2() + { + MELEE_ATTACK = 1; + EmitSound(GetOwner(), 0, SOUND_ATTACK, 5); + DoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, DMG_ATTACK, 0.9, "slash"); + COUNT_ATK += 1; + if (COUNT_ATK > FLEE_COUNT) + { + COUNT_ATK = 0; + npcatk_suspend_ai(3.0); + SetMoveDest(HUNT_LASTTARGET); + } + } + + void flap_sound() + { + EmitSound(GetOwner(), 0, SOUND_FLAP, 5); + } + + void OnDeath(CBaseEntity@ attacker) override + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, -200)); + } + + void chicken_run() + { + ScheduleDelayedEvent(0.1, "horror_boost"); + } + + void horror_boost() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 500, 0)); + } + + void my_target_died() + { + EmitSound(GetOwner(), 0, SOUND_VICTORY, 10); + } + + void summon_eagle_vanish() + { + if (!(AM_SUMMONED)) return; + npc_fade_away(); + } + + void game_dynamically_created() + { + AM_SUMMONED = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/eagle_demon.as b/scripts/angelscript/monsters/eagle_demon.as new file mode 100644 index 00000000..11c5c054 --- /dev/null +++ b/scripts/angelscript/monsters/eagle_demon.as @@ -0,0 +1,81 @@ +#pragma context server + +#include "monsters/eagle_base.as" + +namespace MS +{ + +class EagleDemon : CGameScript +{ + int AM_PHLAMES; + float DMG_ATTACK; + int DMG_DOT_BURN; + int IS_UNHOLY; + int MELEE_ATTACK; + int NO_DIVE; + int NPC_GIVE_EXP; + int NPC_SUMMON; + + EagleDemon() + { + IS_UNHOLY = 1; + NO_DIVE = 1; + DMG_DOT_BURN = RandomInt(20, 40); + DMG_ATTACK = Random(10, 40); + NPC_GIVE_EXP = 250; + } + + void OnSpawn() override + { + SetName("Fowl Demon"); + SetRace("demon"); + SetHealth(600); + SetWidth(32); + SetHeight(32); + SetModel("monsters/eagle.mdl"); + SetIdleAnim("flapping"); + SetMoveAnim("flapping"); + SetHearingSensitivity(11); + SetRoam(true); + SetFly(true); + SetDamageResistance("poison", 1.0); + SetDamageResistance("cold", 3.0); + SetDamageResistance("holy", 3.0); + SetDamageResistance("fire", 0.0); + SetProp(GetOwner(), "skin", 1); + } + + void game_dodamage() + { + LogDebug("game_dodamage"); + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (RandomInt(1, 5) == 1) + { + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_DOT_BURN); + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(20, 200, 10)); + } + MELEE_ATTACK = 0; + } + + void phlames_eagle() + { + AM_PHLAMES = 1; + G_FLAMES_EAGLES += 1; + G_NPC_SUMMON_COUNT += 1; + NPC_SUMMON = 1; + LogDebug("set_summon G_NPC_SUMMON_COUNT"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + G_FLAMES_EAGLES -= 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/eagle_giant_base.as b/scripts/angelscript/monsters/eagle_giant_base.as new file mode 100644 index 00000000..82b02690 --- /dev/null +++ b/scripts/angelscript/monsters/eagle_giant_base.as @@ -0,0 +1,239 @@ +#pragma context server + +#include "monsters/base_propelled.as" +#include "monsters/base_monster.as" + +namespace MS +{ + +class EagleGiantBase : CGameScript +{ + int AM_PERCHED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FIGIT; + string ANIM_IDLE; + string ANIM_IDLE_FLIGHT; + string ANIM_PERCH1; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_RANGE_STANDARD; + int COUNT_ATK; + float DMG_ATTACK; + int DMG_DIVE; + int FLEE_COUNT; + int FLY_VRANGE; + int FLY_VSPEED_DOWN; + int FLY_VSPEED_UP; + int FREQ_DIVE; + int MOVE_RANGE; + int NPC_HACKED_MOVE_SPEED; + int NPC_NO_END_FLY; + int NPC_PROXACT_CONE; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_FOV; + string NPC_PROXACT_PLAYERID; + int NPC_PROXACT_RANGE; + string NPC_PROXACT_TRIPPED; + int NPC_PROX_ACTIVATE; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_FLAP1; + string SOUND_FLAP2; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_STRUCK; + string SOUND_VICTORY; + string SOUND_WARCRY; + int SPEED_DIVE; + int SPEED_STANDARD; + + EagleGiantBase() + { + NPC_NO_END_FLY = 1; + ANIM_IDLE = "flapping"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "crash"; + ANIM_WALK = "flapping"; + ANIM_RUN = "flapping"; + MOVE_RANGE = 20; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 72; + NPC_HACKED_MOVE_SPEED = 200; + ANIM_PERCH1 = "idle"; + ANIM_FIGIT = "idle2"; + ANIM_IDLE_FLIGHT = "flapping"; + DMG_ATTACK = Random(15, 40); + DMG_DIVE = RandomInt(30, 100); + FREQ_DIVE = RandomInt(20, 30); + SPEED_STANDARD = 200; + SPEED_DIVE = 400; + FLEE_COUNT = 10; + ATTACK_RANGE_STANDARD = 64; + FLY_VSPEED_UP = 25; + FLY_VSPEED_DOWN = -25; + FLY_VRANGE = 50; + SOUND_FLAP1 = "monsters/bat/flap_big1.wav"; + SOUND_FLAP2 = "monsters/bat/flap_big2.wav"; + SOUND_WARCRY = "monsters/birds/bird.wav"; + SOUND_DEATH = "monsters/birds/hawk.wav"; + SOUND_ATTACK = "monsters/birds/flutter.wav"; + SOUND_STRUCK = "debris/flesh2.wav"; + SOUND_PAIN = "monsters/birds/vulture.wav"; + SOUND_PAIN2 = "monsters/birds/cry.wav"; + SOUND_VICTORY = "monsters/birds/hawkcaw.wav"; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Giant Eagle"); + SetRace("wildanimal"); + SetHealth(1000); + SetWidth(64); + SetHeight(64); + SetModel("monsters/eagle_large.mdl"); + SetIdleAnim("flapping"); + SetMoveAnim("flapping"); + SetHearingSensitivity(8); + SetRoam(true); + SetGravity(0); + SetDamageResistance("poison", 2.0); + COUNT_ATK = 0; + } + + void npc_targetsighted() + { + if (!(IsValidPlayer(HUNT_LASTTARGET))) + { + ATTACK_RANGE = GetEntityHeight(HUNT_LASTTARGET); + if (!(CYCLED_UP)) + { + cycle_up(); + } + } + else + { + ATTACK_RANGE = ATTACK_RANGE_STANDARD; + } + } + + void start_perched() + { + SetIdleAnim("idle"); + SetMoveAnim("idle"); + SetRoam(false); + AM_PERCHED = 1; + SetHearingSensitivity(0); + npcatk_suspend_ai(); + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 384; + NPC_PROXACT_EVENT = "un_perch"; + NPC_PROXACT_FOV = 1; + NPC_PROXACT_CONE = 90; + ScheduleDelayedEvent(0.1, "npcatk_proxact_scan"); + } + + void un_perch() + { + SetHearingSensitivity(8); + AM_PERCHED = 0; + SetIdleAnim(ANIM_WALK); + SetMoveAnim(ANIM_WALK); + npcatk_suspend_ai(); + NPC_HACKED_MOVE_SPEED = SPEED_STANDARD; + PlayAnim("critical", "divestart"); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 100)); + SetMoveDest(DIVE_START); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + ScheduleDelayedEvent(1.1, "target_invader"); + } + + void target_invader() + { + npcatk_target(NPC_PROXACT_PLAYERID); + } + + void cycle_up() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((AM_PERCHED)) + { + NPC_PROXACT_PLAYERID = GetEntityIndex(m_hLastStruck); + NPC_PROXACT_TRIPPED = 1; + un_perch(); + } + } + + void attack1() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK, 5); + DoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, DMG_ATTACK, 0.9, "slash"); + } + + void attack2() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK, 5); + DoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, DMG_ATTACK, 0.9, "slash"); + COUNT_ATK += 1; + if (COUNT_ATK > FLEE_COUNT) + { + COUNT_ATK = 0; + npcatk_suspend_ai(3.0); + SetMoveDest(HUNT_LASTTARGET); + } + } + + void flap_sound() + { + // PlayRandomSound from: SOUND_FLAP1, SOUND_FLAP2 + array sounds = {SOUND_FLAP1, SOUND_FLAP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetGravity(1.0); + } + + void my_target_died() + { + EmitSound(GetOwner(), 0, SOUND_VICTORY, 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((I_R_FROZEN)) return; + if (!(IsEntityAlive(GetOwner()))) return; + string MOVE_DEST_Z = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("movedest.origin")); + MOVE_DEST_Z += 256; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + if (MOVE_DEST_Z > MY_Z) + { + string Z_DIFF = MOVE_DEST_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > FLY_VRANGE) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, FLY_VSPEED_UP)); + } + if (MOVE_DEST_Z < MY_Z) + { + string Z_DIFF = MY_Z; + Z_DIFF -= MOVE_DEST_Z; + if (Z_DIFF > FLY_VRANGE) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, FLY_VSPEED_DOWN)); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/eagle_giant_thunder.as b/scripts/angelscript/monsters/eagle_giant_thunder.as new file mode 100644 index 00000000..7a62f2b5 --- /dev/null +++ b/scripts/angelscript/monsters/eagle_giant_thunder.as @@ -0,0 +1,175 @@ +#pragma context server + +#include "monsters/eagle_giant_base.as" + +namespace MS +{ + +class EagleGiantThunder : CGameScript +{ + int BEAMS_ON; + string BEAM_LIST; + string BEAM_TARGETS; + int DOT_SHOCK; + float FREQ_STORM; + float FREQ_ZAP; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string SOUND_STORM; + string SOUND_ZAP; + string SOUND_ZAP_WARMUP; + + EagleGiantThunder() + { + NPC_GIVE_EXP = 400; + FREQ_ZAP = 10.0; + DOT_SHOCK = 25; + FREQ_STORM = Random(30, 40); + SOUND_ZAP_WARMUP = "debris/beamstart2.wav"; + SOUND_ZAP = "debris/beamstart9.wav"; + SOUND_STORM = "weather/Storm_exclamation.wav"; + } + + void game_precache() + { + Precache("monsters/summon/tornado"); + } + + void OnSpawn() override + { + SetName("Thunderbird"); + SetRace("demon"); + SetHealth(2000); + SetWidth(64); + SetHeight(64); + SetModel("monsters/eagle_large.mdl"); + SetIdleAnim("flapping"); + SetMoveAnim("flapping"); + SetHearingSensitivity(8); + SetRoam(true); + SetDamageResistance("poison", 2.0); + SetDamageResistance("holy", 1.0); + SetDamageResistance("lightning", 0.0); + SetProp(GetOwner(), "skin", 6); + FREQ_ZAP("do_zap"); + FREQ_STORM("do_storm"); + BEAM_LIST = ""; + ScheduleDelayedEvent(0.1, "init_beam1"); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!((param5).findFirst("effect_") == 0)) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(20, 200, 10)); + } + + void do_zap() + { + FREQ_ZAP("do_zap"); + BEAM_TARGETS = /* TODO: $get_tbox */ $get_tbox("enemy", 1024, GetMonsterProperty("origin")); + if (!(BEAM_TARGETS != "none")) return; + Effect("glow", GetOwner(), Vector3(255, 255, 0), 128, 3, 3); + EmitSound(GetOwner(), 0, SOUND_ZAP_WARMUP, 10); + ScheduleDelayedEvent(1.0, "do_zap2"); + } + + void do_zap2() + { + BEAMS_ON = 0; + for (int i = 0; i < GetTokenCount(BEAM_TARGETS, ";"); i++) + { + zap_targets(); + } + EmitSound(GetOwner(), 0, SOUND_ZAP, 10); + ScheduleDelayedEvent(2.0, "turn_beams_off"); + } + + void zap_targets() + { + string CUR_IDX = i; + if (!(BEAMS_ON < 4)) return; + string CUR_TARGET = GetToken(BEAM_TARGETS, CUR_IDX, ";"); + string CUR_TARG_ORG = GetEntityOrigin(CUR_TARGET); + string CUR_BEAM = GetToken(BEAM_LIST, CUR_IDX, ";"); + string TRACE_TARGET = TraceLine(GetMonsterProperty("origin"), CUR_TARG_ORG); + if (!(TRACE_TARGET == CUR_TARG_ORG)) return; + BEAMS_ON += 1; + Effect("beam", "update", CUR_BEAM, "end_target", CUR_TARGET, 0); + Effect("beam", "update", CUR_BEAM, "brightness", 200); + ApplyEffect(CUR_TARGET, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), DOT_SHOCK); + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(-100, 1000, 250)); + } + + void turn_beams_off() + { + for (int i = 0; i < GetTokenCount(BEAM_LIST, ";"); i++) + { + beams_off_loop(); + } + } + + void beams_off_loop() + { + Effect("beam", "update", GetToken(BEAM_LIST, i, ";"), "brightness", 0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + for (int i = 0; i < GetTokenCount(BEAM_LIST, ";"); i++) + { + beams_remove(); + } + } + + void beams_remove() + { + Effect("beam", "update", GetToken(BEAM_LIST, i, ";"), "remove", 0.1); + } + + void init_beam1() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(0.1, "init_beam2"); + } + + void init_beam2() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(0.1, "init_beam3"); + } + + void init_beam3() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(0.1, "init_beam4"); + } + + void init_beam4() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 0, Vector3(200, 255, 50), 0, 10, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + } + + void do_storm() + { + FREQ_STORM("do_storm"); + if (!(m_hAttackTarget != "unset")) return; + EmitSound(GetOwner(), 0, SOUND_STORM, 10); + PlayAnim("critical", ANIM_ATTACK); + SpawnNPC("monsters/summon/tornado", /* TODO: $relpos */ $relpos(0, 64, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 50, 20.0 + npcatk_suspend_ai(3.0); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(NPC_HOME_LOC); + } + +} + +} diff --git a/scripts/angelscript/monsters/eagle_ice.as b/scripts/angelscript/monsters/eagle_ice.as new file mode 100644 index 00000000..7a13f9df --- /dev/null +++ b/scripts/angelscript/monsters/eagle_ice.as @@ -0,0 +1,70 @@ +#pragma context server + +#include "monsters/eagle_base.as" + +namespace MS +{ + +class EagleIce : CGameScript +{ + float DMG_ATTACK; + int DMG_DOT_BURN; + int IS_UNHOLY; + int MELEE_ATTACK; + int NO_DIVE; + int NPC_GIVE_EXP; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_STRUCK; + + EagleIce() + { + IS_UNHOLY = 1; + NO_DIVE = 1; + DMG_DOT_BURN = RandomInt(10, 30); + DMG_ATTACK = Random(10, 40); + NPC_GIVE_EXP = 250; + SOUND_STRUCK = "debris/glass1.wav"; + SOUND_PAIN = "debris/glass2.wav"; + SOUND_PAIN2 = "debris/glass3.wav"; + } + + void OnSpawn() override + { + SetName("Eagle made of ice"); + SetRace("demon"); + SetHealth(600); + SetWidth(32); + SetHeight(32); + SetModel("monsters/eagle.mdl"); + SetIdleAnim("flapping"); + SetMoveAnim("flapping"); + SetHearingSensitivity(11); + SetRoam(true); + SetFly(true); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("holy", 2.0); + SetDamageResistance("fire", 3.0); + SetProp(GetOwner(), "skin", 4); + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (RandomInt(1, 5) == 1) + { + ApplyEffect(param2, "effects/dot_cold", 10, GetEntityIndex(GetOwner()), DMG_DOT_BURN); + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(20, 200, 10)); + } + MELEE_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/eagle_metal.as b/scripts/angelscript/monsters/eagle_metal.as new file mode 100644 index 00000000..d2edc2f5 --- /dev/null +++ b/scripts/angelscript/monsters/eagle_metal.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "monsters/eagle_base.as" + +namespace MS +{ + +class EagleMetal : CGameScript +{ + float DMG_ATTACK; + int DMG_DOT_BURN; + int IS_UNHOLY; + int MELEE_ATTACK; + int NO_DIVE; + int NPC_GIVE_EXP; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_STRUCK; + + EagleMetal() + { + IS_UNHOLY = 1; + NO_DIVE = 1; + DMG_DOT_BURN = RandomInt(10, 30); + DMG_ATTACK = Random(10, 40); + NPC_GIVE_EXP = 400; + SOUND_STRUCK = "weapons/axemetal1.wav"; + SOUND_PAIN = "weapons/axemetal2.wav"; + SOUND_PAIN2 = "doors/doorstop5.wav"; + } + + void OnSpawn() override + { + SetName("Eagle made of metal"); + SetRace("demon"); + SetHealth(800); + SetBloodType("none"); + SetWidth(32); + SetHeight(32); + SetModel("monsters/eagle.mdl"); + SetIdleAnim("flapping"); + SetMoveAnim("flapping"); + SetHearingSensitivity(11); + SetRoam(true); + SetFly(true); + SetDamageResistance("all", 0.25); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 2.0); + SetDamageResistance("lightning", 3.0); + SetProp(GetOwner(), "skin", 5); + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (RandomInt(1, 10) == 1) + { + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(30, 300, 30)); + } + MELEE_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/eagle_plague.as b/scripts/angelscript/monsters/eagle_plague.as new file mode 100644 index 00000000..f59a4acb --- /dev/null +++ b/scripts/angelscript/monsters/eagle_plague.as @@ -0,0 +1,59 @@ +#pragma context server + +#include "monsters/eagle_base.as" + +namespace MS +{ + +class EaglePlague : CGameScript +{ + float DMG_ATTACK; + int DMG_DOT_BURN; + int MELEE_ATTACK; + int NO_DIVE; + int NPC_GIVE_EXP; + + EaglePlague() + { + NO_DIVE = 1; + DMG_DOT_BURN = RandomInt(5, 20); + DMG_ATTACK = Random(10, 40); + NPC_GIVE_EXP = 250; + } + + void OnSpawn() override + { + SetName("Plague Bird"); + SetRace("demon"); + SetHealth(600); + SetWidth(32); + SetHeight(32); + SetModel("monsters/eagle.mdl"); + SetIdleAnim("flapping"); + SetMoveAnim("flapping"); + SetHearingSensitivity(11); + SetRoam(true); + SetFly(true); + SetDamageResistance("poison", 1.0); + SetProp(GetOwner(), "skin", 2); + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (RandomInt(1, 5) == 1) + { + ApplyEffect(param2, "effects/dot_poison", 20, GetEntityIndex(GetOwner()), DMG_DOT_BURN); + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(20, 200, 10)); + } + MELEE_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/eagle_stone.as b/scripts/angelscript/monsters/eagle_stone.as new file mode 100644 index 00000000..f8ff9821 --- /dev/null +++ b/scripts/angelscript/monsters/eagle_stone.as @@ -0,0 +1,58 @@ +#pragma context server + +#include "monsters/eagle_base.as" + +namespace MS +{ + +class EagleStone : CGameScript +{ + float DMG_ATTACK; + int IS_UNHOLY; + int NO_DIVE; + int NPC_GIVE_EXP; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_STRUCK; + + EagleStone() + { + IS_UNHOLY = 1; + NO_DIVE = 1; + DMG_ATTACK = Random(20, 60); + NPC_GIVE_EXP = 300; + SOUND_STRUCK = "weapons/axemetal1.wav"; + SOUND_PAIN = "weapons/axemetal2.wav"; + SOUND_PAIN2 = "debris/concrete1.wav"; + } + + void OnSpawn() override + { + SetName("Eagle made of stone"); + SetRace("demon"); + SetHealth(600); + SetBloodType("none"); + SetWidth(32); + SetHeight(32); + SetModel("monsters/eagle.mdl"); + SetIdleAnim("flapping"); + SetMoveAnim("flapping"); + SetHearingSensitivity(11); + SetRoam(true); + SetFly(true); + SetDamageResistance("all", 0.75); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 2.0); + SetDamageResistance("lightning", 0.5); + SetProp(GetOwner(), "skin", 3); + } + + void game_dodamage() + { + if (!(param1)) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(30, 300, 30)); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_air0.as b/scripts/angelscript/monsters/elemental_air0.as new file mode 100644 index 00000000..8a4d5c49 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_air0.as @@ -0,0 +1,529 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class ElementalAir0 : CGameScript +{ + int AIM_RATIO; + int AMB_FIRE_DAMAGE; + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_BASEIDLE; + string ANIM_BUGIDLE_A; + string ANIM_BUGIDLE_B; + string ANIM_BUGIDLE_C; + string ANIM_CHARGE; + string ANIM_CHARGEIDLE; + string ANIM_DEATH; + string ANIM_FIRE_BALL; + string ANIM_FLINCH; + string ANIM_FLOAT; + string ANIM_FROMCHARGE; + string ANIM_GLOAT; + string ANIM_IDLE; + string ANIM_PARRY; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_TOCHARGE; + string ANIM_WALK; + int AS_SUMMON_TELE_CHECK; + float ATTACK_ACCURACY; + int ATTACK_CONE_OF_FIRE; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + string BEAM_DURATION; + string BEAM_ID; + string BEAM_ON; + int BEAM_RANGE; + int CAN_ATTACK; + int CAN_FLINCH; + int CAN_FLY; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int CAN_WANDER; + int CIRCLE_RANGE; + int DID_SHRUG; + string DID_WARCRY; + float DMG_CHAIN; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string EL_FLEE_DELAY; + string FINGER_ADJ; + int FIRESEAL_DAMAGE; + string FIRE_BALL_AMMO; + int FIRE_BALL_DAMAGE; + int FIRE_BALL_RANGE; + int FIRE_DAMAGE; + int FLEE_DISTANCE; + string FLINCH_ANIM; + int FLINCH_CHANCE; + int FLINCH_DELAY; + int FLINCH_DMG_REQ; + float FREQ_FLEE; + float FREQ_REPOS; + int FREQ_ZAP; + int FULL_FIRE_BALL_AMMO; + string GLOAT_DELAY; + int HOVER_LOOP_DELAY; + int HUNT_AGRO; + float HURT_THRESHOLD; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int I_AM_TURNABLE; + int I_JUST_SPAWNED; + int LIGHTNING_COUNT; + string ME_SHOOTING; + int MONSTER_WIDTH; + int MOVE_FAST; + int MOVE_NORMAL; + int MOVE_RANGE; + string MY_HURT_STAGE; + string NEXT_BEAM; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string OLD_BEAM_TARG; + float PLAYTIME_HOVER; + string PROJ_SCRIPT; + int RETALIATE_CHANGETARGET_CHANCE; + int SHOCK_AMT; + string SOUND_ALERT; + string SOUND_CIRCLE_READY; + string SOUND_DEATH; + string SOUND_FIRECHARGE; + string SOUND_FIRESHOOT; + string SOUND_GLOAT; + string SOUND_HOVER; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN0; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_SWIPE; + string SOUND_SWIPEHIT; + int SWIPE_HITRANGE; + int SWIPE_MOVERANGE; + int SWIPE_RANGE; + int THROWING_FIRE_BALL; + string USE_SWIPE_SOUND; + int ZAP_DELAY; + + ElementalAir0() + { + AS_SUMMON_TELE_CHECK = 1; + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + FREQ_ZAP = RandomInt(3, 8); + FREQ_FLEE = 10.0; + FREQ_REPOS = Random(1, 3); + DMG_CHAIN = Random(2, 6); + BEAM_RANGE = 2048; + FINGER_ADJ = "$relpos($vec(0,MY_YAW,0),$vec(0,30,0))"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + CAN_ATTACK = 1; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_FLY = 0; + CAN_HEAR = 1; + CAN_WANDER = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 100; + CAN_FLINCH = 1; + FLINCH_CHANCE = 10; + FLINCH_ANIM = "flinch"; + FLINCH_DELAY = 1; + FLINCH_DMG_REQ = 30; + FLEE_DISTANCE = 4096; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 150; + MOVE_RANGE = 65; + ATTACK_HITCHANCE = 0.8; + SWIPE_MOVERANGE = 65; + SWIPE_RANGE = 100; + SWIPE_HITRANGE = 150; + FIRE_BALL_RANGE = 2000; + ATTACK_ACCURACY = 0.8; + ATTACK_DAMAGE = "$rand(50,100)"; + CIRCLE_RANGE = 256; + AIM_RATIO = 50; + ATTACK_CONE_OF_FIRE = 2; + ATTACK_SPEED = 500; + FIRE_DAMAGE = "$rand(20,50)"; + AMB_FIRE_DAMAGE = "$rand(10,30)"; + FIRESEAL_DAMAGE = 200; + FIRE_BALL_DAMAGE = "$rand(50,100)"; + FULL_FIRE_BALL_AMMO = 3; + ANIM_IDLE = "idle1"; + ANIM_WALK = "idle1"; + ANIM_RUN = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_FLINCH = "flinch"; + ANIM_DEATH = "die1"; + ANIM_BASEIDLE = "idle1"; + ANIM_FLOAT = "idle1"; + ANIM_BUGIDLE_A = "idle1"; + ANIM_BUGIDLE_B = "idle2"; + ANIM_BUGIDLE_C = "dunno"; + ANIM_CHARGE = "float"; + ANIM_FIRE_BALL = "fireball"; + ANIM_SWIPE = "attack1"; + ANIM_PARRY = "block"; + ANIM_ALERT = "yes"; + ANIM_GLOAT = "no"; + ANIM_SEARCH = "dunno"; + ANIM_TOCHARGE = "tocharge"; + ANIM_CHARGEIDLE = "charging"; + ANIM_FROMCHARGE = "fromcharge"; + SOUND_ALERT = "agrunt/ag_alert5.wav"; + SOUND_IDLE1 = "agrunt/ag_alert1.wav"; + SOUND_IDLE2 = "agrunt/ag_die1.wav"; + SOUND_IDLE3 = "agrunt/ag_idle1.wav"; + SOUND_SWIPE = "weapons/debris1.wav"; + SOUND_SWIPEHIT = "ambience/steamburst1.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + HURT_THRESHOLD = 0.5; + SOUND_PAIN0 = "debris/bustflesh2.wav"; + SOUND_PAIN1 = "agrunt/ag_pain1.wav"; + SOUND_PAIN2 = "agrunt/ag_pain4.wav"; + SOUND_GLOAT = "x/x_laugh1.wav"; + SOUND_FIRECHARGE = "magic/fireball_powerup.wav"; + SOUND_FIRESHOOT = "magic/fireball_strike.wav"; + SOUND_CIRCLE_READY = "debris/beamstart1.wav"; + SOUND_HOVER = "fans/fan4on.wav"; + PLAYTIME_HOVER = 3.0; + PROJ_SCRIPT = "proj_fire_ball"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 40; + I_AM_TURNABLE = 0; + MONSTER_WIDTH = 32; + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + Precache("monsters/elementals_lesser.mdl"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_REPOS); + int RND_FLOAT_X = RandomInt(1, 20); + int RND_FLOAT_Y = RandomInt(1, 20); + int RND_FLOAT_Z = RandomInt(1, 20); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_FLOAT_X, RND_FLOAT_Y, RND_FLOAT_Z)); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RandomInt(200, 255)); + } + + void OnSpawn() override + { + SetName("Summoned Air Elemental"); + SetHealth(500); + SetWidth(72); + SetHeight(72); + SetRace("demon"); + SetDamageResistance("holy", 2.0); + SetDamageResistance("poison", 1.5); + SetDamageResistance("lightning", 0.0); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(5); + SetModel("monsters/elementals_lesser_fly.mdl"); + SetModelBody(0, 1); + NPC_GIVE_EXP = 150; + ScheduleDelayedEvent(1.0, "idle_sounds"); + FIRE_BALL_AMMO = FULL_FIRE_BALL_AMMO; + I_JUST_SPAWNED = 1; + SetBloodType("none"); + SetFly(true); + MY_HURT_STAGE = GetEntityMaxHealth(GetOwner()); + MY_HURT_STAGE *= HURT_THRESHOLD; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RandomInt(200, 255)); + ScheduleDelayedEvent(0.1, "init_beam"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (GetEntityRange(m_hLastStruck) < ATTACK_HITRANGE) + { + if (!(EL_FLEE_DELAY)) + { + } + EL_FLEE_DELAY = 1; + FREQ_FLEE("reset_el_flee_delay"); + npcatk_flee(GetEntityIndex(m_hLastStruck), 1024, 5); + } + string MY_HEALTH = GetEntityHealth(GetOwner()); + if (MY_HEALTH >= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HEALTH <= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void reset_el_flee_delay() + { + EL_FLEE_DELAY = 0; + } + + void idle_sounds() + { + float NEXT_SOUND = Random(5, 15); + NEXT_SOUND("idle_sounds"); + if (!(HUNT_LASTTARGET == �NONE�)) return; + int RAND_ANIM = RandomInt(1, 3); + if (RAND_ANIM == 1) + { + PlayAnim("once", ANIM_BUGIDLE_A); + } + if (RAND_ANIM == 2) + { + PlayAnim("once", ANIM_BUGIDLE_B); + } + if (RAND_ANIM == 3) + { + PlayAnim("once", ANIM_BUGIDLE_C); + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if (!(param1)) return; + if ((USE_SWIPE_SOUND)) + { + int VEL_F = RandomInt(10, 400); + int VEL_Z = RandomInt(10, 400); + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, VEL_F, VEL_Z)); + if (RandomInt(1, 3) == 1) + { + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + EmitSound(GetOwner(), 0, SOUND_SWIPEHIT, 10); + USE_SWIPE_SOUND = 0; + } + } + + void npc_targetsighted() + { + if ((IS_FLEEING)) return; + if ((THROWING_FIRE_BALL)) return; + if ((ZAP_DELAY)) return; + ZAP_DELAY = 1; + FREQ_ZAP("reset_zap_delay"); + if ((THROWING_FIRE_BALL)) return; + check_fire_ball(); + } + + void reset_zap_delay() + { + ZAP_DELAY = 0; + } + + void check_fire_ball() + { + if ((THROWING_FIRE_BALL)) return; + if (!(false)) return; + if (!(GetEntityRange(m_hLastSeen) > ATTACK_RANGE)) return; + if ((IsEntityAlive(G_SHOCKER))) return; + if (!(GetGameTime() > G_NEXT_SHOCK)) return; + SetGlobalVar("G_SHOCKER", GetEntityIndex(GetOwner())); + SetGlobalVar("G_NEXT_SHOCK", GetGameTime()); + G_NEXT_SHOCK += 5.0; + SetMoveDest(m_hLastSeen); + EmitSound(GetOwner(), 0, SOUND_FIRECHARGE, 10); + PlayAnim("critical", "tocharge"); + LIGHTNING_COUNT = 0; + THROWING_FIRE_BALL = 1; + npcatk_suspend_ai(); + SHOCK_AMT = RandomInt(15, 30); + Effect("beam", "update", BEAM_ID, "brightness", 200); + Effect("beam", "update", BEAM_ID, "end_target", m_hAttackTarget, 0); + OLD_BEAM_TARG = m_hAttackTarget; + ScheduleDelayedEvent(0.1, "do_lightning"); + } + + void do_lightning() + { + LIGHTNING_COUNT += 1; + if (LIGHTNING_COUNT < SHOCK_AMT) + { + SetIdleAnim("charging"); + SetMoveAnim("charging"); + ME_SHOOTING = 1; + ScheduleDelayedEvent(0.1, "do_lightning"); + } + if (LIGHTNING_COUNT == SHOCK_AMT) + { + npcatk_resume_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ME_SHOOTING = 0; + PlayAnim("critical", "fromcharge"); + THROWING_FIRE_BALL = 0; + SetGlobalVar("G_SHOCKER", "unset"); + Effect("beam", "update", BEAM_ID, "brightness", 0); + } + if (!(false)) return; + if (m_hAttackTarget != OLD_BEAM_TARG) + { + Effect("beam", "update", BEAM_ID, "end_target", m_hAttackTarget, 0); + OLD_BEAM_TARG = m_hAttackTarget; + } + string BEAM_START = GetMonsterProperty("origin"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + BEAM_START += FINGER_ADJ; + DoDamage(m_hAttackTarget, BEAM_RANGE, DMG_CHAIN, 1.0, "lightning"); + if (GetGameTime() > NEXT_BEAM) + { + BEAM_ON = 1; + BEAM_DURATION = SHOCK_AMT; + BEAM_DURATION *= 0.1; + NEXT_BEAM = GetGameTime(); + NEXT_BEAM += 0.5; + } + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void slow_down() + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + + void ammo_up() + { + FIRE_BALL_AMMO = FULL_FIRE_BALL_AMMO; + } + + void moveto_last_known() + { + if ((false)) return; + if ((DID_SHRUG)) return; + DID_SHRUG = 1; + PlayAnim("critical", ANIM_SEARCH); + EmitSound(GetOwner(), 0, SOUND_IDLE3, 10); + } + + void my_target_died() + { + if (I_JUST_SPAWNED == 1) + { + int EXIT_SUB = 1; + I_JUST_SPAWNED = 0; + } + if ((EXIT_SUB)) return; + if (!(GLOAT_DELAY)) + { + PlayAnim("critical", ANIM_GLOAT); + EmitSound(GetOwner(), 0, SOUND_GLOAT, 10); + GLOAT_DELAY = 1; + ScheduleDelayedEvent(10.0, "reset_gloat"); + } + if (!(false)) + { + DID_WARCRY = 0; + DID_SHRUG = 0; + FIRE_BALL_AMMO = FULL_FIRE_BALL_AMMO; + } + } + + void reset_gloat() + { + GLOAT_DELAY = 0; + } + + void cycle_up() + { + if (!(IsValidPlayer(m_hLastSeen))) return; + SetMoveDest(m_hLastSeen); + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + PlayAnim("critical", ANIM_ALERT); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + } + + void attack1_strike() + { + if (FIRE_BALL_AMMO >= 0) + { + FIRE_BALL_AMMO -= 0.5; + } + USE_SWIPE_SOUND = 1; + DoDamage(m_hLastSeen, ATTACK_HITRANGE, FIRE_DAMAGE, ATTACK_ACCURACY, "slash"); + } + + void game_movingto_dest() + { + if ((RUNNING_CIRCLE)) return; + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + if ((HOVER_LOOP_DELAY)) return; + EmitSound(GetOwner(), CHAN_BODY, SOUND_HOVER, 8); + HOVER_LOOP_DELAY = 1; + PLAYTIME_HOVER("hover_loop_reset"); + } + + void hover_loop_reset() + { + HOVER_LOOP_DELAY = 0; + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + + void OnFlee() + { + flee_straight(); + } + + void flee_straight() + { + if (!(IS_FLEEING)) return; + ScheduleDelayedEvent(0.1, "flee_straight"); + string MY_YAW = /* TODO: $get with insufficient args */ null; + SetAngles("face"); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 50)); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner())); + Effect("beam", "update", BEAM_ID, "remove", 0); + } + + void init_beam() + { + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 0, GetOwner(), 1, Vector3(200, 200, 255), 0, 30, -1); + BEAM_ID = m_hLastCreated; + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_air1.as b/scripts/angelscript/monsters/elemental_air1.as new file mode 100644 index 00000000..8079784f --- /dev/null +++ b/scripts/angelscript/monsters/elemental_air1.as @@ -0,0 +1,86 @@ +#pragma context server + +#include "monsters/elemental_air0.as" + +namespace MS +{ + +class ElementalAir1 : CGameScript +{ + int AS_SUMMON_TELE_CHECK; + int BALL_SIZE; + string BALL_TARGETS; + int DMG_BALL; + int DMG_CIRCLE; + string FIRE_BALL_AMMO; + float FREQ_CIRCLE; + float FREQ_LIGHTING_BALLS; + int I_JUST_SPAWNED; + string MY_HURT_STAGE; + int NEXT_LIGHTNING_BALL; + int NPC_GIVE_EXP; + + ElementalAir1() + { + AS_SUMMON_TELE_CHECK = 1; + BALL_SIZE = 3; + DMG_BALL = 60; + FREQ_CIRCLE = 60.0; + DMG_CIRCLE = 100; + FREQ_LIGHTING_BALLS = Random(20, 45); + } + + void OnSpawn() override + { + SetName("Air Elemental"); + SetHealth(500); + SetWidth(64); + SetHeight(64); + SetRace("demon"); + SetDamageResistance("holy", 2.0); + SetDamageResistance("poison", 1.5); + SetDamageResistance("lightning", 0.0); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(5); + SetModel("monsters/elementals_lesser_fly.mdl"); + SetModelBody(0, 1); + NPC_GIVE_EXP = 150; + ScheduleDelayedEvent(1.0, "idle_sounds"); + FIRE_BALL_AMMO = FULL_FIRE_BALL_AMMO; + I_JUST_SPAWNED = 1; + SetFly(true); + SetBloodType("none"); + MY_HURT_STAGE = GetEntityMaxHealth(GetOwner()); + MY_HURT_STAGE *= HURT_THRESHOLD; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RandomInt(200, 255)); + ScheduleDelayedEvent(0.1, "init_beam"); + NEXT_LIGHTNING_BALL = 0; + } + + void npc_targetsighted() + { + if (!(GetGameTime() > NEXT_LIGHTNING_BALL)) return; + NEXT_LIGHTNING_BALL = GetGameTime(); + NEXT_LIGHTNING_BALL += FREQ_LIGHTING_BALLS; + npcatk_suspend_ai(1.5); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + BALL_TARGETS = FindEntitiesInSphere("enemy", 1024); + ScrambleTokens(BALL_TARGETS, ";"); + SetMoveDest(GetToken(BALL_TARGETS, 0, ";")); + TossProjectile("proj_lightning_ball_simple", "view", GetToken(BALL_TARGETS, 0, ";"), 200, DMG_BALL, 0.5, "none"); + if (!(GetTokenCount(BALL_TARGETS, ";") > 1)) return; + ScheduleDelayedEvent(0.5, "toss_ball_2"); + } + + void toss_ball_2() + { + SetMoveDest(GetToken(BALL_TARGETS, 1, ";")); + TossProjectile("proj_lightning_ball_simple", "view", GetToken(BALL_TARGETS, 1, ";"), 200, DMG_BALL, 0.5, "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_air2.as b/scripts/angelscript/monsters/elemental_air2.as new file mode 100644 index 00000000..ec8661b5 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_air2.as @@ -0,0 +1,558 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class ElementalAir2 : CGameScript +{ + int AM_SUMMONED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int AS_SUMMON_TELE_CHECK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string BALL_TARGETS; + string BEAM_ID; + string BEAM_LIST; + int BEAM_STEP; + int CAN_FLINCH; + string CHAIN_TARGETS; + int CYCLES_ON; + int DMG_BALL; + int DMG_CHAIN_DOT; + int DMG_CHAIN_DRAIN; + string FLINCH_ANIM; + int FLINCH_CHANCE; + float FREQ_BALLS; + float FREQ_CHAIN; + float FREQ_GLOAT; + float FREQ_TELEPORT; + float FREQ_TORNADO; + string HOVER_LOOP_DELAY; + float HURT_THRESHOLD; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int MOVESPEED_FAST; + int MOVESPEED_SLOW; + int MOVE_RANGE; + string MY_HURT_STAGE; + string NEXT_GLOAT; + int NO_MOVE; + int NO_SPAWN_STUCK_CHECK; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string NPC_MOVE_DEST; + string OLD_POS; + float PLAYTIME_HOVER; + int ROAM_ROT; + string SOUND_DEATH; + string SOUND_GLOAT; + string SOUND_HOVER; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN0; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_SWIPE; + string SOUND_SWIPEHIT; + string SOUND_THUNDER; + string SOUND_THUNDER_CHARGE; + int TELEPORT_ENABLED; + + ElementalAir2() + { + AS_SUMMON_TELE_CHECK = 1; + ANIM_IDLE = "idle1"; + ANIM_WALK = "idle1"; + ANIM_RUN = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_FLINCH = "flinch"; + ANIM_DEATH = "die1"; + CAN_FLINCH = 1; + FLINCH_CHANCE = 10; + FLINCH_ANIM = "flinch"; + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 150; + MOVE_RANGE = 65; + NPC_HACKED_MOVE_SPEED = 100; + MOVESPEED_SLOW = 100; + MOVESPEED_FAST = 200; + FREQ_CHAIN = Random(10, 15); + FREQ_GLOAT = 10.0; + FREQ_BALLS = 30.0; + FREQ_TORNADO = Random(45, 120); + DMG_CHAIN_DOT = 100; + DMG_CHAIN_DRAIN = 50; + DMG_BALL = 200; + FREQ_TELEPORT = Random(20.0, 30.0); + SOUND_THUNDER = "magic/bolt_end.wav"; + SOUND_THUNDER_CHARGE = "magic/bolt_start.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + SOUND_IDLE1 = "agrunt/ag_alert1.wav"; + SOUND_IDLE2 = "agrunt/ag_die1.wav"; + SOUND_IDLE3 = "agrunt/ag_idle1.wav"; + SOUND_SWIPE = "weapons/debris1.wav"; + SOUND_SWIPEHIT = "ambience/steamburst1.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_PAIN0 = "debris/bustflesh2.wav"; + SOUND_PAIN1 = "agrunt/ag_pain1.wav"; + SOUND_PAIN2 = "agrunt/ag_pain4.wav"; + SOUND_GLOAT = "x/x_laugh1.wav"; + SOUND_HOVER = "fans/fan4on.wav"; + HURT_THRESHOLD = 0.5; + PLAYTIME_HOVER = 3.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if ((NO_MOVE)) + { + SetMoveDest("none"); + NPC_HACKED_MOVE_SPEED = 0; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (NPC_MOVE_DEST == "unset") + { + ROAM_ROT += 10; + if (ROAM_ROT > 359) + { + ROAM_ROT -= 359; + } + string MOVE_DEST = GetMonsterProperty("origin"); + MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, ROAM_ROT, 0), Vector3(0, 128, 0)); + SetMoveDest(MOVE_DEST); + NPC_HACKED_MOVE_SPEED = MOVESPEED_SLOW; + } + else + { + NPC_HACKED_MOVE_SPEED = MOVESPEED_FAST; + SetMoveDest(NPC_MOVE_DEST); + } + if ((I_R_FROZEN)) + { + SetMoveDest("none"); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, -200)); + NPC_HACKED_MOVE_SPEED = 0; + } + else + { + if (Distance(OLD_POS, GetMonsterProperty("origin")) < 5) + { + int RND_RL = RandomInt(-100, 100); + int RND_FB = RandomInt(-100, 100); + int RND_UD = RandomInt(-100, 100); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_RL, RND_FB, RND_UD)); + } + OLD_POS = GetMonsterProperty("origin"); + } + } + + void game_precache() + { + Precache("monsters/summon/tornado"); + Precache("monsters/summon/lightning_ball_guided"); + Precache(SOUND_THUNDER); + } + + void OnSpawn() override + { + SetName("Greater Air Elemental"); + SetHealth(4000); + SetWidth(64); + SetHeight(64); + SetRace("demon"); + SetDamageResistance("holy", 2.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("lightning", 0.0); + SetBloodType("none"); + SetRoam(false); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(11); + SetModel("monsters/elementals_greater_flyer.mdl"); + SetModelBody(0, 3); + NPC_GIVE_EXP = 600; + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetFly(true); + MY_HURT_STAGE = GetEntityMaxHealth(GetOwner()); + MY_HURT_STAGE *= HURT_THRESHOLD; + NPC_MOVE_DEST = "unset"; + ROAM_ROT = 0; + BEAM_LIST = ""; + ScheduleDelayedEvent(0.1, "init_beam1"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + ScheduleDelayedEvent(0.1, "npcatk_hunt"); + if ((SUSPEND_AI)) return; + if ((IS_FLEEING)) return; + if ((false)) + { + string LAST_SEEN_NME = GetEntityIndex(m_hLastSeen); + } + if (m_hAttackTarget == "unset") + { + npcatk_settarget(LAST_SEEN_NME); + } + if (GetEntityRange(m_hAttackTarget) > GetEntityRange(LAST_SEEN_NME)) + { + if ((IsValidPlayer(LAST_SEEN_NME))) + { + } + npcatk_settarget(LAST_SEEN_NME); + } + if (m_hAttackTarget != "unset") + { + NPC_MOVE_DEST = GetEntityOrigin(m_hAttackTarget); + NPC_MOVE_DEST += "z"; + float RND_FB = Random(-128, 128); + NPC_MOVE_DEST += "x"; + } + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(m_hAttackTarget == "unset")) return; + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(GetOwner()) == "enemy")) return; + npcatk_settarget(m_hAttackTarget); + } + + void my_target_died() + { + NPC_MOVE_DEST = "unset"; + if (!(GetGameTime() > NEXT_GLOAT)) return; + NEXT_GLOAT = GetGameTime(); + NEXT_GLOAT += FREQ_GLOAT; + PlayAnim("critical", "idle2"); + suspend_move(1.0); + } + + void suspend_move() + { + NO_MOVE = 1; + PARAM1("resume_move"); + } + + void resume_move() + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + NO_MOVE = 0; + } + + void game_movingto_dest() + { + if (!(GetGameTime() > HOVER_LOOP_DELAY)) return; + EmitSound(GetOwner(), CHAN_BODY, SOUND_HOVER, 8); + HOVER_LOOP_DELAY = GetGameTime(); + HOVER_LOOP_DELAY += 3.0; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + if (MY_HEALTH >= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HEALTH < MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void cycle_up() + { + start_cycles(); + } + + void cycle_npc() + { + start_cycles(); + } + + void start_cycles() + { + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + FREQ_CHAIN("do_chain"); + FREQ_BALLS("do_balls"); + FREQ_TORNADO("do_tornado"); + if (!(TELEPORT_ENABLED)) return; + FREQ_TELEPORT("do_teleport"); + } + + void do_chain() + { + FREQ_CHAIN("do_chain"); + if (!(m_hAttackTarget != "unset")) return; + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(GetEntityRange(m_hAttackTarget) < 2048)) return; + if (!(false)) return; + suspend_move(2.0); + EmitSound(GetOwner(), 0, SOUND_THUNDER_CHARGE, 10); + PlayAnim("critical", "tocharge"); + SetIdleAnim("charging"); + SetMoveAnim("charging"); + string TARGET_ORG = GetEntityOrigin(m_hAttackTarget); + CHAIN_TARGETS = FindEntitiesInSphere("enemy", 1024); + Effect("beam", "update", GetToken(BEAM_LIST, 0, ";"), "end_target", m_hAttackTarget, 0); + Effect("beam", "update", GetToken(BEAM_LIST, 1, ";"), "end_target", m_hAttackTarget, 0); + Effect("beam", "update", GetToken(BEAM_LIST, 0, ";"), "brightness", 200); + Effect("beam", "update", GetToken(BEAM_LIST, 1, ";"), "brightness", 200); + DoDamage(m_hAttackTarget, "direct", DMG_CHAIN_DRAIN, 1.0, GetOwner()); + ApplyEffect(m_hAttackTarget, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), DMG_CHAIN_DOT); + BEAM_STEP = 0; + ScheduleDelayedEvent(0.5, "setup_beams"); + ScheduleDelayedEvent(2.0, "clear_beams"); + } + + void setup_beams() + { + LogDebug("setup_beams stp BEAM_STEP targs CHAIN_TARGETS"); + BEAM_STEP += 1; + string CUR_IDX = BEAM_STEP; + if (!(CUR_IDX < 5)) return; + if (!(CUR_IDX < GetTokenCount(CHAIN_TARGETS, ";"))) return; + ScheduleDelayedEvent(0.25, "setup_beams"); + string BEAM_IDX = CUR_IDX; + BEAM_IDX += 1; + string CUR_BEAM = GetToken(BEAM_LIST, CUR_IDX, ";"); + string CUR_TARGET = GetToken(CHAIN_TARGETS, CUR_IDX, ";"); + string PREV_IDX = CUR_IDX; + PREV_IDX -= 1; + string PREV_TARGET = GetToken(CHAIN_TARGETS, PREV_IDX, ";"); + if (PREV_IDX == 0) + { + string PREV_TARGET = m_hAttackTarget; + } + Effect("beam", "update", CUR_BEAM, "start_target", PREV_TARGET, 0); + Effect("beam", "update", CUR_BEAM, "end_target", CUR_TARGET, 0); + Effect("beam", "update", CUR_BEAM, "brightness", 200); + ApplyEffect(CUR_TARGET, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), DMG_CHAIN_DOT); + DoDamage(CUR_TARGET, "direct", DMG_CHAIN_DRAIN, 1.0, GetOwner()); + CallExternal(CUR_TARGET, "ext_playsound_kiss", 0, 10, SOUND_THUNDER); + } + + void clear_beams() + { + for (int i = 0; i < GetTokenCount(BEAM_LIST, ";"); i++) + { + clear_beams_loop(); + } + } + + void clear_beams_loop() + { + Effect("beam", "update", GetToken(BEAM_LIST, i, ";"), "brightness", 0); + } + + void init_beam1() + { + Effect("beam", "ents", "lgtning.spr", 60, GetOwner(), 1, GetOwner(), 0, Vector3(200, 200, 255), 0, 20, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + BEAM_ID = GetEntityIndex(m_hLastCreated); + LogDebug("init_beam1 BEAM_ID"); + ScheduleDelayedEvent(0.1, "init_beam2"); + } + + void init_beam2() + { + Effect("beam", "ents", "lgtning.spr", 60, GetOwner(), 2, GetOwner(), 0, Vector3(200, 200, 255), 0, 20, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam2 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + ScheduleDelayedEvent(0.1, "init_beam3"); + } + + void init_beam3() + { + Effect("beam", "ents", "lgtning.spr", 60, GetOwner(), 1, GetOwner(), 0, Vector3(200, 200, 255), 0, 20, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam3 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + ScheduleDelayedEvent(0.1, "init_beam4"); + } + + void init_beam4() + { + Effect("beam", "ents", "lgtning.spr", 60, GetOwner(), 2, GetOwner(), 0, Vector3(200, 200, 255), 0, 20, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam4 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + ScheduleDelayedEvent(0.1, "init_beam5"); + } + + void init_beam5() + { + Effect("beam", "ents", "lgtning.spr", 60, GetOwner(), 2, GetOwner(), 0, Vector3(200, 200, 255), 0, 20, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam4 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + ScheduleDelayedEvent(0.1, "init_beam6"); + } + + void init_beam6() + { + Effect("beam", "ents", "lgtning.spr", 60, GetOwner(), 2, GetOwner(), 0, Vector3(200, 200, 255), 0, 20, -1); + if (BEAM_LIST.length() > 0) BEAM_LIST += ";"; + BEAM_LIST += GetEntityIndex(m_hLastCreated); + LogDebug("init_beam4 BEAM_LIST GetEntityIndex(m_hLastCreated)"); + } + + void do_balls() + { + FREQ_BALLS("do_balls"); + if (!(m_hAttackTarget != "unset")) return; + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(GetEntityRange(m_hAttackTarget) < 2048)) return; + if (!(CYCLED_TIME != CYCLE_TIME_IDLE)) return; + BALL_TARGETS = FindEntitiesInSphere("enemy", 2048); + ScrambleTokens(BALL_TARGETS, ";"); + if (!(GetTokenCount(BALL_TARGETS, ";") > 0)) return; + PlayAnim("critical", "block"); + SpawnNPC("monsters/summon/lightning_ball_guided", /* TODO: $relpos */ $relpos(0, 64, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_BALL, 30.0, 192, GetToken(BALL_TARGETS, 0, ";") + if (GetTokenCount(BALL_TARGETS, ";") == 1) + { + ScheduleDelayedEvent(0.1, "do_balls2"); + ScheduleDelayedEvent(0.2, "do_balls3"); + } + if (!(GetTokenCount(BALL_TARGETS, ";") > 1)) return; + ScheduleDelayedEvent(0.1, "do_balls2"); + if (!(GetTokenCount(BALL_TARGETS, ";") > 2)) return; + ScheduleDelayedEvent(0.2, "do_balls3"); + if (!(GetTokenCount(BALL_TARGETS, ";") > 3)) return; + ScheduleDelayedEvent(0.3, "do_balls4"); + } + + void do_balls2() + { + SpawnNPC("monsters/summon/lightning_ball_guided", /* TODO: $relpos */ $relpos(0, -64, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_BALL, 30.0, 192, GetToken(BALL_TARGETS, 1, ";") + } + + void do_balls3() + { + SpawnNPC("monsters/summon/lightning_ball_guided", /* TODO: $relpos */ $relpos(64, 64, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_BALL, 30.0, 192, GetToken(BALL_TARGETS, 2, ";") + } + + void do_balls4() + { + SpawnNPC("monsters/summon/lightning_ball_guided", /* TODO: $relpos */ $relpos(-64, 64, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_BALL, 30.0, 192, GetToken(BALL_TARGETS, 3, ";") + } + + void do_tornado() + { + FREQ_TORNADO("do_tornado"); + if (!(m_hAttackTarget != "unset")) return; + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(GetEntityRange(m_hAttackTarget) < 2048)) return; + PlayAnim("critical", "block"); + SpawnNPC("monsters/summon/tornado", /* TODO: $relpos */ $relpos(0, 72, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 300, 20.0 + } + + void OnDeath(CBaseEntity@ attacker) override + { + for (int i = 0; i < GetTokenCount(BEAM_LIST, ";"); i++) + { + remove_beams_loop(); + } + } + + void remove_beams_loop() + { + Effect("beam", "update", GetToken(BEAM_LIST, i, ";"), "remove", 0.1); + } + + void game_dynamically_created() + { + AM_SUMMONED = 1; + NO_SPAWN_STUCK_CHECK = 1; + TELEPORT_ENABLED = 1; + } + + void idle_sounds() + { + float NEXT_SOUND = Random(5, 15); + NEXT_SOUND("idle_sounds"); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void do_teleport() + { + if (!(false)) + { + int L_TELE_CHECK = 1; + } + if (GetEntityRange(m_hAttackTarget) > 1024) + { + int L_TELE_CHECK = 1; + } + LogDebug("do_teleport GetEntityRange(m_hAttackTarget) L_TELE_CHECK"); + if (!(L_TELE_CHECK)) + { + FREQ_TELEPORT("do_teleport"); + } + if (!(L_TELE_CHECK)) return; + string L_TELE_POINT = GetEntityOrigin(m_hAttackTarget); + float RND_ANG = Random(0, 359.99); + L_TELE_POINT += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, 192, 34)); + string CUR_POS = GetEntityOrigin(GetOwner()); + SetEntityOrigin(GetOwner(), L_TELE_POINT); + string reg.npcmove.endpos = L_TELE_POINT; + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(-16, 0, 0)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), m_hAttackTarget); + if ("game.ret.npcmove.dist" <= 0) + { + LogDebug("do_teleport fail @ L_TELE_POINT"); + int L_TELE_FAIL = 1; + SetEntityOrigin(GetOwner(), CUR_POS); + } + else + { + FREQ_TELEPORT("do_teleport"); + ClientEvent("new", "all", "effects/sfx_sprite_in_fancy", L_TELE_POINT, "c-tele1.spr", 25, 2.0, Vector3(255, 255, 255), 512, "magic/teleport.wav"); + ClientEvent("new", "all", "effects/sfx_sprite_in_fancy", CUR_POS, "c-tele1.spr", 25, 2.0, Vector3(255, 255, 255), 512, "magic/teleport.wav"); + for (int i = 0; i < GetTokenCount(BEAM_LIST, ";"); i++) + { + remove_beams_loop(); + } + BEAM_LIST = ""; + ScheduleDelayedEvent(0.1, "init_beam1"); + } + if (!(L_TELE_FAIL)) return; + ScheduleDelayedEvent(5.0, "do_teleport"); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_earth1.as b/scripts/angelscript/monsters/elemental_earth1.as new file mode 100644 index 00000000..dbdaa017 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_earth1.as @@ -0,0 +1,688 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" +#include "monsters/base_struck.as" + +namespace MS +{ + +class ElementalEarth1 : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_CHARGEIDLE; + string ANIM_DEATH; + string ANIM_FIRE_BALL; + string ANIM_FLINCH; + string ANIM_FROMCHARGE; + string ANIM_IDLE; + string ANIM_QUICKBLOCK; + string ANIM_ROCK; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_TOCHARGE; + string ANIM_WALK; + string AS_ATTACKING; + int AS_SUMMON_TELE_CHECK; + string ATTACK_CYCLE; + string ATTACK_HITRANGE; + string ATTACK_MOVERANGE; + string ATTACK_RANGE; + string BURST_POS; + string CL_SHIELD_IDX; + string DID_ALERT; + string DID_SPECIAL; + int DMG_FISSURE; + int DMG_ROCK; + int DMG_STORM; + int DMG_SWIPE; + int DOT_EARTHQUAKE; + int EARTHQUAKE_ACTIVE; + int EARTHQUAKE_AOE; + float EARTHQUAKE_DURATION; + string EARTHQUAKE_TARGS; + int ELEMENTAL_EXP; + int ELEMENTAL_LEVEL; + int ELEMENTAL_MOVERANGE; + string FISSURE_ANG; + string FISSURE_CHECK_POS; + int FISSURE_COUNT; + string FISSURE_DIR; + int FISSURE_LENGTH; + string FISSURE_MOVESTEP; + string FISSURE_ORG; + float FREQ_FISSURE; + float FREQ_LONG; + float FREQ_ROCK; + int HITCHANCE_SWIPE; + int IMMUNE_VAMPIRE; + int IS_BLOODLESS; + int IS_UNHOLY; + int MOVE_FAST; + int MOVE_NORMAL; + string NEXT_ACTION; + string NEXT_BEAM; + string NEXT_FISSURE; + string NEXT_LONG; + string NEXT_ROCK; + string NEXT_SHIELD_HITFX; + string NPCATK_TARGET; + string NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string NPC_MATERIAL_TYPE; + int NPC_NO_ATTACK; + int NPC_PITCH_FLINCH; + int NPC_PITCH_IDLE; + int NPC_PITCH_PAIN; + int NPC_USE_FLINCH; + int NPC_USE_IDLE; + int NPC_USE_PAIN; + int NUM_LONGS; + int PITCH_LEVEL; + string ROCK_STRIKE_POS; + int SHIELD_ACTIVE; + float SHIELD_DURATION; + string SHIELD_TARGET; + string SOUND_ALERT; + string SOUND_DEATH; + string SOUND_EARTHQUAKE_LOOP; + string SOUND_EARTHQUAKE_START; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_FLINCH3; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_SWIPE_HIT; + string SOUND_SWIPE_MISS; + string SUSPEND_CYCLE; + int SWIPE_HITRANGE; + int SWIPE_RANGE; + + ElementalEarth1() + { + AS_SUMMON_TELE_CHECK = 1; + ANIM_IDLE = "idle1"; + ANIM_WALK = "idle1"; + ANIM_RUN = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "die1"; + NPC_NO_ATTACK = 1; + ANIM_SEARCH = "dunno"; + ELEMENTAL_EXP = 300; + NPC_GIVE_EXP = ELEMENTAL_EXP; + MOVE_FAST = 100; + MOVE_NORMAL = 50; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + ELEMENTAL_MOVERANGE = 2048; + ATTACK_RANGE = ELEMENTAL_MOVERANGE; + ATTACK_HITRANGE = ELEMENTAL_MOVERANGE; + ATTACK_MOVERANGE = ELEMENTAL_MOVERANGE; + SOUND_DEATH = "garg/gar_die1.wav"; + NPC_MATERIAL_TYPE = "stone"; + NPC_USE_FLINCH = 1; + ANIM_FLINCH = "flinch"; + NPC_PITCH_FLINCH = 60; + SOUND_FLINCH1 = "debris/bustflesh2.wav"; + SOUND_FLINCH2 = "agrunt/ag_pain1.wav"; + SOUND_FLINCH3 = "agrunt/ag_pain4.wav"; + NPC_USE_PAIN = 1; + NPC_PITCH_PAIN = 60; + SOUND_PAIN1 = "debris/bustflesh2.wav"; + SOUND_PAIN2 = "agrunt/ag_pain1.wav"; + SOUND_PAIN3 = "agrunt/ag_pain4.wav"; + NPC_USE_IDLE = 1; + NPC_PITCH_IDLE = 60; + SOUND_IDLE1 = "agrunt/ag_alert1.wav"; + SOUND_IDLE2 = "agrunt/ag_die1.wav"; + SOUND_IDLE3 = "agrunt/ag_idle1.wav"; + ELEMENTAL_LEVEL = 1; + SWIPE_RANGE = 100; + SWIPE_HITRANGE = 150; + SOUND_ALERT = "agrunt/ag_alert5.wav"; + PITCH_LEVEL = 60; + SOUND_SWIPE_MISS = "weapons/debris1.wav"; + SOUND_SWIPE_HIT = "weapons/cbar_hitbod1.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + SOUND_EARTHQUAKE_START = "magic/volcano_start.wav"; + SOUND_EARTHQUAKE_LOOP = "magic/volcano_loop.wav"; + FREQ_ROCK = 3.0; + FREQ_FISSURE = Random(8.0, 12.0); + FREQ_LONG = Random(20.0, 30.0); + NUM_LONGS = 1; + SHIELD_DURATION = 10.0; + EARTHQUAKE_DURATION = 10.0; + EARTHQUAKE_AOE = 512; + HITCHANCE_SWIPE = 80; + DMG_SWIPE = RandomInt(60, 100); + DMG_ROCK = RandomInt(150, 200); + DMG_FISSURE = RandomInt(60, 100); + DMG_STORM = RandomInt(75, 150); + DOT_EARTHQUAKE = 100; + FISSURE_LENGTH = 768; + ANIM_TOCHARGE = "tocharge"; + ANIM_CHARGEIDLE = "charging"; + ANIM_FROMCHARGE = "fromcharge"; + ANIM_ALERT = "yes"; + ANIM_ROCK = "no"; + ANIM_FIRE_BALL = "fireball"; + ANIM_QUICKBLOCK = "block"; + } + + void game_precache() + { + Precache("rockgibs.mdl"); + Precache("rain_ripple.spr"); + Precache("monsters/elemental_earth_cl"); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_SHOCK1 + EmitSound(0, 0, SOUND_SHOCK1); + // svplaysound: svplaysound 0 0 SOUND_SHOCK2 + EmitSound(0, 0, SOUND_SHOCK2); + // svplaysound: svplaysound 0 0 SOUND_SHOCK3 + EmitSound(0, 0, SOUND_SHOCK3); + // svplaysound: svplaysound 0 0 weapons/debris1.wav + EmitSound(0, 0, "weapons/debris1.wav"); + // svplaysound: svplaysound 0 0 SOUND_EARTHQUAKE_START + EmitSound(0, 0, SOUND_EARTHQUAKE_START); + // svplaysound: svplaysound 0 0 SOUND_EARTHQUAKE_LOOP + EmitSound(0, 0, SOUND_EARTHQUAKE_LOOP); + } + + void OnSpawn() override + { + elemental_spawn(); + } + + void elemental_spawn() + { + SetName("Earth Elemental"); + SetModel("monsters/elementals_lesser.mdl"); + SetHealth(500); + SetWidth(32); + SetHeight(96); + SetRace("demon"); + SetBloodType("none"); + IS_BLOODLESS = 1; + IMMUNE_VAMPIRE = 1; + IS_UNHOLY = 1; + SetDamageResistance("all", 0.30); + SetDamageResistance("holy", 3.0); + SetDamageResistance("poison", 0.0); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(5); + SetModelBody(0, 3); + } + + void npc_targetsighted() + { + float L_GAME_TIME = GetGameTime(); + if (!(L_GAME_TIME > NEXT_ACTION)) return; + if ((SUSPEND_AI)) return; + if (!(DID_ALERT)) + { + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + PlayAnim("critical", ANIM_ALERT); + DID_ALERT = 1; + NEXT_ACTION = L_GAME_TIME; + NEXT_ACTION += 0.5; + int EXIT_SUB = 1; + ATTACK_CYCLE = 0; + NEXT_ROCK = L_GAME_TIME; + NEXT_ROCK += FREQ_ROCK; + NEXT_FISSURE = L_GAME_TIME; + NEXT_FISSURE += FREQ_FISSURE; + NEXT_LONG = L_GAME_TIME; + NEXT_LONG += FREQ_LONG; + } + if ((EXIT_SUB)) return; + if ((I_R_FROZEN)) return; + if ((SUSPEND_CYCLE)) return; + if (L_GAME_TIME > NEXT_LONG) + { + if (GetEntityRange(m_hAttackTarget) < 640) + { + } + DID_SPECIAL = 1; + if (LONG_SELECT >= NUM_LONGS) + { + LONG_SELECT = 0; + } + LONG_SELECT += 1; + NEXT_LONG = L_GAME_TIME; + NEXT_LONG += FREQ_LONG; + if (LONG_SELECT == 1) + { + NEXT_ACTION = L_GAME_TIME; + NEXT_ACTION += 1.0; + do_shield(); + int EXIT_SUB = 1; + } + else + { + if (LONG_SELECT == 2) + { + do_earthquake(); + int EXIT_SUB = 1; + } + else + { + if (LONG_SELECT == 3) + { + NEXT_ACTION = L_GAME_TIME; + NEXT_ACTION += 1.0; + do_storm(); + int EXIT_SUB = 1; + } + } + } + } + if ((EXIT_SUB)) return; + if (L_GAME_TIME > NEXT_FISSURE) + { + if (GetEntityRange(m_hAttackTarget) < 640) + { + } + NEXT_FISSURE = L_GAME_TIME; + NEXT_FISSURE += FREQ_FISSURE; + NEXT_ACTION = L_GAME_TIME; + NEXT_ACTION += 4.0; + NEXT_ROCK = L_GAME_TIME; + NEXT_ROCK += 5.0; + PlayAnim("critical", ANIM_FIRE_BALL); + DID_SPECIAL = 1; + do_fissure(); + } + if ((EXIT_SUB)) return; + if (L_GAME_TIME > NEXT_ROCK) + { + PlayAnim("critical", ANIM_ROCK); + summon_rock(GetEntityOrigin(m_hAttackTarget)); + NEXT_ROCK = L_GAME_TIME; + NEXT_ROCK += FREQ_ROCK; + DID_SPECIAL = 1; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetEntityRange(m_hAttackTarget) < SWIPE_RANGE) + { + if ((DID_SPECIAL)) + { + } + NEXT_ROCK = L_GAME_TIME; + NEXT_ROCK += FREQ_ROCK; + PlayAnim("once", ANIM_ATTACK); + } + } + + void attack1_strike() + { + if (RandomInt(1, 3) == 1) + { + DID_SPECIAL = 0; + } + XDoDamage(m_hAttackTarget, SWIPE_HITRANGE, DMG_SWIPE, HITCHANCE_SWIPE, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:swipe"); + } + + void swipe_dodamage() + { + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_SWIPE_MISS, 10); + } + if (!(param1)) return; + EmitSound(GetOwner(), 0, SOUND_SWIPE_HIT, 10); + if (!(GetRelationship(param2) == "enemy")) return; + if (!(RandomInt(1, 3) == 1)) return; + if (ELEMENTAL_LEVEL == 1) + { + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + else + { + ApplyEffect(param2, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + } + } + + void summon_rock() + { + string L_POS = param1; + string L_TRACE_START = L_POS; + string L_TRACE_END = L_POS; + L_TRACE_END += "z"; + string L_TRACE = TraceLine(L_TRACE_START, L_TRACE_END); + string L_POS = L_TRACE; + if (L_TRACE != L_TRACE_END) + { + L_POS += "z"; + } + ClientEvent("new", "all", "monsters/elemental_earth_cl", GetEntityIndex(GetOwner()), "spawn_rock", L_POS); + string L_GROUND = /* TODO: $get_ground_height */ $get_ground_height(L_POS); + string L_DROP_DIST = (L_GROUND - (L_POS).z); + if (L_DROP_DIST < 0) + { + string L_DROP_DIST = /* TODO: $neg */ $neg(L_DROP_DIST); + } + string L_DROP_TIME = (L_DROP_DIST / 600); + L_DROP_TIME += 2; + ROCK_STRIKE_POS = Vector3((L_POS).x, (L_POS).y, L_GROUND); + L_DROP_TIME("ext_mob_clreturn"); + } + + void ext_mob_clreturn() + { + string L_GIB_POS = ROCK_STRIKE_POS; + L_GIB_POS = "z"; + L_GIB_POS += "z"; + Effect("tempent", "gibs", "rockgibs.mdl", ROCK_STRIKE_POS, 10.0, /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, 300)), 50, 100, 5); + Effect("screenshake", ROCK_STRIKE_POS, 100, 5, 3, 500); + BURST_POS = ROCK_STRIKE_POS; + XDoDamage(ROCK_STRIKE_POS, 128, DMG_ROCK, 0.1, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:rock"); + } + + void rock_dodamage() + { + if (!(ELEMENTAL_LEVEL > 1)) return; + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + string CUR_TARG = param2; + repel_target(CUR_TARG, Vector3(0, 500, 110), BURST_POS); + } + + void repel_target() + { + string L_TARG_ORG = GetEntityOrigin(param1); + string L_MY_ORG = param3; + string L_TARG_ANG = /* TODO: $angles */ $angles(L_MY_ORG, L_TARG_ORG); + string L_NEW_YAW = L_TARG_ANG; + SetVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, L_NEW_YAW, 0), param2)); + } + + void OnDamage(int damage) override + { + if ((param3).findFirst("lightning") >= 0) + { + SetDamage("dmg"); + SetDamage("hit"); + ReturnData(0); + if (GetRelationship(param1) == "enemy") + { + } + int L_RND_SND = RandomInt(1, 3); + if (L_RND_SND == 1) + { + EmitSound3D(SOUND_SHOCK1, 10, GetEntityOrigin(param1)); + } + else + { + if (L_RND_SND == 2) + { + EmitSound3D(SOUND_SHOCK2, 10, GetEntityOrigin(param1)); + } + else + { + if (L_RND_SND == 3) + { + EmitSound3D(SOUND_SHOCK3, 10, GetEntityOrigin(param1)); + } + } + } + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (GetGameTime() > NEXT_SHOCK_MSG) + { + SendPlayerMessage(param1, GetEntityName(GetOwner()) + " redirects your electrical attacks!"); + NEXT_SHOCK_MSG = GetGameTime(); + NEXT_SHOCK_MSG += 5.0; + } + XDoDamage(param1, 1024, param2, 1.0, GetOwner(), GetOwner(), "lightning_effect", "dmgevent:zap"); + if (GetGameTime() > NEXT_BEAM) + { + } + NEXT_BEAM = GetGameTime(); + NEXT_BEAM += 0.5; + if (ELEMENTAL_LEVEL > 1) + { + HealEntity(GetOwner(), param2); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 22, 0.5, 0.25); + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SHIELD_ACTIVE)) return; + if (!((param3).findFirst("effect") >= 0)) return; + string L_ATK_ORG = GetEntityOrigin(param1); + string L_MY_ORG = GetEntityOrigin(GetOwner()); + string L_MY_ANG = GetEntityAngles(GetOwner()); + if ((WithinCone2D(L_ATK_ORG, L_MY_ORG, L_MY_ANG))) + { + SetDamage("dmg"); + SetDamage("hit"); + ReturnData(0); + int L_BLOCKED = 1; + } + if (!(L_BLOCKED)) return; + if (GetGameTime() > NEXT_SHIELD_HITFX) + { + NEXT_SHIELD_HITFX = GetGameTime(); + NEXT_SHIELD_HITFX += 0.1; + ClientEvent("update", "all", CL_SHIELD_IDX, "shield_hit"); + EmitSound(GetOwner(), 2, "player/pl_metal2.wav", 10); + SendColoredMessage(param1, GetEntityName(GetOwner()) + " blocks your attack."); + } + } + + void zap_dodamage() + { + if (!(param1)) return; + Effect("beam", "end", "lgtning.spr", 30, GetEntityOrigin(param2), GetOwner(), 0, Vector3(128, 128, 255), 200, 10, 0.5); + } + + void do_fissure() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 4.0; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -1000, 0)); + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(0.5, "do_fissure2"); + } + + void do_fissure2() + { + LogDebug("attack1_strike"); + string L_MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + string L_FISSURE_END = GetEntityOrigin(GetOwner()); + L_FISSURE_END += /* TODO: $relpos */ $relpos(Vector3(0, L_MY_YAW, 0), Vector3(0, FISSURE_LENGTH, 0)); + ClientEvent("new", "all", "effects/sfx_fissure", GetEntityOrigin(GetOwner()), L_MY_YAW, L_FISSURE_END, FISSURE_LENGTH, 0, 1); + FISSURE_ORG = GetEntityOrigin(GetOwner()); + FISSURE_ANG = GetEntityAngles(GetOwner()); + FISSURE_DIR = (L_FISSURE_END - FISSURE_ORG).Normalize(); + FISSURE_MOVESTEP = (FISSURE_LENGTH * 0.1); + FISSURE_COUNT = 0; + fissure_travel_loop(); + } + + void fissure_travel_loop() + { + FISSURE_COUNT += 1; + string L_FISSURE_CHECK_POS = FISSURE_ORG; + string L_FISSURE_MOVEAMT = FISSURE_DIR; + L_FISSURE_MOVEAMT *= (FISSURE_MOVESTEP * FISSURE_COUNT); + L_FISSURE_CHECK_POS += L_FISSURE_MOVEAMT; + L_FISSURE_CHECK_POS += "z"; + L_FISSURE_CHECK_POS = "z"; + FISSURE_CHECK_POS = L_FISSURE_CHECK_POS; + XDoDamage(L_FISSURE_CHECK_POS, FISSURE_MOVESTEP, 0, 0, GetOwner(), GetOwner(), "none", "target", "dmgevent:fissure"); + if (FISSURE_COUNT < 7) + { + ScheduleDelayedEvent(0.20, "fissure_travel_loop"); + } + if ((G_DEVELOPER_MODE)) + { + string L_VEC_UP = L_FISSURE_CHECK_POS; + L_VEC_UP += "z"; + Effect("beam", "point", "lgtning.spr", 10, L_FISSURE_CHECK_POS, L_VEC_UP, Vector3(255, 0, 255), 255, 0, 0.25); + } + EmitSound3D("weapons/debris1.wav", 10, L_FISSURE_CHECK_POS, 0.8, 0, 30); + } + + void fissure_dodamage() + { + if (!(param1)) return; + string CUR_TARG = param2; + string CUR_TARG_POS = GetEntityOrigin(CUR_TARG); + string L_MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(FISSURE_ANG); + int L_RND_LR = RandomInt(0, 1); + int L_LR = -400; + if (L_RND_LR == 1) + { + int L_LR = 400; + } + Vector3 L_VEL = Vector3(L_LR, 0, 400); + string CUR_TARG_ANGS = GetEntityAngles(CUR_TARG); + SetVelocity(param2, /* TODO: $relvel */ $relvel(FISSURE_ANG, L_VEL)); + if (!(GetRelationship(GetOwner()) == "enemy")) return; + ApplyEffect(CUR_TARG, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + string L_DMG = DMG_ROCK; + if ((GetEntityProperty(CUR_TARG, "nopush"))) + { + L_DMG *= 5; + } + XDoDamage(CUR_TARG, "direct", L_DMG, 1.0, GetOwner(), GetOwner(), "none", "blunt_effect"); + } + + void func_inrange() + { + if (param1 >= (param2 - param3)) + { + int L_IN_RANGE = 1; + } + if (param1 <= (param2 + param3)) + { + L_IN_RANGE += 1; + } + if (L_IN_RANGE > 1) + { + return; + } + else + { + return; + } + } + + void do_shield() + { + SHIELD_TARGET = m_hAttackTarget; + SHIELD_ACTIVE = 1; + SHIELD_DURATION("end_shield"); + if (ELEMENTAL_LEVEL == 1) + { + npcatk_suspend_movement(ANIM_CHARGEIDLE); + SUSPEND_CYCLE = 1; + shield_loop(); + } + else + { + PlayAnim("critical", ANIM_TOCHARGE); + } + Effect("glow", GetOwner(), Vector3(255, 255, 255), 16, 2, 1); + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + ClientEvent("new", "all", "monsters/elemental_earth_cl", GetEntityIndex(GetOwner()), "do_shield", SHIELD_DURATION); + CL_SHIELD_IDX = "game.script.last_sent_id"; + } + + void shield_loop() + { + if (!(SHIELD_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "shield_loop"); + SetMoveDest(SHIELD_TARGET); + } + + void npc_targetvalidate() + { + if (!(SHIELD_ACTIVE)) return; + if (!(m_hAttackTarget != SHIELD_TARGET)) return; + NPCATK_TARGET = SHIELD_TARGET; + } + + void end_shield() + { + if (ELEMENTAL_LEVEL == 1) + { + npcatk_resume_movement(); + SUSPEND_CYCLE = 0; + } + SHIELD_ACTIVE = 0; + } + + void do_storm() + { + PlayAnim("once", ANIM_ALERT); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + SpawnNPC("monsters/summon/rock_storm", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 4, DMG_STORM, 64, 100 + } + + void do_earthquake() + { + ATTACK_MOVERANGE = 9999; + EARTHQUAKE_ACTIVE = 1; + npcatk_suspend_movement(ANIM_CHARGEIDLE); + SUSPEND_CYCLE = 1; + // svplaysound: svplaysound 1 10 SOUND_EARTHQUAKE_START 0.8 PITCH_LEVEL + EmitSound(1, 10, SOUND_EARTHQUAKE_START, 0.8, PITCH_LEVEL); + // svplaysound: svplaysound 3 10 SOUND_EARTHQUAKE_LOOP 0.8 PITCH_LEVEL + EmitSound(3, 10, SOUND_EARTHQUAKE_LOOP, 0.8, PITCH_LEVEL); + EARTHQUAKE_DURATION("earthquake_end"); + ScheduleDelayedEvent(0.1, "earthquake_loop"); + Effect("screenshake", GetEntityOrigin(GetOwner()), 50, 10, EARTHQUAKE_DURATION, (EARTHQUAKE_AOE * 1.5)); + ClientEvent("new", "all", "effects/sfx_quake", GetEntityIndex(GetOwner()), 1, EARTHQUAKE_AOE, EARTHQUAKE_DURATION); + } + + void earthquake_loop() + { + if (!(EARTHQUAKE_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "earthquake_loop"); + EARTHQUAKE_TARGS = FindEntitiesInSphere("enemy", EARTHQUAKE_AOE); + if (!(EARTHQUAKE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(EARTHQUAKE_TARGS, ";"); i++) + { + earthquake_applyeffect(); + } + } + + void earthquake_applyeffect() + { + string CUR_TARG = GetToken(EARTHQUAKE_TARGS, i, ";"); + if (!(IsOnGround(CUR_TARG))) return; + ApplyEffect(CUR_TARG, "effects/effect_quake", EARTHQUAKE_DURATION, GetEntityIndex(GetOwner()), EARTHQUAKE_AOE, DOT_EARTHQUAKE, GetEntityIndex(GetOwner()), 1); + } + + void earthquake_end() + { + ATTACK_MOVERANGE = ELEMENTAL_MOVERANGE; + // svplaysound: svplaysound 3 0 SOUND_EARTHQUAKE_LOOP + EmitSound(3, 0, SOUND_EARTHQUAKE_LOOP); + EARTHQUAKE_ACTIVE = 0; + npcatk_resume_movement(); + SUSPEND_CYCLE = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_earth2.as b/scripts/angelscript/monsters/elemental_earth2.as new file mode 100644 index 00000000..5d86e3a8 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_earth2.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "monsters/elemental_earth1.as" + +namespace MS +{ + +class ElementalEarth2 : CGameScript +{ + int DMG_FISSURE; + int DMG_ROCK; + int DMG_STORM; + int DMG_SWIPE; + int DOT_EARTHQUAKE; + int ELEMENTAL_EXP; + int ELEMENTAL_LEVEL; + int ELEMENTAL_MOVERANGE; + int HITCHANCE_SWIPE; + int IMMUNE_VAMPIRE; + int IS_BLOODLESS; + int IS_UNHOLY; + int NUM_LONGS; + float SHIELD_DURATION; + + ElementalEarth2() + { + ELEMENTAL_LEVEL = 2; + NUM_LONGS = 3; + ELEMENTAL_EXP = 1000; + HITCHANCE_SWIPE = 90; + DMG_SWIPE = RandomInt(200, 400); + DMG_ROCK = RandomInt(250, 800); + DMG_FISSURE = RandomInt(200, 400); + DMG_STORM = RandomInt(400, 800); + DOT_EARTHQUAKE = 100; + SHIELD_DURATION = 20.0; + ELEMENTAL_MOVERANGE = 256; + } + + void elemental_spawn() + { + SetName("Greater Earth Elemental"); + SetModel("monsters/elementals_greater.mdl"); + SetHealth(2500); + SetWidth(32); + SetHeight(48); + SetRace("demon"); + SetBloodType("none"); + IS_BLOODLESS = 1; + IMMUNE_VAMPIRE = 1; + IS_UNHOLY = 1; + SetDamageResistance("all", 0.25); + SetDamageResistance("holy", 3.0); + SetDamageResistance("poison", 0.0); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(5); + SetModelBody(0, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_earth3.as b/scripts/angelscript/monsters/elemental_earth3.as new file mode 100644 index 00000000..5f32f6fe --- /dev/null +++ b/scripts/angelscript/monsters/elemental_earth3.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "minibosses/titan.as" + +namespace MS +{ + +class ElementalEarth3 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/elemental_earth_cl.as b/scripts/angelscript/monsters/elemental_earth_cl.as new file mode 100644 index 00000000..38005cc0 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_earth_cl.as @@ -0,0 +1,192 @@ +#pragma context server + +namespace MS +{ + +class ElementalEarthCl : CGameScript +{ + string FX_ACTIVE; + string FX_OWNER; + string FX_POS; + string FX_SHIELD_COLOR; + float FX_SHIELD_DURATION; + float FX_SHIELD_SCALE; + string FX_SHIELD_SPRITE; + int FX_SHIELD_SPRITE_FRAMES; + string FX_SHIELD_YAW; + string ROCK_FALLING; + string ROCK_START; + string SOUND_SPAWN; + + ElementalEarthCl() + { + SOUND_SPAWN = "magic/energy1_loud.wav"; + FX_SHIELD_SPRITE = "rain_ripple.spr"; + FX_SHIELD_SPRITE_FRAMES = 15; + FX_SHIELD_COLOR = Vector3(255, 255, 255); + FX_SHIELD_SCALE = 2.5; + FX_SHIELD_DURATION = 1.0; + } + + void client_activate() + { + FX_OWNER = param1; + if (param2 == "spawn_rock") + { + FX_POS = param3; + FX_ACTIVE = 1; + ROCK_START = GetGameTime(); + ClientEffect("tempent", "model", "weapons/projectiles.mdl", FX_POS, "setup_rock", "update_rock", "collide_rock"); + ClientEffect("tempent", "model", "weapons/projectiles.mdl", FX_POS, "setup_burst", "update_burst"); + EmitSound3D(SOUND_SPAWN, 10, FX_POS); + ScheduleDelayedEvent(10.0, "end_fx"); + } + if (param2 == "do_shield") + { + FX_ACTIVE = 1; + shield_hit(); + PARAM3("end_fx"); + } + } + + void setup_burst() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "scale", 0.01); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "velocity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 50); + ClientEffect("tempent", "set_current_prop", "body", 54); + ClientEffect("tempent", "set_current_prop", "sequence", 6); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "color", Vector3(0, 64, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(180, 0, 0)); + string L_ROCK_START = (ROCK_START + 1); + ClientEffect("tempent", "set_current_prop", "fuser1", L_ROCK_START); + } + + void update_burst() + { + if (!(FX_ACTIVE)) return; + float CUR_STEP = GetGameTime(); + CUR_STEP -= "game.tempent.fuser1"; + if (CUR_STEP < 0.5) + { + string CUR_SCALE = /* TODO: $ratio */ $ratio(CUR_STEP, 0.01, 1.0); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + else + { + if (CUR_STEP < 1.0) + { + string L_REND = /* TODO: $ratio */ $ratio(CUR_STEP, 512, 0); + ClientEffect("tempent", "set_current_prop", "renderamt", L_REND); + } + } + } + + void setup_rock() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "scale", 1.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "velocity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 50); + ClientEffect("tempent", "set_current_prop", "body", 5); + ClientEffect("tempent", "set_current_prop", "sequence", 6); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + ClientEffect("tempent", "set_current_prop", "bounce", 0); + string L_ROCK_START = (ROCK_START + 1); + ClientEffect("tempent", "set_current_prop", "fuser1", L_ROCK_START); + } + + void update_rock() + { + if (!(FX_ACTIVE)) return; + if ((ROCK_FALLING)) return; + float CUR_STEP = GetGameTime(); + CUR_STEP -= "game.tempent.fuser1"; + if (CUR_STEP < 1.0) + { + string CUR_REND = /* TODO: $ratio */ $ratio(CUR_STEP, 0, 255); + int CUR_REND = int(CUR_REND); + ClientEffect("tempent", "set_current_prop", "renderamt", CUR_REND); + } + else + { + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, -600)); + ROCK_FALLING = 1; + } + } + + void collide_rock() + { + EmitSound3D("fire.wav", 10, "game.tempent.origin"); + ScheduleDelayedEvent(1.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void shield_hit() + { + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string L_OWNER_ANGS = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + FX_SHIELD_YAW = /* TODO: $vec.yaw */ $vec.yaw(L_OWNER_ANGS); + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, FX_SHIELD_YAW, 0), Vector3(0, 32, 64)); + ClientEffect("tempent", "sprite", FX_SHIELD_SPRITE, L_POS, "setup_shield"); + ClientEffect("tempent", "sprite", FX_SHIELD_SPRITE, L_POS, "setup_shield_negyaw"); + } + + void setup_shield() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_SHIELD_DURATION); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_SHIELD_COLOR); + ClientEffect("tempent", "set_current_prop", "scale", FX_SHIELD_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, FX_SHIELD_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", FX_SHIELD_SPRITE_FRAMES); + } + + void setup_shield_negyaw() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_SHIELD_DURATION); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_SHIELD_COLOR); + ClientEffect("tempent", "set_current_prop", "scale", FX_SHIELD_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string NEG_YAW = FX_SHIELD_YAW; + NEG_YAW += 180; + if (NEG_YAW > 359.99) + { + NEG_YAW -= 359.99; + } + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, NEG_YAW, 0)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", FX_SHIELD_SPRITE_FRAMES); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_fire1.as b/scripts/angelscript/monsters/elemental_fire1.as new file mode 100644 index 00000000..3a7294b0 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_fire1.as @@ -0,0 +1,379 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class ElementalFire1 : CGameScript +{ + int AIM_RATIO; + int AM_SUMMONED; + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_CHARGEIDLE; + string ANIM_DEATH; + string ANIM_FIRE_BALL; + string ANIM_FLINCH; + string ANIM_FROMCHARGE; + string ANIM_GLOAT; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_TOCHARGE; + string ANIM_WALK; + int AS_SUMMON_TELE_CHECK; + int ATTACK_CONE_OF_FIRE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int CAN_FLINCH; + float CIRCLE_DURATION; + int CIRCLE_RANGE; + int COF_ACTIVE; + int DMG_FIRE_BALL; + int DMG_SEAL; + int DMG_SWIPE; + int DOT_FIRE; + int FIREBALL_PREPPED; + string FIRE_BALL_AMMO; + int FIRE_BALL_RANGE; + string FLINCH_ANIM; + int FLINCH_CHANCE; + int FLINCH_DELAY; + int FLINCH_DMG_REQ; + float FREQ_CIRCLE; + float FREQ_FIRE_BALL; + int FULL_FIRE_BALL_AMMO; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int LIGHT_RAD; + int MOVE_FAST; + int MOVE_NORMAL; + string MY_HURT_STAGE; + string MY_OWNER; + string NEXT_CIRCLE; + string NEXT_FIRE_BALL; + int NO_SPAWN_STUCK_CHECK; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string PROJ_SCRIPT; + string RAND_IDLE_ANIMS; + string SOUND_ALERT; + string SOUND_CIRCLE_READY; + string SOUND_DEATH; + string SOUND_FIRECHARGE; + string SOUND_FIRESHOOT; + string SOUND_GLOAT; + string SOUND_HOVER; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN0; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SWIPE; + string SOUND_SWIPEHIT; + int SWIPE_ATTACK; + int SWIPE_MOVERANGE; + + ElementalFire1() + { + AS_SUMMON_TELE_CHECK = 1; + ANIM_IDLE = "idle1"; + ANIM_WALK = "idle1"; + ANIM_RUN = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_FLINCH = "flinch"; + ANIM_DEATH = "die1"; + ANIM_TOCHARGE = "tocharge"; + ANIM_CHARGEIDLE = "charging"; + ANIM_FROMCHARGE = "fromcharge"; + ANIM_FIRE_BALL = "fireball"; + ANIM_SWIPE = "attack1"; + ANIM_ALERT = "yes"; + ANIM_GLOAT = "no"; + ANIM_SEARCH = "dunno"; + NPC_GIVE_EXP = 200; + CAN_FLINCH = 1; + FLINCH_CHANCE = 10; + FLINCH_ANIM = "flinch"; + FLINCH_DELAY = 1; + FLINCH_DMG_REQ = 30; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 150; + ATTACK_MOVERANGE = 65; + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + SWIPE_MOVERANGE = 65; + RAND_IDLE_ANIMS = "idle1;idle2;dunno"; + LIGHT_RAD = 196; + CIRCLE_RANGE = 128; + FREQ_CIRCLE = 15.0; + CIRCLE_DURATION = 8.0; + ATTACK_HITCHANCE = 0.8; + PROJ_SCRIPT = "proj_fire_ball"; + FIRE_BALL_RANGE = 2000; + FULL_FIRE_BALL_AMMO = 3; + AIM_RATIO = 50; + ATTACK_CONE_OF_FIRE = 2; + ATTACK_SPEED = 500; + DOT_FIRE = RandomInt(10, 30); + DMG_SEAL = 200; + DMG_FIRE_BALL = RandomInt(50, 100); + DMG_SWIPE = RandomInt(20, 50); + FREQ_FIRE_BALL = 0.5; + SOUND_ALERT = "agrunt/ag_alert5.wav"; + SOUND_IDLE1 = "agrunt/ag_alert1.wav"; + SOUND_IDLE2 = "agrunt/ag_die1.wav"; + SOUND_IDLE3 = "agrunt/ag_idle1.wav"; + SOUND_SWIPE = "weapons/debris1.wav"; + SOUND_SWIPEHIT = "ambience/steamburst1.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_PAIN0 = "debris/bustflesh2.wav"; + SOUND_PAIN1 = "agrunt/ag_pain1.wav"; + SOUND_PAIN2 = "agrunt/ag_pain4.wav"; + SOUND_GLOAT = "x/x_laugh1.wav"; + SOUND_FIRECHARGE = "magic/fireball_powerup.wav"; + SOUND_FIRESHOOT = "magic/fireball_strike.wav"; + SOUND_CIRCLE_READY = "debris/beamstart1.wav"; + SOUND_HOVER = "fans/fan4on.wav"; + if ((IsEntityAlive(GetOwner()))) + { + } + // svplaysound: svplaysound 1 8 SOUND_HOVER + EmitSound(1, 8, SOUND_HOVER); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(5, 15)); + if ((IsEntityAlive(GetOwner()))) + { + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((m_hAttackTarget).findFirst("unset") >= 0) + { + } + int RND_PICK = RandomInt(0, 2); + string RND_ANIM = GetToken(RAND_IDLE_ANIMS, RND_PICK, ";"); + PlayAnim("critical", RND_ANIM); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(15.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 128, 64), LIGHT_RAD, 15.0); + } + + void OnSpawn() override + { + SetName("Fire Elemental"); + SetModel("monsters/elementals_lesser.mdl"); + SetHealth(500); + SetWidth(32); + SetHeight(48); + SetRace("demon"); + SetDamageResistance("holy", 2.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("poison", 0.0); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(5); + FIRE_BALL_AMMO = FULL_FIRE_BALL_AMMO; + SetBloodType("none"); + IMMUNE_VAMPIRE = 1; + IS_UNHOLY = 1; + MY_HURT_STAGE = GetEntityMaxHealth(GetOwner()); + MY_HURT_STAGE *= 0.5; + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 128, 64), LIGHT_RAD, 15.0); + } + + void cycle_up() + { + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + PlayAnim("once", ANIM_ALERT); + NEXT_CIRCLE = GetGameTime(); + NEXT_CIRCLE += FREQ_CIRCLE; + } + + void npc_targetsighted() + { + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_RANGE)) return; + if (!(FIRE_BALL_AMMO > 0)) return; + if (!(FIREBALL_PREPPED)) + { + EmitSound(GetOwner(), 0, SOUND_FIRECHARGE, 10); + } + FIREBALL_PREPPED = 1; + PlayAnim("once", ANIM_FIRE_BALL); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (FIRE_BALL_AMMO > 0) + { + ATTACK_MOVERANGE = 512; + } + else + { + ATTACK_MOVERANGE = SWIPE_MOVERANGE; + } + if (!(m_hAttackTarget != "unset")) return; + if (GetGameTime() > NEXT_CIRCLE) + { + ATTACK_MOVERANGE = SWIPE_MOVERANGE; + if (GetEntityRange(m_hAttackTarget) < CIRCLE_RANGE) + { + } + NEXT_CIRCLE = GetGameTime(); + NEXT_CIRCLE += FREQ_CIRCLE; + do_cof(); + } + } + + void throw_fireball() + { + FIREBALL_PREPPED = 0; + FIRE_BALL_AMMO -= 1; + EmitSound(GetOwner(), 0, SOUND_FIRESHOOT, 10); + string AIM_ANGLE = GetEntityDist(m_hAttackTarget); + LogDebug("throw_fireball AIM_ANGLE"); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + TossProjectile(PROJ_SCRIPT, /* TODO: $relpos */ $relpos(0, 48, 24), "none", ATTACK_SPEED, DMG_FIRE_BALL, ATTACK_CONE_OF_FIRE, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "lighten", DOT_FIRE); + NEXT_FIRE_BALL = GetGameTime(); + NEXT_FIRE_BALL += FREQ_FIRE_BALL; + } + + void attack1_strike() + { + SWIPE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, 0.9, "blunt"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + if (MY_HEALTH >= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HEALTH <= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (param1 > 20) + { + if (MY_HEALTH > 0) + { + } + AddVelocity(GetOwner(), /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(Random(-100, 100), -500, 0))); + } + if (!(GetEntityRange(m_hLastStruck) < MOVE_RANGE)) return; + ApplyEffect(m_hLastStruck, "effects/dot_fire", 2, GetEntityIndex(GetOwner()), DOT_FIRE); + } + + void game_dodamage() + { + if ((param1)) + { + if ((SWIPE_ATTACK)) + { + } + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DOT_FIRE); + if ((USE_SWIPE_SOUND)) + { + EmitSound(GetOwner(), 0, SOUND_SWIPEHIT, 10); + } + } + SWIPE_ATTACK = 0; + } + + void game_dynamically_created() + { + MY_OWNER = GetEntityIndex(param1); + if (!(IsEntityAlive(MY_OWNER))) return; + SetRace(GetEntityRace(MY_OWNER)); + AM_SUMMONED = 1; + ScheduleDelayedEvent(0.1, "summoned_sound"); + NO_SPAWN_STUCK_CHECK = 1; + } + + void summoned_sound() + { + EmitSound(GetOwner(), 0, "ambience/alien_humongo.wav", 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // svplaysound: svplaysound 1 0 SOUND_HOVER + EmitSound(1, 0, SOUND_HOVER); + // svplaysound: svplaysound 2 0 weapons/egon_run3.wav + EmitSound(2, 0, "weapons/egon_run3.wav"); + if (!(AM_SUMMONED)) return; + CallExternal(MY_OWNER, "elemental_died"); + } + + void do_cof() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) <= CIRCLE_RANGE)) return; + npcatk_suspend_ai(); + game_stopmoving(); + PlayAnim("critical", ANIM_TOCHARGE); + EmitSound(GetOwner(), 0, SOUND_CIRCLE_READY, 10); + ScheduleDelayedEvent(0.5, "do_cof2"); + } + + void do_cof2() + { + npcatk_suspend_movement(ANIM_CHARGEIDLE); + ClientEvent("new", "all", "effects/sfx_circle_of_fire", GetEntityOrigin(GetOwner()), 64, 1, CIRCLE_DURATION); + // svplaysound: svplaysound 2 10 weapons/egon_run3.wav + EmitSound(2, 10, "weapons/egon_run3.wav"); + COF_ACTIVE = 1; + CIRCLE_DURATION("cof_end"); + do_cof_loop(); + } + + void cof_end() + { + npcatk_resume_ai(); + npcatk_resume_movement(); + EmitSound(GetOwner(), 3, "weapons/egon_off1.wav", 10); + // svplaysound: svplaysound 2 0 weapons/egon_run3.wav + EmitSound(2, 0, "weapons/egon_run3.wav"); + COF_ACTIVE = 0; + FIRE_BALL_AMMO = FULL_FIRE_BALL_AMMO; + } + + void do_cof_loop() + { + if (!(COF_ACTIVE)) return; + if (!(IsEntityAlive(GetOwner()))) return; + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 128, DMG_SEAL, 0, GetOwner(), GetOwner(), "none", "fire_effect"); + ScheduleDelayedEvent(1.0, "do_cof_loop"); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_fire2.as b/scripts/angelscript/monsters/elemental_fire2.as new file mode 100644 index 00000000..afdf18a3 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_fire2.as @@ -0,0 +1,334 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class ElementalFire2 : CGameScript +{ + float ACCURACY_STRIKE; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_PROJECTILE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int AS_SUMMON_TELE_CHECK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BREATH_COUNT; + int CAN_FLINCH; + int CUR_SPELL; + int CYCLES_ON; + int DMG_AMB_BURN; + int DMG_FIRE_BALL; + int DMG_FIRE_BOLT; + int DMG_STRIKE; + int DOT_STRIKE; + string FLINCH_ANIM; + int FLINCH_CHANCE; + float FREQ_SPECIAL; + string HOVER_LOOP_DELAY; + float HURT_THRESHOLD; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int MOVESPEED_FAST; + int MOVESPEED_SLOW; + int MOVE_RANGE; + string MY_HURT_STAGE; + string NEXT_GLOAT; + int NO_SPAWN_STUCK_CHECK; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string NPC_MOVE_DEST; + float PLAYTIME_HOVER; + string SOUND_DEATH; + string SOUND_FIRECHARGE; + string SOUND_FIRESHOOT; + string SOUND_GLOAT; + string SOUND_HOVER; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN0; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SWIPE; + string SOUND_SWIPEHIT; + int STRIKE_ATTACK; + + ElementalFire2() + { + AS_SUMMON_TELE_CHECK = 1; + ANIM_IDLE = "idle1"; + ANIM_WALK = "idle1"; + ANIM_RUN = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_FLINCH = "flinch"; + ANIM_DEATH = "die1"; + CAN_FLINCH = 1; + FLINCH_CHANCE = 10; + FLINCH_ANIM = "flinch"; + ANIM_ATTACK = "attack1"; + ANIM_PROJECTILE = "fireball"; + IS_UNHOLY = 1; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 150; + MOVE_RANGE = 65; + NPC_HACKED_MOVE_SPEED = 100; + MOVESPEED_SLOW = 100; + MOVESPEED_FAST = 200; + DMG_STRIKE = RandomInt(175, 250); + DOT_STRIKE = RandomInt(60, 80); + ACCURACY_STRIKE = 0.8; + DMG_AMB_BURN = RandomInt(30, 60); + FREQ_SPECIAL = 5.0; + DMG_FIRE_BALL = 100; + DMG_FIRE_BOLT = 20; + IMMUNE_VAMPIRE = 1; + SOUND_FIRECHARGE = "magic/fireball_powerup.wav"; + SOUND_FIRESHOOT = "magic/fireball_strike.wav"; + SOUND_IDLE1 = "agrunt/ag_alert1.wav"; + SOUND_IDLE2 = "agrunt/ag_die1.wav"; + SOUND_IDLE3 = "agrunt/ag_idle1.wav"; + SOUND_SWIPE = "weapons/debris1.wav"; + SOUND_SWIPEHIT = "ambience/steamburst1.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_PAIN0 = "debris/bustflesh2.wav"; + SOUND_PAIN1 = "agrunt/ag_pain1.wav"; + SOUND_PAIN2 = "agrunt/ag_pain4.wav"; + SOUND_GLOAT = "x/x_laugh1.wav"; + SOUND_HOVER = "fans/fan4on.wav"; + HURT_THRESHOLD = 0.5; + PLAYTIME_HOVER = 3.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(15.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 0, 0), 196, 15.0); + } + + void game_precache() + { + Precache("monsters/summon/fire_ball_guided"); + Precache("monsters/summon/fire_wave"); + } + + void OnSpawn() override + { + SetName("Greater Fire Elemental"); + SetHealth(2500); + SetWidth(48); + SetHeight(80); + SetRace("demon"); + SetDamageResistance("holy", 2.0); + SetDamageResistance("fire", 0.0); + SetRoam(false); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(5); + SetModel("monsters/elementals_greater.mdl"); + SetModelBody(0, 0); + NPC_GIVE_EXP = 500; + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetBloodType("none"); + MY_HURT_STAGE = GetEntityMaxHealth(GetOwner()); + MY_HURT_STAGE *= HURT_THRESHOLD; + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 0, 0), 196, 15.0); + CUR_SPELL = 0; + } + + void my_target_died() + { + NPC_MOVE_DEST = "unset"; + if (!(GetGameTime() > NEXT_GLOAT)) return; + NEXT_GLOAT = GetGameTime(); + NEXT_GLOAT += FREQ_GLOAT; + PlayAnim("critical", "idle2"); + } + + void game_movingto_dest() + { + if (!(GetGameTime() > HOVER_LOOP_DELAY)) return; + EmitSound(GetOwner(), CHAN_BODY, SOUND_HOVER, 8); + HOVER_LOOP_DELAY = GetGameTime(); + HOVER_LOOP_DELAY += 3.0; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + if (MY_HEALTH >= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HEALTH <= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (param1 > 40) + { + int LR_FLING = 200; + if (RandomInt(1, 2) == 1) + { + string LR_FLING = /* TODO: $neg */ $neg(LR_FLING); + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(LR_FLING, 0, 0)); + } + } + + void attack1_strike() + { + STRIKE_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_STRIKE, ACCURACY_STRIKE); + } + + void game_dodamage() + { + if ((param1)) + { + if ((STRIKE_ATTACK)) + { + } + STRIKE_ATTACK = 0; + ApplyEffect(param2, "effects/dot_fire", 3, GetEntityIndex(GetOwner()), DOT_STRIKE); + } + } + + void OnDamage(int damage) override + { + if (!(GetEntityRange(param1) < ATTACK_RANGE)) return; + ApplyEffect(param1, "effects/dot_fire", 2, GetEntityIndex(GetOwner()), DOT_AMB_BURN); + } + + void cycle_up() + { + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + FREQ_SPECIAL("pick_spell"); + } + + void do_fire_ball() + { + if (!(false)) return; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_PROJECTILE); + ScheduleDelayedEvent(0.5, "do_fire_ball1"); + ScheduleDelayedEvent(0.7, "do_fire_ball2"); + } + + void do_fire_ball1() + { + SpawnNPC("monsters/summon/fire_ball_guided", /* TODO: $relpos */ $relpos(-32, 0, 64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_FIRE_BALL, 10.0, 200 + } + + void do_fire_ball2() + { + SpawnNPC("monsters/summon/fire_ball_guided", /* TODO: $relpos */ $relpos(32, 0, 64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_FIRE_BALL, 10.0, 200 + } + + void do_fire_wave() + { + if (!(CYCLED_UP)) return; + SetMoveDest(m_hAttackTarget); + npcatk_suspend_ai(1.0); + PlayAnim("critical", "block"); + ScheduleDelayedEvent(0.5, "do_fire_wave2"); + } + + void do_fire_wave2() + { + SpawnNPC("monsters/summon/fire_wave", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 100, 100, 5 + } + + void idle_sounds() + { + float NEXT_SOUND = Random(5, 15); + NEXT_SOUND("idle_sounds"); + if (!(m_hAttackTarget == "unset")) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void do_fire_breath() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + npcatk_suspend_ai(); + SetMoveAnim("charging"); + SetIdleAnim("charging"); + PlayAnim("critical", "charging"); + BREATH_COUNT = 0; + do_fire_breath_loop(); + } + + void do_fire_breath_loop() + { + BREATH_COUNT += 1; + if (BREATH_COUNT < 30) + { + ScheduleDelayedEvent(0.1, "do_fire_breath_loop"); + SetMoveDest(m_hAttackTarget); + TossProjectile("proj_fire_bolt", /* TODO: $relpos */ $relpos(0, 0, 24), "none", 300, DMG_FIRE_BOLT, 30, "none"); + } + else + { + npcatk_resume_ai(); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + } + + void pick_spell() + { + CUR_SPELL += 1; + if (CUR_SPELL > 4) + { + CUR_SPELL = 1; + } + if (CUR_SPELL == 1) + { + do_fire_ball(); + FREQ_SPECIAL = 10.0; + } + if (CUR_SPELL == 2) + { + do_fire_wave(); + FREQ_SPECIAL = 10.0; + } + if (CUR_SPELL == 3) + { + if (GetEntityRange(m_hAttackTarget) < 768) + { + do_fire_breath(); + FREQ_SPECIAL = 5.0; + } + else + { + do_fire_ball(); + FREQ_SPECIAL = 10.0; + } + } + FREQ_SPECIAL("pick_spell"); + } + + void game_dynamically_created() + { + NO_SPAWN_STUCK_CHECK = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_fire_guardian.as b/scripts/angelscript/monsters/elemental_fire_guardian.as new file mode 100644 index 00000000..7b04277e --- /dev/null +++ b/scripts/angelscript/monsters/elemental_fire_guardian.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "monsters/elemental_ice_guardian.as" + +namespace MS +{ + +class ElementalFireGuardian : CGameScript +{ + int DOT_FROST; + string GUARD_ELEMENT; + string ICE_GUARD_DOT_EFFECT; + float ICE_GUARD_FIRE_VULN; + int ICE_GUARD_HEIGHT; + float ICE_GUARD_ICE_VULN; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int NPC_BASE_EXP; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + ElementalFireGuardian() + { + ICE_GUARD_NAME = "Lesser Fire Guardian"; + ICE_GUARD_MODEL = "monsters/fire_guardian.mdl"; + ICE_GUARD_LEVEL = 1; + ICE_GUARD_WIDTH = 32; + ICE_GUARD_HEIGHT = 96; + NPC_BASE_EXP = 750; + GUARD_ELEMENT = "fire"; + ICE_GUARD_ICE_VULN = 1.5; + ICE_GUARD_FIRE_VULN = 0.0; + ICE_GUARD_DOT_EFFECT = "effects/dot_fire"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + DOT_FROST = 60; + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_fire_guardian2.as b/scripts/angelscript/monsters/elemental_fire_guardian2.as new file mode 100644 index 00000000..d718469b --- /dev/null +++ b/scripts/angelscript/monsters/elemental_fire_guardian2.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "monsters/elemental_ice_guardian.as" + +namespace MS +{ + +class ElementalFireGuardian2 : CGameScript +{ + int ATTACK_MOVERANGE_DEF; + string CL_FX_SCRIPT; + int DMG_BURST; + int DMG_FIRE_BURST; + int DMG_LUNGE; + int DMG_STAFF; + int DOT_FROST; + int FLAME_JET_DMG; + int FLAME_JET_DOT; + float FREQ_ICE_BALL; + float FREQ_PROJECTILE; + string GUARD_ELEMENT; + string ICE_GUARD_DOT_EFFECT; + float ICE_GUARD_FIRE_VULN; + int ICE_GUARD_HEIGHT; + int ICE_GUARD_HP; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int NPC_BASE_EXP; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + ElementalFireGuardian2() + { + ICE_GUARD_NAME = "Fire Guardian"; + ICE_GUARD_HP = 6000; + ICE_GUARD_FIRE_VULN = 0.0; + ICE_GUARD_LEVEL = 2; + ICE_GUARD_MODEL = "monsters/fire_guardian.mdl"; + ICE_GUARD_WIDTH = 32; + ICE_GUARD_HEIGHT = 96; + NPC_BASE_EXP = 2000; + DMG_BURST = 200; + DMG_LUNGE = 250; + DMG_STAFF = 150; + DOT_FROST = 150; + DMG_FIRE_BURST = 400; + FLAME_JET_DMG = 200; + FLAME_JET_DOT = 100; + FREQ_ICE_BALL = Random(10.0, 20.0); + GUARD_ELEMENT = "fire"; + ICE_GUARD_DOT_EFFECT = "effects/dot_fire"; + ATTACK_MOVERANGE_DEF = 200; + FREQ_PROJECTILE = 3.0; + CL_FX_SCRIPT = "monsters/elemental_fire_guardian_cl"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + Precache("explode1.spr"); + Precache("xfireball3.spr"); + } + + void game_precache() + { + Precache("effects/sfx_seal"); + Precache("firemagic_8bit.spr"); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_fire_guardian3.as b/scripts/angelscript/monsters/elemental_fire_guardian3.as new file mode 100644 index 00000000..da59dd54 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_fire_guardian3.as @@ -0,0 +1,127 @@ +#pragma context server + +#include "monsters/elemental_ice_guardian.as" + +namespace MS +{ + +class ElementalFireGuardian3 : CGameScript +{ + int ATTACK_HITRANGE_DEF; + int ATTACK_MOVERANGE_AGRO; + int ATTACK_MOVERANGE_DEF; + int ATTACK_RANGE_DEF; + string CL_FX_SCRIPT; + int DMG_BURST; + int DMG_LUNGE; + int DMG_METEOR; + int DMG_STAFF; + int DOT_FROST; + int DOT_METEOR; + int DOT_SHOCK; + int FLAME_JET_DMG; + int FLAME_JET_DOT; + float FREQ_ICE_BALL; + float FREQ_METEOR; + float FREQ_PROJECTILE; + float FREQ_SHOCK_STORM; + string GUARD_ELEMENT; + string ICE_GUARD_DOT_EFFECT; + float ICE_GUARD_FIRE_VULN; + int ICE_GUARD_HEIGHT; + int ICE_GUARD_HP; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int LUNGE_RANGE_MAX; + int LUNGE_RANGE_MAX_HITRANGE; + int LUNGE_RANGE_MIN; + int NPC_BASE_EXP; + string NPC_IS_BOSS; + string SOUND_SHOCK_HIT; + string SOUND_SHOCK_LOOP; + string SOUND_SHOCK_START; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string STAFF_ALT_EFFECT; + string STAFF_BEAM_COLOR; + + ElementalFireGuardian3() + { + ICE_GUARD_NAME = "Greater Fire Guardian"; + ICE_GUARD_HP = 8000; + ICE_GUARD_LEVEL = 3; + ICE_GUARD_MODEL = "monsters/fire_guardian2.mdl"; + ICE_GUARD_WIDTH = 48; + ICE_GUARD_HEIGHT = 120; + if (StringToLower(GetMapName()) == "phobia") + { + NPC_IS_BOSS = 1; + } + NPC_BASE_EXP = 7500; + SetDamageResistance("acid", 0.0); + SetDamageResistance("poison", 0.0); + DMG_BURST = 300; + DMG_LUNGE = 300; + DMG_STAFF = 200; + DOT_FROST = 200; + DOT_SHOCK = 200; + FLAME_JET_DMG = 300; + FLAME_JET_DOT = 100; + GUARD_ELEMENT = "fire"; + ICE_GUARD_FIRE_VULN = 0.0; + ICE_GUARD_DOT_EFFECT = "effects/dot_fire"; + ATTACK_MOVERANGE_DEF = 256; + ATTACK_MOVERANGE_AGRO = 70; + ATTACK_RANGE_DEF = 90; + ATTACK_HITRANGE_DEF = 120; + LUNGE_RANGE_MIN = 100; + LUNGE_RANGE_MAX = 225; + LUNGE_RANGE_MAX_HITRANGE = 175; + FREQ_SHOCK_STORM = 20.0; + FREQ_PROJECTILE = Random(5.0, 10.0); + FREQ_ICE_BALL = Random(5.0, 10.0); + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + STAFF_ALT_EFFECT = "effects/dot_poison_blind"; + CL_FX_SCRIPT = "monsters/elemental_fire_guardian_cl"; + STAFF_BEAM_COLOR = Vector3(0, 255, 0); + SOUND_SHOCK_LOOP = "magic/blackhole.wav"; + SOUND_SHOCK_START = "magic/spookie1.wav"; + SOUND_SHOCK_HIT = "bullchicken/bc_bite2.wav"; + FREQ_METEOR = 20.0; + DMG_METEOR = 750; + DOT_METEOR = 200; + } + + void game_precache() + { + Precache("effects/sfx_seal"); + Precache("firemagic_8bit.spr"); + Precache(SOUND_SHOCK_LOOP); + } + + void OnPostSpawn() override + { + if (!(StringToLower(GetMapName()) == "phobia")) return; + CallExternal("all", "bandit_ally_fire_spawn"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (StringToLower(GetMapName()) == "phobia") + { + CallExternal("all", "bandit_ally_boss_dead"); + } + if (StringToLower(GetMapName()) == "shender_east") + { + CallExternal(GAME_MASTER, "map_shender_east_dream_win"); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_fire_guardian_cl.as b/scripts/angelscript/monsters/elemental_fire_guardian_cl.as new file mode 100644 index 00000000..c59c83b3 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_fire_guardian_cl.as @@ -0,0 +1,275 @@ +#pragma context server + +namespace MS +{ + +class ElementalFireGuardianCl : CGameScript +{ + int DEATH_MODE; + string DRESS_SPRITE; + int DRESS_SPRITE_NFRAMES; + int FX_ACTIVE; + string FX_OWNER; + string OWNER_VEL; + int RING_ADD; + int RING_RAD; + int RING_ROT; + int RING_VADJ; + string RING_Z; + int SHOCK_STORM_ON; + int STAFF_LOOP_ACTIVE; + string STAFF_ON; + string STAFF_POS; + + ElementalFireGuardianCl() + { + DRESS_SPRITE = "explode1.spr"; + DRESS_SPRITE_NFRAMES = 8; + } + + void client_activate() + { + FX_OWNER = param1; + STAFF_ON = param2; + LogDebug("ice_cl FX_OWNER STAFF_ON"); + FX_ACTIVE = 1; + ScheduleDelayedEvent(45.0, "end_fx"); + dress_sprite_loop(); + } + + void guardian_death() + { + DEATH_MODE = 1; + ScheduleDelayedEvent(1.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void dress_sprite_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "dress_sprite_loop"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + OWNER_VEL = /* TODO: $getcl */ $getcl(FX_OWNER, "velocity"); + OWNER_VEL *= 0.1; + ClientEffect("tempent", "sprite", DRESS_SPRITE, SPR_POS, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", DRESS_SPRITE, SPR_POS, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", DRESS_SPRITE, SPR_POS, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", DRESS_SPRITE, SPR_POS, "setup_cloud", "update_cloud"); + } + + void staff_glow() + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPR_POS, "setup_staff_glow", "update_staff_glow"); + } + + void poison_storm_on() + { + if (!(STAFF_LOOP_ACTIVE)) + { + staff_track_loop(); + } + SHOCK_STORM_ON = 1; + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + RING_Z = param1; + EmitSound3D("magic/blackhole.wav", 10, SPR_POS); + RING_ROT = 0; + RING_ADD = 90; + RING_RAD = 128; + RING_VADJ = 128; + for (int i = 0; i < 4; i++) + { + make_poison_storm_ring(); + } + RING_ROT = 0; + RING_ADD = 45; + RING_RAD = 256; + RING_VADJ = 64; + for (int i = 0; i < 8; i++) + { + make_poison_storm_ring(); + } + RING_ROT = 0; + RING_ADD = 22.5; + RING_RAD = 512; + RING_VADJ = 32; + for (int i = 0; i < 16; i++) + { + make_poison_storm_ring(); + } + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), 512, Vector3(0, 128, 0), 10.0); + } + + void make_poison_storm_ring() + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string RING_FINAL_Z = RING_Z; + RING_FINAL_Z += RING_VADJ; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, RING_ROT, 0), Vector3(0, RING_RAD, RING_FINAL_Z)); + ClientEffect("tempent", "sprite", "poison_cloud.spr", SPR_POS, "setup_storm_sprite", "update_storm_sprite"); + RING_ROT += RING_ADD; + } + + void poison_storm_end() + { + SHOCK_STORM_ON = 0; + staff_track_end(); + } + + void poison_storm_loop() + { + if (!(SHOCK_STORM_ON)) return; + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "shock_storm_loop"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPR_POS, "setup_staff_glow", "update_staff_glow"); + } + + void staff_track_loop() + { + if (!(STAFF_LOOP_ACTIVE)) return; + ScheduleDelayedEvent(0.01, "staff_track_loop"); + STAFF_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + } + + void staff_track_end() + { + STAFF_LOOP_ACTIVE = 0; + } + + void fire_projectile_miss_sound() + { + EmitSound3D("weapons/dagger/daggermetal2.wav", 10, PROJECTILE_END); + } + + void update_staff_glow() + { + ClientEffect("tempent", "set_current_prop", "origin", STAFF_POS); + string CUR_SIZE = "game.tempent.fuser1"; + CUR_SIZE -= 0.01; + if (CUR_SIZE > 0) + { + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + if (CUR_SIZE == 0) + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + } + + void setup_staff_glow() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "fade", "lifetime"); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "fuser1", 1.0); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "framerate", 60); + ClientEffect("tempent", "set_current_prop", "frames", DRESS_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 15); + ClientEffect("tempent", "set_current_prop", "scale", 0.05); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + if (!(DEATH_MODE)) + { + ClientEffect("tempent", "set_current_prop", "gravity", 0.5); + } + else + { + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + } + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.05); + if (!(DEATH_MODE)) + { + float RND_PITCH = Random(70, 110); + float RND_ANG = Random(0, 359.99); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(RND_PITCH, RND_ANG, 0)); + string CLOUD_VEL = OWNER_VEL; + CLOUD_VEL += /* TODO: $relvel */ $relvel(Vector3(RND_PITCH, RND_ANG, 0), Vector3(0, 10, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + else + { + float RND_ANG = Random(0, 359.99); + float RND_PITCH = Random(0, 359.99); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(RND_PITCH, RND_ANG, 0)); + string CLOUD_VEL = OWNER_VEL; + CLOUD_VEL += /* TODO: $relvel */ $relvel(Vector3(RND_PITCH, RND_ANG, 0), Vector3(0, 50, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + } + + void update_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < 1.0) + { + CUR_SCALE += 0.025; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + if (!(DEATH_MODE)) return; + string CUR_VEL = "game.tempent.velocity"; + string CUR_ANG = "game.tempent.angles"; + CUR_VEL += /* TODO: $relvel */ $relvel(CUR_ANG, Vector3(0, 50, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", CUR_VEL); + } + + void setup_storm_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", -0.01); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", RING_RAD); + ClientEffect("tempent", "set_current_prop", "fuser2", RING_ROT); + } + + void update_storm_sprite() + { + string CUR_POS = "game.tempent.origin"; + string CUR_RAD = "game.tempent.fuser1"; + string CUR_ROT = "game.tempent.fuser2"; + CUR_ROT += 1; + if (CUR_ROT > 359.99) + { + int CUR_ROT = 0; + } + ClientEffect("tempent", "set_current_prop", "fuser2", CUR_ROT); + string NEW_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + NEW_POS = "z"; + NEW_POS += /* TODO: $relpos */ $relpos(Vector3(0, CUR_ROT, 0), Vector3(0, CUR_RAD, 0)); + ClientEffect("tempent", "set_current_prop", "origin", NEW_POS); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_ice1.as b/scripts/angelscript/monsters/elemental_ice1.as new file mode 100644 index 00000000..f1a5d72a --- /dev/null +++ b/scripts/angelscript/monsters/elemental_ice1.as @@ -0,0 +1,395 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class ElementalIce1 : CGameScript +{ + int AIM_RATIO; + int AMB_FROST_DAMAGE; + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_BASEIDLE; + string ANIM_BUGIDLE_A; + string ANIM_BUGIDLE_B; + string ANIM_BUGIDLE_C; + string ANIM_CHARGE; + string ANIM_CHARGEIDLE; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_FLOAT; + string ANIM_FROMCHARGE; + string ANIM_GLOAT; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_TOCHARGE; + string ANIM_WALK; + int AS_SUMMON_TELE_CHECK; + float ATTACK_ACCURACY; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_RANGE_STANDARD; + int CIRCLE_DELAY; + float CIRCLE_INTERVAL; + int CIRCLE_RANGE; + string CIRCLE_SCRIPT; + int DID_SHRUG; + string DID_WARCRY; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string FIRE_BALL_AMMO; + int FROST_DAMAGE; + string GLOAT_DELAY; + int HOVER_LOOP_DELAY; + int ICESEAL_DAMAGE; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int I_AM_TURNABLE; + string MONSTER_MODEL; + int MOVE_FAST; + int MOVE_NORMAL; + int MOVE_RANGE; + string MY_HURT_STAGE; + int NO_STUCK_CHECKS; + float NPC_DELAYING_UNSTUCK; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + float PLAYTIME_HOVER; + string PURE_FLEE; + int RUNNING_CIRCLE; + string SOUND_ALERT; + string SOUND_CIRCLE_READY; + string SOUND_DEATH; + string SOUND_GLOAT; + string SOUND_HOVER; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN0; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SWIPE; + string SOUND_SWIPEHIT; + int STRIKE_DAMAGE; + int SWIPE_HITRANGE; + int SWIPE_MOVERANGE; + int SWIPE_RANGE; + int SWITCHED_TO_CHARGEIDLE; + int USE_SWIPE_SOUND; + + ElementalIce1() + { + AS_SUMMON_TELE_CHECK = 1; + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 150; + MOVE_RANGE = 65; + ATTACK_HITCHANCE = 0.8; + ATTACK_RANGE_STANDARD = 100; + SWIPE_MOVERANGE = 65; + SWIPE_RANGE = 100; + SWIPE_HITRANGE = 150; + ATTACK_ACCURACY = 0.8; + CIRCLE_RANGE = 256; + AIM_RATIO = 50; + AMB_FROST_DAMAGE = "$rand(10,30)"; + FROST_DAMAGE = "$rand(30,40)"; + STRIKE_DAMAGE = "$rand(50,150)"; + ICESEAL_DAMAGE = 200; + ANIM_IDLE = "idle1"; + ANIM_WALK = "idle1"; + ANIM_RUN = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_FLINCH = "flinch"; + ANIM_DEATH = "die1"; + ANIM_BASEIDLE = "idle1"; + ANIM_FLOAT = "idle1"; + ANIM_BUGIDLE_A = "idle1"; + ANIM_BUGIDLE_B = "idle2"; + ANIM_BUGIDLE_C = "dunno"; + ANIM_CHARGE = "float"; + ANIM_SWIPE = "attack1"; + ANIM_ALERT = "yes"; + ANIM_GLOAT = "no"; + ANIM_SEARCH = "dunno"; + ANIM_TOCHARGE = "tocharge"; + ANIM_CHARGEIDLE = "charging"; + ANIM_FROMCHARGE = "fromcharge"; + SOUND_ALERT = "agrunt/ag_alert5.wav"; + SOUND_IDLE1 = "agrunt/ag_alert1.wav"; + SOUND_IDLE2 = "agrunt/ag_die1.wav"; + SOUND_IDLE3 = "agrunt/ag_idle1.wav"; + SOUND_SWIPE = "weapons/debris1.wav"; + SOUND_SWIPEHIT = "magic/frost_reverse.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_PAIN0 = "debris/glass1.wav"; + SOUND_PAIN1 = "agrunt/ag_pain1.wav"; + SOUND_PAIN2 = "agrunt/ag_pain4.wav"; + SOUND_GLOAT = "x/x_laugh1.wav"; + SOUND_CIRCLE_READY = "debris/beamstart1.wav"; + SOUND_HOVER = "fans/fan3on.wav"; + PLAYTIME_HOVER = 3.0; + CIRCLE_INTERVAL = 30.0; + CIRCLE_SCRIPT = "monsters/summon/circle_of_ice_lesser"; + Precache("weapons/magic/seals.mdl"); + Precache("magic/spawn.wav"); + Precache("magic/frost_forward.wav"); + Precache("magic/frost_reverse.wav"); + Precache("teleporter_blue_sprites.mdl"); + Precache(FX_SPRITE); + DROP_GOLD = 1; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 40; + I_AM_TURNABLE = 0; + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + MONSTER_MODEL = "monsters/elementals_lesser.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + SetName("Ice Elemental"); + SetHealth(600); + SetWidth(32); + SetHeight(48); + SetRace("demon"); + SetDamageResistance("all", 0.4); + SetDamageResistance("holy", 1.25); + SetDamageResistance("fire", 1.25); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(3); + Precache(MONSTER_MODEL); + SetModel(MONSTER_MODEL); + SetModelBody(0, 2); + SetBloodType("none"); + NPC_GIVE_EXP = 130; + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetStat("parry", 40); + MY_HURT_STAGE = GetEntityMaxHealth(GetOwner()); + MY_HURT_STAGE *= 0.5; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + if (MY_HEALTH >= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HEALTH <= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (param1 > 20) + { + AddVelocity(GetOwner(), /* TODO: $relpos */ $relpos(1, -10, 1)); + } + if (!(GetEntityRange(m_hLastStruck) < MOVE_RANGE)) return; + ApplyEffect(m_hLastStruck, "effects/dot_cold", 1, GetEntityIndex(GetOwner()), AMB_FROST_DAMAGE); + } + + void idle_sounds() + { + float NEXT_SOUND = Random(5, 15); + NEXT_SOUND("idle_sounds"); + if ((IS_HUNTING)) return; + int RAND_ANIM = RandomInt(1, 3); + if (RAND_ANIM == 1) + { + PlayAnim("once", ANIM_BUGIDLE_A); + } + if (RAND_ANIM == 2) + { + PlayAnim("once", ANIM_BUGIDLE_B); + } + if (RAND_ANIM == 3) + { + PlayAnim("once", ANIM_BUGIDLE_C); + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if ((param1)) + { + if ((USE_SWIPE_SOUND)) + { + ApplyEffect(m_hLastStruckByMe, "effects/dot_cold", 4, GetEntityIndex(GetOwner()), FROST_DAMAGE, "none"); + EmitSound(GetOwner(), 0, SOUND_SWIPEHIT, 10); + } + } + USE_SWIPE_SOUND = 0; + } + + void npc_selectattack() + { + if ((CIRCLE_DELAY)) + { + ATTACK_RANGE = ATTACK_RANGE_STANDARD; + } + if ((RUNNING_CIRCLE)) return; + if ((CIRCLE_DELAY)) return; + if (!(false)) return; + ATTACK_RANGE = MOVE_RANGE; + ATTACK_RANGE *= 1.25; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_RANGE)) return; + Effect("glow", GetOwner(), Vector3(0, 75, 255), 50, 5, 5); + EmitSound(GetOwner(), 0, SOUND_CIRCLE_READY, 10); + circle_of_ice_init(); + } + + void circle_of_ice_init() + { + NO_STUCK_CHECKS = 1; + npcatk_suspend_ai(5.0); + RUNNING_CIRCLE = 1; + SetAnimMoveSpeed(0); + SetMoveSpeed(0); + PlayAnim("critical", ANIM_TOCHARGE); + SetIdleAnim(ANIM_CHARGEIDLE); + SetMoveAnim(ANIM_CHARGEIDLE); + } + + void tocharge_done() + { + if ((SWITCHED_TO_CHARGEIDLE)) return; + SWITCHED_TO_CHARGEIDLE = 1; + PlayAnim("critical", ANIM_CHARGEIDLE); + ScheduleDelayedEvent(0.2, "circle_go"); + } + + void circle_go() + { + SpawnNPC(CIRCLE_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 10.0, 1.3, ICESEAL_DAMAGE + ScheduleDelayedEvent(5.1, "circle_done"); + } + + void circle_done() + { + RUNNING_CIRCLE = 0; + PlayAnim("critical", "fromcharge"); + SWITCHED_TO_CHARGEIDLE = 0; + SetIdleAnim(ANIM_IDLE); + SetActionAnim(ANIM_ATTACK); + SetMoveAnim(ANIM_WALK); + NPC_HACKED_MOVE_SPEED = MOVE_FAST; + NO_STUCK_CHECKS = 0; + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + SetMoveSpeed(1.0); + if ((false)) + { + PURE_FLEE = 1; + npcatk_flee(m_hLastSeen, FLEE_DISTANCE, 5.0); + } + CIRCLE_DELAY = 1; + ScheduleDelayedEvent(5.0, "slow_down"); + ScheduleDelayedEvent(4.0, "ammo_up"); + CIRCLE_INTERVAL("reset_circle_delay"); + } + + void reset_circle_delay() + { + CIRCLE_DELAY = 0; + } + + void slow_down() + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + + void ammo_up() + { + FIRE_BALL_AMMO = FULL_FIRE_BALL_AMMO; + } + + void npcatk_search_init_advanced() + { + if ((false)) return; + if ((DID_SHRUG)) return; + DID_SHRUG = 1; + NPC_DELAYING_UNSTUCK = 5.0; + PlayAnim("critical", ANIM_SEARCH); + EmitSound(GetOwner(), 0, SOUND_IDLE3, 10); + } + + void my_target_died() + { + if (!(GLOAT_DELAY)) + { + PlayAnim("critical", ANIM_GLOAT); + EmitSound(GetOwner(), 0, SOUND_GLOAT, 10); + GLOAT_DELAY = 1; + ScheduleDelayedEvent(10.0, "reset_gloat"); + } + if (!(false)) + { + DID_WARCRY = 0; + DID_SHRUG = 0; + } + } + + void reset_gloat() + { + GLOAT_DELAY = 0; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(IsValidPlayer(param1))) return; + npcatk_setmovedest(m_hLastSeen, ATTACK_RANGE); + if ((DID_WARCRY)) return; + npcatk_faceattacker(); + DID_WARCRY = 1; + PlayAnim("critical", ANIM_ALERT); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + } + + void attack1_strike() + { + USE_SWIPE_SOUND = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, STRIKE_DAMAGE, ATTACK_ACCURACY); + } + + void game_movingto_dest() + { + if ((RUNNING_CIRCLE)) return; + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + if ((HOVER_LOOP_DELAY)) return; + EmitSound(GetOwner(), CHAN_BODY, SOUND_HOVER, 8); + HOVER_LOOP_DELAY = 1; + PLAYTIME_HOVER("hover_loop_reset"); + } + + void hover_loop_reset() + { + HOVER_LOOP_DELAY = 0; + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_ice2.as b/scripts/angelscript/monsters/elemental_ice2.as new file mode 100644 index 00000000..c9f2c66b --- /dev/null +++ b/scripts/angelscript/monsters/elemental_ice2.as @@ -0,0 +1,490 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class ElementalIce2 : CGameScript +{ + int AIM_RATIO; + int AMB_FROST_DAMAGE; + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_BASEIDLE; + string ANIM_BUGIDLE_A; + string ANIM_BUGIDLE_B; + string ANIM_BUGIDLE_C; + string ANIM_CHARGE; + string ANIM_CHARGEIDLE; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_FLOAT; + string ANIM_FROMCHARGE; + string ANIM_GLOAT; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_TOCHARGE; + string ANIM_WALK; + string AS_ATTACKING; + int AS_SUMMON_TELE_CHECK; + float ATTACK_ACCURACY; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CIRCLE_DELAY; + float CIRCLE_FREQ; + int CIRCLE_RANGE; + int CIRCLE_RUNNING; + string CIRCLE_SCRIPT; + int DID_SHRUG; + string DID_WARCRY; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string FIRE_BALL_AMMO; + int FROST_DAMAGE; + string GLOAT_DELAY; + int HOVER_LOOP_DELAY; + int ICESEAL_DAMAGE; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int I_AM_TURNABLE; + string MONSTER_MODEL; + int MOVE_FAST; + int MOVE_NORMAL; + int MOVE_RANGE; + string MY_HURT_STAGE; + int NO_STUCK_CHECKS; + int NO_VICTORY_HEAL; + float NPC_DELAYING_UNSTUCK; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string NPC_MOVEDEST_TARGET; + float PLAYTIME_HOVER; + int PREP_CIRCLE; + int SNOWBALL_DAMAGE; + int SNOWBALL_DELAY; + float SNOWBALL_DURATION; + float SNOWBALL_FREQ; + int SNOWBALL_RANGE; + string SOUND_ALERT; + string SOUND_CIRCLE_READY; + string SOUND_DEATH; + string SOUND_GLOAT; + string SOUND_HOVER; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN0; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SNOWBALL; + string SOUND_SWIPE; + string SOUND_SWIPEHIT; + string SOUND_WAVE_GO; + int STRIKE_DAMAGE; + int SWIPE_HITRANGE; + int SWIPE_MOVERANGE; + int SWIPE_RANGE; + string TEMP_MOVE_TARGET; + int USE_SWIPE_SOUND; + + ElementalIce2() + { + AS_SUMMON_TELE_CHECK = 1; + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + ATTACK_RANGE = 1024; + SWIPE_RANGE = 100; + SNOWBALL_RANGE = 600; + SNOWBALL_DAMAGE = 100; + SNOWBALL_FREQ = 45.0; + SNOWBALL_DURATION = 10.0; + SOUND_SNOWBALL = "zombie/claw_miss1.wav"; + ATTACK_HITRANGE = 150; + MOVE_RANGE = 65; + ATTACK_HITCHANCE = 0.8; + SWIPE_MOVERANGE = 65; + SWIPE_RANGE = 100; + SWIPE_HITRANGE = 150; + ATTACK_ACCURACY = 0.8; + CIRCLE_RANGE = 2048; + AIM_RATIO = 50; + AMB_FROST_DAMAGE = "$rand(30,60)"; + FROST_DAMAGE = "$rand(60,80)"; + STRIKE_DAMAGE = "$rand(100,250)"; + ICESEAL_DAMAGE = 200; + ANIM_IDLE = "idle1"; + ANIM_WALK = "idle1"; + ANIM_RUN = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_SWIPE = "attack1"; + ANIM_FLINCH = "flinch"; + ANIM_DEATH = "die1"; + ANIM_BASEIDLE = "idle1"; + ANIM_FLOAT = "idle1"; + ANIM_BUGIDLE_A = "idle1"; + ANIM_BUGIDLE_B = "idle2"; + ANIM_BUGIDLE_C = "dunno"; + ANIM_CHARGE = "float"; + ANIM_SWIPE = "attack1"; + ANIM_ALERT = "yes"; + ANIM_GLOAT = "no"; + ANIM_SEARCH = "dunno"; + ANIM_TOCHARGE = "tocharge"; + ANIM_CHARGEIDLE = "charging"; + ANIM_FROMCHARGE = "fromcharge"; + SOUND_ALERT = "agrunt/ag_alert5.wav"; + SOUND_IDLE1 = "agrunt/ag_alert1.wav"; + SOUND_IDLE2 = "agrunt/ag_die1.wav"; + SOUND_IDLE3 = "agrunt/ag_idle1.wav"; + SOUND_SWIPE = "weapons/debris1.wav"; + SOUND_SWIPEHIT = "magic/frost_reverse.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_PAIN0 = "debris/glass1.wav"; + SOUND_PAIN1 = "agrunt/ag_pain1.wav"; + SOUND_PAIN2 = "agrunt/ag_pain4.wav"; + SOUND_GLOAT = "x/x_laugh1.wav"; + SOUND_CIRCLE_READY = "debris/beamstart1.wav"; + SOUND_WAVE_GO = "ambience/flameburst1.wav"; + SOUND_HOVER = "fans/fan3on.wav"; + PLAYTIME_HOVER = 3.0; + CIRCLE_FREQ = 30.0; + NO_VICTORY_HEAL = 1; + CIRCLE_SCRIPT = "monsters/summon/ice_wave"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 40; + I_AM_TURNABLE = 0; + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + MONSTER_MODEL = "monsters/elementals_greater.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + SetName("Greater Ice Elemental"); + SetHealth(1750); + SetWidth(32); + SetHeight(48); + SetRace("demon"); + SetDamageResistance("all", 0.4); + SetDamageResistance("holy", 1.5); + SetDamageResistance("fire", 1.5); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(3); + Precache(MONSTER_MODEL); + SetModel(MONSTER_MODEL); + SetModelBody(0, 1); + SetBloodType("none"); + CIRCLE_DELAY = 1; + ScheduleDelayedEvent(15.0, "reset_circle_delay"); + NPC_GIVE_EXP = 400; + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetStat("parry", 40); + MY_HURT_STAGE = GetEntityMaxHealth(GetOwner()); + MY_HURT_STAGE *= 0.5; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + if (MY_HEALTH >= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HEALTH <= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (param1 > 40) + { + AddVelocity(GetOwner(), /* TODO: $relpos */ $relpos(1, -10, 1)); + } + if (!(GetEntityRange(m_hLastStruck) < MOVE_RANGE)) return; + ApplyEffect(m_hLastStruck, "effects/dot_cold", 1, GetEntityIndex(GetOwner()), AMB_FROST_DAMAGE); + } + + void idle_sounds() + { + float NEXT_SOUND = Random(5, 15); + NEXT_SOUND("idle_sounds"); + if ((IS_HUNTING)) return; + int RAND_ANIM = RandomInt(1, 3); + if (RAND_ANIM == 1) + { + PlayAnim("once", ANIM_BUGIDLE_A); + } + if (RAND_ANIM == 2) + { + PlayAnim("once", ANIM_BUGIDLE_B); + } + if (RAND_ANIM == 3) + { + PlayAnim("once", ANIM_BUGIDLE_C); + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if ((CIRCLE_RUNNING)) + { + if ((param1)) + { + ApplyEffect(m_hLastStruckByMe, "effects/dot_cold_freeze", 10.0, /* TODO: $get with insufficient args */ null); + int THROW_DIR = RandomInt(1, 2); + if (THROW_DIR == 1) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(-100, 50, 30)); + } + if (THROW_DIR == 2) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(100, 50, 30)); + } + } + } + if ((param1)) + { + if ((USE_SWIPE_SOUND)) + { + ApplyEffect(param2, "effects/dot_cold", 4, GetEntityIndex(GetOwner()), FROST_DAMAGE, "none"); + EmitSound(GetOwner(), 0, SOUND_SWIPEHIT, 10); + } + } + USE_SWIPE_SOUND = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) return; + if (!(CIRCLE_DELAY)) + { + ATTACK_RANGE = CIRCLE_RANGE; + } + if ((CIRCLE_DELAY)) + { + ATTACK_RANGE = SWIPE_RANGE; + } + if (!(SNOWBALL_DELAY)) + { + if (GetEntityRange(m_hAttackTarget) > 256) + { + if (!(CIRCLE_RUNNING)) + { + } + if (!(PREP_CIRCLE)) + { + } + PlayAnim("critical", "fireball"); + AS_ATTACKING = GetGameTime(); + SNOWBALL_DELAY = 1; + SNOWBALL_FREQ("reset_snowball"); + } + } + } + + void npc_selectattack() + { + if ((CIRCLE_RUNNING)) return; + if ((CIRCLE_DELAY)) return; + if (!(false)) return; + if (!(GetEntityRange(m_hAttackTarget) < CIRCLE_RANGE)) return; + PREP_CIRCLE = 1; + NO_STUCK_CHECKS = 1; + AS_ATTACKING = GetGameTime(); + npcatk_suspend_ai(); + npcatk_clear_movedest(); + ScheduleDelayedEvent(0.1, "circle_prep"); + CIRCLE_DELAY = 1; + CIRCLE_FREQ("reset_circle_delay"); + } + + void circle_prep() + { + SetMoveSpeed(0); + SetAnimMoveSpeed(0); + NPC_HACKED_MOVE_SPEED = 0; + Effect("glow", GetOwner(), Vector3(0, 75, 255), 50, 5, 5); + EmitSound(GetOwner(), 0, SOUND_CIRCLE_READY, 10); + PlayAnim("critical", "tocharge"); + } + + void tocharge_done() + { + if ((false)) + { + string TRACE_START = GetMonsterProperty("origin"); + string TRACE_END = /* TODO: $relpos */ $relpos(0, 9999, 0); + TEMP_MOVE_TARGET = TraceLine(TRACE_START, TRACE_END); + SetMoveDest(TEMP_MOVE_TARGET); + } + SetIdleAnim(ANIM_CHARGEIDLE); + SetMoveAnim(ANIM_CHARGEIDLE); + ScheduleDelayedEvent(2.0, "circle_go"); + } + + void circle_go() + { + if ((CIRCLE_RUNNING)) return; + SetMoveAnim(ANIM_CHARGE); + SetIdleAnim(ANIM_CHARGE); + SetMoveSpeed(2.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 100, 0)); + SetAnimMoveSpeed(MOVE_FAST); + NPC_HACKED_MOVE_SPEED = MOVE_FAST; + PlayAnim("critical", ANIM_CHARGE); + CIRCLE_RUNNING = 1; + EmitSound(GetOwner(), 0, SOUND_WAVE_GO, 10); + SpawnNPC(CIRCLE_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: 3.0, GetEntityIndex(GetOwner()) + circle_cycle(); + ScheduleDelayedEvent(3.0, "circle_done"); + } + + void circle_cycle() + { + if (!(CIRCLE_RUNNING)) return; + SetMoveDest(TEMP_MOVE_TARGET); + if (Distance(GetMonsterProperty("origin"), TEMP_MOVE_TARGET) < 32) + { + circle_done(); + } + npcatk_dodamage(/* TODO: $relpos */ $relpos(0, 32, 0), 72, 0, 100, 0); + ScheduleDelayedEvent(0.1, "circle_cycle"); + } + + void circle_done() + { + if (!(CIRCLE_RUNNING)) return; + npcatk_resume_ai(); + PREP_CIRCLE = 0; + SetMoveSpeed(1.0); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + ANIM_ATTACK = ANIM_SWIPE; + SetAnimMoveSpeed(MOVE_NORMAL); + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + CIRCLE_RUNNING = 0; + NO_STUCK_CHECKS = 0; + } + + void reset_circle_delay() + { + CIRCLE_DELAY = 0; + } + + void slow_down() + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + + void ammo_up() + { + FIRE_BALL_AMMO = FULL_FIRE_BALL_AMMO; + } + + void npcatk_search_init_advanced() + { + if ((false)) return; + if ((DID_SHRUG)) return; + DID_SHRUG = 1; + NPC_DELAYING_UNSTUCK = 5.0; + PlayAnim("critical", ANIM_SEARCH); + EmitSound(GetOwner(), 0, SOUND_IDLE3, 10); + } + + void my_target_died() + { + if (!(GLOAT_DELAY)) + { + PlayAnim("critical", ANIM_GLOAT); + EmitSound(GetOwner(), 0, SOUND_GLOAT, 10); + GLOAT_DELAY = 1; + ScheduleDelayedEvent(10.0, "reset_gloat"); + } + if (!(false)) + { + DID_WARCRY = 0; + DID_SHRUG = 0; + } + } + + void reset_gloat() + { + GLOAT_DELAY = 0; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((SUSPEND_AI)) return; + if (!(IsValidPlayer(param1))) return; + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + PlayAnim("critical", ANIM_ALERT); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + } + + void attack1_strike() + { + USE_SWIPE_SOUND = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, STRIKE_DAMAGE, ATTACK_ACCURACY); + } + + void game_movingto_dest() + { + if ((RUNNING_CIRCLE)) return; + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + if ((HOVER_LOOP_DELAY)) return; + EmitSound(GetOwner(), CHAN_BODY, SOUND_HOVER, 8); + HOVER_LOOP_DELAY = 1; + PLAYTIME_HOVER("hover_loop_reset"); + } + + void hover_loop_reset() + { + HOVER_LOOP_DELAY = 0; + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + + void throw_fireball() + { + EmitSound(GetOwner(), 0, SOUND_SNOWBALL, 10); + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.pitch"); + TossProjectile("proj_snow_ball", /* TODO: $relpos */ $relpos(0, 52, 24), "none", 200, SNOWBALL_DAMAGE, 2, "none"); + } + + void reset_snowball() + { + SNOWBALL_DELAY = 0; + } + + void npcatk_clear_movedest() + { + SetMoveDest("none"); + NPC_MOVEDEST_TARGET = "unset"; + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_ice_guardian.as b/scripts/angelscript/monsters/elemental_ice_guardian.as new file mode 100644 index 00000000..014f9406 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_ice_guardian.as @@ -0,0 +1,1363 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_flyer_grav.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class ElementalIceGuardian : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + string ANIM_BREATH_LOOP; + string ANIM_BREATH_START; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_FAKE_DEATH; + string ANIM_FAKE_DEATH_IDLE; + string ANIM_FLINCH_CUSTOM; + string ANIM_ICE_BALL; + string ANIM_IDLE; + string ANIM_LUNGE; + string ANIM_MULTI_PROJECTILE; + string ANIM_PROJECTILE; + string ANIM_PUSH; + string ANIM_PUSHL; + string ANIM_RESSURECT; + string ANIM_RUN; + string ANIM_SPELL_LOOP; + string ANIM_STUN_BURST; + string ANIM_SUMMON; + string ANIM_TAUNT; + string ANIM_THROW; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_COUNT; + int ATTACK_HITRANGE; + int ATTACK_HITRANGE_DEF; + int ATTACK_MOVERANGE; + int ATTACK_MOVERANGE_AGRO; + int ATTACK_MOVERANGE_DEF; + int ATTACK_RANGE; + int ATTACK_RANGE_DEF; + int BE_AGGRESSIVE; + int BFLY_VSPEED_DOWN; + int BFLY_VSPEED_UP; + string BURST_START; + string BURST_TARGS; + string CIRCLE_TARGS; + string CL_FX_INDEX; + string CL_FX_SCRIPT; + string CUR_SHOCK_TARG_IDX; + int DID_WARCRY; + int DMG_BURST; + int DMG_LUNGE; + int DMG_STAFF; + string DODGE_TARGET; + int DOT_FROST; + int DOT_SHOCK; + string FLIGHT_HEIGHT; + float FREQ_CHANGE_STANCE; + float FREQ_CHARGE; + float FREQ_DODGE; + float FREQ_FLINCH; + float FREQ_ICE_BALL; + float FREQ_ICE_CIRCLE; + float FREQ_LUNGE; + float FREQ_PROJECTILE; + float FREQ_SHOCK_STORM; + float FREQ_STAFF_MODE_CHANGE; + float FREQ_STUN_BURST; + float FREQ_TAUNT; + float FREQ_THROW; + string GUARD_ELEMENT; + string HALF_HP; + float HIT_DELAY; + int ICE_CIRCLE_ACTIVE; + int ICE_CIRCLE_FXRAD; + string ICE_CIRCLE_ORIGIN; + int ICE_CIRCLE_RAD; + string ICE_GUARD_DOT_EFFECT; + float ICE_GUARD_FIRE_VULN; + int ICE_GUARD_HEIGHT; + int ICE_GUARD_HP; + float ICE_GUARD_ICE_VULN; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int IMMUNE_VAMPIRE; + int IN_STANCE; + int IS_UNHOLY; + int LUNGE_RANGE_MAX; + int LUNGE_RANGE_MAX_HITRANGE; + int LUNGE_RANGE_MIN; + int MELEE_ATTACK; + string METEOR_MODE; + int MOVE_RANGE; + string NEXT_CALM; + string NEXT_CHARGE; + string NEXT_CL_REFRESH; + string NEXT_DODGE; + string NEXT_FLINCH; + string NEXT_ICE_BALL; + string NEXT_ICE_CIRCLE; + string NEXT_LUNGE; + string NEXT_METEOR; + string NEXT_PROJECTILE; + string NEXT_SHOCK_STORM; + string NEXT_STAFF_MODE_CHANGE; + string NEXT_STANCE_CHANGE; + string NEXT_STUN_BURST; + string NEXT_TARG_CHECK; + string NEXT_TAUNT; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string PROJECTILE_LOOP_ON; + int PROJ_SPEED; + string SHOCK_MODE; + string SHOCK_STORM_BEAM_ID; + int SHOCK_STORM_ON; + string SHOCK_TARGS; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_DODGE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PROJECTILE; + string SOUND_SHOCK_HIT; + string SOUND_SHOCK_LOOP; + string SOUND_SHOCK_START; + string SOUND_STAFF_ON; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SUMMON; + string SOUND_SWIPE1; + string SOUND_SWIPE2; + string SOUND_SWIPE_STRONG1; + string SOUND_SWIPE_STRONG2; + string SOUND_SWIPE_STRONG3; + string SOUND_TAUNT; + int SPEED_FAST; + int SPEED_SLOW; + string STAFF_ALT_EFFECT; + string STAFF_BEAM_COLOR; + int STAFF_ON; + string STORM_TARGS; + int VEL_BURST_F; + int VEL_BURST_U; + int VEL_DODGE_F; + int VEL_DODGE_L; + int VEL_FBURST_F; + int VEL_LONG_F; + int VEL_PUSH_ATK_F; + int VEL_SHOCK_F; + int VEL_THROW_ATK_F; + int VEL_THROW_ATK_L; + + ElementalIceGuardian() + { + ICE_GUARD_NAME = "Lesser Ice Guardian"; + ICE_GUARD_HP = 3000; + ICE_GUARD_FIRE_VULN = 1.5; + ICE_GUARD_LEVEL = 1; + ICE_GUARD_MODEL = "monsters/ice_guardian.mdl"; + ICE_GUARD_WIDTH = 32; + ICE_GUARD_HEIGHT = 96; + ICE_GUARD_ICE_VULN = 0.0; + GUARD_ELEMENT = "ice"; + ICE_GUARD_DOT_EFFECT = "effects/dot_cold"; + ANIM_IDLE = "idle_ready"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "explode"; + ANIM_ATTACK1 = "attack1"; + ANIM_ATTACK2 = "attack2"; + ANIM_STUN_BURST = "attack_smash"; + ANIM_THROW = "attack_throw"; + ANIM_PUSH = "attack_push"; + ANIM_LUNGE = "attack_long"; + ANIM_ICE_BALL = "release_spell"; + ANIM_SPELL_LOOP = "spell_loop"; + ANIM_SUMMON = "summon"; + ANIM_ALERT = "alert"; + ANIM_FLINCH_CUSTOM = "flinch"; + ANIM_TAUNT = "taunt"; + ANIM_PROJECTILE = "projectile"; + ANIM_MULTI_PROJECTILE = "multi_projectile"; + ANIM_DODGE = "attack_pushr"; + ANIM_PUSHL = "attack_pushl"; + ANIM_BREATH_START = "ccastout"; + ANIM_BREATH_LOOP = "ccastoutlp"; + ANIM_FAKE_DEATH = "long_death"; + ANIM_RESSURECT = "ressurect"; + ANIM_FAKE_DEATH_IDLE = "dead_idle"; + VEL_PUSH_ATK_F = 400; + VEL_THROW_ATK_L = -400; + VEL_THROW_ATK_F = 400; + VEL_BURST_F = 500; + VEL_FBURST_F = 800; + VEL_BURST_U = 100; + VEL_LONG_F = 300; + VEL_DODGE_F = 300; + VEL_DODGE_L = 300; + VEL_SHOCK_F = 600; + if (StringToLower(GetMapName()) != "shender_east") + { + VEL_PUSH_ATK_F *= 1.25; + VEL_THROW_ATK_L = -600; + VEL_THROW_ATK_F *= 1.25; + VEL_BURST_F *= 1.25; + VEL_FBURST_F *= 1.25; + VEL_BURST_U *= 1.25; + VEL_LONG_F *= 1.25; + VEL_DODGE_F *= 1.25; + VEL_DODGE_L *= 1.25; + VEL_SHOCK_F *= 1.25; + } + IS_UNHOLY = 1; + NPC_HACKED_MOVE_SPEED = 100; + IMMUNE_VAMPIRE = 1; + SPEED_SLOW = 100; + SPEED_FAST = 200; + BFLY_VSPEED_UP = 5; + BFLY_VSPEED_DOWN = -50; + MOVE_RANGE = 50; + ATTACK_MOVERANGE = 50; + ATTACK_MOVERANGE_DEF = 50; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 75; + ATTACK_RANGE_DEF = 60; + ATTACK_HITRANGE_DEF = 75; + ATTACK_MOVERANGE_AGRO = 60; + LUNGE_RANGE_MIN = 75; + LUNGE_RANGE_MAX = 175; + LUNGE_RANGE_MAX_HITRANGE = 125; + STAFF_BEAM_COLOR = Vector3(128, 128, 255); + STAFF_ALT_EFFECT = "effects/dot_lightning"; + NPC_GIVE_EXP = 1000; + FREQ_STUN_BURST = Random(20.0, 30.0); + FREQ_ICE_BALL = Random(20.0, 30.0); + FREQ_ICE_CIRCLE = Random(20.0, 30.0); + FREQ_THROW = Random(10.0, 20.0); + FREQ_STAFF_MODE_CHANGE = 20.0; + FREQ_LUNGE = 5.0; + FREQ_DODGE = Random(8.0, 12.0); + FREQ_FLINCH = 20.0; + FREQ_CHANGE_STANCE = 20.0; + FREQ_TAUNT = 20.0; + FREQ_CHARGE = 20.0; + FREQ_PROJECTILE = 3.0; + FREQ_SHOCK_STORM = 30.0; + DMG_BURST = 100; + DMG_LUNGE = 200; + DMG_STAFF = 100; + DOT_FROST = 30; + DOT_SHOCK = 60; + ICE_CIRCLE_RAD = 172; + ICE_CIRCLE_FXRAD = 172; + CL_FX_SCRIPT = "monsters/elemental_ice_guardian_cl"; + SOUND_PROJECTILE = "magic/ice_strike.wav"; + SOUND_STAFF_ON = "magic/elecidle.wav"; + SOUND_SHOCK_LOOP = "magic/bolt_loop.wav"; + SOUND_SHOCK_START = "magic/bolt_start.wav"; + SOUND_SHOCK_HIT = "magic/bolt_end.wav"; + SOUND_STRUCK1 = "debris/glass1.wav"; + SOUND_STRUCK2 = "debris/glass2.wav"; + SOUND_STRUCK3 = "debris/glass3.wav"; + SOUND_SWIPE1 = "zombie/claw_miss1.wav"; + SOUND_SWIPE2 = "zombie/claw_miss2.wav"; + SOUND_SWIPE_STRONG1 = "zombie/claw_strike1.wav"; + SOUND_SWIPE_STRONG2 = "zombie/claw_strike2.wav"; + SOUND_SWIPE_STRONG3 = "zombie/claw_strike3.wav"; + SOUND_ATTACK1 = "monsters/ice_guardian/c_elemwatr_atk1.wav"; + SOUND_ATTACK2 = "monsters/ice_guardian/c_elemwatr_atk2.wav"; + SOUND_ATTACK3 = "monsters/ice_guardian/c_elemwatr_atk3.wav"; + SOUND_TAUNT = "monsters/ice_guardian/c_elemwatr_bat1.wav"; + SOUND_ALERT = "monsters/ice_guardian/c_elemwatr_slct.wav"; + SOUND_SUMMON = "monsters/ice_guardian/c_elemwatr_bat2.wav"; + SOUND_DODGE = "monsters/ice_guardian/c_elemwatr_slct.wav"; + SOUND_PAIN1 = "monsters/ice_guardian/c_elemwatr_hit1.wav"; + SOUND_PAIN2 = "monsters/ice_guardian/c_elemwatr_hit2.wav"; + SOUND_DEATH = "monsters/ice_guardian/c_elemwatr_dead.wav"; + } + + void OnSpawn() override + { + SetName(ICE_GUARD_NAME); + SetHealth(ICE_GUARD_HP); + SetRace("demon"); + SetModel(ICE_GUARD_MODEL); + SetWidth(ICE_GUARD_WIDTH); + SetHeight(ICE_GUARD_HEIGHT); + SetRoam(true); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetDamageResistance("all", 0.5); + SetDamageResistance("cold", ICE_GUARD_ICE_VULN); + SetDamageResistance("fire", ICE_GUARD_FIRE_VULN); + SetDamageResistance("holy", 1.5); + SetBloodType("none"); + SetHearingSensitivity(6); + PlayAnim("once", ANIM_IDLE); + if (!(true)) return; + ATTACK_COUNT = 0; + STAFF_ON = 0; + IN_STANCE = 0; + NEXT_STANCE_CHANGE = GetGameTime(); + NEXT_STANCE_CHANGE += 20.0; + ScheduleDelayedEvent(0.1, "refresh_client_fx"); + ScheduleDelayedEvent(2.0, "finalize_npc"); + } + + void finalize_npc() + { + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + ATTACK_MOVERANGE = ATTACK_MOVERANGE_DEF; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + } + + void refresh_client_fx() + { + if (!(ICE_GUARD_LEVEL > 1)) return; + if (!(IsEntityAlive(GetOwner()))) return; + if (CL_FX_INDEX != "CL_FX_INDEX") + { + ClientEvent("update", "all", CL_FX_INDEX, "end_fx"); + } + ClientEvent("new", "all", CL_FX_SCRIPT, GetEntityIndex(GetOwner()), STAFF_ON); + CL_FX_INDEX = "game.script.last_sent_id"; + NEXT_CL_REFRESH = GetGameTime(); + NEXT_CL_REFRESH += 45.0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, 0))); + SetGravity(1); + ClientEvent("update", "all", CL_FX_INDEX, "guardian_death"); + CallExternal(GAME_MASTER, "gm_vanish_que", GetEntityIndex(GetOwner()), 3.0); + if ((SHOCK_STORM_ON)) + { + // svplaysound: svplaysound 3 0 SOUND_SHOCK_LOOP + EmitSound(3, 0, SOUND_SHOCK_LOOP); + Effect("beam", "update", SHOCK_STORM_BEAM_ID, "brightness", 0); + } + } + + void game_stopmoving() + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + + void npc_targetsighted() + { + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + refresh_client_fx(); + float GAME_TIME = GetGameTime(); + int RND_WARCRY = RandomInt(1, 2); + AS_ATTACKING = GAME_TIME; + AS_ATTACKING += 5.0; + SetRoam(false); + ScheduleDelayedEvent(2.0, "restore_roam"); + SetMoveDest(m_hAttackTarget); + if (RND_WARCRY == 1) + { + PlayAnim("critical", ANIM_ALERT); + } + if (RND_WARCRY == 2) + { + PlayAnim("critical", ANIM_TAUNT); + } + NEXT_STUN_BURST = GAME_TIME; + NEXT_STUN_BURST += FREQ_STUN_BURST; + NEXT_LUNGE = GAME_TIME; + NEXT_LUNGE += 1.0; + NEXT_CHARGE = GAME_TIME; + NEXT_CHARGE += FREQ_CHARGE; + NEXT_ICE_BALL = GAME_TIME; + NEXT_ICE_BALL += FREQ_ICE_BALL; + NEXT_ICE_CIRCLE = GAME_TIME; + NEXT_ICE_CIRCLE += FREQ_ICE_CIRCLE; + NEXT_STAFF_MODE_CHANGE = GAME_TIME; + NEXT_STAFF_MODE_CHANGE += FREQ_STAFF_MODE_CHANGE; + NEXT_METEOR = GAME_TIME; + NEXT_METEOR += FREQ_METEOR; + } + + void restore_roam() + { + SetRoam(true); + } + + void frame_alert() + { + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + } + + void frame_taunt() + { + EmitSound(GetOwner(), 0, SOUND_TAUNT, 10); + } + + void cycle_down() + { + DID_WARCRY = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + float GAME_TIME = GetGameTime(); + if (m_hAttackTarget == "unset") + { + if (GAME_TIME > NEXT_TARG_CHECK) + { + } + NEXT_TARG_CHECK = GAME_TIME; + NEXT_TARG_CHECK += Random(5.0, 20.0); + if (StringToLower(GetMapName()) == "shender_east") + { + } + Vector3 CHECK_POINT = Vector3(0, 0, -3760); + string CHECK_TARGS = FindEntitiesInSphere("player", 1024); + if (CHECK_TARGS != "none") + { + } + string CHECK_TARGS = /* TODO: $sort_entlist */ $sort_entlist(CHECK_TARGS, "range"); + string NEW_TARGET = GetToken(CHECK_TARGS, 0, ";"); + npcatk_settarget(NEW_TARGET); + } + if (ICE_GUARD_LEVEL > 1) + { + if (GAME_TIME > NEXT_CL_REFRESH) + { + } + refresh_client_fx(); + } + if (GAME_TIME > NEXT_STANCE_CHANGE) + { + NEXT_STANCE_CHANGE = GAME_TIME; + NEXT_STANCE_CHANGE += FREQ_STANCE_CHANGE; + IN_STANCE += 1; + if (IN_STANCE == 1) + { + ANIM_WALK = "run"; + ANIM_RUN = "walk"; + NPC_HACKED_MOVE_SPEED = SPEED_SLOW; + } + else + { + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + NPC_HACKED_MOVE_SPEED = SPEED_FAST; + IN_STANCE = 0; + } + } + if ((SUSPEND_AI)) return; + if (!(m_hAttackTarget != "unset")) return; + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if (TARG_RANGE < ATTACK_HITRANGE) + { + string L_TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string L_MY_ORG = GetEntityOrigin(GetOwner()); + string L_Z_DIFF = (L_MY_ORG).z; + L_Z_DIFF -= (L_TARG_ORG).z; + if (L_Z_DIFF > ATTACK_RANGE) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, -100)); + SetGravity(1); + } + else + { + if (L_Z_DIFF > 0) + { + } + SetGravity(0.5); + } + } + string MY_POS = GetEntityOrigin(GetOwner()); + string GROUND_HEIGHT = /* TODO: $get_ground_height */ $get_ground_height(MY_POS); + FLIGHT_HEIGHT = (MY_POS).z; + if (FLIGHT_HEIGHT > GROUND_HEIGHT) + { + FLIGHT_HEIGHT -= GROUND_HEIGHT; + } + else + { + GROUND_HEIGHT -= FLIGHT_HEIGHT; + FLIGHT_HEIGHT = GROUND_HEIGHT; + } + if (ICE_GUARD_LEVEL >= 2) + { + if (GAME_TIME > NEXT_CALM) + { + if ((BE_AGGRESSIVE)) + { + ATTACK_MOVERANGE = ATTACK_MOVERANGE_AGRO; + NPC_HACKED_MOVE_SPEED = SPEED_FAST; + } + else + { + ATTACK_MOVERANGE = ATTACK_MOVERANGE_DEF; + } + } + else + { + ATTACK_MOVERANGE = ATTACK_MOVERANGE_AGRO; + NPC_HACKED_MOVE_SPEED = SPEED_FAST; + } + } + if (TARG_RANGE > LUNGE_RANGE_MIN) + { + if (TARG_RANGE < LUNGE_RANGE_MAX) + { + } + if (GAME_TIME > NEXT_LUNGE) + { + } + ATTACK_HITRANGE = LUNGE_RANGE_MAX_HITRANGE; + ATTACK_RANGE = LUNGE_RANGE_MAX; + ANIM_ATTACK = ANIM_LUNGE; + } + if (GAME_TIME > NEXT_STUN_BURST) + { + if (FLIGHT_HEIGHT < 30) + { + } + ANIM_ATTACK = ANIM_STUN_BURST; + } + if (GAME_TIME > NEXT_CHARGE) + { + if (ICE_GUARD_LEVEL == 1) + { + } + if (TARG_RANGE > 300) + { + } + NEXT_CHARGE = GAME_TIME; + NEXT_CHARGE += FREQ_CHARGE; + PlayAnim("critical", ANIM_LUNGE); + PROJECTILE_LOOP_ON = 0; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 0)); + } + if (!(ICE_GUARD_LEVEL >= 2)) return; + if (ICE_GUARD_LEVEL == 3) + { + if (GAME_TIME > NEXT_STAFF_MODE_CHANGE) + { + } + NEXT_STAFF_MODE_CHANGE = GAME_TIME; + NEXT_STAFF_MODE_CHANGE += FREQ_STAFF_MODE_CHANGE; + staff_mode_switch(); + } + if (GAME_TIME > NEXT_ICE_BALL) + { + if (TARG_RANGE < 300) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + if ((BE_AGGRESSIVE)) + { + ATTACK_RANGE = 768; + ATTACK_HITRANGE = 768; + } + ANIM_ATTACK = ANIM_ICE_BALL; + if (!(CIRCLE_POS_SET)) + { + FIRE_CIRCLE_POS = NPC_LASTSEEN_POS; + CIRCLE_POS_SET = 1; + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_ICE_CIRCLE) + { + if (GUARD_TYPE == "ice") + { + if ((false)) + { + } + if (!(ICE_CIRCLE_ACTIVE)) + { + } + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + if ((BE_AGGRESSIVE)) + { + ATTACK_RANGE = 768; + } + ANIM_ATTACK = ANIM_SUMMON; + SUMMON_TYPE = "circle"; + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (ICE_GUARD_LEVEL == 2) + { + if (GAME_TIME > NEXT_PROJECTILE) + { + } + if ((false)) + { + } + if (TARG_RANGE > LUNGE_RANGE_MAX) + { + } + if (TARG_RANGE < 300) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + ANIM_ATTACK = ANIM_PROJECTILE; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (ICE_GUARD_LEVEL == 3) + { + if (GUARD_ELEMENT == "ice") + { + if (GAME_TIME > NEXT_PROJECTILE) + { + } + if ((false)) + { + } + if (TARG_RANGE > LUNGE_RANGE_MAX) + { + } + if (TARG_RANGE < 300) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + ANIM_ATTACK = ANIM_MULTI_PROJECTILE; + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_METEOR) + { + if (GUARD_ELEMENT == "fire") + { + NEXT_METEOR = GAME_TIME; + NEXT_METEOR += FREQ_METEOR; + if (TARG_RANGE < 300) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + METEOR_MODE = 1; + ANIM_ATTACK = ANIM_ICE_BALL; + int EXIT_SUB = 1; + delay_specials(); + } + if (!(EXIT_SUB)) + { + } + } + if (ICE_GUARD_LEVEL == 3) + { + if (GAME_TIME > NEXT_SHOCK_STORM) + { + } + NEXT_SHOCK_STORM = GAME_TIME; + NEXT_SHOCK_STORM += FREQ_SHOCK_STORM; + if ((SHOCK_MODE)) + { + } + if (TARG_RANGE < 300) + { + if (GUARD_ELEMENT == "ice") + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + PROJECTILE_LOOP_ON = 0; + PlayAnim("critical", ANIM_SPELL_LOOP); + npcatk_suspend_ai(10.0); + npcatk_suspend_movement(ANIM_SPELL_LOOP, 10.0); + do_shock_storm(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + } + + void frame_multi_projectile_start() + { + NEXT_PROJECTILE = GetGameTime(); + NEXT_PROJECTILE += FREQ_PROJECTILE; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + PROJ_SPEED = 1500; + HIT_DELAY = 0.2; + PROJECTILE_LOOP_ON = 1; + ScheduleDelayedEvent(5.0, "frame_multi_projectile_end"); + projectile_loop(); + } + + void frame_multi_projectile_end() + { + if (!(PROJECTILE_LOOP_ON)) return; + PROJECTILE_LOOP_ON = 0; + } + + void projectile_loop() + { + if (!(PROJECTILE_LOOP_ON)) return; + do_projectile(); + ScheduleDelayedEvent(0.3, "projectile_loop"); + } + + void frame_projectile() + { + NEXT_PROJECTILE = GetGameTime(); + NEXT_PROJECTILE += FREQ_PROJECTILE; + PROJ_SPEED = 800; + HIT_DELAY = 0.5; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + do_projectile(); + } + + void do_projectile() + { + if (GUARD_ELEMENT == "ice") + { + EmitSound(GetOwner(), 0, SOUND_PROJECTILE, 10); + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = GetEntityOrigin(m_hAttackTarget); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + string TARG_ANG = /* TODO: $angles3d */ $angles3d(TRACE_START, TRACE_LINE); + TARG_ANG = "x"; + if (GetEntityRange(m_hAttackTarget) < 300) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + if (TRACE_LINE == TRACE_END) + { + int HIT_TARGET = 1; + } + ClientEvent("update", "all", CL_FX_INDEX, "fire_projectile", TARG_ANG, TRACE_END, HIT_TARGET, PROJ_SPEED); + if ((HIT_TARGET)) + { + } + HIT_DELAY("projectile_strike"); + } + if (GUARD_ELEMENT == "fire") + { + TossProjectile("proj_flame_jet2", /* TODO: $relpos */ $relpos(0, 16, 16), m_hAttackTarget, 300, DMG_SPIT, 2, "none"); + ClientEvent("update", "all", CL_FX_INDEX, "staff_glow"); + } + } + + void projectile_strike() + { + DoDamage(m_hAttackTarget, "direct", DMG_STAFF, 1.0, GetOwner()); + if (ICE_GUARD_LEVEL == 2) + { + if (RandomInt(1, 3) == 1) + { + ApplyEffect(m_hAttackTarget, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + } + if (GUARD_ELEMENT == "ice") + { + if (ICE_GUARD_LEVEL == 3) + { + if (RandomInt(1, 5) == 1) + { + ApplyEffect(m_hAttackTarget, "effects/dot_cold_freeze", 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + else + { + ApplyEffect(m_hAttackTarget, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + } + } + } + + void frame_summon() + { + NEXT_ICE_CIRCLE = GetGameTime(); + NEXT_ICE_CIRCLE += FREQ_ICE_CIRCLE; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + if (SUMMON_TYPE == "circle") + { + if ((IsEntityAlive(m_hAttackTarget))) + { + } + if ((false)) + { + } + do_ice_circle(GetEntityOrigin(m_hAttackTarget)); + delay_specials(); + } + } + + void frame_spell() + { + NEXT_ICE_BALL = GetGameTime(); + NEXT_ICE_BALL += FREQ_ICE_BALL; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((METEOR_MODE)) + { + METEOR_MODE = 0; + int EXIT_SUB = 1; + string SPELL_POS = GetEntityOrigin(m_hAttackTarget); + string TRACE_START = SPELL_POS; + string TRACE_END = SPELL_POS; + TRACE_END += "z"; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + string METEOR_SPAWN = TRACE_LINE; + METEOR_SPAWN += "z"; + SpawnNPC("monsters/summon/meteor_deployer", METEOR_SPAWN, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()) + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + } + if ((EXIT_SUB)) return; + if (GUARD_ELEMENT == "ice") + { + if (FLIGHT_HEIGHT > 100) + { + TossProjectile("proj_freezing_sphere", /* TODO: $relpos */ $relpos(0, 16, 16), m_hAttackTarget, 100, 0, 0, "none"); + } + else + { + PASS_FREEZE_DMG = DOT_FROST; + PASS_FREEZE_DUR = 8.0; + SetMoveDest(m_hAttackTarget); + SetAngles("view.pitch"); + SetAngles("view.roll"); + SetAngles("view.yaw"); + TossProjectile("proj_freezing_sphere", /* TODO: $relpos */ $relpos(0, 16, 16), "none", 100, 0, 0, "none"); + } + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + } + if (GUARD_ELEMENT == "fire") + { + if (FIRE_CIRCLE_POS == "unset") + { + CIRCLE_POS_SET = 0; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + } + else + { + BURST_POS = FIRE_CIRCLE_POS; + BURST_POS = "z"; + ClientEvent("new", "all", "effects/sfx_fire_staff", BURST_POS); + BURST_POS += "z"; + XDoDamage(BURST_POS, 96, DMG_FIRE_BURST, 0.01, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:burst"); + CIRCLE_POS_SET = 0; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + } + } + } + + void burst_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = BURST_POS; + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, VEL_FBURST_F, 110))); + } + + void flamejet_dodamage() + { + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + + void frame_attack() + { + // PlayRandomSound from: SOUND_SWIPE1, SOUND_SWIPE2 + array sounds = {SOUND_SWIPE1, SOUND_SWIPE2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + MELEE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_STAFF, 0.9, "slash"); + ATTACK_COUNT += 1; + string DIV_ATTACK_COUNT = ATTACK_COUNT; + DIV_ATTACK_COUNT /= 2; + LogDebug("DIV_ATTACK_COUNT vs. int(DIV_ATTACK_COUNT) [ FLIGHT_HEIGHT ]"); + if (DIV_ATTACK_COUNT == int(DIV_ATTACK_COUNT)) + { + ANIM_ATTACK = ANIM_ATTACK1; + } + else + { + ANIM_ATTACK = ANIM_ATTACK2; + } + if (ATTACK_COUNT == 5) + { + ATTACK_COUNT += 1; + ANIM_ATTACK = ANIM_PUSH; + } + if (ATTACK_COUNT >= 10) + { + ATTACK_COUNT = 0; + ANIM_ATTACK = ANIM_THROW; + } + } + + void frame_attack_push() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + // PlayRandomSound from: SOUND_SWIPE1, SOUND_SWIPE2 + array sounds = {SOUND_SWIPE1, SOUND_SWIPE2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + ANIM_ATTACK = "attack1"; + MELEE_ATTACK = 1; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_LUNGE, 1.0, GetOwner(), GetOwner(), "blunt", "none", "dmgevent:pushatk"); + } + + void pushatk_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (!(SHOCK_MODE)) + { + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + else + { + ApplyEffect(param2, STAFF_ALT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + } + MELEE_ATTACK = 0; + if (!(param1)) return; + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, VEL_PUSH_ATK_F, 110)); + } + + void frame_attack_throw() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + // PlayRandomSound from: SOUND_SWIPE_STRONG1, SOUND_SWIPE_STRONG2, SOUND_SWIPE_STRONG3 + array sounds = {SOUND_SWIPE_STRONG1, SOUND_SWIPE_STRONG2, SOUND_SWIPE_STRONG3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + ANIM_ATTACK = "attack1"; + ATTACK_COUNT += 1; + MELEE_ATTACK = 1; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_LUNGE, 1.0, GetOwner(), GetOwner(), "blunt", "none", "dmgevent:throwatk"); + } + + void throwatk_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (!(SHOCK_MODE)) + { + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + else + { + ApplyEffect(param2, STAFF_ALT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + } + MELEE_ATTACK = 0; + if (!(param1)) return; + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(VEL_THROW_ATK_L, VEL_THROW_ATK_F, 200)); + ApplyEffect(CUR_TARG, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + + void frame_smash() + { + NEXT_STUN_BURST = GetGameTime(); + NEXT_STUN_BURST += FREQ_STUN_BURST; + delay_specials(); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + ANIM_ATTACK = "attack1"; + BURST_START = /* TODO: $relpos */ $relpos(0, 64, 0); + ClientEvent("new", "all", "effects/sfx_stun_burst", BURST_START, 256, 0); + BURST_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(BURST_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + burst_affect_targets(); + } + } + + void burst_affect_targets() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/debuff_stun", 8.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = BURST_START; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + XDoDamage(CUR_TARG, "direct", DMG_BURST, 1.0, GetOwner(), GetOwner(), "none", "blunt"); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, VEL_BURST_F, VEL_BURST_U))); + } + + void frame_long_attack() + { + NEXT_LUNGE = GetGameTime(); + NEXT_LUNGE += FREQ_LUNGE; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + // PlayRandomSound from: SOUND_SWIPE1, SOUND_SWIPE2 + array sounds = {SOUND_SWIPE1, SOUND_SWIPE2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ANIM_ATTACK = "attack1"; + MELEE_ATTACK = 1; + XDoDamage(m_hAttackTarget, LUNGE_RANGE_MAX, DMG_LUNGE, 0.9, GetOwner(), GetOwner(), "slash", "none", "dmgevent:longatk"); + } + + void longatk_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (!(SHOCK_MODE)) + { + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + else + { + ApplyEffect(param2, STAFF_ALT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + } + MELEE_ATTACK = 0; + if (!(param1)) return; + float RND_RL = Random(-200.0, 100.0); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(RND_RL, VEL_LONG_F, 110)); + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (!(SHOCK_MODE)) + { + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + else + { + ApplyEffect(param2, STAFF_ALT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + } + MELEE_ATTACK = 0; + } + + void delay_specials() + { + float GAME_TIME = GetGameTime(); + string TIME_PLUS5 = GAME_TIME; + TIME_PLUS5 += 5.0; + if (TIME_PLUS5 > NEXT_STUN_BURST) + { + NEXT_STUN_BURST = GAME_TIME; + NEXT_STUN_BURST += Random(1.0, 5.0); + } + if (TIME_PLUS5 > NEXT_CHARGE) + { + NEXT_CHARGE = GAME_TIME; + NEXT_CHARGE += Random(1.0, 5.0); + } + if (TIME_PLUS5 > NEXT_ICE_BALL) + { + NEXT_ICE_BALL = GAME_TIME; + NEXT_ICE_BALL += Random(1.0, 5.0); + } + if (TIME_PLUS5 > NEXT_ICE_CIRCLE) + { + NEXT_ICE_CIRCLE = GAME_TIME; + NEXT_ICE_CIRCLE += Random(1.0, 5.0); + } + if (TIME_PLUS5 > NEXT_PROJECTILE) + { + NEXT_PROJECTILE = GAME_TIME; + NEXT_PROJECTILE += Random(1.0, 5.0); + } + if (TIME_PLUS5 > NEXT_METEOR) + { + NEXT_METEOR = GAME_TIME; + NEXT_METEOR += Random(1.0, 5.0); + } + } + + void OnDamage(int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_CALM = GetGameTime(); + NEXT_CALM += 5.0; + if (GetGameTime() > NEXT_DODGE) + { + NEXT_DODGE = GetGameTime(); + NEXT_DODGE += FREQ_DODGE; + PlayAnim("critical", ANIM_DODGE); + PROJECTILE_LOOP_ON = 0; + DODGE_TARGET = param1; + } + if (GetEntityHealth(GetOwner()) < HALF_HP) + { + if (GetGameTime() > NEXT_FLINCH) + { + } + NEXT_FLINCH = GetGameTime(); + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_FLINCH += FREQ_FLINCH; + ANIM_IDLE = "idle_scared"; + SetIdleAnim("idle_scared"); + PlayAnim("critical", ANIM_FLINCH_CUSTOM); + PROJECTILE_LOOP_ON = 0; + if (!(BE_AGGRESSIVE)) + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -600, 150)); + } + } + } + + void frame_attack_pushr() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(-300, -100, 0)); + EmitSound(GetOwner(), 0, SOUND_DODGE, 10); + if (!(IsEntityAlive(DODGE_TARGET))) return; + if (GetEntityRange(DODGE_TARGET) < 200) + { + AddVelocity(DODGE_TARGET, /* TODO: $relvel */ $relvel(VEL_DODGE_L, VEL_DODGE_F, 110)); + } + } + + void my_target_died() + { + if (!(GetGameTime() > NEXT_TAUNT)) return; + NEXT_TAUNT = GetGameTime(); + NEXT_TAUNT += FREQ_TAUNT; + PlayAnim("critical", ANIM_TAUNT); + PROJECTILE_LOOP_ON = 0; + } + + void do_ice_circle() + { + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + ICE_CIRCLE_ACTIVE = 1; + ICE_CIRCLE_ORIGIN = param1; + ICE_CIRCLE_ORIGIN = "z"; + ClientEvent("new", "all", "effects/sfx_seal", ICE_CIRCLE_ORIGIN, ICE_CIRCLE_FXRAD, 8, 15.0, "freeze_solid"); + ScheduleDelayedEvent(1.0, "ice_circle_loop"); + ScheduleDelayedEvent(15.0, "ice_circle_end"); + } + + void ice_circle_end() + { + ICE_CIRCLE_ACTIVE = 0; + } + + void ice_circle_loop() + { + if (!(ICE_CIRCLE_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "ice_circle_loop"); + CIRCLE_TARGS = FindEntitiesInSphere("enemy", ICE_CIRCLE_RAD); + if (!(CIRCLE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(CIRCLE_TARGS, ";"); i++) + { + circle_affect_targets(); + } + } + + void circle_affect_targets() + { + string CUR_TARG = GetToken(CIRCLE_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", 8.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + + void staff_mode_switch() + { + if (!(SHOCK_MODE)) + { + SHOCK_MODE = 1; + EmitSound(GetOwner(), 0, SOUND_STAFF_ON, 10); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 3, STAFF_BEAM_COLOR, 200, 10, FREQ_STAFF_MODE_CHANGE); + } + else + { + SHOCK_MODE = 0; + } + } + + void do_shock_storm() + { + delay_specials(); + SHOCK_STORM_ON = 1; + if (GUARD_ELEMENT == "ice") + { + ClientEvent("update", "all", CL_FX_INDEX, "shock_storm_on"); + shock_storm_loop(); + ScheduleDelayedEvent(10.0, "shock_storm_end"); + Effect("beam", "ents", "lgtning.spr", 60, GetOwner(), 2, GetOwner(), 4, Vector3(128, 128, 255), 200, 60, 10.0); + SHOCK_STORM_BEAM_ID = GetEntityIndex(m_hLastCreated); + SHOCK_TARGS = FindEntitiesInSphere("enemy", 1024); + EmitSound(GetOwner(), 1, SOUND_SHOCK_START, 10); + // svplaysound: svplaysound 3 10 SOUND_SHOCK_LOOP + EmitSound(3, 10, SOUND_SHOCK_LOOP); + CUR_SHOCK_TARG_IDX = 0; + } + if (GUARD_ELEMENT == "fire") + { + npcatk_suspend_roam(10.0); + SetNoPush(true); + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = TRACE_START; + TRACE_END += "z"; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + ClientEvent("update", "all", CL_FX_INDEX, "poison_storm_on", (TRACE_LINE).z); + poison_storm_loop(); + ScheduleDelayedEvent(10.0, "poison_storm_end"); + Effect("beam", "ents", "lgtning.spr", 60, GetOwner(), 2, GetOwner(), 4, STAFF_BEAM_COLOR, 200, 60, 10.0); + SHOCK_STORM_BEAM_ID = GetEntityIndex(m_hLastCreated); + EmitSound(GetOwner(), 1, SOUND_SHOCK_START, 10); + CUR_SHOCK_TARG_IDX = 0; + } + } + + void poison_storm_loop() + { + if (!(SHOCK_STORM_ON)) return; + ScheduleDelayedEvent(0.5, "poison_storm_loop"); + STORM_TARGS = FindEntitiesInSphere("enemy", 768); + if (!(STORM_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(STORM_TARGS, ";"); i++) + { + poison_storm_affect_targets(); + } + } + + void poison_storm_affect_targets() + { + string CUR_TARG = GetToken(STORM_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), FLAME_JET_DOT); + } + + void poison_storm_end() + { + SetNoPush(false); + SHOCK_STORM_ON = 0; + // svplaysound: svplaysound 3 0 SOUND_SHOCK_LOOP + EmitSound(3, 0, SOUND_SHOCK_LOOP); + ClientEvent("update", "all", CL_FX_INDEX, "poison_storm_end"); + delay_specials(); + } + + void shock_storm_loop() + { + if (!(SHOCK_STORM_ON)) return; + ScheduleDelayedEvent(0.5, "shock_storm_loop"); + if (!(SHOCK_TARGS != "none")) return; + string N_SHOCK_TARGS_M1 = GetTokenCount(SHOCK_TARGS, ";"); + N_SHOCK_TARGS_M1 -= 1; + if (CUR_SHOCK_TARG_IDX > N_SHOCK_TARGS_M1) + { + CUR_SHOCK_TARG_IDX = 0; + } + string CUR_TARG = GetToken(SHOCK_TARGS, CUR_SHOCK_TARG_IDX, ";"); + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = GetEntityOrigin(CUR_TARG); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (TRACE_LINE == TRACE_END) + { + EmitSound(GetOwner(), 0, SOUND_SHOCK_HIT, 10); + string L_DOT_SHOCK = DOT_SHOCK; + L_DOT_SHOCK *= 2; + XDoDamage(CUR_TARG, "direct", L_DOT_SHOCK, 1.0, GetOwner(), GetOwner(), "none", "lightning"); + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, VEL_SHOCK_F, 110))); + Effect("beam", "update", SHOCK_STORM_BEAM_ID, "end_target", CUR_TARG); + Effect("beam", "update", SHOCK_STORM_BEAM_ID, "brightness", 200); + } + else + { + Effect("beam", "update", SHOCK_STORM_BEAM_ID, "end_target", GetOwner()); + Effect("beam", "update", SHOCK_STORM_BEAM_ID, "brightness", 0); + } + CUR_SHOCK_TARG_IDX += 1; + } + + void shock_storm_end() + { + SHOCK_STORM_ON = 0; + // svplaysound: svplaysound 3 0 SOUND_SHOCK_LOOP + EmitSound(3, 0, SOUND_SHOCK_LOOP); + ClientEvent("update", "all", CL_FX_INDEX, "shock_storm_end"); + delay_specials(); + } + + void ext_shender_fail() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void set_agro() + { + BE_AGGRESSIVE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_ice_guardian2.as b/scripts/angelscript/monsters/elemental_ice_guardian2.as new file mode 100644 index 00000000..4be45124 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_ice_guardian2.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "monsters/elemental_ice_guardian.as" + +namespace MS +{ + +class ElementalIceGuardian2 : CGameScript +{ + int ATTACK_MOVERANGE_DEF; + int DMG_BURST; + int DMG_LUNGE; + int DMG_STAFF; + int DOT_FROST; + float FREQ_PROJECTILE; + int ICE_GUARD_HEIGHT; + int ICE_GUARD_HP; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int NPC_BASE_EXP; + string NPC_EXP_REDUCT; + string NPC_IS_BOSS; + + ElementalIceGuardian2() + { + ICE_GUARD_NAME = "Ice Guardian"; + ICE_GUARD_HP = 6000; + ICE_GUARD_LEVEL = 2; + ICE_GUARD_MODEL = "monsters/ice_guardian.mdl"; + ICE_GUARD_WIDTH = 32; + ICE_GUARD_HEIGHT = 96; + NPC_BASE_EXP = 3000; + if (StringToLower(GetMapName()) == "tundra") + { + NPC_IS_BOSS = 1; + NPC_EXP_REDUCT = 1.5; + } + DMG_BURST = 200; + DMG_LUNGE = 250; + DMG_STAFF = 150; + DOT_FROST = 75; + ATTACK_MOVERANGE_DEF = 200; + FREQ_PROJECTILE = 3.0; + } + + void game_precache() + { + Precache("effects/sfx_seal"); + Precache("firemagic_8bit.spr"); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_ice_guardian3.as b/scripts/angelscript/monsters/elemental_ice_guardian3.as new file mode 100644 index 00000000..f627f9eb --- /dev/null +++ b/scripts/angelscript/monsters/elemental_ice_guardian3.as @@ -0,0 +1,80 @@ +#pragma context server + +#include "monsters/elemental_ice_guardian.as" + +namespace MS +{ + +class ElementalIceGuardian3 : CGameScript +{ + int ATTACK_HITRANGE_DEF; + int ATTACK_MOVERANGE_AGRO; + int ATTACK_MOVERANGE_DEF; + int ATTACK_RANGE_DEF; + int DMG_BURST; + int DMG_LUNGE; + int DMG_STAFF; + int DOT_FROST; + int DOT_SHOCK; + float FREQ_PROJECTILE; + int ICE_GUARD_HEIGHT; + int ICE_GUARD_HP; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int LUNGE_RANGE_MAX; + int LUNGE_RANGE_MAX_HITRANGE; + int LUNGE_RANGE_MIN; + int NPC_BASE_EXP; + string NPC_EXP_REDUCT; + string NPC_IS_BOSS; + string OFS_ICE_BALL; + + ElementalIceGuardian3() + { + ICE_GUARD_NAME = "Greater Ice Guardian"; + ICE_GUARD_HP = 8000; + ICE_GUARD_LEVEL = 3; + ICE_GUARD_MODEL = "monsters/ice_guardian2.mdl"; + ICE_GUARD_WIDTH = 48; + ICE_GUARD_HEIGHT = 120; + NPC_BASE_EXP = 10000; + if (StringToLower(GetMapName()) == "tundra") + { + NPC_IS_BOSS = 1; + NPC_EXP_REDUCT = 1.5; + } + SetDamageResistance("lightning", 0.0); + DMG_BURST = 300; + DMG_LUNGE = 300; + DMG_STAFF = 200; + DOT_FROST = 100; + DOT_SHOCK = 200; + ATTACK_MOVERANGE_DEF = 256; + ATTACK_MOVERANGE_AGRO = 70; + ATTACK_RANGE_DEF = 90; + ATTACK_HITRANGE_DEF = 120; + LUNGE_RANGE_MIN = 100; + LUNGE_RANGE_MAX = 225; + LUNGE_RANGE_MAX_HITRANGE = 175; + FREQ_PROJECTILE = Random(8.0, 12.0); + OFS_ICE_BALL = Vector3(0, 16, 80); + } + + void game_precache() + { + Precache("effects/sfx_seal"); + Precache("firemagic_8bit.spr"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(StringToLower(GetMapName()) == "shender_east")) return; + if (!("game.players.totalhp" < 3000)) return; + CallExternal(GAME_MASTER, "map_shender_east_dream_win"); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_ice_guardian_cl.as b/scripts/angelscript/monsters/elemental_ice_guardian_cl.as new file mode 100644 index 00000000..8e62f64e --- /dev/null +++ b/scripts/angelscript/monsters/elemental_ice_guardian_cl.as @@ -0,0 +1,238 @@ +#pragma context server + +namespace MS +{ + +class ElementalIceGuardianCl : CGameScript +{ + int DEATH_MODE; + string DRESS_SPRITE; + int DRESS_SPRITE_NFRAMES; + int FX_ACTIVE; + string FX_OWNER; + string OWNER_VEL; + string PROJECTILE_ANGLES; + string PROJECTILE_END; + string PROJECTILE_SPEED; + int SHOCK_STORM_ON; + string STAFF_LOOP_ACTIVE; + string STAFF_ON; + string STAFF_POS; + + ElementalIceGuardianCl() + { + DRESS_SPRITE = "char_breath.spr"; + DRESS_SPRITE_NFRAMES = 30; + } + + void client_activate() + { + FX_OWNER = param1; + STAFF_ON = param2; + LogDebug("ice_cl FX_OWNER STAFF_ON"); + FX_ACTIVE = 1; + ScheduleDelayedEvent(45.0, "end_fx"); + dress_sprite_loop(); + } + + void guardian_death() + { + DEATH_MODE = 1; + ScheduleDelayedEvent(1.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void dress_sprite_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "dress_sprite_loop"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + OWNER_VEL = /* TODO: $getcl */ $getcl(FX_OWNER, "velocity"); + OWNER_VEL *= 0.1; + ClientEffect("tempent", "sprite", DRESS_SPRITE, SPR_POS, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", DRESS_SPRITE, SPR_POS, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", DRESS_SPRITE, SPR_POS, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", DRESS_SPRITE, SPR_POS, "setup_cloud", "update_cloud"); + } + + void fire_projectile() + { + PROJECTILE_ANGLES = param1; + string PROJECTILE_HIT = param3; + PROJECTILE_SPEED = param4; + if (!(PROJECTILE_HIT)) + { + PROJECTILE_END = param2; + ScheduleDelayedEvent(0.5, "fire_projectile_miss_sound"); + } + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + if (!(STAFF_LOOP_ACTIVE)) + { + STAFF_LOOP_ACTIVE = 1; + ScheduleDelayedEvent(10.0, "staff_track_end"); + staff_track_loop(); + } + ClientEffect("tempent", "model", "weapons/projectiles.mdl", SPR_POS, "setup_projectile"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPR_POS, "setup_staff_glow", "update_staff_glow"); + } + + void shock_storm_on() + { + if (!(STAFF_LOOP_ACTIVE)) + { + staff_track_loop(); + } + SHOCK_STORM_ON = 1; + } + + void shock_storm_end() + { + SHOCK_STORM_ON = 0; + staff_track_end(); + } + + void shock_storm_loop() + { + if (!(SHOCK_STORM_ON)) return; + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "shock_storm_loop"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPR_POS, "setup_staff_glow", "update_staff_glow"); + } + + void staff_track_loop() + { + if (!(STAFF_LOOP_ACTIVE)) return; + ScheduleDelayedEvent(0.01, "staff_track_loop"); + STAFF_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + } + + void staff_track_end() + { + STAFF_LOOP_ACTIVE = 0; + } + + void fire_projectile_miss_sound() + { + EmitSound3D("weapons/dagger/daggermetal2.wav", 10, PROJECTILE_END); + } + + void update_staff_glow() + { + ClientEffect("tempent", "set_current_prop", "origin", STAFF_POS); + string CUR_SIZE = "game.tempent.fuser1"; + CUR_SIZE -= 0.01; + if (CUR_SIZE > 0) + { + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + if (CUR_SIZE == 0) + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + } + + void setup_staff_glow() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "fade", "lifetime"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 128, 255)); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "fuser1", 1.0); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void setup_projectile() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.5); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string L_PROJECTILE_ANGLES = PROJECTILE_ANGLES; + L_PROJECTILE_ANGLES = "x"; + ClientEffect("tempent", "set_current_prop", "angles", L_PROJECTILE_ANGLES); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(PROJECTILE_ANGLES, Vector3(0, PROJECTILE_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "body", 38); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 40); + ClientEffect("tempent", "set_current_prop", "sequence", 15); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "framerate", 60); + ClientEffect("tempent", "set_current_prop", "frames", DRESS_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.05); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 230, 255)); + if (!(DEATH_MODE)) + { + ClientEffect("tempent", "set_current_prop", "gravity", 0.5); + } + else + { + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + } + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.05); + if (!(DEATH_MODE)) + { + float RND_PITCH = Random(70, 110); + float RND_ANG = Random(0, 359.99); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(RND_PITCH, RND_ANG, 0)); + string CLOUD_VEL = OWNER_VEL; + CLOUD_VEL += /* TODO: $relvel */ $relvel(Vector3(RND_PITCH, RND_ANG, 0), Vector3(0, 10, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + else + { + float RND_ANG = Random(0, 359.99); + float RND_PITCH = Random(0, 359.99); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(RND_PITCH, RND_ANG, 0)); + string CLOUD_VEL = OWNER_VEL; + CLOUD_VEL += /* TODO: $relvel */ $relvel(Vector3(RND_PITCH, RND_ANG, 0), Vector3(0, 50, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + } + + void update_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < 1.5) + { + CUR_SCALE += 0.025; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + if (!(DEATH_MODE)) return; + string CUR_VEL = "game.tempent.velocity"; + string CUR_ANG = "game.tempent.angles"; + CUR_VEL += /* TODO: $relvel */ $relvel(CUR_ANG, Vector3(0, 50, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", CUR_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_pure_cl.as b/scripts/angelscript/monsters/elemental_pure_cl.as new file mode 100644 index 00000000..7c50f5a2 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_pure_cl.as @@ -0,0 +1,144 @@ +#pragma context server + +namespace MS +{ + +class ElementalPureCl : CGameScript +{ + string BONE_IDX; + int FX_ACTIVE; + string FX_COLOR; + string FX_DURATION; + string FX_LIGHT; + string FX_OWNER; + string FX_TYPE; + int MAX_BONE; + int OWNER_DIED; + + ElementalPureCl() + { + MAX_BONE = 17; + } + + void client_activate() + { + FX_OWNER = param1; + FX_COLOR = param2; + FX_TYPE = param3; + FX_DURATION = param4; + FX_ACTIVE = 1; + LogDebug("$currentscript client_activate own FX_OWNER col FX_COLOR typ FX_TYPE dur FX_DURATION"); + SetCallback("render", "enable"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), 64, FX_COLOR, 0.1); + FX_LIGHT = "game.script.last_light_id"; + skeleton_sprite(); + FX_DURATION("end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void owner_death() + { + OWNER_DIED = 1; + ScheduleDelayedEvent(3.0, "end_fx"); + } + + void game_prerender() + { + if (!(FX_LIGHT > 0)) return; + ClientEffect("light", FX_LIGHT, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), 64, AU_COLOR, 0.1); + } + + void skeleton_sprite() + { + if (FX_TYPE == "fire") + { + array ARRAY_BONEPOS; + for (int i = 0; i < MAX_BONE; i++) + { + light_bones_fire(); + } + } + } + + void light_bones_fire() + { + LogDebug("light_bones_fire"); + BONE_IDX = i; + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "bonepos", BONE_IDX); + ClientEffect("tempent", "sprite", "3dmflaora.spr", L_POS, "setup_bone_sprite", "update_bone_sprite"); + } + + void setup_bone_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "renderamt", 150); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "iuser1", BONE_IDX); + float L_CREATE_TIME = GetGameTime(); + ClientEffect("tempent", "set_current_prop", "fuser1", (L_CREATE_TIME + 0.1)); + } + + void update_bone_sprite() + { + if ((FX_ACTIVE)) + { + if (!(OWNER_DIED)) + { + string L_IDX = "game.tempent.iuser1"; + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "bonepos", L_IDX); + ClientEffect("tempent", "set_current_prop", "origin", L_POS); + string L_NEXT_UPDATE = "game.tempent.fuser1"; + float L_TIME = GetGameTime(); + if (L_TIME > L_NEXT_UPDATE) + { + } + ClientEffect("tempent", "set_current_prop", "fuser1", (L_TIME + 0.1)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", L_POS, "setup_drip_sprite"); + } + else + { + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, -100)); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + } + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 20000)); + } + } + + void setup_drip_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.25); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "renderamt", 150); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/elemental_pure_fire.as b/scripts/angelscript/monsters/elemental_pure_fire.as new file mode 100644 index 00000000..ed07b2b3 --- /dev/null +++ b/scripts/angelscript/monsters/elemental_pure_fire.as @@ -0,0 +1,432 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" +#include "monsters/base_struck.as" +#include "monsters/base_flyer_grav.as" + +namespace MS +{ + +class ElementalPureFire : CGameScript +{ + float ACCURACY_STRIKE; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_PROJECTILE; + string ANIM_RUN; + string ANIM_WALK; + string ARCH_COUNT_GUIDED; + int AS_SUMMON_TELE_CHECK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string CL_FX_SCRIPT; + string CL_IDX; + string DID_INTRO; + int DMG_AMB_BURN; + int DMG_BASE; + int DMG_FIRE_BALL; + int DMG_FIRE_BOLT; + string DMG_PROJ; + int DMG_STRIKE; + string DOT1_DMG; + float DOT1_DURATION; + string DOT1_ID; + string DOT1_SCRIPT; + string DOT2_DMG; + float DOT2_DURATION; + string DOT2_ID; + string DOT2_SCRIPT; + int DOT_STACK; + int DOT_STRIKE; + int EFFECT_NO_GLOW_SHELLS; + int ELEMENTAL_EXP; + string ELEMENT_SEAL_IDX; + string ELM_COLOR; + string ELM_TYPE; + float FREQ_CL_REFRESH; + float FREQ_SPECIAL; + int GAME_NO_CORPSE; + int IMMUNE_VAMPIRE; + int IS_BLOODLESS; + int IS_UNHOLY; + int MELEE_RANGE; + int MOVESPEED_FAST; + int MOVESPEED_SLOW; + int MOVE_RANGE; + string NEXT_CL_REFRESH; + string NEXT_LOOP_SOUND; + string NEXT_SEAL; + float NPC_FLINCH_HEALTH_RATIO; + string NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + int NPC_NO_ATTACK; + int NPC_PITCH_PAIN; + int NPC_USE_FLINCH; + string PROJECTILE1_SCRIPT; + string PROJECTILE2_SCRIPT; + int PROJ_GUIDED; + int PROJ_NO_SPRITES; + string SEAL_POS; + string SOUND_DEATH; + string SOUND_FIRECHARGE; + string SOUND_FIRESHOOT; + string SOUND_FIRESHOOT2; + string SOUND_GLOAT; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWIPE; + string SOUND_SWIPEHIT; + + ElementalPureFire() + { + AS_SUMMON_TELE_CHECK = 1; + EFFECT_NO_GLOW_SHELLS = 1; + ANIM_IDLE = "idle1"; + ANIM_WALK = "idle1"; + ANIM_RUN = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_FLINCH = "flinch"; + ANIM_DEATH = "die1"; + ANIM_ATTACK = "attack1"; + ANIM_PROJECTILE = "fireball"; + IS_UNHOLY = 1; + IS_BLOODLESS = 1; + IMMUNE_VAMPIRE = 1; + ATTACK_RANGE = 1024; + ATTACK_HITRANGE = 1024; + MOVE_RANGE = 512; + NPC_HACKED_MOVE_SPEED = 100; + MOVESPEED_SLOW = 100; + MOVESPEED_FAST = 200; + DMG_STRIKE = RandomInt(175, 250); + DOT_STRIKE = RandomInt(60, 80); + ACCURACY_STRIKE = 0.8; + DMG_AMB_BURN = RandomInt(30, 60); + FREQ_SPECIAL = 5.0; + DMG_FIRE_BALL = 100; + DMG_FIRE_BOLT = 20; + SOUND_FIRECHARGE = "magic/fireball_powerup.wav"; + SOUND_FIRESHOOT = "magic/fireball_strike.wav"; + SOUND_FIRESHOOT2 = "weapons/rocketfire1.wav"; + SOUND_IDLE1 = "agrunt/ag_alert1.wav"; + SOUND_IDLE2 = "agrunt/ag_die1.wav"; + SOUND_IDLE3 = "agrunt/ag_idle1.wav"; + SOUND_SWIPE = "weapons/debris1.wav"; + SOUND_SWIPEHIT = "ambience/steamburst1.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_PAIN1 = "debris/bustflesh2.wav"; + SOUND_PAIN2 = "agrunt/ag_pain1.wav"; + SOUND_PAIN3 = "agrunt/ag_pain4.wav"; + SOUND_GLOAT = "x/x_laugh1.wav"; + NPC_PITCH_PAIN = 1; + SOUND_STRUCK1 = "bullchicken/bc_acid1.wav"; + SOUND_STRUCK2 = "bullchicken/bc_acid1.wav"; + SOUND_STRUCK3 = "ambience/flameburst1.wav"; + NPC_USE_FLINCH = 1; + NPC_FLINCH_HEALTH_RATIO = 0.5; + ANIM_FLINCH = "flinch"; + FREQ_CL_REFRESH = 5.0; + ELM_COLOR = Vector3(255, 128, 0); + ELM_TYPE = "fire"; + MELEE_RANGE = 96; + CL_FX_SCRIPT = "monsters/elemental_pure_cl"; + ELEMENTAL_EXP = 500; + NPC_GIVE_EXP = ELEMENTAL_EXP; + DMG_BASE = 100; + DOT1_SCRIPT = "effects/dot_fire"; + DOT1_ID = "DOT_fire"; + DOT1_DURATION = 5.0; + DOT1_DMG = (DMG_BASE * 0.15); + DOT2_SCRIPT = "effects/dot_fire"; + DOT2_ID = "DOT_fire"; + DOT2_DURATION = 5.0; + DOT2_DMG = (DMG_BASE * 0.15); + DOT_STACK = 0; + PROJECTILE1_SCRIPT = "proj_fire_ball"; + PROJECTILE2_SCRIPT = "proj_fire_xolt"; + DMG_PROJ = DMG_BASE; + PROJ_GUIDED = 1; + PROJ_NO_SPRITES = 1; + GAME_NO_CORPSE = 1; + } + + void OnSpawn() override + { + p_elemental_spawn(); + } + + void p_elemental_spawn() + { + SetName("Pyron Archon"); + SetHealth(2500); + SetWidth(48); + SetHeight(80); + SetRace("demon"); + SetDamageResistance("holy", 2.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("poison", 0.0); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(5); + SetModel("monsters/elementals_greater.mdl"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 1); + SetModelBody(0, 0); + NPC_GIVE_EXP = 500; + SetBloodType("none"); + if (ELM_TYPE == "fire") + { + ELEMENT_SEAL_IDX = 32; + } + else + { + if (ELM_TYPE == "cold") + { + ELEMENT_SEAL_IDX = 33; + } + else + { + if (ELM_TYPE == "lightning") + { + ELEMENT_SEAL_IDX = 34; + } + } + } + cl_refresh(); + } + + void npc_targetsighted() + { + if (!(DID_INTRO)) + { + NEXT_SEAL = L_GAME_TIME; + NEXT_SEAL += Random(20.0, 30.0); + DID_INTRO = 1; + cl_refresh(); + } + } + + void bs_global_command() + { + LogDebug("bs_global_command GetEntityName(param1) PARAM2 PARAM3"); + if (!(param1 == m_hAttackTarget)) return; + if (!(param3 == "death")) return; + EmitSound(GetOwner(), 0, SOUND_GLOAT, 10); + PlayAnim("critical", "yes"); + DID_INTRO = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + float L_GAME_TIME = GetGameTime(); + if ((IsEntityAlive(GetOwner()))) + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 1); + } + if (L_GAME_TIME > NEXT_CL_REFRESH) + { + cl_refresh(); + } + if (L_GAME_TIME > NEXT_LOOP_SOUND) + { + NEXT_LOOP_SOUND = L_GAME_TIME; + NEXT_LOOP_SOUND += 6.0; + // svplaysound: svplaysound 2 0 ambience/alien_powernode.wav + EmitSound(2, 0, "ambience/alien_powernode.wav"); + // svplaysound: svplaysound 2 10 ambience/alien_powernode.wav + EmitSound(2, 10, "ambience/alien_powernode.wav"); + } + if (!(m_hAttackTarget != "unset")) return; + if (!(NPC_CANSEE_TARGET)) return; + if ((I_R_FROZEN)) return; + if (L_GAME_TIME > NEXT_SEAL) + { + if ((DID_INTRO)) + { + } + NEXT_SEAL = L_GAME_TIME; + NEXT_SEAL += Random(20.0, 30.0); + do_seal(); + } + if (GetEntityRange(m_hAttackTarget) < MELEE_RANGE) + { + ANIM_ATTACK = "attack1"; + } + else + { + ANIM_ATTACK = "fireball"; + } + if (!(GetEntityRange(m_hAttackTarget) < 24)) return; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -110, 110)); + } + + void throw_fireball() + { + ARCH_COUNT_GUIDED += 1; + if (ARCH_COUNT_GUIDED > 4) + { + EmitSound(GetOwner(), 0, SOUND_FIRESHOOT2, 10); + ARCH_COUNT_GUIDED = 0; + TossProjectile("view", 300, DMG_PROJ, 30, PROJECTILE2_SCRIPT, Vector3(0, 0, 64)); + CallExternal("ent_lastprojectile", "ext_render", 5, 255); + } + else + { + EmitSound(GetOwner(), 0, SOUND_FIRESHOOT, 10); + string AIM_ANGLE = GetEntityDist(m_hAttackTarget); + LogDebug("throw_fireball AIM_ANGLE"); + AIM_ANGLE /= 50; + SetAngles("add_view.x"); + TossProjectile("view", 500, DMG_PROJ, 2, PROJECTILE1_SCRIPT, Vector3(0, 48, 48)); + CallExternal("ent_lastprojectile", "lighten", DOT1_DMG); + CallExternal("ent_lastprojectile", "ext_render", 5, 255); + } + } + + void attack1_strike() + { + XDoDamage(m_hAttackTarget, 128, DMG_SWIPE, 90, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:fist"); + } + + void fist_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 400, 110)); + if (DOT_STACK >= 4) + { + DOT_STACK = 0; + apply_dot2(GetEntityIndex(param2)); + } + else + { + apply_dot1(GetEntityIndex(param2)); + } + } + + void apply_dot1() + { + if ((GetEntityProperty(param1, "haseffect"))) + { + DOT_STACK += 1; + } + else + { + ApplyEffect(param1, DOT1_SCRIPT, DOT1_DURATION, GetEntityIndex(GetOwner()), DOT1_DMG); + } + } + + void apply_dot2() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + ApplyEffect(param1, DOT2_SCRIPT, DOT2_DURATION, GetEntityIndex(GetOwner()), DOT2_DMG); + } + + void cl_refresh() + { + if (CL_IDX == "CL_IDX") + { + ClientEvent("new", "all", CL_FX_SCRIPT, GetEntityIndex(GetOwner()), ELM_COLOR, ELM_TYPE, FREQ_CL_REFRESH); + CL_IDX = "game.script.last_sent_id"; + } + else + { + ClientEvent("update", "all", CL_IDX, "end_fx"); + ClientEvent("new", "all", CL_FX_SCRIPT, GetEntityIndex(GetOwner()), ELM_COLOR, ELM_TYPE, FREQ_CL_REFRESH); + CL_IDX = "game.script.last_sent_id"; + } + NEXT_CL_REFRESH = GetGameTime(); + NEXT_CL_REFRESH += FREQ_CL_REFRESH; + } + + void OnDamage(int damage) override + { + if ((param3).findFirst("slash") >= 0) + { + int L_NO_DMG = 1; + } + if ((param3).findFirst("blunt") >= 0) + { + int L_NO_DMG = 1; + } + if ((param3).findFirst("pierce") >= 0) + { + int L_NO_DMG = 1; + } + if ((param3).findFirst("generic") >= 0) + { + int L_NO_DMG = 1; + } + if (!(L_NO_DMG)) return; + SetDamage("dmg"); + ReturnData(0.0); + if ((IsValidPlayer(param1))) + { + SendColoredMessage(param1, GetEntityName(GetOwner()) + " is immune to physical attacks!"); + } + } + + void game_predeath() + { + ClientEvent("update", "all", CL_IDX, "owner_death"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SetModel("null.mdl"); + // svplaysound: svplaysound 2 0 ambience/alien_powernode.wav + EmitSound(2, 0, "ambience/alien_powernode.wav"); + } + + void do_seal() + { + npcatk_suspend_ai(); + npcatk_suspend_movement("charging"); + EmitSound(GetOwner(), 0, "weapons/egon_windup2.wav", 10); + NPC_NO_ATTACK = 1; + cl_refresh(); + SEAL_POS = GetEntityOrigin(m_hAttackTarget); + SEAL_POS = "z"; + ClientEvent("new", "all", "effects/sfx_seal_warning", SEAL_POS, ELM_TYPE, 128, ELEMENT_SEAL_IDX, 2.0); + ScheduleDelayedEvent(2.0, "do_seal2"); + } + + void do_seal2() + { + ClientEvent("new", "all", "effects/sfx_seal_instant", SEAL_POS, ELM_TYPE, 128, ELEMENT_SEAL_IDX); + string L_DMG_TYPE = ELM_TYPE; + L_DMG_TYPE += "_effect"; + XDoDamage(/* TODO: $math(vectoradd) */ SEAL_POS, 128, DMG_BASE, 0.0, GetOwner(), GetOwner(), "none", L_DMG_TYPE, "dmgevent:seal"); + npcatk_resume_ai(); + npcatk_resume_movement(); + NPC_NO_ATTACK = 0; + } + + void seal_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + apply_dot2(GetEntityIndex(param2)); + if ((/* TODO: $inset_string */ $inset_string(ELM_TYPE, "fire", "lightning"))) + { + string L_TARG_ORG = GetEntityOrigin(param2); + string L_MY_ORG = SEAL_POS; + string L_REPEL_YAW = /* TODO: $angles */ $angles(L_MY_ORG, L_TARG_ORG); + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, L_REPEL_YAW, 0), Vector3(0, 600, 600))); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/elf_warrior_base.as b/scripts/angelscript/monsters/elf_warrior_base.as new file mode 100644 index 00000000..1f18ec9a --- /dev/null +++ b/scripts/angelscript/monsters/elf_warrior_base.as @@ -0,0 +1,1128 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class ElfWarriorBase : CGameScript +{ + string ALCO_TYPE; + int AM_BLOCKING; + int AM_ESCORT; + string ANIM_ATTACK; + string ANIM_ATTACK_1H; + string ANIM_ATTACK_1H_READY; + string ANIM_ATTACK_2H; + string ANIM_ATTACK_GAXE; + string ANIM_ATTACK_JAB; + string ANIM_ATTACK_MA; + string ANIM_AURA; + string ANIM_BLOCK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DEATH6; + string ANIM_DEATH7; + string ANIM_DRAW_SWORD; + string ANIM_DUCK_IDLE; + string ANIM_DUCK_MOVE; + string ANIM_GUARD_IDLE; + string ANIM_HOLD_AURA; + string ANIM_IDLE; + string ANIM_IDLE_CAUTIOUS; + string ANIM_IDLE_NORMAL; + string ANIM_JUMP; + string ANIM_KICK; + string ANIM_LONG_JUMP; + string ANIM_LOOK; + string ANIM_MA_IDLE; + string ANIM_MOVE_CAUTIOUS; + string ANIM_MOVE_FAST; + string ANIM_PARRY; + string ANIM_RUN; + string ANIM_SPELL_CUDDLE; + string ANIM_SPELL_FIRE; + string ANIM_SPELL_PREP; + string ANIM_SWEEP; + string ANIM_WALK; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float BLOCK_DURATION; + string BLOCK_TARGET; + int CAN_BLOCK; + int CAN_FREEZE_AURA; + int CAN_JUMP; + int CAN_KICK; + int CAN_THROW; + string CAUTIOUS_MOVE; + float CHANCE_DOT; + float CHANCE_STUN; + string DEF_ANIM_IDLE; + string DEF_ANIM_RUN; + string DEF_ANIM_WALK; + int DMG_KICK; + int DMG_MELEE; + int DMG_THROW; + string DMG_TYPE; + int DMG_WAURA; + int DOING_LEAP; + int DOT_AMT; + float DOT_DURATION; + string DOT_SCRIPT; + int DOT_WAURA; + string ELF_HALF_HEALTH; + string ELF_MODEL; + string FIRST_CYCLE; + string FREEZE_AURA_CL_SCRIPT; + float FREEZE_AURA_DURATION; + int FREEZE_AURA_RADIUS; + string FREEZE_TARGS; + float FREQ_BLOCK; + int FREQ_FREEZE_AURA; + float FREQ_JUMP; + float FREQ_KICK; + float FREQ_LOOK; + float FREQ_THROW; + float FREQ_WAURA; + string FWD_JUMP_STR; + int KICK_RANGE; + string KNIFE_TARGET; + string KNIFE_THROW_ITEM; + string KNIFE_TYPE; + string LAST_HIT_FOR; + int LEAP_AFTER_KICK; + string LEAP_TARGET; + int MAX_JUMP_RANGE; + string MAX_SUSPEND; + int MELEE_ATTACK; + string NEXT_BLOCK; + string NEXT_CALM_TIME; + string NEXT_FREEZE_AURA; + string NEXT_KICK; + string NEXT_LOOK; + string NEXT_WAURA; + int NPC_FORCED_MOVEDEST; + string REPULSE_LIST; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK_CRY1; + string SOUND_ATTACK_CRY2; + string SOUND_ATTACK_CRY3; + string SOUND_DEATH; + string SOUND_DRAW; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_PAIN4; + string SOUND_SHIELD1; + string SOUND_SHIELD2; + string SOUND_SHIELD3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_THROW; + string SOUND_WAURA_LOOP; + string SOUND_WAURA_START; + float STUN_DURATION; + string THROWING_KNIFE; + int THROW_RANGE; + int THROW_SPEED; + string UP_JUMP_STR; + int WALK_RANGE; + string WAURA_DMG_TYPE; + float WAURA_DURATION; + string WAURA_EFFECT_SCRIPT; + int WAURA_ON; + int WAURA_RANGE; + string WAURA_TARGETS; + string WAURA_TYPE; + int WEAPON_AURA; + string WEAPON_AURA_CL_SCRIPT; + + ElfWarriorBase() + { + ANIM_WALK = "walk2"; + ANIM_IDLE = "deep_idle"; + ANIM_RUN = "run"; + ANIM_ATTACK = "swordswing1_R"; + ANIM_MOVE_FAST = "run"; + ANIM_MOVE_CAUTIOUS = "run_squatwalk1_R"; + ANIM_IDLE_CAUTIOUS = "stand_squatwalk1_R"; + ANIM_IDLE_NORMAL = "deep_idle"; + ANIM_LOOK = "look_idle"; + ANIM_GUARD_IDLE = "stand"; + ANIM_DUCK_MOVE = "crawl"; + ANIM_DUCK_IDLE = "crouch_idle"; + ANIM_JUMP = "jump"; + ANIM_LONG_JUMP = "long_jump"; + ANIM_AURA = "prepare_fireball"; + ANIM_DEATH1 = "die_simple"; + ANIM_DEATH2 = "die_backwards1"; + ANIM_DEATH3 = "die_backwards"; + ANIM_DEATH4 = "die_forwards"; + ANIM_DEATH5 = "headshot"; + ANIM_DEATH6 = "die_spin"; + ANIM_DEATH7 = "gutshot"; + ANIM_ATTACK_1H = "swordswing1_R"; + ANIM_ATTACK_2H = "longsword_swipe_L"; + ANIM_ATTACK_JAB = "swordjab1_R"; + ANIM_ATTACK_1H_READY = "swordready1_R"; + ANIM_ATTACK_GAXE = "battleaxe_swing1_L"; + ANIM_SPELL_PREP = "prepare_fireball"; + ANIM_SPELL_CUDDLE = "aim_fireball_R"; + ANIM_SPELL_FIRE = "throw_fireball_R"; + ANIM_DRAW_SWORD = "swordready1_R"; + ANIM_MA_IDLE = "aim_fists"; + ANIM_ATTACK_MA = "aim_punch1"; + ANIM_KICK = "stance_normal_highkick_r1"; + ANIM_SWEEP = "stance_normal_lowkick_r1"; + ANIM_PARRY = "longsword_parry"; + ANIM_BLOCK = "aim_block1_L"; + ANIM_HOLD_AURA = "aim_sword1_R"; + ELF_MODEL = "npc/elf_f_warrior.mdl"; + ATTACK_MOVERANGE = 48; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 120; + WALK_RANGE = 200; + DMG_MELEE = 300; + DMG_TYPE = "slash"; + DMG_KICK = 400; + DOT_SCRIPT = "effects/dot_fire"; + DOT_AMT = 50; + DOT_DURATION = 5.0; + ATTACK_HITCHANCE = 0.9; + CHANCE_STUN = 0.0; + CHANCE_DOT = 0.0; + STUN_DURATION = 10.0; + FREQ_LOOK = 5.0; + CAN_THROW = 0; + DMG_THROW = 600; + THROW_SPEED = 600; + THROW_RANGE = 512; + FREQ_THROW = 6.0; + KNIFE_TYPE = "poison"; + KNIFE_THROW_ITEM = "proj_k_knife"; + CAN_KICK = 0; + FREQ_KICK = Random(10.0, 25.0); + KICK_RANGE = 90; + LEAP_AFTER_KICK = 0; + CAN_JUMP = 1; + FREQ_JUMP = 5.0; + MAX_JUMP_RANGE = 600; + CAN_FREEZE_AURA = 0; + FREEZE_AURA_RADIUS = 128; + FREEZE_AURA_DURATION = 10.0; + FREEZE_AURA_CL_SCRIPT = "effects/sfx_ice_burst"; + FREQ_FREEZE_AURA = 25; + WEAPON_AURA = 0; + WAURA_TYPE = "lightning"; + WAURA_EFFECT_SCRIPT = "effects/dot_lightning"; + WAURA_RANGE = 128; + WEAPON_AURA_CL_SCRIPT = "monsters/telf_warrior_laxe_cl"; + DMG_WAURA = 300; + DOT_WAURA = 100; + WAURA_DMG_TYPE = "lightning_effect"; + FREQ_WAURA = Random(20.0, 30.0); + WAURA_DURATION = 5.0; + SOUND_WAURA_START = "magic/bolt_end.wav"; + SOUND_WAURA_LOOP = "magic/bolt_loop.wav"; + CAN_BLOCK = 0; + FREQ_BLOCK = Random(20.0, 30.0); + BLOCK_DURATION = 5.0; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_SHIELD1 = "weapons/axemetal1.wav"; + SOUND_SHIELD2 = "weapons/axemetal2.wav"; + SOUND_SHIELD3 = "doors/doorstop5.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACK_CRY1 = "npc/elvenfemale/ElfF_Attack1.wav"; + SOUND_ATTACK_CRY2 = "npc/elvenfemale/ElfF_Attack2.wav"; + SOUND_ATTACK_CRY3 = "npc/elvenfemale/ElfF_Attack3.wav"; + SOUND_PAIN1 = "npc/elvenfemale/ElfF_Criticalhit.wav"; + SOUND_PAIN2 = "npc/elvenfemale/ElfF_Pain1.wav"; + SOUND_PAIN3 = "npc/elvenfemale/ElfF_Pain2.wav"; + SOUND_PAIN4 = "npc/elvenfemale/ElfF_Pain3.wav"; + SOUND_DEATH = "npc/elvenfemale/ElfF_Die.wav"; + SOUND_THROW = "zombie/claw_miss1.wav"; + SOUND_DRAW = "weapons/dagger/dagger2.wav"; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetModel(ELF_MODEL); + SetWidth(24); + SetHeight(80); + SetRoam(true); + SetHearingSensitivity(10); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetDamageResistance("cold", 0.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("poison", 0.5); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("holy", 0.0); + elf_spawn(); + ELF_HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + ELF_HALF_HEALTH *= 0.5; + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + ScheduleDelayedEvent(3.0, "mark_def_anims"); + FIRST_CYCLE = GetGameTime(); + FIRST_CYCLE += 10.0; + } + + void OnPostSpawn() override + { + close_mouth(); + if (!(AM_ARCHER)) return; + ANIM_ATTACK = "shootbow"; + ATTACK_RANGE = 800; + ATTACK_HITRANGE = 800; + } + + void mark_def_anims() + { + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + } + + void suspend_movement() + { + ANIM_WALK = param1; + ANIM_RUN = param1; + ANIM_IDLE = param1; + SetMoveAnim(param1); + SetIdleAnim(param1); + SetRoam(false); + } + + void resume_movement() + { + ANIM_WALK = DEF_ANIM_WALK; + ANIM_RUN = DEF_ANIM_RUN; + ANIM_IDLE = DEF_ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + } + + void cycle_npc() + { + if (param1 == "test") + { + SetSayTextRange(1024); + SayText("Is that... An orc?"); + string NEAR_ALLY = FindEntitiesInSphere("ally", 1024); + if (NEAR_ALLY != "none") + { + } + CallExternal(GetToken(NEAR_ALLY, 0, ";"), "ext_say_orc"); + } + if (!(StringToLower(GetMapName()) == "the_wall")) return; + if (!(G_ORC_ALERT)) return; + SetGlobalVar("G_ORC_ALERT", 0); + SetSayTextRange(1024); + SayText("Is that... An Orc?"); + string NEAR_ALLY = FindEntitiesInSphere("ally", 1024); + if (!(NEAR_ALLY != "none")) return; + CallExternal(GetToken(NEAR_ALLY, 0, ";"), "ext_say_orc"); + } + + void npc_targetsighted() + { + if (!(IsValidPlayer(m_hAttackTarget))) return; + if (!(G_ESCORT_ALERT_SAYTEXT != "G_ESCORT_ALERT_SAYTEXT")) return; + if ((AM_ESCORT)) + { + if (!(G_DID_ESCORT_ALERT)) + { + } + SetSayTextRange(1024); + SayText(G_ESCORT_ALERT_SAYTEXT); + SetGlobalVar("G_DID_ESCORT_ALERT", 1); + } + } + + void cycle_up() + { + if (ATTACK_STANCE == "1h") + { + PlayAnim("critical", ANIM_ATTACK_1H_READY); + move_type(1); + } + if ((CAN_KICK)) + { + NEXT_KICK = GetGameTime(); + NEXT_KICK += FREQ_KICK; + } + } + + void cycle_down() + { + if (ATTACK_STANCE == "1h") + { + move_type(0); + } + } + + void my_target_died() + { + if (ATTACK_STANCE == "1h") + { + move_type(0); + } + } + + void heard_cycle_down() + { + if (ATTACK_STANCE == "1h") + { + move_type(0); + } + } + + void npc_heard_player() + { + if (ATTACK_STANCE == "1h") + { + move_type(1); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) + { + if (GetGameTime() > MAX_SUSPEND) + { + } + npcatk_resume_ai(); + } + float GAME_TIME = GetGameTime(); + if (!(GAME_TIME > FIRST_CYCLE)) return; + if (!(m_hAttackTarget != "unset")) return; + if ((SUSPEND_AI)) return; + if (ATTACK_STANCE == "1h") + { + if (GAME_TIME > NEXT_CALM_TIME) + { + if (GetEntityRange(m_hAttackTarget) < WALK_RANGE) + { + if ((false)) + { + move_type(1); + } + else + { + move_type(0); + } + } + else + { + move_type(0); + } + } + else + { + move_type(0); + } + } + if ((CAN_THROW)) + { + if (GAME_TIME > NEXT_THROW) + { + } + if (!(DOING_LEAP)) + { + } + if ((false)) + { + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + if (GetEntityRange(m_hAttackTarget) < THROW_RANGE) + { + } + NEXT_THROW = GAME_TIME; + NEXT_THROW += FREQ_THROW; + throw_knife(m_hAttackTarget); + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if ((CAN_KICK)) + { + if (GAME_TIME > NEXT_KICK) + { + } + NEXT_KICK = GAME_TIME; + if (GetEntityRange(m_hAttackTarget) < KICK_RANGE) + { + } + NEXT_KICK += FREQ_KICK; + do_kick(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((CAN_JUMP)) + { + if (GAME_TIME > NEXT_JUMP) + { + } + if (GetEntityRange(m_hAttackTarget) < MAX_JUMP_RANGE) + { + } + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > ATTACK_RANGE) + { + do_hop(Z_DIFF); + int EXIT_SUB = 1; + NEXT_JUMP = GAME_TIME; + NEXT_JUMP += FREQ_JUMP; + } + } + if ((EXIT_SUB)) return; + if ((CAN_FREEZE_AURA)) + { + if (GetEntityRange(m_hAttackTarget) < FREEZE_AURA_RADIUS) + { + } + if (GAME_TIME > NEXT_FREEZE_AURA) + { + } + NEXT_FREEZE_AURA = GAME_TIME; + NEXT_FREEZE_AURA += FREQ_FREEZE_AURA; + do_freeze_aura(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string L_CAN_SEE = false; + if ((WEAPON_AURA)) + { + if ((L_CAN_SEE)) + { + } + if (GetEntityRange(m_hAttackTarget) < WAURA_RANGE) + { + } + if (GAME_TIME > NEXT_WAURA) + { + } + NEXT_WAURA = GAME_TIME; + NEXT_WAURA += FREQ_WAURA; + do_waura(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((CAN_BLOCK)) + { + if ((L_CAN_SEE)) + { + } + if (GAME_TIME > NEXT_BLOCK) + { + } + NEXT_BLOCK = GAME_TIME; + NEXT_BLOCK += FREQ_BLOCK; + do_block(); + } + } + + void npc_selectattack() + { + if (ATTACK_STANCE == "assasin") + { + int RND_ATK = RandomInt(1, 2); + if (RND_ATK == 1) + { + ANIM_ATTACK = ANIM_ATTACK_1H; + } + else + { + ANIM_ATTACK = ANIM_ATTACK_JAB; + } + } + if (ATTACK_STANCE == "2hsword") + { + int RND_ATK = RandomInt(1, 2); + if (RND_ATK == 1) + { + ANIM_ATTACK = ANIM_ATTACK_2H; + } + else + { + ANIM_ATTACK = ANIM_ATTACK_GAXE; + } + } + } + + void move_type() + { + if (!(ATTACK_STANCE == "1h")) return; + if ((SUSPEND_AI)) return; + if (param1 == 1) + { + if (!(CAUTIOUS_MOVE)) + { + } + CAUTIOUS_MOVE = 1; + SetMoveAnim(ANIM_MOVE_CAUTIOUS); + SetIdleAnim(ANIM_IDLE_CAUTIOUS); + } + else + { + if ((CAUTIOUS_MOVE)) + { + } + CAUTIOUS_MOVE = 0; + SetMoveAnim(ANIM_MOVE_FAST); + SetIdleAnim(ANIM_IDLE_NORMAL); + } + } + + void combat_move() + { + CAUTIOUS_MOVE = 0; + SetMoveAnim(ANIM_MOVE_FAST); + SetIdleAnim(ANIM_IDLE_NORMAL); + } + + void frame_melee_1h() + { + if ((THROWING_KNIFE)) + { + THROWING_KNIFE = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + melee_attack(); + } + + void frame_jab() + { + melee_attack(); + } + + void frame_axe2() + { + melee_attack(); + } + + void frame_melee_2h() + { + melee_attack(); + } + + void frame_kick_high() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, ATTACK_HITCHANCE, DMG_TYPE); + if (!(GetEntityRange(m_hAttackTarget) < KICK_RANGE)) return; + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 10.0, GetEntityIndex(GetOwner())); + if (!(LEAP_AFTER_KICK)) return; + ScheduleDelayedEvent(0.2, "leap_away"); + } + + void melee_attack() + { + MELEE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_MELEE, ATTACK_HITCHANCE, DMG_TYPE); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(RandomInt(1, 5) == 1)) return; + // PlayRandomSound from: SOUND_ATTACK_CRY1, SOUND_ATTACK_CRY2, SOUND_ATTACK_CRY3 + array sounds = {SOUND_ATTACK_CRY1, SOUND_ATTACK_CRY2, SOUND_ATTACK_CRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + move_mouth(); + } + + void frame_jump_land() + { + force_leap_end(); + } + + void frame_hop_land() + { + npcatk_resume_ai(); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + LAST_HIT_FOR = param1; + NEXT_CALM_TIME = GetGameTime(); + NEXT_CALM_TIME += 5.0; + if ((AM_BLOCKING)) return; + if (ATTACK_STANCE == "1h") + { + move_type(0); + } + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (param1 > 100) + { + sound_pain(); + } + else + { + if (GetEntityHealth(GetOwner()) < ELF_HALF_HEALTH) + { + } + if (RandomInt(1, 5) == 1) + { + } + sound_pain(); + } + } + + void OnDamage(int damage) override + { + if (!(AM_BLOCKING)) return; + string ATTACKER_ID = GetEntityIndex(param1); + string ATTACKER_ORG = GetEntityOrigin(param1); + if (!(WithinCone2D(ATTACKER_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if ((param3).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SetDamage("dmg"); + return; + string NEG_DMG = /* TODO: $neg */ $neg(param2); + LogDebug("game_damaged NEG_DMG"); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, NEG_DMG, 110)); + // PlayRandomSound from: SOUND_SHIELD1, SOUND_SHIELD2, SOUND_SHIELD3 + array sounds = {SOUND_SHIELD1, SOUND_SHIELD2, SOUND_SHIELD3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (CHANCE_STUN > 0) + { + if (RandomInt(1, 100) <= CHANCE_STUN) + { + } + ApplyEffect(param2, "effects/debuff_stun", STUN_DURATION, GetEntityIndex(GetOwner())); + } + if (CHANCE_DOT > 0) + { + if (RandomInt(1, 100) <= CHANCE_DOT) + { + } + ApplyEffect(param2, DOT_SCRIPT, DOT_DURATION, GetEntityIndex(GetOwner()), DOT_AMT); + } + } + MELEE_ATTACK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RND_DEATH = RandomInt(1, 7); + if (RND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (RND_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (RND_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + if (RND_DEATH == 6) + { + ANIM_DEATH = ANIM_DEATH6; + } + if (RND_DEATH == 7) + { + ANIM_DEATH = ANIM_DEATH7; + } + if (LAST_HIT_FOR > 100) + { + ANIM_DEATH = ANIM_DEATH6; + } + close_mouth(); + if (G_TELF_ESCORTS > 0) + { + if ((AM_ESCORT)) + { + } + G_TELF_ESCORTS -= 1; + } + } + + void throw_knife() + { + // PlayRandomSound from: SOUND_ATTACK_CRY1, SOUND_ATTACK_CRY2, SOUND_ATTACK_CRY3 + array sounds = {SOUND_ATTACK_CRY1, SOUND_ATTACK_CRY2, SOUND_ATTACK_CRY3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + THROWING_KNIFE = 1; + KNIFE_TARGET = param1; + AS_ATTACKING = GetGameTime(); + AS_ATTAKCING += 5.0; + npcatk_suspend_ai(); + SetModelBody(1, 0); + SetRoam(false); + SetIdleAnim(ANIM_ATTACK_1H); + SetMoveAnim(ANIM_ATTACK_1H); + SetMoveDest(KNIFE_TARGET); + PlayAnim("critical", ANIM_ATTACK_1H); + EmitSound(GetOwner(), 0, SOUND_THROW, 10); + ScheduleDelayedEvent(0.25, "throw_knife2"); + ScheduleDelayedEvent(0.75, "throw_knife_done"); + } + + void throw_knife2() + { + ALCO_TYPE = KNIFE_TYPE; + TossProjectile(KNIFE_THROW_ITEM, /* TODO: $relpos */ $relpos(0, 38, 22), KNIFE_TARGET, THROW_SPEED, DMG_THROW, 0.2, "none"); + } + + void throw_knife_done() + { + EmitSound(GetOwner(), 0, SOUND_DRAW, 10); + SetModelBody(1, 1); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + npcatk_resume_ai(); + } + + void do_kick() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("critical", ANIM_KICK); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + // PlayRandomSound from: SOUND_ATTACK_CRY1, SOUND_ATTACK_CRY2, SOUND_ATTACK_CRY3 + array sounds = {SOUND_ATTACK_CRY1, SOUND_ATTACK_CRY2, SOUND_ATTACK_CRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void leap_away() + { + npcatk_suspend_ai(); + DOING_LEAP = 1; + LEAP_TARGET = param1; + if (!(IsEntityAlive(LEAP_TARGET))) + { + LEAP_TARGET = m_hAttackTarget; + } + SetMoveDest(LEAP_TARGET); + NPC_FORCED_MOVEDEST = 1; + PlayAnim("critical", ANIM_LONG_JUMP); + SetMoveAnim(ANIM_LONG_JUMP); + sound_pain(); + repulse_area(GetEntityOrigin(GetOwner())); + ScheduleDelayedEvent(0.1, "leap_away_boost"); + ScheduleDelayedEvent(2.0, "force_leap_end"); + } + + void leap_away_boost() + { + string LEAP_TARG_ORG = GetEntityOrigin(LEAP_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(LEAP_TARG_ORG, GetMonsterProperty("origin")); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 800, 120))); + } + + void force_leap_end() + { + if (!(DOING_LEAP)) return; + DOING_LEAP = 0; + SetMoveAnim(ANIM_RUN); + npcatk_resume_ai(); + } + + void repulse_area() + { + EmitSound(GetOwner(), 0, "magic/boom.wav", 10); + ClientEvent("new", "all", "monsters/cold_one_cl", "repulse", GetEntityOrigin(GetOwner()), 128, 1); + REPULSE_LIST = FindEntitiesInSphere("enemy", 128); + if (!(REPULSE_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(REPULSE_LIST, ";"); i++) + { + repulse_targets(); + } + } + + void repulse_targets() + { + string CUR_TARG = GetToken(REPULSE_LIST, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 10))); + } + + void do_hop() + { + // PlayRandomSound from: SOUND_ATTACK_CRY1, SOUND_ATTACK_CRY2, SOUND_ATTACK_CRY3 + array sounds = {SOUND_ATTACK_CRY1, SOUND_ATTACK_CRY2, SOUND_ATTACK_CRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + UP_JUMP_STR = param1; + UP_JUMP_STR *= 5; + npcatk_suspend_ai(1.0); + FWD_JUMP_STR = GetEntityRange(m_hAttackTarget); + LogDebug("do_hop UP_JUMP_STR FWD_JUMP_STR"); + PlayAnim("critical", ANIM_JUMP); + ScheduleDelayedEvent(0.1, "do_jump_boost"); + } + + void do_jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, FWD_JUMP_STR, UP_JUMP_STR)); + } + + void do_freeze_aura() + { + ClientEvent("new", "all", FREEZE_AURA_CL_SCRIPT, GetEntityOrigin(GetOwner()), FREEZE_AURA_RADIUS, 1, Vector3(128, 128, 255)); + PlayAnim("critical", ANIM_AURA); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 3.0; + ScheduleDelayedEvent(0.25, "do_freeze_aura2"); + } + + void do_freeze_aura2() + { + FREEZE_TARGS = FindEntitiesInSphere("enemy", FREEZE_AURA_RADIUS); + if (!(FREEZE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(FREEZE_TARGS, ";"); i++) + { + feeze_targets(); + } + } + + void feeze_targets() + { + string CUR_TARG = GetToken(FREEZE_TARGS, i, ";"); + if (!(IsEntityAlive(CUR_TARG))) return; + if (!(IsOnGround(CUR_TARG))) return; + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", FREEZE_AURA_DURATION, GetEntityIndex(GetOwner()), DOT_AMT); + } + + void sound_pain() + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3, SOUND_PAIN4 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3, SOUND_PAIN4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + move_mouth(); + } + + void move_mouth() + { + string RND_SAY1 = "["; + RND_SAY1 += Random(0.5, 1.0); + RND_SAY1 += "]"; + Say("RND_SAY1"); + } + + void do_waura() + { + SetProp(GetOwner(), "controller0", 150); + npcatk_suspend_ai(); + PlayAnim("hold", ANIM_HOLD_AURA); + suspend_movement(ANIM_HOLD_AURA); + ClientEvent("new", "all", WEAPON_AURA_CL_SCRIPT, GetEntityIndex(GetOwner()), WAURA_DURATION); + EmitSound(GetOwner(), 0, SOUND_WAURA_START, 10); + WAURA_ON = 1; + ScheduleDelayedEvent(0.5, "do_waura_loop"); + WAURA_DURATION("end_waura"); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + AS_ATTACKING += WAURA_DURATION; + } + + void do_waura_loop() + { + if (!(WAURA_ON)) return; + ScheduleDelayedEvent(1.0, "do_waura_loop"); + if (SOUND_WAURA_LOOP != "none") + { + // svplaysound: if ( SOUND_WAURA_LOOP isnot 'none' ) svplaysound 1 10 SOUND_WAURA_LOOP + EmitSound(1, 10, SOUND_WAURA_LOOP); + } + WAURA_TARGETS = FindEntitiesInSphere("enemy", WAURA_RANGE); + if (!(WAURA_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(WAURA_TARGETS, ";"); i++) + { + do_waura_affect_targs(); + } + } + + void do_waura_affect_targs() + { + string CUR_TARG = GetToken(WAURA_TARGETS, i, ";"); + if (!(GetEntityHeight(CUR_TARG) > 36)) return; + ApplyEffect(CUR_TARGET, WAURA_EFFECT_SCRIPT, 5.0, GetEntityIndex(GetOwner()), DOT_WAURA); + DoDamage(CUR_TARG, "direct", DMG_WAURA, 1.0, GetOwner()); + if (WAURA_TYPE == "lightning") + { + string TARG_RESIST = /* TODO: $get_takedmg */ $get_takedmg(CUR_TARG, "lightning"); + float RND_ROLL = Random(0.0, 1.0); + LogDebug("RND_ROLL vs TARG_RESIST"); + if (RND_ROLL <= TARG_RESIST) + { + Effect("screenfade", CUR_TARG, 3, 1, Vector3(255, 255, 255), 255, "fadein"); + } + } + } + + void end_waura() + { + LogDebug("end_waura SOUND_WAURA_LOOP"); + SetProp(GetOwner(), "controller0", -1); + PlayAnim("once", "break"); + WAURA_ON = 0; + if (SOUND_WAURA_LOOP != "none") + { + // svplaysound: if ( SOUND_WAURA_LOOP isnot 'none' ) svplaysound 1 0 SOUND_WAURA_LOOP + EmitSound(1, 0, SOUND_WAURA_LOOP); + } + npcatk_resume_ai(); + resume_movement(); + if ((CAN_BLOCK)) + { + NEXT_BLOCK = GetGameTime(); + NEXT_BLOCK += FREQ_BLOCK; + } + } + + void do_block() + { + LogDebug("do_block"); + SetProp(GetOwner(), "controller0", 60); + BLOCK_TARGET = m_hAttackTarget; + npcatk_suspend_ai(); + PlayAnim("once", "break"); + PlayAnim("hold", ANIM_BLOCK); + suspend_movement(ANIM_BLOCK); + AM_BLOCKING = 1; + do_block_loop(); + BLOCK_DURATION("end_block"); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 2.0; + AS_ATTACKING += BLOCK_DURATION; + } + + void do_block_loop() + { + LogDebug("do_block_loop"); + if (!(AM_BLOCKING)) return; + if ((IsEntityAlive(BLOCK_TARGET))) + { + ScheduleDelayedEvent(0.1, "do_block_loop"); + SetMoveDest(BLOCK_TARGET); + } + else + { + end_block(); + } + } + + void end_block() + { + LogDebug("end_block"); + if (!(AM_BLOCKING)) return; + PlayAnim("once", "break"); + SetProp(GetOwner(), "controller0", -1); + AM_BLOCKING = 0; + npcatk_resume_ai(); + resume_movement(); + } + + void npcatk_lost_sight() + { + if (!(GetGameTime() > NEXT_LOOK)) return; + NEXT_LOOK = GetGameTime(); + NEXT_LOOK += FREQ_LOOK; + PlayAnim("critical", ANIM_LOOK); + } + + void OnSuspendAI() + { + MAX_SUSPEND = GetGameTime(); + MAX_SUSPEND += 10.0; + } + + void ext_con() + { + if (param1 == 0) + { + SetProp(GetOwner(), "controller0", param2); + } + if (param1 == 1) + { + SetProp(GetOwner(), "controller1", param2); + } + if (param1 == 2) + { + SetProp(GetOwner(), "controller2", param2); + } + if (param1 == 3) + { + SetProp(GetOwner(), "controller3", param2); + } + } + + void set_escort() + { + G_TELF_ESCORTS += 1; + AM_ESCORT = 1; + } + + void close_mouth() + { + SetProp(GetOwner(), "controller1", 0); + } + + void ext_say_orc() + { + SetSayTextRange(2048); + SayText("It s an undead orc. Some luckless fool of a Marogar trying to plunder the fortresses, no doubt."); + ScheduleDelayedEvent(3.0, "ext_say_orc2"); + } + + void ext_say_orc2() + { + SetSayTextRange(2048); + SayText("Wait... He was looking at something before he came at us..."); + } + +} + +} diff --git a/scripts/angelscript/monsters/elf_wizard_base.as b/scripts/angelscript/monsters/elf_wizard_base.as new file mode 100644 index 00000000..9e36298f --- /dev/null +++ b/scripts/angelscript/monsters/elf_wizard_base.as @@ -0,0 +1,746 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class ElfWizardBase : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DEATH6; + string ANIM_DEATH7; + string ANIM_DUCK_MOVE; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LOOK; + string ANIM_MELEE; + string ANIM_MELEE_DUCK; + string ANIM_PALM_ATTACK; + string ANIM_PREP_EGG; + string ANIM_RELEASE_EGG; + string ANIM_REPELL; + string ANIM_RUN; + string ANIM_SHIELD_HOLD; + string ANIM_SPELL_HOLD; + string ANIM_SPELL_LEFT_HOLD; + string ANIM_SPELL_PREP; + string ANIM_SPELL_RELEASE; + string ANIM_STAFF_HOLD; + string ANIM_WALK; + string ANIM_XBOW_AIM; + string ANIM_XBOW_AIM_DUCK; + string ANIM_XBOW_FIRE; + string ANIM_XBOW_FIRE_DUCK; + string ANIM_XBOW_RELOAD; + string ANIM_XBOW_RELOAD_DUCK; + string AS_ATTACKING; + int ATTACH_LHAND; + int ATTACH_RHAND; + int ATTACH_STAFF_HILT; + int ATTACH_STAFF_TIP; + string ATTACK_HITRANGE; + int ATTACK_HITRANGE_MELEE; + string ATTACK_RANGE; + string BEAM_TARGET; + string CFB_EST_ANG; + string CFB_EST_ORG; + string CFB_FIREBALL_IDX; + int CFB_FIRST_TARGET_FOUND; + string CFB_FORCE_END; + string CFB_NEXT_SCAN; + int CFB_SPEED; + string DEF_ANIM_IDLE; + string DEF_ANIM_RUN; + string DEF_ANIM_WALK; + int DMG_MELEE; + int DMG_XBOW; + string ELF_AIM_ANGLES; + string ELF_BEAM_ATTACK; + string ELF_BEAM_COLOR; + int ELF_BEAM_DMG; + string ELF_BEAM_DMG_TYPE; + int ELF_BEAM_DOT; + float ELF_BEAM_DUR; + string ELF_BEAM_EFFECT; + int ELF_BEAM_ON; + string ELF_BEAM_PUSH_VEL; + int ELF_BEAM_RANGE; + string ELF_BEAM_SPECIAL; + string ELF_BOLT_LAND; + int ELF_CAN_GUIDED; + int ELF_EXPLOSIVE_BOLTS; + int ELF_GUIDED_ACTIVE; + int ELF_GUIDED_DMG; + string ELF_GUIDED_DOT; + string ELF_GUIDED_DOTS; + float ELF_GUIDED_DURATION; + string ELF_GUIDED_SCRIPT; + string ELF_GUIDED_TYPE; + string ELF_GUIDED_TYPES; + string ELF_HALF_HEALTH; + int ELF_IS_ARCHER; + int ELF_IS_NOVICE; + string ELF_MELEE_PUSH_VEL; + string ELF_MISS_COUNT; + string ELF_MODEL; + int ELF_PALM_ATTACK; + string ELF_PALM_CL_SCRIPT; + int ELF_PALM_DMG; + int ELF_PALM_RANGE; + string ELF_PALM_TARGET; + int ELF_XBOW_ACCURACY; + int ELF_XBOW_BONE; + string ELF_XBOW_CL_SCRIPT; + string ELF_XBOW_CL_SCRIPT_ID; + string ELF_XBOW_DUCK_OFS; + string ELF_XBOW_REPELL_POINT; + int ELF_XBOW_SHOT; + string ELF_XBOW_STAND_OFS; + string ELF_XBOW_TARGETS; + string FIRST_CYCLE; + float FREQ_GUIDED; + float FREQ_PALM; + float FREQ_XBOW_BASH; + string NEXT_GUIDED; + string NEXT_SCRIPT_UPDATE; + string NEXT_XBOW_BASH; + string NPC_RANGED; + string SOUND_BOLT_HIT; + string SOUND_DEATH; + string SOUND_ELF_BEAM_START; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_XBOW_SHOOT; + string SOUND_XBOW_STRETCH; + + ElfWizardBase() + { + ELF_MODEL = "npc/elf_m_wizard.mdl"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk2handed"; + ANIM_RUN = "run2"; + ANIM_DEATH = "die_simple"; + ANIM_LOOK = "look_idle"; + ANIM_HOP = "jump"; + ANIM_JUMP = "long_jump"; + ANIM_MELEE = "ref_shoot_crowbar"; + ANIM_PALM_ATTACK = "ref_shoot_trip"; + ANIM_XBOW_AIM = "ref_aim_bow"; + ANIM_XBOW_FIRE = "ref_shoot_bow"; + ANIM_XBOW_RELOAD = "ref_shoot_squeak"; + ANIM_DUCK_MOVE = "crawl"; + ANIM_MELEE_DUCK = "crouch_shoot_crowbar"; + ANIM_XBOW_AIM_DUCK = "crouch_aim_bow"; + ANIM_XBOW_FIRE_DUCK = "crouch_shoot_bow"; + ANIM_XBOW_RELOAD_DUCK = "crouch_aim_squeak"; + ANIM_SPELL_HOLD = "ref_aim_onehanded"; + ANIM_SPELL_LEFT_HOLD = "ref_aim_egon"; + ANIM_SPELL_PREP = "ref_aim_trip"; + ANIM_SPELL_RELEASE = "ref_shoot_trip"; + ANIM_REPELL = "ref_shoot_trip"; + ANIM_PREP_EGG = "ref_aim_squeak"; + ANIM_RELEASE_EGG = "ref_shoot_squeak"; + ANIM_SHIELD_HOLD = "aim_2"; + ANIM_STAFF_HOLD = "ref_aim_crowbar"; + ANIM_DEATH1 = "die_simple"; + ANIM_DEATH2 = "die_backwards1"; + ANIM_DEATH3 = "die_backwards"; + ANIM_DEATH4 = "die_forwards"; + ANIM_DEATH5 = "headshot"; + ANIM_DEATH6 = "die_spin"; + ANIM_DEATH7 = "gutshot"; + SOUND_DEATH = "voices/human/male_die.wav"; + Precache("weapons/bow/bolthit1.wav"); + ELF_IS_ARCHER = 0; + ELF_EXPLOSIVE_BOLTS = 1; + ELF_XBOW_CL_SCRIPT = "monsters/elf_xbow_cl"; + ELF_XBOW_STAND_OFS = Vector3(10, 0, 68); + ELF_XBOW_DUCK_OFS = Vector3(10, 0, 32); + ELF_XBOW_BONE = 27; + DMG_XBOW = 200; + FREQ_XBOW_BASH = 5.0; + ELF_XBOW_ACCURACY = 75; + ATTACK_HITRANGE_MELEE = 64; + ATTACH_STAFF_TIP = 2; + ATTACH_STAFF_HILT = 1; + ATTACH_LHAND = 3; + ATTACH_RHAND = 0; + ELF_IS_NOVICE = 0; + FREQ_GUIDED = 25.0; + ELF_CAN_GUIDED = 0; + ELF_GUIDED_TYPES = "fire;cold;lightning;poison"; + ELF_GUIDED_DOTS = "100;75;75;75"; + ELF_GUIDED_DMG = 200; + ELF_GUIDED_DURATION = 20.0; + ELF_GUIDED_SCRIPT = "monsters/summon/guided_sphere_cl"; + CFB_SPEED = 60; + ELF_PALM_ATTACK = 0; + ELF_PALM_DMG = 300; + ELF_PALM_RANGE = 96; + FREQ_PALM = 3.0; + ELF_BEAM_DMG = 100; + ELF_BEAM_DOT = 100; + ELF_BEAM_DMG_TYPE = "lightning"; + ELF_BEAM_PUSH_VEL = /* TODO: $relvel */ $relvel(0, 300, 110); + ELF_BEAM_DUR = 5.0; + ELF_BEAM_RANGE = 512; + ELF_BEAM_SPECIAL = "none"; + ELF_PALM_CL_SCRIPT = "effects/sfx_hit_shield"; + DMG_MELEE = 200; + ELF_MELEE_PUSH_VEL = /* TODO: $relvel */ $relvel(10, 400, 110); + SOUND_ELF_BEAM_START = "magic/bolt_start.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_XBOW_STRETCH = "weapons/bow/stretch.wav"; + SOUND_XBOW_SHOOT = "weapons/bow/crossbow.wav"; + SOUND_BOLT_HIT = "weapons/bow/bolthit1.wav"; + } + + void game_precache() + { + if ((ELF_IS_ARCHER)) + { + Precache(ELF_XBOW_CL_SCRIPT); + Precache("weapons/bows/boltexplosive.mdl"); + Precache("explode1.spr"); + } + if ((ELF_PALM_ATTACK)) + { + Precache("rain_ripple.spr"); + } + if ((ELF_CAN_GUIDED)) + { + Precache("debris/zap1.wav"); + Precache("debris/zap3.wav"); + Precache("debris/zap3.wav"); + Precache("3dmflaora.spr"); + Precache("magic/alien_frantic_1sec_noloop.wav"); + Precache("magic/alien_beacon_1sec_noloop.wav"); + } + } + + void OnSpawn() override + { + SetModel(ELF_MODEL); + SetWidth(24); + SetHeight(80); + SetRoam(true); + SetHearingSensitivity(10); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetDamageResistance("cold", 0.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("poison", 0.5); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("holy", 0.0); + elf_spawn(); + ELF_HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + ELF_HALF_HEALTH *= 0.5; + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + FIRST_CYCLE = GetGameTime(); + FIRST_CYCLE += 5.0; + if ((ELF_IS_ARCHER)) + { + ATTACK_RANGE = 1024; + ATTACK_HITRANGE = 1024; + ANIM_ATTACK = ANIM_XBOW_FIRE; + NPC_RANGED = 1; + ELF_MISS_COUNT = 0; + } + if ((ELF_IS_NOVICE)) + { + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 120; + ANIM_ATTACK = ANIM_PALM_ATTACK; + } + if ((ELF_LIGHTNING_WIZARD)) + { + ELF_BEAM_ATTACK = 1; + ELF_BEAM_COLOR = Vector3(255, 128, 64); + ELF_BEAM_EFFECT = "effects/dot_lightning"; + } + } + + void frame_xbow_shoot_stand() + { + if ((ELF_IS_ARCHER)) + { + elf_shoot_xbow(); + } + } + + void frame_xbow_shoot_crouch() + { + if ((ELF_IS_ARCHER)) + { + elf_shoot_xbow(); + } + } + + void frame_xbow_reload_now() + { + if (!(ELF_IS_ARCHER)) return; + EmitSound(GetOwner(), 0, SOUND_XBOW_STRETCH, 10); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + if (!(ELF_DUCK_MODE)) + { + PlayAnim("critical", ANIM_XBOW_RELOAD); + } + else + { + PlayAnim("critical", ANIM_XBOW_RELOAD_DUCK); + } + } + + void frame_xbow_reloaded() + { + if (!(ELF_IS_ARCHER)) return; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + if (!(ELF_DUCK_MODE)) + { + PlayAnim("critical", ANIM_XBOW_AIM); + } + else + { + PlayAnim("critical", ANIM_XBOW_AIM_DUCK); + } + } + + void frame_repell() + { + if (!(ELF_PALM_ATTACK)) return; + string REPELL_SPRITE_ORG = /* TODO: $relpos */ $relpos(0, 32, 32); + ClientEvent("new", "all", ELF_PALM_CL_SCRIPT, REPELL_SPRITE_ORG, GetEntityProperty(GetOwner(), "angles.yaw"), Vector3(255, 255, 255), 2.0, 2.0); + EmitSound(GetOwner(), 0, "magic/frost_pulse.wav", 10); + if ((IsEntityAlive(m_hAttackTarget))) + { + string FINAL_TARG = m_hAttackTarget; + } + else + { + string FINAL_TARG = ELF_PALM_TARGET; + } + DoDamage(FINAL_TARG, ELF_PALM_RANGE, ELF_PALM_DMG, 1.0, "magic"); + if (GetEntityRange(FINAL_TARG) < ELF_PALM_RANGE) + { + AddVelocity(FINAL_TARG, /* TODO: $relvel */ $relvel(10, 1000, 110)); + } + } + + void frame_melee() + { + DoDamage(m_hAttackTarget, DMG_MELEE, ATTACK_HITRANGE_MELEE, 0.9, "blunt"); + if ((ELF_IS_ARCHER)) + { + PlayAnim("critical", "frame_xbow_reloaded"); + } + AddVelocity(m_hAttackTarget, ELF_MELEE_PUSH_VEL); + } + + void elf_shoot_xbow() + { + EmitSound(GetOwner(), 1, SOUND_XBOW_SHOOT, 10); + string START_LINE = GetEntityProperty(GetOwner(), "svbonepos"); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (RandomInt(1, 100) > ELF_XBOW_ACCURACY) + { + LogDebug("elf_shoot_xbow miss"); + float RND_X = Random(-64.0, 64.0); + float RND_Y = Random(-64.0, 64.0); + TARG_ORG += "x"; + TARG_ORG += "y"; + } + if ((ELF_EXPLOSIVE_BOLTS)) + { + TARG_ORG = "z"; + } + ELF_AIM_ANGLES = /* TODO: $angles3d */ $angles3d(START_LINE, TARG_ORG); + LogDebug("before ELF_AIM_ANGLES"); + string L_ANG = (ELF_AIM_ANGLES).x; + string L_ANG = /* TODO: $neg */ $neg(L_ANG); + ELF_AIM_ANGLES = "x"; + LogDebug("after ELF_AIM_ANGLES"); + string END_LINE = START_LINE; + END_LINE += /* TODO: $relpos */ $relpos(ELF_AIM_ANGLES, Vector3(0, 2048, 0)); + ELF_XBOW_SHOT = 1; + string END_LINE = TraceLine(START_LINE, END_LINE); + ELF_BOLT_LAND = END_LINE; + XDoDamage(START_LINE, END_LINE, DMG_XBOW, 1.0, GetOwner(), GetOwner(), "none", "pierce"); + ELF_XBOW_REPELL_POINT = END_LINE; + if (ELF_XBOW_CL_SCRIPT_ID != "ELF_XBOW_CL_SCRIPT_ID") + { + ClientEvent("update", "all", ELF_XBOW_CL_SCRIPT_ID, "fire_bolt", START_LINE, END_LINE, ELF_AIM_ANGLES, ELF_EXPLOSIVE_BOLTS); + } + if ((ELF_EXPLOSIVE_BOLTS)) + { + ScheduleDelayedEvent(0.1, "elf_do_explode"); + } + } + + void elf_do_explode() + { + XDoDamage(ELF_BOLT_LAND, 128, DMG_XBOW, 0, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:dbolt"); + } + + void game_dodamage() + { + if ((ELF_XBOW_SHOT)) + { + if ((ELF_EXPLOSIVE_BOLTS)) + { + } + ELF_XBOW_TARGETS = FindEntitiesInSphere("enemy", 128); + if (ELF_XBOW_TARGETS != "none") + { + } + ELF_XBOW_REPELL_POINT = param4; + for (int i = 0; i < GetTokenCount(ELF_XBOW_TARGETS, ";"); i++) + { + elf_xbow_repell_targs(); + } + } + ELF_XBOW_SHOT = 0; + if ((ELF_GUIDED_ACTIVE)) + { + if (ELF_GUIDED_EFFECT != "ELF_GUIDED_EFFECT") + { + } + ApplyEffect(ELF_GUIDED_EFFECT, 5.0, GetEntityIndex(GetOwner()), ELF_GUIDED_DOT); + } + } + + void dbolt_dodamage() + { + string CUR_TARG = param2; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(ELF_XBOW_REPELL_POINT, TARG_ORG); + float TARG_DIST = Distance(TARG_ORG, ELF_XBOW_REPELL_POINT); + TARG_DIST /= 128; + string PUSH_STR = /* TODO: $get_skill_ratio */ $get_skill_ratio(TARG_DIST, 500, 100); + string HALF_PUSH_STR = PUSH_STR; + HALF_PUSH_STR /= 2; + LogDebug("game_dodamage str PUSH_STR ratio TARG_DIST"); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, PUSH_STR, HALF_PUSH_STR))); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (!(false)) return; + if ((ELF_CAN_GUIDED)) + { + if (!(ELF_GUIDED_ACTIVE)) + { + } + if (GetGameTime() > NEXT_GUIDED) + { + } + NEXT_GUIDED = GetGameTime(); + NEXT_GUIDED += FREQ_GUIDED; + setup_guided(); + int EXIT_SUB = 1; + } + if ((ELF_BEAM_ATTACK)) + { + if (!(ELF_BEAM_ON)) + { + } + if (GetEntityRange(m_hAttackTarget) < ELF_BEAM_RANGE) + { + } + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = GetEntityOrigin(m_hAttackTarget); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (TRACE_LINE == TRACE_END) + { + } + elf_do_beam(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((ELF_IS_ARCHER)) + { + if (GetEntityRange(m_hAttackTarget) < 32) + { + } + if (GetGameTime() > NEXT_XBOW_BASH) + { + } + NEXT_XBOW_BASH = GetGameTime(); + NEXT_XBOW_BASH += FREQ_XBOW_BASH; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("critical", ANIM_MELEE); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + } + + void setup_guided() + { + SetProp(GetOwner(), "controller2", 100); + npcatk_suspend_movement(ANIM_SPELL_LEFT_HOLD); + PlayAnim("critical", ANIM_RELEASE_EGG); + ScheduleDelayedEvent(0.3, "setup_guided2"); + } + + void setup_guided2() + { + string N_TYPES = GetTokenCount(ELF_GUIDED_TYPES, ";"); + N_TYPES -= 1; + int RND_TYPE = RandomInt(0, N_TYPES); + ELF_GUIDED_TYPE = GetToken(ELF_GUIDED_TYPES, RND_TYPE, ";"); + ELF_GUIDED_DOT = GetToken(ELF_GUIDED_DOTS, RND_TYPE, ";"); + ELF_GUIDED_ACTIVE = 1; + CFB_FIRST_TARGET_FOUND = 0; + CFB_EST_ORG = /* TODO: $relpos */ $relpos(0, 32, 40); + string START_ANGS = GetEntityAngles(GetOwner()); + CFB_EST_ANG = START_ANGS; + ClientEvent("new", "all", ELF_GUIDED_SCRIPT, CFB_EST_ORG, START_ANGS, ELF_GUIDED_TYPE, GetEntityIndex(GetOwner()), ATTACH_LHAND, GetEntityIndex(m_hAttackTarget)); + CFB_FIREBALL_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.1, "cfb_fireball_loop"); + CFB_FORCE_END = GetGameTime(); + CFB_FORCE_END += ELF_GUIDED_DURATION; + } + + void cfb_fireball_loop() + { + if (!(ELF_GUIDED_ACTIVE)) return; + if ((IsEntityAlive(CFB_TARGET))) + { + SetMoveDest(CFB_TARGET); + } + else + { + SetMoveDest(CFB_EST_ORG); + } + ScheduleDelayedEvent(0.5, "cfb_fireball_loop"); + if (GetGameTime() > CFB_NEXT_SCAN) + { + CFB_NEXT_SCAN = GetGameTime(); + CFB_NEXT_SCAN += 2.0; + if (!(IsEntityAlive(CFB_TARGET))) + { + string OWNER_ORG = GetEntityOrigin(GetOwner()); + string TARGET_TOKENS = FindEntitiesInSphere("enemy", 512); + if (TARGET_TOKENS != "none") + { + } + if (GetTokenCount(TARGET_TOKENS, ";") > 1) + { + ScrambleTokens(TARGET_TOKENS, ";"); + } + string TEST_TARG = GetToken(TARGET_TOKENS, 0, ";"); + if ((IsEntityAlive(TEST_TARG))) + { + } + if (!(GetEntityProperty(TEST_TARG, "scriptvar"))) + { + } + CFB_TARGET = TEST_TARG; + if (!(CFB_FIRST_TARGET_FOUND)) + { + } + CFB_FIRST_TARGET_FOUND = 1; + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(CFB_EST_ORG, TARG_ORG); + } + } + XDoDamage(CFB_EST_ORG, 128, ELF_GUIDED_DMG, 0, GetOwner(), GetOwner(), "none", ELF_GUIDED_DMG_TYPE); + if ((IsEntityAlive(CFB_TARGET))) + { + string TARG_ORG = GetEntityOrigin(CFB_TARGET); + if (!(IsValidPlayer(CFB_TARGET))) + { + TARG_ORG += "z"; + } + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(CFB_EST_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + CFB_EST_ANG = ANG_TO_TARG; + CFB_EST_ORG += /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, CFB_SPEED, 0)); + } + else + { + CFB_EST_ORG += /* TODO: $relvel */ $relvel(CFB_EST_ANG, Vector3(0, CFB_SPEED, 0)); + string ANG_TO_TARG = CFB_EST_ANG; + } + ClientEvent("update", "all", CFB_FIREBALL_IDX, "svr_update_fireball_vec", ANG_TO_TARG, CFB_EST_ORG, GetEntityIndex(CFB_TARGET)); + if (GetGameTime() > CFB_FORCE_END) + { + ELF_GUIDED_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "npcatk_resume_movement"); + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_end"); + SetProp(GetOwner(), "controller2", 120); + } + } + + void cfb_fireball_end() + { + LogDebug("cfb_fireball_end"); + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_end"); + ScheduleDelayedEvent(0.1, "cfb_fireball_release"); + } + + void cfb_fireball_release() + { + LogDebug("cfb_fireball_release"); + ELF_GUIDED_ACTIVE = 0; + } + + void OnDamage(int damage) override + { + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 10); + if (!(ELF_PALM_ATTACK)) return; + if (!((param1 !is null))) return; + if (!(IsEntityAlive(param1))) return; + if (GetEntityRange(param1) < ELF_PALM_RANGE) + { + ELF_PALM_TARGET = param1; + SetMoveDest(param1); + PlayAnim("once", ANIM_REPELL); + } + } + + void elf_do_beam() + { + BEAM_TARGET = m_hAttackTarget; + npcatk_suspend_movement(ANIM_SPELL_HOLD); + npcatk_suspend_ai(); + ELF_BEAM_ON = 1; + string L_ATTACH_STAFF_TIP = ATTACH_STAFF_TIP; + L_ATTACH_STAFF_TIP += 1; + Effect("beam", "ents", "lgtning.spr", 50, GetOwner(), L_ATTACH_STAFF_TIP, BEAM_TARGET, 1, ELF_BEAM_COLOR, 200, 30, ELF_BEAM_DUR); + ClientEvent("new", "all", "effects/sfx_beam_sparks", GetEntityIndex(GetOwner()), GetEntityIndex(BEAM_TARGET), ATTACH_STAFF_TIP, ELF_BEAM_COLOR, ELF_BEAM_DUR); + ELF_BEAM_DUR("elf_beam_end"); + elf_beam_loop(); + EmitSound(GetOwner(), 2, SOUND_ELF_BEAM_START, 10); + // svplaysound: svplaysound 1 10 SOUND_ELF_BEAM_LOOP + EmitSound(1, 10, SOUND_ELF_BEAM_LOOP); + } + + void elf_beam_end() + { + ELF_BEAM_ON = 0; + npcatk_resume_ai(); + npcatk_resume_movement(); + // svplaysound: svplaysound 1 0 SOUND_ELF_BEAM_LOOP + EmitSound(1, 0, SOUND_ELF_BEAM_LOOP); + } + + void elf_beam_loop() + { + if (!(ELF_BEAM_ON)) return; + ScheduleDelayedEvent(0.25, "elf_beam_loop"); + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = GetEntityOrigin(BEAM_TARGET); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + SetMoveDest(BEAM_TARGET); + if (!(TRACE_LINE == TRACE_END)) return; + if (ELF_BEAM_SPECIAL == "none") + { + ApplyEffect(BEAM_TARGET, ELF_BEAM_EFFECT, 5.0, GetEntityIndex(GetOwner()), ELF_BEAM_DOT); + } + else + { + elf_beam_special(BEAM_TARGET); + } + DoDamage(BEAM_TARGET, "direct", ELF_BEAM_DMG, 1.0, ELF_BEAM_DMG_TYPE); + AddVelocity(BEAM_TARGET, ELF_BEAM_PUSH_VEL); + } + + void ext_con() + { + LogDebug("got ext_con PARAM1 PARAM2"); + if (param1 == 0) + { + SetProp(GetOwner(), "controller0", param2); + } + if (param1 == 1) + { + SetProp(GetOwner(), "controller1", param2); + } + if (param1 == 2) + { + SetProp(GetOwner(), "controller2", param2); + } + if (param1 == 3) + { + SetProp(GetOwner(), "controller3", param2); + } + } + + void close_mouth() + { + SetProp(GetOwner(), "controller1", 0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RND_DEATH = RandomInt(1, 7); + if (RND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (RND_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (RND_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + if (RND_DEATH == 6) + { + ANIM_DEATH = ANIM_DEATH6; + } + if (RND_DEATH == 7) + { + ANIM_DEATH = ANIM_DEATH7; + } + if (!(ELF_GUIDED_ACTIVE)) return; + ELF_GUIDED_ACTIVE = 0; + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_end"); + } + + void npc_targetsighted() + { + if (ELF_XBOW_CL_SCRIPT_ID == "ELF_XBOW_CL_SCRIPT_ID") + { + ClientEvent("new", "all", ELF_XBOW_CL_SCRIPT, 40.0); + NEXT_SCRIPT_UPDATE = GetGameTime(); + NEXT_SCRIPT_UPDATE += 40.0; + ELF_XBOW_CL_SCRIPT_ID = "game.script.last_sent_id"; + } + else + { + if (GetGameTime() > NEXT_SCRIPT_UPDATE) + { + } + ELF_XBOW_CL_SCRIPT_ID = "ELF_XBOW_CL_SCRIPT_ID"; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/elf_wizard_cl.as b/scripts/angelscript/monsters/elf_wizard_cl.as new file mode 100644 index 00000000..88a09c44 --- /dev/null +++ b/scripts/angelscript/monsters/elf_wizard_cl.as @@ -0,0 +1,14 @@ +#pragma context client + +namespace MS +{ + +class ElfWizardCl : CGameScript +{ + void client_activate() + { + } + +} + +} diff --git a/scripts/angelscript/monsters/elf_xbow_cl.as b/scripts/angelscript/monsters/elf_xbow_cl.as new file mode 100644 index 00000000..bbab7419 --- /dev/null +++ b/scripts/angelscript/monsters/elf_xbow_cl.as @@ -0,0 +1,105 @@ +#pragma context client + +namespace MS +{ + +class ElfXbowCl : CGameScript +{ + string BOLT_ANGLES; + string BOLT_END; + string BOLT_EXPLODE; + int BOLT_SPEED; + string BOLT_START; + string MODEL_BOLT; + string SOUND_BOLT_HIT; + string SOUND_EXPLODE; + string SPRITE_EXPLODE; + + ElfXbowCl() + { + SPRITE_EXPLODE = "explode1.spr"; + SOUND_BOLT_HIT = "weapons/bow/bolthit1.wav"; + SOUND_EXPLODE = "weapons/explode3.wav"; + MODEL_BOLT = "weapons/bows/boltexplosive.mdl"; + Precache(MODEL_BOLT); + Precache(SPRITE_EXPLODE); + Precache(SOUND_BOLT_HIT); + Precache(SOUND_EXPLODE); + } + + void client_activate() + { + string L_DUR = param1; + L_DUR += 0.1; + L_DUR("remove_fx"); + } + + void fire_bolt() + { + BOLT_START = param1; + BOLT_END = param2; + BOLT_ANGLES = param3; + BOLT_EXPLODE = param4; + BOLT_SPEED = 1000; + for (int i = 0; i < 5; i++) + { + shadow_bolts(); + } + ScheduleDelayedEvent(0.05, "hit_wall"); + string DBG_BOLT_END = BOLD_START; + DBG_BOLT_END += /* TODO: $relpos */ $relpos(BOLT_ANGLES, Vector3(0, 2048, 0)); + if ((BOLT_EXPLODE)) + { + ScheduleDelayedEvent(0.1, "do_splodie"); + } + } + + void remove_fx() + { + RemoveScript(); + } + + void shadow_bolts() + { + ClientEffect("tempent", "model", MODEL_BOLT, BOLT_START, "setup_bolt"); + BOLT_SPEED -= 100; + } + + void hit_wall() + { + EmitSound3D("weapons/bow/bolthit1.wav", 10, BOLT_END); + } + + void do_splodie() + { + EmitSound3D("weapons/explode3.wav", 10, BOLT_END); + ClientEffect("tempent", "sprite", SPRITE_EXPLODE, BOLT_END, "explode_sprite"); + ClientEffect("light", "new", BOLT_END, 256, Vector3(255, 128, 64), 1.0); + } + + void explode_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.6); + ClientEffect("tempent", "set_current_prop", "fadeout", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", -0.25); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 15); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + } + + void setup_bolt() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", BOLT_ANGLES); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(BOLT_ANGLES, Vector3(0, BOLT_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/externals.as b/scripts/angelscript/monsters/externals.as new file mode 100644 index 00000000..0d8c6d1b --- /dev/null +++ b/scripts/angelscript/monsters/externals.as @@ -0,0 +1,2198 @@ +#pragma context server + +#include "test_scripts/npc_externals.as" +#include "$currentmap_npc_externals.as" +#include "dq/externals/dq_monster_externals.as" +#include "monsters/debug.as" + +namespace MS +{ + +class Externals : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + string ATTACK_HITRANGE; + string ATTACK_RANGE; + string BASE_FRAMERATE; + float BASE_MOVESPEED; + int CANT_TURN; + int CAN_FLEE; + float CONTAINER_DROP_CHANCE; + int DEMON_BLOOD; + int DROP_GOLD; + float DROP_ITEM1_CHANCE; + float DROP_ITEM2_CHANCE; + float DROP_ITEM3_CHANCE; + float DROP_ITEM4_CHANCE; + string EFFECT_FREEZE_AMT; + string EXTPLAY_SOUND; + string EXT_DBG_LOOP_ON; + string EXT_DEBUG_PARAM; + float EXT_DEMON_BLOOD_RATIO; + string EXT_FADE_ON_DEATH; + int FLEE_DISTANCE; + string FREEZE_WAS_SUSPEND; + int HIT_BY_MANABALL; + string ICE_CAGE_OLD_CANT_TURN; + string ICE_CAGE_OLD_ROAM; + string ICE_CAGE_OLD_STUCK_CHECK; + int IN_ICECAGE; + int IS_BLOODLESS; + int I_R_FROZEN; + int MAKE_NOISE; + string MONSTER_WIDTH; + string MY_OLD_NAME; + string NEXT_CIRCLE_HEAL; + int NO_STEP_ADJ; + int NO_STUCK_CHECKS; + string NPCATK_TARGET; + string NPC_ADJ_DOWN; + string NPC_ADJ_FLAGS; + int NPC_ATTACK_UNTIL_SPOTTED; + string NPC_BOSS_KNOWS; + string NPC_BOSS_KNOWS_AMTS; + string NPC_CMUSIC_FILE; + int NPC_CRITICAL; + int NPC_CUSTOM_COMBAT_MUSIC; + string NPC_CUSTOM_SKIN; + string NPC_DELAY_TARGET; + int NPC_DID_DEATH; + string NPC_DIE_NT_BASE; + string NPC_DIE_NT_FIRST_RUN; + string NPC_DIE_NT_NEXT_CHECK; + int NPC_DIE_ON_SPAWN_REMOVAL; + string NPC_DMG_MULTI; + int NPC_DOT_COLD; + float NPC_DOT_COLD_RATIO; + int NPC_DOT_FIRE; + float NPC_DOT_FIRE_RATIO; + int NPC_DOT_LIGHTNING; + float NPC_DOT_LIGHTNING_RATIO; + int NPC_DOT_POISON; + float NPC_DOT_POISON_RATIO; + int NPC_DO_SPAWN_SOUND; + int NPC_DUMP_XP; + string NPC_EXP_REDUCT; + string NPC_FADEIN_RATE; + int NPC_FADEIN_SET; + float NPC_FADE_IN_SPEED; + int NPC_FORCED_MOVEDEST; + string NPC_FORCE_ROAM; + int NPC_GHOST; + string NPC_GLOW; + string NPC_HP_MULTI; + string NPC_INVISIBLE_SUICIDE; + int NPC_IS_BOSS; + int NPC_IS_TURRET; + string NPC_LAST_SUICDE_ABORT; + string NPC_MODEL_SCALED; + string NPC_MOVE_SPEED_ADJ; + int NPC_MUST_SEE_TARGET; + int NPC_NO_AGRO; + int NPC_NO_AUTO_ACTIVATE; + string NPC_NO_COUNT; + int NPC_NO_DROPS; + int NPC_NO_PLAYER_DMG; + int NPC_NO_ROAM; + int NPC_NO_SIEGE_HUNT; + string NPC_ORG_HEIGHT; + string NPC_ORG_HITRANGE; + string NPC_ORG_RANGE; + string NPC_ORG_WIDTH; + int NPC_OVERRIDE_DEATH; + int NPC_RENDER_AMT; + int NPC_RENDER_MODE; + string NPC_SAY_ON_DIE; + string NPC_SAY_ON_SPOT; + int NPC_SELF_ADJUST; + int NPC_SELF_ADJUST_NOAVG; + string NPC_SET_RANGE; + string NPC_SET_RANGE_RATIO; + string NPC_SILENT_DEATH; + string NPC_SILENT_SUICIDE; + int NPC_SPRITE_IN; + int NPC_SUMMON; + int NPC_TELEHUNT; + int NPC_TELEHUNTER_FX; + string NPC_TELEHUNT_FREQ; + int NPC_TELEHUNT_RANDOM; + int NPC_USES_HANDLE_EVENTS; + int NPC_WINKED_OUT; + string NPC_WINK_IN_POINT; + int NPC_XPTR; + string NPC_XPTR_MAXXP; + string NPC_XPTR_TIME; + string PLAYING_DEAD; + string PLR_SCAN_TOKEN; + string PLR_SCAN_TOKEN_SORTED; + int SKELE_TURNED; + int SKEL_RESPAWN_TIMES; + int STRUCK_BY_HOLY; + int STRUCK_HOLY; + + Externals() + { + NPC_FADE_IN_SPEED = 0.1; + EXT_DEMON_BLOOD_RATIO = 5.0; + } + + void orc_race() + { + SetRace("orc"); + } + + void demon_race() + { + SetRace("demon"); + } + + void undead_race() + { + SetRace("undead"); + } + + void human_race() + { + SetRace("human"); + } + + void spider_race() + { + SetRace("spider"); + } + + void wildanimal_race() + { + SetRace("wildanimal"); + } + + void hated_race() + { + SetRace("hated"); + } + + void beloved_race() + { + SetRace("beloved"); + } + + void evil_race() + { + SetRace("evil"); + } + + void good_race() + { + SetRace("good"); + } + + void vermin_race() + { + SetRace("vermin"); + } + + void rogue_race() + { + SetRace("rogue"); + } + + void hguard_race() + { + SetRace("hguard"); + } + + void neutral_race() + { + SetRace("neutral"); + } + + void lightning_immune() + { + SetDamageResistance("lightning", 0.0); + } + + void fire_immune() + { + SetDamageResistance("fire", 0.0); + } + + void poison_immune() + { + SetDamageResistance("poison", 0.0); + } + + void cold_immune() + { + SetDamageResistance("cold", 0.0); + } + + void normal_immune() + { + SetDamageResistance("cold", 1.0); + SetDamageResistance("fire", 1.0); + SetDamageResistance("lightning", 1.0); + SetDamageResistance("poison", 1.0); + } + + void fifty_armor() + { + SetDamageResistance("all", 0.5); + } + + void eighty_armor() + { + SetDamageResistance("all", 0.2); + } + + void no_armor() + { + SetDamageResistance("all", 1.0); + } + + void weakened_armor() + { + SetDamageResistance("all", 2.0); + } + + void make_invulnerable() + { + MY_OLD_NAME = GetEntityName(GetOwner()); + string MY_NEW_NAME = "Invincible "; + MY_NEW_NAME += MY_OLD_NAME; + SetName(MY_NEW_NAME); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 64, -1, 0); + NPC_GLOW = Vector3(255, 255, 255); + SetInvincible(true); + } + + void make_vulnerable() + { + if (MY_OLD_NAME != "MY_OLD_NAME") + { + SetName(MY_OLD_NAME); + } + SetInvincible(false); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 1, 1); + NPC_GLOW = "NPC_GLOW"; + } + + void add_10_health() + { + string CURRENT_HP = GetEntityHealth(GetOwner()); + CURRENT_HP += 10; + SetHealth(CURRENT_HP); + } + + void add_100_health() + { + string CURRENT_HP = GetEntityHealth(GetOwner()); + CURRENT_HP += 100; + SetHealth(CURRENT_HP); + } + + void add_500_health() + { + string CURRENT_HP = GetEntityHealth(GetOwner()); + CURRENT_HP += 500; + SetHealth(CURRENT_HP); + } + + void add_1000_health() + { + string CURRENT_HP = GetEntityHealth(GetOwner()); + CURRENT_HP += 1000; + SetHealth(CURRENT_HP); + } + + void double_health() + { + string MY_OLDHP_NAME = GetEntityName(GetOwner()); + string MY_NEWHP_NAME = "Strong "; + MY_NEWHP_NAME += MY_OLDHP_NAME; + SetName(MY_NEWHP_NAME); + string CURRENT_HP = GetEntityHealth(GetOwner()); + CURRENT_HP *= 2.0; + SetHealth(CURRENT_HP); + } + + void quad_health() + { + string MY_OLDHP_NAME = GetEntityName(GetOwner()); + string MY_NEWHP_NAME = "Very Strong "; + MY_NEWHP_NAME += MY_OLDHP_NAME; + SetName(MY_NEWHP_NAME); + string CURRENT_HP = GetEntityHealth(GetOwner()); + CURRENT_HP *= 4.0; + SetHealth(CURRENT_HP); + } + + void half_health() + { + string MY_OLDHP_NAME = GetEntityName(GetOwner()); + string MY_NEWHP_NAME = "Weakened "; + MY_NEWHP_NAME += MY_OLDHP_NAME; + SetName(MY_NEWHP_NAME); + NPC_GIVE_EXP /= 2; + SetSkillLevel(NPC_GIVE_EXP); + string CURRENT_HP = GetEntityHealth(GetOwner()); + CURRENT_HP *= 0.5; + SetHealth(CURRENT_HP); + } + + void npc_fade_away() + { + SetAlive(0); + DeleteEntity(GetOwner(), true); // fade out + } + + void go_roam() + { + SetRoam(true); + } + + void no_roam() + { + SetRoam(false); + } + + void set_stun_prot() + { + SetDamageResistance("stun", param1); + } + + void npc_suicide() + { + if (!(IsEntityAlive(GetOwner()))) return; + if ((I_R_COMPANION)) return; + float SINCE_SPAWN = GetGameTime(); + SINCE_SPAWN -= NPC_SPAWN_TIME; + if (SINCE_SPAWN < 2.0) + { + if (param1 == "dienow") + { + SetAnimFrameRate(0); + SetAnimMoveSpeed(0); + NPC_OVERRIDE_DEATH = 1; + DeleteEntity(GetOwner(), true); // fade out + int EXIT_SUB = 1; + } + else + { + NPC_QUED_FOR_DEATH = 1; + ScheduleDelayedEvent(2.1, "npc_suicide"); + LogDebug("npc_suicide - not_ready_to_die - qued for death"); + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (param1 == "no_pets") + { + if ((I_R_PET)) + { + } + int EXIT_SUB = 1; + } + if (param1 == "only_bad") + { + if (GetEntityRace(GetOwner()) == "human") + { + int EXIT_SUB = 1; + } + if (GetEntityRace(GetOwner()) == "hguard") + { + int EXIT_SUB = 1; + } + if (GetEntityRace(GetOwner()) == "beloved") + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if ((NPC_SILENT_SUICIDE)) + { + NPC_SILENT_DEATH = 1; + } + if ((NPC_INVISIBLE_SUICIDE)) + { + SetEntityOrigin(GetOwner(), Vector3(20000, -20000, -20000)); + } + SetInvincible(false); + SetRace("hated"); + SKEL_RESPAWN_TIMES = 99; + DoDamage(GetOwner(), "direct", 99999, 100, GAME_MASTER); + } + + void freeze_solid_start() + { + if (BASE_FRAMERATE == "BASE_FRAMERATE") + { + BASE_FRAMERATE = 1.0; + } + string ICE_CAGE_DURATION = param1; + if (m_hAttackTarget == "unset") + { + NPCATK_TARGET = param2; + } + ICE_CAGE_OLD_CANT_TURN = CANT_TURN; + ICE_CAGE_OLD_STUCK_CHECK = NO_STUCK_CHECKS; + ICE_CAGE_OLD_ROAM = GetRoam(GetOwner()); + LogDebug("freeze_solid_start roamstate ICE_CAGE_OLD_ROAM"); + FREEZE_WAS_SUSPEND = SUSPEND_AI; + if (!(SUSPEND_AI)) + { + npcatk_suspend_ai(ICE_CAGE_DURATION); + } + I_R_FROZEN = 1; + IN_ICECAGE = 1; + CANT_TURN = 1; + NO_STUCK_CHECKS = 1; + SetRoam(false); + SetAnimFrameRate(0.0001); + ICE_CAGE_DURATION("freeze_solid_end"); + } + + void freeze_solid_end() + { + LogDebug("thaw"); + if (!(I_R_FROZEN)) return; + if (param1 == 1) + { + if (!(FREEZE_WAS_SUSPEND)) + { + } + npcatk_resume_ai(); + } + I_R_FROZEN = 0; + IN_ICECAGE = 0; + CANT_TURN = ICE_CAGE_OLD_CANT_TURN; + NO_STUCK_CHECKS = ICE_CAGE_OLD_STUCK_CHECK; + SetRoam(ICE_CAGE_OLD_ROAM); + SetAnimFrameRate(BASE_FRAMERATE); + PlayAnim("once", "break"); + if ((NEW_AI)) + { + if (m_hAttackTarget != "unset") + { + SetMoveDest(m_hAttackTarget); + } + } + else + { + if ((IsEntityAlive(HUNT_LASTTARGET))) + { + SetMoveDest(HUNT_LASTTARGET); + } + } + } + + void double_unfreeze() + { + LogDebug("double_unfreeze"); + PlayAnim("critical", ANIM_ATTACK); + } + + void tally_race() + { + if (GetMonsterProperty("race") == "orc") + { + G_ORC_TALLY += 1; + } + if (GetMonsterProperty("race") == "rogue") + { + G_ROGUE_TALLY += 1; + } + if (GetMonsterProperty("race") == "demon") + { + G_DEMON_TALLY += 1; + } + if (GetMonsterProperty("race") == "undead") + { + G_UNDEAD_TALLY += 1; + } + if (GetMonsterProperty("race") == "spider") + { + G_SPIDER_TALLY += 1; + } + if (GetMonsterProperty("race") == "human") + { + G_HUMAN_TALLY += 1; + } + if (GetMonsterProperty("race") == "hguard") + { + G_HGUARD_TALLY += 1; + } + } + + void tally_enemy() + { + if (!(GetRelationship(GetOwner()) == "enemy")) return; + G_ENEMY_TALLY += 1; + } + + void send_damage() + { + DoDamage(param1, param2, param3, param4, param5); + } + + void demon_blood() + { + if ((param1).findFirst(PARAM) == 0) + { + if (param1 > 1) + { + } + EXT_DEMON_BLOOD_RATIO = param1; + } + EmitSound(GetOwner(), 0, "monsters/troll/trollidle2.wav", 10); + MAKE_NOISE = 2; + DEMON_BLOOD = 1; + if (NPC_ADJ_FLAGS == "NPC_ADJ_FLAGS") + { + NPC_ADJ_FLAGS = ""; + } + if (NPC_ADJ_FLAGS.length() > 0) NPC_ADJ_FLAGS += ";"; + NPC_ADJ_FLAGS += "demon_blood"; + ScheduleDelayedEvent(1.0, "demon_blood_loop"); + } + + void demon_blood_loop() + { + if (!(DEMON_BLOOD)) return; + Effect("glow", GetOwner(), Vector3(255, 0, 0), 256, 1.9, 1.9); + if (!(GetMonsterHP() > 11)) return; + ScheduleDelayedEvent(2.0, "demon_blood_loop"); + MAKE_NOISE += 1; + if (MAKE_NOISE > 5) + { + // PlayRandomSound from: "monsters/troll/trollidle2.wav", "monsters/troll/trollidle.wav" + array sounds = {"monsters/troll/trollidle2.wav", "monsters/troll/trollidle.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + MAKE_NOISE = 0; + } + if (!(DEMON_NOHP_LOSS)) + { + HealEntity(GetOwner(), DEMON_BLOOD_LOSS); + } + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 32, 10, 1, 32); + if (MAKE_NOISE > 0) + { + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + } + DEMON_BLOOD = 1; + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(DEMON_BLOOD)) return; + if (!(GetRelationship(param1) == "enemy")) return; + return; + // PlayRandomSound from: "monsters/troll/trollpain.wav", "monsters/troll/trollattack.wav" + array sounds = {"monsters/troll/trollpain.wav", "monsters/troll/trollattack.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void ext_hit_manaball() + { + if ((HIT_BY_MANABALL)) return; + HIT_BY_MANABALL = 1; + ScheduleDelayedEvent(1.0, "reset_hit_by_manaball"); + } + + void reset_hit_by_manaball() + { + HIT_BY_MANABALL = 0; + } + + void ext_playsound_kiss() + { + EmitSound(GetOwner(), param1, param3, param2); + } + + void ext_svplaysound_kiss() + { + LogDebug("ext_svplaysound_kiss PARAM1 PARAM2 PARAM3 PARAM4 PARAM5"); + // svplaysound: svplaysound PARAM1 PARAM2 PARAM3 PARAM4 PARAM5 + EmitSound(param1, param2, param3, param4, param5); + } + + void ext_mon_playsound() + { + if (param3 != "PARAM3") + { + string SOURCE_ORG = param2; + if (Distance(GetMonsterProperty("origin"), SOURCE_ORG) > param3) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + EXTPLAY_SOUND = param1; + ScheduleDelayedEvent(0.1, "ext_playsound2"); + } + + void turn_undead() + { + if (!(GetMonsterProperty("isalive"))) return; + if ((CUSTOM_TURN_UNDEAD)) return; + if (!(/* TODO: $get_takedmg */ $get_takedmg(GetOwner(), "holy") != 0)) return; + string EXT_INC_HOLY_DMG = param1; + string EXT_THE_EXCORCIST = param2; + Effect("glow", GetOwner(), Vector3(255, 255, 0), 512, 1, 1); + STRUCK_BY_HOLY = 1; + SKELE_TURNED = 1; + STRUCK_HOLY = 1; + XDoDamage(GetEntityIndex(GetOwner()), "direct", EXT_INC_HOLY_DMG, 100, EXT_THE_EXCORCIST, EXT_THE_EXCORCIST, "spellcasting.divination", "holy_effect"); + if (EXT_INC_HOLY_DMG > GetMonsterHP()) + { + EXT_FADE_ON_DEATH = 1; + } + if (!(I_AM_TURNABLE)) return; + TURN_STRENGTH *= 7; + if (TURN_STRENGTH > 1000) + { + int TURN_STRENGTH = 1000; + } + if ((IS_FLEEING)) return; + if (!(TURN_STRENGTH > MY_CURRENT_HP)) return; + string TURN_RESISTANCE = MY_MAX_HP; + TURN_RESISTANCE /= 25; + int TURN_RESISTANCE = int(TURN_RESISTANCE); + if (TURN_RESISTANCE < 2) + { + int TURN_RESISTANCE = 2; + } + int TURNCHANCE = RandomInt(1, TURN_RESISTANCE); + if (!(TURNCHANCE == 1)) return; + string TURN_DURATION = GetSkillLevel(THE_EXCORCIST, "spellcasting.divination"); + if (TURN_DURATION < 5) + { + int TURN_DURATION = 5; + } + if (TURN_DURATION > 15) + { + int TURN_DURATION = 15; + } + FLEE_DISTANCE = 2048; + SetVolume(10); + // PlayRandomSound from: SOUND_TURNED1, SOUND_TURNED2, SOUND_TURNED3, SOUND_TURNED4 + array sounds = {SOUND_TURNED1, SOUND_TURNED2, SOUND_TURNED3, SOUND_TURNED4}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + CAN_FLEE = 1; + npcatk_flee(THE_EXCORCIST, FLEE_DISTANCE, TURN_DURATION); + } + + void ext_speak() + { + SetSayTextRange(2048); + SayText(param1); + } + + void give_hp() + { + HealEntity(GetOwner(), param1); + } + + void ext_invalidate() + { + PLAYING_DEAD = param1; + } + + void ext_dodamage() + { + DoDamage(param1, param2, param3, param4, param5); + } + + void ext_set_freeze_amt() + { + EFFECT_FREEZE_AMT = param1; + } + + void ext_flash_bang() + { + if (!(Distance(GetMonsterProperty("origin"), param1) < param2)) return; + npcatk_flee(GetEntityIndex(param3), 1024, 5.0); + } + + void speed_x2() + { + SetMoveSpeed(1.5); + SetAnimMoveSpeed(1.5); + SetAnimFrameRate(1.5); + BASE_MOVESPEED = 1.5; + BASE_FRAMERATE = 1.5; + if (NPC_ADJ_FLAGS == "NPC_ADJ_FLAGS") + { + NPC_ADJ_FLAGS = ""; + } + if (NPC_ADJ_FLAGS.length() > 0) NPC_ADJ_FLAGS += ";"; + NPC_ADJ_FLAGS += "speed_x2"; + } + + void speed_x2_5() + { + SetMoveSpeed(1.75); + SetAnimMoveSpeed(1.75); + SetAnimFrameRate(1.75); + BASE_MOVESPEED = 1.75; + BASE_FRAMERATE = 1.75; + if (NPC_ADJ_FLAGS == "NPC_ADJ_FLAGS") + { + NPC_ADJ_FLAGS = ""; + } + if (NPC_ADJ_FLAGS.length() > 0) NPC_ADJ_FLAGS += ";"; + NPC_ADJ_FLAGS += "speed_x2"; + } + + void speed_x3() + { + SetMoveSpeed(2.0); + SetAnimMoveSpeed(2.0); + SetAnimFrameRate(2.0); + BASE_MOVESPEED = 2.0; + BASE_FRAMERATE = 2.0; + if (NPC_ADJ_FLAGS == "NPC_ADJ_FLAGS") + { + NPC_ADJ_FLAGS = ""; + } + if (NPC_ADJ_FLAGS.length() > 0) NPC_ADJ_FLAGS += ";"; + NPC_ADJ_FLAGS += "speed_x3"; + } + + void speed_x4() + { + SetMoveSpeed(3.0); + SetAnimMoveSpeed(3.0); + SetAnimFrameRate(3.0); + BASE_MOVESPEED = 3.0; + BASE_FRAMERATE = 3.0; + if (NPC_ADJ_FLAGS == "NPC_ADJ_FLAGS") + { + NPC_ADJ_FLAGS = ""; + } + if (NPC_ADJ_FLAGS.length() > 0) NPC_ADJ_FLAGS += ";"; + NPC_ADJ_FLAGS += "speed_x4"; + } + + void critical_npc() + { + SetInvincible(false); + NPC_CRITICAL = 1; + if (G_CRITICAL_NPCS.length() > 0) G_CRITICAL_NPCS += ";"; + G_CRITICAL_NPCS += GetEntityIndex(GetOwner()); + SetGlobalVar("G_SIEGE_MAP", 1); + string FIRST_TOKEN = GetToken(G_CRITICAL_NPCS, 0, ";"); + if (!(IsEntityAlive(FIRST_TOKEN))) + { + RemoveToken(G_CRITICAL_NPCS, 0, ";"); + } + } + + void ext_monsterspawn_removed() + { + if (!(GetSpawner(GetOwner()) == param1)) return; + string L_MAP_NAME = StringToLower(GetMapName()); + if ((L_MAP_NAME).findFirst("helena") >= 0) + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "aleyesu") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "b_castle") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "bloodrose") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "calruin2") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "cleicert") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "demontemple") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "foutpost") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "gatecity") + { + npc_suicide("dienow"); + } + if ((L_MAP_NAME).findFirst("gertenheld") >= 0) + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "keledrosruins") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "kfortress") + { + npc_suicide("dienow"); + } + if ((L_MAP_NAME).findFirst("lodagond") >= 0) + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "ms_wicardoven") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "mscave") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "shad_palace") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "sorc_villa") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "the_keep") + { + npc_suicide("dienow"); + } + if ((L_MAP_NAME).findFirst("islesofdread") >= 0) + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "the_wall") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "umulak") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "ww1") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "ww2b") + { + npc_suicide("dienow"); + } + if (L_MAP_NAME == "ww3d") + { + npc_suicide("dienow"); + } + if ((NPC_DIE_ON_SPAWN_REMOVAL)) + { + npc_suicide("dienow"); + } + } + + void glow_red() + { + NPC_GLOW = Vector3(255, 0, 0); + } + + void glow_green() + { + NPC_GLOW = Vector3(0, 255, 0); + } + + void glow_blue() + { + NPC_GLOW = Vector3(0, 0, 255); + } + + void glow_yellow() + { + NPC_GLOW = Vector3(255, 255, 0); + } + + void glow_purple() + { + NPC_GLOW = Vector3(255, 0, 255); + } + + void glow_custom() + { + NPC_GLOW = param1; + } + + void glow_remove() + { + NPC_GLOW = "NPC_GLOW"; + } + + void remove_ghost() + { + NPC_GHOST = 0; + } + + void make_ghost() + { + NPC_GHOST = 1; + } + + void OnPostSpawn() override + { + if ((NPC_GHOST)) + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + ScheduleDelayedEvent(10.1, "npcatk_reset_ghost"); + } + if (NPC_GLOW != "NPC_GLOW") + { + LogDebug("npc_post_spawn [externals] initiated glow NPC_GLOW"); + Effect("glow", GetOwner(), NPC_GLOW, 64, 20, 0); + ScheduleDelayedEvent(10.1, "npcatk_reset_glow"); + } + if (!(NPC_ATTACK_UNTIL_SPOTTED)) return; + npcatk_attack_till_spotted(); + if (!(GetEntityProperty(GetOwner(), "nopush"))) return; + SetScriptFlags(GetOwner(), "add", "npspawn", "nopush"); + } + + void npcatk_reset_glow() + { + if (!(NPC_GLOW != "NPC_GLOW")) return; + Effect("glow", GetOwner(), NPC_GLOW, 64, 20, 0); + ScheduleDelayedEvent(10.1, "npcatk_reset_glow"); + } + + void npcatk_reset_ghost() + { + if (!(NPC_GHOST)) return; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + ScheduleDelayedEvent(10.1, "npcatk_reset_ghost"); + } + + void set_race() + { + SetRace(param1); + } + + void set_model() + { + SetModel(param1); + SetSolid("box"); + } + + void ext_report_armor() + { + LogMessage(param2 + GetEntityName(GetOwner()) + "Armor: " + MSC_ARMOR_ALL + param1 + ": " + /* TODO: $get_takedmg */ $get_takedmg(GetOwner(), param1)); + } + + void ext_set_parry() + { + SetStat("parry", param1); + } + + void ext_blind() + { + SetBlind(true); + } + + void ext_unblind() + { + SetBlind(false); + } + + void game_drain_death() + { + DoDamage(GetOwner(), "direct", param1, 100, 1.0); + } + + void ext_wink_out() + { + SetEntityOrigin(GetOwner(), Vector3(20000, 10000, -20000)); + NPC_WINK_IN_POINT = param1; + NPC_WINKED_OUT = 1; + PARAM2("ext_wink_in"); + } + + void ext_wink_in() + { + SetEntityOrigin(GetOwner(), NPC_WINK_IN_POINT); + NPC_WINKED_OUT = 0; + } + + void make_boss() + { + LogDebug("make_boss"); + NPC_IS_BOSS = 1; + NPC_BOSS_KNOWS = ""; + NPC_BOSS_KNOWS_AMTS = ""; + } + + void ext_makepet() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + NPC_SILENT_DEATH = 1; + ScheduleDelayedEvent(0.01, "npc_suicide"); + SpawnNPC(NPC_PET_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(param1), 1 + } + + void ext_set_health() + { + SetHealth(param1); + } + + void ignore_critical_npc() + { + NPC_NO_SIEGE_HUNT = 1; + } + + void ext_hit_chance() + { + SetHitMultiplier(GetOwner()); + } + + void ext_set_frozen() + { + I_R_FROZEN = 1; + SetScriptFlags(GetOwner(), "add", "ext_set_frozen", "nopush", 1, param1, "none"); + PARAM1("ext_set_unfrozen"); + } + + void ext_set_unfrozen() + { + I_R_FROZEN = 0; + } + + void ext_unsummon() + { + if (!(AM_SUMMONED)) return; + SetAlive(0); + DeleteEntity(GetOwner(), true); // fade out + } + + void ext_sphere_token_x() + { + PLR_SCAN_TOKEN = FindEntitiesInSphere(param1, param2); + } + + void ext_sphere_token() + { + PLR_SCAN_TOKEN = FindEntitiesInSphere(param1, param2); + } + + void ext_box_token() + { + PLR_SCAN_TOKEN = /* TODO: $get_tbox */ $get_tbox(param1, param2, param3); + } + + void ext_reduct_xp() + { + if (!(param1 < 1)) return; + if (NPC_EXP_REDUCT == "NPC_EXP_REDUCT") + { + NPC_EXP_REDUCT = param1; + } + else + { + NPC_EXP_REDUCT -= param1; + } + } + + void ext_no_drops() + { + NPC_NO_DROPS = 1; + ScheduleDelayedEvent(1.5, "ext_no_drops2"); + } + + void ext_no_drops2() + { + SetGold(0); + DROP_GOLD = 0; + DROP_ITEM1_CHANCE = 0.0; + DROP_ITEM2_CHANCE = 0.0; + DROP_ITEM3_CHANCE = 0.0; + DROP_ITEM4_CHANCE = 0.0; + CONTAINER_DROP_CHANCE = 0.0; + } + + void ext_ent_list_sort() + { + string SCAN_TYPE = param1; + string SCAN_RANGE = param2; + string SCAN_ORIGIN = param3; + string SORT_TYPE = param4; + ext_sphere_token(SCAN_TYPE, SCAN_RANGE, SCAN_ORIGIN); + PLR_SCAN_TOKEN_SORTED = /* TODO: $sort_entlist */ $sort_entlist(PLR_SCAN_TOKEN, SORT_TYPE); + } + + void ext_no_player_damage() + { + NPC_NO_PLAYER_DMG = 1; + } + + void ext_setrender() + { + LogDebug("got ext_setrender PARAM1"); + // TODO: setrender PARAM1 + } + + void set_scale_nr() + { + string L_PASS = param1; + ext_scale(L_PASS, 0, 1); + } + + void set_scale_nb() + { + string L_PASS = param1; + ext_scale(L_PASS, 1, 0); + } + + void set_scale_nbr() + { + string L_PASS = param1; + ext_scale(L_PASS, 1, 1); + } + + void ext_scale() + { + LogDebug("ext_scale PARAM1 PARAM2 PARAM3"); + if (!(param1 > 0)) return; + string MY_WIDTH = GetEntityWidth(GetOwner()); + string MY_HEIGHT = GetEntityHeight(GetOwner()); + if (NPC_ORG_WIDTH == "NPC_ORG_WIDTH") + { + NPC_ORG_WIDTH = MY_WIDTH; + NPC_ORG_HEIGHT = MY_HEIGHT; + } + else + { + string MY_WIDTH = NPC_ORG_WIDTH; + string MY_HEIGHT = NPC_ORG_HEIGHT; + } + SetProp(GetOwner(), "scale", param1); + MY_WIDTH *= param1; + MY_HEIGHT *= param1; + if (MY_WIDTH < 16) + { + int MY_WIDTH = 16; + } + if (MY_HEIGHT < 16) + { + int MY_HEIGHT = 16; + } + SetWidth(MY_WIDTH); + SetHeight(MY_WIDTH); + MONSTER_WIDTH = MY_WIDTH; + NPC_MODEL_SCALED = param1; + NPC_USES_HANDLE_EVENTS = 1; + string L_HALF_W = MY_WIDTH; + L_HALF_W *= 0.5; + if (param2 != 1) + { + SetBBox(Vector3(/* TODO: $neg */ $neg(L_HALF_W), /* TODO: $neg */ $neg(L_HALF_W), 0), Vector3(L_HALF_W, L_HALF_W, MY_HEIGHT)); + } + if (param1 > 1) + { + if (BASE_MOVESPEED == "BASE_MOVESPEED") + { + BASE_MOVESPEED = param1; + NPC_ORG_BASE_MOVESPEED = BASE_MOVESPEED; + } + else + { + if (NPC_ORG_BASE_MOVESPEED == "NPC_ORG_BASE_MOVESPEED") + { + BASE_MOVESPEED = NPC_ORG_BASE_MOVESPEED; + } + else + { + NPC_ORG_BASE_MOVESPEED = BASE_MOVESPEED; + } + BASE_MOVESPEED += param1; + } + SetAnimMoveSpeed(BASE_MOVESPEED); + SetMoveSpeed(BASE_MOVESPEED); + } + NPC_MODEL_SCALED = param1; + if (!(param3 != 1)) return; + if (!(NPC_RANGED)) + { + LogDebug("ext_scale adjusting ranges"); + ScheduleDelayedEvent(1.9, "ext_adjust_scale_range"); + } + else + { + LogDebug("ext_scale not changing reach , mob is ranged"); + } + } + + void set_scale() + { + string L_PASS = param1; + ext_scale(L_PASS); + } + + void ext_adjust_scale_range() + { + LogDebug("ext_adjust_scale_range entered"); + string L_CUR_WIDTH = GetEntityWidth(GetOwner()); + string L_CUR_HEIGHT = GetEntityHeight(GetOwner()); + if (NPC_ORG_RANGE == "NPC_ORG_RANGE") + { + NPC_ORG_RANGE = ATTACK_RANGE; + } + if (NPC_ORG_HITRANGE == "NPC_ORG_HITRANGE") + { + NPC_ORG_HITRANGE = ATTACK_HITRANGE; + } + ATTACK_RANGE = NPC_ORG_RANGE; + ATTACK_HITRANGE = NPC_ORG_HITRANGE; + if (ATTACK_RANGE >= 512) + { + LogDebug("ext_adjust_scale_range base range > 512 - npc ranged without flag?"); + } + if (!(ATTACK_RANGE < 512)) return; + string L_MIN_RANGE = L_CUR_WIDTH; + if (L_CUR_WIDTH < L_CUR_HEIGHT) + { + string L_MIN_RANGE = L_CUR_HEIGHT; + } + if (NPC_MODEL_SCALED > 1) + { + L_MIN_RANGE *= 0.85; + } + if (L_MIN_RANGE < 38) + { + int L_MIN_RANGE = 38; + } + ATTACK_RANGE = L_MIN_RANGE; + ATTACK_RANGE *= 1.5; + ATTACK_HITRANGE = L_MIN_RANGE; + ATTACK_HITRANGE *= 2.0; + NPC_SET_RANGE = ATTACK_RANGE; + NPC_SET_RANGE_RATIO = ATTACK_RANGE; + NPC_SET_RANGE_RATIO /= NPC_ORG_ATTACK_RANGE; + LogDebug("ext_adjust_scale_range ATTACK_RANGE ATTACK_HITRANGE"); + } + + void set_attack_until_spotted() + { + NPC_ATTACK_UNTIL_SPOTTED = 1; + } + + void npcatk_attack_till_spotted() + { + if (!(m_hAttackTarget == "unset")) return; + ScheduleDelayedEvent(0.25, "npcatk_attack_till_spotted"); + PlayAnim("once", ANIM_ATTACK); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + string FACE_SPOT = NPC_HOME_LOC; + string FACE_DIR = /* TODO: $vec.yaw */ $vec.yaw(NPC_HOME_ANG); + FACE_SPOT += /* TODO: $relpos */ $relpos(Vector3(0, FACE_DIR, 0), Vector3(0, 256, 0)); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(FACE_SPOT); + } + + void set_fade_in() + { + if ((NPC_FADEIN_SET)) return; + NPC_FADEIN_SET = 1; + NPC_RENDER_AMT = 0; + NPC_RENDER_MODE = 2; + SetProp(GetOwner(), "renderamt", NPC_RENDER_AMT); + SetProp(GetOwner(), "rendermode", NPC_RENDER_MODE); + string L_FADE_DELAY = param1; + if (L_FADE_DELAY == 0) + { + float L_FADE_DELAY = 0.1; + } + NPC_FADEIN_RATE = param1; + if (NPC_FADEIN_RATE < 10) + { + NPC_FADEIN_RATE = 10; + } + L_FADE_DELAY("set_fade_in_loop"); + } + + void set_fade_in_loop() + { + NPC_RENDER_AMT += 10; + if (NPC_RENDER_AMT < 255) + { + SetProp(GetOwner(), "renderamt", NPC_RENDER_AMT); + NPC_FADE_IN_SPEED("set_fade_in_loop"); + } + else + { + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "rendermode", 0); + NPC_RENDER_AMT = 255; + NPC_RENDER_MODE = 0; + npc_fadein_done(); + } + } + + void set_no_step_adj() + { + NO_STEP_ADJ = 1; + } + + void set_npc_turret() + { + SetMoveSpeed(0.0); + BASE_MOVESPEED = 0.0; + SetMoveAnim(ANIM_IDLE); + SetRoam(false); + NO_STUCK_CHECKS = 1; + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + NPC_IS_TURRET = 1; + ScheduleDelayedEvent(0.1, "set_npc_turret2"); + } + + void set_npc_turret2() + { + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + SetMoveAnim(ANIM_IDLE); + } + + void set_summon_circle() + { + set_fade_in(1.0); + if (!(NPC_HANDLES_SUMMON_CIRCLES)) + { + SetAnimFrameRate(0); + } + ScheduleDelayedEvent(0.1, "set_summon_circle2"); + } + + void set_summon_circle2() + { + if (!(NPC_HANDLES_SUMMON_CIRCLES)) + { + npcatk_suspend_ai(); + SetAnimFrameRate(0); + } + string CIRCLE_ORG = GetEntityOrigin(GetOwner()); + CIRCLE_ORG = "z"; + if (GetEntityHeight(GetOwner()) < 90) + { + ClientEvent("new", "all", "effects/sfx_summon_circle", CIRCLE_ORG, 3); + } + else + { + ClientEvent("new", "all", "effects/sfx_summon_circle", CIRCLE_ORG, 5); + } + ScheduleDelayedEvent(1.0, "set_summon_circle3"); + } + + void set_summon_circle3() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + if ((NPC_HANDLES_SUMMON_CIRCLES)) return; + npcatk_resume_ai(); + if (BASE_FRAMERATE == "BASE_FRAMERATE") + { + SetAnimFrameRate(1.0); + } + else + { + SetAnimFrameRate(BASE_FRAMERATE); + } + } + + void set_takedmg_holy() + { + SetDamageResistance("holy", param1); + } + + void set_stepsize() + { + SetStepSize(param1); + } + + void ext_playanim() + { + LogDebug("ext_playanim PARAM1"); + PlayAnim("critical", param1); + } + + void bs_global_command() + { + if (!(param3 == "death")) return; + if (!(IsEntityAlive(GetOwner()))) return; + LogDebug("bs_global_command clearplayerhits GetEntityName(param1)"); + if ((NPC_IS_BOSS)) return; + // TODO: clearplayerhits ent_me PARAM1 + } + + void ext_dbg() + { + if (param1 != "off") + { + EXT_DEBUG_PARAM = param1; + EXT_DBG_LOOP_ON = 1; + ext_dbg_loop(); + } + else + { + EXT_DBG_LOOP_ON = 0; + } + } + + void ext_dbg_loop() + { + if (!(EXT_DBG_LOOP_ON)) return; + ScheduleDelayedEvent(0.1, "ext_dbg_loop"); + LogDebug("GetEntityProperty(GetOwner(), "ext_debug_param")"); + } + + void set_blind_attack() + { + NPC_MUST_SEE_TARGET = 0; + } + + void ext_spawn_sound() + { + NPC_USES_HANDLE_EVENTS = 1; + NPC_DO_SPAWN_SOUND = 1; + } + + void setfx_spawn_sound() + { + ext_spawn_sound(); + } + + void setfx_summon_circle() + { + set_summon_circle(); + } + + void setfx_fade_in() + { + set_fade_in(); + } + + void setfx_tele_in() + { + set_fade_in(20); + ScheduleDelayedEvent(0.01, "setfx_tele_in2"); + } + + void setfx_tele_in2() + { + string MY_POS_GROUND = GetEntityOrigin(GetOwner()); + MY_POS_GROUND = "z"; + ClientEvent("new", "all", "effects/sfx_repulse_burst", MY_POS_GROUND, 128, 1.0); + } + + void set_no_player_damage() + { + NPC_NO_PLAYER_DMG = 1; + } + + void ext_setmodelbody() + { + SetModelBody(param1, param2); + } + + void set_die_on_spawn_removed() + { + NPC_DIE_ON_SPAWN_REMOVAL = 1; + } + + void set_dosr() + { + NPC_DIE_ON_SPAWN_REMOVAL = 1; + } + + void set_no_roam() + { + NPC_NO_ROAM = 1; + SetRoam(false); + } + + void set_roam() + { + if ((param1).findFirst(PARAM) == 0) + { + NPC_FORCE_ROAM = 1; + SetRoam(true); + } + else + { + if (param1 == 1) + { + NPC_FORCE_ROAM = 1; + SetRoam(true); + } + else + { + if (param1 == 0) + { + NPC_NO_ROAM = 1; + SetRoam(false); + } + } + } + } + + void trig_damage() + { + string TRIG_DMG = param2; + string TRIG_DMG_TYPE = param3; + TRIG_DMG_TYPE += "_effect"; + XDoDamage(GetOwner(), "direct", TRIG_DMG, 1.0, GAME_MASTER, GAME_MASTER, "none", TRIG_DMG_TYPE); + } + + void set_self_adj() + { + LogDebug("set_self_adj PARAM1"); + if ((NPC_SELF_ADJUST)) return; + NPC_SELF_ADJUST = 1; + if ((param1).findFirst("PARAM") == 0) + { + int NO_ADJ = 1; + } + if ((NO_ADJ)) return; + if (!(param1 > 0)) return; + NPC_ADJ_DOWN = param1; + } + + void set_no_avg() + { + NPC_SELF_ADJUST_NOAVG = 1; + } + + void set_poisonous() + { + string L_PASS = param1; + add_dot_poison(L_PASS); + } + + void add_dot_poison() + { + NPC_DOT_POISON = 1; + NPC_DOT_POISON_RATIO = 1.0; + if (param1 > 0) + { + NPC_DOT_POISON_RATIO = param1; + } + NPC_GLOW = Vector3(0, 255, 0); + } + + void add_dot_cold() + { + NPC_DOT_COLD = 1; + NPC_DOT_COLD_RATIO = 1.0; + if (param1 > 0) + { + NPC_DOT_COLD_RATIO = param1; + } + NPC_GLOW = Vector3(0, 128, 255); + } + + void add_dot_fire() + { + NPC_DOT_FIRE = 1; + NPC_DOT_FIRE_RATIO = 1.0; + if (param1 > 0) + { + NPC_DOT_FIRE_RATIO = param1; + } + NPC_GLOW = Vector3(255, 64, 0); + } + + void add_dot_lightning() + { + NPC_DOT_LIGHTNING = 1; + NPC_DOT_LIGHTNING_RATIO = 1.0; + if (param1 > 0) + { + NPC_DOT_LIGHTNING_RATIO = param1; + } + NPC_GLOW = Vector3(255, 255, 0); + } + + void set_no_auto_activate() + { + NPC_NO_AUTO_ACTIVATE = 1; + } + + void set_non_agro() + { + NPC_NO_AGRO = 1; + npcatk_suspend_ai(); + } + + void setfx_sprite_in() + { + NPC_USES_HANDLE_EVENTS = 1; + NPC_SPRITE_IN = 1; + set_fade_in(); + } + + void setfx_sprite_inx() + { + NPC_USES_HANDLE_EVENTS = 1; + NPC_SPRITE_IN = 2; + set_fade_in(); + } + + void set_summon() + { + NPC_SUMMON = 1; + G_NPC_SUMMON_COUNT += 1; + LogDebug("set_summon G_NPC_SUMMON_COUNT"); + } + + void ext_summon_fade() + { + if (!(NPC_SUMMON)) return; + G_NPC_SUMMON_COUNT -= 1; + LogDebug("ext_summon_fade G_NPC_SUMMON_COUNT"); + SetAnimFrameRate(0); + SetAnimMoveSpeed(0); + SetGravity(0); + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + NPC_DID_DEATH = 1; + NPC_OVERRIDE_DEATH = 1; + SKEL_RESPAWN_TIMES = 99; + DoDamage(GetOwner(), "direct", 99999, 100, GAME_MASTER); + DeleteEntity(GetOwner(), true); // fade out + } + + void set_fadein_delayed() + { + set_fade_in(1.0); + } + + void setfx_beam_in() + { + set_fade_in(); + string BEAM_START = GetEntityOrigin(GetOwner()); + BEAM_START = "z"; + string BEAM_END = BEAM_START; + BEAM_END += "z"; + Effect("beam", "point", "lgtning.spr", 90, BEAM_START, BEAM_END, Vector3(64, 128, 255), 200, 20, 2.0); + EmitSound(GetOwner(), 0, "weather/Storm_exclamation.wav", 10); + } + + void set_xp_tr() + { + NPC_XPTR = 1; + NPC_XPTR_TIME = param1; + NPC_XPTR_TIME *= 60.0; + if (NPC_XPTR_TIME > GetGameTime()) + { + LogDebug("set_xp_tr NPC_XPTR_TIME"); + ScheduleDelayedEvent(2.0, "set_xp_timeramp_start"); + } + else + { + LogDebug("set_xp_tr [time elapsed]"); + } + } + + void set_xp_timeramp_start() + { + NPC_XPTR_MAXXP = NPC_GIVE_EXP; + set_xp_timeramp_loop(); + LogDebug("set_xp_timeramp_start TIME_RATIO [ NPC_XPTR_TIME ]"); + } + + void set_xp_timeramp_loop() + { + if (!(NPC_XPTR)) return; + ScheduleDelayedEvent(60.0, "set_xp_timeramp_loop"); + float L_TIME_RATIO = GetGameTime(); + L_TIME_RATIO /= NPC_XPTR_TIME; + if (L_TIME_RATIO > 1) + { + NPC_XPTR = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string NEW_XP = /* TODO: $ratio */ $ratio(L_TIME_RATIO, 0, NPC_XPTR_MAXXP); + SetSkillLevel(NEW_XP); + LogDebug("set_xp_timeramp_loop L_TIME_RATIO = NEW_XP / NPC_XPTR_MAXXP [ NPC_XPTR_TIME ]"); + } + + void game_scriptflag_update() + { + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "nopush", "type_exists"))) + { + SetNoPush(true); + } + else + { + SetNoPush(false); + } + if (param1 == "add") + { + int L_CHECK_EXPIRE = 1; + } + if (param1 == "edit") + { + int L_CHECK_EXPIRE = 1; + } + if (!(L_CHECK_EXPIRE)) return; + string L_CHECK_EXPTIME = param5; + if (L_CHECK_EXPTIME > -1) + { + L_CHECK_EXPTIME += 0.1; + L_CHECK_EXPTIME("check_flags_expired"); + } + } + + void check_flags_expired() + { + SetScriptFlags(GetOwner(), "remove_expired"); + CallExternal(GetOwner(), "ext_scriptflag_expired"); + } + + void set_cbm_file() + { + if ((NPC_CUSTOM_COMBAT_MUSIC)) return; + NPC_CUSTOM_COMBAT_MUSIC = 1; + NPC_CMUSIC_FILE = param1; + } + + void set_cbm() + { + string L_PASS = param1; + set_cbm_file(L_PASS); + } + + void ext_conflict() + { + } + + void ext_showflags() + { + string L_TEST = /* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "listall"); + } + + void set_mclip() + { + SetMonsterClip(param1); + } + + void ext_teleportfx1() + { + ScheduleDelayedEvent(0.1, "ext_teleportfx1_delay"); + } + + void ext_teleportfx2() + { + EmitSound(GetOwner(), 0, "debris/beamstart8.wav", 10); + } + + void ext_teleportfx1_delay() + { + string MY_FEET = GetEntityOrigin(GetOwner()); + MY_FEET = "z"; + ClientEvent("update", "all", "const.localplayer.scriptID", "cl_tele1_fx", MY_FEET); + } + + void ext_beam_follow_test() + { + LogDebug("beam_follow_test"); + Effect("beam", "follow", "lgtning.spr", GetOwner(), 0, 5, 30.0, 255, Vector3(255, 0, 0)); + Effect("beam", "follow", "lgtning.spr", GetOwner(), 1, 5, 30.0, 255, Vector3(255, 0, 255)); + Effect("beam", "follow", "lgtning.spr", GetOwner(), 2, 5, 30.0, 255, Vector3(255, 255, 0)); + Effect("beam", "follow", "lgtning.spr", GetOwner(), 3, 5, 30.0, 255, Vector3(255, 255, 255)); + } + + void set_cadj() + { + if (!(param1 > 0)) return; + LogDebug("set_cadj PARAM1"); + string L_ADJ_RATIO = param1; + if (!(L_ADJ_RATIO < 1)) return; + NPC_DMG_MULTI = L_ADJ_RATIO; + NPC_HP_MULTI = L_ADJ_RATIO; + SetDamageMultiplier(NPC_DMG_MULTI); + L_ADJ_RATIO *= 0.5; + NPC_EXP_REDUCT = L_ADJ_RATIO; + } + + void ext_dmgmulti() + { + SetDamageMultiplier(param1); + } + + void set_die_nt() + { + LogDebug("set_die_nt PARAM1"); + if (!(NPC_DIE_NT_FIRST_RUN)) + { + if (param1 <= 0) + { + return; + } + NPC_DIE_NT_FIRST_RUN = 1; + NPC_DIE_NT_NEXT_CHECK = param1; + NPC_DIE_NT_BASE = param1; + NPC_LAST_SUICDE_ABORT = GetGameTime(); + NPC_DIE_NT_NEXT_CHECK("set_die_nt"); + return; + } + if ((IsEntityAlive(m_hAttackTarget))) + { + if (GetEntityRange(m_hAttackTarget) < 256) + { + int L_NO_SUICIDE = 1; + } + } + float L_GAME_TIME = GetGameTime(); + string L_LAST = (NPC_LASTSEEN_ENEMY_TIME + NPC_DIE_NT_BASE); + if (L_GAME_TIME < L_LAST) + { + int L_NO_SUICIDE = 1; + } + string L_LAST = (NPC_LAST_DAMAGED_TIME + NPC_DIE_NT_BASE); + if (L_GAME_TIME < L_LAST) + { + int L_NO_SUICIDE = 1; + } + string L_LAST = (NPC_LAST_DAMAGED_OTHER_TIME + NPC_DIE_NT_BASE); + if (L_GAME_TIME < L_LAST) + { + int L_NO_SUICIDE = 1; + } + if ((L_NO_SUICIDE)) + { + NPC_LAST_SUICDE_ABORT = L_GAME_TIME; + NPC_DIE_NT_NEXT_CHECK("set_die_nt"); + } + else + { + NPC_SILENT_SUICIDE = 1; + NPC_INVISIBLE_SUICIDE = 1; + NPC_NO_COUNT = 1; + npc_suicide(); + } + } + + void ext_rmines_clear() + { + npcatk_clear_targets(); + NPC_DIE_NT_NEXT_CHECK = 10.0; + } + + void set_mspeed() + { + LogDebug("set_mspeed PARAM1"); + if (!(param1 > 0)) return; + if (BASE_MOVESPEED == "BASE_MOVESPEED") + { + BASE_MOVESPEED = 1.0; + } + BASE_MOVESPEED *= param1; + NPC_MOVE_SPEED_ADJ = BASE_MOVESPEED; + SetMoveSpeed(BASE_MOVESPEED); + SetAnimMoveSpeed(BASE_MOVESPEED); + LogDebug("set_mspeed newspeed BASE_MOVESPEED"); + PlayAnim("once", "break"); + NPC_USES_HANDLE_EVENTS = 1; + if (NPC_ADJ_FLAGS == "NPC_ADJ_FLAGS") + { + NPC_ADJ_FLAGS = ""; + } + if (NPC_ADJ_FLAGS.length() > 0) NPC_ADJ_FLAGS += ";"; + NPC_ADJ_FLAGS += "mspeed"; + } + + void set_mspeedt() + { + LogDebug("setanim.movespeed PARAM1"); + SetAnimMoveSpeed(param1); + } + + void set_mspeed2() + { + LogDebug("movespeed PARAM1"); + SetMoveSpeed(param1); + } + + void set_bbox() + { + if (!((param1).findFirst(PARAM) == 0)) return; + LogDebug("ext_setbbox PARAM1"); + if ((param2).findFirst(PARAM) == 0) + { + } + else + { + SetBBox(param1, param2); + } + } + + void set_range() + { + if (!(param1 > 0)) return; + if (NPC_ORG_RANGE == "NPC_ORG_RANGE") + { + NPC_ORG_RANGE = ATTACK_RANGE; + } + NPC_SET_RANGE = param1; + NPC_SET_RANGE_RATIO = NPC_ORG_RANGE; + NPC_SET_RANGE_RATIO /= NPC_ORG_RANGE; + ScheduleDelayedEvent(2.0, "set_range2"); + } + + void set_range2() + { + ATTACK_RANGE = NPC_SET_RANGE; + ATTACK_HITRANGE = NPC_SET_RANGE; + ATTACK_HITRANGE *= 2.0; + } + + void set_tele_hunter() + { + if ((NPC_TELEHUNT)) return; + LogDebug("set_tele_hunter PARAM1"); + NPC_TELEHUNT = 1; + NPC_TELEHUNTER_FX = 1; + NPC_TELEHUNT_FREQ = param1; + if ((param1).findFirst(PARAM) == 0) + { + NPC_TELEHUNT_FREQ = 20.0; + } + NPC_DO_SPAWN_SOUND = 1; + NPC_TELEHUNT_FREQ("npcatk_tele_hunter_loop"); + if (NPC_ADJ_FLAGS == "NPC_ADJ_FLAGS") + { + NPC_ADJ_FLAGS = ""; + } + if (NPC_ADJ_FLAGS.length() > 0) NPC_ADJ_FLAGS += ";"; + NPC_ADJ_FLAGS += "telehunt"; + } + + void set_tele_hunter_random() + { + if ((NPC_TELEHUNT)) return; + LogDebug("set_tele_hunter_random PARAM1"); + PlayAnim("once", "break"); + NPC_TELEHUNT = 1; + NPC_TELEHUNTER_FX = 1; + NPC_TELEHUNT_FREQ = param1; + NPC_TELEHUNT_RANDOM = 1; + if ((param1).findFirst(PARAM) == 0) + { + NPC_TELEHUNT_FREQ = 20.0; + } + NPC_DO_SPAWN_SOUND = 1; + NPC_TELEHUNT_FREQ("npcatk_tele_hunter_loop"); + if (NPC_ADJ_FLAGS == "NPC_ADJ_FLAGS") + { + NPC_ADJ_FLAGS = ""; + } + if (NPC_ADJ_FLAGS.length() > 0) NPC_ADJ_FLAGS += ";"; + NPC_ADJ_FLAGS += "telehunt"; + } + + void set_skin() + { + if (!((param1).findFirst(PARAM) == 0)) return; + NPC_CUSTOM_SKIN = param1; + SetProp(GetOwner(), "skin", param1); + } + + void set_say_spawn() + { + if (!((param1).findFirst(PARAM) == 0)) return; + SetSayTextRange(2048); + SayText(param1); + } + + void set_say_spot() + { + if (!((param1).findFirst(PARAM) == 0)) return; + SetSayTextRange(2048); + NPC_DO_ON_SPOT += 1; + NPC_SAY_ON_SPOT = param1; + } + + void set_say_die() + { + if (!((param1).findFirst(PARAM) == 0)) return; + SetSayTextRange(2048); + NPC_DO_ON_DIE += 1; + NPC_SAY_ON_DIE = param1; + } + + void set_dump_xp() + { + LogDebug("set_dump_xp set"); + NPC_DUMP_XP = 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(NPC_DUMP_XP)) return; + LogDebug("dumping xp... [ int(ARRAY_XP_PLAYERS.length()) ]"); + for (int i = 0; i < int(ARRAY_XP_PLAYERS.length()); i++) + { + dbg_dump_xp(); + } + } + + void dbg_dump_xp() + { + string CUR_HIT = i; + string CUR_PLR = ARRAY_XP_PLAYERS[int(CUR_HIT)]; + string CUR_PLR = GetEntityName(CUR_PLR); + string CUR_SKL = ARRAY_XP_SKILLS[int(CUR_HIT)]; + string CUR_EXP = ARRAY_XP_AMTS[int(CUR_HIT)]; + LogDebug("dbg_dump_xp CUR_PLR CUR_SKL CUR_EXP"); + } + + void set_solid() + { + LogDebug("set_solid PARAM1"); + if (param1 == "none") + { + SetSolid(param1); + } + if (param1 == "box") + { + SetSolid(param1); + } + if (param1 == "slidebox") + { + SetSolid(param1); + } + if (param1 == "trigger") + { + SetSolid(param1); + } + } + + void ext_clearfx() + { + LogDebug("ext_clearfx"); + ClearFX(); + } + + void ext_remove_effect() + { + LogDebug("ext_remove_effect PARAM1"); + RemoveEffect(GetOwner(), param1); + } + + void ext_break() + { + LogDebug("ext_break"); + PlayAnim("once", "break"); + } + + void ext_bleed() + { + LogDebug("ext_bleed col PARAM1 amt PARAM2"); + Bleed(GetOwner(), param1, param2); + } + + void set_takedmg() + { + string L_DMG_TYPE = /* TODO: $string_upto */ $string_upto(param1, ":"); + string L_DMG_RATIO = /* TODO: $string_from */ $string_from(param1, ":"); + SetDamageResistance(L_DMG_TYPE, L_DMG_RATIO); + } + + void set_notarget() + { + if (!((param1).findFirst(PARAM) == 0)) return; + PLAYING_DEAD = param1; + } + + void ext_set_next_circle_heal() + { + NEXT_CIRCLE_HEAL = param1; + } + + void ext_delay_target() + { + NPC_DELAY_TARGET = param2; + if (!((NPC_DELAY_TARGET).findFirst(PARAM) == 0)) return; + PARAM1("ext_delay_target2"); + } + + void ext_delay_target2() + { + if (NPC_DELAY_TARGET == "enemy") + { + int L_DO_SCAN = 1; + } + if (!(IsEntityAlive(NPC_DELAY_TARGET))) + { + int L_DO_SCAN = 1; + } + if ((L_DO_SCAN)) + { + string L_TARGS = FindEntitiesInSphere("enemy", 2048); + string L_TARGS = /* TODO: $sort_entlist */ $sort_entlist(L_TARGS, "range"); + npcatk_settarget(GetToken(L_TARGS, 0, ";")); + } + else + { + npcatk_settarget(NPC_DELAY_TARGET); + } + } + + void set_world_spawn() + { + ApplyEffect(GetEntityIndex(GetOwner()), "effects/add_dynamic_spawn", "world"); + } + + void set_dyn_spawn() + { + ApplyEffect(GetEntityIndex(GetOwner()), "effects/add_dynamic_spawn"); + } + + void toggle_invincible() + { + if ((GetEntityProperty(GetOwner(), "invincible"))) + { + SetInvincible(false); + } + else + { + SetInvincible(true); + } + } + + void make_phys_immune() + { + immune_ghost(); + } + + void immune_ghost() + { + SetDamageResistance("slash", 0); + SetDamageResistance("blunt", 0); + SetDamageResistance("pierce", 0); + ext_eresist_adj("lightning", 1.5, -1); + ext_eresist_adj("holy", 2.0, -1); + IS_BLOODLESS = 1; + } + + void ext_hearingsensitivity() + { + SetHearingSensitivity(param1); + } + +} + +} diff --git a/scripts/angelscript/monsters/eye_drainer.as b/scripts/angelscript/monsters/eye_drainer.as new file mode 100644 index 00000000..758fa4ad --- /dev/null +++ b/scripts/angelscript/monsters/eye_drainer.as @@ -0,0 +1,335 @@ +#pragma context server + +#include "monsters/base_flyer.as" +#include "monsters/base_propelled.as" +#include "monsters/base_monster.as" + +namespace MS +{ + +class EyeDrainer : CGameScript +{ + int AM_SUMMONED; + int ANG_HOVER; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SPIN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BEAM_ACTIVE; + string BEAM_ID; + int DOING_DODGE; + string DOING_FS_DODGE; + string EYE_STUCK_POS; + int IDLE_MODE; + int IS_UNHOLY; + int MOVE_RANGE; + string MY_OWNER; + string NEXT_RENDER_CHECK; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + int NPC_NO_END_FLY; + string SOUND_BEAM_LOOP; + string SOUND_DEATH; + string SOUND_HOVER_LOOP; + string SOUND_KILL; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK; + + EyeDrainer() + { + NPC_GIVE_EXP = 200; + NPC_NO_END_FLY = 1; + NPC_HACKED_MOVE_SPEED = 100; + MOVE_RANGE = 128; + ATTACK_RANGE = 128; + ATTACK_HITRANGE = 128; + ANIM_ATTACK = "idle_standard"; + ANIM_WALK = "idle_standard"; + ANIM_RUN = "idle_standard"; + ANIM_IDLE = "spin_horizontal_slow"; + ANIM_DEATH = "spin_horizontal_fast"; + ANIM_SPIN = "spin_horizontal_slow"; + IS_UNHOLY = 1; + SOUND_BEAM_LOOP = "x/x_teleattack1.wav"; + SOUND_STRUCK = "weapons/cbar_hitbod1.wav"; + SOUND_PAIN1 = "houndeye/he_pain2.wav"; + SOUND_PAIN2 = "houndeye/he_pain5.wav"; + SOUND_KILL = "houndeye/he_blast3.wav"; + SOUND_DEATH = "turret/tu_die2.wav"; + SOUND_HOVER_LOOP = "ambience/labdrone2.wav"; + Precache(SOUND_DEATH); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10.0); + if ((IsEntityAlive(GetOwner()))) + { + } + // svplaysound: svplaysound 4 0 SOUND_HOVER_LOOP + EmitSound(4, 0, SOUND_HOVER_LOOP); + ScheduleDelayedEvent(0.1, "hover_loop"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + if ((AM_SUMMONED)) + { + } + if (!(BEAM_ACTIVE)) + { + } + if (EYE_STUCK_POS == GetMonsterProperty("origin")) + { + npc_suicide(); + } + EYE_STUCK_POS = "game.monstemr.origin"; + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(1.0); + if ((IsEntityAlive(GetOwner()))) + { + } + string MY_POS = GetMonsterProperty("origin"); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(MY_POS); + string GROUND_LOC = MY_POS; + GROUND_LOC = "z"; + if (Distance(MY_POS, GROUND_LOC) < 16) + { + if (!(DOING_FS_DODGE)) + { + } + DOING_FS_DODGE = 1; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, -110)); + ScheduleDelayedEvent(1.0, "reset_fs_dodge"); + } + string UP_POS = MY_POS; + UP_POS += "z"; + string UP_POS = TraceLine(MY_POS, UP_POS); + if (Distance(MY_POS, UP_POS) < 16) + { + if (!(DOING_FS_DODGE)) + { + } + DOING_FS_DODGE = 1; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 110)); + ScheduleDelayedEvent(1.0, "reset_fs_dodge"); + } + } + + void game_dynamically_created() + { + AM_SUMMONED = 1; + MY_OWNER = param1; + ScheduleDelayedEvent(60.0, "npc_suicide"); + } + + void OnSpawn() override + { + SetHealth(450); + SetWidth(16); + SetHeight(16); + SetName("Eye of Death"); + SetHearingSensitivity(10); + SetRoam(true); + SetRace("demon"); + SetModel("monsters/eye_medium_float.mdl"); + SetIdleAnim(ANIM_SPIN); + SetMoveAnim(ANIM_WALK); + SetMonsterClip(0); + SetGravity(0); + SetFly(true); + // svplaysound: svplaysound 4 10 SOUND_HOVER_LOOP + EmitSound(4, 10, SOUND_HOVER_LOOP); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "renderfx", 16); + SetDamageResistance("holy", 2.0); + SetDamageResistance("pierce", 4.0); + ANG_HOVER = 0; + IDLE_MODE = 1; + ScheduleDelayedEvent(3.0, "solidify_me"); + ScheduleDelayedEvent(0.1, "init_beam"); + } + + void OnPostSpawn() override + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "renderfx", 16); + } + + void solidify_me() + { + SetProp(GetOwner(), "renderfx", 0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void init_beam() + { + Effect("beam", "ents", "laserbeam.spr", 30, GetOwner(), 0, GetOwner(), 0, Vector3(64, 64, 255), 0, 30, -1); + BEAM_ID = GetEntityIndex(m_hLastCreated); + } + + void npc_targetsighted() + { + if ((IDLE_MODE)) + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_WALK); + IDLE_MODE = 0; + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetGameTime() > NEXT_RENDER_CHECK) + { + NEXT_RENDER_CHECK = GetGameTime(); + NEXT_RENDER_CHECK += 5.0; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + if (m_hAttackTarget == "unset") + { + if ((BEAM_ACTIVE)) + { + } + beam_off(); + } + if (!(IsEntityAlive(m_hAttackTarget))) return; + string TARGET_RANGE = GetEntityRange(m_hAttackTarget); + if ((BEAM_ACTIVE)) + { + if (TARGET_RANGE > ATTACK_RANGE) + { + beam_off(); + } + else + { + string SEE_TARGET = false; + if ((SEE_TARGET)) + { + GiveMP(m_hAttackTarget); + if (GetGameTime() > LASTATK_MESSAGE) + { + LASTATK_MESSAGE = GetGameTime(); + LASTATK_MESSAGE += 2.0; + SendPlayerMessage(m_hAttackTarget, "Your soul is being drained!"); + Effect("screenfade", m_hAttackTarget, 2, 1, Vector3(0, 0, 255), 180, "fadein"); + } + if (GetEntityMP(m_hAttackTarget) <= 0) + { + } + slay_target(); + } + if (!(SEE_TARGET)) + { + beam_off(); + } + } + } + if ((BEAM_ACTIVE)) return; + if (!(TARGET_RANGE < ATTACK_RANGE)) return; + beam_on(); + } + + void my_target_died() + { + beam_off(); + } + + void npcatk_clear_targets() + { + IDLE_MODE = 1; + SetMoveAnim(ANIM_SPIN); + SetIdleAnim(ANIM_SPIN); + } + + void beam_on() + { + BEAM_ACTIVE = 1; + Effect("beam", "update", BEAM_ID, "end_target", m_hAttackTarget, 0); + Effect("beam", "update", BEAM_ID, "brightness", 200); + // svplaysound: svplaysound 1 10 SOUND_BEAM_LOOP + EmitSound(1, 10, SOUND_BEAM_LOOP); + } + + void beam_off() + { + // svplaysound: svplaysound 1 0 SOUND_BEAM_LOOP + EmitSound(1, 0, SOUND_BEAM_LOOP); + Effect("beam", "update", BEAM_ID, "end_target", GetEntityIndex(GetOwner()), 0); + Effect("beam", "update", BEAM_ID, "brightness", 0); + BEAM_ACTIVE = 0; + } + + void slay_target() + { + SendPlayerMessage(m_hAttackTarget, "Your soul has been drained."); + DoDamage(m_hAttackTarget, "direct", 99999, 1.0, GetOwner()); + EmitSound(GetOwner(), 2, SOUND_KILL, 10); + } + + void hover_loop() + { + // svplaysound: svplaysound 4 10 SOUND_HOVER_LOOP + EmitSound(4, 10, SOUND_HOVER_LOOP); + } + + void OnDeath(CBaseEntity@ attacker) override + { + beam_off(); + Effect("beam", "update", BEAM_ID, "remove", 0.1); + // svplaysound: svplaysound 4 0 SOUND_HOVER_LOOP + EmitSound(4, 0, SOUND_HOVER_LOOP); + // svplaysound: svplaysound 1 0 SOUND_BEAM_LOOP + EmitSound(1, 0, SOUND_BEAM_LOOP); + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner()), 5); + if (!(AM_SUMMONED)) return; + if (!(IsEntityAlive(MY_OWNER))) return; + CallExternal(MY_OWNER, "eye_died"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(DOING_DODGE)) + { + do_dodge(); + } + EmitSound(GetOwner(), 1, SOUND_STRUCK, 5); + } + + void do_dodge() + { + if ((DOING_FS_DODGE)) return; + if (!(IsEntityAlive(GetOwner()))) return; + DOING_DODGE = 1; + float RND_FB = Random(0, -120); + float RND_RL = Random(-120, 120); + float RND_UD = Random(-120, 120); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_RL, RND_FB, RND_UD)); + ScheduleDelayedEvent(1.0, "reset_dodge"); + } + + void reset_dodge() + { + DOING_DODGE = 0; + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + + void reset_fs_dodge() + { + DOING_FS_DODGE = 0; + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + +} + +} diff --git a/scripts/angelscript/monsters/fallen_armor.as b/scripts/angelscript/monsters/fallen_armor.as new file mode 100644 index 00000000..051d652e --- /dev/null +++ b/scripts/angelscript/monsters/fallen_armor.as @@ -0,0 +1,601 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class FallenArmor : CGameScript +{ + float ACCURACY_SHIELD; + float ACCURACY_STAB; + float ACCURACY_SWORD; + int AM_SUMMONING; + string ANIM_ATTACK; + string ANIM_ATTACK_NORM; + string ANIM_ATTACK_SHIELD; + string ANIM_ATTACK_STAB; + string ANIM_DEATH; + string ANIM_EQUIP; + string ANIM_EQUIP2; + string ANIM_GETUP; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_SHIELD_IDLE; + string ANIM_SIT_IDLE; + string ANIM_STANCE_IDLE; + string ANIM_SUMMON; + string ANIM_TOSHIELD; + string ANIM_TOSTANCE; + string ANIM_WALK; + string ANIM_WALK_NORM; + string ANIM_WALK_SHIELD; + string ATTACK_HITRANGE; + int ATTACK_HITRANGE_NORM; + int ATTACK_HITRANGE_SHIELD; + int ATTACK_HITRANGE_STAB; + string ATTACK_MOVERANGE; + int ATTACK_MOVERANGE_NORM; + int ATTACK_MOVERANGE_SHIELD; + int ATTACK_RANGE; + int ATTACK_RANGE_NORM; + int CAN_FLEE; + int CAN_FLINCH; + string CYCLE_TIME; + int DID_FIRST_SUMMON; + string DID_PAIN_SOUND; + int DID_SUMMON; + int FIN_DID_SUMMON; + string FIRST_TARGET; + int HITBACK_FRUST; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int MONSTER_STEP; + int MOVE_FAST; + int MOVE_NORMAL; + int NO_STUCK_CHECKS; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string NPC_IS_BOSS; + string NPC_STORE_TARGET; + int PLAYING_STAB; + int SHIELD_DAMAGE; + int SHIELD_ON; + int SHIELD_RANGE; + string SOUND_DEATH; + string SOUND_GETUP; + string SOUND_HIT1; + string SOUND_HIT2; + string SOUND_LARGESWING; + string SOUND_MISS1; + string SOUND_MISS2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_POWERUP; + string SOUND_PRE_STAB; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STEP3; + string SOUND_STEP4; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCKSHIELD1; + string SOUND_STRUCKSHIELD2; + string SOUND_SUMMON; + string SOUND_SUMMON_START; + int STAB_DAMAGE; + float STAB_FREQ; + string SUPER_STABBING; + string SWITCHING_STANCE; + int SWORD_DAMAGE; + float TOSHIELD_DELAY; + int TRIGGER_RANGE; + int WAITING_FOR_PLAYER; + + FallenArmor() + { + NPC_GIVE_EXP = 1000; + if (StringToLower(GetMapName()) == "b_castle") + { + NPC_IS_BOSS = 1; + } + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + ANIM_WALK_NORM = "walk"; + ANIM_RUN_NORM = "run"; + ANIM_WALK_SHIELD = "shield_walk"; + ANIM_STANCE_IDLE = "idle"; + ANIM_SIT_IDLE = "sit_idle"; + ANIM_SHIELD_IDLE = "shield_idle"; + ANIM_IDLE = ANIM_SIT_IDLE; + ANIM_WALK = ANIM_WALK_NORM; + ANIM_RUN = ANIM_RUN_NORM; + ANIM_DEATH = "dead"; + ANIM_ATTACK_NORM = "attack1"; + ANIM_ATTACK_STAB = "attack2"; + ANIM_ATTACK_SHIELD = "shield_attack"; + ANIM_ATTACK = ANIM_ATTACK_NORM; + ANIM_SUMMON = "summon"; + ANIM_GETUP = "get_up"; + ANIM_EQUIP = "equip"; + ANIM_EQUIP2 = "equip2"; + ANIM_TOSHIELD = "stance_to_shield"; + ANIM_TOSTANCE = "shield_to_stance"; + CAN_FLINCH = 0; + CAN_FLEE = 0; + SHIELD_RANGE = 500; + TRIGGER_RANGE = 256; + ATTACK_MOVERANGE_NORM = 28; + ATTACK_MOVERANGE_SHIELD = 64; + ATTACK_HITRANGE_SHIELD = 160; + ATTACK_HITRANGE_STAB = 160; + ATTACK_HITRANGE_NORM = 128; + ATTACK_RANGE_NORM = 80; + ATTACK_MOVERANGE = ATTACK_MOVERANGE_NORM; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = ATTACK_HITRANGE_NORM; + STAB_DAMAGE = 2200; + SWORD_DAMAGE = "$rand(60,120)"; + SHIELD_DAMAGE = "$rand(50,200)"; + ACCURACY_SWORD = 0.8; + ACCURACY_SHIELD = 0.9; + ACCURACY_STAB = 1.0; + STAB_FREQ = "$randf(30,60)"; + SOUND_GETUP = "amb/screeching.wav"; + SOUND_STEP1 = "player/pl_grate1.wav"; + SOUND_STEP2 = "player/pl_grate2.wav"; + SOUND_STEP3 = "player/pl_grate3.wav"; + SOUND_STEP4 = "player/pl_grate4.wav"; + MONSTER_STEP = 0; + SOUND_STRUCK1 = "debris/metal1.wav"; + SOUND_STRUCK2 = "debris/metal3.wav"; + SOUND_STRUCKSHIELD1 = "debris/metal6.wav"; + SOUND_STRUCKSHIELD2 = "doors/doorstop5.wav"; + SOUND_HIT1 = "zombie/claw_strike1.wav"; + SOUND_HIT2 = "zombie/claw_strike3.wav"; + SOUND_LARGESWING = "zombie/claw_miss2.wav"; + SOUND_MISS1 = "weapons/swingsmall.wav"; + SOUND_MISS2 = "weapons/cbar_miss1.wav"; + SOUND_PAIN1 = "x/x_pain1.wav"; + SOUND_PAIN2 = "x/x_pain3.wav"; + SOUND_SUMMON = "x/x_ballattack1.wav"; + SOUND_SUMMON_START = "x/x_recharge2.wav"; + SOUND_POWERUP = "ambience/particle_suck2.wav"; + SOUND_PRE_STAB = "x/x_attack2.wav"; + SOUND_DEATH = "tentacle/te_death2.wav"; + Precache(SOUND_DEATH); + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if (m_hAttackTarget == "unset") + { + if (!(NPC_MOVING_LAST_KNOWN)) + { + } + ANIM_WALK = ANIM_WALK_NORM; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + if (m_hAttackTarget != "unset") + { + } + if (!(SWITCHING_STANCE)) + { + } + string TARGET_RANGE = GetEntityRange(m_hAttackTarget); + if (TARGET_RANGE > SHIELD_RANGE) + { + if ((SHIELD_ON)) + { + PlayAnim("critical", "shield_to_stance"); + } + ANIM_RUN = ANIM_RUN_NORM; + SWITCHING_STANCE = 1; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (!(false)) + { + if ((SHIELD_ON)) + { + } + PlayAnim("critical", "shield_to_stance"); + ANIM_RUN = ANIM_RUN_NORM; + SWITCHING_STANCE = 1; + } + } + + void OnSpawn() override + { + armor_spawn(); + } + + void armor_spawn() + { + SetName("Armor of the Fallen"); + SetHealth(6000); + SetWidth(32); + SetHeight(96); + SetRace("demon"); + SetModel("monsters/enemy.mdl"); + SetHearingSensitivity(11); + SetIdleAnim(ANIM_SIT_IDLE); + SetMoveAnim(ANIM_SIT_IDLE); + PlayAnim("once", ANIM_SIT_IDLE); + SetStat("parry", 30); + NO_STUCK_CHECKS = 1; + SetInvincible(true); + SetDamageResistance("all", 0.1); + SetDamageResistance("fire", 0.5); + SetDamageResistance("lightning", 1.5); + SetDamageResistance("cold", 0.8); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.5); + WAITING_FOR_PLAYER = 1; + npcatk_suspend_ai(); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(WAITING_FOR_PLAYER)) return; + armor_heardsound(); + } + + void armor_heardsound() + { + if (!(WAITING_FOR_PLAYER)) return; + if (!(IsValidPlayer("ent_lastheard"))) return; + if (!(GetEntityRange("ent_lastheard") < TRIGGER_RANGE)) return; + FIRST_TARGET = GetEntityIndex("ent_lastheard"); + WAITING_FOR_PLAYER = 0; + oh_it_is_on_biatch(); + } + + void oh_it_is_on_biatch() + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + TOSHIELD_DELAY = Random(10, 30); + TOSHIELD_DELAY("setup_shield_check"); + PlayAnim("critical", ANIM_GETUP); + } + + void getup_done() + { + SetMoveDest(/* TODO: $relpos */ $relpos(0, 64, 0)); + PlayAnim("critical", ANIM_EQUIP); + } + + void equip_done() + { + UseTrigger("break_throne"); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 256, 5, 5); + SpawnNPC("monsters/companion/spell_maker_divination", /* TODO: $relpos */ $relpos(0, 0, 50), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "none", "none", 64 + SetModelBody(0, 1); + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + PlayAnim("critical", ANIM_EQUIP2); + SetInvincible(false); + NPC_STORE_TARGET = "unset"; + npcatk_resume_ai(); + if ((IsEntityAlive(FIRST_TARGET))) + { + npcatk_settarget(FIRST_TARGET); + } + stance_on(); + ANIM_WALK = ANIM_WALK_NORM; + ANIM_IDLE = ANIM_STANCE_IDLE; + SetIdleAnim(ANIM_STANCE_IDLE); + SetMoveAnim(ANIM_WALK_NORM); + STAB_FREQ("super_stab_check"); + CYCLE_TIME = CYCLE_TIME_BATTLE; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(/* TODO: $relpos */ $relpos(0, 64, 0)); + ScheduleDelayedEvent(5.0, "restore_stuck_checks"); + } + + void restore_stuck_checks() + { + SetRoam(true); + NO_STUCK_CHECKS = 0; + } + + void super_stab_check() + { + if (m_hAttackTarget == "unset") + { + string NEXT_STAB_CHECK = STAB_FREQ; + NEXT_STAB_CHECK /= 4; + NEXT_STAB_CHECK("super_stab_check"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(false)) + { + string NEXT_STAB_CHECK = STAB_FREQ; + NEXT_STAB_CHECK /= 4; + NEXT_STAB_CHECK("super_stab_check"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SHIELD_ON)) + { + EmitSound(GetOwner(), 0, SOUND_PRE_STAB, 10); + Effect("glow", GetOwner(), Vector3(200, 200, 255), 256, 5, 5); + SUPER_STABBING = 1; + ScheduleDelayedEvent(2.0, "do_super_stab"); + STAB_FREQ("super_stab_check"); + } + if ((SHIELD_ON)) + { + string NEXT_STAB_CHECK = STAB_FREQ; + NEXT_STAB_CHECK /= 2; + NEXT_STAB_CHECK("super_stab_check"); + } + } + + void do_super_stab() + { + npcatk_suspend_ai(6.0); + PLAYING_STAB = 1; + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_ATTACK_STAB); + SetMoveAnim(ANIM_ATTACK_STAB); + SetIdleAnim(ANIM_ATTACK_STAB); + } + + void stab_strike() + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE_STAB, STAB_DAMAGE, ACCURACY_STAB, "magic"); + npcatk_resume_ai(); + SUPER_STABBING = 0; + PLAYING_STAB = 0; + stance_on(); + } + + void setup_shield_check() + { + TOSHIELD_DELAY = Random(10, 30); + TOSHIELD_DELAY("setup_shield_check"); + if (!(m_hAttackTarget != "unset")) return; + if (!(SHIELD_ON)) + { + if (!(SUPER_STABBING)) + { + } + if (GetEntityRange(m_hAttackTarget) <= SHIELD_RANGE) + { + npcatk_suspend_ai(1.0); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_TOSHIELD); + } + } + if ((SHIELD_ON)) + { + npcatk_suspend_ai(1.0); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_TOSTANCE); + } + } + + void sword_strike() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, SWORD_DAMAGE, ACCURACY_SWORD, "slash"); + } + + void shield_strike() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, SHIELD_DAMAGE, ACCURACY_SHIELD, "slash"); + } + + void game_dodamage() + { + if (!(param1)) + { + if (ANIM_ATTACK == "attack1") + { + // PlayRandomSound from: SOUND_MISS1, SOUND_MISS2 + array sounds = {SOUND_MISS1, SOUND_MISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (ANIM_ATTACK == "attack2") + { + EmitSound(GetOwner(), 0, SOUND_LARGESWING, 10); + } + if (ANIM_ATTACK == "shield_attack") + { + EmitSound(GetOwner(), 0, SOUND_LARGESWING, 10); + } + } + if ((param1)) + { + // PlayRandomSound from: SOUND_HIT1, SOUND_HIT2 + array sounds = {SOUND_HIT1, SOUND_HIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void stance_on() + { + SetStat("parry", 30); + SetDamageResistance("all", 0.4); + SHIELD_ON = 0; + ANIM_WALK = ANIM_WALK_NORM; + ANIM_RUN = ANIM_RUN_NORM; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + ANIM_ATTACK = ANIM_ATTACK_NORM; + ATTACK_MOVERANGE = ATTACK_MOVERANGE_NORM; + ATTACK_HITRANGE = ATTACK_HITRANGE_NORM; + SWITCHING_STANCE = 0; + } + + void shield_on() + { + SetStat("parry", 60); + SetDamageResistance("all", 0.1); + SHIELD_ON = 1; + ANIM_WALK = ANIM_WALK_SHIELD; + ANIM_RUN = ANIM_WALK_SHIELD; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_SHIELD_IDLE); + ANIM_ATTACK = ANIM_ATTACK_SHIELD; + ATTACK_MOVERANGE = ATTACK_MOVERANGE_SHIELD; + ATTACK_HITRANGE = ATTACK_HITRANGE_SHIELD; + SWITCHING_STANCE = 0; + } + + void run_step() + { + MONSTER_STEP += 1; + if (MONSTER_STEP == 1) + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 10); + } + if (MONSTER_STEP == 2) + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 10); + } + if (MONSTER_STEP == 3) + { + EmitSound(GetOwner(), 0, SOUND_STEP3, 10); + } + if (MONSTER_STEP == 4) + { + EmitSound(GetOwner(), 0, SOUND_STEP4, 10); + MONSTER_STEP = 0; + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetMonsterHP() < 2000) + { + if (param1 > 30) + { + } + if (RandomInt(1, 10) == 1) + { + } + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DID_PAIN_SOUND = 1; + } + if (!(DID_PAIN_SOUND)) + { + if ((SHIELD_ON)) + { + // PlayRandomSound from: SOUND_STRUCKSHIELD1, SOUND_STRUCKSHIELD2 + array sounds = {SOUND_STRUCKSHIELD1, SOUND_STRUCKSHIELD2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(SHIELD_ON)) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + DID_PAIN_SOUND = 0; + if ((DID_SUMMON)) return; + if (!(GetMonsterHP() < 4000)) return; + npcatk_suspend_ai(); + SetMoveAnim(ANIM_SUMMON); + SetIdleAnim(ANIM_SUMMON); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 256, 5, 5); + EmitSound(GetOwner(), 0, SOUND_SUMMON_START, 10); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_SUMMON); + AM_SUMMONING = 1; + DID_SUMMON = 1; + FIN_DID_SUMMON = 0; + ScheduleDelayedEvent(0.25, "summon_loop"); + ScheduleDelayedEvent(5.0, "summon_done"); + } + + void summon_loop() + { + if ((FIN_DID_SUMMON)) return; + ScheduleDelayedEvent(0.25, "summon_loop"); + } + + void cycle_up() + { + if ((DID_FIRST_SUMMON)) return; + DID_FIRST_SUMMON = 1; + ScheduleDelayedEvent(10.0, "first_summon"); + } + + void first_summon() + { + PlayAnim("critical", ANIM_SUMMON); + } + + void summon_done() + { + if ((FIN_DID_SUMMON)) return; + FIN_DID_SUMMON = 1; + SpawnNPC("monsters/companion/spell_maker_summoning", /* TODO: $relpos */ $relpos(0, 0, 50), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "none", "none", 64 + npcatk_resume_ai(); + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + stance_on(); + UseTrigger("summon_armors"); + AM_SUMMONING = 0; + } + + void game_movingto_dest() + { + NPC_HACKED_MOVE_SPEED = MOVE_FAST; + if ((SHIELD_ON)) + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if (m_hAttackTarget == "unset") + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if ((PLAYING_STAB)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + if ((AM_SUMMONING)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + + void OnSuspendAI() + { + HITBACK_FRUST = 0; + SetMoveDest("none"); + game_stopmoving(); + } + + void npc_selectattack() + { + SetAnimMoveSpeed(0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 190, 20, 15, 1024); + } + +} + +} diff --git a/scripts/angelscript/monsters/fallen_armor_triggered.as b/scripts/angelscript/monsters/fallen_armor_triggered.as new file mode 100644 index 00000000..542d39dc --- /dev/null +++ b/scripts/angelscript/monsters/fallen_armor_triggered.as @@ -0,0 +1,57 @@ +#pragma context server + +#include "monsters/fallen_armor.as" + +namespace MS +{ + +class FallenArmorTriggered : CGameScript +{ + string FIRST_TARGET; + float TOSHIELD_DELAY; + int WAITING_FOR_PLAYER; + + void armor_spawn() + { + SetName("Armor of the Fallen"); + SetHealth(6000); + SetWidth(32); + SetHeight(96); + SetRace("demon"); + SetModel("monsters/enemy.mdl"); + SetHearingSensitivity(11); + SetIdleAnim(ANIM_SIT_IDLE); + SetMoveAnim(ANIM_SIT_IDLE); + PlayAnim("once", ANIM_SIT_IDLE); + SetStat("parry", 30); + SetInvincible(true); + SetDamageResistance("all", 0.1); + SetDamageResistance("fire", 0.5); + SetDamageResistance("lightning", 1.5); + SetDamageResistance("cold", 0.8); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.5); + WAITING_FOR_PLAYER = 1; + npcatk_suspend_ai(); + } + + void armor_heardsound() + { + } + + void enter_combat() + { + if (!(WAITING_FOR_PLAYER)) return; + WAITING_FOR_PLAYER = 0; + LookAt(GetOwner()); + FIRST_TARGET = GetEntityIndex(m_hLastSeen); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + TOSHIELD_DELAY = Random(10, 30); + TOSHIELD_DELAY("setup_shield_check"); + PlayAnim("critical", ANIM_GETUP); + } + +} + +} diff --git a/scripts/angelscript/monsters/fire_fist_cl.as b/scripts/angelscript/monsters/fire_fist_cl.as new file mode 100644 index 00000000..c4ce7431 --- /dev/null +++ b/scripts/angelscript/monsters/fire_fist_cl.as @@ -0,0 +1,62 @@ +#pragma context client + +namespace MS +{ + +class FireFistCl : CGameScript +{ + string BONE_IDX; + int CUR_FRAME; + string GLOW_COLOR; + int GLOW_RAD; + string SKEL_ID; + string SKEL_LIGHT_ID; + string SPRITE_FIRE; + + FireFistCl() + { + SPRITE_FIRE = "fire1_fixed.spr"; + GLOW_RAD = 128; + GLOW_COLOR = Vector3(255, 255, 128); + } + + void client_activate() + { + SKEL_ID = param1; + BONE_IDX = param2; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + ClientEffect("frameent", "sprite", SPRITE_FIRE, /* TODO: $getcl */ $getcl(SKEL_ID, "bonepos", BONE_IDX), "setup_flame"); + CUR_FRAME = 0; + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + ClientEffect("frameent", "sprite", SPRITE_FIRE, /* TODO: $getcl */ $getcl(SKEL_ID, "bonepos", BONE_IDX), "setup_flame"); + } + + void setup_flame() + { + string L_ATTACH_MDL_ID = SKEL_ID; + int L_ATTACH_BODY = 1; + ClientEffect("frameent", "set_current_prop", "owner", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "skin", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "aiment", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "movetype", 12); + ClientEffect("frameent", "set_current_prop", "body", L_ATTACH_BODY); + ClientEffect("frameent", "set_current_prop", "scale", 0.5); + CUR_FRAME += 1; + if (CUR_FRAME == 23) + { + CUR_FRAME = 0; + } + ClientEffect("frameent", "set_current_prop", "frame", CUR_FRAME); + } + +} + +} diff --git a/scripts/angelscript/monsters/fire_reaver.as b/scripts/angelscript/monsters/fire_reaver.as new file mode 100644 index 00000000..ce2abb09 --- /dev/null +++ b/scripts/angelscript/monsters/fire_reaver.as @@ -0,0 +1,65 @@ +#pragma context server + +#include "monsters/swamp_reaver.as" + +namespace MS +{ + +class FireReaver : CGameScript +{ + string BLOOD_COLOR; + string BOMB_DMG_TYPE; + string BREATH_TYPE; + int DOT_ACID_BOMB; + float DOT_DMG; + float DOT_DURATION; + string DOT_EFFECT; + string EFFECT_ACID_BOMB; + string ERRUPT_TYPE; + float FIREBALL1_DURATION; + string FIREBALL1_SCRIPT; + float FIREBALL2_DURATION; + string FIREBALL2_SCRIPT; + float FREQ_ERRUPT; + string PROJECTILE_SCRIPT; + int REAVER_MAXHP; + string REAVER_NAME; + int REAVER_SKIN; + int REAVER_XP; + + FireReaver() + { + REAVER_NAME = "Fire Reaver"; + REAVER_MAXHP = 4000; + REAVER_XP = 1500; + REAVER_SKIN = 0; + FREQ_ERRUPT = 20.0; + BLOOD_COLOR = "red"; + FIREBALL1_SCRIPT = "monsters/summon/fire_ball_guided"; + FIREBALL2_SCRIPT = "monsters/summon/fire_ball_guided"; + FIREBALL1_DURATION = 15.0; + FIREBALL2_DURATION = 15.0; + BOMB_DMG_TYPE = "blunt"; + } + + void game_precache() + { + Precache("monsters/summon/fire_ball_guided"); + Precache("xfireball3.spr"); + } + + void OnPostSpawn() override + { + DOT_EFFECT = "effects/dot_fire"; + DOT_DURATION = 5.0; + DOT_DMG = 45.0; + ERRUPT_TYPE = "fire"; + BREATH_TYPE = "fire"; + PROJECTILE_SCRIPT = "proj_fire_bomb"; + DOT_ACID_BOMB = 200; + EFFECT_ACID_BOMB = "effects/dot_fire"; + } + +} + +} diff --git a/scripts/angelscript/monsters/fire_reaver_cl.as b/scripts/angelscript/monsters/fire_reaver_cl.as new file mode 100644 index 00000000..cebf2b57 --- /dev/null +++ b/scripts/angelscript/monsters/fire_reaver_cl.as @@ -0,0 +1,126 @@ +#pragma context server + +namespace MS +{ + +class FireReaverCl : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string LIGHT_COLOR; + float LIGHT_DURATION; + int LIGHT_RADIUS; + string MODEL_WORLD; + string MY_OWNER; + string SPRITE_BURN; + int VOLC_SOUND_DELAY; + string local.cl.gravity; + string local.cl.origin; + string local.cl.velocity; + + FireReaverCl() + { + MODEL_WORLD = "weapons/projectiles.mdl"; + SPRITE_BURN = "fire1_fixed.spr"; + LIGHT_RADIUS = 64; + LIGHT_COLOR = Vector3(255, 0, 0); + LIGHT_DURATION = 0.8; + SetCallback("render", "enable"); + } + + void reset_volc_sound_delay() + { + VOLC_SOUND_DELAY = 0; + } + + void game_prerender() + { + if ((/* TODO: $getcl */ $getcl(MY_OWNER, "exists"))) return; + volcano_die(); + } + + void client_activate() + { + local.cl.origin = param1; + MY_OWNER = param2; + FX_DURATION = param3; + FX_ACTIVE = 1; + local.cl.origin += "z"; + FX_DURATION("end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "volcano_die"); + } + + void volcano_die() + { + RemoveScript(); + } + + void volcono_shoot_rock() + { + if (!(FX_ACTIVE)) return; + local.cl.velocity = param1; + local.cl.gravity = param2; + string MY_ORIGIN = param3; + ClientEffect("tempent", "model", MODEL_WORLD, MY_ORIGIN, "volcano_rock_create", "volcano_rock_update", "volcano_rock_collide"); + for (int i = 0; i < 4; i++) + { + makefire_loop(MY_ORIGIN); + } + } + + void volcano_rock_create() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10); + ClientEffect("tempent", "set_current_prop", "velocity", local.cl.velocity); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "gravity", local.cl.gravity); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + ClientEffect("tempent", "set_current_prop", "renderfx", "glow"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("light", "new", "game.tempent.origin", LIGHT_RADIUS, LIGHT_COLOR, LIGHT_DURATION); + ClientEffect("tempent", "set_current_prop", "iuser1", "game.script.last_light_id"); + } + + void volcano_rock_update() + { + ClientEffect("light", "game.tempent.iuser1", "game.tempent.origin", LIGHT_RADIUS, LIGHT_COLOR, LIGHT_DURATION); + } + + void volcano_rock_collide() + { + ClientEffect("tempent", "set_current_prop", "sprite", SPRITE_BURN); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "death_delay", 1); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + } + + void makefire_loop() + { + ClientEffect("tempent", "sprite", SPRITE_BURN, param1, "volcano_fire_create"); + } + + void volcano_fire_create() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-200, 200), Random(-200, 200), Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.6, 1.0)); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + } + +} + +} diff --git a/scripts/angelscript/monsters/fire_reaver_mini.as b/scripts/angelscript/monsters/fire_reaver_mini.as new file mode 100644 index 00000000..24c76c3d --- /dev/null +++ b/scripts/angelscript/monsters/fire_reaver_mini.as @@ -0,0 +1,398 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class FireReaverMini : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_PROJECTILE; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_SLASH; + string ANIM_SMASH; + string ANIM_VICTORY; + string ANIM_VICTORY1; + string ANIM_VICTORY2; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int DID_WARCRY; + float DMG_BURST; + int DMG_MISSILE; + int DMG_VOLCANO; + int DMG_VOLCANO_DART; + int DMG_VOLCANO_DOT; + int DOSMASH_CHANCE; + float DOT_BURN; + int FIRST_ATTACK; + int FLINCH_CHANCE; + int FLINCH_HEALTH; + float FREQ_FIRE_BURST; + float FREQ_MISSILE; + float FREQ_SMASH; + float FREQ_VOLC; + float FREQ_VOLCANO; + float FREQ_VOLC_SOUND; + string HP_STORAGE; + int MOVE_RANGE; + int NEAR_DEATH_THRESHOLD; + string NEXT_FIRE_BURST; + float NPC_DELAYING_UNSTUCK; + int NPC_GIVE_EXP; + int PUSH_ATTACK; + string PUSH_VEL; + int ROCK_START_HEIGHT; + int SEARCH_ANIM_DELAY; + int SLASH_DAMAGE; + float SLASH_HITCHANCE; + int SMASH_DAMAGE; + int SMASH_DELAY; + string SOUND_ATTACKHIT; + string SOUND_ATTACKMISS; + string SOUND_DEATH; + string SOUND_PAIN_NEAR_DEATH; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_RUN1; + string SOUND_RUN2; + string SOUND_RUN3; + string SOUND_SEARCH1; + string SOUND_SEARCH2; + string SOUND_SEARCH3; + string SOUND_SLASHHIT; + string SOUND_SLASHMISS; + string SOUND_SMASHHIT; + string SOUND_SMASHMISS; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_WALK1; + string SOUND_WALK2; + string SOUND_WALK3; + string SOUND_WALK4; + string SOUND_WARCRY; + int STRONG_THRESHOLD; + int SUSPEND_AI; + int VOLCANO_ON; + int WEAK_THRESHOLD; + + FireReaverMini() + { + DMG_BURST = 30.0; + DOT_BURN = 10.0; + FREQ_FIRE_BURST = Random(10.0, 20.0); + NPC_GIVE_EXP = 250; + ROCK_START_HEIGHT = 96; + DMG_VOLCANO = 200; + DMG_VOLCANO_DOT = 1; + DMG_VOLCANO_DART = 25; + FREQ_VOLC_SOUND = 7.0; + FREQ_VOLCANO = 0.25; + FREQ_SMASH = 10.0; + SOUND_WALK1 = "common/npc_step1.wav"; + SOUND_WALK2 = "common/npc_step2.wav"; + SOUND_WALK3 = "common/npc_step3.wav"; + SOUND_WALK4 = "common/npc_step4.wav"; + SOUND_RUN1 = "gonarch/gon_step1.wav"; + SOUND_RUN2 = "gonarch/gon_step2.wav"; + SOUND_RUN3 = "gonarch/gon_step3.wav"; + SOUND_DEATH = "gonarch/gon_die1.wav"; + SOUND_WARCRY = "gonarch/gon_alert1.wav"; + SOUND_STRUCK1 = "gonarch/gon_sack1.wav"; + SOUND_STRUCK2 = "gonarch/gon_sack2.wav"; + SOUND_PAIN_STRONG = "gonarch/gon_pain2.wav"; + SOUND_PAIN_WEAK = "gonarch/gon_pain4.wav"; + SOUND_PAIN_NEAR_DEATH = "gonarch/gon_pain5.wav"; + SOUND_SLASHHIT = "zombie/claw_strike1.wav"; + SOUND_SMASHHIT = "zombie/claw_strike2.wav"; + SOUND_SLASHMISS = "zombie/claw_miss1.wav"; + SOUND_SMASHMISS = "zombie/claw_miss2.wav"; + SOUND_SEARCH1 = "gonarch/gon_childdie3.wav"; + SOUND_SEARCH2 = "gonarch/gon_childdie2.wav"; + SOUND_SEARCH3 = "gonarch/gon_childdie1.wav"; + SOUND_ATTACKHIT = "unset"; + SOUND_ATTACKMISS = "unset"; + Precache(SOUND_SLASHMISS); + Precache(SOUND_SLASHHIT); + Precache(SOUND_SMASHMISS); + Precache(SOUND_SMASHHIT); + Precache(SOUND_PAIN_STRONG); + Precache(SOUND_PAIN_WEAK); + Precache(SOUND_PAIN_NEAR_DEATH); + ATTACK_RANGE = 125; + ATTACK_HITRANGE = 150; + ATTACK_MOVERANGE = 50; + MOVE_RANGE = 50; + STRONG_THRESHOLD = 2500; + WEAK_THRESHOLD = 2000; + NEAR_DEATH_THRESHOLD = 750; + SLASH_DAMAGE = "$rand(100,200)"; + SMASH_DAMAGE = 500; + SLASH_HITCHANCE = 0.9; + FREQ_MISSILE = 20.0; + DMG_MISSILE = 600; + FREQ_VOLC = 1.0; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_SEARCH = "idle2"; + ANIM_FLINCH = "turnl"; + ANIM_SMASH = "mattack3"; + ANIM_SLASH = "mattack2"; + ANIM_PROJECTILE = "distanceattack"; + ANIM_ALERT = "distanceattack"; + ANIM_DEATH1 = "dieforward"; + ANIM_DEATH2 = "diesimple"; + ANIM_DEATH3 = "diesideways"; + ANIM_VICTORY1 = "victoryeat"; + ANIM_VICTORY2 = "victorysniff"; + ANIM_VICTORY = "victoryeat"; + ANIM_DEATH = "dieforward"; + ANIM_ATTACK = "mattack3"; + CAN_FLINCH = 1; + FLINCH_HEALTH = 1000; + FLINCH_CHANCE = 30; + DOSMASH_CHANCE = 30; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Fire Reaver Hatchling"); + SetHealth(800); + SetRoam(true); + SetDamageResistance("cold", 1.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("holy", 0.5); + SetWidth(32); + SetHeight(48); + SetRace("demon"); + SetHearingSensitivity(3); + SetModel("monsters/firereaver_mini.mdl"); + SetMoveAnim(ANIM_WALK); + LogDebug("game.monster.moveprox"); + } + + void npcatk_validatetarget() + { + if (!(IsValidPlayer(param1))) return; + if ((DID_WARCRY)) return; + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + FIRST_ATTACK = 1; + } + + void my_target_died() + { + if ((false)) return; + int RAND_VICT = RandomInt(1, 2); + if (RAND_VICT == 1) + { + ANIM_VICTORY = ANIM_VICTORY1; + } + if (RAND_VICT == 2) + { + ANIM_VICTORY = ANIM_VICTORY2; + } + PlayAnim("critical", ANIM_VICTORY); + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (!(IsValidPlayer(m_hAttackTarget))) return; + } + + void npc_targetsighted() + { + if (GetEntityRange(m_hAttackTarget) < 256) + { + if (GetGameTime() > NEXT_FIRE_BURST) + { + } + NEXT_FIRE_BURST = GetGameTime(); + NEXT_FIRE_BURST += FREQ_FIRE_BURST; + do_fire_burst(); + } + } + + void reset_smash_delay() + { + SMASH_DELAY = 0; + } + + void attack_mele1() + { + int RANDOM_PUSH = RandomInt(90, 150); + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, RANDOM_PUSH, 110); + SOUND_ATTACKHIT = SOUND_SLASHHIT; + SOUND_ATTACKMISS = SOUND_SLASHMISS; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, SLASH_DAMAGE, SLASH_HITCHANCE); + PUSH_ATTACK = 1; + if (!(RandomInt(1, 5) == 1)) return; + ANIM_ATTACK = ANIM_SMASH; + } + + void attack_mele2() + { + SOUND_ATTACKHIT = SOUND_SMASHHIT; + SOUND_ATTACKMISS = SOUND_SMASHMISS; + ANIM_ATTACK = ANIM_SLASH; + string L_SLASH_DAMAGE = SLASH_DAMAGE; + L_SLASH_DAMAGE *= 3.0; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, L_SLASH_DAMAGE, SLASH_HITCHANCE); + ANIM_ATTACK = ANIM_SLASH; + } + + void npcatk_search_init_advanced() + { + if ((SEARCH_ANIM_DELAY)) return; + NPC_DELAYING_UNSTUCK = 10.0; + PlayAnim("critical", ANIM_SEARCH); + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SEARCH_ANIM_DELAY = 1; + ScheduleDelayedEvent(5.0, "reset_search_anim"); + } + + void reset_search_anim() + { + SEARCH_ANIM_DELAY = 0; + } + + void game_dodamage() + { + if (!(param1)) + { + if (SOUND_ATTACKMISS != "unset") + { + EmitSound(GetOwner(), 0, SOUND_ATTACKMISS, 10); + } + } + if ((param1)) + { + if (SOUND_ATTACKHIT != "unset") + { + EmitSound(GetOwner(), 0, SOUND_ATTACKHIT, 10); + } + if ((PUSH_ATTACK)) + { + } + if (GetRelationship(param2) == "enemy") + { + } + AddVelocity(param2, PUSH_VEL); + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_BURN); + } + PUSH_ATTACK = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + HP_STORAGE = GetMonsterHP(); + if (GetMonsterHP() >= 1500) + { + string PAIN_SOUND = SOUND_PAIN_STRONG; + } + if (GetMonsterHP() < 1500) + { + string PAIN_SOUND = SOUND_PAIN_WEAK; + } + if (GetMonsterHP() < 500) + { + string PAIN_SOUND = SOUND_PAIN_NEAR_DEATH; + } + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, PAIN_SOUND + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, PAIN_SOUND}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void monster_walk_step() + { + // PlayRandomSound from: SOUND_WALK1, SOUND_WALK2, SOUND_WALK3, SOUND_WALK4 + array sounds = {SOUND_WALK1, SOUND_WALK2, SOUND_WALK3, SOUND_WALK4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void monster_run_step() + { + // PlayRandomSound from: SOUND_WALK1, SOUND_WALK2, SOUND_WALK3, SOUND_WALK4 + array sounds = {SOUND_WALK1, SOUND_WALK2, SOUND_WALK3, SOUND_WALK4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RAND_DEATH = RandomInt(2, 3); + if (RAND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RAND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + SUSPEND_AI = 1; + SetMoveDest("none"); + SetMoveAnim(ANIM_DEATH); + } + + void game_reached_destination() + { + if (!(m_hAttackTarget == "unset")) return; + if (!(NPC_LOST_TARGET == "unset")) return; + if ((false)) return; + int RAND_VICT = RandomInt(1, 2); + if (RAND_VICT == 1) + { + ANIM_VICTORY = ANIM_VICTORY1; + } + if (RAND_VICT == 2) + { + ANIM_VICTORY = ANIM_VICTORY2; + } + PlayAnim("critical", ANIM_VICTORY); + } + + void OnDeath(CBaseEntity@ attacker) override + { + } + + void npcatk_clear_targets() + { + VOLCANO_ON = 0; + } + + void do_fire_burst() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 2.0; + PlayAnim("critical", ANIM_PROJECTILE); + } + + void attack_ranged() + { + EmitSound(GetOwner(), 0, "ambience/steamburst1.wav", 10); + ClientEvent("new", "all", "monsters/summon/flame_burst_cl", GetEntityIndex(GetOwner())); + DoDamage(GetEntityOrigin(GetOwner()), 384, DMG_BURST, 1.0, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/firegiantghoul.as b/scripts/angelscript/monsters/firegiantghoul.as new file mode 100644 index 00000000..95510967 --- /dev/null +++ b/scripts/angelscript/monsters/firegiantghoul.as @@ -0,0 +1,268 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Firegiantghoul : CGameScript +{ + int AIM_RATIO; + int AM_TURRET; + string ANIM_ATTACK; + string ANIM_FIREBALL; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + float ATTACK_ACCURACY; + int ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DROPS_CONTAINER; + int FIN_EXP; + int FIREBALL_DAMAGE; + int FIREBALL_DELAY; + float FIREBALL_FREQ; + int FIREBALL_RANGE; + string GLOW_COLOR; + int GLOW_RAD; + int HIT_SOMEONE; + int I_AM_TURNABLE; + int I_GLOW; + string I_R_GLOWING; + int MOVE_RANGE; + string MY_LIGHT_SCRIPT; + int MY_MAX_HP; + string MY_NAME; + int NO_ROAM; + string NO_STUCK_CHECKS; + string NPC_GIVE_EXP; + string SKEL_ID; + string SKEL_LIGHT_ID; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_FIREBALL; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int THROW_CHANCE; + int THROW_DELAY; + float THROW_FREQ; + + Firegiantghoul() + { + FIN_EXP = 150; + NPC_GIVE_EXP = FIN_EXP; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_DEATH = "zombie/zo_pain1.wav"; + SOUND_FIREBALL = "magic/fireball_strike.wav"; + ANIM_FIREBALL = "turnright"; + ANIM_IDLE = "idle1"; + ATTACK_DAMAGE = 40; + MOVE_RANGE = 32; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 187; + ATTACK_ACCURACY = 0.45; + CAN_FLINCH = 1; + FIREBALL_DAMAGE = 50; + FIREBALL_RANGE = 1024; + FIREBALL_FREQ = 5.0; + THROW_FREQ = 5.0; + THROW_CHANCE = 12; + AIM_RATIO = 50; + MY_MAX_HP = 1400; + MY_NAME = "Reanimated Bones of a Fire Giant"; + NO_ROAM = 0; + AM_TURRET = 0; + I_GLOW = 1; + GLOW_COLOR = Vector3(255, 255, 128); + GLOW_RAD = 200; + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + ANIM_ATTACK = "attack1"; + ANIM_RUN = "walk"; + ANIM_WALK = "walk"; + SetHealth(MY_MAX_HP); + SetWidth(64); + SetHeight(120); + SetRace("undead"); + SetName(MY_NAME); + SetGold(RandomInt(25, 50)); + SetHearingSensitivity(10); + if (!(NO_ROAM)) + { + SetRoam(true); + } + if ((NO_ROAM)) + { + SetRoam(false); + } + SetModel("monsters/skeleton3.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + if (!(AM_TURRET)) + { + SetMoveAnim(ANIM_WALK); + } + if ((AM_TURRET)) + { + SetMoveAnim(ANIM_IDLE); + ANIM_WALK = ANIM_IDLE; + ANIM_RUN = ANIM_IDLE; + NO_STUCK_CHECKS = 1; + } + PlayAnim("once", ANIM_IDLE); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 2.0); + SetDamageResistance("holy", 1.5); + } + + void throw_delay_reset() + { + THROW_DELAY = 0; + } + + void attack_1() + { + HIT_SOMEONE = 5; + int DID_PUSH = 0; + ANIM_ATTACK = "attack1"; + if (!(THROW_DELAY)) + { + if (RandomInt(1, 100) <= THROW_CHANCE) + { + } + THROW_DELAY = 1; + THROW_FREQ("throw_delay_reset"); + PlayAnim("critical", "bigflinch"); + EmitSound(GetOwner(), 0, "garg/gar_attack3.wav", 10); + if (GetEntityRange(m_hLastStruckByMe) <= ATTACK_HITRANGE) + { + } + ApplyEffect(m_hLastStruckByMe, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + int DID_PUSH = 1; + } + if ((DID_PUSH)) return; + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, "slash"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void throw_fireball() + { + AS_ATTACKING = GetGameTime(); + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + PlayAnim("critical", "turnright"); + SetVolume(10); + // PlayRandomSound from: SOUND_FIREBALL + array sounds = {SOUND_FIREBALL}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (GetEntityRange(m_hLastSeen) <= 400) + { + TossProjectile("proj_fire_ball", "view", "none", 500, FIREBALL_DAMAGE, 1, "none"); + } + if (GetEntityRange(m_hLastSeen) > 400) + { + TossProjectile("proj_fire_ball", "view", GetEntityIndex(m_hLastSeen), 500, FIREBALL_DAMAGE, 1, "none"); + CallExternal("ent_lastprojectile", "lighten", 5, 0.1); + } + ANIM_ATTACK = "attack1"; + } + + void npc_targetsighted() + { + if ((I_R_FROZEN)) return; + if (!(GetEntityRange(param1) > ATTACK_RANGE)) return; + if ((FIREBALL_DELAY)) return; + FIREBALL_DELAY = 1; + FIREBALL_FREQ("reset_fireball_delay"); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "throw_fireball"); + } + + void cycle_up() + { + if ((NO_ROAM)) + { + if (!(AM_TURRET)) + { + } + SetRoam(true); + } + if ((I_GLOW)) + { + if (!(I_R_GLOWING)) + { + } + I_R_GLOWING = 1; + ClientEvent("persist", "all", currentscript, GetEntityIndex(GetOwner())); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + } + + void reset_fireball_delay() + { + FIREBALL_DELAY = 0; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void client_activate() + { + SKEL_ID = param1; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + } + + void chest_sfor_fireloot1() + { + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 1.0; + CONTAINER_SCRIPT = "chests/sfor_fire1"; + } + + void chest_sfor_fireloot2() + { + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 1.0; + CONTAINER_SCRIPT = "chests/sfor_fire2"; + } + +} + +} diff --git a/scripts/angelscript/monsters/firegiantghoul1.as b/scripts/angelscript/monsters/firegiantghoul1.as new file mode 100644 index 00000000..d2992af8 --- /dev/null +++ b/scripts/angelscript/monsters/firegiantghoul1.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/firegiantghoul_lesser.as" + +namespace MS +{ + +class Firegiantghoul1 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/firegiantghoul1_turret.as b/scripts/angelscript/monsters/firegiantghoul1_turret.as new file mode 100644 index 00000000..fe60329c --- /dev/null +++ b/scripts/angelscript/monsters/firegiantghoul1_turret.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/firegiantghoul1.as" + +namespace MS +{ + +class Firegiantghoul1Turret : CGameScript +{ + int AM_TURRET; + int NO_ROAM; + + Firegiantghoul1Turret() + { + AM_TURRET = 1; + NO_ROAM = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/firegiantghoul2.as b/scripts/angelscript/monsters/firegiantghoul2.as new file mode 100644 index 00000000..aa6f5521 --- /dev/null +++ b/scripts/angelscript/monsters/firegiantghoul2.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/firegiantghoul.as" + +namespace MS +{ + +class Firegiantghoul2 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/firegiantghoul2_turret.as b/scripts/angelscript/monsters/firegiantghoul2_turret.as new file mode 100644 index 00000000..b8542c3d --- /dev/null +++ b/scripts/angelscript/monsters/firegiantghoul2_turret.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/firegiantghoul.as" + +namespace MS +{ + +class Firegiantghoul2Turret : CGameScript +{ + int AM_TURRET; + int NO_ROAM; + + Firegiantghoul2Turret() + { + AM_TURRET = 1; + NO_ROAM = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/firegiantghoul3.as b/scripts/angelscript/monsters/firegiantghoul3.as new file mode 100644 index 00000000..4ed1b20b --- /dev/null +++ b/scripts/angelscript/monsters/firegiantghoul3.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/firegiantghoul_greater.as" + +namespace MS +{ + +class Firegiantghoul3 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/firegiantghoul3_turret.as b/scripts/angelscript/monsters/firegiantghoul3_turret.as new file mode 100644 index 00000000..5ffe57b6 --- /dev/null +++ b/scripts/angelscript/monsters/firegiantghoul3_turret.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/firegiantghoul3.as" + +namespace MS +{ + +class Firegiantghoul3Turret : CGameScript +{ + int AM_TURRET; + int NO_ROAM; + + Firegiantghoul3Turret() + { + AM_TURRET = 1; + NO_ROAM = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/firegiantghoul_greater.as b/scripts/angelscript/monsters/firegiantghoul_greater.as new file mode 100644 index 00000000..50eb9b62 --- /dev/null +++ b/scripts/angelscript/monsters/firegiantghoul_greater.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "monsters/firegiantghoul.as" + +namespace MS +{ + +class FiregiantghoulGreater : CGameScript +{ + int ATTACK_DAMAGE; + int FIN_EXP; + int FIREBALL_DAMAGE; + int MY_MAX_HP; + string MY_NAME; + int THROW_CHANCE; + + FiregiantghoulGreater() + { + MY_MAX_HP = 4000; + MY_NAME = "Greater Undead Firegiant"; + FIREBALL_DAMAGE = 100; + ATTACK_DAMAGE = 60; + THROW_CHANCE = 30; + FIN_EXP = 400; + } + + void OnSpawn() override + { + SetDamageResistance("cold", 1.25); + } + +} + +} diff --git a/scripts/angelscript/monsters/firegiantghoul_lesser.as b/scripts/angelscript/monsters/firegiantghoul_lesser.as new file mode 100644 index 00000000..bc853d9c --- /dev/null +++ b/scripts/angelscript/monsters/firegiantghoul_lesser.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "monsters/firegiantghoul.as" + +namespace MS +{ + +class FiregiantghoulLesser : CGameScript +{ + int ATTACK_DAMAGE; + int FIN_EXP; + int FIREBALL_DAMAGE; + int MY_MAX_HP; + string MY_NAME; + int THROW_CHANCE; + + FiregiantghoulLesser() + { + MY_MAX_HP = 400; + MY_NAME = "Decayed Undead Firegiant"; + FIREBALL_DAMAGE = 25; + ATTACK_DAMAGE = 15; + THROW_CHANCE = 10; + FIN_EXP = 150; + } + +} + +} diff --git a/scripts/angelscript/monsters/fish_base.as b/scripts/angelscript/monsters/fish_base.as new file mode 100644 index 00000000..87228e78 --- /dev/null +++ b/scripts/angelscript/monsters/fish_base.as @@ -0,0 +1,114 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class FishBase : CGameScript +{ + string ANIM_TURN_LEFT; + string ANIM_TURN_RIGHT; + int CAN_RETALIATE; + string FISH_LASTYAW; + string FISH_WANDER_DEST; + string L_ANIM; + string L_NEGATIVE; + int NPC_MUST_SEE_TARGET; + float RETALIATE_CHANGETARGET_CHANCE; + int TURN_ANIM_THRESHOLD; + + FishBase() + { + NPC_MUST_SEE_TARGET = 0; + ANIM_TURN_RIGHT = "rturn"; + ANIM_TURN_LEFT = "lturn"; + TURN_ANIM_THRESHOLD = 90; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + } + + void OnRepeatTimer() + { + SetRepeatDelay(RandomInt(10, 25)); + if (!(IS_HUNTING)) + { + } + if (!(IS_FLEEING)) + { + } + // PlayRandomSound from: "game.sound.maxvol", SOUND_IDLE1, SOUND_IDLE2 + array sounds = {"game.sound.maxvol", SOUND_IDLE1, SOUND_IDLE2}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnSpawn() override + { + SetRace("wildanimal"); + SetRoam(true); + SetHearingSensitivity(3); + 1 = float(1); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {"game.sound.maxvol", SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npc_targetsighted() + { + // TODO: roamdelay 2 + if (GetEntityRange(HUNT_LASTTARGET) < MOVE_RANGE) + { + SetMoveDest("none"); + } + } + + void game_stopmoving() + { + FISH_LASTYAW = GetMonsterProperty("angles.yaw"); + } + + void game_movingto_dest() + { + if ((IS_HUNTING)) + { + SetAngles("face.x"); + } + if ((IS_HUNTING)) return; + if ((IS_ATTACKING)) return; + string L_CURRENT_YAW = GetMonsterProperty("angles.yaw"); + string L_DIFF = /* TODO: $anglediff */ $anglediff((param1).y, L_CURRENT_YAW); + int L_NEGATIVE = 0; + if (L_DIFF < 0) + { + L_NEGATIVE = 1; + L_DIFF *= -1; + } + if (!(L_DIFF > TURN_ANIM_THRESHOLD)) return; + string L_ANIM = ANIM_TURN_LEFT; + if ((L_NEGATIVE)) + { + L_ANIM = ANIM_TURN_RIGHT; + } + PlayAnim("once", L_ANIM); + } + + void npc_wander() + { + SetTurnRate(".175"); + SetAngles("face.x"); + // TODO: roamdelay 0 + FISH_WANDER_DEST = GetMonsterProperty("movedest.origin"); + FISH_WANDER_DEST += Vector3(0, 0, Random(32, 256)); + SetMoveDest(FISH_WANDER_DEST); + } + +} + +} diff --git a/scripts/angelscript/monsters/fish_demon.as b/scripts/angelscript/monsters/fish_demon.as new file mode 100644 index 00000000..ba024585 --- /dev/null +++ b/scripts/angelscript/monsters/fish_demon.as @@ -0,0 +1,218 @@ +#pragma context server + +#include "monsters/fish_base.as" + +namespace MS +{ + +class FishDemon : CGameScript +{ + string ANIM_ATK1; + string ANIM_ATK2; + string ANIM_ATK_BIG; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float CHANCE_SWALLOW; + int CYCLES_ON; + int DMG_BITE; + int DMG_BITE2; + int DMG_BITE3; + string FLIGHT_STUCK; + float FREQ_SWALLOW; + string LAST_POS; + float LAST_PROG; + int MOVE_RANGE; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + int PUSH_RANGE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + + FishDemon() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "swim"; + ANIM_RUN = "thrust"; + ANIM_DEATH = "die1"; + ANIM_ATTACK = "bite_r"; + ANIM_ATK_BIG = "srattack1"; + ANIM_ATK1 = "bite_r"; + ANIM_ATK2 = "bite_l"; + CHANCE_SWALLOW = 0.1; + DMG_BITE = RandomInt(25, 60); + DMG_BITE2 = RandomInt(50, 100); + DMG_BITE3 = RandomInt(100, 200); + PUSH_RANGE = 140; + FREQ_SWALLOW = Random(20, 30); + ATTACK_HITCHANCE = 70; + SOUND_IDLE1 = "ichy/ichy_idle1.wav"; + SOUND_IDLE2 = "ichy/ichy_idle2.wav"; + SOUND_ATTACK1 = "ichy/ichy_bite1.wav"; + SOUND_ATTACK2 = "ichy/ichy_bite2.wav"; + SOUND_STRUCK1 = "ichy/ichy_pain2.wav"; + SOUND_STRUCK2 = "ichy/ichy_pain3.wav"; + SOUND_STRUCK3 = "ichy/ichy_pain5.wav"; + SOUND_STRUCK4 = "ichy/ichy_pain3.wav"; + SOUND_STRUCK5 = "ichy/ichy_pain5.wav"; + SOUND_DEATH = "ichy/ichy_die2.wav"; + Precache(SOUND_DEATH); + MOVE_RANGE = 40; + ATTACK_RANGE = 140; + ATTACK_HITRANGE = 200; + NPC_HACKED_MOVE_SPEED = 300; + NPC_GIVE_EXP = 300; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + if ((IsEntityAlive(HUNT_LASTTARGET))) + { + } + if (GetEntityRange(HUNT_LASTTARGET) < PUSH_RANGE) + { + } + AddVelocity(HUNT_LASTTARGET, /* TODO: $relvel */ $relvel(0, 125, 0)); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.5); + if (GetEntityRange(HUNT_LASTTARGET) < ATTACK_RANGE) + { + PlayAnim("once", ANIM_ATTACK); + } + if ((IS_HUNTING)) + { + } + npcatk_faceattacker(); + if (GetEntityRange(HUNT_LASTTARGET) > MOVE_RANGE) + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 200, 0)); + } + if (GetEntityRange(HUNT_LASTTARGET) <= MOVE_RANGE) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if (FLIGHT_STUCK > 4) + { + do_rand_tweedee(); + npcatk_suspend_ai(Random(0.3, 0.9)); + SetMoveDest(NEW_DEST); + ScheduleDelayedEvent(0.1, "horror_boost"); + FLIGHT_STUCK = 0; + } + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + if (!(SUSPEND_AI)) + { + SetAngles("face_origin"); + } + if (!(IS_FLEEING)) + { + } + if (!(SPITTING)) + { + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + } + float CUR_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + if (LAST_PROG >= CUR_PROG) + { + FLIGHT_STUCK += 1; + } + LAST_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + LAST_POS = GetMonsterProperty("origin"); + } + + void OnSpawn() override + { + SetHealth(1500); + SetName("Demon Fish"); + SetModel("monsters/devil_fish1.mdl"); + SetWidth(96); + SetHeight(96); + SetHearingSensitivity(10); + SetGravity(0.02); + } + + void bite_r() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 7); + if (ANIM_ATTACK == "bite_l") + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, DMG_BITE, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + AddVelocity(HUNT_LASTTARGET, Vector3(100, 0, 0)); + ANIM_ATTACK = "bite_r"; + } + else + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, DMG_BITE, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + AddVelocity(HUNT_LASTTARGET, Vector3(-100, 0, 0)); + ANIM_ATTACK = "bite_l"; + } + } + + void big_bite1() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, DMG_BITE2, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + AddVelocity(HUNT_LASTTARGET, Vector3(-100, 200, 0)); + ANIM_ATTACK = "bite_l"; + } + + void big_bite2() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, DMG_BITE3, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + AddVelocity(HUNT_LASTTARGET, Vector3(100, 200, 0)); + ANIM_ATTACK = "bite_r"; + } + + void cycle_up() + { + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + FREQ_SWALLOW("do_swallow"); + } + + void do_swallow() + { + FREQ_SWALLOW("do_swallow"); + if (!(HUNT_LASTTARGET != �NONE�)) return; + ANIM_ATTACK = ANIM_ATK_BIG; + } + + void chicken_run() + { + ScheduleDelayedEvent(0.1, "horror_boost"); + } + + void horror_boost() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 500, 0)); + } + +} + +} diff --git a/scripts/angelscript/monsters/fish_killie.as b/scripts/angelscript/monsters/fish_killie.as new file mode 100644 index 00000000..a1e72f91 --- /dev/null +++ b/scripts/angelscript/monsters/fish_killie.as @@ -0,0 +1,157 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" +#include "monsters/base_fish2.as" + +namespace MS +{ + +class FishKillie : CGameScript +{ + string ANIM_ATK_BIG; + string ANIM_ATK_LEFT; + string ANIM_ATK_RIGHT; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATK_DMG_HIGH; + float ATK_DMG_LOW; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DELETE_ON_DEATH; + string NPCATK_TARGET; + int NPC_EXTRA_VALIDATIONS; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string PUSH_VEL; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + + FishKillie() + { + NPC_EXTRA_VALIDATIONS = 1; + DELETE_ON_DEATH = 1; + ANIM_IDLE = "idle"; + ANIM_WALK = "swim"; + ANIM_RUN = "thrust"; + ANIM_DEATH = "die1"; + ANIM_ATK_BIG = "srattack1"; + ANIM_ATK_RIGHT = "bite_r"; + ANIM_ATK_LEFT = "bite_l"; + ANIM_FLINCH = "bgflinch"; + SOUND_IDLE1 = "ichy/ichy_idle1.wav"; + SOUND_IDLE2 = "ichy/ichy_idle2.wav"; + SOUND_ATTACK1 = "ichy/ichy_bite1.wav"; + SOUND_ATTACK2 = "ichy/ichy_bite2.wav"; + SOUND_STRUCK1 = "ichy/ichy_pain2.wav"; + SOUND_STRUCK2 = "ichy/ichy_pain3.wav"; + SOUND_STRUCK3 = "ichy/ichy_pain5.wav"; + SOUND_STRUCK4 = "ichy/ichy_pain3.wav"; + SOUND_STRUCK5 = "ichy/ichy_pain5.wav"; + SOUND_DEATH = "ichy/ichy_die2.wav"; + ATTACK_MOVERANGE = 64; + ATTACK_RANGE = 120; + ATTACK_HITRANGE = 180; + ATTACK_HITCHANCE = 0.75; + NPC_HACKED_MOVE_SPEED = 250; + NPC_GIVE_EXP = 1000; + ATK_DMG_LOW = 200.0; + ATK_DMG_HIGH = 500.0; + } + + void OnSpawn() override + { + SetHealth(2000); + SetWidth(64); + SetHeight(32); + SetName("Orca"); + SetHearingSensitivity(10); + SetRoam(true); + SetRace("wildanimal"); + SetDamageResistance("pierce", 3.0); + SetDamageResistance("slash", 0.5); + SetDamageResistance("blunt", 0.25); + SetDamageResistance("cold", 0.0); + SetModel("monsters/killie.mdl"); + } + + void npc_selectattack() + { + int NEXT_ATTACK = RandomInt(0, 2); + if (NEXT_ATTACK == 0) + { + ANIM_ATTACK = ANIM_ATK_BIG; + } + else + { + if (NEXT_ATTACK == 1) + { + ANIM_ATTACK = ANIM_ATK_LEFT; + } + else + { + if (NEXT_ATTACK == 2) + { + ANIM_ATTACK = ANIM_ATK_RIGHT; + } + } + } + } + + void frame_attack() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, Random(ATK_DMG_LOW, ATK_DMG_HIGH), ATTACK_HITCHANCE, "slash"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + Vector3 PUSH_VEL = Vector3(0, 0, 0); + if (ANIM_ATTACK == ANIM_ATK_BIG) + { + PUSH_VEL = /* TODO: $relvel */ $relvel(0, 200, 0); + } + else + { + if (ANIM_ATTACK == ANIM_ATK_LEFT) + { + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, 100, 0); + } + else + { + if (ANIM_ATTACK == ANIM_ATK_RIGHT) + { + PUSH_VEL = /* TODO: $relvel */ $relvel(100, 100, 0); + } + } + } + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + + void npc_targetvalidate() + { + if (IsInWater(m_hAttackTarget) < 1) + { + NPCATK_TARGET = "unset"; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/fish_leech.as b/scripts/angelscript/monsters/fish_leech.as new file mode 100644 index 00000000..71600030 --- /dev/null +++ b/scripts/angelscript/monsters/fish_leech.as @@ -0,0 +1,191 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class FishLeech : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_TURN_LEFT; + string ANIM_TURN_RIGHT; + string ANIM_WALK; + float ATK_DMG_HIGH; + float ATK_DMG_LOW; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_RETALIATE; + int DELETE_ON_DEATH; + string FISH_LASTYAW; + int HUNT_AGRO; + string L_ANIM; + string L_NEGATIVE; + int MOVE_RANGE; + int NO_STUCK_CHECKS; + int NPC_EXTRA_VALIDATIONS; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + float RETALIATE_CHANGETARGET_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + int TARGET_INVALID; + int TURN_ANIM_THRESHOLD; + + FishLeech() + { + NPC_EXTRA_VALIDATIONS = 1; + NO_STUCK_CHECKS = 1; + DELETE_ON_DEATH = 1; + ANIM_IDLE = "swim"; + ANIM_WALK = "swim"; + ANIM_RUN = "swim2"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "attack"; + SOUND_IDLE1 = "none"; + SOUND_IDLE2 = "none"; + SOUND_ATTACK1 = "leech/leech_bite1.wav"; + SOUND_ATTACK2 = "leech/leech_bite2.wav"; + SOUND_STRUCK1 = "leech/leech_alert2.wav"; + SOUND_STRUCK2 = "leech/leech_alert1.wav"; + SOUND_STRUCK3 = "leech/leech_alert2.wav"; + SOUND_STRUCK4 = "leech/leech_alert1.wav"; + SOUND_STRUCK5 = "leech/leech_alert2.wav"; + SOUND_DEATH = "none"; + MOVE_RANGE = 40; + ATTACK_RANGE = 65; + ATTACK_HITRANGE = 80; + ATTACK_HITCHANCE = 0.8; + CAN_HEAR = 1; + HUNT_AGRO = 1; + CAN_FLINCH = 0; + NPC_HACKED_MOVE_SPEED = 100; + NPC_GIVE_EXP = 1; + ATK_DMG_LOW = 0.2; + ATK_DMG_HIGH = 0.8; + ANIM_TURN_RIGHT = "leftturn"; + ANIM_TURN_LEFT = "rightturn"; + TURN_ANIM_THRESHOLD = 90; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + } + + void OnRepeatTimer() + { + SetRepeatDelay(RandomInt(10, 25)); + if (!(IS_HUNTING)) + { + } + if (!(IS_FLEEING)) + { + } + // PlayRandomSound from: "game.sound.maxvol", SOUND_IDLE1, SOUND_IDLE2 + array sounds = {"game.sound.maxvol", SOUND_IDLE1, SOUND_IDLE2}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnSpawn() override + { + SetHealth(5); + SetName("Leech"); + SetHearingSensitivity(2); + SetGravity(0.02); + SetModel("monsters/leech.mdl"); + SetBBox(Vector3(-5, -5, -5), Vector3(5, 5, 5)); + SetRace("wildanimal"); + SetRoam(true); + SetHearingSensitivity(3); + 1 = float(1); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void OnPostSpawn() override + { + if (!((StringToLower(GetMapName())).findFirst("lostcastle") == 0)) return; + NPC_EXTRA_VALIDATIONS = 0; + } + + void bite() + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {"game.sound.maxvol", SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, Random(ATK_DMG_LOW, ATK_DMG_HIGH), ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {"game.sound.maxvol", SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npc_targetsighted() + { + // TODO: roamdelay 2 + if ((CanSee(NPC_MOVE_TARGET, ATTACK_RANGE))) + { + SetMoveDest("none"); + } + } + + void game_stopmoving() + { + FISH_LASTYAW = GetMonsterProperty("angles.yaw"); + } + + void game_movingto_dest() + { + if ((IS_HUNTING)) + { + SetAngles("face.x"); + } + if ((IS_HUNTING)) return; + if ((IS_ATTACKING)) return; + string L_CURRENT_YAW = GetMonsterProperty("angles.yaw"); + string L_DIFF = /* TODO: $anglediff */ $anglediff((param1).y, L_CURRENT_YAW); + int L_NEGATIVE = 0; + if (L_DIFF < 0) + { + L_NEGATIVE = 1; + L_DIFF *= -1; + } + if (!(L_DIFF > TURN_ANIM_THRESHOLD)) return; + string L_ANIM = ANIM_TURN_LEFT; + if ((L_NEGATIVE)) + { + L_ANIM = ANIM_TURN_RIGHT; + } + PlayAnim("once", L_ANIM); + } + + void npc_wander() + { + SetTurnRate(".175"); + } + + void npc_targetvalidate() + { + if (!(IsInWater(param1) == 0)) return; + TARGET_INVALID = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/fish_shark.as b/scripts/angelscript/monsters/fish_shark.as new file mode 100644 index 00000000..27d69559 --- /dev/null +++ b/scripts/angelscript/monsters/fish_shark.as @@ -0,0 +1,165 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/base_propelled.as" +#include "monsters/base_fish2.as" + +namespace MS +{ + +class FishShark : CGameScript +{ + string ANIM_ATK_BIG; + string ANIM_ATK_LEFT; + string ANIM_ATK_RIGHT; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATK_DMG_HIGH; + float ATK_DMG_LOW; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int CAN_HEAR; + int DELETE_ON_DEATH; + float FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_DELAY; + int HUNT_AGRO; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string PUSH_VEL; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + + FishShark() + { + DELETE_ON_DEATH = 1; + ANIM_IDLE = "idle"; + ANIM_WALK = "swim"; + ANIM_RUN = "thrust"; + ANIM_DEATH = "die1"; + ANIM_ATK_BIG = "srattack1"; + ANIM_ATK_RIGHT = "bite_r"; + ANIM_ATK_LEFT = "bite_l"; + ANIM_FLINCH = "bgflinch"; + SOUND_IDLE1 = "ichy/ichy_idle1.wav"; + SOUND_IDLE2 = "ichy/ichy_idle2.wav"; + SOUND_ATTACK1 = "ichy/ichy_bite1.wav"; + SOUND_ATTACK2 = "ichy/ichy_bite2.wav"; + SOUND_STRUCK1 = "ichy/ichy_pain2.wav"; + SOUND_STRUCK2 = "ichy/ichy_pain3.wav"; + SOUND_STRUCK3 = "ichy/ichy_pain5.wav"; + SOUND_STRUCK4 = "ichy/ichy_pain3.wav"; + SOUND_STRUCK5 = "ichy/ichy_pain5.wav"; + SOUND_DEATH = "ichy/ichy_die2.wav"; + ATTACK_MOVERANGE = 60; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 200; + ATTACK_HITCHANCE = 0.75; + CAN_HEAR = 1; + HUNT_AGRO = 1; + CAN_FLINCH = 1; + FLINCH_ANIM = 0.15; + FLINCH_CHANCE = 0.9; + FLINCH_DELAY = 4; + NPC_HACKED_MOVE_SPEED = 250; + NPC_GIVE_EXP = 12; + ATK_DMG_LOW = 5.0; + ATK_DMG_HIGH = 10.0; + } + + void OnSpawn() override + { + SetHealth(50); + SetWidth(64); + SetHeight(32); + SetName("Shark"); + SetHearingSensitivity(10); + SetRoam(true); + SetRace("wildanimal"); + SetModel("monsters/shark1.mdl"); + } + + void npc_selectattack() + { + int NEXT_ATTACK = RandomInt(0, 2); + if (NEXT_ATTACK == 0) + { + ANIM_ATTACK = ANIM_ATK_BIG; + } + else + { + if (NEXT_ATTACK == 1) + { + ANIM_ATTACK = ANIM_ATK_LEFT; + } + else + { + if (NEXT_ATTACK == 2) + { + ANIM_ATTACK = ANIM_ATK_RIGHT; + } + } + } + } + + void frame_attack() + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {"game.sound.maxvol", SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, Random(ATK_DMG_LOW, ATK_DMG_HIGH), ATTACK_HITCHANCE, "slash"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + Vector3 PUSH_VEL = Vector3(0, 0, 0); + if (ANIM_ATTACK == ANIM_ATK_BIG) + { + PUSH_VEL = /* TODO: $relvel */ $relvel(0, 200, 0); + } + else + { + if (ANIM_ATTACK == ANIM_ATK_LEFT) + { + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, 100, 0); + } + else + { + if (ANIM_ATTACK == ANIM_ATK_RIGHT) + { + PUSH_VEL = /* TODO: $relvel */ $relvel(100, 100, 0); + } + } + } + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + + void OnFlinch() + { + PlayAnim("critical", ANIM_FLINCH); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(IsInWater(param1) < 1)) return; + npcatk_clear_targets("targ_not_in_water"); + } + +} + +} diff --git a/scripts/angelscript/monsters/fish_shark_alt.as b/scripts/angelscript/monsters/fish_shark_alt.as new file mode 100644 index 00000000..0d96c980 --- /dev/null +++ b/scripts/angelscript/monsters/fish_shark_alt.as @@ -0,0 +1,159 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" +#include "monsters/base_fish2.as" + +namespace MS +{ + +class FishSharkAlt : CGameScript +{ + string ANIM_ATK_BIG; + string ANIM_ATK_LEFT; + string ANIM_ATK_RIGHT; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATK_DMG_HIGH; + float ATK_DMG_LOW; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int CAN_HEAR; + int DELETE_ON_DEATH; + float FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_DELAY; + int HUNT_AGRO; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string PUSH_VEL; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + + FishSharkAlt() + { + DELETE_ON_DEATH = 1; + ANIM_IDLE = "idle"; + ANIM_WALK = "swim"; + ANIM_RUN = "thrust"; + ANIM_DEATH = "die1"; + ANIM_ATK_BIG = "srattack1"; + ANIM_ATK_RIGHT = "bite_r"; + ANIM_ATK_LEFT = "bite_l"; + ANIM_FLINCH = "bgflinch"; + SOUND_IDLE1 = "ichy/ichy_idle1.wav"; + SOUND_IDLE2 = "ichy/ichy_idle2.wav"; + SOUND_ATTACK1 = "ichy/ichy_bite1.wav"; + SOUND_ATTACK2 = "ichy/ichy_bite2.wav"; + SOUND_STRUCK1 = "ichy/ichy_pain2.wav"; + SOUND_STRUCK2 = "ichy/ichy_pain3.wav"; + SOUND_STRUCK3 = "ichy/ichy_pain5.wav"; + SOUND_STRUCK4 = "ichy/ichy_pain3.wav"; + SOUND_STRUCK5 = "ichy/ichy_pain5.wav"; + SOUND_DEATH = "ichy/ichy_die2.wav"; + ATTACK_MOVERANGE = 32; + ATTACK_RANGE = 120; + ATTACK_HITRANGE = 150; + ATTACK_HITCHANCE = 0.75; + CAN_HEAR = 1; + HUNT_AGRO = 1; + CAN_FLINCH = 1; + FLINCH_ANIM = 0.15; + FLINCH_CHANCE = 0.9; + FLINCH_DELAY = 4; + NPC_HACKED_MOVE_SPEED = 250; + NPC_GIVE_EXP = 12; + ATK_DMG_LOW = 5.0; + ATK_DMG_HIGH = 10.0; + } + + void OnSpawn() override + { + SetHealth(50); + SetWidth(64); + SetHeight(32); + SetName("Shark"); + SetHearingSensitivity(10); + SetRoam(true); + SetRace("wildanimal"); + SetModel("monsters/shark1.mdl"); + } + + void npc_selectattack() + { + int NEXT_ATTACK = RandomInt(0, 2); + if (NEXT_ATTACK == 0) + { + ANIM_ATTACK = ANIM_ATK_BIG; + } + else + { + if (NEXT_ATTACK == 1) + { + ANIM_ATTACK = ANIM_ATK_LEFT; + } + else + { + if (NEXT_ATTACK == 2) + { + ANIM_ATTACK = ANIM_ATK_RIGHT; + } + } + } + } + + void frame_attack() + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {"game.sound.maxvol", SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, Random(ATK_DMG_LOW, ATK_DMG_HIGH), ATTACK_HITCHANCE, "slash"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + Vector3 PUSH_VEL = Vector3(0, 0, 0); + if (ANIM_ATTACK == ANIM_ATK_BIG) + { + PUSH_VEL = /* TODO: $relvel */ $relvel(0, 200, 0); + } + else + { + if (ANIM_ATTACK == ANIM_ATK_LEFT) + { + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, 100, 0); + } + else + { + if (ANIM_ATTACK == ANIM_ATK_RIGHT) + { + PUSH_VEL = /* TODO: $relvel */ $relvel(100, 100, 0); + } + } + } + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + + void OnFlinch() + { + PlayAnim("critical", ANIM_FLINCH); + } + +} + +} diff --git a/scripts/angelscript/monsters/flan_aqua.as b/scripts/angelscript/monsters/flan_aqua.as new file mode 100644 index 00000000..f510079d --- /dev/null +++ b/scripts/angelscript/monsters/flan_aqua.as @@ -0,0 +1,183 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class FlanAqua : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float ATTACK_RATE; + int DELAY_ATTACK; + int IS_BLOODLESS; + int MOVE_FAST; + int MOVE_NORMAL; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + FlanAqua() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "Idle1"; + ANIM_RUN = "Idle2"; + ANIM_WALK = "move"; + ANIM_ATTACK = "Move"; + ANIM_DEATH = "die"; + MOVE_RANGE = 20; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(12, 36); + NO_SPAWN_STUCK_CHECK = 1; + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + ATTACK_RATE = 1.0; + } + + void OnSpawn() override + { + SetName("Aqua Flan"); + SetHealth(240); + SetWidth(20); + SetBloodType("green"); + SetHeight(20); + SetHearingSensitivity(4); + SetModel("monsters/slime_ceirux.mdl"); + SetModelBody(0, 4); + SetRace("demon"); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetSolid("none"); + NPC_GIVE_EXP = 250; + SetDamageResistance("lightning", 1.5); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 0.0); + IS_BLOODLESS = 1; + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "magic"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 5) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void game_movingto_dest() + { + NPC_HACKED_MOVE_SPEED = MOVE_FAST; + if ((SHIELD_ON)) + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if (m_hAttackTarget == "unset") + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if ((PLAYING_STAB)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + if ((AM_SUMMONING)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + + void npcatk_attack() + { + if ((DELAY_ATTACK)) return; + DELAY_ATTACK = 1; + PlayAnim("critical", "Attack1"); + bite1(); + ATTACK_RATE("attack_delay_reset"); + } + + void attack_delay_reset() + { + DELAY_ATTACK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + npc_fade_away(); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/flan_blue.as b/scripts/angelscript/monsters/flan_blue.as new file mode 100644 index 00000000..481411ce --- /dev/null +++ b/scripts/angelscript/monsters/flan_blue.as @@ -0,0 +1,181 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class FlanBlue : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float ATTACK_RATE; + int DELAY_ATTACK; + int IS_BLOODLESS; + int MOVE_FAST; + int MOVE_NORMAL; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + FlanBlue() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "Idle1"; + ANIM_RUN = "Idle2"; + ANIM_WALK = "move"; + ANIM_ATTACK = "Move"; + ANIM_DEATH = "die"; + MOVE_RANGE = 20; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(12, 36); + NO_SPAWN_STUCK_CHECK = 1; + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + ATTACK_RATE = 1.0; + } + + void OnSpawn() override + { + SetName("Blue Flan"); + SetHealth(240); + SetWidth(20); + SetBloodType("green"); + SetHeight(20); + SetHearingSensitivity(4); + SetModel("monsters/slime_ceirux.mdl"); + SetModelBody(0, 1); + SetRace("demon"); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetSolid("none"); + NPC_GIVE_EXP = 250; + SetDamageResistance("cold", 0.0); + IS_BLOODLESS = 1; + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "magic"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 5) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void game_movingto_dest() + { + NPC_HACKED_MOVE_SPEED = MOVE_FAST; + if ((SHIELD_ON)) + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if (m_hAttackTarget == "unset") + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if ((PLAYING_STAB)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + if ((AM_SUMMONING)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + + void npcatk_attack() + { + if ((DELAY_ATTACK)) return; + DELAY_ATTACK = 1; + PlayAnim("critical", "Attack1"); + bite1(); + ATTACK_RATE("attack_delay_reset"); + } + + void attack_delay_reset() + { + DELAY_ATTACK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + npc_fade_away(); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/flan_green.as b/scripts/angelscript/monsters/flan_green.as new file mode 100644 index 00000000..8cdf51e0 --- /dev/null +++ b/scripts/angelscript/monsters/flan_green.as @@ -0,0 +1,182 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class FlanGreen : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float ATTACK_RATE; + int DELAY_ATTACK; + int IS_BLOODLESS; + int MOVE_FAST; + int MOVE_NORMAL; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + FlanGreen() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "Idle1"; + ANIM_RUN = "Idle2"; + ANIM_WALK = "move"; + ANIM_ATTACK = "Move"; + ANIM_DEATH = "die"; + MOVE_RANGE = 20; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(10, 30); + NO_SPAWN_STUCK_CHECK = 1; + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + ATTACK_RATE = 1.0; + } + + void OnSpawn() override + { + SetName("Green Flan"); + SetHealth(240); + SetWidth(20); + SetBloodType("green"); + SetHeight(20); + SetHearingSensitivity(4); + SetModel("monsters/slime_ceirux.mdl"); + SetModelBody(0, 0); + SetRace("demon"); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetSolid("none"); + NPC_GIVE_EXP = 250; + SetDamageResistance("poison", 0.0); + SetDamageResistance("acid", 0.0); + IS_BLOODLESS = 1; + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "magic"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 5) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void game_movingto_dest() + { + NPC_HACKED_MOVE_SPEED = MOVE_FAST; + if ((SHIELD_ON)) + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if (m_hAttackTarget == "unset") + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if ((PLAYING_STAB)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + if ((AM_SUMMONING)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + + void npcatk_attack() + { + if ((DELAY_ATTACK)) return; + DELAY_ATTACK = 1; + PlayAnim("critical", "Attack1"); + bite1(); + ATTACK_RATE("attack_delay_reset"); + } + + void attack_delay_reset() + { + DELAY_ATTACK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + npc_fade_away(); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/flan_red.as b/scripts/angelscript/monsters/flan_red.as new file mode 100644 index 00000000..e32d378c --- /dev/null +++ b/scripts/angelscript/monsters/flan_red.as @@ -0,0 +1,181 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class FlanRed : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float ATTACK_RATE; + int DELAY_ATTACK; + int IS_BLOODLESS; + int MOVE_FAST; + int MOVE_NORMAL; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + FlanRed() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "Idle1"; + ANIM_RUN = "Idle2"; + ANIM_WALK = "move"; + ANIM_ATTACK = "Move"; + ANIM_DEATH = "die"; + MOVE_RANGE = 20; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(12, 36); + NO_SPAWN_STUCK_CHECK = 1; + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + ATTACK_RATE = 1.0; + } + + void OnSpawn() override + { + SetName("Red Flan"); + SetHealth(240); + SetWidth(20); + SetBloodType("green"); + SetHeight(20); + SetHearingSensitivity(4); + SetModel("monsters/slime_ceirux.mdl"); + SetModelBody(0, 2); + SetRace("demon"); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetSolid("none"); + NPC_GIVE_EXP = 250; + SetDamageResistance("fire", 0.0); + IS_BLOODLESS = 1; + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "magic"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 5) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void game_movingto_dest() + { + NPC_HACKED_MOVE_SPEED = MOVE_FAST; + if ((SHIELD_ON)) + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if (m_hAttackTarget == "unset") + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if ((PLAYING_STAB)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + if ((AM_SUMMONING)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + + void npcatk_attack() + { + if ((DELAY_ATTACK)) return; + DELAY_ATTACK = 1; + PlayAnim("critical", "Attack1"); + bite1(); + ATTACK_RATE("attack_delay_reset"); + } + + void attack_delay_reset() + { + DELAY_ATTACK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + npc_fade_away(); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/flan_yellow.as b/scripts/angelscript/monsters/flan_yellow.as new file mode 100644 index 00000000..4c1d64dd --- /dev/null +++ b/scripts/angelscript/monsters/flan_yellow.as @@ -0,0 +1,181 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class FlanYellow : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float ATTACK_RATE; + int DELAY_ATTACK; + int IS_BLOODLESS; + int MOVE_FAST; + int MOVE_NORMAL; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + FlanYellow() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "Idle1"; + ANIM_RUN = "Idle2"; + ANIM_WALK = "move"; + ANIM_ATTACK = "Move"; + ANIM_DEATH = "die"; + MOVE_RANGE = 20; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(12, 36); + NO_SPAWN_STUCK_CHECK = 1; + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + ATTACK_RATE = 1.0; + } + + void OnSpawn() override + { + SetName("Yellow Flan"); + SetHealth(240); + SetWidth(20); + SetBloodType("green"); + SetHeight(20); + SetHearingSensitivity(4); + SetModel("monsters/slime_ceirux.mdl"); + SetModelBody(0, 3); + SetRace("demon"); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetSolid("none"); + NPC_GIVE_EXP = 250; + SetDamageResistance("lightning", 0.0); + IS_BLOODLESS = 1; + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "magic"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 5) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void game_movingto_dest() + { + NPC_HACKED_MOVE_SPEED = MOVE_FAST; + if ((SHIELD_ON)) + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if (m_hAttackTarget == "unset") + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if ((PLAYING_STAB)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + if ((AM_SUMMONING)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + + void npcatk_attack() + { + if ((DELAY_ATTACK)) return; + DELAY_ATTACK = 1; + PlayAnim("critical", "Attack1"); + bite1(); + ATTACK_RATE("attack_delay_reset"); + } + + void attack_delay_reset() + { + DELAY_ATTACK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + npc_fade_away(); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/fw_alcolyte.as b/scripts/angelscript/monsters/fw_alcolyte.as new file mode 100644 index 00000000..23c78e41 --- /dev/null +++ b/scripts/angelscript/monsters/fw_alcolyte.as @@ -0,0 +1,642 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class FwAlcolyte : CGameScript +{ + int ALCO_TYPE; + string ANIM_ATTACK; + string ANIM_ATTACK_CRAWL; + string ANIM_ATTACK_NORM; + string ANIM_CAST_CRAWL; + string ANIM_CAST_NORM; + string ANIM_CRAWL; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DEATH6; + string ANIM_DEATH7; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_IDLE_CRAWL; + string ANIM_IDLE_NORM; + string ANIM_JUMP; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_SEARCH; + string ANIM_WALK; + string ANIM_WALK_NORM; + string AS_ATTACKING; + string ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float CHANCE_EFFECT; + int DID_AID_ALERT; + string DID_WARCRY; + int DMG_KNIFE; + int DMG_TOSS; + int DROP_GOLD; + int DROP_GOLD_AMT; + string EFFECT_DMG; + string EFFECT_DUR; + string EFFECT_SCRIPT; + string FREQ_COMBAT; + float FREQ_IDLE; + float FREQ_LEAP; + float FREQ_LOOK; + float FREQ_LOTS; + float FREQ_NORM; + float FREQ_RARE; + string FREQ_THROW; + string G_LAST_VICTORY; + int JUMP_CHANCE; + string K_MOVE_TYPE; + string LEAP_DELAY; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string ORIG_WEAPON; + int PROJ_SPEED; + string SEARCH_DELAY; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_BURN; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_DRAW; + string SOUND_EFFECT; + string SOUND_EFFECT_DELAY; + string SOUND_FREEZE; + string SOUND_IDLE; + string SOUND_JUMP1; + string SOUND_JUMP2; + string SOUND_JUMP3; + string SOUND_LOST_SIGHT1; + string SOUND_LOST_SIGHT2; + string SOUND_LOST_SIGHT3; + string SOUND_LOST_SIGHT4; + string SOUND_LOST_SIGHT5; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_PARRY; + string SOUND_POISON; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWING; + string SOUND_THROW; + string SOUND_VICTORY1; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + string SOUND_WARCRY3; + string SOUND_WARCRY4; + int STARTED_CYCLES; + string THROW_DELAY; + + FwAlcolyte() + { + ANIM_WALK = "walk2handed"; + ANIM_RUN = "run2"; + ANIM_IDLE = "idle"; + ANIM_ATTACK = "ref_shoot_knife"; + ANIM_DEATH = "die_simple"; + ANIM_WALK_NORM = "walk2handed"; + ANIM_RUN_NORM = "run2"; + ANIM_IDLE_NORM = "idle"; + ANIM_HOP = "jump"; + ANIM_JUMP = "long_jump"; + ANIM_CRAWL = "crawl"; + ANIM_IDLE_CRAWL = "crouch_idle"; + ANIM_ATTACK_NORM = "ref_shoot_knife"; + ANIM_ATTACK_CRAWL = "crouch_shoot_knife"; + ANIM_SEARCH = "look_idle"; + ANIM_CAST_NORM = "ref_shoot_onehanded"; + ANIM_CAST_CRAWL = "crouch_shoot_onehanded"; + ANIM_DEATH1 = "die_simple"; + ANIM_DEATH2 = "die_backwards1"; + ANIM_DEATH3 = "die_backwards"; + ANIM_DEATH4 = "die_forwards"; + ANIM_DEATH5 = "headshot"; + ANIM_DEATH6 = "die_spin"; + ANIM_DEATH7 = "gutshot"; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 170; + ATTACK_MOVERANGE = 80; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 20); + NPC_GIVE_EXP = 120; + DMG_KNIFE = RandomInt(10, 20); + CHANCE_EFFECT = 0.3; + FREQ_IDLE = Random(30, 40); + DMG_TOSS = RandomInt(20, 30); + PROJ_SPEED = 600; + FREQ_LOOK = Random(30.0, 60.0); + FREQ_LOTS = Random(3, 10); + FREQ_RARE = Random(20, 30); + FREQ_NORM = Random(10, 15); + FREQ_LEAP = 5.0; + SOUND_JUMP1 = "voices/phlame/vs_ndrawlm_atk1.wav"; + SOUND_JUMP2 = "voices/phlame/vs_ndrawlm_atk2.wav"; + SOUND_JUMP3 = "voices/phlame/vs_ndrawlm_atk3.wav"; + SOUND_SWING = "weapons/swingsmall.wav"; + SOUND_THROW = "zombie/claw_miss1.wav"; + SOUND_DRAW = "weapons/dagger/dagger2.wav"; + SOUND_PARRY = "weapons/dagger/daggermetal2.wav"; + SOUND_PAIN1 = "voices/phlame/vs_ndrawlm_hit1.wav"; + SOUND_PAIN2 = "voices/phlame/vs_ndrawlm_hit2.wav"; + SOUND_PAIN3 = "voices/phlame/vs_ndrawlm_hit3.wav"; + SOUND_DEATH1 = "voices/phlame/vs_ndrawlm_dead.wav"; + SOUND_DEATH2 = "voices/phlame/vs_ndrawlm_hit3.wav"; + SOUND_ALERT1 = "voices/phlame/vs_ndrawlm_attk.wav"; + SOUND_ALERT2 = "voices/phlame/vs_ndrawlm_bat1.wav"; + SOUND_ALERT3 = "voices/phlame/vs_ndrawlm_help.wav"; + SOUND_IDLE = "voices/phlame/vs_ndrawlm_haha.wav"; + SOUND_WARCRY1 = "voices/phlame/vs_ndrawlm_bat2.wav"; + SOUND_WARCRY2 = "voices/phlame/vs_ndrawlm_bat3.wav"; + SOUND_WARCRY3 = "voices/phlame/vs_ndrawlm_bat1.wav"; + SOUND_WARCRY4 = "voices/phlame/vs_ndrawlm_attk.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_LOST_SIGHT1 = "voices/phlame/vs_ndrawlm_attk.wav"; + SOUND_LOST_SIGHT2 = "voices/phlame/vs_ndrawlm_bat1.wav"; + SOUND_LOST_SIGHT3 = "voices/phlame/vs_ndrawlm_bat2.wav"; + SOUND_LOST_SIGHT4 = "voices/phlame/vs_ndrawlm_bat3.wav"; + SOUND_LOST_SIGHT5 = "voices/phlame/vs_ndrawlm_warn.wav"; + SOUND_VICTORY1 = "voices/phlame/vs_ndrawlm_vict.wav"; + SOUND_BURN = "ambience/steamburst1.wav"; + SOUND_POISON = "bullchicken/bc_bite2.wav"; + SOUND_FREEZE = "magic/frost_forward.wav"; + Precache(SOUND_FREEZE); + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_IDLE); + if (m_hAttackTarget == "unset") + { + } + if (!(NPC_MOVING_LAST_KNOWN)) + { + } + PlayAnim("once", ANIM_SEARCH); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + + void OnSpawn() override + { + SetName("Phlame Acolyte"); + SetModel("monsters/fire_alcolyte.mdl"); + SetProp(GetOwner(), "skin", 1); + if ((true)) + { + int BASE_HP = RandomInt(200, 300); + SetHealth(BASE_HP); + } + SetRace("demon"); + SetWidth(32); + if (!(AM_TURRET)) + { + SetHeight(72); + } + if ((AM_TURRET)) + { + SetHeight(48); + } + SetRoam(true); + SetHearingSensitivity(4); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 1.25); + if ((OVERRIDE_TYPE)) return; + ALCO_TYPE = 2; + } + + void OnPostSpawn() override + { + SetDamageResistance("holy", 0.0); + JUMP_CHANCE = 1; + if (ALCO_TYPE == 1) + { + ALCO_TYPE = "ninja"; + } + if (ALCO_TYPE == 2) + { + ALCO_TYPE = "fire"; + } + if (ALCO_TYPE == 3) + { + ALCO_TYPE = "poison"; + } + if (ALCO_TYPE == 4) + { + ALCO_TYPE = "cold"; + } + if (ALCO_TYPE == "fire") + { + SetModelBody(2, 0); + ORIG_WEAPON = 1; + FREQ_COMBAT = FREQ_RARE; + EFFECT_SCRIPT = "effects/dot_fire"; + EFFECT_DUR = 5.0; + EFFECT_DMG = 30; + SOUND_EFFECT = SOUND_BURN; + THROW_DELAY = 1; + FREQ_THROW = 10.0; + FREQ_THROW("reset_throw_delay"); + ATTACK_HITCHANCE = 80; + } + if ((I_POUNCE)) + { + SetMoveAnim(ANIM_IDLE_CRAWL); + SetIdleAnim(ANIM_IDLE_CRAWL); + } + SetProp(GetOwner(), "skin", ORIG_WEAPON); + if ((I_POUNCE)) return; + walk_mode(); + } + + void ambush() + { + LogDebug("*** POUNCE ***"); + npcatk_resume_ai(); + npcatk_faceattacker(NPC_PROXACT_PLAYERID); + run_mode(); + AS_ATTACKING = GetGameTime(); + ScheduleDelayedEvent(0.01, "leap_ambush"); + cycle_up("ambush"); + SetMoveAnim(ANIM_RUN_NORM); + SetIdleAnim(ANIM_IDLE_NORM); + } + + void leap_ambush() + { + leap_at(NPC_PROXACT_PLAYERID); + } + + void npc_targetsighted() + { + if (!(DID_WARCRY)) + { + SEARCH_DELAY = GetGameTime(); + SEARCH_DELAY += FREQ_LOOK; + DID_WARCRY = 1; + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2, SOUND_WARCRY3, SOUND_WARCRY4 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2, SOUND_WARCRY3, SOUND_WARCRY4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(0.1, "draw_sound"); + } + if ((STARTED_CYCLES)) return; + STARTED_CYCLES = 1; + FREQ_COMBAT("do_combat_move"); + } + + void draw_sound() + { + EmitSound(GetOwner(), 0, SOUND_DRAW, 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RND_DEATH = RandomInt(1, 7); + if (RND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (RND_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (RND_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + if (RND_DEATH == 6) + { + ANIM_DEATH = ANIM_DEATH6; + } + if (RND_DEATH == 7) + { + ANIM_DEATH = ANIM_DEATH7; + } + // PlayRandomSound from: SOUND_DEATH1, SOUND_DEATH2 + array sounds = {SOUND_DEATH1, SOUND_DEATH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void reset_search_delay() + { + SEARCH_DELAY = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 8); + if (param1 > 50) + { + if (!(LEAP_DELAY)) + { + } + LEAP_DELAY = 1; + FREQ_LEAP("reset_leap_delay"); + leap_away(GetEntityIndex(m_hLastStruck)); + } + } + + void run_mode() + { + K_MOVE_TYPE = "run"; + ANIM_RUN = ANIM_RUN_NORM; + ANIM_WALK = ANIM_WALK_NORM; + ANIM_IDLE = ANIM_IDLE_NORM; + ANIM_ATTACK = ANIM_ATTACK_NORM; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + } + + void walk_mode() + { + K_MOVE_TYPE = "walk"; + ANIM_RUN = ANIM_RUN_NORM; + ANIM_WALK = ANIM_WALK_NORM; + ANIM_IDLE = ANIM_IDLE_NORM; + ANIM_ATTACK = ANIM_ATTACK_NORM; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + + void crawl_mode() + { + K_MOVE_TYPE = "crawl"; + ANIM_RUN = ANIM_CRAWL; + ANIM_WALK = ANIM_CRAWL; + ANIM_IDLE = ANIM_IDLE_CRAWL; + ANIM_ATTACK = ANIM_ATTACK_CRAWL; + SetMoveAnim(ANIM_CRAWL); + SetIdleAnim(ANIM_IDLE_CRAWL); + } + + void leap_at() + { + if ((NO_JUMPS)) return; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(GetEntityIndex(param1)); + AS_ATTACKING = GetGameTime(); + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2, SOUND_JUMP3 + array sounds = {SOUND_JUMP1, SOUND_JUMP2, SOUND_JUMP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_JUMP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_away() + { + if ((NO_JUMPS)) return; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(0.2, "leap_away"); + SetMoveDest(GetEntityIndex(param1)); + AS_ATTACKING = GetGameTime(); + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2, SOUND_JUMP3 + array sounds = {SOUND_JUMP1, SOUND_JUMP2, SOUND_JUMP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_JUMP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 600, 75)); + } + + void toggle_stance() + { + if (K_MOVE_TYPE != "crawl") + { + ScheduleDelayedEvent(0.1, "crawl_mode"); + } + if (K_MOVE_TYPE == "crawl") + { + ScheduleDelayedEvent(0.1, "run_mode"); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(CYCLED_UP)) return; + if (GetEntityRange(m_hAttackTarget) >= ATTACK_RANGE) + { + if (K_MOVE_TYPE != "run") + { + if (ALCO_TYPE != "poison") + { + } + run_mode(); + } + if (!(THROW_DELAY)) + { + if ((false)) + { + } + THROW_DELAY = 1; + FREQ_THROW("reset_throw_delay"); + npcatk_faceattacker(m_hAttackTarget); + EmitSound(GetOwner(), 0, SOUND_THROW, 10); + PlayAnim("critical", ANIM_ATTACK); + ScheduleDelayedEvent(0.1, "do_throw"); + NINJA_JUMP = GetGameTime(); + NINJA_JUMP += 2; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (ALCO_TYPE == "ninja") + { + if (GetGameTime() > NINJA_JUMP) + { + } + if (!(LEAP_DELAY)) + { + } + LEAP_DELAY = 1; + FREQ_LEAP("reset_leap_delay"); + leap_at(m_hAttackTarget); + } + } + } + + void reset_throw_delay() + { + THROW_DELAY = 0; + } + + void swing_dodamage() + { + if (!(ALCO_TYPE != "ninja")) return; + if (!(GetRelationship(param2) == "enemy")) return; + if (!(RandomInt(1, 100) < CHANCE_EFFECT)) return; + if (!(SOUND_EFFECT_DELAY)) + { + SOUND_EFFECT_DELAY = 1; + ScheduleDelayedEvent(5.1, "reset_sound_effect_delay"); + EmitSound(GetOwner(), 0, SOUND_EFFECT, 10); + } + if (!(EFFECT_SCRIPT != "EFFECT_SCRIPT")) return; + ApplyEffect(param2, EFFECT_SCRIPT, EFFECT_DUR, GetEntityIndex(GetOwner()), EFFECT_DMG); + } + + void reset_sound_effect_delay() + { + SOUND_EFFECT_DELAY = 0; + } + + void do_combat_move() + { + if ((AM_TURRET)) return; + FREQ_COMBAT("do_combat_move"); + if (!(m_hAttackTarget != "unset")) return; + int RND_MOVE = RandomInt(1, 5); + if (RND_MOVE > JUMP_CHANCE) + { + toggle_stance(); + } + if (RND_MOVE <= JUMP_CHANCE) + { + if (!(LEAP_DELAY)) + { + } + LEAP_DELAY = 1; + FREQ_LEAP("reset_leap_delay"); + leap_away(m_hAttackTarget); + } + } + + void reset_leap_delay() + { + LEAP_DELAY = 0; + } + + void attack_knife() + { + EmitSound(GetOwner(), 0, SOUND_SWING, 5); + string F_DMG_KNIFE = DMG_KNIFE; + if (GetPlayerCount() > 4) + { + F_DMG_KNIFE *= 2; + } + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, F_DMG_KNIFE, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:swing"); + } + + void OnParry(CBaseEntity@ attacker) override + { + if (K_MOVE_TYPE != "crawl") + { + PlayAnim("critical", ANIM_CAST_NORM); + } + if (K_MOVE_TYPE == "crawl") + { + PlayAnim("critical", ANIM_CAST_CRAWL); + } + EmitSound(GetOwner(), 0, SOUND_PARRY, 10); + } + + void do_throw() + { + string F_DMG_TOSS = DMG_TOSS; + if (GetPlayerCount() > 4) + { + F_DMG_TOSS *= 2; + } + if (K_MOVE_TYPE != "crawl") + { + int L_UP = 62; + } + if (K_MOVE_TYPE == "crawl") + { + int L_UP = 34; + } + string L_POS = GetEntityOrigin(GetOwner()); + L_POS += "z"; + TossProjectile("proj_k_knife", L_POS, m_hAttackTarget, PROJ_SPEED, F_DMG_TOSS, 0.2, "none"); + SetModelBody(2, 1); + AS_ATTACKING = GetGameTime(); + npcatk_suspend_ai("do_throw"); + ScheduleDelayedEvent(0.5, "do_reload"); + } + + void do_reload() + { + if (K_MOVE_TYPE != "crawl") + { + PlayAnim("critical", ANIM_SEARCH); + } + if (K_MOVE_TYPE == "crawl") + { + PlayAnim("critical", ANIM_CAST_CRAWL); + } + ScheduleDelayedEvent(0.5, "do_reload2"); + } + + void do_reload2() + { + AS_ATTACKING = GetGameTime(); + npcatk_resume_ai("reload2"); + SetModelBody(2, 0); + EmitSound(GetOwner(), 0, SOUND_DRAW, 10); + } + + void npcatk_lost_sight() + { + if ((false)) return; + if (!(GetGameTime() > SEARCH_DELAY)) return; + SEARCH_DELAY = GetGameTime(); + SEARCH_DELAY += FREQ_LOOK; + // PlayRandomSound from: SOUND_LOST_SIGHT1, SOUND_LOST_SIGHT2, SOUND_LOST_SIGHT3, SOUND_LOST_SIGHT4, SOUND_LOST_SIGHT5 + array sounds = {SOUND_LOST_SIGHT1, SOUND_LOST_SIGHT2, SOUND_LOST_SIGHT3, SOUND_LOST_SIGHT4, SOUND_LOST_SIGHT5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("once", ANIM_SEARCH); + AS_ATTACKING = GetGameTime(); + } + + void OnAidingAlly(CBaseEntity@ ally, CBaseEntity@ enemy) + { + CallExternal(NPC_ALLY_TO_AID, "being_aided"); + } + + void being_aided() + { + if (!(false)) return; + if ((DID_AID_ALERT)) return; + DID_AID_ALERT = 1; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void my_target_died() + { + LogDebug("my_target_died"); + if (!(GetGameTime() > G_LAST_VICTORY)) return; + G_LAST_VICTORY = GetGameTime(); + G_LAST_VICTORY += 30.0; + EmitSound(GetOwner(), 0, SOUND_VICTORY1, 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/fw_elder.as b/scripts/angelscript/monsters/fw_elder.as new file mode 100644 index 00000000..b9db4803 --- /dev/null +++ b/scripts/angelscript/monsters/fw_elder.as @@ -0,0 +1,527 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class FwElder : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_CRAWL; + string ANIM_ATTACK_NORM; + string ANIM_CAST_CRAWL; + string ANIM_CAST_NORM; + string ANIM_CRAWL; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DEATH6; + string ANIM_DEATH7; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_IDLE_CRAWL; + string ANIM_IDLE_NORM; + string ANIM_JUMP; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_SEARCH; + string ANIM_WALK; + string ANIM_WALK_NORM; + string AS_ATTACKING; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int ATTACK_RANGE_MELEE; + int ATTACK_RANGE_PROJ; + int BEAM_IDLE_VOL; + int BLADE_ATTACK; + int BLADE_DRAWN; + int CAN_RETALIATE; + float CL_RESET_FREQ; + int CUR_BOLT; + int DID_AID_ALERT; + string DID_WARCRY; + int DMG_FIRE_BOLT; + int DMG_KNIFE; + int DMG_POISON_BOLT; + int DMG_REPEL_BEAM; + int DOT_COLD; + int DOT_FIRE; + int DOT_POISON; + int DOT_SHOCK; + string DRAW_ON_SIGHT; + int DROP_GOLD; + int DROP_GOLD_AMT; + string EFFECT_DMG; + string EFFECT_DUR; + string EFFECT_SCRIPT; + string ELDER_TYPE; + int FLEE_CHECK_DELAY; + float FREQ_IDLE; + string FREQ_SPELL; + string G_LAST_VICTORY; + string JUMP_AWAY_CHANCE; + int MAX_BEAM_RANGE; + string NEXT_LEAP; + string NEXT_SEARCH; + string NEXT_SPELL; + int NPC_GIVE_EXP; + int NPC_RANGED; + int OVERRIDE_TYPE; + int PASS_FREEZE_DMG; + float PASS_FREEZE_DUR; + string REPEL_BEAM_VEL; + int RND_ELDER_TYPE; + string SOUND_ACID1; + string SOUND_ACID2; + string SOUND_ACID3; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_BEAM_ACTIVATE; + string SOUND_BEAM_LOOP; + string SOUND_BEAM_SHOOT; + string SOUND_BURN; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_DRAW; + string SOUND_EFFECT; + string SOUND_FREEZE; + string SOUND_IDLE; + string SOUND_JUMP1; + string SOUND_JUMP2; + string SOUND_JUMP3; + string SOUND_LOST_SIGHT1; + string SOUND_LOST_SIGHT2; + string SOUND_LOST_SIGHT3; + string SOUND_LOST_SIGHT4; + string SOUND_LOST_SIGHT5; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_PARRY; + string SOUND_POISON; + string SOUND_SHOCK; + string SOUND_SPELL_COLD; + string SOUND_SPELL_POISON; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWING; + string SOUND_THROW; + string SOUND_VICTORY1; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + string WEAPON_IDX; + + FwElder() + { + CAN_RETALIATE = 0; + NPC_RANGED = 1; + ATTACK_RANGE_MELEE = 50; + ATTACK_RANGE_PROJ = 512; + CL_RESET_FREQ = 5.0; + REPEL_BEAM_VEL = /* TODO: $relvel */ $relvel(0, 350, 60); + MAX_BEAM_RANGE = 800; + BEAM_IDLE_VOL = 4; + DMG_FIRE_BOLT = 80; + DMG_POISON_BOLT = 50; + DOT_POISON = 20; + DOT_FIRE = 40; + DOT_COLD = 20; + DOT_SHOCK = 30; + DMG_KNIFE = 75; + DMG_REPEL_BEAM = 10; + ANIM_WALK_NORM = "walk2handed"; + ANIM_RUN_NORM = "run2"; + ANIM_IDLE_NORM = "idle"; + ANIM_HOP = "jump"; + ANIM_JUMP = "long_jump"; + ANIM_CRAWL = "crawl"; + ANIM_IDLE_CRAWL = "crouch_idle"; + ANIM_ATTACK_NORM = "ref_shoot_knife"; + ANIM_ATTACK_CRAWL = "crouch_shoot_knife"; + ANIM_SEARCH = "look_idle"; + ANIM_CAST_NORM = "ref_shoot_onehanded"; + ANIM_CAST_CRAWL = "crouch_shoot_onehanded"; + ANIM_DEATH1 = "die_simple"; + ANIM_DEATH2 = "die_backwards1"; + ANIM_DEATH3 = "die_backwards"; + ANIM_DEATH4 = "die_forwards"; + ANIM_DEATH5 = "headshot"; + ANIM_DEATH6 = "die_spin"; + ANIM_DEATH7 = "gutshot"; + FREQ_IDLE = Random(20, 40); + ATTACK_HITCHANCE = 80; + DMG_KNIFE = 60; + PASS_FREEZE_DMG = 50; + PASS_FREEZE_DUR = 5.0; + ANIM_WALK = "walk2handed"; + ANIM_RUN = "run2"; + if (!(AM_TURRET)) + { + ANIM_IDLE = "idle"; + } + else + { + ANIM_IDLE = "ref_aim_knife"; + } + ANIM_ATTACK = "ref_shoot_knife"; + ANIM_DEATH = "die_simple"; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 170; + ATTACK_MOVERANGE = 512; + DROP_GOLD = 1; + DROP_GOLD_AMT = 100; + NPC_GIVE_EXP = 1250; + SOUND_JUMP1 = "voices/phlame/vs_ndrawlm_atk1.wav"; + SOUND_JUMP2 = "voices/phlame/vs_ndrawlm_atk2.wav"; + SOUND_JUMP3 = "voices/phlame/vs_ndrawlm_atk3.wav"; + SOUND_SWING = "weapons/swingsmall.wav"; + SOUND_THROW = "zombie/claw_miss1.wav"; + SOUND_DRAW = "weapons/dagger/dagger2.wav"; + SOUND_PARRY = "weapons/dagger/daggermetal2.wav"; + SOUND_PAIN1 = "voices/phlame/vs_nkarlatm_hit1.wav"; + SOUND_PAIN2 = "voices/phlame/vs_nkarlatm_hit2.wav"; + SOUND_PAIN3 = "voices/phlame/vs_nkarlatm_hit3.wav"; + SOUND_DEATH1 = "voices/phlame/vs_nkarlatm_dead.wav"; + SOUND_DEATH2 = "voices/phlame/vs_nkarlatm_hit3.wav"; + SOUND_ALERT1 = "voices/phlame/vs_nkarlatm_attk.wav"; + SOUND_ALERT2 = "voices/phlame/vs_nkarlatm_bat1.wav"; + SOUND_ALERT3 = "voices/phlame/vs_nkarlatm_help.wav"; + SOUND_IDLE = "voices/phlame/vs_nkarlatm_haha.wav"; + SOUND_WARCRY1 = "voices/phlame/vs_nkarlatm_bat2.wav"; + SOUND_WARCRY2 = "voices/phlame/vs_nkarlatm_bat3.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_ACID1 = "bullchicken/bc_attack1.wav"; + SOUND_ACID2 = "bullchicken/bc_attack2.wav"; + SOUND_ACID3 = "bullchicken/bc_attack3.wav"; + SOUND_LOST_SIGHT1 = "voices/phlame/vs_nkarlatm_attk.wav"; + SOUND_LOST_SIGHT2 = "voices/phlame/vs_nkarlatm_bat1.wav"; + SOUND_LOST_SIGHT3 = "voices/phlame/vs_nkarlatm_bat2.wav"; + SOUND_LOST_SIGHT4 = "voices/phlame/vs_nkarlatm_bat3.wav"; + SOUND_LOST_SIGHT5 = "voices/phlame/vs_nkarlatm_warn.wav"; + SOUND_VICTORY1 = "voices/phlame/vs_nkarlatm_vict.wav"; + SOUND_BURN = "ambience/steamburst1.wav"; + SOUND_POISON = "bullchicken/bc_bite2.wav"; + SOUND_FREEZE = "magic/frost_forward.wav"; + SOUND_SHOCK = "debris/zap1.wav"; + Precache(SOUND_BURN); + Precache(SOUND_POISON); + Precache(SOUND_FREEZE); + SOUND_BEAM_LOOP = "magic/bolt_loop.wav"; + SOUND_BEAM_ACTIVATE = "magic/bolt_start.wav"; + SOUND_BEAM_SHOOT = "magic/bolt_end.wav"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart14.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + SOUND_SPELL_POISON = "bullchicken/bc_attack3.wav"; + SOUND_SPELL_COLD = "magic/frost_reverse.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_IDLE); + if (m_hAttackTarget == "unset") + { + } + AS_ATTACKING = GetGameTime(); + PlayAnim("once", ANIM_SEARCH); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + + void game_precache() + { + Precache("monsters/k_elder_cl"); + } + + void OnSpawn() override + { + SetName("Phlame Elder"); + SetModel("monsters/fire_alcolyte.mdl"); + SetModelBody(1, 1); + SetModelBody(2, 1); + SetProp(GetOwner(), "skin", 1); + SetHealth(RandomInt(2000, 4000)); + SetBloodType("red"); + CUR_BOLT = 0; + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetIdleAnim("idle"); + SetMoveAnim("walk2handed"); + SetRace("demon"); + SetWidth(32); + SetHeight(72); + SetRoam(true); + SetHearingSensitivity(4); + if (!(true)) return; + ScheduleDelayedEvent(0.01, "setup_elder"); + } + + void set_type() + { + OVERRIDE_TYPE = 2; + } + + void type_fire() + { + OVERRIDE_TYPE = 2; + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RND_DEATH = RandomInt(1, 7); + if (RND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (RND_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (RND_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + if (RND_DEATH == 6) + { + ANIM_DEATH = ANIM_DEATH6; + } + if (RND_DEATH == 7) + { + ANIM_DEATH = ANIM_DEATH7; + } + // PlayRandomSound from: SOUND_DEATH1, SOUND_DEATH2 + array sounds = {SOUND_DEATH1, SOUND_DEATH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void setup_elder() + { + RND_ELDER_TYPE = 2; + SetDamageResistance("holy", 0.5); + if (RND_ELDER_TYPE == 2) + { + JUMP_AWAY_CHANCE = 20; + DRAW_ON_SIGHT = 0; + ELDER_TYPE = "fire"; + WEAPON_IDX = 2; + FREQ_SPELL = 1.0; + EFFECT_SCRIPT = "effects/dot_poison"; + EFFECT_DUR = 5; + EFFECT_DMG = DOT_FIRE; + SOUND_EFFECT = SOUND_BURN; + } + } + + void draw_blade() + { + BLADE_DRAWN = 1; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_CAST_NORM); + ScheduleDelayedEvent(0.2, "draw_blade2"); + } + + void draw_blade2() + { + SetModelBody(2, WEAPON_IDX); + EmitSound(GetOwner(), 0, SOUND_DRAW, 10); + } + + void lknife_sound() + { + EmitSound(GetOwner(), 0, SOUND_BEAM_ACTIVATE, 10); + } + + void OnDamage(int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 8); + if (!(GetEntityRange(param1) < 256)) return; + int RND_100 = RandomInt(1, 100); + LogDebug("RND_100 vs JUMP_AWAY_CHANCE"); + if (RND_100 < JUMP_AWAY_CHANCE) + { + if (GetGameTime() > NEXT_LEAP) + { + } + NEXT_LEAP = GetGameTime(); + NEXT_LEAP += 10.0; + LogDebug("leap away!"); + leap_away(GetEntityIndex(param1)); + } + } + + void leap_away() + { + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + AS_ATTACKING = GetGameTime(); + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2, SOUND_JUMP3 + array sounds = {SOUND_JUMP1, SOUND_JUMP2, SOUND_JUMP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + PlayAnim("critical", ANIM_JUMP); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 600, 75)); + } + + void game_dodamage() + { + if ((BLADE_ATTACK)) + { + if (ELDER_TYPE != "dark") + { + } + if (GetRelationship(param2) == "enemy") + { + } + if (GetGameTime() > NEXT_APPLYEFFECT_SOUND) + { + NEXT_APPLYEFFECT_SOUND = GetGameTime(); + NEXT_APPLYEFFECT_SOUND += EFFECT_DUR; + EmitSound(GetOwner(), 0, SOUND_EFFECT, 10); + } + ApplyEffect(param2, EFFECT_SCRIPT, EFFECT_DUR, GetEntityIndex(GetOwner()), EFFECT_DMG); + } + BLADE_ATTACK = 0; + } + + void attack_knife() + { + EmitSound(GetOwner(), 0, SOUND_SWING, 5); + BLADE_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KNIFE, ATTACK_HITCHANCE, "pierce"); + } + + void OnParry(CBaseEntity@ attacker) override + { + PlayAnim("critical", ANIM_CAST_NORM); + EmitSound(GetOwner(), 0, SOUND_PARRY, 10); + } + + void OnAidingAlly(CBaseEntity@ ally, CBaseEntity@ enemy) + { + CallExternal(NPC_ALLY_TO_AID, "being_aided"); + } + + void being_aided() + { + if (!(false)) return; + if ((DID_AID_ALERT)) return; + DID_AID_ALERT = 1; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npcatk_lost_sight() + { + if ((false)) return; + if (!(GetGameTime() > NEXT_SEARCH)) return; + NEXT_SEARCH = GetGameTime(); + NEXT_SEARCH += 20.0; + // PlayRandomSound from: SOUND_LOST_SIGHT1, SOUND_LOST_SIGHT2, SOUND_LOST_SIGHT3, SOUND_LOST_SIGHT4, SOUND_LOST_SIGHT5 + array sounds = {SOUND_LOST_SIGHT1, SOUND_LOST_SIGHT2, SOUND_LOST_SIGHT3, SOUND_LOST_SIGHT4, SOUND_LOST_SIGHT5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("once", ANIM_SEARCH); + AS_ATTACKING = GetGameTime(); + } + + void npc_targetsighted() + { + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((DRAW_ON_SIGHT)) + { + ScheduleDelayedEvent(0.1, "draw_blade"); + } + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (!(NPC_CANSEE_TARGET)) return; + if (ELDER_TYPE == "fire") + { + if (GetGameTime() > NEXT_SPELL) + { + } + NEXT_SPELL = GetGameTime(); + NEXT_SPELL += FREQ_SPELL; + do_spell(); + } + } + + void do_spell() + { + if (ELDER_TYPE == "fire") + { + PlayAnim("critical", ANIM_CAST_NORM); + CUR_BOLT += 1; + if (CUR_BOLT == 1) + { + TossProjectile("proj_fire_xolt", /* TODO: $relpos */ $relpos(0, 0, 26), m_hAttackTarget, 400, DMG_FIRE_BOLT, 2, "none"); + } + else + { + // PlayRandomSound from: SOUND_ACID1, SOUND_ACID2, SOUND_ACID3 + array sounds = {SOUND_ACID1, SOUND_ACID2, SOUND_ACID3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 0, 26), m_hAttackTarget, 400, DMG_FIRE_BOLT, 2, "none"); + CUR_BOLT = 0; + } + } + } + + void npc_selectattack() + { + if (!(BLADE_DRAWN)) + { + draw_blade(); + } + if ((GetEntityProperty(m_hAttackTarget, "scriptvar"))) return; + } + + void reset_flee_check_delay() + { + FLEE_CHECK_DELAY = 0; + } + + void my_target_died() + { + LogDebug("my_target_died"); + if (!(GetGameTime() > G_LAST_VICTORY)) return; + G_LAST_VICTORY = GetGameTime(); + G_LAST_VICTORY += 30.0; + EmitSound(GetOwner(), 0, SOUND_VICTORY1, 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/gabe_newell.as b/scripts/angelscript/monsters/gabe_newell.as new file mode 100644 index 00000000..b12f3540 --- /dev/null +++ b/scripts/angelscript/monsters/gabe_newell.as @@ -0,0 +1,163 @@ +#pragma context server + +#include "monsters/base_flyer_grav.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class GabeNewell : CGameScript +{ + string AS_LAST_POS; + int AS_LAST_POS_SET; + string CHOSEN_PLAYER; + int IS_ACTIVE; + string NEXT_MUSAK; + string NEXT_WARN; + int NPC_HACKED_MOVE_SPEED; + int PLAYING_DEAD; + + GabeNewell() + { + NPC_HACKED_MOVE_SPEED = 75; + } + + void OnRepeatTimer() + { + SetRepeatDelay(5.0); + if ((IsEntityAlive(GetOwner()))) + { + } + if ((IS_ACTIVE)) + { + } + PlayAnim("once", "spin_horizontal_slow"); + SetAnimFrameRate(0.25); + if (GetGameTime() > NEXT_MUSAK) + { + EmitSound(GetOwner(), 1, "gabe_loop.wav", 10); + NEXT_MUSAK = GetGameTime(); + NEXT_MUSAK += 15.0; + } + ClientEvent("new", "all", "monsters/gabe_newell_cl", GetEntityIndex(GetOwner()), 4.9); + } + + void OnSpawn() override + { + SetName("Gabe Newell"); + SetRace("demon"); + PLAYING_DEAD = 1; + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 65); + SetWidth(8); + SetHeight(8); + IS_ACTIVE = 1; + SetInvincible(true); + SetHealth(9999); + SetIdleAnim("spin_horizontal_slow"); + SetMoveAnim("spin_horizontal_slow"); + PlayAnim("once", "spin_horizontal_slow"); + SetAnimFrameRate(0.25); + SetMonsterClip(0); + EmitSound(GetOwner(), 1, "gabe_loop.wav", 10); + ClientEvent("new", "all", "monsters/gabe_newell_cl", GetEntityIndex(GetOwner()), 4.9); + ScheduleDelayedEvent(0.1, "pick_player"); + ScheduleDelayedEvent(5.0, "npcatk_hunt"); + } + + void pick_player() + { + GetAllPlayers(PLAYER_LIST); + string N_PLAYERS = GetTokenCount(PLAYER_LIST, ";"); + N_PLAYERS -= 1; + int RND_PLAYER = RandomInt(0, N_PLAYERS); + CHOSEN_PLAYER = GetToken(PLAYER_LIST, RND_PLAYER, ";"); + if (CHOSEN_PLAYER == G_LAST_GABE_TARGET) + { + CHOSEN_PLAYER = "unset"; + } + if (!(CHOSEN_PLAYER != "unset")) return; + string OUT_TITLE = "Gabe Newell is out to eat "; + OUT_TITLE += GetEntityName(CHOSEN_PLAYER); + string OUT_MSG = "If he catches you, he will deleted your character!"; + SendInfoMsg("all", OUT_MSG + OUT_TITLE); + SetGlobalVar("G_LAST_GABE_TARGET", CHOSEN_PLAYER); + CallExternal("players", "ext_gabe_musak"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "npcatk_hunt"); + if (!((CHOSEN_PLAYER !is null))) + { + pick_player(); + } + if (!((CHOSEN_PLAYER !is null))) return; + SetMoveDest(CHOSEN_PLAYER); + if (GetEntityRange(CHOSEN_PLAYER) < 512) + { + if (GetGameTime() > NEXT_WARN) + { + } + NEXT_WARN = GetGameTime(); + NEXT_WARN += 15.0; + SendInfoMsg(CHOSEN_PLAYER, "GABE NEWELL IS TRYING TO EAT YOU! Run you fool! He'll delete your character!"); + CallExternal("players", "ext_gabe_musak"); + } + if (GetEntityRange(CHOSEN_PLAYER) < 64) + { + do_omnomnom(); + } + if (NPC_HACKED_MOVE_SPEED < 250) + { + if (GetEntityRange(CHOSEN_PLAYER) < 1024) + { + } + NPC_HACKED_MOVE_SPEED += 0.02; + } + if (!(IS_ACTIVE)) return; + string MY_ORG = GetEntityOrigin(GetOwner()); + if (Distance(AS_LAST_POS, MY_ORG) < 1) + { + LogDebug("anti-stuck"); + if ((AS_LAST_POS_SET)) + { + } + float RND_DIR = Random(0, 359.99); + float RND_UD = Random(-200, 200); + AddVelocity(GetOwner(), /* TODO: $relpos */ $relpos(Vector3(0, RND_DIR, 0), Vector3(0, 500, RND_UD))); + } + AS_LAST_POS = MY_ORG; + AS_LAST_POS_SET = 1; + } + + void do_omnomnom() + { + IS_ACTIVE = 0; + EmitSound(GetOwner(), 1, "gabe_loop.wav", 0); + SetProp(GetOwner(), "renderamt", 0); + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, -20000)); + // TODO: hud.addimgicon CHOSEN_PLAYER gabe1 gabe1 15 20 75 60 9.0 + SendColoredMessage(CHOSEN_PLAYER, "OMG! Character gonna delete!"); + ScheduleDelayedEvent(10.1, "do_omnomnom2"); + } + + void do_omnomnom2() + { + SetGlobalVar("G_APRIL_FOOLS_MODE", 0); + CallExternal("players", "ext_gabe_musak", "stop"); + // TODO: hud.addimgicon CHOSEN_PLAYER gabe2 gabe2 15 20 75 60 10.0 + SendColoredMessage(CHOSEN_PLAYER, "OMG! APRIL FOOLS! (- The RKS Crew)"); + ScheduleDelayedEvent(1.0, "do_omnomnom3"); + } + + void do_omnomnom3() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/gabe_newell_cl.as b/scripts/angelscript/monsters/gabe_newell_cl.as new file mode 100644 index 00000000..a82aa6ef --- /dev/null +++ b/scripts/angelscript/monsters/gabe_newell_cl.as @@ -0,0 +1,42 @@ +#pragma context server + +namespace MS +{ + +class GabeNewellCl : CGameScript +{ + string FX_DURATION; + string FX_OWNER; + string SKEL_LIGHT_ID; + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + FX_DURATION("end_fx"); + SetCallback("render", "enable"); + int RND_R = RandomInt(32, 255); + int RND_G = RandomInt(32, 255); + int RND_B = RandomInt(32, 255); + Vector3 RND_COLOR = Vector3(RND_R, RND_G, RND_B); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), 256, RND_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + } + + void end_fx() + { + RemoveScript(); + } + + void game_prerender() + { + int RND_R = RandomInt(32, 255); + int RND_G = RandomInt(32, 255); + int RND_B = RandomInt(32, 255); + Vector3 RND_COLOR = Vector3(RND_R, RND_G, RND_B); + ClientEffect("light", SKEL_LIGHT_ID, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), 256, RND_COLOR, 1.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/gbat_hunter.as b/scripts/angelscript/monsters/gbat_hunter.as new file mode 100644 index 00000000..a4dce838 --- /dev/null +++ b/scripts/angelscript/monsters/gbat_hunter.as @@ -0,0 +1,265 @@ +#pragma context server + +#include "monsters/bat_base.as" + +namespace MS +{ + +class GbatHunter : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DROP; + string ANIM_IDLE_FLY; + string ANIM_IDLE_HANG; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string BAT_STATUS; + int BAT_SUMMONING; + int BAT_SUMMON_AMT; + int BAT_SUMMON_BLOCKED; + float BAT_SUMMON_CHANCE; + int BAT_SUMMON_DMG; + int BAT_SUMMON_HEIGHT; + int BAT_SUMMON_LIFETIME; + string BAT_SUMMON_NUM; + int BAT_SUMMON_RISING; + string BAT_SUMMON_SCRIPT; + string BAT_SUMMON_SND_RETREAT; + string BAT_SUMMON_SND_SUMMON; + int CAN_ATTACK; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int CAN_STTACK; + string CL_FLAP_SND; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string NPC_MOVE_TARGET; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_FLAP1; + string SOUND_FLAP2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + GbatHunter() + { + ANIM_RUN = "fly"; + ANIM_WALK = "fly"; + ANIM_ATTACK = "attack2"; + ANIM_IDLE_HANG = "idlehang"; + ANIM_IDLE_FLY = "idle"; + ANIM_DROP = "hangtofly"; + ANIM_DEATH = "die"; + MOVE_RANGE = 70; + ATTACK_DAMAGE = 15; + ATTACK_RANGE = 120; + ATTACK_HITRANGE = 180; + ATTACK_HITCHANCE = 0.85; + NPC_GIVE_EXP = 150; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "monsters/bat/pain1.wav"; + SOUND_PAIN2 = "monsters/bat/pain2.wav"; + SOUND_ATTACK1 = "monsters/skeleton/claw_miss1.wav"; + SOUND_ATTACK2 = "monsters/skeleton/claw_miss2.wav"; + SOUND_ATTACK3 = "monsters/orc/attack3.wav"; + SOUND_ALERT = "monsters/bat/alert.wav"; + SOUND_FLAP1 = "monsters/bat/flap_big1.wav"; + SOUND_FLAP2 = "monsters/bat/flap_big2.wav"; + SOUND_DEATH = "monsters/bat/death.wav"; + Precache("monsters/bat.mdl"); + BAT_SUMMON_SCRIPT = "monsters/bat_summon"; + BAT_SUMMON_AMT = 5; + BAT_SUMMON_LIFETIME = 15; + BAT_SUMMON_DMG = 4; + BAT_SUMMON_HEIGHT = 300; + BAT_SUMMON_CHANCE = 0.6; + BAT_SUMMON_SND_RETREAT = "monsters/bat/pain1.wav"; + BAT_SUMMON_SND_SUMMON = "monsters/bat/death.wav"; + Precache("monsters/bat_summon"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(3); + if ((IS_HUNTING)) + { + } + if (GetMonsterProperty("last_seen.distance") < 128) + { + } + if (!(BAT_SUMMONING)) + { + } + if (!(BAT_SUMMON_BLOCKED)) + { + } + if (RandomInt(0, 99) < BAT_SUMMON_CHANCE) + { + } + if ((GetEntityProperty(GetOwner(), "alive"))) + { + } + string L_TARGETPOS = GetEntityOrigin(GetOwner()); + L_TARGETPOS += /* TODO: $relvel */ $relvel(0, -128, 0); + SetRoam(false); + SetMoveDest(L_TARGETPOS); + BAT_SUMMONING = 1; + BAT_SUMMON_BLOCKED = 1; + CAN_ATTACK = 0; + NPC_MOVE_TARGET = �NONE�; + CAN_RETALIATE = 0; + CAN_HEAR = 0; + EmitSound(GetOwner(), CHAN_VOICE, BAT_SUMMON_SND_RETREAT, "game.sound.maxvol"); + ScheduleDelayedEvent(0.75, "bat_summon_flyup"); + } + + void bat_spawn() + { + SetName("Giant Bat"); + SetHealth(500); + SetWidth(50); + SetHeight(60); + SetHearingSensitivity(10); + SetModel("monsters/giant_bat.mdl"); + SetVolume(10); + SetSolid("none"); + CAN_STTACK = 0; + } + + void bat_drop_down() + { + PlayAnim("once", ANIM_DROP); + BAT_STATUS = BAT_DROPPING; + CAN_ATTACK = 0; + CAN_HUNT = 0; + EmitSound(GetOwner(), SOUND_ALERT); + } + + void frame_hangdone() + { + BAT_STATUS = BAT_FLYING; + CAN_ATTACK = 1; + CAN_HUNT = 1; + SetIdleAnim(ANIM_IDLE_FLY); + SetRoam(true); + } + + void frame_attack1() + { + attack_yell(); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void frame_attack2() + { + attack_yell(); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void attack_yell() + { + if (!(RandomInt(0, 1) == 0)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), CHAN_BODY, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void bat_summon_flyup() + { + string L_TARGETPOS = GetEntityOrigin(GetOwner()); + Vector3 L_RAY_UP = Vector3(0, 0, 0); + L_RAY_UP += BAT_SUMMON_HEIGHT; + L_RAY_UP += ")"; + L_TARGETPOS += L_RAY_UP; + BAT_SUMMON_RISING = 1; + SetMoveDest(L_TARGETPOS); + } + + void game_stopmoving() + { + if (!(BAT_SUMMON_RISING)) return; + BAT_SUMMON_RISING = 0; + ScheduleDelayedEvent(0.75, "bat_summon_all"); + } + + void bat_summon_all() + { + EmitSound(GetOwner(), CHAN_VOICE, BAT_SUMMON_SND_SUMMON, "game.sound.maxvol"); + PlayAnim("once", "attack2"); + BAT_SUMMON_NUM = BAT_SUMMON_AMT; + ScheduleDelayedEvent(0.5, "bat_summon_loop"); + ScheduleDelayedEvent(1, "bat_summon_done"); + } + + void bat_summon_loop() + { + if (!(BAT_SUMMON_NUM)) return; + BAT_SUMMON_NUM -= 1; + string L_TARGETPOS = GetEntityOrigin(GetOwner()); + int L_OFS_X = RandomInt(-100, 100); + int L_OFS_Y = RandomInt(-100, 100); + L_TARGETPOS += Vector3(L_OFS_X, L_OFS_Y, -64); + SpawnNPC(BAT_SUMMON_SCRIPT, L_TARGETPOS, ScriptMode::Legacy); // params: BAT_SUMMON_LIFETIME, BAT_SUMMON_DMG, HUNT_LASTTARGET + ScheduleDelayedEvent(0.001, "bat_summon_loop"); + } + + void bat_summon_done() + { + BAT_SUMMONING = 0; + BAT_SUMMON_RISING = 0; + CAN_ATTACK = 1; + NPC_MOVE_TARGET = "enemy"; + CAN_RETALIATE = 1; + CAN_HEAR = 1; + BAT_SUMMON_LIFETIME("bat_summon_reset"); + } + + void bat_summon_reset() + { + BAT_SUMMON_BLOCKED = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(FindEntityByName("spawner"), "makechest"); + } + + void cl_frame_flap() + { + SetVolume(10); + if (!(CL_FLAP_SND)) + { + EmitSound(GetOwner(), SOUND_FLAP1); + CL_FLAP_SND = 1; + } + else + { + EmitSound(GetOwner(), SOUND_FLAP2); + CL_FLAP_SND = 0; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/gbear_black_hpoly.as b/scripts/angelscript/monsters/gbear_black_hpoly.as new file mode 100644 index 00000000..b7b39db6 --- /dev/null +++ b/scripts/angelscript/monsters/gbear_black_hpoly.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/gbear_black_lpoly.as" + +namespace MS +{ + +class GbearBlackHpoly : CGameScript +{ + string MONSTER_MODEL; + + GbearBlackHpoly() + { + MONSTER_MODEL = "monsters/gbear_hipoly.mdl"; + } + +} + +} diff --git a/scripts/angelscript/monsters/gbear_black_lpoly.as b/scripts/angelscript/monsters/gbear_black_lpoly.as new file mode 100644 index 00000000..385612b6 --- /dev/null +++ b/scripts/angelscript/monsters/gbear_black_lpoly.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "monsters/gbear_polar.as" + +namespace MS +{ + +class GbearBlackLpoly : CGameScript +{ + string MONSTER_MODEL; + int NO_BREATH_ATTACK; + int NO_FROSTY_BREATH; + int NPC_BASE_EXP; + + GbearBlackLpoly() + { + NPC_BASE_EXP = 400; + MONSTER_MODEL = "monsters/gbear_lpoly.mdl"; + NO_BREATH_ATTACK = 1; + NO_FROSTY_BREATH = 1; + } + + void OnSpawn() override + { + SetName("Greater Blackbear"); + SetDamageResistance("cold", 0.5); + SetDamageResistance("fire", 0.5); + SetHealth(2500); + SetProp(GetOwner(), "skin", 1); + SetGravity(5); + } + +} + +} diff --git a/scripts/angelscript/monsters/gbear_brown_hpoly.as b/scripts/angelscript/monsters/gbear_brown_hpoly.as new file mode 100644 index 00000000..d7d5b4f7 --- /dev/null +++ b/scripts/angelscript/monsters/gbear_brown_hpoly.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/gbear_brown_lpoly.as" + +namespace MS +{ + +class GbearBrownHpoly : CGameScript +{ + string MONSTER_MODEL; + + GbearBrownHpoly() + { + MONSTER_MODEL = "monsters/gbear_hipoly.mdl"; + } + +} + +} diff --git a/scripts/angelscript/monsters/gbear_brown_lpoly.as b/scripts/angelscript/monsters/gbear_brown_lpoly.as new file mode 100644 index 00000000..71213953 --- /dev/null +++ b/scripts/angelscript/monsters/gbear_brown_lpoly.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "monsters/gbear_polar.as" + +namespace MS +{ + +class GbearBrownLpoly : CGameScript +{ + string MONSTER_MODEL; + int NO_BREATH_ATTACK; + int NO_FROSTY_BREATH; + int NPC_BASE_EXP; + + GbearBrownLpoly() + { + NPC_BASE_EXP = 350; + MONSTER_MODEL = "monsters/gbear_lpoly.mdl"; + NO_BREATH_ATTACK = 1; + NO_FROSTY_BREATH = 1; + } + + void OnSpawn() override + { + SetName("Greater Brownbear"); + SetDamageResistance("cold", 0.75); + SetDamageResistance("fire", 0.75); + SetHealth(2000); + SetProp(GetOwner(), "skin", 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/gbear_polar.as b/scripts/angelscript/monsters/gbear_polar.as new file mode 100644 index 00000000..edd49e4f --- /dev/null +++ b/scripts/angelscript/monsters/gbear_polar.as @@ -0,0 +1,603 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class GbearPolar : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + string ANIM_ATTACK3; + string ANIM_BREATH_LOOP; + string ANIM_BREATH_START; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_IDLE_NORM; + string ANIM_LOOK1; + string ANIM_LOOK2; + string ANIM_LUNGE1; + string ANIM_LUNGE2; + string ANIM_LUNGE3; + string ANIM_PUSHL; + string ANIM_PUSHR; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_SWIM; + string ANIM_WALK; + string ANIM_WALK_NORM; + string ANIM_WARCRY1; + string ANIM_WARCRY2; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_HITRANGE_NORM; + int ATTACK_HITRANGE_SWIM; + int ATTACK_RANGE; + int ATTACK_RANGE_LUNGE_MAX; + int ATTACK_RANGE_LUNGE_MIN; + int ATTACK_RANGE_NORM; + float BREATH_DURATION; + int BREATH_ON; + string BREATH_TARGS; + string BURST_START; + string BURST_TARGS; + string CLIENT_FX_ID; + int DID_WARCRY; + int DMG_BURST; + float DMG_CLAW; + float FREQ_BREATH; + float FREQ_FLINCH; + float FREQ_FX_REFRESH; + float FREQ_LUNGE; + float FREQ_STOMP; + float FREQ_SWIM_SOUND; + string MONSTER_MODEL; + int MOVE_RANGE; + float MSC_PUSH_RESIST; + string NEXT_BREATH; + string NEXT_BREATH_OFF_CHECK; + string NEXT_FLINCH; + string NEXT_LUNGE; + string NEXT_STOMP; + int NPC_GIVE_EXP; + string NPC_HALF_HEALTH; + int RUN_STEP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_DIVE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_PAIN4; + string SOUND_RUNSTEP1; + string SOUND_RUNSTEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWIM1; + string SOUND_SWIM2; + string SOUND_SWIM3; + string SOUND_SWIM4; + string SOUND_WARCRY; + string SWIMMING_MODE; + + GbearPolar() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "longdeath"; + ANIM_RUN_NORM = "run"; + ANIM_WALK_NORM = "walk"; + ANIM_IDLE_NORM = "idle"; + ANIM_ATTACK1 = "attack1"; + ANIM_ATTACK2 = "attack2"; + ANIM_ATTACK3 = "attack3"; + ANIM_LUNGE1 = "long_attack1"; + ANIM_LUNGE2 = "long_attack2"; + ANIM_LUNGE3 = "long_attack_throw"; + ANIM_BREATH_START = "breath_start"; + ANIM_BREATH_LOOP = "breath_loop"; + ANIM_WARCRY1 = "warcry"; + ANIM_WARCRY2 = "alert"; + ANIM_LOOK1 = "sniff_left"; + ANIM_LOOK2 = "sniff_right"; + ANIM_PUSHL = "attack_pushl"; + ANIM_PUSHR = "attack_pushr"; + ANIM_SWIM = "swim"; + ANIM_FLINCH = "flinch"; + SOUND_ATTACK1 = "monsters/bear/c_bear_atk1.wav"; + SOUND_ATTACK2 = "monsters/bear/c_bear_atk2.wav"; + SOUND_ATTACK3 = "monsters/bear/c_bear_atk3.wav"; + SOUND_PAIN1 = "monsters/bear/c_bear_hit1.wav"; + SOUND_PAIN2 = "monsters/bear/c_bear_hit2.wav"; + SOUND_PAIN3 = "monsters/bear/c_bear_bat1.wav"; + SOUND_PAIN4 = "monsters/bear/c_bear_bat2.wav"; + SOUND_DEATH = "monsters/bear/c_bear_dead.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_WARCRY = "monsters/bear/c_beardire_bat1.wav"; + SOUND_RUNSTEP1 = "monsters/bear/giantbearstep1.wav"; + SOUND_RUNSTEP2 = "monsters/bear/giantbearstep2.wav"; + SOUND_SWIM1 = "player/pl_wade1.wav"; + SOUND_SWIM2 = "player/pl_wade2.wav"; + SOUND_SWIM3 = "player/pl_wade3.wav"; + SOUND_SWIM4 = "player/pl_wade4.wav"; + SOUND_DIVE = "body/splash1.wav"; + MSC_PUSH_RESIST = 0.5; + NPC_GIVE_EXP = 500; + MOVE_RANGE = 150; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 200; + ATTACK_RANGE_NORM = 125; + ATTACK_HITRANGE_NORM = 150; + ATTACK_HITRANGE_SWIM = 300; + ATTACK_RANGE_LUNGE_MIN = 175; + ATTACK_RANGE_LUNGE_MAX = 250; + DMG_CLAW = Random(60, 100); + DMG_BURST = 200; + BREATH_DURATION = 4.0; + FREQ_LUNGE = 2.0; + FREQ_FLINCH = 20.0; + FREQ_STOMP = Random(30.0, 45.0); + FREQ_FX_REFRESH = 45.0; + FREQ_BREATH = Random(30.0, 45.0); + FREQ_SWIM_SOUND = 5.0; + MONSTER_MODEL = "monsters/bear_polar.mdl"; + } + + void OnSpawn() override + { + SetName("Greater Polar Bear"); + SetModel(MONSTER_MODEL); + SetWidth(96); + SetHeight(96); + SetRoam(true); + SetHearingSensitivity(6); + SetRace("wildanimal"); + SetHealth(3000); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 1.25); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + RUN_STEP = 0; + ScheduleDelayedEvent(2.0, "get_finals"); + } + + void get_finals() + { + NPC_HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + NPC_HALF_HEALTH *= 0.5; + if ((NO_FROSTY_BREATH)) return; + if ((NO_BREATH_ATTACK)) return; + refresh_cl_fx(); + } + + void npc_targetsighted() + { + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + int RND_WARCRY = RandomInt(1, 2); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + SetRoam(false); + if (RND_WARCRY == 1) + { + PlayAnim("critical", ANIM_WARCRY1); + } + if (RND_WARCRY == 2) + { + PlayAnim("critical", ANIM_WARCRY2); + } + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + } + + void cycle_down() + { + DID_WARCRY = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetGameTime() > NEXT_BREATH_OFF_CHECK) + { + if (!(NO_BREATH_ATTACK)) + { + } + NEXT_BREATH_OFF_CHECK = GetGameTime(); + NEXT_BREATH_OFF_CHECK += 10.0; + if (!(BREATH_ON)) + { + } + ClientEvent("update", "all", CLIENT_FX_ID, "breath_off"); + } + if ((IsInWater(GetOwner()))) + { + if (!(SWIMMING_MODE)) + { + } + EmitSound(GetOwner(), 2, SOUND_DIVE, 10); + SetGravity(0.75); + if (GetEntityRange(m_hAttackTarget) < 200) + { + SetGravity(0); + } + SWIMMING_MODE = 1; + ANIM_RUN = "swim"; + ANIM_WALK = "swim"; + ANIM_IDLE = "swim"; + SetMoveAnim("swim"); + SetIdleAnim("swim"); + ATTACK_HITRANGE = ATTACK_HITRANGE_SWIM; + } + else + { + if ((SWIMMING_MODE)) + { + } + SetGravity(1); + SWIMMING_MODE = 0; + ANIM_RUN = ANIM_RUN_NORM; + ANIM_WALK = ANIM_WALK_NORM; + ANIM_IDLE = ANIM_IDLE_NORM; + SetMoveAnim(ANIM_RUN_NORM); + SetIdleAnim(ANIM_IDLE_NORM); + ATTACK_HITRANGE = ATTACK_HITRANGE_NORM; + float TIME_PLUS5 = GetGameTime(); + TIME_PLUS5 += 5.0; + if (TIME_PLUS5 > NEXT_STOMP) + { + NEXT_STOMP = TIME_PLUS5; + NEXT_STOMP += Random(10.0, 15.0); + } + if (TIME_PLUS5 > NEXT_BREATH) + { + NEXT_BREATH = TIME_PLUS5; + NEXT_STOMP += Random(15.0, 20.0); + } + } + if (!(m_hAttackTarget != "unset")) return; + if ((SWIMMING_MODE)) + { + if (GetEntityProperty(m_hAttackTarget, "range2d") < 200) + { + SetGravity(0); + } + else + { + int FWD_BOOST = 100; + SetGravity(0.75); + } + if (GetGameTime() > NEXT_SWIM_SOUND) + { + NEXT_SWIM_SOUND = GetGameTime(); + NEXT_SWIM_SOUND += FREQ_SWIM_SOUND; + // PlayRandomSound from: SOUND_SWIM1, SOUND_SWIM2, SOUND_SWIM3, SOUND_SWIM4 + array sounds = {SOUND_SWIM1, SOUND_SWIM2, SOUND_SWIM3, SOUND_SWIM4}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + ATTACK_HITRANGE = ATTACK_HITRANGE_SWIM; + string MOVE_DEST_Z = (GetMonsterProperty("movedest.origin")).z; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + if (MOVE_DEST_Z > MY_Z) + { + if ((IsInWater(GetOwner()))) + { + } + string Z_DIFF = MOVE_DEST_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > 50) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, FWD_BOOST, 5)); + } + if (MOVE_DEST_Z < MY_Z) + { + string Z_DIFF = MY_Z; + Z_DIFF -= MOVE_DEST_Z; + if (Z_DIFF > 50) + { + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, FWD_BOOST, -50)); + } + SetAngles("face"); + } + if ((SWIMMING_MODE)) return; + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if (TARG_RANGE < ATTACK_RANGE_LUNGE_MAX) + { + if (TARG_RANGE > ATTACK_RANGE_LUNGE_MIN) + { + } + if (GetGameTime() > NEXT_LUNGE) + { + } + int RND_LUNGE = RandomInt(1, 3); + ATTACK_RANGE = ATTACK_RANGE_LUNGE_MAX; + ATTACK_HITRANGE = ATTACK_RANGE_LUNGE_MAX; + if (RND_LUNGE == 1) + { + ANIM_ATTACK = "long_attack1"; + } + if (RND_LUNGE == 2) + { + ANIM_ATTACK = "long_attack2"; + } + if (RND_LUNGE == 3) + { + ANIM_ATTACK = "long_attack_throw"; + } + } + if (GetGameTime() > NEXT_STOMP) + { + if (TARG_RANGE < ATTACK_RANGE_LUNGE_MIN) + { + } + ANIM_ATTACK = ANIM_WARCRY1; + } + if ((NO_BREATH_ATTACK)) return; + if (GetGameTime() > NEXT_BREATH) + { + if (TARG_RANGE < 600) + { + } + ANIM_ATTACK = "breath_start"; + } + } + + void ext_bear_swim() + { + if (m_hAttackTarget != "unset") + { + int GO_SWIM = 1; + } + if ((HUNTING_PLAYER)) + { + int GO_SWIM = 1; + } + if (!(GO_SWIM)) return; + SetMonsterClip(0); + } + + void ext_bear_unswim() + { + SetMonsterClip(1); + } + + void frame_attack() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW, 0.9, "slash"); + float RND_LR = Random(-100.0, 100.0); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(RND_LR, 110, 110)); + int RND_ATK = RandomInt(1, 3); + if (RND_ATK == 1) + { + ANIM_ATTACK = "attack1"; + } + if (RND_ATK == 2) + { + ANIM_ATTACK = "attack2"; + } + if (RND_ATK == 3) + { + ANIM_ATTACK = "attack3"; + } + if ((NO_FROSTY_BREATH)) return; + if (RandomInt(1, 3) == 1) + { + ClientEvent("update", "all", CLIENT_FX_ID, "quick_breath"); + } + } + + void frame_long_attack() + { + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_NORM; + ATTACK_HITRANGE = ATTACK_HITRANGE_NORM; + NEXT_LUNGE = GetGameTime(); + NEXT_LUNGE += FREQ_LUNGE; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(NO_FROSTY_BREATH)) + { + ClientEvent("update", "all", CLIENT_FX_ID, "quick_breath"); + } + DoDamage(m_hAttackTarget, ATTACK_RANGE_LUNGE_MAX, DMG_CLAW, 0.9, "slash"); + float RND_LR = Random(-200.0, 200.0); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(RND_LR, 300, 110)); + } + + void frame_long_attack_throw() + { + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_NORM; + ATTACK_HITRANGE = ATTACK_HITRANGE_NORM; + NEXT_LUNGE = GetGameTime(); + NEXT_LUNGE += FREQ_LUNGE; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(NO_FROSTY_BREATH)) + { + ClientEvent("update", "all", CLIENT_FX_ID, "quick_breath"); + } + DoDamage(m_hAttackTarget, ATTACK_RANGE_LUNGE_MAX, DMG_CLAW, 0.9, "slash"); + float RND_LR = Random(-200.0, 200.0); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(RND_LR, 1000, 200)); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetEntityHealth(GetOwner()) < NPC_HALF_HEALTH) + { + if (GetGameTime() > NEXT_FLINCH) + { + } + NEXT_FLINCH = GetGameTime(); + NEXT_FLINCH += FREQ_FLINCH; + PlayAnim("critical", ANIM_FLINCH); + int PAIN_SOUND = 1; + } + if (!(PAIN_SOUND)) + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3, SOUND_PAIN4, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3, SOUND_PAIN4, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3, SOUND_PAIN4 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3, SOUND_PAIN4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(NO_FROSTY_BREATH)) + { + } + ClientEvent("update", "all", CLIENT_FX_ID, "quick_breath"); + } + } + + void frame_warcry() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + if (!(NO_FROSTY_BREATH)) + { + ClientEvent("update", "all", CLIENT_FX_ID, "quick_breath"); + } + ANIM_ATTACK = "attack1"; + } + + void frame_land() + { + NEXT_STOMP = GetGameTime(); + NEXT_STOMP += FREQ_STOMP; + ANIM_ATTACK = "attack1"; + ScheduleDelayedEvent(1.0, "restore_roam"); + BURST_START = /* TODO: $relpos */ $relpos(0, 150, 0); + ClientEvent("new", "all", "effects/sfx_stun_burst", BURST_START, 256, 0); + BURST_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(BURST_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + burst_affect_targets(); + } + } + + void burst_affect_targets() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/debuff_stun", 8.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = BURST_START; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + XDoDamage(CUR_TARG, "direct", DMG_BURST, 1.0, GetOwner(), GetOwner(), "none", "blunt"); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 200))); + } + + void frame_alert() + { + ScheduleDelayedEvent(1.0, "restore_roam"); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + if ((NO_FROSTY_BREATH)) return; + ClientEvent("update", "all", CLIENT_FX_ID, "quick_breath"); + } + + void restore_roam() + { + SetRoam(true); + } + + void frame_run_step() + { + RUN_STEP += 1; + if (RUN_STEP == 1) + { + EmitSound(GetOwner(), 0, SOUND_RUNSTEP1, 5); + } + else + { + EmitSound(GetOwner(), 0, SOUND_RUNSTEP2, 5); + RUN_STEP = 0; + } + } + + void refresh_cl_fx() + { + if (!(IsEntityAlive(GetOwner()))) return; + if ((NO_FROSTY_BREATH)) return; + if ((NO_BREATH_ATTACK)) return; + ClientEvent("new", "all", "monsters/gbear_polar_cl", GetEntityIndex(GetOwner()), FREQ_FX_REFRESH, BREATH_ON); + CLIENT_FX_ID = "game.script.last_sent_id"; + FREQ_FX_REFRESH("refresh_cl_fx"); + } + + void frame_breath_go() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + do_breath(); + } + + void do_breath() + { + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + EmitSound(GetOwner(), 0, "magic/cold_breath.wav", 10); + SetRoam(false); + npcatk_suspend_ai(BREATH_DURATION); + npcatk_suspend_movement(ANIM_BREATH_LOOP, BREATH_DURATION); + ClientEvent("update", "all", CLIENT_FX_ID, "breath_on"); + BREATH_ON = 1; + breath_loop(); + BREATH_DURATION("breath_end"); + } + + void breath_loop() + { + if (!(BREATH_ON)) return; + ScheduleDelayedEvent(0.5, "breath_loop"); + BREATH_TARGS = FindEntitiesInSphere("enemy", 768); + if (!(BREATH_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(BREATH_TARGS, ";"); i++) + { + breath_affect_targets(); + } + } + + void breath_affect_targets() + { + string CUR_TARG = GetToken(BREATH_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", 6.0, GetEntityIndex(GetOwner()), 10.0); + if (!(GetEntityRange(CUR_TARG) < 200)) return; + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, 800, 110)); + } + + void breath_end() + { + ANIM_ATTACK = "attack1"; + ScheduleDelayedEvent(1.0, "restore_roam"); + BREATH_ON = 0; + ClientEvent("update", "all", CLIENT_FX_ID, "breath_off"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((NO_FROSTY_BREATH)) return; + ClientEvent("update", "all", CLIENT_FX_ID, "quick_breath_last"); + } + +} + +} diff --git a/scripts/angelscript/monsters/gbear_polar_cl.as b/scripts/angelscript/monsters/gbear_polar_cl.as new file mode 100644 index 00000000..1c00c7aa --- /dev/null +++ b/scripts/angelscript/monsters/gbear_polar_cl.as @@ -0,0 +1,120 @@ +#pragma context server + +namespace MS +{ + +class GbearPolarCl : CGameScript +{ + string BREATH_ANG; + string BREATH_ON; + string BREATH_VEL; + string CLOUD_ANG; + string FX_DURATION; + string FX_OWNER; + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + BREATH_ON = param3; + if ((BREATH_ON)) + { + breath_on(); + } + PARAM2("end_fx"); + } + + void end_fx() + { + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void quick_breath() + { + BREATH_VEL = /* TODO: $getcl */ $getcl(FX_OWNER, "velocity"); + BREATH_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + BREATH_VEL += /* TODO: $relpos */ $relpos(BREATH_ANG, Vector3(0, Random(5, 100), 0)); + ClientEffect("tempent", "sprite", "char_breath.spr", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "weather_snow_breath"); + } + + void quick_breath_last() + { + BREATH_ON = 0; + quick_breath(); + end_fx(); + } + + void breath_on() + { + BREATH_ON = 1; + breath_loop(); + } + + void breath_off() + { + BREATH_ON = 0; + } + + void breath_loop() + { + if (!(BREATH_ON)) return; + ScheduleDelayedEvent(0.2, "breath_loop"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + CLOUD_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + ClientEffect("tempent", "sprite", "rain_mist.spr", CLOUD_ORG, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", "rain_mist.spr", CLOUD_ORG, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", "rain_mist.spr", CLOUD_ORG, "setup_cloud", "update_cloud"); + } + + void weather_snow_breath() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 30); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.3, 0.75)); + ClientEffect("tempent", "set_current_prop", "gravity", -0.01); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", RandomInt(30, 100)); + ClientEffect("tempent", "set_current_prop", "angles", BREATH_ANG); + ClientEffect("tempent", "set_current_prop", "velocity", BREATH_VEL); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.01); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.01); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void update_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < 2) + { + CUR_SCALE += 0.05; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/ghoul_greater.as b/scripts/angelscript/monsters/ghoul_greater.as new file mode 100644 index 00000000..e18731da --- /dev/null +++ b/scripts/angelscript/monsters/ghoul_greater.as @@ -0,0 +1,301 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/base_jumper.as" + +namespace MS +{ + +class GhoulGreater : CGameScript +{ + int ALERTED_OTHERS; + string ANIM_ATTACK; + string ANIM_CLAW; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_LOOK; + string ANIM_NPC_JUMP; + string ANIM_RUN; + string ANIM_SLASH; + string ANIM_WALK; + float ATTACK2_ACCURACY; + float ATTACK_ACCURACY; + int ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_VOLUME; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int CAN_WANDER; + int DID_ALERT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int FLEE_CHANCE; + int FLEE_DISTANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + int I_AM_TURNABLE; + int MONSTER_WIDTH; + int MOVE_RAGE; + int NPC_GIVE_EXP; + string NPC_JUMPER; + int RETALIATE_CHANGETARGET_CHANCE; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACKHIT1; + string SOUND_ATTACKHIT2; + string SOUND_ATTACKHIT3; + string SOUND_DEATH; + string SOUND_HOLYPAIN1; + string SOUND_HOLYPAIN2; + string SOUND_HOLYPAIN3; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_NPC_JUMP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STEP3; + string SOUND_STEP4; + string SOUND_STRUCK; + string SOUND_TURNED1; + string SOUND_TURNED2; + string SOUND_TURNED3; + string SOUND_TURNED4; + string STRUCK_BY_HOLY; + float STUCK_CHECK_FREQUENCY; + int STUCK_COUNT; + + GhoulGreater() + { + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_DEATH = "diesimple"; + ANIM_ATTACK = "claw"; + ANIM_NPC_JUMP = "slash"; + ANIM_LOOK = "idle_look"; + ANIM_SLASH = "slash"; + ANIM_CLAW = "claw"; + if (StringToLower(GetMapName()) == "the_wall") + { + NPC_JUMPER = 1; + } + if (StringToLower(GetMapName()) == "walltest") + { + NPC_JUMPER = 1; + } + CAN_ATTACK = 1; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_HEAR = 1; + CAN_WANDER = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 80; + CAN_FLINCH = 0; + CAN_FLEE = 1; + FLEE_HEALTH = 25; + FLEE_CHANCE = 25; + FLEE_DISTANCE = 2048; + ATTACK_RANGE = 125; + ATTACK_HITRANGE = 200; + MOVE_RAGE = 55; + ATTACK_ACCURACY = 0.8; + ATTACK2_ACCURACY = 0.9; + ATTACK_DAMAGE = 80; + SOUND_IDLE1 = "zombie/zo_alert10.wav"; + SOUND_IDLE2 = "zombie/zo_alert20.wav"; + SOUND_IDLE3 = "zombie/zo_alert30.wav"; + SOUND_ALERT = "zombie/zo_attack1.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACKHIT1 = "zombie/claw_strike1.wav"; + SOUND_ATTACKHIT2 = "zombie/claw_strike2.wav"; + SOUND_ATTACKHIT3 = "zombie/claw_strike3.wav"; + SOUND_DEATH = "bullchicken/bc_die1.wav"; + SOUND_STRUCK = "debris/flesh2.wav"; + SOUND_PAIN1 = "zombie/zo_pain2.wav"; + SOUND_PAIN2 = "zombie/zo_idle3.wav"; + SOUND_TURNED1 = "ambience/the_horror1.wav"; + SOUND_TURNED2 = "ambience/the_horror2.wav"; + SOUND_TURNED3 = "ambience/the_horror3.wav"; + SOUND_TURNED4 = "ambience/the_horror4.wav"; + SOUND_HOLYPAIN1 = "agrunt/ag_pain2.wav"; + SOUND_HOLYPAIN2 = "agrunt/ag_pain3.wav"; + SOUND_HOLYPAIN3 = "agrunt/ag_pain4.wav"; + SOUND_STEP1 = "player/pl_dirt1.wav"; + SOUND_STEP2 = "player/pl_dirt2.wav"; + SOUND_STEP3 = "player/pl_dirt3.wav"; + SOUND_STEP4 = "player/pl_dirt4.wav"; + SOUND_NPC_JUMP = "zombie/zo_attack1.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 50; + DROP_GOLD_MAX = 75; + I_AM_TURNABLE = 0; + MONSTER_WIDTH = 32; + STUCK_CHECK_FREQUENCY = 1.1; + Precache(SOUND_DEATH); + Precache("monsters/ghoul_greater.mdl"); + 1_0(); + if (!(false)) + { + } + } + + void OnSpawn() override + { + SetName("Greater Ghoul"); + SetHealth(450); + SetWidth(32); + SetHeight(72); + SetRoam(true); + SetRace("undead"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("holy", 1.0); + SetDamageResistance("cold", 0.25); + SetDamageResistance("poison", 0.0); + SetHearingSensitivity(8); + SetModel("monsters/ghoul_greater.mdl"); + NPC_GIVE_EXP = 120; + ScheduleDelayedEvent(1.0, "look_around_ghoul"); + } + + void attack1() + { + STUCK_COUNT = 0; + ATTACK_VOLUME = 5; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, "slash"); + if (RandomInt(1, 20) == 1) + { + ANIM_ATTACK = ANIM_SLASH; + } + } + + void attack2() + { + STUCK_COUNT = 0; + ATTACK_VOLUME = 10; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK2_ACCURACY, "slash"); + ANIM_ATTACK = ANIM_CLAW; + if (!(GetEntityRange(m_hLastStruckByMe) <= ATTACK_HITRANGE)) return; + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/debuff_stun", RandomInt(2, 8), GetEntityIndex(GetOwner())); + } + + void game_dodamage() + { + if (!(param1)) + { + // PlayRandomSound from: ATTACK_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {ATTACK_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((param1)) + { + // PlayRandomSound from: ATTACK_VOLUME, SOUND_ATTACKHIT1, SOUND_ATTACKHIT2, SOUND_ATTACKHIT3 + array sounds = {ATTACK_VOLUME, SOUND_ATTACKHIT1, SOUND_ATTACKHIT2, SOUND_ATTACKHIT3}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((ALERTED_OTHERS)) return; + // svplaysound: emitsound ent_laststruck $get(ent_laststruck,origin) 10 10 combat + EmitSound(m_hLastStruck, GetEntityOrigin(m_hLastStruck), 10, 10, "combat"); + ALERTED_OTHERS = 1; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + string HURT_THRESHOLD = GetEntityMaxHealth(GetOwner()); + HURT_THRESHOLD *= 0.25; + if ((STRUCK_BY_HOLY)) + { + // PlayRandomSound from: SOUND_HOLYPAIN1, SOUND_HOLYPAIN2, SOUND_HOLYPAIN3 + array sounds = {SOUND_HOLYPAIN1, SOUND_HOLYPAIN2, SOUND_HOLYPAIN3}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + STRUCK_BY_HOLY = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (MY_HEALTH > HURT_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN1 + array sounds = {SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN1}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + if (MY_HEALTH <= HURT_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN2 + array sounds = {SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + } + + void run_step() + { + // PlayRandomSound from: SOUND_STEP1, SOUND_STEP2, SOUND_STEP3, SOUND_STEP4 + array sounds = {SOUND_STEP1, SOUND_STEP2, SOUND_STEP3, SOUND_STEP4}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void basenpcatk_target_lost() + { + look_around_ghoul(); + } + + void my_target_died() + { + DID_ALERT = 0; + look_around_ghoul(); + } + + void give_up_advanced() + { + look_around_ghoul(); + } + + void game_reached_dest() + { + if ((false)) return; + look_around_ghoul(); + } + + void npcatk_stopflee() + { + if ((false)) return; + look_around_ghoul(); + } + + void look_around_ghoul() + { + if ((false)) return; + PlayAnim("once", ANIM_LOOK); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + 1_0(); + } + + void OnTargetValidate(CBaseEntity@ target) + { + alert_ghoul(); + } + + void alert_ghoul() + { + if ((DID_ALERT)) return; + if (!(false)) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_ALERT, 10); + DID_ALERT = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/ghoul_lesser.as b/scripts/angelscript/monsters/ghoul_lesser.as new file mode 100644 index 00000000..bf4bd885 --- /dev/null +++ b/scripts/angelscript/monsters/ghoul_lesser.as @@ -0,0 +1,313 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_jumper.as" + +namespace MS +{ + +class GhoulLesser : CGameScript +{ + int ALERTED_OTHERS; + string ANIM_ATTACK; + string ANIM_CLAW; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_LOOK; + string ANIM_NPC_JUMP; + string ANIM_RUN; + string ANIM_SLASH; + string ANIM_WALK; + float ATTACK2_ACCURACY; + int ATTACK2_DAMAGE; + float ATTACK_ACCURACY; + int ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_VOLUME; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int CAN_WANDER; + int DID_ALERT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int FLEE_CHANCE; + int FLEE_DISTANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + float HURT_POINT; + int I_AM_TURNABLE; + int MONSTER_WIDTH; + int MOVE_RAGE; + string NO_STEP_ADJ; + int NPC_GIVE_EXP; + string NPC_JUMPER; + int RETALIATE_CHANGETARGET_CHANCE; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACKHIT1; + string SOUND_ATTACKHIT2; + string SOUND_ATTACKHIT3; + string SOUND_DEATH; + string SOUND_HOLYPAIN1; + string SOUND_HOLYPAIN2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_NPC_JUMP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STEP3; + string SOUND_STEP4; + string SOUND_STRUCK; + string SOUND_TURNED1; + string SOUND_TURNED2; + string SOUND_TURNED3; + string SOUND_TURNED4; + string STRUCK_BY_HOLY; + float STUCK_CHECK_FREQUENCY; + int STUCK_COUNT; + + GhoulLesser() + { + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_DEATH = "diesimple"; + ANIM_ATTACK = "claw"; + ANIM_NPC_JUMP = "slash"; + ANIM_LOOK = "idle_look"; + ANIM_SLASH = "slash"; + ANIM_CLAW = "claw"; + if (StringToLower(GetMapName()) == "the_wall") + { + NPC_JUMPER = 1; + } + if (StringToLower(GetMapName()) == "walltest") + { + NPC_JUMPER = 1; + } + CAN_ATTACK = 1; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_HEAR = 1; + CAN_WANDER = 1; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 80; + CAN_FLINCH = 0; + CAN_FLEE = 1; + FLEE_HEALTH = 25; + FLEE_CHANCE = 25; + FLEE_DISTANCE = 2048; + ATTACK_RANGE = 65; + ATTACK_HITRANGE = 100; + MOVE_RAGE = 65; + ATTACK_ACCURACY = 0.8; + ATTACK2_ACCURACY = 0.75; + ATTACK_DAMAGE = 30; + ATTACK2_DAMAGE = 80; + SOUND_IDLE1 = "zombie/zo_alert10.wav"; + SOUND_IDLE2 = "zombie/zo_alert20.wav"; + SOUND_IDLE3 = "zombie/zo_alert30.wav"; + SOUND_ALERT = "houndeye/he_alert1.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACKHIT1 = "zombie/claw_strike1.wav"; + SOUND_ATTACKHIT2 = "zombie/claw_strike2.wav"; + SOUND_ATTACKHIT3 = "zombie/claw_strike3.wav"; + SOUND_DEATH = "zombie/zo_attack2.wav"; + SOUND_STRUCK = "debris/flesh2.wav"; + SOUND_PAIN1 = "zombie/zo_pain2.wav"; + SOUND_PAIN2 = "houndeye/he_pain4.wav"; + HURT_POINT = 0.5; + SOUND_TURNED1 = "ambience/the_horror1.wav"; + SOUND_TURNED2 = "ambience/the_horror2.wav"; + SOUND_TURNED3 = "ambience/the_horror3.wav"; + SOUND_TURNED4 = "ambience/the_horror4.wav"; + SOUND_HOLYPAIN1 = "zombie/zo_attack1.wav"; + SOUND_HOLYPAIN2 = "zombie/zo_attack2.wav"; + SOUND_STEP1 = "player/pl_dirt1.wav"; + SOUND_STEP2 = "player/pl_dirt2.wav"; + SOUND_STEP3 = "player/pl_dirt3.wav"; + SOUND_STEP4 = "player/pl_dirt4.wav"; + SOUND_NPC_JUMP = "zombie/zo_attack1.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 5; + DROP_GOLD_MAX = 10; + I_AM_TURNABLE = 1; + MONSTER_WIDTH = 32; + STUCK_CHECK_FREQUENCY = 2.1; + Precache(SOUND_DEATH); + Precache("monsters/ghoul_lesser.mdl"); + if (!(DID_ALERT)) + { + } + 1_0(); + if (!(DID_ALERT)) + { + } + if (!(false)) + { + } + } + + void OnSpawn() override + { + string L_MAP_NAME = StringToLower(GetMapName()); + if ((L_MAP_NAME).findFirst("helena") >= 0) + { + NO_STEP_ADJ = 1; + } + SetName("Ghoul"); + SetHealth(200); + SetWidth(28); + SetHeight(48); + SetRoam(true); + SetRace("undead"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("holy", 4.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.25); + SetHearingSensitivity(8); + SetModel("monsters/ghoul_lesser.mdl"); + NPC_GIVE_EXP = 60; + ScheduleDelayedEvent(1.0, "look_around_ghoul"); + } + + void attack1() + { + STUCK_COUNT = 0; + ATTACK_VOLUME = 5; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, "slash"); + if (RandomInt(1, 20) == 1) + { + ANIM_ATTACK = ANIM_SLASH; + } + } + + void attack2() + { + STUCK_COUNT = 0; + ATTACK_VOLUME = 10; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK2_DAMAGE, ATTACK2_ACCURACY, "slash"); + ANIM_ATTACK = ANIM_CLAW; + } + + void game_dodamage() + { + if (!(param1)) + { + // PlayRandomSound from: ATTACK_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {ATTACK_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((param1)) + { + // PlayRandomSound from: ATTACK_VOLUME, SOUND_ATTACKHIT1, SOUND_ATTACKHIT2, SOUND_ATTACKHIT3 + array sounds = {ATTACK_VOLUME, SOUND_ATTACKHIT1, SOUND_ATTACKHIT2, SOUND_ATTACKHIT3}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((ALERTED_OTHERS)) return; + // svplaysound: emitsound ent_laststruck $get(ent_laststruck,origin) 10 10 combat + EmitSound(m_hLastStruck, GetEntityOrigin(m_hLastStruck), 10, 10, "combat"); + ALERTED_OTHERS = 1; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + string HURT_THRESHOLD = GetEntityMaxHealth(GetOwner()); + HURT_THRESHOLD *= HURT_POINT; + if ((STRUCK_BY_HOLY)) + { + // PlayRandomSound from: SOUND_HOLYPAIN1, SOUND_HOLYPAIN2 + array sounds = {SOUND_HOLYPAIN1, SOUND_HOLYPAIN2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + STRUCK_BY_HOLY = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (MY_HEALTH > HURT_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN1 + array sounds = {SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN1}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + if (MY_HEALTH <= HURT_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN2 + array sounds = {SOUND_STRUCK, SOUND_STRUCK, SOUND_PAIN2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + } + + void run_step() + { + // PlayRandomSound from: SOUND_STEP1, SOUND_STEP2, SOUND_STEP3, SOUND_STEP4 + array sounds = {SOUND_STEP1, SOUND_STEP2, SOUND_STEP3, SOUND_STEP4}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void basenpcatk_target_lost() + { + look_around_ghoul(); + } + + void my_target_died() + { + DID_ALERT = 0; + look_around_ghoul(); + } + + void give_up_advanced() + { + look_around_ghoul(); + } + + void game_reached_dest() + { + if ((false)) return; + look_around_ghoul(); + } + + void npcatk_stopflee() + { + if ((false)) return; + look_around_ghoul(); + } + + void look_around_ghoul() + { + if ((false)) return; + PlayAnim("once", ANIM_LOOK); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + 1_0(); + } + + void OnTargetValidate(CBaseEntity@ target) + { + alert_ghoul(); + } + + void alert_ghoul() + { + if ((DID_ALERT)) return; + if (!(false)) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_ALERT, 10); + DID_ALERT = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/giant_fire.as b/scripts/angelscript/monsters/giant_fire.as new file mode 100644 index 00000000..3e852063 --- /dev/null +++ b/scripts/angelscript/monsters/giant_fire.as @@ -0,0 +1,550 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_patrol_radius.as" + +namespace MS +{ + +class GiantFire : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_FAR; + string ANIM_ATTACK_NEAR; + string ANIM_ATTACK_NORM; + string ANIM_ATTACK_STOMP; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_IDLE_AGRO; + string ANIM_IDLE_NORM; + string ANIM_RUN; + string ANIM_WALK; + string ANIM_WARCRY; + int ATK_RAD; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BPATROL_ACTIVE; + int BPATROL_MOVEPROX; + string BPATROL_RAD; + string CUSTOM_ANIM_FLINCH; + int DID_INTRO; + int DMG_DOT; + int DMG_DOT2; + int DMG_STOMP; + int DMG_SWING; + string DOING_REACH_SWING; + int DOING_STOMP; + float FREQ_REACH_SWING; + float FREQ_STOMP; + string HALF_HP; + int MOVE_RANGE; + int NERF_PUSH; + string NEXT_CL_LIGHT; + string NEXT_CUSTOM_FLINCH; + string NEXT_RAGE; + string NEXT_REACH_SWING; + string NEXT_STOMP; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + int NPC_NO_VADJ; + int RANGE_FAR; + int RANGE_MAX; + int RANGE_NEAR; + int RANGE_NORM; + int RUN_STEP_COUNT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STOMP; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWING; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + string STOMP_POINT; + string WEAPON_TYPE; + + GiantFire() + { + ANIM_WALK = "cwalk"; + ANIM_IDLE = "creadyr_idle1"; + ANIM_RUN = "crun"; + ANIM_ATTACK = "ca1slashl"; + ANIM_DEATH = "ckdbck_death_p1"; + ANIM_IDLE_AGRO = "creadyl_idle2"; + ANIM_IDLE_NORM = "creadyr_idle1"; + ANIM_WARCRY = "ctaunt_alert"; + ANIM_ATTACK_NORM = "ca1slashl"; + ANIM_ATTACK_NEAR = "ccloseh_attack"; + ANIM_ATTACK_FAR = "creach"; + ANIM_ATTACK_STOMP = "cclosel_stomp"; + CUSTOM_ANIM_FLINCH = "cdamagel_flinch1"; + ATTACK_MOVERANGE = 80; + MOVE_RANGE = 80; + BPATROL_MOVEPROX = 90; + NPC_GIVE_EXP = 4000; + FREQ_STOMP = Random(10.0, 15.0); + FREQ_REACH_SWING = Random(2.0, 5.0); + RANGE_NEAR = 80; + RANGE_NORM = 100; + RANGE_FAR = 160; + RANGE_MAX = 245; + ATK_RAD = 196; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 320; + NPC_MUST_SEE_TARGET = 0; + NPC_NO_VADJ = 1; + DMG_SWING = 200; + DMG_STOMP = 300; + DMG_DOT = 50; + DMG_DOT2 = 150; + SOUND_WARCRY1 = "monsters/earth/c_elemerth_bat1.wav"; + SOUND_WARCRY2 = "monsters/earth/c_elemerth_bat2.wav"; + SOUND_ATTACK1 = "monsters/earth/c_elemerth_atk1.wav"; + SOUND_ATTACK2 = "monsters/earth/c_elemerth_atk2.wav"; + SOUND_ATTACK3 = "monsters/earth/c_elemerth_atk3.wav"; + SOUND_SWING = "weapons/swinghuge.wav"; + SOUND_STOMP = "monsters/earth/c_elemerth_slct.wav"; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + SOUND_PAIN1 = "monsters/earth/c_elemerth_hit1.wav"; + SOUND_PAIN2 = "monsters/earth/c_elemerth_hit2.wav"; + SOUND_DEATH = "monsters/earth/c_elemerth_dead.wav"; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Fire Giant Construct"); + SetModel("monsters/giant_fire.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHeight(256); + SetWidth(125); + SetHearingSensitivity(4); + PlayAnim("critical", ANIM_IDLE); + if (!(true)) return; + SetHealth(10000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("holy", 1.0); + SetRace("demon"); + RUN_STEP_COUNT = 0; + const int MY_HEIGHT = 256; + SetRoam(true); + ScheduleDelayedEvent(0.5, "pick_weapon"); + ScheduleDelayedEvent(2.0, "npc_finalize"); + } + + void pick_weapon() + { + if (WEAPON_TYPE == "WEAPON_TYPE") + { + WEAPON_TYPE = RandomInt(0, 2); + SetModelBody(1, WEAPON_TYPE); + } + } + + void set_weapon_dblud() + { + WEAPON_TYPE = 0; + SetModelBody(1, WEAPON_TYPE); + } + + void set_weapon_earthbreak() + { + WEAPON_TYPE = 1; + SetModelBody(1, WEAPON_TYPE); + } + + void set_weapon_firebreak() + { + WEAPON_TYPE = 2; + SetModelBody(1, WEAPON_TYPE); + } + + void set_weapon_shockbreak() + { + WEAPON_TYPE = 3; + SetModelBody(1, WEAPON_TYPE); + } + + void npc_finalize() + { + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + } + + void npc_targetsighted() + { + if ((DID_INTRO)) + { + if (GetGameTime() > NEXT_RAGE) + { + } + SetMoveDest(m_hAttackTarget); + npcatk_suspend_ai(1.0); + PlayAnim("critical", ANIM_WARCRY); + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_RAGE = GetGameTime(); + NEXT_RAGE += Random(120.0, 240.0); + } + if ((DID_INTRO)) return; + SetMoveDest(m_hAttackTarget); + npcatk_suspend_ai(1.0); + PlayAnim("critical", ANIM_WARCRY); + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_RAGE = GetGameTime(); + NEXT_RAGE += Random(120.0, 240.0); + DID_INTRO = 1; + NEXT_STOMP = GetGameTime(); + NEXT_STOMP += FREQ_STOMP; + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 128, 0), 128, 30.0); + } + + void npcatk_clear_targets() + { + NEXT_RAGE = GetGameTime(); + NEXT_RAGE += Random(20.0, 30.0); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (m_hAttackTarget == "unset") + { + SetIdleAnim(ANIM_IDLE_NORM); + } + if (!(m_hAttackTarget != "unset")) return; + SetIdleAnim(ANIM_IDLE_AGRO); + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if (GetGameTime() > NEXT_CL_LIGHT) + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 128, 0), 128, 30.0); + NEXT_CL_LIGHT = GetGameTime(); + NEXT_CL_LIGHT += 30.0; + } + if (GetGameTime() > NEXT_STOMP) + { + if (TARG_RANGE <= RANGE_NORM) + { + ANIM_ATTACK = ANIM_ATTACK_STOMP; + ATTACK_RANGE = RANGE_NORM; + ATTACK_HITRANGE = RANGE_NORM; + DOING_STOMP = 1; + } + } + if (TARG_RANGE > RANGE_FAR) + { + if (TARG_RANGE <= RANGE_MAX) + { + } + if (GetGameTime() > NEXT_REACH_SWING) + { + } + ANIM_ATTACK = ANIM_ATTACK_FAR; + ATTACK_RANGE = RANGE_FAR; + ATTACK_HITRANGE = RANGE_FAR; + DOING_REACH_SWING = 1; + } + if (TARG_RANGE > RANGE_NEAR) + { + if (!(DOING_REACH_SWING)) + { + } + if (!(DOING_STOMP)) + { + } + ANIM_ATTACK = ANIM_ATTACK_NORM; + ATTACK_RANGE = RANGE_NORM; + ATTACK_HITRANGE = RANGE_NORM; + } + if (TARG_RANGE <= RANGE_NEAR) + { + if (!(DOING_REACH_SWING)) + { + } + if (!(DOING_STOMP)) + { + } + ANIM_ATTACK = ANIM_ATTACK_NEAR; + ATTACK_RANGE = RANGE_NEAR; + ATTACK_HITRANGE = RANGE_NEAR; + } + ATTACK_HITRANGE += MY_HEIGHT; + } + + void frame_walk_step() + { + frame_run_step(); + } + + void frame_run_step() + { + RUN_STEP_COUNT += 1; + if (RUN_STEP_COUNT == 1) + { + EmitSound(GetOwner(), 0, "monsters/troll/step1.wav", 10); + } + if (RUN_STEP_COUNT == 2) + { + EmitSound(GetOwner(), 0, "monsters/troll/step2.wav", 10); + RUN_STEP_COUNT = 0; + } + } + + void set_patrol() + { + BPATROL_RAD = param1; + BPATROL_ACTIVE = 1; + } + + void frame_melee_strike() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + EmitSound(GetOwner(), 2, SOUND_SWING, 10); + string IMPACT_POINT = /* TODO: $relpos */ $relpos(0, RANGE_NORM, 32); + IMPACT_POINT = "z"; + IMPACT_POINT += "z"; + string L_DMG_SWING = DMG_SWING; + if (WEAPON_TYPE == 1) + { + L_DMG_SWING *= 1.5; + } + XDoDamage(IMPACT_POINT, ATK_RAD, L_DMG_SWING, 0.1, GetOwner(), GetOwner(), "none", "dark", "dmgevent:normswing"); + } + + void normswing_dodamage() + { + if (!(param1)) return; + float RND_LR = Random(-50.0, -10.0); + float RND_FB = Random(0.0, 100.0); + string PUSH_VEL = /* TODO: $relvel */ $relvel(RND_LR, RND_FB, 10); + if (WEAPON_TYPE == 0) + { + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_DOT); + } + if (WEAPON_TYPE == 2) + { + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_DOT2); + } + if (WEAPON_TYPE == 3) + { + ApplyEffect(param2, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), DMG_DOT2); + } + } + + void frame_melee_strike2() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + EmitSound(GetOwner(), 2, SOUND_SWING, 10); + string IMPACT_POINT = /* TODO: $relpos */ $relpos(0, RANGE_SHORT, 32); + IMPACT_POINT = "z"; + IMPACT_POINT += "z"; + string L_DMG_SWING = DMG_SWING; + if (WEAPON_TYPE == 1) + { + L_DMG_SWING *= 1.5; + } + XDoDamage(IMPACT_POINT, ATK_RAD, L_DMG_SWING, 0.1, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:closeswing"); + } + + void closeswing_dodamage() + { + if (!(param1)) return; + float RND_LR = Random(-50.0, 50.0); + float RND_FB = Random(0.0, 50.0); + string PUSH_VEL = /* TODO: $relvel */ $relvel(RND_LR, RND_FB, 10); + AddVelocity(param2, PUSH_VEL); + if (WEAPON_TYPE == 0) + { + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_DOT); + } + if (WEAPON_TYPE == 2) + { + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_DOT2); + } + if (WEAPON_TYPE == 3) + { + ApplyEffect(param2, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), DMG_DOT2); + } + } + + void frame_stomp() + { + EmitSound(GetOwner(), 0, SOUND_STOMP, 10); + STOMP_POINT = /* TODO: $relpos */ $relpos(0, RANGE_NORM, 32); + XDoDamage(STOMP_POINT, 256, DMG_STOMP, 0.2, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:stomp"); + STOMP_POINT = "z"; + if (WEAPON_TYPE == 0) + { + ClientEvent("new", "all", "effects/sfx_fire_burst", STOMP_POINT, 256, 0, Vector3(255, 0, 0)); + } + if (WEAPON_TYPE == 1) + { + ClientEvent("new", "all", "effects/sfx_stun_burst", STOMP_POINT, 256, 0, 0); + } + if (WEAPON_TYPE == 2) + { + ClientEvent("new", "all", "effects/sfx_fire_burst", STOMP_POINT, 256, 1, Vector3(255, 128, 0)); + } + if (WEAPON_TYPE == 3) + { + ClientEvent("new", "all", "effects/sfx_shock_burst", STOMP_POINT, 256, 1, Vector3(255, 255, 0)); + } + NEXT_STOMP = GetGameTime(); + NEXT_STOMP += FREQ_STOMP; + ANIM_ATTACK = ANIM_ATTACK_NORM; + ATTACK_RANGE = RANGE_NORM; + ATTACK_HITRANGE = RANGE_NORM; + DOING_STOMP = 0; + } + + void stomp_dodamage() + { + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(IsOnGround(param2))) + { + } + string EXIT_SUB = ""; + } + if ((EXIT_SUB)) return; + if (WEAPON_TYPE != 1) + { + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + else + { + ApplyEffect(param2, "effects/debuff_stun", 10.0, GetEntityIndex(GetOwner())); + } + if (WEAPON_TYPE == 0) + { + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_DOT); + } + if (WEAPON_TYPE == 2) + { + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_DOT2); + } + if (WEAPON_TYPE == 3) + { + ApplyEffect(param2, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), DMG_DOT2); + } + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = STOMP_POINT; + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + if ((NERF_PUSH)) + { + int VEL_FB = 300; + } + else + { + int VEL_FB = 500; + } + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, VEL_FB, 110))); + } + + void frame_reach_attack() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + EmitSound(GetOwner(), 2, SOUND_SWING, 10); + string IMPACT_POINT = /* TODO: $relpos */ $relpos(0, RANGE_FAR, 32); + IMPACT_POINT = "z"; + IMPACT_POINT += "z"; + XDoDamage(IMPACT_POINT, ATK_RAD, DMG_SWING, 0.1, GetOwner(), GetOwner(), "none", "dark", "dmgevent:reachswing"); + string L_IMPACT_POINT = IMPACT_POINT; + L_IMPACT_POINT = "z"; + if (WEAPON_TYPE == 0) + { + ClientEvent("new", "all", "effects/sfx_fire_burst", L_IMPACT_POINT, ATK_RAD, 0, Vector3(255, 0, 0)); + } + if (WEAPON_TYPE == 1) + { + ClientEvent("new", "all", "effects/sfx_stun_burst", L_IMPACT_POINT, ATK_RAD, 0, 0); + } + if (WEAPON_TYPE == 2) + { + ClientEvent("new", "all", "effects/sfx_fire_burst", L_IMPACT_POINT, ATK_RAD, 1, Vector3(255, 128, 0)); + } + if (WEAPON_TYPE == 3) + { + ClientEvent("new", "all", "effects/sfx_shock_burst", L_IMPACT_POINT, ATK_RAD, 1, Vector3(255, 255, 0)); + } + NEXT_REACH_SWING = GetGameTime(); + NEXT_REACH_SWING += FREQ_REACH_SWING; + DOING_REACH_SWING = 0; + ANIM_ATTACK = ANIM_ATTACK_NORM; + ATTACK_RANGE = RANGE_NORM; + ATTACK_HITRANGE = RANGE_NORM; + } + + void reachswing_dodamage() + { + if (!(param1)) return; + float RND_FB = Random(0.0, -150.0); + string PUSH_VEL = /* TODO: $relvel */ $relvel(0, RND_FB, 110); + AddVelocity(param2, PUSH_VEL); + if (WEAPON_TYPE == 0) + { + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_DOT); + } + if (WEAPON_TYPE == 1) + { + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + if (WEAPON_TYPE == 2) + { + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DMG_DOT2); + } + if (WEAPON_TYPE == 3) + { + ApplyEffect(param2, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), DMG_DOT2); + } + } + + void OnDamage(int damage) override + { + if ((param3).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(GetEntityHealth(GetOwner()) < HALF_HEALTH)) return; + if (!(GetGameTime() > NEXT_CUSTOM_FLINCH)) return; + PlayAnim("critical", ANIM_CUSTOM_FLINCH); + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_CUSTOM_FLINCH = GetGameTime(); + NEXT_CUSTOM_FLINCH += Random(20.0, 30.0); + } + + void set_nerf_push() + { + NERF_PUSH = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/giant_frost.as b/scripts/angelscript/monsters/giant_frost.as new file mode 100644 index 00000000..81e96c74 --- /dev/null +++ b/scripts/angelscript/monsters/giant_frost.as @@ -0,0 +1,388 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_patrol_radius.as" + +namespace MS +{ + +class GiantFrost : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_FAR; + string ANIM_ATTACK_NEAR; + string ANIM_ATTACK_NORM; + string ANIM_ATTACK_STOMP; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_IDLE_AGRO; + string ANIM_IDLE_NORM; + string ANIM_RUN; + string ANIM_WALK; + string ANIM_WARCRY; + int ATK_RAD; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BPATROL_ACTIVE; + int BPATROL_MOVEPROX; + string BPATROL_RAD; + string CUSTOM_ANIM_FLINCH; + int DID_INTRO; + int DMG_STOMP; + int DMG_SWING; + string DOING_REACH_SWING; + int DOING_STOMP; + float FREQ_REACH_SWING; + float FREQ_STOMP; + string HALF_HP; + int MOVE_RANGE; + string NEXT_CUSTOM_FLINCH; + string NEXT_RAGE; + string NEXT_REACH_SWING; + string NEXT_STOMP; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + int NPC_NO_VADJ; + int RANGE_FAR; + int RANGE_MAX; + int RANGE_NEAR; + int RANGE_NORM; + int RUN_STEP_COUNT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STOMP; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWING; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + string STOMP_POINT; + + GiantFrost() + { + ANIM_WALK = "cwalk"; + ANIM_IDLE = "creadyr_idle1"; + ANIM_RUN = "crun"; + ANIM_ATTACK = "ca1slashl"; + ANIM_DEATH = "ckdbck_death_p1"; + ANIM_IDLE_AGRO = "creadyl_idle2"; + ANIM_IDLE_NORM = "creadyr_idle1"; + ANIM_WARCRY = "ctaunt_alert"; + ANIM_ATTACK_NORM = "ca1slashl"; + ANIM_ATTACK_NEAR = "ccloseh_attack"; + ANIM_ATTACK_FAR = "creach"; + ANIM_ATTACK_STOMP = "cclosel_stomp"; + CUSTOM_ANIM_FLINCH = "cdamagel_flinch1"; + ATTACK_MOVERANGE = 80; + MOVE_RANGE = 80; + BPATROL_MOVEPROX = 90; + NPC_GIVE_EXP = 1500; + FREQ_STOMP = Random(10.0, 15.0); + FREQ_REACH_SWING = Random(2.0, 5.0); + RANGE_NEAR = 80; + RANGE_NORM = 100; + RANGE_FAR = 160; + RANGE_MAX = 245; + ATK_RAD = 128; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 320; + NPC_MUST_SEE_TARGET = 0; + NPC_NO_VADJ = 1; + DMG_SWING = 100; + DMG_STOMP = 200; + SOUND_WARCRY1 = "monsters/earth/c_elemerth_bat1.wav"; + SOUND_WARCRY2 = "monsters/earth/c_elemerth_bat2.wav"; + SOUND_ATTACK1 = "monsters/earth/c_elemerth_atk1.wav"; + SOUND_ATTACK2 = "monsters/earth/c_elemerth_atk2.wav"; + SOUND_ATTACK3 = "monsters/earth/c_elemerth_atk3.wav"; + SOUND_SWING = "weapons/swinghuge.wav"; + SOUND_STOMP = "monsters/earth/c_elemerth_slct.wav"; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + SOUND_PAIN1 = "monsters/earth/c_elemerth_hit1.wav"; + SOUND_PAIN2 = "monsters/earth/c_elemerth_hit2.wav"; + SOUND_DEATH = "monsters/earth/c_elemerth_dead.wav"; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Frost Giant Construct"); + SetModel("monsters/giant_frost.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHeight(256); + SetWidth(64); + SetHearingSensitivity(4); + PlayAnim("critical", ANIM_IDLE); + if (!(true)) return; + SetHealth(5000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 1.5); + SetDamageResistance("cold", 0.0); + SetDamageResistance("holy", 1.0); + SetRace("demon"); + RUN_STEP_COUNT = 0; + const int MY_HEIGHT = 256; + SetRoam(true); + ScheduleDelayedEvent(2.0, "npc_finalize"); + } + + void npc_finalize() + { + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + } + + void npc_targetsighted() + { + if ((DID_INTRO)) + { + if (GetGameTime() > NEXT_RAGE) + { + } + SetMoveDest(m_hAttackTarget); + npcatk_suspend_ai(1.0); + PlayAnim("critical", ANIM_WARCRY); + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_RAGE = GetGameTime(); + NEXT_RAGE += Random(120.0, 240.0); + } + if ((DID_INTRO)) return; + SetMoveDest(m_hAttackTarget); + npcatk_suspend_ai(1.0); + PlayAnim("critical", ANIM_WARCRY); + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_RAGE = GetGameTime(); + NEXT_RAGE += Random(120.0, 240.0); + DID_INTRO = 1; + NEXT_STOMP = GetGameTime(); + NEXT_STOMP += FREQ_STOMP; + } + + void npcatk_clear_targets() + { + NEXT_RAGE = GetGameTime(); + NEXT_RAGE += Random(20.0, 30.0); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (m_hAttackTarget == "unset") + { + SetIdleAnim(ANIM_IDLE_NORM); + } + if (!(m_hAttackTarget != "unset")) return; + SetIdleAnim(ANIM_IDLE_AGRO); + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if (GetGameTime() > NEXT_STOMP) + { + if (TARG_RANGE <= RANGE_NORM) + { + ANIM_ATTACK = ANIM_ATTACK_STOMP; + ATTACK_RANGE = RANGE_NORM; + ATTACK_HITRANGE = RANGE_NORM; + DOING_STOMP = 1; + } + } + if (TARG_RANGE > RANGE_FAR) + { + if (TARG_RANGE <= RANGE_MAX) + { + } + if (GetGameTime() > NEXT_REACH_SWING) + { + } + ANIM_ATTACK = ANIM_ATTACK_FAR; + ATTACK_RANGE = RANGE_FAR; + ATTACK_HITRANGE = RANGE_FAR; + DOING_REACH_SWING = 1; + } + if (TARG_RANGE > RANGE_NEAR) + { + if (!(DOING_REACH_SWING)) + { + } + if (!(DOING_STOMP)) + { + } + ANIM_ATTACK = ANIM_ATTACK_NORM; + ATTACK_RANGE = RANGE_NORM; + ATTACK_HITRANGE = RANGE_NORM; + } + if (TARG_RANGE <= RANGE_NEAR) + { + if (!(DOING_REACH_SWING)) + { + } + if (!(DOING_STOMP)) + { + } + ANIM_ATTACK = ANIM_ATTACK_NEAR; + ATTACK_RANGE = RANGE_NEAR; + ATTACK_HITRANGE = RANGE_NEAR; + } + ATTACK_HITRANGE += MY_HEIGHT; + } + + void frame_walk_step() + { + frame_run_step(); + } + + void frame_run_step() + { + RUN_STEP_COUNT += 1; + if (RUN_STEP_COUNT == 1) + { + EmitSound(GetOwner(), 0, "monsters/troll/step1.wav", 10); + } + if (RUN_STEP_COUNT == 2) + { + EmitSound(GetOwner(), 0, "monsters/troll/step2.wav", 10); + RUN_STEP_COUNT = 0; + } + } + + void set_patrol() + { + BPATROL_RAD = param1; + BPATROL_ACTIVE = 1; + } + + void frame_melee_strike() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + EmitSound(GetOwner(), 2, SOUND_SWING, 10); + string IMPACT_POINT = /* TODO: $relpos */ $relpos(0, RANGE_NORM, 32); + IMPACT_POINT = "z"; + IMPACT_POINT += "z"; + XDoDamage(IMPACT_POINT, ATK_RAD, DMG_SWING, 0.1, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:normswing"); + } + + void normswing_dodamage() + { + if (!(param1)) return; + float RND_LR = Random(-50.0, -10.0); + float RND_FB = Random(0.0, 100.0); + string PUSH_VEL = /* TODO: $relvel */ $relvel(RND_LR, RND_FB, 10); + AddVelocity(param2, PUSH_VEL); + } + + void frame_melee_strike2() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + EmitSound(GetOwner(), 2, SOUND_SWING, 10); + string IMPACT_POINT = /* TODO: $relpos */ $relpos(0, RANGE_SHORT, 32); + IMPACT_POINT = "z"; + IMPACT_POINT += "z"; + XDoDamage(IMPACT_POINT, ATK_RAD, DMG_SWING, 0.1, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:closeswing"); + } + + void closeswing_dodamage() + { + if (!(param1)) return; + float RND_LR = Random(-50.0, 50.0); + float RND_FB = Random(0.0, 50.0); + string PUSH_VEL = /* TODO: $relvel */ $relvel(RND_LR, RND_FB, 10); + AddVelocity(param2, PUSH_VEL); + } + + void frame_stomp() + { + EmitSound(GetOwner(), 0, SOUND_STOMP, 10); + STOMP_POINT = /* TODO: $relpos */ $relpos(0, RANGE_NORM, 32); + XDoDamage(STOMP_POINT, 256, DMG_STOMP, 0.2, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:stomp"); + STOMP_POINT = "z"; + ClientEvent("new", "all", "effects/sfx_stun_burst", STOMP_POINT, 256, 0, 0); + NEXT_STOMP = GetGameTime(); + NEXT_STOMP += FREQ_STOMP; + ANIM_ATTACK = ANIM_ATTACK_NORM; + ATTACK_RANGE = RANGE_NORM; + ATTACK_HITRANGE = RANGE_NORM; + DOING_STOMP = 0; + } + + void stomp_dodamage() + { + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(IsOnGround(param2))) + { + } + string EXIT_SUB = ""; + } + if ((EXIT_SUB)) return; + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = STOMP_POINT; + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 500, 110))); + } + + void frame_reach_attack() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + EmitSound(GetOwner(), 2, SOUND_SWING, 10); + string IMPACT_POINT = /* TODO: $relpos */ $relpos(0, RANGE_FAR, 32); + IMPACT_POINT = "z"; + IMPACT_POINT += "z"; + XDoDamage(IMPACT_POINT, ATK_RAD, DMG_SWING, 0.1, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:reachswing"); + NEXT_REACH_SWING = GetGameTime(); + NEXT_REACH_SWING += FREQ_REACH_SWING; + DOING_REACH_SWING = 0; + ANIM_ATTACK = ANIM_ATTACK_NORM; + ATTACK_RANGE = RANGE_NORM; + ATTACK_HITRANGE = RANGE_NORM; + } + + void reachswing_dodamage() + { + if (!(param1)) return; + float RND_FB = Random(0.0, -150.0); + string PUSH_VEL = /* TODO: $relvel */ $relvel(0, RND_FB, 110); + AddVelocity(param2, PUSH_VEL); + } + + void OnDamage(int damage) override + { + if ((param3).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(GetEntityHealth(GetOwner()) < HALF_HEALTH)) return; + if (!(GetGameTime() > NEXT_CUSTOM_FLINCH)) return; + PlayAnim("critical", ANIM_CUSTOM_FLINCH); + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_CUSTOM_FLINCH = GetGameTime(); + NEXT_CUSTOM_FLINCH += Random(20.0, 30.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/giantbat.as b/scripts/angelscript/monsters/giantbat.as new file mode 100644 index 00000000..46b4b388 --- /dev/null +++ b/scripts/angelscript/monsters/giantbat.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bat_giant.as" + +namespace MS +{ + +class Giantbat : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/giantblackbear.as b/scripts/angelscript/monsters/giantblackbear.as new file mode 100644 index 00000000..82dbd06d --- /dev/null +++ b/scripts/angelscript/monsters/giantblackbear.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bear_giant_black.as" + +namespace MS +{ + +class Giantblackbear : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/giantbrownbear.as b/scripts/angelscript/monsters/giantbrownbear.as new file mode 100644 index 00000000..25839114 --- /dev/null +++ b/scripts/angelscript/monsters/giantbrownbear.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bear_giant_brown.as" + +namespace MS +{ + +class Giantbrownbear : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/giantbrwonbear.as b/scripts/angelscript/monsters/giantbrwonbear.as new file mode 100644 index 00000000..7ccd24db --- /dev/null +++ b/scripts/angelscript/monsters/giantbrwonbear.as @@ -0,0 +1,18 @@ +#pragma context server + +namespace MS +{ + +class Giantbrwonbear : CGameScript +{ + void OnSpawn() override + { + SetInvincible(true); + SetHealth(1); + SetEntityOrigin(GetOwner(), Vector3(10000, 10000, 10000)); + SetName("sky_verify"); + } + +} + +} diff --git a/scripts/angelscript/monsters/giantpolarbear.as b/scripts/angelscript/monsters/giantpolarbear.as new file mode 100644 index 00000000..801c7d72 --- /dev/null +++ b/scripts/angelscript/monsters/giantpolarbear.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bear_giant_polar.as" + +namespace MS +{ + +class Giantpolarbear : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/giantrat.as b/scripts/angelscript/monsters/giantrat.as new file mode 100644 index 00000000..a7b7b920 --- /dev/null +++ b/scripts/angelscript/monsters/giantrat.as @@ -0,0 +1,116 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Giantrat : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_IDLE2; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + int MOVE_RANGE; + int NO_EXP_MULTI; + int NPC_GIVE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Giantrat() + { + NO_EXP_MULTI = 1; + ANIM_IDLE = "idle1"; + ANIM_IDLE2 = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 10; + ATTACK_DAMAGE = 0.4; + ATTACK_RANGE = 48; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.3; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_ATTACK1 = "monsters/rat/squeak2.wav"; + SOUND_ATTACK2 = "monsters/orc/attack2.wav"; + SOUND_ATTACK3 = "monsters/orc/attack3.wav"; + SOUND_IDLE1 = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + CAN_FLEE = 1; + FLEE_HEALTH = 2; + FLEE_CHANCE = 0.3; + DROP_ITEM1 = "skin_ratpelt"; + DROP_ITEM1_CHANCE = 0.5; + HUNT_AGRO = 0; + Precache(SOUND_IDLE1); + Precache(SOUND_DEATH); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + if (!(IS_HUNTING)) + { + } + int STAND_UP = RandomInt(0, 5); + if (STAND_UP == 0) + { + PlayAnim("once", ANIM_IDLE2); + } + } + + void OnSpawn() override + { + SetHealth(4); + SetWidth(32); + SetHeight(32); + SetName("Giant Rat"); + SetRoam(true); + SetHearingSensitivity(0); + NPC_GIVE_EXP = 3; + SetRace("vermin"); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void bite1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/giantrat2.as b/scripts/angelscript/monsters/giantrat2.as new file mode 100644 index 00000000..35b1686c --- /dev/null +++ b/scripts/angelscript/monsters/giantrat2.as @@ -0,0 +1,116 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Giantrat2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_IDLE2; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + int MOVE_RANGE; + int NO_EXP_MULTI; + int NPC_GIVE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Giantrat2() + { + NO_EXP_MULTI = 1; + ANIM_IDLE = "idle1"; + ANIM_IDLE2 = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 10; + ATTACK_DAMAGE = 0.4; + ATTACK_RANGE = 48; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.3; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_ATTACK1 = "monsters/rat/squeak2.wav"; + SOUND_ATTACK2 = "monsters/orc/attack2.wav"; + SOUND_ATTACK3 = "monsters/orc/attack3.wav"; + SOUND_IDLE1 = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + CAN_FLEE = 1; + FLEE_HEALTH = 2; + FLEE_CHANCE = 0.0; + DROP_ITEM1 = "skin_ratpelt"; + DROP_ITEM1_CHANCE = 0.5; + HUNT_AGRO = 0; + Precache(SOUND_IDLE1); + Precache(SOUND_DEATH); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + if (!(IS_HUNTING)) + { + } + int STAND_UP = RandomInt(0, 5); + if (STAND_UP == 0) + { + PlayAnim("once", ANIM_IDLE2); + } + } + + void OnSpawn() override + { + SetHealth(50000); + SetWidth(32); + SetHeight(32); + SetName("Godlike Giant Rat"); + SetRoam(true); + SetHearingSensitivity(0); + NPC_GIVE_EXP = 3; + SetRace("vermin"); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void bite1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/giantspider.as b/scripts/angelscript/monsters/giantspider.as new file mode 100644 index 00000000..6e2cc88e --- /dev/null +++ b/scripts/angelscript/monsters/giantspider.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/thornlandspider.as" + +namespace MS +{ + +class Giantspider : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/gloam1.as b/scripts/angelscript/monsters/gloam1.as new file mode 100644 index 00000000..718a67c0 --- /dev/null +++ b/scripts/angelscript/monsters/gloam1.as @@ -0,0 +1,267 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Gloam1 : CGameScript +{ + int AM_CLOAKED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_GALLOP; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_PROJECTILE; + string ANIM_RUN; + string ANIM_VICTORY; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CYCLES_STARTED; + int DMG_SPITWAD; + int DMG_SPoRE; + int DMG_SWIPE; + float DUR_CLOAK; + int FLEE_CHANCE; + int FLEE_HEALTH; + float FLEE_TIME; + float FREQ_SPITWAD; + string JUMP_HEIGHT_FACTOR; + int JUMP_RANGE; + int JUMP_THRESHOLD; + string NEXT_JUMP; + string NEXT_VICTORY; + int NPC_GIVE_EXP; + string PUSH_TARG; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACKHIT1; + string SOUND_ATTACKHIT2; + string SOUND_DEATH; + string SOUND_JUMP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SPITWAD; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + int SPIT_WADS; + int SPORE_POISON_DMG; + int SWIPE_ATTACK; + + Gloam1() + { + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle_1"; + ANIM_FLINCH = "flinchb"; + ANIM_ATTACK = "bite"; + ANIM_DEATH = "die"; + ANIM_GALLOP = "gallop"; + ANIM_JUMP = "jump"; + ANIM_PROJECTILE = "turnright"; + ANIM_VICTORY = "eat"; + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 34; + NPC_GIVE_EXP = 250; + FLEE_HEALTH = 500; + FLEE_CHANCE = 25; + FLEE_TIME = 5.0; + FREQ_SPITWAD = Random(10, 20); + DUR_CLOAK = 10.0; + DMG_SWIPE = "$rand(20,40)"; + SPORE_POISON_DMG = 5; + DMG_SPoRE = 50; + DMG_SPITWAD = 20; + JUMP_THRESHOLD = 80; + JUMP_RANGE = 512; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACKHIT1 = "zombie/claw_strike1.wav"; + SOUND_ATTACKHIT2 = "zombie/claw_strike2.wav"; + SOUND_DEATH = "aslave/slv_die2.wav"; + SOUND_PAIN1 = "aslave/slv_pain1.wav"; + SOUND_PAIN2 = "aslave/slv_pain2.wav"; + SOUND_SPITWAD = "headcrab/hc_attack1.wav"; + SOUND_JUMP = "aslave/slv_alert3.wav"; + } + + void OnSpawn() override + { + SetName("Gloam"); + SetModel("monsters/hunter1.mdl"); + SetRace("demon"); + SetBloodType("green"); + SetHearingSensitivity(11); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetWidth(32); + SetHeight(32); + SetHealth(1000); + SetDamageResistance("poison", 0.5); + SetDamageResistance("cold", 0.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("holy", 0.0); + AM_CLOAKED = 0; + PUSH_TARG = "unset"; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void cycle_up() + { + start_cycles(); + } + + void cycle_npc() + { + start_cycles(); + } + + void start_cycles() + { + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + FREQ_SPITWAD("do_spitwad"); + } + + void mdl_attack() + { + SWIPE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, 0.9, "slash"); + } + + void game_dodamage() + { + if ((SWIPE_ATTACK)) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 300, 110)); + if ((param1)) + { + // PlayRandomSound from: SOUND_ATTACKHIT1, SOUND_ATTACKHIT2 + array sounds = {SOUND_ATTACKHIT1, SOUND_ATTACKHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + SWIPE_ATTACK = 0; + } + } + + void spitwad_loop() + { + if ((SPIT_WADS)) + { + if (!(IsEntityAlive(m_hAttackTarget))) + { + end_spitwad(); + } + else + { + PlayAnim("once", "flinchs"); + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "spitwad_loop"); + } + } + } + + void do_spitwad() + { + FREQ_SPITWAD("do_spitwad"); + if (!(false)) return; + if ((IS_FLEEING)) return; + SetMoveAnim("flinchs"); + SetIdleAnim("flinchs"); + SetRoam(false); + npcatk_suspend_ai(); + SPIT_WADS = 1; + ScheduleDelayedEvent(4.0, "end_spitwad"); + ScheduleDelayedEvent(0.1, "spitwad_loop"); + } + + void end_spitwad() + { + SetRoam(true); + SPIT_WADS = 0; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + npcatk_resume_ai(); + } + + void mdl_attack2() + { + EmitSound(GetOwner(), 0, SOUND_SPITWAD, 10); + TossProjectile("proj_thorn", /* TODO: $relpos */ $relpos(20, 0, 16), m_hAttackTarget, 600, DMG_SPITWAD, 5, "none"); + } + + void npc_targetsighted() + { + if (!(GetGameTime() > NEXT_JUMP)) return; + if (!(GetEntityRange(m_hAttackTarget) < JUMP_RANGE)) return; + string MY_Z = GetMonsterProperty("origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (RandomInt(1, 50) == 1) + { + int Z_DIFF = 81; + } + if (Z_DIFF > JUMP_THRESHOLD) + { + JUMP_HEIGHT_FACTOR = Z_DIFF; + JUMP_HEIGHT_FACTOR *= 2; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("critical", ANIM_JUMP); + NEXT_JUMP = GetGameTime(); + NEXT_JUMP += 2.0; + } + } + + void mdl_jump_boost() + { + EmitSound(GetOwner(), 0, SOUND_JUMP, 10); + int JUMP_HEIGHT = RandomInt(250, 350); + JUMP_HEIGHT += JUMP_HEIGHT_FACTOR; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void OnFlee() + { + ScheduleDelayedEvent(0.1, "flee_boost"); + } + + void flee_boost() + { + JUMP_HEIGHT_FACTOR = JUMP_THRESHOLD; + PlayAnim("critical", ANIM_JUMP); + } + + void my_target_died() + { + if (!(GetGameTime() > NEXT_VICTORY)) return; + NEXT_VICTORY = GetGameTime(); + NEXT_VICTORY += 10.0; + PlayAnim("critical", ANIM_VICTORY); + } + +} + +} diff --git a/scripts/angelscript/monsters/gloam_ether.as b/scripts/angelscript/monsters/gloam_ether.as new file mode 100644 index 00000000..9b31b50a --- /dev/null +++ b/scripts/angelscript/monsters/gloam_ether.as @@ -0,0 +1,343 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class GloamEther : CGameScript +{ + int AM_CLOAKED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_GALLOP; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_PROJECTILE; + string ANIM_RUN; + string ANIM_VICTORY; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CALLED_BY_DANGER; + int CYCLES_STARTED; + int DMG_SPITWAD; + int DMG_SPORE; + int DMG_SWIPE; + float DUR_CLOAK; + float FREQ_CLOAK; + float FREQ_SPITWAD; + float FREQ_SPORES; + string NEXT_VICTORY; + float NPC_BOSS_REGEN_RATE; + int NPC_GIVE_EXP; + int NPC_IS_BOSS; + string PUSH_TARG; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACKHIT1; + string SOUND_ATTACKHIT2; + string SOUND_CLOAK; + string SOUND_DEATH; + string SOUND_JUMP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SPITWAD; + string SOUND_SPORES; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + int SPIT_WADS; + int SPORE_POISON_DMG; + int SWIPE_ATTACK; + + GloamEther() + { + SetCallback("touch", "enable"); + NPC_IS_BOSS = 1; + NPC_BOSS_REGEN_RATE = 0.05; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle_1"; + ANIM_FLINCH = "flinchb"; + ANIM_ATTACK = "bite"; + ANIM_DEATH = "die"; + ANIM_GALLOP = "gallop"; + ANIM_JUMP = "jump"; + ANIM_PROJECTILE = "turnright"; + ANIM_VICTORY = "eat"; + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 34; + NPC_GIVE_EXP = 600; + FREQ_SPORES = 30.0; + FREQ_SPITWAD = Random(15, 20); + FREQ_CLOAK = Random(15, 30); + DUR_CLOAK = 10.0; + DMG_SWIPE = "$rand(80,150)"; + SPORE_POISON_DMG = 50; + DMG_SPORE = 200; + DMG_SPITWAD = 80; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACKHIT1 = "zombie/claw_strike1.wav"; + SOUND_ATTACKHIT2 = "zombie/claw_strike2.wav"; + SOUND_CLOAK = "magic/spawn.wav"; + SOUND_DEATH = "aslave/slv_die2.wav"; + SOUND_PAIN1 = "aslave/slv_pain1.wav"; + SOUND_PAIN2 = "aslave/slv_pain2.wav"; + SOUND_SPORES = "bullchicken/bc_attack3.wav"; + SOUND_SPITWAD = "headcrab/hc_attack1.wav"; + SOUND_JUMP = "aslave/slv_alert3.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + if ((SPIT_WADS)) + { + if (!(IsEntityAlive(m_hAttackTarget))) + { + end_spitwad(); + } + else + { + PlayAnim("once", "flinchs"); + SetMoveDest(m_hAttackTarget); + } + } + if (!(AM_CLOAKED)) + { + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "renderfx", 16); + } + if ((AM_CLOAKED)) + { + } + SetProp(GetOwner(), "renderamt", 0); + if (PUSH_TARG != "unset") + { + } + int RND_RL = RandomInt(-1, 1); + RND_RL *= 400; + AddVelocity(PUSH_TARG, /* TODO: $relvel */ $relvel(RND_RL, 800, 400)); + PUSH_TARG = "unset"; + } + + void OnSpawn() override + { + SetName("Ether Gloam"); + SetModel("monsters/hunter1.mdl"); + SetRace("demon"); + SetBloodType("green"); + SetHearingSensitivity(11); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetWidth(32); + SetHeight(32); + SetHealth(5000); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "renderfx", 16); + SetDamageResistance("all", 0.6); + SetDamageResistance("poison", 0.5); + SetDamageResistance("cold", 0.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("dark", 0.5); + AM_CLOAKED = 0; + PUSH_TARG = "unset"; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void cycle_up() + { + start_cycles(); + } + + void cycle_npc() + { + start_cycles(); + } + + void start_cycles() + { + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + FREQ_CLOAK("do_cloak"); + FREQ_SPORES("do_spores"); + FREQ_SPITWAD("do_spitwad"); + } + + void do_cloak() + { + if (!(CALLED_BY_DANGER)) + { + FREQ_CLOAK("do_cloak"); + } + CALLED_BY_DANGER = 0; + if ((SPIT_WADS)) return; + if (!(IsEntityAlive(m_hLastStruck))) return; + ClearFX(); + EmitSound(GetOwner(), 0, SOUND_CLOAK, 10); + Effect("glow", GetOwner(), Vector3(128, 255, 0), 256, 1, 1); + SetProp(GetOwner(), "renderamt", 0); + SetProp(GetOwner(), "renderfx", 0); + SetMoveSpeed(5.0); + npcatk_flee(GetEntityIndex(m_hLastStruck), 2048, DUR_CLOAK); + AM_CLOAKED = 1; + DUR_CLOAK("end_cloak"); + } + + void end_cloak() + { + EmitSound(GetOwner(), 0, SOUND_CLOAK, 10); + AM_CLOAKED = 0; + Effect("glow", GetOwner(), Vector3(128, 255, 0), 256, 2, 2); + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "renderfx", 16); + SetMoveSpeed(1.0); + } + + void OnDamage(int damage) override + { + if (!(AM_CLOAKED)) + { + string T_BOX = /* TODO: $get_tbox */ $get_tbox("players", 256); + if (T_BOX != "none") + { + } + if (GetTokenCount(T_BOX, ";") > 2) + { + } + CALLED_BY_DANGER = 1; + do_cloak(); + } + if (!(AM_CLOAKED)) return; + int CAN_HIT = 0; + if (param3 == "magic") + { + int CAN_HIT = 1; + } + if (param3 == "holy") + { + int CAN_HIT = 1; + } + if (param3 == "dark") + { + int CAN_HIT = 1; + } + if ((CAN_HIT)) return; + SetDamage("hit"); + SetDamage("dmg"); + return; + } + + void do_spores() + { + FREQ_SPORES("do_spores"); + if ((AM_CLOAKED)) return; + if (!(false)) return; + PlayAnim("critical", "turnright"); + EmitSound(GetOwner(), 0, SOUND_SPORES, 10); + TossProjectile("proj_spore", /* TODO: $relpos */ $relpos(-10, 0, 32), m_hAttackTarget, 500, DMG_SPORE, 0.1, "none"); + } + + void mdl_attack() + { + if ((AM_CLOAKED)) return; + SWIPE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, 0.9, "slash"); + } + + void game_dodamage() + { + if ((SWIPE_ATTACK)) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 300, 110)); + if ((param1)) + { + // PlayRandomSound from: SOUND_ATTACKHIT1, SOUND_ATTACKHIT2 + array sounds = {SOUND_ATTACKHIT1, SOUND_ATTACKHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + SWIPE_ATTACK = 0; + } + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(AM_CLOAKED)) return; + if (!(GetRelationship(param1) == "enemy")) return; + PUSH_TARG = param1; + } + + void npcatk_run() + { + SetMoveAnim(ANIM_RUN); + PlayAnim("once", ANIM_GALLOP); + } + + void do_spitwad() + { + FREQ_SPITWAD("do_spitwad"); + if (!(false)) return; + if ((AM_CLOAKED)) return; + SetMoveAnim("flinchs"); + SetIdleAnim("flinchs"); + SetRoam(false); + npcatk_suspend_ai(); + SPIT_WADS = 1; + ScheduleDelayedEvent(4.0, "end_spitwad"); + } + + void end_spitwad() + { + SetRoam(true); + SPIT_WADS = 0; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + npcatk_resume_ai(); + } + + void mdl_attack2() + { + EmitSound(GetOwner(), 0, SOUND_SPITWAD, 10); + TossProjectile("proj_thorn", /* TODO: $relpos */ $relpos(20, 0, 16), m_hAttackTarget, 600, DMG_SPITWAD, 5, "none"); + } + + void mdl_jump_boost() + { + EmitSound(GetOwner(), 0, SOUND_JUMP, 10); + int JUMP_HEIGHT = RandomInt(150, 250); + JUMP_HEIGHT += JUMP_HEIGHT_FACTOR; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void my_target_died() + { + if (!(GetGameTime() > NEXT_VICTORY)) return; + NEXT_VICTORY = GetGameTime(); + NEXT_VICTORY += 10.0; + PlayAnim("critical", ANIM_VICTORY); + } + +} + +} diff --git a/scripts/angelscript/monsters/goblin.as b/scripts/angelscript/monsters/goblin.as new file mode 100644 index 00000000..18d7e5d6 --- /dev/null +++ b/scripts/angelscript/monsters/goblin.as @@ -0,0 +1,158 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Goblin : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int HUNT_AGRO; + string LAST_ENEMY; + int MOVE_RANGE; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_DEATH2; + string SOUND_HELP; + string SOUND_HIT; + string SOUND_HIT1; + string SOUND_HIT2; + string SOUND_PAINYELL; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + + Goblin() + { + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "battleaxe_swing1_L"; + ANIM_DEATH = "die_fallback"; + ATTACK_RANGE = 130; + ATTACK_HITRANGE = 130; + MOVE_RANGE = 90; + ATTACK_HITCHANCE = 0.6; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_HIT = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_HIT1 = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_HIT2 = "monsters/goblin/c_gargoyle_hit2.wav"; + SOUND_PAINYELL = "monsters/orc/pain.wav"; + SOUND_WARCRY1 = "monsters/goblin/c_goblin_bat1.wav"; + SOUND_ATTACK1 = "monsters/goblin/c_goblin_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_goblin_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_goblin_atk3.wav"; + SOUND_DEATH = "monsters/goblin/c_goblin_dead.wav"; + SOUND_DEATH2 = "monsters/goblin/c_goblin_dead.wav"; + SOUND_HELP = "monsters/goblin/c_goblin_bat2.wav"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 1; + DROP_GOLD_MAX = 2; + NPC_MUST_SEE_TARGET = 0; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + if ((G_NO_GOBLINS)) + { + DeleteEntity(GetOwner()); + } + SetHealth(50); + SetWidth(32); + SetHeight(60); + SetName("Goblin"); + SetRoam(true); + SetHearingSensitivity(6); + NPC_GIVE_EXP = 25; + SetRace("goblin"); + SetModel("monsters/goblin_new.mdl"); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 1); + SetModelBody(3, 0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + } + + void swing_axe() + { + ATTACK_DAMAGE = Random(6, 9); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", ATTACK_DAMAGE, ATTACK_HITCHANCE); + } + attack_sound(); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_HIT, SOUND_HIT2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_HIT, SOUND_HIT2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_sound() + { + if (RandomInt(0, 1) == 0) + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (RandomInt(0, 5) == 2) + { + EmitSound(GetOwner(), SOUND_WARCRY1); + } + } + } + + void npc_targetsighted() + { + string LASTSEEN_ENEMY = GetEntityIndex(m_hLastSeen); + if (!(LASTSEEN_ENEMY != LAST_ENEMY)) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_WARCRY1, 5); + LAST_ENEMY = LASTSEEN_ENEMY; + } + + void goblin_remove() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/goblin_guard.as b/scripts/angelscript/monsters/goblin_guard.as new file mode 100644 index 00000000..7c97fd61 --- /dev/null +++ b/scripts/angelscript/monsters/goblin_guard.as @@ -0,0 +1,149 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class GoblinGuard : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int HUNT_AGRO; + string LAST_ENEMY; + int MOVE_RANGE; + int NPC_MUST_SEE_TARGET; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_DEATH2; + string SOUND_HELP; + string SOUND_HIT; + string SOUND_HIT1; + string SOUND_HIT2; + string SOUND_PAINYELL; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + + GoblinGuard() + { + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "swordswing1_L"; + ANIM_DEATH = "die_fallback"; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 130; + MOVE_RANGE = 50; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_HIT = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_HIT1 = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_HIT2 = "monsters/goblin/c_gargoyle_hit2.wav"; + SOUND_PAINYELL = "monsters/orc/pain.wav"; + SOUND_WARCRY1 = "monsters/goblin/c_goblin_bat1.wav"; + SOUND_ATTACK1 = "monsters/goblin/c_goblin_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_goblin_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_goblin_atk3.wav"; + SOUND_DEATH = "monsters/goblin/c_goblin_dead.wav"; + SOUND_DEATH2 = "monsters/goblin/c_goblin_dead.wav"; + SOUND_HELP = "monsters/goblin/c_goblin_bat2.wav"; + ATTACK_HITCHANCE = 0.8; + CAN_HUNT = 1; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 3; + DROP_GOLD_MAX = 5; + NPC_MUST_SEE_TARGET = 0; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetHealth(120); + SetWidth(32); + SetHeight(60); + SetName("Goblin Guard"); + SetRoam(true); + SetHearingSensitivity(6); + SetSkillLevel(35); + SetRace("goblin"); + SetModel("monsters/goblin_new.mdl"); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetModelBody(2, 4); + SetModelBody(3, 0); + SetModelBody(4, 0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + } + + void swing_sword() + { + ATTACK_DAMAGE = Random(8, 12); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", ATTACK_DAMAGE, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + } + attack_sound(); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_HIT, SOUND_HIT2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_HIT, SOUND_HIT2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_sound() + { + if (RandomInt(0, 1) == 0) + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (RandomInt(0, 5) == 2) + { + EmitSound(GetOwner(), SOUND_WARCRY1); + } + } + } + + void npc_targetsighted() + { + string LASTSEEN_ENEMY = GetEntityIndex(m_hLastSeen); + if (!(LASTSEEN_ENEMY != LAST_ENEMY)) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_WARCRY1, 5); + LAST_ENEMY = LASTSEEN_ENEMY; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/goblin_pouncer.as b/scripts/angelscript/monsters/goblin_pouncer.as new file mode 100644 index 00000000..1c3430f9 --- /dev/null +++ b/scripts/angelscript/monsters/goblin_pouncer.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "orc_for/goblin_pouncer_sa.as" + +namespace MS +{ + +class GoblinPouncer : CGameScript +{ + int GOBLIN_SELF_ADJUST; + + GoblinPouncer() + { + GOBLIN_SELF_ADJUST = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/goblin_thrower.as b/scripts/angelscript/monsters/goblin_thrower.as new file mode 100644 index 00000000..490521dd --- /dev/null +++ b/scripts/angelscript/monsters/goblin_thrower.as @@ -0,0 +1,148 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class GoblinThrower : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_CONE_OF_FIRE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int CAN_FLEE; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int HUNT_AGRO; + string LAST_ENEMY; + int MOVE_RANGE; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_DEATH2; + string SOUND_HELP; + string SOUND_HIT; + string SOUND_HIT1; + string SOUND_HIT2; + string SOUND_PAINYELL; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + int STONE_DAMAGE_HIGH; + int STONE_DAMAGE_LOW; + + GoblinThrower() + { + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "swordswing1_L"; + ANIM_DEATH = "die_fallback"; + MOVE_RANGE = 300; + ATTACK_RANGE = 400; + ATTACK_HITRANGE = 400; + STONE_DAMAGE_LOW = 4; + STONE_DAMAGE_HIGH = 7; + ATTACK_CONE_OF_FIRE = 0; + AIM_RATIO = 50; + ATTACK_SPEED = 1000; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_HIT = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_HIT1 = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_HIT2 = "monsters/goblin/c_gargoyle_hit2.wav"; + SOUND_PAINYELL = "monsters/orc/pain.wav"; + SOUND_WARCRY1 = "monsters/goblin/c_goblin_bat1.wav"; + SOUND_ATTACK1 = "monsters/goblin/c_goblin_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_goblin_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_goblin_atk3.wav"; + SOUND_DEATH = "monsters/goblin/c_goblin_dead.wav"; + SOUND_DEATH2 = "monsters/goblin/c_goblin_dead.wav"; + SOUND_HELP = "monsters/goblin/c_goblin_bat2.wav"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.5; + CAN_FLEE = 0; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 0; + DROP_GOLD_MAX = 3; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetHealth(35); + SetWidth(25); + SetHeight(60); + SetName("Goblin Slinger"); + SetRoam(true); + SetHearingSensitivity(7); + SetSkillLevel(20); + SetRace("goblin"); + SetModel("monsters/goblin_new.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + } + + void swing_sword() + { + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + float LCL_ATKDMG = Random(STONE_DAMAGE_LOW, STONE_DAMAGE_HIGH); + TossProjectile("proj_stone", /* TODO: $relpos */ $relpos(0, 0, 18), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + attack_sound(); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_HIT, SOUND_HIT2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_HIT, SOUND_HIT2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_sound() + { + if (RandomInt(0, 1) == 0) + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (RandomInt(0, 5) == 2) + { + EmitSound(GetOwner(), SOUND_WARCRY1); + } + } + } + + void npc_targetsighted() + { + string LASTSEEN_ENEMY = GetEntityIndex(m_hLastSeen); + if (!(LASTSEEN_ENEMY != LAST_ENEMY)) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_WARCRY1, 5); + LAST_ENEMY = LASTSEEN_ENEMY; + } + +} + +} diff --git a/scripts/angelscript/monsters/goblinchief.as b/scripts/angelscript/monsters/goblinchief.as new file mode 100644 index 00000000..96496732 --- /dev/null +++ b/scripts/angelscript/monsters/goblinchief.as @@ -0,0 +1,166 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Goblinchief : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int HUNT_AGRO; + string LAST_ENEMY; + int MOVE_RANGE; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_DEATH2; + string SOUND_HELP; + string SOUND_HIT; + string SOUND_HIT1; + string SOUND_HIT2; + string SOUND_PAINYELL; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + + Goblinchief() + { + if (StringToLower(GetMapName()) == "goblintown") + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 400; + } + else + { + if (StringToLower(GetMapName()) == "gertenheld_forest") + { + NPC_GIVE_EXP = 50; + } + else + { + NPC_GIVE_EXP = 150; + } + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 1.0; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "battleaxe_swing1_L"; + ANIM_DEATH = "die_fallback"; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 130; + MOVE_RANGE = 50; + ATTACK_HITCHANCE = 0.6; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_HIT = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_HIT1 = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_HIT2 = "monsters/goblin/c_gargoyle_hit2.wav"; + SOUND_PAINYELL = "monsters/orc/pain.wav"; + SOUND_WARCRY1 = "monsters/goblin/c_goblin_bat1.wav"; + SOUND_ATTACK1 = "monsters/goblin/c_goblin_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_goblin_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_goblin_atk3.wav"; + SOUND_DEATH = "monsters/goblin/c_goblin_dead.wav"; + SOUND_DEATH2 = "monsters/goblin/c_goblin_dead.wav"; + SOUND_HELP = "monsters/goblin/c_goblin_bat2.wav"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 5; + DROP_GOLD_MAX = 10; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetHealth(500); + SetWidth(32); + SetHeight(60); + SetName("Goblin Chief"); + SetRoam(true); + SetHearingSensitivity(6); + SetRace("goblin"); + SetModel("monsters/goblin_new_boss.mdl"); + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 5); + SetModelBody(3, 0); + SetModelBody(4, 0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + GiveItem(GetOwner(), "item_goblinhead"); + } + + void swing_axe() + { + ATTACK_DAMAGE = Random(15, 28); + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + attack_sound(); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_HIT, SOUND_HIT2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_HIT, SOUND_HIT2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_sound() + { + if (RandomInt(0, 1) == 0) + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (RandomInt(0, 5) == 0) + { + EmitSound(GetOwner(), SOUND_WARCRY1); + } + } + } + + void npc_targetsighted() + { + string LASTSEEN_ENEMY = GetEntityIndex(m_hLastSeen); + if (!(LASTSEEN_ENEMY != LAST_ENEMY)) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_WARCRY1, 5); + LAST_ENEMY = LASTSEEN_ENEMY; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/grizzly.as b/scripts/angelscript/monsters/grizzly.as new file mode 100644 index 00000000..3f087c4a --- /dev/null +++ b/scripts/angelscript/monsters/grizzly.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "monsters/bear_base.as" + +namespace MS +{ + +class Grizzly : CGameScript +{ + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int MOVE_RANGE; + int NPC_GIVE_EXP; + float RETALIATE_CHANGETARGET_CHANCE; + + Grizzly() + { + MOVE_RANGE = 70; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 130; + ATTACK_DAMAGE = "$rand(15,20)"; + ATTACK_HITCHANCE = 0.6; + NPC_GIVE_EXP = 55; + RETALIATE_CHANGETARGET_CHANCE = 0.5; + DROP_ITEM1 = "skin_bear"; + DROP_ITEM1_CHANCE = 0.75; + } + + void OnSpawn() override + { + SetHealth(200); + SetWidth(64); + SetHeight(95); + SetName("Grizzly"); + SetHearingSensitivity(5); + SetModel("monsters/bear.mdl"); + SetModelBody(0, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/gspider.as b/scripts/angelscript/monsters/gspider.as new file mode 100644 index 00000000..1aac099d --- /dev/null +++ b/scripts/angelscript/monsters/gspider.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/spider_spitting.as" + +namespace MS +{ + +class Gspider : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/guard.as b/scripts/angelscript/monsters/guard.as new file mode 100644 index 00000000..a0f9a0fb --- /dev/null +++ b/scripts/angelscript/monsters/guard.as @@ -0,0 +1,77 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Guard : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + float FLEE_CHANCE; + int FLEE_HEALTH; + int GORE_DAMAGE; + int IS_FLEEING; + int MY_ENEMY; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_PAIN; + string SOUND_PAIN2; + + Guard() + { + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_PAIN2 = "player/armhit1.wav"; + SOUND_ATTACK1 = "npc/prepdie1.wav"; + SOUND_ATTACK2 = "monsters/sludge/null.wav"; + SOUND_ATTACK3 = "monsters/sludge/null.wav"; + SOUND_DEATH = "player/stomachhit1.wav"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 140; + ATTACK_HITCHANCE = 0.8; + GORE_DAMAGE = 9; + FLEE_HEALTH = 10; + FLEE_CHANCE = 0.25; + IS_FLEEING = 0; + MY_ENEMY = 0; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 1; + DROP_GOLD_MAX = 20; + } + + void OnSpawn() override + { + SetHealth(100); + SetWidth(32); + SetHeight(72); + SetRace("rogue"); + SetName("Renegade Guard"); + SetRoam(true); + SetHearingSensitivity(4); + SetDamageResistance("all", ".8"); + SetSkillLevel(35); + SetModel("npc/guard1.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim("walk"); + SetActionAnim("swordswing1_L"); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, GORE_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + +} + +} diff --git a/scripts/angelscript/monsters/guard2.as b/scripts/angelscript/monsters/guard2.as new file mode 100644 index 00000000..35ff098a --- /dev/null +++ b/scripts/angelscript/monsters/guard2.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class Guard2 : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int NPC_GIVE_EXP; + + Guard2() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(3, 8); + NPC_GIVE_EXP = 30; + DROP_ITEM1 = "axes_battleaxe"; + DROP_ITEM1_CHANCE = 0.1; + ANIM_ATTACK = "battleaxe_swing1_L"; + ATTACK_ACCURACY = 0.6; + ATTACK_DMG_LOW = 5; + ATTACK_DMG_HIGH = 10; + } + + void orc_spawn() + { + SetHealth(100); + SetName("Orc Warrior"); + SetHearingSensitivity(1.5); + SetStat("parry", 30); + SetDamageResistance("all", ".9"); + SetRoam(false); + SetModelBody(0, 2); + SetModelBody(1, 0); + SetModelBody(2, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/guardian_fire.as b/scripts/angelscript/monsters/guardian_fire.as new file mode 100644 index 00000000..f721e642 --- /dev/null +++ b/scripts/angelscript/monsters/guardian_fire.as @@ -0,0 +1,114 @@ +#pragma context server + +#include "monsters/guardian_iron.as" + +namespace MS +{ + +class GuardianFire : CGameScript +{ + float ANIM_RATE; + string CHARGER_ORG; + string CHARGE_LEVEL; + string CL_SCRIPT_IDX; + string DMG_ELEF_TYPE; + int DOT_DMG; + int GUARDIAN_BEAM_SWORD; + string GUARDIAN_CL_SCRIPT; + int GUARDIAN_TYPE; + int IMMUNE_VAMPIRE; + int IS_BLOODLESS; + string NEEDS_CHARGER; + string NEXT_SWBEAMS_REFRESH; + int PITCH_SWORD_OFF; + string SOUND_REACH; + string SOUND_RECHARGE_START; + string SOUND_SWING; + string SOUND_SWORD_DRAW; + string SOUND_SWORD_IDLE; + string SOUND_SWORD_OFF; + + GuardianFire() + { + GUARDIAN_TYPE = 2; + GUARDIAN_BEAM_SWORD = 0; + DMG_ELEF_TYPE = "fire_effect"; + SOUND_SWORD_IDLE = "none"; + SOUND_SWORD_DRAW = "magic/dragon_fire.wav"; + SOUND_SWORD_OFF = "weapons/swords/sworddraw.wav"; + PITCH_SWORD_OFF = 50; + SOUND_RECHARGE_START = "magic/sff_explsonic.wav"; + SOUND_REACH = "magic/dragon_fire.wav"; + SOUND_SWING = "magic/fireball_large.wav"; + GUARDIAN_CL_SCRIPT = "monsters/guardian_fire_cl"; + DOT_DMG = 100; + } + + void game_precache() + { + Precache("fire1_fixed.spr"); + } + + void guardian_spawn() + { + SetName("Molten Guardian"); + SetHealth(10000); + SetModel("monsters/guardian_fire.mdl"); + SetWidth(75); + SetHeight(200); + SetDamageResistance("all", 0.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.25); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetDamageResistance("stun", 0); + IMMUNE_VAMPIRE = 1; + IS_BLOODLESS = 1; + SetModelBody(0, 0); + SetRace("demon"); + SetBloodType("none"); + SetHearingSensitivity(1); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + if (!(true)) return; + if (G_GUARDIAN_CHARGER != "G_GUARDIAN_CHARGER") + { + CHARGER_ORG = G_GUARDIAN_CHARGER; + NEEDS_CHARGER = 1; + } + CHARGE_LEVEL = MAX_CHARGE_LEVEL; + ANIM_RATE = 1.0; + ClientEvent("new", "all", GUARDIAN_CL_SCRIPT, GetEntityIndex(GetOwner())); + CL_SCRIPT_IDX = "game.script.last_sent_id"; + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(MELEEING)) return; + ApplyEffect(param1, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(GetGameTime() > NEXT_SWBEAMS_REFRESH)) return; + if (!(SWORD_STATE)) return; + NEXT_SWBEAMS_REFRESH = GetGameTime(); + NEXT_SWBEAMS_REFRESH += 10.2; + Effect("beam", "follow", "lgtning.spr", GetOwner(), 2, 30, 10.0, 200, Vector3(255, 0, 0)); + Effect("beam", "follow", "lgtning.spr", GetOwner(), 2, 10, 10.0, 200, Vector3(255, 128, 0)); + } + + void frame_attack2_start() + { + LogDebug("frame_attack2_start"); + } + + void frame_attack1_start() + { + LogDebug("frame_attack2_start"); + } + +} + +} diff --git a/scripts/angelscript/monsters/guardian_fire_cl.as b/scripts/angelscript/monsters/guardian_fire_cl.as new file mode 100644 index 00000000..99f150a0 --- /dev/null +++ b/scripts/angelscript/monsters/guardian_fire_cl.as @@ -0,0 +1,415 @@ +#pragma context client + +namespace MS +{ + +class GuardianFireCl : CGameScript +{ + string BURST_TYPE; + string CHARGER_GLOW_COLOR; + int CHARGER_GLOW_RAD; + int CHARGER_ON; + string CHARGER_SPRITE; + int CHARGER_SPRITE_NFRAMES; + int CYCLE_ANGLE; + int FLICKER_COUNT; + int FX_ACTIVE; + string FX_CHARGER_ORG; + string FX_OWNER; + string FX_REINIT; + string FX_SWORD_STATE; + int GRAB_SPRITE_ON; + string GRAB_TARG; + string GRAB_TARG_ORG; + string LHAND_INDEX; + string LHAND_ORG; + string PASSIVE_GLOW_COLOR; + int PASSIVE_GLOW_RAD; + string PASSIVE_LIGHT_ID; + string RHAND_INDEX; + string RHAND_ORG; + string SOUND_CHARGER; + string SOUND_STOMP; + string SOUND_ZAP; + float SPIT_SPRITE_DEATH_DELAY; + string STOMP_ORG; + string STOMP_SPRITE; + string SWORD_GLOW_COLOR; + int SWORD_GLOW_RAD; + string SWORD_HILT_INDEX; + string SWORD_LIGHT_ID; + int SWORD_ON; + string SWORD_ORG; + string SWORD_SPRITE; + string SWORD_TIP_INDEX; + + GuardianFireCl() + { + PASSIVE_GLOW_COLOR = Vector3(64, 16, 0); + PASSIVE_GLOW_RAD = 64; + SWORD_GLOW_RAD = 128; + SWORD_GLOW_COLOR = Vector3(255, 96, 0); + CHARGER_GLOW_RAD = 640; + CHARGER_GLOW_COLOR = Vector3(255, 96, 0); + CHARGER_SPRITE = "c-tele1.spr"; + CHARGER_SPRITE_NFRAMES = 25; + SWORD_SPRITE = "fire1_fixed.spr"; + SWORD_HILT_INDEX = "attachment0"; + SWORD_TIP_INDEX = "attachment1"; + RHAND_INDEX = "attachment2"; + LHAND_INDEX = "attachment3"; + SOUND_CHARGER = "magic/blackhole.wav"; + SOUND_ZAP = "magic/sff_explsonic.wav"; + SOUND_STOMP = "magic/boom.wav"; + STOMP_SPRITE = "fire1_fixed.spr"; + Precache(CHARGER_SPRITE); + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + SWORD_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX); + RHAND_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, RHAND_INDEX); + LHAND_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_INDEX); + if ((GRAB_SPRITE_ON)) + { + } + GRAB_TARG_ORG = /* TODO: $getcl */ $getcl(GRAB_TARG, "origin"); + } + + void client_activate() + { + FX_OWNER = param1; + FX_REINIT = param2; + FX_SWORD_STATE = param3; + SetCallback("render", "enable"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), PASSIVE_GLOW_RAD, PASSIVE_GLOW_COLOR, 1.0); + PASSIVE_LIGHT_ID = "game.script.last_light_id"; + if (!(FX_REINIT)) return; + if (!(FX_SWORD_STATE)) return; + sword_on(); + } + + void remove_fx() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(FX_OWNER, "exists"))) + { + remove_fx(); + } + else + { + ClientEffect("light", PASSIVE_LIGHT_ID, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), PASSIVE_GLOW_RAD, PASSIVE_GLOW_COLOR, 1.0); + if ((SWORD_ON)) + { + } + ClientEffect("light", SWORD_LIGHT_ID, SWORD_ORG, SWORD_GLOW_RAD, SWORD_GLOW_COLOR, 0.5); + if ((GRAB_SPRITE_ON)) + { + } + string BEAM_START = /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_INDEX); + int RND_BONE = RandomInt(0, 15); + string BEAM_END = /* TODO: $getcl */ $getcl(GRAB_TARG, "origin"); + ClientEffect("beam_points", BEAM_START, BEAM_END, "fire1_fixed.spr", 0.1, 5.0, 1.5, 255, 1, 30, Vector3(255, 64, 0)); + } + } + + void sword_on() + { + SWORD_ON = 1; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX), SWORD_GLOW_RAD, SWORD_GLOW_COLOR, 1.0); + SWORD_LIGHT_ID = "game.script.last_light_id"; + if (!(param1)) return; + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_TIP_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_TIP_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_TIP_INDEX), "setup_sword_sprite"); + } + + void sword_flicker_out() + { + FLICKER_COUNT = 10; + sword_flicker_loop(); + } + + void sword_flicker_loop() + { + FLICKER_COUNT -= 1; + if (FLICKER_COUNT == 1) + { + SWORD_ON = 0; + } + if (!(FLICKER_COUNT > 1)) return; + ScheduleDelayedEvent(0.1, "sword_flicker_loop"); + SWORD_ON = RandomInt(0, 1); + } + + void recharge_fx() + { + FX_CHARGER_ORG = param1; + ClientEffect("tempent", "sprite", CHARGER_SPRITE, FX_CHARGER_ORG, "setup_charger_sprite"); + ClientEffect("tempent", "sprite", CHARGER_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, RHAND_INDEX), "setup_charger_lhand_sprite", "update_lhand_sprite"); + ClientEffect("tempent", "sprite", CHARGER_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_INDEX), "setup_charger_rhand_sprite", "update_rhand_sprite"); + EmitSound3D(SOUND_CHARGER, 10, FX_CHARGER_ORG); + CHARGER_ON = 1; + ClientEffect("light", "new", FX_CHARGER_ORG, CHARGER_GLOW_RAD, CHARGER_GLOW_COLOR, 8.0); + ScheduleDelayedEvent(8.0, "end_charger_fx"); + SPIT_SPRITE_DEATH_DELAY = 10.0; + ScheduleDelayedEvent(1.0, "recharge_fx_spit_sprite"); + SPIT_SPRITE_DEATH_DELAY -= 1.0; + ScheduleDelayedEvent(2.0, "recharge_fx_spit_sprite"); + SPIT_SPRITE_DEATH_DELAY -= 1.0; + ScheduleDelayedEvent(3.0, "recharge_fx_spit_sprite"); + SPIT_SPRITE_DEATH_DELAY -= 1.0; + ScheduleDelayedEvent(4.0, "recharge_fx_spit_sprite"); + SPIT_SPRITE_DEATH_DELAY -= 1.0; + ScheduleDelayedEvent(5.0, "recharge_fx_spit_sprite"); + charger_fx_loop(); + } + + void end_charger_fx() + { + CHARGER_ON = 0; + } + + void charger_fx_loop() + { + if (!(CHARGER_ON)) return; + ScheduleDelayedEvent(0.1, "charger_fx_loop"); + string BEAM_START = FX_CHARGER_ORG; + string BEAM_END = /* TODO: $getcl */ $getcl(FX_OWNER, RHAND_INDEX); + ClientEffect("beam_points", BEAM_START, BEAM_END, "fire1_fixed.spr", 0.1, 10.0, 0.5, 255, 1, 30, Vector3(255, 60, 0)); + string BEAM_START = FX_CHARGER_ORG; + string BEAM_END = /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_INDEX); + ClientEffect("beam_points", BEAM_START, BEAM_END, "fire1_fixed.spr", 0.1, 10.0, 0.5, 255, 1, 30, Vector3(255, 60, 0)); + } + + void recharge_fx_spit_sprite() + { + EmitSound3D(SOUND_CHARGER, 10, FX_CHARGER_ORG); + ClientEffect("tempent", "sprite", CHARGER_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_spit_sprite", "update_spit_sprite"); + } + + void grab_sprite_on() + { + ClientEffect("tempent", "sprite", CHARGER_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_INDEX), "setup_grab_sprite"); + } + + void grab_fx() + { + GRAB_SPRITE_ON = 1; + GRAB_TARG = param1; + EmitSound3D(SOUND_ZAP, 10, /* TODO: $getcl */ $getcl(GRAB_TARG, "origin")); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(GRAB_TARG, "origin"), "setup_grab_targ_sprite", "update_grab_targ_sprite"); + ScheduleDelayedEvent(1.0, "grab_fx_off"); + } + + void grab_fx_off() + { + GRAB_SPRITE_ON = 0; + } + + void stomp_fx() + { + STOMP_ORG = param1; + CYCLE_ANGLE = 0; + BURST_TYPE = "stomp"; + EmitSound3D(SOUND_STOMP, 10, STOMP_ORG); + for (int i = 0; i < 17; i++) + { + make_stomp_flames(); + } + } + + void smash_fx() + { + STOMP_ORG = param1; + CYCLE_ANGLE = 0; + BURST_TYPE = "smash"; + EmitSound3D(SOUND_STOMP, 10, STOMP_ORG); + for (int i = 0; i < 17; i++) + { + make_stomp_flames(); + } + LogDebug("*** smash_fx STOMP_ORG"); + } + + void make_stomp_flames() + { + string FLAME_POS = STOMP_ORG; + FLAME_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 10, 0)); + ClientEffect("tempent", "sprite", STOMP_SPRITE, FLAME_POS, "setup_stomp_sprite"); + CYCLE_ANGLE += 20; + } + + void update_grab_targ_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", GRAB_TARG_ORG); + } + + void update_spit_sprite() + { + string ROTATE_CYCLE = "game.tempent.fuser1"; + string RAISE_CYCLE = "game.tempent.fuser2"; + ROTATE_CYCLE += 5; + if (ROTATE_CYCLE > 359.99) + { + int ROTATE_CYCLE = 0; + } + RAISE_CYCLE += 0.5; + string SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, ROTATE_CYCLE, 0), Vector3(0, 50, RAISE_CYCLE)); + ClientEffect("tempent", "set_current_prop", "origin", SPRITE_ORG); + ClientEffect("tempent", "set_current_prop", "fuser1", ROTATE_CYCLE); + ClientEffect("tempent", "set_current_prop", "fuser2", RAISE_CYCLE); + if (!(CHARGER_ON)) return; + if (!(RandomInt(1, 20) == 1)) return; + string BEAM_START = FX_CHARGER_ORG; + string BEAM_END = SPRITE_ORG; + ClientEffect("beam_points", BEAM_START, BEAM_END, "fire1_fixed.spr", 0.1, 2.0, 2.0, 255, 1, 30, Vector3(255, 60, 0)); + } + + void update_rhand_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", RHAND_ORG); + } + + void update_lhand_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", LHAND_ORG); + } + + void setup_stomp_sprite() + { + if (BURST_TYPE == "stomp") + { + float FADE_DEL = 1.5; + int SPRITE_SPEED = 150; + } + else + { + float FADE_DEL = 1.0; + int SPRITE_SPEED = 100; + } + ClientEffect("tempent", "set_current_prop", "death_delay", FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 128, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 1.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void setup_grab_targ_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 64, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 3.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void setup_charger_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 8.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 128, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", CHARGER_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void setup_grab_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 4.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 64, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", CHARGER_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "follow", FX_OWNER, 3); + } + + void setup_charger_lhand_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 8.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 128, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", CHARGER_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void setup_charger_rhand_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 8.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 128, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", CHARGER_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void setup_spit_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", SPIT_SPRITE_DEATH_DELAY); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 64, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", CHARGER_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "fuser1", 0); + ClientEffect("tempent", "set_current_prop", "fuser2", 0); + } + + void setup_sword_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 64, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + float RND_ANG = Random(0, 359); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(0, 30, -50))); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 1); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + +} + +} diff --git a/scripts/angelscript/monsters/guardian_iron.as b/scripts/angelscript/monsters/guardian_iron.as new file mode 100644 index 00000000..ea5bdc38 --- /dev/null +++ b/scripts/angelscript/monsters/guardian_iron.as @@ -0,0 +1,875 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class GuardianIron : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK1_READY; + string ANIM_ATTACK2; + string ANIM_ATTACK2_READY; + string ANIM_DEATH; + string ANIM_DRAW_SWORD; + string ANIM_IDLE; + float ANIM_RATE; + string ANIM_RAWR; + string ANIM_REACH; + string ANIM_RECHARGE; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_STOMP; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int ATTEMPTING_RECHARGE; + string BASE_FRAMERATE; + float BATTERY_LIFE; + int CAN_FLEE; + string CHARGER_ORG; + float CHARGE_DROP_RATE; + string CHARGE_LEVEL; + string CL_SCRIPT_IDX; + int DID_FIRST_CHARGE; + int DID_INTRO; + string DMG_ELEF_TYPE; + int DMG_REACH; + int DMG_SMASH; + int DMG_SWING_BLADE; + int DMG_SWING_ZAP; + int DOING_RECHARGE; + int DOING_STOMP; + int DOT_REACH; + int FLICKER_DELAY; + int FLICKER_IN_COUNT; + int FLICKER_MODE; + float FREQ_CL_REFRESH; + float FREQ_REACH; + float FREQ_SMASH; + float FREQ_STOMP; + float GAME_PUSH_RATIO; + int GUARDIAN_BEAM_SWORD; + string GUARDIAN_CL_SCRIPT; + int GUARDIAN_TYPE; + int IMMUNE_VAMPIRE; + int IN_SWING; + int IS_UNHOLY; + int LHAND_IDX; + int MAX_CHARGE_LEVEL; + int MAX_RECHARGE_RANGE; + int MELEEING; + string NEEDS_CHARGER; + string NEXT_CHARGE_DROP; + string NEXT_CL_REFRESH; + string NEXT_REACH; + string NEXT_ROBOCOP_SOUND; + string NEXT_SMASH; + string NEXT_STOMP; + int NPC_FIGHTS_NPCS; + int NPC_FORCED_MOVEDEST; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int NPC_NO_ATTACK; + string NPC_NO_PLAYER_DMG; + int NUDGE_NEAR; + string NUDGE_POINT; + string NUDGE_TARGETS; + string OVERRIDE_SUSPEND_AI; + int PITCH_SWORD_OFF; + string REACH_TARGET; + int RHAND_IDX; + int ROBOCOP_IDX; + int ROBOCOP_MODE; + int ROBOCOP_NSOUNDS; + int SMASH_AOE; + int SMASH_ATTACK; + string SMASH_POINT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_RAWR; + string SOUND_REACH; + string SOUND_RECHARGE_START; + string SOUND_STEP1_LAND; + string SOUND_STEP1_START; + string SOUND_STEP2_LAND; + string SOUND_STEP2_START; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWING; + string SOUND_SWORD_DRAW; + string SOUND_SWORD_IDLE; + string SOUND_SWORD_OFF; + int STANCE_RANGE; + string STOMP_POINT; + string STOMP_TARGETS; + int SWIPE_AOE; + string SWORD_BEAM; + int SWORD_HILT_IDX; + int SWORD_STATE; + int SWORD_TIP_IDX; + + GuardianIron() + { + ANIM_WALK = "walk"; + ANIM_IDLE = "idle"; + ANIM_RUN = "run"; + ANIM_DEATH = "die"; + ANIM_ATTACK = "ready_attack1"; + ANIM_RAWR = "rawr"; + ANIM_ATTACK1 = "attack1"; + ANIM_ATTACK2 = "attack2"; + ANIM_ATTACK1_READY = "ready_attack1"; + ANIM_ATTACK2_READY = "ready_attack2"; + ANIM_DRAW_SWORD = "draw"; + ANIM_RECHARGE = "recharge"; + ANIM_REACH = "reach"; + ANIM_STOMP = "stomp"; + ANIM_SMASH = "smash"; + CAN_FLEE = 0; + IS_UNHOLY = 1; + NPC_NO_ATTACK = 1; + if ((StringToLower(GetMapName())).findFirst("shad_pal") >= 0) + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 10000; + } + else + { + NPC_GIVE_EXP = 5000; + } + ATTACK_MOVERANGE = 140; + ATTACK_RANGE = 200; + ATTACK_HITRANGE = 300; + GUARDIAN_TYPE = 1; + GUARDIAN_BEAM_SWORD = 1; + DMG_ELEF_TYPE = "lightning_effect"; + PITCH_SWORD_OFF = 100; + FREQ_CL_REFRESH = 30.0; + GAME_PUSH_RATIO = 0.25; + MAX_CHARGE_LEVEL = 50; + CHARGE_DROP_RATE = 1.0; + GUARDIAN_CL_SCRIPT = "monsters/guardian_iron_cl"; + BATTERY_LIFE = 60.0; + STANCE_RANGE = 500; + MAX_RECHARGE_RANGE = 400; + DMG_SWING_ZAP = 700; + DMG_SWING_BLADE = 400; + DMG_REACH = 500; + DOT_REACH = 100; + DMG_SMASH = 400; + SWIPE_AOE = 384; + SMASH_AOE = 128; + FREQ_STOMP = Random(10.0, 20.0); + FREQ_REACH = Random(10.0, 20.0); + FREQ_SMASH = Random(10.0, 30.0); + SWORD_HILT_IDX = 0; + SWORD_TIP_IDX = 1; + RHAND_IDX = 2; + LHAND_IDX = 3; + SOUND_STEP1_START = "monsters/guardian/joint_move1.wav"; + SOUND_STEP2_START = "monsters/guardian/joint_move2.wav"; + SOUND_STEP1_LAND = "monsters/guardian/step1.wav"; + SOUND_STEP2_LAND = "monsters/guardian/step2.wav"; + SOUND_ATTACK1 = "monsters/guardian/swing1.wav"; + SOUND_ATTACK2 = "monsters/guardian/swing2.wav"; + SOUND_SWING = "weapons/swinghuge.wav"; + SOUND_PAIN1 = "monsters/guardian/pain1.wav"; + SOUND_PAIN2 = "monsters/guardian/pain2.wav"; + SOUND_PAIN3 = "monsters/guardian/pain3.wav"; + SOUND_STRUCK1 = "monsters/guardian/struck1.wav"; + SOUND_STRUCK2 = "monsters/guardian/struck2.wav"; + SOUND_RAWR = "monsters/guardian/rawr.wav"; + SOUND_REACH = "monsters/guardian/sca_dragelec.wav"; + SOUND_RECHARGE_START = "monsters/guardian/sca_dragelec.wav"; + SOUND_SWORD_IDLE = "magic/bolt_loop.wav"; + SOUND_SWORD_DRAW = "magic/elecidlepop.wav"; + SOUND_SWORD_OFF = "magic/elecidle.wav"; + SOUND_DEATH = "monsters/guardian/death.wav"; + IMMUNE_VAMPIRE = 1; + Precache(SOUND_DEATH); + Precache("c-tele1.spr"); + Precache("flare1.spr"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(CHARGE_DROP_RATE); + if ((NEEDS_CHARGER)) + { + } + if ((DID_FIRST_CHARGE)) + { + } + if (!(ATTEMPTING_RECHARGE)) + { + } + if (GetGameTime() > NEXT_CHARGE_DROP) + { + } + CHARGE_LEVEL -= 1; + if (ANIM_RATE > 0.3) + { + update_anim_speed(); + LogDebug("losing_charge CHARGE_LEVEL ANIM_RATE"); + } + else + { + sword_off(); + do_recharge(); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(5.0); + if ((SUSPEND_AI)) + { + } + if (GetGameTime() > OVERRIDE_SUSPEND_AI) + { + } + npcatk_resume_ai(); + } + + void game_precache() + { + Precache(GUARDIAN_CL_SCRIPT); + } + + void OnSpawn() override + { + guardian_spawn(); + CatchSpeech("say_robocop", "robocop"); + } + + void guardian_spawn() + { + SetName("Iron Guardian"); + SetHealth(10000); + SetModel("monsters/guardian.mdl"); + SetWidth(75); + SetHeight(200); + SetDamageResistance("all", 0.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.25); + SetDamageResistance("stun", 0); + SetModelBody(0, 0); + SetRace("demon"); + SetBloodType("none"); + SetHearingSensitivity(1); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + if (!(true)) return; + if (G_GUARDIAN_CHARGER != "G_GUARDIAN_CHARGER") + { + CHARGER_ORG = G_GUARDIAN_CHARGER; + NEEDS_CHARGER = 1; + } + CHARGE_LEVEL = MAX_CHARGE_LEVEL; + ANIM_RATE = 1.0; + refresh_fx(); + ScheduleDelayedEvent(0.01, "beam_init"); + } + + void beam_init() + { + Effect("beam", "ents", "lgtning.spr", 10, GetOwner(), 1, GetOwner(), 2, Vector3(196, 196, 255), 0, 30, -1); + SWORD_BEAM = GetEntityIndex(m_hLastCreated); + } + + void frame_step1_start() + { + EmitSound(GetOwner(), 0, SOUND_STEP1_START, 10); + } + + void frame_step2_start() + { + EmitSound(GetOwner(), 0, SOUND_STEP2_START, 10); + } + + void frame_step1_land() + { + EmitSound(GetOwner(), 0, SOUND_STEP1_LAND, 10); + } + + void frame_step2_land() + { + EmitSound(GetOwner(), 0, SOUND_STEP2_LAND, 10); + } + + void frame_attack1_start() + { + IN_SWING = 1; + EmitSound(GetOwner(), 0, SOUND_ATTACK1, 10); + } + + void frame_attack2_start() + { + IN_SWING = 1; + EmitSound(GetOwner(), 0, SOUND_ATTACK1, 10); + } + + void frame_draw_flicker() + { + sword_on(); + } + + void frame_smash() + { + ANIM_ATTACK = "ready_attack2"; + SMASH_POINT = GetEntityProperty(GetOwner(), "attachpos"); + SMASH_POINT = "z"; + SMASH_POINT += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 96, 0)); + LogDebug("frame_smash SMASH_POINT distfromme Distance(SMASH_POINT, GetMonsterProperty("origin"))"); + ClientEvent("update", "all", CL_SCRIPT_IDX, "smash_fx", SMASH_POINT); + SMASH_ATTACK = 1; + DoDamage(SMASH_POINT, SMASH_AOE, DMG_SMASH, 1.0, 0); + } + + void frame_attack1_go() + { + if ((NPC_NO_ATTACK)) return; + string TARGS_IN_RANGE = FindEntitiesInSphere("enemy", ATTACK_HITRANGE); + if (!(TARGS_IN_RANGE != "none")) return; + PlayAnim("critical", ANIM_ATTACK1); + } + + void frame_attack2_go() + { + if ((NPC_NO_ATTACK)) return; + string TARGS_IN_RANGE = FindEntitiesInSphere("enemy", ATTACK_HITRANGE); + if (!(TARGS_IN_RANGE != "none")) return; + PlayAnim("critical", ANIM_ATTACK2); + } + + void frame_attack1_strike() + { + melee_attack(); + ANIM_ATTACK = ANIM_ATTACK2_READY; + SetIdleAnim(ANIM_ATTACK); + if (!(RandomInt(1, 3) == 1)) return; + ANIM_ATTACK = ANIM_ATTACK2; + } + + void frame_attack2_strike() + { + melee_attack(); + ANIM_ATTACK = ANIM_ATTACK1_READY; + SetIdleAnim(ANIM_ATTACK); + if (!(RandomInt(1, 3) == 1)) return; + ANIM_ATTACK = ANIM_ATTACK1; + } + + void frame_rawr_done() + { + RAWR_EVENT(); + } + + void frame_reach_start() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + } + + void frame_reach_strike() + { + npcatk_resume_ai(); + if ((ATTEMPTING_RECHARGE)) return; + EmitSound(GetOwner(), 0, SOUND_REACH, 10); + ClientEvent("update", "all", CL_SCRIPT_IDX, "grab_fx", GetEntityIndex(REACH_TARGET)); + ANIM_ATTACK = ANIM_ATTACK1; + DoDamage(REACH_TARGET, 1024, DMG_REACH, 1.0, DMG_ELEF_TYPE); + if (!(/* TODO: $get_takedmg */ $get_takedmg(REACH_TARGET, "lightning") < 0.9)) return; + ApplyEffect(REACH_TARGET, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_REACH); + AddVelocity(REACH_TARGET, /* TODO: $relvel */ $relvel(0, -3000, 110)); + } + + void frame_stomp_start() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + EmitSound(GetOwner(), 0, SOUND_STEP1_START, 10); + DOING_STOMP = 1; + NEXT_STOMP = GetGameTime(); + NEXT_STOMP += FREQ_STOMP; + NUDGE_NEAR = 1; + nudge_loop(); + ScheduleDelayedEvent(4.0, "end_nudge_loop"); + } + + void nudge_loop() + { + if (!(NUDGE_NEAR)) return; + ScheduleDelayedEvent(0.5, "nudge_loop"); + NUDGE_POINT = GetEntityProperty(GetOwner(), "svbonepos"); + NUDGE_POINT = "z"; + NUDGE_TARGETS = FindEntitiesInSphere("enemy", 64); + if (!(NUDGE_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(NUDGE_TARGETS, ";"); i++) + { + affect_nudge_targets(); + } + } + + void end_nudge_loop() + { + NUDGE_NEAR = 0; + DOING_STOMP = 0; + ANIM_ATTACK = "ready_attack1"; + } + + void affect_nudge_targets() + { + string CUR_TARG = GetToken(NUDGE_TARGETS, i, ";"); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, 200, 110)); + } + + void frame_stomp() + { + ANIM_ATTACK = "ready_attack1"; + DOING_STOMP = 0; + NUDGE_NEAR = 0; + STOMP_POINT = GetEntityProperty(GetOwner(), "svbonepos"); + STOMP_POINT = "z"; + STOMP_TARGETS = FindEntitiesInSphere("enemy", 256); + ClientEvent("update", "all", CL_SCRIPT_IDX, "stomp_fx", STOMP_POINT); + if (!(STOMP_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(STOMP_TARGETS, ";"); i++) + { + affect_stomp_targets(); + } + } + + void affect_stomp_targets() + { + string CUR_TARGET = GetToken(STOMP_TARGETS, i, ";"); + float STUN_DUR = 5.0; + if ((ATTEMPTING_RECHARGE)) + { + float STUN_DUR = 10.0; + } + ApplyEffect(CUR_TARGET, "effects/debuff_stun", STUN_DUR, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(STOMP_POINT, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + + void melee_attack() + { + IN_SWING = 0; + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + MELEEING = 1; + DoDamage(GetEntityProperty(GetOwner(), "attachpos"), SWIPE_AOE, DMG_SWING_ZAP, 1.0, 0); + DoDamage(GetEntityProperty(GetOwner(), "attachpos"), SWIPE_AOE, DMG_SWING_BLADE, 1.0, 0); + MELEEING = 0; + } + + void OnDamage(int damage) override + { + if ((param3).findFirst("lightning") >= 0) + { + Effect("glow", GetOwner(), Vector3(0, 255, 0), 64, 1, 1); + if (GetEntityHealth(GetOwner()) < GetEntityMaxHealth(GetOwner())) + { + HealEntity(GetOwner(), param2); + } + SetDamage("dmg"); + return; + CHARGE_LEVEL = MAX_CHARGE_LEVEL; + NEXT_CHARGE_DROP = GetGameTime(); + NEXT_CHARGE_DROP += BATTERY_LIFE; + if ((ATTEMPTING_RECHARGE)) + { + } + recharge_done(); + } + else + { + if ((param3).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 10); + } + } + + void cycle_up() + { + SetRoam(false); + refresh_fx(); + float GAME_TIME = GetGameTime(); + NEXT_SMASH = GAME_TIME; + NEXT_SMASH += FREQ_SMASH; + NEXT_STOMP = GAME_TIME; + NEXT_STOMP += FREQ_STOMP; + NEXT_REACH = GAME_TIME; + NEXT_REACH += FREQ_REACH; + if ((DID_INTRO)) return; + DID_INTRO = 1; + AS_ATTACKING = GAME_TIME; + AS_ATTACKING += 5.0; + SetMoveDest(m_hAttackTarget); + do_intro(); + if (CL_SCRIPT_IDX > -1) + { + refresh_fx(); + } + } + + void cycle_down() + { + SetRoam(true); + } + + void npc_selectattack() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 3.0; + if (ANIM_RATE < 1.0) + { + AS_ATTACKING += 5.0; + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((IsEntityAlive(GetOwner()))) + { + if (GetGameTime() > NEXT_CL_REFRESH) + { + refresh_fx(); + } + if ((ROBOCOP_MODE)) + { + } + if (GetGameTime() > NEXT_ROBOCOP_SOUND) + { + } + NEXT_ROBOCOP_SOUND = GetGameTime(); + NEXT_ROBOCOP_SOUND += Random(3.0, 10.0); + if (ROBOCOP_IDX > ROBOCOP_NSOUNDS) + { + ROBOCOP_IDX = 0; + } + EmitSound(GetOwner(), 0, ROBOCOP_ARRAY[int(ROBOCOP_IDX)], 10); + ROBOCOP_IDX += 1; + } + if ((SUSPEND_AI)) return; + if ((ATTEMPTING_RECHARGE)) return; + if ((DOING_RECHARGE)) return; + if ((DOING_STOMP)) return; + if (!(m_hAttackTarget != "unset")) return; + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + if (!(IN_SWING)) + { + } + if ((SWORD_STATE)) + { + } + if (GetGameTime() > NEXT_REACH) + { + } + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string HAND_ORG = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_LINE = TraceLine(HAND_ORG, TARG_ORG); + if (TRACE_LINE == TARG_ORG) + { + } + NEXT_REACH = GetGameTime(); + NEXT_REACH += FREQ_REACH; + REACH_TARGET = m_hAttackTarget; + do_reach(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetGameTime() > NEXT_STOMP) + { + ANIM_ATTACK = ANIM_STOMP; + NEXT_STOMP = GetGameTime(); + NEXT_STOMP += FREQ_STOMP; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetGameTime() > NEXT_SMASH) + { + ANIM_ATTACK = ANIM_SMASH; + NEXT_SMASH = GetGameTime(); + NEXT_SMASH += FREQ_STOMP; + } + } + + void do_intro() + { + PlayAnim("critical", ANIM_RAWR); + EmitSound(GetOwner(), 0, SOUND_RAWR, 10); + if ((NEEDS_CHARGER)) + { + ScheduleDelayedEvent(1.5, "do_recharge"); + ScheduleDelayedEvent(0.1, "intro_musak"); + } + else + { + ScheduleDelayedEvent(1.5, "draw_sword"); + } + } + + void intro_musak() + { + CallExternal("players", "ext_play_music", "media/Suspense07.mp3"); + } + + void do_recharge() + { + npcatk_suspend_ai(); + ATTEMPTING_RECHARGE = 0; + refresh_fx(); + do_recharge_fx(); + } + + void do_recharge_fx() + { + ScheduleDelayedEvent(8.0, "recharge_done"); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + SetMoveDest(CHARGER_ORG); + DOING_RECHARGE = 1; + SetIdleAnim(ANIM_RECHARGE); + SetMoveAnim(ANIM_RECHARGE); + PlayAnim("critical", ANIM_RECHARGE); + SetRoam(false); + ClientEvent("update", "all", CL_SCRIPT_IDX, "recharge_fx", CHARGER_ORG); + do_recharge_loop(); + } + + void do_recharge_loop() + { + if (!(DOING_RECHARGE)) return; + ScheduleDelayedEvent(0.1, "do_recharge_loop"); + if (!(CHARGE_LEVEL < MAX_CHARGE_LEVEL)) return; + CHARGE_LEVEL += 1; + update_anim_speed(); + } + + void recharge_done() + { + npcatk_resume_ai(); + NEXT_CHARGE_DROP = GetGameTime(); + NEXT_CHARGE_DROP += BATTERY_LIFE; + DOING_RECHARGE = 0; + CHARGE_LEVEL = MAX_CHARGE_LEVEL; + DID_FIRST_CHARGE = 1; + SetAnimFrameRate(1.0); + ANIM_RATE = 1.0; + SetMoveDest(m_hAttackTarget); + NPC_FORCED_MOVEDEST = 1; + draw_sword(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + float GAME_TIME = GetGameTime(); + NEXT_SMASH = GAME_TIME; + NEXT_SMASH += FREQ_SMASH; + NEXT_STOMP = GAME_TIME; + NEXT_STOMP += FREQ_STOMP; + NEXT_REACH = GAME_TIME; + } + + void draw_sword() + { + string CUR_TARG = m_hAttackTarget; + npcatk_suspend_ai(1.0); + SetMoveDest(CUR_TARG); + PlayAnim("critical", ANIM_DRAW_SWORD); + ScheduleDelayedEvent(5.0, "sword_on"); + } + + void sword_on() + { + if ((SWORD_STATE)) return; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 2.0; + ClientEvent("update", "all", CL_SCRIPT_IDX, "sword_on", 1); + FLICKER_IN_COUNT = 10; + FLICKER_DELAY = 0; + FLICKER_MODE = 1; + SWORD_STATE = 1; + sword_flicker_loop(); + EmitSound(GetOwner(), 0, SOUND_SWORD_DRAW, 10); + if (SOUND_SWORD_IDLE != "none") + { + // svplaysound: if ( SOUND_SWORD_IDLE isnot none) svplaysound 1 5 SOUND_SWORD_IDLE + EmitSound(1, 5, SOUND_SWORD_IDLE); + } + NPC_NO_ATTACK = 0; + } + + void sword_flicker_loop() + { + if (FLICKER_IN_COUNT == 0) + { + SetModelBody(1, SWORD_STATE); + if ((GUARDIAN_BEAM_SWORD)) + { + } + if ((SWORD_STATE)) + { + Effect("beam", "update", SWORD_BEAM, "brightness", 200); + } + else + { + Effect("beam", "update", SWORD_BEAM, "brightness", 0); + } + } + if (!(FLICKER_IN_COUNT >= 1)) return; + SetModelBody(1, FLICKER_MODE); + if ((FLICKER_MODE)) + { + SetModelBody(1, 1); + FLICKER_MODE = 0; + } + else + { + SetModelBody(1, 0); + FLICKER_MODE = 1; + } + FLICKER_IN_COUNT -= 1; + FLICKER_DELAY += 0.01; + FLICKER_DELAY("sword_flicker_loop"); + } + + void sword_off() + { + NPC_NO_ATTACK = 1; + SWORD_STATE = 0; + FLICKER_IN_COUNT = 10; + FLICKER_DELAY = 0; + FLICKER_MODE = 1; + sword_flicker_loop(); + EmitSound(GetOwner(), 0, SOUND_SWORD_OFF, 10); + if (SOUND_SWORD_IDLE != "none") + { + // svplaysound: if ( SOUND_SWORD_IDLE isnot none ) svplaysound 1 0 SOUND_SWORD_IDLE + EmitSound(1, 0, SOUND_SWORD_IDLE); + } + ClientEvent("update", "all", CL_SCRIPT_IDX, "sword_flicker_out"); + } + + void sword_off_instant() + { + ClientEvent("update", "all", CL_SCRIPT_IDX, "sword_flicker_out"); + if ((GUARDIAN_BEAM_SWORD)) + { + Effect("beam", "update", SWORD_BEAM, "brightness", 0); + Effect("beam", "update", SWORD_BEAM, "remove", 0.1); + } + if (SOUND_SWORD_IDLE != "none") + { + // svplaysound: if ( SOUND_SWORD_IDLE isnot none ) svplaysound 1 0 SOUND_SWORD_IDLE + EmitSound(1, 0, SOUND_SWORD_IDLE); + } + SetModelBody(1, 0); + SWORD_STATE = 0; + } + + void update_anim_speed() + { + ANIM_RATE = CHARGE_LEVEL; + ANIM_RATE /= MAX_CHARGE_LEVEL; + BASE_FRAMERATE = ANIM_RATE; + SetAnimFrameRate(ANIM_RATE); + } + + void OnDeath(CBaseEntity@ attacker) override + { + sword_off_instant(); + ClientEvent("update", "all", CL_SCRIPT_IDX, "remove_fx"); + if (StringToLower(GetMapName()) == "shad_palace") + { + CallExternal("players", "ext_set_map", "shad_palace", "from_aluhandra2", "from_shad_palace"); + } + } + + void refresh_fx() + { + NEXT_CL_REFRESH = GetGameTime(); + NEXT_CL_REFRESH += FREQ_CL_REFRESH; + ClientEvent("update", "all", CL_SCRIPT_IDX, "end_fx"); + ClientEvent("new", "all", GUARDIAN_CL_SCRIPT, GetEntityIndex(GetOwner()), 1, SWORD_STATE, FREQ_CL_REFRESH); + CL_SCRIPT_IDX = "game.script.last_sent_id"; + } + + void do_reach() + { + npcatk_suspend_ai(2.0); + PlayAnim("critical", ANIM_REACH); + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + ClientEvent("update", "all", CL_SCRIPT_IDX, "grab_sprite_on"); + } + + void game_dodamage() + { + if ((SMASH_ATTACK)) + { + if ((IsEntityAlive(param2))) + { + } + if (GetEntityRange(param2) < ATTACK_HITRANGE) + { + } + ApplyEffect(param2, "effects/debuff_stun", 10.0, GetEntityIndex(GetOwner())); + } + SMASH_ATTACK = 0; + } + + void OnSuspendAI() + { + OVERRIDE_SUSPEND_AI = GetGameTime(); + OVERRIDE_SUSPEND_AI += 45.0; + } + + void say_robocop() + { + if ((ROBOCOP_MODE)) return; + ROBOCOP_MODE = 1; + array ROBOCOP_ARRAY; + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_comequietortrouble.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_deadoralive.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_robocop_arrest.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_dropit.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_intro.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_lookingforme.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_miranda.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_drop_arrest.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_stayoutoftrouble.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_thankyou_gnight.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_youareunderarrest1.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_youarewantedformurder.wav"); + ROBOCOP_ARRAY.insertLast("monsters/guardian/robocop_yourmovecreep.wav"); + ROBOCOP_NSOUNDS = int(ROBOCOP_ARRAY.length()); + ROBOCOP_IDX = 0; + ROBOCOP_NSOUNDS -= 1; + NPC_FIGHTS_NPCS = 1; + if ((G_DEVELOPER_MODE)) + { + SetRace("human"); + NPC_NO_PLAYER_DMG = 1; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/guardian_iron_charger.as b/scripts/angelscript/monsters/guardian_iron_charger.as new file mode 100644 index 00000000..5ddb1eb2 --- /dev/null +++ b/scripts/angelscript/monsters/guardian_iron_charger.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class GuardianIronCharger : CGameScript +{ + void OnSpawn() override + { + SetGravity(0); + ScheduleDelayedEvent(0.01, "mark_position"); + } + + void mark_position() + { + SetGlobalVar("G_GUARDIAN_CHARGER", GetEntityOrigin(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/monsters/guardian_iron_cl.as b/scripts/angelscript/monsters/guardian_iron_cl.as new file mode 100644 index 00000000..d964bf38 --- /dev/null +++ b/scripts/angelscript/monsters/guardian_iron_cl.as @@ -0,0 +1,419 @@ +#pragma context client + +namespace MS +{ + +class GuardianIronCl : CGameScript +{ + string BURST_TYPE; + string CHARGER_GLOW_COLOR; + int CHARGER_GLOW_RAD; + int CHARGER_ON; + string CHARGER_SPRITE; + int CHARGER_SPRITE_NFRAMES; + int CYCLE_ANGLE; + int FLICKER_COUNT; + int FX_ACTIVE; + string FX_CHARGER_ORG; + string FX_OWNER; + string FX_REINIT; + string FX_SWORD_STATE; + int GRAB_SPRITE_ON; + string GRAB_TARG; + string GRAB_TARG_ORG; + string LHAND_INDEX; + string LHAND_ORG; + string PASSIVE_GLOW_COLOR; + int PASSIVE_GLOW_RAD; + string PASSIVE_LIGHT_ID; + string RHAND_INDEX; + string RHAND_ORG; + string SOUND_CHARGER; + string SOUND_STOMP; + string SOUND_ZAP; + float SPIT_SPRITE_DEATH_DELAY; + string STOMP_ORG; + string STOMP_SPRITE; + string SWORD_GLOW_COLOR; + int SWORD_GLOW_RAD; + string SWORD_HILT_INDEX; + string SWORD_LIGHT_ID; + int SWORD_ON; + string SWORD_ORG; + string SWORD_SPRITE; + string SWORD_TIP_INDEX; + + GuardianIronCl() + { + PASSIVE_GLOW_COLOR = Vector3(128, 128, 128); + PASSIVE_GLOW_RAD = 64; + SWORD_GLOW_RAD = 128; + SWORD_GLOW_COLOR = Vector3(128, 128, 255); + CHARGER_GLOW_RAD = 640; + CHARGER_GLOW_COLOR = Vector3(196, 196, 255); + CHARGER_SPRITE = "c-tele1.spr"; + CHARGER_SPRITE_NFRAMES = 25; + SWORD_SPRITE = "flare1.spr"; + SWORD_HILT_INDEX = "attachment0"; + SWORD_TIP_INDEX = "attachment1"; + RHAND_INDEX = "attachment2"; + LHAND_INDEX = "attachment3"; + SOUND_CHARGER = "magic/blackhole.wav"; + SOUND_ZAP = "magic/bolt_end.wav"; + SOUND_STOMP = "magic/boom.wav"; + STOMP_SPRITE = "fire1_fixed.spr"; + Precache(CHARGER_SPRITE); + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + SWORD_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX); + RHAND_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, RHAND_INDEX); + LHAND_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_INDEX); + if ((GRAB_SPRITE_ON)) + { + } + GRAB_TARG_ORG = /* TODO: $getcl */ $getcl(GRAB_TARG, "origin"); + } + + void client_activate() + { + FX_OWNER = param1; + FX_REINIT = param2; + FX_SWORD_STATE = param3; + SetCallback("render", "enable"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), PASSIVE_GLOW_RAD, PASSIVE_GLOW_COLOR, 1.0); + PASSIVE_LIGHT_ID = "game.script.last_light_id"; + if (!(FX_REINIT)) return; + if (!(FX_SWORD_STATE)) return; + sword_on(); + } + + void remove_fx() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(FX_OWNER, "exists"))) + { + remove_fx(); + } + else + { + ClientEffect("light", PASSIVE_LIGHT_ID, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), PASSIVE_GLOW_RAD, PASSIVE_GLOW_COLOR, 1.0); + if ((SWORD_ON)) + { + } + ClientEffect("light", SWORD_LIGHT_ID, SWORD_ORG, SWORD_GLOW_RAD, SWORD_GLOW_COLOR, 0.5); + if ((GRAB_SPRITE_ON)) + { + } + string BEAM_START = /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_INDEX); + int RND_BONE = RandomInt(0, 15); + string BEAM_END = /* TODO: $getcl */ $getcl(GRAB_TARG, "origin"); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.1, 5.0, 1.5, 255, 50, 30, Vector3(255, 255, 255)); + } + } + + void sword_on() + { + SWORD_ON = 1; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX), SWORD_GLOW_RAD, SWORD_GLOW_COLOR, 1.0); + SWORD_LIGHT_ID = "game.script.last_light_id"; + if (!(param1)) return; + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_HILT_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_TIP_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_TIP_INDEX), "setup_sword_sprite"); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, SWORD_TIP_INDEX), "setup_sword_sprite"); + } + + void sword_flicker_out() + { + FLICKER_COUNT = 10; + sword_flicker_loop(); + } + + void sword_flicker_loop() + { + FLICKER_COUNT -= 1; + if (FLICKER_COUNT == 1) + { + SWORD_ON = 0; + } + if (!(FLICKER_COUNT > 1)) return; + ScheduleDelayedEvent(0.1, "sword_flicker_loop"); + SWORD_ON = RandomInt(0, 1); + } + + void recharge_fx() + { + FX_CHARGER_ORG = param1; + ClientEffect("tempent", "sprite", CHARGER_SPRITE, FX_CHARGER_ORG, "setup_charger_sprite"); + ClientEffect("tempent", "sprite", CHARGER_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, RHAND_INDEX), "setup_charger_lhand_sprite", "update_lhand_sprite"); + ClientEffect("tempent", "sprite", CHARGER_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_INDEX), "setup_charger_rhand_sprite", "update_rhand_sprite"); + EmitSound3D(SOUND_CHARGER, 10, FX_CHARGER_ORG); + CHARGER_ON = 1; + ClientEffect("light", "new", FX_CHARGER_ORG, CHARGER_GLOW_RAD, CHARGER_GLOW_COLOR, 8.0); + ScheduleDelayedEvent(8.0, "end_charger_fx"); + SPIT_SPRITE_DEATH_DELAY = 10.0; + ScheduleDelayedEvent(1.0, "recharge_fx_spit_sprite"); + SPIT_SPRITE_DEATH_DELAY -= 1.0; + ScheduleDelayedEvent(2.0, "recharge_fx_spit_sprite"); + SPIT_SPRITE_DEATH_DELAY -= 1.0; + ScheduleDelayedEvent(3.0, "recharge_fx_spit_sprite"); + SPIT_SPRITE_DEATH_DELAY -= 1.0; + ScheduleDelayedEvent(4.0, "recharge_fx_spit_sprite"); + SPIT_SPRITE_DEATH_DELAY -= 1.0; + ScheduleDelayedEvent(5.0, "recharge_fx_spit_sprite"); + charger_fx_loop(); + } + + void end_charger_fx() + { + CHARGER_ON = 0; + } + + void charger_fx_loop() + { + if (!(CHARGER_ON)) return; + ScheduleDelayedEvent(0.1, "charger_fx_loop"); + string BEAM_START = FX_CHARGER_ORG; + string BEAM_END = /* TODO: $getcl */ $getcl(FX_OWNER, RHAND_INDEX); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.1, 10.0, 0.5, 255, 50, 30, Vector3(60, 60, 255)); + string BEAM_START = FX_CHARGER_ORG; + string BEAM_END = /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_INDEX); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.1, 10.0, 0.5, 255, 50, 30, Vector3(60, 60, 255)); + } + + void recharge_fx_spit_sprite() + { + EmitSound3D(SOUND_CHARGER, 10, FX_CHARGER_ORG); + ClientEffect("tempent", "sprite", CHARGER_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), "setup_spit_sprite", "update_spit_sprite"); + } + + void grab_sprite_on() + { + ClientEffect("tempent", "sprite", CHARGER_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, LHAND_INDEX), "setup_grab_sprite", "update_grab_sprite"); + } + + void grab_fx() + { + GRAB_SPRITE_ON = 1; + GRAB_TARG = param1; + EmitSound3D(SOUND_ZAP, 10, /* TODO: $getcl */ $getcl(GRAB_TARG, "origin")); + ClientEffect("tempent", "sprite", SWORD_SPRITE, /* TODO: $getcl */ $getcl(GRAB_TARG, "origin"), "setup_grab_targ_sprite", "update_grab_targ_sprite"); + ScheduleDelayedEvent(1.0, "grab_fx_off"); + } + + void grab_fx_off() + { + GRAB_SPRITE_ON = 0; + } + + void stomp_fx() + { + STOMP_ORG = param1; + CYCLE_ANGLE = 0; + BURST_TYPE = "stomp"; + EmitSound3D(SOUND_STOMP, 10, STOMP_ORG); + for (int i = 0; i < 17; i++) + { + make_stomp_flames(); + } + } + + void smash_fx() + { + STOMP_ORG = param1; + CYCLE_ANGLE = 0; + BURST_TYPE = "smash"; + EmitSound3D(SOUND_STOMP, 10, STOMP_ORG); + for (int i = 0; i < 17; i++) + { + make_stomp_flames(); + } + LogDebug("*** smash_fx STOMP_ORG"); + } + + void make_stomp_flames() + { + string FLAME_POS = STOMP_ORG; + FLAME_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 10, 0)); + ClientEffect("tempent", "sprite", STOMP_SPRITE, FLAME_POS, "setup_stomp_sprite"); + CYCLE_ANGLE += 20; + } + + void update_grab_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", LHAND_ORG); + } + + void update_grab_targ_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", GRAB_TARG_ORG); + } + + void update_spit_sprite() + { + string ROTATE_CYCLE = "game.tempent.fuser1"; + string RAISE_CYCLE = "game.tempent.fuser2"; + ROTATE_CYCLE += 5; + if (ROTATE_CYCLE > 359.99) + { + int ROTATE_CYCLE = 0; + } + RAISE_CYCLE += 0.5; + string SPRITE_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, ROTATE_CYCLE, 0), Vector3(0, 50, RAISE_CYCLE)); + ClientEffect("tempent", "set_current_prop", "origin", SPRITE_ORG); + ClientEffect("tempent", "set_current_prop", "fuser1", ROTATE_CYCLE); + ClientEffect("tempent", "set_current_prop", "fuser2", RAISE_CYCLE); + if (!(CHARGER_ON)) return; + if (!(RandomInt(1, 20) == 1)) return; + string BEAM_START = FX_CHARGER_ORG; + string BEAM_END = SPRITE_ORG; + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.1, 2.0, 2.0, 255, 50, 30, Vector3(60, 60, 255)); + } + + void update_rhand_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", RHAND_ORG); + } + + void update_lhand_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", LHAND_ORG); + } + + void setup_stomp_sprite() + { + if (BURST_TYPE == "stomp") + { + float FADE_DEL = 1.5; + int SPRITE_SPEED = 150; + } + else + { + float FADE_DEL = 1.0; + int SPRITE_SPEED = 100; + } + ClientEffect("tempent", "set_current_prop", "death_delay", FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void setup_grab_targ_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 3.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void setup_charger_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 8.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", CHARGER_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void setup_grab_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 4.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", CHARGER_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void setup_charger_lhand_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 8.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", CHARGER_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void setup_charger_rhand_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 8.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", CHARGER_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void setup_spit_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", SPIT_SPRITE_DEATH_DELAY); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 64, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", CHARGER_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "fuser1", 0); + ClientEffect("tempent", "set_current_prop", "fuser2", 0); + } + + void setup_sword_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + float RND_ANG = Random(0, 359); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(0, 30, -50))); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 1); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + +} + +} diff --git a/scripts/angelscript/monsters/hawk.as b/scripts/angelscript/monsters/hawk.as new file mode 100644 index 00000000..8a19d140 --- /dev/null +++ b/scripts/angelscript/monsters/hawk.as @@ -0,0 +1,15 @@ +#pragma context server + +namespace MS +{ + +class Hawk : CGameScript +{ + Hawk() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/hibari.as b/scripts/angelscript/monsters/hibari.as new file mode 100644 index 00000000..1683776d --- /dev/null +++ b/scripts/angelscript/monsters/hibari.as @@ -0,0 +1,25 @@ +#pragma context server + +namespace MS +{ + +class Hibari : CGameScript +{ + int PLAYING_DEAD; + + void OnSpawn() override + { + SetModel("monsters/hibari.mdl"); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + PLAYING_DEAD = 1; + SetHealth(9999); + SetIdleAnim("idle"); + SetMoveAnim("idle"); + PlayAnim("once", "idle"); + } + +} + +} diff --git a/scripts/angelscript/monsters/hobgoblin.as b/scripts/angelscript/monsters/hobgoblin.as new file mode 100644 index 00000000..c6f7a8f1 --- /dev/null +++ b/scripts/angelscript/monsters/hobgoblin.as @@ -0,0 +1,165 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class Hobgoblin : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_STUN; + int DMG_AXE; + int DMG_CHARGE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int MOVE_RANGE; + int NPC_BASE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BREATH; + string SOUND_DEATH; + int STEP_SIZE_NORM; + + Hobgoblin() + { + NPC_BASE_EXP = 150; + SOUND_ATTACK1 = "monsters/goblin/c_gargoyle_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_gargoyle_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_gargoyle_atk3.wav"; + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + STEP_SIZE_NORM = 36; + CAN_STUN = 1; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(20, 40); + ANIM_ATTACK = "swordswing1_L"; + DMG_AXE = RandomInt(40, 75); + DMG_CHARGE = 50; + ATTACK_HITCHANCE = 0.8; + SOUND_DEATH = "monsters/goblin/c_goblin_dead.wav"; + Precache(SOUND_DEATH); + } + + void goblin_spawn() + { + SetName("Hobgoblin"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(500); + SetRoam(true); + SetAnimFrameRate(1.5); + SetHearingSensitivity(4); + SetModel("monsters/goblin_new_boss.mdl"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetModelBody(2, 6); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("all", 0.7); + SetStat("parry", 120); + } + + void gob_jump_check() + { + if (!(GOB_JUMPER)) return; + if (!(GOB_JUMP_SCANNING)) return; + float GOB_HOP_DELAY = Random(2, 4); + GOB_HOP_DELAY("gob_jump_check"); + if (!(m_hAttackTarget != "unset")) return; + if ((IS_FLEEING)) return; + if ((SUSPEND_AI)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOBLIN_JUMPRANGE)) return; + string ME_Z = GetMonsterProperty("origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + if (ME_Z > TARG_Z) + { + string Z_DIFF = ME_Z; + ME_Z -= TARG_Z; + } + else + { + string Z_DIFF = TARG_Z; + Z_DIFF -= ME_Z; + } + if (Z_DIFF > ATTACK_RANGE) + { + PlayAnim("critical", ANIM_SMASH); + ScheduleDelayedEvent(0.1, "do_jump"); + } + } + + void do_jump() + { + SetStepSize(1000); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 800)); + ScheduleDelayedEvent(0.5, "push_forward"); + ScheduleDelayedEvent(1.0, "jump_done"); + } + + void push_forward() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void jump_done() + { + SetStepSize(STEP_SIZE_NORM); + SetMoveAnim(ANIM_RUN); + } + + void my_target_died() + { + ScheduleDelayedEvent(1.0, "npcatk_go_home"); + } + + void OnParry(CBaseEntity@ attacker) override + { + PlayAnim("critical", ANIM_PARRY); + // PlayRandomSound from: SOUND_PARRY1, SOUND_PARRY2, SOUND_PARRY3 + array sounds = {SOUND_PARRY1, SOUND_PARRY2, SOUND_PARRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(0.75, "swing_sword"); + } + + void swing_axe() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = ANIM_SWIPE; + } + + void swing_sword() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWORD, ATTACK_HITCHANCE, "slash"); + if (RandomInt(1, 3) == 1) + { + ANIM_ATTACK = ANIM_SMASH; + } + } + + void goblin_pre_spawn() + { + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 58; + MOVE_RANGE = 58; + } + +} + +} diff --git a/scripts/angelscript/monsters/hobgoblin_archer.as b/scripts/angelscript/monsters/hobgoblin_archer.as new file mode 100644 index 00000000..17bcaf6f --- /dev/null +++ b/scripts/angelscript/monsters/hobgoblin_archer.as @@ -0,0 +1,176 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class HobgoblinArcher : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FIREBALL; + int CAN_STUN; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DMG_AXE; + int DMG_BOW; + int DMG_CHARGE; + int DMG_KICK; + int DROPS_CONTAINER; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FREQ_KICK; + int GOB_CHARGER; + int GOB_JUMPER; + int KICK_ATTACK; + int KICK_HITCHANCE; + int KICK_RANGE; + int MOVE_RANGE; + string NEXT_KICK; + int NPC_BASE_EXP; + int NPC_RANGED; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BOW; + string SOUND_BREATH; + string SOUND_DEATH; + int STEP_SIZE_NORM; + + HobgoblinArcher() + { + NPC_BASE_EXP = 150; + SOUND_ATTACK1 = "monsters/goblin/c_gargoyle_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_gargoyle_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_gargoyle_atk3.wav"; + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + STEP_SIZE_NORM = 36; + SOUND_BOW = "weapons/bow/bow.wav"; + CAN_STUN = 0; + GOB_JUMPER = 0; + GOB_CHARGER = 0; + DMG_BOW = RandomInt(75, 150); + DMG_KICK = RandomInt(10, 20); + KICK_RANGE = 128; + KICK_HITCHANCE = 90; + FREQ_KICK = 10.0; + CAN_FIREBALL = 0; + NPC_RANGED = 1; + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_jagged"; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(20, 40); + ANIM_ATTACK = "shootorcbow"; + DMG_AXE = RandomInt(40, 75); + DMG_CHARGE = 50; + ATTACK_HITCHANCE = 0.95; + SOUND_DEATH = "monsters/goblin/c_goblin_dead.wav"; + Precache(SOUND_DEATH); + } + + void goblin_spawn() + { + SetName("Hobgoblin Ranger"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(500); + SetRoam(true); + SetAnimFrameRate(1.5); + SetHearingSensitivity(4); + SetModel("monsters/goblin_new_boss.mdl"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 1); + SetModelBody(1, 1); + SetModelBody(2, 4); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(0.01, "gob_extras"); + } + + void gob_extras() + { + MOVE_RANGE = 2000; + ATTACK_RANGE = 2000; + ATTACK_HITRANGE = 2000; + DROP_GOLD_AMT = RandomInt(30, 50); + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void shoot_arrow() + { + string TARGET_DIST = GetEntityRange(m_hLastSeen); + string FINAL_TARGET = GetEntityOrigin(m_hLastSeen); + FINAL_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, TARGET_DIST)); + TARGET_DIST /= 100; + SetAngles("add_view.pitch"); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, -4), "none", 900, DMG_BOW, 2, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + SetModelBody(3, 0); + EmitSound(GetOwner(), SOUND_BOW); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(3, 0); + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(GetEntityRange(m_hAttackTarget) < KICK_RANGE)) return; + if (!(GetGameTime() > NEXT_KICK)) return; + NEXT_KICK = GetGameTime(); + PlayAnim("once", "break"); + SetModelBody(3, 0); + NEXT_KICK += FREQ_KICK; + ANIM_ATTACK = ANIM_KICK; + } + + void kick_land() + { + EmitSound(GetOwner(), 0, SOUND_BOW, 10); + KICK_ATTACK = 1; + DoDamage(m_hAttackTarget, KICK_RANGE, DMG_KICK, KICK_HITCHANCE, "blunt"); + ANIM_ATTACK = ANIM_BOW; + npcatk_flee(m_hAttackTarget, 1024, 3.0); + } + + void OnFlee() + { + SetMoveSpeed(2.0); + } + + void npcatk_stopflee() + { + SetMoveSpeed(1.0); + } + + void game_dodamage() + { + if ((KICK_ATTACK)) + { + if ((param1)) + { + } + if (GetEntityRange(param2) < KICK_RANGE) + { + } + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + KICK_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/hobgoblin_berserker.as b/scripts/angelscript/monsters/hobgoblin_berserker.as new file mode 100644 index 00000000..c02171d9 --- /dev/null +++ b/scripts/angelscript/monsters/hobgoblin_berserker.as @@ -0,0 +1,165 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class HobgoblinBerserker : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_STUN; + int DMG_AXE; + int DMG_CHARGE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int MOVE_RANGE; + int NPC_BASE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BREATH; + string SOUND_DEATH; + int STEP_SIZE_NORM; + + HobgoblinBerserker() + { + NPC_BASE_EXP = 200; + SOUND_ATTACK1 = "monsters/goblin/c_gargoyle_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_gargoyle_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_gargoyle_atk3.wav"; + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + STEP_SIZE_NORM = 36; + CAN_STUN = 1; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(20, 40); + ANIM_ATTACK = "swordswing1_L"; + DMG_AXE = RandomInt(40, 75); + DMG_CHARGE = 50; + ATTACK_HITCHANCE = 0.8; + SOUND_DEATH = "monsters/goblin/c_goblin_dead.wav"; + Precache(SOUND_DEATH); + } + + void goblin_spawn() + { + SetName("Hobgoblin Berserker"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(1500); + SetRoam(true); + SetAnimFrameRate(2.0); + SetHearingSensitivity(4); + SetModel("monsters/goblin_new_boss.mdl"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 6); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("all", 0.7); + SetStat("parry", 120); + } + + void gob_jump_check() + { + if (!(GOB_JUMPER)) return; + if (!(GOB_JUMP_SCANNING)) return; + float GOB_HOP_DELAY = Random(2, 4); + GOB_HOP_DELAY("gob_jump_check"); + if (!(m_hAttackTarget != "unset")) return; + if ((IS_FLEEING)) return; + if ((SUSPEND_AI)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOBLIN_JUMPRANGE)) return; + string ME_Z = GetMonsterProperty("origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + if (ME_Z > TARG_Z) + { + string Z_DIFF = ME_Z; + ME_Z -= TARG_Z; + } + else + { + string Z_DIFF = TARG_Z; + Z_DIFF -= ME_Z; + } + if (Z_DIFF > ATTACK_RANGE) + { + PlayAnim("critical", ANIM_SMASH); + ScheduleDelayedEvent(0.1, "do_jump"); + } + } + + void do_jump() + { + SetStepSize(1000); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 800)); + ScheduleDelayedEvent(0.5, "push_forward"); + ScheduleDelayedEvent(1.0, "jump_done"); + } + + void push_forward() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void jump_done() + { + SetStepSize(STEP_SIZE_NORM); + SetMoveAnim(ANIM_RUN); + } + + void my_target_died() + { + ScheduleDelayedEvent(1.0, "npcatk_go_home"); + } + + void OnParry(CBaseEntity@ attacker) override + { + PlayAnim("critical", ANIM_PARRY); + // PlayRandomSound from: SOUND_PARRY1, SOUND_PARRY2, SOUND_PARRY3 + array sounds = {SOUND_PARRY1, SOUND_PARRY2, SOUND_PARRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(0.75, "swing_sword"); + } + + void swing_axe() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = ANIM_SWIPE; + } + + void swing_sword() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWORD, ATTACK_HITCHANCE, "slash"); + if (RandomInt(1, 3) == 1) + { + ANIM_ATTACK = ANIM_SMASH; + } + } + + void goblin_pre_spawn() + { + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 58; + MOVE_RANGE = 58; + } + +} + +} diff --git a/scripts/angelscript/monsters/horror.as b/scripts/angelscript/monsters/horror.as new file mode 100644 index 00000000..137f2c4f --- /dev/null +++ b/scripts/angelscript/monsters/horror.as @@ -0,0 +1,573 @@ +#pragma context server + +#include "monsters/base_flyer.as" +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Horror : CGameScript +{ + int AM_SUMMONED; + string ANIM_ATTACK; + string ANIM_BITE; + string ANIM_BREATH; + string ANIM_DEAD; + string ANIM_DEATH; + string ANIM_FLY; + string ANIM_GORE; + string ANIM_HOVER; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SPIRAL; + string ANIM_SPIT; + string ANIM_WALK; + int AS_SUMMON_TELE_CHECK; + float ATTACK_ACCURACY; + int ATTACK_BLIND_RANGE; + int ATTACK_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BREATH_AMMO; + int BREATH_DAMAGE_MAX; + int BREATH_DAMAGE_MIN; + string BREATH_SPRITE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_FLY; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int CAN_WANDER; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string FIRE_DELAY; + int FLEE_CHANCE; + int FLEE_DISTANCE; + int FLEE_HEALTH; + int FLIGHT_SCANNING; + string FLIGHT_STUCK; + string FLINCH_ANIM; + int FLINCH_CHANCE; + int FLINCH_DELAY; + int HUNT_AGRO; + int IS_UNHOLY; + int I_FLY; + string LAST_POS; + float LAST_PROG; + string LAST_TARGET; + int MONSTER_WIDTH; + int MOVE_RAGE; + string MOVE_RANGE; + string MY_OWNER; + string NEXT_HSTUCK_CHECK; + int NO_SPAWN_STUCK_CHECK; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + int NPC_NO_END_FLY; + string OLD_HSTUCK_POS; + int RETALIATE_CHANGETARGET_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_FLAP1; + string SOUND_FLAP2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_LAND; + string SOUND_PAIN0; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SPIT1; + string SOUND_SPIT2; + string SOUND_SPRAY; + string SPAWNED_ORG; + string SPITTING; + int SPIT_AMMO; + int SPIT_DAMAGE; + int SPRAYING_GAS; + + Horror() + { + AS_SUMMON_TELE_CHECK = 1; + NPC_NO_END_FLY = 1; + IS_UNHOLY = 1; + CAN_ATTACK = 1; + CAN_HUNT = 1; + HUNT_AGRO = 1; + CAN_FLY = 1; + CAN_HEAR = 1; + CAN_WANDER = 1; + ATTACK_BLIND_RANGE = 200; + CAN_RETALIATE = 1; + RETALIATE_CHANGETARGET_CHANCE = 100; + CAN_FLINCH = 1; + FLINCH_CHANCE = 10; + FLINCH_ANIM = "bite2"; + FLINCH_DELAY = 1; + CAN_FLEE = 1; + FLEE_HEALTH = 25; + FLEE_CHANCE = 25; + FLEE_DISTANCE = 2048; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 125; + MOVE_RAGE = 30; + ATTACK_ACCURACY = 0.8; + ATTACK_DAMAGE = 100; + SPIT_DAMAGE = 50; + BREATH_DAMAGE_MIN = 10; + BREATH_DAMAGE_MAX = 20; + ANIM_IDLE = "hover"; + ANIM_WALK = "fly1"; + ANIM_SPIRAL = "fly2"; + ANIM_FLY = "fly1"; + ANIM_RUN = "fly2"; + ANIM_HOVER = "hover"; + ANIM_ATTACK = "bite1"; + ANIM_SPIT = "bite1"; + ANIM_BITE = "bite1"; + ANIM_GORE = "bite2"; + ANIM_BREATH = "breath"; + ANIM_DEATH = "die"; + ANIM_DEAD = "dead"; + SOUND_IDLE1 = "controller/con_idle1.wav"; + SOUND_IDLE2 = "controller/con_idle2.wav"; + SOUND_IDLE3 = "controller/con_idle3.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_ATTACK3 = "controller/con_attack3.wav"; + SOUND_DEATH = "controller/con_die1.wav"; + SOUND_PAIN0 = "debris/bustflesh2.wav"; + SOUND_PAIN1 = "controller/con_pain1.wav"; + SOUND_PAIN2 = "controller/con_die2.wav"; + SOUND_SPIT1 = "bullchicken/bc_attack3.wav"; + SOUND_SPIT2 = "bullchicken/bc_attack2.wav"; + SOUND_SPRAY = "ambience/steamburst1.wav"; + SOUND_FLAP1 = "monsters/bat/flap_big1.wav"; + SOUND_FLAP2 = "monsters/bat/flap_big2.wav"; + SOUND_LAND = "player/pl_fallpain1.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 40; + SPIT_AMMO = 8; + BREATH_AMMO = 1; + BREATH_SPRITE = "poison_cloud.spr"; + Precache(BREATH_SPRITE); + MONSTER_WIDTH = 48; + NO_STUCK_CHECKS = 1; + Precache("monsters/edwardgorey.mdl"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if ((IS_HUNTING)) + { + } + npcatk_faceattacker(); + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + if ((false)) + { + } + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 200, 0)); + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if ((I_R_FROZEN)) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if ((SPITTING)) + { + if ((false)) + { + } + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + if (FLIGHT_STUCK > 4) + { + do_rand_tweedee(); + npcatk_suspend_ai(Random(0.3, 0.9)); + SetMoveDest(NEW_DEST); + ScheduleDelayedEvent(0.1, "horror_boost"); + TOTAL_STUCKAGE += 1; + ScheduleDelayedEvent(5.0, "remove_total_stuckage"); + if (TOTAL_STUCKAGE > 3) + { + if ((AM_SUMMONED)) + { + } + npc_suicide(); + } + FLIGHT_STUCK = 0; + } + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + if (!(SUSPEND_AI)) + { + SetAngles("face_origin"); + } + if (!(IS_FLEEING)) + { + } + if (!(SPITTING)) + { + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + } + float CUR_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + if (LAST_PROG >= CUR_PROG) + { + FLIGHT_STUCK += 1; + } + LAST_PROG = Distance(GetMonsterProperty("origin"), TARG_POS); + LAST_POS = GetMonsterProperty("origin"); + } + + void OnSpawn() override + { + SetName("Horror"); + SetHealth(500); + SetWidth(22); + SetHeight(22); + SetRoam(true); + SetFly(true); + I_FLY = 1; + 0 = float(0); + SetRace("demon"); + SetIdleAnim(ANIM_WALK); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("holy", 4.0); + SetDamageResistance("poison", 0.0); + SetHearingSensitivity(5); + SetModel("monsters/edwardgorey.mdl"); + NPC_GIVE_EXP = 200; + ScheduleDelayedEvent(1.0, "idle_sounds"); + FLIGHT_SCANNING = 1; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(false)) return; + LAST_TARGET = GetEntityIndex("ent_lastsseen"); + if (SPIT_AMMO >= 1) + { + SPITTING = 1; + MOVE_RANGE = 9999; + SetIdleAnim(ANIM_HOVER); + SetMoveAnim(ANIM_HOVER); + if (!(FIRE_DELAY)) + { + } + FIRE_DELAY = 1; + ScheduleDelayedEvent(0.75, "reset_fire_delay"); + PlayAnim("critical", ANIM_ATTACK); + // PlayRandomSound from: SOUND_SPIT1, SOUND_SPIT2 + array sounds = {SOUND_SPIT1, SOUND_SPIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SPIT_AMMO -= 1; + } + else + { + fly_mode(); + } + } + + void reset_fire_delay() + { + FIRE_DELAY = 0; + } + + void fly_mode() + { + MOVE_RANGE = 30; + SetIdleAnim(ANIM_HOVER); + if (BREATH_AMMO > 0) + { + ANIM_RUN = ANIM_SPIRAL; + } + else + { + ANIM_RUN = ANIM_FLY; + } + SetMoveAnim(ANIM_RUN); + } + + void reset_hunt_mode() + { + if (!(CYCLED_UP)) return; + ScheduleDelayedEvent(1.0, "reset_hunt_mode"); + if ((false)) return; + fly_mode(); + } + + void cycle_up() + { + reset_hunt_mode(); + } + + void npc_selectattack() + { + if (BREATH_AMMO >= 1) + { + ANIM_RUN = ANIM_SPIRAL; + ANIM_ATTACK = ANIM_BREATH; + BREATH_AMMO -= 1; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ANIM_RUN = ANIM_FLY; + int BITE_TYPE = RandomInt(1, 4); + if (BITE_TYPE > 1) + { + ANIM_ATTACK = ANIM_BITE; + } + if (BITE_TYPE == 1) + { + ANIM_ATTACK = ANIM_GORE; + } + } + + void attack1() + { + if ((SPITTING)) + { + TossProjectile("proj_poison_spit2", "view", "none", 500, SPIT_DAMAGE, 0.5, "none"); + SPITTING = 0; + NEXT_HSTUCK_CHECK = GetGameTime(); + NEXT_HSTUCK_CHECK += 3.0; + if (SPIT_AMMO == 0) + { + fly_mode(); + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, "slash"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RandomInt(1, 2) == 1) + { + ANIM_ATTACK = ANIM_GORE; + } + } + + void attack2() + { + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, "slash"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ANIM_ATTACK = ANIM_BITE; + if (!(GetEntityRange(m_hLastStruckByMe) <= ATTACK_HITRANGE)) return; + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/effect_push", 1, /* TODO: $relvel */ $relvel(-250, 50, 10), 0); + } + + void stop_spraying() + { + SPRAYING_GAS = 0; + } + + void spiral_charge() + { + if (RandomInt(1, 2) == 1) + { + ANIM_RUN = ANIM_FLY; + } + // PlayRandomSound from: SOUND_FLAP1, SOUND_FLAP2 + array sounds = {SOUND_FLAP1, SOUND_FLAP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void turret_horror() + { + // PlayRandomSound from: SOUND_FLAP1, SOUND_FLAP2 + array sounds = {SOUND_FLAP1, SOUND_FLAP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, -200)); + if ((AM_SUMMONED)) + { + CallExternal(MY_OWNER, "horror_died"); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetMoveAnim(ANIM_DEATH); + SetIdleAnim(ANIM_DEAD); + SetActionAnim(ANIM_DEATH); + EmitSound(GetOwner(), 0, SOUND_DEATH, 10); + PlayAnim("critical", ANIM_DEATH); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + string MY_HURT_STAGE = GetEntityMaxHealth(GetOwner()); + MY_HURT_STAGE /= 2; + if (MY_HEALTH >= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HEALTH <= MY_HURT_STAGE) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void breath_reload() + { + BREATH_AMMO += 1; + } + + void breath_attack() + { + Effect("tempent", "trail", BREATH_SPRITE, /* TODO: $relpos */ $relpos(0, 32, 0), /* TODO: $relpos */ $relpos(0, 200, 20), 1, 1, 8, 15, 0); + EmitSound(GetOwner(), 0, SOUND_SPRAY, 10); + SPRAYING_GAS = 1; + ScheduleDelayedEvent(1.0, "stop_spraying"); + if (GetEntityRange(m_hLastSeen) <= ATTACK_BLIND_RANGE) + { + } + if (!(BREATH_AMMO <= 0)) return; + ScheduleDelayedEvent(20.0, "breath_reload"); + } + + void my_target_died() + { + SPIT_AMMO += 2; + } + + void npcatk_stopflee() + { + ANIM_RUN = ANIM_SPIRAL; + } + + void idle_sounds() + { + float NEXT_SOUND = Random(3, 10); + NEXT_SOUND("idle_sounds"); + if (!(HUNT_LASTTARGET == �NONE�)) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + AM_SUMMONED = 1; + NO_SPAWN_STUCK_CHECK = 1; + SPAWNED_ORG = GetMonsterProperty("origin"); + ScheduleDelayedEvent(10.0, "check_stuck_summon"); + } + + void check_stuck_summon() + { + if ((SPITTING)) + { + ScheduleDelayedEvent(5.0, "check_stuck_summon"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((false)) + { + int EXIT_SUB = 1; + ScheduleDelayedEvent(5.0, "check_stuck_summon"); + } + if ((EXIT_SUB)) return; + if (GetMonsterProperty("origin") == SPAWNED_ORG) + { + npc_suicide(); + } + else + { + as_tele_stuck_check(); + } + } + + void remove_total_stuckage() + { + TOTAL_STUCKAGE -= 1; + } + + void chicken_run() + { + ScheduleDelayedEvent(0.1, "horror_boost"); + } + + void horror_boost() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 500, 0)); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(IsEntityAlive(HUNT_LASTTARGET))) return; + if ((SPITTING)) + { + if ((false)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetGameTime() > NEXT_HSTUCK_CHECK)) return; + NEXT_HSTUCK_CHECK = GetGameTime(); + NEXT_HSTUCK_CHECK += 0.5; + if (OLD_HSTUCK_POS == "OLD_HSTUCK_POS") + { + OLD_HSTUCK_POS = GetEntityOrigin(GetOwner()); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string L_POS = GetEntityOrigin(GetOwner()); + if (Distance(L_POS, OLD_HSTUCK_POS) < 32) + { + if (GetEntityRange(HUNT_LASTTARGET) > ATTACK_RANGE) + { + } + CUR_SOLUTION += 1; + if (CUR_SOLUTION == 1) + { + if (!(BAST_STUCK_DID_INIT)) + { + } + as_tele_stuck_check(); + OLD_HSTUCK_POS = L_POS; + } + else + { + CUR_SOLUTION = 0; + float RND_LEFT = Random(-1000, 1000); + float RND_FWD = Random(-2000, 1000); + float RND_UP = Random(-1000, 1000); + LogDebug("solution #2 RND_LEFT RND_FWD RND_UP"); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_LEFT, RND_FWD, RND_UP)); + } + } + else + { + OLD_HSTUCK_POS = L_POS; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/horror2.as b/scripts/angelscript/monsters/horror2.as new file mode 100644 index 00000000..839f0ff4 --- /dev/null +++ b/scripts/angelscript/monsters/horror2.as @@ -0,0 +1,85 @@ +#pragma context server + +#include "monsters/horror.as" + +namespace MS +{ + +class Horror2 : CGameScript +{ + int ATTACK_BLIND_RANGE; + int ATTACK_DAMAGE; + int BREATH_DAMAGE_MAX; + int BREATH_DAMAGE_MIN; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int FLIGHT_SCANNING; + int IS_UNHOLY; + int I_FLY; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + int SPIT_DAMAGE; + int SPORE_CLOUD_AMMO; + string SPORE_DELAY; + + Horror2() + { + NPC_BASE_EXP = 400; + IS_UNHOLY = 1; + ATTACK_BLIND_RANGE = 200; + ATTACK_DAMAGE = 200; + SPIT_DAMAGE = 100; + BREATH_DAMAGE_MIN = 100; + BREATH_DAMAGE_MAX = 200; + DROP_GOLD = 1; + DROP_GOLD_MIN = 30; + DROP_GOLD_MAX = 60; + } + + void OnSpawn() override + { + SetName("Elder Horror"); + SetHealth(1500); + SetDamageResistance("all", 0.75); + SetDamageResistance("holy", 0.5); + SetDamageResistance("poison", 0.0); + SetWidth(22); + SetHeight(22); + SetRoam(true); + SetFly(true); + I_FLY = 1; + 0 = float(0); + SetRace("demon"); + SetIdleAnim(ANIM_WALK); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(5); + SetModel("monsters/edwardgorey.mdl"); + SetModelBody(0, 1); + NPC_GIVE_EXP = 400; + ScheduleDelayedEvent(1.0, "idle_sounds"); + FLIGHT_SCANNING = 1; + SPORE_CLOUD_AMMO = 1; + SPORE_DELAY = GetGameTime(); + SPORE_DELAY += Random(3.0, 20.0); + } + + void my_target_died() + { + SPORE_CLOUD_AMMO = 1; + } + + void npc_targetsighted() + { + if (!(SPORE_CLOUD_AMMO > 0)) return; + if (!(GetEntityRange(m_hAttackTarget) > 256)) return; + if (!(GetGameTime() > SPORE_DELAY)) return; + PlayAnim("critical", ANIM_ATTACK); + string CLOUD_ORIGIN = GetEntityOrigin(m_hAttackTarget); + SpawnNPC("monsters/summon/npc_poison_cloud2", CLOUD_ORIGIN, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 75, 20.0, 2 + SPORE_CLOUD_AMMO -= 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/horror_fire.as b/scripts/angelscript/monsters/horror_fire.as new file mode 100644 index 00000000..8db8f779 --- /dev/null +++ b/scripts/angelscript/monsters/horror_fire.as @@ -0,0 +1,112 @@ +#pragma context server + +#include "monsters/horror.as" + +namespace MS +{ + +class HorrorFire : CGameScript +{ + int AM_SUMMONED; + string ANIM_ATTACK; + string BREATH_SPRITE; + int FLIGHT_SCANNING; + int I_FLY; + string MY_OWNER; + int NO_STUCK_CHECKS; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + string SPAWNED_ORG; + string SPITTING; + int SPORE_CLOUD_AMMO; + + HorrorFire() + { + NPC_BASE_EXP = 200; + BREATH_SPRITE = "3dmflaora.spr"; + } + + void OnSpawn() override + { + SetName("Flaming Horror"); + SetHealth(500); + SetDamageResistance("all", 1.0); + SetDamageResistance("holy", 1.0); + SetDamageResistance("fire", 0.0); + SetWidth(22); + SetHeight(22); + SetRoam(true); + SetFly(true); + I_FLY = 1; + 0 = float(0); + SetRace("demon"); + SetIdleAnim(ANIM_WALK); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(5); + SetModel("monsters/edwardgorey.mdl"); + SetModelBody(0, 1); + NPC_GIVE_EXP = 300; + ScheduleDelayedEvent(1.0, "idle_sounds"); + FLIGHT_SCANNING = 1; + SPORE_CLOUD_AMMO = 1; + } + + void OnPostSpawn() override + { + NO_STUCK_CHECKS = 0; + } + + void attack1() + { + if ((SPITTING)) + { + TossProjectile("proj_fire_xolt", "view", "none", 500, SPIT_DAMAGE, 0.5, "none"); + SPITTING = 0; + if (SPIT_AMMO == 0) + { + fly_mode(); + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, "slash"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RandomInt(1, 10) == 1) + { + ANIM_ATTACK = ANIM_GORE; + } + } + + void npcatk_anti_stuck() + { + if (!(STUCK_CHECK > 10)) return; + if ((IsEntityAlive(MY_OWNER))) + { + ScheduleDelayedEvent(0.1, "npc_suicide"); + } + } + + void game_dynamically_created() + { + MY_OWNER = param1; + AM_SUMMONED = 1; + SPAWNED_ORG = GetMonsterProperty("origin"); + ScheduleDelayedEvent(180.0, "do_vanish"); + } + + void do_vanish() + { + CallExternal(MY_OWNER, "horror_died"); + ScheduleDelayedEvent(0.1, "do_vanish2"); + } + + void do_vanish2() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/monsters/horror_fire2.as b/scripts/angelscript/monsters/horror_fire2.as new file mode 100644 index 00000000..7adfe0bb --- /dev/null +++ b/scripts/angelscript/monsters/horror_fire2.as @@ -0,0 +1,76 @@ +#pragma context server + +#include "monsters/horror_lightning2.as" + +namespace MS +{ + +class HorrorFire2 : CGameScript +{ + float BASE_MOVESPEED; + int BREATH_AMMO; + string BURST_ELEMENT; + int DMG_BITE; + int DMG_BLAST; + int DMG_DOT; + int DMG_PROJECTILE; + float DUR_DOT; + string EFFECT_DOT; + string ELEMENT_COLOR; + string FX_BURST_SCRIPT; + float PROJ_FOV; + string PROJ_SCRIPT; + int PROJ_SPEED; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_SPRAY; + int SPIT_AMMO; + + HorrorFire2() + { + DMG_PROJECTILE = 100; + PROJ_SCRIPT = "proj_fire_ball"; + PROJ_SPEED = 1000; + PROJ_FOV = 0.5; + FX_BURST_SCRIPT = "effects/sfx_fire_burst"; + EFFECT_DOT = "effects/dot_fire"; + DUR_DOT = 5.0; + DMG_DOT = 30; + DMG_BITE = 100; + DMG_BLAST = 200; + ELEMENT_COLOR = Vector3(255, 0, 0); + BURST_ELEMENT = "fire_effect"; + SOUND_SPRAY = "magic/volcano_start.wav"; + SOUND_SHOCK1 = "magic/fireball_strike.wav"; + SOUND_SHOCK2 = "magic/fireball_strike.wav"; + SOUND_SHOCK3 = "magic/fireball_strike.wav"; + } + + void horror_spawn() + { + SetName("Burning Horror"); + SetHealth(1000); + SetWidth(32); + SetHeight(32); + SetRoam(true); + SetRace("demon"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(11); + SetModel("monsters/edwardgorey2.mdl"); + SetModelBody(0, 1); + SetMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + PlayAnim("once", ANIM_WALK); + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetDamageResistance("fire", 0.0); + SetDamageResistance("holy", 2.0); + SetDamageResistance("cold", 2.0); + SPIT_AMMO = 3; + BREATH_AMMO = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/horror_fire2_ecaves.as b/scripts/angelscript/monsters/horror_fire2_ecaves.as new file mode 100644 index 00000000..01ca31a2 --- /dev/null +++ b/scripts/angelscript/monsters/horror_fire2_ecaves.as @@ -0,0 +1,88 @@ +#pragma context server + +#include "monsters/horror_lightning2.as" + +namespace MS +{ + +class HorrorFire2Ecaves : CGameScript +{ + float BASE_MOVESPEED; + int BREATH_AMMO; + string BURST_ELEMENT; + int BURST_PUSH; + int DMG_BITE; + int DMG_BLAST; + int DMG_DOT; + int DMG_PROJECTILE; + float DUR_DOT; + string EFFECT_DOT; + string ELEMENT_COLOR; + string FX_BURST_SCRIPT; + string NEXT_SWBEAMS_REFRESH; + float PROJ_FOV; + string PROJ_SCRIPT; + int PROJ_SPEED; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_SPRAY; + int SPIT_AMMO; + + HorrorFire2Ecaves() + { + DMG_PROJECTILE = 100; + PROJ_SCRIPT = "proj_fire_ball"; + PROJ_SPEED = 1000; + PROJ_FOV = 0.5; + FX_BURST_SCRIPT = "effects/sfx_fire_burst"; + EFFECT_DOT = "effects/dot_fire"; + DUR_DOT = 5.0; + DMG_DOT = 30; + DMG_BITE = 100; + DMG_BLAST = 200; + ELEMENT_COLOR = Vector3(255, 0, 0); + BURST_ELEMENT = "fire_effect"; + BURST_PUSH = 1; + SOUND_SPRAY = "magic/volcano_start.wav"; + SOUND_SHOCK1 = "magic/fireball_strike.wav"; + SOUND_SHOCK2 = "magic/fireball_strike.wav"; + SOUND_SHOCK3 = "magic/fireball_strike.wav"; + } + + void horror_spawn() + { + SetName("Burning Horror"); + SetHealth(1000); + SetWidth(32); + SetHeight(32); + SetRoam(true); + SetRace("demon"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(11); + SetModel("monsters/horror1_ecave.mdl"); + SetModelBody(0, 0); + SetMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + PlayAnim("once", ANIM_WALK); + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetDamageResistance("fire", 0.0); + SetDamageResistance("holy", 2.0); + SetDamageResistance("cold", 2.0); + SPIT_AMMO = 3; + BREATH_AMMO = 1; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(GetGameTime() > NEXT_SWBEAMS_REFRESH)) return; + NEXT_SWBEAMS_REFRESH = GetGameTime(); + NEXT_SWBEAMS_REFRESH += 10.2; + Effect("beam", "follow", "lgtning.spr", GetOwner(), 1, 30, 10.0, 200, Vector3(255, 0, 0)); + Effect("beam", "follow", "lgtning.spr", GetOwner(), 1, 10, 10.0, 200, Vector3(255, 128, 0)); + } + +} + +} diff --git a/scripts/angelscript/monsters/horror_gravfly.as b/scripts/angelscript/monsters/horror_gravfly.as new file mode 100644 index 00000000..b00bb17f --- /dev/null +++ b/scripts/angelscript/monsters/horror_gravfly.as @@ -0,0 +1,338 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_flyer_grav.as" + +namespace MS +{ + +class HorrorGravfly : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BITE1; + string ANIM_BITE2; + string ANIM_BREATH; + string ANIM_DEATH; + string ANIM_FLY; + string ANIM_HOVER; + string ANIM_IDLE; + string ANIM_ROLL; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BALL_DMG; + int BALL_SIZE; + float BASE_MOVESPEED; + int BREATH_AMMO; + string BREATH_ATTACK; + string BURST_POS; + string BURST_TARGS; + int DMG_BITE; + int DMG_BLAST; + int DMG_PROJECTILE; + int DOT_SHOCK; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + float FREQ_HORROR_BOOST; + int IS_UNHOLY; + int MAX_SPIT_AMMO; + string NEXT_HORROR_BOOST; + int NPC_GIVE_EXP; + string NPC_HALF_HEALTH; + string PROJECTILE_ATTACK; + float PROJ_FOV; + string PROJ_SCRIPT; + int PROJ_SPEED; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_FLAP1; + string SOUND_FLAP2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN0; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_SPIT1; + string SOUND_SPIT2; + string SOUND_SPRAY; + int SPIT_AMMO; + + HorrorGravfly() + { + ANIM_WALK = "fly1"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "fly1"; + ANIM_FLY = "fly1"; + ANIM_ROLL = "fly2"; + ANIM_ATTACK = "bite1"; + ANIM_BITE1 = "bite1"; + ANIM_BITE2 = "bite2"; + ANIM_DEATH = "die"; + ANIM_BREATH = "breath"; + ANIM_HOVER = "hover"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 40; + DROP_GOLD_MAX = 200; + NPC_GIVE_EXP = 400; + IS_UNHOLY = 1; + SPIT_AMMO = 3; + MAX_SPIT_AMMO = 3; + BREATH_AMMO = 1; + BALL_SIZE = 5; + BALL_DMG = 100; + DMG_PROJECTILE = 100; + PROJ_SCRIPT = "proj_poison_spit2"; + PROJ_SPEED = 500; + PROJ_FOV = 0.5; + FREQ_HORROR_BOOST = Random(5.0, 10.0); + DOT_SHOCK = 15; + DMG_BLAST = 100; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 60; + ATTACK_HITCHANCE = 0.8; + DMG_BITE = 100; + SOUND_IDLE1 = "controller/con_idle1.wav"; + SOUND_IDLE2 = "controller/con_idle2.wav"; + SOUND_IDLE3 = "controller/con_idle3.wav"; + SOUND_SPIT1 = "bullchicken/bc_attack3.wav"; + SOUND_SPIT2 = "bullchicken/bc_attack2.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_ATTACK3 = "controller/con_attack3.wav"; + SOUND_DEATH = "controller/con_die1.wav"; + SOUND_PAIN0 = "debris/bustflesh2.wav"; + SOUND_PAIN1 = "controller/con_pain1.wav"; + SOUND_PAIN2 = "controller/con_die2.wav"; + SOUND_SPRAY = "controller/con_attack3.wav"; + SOUND_FLAP1 = "monsters/bat/flap_big1.wav"; + SOUND_FLAP2 = "monsters/bat/flap_big2.wav"; + SOUND_SPRAY = "ambient/steamburst1.wav"; + SOUND_SHOCK1 = "bullchicken/bc_attack1.wav"; + SOUND_SHOCK2 = "bullchicken/bc_attack2.wav"; + SOUND_SHOCK3 = "bullchicken/bc_attack3.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(30.0); + if (SPIT_AMMO < MAX_SPIT_AMMO) + { + } + if (SPIT_AMMO == 0) + { + if (m_hAttackTarget != "unset") + { + } + if (GetEntityRange(m_hAttackTarget) < 200) + { + } + npcatk_flee(m_hAttackTarget, 512, 1.0); + } + SPIT_AMMO += 1; + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(60.0); + if (BREATH_AMMO <= 0) + { + } + BREATH_AMMO = 1; + } + + void OnSpawn() override + { + SetName("Enraged Horror"); + SetHealth(1000); + SetWidth(32); + SetHeight(32); + SetRoam(true); + SetRace("demon"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(11); + SetModel("monsters/edwardgorey2.mdl"); + SetMoveSpeed(3.0); + BASE_MOVESPEED = 3.0; + PlayAnim("once", ANIM_WALK); + if (!(true)) return; + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 2.0); + SPIT_AMMO = 3; + BREATH_AMMO = 1; + } + + void OnPostSpawn() override + { + NPC_HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + NPC_HALF_HEALTH *= 0.5; + } + + void idle_sounds() + { + if (!(IsEntityAlive(GetOwner()))) return; + float NEXT_SOUND = Random(3, 10); + NEXT_SOUND("idle_sounds"); + if (!(m_hAttackTarget == "none")) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npc_targetsighted() + { + if (SPIT_AMMO > 0) + { + ANIM_ATTACK = ANIM_BREATH; + PROJECTILE_ATTACK = 1; + BREATH_ATTACK = 0; + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + PlayAnim("once", ANIM_ATTACK); + int EXIT_SUB = 1; + } + else + { + if (BREATH_AMMO > 0) + { + ANIM_ATTACK = ANIM_BREATH; + ANIM_WALK = ANIM_ROLL; + ANIM_RUN = ANIM_ROLL; + PROJECTILE_ATTACK = 0; + BREATH_ATTACK = 1; + int EXIT_SUB = 1; + } + else + { + if (ANIM_ATTACK != ANIM_BITE1) + { + if (ANIM_ATTACK != ANIM_BITE2) + { + } + ANIM_ATTACK = ANIM_BITE1; + } + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + BREATH_ATTACK = 0; + PROJECTILE_ATTACK = 0; + } + } + if ((EXIT_SUB)) return; + if (!(GetGameTime() > NEXT_HORROR_BOOST)) return; + NEXT_HORROR_BOOST = GetGameTime(); + NEXT_HORROR_BOOST += FREQ_HORROR_BOOST; + EmitSound(GetOwner(), 0, SOUND_FLAP, 10); + PlayAnim("once", ANIM_ROLL); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 0)); + } + + void breath_attack() + { + if ((PROJECTILE_ATTACK)) + { + TossProjectile(PROJ_SCRIPT, "view", "none", PROJ_SPEED, DMG_PROJECTILE, PROJ_FOV, "none"); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SPIT_AMMO -= 1; + } + if ((BREATH_ATTACK)) + { + Effect("glow", GetOwner(), Vector3(255, 255, 0), 768, 2, 2); + EmitSound(GetOwner(), 0, SOUND_SPRAY, 10); + BURST_POS = GetEntityOrigin(GetOwner()); + BURST_POS = "z"; + ClientEvent("new", "all", "effects/sfx_poison_burst", BURST_POS, 256, 1, Vector3(0, 255, 0)); + DoDamage(BURST_POS, 256, DMG_BLAST, 1.0, 0); + BREATH_AMMO -= 1; + BURST_TARGS = FindEntitiesInSphere("enemy", 256); + if (BURST_TARGS != "none") + { + } + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + burst_affect_targets(); + } + } + } + + void burst_affect_targets() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + + void attack1() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, ATTACK_HITCHANCE, "slash"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RandomInt(1, 5) == 1) + { + ANIM_ATTACK = ANIM_BITE2; + } + } + + void attack2() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, ATTACK_HITCHANCE, "slash"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ANIM_ATTACK = ANIM_BITE1; + if (!(GetEntityRange(m_hAttackTarget) <= ATTACK_HITRANGE)) return; + ApplyEffect(m_hAttackTarget, "effects/dot_poison_blind", 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(-550, 50, 10)); + } + + void spiral_charge() + { + // PlayRandomSound from: SOUND_FLAP1, SOUND_FLAP2 + array sounds = {SOUND_FLAP1, SOUND_FLAP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void turret_horror() + { + // PlayRandomSound from: SOUND_FLAP1, SOUND_FLAP2 + array sounds = {SOUND_FLAP1, SOUND_FLAP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + if (MY_HEALTH >= NPC_HALF_HEALTH) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HEALTH < NPC_HALF_HEALTH) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void my_target_died() + { + SPIT_AMMO = 3; + BREATH_AMMO = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/horror_lightning.as b/scripts/angelscript/monsters/horror_lightning.as new file mode 100644 index 00000000..899b81a8 --- /dev/null +++ b/scripts/angelscript/monsters/horror_lightning.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "monsters/horror_lightning2.as" + +namespace MS +{ + +class HorrorLightning : CGameScript +{ + float BASE_MOVESPEED; + int BREATH_AMMO; + string BURST_ELEMENT; + int DMG_BITE; + int DMG_BLAST; + int DMG_DOT; + int DMG_PROJECTILE; + float DUR_DOT; + string EFFECT_DOT; + string ELEMENT_COLOR; + string FX_BURST_SCRIPT; + int NPC_BASE_EXP; + float PROJ_FOV; + string PROJ_SCRIPT; + int PROJ_SPEED; + int SPIT_AMMO; + + HorrorLightning() + { + NPC_BASE_EXP = 200; + DMG_PROJECTILE = 50; + PROJ_SCRIPT = "proj_lightning_ball"; + PROJ_SPEED = 200; + PROJ_FOV = 0.5; + FX_BURST_SCRIPT = "effects/sfx_shock_burst"; + EFFECT_DOT = "effects/dot_lightning"; + DUR_DOT = 5.0; + DMG_DOT = 30; + DMG_BITE = 100; + DMG_BLAST = 100; + ELEMENT_COLOR = Vector3(255, 255, 0); + BURST_ELEMENT = "lightning_effect"; + } + + void horror_spawn() + { + SetName("Lightning Horror"); + SetHealth(500); + SetWidth(32); + SetHeight(32); + SetRoam(true); + SetRace("demon"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(11); + SetModel("monsters/edwardgorey2.mdl"); + SetModelBody(0, 2); + SetMoveSpeed(3.0); + BASE_MOVESPEED = 3.0; + PlayAnim("once", ANIM_WALK); + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("holy", 2.0); + SetDamageResistance("poison", 2.0); + SetDamageResistance("acid", 2.0); + SPIT_AMMO = 3; + BREATH_AMMO = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/horror_lightning2.as b/scripts/angelscript/monsters/horror_lightning2.as new file mode 100644 index 00000000..831a933d --- /dev/null +++ b/scripts/angelscript/monsters/horror_lightning2.as @@ -0,0 +1,367 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_flyer_grav.as" + +namespace MS +{ + +class HorrorLightning2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BITE1; + string ANIM_BITE2; + string ANIM_BREATH; + string ANIM_DEATH; + string ANIM_FLY; + string ANIM_HOVER; + string ANIM_IDLE; + string ANIM_ROLL; + string ANIM_RUN; + string ANIM_WALK; + int AS_SUMMON_TELE_CHECK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BALL_DMG; + int BALL_SIZE; + float BASE_MOVESPEED; + string BFLY_AGRESSIVE; + int BREATH_AMMO; + string BREATH_ATTACK; + string BURST_ELEMENT; + string BURST_POS; + string BURST_TARGS; + int DMG_BITE; + int DMG_BLAST; + int DMG_DOT; + int DMG_PROJECTILE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + float DUR_DOT; + string EFFECT_DOT; + string ELEMENT_COLOR; + float FREQ_HORROR_BOOST; + string FX_BURST_SCRIPT; + int IS_UNHOLY; + int MAX_SPIT_AMMO; + string NEXT_HORROR_BOOST; + int NPC_GIVE_EXP; + string NPC_HALF_HEALTH; + string PROJECTILE_ATTACK; + float PROJ_FOV; + string PROJ_SCRIPT; + int PROJ_SPEED; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_FLAP1; + string SOUND_FLAP2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN0; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_SPIT1; + string SOUND_SPIT2; + string SOUND_SPRAY; + int SPIT_AMMO; + + HorrorLightning2() + { + ANIM_WALK = "fly1"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "fly1"; + ANIM_FLY = "fly1"; + ANIM_ROLL = "fly2"; + ANIM_ATTACK = "bite1"; + ANIM_BITE1 = "bite1"; + ANIM_BITE2 = "bite2"; + ANIM_DEATH = "die"; + ANIM_BREATH = "breath"; + ANIM_HOVER = "hover"; + AS_SUMMON_TELE_CHECK = 1; + DMG_PROJECTILE = 100; + PROJ_SCRIPT = "proj_lightning_ball"; + PROJ_SPEED = 200; + PROJ_FOV = 0.5; + FX_BURST_SCRIPT = "effects/sfx_shock_burst"; + EFFECT_DOT = "effects/dot_lightning"; + DUR_DOT = 5.0; + DMG_DOT = 30; + DMG_BITE = 100; + DMG_BLAST = 200; + ELEMENT_COLOR = Vector3(255, 255, 0); + BURST_ELEMENT = "lightning_effect"; + DMG_PROJECTILE = 100; + PROJ_SCRIPT = "proj_lightning_ball"; + PROJ_SPEED = 500; + PROJ_FOV = 0.5; + DROP_GOLD = 1; + DROP_GOLD_MIN = 40; + DROP_GOLD_MAX = 200; + NPC_GIVE_EXP = 400; + IS_UNHOLY = 1; + SPIT_AMMO = 3; + MAX_SPIT_AMMO = 3; + BREATH_AMMO = 1; + BALL_SIZE = 5; + BALL_DMG = 100; + FREQ_HORROR_BOOST = Random(5.0, 10.0); + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 60; + ATTACK_HITCHANCE = 0.8; + DMG_BITE = 100; + SOUND_IDLE1 = "controller/con_idle1.wav"; + SOUND_IDLE2 = "controller/con_idle2.wav"; + SOUND_IDLE3 = "controller/con_idle3.wav"; + SOUND_SPIT1 = "bullchicken/bc_attack3.wav"; + SOUND_SPIT2 = "bullchicken/bc_attack2.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_ATTACK3 = "controller/con_attack3.wav"; + SOUND_DEATH = "controller/con_die1.wav"; + SOUND_PAIN0 = "debris/bustflesh2.wav"; + SOUND_PAIN1 = "controller/con_pain1.wav"; + SOUND_PAIN2 = "controller/con_die2.wav"; + SOUND_SPRAY = "controller/con_attack3.wav"; + SOUND_FLAP1 = "monsters/bat/flap_big1.wav"; + SOUND_FLAP2 = "monsters/bat/flap_big2.wav"; + SOUND_SPRAY = "debris/beamstart1.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + } + + void OnSpawn() override + { + horror_spawn(); + } + + void horror_spawn() + { + SetName("Enraged Electrical Horror"); + SetHealth(1000); + SetWidth(32); + SetHeight(32); + SetRoam(true); + SetRace("demon"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(11); + SetModel("monsters/edwardgorey2.mdl"); + SetModelBody(0, 2); + SetMoveSpeed(3.0); + BASE_MOVESPEED = 3.0; + PlayAnim("once", ANIM_WALK); + if (!(true)) return; + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetDamageResistance("poison", 2.0); + SetDamageResistance("holy", 2.0); + SetDamageResistance("lightning", 0.0); + SPIT_AMMO = 3; + BREATH_AMMO = 1; + } + + void OnPostSpawn() override + { + NPC_HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + NPC_HALF_HEALTH *= 0.5; + } + + void idle_sounds() + { + if (!(IsEntityAlive(GetOwner()))) return; + float NEXT_SOUND = Random(3, 10); + NEXT_SOUND("idle_sounds"); + if (!(m_hAttackTarget == "none")) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npc_targetsighted() + { + if (SPIT_AMMO > 0) + { + ANIM_ATTACK = ANIM_BREATH; + PROJECTILE_ATTACK = 1; + BREATH_ATTACK = 0; + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + PlayAnim("once", ANIM_ATTACK); + BFLY_AGRESSIVE = 0; + int EXIT_SUB = 1; + } + else + { + BFLY_AGRESSIVE = 1; + if (BREATH_AMMO > 0) + { + ANIM_ATTACK = ANIM_BREATH; + ANIM_WALK = ANIM_ROLL; + ANIM_RUN = ANIM_ROLL; + PROJECTILE_ATTACK = 0; + BREATH_ATTACK = 1; + int EXIT_SUB = 1; + } + else + { + if (ANIM_ATTACK != ANIM_BITE1) + { + if (ANIM_ATTACK != ANIM_BITE2) + { + } + ANIM_ATTACK = ANIM_BITE1; + } + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + BREATH_ATTACK = 0; + PROJECTILE_ATTACK = 0; + } + } + if ((EXIT_SUB)) return; + if (!(GetGameTime() > NEXT_HORROR_BOOST)) return; + NEXT_HORROR_BOOST = GetGameTime(); + NEXT_HORROR_BOOST += FREQ_HORROR_BOOST; + EmitSound(GetOwner(), 0, SOUND_FLAP, 10); + PlayAnim("once", ANIM_ROLL); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 0)); + } + + void breath_attack() + { + if ((PROJECTILE_ATTACK)) + { + TossProjectile(PROJ_SCRIPT, "view", "none", PROJ_SPEED, DMG_PROJECTILE, PROJ_FOV, "none"); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SPIT_AMMO -= 1; + if (SPIT_AMMO <= 0) + { + ScheduleDelayedEvent(30.0, "reload_spit"); + } + } + if ((BREATH_ATTACK)) + { + ScheduleDelayedEvent(15.0, "reload_breath"); + Effect("glow", GetOwner(), ELEMENT_COLOR, 768, 2, 2); + EmitSound(GetOwner(), 0, SOUND_SPRAY, 10); + BURST_POS = GetEntityOrigin(GetOwner()); + BURST_POS = "z"; + ClientEvent("new", "all", FX_BURST_SCRIPT, BURST_POS, 256, 1, ELEMENT_COLOR); + DoDamage(BURST_POS, 256, DMG_BLAST, 1.0, 0); + BREATH_AMMO -= 1; + BURST_TARGS = FindEntitiesInSphere("enemy", 256); + if (BURST_TARGS != "none") + { + } + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + burst_affect_targets(); + } + } + } + + void reload_breath() + { + BREATH_AMMO = 1; + } + + void burst_affect_targets() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + ApplyEffect(CUR_TARG, EFFECT_DOT, DUR_DOT, GetEntityIndex(GetOwner()), DMG_DOT); + if (!(BURST_PUSH)) return; + repel_target(CUR_TARG, Vector3(0, 1000, 110), BURST_POS); + } + + void repel_target() + { + string L_TARG_ORG = GetEntityOrigin(param1); + string L_MY_ORG = param3; + string L_TARG_ANG = /* TODO: $angles */ $angles(L_MY_ORG, L_TARG_ORG); + string L_NEW_YAW = L_TARG_ANG; + SetVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, L_NEW_YAW, 0), param2)); + } + + void attack1() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, ATTACK_HITCHANCE, "slash"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RandomInt(1, 2) == 1) + { + ANIM_ATTACK = ANIM_BITE2; + } + } + + void attack2() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, ATTACK_HITCHANCE, "slash"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ANIM_ATTACK = ANIM_BITE1; + ApplyEffect(m_hAttackTarget, EFFECT_DOT, DUR_DOT, GetEntityIndex(GetOwner()), DMG_DOT); + if (!(GetEntityRange(m_hAttackTarget) <= ATTACK_HITRANGE)) return; + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(-550, 50, 10)); + } + + void spiral_charge() + { + // PlayRandomSound from: SOUND_FLAP1, SOUND_FLAP2 + array sounds = {SOUND_FLAP1, SOUND_FLAP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void turret_horror() + { + // PlayRandomSound from: SOUND_FLAP1, SOUND_FLAP2 + array sounds = {SOUND_FLAP1, SOUND_FLAP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string MY_HEALTH = GetEntityHealth(GetOwner()); + if (MY_HEALTH >= NPC_HALF_HEALTH) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN1}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (MY_HEALTH < NPC_HALF_HEALTH) + { + // PlayRandomSound from: SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2 + array sounds = {SOUND_PAIN0, SOUND_PAIN0, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void my_target_died() + { + SPIT_AMMO = 3; + BREATH_AMMO = 1; + } + + void reload_spit() + { + if (!(SPIT_AMMO < MAX_SPIT_AMMO)) return; + SPIT_AMMO += 1; + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) < 200)) return; + npcatk_flee(m_hAttackTarget, 512, 1.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/horror_lightning_old.as b/scripts/angelscript/monsters/horror_lightning_old.as new file mode 100644 index 00000000..447429bf --- /dev/null +++ b/scripts/angelscript/monsters/horror_lightning_old.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "monsters/horror.as" + +namespace MS +{ + +class HorrorLightningOld : CGameScript +{ + string ANIM_ATTACK; + int AS_SUMMON_TELE_CHECK; + int BALL_DMG; + int BALL_SIZE; + int FLIGHT_SCANNING; + int IS_UNHOLY; + int I_FLY; + int NPC_GIVE_EXP; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_SPRAY; + string SPITTING; + int SPRAYING_GAS; + + HorrorLightningOld() + { + AS_SUMMON_TELE_CHECK = 1; + IS_UNHOLY = 1; + BALL_SIZE = 5; + BALL_DMG = 50; + SOUND_SPRAY = "debris/beamstart1.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + } + + void game_precache() + { + Precache("monsters/horror"); + } + + void OnSpawn() override + { + SetName("Electric Horror"); + SetHealth(500); + SetWidth(22); + SetHeight(22); + SetRoam(true); + SetFly(true); + I_FLY = 1; + 0 = float(0); + SetRace("demon"); + SetIdleAnim(ANIM_WALK); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(5); + SetModel("monsters/edwardgorey.mdl"); + NPC_GIVE_EXP = 200; + ScheduleDelayedEvent(1.0, "idle_sounds"); + FLIGHT_SCANNING = 1; + SetModelBody(0, 2); + SetDamageResistance("poison", 2.0); + SetDamageResistance("holy", 2.0); + SetDamageResistance("lightning", 0.0); + } + + void attack1() + { + if ((SPITTING)) + { + TossProjectile("proj_lightning_ball", "view", "none", 500, SPIT_DAMAGE, 0.5, "none"); + SPITTING = 0; + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (SPIT_AMMO == 0) + { + fly_mode(); + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, "slash"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RandomInt(1, 2) == 1) + { + ANIM_ATTACK = ANIM_GORE; + } + } + + void breath_attack() + { + Effect("glow", GetOwner(), Vector3(255, 255, 0), 768, 2, 2); + EmitSound(GetOwner(), 0, SOUND_SPRAY, 10); + SPRAYING_GAS = 1; + ScheduleDelayedEvent(1.0, "stop_spraying"); + if (!(GetEntityRange(m_hLastSeen) <= ATTACK_BLIND_RANGE)) return; + ApplyEffect(m_hLastSeen, "effects/dot_lightning", RandomInt(3, 8), GetEntityIndex(GetOwner()), RandomInt(10, 20)); + if (!(BREATH_AMMO <= 0)) return; + ScheduleDelayedEvent(20.0, "breath_reload"); + } + +} + +} diff --git a/scripts/angelscript/monsters/hunger.as b/scripts/angelscript/monsters/hunger.as new file mode 100644 index 00000000..04cd4d48 --- /dev/null +++ b/scripts/angelscript/monsters/hunger.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Hunger : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + Hunger() + { + SKEL_HP = 70; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 0.9; + ATTACK_DAMAGE_HIGH = 10; + NPC_GIVE_EXP = 20; + DROP_GOLD = 1; + DROP_GOLD_MIN = 3; + DROP_GOLD_MAX = 7; + SKEL_RESPAWN_CHANCE = 0.8; + SKEL_RESPAWN_LIVES = 3; + } + + void skeleton_spawn() + { + SetName("Hungry Skeleton"); + SetMoveSpeed(2); + SetRoam(true); + SetHearingSensitivity(3); + SetBloodType("none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/hunger_once.as b/scripts/angelscript/monsters/hunger_once.as new file mode 100644 index 00000000..c4165b55 --- /dev/null +++ b/scripts/angelscript/monsters/hunger_once.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class HungerOnce : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + int SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + HungerOnce() + { + SKEL_HP = 70; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 0.9; + ATTACK_DAMAGE_HIGH = 10; + NPC_GIVE_EXP = 50; + DROP_GOLD = 1; + DROP_GOLD_MIN = 3; + DROP_GOLD_MAX = 7; + SKEL_RESPAWN_CHANCE = 0; + SKEL_RESPAWN_LIVES = 0; + } + + void skeleton_spawn() + { + SetName("Hungry Skeleton"); + SetMoveSpeed(2); + SetRoam(true); + SetHearingSensitivity(3); + SetBloodType("none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/hungryrat.as b/scripts/angelscript/monsters/hungryrat.as new file mode 100644 index 00000000..ad3cb8b2 --- /dev/null +++ b/scripts/angelscript/monsters/hungryrat.as @@ -0,0 +1,90 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Hungryrat : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_RANGE; + int CAN_FLEE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int FLEE_HEALTH; + int NPC_GIVE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Hungryrat() + { + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ATTACK_DAMAGE = 1.2; + ATTACK_RANGE = 68; + ATTACK_HITCHANCE = 0.3; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_ATTACK1 = "monsters/rat/squeak2.wav"; + SOUND_ATTACK2 = "monsters/orc/attack2.wav"; + SOUND_ATTACK3 = "monsters/orc/attack3.wav"; + SOUND_IDLE1 = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + CAN_FLEE = 1; + FLEE_HEALTH = 2; + FLEE_CHANCE = 0.1; + DROP_ITEM1 = "skin_ratpelt"; + DROP_ITEM1_CHANCE = 0.35; + } + + void OnSpawn() override + { + SetHealth(20); + SetWidth(40); + SetHeight(64); + SetName("Hungry looking rat"); + SetRoam(true); + SetHearingSensitivity(0); + NPC_GIVE_EXP = 3; + SetRace("demon"); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle"); + SetMoveAnim(ANIM_WALK); + } + + void bite1() + { + // PlayRandomSound from: SOUND_ATTACK1 + array sounds = {SOUND_ATTACK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/hydra_fire_lesser.as b/scripts/angelscript/monsters/hydra_fire_lesser.as new file mode 100644 index 00000000..4c4e2ba5 --- /dev/null +++ b/scripts/angelscript/monsters/hydra_fire_lesser.as @@ -0,0 +1,807 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" +#include "monsters/base_struck.as" + +namespace MS +{ + +class HydraFireLesser : CGameScript +{ + int AM_BREATHING; + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_BITE1; + string ANIM_BITE2; + string ANIM_BITE3; + string ANIM_BREATH_CONE; + string ANIM_BREATH_GUIDED; + string ANIM_BREATH_RAPID; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_HEADWHIP; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_TAILWHIP; + string ANIM_WALK; + int AOE_TAIL; + string AS_ATTACKING; + int ATTACH_HEAD_LEFT; + int ATTACH_HEAD_LEFT1; + int ATTACH_HEAD_MID; + int ATTACH_HEAD_MID1; + int ATTACH_HEAD_RIGHT; + int ATTACH_HEAD_RIGHT1; + int ATTACH_TAIL; + int ATTACH_TAIL1; + string ATTACK_HITRANGE; + string ATTACK_RANGE; + string AURA_CL_SCRIPT; + string AURA_ELEMENT; + string AURA_SIZE; + int BREATH_CONE_ACTIVE; + int BREATH_CONE_AOE; + int BREATH_CONE_ON; + int BREATH_CONE_RANGE; + string BREATH_CONE_YAW; + string BREATH_TARGS; + int BREATH_TYPE; + string COL_BEAM1; + string COL_BEAM2; + string CONE_TARGS; + string CUR_BREATH_ANIM; + string CUR_BREATH_ORG; + string CUR_BREATH_TARG; + string DID_INTRO; + string DID_TAIL; + int DMG_BITE1; + int DMG_BITE2; + int DMG_BITE3; + int DMG_BREATH_CONE; + int DMG_PROJ_GUIDED; + int DMG_PROJ_RAPID; + int DMG_TAIL; + int DOTALT_DMG; + float DOTALT_DUR; + string DOTALT_EFFECTNAME; + string DOTALT_SCRIPT; + int DOT_DMG; + float DOT_DUR; + string DOT_EFFECTNAME; + string DOT_SCRIPT; + string FIRE_BOMB_POS; + float FREQ_BREATH; + float FREQ_CL_REFRESH; + float FREQ_TAIL_CHECK; + float GAME_PUSH_RATIO; + string HAD_TARGET; + int HYDRA_ATTACK_HITRANGE; + int HYDRA_ATTACK_RANGE; + int HYDRA_DID_INIT; + int HYDRA_RUN_SPEED; + int HYDRA_SIZE; + string HYDRA_TYPE; + int HYDRA_WALK_SPEED; + string MOVE_SUSPEND_UNTIL; + string MY_CL_IDX; + string NEXT_AURA_SCAN; + string NEXT_BREATH; + string NEXT_CL_REFRESH; + string NEXT_CONE_SCAN; + string NEXT_TAIL_CHECK; + int NPC_FLINCH_DISABLE; + float NPC_FLINCH_THRESH; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + int NPC_USE_FLINCH; + int NPC_USE_IDLE; + int NPC_USE_PAIN; + float PROJ_ELEMENT_MAX_DURATION; + int PROJ_ELEMENT_SPEED; + string PROJ_ELEMENT_TARGET; + string PROJ_ELEMENT_TYPE; + int PROJ_FIRE_BOMB_AOE; + float PROJ_FIRE_BOMB_SCALE; + string PROJ_GUIDED_ELEMENT; + string PROJ_GUIDED_SCRIPT; + string PROJ_RAPID_SCRIPT; + int RAPID_BREATH_COUNT; + string RESET_CYCLES; + int SHOT_GUIDED; + string SOUND_ALERT; + string SOUND_ATTACK_HEAD1; + string SOUND_ATTACK_HEAD2; + string SOUND_ATTACK_HEAD3; + string SOUND_BREATH1_START; + string SOUND_BREATH1_STRIKE; + string SOUND_BREATH2_LOOP; + string SOUND_BREATH2_START; + string SOUND_BREATH2_STRIKE; + string SOUND_COMBAT1; + string SOUND_COMBAT2; + string SOUND_COMBAT3; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_TAIL; + string TAIL_TARGS; + + HydraFireLesser() + { + ANIM_IDLE = "anim_idle"; + ANIM_WALK = "anim_walk"; + ANIM_RUN = "anim_walk"; + ANIM_FLINCH = "anim_flinch1"; + ANIM_DEATH = "anim_death"; + ANIM_ATTACK = "anim_bite1"; + ANIM_ALERT = "anim_alert"; + ANIM_BITE1 = "anim_bite1"; + ANIM_BITE2 = "anim_bite2"; + ANIM_BITE3 = "anim_bite3"; + ANIM_BREATH_RAPID = "anim_breath1"; + ANIM_BREATH_CONE = "anim_breath2"; + ANIM_BREATH_GUIDED = "anim_breath3"; + ANIM_HEADWHIP = "anim_whip_head"; + ANIM_TAILWHIP = "anim_whip_tail"; + ANIM_FLINCH1 = "anim_flinch1"; + ANIM_FLINCH2 = "anim_flinch2"; + ATTACH_HEAD_LEFT = 0; + ATTACH_HEAD_MID = 1; + ATTACH_HEAD_RIGHT = 2; + ATTACH_TAIL = 3; + ATTACH_HEAD_LEFT1 = 1; + ATTACH_HEAD_MID1 = 2; + ATTACH_HEAD_RIGHT1 = 3; + ATTACH_TAIL1 = 4; + GAME_PUSH_RATIO = 0.1; + HYDRA_ATTACK_RANGE = 246; + HYDRA_ATTACK_HITRANGE = 280; + ATTACK_RANGE = HYDRA_ATTACK_RANGE; + ATTACK_HITRANGE = HYDRA_ATTACK_HITRANGE; + NPC_GIVE_EXP = 750; + SOUND_DEATH = "monsters/hydra/death_final.wav"; + NPC_HACKED_MOVE_SPEED = 50; + NPC_USE_PAIN = 1; + NPC_USE_FLINCH = 1; + NPC_FLINCH_THRESH = 0.01; + NPC_USE_IDLE = 1; + SOUND_IDLE1 = "monsters/hydra/c_bulette_slct.wav"; + SOUND_IDLE2 = "monsters/hydra/c_bulette_dead1.wav"; + SOUND_IDLE3 = "monsters/hydra/c_bulette_dead2.wav"; + SOUND_PAIN1 = "monsters/hydra/c_bulette_hit1.wav"; + SOUND_PAIN2 = "monsters/hydra/c_bulette_hit2.wav"; + SOUND_PAIN3 = "monsters/hydra/c_bulette_hit3.wav"; + HYDRA_TYPE = "fire"; + HYDRA_SIZE = 1; + HYDRA_RUN_SPEED = 150; + HYDRA_WALK_SPEED = 50; + AURA_CL_SCRIPT = "monsters/hydra_fire_lesser_cl"; + AURA_ELEMENT = "fire_effect"; + FREQ_CL_REFRESH = 30.0; + COL_BEAM1 = Vector3(255, 0, 0); + COL_BEAM2 = Vector3(255, 128, 0); + DOT_DMG = 50; + DOT_DUR = 5.0; + DOT_SCRIPT = "effects/dot_fire"; + DOT_EFFECTNAME = "DOT_fire"; + DOTALT_DMG = 100; + DOTALT_DUR = 5.0; + DOTALT_SCRIPT = "effects/dot_fire"; + DOTALT_EFFECTNAME = "DOT_fire"; + DMG_BITE1 = 150; + DMG_BITE2 = 175; + DMG_BITE3 = 200; + DMG_TAIL = 600; + AOE_TAIL = 164; + FREQ_BREATH = 20.0; + FREQ_TAIL_CHECK = 10.0; + DMG_PROJ_RAPID = 200; + PROJ_RAPID_SCRIPT = "proj_fire_bomb"; + DMG_BREATH_CONE = 100; + BREATH_CONE_RANGE = 256; + BREATH_CONE_AOE = 256; + DMG_PROJ_GUIDED = 1000; + PROJ_GUIDED_SCRIPT = "proj_elemental_guided"; + PROJ_GUIDED_ELEMENT = "fire"; + SOUND_COMBAT1 = "monsters/hydra/c_bulette_bat1.wav"; + SOUND_COMBAT2 = "monsters/hydra/c_bulette_bat2.wav"; + SOUND_COMBAT3 = "monsters/hydra/c_bulette_dead3.wav"; + SOUND_ATTACK_HEAD1 = "monsters/hydra/c_bulette_atk1.wav"; + SOUND_ATTACK_HEAD2 = "monsters/hydra/c_bulette_atk2.wav"; + SOUND_ATTACK_HEAD3 = "monsters/hydra/c_bulette_atk3.wav"; + SOUND_TAIL = "weapons/swing_huge.wav"; + SOUND_ALERT = "monsters/hydra/rawr.wav"; + SOUND_BREATH1_START = "monsters/hydra/c_bulette_bat1.wav"; + SOUND_BREATH1_STRIKE = "magic/fireball_large.wav"; + SOUND_BREATH2_START = "monsters/hydra/c_bulette_bat2.wav"; + SOUND_BREATH2_STRIKE = "magic/flame_loop_start.wav"; + SOUND_BREATH2_LOOP = "magic/flame_loop.wav"; + PROJ_FIRE_BOMB_AOE = 128; + PROJ_FIRE_BOMB_SCALE = 0.25; + PROJ_ELEMENT_TYPE = PROJ_GUIDED_ELEMENT; + PROJ_ELEMENT_SPEED = 50; + PROJ_ELEMENT_MAX_DURATION = 30.0; + } + + void game_precache() + { + Precache("explode1.spr"); + Precache("3dmflagry.spr"); + Precache("xfireball3.spr"); + // svplaysound: svplaysound 0 0 magic/sps_fogfire.wav + EmitSound(0, 0, "magic/sps_fogfire.wav"); + // svplaysound: svplaysound 0 0 magic/cold_breath.wav + EmitSound(0, 0, "magic/cold_breath.wav"); + // svplaysound: svplaysound 0 0 magic/bolt_loop.wav + EmitSound(0, 0, "magic/bolt_loop.wav"); + // svplaysound: svplaysound 0 0 magic/flame_loop.wav + EmitSound(0, 0, "magic/flame_loop.wav"); + } + + void OnSpawn() override + { + hydra_spawn(); + } + + void hydra_spawn() + { + SetName("Lesser Fire Hydra"); + SetModel("monsters/hydra_small.mdl"); + SetHealth(5000); + SetWidth(96); + SetHeight(96); + SetRace("demon"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetRoam(true); + SetHearingSensitivity(4); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("holy", 1.5); + SetDamageResistance("stun", 0); + BREATH_TYPE = 0; + ScheduleDelayedEvent(2.0, "hydra_finalize"); + } + + void hydra_finalize() + { + string L_GOLD = GetEntityMaxHealth(GetOwner()); + float L_GOLD_MULTI = 0.5; + if (("game.central")) + { + string L_PLAYERS = "game.playersnb"; + if (L_PLAYERS > 1) + { + } + L_PLAYERS *= 0.5; + L_GOLD_MULTI += L_PLAYERS; + } + L_GOLD *= L_GOLD_MULTI; + SetGold(L_GOLD); + } + + void npc_targetsighted() + { + if (!(DID_INTRO)) + { + DID_INTRO = 1; + PlayAnim("critical", ANIM_ALERT); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + hydra_init_combat(); + MOVE_SUSPEND_UNTIL = GetGameTime(); + MOVE_SUSPEND_UNTIL += 3.0; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + } + } + + void hydra_init_combat() + { + HYDRA_DID_INIT = 1; + if (HYDRA_SIZE == 1) + { + AURA_SIZE = 128; + } + refresh_cl_effects(); + NEXT_TAIL_CHECK = GetGameTime(); + NEXT_TAIL_CHECK += FREQ_TAIL_CHECK; + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + } + + void refresh_cl_effects() + { + if (MY_CL_IDX == "MY_CL_IDX") + { + int L_REFRESH = 1; + } + if (GetGameTime() > NEXT_CL_REFRESH) + { + int L_REFRESH = 1; + } + if (!(L_REFRESH)) return; + NEXT_CL_REFRESH = GetGameTime(); + NEXT_CL_REFRESH += FREQ_CL_REFRESH; + LogDebug("refresh_cl_effects"); + ClientEvent("new", "all", AURA_CL_SCRIPT, GetEntityIndex(GetOwner()), 30.0, AURA_SIZE, "fire", BREATH_CONE_ON, BREATH_CONE_RANGE, BREATH_CONE_AOE); + MY_CL_IDX = "game.script.last_sent_id"; + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("update", "all", MY_CL_IDX, "end_fx"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + float L_GAME_TIME = GetGameTime(); + if (m_hAttackTarget != "unset") + { + RESET_CYCLES = L_GAME_TIME; + RESET_CYCLES += 20.0; + HAD_TARGET = 1; + NPC_HACKED_MOVE_SPEED = HYDRA_RUN_SPEED; + } + else + { + NPC_HACKED_MOVE_SPEED = HYDRA_WALK_SPEED; + if ((HYDRA_DID_INIT)) + { + } + if ((HAD_TARGET)) + { + } + if (L_GAME_TIME > RESET_CYCLES) + { + } + hydra_init_combat(); + DID_INTRO = 0; + HAD_TARGET = 0; + } + if (L_GAME_TIME < MOVE_SUSPEND_UNTIL) + { + NPC_HACKED_MOVE_SPEED = 0; + } + if (L_GAME_TIME > NEXT_CL_REFRESH) + { + if ((HYDRA_DID_INIT)) + { + } + refresh_cl_effects(); + } + if (L_GAME_TIME > NEXT_AURA_SCAN) + { + NEXT_AURA_SCAN = L_GAME_TIME; + NEXT_AURA_SCAN += 1.0; + aura_checktargets(); + } + if ((AM_BREATHING)) + { + PlayAnim("once", CUR_BREATH_ANIM); + } + if (!(m_hAttackTarget != "unset")) return; + if ((SUSPEND_AI)) return; + if ((AM_BREATHING)) return; + if (L_GAME_TIME > NEXT_TAIL_CHECK) + { + NEXT_TAIL_CHECK = L_GAME_TIME; + NEXT_TAIL_CHECK += FREQ_TAIL_CHECK; + do_tail_check(); + if ((DID_TAIL)) + { + } + DID_TAIL = 0; + return; + } + if (L_GAME_TIME > NEXT_BREATH) + { + NEXT_BREATH = L_GAME_TIME; + NEXT_BREATH += FREQ_BREATH; + do_breath(); + } + } + + void do_breath() + { + BREATH_TYPE += 1; + string L_SCAN_POINT = /* TODO: $relpos */ $relpos(0, 512, 32); + BREATH_TARGS = FindEntitiesInSphere("enemy", 512); + if (BREATH_TARGS == "none") + { + BREATH_TYPE -= 1; + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += 3.0; + } + if (BREATH_TYPE == 1) + { + breath_rapid_start(); + } + if (BREATH_TYPE == 2) + { + breath_cone_start(); + } + if (BREATH_TYPE == 3) + { + breath_guided_start(); + BREATH_TYPE = 0; + } + } + + void breath_end() + { + AM_BREATHING = 0; + npcatk_resume_movement(); + npcatk_resume_ai(); + NPC_FLINCH_DISABLE = 0; + MOVE_SUSPEND_UNTIL = 0; + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + } + + void breath_guided_start() + { + AM_BREATHING = 1; + SHOT_GUIDED = 0; + CUR_BREATH_ANIM = ANIM_BREATH_GUIDED; + npcatk_suspend_movement(ANIM_BREATH_GUIDED); + npcatk_suspend_ai(); + NPC_FLINCH_DISABLE = 1; + MOVE_SUSPEND_UNTIL = GetGameTime(); + MOVE_SUSPEND_UNTIL += 30.0; + } + + void frame_breath3_begin() + { + EmitSound(GetOwner(), 0, SOUND_BREATH3_START, 10); + ScrambleTokens(BREATH_TARGS, ";"); + CUR_BREATH_TARG = GetToken(BREATH_TARGS, 0, ";"); + CUR_BREATH_ORG = GetEntityOrigin(CUR_BREATH_TARG); + SetMoveDest(CUR_BREATH_TARG); + } + + void frame_breath3_strike() + { + SHOT_GUIDED = 1; + EmitSound(GetOwner(), 0, SOUND_BREATH1_STRIKE, 10); + PROJ_ELEMENT_TARGET = CUR_BREATH_TARG; + TossProjectile(CUR_BREATH_TARG, PROJ_ELEMENT_SPEED, DMG_PROJ_GUIDED, 1, PROJ_GUIDED_SCRIPT, GetEntityProperty(GetOwner(), "attachpos"), "notoffset"); + if (HYDRA_TYPE == "fire") + { + CallExternal("ent_lastprojectile", "ext_set_target", CUR_BREATH_TARG); + } + } + + void frame_breath3_done() + { + if (!(SHOT_GUIDED)) + { + PlayAnim("once", ANIM_BREATH_GUIDED); + } + else + { + SHOT_GUIDED = 0; + breath_end(); + PlayAnim("critical", ANIM_IDLE); + } + } + + void breath_rapid_start() + { + AM_BREATHING = 1; + RAPID_BREATH_COUNT = 0; + CUR_BREATH_ANIM = ANIM_BREATH_RAPID; + npcatk_suspend_movement(ANIM_BREATH_RAPID); + npcatk_suspend_ai(); + NPC_FLINCH_DISABLE = 1; + MOVE_SUSPEND_UNTIL = GetGameTime(); + MOVE_SUSPEND_UNTIL += 30.0; + } + + void frame_breath1_begin() + { + EmitSound(GetOwner(), 0, SOUND_BREATH1_START, 10); + ScrambleTokens(BREATH_TARGS, ";"); + CUR_BREATH_TARG = GetToken(BREATH_TARGS, 0, ";"); + CUR_BREATH_ORG = GetEntityOrigin(CUR_BREATH_TARG); + SetMoveDest(CUR_BREATH_TARG); + } + + void frame_breath1_strike() + { + EmitSound(GetOwner(), 0, SOUND_BREATH1_STRIKE, 10); + TossProjectile(CUR_BREATH_ORG, 200, DMG_PROJ_RAPID, 1, PROJ_RAPID_SCRIPT, GetEntityProperty(GetOwner(), "attachpos"), "notoffset"); + if (HYDRA_TYPE == "fire") + { + CallExternal("ent_lastprojectile", "ext_lighten", 0); + CallExternal("ent_lastprojectile", "ext_scale", 0.5); + } + } + + void frame_breath1_done() + { + RAPID_BREATH_COUNT += 1; + if (RAPID_BREATH_COUNT > 3) + { + breath_rapid_end(); + } + else + { + PlayAnim("once", ANIM_BREATH_RAPID); + } + } + + void breath_rapid_end() + { + breath_end(); + } + + void ext_fire_bomb() + { + FIRE_BOMB_POS = param1; + XDoDamage(FIRE_BOMB_POS, 128, DMG_PROJ_RAPID, 0.1, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:rapid"); + } + + void rapid_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + apply_dot(GetEntityIndex(param2)); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = FIRE_BOMB_POS; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 200))); + } + + void frame_breath2_begin() + { + EmitSound(GetOwner(), 0, SOUND_BREATH2_START, 10); + } + + void breath_cone_start() + { + AM_BREATHING = 1; + CUR_BREATH_ANIM = ANIM_BREATH_CONE; + npcatk_suspend_movement(ANIM_BREATH_CONE); + npcatk_suspend_ai(); + NPC_FLINCH_DISABLE = 1; + MOVE_SUSPEND_UNTIL = GetGameTime(); + MOVE_SUSPEND_UNTIL += 30.0; + BREATH_CONE_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + string L_BREATH_POS = GetEntityOrigin(GetOwner()); + L_BREATH_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_CONE_YAW, 0), Vector3(0, BREATH_CONE_RANGE, 0)); + SetMoveDest(L_BREATH_POS); + BREATH_CONE_ACTIVE = 1; + BREATH_CONE_ON = 0; + breath_cone_loop(); + } + + void breath_cone_loop() + { + if (!(BREATH_CONE_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "breath_cone_loop"); + string L_BREATH_POS = GetEntityOrigin(GetOwner()); + L_BREATH_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_CONE_YAW, 0), Vector3(0, BREATH_CONE_RANGE, 0)); + SetMoveDest(L_BREATH_POS); + if (!(BREATH_CONE_ON)) + { + BREATH_CONE_YAW -= 0.5; + if (BREATH_CONE_YAW < 0) + { + BREATH_CONE_YAW += 359.99; + } + } + else + { + BREATH_CONE_YAW += 1; + if (BREATH_CONE_YAW > 359.99) + { + BREATH_CONE_YAW -= 359.99; + } + if (GetGameTime() > NEXT_CONE_SCAN) + { + } + NEXT_CONE_SCAN = GetGameTime(); + NEXT_CONE_SCAN += 0.5; + L_BREATH_POS += "z"; + CONE_TARGS = FindEntitiesInSphere("enemy", BREATH_CONE_AOE); + if (CONE_TARGS != "none") + { + } + for (int i = 0; i < GetTokenCount(CONE_TARGS, ";"); i++) + { + breath_cone_affect_targets(); + } + } + } + + void breath_cone_affect_targets() + { + string CUR_IDX = i; + string CUR_TARG = GetToken(CONE_TARGS, CUR_IDX, ";"); + XDoDamage(CUR_TARG, "direct", DMG_BREATH_CONE, 1.0, GetOwner(), GetOwner(), "none", AURA_ELEMENT, "dmgevent:cone"); + } + + void cone_dodamage() + { + apply_dot2(GetEntityIndex(param2)); + } + + void frame_breath2_start() + { + BREATH_CONE_ON = 1; + EmitSound(GetOwner(), 1, SOUND_BREATH2_STRIKE, 10); + EmitSound(GetOwner(), 4, SOUND_BREATH2_LOOP, 10); + ClientEvent("update", "all", MY_CL_IDX, "cone_breath_on", BREATH_CONE_RANGE, BREATH_CONE_AOE); + } + + void frame_breath2_end() + { + BREATH_CONE_ON = 0; + EmitSound(GetOwner(), 4, SOUND_BREATH2_LOOP, 0); + ClientEvent("update", "all", MY_CL_IDX, "cone_breath_off"); + } + + void frame_breath2_done() + { + breath_cone_end(); + } + + void breath_cone_end() + { + BREATH_CONE_ACTIVE = 0; + breath_end(); + PlayAnim("critical", ANIM_IDLE); + } + + void frame_bite1_start() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK_HEAD1, 10); + } + + void frame_bite2_start() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK_HEAD2, 10); + } + + void frame_bite3_start() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK_HEAD3, 10); + } + + void frame_attack_bite1() + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE1, 0.85, GetOwner(), GetOwner(), "none", "slash", "dmgevent:bite1"); + ANIM_ATTACK = ANIM_BITE2; + } + + void frame_attack_bite2() + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE2, 0.95, GetOwner(), GetOwner(), "none", "slash", "dmgevent:bite2"); + ANIM_ATTACK = ANIM_BITE3; + } + + void frame_attack_bite3() + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE3, 0.85, GetOwner(), GetOwner(), "none", "slash", "dmgevent:bite3"); + ANIM_ATTACK = ANIM_BITE1; + } + + void bite1_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(-200, 400, 110)); + if (!(param1)) return; + apply_dot1(GetEntityIndex(param2)); + } + + void bite2_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 800, 110)); + if (!(param1)) return; + apply_dot1(GetEntityIndex(param2)); + } + + void bite3_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(200, 300, 110)); + if (!(param1)) return; + apply_dot1(GetEntityIndex(param2)); + } + + void aura_checktargets() + { + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), AURA_SIZE, DMG_AURA, 0, GetOwner(), GetOwner(), "none", AURA_ELEMENT, "dmgevent:aura"); + } + + void aura_dodamage() + { + if (!(param1)) return; + apply_dot2(GetEntityIndex(param2)); + } + + void apply_dot1() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + ApplyEffect(param1, DOT_SCRIPT, DOT_DUR, GetEntityIndex(GetOwner()), DOT_DMG); + } + + void apply_dot2() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + ApplyEffect(param1, DOTALT_SCRIPT, DOTALT_DUR, GetEntityIndex(GetOwner()), DOTALT_DMG); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (HYDRA_TYPE == "fire") + { + if ((param3).findFirst("fire") >= 0) + { + if (/* TODO: $get_takedmg */ $get_takedmg(param1, "fire") == 0) + { + } + int L_INC_DMG = 1; + } + if ((GetEntityProperty(param1, "nopush"))) + { + int L_INC_DMG = 1; + } + if ((L_INC_DMG)) + { + string L_FIN_DMG = param2; + L_FIN_DMG *= 3.0; + SetDamage("dmg"); + ReturnData(3.0); + } + } + } + + void do_tail_check() + { + string L_BACK = AOE_TAIL; + string L_BACK = /* TODO: $neg */ $neg(L_BACK); + string L_SCAN_POINT = /* TODO: $relpos */ $relpos(0, L_BACK, 32); + TAIL_TARGS = FindEntitiesInSphere("enemy", AOE_TAIL); + if (!(TAIL_TARGS != "none")) return; + DID_TAIL = 1; + PlayAnim("critical", ANIM_TAILWHIP); + } + + void frame_tailwhip_start() + { + EmitSound(GetOwner(), 0, SOUND_TAIL, 10); + ClientEvent("update", "all", MY_CL_IDX, "add_beam", 2.0, ATTACH_TAIL, COL_BEAM1, COL_BEAM2); + } + + void frame_attack_tailwhip() + { + string L_BACK = AOE_TAIL; + string L_BACK = /* TODO: $neg */ $neg(L_BACK); + string L_SCAN_POINT = /* TODO: $relpos */ $relpos(0, L_BACK, 32); + XDoDamage(L_SCAN_POINT, AOE_TAIL, DMG_TAIL, 1.0, GetOwner(), GetOwner(), "none", "slash", "dmgevent:tail"); + } + + void tail_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(300, -600, 220)); + if (!(param1)) return; + apply_dot2(GetEntityIndex(param2)); + } + + void ext_beam_test() + { + ClientEvent("update", "all", MY_CL_IDX, "add_beam", 30.0, ATTACH_HEAD_MID, /* TODO: $clcol */ $clcol(COL_BEAM1), /* TODO: $clcol */ $clcol(COL_BEAM2)); + } + +} + +} diff --git a/scripts/angelscript/monsters/hydra_fire_lesser_cl.as b/scripts/angelscript/monsters/hydra_fire_lesser_cl.as new file mode 100644 index 00000000..ba8f2955 --- /dev/null +++ b/scripts/angelscript/monsters/hydra_fire_lesser_cl.as @@ -0,0 +1,244 @@ +#pragma context client + +namespace MS +{ + +class HydraFireLesserCl : CGameScript +{ + string FOLOW_BEAM_ID1; + string FOLOW_BEAM_ID2; + int FX_ACTIVE; + string FX_BREATH_AOE; + string FX_BREATH_LIGHT_ID; + string FX_BREATH_ON; + string FX_BREATH_RANGE; + string FX_BREATH_SCALE; + string FX_BREATH_SPR_VEL; + string FX_DURATION; + string FX_LIGHT_ID; + string FX_MODEL_SCALE; + string FX_ORIGIN; + string FX_OWNER; + string FX_RADIUS; + string FX_TYPE; + string GLOW_COLOR; + + void client_activate() + { + SetCallback("render", "enable"); + FX_OWNER = param1; + FX_DURATION = param2; + FX_RADIUS = param3; + FX_TYPE = param4; + FX_BREATH_ON = param5; + FX_BREATH_RANGE = param6; + FX_BREATH_AOE = param7; + FX_RADIUS -= 24; + FX_MODEL_SCALE = FX_RADIUS; + FX_MODEL_SCALE /= 48; + FX_MODEL_SCALE += 2.5; + LogDebug("*** $currentscript Ownr FX_OWNER dur FX_DURATION rad FX_RADIUS type FX_TYPE scal FX_MODEL_SCALE p3 PARAM3"); + if (FX_TYPE == "fire") + { + GLOW_COLOR = Vector3(255, 128, 64); + } + FX_DURATION("remove_fx"); + FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + FX_ACTIVE = 1; + if ((FX_BREATH_ON)) + { + cone_breath_on(FX_BREATH_RANGE, FX_BREATH_AOE); + } + ClientEffect("tempent", "sprite", "weapons/projectiles.mdl", FX_ORIGIN, "setup_flame_circle", "update_flame_circle"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, 1.0); + FX_LIGHT_ID = "game.script.last_light_id"; + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(FX_OWNER, "exists"))) return; + ClientEffect("light", FX_LIGHT_ID, /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), FX_RADIUS, GLOW_COLOR, 1.0); + if ((FX_BREATH_ON)) + { + string L_BREATH_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string L_OWNER_YAW = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + string L_OWNER_YAW = /* TODO: $vec.yaw */ $vec.yaw(L_OWNER_YAW); + L_BREATH_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_OWNER_YAW, 0), Vector3(0, FX_BREATH_RANGE, 0)); + ClientEffect("light", FX_BREATH_LIGHT_ID, L_BREATH_POS, FX_BREATH_AOE, GLOW_COLOR, 1.0); + } + } + + void end_fx() + { + FX_ACTIVE = 0; + FX_BREATH_ON = 0; + ClientEffect("beam_update", "removeall"); + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_flame_circle() + { + if ((FX_ACTIVE)) + { + FX_ORIGIN = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + FX_ORIGIN += "z"; + ClientEffect("tempent", "set_current_prop", "origin", FX_ORIGIN); + } + else + { + ClientEffect("tempent", "set_current_prop", "rendermode", 5); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + ClientEffect("tempent", "set_current_prop", "death_delay", /* TODO: $neg */ $neg(FX_DURATION)); + ClientEffect("tempent", "set_current_prop", "fadeout", 0); + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + } + + void setup_flame_circle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 51); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "scale", FX_MODEL_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + + void cone_breath_on() + { + if (!(FX_ACTIVE)) return; + FX_BREATH_ON = 1; + FX_BREATH_RANGE = param1; + FX_BREATH_AOE = param2; + string L_BREATH_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string L_OWNER_YAW = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + string L_OWNER_YAW = /* TODO: $vec.yaw */ $vec.yaw(L_OWNER_YAW); + L_BREATH_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_OWNER_YAW, 0), Vector3(0, FX_BREATH_RANGE, 0)); + FX_BREATH_SCALE = FX_BREATH_AOE; + FX_BREATH_SCALE /= 48; + FX_BREATH_SCALE += 2.5; + ClientEffect("tempent", "sprite", "weapons/projectiles.mdl", FX_ORIGIN, "setup_breath_circle", "update_breath_circle"); + ClientEffect("light", "new", L_BREATH_POS, GLOW_RAD, FX_BREATH_AOE, 1.0); + FX_BREATH_LIGHT_ID = "game.script.last_light_id"; + breath_sprites_loop(); + } + + void breath_sprites_loop() + { + if (!(FX_BREATH_ON)) return; + Random(0_1, 0_3)("breath_sprites_loop"); + string L_BREATH_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string L_OWNER_YAW = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + string L_OWNER_YAW = /* TODO: $vec.yaw */ $vec.yaw(L_OWNER_YAW); + L_BREATH_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_OWNER_YAW, 0), Vector3(0, FX_BREATH_RANGE, 0)); + string L_START = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + string L_END = L_BREATH_POS; + string L_BREATH_DIR = (L_END - L_START).Normalize(); + FX_BREATH_SPR_VEL = L_BREATH_DIR; + FX_BREATH_SPR_VEL *= Random(200, 300); + ClientEffect("tempent", "sprite", "explode1.spr", L_START, "setup_breath_sprite", "update_breath_sprite"); + FX_BREATH_SPR_VEL = L_BREATH_DIR; + FX_BREATH_SPR_VEL *= Random(200, 300); + ClientEffect("tempent", "sprite", "explode1.spr", L_START, "setup_breath_sprite", "update_breath_sprite"); + } + + void cone_breath_off() + { + FX_BREATH_ON = 0; + } + + void update_breath_sprite() + { + string CUR_SCALE = "game.tempent.fuser1"; + CUR_SCALE += 0.02; + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + } + + void setup_breath_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", FX_BREATH_SPR_VEL); + } + + void update_breath_circle() + { + if ((FX_BREATH_ON)) + { + string L_BREATH_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string L_OWNER_YAW = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + string L_OWNER_YAW = /* TODO: $vec.yaw */ $vec.yaw(L_OWNER_YAW); + L_BREATH_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_OWNER_YAW, 0), Vector3(0, FX_BREATH_RANGE, 0)); + L_BREATH_POS += "z"; + ClientEffect("tempent", "set_current_prop", "origin", L_BREATH_POS); + } + else + { + ClientEffect("tempent", "set_current_prop", "rendermode", 5); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + ClientEffect("tempent", "set_current_prop", "death_delay", /* TODO: $neg */ $neg(FX_DURATION)); + ClientEffect("tempent", "set_current_prop", "fadeout", 0); + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + } + + void setup_breath_circle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 51); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "scale", FX_BREATH_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + + void add_beam() + { + LogDebug("*** add_beam dur PARAM1 att PARAM2 col1 PARAM3 col2 PARAM4"); + string L_DUR = param1; + string L_ATTACH = param2; + L_ATTACH += 1; + ClientEffect("beam_follow", FX_OWNER, L_ATTACH, "lgtning.spr", L_DUR, 30, param3, 0.75); + FOLOW_BEAM_ID1 = "game.script.last_beam_id"; + ClientEffect("beam_follow", FX_OWNER, L_ATTACH, "lgtning.spr", L_DUR, 10, param4, 0.75); + FOLOW_BEAM_ID2 = "game.script.last_beam_id"; + PARAM1("remove_beams"); + } + + void remove_beams() + { + ClientEffect("beam_update", "removeall"); + } + +} + +} diff --git a/scripts/angelscript/monsters/ice_mage.as b/scripts/angelscript/monsters/ice_mage.as new file mode 100644 index 00000000..bfa945ee --- /dev/null +++ b/scripts/angelscript/monsters/ice_mage.as @@ -0,0 +1,614 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class IceMage : CGameScript +{ + string ANIM_ATTACK; + string ANIM_CAST; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DEATH6; + string ANIM_DEATH7; + string ANIM_FLY; + string ANIM_FREEZE_RAY; + string ANIM_IDLE; + string ANIM_IDLE_ALERT; + string ANIM_JUMP; + string ANIM_LOOK; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BEAM_DEFINED; + string BEAM_ID; + string BEAM_ON; + string BEAM_TARGET; + string BEAM_TRACE_END; + string BEAM_TRACE_START; + string BOLT_DELAY; + int BOLT_SPEED; + string BUGGER_ID; + int BUGGER_IN_WAY; + int BUGGER_IN_WAY_COUNT; + int DMG_BEAM; + int DMG_BOLT; + int DMG_DOT_BOLT; + int DMG_SOLID; + int DMG_STAFF; + int DMG_SWIPE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int FBEAM_ATTACK; + int FBEAM_RANGE; + string FINGER_ADJ; + int FOUND_NEAR_TARGET; + string FREEZE_SOUND_DELAY; + float FREQ_BOLT; + float FREQ_FREEZE; + float FREQ_FREEZE_SOUND; + float FREQ_TELE; + int ICE_SUMMONED; + int IS_UNHOLY; + string LAST_TELE; + string LIGHT_COLOR; + int LIGHT_RAD; + string MY_LIGHT_SCRIPT; + string NEAR_DEST; + string NEW_FREEZE_TARGET; + string NEW_TARGET; + int NPC_GIVE_EXP; + int N_TELES; + string OWNER_ID; + string PROJSET_DAMAGE; + float PROJSET_DURATION; + int RENDER_COUNT; + int SEARCH_RAD; + string SOUND_BLIZZARD; + string SOUND_DEATH; + string SOUND_FREEZE_BEAM; + string SOUND_FROSTBOLT; + string SOUND_STUCK1; + string SOUND_STUCK2; + string SOUND_SWIPE; + string SOUND_TELE; + string TELE_ANG; + string TELE_ANGS; + string TELE_DEST; + string TELE_ID1; + string TELE_ID2; + string TELE_ID3; + string TELE_ID4; + + IceMage() + { + FREQ_TELE = Random(5, 10); + IS_UNHOLY = 1; + ANIM_IDLE = "idle"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "ref_shoot_staff"; + ANIM_DEATH = "die_simple"; + ANIM_IDLE_ALERT = "alert_idle"; + ANIM_JUMP = "long_jump"; + ANIM_FREEZE_RAY = "ref_shoot_rayspell"; + ANIM_CAST = "cast"; + ANIM_FLY = "jump"; + ANIM_LOOK = "look"; + ANIM_DEATH1 = "die_simple"; + ANIM_DEATH2 = "die_backwards1"; + ANIM_DEATH3 = "die_backwards"; + ANIM_DEATH4 = "die_forwards"; + ANIM_DEATH5 = "headshot"; + ANIM_DEATH6 = "die_spin"; + ANIM_DEATH7 = "gutshot"; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 170; + ATTACK_MOVERANGE = 300; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 20); + NPC_GIVE_EXP = 350; + LIGHT_COLOR = Vector3(200, 200, 255); + LIGHT_RAD = 96; + FINGER_ADJ = "$relpos($vec(0,MY_YAW,0),$vec(0,30,54))"; + DMG_SWIPE = RandomInt(20, 50); + DMG_STAFF = RandomInt(100, 200); + DMG_BOLT = RandomInt(100, 200); + DMG_DOT_BOLT = RandomInt(30, 50); + DMG_SOLID = RandomInt(20, 30); + DMG_BEAM = 3; + FBEAM_RANGE = 1024; + ATTACK_HITCHANCE = 0.95; + FREQ_BOLT = 2.0; + FREQ_FREEZE = 1.0; + FREQ_FREEZE_SOUND = 1.6; + BOLT_SPEED = 300; + SOUND_SWIPE = "weapons/swingsmall.wav"; + SOUND_DEATH = "voices/kcult_pain1.wav"; + SOUND_FROSTBOLT = "magic/frost_pulse.wav"; + SOUND_FREEZE_BEAM = "magic/freezeray_loop.wav"; + SOUND_BLIZZARD = "doors/aliendoor3.wav"; + SOUND_STUCK1 = "debris/glass1.wav"; + SOUND_STUCK2 = "debris/glass2.wav"; + SOUND_TELE = "magic/teleport.wav"; + Precache(SOUND_DEATH); + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_TELE); + if (N_TELES > 0) + { + } + float LAST_TELE_DIFF = GetGameTime(); + LAST_TELE_DIFF -= G_ICE_TELE; + if (LAST_TELE_DIFF > 5) + { + } + if (!(CanSee(m_hAttackTarget, 256))) + { + } + string TOTAL_TELES = N_TELES; + TOTAL_TELES += 1; + GetAllPlayers(PLAYER_LIST); + FOUND_NEAR_TARGET = 0; + SEARCH_RAD = 512; + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + find_near_teleporter(); + } + if (FOUND_NEAR_TARGET > 0) + { + } + npcatk_settarget(NEW_TARGET); + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green " + ICE_MAGE: + "found " + GetEntityName(NEW_TARGET) + "near " + FOUND_NEAR_TARGET); + } + string PICK_TELE = FOUND_NEAR_TARGET; + if (PICK_TELE == 1) + { + TELE_DEST = GetEntityOrigin(TELE_ID1); + TELE_ANG = GetEntityAngles(TELE_ID1); + CallExternal(TELE_ID1, "tele_used"); + } + if (PICK_TELE == 2) + { + TELE_DEST = GetEntityOrigin(TELE_ID2); + TELE_ANG = GetEntityAngles(TELE_ID2); + CallExternal(TELE_ID2, "tele_used"); + } + if (PICK_TELE == 3) + { + TELE_DEST = GetEntityOrigin(TELE_ID3); + TELE_ANG = GetEntityAngles(TELE_ID3); + CallExternal(TELE_ID3, "tele_used"); + } + if (PICK_TELE == 4) + { + TELE_DEST = GetEntityOrigin(TELE_ID4); + TELE_ANG = GetEntityAngles(TELE_ID4); + CallExternal(TELE_ID4, "tele_used"); + } + if (PICK_TELE > N_TELES) + { + TELE_DEST = NPC_SPAWN_LOC; + TELE_DEST += "z"; + TELE_ANGS = NPC_SPAWN_ANGLES; + } + SpawnNPC("monsters/summon/ibarrier", TELE_DEST, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 64, 2, 0, 0, 0, 1 + LAST_TELE = GetGameTime(); + SetGlobalVar("G_ICE_TELE", GetGameTime()); + ScheduleDelayedEvent(0.25, "flicker_out"); + ScheduleDelayedEvent(0.75, "tele_out"); + ScheduleDelayedEvent(1.5, "tele_in"); + } + + void OnSpawn() override + { + if (!(ICE_SUMMONED)) + { + SetName("Ice Mage"); + } + SetModel("monsters/ice_mage.mdl"); + SetHealth(1500); + SetRace("demon"); + SetWidth(32); + if (!(AM_TURRET)) + { + SetHeight(72); + } + if ((AM_TURRET)) + { + SetHeight(48); + } + SetRoam(true); + SetHearingSensitivity(4); + SetFly(false); + SetProp(GetOwner(), "skin", 1); + PROJSET_DURATION = 10.0; + PROJSET_DAMAGE = DMG_DOT_BOLT; + ScheduleDelayedEvent(1.0, "get_teleporters"); + } + + void OnPostSpawn() override + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("all", 0.5); + SetDamageResistance("cold", 0); + SetDamageResistance("fire", 1.25); + SetDamageResistance("poison", 0.5); + light_me(); + Effect("beam", "ents", "lgtning.spr", 10, GetOwner(), 1, GetOwner(), 2, Vector3(200, 200, 255), 0, 0, -1); + BEAM_ID = GetEntityIndex(m_hLastCreated); + ClientEvent("persist", "all", "monsters/lighted_cl", GetEntityIndex(GetOwner()), LIGHT_COLOR, LIGHT_RAD); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (G_BEAMER == GetEntityIndex(GetOwner())) + { + SetGlobalVar("G_BEAMER", "unset"); + } + if (G_BEAMER == GetEntityIndex(GetOwner())) + { + SetGlobalVar("G_ICE_TELE", 0); + } + if ((ICE_SUMMONED)) + { + CallExternal(OWNER_ID, "ext_ice_mage_died"); + } + Effect("beam", "update", BEAM_ID, "remove", 0.1); + int RND_DEATH = RandomInt(1, 7); + if (RND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (RND_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (RND_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + if (RND_DEATH == 6) + { + ANIM_DEATH = ANIM_DEATH6; + } + if (RND_DEATH == 7) + { + ANIM_DEATH = ANIM_DEATH7; + } + // svplaysound: svplaysound 2 0 SOUND_FREEZE_BEAM + EmitSound(2, 0, SOUND_FREEZE_BEAM); + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + ClientEvent("update", "all", MY_LIGHT_SCRIPT, "remove_me"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetEntityIndex(G_BEAMER) != GetEntityIndex(GetOwner())) + { + if ((BEAM_ON)) + { + } + Effect("beam", "update", BEAM_ID, "brightness", 0); + BEAM_ON = 0; + } + if (!(false)) + { + ATTACK_MOVERANGE = GetMonsterProperty("moveprox"); + } + if ((false)) + { + ATTACK_MOVERANGE = 300; + } + if (!(GetEntityIndex(G_BEAMER) == GetEntityIndex(GetOwner()))) return; + if (GetEntityRange(m_hAttackTarget) > FBEAM_RANGE) + { + SetGlobalVar("G_BEAMER", "unset"); + } + if (!(false)) + { + SetGlobalVar("G_BEAMER", "unset"); + } + } + + void npc_targetsighted() + { + if ((I_R_FROZEN)) return; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_RANGE)) return; + if (!(BOLT_DELAY)) + { + if (GetEntityIndex(G_BEAMER) != GetEntityIndex(GetOwner())) + { + } + BOLT_DELAY = 1; + FREQ_BOLT("reset_bolt_delay"); + PlayAnim("critical", ANIM_CAST); + string L_POS = GetEntityOrigin(GetOwner()); + L_POS += "z"; + TossProjectile("proj_ice_bolt2", L_POS, m_hAttackTarget, BOLT_SPEED, DMG_BOLT, 0, "none"); + EmitSound(GetOwner(), 0, SOUND_FROSTBOLT, 10); + } + if ((IsEntityAlive(G_BEAMER))) + { + if (GetEntityIndex(G_BEAMER) != GetEntityIndex(GetOwner())) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((GetEntityProperty(m_hAttackTarget, "scriptvar"))) + { + SetGlobalVar("G_BEAMER", "unset"); + } + if (!(GetEntityProperty(m_hAttackTarget, "scriptvar") != 1)) return; + if (!(GetEntityRange(m_hAttackTarget) < FBEAM_RANGE)) return; + if (!(FREEZE_SOUND_DELAY)) + { + // svplaysound: svplaysound 2 5 SOUND_FREEZE_BEAM + EmitSound(2, 5, SOUND_FREEZE_BEAM); + FREEZE_SOUND_DELAY = 1; + FREQ_FREEZE_SOUND("reset_freeze_sound_delay"); + if ((BEAM_DEFINED)) + { + string L_BEAM_START = GetMonsterProperty("origin"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + L_BEAM_START += FINGER_ADJ; + string BEAM_DUR = FREQ_FREEZE_SOUND; + BEAM_DUR += 0.25; + } + } + AS_ATTACKING = GetGameTime(); + PlayAnim("once", "cast"); + FBEAM_ATTACK = 1; + SetGlobalVar("G_BEAMER", GetEntityIndex(GetOwner())); + if (!(BEAM_ON)) + { + Effect("beam", "update", BEAM_ID, "brightness", 255); + BEAM_ON = 1; + } + npcatk_dodamage(m_hAttackTarget, FBEAM_RANGE, DMG_BEAM, 1.0, "cold"); + } + + void reset_freeze_sound_delay() + { + // svplaysound: svplaysound 2 0 SOUND_FREEZE_BEAM + EmitSound(2, 0, SOUND_FREEZE_BEAM); + FREEZE_SOUND_DELAY = 0; + } + + void reset_bolt_delay() + { + BOLT_DELAY = 0; + } + + void game_dodamage() + { + if ((FBEAM_ATTACK)) + { + FBEAM_ATTACK = 0; + string TRACE_START = GetEntityOrigin(GetOwner()); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + TRACE_START += FINGER_ADJ; + string TRACE_END = GetEntityOrigin(m_hAttackTarget); + string TRACE_IT = TraceLine(TRACE_START, TRACE_END); + string MY_FINGER = GetEntityIndex(GetOwner()); + BEAM_TRACE_START = TRACE_START; + BEAM_TRACE_END = TRACE_IT; + BEAM_DEFINED = 1; + if ((param1)) + { + } + ApplyEffect(param2, "effects/dot_cold", 1, GetEntityIndex(GetOwner()), Random(5, 15), "none"); + BEAM_TARGET = GetEntityIndex(param2); + Effect("beam", "update", BEAM_ID, "end_target", BEAM_TARGET, 0); + } + } + + void reset_freeze_target() + { + NEW_FREEZE_TARGET = "unset"; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STUCK1, SOUND_STUCK2 + array sounds = {SOUND_STUCK1, SOUND_STUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void staff_strike() + { + // svplaysound: svplaysound 2 0 SOUND_FREEZE_BEAM + EmitSound(2, 0, SOUND_FREEZE_BEAM); + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_STAFF, ATTACK_HITCHANCE, "pierce"); + if (RandomInt(1, 5) == 1) + { + npcatk_flee(m_hAttackTarget, 512, 5.0); + } + if (GetEntityIndex(G_BEAMER) == GetEntityIndex(GetOwner())) + { + SetGlobalVar("G_BEAMER", "unset"); + } + } + + void my_target_died() + { + // svplaysound: svplaysound 2 0 SOUND_FREEZE_BEAM + EmitSound(2, 0, SOUND_FREEZE_BEAM); + } + + void game_dynamically_created() + { + SetName(param1); + OWNER_ID = param2; + ICE_SUMMONED = 1; + } + + void get_teleporters() + { + N_TELES = 0; + TELE_ID1 = FindEntityByName("sorc_telepoint1"); + TELE_ID2 = FindEntityByName("sorc_telepoint2"); + TELE_ID3 = FindEntityByName("sorc_telepoint3"); + TELE_ID4 = FindEntityByName("sorc_telepoint4"); + if (((TELE_ID1 !is null))) + { + N_TELES += 1; + } + if (((TELE_ID2 !is null))) + { + N_TELES += 1; + } + if (((TELE_ID3 !is null))) + { + N_TELES += 1; + } + if (((TELE_ID4 !is null))) + { + N_TELES += 1; + } + } + + void flicker_out() + { + RENDER_COUNT -= 50; + if (!(RENDER_COUNT > 0)) return; + ScheduleDelayedEvent(0.1, "flicker_out"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_COUNT); + } + + void tele_out() + { + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + SetEntityOrigin(GetOwner(), Vector3(-20000, 10000, -20000)); + } + + void tele_in() + { + NEAR_DEST = FindEntitiesInSphere("any", 64); + BUGGER_IN_WAY = 0; + for (int i = 0; i < GetTokenCount(NEAR_DEST, ";"); i++) + { + check_near_dest(); + } + if ((BUGGER_IN_WAY)) + { + BUGGER_IN_WAY_COUNT += 1; + LogDebug("tele_in GetEntityName(BUGGER_ID) / GetEntityProperty(BUGGER_ID, "scriptvar") @ TELE_DEST"); + ScheduleDelayedEvent(0.1, "tele_in"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + BUGGER_IN_WAY_COUNT = 0; + SetEntityOrigin(GetOwner(), TELE_DEST); + SetAngles("face"); + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + RENDER_COUNT = 0; + flicker_in(); + LAST_TELE = GetGameTime(); + SetGlobalVar("G_ICE_TELE", GetGameTime()); + } + + void check_near_dest() + { + string CUR_ENT = GetToken(NEAR_DEST, i, ";"); + if ((GetEntityName(CUR_ENT)).findFirst("Barrier") >= 0) + { + int ENT_OKAY = 1; + } + if ((GetEntityProperty(CUR_ENT, "scriptvar"))) + { + int ENT_OKAY = 1; + } + if ((ENT_OKAY)) return; + BUGGER_IN_WAY = 1; + BUGGER_ID = CUR_ENT; + } + + void flicker_in() + { + RENDER_COUNT += 50; + if (RENDER_COUNT >= 255) + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + if (!(RENDER_COUNT < 255)) return; + ScheduleDelayedEvent(0.1, "flicker_in"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_COUNT); + } + + void find_near_teleporter() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + string PLAYER_ORG = GetEntityOrigin(CUR_PLAYER); + if (!(FOUND_NEAR_TARGET == 0)) return; + if (!(N_TELES >= 1)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID1); + TEST_TELE = "z"; + if (Distance(PLAYER_ORG, TEST_TELE) < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 1; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 2)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID2); + TEST_TELE = "z"; + if (Distance(PLAYER_ORG, TEST_TELE) < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 2; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 3)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID3); + TEST_TELE = "z"; + if (Distance(PLAYER_ORG, TEST_TELE) < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 3; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 4)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID4); + TEST_TELE = "z"; + if (Distance(PLAYER_ORG, TEST_TELE) < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 4; + NEW_TARGET = CUR_PLAYER; + } + string TEST_TELE = NPC_SPAWN_LOC; + if (Distance(PLAYER_ORG, TEST_TELE) < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 5; + NEW_TARGET = CUR_PLAYER; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/ice_mage2.as b/scripts/angelscript/monsters/ice_mage2.as new file mode 100644 index 00000000..fa3c8032 --- /dev/null +++ b/scripts/angelscript/monsters/ice_mage2.as @@ -0,0 +1,473 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class IceMage2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BURST; + string ANIM_DEATH; + string ANIM_FLY; + string ANIM_FREEZE_RAY; + string ANIM_IDLE; + string ANIM_IDLE_ALERT; + string ANIM_LOOK; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BUGGER_ID; + int BUGGER_IN_WAY; + int BUGGER_IN_WAY_COUNT; + string CL_LIGHT_IDX; + int DOING_BEAM; + int DOING_BURST; + float DOT_FREEZE; + int FOUND_NEAR_TARGET; + float FREEZE_RAY_BASEDOT; + int FREEZE_RAY_SLOW_AMT; + float FREQ_BURST; + float FREQ_BURST_SHORT; + float FREQ_DODGE; + string LAST_BEAM; + string LAST_TELE; + string LIGHT_COLOR; + int LIGHT_RAD; + int MOVE_RANGE; + string NEAR_DEST; + string NEW_TARGET; + string NEXT_BURST; + string NEXT_CL_REFRESH; + string NEXT_DODGE; + string NExT_BURST; + int NPC_GIVE_EXP; + int NPC_RANGED; + int N_TELES; + int RENDER_COUNT; + int SEARCH_RAD; + string SOUND_BURST; + string SOUND_BURST_CHARGE; + string SOUND_FREEZE_RAY; + string TELE_ANG; + string TELE_ANGS; + string TELE_DEST; + string TELE_ID1; + string TELE_ID2; + string TELE_ID3; + string TELE_ID4; + + IceMage2() + { + ANIM_IDLE = "idle"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die_simple"; + ANIM_BURST = "crouch_idle"; + MOVE_RANGE = 512; + ATTACK_MOVERANGE = 512; + ATTACK_RANGE = 1024; + ATTACK_HITRANGE = 1024; + ANIM_IDLE_ALERT = "alert_idle"; + ANIM_ATTACK = "ref_shoot_staff"; + ANIM_FREEZE_RAY = "ref_shoot_rayspell"; + ANIM_FLY = "jump"; + ANIM_LOOK = "look"; + NPC_GIVE_EXP = 1000; + NPC_RANGED = 1; + FREQ_DODGE = 5.0; + LIGHT_COLOR = Vector3(200, 200, 255); + LIGHT_RAD = 96; + FREQ_BURST = Random(30.0, 60.0); + FREQ_BURST_SHORT = 10.0; + DOT_FREEZE = 100.0; + FREEZE_RAY_BASEDOT = 25.0; + FREEZE_RAY_SLOW_AMT = 1; + SOUND_FREEZE_RAY = "magic/freezeray_loop.wav"; + SOUND_BURST_CHARGE = "weapons/magic/ice_powerup.wav"; + SOUND_BURST = "weapons/magic/frost_reverse.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_TELE); + if (N_TELES > 0) + { + } + float LAST_TELE_DIFF = GetGameTime(); + LAST_TELE_DIFF -= G_ICE_TELE; + if (LAST_TELE_DIFF > 5) + { + } + if (!(CanSee(m_hAttackTarget, 256))) + { + } + string TOTAL_TELES = N_TELES; + TOTAL_TELES += 1; + GetAllPlayers(PLAYER_LIST); + FOUND_NEAR_TARGET = 0; + SEARCH_RAD = 512; + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + find_near_teleporter(); + } + if (FOUND_NEAR_TARGET > 0) + { + } + npcatk_settarget(NEW_TARGET); + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green " + ICE_MAGE: + "found " + GetEntityName(NEW_TARGET) + "near " + FOUND_NEAR_TARGET); + } + string PICK_TELE = FOUND_NEAR_TARGET; + if (PICK_TELE == 1) + { + TELE_DEST = GetEntityOrigin(TELE_ID1); + TELE_ANG = GetEntityAngles(TELE_ID1); + CallExternal(TELE_ID1, "tele_used"); + } + if (PICK_TELE == 2) + { + TELE_DEST = GetEntityOrigin(TELE_ID2); + TELE_ANG = GetEntityAngles(TELE_ID2); + CallExternal(TELE_ID2, "tele_used"); + } + if (PICK_TELE == 3) + { + TELE_DEST = GetEntityOrigin(TELE_ID3); + TELE_ANG = GetEntityAngles(TELE_ID3); + CallExternal(TELE_ID3, "tele_used"); + } + if (PICK_TELE == 4) + { + TELE_DEST = GetEntityOrigin(TELE_ID4); + TELE_ANG = GetEntityAngles(TELE_ID4); + CallExternal(TELE_ID4, "tele_used"); + } + if (PICK_TELE > N_TELES) + { + TELE_DEST = NPC_SPAWN_LOC; + TELE_DEST += "z"; + TELE_ANGS = NPC_SPAWN_ANGLES; + } + SpawnNPC("monsters/summon/ibarrier", TELE_DEST, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 64, 2, 0, 0, 0, 1 + LAST_TELE = GetGameTime(); + SetGlobalVar("G_ICE_TELE", GetGameTime()); + ScheduleDelayedEvent(0.25, "flicker_out"); + ScheduleDelayedEvent(0.75, "tele_out"); + ScheduleDelayedEvent(1.5, "tele_in"); + } + + void OnSpawn() override + { + SetName("Frost Mage"); + SetModel("monsters/ice_mage.mdl"); + SetHealth(4000); + SetDamageResistance("all", 0.5); + SetDamageResistance("cold", 0); + SetDamageResistance("fire", 1.25); + SetDamageResistance("poison", 0.5); + SetWidth(32); + SetHeight(96); + SetRoam(true); + SetHearingSensitivity(4); + SetProp(GetOwner(), "skin", 1); + NExT_BURST = GetGameTime(); + NEXT_BURST += FREQ_BURST; + ScheduleDelayedEvent(1.0, "get_teleporters"); + } + + void npc_targetsighted() + { + if (!(DID_INTRO)) + { + NEXT_BURST = GetGameTime(); + NEXT_BURST += FREQ_BURST; + } + if (GetGameTime() > NEXT_BURST) + { + if (GetEntityRange(m_hAttackTarget) < 200) + { + do_burst(); + } + else + { + NEXT_BURST = GetGameTime(); + NEXT_BURST += FREQ_BURST_SHORT; + } + } + } + + void do_burst() + { + if ((DOING_BEAM)) + { + beam_end(); + } + DOING_BURST = 1; + SetRoam(false); + npcatk_suspend_movement("crouch_aim_staff", 6.0); + npcatk_suspend_ai(6.0); + EmitSound(GetOwner(), 0, SOUND_BURST_CHARGE, 10); + ScheduleDelayedEvent(3.0, "do_burst2"); + ScheduleDelayedEvent(6.0, "do_burst3"); + ClientEvent("new", "all", "effects/sfx_burst_sphere", GetEntityOrigin(GetOwner())); + } + + void do_burst2() + { + EmitSound(GetOwner(), 0, SOUND_BURST, 10); + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 256, DOT_FREEZE, 1.0, GetOwner(), GetOwner(), "none", "cold_effect", "dmgevent:freeze"); + } + + void do_burst3() + { + SetRoam(true); + DOING_BURST = 0; + } + + void freeze_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_cold_freeze", 7.0, GetEntityIndex(GetOwner()), DOT_FREEZE, "none", 9999); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (m_hAttackTarget == "unset") + { + if ((DOING_BEAM)) + { + } + beam_end(); + } + if (!(m_hAttackTarget != "unset")) return; + if (GetGameTime() > NEXT_CL_REFRESH) + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), LIGHT_COLOR, LIGHT_RAD, 15.0); + CL_LIGHT_IDX = "game.script.last_sent_id"; + NEXT_CL_REFRESH = GetGameTime(); + NEXT_CL_REFRESH += 15.0; + } + if ((DOING_BURST)) return; + if ((false)) + { + if (!(DOING_BEAM)) + { + beam_start(); + } + else + { + ApplyEffect(m_hAttackTarget, "effects/dot_cold", 10, GetEntityIndex(GetOwner()), FREEZE_RAY_BASEDOT, "none"); + } + } + else + { + if ((DOING_BEAM)) + { + } + beam_end(); + } + } + + void OnDamage(int damage) override + { + if ((param3).findFirst("effect") >= 0) + { + int NO_DODGE = 1; + } + if (!(GetGameTime() > NEXT_DODGE)) return; + NEXT_DODGE = GetGameTime(); + NEXT_DODGE += FREQ_DODGE; + shadow_shift(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", CL_LIGHT_IDX); + if ((DOING_BEAM)) + { + beam_end(); + } + } + + void shadow_shift() + { + ClientEvent("persist", "all", "effects/sfx_motionblur_temp", GetEntityIndex(GetOwner()), 0, 1, 3.0); + float RND_ANG = Random(0, 359); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(0, 1000, 0))); + EmitSound(GetOwner(), 0, SOUND_DODGE, 10); + ScheduleDelayedEvent(0.25, "stop_shadow_shift"); + } + + void stop_shadow_shift() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 0)); + } + + void beam_start() + { + DOING_BEAM = 1; + Effect("beam", "ents", "lgtning.spr", 1, m_hAttackTarget, 1, GetOwner(), 1, Vector3(0, 128, 255), 200, 0, 60.0); + LAST_BEAM = m_hLastCreated; + EmitSound(GetOwner(), 1, SOUND_FREEZE_RAY, 10); + } + + void beam_end() + { + if ((DOING_BEAM)) + { + CallExternal(m_hAttackTarget, "ext_freeze_ray_remove", GetEntityIndex(GetOwner())); + } + DOING_BEAM = 0; + EmitSound(GetOwner(), 1, SOUND_FREEZE_RAY, 0); + Effect("beam", "update", LAST_BEAM, "remove"); + } + + void get_teleporters() + { + N_TELES = 0; + TELE_ID1 = FindEntityByName("sorc_telepoint1"); + TELE_ID2 = FindEntityByName("sorc_telepoint2"); + TELE_ID3 = FindEntityByName("sorc_telepoint3"); + TELE_ID4 = FindEntityByName("sorc_telepoint4"); + if (((TELE_ID1 !is null))) + { + N_TELES += 1; + } + if (((TELE_ID2 !is null))) + { + N_TELES += 1; + } + if (((TELE_ID3 !is null))) + { + N_TELES += 1; + } + if (((TELE_ID4 !is null))) + { + N_TELES += 1; + } + } + + void flicker_out() + { + RENDER_COUNT -= 50; + if (!(RENDER_COUNT > 0)) return; + ScheduleDelayedEvent(0.1, "flicker_out"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_COUNT); + } + + void tele_out() + { + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + SetEntityOrigin(GetOwner(), Vector3(-20000, 10000, -20000)); + } + + void tele_in() + { + NEAR_DEST = FindEntitiesInSphere("any", 64); + BUGGER_IN_WAY = 0; + for (int i = 0; i < GetTokenCount(NEAR_DEST, ";"); i++) + { + check_near_dest(); + } + if ((BUGGER_IN_WAY)) + { + BUGGER_IN_WAY_COUNT += 1; + LogDebug("tele_in GetEntityName(BUGGER_ID) / GetEntityProperty(BUGGER_ID, "scriptvar") @ TELE_DEST"); + ScheduleDelayedEvent(0.1, "tele_in"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + BUGGER_IN_WAY_COUNT = 0; + SetEntityOrigin(GetOwner(), TELE_DEST); + SetAngles("face"); + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + RENDER_COUNT = 0; + flicker_in(); + LAST_TELE = GetGameTime(); + SetGlobalVar("G_ICE_TELE", GetGameTime()); + } + + void check_near_dest() + { + string CUR_ENT = GetToken(NEAR_DEST, i, ";"); + if ((GetEntityName(CUR_ENT)).findFirst("Barrier") >= 0) + { + int ENT_OKAY = 1; + } + if ((GetEntityProperty(CUR_ENT, "scriptvar"))) + { + int ENT_OKAY = 1; + } + if ((ENT_OKAY)) return; + BUGGER_IN_WAY = 1; + BUGGER_ID = CUR_ENT; + } + + void flicker_in() + { + RENDER_COUNT += 50; + if (RENDER_COUNT >= 255) + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + if (!(RENDER_COUNT < 255)) return; + ScheduleDelayedEvent(0.1, "flicker_in"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_COUNT); + } + + void find_near_teleporter() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + string PLAYER_ORG = GetEntityOrigin(CUR_PLAYER); + if (!(FOUND_NEAR_TARGET == 0)) return; + if (!(N_TELES >= 1)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID1); + TEST_TELE = "z"; + if (Distance(PLAYER_ORG, TEST_TELE) < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 1; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 2)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID2); + TEST_TELE = "z"; + if (Distance(PLAYER_ORG, TEST_TELE) < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 2; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 3)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID3); + TEST_TELE = "z"; + if (Distance(PLAYER_ORG, TEST_TELE) < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 3; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 4)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID4); + TEST_TELE = "z"; + if (Distance(PLAYER_ORG, TEST_TELE) < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 4; + NEW_TARGET = CUR_PLAYER; + } + string TEST_TELE = NPC_SPAWN_LOC; + if (Distance(PLAYER_ORG, TEST_TELE) < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 5; + NEW_TARGET = CUR_PLAYER; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/ice_reaver.as b/scripts/angelscript/monsters/ice_reaver.as new file mode 100644 index 00000000..cd2b62a3 --- /dev/null +++ b/scripts/angelscript/monsters/ice_reaver.as @@ -0,0 +1,469 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class IceReaver : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_PROJECTILE; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_SLASH; + string ANIM_SMASH; + string ANIM_VICTORY; + string ANIM_VICTORY1; + string ANIM_VICTORY2; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BEAM_DAMAGE; + float BEAM_FREQ; + string BEAM_TARGET; + int CAN_FLINCH; + int DID_WARCRY; + int DOSMASH_CHANCE; + int FIRST_ATTACK; + int FLINCH_CHANCE; + int FLINCH_HEALTH; + string HP_STORAGE; + string LIGHTNING_SPRITE; + int MAX_PROJECTILE_AMMO; + string MONSTER_MODEL; + int NEAR_DEATH_THRESHOLD; + string NEXT_PROJECTILE; + string NPC_DAMAGE_TYPE; + float NPC_DELAYING_UNSTUCK; + int NPC_GIVE_EXP; + string PROJECTILE_AMMO; + int PROJECTILE_RANGE; + string PUSH_VEL; + int SEARCH_ANIM_DELAY; + int SHOCK_DAMAGE; + int SHOCK_DURATION; + int SLASH_DAMAGE; + float SLASH_HITCHANCE; + int SMASH_DAMAGE; + float SMASH_HITCHANCE; + int SMASH_HITRANGE; + float SMASH_STUN_CHANCE; + string SOUND_ATTACK; + string SOUND_ATTACKHIT; + string SOUND_ATTACKMISS; + string SOUND_BEAMCHARGE; + string SOUND_BEAMFIRE; + string SOUND_DEATH; + string SOUND_PAIN_NEAR_DEATH; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_RUN1; + string SOUND_RUN2; + string SOUND_RUN3; + string SOUND_SEARCH1; + string SOUND_SEARCH2; + string SOUND_SEARCH3; + string SOUND_SLASHHIT; + string SOUND_SLASHMISS; + string SOUND_SMASHHIT; + string SOUND_SMASHMISS; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_WALK1; + string SOUND_WALK2; + string SOUND_WALK3; + string SOUND_WALK4; + string SOUND_WARCRY; + int STRONG_THRESHOLD; + int STUN_ATTACK; + int SUSPEND_AI; + int WEAK_THRESHOLD; + + IceReaver() + { + SOUND_WALK1 = "common/npc_step1.wav"; + SOUND_WALK2 = "common/npc_step2.wav"; + SOUND_WALK3 = "common/npc_step3.wav"; + SOUND_WALK4 = "common/npc_step4.wav"; + SOUND_RUN1 = "gonarch/gon_step1.wav"; + SOUND_RUN2 = "gonarch/gon_step2.wav"; + SOUND_RUN3 = "gonarch/gon_step3.wav"; + SOUND_DEATH = "gonarch/gon_die1.wav"; + SOUND_WARCRY = "gonarch/gon_alert1.wav"; + SOUND_STRUCK1 = "gonarch/gon_sack1.wav"; + SOUND_STRUCK2 = "gonarch/gon_sack2.wav"; + SOUND_PAIN_STRONG = "gonarch/gon_pain2.wav"; + SOUND_PAIN_WEAK = "gonarch/gon_pain4.wav"; + SOUND_PAIN_NEAR_DEATH = "gonarch/gon_pain5.wav"; + SOUND_SLASHHIT = "zombie/claw_strike1.wav"; + SOUND_SMASHHIT = "zombie/claw_strike2.wav"; + SOUND_SLASHMISS = "zombie/claw_miss1.wav"; + SOUND_SMASHMISS = "zombie/claw_miss2.wav"; + SOUND_BEAMCHARGE = "debris/beamstart2.wav"; + SOUND_BEAMFIRE = "debris/beamstart9.wav"; + SOUND_SEARCH1 = "gonarch/gon_childdie3.wav"; + SOUND_SEARCH2 = "gonarch/gon_childdie2.wav"; + SOUND_SEARCH3 = "gonarch/gon_childdie1.wav"; + SOUND_ATTACKHIT = "unset"; + SOUND_ATTACKMISS = "unset"; + Precache(SOUND_SLASHMISS); + Precache(SOUND_SLASHHIT); + Precache(SOUND_SMASHMISS); + Precache(SOUND_SMASHHIT); + Precache(SOUND_PAIN_STRONG); + Precache(SOUND_PAIN_WEAK); + Precache(SOUND_PAIN_NEAR_DEATH); + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 160; + ATTACK_MOVERANGE = 38; + STRONG_THRESHOLD = 1500; + WEAK_THRESHOLD = 1000; + NEAR_DEATH_THRESHOLD = 500; + PROJECTILE_RANGE = 256; + MAX_PROJECTILE_AMMO = 1; + SLASH_DAMAGE = "$rand(50,100)"; + SMASH_DAMAGE = "$rand(100,250)"; + SLASH_HITCHANCE = 0.9; + SMASH_HITCHANCE = 1.0; + SMASH_HITRANGE = 200; + SMASH_STUN_CHANCE = 0.3; + BEAM_FREQ = 45.0; + BEAM_DAMAGE = 150; + SHOCK_DAMAGE = 20; + SHOCK_DURATION = 5; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_SEARCH = "idle2"; + ANIM_FLINCH = "turnl"; + ANIM_SMASH = "mattack3"; + ANIM_SLASH = "mattack2"; + ANIM_PROJECTILE = "distanceattack"; + ANIM_ALERT = "distanceattack"; + ANIM_DEATH1 = "dieforward"; + ANIM_DEATH2 = "diesimple"; + ANIM_DEATH3 = "diesideways"; + ANIM_VICTORY1 = "victoryeat"; + ANIM_VICTORY2 = "victorysniff"; + ANIM_VICTORY = "victoryeat"; + ANIM_DEATH = "dieforward"; + ANIM_ATTACK = "mattack3"; + CAN_FLINCH = 1; + FLINCH_HEALTH = 500; + FLINCH_CHANCE = 30; + DOSMASH_CHANCE = 30; + LIGHTNING_SPRITE = "lgtning.spr"; + MONSTER_MODEL = "monsters/abominable.mdl"; + Precache(LIGHTNING_SPRITE); + Precache(MONSTER_MODEL); + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Ice Reaver"); + SetHealth(2000); + SetRoam(true); + SetDamageResistance("cold", 0.0); + if (StringToLower(GetMapName()) == "the_wall") + { + SetWidth(48); + SetHeight(64); + } + else + { + SetWidth(72); + SetHeight(64); + } + NPC_GIVE_EXP = 400; + SetRace("demon"); + SetHearingSensitivity(3); + Precache(MONSTER_MODEL); + SetModel(MONSTER_MODEL); + SetMoveAnim(ANIM_WALK); + if ((StringToLower(GetMapName())).findFirst("the_wall") == 0) + { + BEAM_FREQ = 15.0; + } + PROJECTILE_AMMO = MAX_PROJECTILE_AMMO; + HP_STORAGE = GetMonsterHP(); + NEXT_PROJECTILE = GetGameTime(); + NEXT_PROJECTILE += BEAM_FREQ; + ScheduleDelayedEvent(1.0, "post_spawn"); + } + + void post_spawn() + { + SetDamageResistance("holy", 0.0); + } + + void npc_targetsighted() + { + if ((DID_WARCRY)) return; + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + FIRST_ATTACK = 1; + NEXT_PROJECTILE = GetGameTime(); + NEXT_PROJECTILE += 1.0; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + } + + void my_target_died() + { + ice_reaver_beam_reload(); + SetHealth(HP_STORAGE); + if ((false)) return; + int RAND_VICT = RandomInt(1, 2); + if (RAND_VICT == 1) + { + ANIM_VICTORY = ANIM_VICTORY1; + } + if (RAND_VICT == 2) + { + ANIM_VICTORY = ANIM_VICTORY2; + } + PlayAnim("once", ANIM_VICTORY); + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) return; + if ((I_R_FROZEN)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(GetGameTime() > NEXT_PROJECTILE)) return; + NEXT_PROJECTILE = GetGameTime(); + NEXT_PROJECTILE += BEAM_FREQ; + if (!(false)) return; + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + BEAM_TARGET = m_hAttackTarget; + npcatk_faceattacker(); + EmitSound(GetOwner(), 0, SOUND_BEAMCHARGE, 10); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + npcatk_suspend_movement(ANIM_PROJECTILE, 2.0); + PlayAnim("critical", ANIM_PROJECTILE); + } + else + { + reaver_beam_reposition(); + NEXT_PROJECTILE = GetGameTime(); + NEXT_PROJECTILE += 3.0; + } + } + + void attack_ranged() + { + STUN_ATTACK = 0; + ScheduleDelayedEvent(0.5, "npcatk_resume_ai"); + EmitSound(GetOwner(), 0, SOUND_BEAMFIRE, 10); + SetMoveDest(BEAM_TARGET); + string BEAM_START = GetMonsterProperty("origin"); + string BEAM_END = GetEntityOrigin(BEAM_TARGET); + Effect("beam", "point", LIGHTNING_SPRITE, 80, /* TODO: $relpos */ $relpos(0, 0, -22), BEAM_END, Vector3(255, 255, 255), 150, 50, 0.2); + Effect("beam", "point", LIGHTNING_SPRITE, 80, /* TODO: $relpos */ $relpos(-22, 0, 22), BEAM_END, Vector3(255, 255, 255), 150, 50, 0.2); + Effect("beam", "point", LIGHTNING_SPRITE, 80, /* TODO: $relpos */ $relpos(22, 0, 22), BEAM_END, Vector3(255, 255, 255), 150, 50, 0.2); + SOUND_ATTACK = "unset"; + NPC_DAMAGE_TYPE = "lightning"; + XDoDamage(BEAM_TARGET, "direct", BEAM_DAMAGE, 1.0, GetOwner(), GetOwner(), "none", "lightning", "dmgevent:beam"); + } + + void beam_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_lightning", SHOCK_DURATION, GetEntityIndex(GetOwner()), SHOCK_DAMAGE); + } + + void reaver_beam_reposition() + { + npcatk_flee(m_hAttackTarget, 640, 2.0); + } + + void npc_selectattack() + { + int RAND_ATK = RandomInt(1, 100); + if (RAND_ATK <= DOSMASH_CHANCE) + { + ANIM_ATTACK = ANIM_SMASH; + } + if (RAND_ATK > DOSMASH_CHANCE) + { + ANIM_ATTACK = ANIM_SLASH; + } + if ((FIRST_ATTACK)) + { + ANIM_ATTACK = ANIM_SMASH; + } + FIRST_ATTACK = 0; + } + + void attack_mele1() + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, SLASH_DAMAGE, SLASH_HITCHANCE, GetOwner(), GetOwner(), "none", "slash", "dmgevent:slash"); + } + + void slash_dodamage() + { + STUN_ATTACK = 0; + int RANDOM_PUSH = RandomInt(100, 175); + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, RANDOM_PUSH, 120); + SOUND_ATTACKHIT = SOUND_SLASHHIT; + SOUND_ATTACKMISS = SOUND_SLASHMISS; + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + string OUT_PAR3 = param3; + string OUT_PAR4 = param4; + string OUT_PAR5 = param5; + mele_attack(OUT_PAR1, OUT_PAR2, OUT_PAR3, OUT_PAR4, OUT_PAR5); + STUN_ATTACK = 1; + SOUND_ATTACKHIT = SOUND_SMASHHIT; + SOUND_ATTACKMISS = SOUND_SMASHMISS; + int RANDOM_PUSH = RandomInt(200, 400); + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, RANDOM_PUSH, 120); + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + string OUT_PAR3 = param3; + string OUT_PAR4 = param4; + string OUT_PAR5 = param5; + mele_attack(OUT_PAR1, OUT_PAR2, OUT_PAR3, OUT_PAR4, OUT_PAR5); + } + + void attack_mele2() + { + XDoDamage(m_hAttackTarget, SMASH_HITRANGE, SMASH_DAMAGE, SMASH_HITCHANCE, GetOwner(), GetOwner(), "none", "slash", "dmgevent:smash"); + } + + void npcatk_search_init_advanced() + { + if ((SEARCH_ANIM_DELAY)) return; + NPC_DELAYING_UNSTUCK = 10.0; + PlayAnim("once", ANIM_SEARCH); + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SEARCH_ANIM_DELAY = 1; + ScheduleDelayedEvent(5.0, "reset_search_anim"); + } + + void reset_search_anim() + { + // TODO: setrvard SEARCH_ANIM_DELAY 0 + } + + void mele_attack() + { + if (!(param1)) + { + if (SOUND_ATTACKMISS != "unset") + { + EmitSound(GetOwner(), 0, SOUND_ATTACKMISS, 10); + } + } + if ((param1)) + { + if (SOUND_ATTACKHIT != "unset") + { + EmitSound(GetOwner(), 0, SOUND_ATTACKHIT, 10); + } + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + if ((STUN_ATTACK)) + { + STUN_ATTACK = 0; + if (RandomInt(1, 100) > SMASH_STUN_CHANCE) + { + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 7, GetEntityIndex(GetOwner())); + } + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + HP_STORAGE = GetMonsterHP(); + if (GetMonsterHP() >= 1500) + { + string PAIN_SOUND = SOUND_PAIN_STRONG; + } + if (GetMonsterHP() < 1500) + { + string PAIN_SOUND = SOUND_PAIN_WEAK; + } + if (GetMonsterHP() < 500) + { + string PAIN_SOUND = SOUND_PAIN_NEAR_DEATH; + } + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, PAIN_SOUND + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, PAIN_SOUND}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void monster_walk_step() + { + // PlayRandomSound from: SOUND_WALK1, SOUND_WALK2, SOUND_WALK3, SOUND_WALK4 + array sounds = {SOUND_WALK1, SOUND_WALK2, SOUND_WALK3, SOUND_WALK4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void monster_run_step() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 64, 10, 0.5, 128); + // PlayRandomSound from: SOUND_RUN1, SOUND_RUN2, SOUND_RUN3 + array sounds = {SOUND_RUN1, SOUND_RUN2, SOUND_RUN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RAND_DEATH = RandomInt(1, 3); + if (RAND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RAND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RAND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + SUSPEND_AI = 1; + SetMoveDest("none"); + SetMoveAnim(ANIM_DEATH); + } + + void game_reached_destination() + { + if (!(m_hAttackTarget == "unset")) return; + if (!(NPC_LOST_TARGET == "unset")) return; + if ((false)) return; + int RAND_VICT = RandomInt(1, 2); + if (RAND_VICT == 1) + { + ANIM_VICTORY = ANIM_VICTORY1; + } + if (RAND_VICT == 2) + { + ANIM_VICTORY = ANIM_VICTORY2; + } + PlayAnim("once", ANIM_VICTORY); + } + +} + +} diff --git a/scripts/angelscript/monsters/ice_reaver_mini.as b/scripts/angelscript/monsters/ice_reaver_mini.as new file mode 100644 index 00000000..0be99681 --- /dev/null +++ b/scripts/angelscript/monsters/ice_reaver_mini.as @@ -0,0 +1,257 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class IceReaverMini : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_SLASH; + string ANIM_SMASH; + string ANIM_VICTORY1; + string ANIM_VICTORY2; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int DID_ALERT; + float DMG_SLASH; + float DMG_SMASH; + int DOT_FROST; + int FLINCH_CHANCE; + string FLINCH_HEALTH; + string HALF_HEALTH; + int MELEE_ATTACK; + string NEXT_EAT; + string NEXT_SEARCH; + int NPC_GIVE_EXP; + string PUSH_VEL; + string QUARTER_HEALTH; + float SLASH_HITCHANCE; + int SLASH_HITRANGE; + float SMASH_HITCHANCE; + int SMASH_HITRANGE; + string SOUND_ALERT; + string SOUND_DEATH; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_RUN1; + string SOUND_RUN2; + string SOUND_RUN3; + string SOUND_RUN4; + string SOUND_SEARCH1; + string SOUND_SEARCH2; + string SOUND_SEARCH3; + string SOUND_SLASHHIT; + string SOUND_SLASHMISS; + string SOUND_SMASHHIT; + string SOUND_SMASHMISS; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + IceReaverMini() + { + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_FLINCH = "turnl"; + ANIM_DEATH = "dieforward"; + ANIM_ATTACK = "mattack3"; + ANIM_SEARCH = "idle2"; + ANIM_SMASH = "mattack3"; + ANIM_SLASH = "mattack2"; + ANIM_ALERT = "distanceattack"; + ANIM_ALERT = "distanceattack"; + ANIM_DEATH1 = "diesimple"; + ANIM_DEATH2 = "diesideways"; + ANIM_VICTORY1 = "victoryeat"; + ANIM_VICTORY2 = "victorysniff"; + CAN_FLINCH = 1; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 75; + ATTACK_MOVERANGE = 40; + DMG_SLASH = Random(25, 50); + DMG_SMASH = Random(50, 100); + DOT_FROST = 25; + NPC_GIVE_EXP = 200; + SLASH_HITCHANCE = 0.8; + SMASH_HITCHANCE = 0.9; + SMASH_HITRANGE = 75; + SLASH_HITRANGE = 75; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN1 = "monsters/ice_reaver_mini/gon_pain2.wav"; + SOUND_PAIN2 = "monsters/ice_reaver_mini/gon_pain4.wav"; + SOUND_PAIN3 = "monsters/ice_reaver_mini/gon_pain5.wav"; + SOUND_DEATH = "monsters/ice_reaver_mini/gon_die1.wav"; + SOUND_ALERT = "monsters/ice_reaver_mini/gon_alert1.wav"; + SOUND_SEARCH1 = "monsters/ice_reaver_mini/gon_childdie3.wav"; + SOUND_SEARCH2 = "monsters/ice_reaver_mini/gon_childdie2.wav"; + SOUND_SEARCH3 = "monsters/ice_reaver_mini/gon_childdie1.wav"; + SOUND_RUN1 = "common/npc_step1.wav"; + SOUND_RUN2 = "common/npc_step2.wav"; + SOUND_RUN3 = "common/npc_step3.wav"; + SOUND_RUN4 = "common/npc_step4.wav"; + SOUND_SLASHHIT = "zombie/claw_strike1.wav"; + SOUND_SMASHHIT = "zombie/claw_strike2.wav"; + SOUND_SLASHMISS = "zombie/claw_miss1.wav"; + SOUND_SMASHMISS = "zombie/claw_miss2.wav"; + } + + void game_precache() + { + Precache(SOUND_PAIN1); + Precache(SOUND_PAIN2); + Precache(SOUND_PAIN3); + } + + void OnSpawn() override + { + SetName("Ice Reaver Hatchling"); + SetHealth(500); + SetRoam(true); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 1.2); + SetWidth(32); + SetHeight(32); + NPC_GIVE_EXP = 200; + SetRace("demon"); + SetHearingSensitivity(3); + SetModel("monsters/abominable_mini.mdl"); + SetMoveAnim(ANIM_WALK); + PUSH_VEL = "none"; + ScheduleDelayedEvent(1.5, "post_setup"); + } + + void post_setup() + { + FLINCH_HEALTH = GetEntityMaxHealth(GetOwner()); + FLINCH_HEALTH *= 0.25; + FLINCH_CHANCE = 30; + HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + HALF_HEALTH *= 0.5; + QUARTER_HEALTH = FLINCH_HEALTH; + } + + void npc_targetsighted() + { + if ((DID_ALERT)) return; + DID_ALERT = 1; + PlayAnim("critical", ANIM_ALERT); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + } + + void my_target_died() + { + DID_ALERT = 0; + if (!(GetGameTime() > NEXT_EAT)) return; + NEXT_EAT = GetGameTime(); + NEXT_EAT += 20.0; + int RND_VICT = RandomInt(1, 2); + if (RND_VICT == 1) + { + PlayAnim("critical", ANIM_VICTORY1); + } + if (RND_VICT == 2) + { + PlayAnim("critical", ANIM_VICTORY2); + } + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npcatk_lost_sight() + { + if (!(GetGameTime() > NEXT_SEARCH)) return; + NEXT_SEARCH = GetGameTime(); + NEXT_SEARCH += 10.0; + PlayAnim("once", ANIM_SEARCH); + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_ATTACKMISS, 10); + } + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_ATTACKHIT, 10); + if (PUSH_VEL != "none") + { + AddVelocity(param2, PUSH_VEL); + PUSH_VEL = "none"; + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + } + } + MELEE_ATTACK = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + string MY_HP = GetEntityHealth(GetOwner()); + if (MY_HP > HALF_HEALTH) + { + string PAIN_SOUND = SOUND_PAIN1; + } + if (MY_HP < HALF_HEALTH) + { + string PAIN_SOUND = SOUND_PAIN2; + } + if (MY_HP < QUARTER_HEALTH) + { + string PAIN_SOUND = SOUND_PAIN3; + } + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, PAIN_SOUND + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, PAIN_SOUND}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void monster_run_step() + { + // PlayRandomSound from: SOUND_RUN1, SOUND_RUN2, SOUND_RUN3, SOUND_RUN4 + array sounds = {SOUND_RUN1, SOUND_RUN2, SOUND_RUN3, SOUND_RUN4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void attack_mele1() + { + PUSH_VEL = "none"; + MELEE_ATTACK = 1; + DoDamage(m_hAttackTarget, SLASH_HITRANGE, DMG_SLASH, SLASH_HITCHANCE, "slash"); + if (!(RandomInt(1, 5) == 1)) return; + ANIM_ATTACK = ANIM_SMASH; + } + + void attack_mele2() + { + MELEE_ATTACK = 1; + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, 300, 110); + DoDamage(m_hAttackTarget, SMASH_HITRANGE, DMG_SMASH, SMASH_HITCHANCE, "slash"); + ANIM_ATTACK = ANIM_SLASH; + } + +} + +} diff --git a/scripts/angelscript/monsters/ice_troll.as b/scripts/angelscript/monsters/ice_troll.as new file mode 100644 index 00000000..e0aadf7c --- /dev/null +++ b/scripts/angelscript/monsters/ice_troll.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/troll_ice_lobber.as" + +namespace MS +{ + +class IceTroll : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/ice_troll_lobber.as b/scripts/angelscript/monsters/ice_troll_lobber.as new file mode 100644 index 00000000..0fc47ad3 --- /dev/null +++ b/scripts/angelscript/monsters/ice_troll_lobber.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/troll_ice_lobber.as" + +namespace MS +{ + +class IceTrollLobber : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/ice_troll_turret.as b/scripts/angelscript/monsters/ice_troll_turret.as new file mode 100644 index 00000000..c32b59b3 --- /dev/null +++ b/scripts/angelscript/monsters/ice_troll_turret.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/troll_ice_turret.as" + +namespace MS +{ + +class IceTrollTurret : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/k_alcolyte.as b/scripts/angelscript/monsters/k_alcolyte.as new file mode 100644 index 00000000..cb95baf8 --- /dev/null +++ b/scripts/angelscript/monsters/k_alcolyte.as @@ -0,0 +1,665 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class KAlcolyte : CGameScript +{ + int ALCO_TYPE; + string ANIM_ATTACK; + string ANIM_ATTACK_CRAWL; + string ANIM_ATTACK_NORM; + string ANIM_CAST_CRAWL; + string ANIM_CAST_NORM; + string ANIM_CRAWL; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DEATH6; + string ANIM_DEATH7; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_IDLE_CRAWL; + string ANIM_IDLE_NORM; + string ANIM_JUMP; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_SEARCH; + string ANIM_WALK; + string ANIM_WALK_NORM; + string AS_ATTACKING; + string ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float CHANCE_EFFECT; + string DID_WARCRY; + int DMG_KNIFE; + int DMG_TOSS; + int DROP_GOLD; + int DROP_GOLD_AMT; + string EFFECT_DMG; + string EFFECT_DUR; + string EFFECT_SCRIPT; + string FREQ_COMBAT; + float FREQ_IDLE; + float FREQ_LEAP; + float FREQ_LOOK; + float FREQ_LOTS; + float FREQ_NORM; + float FREQ_RARE; + string FREQ_THROW; + int JUMP_CHANCE; + string K_MOVE_TYPE; + string LEAP_DELAY; + string NEXT_AIDED_SOUND; + string NEXT_LH; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string ORIG_WEAPON; + int PROJ_SPEED; + int SEARCH_DELAY; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_BURN; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_DRAW; + string SOUND_EFFECT; + string SOUND_EFFECT_DELAY; + string SOUND_FREEZE; + string SOUND_IDLE; + string SOUND_JUMP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PARRY; + string SOUND_POISON; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWING; + string SOUND_THROW; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + int STARTED_CYCLES; + string THROW_DELAY; + + KAlcolyte() + { + ANIM_WALK = "walk2handed"; + ANIM_RUN = "run2"; + ANIM_IDLE = "idle"; + ANIM_ATTACK = "ref_shoot_knife"; + ANIM_DEATH = "die_simple"; + ANIM_WALK_NORM = "walk2handed"; + ANIM_RUN_NORM = "run2"; + ANIM_IDLE_NORM = "idle"; + ANIM_HOP = "jump"; + ANIM_JUMP = "long_jump"; + ANIM_CRAWL = "crawl"; + ANIM_IDLE_CRAWL = "crouch_idle"; + ANIM_ATTACK_NORM = "ref_shoot_knife"; + ANIM_ATTACK_CRAWL = "crouch_shoot_knife"; + ANIM_SEARCH = "look_idle"; + ANIM_CAST_NORM = "ref_shoot_onehanded"; + ANIM_CAST_CRAWL = "crouch_shoot_onehanded"; + ANIM_DEATH1 = "die_simple"; + ANIM_DEATH2 = "die_backwards1"; + ANIM_DEATH3 = "die_backwards"; + ANIM_DEATH4 = "die_forwards"; + ANIM_DEATH5 = "headshot"; + ANIM_DEATH6 = "die_spin"; + ANIM_DEATH7 = "gutshot"; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 170; + ATTACK_MOVERANGE = 80; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 20); + NPC_GIVE_EXP = 100; + DMG_KNIFE = RandomInt(10, 20); + CHANCE_EFFECT = 0.3; + FREQ_IDLE = Random(5.0, 10.0); + DMG_TOSS = RandomInt(20, 30); + PROJ_SPEED = 600; + FREQ_LOOK = 10.0; + FREQ_LOTS = Random(3, 10); + FREQ_RARE = Random(20, 30); + FREQ_NORM = Random(10, 15); + FREQ_LEAP = 5.0; + SOUND_JUMP = "voices/kcult_jump.wav"; + SOUND_SWING = "weapons/swingsmall.wav"; + SOUND_THROW = "zombie/claw_miss1.wav"; + SOUND_DRAW = "weapons/dagger/dagger2.wav"; + SOUND_PARRY = "weapons/dagger/daggermetal2.wav"; + SOUND_PAIN1 = "voices/kcult_pain3.wav"; + SOUND_PAIN2 = "voices/kcult_pain2.wav"; + SOUND_DEATH1 = "voices/kcult_pain1.wav"; + SOUND_DEATH2 = "voices/kcult_die1.wav"; + SOUND_ALERT1 = "voices/kcult_ally_alert1.wav"; + SOUND_ALERT2 = "voices/kcult_ally_alert2.wav"; + SOUND_IDLE = "voices/kcult_idle.wav"; + SOUND_WARCRY1 = "voices/kcult_alert1.wav"; + SOUND_WARCRY2 = "voices/kcult_alert2.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_BURN = "ambience/steamburst1.wav"; + SOUND_POISON = "bullchicken/bc_bite2.wav"; + SOUND_FREEZE = "magic/frost_forward.wav"; + Precache(SOUND_FREEZE); + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_IDLE); + if (m_hAttackTarget == "unset") + { + } + if (!(NPC_MOVING_LAST_KNOWN)) + { + } + PlayAnim("once", ANIM_SEARCH); + if (GetGameTime() > NEXT_LH) + { + NEXT_LH = GetGameTime(); + NEXT_LH += Random(5.0, 15.0); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + LogDebug("repeat_idle"); + } + + void OnSpawn() override + { + SetName("Kharaztorant Acolyte"); + SetModel("monsters/k_alcolyte.mdl"); + if ((true)) + { + int BASE_HP = RandomInt(200, 300); + SetHealth(BASE_HP); + } + SetRace("demon"); + SetWidth(32); + if (!(AM_TURRET)) + { + SetHeight(72); + } + if ((AM_TURRET)) + { + SetHeight(48); + } + SetRoam(true); + SetHearingSensitivity(4); + if ((OVERRIDE_TYPE)) return; + ALCO_TYPE = RandomInt(1, 4); + } + + void OnPostSpawn() override + { + NEXT_AIDED_SOUND = GetGameTime(); + NEXT_AIDED_SOUND += Random(3.0, 5.0); + NEXT_LH = GetGameTime(); + NEXT_LH += Random(3.0, 5.0); + SetDamageResistance("holy", 0.0); + JUMP_CHANCE = 1; + if (ALCO_TYPE == 1) + { + ALCO_TYPE = "ninja"; + } + if (ALCO_TYPE == 2) + { + ALCO_TYPE = "fire"; + } + if (ALCO_TYPE == 3) + { + ALCO_TYPE = "poison"; + } + if (ALCO_TYPE == 4) + { + ALCO_TYPE = "cold"; + } + int RND_FACE = RandomInt(1, 2); + if (RND_FACE == 1) + { + SetModelBody(1, 0); + } + if (RND_FACE == 2) + { + SetModelBody(1, 2); + } + if (ALCO_TYPE == "ninja") + { + SetModelBody(2, 0); + ORIG_WEAPON = 0; + FREQ_COMBAT = FREQ_LOTS; + SetDamageResistance("all", 0.5); + SetStat("parry", 100); + FREQ_THROW = 5.0; + ATTACK_HITCHANCE = 90; + JUMP_CHANCE = 2; + } + if (ALCO_TYPE == "fire") + { + SetModelBody(2, 1); + ORIG_WEAPON = 1; + FREQ_COMBAT = FREQ_RARE; + EFFECT_SCRIPT = "effects/dot_fire"; + EFFECT_DUR = 5.0; + EFFECT_DMG = 30; + SOUND_EFFECT = SOUND_BURN; + THROW_DELAY = 1; + FREQ_THROW = 10.0; + FREQ_THROW("reset_throw_delay"); + ATTACK_HITCHANCE = 80; + } + if (ALCO_TYPE == "poison") + { + SetModelBody(2, 2); + ORIG_WEAPON = 2; + FREQ_COMBAT = FREQ_NORM; + EFFECT_SCRIPT = "effects/dot_poison"; + EFFECT_DUR = 15.0; + EFFECT_DMG = 4; + SOUND_EFFECT = SOUND_POISON; + FREQ_THROW = 2.0; + THROW_DELAY = 1; + FREQ_THROW("reset_throw_delay"); + ATTACK_HITCHANCE = 85; + JUMP_CHANCE = 3; + } + if (ALCO_TYPE == "cold") + { + SetModelBody(2, 3); + ORIG_WEAPON = 3; + FREQ_COMBAT = FREQ_RARE; + EFFECT_SCRIPT = "effects/dot_cold"; + EFFECT_DUR = 5.0; + EFFECT_DMG = 5; + SOUND_EFFECT = SOUND_FREEZE; + FREQ_THROW = 10.0; + THROW_DELAY = 1; + FREQ_THROW("reset_throw_delay"); + ATTACK_HITCHANCE = 75; + } + if ((I_POUNCE)) + { + SetMoveAnim(ANIM_IDLE_CRAWL); + SetIdleAnim(ANIM_IDLE_CRAWL); + } + SetProp(GetOwner(), "skin", ORIG_WEAPON); + if ((I_POUNCE)) return; + walk_mode(); + } + + void ambush() + { + LogDebug("*** POUNCE ***"); + npcatk_resume_ai(); + npcatk_faceattacker(NPC_PROXACT_PLAYERID); + run_mode(); + AS_ATTACKING = GetGameTime(); + ScheduleDelayedEvent(0.01, "leap_ambush"); + cycle_up("ambush"); + SetMoveAnim(ANIM_RUN_NORM); + SetIdleAnim(ANIM_IDLE_NORM); + } + + void leap_ambush() + { + leap_at(NPC_PROXACT_PLAYERID); + } + + void npc_targetsighted() + { + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(0.1, "draw_sound"); + } + if ((STARTED_CYCLES)) return; + STARTED_CYCLES = 1; + FREQ_COMBAT("do_combat_move"); + } + + void draw_sound() + { + EmitSound(GetOwner(), 0, SOUND_DRAW, 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RND_DEATH = RandomInt(1, 7); + if (RND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (RND_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (RND_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + if (RND_DEATH == 6) + { + ANIM_DEATH = ANIM_DEATH6; + } + if (RND_DEATH == 7) + { + ANIM_DEATH = ANIM_DEATH7; + } + // PlayRandomSound from: SOUND_DEATH1, SOUND_DEATH2 + array sounds = {SOUND_DEATH1, SOUND_DEATH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void reset_search_delay() + { + SEARCH_DELAY = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 8); + if (param1 > 50) + { + if (!(LEAP_DELAY)) + { + } + LEAP_DELAY = 1; + FREQ_LEAP("reset_leap_delay"); + leap_away(GetEntityIndex(m_hLastStruck)); + } + } + + void run_mode() + { + K_MOVE_TYPE = "run"; + ANIM_RUN = ANIM_RUN_NORM; + ANIM_WALK = ANIM_WALK_NORM; + ANIM_IDLE = ANIM_IDLE_NORM; + ANIM_ATTACK = ANIM_ATTACK_NORM; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + } + + void walk_mode() + { + K_MOVE_TYPE = "walk"; + ANIM_RUN = ANIM_RUN_NORM; + ANIM_WALK = ANIM_WALK_NORM; + ANIM_IDLE = ANIM_IDLE_NORM; + ANIM_ATTACK = ANIM_ATTACK_NORM; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + + void crawl_mode() + { + K_MOVE_TYPE = "crawl"; + ANIM_RUN = ANIM_CRAWL; + ANIM_WALK = ANIM_CRAWL; + ANIM_IDLE = ANIM_IDLE_CRAWL; + ANIM_ATTACK = ANIM_ATTACK_CRAWL; + SetMoveAnim(ANIM_CRAWL); + SetIdleAnim(ANIM_IDLE_CRAWL); + } + + void leap_at() + { + if ((NO_JUMPS)) return; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(GetEntityIndex(param1)); + AS_ATTACKING = GetGameTime(); + EmitSound(GetOwner(), 0, SOUND_JUMP, 10); + PlayAnim("critical", ANIM_JUMP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_away() + { + if ((NO_JUMPS)) return; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(0.2, "leap_away"); + SetMoveDest(GetEntityIndex(param1)); + AS_ATTACKING = GetGameTime(); + EmitSound(GetOwner(), 0, SOUND_JUMP, 10); + PlayAnim("critical", ANIM_JUMP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 600, 75)); + } + + void toggle_stance() + { + if (K_MOVE_TYPE != "crawl") + { + ScheduleDelayedEvent(0.1, "crawl_mode"); + } + if (K_MOVE_TYPE == "crawl") + { + ScheduleDelayedEvent(0.1, "run_mode"); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(CYCLED_UP)) return; + if (GetEntityRange(m_hAttackTarget) >= ATTACK_RANGE) + { + if (K_MOVE_TYPE != "run") + { + if (ALCO_TYPE != "poison") + { + } + run_mode(); + } + if (!(THROW_DELAY)) + { + if ((false)) + { + } + THROW_DELAY = 1; + FREQ_THROW("reset_throw_delay"); + npcatk_faceattacker(m_hAttackTarget); + EmitSound(GetOwner(), 0, SOUND_THROW, 10); + PlayAnim("critical", ANIM_ATTACK); + ScheduleDelayedEvent(0.1, "do_throw"); + NINJA_JUMP = GetGameTime(); + NINJA_JUMP += 2; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (ALCO_TYPE == "ninja") + { + if (GetGameTime() > NINJA_JUMP) + { + } + if (!(LEAP_DELAY)) + { + } + LEAP_DELAY = 1; + FREQ_LEAP("reset_leap_delay"); + leap_at(m_hAttackTarget); + } + } + } + + void reset_throw_delay() + { + THROW_DELAY = 0; + } + + void swing_dodamage() + { + if (!(ALCO_TYPE != "ninja")) return; + if (!(GetRelationship(param2) == "enemy")) return; + if (!(RandomInt(1, 100) < CHANCE_EFFECT)) return; + if (!(SOUND_EFFECT_DELAY)) + { + SOUND_EFFECT_DELAY = 1; + ScheduleDelayedEvent(5.1, "reset_sound_effect_delay"); + EmitSound(GetOwner(), 0, SOUND_EFFECT, 10); + } + if (!(EFFECT_SCRIPT != "EFFECT_SCRIPT")) return; + ApplyEffect(param2, EFFECT_SCRIPT, EFFECT_DUR, GetEntityIndex(GetOwner()), EFFECT_DMG); + } + + void reset_sound_effect_delay() + { + SOUND_EFFECT_DELAY = 0; + } + + void do_combat_move() + { + if ((AM_TURRET)) return; + FREQ_COMBAT("do_combat_move"); + if (!(m_hAttackTarget != "unset")) return; + int RND_MOVE = RandomInt(1, 5); + if (RND_MOVE > JUMP_CHANCE) + { + toggle_stance(); + } + if (RND_MOVE <= JUMP_CHANCE) + { + if (!(LEAP_DELAY)) + { + } + LEAP_DELAY = 1; + FREQ_LEAP("reset_leap_delay"); + leap_away(m_hAttackTarget); + } + } + + void reset_leap_delay() + { + LEAP_DELAY = 0; + } + + void attack_knife() + { + EmitSound(GetOwner(), 0, SOUND_SWING, 5); + string F_DMG_KNIFE = DMG_KNIFE; + if (GetPlayerCount() > 4) + { + F_DMG_KNIFE *= 2; + } + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, F_DMG_KNIFE, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "slash", "dmgevent:swing"); + } + + void OnParry(CBaseEntity@ attacker) override + { + if (K_MOVE_TYPE != "crawl") + { + PlayAnim("critical", ANIM_CAST_NORM); + } + if (K_MOVE_TYPE == "crawl") + { + PlayAnim("critical", ANIM_CAST_CRAWL); + } + EmitSound(GetOwner(), 0, SOUND_PARRY, 10); + } + + void do_throw() + { + string F_DMG_TOSS = DMG_TOSS; + if (GetPlayerCount() > 4) + { + F_DMG_TOSS *= 2; + } + if (K_MOVE_TYPE != "crawl") + { + int L_UP = 62; + } + if (K_MOVE_TYPE == "crawl") + { + int L_UP = 34; + } + string L_POS = GetEntityOrigin(GetOwner()); + L_POS += "z"; + if (K_MOVE_TYPE != "crawl") + { + TossProjectile("proj_k_knife", L_POS, m_hAttackTarget, PROJ_SPEED, F_DMG_TOSS, 0.2, "none"); + } + SetModelBody(2, 4); + AS_ATTACKING = GetGameTime(); + npcatk_suspend_ai("do_throw"); + ScheduleDelayedEvent(0.5, "do_reload"); + } + + void do_reload() + { + if (K_MOVE_TYPE != "crawl") + { + PlayAnim("critical", ANIM_SEARCH); + } + if (K_MOVE_TYPE == "crawl") + { + PlayAnim("critical", ANIM_CAST_CRAWL); + } + ScheduleDelayedEvent(0.5, "do_reload2"); + } + + void do_reload2() + { + AS_ATTACKING = GetGameTime(); + npcatk_resume_ai("reload2"); + SetModelBody(2, ORIG_WEAPON); + EmitSound(GetOwner(), 0, SOUND_DRAW, 10); + } + + void npcatk_lost_sight() + { + LogDebug("npcatk_lost_sight NEXT_LH vs game.time"); + if ((false)) return; + if (GetGameTime() > NEXT_LH) + { + NEXT_LH = GetGameTime(); + NEXT_LH += Random(5.0, 15.0); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if ((SEARCH_DELAY)) return; + SEARCH_DELAY = 1; + FREQ_LOOK("reset_search_delay"); + PlayAnim("once", ANIM_SEARCH); + AS_ATTACKING = GetGameTime(); + } + + void OnAidingAlly(CBaseEntity@ ally, CBaseEntity@ enemy) + { + CallExternal(NPC_ALLY_TO_AID, "being_aided"); + } + + void being_aided() + { + if (!(GetGameTime() > NEXT_AIDED_SOUND)) return; + NEXT_AIDED_SOUND = GetGameTime(); + NEXT_AIDED_SOUND += Random(3.0, 5.0); + if (!(false)) return; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_alcolyte_ambush.as b/scripts/angelscript/monsters/k_alcolyte_ambush.as new file mode 100644 index 00000000..e2c3dfdd --- /dev/null +++ b/scripts/angelscript/monsters/k_alcolyte_ambush.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "monsters/k_alcolyte.as" + +namespace MS +{ + +class KAlcolyteAmbush : CGameScript +{ + int I_POUNCE; + int NPC_PROXACT_CONE; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_FOV; + int NPC_PROXACT_IFSEEN; + int NPC_PROXACT_RANGE; + int NPC_PROX_ACTIVATE; + + KAlcolyteAmbush() + { + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 512; + NPC_PROXACT_EVENT = "ambush"; + NPC_PROXACT_IFSEEN = 1; + NPC_PROXACT_FOV = 1; + NPC_PROXACT_CONE = 90; + I_POUNCE = 1; + } + + void OnSpawn() override + { + SetRoam(false); + } + + void run_mode() + { + SetRoam(true); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_alcolyte_blue.as b/scripts/angelscript/monsters/k_alcolyte_blue.as new file mode 100644 index 00000000..bcd128e9 --- /dev/null +++ b/scripts/angelscript/monsters/k_alcolyte_blue.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/k_alcolyte.as" + +namespace MS +{ + +class KAlcolyteBlue : CGameScript +{ + int ALCO_TYPE; + int OVERRIDE_TYPE; + + KAlcolyteBlue() + { + OVERRIDE_TYPE = 1; + ALCO_TYPE = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/k_alcolyte_blue_turret.as b/scripts/angelscript/monsters/k_alcolyte_blue_turret.as new file mode 100644 index 00000000..8347948c --- /dev/null +++ b/scripts/angelscript/monsters/k_alcolyte_blue_turret.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "monsters/k_alcolyte.as" + +namespace MS +{ + +class KAlcolyteBlueTurret : CGameScript +{ + int ALCO_TYPE; + int AM_TURRET; + string ANIM_ATTACK_CRAWL; + string ANIM_ATTACK_NORM; + string ANIM_CRAWL; + string ANIM_HOP; + string ANIM_IDLE_CRAWL; + string ANIM_IDLE_NORM; + string ANIM_JUMP; + string ANIM_RUN_NORM; + string ANIM_WALK_NORM; + float FREQ_THROW; + int NO_JUMPS; + int NO_STUCK_CHECKS; + int OVERRIDE_TYPE; + + KAlcolyteBlueTurret() + { + OVERRIDE_TYPE = 1; + ALCO_TYPE = 4; + ANIM_WALK_NORM = "crouch_idle"; + ANIM_RUN_NORM = "crouch_idle"; + ANIM_IDLE_NORM = "crouch_idle"; + ANIM_HOP = "crouch_idle"; + ANIM_JUMP = "crouch_idle"; + ANIM_CRAWL = "crouch_idle"; + ANIM_IDLE_CRAWL = "crouch_idle"; + ANIM_ATTACK_NORM = "crouch_shoot_knife"; + ANIM_ATTACK_CRAWL = "crouch_shoot_knife"; + AM_TURRET = 1; + NO_JUMPS = 1; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetRoam(false); + SetMoveSpeed(0.0); + } + + void OnPostSpawn() override + { + ScheduleDelayedEvent(0.1, "override_freqs"); + ScheduleDelayedEvent(1.0, "crawl_mode"); + } + + void override_freqs() + { + FREQ_THROW = 2.0; + } + + void run_mode() + { + crawl_mode(); + } + + void walk_mode() + { + crawl_mode(); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_alcolyte_gray.as b/scripts/angelscript/monsters/k_alcolyte_gray.as new file mode 100644 index 00000000..93ea4b40 --- /dev/null +++ b/scripts/angelscript/monsters/k_alcolyte_gray.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/k_alcolyte.as" + +namespace MS +{ + +class KAlcolyteGray : CGameScript +{ + int ALCO_TYPE; + int OVERRIDE_TYPE; + + KAlcolyteGray() + { + OVERRIDE_TYPE = 1; + ALCO_TYPE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/k_alcolyte_green.as b/scripts/angelscript/monsters/k_alcolyte_green.as new file mode 100644 index 00000000..04d5f86d --- /dev/null +++ b/scripts/angelscript/monsters/k_alcolyte_green.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/k_alcolyte.as" + +namespace MS +{ + +class KAlcolyteGreen : CGameScript +{ + int ALCO_TYPE; + int OVERRIDE_TYPE; + + KAlcolyteGreen() + { + OVERRIDE_TYPE = 1; + ALCO_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/k_alcolyte_green_turret.as b/scripts/angelscript/monsters/k_alcolyte_green_turret.as new file mode 100644 index 00000000..eb32a5b5 --- /dev/null +++ b/scripts/angelscript/monsters/k_alcolyte_green_turret.as @@ -0,0 +1,69 @@ +#pragma context server + +#include "monsters/k_alcolyte.as" + +namespace MS +{ + +class KAlcolyteGreenTurret : CGameScript +{ + int ALCO_TYPE; + int AM_TURRET; + string ANIM_ATTACK_CRAWL; + string ANIM_ATTACK_NORM; + string ANIM_CRAWL; + string ANIM_HOP; + string ANIM_IDLE_CRAWL; + string ANIM_IDLE_NORM; + string ANIM_JUMP; + string ANIM_RUN_NORM; + string ANIM_WALK_NORM; + string MOVE_TYPE; + int NO_JUMPS; + int NO_STUCK_CHECKS; + int OVERRIDE_TYPE; + + KAlcolyteGreenTurret() + { + OVERRIDE_TYPE = 1; + ALCO_TYPE = 3; + ANIM_WALK_NORM = "crouch_idle"; + ANIM_RUN_NORM = "crouch_idle"; + ANIM_IDLE_NORM = "crouch_idle"; + ANIM_HOP = "crouch_idle"; + ANIM_JUMP = "crouch_idle"; + ANIM_CRAWL = "crouch_idle"; + ANIM_IDLE_CRAWL = "crouch_idle"; + ANIM_ATTACK_NORM = "crouch_shoot_knife"; + ANIM_ATTACK_CRAWL = "crouch_shoot_knife"; + AM_TURRET = 1; + NO_JUMPS = 1; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetRoam(false); + SetMoveSpeed(0.0); + ScheduleDelayedEvent(0.5, "crawl_mode"); + } + + void OnPostSpawn() override + { + ScheduleDelayedEvent(1.0, "crawl_mode"); + MOVE_TYPE = "crawl"; + } + + void run_mode() + { + crawl_mode(); + } + + void walk_mode() + { + crawl_mode(); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_alcolyte_random.as b/scripts/angelscript/monsters/k_alcolyte_random.as new file mode 100644 index 00000000..2403d833 --- /dev/null +++ b/scripts/angelscript/monsters/k_alcolyte_random.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/k_alcolyte.as" + +namespace MS +{ + +class KAlcolyteRandom : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/k_alcolyte_red.as b/scripts/angelscript/monsters/k_alcolyte_red.as new file mode 100644 index 00000000..59a7410d --- /dev/null +++ b/scripts/angelscript/monsters/k_alcolyte_red.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/k_alcolyte.as" + +namespace MS +{ + +class KAlcolyteRed : CGameScript +{ + int ALCO_TYPE; + int OVERRIDE_TYPE; + + KAlcolyteRed() + { + OVERRIDE_TYPE = 1; + ALCO_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/k_childre.as b/scripts/angelscript/monsters/k_childre.as new file mode 100644 index 00000000..2957b57b --- /dev/null +++ b/scripts/angelscript/monsters/k_childre.as @@ -0,0 +1,525 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class KChildre : CGameScript +{ + int AM_CRAWLING; + int AM_INVISIBLE; + string ANIM_ATTACK; + string ANIM_CRAWL; + string ANIM_DEATH; + string ANIM_DEATH_BACK1; + string ANIM_DEATH_BACK2; + string ANIM_DEATH_CROUCH; + string ANIM_DEATH_FORWARD1; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_IDLE_CROUCH; + string ANIM_IDLE_NORM; + string ANIM_JUMP; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_WALK; + string ANIM_WALK_NORM; + string AS_ATTACKING; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + string DID_WARCRY; + int DMG_SWIPE; + int DOING_FADE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int FADE_STEP; + string FADE_TARGET; + int FIREBALL_AMMO; + int FIREBALL_DELAY; + int FIREBALL_TOSS; + string FLINCH_ANIM; + int FLINCH_CHANCE; + float FLINCH_DELAY; + int FLINCH_HEALTH; + float FREQ_FADE; + int FREQ_FIREBALL; + float FREQ_IDLE; + float FREQ_JUMP; + float FREQ_RELOAD; + int IS_UNHOLY; + string NEXT_FADE; + int NO_STEP_ADJ; + int NPC_GIVE_EXP; + string PROJECTILE_SCRIPT; + string SOUND_DEATH; + string SOUND_FADE; + string SOUND_FIREBALL; + string SOUND_FLINCH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PARRY; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWING_HIT1; + string SOUND_SWING_HIT2; + string SOUND_SWING_MISS1; + string SOUND_SWING_MISS2; + string SOUND_UNFADE; + string SOUND_WARCRY; + int STARTED_CYCLES; + int STEP_SIZE_NORM; + int SWIPE_ATTACK; + int WAS_STRUCK; + + KChildre() + { + IS_UNHOLY = 1; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "ability1_alien"; + ANIM_DEATH = "death1_die"; + ANIM_IDLE_NORM = "idle1"; + ANIM_IDLE_CROUCH = "crouch_idle"; + ANIM_WALK_NORM = "walk"; + ANIM_RUN_NORM = "run"; + ANIM_CRAWL = "crawl"; + ANIM_FLINCH = "new_flinch"; + ANIM_JUMP = "jump"; + ANIM_DEATH_BACK1 = "death1_die"; + ANIM_DEATH_BACK2 = "back_die"; + ANIM_DEATH_FORWARD1 = "forward_die"; + ANIM_DEATH_CROUCH = "crouch_die"; + ATTACK_RANGE = 125; + ATTACK_HITRANGE = 200; + ATTACK_MOVERANGE = 100; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 40); + NO_STEP_ADJ = 1; + PROJECTILE_SCRIPT = "proj_fire_ball"; + ATTACK_HITCHANCE = 90; + FREQ_FADE = Random(5.0, 20.0); + FREQ_FIREBALL = RandomInt(2, 8); + FREQ_RELOAD = 30.0; + FIREBALL_AMMO = 3; + DMG_SWIPE = RandomInt(40, 100); + FREQ_IDLE = Random(5, 10); + FREQ_JUMP = Random(2, 5); + STEP_SIZE_NORM = 64; + SOUND_FIREBALL = "magic/fireball_strike.wav"; + SOUND_FLINCH = "monsters/gonome/gonome_pain3.wav"; + SOUND_WARCRY = "monsters/gonome/gonome_melee1.wav"; + SOUND_FADE = "monsters/gonome/gonome_melee2.wav"; + SOUND_UNFADE = "monsters/gonome/gonome_death3.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_PAIN1 = "monsters/gonome/gonome_jumpattack.wav"; + SOUND_PAIN2 = "monsters/gonome/gonome_melee1.wav"; + SOUND_SWING_MISS1 = "zombie/claw_miss1.wav"; + SOUND_SWING_MISS2 = "zombie/claw_miss2.wav"; + SOUND_SWING_HIT1 = "zombie/claw_strike1.wav"; + SOUND_SWING_HIT2 = "zombie/claw_strike2.wav"; + SOUND_STEP1 = "common/npc_step1.wav"; + SOUND_STEP2 = "common/npc_step2.wav"; + SOUND_IDLE1 = "monsters/gonome/gonome_idle1.wav"; + SOUND_IDLE2 = "monsters/gonome/gonome_idle2.wav"; + SOUND_IDLE3 = "monsters/gonome/gonome_idle3.wav"; + SOUND_PARRY = "weapons/axemetal1.wav"; + SOUND_DEATH = "bullchicken/bc_die2.wav"; + Precache(SOUND_DEATH); + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_RELOAD); + FIREBALL_AMMO += 1; + SetProp(GetOwner(), "skin", 1); + if (FIREBALL_AMMO > 3) + { + } + FIREBALL_AMMO = 3; + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(FREQ_IDLE); + if (m_hAttackTarget == "unset") + { + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnSpawn() override + { + childre_spawn(); + } + + void childre_spawn() + { + NPC_GIVE_EXP = 200; + SetName("Kharaztorant Childre"); + SetModel("monsters/k_childre.mdl"); + SetHealth(1000); + SetRace("demon"); + SetWidth(32); + SetHeight(68); + SetRoam(true); + SetHearingSensitivity(4); + string L_MAP_NAME = StringToLower(GetMapName()); + if ((L_MAP_NAME).findFirst("helena") >= 0) + { + STEP_SIZE_NORM = 18; + int EXIT_SUB = 1; + } + if ((L_MAP_NAME).findFirst("demontemple") >= 0) + { + STEP_SIZE_NORM = 24; + int EXIT_SUB = 1; + } + if ((L_MAP_NAME).findFirst("islesofdread") >= 0) + { + STEP_SIZE_NORM = 24; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SetStepSize(STEP_SIZE_NORM); + } + + void OnPostSpawn() override + { + SetDamageResistance("all", 0.7); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetDamageResistance("holy", 0.5); + SetDamageResistance("stun", 0.5); + ANIM_FLINCH = "new_flinch"; + CAN_FLINCH = 1; + FLINCH_HEALTH = 500; + FLINCH_DELAY = 5.0; + FLINCH_CHANCE = 50; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetStat("parry", 100); + } + + void npc_targetsighted() + { + if (!(false)) return; + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + do_warcry(); + } + if ((STARTED_CYCLES)) return; + STARTED_CYCLES = 1; + FREQ_FADE("fade_check"); + ScheduleDelayedEvent(1.0, "fireball_check"); + ScheduleDelayedEvent(1.0, "jump_check"); + } + + void my_target_died() + { + DID_WARCRY = 0; + EmitSound(GetOwner(), 0, SOUND_IDLE1, 10); + PlayAnim("critical", ANIM_FLINCH); + } + + void fade_check() + { + ScheduleDelayedEvent(1.0, "fade_check"); + if ((DOING_FADE)) return; + if ((FADE_DELAY)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + if (!(GetGameTime() > NEXT_FADE)) return; + NEXT_FADE = GetGameTime(); + NEXT_FADE += FREQ_FADE; + do_fade(); + } + + void do_fade() + { + npcatk_flee(m_hAttackTarget, 2048, 3.0); + FADE_TARGET = m_hAttackTarget; + DOING_FADE = 1; + npcatk_suspend_ai(2.0); + SetMoveAnim(ANIM_RUN); + WAS_STRUCK = 0; + ScheduleDelayedEvent(0.1, "do_fade2"); + ScheduleDelayedEvent(1.0, "resume_attack"); + } + + void do_fade2() + { + EmitSound(GetOwner(), 0, SOUND_FADE, 10); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 200)); + FADE_STEP = 255; + fade_loop(); + etherial_immunes(); + } + + void fade_loop() + { + FADE_STEP -= 20; + if (FADE_STEP < 0) + { + SetProp(GetOwner(), "renderamt", 1); + } + if (!(FADE_STEP >= 0)) return; + if (!(DOING_FADE)) return; + ScheduleDelayedEvent(0.1, "fade_loop"); + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", FADE_STEP); + } + + void resume_attack() + { + npcatk_resume_ai(); + SetMoveAnim(ANIM_CRAWL); + AM_CRAWLING = 1; + if ((WAS_STRUCK)) return; + chicken_run(2.0); + ScheduleDelayedEvent(2.1, "invis_run2"); + } + + void invis_run2() + { + if ((WAS_STRUCK)) return; + if (!(DOING_FADE)) return; + chicken_run(2.0); + ScheduleDelayedEvent(2.1, "flank_targ"); + } + + void flank_targ() + { + npcatk_flank(FADE_TARGET); + } + + void do_warcry() + { + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_IDLE_CROUCH); + npcatk_faceattacker(m_hAttackTarget); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + } + + void fireball_check() + { + ScheduleDelayedEvent(1.1, "fireball_check"); + if (!(FIREBALL_AMMO > 0)) return; + if ((DOING_FADE)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE)) return; + if ((FIREBALL_DELAY)) return; + FIREBALL_DELAY = 1; + FREQ_FIREBALL("reset_fireball_delay"); + npcatk_faceattacker(m_hAttackTarget); + AS_ATTACKING = GetGameTime(); + npcatk_suspend_ai(); + SetRoam(false); + ScheduleDelayedEvent(0.1, "do_fireball"); + } + + void reset_fireball_delay() + { + FIREBALL_DELAY = 0; + } + + void do_fireball() + { + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + FIREBALL_TOSS = 1; + PlayAnim("critical", ANIM_ATTACK); + TossProjectile(PROJECTILE_SCRIPT, /* TODO: $relpos */ $relpos(0, 48, 62), m_hAttackTarget, 400, 200, 0, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0); + FIREBALL_AMMO -= 1; + if (FIREBALL_AMMO == 0) + { + SetProp(GetOwner(), "skin", 0); + } + npcatk_resume_ai(); + SetRoam(true); + } + + void game_dodamage() + { + if (!(SWIPE_ATTACK)) return; + if ((param1)) + { + // PlayRandomSound from: SOUND_SWING_HIT1, SOUND_SWING_HIT2 + array sounds = {SOUND_SWING_HIT1, SOUND_SWING_HIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWING_MISS1, SOUND_SWING_MISS2 + array sounds = {SOUND_SWING_MISS1, SOUND_SWING_MISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + SWIPE_ATTACK = 0; + } + + void OnParry(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), 0, SOUND_PARRY, 10); + } + + void become_visible() + { + NEXT_FADE = GetGameTime(); + NEXT_FADE += FREQ_FADE; + normal_immunes(); + EmitSound(GetOwner(), 0, SOUND_UNFADE, 10); + DOING_FADE = 0; + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + + void OnFlinch() + { + int RND_FLINCH = RandomInt(1, 2); + if (RND_FLINCH == 1) + { + FLINCH_ANIM = ANIM_FLINCH1; + } + if (RND_FLINCH == 2) + { + FLINCH_ANIM = ANIM_FLINCH2; + } + EmitSound(GetOwner(), 0, SOUND_FLINCH, 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "skin", 2); + if ((DOING_FADE)) + { + DOING_FADE = 0; + CallExternal(GAME_MASTER, "gm_fade_in", GetEntityIndex(GetOwner())); + } + if (GetEntityRange(m_hLastStruck) > 256) + { + ANIM_DEATH = ANIM_DEATH_FORWARD1; + } + if (GetEntityRange(m_hLastStruck) <= 256) + { + int RND_DEATH = RandomInt(1, 2); + if (RND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH_BACK1; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH_BACK2; + } + } + if ((AM_CRAWLING)) + { + ANIM_DEATH = ANIM_DEATH_CROUCH; + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 8); + if (!(AM_CRAWLING)) return; + if (!(DOING_FADE)) return; + SetMoveAnim(ANIM_RUN); + AM_CRAWLING = 0; + WAS_STRUCK = 1; + chicken_run(1.5); + } + + void jump_check() + { + FREQ_JUMP("jump_check"); + if (!(m_hAttackTarget != "unset")) return; + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + string MY_Z = (GetMonsterProperty("origin")).z; + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (!(Z_DIFF > ATTACK_RANGE)) return; + npcatk_faceattacker(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "do_jump"); + EmitSound(GetOwner(), 0, SOUND_FADE, 10); + } + + void do_jump() + { + SetStepSize(1000); + SetMoveAnim(ANIM_JUMP); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 800)); + ScheduleDelayedEvent(0.5, "push_forward"); + ScheduleDelayedEvent(1.0, "jump_done"); + } + + void push_forward() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void jump_done() + { + SetStepSize(STEP_SIZE_NORM); + SetMoveAnim(ANIM_RUN); + } + + void walk_step() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 4); + } + + void run_step() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 10); + } + + void attack_strike() + { + if ((DOING_FADE)) + { + if (!(FIREBALL_TOSS)) + { + } + become_visible("attack_strike"); + } + SetMoveAnim(ANIM_RUN); + AM_CRAWLING = 0; + FIREBALL_TOSS = 0; + SWIPE_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, ATTACK_HITCHANCE, "slash"); + } + + void etherial_immunes() + { + ClearFX(); + AM_INVISIBLE = 1; + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 0.0); + } + + void normal_immunes() + { + AM_INVISIBLE = 0; + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetDamageResistance("poison", 1.0); + SetDamageResistance("holy", 0.5); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_childre_black.as b/scripts/angelscript/monsters/k_childre_black.as new file mode 100644 index 00000000..bba20733 --- /dev/null +++ b/scripts/angelscript/monsters/k_childre_black.as @@ -0,0 +1,129 @@ +#pragma context server + +#include "monsters/k_childre.as" + +namespace MS +{ + +class KChildreBlack : CGameScript +{ + int AM_INVISIBLE; + string ANIM_FLINCH; + int CAN_FLINCH; + int DMG_SWIPE; + int DOING_FADE; + string FADE_TARGET; + int FIREBALL_TOSS; + int FLINCH_CHANCE; + float FLINCH_DELAY; + int FLINCH_HEALTH; + int NPC_BASE_EXP; + string PROJECTILE_SCRIPT; + int SPORE_POISON_DMG; + string STEP_SIZE_NORM; + int WAS_STRUCK; + + KChildreBlack() + { + PROJECTILE_SCRIPT = "proj_spore"; + SPORE_POISON_DMG = 60; + DMG_SWIPE = RandomInt(80, 200); + NPC_BASE_EXP = 800; + } + + void game_precache() + { + Precache("monsters/summon/poison_burst"); + } + + void childre_spawn() + { + SetName("Black Kharaztorant Childre"); + SetModel("monsters/k_childre_black.mdl"); + SetHealth(3000); + SetRace("demon"); + SetWidth(32); + SetHeight(68); + SetRoam(true); + SetHearingSensitivity(4); + string L_MAP_NAME = StringToLower(GetMapName()); + if ((L_MAP_NAME).findFirst("helena") >= 0) + { + STEP_SIZE_NORM = 18; + int EXIT_SUB = 1; + } + if ((L_MAP_NAME).findFirst("demontemple") >= 0) + { + STEP_SIZE_NORM = 24; + int EXIT_SUB = 1; + } + if ((L_MAP_NAME).findFirst("islesofdread") >= 0) + { + STEP_SIZE_NORM = 24; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SetStepSize(STEP_SIZE_NORM); + } + + void OnPostSpawn() override + { + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 1.0); + SetDamageResistance("cold", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 2.0); + SetDamageResistance("stun", 0.5); + ANIM_FLINCH = "new_flinch"; + CAN_FLINCH = 1; + FLINCH_HEALTH = 500; + FLINCH_DELAY = 5.0; + FLINCH_CHANCE = 50; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetStat("parry", 100); + } + + void normal_immunes() + { + AM_INVISIBLE = 0; + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 1.0); + SetDamageResistance("cold", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 2.0); + } + + void do_fireball() + { + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + FIREBALL_TOSS = 1; + PlayAnim("critical", ANIM_ATTACK); + TossProjectile(PROJECTILE_SCRIPT, /* TODO: $relpos */ $relpos(0, 48, 62), m_hAttackTarget, 400, 200, 0, "none"); + FIREBALL_AMMO -= 1; + if (FIREBALL_AMMO == 0) + { + SetProp(GetOwner(), "skin", 0); + } + npcatk_resume_ai(); + SetRoam(true); + } + + void do_fade() + { + SpawnNPC("monsters/summon/poison_burst", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128, 1, 100, 30 + npcatk_flee(m_hAttackTarget, 2048, 3.0); + FADE_TARGET = m_hAttackTarget; + DOING_FADE = 1; + npcatk_suspend_ai(2.0); + SetMoveAnim(ANIM_RUN); + WAS_STRUCK = 0; + ScheduleDelayedEvent(0.1, "do_fade2"); + ScheduleDelayedEvent(1.0, "resume_attack"); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_childre_boss.as b/scripts/angelscript/monsters/k_childre_boss.as new file mode 100644 index 00000000..0414aea3 --- /dev/null +++ b/scripts/angelscript/monsters/k_childre_boss.as @@ -0,0 +1,262 @@ +#pragma context server + +#include "monsters/k_childre.as" + +namespace MS +{ + +class KChildreBoss : CGameScript +{ + int AM_CRAWLING; + int AM_INVISIBLE; + string ANIM_FLINCH; + int CAN_FLINCH; + string DID_WARCRY; + int DMG_SWIPE; + int DOING_FADE; + int DOT_NOVA; + float DUR_NOVA; + string FADE_TARGET; + int FIREBALL_TOSS; + int FLINCH_CHANCE; + float FLINCH_DELAY; + int FLINCH_HEALTH; + float FREQ_NOVA; + float FREQ_RANDOM_JUMP; + string NEXT_NOVA; + string NOVA_LIST; + string NPC_GIVE_EXP; + int NPC_IS_BOSS; + string PROJECTILE_SCRIPT; + int SPORE_POISON_DMG; + int STARTED_CYCLES; + string STEP_SIZE_NORM; + int WAS_STRUCK; + + KChildreBoss() + { + PROJECTILE_SCRIPT = "proj_spore"; + SPORE_POISON_DMG = 100; + DMG_SWIPE = RandomInt(160, 300); + FREQ_NOVA = 30.0; + DUR_NOVA = 5.0; + DOT_NOVA = 50; + NPC_IS_BOSS = 1; + FREQ_RANDOM_JUMP = Random(10.0, 30.0); + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.5); + string MY_POS = GetEntityOrigin(GetOwner()); + string MY_Z = (MY_POS).z; + string MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(MY_POS); + if (MY_GROUND != "none") + { + } + string Z_DIFF = MY_GROUND; + Z_DIFF -= MY_Z; + if (Z_DIFF < 0) + { + Z_DIFF *= -1; + } + if (Z_DIFF > 256) + { + } + LogDebug("Bombs away Z_DIFF - MY_Z vs MY_GROUND"); + string GROUND_POS = GetEntityOrigin(GetOwner()); + GROUND_POS = "z"; + TossProjectile(PROJECTILE_SCRIPT, /* TODO: $relpos */ $relpos(0, 24, -102), GROUND_POS, 400, 200, 30, "none"); + } + + void game_precache() + { + Precache("monsters/summon/poison_burst"); + } + + void childre_spawn() + { + if (StringToLower(GetMapName()) == "kfortress") + { + SetName("Kruxus the Corrupting Shadow"); + NPC_GIVE_EXP = 10000; + } + else + { + SetName("Black Kharaztorant Hierophant"); + NPC_GIVE_EXP = 800; + } + SetModel("monsters/k_childre_black.mdl"); + SetHealth(9001); + SetRace("demon"); + SetWidth(32); + SetHeight(68); + SetRoam(true); + SetHearingSensitivity(4); + string L_MAP_NAME = StringToLower(GetMapName()); + if ((L_MAP_NAME).findFirst("helena") >= 0) + { + STEP_SIZE_NORM = 18; + int EXIT_SUB = 1; + } + if ((L_MAP_NAME).findFirst("demontemple") >= 0) + { + STEP_SIZE_NORM = 24; + int EXIT_SUB = 1; + } + if ((L_MAP_NAME).findFirst("islesofdread") >= 0) + { + STEP_SIZE_NORM = 24; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SetStepSize(STEP_SIZE_NORM); + } + + void OnPostSpawn() override + { + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 1.0); + SetDamageResistance("cold", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 2.0); + SetDamageResistance("stun", 0.5); + ANIM_FLINCH = "new_flinch"; + CAN_FLINCH = 1; + FLINCH_HEALTH = 500; + FLINCH_DELAY = 5.0; + FLINCH_CHANCE = 50; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetStat("parry", 100); + } + + void normal_immunes() + { + AM_INVISIBLE = 0; + SetInvincible(false); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 1.0); + SetDamageResistance("cold", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 2.0); + } + + void do_fireball() + { + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + FIREBALL_TOSS = 1; + PlayAnim("critical", ANIM_ATTACK); + TossProjectile(PROJECTILE_SCRIPT, /* TODO: $relpos */ $relpos(0, 48, 62), m_hAttackTarget, 400, 200, 0, "none"); + FIREBALL_AMMO -= 1; + if (FIREBALL_AMMO == 0) + { + SetProp(GetOwner(), "skin", 0); + } + npcatk_resume_ai(); + SetRoam(true); + } + + void do_fade() + { + SpawnNPC("monsters/summon/poison_burst", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128, 1, 100, 30 + npcatk_flee(m_hAttackTarget, 2048, 3.0); + FADE_TARGET = m_hAttackTarget; + DOING_FADE = 1; + npcatk_suspend_ai(2.0); + SetMoveAnim(ANIM_RUN); + WAS_STRUCK = 0; + ScheduleDelayedEvent(0.1, "do_fade2"); + ScheduleDelayedEvent(1.0, "resume_attack"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 8); + if (GetGameTime() > NEXT_NOVA) + { + NEXT_NOVA = GetGameTime(); + NEXT_NOVA += FREQ_NOVA; + do_nova(); + } + if (!(AM_CRAWLING)) return; + if (!(DOING_FADE)) return; + SetMoveAnim(ANIM_RUN); + AM_CRAWLING = 0; + WAS_STRUCK = 1; + chicken_run(1.5); + } + + void do_nova() + { + EmitSound(GetOwner(), 0, "magic/spookie1.wav", 10); + NOVA_LIST = FindEntitiesInSphere("enemy", 256); + do_nova_FX(); + if (!(NOVA_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(NOVA_LIST, ";"); i++) + { + nova_targets(); + } + } + + void nova_targets() + { + string CUR_TARG = GetToken(NOVA_LIST, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison", DUR_NOVA, GetEntityIndex(GetOwner()), DOT_NOVA); + string TARGET_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARGET_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void npc_targetsighted() + { + if (!(false)) return; + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + do_warcry(); + } + if ((STARTED_CYCLES)) return; + STARTED_CYCLES = 1; + FREQ_FADE("fade_check"); + ScheduleDelayedEvent(1.0, "fireball_check"); + ScheduleDelayedEvent(1.0, "jump_check"); + FREQ_RANDOM_JUMP("do_random_jump"); + } + + void do_random_jump() + { + FREQ_RANDOM_JUMP("do_random_jump"); + chicken_run(1.0); + ScheduleDelayedEvent(0.1, "do_jump"); + } + + void etherial_immunes() + { + ClearFX(); + Effect("glow", GetOwner(), Vector3(0, 0, 0), 10, -1, 0); + SetInvincible(true); + AM_INVISIBLE = 1; + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 0.0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(StringToLower(GetMapName()) == "kfortress")) return; + string START_POS = GetEntityOrigin(GetOwner()); + string START_GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(START_POS); + START_POS = "z"; + START_POS += "z"; + ClientEvent("new", "all", "kfortress/nh_appear_cl", START_POS); + CallExternal(GAME_MASTER, "gm_createitem", 15.0, "smallarms_nh", START_POS); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_childre_boss_cl.as b/scripts/angelscript/monsters/k_childre_boss_cl.as new file mode 100644 index 00000000..1c8fcb60 --- /dev/null +++ b/scripts/angelscript/monsters/k_childre_boss_cl.as @@ -0,0 +1,86 @@ +#pragma context client + +namespace MS +{ + +class KChildreBossCl : CGameScript +{ + string CYCLE_ANGLE; + int NOVA_RADIUS; + string SPRITE_NAME; + int SPRITE_VELOCITY; + string START_POS; + + KChildreBossCl() + { + SPRITE_NAME = "3dmflaora.spr"; + Precache(SPRITE_NAME); + SPRITE_VELOCITY = 2000; + NOVA_RADIUS = 80; + } + + void spriteify() + { + for (int i = 0; i < 36; i++) + { + createsprite(); + } + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void createsprite() + { + string l.pos = START_POS; + if (CYCLE_ANGLE == "CYCLE_ANGLE") + { + CYCLE_ANGLE = 0; + } + CYCLE_ANGLE += 10; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 10, 36)); + ClientEffect("tempent", "sprite", SPRITE_NAME, l.pos, "setup_sprite1_sparkle", "sprite_update"); + } + + void client_activate() + { + START_POS = /* TODO: $getcl */ $getcl(param1, "origin"); + spriteify(); + } + + void new_cast() + { + START_POS = /* TODO: $getcl */ $getcl(param1, "origin"); + spriteify(); + } + + void setup_sprite1_sparkle() + { + string SPRITE_ORG = "game.tempent.origin"; + string SPRITE_ANG = (SPRITE_ORG - START_POS).Normalize(); + string SPRITE_ANG_X = (SPRITE_ANG).x; + string SPRITE_ANG_Y = (SPRITE_ANG).y; + string SPRITE_ANG_Z = (SPRITE_ANG).z; + SPRITE_ANG_X *= SPRITE_VELOCITY; + SPRITE_ANG_Y *= SPRITE_VELOCITY; + Vector3 SPRITE_SPEED = Vector3(SPRITE_ANG_X, SPRITE_ANG_Y, SPRITE_ANG_Z); + ClientEffect("tempent", "set_current_prop", "velocity", SPRITE_SPEED); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 254, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_childre_boss_jelly.as b/scripts/angelscript/monsters/k_childre_boss_jelly.as new file mode 100644 index 00000000..bd587dcc --- /dev/null +++ b/scripts/angelscript/monsters/k_childre_boss_jelly.as @@ -0,0 +1,523 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class KChildreBossJelly : CGameScript +{ + int AM_CRAWLING; + string ANIM_ATTACK; + string ANIM_CRAWL; + string ANIM_DEATH; + string ANIM_DEATH_BACK1; + string ANIM_DEATH_BACK2; + string ANIM_DEATH_CROUCH; + string ANIM_DEATH_FORWARD1; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_IDLE_CROUCH; + string ANIM_IDLE_NORM; + string ANIM_JUMP; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_WALK; + string ANIM_WALK_NORM; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float CLOUD_DMG; + float CLOUD_DURATION; + string DID_WARCRY; + float DMG_SWIPE; + int DOING_FADE; + float DOT1_DMG; + float DOT1_DURATION; + int DROP_GOLD; + int FADE_DELAY; + int FADE_STEP; + string FADE_TARGET; + string FLINCH_ANIM; + int IS_UNHOLY; + string I_HAS_ORIGIN; + string MONSTER_MODEL; + string MY_SUMMON; + int NOT_FIRST_TIME; + string NOVA_COLOUR; + float NOVA_DMG; + float NOVA_DOT_DMG; + float NOVA_DOT_DURATION; + string NOVA_LIST; + int NPC_GIVE_EXP; + int NPC_IS_BOSS; + string SOUND_DEATH; + string SOUND_FADE; + string SOUND_FLINCH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PARRY; + string SOUND_SPAWN; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWING_HIT1; + string SOUND_SWING_HIT2; + string SOUND_SWING_MISS1; + string SOUND_SWING_MISS2; + string SOUND_UNFADE; + string SOUND_WARCRY; + int STARTED_CYCLES; + int SUMMON_FREQ; + string SUMMON_ORIGIN; + int SUMMON_RATE_1; + int SUMMON_RATE_2; + int SUMMON_RATE_3; + string SUMMON_SCRIPT_1; + string SUMMON_SCRIPT_2; + string SUMMON_SCRIPT_3; + int SWIPE_ATTACK; + int WAS_STRUCK; + + KChildreBossJelly() + { + IS_UNHOLY = 1; + NPC_IS_BOSS = 1; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "ability1_alien"; + ANIM_DEATH = "death1_die"; + ANIM_IDLE_NORM = "idle1"; + ANIM_IDLE_CROUCH = "crouch_idle"; + ANIM_WALK_NORM = "walk"; + ANIM_RUN_NORM = "run"; + ANIM_CRAWL = "crawl"; + ANIM_FLINCH = "new_flinch"; + ANIM_JUMP = "jump"; + ANIM_DEATH_BACK1 = "death1_die"; + ANIM_DEATH_BACK2 = "back_die"; + ANIM_DEATH_FORWARD1 = "forward_die"; + ANIM_DEATH_CROUCH = "crouch_die"; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 250; + ATTACK_MOVERANGE = 130; + ATTACK_HITCHANCE = 0.75; + DROP_GOLD = 0; + NPC_GIVE_EXP = 4000; + DMG_SWIPE = Random(50, 70); + DOT1_DMG = 10.0; + DOT1_DURATION = 15.0; + CLOUD_DMG = 20.0; + CLOUD_DURATION = 10.0; + NOVA_DMG = 100.0; + NOVA_DOT_DMG = 10.0; + NOVA_DOT_DURATION = 5.0; + NOVA_COLOUR = Vector3(0, 254, 0); + SUMMON_FREQ = 180; + SUMMON_RATE_1 = 60; + SUMMON_RATE_2 = 90; + SUMMON_RATE_3 = 100; + SUMMON_SCRIPT_1 = "monsters/k_larva_black"; + SUMMON_SCRIPT_2 = "monsters/horror"; + SUMMON_SCRIPT_3 = "monsters/k_childre_black"; + Precache(SUMMON_SCRIPT_1); + Precache(SUMMON_SCRIPT_2); + Precache(SUMMON_SCRIPT_3); + SOUND_SPAWN = "magic/spawn.wav"; + SOUND_FLINCH = "monsters/gonome/gonome_pain3.wav"; + SOUND_WARCRY = "monsters/gonome/gonome_melee1.wav"; + SOUND_FADE = "monsters/gonome/gonome_melee2.wav"; + SOUND_UNFADE = "monsters/gonome/gonome_death3.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_PAIN1 = "monsters/gonome/gonome_jumpattack.wav"; + SOUND_PAIN2 = "monsters/gonome/gonome_melee1.wav"; + SOUND_SWING_MISS1 = "zombie/claw_miss1.wav"; + SOUND_SWING_MISS2 = "zombie/claw_miss2.wav"; + SOUND_SWING_HIT1 = "zombie/claw_strike1.wav"; + SOUND_SWING_HIT2 = "zombie/claw_strike2.wav"; + SOUND_STEP1 = "common/npc_step1.wav"; + SOUND_STEP2 = "common/npc_step2.wav"; + SOUND_IDLE1 = "monsters/gonome/gonome_idle1.wav"; + SOUND_IDLE2 = "monsters/gonome/gonome_idle2.wav"; + SOUND_IDLE3 = "monsters/gonome/gonome_idle3.wav"; + SOUND_PARRY = "weapons/axemetal1.wav"; + SOUND_DEATH = "bullchicken/bc_die2.wav"; + Precache(SOUND_DEATH); + Precache("magic/spookie1.wav"); + MONSTER_MODEL = "monsters/k_childre_black.mdl"; + Precache(MONSTER_MODEL); + NOT_FIRST_TIME = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_IDLE); + if (m_hAttackTarget == "unset") + { + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnSpawn() override + { + SetName("Kruxus the Corrupting Shadow"); + SetHealth(5000); + SetModel(MONSTER_MODEL); + SetRace("demon"); + SetWidth(32); + SetHeight(72); + SetRoam(true); + SetHearingSensitivity(4); + } + + void OnPostSpawn() override + { + // TODO: UNCONVERTED: taledmg all 0.8 + SetDamageResistance("fire", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("holy", 0.5); + } + + void npc_targetsighted() + { + if (!(false)) return; + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + do_warcry(); + } + if ((STARTED_CYCLES)) return; + STARTED_CYCLES = 1; + FREQ_FADE("fade_check"); + ScheduleDelayedEvent(1.0, "jump_check"); + SUMMON_FREQ("do_summon"); + } + + void my_target_died() + { + DID_WARCRY = 0; + EmitSound(GetOwner(), 0, SOUND_IDLE1, 10); + PlayAnim("critical", ANIM_FLINCH); + } + + void do_summon() + { + if (I_HAS_ORIGIN != 1) + { + string ENT_ID = FindEntityByName("kruxus_summon_origin"); + SUMMON_ORIGIN = GetEntityOrigin(ENT_ID); + I_HAS_ORIGIN = 1; + } + if (NOT_FIRST_TIME == 1) + { + if ((IsEntityAlive(MY_SUMMON))) + { + CallExternal(MY_SUMMON, "npc_fade_away"); + } + } + int THE_NUM = RandomInt(1, 100); + if (THE_NUM >= SUMMON_RATE_1) + { + SpawnNPC(SUMMON_SCRIPT_1, /* TODO: $relpos */ $relpos(0, 48, 5), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + if (THE_NUM < SUMMON_RATE_1) + { + if (THE_NUM >= SUMMON_RATE_2) + { + SpawnNPC(SUMMON_SCRIPT_3, /* TODO: $relpos */ $relpos(0, 48, 5), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + } + if (THE_NUM > SUMMON_RATE_2) + { + SpawnNPC(SUMMON_SCRIPT_3, /* TODO: $relpos */ $relpos(0, 48, 5), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + MY_SUMMON = m_hLastCreated; + NOT_FIRST_TIME = 1; + } + + void do_nova_part_1() + { + string MY_ORG = GetEntityOrigin(GetOwner()); + NOVA_LIST = FindEntitiesInSphere("enemy", 256); + do_nova_FX(); + if (!(NOVA_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(NOVA_LIST, ";"); i++) + { + do_nova_part_2(); + } + } + + void do_nova_part_2() + { + string CUR_TARG = GetToken(NOVA_LIST, i, ";"); + XDoDamage(CUR_TARG, "direct", NOVA_DMG, 1.0, GetOwner(), GetOwner(), "none", "poison"); + ApplyEffect(CUR_TARG, "effects/dot_poison", 5, GetOwner(), 10, 0, "none"); + string TARGET_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARGET_ORG); + EmitSound(GetOwner(), 0, "magic/spookie1.wav", 10); + SetVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void do_nova_FX() + { + ClientEvent("new", "all", "monsters/k_childre_boss_cl", GetEntityIndex(GetOwner())); + } + + void fade_check() + { + ScheduleDelayedEvent(1.0, "fade_check"); + if ((DOING_FADE)) return; + if ((FADE_DELAY)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + FADE_DELAY = 1; + FREQ_FADE("reset_fade_delay"); + do_fade(); + SpawnNPC("monsters/summon/npc_poison_cloud2", /* TODO: $relpos */ $relpos(0, 0, 5), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), CLOUD_DMG, CLOUD_DURATION, 2 + } + + void reset_fade_delay() + { + FADE_DELAY = 0; + } + + void do_fade() + { + npcatk_flee(m_hAttackTarget, 2048, 3.0); + FADE_TARGET = m_hAttackTarget; + DOING_FADE = 1; + npcatk_suspend_ai(2.0); + SetMoveAnim(ANIM_RUN); + WAS_STRUCK = 0; + ScheduleDelayedEvent(0.1, "do_fade2"); + ScheduleDelayedEvent(1.0, "resume_attack"); + } + + void do_fade2() + { + EmitSound(GetOwner(), 0, SOUND_FADE, 10); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 200)); + FADE_STEP = 255; + fade_loop(); + SetDamageResistance("cold", 0.0); + } + + void fade_loop() + { + FADE_STEP -= 20; + if (FADE_STEP < 0) + { + SetProp(GetOwner(), "renderamt", 1); + } + if (!(FADE_STEP >= 0)) return; + if (!(DOING_FADE)) return; + ScheduleDelayedEvent(0.1, "fade_loop"); + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", FADE_STEP); + } + + void resume_attack() + { + npcatk_resume_ai(); + SetMoveAnim(ANIM_CRAWL); + AM_CRAWLING = 1; + if ((WAS_STRUCK)) return; + chicken_run(2.0); + ScheduleDelayedEvent(2.1, "invis_run2"); + } + + void invis_run2() + { + if ((WAS_STRUCK)) return; + if (!(DOING_FADE)) return; + chicken_run(2.0); + ScheduleDelayedEvent(2.1, "flank_targ"); + } + + void flank_targ() + { + npcatk_flank(FADE_TARGET); + } + + void do_warcry() + { + PlayAnim("critical", ANIM_IDLE_CROUCH); + npcatk_faceattacker(m_hAttackTarget); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + } + + void game_dodamage() + { + if (!(SWIPE_ATTACK)) return; + if ((param1)) + { + // PlayRandomSound from: SOUND_SWING_HIT1, SOUND_SWING_HIT2 + array sounds = {SOUND_SWING_HIT1, SOUND_SWING_HIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RandomInt(1, 100) <= 60) + { + } + ApplyEffect(param2, "effects/dot_poison", DOT1_DURATION, GetEntityIndex(GetOwner()), DOT1_DMG); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWING_MISS1, SOUND_SWING_MISS2 + array sounds = {SOUND_SWING_MISS1, SOUND_SWING_MISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + SWIPE_ATTACK = 0; + } + + void OnParry(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), 0, SOUND_PARRY, 10); + } + + void become_visible() + { + SetDamageResistance("cold", 1.25); + EmitSound(GetOwner(), 0, SOUND_UNFADE, 10); + DOING_FADE = 0; + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + + void OnFlinch() + { + int RND_FLINCH = RandomInt(1, 2); + if (RND_FLINCH == 1) + { + FLINCH_ANIM = ANIM_FLINCH1; + } + if (RND_FLINCH == 2) + { + FLINCH_ANIM = ANIM_FLINCH2; + } + EmitSound(GetOwner(), 0, SOUND_FLINCH, 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "skin", 2); + if ((DOING_FADE)) + { + DOING_FADE = 0; + CallExternal(GAME_MASTER, "gm_fade_in", GetEntityIndex(GetOwner())); + } + if (GetEntityRange(m_hLastStruck) > 256) + { + ANIM_DEATH = ANIM_DEATH_FORWARD1; + } + if (GetEntityRange(m_hLastStruck) <= 256) + { + int RND_DEATH = RandomInt(1, 2); + if (RND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH_BACK1; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH_BACK2; + } + } + if ((AM_CRAWLING)) + { + ANIM_DEATH = ANIM_DEATH_CROUCH; + } + if (!(RandomInt(1, 8) < "game.playersnb")) return; + if (!(StringToLower(GetMapName()) == "kfortress")) return; + string NK_START_POS = GetMonsterProperty("origin"); + string NK_START_GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(NK_START_POS); + NK_START_POS = "z"; + KK_START_POS += "z"; + ClientEvent("new", "all", "kfortress/nh_appear_cl", NK_START_POS); + CallExternal(GAME_MASTER, "gm_createitem", 15.0, "smallarms_nh", START_POS, 1); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 8); + if (RandomInt(1, 20) > 14) + { + do_nova_part_1(); + } + if (!(AM_CRAWLING)) return; + if (!(DOING_FADE)) return; + SetMoveAnim(ANIM_RUN); + AM_CRAWLING = 0; + WAS_STRUCK = 1; + chicken_run(1.5); + } + + void jump_check() + { + FREQ_JUMP("jump_check"); + if (!(m_hAttackTarget != "unset")) return; + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + string MY_Z = (GetMonsterProperty("origin")).z; + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + LogDebug("temp z_targ TARG_Z z_me MY_Z z_diff Z_DIFF"); + if (!(Z_DIFF > ATTACK_RANGE)) return; + npcatk_faceattacker(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "do_jump"); + EmitSound(GetOwner(), 0, SOUND_FADE, 10); + } + + void do_jump() + { + SetMoveAnim(ANIM_JUMP); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 800)); + ScheduleDelayedEvent(0.5, "push_forward"); + ScheduleDelayedEvent(1.0, "jump_done"); + } + + void push_forward() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void jump_done() + { + SetMoveAnim(ANIM_RUN); + } + + void walk_step() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 4); + } + + void run_step() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 10); + } + + void attack_strike() + { + if ((DOING_FADE)) + { + if (!(POISON_NOVA)) + { + } + become_visible("attack_strike"); + } + SetMoveAnim(ANIM_RUN); + AM_CRAWLING = 0; + SWIPE_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, ATTACK_HITCHANCE, "slash"); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_elder.as b/scripts/angelscript/monsters/k_elder.as new file mode 100644 index 00000000..8637890f --- /dev/null +++ b/scripts/angelscript/monsters/k_elder.as @@ -0,0 +1,722 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class KElder : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_CRAWL; + string ANIM_ATTACK_NORM; + string ANIM_CAST_CRAWL; + string ANIM_CAST_NORM; + string ANIM_CRAWL; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DEATH6; + string ANIM_DEATH7; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_IDLE_CRAWL; + string ANIM_IDLE_NORM; + string ANIM_JUMP; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_SEARCH; + string ANIM_WALK; + string ANIM_WALK_NORM; + string AS_ATTACKING; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int ATTACK_RANGE_MELEE; + int ATTACK_RANGE_PROJ; + int BEAM_IDLE_VOL; + int BLADE_ATTACK; + int BLADE_DRAWN; + int CAN_RETALIATE; + string CL_IDX; + float CL_RESET_FREQ; + string DID_WARCRY; + int DMG_FIRE_BOLT; + int DMG_KNIFE; + int DMG_POISON_BOLT; + int DMG_REPEL_BEAM; + int DOT_COLD; + int DOT_FIRE; + int DOT_POISON; + int DOT_SHOCK; + string DRAW_ON_SIGHT; + int DROP_GOLD; + int DROP_GOLD_AMT; + string EFFECT_DMG; + string EFFECT_DUR; + string EFFECT_SCRIPT; + string ELDER_SKIN; + string ELDER_TYPE; + int FLEE_CHECK_DELAY; + float FREQ_IDLE; + string FREQ_SPELL; + string JUMP_AWAY_CHANCE; + int LIGHTNING_ON; + int MAX_BEAM_RANGE; + string NEXT_CL_RESET; + string NEXT_LEAP; + string NEXT_SEARCH; + int NPC_GIVE_EXP; + int NPC_RANGED; + string OVERRIDE_TYPE; + int PASS_FREEZE_DMG; + float PASS_FREEZE_DUR; + string REPEL_BEAM_VEL; + string RND_ELDER_TYPE; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_BEAM_ACTIVATE; + string SOUND_BEAM_LOOP; + string SOUND_BEAM_SHOOT; + string SOUND_BURN; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_DRAW; + string SOUND_EFFECT; + string SOUND_FREEZE; + string SOUND_IDLE; + string SOUND_JUMP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PARRY; + string SOUND_POISON; + string SOUND_SHOCK; + string SOUND_SPELL_COLD; + string SOUND_SPELL_POISON; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWING; + string SOUND_THROW; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + string WEAPON_IDX; + + KElder() + { + CAN_RETALIATE = 0; + NPC_RANGED = 1; + ATTACK_RANGE_MELEE = 50; + ATTACK_RANGE_PROJ = 512; + CL_RESET_FREQ = 5.0; + REPEL_BEAM_VEL = /* TODO: $relvel */ $relvel(0, 350, 60); + MAX_BEAM_RANGE = 800; + BEAM_IDLE_VOL = 4; + DMG_FIRE_BOLT = 80; + DMG_POISON_BOLT = 50; + DOT_POISON = 20; + DOT_FIRE = 40; + DOT_COLD = 20; + DOT_SHOCK = 30; + DMG_KNIFE = 75; + DMG_REPEL_BEAM = 10; + ANIM_WALK_NORM = "walk2handed"; + ANIM_RUN_NORM = "run2"; + ANIM_IDLE_NORM = "idle"; + ANIM_HOP = "jump"; + ANIM_JUMP = "long_jump"; + ANIM_CRAWL = "crawl"; + ANIM_IDLE_CRAWL = "crouch_idle"; + ANIM_ATTACK_NORM = "ref_shoot_knife"; + ANIM_ATTACK_CRAWL = "crouch_shoot_knife"; + ANIM_SEARCH = "look_idle"; + ANIM_CAST_NORM = "ref_shoot_onehanded"; + ANIM_CAST_CRAWL = "crouch_shoot_onehanded"; + ANIM_DEATH1 = "die_simple"; + ANIM_DEATH2 = "die_backwards1"; + ANIM_DEATH3 = "die_backwards"; + ANIM_DEATH4 = "die_forwards"; + ANIM_DEATH5 = "headshot"; + ANIM_DEATH6 = "die_spin"; + ANIM_DEATH7 = "gutshot"; + FREQ_IDLE = Random(5, 10); + ATTACK_HITCHANCE = 80; + DMG_KNIFE = 60; + PASS_FREEZE_DMG = 50; + PASS_FREEZE_DUR = 5.0; + ANIM_WALK = "walk2handed"; + ANIM_RUN = "run2"; + if (!(AM_TURRET)) + { + ANIM_IDLE = "idle"; + } + else + { + ANIM_IDLE = "ref_aim_knife"; + } + ANIM_ATTACK = "ref_shoot_knife"; + ANIM_DEATH = "die_simple"; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 170; + ATTACK_MOVERANGE = 512; + DROP_GOLD = 1; + DROP_GOLD_AMT = 100; + NPC_GIVE_EXP = 1000; + SOUND_JUMP = "voices/kcult_jump.wav"; + SOUND_SWING = "weapons/swingsmall.wav"; + SOUND_THROW = "zombie/claw_miss1.wav"; + SOUND_DRAW = "weapons/dagger/dagger2.wav"; + SOUND_PARRY = "weapons/dagger/daggermetal2.wav"; + SOUND_PAIN1 = "voices/kcult_pain3.wav"; + SOUND_PAIN2 = "voices/kcult_pain2.wav"; + SOUND_DEATH1 = "voices/kcult_pain1.wav"; + SOUND_DEATH2 = "voices/kcult_die1.wav"; + SOUND_ALERT1 = "voices/kcult_ally_alert1.wav"; + SOUND_ALERT2 = "voices/kcult_ally_alert2.wav"; + SOUND_IDLE = "voices/human/male_oldidle2.wav"; + SOUND_WARCRY1 = "voices/kcult_alert1.wav"; + SOUND_WARCRY2 = "voices/kcult_alert2.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_BURN = "ambience/steamburst1.wav"; + SOUND_POISON = "bullchicken/bc_bite2.wav"; + SOUND_FREEZE = "magic/frost_forward.wav"; + SOUND_SHOCK = "debris/zap1.wav"; + Precache(SOUND_BURN); + Precache(SOUND_POISON); + Precache(SOUND_FREEZE); + SOUND_BEAM_LOOP = "magic/bolt_loop.wav"; + SOUND_BEAM_ACTIVATE = "magic/bolt_start.wav"; + SOUND_BEAM_SHOOT = "magic/bolt_end.wav"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart14.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + SOUND_SPELL_POISON = "bullchicken/bc_attack3.wav"; + SOUND_SPELL_COLD = "magic/frost_reverse.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_IDLE); + if (m_hAttackTarget == "unset") + { + } + AS_ATTACKING = GetGameTime(); + PlayAnim("once", ANIM_SEARCH); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + + void game_precache() + { + Precache("monsters/k_elder_cl"); + } + + void OnSpawn() override + { + SetName("Kharaztorant Elder"); + SetModel("monsters/k_alcolyte.mdl"); + SetModelBody(1, 1); + SetModelBody(2, 4); + SetHealth(RandomInt(2000, 4000)); + SetBloodType("red"); + SetIdleAnim("idle"); + SetMoveAnim("walk2handed"); + SetRace("demon"); + SetWidth(32); + SetHeight(72); + SetRoam(true); + SetHearingSensitivity(4); + if (!(true)) return; + ScheduleDelayedEvent(0.01, "setup_elder"); + } + + void game_dynamically_created() + { + if ((param1).findFirst("PARAM") == 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + OVERRIDE_TYPE = param1; + LogDebug("Overriding Type: OVERRIDE_TYPE"); + } + + void set_type() + { + OVERRIDE_TYPE = param1; + } + + void type_dark() + { + OVERRIDE_TYPE = 1; + } + + void type_fire() + { + OVERRIDE_TYPE = 2; + } + + void type_poison() + { + OVERRIDE_TYPE = 3; + } + + void type_cold() + { + OVERRIDE_TYPE = 4; + } + + void type_lightning() + { + OVERRIDE_TYPE = 5; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (ELDER_TYPE == "lightning") + { + ClientEvent("update", "all", CL_IDX, "ke_end_effect"); + } + int RND_DEATH = RandomInt(1, 7); + if (RND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (RND_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (RND_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + if (RND_DEATH == 6) + { + ANIM_DEATH = ANIM_DEATH6; + } + if (RND_DEATH == 7) + { + ANIM_DEATH = ANIM_DEATH7; + } + // PlayRandomSound from: SOUND_DEATH1, SOUND_DEATH2 + array sounds = {SOUND_DEATH1, SOUND_DEATH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void setup_elder() + { + if (OVERRIDE_TYPE > 0) + { + RND_ELDER_TYPE = OVERRIDE_TYPE; + } + else + { + RND_ELDER_TYPE = RandomInt(2, 5); + } + SetDamageResistance("holy", 0.5); + if (RND_ELDER_TYPE == 1) + { + ELDER_TYPE = "dark"; + WEAPON_IDX = 0; + DRAW_ON_SIGHT = 1; + JUMP_AWAY_CHANCE = 20; + NEXT_CL_RESET = GetGameTime(); + NEXT_CL_RESET += 20.0; + } + if (RND_ELDER_TYPE == 2) + { + JUMP_AWAY_CHANCE = 20; + DRAW_ON_SIGHT = 0; + ELDER_TYPE = "fire"; + WEAPON_IDX = 1; + FREQ_SPELL = 1.0; + EFFECT_SCRIPT = "effects/dot_fire"; + EFFECT_DUR = 5; + EFFECT_DMG = DOT_FIRE; + SOUND_EFFECT = SOUND_BURN; + } + if (RND_ELDER_TYPE == 3) + { + JUMP_AWAY_CHANCE = 50; + DRAW_ON_SIGHT = 0; + ELDER_TYPE = "poison"; + WEAPON_IDX = 2; + FREQ_SPELL = 2.0; + EFFECT_SCRIPT = "effects/dot_poison"; + EFFECT_DUR = 10; + EFFECT_DMG = DOT_POISON; + SOUND_EFFECT = SOUND_POISON; + } + if (RND_ELDER_TYPE == 4) + { + JUMP_AWAY_CHANCE = 30; + DRAW_ON_SIGHT = 0; + ELDER_TYPE = "cold"; + WEAPON_IDX = 3; + FREQ_SPELL = 5.1; + EFFECT_SCRIPT = "effects/dot_cold"; + EFFECT_DUR = 5; + EFFECT_DMG = DOT_COLD; + SOUND_EFFECT = SOUND_FREEZE; + } + if (RND_ELDER_TYPE == 5) + { + JUMP_AWAY_CHANCE = 50; + ATTACK_MOVERANGE = 200; + DRAW_ON_SIGHT = 1; + ELDER_TYPE = "lightning"; + WEAPON_IDX = 5; + EFFECT_SCRIPT = "effects/dot_lightning"; + EFFECT_DUR = 5; + EFFECT_DMG = DOT_SHOCK; + ClientEvent("persist", "all", "monsters/k_elder_cl", GetEntityIndex(GetOwner()), "lightning", 0); + CL_IDX = "game.script.last_sent_id"; + SOUND_EFFECT = SOUND_SHOCK; + } + ELDER_SKIN = RND_ELDER_TYPE; + ELDER_SKIN -= 1; + LogDebug("setup_elder - skin ELDER_SKIN type ELDER_TYPE"); + SetProp(GetOwner(), "skin", ELDER_SKIN); + } + + void draw_blade() + { + BLADE_DRAWN = 1; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_CAST_NORM); + ScheduleDelayedEvent(0.2, "draw_blade2"); + } + + void draw_blade2() + { + SetModelBody(2, WEAPON_IDX); + if (ELDER_TYPE == "lightning") + { + ScheduleDelayedEvent(0.1, "lknife_sound"); + ClientEvent("update", "all", CL_IDX, "ke_knife_sprite_on"); + NEXT_CL_RESET = GetGameTime(); + NEXT_CL_RESET += 20.0; + } + EmitSound(GetOwner(), 0, SOUND_DRAW, 10); + } + + void lknife_sound() + { + EmitSound(GetOwner(), 0, SOUND_BEAM_ACTIVATE, 10); + } + + void OnDamage(int damage) override + { + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 8); + if (!(GetEntityRange(param1) < 256)) return; + int RND_100 = RandomInt(1, 100); + LogDebug("RND_100 vs JUMP_AWAY_CHANCE"); + if (RND_100 < JUMP_AWAY_CHANCE) + { + if (GetGameTime() > NEXT_LEAP) + { + } + NEXT_LEAP = GetGameTime(); + NEXT_LEAP += 10.0; + LogDebug("leap away!"); + leap_away(GetEntityIndex(param1)); + } + } + + void leap_away() + { + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + AS_ATTACKING = GetGameTime(); + EmitSound(GetOwner(), 0, SOUND_JUMP, 10); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + PlayAnim("critical", ANIM_JUMP); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 600, 75)); + } + + void game_dodamage() + { + if ((BLADE_ATTACK)) + { + if (ELDER_TYPE != "dark") + { + } + if (GetRelationship(param2) == "enemy") + { + } + if (GetGameTime() > NEXT_APPLYEFFECT_SOUND) + { + NEXT_APPLYEFFECT_SOUND = GetGameTime(); + NEXT_APPLYEFFECT_SOUND += EFFECT_DUR; + EmitSound(GetOwner(), 0, SOUND_EFFECT, 10); + } + ApplyEffect(param2, EFFECT_SCRIPT, EFFECT_DUR, GetEntityIndex(GetOwner()), EFFECT_DMG); + if (ELDER_TYPE == "lightning") + { + string HIT_RESIST = /* TODO: $get_takedmg */ $get_takedmg(m_hAttackTarget, "lightning"); + if (Random(0.01, 1.0) < HIT_RESIST) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 250, 120)); + } + } + BLADE_ATTACK = 0; + } + + void attack_knife() + { + EmitSound(GetOwner(), 0, SOUND_SWING, 5); + BLADE_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KNIFE, ATTACK_HITCHANCE, ELDER_TYPE); + } + + void OnParry(CBaseEntity@ attacker) override + { + PlayAnim("critical", ANIM_CAST_NORM); + EmitSound(GetOwner(), 0, SOUND_PARRY, 10); + } + + void OnAidingAlly(CBaseEntity@ ally, CBaseEntity@ enemy) + { + CallExternal(NPC_ALLY_TO_AID, "being_aided"); + } + + void being_aided() + { + if (!(false)) return; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npcatk_lost_sight() + { + if ((false)) return; + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + if (!(GetGameTime() > NEXT_SEARCH)) return; + NEXT_SEARCH = GetGameTime(); + NEXT_SEARCH += 3.0; + PlayAnim("once", ANIM_SEARCH); + AS_ATTACKING = GetGameTime(); + } + + void npc_targetsighted() + { + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((DRAW_ON_SIGHT)) + { + ScheduleDelayedEvent(0.1, "draw_blade"); + } + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (ELDER_TYPE == "lightning") + { + if (m_hAttackTarget != "unset") + { + if ((false)) + { + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if ((WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) + { + if (!(LIGHTNING_ON)) + { + if (!(I_R_FROZEN)) + { + } + if (GetEntityRange(m_hAttackTarget) < MAX_BEAM_RANGE) + { + } + if (GetEntityRange(m_hAttackTarget) >= ATTACK_RANGE) + { + } + lightning_on(); + TARG_RESIST = /* TODO: $get_takedmg */ $get_takedmg(m_hAttackTarget, "lightning"); + } + else + { + if ((I_R_FROZEN)) + { + lightning_off(); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetEntityRange(m_hAttackTarget) >= MAX_BEAM_RANGE) + { + lightning_off(); + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + lightning_off(); + } + else + { + AS_ATTACKING = GetGameTime(); + DoDamage(m_hAttackTarget, "direct", DMG_REPEL_BEAM, 1.0, "lightning"); + if (Random(0.01, 1.0) < TARG_RESIST) + { + } + AddVelocity(m_hAttackTarget, REPEL_BEAM_VEL); + } + } + } + else + { + if ((LIGHTNING_ON)) + { + } + lightning_off(); + } + } + else + { + if ((LIGHTNING_ON)) + { + } + lightning_off(); + } + } + if (m_hAttackTarget == "unset") + { + if ((LIGHTNING_ON)) + { + } + lightning_off(); + } + } + else + { + if (m_hAttackTarget != "unset") + { + } + if ((NPC_CANSEE_TARGET)) + { + } + if (ELDER_TYPE == "dark") + { + } + if (ELDER_TYPE == "fire") + { + if (GetGameTime() > NEXT_SPELL) + { + } + NEXT_SPELL = GetGameTime(); + NEXT_SPELL += FREQ_SPELL; + do_spell(); + } + if (ELDER_TYPE == "cold") + { + if ((GetEntityProperty(m_hAttackTarget, "scriptvar"))) + { + ATTACK_MOVERANGE = ATTACK_RANGE_MELEE; + } + else + { + ATTACK_MOVERANGE = ATTACK_RANGE_PROJ; + } + if (GetGameTime() > NEXT_SPELL) + { + } + NEXT_SPELL = GetGameTime(); + NEXT_SPELL += FREQ_SPELL; + do_spell(); + } + if (ELDER_TYPE == "poison") + { + if (GetGameTime() > NEXT_SPELL) + { + } + NEXT_SPELL = GetGameTime(); + NEXT_SPELL += FREQ_SPELL; + do_spell(); + } + } + } + + void do_spell() + { + if (ELDER_TYPE == "fire") + { + PlayAnim("critical", ANIM_CAST_NORM); + TossProjectile("proj_fire_xolt", /* TODO: $relpos */ $relpos(0, 0, 26), m_hAttackTarget, 400, DMG_FIRE_BOLT, 2, "none"); + } + if (ELDER_TYPE == "cold") + { + EmitSound(GetOwner(), 0, SOUND_SPELL_COLD, 10); + if (!(GetEntityProperty(m_hAttackTarget, "scriptvar"))) + { + } + PlayAnim("critical", ANIM_CAST_NORM); + TossProjectile("proj_freezing_sphere", /* TODO: $relpos */ $relpos(0, 96, 26), m_hAttackTarget, 100, 0, 0, "none"); + } + if (ELDER_TYPE == "poison") + { + EmitSound(GetOwner(), 0, SOUND_SPELL_POISON, 10); + PlayAnim("critical", ANIM_CAST_NORM); + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 0, 26), m_hAttackTarget, 200, DMG_POISON_BOLT, 10, "none"); + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 0, 26), m_hAttackTarget, 200, DMG_POISON_BOLT, 10, "none"); + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 0, 26), m_hAttackTarget, 200, DMG_POISON_BOLT, 10, "none"); + } + } + + void npc_selectattack() + { + if (!(BLADE_DRAWN)) + { + draw_blade(); + } + if ((GetEntityProperty(m_hAttackTarget, "scriptvar"))) return; + } + + void reset_flee_check_delay() + { + FLEE_CHECK_DELAY = 0; + } + + void lightning_on() + { + LIGHTNING_ON = 1; + string TARG_HEIGHT = GetEntityHeight(m_hAttackTarget); + TARG_HEIGHT /= 2; + ClientEvent("update", "all", CL_IDX, "ke_beam_on", GetEntityIndex(m_hAttackTarget), TARG_HEIGHT); + EmitSound(GetOwner(), 1, SOUND_BEAM_LOOP, 10); + EmitSound(GetOwner(), 2, SOUND_BEAM_SHOOT, 10); + } + + void lightning_off() + { + LIGHTNING_ON = 0; + ClientEvent("update", "all", CL_IDX, "ke_beam_off"); + EmitSound(GetOwner(), 1, SOUND_BEAM_LOOP, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_elder_cl.as b/scripts/angelscript/monsters/k_elder_cl.as new file mode 100644 index 00000000..fc7d224c --- /dev/null +++ b/scripts/angelscript/monsters/k_elder_cl.as @@ -0,0 +1,145 @@ +#pragma context server + +namespace MS +{ + +class KElderCl : CGameScript +{ + string KE_BEAM_ON; + int KE_END_KNIFE_SPRITE; + string KE_GLOW_SPRITE; + float KE_GLOW_SPRITE_LARGE; + float KE_GLOW_SPRITE_SMALL; + string KE_OWNER_SKEL; + string KE_RENDER_ON; + string KE_SPRITE_TARGET; + string KE_TARG_HALF_HEIGHT; + string OWNER_TYPE; + + KElderCl() + { + KE_GLOW_SPRITE = "3dmflaora.spr"; + KE_GLOW_SPRITE_LARGE = 0.5; + KE_GLOW_SPRITE_SMALL = 0.1; + Precache(KE_GLOW_SPRITE); + } + + void client_activate() + { + LogDebug("***** ke_setup PARAM1 PARAM2 PARAM3 PARAM4 PARAM5"); + KE_OWNER_SKEL = param1; + OWNER_TYPE = param2; + if (!(OWNER_TYPE == "lightning")) return; + string KNIFE_SPR_ORG = /* TODO: $getcl */ $getcl(KE_OWNER_SKEL, "bonepos", 26); + KE_RENDER_ON = param3; + KE_BEAM_ON = param4; + KE_SPRITE_TARGET = param5; + ClientEffect("tempent", "sprite", KE_GLOW_SPRITE, KNIFE_SPR_ORG, "ke_setup_knife_sprite", "ke_update_knife_sprite"); + ScheduleDelayedEvent(5.0, "ke_maintain_script"); + } + + void ke_maintain_script() + { + if ((KE_END_KNIFE_SPRITE)) return; + string KNIFE_SPR_ORG = /* TODO: $getcl */ $getcl(KE_OWNER_SKEL, "bonepos", 26); + ClientEffect("tempent", "sprite", KE_GLOW_SPRITE, KNIFE_SPR_ORG, "ke_setup_knife_sprite", "ke_update_knife_sprite"); + ScheduleDelayedEvent(5.0, "ke_maintain_script"); + } + + void ke_update_knife_sprite() + { + if ((KE_END_KNIFE_SPRITE)) + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.01); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + } + if ((KE_END_KNIFE_SPRITE)) return; + if ((KE_RENDER_ON)) + { + string KNIFE_SPR_ORG = /* TODO: $getcl */ $getcl(KE_OWNER_SKEL, "bonepos", 26); + ClientEffect("tempent", "set_current_prop", "origin", KNIFE_SPR_ORG); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + } + } + + void ke_beam_loop() + { + if (!(KE_BEAM_ON)) return; + ScheduleDelayedEvent(0.01, "ke_beam_loop"); + string SPARK_ORG = /* TODO: $getcl */ $getcl(KE_SPRITE_TARGET, "origin"); + SPARK_ORG += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(0, 32, KE_TARG_HALF_HEIGHT)); + ClientEffect("tempent", "sprite", KE_GLOW_SPRITE, SPARK_ORG, "ke_spit_sparks"); + string BEAM_START = /* TODO: $getcl */ $getcl(KE_OWNER_SKEL, "bonepos", 26); + string BEAM_END = /* TODO: $getcl */ $getcl(KE_SPRITE_TARGET, "origin"); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(Random(-32, 32), 0, Random(/* TODO: $neg */ $neg(KE_TARG_HALF_HEIGHT), KE_TARG_HALF_HEIGHT))); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.1, 2, 0.1, 0.3, 0.1, 30, Vector3(2, 1.5, 0.25)); + } + + void ke_beam_on() + { + LogDebug("***** KE_BEAM_ON PARAM1 PARAM2"); + KE_SPRITE_TARGET = param1; + KE_TARG_HALF_HEIGHT = param2; + KE_BEAM_ON = 1; + ke_beam_loop(); + } + + void ke_beam_off() + { + KE_BEAM_ON = 0; + } + + void ke_knife_sprite_on() + { + LogDebug("***** knife_sprite_on"); + KE_RENDER_ON = 1; + } + + void ke_setup_knife_sprite() + { + LogDebug("**** ke_setup_knife_sprite"); + ClientEffect("tempent", "set_current_prop", "death_delay", 5.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, RandomInt(0, 359), 0), Vector3(0, 110, 0))); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(254, 254, 1)); + ClientEffect("tempent", "set_current_prop", "scale", KE_GLOW_SPRITE_LARGE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void ke_spit_sparks() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", KE_GLOW_SPRITE_SMALL); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 128)); + ClientEffect("tempent", "set_current_prop", "gravity", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void ke_end_effect() + { + LogDebug("***** Ending Effect"); + KE_END_KNIFE_SPRITE = 1; + ScheduleDelayedEvent(1.0, "ke_remove_me"); + } + + void ke_remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_hollow_one.as b/scripts/angelscript/monsters/k_hollow_one.as new file mode 100644 index 00000000..5626d55b --- /dev/null +++ b/scripts/angelscript/monsters/k_hollow_one.as @@ -0,0 +1,1307 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class KHollowOne : CGameScript +{ + string ANIM_DEATH; + string ANIM_FIRE_BREATH; + string ANIM_FLOAT; + string ANIM_ICE_SPIRAL; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_MIRROR_PREP; + string ANIM_PREP_DEPLOY; + string ANIM_RELEASE_DEPLOY; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BALL_TYPE; + string BURN_LIST; + string CFB_EST_ANG; + string CFB_EST_ORG; + int CFB_FIREBALL_ACTIVE; + string CFB_FIREBALL_IDX; + int CFB_FIRST_TARGET_FOUND; + string CFB_FORCE_END; + string CFB_LIST; + string CFB_NEXT_SCAN; + string CL_IDX; + string CL_IDX_SHADOW; + int DMG_FIREBALL; + int DMG_ICEBALL; + int DMG_ZAP; + int DOT_FIRE; + int DOT_FIRE2; + int DOT_ICE; + int DOT_POISON; + string DRAINER_ALIVES; + int DRAINER_INDEX; + string DRAINER_LOCS; + float DRAINER_MAX_LIVE_TIME; + string DRAINER_ROTATIONS; + string DRAINER_TARGS; + string DRAINER_TIMES; + int DRAIN_SPRITE_SPEED; + int FADE_LEVEL; + int FIRE_BREATH_ON; + float FLIGHT_DURATION; + int FLIGHT_MODE; + int FLIGHT_SPEED; + int FLOAT_DIR; + float FREQ_DODGE; + float FREQ_FLIGHT; + float FREQ_MIRROR; + float FREQ_SOUND_FLIGHT_LOOP; + int ICE_DIST; + string ICE_LIST; + int IS_UNHOLY; + int LHAND_ATCH; + int MAX_DRAIN_SPRITES; + int MIRRORS_ON; + string MIRROR_ANG; + float MIRROR_DURATION; + int MOUTH_ATCH; + int MP_DRAIN_RATE; + string NEXT_BURN; + string NEXT_DODGE; + string NEXT_FLIGHT; + string NEXT_MIRROR; + string NEXT_SPECIAL; + string NEXT_SPIKE; + string NEXT_ZAP_SCAN; + int NPC_GIVE_EXP; + int NPC_RANGED; + int N_DRAIN_SPRITES; + int N_SPECIALS; + string OUT_TARGET; + int POISON_BREATH_ON; + int RHAND_ATCH; + int SHIELD_RANGE; + string SOUND_BREATH; + string SOUND_DEATH; + string SOUND_DODGE; + string SOUND_FIREBALL_RELEASE; + string SOUND_FIRE_PREP; + string SOUND_FLIGHT_LOOP; + string SOUND_FLIGHT_START; + string SOUND_ICE_PREP; + string SOUND_MIRROR_OFF; + string SOUND_POISON_BREATH; + string SOUND_POISON_BREATH_START; + string SOUND_POP; + string SOUND_SPELL_PREP; + string SOUND_ZAP_LOOP; + string SOUND_ZAP_START; + int SPECIAL_CYCLE; + string SPIN_ANG; + int SPIN_ON; + int SPIN_SPEED; + string ZAP_ON; + string ZAP_TARGET; + string sOUND_MIRROR; + + KHollowOne() + { + ANIM_FLOAT = "float"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "leap"; + ANIM_PREP_DEPLOY = "ref_aim_trip"; + ANIM_RELEASE_DEPLOY = "ref_shoot_trip"; + ANIM_MIRROR_PREP = "ref_aim_grenade"; + ANIM_ICE_SPIRAL = "ref_shoot_smartgun"; + ANIM_FIRE_BREATH = "float"; + LHAND_ATCH = 1; + RHAND_ATCH = 2; + MOUTH_ATCH = 3; + N_SPECIALS = 9; + MIRROR_DURATION = 60.0; + FREQ_MIRROR = 120.0; + FLIGHT_DURATION = 60.0; + FREQ_FLIGHT = 90.0; + FLIGHT_SPEED = 100; + MAX_DRAIN_SPRITES = 8; + DRAIN_SPRITE_SPEED = 25; + DRAINER_MAX_LIVE_TIME = 180.0; + MP_DRAIN_RATE = -10; + DMG_FIREBALL = 300; + DMG_ICEBALL = 200; + DOT_ICE = 50; + DOT_FIRE = 75; + DOT_FIRE2 = 125; + DOT_POISON = 25; + DMG_ZAP = 25; + FREQ_DODGE = Random(5.0, 15.0); + SHIELD_RANGE = 80; + IS_UNHOLY = 1; + ANIM_IDLE = "idle"; + ANIM_DEATH = "die_forwards2"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + NPC_GIVE_EXP = 5000; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 170; + ATTACK_MOVERANGE = 128; + NPC_RANGED = 1; + SOUND_SPELL_PREP = "magic/bolt_start.wav"; + SOUND_FIRE_PREP = "magic/spookie1.wav"; + SOUND_ICE_PREP = "magic/spookie1.wav"; + SOUND_POP = "magic/elecidlepop.wav"; + SOUND_FIREBALL_RELEASE = "ambience/alienflyby1.wav"; + sOUND_MIRROR = "monsters/gonome/gonome_melee2.wav"; + SOUND_MIRROR_OFF = "debris/beamstart15.wav"; + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + SOUND_ZAP_LOOP = "magic/bolt_loop.wav"; + SOUND_ZAP_START = "magic/bolt_end.wav"; + SOUND_POISON_BREATH = "magic/flame_loop.wav"; + SOUND_POISON_BREATH_START = "magic/flame_loop_start.wav"; + SOUND_DODGE = "magic/frost_reverse.wav"; + SOUND_FLIGHT_START = "magic/vent3.wav"; + SOUND_FLIGHT_LOOP = "magic/vent3.wav"; + FREQ_SOUND_FLIGHT_LOOP = 5.92; + SOUND_DEATH = "x/x_pain3.wav"; + Precache(SOUND_DEATH); + Precache("magic/egon_run3_noloop.wav"); + Precache("magic/energy1_loud.wav1"); + Precache("explode1.spr"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if (N_DRAIN_SPRITES > 0) + { + for (int i = 0; i < 8; i++) + { + track_drain_sprites(); + } + } + } + + void game_precache() + { + Precache("monsters/summon/client_side_fireball"); + Precache("monsters/summon/client_side_iceball"); + Precache("effects/sfx_motionblur_perm"); + } + + void OnSpawn() override + { + SetName("Kharaztorant Hollow One"); + Precache("monsters/hollow_one.mdl"); + SetModel("monsters/hollow_one.mdl"); + SetWidth(32); + SetHeight(80); + SetIdleAnim("idle"); + SetMoveAnim("walk"); + SetHearingSensitivity(2); + if (!(true)) return; + SetRoam(false); + SetHealth(8000); + SetRace("demon"); + SetDamageResistance("all", 0.4); + SetDamageResistance("holy", 1.5); + SetDamageResistance("poison", 0.0); + npcatk_suspend_attack(); + N_DRAIN_SPRITES = 0; + SPECIAL_CYCLE = 0; + DRAINER_ROTATIONS = "1;2;3;4;5;6;7;8"; + DRAINER_ALIVES = "0;0;0;0;0;0;0;0"; + DRAINER_TARGS = "1;2;3;4;5;6;7;8"; + DRAINER_LOCS = "1;2;3;4;5;6;7;8"; + DRAINER_TIMES = "1;2;3;4;5;6;7;8"; + CL_IDX = "const.localplayer.scriptID"; + ClientEvent("update", "all", CL_IDX, "kh_setup", GetEntityIndex(GetOwner())); + } + + void game_dynamically_created() + { + SPECIAL_CYCLE = param1; + } + + void cycle_up() + { + SetRoam(true); + } + + void cycle_down() + { + npcatk_go_home(); + } + + void npc_made_it_home() + { + SetRoam(false); + } + + void my_target_died() + { + if ((POISON_BREATH_ON)) + { + // svplaysound: if ( POISON_BREATH_ON ) svplaysound 1 0 SOUND_POISON_BREATH + EmitSound(1, 0, SOUND_POISON_BREATH); + } + if ((FIRE_BREATH_ON)) + { + // svplaysound: if ( FIRE_BREATH_ON ) svplaysound 1 0 SOUND_BREATH + EmitSound(1, 0, SOUND_BREATH); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((POISON_BREATH_ON)) + { + // svplaysound: if ( POISON_BREATH_ON ) svplaysound 1 0 SOUND_POISON_BREATH + EmitSound(1, 0, SOUND_POISON_BREATH); + } + if ((FIRE_BREATH_ON)) + { + // svplaysound: if ( FIRE_BREATH_ON ) svplaysound 1 0 SOUND_BREATH + EmitSound(1, 0, SOUND_BREATH); + } + SetGravity(1); + SetVelocity(GetOwner(), 0); + SetAnimMoveSpeed(0); + ClientEvent("update", "all", CL_IDX, "kh_end_effects"); + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + if ((CFB_FIREBALL_ACTIVE)) + { + cfb_explode(); + } + CallExternal(GAME_MASTER, "gm_hollow_one_died", GetEntityOrigin(GetOwner())); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) return; + if (m_hAttackTarget != "unset") + { + if (GetGameTime() > NEXT_SPECIAL) + { + do_special(); + } + if (GetGameTime() > NEXT_ZAP_SCAN) + { + zap_scan(); + } + } + if ((IsEntityAlive(ZAP_TARGET))) + { + if (GetEntityRange(ZAP_TARGET) <= SHIELD_RANGE) + { + if (!(ZAP_ON)) + { + // svplaysound: svplaysound 2 10 SOUND_ZAP_LOOP + EmitSound(2, 10, SOUND_ZAP_LOOP); + EmitSound(GetOwner(), 0, SOUND_ZAP_START, 10); + ZAP_TARG_RESIST = /* TODO: $get_takedmg */ $get_takedmg(ZAP_TARGET, "lightning"); + ClientEvent("update", "all", CL_IDX, "kh_zap_target_on", GetEntityIndex(ZAP_TARGET)); + } + ZAP_ON = 1; + DoDamage(ZAP_TARGET, "direct", DMG_ZAP, 1.0, GetOwner()); + if (Random(0.0, 1.0) < ZAP_TARG_RESIST) + { + } + string TARGET_ORG = GetEntityOrigin(ZAP_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(ZAP_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 200, 110))); + } + else + { + ZAP_ON = 0; + // svplaysound: svplaysound 2 0 SOUND_ZAP_LOOP + EmitSound(2, 0, SOUND_ZAP_LOOP); + ClientEvent("update", "all", CL_IDX, "kh_zap_target_off"); + } + } + else + { + if ((ZAP_ON)) + { + } + ZAP_ON = 0; + // svplaysound: svplaysound 2 0 SOUND_ZAP_LOOP + EmitSound(2, 0, SOUND_ZAP_LOOP); + ClientEvent("update", "all", CL_IDX, "kh_zap_target_off"); + } + if (!(FLIGHT_MODE)) return; + string MY_POS = GetEntityOrigin(GetOwner()); + string MY_UP = MY_POS; + MY_UP += "z"; + string MY_DOWN = MY_POS; + MY_DOWN += "z"; + string SCAN_UP = TraceLine(MY_POS, MY_UP); + string SCAN_DOWN = TraceLine(MY_POS, MY_DOWN); + FLOAT_DIR = 1; + if (SCAN_UP != MY_UP) + { + FLOAT_DIR = -25; + } + if (SCAN_DOWN != MY_DOWN) + { + FLOAT_DIR = 25; + } + string MAX_HEIGHT = /* TODO: $get_ground_height */ $get_ground_height(MY_POS); + MAX_HEIGHT += 384; + if ((MY_POS).z >= MAX_HEIGHT) + { + FLOAT_DIR = -25; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, FLOAT_DIR)); + } + + void do_special() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + SPECIAL_CYCLE += 1; + if ((MIRRORS_ON)) + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 1); + } + if (SPECIAL_CYCLE > N_SPECIALS) + { + SPECIAL_CYCLE = 1; + } + if (SPECIAL_CYCLE == 1) + { + if (N_DRAIN_SPRITES < MAX_DRAIN_SPRITES) + { + } + LogDebug("do_special: spawn_drain_sprite"); + spawn_drain_sprite(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + if (SPECIAL_CYCLE == 2) + { + LogDebug("do_special: fireball"); + prep_fireball(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 25.0; + } + if (SPECIAL_CYCLE == 3) + { + LogDebug("do_special: iceball"); + prep_iceball(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 25.0; + } + if (SPECIAL_CYCLE == 4) + { + if ((FLIGHT_MODE)) + { + SPECIAL_CYCLE += 1; + NEXT_SPECIAL = GetGameTime(); + } + if (!(FLIGHT_MODE)) + { + } + LogDebug("do_special: fire breath"); + do_fire_breath(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + if (SPECIAL_CYCLE == 5) + { + LogDebug("do_special: ice spiral"); + prep_ice_spiral(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + if (SPECIAL_CYCLE == 6) + { + if ((FLIGHT_MODE)) + { + SPECIAL_CYCLE += 1; + NEXT_SPECIAL = GetGameTime(); + } + if (!(FLIGHT_MODE)) + { + } + LogDebug("do_special: poison breath"); + do_poison_breath(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + if (SPECIAL_CYCLE == 7) + { + LogDebug("do_special: hold person"); + prep_hold_person(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + if (SPECIAL_CYCLE == 8) + { + if ((FLIGHT_MODE)) + { + SPECIAL_CYCLE += 1; + NEXT_SPECIAL = GetGameTime(); + } + if (!(FLIGHT_MODE)) + { + } + if ((MIRRORS_ON)) + { + SPECIAL_CYCLE += 1; + NEXT_SPECIAL = GetGameTime(); + } + if (!(MIRRORS_ON)) + { + } + if (GetGameTime() <= NEXT_MIRROR) + { + SPECIAL_CYCLE += 1; + NEXT_SPECIAL = GetGameTime(); + } + if (GetGameTime() > NEXT_MIRROR) + { + } + LogDebug("do_special: mirror image"); + prep_mirrors(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + if (SPECIAL_CYCLE == 9) + { + LogDebug("do_special: attempt flight"); + if ((FLIGHT_MODE)) + { + LogDebug("attempt_flight: canceled , already in flight"); + SPECIAL_CYCLE += 1; + NEXT_SPECIAL = GetGameTime(); + } + if (!(FLIGHT_MODE)) + { + } + if ((MIRRORS_ON)) + { + LogDebug("attempt_flight: canceled , mirror image up"); + SPECIAL_CYCLE += 1; + NEXT_SPECIAL = GetGameTime(); + } + if (!(MIRRORS_ON)) + { + } + if (GetGameTime() <= NEXT_FLIGHT) + { + LogDebug("attempt_flight: canceled , too soon since light flight"); + SPECIAL_CYCLE += 1; + NEXT_SPECIAL = GetGameTime(); + } + if (GetGameTime() > NEXT_FLIGHT) + { + } + prep_flight_mode(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + } + + void OnSuspendAI() + { + SetRoam(false); + } + + void npcatk_resume_ai() + { + SetRoam(true); + } + + void spawn_drain_sprite() + { + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_PREP_DEPLOY); + SetIdleAnim(ANIM_PREP_DEPLOY); + SetMoveAnim(ANIM_PREP_DEPLOY); + DRAINER_INDEX = -1; + LogDebug("spawn_drain_sprite alives: DRAINER_ALIVES"); + for (int i = 0; i < 8; i++) + { + find_free_drainer_index(); + } + N_DRAIN_SPRITES += 1; + Effect("beam", "ents", "lgtning.spr", 5, GetOwner(), LHAND_ATCH, GetOwner(), RHAND_ATCH, Vector3(32, 64, 255), 200, 100, 2.0); + EmitSound(GetOwner(), 0, SOUND_SPELL_PREP, 10); + ScheduleDelayedEvent(2.0, "spawn_drain_sprite2"); + } + + void find_free_drainer_index() + { + if (!(DRAINER_INDEX < 0)) return; + string CUR_IDX = i; + string IS_ALIVE = GetToken(DRAINER_ALIVES, CUR_IDX, ";"); + if (!(IS_ALIVE)) + { + DRAINER_INDEX = CUR_IDX; + LogDebug("find_free_drainer_index: Found Free DRAINER_INDEX"); + } + } + + void spawn_drain_sprite2() + { + PlayAnim("critical", ANIM_RELEASE_DEPLOY); + string TARG_LIST = /* TODO: $get_tbox */ $get_tbox("enemy", 512); + OUT_TARGET = m_hAttackTarget; + ScheduleDelayedEvent(0.1, "spawn_drain_sprite3"); + if (!(TARG_LIST != "none")) return; + if (GetTokenCount(TARG_LIST, ";") > 1) + { + ScrambleTokens(TARG_LIST, ";"); + } + OUT_TARGET = GetToken(TARG_LIST, 0, ";"); + } + + void spawn_drain_sprite3() + { + LogDebug("Using target GetEntityName(OUT_TARGET)"); + EmitSound(GetOwner(), 0, SOUND_POP, 10); + string SPAWN_LOC = GetEntityProperty(GetOwner(), "attachpos"); + string MOVE_DEST = SPAWN_LOC; + string TARG_ORG = GetEntityOrigin(OUT_TARGET); + string TARG_ANG = /* TODO: $angles3d */ $angles3d(SPAWN_LOC, TARG_ORG); + MOVE_DEST += /* TODO: $relvel */ $relvel(TARG_ANG, Vector3(0, DRAIN_SPRITE_SPEED, 0)); + MOVE_DEST = "x"; + ClientEvent("update", "all", CL_IDX, "kh_make_drain_sprite", SPAWN_LOC, DRAINER_INDEX, TARG_ANG); + SetToken(DRAINER_TARGS, DRAINER_INDEX, OUT_TARGET, ";"); + SetToken(DRAINER_LOCS, DRAINER_INDEX, SPAWN_LOC, ";"); + SetToken(DRAINER_TIMES, DRAINER_INDEX, GetGameTime(), ";"); + SetToken(DRAINER_ROTATIONS, DRAINER_INDEX, RandomInt(0, 359), ";"); + SetToken(DRAINER_ALIVES, DRAINER_INDEX, 1, ";"); + resume_movement(); + npcatk_resume_ai(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + } + + void resume_movement() + { + if (!(FLIGHT_MODE)) + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + else + { + SetMoveAnim(ANIM_FLOAT); + SetIdleAnim(ANIM_FLOAT); + } + } + + void stop_movement() + { + } + + void track_drain_sprites() + { + string CUR_IDX = i; + string IS_ALIVE = GetToken(DRAINER_ALIVES, CUR_IDX, ";"); + if (!(IS_ALIVE)) return; + string MY_TARG = GetToken(DRAINER_TARGS, CUR_IDX, ";"); + string MY_ORG = GetToken(DRAINER_LOCS, CUR_IDX, ";"); + string MY_ORBIT_ANG = GetToken(DRAINER_ROTATIONS, CUR_IDX, ";"); + string MY_TIME = GetToken(DRAINER_TIMES, CUR_IDX, ";"); + string TARG_ORG = GetEntityOrigin(MY_TARG); + string MY_DEST = TARG_ORG; + string TARG_HEIGHT_ADJ = GetEntityHeight(MY_TARG); + TARG_HEIGHT_ADJ /= 2; + MY_DEST += /* TODO: $relpos */ $relpos(Vector3(0, MY_ORBIT_ANG, 0), Vector3(0, 32, TARG_HEIGHT_ADJ)); + string TARG_MP = GetEntityMP(MY_TARG); + if (Distance(MY_ORG, TARG_ORG) < 64) + { + GiveMP(MY_TARG); + if (GetGameTime() > NEXT_ALERT) + { + if (TARG_MP > 0) + { + } + NEXT_ALERT = GetGameTime(); + NEXT_ALERT += 2.0; + SendPlayerMessage(MY_TARG, "A corpse-light is draining your mana!"); + int IS_DRAINING = 1; + } + if (TARG_MP <= 0) + { + SendPlayerMessage(m_hAttackTarget, "Your soul has been drained by a corpse light!"); + DoDamage(m_hAttackTarget, "direct", 99999, 1.0, GetOwner()); + ClientEvent("update", "all", CL_IDX, "kh_sprite_splode", MY_ORG); + SetToken(DRAINER_ALIVES, CUR_IDX, "0", ";"); + int IS_ALIVE = 0; + N_DRAIN_SPRITES -= 1; + LogDebug("Drainer: popped"); + } + else + { + MY_ORBIT_ANG += 45; + SetToken(DRAINER_ROTATIONS, CUR_IDX, MY_ORBIT_ANG, ";"); + } + } + if (!(IS_ALIVE)) return; + float TIME_ALIVE = GetGameTime(); + TIME_ALIVE -= MY_TIME; + if (TIME_ALIVE > DRAINER_MAX_LIVE_TIME) + { + ClientEvent("update", "all", CL_IDX, "kh_sprite_splode", MY_ORG); + SetToken(DRAINER_ALIVES, CUR_IDX, "0", ";"); + int IS_ALIVE = 0; + N_DRAIN_SPRITES -= 1; + LogDebug("Drainer: Timed out"); + } + if (!(IS_ALIVE)) return; + if (!(IsEntityAlive(MY_TARG))) + { + ClientEvent("update", "all", CL_IDX, "kh_sprite_splode", MY_ORG); + SetToken(DRAINER_ALIVES, CUR_IDX, "0", ";"); + int IS_ALIVE = 0; + N_DRAIN_SPRITES -= 1; + LogDebug("Drainer: Target Died"); + } + if (!(IS_ALIVE)) return; + string DEST_ANG = /* TODO: $angles3d */ $angles3d(MY_ORG, MY_DEST); + DEST_ANG = "x"; + ClientEvent("update", "all", CL_IDX, "kh_make_drain_sprite", MY_ORG, CUR_IDX, DEST_ANG, IS_DRAINING); + string OLD_ORG = MY_ORG; + MY_ORG += /* TODO: $relvel */ $relvel(DEST_ANG, Vector3(0, DRAIN_SPRITE_SPEED, 0)); + SetToken(DRAINER_LOCS, CUR_IDX, MY_ORG, ";"); + } + + void prep_fireball() + { + ScheduleDelayedEvent(2.0, "prep_fireball2"); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_PREP_DEPLOY); + SetIdleAnim(ANIM_PREP_DEPLOY); + SetMoveAnim(ANIM_PREP_DEPLOY); + ClientEvent("update", "all", CL_IDX, "kh_hand_sprites", 2.0, Vector3(255, 128, 96)); + EmitSound(GetOwner(), 0, SOUND_FIRE_PREP, 10); + } + + void prep_fireball2() + { + PlayAnim("critical", ANIM_RELEASE_DEPLOY); + EmitSound(GetOwner(), 0, SOUND_FIREBALL_RELEASE, 10); + npcatk_resume_ai(); + resume_movement(); + BALL_TYPE = "fire"; + start_ball(); + } + + void prep_iceball() + { + ScheduleDelayedEvent(2.0, "prep_iceball2"); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_PREP_DEPLOY); + SetIdleAnim(ANIM_PREP_DEPLOY); + SetMoveAnim(ANIM_PREP_DEPLOY); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), LHAND_ATCH, GetOwner(), RHAND_ATCH, Vector3(128, 164, 255), 200, 200, 2.0); + EmitSound(GetOwner(), 0, SOUND_ICE_PREP, 10); + } + + void prep_iceball2() + { + PlayAnim("critical", ANIM_RELEASE_DEPLOY); + EmitSound(GetOwner(), 0, SOUND_FIREBALL_RELEASE, 10); + npcatk_resume_ai(); + resume_movement(); + BALL_TYPE = "ice"; + start_ball(); + } + + void start_ball() + { + if ((CFB_FIREBALL_ACTIVE)) return; + CFB_FIREBALL_ACTIVE = 1; + CFB_FIRST_TARGET_FOUND = 0; + CFB_EST_ORG = /* TODO: $relpos */ $relpos(0, 32, 0); + string START_ANGS = GetEntityAngles(GetOwner()); + CFB_EST_ANG = START_ANGS; + if (BALL_TYPE == "fire") + { + ClientEvent("new", "all", "monsters/summon/client_side_fireball", CFB_EST_ORG, START_ANGS); + } + if (BALL_TYPE == "ice") + { + ClientEvent("new", "all", "monsters/summon/client_side_iceball", CFB_EST_ORG, START_ANGS); + } + CFB_FIREBALL_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.1, "cfb_fireball_loop"); + CFB_FORCE_END = GetGameTime(); + CFB_FORCE_END += 20.0; + } + + void cfb_fireball_loop() + { + if (!(CFB_FIREBALL_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "cfb_fireball_loop"); + if (GetGameTime() > CFB_NEXT_SCAN) + { + CFB_NEXT_SCAN = GetGameTime(); + CFB_NEXT_SCAN += 2.0; + if (!(IsEntityAlive(CFB_TARGET))) + { + string OWNER_ORG = GetEntityOrigin(GetOwner()); + string TARGET_TOKENS = FindEntitiesInSphere("enemy", 512); + if (TARGET_TOKENS != "none") + { + } + if (GetTokenCount(TARGET_TOKENS, ";") > 1) + { + ScrambleTokens(TARGET_TOKENS, ";"); + } + string TEST_TARG = GetToken(TARGET_TOKENS, 0, ";"); + if ((IsEntityAlive(TEST_TARG))) + { + } + if (!(GetEntityProperty(TEST_TARG, "scriptvar"))) + { + } + CFB_TARGET = TEST_TARG; + if (!(CFB_FIRST_TARGET_FOUND)) + { + } + CFB_FIRST_TARGET_FOUND = 1; + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(CFB_EST_ORG, TARG_ORG); + } + else + { + string SCAN_DOWN = CFB_EST_ORG; + string TARGET_TOKENS = FindEntitiesInSphere("enemy", 96); + if (TARGET_TOKENS != "none") + { + } + cfb_explode("hit_nme"); + } + } + if (!(CFB_FIREBALL_ACTIVE)) return; + if ((IsEntityAlive(CFB_TARGET))) + { + string TARG_ORG = GetEntityOrigin(CFB_TARGET); + if (!(IsValidPlayer(CFB_TARGET))) + { + TARG_ORG += "z"; + } + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(CFB_EST_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + ClientEvent("update", "all", CFB_FIREBALL_IDX, "svr_update_fireball_vec", ANG_TO_TARG, CFB_EST_ORG); + CFB_EST_ANG = ANG_TO_TARG; + CFB_EST_ORG += /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, 60, 0)); + } + else + { + CFB_EST_ORG += /* TODO: $relvel */ $relvel(CFB_EST_ANG, Vector3(0, 60, 0)); + } + string TRACE_DEST = CFB_EST_ORG; + TRACE_DEST += /* TODO: $relvel */ $relvel(CFB_EST_ANG, Vector3(0, 60, 0)); + string TRACE_RESULT = TraceLine(CFB_EST_ORG, TRACE_DEST); + if (TRACE_RESULT != TRACE_DEST) + { + cfb_explode("hitwall"); + } + if (!(CFB_FIREBALL_ACTIVE)) return; + if (!(GetGameTime() > CFB_FORCE_END)) return; + cfb_explode("time_out"); + } + + void cfb_explode() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + CFB_FIREBALL_ACTIVE = 0; + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_explode"); + ScheduleDelayedEvent(0.1, "cfb_fireball_release"); + CFB_LIST = FindEntitiesInSphere("enemy", 128); + if (!(CFB_LIST != "none")) return; + if (!(GetTokenCount(CFB_LIST, ";") > 0)) return; + for (int i = 0; i < GetTokenCount(CFB_LIST, ";"); i++) + { + cfb_affect_targets(); + } + } + + void cfb_affect_targets() + { + string CHECK_ENT = GetToken(CFB_LIST, i, ";"); + string TARGET_ORG = GetEntityOrigin(CHECK_ENT); + string TARG_ANG = /* TODO: $angles */ $angles(CFB_EST_ORG, TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CHECK_ENT, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + if (BALL_TYPE == "fire") + { + DoDamage(CHECK_ENT, "direct", DMG_FIREBALL, 1.0, GetOwner()); + ApplyEffect(CHECK_ENT, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + if (BALL_TYPE == "ice") + { + ApplyEffect(CHECK_ENT, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_ICE); + } + } + + void cfb_fireball_end() + { + LogDebug("cfb_fireball_end"); + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_end"); + ScheduleDelayedEvent(0.1, "cfb_fireball_release"); + } + + void cfb_fireball_release() + { + LogDebug("cfb_fireball_release"); + CFB_FIREBALL_ACTIVE = 0; + } + + void prep_mirrors() + { + EmitSound(GetOwner(), 0, SOUND_MIRROR, 10); + MIRRORS_ON = 1; + stop_movement(); + npcatk_suspend_ai(); + SetMoveAnim(ANIM_MIRROR_PREP); + SetIdleAnim(ANIM_MIRROR_PREP); + PlayAnim("critical", ANIM_MIRROR_PREP); + SPIN_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + MIRROR_ANG = SPIN_ANG; + SPIN_ON = 1; + SPIN_SPEED = 1; + FADE_LEVEL = 255; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderfx", 16); + mirror_spin(); + ScheduleDelayedEvent(3.0, "stop_mirror_spin"); + ClientEvent("update", "all", CL_IDX, "kh_spawn_mirrors", "monsters/hollow_one.mdl", GetEntityOrigin(GetOwner()), SPIN_ANG); + } + + void stop_mirror_spin() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 1); + SetProp(GetOwner(), "renderfx", 0); + SPIN_ON = 0; + resume_movement(); + npcatk_resume_ai(); + MIRROR_DURATION("end_mirror_fx"); + } + + void mirror_spin() + { + if (!(SPIN_ON)) return; + ScheduleDelayedEvent(0.05, "mirror_spin"); + FADE_LEVEL -= 10; + if (FADE_LEVEL < 0) + { + FADE_LEVEL = 0; + } + LogDebug("FADE_LEVEL"); + SetProp(GetOwner(), "renderamt", FADE_LEVEL); + SPIN_ANG += SPIN_SPEED; + SPIN_SPEED += 1; + if (SPIN_ANG > 359) + { + SPIN_ANG -= 359; + } + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, SPIN_ANG, 0), Vector3(0, 100, 0)); + SetMoveDest(FACE_POS); + } + + void end_mirror_fx() + { + NEXT_MIRROR = GetGameTime(); + NEXT_MIRROR += FREQ_MIRROR; + MIRRORS_ON = 0; + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + EmitSound(GetOwner(), 0, SOUND_MIRROR_OFF, 10); + ClientEvent("update", "all", CL_IDX, "kh_mirrors_off"); + } + + void prep_ice_spiral() + { + stop_movement(); + npcatk_suspend_ai(); + SetMoveAnim(ANIM_ICE_SPIRAL); + SetIdleAnim(ANIM_ICE_SPIRAL); + PlayAnim("critical", ANIM_ICE_SPIRAL); + SPIN_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + SPIN_ON = 1; + ICE_DIST = 32; + ice_spiral_spin(); + ScheduleDelayedEvent(4.0, "stop_ice_spiral_spin"); + } + + void stop_ice_spiral_spin() + { + SPIN_ON = 0; + resume_movement(); + npcatk_resume_ai(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + } + + void ice_spiral_spin() + { + if (!(SPIN_ON)) return; + ScheduleDelayedEvent(0.05, "ice_spiral_spin"); + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, SPIN_ANG, 0), Vector3(0, 100, 0)); + SetMoveDest(FACE_POS); + if (GetGameTime() > NEXT_SPIKE) + { + NEXT_SPIKE = GetGameTime(); + NEXT_SPIKE += 0.25; + string FREEZE_TARGET = GetEntityOrigin(GetOwner()); + FREEZE_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, SPIN_ANG, 0), Vector3(0, ICE_DIST, 0)); + freeze_area(FREEZE_TARGET); + ICE_DIST += 16; + } + SPIN_ANG += 10; + if (SPIN_ANG > 359) + { + SPIN_ANG -= 359; + } + } + + void freeze_area() + { + string ICE_POS = param1; + ICE_POS = "z"; + ICE_LIST = /* TODO: $get_tbox */ $get_tbox("enemy", 96, ICE_POS); + ClientEvent("update", "all", CL_IDX, "kh_ice_spikes", ICE_POS); + if (!(ICE_LIST != "none")) return; + string N_ICE_LIST = GetTokenCount(ICE_LIST, ";"); + if (!(N_ICE_LIST > 0)) return; + for (int i = 0; i < N_ICE_LIST; i++) + { + freeze_targets(); + } + } + + void freeze_targets() + { + string CUR_TARGET = GetToken(ICE_LIST, i, ";"); + ApplyEffect(CUR_TARGET, "effects/dot_cold_freeze", 10.0, GetEntityIndex(GetOwner()), DOT_ICE); + } + + void do_fire_breath() + { + stop_movement(); + npcatk_suspend_ai(); + SetMoveAnim(ANIM_FIRE_BREATH); + SetIdleAnim(ANIM_FIRE_BREATH); + PlayAnim("critical", ANIM_FIRE_BREATH); + SPIN_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + SPIN_ON = 1; + SPIN_ANG -= 45; + if (SPIN_ANG < 0) + { + SPIN_ANG += 359; + } + // svplaysound: svplaysound 1 10 SOUND_BREATH + EmitSound(1, 10, SOUND_BREATH); + ClientEvent("update", "all", CL_IDX, "kh_fire_breath_on", "explode1.spr"); + fire_breath_spin(); + ScheduleDelayedEvent(8.0, "stop_fire_breath_spin"); + FIRE_BREATH_ON = 1; + } + + void stop_fire_breath_spin() + { + // svplaysound: svplaysound 1 0 SOUND_BREATH + EmitSound(1, 0, SOUND_BREATH); + ClientEvent("update", "all", CL_IDX, "kh_fire_breath_off"); + SPIN_ON = 0; + resume_movement(); + npcatk_resume_ai(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + FIRE_BREATH_ON = 0; + } + + void fire_breath_spin() + { + if (!(SPIN_ON)) return; + ScheduleDelayedEvent(0.05, "fire_breath_spin"); + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, SPIN_ANG, 0), Vector3(0, 100, 0)); + SetMoveDest(FACE_POS); + if (GetGameTime() > NEXT_BURN) + { + NEXT_BURN = GetGameTime(); + NEXT_BURN += 0.5; + string BURN_TARGET = GetEntityOrigin(GetOwner()); + BURN_LIST = FindEntitiesInSphere("enemy", 512); + string N_BURN_LIST = GetTokenCount(BURN_LIST, ";"); + if (N_BURN_LIST > 0) + { + } + for (int i = 0; i < N_BURN_LIST; i++) + { + burn_targets(); + } + } + SPIN_ANG += 10; + if (SPIN_ANG > 359) + { + SPIN_ANG -= 359; + } + } + + void burn_targets() + { + string CUR_TARGET = GetToken(BURN_LIST, i, ";"); + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 256)) return; + if (!(GetEntityHeight(CUR_TARGET) > 36)) return; + ApplyEffect(CUR_TARGET, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DOT_FIRE2); + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(0, 300, 120)); + } + + void zap_scan() + { + NEXT_ZAP_SCAN = GetGameTime(); + NEXT_ZAP_SCAN += 1.0; + string ZAP_LIST = FindEntitiesInSphere("enemy", 64); + if (!(ZAP_LIST != "none")) return; + if (GetTokenCount(ZAP_LIST, ";") > 1) + { + ScrambleTokens(ZAP_LIST, ";"); + } + ZAP_TARGET = GetToken(ZAP_LIST, 0, ";"); + } + + void do_poison_breath() + { + stop_movement(); + npcatk_suspend_ai(); + SetMoveAnim(ANIM_FIRE_BREATH); + SetIdleAnim(ANIM_FIRE_BREATH); + PlayAnim("critical", ANIM_FIRE_BREATH); + SPIN_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + SPIN_ANG += 180; + if (SPIN_ANG > 359) + { + SPIN_ANG -= 359; + } + SPIN_ON = 1; + // svplaysound: svplaysound 1 10 SOUND_POISON_BREATH + EmitSound(1, 10, SOUND_POISON_BREATH); + EmitSound(GetOwner(), 0, SOUND_POISON_BREATH_START, 10); + ScheduleDelayedEvent(0.06, "cl_breath_on"); + poison_breath_spin(); + ScheduleDelayedEvent(8.0, "stop_poison_breath_spin"); + POISON_BREATH_ON = 1; + } + + void cl_breath_on() + { + ClientEvent("update", "all", CL_IDX, "kh_poison_breath_on", "poison_cloud.spr"); + } + + void stop_poison_breath_spin() + { + // svplaysound: svplaysound 1 0 SOUND_POISON_BREATH + EmitSound(1, 0, SOUND_POISON_BREATH); + ClientEvent("update", "all", CL_IDX, "kh_poison_breath_off"); + SPIN_ON = 0; + resume_movement(); + npcatk_resume_ai(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + POISON_BREATH_ON = 0; + } + + void poison_breath_spin() + { + if (!(SPIN_ON)) return; + ScheduleDelayedEvent(0.05, "poison_breath_spin"); + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, SPIN_ANG, 0), Vector3(0, 100, 0)); + SetMoveDest(FACE_POS); + if (GetGameTime() > NEXT_BURN) + { + NEXT_BURN = GetGameTime(); + NEXT_BURN += 0.5; + string BURN_TARGET = GetEntityOrigin(GetOwner()); + BURN_LIST = FindEntitiesInSphere("enemy", 512); + string N_BURN_LIST = GetTokenCount(BURN_LIST, ";"); + if (N_BURN_LIST > 0) + { + } + for (int i = 0; i < N_BURN_LIST; i++) + { + poison_targets(); + } + } + SPIN_ANG += 10; + if (SPIN_ANG > 359) + { + SPIN_ANG -= 359; + } + } + + void poison_targets() + { + string CUR_TARGET = GetToken(BURN_LIST, i, ";"); + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 256)) return; + if (!(GetEntityHeight(CUR_TARGET) > 36)) return; + ApplyEffect(CUR_TARGET, "effects/dot_poison_blind", 10.0, GetEntityIndex(GetOwner()), DOT_POISON, 0, 0, "none"); + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(0, 200, 110)); + } + + void OnDamage(int damage) override + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(GetEntityHealth(GetOwner()) > param2)) return; + if ((FLIGHT_MODE)) + { + if ((param3).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (RandomInt(1, 10) == 1) + { + npcatk_flee(GetEntityIndex(param1), 4096, 5.0); + } + } + if ((FLIGHT_MODE)) return; + if ((MIRRORS_ON)) return; + if ((POISON_BREATH_ON)) return; + string DMG_TYPE = param3; + if ((param3).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetGameTime() > NEXT_DODGE)) return; + NEXT_DODGE = GetGameTime(); + NEXT_DODGE += FREQ_DODGE; + ClientEvent("persist", "all", "effects/sfx_motionblur_perm", GetEntityIndex(GetOwner()), 0, 0); + CL_IDX_SHADOW = "game.script.last_sent_id"; + float RND_ANG = Random(0, 359); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(0, 1000, 0))); + EmitSound(GetOwner(), 0, SOUND_DODGE, 10); + ScheduleDelayedEvent(0.25, "stop_shadow_shift"); + } + + void stop_shadow_shift() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 0)); + ClientEvent("remove", "all", CL_IDX_SHADOW); + } + + void prep_hold_person() + { + ScheduleDelayedEvent(2.0, "prep_hold_person2"); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_PREP_DEPLOY); + SetIdleAnim(ANIM_PREP_DEPLOY); + SetMoveAnim(ANIM_PREP_DEPLOY); + ClientEvent("update", "all", CL_IDX, "kh_hand_sprites", 2.0, Vector3(255, 255, 255)); + EmitSound(GetOwner(), 0, SOUND_FIRE_PREP, 10); + } + + void prep_hold_person2() + { + PlayAnim("critical", ANIM_RELEASE_DEPLOY); + EmitSound(GetOwner(), 0, SOUND_FIREBALL_RELEASE, 10); + npcatk_resume_ai(); + resume_movement(); + TossProjectile("proj_hold_person", /* TODO: $relpos */ $relpos(0, 0, 24), m_hAttackTarget, 50, 0, 0, "none"); + } + + void prep_flight_mode() + { + EmitSound(GetOwner(), 0, SOUND_FLIGHT_START, 10); + FREQ_SOUND_FLIGHT_LOOP("flight_sound"); + FLOAT_DIR = -25; + FLIGHT_MODE = 1; + stop_movement(); + npcatk_suspend_ai(); + SetMoveAnim(ANIM_MIRROR_PREP); + SetIdleAnim(ANIM_MIRROR_PREP); + PlayAnim("critical", ANIM_MIRROR_PREP); + SPIN_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + MIRROR_ANG = SPIN_ANG; + SPIN_ON = 1; + SPIN_SPEED = 1; + FADE_LEVEL = 255; + flight_mode_spinup(); + ScheduleDelayedEvent(2.0, "stop_flight_mode_spinup"); + ClientEvent("update", "all", CL_IDX, "kh_flight_sprites", 1); + SOUND_FLIGHT_LOOP("flight_sound"); + } + + void stop_flight_mode_spinup() + { + SPIN_ON = 0; + resume_movement(); + npcatk_resume_ai(); + FLIGHT_DURATION("end_flight_mode"); + SetGravity(0); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + } + + void flight_mode_spinup() + { + if (!(SPIN_ON)) return; + ScheduleDelayedEvent(0.05, "mirror_spin"); + SPIN_ANG += SPIN_SPEED; + SPIN_SPEED += 1; + if (SPIN_ANG > 359) + { + SPIN_ANG -= 359; + } + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, SPIN_ANG, 0), Vector3(0, 100, 0)); + SetMoveDest(FACE_POS); + } + + void end_flight_mode() + { + SetGravity(1); + FLIGHT_MODE = 0; + NEXT_FLIGHT = GetGameTime(); + NEXT_FLIGHT += FREQ_FLIGHT; + ClientEvent("update", "all", CL_IDX, "kh_flight_sprites", 0); + } + + void game_movingto_dest() + { + if (!(FLIGHT_MODE)) return; + SetAnimMoveSpeed(FLIGHT_SPEED); + } + + void game_stopmoving() + { + if (!(FLIGHT_MODE)) return; + SetAnimMoveSpeed(0); + } + + void flight_sound() + { + if (!(FLIGHT_MODE)) return; + EmitSound(GetOwner(), 0, SOUND_FLIGHT_LOOP, 10); + FREQ_SOUND_FLIGHT_LOOP("flight_sound"); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_hollow_one_cl.as b/scripts/angelscript/monsters/k_hollow_one_cl.as new file mode 100644 index 00000000..ac70c8f6 --- /dev/null +++ b/scripts/angelscript/monsters/k_hollow_one_cl.as @@ -0,0 +1,281 @@ +#pragma context client + +namespace MS +{ + +class KHollowOneCl : CGameScript +{ + string DRAINER_ANGS; + string DRAINER_ANGS1; + string DRAINER_ANGS2; + string DRAINER_ANGS3; + string DRAINER_ANGS4; + string DRAINER_ANGS5; + string DRAINER_ANGS6; + string DRAINER_ANGS7; + string DRAINER_ANGS8; + int DRAINER_SPEED; + string GLOW_SPRITE; + string MY_OWNER; + string SPRITE_DRAINER; + string SPRITE_POPS; + + KHollowOneCl() + { + SPRITE_DRAINER = "fire1_fixed.spr"; + DRAINER_SPEED = 30; + GLOW_SPRITE = "glow01.spr"; + } + + void client_activate() + { + MY_OWNER = param1; + SPRITE_POPS = "0;0;0;0;0;0;0;0"; + LogDebug("**** client_activate"); + } + + void end_effect() + { + RemoveScript(); + } + + void spawn_drain_sprite_cl() + { + string SPAWN_LOC = param1; + string DRAINER_INDEX = param2; + DRAINER_ANGS = param3; + LogDebug("**** spawn_drain_sprite_cl pos: PARAM1 idx: PARAM2 angs: PARAM3"); + if (DRAINER_INDEX == 1) + { + ClientEffect("tempent", "sprite", SPRITE_DRAINER, SPAWN_LOC, "setup_drainer", "update_drainer1"); + } + if (DRAINER_INDEX == 2) + { + ClientEffect("tempent", "sprite", SPRITE_DRAINER, SPAWN_LOC, "setup_drainer", "update_drainer2"); + } + if (DRAINER_INDEX == 3) + { + ClientEffect("tempent", "sprite", SPRITE_DRAINER, SPAWN_LOC, "setup_drainer", "update_drainer3"); + } + if (DRAINER_INDEX == 4) + { + ClientEffect("tempent", "sprite", SPRITE_DRAINER, SPAWN_LOC, "setup_drainer", "update_drainer4"); + } + if (DRAINER_INDEX == 5) + { + ClientEffect("tempent", "sprite", SPRITE_DRAINER, SPAWN_LOC, "setup_drainer", "update_drainer5"); + } + if (DRAINER_INDEX == 6) + { + ClientEffect("tempent", "sprite", SPRITE_DRAINER, SPAWN_LOC, "setup_drainer", "update_drainer6"); + } + if (DRAINER_INDEX == 7) + { + ClientEffect("tempent", "sprite", SPRITE_DRAINER, SPAWN_LOC, "setup_drainer", "update_drainer7"); + } + if (DRAINER_INDEX == 8) + { + ClientEffect("tempent", "sprite", SPRITE_DRAINER, SPAWN_LOC, "setup_drainer", "update_drainer8"); + } + } + + void update_drainer() + { + string DRAINER_INDEX = param1; + if (DRAINER_INDEX == 1) + { + DRAINER_ANGS1 = param2; + LogDebug("**** update_drainer 1 DRAINER_ANGS1"); + } + if (DRAINER_INDEX == 2) + { + DRAINER_ANGS2 = param2; + } + if (DRAINER_INDEX == 3) + { + DRAINER_ANGS3 = param2; + } + if (DRAINER_INDEX == 4) + { + DRAINER_ANGS4 = param2; + } + if (DRAINER_INDEX == 5) + { + DRAINER_ANGS5 = param2; + } + if (DRAINER_INDEX == 6) + { + DRAINER_ANGS6 = param2; + } + if (DRAINER_INDEX == 7) + { + DRAINER_ANGS7 = param2; + } + if (DRAINER_INDEX == 8) + { + DRAINER_ANGS8 = param2; + } + } + + void update_drainer1() + { + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(DRAINER_ANGS1, Vector3(0, DRAINER_SPEED, 0))); + int MY_IDX = 1; + MY_IDX -= 1; + if (GetToken(SPRITE_POPS, MY_IDX, ";") == 1) + { + SetToken(SPRITE_POPS, MY_IDX, "0", ";"); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + string SPRITE_ORG = "game.tempent.origin"; + sprite_splode(SPRITE_ORG); + } + } + + void update_drainer2() + { + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(DRAINER_ANGS2, Vector3(0, DRAINER_SPEED, 0))); + int MY_IDX = 2; + MY_IDX -= 1; + if (GetToken(SPRITE_POPS, MY_IDX, ";") == 1) + { + SetToken(SPRITE_POPS, MY_IDX, "0", ";"); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + string SPRITE_ORG = "game.tempent.origin"; + sprite_splode(SPRITE_ORG); + } + } + + void update_drainer3() + { + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(DRAINER_ANGS3, Vector3(0, DRAINER_SPEED, 0))); + int MY_IDX = 3; + MY_IDX -= 1; + if (GetToken(SPRITE_POPS, MY_IDX, ";") == 1) + { + SetToken(SPRITE_POPS, MY_IDX, "0", ";"); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + string SPRITE_ORG = "game.tempent.origin"; + sprite_splode(SPRITE_ORG); + } + } + + void update_drainer4() + { + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(DRAINER_ANGS4, Vector3(0, DRAINER_SPEED, 0))); + int MY_IDX = 4; + MY_IDX -= 1; + if (GetToken(SPRITE_POPS, MY_IDX, ";") == 1) + { + SetToken(SPRITE_POPS, MY_IDX, "0", ";"); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + string SPRITE_ORG = "game.tempent.origin"; + sprite_splode(SPRITE_ORG); + } + } + + void update_drainer5() + { + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(DRAINER_ANGS5, Vector3(0, DRAINER_SPEED, 0))); + int MY_IDX = 5; + MY_IDX -= 1; + if (GetToken(SPRITE_POPS, MY_IDX, ";") == 1) + { + SetToken(SPRITE_POPS, MY_IDX, "0", ";"); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + string SPRITE_ORG = "game.tempent.origin"; + sprite_splode(SPRITE_ORG); + } + } + + void update_drainer6() + { + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(DRAINER_ANGS6, Vector3(0, DRAINER_SPEED, 0))); + int MY_IDX = 6; + MY_IDX -= 1; + if (GetToken(SPRITE_POPS, MY_IDX, ";") == 1) + { + SetToken(SPRITE_POPS, MY_IDX, "0", ";"); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + string SPRITE_ORG = "game.tempent.origin"; + sprite_splode(SPRITE_ORG); + } + } + + void update_drainer7() + { + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(DRAINER_ANGS7, Vector3(0, DRAINER_SPEED, 0))); + int MY_IDX = 7; + MY_IDX -= 1; + if (GetToken(SPRITE_POPS, MY_IDX, ";") == 1) + { + SetToken(SPRITE_POPS, MY_IDX, "0", ";"); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + string SPRITE_ORG = "game.tempent.origin"; + sprite_splode(SPRITE_ORG); + } + } + + void update_drainer8() + { + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(DRAINER_ANGS8, Vector3(0, DRAINER_SPEED, 0))); + int MY_IDX = 8; + MY_IDX -= 1; + if (GetToken(SPRITE_POPS, MY_IDX, ";") == 1) + { + SetToken(SPRITE_POPS, MY_IDX, "0", ";"); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + string SPRITE_ORG = "game.tempent.origin"; + sprite_splode(SPRITE_ORG); + } + } + + void sprite_popped() + { + SetToken(SPRITE_POPS, param1, "1", ";"); + } + + void sprite_splode() + { + string SPARK_ORG = param1; + ClientEffect("tempent", "sprite", GLOW_SPRITE, SPARK_ORG, "setup_spark"); + ClientEffect("tempent", "sprite", GLOW_SPRITE, SPARK_ORG, "setup_spark"); + ClientEffect("tempent", "sprite", GLOW_SPRITE, SPARK_ORG, "setup_spark"); + ClientEffect("tempent", "sprite", GLOW_SPRITE, SPARK_ORG, "setup_spark"); + EmitSound3D("turret/tu_die2.wav", 10, SPARK_ORG); + } + + void setup_drainer() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 60.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", DRAINER_ANGS); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(DRAINER_ANGS, Vector3(0, DRAINER_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void setup_spark() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, Random(0, 359), 0), Vector3(0, 20, 40))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_larva.as b/scripts/angelscript/monsters/k_larva.as new file mode 100644 index 00000000..603a5192 --- /dev/null +++ b/scripts/angelscript/monsters/k_larva.as @@ -0,0 +1,352 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class KLarva : CGameScript +{ + int AM_EATING; + string ANIM_ATTACK; + string ANIM_CLAW1; + string ANIM_CLAW2; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_IDLE1; + string ANIM_IDLE2; + string ANIM_LICK; + string ANIM_RUN; + string ANIM_RUN_FAST; + string ANIM_RUN_NORM; + string ANIM_SEARCH; + string ANIM_VICTORY; + string ANIM_VICTORY_LOOP; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string ATTACK_TYPE; + int CAN_FLINCH; + int CHANCE_LICK_STUN; + int DID_WARCRY; + int DMG_CLAW1; + int DMG_CLAW2; + int DMG_LICK; + int DROP_GOLD; + int DROP_GOLD_AMT; + int FLINCH_CHANCE; + int FLINCH_DAMAGE_THRESHOLD; + float FLINCH_DELAY; + int FLINCH_HEALTH; + float FREQ_IDLE; + float FREQ_LOOK; + int IS_UNHOLY; + int NPC_GIVE_EXP; + string SEARCH_DELAY; + string SOUND_ANGRY1; + string SOUND_ANGRY2; + string SOUND_ANGRY3; + string SOUND_CLAW_HIT1; + string SOUND_CLAW_HIT2; + string SOUND_CRAWL1; + string SOUND_CRAWL2; + string SOUND_DEATH; + string SOUND_EAT; + string SOUND_GETUP; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_IDLE6; + string SOUND_LICK_HIT; + string SOUND_MISS1; + string SOUND_MISS2; + string SOUND_SEARCH1; + string SOUND_SEARCH2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_WARCRY; + + KLarva() + { + IS_UNHOLY = 1; + ANIM_WALK = "walk"; + ANIM_RUN = "runlong"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "diesimple"; + ANIM_FLINCH = "flinch"; + ANIM_IDLE1 = "idle1"; + ANIM_IDLE2 = "idle2"; + ANIM_SEARCH = "idle1"; + ANIM_LICK = "attack1"; + ANIM_CLAW1 = "attack2"; + ANIM_CLAW2 = "attack3"; + ANIM_RUN_FAST = "runshort"; + ANIM_RUN_NORM = "runlong"; + ANIM_VICTORY = "victoryeat1"; + ANIM_VICTORY_LOOP = "eat_loop"; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + ATTACK_MOVERANGE = 50; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 20); + NPC_GIVE_EXP = 150; + CAN_FLINCH = 1; + FLINCH_CHANCE = 90; + FLINCH_HEALTH = 600; + FLINCH_DAMAGE_THRESHOLD = 30; + FLINCH_DELAY = 30.0; + ATTACK_HITCHANCE = 80; + DMG_LICK = RandomInt(20, 40); + DMG_CLAW1 = RandomInt(30, 80); + DMG_CLAW2 = RandomInt(30, 80); + FREQ_IDLE = Random(5, 10); + CHANCE_LICK_STUN = 50; + FREQ_LOOK = 10.0; + SOUND_LICK_HIT = "barnacle/bcl_tongue1.wav"; + SOUND_WARCRY = "barnacle/bcl_alert2.wav"; + SOUND_MISS1 = "zombie/claw_miss1.wav"; + SOUND_MISS2 = "zombie/claw_miss2.wav"; + SOUND_CLAW_HIT1 = "zombie/claw_strike1.wav"; + SOUND_CLAW_HIT2 = "zombie/claw_strike2.wav"; + SOUND_IDLE1 = "bullchicken/bc_idle1.wav"; + SOUND_IDLE2 = "bullchicken/bc_idle3.wav"; + SOUND_IDLE3 = "bullchicken/bc_idle4.wav"; + SOUND_IDLE4 = "bullchicken/bc_idle5.wav"; + SOUND_IDLE5 = "houndeye/he_die2.wav"; + SOUND_IDLE6 = "houndeye/he_die3.wav"; + SOUND_SEARCH1 = "bullchicken/bc_die3.wav"; + SOUND_SEARCH2 = "houndeye/he_alert2.wav"; + SOUND_EAT = "monsters/gonome/gonome_eat.wav"; + SOUND_CRAWL1 = "barnacle/bcl_chew1.wav"; + SOUND_CRAWL2 = "barnacle/bcl_chew2.wav"; + SOUND_ANGRY1 = "agrunt/ag_alert2.wav"; + SOUND_ANGRY2 = "agrunt/ag_alert3.wav"; + SOUND_ANGRY3 = "agrunt/ag_alert4.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_GETUP = "bullchicken/bc_pain4.wav"; + SOUND_DEATH = "agrunt/ag_die2.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_IDLE); + if (m_hAttackTarget != "unset") + { + // PlayRandomSound from: SOUND_ANGRY1, SOUND_ANGRY2, SOUND_ANGRY3 + array sounds = {SOUND_ANGRY1, SOUND_ANGRY2, SOUND_ANGRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (m_hAttackTarget == "unset") + { + } + if ((AM_EATING)) + { + if (GetMonsterHP() < GetMonsterMaxHP()) + { + HealEntity(GetOwner(), 100); + } + EmitSound(GetOwner(), 0, SOUND_EAT, 10); + } + if (!(AM_EATING)) + { + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5, SOUND_IDLE6 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5, SOUND_IDLE6}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + int RND_IDLE = RandomInt(1, 2); + if (RND_IDLE == 1) + { + PlayAnim("critical", ANIM_IDLE1); + } + if (RND_IDLE == 2) + { + PlayAnim("critical", ANIM_IDLE2); + } + } + + void OnSpawn() override + { + larva_spawn(); + } + + void larva_spawn() + { + SetName("Kharaztorant Larva"); + SetModel("monsters/k_larva.mdl"); + SetHealth(800); + SetRace("demon"); + SetWidth(32); + SetHeight(48); + SetRoam(true); + SetHearingSensitivity(6); + } + + void OnPostSpawn() override + { + SetDamageResistance("holy", 1.0); + SetDamageResistance("fire", 0.5); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + + void npcatk_lost_sight() + { + if ((false)) return; + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(SEARCH_DELAY)) + { + SEARCH_DELAY = 1; + FREQ_LOOK("reset_search_delay"); + PlayAnim("once", ANIM_SEARCH); + } + AS_ATTACKING = GetGameTime(); + } + + void reset_search_delay() + { + SEARCH_DELAY = 0; + } + + void my_target_died() + { + PlayAnim("critical", ANIM_VICTORY); + EmitSound(GetOwner(), 0, SOUND_EAT, 10); + SetRoam(false); + SetIdleAnim(ANIM_VICTORY_LOOP); + SetMoveAnim(ANIM_VICTORY_LOOP); + AM_EATING = 1; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + AM_EATING = 0; + } + + void npc_targetsighted() + { + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + AM_EATING = 0; + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + PlayAnim("critical", ANIM_IDLE2); + AS_ATTACKING = GetGameTime(); + } + + void npc_selectattack() + { + int RND_ATK = RandomInt(1, 6); + if (RND_ATK <= 2) + { + ANIM_ATTACK = ANIM_CLAW1; + } + if (RND_ATK > 3) + { + ANIM_ATTACK = ANIM_CLAW2; + } + if (RND_ATK == 6) + { + ANIM_ATTACK = ANIM_LICK; + } + } + + void crawl_step() + { + // PlayRandomSound from: SOUND_CRAWL1, SOUND_CRAWL2 + array sounds = {SOUND_CRAWL1, SOUND_CRAWL2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void attack_lick() + { + ATTACK_TYPE = "attack_lick"; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_LICK, ATTACK_HITCHANCE, "blunt"); + ANIM_ATTACK = ANIM_CLAW1; + } + + void attack_claw1() + { + ATTACK_TYPE = "attack_claw1"; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW1, ATTACK_HITCHANCE, "blunt"); + } + + void attack_claw2() + { + ATTACK_TYPE = "attack_claw2"; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW2, ATTACK_HITCHANCE, "blunt"); + ANIM_ATTACK = ANIM_CLAW1; + } + + void game_dodamage() + { + if (!(param1)) + { + // PlayRandomSound from: SOUND_MISS1, SOUND_MISS2 + array sounds = {SOUND_MISS1, SOUND_MISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (ATTACK_TYPE == "attack_claw1") + { + if ((param1)) + { + } + // PlayRandomSound from: SOUND_CLAW_HIT1, SOUND_CLAW_HIT2 + array sounds = {SOUND_CLAW_HIT1, SOUND_CLAW_HIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (ATTACK_TYPE == "attack_lick") + { + if ((param1)) + { + } + EmitSound(GetOwner(), 0, SOUND_LICK_HIT, 10); + if (RandomInt(1, 100) < CHANCE_LICK_STUN) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(-200, -10, 10)); + LogDebug("temp apply stun"); + ApplyEffect(param2, "effects/dot_poison", Random(3, 5), GetEntityIndex(GetOwner()), 0); + } + if (ATTACK_TYPE == "attack_claw2") + { + if ((param1)) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(-400, -100, 50)); + // PlayRandomSound from: SOUND_CLAW_HIT1, SOUND_CLAW_HIT2 + array sounds = {SOUND_CLAW_HIT1, SOUND_CLAW_HIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + ATTACK_TYPE = "none"; + } + + void OnFlinch() + { + EmitSound(GetOwner(), 0, SOUND_DEATH, 10); + ScheduleDelayedEvent(1.0, "snap_to"); + } + + void snap_to() + { + EmitSound(GetOwner(), 0, SOUND_GETUP, 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_larva_black.as b/scripts/angelscript/monsters/k_larva_black.as new file mode 100644 index 00000000..6b6dc74e --- /dev/null +++ b/scripts/angelscript/monsters/k_larva_black.as @@ -0,0 +1,134 @@ +#pragma context server + +#include "monsters/k_larva.as" + +namespace MS +{ + +class KLarvaBlack : CGameScript +{ + int AM_BARFING; + int AM_EATING; + string ANIM_BARF; + string AS_ATTACKING; + int BARF_BONE; + int BARF_DUR; + string BARF_TARGETS; + string CL_SCRIPT; + int DID_WARCRY; + int DMG_CLAW1; + int DMG_CLAW2; + int DMG_LICK; + int DOT_BARF; + float FREQ_BARF; + int NPC_BASE_EXP; + string SOUND_BARF; + int STARTED_CYCLES; + + KLarvaBlack() + { + NPC_BASE_EXP = 400; + DMG_LICK = RandomInt(40, 80); + DMG_CLAW1 = RandomInt(60, 120); + DMG_CLAW2 = RandomInt(60, 120); + FREQ_BARF = Random(10, 20); + BARF_BONE = 25; + BARF_DUR = 10; + DOT_BARF = 50; + ANIM_BARF = "idle2"; + SOUND_BARF = "monsters/gonome/gonome_eat.wav"; + CL_SCRIPT = "monsters/k_larva_black_cl"; + } + + void game_precache() + { + Precache(CL_SCRIPT); + } + + void larva_spawn() + { + SetName("Black Kharaztorant Larva"); + SetModel("monsters/k_larva_black.mdl"); + SetHealth(1600); + SetRace("demon"); + SetWidth(32); + SetHeight(48); + SetRoam(true); + SetHearingSensitivity(6); + } + + void OnPostSpawn() override + { + SetDamageResistance("holy", 1.0); + SetDamageResistance("poison", 0.5); + SetDamageResistance("cold", 0.5); + SetDamageResistance("fire", 1.0); + SetDamageResistance("lightning", 2.0); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + + void npc_targetsighted() + { + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + AM_EATING = 0; + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + PlayAnim("critical", ANIM_IDLE2); + AS_ATTACKING = GetGameTime(); + if ((STARTED_CYCLES)) return; + STARTED_CYCLES = 1; + FREQ_BARF("do_barf"); + } + + void do_barf() + { + if (!(IsEntityAlive(GetOwner()))) return; + FREQ_BARF("do_barf"); + if (!(IsEntityAlive(m_hAttackTarget))) return; + npcatk_suspend_ai(); + SetRoam(false); + SetIdleAnim(ANIM_BARF); + SetMoveAnim(ANIM_BARF); + EmitSound(GetOwner(), 0, SOUND_BARF, 10); + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner()), BARF_BONE); + AM_BARFING = 1; + barf_scan(); + ScheduleDelayedEvent(4.0, "stop_barfing"); + } + + void stop_barfing() + { + AM_BARFING = 0; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetRoam(true); + npcatk_resume_ai(); + } + + void barf_scan() + { + if (!(AM_BARFING)) return; + ScheduleDelayedEvent(0.5, "barf_scan"); + string BARF_CENTER = GetEntityProperty(GetOwner(), "svbonepos"); + BARF_CENTER += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 64, 0)); + BARF_TARGETS = FindEntitiesInSphere("enemy", 96); + if (!(BARF_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(BARF_TARGETS, ";"); i++) + { + zap_targs(); + } + } + + void zap_targs() + { + string CUR_TARG = GetToken(BARF_TARGETS, i, ";"); + if (!(GetEntityRange(CUR_TARG) < 96)) return; + ApplyEffect(CUR_TARG, "effects/dot_poison_blind", BARF_DUR, GetEntityIndex(GetOwner()), DOT_BARF); + } + +} + +} diff --git a/scripts/angelscript/monsters/k_larva_black_cl.as b/scripts/angelscript/monsters/k_larva_black_cl.as new file mode 100644 index 00000000..35cebe72 --- /dev/null +++ b/scripts/angelscript/monsters/k_larva_black_cl.as @@ -0,0 +1,69 @@ +#pragma context client + +namespace MS +{ + +class KLarvaBlackCl : CGameScript +{ + string BONE_IDX; + int DO_PUKE; + string MY_OWNER; + string PUKE_SPRITE; + int PUKE_SPRITE_FRAMES; + + KLarvaBlackCl() + { + PUKE_SPRITE = "bloodspray.spr"; + PUKE_SPRITE_FRAMES = 10; + Precache(PUKE_SPRITE); + } + + void client_activate() + { + MY_OWNER = param1; + BONE_IDX = param2; + DO_PUKE = 1; + puke_loop(); + ScheduleDelayedEvent(4.0, "end_puke"); + } + + void end_puke() + { + DO_PUKE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void puke_loop() + { + if (!(DO_PUKE)) return; + ScheduleDelayedEvent(0.1, "puke_loop"); + ClientEffect("tempent", "sprite", PUKE_SPRITE, /* TODO: $getcl */ $getcl(MY_OWNER, "bonepos", BONE_IDX), "setup_puke"); + } + + void setup_puke() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", PUKE_SPRITE_FRAMES); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(1.5, 2.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(4, 5)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + string CLOUD_ANG = /* TODO: $getcl */ $getcl(MY_OWNER, "angles.yaw"); + float RND_RL = Random(-10, 10); + float RND_UD = Random(-220, -180); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(-75, CLOUD_ANG, 0), Vector3(RND_RL, 400, RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/khaz_model_test.as b/scripts/angelscript/monsters/khaz_model_test.as new file mode 100644 index 00000000..c3ebb602 --- /dev/null +++ b/scripts/angelscript/monsters/khaz_model_test.as @@ -0,0 +1,35 @@ +#pragma context server + +namespace MS +{ + +class KhazModelTest : CGameScript +{ + void OnSpawn() override + { + SetModel("monsters/khaz.mdl"); + SetInvincible(true); + SetRace("beloved"); + SetSolid("none"); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + } + + void ext_anim() + { + PlayAnim("once", param1); + } + + void npc_suicide() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void ext_faceme() + { + LogDebug("PARAM1 GetEntityName(param1)"); + SetMoveDest(param1); + } + +} + +} diff --git a/scripts/angelscript/monsters/kodiak.as b/scripts/angelscript/monsters/kodiak.as new file mode 100644 index 00000000..ad031916 --- /dev/null +++ b/scripts/angelscript/monsters/kodiak.as @@ -0,0 +1,58 @@ +#pragma context server + +#include "monsters/bear_base_giant.as" + +namespace MS +{ + +class Kodiak : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_NORMAL_DAMAGE; + float ATTACK_STANDING_DAMAGE; + int ATTACK_STOMPDMG; + int ATTACK_STOMPRANGE; + int CAN_FLEE; + int NPC_BASE_EXP; + + Kodiak() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ATTACK_NORMAL_DAMAGE = 50; + ATTACK_STANDING_DAMAGE = Random(18, 33); + ATTACK_STOMPRANGE = 225; + ATTACK_STOMPDMG = 60; + ATTACK_HITCHANCE = 0.7; + NPC_BASE_EXP = 500; + CAN_FLEE = 0; + } + + void OnSpawn() override + { + SetHealth(2000); + SetName("Kodiak"); + SetDamageResistance("fire", 0.5); + SetModelBody(0, 2); + if (StringToLower(GetMapName()) == "bloodrose") + { + GiveItem(GetOwner(), "item_bearclaw"); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + string FINDLE_ID = FindEntityByName("npc_findlebind"); + if (!(IsEntityAlive(FINDLE_ID))) return; + CallExternal(FINDLE_ID, "da_bear_died"); + } + +} + +} diff --git a/scripts/angelscript/monsters/lan_skeleton.as b/scripts/angelscript/monsters/lan_skeleton.as new file mode 100644 index 00000000..772e82ec --- /dev/null +++ b/scripts/angelscript/monsters/lan_skeleton.as @@ -0,0 +1,135 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class LanSkeleton : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int I_AM_TURNABLE; + string MY_ENEMY; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + LanSkeleton() + { + ANIM_RUN = "walk"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + CAN_HUNT = 1; + ANIM_ATTACK = "attack1"; + ATTACK_DAMAGE = 30; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 200; + ATTACK_HITCHANCE = 0.85; + SOUND_STRUCK1 = "controller/con_pain3.wav"; + SOUND_STRUCK2 = "controller/con_pain3.wav"; + SOUND_STRUCK3 = "zombie/zo_pain2.wav"; + SOUND_PAIN = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_DEATH = "controller/con_die2.wav"; + SOUND_IDLE1 = "controller/con_attack3.wav"; + MY_ENEMY = "enemy"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + DROP_GOLD = 1; + DROP_GOLD_MIN = 15; + DROP_GOLD_MAX = 240; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + SetHealth(400); + SetWidth(32); + SetHeight(80); + SetName("Maldora's Minion"); + SetRoam(false); + SetHearingSensitivity(8); + NPC_GIVE_EXP = 125; + SetRace("undead"); + SetModel("monsters/skeleton2.mdl"); + SetModelBody(0, 1); + SetDamageResistance("all", 0.65); + SetDamageResistance("fire", 0.1); + SetDamageResistance("holy", 3.0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + if (RandomInt(0, 1) == 0) + { + SetVolume(5); + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), RandomInt(10, 20)); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ANIM_DEATH = "dieforward"; + int TAUNT_COMMENT = RandomInt(1, 3); + if (TAUNT_COMMENT == 1) + { + SayText("Maldora shall destroy you!"); + } + if (TAUNT_COMMENT == 2) + { + SayText(I + " die - yet Maldora is beyond death... Are you?"); + } + if (TAUNT_COMMENT == 3) + { + SayText("Rest " + I + " will , until my master Maldora returns."); + } + } + + void turn_undead() + { + string INC_HOLY_DMG = param1; + string THE_EXCORCIST = param2; + string ME_ME = GetEntityIndex(GetOwner()); + DoDamage(ME_ME, "direct", INC_HOLY_DMG, 100, THE_EXCORCIST); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 512, 1, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/lanskeleton.as b/scripts/angelscript/monsters/lanskeleton.as new file mode 100644 index 00000000..9972fde4 --- /dev/null +++ b/scripts/angelscript/monsters/lanskeleton.as @@ -0,0 +1,117 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Lanskeleton : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int I_AM_TURNABLE; + string MY_ENEMY; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Lanskeleton() + { + ANIM_RUN = "walk"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + CAN_HUNT = 1; + ANIM_ATTACK = "attack1"; + ATTACK_DAMAGE = 10; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 200; + ANIM_DEATH = "dieheadshot2"; + ATTACK_HITCHANCE = 0.85; + SOUND_STRUCK1 = "controller/con_pain3.wav"; + SOUND_STRUCK2 = "controller/con_pain3.wav"; + SOUND_STRUCK3 = "zombie/zo_pain2.wav"; + SOUND_PAIN = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_DEATH = "controller/con_die2.wav"; + SOUND_IDLE1 = "controller/con_attack3.wav"; + MY_ENEMY = "enemy"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + DROP_GOLD = 1; + DROP_GOLD_MIN = 15; + DROP_GOLD_MAX = 240; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + SetHealth(100); + SetWidth(32); + SetHeight(80); + SetName("A lesser minion of Maldora"); + SetRoam(true); + SetHearingSensitivity(8); + NPC_GIVE_EXP = 50; + SetRace("undead"); + SetModel("monsters/skeleton2.mdl"); + SetModelBody(1, 0); + SetDamageResistance("all", 0.65); + SetDamageResistance("holy", 3.0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 5, GetOwner(), RandomInt(8, 12)); + if (RandomInt(0, 1) == 0) + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ANIM_DEATH = "dieheadshot2"; + if (RandomInt(0, 1) == 0) + { + SayText(I + " have failed my master! They live!"); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/lighted_cl.as b/scripts/angelscript/monsters/lighted_cl.as new file mode 100644 index 00000000..611bb859 --- /dev/null +++ b/scripts/angelscript/monsters/lighted_cl.as @@ -0,0 +1,37 @@ +#pragma context server + +namespace MS +{ + +class LightedCl : CGameScript +{ + string GLOW_COLOR; + string GLOW_RAD; + string SKEL_ID; + string SKEL_LIGHT_ID; + + void client_activate() + { + SKEL_ID = param1; + GLOW_COLOR = param2; + GLOW_RAD = param3; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 1.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 0.5); + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/lightning_worm.as b/scripts/angelscript/monsters/lightning_worm.as new file mode 100644 index 00000000..701022c7 --- /dev/null +++ b/scripts/angelscript/monsters/lightning_worm.as @@ -0,0 +1,313 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_noclip.as" + +namespace MS +{ + +class LightningWorm : CGameScript +{ + int ACTIVE_HORRORS; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_EGG; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BEAM_ATTACK; + string CENTER_POINT; + int DMG_SHOCK; + int DOT_SHOCK; + float FREQ_EGG; + float FREQ_REND; + float FREQ_SHOOT; + float FREQ_SOUND; + int FWD_SPEED; + int HORROR_LIMIT; + int IS_UNHOLY; + int MOVING_CENTER; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + string NPC_NOCLIP_DEST; + string QUARTER_HP; + int ROAM_RADIUS; + string SOUND_CHARGE1; + string SOUND_CHARGE2; + string SOUND_CHARGE3; + string SOUND_EGG; + string SOUND_LOOP1; + string SOUND_LOOP2; + string SOUND_SHOOT1; + string SOUND_SHOOT2; + string SOUND_SHOOT3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + float VERT_RANGE_FULL; + float VERT_RANGE_HALF; + string WORM_TARGET; + + LightningWorm() + { + if (StringToLower(GetMapName()) == "cleicert") + { + NPC_IS_BOSS = 1; + } + NPC_BOSS_REGEN_RATE = 0.05; + NPC_BOSS_RESTORATION = 0.5; + IS_UNHOLY = 1; + ANIM_ATTACK = "treadwater"; + ANIM_EGG = "headshot"; + ANIM_DEATH = "die_simple"; + ATTACK_MOVERANGE = 1; + ANIM_IDLE = "swim"; + ANIM_RUN = "swim"; + ANIM_WALK = "swim"; + NPC_GIVE_EXP = 1500; + SOUND_LOOP1 = "ambience/alien_creeper.wav"; + SOUND_LOOP2 = "ambience/alien_frantic.wav"; + SOUND_STRUCK1 = "bullchicken/bc_bite1.wav"; + SOUND_STRUCK2 = "bullchicken/bc_bite3.wav"; + SOUND_STRUCK3 = "debris/bustflesh2.wav"; + SOUND_EGG = "tentacle/te_roar1.wav"; + SOUND_CHARGE1 = "houndeye/he_attack1.wav"; + SOUND_CHARGE2 = "houndeye/he_attack2.wav"; + SOUND_CHARGE3 = "houndeye/he_attack3.wav"; + SOUND_SHOOT1 = "houndeye/he_blast1.wav"; + SOUND_SHOOT2 = "houndeye/he_blast2.wav"; + SOUND_SHOOT3 = "houndeye/he_blast3.wav"; + DMG_SHOCK = RandomInt(100, 200); + DOT_SHOCK = RandomInt(20, 40); + ROAM_RADIUS = 256; + VERT_RANGE_FULL = Random(-196, 128); + VERT_RANGE_HALF = Random(-196, 0); + ATTACK_RANGE = 2048; + FREQ_SHOOT = Random(5, 10); + FREQ_EGG = Random(30, 60); + FREQ_SOUND = 10.0; + FREQ_REND = 0.5; + Precache("ambience/the_horror1.wav"); + Precache("ambience/the_horror2.wav"); + Precache("ambience/the_horror3.wav"); + Precache("ambience/the_horror4.wav"); + Precache("monsters/egg.mdl"); + Precache("debris/bustflesh1.wav"); + Precache("weapons/g_bounce1.wav"); + Precache("player/pl_fallpain1.wav"); + FWD_SPEED = 10; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_REND); + if (GetMonsterHP() < QUARTER_HP) + { + if (RandomInt(1, 5) == 1) + { + } + Effect("glow", GetOwner(), Vector3(255, 0, 0), 64, 1, 1); + } + if (RandomInt(1, 20) == 1) + { + PlayAnim("critical", "crouch_idle"); + } + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RandomInt(128, 255)); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(FREQ_SOUND); + // svplaysound: svplaysound 2 0 null.wav + EmitSound(2, 0, "null.wav"); + ScheduleDelayedEvent(0.1, "loop_sound"); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(FREQ_SHOOT); + if ((IsEntityAlive(WORM_TARGET))) + { + } + // PlayRandomSound from: SOUND_CHARGE1, SOUND_CHARGE2, SOUND_CHARGE3 + array sounds = {SOUND_CHARGE1, SOUND_CHARGE2, SOUND_CHARGE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + float SHOOT_DELAY = Random(1.5, 2); + PlayAnim("critical", ANIM_ATTACK); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 128, 5, 5); + SHOOT_DELAY("do_lightning"); + } + + void OnRepeatTimer_3() + { + SetRepeatDelay(FREQ_EGG); + if (ACTIVE_HORRORS < HORROR_LIMIT) + { + } + PlayAnim("critical", ANIM_EGG); + EmitSound(GetOwner(), 0, SOUND_EGG, 10); + ScheduleDelayedEvent(0.5, "lay_egg"); + } + + void OnSpawn() override + { + SetName("Ethereal Vermicular"); + SetRace("demon"); + SetHealth(4000); + SetModel("monsters/weird_worm.mdl"); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("holy", 1.0); + SetBloodType("green"); + SetFly(true); + SetWidth(72); + SetHeight(72); + SetMoveAnim("swim"); + SetIdleAnim("swim"); + ACTIVE_HORRORS = 0; + npcatk_suspend_ai(); + ScheduleDelayedEvent(0.1, "set_centerpoint"); + } + + void set_centerpoint() + { + CENTER_POINT = GetMonsterProperty("origin"); + CENTER_POINT += "z"; + } + + void OnHuntTarget(CBaseEntity@ target) + { + } + + void OnPostSpawn() override + { + loop_sound(); + npcatk_suspend_ai(); + QUARTER_HP = GetMonsterMaxHP(); + QUARTER_HP *= 0.25; + SetMoveDest(CENTER_POINT); + MOVING_CENTER = 1; + HORROR_LIMIT = 4; + if ("game.players.totalhp" > 1600) + { + HORROR_LIMIT += 1; + } + if ("game.players.totalhp" > 3200) + { + HORROR_LIMIT += 1; + } + } + + void loop_sound() + { + if (GetMonsterHP() > QUARTER_HP) + { + // svplaysound: if ( game.monster.hp > QUARTER_HP ) svplaysound 2 10 SOUND_LOOP1 + EmitSound(2, 10, SOUND_LOOP1); + } + if (GetMonsterHP() < QUARTER_HP) + { + // svplaysound: if ( game.monster.hp < QUARTER_HP ) svplaysound 2 10 SOUND_LOOP2 + EmitSound(2, 10, SOUND_LOOP2); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + WORM_TARGET = GetEntityIndex(m_hLastStruck); + } + + void do_lightning() + { + // PlayRandomSound from: SOUND_SHOOT1, SOUND_SHOOT2, SOUND_SHOOT3 + array sounds = {SOUND_SHOOT1, SOUND_SHOOT2, SOUND_SHOOT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + BEAM_ATTACK = 1; + DoDamage(WORM_TARGET, ATTACK_RANGE, DMG_SHOCK, 1.0, "lightning"); + } + + void game_dodamage() + { + if (!(param1)) + { + if ((BEAM_ATTACK)) + { + } + BEAM_ATTACK = 0; + if (!(IsEntityAlive(param2))) + { + } + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = GetEntityOrigin(WORM_TARGET); + string TRACE_IT = TraceLine(TRACE_START, TRACE_END); + Effect("beam", "point", "lgtning.spr", 60, TRACE_START, TRACE_IT, Vector3(255, 255, 50), 200, 60, 1.0); + } + if (!(param1)) return; + if (!(BEAM_ATTACK)) return; + BEAM_ATTACK = 0; + ApplyEffect(param2, "effects/dot_lightning", 5, GetEntityIndex(GetOwner()), DOT_SHOCK); + string L_BEAM_START = GetEntityOrigin(GetOwner()); + string L_BEAM_END = GetEntityOrigin(WORM_TARGET); + Effect("beam", "point", "lgtning.spr", 60, L_BEAM_START, L_BEAM_END, Vector3(255, 255, 50), 200, 60, 1.0); + } + + void lay_egg() + { + if (!(IsInWater(GetOwner()) == 0)) return; + SpawnNPC("monsters/summon/horror_egg_lightning", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + ACTIVE_HORRORS += 1; + } + + void basenoclip_flight() + { + LogDebug("temp dist Distance(GetMonsterProperty("origin"), CENTER_POINT) MOVING_CENTER"); + if ((MOVING_CENTER)) + { + NPC_NOCLIP_DEST = CENTER_POINT; + if (Distance(GetMonsterProperty("origin"), NPC_NOCLIP_DEST) < 96) + { + } + MOVING_CENTER = 0; + } + if ((MOVING_CENTER)) return; + if (Distance(GetMonsterProperty("origin"), NPC_NOCLIP_DEST) < 96) + { + DEST_ROT += 45; + if (DEST_ROT > 359) + { + DEST_ROT -= 359; + } + NPC_NOCLIP_DEST = CENTER_POINT; + string L_VERT_RANGE = VERT_RANGE_FULL; + if (RandomInt(1, 2) == 1) + { + string L_VERT_RANGE = VERT_RANGE_HALF; + } + NPC_NOCLIP_DEST += /* TODO: $relpos */ $relpos(Vector3(0, DEST_ROT, 0), Vector3(0, ROAM_RADIUS, L_VERT_RANGE)); + } + } + + void horror_died() + { + ACTIVE_HORRORS -= 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(GAME_MASTER, "gm_worm_gold", GetEntityIndex(GetOwner()), "chests/bag_o_gold_50"); + // svplaysound: svplaysound 2 0 null.wav + EmitSound(2, 0, "null.wav"); + SetProp(GetOwner(), "movetype", "const.movetype.bounce"); + SetVelocity(GetOwner(), Vector3(-110, 110, 110)); + } + +} + +} diff --git a/scripts/angelscript/monsters/lost_soul.as b/scripts/angelscript/monsters/lost_soul.as new file mode 100644 index 00000000..85f746ea --- /dev/null +++ b/scripts/angelscript/monsters/lost_soul.as @@ -0,0 +1,197 @@ +#pragma context server + +#include "monsters/eagle_base.as" + +namespace MS +{ + +class LostSoul : CGameScript +{ + int AM_DEAD; + int AM_SUMMONED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int COUNT_ATK; + int DEATH_ATTACK; + string DEATH_TIME; + float DMG_ATTACK; + int DMG_POISON; + int DMG_SPLODIE; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int MONSTER_HP; + string MY_OWNER; + int NO_DIVE; + int NPC_GIVE_EXP; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_PAIN; + string SOUND_PAIN2; + string SOUND_STRUCK; + string SOUND_VICTORY; + string SOUND_WARCRY; + + LostSoul() + { + IS_UNHOLY = 1; + IMMUNE_VAMPIRE = 1; + NO_DIVE = 1; + DMG_ATTACK = Random(10, 40); + NPC_GIVE_EXP = 100; + MONSTER_HP = 300; + SOUND_WARCRY = "controller/con_pain3.wav"; + SOUND_DEATH = "controller/con_die1.wav"; + SOUND_ATTACK = "controller/con_pain2.wav"; + SOUND_STRUCK = "debris/flesh2.wav"; + SOUND_PAIN = "controller/con_pain1.wav"; + SOUND_PAIN2 = "controller/con_die2.wav"; + SOUND_VICTORY = "controller/con_die2.wav"; + DMG_SPLODIE = 100; + DMG_POISON = 25; + ANIM_IDLE = "idle"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "idle"; + ANIM_WALK = "idle"; + ANIM_RUN = "idle"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.1, 1.0)); + if (m_hAttackTarget == "unset") + { + } + AddVelocity(GetOwner(), /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(Random(-100, 100), 0, 0))); + } + + void OnSpawn() override + { + skull_spawn(); + } + + void skull_spawn() + { + SetName("Lost Soul"); + SetRace("demon"); + if (MONSTER_HP == "MONSTER_HP") + { + SetHealth(300); + } + else + { + SetHealth(MONSTER_HP); + } + SetBloodType("green"); + SetWidth(16); + SetHeight(16); + SetModel("monsters/skull.mdl"); + SetIdleAnim("idle"); + SetMoveAnim("idle"); + SetHearingSensitivity(11); + SetRoam(true); + SetFly(true); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 4.0); + IMMUNE_VAMPIRE = 1; + COUNT_ATK = 0; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + SetRace(GetEntityRace(MY_OWNER)); + AM_SUMMONED = 1; + MONSTER_HP = 300; + SetMonsterClip(0); + if (GetEntityRace(MY_OWNER) == 0) + { + SetRace("demon"); + } + if (param2 != "PARAM2") + { + SetDamageMultiplier(param2); + MONSTER_HP *= param2; + } + SetHealth(MONSTER_HP); + if (!(param3 != "PARAM3")) return; + string GO_BOOM = param3; + GO_BOOM("self_destruct"); + } + + void self_destruct() + { + npc_suicide(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + skull_death(); + } + + void skull_death() + { + DEATH_TIME = GetGameTime(); + AM_DEAD = 1; + DEATH_TIME += 0.2; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + string SPLODE_POS = /* TODO: $relpos */ $relpos(0, 0, 0); + ClientEvent("new", "all", "effects/sfx_splodie", SPLODE_POS, Vector3(0, 255, 0)); + DEATH_ATTACK = 1; + XDoDamage(SPLODE_POS, 128, DMG_SPLODE, 0, GetOwner(), GetOwner(), "none", "blunt"); + } + + void attack1() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK, 5); + DoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, DMG_ATTACK, 0.9, "slash"); + COUNT_ATK += 1; + if (COUNT_ATK > FLEE_COUNT) + { + COUNT_ATK = 0; + npcatk_suspend_ai(3.0); + SetMoveDest(HUNT_LASTTARGET); + } + } + + void game_dodamage() + { + if ((CUSTOM_DAMAGE)) return; + if ((DEATH_ATTACK)) + { + if (GetGameTime() < DEATH_TIME) + { + } + if ((IsEntityAlive(param2))) + { + } + if (GetRelationship(param2) == "enemy") + { + } + string TARGET_ORG = GetEntityOrigin(param2); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + ApplyEffect(param2, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DMG_POISON); + } + else + { + if ((param1)) + { + } + if ((IsEntityAlive(GetOwner()))) + { + } + if ((IsEntityAlive(param2))) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(20, 200, 10)); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/lost_soul_ice.as b/scripts/angelscript/monsters/lost_soul_ice.as new file mode 100644 index 00000000..0491a076 --- /dev/null +++ b/scripts/angelscript/monsters/lost_soul_ice.as @@ -0,0 +1,132 @@ +#pragma context server + +#include "monsters/lost_soul.as" + +namespace MS +{ + +class LostSoulIce : CGameScript +{ + int AM_DEAD; + int AM_SUMMONED; + int COUNT_ATK; + int CUSTOM_DAMAGE; + int DEATH_ATTACK; + string DEATH_TIME; + int DMG_SPLODIE; + int DOT_COLD; + int IMMUNE_VAMPIRE; + int MONSTER_HP; + string MY_OWNER; + int NO_DIVE; + + LostSoulIce() + { + MONSTER_HP = 500; + DMG_SPLODIE = 200; + DOT_COLD = 30; + CUSTOM_DAMAGE = 1; + NO_DIVE = 1; + } + + void skull_spawn() + { + SetName("Lost Soul"); + SetRace("demon"); + if (MONSTER_HP == "MONSTER_HP") + { + SetHealth(300); + } + else + { + SetHealth(MONSTER_HP); + } + SetBloodType("none"); + SetWidth(16); + SetHeight(16); + SetModel("monsters/skull.mdl"); + SetIdleAnim("idle"); + SetMoveAnim("idle"); + SetHearingSensitivity(11); + SetRoam(true); + SetFly(true); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 4.0); + SetDamageResistance("cold", 0.0); + IMMUNE_VAMPIRE = 1; + COUNT_ATK = 0; + SetProp(GetOwner(), "skin", 1); + } + + void skull_death() + { + DEATH_TIME = GetGameTime(); + AM_DEAD = 1; + DEATH_TIME += 0.2; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + string SPLODE_POS = /* TODO: $relpos */ $relpos(0, 0, 0); + ClientEvent("new", "all", "effects/sfx_splodie", SPLODE_POS, Vector3(128, 128, 255)); + DEATH_ATTACK = 1; + XDoDamage(SPLODE_POS, 128, DMG_SPLODE, 0, GetOwner(), GetOwner(), "none", "blunt"); + } + + void game_dodamage() + { + if ((DEATH_ATTACK)) + { + if (GetGameTime() < DEATH_TIME) + { + } + if ((IsEntityAlive(param2))) + { + } + if (GetRelationship(param2) == "enemy") + { + } + string TARGET_ORG = GetEntityOrigin(param2); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_COLD); + } + else + { + if ((param1)) + { + } + if ((IsEntityAlive(GetOwner()))) + { + } + if ((IsEntityAlive(param2))) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(20, 200, 10)); + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_COLD); + } + } + + void game_dynamically_created() + { + MY_OWNER = param1; + SetRace(GetEntityRace(MY_OWNER)); + AM_SUMMONED = 1; + SetMonsterClip(0); + if (GetEntityRace(MY_OWNER) == 0) + { + SetRace("demon"); + } + if (param2 != "PARAM2") + { + SetDamageMultiplier(param2); + MONSTER_HP *= param2; + } + SetHealth(MONSTER_HP); + if (!(param3 != "PARAM3")) return; + string GO_BOOM = param3; + GO_BOOM("self_destruct"); + } + +} + +} diff --git a/scripts/angelscript/monsters/lslime.as b/scripts/angelscript/monsters/lslime.as new file mode 100644 index 00000000..fb81a7c3 --- /dev/null +++ b/scripts/angelscript/monsters/lslime.as @@ -0,0 +1,131 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Lslime : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + float FLEE_CHANCE; + string LIGHTNING_SPRITE; + int MOVE_RANGE; + string MY_ENEMY; + int NPC_GIVE_EXP; + float RETALIATE_CHANGETARGET_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Lslime() + { + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_ATTACK1 = "weapons/electro4.wav"; + SOUND_ATTACK2 = "weapons/electro5.wav"; + SOUND_ATTACK3 = "weapons/electro6.wav"; + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_IDLE1 = "weapons/gauss2.wav"; + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 150; + ATTACK_RANGE = 200; + ATTACK_HITRANGE = 230; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE = 10; + FLEE_CHANCE = 0.25; + MY_ENEMY = "enemy"; + RETALIATE_CHANGETARGET_CHANCE = 0.75; + CAN_FLEE = 0; + LIGHTNING_SPRITE = "lgtning.spr"; + Precache(SOUND_DEATH); + Precache(SOUND_ATTACK1); + Precache(SOUND_ATTACK2); + Precache(SOUND_ATTACK3); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + if (RandomInt(0, 1) == 0) + { + } + EmitSound(GetOwner(), CHAN_VOICE, SOUND_IDLE1, 5); + } + + void OnSpawn() override + { + SetHealth(15); + SetWidth(40); + SetHeight(64); + SetRace("wildanimal"); + SetName("Electrified slime"); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetHearingSensitivity(4); + NPC_GIVE_EXP = 20; + SetBloodType("green"); + SetDamageResistance("lightning", 0.0); + SetModel("monsters/slime.mdl"); + SetModelBody(0, 4); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetActionAnim(ANIM_ATTACK); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 64, -1, 0); + } + + void bite1() + { + if (!(false)) return; + XDoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "lightning", "dmgevent:bite"); + } + + void bite_dodamage() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + Effect("beam", "point", LIGHTNING_SPRITE, 30, /* TODO: $relpos */ $relpos(0, 0, -22), param4, Vector3(255, 255, 0), 150, 50, 0.2); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void cycle_up() + { + if (!(ME_NO_WANDER)) return; + SetRoam(true); + } + +} + +} diff --git a/scripts/angelscript/monsters/lslime_nr.as b/scripts/angelscript/monsters/lslime_nr.as new file mode 100644 index 00000000..5da7bcd9 --- /dev/null +++ b/scripts/angelscript/monsters/lslime_nr.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "monsters/lslime.as" + +namespace MS +{ + +class LslimeNr : CGameScript +{ + int HEAR_RANGE_MAX; + int HEAR_RANGE_PLAYER; + int ME_NO_WANDER; + + LslimeNr() + { + ME_NO_WANDER = 1; + HEAR_RANGE_PLAYER = 200; + HEAR_RANGE_MAX = 200; + } + +} + +} diff --git a/scripts/angelscript/monsters/lumbering_dead.as b/scripts/angelscript/monsters/lumbering_dead.as new file mode 100644 index 00000000..661fb9b9 --- /dev/null +++ b/scripts/angelscript/monsters/lumbering_dead.as @@ -0,0 +1,434 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class LumberingDead : CGameScript +{ + string ANIM_ATTACK; + string ANIM_CHEW; + string ANIM_DANCE; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_EAT_LOOP; + string ANIM_FLINCH_CUSTOM; + string ANIM_IDLE; + string ANIM_IDLE_DEF; + string ANIM_JUMP; + string ANIM_LOOK; + string ANIM_RUN; + string ANIM_RUN1; + string ANIM_RUN2; + string ANIM_SLASH; + string ANIM_THROW; + string ANIM_VICTORY; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DID_ALERT; + int DMG_CHEW; + int DMG_GLOB; + int DMG_SLASH; + string EAT_MODE; + string FLINCH_CUSTOM_HEALTH; + float FREQ_CHEW; + float FREQ_THROW; + int GLOB_EFFECT_DOT; + float GLOB_EFFECT_DUR; + string GLOB_EFFECT_TYPE; + int IMMUNE_VAMPIRE; + int MOVE_RANGE; + string NEXT_CHEW; + string NEXT_CUSTOM_FLINCH; + string NEXT_IDLE_SOUND; + string NEXT_LOOK; + string NEXT_THROW; + string NO_STUCK_CHECKS; + string NPC_ALT_SOUND_DEATH; + int NPC_GIVE_EXP; + string NPC_TARG_POS; + string NPC_TARG_RANGE; + int SLASH_ATTACK; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_ATTACK_START; + string SOUND_CHEW1; + string SOUND_CHEW2; + string SOUND_CHEW3; + string SOUND_CHEW_START; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_IDLE; + string SOUND_SLASH_HIT1; + string SOUND_SLASH_HIT2; + string SOUND_SLASH_HIT3; + string SOUND_SLASH_MISS1; + string SOUND_SLASH_MISS2; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_THROW; + + LumberingDead() + { + ANIM_SLASH = "attack1"; + ANIM_CHEW = "attack2"; + ANIM_THROW = "attack3"; + ANIM_JUMP = "jump1"; + ANIM_DEATH = "diebackward"; + ANIM_DEATH1 = "diebackward"; + ANIM_DEATH2 = "dieforward"; + ANIM_DEATH3 = "dieheadshot_1"; + ANIM_DEATH4 = "dieheadshot_2"; + ANIM_FLINCH_CUSTOM = "big_flinch"; + ANIM_DANCE = "sohappy"; + ANIM_RUN1 = "runlong"; + ANIM_RUN2 = "runshort"; + ANIM_LOOK = "idle1"; + ANIM_IDLE_DEF = "idle2"; + ANIM_EAT_LOOP = "eat_loop"; + ANIM_VICTORY = "victoryeat1"; + ANIM_WALK = "walk"; + ANIM_RUN = "runlong"; + ANIM_IDLE = "idle2"; + NPC_GIVE_EXP = 1000; + ATTACK_RANGE = 64; + MOVE_RANGE = 48; + ATTACK_MOVERANGE = 48; + ANIM_ATTACK = "attack1"; + DMG_SLASH = 200; + DMG_CHEW = 100; + DMG_GLOB = 400; + GLOB_EFFECT_TYPE = "effects/dot_acid"; + GLOB_EFFECT_DOT = 50; + GLOB_EFFECT_DUR = 5.0; + FREQ_CHEW = Random(20.0, 30.0); + FREQ_THROW = Random(10.0, 20.0); + SOUND_ATTACK_START = "monsters/undeadz/c_golmbone_atk1.wav"; + SOUND_SLASH_MISS1 = "zombie/claw_miss1.wav"; + SOUND_SLASH_MISS2 = "zombie/claw_miss2.wav"; + SOUND_SLASH_HIT1 = "zombie/claw_strike1.wav"; + SOUND_SLASH_HIT2 = "zombie/claw_strike2.wav"; + SOUND_SLASH_HIT3 = "zombie/claw_strike3.wav"; + SOUND_THROW = "zombie/claw_miss1.wav"; + SOUND_STEP1 = "common/npc_step1.wav"; + SOUND_STEP2 = "common/npc_step2.wav"; + SOUND_IDLE = "monsters/undeadz/c_skeltchf_bat1.wav"; + SOUND_THROW = "monsters/undeadz/c_hookhorr_atk1.wav"; + SOUND_ALERT1 = "monsters/undeadz/c_golmbone_bat1.wav"; + SOUND_ALERT2 = "monsters/undeadz/c_golmbone_slct.wav"; + SOUND_ALERT3 = "monsters/undeadz/c_hookhorr_bat1.wav"; + SOUND_FLINCH1 = "monsters/undeadz/c_golmbone_hit1.wav"; + SOUND_FLINCH2 = "monsters/undeadz/c_hookhorr_slct.wav"; + SOUND_CHEW_START = "monsters/undeadz/c_hookhorr_atk1.wav"; + SOUND_CHEW1 = "monsters/undeadz/c_skeleton_atk1.wav"; + SOUND_CHEW2 = "monsters/undeadz/c_skeleton_atk2.wav"; + SOUND_CHEW3 = "monsters/undeadz/c_skeleton_atk3.wav"; + SOUND_DEATH1 = "monsters/undeadz/c_golmbone_dead.wav"; + SOUND_DEATH2 = "monsters/undeadz/c_hookhorr_dead.wav"; + NPC_ALT_SOUND_DEATH = SOUND_DEATH1; + } + + void game_precache() + { + Precache(SOUND_DEATH1); + Precache(SOUND_DEATH2); + Precache("monsters/skullcrab"); + Precache("xfireball3.spr"); + } + + void OnSpawn() override + { + SetName("Lumbering Dead"); + SetHealth(4000); + SetRace("undead"); + SetModel("monsters/lumbering.mdl"); + SetWidth(32); + SetHeight(96); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetHearingSensitivity(4); + SetRoam(true); + SetDamageResistance("all", 0.75); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.5); + SetDamageResistance("holy", 1.5); + SetDamageResistance("slash", 1.0); + SetDamageResistance("blunt", 1.5); + SetDamageResistance("pierce", 0.5); + IMMUNE_VAMPIRE = 1; + ScheduleDelayedEvent(2.0, "finalize_npc"); + } + + void finalize_npc() + { + FLINCH_CUSTOM_HEALTH = GetEntityMaxHealth(GetOwner()); + FLINCH_CUSTOM_HEALTH *= 0.3; + } + + void npc_targetsighted() + { + float GAME_TIME = GetGameTime(); + if ((EAT_MODE)) + { + EAT_MODE = 0; + SetIdleAnim(ANIM_IDLE); + NO_STUCK_CHECKS = 0; + SetRoam(true); + NEXT_THROW = GAME_TIME; + NEXT_THROW += 5.0; + } + if (m_hAttackTarget != "unset") + { + if (GetGameTime() > NEXT_THROW) + { + } + if (GetEntityRange(m_hAttackTarget) > 128) + { + } + AS_ATTACKING = GAME_TIME; + AS_ATTACKING += 5.0; + NEXT_THROW = GAME_TIME; + NEXT_THROW += 5.0; + PlayAnim("critical", ANIM_THROW); + } + if ((DID_ALERT)) return; + DID_ALERT = 1; + NEXT_THROW = GAME_TIME; + NEXT_THROW += FREQ_THROW; + AS_ATTACKING = GAME_TIME; + AS_ATTACKING += 5.0; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + float GAME_TIME = GetGameTime(); + if (m_hAttackTarget == "unset") + { + if (GAME_TIME > NEXT_IDLE_SOUND) + { + } + NEXT_IDLE_SOUND = GAME_TIME; + NEXT_IDLE_SOUND += Random(10.0, 20.0); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + PlayAnim("once", ANIM_LOOK); + } + if (!(m_hAttackTarget != "unset")) return; + if (GetEntityRange(m_hAttackTarget) > 200) + { + ANIM_RUN = ANIM_RUN1; + SetMoveAnim(ANIM_RUN1); + } + else + { + ANIM_RUN = ANIM_RUN2; + SetMoveAnim(ANIM_RUN2); + } + if (GetEntityRange(m_hAttackTarget) < 48) + { + if (GAME_TIME > NEXT_CHEW) + { + } + NEXT_CHEW = GAME_TIME; + NEXT_CHEW += FREQ_CHEW; + PlayAnim("critical", ANIM_CHEW); + } + } + + void npcatk_lost_sight() + { + if (!(GetGameTime() > NEXT_LOOK)) return; + NEXT_LOOK = GetGameTime(); + NEXT_LOOK += 20.0; + AS_ATTACKING = GAME_TIME; + AS_ATTACKING += 5.0; + PlayAnim("once", ANIM_LOOK); + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_attack_start() + { + if (!(RandomInt(1, 3) == 1)) return; + EmitSound(GetOwner(), 0, SOUND_ATTACK_START, 10); + } + + void frame_attack() + { + SLASH_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SLASH, 0.8, "slash"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RND_DEATH_SND = RandomInt(1, 2); + int RND_DEATH_ANIM = RandomInt(1, 3); + if (RND_DEATH_SND == 1) + { + NPC_ALT_SOUND_DEATH = SOUND_DEATH1; + } + if (RND_DEATH_SND == 2) + { + NPC_ALT_SOUND_DEATH = SOUND_DEATH2; + } + if (RND_DEATH_ANIM == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RND_DEATH_ANIM == 2) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (RND_DEATH_ANIM == 3) + { + ANIM_DEATH = ANIM_DEATH4; + } + } + + void game_dodamage() + { + if ((EAT_MODE)) + { + EAT_MODE = 0; + SetIdleAnim(ANIM_IDLE); + NO_STUCK_CHECKS = 0; + SetRoam(true); + } + NPC_TARG_RANGE = GetEntityRange(m_hAttackTarget); + NPC_TARG_POS = GetEntityOrigin(m_hAttackTarget); + if ((param1)) + { + // PlayRandomSound from: SOUND_SLASH_HIT1, SOUND_SLASH_HIT2, SOUND_SLASH_HIT3 + array sounds = {SOUND_SLASH_HIT1, SOUND_SLASH_HIT2, SOUND_SLASH_HIT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + AddVelocity(param2, /* TODO: $relvel */ $relvel(Random(-100, 100), Random(100, 200), 100)); + } + else + { + // PlayRandomSound from: SOUND_SLASH_MISS1, SOUND_SLASH_MISS2 + array sounds = {SOUND_SLASH_MISS1, SOUND_SLASH_MISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + SLASH_ATTACK = 0; + } + + void OnDamage(int damage) override + { + if (!(GetEntityHealth(GetOwner()) < FLINCH_CUSTOM_HEALTH)) return; + if (!(GetGameTime() > NEXT_CUSTOM_FLINCH)) return; + NEXT_CUSTOM_FLINCH = GetGameTime(); + NEXT_CUSTOM_FLINCH += 20.0; + // PlayRandomSound from: SOUND_FLINCH1, SOUND_FLINCH2 + array sounds = {SOUND_FLINCH1, SOUND_FLINCH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_FLINCH_CUSTOM); + } + + void my_target_died() + { + if (!(NPC_TARG_RANGE < 200)) return; + PlayAnim("once", ANIM_VICTORY); + SetIdleAnim(ANIM_EAT_LOOP); + string FACE_POS = GetEntityOrigin(GetOwner()); + string MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + SetRoam(false); + EAT_MODE = 1; + SetMoveDest(NPC_TARG_POS); + NO_STUCK_CHECKS = 1; + } + + void frame_walk1() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 5); + } + + void frame_walk2() + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 5); + } + + void frame_run1() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 10); + } + + void frame_run2() + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 10); + } + + void frame_chewface_start() + { + EmitSound(GetOwner(), 0, SOUND_CHEW_START, 10); + if (GetEntityRange(m_hAttackTarget) < 64) + { + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, -300, 0)); + } + } + + void frame_chewface() + { + // PlayRandomSound from: SOUND_CHEW1, SOUND_CHEW2, SOUND_CHEW3 + array sounds = {SOUND_CHEW1, SOUND_CHEW2, SOUND_CHEW3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, -300, 0)); + DoDamage(m_hAttackTarget, 64, DMG_CHEW, 0.9, "pierce"); + } + + void crab_died() + { + N_CRABS -= 1; + } + + void frame_grab_crab() + { + if (!(N_CRABS < 2)) return; + SetModelBody(1, 1); + } + + void frame_toss_crab() + { + NEXT_THROW = GetGameTime(); + NEXT_THROW += FREQ_THROW; + EmitSound(GetOwner(), 0, SOUND_THROW, 10); + if (N_CRABS < 2) + { + N_CRABS += 1; + SpawnNPC("monsters/skullcrab", /* TODO: $relpos */ $relpos(-20, 20, 75), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), m_hAttackTarget + } + else + { + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (!(IsValidPlayer(TARG_ORG))) + { + TARG_ORG += "z"; + } + float TARG_DIST = Distance(TARG_ORG, GetMonsterProperty("origin")); + TARG_DIST /= 35; + SetAngles("add_view.pitch"); + int BOMB_SPEED = 600; + if (GetEntityRange(m_hAttackTarget) > 800) + { + int BOMB_SPEED = 800; + } + NEXT_THROW = GetGameTime(); + NEXT_THROW += 5.0; + TossProjectile("proj_glob", /* TODO: $relpos */ $relpos(-10, 0, 27), "none", BOMB_SPEED, DMG_GLOB, 0.1, "none"); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/lure.as b/scripts/angelscript/monsters/lure.as new file mode 100644 index 00000000..21055ffb --- /dev/null +++ b/scripts/angelscript/monsters/lure.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/lure_1000hp.as b/scripts/angelscript/monsters/lure_1000hp.as new file mode 100644 index 00000000..2258ec7e --- /dev/null +++ b/scripts/angelscript/monsters/lure_1000hp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure1000hp : CGameScript +{ + void OnSpawn() override + { + SetHealth(1000); + } + +} + +} diff --git a/scripts/angelscript/monsters/lure_100hp.as b/scripts/angelscript/monsters/lure_100hp.as new file mode 100644 index 00000000..bc9c8101 --- /dev/null +++ b/scripts/angelscript/monsters/lure_100hp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure100hp : CGameScript +{ + void OnSpawn() override + { + SetHealth(100); + } + +} + +} diff --git a/scripts/angelscript/monsters/lure_150hp.as b/scripts/angelscript/monsters/lure_150hp.as new file mode 100644 index 00000000..949e9dc7 --- /dev/null +++ b/scripts/angelscript/monsters/lure_150hp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure150hp : CGameScript +{ + void OnSpawn() override + { + SetHealth(150); + } + +} + +} diff --git a/scripts/angelscript/monsters/lure_200hp.as b/scripts/angelscript/monsters/lure_200hp.as new file mode 100644 index 00000000..e3ebe3be --- /dev/null +++ b/scripts/angelscript/monsters/lure_200hp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure200hp : CGameScript +{ + void OnSpawn() override + { + SetHealth(200); + } + +} + +} diff --git a/scripts/angelscript/monsters/lure_250hp.as b/scripts/angelscript/monsters/lure_250hp.as new file mode 100644 index 00000000..fed3006f --- /dev/null +++ b/scripts/angelscript/monsters/lure_250hp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure250hp : CGameScript +{ + void OnSpawn() override + { + SetHealth(250); + } + +} + +} diff --git a/scripts/angelscript/monsters/lure_25hp.as b/scripts/angelscript/monsters/lure_25hp.as new file mode 100644 index 00000000..334e83e0 --- /dev/null +++ b/scripts/angelscript/monsters/lure_25hp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure25hp : CGameScript +{ + void OnSpawn() override + { + SetHealth(25); + } + +} + +} diff --git a/scripts/angelscript/monsters/lure_300hp.as b/scripts/angelscript/monsters/lure_300hp.as new file mode 100644 index 00000000..1d842de0 --- /dev/null +++ b/scripts/angelscript/monsters/lure_300hp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure300hp : CGameScript +{ + void OnSpawn() override + { + SetHealth(300); + } + +} + +} diff --git a/scripts/angelscript/monsters/lure_500hp.as b/scripts/angelscript/monsters/lure_500hp.as new file mode 100644 index 00000000..c0aea84d --- /dev/null +++ b/scripts/angelscript/monsters/lure_500hp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure500hp : CGameScript +{ + void OnSpawn() override + { + SetHealth(500); + } + +} + +} diff --git a/scripts/angelscript/monsters/lure_50hp.as b/scripts/angelscript/monsters/lure_50hp.as new file mode 100644 index 00000000..124eceb6 --- /dev/null +++ b/scripts/angelscript/monsters/lure_50hp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure50hp : CGameScript +{ + void OnSpawn() override + { + SetHealth(50); + } + +} + +} diff --git a/scripts/angelscript/monsters/lure_750hp.as b/scripts/angelscript/monsters/lure_750hp.as new file mode 100644 index 00000000..f6288075 --- /dev/null +++ b/scripts/angelscript/monsters/lure_750hp.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "other/lure.as" + +namespace MS +{ + +class Lure750hp : CGameScript +{ + void OnSpawn() override + { + SetHealth(750); + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_gminion_fire.as b/scripts/angelscript/monsters/maldora_gminion_fire.as new file mode 100644 index 00000000..1e1a1370 --- /dev/null +++ b/scripts/angelscript/monsters/maldora_gminion_fire.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/maldora_gminion_random.as" + +namespace MS +{ + +class MaldoraGminionFire : CGameScript +{ + int MINION_TYPE; + + MaldoraGminionFire() + { + MINION_TYPE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_gminion_ice.as b/scripts/angelscript/monsters/maldora_gminion_ice.as new file mode 100644 index 00000000..069ae213 --- /dev/null +++ b/scripts/angelscript/monsters/maldora_gminion_ice.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/maldora_gminion_random.as" + +namespace MS +{ + +class MaldoraGminionIce : CGameScript +{ + int MINION_TYPE; + + MaldoraGminionIce() + { + MINION_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_gminion_lightning.as b/scripts/angelscript/monsters/maldora_gminion_lightning.as new file mode 100644 index 00000000..7b67b583 --- /dev/null +++ b/scripts/angelscript/monsters/maldora_gminion_lightning.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/maldora_gminion_random.as" + +namespace MS +{ + +class MaldoraGminionLightning : CGameScript +{ + int MINION_TYPE; + + MaldoraGminionLightning() + { + MINION_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_gminion_poison.as b/scripts/angelscript/monsters/maldora_gminion_poison.as new file mode 100644 index 00000000..3af25de4 --- /dev/null +++ b/scripts/angelscript/monsters/maldora_gminion_poison.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/maldora_gminion_random.as" + +namespace MS +{ + +class MaldoraGminionPoison : CGameScript +{ + int MINION_TYPE; + + MaldoraGminionPoison() + { + MINION_TYPE = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_gminion_random.as b/scripts/angelscript/monsters/maldora_gminion_random.as new file mode 100644 index 00000000..413691fb --- /dev/null +++ b/scripts/angelscript/monsters/maldora_gminion_random.as @@ -0,0 +1,302 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class MaldoraGminionRandom : CGameScript +{ + int AM_RISING; + string ANIM_RUN; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int ATTRIBS_SET; + string FIRST_TARGET; + int FOUND_GROUND; + string GLOW_COLOR; + int GLOW_RAD; + string GROUND_LEVEL; + int I_R_GLOWING; + string LIGHT_COLOR; + string MASTER_ORG; + string MINION_DESC; + string MINION_EFFECT; + int MINION_SUMMONED; + string MINION_TYPE; + string MY_LIGHT_SCRIPT; + string MY_MASTER; + int NO_SPAWN_STUCK_CHECK; + int NO_STUCK_CHECKS; + float NPC_FADE_IN_SPEED; + string NPC_GIVE_EXP; + int PLAYING_DEAD; + string SET_GREEK; + int SKEL_HP; + string SKEL_ID; + string SKEL_LIGHT_ID; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + MaldoraGminionRandom() + { + NPC_FADE_IN_SPEED = 0.02; + ANIM_RUN = "run"; + SKEL_HP = 1000; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 30; + ATTACK_DAMAGE_HIGH = 40; + if (StringToLower(GetMapName()) == "lodagond-2") + { + NPC_GIVE_EXP = 100; + } + else + { + NPC_GIVE_EXP = 600; + } + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + Precache("monsters/skeleton_boss1.mdl"); + } + + void skeleton_spawn() + { + SetModel("monsters/skeleton_boss1.mdl"); + if (MINION_TYPE == "MINION_TYPE") + { + MINION_TYPE = RandomInt(1, 4); + } + if (MINION_TYPE == 1) + { + MINION_DESC = "fire"; + string NAME_SUFFIX = "of Fire"; + MINION_EFFECT = "effects/dot_fire"; + SetModelBody(0, 1); + SetModelBody(1, 6); + LIGHT_COLOR = Vector3(255, 0, 0); + } + if (MINION_TYPE == 2) + { + MINION_DESC = "cold"; + string NAME_SUFFIX = "of Ice"; + MINION_EFFECT = "effects/dot_cold"; + SetModelBody(0, 1); + SetModelBody(1, 5); + LIGHT_COLOR = Vector3(0, 0, 255); + } + if (MINION_TYPE == 3) + { + MINION_DESC = "lightning"; + string NAME_SUFFIX = "of Lightning"; + MINION_EFFECT = "effects/dot_lightning"; + SetModelBody(0, 1); + SetModelBody(1, 3); + LIGHT_COLOR = Vector3(255, 255, 0); + } + if (MINION_TYPE == 4) + { + MINION_DESC = "poison"; + string NAME_SUFFIX = "of Venom"; + LIGHT_COLOR = Vector3(0, 255, 0); + MINION_EFFECT = "effects/dot_poison"; + SetModelBody(0, 1); + SetModelBody(1, 2); + } + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + SetName("Greater Maldora Minion NAME_SUFFIX"); + SetWidth(32); + SetHeight(80); + SetRace("undead"); + SetBloodType("none"); + if ((true)) + { + ScheduleDelayedEvent(1.0, "light_on"); + } + } + + void npc_fadein_done() + { + minion_wakeup(); + } + + void skele_swing_dodamage() + { + if (!(param1)) return; + Effect("glow", GetOwner(), LIGHT_COLOR, 64, 1, 1); + ApplyEffect(HUNT_LASTTARGET, MINION_EFFECT, 5.0, GetEntityIndex(GetOwner()), RandomInt(10, 20)); + } + + void skeleton_attribs() + { + if ((ATTRIBS_SET)) return; + ATTRIBS_SET = 1; + SetDamageResistance("all", 0.6); + SetDamageResistance("holy", 0.5); + SetDamageResistance("dark", 0.5); + SetDamageResistance("slash", 0.0); + SetDamageResistance("blunt", 0.0); + SetDamageResistance("pierce", 0.0); + SetDamageResistance("magic", 0.0); + if (MINION_DESC == "fire") + { + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 1.0); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("acid", 0.0); + } + if (MINION_DESC == "cold") + { + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 1.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("acid", 0.0); + } + if (MINION_DESC == "lightning") + { + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("lightning", 1.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("poison", 0.0); + } + if (MINION_DESC == "poison") + { + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("acid", 1.0); + SetDamageResistance("poison", 1.0); + } + } + + void pop_off_masters_head() + { + float RND_ANG = Random(0, 359.99); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(0, 500, 0))); + } + + void game_dynamically_created() + { + string MY_ORG = GetEntityOrigin(GetOwner()); + MY_ORG += "z"; + SetEntityOrigin(GetOwner(), MY_ORG); + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", 0); + ScheduleDelayedEvent(0.1, "pop_off_masters_head"); + scan_for_ground(); + AM_RISING = 1; + MINION_SUMMONED = 1; + MY_MASTER = param1; + FIRST_TARGET = param2; + SetAnimFrameRate(0.0); + SetRoam(false); + PLAYING_DEAD = 1; + SetMoveAnim(ANIM_RESPAWN_DEADIDLE); + SetIdleAnim(ANIM_RESPAWN_DEADIDLE); + SetInvincible(true); + SetHearingSensitivity(0); + npcatk_suspend_ai(); + NO_STUCK_CHECKS = 1; + MASTER_ORG = GetEntityOrigin(MY_MASTER); + GROUND_LEVEL = (MASTER_ORG).z; + NO_SPAWN_STUCK_CHECK = 1; + // svplaysound: emitsound ent_me $get(ent_me,origin) 64 5.0 danger 128 + EmitSound(GetOwner(), GetEntityOrigin(GetOwner()), 64, 5.0, "danger", 128); + } + + void scan_for_ground() + { + if ((FOUND_GROUND)) return; + ScheduleDelayedEvent(0.1, "scan_for_ground"); + if (!(GetEntityProperty(GetOwner(), "origin.z") == /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")))) return; + FOUND_GROUND = 1; + set_fade_in(); + } + + void minion_wakeup() + { + skeleton_attribs(); + AM_RISING = 0; + float AWAKE_DELAY = 1.5; + if (BASE_FRAMERATE == "BASE_FRAMERATE") + { + SetAnimFrameRate(1.0); + } + if (BASE_FRAMERATE != "BASE_FRAMERATE") + { + SetAnimFrameRate(BASE_FRAMERATE); + } + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", "getup"); + ScheduleDelayedEvent(1.7, "aid_master"); + AWAKE_DELAY("skeleton_awake"); + } + + void aid_master() + { + if ((IsEntityAlive(HUNT_LASTTARGET))) return; + if (!(GetEntityRange(FIRST_TARGET) < 1024)) return; + if (!(IsEntityAlive(FIRST_TARGET))) return; + npcatk_target(FIRST_TARGET); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(MY_MASTER, "skele_died"); + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + if ((MINION_SUMMONED)) return; + if ((NPC_NO_DROPS)) return; + bm_gold_spew(25, 1, 32, 2, 4); + } + + void client_activate() + { + GLOW_RAD = 200; + const int NO_LOOP_DETECT = 1; + SKEL_ID = param1; + GLOW_COLOR = param2; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void light_on() + { + if ((I_R_GLOWING)) return; + I_R_GLOWING = 1; + ClientEvent("persist", "all", currentscript, GetEntityIndex(GetOwner()), LIGHT_COLOR); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + + void maldora_died() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void maldora_final_died() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_gminion_venom.as b/scripts/angelscript/monsters/maldora_gminion_venom.as new file mode 100644 index 00000000..99ead485 --- /dev/null +++ b/scripts/angelscript/monsters/maldora_gminion_venom.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/maldora_gminion_random.as" + +namespace MS +{ + +class MaldoraGminionVenom : CGameScript +{ + int MINION_TYPE; + + MaldoraGminionVenom() + { + MINION_TYPE = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_minion_fire.as b/scripts/angelscript/monsters/maldora_minion_fire.as new file mode 100644 index 00000000..6dec9d89 --- /dev/null +++ b/scripts/angelscript/monsters/maldora_minion_fire.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/maldora_minion_random.as" + +namespace MS +{ + +class MaldoraMinionFire : CGameScript +{ + int MINION_TYPE; + + MaldoraMinionFire() + { + MINION_TYPE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_minion_ice.as b/scripts/angelscript/monsters/maldora_minion_ice.as new file mode 100644 index 00000000..3305c8c2 --- /dev/null +++ b/scripts/angelscript/monsters/maldora_minion_ice.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/maldora_minion_random.as" + +namespace MS +{ + +class MaldoraMinionIce : CGameScript +{ + int MINION_TYPE; + + MaldoraMinionIce() + { + MINION_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_minion_lightning.as b/scripts/angelscript/monsters/maldora_minion_lightning.as new file mode 100644 index 00000000..e88abb77 --- /dev/null +++ b/scripts/angelscript/monsters/maldora_minion_lightning.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/maldora_minion_random.as" + +namespace MS +{ + +class MaldoraMinionLightning : CGameScript +{ + int MINION_TYPE; + + MaldoraMinionLightning() + { + MINION_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_minion_poison.as b/scripts/angelscript/monsters/maldora_minion_poison.as new file mode 100644 index 00000000..d71c8e83 --- /dev/null +++ b/scripts/angelscript/monsters/maldora_minion_poison.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/maldora_minion_random.as" + +namespace MS +{ + +class MaldoraMinionPoison : CGameScript +{ + int MINION_TYPE; + + MaldoraMinionPoison() + { + MINION_TYPE = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_minion_random.as b/scripts/angelscript/monsters/maldora_minion_random.as new file mode 100644 index 00000000..6d4995bd --- /dev/null +++ b/scripts/angelscript/monsters/maldora_minion_random.as @@ -0,0 +1,282 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class MaldoraMinionRandom : CGameScript +{ + int AM_RISING; + string ANIM_RUN; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int ATTRIBS_SET; + string FIRST_TARGET; + int FOUND_GROUND; + string GLOW_COLOR; + int GLOW_RAD; + string GROUND_LEVEL; + int I_R_GLOWING; + string LIGHT_COLOR; + string MASTER_ORG; + string MINION_DESC; + string MINION_EFFECT; + int MINION_SUMMONED; + string MINION_TYPE; + string MY_LIGHT_SCRIPT; + string MY_MASTER; + int NO_SPAWN_STUCK_CHECK; + int NO_STUCK_CHECKS; + float NPC_FADE_IN_SPEED; + int NPC_GIVE_EXP; + int PLAYING_DEAD; + string SET_GREEK; + int SKEL_HP; + string SKEL_ID; + string SKEL_LIGHT_ID; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + MaldoraMinionRandom() + { + NPC_FADE_IN_SPEED = 0.02; + ANIM_RUN = "run"; + SKEL_HP = 400; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 20; + ATTACK_DAMAGE_HIGH = 30; + NPC_GIVE_EXP = 125; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + Precache("monsters/skeleton_boss1.mdl"); + } + + void skeleton_spawn() + { + SetModel("monsters/skeleton_boss1.mdl"); + if (MINION_TYPE == "MINION_TYPE") + { + MINION_TYPE = RandomInt(1, 4); + } + if (MINION_TYPE == 1) + { + MINION_DESC = "fire"; + string NAME_SUFFIX = "of Fire"; + MINION_EFFECT = "effects/dot_fire"; + SetModelBody(0, 1); + SetModelBody(1, 6); + LIGHT_COLOR = Vector3(255, 0, 0); + } + if (MINION_TYPE == 2) + { + MINION_DESC = "cold"; + string NAME_SUFFIX = "of Ice"; + MINION_EFFECT = "effects/dot_cold"; + SetModelBody(0, 1); + SetModelBody(1, 5); + LIGHT_COLOR = Vector3(0, 0, 255); + } + if (MINION_TYPE == 3) + { + MINION_DESC = "lightning"; + string NAME_SUFFIX = "of Lightning"; + MINION_EFFECT = "effects/dot_lightning"; + SetModelBody(0, 1); + SetModelBody(1, 3); + LIGHT_COLOR = Vector3(255, 255, 0); + } + if (MINION_TYPE == 4) + { + MINION_DESC = "poison"; + string NAME_SUFFIX = "of Venom"; + LIGHT_COLOR = Vector3(0, 255, 0); + MINION_EFFECT = "effects/dot_poison"; + SetModelBody(0, 1); + SetModelBody(1, 2); + } + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + SetName("Maldora's Minion NAME_SUFFIX"); + SetWidth(32); + SetHeight(80); + SetRace("undead"); + SetBloodType("none"); + if ((true)) + { + ScheduleDelayedEvent(1.0, "light_on"); + } + } + + void skele_swing_dodamage() + { + if ((AM_RISING)) return; + if (!(param1)) return; + Effect("glow", GetOwner(), LIGHT_COLOR, 64, 1, 1); + ApplyEffect(GetEntityIndex(param2), MINION_EFFECT, 5.0, GetEntityIndex(GetOwner()), RandomInt(10, 20)); + } + + void skeleton_attribs() + { + if ((ATTRIBS_SET)) return; + ATTRIBS_SET = 1; + SetDamageResistance("all", 0.6); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.5); + if (MINION_DESC == "fire") + { + SetDamageResistance("cold", 4.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("acid", 0.5); + } + if (MINION_DESC == "cold") + { + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 4.0); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("acid", 0.5); + } + if (MINION_DESC == "lightning") + { + SetDamageResistance("cold", 0.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("acid", 4.0); + } + if (MINION_DESC == "poison") + { + SetDamageResistance("cold", 0.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("lightning", 4.0); + SetDamageResistance("acid", 0.0); + } + } + + void pop_off_masters_head() + { + float RND_ANG = Random(0, 359.99); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(0, 500, 0))); + } + + void npc_fadein_done() + { + minion_wakeup(); + } + + void game_dynamically_created() + { + MINION_SUMMONED = 1; + AM_RISING = 1; + MY_MASTER = param1; + FIRST_TARGET = param2; + string MY_ORG = GetEntityOrigin(GetOwner()); + MY_ORG += "z"; + SetEntityOrigin(GetOwner(), MY_ORG); + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", 0); + ScheduleDelayedEvent(0.1, "pop_off_masters_head"); + scan_for_ground(); + SetAnimFrameRate(0.0); + SetRoam(false); + PLAYING_DEAD = 1; + SetMoveAnim(ANIM_RESPAWN_DEADIDLE); + SetIdleAnim(ANIM_RESPAWN_DEADIDLE); + SetInvincible(true); + SetHearingSensitivity(0); + npcatk_suspend_ai(); + NO_STUCK_CHECKS = 1; + MASTER_ORG = GetEntityOrigin(MY_MASTER); + GROUND_LEVEL = (MASTER_ORG).z; + NO_SPAWN_STUCK_CHECK = 1; + // svplaysound: emitsound ent_me $get(ent_me,origin) 64 5.0 danger 128 + EmitSound(GetOwner(), GetEntityOrigin(GetOwner()), 64, 5.0, "danger", 128); + } + + void scan_for_ground() + { + if ((FOUND_GROUND)) return; + ScheduleDelayedEvent(0.1, "scan_for_ground"); + if (!(GetEntityProperty(GetOwner(), "origin.z") == /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")))) return; + FOUND_GROUND = 1; + set_fade_in(); + } + + void minion_wakeup() + { + skeleton_attribs(); + AM_RISING = 0; + float AWAKE_DELAY = 1.5; + if (BASE_FRAMERATE == "BASE_FRAMERATE") + { + SetAnimFrameRate(1.0); + } + if (BASE_FRAMERATE != "BASE_FRAMERATE") + { + SetAnimFrameRate(BASE_FRAMERATE); + } + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", "getup"); + ScheduleDelayedEvent(1.7, "aid_master"); + AWAKE_DELAY("skeleton_awake"); + } + + void aid_master() + { + if ((IsEntityAlive(HUNT_LASTTARGET))) return; + if (!(GetEntityRange(FIRST_TARGET) < 1024)) return; + if (!(IsEntityAlive(FIRST_TARGET))) return; + npcatk_target(FIRST_TARGET); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(MY_MASTER, "skele_died"); + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + if ((NPC_NO_DROPS)) return; + if ((MINION_SUMMONED)) return; + bm_gold_spew(25, 1, 32, 2, 4); + } + + void client_activate() + { + GLOW_RAD = 200; + const int NO_LOOP_DETECT = 1; + SKEL_ID = param1; + GLOW_COLOR = param2; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void light_on() + { + if ((I_R_GLOWING)) return; + I_R_GLOWING = 1; + ClientEvent("persist", "all", currentscript, GetEntityIndex(GetOwner()), LIGHT_COLOR); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + + void maldora_died() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/monsters/maldora_minion_venom.as b/scripts/angelscript/monsters/maldora_minion_venom.as new file mode 100644 index 00000000..3bf2e07b --- /dev/null +++ b/scripts/angelscript/monsters/maldora_minion_venom.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/maldora_minion_random.as" + +namespace MS +{ + +class MaldoraMinionVenom : CGameScript +{ + int MINION_TYPE; + + MaldoraMinionVenom() + { + MINION_TYPE = 4; + } + +} + +} diff --git a/scripts/angelscript/monsters/minispider.as b/scripts/angelscript/monsters/minispider.as new file mode 100644 index 00000000..c529503e --- /dev/null +++ b/scripts/angelscript/monsters/minispider.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/spider_mini.as" + +namespace MS +{ + +class Minispider : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/monster_random.as b/scripts/angelscript/monsters/monster_random.as new file mode 100644 index 00000000..85a198ef --- /dev/null +++ b/scripts/angelscript/monsters/monster_random.as @@ -0,0 +1,101 @@ +#pragma context server + +namespace MS +{ + +class MonsterRandom : CGameScript +{ + string FINAL_MOBS; + string IN_MOBS; + int PLAYING_DEAD; + string SPAWN_ID; + + void OnSpawn() override + { + PLAYING_DEAD = 1; + SetInvincible(true); + SetGravity(0); + SetNoPush(true); + SetFly(true); + SetHealth(1); + SetModel("null.mdl"); + SetWidth(3); + SetHeight(3); + SetSolid("none"); + } + + void game_postspawn() + { + IN_MOBS = param4; + if ((IN_MOBS).length() < 3) + { + int NO_IN_MOBS = 1; + } + if ((IN_MOBS).findFirst(PARAM) == 0) + { + int NO_IN_MOBS = 1; + } + if ((NO_IN_MOBS)) + { + SendInfoMsg("all", "MAP ERROR monsters/monster_random not supplied with monster list"); + remove_me(); + } + if ((NO_IN_MOBS)) return; + FINAL_MOBS = ""; + for (int i = 0; i < GetTokenCount(IN_MOBS, ";"); i++) + { + process_in_mobs(); + } + string N_MOBS = GetTokenCount(FINAL_MOBS, ";"); + N_MOBS -= 1; + int RND_MOB = RandomInt(0, N_MOBS); + string RND_MOB = GetToken(FINAL_MOBS, RND_MOB, ";"); + spawn_mob(RND_MOB); + } + + void process_in_mobs() + { + string CUR_MOB = GetToken(IN_MOBS, i, ";"); + if ((CUR_MOB).findFirst("/") >= 0) + { + if (FINAL_MOBS.length() > 0) FINAL_MOBS += ";"; + FINAL_MOBS += CUR_MOB; + } + else + { + string OUT_TOKEN = "monsters/"; + OUT_TOKEN += CUR_MOB; + if (FINAL_MOBS.length() > 0) FINAL_MOBS += ";"; + FINAL_MOBS += OUT_TOKEN; + } + } + + void spawn_mob() + { + SpawnNPC(param1, GetEntityOrigin(GetOwner()), ScriptMode::Legacy); + SPAWN_ID = GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(1.0, "monitor_spawn"); + } + + void monitor_spawn() + { + if (!(IsEntityAlive(SPAWN_ID))) + { + remove_me(); + } + else + { + ScheduleDelayedEvent(0.5, "monitor_spawn"); + } + } + + void remove_me() + { + SetInvincible(false); + SetRace("hated"); + DoDamage(GetOwner(), "direct", 99999, 100, GAME_MASTER); + } + +} + +} diff --git a/scripts/angelscript/monsters/morc_archer.as b/scripts/angelscript/monsters/morc_archer.as new file mode 100644 index 00000000..d51b5824 --- /dev/null +++ b/scripts/angelscript/monsters/morc_archer.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class MorcArcher : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DROPS_CONTAINER; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string DROP_ITEM2; + float DROP_ITEM2_CHANCE; + float FLINCH_CHANCE; + int MOVE_RANGE; + int NPC_GIVE_EXP; + + MorcArcher() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 18); + NPC_GIVE_EXP = 45; + DROP_ITEM1 = "bows_longbow"; + DROP_ITEM1_CHANCE = 0.1; + DROP_ITEM2 = "proj_arrow_jagged"; + DROP_ITEM2_CHANCE = 0.1; + ANIM_ATTACK = "shootorcbow"; + FLINCH_CHANCE = 0.45; + AIM_RATIO = 50; + ARROW_DAMAGE_LOW = 20; + ARROW_DAMAGE_HIGH = 35; + MOVE_RANGE = 5000; + ATTACK_RANGE = 5500; + ATTACK_SPEED = 900; + ATTACK_CONE_OF_FIRE = 2; + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.05; + CONTAINER_SCRIPT = "chests/quiver_of_frost_arrows"; + Precache("monsters/morc.mdl"); + } + + void orc_spawn() + { + SetHealth(160); + SetName("Marogar Archer"); + SetHearingSensitivity(2); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + SetDamageResistance("fire", 1.5); + SetDamageResistance("cold", 0.1); + Precache("monsters/morc.mdl"); + SetModel("monsters/morc.mdl"); + SetModelBody(0, 1); + SetModelBody(1, 4); + SetModelBody(2, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/morc_chief.as b/scripts/angelscript/monsters/morc_chief.as new file mode 100644 index 00000000..a1edc455 --- /dev/null +++ b/scripts/angelscript/monsters/morc_chief.as @@ -0,0 +1,235 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class MorcChief : CGameScript +{ + string ANIM_ATTACK; + string ANIM_AXE; + string ANIM_KICK; + string ANIM_SWAT; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_SPECRANGE; + float BLIZARD_FREQ; + int DOING_SPEC_ATK; + int GOLD_BAGS; + int GOLD_BAGS_PPLAYER; + int GOLD_MAX_BAGS; + int GOLD_PER_BAG; + int GOLD_RADIUS; + string ICECHIEF_AXING; + int ICECHIEF_GO; + int ICE_SELECT_ATK; + int MONSTER_WIDTH; + int MOVE_RANGE; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + string SOUND_BOOM; + string SOUND_KICK; + string SOUND_SWAT; + string SOUND_SWINGHIT; + string SOUND_SWINGMISS; + string SOUND_SWIPEMISS; + string SOUND_UPSWING; + string SOUND_WARCRY; + int SPEC_ATK_CNT; + int SPEC_ATK_FREQ; + float STUCK_CHECK_FREQUENCY; + + MorcChief() + { + if (StringToLower(GetMapName()) == "ms_snow") + { + NPC_IS_BOSS = 1; + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 0.5; + GOLD_BAGS = 1; + GOLD_BAGS_PPLAYER = 5; + GOLD_PER_BAG = 50; + GOLD_RADIUS = 64; + GOLD_MAX_BAGS = 32; + NPC_GIVE_EXP = 500; + ATTACK_RANGE = 104; + ATTACK_HITRANGE = 138; + MOVE_RANGE = 84; + ANIM_ATTACK = "battleaxe_swing1_L"; + ANIM_AXE = "battleaxe_swing1_L"; + ANIM_SWAT = "swordswing1_L"; + ANIM_KICK = "kick"; + SPEC_ATK_FREQ = 3; + SPEC_ATK_CNT = 1; + ICE_SELECT_ATK = 0; + BLIZARD_FREQ = 50.0; + ATTACK_ACCURACY = 0.85; + ATTACK_DMG_LOW = 400; + ATTACK_DMG_HIGH = 800; + ATTACK_SPECRANGE = 160; + SOUND_SWAT = "monsters/orc/battlecry.wav"; + SOUND_KICK = "monsters/orc/attack3.wav"; + SOUND_WARCRY = "monsters/troll/trollidle.wav"; + SOUND_UPSWING = "monsters/orc/attack1.wav"; + SOUND_SWINGHIT = "monsters/orc/pain.wav"; + SOUND_SWINGMISS = "debris/bustmetal2.wav"; + SOUND_SWIPEMISS = "zombie/claw_miss2.wav"; + SOUND_BOOM = "monsters/bear/giantbearstep2.wav"; + STUCK_CHECK_FREQUENCY = 4.1; + MONSTER_WIDTH = 48; + Precache("monsters/summon/summon_blizzard"); + Precache("monsters/morc_big.mdl"); + } + + void orc_spawn() + { + SetHealth(5000); + SetName("Talnorgah , Chief of Clan Marogar"); + if (StringToLower(GetMapName()) != "ms_snow") + { + SetName("Marogar Giant"); + } + SetHearingSensitivity(10); + SetStat("spellcasting", 30); + SetDamageResistance("all", ".8"); + SetDamageResistance("fire", 2.0); + SetDamageResistance("cold", 0.0); + SetStat("parry", 90); + SetWidth(48); + SetHeight(96); + SetRoam(false); + Precache("monsters/morc_big.mdl"); + SetModel("monsters/morc_big.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 5); + } + + void npc_selectattack() + { + if (SPEC_ATK_CNT < SPEC_ATK_FREQ) + { + ANIM_ATTACK = ANIM_AXE; + } + if (!(SPEC_ATK_CNT >= SPEC_ATK_FREQ)) return; + if ((DOING_SPEC_ATK)) return; + ICE_SELECT_ATK += 1; + if (ICE_SELECT_ATK == 1) + { + ANIM_ATTACK = ANIM_KICK; + } + if (ICE_SELECT_ATK == 2) + { + ANIM_ATTACK = ANIM_SWAT; + ICE_SELECT_ATK = 0; + } + DOING_SPEC_ATK = 1; + } + + void swing_dodamage() + { + if (!(param1)) + { + if (ANIM_ATTACK == ANIM_SWAT) + { + EmitSound(GetOwner(), CHAN_ITEM, SOUND_SWIPEMISS, 10); + } + if (ANIM_ATTACK == ANIM_KICK) + { + EmitSound(GetOwner(), CHAN_ITEM, SOUND_SWIPEMISS, 10); + } + ICECHIEF_AXING = 0; + } + if (!(param1)) return; + if ((ICECHIEF_AXING)) + { + EmitSound(GetOwner(), CHAN_ITEM, SOUND_SWINGHIT, 10); + } + if (ANIM_ATTACK == ANIM_SWAT) + { + EmitSound(GetOwner(), CHAN_ITEM, SOUND_SWINGHIT, 10); + } + ICECHIEF_AXING = 0; + if (!(GetEntityRange(param2) <= ATTACK_HITRANGE)) return; + if (!(RandomInt(1, 2) == 1)) return; + ApplyEffect(param2, "effects/dot_cold", RandomInt(5, 10), GetOwner(), RandomInt(40, 80)); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((ICECHIEF_GO)) return; + SetRoam(true); + BLIZARD_FREQ("throw_blizzard"); + ICECHIEF_GO = 1; + } + + void throw_blizzard() + { + BLIZARD_FREQ("throw_blizzard"); + if (!(false)) return; + npcatk_faceattacker(m_hAttackTarget); + PlayAnim("critical", "warcry"); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_WARCRY, 10); + ScheduleDelayedEvent(1.5, "create_blizzard"); + } + + void power_kick() + { + SPEC_ATK_CNT = 1; + DOING_SPEC_ATK = 0; + if (!(false)) return; + npcatk_faceattacker(m_hAttackTarget); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_KICK, 10); + if (!(GetEntityRange(m_hLastStruckByMe) < ATTACK_SPECRANGE)) return; + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + } + + void swing_sword() + { + SPEC_ATK_CNT = 1; + DOING_SPEC_ATK = 0; + if (!(false)) return; + npcatk_faceattacker(m_hAttackTarget); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_SWAT, 10); + if (!(GetEntityRange(m_hLastStruckByMe) < ATTACK_SPECRANGE)) return; + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/debuff_stun", 10, GetEntityIndex(GetOwner())); + } + + void swing_start() + { + EmitSound(GetOwner(), CHAN_VOICE, SOUND_UPSWING, 10); + } + + void swing_axe() + { + SPEC_ATK_CNT += 1; + ICECHIEF_AXING = 1; + EmitSound(GetOwner(), CHAN_BODY, SOUND_SWINGMISS, 10); + } + + void create_blizzard() + { + SpawnNPC("monsters/summon/summon_blizzard", GetEntityOrigin(m_hLastSeen), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), 50, 20 + } + + void baseorc_yell() + { + } + + void OnDeath(CBaseEntity@ attacker) override + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 190, 20, 1, 0); + EmitSound(GetOwner(), CHAN_ITEM, SOUND_BOOM, 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/morc_icewarrior.as b/scripts/angelscript/monsters/morc_icewarrior.as new file mode 100644 index 00000000..f61868a1 --- /dev/null +++ b/scripts/angelscript/monsters/morc_icewarrior.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class MorcIcewarrior : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int FX_ATK; + int NPC_GIVE_EXP; + string SOUND_ICEATK; + + MorcIcewarrior() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 30); + NPC_GIVE_EXP = 120; + DROP_ITEM1 = "swords_liceblade"; + DROP_ITEM1_CHANCE = 0.05; + ANIM_ATTACK = "battleaxe_swing1_L"; + ATTACK_ACCURACY = 0.75; + ATTACK_DMG_LOW = 30; + ATTACK_DMG_HIGH = 120; + SOUND_ICEATK = "debris/beamstart14.wav"; + Precache("monsters/morc.mdl"); + } + + void orc_spawn() + { + SetHealth(500); + SetName("Marogar Ice Warrior"); + SetHearingSensitivity(5); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + SetDamageResistance("fire", 1.5); + SetDamageResistance("cold", 0.1); + FX_ATK = 1; + Precache("monsters/morc.mdl"); + SetModel("monsters/morc.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 4); + } + + void swing_dodamage() + { + FX_ATK += 1; + if (FX_ATK > 3) + { + FX_ATK = 1; + } + if (!(param1)) return; + if (!(GetEntityRange(param2) <= ATTACK_HITRANGE)) return; + if (!(FX_ATK == 3)) return; + EmitSound(GetOwner(), CHAN_BODY, SOUND_ICEATK, 8); + ApplyEffect(GetEntityIndex(param2), "effects/dot_cold", RandomInt(3, 5), GetOwner(), RandomInt(5, 10)); + } + +} + +} diff --git a/scripts/angelscript/monsters/morc_ranger.as b/scripts/angelscript/monsters/morc_ranger.as new file mode 100644 index 00000000..5bd5d8b1 --- /dev/null +++ b/scripts/angelscript/monsters/morc_ranger.as @@ -0,0 +1,96 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class MorcRanger : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + int ARROW_TYPE; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DROPS_CONTAINER; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLINCH_CHANCE; + int MOVE_RANGE; + int NPC_GIVE_EXP; + + MorcRanger() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 18); + NPC_GIVE_EXP = 100; + DROP_ITEM1 = "bows_longbow"; + DROP_ITEM1_CHANCE = 0.1; + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_frost_arrows"; + ANIM_ATTACK = "shootorcbow"; + FLINCH_CHANCE = 0.45; + AIM_RATIO = 50; + ARROW_DAMAGE_LOW = 40; + ARROW_DAMAGE_HIGH = 120; + MOVE_RANGE = 5000; + ATTACK_RANGE = 5500; + ATTACK_SPEED = 900; + ATTACK_CONE_OF_FIRE = 2; + Precache("monsters/morc.mdl"); + } + + void orc_spawn() + { + SetHealth(320); + SetName("Marogar Ice Archer"); + SetHearingSensitivity(10); + SetStat("parry", 30); + SetStat("archery", 20); + SetDamageResistance("all", ".8"); + SetDamageResistance("fire", 1.5); + SetDamageResistance("cold", 0.1); + ARROW_TYPE = 1; + Precache("monsters/morc.mdl"); + SetModel("monsters/morc.mdl"); + SetModelBody(0, 3); + SetModelBody(1, 2); + SetModelBody(2, 3); + } + + void shoot_arrow() + { + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + float LCL_ATKDMG = Random(ARROW_DAMAGE_LOW, ARROW_DAMAGE_HIGH); + if (ARROW_TYPE == 1) + { + string LAUNCH_ARROW = "proj_arrow_frost"; + } + if (ARROW_TYPE == 2) + { + string LAUNCH_ARROW = "proj_arrow_jagged"; + } + TossProjectile("proj_arrow_frost", /* TODO: $relpos */ $relpos(0, 0, 18), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + ARROW_TYPE += 1; + if (ARROW_TYPE > 2) + { + ARROW_TYPE = 1; + } + SetModelBody(3, 0); + EmitSound(GetOwner(), SOUND_BOW); + } + +} + +} diff --git a/scripts/angelscript/monsters/morc_shaman_ice.as b/scripts/angelscript/monsters/morc_shaman_ice.as new file mode 100644 index 00000000..4c8fe167 --- /dev/null +++ b/scripts/angelscript/monsters/morc_shaman_ice.as @@ -0,0 +1,260 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class MorcShamanIce : CGameScript +{ + string ANIM_ATTACK; + string ANIM_FIRE; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_SWIPE; + string ANIM_WARCRY; + int ATTACK_ACCURACY; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + float BLIZZARD_DELAY; + string DEATH_SCRIPT; + int DID_WARCRY; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FLINCH_CHANCE; + int FROST_BOLT_DAMAGE; + int FROST_BOLT_DELAY; + float FROST_BOLT_FREQ; + int FROST_STRIKE_DAMAGE; + int IS_FLEEING; + int MADE_BLIZZARD; + int MELE_HITRANGE; + int MELE_RANGE; + int MOVE_RANGE; + int NPC_GIVE_EXP; + int PURE_FLEE; + string SOUND_DEATH_SHOOT; + string SOUND_ICESHOOT; + string SOUND_MAKEBLIZZ; + string SOUND_MELEHIT; + string SOUND_MELEMISS; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + int SWIPE_DAMAGE; + int SWIPE_SOUNDS; + + MorcShamanIce() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 30); + NPC_GIVE_EXP = 100; + ANIM_ATTACK = "swordswing1_L"; + FLINCH_CHANCE = 0.45; + MOVE_RANGE = 256; + ATTACK_RANGE = 2000; + ATTACK_SPEED = 300; + ATTACK_CONE_OF_FIRE = 2; + MELE_RANGE = 96; + MELE_HITRANGE = 128; + ATTACK_ACCURACY = 80; + ANIM_SWIPE = "swordswing1_L"; + ANIM_FIRE = "swordswing1_L"; + ANIM_WARCRY = "warcry"; + ANIM_KICK = "kick"; + ANIM_IDLE = "idle1"; + SWIPE_DAMAGE = "$rand(25,65)"; + SOUND_MELEMISS = "zombie/claw_miss1.wav"; + SOUND_MELEHIT = "zombie/claw_strike3.wav"; + SOUND_ICESHOOT = "magic/ice_strike.wav"; + SOUND_DEATH_SHOOT = "magic/spawn.wav"; + SOUND_WARCRY1 = "monsters/orc/attack1.wav"; + SOUND_WARCRY2 = "monsters/orc/attack3.wav"; + SOUND_MAKEBLIZZ = "magic/heal_powerup.wav"; + FROST_BOLT_DAMAGE = "$rand(10,50)"; + FROST_STRIKE_DAMAGE = "$rand(10,20)"; + FROST_BOLT_FREQ = 1.0; + BLIZZARD_DELAY = 20.0; + DEATH_SCRIPT = "monsters/summon/ice_blast"; + Precache("monsters/summon/summon_blizzard"); + Precache("snow1.spr"); + Precache(DEATH_SCRIPT); + } + + void orc_spawn() + { + SetHealth(320); + SetName("Marogar Ice Shaman"); + SetRace("orc"); + SetHearingSensitivity(8); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + SetDamageResistance("fire", 1.5); + SetDamageResistance("cold", 0.0); + SetStat("spellcasting", 30); + Precache("monsters/morc.mdl"); + SetModel("monsters/morc.mdl"); + BLIZZARD_DELAY("make_blizzard"); + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 0); + } + + void npc_selectattack() + { + string NME_RANGE = GetEntityRange(m_hLastSeen); + if ((FROST_BOLT_DELAY)) + { + if (NME_RANGE > MELE_HITRANGE) + { + ANIM_ATTACK = ANIM_FIRE; + } + } + if (!(FROST_BOLT_DELAY)) + { + ANIM_ATTACK = ANIM_FIRE; + } + if (NME_RANGE < MELE_HITRANGE) + { + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = ANIM_KICK; + } + } + } + + void swing_sword() + { + if ((CanSee("enemy", MELE_RANGE))) + { + ANIM_ATTACK = ANIM_SWIPE; + swipe_attack(GetEntityIndex(m_hLastSeen)); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((false)) + { + if (!(CanSee("enemy", MOVE_RANGE))) + { + ANIM_ATTACK = ANIM_RUN; + } + } + ANIM_ATTACK = ANIM_FIRE; + throw_frostbolt(); + } + + void throw_frostbolt() + { + if (!(false)) return; + FROST_BOLT_FREQ("reset_frostbolt"); + EmitSound(GetOwner(), 0, SOUND_ICESHOOT, 10); + string FINAL_DAMAGE = FROST_BOLT_DAMAGE; + if (EXT_DAMAGE_ADJUSTMENT != "EXT_DAMAGE_ADJUSTMENT") + { + FINAL_DAMAGE += EXT_DAMAGE_ADJUSTMENT; + } + TossProjectile("proj_ice_bolt", /* TODO: $relpos */ $relpos(0, 48, 18), "none", ATTACK_SPEED, FINAL_DAMAGE, ATTACK_CONE_OF_FIRE, "none"); + FROST_BOLT_DELAY = 1; + } + + void reset_frostbolt() + { + ANIM_ATTACK = ANIM_FIRE; + DID_WARCRY = 0; + FROST_BOLT_DELAY = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetSolid("none"); + string BALL_DEST = /* TODO: $relpos */ $relpos(0, 0, 2000); + EmitSound(GetOwner(), 0, SOUND_DEATH_SHOOT, 10); + SpawnNPC(DEATH_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 32), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 10.0, BALL_DEST + } + + void swipe_attack() + { + SWIPE_SOUNDS = 1; + string FINAL_DAMAGE = SWIPE_DAMAGE; + if (EXT_DAMAGE_ADJUSTMENT != "EXT_DAMAGE_ADJUSTMENT") + { + FINAL_DAMAGE += EXT_DAMAGE_ADJUSTMENT; + } + if (!(GetEntityRange(m_hLastStruckByMe) <= MELE_HITRANGE)) return; + npcatk_dodamage(param1, MELE_HITRANGE, FINAL_DAMAGE, ATTACK_ACCURACY); + ApplyEffect(param1, "effects/dot_cold", RandomInt(5, 10), GetOwner(), FROST_STRIKE_DAMAGE); + } + + void game_dodamage() + { + if (!(SWIPE_SOUNDS)) return; + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_MELEMISS, 10); + } + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_MELEHIT, 10); + } + SWIPE_SOUNDS = 0; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (!(GetEntityRange(m_hLastStruck) < MELE_RANGE)) return; + npcatk_settarget(GetEntityIndex(m_hLastStruck)); + } + + void make_blizzard() + { + if ((MADE_BLIZZARD)) return; + if (!(false)) + { + BLIZZARD_DELAY("make_blizzard"); + } + if (!(false)) return; + npcatk_faceattacker(m_hAttackTarget); + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY1, 10); + MADE_BLIZZARD = 1; + IS_FLEEING = 1; + PURE_FLEE = 1; + Effect("glow", GetOwner(), Vector3(128, 128, 255), 128, 3, 3); + ScheduleDelayedEvent(1.5, "really_make_blizzard"); + } + + void really_make_blizzard() + { + string EFFECT_SCRIPT = "monsters/summon/summon_blizzard"; + int SET_DAMAGE = 20; + int SET_DURATION = 10; + EmitSound(GetOwner(), 0, SOUND_MAKEBLIZZ, 10); + SpawnNPC(EFFECT_SCRIPT, GetEntityOrigin(m_hLastSeen), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), SET_DAMAGE, SET_DURATION + } + + void warcry_done() + { + IS_FLEEING = 0; + PURE_FLEE = 0; + } + + void kick_land() + { + SWIPE_SOUNDS = 1; + ANIM_ATTACK = ANIM_SWIPE; + string FINAL_DAMAGE = SWIPE_DAMAGE; + if (EXT_DAMAGE_ADJUSTMENT != "EXT_DAMAGE_ADJUSTMENT") + { + FINAL_DAMAGE += EXT_DAMAGE_ADJUSTMENT; + } + npcatk_dodamage(m_hLastStruckByMe, MELE_HITRANGE, FINAL_DAMAGE, ATTACK_ACCURACY); + if (!(GetEntityRange(m_hLastStruckByMe) <= MELE_HITRANGE)) return; + ApplyEffect(m_hLastStruckByMe, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 50), 0); + PURE_FLEE = 1; + npcatk_flee(m_hLastSeen, 800, 5); + } + +} + +} diff --git a/scripts/angelscript/monsters/morc_shaman_ice_noblizz.as b/scripts/angelscript/monsters/morc_shaman_ice_noblizz.as new file mode 100644 index 00000000..5c3e1763 --- /dev/null +++ b/scripts/angelscript/monsters/morc_shaman_ice_noblizz.as @@ -0,0 +1,16 @@ +#pragma context server + +#include "monsters/morc_shaman_ice.as" + +namespace MS +{ + +class MorcShamanIceNoblizz : CGameScript +{ + void make_blizzard() + { + } + +} + +} diff --git a/scripts/angelscript/monsters/morc_shaman_ice_turret.as b/scripts/angelscript/monsters/morc_shaman_ice_turret.as new file mode 100644 index 00000000..a657bd19 --- /dev/null +++ b/scripts/angelscript/monsters/morc_shaman_ice_turret.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "monsters/morc_shaman_ice.as" + +namespace MS +{ + +class MorcShamanIceTurret : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + int NO_STUCK_CHECKS; + + MorcShamanIceTurret() + { + ANIM_WALK = "idle1"; + ANIM_RUN = "warcry"; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetRoam(false); + SetMoveSpeed(0.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/morc_shaman_ice_turret_noblizz.as b/scripts/angelscript/monsters/morc_shaman_ice_turret_noblizz.as new file mode 100644 index 00000000..1bef68e5 --- /dev/null +++ b/scripts/angelscript/monsters/morc_shaman_ice_turret_noblizz.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "monsters/morc_shaman_ice_noblizz.as" + +namespace MS +{ + +class MorcShamanIceTurretNoblizz : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + int NO_STUCK_CHECKS; + + MorcShamanIceTurretNoblizz() + { + ANIM_WALK = "idle1"; + ANIM_RUN = "warcry"; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetRoam(false); + SetMoveSpeed(0.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/morc_sniper.as b/scripts/angelscript/monsters/morc_sniper.as new file mode 100644 index 00000000..5e266547 --- /dev/null +++ b/scripts/angelscript/monsters/morc_sniper.as @@ -0,0 +1,234 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class MorcSniper : CGameScript +{ + int ALT_ATTACKS; + int AM_TURRET; + string ANIM_ATTACK; + string ANIM_BOW; + string ANIM_KICK; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SWIPE; + string ANIM_WALK; + string ARROW_MISSED; + string ARROW_TYPE; + int ATTACK_CONE_OF_FIRE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + string ATTACK_PUSH; + int ATTACK_RANGE; + int ATTACK_SPEED; + string CONTAINER_BASE; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DMG_BOW; + int DMG_DOT; + int DMG_KICK; + int DMG_SMASH; + int DMG_SWIPE; + float DOT_DUR; + int DROPS_CONTAINER; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string DROP_ITEM_BASE1; + int FIN_EXP; + float FLINCH_CHANCE; + float FREQ_KICK; + int IS_ARROW; + int KICK_HITCHANCE; + int KICK_HITRANGE; + int KICK_RANGE; + int MELEE_ATK; + int MOVE_RANGE; + string NEXT_KICK; + int NO_STUCK_CHECKS; + string NPC_GIVE_EXP; + string SOUND_KICK; + + MorcSniper() + { + DMG_DOT = 30; + DOT_DUR = 5.0; + ARROW_TYPE = "proj_arrow_npc_dyn"; + ATTACK_SPEED = 900; + ATTACK_CONE_OF_FIRE = 2; + DMG_BOW = RandomInt(100, 200); + KICK_RANGE = 96; + KICK_HITRANGE = 128; + KICK_HITCHANCE = 90; + ANIM_SMASH = "battleaxe_swing1_L"; + ANIM_SWIPE = "swordswing1_L"; + ANIM_BOW = "shootorcbow"; + ANIM_KICK = "kick"; + DMG_SMASH = "$rand(30,75)"; + DMG_SWIPE = "$rand(10,30)"; + DMG_KICK = "$rand(10,30)"; + ALT_ATTACKS = 1; + FREQ_KICK = 10.0; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 20); + DROP_ITEM_BASE1 = "bows_longbow"; + DROP_ITEM1 = DROP_ITEM_BASE1; + DROP_ITEM1_CHANCE = 0.05; + DROPS_CONTAINER = 1; + CONTAINER_BASE = "chests/quiver_of_frost_arrows"; + CONTAINER_DROP_CHANCE = 0.3; + CONTAINER_SCRIPT = CONTAINER_BASE; + ANIM_ATTACK = "shootorcbow"; + FLINCH_CHANCE = 0.45; + FIN_EXP = 200; + NPC_GIVE_EXP = FIN_EXP; + MOVE_RANGE = 2000; + ATTACK_RANGE = 2000; + ATTACK_HITRANGE = 2000; + ATTACK_MOVERANGE = 2000; + SOUND_KICK = "zombie/claw_miss1.wav"; + } + + void orc_spawn() + { + SetName("Marogar Elite Archer"); + SetHealth(420); + SetHearingSensitivity(2); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + SetModel("monsters/morc.mdl"); + SetModelBody(0, 3); + SetModelBody(1, 3); + SetModelBody(2, 3); + ScheduleDelayedEvent(1.0, "reset_range"); + } + + void reset_range() + { + ATTACK_HITRANGE = 2000; + } + + void shoot_arrow() + { + string TARGET_DIST = GetEntityRange(m_hLastSeen); + string FINAL_TARGET = GetEntityOrigin(m_hLastSeen); + FINAL_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, TARGET_DIST)); + TARGET_DIST /= 100; + SetAngles("add_view.pitch"); + IS_ARROW = 1; + TossProjectile(ARROW_TYPE, /* TODO: $relpos */ $relpos(0, 0, 18), "none", 900, DMG_BOW, ATTACK_CONE_OF_FIRE, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + SetModelBody(3, 0); + EmitSound(GetOwner(), 2, SOUND_BOW, 10); + MELEE_ATK = 0; + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(3, 0); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (GetEntityRange(m_hAttackTarget) >= KICK_RANGE) + { + ANIM_ATTACK = ANIM_BOW; + } + if (!(GetEntityRange(m_hAttackTarget) < KICK_RANGE)) return; + if (!(GetGameTime() > NEXT_KICK)) return; + if (!(ANIM_ATTACK == ANIM_BOW)) return; + PlayAnim("once", "break"); + SetModelBody(3, 0); + ANIM_ATTACK = ANIM_SWIPE; + } + + void swing_sword() + { + ANIM_ATTACK = ANIM_KICK; + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-100, 130, 120); + npcatk_dodamage(m_hAttackTarget, KICK_HITRANGE, DMG_SWIPE, KICK_HITCHANCE); + } + + void kick_land() + { + ANIM_ATTACK = ANIM_SMASH; + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(50, 130, 120); + npcatk_dodamage(m_hAttackTarget, KICK_HITRANGE, DMG_KICK, KICK_HITCHANCE); + } + + void swing_axe() + { + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(50, 130, 120); + npcatk_dodamage(m_hAttackTarget, KICK_HITRANGE, DMG_SMASH, KICK_HITCHANCE); + if (!(GetEntityRange(m_hAttackTarget) < KICK_HITRANGE)) return; + if (!(RandomInt(1, 2) == 1)) return; + ApplyEffect(GetEntityIndex(m_hAttackTarget), "effects/debuff_stun", 7, GetEntityIndex(GetOwner())); + if (!(AM_TURRET)) + { + npcatk_flee(m_hAttackTarget, 600, 2); + } + NEXT_KICK = GetGameTime(); + NEXT_KICK += FREQ_KICK; + } + + void ext_arrow_hit() + { + if (!(param1)) + { + ARROW_MISSED += 1; + } + if ((param1)) + { + ARROW_MISSED = 0; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 400, 110)); + ApplyEffect(param2, "effects/dot_cold", DOT_DUR, GetEntityIndex(GetOwner()), DOT_DMG); + } + if (!(ARROW_MISSED > 3)) return; + change_position(); + ARROW_MISSED = 0; + } + + void change_position() + { + if ((AM_TURRET)) return; + PlayAnim("critical", ANIM_RUN); + chicken_run(3); + } + + void set_turret() + { + AM_TURRET = 1; + SetMoveAnim(ANIM_IDLE); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + NO_STUCK_CHECKS = 1; + SetRoam(false); + } + + void OnPostSpawn() override + { + if (!(AM_TURRET)) return; + SetMoveAnim(ANIM_IDLE); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + NO_STUCK_CHECKS = 1; + SetRoam(false); + } + +} + +} diff --git a/scripts/angelscript/monsters/morc_warrior.as b/scripts/angelscript/monsters/morc_warrior.as new file mode 100644 index 00000000..7bdd2159 --- /dev/null +++ b/scripts/angelscript/monsters/morc_warrior.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class MorcWarrior : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int NPC_GIVE_EXP; + + MorcWarrior() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(5, 10); + NPC_GIVE_EXP = 60; + DROP_ITEM1 = "axes_battleaxe"; + DROP_ITEM1_CHANCE = 0.01; + ANIM_ATTACK = "battleaxe_swing1_L"; + ATTACK_ACCURACY = 0.6; + ATTACK_DMG_LOW = 10; + ATTACK_DMG_HIGH = 35; + Precache("monsters/morc.mdl"); + } + + void orc_spawn() + { + SetHealth(240); + SetName("Marogar Orc Warrior"); + SetHearingSensitivity(1.5); + SetStat("parry", 30); + SetDamageResistance("all", ".9"); + SetDamageResistance("fire", 1.5); + SetDamageResistance("cold", 0.1); + Precache("monsters/morc.mdl"); + SetModel("monsters/morc.mdl"); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummies_getup.as b/scripts/angelscript/monsters/mummies_getup.as new file mode 100644 index 00000000..04a4f124 --- /dev/null +++ b/scripts/angelscript/monsters/mummies_getup.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class MummiesGetup : CGameScript +{ + void OnSpawn() override + { + CallExternal("all", "mummy_getup_now"); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_base.as b/scripts/angelscript/monsters/mummy_base.as new file mode 100644 index 00000000..388b9ed4 --- /dev/null +++ b/scripts/angelscript/monsters/mummy_base.as @@ -0,0 +1,1400 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class MummyBase : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_LONG; + string ANIM_ATTACK_SHORT; + string ANIM_BITE; + string ANIM_BREATH; + string ANIM_BREATH_PREP; + string ANIM_BREATH_START; + string ANIM_BREATH_WALK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH_IDLE; + string ANIM_DEATH_IDLE1; + string ANIM_DEATH_IDLE2; + string ANIM_EAT; + string ANIM_EAT_TO_STAND; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_HEAL; + string ANIM_IDLE; + string ANIM_PIKE_HOLD; + string ANIM_PRE_REBIRTH1; + string ANIM_PRE_REBIRTH2; + string ANIM_REBIRTH1; + string ANIM_REBIRTH2; + string ANIM_RUN; + string ANIM_SQUAT; + string ANIM_SQUAT_TO_STAND; + string ANIM_STEELPIPE; + string ANIM_SUMMON; + string ANIM_UNARMED1; + string ANIM_UNARMED2; + string ANIM_UNARMED3; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITCHANCE; + string ATTACK_HITRANGE; + int ATTACK_HITRANGE_BITE; + int ATTACK_HITRANGE_LONG; + int ATTACK_HITRANGE_SHORT; + string ATTACK_MOVERANGE; + string ATTACK_RANGE; + int ATTACK_RANGE_BITE; + int ATTACK_RANGE_LONG; + int ATTACK_RANGE_SHORT; + string ATTACK_TYPE; + int AURA_RANGE; + int AURA_TYPE; + int CAN_HEAR; + int DMG_BITE; + int DMG_LONGSLASH; + int DMG_PUSH_BEAM; + int DMG_SLASH; + int DMG_STAB; + int DMG_STEELPIPE; + string FLINCH_ANIM; + float FLINCH_CHANCE; + string FLINCH_HEALTH; + float FLINCH_HEALTH_RATIO; + float FREQ_MUMMY_BEAM_ATTACK; + float FREQ_MUMMY_BITE; + float FREQ_MUMMY_BREATH_ATTACK; + int MUMMY_BACKHAND; + int MUMMY_BEAMING; + string MUMMY_BEAM_ABORT_TIME; + int MUMMY_BEAM_ATTACK; + float MUMMY_BEAM_DUR; + string MUMMY_BEAM_ID; + string MUMMY_BEAM_TARGET; + int MUMMY_BREATHING; + int MUMMY_BREATH_ATTACK; + string MUMMY_BREATH_ATTACK_CLSCRIPT; + int MUMMY_BREATH_ATTACK_OFS; + int MUMMY_BREATH_ATTACK_RANGE; + string MUMMY_BREATH_ATTACK_TYPE; + int MUMMY_BREATH_CONE; + int MUMMY_BREATH_DOT; + float MUMMY_BREATH_DOT_DURATION; + float MUMMY_BREATH_DURATION; + string MUMMY_BREATH_TARGET; + string MUMMY_BREATH_TARGETS; + string MUMMY_CANT_GET_UP; + int MUMMY_CLERIC_RANGE; + string MUMMY_CUR_CYCLE_ATTACK; + int MUMMY_CYCLES_STARTED; + string MUMMY_DEFAULT_ANIM_IDLE; + string MUMMY_DEFAULT_ANIM_RUN; + string MUMMY_DEFAULT_ANIM_WALK; + string MUMMY_DMG_LONGSLASH; + string MUMMY_DMG_SLASH; + string MUMMY_DMG_STAB; + string MUMMY_DMG_STEELPIPE; + string MUMMY_HEAL_FLAG; + string MUMMY_HEAL_LIST; + string MUMMY_HEAL_TARGET; + int MUMMY_HIT_BY_HOLY; + string MUMMY_ICE_TARGETS; + int MUMMY_IS_CLERIC; + string MUMMY_LIVES; + string MUMMY_MELEE_DMG_TYPE; + string MUMMY_MELEE_DMG_TYPE_FINAL; + int MUMMY_MUNCHES; + string MUMMY_NAME; + string MUMMY_NEXT_BITE; + string MUMMY_NEXT_PIKE_TOSS; + string MUMMY_NEXT_SUMMON; + string MUMMY_NO_HEALS; + string MUMMY_PUSH_ATTACK; + string MUMMY_REALLY_CANT_GET_UP; + string MUMMY_REBIRTH_SCAN; + string MUMMY_RESUME_MODE; + int MUMMY_STARTING_LIVES; + string MUMMY_START_EAT; + string MUMMY_START_SQUAT; + string MUMMY_STUN_ATTACK; + string MUMMY_TOSSING_PIKE; + int NO_STUCK_CHECKS; + int NPC_FORCED_MOVEDEST; + int NPC_NO_ATTACK; + string NPC_PREV_TARGET; + int NPC_PROXACT_CONE; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_FOV; + int NPC_PROXACT_IFSEEN; + string NPC_PROXACT_RANGE; + int NPC_PROXACT_TRIPPED; + int NPC_PROX_ACTIVATE; + int PLAYING_DEAD; + string REPULSE_TARGETS; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_BEAM_LOOP; + string SOUND_BEAM_START; + string SOUND_BITE_HIT; + string SOUND_BITE_START; + string SOUND_BREATH_END; + string SOUND_BREATH_LOOP; + string SOUND_BREATH_PREP; + string SOUND_DEATH; + string SOUND_HEALED; + string SOUND_HEAL_OTHER; + string SOUND_LOOP_AURA1; + string SOUND_LOOP_AURA2; + string SOUND_MUMMY_BREATH; + string SOUND_PIKE_TOSS; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SUMMON; + + MummyBase() + { + ANIM_DEATH = "dieforward"; + ANIM_BREATH_START = "walkB"; + ANIM_BREATH_WALK = "walkB1"; + ANIM_EAT = "eat"; + ANIM_SQUAT = "trauma"; + ANIM_EAT_TO_STAND = "Egetup"; + ANIM_SQUAT_TO_STAND = "Tgetup"; + ANIM_BREATH_PREP = "walkB"; + ANIM_BREATH = "walkB1"; + ANIM_ATTACK_SHORT = "steelpipe"; + ANIM_ATTACK_LONG = "longslash"; + ANIM_HEAL = "stab"; + ANIM_FLINCH1 = "flinch"; + ANIM_FLINCH2 = "flinch1"; + ANIM_DEATH1 = "dieforward"; + ANIM_DEATH2 = "diebackward"; + ANIM_DEATH1 = "dieforward"; + ANIM_PRE_REBIRTH1 = "seizure"; + ANIM_REBIRTH1 = "getupforw"; + ANIM_DEATH_IDLE1 = "dieforward_idle"; + ANIM_DEATH2 = "diebackward"; + ANIM_PRE_REBIRTH2 = "seizure1"; + ANIM_REBIRTH2 = "getupback"; + ANIM_DEATH_IDLE2 = "diebackward_idle"; + ANIM_UNARMED1 = "slash"; + ANIM_UNARMED2 = "slash1"; + ANIM_UNARMED3 = "stab1"; + ANIM_BITE = "bite"; + ANIM_STEELPIPE = "steelpipe"; + ANIM_PIKE_HOLD = "pike_hold"; + ANIM_SUMMON = "pike_hold"; + FLINCH_CHANCE = 0.2; + FLINCH_HEALTH_RATIO = 0.25; + MUMMY_MELEE_DMG_TYPE = "slash"; + MUMMY_MUNCHES = 0; + FREQ_MUMMY_BITE = 10.0; + MUMMY_CLERIC_RANGE = 1024; + ATTACK_RANGE_SHORT = 64; + ATTACK_HITRANGE_SHORT = 96; + ATTACK_RANGE_LONG = 140; + ATTACK_HITRANGE_LONG = 175; + ATTACK_RANGE_BITE = 52; + ATTACK_HITRANGE_BITE = 53; + ATTACK_HITCHANCE = 80; + ATTACK_TYPE = "short"; + MUMMY_STARTING_LIVES = 1; + AURA_TYPE = 0; + AURA_RANGE = 100; + DMG_SLASH = 200; + DMG_LONGSLASH = 400; + DMG_STAB = 400; + DMG_STEELPIPE = 200; + DMG_BITE = 1000; + MUMMY_IS_CLERIC = 0; + MUMMY_BREATH_ATTACK = 0; + MUMMY_BREATH_ATTACK_TYPE = "bile"; + MUMMY_BREATH_DOT = 50; + MUMMY_BREATH_DOT_DURATION = 10.0; + MUMMY_BREATH_ATTACK_RANGE = 300; + MUMMY_BREATH_ATTACK_OFS = 150; + MUMMY_BREATH_CONE = 30; + FREQ_MUMMY_BREATH_ATTACK = 35.0; + MUMMY_BREATH_DURATION = 4.0; + MUMMY_BREATH_ATTACK_CLSCRIPT = "monsters/mummy_bile_attack_cl"; + MUMMY_BEAM_ATTACK = 0; + FREQ_MUMMY_BEAM_ATTACK = Random(20.0, 30.0); + DMG_PUSH_BEAM = 50; + MUMMY_BEAM_DUR = 5.0; + SOUND_LOOP_AURA1 = "magic/chant_loop.wav"; + SOUND_LOOP_AURA2 = "magic/haunted_loop.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_DEATH = "agrunt/ag_die3.wav"; + SOUND_BREATH_PREP = "monsters/mummy/c_mummycom_bat2.wav"; + SOUND_MUMMY_BREATH = "monsters/mummy/c_mummycom_bat1.wav"; + SOUND_BREATH_LOOP = "magic/bolt_loop.wav"; + SOUND_BREATH_END = "magic/bolt_end.wav"; + SOUND_HEALED = "magic/heal_strike.wav"; + SOUND_HEAL_OTHER = "magic/cast.wav"; + SOUND_BITE_START = "monsters/mummy/c_mummycom_bat2.wav"; + SOUND_BITE_HIT = "bullchicken/bc_bite3.wav"; + SOUND_PIKE_TOSS = "zombie/claw_miss2.wav"; + SOUND_SUMMON = "magic/spawn_loud.wav"; + SOUND_BEAM_START = "magic/bolt_end.wav"; + SOUND_BEAM_LOOP = "magic/bolt_loop.wav"; + } + + void OnSpawn() override + { + SetModel("monsters/mummy.mdl"); + SetWidth(28); + SetHeight(72); + SetBloodType("none"); + SetRace("undead"); + MUMMY_MELEE_DMG_TYPE_FINAL = MUMMY_MELEE_DMG_TYPE; + MUMMY_DMG_SLASH = DMG_SLASH; + MUMMY_DMG_LONGSLASH = DMG_LONGSLASH; + MUMMY_DMG_STAB = DMG_STAB; + MUMMY_DMG_STEELPIPE = DMG_STEELPIPE; + mummy_immunes(); + mummy_spawn(); + MUMMY_NAME = GetEntityProperty(GetOwner(), "name.full"); + MUMMY_LIVES = MUMMY_STARTING_LIVES; + if ((MUMMY_START_EAT)) + { + mummy_force_eat_mode("init"); + } + if ((MUMMY_START_SQUAT)) + { + mummy_force_squat_mode("init"); + } + if (AURA_TYPE == 1) + { + SetModelBody(3, 1); + mummy_aura_sound1(); + mummy_repulse_aura(); + NPC_PROXACT_RANGE = 384; + } + if (AURA_TYPE == 2) + { + SetModelBody(3, 4); + mummy_aura_sound1(); + mummy_ice_aura(); + NPC_PROXACT_RANGE = 384; + } + if (AURA_TYPE == 3) + { + SetModelBody(3, 4); + mummy_aura_sound2(); + mummy_necro_aura(); + NPC_PROXACT_RANGE = 384; + } + if (!(NPC_PROX_ACTIVATE)) + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(6); + SetRoam(true); + } + if ((MUMMY_IS_CLERIC)) + { + ScheduleDelayedEvent(1.0, "mummy_cleric_cycle"); + } + if ((MUMMY_THROWS_PIKE)) + { + ScheduleDelayedEvent(1.0, "mummy_pike_check"); + } + if ((MUMMY_IS_NECRO)) + { + ScheduleDelayedEvent(1.0, "mummy_necro_summon"); + } + MUMMY_DEFAULT_ANIM_RUN = ANIM_RUN; + MUMMY_DEFAULT_ANIM_WALK = ANIM_WALK; + MUMMY_DEFAULT_ANIM_IDLE = ANIM_IDLE; + FLINCH_HEALTH = GetEntityHealth(GetOwner()); + FLINCH_HEALTH *= FLINCH_HEALTH_RATIO; + if (ATTACK_TYPE == "unarmed") + { + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 48; + } + if (ATTACK_TYPE == "melee") + { + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 48; + } + if (ATTACK_TYPE == "long") + { + ATTACK_RANGE = ATTACK_RANGE_LONG; + ATTACK_HITRANGE = ATTACK_HITRANGE_LONG; + } + } + + void game_dynamically_created() + { + LogDebug("game_dynamically_created PARAM1 PARAM2"); + if (param1 == "squat") + { + MUMMY_START_SQUAT = 1; + mummy_force_squat_mode("init"); + } + if (param1 == "eat") + { + MUMMY_START_EAT = 1; + mummy_force_eat_mode("init"); + } + } + + void mummy_immunes() + { + SetDamageResistance("holy", 1.25); + SetDamageResistance("fire", 1.25); + SetDamageResistance("cold", 0.5); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("poison", 0); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("slash", 1.1); + SetDamageResistance("pierce", 0.5); + } + + void cycle_up() + { + if ((MUMMY_CYCLES_STARTED)) return; + MUMMY_CYCLES_STARTED = 1; + if ((MUMMY_BREATH_ATTACK)) + { + if (!(MUMMY_DOUBLE_CYCLE)) + { + } + FREQ_MUMMY_BREATH_ATTACK("mummy_breath_attack"); + } + if ((MUMMY_BEAM_ATTACK)) + { + if (!(MUMMY_DOUBLE_CYCLE)) + { + } + FREQ_MUMMY_BEAM_ATTACK("mummy_beam_attack"); + } + if ((MUMMY_DOUBLE_CYCLE)) + { + MUMMY_CUR_CYCLE_ATTACK = 0; + ScheduleDelayedEvent(1.0, "mummy_double_cycle_event"); + } + } + + void frame_slash() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK1, 10); + LogDebug("frame_slash MUMMY_DMG_SLASH"); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE_SHORT, MUMMY_DMG_SLASH, ATTACK_HITCHANCE, "slash"); + } + + void frame_slash1() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK1, 10); + LogDebug("frame_slash MUMMY_DMG_SLASH"); + MUMMY_BACKHAND = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE_SHORT, MUMMY_DMG_SLASH, ATTACK_HITCHANCE, "slash"); + } + + void frame_stab1() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK1, 10); + LogDebug("frame_slash MUMMY_DMG_SLASH"); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE_SHORT, MUMMY_DMG_SLASH, ATTACK_HITCHANCE, "slash"); + } + + void frame_longslash() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK2, 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE_LONG, MUMMY_DMG_LONGSLASH, ATTACK_HITCHANCE, "slash"); + } + + void frame_stab() + { + if ((MUMMY_HEAL_FLAG)) + { + MUMMY_HEAL_FLAG = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + EmitSound(GetOwner(), 0, SOUND_ATTACK2, 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE_LONG, MUMMY_DMG_STAB, ATTACK_HITCHANCE, "pierce"); + } + + void frame_steelpipe() + { + LogDebug("frame_steelpipe MUMMY_TOSSING_PIKE"); + if ((MUMMY_THROWS_PIKE)) + { + MUMMY_PUSH_ATTACK = 1; + } + if ((MUMMY_TOSSING_PIKE)) + { + SetModelBody(2, 0); + MUMMY_PUSH_ATTACK = 0; + TossProjectile(MUMMY_PROJ_NAME, /* TODO: $relpos */ $relpos(10, 64, 12), m_hAttackTarget, MUMMY_PIKE_SPEED, DMG_PIKE, 0, "none"); + EmitSound(GetOwner(), 0, SOUND_PIKE_TOSS, 10); + MUMMY_TOSSING_PIKE = 0; + } + else + { + EmitSound(GetOwner(), 0, SOUND_ATTACK2, 10); + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE_SHORT, MUMMY_DMG_STEELPIPE, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", MUMMY_MELEE_DMG_TYPE_FINAL, "dmgevent:steelpipe"); + if (MUMMY_STUN_CHANCE > 0) + { + MUMMY_STUN_ATTACK = 1; + } + } + } + + void frame_bite_start() + { + EmitSound(GetOwner(), 0, SOUND_BITE_START, 10); + } + + void frame_bite_dmg() + { + EmitSound(GetOwner(), 0, SOUND_BITE_HIT, 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE_BITE, DMG_BITE, 1.0, "magic"); + MUMMY_NEXT_BITE = GetGameTime(); + MUMMY_NEXT_BITE += FREQ_MUMMY_BITE; + } + + void game_dodamage() + { + if ((MUMMY_STUN_ATTACK)) + { + MUMMY_STUN_ATTACK = 0; + if ((param1)) + { + } + if (RandomInt(1, 100) < MUMMY_STUN_CHANCE) + { + } + ApplyEffect(param2, "effects/debuff_stun", 7.0, GetEntityIndex(GetOwner())); + } + if ((MUMMY_BACKHAND)) + { + MUMMY_BACKHAND = 0; + float RND_LF = Random(-50, 50); + AddVelocity(param2, /* TODO: $relvel */ $relvel(RND_LF, 300, 110)); + } + if ((MUMMY_PUSH_ATTACK)) + { + MUMMY_PUSH_ATTACK = 0; + if ((param1)) + { + } + float RND_LF = Random(-50, 50); + AddVelocity(param2, /* TODO: $relvel */ $relvel(RND_LF, 600, 110)); + } + } + + void npc_selectattack() + { + if (!(ATTACK_TYPE == "unarmed")) return; + int RND_ATTACK = RandomInt(1, 3); + if (RND_ATTACK == 1) + { + ANIM_ATTACK = ANIM_UNARMED1; + } + if (RND_ATTACK == 2) + { + ANIM_ATTACK = ANIM_UNARMED2; + } + if (RND_ATTACK == 3) + { + ANIM_ATTACK = ANIM_UNARMED3; + } + if (!(MUMMY_MUNCHES)) return; + if (!(GetGameTime() > MUMMY_NEXT_BITE)) return; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_RANGE_BITE)) return; + ANIM_ATTACK = ANIM_BITE; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (ATTACK_TYPE == "long") + { + if (GetEntityRange(m_hAttackTarget) <= ATTACK_RANGE_SHORT) + { + ANIM_ATTACK = ANIM_ATTACK_SHORT; + ATTACK_RANGE = ATTACK_RANGE_SHORT; + ATTACK_HITRANGE = ATTACK_HITRANGE_SHORT; + if ((MUMMY_MUNCHES)) + { + if (GetGameTime() > MUMMY_NEXT_BITE) + { + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE_BITE) + { + ANIM_ATTACK = ANIM_BITE; + ATTACK_RANGE = ATTACK_RANGE_BITE; + ATTACK_HITRANGE = ATTACK_HITRANGE_BITE; + } + } + } + else + { + ANIM_ATTACK = ANIM_ATTACK_LONG; + ATTACK_RANGE = ATTACK_RANGE_LONG; + ATTACK_HITRANGE = ATTACK_HITRANGE_LONG; + } + } + if (AURA_TYPE == 2) + { + if ((GetEntityProperty(m_hAttackTarget, "scriptvar"))) + { + } + if (GetEntityRange(m_hAttackTarget) <= AURA_RANGE) + { + ATTACK_MOVERANGE = 32; + ANIM_ATTACK = ANIM_BITE; + ATTACK_RANGE = ATTACK_RANGE_BITE; + ATTACK_HITRANGE = ATTACK_HITRANGE_BITE; + } + else + { + ATTACK_MOVERANGE = 128; + ANIM_ATTACK = ANIM_ATTACK_LONG; + ATTACK_RANGE = ATTACK_RANGE_LONG; + ATTACK_HITRANGE = ATTACK_HITRANGE_LONG; + } + } + } + + void mummy_repulse_aura() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(0.5, "mummy_repulse_aura"); + REPULSE_TARGETS = FindEntitiesInSphere("enemy", AURA_RANGE); + LogDebug("mummy_repulse_aura REPULSE_TARGETS"); + if (!(REPULSE_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(REPULSE_TARGETS, ";"); i++) + { + mummy_repulse_targets(); + } + } + + void mummy_repulse_targets() + { + string CUR_TARG = GetToken(REPULSE_TARGETS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void mummy_aura_sound1() + { + if (!(IsEntityAlive(GetOwner()))) return; + // svplaysound: svplaysound 2 0 SOUND_LOOP_AURA1 + EmitSound(2, 0, SOUND_LOOP_AURA1); + // svplaysound: svplaysound 2 5 SOUND_LOOP_AURA1 + EmitSound(2, 5, SOUND_LOOP_AURA1); + ScheduleDelayedEvent(30.0, "mummy_aura_sound1"); + } + + void mummy_aura_sound2() + { + if (!(IsEntityAlive(GetOwner()))) return; + // svplaysound: svplaysound 2 0 SOUND_LOOP_AURA2 + EmitSound(2, 0, SOUND_LOOP_AURA2); + // svplaysound: svplaysound 2 5 SOUND_LOOP_AURA2 + EmitSound(2, 5, SOUND_LOOP_AURA2); + ScheduleDelayedEvent(30.0, "mummy_aura_sound2"); + } + + void mummy_ice_aura() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(1.0, "mummy_ice_aura"); + MUMMY_ICE_TARGETS = FindEntitiesInSphere("enemy", AURA_RANGE); + if (!(MUMMY_ICE_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(MUMMY_ICE_TARGETS, ";"); i++) + { + mummy_ice_targets(); + } + } + + void mummy_ice_targets() + { + string CUR_TARG = GetToken(MUMMY_ICE_TARGETS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", 5.0, GetEntityIndex(GetOwner()), AURA_DOT); + } + + void mummy_necro_aura() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(0.5, "mummy_necro_aura"); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), AURA_RANGE, DMG_AURA, 1.0, 0); + } + + void spawn_squatting() + { + MUMMY_START_SQUAT = 1; + mummy_force_squat_mode("init"); + } + + void spawn_eating() + { + MUMMY_START_EAT = 1; + mummy_force_eat_mode("init"); + } + + void mummy_getup_now() + { + NPC_PROXACT_TRIPPED = 1; + if ((MUMMY_START_SQUAT)) + { + mummy_squat_to_stand(); + } + if ((MUMMY_START_EAT)) + { + mummy_eat_to_stand(); + } + } + + void mummy_force_eat_mode() + { + SetHearingSensitivity(0); + SetRoam(false); + NPC_PROXACT_TRIPPED = 0; + NPC_PROXACT_IFSEEN = 0; + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 64; + NPC_PROXACT_EVENT = "mummy_eat_to_stand"; + NPC_PROXACT_FOV = 1; + NPC_PROXACT_CONE = 90; + SetIdleAnim(ANIM_EAT); + SetMoveAnim(ANIM_EAT); + PlayAnim("critical", ANIM_EAT); + npcatk_suspend_ai(); + if (param1 != "init") + { + npcatk_proxact_scan(); + } + MUMMY_RESUME_MODE = "eat"; + } + + void mummy_force_squat_mode() + { + SetHearingSensitivity(0); + SetRoam(false); + NPC_PROXACT_TRIPPED = 0; + NPC_PROXACT_IFSEEN = 0; + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 96; + NPC_PROXACT_EVENT = "mummy_squat_to_stand"; + NPC_PROXACT_FOV = 1; + NPC_PROXACT_CONE = 90; + SetIdleAnim(ANIM_SQUAT); + SetMoveAnim(ANIM_SQUAT); + PlayAnim("critical", ANIM_SQUAT); + npcatk_suspend_ai(); + if (param1 != "init") + { + npcatk_proxact_scan(); + } + MUMMY_RESUME_MODE = "squat"; + } + + void mummy_eat_to_stand() + { + SetHearingSensitivity(6); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + SetRoam(true); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_EAT_TO_STAND); + if (!(IsEntityAlive(NPC_PROXACT_PLAYERID))) return; + ScheduleDelayedEvent(1.1, "mummy_target_disturber"); + } + + void mummy_squat_to_stand() + { + SetHearingSensitivity(6); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + SetRoam(true); + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_SQUAT_TO_STAND); + if (!(IsEntityAlive(NPC_PROXACT_PLAYERID))) return; + ScheduleDelayedEvent(1.1, "mummy_target_disturber"); + } + + void mummy_target_disturber() + { + if (!(IsEntityAlive(NPC_PROXACT_PLAYERID))) return; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + npcatk_settarget(NPC_PROXACT_PLAYERID); + } + + void my_target_died() + { + ScheduleDelayedEvent(1.0, "mummy_return_to_proxscan"); + } + + void mummy_return_to_proxscan() + { + if (!(FindEntitiesInSphere("enemy", 256) == "none")) return; + if ((false)) return; + if (MUMMY_RESUME_MODE == "squat") + { + mummy_force_squat_mode(); + } + if (MUMMY_RESUME_MODE == "eat") + { + mummy_force_eat_mode(); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + mummy_auras_off(); + if (MUMMY_BREATH_ATTACK_TYPE == "lightning") + { + // svplaysound: if ( MUMMY_BREATH_ATTACK_TYPE equals lightning ) svplaysound 2 0 SOUND_BREATH_LOOP + EmitSound(2, 0, SOUND_BREATH_LOOP); + } + if (MUMMY_BREATH_ATTACK_TYPE == "ice") + { + // svplaysound: if ( MUMMY_BREATH_ATTACK_TYPE equals ice ) svplaysound 3 0 SOUND_BREATH_LOOP + EmitSound(3, 0, SOUND_BREATH_LOOP); + } + int RND_DEATH = RandomInt(1, 2); + if (RND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH1; + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((MUMMY_HIT_BY_HOLY)) return; + if (!(MUMMY_LIVES > 1)) return; + MUMMY_LIVES -= 1; + PLAYING_DEAD = 1; + if (ANIM_DEATH == ANIM_DEATH1) + { + ANIM_DEATH_IDLE = ANIM_DEATH_IDLE1; + } + if (ANIM_DEATH == ANIM_DEATH2) + { + ANIM_DEATH_IDLE = ANIM_DEATH_IDLE2; + } + npcatk_suspend_ai(); + NPC_NO_ATTACK = 1; + NO_STUCK_CHECKS = 1; + CAN_HEAR = 0; + SetSolid("none"); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + SetInvincible(true); + SetMoveDest("none"); + ANIM_RUN = ANIM_DEATH_IDLE; + ANIM_WALK = ANIM_DEATH_IDLE; + ANIM_IDLE = ANIM_DEATH_IDLE; + SetIdleAnim(ANIM_DEATH_IDLE); + SetMoveAnim(ANIM_DEATH_IDLE); + SetAlive(1); + SetRoam(false); + RandomInt(5, 15)("mummy_rebirth_check"); + } + + void mummy_rebirth_check() + { + npcatk_suspend_ai(); + NPC_NO_ATTACK = 1; + MUMMY_REBIRTH_SCAN = FindEntitiesInSphere("any", 96); + if (ANIM_DEATH == ANIM_DEATH1) + { + PlayAnim("critical", ANIM_PRE_REBIRTH1); + } + if (ANIM_DEATH == ANIM_DEATH2) + { + PlayAnim("critical", ANIM_PRE_REBIRTH2); + } + if (MUMMY_REBIRTH_SCAN != "none") + { + MUMMY_CANT_GET_UP = 1; + MUMMY_REALLY_CANT_GET_UP = 0; + for (int i = 0; i < GetTokenCount(MUMMY_REBIRTH_SCAN, ";"); i++) + { + mummy_rebirth_scan_loop(); + } + if ((MUMMY_REALLY_CANT_GET_UP)) + { + MUMMY_CANT_GET_UP = 1; + } + } + if (MUMMY_REBIRTH_SCAN == "none") + { + MUMMY_CANT_GET_UP = 0; + } + if ((MUMMY_CANT_GET_UP)) + { + ScheduleDelayedEvent(1.0, "mummy_rebirth_check"); + } + else + { + mummy_rebirth(); + } + } + + void mummy_rebirth_scan_loop() + { + string CUR_TARG = GetToken(MUMMY_REBIRTH_SCAN, i, ";"); + if ((GetEntityProperty(CUR_TARG, "itemname")).findFirst("mummy") >= 0) + { + if ((GetEntityProperty(CUR_TARG, "scriptvar"))) + { + if (GetGameTime() > G_MUMMY_NEXT_REBIRTH) + { + } + SetGlobalVar("G_MUMMY_NEXT_REBIRTH", GetGameTime()); + G_MUMMY_NEXT_REBIRTH += 5.0; + MUMMY_CANT_GET_UP = 0; + LogDebug("can get up game.time vs. G_MUMMY_NEXT_REBIRTH"); + } + else + { + MUMMY_CANT_GET_UP = 1; + MUMMY_REALLY_CANT_GET_UP = 1; + } + } + else + { + MUMMY_CANT_GET_UP = 1; + MUMMY_REALLY_CANT_GET_UP = 1; + } + } + + void mummy_rebirth() + { + SetSolid("box"); + SetRace("undead"); + SetHealth(GetEntityMaxHealth(GetOwner())); + NPC_GIVE_EXP /= 2; + SetSkillLevel(NPC_GIVE_EXP); + PLAYING_DEAD = 0; + ScheduleDelayedEvent(1.0, "mummy_rebirth2"); + } + + void mummy_rebirth2() + { + SetInvincible(false); + ANIM_RUN = MUMMY_DEFAULT_ANIM_RUN; + ANIM_WALK = MUMMY_DEFAULT_ANIM_WALK; + ANIM_IDLE = MUMMY_DEFAULT_ANIM_IDLE; + NO_STUCK_CHECKS = 0; + CAN_HEAR = 1; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + if (ANIM_DEATH == ANIM_DEATH1) + { + PlayAnim("critical", ANIM_REBIRTH1); + } + if (ANIM_DEATH == ANIM_DEATH2) + { + PlayAnim("critical", ANIM_REBIRTH2); + } + NPC_PREV_TARGET = "unset"; + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + NPC_NO_ATTACK = 0; + ScheduleDelayedEvent(1.1, "mummy_rebirth3"); + } + + void mummy_rebirth3() + { + SetRoam(true); + } + + void OnDamage(int damage) override + { + if (!(param3 == "holy")) return; + MUMMY_HIT_BY_HOLY = 1; + MUMMY_LIVES = 1; + } + + void mummy_auras_off() + { + SetModelBody(3, 0); + if (AURA_TYPE == 1) + { + // svplaysound: if ( AURA_TYPE == 1 ) svplaysound 2 0 SOUND_LOOP_AURA1 + EmitSound(2, 0, SOUND_LOOP_AURA1); + } + if (AURA_TYPE == 2) + { + // svplaysound: if ( AURA_TYPE == 2 ) svplaysound 2 0 SOUND_LOOP_AURA2 + EmitSound(2, 0, SOUND_LOOP_AURA2); + } + } + + void set_no_fake_death() + { + MUMMY_LIVES = 1; + } + + void mummy_cleric_cycle() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(3.0, "mummy_cleric_cycle"); + if (MUMMY_NO_HEALS > GetGameTime()) + { + ATTACK_MOVERANGE = 48; + } + MUMMY_HEAL_LIST = FindEntitiesInSphere("ally", MUMMY_CLERIC_RANGE); + if (MUMMY_HEAL_LIST == "none") + { + MUMMY_NO_HEALS = GetGameTime(); + MUMMY_NO_HEALS += 10.0; + } + if (!(MUMMY_HEAL_LIST != "none")) return; + ATTACK_MOVERANGE = 1024; + ScrambleTokens(MUMMY_HEAL_LIST, ";"); + MUMMY_HEAL_TARGET = "none"; + mummy_find_heal_target(); + if (!(MUMMY_HEAL_TARGET != "none")) return; + CallExternal(MUMMY_HEAL_TARGET, "mummy_healed"); + EmitSound(GetOwner(), 0, SOUND_HEAL_OTHER, 10); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 64, 1, 1); + npcatk_suspend_ai(1.0); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(MUMMY_HEAL_TARGET); + ScheduleDelayedEvent(0.1, "mummy_cleric_heal_anim"); + } + + void mummy_cleric_heal_anim() + { + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_HEAL); + MUMMY_HEAL_FLAG = 1; + } + + void mummy_find_heal_target() + { + string CUR_TARG = GetToken(MUMMY_HEAL_LIST, i, ";"); + if (!(IsEntityAlive(CUR_TARG))) return; + if (!(GetEntityHealth(CUR_TARG) < GetEntityMaxHealth(CUR_TARG))) return; + if (!((GetEntityProperty(CUR_TARG, "itemname")).findFirst("mummy") >= 0)) return; + MUMMY_HEAL_TARGET = CUR_TARG; + } + + void mummy_healed() + { + Effect("glow", GetOwner(), Vector3(0, 255, 0), 256, 1, 1); + EmitSound(GetOwner(), 0, SOUND_HEALED, 10); + SetHealth(GetMonsterMaxHP()); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((MUMMY_BEAMING)) + { + mummy_beam_new_target(GetEntityIndex(m_hLastStruck)); + } + if (!(MUMMY_IS_CLERIC)) return; + if (!(ATTACK_MOVE_RANGE == 1024)) return; + if (!(GetEntityRange(m_hLastStruck) < 128)) return; + ATTACK_MOVERANGE = 48; + } + + void ext_setbody() + { + SetModelBody(param1, param2); + } + + void OnFlinch() + { + int RND_FLINCH = RandomInt(1, 2); + if (RND_FLINCH == 1) + { + FLINCH_ANIM = ANIM_FLINCH1; + } + if (RND_FLINCH == 1) + { + FLINCH_ANIM = ANIM_FLINCH2; + } + } + + void mummy_pike_check() + { + ScheduleDelayedEvent(1.0, "mummy_pike_check"); + if (!(false)) return; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_RANGE_LONG)) return; + if (!(GetGameTime() > MUMMY_NEXT_PIKE_TOSS)) return; + MUMMY_NEXT_PIKE_TOSS = GetGameTime(); + MUMMY_NEXT_PIKE_TOSS += FREQ_MUMMY_PIKE_TOSS; + MUMMY_TOSSING_PIKE = 1; + if (!(MUMMY_PIKE_NOGLOW)) + { + SetModelBody(2, 7); + } + npcatk_suspend_ai(); + SetMoveDest(m_hAttackTarget); + ANIM_RUN = ANIM_PIKE_HOLD; + ANIM_IDLE = ANIM_PIKE_HOLD; + SetMoveAnim(ANIM_PIKE_HOLD); + SetIdleAnim(ANIM_PIKE_HOLD); + NPC_FORCED_MOVEDEST = 1; + SetRoam(false); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 2.0; + PlayAnim("critical", ANIM_STEELPIPE); + ScheduleDelayedEvent(1.5, "mummy_pike_reload"); + } + + void mummy_pike_reload() + { + SetModelBody(2, 7); + SetRoam(true); + npcatk_resume_ai(); + ANIM_RUN = MUMMY_DEFAULT_ANIM_RUN; + ANIM_IDLE = MUMMY_DEFAULT_ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + MUMMY_TOSSING_PIKE = 0; + ScheduleDelayedEvent(0.5, "mummy_pike_reload2"); + } + + void mummy_pike_reload2() + { + SetModelBody(2, 6); + } + + void ext_projectile_hit() + { + MUMMY_NEXT_PIKE_TOSS += 10.0; + } + + void mummy_necro_summon() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(1.0, "mummy_necro_summon"); + if (!(m_hAttackTarget != "unset")) return; + int L_MAX_SUMMONS = 2; + if (L_MAX_SUMMONS < GetPlayerCount()) + { + string L_MAX_SUMMONS = GetPlayerCount(); + } + if (!(MUMMY_NSUMMONS < L_MAX_SUMMONS)) return; + if (!(GetGameTime() > MUMMY_NEXT_SUMMON)) return; + MUMMY_NEXT_SUMMON = GetGameTime(); + MUMMY_NEXT_SUMMON += FREQ_MUMMY_SUMMON; + npcatk_suspend_ai(); + ANIM_RUN = ANIM_SUMMON; + ANIM_IDLE = ANIM_SUMMON; + SetRoam(false); + SetMoveAnim(ANIM_SUMMON); + SetIdleAnim(ANIM_SUMMON); + ScheduleDelayedEvent(1.0, "mummy_necro_summon2"); + } + + void mummy_necro_summon2() + { + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 1, 1); + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + MUMMY_NSUMMONS += 1; + string SUMMON_POINT = /* TODO: $relpos */ $relpos(0, 64, 0); + SpawnNPC(MUMMY_SUMMON_SCRIPT, SUMMON_POINT, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), m_hAttackTarget, SUMMON_POINT + ScheduleDelayedEvent(2.0, "mummy_necro_summon3"); + } + + void mummy_necro_summon3() + { + npcatk_resume_ai(); + ANIM_RUN = MUMMY_DEFAULT_ANIM_RUN; + ANIM_IDLE = MUMMY_DEFAULT_ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + } + + void ext_wraith_died() + { + MUMMY_NSUMMONS -= 1; + MUMMY_NEXT_SUMMON = GetGameTime(); + MUMMY_NEXT_SUMMON += FREQ_MUMMY_SUMMON; + } + + void mummy_beam_attack() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(MUMMY_DOUBLE_CYCLE)) + { + FREQ_MUMMY_BEAM_ATTACK("mummy_beam_attack"); + } + if ((PLAYING_DEAD)) return; + if ((MUMMY_BREATHING)) return; + if ((MUMMY_BEAMING)) return; + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(false)) return; + MUMMY_BEAMING = 1; + MUMMY_BEAM_TARGET = m_hAttackTarget; + npcatk_suspend_ai(); + ANIM_RUN = ANIM_PIKE_HOLD; + ANIM_IDLE = ANIM_PIKE_HOLD; + SetRoam(false); + SetMoveAnim(ANIM_PIKE_HOLD); + SetIdleAnim(ANIM_PIKE_HOLD); + Effect("beam", "ents", "lgtning.spr", 200, GetOwner(), 2, MUMMY_BEAM_TARGET, 0, Vector3(255, 255, 0), 255, 20, MUMMY_BEAM_DUR); + MUMMY_BEAM_ID = m_hLastCreated; + EmitSound(GetOwner(), 0, SOUND_BEAM_START, 10); + // svplaysound: svplaysound 2 10 SOUND_BEAM_LOOP + EmitSound(2, 10, SOUND_BEAM_LOOP); + ClientEvent("new", "all", "effects/sfx_attach_sprite", "0;1.0;255;add;(255,255,0);30;1", GetEntityIndex(GetOwner()), 1, MUMMY_BEAM_DUR, "3dmflaora.spr"); + MUMMY_BEAM_ABORT_TIME = GetGameTime(); + MUMMY_BEAM_ABORT_TIME += MUMMY_BEAM_DUR; + MUMMY_BEAM_ABORT_TIME += 1.0; + mummy_beam_attack_loop(); + MUMMY_BEAM_DUR("mummy_beam_attack_end"); + } + + void mummy_beam_attack_end() + { + Effect("beam", "update", MUMMY_BEAM_ID, "remove", 0.1); + // svplaysound: svplaysound 2 0 SOUND_BEAM_LOOP + EmitSound(2, 0, SOUND_BEAM_LOOP); + MUMMY_BEAMING = 0; + npcatk_resume_ai(); + ANIM_RUN = MUMMY_DEFAULT_ANIM_RUN; + ANIM_IDLE = MUMMY_DEFAULT_ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + } + + void mummy_beam_new_target() + { + if (!((param1 !is null))) return; + if (!(IsEntityAlive(param1))) return; + string MY_STAFF_ORG = GetEntityProperty(GetOwner(), "attachpos"); + string ATTACKER_ORG = GetEntityOrigin(param1); + string TRACE_LINE = TraceLine(MY_STAFF_ORG, ATTACKER_ORG); + if (!(TRACE_LINE == ATTACKER_ORG)) return; + MUMMY_BEAM_TARGET = param1; + Effect("beam", "update", MUMMY_BEAM_ID, "end_target", MUMMY_BEAM_TARGET, 0); + } + + void mummy_beam_attack_loop() + { + if (GetGameTime() > MUMMY_BEAM_ABORT_TIME) + { + mummy_beam_attack_end(); + } + if (!(MUMMY_BEAMING)) return; + ScheduleDelayedEvent(0.1, "mummy_beam_attack_loop"); + if (!(IsEntityAlive(MUMMY_BEAM_TARGET))) + { + Effect("beam", "update", MUMMY_BEAM_ID, "brightness", 0); + string NEW_TARGET = FindEntitiesInSphere("enemy", 1024); + ScrambleTokens(NEW_TARGET, ";"); + mummy_beam_new_target(NEW_TARGET); + } + else + { + SetMoveDest(MUMMY_BEAM_TARGET); + string BEAM_START = GetEntityProperty(GetOwner(), "attachpos"); + string BEAM_END = GetEntityOrigin(MUMMY_BEAM_TARGET); + string BEAM_TRACE = TraceLine(BEAM_START, BEAM_END); + if (BEAM_TRACE != BEAM_END) + { + Effect("beam", "update", MUMMY_BEAM_ID, "brightness", 0); + } + else + { + Effect("beam", "update", MUMMY_BEAM_ID, "brightness", 255); + string VEL_SET = /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(-500, 1000, 30)); + SetVelocity(MUMMY_BEAM_TARGET, VEL_SET); + DoDamage(MUMMY_BEAM_TARGET, "direct", DMG_PUSH_BEAM, 1.0, GetOwner()); + } + } + } + + void mummy_breath_attack() + { + if ((IsEntityAlive(GetOwner()))) + { + if (!(PLAYING_DEAD)) + { + } + if (!(MUMMY_BREATHING)) + { + } + if (!(MUMMY_BEAMING)) + { + } + if ((IsEntityAlive(m_hAttackTarget))) + { + } + if ((CanSee(m_hAttackTarget, 512))) + { + } + int DO_BREATH_ATTACK = 1; + } + if ((DO_BREATH_ATTACK)) + { + if (!(MUMMY_DOUBLE_CYCLE)) + { + } + FREQ_MUMMY_BREATH_ATTACK("mummy_breath_attack"); + } + else + { + if (!(MUMMY_DOUBLE_CYCLE)) + { + } + ScheduleDelayedEvent(2.0, "mummy_breath_attack"); + } + if (!(DO_BREATH_ATTACK)) return; + MUMMY_BREATHING = 1; + MUMMY_DEFAULT_ANIM_RUN = ANIM_RUN; + ANIM_RUN = ANIM_BREATH_WALK; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_BREATH_WALK); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("critical", ANIM_BREATH_PREP); + EmitSound(GetOwner(), 0, SOUND_BREATH_PREP, 10); + ScheduleDelayedEvent(1.5, "mummy_breath_start"); + MUMMY_BREATH_DURATION("mummy_breath_stop"); + MUMMY_BREATH_TARGET = m_hAttackTarget; + npcatk_suspend_ai(); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + } + + void mummy_breath_start() + { + if (MUMMY_BREATH_ATTACK_TYPE == "lightning") + { + // svplaysound: if ( MUMMY_BREATH_ATTACK_TYPE equals lightning ) svplaysound 2 10 SOUND_BREATH_LOOP + EmitSound(2, 10, SOUND_BREATH_LOOP); + } + if (MUMMY_BREATH_ATTACK_TYPE == "ice") + { + // svplaysound: if ( MUMMY_BREATH_ATTACK_TYPE equals ice ) svplaysound 3 10 SOUND_BREATH_LOOP + EmitSound(3, 10, SOUND_BREATH_LOOP); + } + EmitSound(GetOwner(), 0, SOUND_MUMMY_BREATH, 10); + ClientEvent("new", "all", MUMMY_BREATH_ATTACK_CLSCRIPT, GetEntityIndex(GetOwner()), MUMMY_BREATH_DURATION); + mummy_breath_loop(); + } + + void mummy_breath_loop() + { + if (!(MUMMY_BREATHING)) return; + ScheduleDelayedEvent(0.5, "mummy_breath_loop"); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + string BREATH_CENTER = GetEntityOrigin(GetOwner()); + BREATH_CENTER += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, MUMMY_BREATH_ATTACK_OFS, 0)); + MUMMY_BREATH_TARGETS = FindEntitiesInSphere("enemy", MUMMY_BREATH_ATTACK_RANGE); + if (!(MUMMY_BREATH_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(MUMMY_BREATH_TARGETS, ";"); i++) + { + mummy_breath_affect_targets(); + } + } + + void mummy_breath_stop() + { + npcatk_resume_ai(); + MUMMY_BREATHING = 0; + ANIM_RUN = MUMMY_DEFAULT_ANIM_RUN; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + PlayAnim("critical", ANIM_BREATH_WALK); + if (MUMMY_BREATH_ATTACK_TYPE == "lightning") + { + ScheduleDelayedEvent(1.0, "mummy_breath_stop_sound"); + } + if (MUMMY_BREATH_ATTACK_TYPE == "ice") + { + // svplaysound: if ( MUMMY_BREATH_ATTACK_TYPE equals ice ) svplaysound 3 0 SOUND_BREATH_LOOP + EmitSound(3, 0, SOUND_BREATH_LOOP); + } + } + + void mummy_breath_stop_sound() + { + EmitSound(GetOwner(), 0, SOUND_BREATH_END, 10); + // svplaysound: svplaysound 2 0 SOUND_BREATH_LOOP + EmitSound(2, 0, SOUND_BREATH_LOOP); + } + + void mummy_breath_affect_targets() + { + string CUR_TARG = GetToken(MUMMY_BREATH_TARGETS, i, ";"); + if (!(GetEntityRange(CUR_TARG) < MUMMY_BREATH_ATTACK_RANGE)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + string MY_MOUTH_ORG = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_LINE = TraceLine(MY_MOUTH_ORG, TARG_ORG); + if (!(TRACE_LINE == TARG_ORG)) return; + if (MUMMY_BREATH_ATTACK_TYPE == "bile") + { + ApplyEffect(CUR_TARG, "effects/dot_poison_blind", MUMMY_BREATH_DOT_DURATION, GetEntityIndex(GetOwner()), MUMMY_BREATH_DOT); + } + if (MUMMY_BREATH_ATTACK_TYPE == "lightning") + { + DoDamage(CUR_TARG, "direct", MUMMY_BREATH_DOT, 1.0, GetOwner()); + ApplyEffect(CUR_TARG, "effects/dot_lightning", MUMMY_BREATH_DOT_DURATION, GetEntityIndex(GetOwner()), MUMMY_BREATH_DOT); + string ZAP_TARG_RESIST = /* TODO: $get_takedmg */ $get_takedmg(CUR_TARG, "lightning"); + float ZAP_ROLL = Random(0.0, 2.0); + if (ZAP_ROLL < ZAP_TARG_RESIST) + { + } + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 10))); + } + if (MUMMY_BREATH_ATTACK_TYPE == "ice") + { + ApplyEffect(CUR_TARG, "effects/dot_cold", MUMMY_BREATH_DOT_DURATION, GetEntityIndex(GetOwner()), MUMMY_BREATH_DOT); + } + } + + void mummy_double_cycle_event() + { + if (!(IsEntityAlive(GetOwner()))) return; + MUMMY_FREQ_DOUBLE_CYCLE("mummy_double_cycle_event"); + if ((PLAYING_DEAD)) return; + if ((MUMMY_BREATHING)) return; + if ((MUMMY_BEAMING)) return; + if (!(IsEntityAlive(m_hAttackTarget))) return; + MUMMY_CUR_CYCLE_ATTACK += 1; + if (MUMMY_CUR_CYCLE_ATTACK == 1) + { + mummy_beam_attack(); + } + if (MUMMY_CUR_CYCLE_ATTACK == 2) + { + mummy_breath_attack(); + MUMMY_CUR_CYCLE_ATTACK = 0; + } + } + + void set_cleric_range() + { + MUMMY_CLERIC_RANGE = param2; + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_bile_attack_cl.as b/scripts/angelscript/monsters/mummy_bile_attack_cl.as new file mode 100644 index 00000000..3976cb57 --- /dev/null +++ b/scripts/angelscript/monsters/mummy_bile_attack_cl.as @@ -0,0 +1,67 @@ +#pragma context client + +namespace MS +{ + +class MummyBileAttackCl : CGameScript +{ + int DO_PUKE; + string MY_OWNER; + string PUKE_SPRITE; + int PUKE_SPRITE_FRAMES; + + MummyBileAttackCl() + { + PUKE_SPRITE = "bloodspray.spr"; + PUKE_SPRITE_FRAMES = 10; + Precache(PUKE_SPRITE); + } + + void client_activate() + { + MY_OWNER = param1; + DO_PUKE = 1; + puke_loop(); + ScheduleDelayedEvent(4.0, "end_puke"); + } + + void end_puke() + { + DO_PUKE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void puke_loop() + { + if (!(DO_PUKE)) return; + ScheduleDelayedEvent(0.1, "puke_loop"); + ClientEffect("tempent", "sprite", PUKE_SPRITE, /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"), "setup_puke"); + } + + void setup_puke() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", PUKE_SPRITE_FRAMES); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(1.5, 2.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(2, 4)); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + string CLOUD_ANG = /* TODO: $getcl */ $getcl(MY_OWNER, "angles.yaw"); + float RND_RL = Random(-10, 10); + float RND_UD = Random(-220, -180); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(-75, CLOUD_ANG, 0), Vector3(RND_RL, 400, RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_cleric.as b/scripts/angelscript/monsters/mummy_cleric.as new file mode 100644 index 00000000..61a9daea --- /dev/null +++ b/scripts/angelscript/monsters/mummy_cleric.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyCleric : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string ATTACK_TYPE; + int DMG_STEELPIPE; + int FLINCH_DAMAGE_THRESHOLD; + float FLINCH_HEALTH_RATIO; + int MUMMY_IS_CLERIC; + string MUMMY_MELEE_DMG_TYPE; + int MUMMY_STARTING_LIVES; + float MUMMY_STUN_CHANCE; + int NPC_GIVE_EXP; + + MummyCleric() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk2"; + ANIM_IDLE = "idle1"; + NPC_GIVE_EXP = 1000; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 96; + ATTACK_MOVERANGE = 48; + ANIM_ATTACK = "steelpipe"; + FLINCH_DAMAGE_THRESHOLD = 50; + FLINCH_HEALTH_RATIO = 0.75; + ATTACK_TYPE = "melee"; + ATTACK_HITCHANCE = 80; + DMG_STEELPIPE = 400; + MUMMY_STARTING_LIVES = 1; + MUMMY_IS_CLERIC = 1; + MUMMY_MELEE_DMG_TYPE = "blunt"; + MUMMY_STUN_CHANCE = 0.2; + } + + void mummy_spawn() + { + SetName("Mummy High Priest"); + SetHealth(5000); + SetModelBody(0, 1); + SetModelBody(1, 4); + SetModelBody(2, 4); + SetModelBody(3, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_cursed.as b/scripts/angelscript/monsters/mummy_cursed.as new file mode 100644 index 00000000..6c4b95f3 --- /dev/null +++ b/scripts/angelscript/monsters/mummy_cursed.as @@ -0,0 +1,97 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyCursed : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_LONG; + string ANIM_ATTACK_SHORT; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float AS_STUCK_FREQ; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string ATTACK_TYPE; + int AURA_RANGE; + int AURA_TYPE; + int DMG_LONGSLASH; + int DMG_SLASH; + float FREQ_MUMMY_BREATH_ATTACK; + int MUMMY_BREATH_ATTACK; + string MUMMY_BREATH_ATTACK_CLSCRIPT; + int MUMMY_BREATH_ATTACK_OFS; + int MUMMY_BREATH_ATTACK_RANGE; + string MUMMY_BREATH_ATTACK_TYPE; + int MUMMY_BREATH_CONE; + int MUMMY_BREATH_DOT; + float MUMMY_BREATH_DOT_DURATION; + float MUMMY_BREATH_DURATION; + int MUMMY_STARTING_LIVES; + int NPC_GIVE_EXP; + + MummyCursed() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk1"; + ANIM_IDLE = "idle1"; + NPC_GIVE_EXP = 500; + ATTACK_RANGE = 140; + ATTACK_HITRANGE = 175; + ATTACK_MOVERANGE = 128; + ANIM_ATTACK = "longslash"; + AS_STUCK_FREQ = 0.5; + ANIM_ATTACK_SHORT = "slash"; + ANIM_ATTACK_LONG = "longslash"; + AURA_TYPE = 1; + AURA_RANGE = 100; + ATTACK_TYPE = "long"; + ATTACK_HITCHANCE = 80; + DMG_SLASH = 200; + DMG_LONGSLASH = 400; + MUMMY_STARTING_LIVES = 1; + MUMMY_BREATH_ATTACK = 1; + MUMMY_BREATH_ATTACK_TYPE = "bile"; + MUMMY_BREATH_DOT = 50; + MUMMY_BREATH_DOT_DURATION = 10.0; + MUMMY_BREATH_ATTACK_RANGE = 250; + MUMMY_BREATH_ATTACK_OFS = 125; + FREQ_MUMMY_BREATH_ATTACK = Random(20.0, 35.0); + MUMMY_BREATH_CONE = 30; + MUMMY_BREATH_DURATION = 4.0; + MUMMY_BREATH_ATTACK_CLSCRIPT = "monsters/mummy_bile_attack_cl"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(15.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 0, 0), 128, 15.0); + } + + void mummy_spawn() + { + SetName("Cursed Crypt Fiend"); + SetHealth(2000); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 1); + } + + void OnPostSpawn() override + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 0, 0), 128, 15.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_fodder.as b/scripts/angelscript/monsters/mummy_fodder.as new file mode 100644 index 00000000..858f96af --- /dev/null +++ b/scripts/angelscript/monsters/mummy_fodder.as @@ -0,0 +1,52 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyFodder : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float AS_STUCK_FREQ; + int ATTACK_HITCHANCE; + string ATTACK_TYPE; + int DMG_SLASH; + float FLINCH_HEALTH_RATIO; + int MUMMY_STARTING_LIVES; + int NPC_GIVE_EXP; + + MummyFodder() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk1"; + ANIM_IDLE = "idle1"; + ANIM_DEATH = "dieforward"; + NPC_GIVE_EXP = 200; + ANIM_ATTACK = "stab1"; + FLINCH_HEALTH_RATIO = 0.5; + AS_STUCK_FREQ = 0.5; + ATTACK_TYPE = "unarmed"; + ATTACK_HITCHANCE = 80; + DMG_SLASH = 100; + MUMMY_STARTING_LIVES = RandomInt(1, 4); + } + + void mummy_spawn() + { + SetName("Crypt Fiend"); + SetHealth(1000); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetDamageResistance("holy", 1.5); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_ice.as b/scripts/angelscript/monsters/mummy_ice.as new file mode 100644 index 00000000..c9ef9941 --- /dev/null +++ b/scripts/angelscript/monsters/mummy_ice.as @@ -0,0 +1,109 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyIce : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_LONG; + string ANIM_ATTACK_SHORT; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float AS_STUCK_FREQ; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string ATTACK_TYPE; + int AURA_DOT; + int AURA_RANGE; + int AURA_TYPE; + int DMG_LONGSLASH; + int DMG_SLASH; + float FREQ_MUMMY_BITE; + float FREQ_MUMMY_BREATH_ATTACK; + int MUMMY_BREATH_ATTACK; + string MUMMY_BREATH_ATTACK_CLSCRIPT; + int MUMMY_BREATH_ATTACK_OFS; + int MUMMY_BREATH_ATTACK_RANGE; + string MUMMY_BREATH_ATTACK_TYPE; + int MUMMY_BREATH_CONE; + int MUMMY_BREATH_DOT; + float MUMMY_BREATH_DOT_DURATION; + float MUMMY_BREATH_DURATION; + int MUMMY_MUNCHES; + int MUMMY_STARTING_LIVES; + int NPC_GIVE_EXP; + string SOUND_BREATH_LOOP; + + MummyIce() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk1"; + ANIM_IDLE = "idle1"; + NPC_GIVE_EXP = 2000; + ATTACK_RANGE = 140; + ATTACK_HITRANGE = 175; + ATTACK_MOVERANGE = 128; + ANIM_ATTACK = "longslash"; + AS_STUCK_FREQ = 0.5; + ANIM_ATTACK_SHORT = "slash"; + ANIM_ATTACK_LONG = "longslash"; + AURA_TYPE = 2; + AURA_RANGE = 100; + AURA_DOT = 25; + ATTACK_TYPE = "long"; + ATTACK_HITCHANCE = 80; + DMG_SLASH = 300; + DMG_LONGSLASH = 600; + MUMMY_STARTING_LIVES = 1; + FREQ_MUMMY_BITE = 1.0; + MUMMY_BREATH_ATTACK = 1; + MUMMY_BREATH_ATTACK_TYPE = "ice"; + MUMMY_BREATH_DOT = 100; + MUMMY_BREATH_DOT_DURATION = 10.0; + MUMMY_BREATH_ATTACK_RANGE = 300; + MUMMY_BREATH_ATTACK_OFS = 150; + FREQ_MUMMY_BREATH_ATTACK = Random(20.0, 35.0); + MUMMY_BREATH_CONE = 15; + MUMMY_BREATH_DURATION = 8.0; + MUMMY_BREATH_ATTACK_CLSCRIPT = "monsters/mummy_ice_breath_cl"; + SOUND_BREATH_LOOP = "ambience/steamjet1.wav"; + MUMMY_MUNCHES = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(15.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 128, 255), 128, 15.0); + } + + void mummy_spawn() + { + SetName("Mummified Ice Lord"); + SetHealth(6000); + SetDamageResistance("all", 0.75); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 1.75); + SetModelBody(0, 1); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 1); + SetProp(GetOwner(), "skin", 1); + } + + void OnPostSpawn() override + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 128, 255), 128, 15.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_ice_breath_cl.as b/scripts/angelscript/monsters/mummy_ice_breath_cl.as new file mode 100644 index 00000000..e863ba88 --- /dev/null +++ b/scripts/angelscript/monsters/mummy_ice_breath_cl.as @@ -0,0 +1,58 @@ +#pragma context client + +namespace MS +{ + +class MummyIceBreathCl : CGameScript +{ + int FX_ACTIVE; + string MY_OWNER; + + void client_activate() + { + MY_OWNER = param1; + FX_ACTIVE = 1; + fx_loop(); + PARAM2("fx_end"); + } + + void fx_end() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.05, "fx_loop"); + ClientEffect("tempent", "sprite", "char_breath.spr", /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"), "setup_sprite"); + } + + void setup_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 30); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(1.5, 2.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(-1, 1)); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + string CLOUD_ANG = /* TODO: $getcl */ $getcl(MY_OWNER, "angles.yaw"); + float RND_RL = Random(-30, 30); + float RND_SPEED = Random(350, 400); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, RND_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_lightning_breath_cl.as b/scripts/angelscript/monsters/mummy_lightning_breath_cl.as new file mode 100644 index 00000000..72ec829b --- /dev/null +++ b/scripts/angelscript/monsters/mummy_lightning_breath_cl.as @@ -0,0 +1,67 @@ +#pragma context client + +namespace MS +{ + +class MummyLightningBreathCl : CGameScript +{ + int BEAM_ON; + string FX_DURATION; + string MY_OWNER; + + void client_activate() + { + MY_OWNER = param1; + FX_DURATION = param2; + BEAM_ON = 1; + beam_loop(); + FX_DURATION("end_fx"); + } + + void beam_loop() + { + if (!(BEAM_ON)) return; + ScheduleDelayedEvent(0.01, "beam_loop"); + string SPARK_ORG = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPARK_ORG, "ke_spit_sparks"); + string BEAM_START = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"); + string BEAM_END = BEAM_START; + string BEAM_ANG = /* TODO: $getcl */ $getcl(MY_OWNER, "angles.yaw"); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, BEAM_ANG, 0), Vector3(Random(-32, 32), 400, Random(-100, 100))); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.1, 2, 0.1, 0.3, 0.1, 30, Vector3(2, 1.5, 0.25)); + } + + void end_fx() + { + BEAM_ON = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void ke_spit_sparks() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.1, 0.75)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 128)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(1.0, 3.0)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + string CLOUD_ANG = /* TODO: $getcl */ $getcl(MY_OWNER, "angles.yaw"); + float RND_RL = Random(-100, 100); + float RND_UD = Random(-220, -180); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(-75, CLOUD_ANG, 0), Vector3(RND_RL, 400, RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_necro.as b/scripts/angelscript/monsters/mummy_necro.as new file mode 100644 index 00000000..00ce55c7 --- /dev/null +++ b/scripts/angelscript/monsters/mummy_necro.as @@ -0,0 +1,80 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyNecro : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string ATTACK_TYPE; + int AURA_TYPE; + int DMG_AURA; + int DMG_STEELPIPE; + int FLINCH_DAMAGE_THRESHOLD; + float FLINCH_HEALTH_RATIO; + float FREQ_MUMMY_SUMMON; + int MUMMY_IS_NECRO; + string MUMMY_MELEE_DMG_TYPE; + int MUMMY_STARTING_LIVES; + float MUMMY_STUN_CHANCE; + string MUMMY_SUMMON_SCRIPT; + int NPC_GIVE_EXP; + + MummyNecro() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk2"; + ANIM_IDLE = "idle1"; + NPC_GIVE_EXP = 1000; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 96; + ATTACK_MOVERANGE = 80; + ANIM_ATTACK = "steelpipe"; + FLINCH_DAMAGE_THRESHOLD = 50; + FLINCH_HEALTH_RATIO = 0.75; + AURA_TYPE = 3; + ATTACK_TYPE = "melee"; + ATTACK_HITCHANCE = 80; + DMG_STEELPIPE = 400; + MUMMY_STARTING_LIVES = 1; + MUMMY_MELEE_DMG_TYPE = "blunt"; + MUMMY_IS_NECRO = 1; + MUMMY_STUN_CHANCE = 0.2; + DMG_AURA = 100; + FREQ_MUMMY_SUMMON = 15.0; + MUMMY_SUMMON_SCRIPT = "monsters/wraith_summoned"; + } + + void game_precache() + { + Precache("monsters/wraith_summoned"); + } + + void mummy_spawn() + { + SetName("Mummified Necromonger"); + SetHealth(7000); + SetDamageResistance("holy", 1.5); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetModelBody(2, 4); + SetModelBody(3, 2); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal("all", "ext_master_died", GetEntityIndex(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_slave.as b/scripts/angelscript/monsters/mummy_slave.as new file mode 100644 index 00000000..691d0f9a --- /dev/null +++ b/scripts/angelscript/monsters/mummy_slave.as @@ -0,0 +1,52 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummySlave : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float AS_STUCK_FREQ; + int ATTACK_HITCHANCE; + string ATTACK_TYPE; + int DMG_SLASH; + float FLINCH_HEALTH_RATIO; + int MUMMY_MUNCHES; + int MUMMY_STARTING_LIVES; + int NPC_GIVE_EXP; + + MummySlave() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk2"; + ANIM_IDLE = "idle1"; + NPC_GIVE_EXP = 300; + ANIM_ATTACK = "stab1"; + FLINCH_HEALTH_RATIO = 0.5; + AS_STUCK_FREQ = 0.5; + ATTACK_TYPE = "unarmed"; + ATTACK_HITCHANCE = 80; + DMG_SLASH = 100; + MUMMY_STARTING_LIVES = RandomInt(1, 4); + MUMMY_MUNCHES = 1; + } + + void mummy_spawn() + { + SetName("Mummified Slave"); + SetHealth(1000); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetDamageResistance("holy", 1.5); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_storm_pharaoh.as b/scripts/angelscript/monsters/mummy_storm_pharaoh.as new file mode 100644 index 00000000..1789d60f --- /dev/null +++ b/scripts/angelscript/monsters/mummy_storm_pharaoh.as @@ -0,0 +1,155 @@ +#pragma context server + +#include "monsters/mummy_base.as" +#include "monsters/base_lightning_shield.as" + +namespace MS +{ + +class MummyStormPharaoh : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_LONG; + string ANIM_ATTACK_SHORT; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float AS_STUCK_FREQ; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_HITRANGE_LONG; + int ATTACK_HITRANGE_SHORT; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int ATTACK_RANGE_LONG; + int ATTACK_RANGE_SHORT; + string ATTACK_TYPE; + float BASE_MOVESPEED; + int DMG_LIGHTNING_SHIELD; + int DMG_PUSH_BEAM; + int DMG_STAB; + int DMG_STEELPIPE; + int FLINCH_DAMAGE_THRESHOLD; + int LIGHTNING_SHIELD; + int LIGHTNING_SHIELD_RADIUS; + int LIGHTNING_SHIELD_REPELL_STRENGTH; + int LIGHTNING_SHIELD_V_CENTER; + int MUMMY_BEAM_ATTACK; + int MUMMY_BREATH_ATTACK; + string MUMMY_BREATH_ATTACK_CLSCRIPT; + int MUMMY_BREATH_ATTACK_OFS; + int MUMMY_BREATH_ATTACK_RANGE; + string MUMMY_BREATH_ATTACK_TYPE; + int MUMMY_BREATH_CONE; + int MUMMY_BREATH_DOT; + float MUMMY_BREATH_DOT_DURATION; + float MUMMY_BREATH_DURATION; + int MUMMY_DOUBLE_CYCLE; + float MUMMY_FREQ_DOUBLE_CYCLE; + int MUMMY_STARTING_LIVES; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + + MummyStormPharaoh() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk1"; + ANIM_IDLE = "idle1"; + NPC_GIVE_EXP = 4500; + ATTACK_RANGE = 130; + ATTACK_HITRANGE = 150; + ATTACK_MOVERANGE = 100; + ANIM_ATTACK = "stab"; + FLINCH_DAMAGE_THRESHOLD = 200; + AS_STUCK_FREQ = 0.5; + ANIM_ATTACK_SHORT = "steelpipe"; + ANIM_ATTACK_LONG = "stab"; + ATTACK_TYPE = "long"; + ATTACK_HITCHANCE = 80; + DMG_STEELPIPE = 300; + DMG_STAB = 800; + MUMMY_STARTING_LIVES = 1; + ATTACK_RANGE_SHORT = 64; + ATTACK_HITRANGE_SHORT = 96; + ATTACK_RANGE_LONG = 130; + ATTACK_HITRANGE_LONG = 150; + LIGHTNING_SHIELD = 1; + LIGHTNING_SHIELD_RADIUS = 96; + DMG_LIGHTNING_SHIELD = 200; + LIGHTNING_SHIELD_REPELL_STRENGTH = 1000; + LIGHTNING_SHIELD_V_CENTER = 36; + MUMMY_BREATH_ATTACK = 1; + MUMMY_BREATH_ATTACK_TYPE = "lightning"; + MUMMY_BREATH_DOT = 250; + MUMMY_BREATH_DOT_DURATION = 10.0; + MUMMY_BREATH_ATTACK_RANGE = 400; + MUMMY_BREATH_ATTACK_OFS = 150; + MUMMY_BREATH_CONE = 15; + MUMMY_BREATH_DURATION = 8.0; + MUMMY_BREATH_ATTACK_CLSCRIPT = "monsters/mummy_lightning_breath_cl"; + MUMMY_BEAM_ATTACK = 1; + DMG_PUSH_BEAM = 100; + MUMMY_DOUBLE_CYCLE = 1; + MUMMY_FREQ_DOUBLE_CYCLE = Random(5.0, 10.0); + if (StringToLower(GetMapName()) == "umulak") + { + NPC_IS_BOSS = 1; + } + } + + void OnRepeatTimer() + { + SetRepeatDelay(10.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 128, 0), 128, 10.0); + } + + void mummy_spawn() + { + SetName("Pharaoh of Storms"); + SetHealth(8000); + SetDamageResistance("all", 0.5); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("holy", 0.5); + SetModelBody(0, 1); + SetModelBody(1, 2); + SetModelBody(2, 6); + SetModelBody(3, 0); + } + + void OnPostSpawn() override + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 128, 0), 128, 10.0); + SetMoveSpeed(2.0); + SetAnimMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + } + + void ext_lshield_on() + { + string SHIELD_DURATION = param1; + if (SHIELD_DURATION == 0) + { + float SHIELD_DURATION = 10.0; + } + npcatk_suspend_ai(SHIELD_DURATION); + SetRoam(false); + lshield_activate(SHIELD_DURATION); + SetIdleAnim("crazyshit"); + SetMoveAnim("crazyshit"); + SHIELD_DURATION("ext_end_shield"); + } + + void ext_end_shield() + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + npcatk_resume_ai(); + SetRoam(true); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_warrior1.as b/scripts/angelscript/monsters/mummy_warrior1.as new file mode 100644 index 00000000..641f5a8f --- /dev/null +++ b/scripts/angelscript/monsters/mummy_warrior1.as @@ -0,0 +1,119 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyWarrior1 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + string ATTACK_TYPE; + float BASE_MOVESPEED; + int DMG_SLASH; + int MUMMY_DMG_STEELPIPE; + string MUMMY_MELEE_DMG_TYPE_FINAL; + int MUMMY_STARTING_LIVES; + float MUMMY_STUN_CHANCE; + int NPC_GIVE_EXP; + + MummyWarrior1() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk2"; + ANIM_IDLE = "idle1"; + ANIM_DEATH = "dieforward"; + ANIM_ATTACK = "steelpipe"; + ATTACK_TYPE = "melee"; + ATTACK_HITCHANCE = 80; + DMG_SLASH = 100; + MUMMY_STARTING_LIVES = 1; + } + + void mummy_spawn() + { + SetName("Mummified Slave Driver"); + SetDamageResistance("all", 0.75); + if (!(MUMMY_WEAPON_OVERRIDE)) + { + int RND_WEAPON = RandomInt(1, 3); + } + else + { + string RND_WEAPON = MUMMY_WEAPON_OVERRIDE; + } + SetModelBody(0, 0); + SetModelBody(1, 3); + SetModelBody(2, RND_WEAPON); + SetModelBody(3, 0); + if (RND_WEAPON == 1) + { + setup_mummy_mace(); + } + if (RND_WEAPON == 2) + { + setup_mummy_axe(); + } + if (RND_WEAPON == 3) + { + setup_mummy_sword(); + } + SetMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + } + + void setup_mummy_mace() + { + ANIM_ATTACK = "steelpipe"; + MUMMY_MELEE_DMG_TYPE_FINAL = "blunt"; + MUMMY_DMG_STEELPIPE = 200; + MUMMY_STUN_CHANCE = 0.2; + SetHealth(3000); + NPC_GIVE_EXP = 1000; + SetModelBody(2, 1); + } + + void setup_mummy_axe() + { + ANIM_ATTACK = "steelpipe"; + MUMMY_MELEE_DMG_TYPE_FINAL = "slash"; + MUMMY_DMG_STEELPIPE = 300; + SetHealth(3500); + NPC_GIVE_EXP = 1000; + SetModelBody(2, 2); + } + + void setup_mummy_sword() + { + ANIM_ATTACK = "steelpipe"; + MUMMY_MELEE_DMG_TYPE_FINAL = "slash"; + MUMMY_DMG_STEELPIPE = 400; + SetHealth(2500); + NPC_GIVE_EXP = 1000; + SetModelBody(2, 3); + } + + void game_dynamically_created() + { + if (param1 == 1) + { + setup_mummy_mace(); + } + if (param1 == 2) + { + setup_mummy_axe(); + } + if (param1 == 3) + { + setup_mummy_sword(); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_warrior1b.as b/scripts/angelscript/monsters/mummy_warrior1b.as new file mode 100644 index 00000000..2dba0921 --- /dev/null +++ b/scripts/angelscript/monsters/mummy_warrior1b.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyWarrior1b : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + string ATTACK_TYPE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int DMG_FIRE_DOT; + int DMG_STEELPIPE; + int MUMMY_STARTING_LIVES; + int NPC_GIVE_EXP; + + MummyWarrior1b() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk2"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "steelpipe"; + ATTACK_TYPE = "melee"; + DMG_STEELPIPE = 300; + MUMMY_STARTING_LIVES = 1; + ATTACK_HITCHANCE = 90; + DMG_FIRE_DOT = 150; + NPC_GIVE_EXP = 3000; + } + + void mummy_spawn() + { + SetName("Mummified Swordsman"); + SetHealth(4000); + SetDamageResistance("all", 0.75); + SetModelBody(0, 0); + SetModelBody(1, 3); + SetModelBody(2, 5); + SetModelBody(3, 0); + SetMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + SetAnimFrameRate(1.5); + BASE_FRAMERATE = 1.5; + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_warrior1c.as b/scripts/angelscript/monsters/mummy_warrior1c.as new file mode 100644 index 00000000..b64fddb6 --- /dev/null +++ b/scripts/angelscript/monsters/mummy_warrior1c.as @@ -0,0 +1,78 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyWarrior1c : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_LONG; + string ANIM_ATTACK_SHORT; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE_LONG; + int ATTACK_HITRANGE_SHORT; + int ATTACK_RANGE_LONG; + int ATTACK_RANGE_SHORT; + string ATTACK_TYPE; + float BASE_MOVESPEED; + int DMG_PIKE; + int DMG_SLASH; + int DMG_STAB; + int DMG_STEELPIPE; + float FREQ_MUMMY_PIKE_TOSS; + int MUMMY_PIKE_NOGLOW; + int MUMMY_PIKE_SPEED; + string MUMMY_PROJ_NAME; + int MUMMY_STARTING_LIVES; + int MUMMY_THROWS_PIKE; + int NPC_GIVE_EXP; + + MummyWarrior1c() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk2"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "stab"; + ANIM_ATTACK_SHORT = "steelpipe"; + ANIM_ATTACK_LONG = "stab"; + NPC_GIVE_EXP = 2000; + ATTACK_TYPE = "long"; + DMG_SLASH = 300; + MUMMY_STARTING_LIVES = 1; + ATTACK_HITCHANCE = 90; + ATTACK_RANGE_SHORT = 64; + ATTACK_HITRANGE_SHORT = 96; + ATTACK_RANGE_LONG = 130; + ATTACK_HITRANGE_LONG = 150; + DMG_STEELPIPE = 100; + DMG_STAB = 300; + MUMMY_STARTING_LIVES = 1; + MUMMY_THROWS_PIKE = 1; + FREQ_MUMMY_PIKE_TOSS = 4.0; + DMG_PIKE = 400; + MUMMY_PIKE_SPEED = 800; + MUMMY_PROJ_NAME = "proj_mummy_spear"; + MUMMY_PIKE_NOGLOW = 1; + } + + void mummy_spawn() + { + SetName("Mummified Legionnaire"); + SetDamageResistance("all", 0.75); + SetHealth(4000); + SetModelBody(0, 0); + SetModelBody(1, 3); + SetModelBody(2, 6); + SetModelBody(3, 0); + SetMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_warrior2.as b/scripts/angelscript/monsters/mummy_warrior2.as new file mode 100644 index 00000000..b978e132 --- /dev/null +++ b/scripts/angelscript/monsters/mummy_warrior2.as @@ -0,0 +1,118 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyWarrior2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + string ATTACK_TYPE; + float BASE_MOVESPEED; + int DMG_SLASH; + int MUMMY_DMG_STEELPIPE; + string MUMMY_MELEE_DMG_TYPE_FINAL; + int MUMMY_STARTING_LIVES; + float MUMMY_STUN_CHANCE; + int NPC_GIVE_EXP; + + MummyWarrior2() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk2"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "steelpipe"; + ATTACK_TYPE = "melee"; + DMG_SLASH = 400; + MUMMY_STARTING_LIVES = 1; + ATTACK_HITCHANCE = 90; + } + + void mummy_spawn() + { + SetName("Mummified Warrior"); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.0); + if (!(MUMMY_WEAPON_OVERRIDE)) + { + int RND_WEAPON = RandomInt(1, 3); + } + else + { + string RND_WEAPON = MUMMY_WEAPON_OVERRIDE; + } + SetModelBody(0, 1); + SetModelBody(1, 3); + SetModelBody(2, RND_WEAPON); + SetModelBody(3, 0); + if (RND_WEAPON == 1) + { + setup_mummy_mace(); + } + if (RND_WEAPON == 2) + { + setup_mummy_axe(); + } + if (RND_WEAPON == 3) + { + setup_mummy_sword(); + } + SetMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + } + + void setup_mummy_mace() + { + ANIM_ATTACK = "steelpipe"; + MUMMY_MELEE_DMG_TYPE_FINAL = "blunt"; + MUMMY_DMG_STEELPIPE = 400; + MUMMY_STUN_CHANCE = 0.3; + SetHealth(5000); + NPC_GIVE_EXP = 2000; + SetModelBody(2, 1); + } + + void setup_mummy_axe() + { + ANIM_ATTACK = "steelpipe"; + MUMMY_MELEE_DMG_TYPE_FINAL = "slash"; + MUMMY_DMG_STEELPIPE = 600; + SetHealth(7000); + NPC_GIVE_EXP = 2000; + SetModelBody(2, 2); + } + + void setup_mummy_sword() + { + ANIM_ATTACK = "steelpipe"; + MUMMY_MELEE_DMG_TYPE_FINAL = "slash"; + MUMMY_DMG_STEELPIPE = 800; + SetHealth(4000); + NPC_GIVE_EXP = 2000; + SetModelBody(2, 3); + } + + void game_dynamically_created() + { + if (param1 == 1) + { + setup_mummy_mace(); + } + if (param1 == 2) + { + setup_mummy_axe(); + } + if (param1 == 3) + { + setup_mummy_sword(); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_warrior2b.as b/scripts/angelscript/monsters/mummy_warrior2b.as new file mode 100644 index 00000000..2c8166ea --- /dev/null +++ b/scripts/angelscript/monsters/mummy_warrior2b.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyWarrior2b : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + string ATTACK_TYPE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int DMG_FIRE_DOT; + int DMG_STEELPIPE; + int MUMMY_STARTING_LIVES; + int NPC_GIVE_EXP; + + MummyWarrior2b() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk2"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "steelpipe"; + ATTACK_TYPE = "melee"; + DMG_STEELPIPE = 400; + MUMMY_STARTING_LIVES = 1; + ATTACK_HITCHANCE = 90; + DMG_FIRE_DOT = 100; + NPC_GIVE_EXP = 3500; + } + + void mummy_spawn() + { + SetName("Mummified Flameguard"); + SetHealth(9000); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("fire", 0.25); + SetDamageResistance("cold", 1.25); + SetModelBody(0, 1); + SetModelBody(1, 3); + SetModelBody(2, 5); + SetModelBody(3, 0); + SetMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + SetAnimFrameRate(1.5); + BASE_FRAMERATE = 1.5; + } + + void steelpipe_dodamage() + { + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DMG_FIRE_DOT); + } + +} + +} diff --git a/scripts/angelscript/monsters/mummy_warrior2c.as b/scripts/angelscript/monsters/mummy_warrior2c.as new file mode 100644 index 00000000..f0253f8d --- /dev/null +++ b/scripts/angelscript/monsters/mummy_warrior2c.as @@ -0,0 +1,79 @@ +#pragma context server + +#include "monsters/mummy_base.as" + +namespace MS +{ + +class MummyWarrior2c : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_LONG; + string ANIM_ATTACK_SHORT; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE_LONG; + int ATTACK_HITRANGE_SHORT; + int ATTACK_RANGE_LONG; + int ATTACK_RANGE_SHORT; + string ATTACK_TYPE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int DMG_PIKE; + int DMG_SLASH; + int DMG_STAB; + int DMG_STEELPIPE; + float FREQ_MUMMY_PIKE_TOSS; + int MUMMY_PIKE_SPEED; + string MUMMY_PROJ_NAME; + int MUMMY_STARTING_LIVES; + int MUMMY_THROWS_PIKE; + int NPC_GIVE_EXP; + + MummyWarrior2c() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk2"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "stab"; + ANIM_ATTACK_SHORT = "steelpipe"; + ANIM_ATTACK_LONG = "stab"; + NPC_GIVE_EXP = 5000; + ATTACK_TYPE = "long"; + DMG_SLASH = 600; + MUMMY_STARTING_LIVES = 1; + ATTACK_HITCHANCE = 90; + ATTACK_RANGE_SHORT = 64; + ATTACK_HITRANGE_SHORT = 96; + ATTACK_RANGE_LONG = 130; + ATTACK_HITRANGE_LONG = 150; + DMG_STEELPIPE = 200; + DMG_STAB = 600; + MUMMY_THROWS_PIKE = 1; + FREQ_MUMMY_PIKE_TOSS = 10.0; + DMG_PIKE = 400; + MUMMY_PIKE_SPEED = 400; + MUMMY_PROJ_NAME = "proj_mummy_pike"; + } + + void mummy_spawn() + { + SetName("Mummified Warlord"); + SetHealth(8000); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.0); + SetModelBody(0, 1); + SetModelBody(1, 3); + SetModelBody(2, 6); + SetModelBody(3, 0); + SetMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + SetAnimFrameRate(1.5); + BASE_FRAMERATE = 1.5; + } + +} + +} diff --git a/scripts/angelscript/monsters/ogre.as b/scripts/angelscript/monsters/ogre.as new file mode 100644 index 00000000..ae4ba0a1 --- /dev/null +++ b/scripts/angelscript/monsters/ogre.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/swamp_ogre.as" + +namespace MS +{ + +class Ogre : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/ogre_cave.as b/scripts/angelscript/monsters/ogre_cave.as new file mode 100644 index 00000000..6e086f11 --- /dev/null +++ b/scripts/angelscript/monsters/ogre_cave.as @@ -0,0 +1,432 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class OgreCave : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BEAM; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HEADBUTT; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_RUN_DEFAULT; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WALK_DEFAULT; + string ANIM_WARCRY; + float ATTACK_HITCHANCE; + int CAN_FLINCH; + int DID_WARCRY; + string DMG_LEAP_THRESH; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + float FLINCH_CHANCE; + float FLINCH_DELAY; + int FLINCH_HEALTH; + float FREQ_LEAP_AWAY; + float HEADBUTT_CHANCE; + int HEADBUTT_DAMAGE; + int HEADBUTT_DELAY; + float HEADBUTT_FREQ; + int HEADBUTT_ON; + int LEAP_AWAY_INTERVAL; + int LEAP_DAMAGE; + int LEAP_ENABLED; + int LEAP_RANGE_TOOCLOSE; + int LEAP_RANGE_TOOFAR; + float LEAP_STUNCHANCE; + string NEXT_DMG_LEAP_AWAY; + int NEXT_LEAP_AWAY; + int NPC_FORCED_MOVEDEST; + string NPC_GIVE_EXP; + float ORC_HOP_DELAY; + int ORC_JUMPING; + int ORC_JUMP_THRESH; + int RUN_STEP; + string SOUND_DEATH; + string SOUND_FLINCH; + string SOUND_HEADBUTT; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_LEAP; + string SOUND_LEAP_LAND; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWIPEHIT1; + string SOUND_SWIPEHIT2; + string SOUND_SWIPEMISS1; + string SOUND_SWIPEMISS2; + string SOUND_WARCRY; + int SWIPE_ATTACK; + int SWIPE_DAMAGE; + string WEAK_THRESHOLD; + + OgreCave() + { + ANIM_SEARCH = "idle_look"; + ANIM_IDLE = "idle1"; + ANIM_SWIPE = "attack1"; + ANIM_HEADBUTT = "attack2"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "jump"; + ANIM_WALK_DEFAULT = "walk"; + ANIM_RUN_DEFAULT = "run1"; + ANIM_DEATH = "dieforward"; + ANIM_WARCRY = "warcry"; + ANIM_FLINCH = "bigflinch"; + ANIM_BEAM = "beam"; + ANIM_WALK = ANIM_WALK_DEFAULT; + ANIM_RUN = ANIM_RUN_DEFAULT; + ANIM_ATTACK = ANIM_SWIPE; + ORC_HOP_DELAY = 1.0; + ORC_JUMP_THRESH = 80; + if (StringToLower(GetMapName()) == "underpath") + { + NPC_GIVE_EXP = 2000; + } + else + { + NPC_GIVE_EXP = 300; + } + SOUND_IDLE1 = "bullchicken/bc_idle1.wav"; + SOUND_IDLE2 = "bullchicken/bc_idle2.wav"; + SOUND_IDLE3 = "bullchicken/bc_idle3.wav"; + SOUND_IDLE4 = "bullchicken/bc_idle4.wav"; + SOUND_IDLE5 = "bullchicken/bc_idle5.wav"; + SOUND_DEATH = "bullchicken/bc_die1.wav"; + SOUND_HEADBUTT = "bullchicken/bc_spithit1.wav"; + SOUND_SWIPEHIT1 = "zombie/claw_strike1.wav"; + SOUND_SWIPEHIT2 = "zombie/claw_strike2.wav"; + SOUND_SWIPEMISS1 = "zombie/claw_miss1.wav"; + SOUND_SWIPEMISS2 = "zombie/claw_miss2.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STEP1 = "player/pl_snow1.wav"; + SOUND_STEP2 = "player/pl_snow2.wav"; + SOUND_PAIN_WEAK = "bullchicken/bc_pain2.wav"; + SOUND_PAIN_STRONG = "bullchicken/bc_pain1.wav"; + SOUND_WARCRY = "bullchicken/bc_attackgrowl3.wav"; + SOUND_LEAP = "bullchicken/bc_attackgrowl2.wav"; + SOUND_LEAP_LAND = "weapons/g_bounce2.wav"; + SOUND_FLINCH = "bullchicken/bc_pain3.wav"; + Precache(SOUND_DEATH); + SWIPE_DAMAGE = "$rand(50,75)"; + HEADBUTT_CHANCE = 1.0; + HEADBUTT_FREQ = 7.0; + HEADBUTT_DAMAGE = "$rand(50,75)"; + LEAP_DAMAGE = "$rand(10,30)"; + LEAP_STUNCHANCE = 0.3; + LEAP_RANGE_TOOFAR = 512; + LEAP_RANGE_TOOCLOSE = 128; + LEAP_AWAY_INTERVAL = 500; + FREQ_LEAP_AWAY = Random(10.0, 20.0); + NEXT_LEAP_AWAY = 1800; + DROP_GOLD = 1; + DROP_GOLD_MIN = 30; + DROP_GOLD_MAX = 50; + ATTACK_HITCHANCE = 0.95; + CAN_FLINCH = 1; + FLINCH_CHANCE = 0.2; + FLINCH_DELAY = 10.0; + FLINCH_HEALTH = 1500; + } + + void OnSpawn() override + { + SetName("Cave Ogre"); + SetHealth(1000); + SetRace("orc"); + if (!(START_SUSPEND)) + { + SetRoam(true); + } + SetModel("monsters/ogre_cave.mdl"); + SetMoveAnim(ANIM_WALK); + SetHeight(64); + SetWidth(32); + SetHearingSensitivity(2); + SetBloodType("green"); + SetIdleAnim(ANIM_IDLE); + SetDamageResistance("poison", 1.5); + SetDamageResistance("acid", 1.5); + RUN_STEP = 0; + if (!(true)) return; + if (!(START_SUSPEND)) + { + ScheduleDelayedEvent(1.0, "idle_sounds"); + } + ScheduleDelayedEvent(2.0, "final_postspawn"); + } + + void final_postspawn() + { + WEAK_THRESHOLD = GetEntityMaxHealth(GetOwner()); + WEAK_THRESHOLD *= 0.5; + DMG_LEAP_THRESH = GetEntityMaxHealth(GetOwner()); + DMG_LEAP_THRESH *= 0.1; + } + + void npcatk_validatetarget() + { + if (!(IsValidPlayer(param1))) return; + if ((DID_WARCRY)) return; + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + } + + void my_target_died() + { + if (!(false)) + { + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 0; + if (!(LEAP_ENABLED)) + { + } + ScheduleDelayedEvent(1.0, "enable_leap"); + } + if ((false)) return; + ORC_JUMPING = 0; + } + + void enable_leap() + { + LEAP_ENABLED = 1; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetMonsterHP() < GetMonsterMaxHP()) + { + HealEntity(GetOwner(), 0.1); + } + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) <= LEAP_RANGE_TOOFAR)) return; + if (!(GetEntityRange(m_hAttackTarget) > LEAP_RANGE_TOOCLOSE)) return; + if (!(LEAP_ENABLED)) return; + LEAP_ENABLED = 0; + ScheduleDelayedEvent(5.0, "enable_leap"); + script_leap(); + } + + void script_leap() + { + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + if ((I_R_FROZEN)) return; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 600, 100)); + } + + void npc_selectattack() + { + if ((HEADBUTT_DELAY)) + { + ANIM_ATTACK = ANIM_SWIPE; + } + else + { + if (RandomInt(1, 100) < HEADBUTT_CHANCE) + { + ANIM_ATTACK = ANIM_HEADBUTT; + HEADBUTT_DELAY = 1; + HEADBUTT_FREQ("headbutt_reset"); + } + } + } + + void headbutt_reset() + { + HEADBUTT_DELAY = 0; + } + + void attack1() + { + SWIPE_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, SWIPE_DAMAGE, ATTACK_HITCHANCE); + } + + void attack2() + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, HEADBUTT_DAMAGE, ATTACK_HITCHANCE); + HEADBUTT_ON = 1; + } + + void game_dodamage() + { + if ((HEADBUTT_ON)) + { + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_HEADBUTT, 10); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + ANIM_ATTACK = ANIM_SWIPE; + int EXIT_SUB = 1; + } + HEADBUTT_ON = 0; + if ((EXIT_SUB)) return; + if (!(SWIPE_ATTACK)) return; + SWIPE_ATTACK = 0; + if ((param1)) + { + // PlayRandomSound from: SOUND_SWIPEHIT1, SOUND_SWIPEHIT2 + array sounds = {SOUND_SWIPEHIT1, SOUND_SWIPEHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(-100, 130, 120)); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetMonsterHP() > WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (GetMonsterHP() <= WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (param1 > DMG_LEAP_THRESH) + { + if (GetGameTime() > NEXT_DMG_LEAP_AWAY) + { + } + NEXT_DMG_LEAP_AWAY = GetGameTime(); + NEXT_DMG_LEAP_AWAY += FREQ_LEAP_AWAY; + leap_away(); + } + } + + void leap_away() + { + PlayAnim("critical", ANIM_LEAP); + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "leap_boost"); + npcatk_suspend_ai(3.0); + } + + void leap_attack() + { + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + if ((CanSee("enemy", 128))) + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, LEAP_DAMAGE, ATTACK_HITCHANCE); + if (RandomInt(1, 100) < LEAP_STUNCHANCE) + { + ApplyEffect(GetEntityIndex(m_hLastSeen), "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + } + } + + void leap_done() + { + EmitSound(GetOwner(), 0, SOUND_LEAP_LAND, 10); + SetMoveAnim(ANIM_RUN); + } + + void OnFlinch() + { + EmitSound(GetOwner(), 0, SOUND_FLINCH, 10); + } + + void idle_sounds() + { + if (!(IsEntityAlive(GetOwner()))) return; + Random(3, 10)("idle_sounds"); + if (!(m_hAttackTarget == "unset")) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void run_step1() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 5); + } + + void run_step2() + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 5); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((ORC_JUMPING)) return; + if (!(IsValidPlayer(m_hAttackTarget))) return; + ORC_JUMPING = 1; + ScheduleDelayedEvent(1.0, "orc_jump_check"); + } + + void orc_jump_check() + { + if (!(ORC_JUMPING)) return; + ORC_HOP_DELAY("orc_jump_check"); + if ((IS_FLEEING)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(false)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > ORC_JUMP_THRESH) + { + orc_hop(); + } + } + + void orc_hop() + { + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + PlayAnim("critical", ANIM_LEAP); + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + int JUMP_HEIGHT = RandomInt(550, 650); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + +} + +} diff --git a/scripts/angelscript/monsters/ogre_cave_thug.as b/scripts/angelscript/monsters/ogre_cave_thug.as new file mode 100644 index 00000000..885b7d45 --- /dev/null +++ b/scripts/angelscript/monsters/ogre_cave_thug.as @@ -0,0 +1,369 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class OgreCaveThug : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BEAM; + string ANIM_BEATDOWN; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HEADBUTT; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_RUN_DEFAULT; + string ANIM_SEARCH; + string ANIM_SLAM; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WALK_DEFAULT; + string ANIM_WARCRY; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int DID_WARCRY; + string NEXT_CUSTOM_FLINCH; + string NEXT_IDLE_SOUND; + int NPC_GIVE_EXP; + int REGEN_RATE; + int RUN_STEP; + string SLAM_COUNT; + int SLAM_DAMAGE; + string SLAM_LOC; + string SOUND_BEATDOWN_START; + string SOUND_DEATH; + string SOUND_FLINCH; + string SOUND_HEADBUTT; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_LEAP; + string SOUND_LEAP_LAND; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_SLAM_START; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWIPEHIT1; + string SOUND_SWIPEHIT2; + string SOUND_SWIPEMISS1; + string SOUND_SWIPEMISS2; + string SOUND_WARCRY; + string STEP_COUNT; + int SWIPE_ATTACK; + int SWIPE_DAMAGE; + string TEN_PERCENT_HP; + string WEAK_THRESHOLD; + + OgreCaveThug() + { + ANIM_SEARCH = "idle_look"; + ANIM_IDLE = "idle1"; + ANIM_SWIPE = "attack1"; + ANIM_HEADBUTT = "attack2"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "jump"; + ANIM_WALK_DEFAULT = "walk"; + ANIM_RUN_DEFAULT = "run1"; + ANIM_DEATH = "dieforward"; + ANIM_WARCRY = "warcry"; + ANIM_FLINCH = "bigflinch"; + ANIM_BEAM = "beam"; + ANIM_BEATDOWN = "anim_beatdown"; + ANIM_SLAM = "anim_slam"; + ANIM_WALK = ANIM_WALK_DEFAULT; + ANIM_RUN = ANIM_RUN_DEFAULT; + ANIM_ATTACK = ANIM_BEATDOWN; + SOUND_IDLE1 = "bullchicken/bc_idle1.wav"; + SOUND_IDLE2 = "bullchicken/bc_idle2.wav"; + SOUND_IDLE3 = "bullchicken/bc_idle3.wav"; + SOUND_IDLE4 = "bullchicken/bc_idle4.wav"; + SOUND_IDLE5 = "bullchicken/bc_idle5.wav"; + SOUND_DEATH = "bullchicken/bc_die1.wav"; + SOUND_HEADBUTT = "bullchicken/bc_spithit1.wav"; + SOUND_SWIPEHIT1 = "zombie/claw_strike1.wav"; + SOUND_SWIPEHIT2 = "zombie/claw_strike2.wav"; + SOUND_SWIPEMISS1 = "zombie/claw_miss1.wav"; + SOUND_SWIPEMISS2 = "zombie/claw_miss2.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STEP1 = "player/pl_slosh1.wav"; + SOUND_STEP2 = "player/pl_slosh2.wav"; + SOUND_PAIN_WEAK = "bullchicken/bc_pain2.wav"; + SOUND_PAIN_STRONG = "bullchicken/bc_pain1.wav"; + SOUND_WARCRY = "bullchicken/bc_attackgrowl3.wav"; + SOUND_LEAP = "bullchicken/bc_attackgrowl2.wav"; + SOUND_LEAP_LAND = "weapons/g_bounce2.wav"; + SOUND_FLINCH = "bullchicken/bc_pain3.wav"; + SOUND_BEATDOWN_START = "bullchicken/bc_attackgrowl2.wav"; + SOUND_SLAM_START = "bullchicken/bc_attackgrowl3.wav"; + NPC_GIVE_EXP = 2000; + ATTACK_HITCHANCE = 0.95; + SWIPE_DAMAGE = RandomInt(150, 275); + SLAM_DAMAGE = 200; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 80; + } + + void OnSpawn() override + { + SetName("Cave Ogre Thug"); + SetModel("monsters/ogre_cave_thug.mdl"); + SetHealth(5000); + SetRace("orc"); + SetRoam(true); + SetMoveAnim(ANIM_WALK); + SetHeight(96); + SetWidth(32); + SetHearingSensitivity(2); + SetBloodType("green"); + SetIdleAnim(ANIM_IDLE); + SetDamageResistance("poison", 1.5); + SetDamageResistance("acid", 1.5); + RUN_STEP = 0; + if (!(true)) return; + ScheduleDelayedEvent(1.0, "idle_sounds"); + ScheduleDelayedEvent(2.0, "final_postspawn"); + } + + void final_postspawn() + { + WEAK_THRESHOLD = GetEntityMaxHealth(GetOwner()); + WEAK_THRESHOLD *= 0.5; + TEN_PERCENT_HP = GetEntityMaxHealth(GetOwner()); + TEN_PERCENT_HP *= 0.1; + REGEN_RATE = 2; + if (NPC_HP_MULTI > 1) + { + REGEN_RATE *= NPC_HP_MULTI; + } + } + + void npcatk_validatetarget() + { + if (!(IsValidPlayer(param1))) return; + if ((DID_WARCRY)) return; + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + } + + void my_target_died() + { + if (!(false)) + { + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 0; + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetMonsterHP() < GetMonsterMaxHP()) + { + HealEntity(GetOwner(), REGEN_RATE); + } + if (!(GetGameTime() > NEXT_IDLE_SOUND)) return; + NEXT_IDLE_SOUND = GetGameTime(); + NEXT_IDLE_SOUND += Random(3.0, 10.0); + if (!(m_hAttackTarget == "unset")) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack1() + { + SWIPE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, SWIPE_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void frame_beatdown_start() + { + EmitSound(GetOwner(), 0, SOUND_BEATDOWN_START, 10); + } + + void frame_beatdown() + { + LogDebug("frame_beatdown"); + SWIPE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, SWIPE_DAMAGE, ATTACK_HITCHANCE, "slash"); + do_step(); + } + + void frame_beatdown_final() + { + SWIPE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, SWIPE_DAMAGE, ATTACK_HITCHANCE, "slash"); + SLAM_COUNT += 1; + if (SLAM_COUNT == 5) + { + ANIM_ATTACK = ANIM_SLAM; + SLAM_COUNT = 0; + PlayAnim("hold", ANIM_SLAM); + } + do_step(); + } + + void frame_slam_start() + { + EmitSound(GetOwner(), 0, SOUND_SLAM_START, 10); + } + + void frame_slam() + { + ANIM_ATTACK = ANIM_BEATDOWN; + string LAND_POS = /* TODO: $relpos */ $relpos(0, 64, 0); + ClientEvent("new", "all", "effects/sfx_stun_burst", LAND_POS, 256, 0, 0); + SLAM_LOC = LAND_POS; + XDoDamage(LAND_POS, 128, SLAM_DAMAGE, 0, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:slam"); + do_step(); + ScheduleDelayedEvent(1.0, "break_slam"); + } + + void break_slam() + { + PlayAnim("once", "break"); + } + + void slam_dodamage() + { + if (!(param1)) return; + if (GetRelationship(param2) == "enemy") + { + int L_IS_NME = 1; + } + int L_PUSH_VEL = 2000; + if (!(L_IS_NME)) + { + int PUSH_VEL = 500; + } + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = SLAM_POS; + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, L_PUSH_VEL, 110))); + if (!(L_IS_NME)) return; + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + + void game_dodamage() + { + if ((SWIPE_ATTACK)) + { + if ((param1)) + { + // PlayRandomSound from: SOUND_SWIPEHIT1, SOUND_SWIPEHIT2 + array sounds = {SOUND_SWIPEHIT1, SOUND_SWIPEHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RandomInt(1, 2) == 1) + { + int RL_VEL = -100; + } + else + { + int RL_VEL = 100; + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(RL_VEL, 300, 110)); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + SWIPE_ATTACK = 0; + } + + void run_step1() + { + do_step(); + } + + void run_step2() + { + do_step(); + } + + void do_step() + { + STEP_COUNT += 1; + if (STEP_COUNT == 1) + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 5); + } + if (STEP_COUNT == 2) + { + STEP_COUNT = 0; + EmitSound(GetOwner(), 0, SOUND_STEP2, 5); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetMonsterHP() > WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (GetMonsterHP() <= WEAK_THRESHOLD) + { + int DO_FLINCH = 1; + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (param1 > TEN_PERCENT_HP) + { + int DO_FLINCH = 1; + } + if (!(DO_FLINCH)) return; + if (!(GetGameTime() > NEXT_CUSTOM_FLINCH)) return; + NEXT_CUSTOM_FLINCH = GetGameTime(); + NEXT_CUSTOM_FLINCH += 30.0; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + int RND_FLINCH = RandomInt(1, 6); + if (RND_FLINCH == 1) + { + PlayAnim("critical", "flinch"); + } + if (RND_FLINCH == 2) + { + PlayAnim("critical", "bigflinch"); + } + if (RND_FLINCH == 3) + { + PlayAnim("critical", "raflinch"); + } + if (RND_FLINCH == 4) + { + PlayAnim("critical", "raflinch"); + } + if (RND_FLINCH == 5) + { + PlayAnim("critical", "llflinch"); + } + if (RND_FLINCH == 6) + { + PlayAnim("critical", "rlflinch"); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/ogre_cave_welp.as b/scripts/angelscript/monsters/ogre_cave_welp.as new file mode 100644 index 00000000..b3235333 --- /dev/null +++ b/scripts/angelscript/monsters/ogre_cave_welp.as @@ -0,0 +1,426 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class OgreCaveWelp : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BEAM; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HEADBUTT; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_RUN_DEFAULT; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WALK_DEFAULT; + string ANIM_WARCRY; + float ATTACK_HITCHANCE; + int CAN_FLINCH; + int DID_WARCRY; + string DMG_LEAP_THRESH; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + float FLINCH_CHANCE; + float FLINCH_DELAY; + int FLINCH_HEALTH; + float FREQ_LEAP_AWAY; + float HEADBUTT_CHANCE; + int HEADBUTT_DAMAGE; + int HEADBUTT_DELAY; + float HEADBUTT_FREQ; + int HEADBUTT_ON; + int LEAP_AWAY_INTERVAL; + int LEAP_DAMAGE; + int LEAP_ENABLED; + int LEAP_RANGE_TOOCLOSE; + int LEAP_RANGE_TOOFAR; + float LEAP_STUNCHANCE; + string NEXT_DMG_LEAP_AWAY; + int NPC_FORCED_MOVEDEST; + string NPC_GIVE_EXP; + float ORC_HOP_DELAY; + int ORC_JUMPING; + int ORC_JUMP_THRESH; + int RUN_STEP; + string SOUND_DEATH; + string SOUND_FLINCH; + string SOUND_HEADBUTT; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_LEAP; + string SOUND_LEAP_LAND; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWIPEHIT1; + string SOUND_SWIPEHIT2; + string SOUND_SWIPEMISS1; + string SOUND_SWIPEMISS2; + string SOUND_WARCRY; + int SWIPE_ATTACK; + int SWIPE_DAMAGE; + string WEAK_THRESHOLD; + + OgreCaveWelp() + { + ANIM_SEARCH = "idle_look"; + ANIM_IDLE = "idle1"; + ANIM_SWIPE = "attack1"; + ANIM_HEADBUTT = "attack2"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "jump"; + ANIM_WALK_DEFAULT = "walk"; + ANIM_RUN_DEFAULT = "run1"; + ANIM_DEATH = "dieforward"; + ANIM_WARCRY = "warcry"; + ANIM_FLINCH = "bigflinch"; + ANIM_BEAM = "beam"; + ANIM_WALK = ANIM_WALK_DEFAULT; + ANIM_RUN = ANIM_RUN_DEFAULT; + ANIM_ATTACK = ANIM_SWIPE; + ORC_HOP_DELAY = 1.0; + ORC_JUMP_THRESH = 80; + if (StringToLower(GetMapName()) == "underpath") + { + NPC_GIVE_EXP = 1000; + } + else + { + NPC_GIVE_EXP = 200; + } + SOUND_IDLE1 = "monsters/ogre_welp/bc_idle1.wav"; + SOUND_IDLE2 = "monsters/ogre_welp/bc_idle2.wav"; + SOUND_IDLE3 = "monsters/ogre_welp/bc_idle3.wav"; + SOUND_IDLE4 = "monsters/ogre_welp/bc_idle4.wav"; + SOUND_IDLE5 = "monsters/ogre_welp/bc_idle5.wav"; + SOUND_DEATH = "monsters/ogre_welp/bc_die1.wav"; + SOUND_HEADBUTT = "monsters/ogre_welp/bc_spithit1.wav"; + SOUND_SWIPEHIT1 = "zombie/claw_strike1.wav"; + SOUND_SWIPEHIT2 = "zombie/claw_strike2.wav"; + SOUND_SWIPEMISS1 = "zombie/claw_miss1.wav"; + SOUND_SWIPEMISS2 = "zombie/claw_miss2.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STEP1 = "player/pl_snow1.wav"; + SOUND_STEP2 = "player/pl_snow2.wav"; + SOUND_PAIN_WEAK = "monsters/ogre_welp/bc_pain2.wav"; + SOUND_PAIN_STRONG = "monsters/ogre_welp/bc_pain1.wav"; + SOUND_WARCRY = "monsters/ogre_welp/bc_attackgrowl3.wav"; + SOUND_LEAP = "monsters/ogre_welp/bc_attackgrowl2.wav"; + SOUND_LEAP_LAND = "weapons/g_bounce2.wav"; + SOUND_FLINCH = "monsters/ogre_welp/bc_pain3.wav"; + Precache(SOUND_DEATH); + SWIPE_DAMAGE = "$rand(30,65)"; + HEADBUTT_CHANCE = 1.0; + HEADBUTT_FREQ = 7.0; + HEADBUTT_DAMAGE = "$rand(30,65)"; + LEAP_DAMAGE = "$rand(10,20)"; + LEAP_STUNCHANCE = 0.3; + LEAP_RANGE_TOOFAR = 512; + LEAP_RANGE_TOOCLOSE = 128; + LEAP_AWAY_INTERVAL = 500; + FREQ_LEAP_AWAY = Random(10.0, 20.0); + DROP_GOLD = 1; + DROP_GOLD_MIN = 30; + DROP_GOLD_MAX = 50; + ATTACK_HITCHANCE = 0.95; + CAN_FLINCH = 1; + FLINCH_CHANCE = 0.2; + FLINCH_DELAY = 10.0; + FLINCH_HEALTH = 1500; + } + + void OnSpawn() override + { + SetName("Cave Ogre Welp"); + SetHealth(500); + SetRace("orc"); + if (!(START_SUSPEND)) + { + SetRoam(true); + } + SetModel("monsters/ogre_cave_welp.mdl"); + SetMoveAnim(ANIM_WALK); + SetHeight(32); + SetWidth(24); + SetHearingSensitivity(2); + SetBloodType("green"); + SetIdleAnim(ANIM_IDLE); + SetDamageResistance("poison", 2.0); + SetDamageResistance("acid", 2.0); + RUN_STEP = 0; + if (!(true)) return; + if (!(START_SUSPEND)) + { + ScheduleDelayedEvent(1.0, "idle_sounds"); + } + ScheduleDelayedEvent(2.0, "final_postspawn"); + } + + void final_postspawn() + { + WEAK_THRESHOLD = GetEntityMaxHealth(GetOwner()); + WEAK_THRESHOLD *= 0.5; + DMG_LEAP_THRESH = GetEntityMaxHealth(GetOwner()); + DMG_LEAP_THRESH *= 0.1; + } + + void npcatk_validatetarget() + { + if (!(IsValidPlayer(param1))) return; + if ((DID_WARCRY)) return; + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + } + + void my_target_died() + { + if (!(false)) + { + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 0; + if (!(LEAP_ENABLED)) + { + } + ScheduleDelayedEvent(1.0, "enable_leap"); + } + if ((false)) return; + ORC_JUMPING = 0; + } + + void enable_leap() + { + LEAP_ENABLED = 1; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetMonsterHP() < GetMonsterMaxHP()) + { + HealEntity(GetOwner(), 0.1); + } + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) <= LEAP_RANGE_TOOFAR)) return; + if (!(GetEntityRange(m_hAttackTarget) > LEAP_RANGE_TOOCLOSE)) return; + if (!(LEAP_ENABLED)) return; + LEAP_ENABLED = 0; + ScheduleDelayedEvent(5.0, "enable_leap"); + script_leap(); + } + + void script_leap() + { + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + if ((I_R_FROZEN)) return; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 600, 100)); + } + + void npc_selectattack() + { + if ((HEADBUTT_DELAY)) + { + ANIM_ATTACK = ANIM_SWIPE; + } + else + { + if (RandomInt(1, 100) < HEADBUTT_CHANCE) + { + ANIM_ATTACK = ANIM_HEADBUTT; + HEADBUTT_DELAY = 1; + HEADBUTT_FREQ("headbutt_reset"); + } + } + } + + void headbutt_reset() + { + HEADBUTT_DELAY = 0; + } + + void attack1() + { + SWIPE_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, SWIPE_DAMAGE, ATTACK_HITCHANCE); + } + + void attack2() + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, HEADBUTT_DAMAGE, ATTACK_HITCHANCE); + HEADBUTT_ON = 1; + } + + void game_dodamage() + { + if ((HEADBUTT_ON)) + { + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_HEADBUTT, 10); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + ANIM_ATTACK = ANIM_SWIPE; + int EXIT_SUB = 1; + } + HEADBUTT_ON = 0; + if ((EXIT_SUB)) return; + if (!(SWIPE_ATTACK)) return; + SWIPE_ATTACK = 0; + if ((param1)) + { + // PlayRandomSound from: SOUND_SWIPEHIT1, SOUND_SWIPEHIT2 + array sounds = {SOUND_SWIPEHIT1, SOUND_SWIPEHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(-100, 130, 120)); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetMonsterHP() > WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (GetMonsterHP() <= WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (param1 > DMG_LEAP_THRESH) + { + if (GetGameTime() > NEXT_DMG_LEAP_AWAY) + { + } + NEXT_DMG_LEAP_AWAY = GetGameTime(); + NEXT_DMG_LEAP_AWAY += FREQ_LEAP_AWAY; + leap_away(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + } + + void leap_away() + { + PlayAnim("critical", ANIM_LEAP); + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "leap_boost"); + npcatk_suspend_ai(3.0); + } + + void leap_attack() + { + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + if ((CanSee("enemy", 128))) + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, LEAP_DAMAGE, ATTACK_HITCHANCE); + if (RandomInt(1, 100) < LEAP_STUNCHANCE) + { + ApplyEffect(GetEntityIndex(m_hLastSeen), "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + } + } + + void leap_done() + { + EmitSound(GetOwner(), 0, SOUND_LEAP_LAND, 10); + SetMoveAnim(ANIM_RUN); + } + + void OnFlinch() + { + EmitSound(GetOwner(), 0, SOUND_FLINCH, 10); + } + + void idle_sounds() + { + if (!(IsEntityAlive(GetOwner()))) return; + Random(3, 10)("idle_sounds"); + if (!(m_hAttackTarget == "unset")) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void run_step1() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 5); + } + + void run_step2() + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 5); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((ORC_JUMPING)) return; + if (!(IsValidPlayer(m_hAttackTarget))) return; + ORC_JUMPING = 1; + ScheduleDelayedEvent(1.0, "orc_jump_check"); + } + + void orc_jump_check() + { + if (!(ORC_JUMPING)) return; + ORC_HOP_DELAY("orc_jump_check"); + if ((IS_FLEEING)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(false)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > ORC_JUMP_THRESH) + { + orc_hop(); + } + } + + void orc_hop() + { + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + PlayAnim("critical", ANIM_LEAP); + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + int JUMP_HEIGHT = RandomInt(550, 650); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + +} + +} diff --git a/scripts/angelscript/monsters/ogre_ice.as b/scripts/angelscript/monsters/ogre_ice.as new file mode 100644 index 00000000..067cf533 --- /dev/null +++ b/scripts/angelscript/monsters/ogre_ice.as @@ -0,0 +1,110 @@ +#pragma context server + +#include "monsters/swamp_ogre.as" +#include "monsters/base_ice_race.as" + +namespace MS +{ + +class OgreIce : CGameScript +{ + string ANIM_ATTACK; + float CHANCE_FREEZE; + int DOT_FREEZE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int FLINCH_HEALTH; + int HEADBUTT_DAMAGE; + string HEADBUTT_ON; + int LEAP_DAMAGE; + int NPC_BASE_EXP; + int RUN_STEP; + string SOUND_DEATH; + string SOUND_FREEZE; + int SWIPE_ATTACK; + int SWIPE_DAMAGE; + int WEAK_THRESHOLD; + + OgreIce() + { + NPC_BASE_EXP = 450; + SOUND_DEATH = "bullchicken/bc_die1.wav"; + Precache(SOUND_DEATH); + WEAK_THRESHOLD = 1500; + SWIPE_DAMAGE = "$rand(50,90)"; + HEADBUTT_DAMAGE = "$rand(50,90)"; + LEAP_DAMAGE = "$rand(20,40)"; + CHANCE_FREEZE = 0.25; + DOT_FREEZE = 30; + DROP_GOLD = 1; + DROP_GOLD_MIN = 40; + DROP_GOLD_MAX = 60; + FLINCH_HEALTH = 2000; + SOUND_FREEZE = "magic/frost_reverse.wav"; + } + + void OnSpawn() override + { + SetName("Marogar Ogre"); + SetHealth(2500); + SetDamageResistance("all", 0.5); + SetRace("demon"); + SetRoam(true); + SetModel(MONSTER_MODEL); + SetMoveAnim(ANIM_WALK); + SetHeight(64); + SetWidth(32); + SetHearingSensitivity(2); + SetBloodType("green"); + SetIdleAnim(ANIM_IDLE); + RUN_STEP = 0; + SetProp(GetOwner(), "skin", 1); + ScheduleDelayedEvent(1.0, "idle_sounds"); + } + + void game_dodamage() + { + if ((HEADBUTT_ON)) + { + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_HEADBUTT, 10); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + ANIM_ATTACK = ANIM_SWIPE; + HEADBUTT_ON = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SWIPE_ATTACK)) return; + SWIPE_ATTACK = 0; + if ((param1)) + { + // PlayRandomSound from: SOUND_SWIPEHIT1, SOUND_SWIPEHIT2 + array sounds = {SOUND_SWIPEHIT1, SOUND_SWIPEHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(-100, 130, 120)); + if (RandomInt(1, 100) < CHANCE_FREEZE) + { + } + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_FREEZE); + EmitSound(GetOwner(), 0, SOUND_FREEZE, 10); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/ogre_stone.as b/scripts/angelscript/monsters/ogre_stone.as new file mode 100644 index 00000000..8b3184a8 --- /dev/null +++ b/scripts/angelscript/monsters/ogre_stone.as @@ -0,0 +1,165 @@ +#pragma context server + +#include "monsters/swamp_ogre.as" + +namespace MS +{ + +class OgreStone : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HEADBUTT; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_RUN_DEFAULT; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WALK_DEFAULT; + string ANIM_WARCRY; + float ATTACK_HITCHANCE; + int CAN_FLINCH; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + float FLINCH_CHANCE; + float FLINCH_DELAY; + int FLINCH_HEALTH; + float HEADBUTT_CHANCE; + int HEADBUTT_DAMAGE; + float HEADBUTT_FREQ; + int LEAP_AWAY_INTERVAL; + int LEAP_DAMAGE; + int LEAP_RANGE_TOOCLOSE; + int LEAP_RANGE_TOOFAR; + float LEAP_STUNCHANCE; + string MONSTER_MODEL; + int NEXT_LEAP_AWAY; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + float ORC_HOP_DELAY; + int ORC_JUMP_THRESH; + int RUN_STEP; + string SOUND_DEATH; + string SOUND_FLINCH; + string SOUND_HEADBUTT; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_LEAP; + string SOUND_LEAP_LAND; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWIPEHIT1; + string SOUND_SWIPEHIT2; + string SOUND_SWIPEMISS1; + string SOUND_SWIPEMISS2; + string SOUND_WARCRY; + int SWIPE_DAMAGE; + int WEAK_THRESHOLD; + + OgreStone() + { + ORC_HOP_DELAY = 1.0; + ORC_JUMP_THRESH = 80; + NPC_GIVE_EXP = 2000; + if (StringToLower(GetMapName()) == "phlames") + { + NPC_GIVE_EXP = 3000; + } + ANIM_SEARCH = "idle_look"; + ANIM_IDLE = "idle1"; + ANIM_SWIPE = "attack1"; + ANIM_HEADBUTT = "attack2"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "jump"; + ANIM_WALK_DEFAULT = "walk"; + ANIM_RUN_DEFAULT = "run1"; + ANIM_DEATH = "dieforward"; + ANIM_WARCRY = "warcry"; + ANIM_FLINCH = "bigflinch"; + ANIM_WALK = ANIM_WALK_DEFAULT; + ANIM_RUN = ANIM_RUN_DEFAULT; + ANIM_ATTACK = ANIM_SWIPE; + SOUND_IDLE1 = "bullchicken/bc_idle1.wav"; + SOUND_IDLE2 = "bullchicken/bc_idle2.wav"; + SOUND_IDLE3 = "bullchicken/bc_idle3.wav"; + SOUND_IDLE4 = "bullchicken/bc_idle4.wav"; + SOUND_IDLE5 = "bullchicken/bc_idle5.wav"; + SOUND_DEATH = "bullchicken/bc_die1.wav"; + SOUND_HEADBUTT = "bullchicken/bc_spithit1.wav"; + SOUND_SWIPEHIT1 = "zombie/claw_strike1.wav"; + SOUND_SWIPEHIT2 = "zombie/claw_strike2.wav"; + SOUND_SWIPEMISS1 = "zombie/claw_miss1.wav"; + SOUND_SWIPEMISS2 = "zombie/claw_miss2.wav"; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STEP1 = "player/pl_dirt1.wav"; + SOUND_STEP2 = "player/pl_dirt2.wav"; + SOUND_PAIN_WEAK = "debris/concrete1.wav"; + SOUND_PAIN_STRONG = "debris/concrete1.wav"; + SOUND_WARCRY = "bullchicken/bc_attackgrowl3.wav"; + SOUND_LEAP = "bullchicken/bc_attackgrowl2.wav"; + SOUND_LEAP_LAND = "weapons/g_bounce2.wav"; + SOUND_FLINCH = "bullchicken/bc_pain3.wav"; + Precache(SOUND_DEATH); + WEAK_THRESHOLD = 1000; + SWIPE_DAMAGE = "$rand(75,125)"; + HEADBUTT_CHANCE = 1.0; + HEADBUTT_FREQ = 7.0; + HEADBUTT_DAMAGE = "$rand(50,100)"; + LEAP_DAMAGE = "$rand(10,60)"; + LEAP_STUNCHANCE = 0.3; + LEAP_RANGE_TOOFAR = 512; + LEAP_RANGE_TOOCLOSE = 128; + LEAP_AWAY_INTERVAL = 500; + NEXT_LEAP_AWAY = 1800; + NPC_BASE_EXP = 700; + DROP_GOLD = 1; + DROP_GOLD_MIN = 100; + DROP_GOLD_MAX = 250; + ATTACK_HITCHANCE = 0.95; + CAN_FLINCH = 1; + FLINCH_CHANCE = 0.2; + FLINCH_DELAY = 10.0; + FLINCH_HEALTH = 1500; + MONSTER_MODEL = "monsters/swamp_ogre.mdl"; + } + + void OnSpawn() override + { + SetName("Stone Ogre"); + SetHealth(4000); + SetRoam(true); + SetRace("demon"); + SetModel(MONSTER_MODEL); + SetMoveAnim(ANIM_WALK); + SetHeight(64); + SetWidth(32); + SetHearingSensitivity(8); + SetIdleAnim(ANIM_IDLE); + SetProp(GetOwner(), "skin", 2); + SetDamageResistance("all", 0.5); + SetDamageResistance("poison", 0.0); + RUN_STEP = 0; + ScheduleDelayedEvent(1.0, "idle_sounds"); + } + + void OnPostSpawn() override + { + SetDamageResistance("holy", 2.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/ogre_swamp.as b/scripts/angelscript/monsters/ogre_swamp.as new file mode 100644 index 00000000..b657a555 --- /dev/null +++ b/scripts/angelscript/monsters/ogre_swamp.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/swamp_ogre.as" + +namespace MS +{ + +class OgreSwamp : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/orc_archer.as b/scripts/angelscript/monsters/orc_archer.as new file mode 100644 index 00000000..d91dade1 --- /dev/null +++ b/scripts/angelscript/monsters/orc_archer.as @@ -0,0 +1,65 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcArcher : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DROPS_CONTAINER; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string DROP_ITEM2; + float DROP_ITEM2_CHANCE; + int MOVE_RANGE; + int NPC_GIVE_EXP; + + OrcArcher() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(2, 8); + NPC_GIVE_EXP = 25; + ANIM_ATTACK = "shootorcbow"; + AIM_RATIO = 30; + ARROW_DAMAGE_LOW = 3; + ARROW_DAMAGE_HIGH = 5; + MOVE_RANGE = 400; + ATTACK_RANGE = 800; + ATTACK_SPEED = 700; + ATTACK_CONE_OF_FIRE = 3; + DROP_ITEM1 = "bows_orcbow"; + DROP_ITEM1_CHANCE = 0.2; + DROP_ITEM2 = "proj_arrow_wooden"; + DROP_ITEM2_CHANCE = 0.8; + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_bluntwood"; + } + + void orc_spawn() + { + SetHealth(40); + SetName("Orc Archer"); + SetHearingSensitivity(1.5); + SetStat("parry", 20); + SetModelBody(0, 1); + SetModelBody(1, 1); + SetModelBody(2, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_archer_blackhand.as b/scripts/angelscript/monsters/orc_archer_blackhand.as new file mode 100644 index 00000000..6e47ba98 --- /dev/null +++ b/scripts/angelscript/monsters/orc_archer_blackhand.as @@ -0,0 +1,73 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcArcherBlackhand : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DROPS_CONTAINER; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string DROP_ITEM2; + float DROP_ITEM2_CHANCE; + float FLINCH_CHANCE; + int MOVE_RANGE; + int NPC_GIVE_EXP; + + OrcArcherBlackhand() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(8, 16); + NPC_GIVE_EXP = 40; + DROP_ITEM1 = "bows_shortbow"; + DROP_ITEM1_CHANCE = 0.2; + DROP_ITEM2 = "proj_arrow_broadhead"; + DROP_ITEM2_CHANCE = 0.8; + ANIM_ATTACK = "shootorcbow"; + FLINCH_CHANCE = 0.45; + AIM_RATIO = 50; + ARROW_DAMAGE_LOW = 6; + ARROW_DAMAGE_HIGH = 10; + MOVE_RANGE = 500; + ATTACK_RANGE = 2000; + ATTACK_SPEED = 900; + ATTACK_CONE_OF_FIRE = 2; + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_wooden"; + } + + void orc_spawn() + { + SetHealth(60); + SetName("Blackhand Archer"); + if (GetMapName() == "ms_wicardoven") + { + SetName("Voldar Recruit"); + SetProp(GetOwner(), "skin", 3); + } + SetHearingSensitivity(2); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + SetModelBody(0, 1); + SetModelBody(1, 2); + SetModelBody(2, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_base.as b/scripts/angelscript/monsters/orc_base.as new file mode 100644 index 00000000..d733e8fc --- /dev/null +++ b/scripts/angelscript/monsters/orc_base.as @@ -0,0 +1,299 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class OrcBase : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BO_ZOMBIE_MODE; + int CALLED_HELP; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + float FLINCH_CHANCE; + int FLINCH_DELAY; + int HUNT_AGRO; + int IS_RANGED; + string LAST_ENEMY; + int MOVE_RANGE; + string NEXT_ORC_VALIDATE_SOUND; + int NO_STEP_ADJ; + int NPC_SILENT_DEATH; + int ORC_JUMPER; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_HELP; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + string SOUND_ZOMB_ALERT1; + string SOUND_ZOMB_ALERT2; + string SOUND_ZOMB_ALERT3; + string SOUND_ZOMB_ATK1; + string SOUND_ZOMB_ATK2; + string SOUND_ZOMB_ATK3; + string SOUND_ZOMB_STRUCK1; + string SOUND_ZOMB_STRUCK2; + string SOUND_ZOMB_STRUCK3; + float ZORC_DMG_MULTI; + float ZORC_HP_MULTI; + + OrcBase() + { + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_HIT = "voices/orc/hit.wav"; + SOUND_HIT2 = "voices/orc/hit2.wav"; + SOUND_HIT3 = "voices/orc/hit3.wav"; + SOUND_PAIN = "monsters/orc/pain.wav"; + SOUND_WARCRY1 = "monsters/orc/battlecry.wav"; + SOUND_ATTACK1 = "voices/orc/attack.wav"; + SOUND_ATTACK2 = "voices/orc/attack2.wav"; + SOUND_ATTACK3 = "voices/orc/attack3.wav"; + NPC_SILENT_DEATH = 1; + SOUND_HELP = "voices/orc/help.wav"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die_fallback"; + HUNT_AGRO = 1; + CAN_HEAR = 1; + CAN_FLEE = 0; + CAN_FLINCH = 1; + FLINCH_CHANCE = 0.3; + ANIM_FLINCH = "flinch"; + FLINCH_DELAY = 4; + LAST_ENEMY = "NONE"; + ZORC_DMG_MULTI = 5.0; + ZORC_HP_MULTI = 6.0; + SOUND_ZOMB_STRUCK1 = "debris/flesh2.wav"; + SOUND_ZOMB_STRUCK2 = "agrunt/ag_pain3.wav"; + SOUND_ZOMB_STRUCK3 = "agrunt/ag_pain5.wav"; + SOUND_ZOMB_ATK1 = "zombie/claw_miss1.wav"; + SOUND_ZOMB_ATK2 = "zombie/claw_miss2.wav"; + SOUND_ZOMB_ATK3 = "zombie/claw_strike1.wav"; + SOUND_ZOMB_ALERT1 = "monsters/zombie1/orc_zo_alert10.wav"; + SOUND_ZOMB_ALERT2 = "monsters/zombie1/orc_zo_alert20.wav"; + SOUND_ZOMB_ALERT3 = "monsters/zombie1/orc_zo_alert30.wav"; + } + + void OnSpawn() override + { + SetRoam(true); + SetRace("orc"); + SetModel("monsters/orc.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + orc_spawn(); + if (!(StringToLower(GetMapName()) == "daragoth")) return; + NO_STEP_ADJ = 1; + } + + void OnPostSpawn() override + { + if ((G_SHAD_PRESENT)) + { + bo_zombie_mode(); + } + if ((G_SHAD_PRESENT)) return; + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "old_helena") + { + NPC_GIVE_EXP /= 2; + SetSkillLevel(NPC_GIVE_EXP); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + SetModelBody(4, 0); + orc_death(); + } + + void OnTargetValidate(CBaseEntity@ target) + { + string LASTSEEN_ENEMY = m_hAttackTarget; + if (!(LASTSEEN_ENEMY != LAST_ENEMY)) return; + if (!(BO_ZOMBIE_MODE)) + { + if (GetGameTime() > NEXT_ORC_VALIDATE_SOUND) + { + } + NEXT_ORC_VALIDATE_SOUND = GetGameTime(); + NEXT_ORC_VALIDATE_SOUND += Random(5.0, 10.0); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_ATTACK2, 5); + } + else + { + if (GetGameTime() > NEXT_ORC_VALIDATE_SOUND) + { + } + NEXT_ORC_VALIDATE_SOUND = GetGameTime(); + NEXT_ORC_VALIDATE_SOUND += Random(5.0, 10.0); + // PlayRandomSound from: SOUND_ZOMB_ALERT1, SOUND_ZOMB_ALERT2, SOUND_ZOMB_ALERT3 + array sounds = {SOUND_ZOMB_ALERT1, SOUND_ZOMB_ALERT2, SOUND_ZOMB_ALERT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + LAST_ENEMY = LASTSEEN_ENEMY; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (ORC_SHIELD == 1) + { + if (!(BO_ZOMBIE_MODE)) + { + } + int block = RandomInt(0, 99); + if (block < 30) + { + if (block < 5) + { + PlayAnim("critical", "deflectcounter"); + swing_axe(); + } + else + { + int rand = RandomInt(0, 1); + if (rand == 0) + { + PlayAnim("critical", "shielddeflect1"); + } + if (rand == 1) + { + PlayAnim("critical", "shielddeflect2"); + } + } + } + else + { + sound_struck(); + } + } + else + { + sound_struck(); + } + orc_struck(); + } + + void sound_struck() + { + if ((BO_ZOMBIE_MODE)) + { + // PlayRandomSound from: SOUND_ZOMB_STRUCK1, SOUND_ZOMB_STRUCK2, SOUND_ZOMB_STRUCK3 + array sounds = {SOUND_ZOMB_STRUCK1, SOUND_ZOMB_STRUCK2, SOUND_ZOMB_STRUCK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void baseorc_yell() + { + if ((BO_ZOMBIE_MODE)) + { + // PlayRandomSound from: SOUND_ZOMB_ATK1, SOUND_ZOMB_ATK2, SOUND_ZOMB_ATK3 + array sounds = {SOUND_ZOMB_ATK1, SOUND_ZOMB_ATK2, SOUND_ZOMB_ATK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(ATTACK_PUSH != "ATTACK_PUSH")) return; + if (!(ATTACK_PUSH != "none")) return; + AddVelocity(m_hLastStruckByMe, ATTACK_PUSH); + } + + void OnParry(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnAidingAlly(CBaseEntity@ ally, CBaseEntity@ enemy) + { + if ((CALLED_HELP)) return; + CALLED_HELP = 1; + Precache("voices/orc/help.wav"); + CallExternal(GetEntityIndex(param2), "ext_mon_playsound", 0, 10, "voices/orc/help.wav"); + } + + void bo_zombie_mode() + { + SetRace("undead"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.5); + SetProp(GetOwner(), "skin", 1); + SetAnimFrameRate(0.5); + SetModelBody(2, 0); + MOVE_RANGE = 32; + ATTACK_MOVERANGE = 32; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 140; + IS_RANGED = 0; + ORC_JUMPER = 0; + ANIM_ATTACK = "swordswing1_L"; + SetDamageMultiplier(ZORC_DMG_MULTI); + string HP_MULTI = GetMonsterMaxHP(); + HP_MULTI *= ZORC_HP_MULTI; + SetHealth(HP_MULTI); + BO_ZOMBIE_MODE = 1; + SetStat("parry", 0); + NPC_GIVE_EXP *= 4.0; + SetSkillLevel(NPC_GIVE_EXP); + string MY_NAME = GetEntityName(GetOwner()); + if ((StringToLower(MY_NAME)).findFirst("zombie") >= 0) + { + int NO_NAME_CHANGE = 1; + } + if ((NO_NAME_CHANGE)) return; + SetName("GetEntityName(GetOwner()) Zombie"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(BO_ZOMBIE_MODE)) + { + EmitSound(GetOwner(), 0, "voices/orc/die.wav", 5); + } + else + { + EmitSound(GetOwner(), 0, "agrunt/ag_die5.wav", 5); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_base_melee.as b/scripts/angelscript/monsters/orc_base_melee.as new file mode 100644 index 00000000..2a87caa7 --- /dev/null +++ b/scripts/angelscript/monsters/orc_base_melee.as @@ -0,0 +1,128 @@ +#pragma context server + +namespace MS +{ + +class OrcBaseMelee : CGameScript +{ + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int MOVE_RANGE; + int ORC_HOP_DELAY; + int ORC_JUMPER; + int ORC_JUMPING; + int ORC_JUMP_CUTOFF; + int ORC_JUMP_POWER; + int ORC_JUMP_RANGE; + int ORC_JUMP_THRESH; + int ORC_SUPERJUMPER; + string TARGET_Z_DIFFERENCE; + + OrcBaseMelee() + { + MOVE_RANGE = 32; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + ORC_JUMP_RANGE = 512; + ORC_JUMP_CUTOFF = 400; + ORC_JUMP_POWER = RandomInt(350, 450); + ORC_HOP_DELAY = RandomInt(2, 4); + ORC_JUMP_THRESH = 80; + } + + void orc_spawn() + { + SetWidth(32); + SetHeight(72); + SetHearingSensitivity(4); + } + + void swing_axe() + { + baseorc_yell(); + float L_DMG = Random(ATTACK_DMG_LOW, ATTACK_DMG_HIGH); + XDoDamage(m_hLastSeen, ATTACK_HITRANGE, L_DMG, ATTACK_ACCURACY, GetOwner(), GetOwner(), "none", "slash", "dmgevent:swing"); + } + + void swing_sword() + { + swing_axe(); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(ORC_JUMPER)) return; + if ((ORC_JUMPING)) return; + if (!(IsValidPlayer(m_hAttackTarget))) return; + ORC_JUMPING = 1; + ScheduleDelayedEvent(1.0, "orc_jump_check"); + } + + void orc_jump_check() + { + if (!(ORC_JUMPING)) return; + ORC_HOP_DELAY("orc_jump_check"); + if ((IS_FLEEING)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) < ORC_JUMP_RANGE)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > ORC_JUMP_THRESH) + { + if (!(ORC_SUPERJUMPER)) + { + if (TARGET_Z_DIFFERENCE < ORC_JUMP_CUTOFF) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + PlayAnim("critical", ANIM_ATTACK); + ScheduleDelayedEvent(0.1, "orc_hop"); + } + } + + void orc_hop() + { + EmitSound(GetOwner(), 0, "monsters/orc/attack1.wav", 10); + string JUMP_HEIGHT = ORC_JUMP_POWER; + if ((GetMapName()).findFirst("helena") >= 0) + { + int JUMP_HEIGHT = RandomInt(450, 550); + } + int FWD_BOOST = 250; + if ((ORC_SUPERJUMPER)) + { + string JUMP_HEIGHT = TARGET_Z_DIFFERENCE; + JUMP_HEIGHT *= 5; + string FWD_BOOST = GetEntityRange(m_hAttackTarget); + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, FWD_BOOST, JUMP_HEIGHT)); + } + + void my_target_died() + { + if ((false)) return; + ORC_JUMPING = 0; + } + + void make_jumper() + { + ORC_JUMPER = 1; + } + + void make_superjumper() + { + ORC_JUMPER = 1; + ORC_SUPERJUMPER = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_base_ranged.as b/scripts/angelscript/monsters/orc_base_ranged.as new file mode 100644 index 00000000..0456e91c --- /dev/null +++ b/scripts/angelscript/monsters/orc_base_ranged.as @@ -0,0 +1,70 @@ +#pragma context server + +namespace MS +{ + +class OrcBaseRanged : CGameScript +{ + string AS_ATTACKING; + string ATTACK_HITRANGE; + string ATTACK_RANGE; + string MOVE_RANGE; + string SOUND_BOW; + + OrcBaseRanged() + { + if (MOVE_RANGE == "MOVE_RANGE") + { + MOVE_RANGE = 1000; + } + if (ATTACK_RANGE == "ATTACK_RANGE") + { + ATTACK_RANGE = 1000; + } + if (ATTACK_HITRANGE == "ATTACK_HITRANGE") + { + ATTACK_HITRANGE = 1000; + } + SOUND_BOW = "weapons/bow/bow.wav"; + } + + void orc_spawn() + { + SetWidth(32); + SetHeight(60); + } + + void orc_death() + { + SetModelBody(3, 0); + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void shoot_arrow() + { + AS_ATTACKING = GetGameTime(); + string AIM_ANGLE = GetEntityDist(m_hLastSeen); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + float LCL_ATKDMG = Random(ARROW_DAMAGE_LOW, ARROW_DAMAGE_HIGH); + TossProjectile("proj_arrow_npc", /* TODO: $relpos */ $relpos(0, 0, 18), "none", ATTACK_SPEED, LCL_ATKDMG, ATTACK_CONE_OF_FIRE, "none"); + SetModelBody(3, 0); + EmitSound(GetOwner(), SOUND_BOW); + } + + void npc_targetsighted() + { + if ((ALT_ATTACKS)) return; + if (GetEntityRange(param1) < ATTACK_RANGE) + { + PlayAnim("once", ANIM_ATTACK); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_berserker.as b/scripts/angelscript/monsters/orc_berserker.as new file mode 100644 index 00000000..63c3357b --- /dev/null +++ b/scripts/angelscript/monsters/orc_berserker.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/orc_berserker_blackhand.as" + +namespace MS +{ + +class OrcBerserker : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/orc_berserker_blackhand.as b/scripts/angelscript/monsters/orc_berserker_blackhand.as new file mode 100644 index 00000000..5cc33d77 --- /dev/null +++ b/scripts/angelscript/monsters/orc_berserker_blackhand.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcBerserkerBlackhand : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + string ATTACK_PUSH; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLINCH_CHANCE; + int NPC_GIVE_EXP; + int ORC_SHIELD; + + OrcBerserkerBlackhand() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(8, 16); + NPC_GIVE_EXP = 60; + DROP_ITEM1 = "swords_shortsword"; + DROP_ITEM1_CHANCE = 0.25; + ANIM_ATTACK1 = "battleaxe_swing1_L"; + ANIM_ATTACK2 = "swordswing1_L"; + FLINCH_CHANCE = 0.45; + ATTACK_ACCURACY = 0.7; + ATTACK_DMG_LOW = 10; + ATTACK_DMG_HIGH = 20; + ORC_SHIELD = RandomInt(0, 1); + } + + void swing_sword() + { + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-100, 130, 120); + } + + void orc_spawn() + { + SetHealth(120); + SetName("Blackhand Warrior"); + if (GetMapName() == "ms_wicardoven") + { + SetName("Voldar Recruit"); + SetProp(GetOwner(), "skin", 3); + } + SetHearingSensitivity(2); + SetStat("parry", 50); + SetDamageResistance("all", ".7"); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 4); + if (ORC_SHIELD == 1) + { + if (!(BO_ZOMBIE_MODE)) + { + } + SetStat("parry", 90); + SetModelBody(2, 6); + } + } + + void npc_selectattack() + { + ANIM_ATTACK = ANIM_ATTACK1; + ATTACK_PUSH = "none"; + if (RandomInt(0, 99) < 30) + { + ANIM_ATTACK = ANIM_ATTACK2; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_brawler.as b/scripts/angelscript/monsters/orc_brawler.as new file mode 100644 index 00000000..9a691622 --- /dev/null +++ b/scripts/angelscript/monsters/orc_brawler.as @@ -0,0 +1,301 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcBrawler : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_KICK; + string ANIM_SLAP; + string ANIM_SMASH; + string ANIM_SWIPE1; + string ANIM_WARCRY; + int ATTACKING; + float ATTACK_ACCURACY; + int ATTACK_DAMAGE; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + string ATTACK_PUSH; + int ATTACK_RANGE; + string ATTACK_TYPE; + int CHARGE_DELAY; + int DONE_WARCRY; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLINCH_CHANCE; + float KICK_DMG_DELAY; + int MOVE_RANGE; + string NEXT_ATTACK; + int NPC_GIVE_EXP; + float SLAP_DMG_DELAY; + string SOUND_CHARGE; + string SOUND_KICK; + string SOUND_KICKHIT; + string SOUND_SLAP; + string SOUND_SLAPHIT; + string SOUND_WARCRY; + float STUCK_CHECK_FREQUENCY; + float ZORC_DMG_MULTI; + float ZORC_HP_MULTI; + + OrcBrawler() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(30, 60); + NPC_GIVE_EXP = 200; + DROP_ITEM1 = "blunt_gauntlets"; + DROP_ITEM1_CHANCE = 0.2; + ANIM_ATTACK1 = "swordswing1_L"; + ANIM_SMASH = "battleaxe_swing1_L"; + ANIM_SWIPE1 = "swordswing1_L"; + ANIM_SLAP = "deflectcounter"; + ANIM_KICK = "kick"; + ANIM_WARCRY = "warcry"; + KICK_DMG_DELAY = 0.5; + SLAP_DMG_DELAY = 0.5; + FLINCH_CHANCE = 0.45; + ATTACK_ACCURACY = 0.7; + ATTACK_DAMAGE = RandomInt(50, 100); + ATTACK_DMG_LOW = 10; + ATTACK_DMG_HIGH = 20; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 150; + ATTACK_MOVERANGE = 50; + MOVE_RANGE = 50; + SOUND_KICK = "zombie/claw_miss1.wav"; + SOUND_SLAP = "zombie/claw_miss2.wav"; + SOUND_KICKHIT = "zombie/claw_strike2.wav"; + SOUND_SLAPHIT = "zombie/claw_strike3.wav"; + SOUND_WARCRY = "monsters/troll/trollidle.wav"; + SOUND_CHARGE = "garg/gar_alert3.wav"; + STUCK_CHECK_FREQUENCY = 2.0; + ZORC_DMG_MULTI = 4.0; + ZORC_HP_MULTI = 3.0; + } + + void orc_spawn() + { + if ((G_SHAD_PRESENT)) + { + ScheduleDelayedEvent(0.1, "bo_zombie_mode"); + } + SetHealth(1000); + if (StringToLower(GetMapName()) == "mscave") + { + SetWidth(32); + } + if (StringToLower(GetMapName()) != "mscave") + { + SetWidth(38); + } + SetHeight(72); + SetName("Orcish Brawler"); + SetHearingSensitivity(8); + SetModel("monsters/orc_big.mdl"); + SetMoveSpeed(2.0); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetModelBody(2, 0); + if (ORC_SHIELD == 1) + { + if (!(BO_ZOMBIE_MODE)) + { + } + SetModelBody(2, 6); + } + } + + void npc_selectattack() + { + ATTACK_PUSH = "none"; + if ((ATTACKING)) return; + if (NEXT_ATTACK == "NEXT_ATTACK") + { + ATTACK_TYPE = RandomInt(1, 4); + } + if (NEXT_ATTACK != "NEXT_ATTACK") + { + ATTACK_TYPE = NEXT_ATTACK; + } + ATTACKING = 1; + if (ATTACK_TYPE == 1) + { + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-200, 230, 220); + ATTACK_DAMAGE = RandomInt(50, 150); + ANIM_ATTACK = ANIM_SMASH; + PlayAnim("critical", ANIM_SMASH); + ATTACK_TYPE = RandomInt(1, 4); + } + if (ATTACK_TYPE == 2) + { + ATTACK_DAMAGE = RandomInt(25, 100); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-100, 130, 120); + ANIM_ATTACK = ANIM_SWIPE1; + PlayAnim("critical", ANIM_SWIPE1); + ATTACK_TYPE = RandomInt(1, 4); + } + if (ATTACK_TYPE == 3) + { + ATTACK_DAMAGE = RandomInt(25, 50); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-10, 13, 12); + ANIM_ATTACK = ANIM_SLAP; + PlayAnim("critical", ANIM_SLAP); + EmitSound(GetOwner(), 0, SOUND_SLAP, 10); + SLAP_DMG_DELAY("slap_damage"); + NEXT_ATTACK = 1; + } + if (ATTACK_TYPE == 4) + { + ATTACK_DAMAGE = RandomInt(50, 100); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-300, 330, 320); + ANIM_ATTACK = ANIM_KICK; + PlayAnim("critical", ANIM_KICK); + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + KICK_DMG_DELAY("kick_damage"); + if (!(I_R_FROZEN)) + { + SetMoveSpeed(2.0); + } + NEXT_ATTACK = 1; + } + } + + void kick_damage() + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY); + ATTACKING = 0; + } + + void slap_damage() + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY); + ATTACKING = 0; + } + + void swing_axe() + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY); + baseorc_yell(); + ATTACKING = 0; + } + + void swing_sword() + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY); + baseorc_yell(); + ATTACKING = 0; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(DID_WARCRY)) + { + if ((IsValidPlayer(m_hLastSeen))) + { + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + DONE_WARCRY = 0; + ScheduleDelayedEvent(3.0, "warcry_over"); + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (!(DONE_WARCRY)) return; + string NME_RANGE = GetEntityRange(m_hLastSeen); + if (!(NME_RANGE > 200)) return; + if ((CHARGE_DELAY)) return; + start_charge(); + } + + void start_charge() + { + ApplyEffect(GetOwner(), "effects/sfx_motionblur", GetEntityIndex(GetOwner()), 0); + if (!(I_R_FROZEN)) + { + SetMoveSpeed(5.0); + } + EmitSound(GetOwner(), 0, SOUND_CHARGE, 10); + NEXT_ATTACK = 4; + CHARGE_DELAY = 1; + ScheduleDelayedEvent(3.0, "charge_out"); + ScheduleDelayedEvent(10.0, "charge_reset"); + } + + void charge_out() + { + if (!(I_R_FROZEN)) + { + SetMoveSpeed(2.0); + } + } + + void charge_reset() + { + CHARGE_DELAY = 0; + } + + void warcry_over() + { + DONE_WARCRY = 1; + } + + void game_dodamage() + { + ATTACKING = 0; + if (!(param1)) return; + if (ATTACK_TYPE == 1) + { + if (RandomInt(1, 5) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", RandomInt(5, 10), GetEntityIndex(GetOwner())); + } + } + if (ATTACK_TYPE == 2) + { + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", RandomInt(5, 10), GetEntityIndex(GetOwner())); + } + } + if (ATTACK_TYPE == 3) + { + EmitSound(GetOwner(), 0, SOUND_SLAPHIT, 10); + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", RandomInt(5, 10), GetEntityIndex(GetOwner())); + } + } + if (ATTACK_TYPE == 4) + { + EmitSound(GetOwner(), 0, SOUND_KICKHIT, 10); + if (RandomInt(1, 2) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 200, 30)); + } + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", RandomInt(5, 10), GetEntityIndex(GetOwner())); + } + } + + void freeze_solid_end() + { + SetMoveSpeed(2.0); + } + + void bo_zombie_mode() + { + npc_suicide(); + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_cata_winder.as b/scripts/angelscript/monsters/orc_cata_winder.as new file mode 100644 index 00000000..23fa5af9 --- /dev/null +++ b/scripts/angelscript/monsters/orc_cata_winder.as @@ -0,0 +1,238 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class OrcCataWinder : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_WIND; + int ATTACK_HITCHANCE; + int DMG_KICK; + string FINAL_KICK_TARG; + int FLINCH_CHANCE; + float FREQ_KICK; + int KICK_DELAY; + int KICK_RANGE; + string MY_YAW; + string NEW_NAME; + int NPC_DMG_MULTI; + int NPC_HP_MULTI; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_HELP; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + string TRIG_PREFIX; + int WIND_ON; + + OrcCataWinder() + { + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "kick"; + ANIM_WIND = "turn_valve"; + ANIM_FLINCH = "flinch"; + ANIM_DEATH = "die_fallback"; + FLINCH_CHANCE = 50; + KICK_RANGE = 180; + DMG_KICK = 80; + ATTACK_HITCHANCE = 90; + FREQ_KICK = 7.0; + SOUND_ATTACK1 = "voices/orc/attack.wav"; + SOUND_ATTACK2 = "voices/orc/attack2.wav"; + SOUND_ATTACK3 = "voices/orc/attack3.wav"; + SOUND_HIT = "voices/orc/hit.wav"; + SOUND_HIT2 = "voices/orc/hit2.wav"; + SOUND_HIT3 = "voices/orc/hit3.wav"; + SOUND_PAIN = "monsters/orc/pain.wav"; + SOUND_WARCRY1 = "monsters/orc/battlecry.wav"; + SOUND_DEATH = "voices/orc/die.wav"; + SOUND_HELP = "voices/orc/help.wav"; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(7.0); + if ((IsEntityAlive(GetOwner()))) + { + } + if (!(WIND_ON)) + { + wind_toggle(); + } + face_cata(); + PlayAnim("once", ANIM_WIND); + SetIdleAnim(ANIM_WIND); + } + + void OnSpawn() override + { + SetName("Orc Catapult Winder"); + SetRace("orc"); + SetModel("monsters/orc_big.mdl"); + SetWidth(38); + SetHeight(72); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 0); + SetSkillLevel(80); + SetGold(RandomInt(10, 30)); + SetHealth(2000); + SetDamageResistance("all", 0.5); + SetStat("parry", 40); + SetDamageResistance("stun", 0); + WIND_ON = 0; + ScheduleDelayedEvent(1.0, "get_yaw"); + } + + void get_yaw() + { + MY_YAW = GetMonsterProperty("angles.yaw"); + MY_YAW += -90; + SetAngles("face"); + SetOrigin(/* TODO: $relpos */ $relpos(0, -18, 0)); + } + + void game_postspawn() + { + NEW_NAME = param1; + if (NEW_NAME != "default") + { + SetName(NEW_NAME); + } + NPC_DMG_MULTI = 1; + if (param2 > 1) + { + NPC_DMG_MULTI += param2; + SetDamageMultiplier(param2); + } + NPC_HP_MULTI = 1; + if (param3 > 1) + { + string MY_HP = GetEntityMaxHealth(GetOwner()); + MY_HP *= param3; + SetHealth(MY_HP); + } + TRIG_PREFIX = param4; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(IsEntityAlive(GetOwner()))) return; + if (param1 > 20) + { + if (RandomInt(1, 100) < FLINCH_CHANCE) + { + } + PlayAnim("critical", ANIM_FLINCH); + } + if ((KICK_DELAY)) return; + KICK_DELAY = 1; + FREQ_KICK("reset_kick_delay"); + // PlayRandomSound from: "game.sound.maxvol", SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {"game.sound.maxvol", SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(param1 > 20)) return; + string KICK_TARG = GetEntityIndex(m_hLastStruck); + if (!(GetEntityRange(KICK_TARG) < KICK_RANGE)) return; + SetMoveDest(KICK_TARG); + FINAL_KICK_TARG = KICK_TARG; + PlayAnim("critical", ANIM_ATTACK); + ScheduleDelayedEvent(2.0, "face_cata"); + } + + void face_cata() + { + SetAngles("face"); + } + + void reset_kick_delay() + { + KICK_DELAY = 0; + } + + void kick_land() + { + LogDebug("kick_landed: GetEntityName(FINAL_KICK_TARG) GetEntityRange(FINAL_KICK_TARG)"); + baseorc_yell(); + DoDamage(FINAL_KICK_TARG, KICK_RANGE, DMG_KICK, 1.0, "blunt"); + } + + void baseorc_yell() + { + // PlayRandomSound from: "game.sound.maxvol", SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {"game.sound.maxvol", SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), "game.sound.weapon", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if (!(param1)) return; + Effect("glow", GetOwner(), Vector3(255, 255, 255), 64, 1, 1); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 800, 800))); + } + + void fire_cata() + { + if (!(IsEntityAlive(GetOwner()))) return; + string TRIG_STRING = TRIG_PREFIX; + TRIG_STRING += "_fire"; + UseTrigger(TRIG_STRING); + SetIdleAnim(ANIM_IDLE); + if ((WIND_ON)) + { + ScheduleDelayedEvent(2.0, "wind_toggle"); + } + } + + void wind_toggle() + { + if (!(WIND_ON)) + { + WIND_ON = 1; + } + else + { + WIND_ON = 0; + } + string TRIG_STRING = TRIG_PREFIX; + TRIG_STRING += "_wind"; + UseTrigger(TRIG_STRING); + } + + void OnDeath(CBaseEntity@ attacker) override + { + string TRIG_STRING = TRIG_PREFIX; + TRIG_STRING += "_died"; + UseTrigger(TRIG_STRING); + if ((WIND_ON)) + { + wind_toggle(); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_champion.as b/scripts/angelscript/monsters/orc_champion.as new file mode 100644 index 00000000..fb9babce --- /dev/null +++ b/scripts/angelscript/monsters/orc_champion.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "helena/orcwarrior_hard.as" + +namespace MS +{ + +class OrcChampion : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/orc_chief.as b/scripts/angelscript/monsters/orc_chief.as new file mode 100644 index 00000000..0910ce97 --- /dev/null +++ b/scripts/angelscript/monsters/orc_chief.as @@ -0,0 +1,188 @@ +#pragma context server + +#include "monsters/orc_base.as" +#include "monsters/orc_base_melee.as" + +namespace MS +{ + +class OrcChief : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTAKC_MOVERANGE; + string DROP_ITEM1; + string DROP_ITEM1_CHANCE; + float FLINCH_CHANCE; + int INFERNAL; + int MOVE_RANGE; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + int OVERRIDE_NODROP; + string WARBOSS_VALID_MAP; + + OrcChief() + { + OVERRIDE_NODROP = 1; + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 0.5; + ANIM_ATTACK = "battleaxe_swing1_L"; + FLINCH_CHANCE = 0.35; + INFERNAL = 0; + ATTACK_ACCURACY = 0.8; + ATTACK_DMG_LOW = 75; + ATTACK_DMG_HIGH = 650; + MOVE_RANGE = 64; + ATTAKC_MOVERANGE = 64; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 225; + } + + void orc_spawn() + { + SetHealth(3000); + SetWidth(38); + SetHeight(72); + NPC_GIVE_EXP = 750; + SetName("Orc Warlord"); + string L_MAP_NAME = StringToLower(GetMapName()); + if (StringToLower(GetMapName()) == "ara") + { + NPC_GIVE_EXP = 1000; + WARBOSS_VALID_MAP = 1; + DROP_ITEM1 = "axes_greataxe"; + DROP_ITEM1_CHANCE = 50; + } + else + { + if (L_MAP_NAME == "foutpost") + { + DROP_ITEM2 = "item_warbosshead"; + DROP_ITEM2_CHANCE = 1.0; + WARBOSS_VALID_MAP = 1; + DROP_ITEM1 = "axes_greataxe"; + DROP_ITEM1_CHANCE = 50; + } + else + { + if (L_MAP_NAME == "orcplace2_beta") + { + WARBOSS_VALID_MAP = 1; + DROP_ITEM1 = "axes_greataxe"; + DROP_ITEM1_CHANCE = 50; + } + else + { + if (L_MAP_NAME == "old_helena") + { + WARBOSS_VALID_MAP = 1; + IS_OLD_HELENA = 1; + NPC_GIVE_EXP = 10000; + } + } + } + } + if ((WARBOSS_VALID_MAP)) + { + SetName("Graznux the Warboss"); + NPC_IS_BOSS = 1; + } + SetHearingSensitivity(8); + SetStat("parry", 90); + SetDamageResistance("all", ".8"); + SetInvincible(false); + SetModel("monsters/orc_big.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 5); + } + + void swing_axe() + { + if (INFERNAL == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 5, GetOwner(), RandomInt(30, 60)); + } + } + + void godon_warboss() + { + SetName("Graznux the Invincible!"); + PlayAnim("critical", "warcry"); + SetInvincible(true); + SetSayTextRange(1024); + SayText("You fools! Now nothing can stop me!"); + } + + void offgod_warboss() + { + SetName("Graznux the Warboss"); + SetInvincible(false); + SetSayTextRange(1024); + SayText("Noooo! My power!"); + } + + void infernal_warboss() + { + SetName("Graznux the Infernal"); + PlayAnim("critical", "warcry"); + SetRace("demon"); + INFERNAL = 1; + SetSayTextRange(1024); + SayText("Feel the fire of my rage! Muahahahaaa!"); + ApplyEffect(GetOwner(), "effects/dot_fire", 60, GetOwner(), 0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("holy", 4.0); + } + + void normal_warboss() + { + SetName("Graznux the Warboss"); + SetRace("orc"); + INFERNAL = 0; + SetSayTextRange(1024); + SayText("What? No! The hellfire has abandoned me!"); + SetDamageResistance("fire", 1.0); + SetDamageResistance("holy", 0.0); + } + + void turn_undead() + { + if (!(INFERNAL)) return; + string INC_HOLY_DMG = param1; + string THE_EXCORCIST = param2; + string ME_ME = GetEntityIndex(GetOwner()); + npcatk_dodamage(ME_ME, "direct", INC_HOLY_DMG, 100, THE_EXCORCIST); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 512, 1, 1); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetGlobalVar("WARBOSS_DEAD", 1); + if ((WARBOSS_VALID_MAP)) + { + if (!(IS_OLD_HELENA)) + { + } + bm_gold_spew(25, 2, 64, 8, 24); + } + if (!(WARBOSS_VALID_MAP)) + { + bm_gold_spew(10, 3, 64, 4, 16); + } + if ((IS_OLD_HELENA)) + { + SetGlobalVar("G_WARBOSS_ORIGIN", GetEntityOrigin(GetOwner())); + CallExternal("all", "old_helena_warboss_died"); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_demonic.as b/scripts/angelscript/monsters/orc_demonic.as new file mode 100644 index 00000000..cd1c37ab --- /dev/null +++ b/scripts/angelscript/monsters/orc_demonic.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "monsters/orc_flayer.as" + +namespace MS +{ + +class OrcDemonic : CGameScript +{ + string AS_ATTACKING; + float ATTACK_ACCURACY; + float DOT_FIRE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string FIRE_BALL_DAMAGE; + int FIRE_BALL_DAMAGE_ALT; + int FIRE_BALL_DAMAGE_NORM; + float FREQ_FIREBALL; + int IS_UNHOLY; + int MELEE_ATTACK; + string NEXT_FIREBALL; + int NPC_BASE_EXP; + int ORC_JUMPER; + string SOUND_FIRECHARGE; + string SOUND_FIRESHOOT; + + OrcDemonic() + { + NPC_BASE_EXP = 200; + ATTACK_ACCURACY = 0.8; + FREQ_FIREBALL = Random(5.0, 10.0); + FIRE_BALL_DAMAGE_NORM = "$rand(75,100)"; + FIRE_BALL_DAMAGE_ALT = "$rand(25,50)"; + FIRE_BALL_DAMAGE = FIRE_BALL_DAMAGE_NORM; + DOT_FIRE = 20.0; + SOUND_FIRECHARGE = "magic/fireball_powerup.wav"; + SOUND_FIRESHOOT = "magic/fireball_strike.wav"; + ORC_JUMPER = 1; + IS_UNHOLY = 1; + } + + void orc_spawn() + { + SetHealth(500); + SetName("Demonic Blackhand"); + SetProp(GetOwner(), "skin", 2); + SetHearingSensitivity(2); + SetStat("parry", 50); + SetDamageResistance("all", ".5"); + SetDamageResistance("holy", 0.5); + SetDamageResistance("fire", 0.0); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 5); + if (!(true)) return; + ScheduleDelayedEvent(2.0, "final_adjstments"); + } + + void final_adjstments() + { + DROP_ITEM1 = "none"; + DROP_ITEM1_CHANCE = 0.0; + } + + void cycle_up() + { + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + if (!(SAY_SUMMONER)) return; + SetSayTextRange(4096); + } + + void npc_targetsighted() + { + if (!(GetGameTime() > NEXT_FIREBALL)) return; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE)) return; + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + EmitSound(GetOwner(), 0, SOUND_FIRESHOOT, 10); + PlayAnim("critical", ANIM_ATTACK); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 2.0; + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 48, 12), m_hAttackTarget, 400, FIRE_BALL_DAMAGE, 2, "none"); + CallExternal("ent_lastprojectile", "lighten", DOT_FIRE, 0.0); + } + + void swing_sword() + { + MELEE_ATTACK = 1; + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + MELEE_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_demonic_shaman.as b/scripts/angelscript/monsters/orc_demonic_shaman.as new file mode 100644 index 00000000..e5fe18f5 --- /dev/null +++ b/scripts/angelscript/monsters/orc_demonic_shaman.as @@ -0,0 +1,131 @@ +#pragma context server + +#include "monsters/orc_shaman_fire.as" + +namespace MS +{ + +class OrcDemonicShaman : CGameScript +{ + int DMG_DEATH_BURST; + int DOT_DMG; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FIRE_BALL_DAMAGE; + int FIRE_BALL_DAMAGE_ALT; + int FIRE_BALL_DAMAGE_NORM; + int FIRE_BALL_DELAY; + int IS_UNHOLY; + string MY_CL_SCRIPT_IDX; + int NPC_GIVE_EXP; + int ORC_SHAMAN_CUSTOM_DEATH; + int ORC_SHAMAN_CUSTOM_FIREBALL; + string PROJECTILE_SCRIPT; + string PROJ_ELEMENT_TARGET; + string PROJ_ELEMENT_TYPE; + string SOUND_DEATH; + string SPLODIE_TARGS; + + OrcDemonicShaman() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(50, 100); + NPC_GIVE_EXP = 300; + FIRE_BALL_DAMAGE_NORM = "$rand(100,150)"; + FIRE_BALL_DAMAGE_ALT = "$rand(5,10)"; + DOT_DMG = 50; + DMG_DEATH_BURST = 400; + ORC_SHAMAN_CUSTOM_DEATH = 1; + ORC_SHAMAN_CUSTOM_FIREBALL = 1; + PROJECTILE_SCRIPT = "proj_elemental_guided"; + PROJ_ELEMENT_TYPE = "fire_jet"; + SOUND_DEATH = "weapons/explode3.wav"; + } + + void game_precache() + { + Precache("xfireball3.spr"); + Precache("fleshgibs.mdl"); + Precache("magic/sps_fogfire.wav"); + Precache("weapons/explode3.wav"); + Precache("effects/sfx_explode"); + } + + void orc_spawn() + { + SetHealth(420); + SetName("Demonic Orc Fire Shaman"); + SetProp(GetOwner(), "skin", 2); + SetWidth(32); + SetHeight(60); + SetHearingSensitivity(8); + SetDamageResistance("all", ".8"); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("holy", 0.5); + IS_UNHOLY = 1; + FIRE_BALL_DAMAGE = FIRE_BALL_DAMAGE_NORM; + ClientEvent("persist", "all", FIRE_FIST_SCRIPT, GetEntityIndex(GetOwner()), 19); + MY_CL_SCRIPT_IDX = "game.script.last_sent_id"; + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + } + + void ext_proj_elemental_hit() + { + XDoDamage(param1, 128, FIRE_BALL_DAMAGE, 0, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:fireburst"); + } + + void fireburst_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = ARROW_ORG; + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 500, 110))); + } + + void orc_shaman_death() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + ClientEvent("remove", "all", MY_CL_SCRIPT_IDX); + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 256, DMG_DEATH_BURST, 0.1, GetOwner(), GetOwner(), "none", "generic"); + ClientEvent("new", "all", "effects/sfx_explode", GetEntityOrigin(GetOwner()), 256); + Effect("tempent", "gibs", "fleshgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, 50, 50, 15, 10.0); + SPLODIE_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(SPLODIE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(SPLODIE_TARGS, ";"); i++) + { + splodie_affect_targets(); + } + } + + void splodie_affect_targets() + { + string CUR_TARG = GetToken(SPLODIE_TARGS, i, ";"); + if (GetRelationship(CUR_TARG) == "enemy") + { + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void throw_fireball() + { + FIRE_BALL_FREQ("reset_fireball"); + FIRE_BALL_DELAY = 1; + EmitSound(GetOwner(), 0, SOUND_FIRESHOOT, 10); + PROJ_ELEMENT_TARGET = m_hAttackTarget; + TossProjectile(PROJECTILE_SCRIPT, /* TODO: $relpos */ $relpos(0, 48, 18), m_hAttackTarget, ATTACK_SPEED, FIRE_BALL_DAMAGE, ATTACK_CONE_OF_FIRE, "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_demonic_sniper.as b/scripts/angelscript/monsters/orc_demonic_sniper.as new file mode 100644 index 00000000..f06899d0 --- /dev/null +++ b/scripts/angelscript/monsters/orc_demonic_sniper.as @@ -0,0 +1,100 @@ +#pragma context server + +#include "monsters/orc_sniper.as" + +namespace MS +{ + +class OrcDemonicSniper : CGameScript +{ + string ARROW_ORG; + string ARROW_TYPE; + string CONTAINER_BASE; + int DMG_AOE; + int DMG_BOW; + int DMG_KICK; + int DMG_SMASH; + int DMG_SWIPE; + int DOT_DMG; + int DROPS_CONTAINER; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string DROP_ITEM_BASE1; + int FIN_EXP; + int IS_UNHOLY; + + OrcDemonicSniper() + { + ARROW_TYPE = "proj_arrow_npc_dyn"; + DMG_SMASH = "$rand(50,100)"; + DMG_SWIPE = "$rand(20,50)"; + DMG_KICK = "$rand(20,50)"; + DMG_BOW = RandomInt(100, 200); + DMG_AOE = 400; + DOT_DMG = 30; + DROP_ITEM_BASE1 = "none"; + DROPS_CONTAINER = 1; + CONTAINER_BASE = "chests/quiver_of_fire"; + FIN_EXP = 200; + } + + void orc_spawn() + { + SetName("Demonic Blackhand Archer"); + SetProp(GetOwner(), "skin", 2); + SetWidth(32); + SetHeight(60); + SetHealth(400); + SetHearingSensitivity(2); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + SetDamageResistance("fire", 0.0); + SetDamageResistance("holy", 0.5); + IS_UNHOLY = 1; + SetModelBody(0, 3); + SetModelBody(1, 3); + SetModelBody(2, 3); + ScheduleDelayedEvent(1.0, "reset_range"); + ScheduleDelayedEvent(2.0, "finalize_npc"); + } + + void finalize_npc() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(100, 200); + DROP_ITEM1 = DROP_ITEM_BASE1; + DROP_ITEM1_CHANCE = 0.0; + } + + void ext_arrow_landed() + { + ARROW_ORG = param1; + ClientEvent("new", "all", "effects/sfx_fire_burst", ARROW_ORG, 128, 1, Vector3(255, 0, 0)); + XDoDamage(ARROW_ORG, 128, DMG_AOE, 0, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:fireburst"); + } + + void ext_arrow_hit() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 600, 110)); + } + + void fireburst_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = ARROW_ORG; + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 500, 110))); + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_demonic_sword.as b/scripts/angelscript/monsters/orc_demonic_sword.as new file mode 100644 index 00000000..398852cf --- /dev/null +++ b/scripts/angelscript/monsters/orc_demonic_sword.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "monsters/orc_flayer.as" + +namespace MS +{ + +class OrcDemonicSword : CGameScript +{ + string AS_ATTACKING; + float ATTACK_ACCURACY; + float DOT_FIRE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string FIRE_BALL_DAMAGE; + int FIRE_BALL_DAMAGE_ALT; + int FIRE_BALL_DAMAGE_NORM; + float FREQ_FIREBALL; + int IS_UNHOLY; + int MELEE_ATTACK; + string NEXT_FIREBALL; + int NPC_BASE_EXP; + int ORC_JUMPER; + string SOUND_FIRECHARGE; + string SOUND_FIRESHOOT; + + OrcDemonicSword() + { + NPC_BASE_EXP = 220; + ATTACK_ACCURACY = 0.8; + FREQ_FIREBALL = Random(5.0, 10.0); + FIRE_BALL_DAMAGE_NORM = "$rand(75,100)"; + FIRE_BALL_DAMAGE_ALT = "$rand(25,50)"; + FIRE_BALL_DAMAGE = FIRE_BALL_DAMAGE_NORM; + DOT_FIRE = 20.0; + SOUND_FIRECHARGE = "magic/fireball_powerup.wav"; + SOUND_FIRESHOOT = "magic/fireball_strike.wav"; + ORC_JUMPER = 1; + IS_UNHOLY = 1; + } + + void orc_spawn() + { + SetHealth(500); + SetName("Demonic Blackhand Warrior"); + SetProp(GetOwner(), "skin", 2); + SetHearingSensitivity(2); + SetStat("parry", 100); + SetDamageResistance("all", ".5"); + SetDamageResistance("holy", 0.5); + SetDamageResistance("fire", 0.0); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 6); + if (!(true)) return; + ScheduleDelayedEvent(2.0, "final_adjstments"); + } + + void final_adjstments() + { + DROP_ITEM1 = "none"; + DROP_ITEM1_CHANCE = 0.0; + } + + void cycle_up() + { + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + if (!(SAY_SUMMONER)) return; + SetSayTextRange(4096); + } + + void npc_targetsighted() + { + if (!(GetGameTime() > NEXT_FIREBALL)) return; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE)) return; + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + EmitSound(GetOwner(), 0, SOUND_FIRESHOOT, 10); + PlayAnim("critical", ANIM_ATTACK); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 2.0; + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 48, 12), m_hAttackTarget, 400, FIRE_BALL_DAMAGE, 2, "none"); + CallExternal("ent_lastprojectile", "lighten", DOT_FIRE, 0.0); + } + + void swing_sword() + { + MELEE_ATTACK = 1; + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + MELEE_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_flayer.as b/scripts/angelscript/monsters/orc_flayer.as new file mode 100644 index 00000000..6d348802 --- /dev/null +++ b/scripts/angelscript/monsters/orc_flayer.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcFlayer : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLINCH_CHANCE; + int NPC_GIVE_EXP; + + OrcFlayer() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 25); + NPC_GIVE_EXP = 100; + DROP_ITEM1 = "swords_shortsword"; + DROP_ITEM1_CHANCE = 0.2; + ANIM_ATTACK = "swordswing1_L"; + FLINCH_CHANCE = 0.45; + ATTACK_ACCURACY = 0.8; + ATTACK_DMG_LOW = 18; + ATTACK_DMG_HIGH = 25; + } + + void orc_spawn() + { + SetHealth(400); + SetName("Orcish Flayer"); + SetHearingSensitivity(5); + SetStat("parry", 15); + SetStat("swordsmanship", 10); + SetDamageResistance("all", ".8"); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 4); + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_ranger.as b/scripts/angelscript/monsters/orc_ranger.as new file mode 100644 index 00000000..7048a046 --- /dev/null +++ b/scripts/angelscript/monsters/orc_ranger.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/orc_archer_blackhand.as" + +namespace MS +{ + +class OrcRanger : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/orc_scout.as b/scripts/angelscript/monsters/orc_scout.as new file mode 100644 index 00000000..9081b2e4 --- /dev/null +++ b/scripts/angelscript/monsters/orc_scout.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcScout : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DROPS_CONTAINER; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string DROP_ITEM2; + float DROP_ITEM2_CHANCE; + float FLINCH_CHANCE; + int MOVE_RANGE; + int NPC_GIVE_EXP; + + OrcScout() + { + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_AMT = RandomInt(1, 4); + NPC_GIVE_EXP = 10; + DROP_ITEM1 = "bows_orcbow"; + DROP_ITEM1_CHANCE = 0.2; + DROP_ITEM2 = "proj_arrow_wooden"; + DROP_ITEM2_CHANCE = 0.8; + ANIM_ATTACK = "shootorcbow"; + FLINCH_CHANCE = 0.7; + AIM_RATIO = 30; + ARROW_DAMAGE_LOW = 1; + ARROW_DAMAGE_HIGH = 2; + MOVE_RANGE = 300; + ATTACK_RANGE = 800; + ATTACK_SPEED = 800; + ATTACK_CONE_OF_FIRE = 2; + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_bluntwood"; + } + + void orc_spawn() + { + SetHealth(15); + SetWidth(40); + SetHeight(90); + SetName("Blackhand scout"); + if (GetMapName() == "ms_wicardoven") + { + SetName("Voldar Peon"); + SetProp(GetOwner(), "skin", 3); + } + SetHearingSensitivity(1); + SetStat("parry", 20); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetModelBody(2, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_shaman_fire.as b/scripts/angelscript/monsters/orc_shaman_fire.as new file mode 100644 index 00000000..2271d15b --- /dev/null +++ b/scripts/angelscript/monsters/orc_shaman_fire.as @@ -0,0 +1,307 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcShamanFire : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + string ANIM_FIRE; + string ANIM_SWIPE; + string ANIM_WARCRY; + int ATTACK_ACCURACY; + int ATTACK_CONE_OF_FIRE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int BASE_BURN_DAMAGE; + string BURN_DAMAGE; + string DEATH_SCRIPT; + int DID_WARCRY; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FIRE_BALL_DAMAGE; + int FIRE_BALL_DAMAGE_ALT; + int FIRE_BALL_DAMAGE_NORM; + int FIRE_BALL_DELAY; + float FIRE_BALL_FREQ; + string FIRE_FIST_SCRIPT; + float FLINCH_CHANCE; + int MELE_HITRANGE; + int MELE_RANGE; + int MOVE_RANGE; + string MY_CL_SCRIPT_IDX; + int NPC_GIVE_EXP; + int NPC_IGNORE_PLAYERS; + string POISON_TARGS; + string PROJECTILE_SCRIPT; + string SOUND_FIRECHARGE; + string SOUND_FIRESHOOT; + string SOUND_MELEHIT; + string SOUND_MELEMISS; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + int SWIPE_DAMAGE; + int SWIPE_SOUNDS; + string WEAK_ATTACK; + int WEAK_SWIPE_DAMAGE; + + OrcShamanFire() + { + PROJECTILE_SCRIPT = "proj_fire_ball"; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 30); + NPC_GIVE_EXP = 200; + ANIM_ATTACK = "swordswing1_L"; + FLINCH_CHANCE = 0.45; + AIM_RATIO = 50; + MOVE_RANGE = 256; + ATTACK_RANGE = 5500; + ATTACK_SPEED = 500; + ATTACK_CONE_OF_FIRE = 2; + FIRE_BALL_DAMAGE_NORM = "$rand(75,100)"; + FIRE_BALL_DAMAGE_ALT = "$rand(5,10)"; + MELE_RANGE = 96; + MELE_HITRANGE = 128; + ATTACK_ACCURACY = 80; + ANIM_SWIPE = "swordswing1_L"; + ANIM_FIRE = "swordswing1_L"; + ANIM_WARCRY = "warcry"; + SWIPE_DAMAGE = "$rand(25,65)"; + WEAK_SWIPE_DAMAGE = "$rand(5,20)"; + SOUND_MELEMISS = "zombie/claw_miss1.wav"; + SOUND_MELEHIT = "zombie/claw_strike3.wav"; + SOUND_FIRECHARGE = "magic/fireball_powerup.wav"; + SOUND_FIRESHOOT = "magic/fireball_strike.wav"; + SOUND_WARCRY1 = "monsters/orc/attack1.wav"; + SOUND_WARCRY2 = "monsters/orc/attack3.wav"; + BASE_BURN_DAMAGE = 15; + BURN_DAMAGE = BASE_BURN_DAMAGE; + FIRE_BALL_FREQ = 3.0; + DEATH_SCRIPT = "traps/fire_wall2"; + FIRE_FIST_SCRIPT = "monsters/fire_fist_cl"; + Precache(DEATH_SCRIPT); + } + + void orc_spawn() + { + SetHealth(220); + SetName("Orc Fire Shaman"); + SetHearingSensitivity(8); + SetDamageResistance("all", ".8"); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + SetStat("spellcasting", 30); + FIRE_BALL_DAMAGE = FIRE_BALL_DAMAGE_NORM; + if (StringToLower(GetMapName()) == "mscave") + { + FIRE_BALL_DAMAGE = FIRE_BALL_DAMAGE_ALT; + } + ClientEvent("persist", "all", FIRE_FIST_SCRIPT, GetEntityIndex(GetOwner()), 19); + MY_CL_SCRIPT_IDX = "game.script.last_sent_id"; + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + } + + void npc_selectattack() + { + if ((BO_ZOMBIE_MODE)) return; + if ((FIRE_BALL_DELAY)) return; + if ((CanSee("enemy", MELE_RANGE))) return; + EmitSound(GetOwner(), 0, SOUND_FIRECHARGE, 10); + } + + void swing_sword() + { + if ((CanSee("enemy", MELE_RANGE))) + { + ANIM_ATTACK = ANIM_SWIPE; + swipe_attack(GetEntityIndex(m_hLastSeen)); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((BO_ZOMBIE_MODE)) return; + if ((false)) + { + if (!(CanSee("enemy", MOVE_RANGE))) + { + ANIM_ATTACK = ANIM_RUN; + } + if ((CanSee("enemy", MOVE_RANGE))) + { + ANIM_ATTACK = ANIM_WARCRY; + } + } + if ((FIRE_BALL_DELAY)) return; + ANIM_ATTACK = ANIM_FIRE; + throw_fireball(); + } + + void throw_fireball() + { + if ((ORC_SHAMAN_CUSTOM_FIREBALL)) return; + if (!(false)) return; + FIRE_BALL_FREQ("reset_fireball"); + EmitSound(GetOwner(), 0, SOUND_FIRESHOOT, 10); + string TARGET_ID = GetEntityIndex(m_hLastSeen); + string AIM_ANGLE = GetEntityDist(TARGET_ID); + AIM_ANGLE /= AIM_RATIO; + SetAngles("add_view.x"); + string L_TARGET_RANGE = GetEntityRange(TARGET_ID); + if (L_TARGET_RANGE <= 800) + { + TossProjectile(PROJECTILE_SCRIPT, /* TODO: $relpos */ $relpos(0, 48, 18), "none", ATTACK_SPEED, FIRE_BALL_DAMAGE, ATTACK_CONE_OF_FIRE, "none"); + } + if (L_TARGET_RANGE > 800) + { + TossProjectile(PROJECTILE_SCRIPT, /* TODO: $relpos */ $relpos(0, 48, 18), TARGET_ID, ATTACK_SPEED, FIRE_BALL_DAMAGE, ATTACK_CONE_OF_FIRE, "none"); + } + float LIGHTEN_AMT = 0.4; + if (L_TARGET_RANGE > 800) + { + float LIGHTEN_AMT = 0.01; + } + CallExternal(GetEntityIndex("ent_lastprojectile"), "lighten", BURN_DAMAGE, LIGHTEN_AMT); + FIRE_BALL_DELAY = 1; + } + + void reset_fireball() + { + ANIM_ATTACK = ANIM_FIRE; + DID_WARCRY = 0; + FIRE_BALL_DELAY = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + orc_shaman_death(); + } + + void orc_shaman_death() + { + if ((ORC_SHAMAN_CUSTOM_DEATH)) return; + ClientEvent("remove", "all", MY_CL_SCRIPT_IDX); + if (!(GetGameTime() > G_FIRE_WALL_DELAY)) return; + SetGlobalVar("G_FIRE_WALL_DELAY", GetGameTime()); + G_FIRE_WALL_DELAY += 2.0; + if (!(BO_ZOMBIE_MODE)) + { + CallExternal(GAME_MASTER, "gm_createnpc", 0.1, DEATH_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y")); + } + else + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + EmitSound(GetOwner(), 0, "weapons/explode3.wav", 10); + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 256, 300, 0, GetOwner(), GetOwner(), "none", "fire_effect"); + ClientEvent("new", "all", "effects/sfx_explode", GetEntityOrigin(GetOwner()), 256); + POISON_TARGS = FindEntitiesInSphere("enemy", 256); + if (POISON_TARGS != "none") + { + } + for (int i = 0; i < GetTokenCount(POISON_TARGS, ";"); i++) + { + poison_affect_targets(); + } + } + } + + void poison_affect_targets() + { + string CUR_TARG = GetToken(POISON_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), 100); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void swipe_attack() + { + SWIPE_SOUNDS = 1; + if (!(WEAK_ATTACK)) + { + npcatk_dodamage(param1, MELE_HITRANGE, SWIPE_DAMAGE, ATTACK_ACCURACY); + } + if ((WEAK_ATTACK)) + { + npcatk_dodamage(param1, MELE_HITRANGE, WEAK_SWIPE_DAMAGE, ATTACK_ACCURACY); + } + int DOT_FIRE = RandomInt(20, 40); + if ((BO_ZOMBIE_MODE)) + { + int DOT_FIRE = RandomInt(40, 100); + } + ApplyEffect(param1, "effects/dot_fire", RandomInt(5, 10), GetOwner(), DOT_FIRE); + } + + void game_dodamage() + { + if (!(SWIPE_SOUNDS)) return; + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_MELEMISS, 10); + } + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_MELEHIT, 10); + } + SWIPE_SOUNDS = 0; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (!(GetEntityRange(m_hLastStruck) < MELE_RANGE)) return; + ANIM_ATTACK = ANIM_SWIPE; + npcatk_settarget(GetEntityIndex(m_hLastStruck)); + } + + void npc_attack() + { + if (!(ANIM_ATTACK == ANIM_WARCRY)) return; + if ((DID_WARCRY)) return; + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DID_WARCRY = 1; + } + + void OnPostSpawn() override + { + if (StringToLower(GetMapName()) == "mscave") + { + if (!(BO_ZOMBIE_MODE)) + { + } + SetName("Orc Fire Shaman Initiate"); + WEAK_ATTACK = 1; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 30); + NPC_GIVE_EXP = 100; + FIRE_BALL_DAMAGE = FIRE_BALL_DAMAGE_ALT; + BURN_DAMAGE = 5; + } + } + + void npcatk_setup_siege() + { + string L_MAP_NAME = StringToLower(GetMapName()); + if (!(L_MAP_NAME != "old_helena")) return; + if (!(GetEntityRace(GetOwner()) != "hguard")) return; + if (!(GetEntityRace(GetOwner()) != "human")) return; + if (!(RandomInt(1, 3) == 1)) return; + NPC_IGNORE_PLAYERS = 1; + npcatk_npc_hunter_loop(); + if ((G_DEVELOPER_MODE)) + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_shaman_fire_turret.as b/scripts/angelscript/monsters/orc_shaman_fire_turret.as new file mode 100644 index 00000000..2a619f60 --- /dev/null +++ b/scripts/angelscript/monsters/orc_shaman_fire_turret.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "monsters/orc_shaman_fire.as" + +namespace MS +{ + +class OrcShamanFireTurret : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + int NO_STUCK_CHECKS; + int NPC_IGNORE_PLAYERS; + + OrcShamanFireTurret() + { + ANIM_WALK = "idle1"; + ANIM_RUN = "warcry"; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetRoam(false); + SetMoveSpeed(0.0); + ScheduleDelayedEvent(5.0, "no_ignore"); + } + + void no_ignore() + { + NPC_IGNORE_PLAYERS = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_sniper.as b/scripts/angelscript/monsters/orc_sniper.as new file mode 100644 index 00000000..d04a4ccc --- /dev/null +++ b/scripts/angelscript/monsters/orc_sniper.as @@ -0,0 +1,309 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcSniper : CGameScript +{ + int ALT_ATTACKS; + int AM_TURRET; + string ANIM_ATTACK; + string ANIM_BOW; + string ANIM_KICK; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SWIPE; + string ANIM_WALK; + int ARROW_MISSED; + string ARROW_TYPE; + int ATTACK_CONE_OF_FIRE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + string ATTACK_PUSH; + int ATTACK_RANGE; + int ATTACK_SPEED; + string CONTAINER_BASE; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DID_SPOT_SPEECH; + int DMG_BOW; + int DMG_KICK; + int DMG_SMASH; + int DMG_SWIPE; + int DROPS_CONTAINER; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string DROP_ITEM_BASE1; + int FIN_EXP; + float FLINCH_CHANCE; + float FREQ_KICK; + int IS_ARROW; + int KICK_HITCHANCE; + int KICK_HITRANGE; + int KICK_RANGE; + int MELEE_ATK; + int MOVE_RANGE; + string NEXT_KICK; + int NO_STUCK_CHECKS; + string NPC_GIVE_EXP; + string SOUND_KICK; + string SPAWN_SPEECH; + float SPAWN_SPEECH_DELAY; + string SPOT_SPEECH; + + OrcSniper() + { + ARROW_TYPE = "proj_arrow_npc"; + ATTACK_SPEED = 900; + ATTACK_CONE_OF_FIRE = 2; + DMG_BOW = RandomInt(50, 100); + KICK_RANGE = 96; + KICK_HITRANGE = 128; + KICK_HITCHANCE = 90; + ANIM_SMASH = "battleaxe_swing1_L"; + ANIM_SWIPE = "swordswing1_L"; + ANIM_BOW = "shootorcbow"; + ANIM_KICK = "kick"; + DMG_SMASH = "$rand(30,75)"; + DMG_SWIPE = "$rand(10,30)"; + DMG_KICK = "$rand(10,30)"; + ALT_ATTACKS = 1; + FREQ_KICK = 10.0; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 20); + DROP_ITEM_BASE1 = "bows_longbow"; + DROP_ITEM1 = DROP_ITEM_BASE1; + DROP_ITEM1_CHANCE = 0.05; + DROPS_CONTAINER = 1; + CONTAINER_BASE = "chests/quiver_of_jagged"; + CONTAINER_DROP_CHANCE = 0.3; + CONTAINER_SCRIPT = CONTAINER_BASE; + ANIM_ATTACK = "shootorcbow"; + FLINCH_CHANCE = 0.45; + FIN_EXP = 100; + NPC_GIVE_EXP = FIN_EXP; + MOVE_RANGE = 2000; + ATTACK_RANGE = 2000; + ATTACK_HITRANGE = 2000; + ATTACK_MOVERANGE = 2000; + SOUND_KICK = "zombie/claw_miss1.wav"; + } + + void orc_spawn() + { + SetName("Elite Blackhand Archer"); + if (GetMapName() == "ms_wicardoven") + { + SetName("Voldar Scout"); + SetProp(GetOwner(), "skin", 3); + } + SetHealth(220); + SetHearingSensitivity(2); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + SetModelBody(0, 3); + SetModelBody(1, 3); + SetModelBody(2, 3); + ScheduleDelayedEvent(1.0, "reset_range"); + } + + void reset_range() + { + ATTACK_HITRANGE = 2000; + } + + void shoot_arrow() + { + string TARGET_DIST = GetEntityRange(m_hLastSeen); + string FINAL_TARGET = GetEntityOrigin(m_hLastSeen); + FINAL_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, TARGET_DIST)); + TARGET_DIST /= 100; + SetAngles("add_view.pitch"); + IS_ARROW = 1; + TossProjectile(ARROW_TYPE, /* TODO: $relpos */ $relpos(0, 0, 18), "none", 900, DMG_BOW, ATTACK_CONE_OF_FIRE, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + if (!(AM_SORC)) + { + SetModelBody(3, 0); + } + else + { + SetModelBody(2, 2); + LogDebug("hide arrow"); + } + EmitSound(GetOwner(), 2, SOUND_BOW, 10); + MELEE_ATK = 0; + } + + void grab_arrow() + { + if (!(AM_SORC)) + { + SetModelBody(3, 1); + } + else + { + SetModelBody(2, 3); + LogDebug("show arrow"); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(AM_SORC)) + { + SetModelBody(3, 0); + } + else + { + SetModelBody(2, 2); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (GetEntityRange(m_hAttackTarget) >= KICK_RANGE) + { + ANIM_ATTACK = ANIM_BOW; + } + if (!(GetEntityRange(m_hAttackTarget) < KICK_RANGE)) return; + if (!(GetGameTime() > NEXT_KICK)) return; + if (!(ANIM_ATTACK == ANIM_BOW)) return; + PlayAnim("once", "break"); + if (!(AM_SORC)) + { + SetModelBody(3, 0); + } + else + { + SetModelBody(2, 2); + } + ANIM_ATTACK = ANIM_SWIPE; + } + + void swing_sword() + { + ANIM_ATTACK = ANIM_KICK; + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-100, 130, 120); + npcatk_dodamage(m_hAttackTarget, KICK_HITRANGE, DMG_SWIPE, KICK_HITCHANCE); + } + + void kick_land() + { + ANIM_ATTACK = ANIM_SMASH; + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(50, 130, 120); + npcatk_dodamage(m_hAttackTarget, KICK_HITRANGE, DMG_KICK, KICK_HITCHANCE); + } + + void swing_axe() + { + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(50, 130, 120); + npcatk_dodamage(m_hAttackTarget, KICK_HITRANGE, DMG_SMASH, KICK_HITCHANCE); + if (!(GetEntityRange(m_hAttackTarget) < KICK_HITRANGE)) return; + if (!(RandomInt(1, 2) == 1)) return; + ApplyEffect(GetEntityIndex(m_hAttackTarget), "effects/debuff_stun", 7, GetEntityIndex(GetOwner())); + if (!(AM_TURRET)) + { + npcatk_flee(m_hAttackTarget, 600, 2); + } + NEXT_KICK = GetGameTime(); + NEXT_KICK += FREQ_KICK; + } + + void game_dodamage() + { + if ((IS_ARROW)) + { + if (!(param1)) + { + ARROW_MISSED += 1; + } + if ((param1)) + { + ARROW_MISSED = 0; + if (ARROW_PUSH_VEL != "ARROW_PUSH_VEL") + { + AddVelocity(param2, ARROW_PUSH_VEL); + } + } + } + IS_ARROW = 0; + if (!(ARROW_MISSED > 3)) return; + change_position(); + ARROW_MISSED = 0; + } + + void change_position() + { + if ((AM_TURRET)) return; + PlayAnim("critical", ANIM_RUN); + chicken_run(3); + } + + void set_turret() + { + AM_TURRET = 1; + SetMoveAnim(ANIM_IDLE); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + NO_STUCK_CHECKS = 1; + SetRoam(false); + } + + void OnPostSpawn() override + { + if (!(AM_TURRET)) return; + SetMoveAnim(ANIM_IDLE); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + NO_STUCK_CHECKS = 1; + SetRoam(false); + if (!(SPAWN_SPEECH != "SPAWN_SPEECH")) return; + SPAWN_SPEECH_DELAY("say_spawn_speech"); + } + + void npc_targetsighted() + { + if ((DID_SPOT_SPEECH)) return; + DID_SPOT_SPEECH = 1; + if (!(SPOT_SPEECH != "SPOT_SPEECH")) return; + SayText(SPOT_SPEECH); + } + + void say_spawn_speech() + { + SayText(SPAWN_SPEECH); + } + + void set_sorcpal_getem1() + { + SetSayTextRange(2048); + SPOT_SPEECH = "Get em!"; + } + + void set_sorcpal_getem2() + { + SetSayTextRange(2048); + if (GetPlayerCount() > 1) + { + SPAWN_SPEECH = "Let's see them get out of this one!"; + } + else + { + SPAWN_SPEECH = "Let's see him get out of this one!"; + } + SPAWN_SPEECH_DELAY = 3.0; + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_unarmed.as b/scripts/angelscript/monsters/orc_unarmed.as new file mode 100644 index 00000000..0a171e9e --- /dev/null +++ b/scripts/angelscript/monsters/orc_unarmed.as @@ -0,0 +1,70 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcUnarmed : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int CAN_FLEE; + int DROP_GOLD; + float FLEE_CHANCE; + int FLEE_HEALTH; + string LIGHT_COLOR; + int NPC_GIVE_EXP; + + OrcUnarmed() + { + DROP_GOLD = 0; + NPC_GIVE_EXP = 1; + CAN_FLEE = 1; + FLEE_HEALTH = 19; + FLEE_CHANCE = 0.99; + ANIM_ATTACK = "swordswing1_L"; + ATTACK_ACCURACY = 0.5; + ATTACK_DMG_LOW = 1; + ATTACK_DMG_HIGH = 2; + } + + void orc_spawn() + { + SetHealth(20); + SetName("Unarmed Orc"); + SetHearingSensitivity(0); + SetStat("parry", 1); + SetDamageResistance("all", 1.0); + SetInvincible(false); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + } + + void superorc() + { + SetInvincible(true); + SetName("INVULNERABLE Unarmed Orc"); + LIGHT_COLOR = Vector3(255, 255, 255); + Effect("glow", GetOwner(), LIGHT_COLOR, 255, 255, 5); + SetSayTextRange(1024); + SayText("W00t! " + I + " r invlnerable!"); + } + + void godoff() + { + SetInvincible(false); + SetName("Unarmed Orc"); + LIGHT_COLOR = Vector3(1, 1, 1); + Effect("glow", GetOwner(), LIGHT_COLOR, 255, 5, 5); + SetSayTextRange(1024); + SayText(OMG + WTF + " h4x!"); + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_warrior.as b/scripts/angelscript/monsters/orc_warrior.as new file mode 100644 index 00000000..1fce9b35 --- /dev/null +++ b/scripts/angelscript/monsters/orc_warrior.as @@ -0,0 +1,48 @@ +#pragma context server + +#include "monsters/orc_base.as" +#include "monsters/orc_base_melee.as" + +namespace MS +{ + +class OrcWarrior : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int NPC_GIVE_EXP; + + OrcWarrior() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(3, 8); + NPC_GIVE_EXP = 30; + DROP_ITEM1 = "axes_battleaxe"; + DROP_ITEM1_CHANCE = 0.1; + ANIM_ATTACK = "battleaxe_swing1_L"; + ATTACK_ACCURACY = 0.6; + ATTACK_DMG_LOW = 5; + ATTACK_DMG_HIGH = 10; + } + + void orc_spawn() + { + SetHealth(60); + SetName("Orc Warrior"); + SetHearingSensitivity(1.5); + SetStat("parry", 50); + SetDamageResistance("all", ".9"); + SetModelBody(0, 2); + SetModelBody(1, 0); + SetModelBody(2, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_warrior_blackhand.as b/scripts/angelscript/monsters/orc_warrior_blackhand.as new file mode 100644 index 00000000..08419cf0 --- /dev/null +++ b/scripts/angelscript/monsters/orc_warrior_blackhand.as @@ -0,0 +1,57 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcWarriorBlackhand : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int DROP_GOLD; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLINCH_CHANCE; + int NPC_GIVE_EXP; + int ORC_SHIELD; + + OrcWarriorBlackhand() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(8, 16); + NPC_GIVE_EXP = 60; + DROP_ITEM1 = "axes_battleaxe"; + DROP_ITEM1_CHANCE = 0.3; + ANIM_ATTACK = "battleaxe_swing1_L"; + FLINCH_CHANCE = 0.45; + ATTACK_ACCURACY = 0.7; + ATTACK_DMG_LOW = 10; + ATTACK_DMG_HIGH = 20; + ORC_SHIELD = RandomInt(0, 1); + } + + void orc_spawn() + { + SetHealth(120); + SetName("Blackhand Warrior"); + if (GetMapName() == "ms_wicardoven") + { + SetName("Voldar Recruit"); + SetProp(GetOwner(), "skin", 3); + } + SetHearingSensitivity(2); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/orc_weak.as b/scripts/angelscript/monsters/orc_weak.as new file mode 100644 index 00000000..e99d6df7 --- /dev/null +++ b/scripts/angelscript/monsters/orc_weak.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class OrcWeak : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + float ATTACK_DMG_HIGH; + float ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int MOVE_RANGE; + int NPC_GIVE_EXP; + + OrcWeak() + { + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_AMT = RandomInt(1, 4); + NPC_GIVE_EXP = 10; + ANIM_ATTACK = "battleaxe_swing1_L"; + MOVE_RANGE = 64; + ATTACK_RANGE = 72; + ATTACK_HITRANGE = 128; + ATTACK_ACCURACY = 0.3; + ATTACK_DMG_LOW = 0.5; + ATTACK_DMG_HIGH = 1.5; + } + + void orc_spawn() + { + SetHealth(20); + SetName("Orc"); + SetHearingSensitivity(1); + SetStat("parry", 15); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/orcarcher.as b/scripts/angelscript/monsters/orcarcher.as new file mode 100644 index 00000000..b9bd6a96 --- /dev/null +++ b/scripts/angelscript/monsters/orcarcher.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/orc_archer.as" + +namespace MS +{ + +class Orcarcher : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/orcberserker.as b/scripts/angelscript/monsters/orcberserker.as new file mode 100644 index 00000000..9571a807 --- /dev/null +++ b/scripts/angelscript/monsters/orcberserker.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/orc_berserker_blackhand.as" + +namespace MS +{ + +class Orcberserker : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/orcbeserker.as b/scripts/angelscript/monsters/orcbeserker.as new file mode 100644 index 00000000..1bfefb73 --- /dev/null +++ b/scripts/angelscript/monsters/orcbeserker.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/orc_berserker_blackhand.as" + +namespace MS +{ + +class Orcbeserker : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/orcflayer.as b/scripts/angelscript/monsters/orcflayer.as new file mode 100644 index 00000000..49bb7ccb --- /dev/null +++ b/scripts/angelscript/monsters/orcflayer.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/orc_flayer.as" + +namespace MS +{ + +class Orcflayer : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/orcranger.as b/scripts/angelscript/monsters/orcranger.as new file mode 100644 index 00000000..757d2fdb --- /dev/null +++ b/scripts/angelscript/monsters/orcranger.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/orc_archer_blackhand.as" + +namespace MS +{ + +class Orcranger : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/orcwarrior.as b/scripts/angelscript/monsters/orcwarrior.as new file mode 100644 index 00000000..1ad3172f --- /dev/null +++ b/scripts/angelscript/monsters/orcwarrior.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/orc_warrior.as" + +namespace MS +{ + +class Orcwarrior : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/poison_fist_cl.as b/scripts/angelscript/monsters/poison_fist_cl.as new file mode 100644 index 00000000..f25df2f2 --- /dev/null +++ b/scripts/angelscript/monsters/poison_fist_cl.as @@ -0,0 +1,64 @@ +#pragma context client + +namespace MS +{ + +class PoisonFistCl : CGameScript +{ + string BONE_IDX; + int CUR_FRAME; + string GLOW_COLOR; + int GLOW_RAD; + int N_SPR_FRAMES; + string SKEL_ID; + string SKEL_LIGHT_ID; + string SPRITE_FIRE; + + PoisonFistCl() + { + SPRITE_FIRE = "poison_cloud.spr"; + GLOW_RAD = 128; + GLOW_COLOR = Vector3(0, 255, 0); + N_SPR_FRAMES = 17; + } + + void client_activate() + { + SKEL_ID = param1; + BONE_IDX = param2; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + ClientEffect("frameent", "sprite", SPRITE_FIRE, /* TODO: $getcl */ $getcl(SKEL_ID, "bonepos", BONE_IDX), "setup_flame"); + CUR_FRAME = 0; + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + ClientEffect("frameent", "sprite", SPRITE_FIRE, /* TODO: $getcl */ $getcl(SKEL_ID, "bonepos", BONE_IDX), "setup_flame"); + } + + void setup_flame() + { + string L_ATTACH_MDL_ID = SKEL_ID; + int L_ATTACH_BODY = 1; + ClientEffect("frameent", "set_current_prop", "owner", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "skin", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "aiment", L_ATTACH_MDL_ID); + ClientEffect("frameent", "set_current_prop", "movetype", 12); + ClientEffect("frameent", "set_current_prop", "body", L_ATTACH_BODY); + ClientEffect("frameent", "set_current_prop", "scale", 0.2); + CUR_FRAME += 1; + if (CUR_FRAME == N_SPR_FRAMES) + { + CUR_FRAME = 0; + } + ClientEffect("frameent", "set_current_prop", "frame", CUR_FRAME); + } + +} + +} diff --git a/scripts/angelscript/monsters/polarbear.as b/scripts/angelscript/monsters/polarbear.as new file mode 100644 index 00000000..d0ec68e2 --- /dev/null +++ b/scripts/angelscript/monsters/polarbear.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bear_polar.as" + +namespace MS +{ + +class Polarbear : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/polarbearcub.as b/scripts/angelscript/monsters/polarbearcub.as new file mode 100644 index 00000000..084a2305 --- /dev/null +++ b/scripts/angelscript/monsters/polarbearcub.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/bear_cub_polar.as" + +namespace MS +{ + +class Polarbearcub : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/rabid_skele_base.as b/scripts/angelscript/monsters/rabid_skele_base.as new file mode 100644 index 00000000..b39a6826 --- /dev/null +++ b/scripts/angelscript/monsters/rabid_skele_base.as @@ -0,0 +1,261 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class RabidSkeleBase : CGameScript +{ + string ANIM_ANGRY1; + string ANIM_ANGRY2; + string ANIM_ATTACK; + string ANIM_AWAKE1; + string ANIM_AWAKE2; + string ANIM_BEG; + string ANIM_DEATH_FAKE; + string ANIM_DEATH_FINAL; + string ANIM_DUCK; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_FLINCH3; + string ANIM_FLINCH4; + string ANIM_FLINCH5; + string ANIM_GET_UP; + string ANIM_IDLE; + string ANIM_IDLE1; + string ANIM_IDLE2; + string ANIM_IDLE3; + string ANIM_IDLE_DEAD; + string ANIM_JUMP; + string ANIM_PARRY; + string ANIM_PLAY_DEAD1; + string ANIM_PLAY_DEAD2; + string ANIM_PROJECTILE; + string ANIM_RUN; + string ANIM_SLASH; + string ANIM_SUMMON1; + string ANIM_SUMMON2; + string ANIM_SUMMON_FLYER; + string ANIM_TEASE; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DID_WARCRY; + float FREQ_IDLE; + int NPC_GIVE_EXP; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_ATTACK; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_IDLE6; + string SOUND_IDLE7; + string SOUND_IDLE8; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + int TURN_REQ; + + RabidSkeleBase() + { + ANIM_IDLE1 = "idle1"; + ANIM_IDLE2 = "idle2"; + ANIM_IDLE3 = "idle3"; + ANIM_DUCK = "crouch"; + ANIM_JUMP = "jump"; + ANIM_SUMMON1 = "updown"; + ANIM_SUMMON2 = "downup"; + ANIM_SUMMON_FLYER = "jabber"; + ANIM_PARRY = "right"; + ANIM_SLASH = "attack1"; + ANIM_PROJECTILE = "zapattack1"; + ANIM_FLINCH1 = "flinch2"; + ANIM_FLINCH2 = "laflinch"; + ANIM_FLINCH3 = "raflinch"; + ANIM_FLINCH4 = "llflinch"; + ANIM_FLINCH5 = "rlflinch"; + ANIM_DEATH_FINAL = "diebackward"; + ANIM_DEATH_FAKE = "dieheadshot"; + ANIM_IDLE_DEAD = "cw_sleep_headshot"; + ANIM_GET_UP = "cw_awake_headshot"; + ANIM_RUN = "run1"; + ANIM_WALK = "walk1"; + ANIM_ATTACK = ANIM_SLASH; + ANIM_IDLE = ANIM_IDLE3; + ATTACK_MOVERANGE = 30; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 164; + FREQ_IDLE = Random(10, 20); + TURN_REQ = 5; + ANIM_BEG = "collar1"; + ANIM_ANGRY1 = "collar2"; + ANIM_ANGRY2 = "jibber"; + ANIM_TEASE = "cw_pepsiidle"; + ANIM_PLAY_DEAD1 = "cw_sleep_head"; + ANIM_AWAKE1 = "cw_awake_head"; + ANIM_PLAY_DEAD2 = "cw_sleep_back"; + ANIM_AWAKE2 = "cw_awake_back"; + SOUND_ALERT1 = "monsters/kelly_sounds/slv_alert1.wav"; + SOUND_ALERT2 = "monsters/kelly_sounds/slv_alert3.wav"; + SOUND_ALERT3 = "monsters/kelly_sounds/slv_alert4.wav"; + SOUND_ATTACK = "monsters/kelly_sounds/hc_attack3.wav"; + SOUND_DEATH1 = "monsters/kelly_sounds/slv_die1.wav"; + SOUND_DEATH2 = "monsters/kelly_sounds/slv_die2.wav"; + SOUND_STRUCK1 = "xxx"; + SOUND_STRUCK2 = "xxx"; + SOUND_PAIN1 = "monsters/kelly_sounds/slv_pain1.wav"; + SOUND_PAIN2 = "monsters/kelly_sounds/slv_pain2.wav"; + SOUND_IDLE1 = "monsters/kelly_sounds/slv_word1.wav"; + SOUND_IDLE2 = "monsters/kelly_sounds/slv_word2.wav"; + SOUND_IDLE3 = "monsters/kelly_sounds/slv_word3.wav"; + SOUND_IDLE4 = "monsters/kelly_sounds/slv_word4.wav"; + SOUND_IDLE5 = "monsters/kelly_sounds/slv_word5.wav"; + SOUND_IDLE6 = "monsters/kelly_sounds/slv_word6.wav"; + SOUND_IDLE7 = "monsters/kelly_sounds/slv_word7.wav"; + SOUND_IDLE8 = "monsters/kelly_sounds/slv_word8.wav"; + } + + void OnSpawn() override + { + SetDamageResistance("poison", 0.0); + rabid_skele_spawn(); + ScheduleDelayedEvent(0.1, "idle_loop"); + } + + void rabid_skele_spawn() + { + SetName("Rabid Poisonbone"); + SetModel("monsters/rabid_skelly.mdl"); + SetRace("undead"); + SetBloodType("none"); + SetHearingSensitivity(4); + NPC_GIVE_EXP = 60; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetWidth(32); + SetHeight(64); + SetProp(GetOwner(), "skin", 3); + SetHealth(200); + SetDamageResistance("holy", 2.0); + } + + void idle_loop() + { + FREQ_IDLE("idle_loop"); + int RND_SOUND = RandomInt(1, 8); + if (RND_SOUND == 1) + { + EmitSound(GetOwner(), 2, SOUND_IDLE1, 10); + } + if (RND_SOUND == 2) + { + EmitSound(GetOwner(), 2, SOUND_IDLE2, 10); + } + if (RND_SOUND == 3) + { + EmitSound(GetOwner(), 2, SOUND_IDLE3, 10); + } + if (RND_SOUND == 4) + { + EmitSound(GetOwner(), 2, SOUND_IDLE4, 10); + } + if (RND_SOUND == 5) + { + EmitSound(GetOwner(), 2, SOUND_IDLE5, 10); + } + if (RND_SOUND == 6) + { + EmitSound(GetOwner(), 2, SOUND_IDLE6, 10); + } + if (RND_SOUND == 7) + { + EmitSound(GetOwner(), 2, SOUND_IDLE7, 10); + } + if (RND_SOUND == 8) + { + EmitSound(GetOwner(), 2, SOUND_IDLE8, 10); + } + int RND_ANIM = RandomInt(1, 3); + if (RND_ANIM == 1) + { + PlayAnim("once", ANIM_IDLE1); + } + if (RND_ANIM == 3) + { + PlayAnim("once", ANIM_IDLE3); + } + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((param4).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(RandomInt(1, 5) == 1)) return; + npcatk_flee(GetEntityIndex(m_hLastStruck), 1024, 5.0); + } + + void npcatk_lost_sight() + { + PlayAnim("once", "idle1"); + DID_WARCRY = 0; + } + + void my_target_died() + { + DID_WARCRY = 0; + } + + void npc_targetsighted() + { + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + do_warcry(); + } + check_projectile(); + } + + void do_warcry() + { + PlayAnim("once", "idle2"); + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void turn_undead() + { + EmitSound(GetOwner(), 0, SOUND_PAIN1, 10); + if (RandomInt(1, param1) < TURN_REQ) + { + npcatk_flee(GetEntityIndex(param2), 1024, 5.0); + } + } + + void check_projectile() + { + } + + void OnDeath(CBaseEntity@ attacker) override + { + } + +} + +} diff --git a/scripts/angelscript/monsters/rat.as b/scripts/angelscript/monsters/rat.as new file mode 100644 index 00000000..5dda0fb9 --- /dev/null +++ b/scripts/angelscript/monsters/rat.as @@ -0,0 +1,108 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Rat : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_RANGE; + int CAN_FLEE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + int NO_EXP_MULTI; + int NPC_GIVE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Rat() + { + NO_EXP_MULTI = 1; + HUNT_AGRO = 0; + ANIM_DEATH = "die"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ATTACK_DAMAGE = 0.4; + ATTACK_RANGE = 68; + ATTACK_HITCHANCE = 0.3; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_ATTACK1 = "monsters/rat/squeak2.wav"; + SOUND_ATTACK2 = "monsters/orc/attack2.wav"; + SOUND_ATTACK3 = "monsters/orc/attack3.wav"; + SOUND_IDLE1 = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + CAN_FLEE = 1; + FLEE_HEALTH = 2; + FLEE_CHANCE = 0.3; + DROP_ITEM1 = "skin_ratpelt"; + DROP_ITEM1_CHANCE = 0.5; + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + if (!(IS_HUNTING)) + { + } + if ((RandomInt(0, 1))) + { + } + PlayAnim("once", "idle2"); + } + + void OnSpawn() override + { + SetHealth(4); + SetWidth(40); + SetHeight(64); + SetName("Rat"); + SetRoam(true); + SetHearingSensitivity(0); + NPC_GIVE_EXP = 3; + SetRace("vermin"); + SetModel("monsters/rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle"); + SetMoveAnim(ANIM_WALK); + } + + void bite1() + { + // PlayRandomSound from: SOUND_ATTACK1 + array sounds = {SOUND_ATTACK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/rat_fangtooth.as b/scripts/angelscript/monsters/rat_fangtooth.as new file mode 100644 index 00000000..ad7e9c44 --- /dev/null +++ b/scripts/angelscript/monsters/rat_fangtooth.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "calruin/fangtooth.as" + +namespace MS +{ + +class RatFangtooth : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/reavers_cl.as b/scripts/angelscript/monsters/reavers_cl.as new file mode 100644 index 00000000..485dacdd --- /dev/null +++ b/scripts/angelscript/monsters/reavers_cl.as @@ -0,0 +1,258 @@ +#pragma context client + +namespace MS +{ + +class ReaversCl : CGameScript +{ + int BREATH_ACTIVE; + string BREATH_TYPE; + string CLOUD_ANG; + string DOING_BREATH; + string DOING_ERRUPT; + int ERRUPT_ACTIVE; + string ERRUPT_CUR_ANG; + int ERRUPT_CUR_START_ANG; + string ERRUPT_TYPE; + int FX_ACTIVE; + string FX_OWNER; + string PUKE_SPRITE; + int PUKE_SPRITE_FRAMES; + + ReaversCl() + { + PUKE_SPRITE = "bloodspray.spr"; + PUKE_SPRITE_FRAMES = 10; + Precache(PUKE_SPRITE); + } + + void client_activate() + { + FX_OWNER = param1; + BREATH_TYPE = param2; + ERRUPT_TYPE = param3; + DOING_ERRUPT = param4; + DOING_BREATH = param5; + FX_ACTIVE = 1; + if ((DOING_ERRUPT)) + { + errupt_on(ERRUPT_TYPE); + } + if ((DOING_BREATH)) + { + breath_on(BREATH_TYPE); + } + ScheduleDelayedEvent(30.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void errupt_on() + { + if (!(FX_ACTIVE)) return; + ERRUPT_TYPE = param1; + ERRUPT_ACTIVE = 1; + ERRUPT_CUR_START_ANG = 0; + errupt_loop(); + } + + void errupt_off() + { + ERRUPT_ACTIVE = 0; + } + + void errupt_loop() + { + if (!(FX_ACTIVE)) return; + if (!(ERRUPT_ACTIVE)) return; + ScheduleDelayedEvent(0.2, "errupt_loop"); + if (ERRUPT_TYPE == "poison") + { + ERRUPT_CUR_ANG = ERRUPT_CUR_START_ANG; + for (int i = 0; i < 9; i++) + { + errupt_setup_puke(); + } + } + else + { + ERRUPT_CUR_ANG = ERRUPT_CUR_START_ANG; + for (int i = 0; i < 9; i++) + { + errupt_setup_fire(); + } + } + ERRUPT_CUR_START_ANG += 1; + if (ERRUPT_CUR_START_ANG > 40) + { + ERRUPT_CUR_START_ANG = 0; + } + } + + void errupt_setup_puke() + { + ClientEffect("tempent", "sprite", PUKE_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "setup_puke", "update_puke"); + ERRUPT_CUR_ANG += 40; + if (ERRUPT_CUR_ANG > 359) + { + ERRUPT_CUR_ANG -= 359; + } + } + + void errupt_setup_fire() + { + ClientEffect("tempent", "sprite", "xfireball3.spr", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "setup_fire"); + ERRUPT_CUR_ANG += 40; + if (ERRUPT_CUR_ANG > 359) + { + ERRUPT_CUR_ANG -= 359; + } + } + + void update_puke() + { + string CUR_SIZE = "game.tempent.fuser1"; + if (!(CUR_SIZE < 4.0)) return; + CUR_SIZE += 0.05; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + + void setup_puke() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", PUKE_SPRITE_FRAMES); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(1.5, 2.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(3.0, 5.0)); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, ERRUPT_CUR_ANG, 0), Vector3(0, 400, 300)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void setup_fire() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 19); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.25)); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 96, 64)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(3.0, 4.0)); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, ERRUPT_CUR_ANG, 0), Vector3(0, 400, 300)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void breath_on() + { + if (!(FX_ACTIVE)) return; + BREATH_TYPE = param1; + BREATH_ACTIVE = 1; + breath_loop(); + } + + void breath_off() + { + BREATH_ACTIVE = 0; + } + + void breath_loop() + { + if (!(FX_ACTIVE)) return; + if (!(BREATH_ACTIVE)) return; + ScheduleDelayedEvent(0.2, "breath_loop"); + make_cloud(/* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"), /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw")); + } + + void make_cloud() + { + string CLOUD_ORG = param1; + CLOUD_ANG = param2; + if (BREATH_TYPE == "poison") + { + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud", "update_cloud"); + } + else + { + ClientEffect("tempent", "sprite", "explode1.spr", CLOUD_ORG, "setup_fire_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", "explode1.spr", CLOUD_ORG, "setup_fire_cloud", "update_cloud"); + ClientEffect("tempent", "sprite", "explode1.spr", CLOUD_ORG, "setup_fire_cloud", "update_cloud"); + } + } + + void update_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < 1.5) + { + CUR_SCALE += 0.05; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", RandomInt(100, 200)); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 128, 64)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + float RND_RL = Random(-10, 10); + float RND_UD = Random(-30, 30); + float RND_FD = Random(300, 400); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, RND_FD, RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void setup_fire_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + if (RandomInt(1, 3) == 1) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 0)); + } + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/rogue.as b/scripts/angelscript/monsters/rogue.as new file mode 100644 index 00000000..d4c0c15f --- /dev/null +++ b/scripts/angelscript/monsters/rogue.as @@ -0,0 +1,93 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Rogue : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + int ATTACK1_DAMAGE; + float ATTACK_ACCURACY; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_HUNT; + int FLINCH_CHANCE; + int HUNT_AGRO; + int MOVE_RANGE; + int NPC_GIVE_EXP; + float RETALIATE_CHANGETARGET_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Rogue() + { + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "player/armhit1.wav"; + SOUND_STRUCK3 = "player/leghit1.wav"; + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_ATTACK1 = "player/jab1.wav"; + SOUND_ATTACK2 = "player/jab2.wav"; + SOUND_DEATH = "player/stomachhit1.wav"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ATTACK1_DAMAGE = 4; + MOVE_RANGE = 64; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 130; + ATTACK_ACCURACY = 0.6; + CAN_HUNT = 1; + HUNT_AGRO = 1; + FLINCH_CHANCE = 12; + RETALIATE_CHANGETARGET_CHANCE = 0.25; + } + + void OnSpawn() override + { + SetHealth(RandomInt(90, 200)); + SetWidth(32); + SetHeight(85); + SetRace("rogue"); + SetName("Rogue"); + SetGold(RandomInt(10, 90)); + SetHearingSensitivity(3); + SetRoam(true); + NPC_GIVE_EXP = 28; + SetModel("npc/rogue.mdl"); + SetIdleAnim("aim_stance_normal"); + SetMoveAnim("aim_stance_normal"); + SetActionAnim("stance_normal_lowjab_r1"); + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK1_DAMAGE, ATTACK_ACCURACY, "slash"); + attackstrike(); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + flinch(); + retaliate(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetVolume(5); + EmitSound(GetOwner(), SOUND_DEATH); + } + +} + +} diff --git a/scripts/angelscript/monsters/scarab_fire.as b/scripts/angelscript/monsters/scarab_fire.as new file mode 100644 index 00000000..23366357 --- /dev/null +++ b/scripts/angelscript/monsters/scarab_fire.as @@ -0,0 +1,472 @@ +#pragma context server + +#include "monsters/base_stripped_ai.as" +#include "monsters/debug.as" + +namespace MS +{ + +class ScarabFire : CGameScript +{ + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_MOVE; + int DMG_BURN_DOT; + int DMG_CHEW; + float EFFECT_DURATION; + string EFFECT_SCRIPT; + float FREQ_CHITTER; + int FREQ_LEAP; + int JUMP_SCAN_ACTIVE; + int LATCHED_ON; + float LATCH_DURATION; + string LATCH_TARGET; + string NEXT_LEAP; + string NPCATK_TARGET; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + int NPC_PROPELLED; + string NPC_SPAWN_TIME; + int RANGE_LEAP_LONG; + int RANGE_LEAP_MAX; + int RANGE_LEAP_SHORT; + int RUN_AWAY; + int SKEL_RESPAWN_TIMES; + string SOUND_CHITTER; + string SOUND_DEATH; + string SOUND_LATCH_HISS; + string SOUND_LATCH_JUMP; + string SOUND_LATCH_PLYR; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + ScarabFire() + { + ANIM_MOVE = "walk"; + ANIM_DEATH = "die"; + ANIM_IDLE = "idle"; + RANGE_LEAP_MAX = 512; + RANGE_LEAP_LONG = 256; + RANGE_LEAP_SHORT = 64; + FREQ_LEAP = 15; + NPC_GIVE_EXP = 100; + FREQ_CHITTER = 3.6; + DMG_BURN_DOT = 50; + DMG_CHEW = 25; + EFFECT_SCRIPT = "effects/dot_fire"; + EFFECT_DURATION = 5.0; + LATCH_DURATION = 10.0; + SOUND_CHITTER = "monsters/spider/spideridle.wav"; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN1 = "monsters/spider/spiderhiss.wav"; + SOUND_PAIN2 = "monsters/spider/spiderhiss.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SOUND_LATCH_HISS = "monsters/spider/spiderhiss2.wav"; + SOUND_LATCH_JUMP = "monsters/spider/spiderjump.wav"; + SOUND_LATCH_PLYR = "monsters/spider/spiderlatch.wav"; + NPC_PROPELLED = 1; + NPC_HACKED_MOVE_SPEED = 25; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.5); + if ((true)) + { + } + if ((IsEntityAlive(GetOwner()))) + { + } + if (m_hAttackTarget != "unset") + { + if (!(IsEntityAlive(m_hAttackTarget))) + { + } + NPCATK_TARGET = "unset"; + } + if ((IsEntityAlive(GetOwner()))) + { + } + if (!(JUMP_SCAN_ACTIVE)) + { + } + if (!(I_R_FROZEN)) + { + } + if ((RUN_AWAY)) + { + if ((IsEntityAlive(LATCH_TARGET))) + { + SetMoveDest(LATCH_TARGET); + if (GetEntityRange(LATCH_TARGET) < 32) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 110, 110)); + } + } + else + { + run_away_end(); + } + } + if (!(RUN_AWAY)) + { + } + if (!(LATCHED_ON)) + { + if (m_hAttackTarget != "unset") + { + } + if ((IsEntityAlive(m_hAttackTarget))) + { + } + if (GetEntityRange(m_hAttackTarget) < 1024) + { + SetMoveDest(m_hAttackTarget); + LogDebug("move to GetEntityName(m_hAttackTarget)"); + } + else + { + NPCATK_TARGET = "unset"; + } + if (!(IsEntityAlive(m_hAttackTarget))) + { + NPCATK_TARGET = "unset"; + // svplaysound: svplaysound 2 0 SOUND_CHITTER + EmitSound(2, 0, SOUND_CHITTER); + } + if ((IsEntityAlive(m_hAttackTarget))) + { + } + if (GetGameTime() > NEXT_LEAP) + { + } + if (GetEntityRange(m_hAttackTarget) < RANGE_LEAP_MAX) + { + } + NEXT_LEAP = GetGameTime(); + NEXT_LEAP += FREQ_LEAP; + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + else + { + if (!(IsEntityAlive(LATCH_TARGET))) + { + do_dismount(); + } + else + { + ApplyEffect(LATCH_TARGET, "effects/scarab_latch", 2.0, GetEntityIndex(GetOwner()), DMG_CHEW); + } + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(FREQ_CHITTER); + if ((true)) + { + } + if ((IsEntityAlive(GetOwner()))) + { + } + if (!(LATCHED_ON)) + { + } + if ((IsEntityAlive(m_hAttackTarget))) + { + } + // svplaysound: svplaysound 2 5 SOUND_CHITTER + EmitSound(2, 5, SOUND_CHITTER); + } + + void OnSpawn() override + { + NPCATK_TARGET = "unset"; + scarab_spawn(); + } + + void scarab_spawn() + { + SetName("Golden Scarab"); + SetModel("monsters/scarab.mdl"); + SetBloodType("red"); + SetHealth(150); + SetWidth(16); + SetHeight(16); + SetRoam(true); + SetRace("spider"); + SetHearingSensitivity(8); + SetDamageResistance("holy", 0.0); + SetDamageResistance("fire", 0.0); + SetMoveAnim(ANIM_MOVE); + SetIdleAnim(ANIM_IDLE); + SetSolid("none"); + if (!(true)) return; + NPC_SPAWN_TIME = GetGameTime(); + } + + void OnDamage(int damage) override + { + float SINCE_SPAWN = GetGameTime(); + SINCE_SPAWN -= NPC_SPAWN_TIME; + if (SINCE_SPAWN < 2.0) + { + if (GetRelationship(param1) == "enemy") + { + int BLOCK_PREMATURE_DAMAGE = 1; + } + if ((IsValidPlayer(param1))) + { + int BLOCK_PREMATURE_DAMAGE = 1; + } + if ((BLOCK_PREMATURE_DAMAGE)) + { + } + SetDamage("dmg"); + SetDamage("hit"); + return; + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((LATCHED_ON)) return; + if (!(m_hAttackTarget == "unset")) return; + scarab_set_target(GetEntityIndex(m_hLastStruck)); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(true)) return; + if ((LATCHED_ON)) return; + if ((RUN_AWAY)) return; + string HEARD_ID = GetEntityIndex("ent_lastheard"); + if (!((HEARD_ID !is null))) return; + if (!(IsEntityAlive(HEARD_ID))) return; + if (!(GetRelationship(HEARD_ID) == "enemy")) return; + if (m_hAttackTarget != "unset") + { + if (GetEntityRange(m_hAttackTarget) > GetEntityRange(HEARD_ID)) + { + scarab_set_target(HEARD_ID); + } + } + else + { + scarab_set_target(HEARD_ID); + } + if (m_hAttackTarget == HEARD_ID) + { + SetMoveDest(m_hAttackTarget); + } + } + + void scarab_set_target() + { + string OLD_TARG = m_hAttackTarget; + if ((GetEntityProperty(m_hAttackTarget, "scriptvar"))) + { + NPCATK_TARGET = "unset"; + if (OLD_TARG != "unset") + { + } + if ((IsEntityAlive(OLD_TARG))) + { + NPCATK_TARGET = OLD_TARG; + } + } + NPCATK_TARGET = param1; + } + + void leap_boost() + { + if (!(IsEntityAlive(GetOwner()))) return; + EmitSound(GetOwner(), 0, SOUND_LATCH_HISS, 10); + if (GetEntityRange(m_hAttackTarget) >= RANGE_LEAP_LONG) + { + string JUMP_VEL = /* TODO: $relvel */ $relvel(0, 800, 300); + } + if (GetEntityRange(m_hAttackTarget) < RANGE_LEAP_LONG) + { + string JUMP_VEL = /* TODO: $relvel */ $relvel(0, 400, 200); + } + if (GetEntityRange(m_hAttackTarget) <= RANGE_LEAP_SHORT) + { + string JUMP_VEL = /* TODO: $relvel */ $relvel(0, 200, 50); + } + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > 64) + { + Z_DIFF *= 4; + JUMP_VEL += "z"; + } + AddVelocity(GetOwner(), JUMP_VEL); + JUMP_SCAN_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "jump_scan"); + ScheduleDelayedEvent(1.0, "end_jump_scan"); + } + + void jump_scan() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(JUMP_SCAN_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "jump_scan"); + string IN_BOX = /* TODO: $get_tbox */ $get_tbox("enemy", 32); + if (!(IN_BOX != "none")) return; + string IN_BOX = /* TODO: $sort_entlist */ $sort_entlist(IN_BOX, "range"); + latch_onto(GetToken(IN_BOX, 0, ";")); + } + + void end_jump_scan() + { + JUMP_SCAN_ACTIVE = 0; + } + + void latch_onto() + { + if (!(IsEntityAlive(GetOwner()))) return; + SetSolid("box"); + LATCHED_ON = 1; + JUMP_SCAN_ACTIVE = 0; + LATCH_TARGET = param1; + PlayAnim("once", "break"); + PlayAnim("critical", "chew"); + SetIdleAnim("chew"); + SetMoveAnim("chew"); + SetAngles("face.pitch"); + ApplyEffect(LATCH_TARGET, EFFECT_SCRIPT, EFFECT_DURATION, GetEntityIndex(GetOwner()), DMG_BURN_DOT); + spider_latch_think(); + LATCH_DURATION("do_dismount"); + } + + void spider_latch_think() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(LATCHED_ON)) return; + if ((IsValidPlayer(LATCH_TARGET))) + { + string TARG_ORG = GetEntityProperty(LATCH_TARGET, "eyepos"); + } + else + { + string TARG_ORG = GetEntityOrigin(LATCH_TARGET); + string TARG_HEIGHT = GetEntityHeight(LATCH_TARGET); + TARG_ORG += "z"; + } + int RND_V_POS = RandomInt(-64, 0); + string TARG_YAW = GetEntityProperty(LATCH_TARGET, "angles.yaw"); + TARG_ORG += /* TODO: $relpos */ $relpos(Vector3(0, TARG_YAW, 0), Vector3(0, 5, RND_V_POS)); + string TARG_GROUND = /* TODO: $get_ground_height */ $get_ground_height(TARG_ORG); + if ((TARG_ORG).z < TARG_GROUND) + { + TARG_ORG = "z"; + TARG_ORG += "z"; + } + SetEntityOrigin(GetOwner(), TARG_ORG); + } + + void do_dismount() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(LATCHED_ON)) return; + SetSolid("none"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_MOVE); + roll_away(); + LATCHED_ON = 0; + } + + void roll_away() + { + if (!(IsEntityAlive(GetOwner()))) return; + string TARGET_ORG = GetEntityOrigin(LATCH_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + SetMoveDest(LATCH_TARGET); + SetProp(GetOwner(), "movetype", 8); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(10, 500, 10))); + RUN_AWAY = 1; + NPC_HACKED_MOVE_SPEED = 50; + SetAnimFrameRate(2.0); + ScheduleDelayedEvent(5.0, "run_away_end"); + ScheduleDelayedEvent(0.1, "fix_bbox"); + } + + void fix_bbox() + { + SetProp(GetOwner(), "movetype", 4); + } + + void run_away_end() + { + NPC_HACKED_MOVE_SPEED = 25; + SetAnimFrameRate(1.0); + RUN_AWAY = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + PlayAnim("hold", ANIM_DEATH); + if (!(true)) return; + // svplaysound: svplaysound 2 0 SOUND_CHITTER + EmitSound(2, 0, SOUND_CHITTER); + EmitSound(GetOwner(), 1, SOUND_DEATH, 10); + } + + void game_movingto_dest() + { + if ((I_R_FROZEN)) return; + if ((LATCHED_ON)) return; + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + + void npc_suicide() + { + if (param1 == "no_pets") + { + if ((I_R_PET)) + { + } + int EXIT_SUB = 1; + } + if (param1 == "only_bad") + { + if (GetEntityRace(GetOwner()) == "human") + { + int EXIT_SUB = 1; + } + if (GetEntityRace(GetOwner()) == "hguard") + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + SetInvincible(false); + SetRace("hated"); + SKEL_RESPAWN_TIMES = 99; + DoDamage(GetOwner(), "direct", 30000, 100, GAME_MASTER); + } + +} + +} diff --git a/scripts/angelscript/monsters/scarab_venom.as b/scripts/angelscript/monsters/scarab_venom.as new file mode 100644 index 00000000..3795eeca --- /dev/null +++ b/scripts/angelscript/monsters/scarab_venom.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "monsters/scarab_fire.as" + +namespace MS +{ + +class ScarabVenom : CGameScript +{ + float EFFECT_DURATION; + string EFFECT_SCRIPT; + + ScarabVenom() + { + EFFECT_SCRIPT = "effects/dot_poison"; + EFFECT_DURATION = 10.0; + } + + void scarab_spawn() + { + SetName("Jade Scarab"); + SetModel("monsters/scarab.mdl"); + SetHealth(150); + SetWidth(16); + SetHeight(16); + SetRoam(true); + SetRace("vermin"); + SetHearingSensitivity(8); + SetDamageResistance("holy", 0.0); + SetBloodType("green"); + SetMoveAnim(ANIM_MOVE); + SetIdleAnim(ANIM_IDLE); + SetSolid("none"); + SetProp(GetOwner(), "skin", 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/scorpion1.as b/scripts/angelscript/monsters/scorpion1.as new file mode 100644 index 00000000..78105cad --- /dev/null +++ b/scripts/angelscript/monsters/scorpion1.as @@ -0,0 +1,112 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Scorpion1 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DELETE_ON_DEATH; + float FLEE_CHANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + int NPC_GIVE_EXP; + string NPC_MOVE_TARGET; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Scorpion1() + { + DELETE_ON_DEATH = 1; + ANIM_IDLE = "idle_a"; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die"; + ANIM_ATTACK = "attackb"; + ATTACK_RANGE = 45; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.6; + ATTACK_DAMAGE = 2; + CAN_FLEE = 0; + FLEE_HEALTH = 0; + FLEE_CHANCE = 1.0; + CAN_HUNT = 1; + HUNT_AGRO = 1; + NPC_MOVE_TARGET = "enemy"; + Precache(SOUND_DEATH); + Precache(SOUND_IDLE1); + Precache("monsters/base_monster"); + Precache("monsters/base_npc_attack"); + Precache("monsters/base_npc"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + SetVolume(5); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnSpawn() override + { + SetHealth(30); + SetWidth(20); + SetHeight(20); + SetRace("spider"); + SetName("Scorpion"); + SetRoam(true); + SetHearingSensitivity(3); + NPC_GIVE_EXP = 10; + SetModel("monsters/scorp1.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle_a"); + SetMoveAnim("walk"); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void strike() + { + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + if (RandomInt(1, 10) == 1) + { + PlayAnim("critical", "jump"); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1 + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/scorpion2.as b/scripts/angelscript/monsters/scorpion2.as new file mode 100644 index 00000000..748fd97b --- /dev/null +++ b/scripts/angelscript/monsters/scorpion2.as @@ -0,0 +1,110 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Scorpion2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DELETE_ON_DEATH; + float FLEE_CHANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + int NPC_GIVE_EXP; + string NPC_MOVE_TARGET; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Scorpion2() + { + DELETE_ON_DEATH = 1; + ANIM_IDLE = "idle_b"; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attackb"; + ANIM_DEATH = "die"; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.6; + ATTACK_DAMAGE = 5; + CAN_FLEE = 0; + FLEE_HEALTH = 0; + FLEE_CHANCE = 1.0; + CAN_HUNT = 1; + HUNT_AGRO = 1; + NPC_MOVE_TARGET = "enemy"; + Precache(SOUND_DEATH); + Precache(SOUND_IDLE1); + Precache("monsters/base_monster"); + Precache("monsters/base_npc_attack"); + Precache("monsters/base_npc"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + SetVolume(5); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnSpawn() override + { + SetHealth(75); + SetWidth(40); + SetHeight(40); + SetRace("spider"); + SetName("Large Scorpion"); + SetRoam(true); + SetHearingSensitivity(3); + NPC_GIVE_EXP = 15; + SetDamageResistance("all", 0.8); + SetModel("monsters/scorp2.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle_a"); + SetMoveAnim("walk"); + SetActionAnim("attackb"); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void strike() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1 + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/scorpion3.as b/scripts/angelscript/monsters/scorpion3.as new file mode 100644 index 00000000..669698c4 --- /dev/null +++ b/scripts/angelscript/monsters/scorpion3.as @@ -0,0 +1,117 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Scorpion3 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_POISON; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_HUNT; + int DELETE_ON_DEATH; + float FLEE_CHANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + int NPC_GIVE_EXP; + string NPC_MOVE_TARGET; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Scorpion3() + { + DELETE_ON_DEATH = 1; + ANIM_IDLE = "idle_a"; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + ANIM_IDLE = "idle_b"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attackb"; + ANIM_DEATH = "die"; + ANIM_POISON = "attacka"; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.6; + ATTACK_DAMAGE = 7; + CAN_FLEE = 0; + FLEE_HEALTH = 0; + FLEE_CHANCE = 1.0; + CAN_HUNT = 1; + HUNT_AGRO = 1; + NPC_MOVE_TARGET = "enemy"; + Precache(SOUND_DEATH); + Precache(SOUND_IDLE1); + Precache("monsters/base_monster"); + Precache("monsters/base_npc_attack"); + Precache("monsters/base_npc"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + SetVolume(5); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnSpawn() override + { + SetHealth(175); + SetWidth(40); + SetHeight(50); + SetRace("spider"); + SetName("Huge Scorpion"); + SetRoam(true); + SetHearingSensitivity(3); + NPC_GIVE_EXP = 35; + SetModel("monsters/scorp3.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle_a"); + SetMoveAnim("walk"); + SetActionAnim("attackb"); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void strike() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + if (RandomInt(1, 10) == 1) + { + PlayAnim("critical", ANIM_POISON); + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", 5, GetOwner(), RandomInt(5, 8)); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1 + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/scorpion4.as b/scripts/angelscript/monsters/scorpion4.as new file mode 100644 index 00000000..b1acd1b7 --- /dev/null +++ b/scripts/angelscript/monsters/scorpion4.as @@ -0,0 +1,133 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Scorpion4 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_POISON; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int CAN_FLEE; + int CAN_HUNT; + int DELETE_ON_DEATH; + float FLEE_CHANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + int NPC_GIVE_EXP; + string NPC_MOVE_TARGET; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Scorpion4() + { + DELETE_ON_DEATH = 1; + ANIM_IDLE = "idle_a"; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + ANIM_IDLE = "idle_b"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attackb"; + ANIM_DEATH = "die"; + ANIM_POISON = "attacka"; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.6; + ATTACK_DAMAGE = 14; + CAN_FLEE = 0; + FLEE_HEALTH = 0; + FLEE_CHANCE = 1.0; + CAN_HUNT = 1; + HUNT_AGRO = 1; + NPC_MOVE_TARGET = "enemy"; + Precache(SOUND_DEATH); + Precache(SOUND_IDLE1); + Precache("monsters/base_monster"); + Precache("monsters/base_npc_attack"); + Precache("monsters/base_npc"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + SetVolume(5); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnSpawn() override + { + SetHealth(175); + SetWidth(40); + SetHeight(50); + SetRace("spider"); + SetName("Huge Venomous Scorpion"); + SetRoam(true); + SetHearingSensitivity(3); + NPC_GIVE_EXP = 45; + SetModel("monsters/scorp3.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle_a"); + SetMoveAnim("walk"); + SetActionAnim("attackb"); + SetAnimFrameRate(0.5); + SetAnimMoveSpeed(0.25); + BASE_FRAMERATE = 0.5; + BASE_MOVESPEED = 0.25; + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 0); + } + + void strike() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + if (RandomInt(1, 2) == 1) + { + PlayAnim("critical", ANIM_POISON); + if (GetEntityRange(HUNT_LASTTARGET) < ATTACK_RANGE) + { + } + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", 10, GetEntityIndex(GetOwner()), Random(2, 5)); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1 + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/scorpion5.as b/scripts/angelscript/monsters/scorpion5.as new file mode 100644 index 00000000..4d1ba116 --- /dev/null +++ b/scripts/angelscript/monsters/scorpion5.as @@ -0,0 +1,167 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Scorpion5 : CGameScript +{ + int AM_SUMMONED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_POISON; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int CAN_FLEE; + int CAN_HUNT; + int DELETE_ON_DEATH; + float FLEE_CHANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + string MY_OWNER; + int NPC_GIVE_EXP; + string NPC_MOVE_TARGET; + string SOUND_BIGSWING; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWING; + + Scorpion5() + { + DELETE_ON_DEATH = 1; + ANIM_IDLE = "idle_a"; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + ANIM_IDLE = "idle_b"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attackb"; + ANIM_DEATH = "die"; + ANIM_POISON = "attacka"; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.6; + ATTACK_DAMAGE = 30; + CAN_FLEE = 0; + FLEE_HEALTH = 0; + FLEE_CHANCE = 1.0; + CAN_HUNT = 1; + HUNT_AGRO = 1; + NPC_MOVE_TARGET = "enemy"; + SOUND_SWING = "zombie/claw_miss1.wav"; + SOUND_BIGSWING = "zombie/claw_miss2.wav"; + Precache(SOUND_DEATH); + Precache(SOUND_IDLE1); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + SetVolume(10); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnSpawn() override + { + scorpion_spawn(); + } + + void scorpion_spawn() + { + SetHealth(1000); + SetWidth(40); + SetHeight(50); + SetRace("spider"); + SetName("Gigantic Venomous Scorpion"); + SetRoam(true); + SetHearingSensitivity(3); + NPC_GIVE_EXP = 200; + SetModel("monsters/scorp5.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle_a"); + SetMoveAnim("walk"); + SetActionAnim("attackb"); + SetAnimFrameRate(0.5); + SetAnimMoveSpeed(0.25); + BASE_FRAMERATE = 0.5; + BASE_MOVESPEED = 0.25; + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 0); + if (!(AM_SUMMONED)) return; + CallExternal(MY_OWNER, "scorpion_died"); + } + + void strike() + { + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + if (RandomInt(1, 10) == 1) + { + EmitSound(GetOwner(), 0, SOUND_BIGSWING, 10); + PlayAnim("critical", ANIM_POISON); + if (GetEntityRange(HUNT_LASTTARGET) < ATTACK_RANGE) + { + } + ApplyEffect(HUNT_LASTTARGET, "effects/dot_poison", 10, GetEntityIndex(GetOwner()), Random(12, 20)); + } + else + { + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + if (GetEntityRange(HUNT_LASTTARGET) < ATTACK_RANGE) + { + } + float RND_LR = Random(-100, 100); + float RND_FB = Random(-200, 200); + AddVelocity(HUNT_LASTTARGET, /* TODO: $relvel */ $relvel(RND_LR, RND_FB, 10)); + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1 + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dynamically_created() + { + MY_OWNER = GetEntityIndex(param1); + SetRace(GetEntityRace(MY_OWNER)); + AM_SUMMONED = 1; + ScheduleDelayedEvent(0.1, "summoned_sound"); + } + + void summoned_sound() + { + EmitSound(GetOwner(), 0, "ambience/alien_humongo.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/scorpion5_stone.as b/scripts/angelscript/monsters/scorpion5_stone.as new file mode 100644 index 00000000..3da40741 --- /dev/null +++ b/scripts/angelscript/monsters/scorpion5_stone.as @@ -0,0 +1,60 @@ +#pragma context server + +#include "monsters/scorpion5.as" + +namespace MS +{ + +class Scorpion5Stone : CGameScript +{ + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int IS_UNHOLY; + int NPC_GIVE_EXP; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Scorpion5Stone() + { + IS_UNHOLY = 1; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + } + + void scorpion_spawn() + { + SetHealth(1000); + SetWidth(40); + SetHeight(50); + SetRace("demon"); + SetName("Gigantic Stone Scorpion"); + SetRoam(true); + SetHearingSensitivity(3); + NPC_GIVE_EXP = 300; + SetDamageResistance("all", 0.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.5); + SetModel("monsters/scorp5.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle_a"); + SetMoveAnim("walk"); + SetActionAnim("attackb"); + SetProp(GetOwner(), "skin", 3); + SetAnimFrameRate(0.5); + SetAnimMoveSpeed(0.25); + BASE_FRAMERATE = 0.5; + BASE_MOVESPEED = 0.25; + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/scorpion6.as b/scripts/angelscript/monsters/scorpion6.as new file mode 100644 index 00000000..a86663fc --- /dev/null +++ b/scripts/angelscript/monsters/scorpion6.as @@ -0,0 +1,260 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Scorpion6 : CGameScript +{ + int AM_SUMMONED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_POISON; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_STINGRANGE; + float BASE_MOVESPEED; + string BURST_SCRIPT; + string BURST_TARGS; + int DMG_BURST; + float DOT_DMG; + float DOT_DURATION; + string DOT_EFFECT; + string DOT_EFFECT_BURST_TYPE; + string DOT_EFFECT_STING; + float FREQ_JUMP; + string MY_OWNER; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string SOUND_BIGSWING; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWING; + + Scorpion6() + { + FREQ_JUMP = 30.0; + ANIM_IDLE = "idle_a"; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + ANIM_IDLE = "idle_b"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attackb"; + ANIM_DEATH = "die"; + ANIM_POISON = "attacka"; + ATTACK_RANGE = 165; + ATTACK_HITRANGE = 180; + ATTACK_STINGRANGE = 120; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE = 200; + DOT_EFFECT = "effects/dot_poison"; + DOT_EFFECT_STING = "effects/dot_poison"; + DOT_EFFECT_BURST_TYPE = "stun"; + DOT_DURATION = 10.0; + DOT_DMG = 50.0; + BURST_SCRIPT = "effects/sfx_stun_burst"; + DMG_BURST = 200; + SOUND_SWING = "zombie/claw_miss1.wav"; + SOUND_BIGSWING = "zombie/claw_miss2.wav"; + Precache(SOUND_DEATH); + Precache(SOUND_IDLE1); + } + + void OnRepeatTimer() + { + SetRepeatDelay(10); + SetVolume(10); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_precache() + { + Precache("monsters/summon/stun_burst"); + } + + void OnSpawn() override + { + scorpion_spawn(); + } + + void scorpion_spawn() + { + SetHealth(5000); + SetWidth(196); + SetHeight(196); + SetRace("spider"); + SetName("Dread Scorpion"); + SetRoam(true); + SetHearingSensitivity(3); + NPC_GIVE_EXP = 800; + FREQ_JUMP("do_jump"); + SetModel("monsters/scorp6.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle_a"); + SetMoveAnim("walk"); + SetProp(GetOwner(), "skin", 1); + SetAnimMoveSpeed(0.5); + BASE_MOVESPEED = 0.5; + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 0); + if (!(AM_SUMMONED)) return; + CallExternal(MY_OWNER, "scorpion_died"); + } + + void OnPostSpawn() override + { + NPC_MUST_SEE_TARGET = 0; + } + + void strike() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + DoDamage(m_hAttackTarget, "direct", ATTACK_DAMAGE, ATTACK_HITCHANCE, GetOwner()); + } + if (RandomInt(1, 10) == 1) + { + EmitSound(GetOwner(), 0, SOUND_BIGSWING, 10); + PlayAnim("critical", ANIM_POISON); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + } + ApplyEffect(m_hAttackTarget, DOT_EFFECT, DOT_DURATION, GetEntityIndex(GetOwner()), DOT_DMG); + } + else + { + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + } + float RND_LR = Random(-100, 100); + float RND_FB = Random(-350, 100); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(RND_LR, RND_FB, 10)); + } + } + + void poison_strike() + { + LogDebug("poison_strike GetEntityName(m_hLastSeen) GetEntityName(HUNT_LASTTARGET)"); + if (GetEntityRange(m_hAttackTarget) < ATTACK_STINGRANGE) + { + DoDamage(m_hAttackTarget, "direct", ATTACK_DAMAGE, 0.9, GetOwner()); + } + EmitSound(GetOwner(), 0, SOUND_BIGSWING, 10); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_STINGRANGE)) return; + ApplyEffect(m_hAttackTarget, DOT_EFFECT_STING, DOT_DURATION, GetEntityIndex(GetOwner()), DOT_DMG); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_STINGRANGE)) return; + float RND_LR = Random(-100, 100); + float RND_FB = Random(-300, 400); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(RND_LR, RND_FB, 10)); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1 + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void do_jump() + { + LogDebug("do_jump GetEntityName(m_hAttackTarget)"); + FREQ_JUMP("do_jump"); + if (!(m_hAttackTarget != "unset")) return; + string N_BADS = /* TODO: $get_tbox */ $get_tbox("enemy", 640); + if (N_BADS == "none") + { + int DO_JUMP = RandomInt(0, 1); + } + else + { + if (GetTokenCount(N_BADS, ";") > 1) + { + int DO_JUMP = 1; + } + else + { + int DO_JUMP = RandomInt(0, 1); + } + } + if (!(DO_JUMP)) return; + LogDebug("do_jumpb N_BADS"); + PlayAnim("critical", "jump"); + ScheduleDelayedEvent(1.0, "do_jump2"); + } + + void do_jump2() + { + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 640, DMG_BURST, 1.0, 0); + string BURST_ORG = GetEntityOrigin(GetOwner()); + ClientEvent("new", "all", BURST_SCRIPT, BURST_ORG, 640, 0); + BURST_TARGS = FindEntitiesInSphere("enemy", 640); + LogDebug("do_jump2 BURST_TARGS"); + if (!(BURST_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + burst_affect_targets(); + } + } + + void burst_affect_targets() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + LogDebug("burst_affect_targets GetEntityName(CUR_TARG)"); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + if (DOT_EFFECT_BURST_TYPE == "stun") + { + ApplyEffect(CUR_TARG, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + if (DOT_EFFECT_BURST_TYPE == "effect") + { + ApplyEffect(CUR_TARG, DOT_EFFECT, DOT_DURATION, GetEntityIndex(GetOwner()), DOT_DMG); + } + } + + void game_dynamically_created() + { + if (!(IsEntityAlive(MY_OWNER))) return; + MY_OWNER = GetEntityIndex(param1); + SetRace(GetEntityRace(MY_OWNER)); + AM_SUMMONED = 1; + ScheduleDelayedEvent(0.1, "summoned_sound"); + } + + void summoned_sound() + { + EmitSound(GetOwner(), 0, "ambience/alien_humongo.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/scorpion6_stone.as b/scripts/angelscript/monsters/scorpion6_stone.as new file mode 100644 index 00000000..e95ab619 --- /dev/null +++ b/scripts/angelscript/monsters/scorpion6_stone.as @@ -0,0 +1,59 @@ +#pragma context server + +#include "monsters/scorpion6.as" + +namespace MS +{ + +class Scorpion6Stone : CGameScript +{ + float BASE_MOVESPEED; + float FREQ_JUMP; + int IS_UNHOLY; + int NPC_GIVE_EXP; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Scorpion6Stone() + { + IS_UNHOLY = 1; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + FREQ_JUMP = 30.0; + } + + void scorpion_spawn() + { + SetHealth(5000); + SetWidth(196); + SetHeight(196); + SetRace("demon"); + SetName("Obsidian Scorpion"); + SetRoam(true); + SetHearingSensitivity(3); + NPC_GIVE_EXP = 1000; + SetDamageResistance("all", 0.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.5); + FREQ_JUMP("do_jump"); + SetModel("monsters/scorp6.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle_a"); + SetMoveAnim("walk"); + SetProp(GetOwner(), "skin", 2); + SetAnimMoveSpeed(0.5); + BASE_MOVESPEED = 0.5; + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/scorpion7_fire.as b/scripts/angelscript/monsters/scorpion7_fire.as new file mode 100644 index 00000000..89da5e73 --- /dev/null +++ b/scripts/angelscript/monsters/scorpion7_fire.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "monsters/scorpion6.as" + +namespace MS +{ + +class Scorpion7Fire : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_STINGRANGE; + string BURST_SCRIPT; + int DMG_BURST; + float DOT_DMG; + float DOT_DURATION; + string DOT_EFFECT; + string DOT_EFFECT_BURST_TYPE; + string DOT_EFFECT_STING; + float FREQ_JUMP; + int IS_UNHOLY; + int NPC_BASE_EXP; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Scorpion7Fire() + { + IS_UNHOLY = 1; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "weapons/dagger/daggermetal2.wav"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + DOT_EFFECT = "effects/dot_fire"; + DOT_EFFECT_STING = "effects/dot_poison"; + BURST_SCRIPT = "effects/sfx_fire_burst"; + DOT_EFFECT_BURST_TYPE = "effect"; + DOT_DURATION = 5.0; + DOT_DMG = 100.0; + DMG_BURST = 300; + ATTACK_STINGRANGE = 180; + FREQ_JUMP = 30.0; + NPC_BASE_EXP = 2000; + ANIM_IDLE = "idle_b"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attackb"; + ANIM_DEATH = "die"; + } + + void scorpion_spawn() + { + SetName("Blistering Scorpion"); + SetHealth(5000); + SetModel("monsters/scorp7.mdl"); + SetProp(GetOwner(), "skin", 4); + SetIdleAnim("idle_a"); + SetMoveAnim("walk"); + SetWidth(196); + SetHeight(196); + SetHearingSensitivity(10); + SetRoam(true); + SetRace("demon"); + SetDamageResistance("all", 0.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.5); + SetDamageResistance("holy", 1.5); + FREQ_JUMP("do_jump"); + PlayAnim("once", "idle_a"); + // PlayRandomSound from: SOUND_IDLE1 + array sounds = {SOUND_IDLE1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/scream.as b/scripts/angelscript/monsters/scream.as new file mode 100644 index 00000000..c5fe9a9c --- /dev/null +++ b/scripts/angelscript/monsters/scream.as @@ -0,0 +1,21 @@ +#pragma context server + +namespace MS +{ + +class Scream : CGameScript +{ + void OnSpawn() override + { + SetHealth(150); + SetWidth(50); + SetHeight(50); + SetRoam(false); + SetName("PlaceHolder [Test Minions]"); + SetIdleAnim("seq-name"); + SetModel("props/rock1.mdl"); + } + +} + +} diff --git a/scripts/angelscript/monsters/scream2.as b/scripts/angelscript/monsters/scream2.as new file mode 100644 index 00000000..66ddf974 --- /dev/null +++ b/scripts/angelscript/monsters/scream2.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/orc_unarmed.as" + +namespace MS +{ + +class Scream2 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/sgoblin.as b/scripts/angelscript/monsters/sgoblin.as new file mode 100644 index 00000000..2d68a5d3 --- /dev/null +++ b/scripts/angelscript/monsters/sgoblin.as @@ -0,0 +1,251 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class Sgoblin : CGameScript +{ + int AM_INVISIBLE; + string ANIM_ATTACK; + int ATTACK_HITCHANCE; + float BASE_FRAMERATE; + int CAN_FIREBALL; + int CAN_STUN; + string CL_IDX; + string CL_SCRIPT; + int DMG_KNIFE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int FIRST_ALERT; + int FLINCH_HEALTH; + int NPC_BASE_EXP; + int ORG_BODY; + int OVERHEAD_SMASH; + string SOUND_APPEAR; + string SOUND_FADE; + int SWING_COUNT; + + Sgoblin() + { + NPC_BASE_EXP = 375; + CAN_FIREBALL = 0; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(40, 50); + DMG_KNIFE = RandomInt(40, 60); + BASE_FRAMERATE = 2.0; + ATTACK_HITCHANCE = 90; + CAN_STUN = 0; + FLINCH_HEALTH = 200; + CL_SCRIPT = "monsters/sgoblin_cl"; + ORG_BODY = 0; + SOUND_FADE = "monsters/gonome/gonome_melee2.wav"; + SOUND_APPEAR = "ambience/alien_humongo.wav"; + } + + void game_precache() + { + Precache(CL_SCRIPT); + } + + void goblin_spawn() + { + SetName("Shadow Goblin"); + SetRace("demon"); + SetBloodType("red"); + SetHealth(1000); + SetRoam(true); + SetHearingSensitivity(4); + SetAnimFrameRate(2.0); + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 8); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 3); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ANIM_ATTACK = "swordswing1_L"; + ClientEvent("new", "all", CL_SCRIPT); + CL_IDX = "game.script.last_sent_id"; + SWING_COUNT = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", CL_IDX); + if (!(AM_INVISIBLE)) return; + go_visible(); + } + + void swing_axe() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KNIFE, ATTACK_HITCHANCE, "slash"); + OVERHEAD_SMASH = 1; + } + + void swing_sword() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KNIFE, ATTACK_HITCHANCE, "pierce"); + SWING_COUNT += 1; + if (!(SWING_COUNT > 5)) return; + SWING_COUNT = 0; + fade_and_flee(); + } + + void npc_selectattack() + { + if ((AM_INVISIBLE)) + { + fade_in(); + } + } + + void gob_jump_check() + { + if (!(GOB_JUMP_SCANNING)) return; + float GOB_HOP_DELAY = Random(2, 4); + GOB_HOP_DELAY("gob_jump_check"); + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE)) return; + if (!(m_hAttackTarget != "unset")) return; + if ((I_R_FROZEN)) return; + if ((IS_FLEEING)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOBLIN_JUMPRANGE)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > GOB_JUMP_THRESH) + { + if (TARGET_Z_DIFFERENCE < 500) + { + } + PlayAnim("critical", ANIM_SMASH); + ScheduleDelayedEvent(0.1, "gob_hop"); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((AM_INVISIBLE)) + { + jump_away(); + } + if (!(param1 > 200)) return; + if (!(RandomInt(1, 2) == 1)) return; + jump_away(); + } + + void jump_away() + { + if (!(IS_FLEEING)) + { + npcatk_flee(GetEntityIndex(m_hLastStruck), 100, 3.0); + } + ScheduleDelayedEvent(0.1, "gob_hop"); + } + + void fade_and_flee() + { + ClientEvent("update", "all", CL_IDX, "poof_fx", GetEntityOrigin(GetOwner())); + jump_away(); + ScheduleDelayedEvent(0.25, "go_invisible"); + } + + void go_invisible() + { + if (!(IsEntityAlive(GetOwner()))) return; + LogDebug("*** GOING INVISIBLE ***"); + AM_INVISIBLE = 1; + EmitSound(GetOwner(), 0, SOUND_FADE, 10); + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", 0); + SetModelBody(0, 2); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + etherial_immunes(); + } + + void go_visible() + { + LogDebug("*** GOING VISIBLE ***"); + AM_INVISIBLE = 0; + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + normal_immunes(); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 8); + SetModelBody(3, 0); + } + + void fade_in() + { + if (!(IsEntityAlive(GetOwner()))) return; + EmitSound(GetOwner(), 0, SOUND_APPEAR, 10); + ClientEvent("update", "all", CL_IDX, "unpoof_fx", GetEntityOrigin(GetOwner())); + go_visible(); + } + + void npc_targetsighted() + { + if ((FIRST_ALERT)) return; + if ((AM_INVISIBLE)) return; + FIRST_ALERT = 1; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE)) return; + fade_and_flee(); + } + + void my_target_died() + { + FIRST_ALERT = 0; + if (!(AM_INVISIBLE)) return; + fade_in(); + } + + void etherial_immunes() + { + ClearFX(); + SetInvincible(true); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + } + + void normal_immunes() + { + SetInvincible(false); + SetDamageResistance("fire", 1.0); + SetDamageResistance("cold", 1.0); + SetDamageResistance("poison", 1.0); + SetDamageResistance("holy", 0.0); + } + + void game_dodamage() + { + if ((OVERHEAD_SMASH)) + { + if ((AM_INVISIBLE)) + { + } + fade_in(); + } + OVERHEAD_SMASH = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/sgoblin_cl.as b/scripts/angelscript/monsters/sgoblin_cl.as new file mode 100644 index 00000000..87063029 --- /dev/null +++ b/scripts/angelscript/monsters/sgoblin_cl.as @@ -0,0 +1,74 @@ +#pragma context client + +namespace MS +{ + +class SgoblinCl : CGameScript +{ + int ANG_COUNT; + string SPRITE_CENTER; + + void client_activate() + { + } + + void poof_fx() + { + SPRITE_CENTER = param1; + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "poof_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "poof_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "poof_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "poof_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "poof_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "poof_sprite"); + } + + void unpoof_fx() + { + SPRITE_CENTER = param1; + ANG_COUNT = 0; + for (int i = 0; i < 6; i++) + { + unpoof_fx_loop(); + } + } + + void unpoof_fx_loop() + { + string START_LOC = SPRITE_CENTER; + START_LOC += /* TODO: $relpos */ $relpos(Vector3(0, ANG_COUNT, 0), Vector3(0, 128, 96)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", START_LOC, "unpoof_sprite"); + ANG_COUNT += 60; + } + + void poof_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 5.0); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(-90, Random(-125, 125), Random(-125, 125))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 2); + ClientEffect("tempent", "set_current_prop", "gravity", Random(-1.5, -1.1)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + } + + void unpoof_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 5.0); + ClientEffect("tempent", "set_current_prop", "velocity", (SPRITE_CENTER - START_LOC).Normalize()); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 2); + ClientEffect("tempent", "set_current_prop", "gravity", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + } + +} + +} diff --git a/scripts/angelscript/monsters/shadow_form.as b/scripts/angelscript/monsters/shadow_form.as new file mode 100644 index 00000000..5da3e10c --- /dev/null +++ b/scripts/angelscript/monsters/shadow_form.as @@ -0,0 +1,439 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_flyer_grav.as" + +namespace MS +{ + +class ShadowForm : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int AS_CUSTOM_UNSTUCK; + int AS_DIST_THRESH; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string CL_SCRIPT_IDX; + int CYCLE_IDLE_SOUND; + int DID_ALERT; + int DMG_MAIN_ZAP; + int DMG_MINOR_STRIKE; + int DOT_MAIN_ZAP; + int DOT_MINOR_STRIKE; + float FREQ_ATTACK; + float FREQ_CL_UPDATE; + float FREQ_IDLE_SOUND; + float FREQ_IDLE_ZAP; + float FREQ_MINOR_STRIKE; + float FREQ_PAIN; + float FREQ_SHOCK_SCAN; + int IMMUNE_ALL_BUT_HOLY; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int MISS_COUNT; + string NEXT_ATTACK; + string NEXT_IDLE_SOUND; + string NEXT_IDLE_ZAP; + string NEXT_MINOR_STRIKE; + string NEXT_PAIN_SOUND; + string NEXT_SHOCK_SCAN; + string NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + int NPC_MUST_SEE_TARGET; + int RANGE_MINOR_STRIKE; + string SCAN_TARGS; + int SHADOW_CL_ON; + string SOUND_ALERT; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + string SOUND_ZAP_IDLE; + string SOUND_ZAP_READY; + + ShadowForm() + { + IMMUNE_ALL_BUT_HOLY = 1; + IS_UNHOLY = 1; + NPC_HACKED_MOVE_SPEED = 10; + AS_CUSTOM_UNSTUCK = 1; + IMMUNE_VAMPIRE = 1; + NPC_MUST_SEE_TARGET = 0; + ANIM_ATTACK = "walk"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_IDLE = "walk"; + ANIM_DEATH = "walk"; + ATTACK_MOVERANGE = 64; + ATTACK_RANGE = 512; + FREQ_CL_UPDATE = 15.0; + FREQ_IDLE_SOUND = Random(3.0, 6.0); + FREQ_IDLE_ZAP = Random(2.0, 3.0); + FREQ_PAIN = 1.0; + FREQ_ATTACK = 5.0; + FREQ_MINOR_STRIKE = 3.0; + DMG_MAIN_ZAP = 1100; + DOT_MAIN_ZAP = 50; + DMG_MINOR_STRIKE = 300; + DOT_MINOR_STRIKE = 30; + RANGE_MINOR_STRIKE = 768; + SOUND_ALERT = "monsters/shadow/shadow_alert.wav"; + SOUND_IDLE1 = "monsters/shadow/shadow_idle1.wav"; + SOUND_IDLE2 = "monsters/shadow/shadow_idle2.wav"; + SOUND_IDLE3 = "monsters/shadow/shadow_idle3.wav"; + SOUND_PAIN1 = "monsters/shadow/shadow_pain1.wav"; + SOUND_PAIN2 = "monsters/shadow/shadow_pain2.wav"; + SOUND_PAIN3 = "monsters/shadow/shadow_pain3.wav"; + SOUND_DEATH = "monsters/shadow/shadow_death.wav"; + SOUND_ZAP_READY = "magic/lightprep.wav"; + SOUND_ZAP_IDLE = "magic/elecidle.wav"; + SOUND_ZAP1 = "debris/zap1.wav"; + SOUND_ZAP2 = "debris/zap3.wav"; + SOUND_ZAP3 = "debris/zap8.wav"; + FREQ_SHOCK_SCAN = Random(3.0, 5.0); + AS_DIST_THRESH = 5; + if ((StringToLower(GetMapName())).findFirst("lodagond") >= 0) + { + NPC_GIVE_EXP = 2000; + } + else + { + NPC_GIVE_EXP = 1000; + } + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.2); + if ((IsEntityAlive(GetOwner()))) + { + } + string L_MOVE_DEST = GetMonsterProperty("movedest.origin"); + if (L_MOVE_DEST != Vector3(0, 0, 0)) + { + } + AddVelocity(GetOwner(), /* TODO: $relpos */ $relpos(GetMonsterProperty("angles"), Vector3(0, NPC_HACKED_MOVE_SPEED, 0))); + } + + void game_precache() + { + Precache("shadowfog.spr"); + Precache("monsters/shadow_form_cl"); + } + + void OnSpawn() override + { + SetName("Shadow Form"); + SetHealth(5000); + SetDamageResistance("holy", 2.0); + SetDamageResistance("dark", 0.5); + SetDamageResistance("stun", 0); + SetBloodType("none"); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("lightning", 0.0); + SetRace("demon"); + SetModel("monsters/shadow_hitbox.mdl"); + SetWidth(90); + SetHeight(90); + SetHearingSensitivity(11); + SetGravity(0); + if (!(true)) return; + MISS_COUNT = 0; + CYCLE_IDLE_SOUND = 0; + array ARRAY_MINOR_STRIKE; + } + + void OnDamage(int damage) override + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(SHADOW_CL_ON)) + { + do_manifest(); + } + if (!(IMMUNE_ALL_BUT_HOLY)) return; + int NO_DAMAGE = 1; + if ((param3).findFirst("holy") >= 0) + { + int NO_DAMAGE = 0; + } + if ((param3).findFirst("dark") >= 0) + { + int NO_DAMAGE = 0; + } + if ((param3).findFirst("target") >= 0) + { + int NO_DAMAGE = 0; + } + if ((param3).findFirst("magic") >= 0) + { + int NO_DAMAGE = 0; + } + if ((NO_DAMAGE)) + { + SetDamage("dmg"); + SetDamage("hit"); + return; + } + else + { + if (GetGameTime() > NEXT_STRIKE_BACK) + { + if (param1 != m_hAttackTarget) + { + } + add_minor_strike(GetEntityIndex(param1)); + } + if (GetGameTime() > NEXT_PAIN_SOUND) + { + } + NEXT_PAIN_SOUND = GetGameTime(); + NEXT_PAIN_SOUND += FREQ_PAIN; + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + Effect("beam", "ents", "lgtning.spr", 6, GetOwner(), RandomInt(0, 3), GetOwner(), RandomInt(0, 3), Vector3(255, 0, 0), 255, 255, Random(1.0, 2.0)); + } + } + + void npc_targetsighted() + { + do_manifest(); + } + + void my_target_died() + { + DID_ALERT = 0; + } + + void do_manifest() + { + if (!(DID_ALERT)) + { + DID_ALERT = 1; + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + float GAME_TIME = GetGameTime(); + NEXT_IDLE_ZAP = GAME_TIME; + NEXT_IDLE_ZAP += FREQ_IDLE_ZAP; + NEXT_IDLE_SOUND = GAME_TIME; + NEXT_IDLE_SOUND += FREQ_IDLE_SOUND; + NEXT_ATTACK = GAME_TIME; + NEXT_ATTACK += FREQ_ATTACK; + NEXT_SHOCK_SCAN = GAME_TIME; + NEXT_SHOCK_SCAN += FREQ_SHOCK_SCAN; + if (StringToLower(GetMapName()) == "nashalrath") + { + CallExternal(m_hAttackTarget, "ext_play_music", "Hashalgath.mp3"); + } + } + if ((SHADOW_CL_ON)) return; + SHADOW_CL_ON = 1; + shadow_cl_loop(); + } + + void shadow_cl_loop() + { + if (!(SHADOW_CL_ON)) return; + FREQ_CL_UPDATE("shadow_cl_loop", FREQ_CL_UPDATE); + ClientEvent("new", "all", "monsters/shadow_form_cl", GetEntityIndex(GetOwner()), FREQ_CL_UPDATE); + CL_SCRIPT_IDX = "game.script.last_sent_id"; + } + + void npc_suicide() + { + IMMUNE_ALL_BUT_HOLY = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(SHADOW_CL_ON)) return; + if (!(m_hAttackTarget != "none")) return; + float GAME_TIME = GetGameTime(); + if (GAME_TIME > NEXT_IDLE_ZAP) + { + EmitSound(GetOwner(), 2, SOUND_ZAP_IDLE, 5); + Effect("beam", "ents", "lgtning.spr", 2, GetOwner(), RandomInt(0, 3), GetOwner(), RandomInt(0, 3), Vector3(128, 128, 255), 200, 255, Random(2.0, 4.0)); + NEXT_IDLE_ZAP = GAME_TIME; + NEXT_IDLE_ZAP += FREQ_IDLE_ZAP; + } + if (GAME_TIME > NEXT_IDLE_SOUND) + { + CYCLE_IDLE_SOUND += 1; + if (CYCLE_IDLE_SOUND > 3) + { + CYCLE_IDLE_SOUND = 0; + } + if (CYCLE_IDLE_SOUND == 1) + { + EmitSound(GetOwner(), 4, SOUND_IDLE1, 10); + } + if (CYCLE_IDLE_SOUND == 2) + { + EmitSound(GetOwner(), 3, SOUND_IDLE2, 10); + } + if (CYCLE_IDLE_SOUND == 3) + { + EmitSound(GetOwner(), 4, SOUND_IDLE3, 10); + } + NEXT_IDLE_SOUND = GAME_TIME; + NEXT_IDLE_SOUND += FREQ_IDLE_SOUND; + } + if (GAME_TIME > NEXT_SHOCK_SCAN) + { + NEXT_SHOCK_SCAN = GAME_TIME; + NEXT_SHOCK_SCAN += FREQ_SHOCK_SCAN; + shock_scan(); + } + if (int(ARRAY_MINOR_STRIKE.length()) > 0) + { + if (GAME_TIME > NEXT_MINOR_STRIKE) + { + } + NEXT_MINOR_STRIKE = GAME_TIME; + NEXT_MINOR_STRIKE += FREQ_MINOR_STRIKE; + minor_strike(); + } + } + + void shock_scan() + { + SCAN_TARGS = FindEntitiesInSphere("enemy", RANGE_MINOR_STRIKE); + if (!(SCAN_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(SCAN_TARGS, ";"); i++) + { + shock_scan_loop(); + } + } + + void shock_scan_loop() + { + string CUR_TARG = GetToken(SCAN_TARGS, i, ";"); + if (!(IsEntityAlive(CUR_TARG))) return; + if (!(CUR_TARG != m_hAttackTarget)) return; + add_minor_strike(CUR_TARG); + } + + void npcatk_attack() + { + if (GetGameTime() > NEXT_ATTACK) + { + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string TRACE_LINE = TraceLine(MY_ORG, TARG_ORG); + if (TRACE_LINE == TARG_ORG) + { + } + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += FREQ_ATTACK; + zap_target1(); + } + } + + void zap_target1() + { + if (!(IsEntityAlive(GetOwner()))) return; + EmitSound(GetOwner(), 0, SOUND_ZAP_READY, 10); + Effect("beam", "ents", "lgtning.spr", 10, GetOwner(), 0, GetOwner(), 1, Vector3(128, 128, 128), 200, 255, 0.5); + Effect("beam", "ents", "lgtning.spr", 10, GetOwner(), 1, GetOwner(), 2, Vector3(128, 128, 128), 200, 255, 0.5); + Effect("beam", "ents", "lgtning.spr", 10, GetOwner(), 2, GetOwner(), 3, Vector3(128, 128, 128), 200, 255, 0.5); + ScheduleDelayedEvent(0.5, "zap_target2"); + } + + void zap_target2() + { + if (!(IsEntityAlive(GetOwner()))) return; + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 0, GetOwner(), 1, Vector3(180, 180, 180), 200, 255, 0.5); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, GetOwner(), 2, Vector3(180, 180, 180), 200, 255, 0.5); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 3, Vector3(180, 180, 180), 200, 255, 0.5); + ScheduleDelayedEvent(0.5, "zap_target3"); + } + + void zap_target3() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(IsEntityAlive(m_hAttackTarget))) return; + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string TRACE_LINE = TraceLine(MY_ORG, TARG_ORG); + Effect("beam", "end", "lgtning.spr", 60, TRACE_LINE, GetOwner(), 0, Vector3(255, 255, 255), 200, 255, 3.0); + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (TRACE_LINE == TARG_ORG) + { + MISS_COUNT = 0; + DoDamage(m_hAttackTarget, "direct", DMG_MAIN_ZAP, 1.0, "lightning"); + ApplyEffect(m_hAttackTarget, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_MAIN_ZAP); + AddVelocity(m_hAttackTarget, /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 800, 110))); + NEXT_ATTACK = GetGameTime(); + NEXT_ATTACK += FREQ_ATTACK; + } + else + { + MISS_COUNT += 1; + if (MISS_COUNT > 2) + { + npc_stuck(); + MISS_COUNT = 2; + } + } + } + + void npc_stuck() + { + float RND_P = Random(-359.0, 359.0); + float RND_Y = Random(-359.0, 359.0); + float RND_R = Random(-359.0, 359.0); + SetVelocity(GetOwner(), /* TODO: $relpos */ $relpos(Vector3(RND_P, RND_Y, RND_Y), Vector3(0, 400, 0))); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (CL_SCRIPT_IDX != "CL_SCRIPT_IDX") + { + ClientEvent("update", "all", CL_SCRIPT_IDX, "shadow_death"); + } + } + + void add_minor_strike() + { + ARRAY_MINOR_STRIKE.insertLast(param1); + } + + void minor_strike() + { + string MINOR_STRIKE_TARG = ARRAY_MINOR_STRIKE[int(0)]; + ARRAY_MINOR_STRIKE.removeAt(0); + if (!(GetEntityRange(MINOR_STRIKE_TARG) < RANGE_MINOR_STRIKE)) return; + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ORG = GetEntityOrigin(MINOR_STRIKE_TARG); + string TRACE_LINE = TraceLine(MY_ORG, TARG_ORG); + int RND_ATCH = RandomInt(1, 3); + if (TRACE_LINE == TARG_ORG) + { + Effect("beam", "end", "lgtning.spr", 10, TRACE_LINE, GetOwner(), RND_ATCH, Vector3(128, 128, 255), 200, 255, 2.0); + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + DoDamage(MINOR_STRIKE_TARG, "direct", DMG_MINOR_STRIKE, 1.0, "lightning"); + ApplyEffect(MINOR_STRIKE_TARG, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_MINOR_ZAP); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(MINOR_STRIKE_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 300, 110))); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/shadow_form_boss.as b/scripts/angelscript/monsters/shadow_form_boss.as new file mode 100644 index 00000000..7cccc2e2 --- /dev/null +++ b/scripts/angelscript/monsters/shadow_form_boss.as @@ -0,0 +1,461 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class ShadowFormBoss : CGameScript +{ + int AM_VISIBLE; + string ANIM_DEATH; + string BEAM_FX_ID; + int BEAM_RANGE; + string BEAM_TARGET; + string CAGE_ACTIVE; + string CAGE_BEAM_ID; + int CAN_CAGE; + string CL_FX_ID; + int DMG_BEAM; + int DOT_CAGE; + int DOT_SHOCK; + int FADEOUT_STEP; + int FADE_STEP; + float FREQ_BEAM; + float FREQ_MANIFEST; + int IMMUNE_VAMPIRE; + string NEXT_BEAM; + string NEXT_CAGE; + string NEXT_MANIFEST; + string NEXT_MANIFEST_CHECK; + string NEXT_NME_SCAN; + string NPCATK_TARGET; + int NPC_GIVE_EXP; + int NPC_IS_BOSS; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_CAGE_LOOP; + string SOUND_DEATH; + string SOUND_IDLE_LOOP; + string SOUND_MANIFEST1; + string SOUND_MANIFEST2; + string SOUND_PAIN; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + string TOTAL_INVIS; + + ShadowFormBoss() + { + NPC_GIVE_EXP = 10000; + NPC_IS_BOSS = 1; + FREQ_MANIFEST = 15.0; + FREQ_BEAM = Random(3.0, 8.0); + DOT_SHOCK = 200; + DOT_CAGE = 100; + DMG_BEAM = 200; + BEAM_RANGE = 700; + SOUND_ZAP1 = "debris/zap1.wav"; + SOUND_ZAP2 = "debris/zap3.wav"; + SOUND_ZAP3 = "debris/zap8.wav"; + SOUND_ATTACK1 = "monsters/undeadz/c_shadow_atk1.wav"; + SOUND_ATTACK2 = "monsters/undeadz/c_shadow_atk2.wav"; + SOUND_ATTACK3 = "monsters/undeadz/c_shadow_atk3.wav"; + SOUND_MANIFEST1 = "monsters/undeadz/c_shadow_bat1.wav"; + SOUND_MANIFEST2 = "monsters/undeadz/c_shadow_bat2.wav"; + SOUND_PAIN = "monsters/undeadz/c_shadow_hit1.wav"; + SOUND_PAIN = "monsters/undeadz/c_shadow_hit2.wav"; + SOUND_PAIN = "monsters/undeadz/c_shadow_slct.wav"; + SOUND_CAGE_LOOP = "weapons/egon_run3.wav"; + SOUND_DEATH = "monsters/undeadz/c_shadow_dead.wav"; + SOUND_IDLE_LOOP = "magic/chant_loop.wav"; + ANIM_DEATH = "idle"; + } + + void game_precache() + { + Precache("monsters/shadow_form_boss_fx"); + Precache("monsters/shadowform_beams.mdl"); + Precache("shadowfog.spr"); + Precache("magic/bolt_start.wav"); + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Ancient Shadowform"); + SetName("shadowform_boss"); + SetModel("monsters/shadowform_eye.mdl"); + SetHealth(25000); + SetWidth(64); + SetHeight(64); + SetFly(true); + SetGravity(0); + SetNoPush(true); + SetMoveSpeed(0.0); + SetHearingSensitivity(11); + SetRace("undead"); + IMMUNE_VAMPIRE = 1; + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.2); + SetDamageResistance("fire", 0.2); + SetDamageResistance("acid", 0.2); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("slash", 0.5); + SetDamageResistance("blunt", 0.5); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("dark", 0.0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SetInvincible(true); + AM_VISIBLE = 0; + ScheduleDelayedEvent(0.1, "cl_fx_loop"); + ScheduleDelayedEvent(0.5, "setup_beams"); + NPCATK_TARGET = "unset"; + ScheduleDelayedEvent(1.0, "npcatk_hunt"); + } + + void OnPostSpawn() override + { + if (StringToLower(GetMapName()) == "bloodshrine") + { + CallExternal("all", "ext_shadowform_boss"); + } + } + + void setup_beams() + { + SpawnNPC("monsters/shadow_form_boss_fx", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); + BEAM_FX_ID = GetEntityIndex(m_hLastCreated); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((CAGE_ACTIVE)) return; + string HEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(HEARD_ID) == "enemy")) return; + if (m_hAttackTarget == "unset") + { + int ACQUIRE_TARGET = 1; + } + if (GetEntityRange(m_hAttackTarget) > GetEntityRange(HEARD_ID)) + { + int ACQUIRE_TARGET = 1; + } + if (!(ACQUIRE_TARGET)) return; + NPCATK_TARGET = HEARD_ID; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(0.1, "npcatk_hunt"); + float GAME_TIME = GetGameTime(); + if (!(AM_VISIBLE)) + { + if (GAME_TIME > NEXT_MANIFEST) + { + } + if (GAME_TIME > NEXT_MANIFEST_CHECK) + { + } + NEXT_MANIFEST_CHECK = GAME_TIME; + NEXT_MANIFEST_CHECK += 3.0; + string NME_DETECT = FindEntitiesInSphere("enemy", 384); + if (NME_DETECT != "none") + { + } + ScrambleTokens(NME_DETECT, ";"); + NPCATK_TARGET = GetToken(NME_DETECT, 0, ";"); + do_manifest(); + } + if (GAME_TIME > NEXT_BEAM) + { + NEXT_BEAM = GAME_TIME; + NEXT_BEAM += FREQ_BEAM; + string BEAM_TARGS = FindEntitiesInSphere("enemy", BEAM_RANGE); + if (BEAM_TARGS == "none") + { + NEXT_BEAM = GAME_TIME; + NEXT_BEAM += 1.0; + } + if (BEAM_TARGS != "none") + { + } + ScrambleTokens(BEAM_TARGS, ";"); + BEAM_TARGET = GetToken(BEAM_TARGS, 0, ";"); + ScheduleDelayedEvent(0.1, "do_beam"); + } + if (m_hAttackTarget == "unset") + { + if (GAME_TIME > NEXT_NME_SCAN) + { + } + NEXT_NME_SCAN = GAME_TIME; + NEXT_NME_SCAN += 1.0; + random_target(); + } + if ((AM_VISIBLE)) + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + if ((CAGE_ACTIVE)) return; + if ((TOTAL_INVIS)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(IsEntityAlive(m_hAttackTarget))) + { + NPCATK_TARGET = "unset"; + } + else + { + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string MY_ORG = GetEntityOrigin(GetOwner()); + string NEW_ANGS = /* TODO: $angles3d */ $angles3d(MY_ORG, TARG_ORG); + SetAngles("face"); + if ((CAN_CAGE)) + { + if (GAME_TIME > NEXT_CAGE) + { + } + NEXT_CAGE = GAME_TIME; + NEXT_CAGE += 1.0; + do_cage(); + } + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + NPCATK_TARGET = GetEntityIndex(m_hLastStruck); + } + + void cl_fx_loop() + { + if (!(IsEntityAlive(GetOwner()))) return; + // svplaysound: svplaysound 2 0 SOUND_IDLE_LOOP + EmitSound(2, 0, SOUND_IDLE_LOOP); + // svplaysound: svplaysound 2 10 SOUND_IDLE_LOOP + EmitSound(2, 10, SOUND_IDLE_LOOP); + if (CL_FX_ID != "CL_FX_ID") + { + ClientEvent("update", "all", CL_FX_ID, "remove_fx"); + } + ClientEvent("new", "all", "monsters/shadow_form_boss_cl", GetEntityIndex(GetOwner())); + CL_FX_ID = "game.script.last_sent_id"; + ScheduleDelayedEvent(30.0, "cl_fx_loop"); + } + + void ext_cl_fx_update() + { + if (CL_FX_ID != "CL_FX_ID") + { + ClientEvent("update", "all", CL_FX_ID, "remove_fx"); + } + ClientEvent("new", "all", "monsters/shadow_form_boss_cl", GetEntityIndex(GetOwner())); + } + + void OnDamage(int damage) override + { + if ((AM_VISIBLE)) + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + else + { + ClearFX(); + } + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void make_visible() + { + fade_in(); + AM_VISIBLE = 1; + SetInvincible(false); + ScheduleDelayedEvent(2.0, "enable_cage"); + ScheduleDelayedEvent(20.0, "make_invisible"); + } + + void enable_cage() + { + CAN_CAGE = 1; + } + + void make_invisible() + { + CAN_CAGE = 0; + AM_VISIBLE = 0; + NEXT_MANIFEST = GetGameTime(); + NEXT_MANIFEST += FREQ_MANIFEST; + fade_out(); + } + + void fade_in() + { + FADE_STEP = 0; + fade_in_loop(); + } + + void fade_in_loop() + { + if (!(FADE_STEP < 255)) return; + FADE_STEP += 5; + if (FADE_STEP == 255) + { + FADE_STEP = 255; + } + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", FADE_STEP); + ScheduleDelayedEvent(0.1, "fade_in_loop"); + } + + void fade_out() + { + FADEOUT_STEP = 255; + fade_out_loop(); + } + + void fade_out_loop() + { + if (!(FADEOUT_STEP > 0)) return; + FADEOUT_STEP -= 5; + if (FADEOUT_STEP <= 0) + { + FADEOUT_STEP = 0; + ClearFX(); + SetInvincible(true); + TOTAL_INVIS = 1; + } + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", FADEOUT_STEP); + ScheduleDelayedEvent(0.1, "fade_out_loop"); + } + + void do_manifest() + { + TOTAL_INVIS = 0; + NEXT_MANIFEST = GetGameTime(); + NEXT_MANIFEST += 999; + make_visible(); + } + + void do_beam() + { + string TRACE_START = GetEntityOrigin(GetOwner()); + float RND_ANG = Random(0, 359.99); + float RND_DIST = Random(64, 150); + TRACE_START += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, RND_DIST, 0)); + string TRACE_END = GetEntityOrigin(BEAM_TARGET); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (TRACE_LINE == TRACE_END) + { + int BEAM_TYPE = RandomInt(1, 2); + if (BEAM_TYPE == 1) + { + Vector3 BEAM_COLOR = Vector3(64, 128, 255); + string REND_PROPS = "1;1.0;255;add;(64,128,255);1;1"; + string DMG_TYPE = "lightning"; + } + else + { + Vector3 BEAM_COLOR = Vector3(255, 0, 0); + string REND_PROPS = "1;1.0;255;add;(255,0,0);1;1"; + string DMG_TYPE = "dark"; + } + Effect("beam", "point", "lgtning.spr", 60, TRACE_START, TRACE_END, BEAM_COLOR, 200, 10, 1.0); + ClientEvent("new", "all", "effects/sfx_sprite", TRACE_START, "3dmflaora.spr", REND_PROPS, 2.0); + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 3, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(BEAM_TARGET, "direct", DMG_BEAM, 1.0, GetOwner()); + if (BEAM_TYPE == 1) + { + ApplyEffect(BEAM_TARGET, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + } + else + { + NEXT_BEAM = GetGameTime(); + NEXT_BEAM += 1.0; + } + } + + void do_cage() + { + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = GetEntityOrigin(m_hAttackTarget); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (TRACE_LINE == TRACE_END) + { + CAN_CAGE = 0; + NEXT_CAGE = GetGameTime(); + NEXT_CAGE += 15.0; + // PlayRandomSound from: SOUND_MANIFEST1, SOUND_MANIFEST2 + array sounds = {SOUND_MANIFEST1, SOUND_MANIFEST2}; + EmitSound(GetOwner(), 3, sounds[RandomInt(0, sounds.length() - 1)], 10); + // svplaysound: svplaysound 4 10 SOUND_CAGE_LOOP + EmitSound(4, 10, SOUND_CAGE_LOOP); + Effect("beam", "ents", "lgtning.spr", 90, GetOwner(), 1, m_hAttackTarget, 1, Vector3(200, 255, 0), 255, 20, 15.0); + CAGE_BEAM_ID = GetEntityIndex(m_hLastCreated); + ApplyEffect(m_hAttackTarget, "effects/dot_lightning_cage", 15.0, GetEntityIndex(GetOwner())); + ApplyEffect(m_hAttackTarget, "effects/dot_lightning", 15.0, GetEntityIndex(GetOwner()), DOT_CAGE, "none"); + CAGE_ACTIVE = 1; + ScheduleDelayedEvent(15.0, "ext_end_cage"); + } + else + { + CAN_CAGE = 1; + random_target(); + } + } + + void random_target() + { + string NME_DETECT = FindEntitiesInSphere("enemy", 384); + if (!(NME_DETECT != "none")) return; + ScrambleTokens(NME_DETECT, ";"); + NPCATK_TARGET = GetToken(NME_DETECT, 0, ";"); + } + + void ext_end_cage() + { + if (!(CAGE_ACTIVE)) return; + CAGE_ACTIVE = 0; + // svplaysound: svplaysound 4 0 SOUND_CAGE_LOOP + EmitSound(4, 0, SOUND_CAGE_LOOP); + CAN_CAGE = 0; + Effect("beam", "update", CAGE_BEAM_ID, "brightness", 0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + LogDebug("game_death - enter"); + if (StringToLower(GetMapName()) == "bloodshrine") + { + CallExternal("all", "ext_boss_dead"); + } + if ((CAGE_ACTIVE)) + { + ext_end_cage(); + } + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + ClientEvent("update", "all", CL_FX_ID, "boss_died"); + CallExternal(BEAM_FX_ID, "remove_beams"); + // svplaysound: svplaysound 2 0 SOUND_IDLE_LOOP + EmitSound(2, 0, SOUND_IDLE_LOOP); + LogDebug("game_death - exit"); + } + +} + +} diff --git a/scripts/angelscript/monsters/shadow_form_boss_cl.as b/scripts/angelscript/monsters/shadow_form_boss_cl.as new file mode 100644 index 00000000..89e4742c --- /dev/null +++ b/scripts/angelscript/monsters/shadow_form_boss_cl.as @@ -0,0 +1,152 @@ +#pragma context server + +namespace MS +{ + +class ShadowFormBossCl : CGameScript +{ + int BOSS_DEAD; + string CUR_ROT; + int FX_ACTIVE; + string FX_OWNER; + int FX_RADIUS; + string OWNER_ORG; + float ROT_DIR; + float START_SCALE; + int V_ADJ; + + ShadowFormBossCl() + { + V_ADJ = 48; + } + + void client_activate() + { + FX_OWNER = param1; + FX_ACTIVE = 1; + ScheduleDelayedEvent(30.0, "end_fx"); + fx_loop(); + } + + void end_fx() + { + if ((BOSS_DEAD)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void end_fx_post_boss() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + OWNER_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + FX_RADIUS = 90; + START_SCALE = 1.0; + ROT_DIR = -0.1; + for (int i = 0; i < 18; i++) + { + make_smokes(); + } + FX_RADIUS = 180; + START_SCALE = 0.8; + ROT_DIR = 0.1; + for (int i = 0; i < 18; i++) + { + make_smokes(); + } + FX_RADIUS = 270; + START_SCALE = 0.6; + ROT_DIR = -0.1; + for (int i = 0; i < 18; i++) + { + make_smokes(); + } + } + + void make_smokes() + { + CUR_ROT = i; + CUR_ROT *= 20; + string SPR_POS = OWNER_ORG; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, CUR_ROT, 0), Vector3(0, FX_RADIUS, V_ADJ)); + ClientEffect("tempent", "sprite", "shadowfog.spr", SPR_POS, "setup_shadows1", "update_shadows1"); + } + + void boss_died() + { + BOSS_DEAD = 1; + ScheduleDelayedEvent(10.0, "end_fx_post_boss"); + } + + void update_shadows1() + { + if (!(FX_ACTIVE)) return; + if ((BOSS_DEAD)) + { + string SPR_VEL = /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, 0)); + string L_ROT = "game.tempent.fuser2"; + SPR_VEL += /* TODO: $relvel */ $relvel(Vector3(0, L_ROT, 0), Vector3(0, 100, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", SPR_VEL); + } + if ((BOSS_DEAD)) return; + if (RandomInt(1, 10) == 1) + { + string CUR_FRAME = "game.tempent.fuser1"; + CUR_FRAME += 1; + if (CUR_FRAME > 30) + { + int CUR_FRAME = 20; + } + ClientEffect("tempent", "set_current_prop", "frame", CUR_FRAME); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_FRAME); + } + string L_ROT = "game.tempent.fuser2"; + string L_DIR = "game.tempent.fuser3"; + string L_RAD = "game.tempent.fuser4"; + L_ROT += L_DIR; + if (L_ROT < 0) + { + float L_ROT = 359.99; + } + if (L_ROT > 359.99) + { + int L_ROT = 0; + } + string SPR_POS = OWNER_ORG; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_ROT, 0), Vector3(0, L_RAD, V_ADJ)); + ClientEffect("tempent", "set_current_prop", "origin", SPR_POS); + ClientEffect("tempent", "set_current_prop", "fuser2", L_ROT); + } + + void setup_shadows1() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 30.0); + ClientEffect("tempent", "set_current_prop", "framerate", 20); + ClientEffect("tempent", "set_current_prop", "frame", 20); + ClientEffect("tempent", "set_current_prop", "frames", 40); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", START_SCALE); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "update", 1); + ClientEffect("tempent", "set_current_prop", "fuser1", 20.0); + ClientEffect("tempent", "set_current_prop", "fuser2", CUR_ROT); + ClientEffect("tempent", "set_current_prop", "fuser3", ROT_DIR); + ClientEffect("tempent", "set_current_prop", "fuser4", FX_RADIUS); + } + +} + +} diff --git a/scripts/angelscript/monsters/shadow_form_boss_fx.as b/scripts/angelscript/monsters/shadow_form_boss_fx.as new file mode 100644 index 00000000..a8fa204d --- /dev/null +++ b/scripts/angelscript/monsters/shadow_form_boss_fx.as @@ -0,0 +1,38 @@ +#pragma context server + +namespace MS +{ + +class ShadowFormBossFx : CGameScript +{ + void OnRepeatTimer() + { + SetRepeatDelay(10.0); + PlayAnim("once", "rot"); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, GetOwner(), 2, Vector3(200, 0, 200), 100, 200, 10.0); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 3, Vector3(200, 0, 200), 100, 200, 10.0); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 3, GetOwner(), 4, Vector3(200, 0, 200), 100, 200, 10.0); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, GetOwner(), 1, Vector3(200, 0, 200), 100, 200, 10.0); + } + + void OnSpawn() override + { + SetNoPush(true); + SetInvincible(true); + SetFly(true); + SetGravity(0); + SetModel("monsters/shadowform_beams.mdl"); + SetIdleAnim("rot"); + SetMoveAnim("rot"); + SetSolid("none"); + PlayAnim("once", "rot"); + } + + void remove_beams() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/shadow_form_boss_fx_cl.as b/scripts/angelscript/monsters/shadow_form_boss_fx_cl.as new file mode 100644 index 00000000..2c0d343b --- /dev/null +++ b/scripts/angelscript/monsters/shadow_form_boss_fx_cl.as @@ -0,0 +1,85 @@ +#pragma context server + +namespace MS +{ + +class ShadowFormBossFxCl : CGameScript +{ + int FX_ACTIVE; + string FX_OWNER; + + void client_activate() + { + FX_OWNER = param1; + FX_ACTIVE = 1; + do_tracker_loop(); + do_smokes_loop(); + ScheduleDelayedEvent(30.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void do_smokes_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "do_smokes_loop"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + ClientEffect("tempent", "sprite", "shadowfog.spr", SPR_POS, "setup_shadows2", "update_shadows2"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + ClientEffect("tempent", "sprite", "shadowfog.spr", SPR_POS, "setup_shadows2", "update_shadows2"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment2"); + ClientEffect("tempent", "sprite", "shadowfog.spr", SPR_POS, "setup_shadows2", "update_shadows2"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment3"); + ClientEffect("tempent", "sprite", "shadowfog.spr", SPR_POS, "setup_shadows2", "update_shadows2"); + } + + void update_shadows2() + { + string CUR_FRAME = "game.tempent.fuser1"; + CUR_FRAME += 1; + if (CUR_FRAME > 30) + { + int CUR_FRAME = 20; + } + ClientEffect("tempent", "set_current_prop", "frame", CUR_FRAME); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_FRAME); + string CUR_SCALE = "game.tempent.fuser2"; + CUR_SCALE -= 0.01; + if (CUR_SCALE <= 0.01) + { + int CUR_SCALE = 0; + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + } + ClientEffect("tempent", "set_current_prop", "fuser2", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + + void setup_shadows2() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 20); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frame", 39); + ClientEffect("tempent", "set_current_prop", "frames", 40); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.4, 0.6)); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "update", 1); + ClientEffect("tempent", "set_current_prop", "fuser1", 20); + ClientEffect("tempent", "set_current_prop", "fuser2", 2.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/shadow_form_cl.as b/scripts/angelscript/monsters/shadow_form_cl.as new file mode 100644 index 00000000..b889bab8 --- /dev/null +++ b/scripts/angelscript/monsters/shadow_form_cl.as @@ -0,0 +1,148 @@ +#pragma context server + +namespace MS +{ + +class ShadowFormCl : CGameScript +{ + int DEATH_MODE; + int FX_ACTIVE; + string FX_DURATION; + int FX_HEIGHT; + string FX_OWNER; + int FX_WIDTH; + string NEG_FX_HEIGHT; + string NEG_FX_WIDTH; + float SHADOW_X_OFF; + float SHADOW_Y_OFF; + float SHADOW_Z_OFF; + + ShadowFormCl() + { + FX_WIDTH = 48; + FX_HEIGHT = 48; + } + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + NEG_FX_WIDTH = /* TODO: $neg */ $neg(FX_WIDTH); + NEG_FX_HEIGHT = /* TODO: $neg */ $neg(FX_HEIGHT); + do_shadows(); + FX_DURATION("end_fx"); + } + + void end_fx() + { + if ((DEATH_MODE)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void do_shadows() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "do_shadows"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SHADOW_X_OFF = Random(NEG_FX_WIDTH, FX_WIDTH); + SHADOW_Y_OFF = Random(NEG_FX_WIDTH, FX_WIDTH); + SHADOW_Z_OFF = Random(NEG_FX_HEIGHT, FX_HEIGHT); + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(SHADOW_X_OFF, SHADOW_Y_OFF, SHADOW_Z_OFF)); + ClientEffect("tempent", "sprite", "shadowfog.spr", SPR_POS, "setup_shadows", "update_shadows"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SHADOW_X_OFF = Random(NEG_FX_WIDTH, FX_WIDTH); + SHADOW_Y_OFF = Random(NEG_FX_WIDTH, FX_WIDTH); + SHADOW_Z_OFF = Random(NEG_FX_HEIGHT, FX_HEIGHT); + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(SHADOW_X_OFF, SHADOW_Y_OFF, SHADOW_Z_OFF)); + ClientEffect("tempent", "sprite", "shadowfog.spr", SPR_POS, "setup_shadows", "update_shadows"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SHADOW_X_OFF = Random(NEG_FX_WIDTH, FX_WIDTH); + SHADOW_Y_OFF = Random(NEG_FX_WIDTH, FX_WIDTH); + SHADOW_Z_OFF = Random(NEG_FX_HEIGHT, FX_HEIGHT); + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(SHADOW_X_OFF, SHADOW_Y_OFF, SHADOW_Z_OFF)); + ClientEffect("tempent", "sprite", "shadowfog.spr", SPR_POS, "setup_shadows", "update_shadows"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SHADOW_X_OFF = Random(NEG_FX_WIDTH, FX_WIDTH); + SHADOW_Y_OFF = Random(NEG_FX_WIDTH, FX_WIDTH); + SHADOW_Z_OFF = Random(NEG_FX_HEIGHT, FX_HEIGHT); + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(SHADOW_X_OFF, SHADOW_Y_OFF, SHADOW_Z_OFF)); + ClientEffect("tempent", "sprite", "shadowfog.spr", SPR_POS, "setup_shadows", "update_shadows"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SHADOW_X_OFF = Random(NEG_FX_WIDTH, FX_WIDTH); + SHADOW_Y_OFF = Random(NEG_FX_WIDTH, FX_WIDTH); + SHADOW_Z_OFF = Random(NEG_FX_HEIGHT, FX_HEIGHT); + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(SHADOW_X_OFF, SHADOW_Y_OFF, SHADOW_Z_OFF)); + SPR_POS += "z"; + ClientEffect("tempent", "sprite", "shadowfog.spr", SPR_POS, "setup_shadows", "update_shadows"); + } + + void update_shadows() + { + if (!(DEATH_MODE)) + { + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + SPR_POS += "z"; + string MY_X_OFF = "game.tempent.fuser1"; + string MY_Y_OFF = "game.tempent.fuser2"; + string MY_Z_OFF = "game.tempent.fuser3"; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(MY_X_OFF, MY_Y_OFF, MY_Z_OFF)); + ClientEffect("tempent", "set_current_prop", "origin", SPR_POS); + } + else + { + string CUR_SCALE = "game.tempent.fuser4"; + CUR_SCALE -= 0.2; + if (CUR_SCALE < 0) + { + float CUR_SCALE = 0.01; + ClientEffect("tempent", "set_current_prop", "framerate", 30); + } + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + string CUR_YAW = "game.tempent.fuser1"; + if (CUR_YAW != 999) + { + float CUR_YAW = Random(0, 359.0); + ClientEffect("tempent", "set_current_prop", "angles.yaw", CUR_YAW); + ClientEffect("tempent", "set_current_prop", "velocity.y", Random(-100, 100)); + ClientEffect("tempent", "set_current_prop", "fuser1", 999); + ClientEffect("tempent", "set_current_prop", "framerate", 5); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + } + } + } + + void shadow_death() + { + DEATH_MODE = 1; + FX_ACTIVE = 0; + ScheduleDelayedEvent(4.0, "remove_fx"); + } + + void setup_shadows() + { + float RND_SCALE = Random(0.4, 0.6); + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 40); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.4, 0.6)); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", SHADOW_X_OFF); + ClientEffect("tempent", "set_current_prop", "fuser2", SHADOW_Y_OFF); + ClientEffect("tempent", "set_current_prop", "fuser3", SHADOW_Z_OFF); + ClientEffect("tempent", "set_current_prop", "fuser4", RND_SCALE); + } + +} + +} diff --git a/scripts/angelscript/monsters/shambler1.as b/scripts/angelscript/monsters/shambler1.as new file mode 100644 index 00000000..474cf0be --- /dev/null +++ b/scripts/angelscript/monsters/shambler1.as @@ -0,0 +1,127 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Shambler1 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_CRUSH; + string ANIM_ATTACK_SLASH; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_HITCHANCE_CRUSH; + float ATTACK_HITCHANCE_SLASH; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string ATTACK_TYPE; + int CAN_FLEE; + int CAN_HUNT; + int CHANCE_STUN; + int DMG_CRUSH; + int DMG_SLASH; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int HUNT_AGRO; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + Shambler1() + { + HUNT_AGRO = 1; + ANIM_DEATH = "dieforward"; + ANIM_RUN = "walk"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack1"; + ANIM_ATTACK_SLASH = "attack1"; + ANIM_ATTACK_CRUSH = "attack2"; + DMG_SLASH = RandomInt(35, 90); + DMG_CRUSH = RandomInt(170, 300); + ATTACK_RANGE = 68; + ATTACK_HITRANGE = 140; + ATTACK_HITCHANCE_SLASH = 0.7; + ATTACK_HITCHANCE_CRUSH = 0.4; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "bullchicken/bc_pain1.wav"; + SOUND_PAIN = "bullchicken/bc_pain1.wav"; + SOUND_ATTACK1 = "ichy/ichy_bite1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_IDLE1 = "garg/gar_breathe3.wav"; + SOUND_DEATH = "bullchicken/bc_die3.wav"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 20; + DROP_GOLD_MAX = 70; + CHANCE_STUN = 20; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetHealth(2000); + SetWidth(32); + SetHeight(100); + SetName("Shambler"); + SetRoam(true); + SetBloodType("green"); + SetHearingSensitivity(6); + NPC_GIVE_EXP = 300; + SetRace("demon"); + SetModel("monsters/bogcreature.mdl"); + SetModelBody(0, 0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + } + + void attack_1() + { + ATTACK_TYPE = "slash"; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SLASH, ATTACK_HITCHANCE_SLASH, "slash"); + if (RandomInt(1, 4) == 3) + { + ANIM_ATTACK = ANIM_ATTACK_CRUSH; + } + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(0, 110, 105)); + EmitSound(GetOwner(), 2, SOUND_ATTACK1, 10); + } + + void attack_2() + { + ATTACK_TYPE = "crush"; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CRUSH, ATTACK_HITCHANCE_CRUSH, "blunt"); + ANIM_ATTACK = ANIM_ATTACK_SLASH; + EmitSound(GetOwner(), 2, SOUND_ATTACK2, 10); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 7); + } + + void game_dodamage() + { + if (!(ATTACK_TYPE == "crush")) return; + if (!(param1)) return; + if (!(RandomInt(1, 100) < CHANCE_STUN)) return; + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/monsters/shambler2.as b/scripts/angelscript/monsters/shambler2.as new file mode 100644 index 00000000..967d28c7 --- /dev/null +++ b/scripts/angelscript/monsters/shambler2.as @@ -0,0 +1,171 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Shambler2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_CRUSH; + string ANIM_ATTACK_SLASH; + string ANIM_DEATH; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_HITCHANCE_CRUSH; + float ATTACK_HITCHANCE_SLASH; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string ATTACK_TYPE; + int CAN_FLEE; + int CAN_HUNT; + int CHANCE_STUN; + int DMG_CRUSH; + int DMG_SLASH; + int GOLD_BAGS; + int GOLD_BAGS_PPLAYER; + int GOLD_MAX_BAGS; + int GOLD_PER_BAG; + int GOLD_RADIUS; + int HUNT_AGRO; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STEP3; + string SOUND_STEP4; + string SOUND_STEP5; + string SOUND_STEP6; + string SOUND_STEP7; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + Shambler2() + { + HUNT_AGRO = 1; + ANIM_DEATH = "diebackward"; + ANIM_RUN = "walk"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack1"; + ANIM_ATTACK_SLASH = "attack1"; + ANIM_ATTACK_CRUSH = "attack2"; + DMG_SLASH = RandomInt(50, 100); + DMG_CRUSH = RandomInt(170, 400); + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 220; + ATTACK_HITCHANCE_SLASH = 0.7; + ATTACK_HITCHANCE_CRUSH = 0.4; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "agrunt/ag_attack1.wav"; + SOUND_PAIN = "agrunt/ag_attack3.wav"; + SOUND_ATTACK1 = "ichy/ichy_bite1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_IDLE1 = "garg/gar_breathe3.wav"; + SOUND_DEATH = "bullchicken/bc_die3.wav"; + CAN_HUNT = 1; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + SOUND_STEP1 = "debris/flesh1.wav"; + SOUND_STEP2 = "debris/flesh2.wav"; + SOUND_STEP3 = "debris/flesh3.wav"; + SOUND_STEP4 = "debris/flesh7.wav"; + SOUND_STEP5 = "debris/flesh5.wav"; + SOUND_STEP6 = "debris/flesh6.wav"; + SOUND_STEP7 = "debris/flesh7.wav"; + GOLD_BAGS = 1; + GOLD_BAGS_PPLAYER = 2; + GOLD_PER_BAG = 25; + GOLD_RADIUS = 64; + GOLD_MAX_BAGS = 32; + CHANCE_STUN = 50; + Precache(SOUND_DEATH); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(5, 8)); + EmitSound(GetOwner(), 0, SOUND_IDLE1, 10); + if (!(CYCLED_UP)) + { + } + PlayAnim("once", "llflinch"); + } + + void OnSpawn() override + { + SetHealth(4000); + SetWidth(50); + SetHeight(150); + SetName("Greater Shambler"); + SetRoam(true); + SetBloodType("green"); + SetHearingSensitivity(6); + NPC_GIVE_EXP = 200; + SetRace("demon"); + SetModel("monsters/shambler.mdl"); + SetModelBody(0, 0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetAnimFrameRate(0.75); + SetAnimMoveSpeed(0.75); + } + + void attack_1() + { + ATTACK_TYPE = "slash"; + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", DMG_SLASH, ATTACK_HITCHANCE_SLASH, GetEntityIndex(GetOwner()), "slash"); + } + if (RandomInt(1, 4) == 3) + { + ANIM_ATTACK = ANIM_ATTACK_CRUSH; + } + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(0, 35, 70)); + EmitSound(GetOwner(), 2, SOUND_ATTACK1, 10); + } + + void attack_2() + { + ATTACK_TYPE = "crush"; + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", DMG_CRUSH, ATTACK_HITCHANCE_CRUSH, GetEntityIndex(GetOwner()), "blunt"); + } + ANIM_ATTACK = ANIM_ATTACK_SLASH; + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(0, 300, 200)); + EmitSound(GetOwner(), 2, SOUND_ATTACK2, 10); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if (!(ATTACK_TYPE == "crush")) return; + if (!(param1)) return; + if (!(RandomInt(1, 100) < CHANCE_STUN)) return; + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + + void walk_step() + { + // PlayRandomSound from: SOUND_STEP1, SOUND_STEP2, SOUND_STEP3, SOUND_STEP4, SOUND_STEP5, SOUND_STEP6, SOUND_STEP7 + array sounds = {SOUND_STEP1, SOUND_STEP2, SOUND_STEP3, SOUND_STEP4, SOUND_STEP5, SOUND_STEP6, SOUND_STEP7}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton.as b/scripts/angelscript/monsters/skeleton.as new file mode 100644 index 00000000..3783b60f --- /dev/null +++ b/scripts/angelscript/monsters/skeleton.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Skeleton : CGameScript +{ + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + int SLEEPER; + + Skeleton() + { + SKEL_HP = 40; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 0.9; + ATTACK_DAMAGE_HIGH = 2.7; + NPC_GIVE_EXP = 16; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 1; + DROP_GOLD_MAX = 3; + SKEL_RESPAWN_CHANCE = 0.75; + SKEL_RESPAWN_LIVES = 3; + } + + void OnSpawn() override + { + string L_MAP_NAME = GetMapName(); + if (!(L_MAP_NAME == "thornlands")) return; + SLEEPER = 1; + } + + void skeleton_spawn() + { + SetName("Skeleton Warrior"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + SetBloodType("none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton2.as b/scripts/angelscript/monsters/skeleton2.as new file mode 100644 index 00000000..a96b29cc --- /dev/null +++ b/scripts/angelscript/monsters/skeleton2.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Skeleton2 : CGameScript +{ + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + Skeleton2() + { + SKEL_HP = 70; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 0.9; + ATTACK_DAMAGE_HIGH = 2.7; + NPC_GIVE_EXP = 26; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 3; + DROP_GOLD_MAX = 7; + SKEL_RESPAWN_CHANCE = 0.8; + SKEL_RESPAWN_LIVES = 3; + } + + void skeleton_spawn() + { + SetName("Walking Ashes"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton2_once.as b/scripts/angelscript/monsters/skeleton2_once.as new file mode 100644 index 00000000..38b81ea7 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton2_once.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Skeleton2Once : CGameScript +{ + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + + Skeleton2Once() + { + SKEL_HP = 70; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 0.9; + ATTACK_DAMAGE_HIGH = 2.7; + NPC_GIVE_EXP = 26; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 3; + DROP_GOLD_MAX = 7; + } + + void skeleton_spawn() + { + SetName("Walking Ashes"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer1.as b/scripts/angelscript/monsters/skeleton_archer1.as new file mode 100644 index 00000000..60fd4d8f --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer1.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcher1 : CGameScript +{ + int C_SKELE_PUSH_STRENGTH; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcher1() + { + NPC_GIVE_EXP = 24; + DMG_ARROW = 5; + DMG_SWIPE = 3; + SKELE_START_LIVES = RandomInt(1, 4); + SKELE_GOLD = RandomInt(1, 10); + C_SKELE_PUSH_STRENGTH = 0; + } + + void skele_spawn() + { + SetName("Skeletal Archer"); + SetHealth(80); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 0); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer2.as b/scripts/angelscript/monsters/skeleton_archer2.as new file mode 100644 index 00000000..dc3cfc9b --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer2.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcher2 : CGameScript +{ + int C_SKELE_PUSH_STRENGTH; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcher2() + { + NPC_GIVE_EXP = 200; + DMG_ARROW = 75; + DMG_SWIPE = 30; + SKELE_GOLD = 25; + SKELE_START_LIVES = RandomInt(1, 2); + C_SKELE_PUSH_STRENGTH = 100; + } + + void skele_spawn() + { + SetName("Elite Skeletal Archer"); + SetHealth(600); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 1); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer3.as b/scripts/angelscript/monsters/skeleton_archer3.as new file mode 100644 index 00000000..7d46ca54 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer3.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcher3 : CGameScript +{ + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + string SKELE_ARROW_SCRIPT; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcher3() + { + NPC_GIVE_EXP = 400; + DMG_ARROW = 200; + DMG_SWIPE = 30; + C_SKELE_PUSH_STRENGTH = 400; + SKELE_GOLD = 50; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_jagged"; + SKELE_DROPS_CONTAINER_CHANCE = 0.3; + SKELE_START_LIVES = 1; + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 200; + } + + void skele_spawn() + { + SetName("Guardian Archer"); + SetHealth(1000); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("stun", 0.5); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 10); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_base.as b/scripts/angelscript/monsters/skeleton_archer_base.as new file mode 100644 index 00000000..529157ea --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_base.as @@ -0,0 +1,766 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SkeletonArcherBase : CGameScript +{ + int AM_SKELETON; + int AM_TURRET; + string ANIM_ARROW; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH_IDLE; + string ANIM_IDLE; + string ANIM_REBIRTH; + string ANIM_RUN; + string ANIM_SIT_IDLE; + string ANIM_SIT_STAND; + string ANIM_SWIPE; + string ANIM_WALK; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float BASE_MOVESPEED; + int CUSTOM_TURN_UNDEAD; + int C_SKELE_PUSH_STRENGTH; + int DMG_ARROW; + int DMG_SWIPE; + int DROP_GOLD; + string DROP_GOLD_AMT; + int MIDX_HIDE_ARROW; + int MIDX_SHOW_ARROW; + int NO_STUCK_CHECKS; + int NPC_IS_TURRET; + string NPC_PREV_TARGET; + int NPC_PROXACT_CONE; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_FOV; + int NPC_PROXACT_IFSEEN; + int NPC_PROXACT_PLAYERID; + int NPC_PROXACT_RANGE; + int NPC_PROXACT_TRIPPED; + int NPC_PROX_ACTIVATE; + int NPC_RANGED; + int PLAYING_DEAD; + string SKELE_ARROW_KNOCKBACK; + int SKELE_ARROW_NOPUSHIE; + string SKELE_ARROW_OFS; + int SKELE_ARROW_RANGE; + string SKELE_ARROW_SCRIPT; + int SKELE_ARROW_SPEED; + int SKELE_BASE_ROAM; + string SKELE_CANT_GET_UP; + int SKELE_COF_A; + int SKELE_COF_B; + string SKELE_DEFAULT_ANIM_IDLE; + string SKELE_DEFAULT_ANIM_RUN; + string SKELE_DEFAULT_ANIM_WALK; + string SKELE_FIRST_RAISE; + int SKELE_HEARING; + string SKELE_LIVES; + int SKELE_MISS_COUNT; + string SKELE_ORG_NAME; + int SKELE_PUNCH_NOPUSHIE; + string SKELE_PUSH_STRENGTH; + string SKELE_REALLY_CANT_GET_UP; + string SKELE_REBIRTH_SCAN; + int SKELE_START_LIVES; + int SKELE_STRUCK_BY_TURN_UNDEAD; + string SKELE_TARGET_LIST; + int SKELE_TURN_UNDEAD_SOUND; + string SOUND_DEATH; + string SOUND_HOLY_STRIKE; + string SOUND_SHOOT; + string SOUND_STRETCH; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWIPE; + string SOUND_TURNED1; + string SOUND_TURNED2; + string SOUND_TURNED3; + string SOUND_TURNED4; + int SWIPE_HITRANGE; + int SWIPE_RANGE; + + SkeletonArcherBase() + { + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_ATTACK = "shootarrow"; + ANIM_DEATH = "dieforward"; + ANIM_ARROW = "shootarrow"; + ANIM_SWIPE = "attack1"; + ANIM_DEATH_IDLE = "dead_on_stomach"; + ANIM_REBIRTH = "getup"; + ANIM_SIT_IDLE = "sitidle"; + ANIM_SIT_STAND = "sitstand"; + NPC_RANGED = 1; + ATTACK_MOVERANGE = 512; + ATTACK_RANGE = 1024; + ATTACK_HITRANGE = 1024; + DROP_GOLD = 1; + AM_SKELETON = 1; + CUSTOM_TURN_UNDEAD = 1; + SKELE_ARROW_OFS = Vector3(10, 32, 68); + DMG_ARROW = 5; + DMG_SWIPE = 3; + SWIPE_RANGE = 70; + SWIPE_HITRANGE = 120; + SKELE_ARROW_RANGE = 1024; + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + SKELE_ARROW_SPEED = 800; + ATTACK_HITCHANCE = 0.7; + SKELE_START_LIVES = RandomInt(1, 4); + C_SKELE_PUSH_STRENGTH = 200; + SKELE_HEARING = 10; + SKELE_COF_A = 0; + SKELE_COF_B = 1; + MIDX_SHOW_ARROW = 11; + MIDX_HIDE_ARROW = 10; + SOUND_STRETCH = "monsters/archer/stretch.wav"; + SOUND_SHOOT = "monsters/archer/bow.wav"; + SOUND_SWIPE = "zombie/claw_miss1.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_DEATH = "zombie/zo_pain1.wav"; + SOUND_TURNED1 = "ambience/the_horror1.wav"; + SOUND_TURNED2 = "ambience/the_horror2.wav"; + SOUND_TURNED3 = "ambience/the_horror3.wav"; + SOUND_TURNED4 = "ambience/the_horror4.wav"; + SOUND_HOLY_STRIKE = "doors/aliendoor1.wav"; + SKELE_ARROW_KNOCKBACK = C_SKELE_ARROW_KNOCKBACK; + SKELE_PUSH_STRENGTH = C_SKELE_PUSH_STRENGTH; + } + + void OnSpawn() override + { + SetModel("monsters/skeleton_boss1.mdl"); + skeleton_attribs(); + skele_spawn(); + SetRoam(true); + SetHearingSensitivity(SKELE_HEARING); + SetBloodType("none"); + SetRace("undead"); + SKELE_MISS_COUNT = 0; + SKELE_LIVES = SKELE_START_LIVES; + SKELE_DEFAULT_ANIM_WALK = ANIM_WALK; + SKELE_DEFAULT_ANIM_RUN = ANIM_RUN; + SKELE_DEFAULT_ANIM_IDLE = ANIM_IDLE; + DROP_GOLD_AMT = SKELE_GOLD; + SKELE_BASE_ROAM = 1; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + string SLEEPER_TYPE = FindEntityByName("skels_sleep"); + string SLEEPER_ID = GetEntityIndex(SLEEPER_TYPE); + if ((IsEntityAlive(SLEEPER_ID))) + { + make_sleeper(); + } + string SLEEPER_TYPE = FindEntityByName("skels_deep_sleep"); + string SLEEPER_ID = GetEntityIndex(SLEEPER_TYPE); + if ((IsEntityAlive(SLEEPER_ID))) + { + make_deep_sleeper(); + } + } + + void skeleton_attribs() + { + if (!(STONE_SKELETON)) + { + SetDamageResistance("slash", 0.7); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("blunt", 1.2); + SetDamageResistance("fire", 1.25); + SetDamageResistance("holy", 1.5); + SetDamageResistance("cold", 0.1); + SetDamageResistance("poison", 0.0); + } + else + { + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.1); + } + } + + void npc_selectattack() + { + if (GetEntityRange(m_hAttackTarget) < SWIPE_RANGE) + { + ANIM_ATTACK = ANIM_SWIPE; + } + else + { + ANIM_ATTACK = ANIM_ARROW; + } + } + + void attack_1() + { + // PlayRandomSound from: SOUND_SWIPE + array sounds = {SOUND_SWIPE}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + DoDamage(m_hAttackTarget, SWIPE_HITRANGE, DMG_SWIPE, ATTACK_HITCHANCE, "slash"); + if (!(SKELE_PUSH_STRENGTH > 0)) return; + if ((SKELE_PUNCH_NOPUSHIE)) return; + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, SKELE_PUSH_STRENGTH, 110)); + } + + void frame_grab_arrow() + { + SetModelBody(1, MIDX_SHOW_ARROW); + } + + void frame_draw_bow() + { + EmitSound(GetOwner(), 0, SOUND_STRETCH, 10); + } + + void frame_shoot_bow() + { + EmitSound(GetOwner(), 2, SOUND_SHOOT, 10); + SetModelBody(1, MIDX_HIDE_ARROW); + SKELE_MISS_COUNT += 1; + if (!(SKELE_ARROW_ARC)) + { + string L_POS = GetEntityOrigin(GetOwner()); + L_POS += /* TODO: $relpos */ $relpos(GetEntityAngles(GetOwner()), SKELE_ARROW_OFS); + TossProjectile(SKELE_ARROW_SCRIPT, L_POS, m_hAttackTarget, SKELE_ARROW_SPEED, DMG_ARROW, SKELE_COF_A, "none"); + CallExternal("ent_lastprojectile", "ext_lighten", 0, SKELE_ARROW_GLOW, SKELE_ARROW_GLOW_COLOR); + } + else + { + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (SKELE_ARROW_AOE > 0) + { + string HALF_AOE = SKELE_ARROW_AOE; + HALF_AOE /= 2; + TARG_ORG += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359.99), 0), Vector3(0, HALF_AOE, 0)); + } + if (!(IsValidPlayer(TARG_ORG))) + { + TARG_ORG += "z"; + } + float TARG_DIST = Distance(TARG_ORG, GetMonsterProperty("origin")); + TARG_DIST /= 25; + SetAngles("add_view.pitch"); + string L_POS = GetEntityOrigin(GetOwner()); + L_POS += /* TODO: $relpos */ $relpos(GetEntityAngles(GetOwner()), SKELE_ARROW_OFS); + TossProjectile(SKELE_ARROW_SCRIPT, L_POS, "none", SKELE_ARROW_SPEED, DMG_ARROW, SKELE_COF_B, "none"); + float GRAV_ADJ = 0.4; + CallExternal("ent_lastprojectile", "ext_lighten", GRAV_ADJ, SKELE_ARROW_GLOW, SKELE_ARROW_GLOW_COLOR); + } + if (SKELE_MISS_COUNT > 4) + { + if (!(AM_TURRET)) + { + SKELE_MISS_COUNT = 2; + PlayAnim("once", "break"); + chicken_run(1.5); + } + else + { + SKELE_COF_A += 1; + SKELE_COF_B += 2; + } + } + } + + void game_dodamage() + { + if ((IsEntityAlive(param2))) + { + if (GetRelationship(param2) == "enemy") + { + } + SKELE_MISS_COUNT = 0; + if ((AM_TURRET)) + { + } + SKELE_COF_A = 0; + SKELE_COF_B = 1; + } + } + + void ext_arrow_hit() + { + string TARG_ALIVE = IsEntityAlive(param2); + if (GetRelationship(param2) == "enemy") + { + if ((TARG_ALIVE)) + { + } + int HIT_ENEMY = 1; + } + if (SKELE_ARROW_KNOCKBACK > 0) + { + if (!(SKELE_ARROW_NOPUSHIE)) + { + } + if ((HIT_ENEMY)) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, SKELE_ARROW_KNOCKBACK, 110)); + } + if (SKELE_ARROW_EFFECT != "SKELE_ARROW_EFFECT") + { + if ((HIT_ENEMY)) + { + } + if ((param1)) + { + } + if (!(SKELE_ARROW_EFFECT_HANDLED)) + { + ApplyEffect(param2, SKELE_ARROW_EFFECT, SKELE_DOT_DUR, GetEntityIndex(GetOwner()), SKELE_DOT_DMG); + } + else + { + string OUT_TARG = param2; + skele_handle_effect(OUT_TARG); + } + } + if (SKELE_ARROW_AOE > 0) + { + string ARROW_POS = param3; + if ((HIT_ENEMY)) + { + string ARROW_POS = GetEntityOrigin(param2); + } + ARROW_POS = "z"; + skele_arrow_fx(ARROW_POS); + SKELE_TARGET_LIST = FindEntitiesInSphere("enemy", SKELE_ARROW_AOE); + if (SKELE_TARGET_LIST != "none") + { + } + for (int i = 0; i < GetTokenCount(SKELE_TARGET_LIST, ";"); i++) + { + skele_affect_targets(); + } + } + } + + void skele_affect_targets() + { + string CUR_TARG = GetToken(SKELE_TARGET_LIST, i, ";"); + ApplyEffect(CUR_TARG, SKELE_ARROW_EFFECT, SKELE_DOT_DUR, GetEntityIndex(GetOwner()), SKELE_DOT_DMG); + SKELE_MISS_COUNT = 0; + } + + void set_turret() + { + SetMoveSpeed(0.0); + BASE_MOVESPEED = 0.0; + SetMoveAnim(ANIM_IDLE); + SetRoam(false); + SKELE_BASE_ROAM = 0; + NO_STUCK_CHECKS = 1; + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + SKELE_DEFAULT_ANIM_WALK = ANIM_IDLE; + SKELE_DEFAULT_ANIM_RUN = ANIM_IDLE; + AM_TURRET = 1; + NPC_IS_TURRET = 1; + ScheduleDelayedEvent(0.1, "set_turret2"); + } + + void set_turret2() + { + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + SetMoveAnim(ANIM_IDLE); + } + + void set_no_fake_death() + { + SKELE_LIVES = 1; + } + + void set_rebirths() + { + SKELE_LIVES = param1; + SKELE_LIVES += 1; + } + + void skeleton_wakeup_call() + { + skeleton_wake_up(); + } + + void make_sleeper() + { + SetHearingSensitivity(0); + SetRoam(false); + SetInvincible(true); + SetMoveDest("none"); + npcatk_suspend_ai(); + NPC_PROXACT_TRIPPED = 0; + NPC_PROXACT_IFSEEN = 0; + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 128; + NPC_PROXACT_EVENT = "skeleton_wake_up"; + NPC_PROXACT_FOV = 0; + PLAYING_DEAD = 1; + if (!(STONE_SKELETON)) + { + SetSolid("none"); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + SetIdleAnim(ANIM_DEATH_IDLE); + SetMoveAnim(ANIM_DEATH_IDLE); + PlayAnim("critical", ANIM_DEATH_IDLE); + } + else + { + skele_stone_sleep(); + } + } + + void make_sitter() + { + SetHearingSensitivity(0); + SetRoam(false); + SetMoveDest("none"); + NPC_PROXACT_TRIPPED = 0; + NPC_PROXACT_IFSEEN = 0; + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 128; + NPC_PROXACT_EVENT = "skeleton_sit_up"; + NPC_PROXACT_FOV = 1; + NPC_PROXACT_CONE = 90; + SetIdleAnim(ANIM_SIT_IDLE); + SetMoveAnim(ANIM_SIT_IDLE); + PlayAnim("critical", ANIM_SIT_IDLE); + npcatk_suspend_ai(); + } + + void skeleton_sit_up() + { + NPC_PROXACT_TRIPPED = 1; + PlayAnim("critical", ANIM_SIT_STAND); + SetHearingSensitivity(SKELE_HEARING); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + SetRoam(SKELE_BASE_ROAM); + AS_ATTACKING = GetGameTime(); + if (!(IsEntityAlive(NPC_PROXACT_PLAYERID))) return; + ScheduleDelayedEvent(1.1, "skele_target_disturber"); + } + + void skele_target_disturber() + { + if (!(IsEntityAlive(NPC_PROXACT_PLAYERID))) return; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + npcatk_settarget(NPC_PROXACT_PLAYERID); + NPC_PROXACT_PLAYERID = 0; + } + + void skeleton_wake_up() + { + if (!(STONE_SKELETON)) + { + SKELE_FIRST_RAISE = 1; + skele_rebirth(); + } + else + { + SetHearingSensitivity(SKELE_HEARING); + ANIM_RUN = SKELE_DEFAULT_ANIM_RUN; + ANIM_WALK = SKELE_DEFAULT_ANIM_WALK; + ANIM_IDLE = SKELE_DEFAULT_ANIM_IDLE; + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_WALK); + SetInvincible(false); + PLAYING_DEAD = 0; + if (BASE_FRAMERATE == "BASE_FRAMERATE") + { + SetAnimFrameRate(1.0); + } + else + { + SetAnimFrameRate(BASE_FRAMERATE); + } + SetRoam(SKELE_BASE_ROAM); + npcatk_resume_ai(); + skele_refresh_name(); + LogDebug("Stone Skeleton Awaken GetEntityName(NPC_PROXACT_PLAYERID)"); + if ((IsEntityAlive(NPC_PROXACT_PLAYERID))) + { + } + ScheduleDelayedEvent(1.1, "skele_target_disturber"); + } + } + + void skele_hide_name() + { + SKELE_ORG_NAME = GetMonsterProperty("name.full"); + SetRace("none"); + SetName(""); + } + + void skele_refresh_name() + { + if (SKELE_ORG_NAME != "SKELE_ORG_NAME") + { + SetName(SKELE_ORG_NAME); + SetRace("undead"); + } + } + + void make_deep_sleeper() + { + if (!(STONE_SKELETON)) + { + SetHearingSensitivity(0); + SetRoam(false); + PLAYING_DEAD = 1; + SetSolid("none"); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + SetMoveDest("none"); + SKELE_FIRST_RAISE = 1; + SetIdleAnim(ANIM_DEATH_IDLE); + SetMoveAnim(ANIM_DEATH_IDLE); + PlayAnim("critical", ANIM_DEATH_IDLE); + npcatk_suspend_ai(); + } + else + { + skele_stone_sleep(); + } + SetInvincible(true); + } + + void skele_stone_sleep() + { + SetHearingSensitivity(0); + PLAYING_DEAD = 1; + skele_hide_name(); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + SetAnimFrameRate(0); + SetInvincible(true); + SetRoam(false); + npcatk_suspend_ai(); + PlayAnim("hold", ANIM_IDLE); + SetMoveDest("none"); + } + + void turn_undead() + { + if (!(IsEntityAlive(GetOwner()))) return; + if ((PLAYING_DEAD)) return; + SKELE_LIVES = 0; + SKELE_STRUCK_BY_TURN_UNDEAD = 1; + SKELE_TURN_UNDEAD_SOUND = 1; + string DMG_HOLY = param1; + string CASTER_ID = param2; + string CASTER_FAITH = GetSkillLevel(CASTER_ID, "spellcasting.divination"); + XDoDamage(GetEntityIndex(GetOwner()), "direct", DMG_HOLY, 100, CASTER_ID, CASTER_ID, "spellcasting.divination", "holy"); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 512, 1, 1); + string PERCENT_HEALTH_LEFT = GetEntityHealth(GetOwner()); + PERCENT_HEALTH_LEFT /= GetEntityMaxHealth(GetOwner()); + PERCENT_HEALTH_LEFT *= 100; + if (!(CASTER_FAITH > PERCENT_HEALTH_LEFT)) return; + if ((IS_FLEEING)) return; + string TURN_DURATION = GetSkillLevel(THE_EXCORCIST, "spellcasting.divination"); + if (TURN_DURATION < 5) + { + int TURN_DURATION = 5; + } + if (TURN_DURATION > 15) + { + int TURN_DURATION = 15; + } + // PlayRandomSound from: SOUND_TURNED1, SOUND_TURNED2, SOUND_TURNED3, SOUND_TURNED4 + array sounds = {SOUND_TURNED1, SOUND_TURNED2, SOUND_TURNED3, SOUND_TURNED4}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + npcatk_flee(CASTER_ID, 1024, TURN_DURATION); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((SKELE_TURN_UNDEAD_SOUND)) + { + SKELE_TURN_UNDEAD_SOUND = 0; + // PlayRandomSound from: SOUND_HOLY_STRIKE + array sounds = {SOUND_HOLY_STRIKE}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (SKELE_LIVES <= 1) + { + if ((SKELE_DROPS_CONTAINER)) + { + } + if (RandomInt(1, 100) <= SKELE_DROPS_CONTAINER_CHANCE) + { + } + SpawnNPC(SKELE_CONTAINER_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: CONTAINER_PARAM1, CONTAINER_PARAM2, CONTAINER_PARAM3, CONTAINER_PARAM4 + } + if ((SKELE_STRUCK_BY_TURN_UNDEAD)) return; + if (!(SKELE_LIVES > 1)) return; + SetRace("undead"); + SKELE_LIVES -= 1; + PLAYING_DEAD = 1; + SetHearingSensitivity(0); + SetSolid("none"); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + SetInvincible(true); + SetMoveDest("none"); + ANIM_RUN = ANIM_DEATH_IDLE; + ANIM_WALK = ANIM_DEATH_IDLE; + ANIM_IDLE = ANIM_DEATH_IDLE; + SetIdleAnim(ANIM_DEATH_IDLE); + SetMoveAnim(ANIM_DEATH_IDLE); + SetAlive(1); + npcatk_suspend_ai(); + SetRoam(false); + RandomInt(5, 15)("skele_rebirth_check"); + } + + void skele_rebirth_check() + { + SKELE_REBIRTH_SCAN = FindEntitiesInSphere("any", 96); + if (SKELE_REBIRTH_SCAN != "none") + { + SKELE_CANT_GET_UP = 1; + SKELE_REALLY_CANT_GET_UP = 0; + for (int i = 0; i < GetTokenCount(MUMMY_REBIRTH_SCAN, ";"); i++) + { + skele_rebirth_scan_loop(); + } + if ((MUMMY_REALLY_CANT_GET_UP)) + { + SKELE_CANT_GET_UP = 1; + } + } + if (SKELE_REBIRTH_SCAN == "none") + { + SKELE_CANT_GET_UP = 0; + } + if ((SKELE_CANT_GET_UP)) + { + ScheduleDelayedEvent(1.0, "skele_rebirth_check"); + } + else + { + skele_rebirth(); + } + } + + void skele_rebirth_scan_loop() + { + string CUR_TARG = GetToken(SKELE_REBIRTH_SCAN, i, ";"); + if ((GetEntityProperty(CUR_TARG, "itemname")).findFirst("skeleton_archer") >= 0) + { + if ((GetEntityProperty(CUR_TARG, "scriptvar"))) + { + if (GetGameTime() > G_SKELE_NEXT_REBIRTH) + { + } + SetGlobalVar("G_SKELE_NEXT_REBIRTH", GetGameTime()); + G_SKELE_NEXT_REBIRTH += 5.0; + SKELE_CANT_GET_UP = 0; + LogDebug("can get up game.time vs. G_SKELE_NEXT_REBIRTH"); + } + else + { + SKELE_CANT_GET_UP = 1; + SKELE_REALLY_CANT_GET_UP = 1; + LogDebug("can t get up - friend not playing dead"); + } + } + else + { + SKELE_CANT_GET_UP = 1; + SKELE_REALLY_CANT_GET_UP = 1; + LogDebug("can t get up - non-skelearcher nearby"); + } + } + + void skele_rebirth() + { + SetSolid("box"); + SetHealth(GetEntityMaxHealth(GetOwner())); + if (!(SKELE_FIRST_RAISE)) + { + NPC_GIVE_EXP /= 2; + SetSkillLevel(NPC_GIVE_EXP); + } + SKELE_FIRST_RAISE = 0; + SetHearingSensitivity(SKELE_HEARING); + PLAYING_DEAD = 0; + ScheduleDelayedEvent(1.0, "skele_rebirth2"); + } + + void skele_rebirth2() + { + SetInvincible(false); + ANIM_RUN = SKELE_DEFAULT_ANIM_RUN; + ANIM_WALK = SKELE_DEFAULT_ANIM_WALK; + ANIM_IDLE = SKELE_DEFAULT_ANIM_IDLE; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("critical", ANIM_REBIRTH); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + ScheduleDelayedEvent(1.1, "skele_rebirth3"); + } + + void skele_rebirth3() + { + SetRoam(SKELE_BASE_ROAM); + NPC_PREV_TARGET = "unset"; + skele_target_disturber(); + } + + void ext_setmodelbody() + { + SetModelBody(param1, param2); + } + + void set_pushamt() + { + SKELE_ARROW_KNOCKBACK = param1; + SKELE_PUSH_STRENGTH = param1; + LogDebug("set_pushamt PARAM1 [ SKELE_ARROW_KNOCKBACK SKELE_PUSH_STRENGTH ]"); + } + + void set_np() + { + SKELE_ARROW_KNOCKBACK = -1; + SKELE_PUSH_STRENGTH = -1; + LogDebug("set_np SKELE_ARROW_KNOCKBACK SKELE_PUSH_STRENGTH"); + SKELE_ARROW_NOPUSHIE = 1; + SKELE_PUNCH_NOPUSHIE = 1; + } + + void dbg_kb() + { + LogDebug("set_np SKELE_ARROW_KNOCKBACK SKELE_PUSH_STRENGTH"); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_fire1.as b/scripts/angelscript/monsters/skeleton_archer_fire1.as new file mode 100644 index 00000000..9f938be1 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_fire1.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherFire1 : CGameScript +{ + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + int SKELE_ARROW_AOE; + string SKELE_ARROW_EFFECT; + int SKELE_ARROW_GLOW; + string SKELE_ARROW_GLOW_COLOR; + string SKELE_ARROW_SCRIPT; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DOT_DMG; + float SKELE_DOT_DUR; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcherFire1() + { + NPC_GIVE_EXP = 400; + DMG_ARROW = 200; + DMG_SWIPE = 30; + C_SKELE_PUSH_STRENGTH = 200; + SKELE_GOLD = 50; + SKELE_ARROW_EFFECT = "effects/dot_fire"; + SKELE_ARROW_AOE = 0; + SKELE_DOT_DMG = 50; + SKELE_DOT_DUR = 5.0; + SKELE_ARROW_GLOW = 1; + SKELE_ARROW_GLOW_COLOR = Vector3(255, 0, 0); + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 400; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_fire"; + SKELE_DROPS_CONTAINER_CHANCE = 0.5; + SKELE_START_LIVES = 1; + } + + void skele_spawn() + { + SetName("Infernal Archer"); + SetHealth(1000); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 1.5); + SetDamageResistance("holy", 1.25); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 3); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_fire2.as b/scripts/angelscript/monsters/skeleton_archer_fire2.as new file mode 100644 index 00000000..664b0ad6 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_fire2.as @@ -0,0 +1,95 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherFire2 : CGameScript +{ + string ARROW_CL_SCRIPT; + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_AOE; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + int SKELE_ARROW_AOE; + int SKELE_ARROW_ARC; + string SKELE_ARROW_EFFECT; + int SKELE_ARROW_GLOW; + string SKELE_ARROW_GLOW_COLOR; + string SKELE_ARROW_SCRIPT; + int SKELE_ARROW_SPEED; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DOT_DMG; + float SKELE_DOT_DUR; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcherFire2() + { + NPC_GIVE_EXP = 650; + DMG_ARROW = 400; + DMG_SWIPE = 80; + C_SKELE_PUSH_STRENGTH = 400; + SKELE_GOLD = 100; + SKELE_ARROW_EFFECT = "effects/dot_fire"; + SKELE_ARROW_AOE = 128; + SKELE_DOT_DMG = 75; + SKELE_DOT_DUR = 5.0; + SKELE_ARROW_GLOW = 1; + SKELE_ARROW_GLOW_COLOR = Vector3(255, 255, 128); + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 800; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_fire"; + SKELE_DROPS_CONTAINER_CHANCE = 1.0; + SKELE_START_LIVES = 1; + SKELE_ARROW_ARC = 1; + SKELE_ARROW_SPEED = 500; + ARROW_CL_SCRIPT = "effects/sfx_fire_burst"; + DMG_AOE = 400; + } + + void OnRepeatTimer() + { + SetRepeatDelay(15.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 0, 0), 128, 15.0); + } + + void skele_spawn() + { + SetName("Demonic Archer"); + SetHealth(3000); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 1.5); + SetDamageResistance("holy", 1.25); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 9); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + + void skele_arrow_fx() + { + string ARROW_ORG = param1; + ClientEvent("new", "all", ARROW_CL_SCRIPT, ARROW_ORG, 128, 1, Vector3(255, 0, 0)); + XDoDamage(ARROW_ORG, SKELE_ARROW_AOE, DMG_AOE, 0, GetOwner(), GetOwner(), "none", "fire_effect"); + } + + void OnPostSpawn() override + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 0, 0), 128, 15.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_ice1.as b/scripts/angelscript/monsters/skeleton_archer_ice1.as new file mode 100644 index 00000000..0c1e264d --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_ice1.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherIce1 : CGameScript +{ + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + int SKELE_ARROW_AOE; + string SKELE_ARROW_EFFECT; + int SKELE_ARROW_GLOW; + string SKELE_ARROW_GLOW_COLOR; + string SKELE_ARROW_SCRIPT; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DOT_DMG; + float SKELE_DOT_DUR; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcherIce1() + { + NPC_GIVE_EXP = 500; + DMG_ARROW = 200; + DMG_SWIPE = 30; + C_SKELE_PUSH_STRENGTH = 200; + SKELE_GOLD = 50; + SKELE_ARROW_EFFECT = "effects/dot_cold"; + SKELE_ARROW_AOE = 0; + SKELE_DOT_DMG = 25; + SKELE_DOT_DUR = 8.0; + SKELE_ARROW_GLOW = 1; + SKELE_ARROW_GLOW_COLOR = Vector3(128, 128, 255); + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 400; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_frost"; + SKELE_DROPS_CONTAINER_CHANCE = 0.2; + SKELE_START_LIVES = 1; + } + + void skele_spawn() + { + SetName("Frozen Archer"); + SetHealth(1000); + SetDamageResistance("fire", 1.25); + SetDamageResistance("cold", 0.5); + SetDamageResistance("holy", 1.25); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 5); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_ice2.as b/scripts/angelscript/monsters/skeleton_archer_ice2.as new file mode 100644 index 00000000..e9adcec1 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_ice2.as @@ -0,0 +1,103 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherIce2 : CGameScript +{ + string ARROW_CL_SCRIPT; + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_AOE; + int DMG_ARROW; + int DMG_SWIPE; + float FREEZE_DUR; + int NPC_GIVE_EXP; + int SKELE_ARROW_AOE; + int SKELE_ARROW_ARC; + string SKELE_ARROW_EFFECT; + int SKELE_ARROW_EFFECT_HANDLED; + int SKELE_ARROW_GLOW; + string SKELE_ARROW_GLOW_COLOR; + string SKELE_ARROW_SCRIPT; + int SKELE_ARROW_SPEED; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DOT_DMG; + float SKELE_DOT_DUR; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcherIce2() + { + NPC_GIVE_EXP = 800; + DMG_ARROW = 400; + DMG_SWIPE = 80; + C_SKELE_PUSH_STRENGTH = 600; + SKELE_GOLD = 100; + SKELE_ARROW_EFFECT = "effects/dot_cold"; + SKELE_ARROW_EFFECT_HANDLED = 1; + SKELE_ARROW_AOE = 128; + SKELE_DOT_DMG = 50; + SKELE_DOT_DUR = 5.0; + SKELE_ARROW_GLOW = 1; + SKELE_ARROW_GLOW_COLOR = Vector3(128, 128, 255); + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 800; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_frost"; + SKELE_DROPS_CONTAINER_CHANCE = 1.0; + SKELE_START_LIVES = 1; + SKELE_ARROW_ARC = 1; + SKELE_ARROW_SPEED = 500; + ARROW_CL_SCRIPT = "effects/sfx_ice_burst"; + DMG_AOE = 200; + FREEZE_DUR = 8.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(15.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 128, 255), 128, 15.0); + } + + void skele_spawn() + { + SetName("Ancient Frozen Archer"); + SetHealth(3000); + SetDamageResistance("fire", 1.25); + SetDamageResistance("cold", 0.0); + SetDamageResistance("holy", 1.25); + SetHeight(80); + SetWidth(30); + SetModelBody(0, 5); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + + void skele_arrow_fx() + { + string ARROW_ORG = param1; + ClientEvent("new", "all", ARROW_CL_SCRIPT, ARROW_ORG, 128, 1, Vector3(0, 0, 255)); + XDoDamage(ARROW_ORG, SKELE_ARROW_AOE, DMG_AOE, 0, GetOwner(), GetOwner(), "none", "cold_effect"); + } + + void skele_handle_effect() + { + ApplyEffect(param1, "effects/dot_cold_freeze", FREEZE_DUR, GetEntityIndex(GetOwner()), SKELE_DOT_DMG); + } + + void OnPostSpawn() override + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 128, 255), 128, 15.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_lightning1.as b/scripts/angelscript/monsters/skeleton_archer_lightning1.as new file mode 100644 index 00000000..fae4d1ac --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_lightning1.as @@ -0,0 +1,65 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherLightning1 : CGameScript +{ + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + int SKELE_ARROW_AOE; + string SKELE_ARROW_EFFECT; + int SKELE_ARROW_GLOW; + string SKELE_ARROW_GLOW_COLOR; + string SKELE_ARROW_SCRIPT; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DOT_DMG; + float SKELE_DOT_DUR; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcherLightning1() + { + NPC_GIVE_EXP = 450; + DMG_ARROW = 200; + DMG_SWIPE = 30; + C_SKELE_PUSH_STRENGTH = 400; + SKELE_GOLD = 50; + SKELE_ARROW_EFFECT = "effects/dot_lightning"; + SKELE_ARROW_AOE = 0; + SKELE_DOT_DMG = 30; + SKELE_DOT_DUR = 5.0; + SKELE_ARROW_GLOW = 1; + SKELE_ARROW_GLOW_COLOR = Vector3(255, 255, 0); + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 400; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_lightning"; + SKELE_DROPS_CONTAINER_CHANCE = 0.5; + SKELE_START_LIVES = 1; + } + + void skele_spawn() + { + SetName("Thunder Archer"); + SetHealth(1000); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("holy", 1.25); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 6); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_lightning2.as b/scripts/angelscript/monsters/skeleton_archer_lightning2.as new file mode 100644 index 00000000..3c421829 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_lightning2.as @@ -0,0 +1,94 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherLightning2 : CGameScript +{ + string ARROW_CL_SCRIPT; + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_AOE; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + int SKELE_ARROW_AOE; + int SKELE_ARROW_ARC; + string SKELE_ARROW_EFFECT; + int SKELE_ARROW_GLOW; + string SKELE_ARROW_GLOW_COLOR; + string SKELE_ARROW_SCRIPT; + int SKELE_ARROW_SPEED; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DOT_DMG; + float SKELE_DOT_DUR; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcherLightning2() + { + NPC_GIVE_EXP = 800; + DMG_ARROW = 400; + DMG_SWIPE = 80; + C_SKELE_PUSH_STRENGTH = 400; + SKELE_GOLD = 100; + SKELE_ARROW_EFFECT = "effects/dot_lightning"; + SKELE_ARROW_AOE = 128; + SKELE_DOT_DMG = 75; + SKELE_DOT_DUR = 5.0; + SKELE_ARROW_GLOW = 1; + SKELE_ARROW_GLOW_COLOR = Vector3(255, 255, 0); + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 800; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_lightning"; + SKELE_DROPS_CONTAINER_CHANCE = 1.0; + SKELE_START_LIVES = 1; + SKELE_ARROW_ARC = 1; + SKELE_ARROW_SPEED = 500; + ARROW_CL_SCRIPT = "effects/sfx_shock_burst"; + DMG_AOE = 500; + } + + void OnRepeatTimer() + { + SetRepeatDelay(15.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 0), 128, 15.0); + } + + void skele_spawn() + { + SetName("Lightning Archer"); + SetHealth(3000); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("holy", 1.25); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 6); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + + void skele_arrow_fx() + { + string ARROW_ORG = param1; + ClientEvent("new", "all", ARROW_CL_SCRIPT, ARROW_ORG, 128, 1, Vector3(255, 255, 0)); + XDoDamage(ARROW_ORG, SKELE_ARROW_AOE, DMG_AOE, 0, GetOwner(), GetOwner(), "none", "lightning_effect"); + } + + void OnPostSpawn() override + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 0), 128, 15.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_poison1.as b/scripts/angelscript/monsters/skeleton_archer_poison1.as new file mode 100644 index 00000000..51d34566 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_poison1.as @@ -0,0 +1,65 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherPoison1 : CGameScript +{ + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + int SKELE_ARROW_AOE; + string SKELE_ARROW_EFFECT; + int SKELE_ARROW_GLOW; + string SKELE_ARROW_GLOW_COLOR; + string SKELE_ARROW_SCRIPT; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DOT_DMG; + float SKELE_DOT_DUR; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcherPoison1() + { + NPC_GIVE_EXP = 500; + DMG_ARROW = 200; + DMG_SWIPE = 30; + C_SKELE_PUSH_STRENGTH = 200; + SKELE_GOLD = 50; + SKELE_ARROW_EFFECT = "effects/dot_poison"; + SKELE_ARROW_AOE = 0; + SKELE_DOT_DMG = 25; + SKELE_DOT_DUR = 10.0; + SKELE_ARROW_GLOW = 1; + SKELE_ARROW_GLOW_COLOR = Vector3(0, 255, 0); + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 400; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_poison"; + SKELE_DROPS_CONTAINER_CHANCE = 0.5; + SKELE_START_LIVES = 1; + } + + void skele_spawn() + { + SetName("Venomous Archer"); + SetHealth(1000); + SetDamageResistance("acid", 0.25); + SetDamageResistance("holy", 1.25); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 2); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_poison2.as b/scripts/angelscript/monsters/skeleton_archer_poison2.as new file mode 100644 index 00000000..f1ab3cd8 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_poison2.as @@ -0,0 +1,94 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherPoison2 : CGameScript +{ + string ARROW_CL_SCRIPT; + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_AOE; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + int SKELE_ARROW_AOE; + int SKELE_ARROW_ARC; + string SKELE_ARROW_EFFECT; + int SKELE_ARROW_GLOW; + string SKELE_ARROW_GLOW_COLOR; + string SKELE_ARROW_SCRIPT; + int SKELE_ARROW_SPEED; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DOT_DMG; + float SKELE_DOT_DUR; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcherPoison2() + { + NPC_GIVE_EXP = 1500; + DMG_ARROW = 400; + DMG_SWIPE = 80; + C_SKELE_PUSH_STRENGTH = 400; + SKELE_GOLD = 100; + SKELE_ARROW_EFFECT = "effects/dot_poison"; + SKELE_ARROW_AOE = 128; + SKELE_DOT_DMG = 50; + SKELE_DOT_DUR = 10.0; + SKELE_ARROW_GLOW = 1; + SKELE_ARROW_GLOW_COLOR = Vector3(0, 255, 0); + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 800; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_gpoison"; + SKELE_DROPS_CONTAINER_CHANCE = 1.0; + SKELE_START_LIVES = 1; + SKELE_ARROW_ARC = 1; + SKELE_ARROW_SPEED = 500; + ARROW_CL_SCRIPT = "effects/sfx_poison_burst"; + DMG_AOE = 150; + } + + void OnRepeatTimer() + { + SetRepeatDelay(15.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(0, 255, 0), 128, 15.0); + } + + void skele_spawn() + { + SetName("Vile Archer"); + SetHealth(3000); + SetDamageResistance("acid", 0.25); + SetDamageResistance("holy", 1.25); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 2); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + + void skele_arrow_fx() + { + string ARROW_ORG = param1; + ClientEvent("new", "all", ARROW_CL_SCRIPT, ARROW_ORG, 128, 1, Vector3(0, 255, 0)); + XDoDamage(ARROW_ORG, SKELE_ARROW_AOE, DMG_AOE, 0, GetOwner(), GetOwner(), "none", "poison_effect"); + } + + void OnPostSpawn() override + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(0, 255, 0), 128, 15.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_stone1.as b/scripts/angelscript/monsters/skeleton_archer_stone1.as new file mode 100644 index 00000000..32eafb6d --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_stone1.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherStone1 : CGameScript +{ + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + string SKELE_ARROW_SCRIPT; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int STONE_SKELETON; + + SkeletonArcherStone1() + { + NPC_GIVE_EXP = 500; + DMG_ARROW = 500; + DMG_SWIPE = 80; + C_SKELE_PUSH_STRENGTH = 200; + SKELE_GOLD = 50; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_jagged"; + SKELE_DROPS_CONTAINER_CHANCE = 0.5; + SKELE_START_LIVES = 1; + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 400; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + STONE_SKELETON = 1; + } + + void skele_spawn() + { + SetName("Stone Archer"); + SetHealth(2000); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("fire", 1.0); + SetDamageResistance("stun", 0.25); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 7); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_archer_stone2.as b/scripts/angelscript/monsters/skeleton_archer_stone2.as new file mode 100644 index 00000000..4640a939 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_archer_stone2.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherStone2 : CGameScript +{ + int C_SKELE_ARROW_KNOCKBACK; + int C_SKELE_PUSH_STRENGTH; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + string SKELE_ARROW_SCRIPT; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int STONE_SKELETON; + + SkeletonArcherStone2() + { + NPC_GIVE_EXP = 800; + DMG_ARROW = 600; + DMG_SWIPE = 120; + C_SKELE_PUSH_STRENGTH = 300; + SKELE_GOLD = 100; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_jagged"; + SKELE_DROPS_CONTAINER_CHANCE = 1.0; + SKELE_START_LIVES = 1; + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + C_SKELE_ARROW_KNOCKBACK = 800; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + STONE_SKELETON = 1; + } + + void skele_spawn() + { + SetName("Greater Stone Archer"); + SetHealth(4000); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("fire", 1.0); + SetDamageResistance("stun", 0.25); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 7); + SetModelBody(1, 10); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_base.as b/scripts/angelscript/monsters/skeleton_base.as new file mode 100644 index 00000000..0f637cb0 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_base.as @@ -0,0 +1,526 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class SkeletonBase : CGameScript +{ + int AM_SKELETON; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH_FAKE; + string ANIM_GETUP; + string ANIM_IDLE; + string ANIM_RESPAWN_DEADIDLE; + string ANIM_RUN; + string ANIM_WALK; + string ATTACK_HITRANGE; + string ATTACK_RANGE; + string DEEP_SLEEPER; + int I_AM_TURNABLE; + string MOVE_RANGE; + string MY_NAME; + int NO_STUCK_CHECKS; + int NPC_HANDLES_SUMMON_CIRCLES; + string NPC_PREV_TARGET; + int PLAYING_DEAD; + int SET_GREEK; + int SKELE_TEMP_DEATH; + int SKELE_TURNED; + int SKEL_ATTACK_HITRANGE; + int SKEL_ATTACK_RANGE; + int SKEL_HEIGHT; + string SKEL_MODEL; + int SKEL_MOVE_RANGE; + int SKEL_RESPAWN_TIMES; + string SKEL_SLAYER; + int SKEL_WIDTH; + string SK_BASE_ANIM_IDLE; + string SK_BASE_ANIM_RUN; + string SK_BASE_ANIM_WALK; + string SLEEPER; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_HOLY_STRIKE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + string SOUND_TURNED1; + string SOUND_TURNED2; + string SOUND_TURNED3; + string SOUND_TURNED4; + int STRUCK_HOLY; + + SkeletonBase() + { + ANIM_RESPAWN_DEADIDLE = "dead_on_stomach"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "dieheadshot"; + ANIM_DEATH_FAKE = "diesimple"; + ANIM_GETUP = "getup"; + SKEL_MODEL = "monsters/skeleton.mdl"; + SKEL_WIDTH = 32; + SKEL_HEIGHT = 80; + SKEL_MOVE_RANGE = 32; + SKEL_ATTACK_RANGE = 64; + SKEL_ATTACK_HITRANGE = 127; + AM_SKELETON = 1; + NPC_HANDLES_SUMMON_CIRCLES = 1; + I_AM_TURNABLE = 1; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_STRUCK4 = "zombie/zo_pain2.wav"; + SOUND_STRUCK5 = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_DEATH = "zombie/zo_pain1.wav"; + SOUND_TURNED1 = "ambience/the_horror1.wav"; + SOUND_TURNED2 = "ambience/the_horror2.wav"; + SOUND_TURNED3 = "ambience/the_horror3.wav"; + SOUND_TURNED4 = "ambience/the_horror4.wav"; + SOUND_HOLY_STRIKE = "doors/aliendoor1.wav"; + Precache(SOUND_DEATH); + Precache(SOUND_TURNED1); + Precache(SOUND_TURNED2); + Precache(SOUND_TURNED3); + Precache(SOUND_TURNED4); + Precache(SOUND_HOLY_STRIKE); + } + + void OnSpawn() override + { + if (ANIM_WALK == "ANIM_WALK") + { + ANIM_WALK = "walk"; + } + if (ANIM_RUN == "ANIM_RUN") + { + ANIM_RUN = "walk"; + } + SetModel(SKEL_MODEL); + SetBloodType("none"); + skel_get_sleeper_props(); + if (!(DEEP_SLEEPER)) + { + SetHearingSensitivity(4); + } + skeleton_spawn(); + SetHealth(SKEL_HP); + SetWidth(SKEL_WIDTH); + SetHeight(SKEL_HEIGHT); + MOVE_RANGE = SKEL_MOVE_RANGE; + ATTACK_RANGE = SKEL_ATTACK_RANGE; + ATTACK_HITRANGE = SKEL_ATTACK_HITRANGE; + SetRoam(true); + STRUCK_HOLY = 0; + if ((SLEEPER)) + { + make_sleeper(); + if (!(DEEP_SLEEPER)) + { + SetHearingSensitivity(10); + } + } + else + { + SetRace("undead"); + SetMoveAnim(ANIM_WALK); + skeleton_attribs(); + } + skel_setup_body(); + } + + void OnPostSpawn() override + { + SK_BASE_ANIM_RUN = ANIM_RUN; + SK_BASE_ANIM_WALK = ANIM_WALK; + SK_BASE_ANIM_IDLE = ANIM_IDLE; + } + + void go_greek() + { + SetModelBody(0, 10); + SET_GREEK = 1; + } + + void skel_get_sleeper_props() + { + string SLEEPER_ID = FindEntityByName("skels_sleep"); + if ((IsEntityAlive(SLEEPER_ID))) + { + SLEEPER = 1; + } + string SLEEPER_TYPE_ID = FindEntityByName("skels_deep_sleep"); + if ((IsEntityAlive(SLEEPER_TYPE_ID))) + { + SLEEPER = 1; + DEEP_SLEEPER = 1; + } + } + + void skeleton_attribs() + { + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + SetDamageResistance("poison", 0.0); + if (!(STONE_SKELETON)) + { + SetDamageResistance("slash", ".7"); + SetDamageResistance("pierce", ".5"); + SetDamageResistance("blunt", 1.2); + SetDamageResistance("fire", 1.5); + SetDamageResistance("holy", 3.0); + SetDamageResistance("cold", 0.25); + } + if ((STONE_SKELETON)) + { + SetDamageResistance("holy", 2.0); + SetDamageResistance("cold", 0.25); + } + } + + void make_deep_sleeper() + { + SLEEPER = 1; + DEEP_SLEEPER = 1; + SetAnimFrameRate(0.0); + ScheduleDelayedEvent(0.2, "hide_name"); + SetRoam(false); + PLAYING_DEAD = 1; + if (!(STONE_SKELETON)) + { + SetMoveAnim(ANIM_RESPAWN_DEADIDLE); + SetIdleAnim(ANIM_RESPAWN_DEADIDLE); + } + if ((STONE_SKELETON)) + { + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + } + SetInvincible(true); + SetHearingSensitivity(0); + npcatk_suspend_ai(); + NO_STUCK_CHECKS = 1; + if (!(DEEP_SLEEPER)) + { + SetHearingSensitivity(10); + } + SLEEPER = 1; + DEEP_SLEEPER = 1; + SetAnimFrameRate(0.0); + ScheduleDelayedEvent(0.2, "hide_name"); + SetRoam(false); + PLAYING_DEAD = 1; + if (!(STONE_SKELETON)) + { + SetMoveAnim(ANIM_RESPAWN_DEADIDLE); + SetIdleAnim(ANIM_RESPAWN_DEADIDLE); + } + if ((STONE_SKELETON)) + { + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + } + SetInvincible(true); + SetHearingSensitivity(0); + npcatk_suspend_ai(); + NO_STUCK_CHECKS = 1; + if (!(DEEP_SLEEPER)) + { + SetHearingSensitivity(10); + } + } + + void set_summon_circle2() + { + if (ANIM_RUN == "run") + { + PlayAnim("critical", "sitstand"); + } + else + { + PlayAnim("critical", "getup"); + } + } + + void skel_setup_body() + { + MY_NAME = GetEntityName(GetOwner()); + string SKEL_NAME = "Skeleton Warrior"; + if (MY_NAME == SKEL_NAME) + { + SetModelBody(0, 0); + SetModelBody(1, 0); + } + string SKEL_NAME = "Walking Ashes"; + if (MY_NAME == SKEL_NAME) + { + SetModelBody(0, 6); + SetModelBody(1, 0); + } + string SKEL_NAME = "Fragile Knight"; + if (MY_NAME == SKEL_NAME) + { + SetModelBody(0, 5); + SetModelBody(1, 4); + } + string SKEL_NAME = "Ghastly Knight"; + if (MY_NAME == SKEL_NAME) + { + SetModelBody(0, 3); + SetModelBody(1, 4); + } + string SKEL_NAME = "Hungry Skeleton"; + if (MY_NAME == SKEL_NAME) + { + SetModelBody(0, 0); + SetModelBody(1, 1); + } + string SKEL_NAME = "Enraged Skeleton"; + if (MY_NAME == SKEL_NAME) + { + SetModelBody(0, 6); + SetModelBody(1, 2); + } + string SKEL_NAME = "Awakened Guardian"; + if (MY_NAME == SKEL_NAME) + { + SetModelBody(0, 3); + SetModelBody(1, 3); + } + string SKEL_NAME = "Living Dead"; + if (MY_NAME == SKEL_NAME) + { + SetModelBody(0, 1); + SetModelBody(1, 0); + } + string SKEL_NAME = "Fallen Knight"; + if (MY_NAME == SKEL_NAME) + { + SetModelBody(0, 4); + SetModelBody(1, 4); + } + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(SLEEPER)) return; + if ((DEEP_SLEEPER)) return; + if (!(IsValidPlayer("ent_lastheard"))) return; + if (!(GetEntityRange("ent_lastheard") < 128)) return; + skeleton_wakeup_call(); + if (!(SLEEPER)) return; + if ((DEEP_SLEEPER)) return; + if (!(IsValidPlayer("ent_lastheard"))) return; + if (!(GetEntityRange("ent_lastheard") < 128)) return; + skeleton_wakeup_call(); + } + + void skeleton_wakeup_call() + { + if (!(SLEEPER)) return; + SetName(MY_NAME); + SetRace("undead"); + float AWAKE_DELAY = 1.5; + if ((STONE_SKELETON)) + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + animate_stone(); + float AWAKE_DELAY = 0.1; + } + if (BASE_FRAMERATE == "BASE_FRAMERATE") + { + SetAnimFrameRate(1.0); + } + if (BASE_FRAMERATE != "BASE_FRAMERATE") + { + SetAnimFrameRate(BASE_FRAMERATE); + } + if (!(STONE_SKELETON)) + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", "getup"); + } + AWAKE_DELAY("skeleton_awake"); + } + + void skeleton_awake() + { + SetInvincible(false); + SetRoam(true); + ScheduleDelayedEvent(0.1, "skeleton_attribs"); + SLEEPER = 0; + DEEP_SLEEPER = 0; + PLAYING_DEAD = 0; + SetHearingSensitivity(10); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + NO_STUCK_CHECKS = 0; + npcatk_resume_ai(); + } + + void make_sleeper() + { + SLEEPER = 1; + SetAnimFrameRate(0.0); + ScheduleDelayedEvent(0.2, "hide_name"); + SetRoam(false); + PLAYING_DEAD = 1; + if (!(STONE_SKELETON)) + { + SetMoveAnim(ANIM_RESPAWN_DEADIDLE); + SetIdleAnim(ANIM_RESPAWN_DEADIDLE); + } + if ((STONE_SKELETON)) + { + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + } + SetInvincible(true); + SetHearingSensitivity(0); + npcatk_suspend_ai(); + NO_STUCK_CHECKS = 1; + if (!(DEEP_SLEEPER)) + { + SetHearingSensitivity(10); + } + } + + void turn_undead() + { + if (!(true)) return; + SKELE_TURNED = 1; + STRUCK_HOLY = 1; + SKEL_RESPAWN_TIMES = 99; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(true)) return; + if ((PLAYING_DEAD)) return; + if ((SKELE_TURNED)) + { + int NO_REBIRTH = 1; + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner())); + } + int RND_DEATH = RandomInt(1, 4); + if (RND_DEATH == 1) + { + ANIM_DEATH = "dieheadshot2"; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = "diesimple"; + } + if (RND_DEATH == 3) + { + ANIM_DEATH = "diebackward"; + } + if (RND_DEATH == 4) + { + ANIM_DEATH = "dieforward"; + } + if ((NO_REBIRTH)) return; + if (!(RandomInt(1, 100) <= SKEL_RESPAWN_CHANCE)) return; + if (!(SKEL_RESPAWN_TIMES < SKEL_RESPAWN_LIVES)) return; + SKEL_RESPAWN_TIMES += 1; + SKEL_SLAYER = GetEntityIndex(m_hLastStruck); + ANIM_DEATH = ANIM_DEATH_FAKE; + skel_fake_death(); + } + + void skel_fake_death() + { + SetAlive(1); + SetSolid("box"); + SetMoveDest("none"); + SetInvincible(true); + if (ANIM_RUN == ANIM_RESPAWN_DEADIDLE) + { + ANIM_RUN = SK_BASE_ANIM_RUN; + } + if (ANIM_WALK == ANIM_RESPAWN_DEADIDLE) + { + ANIM_WALK = SK_BASE_ANIM_WALK; + } + if (ANIM_IDLE == ANIM_RESPAWN_DEADIDLE) + { + ANIM_IDLE = SK_BASE_ANIM_IDLE; + } + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_RESPAWN_DEADIDLE); + NO_STUCK_CHECKS = 1; + PLAYING_DEAD = 1; + int L_REBIRTH_TIME = RandomInt(3.0, 5.0); + string L_GLOW_TIME = (L_REBIRTH_TIME + 1); + Effect("glow", GetOwner(), Vector3(0, 0, 0), 72, L_GLOW_TIME, L_GLOW_TIME); + L_REBIRTH_TIME("skel_rebirth"); + } + + void skel_rebirth() + { + ScheduleDelayedEvent(1.0, "skel_rebirth2"); + SetHealth((GetEntityMaxHealth(GetOwner()) ); + SetMaxHealth( 2)); + NPC_GIVE_EXP /= 2; + SetSkillLevel(NPC_GIVE_EXP); + SKELE_TEMP_DEATH = 0; + } + + void skel_rebirth2() + { + SetInvincible(false); + PlayAnim("critical", ANIM_GETUP); + PLAYING_DEAD = 0; + ScheduleDelayedEvent(1.0, "npcatk_resume_movement"); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + ScheduleDelayedEvent(1.1, "skel_rebirth3"); + } + + void skel_rebirth3() + { + PlayAnim("once", "break"); + SetMoveAnim(ANIM_RUN); + NPC_PREV_TARGET = "unset"; + npcatk_settarget(SKEL_SLAYER); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (!(STRUCK_HOLY)) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((STRUCK_HOLY)) + { + // PlayRandomSound from: SOUND_HOLY_STRIKE + array sounds = {SOUND_HOLY_STRIKE}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + STRUCK_HOLY = 0; + } + + void attack_1() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 5); + XDoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "slash", "dmgevent:skele_swing"); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_crystal1.as b/scripts/angelscript/monsters/skeleton_crystal1.as new file mode 100644 index 00000000..08ef1f12 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_crystal1.as @@ -0,0 +1,92 @@ +#pragma context server + +#include "monsters/skeleton_base.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class SkeletonCrystal1 : CGameScript +{ + int AM_FADING; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int FADE_COUNT; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string SINK_ORIGIN; + int SKEL_HP; + + SkeletonCrystal1() + { + ANIM_RUN = "idle1"; + ANIM_WALK = "idle1"; + NPC_HACKED_MOVE_SPEED = 150; + SKEL_HP = 1; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE_LOW = 10; + ATTACK_DAMAGE_HIGH = 20; + NPC_GIVE_EXP = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.7); + if (!(AM_FADING)) + { + } + EmitSound(GetOwner(), 0, "magic/pulsemachine_noloop.wav", 5); + } + + void skeleton_spawn() + { + SetName("Crystalline Skeleton"); + SetRoam(true); + SetHearingSensitivity(8); + SetModel("monsters/skeleton_boss1.mdl"); + SetInvincible(true); + SetModelBody(0, 8); + } + + void ext_crystal_remove() + { + AM_FADING = 1; + NPC_HACKED_MOVE_SPEED = 0; + SINK_ORIGIN = GetMonsterProperty("origin"); + SetSolid("none"); + npcatk_suspend_ai(); + game_stopmoving(); + SetMoveAnim(ANIM_IDLE); + PlayAnim("critical", ANIM_IDLE); + FADE_COUNT = 255; + fade_out(); + } + + void fade_out() + { + FADE_COUNT -= 5; + SINK_ORIGIN += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, -1.5)); + SetEntityOrigin(GetOwner(), SINK_ORIGIN); + if (FADE_COUNT <= 0) + { + tele_out(); + } + if (!(FADE_COUNT > 0)) return; + ScheduleDelayedEvent(0.1, "fade_out"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", FADE_COUNT); + } + + void tele_out() + { + SetEntityOrigin(GetOwner(), Vector3(20000, 10000, 20000)); + SetInvincible(false); + ScheduleDelayedEvent(0.1, "npc_suicide"); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_geric.as b/scripts/angelscript/monsters/skeleton_geric.as new file mode 100644 index 00000000..bcb0a71a --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_geric.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "calruin/cavetroll.as" + +namespace MS +{ + +class SkeletonGeric : CGameScript +{ + int FORCE_GERIC; + float NPC_BOSS_REGEN_RATE; + int NPC_IS_BOSS; + + SkeletonGeric() + { + NPC_IS_BOSS = 1; + NPC_BOSS_REGEN_RATE = 0.05; + FORCE_GERIC = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_gold.as b/scripts/angelscript/monsters/skeleton_gold.as new file mode 100644 index 00000000..ff33b03a --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_gold.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "mscave/Shadahar.as" + +namespace MS +{ + +class SkeletonGold : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/skeleton_golden_guard.as b/scripts/angelscript/monsters/skeleton_golden_guard.as new file mode 100644 index 00000000..69b38775 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_golden_guard.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "calruin/cavetroll.as" + +namespace MS +{ + +class SkeletonGoldenGuard : CGameScript +{ + int FORCE_GERIC; + int NPC_BASE_EXP; + + SkeletonGoldenGuard() + { + FORCE_GERIC = 1; + NPC_BASE_EXP = 1000; + } + + void OnPostSpawn() override + { + SetModelBody(0, 11); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_gstone1.as b/scripts/angelscript/monsters/skeleton_gstone1.as new file mode 100644 index 00000000..88b43be7 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_gstone1.as @@ -0,0 +1,254 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonGstone1 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string AS_ATTACKING; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + float BASE_MOVESPEED; + int CAN_FLINCH; + int CUSTOM_SIZE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int G_SUMMING_ROCKS; + string MY_ROCK_STORM; + int NPC_GIVE_EXP; + string PUSH_VEL; + int ROCK_DAMAGE; + int ROCK_DELAY; + float ROCK_FREQ; + int ROCK_ON; + int SKEL_ATTACK_HITRANGE; + int SKEL_ATTACK_RANGE; + int SKEL_HEIGHT; + int SKEL_HP; + string SKEL_MODEL; + int SKEL_MOVE_RANGE; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + int SKEL_WIDTH; + string SOUND_RUN1; + string SOUND_RUN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STUN; + string SOUND_SUMMON; + string SOUND_WALK1; + string SOUND_WALK2; + int STONE_SKELETON; + int STUN_ATK_CHANCE; + int STUN_ATTACK; + float WALK_MOVESPEED; + string WAS_SLEEPING; + string XSOUND_LEVITATE; + string XSOUND_SPIN; + string XSOUND_SUMMON; + + SkeletonGstone1() + { + SKEL_MODEL = "monsters/skeleton_boss2.mdl"; + SKEL_WIDTH = 40; + SKEL_HEIGHT = 130; + SKEL_MOVE_RANGE = 64; + SKEL_ATTACK_RANGE = 150; + SKEL_ATTACK_HITRANGE = 220; + ANIM_RUN = "run"; + SKEL_HP = 4000; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 26; + ATTACK_DAMAGE_HIGH = 60; + NPC_GIVE_EXP = 1000; + DROP_GOLD = 1; + DROP_GOLD_MIN = 100; + DROP_GOLD_MAX = 200; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + SOUND_RUN1 = "monsters/troll/step1.wav"; + SOUND_RUN2 = "monsters/troll/step2.wav"; + SOUND_WALK1 = "common/npc_step1.wav"; + SOUND_WALK2 = "common/npc_step2.wav"; + BASE_MOVESPEED = 2.0; + WALK_MOVESPEED = 1.0; + CAN_FLINCH = 0; + SOUND_STUN = "zombie/claw_strike2.wav"; + SOUND_SUMMON = "monsters/skeleton/calrain3.wav"; + ROCK_DAMAGE = "$rand(400,800)"; + STUN_ATK_CHANCE = 10; + STONE_SKELETON = 1; + ROCK_FREQ = 30.0; + CUSTOM_SIZE = 1; + XSOUND_LEVITATE = "fans/fan4on.wav"; + XSOUND_SPIN = "magic/fan4_noloop.wav"; + XSOUND_SUMMON = "magic/volcano_start.wav"; + Precache(XSOUND_LEVITATE); + Precache(XSOUND_SPIN); + Precache(XSOUND_SUMMON); + Precache("monsters/skeleton_boss2.mdl"); + } + + void skeleton_spawn() + { + SetModelBody(0, 7); + SetModelBody(1, 3); + if (!(SLEEPER)) + { + animate_stone(); + } + if ((SLEEPER)) + { + SetInvincible(true); + WAS_SLEEPING = 1; + npcatk_suspend_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + SetAnimFrameRate(0.0); + } + } + + void animate_stone() + { + SetName("Greater Stone Mason"); + SetRoam(true); + SetBloodType("none"); + SetDamageResistance("all", ".6"); + SetHearingSensitivity(3); + if ((WAS_SLEEPING)) + { + SetMoveAnim(ANIM_WALK); + SetAnimFrameRate(1.0); + npcatk_resume_ai(); + } + } + + void attack_1() + { + STUN_ATTACK = 0; + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 100, 10); + if (!(RandomInt(1, 100) < STUN_ATK_CHANCE)) return; + ANIM_ATTACK = "attack2"; + } + + void npc_targetsighted() + { + if ((IS_FLEEING)) return; + if (!(ROCK_ON)) return; + if ((ROCK_DELAY)) return; + ScheduleDelayedEvent(0.1, "summon_rock"); + } + + void rock_delay_reset() + { + ROCK_DELAY = 0; + } + + void attack_2() + { + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 200, 10); + STUN_ATTACK = 1; + attack_snd(); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = "attack1"; + } + + void game_dodamage() + { + if (!(param1)) return; + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + if (!(STUN_ATTACK)) return; + EmitSound(GetOwner(), 0, SOUND_STUN, 10); + ApplyEffect(param2, "effects/debuff_stun", Random(5, 10), GetEntityIndex(GetOwner())); + STUN_ATTACK = 0; + } + + void cycle_up() + { + ROCK_ON = 1; + } + + void summon_rock() + { + if ((G_SUMMING_ROCKS)) + { + if (!(ROCK_DELAY)) + { + } + Random(10, 20)("summon_rock"); + ROCK_DELAY = 1; + } + if ((G_SUMMING_ROCKS)) return; + SetGlobalVar("G_SUMMING_ROCKS", 1); + ScheduleDelayedEvent(5.0, "reset_summoning"); + ROCK_DELAY = 1; + ROCK_FREQ("rock_delay_reset"); + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + PlayAnim("once", "break"); + AS_ATTACKING = GetGameTime(); + npcatk_suspend_ai(); + PlayAnim("critical", "castspell"); + int NUM_ROCKS = 4; + if (GetPlayerCount() >= 1) + { + string NUM_ROCKS = GetPlayerCount(); + if (NUM_ROCKS > 4) + { + int NUM_RUCKS = 4; + } + } + int NUM_ROCKS = 4; + if (((MY_ROCK_STORM !is null))) return; + SpawnNPC("monsters/summon/rock_storm", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), NUM_ROCKS, ROCK_DAMAGE, 64, 200 + MY_ROCK_STORM = GetEntityIndex(m_hLastCreated); + } + + void reset_summoning() + { + G_SUMMING_ROCKS = 0; + if (!(SUSPEND_AI)) return; + npcatk_resume_ai(); + } + + void castspell() + { + SetGlobalVar("G_SUMMING_ROCKS", 0); + if (!(SUSPEND_AI)) return; + npcatk_resume_ai(); + } + + void walk_step1() + { + EmitSound(GetOwner(), 0, SOUND_WALK1, 8); + } + + void walk_step2() + { + EmitSound(GetOwner(), 0, SOUND_WALK2, 8); + } + + void run_step1() + { + SetMoveSpeed(BASE_MOVESPEED); + EmitSound(GetOwner(), 0, SOUND_RUN1, 8); + } + + void run_step2() + { + SetMoveSpeed(BASE_MOVESPEED); + EmitSound(GetOwner(), 0, SOUND_RUN2, 8); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_gstone1_noxp.as b/scripts/angelscript/monsters/skeleton_gstone1_noxp.as new file mode 100644 index 00000000..59208d60 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_gstone1_noxp.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/skeleton_gstone1.as" + +namespace MS +{ + +class SkeletonGstone1Noxp : CGameScript +{ + int DROP_GOLD; + int NPC_GIVE_EXP; + + SkeletonGstone1Noxp() + { + NPC_GIVE_EXP = 0; + DROP_GOLD = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_guardian.as b/scripts/angelscript/monsters/skeleton_guardian.as new file mode 100644 index 00000000..c8c0fc7d --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_guardian.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "calruin/corpse.as" + +namespace MS +{ + +class SkeletonGuardian : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ice.as b/scripts/angelscript/monsters/skeleton_ice.as new file mode 100644 index 00000000..5ca39bf2 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ice.as @@ -0,0 +1,150 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonIce : CGameScript +{ + string ANIM_BLAST; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int BOLTS_ON; + int BOLT_CHECKING; + int BOLT_DAMAGE; + float BOLT_FREQUENCY; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int MOVE_RANGE; + string NEXT_BOLT; + string NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + string SET_GREEK; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + string SOUND_BOLT; + + SkeletonIce() + { + SKEL_HP = 700; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 10.5; + ATTACK_DAMAGE_HIGH = 15.5; + NPC_GIVE_EXP = 120; + DROP_GOLD = 1; + DROP_GOLD_MIN = 20; + DROP_GOLD_MAX = 35; + SKEL_RESPAWN_CHANCE = 0.5; + SKEL_RESPAWN_LIVES = 1; + MOVE_RANGE = 300; + ANIM_BLAST = "castspell"; + SOUND_BOLT = "magic/ice_strike.wav"; + BOLT_FREQUENCY = 3.0; + BOLT_DAMAGE = 60; + Precache("items/proj_ice_bolt"); + Precache("monsters/skeleton_boss1.mdl"); + } + + void skeleton_spawn() + { + SetName("Decayed Ice Bone"); + SetRace("undead"); + SetRoam(true); + SetDamageResistance("all", 0.7); + SetDamageResistance("fire", 1.2); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("cold", 0.0); + SetModel("monsters/skeleton_boss1.mdl"); + SetModelBody(0, 5); + SetModelBody(1, 8); + SetHearingSensitivity(5); + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + BOLT_CHECKING = 0; + SetStat("concentration", 30); + SetStat("spellcasting", 30); + } + + void cast_bolts() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(BOLT_CHECKING)) return; + BOLT_FREQUENCY("cast_bolts"); + string SEE_NME = false; + if (!(SEE_NME)) + { + NO_STUCK_CHECKS = 0; + } + if (!(SEE_NME)) return; + if (!(GetEntityRange(m_hLastSeen) > ATTACK_RANGE)) return; + NO_STUCK_CHECKS = 1; + EmitSound(GetOwner(), 0, "magic/frost_reverse.wav", 10); + Effect("glow", GetOwner(), Vector3(128, 128, 255), 32, 2, 2); + SetModelBody(1, 9); + PlayAnim("once", "castspell"); + BOLTS_ON = 1; + ScheduleDelayedEvent(1.0, "bolts_off"); + } + + void bolts_off() + { + BOLTS_ON = 0; + SetModelBody(1, 8); + } + + void extra_bolts() + { + string BOLT_DEST = GetEntityOrigin(GetOwner()); + string BOLT_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + BOLT_DEST += /* TODO: $relpos */ $relpos(Vector3(0, BOLT_YAW, 0), Vector3(0, 100, 40)); + TossProjectile("proj_ice_bolt", GetEntityProperty(GetOwner(), "attachpos"), BOLT_DEST, 500, BOLT_DAMAGE, 20, "none"); + } + + void npc_targetsighted() + { + if (!(BOLTS_ON)) return; + if (!(GetGameTime() > NEXT_BOLT)) return; + NEXT_BOLT = GetGameTime(); + NEXT_BOLT += 0.2; + string BOLT_DEST = GetEntityOrigin(m_hAttackTarget); + TossProjectile("proj_ice_bolt", GetEntityProperty(GetOwner(), "attachpos"), BOLT_DEST, 500, BOLT_DAMAGE, 10, "none"); + } + + void cycle_up() + { + if ((BOLT_CHECKING)) return; + BOLT_CHECKING = 1; + cast_bolts(); + } + + void cycle_down() + { + BOLT_CHECKING = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(1, 8); + } + + void go_greek() + { + SetModelBody(0, 10); + SET_GREEK = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ice2_hammer.as b/scripts/angelscript/monsters/skeleton_ice2_hammer.as new file mode 100644 index 00000000..f3f32d20 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ice2_hammer.as @@ -0,0 +1,213 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonIce2Hammer : CGameScript +{ + int AM_CHARGING; + string ANIM_ATTACK; + string ANIM_RUN; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + float BASE_MOVESPEED; + int CAN_FLEE; + int CAN_FLINCH; + int CUSTOM_SIZE; + float DOT_ICE; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FREQ_CHARGE; + string NEXT_CHARGE; + int NPC_GIVE_EXP; + string N_SOUND_STEP; + string PUSH_VEL; + int SKEL_ATTACK_HITRANGE; + int SKEL_ATTACK_RANGE; + int SKEL_HEIGHT; + int SKEL_HP; + string SKEL_MODEL; + int SKEL_MOVE_RANGE; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + int SKEL_WIDTH; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STEP3; + string SOUND_STUN; + string SOUND_SUMMON; + int STUN_ATK_COUNT; + int STUN_ATTACK; + float WALK_MOVESPEED; + + SkeletonIce2Hammer() + { + SKEL_MODEL = "monsters/skeleton_boss2.mdl"; + SKEL_WIDTH = 40; + SKEL_HEIGHT = 130; + SKEL_MOVE_RANGE = 64; + SKEL_ATTACK_RANGE = 150; + SKEL_ATTACK_HITRANGE = 220; + ANIM_RUN = "run"; + SKEL_HP = 10000; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 100; + ATTACK_DAMAGE_HIGH = 200; + NPC_GIVE_EXP = 2500; + DROP_GOLD = 1; + DROP_GOLD_AMT = 750; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + SOUND_STEP1 = "debris/glass1.wav"; + SOUND_STEP2 = "debris/glass2.wav"; + SOUND_STEP3 = "debris/glass3.wav"; + FREQ_CHARGE = 30.0; + BASE_MOVESPEED = 2.0; + WALK_MOVESPEED = 1.0; + CAN_FLINCH = 0; + SOUND_STUN = "zombie/claw_strike2.wav"; + SOUND_SUMMON = "monsters/skeleton/calrain3.wav"; + CUSTOM_SIZE = 1; + DOT_ICE = 50.0; + } + + void skeleton_spawn() + { + SetModelBody(0, 8); + SetModelBody(1, 3); + SetName("Frost Hammer"); + SetRoam(true); + SetBloodType("none"); + SetDamageResistance("all", ".6"); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 1.5); + SetHearingSensitivity(3); + STUN_ATK_COUNT = 0; + } + + void npc_targetsighted() + { + if (!(GetGameTime() > NEXT_CHARGE)) return; + NEXT_CHARGE = GetGameTime(); + NEXT_CHARGE += FREQ_CHARGE; + AM_CHARGING = 1; + CAN_FLEE = 0; + PlayAnim("once", "break"); + ApplyEffect(GetOwner(), "effects/sfx_motionblur_temp", GetEntityIndex(GetOwner()), 8, 0, 5.0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetAnimFrameRate(3.0); + EmitSound(GetOwner(), 0, "magic/teleport.wav", 10); + ScheduleDelayedEvent(5.0, "end_charge"); + } + + void end_charge() + { + CAN_FLEE = 1; + PlayAnim("once", "break"); + AM_CHARGING = 0; + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + SetAnimFrameRate(1.0); + } + + void attack_1() + { + STUN_ATTACK = 0; + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 100, 10); + STUN_ATK_COUNT += 1; + if (!(STUN_ATK_COUNT >= 10)) return; + STUN_ATK_COUNT = 0; + ANIM_ATTACK = "attack2"; + } + + void attack_2() + { + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 200, 10); + STUN_ATTACK = 1; + attack_snd(); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = "attack1"; + } + + void game_dodamage() + { + if ((STUN_ATTACK)) + { + if ((param1)) + { + } + EmitSound(GetOwner(), 0, SOUND_STUN, 10); + ApplyEffect(param2, "effects/debuff_stun", Random(5, 10), GetEntityIndex(GetOwner())); + } + STUN_ATTACK = 0; + } + + void skele_swing_dodamage() + { + if (!(param1)) return; + AddVelocity(param2, PUSH_VEL); + if (!(RandomInt(1, 10) == 1)) return; + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_ICE); + } + + void walk_step1() + { + sound_step(); + } + + void walk_step2() + { + sound_step(); + } + + void run_step1() + { + SetMoveSpeed(BASE_MOVESPEED); + sound_step(); + } + + void run_step2() + { + SetMoveSpeed(BASE_MOVESPEED); + sound_step(); + } + + void sound_step() + { + N_SOUND_STEP += 1; + if (N_SOUND_STEP > 2) + { + N_SOUND_STEP = 1; + } + if (N_SOUND_STEP == 1) + { + EmitSound(GetOwner(), 0, "weapons/dagger/daggermetal1.wav", 5); + } + if (N_SOUND_STEP == 2) + { + EmitSound(GetOwner(), 0, "weapons/dagger/daggermetal2.wav", 5); + } + if (N_SOUND_STEP == 3) + { + EmitSound(GetOwner(), 0, SOUND_STEP3, 5); + } + } + + void skeleton_attribs() + { + SetDamageResistance("slash", ".7"); + SetDamageResistance("pierce", ".5"); + SetDamageResistance("blunt", 1.2); + SetDamageResistance("fire", 2.0); + SetDamageResistance("holy", 3.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ice_enraged.as b/scripts/angelscript/monsters/skeleton_ice_enraged.as new file mode 100644 index 00000000..30042e9a --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ice_enraged.as @@ -0,0 +1,187 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonIceEnraged : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BLAST; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SWIPE; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int BOLT_CHECKING; + int BOLT_DAMAGE; + float BOLT_FREQUENCY; + int DAMAGE_TRACKER; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + float FREEZE_CHANCE; + float FREQ_RETREAT; + int ICE_BLASTING; + string NEXT_RETREAT; + int NPC_GIVE_EXP; + int RUN_THRESHOLD; + string SET_GREEK; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + int SMASH_DAMAGE; + string SOUND_BOLT; + float STUCK_CHECK_FREQUENCY; + int SWIPE_DAMAGE; + + SkeletonIceEnraged() + { + FREQ_RETREAT = 20.0; + SKEL_HP = 1000; + ATTACK_HITCHANCE = 0.85; + NPC_GIVE_EXP = 200; + SMASH_DAMAGE = RandomInt(50, 100); + SWIPE_DAMAGE = RandomInt(10, 20); + ANIM_ATTACK = "attack1"; + ANIM_WALK = "run"; + ANIM_RUN = "run"; + ANIM_SWIPE = "attack1"; + ANIM_SMASH = "attack2"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 20; + DROP_GOLD_MAX = 45; + SKEL_RESPAWN_CHANCE = 0.5; + SKEL_RESPAWN_LIVES = 1; + ANIM_BLAST = "rlflinch"; + SOUND_BOLT = "magic/ice_strike.wav"; + BOLT_FREQUENCY = "$randf(15,60)"; + BOLT_DAMAGE = 30; + FREEZE_CHANCE = 0.5; + RUN_THRESHOLD = 200; + STUCK_CHECK_FREQUENCY = 2.0; + Precache("items/proj_ice_bolt"); + Precache("monsters/skeleton_enraged.mdl"); + } + + void skeleton_spawn() + { + SetName("Enraged Ice Bone"); + SetRace("undead"); + SetRoam(true); + SetDamageResistance("all", ".7"); + SetDamageResistance("fire", 1.2); + SetDamageResistance("lightning", ".5"); + SetDamageResistance("cold", 0.0); + SetAnimMoveSpeed(2.0); + SetModel("monsters/skeleton_enraged.mdl"); + SetHearingSensitivity(5); + SetMoveAnim(ANIM_RUN); + SetModelBody(0, 5); + SetModelBody(1, 5); + SetStat("concentration", 30); + SetStat("spellcasting", 30); + DAMAGE_TRACKER = 0; + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + } + + void OnPostSpawn() override + { + RUN_THRESHOLD = GetEntityMaxHealth(GetOwner()); + RUN_THRESHOLD *= 0.25; + } + + void cast_bolts() + { + if (!(IsEntityAlive(GetOwner()))) return; + BOLT_CHECKING = 0; + if ((ICE_BLASTING)) return; + if ((PLAYING_DEAD)) return; + PlayAnim("critcal", ANIM_BLAST); + ICE_BLASTING = 1; + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 2048, 0, 1.0, 0); + ICE_BLASTING = 0; + } + + void game_dodamage() + { + if (!(ICE_BLASTING)) + { + if (!(FREEZE_ATTACK)) + { + if (ANIM_ATTACK == ANIM_SMASH) + { + if (RandomInt(1, 4) == 1) + { + ApplyEffect(param2, "effects/dot_cold", 5, GetEntityIndex(GetOwner()), RandomInt(3, 5), "none"); + } + } + } + } + if ((ICE_BLASTING)) + { + if ((param1)) + { + } + if (GetRelationship(param2) == "enemy") + { + } + EmitSound(GetOwner(), CHAN_VOICE, SOUND_BOLT, 10); + SetMoveDest(param2); + TossProjectile("proj_ice_bolt", /* TODO: $relpos */ $relpos(0, 5, 10), GetEntityIndex(param2), 500, BOLT_DAMAGE, 1, "none"); + } + } + + void npc_targetsighted() + { + if ((BOLT_CHECKING)) return; + BOLT_CHECKING = 1; + ScheduleDelayedEvent(4.0, "cast_bolts"); + } + + void attack_1() + { + attack_snd(); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, SWIPE_DAMAGE, ATTACK_HITCHANCE, "slash"); + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = ANIM_SMASH; + } + ScheduleDelayedEvent(2.0, "reset_atk"); + } + + void reset_atk() + { + ANIM_ATTACK = ANIM_SWIPE; + } + + void attack_2() + { + attack_snd(); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, SMASH_DAMAGE, ATTACK_HITCHANCE, "blunt"); + ANIM_ATTACK = ANIM_SWIPE; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((CHICKEN_RUN)) return; + DAMAGE_TRACKER += param1; + if (!(DAMAGE_TRACKER > RUN_THRESHOLD)) return; + if (!(GetGameTime() > NEXT_RETREAT)) return; + NEXT_RETREAT = GetGameTime(); + NEXT_RETREAT += FREQ_RETREAT; + DAMAGE_TRACKER = 0; + chicken_run(3.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ice_enraged_once.as b/scripts/angelscript/monsters/skeleton_ice_enraged_once.as new file mode 100644 index 00000000..0a860348 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ice_enraged_once.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/skeleton_ice_enraged.as" + +namespace MS +{ + +class SkeletonIceEnragedOnce : CGameScript +{ + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + SkeletonIceEnragedOnce() + { + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ice_lord.as b/scripts/angelscript/monsters/skeleton_ice_lord.as new file mode 100644 index 00000000..0d560f51 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ice_lord.as @@ -0,0 +1,707 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SkeletonIceLord : CGameScript +{ + string ALT_ATTACK; + string ANIM_ALTTHROW; + string ANIM_ATTACK; + string ANIM_BASEIDLE; + string ANIM_BASERUN; + string ANIM_BASEWALK; + string ANIM_DEAD; + string ANIM_DEATH; + string ANIM_FAKEDEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SLASH; + string ANIM_SMASH; + string ANIM_THROW; + string ANIM_WALK; + int ATTACK1_RANGE; + int ATTACK2_RANGE; + int ATTACK_CLUB_RANGE; + int ATTACK_HITRANGE; + string ATTACK_MODE; + string ATTACK_RANGE; + int CANT_TURN; + int CAN_ATTACK; + int CAN_FLINCH; + int CAN_HUNT; + string CIRCLE_SCRIPT; + float DAMAGE_BALL1; + float DAMAGE_BALL2; + float DAMAGE_CLUBS1; + int DAMAGE_CLUBS2; + float DAMAGE_NORM1; + float DAMAGE_NORM2; + string DID_WARCRY; + int FEIGN_THRESHOLD; + string FLINCH_ANIM; + int FLINCH_CHANCE; + int FLINCH_DELAY; + int FLINCH_HEALTH; + float GETUP_DELAY; + string HIT_RECENT; + string ICE_BLAST_SCRIPT; + int IGNORE_ENEMY; + int IS_FLEEING; + int I_AM_TURNABLE; + int MAX_HP; + int MONSTER_WIDTH; + string MOVE_RANGE; + int MOVE_RANGE1; + int MOVE_RANGE2; + int NPC_BOSS_REGEN_RATE; + int NPC_BOSS_RESTORATION; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + string NPC_MOVE_TARGET; + int NPC_NO_RAMP; + int PLAYING_DEAD; + int PURE_FLEE; + int SEE_ENEMY; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_FAKEDEATH1; + string SOUND_FAKEDEATH2; + string SOUND_FALL; + string SOUND_FINAL; + string SOUND_FINAL1; + string SOUND_FINAL2; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_FREEZE; + string SOUND_ICEBLAST; + string SOUND_INTRO1; + string SOUND_INTRO2; + string SOUND_LAUGH; + string SOUND_MANIFEST; + string SOUND_POWERUP; + string SOUND_PUSH1; + string SOUND_PUSH2; + string SOUND_REGEN; + string SOUND_STAGETWO1; + string SOUND_STAGETWO2; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STEP3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_WHACK; + float SPECATK_FREQ_CIRCLE; + float SPECATK_FREQ_FREEZE; + string SPEC_ATK_FREQUENCY; + int STEP_COUNTER; + float STUCK_CHECK_FREQUENCY; + int STUCK_COUNT; + float TAUNT_DELAY; + string WAS_SNOWING; + string XFX_SPRITE; + string XLIGHTNING_SPRITE; + string XSEAL_MODEL; + string XSOUND_FADE; + string XSOUND_HITWALL; + string XSOUND_HOVERLOOP; + string XSOUND_PULSE; + + SkeletonIceLord() + { + NPC_NO_RAMP = 1; + NPC_BOSS_REGEN_RATE = 0; + NPC_BOSS_RESTORATION = 0; + if (StringToLower(GetMapName()) == "ms_snow") + { + NPC_GIVE_EXP = 4000; + NPC_IS_BOSS = 1; + } + else + { + NPC_GIVE_EXP = 1000; + } + SOUND_INTRO1 = "npc/ice_queen_live_beating2.wav"; + SOUND_INTRO2 = "npc/ice_queen_put_that_on_ice2.wav"; + SOUND_STAGETWO1 = "npc/ice_queen_cant_pronounce_loreldians2.wav"; + SOUND_STAGETWO2 = "npc/ice_queen_game2.wav"; + SOUND_FINAL1 = "npc/ice_queen_powah2.wav"; + SOUND_FINAL2 = "npc/ice_queen_die2.wav"; + SOUND_STRUCK1 = "controller/con_pain2.wav"; + SOUND_STRUCK2 = "controller/con_pain3.wav"; + SOUND_ATTACK1 = "zombie/claw_strike1.wav"; + SOUND_ATTACK2 = "zombie/claw_strike2.wav"; + SOUND_ATTACK3 = "zombie/claw_strike3.wav"; + SOUND_FLINCH1 = "npc/ice_queen_pain2.wav"; + SOUND_FLINCH2 = "garg/gar_pain2.wav"; + SOUND_PUSH1 = "npc/ice_queen_throw2.wav"; + SOUND_PUSH2 = "npc/ice_queen_throw3.wav"; + SOUND_FALL = "weapons/mortarhit.wav"; + ANIM_RUN = "walk"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_BASERUN = "walk"; + ANIM_BASEIDLE = "idle1"; + ANIM_BASEWALK = "walk"; + ANIM_SLASH = "attack1"; + ANIM_SMASH = "attack2"; + ANIM_ATTACK = ANIM_SMASH; + ATTACK1_RANGE = 160; + ATTACK2_RANGE = 160; + ATTACK_RANGE = ATTACK1_RANGE; + MOVE_RANGE1 = 80; + MOVE_RANGE2 = 80; + MOVE_RANGE = MOVE_RANGE1; + ATTACK_HITRANGE = 300; + SEE_ENEMY = 0; + IGNORE_ENEMY = 0; + CAN_FLINCH = 0; + FLINCH_ANIM = "bigflinch"; + FLINCH_CHANCE = 10; + FLINCH_DELAY = 1; + CAN_HUNT = 1; + CAN_ATTACK = 1; + NPC_MOVE_TARGET = "enemy"; + FLINCH_HEALTH = 1000; + MAX_HP = 3000; + ATTACK_CLUB_RANGE = 200; + ATTACK_MODE = "normal"; + ANIM_THROW = "throw_scientist"; + SOUND_STEP1 = "debris/glass1.wav"; + SOUND_STEP2 = "debris/glass2.wav"; + SOUND_STEP3 = "debris/glass3.wav"; + STEP_COUNTER = 0; + SOUND_LAUGH = "monsters/skeleton/cal_laugh.wav"; + SOUND_FAKEDEATH1 = "garg/gar_die2.wav"; + SOUND_FAKEDEATH2 = "garg/gar_die1.wav"; + SOUND_DEATH = "npc/undamael2.wav"; + SOUND_FINAL = "gonarch/gon_die1.wav"; + SOUND_WHACK = "zombie/claw_strike1.wav"; + SOUND_REGEN = "x/x_laugh2.wav"; + SOUND_POWERUP = "ambience/particle_suck2.wav"; + ANIM_FAKEDEATH = "dieforward"; + ANIM_DEATH = "dieforward"; + ANIM_DEAD = "dead_on_stomach"; + ANIM_ALTTHROW = "bigflinch"; + ANIM_FLINCH = "flinch"; + TAUNT_DELAY = 2.0; + GETUP_DELAY = 8.0; + SPECATK_FREQ_CIRCLE = 20.0; + SPECATK_FREQ_FREEZE = 20.0; + STUCK_CHECK_FREQUENCY = 3.5; + MONSTER_WIDTH = 40; + FEIGN_THRESHOLD = 500; + DAMAGE_NORM1 = Random(40.0, 55.0); + DAMAGE_NORM2 = Random(30.0, 40.0); + DAMAGE_BALL1 = Random(50.0, 55.0); + DAMAGE_BALL2 = Random(60.0, 80.0); + DAMAGE_CLUBS1 = Random(60.0, 85.0); + DAMAGE_CLUBS2 = 200; + CIRCLE_SCRIPT = "monsters/summon/circle_of_ice_greater"; + XSEAL_MODEL = "weapons/magic/seals.mdl"; + SOUND_MANIFEST = "magic/spawn_loud.wav"; + XSOUND_PULSE = "magic/frost_forward.wav"; + XSOUND_FADE = "magic/frost_reverse.wav"; + XSEAL_MODEL = "weapons/magic/seal_fire_large.mdl"; + XFX_SPRITE = "firemagic.spr"; + Precache(XSEAL_MODEL); + Precache(SOUND_MANIFEST); + Precache(XSOUND_PULSE); + Precache(XSOUND_FADE); + Precache(XFX_SPRITE); + ICE_BLAST_SCRIPT = "monsters/summon/ice_blast"; + SOUND_FREEZE = "magic/freeze.wav"; + XSOUND_HOVERLOOP = "ambience/alienwind1.wav"; + XSOUND_HITWALL = "ambience/alienlaser1.wav"; + XLIGHTNING_SPRITE = "lgtning.spr"; + SOUND_ICEBLAST = "magic/temple.wav"; + Precache(XBLAST_MODEL); + Precache(XSOUND_FREEZE); + Precache(XSOUND_HOVERLOOP); + Precache(XSOUND_HITWALL); + Precache(XLIGHTNING_SPRITE); + Precache("monsters/skeleton_icel.mdl"); + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + SetHealth(MAX_HP); + SetGold(RandomInt(100, 300)); + SetWidth(40); + SetHeight(120); + SetRace("undead"); + int PICK_NAME = RandomInt(1, 2); + if (PICK_NAME == 1) + { + SetName("Ice Bone Lord"); + } + if (PICK_NAME == 2) + { + SetName("Ice Queen"); + } + SetRoam(false); + SetHearingSensitivity(6); + Precache("monsters/skeleton_icel.mdl"); + SetModel("monsters/skeleton_icel.mdl"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + PlayAnim("once", ANIM_IDLE); + SetActionAnim(ANIM_ATTACK); + SetDamageResistance("all", 0.6); + SetDamageResistance("fire", 1.25); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("slash", 0.5); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("lightning", 0.4); + SetDamageResistance("holy", 1.25); + if (G_CURRENT_WEATHER == "snow") + { + WAS_SNOWING = 1; + } + SPEC_ATK_FREQUENCY = SPECATK_FREQ_CIRCLE; + SPEC_ATK_FREQUENCY("spec_attack"); + EmitSound(GetOwner(), 0, SOUND_FREEZE, 10); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 512, 5, 5); + ScheduleDelayedEvent(0.1, "finish_manifest"); + } + + void finish_manifest() + { + EmitSound(GetOwner(), 0, SOUND_ICEBLAST, 10); + } + + void attack_1() + { + if (ATTACK_MODE == "normal") + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", DAMAGE_NORM1, 0.75, GetEntityIndex(GetOwner()), "slash"); + } + if (RandomInt(1, 3) == 1) + { + ANIM_ATTACK = ANIM_SMASH; + } + } + if (ATTACK_MODE == "freeze_ball") + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", DAMAGE_BALL1, 0.8, GetEntityIndex(GetOwner()), "slash"); + } + if (RandomInt(1, 10) == 1) + { + ANIM_ATTACK = ANIM_SMASH; + } + } + if (ATTACK_MODE == "final") + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", DAMAGE_CLUBS1, 0.85, GetEntityIndex(GetOwner()), "blunt"); + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 2, GetEntityIndex(GetOwner())); + } + } + ALT_ATTACK += 1; + if (ALT_ATTACK >= 16) + { + } + ANIM_ATTACK = ANIM_SMASH; + ALT_ATTACK = 0; + } + } + + void attack_2() + { + if (ATTACK_MODE == "normal") + { + ANIM_ATTACK = ANIM_SLASH; + if (GetEntityRange(m_hAttackTarget) < ATTACK2_RANGE) + { + } + npcatk_dodamage(m_hAttackTarget, ATTACK2_RANGE, DAMAGE_NORM2, 1.0); + ApplyEffect(m_hAttackTarget, "effects/effect_push", 1, /* TODO: $relvel */ $relvel(0, 200, 30), 0); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_ATTACK1, 10); + } + if (ATTACK_MODE == "freeze_ball") + { + ANIM_ATTACK = ANIM_SLASH; + if (GetEntityRange(m_hAttackTarget) < ATTACK2_RANGE) + { + } + npcatk_dodamage(m_hAttackTarget, ATTACK2_RANGE, DAMAGE_BALL2, 1.0); + ApplyEffect(m_hAttackTarget, "effects/dot_cold", 5, GetEntityIndex(GetOwner()), RandomInt(3, 5), "none"); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_ATTACK1, 10); + } + if (ATTACK_MODE == "final") + { + ANIM_ATTACK = ANIM_SLASH; + if (GetEntityRange(m_hAttackTarget) < ATTACK2_RANGE) + { + } + npcatk_dodamage(m_hAttackTarget, ATTACK2_RANGE, DAMAGE_CLUBS2, 1.0); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, 300, 60)); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_ATTACK1, 10); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + string MY_HP = GetEntityHealth(GetOwner()); + string OUT_HP = MY_HP; + OUT_HP -= param1; + if (!(ATTACK_MODE != "final")) return; + if (OUT_HP <= FEIGN_THRESHOLD) + { + fall_down(); + } + if (GetEntityHealth(GetOwner()) < 1000) + { + CAN_FLINCH = 1; + } + SetVolume(5); + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), CHAN_BODY, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnFlinch() + { + // PlayRandomSound from: SOUND_FLINCH1, SOUND_FLINCH2 + array sounds = {SOUND_FLINCH1, SOUND_FLINCH2}; + EmitSound(GetOwner(), CHAN_BODY, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if (!(param1)) return; + if (ATTACK_MODE == "normal") + { + if (RandomInt(1, 20) == 1) + { + // PlayRandomSound from: SOUND_PUSH1, SOUND_PUSH2 + array sounds = {SOUND_PUSH1, SOUND_PUSH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("once", ANIM_ALTTHROW); + PASS_THIS_POS = param2; + ScheduleDelayedEvent(0.2, "throw_chummer", GetEntityIndex(param2)); + int DOING_SECONDARY = 1; + } + } + if (ATTACK_MODE == "freeze_ball") + { + if (RandomInt(1, 15) == 1) + { + // PlayRandomSound from: SOUND_PUSH1, SOUND_PUSH2 + array sounds = {SOUND_PUSH1, SOUND_PUSH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("once", ANIM_ALTTHROW); + PASS_THIS_POS = param2; + ScheduleDelayedEvent(0.2, "throw_chummer", GetEntityIndex(param2)); + int DOING_SECONDARY = 1; + } + } + if (ATTACK_MODE == "final") + { + if (RandomInt(1, 20) == 1) + { + // PlayRandomSound from: SOUND_PUSH1, SOUND_PUSH2 + array sounds = {SOUND_PUSH1, SOUND_PUSH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("once", ANIM_ALTTHROW); + PASS_THIS_POS = param2; + ScheduleDelayedEvent(0.2, "throw_chummer", GetEntityIndex(param2)); + int DOING_SECONDARY = 1; + } + } + if ((DOING_SECONDARY)) return; + if (ANIM_ATTACK == ANIM_SMASH) + { + EmitSound(GetOwner(), 0, SOUND_WHACK, 10); + } + } + + void throw_chummer() + { + string MY_NME_POS = GetEntityOrigin(m_hLastStruckByMe); + string MY_ME_POS = GetEntityOrigin(GetOwner()); + float NME_DIST = Distance(MY_NME_POS, MY_ME_POS); + if (!(NME_DIST < ATTACK2_RANGE)) return; + ApplyEffect(PASS_THIS_POS, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 800, 800), 0); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(WAS_SNOWING)) + { + CallExternal("players", "ext_weather_change", "clear"); + } + if (!(G_CHRISTMAS_MODE)) + { + EmitSound(GetOwner(), 0, "debris/bustglass3.wav", 10); + } + if ((G_CHRISTMAS_MODE)) + { + EmitSound(GetOwner(), 0, "npc/happy_hogswatch.wav", 10); + } + Effect("tempent", "gibs", "glassgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 256), 1, 40, 10, 100, 30); + SpawnNPC("monsters/summon/sfx_glassmaker", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); + SetModel("none"); + SetSolid("none"); + UseTrigger("ice_lord_died"); + ScheduleDelayedEvent(0.1, "final_death"); + } + + void walk_step() + { + STEP_COUNTER += 1; + if (STEP_COUNTER == 1) + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 5); + } + if (STEP_COUNTER == 2) + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 5); + } + if (STEP_COUNTER == 3) + { + EmitSound(GetOwner(), 0, SOUND_STEP3, 5); + STEP_COUNTER = 0; + } + } + + void fall_down() + { + if (!(ATTACK_MODE != "final")) return; + npcatk_suspend_ai(); + CANT_TURN = 1; + SetMoveDest("none"); + CAN_FLINCH = 0; + SetHealth(MAX_HP); + SetInvincible(2); + SetMoveDest("none"); + PlayAnim("critical", ANIM_FAKEDEATH); + SetIdleAnim(ANIM_DEAD); + SetMoveAnim(ANIM_DEAD); + SetActionAnim(ANIM_DEAD); + ANIM_ATTACK = ANIM_DEAD; + ANIM_RUN = ANIM_DEAD; + ANIM_IDLE = ANIM_DEAD; + ANIM_WALK = ANIM_DEAD; + IS_FLEEING = 1; + PURE_FLEE = 1; + PLAYING_DEAD = 1; + ScheduleDelayedEvent(1.0, "stay_down_damnit"); + SetMoveSpeed(0.0); + if (ATTACK_MODE == "freeze_ball") + { + ATTACK_MODE = "final"; + EmitSound(GetOwner(), 0, SOUND_FAKEDEATH2, 10); + TAUNT_DELAY("taunt2"); + GETUP_DELAY("get_up"); + } + if (ATTACK_MODE == "normal") + { + ATTACK_MODE = "freeze_ball"; + EmitSound(GetOwner(), 0, SOUND_FAKEDEATH1, 10); + TAUNT_DELAY("taunt1"); + GETUP_DELAY("get_up"); + } + } + + void npcatk_faceattacker() + { + if ((IS_FLEEING)) return; + if ((PLAYING_DEAD)) return; + SetMoveDest(GetEntityIndex(param1)); + LookAt(1024); + } + + void stay_down_damnit() + { + if (!(PLAYING_DEAD)) return; + SetIdleAnim(ANIM_DEAD); + SetMoveAnim(ANIM_DEAD); + SetActionAnim(ANIM_DEAD); + // TODO: UNCONVERTED: setanim ANIM_DEAD + ScheduleDelayedEvent(1.0, "stay_down_damnit"); + } + + void taunt1() + { + EmitSound(GetOwner(), 0, SOUND_STAGETWO1, 10); + SetSayTextRange(2048); + SayText("Hahaaa! I've not had this much fun since the Loreldians were here!"); + } + + void taunt2() + { + EmitSound(GetOwner(), 0, SOUND_FINAL1, 10); + SetSayTextRange(2048); + SayText("Good, good, maybe you are worthy of my full power..."); + } + + void get_up() + { + CANT_TURN = 0; + if (ATTACK_MODE == "freeze_ball") + { + SetSayTextRange(2048); + EmitSound(GetOwner(), 0, SOUND_STAGETWO2, 10); + SayText("Shall we continue this little game?"); + } + SetIdleAnim(ANIM_IDLE); + Effect("glow", GetOwner(), Vector3(128, 128, 255), 512, 3, 3); + PlayAnim("critical", "getup"); + } + + void getup_done() + { + SetSolid("box"); + npcatk_resume_ai(); + ANIM_RUN = ANIM_BASERUN; + ANIM_IDLE = ANIM_BASEIDLE; + ANIM_WALK = ANIM_BASEWALK; + ANIM_ATTACK = ANIM_SMASH; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + SetActionAnim(ANIM_SMASH); + SetRoam(true); + SetInvincible(false); + IS_FLEEING = 0; + PURE_FLEE = 0; + PLAYING_DEAD = 0; + if (ATTACK_MODE != "final") + { + SetMoveSpeed(1.0); + } + if (!(ATTACK_MODE == "final")) return; + Effect("screenfade", "all", 3, 1, Vector3(255, 255, 255), 255, "fadein"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 190, 30, 3.0, 2048); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 512, 5, 5); + SetSayTextRange(2048); + EmitSound(GetOwner(), 0, SOUND_FINAL2, 10); + SayText(NOW + YOU + WILL + ALL + DIE!!!); + ScheduleDelayedEvent(1.0, "give_clubs"); + } + + void give_clubs() + { + STUCK_CHECK_FREQUENCY = 2.5; + EmitSound(GetOwner(), 0, SOUND_POWERUP, 10); + SetModelBody(0, 1); + SetMoveSpeed(3.0); + // TODO: UNCONVERTED: animspeed 2.0 + SetProp(GetOwner(), "animtime", 3.0); + Effect("screenfade", "all", 3, 1, Vector3(255, 255, 255), 128, "fadeout"); + ALT_ATTACK = 1; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(DID_WARCRY)) + { + ScheduleDelayedEvent(1.0, "pre_taunt"); + ScheduleDelayedEvent(5.0, "taunt0"); + PlayAnim("once", ANIM_THROW); + DID_WARCRY = 1; + } + } + + void pre_taunt() + { + SetSayTextRange(2048); + EmitSound(GetOwner(), 0, SOUND_INTRO1, 10); + SayText("Ah , the warm fire of live beating heart..."); + } + + void taunt0() + { + SetSayTextRange(2048); + EmitSound(GetOwner(), 0, SOUND_INTRO2, 10); + SayText("We'll just have to put that on ice."); + } + + void spec_attack() + { + if (ATTACK_MODE == "normal") + { + if (!(PLAYING_DEAD)) + { + } + if ((false)) + { + PlayAnim("critical", ANIM_THROW); + STUCK_COUNT = 0; + EmitSound(GetOwner(), 0, SOUND_MANIFEST, 10); + Effect("glow", GetOwner(), Vector3(128, 128, 255), 80, 3, 0); + ScheduleDelayedEvent(1.5, "circle_of_ice"); + } + SPEC_ATK_FREQUENCY = SPECATK_FREQ_CIRCLE; + } + if (ATTACK_MODE == "freeze_ball") + { + if (!(PLAYING_DEAD)) + { + } + if ((false)) + { + Effect("glow", GetOwner(), Vector3(128, 128, 255), 80, 3, 2); + EmitSound(GetOwner(), 0, SOUND_MANIFEST, 10); + ScheduleDelayedEvent(2.0, "toss_iceball"); + SPEC_ATK_FREQUENCY = SPECATK_FREQ_FREEZE; + } + } + SPEC_ATK_FREQUENCY("spec_attack"); + } + + void circle_of_ice() + { + if ((PLAYING_DEAD)) return; + STUCK_COUNT = 0; + SpawnNPC(CIRCLE_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 10.0, 10.0 + } + + void toss_iceball() + { + if ((PLAYING_DEAD)) return; + string BALL_DEST = /* TODO: $relpos */ $relpos(0, 2000, 0); + EmitSound(GetOwner(), 0, SOUND_ICEBLAST, 10); + SpawnNPC(ICE_BLAST_SCRIPT, /* TODO: $relpos */ $relpos(0, 64, 32), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 10.0, BALL_DEST + } + + void my_target_died() + { + if (!(ATTACK_MODE == "final")) return; + if (!(HIT_RECENT == param1)) return; + SetHealth(MAX_HP); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 255, 5, 5); + EmitSound(GetOwner(), 0, SOUND_REGEN, 10); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(ATTACK_MODE == "final")) return; + if (!(HIT_RECENT == 0)) return; + HIT_RECENT = param1; + ScheduleDelayedEvent(0.5, "hit_recent_reset"); + } + + void hit_recent_reset() + { + HIT_RECENT = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ice_once.as b/scripts/angelscript/monsters/skeleton_ice_once.as new file mode 100644 index 00000000..e29ce4d7 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ice_once.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/skeleton_ice.as" + +namespace MS +{ + +class SkeletonIceOnce : CGameScript +{ + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + SkeletonIceOnce() + { + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ice_warrior.as b/scripts/angelscript/monsters/skeleton_ice_warrior.as new file mode 100644 index 00000000..57da588e --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ice_warrior.as @@ -0,0 +1,161 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonIceWarrior : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BLAST; + string ANIM_SMASH; + string ANIM_SWIPE; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int BOLT_CHECKING; + int BOLT_DAMAGE; + float BOLT_FREQUENCY; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string FREEZE_ATTACK; + float FREEZE_CHANCE; + int ICE_BLASTING; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + int SMASH_DAMAGE; + string SOUND_BOLT; + + SkeletonIceWarrior() + { + SKEL_HP = 1000; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 20.5; + ATTACK_DAMAGE_HIGH = 30.5; + NPC_GIVE_EXP = 120; + SMASH_DAMAGE = "$rand(50,100)"; + ANIM_ATTACK = "attack1"; + ANIM_SWIPE = "attack1"; + ANIM_SMASH = "attack2"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 20; + DROP_GOLD_MAX = 35; + SKEL_RESPAWN_CHANCE = 0.5; + SKEL_RESPAWN_LIVES = 1; + ANIM_BLAST = "rlflinch"; + SOUND_BOLT = "magic/ice_strike.wav"; + BOLT_FREQUENCY = 10.0; + BOLT_DAMAGE = 30; + FREEZE_CHANCE = 0.5; + DROP_ITEM1 = "swords_liceblade"; + DROP_ITEM1_CHANCE = 0.1; + Precache("items/proj_ice_bolt"); + } + + void skeleton_spawn() + { + SetName("Ice Bone Warrior"); + SetRace("undead"); + SetRoam(true); + SetDamageResistance("all", ".7"); + SetDamageResistance("fire", 1.2); + SetDamageResistance("lightning", ".5"); + SetDamageResistance("cold", 0.0); + SetModel("monsters/skeleton.mdl"); + SetHearingSensitivity(5); + SetModelBody(0, 7); + SetModelBody(1, 4); + SetStat("concentration", 30); + SetStat("spellcasting", 30); + } + + void cast_bolts() + { + if (!(IsEntityAlive(GetOwner()))) return; + BOLT_FREQUENCY("cast_bolts"); + if (!(false)) return; + if ((ICE_BLASTING)) return; + if ((PLAYING_DEAD)) return; + ICE_BLASTING = 1; + ScheduleDelayedEvent(0.1, "end_blast"); + PlayAnim("critcal", ANIM_BLAST); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 2048, 0, 1.0, 0); + } + + void end_blast() + { + ICE_BLASTING = 0; + } + + void skele_swing_dodamage() + { + if (!(ICE_BLASTING)) + { + if (!(FREEZE_ATTACK)) + { + if (RandomInt(1, 4) == 1) + { + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/dot_cold", 5, GetOwner(), RandomInt(3, 5), "none"); + } + } + } + if ((FREEZE_ATTACK)) + { + int FREEZE_ROLL = RandomInt(1, 100); + if (FREEZE_ROLL <= FREEZE_CHANCE) + { + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/dot_cold_freeze", 10, GetEntityIndex(GetOwner())); + } + if (FREEZE_ROLL > FREEZE_CHANCE) + { + if ((param1)) + { + SendPlayerMessage(param2, "Ice Bone Warrior attempts to freeze you!"); + } + } + FREEZE_ATTACK = 0; + } + if (!(ICE_BLASTING)) return; + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + EmitSound(GetOwner(), CHAN_VOICE, SOUND_BOLT, 10); + SetMoveDest(param2); + TossProjectile("proj_ice_bolt", /* TODO: $relpos */ $relpos(0, 5, 10), GetEntityIndex(param2), 500, BOLT_DAMAGE, 1, "none"); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((BOLT_CHECKING)) return; + BOLT_CHECKING = 1; + ScheduleDelayedEvent(4.0, "cast_bolts"); + } + + void attack_1() + { + attack_snd(); + DoDamage(m_hLastSeen, ATTACK_RANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + if (RandomInt(1, 20) == 1) + { + ANIM_ATTACK = "attack2"; + } + } + + void attack_2() + { + Effect("glow", GetOwner(), Vector3(128, 128, 255), 80, 2, 2); + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + DoDamage(m_hLastSeen, ATTACK_RANGE, SMASH_DAMAGE, ATTACK_HITCHANCE, "slash"); + FREEZE_ATTACK = 1; + ANIM_ATTACK = "attack1"; + attack_snd(); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ice_warrior_once.as b/scripts/angelscript/monsters/skeleton_ice_warrior_once.as new file mode 100644 index 00000000..7dcd8d9d --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ice_warrior_once.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/skeleton_ice_warrior.as" + +namespace MS +{ + +class SkeletonIceWarriorOnce : CGameScript +{ + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + SkeletonIceWarriorOnce() + { + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_lightning.as b/scripts/angelscript/monsters/skeleton_lightning.as new file mode 100644 index 00000000..7eb40f1a --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_lightning.as @@ -0,0 +1,183 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonLightning : CGameScript +{ + string ANIM_CAST; + string ANIM_RUN; + int ATTACH_WAND; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + string BARRIER_ID; + int BARRIER_RAD; + string DID_WARCRY; + float DMG_BARRIER; + float DMG_ZAP; + float DOT_ZAP; + float DUR_ZAP; + float FREQ_ZAP; + int GOLD_BAGS; + int GOLD_BAGS_PPLAYER; + int GOLD_MAX_BAGS; + int GOLD_PER_BAG; + int GOLD_RADIUS; + int NPC_GIVE_EXP; + string SET_GREEK; + int SKEL_HP; + string SOUND_BARRIER_REPELL; + string SOUND_BARRIER_SPAWN; + string SOUND_LAUGH; + string SOUND_WARCRY; + int ZAP_ACTIVE; + float ZAP_FREQ; + string ZAP_LIST; + int ZAP_RANGE; + + SkeletonLightning() + { + ANIM_RUN = "run"; + ANIM_CAST = "castspell"; + GOLD_BAGS = 1; + GOLD_BAGS_PPLAYER = 1; + GOLD_PER_BAG = 50; + GOLD_RADIUS = 64; + GOLD_MAX_BAGS = 4; + SOUND_LAUGH = "monsters/skeleton/cal_laugh.wav"; + SOUND_WARCRY = "monsters/skeleton/calrain3.wav"; + SKEL_HP = 1000; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 15.5; + ATTACK_DAMAGE_HIGH = 25.5; + NPC_GIVE_EXP = 400; + DMG_ZAP = Random(40, 60); + DOT_ZAP = 10.0; + DUR_ZAP = 5.0; + DMG_BARRIER = 10.0; + BARRIER_RAD = 96; + ZAP_FREQ = Random(10, 15); + ZAP_RANGE = 1024; + ATTACH_WAND = 0; + FREQ_ZAP = 30.0; + SOUND_BARRIER_REPELL = "doors/aliendoor3.wav"; + SOUND_BARRIER_SPAWN = "magic/spawn.wav"; + } + + void skeleton_spawn() + { + SetName("Lightning Forged Skeleton"); + SetRace("undead"); + SetRoam(true); + SetDamageResistance("all", ".7"); + SetModel("monsters/skeleton_enraged.mdl"); + SetHearingSensitivity(8); + SetModelBody(0, 6); + SetModelBody(1, 8); + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + SetMoveAnim("sitstand"); + SetIdleAnim("sitstand"); + SetDamageResistance("lightning", 0.0); + string MY_SKY = GetMonsterProperty("origin"); + MY_SKY += Vector3(0, 0, 4096); + string MY_CENTER = GetEntityOrigin(GetOwner()); + MY_CENTER += Vector3(0, 0, -48); + EmitSound(GetOwner(), 0, "weather/lightning.wav", 10); + Effect("beam", "point", "lgtning.spr", 120, MY_CENTER, MY_SKY, Vector3(128, 64, 255), 200, 3.0, 1.0); + ZAP_FREQ("zap_check"); + ScheduleDelayedEvent(2.0, "stand_complete"); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + } + } + + void stand_complete() + { + SetIdleAnim("idle1"); + if ((CYCLED_UP)) return; + SetMoveAnim(ANIM_WALK); + } + + void zap_check() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(m_hAttackTarget != "unset")) return; + ZAP_LIST = FindEntitiesInSphere("enemy", ZAP_RANGE); + if (!(ZAP_LIST != "none")) return; + EmitSound(GetOwner(), 3, SOUND_WARCRY, 10); + EmitSound(GetOwner(), 1, SOUND_BARRIER_SPAWN, 10); + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_CAST); + ClientEvent("new", "all", "monsters/skeleton_lightning_cl", GetEntityIndex(GetOwner()), BARRIER_RAD, Vector3(255, 0, 0), DUR_ZAP, 1, 1); + BARRIER_ID = "game.script.last_sent_id"; + ZAP_ACTIVE = 1; + DUR_ZAP("stop_zapping"); + ScheduleDelayedEvent(1.0, "zap_scan_loop"); + ZAP_FREQ("zap_check"); + } + + void zap_scan_loop() + { + if (!(ZAP_ACTIVE)) return; + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(1.0, "zap_scan_loop"); + string L_ZAP_ORG = GetEntityOrigin(GetOwner()); + L_ZAP_ORG += "z"; + ClientEvent("update", "all", BARRIER_ID, "clear_beams"); + XDoDamage(L_ZAP_ORG, ZAP_RANGE, DMG_ZAP, 0, GetOwner(), GetOwner(), "none", "lightning_effect", "dmgevent:zap"); + } + + void zap_dodamage() + { + if (!(param1)) return; + string CUR_TARG = param2; + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_ZAP); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + ClientEvent("update", "all", BARRIER_ID, "add_beam", GetEntityIndex(CUR_TARG)); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + if (GetEntityRange(CUR_TARG) > BARRIER_RAD) + { + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(0, 500, 0))); + } + else + { + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 110))); + EmitSound(GetOwner(), 1, SOUND_BARRIER_REPELL, 10); + } + } + + void stop_zapping() + { + ZAP_ACTIVE = 0; + ClientEvent("update", "all", BARRIER_ID, "end_fx"); + npcatk_resume_ai(); + npcatk_resume_movement(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(ZAP_ACTIVE)) return; + ClientEvent("update", "all", BARRIER_ID, "end_fx"); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_lightning_cl.as b/scripts/angelscript/monsters/skeleton_lightning_cl.as new file mode 100644 index 00000000..faa3fc0b --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_lightning_cl.as @@ -0,0 +1,162 @@ +#pragma context client + +namespace MS +{ + +class SkeletonLightningCl : CGameScript +{ + string CL_AUTO_LIFT; + string CL_COLOR; + string CL_DURATION; + string CL_FOLLOW; + string CL_RADIUS; + int CYCLE_ANGLE; + int FX_ACTIVE; + int GO_AWAY; + string OWNER_IDX; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SPRITE_SCALE; + int TOTAL_OFS; + int TURN_INC; + + SkeletonLightningCl() + { + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + } + + void client_activate() + { + OWNER_IDX = param1; + CL_RADIUS = param2; + CL_COLOR = param3; + CL_DURATION = param4; + CL_AUTO_LIFT = param5; + CL_FOLLOW = param6; + LogDebug("*** barrier_activate idx OWNER_IDX rad CL_RADIUS col CL_COLOR dur CL_DURATION alift CL_AUTO_LIFT fol CL_FOLLOW"); + CL_DURATION("end_fx"); + CYCLE_ANGLE = 0; + ScheduleDelayedEvent(0.1, "spriteify"); + } + + void spriteify() + { + TOTAL_OFS = 64; + if (CL_RADIUS <= 256) + { + SPRITE_SCALE = 0.75; + } + else + { + SPRITE_SCALE = 1.0; + } + TURN_INC = 20; + for (int i = 0; i < 18; i++) + { + createsprite(); + } + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(OWNER_IDX, "origin"); + CYCLE_ANGLE += TURN_INC; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, CL_RADIUS, 36)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", l.pos, "setup_sprite1_sparkle", "sprite_update"); + } + + void setup_sprite1_sparkle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", CL_DURATION); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendercolor", CL_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", CYCLE_ANGLE); + } + + void sprite_update() + { + if (!(GO_AWAY)) + { + if ((CL_FOLLOW)) + { + } + string SPRITE_ORG = /* TODO: $getcl */ $getcl(OWNER_IDX, "origin"); + string MY_ANGLE = "game.tempent.fuser1"; + string SPRITE_VOF = (SPRITE_ORG).z; + SPRITE_VOF += 48; + SPRITE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, MY_ANGLE, 0), Vector3(0, CL_RADIUS, SPRITE_VOF)); + ClientEffect("tempent", "set_current_prop", "origin", SPRITE_ORG); + } + else + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 400)); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", -4.0); + } + } + + void end_fx() + { + clear_beams(); + clear_sprites(); + } + + void clear_sprites() + { + GO_AWAY = 1; + FX_ACTIVE = 0; + sprite_update(); + ScheduleDelayedEvent(5.0, "remove_me"); + } + + void remove_me() + { + if ((CL_AUTO_LIFT)) + { + CL_AUTO_LIFT = 0; + clear_sprites(); + } + else + { + RemoveScript(); + } + } + + void clear_beams() + { + ClientEffect("beam_update", "removeall"); + } + + void add_beam() + { + ClientEffect("beam_ents", OWNER_IDX, 1, param1, 2, "lgtning.spr", 1.0, 1, 1, 255, 100, 30, Vector3(1, 1, 0)); + ClientEffect("spark", OWNER_IDX, 2); + int L_RND_SND = RandomInt(1, 3); + if (L_RND_SND == 1) + { + string L_SOUND = SOUND_SHOCK1; + } + if (L_RND_SND == 2) + { + string L_SOUND = SOUND_SHOCK2; + } + if (L_RND_SND == 3) + { + string L_SOUND = SOUND_SHOCK3; + } + EmitSound3D(L_SOUND, 10, /* TODO: $getcl */ $getcl(param1, "origin"), 0.8, 0, RandomInt(80, 120)); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_mage.as b/scripts/angelscript/monsters/skeleton_mage.as new file mode 100644 index 00000000..07dcedad --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_mage.as @@ -0,0 +1,757 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_pain.as" + +namespace MS +{ + +class SkeletonMage : CGameScript +{ + int AM_SKELETON; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH_IDLE; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_PROJECTILE; + string ANIM_RANGED_ATTACK; + string ANIM_RUN; + string ANIM_SEAL; + string ANIM_SLAM; + string ANIM_SWIPE; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MELERANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float BPAIN_FLINCH_HEALTH; + string BPAIN_FLINCH_TOKENS; + float BPAIN_FREQ_FLINCH; + float BPAIN_PAIN_HEALTH; + int BPAIN_USE_FLINCH; + int BPAIN_USE_PAIN; + string CL_FX_IDX; + string CL_LAST_UPDATE_TIME; + string CUR_PROJ_ELEMENT; + string CUST_ELEMENT_LIST; + int DMG_CLAW; + int DMG_KICK; + int DMG_PROJECTILE; + int DMG_SEAL; + int DMG_SLAM; + string DOT_ELEMENT; + int DROP_GOLD; + string DROP_GOLD_AMT; + string ELEMENT_COLOR; + string ELEMENT_EFFECT; + string ELEMENT_IDX; + string ELEMENT_LIST; + string ELEMENT_SEAL_IDX; + string ELEMENT_TYPE; + float FREQ_CL_UPDATE; + float FREQ_KICK; + string KICK_ENABLED; + string MISS_COUNT; + string NEXT_CL_UPDATE; + string NEXT_KICK; + int NPC_GIVE_EXP; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_FOV; + int NPC_PROXACT_IFSEEN; + int NPC_PROXACT_PLAYERID; + int NPC_PROXACT_RANGE; + int NPC_PROXACT_TRIPPED; + int NPC_PROX_ACTIVATE; + int NPC_RANGED; + int PLAYING_DEAD; + string PROJ_ELEMENT_TARGET; + string PROJ_ELEMENT_TYPE; + int RANGE_PROJECTILE; + int RANGE_SEAL; + int RANGE_SWIPE; + int RESTRICTED_ELEMENTS; + string SEAL_ORG; + int SEAL_RAD; + int SKELE_BASE_ROAM; + string SKELE_DEFAULT_ANIM_IDLE; + string SKELE_DEFAULT_ANIM_RUN; + string SKELE_DEFAULT_ANIM_WALK; + string SKELE_FIRST_RAISE; + int SKELE_GOLD; + int SKELE_HEARING; + string SKELE_ORG_NAME; + string SOUND_CLAW_HIT; + string SOUND_CLAW_MISS; + string SOUND_DEATH; + string SOUND_ELEMENT_CHARGE; + string SOUND_ELEMENT_FIRE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SWIPE_COUNT; + string TOGGLE_ADD; + + SkeletonMage() + { + NPC_GIVE_EXP = 600; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "walk"; + ANIM_ATTACK = "anim_projectile"; + ANIM_DEATH = "dieforward"; + ANIM_PROJECTILE = "anim_projectile"; + ANIM_SWIPE = "attack1"; + ANIM_SLAM = "attack2"; + ANIM_SEAL = "anim_seal"; + ANIM_KICK = "anim_roundhouse"; + ANIM_DEATH_IDLE = "dead_on_stomach"; + ANIM_RANGED_ATTACK = "anim_projectile"; + DMG_CLAW = 50; + DMG_SLAM = 100; + DMG_KICK = 100; + DMG_SEAL = 400; + DMG_PROJECTILE = 400; + NPC_RANGED = 1; + ATTACK_MOVERANGE = 600; + ATTACK_RANGE = 1024; + ATTACK_HITRANGE = 1024; + DROP_GOLD = 1; + SKELE_GOLD = 500; + AM_SKELETON = 1; + SKELE_HEARING = 10; + FREQ_KICK = 30.0; + ATTACK_MELERANGE = 96; + RANGE_PROJECTILE = 1024; + RANGE_SEAL = 640; + RANGE_SWIPE = 64; + SEAL_RAD = 140; + CUST_ELEMENT_LIST = ""; + FREQ_CL_UPDATE = 20.0; + BPAIN_USE_PAIN = 1; + BPAIN_USE_FLINCH = 1; + BPAIN_FREQ_FLINCH = Random(10.0, 20.0); + BPAIN_FLINCH_HEALTH = 0.75; + BPAIN_PAIN_HEALTH = 1.0; + BPAIN_FLINCH_TOKENS = "flinchsmall;flinch;bigflinch;laflinch;raflinch;llflinch;rlflinch"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "monsters/undeadz/c_shadow_hit1.wav"; + SOUND_PAIN2 = "monsters/undeadz/c_shadow_hit2.wav"; + SOUND_DEATH = "monsters/undeadz/c_skeltwiz_bat1.wav"; + SOUND_CLAW_MISS = "zombie/claw_miss1.wav"; + SOUND_CLAW_HIT = "zombie/claw_strike1.wav"; + } + + void game_precache() + { + Precache("3dmflagry.spr"); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 magic/sps_fogfire.wav + EmitSound(0, 0, "magic/sps_fogfire.wav"); + // svplaysound: svplaysound 0 0 magic/cold_breath.wav + EmitSound(0, 0, "magic/cold_breath.wav"); + // svplaysound: svplaysound 0 0 magic/bolt_loop.wav + EmitSound(0, 0, "magic/bolt_loop.wav"); + // svplaysound: svplaysound 0 0 magic/flame_loop.wav + EmitSound(0, 0, "magic/flame_loop.wav"); + } + + void OnSpawn() override + { + skeleton_attribs(); + skele_spawn(); + SKELE_DEFAULT_ANIM_WALK = ANIM_WALK; + SKELE_DEFAULT_ANIM_RUN = ANIM_RUN; + SKELE_DEFAULT_ANIM_IDLE = ANIM_IDLE; + DROP_GOLD_AMT = SKELE_GOLD; + SKELE_BASE_ROAM = 1; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + SetHearingSensitivity(SKELE_HEARING); + SetBloodType("none"); + SetRace("undead"); + ScheduleDelayedEvent(0.5, "reduce_xp_by_element"); + } + + void reduce_xp_by_element() + { + if (!(RESTRICTED_ELEMENTS)) return; + int L_SHORT_ELEMENTS = 4; + string L_CUR_ELEMENTS = GetTokenCount(CUST_ELEMENT_LIST, ";"); + L_SHORT_ELEMENTS -= L_CUR_ELEMENTS; + if (L_SHORT_ELEMENTS > 0) + { + L_SHORT_ELEMENTS *= 0.1; + float L_XP_REDUCT = 1.0; + L_XP_REDUCT -= L_SHORT_ELEMENTS; + ext_reduct_xp(L_XP_REDUCT); + } + } + + void skele_spawn() + { + SetName("Skeletal Mage"); + SetHealth(5000); + SetModel("monsters/skeletonDX.mdl"); + SetWidth(32); + SetHeight(72); + } + + void skeleton_attribs() + { + if (!(STONE_SKELETON)) + { + SetDamageResistance("slash", 0.7); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("blunt", 1.2); + SetDamageResistance("fire", 1.25); + SetDamageResistance("holy", 1.5); + SetDamageResistance("cold", 0.5); + SetDamageResistance("poison", 0.0); + } + else + { + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.1); + } + } + + void npc_selectattack() + { + if (ELEMENT_TYPE == "ELEMENT_TYPE") + { + pick_element(); + } + if (GetEntityRange(m_hAttackTarget) < RANGE_PROJECTILE) + { + ANIM_ATTACK = ANIM_PROJECTILE; + } + if (GetEntityRange(m_hAttackTarget) < RANGE_SEAL) + { + ANIM_ATTACK = ANIM_RANGED_ATTACK; + } + if (GetEntityRange(m_hAttackTarget) < RANGE_SWIPE) + { + if (SWIPE_COUNT < 4) + { + ANIM_ATTACK = ANIM_SWIPE; + } + else + { + ANIM_ATTACK = ANIM_SLAM; + } + if ((KICK_ENABLED)) + { + if (GetGameTime() > NEXT_KICK) + { + } + ANIM_ATTACK = ANIM_KICK; + } + } + } + + void frame_swipe() + { + SWIPE_COUNT += 1; + if (!(KICK_ENABLED)) + { + if (SWIPE_COUNT > 2) + { + } + KICK_ENABLED = 1; + } + XDoDamage(m_hAttackTarget, ATTACK_MELERANGE, DMG_CLAW, 0.9, GetOwner(), GetOwner(), "none", "slash", "dmgevent:swipe"); + } + + void frame_slam() + { + SWIPE_COUNT = 0; + XDoDamage(m_hAttackTarget, ATTACK_MELERANGE, DMG_SLAM, 0.8, GetOwner(), GetOwner(), "none", "slash", "dmgevent:slam"); + } + + void swipe_dodamage() + { + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_CLAW_MISS, 10); + } + else + { + MISS_COUNT = 0; + EmitSound(GetOwner(), 0, SOUND_CLAW_HIT, 10); + if (GetRelationship(param2) == "enemy") + { + } + apply_element_dot(GetEntityIndex(param2)); + } + } + + void slam_dodamage() + { + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_CLAW_MISS, 10); + } + else + { + MISS_COUNT = 0; + EmitSound(GetOwner(), 0, SOUND_CLAW_HIT, 10); + if (GetRelationship(param2) == "enemy") + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 400, 110)); + ApplyEffect(param2, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + apply_element_dot(GetEntityIndex(param2)); + } + } + + void frame_kick_start() + { + NEXT_KICK = GetGameTime(); + NEXT_KICK += FREQ_KICK; + Effect("beam", "follow", "lgtning.spr", GetOwner(), 2, 1, 1.5, 255, Vector3(128, 128, 255)); + } + + void frame_kick_land() + { + XDoDamage(m_hAttackTarget, ATTACK_MELERANGE, DMG_KICK, 1.0, GetOwner(), GetOwner(), "none", "slash", "dmgevent:kick"); + } + + void kick_dodamage() + { + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_CLAW_MISS, 10); + } + else + { + EmitSound(GetOwner(), 0, SOUND_CLAW_HIT, 10); + MISS_COUNT = 0; + if (GetRelationship(param2) == "enemy") + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 2000, 200)); + ApplyEffect(param2, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + apply_element_dot(GetEntityIndex(param2)); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetGameTime() > NEXT_CL_UPDATE) + { + update_cl_fx(); + } + if (m_hAttackTarget != "unset") + { + if (MISS_COUNT > 5) + { + MISS_COUNT = 0; + if (!(NPC_IS_TURRET)) + { + } + chicken_run(Random(3.0, 5.0)); + } + } + } + + void update_cl_fx() + { + NEXT_CL_UPDATE = GetGameTime(); + NEXT_CL_UPDATE += FREQ_CL_UPDATE; + string L_DUR = FREQ_CL_UPDATE; + L_DUR += 0.1; + if (CL_FX_IDX != "CL_FX_IDX") + { + ClientEvent("update", "all", CL_FX_IDX, "end_effect"); + } + ClientEvent("new", "all", "monsters/skeleton_mage_cl", GetEntityIndex(GetOwner()), L_DUR); + CL_FX_IDX = "game.script.last_sent_id"; + CL_LAST_UPDATE_TIME = GetGameTime(); + } + + void cycle_up() + { + float L_TIME_SINCE_LAST_UPDATE = GetGameTime(); + L_TIME_SINCE_LAST_UPDATE -= CL_LAST_UPDATE_TIME; + if (L_TIME_SINCE_LAST_UPDATE > 5.0) + { + ClientEvent("update_cl_fx"); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("update", "all", CL_FX_IDX, "end_effect"); + } + + void frame_projectile_start() + { + MISS_COUNT += 1; + pick_element(); + EmitSound(GetOwner(), 0, SOUND_ELEMENT_CHARGE, 10); + ClientEvent("update", "all", CL_FX_IDX, "show_orb", ELEMENT_COLOR); + } + + void frame_projectile_fire() + { + EmitSound(GetOwner(), 0, SOUND_ELEMENT_FIRE, 10); + ClientEvent("update", "all", CL_FX_IDX, "hide_orb"); + PROJ_ELEMENT_TARGET = m_hAttackTarget; + TossProjectile("proj_elemental_guided", GetEntityProperty(GetOwner(), "attachpos"), "none", 100, 0, 10, "none"); + if (!(GetEntityRange(m_hAttackTarget) < RANGE_SEAL)) return; + ANIM_RANGED_ATTACK = ANIM_SEAL; + } + + void frame_seal_start() + { + pick_element(); + SEAL_ORG = GetEntityOrigin(m_hAttackTarget); + SEAL_ORG = "z"; + ClientEvent("update", "all", CL_FX_IDX, "show_seal_warning", SEAL_ORG, SEAL_RAD, ELEMENT_SEAL_IDX, ELEMENT_COLOR); + } + + void frame_seal_create() + { + ClientEvent("new", "all", "effects/sfx_seal_instant", SEAL_ORG, ELEMENT_TYPE, SEAL_RAD, ELEMENT_SEAL_IDX); + SEAL_ORG += "z"; + string L_DMG_TYPE = ELEMENT_TYPE; + L_DMG_TYPE += "_effect"; + XDoDamage(SEAL_ORG, SEAL_RAD, DMG_SEAL, 0, GetOwner(), GetOwner(), "none", L_DMG_TYPE, "dmgevent:seal"); + ANIM_RANGED_ATTACK = ANIM_PROJECTILE; + } + + void seal_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + apply_element_dot(GetEntityIndex(param2)); + MISS_COUNT = 0; + } + + void apply_element_dot() + { + if (ELEMENT_TYPE == "ELEMENT_TYPE") + { + pick_element(); + } + string L_ELEMENT_TYPE = ELEMENT_TYPE; + string L_ELEMENT_EFFECT = ELEMENT_EFFECT; + string L_DOT_ELEMENT = DOT_ELEMENT; + if ((param2).findFirst(PARAM) == 0) + { + string L_ELEMENT_TYPE = param2; + } + if (L_ELEMENT_TYPE != ELEMENT_TYPE) + { + if (L_ELEMENT_TYPE == "fire") + { + string L_ELEMENT_EFFECT = "effects/dot_fire"; + int L_DOT_ELEMENT = 100; + } + else + { + if (L_ELEMENT_TYPE == "cold") + { + int L_DOT_ELEMENT = 30; + } + else + { + if (L_ELEMENT_TYPE == "lightning") + { + string L_ELEMENT_EFFECT = "effects/dot_lightning"; + int L_DOT_ELEMENT = 75; + } + else + { + if (L_ELEMENT_TYPE == "poison") + { + string L_ELEMENT_EFFECT = "effects/dot_poison"; + int L_DOT_ELEMENT = 50; + } + } + } + } + } + if (L_ELEMENT_TYPE != "cold") + { + ApplyEffect(param1, L_ELEMENT_EFFECT, 5.0, GetEntityIndex(GetOwner()), L_DOT_ELEMENT); + } + else + { + if (/* TODO: $get_takedmg */ $get_takedmg(param1, "cold") < 0.75) + { + ApplyEffect(param1, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), L_DOT_ELEMENT); + } + else + { + ApplyEffect(param1, "effects/dot_cold_freeze", 5.0, GetEntityIndex(GetOwner()), L_DOT_ELEMENT); + } + } + } + + void pick_element() + { + if ((RESTRICTED_ELEMENTS)) + { + ELEMENT_LIST = CUST_ELEMENT_LIST; + } + else + { + ELEMENT_LIST = "fire;cold;lightning;poison"; + } + string L_N_ELEMENTS = GetTokenCount(ELEMENT_LIST, ";"); + L_N_ELEMENTS -= 1; + if (ELEMENT_IDX > L_N_ELEMENTS) + { + ELEMENT_IDX = 0; + } + ELEMENT_TYPE = GetToken(ELEMENT_LIST, ELEMENT_IDX, ";"); + if (ELEMENT_TYPE == "fire") + { + ELEMENT_COLOR = Vector3(255, 0, 0); + ELEMENT_SEAL_IDX = 32; + SOUND_ELEMENT_CHARGE = "magic/fireball_powerup.wav"; + SOUND_ELEMENT_FIRE = "magic/fireball_strike.wav"; + ELEMENT_EFFECT = "effects/dot_fire"; + DOT_ELEMENT = 100; + } + else + { + if (ELEMENT_TYPE == "cold") + { + ELEMENT_COLOR = Vector3(128, 128, 255); + ELEMENT_SEAL_IDX = 33; + SOUND_ELEMENT_CHARGE = "magic/frost_reverse.wav"; + SOUND_ELEMENT_FIRE = "magic/ice_strike2.wav"; + DOT_ELEMENT = 30; + } + else + { + if (ELEMENT_TYPE == "lightning") + { + ELEMENT_COLOR = Vector3(255, 255, 0); + ELEMENT_SEAL_IDX = 34; + SOUND_ELEMENT_CHARGE = "magic/bolt_start.wav"; + SOUND_ELEMENT_FIRE = "magic/bolt_end.wav"; + ELEMENT_EFFECT = "effects/dot_lightning"; + DOT_ELEMENT = 75; + } + else + { + if (ELEMENT_TYPE == "poison") + { + ELEMENT_COLOR = Vector3(0, 255, 0); + ELEMENT_SEAL_IDX = 35; + SOUND_ELEMENT_CHARGE = "bullchicken/bc_attack1.wav"; + SOUND_ELEMENT_FIRE = "bullchicken/bc_attack3.wav"; + ELEMENT_EFFECT = "effects/dot_poison"; + DOT_ELEMENT = 50; + } + } + } + } + PROJ_ELEMENT_TYPE = ELEMENT_TYPE; + if ((TOGGLE_ADD)) + { + TOGGLE_ADD = 0; + int EXIT_SUB = 1; + } + else + { + TOGGLE_ADD = 1; + } + if ((EXIT_SUB)) return; + ELEMENT_IDX += 1; + } + + void use_fire() + { + RESTRICTED_ELEMENTS = 1; + if (CUST_ELEMENT_LIST.length() > 0) CUST_ELEMENT_LIST += ";"; + CUST_ELEMENT_LIST += "fire"; + } + + void use_cold() + { + RESTRICTED_ELEMENTS = 1; + if (CUST_ELEMENT_LIST.length() > 0) CUST_ELEMENT_LIST += ";"; + CUST_ELEMENT_LIST += "cold"; + } + + void use_lightning() + { + RESTRICTED_ELEMENTS = 1; + if (CUST_ELEMENT_LIST.length() > 0) CUST_ELEMENT_LIST += ";"; + CUST_ELEMENT_LIST += "lightning"; + } + + void use_poison() + { + RESTRICTED_ELEMENTS = 1; + if (CUST_ELEMENT_LIST.length() > 0) CUST_ELEMENT_LIST += ";"; + CUST_ELEMENT_LIST += "poison"; + } + + void ext_proj_elemental_hit() + { + CUR_PROJ_ELEMENT = param2; + string L_DMG_TYPE = CUR_PROJ_ELEMENT; + L_DMG_TYPE += "_effect"; + XDoDamage(param1, 128, DMG_PROJECTILE, 0.1, GetOwner(), GetOwner(), "none", L_DMG_TYPE, "dmgevent:proj"); + } + + void proj_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + apply_element_dot(GetEntityIndex(param2), CUR_PROJ_ELEMENT); + } + + void skeleton_wakeup_call() + { + skeleton_wake_up(); + } + + void make_sleeper() + { + SetHearingSensitivity(0); + SetRoam(false); + SetInvincible(true); + SetMoveDest("none"); + npcatk_suspend_ai(); + NPC_PROXACT_TRIPPED = 0; + NPC_PROXACT_IFSEEN = 0; + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 128; + NPC_PROXACT_EVENT = "skeleton_wake_up"; + NPC_PROXACT_FOV = 0; + PLAYING_DEAD = 1; + if (!(STONE_SKELETON)) + { + SetSolid("none"); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + SetIdleAnim(ANIM_DEATH_IDLE); + SetMoveAnim(ANIM_DEATH_IDLE); + PlayAnim("critical", ANIM_DEATH_IDLE); + } + else + { + skele_stone_sleep(); + } + } + + void skele_target_disturber() + { + if (!(IsEntityAlive(NPC_PROXACT_PLAYERID))) return; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + npcatk_settarget(NPC_PROXACT_PLAYERID); + NPC_PROXACT_PLAYERID = 0; + } + + void skeleton_wake_up() + { + if (!(STONE_SKELETON)) + { + SKELE_FIRST_RAISE = 1; + skele_rebirth(); + } + else + { + SetHearingSensitivity(SKELE_HEARING); + ANIM_RUN = SKELE_DEFAULT_ANIM_RUN; + ANIM_WALK = SKELE_DEFAULT_ANIM_WALK; + ANIM_IDLE = SKELE_DEFAULT_ANIM_IDLE; + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_WALK); + SetInvincible(false); + PLAYING_DEAD = 0; + if (BASE_FRAMERATE == "BASE_FRAMERATE") + { + SetAnimFrameRate(1.0); + } + else + { + SetAnimFrameRate(BASE_FRAMERATE); + } + SetRoam(SKELE_BASE_ROAM); + npcatk_resume_ai(); + skele_refresh_name(); + LogDebug("Stone Skeleton Awaken GetEntityName(NPC_PROXACT_PLAYERID)"); + if ((IsEntityAlive(NPC_PROXACT_PLAYERID))) + { + } + ScheduleDelayedEvent(1.1, "skele_target_disturber"); + } + } + + void skele_hide_name() + { + SKELE_ORG_NAME = GetMonsterProperty("name.full"); + SetRace("none"); + SetName(""); + } + + void skele_refresh_name() + { + if (SKELE_ORG_NAME != "SKELE_ORG_NAME") + { + SetName(SKELE_ORG_NAME); + SetRace("undead"); + } + } + + void make_deep_sleeper() + { + if (!(STONE_SKELETON)) + { + SetHearingSensitivity(0); + SetRoam(false); + PLAYING_DEAD = 1; + SetSolid("none"); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + SetMoveDest("none"); + SKELE_FIRST_RAISE = 1; + SetIdleAnim(ANIM_DEATH_IDLE); + SetMoveAnim(ANIM_DEATH_IDLE); + PlayAnim("critical", ANIM_DEATH_IDLE); + npcatk_suspend_ai(); + } + else + { + skele_stone_sleep(); + } + SetInvincible(true); + } + + void skele_stone_sleep() + { + SetHearingSensitivity(0); + PLAYING_DEAD = 1; + skele_hide_name(); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + SetAnimFrameRate(0); + SetInvincible(true); + SetRoam(false); + npcatk_suspend_ai(); + PlayAnim("hold", ANIM_IDLE); + SetMoveDest("none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_mage_cl.as b/scripts/angelscript/monsters/skeleton_mage_cl.as new file mode 100644 index 00000000..8c0378d1 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_mage_cl.as @@ -0,0 +1,190 @@ +#pragma context server + +namespace MS +{ + +class SkeletonMageCl : CGameScript +{ + int ATTACK_LIGHT_ACTIVE; + string ATTACK_LIGHT_COLOR; + string ATTACK_LIGHT_ID; + int ATTACK_LIGHT_RAD; + string ATTACK_LIGHT_REMOVED; + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + string GLOW_COLOR; + int GLOW_RAD; + string SEAL_COLOR; + string SEAL_GLOW_RAD; + int SEAL_LIGHT_ACTIVE; + string SEAL_LIGHT_ID; + int SEAL_LIGHT_RADCOUNT; + string SEAL_LIGHT_REMOVED; + string SEAL_OFS; + string SEAL_ORIGIN; + string SEAL_RAD; + string SKEL_LIGHT_ID; + + SkeletonMageCl() + { + GLOW_RAD = 128; + GLOW_COLOR = Vector3(255, 128, 64); + } + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + SetCallback("render", "enable"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), GLOW_RAD, GLOW_COLOR, FX_DURATION); + SKEL_LIGHT_ID = "game.script.last_light_id"; + FX_ACTIVE = 1; + FX_DURATION("end_effect"); + } + + void game_prerender() + { + if (!(/* TODO: $getcl */ $getcl(FX_OWNER, "exists"))) return; + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + if ((ATTACK_LIGHT_ACTIVE)) + { + if (ATTACK_LIGHT_RAD < 256) + { + ATTACK_LIGHT_RAD += 1; + } + ClientEffect("light", ATTACK_LIGHT_ID, L_POS, ATTACK_LIGHT_RAD, ATTACK_LIGHT_COLOR, 0.1); + } + else + { + if (!(ATTACK_LIGHT_REMOVED)) + { + } + if (ATTACK_LIGHT_ID > 0) + { + } + ATTACK_LIGHT_REMOVED = 1; + ClientEffect("light", ATTACK_LIGHT_ID, Vector3(5000, 0, 0), 1, Vector3(1, 1, 1), 0.1); + } + if ((SEAL_LIGHT_ACTIVE)) + { + if (SEAL_LIGHT_RADCOUNT < SEAL_GLOW_RAD) + { + SEAL_LIGHT_RADCOUNT += 1; + } + ClientEffect("light", SEAL_LIGHT_ID, L_POS, SEAL_LIGHT_RADCOUNT, SEAL_COLOR, 0.1); + } + else + { + if (!(SEAL_LIGHT_REMOVED)) + { + } + if (SEAL_LIGHT_ID > 0) + { + } + SEAL_LIGHT_REMOVED = 1; + ClientEffect("light", SEAL_LIGHT_ID, Vector3(5000, 0, 0), 1, Vector3(1, 1, 1), 0.1); + } + } + + void end_effect() + { + FX_ACTIVE = 0; + SEAL_LIGHT_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_effect"); + } + + void remove_effect() + { + RemoveScript(); + } + + void show_orb() + { + ATTACK_LIGHT_COLOR = param1; + ClientEffect("tempent", "sprite", "3dmflagry.spr", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "setup_orb_sprite", "update_orb_sprite"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), 10, ATTACK_LIGHT_COLOR, 0.1); + ATTACK_LIGHT_ID = "game.script.last_light_id"; + ATTACK_LIGHT_ACTIVE = 1; + ATTACK_LIGHT_RAD = 10; + ATTACK_LIGHT_REMOVED = 0; + } + + void hide_orb() + { + ATTACK_LIGHT_ACTIVE = 0; + } + + void setup_orb_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "scale", 1); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", ATTACK_LIGHT_COLOR); + ClientEffect("tempent", "set_current_prop", "renderamt", 1); + ClientEffect("tempent", "set_current_prop", "fuser1", 1); + } + + void update_orb_sprite() + { + if ((ATTACK_LIGHT_ACTIVE)) + { + string CUR_RENDERAMT = "game.tempent.fuser1"; + if (CUR_RENDERAMT < 255) + { + CUR_RENDERAMT += 1; + } + ClientEffect("tempent", "set_current_prop", "renderamt", CUR_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "origin", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0")); + } + else + { + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + } + } + + void show_seal_warning() + { + SEAL_ORIGIN = param1; + SEAL_RAD = param2; + SEAL_OFS = param3; + SEAL_COLOR = param4; + ClientEffect("tempent", "model", "weapons/magic/seals.mdl", SEAL_ORIGIN, "setup_seal_warn"); + SEAL_GLOW_RAD = SEAL_RAD; + SEAL_GLOW_RAD *= 1.11; + SEAL_LIGHT_ACTIVE = 1; + SEAL_LIGHT_RADCOUNT = 1; + SEAL_LIGHT_REMOVED = 0; + ClientEffect("light", "new", SEAL_ORIGIN, SEAL_GLOW_RAD, SEAL_COLOR, 2.0); + SEAL_LIGHT_ID = "game.script.last_light_id"; + ScheduleDelayedEvent(2.0, "seal_warning_end"); + EmitSound3D("magic/lightprep.wav", 5, SEAL_ORIGIN, 0.8, 0, 50); + } + + void seal_warning_end() + { + SEAL_LIGHT_ACTIVE = 0; + } + + void setup_seal_warn() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 2.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", SEAL_COLOR); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_once.as b/scripts/angelscript/monsters/skeleton_once.as new file mode 100644 index 00000000..45c9ec96 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_once.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonOnce : CGameScript +{ + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + + SkeletonOnce() + { + SKEL_HP = 40; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 0.9; + ATTACK_DAMAGE_HIGH = 2.7; + NPC_GIVE_EXP = 16; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 1; + DROP_GOLD_MAX = 3; + } + + void skeleton_spawn() + { + SetName("Skeleton Warrior"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison1.as b/scripts/angelscript/monsters/skeleton_poison1.as new file mode 100644 index 00000000..2d8e207f --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison1.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoison1 : CGameScript +{ + int POISON_TYPE; + + SkeletonPoison1() + { + POISON_TYPE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison2.as b/scripts/angelscript/monsters/skeleton_poison2.as new file mode 100644 index 00000000..35b7820c --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison2.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoison2 : CGameScript +{ + int POISON_TYPE; + + SkeletonPoison2() + { + POISON_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison3.as b/scripts/angelscript/monsters/skeleton_poison3.as new file mode 100644 index 00000000..2d37a48b --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison3.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoison3 : CGameScript +{ + int POISON_TYPE; + + SkeletonPoison3() + { + POISON_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison4.as b/scripts/angelscript/monsters/skeleton_poison4.as new file mode 100644 index 00000000..fce2afdf --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison4.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoison4 : CGameScript +{ + int POISON_TYPE; + + SkeletonPoison4() + { + POISON_TYPE = 4; + } + + void OnSpawn() override + { + SetRoam(false); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison5.as b/scripts/angelscript/monsters/skeleton_poison5.as new file mode 100644 index 00000000..0f5d8bc1 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison5.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoison5 : CGameScript +{ + int POISON_TYPE; + + SkeletonPoison5() + { + POISON_TYPE = 5; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison6.as b/scripts/angelscript/monsters/skeleton_poison6.as new file mode 100644 index 00000000..e144abd5 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison6.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoison6 : CGameScript +{ + int POISON_TYPE; + + SkeletonPoison6() + { + POISON_TYPE = 6; + } + + void OnSpawn() override + { + SetRoam(false); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison_bolter.as b/scripts/angelscript/monsters/skeleton_poison_bolter.as new file mode 100644 index 00000000..adbc4bb8 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison_bolter.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoisonBolter : CGameScript +{ + int POISON_TYPE; + + SkeletonPoisonBolter() + { + POISON_TYPE = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison_bomber.as b/scripts/angelscript/monsters/skeleton_poison_bomber.as new file mode 100644 index 00000000..60166272 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison_bomber.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoisonBomber : CGameScript +{ + int POISON_TYPE; + + SkeletonPoisonBomber() + { + POISON_TYPE = 3; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison_guarder.as b/scripts/angelscript/monsters/skeleton_poison_guarder.as new file mode 100644 index 00000000..1fa142e3 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison_guarder.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoisonGuarder : CGameScript +{ + int POISON_TYPE; + + SkeletonPoisonGuarder() + { + POISON_TYPE = 6; + } + + void OnSpawn() override + { + SetRoam(false); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison_rager.as b/scripts/angelscript/monsters/skeleton_poison_rager.as new file mode 100644 index 00000000..03276b7f --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison_rager.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoisonRager : CGameScript +{ + int POISON_TYPE; + + SkeletonPoisonRager() + { + POISON_TYPE = 5; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison_random.as b/scripts/angelscript/monsters/skeleton_poison_random.as new file mode 100644 index 00000000..ef8a81f0 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison_random.as @@ -0,0 +1,411 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonPoisonRandom : CGameScript +{ + string ANIM_ATTACK; + string ANIM_FLINCH; + string ANIM_RUN; + string ANIM_WALK; + string APPLY_EFFECT; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + string BASE_FRAMERATE; + string BASE_MOVESPEED; + int BOLT_DAMAGE; + int BOLT_DELAY; + float BOLT_FREQ; + float BOLT_FREQUENCY; + string CYCLE_TIME; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string ENRAGED; + string FARTS; + int FART_DELAY; + float FART_FREQ; + int FLINCH_DELAYING; + string GUARDIAN; + string GUARD_STRUCK1; + string GUARD_STRUCK2; + string GUARD_STRUCK3; + string IS_BOLTER; + string IS_BOMBER; + string IS_VAMPIRE; + int I_R_SUMMONED; + string MY_MASTER; + int NO_SPAWN_STUCK_CHECK; + string NO_STUCK_CHECKS; + string NPC_GIVE_EXP; + int POISON_ATTACK; + string POISON_BLADE; + string POISON_TYPE; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + string SOUND_BOLT1; + string SOUND_BOLT2; + string SOUND_BOLTCHARGE; + string SPLODIE; + int SUMMON_DELAY_STUCK_CHECK; + string SUMMON_OLD_LOC; + + SkeletonPoisonRandom() + { + SKEL_HP = 350; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 5.5; + ATTACK_DAMAGE_HIGH = 15.5; + DROP_GOLD = 1; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 20; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + FART_FREQ = 20.0; + ANIM_FLINCH = "bigflinch"; + GUARD_STRUCK1 = "body/armour1.wav"; + GUARD_STRUCK2 = "body/armour2.wav"; + GUARD_STRUCK3 = "body/armour3.wav"; + SOUND_BOLTCHARGE = "bullchicken/bc_attack1.wav"; + BOLT_DAMAGE = 20; + SOUND_BOLT1 = "bullchicken/bc_attack2.wav"; + SOUND_BOLT2 = "bullchicken/bc_attack3.wav"; + ANIM_ATTACK = "attack1"; + BOLT_FREQUENCY = 5.0; + BOLT_DAMAGE = 30; + Precache("poison_cloud.spr"); + Precache("cactusgibs.mdl"); + } + + void skeleton_spawn() + { + SetRace("undead"); + SetRoam(true); + SetDamageResistance("fire", 1.2); + SetDamageResistance("cold", 0.25); + SetHearingSensitivity(5); + BOLT_FREQ = 3.0; + APPLY_EFFECT = "effects/dot_poison"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + if (POISON_TYPE == "POISON_TYPE") + { + POISON_TYPE = RandomInt(1, 6); + } + if (POISON_TYPE == 1) + { + SetModel("monsters/skeleton.mdl"); + SetModelBody(0, 2); + SetName("Envenomed Bones"); + IS_BOLTER = 1; + NPC_GIVE_EXP = 100; + } + if (POISON_TYPE == 2) + { + SetName("Vampyric Poisoner"); + SetModel("monsters/skeleton.mdl"); + SetModelBody(0, 2); + IS_VAMPIRE = 1; + SetModelBody(1, 1); + NPC_GIVE_EXP = 125; + } + if (POISON_TYPE == 3) + { + SetName("Poisoned Spore"); + SetModel("monsters/skeleton_enraged.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 0); + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + IS_BOMBER = 1; + ANIM_RUN = "run"; + ANIM_WALK = "run"; + SetMoveAnim(ANIM_RUN); + SetMoveSpeed(2.0); + SetAnimMoveSpeed(2.0); + BASE_FRAMERATE = 1.5; + BASE_MOVESPEED = 1.5; + NPC_GIVE_EXP = 100; + } + if (POISON_TYPE == 4) + { + SetName("Envenomed Blade"); + SetModel("monsters/skeleton.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 4); + POISON_BLADE = 1; + NPC_GIVE_EXP = 120; + } + if (POISON_TYPE == 5) + { + SetName("Enraged Poisoner"); + SetModel("monsters/skeleton_enraged.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 3); + ANIM_RUN = "run"; + ANIM_WALK = "run"; + SetMoveAnim(ANIM_RUN); + SetMoveSpeed(1.5); + SetAnimMoveSpeed(1.5); + ATTACK_DAMAGE_LOW = 2.5; + ATTACK_DAMAGE_HIGH = 10.0; + POISON_BLADE = 1; + ENRAGED = 1; + NPC_GIVE_EXP = 150; + } + if (POISON_TYPE == 6) + { + SetName("Poisonous Guardian"); + SetModel("monsters/skeleton.mdl"); + SetAnimMoveSpeed(0.5); + SetAnimFrameRate(0.5); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetDamageResistance("all", 0.3); + SetStat("parry", 40); + FARTS = 1; + GUARDIAN = 1; + ATTACK_DAMAGE_LOW = 0.5; + ATTACK_DAMAGE_HIGH = 5.5; + NO_STUCK_CHECKS = 1; + NPC_GIVE_EXP = 200; + } + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((ENRAGED)) + { + BASE_FRAMERATE = 1.5; + } + if ((GUARDIAN)) + { + BASE_FRAMERATE = 0.5; + } + if ((IS_VAMPIRE)) + { + BASE_FRAMERATE = 0.75; + } + if ((FARTS)) + { + if (!(FART_DELAY)) + { + } + do_fart(); + } + if (!(IS_BOLTER)) return; + if ((BOLT_DELAY)) return; + if (!(false)) return; + if (!(GetEntityRange(m_hLastSeen) > 192)) return; + toss_bolt(); + } + + void toss_bolt() + { + BOLT_DELAY = 1; + BOLT_FREQ("reset_bolt"); + PlayAnim("critical", "attack2"); + EmitSound(GetOwner(), 0, SOUND_BOLTCHARGE, 10); + } + + void reset_bolt() + { + BOLT_DELAY = 0; + } + + void attack_2() + { + if (!(IS_BOLTER)) return; + // PlayRandomSound from: SOUND_BOLT1, SOUND_BOLT2 + array sounds = {SOUND_BOLT1, SOUND_BOLT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 15, 8), "none", 300, BOLT_DAMAGE, 0.5, "none"); + if ((POISON_BLADE)) + { + APPLY_EFFECT = "effects/dot_poison"; + POISON_ATTACK = 1; + } + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE_HIGH, ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = "attack1"; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if ((GUARDIAN)) + { + // PlayRandomSound from: GUARD_STRUCK1, GUARD_STRUCK2, GUARD_STRUCK3 + array sounds = {GUARD_STRUCK1, GUARD_STRUCK2, GUARD_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + if (param1 > 30) + { + if (!(FLINCH_DELAYING)) + { + } + PlayAnim("critical", ANIM_FLINCH); + FLINCH_DELAYING = 1; + ScheduleDelayedEvent(5.0, "reset_flinch"); + } + } + if (!(IS_BOMBER)) return; + if ((SPLODIE)) return; + if (GetMonsterProperty("health") < 100) + { + EmitSound(GetOwner(), 0, "debris/bustflesh1.wav", 10); + SPLODIE = 1; + PlayAnim("critical", ANIM_SPLODE); + ScheduleDelayedEvent(0.5, "go_splodie"); + } + if ((SPLODIE)) return; + if (param1 > 30) + { + EmitSound(GetOwner(), 0, "debris/bustflesh1.wav", 10); + SPLODIE = 1; + PlayAnim("critical", ANIM_SPLODE); + ScheduleDelayedEvent(0.5, "go_splodie"); + } + } + + void reset_flinch() + { + FLINCH_DELAYING = 0; + } + + void go_splodie() + { + SetSolid("none"); + Effect("tempent", "gibs", "cactusgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, 50, 50, 15, 2.0); + string CLOUD_POS = GetEntityOrigin(GetOwner()); + string GRND_CLOUD = /* TODO: $get_ground_height */ $get_ground_height(CLOUD_POS); + GRND_CLOUD += 24; + CLOUD_POS = "z"; + SpawnNPC("monsters/summon/npc_poison_cloud2", CLOUD_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), RandomInt(10, 15), 30.0, 1 + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + SetRace("hated"); + ScheduleDelayedEvent(20.0, "me_suicide"); + } + + void me_suicide() + { + DoDamage(GetOwner(), "direct", 1000, 1.0, GetOwner()); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(IS_VAMPIRE)) return; + string HP_TO_GIVE = param2; + string MAX_CHECK = GetMonsterHP(); + MAX_CHECK += HP_TO_GIVE; + if (!(MAX_CHECK < GetMonsterMaxHP())) return; + HealEntity(GetOwner(), HP_TO_GIVE); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 80, 0.5, 0.5); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + if (!(POISON_ATTACK)) return; + ApplyEffect(GetEntityIndex(param1), APPLY_EFFECT, RandomInt(10, 15), GetEntityIndex(GetOwner()), Random(1, 4)); + POISON_ATTACK = 0; + if (!(I_R_SUMMONED)) return; + SUMMON_DELAY_STUCK_CHECK = 5; + } + + void attack_1() + { + if ((POISON_BLADE)) + { + APPLY_EFFECT = "effects/dot_poison"; + if (RandomInt(1, 3) == 3) + { + POISON_ATTACK = 1; + } + } + if (!(ENRAGED)) + { + if (RandomInt(1, 3) == 1) + { + ANIM_ATTACK = "attack2"; + } + } + attack_snd(); + DoDamage(m_hLastSeen, ATTACK_RANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + } + + void do_fart() + { + FART_DELAY = 1; + FART_FREQ("reset_fart"); + if (!(GetEntityRange(m_hLastSeen) < 256)) return; + PlayAnim("critical", "attack2"); + EmitSound(GetOwner(), 0, "ambience/steamburst1.wav", 10); + string SPAWN_ORIGIN = GetEntityOrigin(m_hLastSeen); + SPAWN_ORIGIN += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 32)); + SpawnNPC("monsters/summon/npc_poison_cloud2", SPAWN_ORIGIN, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), RandomInt(10, 15), 5.0, 1 + } + + void reset_fart() + { + FART_DELAY = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(I_R_SUMMONED)) return; + CallExternal(MY_MASTER, "skeleton_died"); + } + + void game_dynamically_created() + { + I_R_SUMMONED = 1; + MY_MASTER = GetEntityIndex("ent_creationowner"); + SUMMON_OLD_LOC = GetMonsterProperty("origin"); + NO_SPAWN_STUCK_CHECK = 1; + SUMMON_DELAY_STUCK_CHECK = 0; + CYCLE_TIME = CYCLE_TIME_BATTLE; + ScheduleDelayedEvent(3.0, "summon_stuck_checks"); + } + + void summon_stuck_checks() + { + ScheduleDelayedEvent(2.0, "summon_stuck_checks"); + SUMMON_DELAY_STUCK_CHECK -= 1; + if (SUMMON_DELAY_STUCK_CHECK < 0) + { + SUMMON_DELAY_STUCK_CHECK = 0; + } + if (!(SUMMON_DELAY_STUCK_CHECK == 0)) return; + if (Distance(GetMonsterProperty("origin"), SUMMON_OLD_LOC) == 0) + { + CallExternal(MY_MASTER, "skeleton_stuck"); + } + SUMMON_OLD_LOC = GetMonsterProperty("origin"); + } + + void npc_selectattack() + { + if (!(I_R_SUMMONED)) return; + SUMMON_DELAY_STUCK_CHECK = 5; + } + + void check_attack() + { + if ((IS_FLEEING)) return; + if (!(IsEntityAlive(HUNT_LASTTARGET))) return; + if (GetEntityRange(HUNT_LASTTARGET) <= ATTACK_RANGE) + { + int L_ATTACK = 1; + } + if (!(L_ATTACK)) return; + npcatk_attackenemy(); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison_sworder.as b/scripts/angelscript/monsters/skeleton_poison_sworder.as new file mode 100644 index 00000000..1a408819 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison_sworder.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoisonSworder : CGameScript +{ + int POISON_TYPE; + + SkeletonPoisonSworder() + { + POISON_TYPE = 4; + } + + void OnSpawn() override + { + SetRoam(false); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_poison_vamper.as b/scripts/angelscript/monsters/skeleton_poison_vamper.as new file mode 100644 index 00000000..a70eca5a --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_poison_vamper.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/skeleton_poison_random.as" + +namespace MS +{ + +class SkeletonPoisonVamper : CGameScript +{ + int POISON_TYPE; + + SkeletonPoisonVamper() + { + POISON_TYPE = 2; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ravager.as b/scripts/angelscript/monsters/skeleton_ravager.as new file mode 100644 index 00000000..48256075 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ravager.as @@ -0,0 +1,665 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_pain.as" +#include "monsters/base_jumper.as" + +namespace MS +{ + +class SkeletonRavager : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_CRAWL; + string ANIM_ATTACK_SLAM; + string ANIM_ATTACK_STAND; + string ANIM_CEILING2STAND; + string ANIM_CRAWL2STAND; + string ANIM_DEATH; + string ANIM_DEATH_CEILING; + string ANIM_DEATH_CRAWL; + string ANIM_DEATH_STAND; + string ANIM_IDLE; + string ANIM_IDLE_CEILING; + string ANIM_IDLE_CRAWL; + string ANIM_IDLE_STAND; + string ANIM_MOVE_CEILING; + string ANIM_MOVE_CRAWL; + string ANIM_NPC_JUMP; + string ANIM_PROJECTILE; + string ANIM_PROJECTILE_CEILING; + string ANIM_PROJECTILE_CRAWL; + string ANIM_PROJECTILE_STAND; + string ANIM_RUN; + string ANIM_RUN_STAND; + string ANIM_STAND2CEILING; + string ANIM_STAND2CRAWL; + string ANIM_WALK; + string ANIM_WALK_STAND; + string AS_ATTACKING; + int BPAIN_CAN_FLINCH; + float BPAIN_FLINCH_HEALTH; + string BPAIN_FLINCH_TOKENS; + float BPAIN_FREQ_FLINCH; + int BPAIN_USE_FLINCH; + int BPAIN_USE_PAIN; + int CAN_REACH_CEILING; + string CLAWFX_COLOR; + string CLAWFX_SPRITE; + int CLAWFX_WIDTH; + int DID_INTRO; + float DMG_CLAW; + string DMG_CLAW_EFFECT; + int DMG_CLAW_EFFECT_DOT; + float DMG_CLAW_EFFECT_DUR; + string DMG_CLAW_TYPE; + int DMG_PROJECTILE; + float FREQ_PROJECTILE; + float FREQ_STANCE_CHANGE; + string MONSTER_MODEL; + string NEXT_CEILING; + string NEXT_PROJECTILE; + string NEXT_STANCE_CHANGE; + int NO_CEILING; + int NPC_GIVE_EXP; + int NPC_JUMPER; + int NPC_NO_ATTACK; + string PROJECTILE_SCRIPT; + int PROJECTILE_SPEED; + int SKELE_SKIN; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_LOOK; + string SOUND_NPC_JUMP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWIPE; + string STANCE_MODE; + string SWIPE_COUNT; + int USES_PROJECTILE; + string USING_PROJECTILE; + + SkeletonRavager() + { + NPC_GIVE_EXP = 500; + SKELE_SKIN = 0; + NPC_JUMPER = 0; + ANIM_NPC_JUMP = "attack2"; + SOUND_NPC_JUMP = "monsters/undeadz/c_skeleton_slct.wav"; + USES_PROJECTILE = 0; + PROJECTILE_SCRIPT = "proj_fire_ball"; + FREQ_PROJECTILE = Random(5.0, 10.0); + DMG_PROJECTILE = 200; + PROJECTILE_SPEED = 200; + ANIM_RUN = "anim_run"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "anim_death_stand"; + ANIM_MOVE_CEILING = "anim_ceiling_move"; + ANIM_IDLE_CEILING = "anim_ceiling_idle"; + ANIM_DEATH_CEILING = "anim_death_ceiling"; + ANIM_PROJECTILE_CEILING = "anim_ceiling_projectile"; + ANIM_MOVE_CRAWL = "anim_crawl_floor"; + ANIM_IDLE_CRAWL = "anim_crawl_idle"; + ANIM_ATTACK_CRAWL = "anim_crawl_strike"; + ANIM_DEATH_CRAWL = "anim_death_floor"; + ANIM_PROJECTILE_CRAWL = "anim_crawl_strike"; + ANIM_RUN_STAND = "anim_run"; + ANIM_WALK_STAND = "walk"; + ANIM_IDLE_STAND = "idle1"; + ANIM_ATTACK_STAND = "attack1"; + ANIM_ATTACK_SLAM = "attack2"; + ANIM_DEATH_STAND = "anim_death_stand"; + ANIM_PROJECTILE_STAND = "attack2"; + ANIM_STAND2CRAWL = "anim_leapback2crawl"; + ANIM_STAND2CEILING = "anim_stand2ceiling"; + ANIM_CRAWL2STAND = "anim_crawl2stand"; + ANIM_CEILING2STAND = "anim_ceiling2floor"; + STANCE_MODE = "unset"; + FREQ_STANCE_CHANGE = Random(20.0, 40.0); + DMG_CLAW = Random(150, 200); + DMG_CLAW_TYPE = "slash"; + DMG_CLAW_EFFECT = "none"; + DMG_CLAW_EFFECT_DUR = 5.0; + DMG_CLAW_EFFECT_DOT = 50; + CLAWFX_WIDTH = 20; + CLAWFX_COLOR = Vector3(255, 0, 0); + CLAWFX_SPRITE = "claw.spr"; + BPAIN_USE_PAIN = 1; + BPAIN_USE_FLINCH = 1; + BPAIN_FREQ_FLINCH = Random(10.0, 20.0); + BPAIN_FLINCH_HEALTH = 0.9; + BPAIN_FLINCH_TOKENS = "flinchsmall;flinch;bigflinch;laflinch;raflinch;llflinch;rlflinch"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "monsters/undeadz/c_skeleton_hit1.wav"; + SOUND_PAIN2 = "monsters/undeadz/c_skeleton_hit2.wav"; + SOUND_ALERT1 = "monsters/undeadz/c_skeleton_bat1.wav"; + SOUND_ALERT2 = "monsters/undeadz/c_skeleton_bat2.wav"; + SOUND_ATTACK1 = "monsters/undeadz/c_skeleton_atk1.wav"; + SOUND_ATTACK2 = "monsters/undeadz/c_skeleton_atk2.wav"; + SOUND_ATTACK3 = "monsters/undeadz/c_skeleton_atk3.wav"; + SOUND_SWIPE = "zombie/claw_miss2.wav"; + SOUND_DEATH = "monsters/undeadz/c_skeleton_dead.wav"; + SOUND_LOOK = "monsters/undeadz/c_skeleton_slct.wav"; + MONSTER_MODEL = "monsters/skeleton_ravenous.mdl"; + } + + void game_precache() + { + Precache("claw.spr"); + } + + void OnSpawn() override + { + skele_spawn(); + ScheduleDelayedEvent(1.0, "finalize_stance"); + } + + void skele_spawn() + { + SetName("Skeletal Ravager"); + SetModel(MONSTER_MODEL); + SetHealth(4000); + SetWidth(32); + SetHeight(72); + SetRace("undead"); + SetBloodType("none"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("blunt", 1.5); + SetDamageResistance("slash", 1.0); + SetDamageResistance("pierce", 0.75); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("cold", 0.5); + SetDamageResistance("holy", 2.0); + SetRoam(true); + SetHearingSensitivity(4); + } + + void finalize_stance() + { + if (!(STANCE_MODE == "unset")) return; + NEXT_STANCE_CHANGE = GetGameTime(); + NEXT_STANCE_CHANGE += FREQ_STANCE_CHANGE; + ceiling_check(); + if ((CAN_REACH_CEILING)) + { + STANCE_MODE = "ceiling"; + ceiling_mode(); + } + if (!(STANCE_MODE == "unset")) return; + STANCE_MODE = "stand"; + stand_mode(); + } + + void set_start_ceiling() + { + STANCE_MODE = "ceiling"; + ceiling_mode(); + } + + void set_start_crawl() + { + STANCE_MODE = "crawl"; + crawl_mode(); + } + + void set_start_stand() + { + STANCE_MODE = "stand"; + stand_mode(); + } + + void set_no_ceiling() + { + NO_CEILING = 1; + } + + void ceiling_mode() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("once", "break"); + NPC_JUMPER = 0; + NPC_NO_ATTACK = 1; + BPAIN_CAN_FLINCH = 0; + string L_PREV_STANCE = STANCE_MODE; + STANCE_MODE = "ceiling"; + ANIM_IDLE = ANIM_IDLE_CEILING; + ANIM_WALK = ANIM_MOVE_CEILING; + ANIM_RUN = ANIM_MOVE_CEILING; + ANIM_DEATH = ANIM_DEATH_CEILING; + ANIM_ATTACK = "none"; + ANIM_PROJECTILE = ANIM_PROJECTILE_CEILING; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + if (L_PREV_STANCE == "stand") + { + EmitSound(GetOwner(), 0, SOUND_LOOK, 10); + PlayAnim("critical", ANIM_STAND2CEILING); + ScheduleDelayedEvent(1.0, "ceiling_mode2"); + } + else + { + ceiling_mode2(); + } + } + + void ceiling_mode2() + { + BPAIN_CAN_FLINCH = 1; + SetGravity(-1.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 10000)); + } + + void stand_mode() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("once", "break"); + NPC_JUMPER = 1; + NPC_NO_ATTACK = 0; + bflinch_suspend_flinch(2.0); + string L_PREV_STANCE = STANCE_MODE; + STANCE_MODE = "stand"; + ANIM_IDLE = ANIM_IDLE_STAND; + ANIM_WALK = ANIM_WALK_STAND; + ANIM_RUN = ANIM_RUN_STAND; + ANIM_DEATH = ANIM_DEATH_STAND; + ANIM_ATTACK = ANIM_ATTACK_STAND; + ANIM_PROJECTILE = ANIM_PROJECTILE_STAND; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + if (L_PREV_STANCE == "crawl") + { + EmitSound(GetOwner(), 0, SOUND_LOOK, 10); + PlayAnim("critical", ANIM_CRAWL2STAND); + } + else + { + if (L_PREV_STANCE == "ceiling") + { + } + EmitSound(GetOwner(), 0, SOUND_LOOK, 10); + PlayAnim("critical", ANIM_CEILING2STAND); + } + SetGravity(1); + } + + void crawl_mode() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("once", "break"); + NPC_JUMPER = 0; + NPC_NO_ATTACK = 0; + BPAIN_CAN_FLINCH = 0; + string L_PREV_STANCE = STANCE_MODE; + STANCE_MODE = "crawl"; + ANIM_IDLE = ANIM_IDLE_CRAWL; + ANIM_WALK = ANIM_MOVE_CRAWL; + ANIM_RUN = ANIM_MOVE_CRAWL; + ANIM_DEATH = ANIM_DEATH_CRAWL; + ANIM_ATTACK = ANIM_ATTACK_CRAWL; + ANIM_PROJECTILE = ANIM_PROJECTILE_CRAWL; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + if (L_PREV_STANCE == "stand") + { + EmitSound(GetOwner(), 0, SOUND_LOOK, 10); + PlayAnim("critical", ANIM_STAND2CRAWL); + } + SetGravity(1); + } + + void frame_swipe() + { + did_attack(); + SWIPE_COUNT += 1; + if (SWIPE_COUNT > 3) + { + if ((STANCE_MODE + "stand")) + { + } + ANIM_ATTACK = ANIM_ATTACK_SLAM; + SWIPE_COUNT = 0; + } + if (DMG_CLAW_EFFECT == "none") + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW, 0.9, "slash"); + } + else + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW, 0.9, GetOwner(), GetOwner(), "none", "slash", "dmgevent:claw"); + } + } + + void frame_slam() + { + did_attack(); + string L_SLAM_DMG = DMG_CLAW; + L_SLAM_DMG *= 1.5; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, L_SLAM_DMG, 0.9, GetOwner(), GetOwner(), "none", "slash", "dmgevent:slam"); + if ((USING_PROJECTILE)) + { + do_projectile(GetEntityProperty(GetOwner(), "attachpos")); + } + if (!(STANCE_MODE + "stand")) return; + ANIM_ATTACK = ANIM_ATTACK_STAND; + SWIPE_COUNT = 0; + } + + void frame_floor_swipe() + { + did_attack(); + string L_DMG_CLAW = DMG_CLAW; + L_DMG_CLAW *= 1.5; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, L_DMG_CLAW, 0.9, GetOwner(), GetOwner(), "none", "slash", "dmgevent:clawfloor"); + if ((USING_PROJECTILE)) + { + do_projectile(GetEntityProperty(GetOwner(), "attachpos")); + } + } + + void frame_run_swipe() + { + if (DMG_CLAW_EFFECT == "none") + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW, 0.8, "slash"); + } + else + { + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW, 0.8, GetOwner(), GetOwner(), "none", "slash", "dmgevent:claw"); + } + } + + void clawfloor_dodamage() + { + if (!(param1)) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 300, 110)); + if (!(DMG_CLAW_EFFECT != "none")) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, DMG_CLAW_EFFECT, DMG_CLAW_EFFECT_DUR, GetEntityIndex(GetOwner()), DMG_CLAW_EFFECT_DOT); + } + + void claw_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, DMG_CLAW_EFFECT, DMG_CLAW_EFFECT_DUR, GetEntityIndex(GetOwner()), DMG_CLAW_EFFECT_DOT); + } + + void slam_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 400, 110)); + ApplyEffect(param2, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + if (!(DMG_CLAW_EFFECT != "none")) return; + ApplyEffect(param2, DMG_CLAW_EFFECT, DMG_CLAW_EFFECT_DUR, GetEntityIndex(GetOwner()), DMG_CLAW_EFFECT_DOT); + } + + void did_attack() + { + if ((NO_CEILING)) return; + if (!(STANCE_MODE == "stand")) return; + NEXT_CEILING = GetGameTime(); + NEXT_CEILING += 10.0; + } + + void npc_targetsighted() + { + if ((USES_PROJECTILE)) + { + if (GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE) + { + } + if (GetGameTime() > NEXT_PROJECTILE) + { + } + NEXT_PROJECTILE = GetGameTime(); + NEXT_PROJECTILE += FREQ_PROJECTILE; + USING_PROJECTILE = 1; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("once", ANIM_PROJECTILE); + } + if ((DID_INTRO)) return; + NEXT_STANCE_CHANGE = GetGameTime(); + NEXT_STANCE_CHANGE += FREQ_STANCE_CHANGE; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DID_INTRO = 1; + if (!(STANCE_MODE == "ceiling")) return; + PlayAnim("critical", ANIM_IDLE); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) return; + if (STANCE_MODE == "ceiling") + { + string MY_ORG = GetEntityOrigin(GetOwner()); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 100)); + if ((/* TODO: $get_under_sky */ $get_under_sky(MY_ORG))) + { + } + NEXT_STANCE_CHANGE = GetGameTime(); + NEXT_STANCE_CHANGE += FREQ_STANCE_CHANGE; + stand_mode(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (m_hAttackTarget != "unset") + { + if (STANCE_MODE == "ceiling") + { + if (GetEntityProperty(m_hAttackTarget, "range2d") < 256) + { + } + PlayAnim("critical", ANIM_IDLE); + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(1.5, "stand_mode"); + NEXT_STANCE_CHANGE = GetGameTime(); + NEXT_STANCE_CHANGE += FREQ_STANCE_CHANGE; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (STANCE_MODE == "crawl") + { + if (GetEntityProperty(m_hAttackTarget, "range2d") > 512) + { + } + stand_mode(); + NEXT_STANCE_CHANGE = GetGameTime(); + NEXT_STANCE_CHANGE += FREQ_STANCE_CHANGE; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (STANCE_MODE == "stand") + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + SetMoveAnim(ANIM_WALK); + } + else + { + SetMoveAnim(ANIM_RUN); + } + } + } + if ((EXIT_SUB)) return; + if (GetGameTime() > NEXT_STANCE_CHANGE) + { + if (STANCE_MODE == "stand") + { + if (m_hAttackTarget != "unset") + { + } + if (GetEntityRange(m_hAttackTarget) < 128) + { + } + crawl_mode(); + NEXT_STANCE_CHANGE = GetGameTime(); + NEXT_STANCE_CHANGE += FREQ_STANCE_CHANGE; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (STANCE_MODE == "stand") + { + if (m_hAttackTarget != "unset") + { + } + if (GetEntityProperty(m_hAttackTarget, "range2d") > 256) + { + } + ceiling_check(); + if ((CAN_REACH_CEILING)) + { + } + ceiling_mode(); + NEXT_STANCE_CHANGE = GetGameTime(); + NEXT_STANCE_CHANGE += FREQ_STANCE_CHANGE; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (STANCE_MODE == "crawl") + { + stand_mode(); + NEXT_STANCE_CHANGE = GetGameTime(); + NEXT_STANCE_CHANGE += FREQ_STANCE_CHANGE; + } + } + } + + void frame_rclaw_on() + { + attack_sound(Random(80, 125)); + Effect("beam", "follow", CLAWFX_SPRITE, GetOwner(), 1, CLAWFX_WIDTH, 1.0, 255, CLAWFX_COLOR); + } + + void frame_lclaw_on() + { + attack_sound(Random(80, 125)); + Effect("beam", "follow", CLAWFX_SPRITE, GetOwner(), 2, CLAWFX_WIDTH, 1.0, 255, CLAWFX_COLOR); + } + + void frame_rclaw_on2() + { + attack_sound(Random(125, 175)); + Effect("beam", "follow", CLAWFX_SPRITE, GetOwner(), 1, CLAWFX_WIDTH, 1.0, 255, CLAWFX_COLOR); + } + + void frame_lclaw_on2() + { + attack_sound(Random(125, 175)); + Effect("beam", "follow", CLAWFX_SPRITE, GetOwner(), 2, CLAWFX_WIDTH, 1.0, 255, CLAWFX_COLOR); + } + + void frame_claws_on() + { + attack_sound(Random(80, 125)); + Effect("beam", "follow", CLAWFX_SPRITE, GetOwner(), 1, CLAWFX_WIDTH, 1.0, 255, CLAWFX_COLOR); + Effect("beam", "follow", CLAWFX_SPRITE, GetOwner(), 2, CLAWFX_WIDTH, 1.0, 255, CLAWFX_COLOR); + } + + void attack_sound() + { + if (RandomInt(1, 5) < 5) + { + EmitSound(GetOwner(), 0, SOUND_SWIPE, 10); + } + else + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void frame_leapback_boost() + { + AddVelocity(GetOwner(), /* TODO: $relpos */ $relpos(0, -400, 110)); + } + + void ceiling_check() + { + CAN_REACH_CEILING = 0; + string MY_ORG = GetEntityOrigin(GetOwner()); + if ((/* TODO: $get_under_sky */ $get_under_sky(MY_ORG))) return; + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = TRACE_START; + TRACE_END += "z"; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE != TRACE_END)) return; + CAN_REACH_CEILING = 1; + } + + void game_dynamically_created() + { + if (param1 == "stand") + { + set_start_stand(); + } + if (param1 == "crawl") + { + set_start_crawl(); + } + if (param1 == "ceiling") + { + set_start_ceiling(); + npcatk_suspend_ai(); + npc_suicide(); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(STANCE_MODE == "ceiling")) return; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + ClientEvent("new", "all", "monsters/cl_corpse", GetEntityIndex(GetOwner()), 23, SKELE_SKIN, 0, 1); + } + + void do_projectile() + { + USING_PROJECTILE = 0; + EmitSound(GetOwner(), 0, SOUND_PROJECTILE, 10); + string L_POS = param1; + TossProjectile(PROJECTILE_SCRIPT, L_POS, m_hAttackTarget, PROJECTILE_SPEED, DMG_PROJECTILE, 5, "none"); + npc_adjust_projectile(); + } + + void npcatk_jump() + { + NEXT_STANCE_CHANGE += 5.0; + } + + void frame_ceiling_projectile() + { + do_projectile(GetEntityProperty(GetOwner(), "attachpos")); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ravager_fire.as b/scripts/angelscript/monsters/skeleton_ravager_fire.as new file mode 100644 index 00000000..963763c6 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ravager_fire.as @@ -0,0 +1,72 @@ +#pragma context server + +#include "monsters/skeleton_ravager.as" + +namespace MS +{ + +class SkeletonRavagerFire : CGameScript +{ + string CLAWFX_COLOR; + string DMG_CLAW_EFFECT; + int DMG_CLAW_EFFECT_DOT; + float DMG_CLAW_EFFECT_DUR; + int DMG_PROJECTILE; + float FREQ_PROJECTILE; + string MONSTER_MODEL; + int NPC_BASE_EXP; + string PROJECTILE_SCRIPT; + int PROJECTILE_SPEED; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_PROJECTILE; + int USES_PROJECTILE; + + SkeletonRavagerFire() + { + NPC_BASE_EXP = 600; + USES_PROJECTILE = 1; + PROJECTILE_SCRIPT = "proj_fire_ball"; + FREQ_PROJECTILE = Random(5.0, 10.0); + DMG_PROJECTILE = 400; + PROJECTILE_SPEED = 400; + SOUND_PROJECTILE = "magic/fireball_strike.wav"; + DMG_CLAW_EFFECT = "effects/dot_fire"; + DMG_CLAW_EFFECT_DUR = 5.0; + DMG_CLAW_EFFECT_DOT = 100; + CLAWFX_COLOR = Vector3(255, 64, 0); + MONSTER_MODEL = "monsters/skeleton_ravenous_ele.mdl"; + SOUND_ALERT1 = "monsters/undeadz/c_skeltwar_bat1.wav"; + SOUND_ALERT2 = "monsters/undeadz/c_skeltwar_bat1.wav"; + } + + void skele_spawn() + { + SetName("Redboned Ravager"); + SetModelBody(0, 0); + SetModel(MONSTER_MODEL); + SetHealth(4000); + SetWidth(32); + SetHeight(72); + SetRace("undead"); + SetBloodType("none"); + SetDamageResistance("fire", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("blunt", 1.5); + SetDamageResistance("slash", 1.0); + SetDamageResistance("pierce", 0.75); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("cold", 1.0); + SetDamageResistance("holy", 2.0); + SetRoam(true); + SetHearingSensitivity(4); + } + + void npc_adjust_projectile() + { + CallExternal("ent_lastprojectile", "lighten", DMG_CLAW_EFFECT_DOT, 0.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ravager_ice.as b/scripts/angelscript/monsters/skeleton_ravager_ice.as new file mode 100644 index 00000000..9a7fd6d5 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ravager_ice.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "monsters/skeleton_ravager.as" + +namespace MS +{ + +class SkeletonRavagerIce : CGameScript +{ + string CLAWFX_COLOR; + string DMG_CLAW_EFFECT; + int DMG_CLAW_EFFECT_DOT; + float DMG_CLAW_EFFECT_DUR; + int DMG_PROJECTILE; + float FREQ_PROJECTILE; + string MONSTER_MODEL; + int NPC_BASE_EXP; + int PASS_FREEZE_DMG; + float PASS_FREEZE_DUR; + string PROJECTILE_SCRIPT; + int PROJECTILE_SPEED; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_PROJECTILE; + int USES_PROJECTILE; + + SkeletonRavagerIce() + { + NPC_BASE_EXP = 600; + USES_PROJECTILE = 1; + PROJECTILE_SCRIPT = "proj_freezing_sphere"; + FREQ_PROJECTILE = Random(5.0, 10.0); + DMG_PROJECTILE = 200; + PROJECTILE_SPEED = 150; + SOUND_PROJECTILE = "none"; + PASS_FREEZE_DMG = 50; + PASS_FREEZE_DUR = 5.0; + CLAWFX_COLOR = Vector3(128, 128, 255); + DMG_CLAW_EFFECT = "effects/dot_cold"; + DMG_CLAW_EFFECT_DUR = 5.0; + DMG_CLAW_EFFECT_DOT = 75; + MONSTER_MODEL = "monsters/skeleton_ravenous_ele.mdl"; + SOUND_ALERT1 = "monsters/undeadz/c_skeltwar_bat1.wav"; + SOUND_ALERT2 = "monsters/undeadz/c_skeltwar_bat1.wav"; + } + + void skele_spawn() + { + SetName("Iceboned Ravager"); + SetModelBody(0, 1); + SetModel(MONSTER_MODEL); + SetHealth(4000); + SetWidth(32); + SetHeight(72); + SetRace("undead"); + SetBloodType("none"); + SetDamageResistance("fire", 1.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("blunt", 1.5); + SetDamageResistance("slash", 1.0); + SetDamageResistance("pierce", 0.75); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("cold", 0.0); + SetDamageResistance("holy", 2.0); + SetRoam(true); + SetHearingSensitivity(4); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_ravager_venom.as b/scripts/angelscript/monsters/skeleton_ravager_venom.as new file mode 100644 index 00000000..24934dd2 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_ravager_venom.as @@ -0,0 +1,98 @@ +#pragma context server + +#include "monsters/skeleton_ravager.as" + +namespace MS +{ + +class SkeletonRavagerVenom : CGameScript +{ + string BLOB_ORG; + string CLAWFX_COLOR; + string DMG_CLAW_EFFECT; + int DMG_CLAW_EFFECT_DOT; + float DMG_CLAW_EFFECT_DUR; + int DMG_PROJECTILE; + float FREQ_PROJECTILE; + string GLOB_TARG; + string MONSTER_MODEL; + int NPC_BASE_EXP; + int PASS_FREEZE_DMG; + float PASS_FREEZE_DUR; + string PROJECTILE_SCRIPT; + int PROJECTILE_SPEED; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_PROJECTILE; + int USES_PROJECTILE; + + SkeletonRavagerVenom() + { + NPC_BASE_EXP = 600; + USES_PROJECTILE = 1; + PROJECTILE_SCRIPT = "proj_glob_guided"; + FREQ_PROJECTILE = Random(5.0, 10.0); + DMG_PROJECTILE = 200; + PROJECTILE_SPEED = 200; + SOUND_PROJECTILE = "bullchicken/bc_attack3.wav"; + PASS_FREEZE_DMG = 50; + PASS_FREEZE_DUR = 5.0; + CLAWFX_COLOR = Vector3(0, 255, 0); + DMG_CLAW_EFFECT = "effects/dot_poison"; + DMG_CLAW_EFFECT_DUR = 10.0; + DMG_CLAW_EFFECT_DOT = 50; + MONSTER_MODEL = "monsters/skeleton_ravenous_ele.mdl"; + SOUND_ALERT1 = "monsters/undeadz/c_skeltwar_bat1.wav"; + SOUND_ALERT2 = "monsters/undeadz/c_skeltwar_bat1.wav"; + } + + void skele_spawn() + { + SetName("Venomboned Ravager"); + SetModelBody(0, 2); + SetModel(MONSTER_MODEL); + SetHealth(4000); + SetWidth(32); + SetHeight(72); + SetRace("undead"); + SetBloodType("none"); + SetDamageResistance("fire", 1.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("blunt", 1.5); + SetDamageResistance("slash", 1.0); + SetDamageResistance("pierce", 0.75); + SetDamageResistance("lightning", 1.5); + SetDamageResistance("cold", 0.5); + SetDamageResistance("holy", 2.0); + SetRoam(true); + SetHearingSensitivity(4); + } + + void ext_glob_landed() + { + BLOB_ORG = param1; + XDoDamage(param1, 96, DMG_GLOB, 0.2, GetOwner(), GetOwner(), "none", "acid_effect", "dmgevent:glob"); + } + + void glob_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + string TARG_ORG = GetEntityOrigin(param2); + float BLOB_DIST = Distance(BLOB_ORG, TARG_ORG); + BLOB_DIST /= 64; + int BLOB_DIST_RATIO = 1; + BLOB_DIST_RATIO -= BLOB_DIST; + string BLIND_DURATION = /* TODO: $ratio */ $ratio(BLOB_DIST_RATIO, 2.0, 6.0); + LogDebug("glob_dodamage BLIND_DURATION"); + ApplyEffect(param2, "effects/dot_poison_blind", BLIND_DURATION, GetEntityIndex(GetOwner()), DMG_CLAW_EFFECT_DOT); + } + + void OnHuntTarget(CBaseEntity@ target) + { + GLOB_TARG = m_hAttackTarget; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_soul_eater.as b/scripts/angelscript/monsters/skeleton_soul_eater.as new file mode 100644 index 00000000..b40cceb5 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_soul_eater.as @@ -0,0 +1,179 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class SkeletonSoulEater : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + string DID_PUSH; + int LAST_STOLE_HP; + int LEGIT_MAP; + int MOVE_RANGE; + string MY_ENEMY; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_HEAL; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_PUSH; + string SOUND_SPAWN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + SkeletonSoulEater() + { + ANIM_RUN = "walk"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack1"; + ATTACK_DAMAGE = 30; + ATTACK_RANGE = 150; + MOVE_RANGE = 125; + ATTACK_HITRANGE = 175; + ATTACK_HITCHANCE = 0.85; + SOUND_STRUCK1 = "controller/con_pain3.wav"; + SOUND_STRUCK2 = "controller/con_pain3.wav"; + SOUND_STRUCK3 = "none"; + SOUND_PAIN = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "controller/con_attack1.wav"; + SOUND_HEAL = "monsters/skeleton/calrian2.wav"; + SOUND_ATTACK2 = "controller/con_attack2.wav"; + SOUND_DEATH = "controller/con_die1.wav"; + SOUND_IDLE1 = "controller/con_attack3.wav"; + SOUND_SPAWN = "monsters/skeleton/calrian2.wav"; + SOUND_PUSH = "monsters/skeleton/calrain3.wav"; + MY_ENEMY = "enemy"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetHealth(1500); + SetWidth(32); + SetHeight(80); + SetName("Soul Eater"); + SetRoam(true); + SetHearingSensitivity(8); + NPC_GIVE_EXP = 200; + SetRace("undead"); + SetModel("monsters/skeleton2.mdl"); + SetModelBody(1, 0); + SetDamageResistance("all", 0.65); + SetDamageResistance("holy", 2.0); + SetDamageResistance("fire", 0.25); + SetDamageResistance("cold", 0.25); + SetDamageResistance("stun", 0); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + string MAP_NAME = GetMapName(); + LEGIT_MAP = 0; + LAST_STOLE_HP = 10; + } + + void attack_1() + { + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + string ENEMY_HP = GetEntityHealth(m_hLastStruckByMe); + string DIV_ATTACK_DAMAGE = ATTACK_DAMAGE; + DIV_ATTACK_DAMAGE *= 0.6; + if (LAST_STOLE_HP > 0) + { + LAST_STOLE_HP -= 1; + } + if (ENEMY_HP <= DIV_ATTACK_DAMAGE) + { + if (LAST_STOLE_HP < 1) + { + if (GetRelationship(m_hLastStruckByMe) == "enemy") + { + } + string ENEMY_MAXHP = GetEntityMaxHealth(m_hLastStruckByMe); + string ICE_CREAM_NAME = "Ice Wall"; + string NME_NAME = GetEntityName(m_hLastStruckByMe); + SendInfoMsg(m_hLastStruckByMe, SOUL_EATER + " Beware, soul eaters gain double their victim's health when they slay a living opponent."); + SetSayTextRange(1024); + if (NME_NAME == ICE_CREAM_NAME) + { + SayText("Mmmmmmm... Ice cream!"); + } + if (NME_NAME != ICE_CREAM_NAME) + { + SayText("I'll swallow your soul!"); + } + SetVolume(10); + EmitSound(GetOwner(), SOUND_HEAL); + ENEMY_MAXHP *= 2.0; + HealEntity(GetOwner(), ENEMY_MAXHP); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 255, 2, 2); + LAST_STOLE_HP = 10; + } + } + int I_DID_PUSH = 0; + if (DID_PUSH == 1) + { + DID_PUSH = 0; + int I_DID_PUSH = 1; + } + if ((I_DID_PUSH)) return; + if (RandomInt(0, 1) == 0) + { + SetVolume(5); + if (LAST_STOLE_HP < 3) + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if (!(param1)) return; + if (RandomInt(1, 30) == 1) + { + PlayAnim("critical", "attack2"); + SetVolume(10); + EmitSound(GetOwner(), SOUND_PUSH); + string MY_LOC = GetEntityOrigin(GetOwner()); + string NME_LOC = GetEntityOrigin(m_hLastStruckByMe); + float NME_DISTANCE = Distance(MY_LOC, NME_LOC); + if (NME_DISTANCE < ATTACK_HITRANGE) + { + ApplyEffect(GetEntityIndex(m_hLastStruckByMe), "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + } + DID_PUSH = 1; + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + bm_gold_spew(25, 1, 50, 4, 8); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_spartaaa.as b/scripts/angelscript/monsters/skeleton_spartaaa.as new file mode 100644 index 00000000..906285db --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_spartaaa.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "calruin/cavetroll.as" + +namespace MS +{ + +class SkeletonSpartaaa : CGameScript +{ + int FORCE_GERIC; + int NPC_BASE_EXP; + int SET_GREEK; + + SkeletonSpartaaa() + { + FORCE_GERIC = 1; + NPC_BASE_EXP = 1000; + SET_GREEK = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_stone1.as b/scripts/angelscript/monsters/skeleton_stone1.as new file mode 100644 index 00000000..df493aa7 --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_stone1.as @@ -0,0 +1,90 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonStone1 : CGameScript +{ + string ANIM_RUN; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + string SET_GREEK; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int STONE_SKELETON; + string WAS_SLEEPING; + + SkeletonStone1() + { + ANIM_RUN = "run"; + SKEL_HP = 500; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 8; + ATTACK_DAMAGE_HIGH = 13; + NPC_GIVE_EXP = 100; + DROP_GOLD = 1; + DROP_GOLD_MIN = 25; + DROP_GOLD_MAX = 35; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + STONE_SKELETON = 1; + Precache("monsters/skeleton_boss1.mdl"); + } + + void skeleton_spawn() + { + SetModel("monsters/skeleton_boss1.mdl"); + SetModelBody(0, 7); + SetModelBody(1, 4); + SetWidth(32); + SetHeight(80); + SetStat("parry", 110); + if (!(SLEEPER)) + { + animate_stone(); + } + if ((SLEEPER)) + { + SetInvincible(true); + WAS_SLEEPING = 1; + npcatk_suspend_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + SetAnimFrameRate(0.0); + } + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + } + + void animate_stone() + { + SetName("Petrified Paladin"); + SetRoam(true); + SetBloodType("none"); + SetDamageResistance("all", ".6"); + SetHearingSensitivity(3); + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_stone2.as b/scripts/angelscript/monsters/skeleton_stone2.as new file mode 100644 index 00000000..d51077eb --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_stone2.as @@ -0,0 +1,214 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonStone2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + string AS_ATTACKING; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string MY_ROCK; + int NPC_GIVE_EXP; + int ROCK_DAMAGE; + string ROCK_DELAY; + float ROCK_FREQ; + int ROCK_ON; + string ROCK_POS; + int ROCK_RAISE_COUNT; + string ROCK_TARGET; + string ROCK_X; + string ROCK_Y; + string ROCK_Z; + string SET_GREEK; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STUN; + string SOUND_SUMMON; + int STONE_SKELETON; + int STUN_ATK_CHANCE; + int STUN_ATTACK; + string WAS_SLEEPING; + + SkeletonStone2() + { + ANIM_RUN = "run"; + SKEL_HP = 1000; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 16; + ATTACK_DAMAGE_HIGH = 26; + NPC_GIVE_EXP = 150; + DROP_GOLD = 1; + DROP_GOLD_MIN = 25; + DROP_GOLD_MAX = 55; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + SOUND_STUN = "zombie/claw_strike2.wav"; + SOUND_SUMMON = "monsters/skeleton/calrain3.wav"; + ROCK_DAMAGE = RandomInt(200, 400); + STUN_ATK_CHANCE = 10; + STONE_SKELETON = 1; + ROCK_FREQ = 15.0; + Precache("monsters/skeleton_boss1.mdl"); + } + + void skeleton_spawn() + { + SetModel("monsters/skeleton_boss1.mdl"); + SetModelBody(0, 7); + SetModelBody(1, 3); + SetWidth(32); + SetHeight(80); + if (!(SLEEPER)) + { + animate_stone(); + } + if ((SLEEPER)) + { + SetInvincible(true); + WAS_SLEEPING = 1; + npcatk_suspend_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + SetAnimFrameRate(0.0); + } + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + } + + void animate_stone() + { + SetName("Lesser Stone Mason"); + SetRoam(true); + SetBloodType("none"); + SetDamageResistance("all", ".6"); + SetHearingSensitivity(3); + if ((WAS_SLEEPING)) + { + SetMoveAnim(ANIM_WALK); + SetAnimFrameRate(1.0); + npcatk_resume_ai(); + } + } + + void attack_1() + { + STUN_ATTACK = 0; + if (!(RandomInt(1, 100) < STUN_ATK_CHANCE)) return; + ANIM_ATTACK = "attack2"; + } + + void npc_targetsighted() + { + if ((IS_FLEEING)) return; + if ((ROCK_ON)) + { + if (!(ROCK_DELAY)) + { + } + ROCK_DELAY = 1; + ROCK_FREQ("rock_delay_reset"); + PlayAnim("once", "break"); + ScheduleDelayedEvent(0.1, "summon_rock"); + } + } + + void rock_delay_reset() + { + ROCK_DELAY = 0; + } + + void attack_2() + { + STUN_ATTACK = 1; + attack_snd(); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = "attack1"; + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(STUN_ATTACK)) return; + EmitSound(GetOwner(), 0, SOUND_STUN, 10); + ApplyEffect(param2, "effects/debuff_stun", Random(5, 10), GetEntityIndex(GetOwner())); + STUN_ATTACK = 0; + } + + void cycle_up() + { + ROCK_ON = 1; + } + + void summon_rock() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 20.0; + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + ROCK_TARGET = HUNT_LASTTARGET; + npcatk_suspend_ai(); + PlayAnim("critical", "castspell"); + SpawnNPC("monsters/summon/rock", /* TODO: $relpos */ $relpos(0, 30, -64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + MY_ROCK = m_hLastCreated; + ROCK_POS = GetEntityOrigin(MY_ROCK); + ROCK_X = (ROCK_POS).x; + ROCK_Y = (ROCK_POS).y; + ROCK_Z = (ROCK_POS).z; + ROCK_RAISE_COUNT = 0; + SetMoveDest(ROCK_TARGET); + ScheduleDelayedEvent(0.1, "raise_rock"); + } + + void raise_rock() + { + ROCK_RAISE_COUNT += 1; + ROCK_Z += 4; + SetEntityOrigin(MY_ROCK, Vector3(ROCK_X, ROCK_Y, ROCK_Z)); + if (ROCK_RAISE_COUNT >= 15) + { + throw_rock(); + } + if (!(ROCK_RAISE_COUNT < 15)) return; + ScheduleDelayedEvent(0.1, "raise_rock"); + } + + void throw_rock() + { + DeleteEntity(MY_ROCK); + TossProjectile("proj_troll_rock", /* TODO: $relpos */ $relpos(0, 30, 8), "none", 800, ROCK_DAMAGE, 0.75, "none"); + CallExternal("ent_lastprojectile", "ext_lighten", 0); + ScheduleDelayedEvent(0.1, "npcatk_resume_ai"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (((MY_ROCK !is null))) + { + CallExternal(MY_ROCK, "toss_rock", GetEntityIndex(m_hLastStruck), ROCK_DAMAGE); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/skeleton_stone3.as b/scripts/angelscript/monsters/skeleton_stone3.as new file mode 100644 index 00000000..d9af1d8a --- /dev/null +++ b/scripts/angelscript/monsters/skeleton_stone3.as @@ -0,0 +1,123 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class SkeletonStone3 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_RUN; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_GIVE_EXP; + string SET_GREEK; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + string SOUND_PUSH; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int STONE_SKELETON; + int STUN_ATK_CHANCE; + int STUN_ATTACK; + string WAS_SLEEPING; + + SkeletonStone3() + { + NPC_ALLY_RESPONSE_RANGE = 6000; + ANIM_RUN = "run"; + SKEL_HP = 2000; + ATTACK_HITCHANCE = 0.95; + ATTACK_DAMAGE_LOW = 30; + ATTACK_DAMAGE_HIGH = 60; + NPC_GIVE_EXP = 200; + DROP_GOLD = 1; + DROP_GOLD_MIN = 35; + DROP_GOLD_MAX = 65; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + SOUND_PUSH = "monsters/skeleton/calrain3.wav"; + STUN_ATK_CHANCE = 10; + STONE_SKELETON = 1; + Precache("monsters/skeleton_boss1.mdl"); + } + + void skeleton_spawn() + { + SetModel("monsters/skeleton_boss1.mdl"); + SetModelBody(0, 7); + SetModelBody(1, 7); + SetWidth(32); + SetHeight(80); + if (!(SLEEPER)) + { + animate_stone(); + } + if ((SLEEPER)) + { + SetInvincible(true); + WAS_SLEEPING = 1; + npcatk_suspend_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + SetAnimFrameRate(0.0); + } + if (StringToLower(GetMapName()) == "thanatos") + { + SET_GREEK = 1; + } + if ((SET_GREEK)) + { + SetModelBody(0, 10); + } + } + + void animate_stone() + { + SetName("Petrified Blademaster"); + SetRoam(true); + SetBloodType("none"); + SetDamageResistance("all", ".6"); + ANIM_ATTACK = "attack3"; + SetHearingSensitivity(3); + } + + void attack_1() + { + STUN_ATTACK = 1; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = "attack3"; + } + + void attack_3() + { + STUN_ATTACK = 0; + attack_snd(); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_HITCHANCE, "slash"); + if (!(RandomInt(1, 100) < STUN_ATK_CHANCE)) return; + ANIM_ATTACK = "attack1"; + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(STUN_ATTACK)) return; + EmitSound(GetOwner(), 0, SOUND_PUSH, 10); + ApplyEffect(param2, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + STUN_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/skels_deep_sleep.as b/scripts/angelscript/monsters/skels_deep_sleep.as new file mode 100644 index 00000000..42760caa --- /dev/null +++ b/scripts/angelscript/monsters/skels_deep_sleep.as @@ -0,0 +1,37 @@ +#pragma context server + +namespace MS +{ + +class SkelsDeepSleep : CGameScript +{ + int PLAYING_DEAD; + + void OnSpawn() override + { + SetRace("beloved"); + SetInvincible(true); + SetName("skels_deep_sleep"); + SetFly(true); + SetHealth(10); + PLAYING_DEAD = 1; + LogDebug("Deep Sleep Spawned - skeletons will not awake until monsters/skels_wakeup is spawned"); + } + + void suicide_me() + { + LogDebug("skels_deep_sleep got order to suicide"); + SetRace("hated"); + SetInvincible(false); + SetAlive(0); + ScheduleDelayedEvent(0.2, "suicide_me2"); + } + + void suicide_me2() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/skels_normal.as b/scripts/angelscript/monsters/skels_normal.as new file mode 100644 index 00000000..0b3a3790 --- /dev/null +++ b/scripts/angelscript/monsters/skels_normal.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class SkelsNormal : CGameScript +{ + string ANIM_DEATH; + string ANIM_IDLE; + float DEATH_DELAY; + + SkelsNormal() + { + DEATH_DELAY = 1.0; + ANIM_IDLE = ""; + ANIM_DEATH = ""; + } + + void OnSpawn() override + { + SetInvincible(true); + SetFly(true); + SetHealth(10); + ScheduleDelayedEvent(0.1, "remove_sleeps"); + } + + void remove_sleeps() + { + string SLEEPER_TYPEA = FindEntityByName("skels_sleep"); + string SLEEPER_IDA = GetEntityIndex(SLEEPER_TYPEB); + CallExternal(SLEEPER_IDA, "suicide_me"); + ScheduleDelayedEvent(0.2, "remove_sleeps2"); + } + + void remove_sleeps2() + { + string SLEEPER_TYPEB = FindEntityByName("skels_deep_sleep"); + string SLEEPER_IDB = GetEntityIndex(SLEEPER_TYPEB); + CallExternal(SLEEPER_IDB, "suicide_me"); + ScheduleDelayedEvent(0.2, "double_remove"); + } + + void double_remove() + { + DeleteEntity(SLEEPER_IDA); + DeleteEntity(SLEEPER_IDB); + } + +} + +} diff --git a/scripts/angelscript/monsters/skels_sleep.as b/scripts/angelscript/monsters/skels_sleep.as new file mode 100644 index 00000000..d31aa5ce --- /dev/null +++ b/scripts/angelscript/monsters/skels_sleep.as @@ -0,0 +1,35 @@ +#pragma context server + +namespace MS +{ + +class SkelsSleep : CGameScript +{ + int PLAYING_DEAD; + + void OnSpawn() override + { + SetRace("beloved"); + SetInvincible(true); + SetName("skels_sleep"); + SetFly(true); + SetHealth(10); + PLAYING_DEAD = 1; + } + + void suicide_me() + { + SetRace("hated"); + SetInvincible(false); + SetAlive(0); + ScheduleDelayedEvent(0.2, "suicide_me2"); + } + + void suicide_me2() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/skels_wakeup.as b/scripts/angelscript/monsters/skels_wakeup.as new file mode 100644 index 00000000..833f6f10 --- /dev/null +++ b/scripts/angelscript/monsters/skels_wakeup.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class SkelsWakeup : CGameScript +{ + void OnSpawn() override + { + CallExternal("all", "skeleton_wakeup_call"); + } + +} + +} diff --git a/scripts/angelscript/monsters/skullcrab.as b/scripts/angelscript/monsters/skullcrab.as new file mode 100644 index 00000000..125347fb --- /dev/null +++ b/scripts/angelscript/monsters/skullcrab.as @@ -0,0 +1,326 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Skullcrab : CGameScript +{ + int AM_SUMMONED; + string ANIM_ATT1; + string ANIM_ATT2; + string ANIM_ATTACK; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string CHEW_TARGET; + int DMG_ATT1; + int DMG_CHEW; + int FLINCH_CHANCE; + int FLINCH_DAMAGE_THRESHOLD; + float FLINCH_DELAY; + float FREQ_JUMP; + int IMMUNE_VAMPIRE; + int JUMP_SCAN_ACTIVE; + int MOVE_RANGE; + string MY_OWNER; + string NEXT_CHEW_DMG; + string NEXT_IDLE; + string NEXT_JUMP; + int NO_STUCK_CHECKS; + string NPCATK_TARGET; + int NPC_GIVE_EXP; + int NPC_NO_ATTACK; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_CHEW; + string SOUND_DEATH; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string STUCK_ON_FACE; + int TOSS_JUMP; + string UNSUMMON_TIME; + + Skullcrab() + { + NPC_GIVE_EXP = 300; + ANIM_ATTACK = "jump"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + MOVE_RANGE = 48; + ATTACK_RANGE = 70; + ATTACK_HITRANGE = 90; + ANIM_FLINCH = "flinch"; + FLINCH_DAMAGE_THRESHOLD = 25; + FLINCH_CHANCE = 5; + FLINCH_DELAY = 10.0; + SOUND_DEATH = "monsters/skeleton/skeldie.wav"; + Precache(SOUND_DEATH); + ANIM_ATT1 = "jump"; + ANIM_ATT2 = "jump_variation1"; + DMG_ATT1 = RandomInt(10, 30); + DMG_CHEW = RandomInt(50, 100); + ATTACK_HITCHANCE = 75; + SOUND_ALERT1 = "headcrab/hc_alert1.wav"; + SOUND_ALERT2 = "headcrab/hc_alert2.wav"; + SOUND_ATTACK1 = "headcrab/hc_attack2.wav"; + SOUND_ATTACK2 = "headcrab/hc_attack3.wav"; + SOUND_DEATH1 = "headcrab/hc_die1.wav"; + SOUND_DEATH2 = "headcrab/hc_die2.wav"; + SOUND_PAIN1 = "headcrab/hc_pain1.wav"; + SOUND_PAIN2 = "headcrab/hc_pain2.wav"; + SOUND_PAIN3 = "headcrab/hc_pain3.wav"; + SOUND_IDLE1 = "headcrab/hc_idle1.wav"; + SOUND_IDLE2 = "headcrab/hc_idle2.wav"; + SOUND_IDLE3 = "headcrab/hc_idle3.wav"; + SOUND_IDLE4 = "headcrab/hc_idle4.wav"; + SOUND_IDLE5 = "headcrab/hc_idle5.wav"; + SOUND_CHEW = "headcrab/hc_attack1.wav"; + FREQ_JUMP = Random(3.0, 5.0); + Precache(SOUND_DEATH1); + Precache(SOUND_DEATH2); + } + + void OnSpawn() override + { + SetName("Skrab"); + SetRace("undead"); + SetHealth(500); + SetRoam(true); + SetModel("monsters/skullcrab.mdl"); + SetWidth(20); + SetHeight(50); + IMMUNE_VAMPIRE = 1; + SetBloodType("none"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 2.0); + SetHearingSensitivity(4); + NEXT_JUMP = GetGameTime(); + NEXT_JUMP += Random(1.0, 3.0); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (m_hAttackTarget == "unset") + { + if (GetGameTime() > NEXT_IDLE) + { + } + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += Random(10.0, 20.0); + PlayAnim("once", ANIM_ATTACK); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(AM_SUMMONED)) return; + if (GetGameTime() > UNSUMMON_TIME) + { + npc_suicide("fade"); + } + if (!(IsEntityAlive(MY_OWNER))) + { + npc_suicide("fade"); + } + } + + void npc_targetsighted() + { + if ((JUMP_SCAN_ACTIVE)) return; + if (!(GetEntityRange(m_hAttackTarget) < 512)) return; + if (!(GetGameTime() > NEXT_JUMP)) return; + NEXT_JUMP = GetGameTime(); + NEXT_JUMP += 20.0; + SetMoveDest(m_hAttackTarget); + PlayAnim("critical", ANIM_ATTACK); + ScheduleDelayedEvent(0.01, "do_jump"); + } + + void do_jump() + { + int V_ADJ = 0; + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + string MY_Z = (GetMonsterProperty("origin")).z; + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + Z_DIFF *= 4; + if (Z_DIFF < 200) + { + int Z_DIFF = 200; + if ((TOSS_JUMP)) + { + TOSS_JUMP = 0; + int Z_DIFF = 0; + } + } + LogDebug("do_jump Z_DIFF - MY_Z vs TARG_Z"); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + SetRoam(false); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 1000, Z_DIFF)); + JUMP_SCAN_ACTIVE = 1; + NPC_NO_ATTACK = 1; + NO_STUCK_CHECKS = 1; + CHEW_TARGET = m_hAttackTarget; + ScheduleDelayedEvent(0.01, "jump_scan"); + ScheduleDelayedEvent(1.5, "end_jump_scan"); + ScheduleDelayedEvent(4.0, "abort_chew"); + } + + void jump_scan() + { + if (!(JUMP_SCAN_ACTIVE)) return; + if (!(IsEntityAlive(CHEW_TARGET))) return; + ScheduleDelayedEvent(0.1, "jump_scan"); + string TARG_RANGE = GetEntityRange(CHEW_TARGET); + if (TARG_RANGE > 96) + { + STUCK_ON_FACE = 0; + } + if (!(TARG_RANGE < 96)) return; + SetMoveDest(CHEW_TARGET); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 1000, 10)); + PlayAnim("once", "yaw_adjustment"); + if (TARG_RANGE < 64) + { + STUCK_ON_FACE = 1; + if (GetGameTime() > NEXT_CHEW_DMG) + { + } + NEXT_CHEW_DMG = GetGameTime(); + NEXT_CHEW_DMG += 0.5; + DoDamage(CHEW_TARGET, ATTACK_HITRANGE, DMG_CHEW, 1.0, "slash"); + EmitSound(GetOwner(), 2, SOUND_CHEW, 10); + } + else + { + STUCK_ON_FACE = 0; + } + } + + void end_jump_scan() + { + if (!(STUCK_ON_FACE)) + { + if ((JUMP_SCAN_ACTIVE)) + { + } + do_detatch(); + } + else + { + ScheduleDelayedEvent(0.5, "end_jump_scan"); + } + } + + void do_detatch() + { + JUMP_SCAN_ACTIVE = 0; + NPC_NO_ATTACK = 0; + NO_STUCK_CHECKS = 0; + NEXT_JUMP = GetGameTime(); + NEXT_JUMP += FREQ_JUMP; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -2000, 110)); + SetRoam(true); + } + + void abort_chew() + { + if (!(JUMP_SCAN_ACTIVE)) return; + do_detatch(); + } + + void OnPostSpawn() override + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + + void npc_selectattack() + { + int RND_ATTACK = RandomInt(1, 2); + if (RND_ATTACK == 1) + { + ANIM_ATTACK = ANIM_ATT1; + } + if (RND_ATTACK == 2) + { + ANIM_ATTACK = ANIM_ATT2; + } + } + + void OnDamage(int damage) override + { + if ((AM_SUMMONED)) + { + UNSUMMON_TIME = GetGameTime(); + UNSUMMON_TIME += 20.0; + } + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnFlinch() + { + EmitSound(GetOwner(), 0, SOUND_PAIN1, 10); + } + + void frame_jump() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_ATT1, ATTACK_HITCHANCE, "slash"); + } + + void frame_falloffend() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_ATT1, ATTACK_HITCHANCE, "slash"); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + NPCATK_TARGET = param2; + AM_SUMMONED = 1; + UNSUMMON_TIME = GetGameTime(); + UNSUMMON_TIME += 20.0; + SetMoveDest(m_hAttackTarget); + TOSS_JUMP = 1; + ScheduleDelayedEvent(0.1, "do_jump"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(AM_SUMMONED)) return; + if (!(IsEntityAlive(MY_OWNER))) return; + CallExternal(MY_OWNER, "crab_died"); + } + + void game_dodamage() + { + if ((AM_SUMMONED)) + { + UNSUMMON_TIME = GetGameTime(); + UNSUMMON_TIME += 20.0; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_black_base.as b/scripts/angelscript/monsters/slime_black_base.as new file mode 100644 index 00000000..0f46b952 --- /dev/null +++ b/scripts/angelscript/monsters/slime_black_base.as @@ -0,0 +1,197 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeBlackBase : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CHILD_DIST; + string CHILD_SCRIPT; + string MOMMY_KILLER; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + string NPC_DMG_MULTI; + string NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string NPC_HP_MULTI; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + SlimeBlackBase() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 30; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(1, 5); + NPC_MUST_SEE_TARGET = 0; + CHILD_SCRIPT = "monsters/slime_black_small"; + CHILD_DIST = 20; + Precache("monsters/slime.mdl"); + NO_SPAWN_STUCK_CHECK = 1; + } + + void OnSpawn() override + { + SetName("Black Pudding"); + SetHealth(40); + SetWidth(40); + SetHeight(44); + SetModel("monsters/slime_large.mdl"); + SetModelBody(0, 12); + SetHearingSensitivity(7); + SetRace("wildanimal"); + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + if (!(ME_NO_WANDER)) + { + SetRoam(false); + } + NPC_GIVE_EXP = 20; + ScheduleDelayedEvent(1.0, "slime_cycle"); + SetBloodType("green"); + SetSolid("none"); + SetDamageResistance("pierce", 0.25); + SetDamageResistance("slash", 0.75); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 1.5); + SetDamageResistance("poison", 0); + SetDamageResistance("stun", 0); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "acid"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + spawn_children(); + } + + void spawn_children() + { + string MY_KILLER = GetEntityIndex(m_hLastStruck); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(0, -20, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 45, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc", 0.1, CHILD_SCRIPT, /* TODO: $relpos */ $relpos(0, -20, 0), CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(0, 20, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 135, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc2", 0.2, CHILD_SCRIPT, LOC_OFFSET, CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(20, 0, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 225, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc3", 0.3, CHILD_SCRIPT, LOC_OFFSET, CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(-20, 0, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 315, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc4", 0.4, CHILD_SCRIPT, /* TODO: $relpos */ $relpos(-20, 0, 0), CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 10) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (!(NO_COMBAT_REPOS)) + { + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + string DEST_POS = GetEntityOrigin(m_hAttackTarget); + npcatk_suspend_ai(1.0, "combat_reposition"); + NPC_FORCED_MOVEDEST = 1; + int RND_ANG = RandomInt(0, 359); + DEST_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, ATTACK_RANGE, 0)); + SetMoveDest(DEST_POS); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void game_dynamically_created() + { + MOMMY_KILLER = param2; + npcatk_suspend_ai(0.5); + SetMoveDest(param1); + ScheduleDelayedEvent(0.75, "avenge_mommy", param2); + NPC_DMG_MULTI = param3; + NPC_HP_MULTI = param4; + if (NPC_DMG_MULTI > 0) + { + SetDamageMultiplier(param4); + } + } + + void avenge_mommy() + { + npcatk_settarget(MOMMY_KILLER, "he_killed_mommy!"); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_black_huge.as b/scripts/angelscript/monsters/slime_black_huge.as new file mode 100644 index 00000000..c8f5758f --- /dev/null +++ b/scripts/angelscript/monsters/slime_black_huge.as @@ -0,0 +1,54 @@ +#pragma context server + +#include "monsters/slime_black_base.as" + +namespace MS +{ + +class SlimeBlackHuge : CGameScript +{ + string ANIM_RUN; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CHILD_DIST; + string CHILD_SCRIPT; + int MOVE_RANGE; + int NO_COMBAT_REPOS; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + + SlimeBlackHuge() + { + MOVE_RANGE = 50; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 150; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE = Random(20, 50); + ANIM_RUN = "walk"; + CHILD_SCRIPT = "monsters/slime_black_large2"; + CHILD_DIST = 30; + NO_COMBAT_REPOS = 1; + NPC_BASE_EXP = 150; + Precache("monsters/slime_large.mdl"); + } + + void OnSpawn() override + { + SetName("Huge Black Pudding"); + SetHealth(400); + SetModel("monsters/slime_huge.mdl"); + SetRace("demon"); + SetRoam(true); + NPC_GIVE_EXP = 150; + } + + void bite1() + { + npcatk_dodamage(/* TODO: $relpos */ $relpos(0, 0, 0), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, 0.0, "reflective", "acid"); + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_black_large.as b/scripts/angelscript/monsters/slime_black_large.as new file mode 100644 index 00000000..f9f1754c --- /dev/null +++ b/scripts/angelscript/monsters/slime_black_large.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "monsters/slime_black_base.as" + +namespace MS +{ + +class SlimeBlackLarge : CGameScript +{ + SlimeBlackLarge() + { + SetName("Large Black Pudding"); + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_black_large2.as b/scripts/angelscript/monsters/slime_black_large2.as new file mode 100644 index 00000000..69b48b0f --- /dev/null +++ b/scripts/angelscript/monsters/slime_black_large2.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "monsters/slime_black_base.as" + +namespace MS +{ + +class SlimeBlackLarge2 : CGameScript +{ + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int CHILD_DIST; + string CHILD_SCRIPT; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + + SlimeBlackLarge2() + { + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(10, 25); + CHILD_SCRIPT = "monsters/slime_black_small2"; + CHILD_DIST = 20; + NPC_BASE_EXP = 80; + SetName("Large Black Pudding"); + SetHealth(200); + SetRace("demon"); + NPC_GIVE_EXP = 80; + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_black_large_nr.as b/scripts/angelscript/monsters/slime_black_large_nr.as new file mode 100644 index 00000000..f7f6dd52 --- /dev/null +++ b/scripts/angelscript/monsters/slime_black_large_nr.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "monsters/slime_black_base.as" + +namespace MS +{ + +class SlimeBlackLargeNr : CGameScript +{ + int HEAR_RANGE_MAX; + int HEAR_RANGE_PLAYER; + int ME_NO_WANDER; + + SlimeBlackLargeNr() + { + HEAR_RANGE_MAX = 400; + HEAR_RANGE_PLAYER = 300; + ME_NO_WANDER = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_black_small.as b/scripts/angelscript/monsters/slime_black_small.as new file mode 100644 index 00000000..c4859e8c --- /dev/null +++ b/scripts/angelscript/monsters/slime_black_small.as @@ -0,0 +1,131 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeBlackSmall : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string MOMMY_KILLER; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + SlimeBlackSmall() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 10; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(1, 3); + NPC_MUST_SEE_TARGET = 0; + NO_SPAWN_STUCK_CHECK = 1; + NPC_BASE_EXP = 10; + } + + void OnSpawn() override + { + SetName("Black Pudding"); + SetHealth(20); + SetWidth(40); + SetBloodType("green"); + SetHeight(64); + SetModel("monsters/slime.mdl"); + SetModelBody(0, 12); + SetRace("wildanimal"); + SetRoam(true); + SetSolid("none"); + NPC_GIVE_EXP = 10; + SetDamageResistance("poison", 0); + SetDamageResistance("stun", 0); + SetHearingSensitivity(8); + ScheduleDelayedEvent(0.5, "slime_cycle"); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "acid"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dynamically_created() + { + MOMMY_KILLER = param2; + npcatk_suspend_ai(0.5); + SetMoveDest(param1); + ScheduleDelayedEvent(0.75, "avenge_mommy", param2); + } + + void avenge_mommy() + { + npcatk_settarget(MOMMY_KILLER, "he_killed_mommy!"); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 10) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_black_small2.as b/scripts/angelscript/monsters/slime_black_small2.as new file mode 100644 index 00000000..5054dea2 --- /dev/null +++ b/scripts/angelscript/monsters/slime_black_small2.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "monsters/slime_black_small.as" + +namespace MS +{ + +class SlimeBlackSmall2 : CGameScript +{ + void OnSpawn() override + { + SetRace("demon"); + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_bomber.as b/scripts/angelscript/monsters/slime_bomber.as new file mode 100644 index 00000000..1e0e6d30 --- /dev/null +++ b/scripts/angelscript/monsters/slime_bomber.as @@ -0,0 +1,101 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeBomber : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int EXPLODED; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string POISON_CLOUD; + string SLIME_TARGETS; + string SOUND_DEATH; + + SlimeBomber() + { + ANIM_ATTACK = "attack"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die"; + MOVE_RANGE = 64; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 64; + NPC_GIVE_EXP = 200; + SOUND_DEATH = "monsters/sludge/bio.wav"; + Precache(SOUND_DEATH); + POISON_CLOUD = "monsters/summon/npc_poison_cloud2"; + } + + void OnSpawn() override + { + SetName("Plague Spreader"); + SetRace("demon"); + SetHealth(100); + SetWidth(40); + SetHeight(44); + SetModel("monsters/slime_large.mdl"); + SetModelBody(0, 0); + SetDamageResistance("pierce", 1.5); + SetDamageResistance("blunt", ".75"); + SetDamageResistance("poison", ".25"); + SetDamageResistance("acid", ".25"); + SetDamageResistance("fire", 1.5); + } + + void OnPostSpawn() override + { + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + } + + void bite1() + { + explode(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + explode(); + } + + void explode() + { + if ((EXPLODED)) return; + EXPLODED = 1; + SLIME_TARGETS = FindEntitiesInSphere(GetOwner(), 96); + if (SLIME_TARGETS != "none") + { + for (int i = 0; i < GetTokenCount(SLIME_TARGETS, ";"); i++) + { + slime_affect_targs(); + } + } + string CLOUD_POS = GetEntityOrigin(GetOwner()); + string GRND_CLOUD = /* TODO: $get_ground_height */ $get_ground_height(CLOUD_POS); + GRND_CLOUD += 24; + CLOUD_POS = "z"; + SpawnNPC("monsters/summon/npc_poison_cloud2", CLOUD_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), RandomInt(100, 200), 60.0, 1 + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + ScheduleDelayedEvent(60.0, "npc_suicide"); + } + + void slime_affect_targs() + { + string CUR_TARG = GetToken(SLIME_TARGETS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison_blind", 10.0, GetEntityIndex(GetOwner()), 25); + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_ceriux1.as b/scripts/angelscript/monsters/slime_ceriux1.as new file mode 100644 index 00000000..b92a995b --- /dev/null +++ b/scripts/angelscript/monsters/slime_ceriux1.as @@ -0,0 +1,177 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeCeriux1 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float ATTACK_RATE; + int DELAY_ATTACK; + int MOVE_FAST; + int MOVE_NORMAL; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_GIVE_EXP; + string NPC_HACKED_MOVE_SPEED; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + SlimeCeriux1() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "Idle1"; + ANIM_RUN = "Idle2"; + ANIM_WALK = "move"; + ANIM_ATTACK = "Move"; + ANIM_DEATH = "die"; + MOVE_RANGE = 20; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(1, 3); + NO_SPAWN_STUCK_CHECK = 1; + MOVE_FAST = 200; + MOVE_NORMAL = 100; + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + ATTACK_RATE = 1.0; + } + + void OnSpawn() override + { + SetName("Sewer Slime"); + SetHealth(20); + SetWidth(20); + SetBloodType("green"); + SetHeight(20); + SetHearingSensitivity(4); + SetModel("monsters/slime_ceirux.mdl"); + SetRace("wildanimal"); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetSolid("none"); + NPC_GIVE_EXP = 10; + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "acid"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 5) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void game_movingto_dest() + { + NPC_HACKED_MOVE_SPEED = MOVE_FAST; + if ((SHIELD_ON)) + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if (m_hAttackTarget == "unset") + { + NPC_HACKED_MOVE_SPEED = MOVE_NORMAL; + } + if ((PLAYING_STAB)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + if ((AM_SUMMONING)) + { + NPC_HACKED_MOVE_SPEED = 0; + } + SetAnimMoveSpeed(NPC_HACKED_MOVE_SPEED); + } + + void game_stopmoving() + { + SetAnimMoveSpeed(0); + } + + void npcatk_attack() + { + if ((DELAY_ATTACK)) return; + DELAY_ATTACK = 1; + PlayAnim("critical", "Attack1"); + bite1(); + ATTACK_RATE("attack_delay_reset"); + } + + void attack_delay_reset() + { + DELAY_ATTACK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + npc_fade_away(); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_ceriux1_nr.as b/scripts/angelscript/monsters/slime_ceriux1_nr.as new file mode 100644 index 00000000..b42dd25c --- /dev/null +++ b/scripts/angelscript/monsters/slime_ceriux1_nr.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/slime_ceriux1.as" + +namespace MS +{ + +class SlimeCeriux1Nr : CGameScript +{ + int ME_NO_WANDER; + + SlimeCeriux1Nr() + { + ME_NO_WANDER = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_fools_gold_small.as b/scripts/angelscript/monsters/slime_fools_gold_small.as new file mode 100644 index 00000000..f74ada89 --- /dev/null +++ b/scripts/angelscript/monsters/slime_fools_gold_small.as @@ -0,0 +1,140 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeFoolsGoldSmall : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int IS_BLOODLESS; + string MOMMY_KILLER; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + SlimeFoolsGoldSmall() + { + SOUND_DEATH = "misc/gold.wav"; + SOUND_STRUCK1 = "misc/gold.wav"; + SOUND_STRUCK2 = "misc/gold.wav"; + SOUND_IDLE = "misc/gold.wav"; + SOUND_ATTACK1 = "misc/goldold.wav"; + SOUND_ATTACK2 = "misc/goldold.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 10; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.77; + ATTACK_DAMAGE = Random(7, 77); + NPC_MUST_SEE_TARGET = 0; + NO_SPAWN_STUCK_CHECK = 1; + NPC_BASE_EXP = 10; + } + + void OnSpawn() override + { + SetName("Fools Gold"); + SetHealth(777); + SetWidth(40); + SetBloodType("red"); + SetHeight(64); + SetModel("dwarvencave/slime_ecave.mdl"); + SetModelBody(0, 2); + SetRace("demon"); + SetRoam(true); + SetSolid("none"); + NPC_GIVE_EXP = 777; + SetHearingSensitivity(8); + ScheduleDelayedEvent(0.5, "slime_cycle"); + SetDamageResistance("pierce", 0.2); + SetDamageResistance("slash", 0.4); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("fire", 1.2); + SetDamageResistance("acid", 2.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("lightning", 0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("stun", 0.33); + IS_BLOODLESS = 1; + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "blunt"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dynamically_created() + { + MOMMY_KILLER = param2; + npcatk_suspend_ai(0.5); + SetMoveDest(param1); + ScheduleDelayedEvent(0.75, "avenge_mommy", param2); + } + + void avenge_mommy() + { + npcatk_settarget(MOMMY_KILLER, "he_killed_mommy!"); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 10) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_frost.as b/scripts/angelscript/monsters/slime_frost.as new file mode 100644 index 00000000..850443b3 --- /dev/null +++ b/scripts/angelscript/monsters/slime_frost.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class SlimeFrost : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/slime_green.as b/scripts/angelscript/monsters/slime_green.as new file mode 100644 index 00000000..db617616 --- /dev/null +++ b/scripts/angelscript/monsters/slime_green.as @@ -0,0 +1,155 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeGreen : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float FREQ_SPIT; + int MOVE_RANGE; + int NPC_GIVE_EXP; + int NPC_RANGED; + float POISON_DAMAGE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + int SPIT_DAMAGE; + int SPIT_DELAY; + string SPIT_TARGET; + + SlimeGreen() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + MOVE_RANGE = 256; + ATTACK_MOVERANGE = 256; + MOVE_RANGE = 256; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + ATTACK_RANGE = 40; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(5, 15); + POISON_DAMAGE = Random(1, 5); + FREQ_SPIT = 2.0; + SPIT_DAMAGE = RandomInt(5, 20); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(3, 10)); + if (m_hAttackTarget == "unset") + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(FREQ_SPIT); + if ((IsEntityAlive(SPIT_TARGET))) + { + } + string TARG_ORG = GetEntityOrigin(SPIT_TARGET); + string TARG_TRACE = TraceLine(GetMonsterProperty("origin"), TARG_ORG); + if (TARG_TRACE == TARG_ORG) + { + } + EmitSound(GetOwner(), 0, SOUND_ATTACK1, 10); + TossProjectile("proj_poison", /* TODO: $relpos */ $relpos(0, 0, -8), SPIT_TARGET, 300, SPIT_DAMAGE, 2, "none"); + } + + void OnSpawn() override + { + SetName("Lesser Green Slime"); + SetHealth(200); + SetWidth(32); + SetHeight(32); + SetModel("monsters/slime.mdl"); + SetModelBody(0, 0); + SetRace("demon"); + SetBloodType("green"); + SetRoam(true); + NPC_GIVE_EXP = 80; + SetHearingSensitivity(10); + SetDamageResistance("pierce", 0.25); + SetDamageResistance("slash", 0.75); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("fire", 1.5); + SetDamageResistance("poison", 0); + NPC_RANGED = 0; + } + + void bite1() + { + // PlayRandomSound from: SOUND_ATTACK2 + array sounds = {SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "acid"); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + string SLIME_HEARD = GetEntityIndex("ent_lastheard"); + if (GetRelationship(SLIME_HEARD) == "enemy") + { + SPIT_TARGET = SLIME_HEARD; + } + } + + void npc_targetsighted() + { + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_MOVERANGE)) return; + if (!(RandomInt(1, 5) == 1)) return; + if ((IS_FLEEING)) return; + SPIT_TARGET = m_hAttackTarget; + npcatk_flee(m_hAttackTarget, 512, 2.0); + } + + void spit_delay_reset() + { + SPIT_DELAY = 0; + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(RandomInt(1, 10) == 1)) return; + if (!(GetEntityRange(m_hLastStruck) < ATTACK_HITRANGE)) return; + ApplyEffect(m_hLastStruck, "effects/dot_poison", Random(3, 5), GetEntityIndex(GetOwner()), POISON_DAMAGE); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + SPIT_TARGET = GetEntityIndex(m_hLastStruck); + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + npcatk_flee(GetEntityIndex(m_hLastStruck), 512, 1.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_green_huge.as b/scripts/angelscript/monsters/slime_green_huge.as new file mode 100644 index 00000000..1af4f9fc --- /dev/null +++ b/scripts/angelscript/monsters/slime_green_huge.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeGreenHuge : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CLOUD_DAMAGE; + float CLOUD_DELAY; + float CLOUD_DURATION; + float FREQ_CLOUD; + float FREQ_SPIT; + float FREQ_SPIT_SCAN; + string NEXT_CLOUD; + string NEXT_SPIT; + string NEXT_SPIT_SCAN; + int NPC_GIVE_EXP; + string N_SPIT_TARGETS; + float POISON_DAMAGE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + int SPIT_DAMAGE; + int SPIT_RANGE; + float SPIT_ROF; + string SPIT_TARGET; + string SPIT_TARGETS; + + SlimeGreenHuge() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(60, 80); + POISON_DAMAGE = Random(20, 45); + SPIT_RANGE = 1024; + SPIT_ROF = 2.0; + SPIT_DAMAGE = RandomInt(60, 100); + CLOUD_DELAY = 15.0; + CLOUD_DAMAGE = RandomInt(20, 60); + CLOUD_DURATION = 10.0; + FREQ_SPIT = 1.0; + FREQ_SPIT_SCAN = 2.0; + FREQ_CLOUD = 30.0; + if (m_hAttackTarget == "unset") + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + + void OnSpawn() override + { + SetName("Huge Green Slime"); + SetHealth(4000); + SetWidth(100); + SetHeight(72); + SetModel("monsters/slime_huge.mdl"); + SetRace("demon"); + SetRoam(true); + NPC_GIVE_EXP = 1000; + SetDamageResistance("pierce", 0.25); + SetDamageResistance("slash", 0.75); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("fire", 1.5); + SetDamageResistance("poison", 0.0); + } + + void bite1() + { + npcatk_dodamage(/* TODO: $relpos */ $relpos(0, 0, 0), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, 0.0, "reflective", "acid"); + } + + void npc_targetsighted() + { + if (!(GetGameTime() > NEXT_SPIT_SCAN)) return; + NEXT_SPIT_SCAN = GetGameTime(); + NEXT_SPIT_SCAN += FREQ_SPIT_SCAN; + SPIT_TARGETS = FindEntitiesInSphere("enemy", 512); + N_SPIT_TARGETS = GetTokenCount(SPIT_TARGETS, ";"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((I_R_FROZEN)) return; + if (!(m_hAttackTarget != "none")) return; + if (!(N_SPIT_TARGETS > 0)) return; + if (!(GetGameTime() > NEXT_SPIT)) return; + NEXT_SPIT = GetGameTime(); + NEXT_SPIT += FREQ_SPIT; + if (N_SPIT_TARGETS > 1) + { + string N_MINUS = N_SPIT_TARGETS; + N_MINUS -= 1; + int RND_TARGET = RandomInt(0, N_MINUS); + SPIT_TARGET = GetToken(SPIT_TARGETS, RND_TARGET, ";"); + } + else + { + SPIT_TARGET = m_hAttackTarget; + } + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 0, -20), SPIT_TARGET, 300, SPIT_DAMAGE, 0.1, "none"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(RandomInt(1, 10) == 1)) return; + if (!(GetEntityRange(m_hLastStruck) < ATTACK_HITRANGE)) return; + ApplyEffect(m_hLastStruck, "effects/dot_poison", Random(3, 5), GetEntityIndex(GetOwner()), POISON_DAMAGE); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(GetGameTime() > NEXT_CLOUD)) return; + NEXT_CLOUD = GetGameTime(); + NEXT_CLOUD += FREQ_CLOUD; + SpawnNPC("monsters/summon/npc_poison_cloud2", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), CLOUD_DAMAGE, CLOUD_DURATION, 1 + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_green_large.as b/scripts/angelscript/monsters/slime_green_large.as new file mode 100644 index 00000000..58fb3e6c --- /dev/null +++ b/scripts/angelscript/monsters/slime_green_large.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeGreenLarge : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CLOUD_DAMAGE; + float CLOUD_DELAY; + float CLOUD_DURATION; + float FREQ_CLOUD; + float FREQ_SPIT; + float FREQ_SPIT_SCAN; + string NEXT_CLOUD; + string NEXT_SPIT; + string NEXT_SPIT_SCAN; + int NPC_GIVE_EXP; + string N_SPIT_TARGETS; + float POISON_DAMAGE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + int SPIT_DAMAGE; + int SPIT_RANGE; + float SPIT_ROF; + string SPIT_TARGET; + string SPIT_TARGETS; + + SlimeGreenLarge() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.75; + ATTACK_DAMAGE = Random(35, 55); + POISON_DAMAGE = Random(10, 15); + SPIT_RANGE = 1024; + SPIT_ROF = 2.0; + SPIT_DAMAGE = RandomInt(30, 50); + CLOUD_DELAY = 15.0; + CLOUD_DAMAGE = RandomInt(10, 30); + CLOUD_DURATION = 10.0; + FREQ_SPIT = 1.0; + FREQ_SPIT_SCAN = 2.0; + FREQ_CLOUD = 30.0; + if (m_hAttackTarget == "unset") + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + + void OnSpawn() override + { + SetName("Large Green Slime"); + SetHealth(800); + SetWidth(70); + SetHeight(64); + SetModel("monsters/slime_large.mdl"); + SetRace("demon"); + SetRoam(true); + NPC_GIVE_EXP = 450; + SetDamageResistance("pierce", 0.25); + SetDamageResistance("slash", 0.75); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("fire", 1.5); + SetDamageResistance("poison", 0.0); + } + + void bite1() + { + npcatk_dodamage(/* TODO: $relpos */ $relpos(0, 0, 0), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, 0.0, "reflective", "acid"); + } + + void npc_targetsighted() + { + if (!(GetGameTime() > NEXT_SPIT_SCAN)) return; + NEXT_SPIT_SCAN = GetGameTime(); + NEXT_SPIT_SCAN += FREQ_SPIT_SCAN; + SPIT_TARGETS = FindEntitiesInSphere("enemy", 512); + N_SPIT_TARGETS = GetTokenCount(SPIT_TARGETS, ";"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((I_R_FROZEN)) return; + if (!(m_hAttackTarget != "none")) return; + if (!(N_SPIT_TARGETS > 0)) return; + if (!(GetGameTime() > NEXT_SPIT)) return; + NEXT_SPIT = GetGameTime(); + NEXT_SPIT += FREQ_SPIT; + if (N_SPIT_TARGETS > 1) + { + string N_MINUS = N_SPIT_TARGETS; + N_MINUS -= 1; + int RND_TARGET = RandomInt(0, N_MINUS); + SPIT_TARGET = GetToken(SPIT_TARGETS, RND_TARGET, ";"); + } + else + { + SPIT_TARGET = m_hAttackTarget; + } + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 0, -16), SPIT_TARGET, 300, SPIT_DAMAGE, 0.1, "none"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(RandomInt(1, 10) == 1)) return; + if (!(GetEntityRange(m_hLastStruck) < ATTACK_HITRANGE)) return; + ApplyEffect(m_hLastStruck, "effects/dot_poison", Random(3, 5), GetEntityIndex(GetOwner()), POISON_DAMAGE); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(GetGameTime() > NEXT_CLOUD)) return; + NEXT_CLOUD = GetGameTime(); + NEXT_CLOUD += FREQ_CLOUD; + SpawnNPC("monsters/summon/npc_poison_cloud2", GetEntityOrigin(GetOwner()), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), CLOUD_DAMAGE, CLOUD_DURATION, 1 + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_lava_large.as b/scripts/angelscript/monsters/slime_lava_large.as new file mode 100644 index 00000000..29f19905 --- /dev/null +++ b/scripts/angelscript/monsters/slime_lava_large.as @@ -0,0 +1,196 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeLavaLarge : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CHILD_DIST; + string CHILD_SCRIPT; + string MOMMY_KILLER; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + string NPC_DMG_MULTI; + string NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string NPC_HP_MULTI; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + SlimeLavaLarge() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 30; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE = Random(55, 99); + NPC_MUST_SEE_TARGET = 0; + CHILD_SCRIPT = "test_scripts/example_scripts/monsters/slime_lava_small"; + CHILD_DIST = 20; + Precache("dwarvencave/slime_ecave.mdl"); + NO_SPAWN_STUCK_CHECK = 1; + } + + void OnSpawn() override + { + SetName("Lava Pudding"); + SetHealth(750); + SetWidth(40); + SetHeight(44); + SetModel("dwarvencave/slime_ecave.mdl"); + SetModelBody(0, 0); + SetHearingSensitivity(7); + SetRace("wildanimal"); + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + if (!(ME_NO_WANDER)) + { + SetRoam(false); + } + NPC_GIVE_EXP = 750; + ScheduleDelayedEvent(1.0, "slime_cycle"); + SetBloodType("red"); + SetSolid("none"); + SetDamageResistance("pierce", 0.25); + SetDamageResistance("slash", 0.75); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("fire", 0); + SetDamageResistance("stun", 0.25); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "fire"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + spawn_children(); + } + + void spawn_children() + { + string MY_KILLER = GetEntityIndex(m_hLastStruck); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(0, -20, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 45, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc", 0.1, CHILD_SCRIPT, /* TODO: $relpos */ $relpos(0, -20, 0), CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(0, 20, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 135, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc2", 0.2, CHILD_SCRIPT, LOC_OFFSET, CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(20, 0, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 225, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc3", 0.3, CHILD_SCRIPT, LOC_OFFSET, CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(-20, 0, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 315, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc4", 0.4, CHILD_SCRIPT, /* TODO: $relpos */ $relpos(-20, 0, 0), CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 10) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (!(NO_COMBAT_REPOS)) + { + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + string DEST_POS = GetEntityOrigin(m_hAttackTarget); + npcatk_suspend_ai(1.0, "combat_reposition"); + NPC_FORCED_MOVEDEST = 1; + int RND_ANG = RandomInt(0, 359); + DEST_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, ATTACK_RANGE, 0)); + SetMoveDest(DEST_POS); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void game_dynamically_created() + { + MOMMY_KILLER = param2; + npcatk_suspend_ai(0.5); + SetMoveDest(param1); + ScheduleDelayedEvent(0.75, "avenge_mommy", param2); + NPC_DMG_MULTI = param3; + NPC_HP_MULTI = param4; + if (NPC_DMG_MULTI > 0) + { + SetDamageMultiplier(param4); + } + } + + void avenge_mommy() + { + npcatk_settarget(MOMMY_KILLER, "he_killed_mommy!"); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_lava_small.as b/scripts/angelscript/monsters/slime_lava_small.as new file mode 100644 index 00000000..527dbc04 --- /dev/null +++ b/scripts/angelscript/monsters/slime_lava_small.as @@ -0,0 +1,135 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeLavaSmall : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string MOMMY_KILLER; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + SlimeLavaSmall() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 10; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE = Random(33, 66); + NPC_MUST_SEE_TARGET = 0; + NO_SPAWN_STUCK_CHECK = 1; + NPC_BASE_EXP = 10; + } + + void OnSpawn() override + { + SetName("small Lava Pudding"); + SetHealth(350); + SetWidth(40); + SetBloodType("red"); + SetHeight(64); + SetModel("dwarvencave/slime_ecave.mdl"); + SetModelBody(0, 0); + SetRace("wildanimal"); + SetRoam(true); + SetSolid("none"); + NPC_GIVE_EXP = 250; + SetHearingSensitivity(8); + ScheduleDelayedEvent(0.5, "slime_cycle"); + SetDamageResistance("pierce", 0.25); + SetDamageResistance("slash", 0.75); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("fire", 0); + SetDamageResistance("stun", 0.25); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "fire"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dynamically_created() + { + MOMMY_KILLER = param2; + npcatk_suspend_ai(0.5); + SetMoveDest(param1); + ScheduleDelayedEvent(0.75, "avenge_mommy", param2); + } + + void avenge_mommy() + { + npcatk_settarget(MOMMY_KILLER, "he_killed_mommy!"); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 10) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_lightning.as b/scripts/angelscript/monsters/slime_lightning.as new file mode 100644 index 00000000..753b9027 --- /dev/null +++ b/scripts/angelscript/monsters/slime_lightning.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/lslime.as" + +namespace MS +{ + +class SlimeLightning : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/slime_magma_large.as b/scripts/angelscript/monsters/slime_magma_large.as new file mode 100644 index 00000000..8e1531a5 --- /dev/null +++ b/scripts/angelscript/monsters/slime_magma_large.as @@ -0,0 +1,196 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeMagmaLarge : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CHILD_DIST; + string CHILD_SCRIPT; + string MOMMY_KILLER; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + string NPC_DMG_MULTI; + string NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string NPC_HP_MULTI; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + SlimeMagmaLarge() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 30; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE = Random(66, 99); + NPC_MUST_SEE_TARGET = 0; + CHILD_SCRIPT = "test_scripts/example_scripts/monsters/slime_magma_small"; + CHILD_DIST = 20; + Precache("dwarvencave/slime_ecave.mdl"); + NO_SPAWN_STUCK_CHECK = 1; + } + + void OnSpawn() override + { + SetName("Magma Pudding"); + SetHealth(840); + SetWidth(40); + SetHeight(44); + SetModel("dwarvencave/slime_ecave.mdl"); + SetModelBody(0, 1); + SetHearingSensitivity(7); + SetRace("wildanimal"); + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + if (!(ME_NO_WANDER)) + { + SetRoam(false); + } + NPC_GIVE_EXP = 840; + ScheduleDelayedEvent(1.0, "slime_cycle"); + SetBloodType("red"); + SetSolid("none"); + SetDamageResistance("pierce", 0.25); + SetDamageResistance("slash", 0.75); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("cold", 1.2); + SetDamageResistance("fire", 0); + SetDamageResistance("stun", 0.15); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "fire"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + spawn_children(); + } + + void spawn_children() + { + string MY_KILLER = GetEntityIndex(m_hLastStruck); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(0, -20, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 45, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc", 0.1, CHILD_SCRIPT, /* TODO: $relpos */ $relpos(0, -20, 0), CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(0, 20, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 135, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc2", 0.2, CHILD_SCRIPT, LOC_OFFSET, CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(20, 0, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 225, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc3", 0.3, CHILD_SCRIPT, LOC_OFFSET, CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(-20, 0, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 315, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc4", 0.4, CHILD_SCRIPT, /* TODO: $relpos */ $relpos(-20, 0, 0), CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 10) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (!(NO_COMBAT_REPOS)) + { + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + string DEST_POS = GetEntityOrigin(m_hAttackTarget); + npcatk_suspend_ai(1.0, "combat_reposition"); + NPC_FORCED_MOVEDEST = 1; + int RND_ANG = RandomInt(0, 359); + DEST_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, ATTACK_RANGE, 0)); + SetMoveDest(DEST_POS); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void game_dynamically_created() + { + MOMMY_KILLER = param2; + npcatk_suspend_ai(0.5); + SetMoveDest(param1); + ScheduleDelayedEvent(0.75, "avenge_mommy", param2); + NPC_DMG_MULTI = param3; + NPC_HP_MULTI = param4; + if (NPC_DMG_MULTI > 0) + { + SetDamageMultiplier(param4); + } + } + + void avenge_mommy() + { + npcatk_settarget(MOMMY_KILLER, "he_killed_mommy!"); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_magma_small.as b/scripts/angelscript/monsters/slime_magma_small.as new file mode 100644 index 00000000..a840f748 --- /dev/null +++ b/scripts/angelscript/monsters/slime_magma_small.as @@ -0,0 +1,135 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeMagmaSmall : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string MOMMY_KILLER; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + SlimeMagmaSmall() + { + SOUND_DEATH = "monsters/sludge/bio.wav"; + SOUND_STRUCK1 = "barnacle/bcl_bite3.wav"; + SOUND_STRUCK2 = "barnacle/bcl_die3.wav"; + SOUND_IDLE = "barnacle/bcl_alert2.wav"; + SOUND_ATTACK1 = "barnacle/bcl_tongue1.wav"; + SOUND_ATTACK2 = "barnacle/bcl_chew3.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 10; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE = Random(44, 66); + NPC_MUST_SEE_TARGET = 0; + NO_SPAWN_STUCK_CHECK = 1; + NPC_BASE_EXP = 10; + } + + void OnSpawn() override + { + SetName("small Magma Pudding"); + SetHealth(420); + SetWidth(40); + SetBloodType("red"); + SetHeight(64); + SetModel("dwarvencave/slime_ecave.mdl"); + SetModelBody(0, 1); + SetRace("wildanimal"); + SetRoam(true); + SetSolid("none"); + NPC_GIVE_EXP = 280; + SetHearingSensitivity(8); + ScheduleDelayedEvent(0.5, "slime_cycle"); + SetDamageResistance("pierce", 0.25); + SetDamageResistance("slash", 0.75); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("cold", 1.2); + SetDamageResistance("fire", 0); + SetDamageResistance("stun", 0.25); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "fire"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dynamically_created() + { + MOMMY_KILLER = param2; + npcatk_suspend_ai(0.5); + SetMoveDest(param1); + ScheduleDelayedEvent(0.75, "avenge_mommy", param2); + } + + void avenge_mommy() + { + npcatk_settarget(MOMMY_KILLER, "he_killed_mommy!"); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 10) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_mud_large.as b/scripts/angelscript/monsters/slime_mud_large.as new file mode 100644 index 00000000..5a3c2a7e --- /dev/null +++ b/scripts/angelscript/monsters/slime_mud_large.as @@ -0,0 +1,194 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeMudLarge : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CHILD_DIST; + string CHILD_SCRIPT; + string MOMMY_KILLER; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + string NPC_DMG_MULTI; + string NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + string NPC_HP_MULTI; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + SlimeMudLarge() + { + SOUND_DEATH = "player/hitground2.wav"; + SOUND_STRUCK1 = "player/hitground2.wav"; + SOUND_STRUCK2 = "player/hitground2.wav"; + SOUND_ATTACK1 = "player/hitground1.wav"; + SOUND_ATTACK2 = "player/hitground1.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 30; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE = Random(40, 80); + NPC_MUST_SEE_TARGET = 0; + CHILD_SCRIPT = "test_scripts/example_scripts/monsters/slime_mud_small"; + CHILD_DIST = 20; + Precache("dwarvencave/slime_ecave.mdl"); + NO_SPAWN_STUCK_CHECK = 1; + } + + void OnSpawn() override + { + SetName("Mud Pie"); + SetHealth(666); + SetWidth(40); + SetHeight(44); + SetModel("dwarvencave/slime_ecave.mdl"); + SetModelBody(0, 11); + SetHearingSensitivity(7); + SetRace("wildanimal"); + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + if (!(ME_NO_WANDER)) + { + SetRoam(false); + } + NPC_GIVE_EXP = 600; + ScheduleDelayedEvent(1.0, "slime_cycle"); + SetSolid("none"); + SetDamageResistance("pierce", 0.2); + SetDamageResistance("slash", 0.4); + SetDamageResistance("blunt", 0.8); + SetDamageResistance("cold", 0.6); + SetDamageResistance("fire", 0.6); + SetDamageResistance("lightning", 0); + SetDamageResistance("stun", 1); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "fire"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + spawn_children(); + } + + void spawn_children() + { + string MY_KILLER = GetEntityIndex(m_hLastStruck); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(0, -20, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 45, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc", 0.1, CHILD_SCRIPT, /* TODO: $relpos */ $relpos(0, -20, 0), CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(0, 20, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 135, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc2", 0.2, CHILD_SCRIPT, LOC_OFFSET, CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(20, 0, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 225, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc3", 0.3, CHILD_SCRIPT, LOC_OFFSET, CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + string CHILD_MOVE_DEST = GetMonsterProperty("origin"); + string LOC_OFFSET = /* TODO: $relpos */ $relpos(-20, 0, 0); + CHILD_MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 315, 0), Vector3(0, 128, 0)); + CallExternal(GAME_MASTER, "gm_createnpc4", 0.4, CHILD_SCRIPT, /* TODO: $relpos */ $relpos(-20, 0, 0), CHILD_MOVE_DEST, MY_KILLER, NPC_DMG_MULTI, NPC_HP_MULTI); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 10) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (!(NO_COMBAT_REPOS)) + { + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + string DEST_POS = GetEntityOrigin(m_hAttackTarget); + npcatk_suspend_ai(1.0, "combat_reposition"); + NPC_FORCED_MOVEDEST = 1; + int RND_ANG = RandomInt(0, 359); + DEST_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, ATTACK_RANGE, 0)); + SetMoveDest(DEST_POS); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + + void game_dynamically_created() + { + MOMMY_KILLER = param2; + npcatk_suspend_ai(0.5); + SetMoveDest(param1); + ScheduleDelayedEvent(0.75, "avenge_mommy", param2); + NPC_DMG_MULTI = param3; + NPC_HP_MULTI = param4; + if (NPC_DMG_MULTI > 0) + { + SetDamageMultiplier(param4); + } + } + + void avenge_mommy() + { + npcatk_settarget(MOMMY_KILLER, "he_killed_mommy!"); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/slime_mud_small.as b/scripts/angelscript/monsters/slime_mud_small.as new file mode 100644 index 00000000..d7d3757b --- /dev/null +++ b/scripts/angelscript/monsters/slime_mud_small.as @@ -0,0 +1,133 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlimeMudSmall : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + string MOMMY_KILLER; + int MOVE_RANGE; + int NO_SPAWN_STUCK_CHECK; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + + SlimeMudSmall() + { + SOUND_DEATH = "player/hitground2.wav"; + SOUND_STRUCK1 = "player/hitground2.wav"; + SOUND_STRUCK2 = "player/hitground2.wav"; + SOUND_ATTACK1 = "player/hitground1.wav"; + SOUND_ATTACK2 = "player/hitground1.wav"; + Precache(SOUND_DEATH); + ANIM_IDLE = "walk"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 10; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE = Random(25, 50); + NPC_MUST_SEE_TARGET = 0; + NO_SPAWN_STUCK_CHECK = 1; + NPC_BASE_EXP = 10; + } + + void OnSpawn() override + { + SetName("small Mud Pie"); + SetHealth(333); + SetWidth(40); + SetHeight(64); + SetModel("dwarvencave/slime_ecave.mdl"); + SetModelBody(0, 11); + SetRace("wildanimal"); + SetRoam(true); + SetSolid("none"); + NPC_GIVE_EXP = 225; + SetHearingSensitivity(8); + ScheduleDelayedEvent(0.5, "slime_cycle"); + SetDamageResistance("pierce", 0.2); + SetDamageResistance("slash", 0.4); + SetDamageResistance("blunt", 0.8); + SetDamageResistance("cold", 0.6); + SetDamageResistance("fire", 0.6); + SetDamageResistance("lightning", 0); + SetDamageResistance("stun", 0); + } + + void bite1() + { + npcatk_dodamage(HUNT_LASTTARGET, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "fire"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dynamically_created() + { + MOMMY_KILLER = param2; + npcatk_suspend_ai(0.5); + SetMoveDest(param1); + ScheduleDelayedEvent(0.75, "avenge_mommy", param2); + } + + void avenge_mommy() + { + npcatk_settarget(MOMMY_KILLER, "he_killed_mommy!"); + } + + void slime_cycle() + { + if (m_hAttackTarget == "unset") + { + if (RandomInt(1, 10) == 1) + { + } + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + } + if (m_hAttackTarget != "unset") + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + chicken_run(1.0, "combat_reposition"); + } + ScheduleDelayedEvent(2.0, "slime_cycle"); + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_cobra.as b/scripts/angelscript/monsters/snake_cobra.as new file mode 100644 index 00000000..84e4c93f --- /dev/null +++ b/scripts/angelscript/monsters/snake_cobra.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/cobra.as" + +namespace MS +{ + +class SnakeCobra : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/snake_cobra_boss.as b/scripts/angelscript/monsters/snake_cobra_boss.as new file mode 100644 index 00000000..1d5ac2c9 --- /dev/null +++ b/scripts/angelscript/monsters/snake_cobra_boss.as @@ -0,0 +1,439 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SnakeCobraBoss : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BREATH; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_IDLE_NORM; + string ANIM_RUN; + string ANIM_SLEEP; + string ANIM_SPIT; + string ANIM_WALK; + string ATTACK_ANIMINDEX; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BITE_SOUND; + int CAN_RETALIATE; + int CLOUD_COUNT; + string CLOUD_TARGS; + string CL_IDX; + string CL_SCRIPT; + string CUR_ANG; + int CYCLE_STARTED; + int DID_ALERT; + float DMG_BITE; + int DMG_GAS_DOT; + int DMG_POISON_DOT; + int DMG_SPIT; + int DOING_SPECIAL; + float GAS_DURATION; + int MONSTER_HP; + string MONSTER_MODEL; + string NEXT_SCAN; + string NEXT_SPIT; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + float POISON_DURATION; + int SLEEP_MODE; + string SOUND_ALERT; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_POISON; + string SOUND_SPIT; + string SOUND_STRUCK; + int SPIT_MODE; + string SPIT_TARGET; + + SnakeCobraBoss() + { + MONSTER_HP = 12000; + DMG_SPIT = 400; + DMG_BITE = Random(100, 250); + DMG_POISON_DOT = 25; + DMG_GAS_DOT = 75; + POISON_DURATION = 5.0; + GAS_DURATION = 30.0; + MONSTER_MODEL = "monsters/gcobra_boss.mdl"; + ANIM_SPIT = "spit"; + SOUND_SPIT = "agrunt/ag_attack2.wav"; + NPC_GIVE_EXP = 200; + if (StringToLower(GetMapName()) == "gertenheld_cave") + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 8000; + } + else + { + NPC_GIVE_EXP = 400; + } + CL_SCRIPT = "monsters/snake_cobra_boss_cl"; + ANIM_BREATH = "breath"; + CAN_RETALIATE = 0; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "diesimple"; + ANIM_IDLE = ANIM_SLEEP; + ANIM_IDLE_NORM = "idle1"; + ANIM_SLEEP = "idle2"; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = 350; + ATTACK_HITRANGE = 400; + ATTACK_MOVERANGE = 300; + ATTACK_HITCHANCE = 0.8; + SOUND_ALERT = "monsters/gsnake_idle1.wav"; + SOUND_IDLE = "monsters/gsnake_idle1.wav"; + SOUND_ATTACK = "agrunt/ag_attack2.wav"; + SOUND_POISON = "monsters/snakeman/sm_alert1.wav"; + SOUND_STRUCK = "debris/flesh3.wav"; + SOUND_PAIN1 = "agrunt/ag_attack3.wav"; + SOUND_PAIN2 = "agrunt/ag_idle2.wav"; + SOUND_DEATH = "agrunt/ag_die2.wav"; + Precache(SOUND_DEATH); + SOUND_ATTACK = "weapons/swinghuge.wav"; + } + + void OnSpawn() override + { + SetName("Gargantuan Cobra"); + SetHealth(MONSTER_HP); + SetDamageResistance("all", 0.95); + SetWidth(300); + SetHeight(250); + SetRace("demon"); + SetModel(MONSTER_MODEL); + SetHearingSensitivity(0); + sleep_mode(); + ScheduleDelayedEvent(0.2, "post_spawn_props"); + ScheduleDelayedEvent(1.0, "idle_sounds"); + if (!(AM_TURRET)) return; + NO_STUCK_CHECKS = 1; + SetMoveSpeed(0.0); + ANIM_WALK = ANIM_IDLE_NORM; + ANIM_RUN = ANIM_IDLE_NORM; + if (!(true)) return; + ScheduleDelayedEvent(1.0, "setup_client"); + } + + void setup_client() + { + ClientEvent("new", "all", CL_SCRIPT); + CL_IDX = "game.script.last_sent_id"; + } + + void idle_sounds() + { + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + Random(5, 10)("idle_sounds"); + } + + void post_spawn_props() + { + SetDamageResistance("holy", 0.0); + } + + void attack1() + { + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + BITE_SOUND = 1; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + npcatk_dodamage(m_hAttackTarget, "direct", DMG_BITE, ATTACK_HITCHANCE, GetOwner(), "pierce"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(BITE_SOUND)) return; + BITE_SOUND = 0; + if (!(RandomInt(1, 2) == 1)) return; + EmitSound(GetOwner(), 0, SOUND_POISON, 10); + ApplyEffect(param1, "effects/dot_poison", POISON_DURATION, GetEntityIndex(GetOwner()), DMG_POISON_DOT); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(IsEntityAlive(param1))) return; + if (!(GetRelationship(param1) == "enemy")) return; + if ((DID_ALERT)) return; + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + wake_up(); + DID_ALERT = 1; + } + + void my_target_died() + { + SetMoveDest(NPC_SPAWN_LOC); + idle_sounds(); + DID_ALERT = 0; + npcatk_go_home(); + } + + void npc_made_it_home() + { + sleep_mode(); + } + + void sleep_mode() + { + if (!(AM_TURRET)) + { + NO_STUCK_CHECKS = 1; + } + SLEEP_MODE = 1; + SetRoam(false); + SetIdleAnim(ANIM_SLEEP); + SetMoveAnim(ANIM_SLEEP); + ANIM_IDLE = ANIM_SLEEP; + } + + void wake_up() + { + if (!(AM_TURRET)) + { + NO_STUCK_CHECKS = 0; + } + SLEEP_MODE = 0; + SetIdleAnim(ANIM_IDLE_NORM); + SetMoveAnim(ANIM_WALK); + ANIM_IDLE = ANIM_IDLE_NORM; + SetRoam(true); + if ((CYCLE_STARTED)) return; + CYCLE_STARTED = 1; + ScheduleDelayedEvent(15.0, "do_special"); + } + + void do_special() + { + if (!(IsEntityAlive(GetOwner()))) return; + float NEXT_SPECIAL = 20.0; + if ((IsEntityAlive(m_hAttackTarget))) + { + if (!(SUSPEND_AI)) + { + } + int RND_SPECIAL = RandomInt(1, 2); + if (RND_SPECIAL == 1) + { + float NEXT_SPECIAL = 40.0; + DOING_SPECIAL = 1; + do_spit(); + } + if (RND_SPECIAL == 2) + { + float NEXT_SPECIAL = 40.0; + do_cloud(); + } + } + NEXT_SPECIAL("do_special"); + } + + void do_spit() + { + if ((SPIT_MODE)) return; + SPIT_LOOPS += 1; + if (!(SPIT_LOOPS < 2)) return; + SPIT_MODE = 1; + if (!(AM_TURRET)) + { + NO_STUCK_CHECKS = 1; + } + npcatk_suspend_ai(); + SetIdleAnim(ANIM_SPIT); + SetMoveAnim(ANIM_SPIT); + PlayAnim("critical", ANIM_SPIT); + GetAllPlayers(PLAYER_LIST); + ScrambleTokens(PLAYER_LIST, ";"); + do_spit_loop(); + ScheduleDelayedEvent(15.0, "end_spit_mode"); + } + + void do_spit_loop() + { + if (!(SPIT_MODE)) return; + ScheduleDelayedEvent(0.1, "do_spit_loop"); + string CUR_TARGET = GetToken(PLAYER_LIST, 0, ";"); + string MOUTH_POS = GetEntityProperty(GetOwner(), "svbonepos"); + string TARG_POS = GetEntityOrigin(CUR_TARGET); + string TRACE_IT = TraceLine(MOUTH_POS, TARG_POS); + int TRACE_FAIL = 1; + if (GetEntityRange(CUR_TARGET) < 800) + { + string TRACE_IT = TARG_POS; + } + if (TRACE_IT != TARG_POS) + { + new_spit_target(); + } + else + { + int TRACE_FAIL = 0; + } + if ((TRACE_FAIL)) return; + if (!(GetGameTime() > NEXT_SPIT)) return; + NEXT_SPIT = GetGameTime(); + NEXT_SPIT += 0.5; + SetMoveDest(CUR_TARGET); + SPIT_TARGET = CUR_TARGET; + } + + void end_spit_mode() + { + if (!(AM_TURRET)) + { + NO_STUCK_CHECKS = 0; + } + SPIT_LOOPS -= 1; + SPIT_MODE = 0; + DOING_SPECIAL = 0; + SetIdleAnim(ANIM_IDLE_NORM); + SetMoveAnim(ANIM_WALK); + ANIM_IDLE = ANIM_IDLE_NORM; + if (!(AM_TURRET)) + { + SetRoam(true); + } + npcatk_resume_ai(); + } + + void new_spit_target() + { + ScrambleTokens(PLAYER_LIST, ";"); + } + + void npcatk_attack() + { + if ((NPC_NO_ATTACK)) return; + npc_selectattack(); + if (NPC_MOVEDEST_TARGET != m_hAttackTarget) + { + npcatk_faceattacker(m_hAttackTarget); + } + string MOUTH_POS = GetEntityProperty(GetOwner(), "svbonepos"); + string TARG_POS = GetEntityOrigin(m_hAttackTarget); + string TRACE_IT = TraceLine(MOUTH_POS, TARG_POS); + if (!(TRACE_IT == TARG_POS)) return; + PlayAnim("once", ANIM_ATTACK); + ATTACK_ANIMINDEX = GetEntityProperty(GetOwner(), "anim.index"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(AM_TURRET)) return; + if ((SUSPEND_AI)) return; + if ((DOING_SPECIAL)) return; + if ((SPIT_MODE)) return; + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + if (!(SPIT_MODE)) + { + } + SPIT_TARGET = m_hAttackTarget; + PlayAnim("once", ANIM_SPIT); + } + } + + void frame_spit() + { + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(20, 150, 100), SPIT_TARGET, 300, DMG_SPIT, 0.5, "none"); + EmitSound(GetOwner(), 0, SOUND_SPIT, 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", CL_IDX); + // svplaysound: svplaysound 1 0 ambience/steamjet1.wav + EmitSound(1, 0, "ambience/steamjet1.wav"); + } + + void do_cloud() + { + // svplaysound: svplaysound 1 10 ambience/steamjet1.wav + EmitSound(1, 10, "ambience/steamjet1.wav"); + npcatk_suspend_ai(); + SetRoam(false); + DOING_SPECIAL = 1; + PlayAnim("critical", ANIM_BREATH); + SetMoveAnim(ANIM_BREATH); + SetIdleAnim(ANIM_BREATH); + CUR_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + CLOUD_COUNT = 0; + do_cloud_loop(); + } + + void do_cloud_loop() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (CLOUD_COUNT == 180) + { + npcatk_resume_ai(); + DOING_SPECIAL = 0; + SetIdleAnim(ANIM_IDLE_NORM); + SetMoveAnim(ANIM_WALK); + if (!(AM_TURRET)) + { + SetRoam(true); + } + // svplaysound: svplaysound 1 0 ambience/steamjet1.wav + EmitSound(1, 0, "ambience/steamjet1.wav"); + } + if (!(CLOUD_COUNT < 180)) return; + ScheduleDelayedEvent(0.1, "do_cloud_loop"); + CLOUD_COUNT += 1; + string CLOUD_START = GetEntityProperty(GetOwner(), "svbonepos"); + ClientEvent("update", "all", CL_IDX, "make_cloud", CLOUD_START, GetEntityProperty(GetOwner(), "angles.yaw")); + CUR_ANG += 2; + if (CUR_ANG > 359) + { + CUR_ANG -= 359; + } + string FACE_POS = GetMonsterProperty("origin"); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, CUR_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_POS); + if (CLOUD_TARGS != "none") + { + for (int i = 0; i < GetTokenCount(CLOUD_TARGS, ";"); i++) + { + poison_targets(); + } + } + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 1.0; + string SCAN_POINT = /* TODO: $relpos */ $relpos(0, 256, -125); + CLOUD_TARGS = /* TODO: $get_tbox */ $get_tbox("enemy", 128, SCAN_POINT); + // svplaysound: svplaysound 1 10 ambience/steamjet1.wav + EmitSound(1, 10, "ambience/steamjet1.wav"); + } + + void poison_targets() + { + string CUR_TARGET = GetToken(CLOUD_TARGS, i, ";"); + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 600)) return; + ApplyEffect(CUR_TARGET, "effects/dot_poison_blind", 10.0, GetEntityIndex(GetOwner()), DMG_POISON_DOT); + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_cobra_boss_cl.as b/scripts/angelscript/monsters/snake_cobra_boss_cl.as new file mode 100644 index 00000000..52f4b93d --- /dev/null +++ b/scripts/angelscript/monsters/snake_cobra_boss_cl.as @@ -0,0 +1,43 @@ +#pragma context client + +namespace MS +{ + +class SnakeCobraBossCl : CGameScript +{ + string CLOUD_ANG; + + void client_activate() + { + } + + void make_cloud() + { + string CLOUD_ORG = param1; + CLOUD_ANG = param2; + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud"); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + float RND_RL = Random(-10, 10); + float RND_UD = Random(-220, -180); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, 400, RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_cobra_boss_turret.as b/scripts/angelscript/monsters/snake_cobra_boss_turret.as new file mode 100644 index 00000000..5a2f021b --- /dev/null +++ b/scripts/angelscript/monsters/snake_cobra_boss_turret.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/snake_cobra_boss.as" + +namespace MS +{ + +class SnakeCobraBossTurret : CGameScript +{ + int AM_TURRET; + + SnakeCobraBossTurret() + { + AM_TURRET = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_cursed.as b/scripts/angelscript/monsters/snake_cursed.as new file mode 100644 index 00000000..dac456d0 --- /dev/null +++ b/scripts/angelscript/monsters/snake_cursed.as @@ -0,0 +1,140 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SnakeCursed : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + int ATTACK_DELAY; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BITE_SOUND; + int DID_ALERT; + int IS_UNHOLY; + string MONSTER_MODEL; + int NO_SPAWN_STUCK_CHECK; + string NPC_DELAYING_UNSTUCK; + int NPC_GIVE_EXP; + float POISON_DAMAGE; + int POISON_DURATION; + string SOUND_ALERT; + string SOUND_ATTACK; + string SOUND_IDLE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_POISON; + string SOUND_STRUCK; + + SnakeCursed() + { + IS_UNHOLY = 1; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "diesimple"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 120; + ATTACK_MOVERANGE = 35; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE = "$randf(5,20)"; + POISON_DAMAGE = "$randf(10,50)"; + POISON_DURATION = "$rand(10,20)"; + SOUND_ALERT = "monsters/snake_idle1.wav"; + SOUND_IDLE = "monsters/snake_idle2.wav"; + SOUND_ATTACK = "bullchicken/bc_bite2.wav"; + SOUND_PAIN1 = "monsters/snake_pain1.wav"; + SOUND_PAIN2 = "monsters/snake_pain2.wav"; + SOUND_POISON = "monsters/snakeman/sm_alert1.wav"; + SOUND_STRUCK = "debris/flesh2.wav"; + NPC_GIVE_EXP = 5; + NO_SPAWN_STUCK_CHECK = 1; + MONSTER_MODEL = "monsters/csnake.mdl"; + } + + void OnSpawn() override + { + SetName("Cursed Snake"); + SetHealth(30); + SetWidth(48); + SetHeight(32); + SetRoam(false); + SetRace("demon"); + SetModel(MONSTER_MODEL); + SetHearingSensitivity(4); + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 2.0); + SetSolid("none"); + } + + void idle_sounds() + { + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + Random(5, 10)("idle_sounds"); + } + + void bite1() + { + BITE_SOUND = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, GetOwner()); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(BITE_SOUND)) return; + BITE_SOUND = 0; + if (!(RandomInt(1, 5) == 1)) return; + EmitSound(GetOwner(), 0, SOUND_POISON, 10); + ApplyEffect(param1, "effects/dot_poison", POISON_DURATION, GetEntityIndex(GetOwner()), POISON_DAMAGE); + npc_fade_away(); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((DID_ALERT)) return; + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + SetRoam(true); + DID_ALERT = 1; + } + + void my_target_died() + { + npc_fade_away(); + } + + void npcatk_attack() + { + NPC_DELAYING_UNSTUCK = NPC_UNSTUCK_DELAY; + if ((ATTACK_DELAY)) return; + PlayAnim("critical", ANIM_ATTACK); + EmitSound(GetOwner(), 0, SOUND_ATTACK, 10); + ATTACK_DELAY = 1; + ScheduleDelayedEvent(1.0, "reset_attack_delay"); + } + + void reset_attack_delay() + { + ATTACK_DELAY = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_gcobra.as b/scripts/angelscript/monsters/snake_gcobra.as new file mode 100644 index 00000000..cb0b5b79 --- /dev/null +++ b/scripts/angelscript/monsters/snake_gcobra.as @@ -0,0 +1,320 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SnakeGcobra : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BREATH; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_IDLE_NORM; + string ANIM_RUN; + string ANIM_SLEEP; + string ANIM_WALK; + float ATTACK_DAMAGE; + int ATTACK_DELAY; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BITE_SOUND; + string BREATH_EFFECT_SCRIPT; + int CLOUD_COUNT; + string CLOUD_TARGS; + string CL_IDX; + string CL_SCRIPT; + string CUR_ANG; + int DID_ALERT; + string DMG_EFFECT_SCRIPT; + int DOING_SPECIAL; + int GAS_AMMO; + int GAS_RANGE; + string MONSTER_MODEL; + string NEXT_SCAN; + int NO_SLEEP; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + float POISON_DAMAGE; + int POISON_DURATION; + int SLEEP_MODE; + string SOUND_ALERT; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_POISON; + string SOUND_STRUCK; + + SnakeGcobra() + { + ANIM_BREATH = "breath"; + GAS_RANGE = 200; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "diesimple"; + ANIM_IDLE = "idle1"; + ANIM_IDLE_NORM = "idle1"; + ANIM_SLEEP = "idle2"; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = 120; + ATTACK_HITRANGE = 150; + ATTACK_MOVERANGE = 60; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE = "$randf(20,50)"; + POISON_DAMAGE = "$randf(10,20)"; + POISON_DURATION = "$rand(10,20)"; + NPC_GIVE_EXP = 200; + SOUND_ALERT = "monsters/gsnake_idle1.wav"; + SOUND_IDLE = "monsters/gsnake_idle1.wav"; + SOUND_ATTACK = "agrunt/ag_attack2.wav"; + SOUND_POISON = "monsters/snakeman/sm_alert1.wav"; + SOUND_STRUCK = "debris/flesh3.wav"; + SOUND_PAIN1 = "agrunt/ag_attack3.wav"; + SOUND_PAIN2 = "agrunt/ag_idle2.wav"; + SOUND_DEATH = "agrunt/ag_die2.wav"; + DMG_EFFECT_SCRIPT = "effects/dot_poison"; + BREATH_EFFECT_SCRIPT = "effects/dot_poison_blind"; + CL_SCRIPT = "monsters/snake_gcobra_cl"; + MONSTER_MODEL = "monsters/gcobra.mdl"; + } + + void OnSpawn() override + { + SetName("Giant Cobra"); + SetHealth(800); + SetWidth(64); + SetHeight(32); + SetRoam(false); + SetRace("demon"); + SetModel(MONSTER_MODEL); + SetHearingSensitivity(0); + ScheduleDelayedEvent(0.2, "post_spawn_props"); + ScheduleDelayedEvent(1.0, "idle_sounds"); + GAS_AMMO = 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((DOING_SPECIAL)) + { + ClientEvent("update", "all", CL_IDX, "end_fx"); + } + if (!(FIRE_BREATH)) + { + // svplaysound: if ( !FIRE_BREATH ) svplaysound 1 0 ambience/steamjet1.wav + EmitSound(1, 0, "ambience/steamjet1.wav"); + } + } + + void idle_sounds() + { + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + Random(5, 10)("idle_sounds"); + } + + void post_spawn_props() + { + SetDamageResistance("holy", 0.0); + } + + void OnPostSpawn() override + { + if ((NO_SLEEP)) return; + sleep_mode(); + } + + void set_nosleep() + { + NO_SLEEP = 1; + } + + void attack1() + { + BITE_SOUND = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, GetOwner()); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(BITE_SOUND)) return; + BITE_SOUND = 0; + if (!(RandomInt(1, 2) == 1)) return; + EmitSound(GetOwner(), 0, SOUND_POISON, 10); + ApplyEffect(param1, DMG_EFFECT_SCRIPT, POISON_DURATION, GetEntityIndex(GetOwner()), POISON_DAMAGE); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(IsEntityAlive(param1))) return; + if (!(GetRelationship(param1) == "enemy")) return; + if ((DID_ALERT)) return; + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + wake_up(); + DID_ALERT = 1; + } + + void my_target_died() + { + GAS_AMMO = 1; + SetMoveDest(NPC_SPAWN_LOC); + idle_sounds(); + DID_ALERT = 0; + LogDebug("my_target_died"); + ScheduleDelayedEvent(1.0, "npcatk_go_home"); + } + + void npc_made_it_home() + { + sleep_mode(); + } + + void reset_attack_delay() + { + ATTACK_DELAY = 0; + } + + void sleep_mode() + { + SLEEP_MODE = 1; + NO_STUCK_CHECKS = 1; + SetRoam(false); + SetIdleAnim(ANIM_SLEEP); + SetMoveAnim(ANIM_SLEEP); + ANIM_IDLE = ANIM_SLEEP; + SetHearingSensitivity(0); + } + + void wake_up() + { + SLEEP_MODE = 0; + NO_STUCK_CHECKS = 0; + SetIdleAnim(ANIM_IDLE_NORM); + SetMoveAnim(ANIM_WALK); + ANIM_IDLE = ANIM_IDLE_NORM; + SetRoam(true); + SetHearingSensitivity(4); + } + + void npc_targetsighted() + { + if (!(GAS_AMMO > 0)) return; + if (!(GetEntityRange(m_hAttackTarget) < GAS_RANGE)) return; + GAS_AMMO = 0; + do_cloud(); + } + + void do_cloud() + { + if (!(FIRE_BREATH)) + { + // svplaysound: svplaysound 1 10 ambience/steamjet1.wav + EmitSound(1, 10, "ambience/steamjet1.wav"); + } + else + { + EmitSound(GetOwner(), 0, "monsters/goblin/sps_fogfire.wav", 10); + } + npcatk_suspend_ai(); + SetRoam(false); + DOING_SPECIAL = 1; + PlayAnim("critical", ANIM_BREATH); + SetMoveAnim(ANIM_BREATH); + SetIdleAnim(ANIM_BREATH); + SetMoveDest(m_hAttackTarget); + CUR_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + CLOUD_COUNT = 0; + ScheduleDelayedEvent(0.01, "adj_angles"); + } + + void adj_angles() + { + CUR_ANG -= 45; + if (CUR_ANG < 0) + { + CUR_ANG += 359; + } + string FACE_POS = GetMonsterProperty("origin"); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, CUR_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_POS); + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner())); + CL_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.01, "do_cloud_loop"); + } + + void do_cloud_loop() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (CLOUD_COUNT == 45) + { + npcatk_resume_ai(); + DOING_SPECIAL = 0; + SetIdleAnim(ANIM_IDLE_NORM); + SetMoveAnim(ANIM_WALK); + if (!(AM_TURRET)) + { + SetRoam(true); + } + if (!(FIRE_BREATH)) + { + // svplaysound: if ( !FIRE_BREATH ) svplaysound 1 0 ambience/steamjet1.wav + EmitSound(1, 0, "ambience/steamjet1.wav"); + } + ClientEvent("update", "all", CL_IDX, "end_fx"); + } + if (!(CLOUD_COUNT < 45)) return; + ScheduleDelayedEvent(0.1, "do_cloud_loop"); + CLOUD_COUNT += 1; + CUR_ANG += 2; + if (CUR_ANG > 359) + { + CUR_ANG -= 359; + } + string FACE_POS = GetMonsterProperty("origin"); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, CUR_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_POS); + if (CLOUD_TARGS != "none") + { + for (int i = 0; i < GetTokenCount(CLOUD_TARGS, ";"); i++) + { + poison_targets(); + } + } + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.5; + string SCAN_POINT = /* TODO: $relpos */ $relpos(0, 96, 0); + CLOUD_TARGS = /* TODO: $get_tbox */ $get_tbox("enemy", 96, SCAN_POINT); + if (!(FIRE_BREATH)) + { + // svplaysound: if ( !FIRE_BREATH ) svplaysound 1 10 ambience/steamjet1.wav + EmitSound(1, 10, "ambience/steamjet1.wav"); + } + } + + void poison_targets() + { + string CUR_TARGET = GetToken(CLOUD_TARGS, i, ";"); + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 256)) return; + ApplyEffect(CUR_TARGET, BREATH_EFFECT_SCRIPT, POISON_DURATION, GetEntityIndex(GetOwner()), POISON_DAMAGE); + if (!(PUSH_BREATH)) return; + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(0, 1000, 110)); + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_gcobra_cl.as b/scripts/angelscript/monsters/snake_gcobra_cl.as new file mode 100644 index 00000000..c75f4170 --- /dev/null +++ b/scripts/angelscript/monsters/snake_gcobra_cl.as @@ -0,0 +1,70 @@ +#pragma context client + +namespace MS +{ + +class SnakeGcobraCl : CGameScript +{ + string BREATH_SPRITE; + string CLOUD_ANG; + int FX_ACTIVE; + string FX_OWNER; + int N_FRAMES; + + SnakeGcobraCl() + { + BREATH_SPRITE = "poison_cloud.spr"; + N_FRAMES = 17; + } + + void client_activate() + { + FX_OWNER = param1; + FX_ACTIVE = 1; + make_clouds(); + ScheduleDelayedEvent(15.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void make_clouds() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "make_clouds"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + CLOUD_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + ClientEffect("tempent", "sprite", BREATH_SPRITE, CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", BREATH_SPRITE, CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", BREATH_SPRITE, CLOUD_ORG, "setup_cloud"); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", N_FRAMES); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + float RND_RL = Random(-10, 10); + float RND_UD = Random(-30, 30); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, 400, RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_gcobra_fire.as b/scripts/angelscript/monsters/snake_gcobra_fire.as new file mode 100644 index 00000000..50d2f30c --- /dev/null +++ b/scripts/angelscript/monsters/snake_gcobra_fire.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "monsters/snake_gcobra.as" + +namespace MS +{ + +class SnakeGcobraFire : CGameScript +{ + string BREATH_EFFECT_SCRIPT; + string CL_SCRIPT; + string DMG_EFFECT_SCRIPT; + int FIRE_BREATH; + string MONSTER_MODEL; + int NPC_BASE_EXP; + float POISON_DAMAGE; + float POISON_DURATION; + int PUSH_BREATH; + + SnakeGcobraFire() + { + NPC_BASE_EXP = 200; + MONSTER_MODEL = "monsters/gcobra_fire.mdl"; + DMG_EFFECT_SCRIPT = "effects/dot_fire"; + BREATH_EFFECT_SCRIPT = "effects/dot_fire"; + POISON_DAMAGE = 30.0; + POISON_DURATION = 10.0; + PUSH_BREATH = 1; + CL_SCRIPT = "monsters/snake_gcobra_fire_cl"; + FIRE_BREATH = 1; + Precache("explode1.spr"); + } + + void OnSpawn() override + { + SetName("Fire Cobra"); + SetDamageResistance("fire", 0.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_gcobra_fire_cl.as b/scripts/angelscript/monsters/snake_gcobra_fire_cl.as new file mode 100644 index 00000000..6a1fa6d8 --- /dev/null +++ b/scripts/angelscript/monsters/snake_gcobra_fire_cl.as @@ -0,0 +1,70 @@ +#pragma context client + +namespace MS +{ + +class SnakeGcobraFireCl : CGameScript +{ + string BREATH_SPRITE; + string CLOUD_ANG; + int FX_ACTIVE; + string FX_OWNER; + int N_FRAMES; + + SnakeGcobraFireCl() + { + BREATH_SPRITE = "explode1.spr"; + N_FRAMES = 9; + } + + void client_activate() + { + FX_OWNER = param1; + FX_ACTIVE = 1; + make_clouds(); + ScheduleDelayedEvent(15.0, "end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void make_clouds() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "make_clouds"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + CLOUD_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + ClientEffect("tempent", "sprite", BREATH_SPRITE, CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", BREATH_SPRITE, CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", BREATH_SPRITE, CLOUD_ORG, "setup_cloud"); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", N_FRAME); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(0, CLOUD_ANG, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_gcobra_metal.as b/scripts/angelscript/monsters/snake_gcobra_metal.as new file mode 100644 index 00000000..ed1dd734 --- /dev/null +++ b/scripts/angelscript/monsters/snake_gcobra_metal.as @@ -0,0 +1,302 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SnakeGcobraMetal : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BREATH; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_IDLE_NORM; + string ANIM_RUN; + string ANIM_SLEEP; + string ANIM_WALK; + float ATTACK_DAMAGE; + int ATTACK_DELAY; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BITE_SOUND; + int CLOUD_COUNT; + string CLOUD_TARGS; + string CL_IDX; + string CL_SCRIPT; + string CUR_ANG; + int DID_ALERT; + int DOING_SPECIAL; + int GAS_AMMO; + int GAS_RANGE; + int IS_UNHOLY; + string MONSTER_MODEL; + string NEXT_SCAN; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + float POISON_DAMAGE; + int POISON_DURATION; + int SLEEP_MODE; + string SOUND_ALERT; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_POISON; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + SnakeGcobraMetal() + { + ANIM_BREATH = "breath"; + GAS_RANGE = 200; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "diesimple"; + ANIM_IDLE = ANIM_SLEEP; + ANIM_IDLE_NORM = "idle1"; + ANIM_SLEEP = "idle2"; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = 120; + ATTACK_HITRANGE = 150; + ATTACK_MOVERANGE = 60; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE = "$randf(20,50)"; + POISON_DAMAGE = "$randf(10,20)"; + POISON_DURATION = "$rand(10,20)"; + NPC_GIVE_EXP = 200; + SOUND_ALERT = "monsters/gsnake_idle1.wav"; + SOUND_IDLE = "monsters/gsnake_idle1.wav"; + SOUND_ATTACK = "agrunt/ag_attack2.wav"; + SOUND_POISON = "monsters/snakeman/sm_alert1.wav"; + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "doors/doorstop5.wav"; + SOUND_PAIN1 = "agrunt/ag_attack3.wav"; + SOUND_PAIN2 = "agrunt/ag_idle2.wav"; + SOUND_DEATH = "agrunt/ag_die2.wav"; + CL_SCRIPT = "monsters/snake_gcobra_cl"; + MONSTER_MODEL = "monsters/gcobra.mdl"; + } + + void OnSpawn() override + { + SetName("Giant Metallic Cobra"); + SetHealth(800); + SetWidth(64); + SetHeight(32); + SetIdleAnim(ANIM_SLEEP); + SetRoam(false); + SetRace("demon"); + SetModel(MONSTER_MODEL); + SetHearingSensitivity(0); + sleep_mode(); + ScheduleDelayedEvent(0.2, "post_spawn_props"); + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetProp(GetOwner(), "skin", 1); + SetDamageResistance("all", 0.25); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 4.0); + SetDamageResistance("holy", 1.0); + ClientEvent("new", "all", CL_SCRIPT); + CL_IDX = "game.script.last_sent_id"; + GAS_AMMO = 1; + } + + void OnPostSpawn() override + { + IS_UNHOLY = 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", CL_IDX); + // svplaysound: svplaysound 1 0 ambience/steamjet1.wav + EmitSound(1, 0, "ambience/steamjet1.wav"); + } + + void idle_sounds() + { + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + Random(5, 10)("idle_sounds"); + } + + void post_spawn_props() + { + SetDamageResistance("holy", 0.0); + } + + void attack1() + { + BITE_SOUND = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, GetOwner()); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(BITE_SOUND)) return; + BITE_SOUND = 0; + if (!(RandomInt(1, 2) == 1)) return; + EmitSound(GetOwner(), 0, SOUND_POISON, 10); + ApplyEffect(param1, "effects/dot_poison", POISON_DURATION, GetEntityIndex(GetOwner()), POISON_DAMAGE); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(IsEntityAlive(param1))) return; + if (!(GetRelationship(param1) == "enemy")) return; + if ((DID_ALERT)) return; + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + wake_up(); + DID_ALERT = 1; + } + + void my_target_died() + { + GAS_AMMO = 1; + SetMoveDest(NPC_SPAWN_LOC); + idle_sounds(); + DID_ALERT = 0; + LogDebug("my_target_died"); + ScheduleDelayedEvent(1.0, "npcatk_go_home"); + } + + void npc_made_it_home() + { + sleep_mode(); + } + + void reset_attack_delay() + { + ATTACK_DELAY = 0; + } + + void sleep_mode() + { + SLEEP_MODE = 1; + NO_STUCK_CHECKS = 1; + SetRoam(false); + SetIdleAnim(ANIM_SLEEP); + SetMoveAnim(ANIM_SLEEP); + ANIM_IDLE = ANIM_SLEEP; + SetHearingSensitivity(0); + } + + void wake_up() + { + SLEEP_MODE = 0; + NO_STUCK_CHECKS = 0; + SetIdleAnim(ANIM_IDLE_NORM); + SetMoveAnim(ANIM_WALK); + ANIM_IDLE = ANIM_IDLE_NORM; + SetRoam(true); + SetHearingSensitivity(4); + } + + void npc_targetsighted() + { + if (!(GAS_AMMO > 0)) return; + if (!(GetEntityRange(m_hAttackTarget) < GAS_RANGE)) return; + GAS_AMMO = 0; + do_cloud(); + } + + void do_cloud() + { + // svplaysound: svplaysound 1 10 ambience/steamjet1.wav + EmitSound(1, 10, "ambience/steamjet1.wav"); + npcatk_suspend_ai(); + SetRoam(false); + DOING_SPECIAL = 1; + PlayAnim("critical", ANIM_BREATH); + SetMoveAnim(ANIM_BREATH); + SetIdleAnim(ANIM_BREATH); + SetMoveDest(m_hAttackTarget); + CUR_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + CLOUD_COUNT = 0; + ScheduleDelayedEvent(0.01, "adj_angles"); + } + + void adj_angles() + { + CUR_ANG -= 45; + if (CUR_ANG < 0) + { + CUR_ANG += 359; + } + string FACE_POS = GetMonsterProperty("origin"); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, CUR_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_POS); + ScheduleDelayedEvent(0.01, "do_cloud_loop"); + } + + void do_cloud_loop() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (CLOUD_COUNT == 45) + { + npcatk_resume_ai(); + DOING_SPECIAL = 0; + SetIdleAnim(ANIM_IDLE_NORM); + SetMoveAnim(ANIM_WALK); + if (!(AM_TURRET)) + { + SetRoam(true); + } + // svplaysound: svplaysound 1 0 ambience/steamjet1.wav + EmitSound(1, 0, "ambience/steamjet1.wav"); + } + if (!(CLOUD_COUNT < 45)) return; + ScheduleDelayedEvent(0.1, "do_cloud_loop"); + CLOUD_COUNT += 1; + string CLOUD_START = GetEntityProperty(GetOwner(), "svbonepos"); + ClientEvent("update", "all", CL_IDX, "make_cloud", CLOUD_START, GetEntityProperty(GetOwner(), "angles.yaw")); + CUR_ANG += 2; + if (CUR_ANG > 359) + { + CUR_ANG -= 359; + } + string FACE_POS = GetMonsterProperty("origin"); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, CUR_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_POS); + if (CLOUD_TARGS != "none") + { + for (int i = 0; i < GetTokenCount(CLOUD_TARGS, ";"); i++) + { + poison_targets(); + } + } + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.5; + string SCAN_POINT = /* TODO: $relpos */ $relpos(0, 96, 0); + CLOUD_TARGS = /* TODO: $get_tbox */ $get_tbox("enemy", 96, SCAN_POINT); + // svplaysound: svplaysound 1 10 ambience/steamjet1.wav + EmitSound(1, 10, "ambience/steamjet1.wav"); + } + + void poison_targets() + { + string CUR_TARGET = GetToken(CLOUD_TARGS, i, ";"); + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 256)) return; + // TODO: UNCONVERTED: ] + ApplyEffect(CUR_TARGET, "effects/dot_poison_blind", POISON_DURATION, GetEntityIndex(GetOwner()), POISON_DAMAGE); + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_gsidewinder.as b/scripts/angelscript/monsters/snake_gsidewinder.as new file mode 100644 index 00000000..1d93fb56 --- /dev/null +++ b/scripts/angelscript/monsters/snake_gsidewinder.as @@ -0,0 +1,149 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SnakeGsidewinder : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + int ATTACK_DELAY; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BITE_SOUND; + int DID_ALERT; + string MONSTER_MODEL; + string MONSTER_MODELT; + string NPC_DELAYING_UNSTUCK; + int NPC_GIVE_EXP; + float POISON_DAMAGE; + int POISON_DURATION; + string SOUND_ALERT; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_POISON; + string SOUND_STRUCK; + + SnakeGsidewinder() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "diesimple"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 180; + ATTACK_MOVERANGE = 30; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE = "$randf(10,30)"; + POISON_DAMAGE = "$randf(4,8)"; + POISON_DURATION = "$rand(30,45)"; + SOUND_ALERT = "monsters/gsnake_idle1.wav"; + SOUND_IDLE = "monsters/gsnake_idle1.wav"; + SOUND_ATTACK = "bullchicken/bc_bite2.wav"; + SOUND_POISON = "monsters/snakeman/sm_alert1.wav"; + SOUND_STRUCK = "debris/flesh3.wav"; + SOUND_PAIN1 = "agrunt/ag_attack3.wav"; + SOUND_PAIN2 = "agrunt/ag_idle2.wav"; + SOUND_DEATH = "agrunt/ag_die2.wav"; + Precache(SOUND_DEATH); + MONSTER_MODEL = "monsters/gsidewinder.mdl"; + MONSTER_MODELT = "monsters/gsidewinderT.mdl"; + Precache(MONSTER_MODEL); + Precache(MONSTER_MODELT); + } + + void OnSpawn() override + { + SetName("Large Rattle Snake"); + SetHealth(400); + SetWidth(48); + SetHeight(32); + SetRoam(false); + NPC_GIVE_EXP = 100; + SetRace("demon"); + Precache(MONSTER_MODEL); + Precache(MONSTER_MODELT); + SetModel(MONSTER_MODEL); + SetHearingSensitivity(8); + ScheduleDelayedEvent(0.2, "post_spawn_props"); + ScheduleDelayedEvent(1.0, "idle_sounds"); + } + + void idle_sounds() + { + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + Random(5, 10)("idle_sounds"); + } + + void post_spawn_props() + { + SetDamageResistance("holy", 0.0); + } + + void bite1() + { + BITE_SOUND = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, GetOwner()); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(BITE_SOUND)) return; + BITE_SOUND = 0; + if (!(RandomInt(1, 2) == 1)) return; + EmitSound(GetOwner(), 0, SOUND_POISON, 10); + ApplyEffect(param1, "effects/dot_poison", POISON_DURATION, GetEntityIndex(GetOwner()), POISON_DAMAGE); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((DID_ALERT)) return; + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + SetRoam(true); + DID_ALERT = 1; + } + + void my_target_died() + { + SetMoveDest(NPC_SPAWN_LOC); + idle_sounds(); + DID_ALERT = 0; + } + + void npcatk_attack() + { + NPC_DELAYING_UNSTUCK = NPC_UNSTUCK_DELAY; + if ((ATTACK_DELAY)) return; + PlayAnim("critical", ANIM_ATTACK); + EmitSound(GetOwner(), 0, SOUND_ATTACK, 10); + ATTACK_DELAY = 1; + ScheduleDelayedEvent(1.0, "reset_attack_delay"); + } + + void reset_attack_delay() + { + ATTACK_DELAY = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_lord.as b/scripts/angelscript/monsters/snake_lord.as new file mode 100644 index 00000000..0d7b6c3c --- /dev/null +++ b/scripts/angelscript/monsters/snake_lord.as @@ -0,0 +1,78 @@ +#pragma context server + +#include "slithar/slithar.as" + +namespace MS +{ + +class SnakeLord : CGameScript +{ + string ANIM_RUN; + int CYCLES_ON; + int GENERIC_LORD; + int LOOKING_FOR_PLAYERS; + int NPC_GIVE_EXP; + int SNAKE_SLOT; + float SUMMON_SNAKE_FREQ; + + SnakeLord() + { + GENERIC_LORD = 1; + NPC_GIVE_EXP = 400; + } + + void OnSpawn() override + { + SetName("Snake Lord"); + SetRace("demon"); + SetHealth(3000); + SetWidth(32); + SetHeight(84); + SetRoam(true); + Precache(MONSTER_MODEL); + SetModel(MONSTER_MODEL); + SetIdleAnim(ANIM_IDLE); + SetHearingSensitivity(10); + SetInvincible(false); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 1.25); + SetDamageResistance("fire", 0.5); + SetDamageResistance("holy", 1.5); + SNAKE_SLOT = 0; + LOOKING_FOR_PLAYERS = 0; + } + + void npc_targetsighted() + { + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + SUMMON_SNAKE_FREQ = 2.0; + ANIM_RUN = ANIM_RUNFAST; + ScheduleDelayedEvent(25.0, "snake_slowdown"); + ScheduleDelayedEvent(5.0, "summon_snake"); + } + + void cycle_up() + { + ANIM_RUN = ANIM_RUNFAST; + SetMoveAnim(ANIM_RUN); + SUMMON_SNAKE_FREQ = 5.0; + } + + void cycle_down() + { + SUMMON_SNAKE_FREQ = 30.0; + } + + void look_for_players() + { + LOOKING_FOR_PLAYERS = 0; + } + + void me_pouncie() + { + } + +} + +} diff --git a/scripts/angelscript/monsters/snake_lord2.as b/scripts/angelscript/monsters/snake_lord2.as new file mode 100644 index 00000000..f369edc4 --- /dev/null +++ b/scripts/angelscript/monsters/snake_lord2.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class SnakeLord2 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/snake_sidewinder.as b/scripts/angelscript/monsters/snake_sidewinder.as new file mode 100644 index 00000000..3982c44c --- /dev/null +++ b/scripts/angelscript/monsters/snake_sidewinder.as @@ -0,0 +1,144 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SnakeSidewinder : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + int ATTACK_DELAY; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BITE_SOUND; + int DID_ALERT; + string MONSTER_MODEL; + string NPC_DELAYING_UNSTUCK; + int NPC_GIVE_EXP; + float POISON_DAMAGE; + int POISON_DURATION; + string SOUND_ALERT; + string SOUND_ATTACK; + string SOUND_IDLE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_POISON; + string SOUND_STRUCK; + + SnakeSidewinder() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "diesimple"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 120; + ATTACK_MOVERANGE = 35; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE = "$randf(3,8)"; + POISON_DAMAGE = "$randf(1,5)"; + POISON_DURATION = "$rand(30,45)"; + SOUND_ALERT = "monsters/snake_idle1.wav"; + SOUND_IDLE = "monsters/snake_idle2.wav"; + SOUND_ATTACK = "bullchicken/bc_bite2.wav"; + SOUND_PAIN1 = "monsters/snake_pain1.wav"; + SOUND_PAIN2 = "monsters/snake_pain2.wav"; + SOUND_POISON = "monsters/snakeman/sm_alert1.wav"; + SOUND_STRUCK = "debris/flesh2.wav"; + MONSTER_MODEL = "monsters/sidewinder.mdl"; + MONSTER_MODEL = "monsters/sidewinderT.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + SetName("Rattle Snake"); + SetHealth(150); + SetWidth(48); + SetHeight(32); + SetRoam(false); + NPC_GIVE_EXP = 40; + SetRace("wildanimal"); + Precache(MONSTER_MODEL); + Precache(MONSTER_MODELT); + SetModel(MONSTER_MODEL); + SetHearingSensitivity(4); + ScheduleDelayedEvent(0.2, "post_spawn_props"); + ScheduleDelayedEvent(1.0, "idle_sounds"); + } + + void idle_sounds() + { + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + Random(5, 10)("idle_sounds"); + } + + void post_spawn_props() + { + SetDamageResistance("holy", 0.0); + } + + void bite1() + { + BITE_SOUND = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, GetEntityIndex(GetOwner())); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(BITE_SOUND)) return; + BITE_SOUND = 0; + if (!(RandomInt(1, 2) == 1)) return; + EmitSound(GetOwner(), 0, SOUND_POISON, 10); + ApplyEffect(param1, "effects/dot_poison", POISON_DURATION, GetEntityIndex(GetOwner()), POISON_DAMAGE); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((DID_ALERT)) return; + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + SetRoam(true); + DID_ALERT = 1; + } + + void my_target_died() + { + SetMoveDest(NPC_SPAWN_LOC); + idle_sounds(); + DID_ALERT = 0; + } + + void npcatk_attack() + { + NPC_DELAYING_UNSTUCK = NPC_UNSTUCK_DELAY; + if ((ATTACK_DELAY)) return; + PlayAnim("critical", ANIM_ATTACK); + EmitSound(GetOwner(), 0, SOUND_ATTACK, 10); + ATTACK_DELAY = 1; + ScheduleDelayedEvent(1.0, "reset_attack_delay"); + } + + void reset_attack_delay() + { + ATTACK_DELAY = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/snowboar.as b/scripts/angelscript/monsters/snowboar.as new file mode 100644 index 00000000..25eaf49d --- /dev/null +++ b/scripts/angelscript/monsters/snowboar.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/snowboar1.as" + +namespace MS +{ + +class Snowboar : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/snowboar1.as b/scripts/angelscript/monsters/snowboar1.as new file mode 100644 index 00000000..231c6644 --- /dev/null +++ b/scripts/angelscript/monsters/snowboar1.as @@ -0,0 +1,60 @@ +#pragma context server + +#include "monsters/boar.as" +#include "monsters/base_ice_race.as" + +namespace MS +{ + +class Snowboar1 : CGameScript +{ + int BOAR_CAN_CHARGE; + int CAN_FLEE; + float FLEE_CHANCE; + int FLEE_HEALTH; + float GORE_FORWARD_DAMAGE; + float GORE_SIDE_DAMAGE; + int NPC_BASE_EXP; + string PUSH_VEL; + + Snowboar1() + { + CAN_FLEE = 1; + FLEE_HEALTH = 10; + FLEE_CHANCE = 0.25; + NPC_BASE_EXP = 12; + GORE_FORWARD_DAMAGE = 1.0; + GORE_SIDE_DAMAGE = 0.7; + BOAR_CAN_CHARGE = 0; + } + + void OnSpawn() override + { + SetHealth(30); + SetName("Snow Boar"); + SetHearingSensitivity(0); + SetModel("monsters/boar1.mdl"); + SetProp(GetOwner(), "skin", 3); + } + + void gore_forward() + { + PUSH_VEL = Vector3(0, 0, 0); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, GORE_FORWARD_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void gore_left() + { + PUSH_VEL = /* TODO: $relvel */ $relvel(100, 50, 10); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, GORE_SIDE_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void gore_right() + { + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, 50, 10); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, GORE_SIDE_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + +} + +} diff --git a/scripts/angelscript/monsters/snowboar2.as b/scripts/angelscript/monsters/snowboar2.as new file mode 100644 index 00000000..5f28ce56 --- /dev/null +++ b/scripts/angelscript/monsters/snowboar2.as @@ -0,0 +1,57 @@ +#pragma context server + +#include "monsters/boar.as" +#include "monsters/base_ice_race.as" + +namespace MS +{ + +class Snowboar2 : CGameScript +{ + string ANIM_FORWARD; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BOAR_CAN_CHARGE; + int BOAR_CHARGE_DMG; + int CAN_HEAR; + float FLEE_CHANCE; + int GORE_FORWARD_DAMAGE; + int GORE_SIDE_DAMAGE; + int HUNT_AGRO; + int MOVE_RANGE; + int NPC_BASE_EXP; + + Snowboar2() + { + NPC_BASE_EXP = 150; + ANIM_FORWARD = "gore_forward2"; + GORE_FORWARD_DAMAGE = 16; + GORE_SIDE_DAMAGE = "$rand(10,15)"; + BOAR_CAN_CHARGE = 1; + BOAR_CHARGE_DMG = "$rand(60,150)"; + HUNT_AGRO = 1; + CAN_HEAR = 1; + FLEE_CHANCE = 0.1; + } + + void OnSpawn() override + { + SetHealth(800); + SetHeight(72); + SetWidth(72); + SetName("Ferocious Snow Boar"); + SetHearingSensitivity(2); + SetModel("monsters/boar2.mdl"); + SetProp(GetOwner(), "skin", 3); + } + + void OnPostSpawn() override + { + MOVE_RANGE = 64; + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 120; + } + +} + +} diff --git a/scripts/angelscript/monsters/snowboar3.as b/scripts/angelscript/monsters/snowboar3.as new file mode 100644 index 00000000..e2c6e174 --- /dev/null +++ b/scripts/angelscript/monsters/snowboar3.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "monsters/boar_base_remake.as" +#include "monsters/base_ice_race.as" + +namespace MS +{ + +class Snowboar3 : CGameScript +{ + float ATTACK_HITCHANCE; + string BOAR_MODEL; + int BOAR_SIZE; + int BOAR_SKIN; + int DMG_CHARGE; + int DMG_GORE_FORWARD; + float DMG_GORE_LEFT; + float DMG_GORE_RIGHT; + float FLEE_CHANCE; + int NPC_GIVE_EXP; + + Snowboar3() + { + BOAR_SIZE = 3; + BOAR_SKIN = 3; + BOAR_MODEL = "monsters/boar3.mdl"; + NPC_GIVE_EXP = 400; + DMG_GORE_FORWARD = 60; + DMG_GORE_LEFT = Random(40.0, 60.0); + DMG_GORE_RIGHT = Random(40.0, 60.0); + DMG_CHARGE = RandomInt(200, 300); + ATTACK_HITCHANCE = 0.7; + FLEE_CHANCE = 0.1; + } + + void boar_spawn() + { + SetName("Gigantic Snow Boar"); + SetHealth(1200); + SetHearingSensitivity(2); + SetRoam(true); + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_archer1.as b/scripts/angelscript/monsters/sorc_archer1.as new file mode 100644 index 00000000..21357f70 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_archer1.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "monsters/orc_sniper.as" + +namespace MS +{ + +class SorcArcher1 : CGameScript +{ + int AM_SORC; + string ARROW_TYPE; + int DOING_KICK; + int DROP_GOLD_AMT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string DROP_ITEM2; + float DROP_ITEM2_CHANCE; + int FIN_EXP; + int KICK_TYPE; + + SorcArcher1() + { + ARROW_TYPE = "proj_arrow_npc"; + FIN_EXP = 120; + DROP_GOLD_AMT = RandomInt(10, 40); + AM_SORC = 1; + DROP_ITEM1 = "bows_longbow"; + DROP_ITEM1_CHANCE = 0.05; + DROP_ITEM2 = "proj_arrow_jagged"; + DROP_ITEM2_CHANCE = 0.1; + AM_SORC = 1; + } + + void orc_spawn() + { + SetHealth(320); + SetName("Shadahar Scout"); + SetHearingSensitivity(10); + SetStat("parry", 60); + SetDamageResistance("all", ".7"); + SetModel("monsters/sorc.mdl"); + DOING_KICK = 0; + KICK_TYPE = 1; + SetModelBody(0, 1); + SetModelBody(1, 4); + SetModelBody(2, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_archer2.as b/scripts/angelscript/monsters/sorc_archer2.as new file mode 100644 index 00000000..38e5483b --- /dev/null +++ b/scripts/angelscript/monsters/sorc_archer2.as @@ -0,0 +1,52 @@ +#pragma context server + +#include "monsters/orc_sniper.as" + +namespace MS +{ + +class SorcArcher2 : CGameScript +{ + int AM_SORC; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + string ARROW_TYPE; + string CONTAINER_BASE; + int DOING_KICK; + int DROP_GOLD_AMT; + string DROP_ITEM_BASE1; + int FIN_EXP; + int KICK_TYPE; + + SorcArcher2() + { + ARROW_TYPE = "proj_arrow_lightning"; + FIN_EXP = 200; + DROP_GOLD_AMT = RandomInt(20, 60); + DROP_ITEM_BASE1 = "bows_swiftbow"; + CONTAINER_BASE = "chests/quiver_of_lightning"; + AM_SORC = 1; + ARROW_DAMAGE_LOW = 75; + ARROW_DAMAGE_HIGH = 150; + AM_SORC = 1; + } + + void orc_spawn() + { + SetHealth(500); + SetName("Shadahar Archer"); + SetHearingSensitivity(10); + SetStat("parry", 60); + SetDamageResistance("all", ".7"); + SetRace("orc"); + SetModel("monsters/sorc.mdl"); + DOING_KICK = 0; + KICK_TYPE = 1; + SetModelBody(0, 3); + SetModelBody(1, 2); + SetModelBody(2, 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_archer3.as b/scripts/angelscript/monsters/sorc_archer3.as new file mode 100644 index 00000000..910d2129 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_archer3.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "monsters/orc_sniper.as" + +namespace MS +{ + +class SorcArcher3 : CGameScript +{ + int AM_SORC; + int ARROW_DAMAGE_HIGH; + int ARROW_DAMAGE_LOW; + int ARROW_MISSED; + string ARROW_TARGET_LIST; + string ARROW_TYPE; + string CONTAINER_BASE; + int DMG_AOE; + int DOING_KICK; + int DROP_GOLD_AMT; + string DROP_ITEM_BASE1; + int FIN_EXP; + int IS_ARROW; + int KICK_TYPE; + int MELEE_ATK; + + SorcArcher3() + { + ARROW_TYPE = "proj_arrow_npc_dyn"; + FIN_EXP = 400; + DROP_GOLD_AMT = RandomInt(20, 60); + DROP_ITEM_BASE1 = "bows_swiftbow"; + CONTAINER_BASE = "chests/quiver_of_lightning"; + DMG_AOE = 200; + ARROW_DAMAGE_LOW = 100; + ARROW_DAMAGE_HIGH = 200; + AM_SORC = 1; + Precache("magic/lightning_strike2.wav"); + } + + void orc_spawn() + { + SetHealth(800); + SetName("Elite Shadahar Archer"); + SetHearingSensitivity(10); + SetStat("parry", 60); + SetDamageResistance("all", ".7"); + SetRace("orc"); + SetModel("monsters/sorc.mdl"); + DOING_KICK = 0; + KICK_TYPE = 1; + SetModelBody(0, 3); + SetModelBody(1, 3); + SetModelBody(2, 2); + } + + void ext_arrow_hit() + { + string ARROW_POS = param3; + string TARG_ALIVE = IsEntityAlive(param2); + if (GetRelationship(param2) == "enemy") + { + if ((TARG_ALIVE)) + { + } + int HIT_ENEMY = 1; + } + if ((HIT_ENEMY)) + { + string ARROW_POS = GetEntityOrigin(param2); + } + ARROW_POS = "z"; + ClientEvent("new", "all", "effects/sfx_shock_burst", ARROW_POS, 128, 1, Vector3(255, 255, 0)); + XDoDamage(ARROW_POS, 128, DMG_AOE, 0, GetOwner(), GetOwner(), "none", "lightning_effect"); + ARROW_TARGET_LIST = FindEntitiesInSphere("enemy", 128); + if (!(ARROW_TARGET_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(ARROW_TARGET_LIST, ";"); i++) + { + arrow_affect_targets(); + } + } + + void arrow_affect_targets() + { + string CUR_TARG = GetToken(ARROW_TARGET_LIST, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), 40); + ARROW_MISSED = 0; + } + + void shoot_arrow() + { + string TARGET_DIST = GetEntityRange(m_hLastSeen); + string FINAL_TARGET = GetEntityOrigin(m_hLastSeen); + FINAL_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, TARGET_DIST)); + TARGET_DIST /= 100; + SetAngles("add_view.pitch"); + IS_ARROW = 1; + TossProjectile(ARROW_TYPE, /* TODO: $relpos */ $relpos(0, 0, 18), "none", 900, DMG_BOW, ATTACK_CONE_OF_FIRE, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4, 1, Vector3(255, 255, 0)); + SetModelBody(2, 2); + EmitSound(GetOwner(), 2, SOUND_BOW, 10); + MELEE_ATK = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_base.as b/scripts/angelscript/monsters/sorc_base.as new file mode 100644 index 00000000..0d2c2354 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_base.as @@ -0,0 +1,681 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SorcBase : CGameScript +{ + int AM_ESCORT; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_KNEEL; + string ANIM_RUN; + string ANIM_SORCJUMP; + string ANIM_WALK; + int CALLED_HELP; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + string CHIEF_ID; + int DID_SPOT_SPEECH; + float FLINCH_CHANCE; + int FLINCH_DELAY; + float FREQ_SORCJUMP; + float FREQ_TELE; + string FWD_JUMP_STR; + int HUNT_AGRO; + string KNEEL_MODE; + string LAST_ENEMY; + string NEXT_SORCJUMP; + int NO_CLOSE_MOUTH; + int NPC_SILENT_DEATH; + string ORC_JUMPER; + int ORC_JUMP_CUTOFF; + int ORC_JUMP_POWER; + int ORC_JUMP_RANGE; + string PLAYER_LIST; + string SORC_CUR_TELE_IDX; + string SORC_FINAL_TELEDEST; + float SORC_LRESIST; + int SORC_MAX_JUMP_RANGE; + int SORC_NO_TELE; + float SORC_PRESIST; + string SORC_REPULSE_TARGETS; + string SORC_SCAN_BEST_DIST; + string SORC_SCAN_BEST_IDX; + int SORC_SCAN_BEST_SET; + int SORC_SCAN_IDX; + string SORC_SCAN_SET; + int SORC_TELEPORTS; + int SORC_TELE_CYCLE_ON; + string SORC_TELE_ORG; + string SORC_TELE_SET1; + string SORC_TELE_SET2; + string SORC_TELE_SET3; + string SORC_TELE_SETS; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_HELP; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + string SOUND_ZOMB_ALERT1; + string SOUND_ZOMB_ALERT2; + string SOUND_ZOMB_ALERT3; + string SOUND_ZOMB_ATK1; + string SOUND_ZOMB_ATK2; + string SOUND_ZOMB_ATK3; + string SOUND_ZOMB_STRUCK1; + string SOUND_ZOMB_STRUCK2; + string SOUND_ZOMB_STRUCK3; + string SPAWN_SPEECH; + float SPAWN_SPEECH_DELAY; + string SPOT_SPEECH; + string UP_SORCJUMP_STR; + + SorcBase() + { + NO_CLOSE_MOUTH = 1; + if (!(SORC_NOJUMP)) + { + ORC_JUMPER = 1; + if ((StringToLower(GetMapName())).findFirst("sorc_palace") >= 0) + { + SORC_SUPERJUMP = 1; + } + if ((SORC_SUPERJUMP)) + { + } + ORC_JUMPER = 0; + } + ANIM_KNEEL = "kneel"; + ANIM_SORCJUMP = "battleaxe_swing1_L"; + FREQ_SORCJUMP = 5.0; + SORC_MAX_JUMP_RANGE = 600; + ORC_JUMP_RANGE = 512; + ORC_JUMP_CUTOFF = 400; + ORC_JUMP_POWER = RandomInt(550, 650); + FREQ_TELE = Random(5.0, 10.0); + SORC_TELEPORTS = 1; + SORC_LRESIST = 0.75; + SORC_PRESIST = 1.10; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_HIT = "voices/orc/hit.wav"; + SOUND_HIT2 = "voices/orc/hit2.wav"; + SOUND_HIT3 = "voices/orc/hit3.wav"; + SOUND_PAIN = "monsters/orc/pain.wav"; + SOUND_WARCRY1 = "monsters/orc/battlecry.wav"; + SOUND_ATTACK1 = "voices/orc/attack.wav"; + SOUND_ATTACK2 = "voices/orc/attack2.wav"; + SOUND_ATTACK3 = "voices/orc/attack3.wav"; + NPC_SILENT_DEATH = 1; + SOUND_HELP = "voices/orc/help.wav"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die_fallback"; + HUNT_AGRO = 1; + CAN_HEAR = 1; + CAN_FLEE = 0; + CAN_FLINCH = 1; + FLINCH_CHANCE = 0.3; + ANIM_FLINCH = "flinch"; + FLINCH_DELAY = 4; + LAST_ENEMY = "NONE"; + SOUND_ZOMB_STRUCK1 = "debris/flesh2.wav"; + SOUND_ZOMB_STRUCK2 = "agrunt/ag_pain3.wav"; + SOUND_ZOMB_STRUCK3 = "agrunt/ag_pain5.wav"; + SOUND_ZOMB_ATK1 = "zombie/claw_miss1.wav"; + SOUND_ZOMB_ATK2 = "zombie/claw_miss2.wav"; + SOUND_ZOMB_ATK3 = "zombie/claw_strike1.wav"; + SOUND_ZOMB_ALERT1 = "monsters/zombie1/orc_zo_alert10.wav"; + SOUND_ZOMB_ALERT2 = "monsters/zombie1/orc_zo_alert20.wav"; + SOUND_ZOMB_ALERT3 = "monsters/zombie1/orc_zo_alert30.wav"; + Precache("voices/orc/help.wav"); + } + + void OnSpawn() override + { + SetDamageResistance("lightning", SORC_LRESIST); + SetDamageResistance("poison", SORC_PRESIST); + SetDamageResistance("acid", SORC_PRESIST); + } + + void cycle_up() + { + if (!(G_SORC_TELE_POINTS > 0)) return; + if (!(SORC_TELEPORTS)) return; + if ((SORC_NO_TELE)) return; + if ((SORC_TELE_CYCLE_ON)) return; + SORC_TELE_CYCLE_ON = 1; + SORC_TELE_SETS = GetEntityProperty(GAME_MASTER, "scriptvar"); + SORC_TELE_SET1 = GetEntityProperty(GAME_MASTER, "scriptvar"); + if (SORC_TELE_SETS > 1) + { + SORC_TELE_SET2 = GetEntityProperty(GAME_MASTER, "scriptvar"); + } + if (SORC_TELE_SETS > 2) + { + SORC_TELE_SET3 = GetEntityProperty(GAME_MASTER, "scriptvar"); + } + FREQ_TELE("sorc_check_tele_points"); + } + + void ext_list_telepoints() + { + for (int i = 0; i < GetTokenCount(SORC_TELE_SET1, ";"); i++) + { + list_tele_points1(); + } + if (SORC_TELE_SETS > 1) + { + for (int i = 0; i < GetTokenCount(SORC_TELE_SET2, ";"); i++) + { + list_tele_points2(); + } + } + if (SORC_TELE_SETS > 2) + { + for (int i = 0; i < GetTokenCount(SORC_TELE_SET3, ";"); i++) + { + list_tele_points3(); + } + } + } + + void list_tele_points1() + { + LogDebug("set1: game.script.iteration GetToken(SORC_TELE_SET1, i, ";")"); + } + + void list_tele_points2() + { + LogDebug("set2: game.script.iteration GetToken(SORC_TELE_SET2, i, ";")"); + } + + void list_tele_points3() + { + LogDebug("set3: game.script.iteration GetToken(SORC_TELE_SET3, i, ";")"); + } + + void no_teleport() + { + SORC_NO_TELE = 1; + } + + void sorc_check_tele_points() + { + FREQ_TELE("sorc_check_tele_points"); + if ((SUSPEND_AI)) return; + string L_LAST_ATK = AS_ATTACKING; + L_LAST_ATK += 10.0; + LogDebug("Last Attack game.time vs L_LAST_ATK"); + if (!(GetGameTime() > L_LAST_ATK)) return; + if (!(GetGameTime() > G_SORC_NEXT_TELE)) return; + if (m_hAttackTarget != "unset") + { + if (GetEntityRange(m_hAttackTarget) <= ATTACK_HITRANGE) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PLAYER_LIST = ""; + GetAllPlayers(PLAYER_LIST); + ScrambleTokens(PLAYER_LIST, ";"); + SORC_SCAN_BEST_SET = 0; + SORC_SCAN_IDX = 1; + SORC_SCAN_SET = SORC_TELE_SET1; + for (int i = 0; i < GetTokenCount(SORC_SCAN_SET, ";"); i++) + { + sorc_scan_tele_points(); + } + if (SORC_TELE_SETS > 1) + { + SORC_SCAN_IDX = 2; + SORC_SCAN_SET = SORC_TELE_SET2; + for (int i = 0; i < GetTokenCount(SORC_SCAN_SET, ";"); i++) + { + sorc_scan_tele_points(); + } + } + if (SORC_TELE_SETS > 2) + { + SORC_SCAN_IDX = 3; + SORC_SCAN_SET = SORC_TELE_SET3; + for (int i = 0; i < GetTokenCount(SORC_SCAN_SET, ";"); i++) + { + sorc_scan_tele_points(); + } + } + if (SORC_SCAN_BEST_SET == 1) + { + SORC_SCAN_BEST_SET = SORC_TELE_SET1; + } + if (SORC_SCAN_BEST_SET == 2) + { + SORC_SCAN_BEST_SET = SORC_TELE_SET2; + } + if (SORC_SCAN_BEST_SET == 3) + { + SORC_SCAN_BEST_SET = SORC_TELE_SET3; + } + SORC_FINAL_TELEDEST = GetToken(SORC_SCAN_BEST_SET, SORC_SCAN_BEST_IDX, ";"); + SetGlobalVar("G_SORC_NEXT_TELE", GetGameTime()); + G_SORC_NEXT_TELE += 5.0; + npcatk_suspend_ai(); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + ScheduleDelayedEvent(0.20, "sorc_tele_out"); + ScheduleDelayedEvent(0.25, "sorc_repulse"); + ScheduleDelayedEvent(0.5, "sorc_finalize_teleport"); + } + + void sorc_tele_out() + { + SetEntityOrigin(GetOwner(), Vector3(20000, -20000, -20000)); + } + + void sorc_finalize_teleport() + { + SetEntityOrigin(GetOwner(), SORC_FINAL_TELEDEST); + npcatk_resume_ai(); + ScheduleDelayedEvent(0.25, "sorc_reset_renderprops"); + } + + void sorc_reset_renderprops() + { + SetProp(GetOwner(), "rendermode", 0); + } + + void sorc_repulse() + { + string REPULSE_AOE = GetMonsterProperty("moveprox"); + REPULSE_AOE *= 1.5; + ClientEvent("new", "all", "effects/sfx_repulse_burst", SORC_FINAL_TELEDEST, REPULSE_AOE, 1.0); + SORC_REPULSE_TARGETS = FindEntitiesInSphere("any", ATTACK_RANGE); + if (!(SORC_REPULSE_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(SORC_REPULSE_TARGETS, ";"); i++) + { + sorc_repulse_targets(); + } + } + + void sorc_repulse_targets() + { + string CUR_TARG = GetToken(SORC_REPULSE_TARGETS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(SORC_FINAL_TELEDEST, TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 800, 0))); + } + + void sorc_scan_tele_points() + { + LogDebug("Checking: SORC_CUR_TELE_IDX of GetTokenCount(SORC_SCAN_SET, ";") in set SORC_SCAN_IDX cur_best_dist SORC_SCAN_BEST_DIST"); + SORC_CUR_TELE_IDX = i; + SORC_TELE_ORG = GetToken(SORC_SCAN_SET, SORC_CUR_TELE_IDX, ";"); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + sorc_scan_tele_find_nearest_player(); + } + } + + void sorc_scan_tele_find_nearest_player() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + if (!(IsEntityAlive(CUR_PLAYER))) return; + string CUR_PLAYER_ORG = GetEntityOrigin(CUR_PLAYER); + float DIST_FROM_POINT = Distance(SORC_TELE_ORG, CUR_PLAYER_ORG); + if (SORC_SCAN_BEST_SET == 0) + { + LogDebug("First: SORC_SCAN_BEST_IDX"); + SORC_SCAN_BEST_SET = SORC_SCAN_IDX; + SORC_SCAN_BEST_IDX = SORC_CUR_TELE_IDX; + SORC_SCAN_BEST_DIST = DIST_FROM_POINT; + } + else + { + LogDebug("Better: SORC_SCAN_BEST_IDX SORC_SCAN_BEST_DIST vs. SORC_CUR_TELE_IDX DIST_FROM_POINT"); + if (DIST_FROM_POINT < SORC_SCAN_BEST_DIST) + { + SORC_SCAN_BEST_SET = SORC_SCAN_IDX; + SORC_SCAN_BEST_IDX = SORC_CUR_TELE_IDX; + SORC_SCAN_BEST_DIST = DIST_FROM_POINT; + } + } + } + + void sorc_tele_fx() + { + string REPULSE_AOE = GetMonsterProperty("moveprox"); + REPULSE_AOE *= 1.5; + string L_ORG = param1; + L_ORG = "z"; + ClientEvent("new", "all", "effects/sfx_repulse_burst", L_ORG, REPULSE_AOE, 1.0); + } + + void set_tele_in() + { + set_fade_in(1.0); + ScheduleDelayedEvent(0.1, "set_tele_in2"); + } + + void set_tele_in2() + { + sorc_tele_fx(GetEntityOrigin(GetOwner())); + } + + void OnSpawn() override + { + SetRoam(true); + SetRace("orc"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + orc_spawn(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + SetModelBody(4, 0); + orc_death(); + } + + void OnTargetValidate(CBaseEntity@ target) + { + string LASTSEEN_ENEMY = m_hAttackTarget; + if (!(LASTSEEN_ENEMY != LAST_ENEMY)) return; + LAST_ENEMY = LASTSEEN_ENEMY; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (ORC_SHIELD == 1) + { + if (!(BO_ZOMBIE_MODE)) + { + } + int block = RandomInt(0, 99); + if (block < 30) + { + if (block < 5) + { + PlayAnim("critical", "deflectcounter"); + swing_axe(); + } + else + { + int rand = RandomInt(0, 1); + if (rand == 0) + { + PlayAnim("critical", "shielddeflect1"); + } + if (rand == 1) + { + PlayAnim("critical", "shielddeflect2"); + } + } + } + else + { + sound_struck(); + } + } + else + { + sound_struck(); + } + orc_struck(); + } + + void sound_struck() + { + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_PAIN}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void baseorc_yell() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(ATTACK_PUSH != "ATTACK_PUSH")) return; + if (!(ATTACK_PUSH != "none")) return; + AddVelocity(m_hLastStruckByMe, ATTACK_PUSH); + } + + void OnParry(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnAidingAlly(CBaseEntity@ ally, CBaseEntity@ enemy) + { + if ((CALLED_HELP)) return; + CALLED_HELP = 1; + CallExternal(GetEntityIndex(param2), "ext_mon_playsound", 0, 10, "voices/orc/help.wav"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), 0, "voices/orc/die.wav", 5); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + float GAME_TIME = GetGameTime(); + if (!(GAME_TIME > NEXT_SORCJUMP)) return; + if (!(GetEntityRange(m_hAttackTarget) < SORC_MAX_JUMP_RANGE)) return; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > ATTACK_RANGE) + { + sorc_hop(Z_DIFF); + int EXIT_SUB = 1; + NEXT_SORCJUMP = GAME_TIME; + NEXT_SORCJUMP += FREQ_SORCJUMP; + } + } + + void sorc_hop() + { + EmitSound(GetOwner(), 0, "monsters/orc/attack1.wav", 10); + UP_SORCJUMP_STR = param1; + UP_SORCJUMP_STR *= 5; + npcatk_suspend_ai(1.0); + FWD_JUMP_STR = GetEntityRange(m_hAttackTarget); + PlayAnim("critical", ANIM_SORCJUMP); + ScheduleDelayedEvent(0.1, "sorc_jump_boost"); + } + + void sorc_jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, FWD_JUMP_STR, UP_SORCJUMP_STR)); + } + + void npc_targetsighted() + { + if ((DID_SPOT_SPEECH)) return; + DID_SPOT_SPEECH = 1; + if (!(SPOT_SPEECH != "SPOT_SPEECH")) return; + SayText(SPOT_SPEECH); + } + + void OnPostSpawn() override + { + if (!(SPAWN_SPEECH != "SPAWN_SPEECH")) return; + SPAWN_SPEECH_DELAY("say_spawn_speech"); + if (!(KNEEL_MODE)) return; + SetIdleAnim(ANIM_KNEEL); + SetMoveAnim(ANIM_KNEEL); + SetRoam(false); + } + + void say_spawn_speech() + { + SayText(SPAWN_SPEECH); + } + + void set_sorcpal_jailer1() + { + SetSayTextRange(2048); + SPAWN_SPEECH = "What's all that racket down there?"; + SPAWN_SPEECH_DELAY = 1.0; + SPOT_SPEECH = "Sound the alarm! Introduers!"; + } + + void set_sorcpal_jailer2() + { + SetSayTextRange(2048); + SPAWN_SPEECH = "I don't know..."; + SPAWN_SPEECH_DELAY = 2.0; + SPOT_SPEECH = "Intruders! ...and they let the beef escape!!!"; + if (G_ONE_SHOT >= 1) + { + SPAWN_SPEECH = "SPAWN_SPEECH"; + SPOT_SPEECH = "SPOT_SPEECH"; + } + SetGlobalVar("G_ONE_SHOT", 1); + } + + void set_sorcpal_kennel1() + { + SetSayTextRange(2048); + SPOT_SPEECH = "Go get em Fido!"; + } + + void set_sorcpal_wrecked1() + { + SetSayTextRange(2048); + SPAWN_SPEECH = "We really gotta fix this place someday."; + SPAWN_SPEECH_DELAY = 0.1; + SPOT_SPEECH = "Intruders!! Armed humans within the palace walls!"; + } + + void set_sorcpal_wrecked2() + { + SetSayTextRange(2048); + SPAWN_SPEECH = "Just shut up and do your patrol."; + SPAWN_SPEECH_DELAY = 2.0; + } + + void set_sorcpal_reward1() + { + SetSayTextRange(2048); + SPOT_SPEECH = "Runegahr will promote us good if we smash these guys!"; + } + + void set_sorcpal_reached1() + { + SetSayTextRange(2048); + SPOT_SPEECH = "The intruders have reached the north east hall!"; + } + + void set_sorcpal_reached2() + { + SetSayTextRange(2048); + if (GetPlayerCount() > 1) + { + SPOT_SPEECH = "How did a couple of humans get this far into the palace!?"; + } + else + { + SPOT_SPEECH = "How did one armed human get THIS far into the palace!?"; + } + } + + void set_sorcpal_reached3() + { + SetSayTextRange(2048); + if (GetPlayerCount() > 1) + { + SPOT_SPEECH = "They've reached the east tower!"; + } + else + { + SPOT_SPEECH = "He's reached the east tower!"; + } + } + + void set_sorcpal_killthem1() + { + SetSayTextRange(2048); + if (GetPlayerCount() > 1) + { + SPOT_SPEECH = "Kill them! Kill them NOW!"; + } + else + { + SPOT_SPEECH = "Kill him! Kill him NOW!"; + } + } + + void set_sorc_villa_first_guard() + { + SPOT_SPEECH = "Humans! Humans have entered the town from the palace! SOUND THE ALARM!"; + } + + void set_sorcpal_throne() + { + SetSayTextRange(2048); + SORC_NO_TELE = 1; + AM_ESCORT = 1; + if ((G_SORC_CHIEF_PRESENT)) + { + CHIEF_ID = FindEntityByName("the_warchief"); + if (!(GetEntityProperty(CHIEF_ID, "scriptvar"))) + { + } + SetInvincible(2); + KNEEL_MODE = 1; + SetIdleAnim(ANIM_KNEEL); + SetMoveAnim(ANIM_KNEEL); + npcatk_suspend_ai(); + SetRoam(false); + } + } + + void sorcs_confirm_order() + { + SayText("Yes , warchief."); + Say("[.16] [.32] [.32] [.16]"); + } + + void ext_chief_orders_attack() + { + if (!(KNEEL_MODE)) return; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + npcatk_resume_ai(); + SetInvincible(false); + KNEEL_MODE = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_brawler.as b/scripts/angelscript/monsters/sorc_brawler.as new file mode 100644 index 00000000..0b1c548a --- /dev/null +++ b/scripts/angelscript/monsters/sorc_brawler.as @@ -0,0 +1,327 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/sorc_base.as" + +namespace MS +{ + +class SorcBrawler : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_KICK; + string ANIM_SLAP; + string ANIM_SMASH; + string ANIM_SWIPE1; + string ANIM_WARCRY; + int ATTACKING; + float ATTACK_ACCURACY; + int ATTACK_DAMAGE; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + string ATTACK_PUSH; + int ATTACK_RANGE; + string ATTACK_TYPE; + float BASE_MOVESPEED; + int CHARGE_DELAY; + int DONE_WARCRY; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FLINCH_CHANCE; + float KICK_DMG_DELAY; + int MOVE_RANGE; + string MY_SCRIPT_IDX; + string NEXT_ATTACK; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + float SLAP_DMG_DELAY; + string SOUND_KICK; + string SOUND_KICKHIT; + string SOUND_SLAP; + string SOUND_SLAPHIT; + string SOUND_TELE; + string SOUND_WALK1; + string SOUND_WALK2; + string SOUND_WARCRY; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + float STUCK_CHECK_FREQUENCY; + + SorcBrawler() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(100, 200); + NPC_GIVE_EXP = 500; + BASE_MOVESPEED = 2.0; + ANIM_ATTACK1 = "swordswing1_L"; + ANIM_SMASH = "battleaxe_swing1_L"; + ANIM_SWIPE1 = "swordswing1_L"; + ANIM_SLAP = "deflectcounter"; + ANIM_KICK = "kick"; + ANIM_WARCRY = "warcry"; + KICK_DMG_DELAY = 0.5; + SLAP_DMG_DELAY = 0.5; + FLINCH_CHANCE = 0.45; + ATTACK_ACCURACY = 0.7; + ATTACK_DAMAGE = RandomInt(50, 100); + ATTACK_DMG_LOW = 10; + ATTACK_DMG_HIGH = 20; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 200; + ATTACK_MOVERANGE = 50; + MOVE_RANGE = 50; + SOUND_KICK = "zombie/claw_miss1.wav"; + SOUND_SLAP = "zombie/claw_miss2.wav"; + SOUND_KICKHIT = "zombie/claw_strike2.wav"; + SOUND_SLAPHIT = "zombie/claw_strike3.wav"; + SOUND_WARCRY = "monsters/troll/trollidle.wav"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart14.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + SOUND_TELE = "magic/teleport.wav"; + STUCK_CHECK_FREQUENCY = 2.0; + } + + void orc_spawn() + { + SetHealth(4000); + SetWidth(38); + SetHeight(96); + SetName("Shadahar Thunderfist"); + SetHearingSensitivity(8); + SetModel("monsters/sorc_big.mdl"); + SetMoveSpeed(2.0); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetModelBody(2, 0); + } + + void OnPostSpawn() override + { + ATTACK_MOVERANGE = 86; + ATTACK_RANGE = 110; + ATTACK_HITRANGE = 175; + } + + void npc_selectattack() + { + ATTACK_PUSH = "none"; + if ((ATTACKING)) return; + if (NEXT_ATTACK == "NEXT_ATTACK") + { + ATTACK_TYPE = RandomInt(1, 4); + } + if (NEXT_ATTACK != "NEXT_ATTACK") + { + ATTACK_TYPE = NEXT_ATTACK; + } + ATTACKING = 1; + if (ATTACK_TYPE == 1) + { + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-200, 230, 220); + ATTACK_DAMAGE = RandomInt(50, 150); + ANIM_ATTACK = ANIM_SMASH; + PlayAnim("critical", ANIM_SMASH); + ATTACK_TYPE = RandomInt(1, 4); + } + if (ATTACK_TYPE == 2) + { + ATTACK_DAMAGE = RandomInt(25, 100); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-100, 130, 120); + ANIM_ATTACK = ANIM_SWIPE1; + PlayAnim("critical", ANIM_SWIPE1); + ATTACK_TYPE = RandomInt(1, 4); + } + if (ATTACK_TYPE == 3) + { + ATTACK_DAMAGE = RandomInt(25, 50); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-10, 13, 12); + ANIM_ATTACK = ANIM_SLAP; + PlayAnim("critical", ANIM_SLAP); + EmitSound(GetOwner(), 0, SOUND_SLAP, 10); + SLAP_DMG_DELAY("slap_damage"); + NEXT_ATTACK = 1; + } + if (ATTACK_TYPE == 4) + { + ATTACK_DAMAGE = RandomInt(50, 100); + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-300, 330, 320); + ANIM_ATTACK = ANIM_KICK; + PlayAnim("critical", ANIM_KICK); + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + if (!(I_R_FROZEN)) + { + SetMoveSpeed(2.0); + } + NEXT_ATTACK = 1; + } + } + + void kick_land() + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY); + ATTACKING = 0; + } + + void slap_damage() + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY); + ATTACKING = 0; + } + + void swing_axe() + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY); + baseorc_yell(); + ATTACKING = 0; + } + + void swing_sword() + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY); + baseorc_yell(); + ATTACKING = 0; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(DID_WARCRY)) + { + if ((IsValidPlayer(m_hLastSeen))) + { + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + DONE_WARCRY = 0; + ScheduleDelayedEvent(3.0, "warcry_over"); + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (!(DONE_WARCRY)) return; + string NME_RANGE = GetEntityRange(m_hLastSeen); + if (!(NME_RANGE > 200)) return; + if ((CHARGE_DELAY)) return; + start_charge(); + } + + void start_charge() + { + ClientEvent("new", "all", "effects/sfx_motionblur_perm", GetEntityIndex(GetOwner()), 0); + MY_SCRIPT_IDX = "game.script.last_sent_id"; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + if (!(I_R_FROZEN)) + { + SetMoveSpeed(5.0); + } + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + NEXT_ATTACK = 4; + CHARGE_DELAY = 1; + ScheduleDelayedEvent(0.1, "boost_me"); + ScheduleDelayedEvent(0.5, "render_norm"); + ScheduleDelayedEvent(3.0, "charge_out"); + ScheduleDelayedEvent(10.0, "charge_reset"); + } + + void boost_me() + { + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 1000, 110)); + } + + void render_norm() + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + + void charge_out() + { + ClientEvent("remove", "all", MY_SCRIPT_IDX); + if ((I_R_FROZEN)) return; + SetMoveSpeed(2.0); + } + + void charge_reset() + { + CHARGE_DELAY = 0; + } + + void warcry_over() + { + DONE_WARCRY = 1; + } + + void game_dodamage() + { + ATTACKING = 0; + if (!(param1)) return; + if (ATTACK_TYPE == 1) + { + if (RandomInt(1, 5) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", RandomInt(5, 10), GetEntityIndex(GetOwner())); + } + } + if (ATTACK_TYPE == 2) + { + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", RandomInt(5, 10), GetEntityIndex(GetOwner())); + } + } + if (ATTACK_TYPE == 3) + { + EmitSound(GetOwner(), 0, SOUND_SLAPHIT, 10); + if (RandomInt(1, 10) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", RandomInt(5, 10), GetEntityIndex(GetOwner())); + } + if (RandomInt(1, 20) == 1) + { + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 128, 1, 1); + Effect("screenfade", param2, 3, 1, Vector3(255, 255, 255), 255, "fadein"); + } + } + if (ATTACK_TYPE == 4) + { + EmitSound(GetOwner(), 0, SOUND_KICKHIT, 10); + if (RandomInt(1, 2) == 1) + { + ApplyEffect(m_hLastStruckByMe, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 200, 30)); + } + ApplyEffect(m_hLastStruckByMe, "effects/debuff_stun", RandomInt(5, 10), GetEntityIndex(GetOwner())); + } + } + + void freeze_solid_end() + { + SetMoveSpeed(2.0); + } + + void run_step1() + { + EmitSound(GetOwner(), 2, SOUND_WALK2, 8); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 128, 10, 1, 128); + } + + void run_step2() + { + EmitSound(GetOwner(), 2, SOUND_WALK1, 8); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 128, 10, 1, 128); + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_chief1.as b/scripts/angelscript/monsters/sorc_chief1.as new file mode 100644 index 00000000..7ebeded5 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_chief1.as @@ -0,0 +1,1000 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SorcChief1 : CGameScript +{ + int AM_LEAPING; + int AM_UNARMED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_PARRY; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WARCRY; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BLOOD_DRINKER_ID; + int CAN_FLINCH; + int CUR_SPECIAL; + int CYCLES_STARTED; + float DMG_KICK; + int DMG_LBLAST; + int DMG_LSTORM; + int DMG_SLASH; + int DMG_SMACK; + int DMG_SMASH; + string DOUBLE_FOR; + string DOUBLE_UP; + int DUR_LSTORM; + string FIRST_PLAYER; + string FOUND_NEAR_TARGET; + float FREQ_KICK; + int FREQ_LBLAST; + float FREQ_LEAP; + int FREQ_LSTORM; + int FREQ_SPECIAL; + int FREQ_TELEPORT; + int FREQ_TELEPORT_FAST; + int FREQ_THROW; + int FREQ_TORNADO; + string HALF_HEALTH; + string ID_LSTORM1; + string ID_LSTORM2; + int JUMP_FWD_DIST; + int KICK_DELAY; + string LAST_SWORD_HIT; + string LAST_TELE; + string LEAP_DELAY; + int LOC_LSTORM1; + int LOC_LSTORM2; + int LSTORM_LOOPCOUNT; + string LSTORM_TARGS; + string MAX_AI_SUSPEND; + float MIN_TELEPORT_DELAY; + int MOVE_RANGE; + string NEW_TARGET; + int NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_FORCED_MOVEDEST; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int NPC_USES_LIGHTS; + int N_STORMS; + int N_TELES; + int ON_LODAGOND; + int PLAYERS_INRANGE; + int PLAYERS_NEAR; + int PNEAR_LOOP_COUNT; + int RENDER_COUNT; + string SEARCH_RAD; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_HELP; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_TELE; + string SOUND_WARCRY; + string SOUND_WARCRY1; + int SWORD_ATTACK; + string TELE_ANG; + string TELE_ANGS; + string TELE_DEST; + string TELE_ID1; + string TELE_ID2; + string TELE_ID3; + string TELE_ID4; + string TORNADO_ID; + float VAMPIRE_RATIO; + + SorcChief1() + { + MIN_TELEPORT_DELAY = 15.0; + NPC_BOSS_REGEN_RATE = 0; + NPC_BOSS_RESTORATION = 0.3; + NPC_USES_LIGHTS = 1; + if (StringToLower(GetMapName()) == "lodagond-1") + { + NPC_GIVE_EXP = 10000; + NPC_IS_BOSS = 1; + } + else + { + NPC_GIVE_EXP = 3000; + } + ANIM_WARCRY = "warcry"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_FLINCH = "flinch"; + ANIM_ATTACK = "swordswing1_L"; + ANIM_SWIPE = "swordswing1_L"; + ANIM_SMASH = "battleaxe_swing1_L"; + ANIM_KICK = "kick"; + ANIM_PARRY = "shielddeflect1"; + ANIM_DEATH = "die_fallback"; + ANIM_HOP = "battleaxe_swing1_L"; + CAN_FLINCH = 1; + ATTACK_HITCHANCE = 0.9; + ATTACK_MOVERANGE = 32; + MOVE_RANGE = 32; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + DMG_SLASH = RandomInt(100, 200); + DMG_SMACK = RandomInt(25, 50); + DMG_SMASH = RandomInt(150, 400); + DMG_KICK = Random(25, 100); + DMG_LBLAST = 100; + DMG_LSTORM = 100; + DUR_LSTORM = 30; + FREQ_TORNADO = RandomInt(15, 30); + FREQ_LSTORM = RandomInt(30, 45); + FREQ_LBLAST = RandomInt(15, 30); + FREQ_THROW = RandomInt(10, 30); + FREQ_SPECIAL = RandomInt(10, 15); + FREQ_TELEPORT = RandomInt(20, 140); + FREQ_TELEPORT_FAST = RandomInt(20, 40); + FREQ_KICK = 10.0; + FREQ_LEAP = 5.0; + SOUND_WARCRY = "monsters/troll/trollidle.wav"; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_HIT = "voices/orc/hit.wav"; + SOUND_HIT2 = "voices/orc/hit2.wav"; + SOUND_HIT3 = "voices/orc/hit3.wav"; + SOUND_PAIN = "monsters/orc/pain.wav"; + SOUND_WARCRY1 = "monsters/orc/battlecry.wav"; + SOUND_ATTACK1 = "voices/orc/attack.wav"; + SOUND_ATTACK2 = "voices/orc/attack2.wav"; + SOUND_ATTACK3 = "voices/orc/attack3.wav"; + SOUND_DEATH = "voices/orc/die.wav"; + SOUND_HELP = "voices/orc/help.wav"; + SOUND_TELE = "magic/teleport.wav"; + VAMPIRE_RATIO = 0.1; + Precache(SOUND_DEATH); + Precache("weapons/magic/tornado.mdl"); + Precache("magic/vent1.wav"); + Precache("magic/vent2.wav"); + Precache("magic/vent3.wav"); + Precache("magic/gusts1.wav"); + Precache("magic/gusts2.wav"); + Precache("weather/Storm_exclamation.wav"); + Precache("magic/lightning_strike.wav"); + Precache("doors/aliendoor3.wav"); + Precache("magic/spawn.wav"); + Precache("zombie/claw_miss2.wav"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(8, 15)); + if (!(SUSPEND_AI)) + { + } + if (m_hAttackTarget != "unset") + { + } + int LEAP_TYPE = RandomInt(1, 4); + if (LEAP_TYPE < 4) + { + leap_at(m_hAttackTarget, "random"); + } + if (LEAP_TYPE == 4) + { + leap_random(); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(1.1); + if (STUCK_COUNT > 4) + { + } + do_teleport("stuck_count"); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(20.0); + if (GetGameTime() > MAX_AI_SUSPEND) + { + MAX_AI_SUSPEND = GetGameTime(); + MAX_AI_SUSPEND += 10.0; + npcatk_resume_ai(); + } + if (GetEntityRange(m_hAttackTarget) > 256) + { + } + float LAST_TELE_DIFF = GetGameTime(); + LAST_TELE_DIFF -= LAST_TELE; + if (LAST_TELE_DIFF > 5.0) + { + } + float LAST_HIT_DIFF = GetGameTime(); + LAST_HIT_DIFF -= LAST_SWORD_HIT; + if (LAST_HIT_DIFF > 20.0) + { + } + do_teleport("stuck_count", "no_hits"); + } + + void OnSpawn() override + { + SetName("Runegahr , Shadahar Orc Chieftain"); + SetRace("orc"); + SetHealth(8000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 0.25); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("stun", 0.25); + SetHearingSensitivity(10); + SetModel("monsters/sorc.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 8); + SetStat("parry", 150); + SetWidth(32); + SetHeight(96); + SetRoam(true); + SetSayTextRange(1024); + SWORD_ATTACK = 0; + JUMP_FWD_DIST = 250; + CUR_SPECIAL = 0; + ScheduleDelayedEvent(1.0, "get_teleporters"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if ((SWORD_ATTACK)) + { + SWORD_ATTACK = 0; + AddVelocity(param1, /* TODO: $relvel */ $relvel(-100, 130, 120)); + if (GetMonsterHP() < GetMonsterMaxHP()) + { + string HP_TO_GIVE = param2; + HP_TO_GIVE *= VAMPIRE_RATIO; + HealEntity(GetOwner(), VAMPIRE_RATIO); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 96, 0.5, 0.5); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + } + } + } + + void cycle_up() + { + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + FREQ_SPECIAL("do_special"); + ScheduleDelayedEvent(60.0, "do_teleport"); + SetRoam(true); + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "sorc_test") + { + int PLOT_MAP = 1; + } + if ((L_MAP_NAME).findFirst("lodagond") >= 0) + { + int PLOT_MAP = 1; + } + if (!(PLOT_MAP)) return; + GetAllPlayers(PLAYER_LIST); + FIRST_PLAYER = GetToken(PLAYER_LIST, 0, ";"); + if (GetEntityRace(FIRST_PLAYER) == "human") + { + string RACE_REMARK = "human"; + string RACE_PLURAL = "humans"; + } + if (GetEntityRace(FIRST_PLAYER) == "elf") + { + string RACE_REMARK = "elf"; + string RACE_PLURAL = "elves"; + } + if (GetEntityRace(FIRST_PLAYER) == "dwarf") + { + string RACE_REMARK = "dwarf"; + string RACE_PLURAL = "dwarves"; + } + SetSayTextRange(2048); + if (GetPlayerCount() == 1) + { + SayText("No! " + I + "will " + NOT + "be rescued by a lowly " + RACE_REMARK); + } + if (GetPlayerCount() > 1) + { + SayText("No! " + I + "will " + NOT + "be rescued by a couple of puny " + RACE_PLURAL); + } + EmitSound(GetOwner(), 0, SOUND_ATTACK2, 10); + } + + void swing_axe() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + LAST_SWORD_HIT = GetGameTime(); + } + sorc_yell(); + SWORD_ATTACK = 1; + if (!(AM_UNARMED)) + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SMASH, ATTACK_HITCHANCE, "slash"); + } + if ((AM_UNARMED)) + { + SWORD_ATTACK = 0; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SMACK, ATTACK_HITCHANCE, "blunt"); + } + ANIM_ATTACK = ANIM_SWIPE; + check_kick(); + } + + void swing_sword() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + LAST_SWORD_HIT = GetGameTime(); + } + sorc_yell(); + if (!(AM_UNARMED)) + { + SWORD_ATTACK = 1; + } + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SLASH, ATTACK_HITCHANCE, "slash"); + if ((AM_UNARMED)) + { + SWORD_ATTACK = 0; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SMACK, ATTACK_HITCHANCE, "blunt"); + } + if (RandomInt(1, 5) == 1) + { + ANIM_ATTACK = ANIM_SMASH; + } + check_kick(); + } + + void check_kick() + { + if ((KICK_DELAY)) return; + if (!(AM_UNARMED)) + { + if (RandomInt(1, 5) != 1) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ANIM_ATTACK = ANIM_KICK; + KICK_DELAY = 1; + if (!(AM_UNARMED)) + { + FREQ_KICK("reset_kick_delay"); + } + if ((AM_UNARMED)) + { + ScheduleDelayedEvent(1.0, "reset_kick_delay"); + } + } + + void kick_land() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + LAST_SWORD_HIT = GetGameTime(); + } + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = ANIM_SWIPE; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", Random(5, 10), GetEntityIndex(GetOwner())); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(-100, 200, 150)); + } + + void reset_kick_delay() + { + KICK_DELAY = 0; + } + + void sorc_yell() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDamage(int damage) override + { + if (GetMonsterHP() < HALF_HEALTH) + { + JUMP_FWD_DIST = 500; + FREQ_LEAP = 0.1; + } + string HIT_BY = GetEntityIndex(param1); + if (param2 > 30) + { + if (GetEntityRange(HIT_BY) < ATTACK_HITRANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + if (!(LEAP_DELAY)) + { + } + LEAP_DELAY = 1; + FREQ_LEAP("leap_delay_reset"); + leap_away(HIT_BY); + } + } + + void leap_delay_reset() + { + LEAP_DELAY = 0; + } + + void orc_hop() + { + EmitSound(GetOwner(), 0, "monsters/orc/attack1.wav", 10); + if (GetMonsterHP() > HALF_HEALTH) + { + int JUMP_HEIGHT = RandomInt(350, 450); + } + if (GetMonsterHP() <= HALF_HEALTH) + { + int JUMP_HEIGHT = RandomInt(350, 950); + } + string L_JUMP_FWD_DIST = JUMP_FWD_DIST; + string L_JUMP_HEIGHT = JUMP_HEIGHT; + if ((DOUBLE_FOR)) + { + DOUBLE_FOR = 0; + L_JUMP_FWD_DIST *= 2; + } + if ((DOUBLE_UP)) + { + DOUBLE_UP = 0; + L_JUMP_HEIGHT *= 2; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, L_JUMP_FWD_DIST, L_JUMP_HEIGHT)); + } + + void leap_away() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "do_leap"); + } + + void leap_random() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + int RND_ROT = RandomInt(0, 359); + string LEAP_DEST = GetMonsterProperty("origin"); + LEAP_DEST += /* TODO: $relpos */ $relpos(Vector3(0, RND_ROT, 0), Vector3(0, 400, 0)); + SetMoveDest(LEAP_DEST); + ScheduleDelayedEvent(0.1, "do_leap"); + } + + void leap_at() + { + if ((AM_LEAPING)) return; + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + if ((IsEntityAlive(m_hAttackTarget))) + { + string TARGET_ORG = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_ORG).z; + string MY_Z = GetMonsterProperty("origin.z"); + if (TARGET_Z > MY_Z) + { + string V_DEST = GetMonsterProperty("origin"); + V_DEST = "z"; + if (Distance(GetMonsterProperty("origin"), V_DEST) > 96) + { + } + DOUBLE_UP = 1; + } + if (GetEntityProperty(m_hAttackTarget, "range2d") > 1600) + { + DOUBLE_FOR = 1; + } + } + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "do_leap"); + } + + void do_leap() + { + // PlayRandomSound from: SOUND_HIT, SOUND_HIT2, SOUND_HIT3 + array sounds = {SOUND_HIT, SOUND_HIT2, SOUND_HIT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_HOP); + ScheduleDelayedEvent(0.1, "orc_hop"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + } + + void reset_leaping() + { + AM_LEAPING = 0; + } + + void do_lstorm() + { + CAN_FLINCH = 0; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + npcatk_suspend_ai(2.0); + LSTORM_TARGS = "placeholder"; + GetAllPlayers(LSTORM_TARGS); + string N_LSTORM_TARGS = GetTokenCount(LSTORM_TARGS, ";"); + N_STORMS = 0; + LOC_LSTORM1 = 0; + LOC_LSTORM2 = 0; + LSTORM_LOOPCOUNT = 0; + if (N_LSTORM_TARGS > 0) + { + for (int i = 0; i < N_LSTORM_TARGS; i++) + { + do_lstorm_loop(); + } + } + if (!(N_STORMS > 0)) return; + ScheduleDelayedEvent(0.1, "do_lstorm2"); + if (N_STORMS > 1) + { + ScheduleDelayedEvent(0.5, "do_lstorm3"); + } + } + + void do_lstorm2() + { + SpawnNPC("monsters/summon/summon_lightning_storm", LOC_LSTORM1, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), DMG_LSTORM, DUR_LSTORM + ID_LSTORM1 = GetEntityIndex(m_hLastCreated); + } + + void do_lstorm3() + { + SpawnNPC("monsters/summon/summon_lightning_storm", LOC_LSTORM2, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), DMG_LSTORM, DUR_LSTORM + ID_LSTORM2 = GetEntityIndex(m_hLastCreated); + } + + void do_lstorm_loop() + { + string CUR_PLAYER = GetToken(LSTORM_TARGS, LSTORM_LOOPCOUNT, ";"); + LSTORM_LOOPCOUNT += 1; + if (GetEntityRange(CUR_PLAYER) < 1024) + { + if (N_STORMS < 2) + { + } + N_STORMS += 1; + string TARG_ORG = GetEntityOrigin(CUR_PLAYER); + if (N_STORMS == 2) + { + if (Distance(TARG_ORG, LOC_LSTORM1) < 256) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string STORM_GRNDPOS = /* TODO: $get_ground_height */ $get_ground_height(TARG_ORG); + TARG_ORG = "z"; + if (N_STORMS == 1) + { + LOC_LSTORM1 = TARG_ORG; + } + if (N_STORMS == 2) + { + LOC_LSTORM2 = TARG_ORG; + } + } + } + + void warcry_done() + { + CAN_FLINCH = 1; + if ((SUSPEND_AI)) + { + npcatk_resume_ai(); + } + } + + void OnParry(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((SUSPEND_AI)) return; + if (RandomInt(1, 3) == 1) + { + PlayAnim("critical", "shielddeflect1"); + } + } + + void get_teleporters() + { + N_TELES = 0; + TELE_ID1 = FindEntityByName("sorc_telepoint1"); + TELE_ID2 = FindEntityByName("sorc_telepoint2"); + TELE_ID3 = FindEntityByName("sorc_telepoint3"); + TELE_ID4 = FindEntityByName("sorc_telepoint4"); + if (((TELE_ID1 !is null))) + { + N_TELES += 1; + } + if (((TELE_ID2 !is null))) + { + N_TELES += 1; + } + if (((TELE_ID3 !is null))) + { + N_TELES += 1; + } + if (((TELE_ID4 !is null))) + { + N_TELES += 1; + } + } + + void do_teleport() + { + if (!(N_TELES > 0)) return; + if (param1 != "stuck_count") + { + if (GetMonsterHP() > HALF_HEALTH) + { + int TELEPORT_FAST = 0; + } + if (GetMonsterHP() <= HALF_HEALTH) + { + int TELEPORT_FAST = 1; + } + if (!(TELEPORT_FAST)) + { + FREQ_TELEPORT("do_teleport"); + } + if ((TELEPORT_FAST)) + { + FREQ_TELEPORT_FAST("do_teleport"); + } + } + float LAST_TELE_DIFF = GetGameTime(); + LAST_TELE_DIFF -= LAST_TELE; + if (!(LAST_TELE_DIFF > MIN_TELEPORT_DELAY)) return; + LogDebug("game.time secs: do_teleport PARAM1 PARAM2"); + LAST_TELE = GetGameTime(); + string TOTAL_TELES = N_TELES; + TOTAL_TELES += 1; + int PICK_TELE = RandomInt(1, TOTAL_TELES); + if (param2 == "no_hits") + { + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green no_hits teleport"); + } + GetAllPlayers(PLAYER_LIST); + ScrambleTokens(PLAYER_LIST, ";"); + FOUND_NEAR_TARGET = 0; + SEARCH_RAD = 512; + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + find_near_teleporter(); + } + if (FOUND_NEAR_TARGET > 0) + { + npcatk_settarget(NEW_TARGET); + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green " + SORC_CHIEF: + "found " + GetEntityName(NEW_TARGET) + "near " + FOUND_NEAR_TARGET); + } + string PICK_TELE = FOUND_NEAR_TARGET; + } + } + if (PICK_TELE == 1) + { + TELE_DEST = GetEntityOrigin(TELE_ID1); + TELE_ANG = GetEntityAngles(TELE_ID1); + CallExternal(TELE_ID1, "tele_used"); + } + if (PICK_TELE == 2) + { + TELE_DEST = GetEntityOrigin(TELE_ID2); + TELE_ANG = GetEntityAngles(TELE_ID2); + CallExternal(TELE_ID2, "tele_used"); + } + if (PICK_TELE == 3) + { + TELE_DEST = GetEntityOrigin(TELE_ID3); + TELE_ANG = GetEntityAngles(TELE_ID3); + CallExternal(TELE_ID3, "tele_used"); + } + if (PICK_TELE == 4) + { + TELE_DEST = GetEntityOrigin(TELE_ID4); + TELE_ANG = GetEntityAngles(TELE_ID4); + CallExternal(TELE_ID4, "tele_used"); + } + if (PICK_TELE > N_TELES) + { + TELE_DEST = NPC_SPAWN_LOC; + TELE_DEST += "z"; + TELE_ANGS = NPC_SPAWN_ANGLES; + } + SpawnNPC("monsters/summon/ibarrier", TELE_DEST, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 64, 2, 0, 0, 0, 1 + leap_tele(); + } + + void find_near_teleporter() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + string PLAYER_ORG = GetEntityOrigin(CUR_PLAYER); + if (!(FOUND_NEAR_TARGET == 0)) return; + if (!(N_TELES >= 1)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID1); + TEST_TELE = "z"; + float TELE_DIST = Distance(PLAYER_ORG, TEST_TELE); + if (TELE_DIST < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 1; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 2)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID2); + TEST_TELE = "z"; + string OLD_TELE_DIST = TELE_DIST; + float TELE_DIST = Distance(PLAYER_ORG, TEST_TELE); + if (TELE_DIST < SEARCH_RAD) + { + if (OLD_TELE_DIST > TELE_DIST) + { + } + FOUND_NEAR_TARGET = 2; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 3)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID3); + TEST_TELE = "z"; + string OLD_TELE_DIST = TELE_DIST; + float TELE_DIST = Distance(PLAYER_ORG, TEST_TELE); + if (TELE_DIST < SEARCH_RAD) + { + if (OLD_TELE_DIST > TELE_DIST) + { + } + FOUND_NEAR_TARGET = 3; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 4)) return; + string TEST_TELE = GetEntityOrigin(TELE_ID4); + TEST_TELE = "z"; + string OLD_TELE_DIST = TELE_DIST; + float TELE_DIST = Distance(PLAYER_ORG, TEST_TELE); + if (TELE_DIST < SEARCH_RAD) + { + if (OLD_TELE_DIST > TELE_DIST) + { + } + FOUND_NEAR_TARGET = 4; + NEW_TARGET = CUR_PLAYER; + } + string TEST_TELE = NPC_SPAWN_LOC; + TEST_TELE = "z"; + string OLD_TELE_DIST = TELE_DIST; + float TELE_DIST = Distance(PLAYER_ORG, TEST_TELE); + if (TELE_DIST < SEARCH_RAD) + { + if (OLD_TELE_DIST > TELE_DIST) + { + } + FOUND_NEAR_TARGET = 5; + NEW_TARGET = CUR_PLAYER; + } + } + + void leap_tele() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(/* TODO: $relpos */ $relpos(0, 1000, 0)); + ScheduleDelayedEvent(0.1, "do_leap"); + RENDER_COUNT = 255; + ScheduleDelayedEvent(0.25, "flicker_out"); + ScheduleDelayedEvent(0.75, "tele_out"); + ScheduleDelayedEvent(1.0, "tele_in"); + } + + void flicker_out() + { + RENDER_COUNT -= 50; + if (!(RENDER_COUNT > 0)) return; + ScheduleDelayedEvent(0.1, "flicker_out"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_COUNT); + } + + void tele_out() + { + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + SetEntityOrigin(GetOwner(), Vector3(-20000, 10000, -20000)); + } + + void tele_in() + { + SetEntityOrigin(GetOwner(), TELE_DEST); + SetAngles("face"); + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + RENDER_COUNT = 0; + flicker_in(); + LAST_TELE = GetGameTime(); + } + + void flicker_in() + { + RENDER_COUNT += 50; + if (RENDER_COUNT >= 255) + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + if (!(RENDER_COUNT < 255)) return; + ScheduleDelayedEvent(0.1, "flicker_in"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_COUNT); + } + + void OnPostSpawn() override + { + HALF_HEALTH = GetMonsterMaxHP(); + HALF_HEALTH /= 2; + string L_MAP_NAME = StringToLower(GetMapName()); + if (!(L_MAP_NAME == "lodagond-1")) return; + ON_LODAGOND = 1; + } + + void do_tornado() + { + PlayAnim("critical", ANIM_SWIPE); + SpawnNPC("monsters/summon/tornado", /* TODO: $relpos */ $relpos(0, 72, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 200, 20.0 + TORNADO_ID = m_hLastCreated; + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if ((ATTACK_PARRY)) + { + SetDamage("hit"); + SetDamage("dmg"); + } + } + + void do_throw() + { + if ((AM_UNARMED)) return; + PLAYERS_NEAR = 0; + PLAYERS_INRANGE = 0; + GetAllPlayers(SORC_LPLAYERS); + PNEAR_LOOP_COUNT = 0; + for (int i = 0; i < GetTokenCount(SORC_LPLAYERS, ";"); i++) + { + any_players_near(); + } + if ((PLAYERS_NEAR)) return; + if (!(PLAYERS_INRANGE)) return; + do_throw2(); + } + + void do_throw2() + { + SetModelBody(2, 0); + AM_UNARMED = 1; + PlayAnim("critical", ANIM_SWIPE); + SpawnNPC("monsters/summon/blood_drinker", /* TODO: $relpos */ $relpos(0, 48, 48), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityIndex(m_hLastStruck), 100, 30.0 + BLOOD_DRINKER_ID = m_hLastCreated; + } + + void any_players_near() + { + string CUR_PLAYER = GetToken(SORC_LPLAYERS, PNEAR_LOOP_COUNT, ";"); + if (GetEntityRange(CUR_PLAYER) < ATTACK_RANGE) + { + PLAYERS_NEAR = 1; + } + if (GetEntityRange(CUR_PLAYER) < 2048) + { + PLAYERS_INRANGE = 1; + } + PNEAR_LOOP_COUNT += 1; + } + + void do_special() + { + string NEXT_TRY = FREQ_SPECIAL; + if ((SUSPEND_AI)) + { + float NEXT_TRY = 5.0; + int ABORT_SPECIAL = 1; + } + NEXT_TRY("do_special"); + if ((ABORT_SPECIAL)) return; + CUR_SPECIAL += 1; + if (CUR_SPECIAL > 3) + { + CUR_SPECIAL = 1; + } + if (CUR_SPECIAL == 1) + { + do_tornado(); + } + if (CUR_SPECIAL == 2) + { + do_lstorm(); + } + if (CUR_SPECIAL == 3) + { + do_throw(); + } + } + + void sword_return() + { + SetModelBody(2, 8); + AM_UNARMED = 0; + } + + void do_nadda() + { + } + + void OnDeath(CBaseEntity@ attacker) override + { + UseTrigger("sorc_defeat"); + if (((BLOOD_DRINKER_ID !is null))) + { + CallExternal(BLOOD_DRINKER_ID, "ext_remove"); + } + if (((TORNADO_ID !is null))) + { + DeleteEntity(TORNADO_ID); + } + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SpawnNPC("lodagond/sorc_image_defeat", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityProperty(GetOwner(), "angles.yaw") + } + + void OnSuspendAI() + { + MAX_AI_SUSPEND = GetGameTime(); + MAX_AI_SUSPEND += 10.0; + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_chief2.as b/scripts/angelscript/monsters/sorc_chief2.as new file mode 100644 index 00000000..7fc898a9 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_chief2.as @@ -0,0 +1,708 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SorcChief2 : CGameScript +{ + int AM_LEAPING; + int AM_UNARMED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_PARRY; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WARCRY; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BD_ID; + int CAN_FLINCH; + int CUR_SPECIAL; + int CYCLES_STARTED; + float DMG_KICK; + int DMG_SLASH; + int DMG_SMACK; + int DMG_SMASH; + string DOUBLE_FOR; + string DOUBLE_UP; + float FREQ_KICK; + float FREQ_LEAP; + int FREQ_SPECIAL; + int GAVE_SWORD; + int JUMP_FWD_DIST; + int KICK_DELAY; + string LAST_SWORD_HIT; + string LAST_TELE; + string LEAP_DELAY; + int MALDORA_DEAD; + string MALDORA_ID; + string MINION_TO_ZAP; + float MIN_TELEPORT_DELAY; + int MOVE_RANGE; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int NPC_USES_LIGHTS; + int RENDER_COUNT; + string RETURN_POINT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_HELP; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_TELE; + string SOUND_WARCRY; + string SOUND_WARCRY1; + int STUCK_TELE; + int SWORD_ATTACK; + string TALK_TARGET; + string T_BOX; + float VAMPIRE_RATIO; + int ZAPPED_MINION; + + SorcChief2() + { + MIN_TELEPORT_DELAY = 15.0; + NPC_USES_LIGHTS = 1; + NPC_GIVE_EXP = 0; + ANIM_WARCRY = "warcry"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_FLINCH = "flinch"; + ANIM_ATTACK = "swordswing1_L"; + ANIM_SWIPE = "swordswing1_L"; + ANIM_SMASH = "battleaxe_swing1_L"; + ANIM_KICK = "kick"; + ANIM_PARRY = "shielddeflect1"; + ANIM_DEATH = "die_fallback"; + ANIM_HOP = "battleaxe_swing1_L"; + CAN_FLINCH = 1; + ATTACK_HITCHANCE = 0.9; + ATTACK_MOVERANGE = 32; + MOVE_RANGE = 32; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + DMG_SLASH = RandomInt(100, 200); + DMG_SMACK = RandomInt(25, 50); + DMG_SMASH = RandomInt(150, 400); + DMG_KICK = Random(25, 100); + FREQ_SPECIAL = RandomInt(20, 40); + FREQ_KICK = 10.0; + FREQ_LEAP = 5.0; + SOUND_WARCRY = "monsters/troll/trollidle.wav"; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_HIT = "voices/orc/hit.wav"; + SOUND_HIT2 = "voices/orc/hit2.wav"; + SOUND_HIT3 = "voices/orc/hit3.wav"; + SOUND_PAIN = "monsters/orc/pain.wav"; + SOUND_WARCRY1 = "monsters/orc/battlecry.wav"; + SOUND_ATTACK1 = "voices/orc/attack.wav"; + SOUND_ATTACK2 = "voices/orc/attack2.wav"; + SOUND_ATTACK3 = "voices/orc/attack3.wav"; + SOUND_DEATH = "voices/orc/die.wav"; + SOUND_HELP = "voices/orc/help.wav"; + SOUND_TELE = "magic/teleport.wav"; + VAMPIRE_RATIO = 0.1; + Precache(SOUND_DEATH); + Precache("doors/aliendoor3.wav"); + Precache("magic/spawn.wav"); + Precache("zombie/claw_miss2.wav"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(8, 15)); + if (m_hAttackTarget == "unset") + { + npcatk_settarget(MALDORA_ID); + } + T_BOX = /* TODO: $get_tbox */ $get_tbox("enemy", 1024); + if (T_BOX != "none") + { + } + ZAPPED_MINION = 0; + for (int i = 0; i < T_BOX; i++) + { + check_for_lminion(); + } + if ((IsEntityAlive(MINION_TO_ZAP))) + { + zap_minion(MINION_TO_ZAP); + } + if (!(SUSPEND_AI)) + { + } + if (m_hAttackTarget != "unset") + { + } + int LEAP_TYPE = RandomInt(1, 4); + if (LEAP_TYPE < 4) + { + leap_at(m_hAttackTarget, "random"); + } + if (LEAP_TYPE == 4) + { + leap_random(); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(1.1); + if (STUCK_COUNT > 4) + { + } + STUCK_TELE = 1; + do_teleport("stuck_count"); + } + + void OnSpawn() override + { + SetName("Runegahr , Shadahar Orc Chieftain"); + SetRace("human"); + SetHealth(8000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 0.25); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("stun", 0.25); + SetHearingSensitivity(10); + SetModel("monsters/sorc.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 8); + SetStat("parry", 150); + SetWidth(32); + SetHeight(96); + SetRoam(true); + SetSayTextRange(2048); + SWORD_ATTACK = 0; + JUMP_FWD_DIST = 250; + CUR_SPECIAL = 0; + ScheduleDelayedEvent(1.0, "get_teleporters"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!((GetEntityName(param1)).findFirst("Lightning") >= 0)) return; + zap_minion(param1); + } + + void cycle_npc() + { + cycle_up(); + } + + void cycle_up() + { + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + FREQ_SPECIAL("do_special"); + ScheduleDelayedEvent(60.0, "do_teleport"); + SetRoam(true); + SayText("Now , Maldora! With these allies " + I + " shall defeat you!"); + EmitSound(GetOwner(), 0, SOUND_ATTACK2, 10); + } + + void swing_axe() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + LAST_SWORD_HIT = GetGameTime(); + } + sorc_yell(); + SWORD_ATTACK = 1; + if (!(AM_UNARMED)) + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SMASH, ATTACK_HITCHANCE, "dark"); + } + if ((AM_UNARMED)) + { + SWORD_ATTACK = 0; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SMACK, ATTACK_HITCHANCE, "blunt"); + } + ANIM_ATTACK = ANIM_SWIPE; + check_kick(); + } + + void swing_sword() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + LAST_SWORD_HIT = GetGameTime(); + } + sorc_yell(); + if (!(AM_UNARMED)) + { + SWORD_ATTACK = 1; + } + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SLASH, ATTACK_HITCHANCE, "dark"); + if ((AM_UNARMED)) + { + SWORD_ATTACK = 0; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SMACK, ATTACK_HITCHANCE, "blunt"); + } + if (RandomInt(1, 5) == 1) + { + ANIM_ATTACK = ANIM_SMASH; + } + check_kick(); + } + + void check_kick() + { + if ((KICK_DELAY)) return; + if (!(AM_UNARMED)) + { + if (RandomInt(1, 5) != 1) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ANIM_ATTACK = ANIM_KICK; + KICK_DELAY = 1; + if (!(AM_UNARMED)) + { + FREQ_KICK("reset_kick_delay"); + } + if ((AM_UNARMED)) + { + ScheduleDelayedEvent(1.0, "reset_kick_delay"); + } + } + + void kick_land() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + LAST_SWORD_HIT = GetGameTime(); + } + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, ATTACK_HITCHANCE, "blunt"); + ANIM_ATTACK = ANIM_SWIPE; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", Random(5, 10), GetEntityIndex(GetOwner())); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(-100, 200, 150)); + } + + void reset_kick_delay() + { + KICK_DELAY = 0; + } + + void sorc_yell() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDamage(int damage) override + { + if (GetMonsterHP() < HALF_HEALTH) + { + JUMP_FWD_DIST = 500; + FREQ_LEAP = 0.1; + } + string HIT_BY = GetEntityIndex(param1); + if (param2 > 30) + { + if (GetEntityRange(HIT_BY) < ATTACK_HITRANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + if (!(LEAP_DELAY)) + { + } + LEAP_DELAY = 1; + FREQ_LEAP("leap_delay_reset"); + leap_away(HIT_BY); + } + } + + void leap_delay_reset() + { + LEAP_DELAY = 0; + } + + void orc_hop() + { + EmitSound(GetOwner(), 0, "monsters/orc/attack1.wav", 10); + if (GetMonsterHP() > HALF_HEALTH) + { + int JUMP_HEIGHT = RandomInt(350, 450); + } + if (GetMonsterHP() <= HALF_HEALTH) + { + int JUMP_HEIGHT = RandomInt(350, 950); + } + string L_JUMP_FWD_DIST = JUMP_FWD_DIST; + string L_JUMP_HEIGHT = JUMP_HEIGHT; + if ((DOUBLE_FOR)) + { + DOUBLE_FOR = 0; + L_JUMP_FWD_DIST *= 2; + } + if ((DOUBLE_UP)) + { + DOUBLE_UP = 0; + L_JUMP_HEIGHT *= 2; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, L_JUMP_FWD_DIST, L_JUMP_HEIGHT)); + } + + void leap_away() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "do_leap"); + } + + void leap_random() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + int RND_ROT = RandomInt(0, 359); + string LEAP_DEST = GetMonsterProperty("origin"); + LEAP_DEST += /* TODO: $relpos */ $relpos(Vector3(0, RND_ROT, 0), Vector3(0, 400, 0)); + SetMoveDest(LEAP_DEST); + ScheduleDelayedEvent(0.1, "do_leap"); + } + + void leap_at() + { + if ((AM_LEAPING)) return; + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + if ((IsEntityAlive(m_hAttackTarget))) + { + string TARGET_ORG = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_ORG).z; + string MY_Z = GetMonsterProperty("origin.z"); + if (TARGET_Z > MY_Z) + { + string V_DEST = GetMonsterProperty("origin"); + V_DEST = "z"; + if (Distance(GetMonsterProperty("origin"), V_DEST) > 96) + { + } + DOUBLE_UP = 1; + } + if (GetEntityProperty(m_hAttackTarget, "range2d") > 1600) + { + DOUBLE_FOR = 1; + } + } + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "do_leap"); + } + + void do_leap() + { + // PlayRandomSound from: SOUND_HIT, SOUND_HIT2, SOUND_HIT3 + array sounds = {SOUND_HIT, SOUND_HIT2, SOUND_HIT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_HOP); + ScheduleDelayedEvent(0.1, "orc_hop"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + } + + void reset_leaping() + { + AM_LEAPING = 0; + } + + void warcry_done() + { + CAN_FLINCH = 1; + if ((SUSPEND_AI)) + { + npcatk_resume_ai(); + } + } + + void OnParry(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((SUSPEND_AI)) return; + if (RandomInt(1, 3) == 1) + { + PlayAnim("critical", "shielddeflect1"); + } + } + + void do_teleport() + { + if ((MALDORA_DEAD)) return; + SpawnNPC("monsters/summon/ibarrier", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 64, 2, 0, 0, 0, 1 + leap_tele(); + } + + void leap_tele() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(/* TODO: $relpos */ $relpos(0, 0, 1000)); + ScheduleDelayedEvent(0.1, "do_leap"); + RENDER_COUNT = 255; + ScheduleDelayedEvent(0.1, "flicker_out"); + ScheduleDelayedEvent(0.25, "tele_out"); + ScheduleDelayedEvent(4.5, "tele_in_barrier"); + ScheduleDelayedEvent(5.0, "tele_in"); + } + + void flicker_out() + { + RENDER_COUNT -= 50; + if (!(RENDER_COUNT > 0)) return; + ScheduleDelayedEvent(0.1, "flicker_out"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_COUNT); + } + + void tele_out() + { + RETURN_POINT = GetMonsterProperty("origin"); + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + SetEntityOrigin(GetOwner(), Vector3(-20000, 10000, -20000)); + } + + void tele_in_barrier() + { + string RETURN_BAR = RETURN_POINT; + RETURN_BAR = "z"; + SpawnNPC("monsters/summon/ibarrier", RETURN_POINT, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 64, 2, 0, 0, 0, 1 + } + + void tele_in() + { + SetEntityOrigin(GetOwner(), RETURN_POINT); + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + RENDER_COUNT = 0; + flicker_in(); + LAST_TELE = GetGameTime(); + HealEntity(GetOwner(), 2000); + if (!(STUCK_TELE)) + { + ScheduleDelayedEvent(120.0, "do_teleport"); + } + if ((STUCK_TELE)) + { + STUCK_TELE = 0; + } + } + + void flicker_in() + { + RENDER_COUNT += 50; + if (RENDER_COUNT >= 255) + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + if (!(RENDER_COUNT < 255)) return; + ScheduleDelayedEvent(0.1, "flicker_in"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_COUNT); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if ((ATTACK_PARRY)) + { + SetDamage("hit"); + SetDamage("dmg"); + } + } + + void do_throw() + { + if ((AM_UNARMED)) return; + do_throw2(); + } + + void do_throw2() + { + SetModelBody(2, 0); + AM_UNARMED = 1; + PlayAnim("critical", ANIM_SWIPE); + SpawnNPC("monsters/summon/blood_drinker", /* TODO: $relpos */ $relpos(0, 48, 48), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), MALDORA_ID, 100, 30.0 + BD_ID = GetEntityIndex(m_hLastCreated); + } + + void do_special() + { + if ((MALDORA_DEAD)) return; + string NEXT_TRY = FREQ_SPECIAL; + if ((SUSPEND_AI)) + { + float NEXT_TRY = 5.0; + int ABORT_SPECIAL = 1; + } + NEXT_TRY("do_special"); + if ((ABORT_SPECIAL)) return; + do_throw(); + } + + void sword_return() + { + SetModelBody(2, 8); + AM_UNARMED = 0; + } + + void do_nadda() + { + } + + void OnDeath(CBaseEntity@ attacker) override + { + UseTrigger("sorc_defeat"); + } + + void check_for_lminion() + { + string CUR_NME = GetToken(T_BOX, i, ";"); + string CUR_NAME = GetEntityName(CUR_NME); + if (!((CUR_NAME).findFirst("Lightning") >= 0)) return; + MINION_TO_ZAP = CUR_NME; + } + + void zap_minion() + { + SayText("Maldora! Your minions are pathetic!"); + EmitSound(GetOwner(), 0, "weather/lightning.wav", 10); + Effect("beam", "ents", "lgtning.spr", 100, GetOwner(), 1, param1, 0, Vector3(255, 255, 0), 255, 30, 3.0); + CallExternal(param1, "npc_suicide"); + } + + void game_dynamically_created() + { + MALDORA_ID = param1; + SetMoveDest(MALDORA_ID); + ScheduleDelayedEvent(0.1, "cycle_up"); + } + + void maldora_final_died() + { + npcatk_suspend_ai(); + MALDORA_DEAD = 1; + SetMenuAutoOpen(1); + if ((IsEntityAlive(BD_ID))) + { + DeleteEntity(BD_ID); + } + sword_return(); + CatchSpeech("say_hi", "hail"); + } + + void game_menu_getoptions() + { + if (!(MALDORA_DEAD)) return; + if ((GAVE_SWORD)) return; + string reg.mitem.title = "Demand Reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_sword"; + } + + void say_hi() + { + SetMoveDest(GetEntityIndex("ent_lastspoke")); + SayText(I + " got something you want , human?"); + OpenMenu(GetEntityIndex("ent_lastspoke")); + } + + void say_sword() + { + if ((GAVE_SWORD)) return; + TALK_TARGET = param1; + SetMoveDest(TALK_TARGET); + SetRoam(false); + if (!(MALDORA_DEAD)) return; + SayText("Since you were the first to have the guts to ask , here you are , as promised."); + SetModelBody(2, 0); + ScheduleDelayedEvent(4.0, "say_sword2"); + GAVE_SWORD = 1; + // TODO: offer PARAM1 swords_blood_drinker + } + + void say_sword2() + { + SetMoveDest(TALK_TARGET); + SayText("Worry not , " + I + "have a spare back at the palace... " + A + " couple spares , actually."); + ScheduleDelayedEvent(4.0, "say_sword3"); + } + + void say_sword3() + { + SetMoveDest(TALK_TARGET); + SayText("If you ever dare to step foot within the walls of the palace , be sure to find me."); + ScheduleDelayedEvent(4.0, "say_sword4"); + } + + void say_sword4() + { + SetMoveDest(TALK_TARGET); + SayText("You maybe lowly human s, but you ve proven yourself true warriors all. Our doors are always open to true warriors."); + ScheduleDelayedEvent(4.0, "say_sword4b"); + } + + void say_sword4b() + { + SetMoveDest(TALK_TARGET); + SayText("...but when you do visit us , be sure to show me that sword. All you human s look alike to me."); + ScheduleDelayedEvent(4.0, "say_sword5"); + } + + void say_sword5() + { + SetMoveDest(TALK_TARGET); + SayText("That having been said , " + I + "must leave before this citidel comes crashing down - " + I + " suggest you do the same."); + PlayAnim("critical", "warcry"); + ScheduleDelayedEvent(3.0, "final_tele_out"); + } + + void final_tele_out() + { + SetMoveDest(TALK_TARGET); + SayText("Sorry " + I + " can t take you with me..."); + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + SpawnNPC("monsters/summon/ibarrier", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 64, 2, 0, 0, 0, 1 + ScheduleDelayedEvent(0.1, "fade_away"); + } + + void fade_away() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_guard.as b/scripts/angelscript/monsters/sorc_guard.as new file mode 100644 index 00000000..6d8a7049 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_guard.as @@ -0,0 +1,123 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/sorc_base.as" + +namespace MS +{ + +class SorcGuard : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + float ATTACK_ACCURACY; + int DID_LEAPSTUN; + int DMG_SWORD; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FLINCH_CHANCE; + float FREQ_LUNGE; + int LEAPING; + string LEAP_END; + string LEAP_TARGET; + int LUNGE_DELAY; + int LUNGE_RANGE; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int ORC_JUMPER; + + SorcGuard() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 30); + NPC_GIVE_EXP = 250; + ANIM_ATTACK1 = "swordswing1_L"; + ANIM_ATTACK2 = "battleaxe_swing1_L"; + FLINCH_CHANCE = 0.25; + ANIM_ATTACK = ANIM_ATTACK1; + ATTACK_ACCURACY = 0.7; + DMG_SWORD = RandomInt(30, 150); + ORC_JUMPER = 1; + FREQ_LUNGE = 10.0; + LUNGE_RANGE = 256; + } + + void orc_spawn() + { + SetName("Shadahar Guard"); + SetModel("monsters/sorc.mdl"); + SetHealth(1000); + SetDamageResistance("all", 0.7); + SetStat("parry", 110); + SetRace("orc"); + SetWidth(32); + SetHeight(96); + SetModelBody(0, 2); + SetModelBody(1, 0); + SetModelBody(2, 6); + } + + void swing_axe() + { + baseorc_yell(); + npcatk_dodamage(m_hLastSeen, ATTACK_HITRANGE, DMG_SWORD, ATTACK_ACCURACY); + } + + void npc_targetsighted() + { + if ((I_R_FROZEN)) return; + if ((LUNGE_DELAY)) return; + if (!(GetEntityRange(m_hAttackTarget) < LUNGE_RANGE)) return; + LUNGE_DELAY = 1; + FREQ_LUNGE("reset_lunge_delay"); + leap_at(m_hAttackTarget); + } + + void reset_lunge_delay() + { + LUNGE_DELAY = 0; + } + + void leap_at() + { + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + LEAP_TARGET = param1; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_at2"); + DID_LEAPSTUN = 0; + LEAPING = 1; + LEAP_END = GetGameTime(); + LEAP_END += 1; + leap_scan(); + } + + void leap_scan() + { + if (!(GetGameTime() < LEAP_END)) return; + ScheduleDelayedEvent(0.1, "leap_scan"); + if (!(GetEntityRange(LEAP_TARGET) < ATTACK_RANGE)) return; + AddVelocity(LEAP_TARGET, /* TODO: $relvel */ $relvel(0, 120, 105)); + if ((DID_LEAPSTUN)) return; + DID_LEAPSTUN = 1; + ApplyEffect(LEAP_TARGET, "effects/debuff_stun", 2, GetEntityIndex(GetOwner())); + } + + void leap_at2() + { + // PlayRandomSound from: "voices/orc/hit.wav", "voices/orc/hit2.wav", "voices/orc/hit3.wav" + array sounds = {"voices/orc/hit.wav", "voices/orc/hit2.wav", "voices/orc/hit3.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_ATTACK2); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 350, 120)); + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_juggernaut.as b/scripts/angelscript/monsters/sorc_juggernaut.as new file mode 100644 index 00000000..3222c043 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_juggernaut.as @@ -0,0 +1,193 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/sorc_base.as" + +namespace MS +{ + +class SorcJuggernaut : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + float AS_MAX_ATTACK_TIME; + float ATTACK_ACCURACY; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DID_LEAPSTUN; + float DMG_KICK; + int DMG_SWORD; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FLINCH_CHANCE; + float FREQ_LUNGE; + string LAST_SWORD_HIT; + int LEAPING; + string LEAP_END; + string LEAP_TARGET; + int LUNGE_DELAY; + int LUNGE_RANGE; + string MY_SCRIPT_IDX; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + float SORC_LRESIST; + float SORC_PRESIST; + string SOUND_SWINGHIT; + string SOUND_SWINGMISS; + string SOUND_UPSWING; + string SOUND_WALK1; + string SOUND_WALK2; + + SorcJuggernaut() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(150, 220); + NPC_GIVE_EXP = 1750; + ANIM_ATTACK1 = "battleaxe_swing1_L"; + ANIM_ATTACK2 = "swordswing1_L"; + FLINCH_CHANCE = 0.25; + DMG_KICK = Random(25, 100); + ANIM_ATTACK = ANIM_ATTACK1; + ATTACK_ACCURACY = 0.7; + DMG_SWORD = RandomInt(400, 800); + FREQ_LUNGE = 10.0; + LUNGE_RANGE = 256; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + SOUND_UPSWING = "monsters/orc/attack1.wav"; + SOUND_SWINGHIT = "monsters/orc/pain.wav"; + SOUND_SWINGMISS = "debris/bustmetal2.wav"; + AS_MAX_ATTACK_TIME = 10.0; + SORC_LRESIST = 0.6; + SORC_PRESIST = 1.2; + } + + void orc_spawn() + { + SetName("Shadahar Juggernaut"); + SetModel("monsters/sorc_huge.mdl"); + SetHealth(5000); + SetDamageResistance("all", 0.5); + SetStat("parry", 110); + SetWidth(48); + SetHeight(128); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 5); + } + + void OnPostSpawn() override + { + ATTACK_MOVERANGE = 96; + ATTACK_RANGE = 128; + ATTACK_HITRANGE = 200; + } + + void swing_axe() + { + baseorc_yell(); + npcatk_dodamage(m_hLastSeen, ATTACK_HITRANGE, DMG_SWORD, ATTACK_ACCURACY, "slash"); + AddVelocity(m_hLastSeen, /* TODO: $relvel */ $relvel(-120, 120, 150)); + if (!(RandomInt(1, 10) == 1)) return; + ANIM_ATTACK = "kick"; + EmitSound(GetOwner(), 2, SOUND_SWINGMISS, 10); + } + + void npc_targetsighted() + { + if ((I_R_FROZEN)) return; + if ((LUNGE_DELAY)) return; + if (!(GetEntityRange(m_hAttackTarget) < LUNGE_RANGE)) return; + LUNGE_DELAY = 1; + FREQ_LUNGE("reset_lunge_delay"); + leap_at(m_hAttackTarget); + } + + void reset_lunge_delay() + { + LUNGE_DELAY = 0; + } + + void leap_at() + { + ClientEvent("new", "all", "effects/sfx_motionblur_perm", GetEntityIndex(GetOwner()), 0); + MY_SCRIPT_IDX = "game.script.last_sent_id"; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + LEAP_TARGET = param1; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_at2"); + DID_LEAPSTUN = 0; + LEAPING = 1; + LEAP_END = GetGameTime(); + LEAP_END += 1; + leap_scan(); + ScheduleDelayedEvent(1.0, "leap_end"); + } + + void leap_end() + { + ClientEvent("remove", "all", MY_SCRIPT_IDX); + } + + void leap_scan() + { + if (!(GetGameTime() < LEAP_END)) return; + ScheduleDelayedEvent(0.1, "leap_scan"); + LogDebug("temp leap_scan GetEntityName(LEAP_TARGET) GetEntityRange(LEAP_TARGET)"); + if (!(GetEntityRange(LEAP_TARGET) < ATTACK_RANGE)) return; + AddVelocity(LEAP_TARGET, /* TODO: $relvel */ $relvel(0, 120, 105)); + if ((DID_LEAPSTUN)) return; + DID_LEAPSTUN = 1; + ApplyEffect(LEAP_TARGET, "effects/debuff_stun", 2, GetEntityIndex(GetOwner())); + } + + void leap_at2() + { + // PlayRandomSound from: "voices/orc/hit.wav", "voices/orc/hit2.wav", "voices/orc/hit3.wav" + array sounds = {"voices/orc/hit.wav", "voices/orc/hit2.wav", "voices/orc/hit3.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_ATTACK2); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 350, 120)); + } + + void run_step1() + { + EmitSound(GetOwner(), 2, SOUND_WALK2, 8); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 128, 10, 1, 256); + } + + void run_step2() + { + EmitSound(GetOwner(), 2, SOUND_WALK1, 8); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 128, 10, 1, 256); + } + + void swing_start() + { + EmitSound(GetOwner(), 1, SOUND_UPSWING, 10); + } + + void kick_land() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + LAST_SWORD_HIT = GetGameTime(); + } + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, ATTACK_ACCURACY, "blunt"); + ANIM_ATTACK = "battleaxe_swing1_L"; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", Random(5, 10), GetEntityIndex(GetOwner())); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(-100, 200, 150)); + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_recruit.as b/scripts/angelscript/monsters/sorc_recruit.as new file mode 100644 index 00000000..c5a8b9c9 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_recruit.as @@ -0,0 +1,125 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/sorc_base.as" + +namespace MS +{ + +class SorcRecruit : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + string AS_ATTACKING; + float ATTACK_ACCURACY; + int DID_LEAPSTUN; + int DMG_SWORD; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FLINCH_CHANCE; + float FREQ_LUNGE; + int LEAPING; + string LEAP_END; + string LEAP_TARGET; + int LUNGE_DELAY; + int LUNGE_RANGE; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int ORC_JUMPER; + + SorcRecruit() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 30); + NPC_GIVE_EXP = 100; + ANIM_ATTACK1 = "swordswing1_L"; + ANIM_ATTACK2 = "battleaxe_swing1_L"; + FLINCH_CHANCE = 0.25; + ANIM_ATTACK = ANIM_ATTACK1; + ATTACK_ACCURACY = 0.7; + DMG_SWORD = RandomInt(30, 70); + ORC_JUMPER = 1; + FREQ_LUNGE = 10.0; + LUNGE_RANGE = 256; + } + + void orc_spawn() + { + SetName("Shadahar Novice"); + SetModel("monsters/sorc.mdl"); + SetHealth(500); + SetDamageResistance("all", 0.7); + SetStat("parry", 110); + SetWidth(32); + SetHeight(96); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetModelBody(2, 6); + } + + void swing_axe() + { + baseorc_yell(); + npcatk_dodamage(m_hLastSeen, ATTACK_HITRANGE, DMG_SWORD, ATTACK_ACCURACY); + } + + void npc_targetsighted() + { + if ((I_R_FROZEN)) return; + if ((LUNGE_DELAY)) return; + if (!(GetEntityRange(m_hAttackTarget) < LUNGE_RANGE)) return; + LUNGE_DELAY = 1; + FREQ_LUNGE("reset_lunge_delay"); + leap_at(m_hAttackTarget); + } + + void reset_lunge_delay() + { + LUNGE_DELAY = 0; + } + + void leap_at() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 3.0; + NPC_FORCED_MOVEDEST = 1; + LEAP_TARGET = param1; + npcatk_suspend_ai(1.0); + SetMoveDest(LEAP_TARGET); + ScheduleDelayedEvent(0.1, "leap_at2"); + DID_LEAPSTUN = 0; + LEAPING = 1; + LEAP_END = GetGameTime(); + LEAP_END += 1; + leap_scan(); + } + + void leap_scan() + { + if (!(GetGameTime() < LEAP_END)) return; + ScheduleDelayedEvent(0.1, "leap_scan"); + if (!(GetEntityRange(LEAP_TARGET) < ATTACK_RANGE)) return; + AddVelocity(LEAP_TARGET, /* TODO: $relvel */ $relvel(0, 120, 105)); + if ((DID_LEAPSTUN)) return; + DID_LEAPSTUN = 1; + ApplyEffect(LEAP_TARGET, "effects/debuff_stun", 2, GetEntityIndex(GetOwner())); + } + + void leap_at2() + { + // PlayRandomSound from: "voices/orc/hit.wav", "voices/orc/hit2.wav", "voices/orc/hit3.wav" + array sounds = {"voices/orc/hit.wav", "voices/orc/hit2.wav", "voices/orc/hit3.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_ATTACK2); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 350, 120)); + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_shaman_elder.as b/scripts/angelscript/monsters/sorc_shaman_elder.as new file mode 100644 index 00000000..ac07036b --- /dev/null +++ b/scripts/angelscript/monsters/sorc_shaman_elder.as @@ -0,0 +1,390 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" +#include "monsters/base_lightning_shield.as" + +namespace MS +{ + +class SorcShamanElder : CGameScript +{ + int AM_TURRET; + string ANIM_ATTACK; + string ANIM_BEAM; + string ANIM_FIRE; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_RUN; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WARCRY; + string AS_ATTACKING; + int ATTACK_ACCURACY; + int ATTACK_CONE_OF_FIRE; + string ATTACK_MOVERANGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int BALL_DMG; + int BALL_SIZE; + string BALL_TYPE; + int BEAM_COUNT; + string BEAM_ON; + string BEAM_TARGET; + string DEATH_SCRIPT; + int DID_WARCRY; + float DMG_PUSH_BEAM; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FINGER_ADJ; + float FLINCH_CHANCE; + float FREQ_REPULSE; + int FROST_BOLT_DAMAGE; + int FROST_BOLT_DELAY; + float FROST_BOLT_FREQ; + int FROST_STRIKE_DAMAGE; + string LELM_SUMMON_SCRIPT; + int LHOR_SUMMON_FREQ; + string LHOR_SUMMON_SCRIPT; + int MELE_HITRANGE; + int MELE_RANGE; + string MISS_COUNT; + int MOVE_RANGE; + string NEXT_SUMMON; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + string PROJ_SCRIPT; + int REPULSE_DELAY; + int SORC_MAX_SUMMONS; + string SOUND_BEAM; + string SOUND_DEATH_SHOOT; + string SOUND_LHOR; + string SOUND_MELEHIT; + string SOUND_MELEMISS; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_THUNDER; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + int SWIPE_DAMAGE; + int SWIPE_SOUNDS; + string TORNADO_MODEL; + + SorcShamanElder() + { + FINGER_ADJ = "$relpos($vec(0,MY_YAW,0),$vec(0,30,54))"; + SOUND_BEAM = "weather/Storm_exclamation.wav"; + ANIM_BEAM = "battleaxe_swing1_L"; + FREQ_REPULSE = Random(15, 20); + DMG_PUSH_BEAM = Random(10, 20); + PROJ_SCRIPT = "proj_lightning_ball"; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 30); + NPC_GIVE_EXP = 800; + ANIM_ATTACK = "swordswing1_L"; + FLINCH_CHANCE = 0.45; + MOVE_RANGE = 256; + ATTACK_RANGE = 2000; + ATTACK_SPEED = 300; + ATTACK_CONE_OF_FIRE = 2; + MELE_RANGE = 96; + MELE_HITRANGE = 128; + ATTACK_ACCURACY = 80; + ANIM_SWIPE = "swordswing1_L"; + ANIM_FIRE = "swordswing1_L"; + ANIM_WARCRY = "warcry"; + ANIM_KICK = "kick"; + ANIM_IDLE = "idle1"; + SWIPE_DAMAGE = "$rand(25,65)"; + SOUND_MELEMISS = "zombie/claw_miss1.wav"; + SOUND_MELEHIT = "zombie/claw_strike3.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + SOUND_DEATH_SHOOT = "magic/spawn.wav"; + SOUND_WARCRY1 = "monsters/orc/attack1.wav"; + SOUND_WARCRY2 = "monsters/orc/attack3.wav"; + FROST_BOLT_DAMAGE = "$rand(40,75)"; + FROST_STRIKE_DAMAGE = "$rand(30,60)"; + FROST_BOLT_FREQ = 1.5; + DEATH_SCRIPT = "monsters/summon/summon_lightning_storm"; + BALL_SIZE = 5; + BALL_DMG = 100; + BALL_TYPE = "lightning"; + SORC_MAX_SUMMONS = 2; + LELM_SUMMON_SCRIPT = "monsters/elemental_air2"; + SOUND_THUNDER = "magic/bolt_end.wav"; + TORNADO_MODEL = "weapons/magic/tornado.mdl"; + SOUND_LHOR = "monsters/magic/elecidlepop.wav"; + LHOR_SUMMON_SCRIPT = "monsters/horror_lightning"; + if (StringToLower(GetMapName()) == "sorc_villa") + { + LHOR_SUMMON_SCRIPT = "monsters/horror_lightning2"; + } + LHOR_SUMMON_FREQ = 15; + } + + void game_precache() + { + Precache("monsters/horror_lightning"); + Precache("monsters/elemental_air2"); + Precache("monsters/summon/tornado"); + Precache(SOUND_THUNDER); + Precache(TORNADO_MODEL); + Precache("monsters/summon/lightning_ball_guided"); + Precache("c-tele1.spr"); + } + + void orc_spawn() + { + SetHealth(1750); + SetName("Elder Shadahar Shaman"); + SetHearingSensitivity(8); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("poison", 2.0); + SetDamageResistance("acid", 2.0); + SetStat("spellcasting", 30); + SetModel("monsters/sorc.mdl"); + SetModelBody(1, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + } + + void npc_selectattack() + { + string NME_RANGE = GetEntityRange(m_hLastSeen); + if ((FROST_BOLT_DELAY)) + { + if (NME_RANGE > MELE_HITRANGE) + { + ANIM_ATTACK = ANIM_FIRE; + } + } + if (!(FROST_BOLT_DELAY)) + { + ANIM_ATTACK = ANIM_FIRE; + } + if (!(NME_RANGE < MELE_HITRANGE)) return; + if ((REPULSE_DELAY)) return; + if ((GetEntityProperty(m_hAttackTarget, "nopush"))) + { + int NO_BEAM = 1; + } + if (/* TODO: $get_takedmg */ $get_takedmg(m_hAttackTarget, "lightning") == 0) + { + NO_BEAM += 1; + } + REPULSE_DELAY = 1; + FREQ_REPULSE("reset_repulse_delay"); + if (!(NO_BEAM < 2)) return; + SetMoveAnim(ANIM_BEAM); + SetIdleAnim(ANIM_BEAM); + PlayAnim("critical", ANIM_BEAM); + BEAM_TARGET = m_hAttackTarget; + AS_ATTACKING = GetGameTime(); + BEAM_COUNT = 0; + npcatk_suspend_ai(); + beam_push(); + } + + void reset_repulse_delay() + { + REPULSE_DELAY = 0; + } + + void swing_sword() + { + if ((CanSee(m_hAttackTarget, MELE_RANGE))) + { + ANIM_ATTACK = ANIM_SWIPE; + swipe_attack(GetEntityIndex(m_hAttackTarget)); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ANIM_ATTACK = ANIM_FIRE; + throw_frostbolt(); + } + + void throw_frostbolt() + { + if (!(false)) return; + npcatk_faceattacker(m_hAttackTarget); + FROST_BOLT_FREQ("reset_frostbolt"); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + string FINAL_DAMAGE = FROST_BOLT_DAMAGE; + if (EXT_DAMAGE_ADJUSTMENT != "EXT_DAMAGE_ADJUSTMENT") + { + FINAL_DAMAGE += EXT_DAMAGE_ADJUSTMENT; + } + TossProjectile(PROJ_SCRIPT, /* TODO: $relpos */ $relpos(0, 48, 18), m_hAttackTarget, ATTACK_SPEED, FINAL_DAMAGE, ATTACK_CONE_OF_FIRE, "none"); + FROST_BOLT_DELAY = 1; + MISS_COUNT += 1; + if (MISS_COUNT >= 5) + { + chicken_run(1.0); + MISS_COUNT = 0; + } + } + + void reset_frostbolt() + { + ANIM_ATTACK = ANIM_FIRE; + DID_WARCRY = 0; + FROST_BOLT_DELAY = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetSolid("none"); + EmitSound(GetOwner(), 0, SOUND_DEATH_SHOOT, 10); + string STORM_POS = GetMonsterProperty("origin"); + STORM_POS = "z"; + SpawnNPC(DEATH_SCRIPT, STORM_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), 40.0, 15.0 + string SPAWN_POS = GetEntityOrigin(GetOwner()); + SPAWN_POS += "z"; + if ((NO_SUMMON)) return; + SpawnNPC(LELM_SUMMON_SCRIPT, SPAWN_POS, ScriptMode::Legacy); + } + + void swipe_attack() + { + SWIPE_SOUNDS = 1; + string FINAL_DAMAGE = SWIPE_DAMAGE; + if (EXT_DAMAGE_ADJUSTMENT != "EXT_DAMAGE_ADJUSTMENT") + { + FINAL_DAMAGE += EXT_DAMAGE_ADJUSTMENT; + } + if (!(GetEntityRange(m_hLastStruckByMe) <= MELE_HITRANGE)) return; + npcatk_dodamage(param1, MELE_HITRANGE, FINAL_DAMAGE, ATTACK_ACCURACY); + if (!(RandomInt(1, 5) == 1)) return; + ApplyEffect(param1, "effects/dot_lightning", RandomInt(5, 10), GetOwner(), FROST_STRIKE_DAMAGE); + } + + void game_dodamage() + { + if ((param1)) + { + MISS_COUNT = 0; + } + if (!(SWIPE_SOUNDS)) return; + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_MELEMISS, 10); + } + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_MELEHIT, 10); + } + SWIPE_SOUNDS = 0; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (!(GetEntityRange(m_hLastStruck) < MELE_RANGE)) return; + npcatk_settarget(GetEntityIndex(m_hLastStruck)); + } + + void beam_push() + { + BEAM_COUNT += 1; + if (BEAM_COUNT == 30) + { + npcatk_resume_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + BEAM_ON = 0; + } + if (!(BEAM_COUNT < 30)) return; + ScheduleDelayedEvent(0.1, "beam_push"); + if (!(IsEntityAlive(BEAM_TARGET))) + { + BEAM_COUNT = 29; + } + if (!(IsEntityAlive(BEAM_TARGET))) return; + npcatk_faceattacker(BEAM_TARGET); + string BEAM_START = GetMonsterProperty("origin"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + BEAM_START += FINGER_ADJ; + string BEAM_END = GetEntityOrigin(BEAM_TARGET); + string BEAM_TRACE = TraceLine(BEAM_START, BEAM_END); + if (!(BEAM_TRACE == BEAM_END)) return; + EmitSound(GetOwner(), 0, SOUND_BEAM, 10); + Effect("beam", "end", "lgtning.spr", 30, BEAM_START, BEAM_TARGET, 0, Vector3(200, 255, 50), 200, 30, 1.0); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + MY_YAW += BEAM_COUNT; + if (MY_YAW > 359) + { + MY_YAW -= 359; + } + string VEL_SET = /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(500, 1000, 30)); + SetVelocity(BEAM_TARGET, VEL_SET); + DoDamage(BEAM_TARGET, "direct", DMG_PUSH_BEAM, 1.0, GetEntityIndex(GetOwner())); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(false)) + { + ATTACK_MOVERANGE = GetMonsterProperty("moveprox"); + } + if ((false)) + { + ATTACK_MOVERANGE = ATTACK_RANGE; + } + if (!(IsEntityAlive(GetOwner()))) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(GetGameTime() > NEXT_SUMMON)) return; + if (!(LHOR_NSUMMONS < SORC_MAX_SUMMONS)) return; + NEXT_SUMMON = GetGameTime(); + NEXT_SUMMON += LHOR_SUMMON_FREQ; + summon_lhor(); + } + + void summon_lhor() + { + if ((NO_SUMMON)) return; + string SUMMON_POS = GetEntityOrigin(GetOwner()); + SUMMON_POS += "z"; + SpawnNPC(LHOR_SUMMON_SCRIPT, SUMMON_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), m_hAttackTarget + LHOR_NSUMMONS += 1; + } + + void horror_died() + { + LHOR_NSUMMONS -= 1; + NEXT_SUMMON = GetGameTime(); + NEXT_SUMMON += LHOR_SUMMON_FREQ; + } + + void set_turret() + { + AM_TURRET = 1; + SetMoveAnim(ANIM_IDLE); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + NO_STUCK_CHECKS = 1; + SetRoam(false); + } + + void OnPostSpawn() override + { + if (!(AM_TURRET)) return; + SetMoveAnim(ANIM_IDLE); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + NO_STUCK_CHECKS = 1; + SetRoam(false); + } + + void set_sorcpal_shaman1() + { + SetSayTextRange(2048); + SayText("Fear the thunder! Feel the lightning!"); + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_shaman_lesser.as b/scripts/angelscript/monsters/sorc_shaman_lesser.as new file mode 100644 index 00000000..8524a5f4 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_shaman_lesser.as @@ -0,0 +1,306 @@ +#pragma context server + +#include "monsters/orc_base_ranged.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class SorcShamanLesser : CGameScript +{ + int AM_TURRET; + string ANIM_ATTACK; + string ANIM_BEAM; + string ANIM_FIRE; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_RUN; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WARCRY; + string AS_ATTACKING; + int ATTACK_ACCURACY; + int ATTACK_CONE_OF_FIRE; + string ATTACK_MOVERANGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int BALL_DMG; + int BALL_SIZE; + string BALL_TYPE; + int BEAM_COUNT; + string BEAM_ON; + string BEAM_TARGET; + string DEATH_SCRIPT; + int DID_WARCRY; + float DMG_PUSH_BEAM; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FINGER_ADJ; + float FLINCH_CHANCE; + float FREQ_REPULSE; + int FROST_BOLT_DAMAGE; + int FROST_BOLT_DELAY; + float FROST_BOLT_FREQ; + int FROST_STRIKE_DAMAGE; + int MELE_HITRANGE; + int MELE_RANGE; + int MOVE_RANGE; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + int REPULSE_DELAY; + string SOUND_BEAM; + string SOUND_DEATH_SHOOT; + string SOUND_MELEHIT; + string SOUND_MELEMISS; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + int SWIPE_DAMAGE; + int SWIPE_SOUNDS; + + SorcShamanLesser() + { + FINGER_ADJ = "$relpos($vec(0,MY_YAW,0),$vec(0,30,54))"; + SOUND_BEAM = "weather/Storm_exclamation.wav"; + ANIM_BEAM = "battleaxe_swing1_L"; + FREQ_REPULSE = Random(15, 20); + DMG_PUSH_BEAM = Random(2, 6); + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(15, 30); + NPC_GIVE_EXP = 220; + ANIM_ATTACK = "swordswing1_L"; + FLINCH_CHANCE = 0.45; + MOVE_RANGE = 256; + ATTACK_RANGE = 2000; + ATTACK_SPEED = 300; + ATTACK_CONE_OF_FIRE = 2; + MELE_RANGE = 96; + MELE_HITRANGE = 128; + ATTACK_ACCURACY = 80; + ANIM_SWIPE = "swordswing1_L"; + ANIM_FIRE = "swordswing1_L"; + ANIM_WARCRY = "warcry"; + ANIM_KICK = "kick"; + ANIM_IDLE = "idle1"; + SWIPE_DAMAGE = "$rand(25,65)"; + SOUND_MELEMISS = "zombie/claw_miss1.wav"; + SOUND_MELEHIT = "zombie/claw_strike3.wav"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + SOUND_DEATH_SHOOT = "magic/spawn.wav"; + SOUND_WARCRY1 = "monsters/orc/attack1.wav"; + SOUND_WARCRY2 = "monsters/orc/attack3.wav"; + FROST_BOLT_DAMAGE = "$rand(25,60)"; + FROST_STRIKE_DAMAGE = "$rand(10,20)"; + FROST_BOLT_FREQ = 1.5; + DEATH_SCRIPT = "monsters/summon/summon_lightning_storm"; + BALL_SIZE = 3; + BALL_DMG = 10; + BALL_TYPE = "lightning"; + } + + void orc_spawn() + { + SetHealth(750); + SetName("Shadahar Shaman Initiate"); + SetHearingSensitivity(8); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("poison", 2.0); + SetDamageResistance("acid", 2.0); + SetStat("spellcasting", 30); + SetModel("monsters/sorc.mdl"); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + } + + void npc_selectattack() + { + string NME_RANGE = GetEntityRange(m_hLastSeen); + if ((FROST_BOLT_DELAY)) + { + if (NME_RANGE > MELE_HITRANGE) + { + ANIM_ATTACK = ANIM_FIRE; + } + } + if (!(FROST_BOLT_DELAY)) + { + ANIM_ATTACK = ANIM_FIRE; + } + if (!(NME_RANGE < MELE_HITRANGE)) return; + if ((REPULSE_DELAY)) return; + REPULSE_DELAY = 1; + FREQ_REPULSE("reset_repulse_delay"); + SetMoveAnim(ANIM_BEAM); + SetIdleAnim(ANIM_BEAM); + PlayAnim("critical", ANIM_BEAM); + BEAM_TARGET = m_hAttackTarget; + AS_ATTACKING = GetGameTime(); + BEAM_COUNT = 0; + npcatk_suspend_ai(); + beam_push(); + } + + void reset_repulse_delay() + { + REPULSE_DELAY = 0; + } + + void swing_sword() + { + if ((CanSee(m_hAttackTarget, MELE_RANGE))) + { + ANIM_ATTACK = ANIM_SWIPE; + swipe_attack(GetEntityIndex(m_hAttackTarget)); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ANIM_ATTACK = ANIM_FIRE; + throw_frostbolt(); + } + + void throw_frostbolt() + { + if (!(false)) return; + npcatk_faceattacker(m_hAttackTarget); + FROST_BOLT_FREQ("reset_frostbolt"); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + string FINAL_DAMAGE = FROST_BOLT_DAMAGE; + if (EXT_DAMAGE_ADJUSTMENT != "EXT_DAMAGE_ADJUSTMENT") + { + FINAL_DAMAGE += EXT_DAMAGE_ADJUSTMENT; + } + TossProjectile("proj_lightning_ball", /* TODO: $relpos */ $relpos(0, 48, 18), m_hAttackTarget, ATTACK_SPEED, FINAL_DAMAGE, ATTACK_CONE_OF_FIRE, "none"); + FROST_BOLT_DELAY = 1; + } + + void reset_frostbolt() + { + ANIM_ATTACK = ANIM_FIRE; + DID_WARCRY = 0; + FROST_BOLT_DELAY = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetSolid("none"); + string BALL_DEST = /* TODO: $relpos */ $relpos(0, 0, 2000); + EmitSound(GetOwner(), 0, SOUND_DEATH_SHOOT, 10); + string STORM_POS = GetMonsterProperty("origin"); + STORM_POS = "z"; + SpawnNPC(DEATH_SCRIPT, STORM_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), 40.0, 15.0 + } + + void swipe_attack() + { + SWIPE_SOUNDS = 1; + string FINAL_DAMAGE = SWIPE_DAMAGE; + if (EXT_DAMAGE_ADJUSTMENT != "EXT_DAMAGE_ADJUSTMENT") + { + FINAL_DAMAGE += EXT_DAMAGE_ADJUSTMENT; + } + if (!(GetEntityRange(m_hLastStruckByMe) <= MELE_HITRANGE)) return; + npcatk_dodamage(param1, MELE_HITRANGE, FINAL_DAMAGE, ATTACK_ACCURACY); + if (!(RandomInt(1, 5) == 1)) return; + ApplyEffect(param1, "effects/dot_lightning", RandomInt(5, 10), GetOwner(), FROST_STRIKE_DAMAGE); + } + + void game_dodamage() + { + if (!(SWIPE_SOUNDS)) return; + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_MELEMISS, 10); + } + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_MELEHIT, 10); + } + SWIPE_SOUNDS = 0; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (!(GetEntityRange(m_hLastStruck) < MELE_RANGE)) return; + npcatk_settarget(GetEntityIndex(m_hLastStruck)); + } + + void beam_push() + { + BEAM_COUNT += 1; + if (BEAM_COUNT == 30) + { + npcatk_resume_ai(); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + BEAM_ON = 0; + } + if (!(BEAM_COUNT < 30)) return; + ScheduleDelayedEvent(0.1, "beam_push"); + if (!(IsEntityAlive(BEAM_TARGET))) + { + BEAM_COUNT = 29; + } + if (!(IsEntityAlive(BEAM_TARGET))) return; + npcatk_faceattacker(BEAM_TARGET); + string BEAM_START = GetMonsterProperty("origin"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + BEAM_START += FINGER_ADJ; + string BEAM_END = GetEntityOrigin(BEAM_TARGET); + string BEAM_TRACE = TraceLine(BEAM_START, BEAM_END); + if (!(BEAM_TRACE == BEAM_END)) return; + EmitSound(GetOwner(), 0, SOUND_BEAM, 10); + Effect("beam", "end", "lgtning.spr", 30, BEAM_START, BEAM_TARGET, 0, Vector3(200, 255, 50), 200, 30, 1.0); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + MY_YAW += BEAM_COUNT; + if (MY_YAW > 359) + { + MY_YAW -= 359; + } + string VEL_SET = /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(500, 1000, 30)); + SetVelocity(BEAM_TARGET, VEL_SET); + DoDamage(BEAM_TARGET, "direct", DMG_PUSH_BEAM, 1.0, GetEntityIndex(GetOwner())); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (!(false)) + { + ATTACK_MOVERANGE = GetMonsterProperty("moveprox"); + } + if ((false)) + { + ATTACK_MOVERANGE = ATTACK_RANGE; + } + } + + void set_turret() + { + AM_TURRET = 1; + SetMoveAnim(ANIM_IDLE); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + NO_STUCK_CHECKS = 1; + SetRoam(false); + } + + void OnPostSpawn() override + { + if (!(AM_TURRET)) return; + SetMoveAnim(ANIM_IDLE); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + NO_STUCK_CHECKS = 1; + SetRoam(false); + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_telepoint1.as b/scripts/angelscript/monsters/sorc_telepoint1.as new file mode 100644 index 00000000..f51699fe --- /dev/null +++ b/scripts/angelscript/monsters/sorc_telepoint1.as @@ -0,0 +1,55 @@ +#pragma context server + +namespace MS +{ + +class SorcTelepoint1 : CGameScript +{ + int IN_USE; + int IS_TELE; + + void OnSpawn() override + { + SetName("sorc_telepoint1"); + SetFly(true); + SetGravity(0); + SetInvincible(true); + SetRace("beloved"); + IN_USE = 0; + SetSolid("none"); + IS_TELE = 1; + SetNoPush(true); + if (!(StringToLower(GetMapName()) == "shad_palace")) return; + ScheduleDelayedEvent(2.0, "special_reg"); + } + + void special_reg() + { + if (G_RUNE_POINTS == "G_RUNE_POINTS") + { + SetGlobalVar("G_RUNE_POINTS", ""); + } + if (G_RUNE_POINTS.length() > 0) G_RUNE_POINTS += ";"; + G_RUNE_POINTS += GetEntityOrigin(GetOwner()); + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void tele_used() + { + IN_USE = 1; + ScheduleDelayedEvent(2.0, "tele_reset"); + } + + void tele_reset() + { + IN_USE = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_telepoint2.as b/scripts/angelscript/monsters/sorc_telepoint2.as new file mode 100644 index 00000000..f36a6b31 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_telepoint2.as @@ -0,0 +1,55 @@ +#pragma context server + +namespace MS +{ + +class SorcTelepoint2 : CGameScript +{ + int IN_USE; + int IS_TELE; + + void OnSpawn() override + { + SetName("sorc_telepoint2"); + SetFly(true); + SetGravity(0); + SetInvincible(true); + SetRace("beloved"); + IN_USE = 0; + SetSolid("none"); + IS_TELE = 1; + SetNoPush(true); + if (!(StringToLower(GetMapName()) == "shad_palace")) return; + ScheduleDelayedEvent(2.0, "special_reg"); + } + + void special_reg() + { + if (G_RUNE_POINTS == "G_RUNE_POINTS") + { + SetGlobalVar("G_RUNE_POINTS", ""); + } + if (G_RUNE_POINTS.length() > 0) G_RUNE_POINTS += ";"; + G_RUNE_POINTS += GetEntityOrigin(GetOwner()); + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void tele_used() + { + IN_USE = 1; + ScheduleDelayedEvent(2.0, "tele_reset"); + } + + void tele_reset() + { + IN_USE = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_telepoint3.as b/scripts/angelscript/monsters/sorc_telepoint3.as new file mode 100644 index 00000000..bb6f2d83 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_telepoint3.as @@ -0,0 +1,55 @@ +#pragma context server + +namespace MS +{ + +class SorcTelepoint3 : CGameScript +{ + int IN_USE; + int IS_TELE; + + void OnSpawn() override + { + SetName("sorc_telepoint3"); + SetFly(true); + SetGravity(0); + SetInvincible(true); + SetRace("beloved"); + IN_USE = 0; + SetSolid("none"); + IS_TELE = 1; + SetNoPush(true); + if (!(StringToLower(GetMapName()) == "shad_palace")) return; + ScheduleDelayedEvent(2.0, "special_reg"); + } + + void special_reg() + { + if (G_RUNE_POINTS == "G_RUNE_POINTS") + { + SetGlobalVar("G_RUNE_POINTS", ""); + } + if (G_RUNE_POINTS.length() > 0) G_RUNE_POINTS += ";"; + G_RUNE_POINTS += GetEntityOrigin(GetOwner()); + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void tele_used() + { + IN_USE = 1; + ScheduleDelayedEvent(2.0, "tele_reset"); + } + + void tele_reset() + { + IN_USE = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_telepoint4.as b/scripts/angelscript/monsters/sorc_telepoint4.as new file mode 100644 index 00000000..56945479 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_telepoint4.as @@ -0,0 +1,55 @@ +#pragma context server + +namespace MS +{ + +class SorcTelepoint4 : CGameScript +{ + int IN_USE; + int IS_TELE; + + void OnSpawn() override + { + SetName("sorc_telepoint4"); + SetFly(true); + SetGravity(0); + SetInvincible(true); + SetRace("beloved"); + IN_USE = 0; + SetSolid("none"); + IS_TELE = 1; + SetNoPush(true); + if (!(StringToLower(GetMapName()) == "shad_palace")) return; + ScheduleDelayedEvent(2.0, "special_reg"); + } + + void special_reg() + { + if (G_RUNE_POINTS == "G_RUNE_POINTS") + { + SetGlobalVar("G_RUNE_POINTS", ""); + } + if (G_RUNE_POINTS.length() > 0) G_RUNE_POINTS += ";"; + G_RUNE_POINTS += GetEntityOrigin(GetOwner()); + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void tele_used() + { + IN_USE = 1; + ScheduleDelayedEvent(2.0, "tele_reset"); + } + + void tele_reset() + { + IN_USE = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_warrior.as b/scripts/angelscript/monsters/sorc_warrior.as new file mode 100644 index 00000000..f6dab3de --- /dev/null +++ b/scripts/angelscript/monsters/sorc_warrior.as @@ -0,0 +1,208 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/sorc_base.as" + +namespace MS +{ + +class SorcWarrior : CGameScript +{ + string ANIM_ATTACK; + string ANIM_AXE; + string ANIM_KICK; + string ANIM_SWORD; + string AS_ATTACKING; + float ATTACK_ACCURACY; + float CHANCE_KICK; + float CHANCE_SHOCK; + int DMG_KICK; + int DMG_SWORD; + int DMG_THROW; + float DOT_SHOCK; + float DOT_THROW_SHOCK; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FLINCH_CHANCE; + float FREQ_KICK; + float FREQ_THROW; + int KICK_ATTACK; + string KICK_DELAY; + string MY_AXE; + int NPC_GIVE_EXP; + int ORC_JUMPER; + float SORC_LRESIST; + float SORC_PRESIST; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + int THROWING_AXE; + int THROW_DELAY; + + SorcWarrior() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(20, 80); + DMG_THROW = 25; + NPC_GIVE_EXP = 300; + ANIM_SWORD = "swordswing1_L"; + ANIM_AXE = "battleaxe_swing1_L"; + FLINCH_CHANCE = 0.25; + ANIM_ATTACK = "battleaxe_swing1_L"; + ATTACK_ACCURACY = 0.8; + DMG_SWORD = RandomInt(50, 200); + DOT_THROW_SHOCK = 40.0; + DOT_SHOCK = 15.0; + DMG_KICK = RandomInt(20, 50); + ANIM_KICK = "kick"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + ORC_JUMPER = 1; + CHANCE_SHOCK = 0.1; + CHANCE_KICK = 0.3; + FREQ_KICK = Random(5, 15); + FREQ_THROW = Random(7, 15); + SORC_LRESIST = 0.65; + SORC_PRESIST = 1.15; + } + + void orc_spawn() + { + SetName("Shadahar Warrior"); + SetModel("monsters/sorc.mdl"); + SetHealth(2000); + SetDamageResistance("all", 0.7); + SetStat("parry", 110); + SetWidth(32); + SetHeight(96); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 7); + } + + void swing_axe() + { + baseorc_yell(); + npcatk_dodamage(m_hLastSeen, ATTACK_HITRANGE, DMG_SWORD, ATTACK_ACCURACY, "slash"); + if (RandomInt(1, 100) < CHANCE_SHOCK) + { + if (!(THROWING_AXE)) + { + } + ApplyEffect(m_hAttackTarget, "effects/dot_lightning", 3, GetEntityIndex(GetOwner()), DOT_SHOCK); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + LogDebug("temp me glow"); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 128, 1, 1); + } + if (RandomInt(1, 100) < CHANCE_KICK) + { + if (!(THROWING_AXE)) + { + } + if (!(KICK_DELAY)) + { + } + KICK_DELAY = 1; + FREQ_KICK("reset_kick_delay"); + ANIM_ATTACK = ANIM_KICK; + } + if (!(THROWING_AXE)) return; + SetAnimFrameRate(0.00001); + } + + void reset_kick_delay() + { + KICK_DELAY = 0; + } + + void kick_land() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, ATTACK_ACCURACY, "blunt"); + KICK_ATTACK = 1; + ANIM_ATTACK = ANIM_AXE; + } + + void npc_targetsighted() + { + if ((I_R_FROZEN)) return; + if ((THROW_DELAY)) return; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_RANGE)) return; + THROW_DELAY = 1; + throw_axe(m_hAttackTarget); + } + + void reset_throw_delay() + { + THROW_DELAY = 0; + } + + void throw_axe() + { + AS_ATTACKING = GetGameTime(); + THROWING_AXE = 1; + npcatk_suspend_ai(); + SetIdleAnim(ANIM_SWORD); + SetMoveAnim(ANIM_SWORD); + SetRoam(false); + PlayAnim("once", "break"); + PlayAnim("hold", ANIM_SWORD); + ScheduleDelayedEvent(0.5, "throw_axe2"); + } + + void throw_axe2() + { + SetModelBody(2, 0); + string TARG_DEST = GetEntityOrigin(m_hAttackTarget); + TARG_DEST += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 128, 0)); + if (!(IsValidPlayer(m_hAttackTarget))) + { + TARG_DEST += "z"; + } + SpawnNPC("monsters/summon/sorc_axe", /* TODO: $relpos */ $relpos(0, 40, 5), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), TARG_DEST, DMG_THROW + MY_AXE = GetEntityIndex(m_hLastCreated); + throw_axe_loop(); + } + + void throw_axe_loop() + { + if (!(THROWING_AXE)) return; + SetMoveDest(MY_AXE); + ScheduleDelayedEvent(0.1, "throw_axe_loop"); + } + + void catch_axe() + { + npcatk_resume_ai(); + PlayAnim("once", "break"); + SetRoam(true); + THROWING_AXE = 0; + SetModelBody(2, 7); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + FREQ_THROW("reset_throw_delay"); + SetAnimFrameRate(1.0); + } + + void game_dodamage() + { + if ((KICK_ATTACK)) + { + KICK_ATTACK = 0; + if ((param1)) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 200, 30)); + int NO_ATK = RandomInt(0, 1); + ApplyEffect(param2, "effects/debuff_stun", RandomInt(2, 5), GetEntityIndex(GetOwner())); + } + if (!(THROWING_AXE)) return; + string HIT_TARG = param2; + CallExternal(MY_AXE, "do_shock", HIT_TARG, DOT_THROW_SHOCK); + } + +} + +} diff --git a/scripts/angelscript/monsters/sorc_warrior_lesser.as b/scripts/angelscript/monsters/sorc_warrior_lesser.as new file mode 100644 index 00000000..0c8455f4 --- /dev/null +++ b/scripts/angelscript/monsters/sorc_warrior_lesser.as @@ -0,0 +1,208 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/sorc_base.as" + +namespace MS +{ + +class SorcWarriorLesser : CGameScript +{ + string ANIM_ATTACK; + string ANIM_AXE; + string ANIM_KICK; + string ANIM_SWORD; + string AS_ATTACKING; + float ATTACK_ACCURACY; + float CHANCE_KICK; + float CHANCE_SHOCK; + int DMG_KICK; + int DMG_SWORD; + int DMG_THROW; + float DOT_SHOCK; + float DOT_THROW_SHOCK; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FLINCH_CHANCE; + float FREQ_KICK; + float FREQ_THROW; + int KICK_ATTACK; + string KICK_DELAY; + string MY_AXE; + int NPC_GIVE_EXP; + int ORC_JUMPER; + float SORC_LRESIST; + float SORC_PRESIST; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + int THROWING_AXE; + int THROW_DELAY; + + SorcWarriorLesser() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(20, 46); + DMG_THROW = 25; + NPC_GIVE_EXP = 175; + ANIM_SWORD = "swordswing1_L"; + ANIM_AXE = "battleaxe_swing1_L"; + FLINCH_CHANCE = 0.25; + ANIM_ATTACK = "battleaxe_swing1_L"; + ATTACK_ACCURACY = 0.8; + DMG_SWORD = RandomInt(50, 100); + DOT_THROW_SHOCK = 40.0; + DOT_SHOCK = 15.0; + DMG_KICK = RandomInt(20, 50); + ANIM_KICK = "kick"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + ORC_JUMPER = 1; + CHANCE_SHOCK = 0.1; + CHANCE_KICK = 0.3; + FREQ_KICK = Random(5, 15); + FREQ_THROW = Random(7, 15); + SORC_LRESIST = 0.85; + SORC_PRESIST = 1.1; + } + + void orc_spawn() + { + SetName("Shadahar Warrior"); + SetModel("monsters/sorc.mdl"); + SetHealth(1000); + SetDamageResistance("all", 0.7); + SetStat("parry", 110); + SetWidth(32); + SetHeight(96); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 7); + } + + void swing_axe() + { + baseorc_yell(); + npcatk_dodamage(m_hLastSeen, ATTACK_HITRANGE, DMG_SWORD, ATTACK_ACCURACY, "slash"); + if (RandomInt(1, 100) < CHANCE_SHOCK) + { + if (!(THROWING_AXE)) + { + } + ApplyEffect(m_hAttackTarget, "effects/dot_lightning", 3, GetEntityIndex(GetOwner()), DOT_SHOCK); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + LogDebug("temp me glow"); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 128, 1, 1); + } + if (RandomInt(1, 100) < CHANCE_KICK) + { + if (!(THROWING_AXE)) + { + } + if (!(KICK_DELAY)) + { + } + KICK_DELAY = 1; + FREQ_KICK("reset_kick_delay"); + ANIM_ATTACK = ANIM_KICK; + } + if (!(THROWING_AXE)) return; + SetAnimFrameRate(0.00001); + } + + void reset_kick_delay() + { + KICK_DELAY = 0; + } + + void kick_land() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, ATTACK_ACCURACY, "blunt"); + KICK_ATTACK = 1; + ANIM_ATTACK = ANIM_AXE; + } + + void npc_targetsighted() + { + if ((I_R_FROZEN)) return; + if ((THROW_DELAY)) return; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_RANGE)) return; + THROW_DELAY = 1; + throw_axe(m_hAttackTarget); + } + + void reset_throw_delay() + { + THROW_DELAY = 0; + } + + void throw_axe() + { + AS_ATTACKING = GetGameTime(); + THROWING_AXE = 1; + npcatk_suspend_ai(); + SetIdleAnim(ANIM_SWORD); + SetMoveAnim(ANIM_SWORD); + SetRoam(false); + PlayAnim("once", "break"); + PlayAnim("hold", ANIM_SWORD); + ScheduleDelayedEvent(0.5, "throw_axe2"); + } + + void throw_axe2() + { + SetModelBody(2, 0); + string TARG_DEST = GetEntityOrigin(m_hAttackTarget); + TARG_DEST += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 128, 0)); + if (!(IsValidPlayer(m_hAttackTarget))) + { + TARG_DEST += "z"; + } + SpawnNPC("monsters/summon/sorc_axe", /* TODO: $relpos */ $relpos(0, 40, 5), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), TARG_DEST, DMG_THROW + MY_AXE = GetEntityIndex(m_hLastCreated); + throw_axe_loop(); + } + + void throw_axe_loop() + { + if (!(THROWING_AXE)) return; + SetMoveDest(MY_AXE); + ScheduleDelayedEvent(0.1, "throw_axe_loop"); + } + + void catch_axe() + { + npcatk_resume_ai(); + PlayAnim("once", "break"); + SetRoam(true); + THROWING_AXE = 0; + SetModelBody(2, 7); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + FREQ_THROW("reset_throw_delay"); + SetAnimFrameRate(1.0); + } + + void game_dodamage() + { + if ((KICK_ATTACK)) + { + KICK_ATTACK = 0; + if ((param1)) + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 200, 30)); + int NO_ATK = RandomInt(0, 1); + ApplyEffect(param2, "effects/debuff_stun", RandomInt(2, 5), GetEntityIndex(GetOwner())); + } + if (!(THROWING_AXE)) return; + string HIT_TARG = param2; + CallExternal(MY_AXE, "do_shock", HIT_TARG, DOT_THROW_SHOCK); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider.as b/scripts/angelscript/monsters/spider.as new file mode 100644 index 00000000..91c9c05c --- /dev/null +++ b/scripts/angelscript/monsters/spider.as @@ -0,0 +1,289 @@ +#pragma context server + +#include "monsters/spider_base.as" + +namespace MS +{ + +class Spider : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_IDLE; + string ANIM_LATCH_ATTACK; + string ANIM_LATCH_HIT; + string ANIM_LATCH_OFF; + string ANIM_LATCH_ON; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + int ATTACK_RANGE; + int CAN_ATTACK; + int CAN_FLEE; + int CAN_HEAR; + int CAN_HUNT; + int CAN_RETALIATE; + int FIN_EXP; + int HUNT_AGRO; + int MOVE_RANGE; + string NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_LATCH_HISS; + string SOUND_LATCH_JUMP; + string SOUND_LATCH_MNTR; + string SOUND_LATCH_PLYR; + string SOUND_PAIN; + float SPIDER_IDLE_DELAY; + int SPIDER_IDLE_VOL; + int SPIDER_LATCHATTACK; + int SPIDER_LATCHED; + int SPIDER_LATCHING; + int SPIDER_LATCH_ATKCHANCE; + int SPIDER_LATCH_ATKDMG; + int SPIDER_LATCH_ATKDUR; + int SPIDER_LATCH_MAXRANGE; + string SPIDER_LATCH_TARGET; + string SPIDER_MODEL; + int SPIDER_VOLUME; + + Spider() + { + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + Precache(SOUND_IDLE1); + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DODGE = "dodge"; + ANIM_DEATH = "die"; + MOVE_RANGE = 32; + ATTACK_RANGE = 80; + ATTACK_DAMAGE_LOW = 2.0; + ATTACK_DAMAGE_HIGH = 3.0; + ATTACK_ACCURACY = 0.6; + FIN_EXP = 12; + NPC_GIVE_EXP = FIN_EXP; + SPIDER_IDLE_VOL = 2; + SPIDER_IDLE_DELAY = 3.6; + SPIDER_VOLUME = 10; + SPIDER_LATCHATTACK = 1; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + SPIDER_MODEL = "monsters/spider.mdl"; + SPIDER_LATCH_ATKDMG = 5; + SPIDER_LATCH_ATKDUR = 4; + SPIDER_LATCH_ATKCHANCE = 20; + SPIDER_LATCH_MAXRANGE = 200; + ANIM_LATCH_ATTACK = "jumpmiss"; + ANIM_LATCH_HIT = "jumphit"; + ANIM_LATCH_ON = "hitbite"; + ANIM_LATCH_OFF = "falloff"; + SOUND_LATCH_HISS = "monsters/spider/spiderhiss2.wav"; + SOUND_LATCH_JUMP = "monsters/spider/spiderjump.wav"; + SOUND_LATCH_PLYR = "monsters/spider/spiderlatch.wav"; + SOUND_LATCH_MNTR = SND_STRUCK1; + Precache("effects/effect_spiderlatch"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(4); + if ((SPIDER_LATCHATTACK)) + { + } + if ((IS_HUNTING)) + { + } + if (!(IS_ATTACKING)) + { + } + if ((GetEntityProperty(GetOwner(), "alive"))) + { + } + if (RandomInt(0, 99) < SPIDER_LATCH_ATKCHANCE) + { + } + if (!(SPIDER_LATCHING)) + { + } + if (GetEntityDist(HUNT_LASTTARGET) < SPIDER_LATCH_MAXRANGE) + { + } + if ((IsOnGround(GetOwner()))) + { + } + if ((IsOnGround(HUNT_LASTTARGET))) + { + } + PlayAnim("critical", ANIM_LATCH_ATTACK); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_LATCH_HISS, "game.sound.maxvol"); + SetMoveDest("none"); + SetAnimFrameRate(".8"); + SPIDER_LATCHING = 1; + SPIDER_LATCH_TARGET = HUNT_LASTTARGET; + CAN_ATTACK = 0; + CAN_HUNT = 0; + CAN_HEAR = 0; + CAN_RETALIATE = 0; + SetRoam(false); + } + + void OnSpawn() override + { + SetHealth(30); + SetWidth(34); + SetHeight(40); + SetHearingSensitivity(3); + SetName("Leaping Cave Spider"); + NPC_GIVE_EXP = 16; + SetModel(SPIDER_MODEL); + SetStat("awareness", 20); + SetStat("parry", 50); + } + + void OnParry(CBaseEntity@ attacker) override + { + if ((SPIDER_LATCHING)) return; + PlayAnim("critical", ANIM_DODGE); + } + + void frame_jump() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 320, 120)); + SetGravity(".9"); + SetAnimFrameRate(".5"); + SetMoveSpeed(0); + EmitSound(GetOwner(), CHAN_VOICE, SOUND_LATCH_JUMP, 5); + ScheduleDelayedEvent(0.001, "spider_latch_checkhitground"); + } + + void spider_latch_checkhitground() + { + if (!(SPIDER_LATCHING)) return; + if ((SPIDER_LATCHED)) return; + if (GetEntityDist(SPIDER_LATCH_TARGET) < 70) + { + spider_latch_hit(); + } + else + { + if ((GetMonsterProperty("onground"))) + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + SetAnimFrameRate(1); + ScheduleDelayedEvent(0.2, "spider_latch_resetmovement"); + } + else + { + ScheduleDelayedEvent(0.001, "spider_latch_checkhitground"); + } + } + } + + void spider_latch_hit() + { + SPIDER_LATCHED = 1; + PlayAnim("once", "break"); + SetIdleAnim(ANIM_LATCH_ON); + SetEntityOrigin(GetOwner(), GetEntityOrigin(SPIDER_LATCH_TARGET)); + SetFollow(SPIDER_LATCH_TARGET); + SetAngles("face.pitch"); + ApplyEffect(SPIDER_LATCH_TARGET, "effects/effect_spiderlatch", SPIDER_LATCH_ATKDUR, GetEntityIndex(GetOwner()), SPIDER_LATCH_ATKDMG); + if ((IsValidPlayer(SPIDER_LATCH_TARGET))) + { + EmitSound(GetOwner(), "game.sound.body", SOUND_LATCH_PLYR, "game.sound.maxvol"); + } + else + { + EmitSound(GetOwner(), "game.sound.body", SOUND_LATCH_MNTR, "game.sound.maxvol"); + } + SetBBox(Vector3(-40, -40, 0), Vector3(40, 40, 128)); + spider_latch_think(); + SPIDER_LATCH_ATKDUR("spider_latch_drop"); + } + + void spider_latch_think() + { + if (!(SPIDER_LATCHED)) return; + if (!(GetEntityProperty(SPIDER_LATCH_TARGET, "alive"))) + { + spider_latch_drop(); + } + else + { + ScheduleDelayedEvent(0.01, "spider_latch_think"); + } + } + + void spider_latch_drop() + { + if (!(SPIDER_LATCHING)) return; + SPIDER_LATCHED = 0; + SetFollow("none"); + SetGravity(1); + SetMoveSpeed(-1); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + PlayAnim("critical", ANIM_LATCH_OFF); + EmitSound(GetOwner(), 0); + } + + void spider_latch_resetmovement() + { + SetRoam(true); + SetMoveSpeed(1); + SetGravity(1); + SetIdleAnim(ANIM_IDLE); + CAN_ATTACK = 1; + CAN_HUNT = 1; + CAN_HEAR = 1; + CAN_RETALIATE = 1; + SPIDER_LATCHING = 0; + SPIDER_LATCHED = 0; + } + + void frame_falloffend() + { + SetIdleAnim(ANIM_IDLE); + ScheduleDelayedEvent(0.2, "spider_latch_resetmovement"); + PlayAnim("critical", ANIM_IDLE); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + if (!(SPIDER_LATCHED)) return; + spider_latch_drop(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(SPIDER_LATCHED)) return; + SetFollow("none"); + spider_latch_resetmovement(); + } + + void frame_bite1() + { + SetAnimFrameRate(BASE_FRAMERATE); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_base.as b/scripts/angelscript/monsters/spider_base.as new file mode 100644 index 00000000..8f49be16 --- /dev/null +++ b/scripts/angelscript/monsters/spider_base.as @@ -0,0 +1,75 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class SpiderBase : CGameScript +{ + string ATTACK_HITRANGE; + int CAN_HEAR; + string PARRY_TYPE; + + SpiderBase() + { + PARRY_TYPE = "dodged!"; + CAN_HEAR = 1; + if (ATTACK_HITRANGE == "ATTACK_HITRANGE") + { + ATTACK_HITRANGE = 128; + } + } + + void OnRepeatTimer() + { + SetRepeatDelay(SPIDER_IDLE_DELAY); + if ((GetMonsterProperty("alive"))) + { + } + if (!(SPIDER_LATCHED)) + { + } + EmitSound(GetOwner(), "game.sound.body", SOUND_IDLE1, SPIDER_IDLE_VOL); + } + + void OnSpawn() override + { + SetRace("spider"); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void frame_bite1() + { + float ATTACK_DAMAGE = Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH); + XDoDamage(m_hLastSeen, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bite"); + } + + void bite1() + { + frame_bite1(); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SPIDER_VOLUME, SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SND_STRUCK4, SND_STRUCK5 + array sounds = {SPIDER_VOLUME, SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SND_STRUCK4, SND_STRUCK5}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnParry(CBaseEntity@ attacker) override + { + if (!(ANIM_DODGE != "ANIM_DODGE")) return; + PlayAnim("critical", ANIM_DODGE); + } + + void OnDeath(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_base_new.as b/scripts/angelscript/monsters/spider_base_new.as new file mode 100644 index 00000000..01dc1120 --- /dev/null +++ b/scripts/angelscript/monsters/spider_base_new.as @@ -0,0 +1,70 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SpiderBaseNew : CGameScript +{ + int ATTACK_HITRANGE; + int CAN_HEAR; + + SpiderBaseNew() + { + CAN_HEAR = 1; + ATTACK_HITRANGE = 128; + } + + void OnRepeatTimer() + { + SetRepeatDelay(SPIDER_IDLE_DELAY); + if ((GetMonsterProperty("alive"))) + { + } + if (!(SPIDER_LATCHED)) + { + } + EmitSound(GetOwner(), "game.sound.body", SOUND_IDLE1, SPIDER_IDLE_VOL); + } + + void OnSpawn() override + { + SetRace("spider"); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void frame_bite1() + { + float ATTACK_DAMAGE = Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH); + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_ACCURACY); + } + + void bite1() + { + frame_bite1(); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SPIDER_VOLUME, SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SND_STRUCK4, SND_STRUCK5 + array sounds = {SPIDER_VOLUME, SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SND_STRUCK4, SND_STRUCK5}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnParry(CBaseEntity@ attacker) override + { + if (!(ANIM_DODGE != "ANIM_DODGE")) return; + PlayAnim("critical", ANIM_DODGE); + } + + void OnDeath(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_cave.as b/scripts/angelscript/monsters/spider_cave.as new file mode 100644 index 00000000..88535c36 --- /dev/null +++ b/scripts/angelscript/monsters/spider_cave.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "calruin/cavespid.as" + +namespace MS +{ + +class SpiderCave : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/spider_crystal.as b/scripts/angelscript/monsters/spider_crystal.as new file mode 100644 index 00000000..84fa0d62 --- /dev/null +++ b/scripts/angelscript/monsters/spider_crystal.as @@ -0,0 +1,559 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SpiderCrystal : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_PREFIX; + string ANIM_RUN; + string ANIM_TOGROUND; + string ANIM_WALK; + int ATTACH_CLAW1; + int ATTACH_CLAW2; + int ATTACH_MAW; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BANIM_BITE; + string BANIM_CLOSEATK; + string BANIM_DODGEL; + string BANIM_DODGER; + string BANIM_DOUBLEATK; + string BANIM_FLINCH; + string BANIM_FLING; + string BANIM_IDLE; + string BANIM_PROJ; + string BANIM_REEL; + string BANIM_RUN; + string BANIM_SPELL; + string BANIM_WALK; + int BITE_ATTACK; + string C_PREFIX; + string DELAY_V_PUSH; + string DID_INTRO; + float DMG_BITE; + float DMG_PROJ; + float DMG_SWIPE; + float DOT_POISON; + float DOT_SHOCK; + float FREQ_BITE; + float FREQ_SIDESTEP; + float FREQ_TELEPORT; + int GROUND_MODE; + string G_PREFIX; + int HITRANGE_CLOSE; + int HITRANGE_NORM; + int IMMUNE_VAMPIRE; + int MOVERANGE_NORM; + int MOVERANGE_PROJ; + int MOVE_RANGE; + string NEXT_BITE; + string NEXT_INTRO; + string NEXT_SIDESTEP; + string NEXT_TELEPORT; + int NEXT_TELE_FIX; + int NPC_GIVE_EXP; + int NPC_RANGED; + int NPC_RENDER_AMT; + int NPC_RENDER_MODE; + string PROJ_SPRITE; + int RANGE_CHASE; + int RANGE_CLOSE; + int RANGE_NORM; + int RANGE_PROJ; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_ALERT4; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_MANIFEST; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_QUICK1; + string SOUND_QUICK2; + string SOUND_SEARCH; + int STAY_ON_GROUND; + string TELE_TYPE; + int V_ADJ; + + SpiderCrystal() + { + ANIM_IDLE = "c_idle"; + ANIM_WALK = "c_walk"; + ANIM_RUN = "c_run"; + ANIM_ATTACK = "c_project"; + ANIM_PREFIX = "c_"; + BANIM_IDLE = "idle"; + BANIM_WALK = "walk"; + BANIM_RUN = "run"; + BANIM_DODGEL = "walkl"; + BANIM_DODGER = "walkr"; + BANIM_BITE = "bite"; + BANIM_SPELL = "spell"; + BANIM_DOUBLEATK = "dblslash"; + BANIM_CLOSEATK = "close"; + BANIM_FLING = "fling"; + BANIM_PROJ = "project"; + BANIM_REEL = "real"; + BANIM_FLINCH = "flinch"; + C_PREFIX = "c_"; + G_PREFIX = "g_"; + ANIM_JUMP = "g_jump"; + ANIM_TOGROUND = "toground"; + ANIM_DEATH = "death"; + NPC_GIVE_EXP = 600; + ATTACK_RANGE = 9999; + ATTACK_HITRANGE = 9999; + ATTACK_MOVERANGE = 100; + MOVE_RANGE = 100; + RANGE_NORM = 150; + MOVERANGE_NORM = 100; + HITRANGE_NORM = 175; + RANGE_CLOSE = 70; + HITRANGE_CLOSE = 100; + RANGE_CHASE = 300; + RANGE_PROJ = 9999; + MOVERANGE_PROJ = 9999; + NPC_RANGED = 1; + FREQ_BITE = Random(10.0, 15.0); + FREQ_TELEPORT = Random(10.0, 20.0); + FREQ_SIDESTEP = Random(10.0, 20.0); + DOT_POISON = 30.0; + DMG_SWIPE = 75.0; + DMG_BITE = 100.0; + DMG_PROJ = 60.0; + DOT_SHOCK = 20.0; + ATTACH_MAW = 0; + ATTACH_CLAW1 = 1; + ATTACH_CLAW2 = 2; + SOUND_ALERT1 = "monsters/spider/c_pspidhas_bat1.wav"; + SOUND_ALERT2 = "monsters/spider/c_pspidire_bat1.wav"; + SOUND_ALERT3 = "monsters/spider/c_pspidr_bat1.wav"; + SOUND_ALERT4 = "monsters/spider/c_pspidr_bat2.wav"; + SOUND_PAIN1 = "monsters/spider/c_pspidr_hit1.wav"; + SOUND_PAIN2 = "monsters/spider/c_pspidr_hit2.wav"; + SOUND_ATTACK1 = "monsters/spider/c_pspidr_atk1.wav"; + SOUND_ATTACK2 = "monsters/spider/c_pspidr_atk2.wav"; + SOUND_ATTACK3 = "monsters/spider/c_pspidr_atk3.wav"; + SOUND_MANIFEST = "monsters/spider/c_pspidrth_bat1.wav"; + SOUND_QUICK1 = "monsters/spider/c_pspidr_no.wav"; + SOUND_QUICK2 = "monsters/spider/c_pspidr_yes.wav"; + SOUND_SEARCH = "monsters/spider/c_pspidr_slct.wav"; + SOUND_DEATH = "monsters/spider/c_pspidr_dead.wav"; + PROJ_SPRITE = "nhth1.spr"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(5.0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", NPC_RENDER_AMT); + } + + void game_precache() + { + Precache("nhth1.spr"); + Precache(SOUND_DEATH); + Precache("debris/beamstart4.wav"); + Precache("c-tele1.spr"); + Precache("magic/teleport.wav"); + } + + void OnSpawn() override + { + SetName("Crystal Phase Spider"); + SetModel("monsters/spider_crystal.mdl"); + SetWidth(48); + SetHeight(48); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(11); + SetRace("spider"); + SetRoam(true); + IMMUNE_VAMPIRE = 1; + NPC_RENDER_AMT = 0; + if (!(true)) return; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SetHealth(1000); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("slash", 0.75); + SetDamageResistance("blunt", 1.25); + SetDamageResistance("holy", 1.0); + SetDamageResistance("poison", 0.0); + TELE_TYPE = "melee"; + NEXT_TELE_FIX = 99999; + } + + void set_start_ground() + { + ground_mode(); + } + + void set_stay_ground() + { + set_start_ground(); + STAY_ON_GROUND = 1; + } + + void OnPostSpawn() override + { + NPC_RENDER_AMT = 0; + NPC_RENDER_MODE = 5; + spider_fade_in(); + if ((GROUND_MODE)) return; + ScheduleDelayedEvent(0.1, "ceiling_mode"); + } + + void spider_fade_in() + { + NPC_RENDER_AMT += 10; + if (NPC_RENDER_AMT < 255) + { + SetProp(GetOwner(), "renderamt", NPC_RENDER_AMT); + ScheduleDelayedEvent(0.1, "spider_fade_in"); + } + else + { + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "rendermode", 5); + NPC_RENDER_AMT = 255; + } + } + + void ground_mode() + { + if (!(GROUND_MODE)) + { + PlayAnim("critical", ANIM_TOGROUND); + } + ANIM_IDLE = "g_idle"; + ANIM_WALK = "g_walk"; + ANIM_RUN = "g_run"; + ANIM_ATTACK = "g_projectile"; + GROUND_MODE = 1; + ANIM_PREFIX = G_PREFIX; + V_ADJ = 64; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void ceiling_mode() + { + if ((GROUND_MODE)) + { + PlayAnim("critical", ANIM_JUMP); + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 1000)); + DELAY_V_PUSH = GetGameTime(); + DELAY_V_PUSH += 1.0; + ANIM_IDLE = "c_idle"; + ANIM_WALK = "c_walk"; + ANIM_RUN = "c_run"; + ANIM_ATTACK = "c_project"; + GROUND_MODE = 0; + ANIM_PREFIX = C_PREFIX; + V_ADJ = -64; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void npc_targetsighted() + { + if (!(DID_INTRO)) + { + if (GetGameTime() > NEXT_INTRO) + { + } + DID_INTRO = 1; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3, SOUND_ALERT4 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3, SOUND_ALERT4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_SIDESTEP = GetGameTime(); + NEXT_SIDESTEP += Random(30.0, 40.0); + NEXT_TELEPORT = GetGameTime(); + NEXT_TELEPORT += FREQ_TELEPORT; + } + } + + void npcatk_clear_targets() + { + DID_INTRO = 0; + NEXT_INTRO = GetGameTime(); + NEXT_INTRO += Random(6.0, 12.0); + } + + void OnHuntTarget(CBaseEntity@ target) + { + float GAME_TIME = GetGameTime(); + if (!(GROUND_MODE)) + { + SetGravity(-1.0); + if (GAME_TIME > DELAY_V_PUSH) + { + } + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 1)); + } + else + { + SetGravity(1.0); + } + if (m_hAttackTarget == "unset") + { + if ((DID_TELEPORT)) + { + } + if (GAME_TIME > NEXT_TELE_FIX) + { + LogDebug("teleport_fix NEXT_TELE_FIX"); + ClientEvent("new", "all", "effects/sfx_sprite_in_fancy", GetEntityOrigin(GetOwner()), "c-tele1.spr", 25, 2.0, Vector3(255, 255, 255), 512, "magic/teleport.wav"); + SetEntityOrigin(GetOwner(), NPC_HOME_LOC); + TELE_TYPE = "melee"; + NEXT_TELE_FIX = 99999; + ClientEvent("new", "all", "effects/sfx_sprite_in_fancy", NPC_HOME_LOC, "c-tele1.spr", 25, 2.0, Vector3(255, 255, 255), 512, "magic/teleport.wav"); + } + } + if (!(m_hAttackTarget != "unset")) return; + NEXT_TELE_FIX = GAME_TIME; + NEXT_TELE_FIX += 20.0; + if (GAME_TIME > NEXT_TELEPORT) + { + if ((IsValidPlayer(m_hAttackTarget))) + { + } + check_teleport(); + } + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if (TARG_RANGE < RANGE_CHASE) + { + if (TARG_RANGE > RANGE_CLOSE) + { + } + ANIM_ATTACK = /* TODO: $stradd */ $stradd(ANIM_PREFIX, BANIM_DOUBLEATK); + ATTACK_RANGE = RANGE_NORM; + ATTACK_HITRANGE = HITRANGE_NORM; + ATTACK_MOVERANGE = MOVERANGE_NORM; + SetMoveAnim(ANIM_RUN); + } + if (TARG_RANGE < RANGE_CLOSE) + { + ANIM_ATTACK = /* TODO: $stradd */ $stradd(ANIM_PREFIX, BANIM_CLOSEATK); + ATTACK_RANGE = RANGE_CLOSE; + ATTACK_HITRANGE = HITRANGE_CLOSE; + ATTACK_MOVERANGE = MOVERANGE_NORM; + if (GAME_TIME > NEXT_BITE) + { + } + ANIM_ATTACK = /* TODO: $stradd */ $stradd(ANIM_PREFIX, BANIM_BITE); + } + if (TARG_RANGE > RANGE_CHASE) + { + ANIM_ATTACK = /* TODO: $stradd */ $stradd(ANIM_PREFIX, BANIM_PROJ); + ATTACK_RANGE = RANGE_PROJ; + ATTACK_HITRANGE = RANGE_PROJ; + ATTACK_MOVERANGE = MOVERANGE_PROJ; + } + if (GAME_TIME > NEXT_SIDESTEP) + { + NEXT_SIDESTEP = GAME_TIME; + string L_FREQ_SIDESTEP = FREQ_SIDESTEP; + if (TARG_RANGE > RANGE_CHASE) + { + L_FREQ_SIDESTEP *= 0.5; + } + NEXT_SIDESTEP += L_FREQ_SIDESTEP; + int SIDESTEP_DIR = RandomInt(1, 2); + if (SIDESTEP_DIR == 1) + { + PlayAnim("critical", /* TODO: $stradd */ $stradd(ANIM_PREFIX, BANIM_DODGEL)); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(-1000, 0, 0)); + } + if (SIDESTEP_DIR == 2) + { + PlayAnim("critical", /* TODO: $stradd */ $stradd(ANIM_PREFIX, BANIM_DODGER)); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(1000, 0, 0)); + } + } + } + + void frame_projectile() + { + // PlayRandomSound from: SOUND_QUICK1, SOUND_QUICK2 + array sounds = {SOUND_QUICK1, SOUND_QUICK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + TossProjectile("proj_sprite", /* TODO: $relpos */ $relpos(0, 32, V_ADJ), m_hAttackTarget, 300, 0, 0.1, "none"); + Effect("beam", "ents", "lgtning.spr", 10, GetOwner(), 2, GetOwner(), 3, Vector3(255, 0, 255), 200, 90, 1.0); + } + + void ext_proj_land() + { + string TARG_ALIVE = IsEntityAlive(param2); + if (GetRelationship(param2) == "enemy") + { + if ((TARG_ALIVE)) + { + } + int HIT_ENEMY = 1; + } + string ARROW_POS = param3; + if ((HIT_ENEMY)) + { + string ARROW_POS = GetEntityOrigin(param2); + } + ARROW_POS = "z"; + ARROW_POS += "z"; + ClientEvent("new", "all", "effects/sfx_light_fade", ARROW_POS, Vector3(255, 0, 255), 190, 1, "debris/beamstart4.wav", 5); + XDoDamage(ARROW_POS, 128, DMG_PROJ, 0.1, GetOwner(), GetOwner(), "none", "lightning_effect", "dmgevent:proj"); + } + + void proj_dodamage() + { + LogDebug("proj_dodamage PARAM1 GetEntityName(param2) PARAM3 PARAM4"); + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + + void frame_melee_strike() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, 0.9, "slash"); + } + + void frame_bite() + { + // PlayRandomSound from: SOUND_QUICK1, SOUND_QUICK2 + array sounds = {SOUND_QUICK1, SOUND_QUICK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + BITE_ATTACK = 1; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, 1.0, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bite"); + ANIM_ATTACK = /* TODO: $stradd */ $stradd(ANIM_PREFIX, BANIM_CLOSEATK); + NEXT_BITE = GetGameTime(); + NEXT_BITE += FREQ_BITE; + } + + void bite_dodamage() + { + if (!(param1)) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 400, 110)); + ApplyEffect(param2, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + + void check_teleport() + { + string L_CUR_POS = GetEntityOrigin(GetOwner()); + if (TELE_TYPE == "melee") + { + if ((false)) + { + string TELE_POINT = GetEntityOrigin(m_hAttackTarget); + float RND_ANG = Random(0, 359.99); + TELE_POINT += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, MOVERANGE_NORM, 0)); + TELE_POINT = "z"; + if (!(GROUND_MODE)) + { + TELE_POINT += "z"; + } + LAST_TELE_POINT = GetEntityOrigin(GetOwner()); + } + else + { + NEXT_TELEPORT = GetGameTime(); + NEXT_TELEPORT += 3.0; + return; + } + } + if (TELE_TYPE == "ranged") + { + if (LAST_TELE_POINT != "LAST_TELE_POINT") + { + string TELE_POINT = LAST_TELE_POINT; + } + else + { + string TELE_POINT = NPC_HOME_LOC; + } + } + SetEntityOrigin(GetOwner(), TELE_POINT); + string L_POS = TELE_POINT; + string reg.npcmove.endpos = L_POS; + float L_WIGGLE_RL = Random(-8, 8); + float L_WIGGLE_FB = Random(-8, 8); + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(L_WIGGLE_RL, L_WIGGLE_FB, 0)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), m_hAttackTarget); + if ("game.ret.npcmove.dist" <= 0) + { + int L_TELE_FAIL = 1; + } + if ((L_TELE_FAIL)) + { + LogDebug("teleport failed TELE_TYPE game.ret.npcmove.dist TELE_POINT"); + SetEntityOrigin(GetOwner(), L_CUR_POS); + } + else + { + string SPR_POINT = TELE_POINT; + if (TELE_TYPE == "melee") + { + SPR_POINT += "z"; + } + ClientEvent("new", "all", "effects/sfx_sprite_in_fancy", SPR_POINT, "c-tele1.spr", 25, 2.0, Vector3(255, 255, 255), 512, "magic/teleport.wav"); + ClientEvent("new", "all", "effects/sfx_sprite_in_fancy", L_CUR_POS, "c-tele1.spr", 25, 2.0, Vector3(255, 255, 255), 512, "magic/teleport.wav"); + NEXT_TELEPORT = GetGameTime(); + string L_FREQ_TELEPORT = FREQ_TELEPORT; + if (TELE_TYPE == "melee") + { + L_FREQ_TELEPORT *= 0.5; + } + NEXT_TELEPORT += L_FREQ_TELEPORT; + if (!(STAY_ON_GROUND)) + { + if (TELE_TYPE == "melee") + { + if (!(GROUND_MODE)) + { + PlayAnim("once", "break"); + } + GROUND_MODE = 1; + ground_mode(); + } + else + { + if ((GROUND_MODE)) + { + PlayAnim("once", "break"); + } + GROUND_MODE = 0; + ceiling_mode(); + } + } + if (!(L_TELE_FAIL)) + { + DID_TELEPORT = 1; + if (TELE_TYPE == "melee") + { + TELE_TYPE = "ranged"; + } + else + { + TELE_TYPE = "melee"; + } + } + } + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_fire_mini.as b/scripts/angelscript/monsters/spider_fire_mini.as new file mode 100644 index 00000000..f183ead6 --- /dev/null +++ b/scripts/angelscript/monsters/spider_fire_mini.as @@ -0,0 +1,258 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SpiderFireMini : CGameScript +{ + int AM_CHEWING; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_IDLE; + string ANIM_LATCH_OFF; + string ANIM_LATCH_ON; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float DMG_BITE; + int DMG_BURN_DOT; + float FREQ_IDLE_NOISE; + int FREQ_LEAP; + int JUMP_SCAN_ACTIVE; + string LAST_LEAP; + string LATCH_TARGET; + int MOVE_RANGE; + int MY_V_POS; + int NPC_GIVE_EXP; + int RANGE_LEAP_LONG; + int RANGE_LEAP_MAX; + int RANGE_LEAP_SHORT; + int ROLLING_AWAY; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_LATCH_HISS; + string SOUND_LATCH_JUMP; + string SOUND_LATCH_MNTR; + string SOUND_LATCH_PLYR; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + + SpiderFireMini() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DODGE = "dodge"; + ANIM_DEATH = "die"; + MOVE_RANGE = 30; + ATTACK_RANGE = 50; + ATTACK_HITRANGE = 80; + NPC_GIVE_EXP = 10; + FREQ_IDLE_NOISE = 3.6; + DMG_BITE = Random(3, 8); + FREQ_LEAP = 15; + RANGE_LEAP_MAX = 512; + RANGE_LEAP_LONG = 256; + RANGE_LEAP_SHORT = 64; + DMG_BURN_DOT = 10; + ANIM_LEAP = "jump_miss"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_STRUCK4 = "monsters/spider/spiderhiss.wav"; + SOUND_STRUCK5 = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + Precache(SOUND_IDLE1); + ANIM_LATCH_ON = "hitbite"; + ANIM_LATCH_OFF = "falloff"; + SOUND_LATCH_HISS = "monsters/spider/spiderhiss2.wav"; + SOUND_LATCH_JUMP = "monsters/spider/spiderjump.wav"; + SOUND_LATCH_PLYR = "monsters/spider/spiderlatch.wav"; + SOUND_LATCH_MNTR = "body/flesh1.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_IDLE_NOISE); + if ((GetMonsterProperty("alive"))) + { + } + if (!(SPIDER_LATCHED)) + { + } + // svplaysound: svplaysound 2 5 SOUND_IDLE1 + EmitSound(2, 5, SOUND_IDLE1); + } + + void OnSpawn() override + { + SetName("Fire Spider Hatchling"); + SetModel("monsters/fer_spider_mini.mdl"); + SetProp(GetOwner(), "skin", 1); + SetHealth(10); + SetWidth(16); + SetHeight(20); + SetRace("demon"); + SetHearingSensitivity(6); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetSolid("none"); + } + + void bite1() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, ATTACK_ACCURACY); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // svplaysound: svplaysound 2 0 SOUND_IDLE1 + EmitSound(2, 0, SOUND_IDLE1); + } + + void npc_targetsighted() + { + if (!(m_hAttackTarget != "unset")) return; + if (!(GetGameTime() > LAST_LEAP)) return; + if (!(GetEntityRange(m_hAttackTarget) < RANGE_LEAP_MAX)) return; + LAST_LEAP = GetGameTime(); + LAST_LEAP += FREQ_LEAP; + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_LEAP); + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "leap_boost"); + ScheduleDelayedEvent(1.0, "check_hit"); + } + + void check_hit() + { + if ((AM_CHEWING)) return; + npcatk_resume_ai(); + JUMP_SCAN_ACTIVE = 0; + } + + void leap_boost() + { + EmitSound(GetOwner(), 0, SOUND_LATCH_HISS, 10); + if (GetEntityRange(m_hAttackTarget) >= RANGE_LEAP_LONG) + { + string JUMP_VEL = /* TODO: $relvel */ $relvel(0, 800, 300); + } + if (GetEntityRange(m_hAttackTarget) < RANGE_LEAP_LONG) + { + string JUMP_VEL = /* TODO: $relvel */ $relvel(0, 400, 200); + } + if (GetEntityRange(m_hAttackTarget) <= RANGE_LEAP_SHORT) + { + string JUMP_VEL = /* TODO: $relvel */ $relvel(0, 200, 50); + } + AddVelocity(GetOwner(), JUMP_VEL); + JUMP_SCAN_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "jump_scan"); + } + + void jump_scan() + { + if (!(JUMP_SCAN_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "jump_scan"); + string IN_BOX = /* TODO: $get_tbox */ $get_tbox("enemy", 64); + if (!(IN_BOX != "none")) return; + string IN_BOX = /* TODO: $sort_entlist */ $sort_entlist(IN_BOX, "range"); + latch_onto(GetToken(IN_BOX, 0, ";")); + } + + void latch_onto() + { + SetSolid("box"); + MY_V_POS = RandomInt(-64, 0); + AM_CHEWING = 1; + JUMP_SCAN_ACTIVE = 0; + LATCH_TARGET = param1; + PlayAnim("once", "break"); + SetAngles("face.pitch"); + SetIdleAnim(ANIM_LATCH_ON); + SetMoveAnim(ANIM_LATCH_ON); + ApplyEffect(LATCH_TARGET, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DMG_BURN_DOT); + SetBBox(Vector3(-40, -40, 0), Vector3(40, 40, 128)); + spider_latch_think(); + ScheduleDelayedEvent(5.0, "do_dismount"); + } + + void spider_latch_think() + { + if (!(AM_CHEWING)) return; + LogDebug("chewing"); + if ((IsValidPlayer(LATCH_TARGET))) + { + string TARG_ORG = GetEntityProperty(LATCH_TARGET, "eyepos"); + } + else + { + string TARG_ORG = GetEntityOrigin(LATCH_TARGET); + string TARG_HEIGHT = GetEntityHeight(LATCH_TARGET); + TARG_ORG += "z"; + } + string TARG_YAW = GetEntityProperty(LATCH_TARGET, "angles.yaw"); + TARG_ORG += /* TODO: $relpos */ $relpos(Vector3(0, TARG_YAW, 0), Vector3(0, 5, MY_V_POS)); + SetEntityOrigin(GetOwner(), TARG_ORG); + if (!(GetEntityProperty(LATCH_TARGET, "alive"))) + { + do_dismount(); + } + else + { + ScheduleDelayedEvent(0.01, "spider_latch_think"); + } + } + + void do_dismount() + { + SetSolid("none"); + ROLLING_AWAY = 1; + roll_away(); + AM_CHEWING = 0; + PlayAnim("critical", ANIM_LATCH_OFF); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + npcatk_resume_ai(); + } + + void roll_away() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(ROLLING_AWAY)) return; + string TARGET_ORG = GetEntityOrigin(LATCH_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, -500, 10))); + } + + void frame_falloffend() + { + ROLLING_AWAY = 0; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + PlayAnim("critical", ANIM_IDLE); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_fire_spitting.as b/scripts/angelscript/monsters/spider_fire_spitting.as new file mode 100644 index 00000000..c8df4bd7 --- /dev/null +++ b/scripts/angelscript/monsters/spider_fire_spitting.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "monsters/spider_spitting.as" + +namespace MS +{ + +class SpiderFireSpitting : CGameScript +{ + int DOT_FIRE; + int NPC_GIVE_EXP; + string PROJ_OFS; + string PROJ_TYPE; + + SpiderFireSpitting() + { + PROJ_TYPE = "proj_fire_xolt"; + PROJ_OFS = Vector3(0, 0, 32); + DOT_FIRE = 3; + } + + void spider_spawn() + { + SetHealth(100); + if (!(AM_CLIPPED)) + { + SetWidth(64); + SetHeight(64); + } + if ((AM_CLIPPED)) + { + SetWidth(32); + SetHeight(20); + } + SetName("Fire Spider"); + SetHearingSensitivity(7); + SetModel("monsters/fer_spider_large.mdl"); + SetProp(GetOwner(), "skin", 1); + SetDamageResistance("all", ".8"); + SetDamageResistance("fire", 0.0); + NPC_GIVE_EXP = 90; + } + + void bite_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DOT_FIRE); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_fire_turret.as b/scripts/angelscript/monsters/spider_fire_turret.as new file mode 100644 index 00000000..cac13ea7 --- /dev/null +++ b/scripts/angelscript/monsters/spider_fire_turret.as @@ -0,0 +1,67 @@ +#pragma context server + +#include "monsters/spider_turret.as" + +namespace MS +{ + +class SpiderFireTurret : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + int DOT_FIRE; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + string PROJ_OFS; + string PROJ_TYPE; + + SpiderFireTurret() + { + PROJ_TYPE = "proj_fire_xolt"; + PROJ_OFS = Vector3(0, 0, 32); + DOT_FIRE = 3; + } + + void spider_spawn() + { + SetHealth(150); + if (!(AM_CLIPPED)) + { + SetWidth(64); + SetHeight(64); + } + if ((AM_CLIPPED)) + { + SetWidth(32); + SetHeight(20); + } + SetName("Fire Spider"); + SetHearingSensitivity(7); + SetModel("monsters/fer_spider_large.mdl"); + SetProp(GetOwner(), "skin", 1); + SetDamageResistance("all", ".8"); + SetDamageResistance("fire", 0.0); + SetAnimMoveSpeed(0.0); + SetMoveSpeed(0); + SetMoveAnim(ANIM_IDLE); + NO_STUCK_CHECKS = 1; + NPC_GIVE_EXP = 100; + ScheduleDelayedEvent(0.1, "make_turret"); + } + + void make_turret() + { + ANIM_RUN = "idle"; + ANIM_WALK = "idle"; + } + + void bite_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + ApplyEffect(param2, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), DOT_FIRE, 1, 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_giant.as b/scripts/angelscript/monsters/spider_giant.as new file mode 100644 index 00000000..5dbe4cad --- /dev/null +++ b/scripts/angelscript/monsters/spider_giant.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/thornlandspider.as" + +namespace MS +{ + +class SpiderGiant : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/spider_mini.as b/scripts/angelscript/monsters/spider_mini.as new file mode 100644 index 00000000..75935781 --- /dev/null +++ b/scripts/angelscript/monsters/spider_mini.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "monsters/spider_base.as" + +namespace MS +{ + +class SpiderMini : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int DELETE_ON_DEATH; + int HUNT_AGRO; + int MOVE_RANGE; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + float SPIDER_IDLE_DELAY; + int SPIDER_IDLE_VOL; + int SPIDER_VOLUME; + + SpiderMini() + { + DELETE_ON_DEATH = 1; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 30; + ATTACK_RANGE = 50; + ATTACK_HITRANGE = 80; + ATTACK_DAMAGE_LOW = 1.0; + ATTACK_DAMAGE_HIGH = 2.0; + ATTACK_ACCURACY = 0.4; + NPC_GIVE_EXP = 5; + SPIDER_IDLE_VOL = 1; + SPIDER_IDLE_DELAY = 3.6; + SPIDER_VOLUME = 5; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + } + + void OnSpawn() override + { + SetHealth(15); + SetWidth(16); + SetHeight(20); + SetHearingSensitivity(3); + SetName("Cave Spiderling"); + NPC_GIVE_EXP = 5; + SetModel("monsters/minispider.mdl"); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_mini_poison.as b/scripts/angelscript/monsters/spider_mini_poison.as new file mode 100644 index 00000000..1dc15fd3 --- /dev/null +++ b/scripts/angelscript/monsters/spider_mini_poison.as @@ -0,0 +1,86 @@ +#pragma context server + +#include "monsters/spider_base.as" + +namespace MS +{ + +class SpiderMiniPoison : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + int ATTACK_RANGE; + int CAN_FLEE; + int DELETE_ON_DEATH; + int HUNT_AGRO; + int MOVE_RANGE; + int NPC_GIVE_EXP; + float RETALIATE_CHANCE; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + float SPIDER_IDLE_DELAY; + int SPIDER_IDLE_VOL; + int SPIDER_VOLUME; + + SpiderMiniPoison() + { + DELETE_ON_DEATH = 1; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 30; + ATTACK_RANGE = 38; + ATTACK_DAMAGE_LOW = 1.0; + ATTACK_DAMAGE_HIGH = 2.0; + ATTACK_ACCURACY = 0.4; + NPC_GIVE_EXP = 25; + SPIDER_IDLE_VOL = 1; + SPIDER_IDLE_DELAY = 3.6; + SPIDER_VOLUME = 5; + HUNT_AGRO = 1; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + } + + void OnSpawn() override + { + SetHealth(30); + SetWidth(16); + SetHeight(20); + SetHearingSensitivity(3); + SetName("Poisonous Spider"); + NPC_GIVE_EXP = 20; + SetModel("monsters/fer_spider_mini.mdl"); + SetModelBody(0, 2); + } + + void bite_dodamage() + { + ApplyEffect(m_hLastStruckByMe, "effects/dot_poison", RandomInt(3, 5), GetEntityIndex(GetOwner()), RandomInt(1, 5)); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_queen.as b/scripts/angelscript/monsters/spider_queen.as new file mode 100644 index 00000000..3a4ae7ca --- /dev/null +++ b/scripts/angelscript/monsters/spider_queen.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "calruin/spidqueen.as" + +namespace MS +{ + +class SpiderQueen : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/spider_snow.as b/scripts/angelscript/monsters/spider_snow.as new file mode 100644 index 00000000..2e2fdffe --- /dev/null +++ b/scripts/angelscript/monsters/spider_snow.as @@ -0,0 +1,332 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SpiderSnow : CGameScript +{ + int AM_BURROWED; + int AM_FLIPPED; + string ANIM_ATTACK; + string ANIM_BURROW_IN; + string ANIM_BURROW_OUT; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BITE_ATTACK; + int CAN_FLIP; + int DMG_BITE; + int DOT_POISON; + float FREQ_FLIP; + float HITCHANCE_BITE; + string NEXT_FLIP; + string NEXT_QUICK_SPIT; + int NPC_GIVE_EXP; + int NPC_NO_AUTO_ACTIVATE; + float NPC_PROXACT_DELAY; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_FOV; + int NPC_PROXACT_IFSEEN; + string NPC_PROXACT_RANGE; + int NPC_PROX_ACTIVATE; + int PROJECTILE_RANGE; + int SILENT_BURROW; + string SOUND_SHOOT; + string START_BURROWED; + int WEB_STRENGTH; + + SpiderSnow() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "spit"; + ANIM_JUMP = "latch_jump"; + ANIM_BURROW_IN = "BurrowIn"; + ANIM_BURROW_OUT = "BurrowOut"; + WEB_STRENGTH = 1; + ATTACK_MOVERANGE = 250; + PROJECTILE_RANGE = 400; + ATTACK_HITRANGE = 90; + ATTACK_RANGE = 70; + HITCHANCE_BITE = 0.8; + DMG_BITE = 10; + DOT_POISON = 5; + FREQ_FLIP = Random(15.0, 30.0); + SOUND_SHOOT = "bullchicken/bc_attack3.wav"; + NPC_GIVE_EXP = 200; + } + + void game_precache() + { + Precache("effects/webbed"); + } + + void OnSpawn() override + { + SetName("Wooly Spider"); + SetHealth(100); + SetModel("monsters/spider_fuzzy.mdl"); + SetWidth(32); + SetHeight(32); + SetRace("spider"); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetModelBody(0, 2); + if (!(true)) return; + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 1.25); + SetHearingSensitivity(4); + ScheduleDelayedEvent(0.5, "start_ai"); + ScheduleDelayedEvent(1.5, "post_activated"); + } + + void render_normal() + { + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "rendermode", 0); + } + + void burrow_in() + { + npcatk_suspend_ai(); + PlayAnim("once", "break"); + PlayAnim("hold", ANIM_BURROW_IN); + AM_BURROWED = 1; + if (!(SILENT_BURROW)) + { + EmitSound(GetOwner(), 0, SOUND_BURROW, 10); + } + SILENT_BURROW = 0; + } + + void burrow_out() + { + if ((START_BURROWED)) + { + SetMoveDest(NPC_PROXACT_PLAYERID); + START_BURROWED = 0; + } + npcatk_resume_ai(); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_BURROW_OUT); + AM_BURROWED = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (param1 > GetEntityHealth(GetOwner())) + { + SetGravity(1); + } + if (!(AM_BURROWED)) return; + burrow_out(); + } + + void set_start_burrowed() + { + NPC_NO_AUTO_ACTIVATE = 1; + START_BURROWED = 1; + if (param2 > 32) + { + NPC_PROXACT_RANGE = param2; + } + else + { + NPC_PROXACT_RANGE = 256; + } + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_EVENT = "burrow_out"; + NPC_PROXACT_IFSEEN = 1; + NPC_PROXACT_FOV = 0; + NPC_PROXACT_DELAY = 0.5; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SILENT_BURROW = 1; + ScheduleDelayedEvent(0.01, "burrow_in"); + ScheduleDelayedEvent(1.5, "render_normal"); + } + + void set_start_ceiling() + { + AM_FLIPPED = 1; + ANIM_IDLE = "up_idle"; + ANIM_WALK = "up_walk"; + ANIM_RUN = "up_walk"; + ANIM_DEATH = "up_death"; + ANIM_ATTACK = "up_spit"; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetGravity(-1.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 10000)); + ScheduleDelayedEvent(2.0, "set_ceiling_spider"); + } + + void set_ceiling_spider() + { + AM_FLIPPED = 1; + ANIM_IDLE = "up_idle"; + ANIM_WALK = "up_walk"; + ANIM_RUN = "up_walk"; + ANIM_DEATH = "up_death"; + ANIM_ATTACK = "up_spit"; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetGravity(-1.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 10000)); + } + + void set_ground_spider() + { + AM_FLIPPED = 0; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "spit"; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetGravity(1); + } + + void set_can_flip() + { + NEXT_FLIP = GetGameTime(); + NEXT_FLIP += FREQ_FLIP; + CAN_FLIP = 1; + } + + void frame_spit() + { + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + if (!(CanAttack(m_hAttackTarget))) + { + } + TossProjectile("proj_web", /* TODO: $relpos */ $relpos(0, 32, 0), m_hAttackTarget, 150, 0, 0.1, "none"); + EmitSound(GetOwner(), 0, SOUND_SHOOT, 5); + NEXT_QUICK_SPIT = GetGameTime(); + NEXT_QUICK_SPIT += 1.0; + } + else + { + BITE_ATTACK = 1; + if (!(CanAttack(m_hAttackTarget))) + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, HITCHANCE_BITE, "pierce"); + } + else + { + DoDamage(m_hAttackTarget, "direct", DMG_BITE, 1.0, GetOwner()); + } + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + int TARG_COCOONED = 0; + if ((CanAttack(m_hAttackTarget))) + { + int TARG_COCOONED = 1; + } + if ((false)) + { + if ((TARG_COCOONED)) + { + ATTACK_MOVERANGE = 32; + } + else + { + ATTACK_MOVERANGE = 250; + } + } + else + { + ATTACK_MOVERANGE = 32; + } + if ((CAN_FLIP)) + { + if (GetGameTime() > NEXT_FLIP) + { + } + NEXT_FLIP = GetGameTime(); + NEXT_FLIP += FREQ_FLIP; + if ((AM_FLIPPED)) + { + set_ground_spider(); + } + else + { + set_ceiling_spider(); + } + } + if ((TARG_COCOONED)) + { + set_ground_spider(); + } + if ((AM_FLIPPED)) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 1000)); + } + } + + void npc_targetsighted() + { + if ((CanAttack(m_hAttackTarget))) return; + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + if (GetGameTime() > NEXT_QUICK_SPIT) + { + } + NEXT_QUICK_SPIT = GetGameTime(); + NEXT_QUICK_SPIT += 2.0; + if (GetEntityRange(m_hAttackTarget) < PROJECTILE_RANGE) + { + } + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 2.0; + PlayAnim("once", ANIM_ATTACK); + } + } + + void game_dodamage() + { + if ((param1)) + { + if ((BITE_ATTACK)) + { + } + ApplyEffect(param2, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + BITE_ATTACK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetGravity(1); + } + + void post_activated() + { + if (NPC_ADJ_LEVEL > 0) + { + string ADD_TO_WS = NPC_ADJ_LEVEL; + ADD_TO_WS = max(1, min(7, ADD_TO_WS)); + WEB_STRENGTH += ADD_TO_WS; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_spitting.as b/scripts/angelscript/monsters/spider_spitting.as new file mode 100644 index 00000000..965391ca --- /dev/null +++ b/scripts/angelscript/monsters/spider_spitting.as @@ -0,0 +1,136 @@ +#pragma context server + +#include "monsters/spider_base.as" + +namespace MS +{ + +class SpiderSpitting : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + float ATTACK_ACCURACY; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int DELETE_ON_DEATH; + int MOVE_RANGE; + int NO_STEP_ADJ; + int NPC_GIVE_EXP; + string PROJ_OFS; + string PROJ_TYPE; + float RETALIATE_CHANCE; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + float SPIDER_IDLE_DELAY; + int SPIDER_IDLE_VOL; + int SPIDER_VOLUME; + float SPIT_FREQ; + + SpiderSpitting() + { + PROJ_TYPE = "proj_poison"; + PROJ_OFS = Vector3(0, 48, 32); + DELETE_ON_DEATH = 1; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DODGE = "dodge"; + ANIM_DEATH = "die"; + ATTACK_SPEED = 650; + ATTACK_DAMAGE_LOW = 4; + ATTACK_DAMAGE_HIGH = 6; + ATTACK_ACCURACY = 0.6; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 69; + SPIDER_IDLE_VOL = 3; + SPIDER_IDLE_DELAY = 3.6; + SPIDER_VOLUME = 10; + SPIT_FREQ = 1.0; + AIM_RATIO = 50; + MOVE_RANGE = 384; + NO_STEP_ADJ = 1; + RETALIATE_CHANCE = 0.75; + } + + void OnSpawn() override + { + spider_spawn(); + } + + void spider_spawn() + { + SetHealth(80); + if (!(AM_CLIPPED)) + { + SetWidth(64); + SetHeight(64); + } + if ((AM_CLIPPED)) + { + SetWidth(32); + SetHeight(20); + } + SetName("Spitting Cave Spider"); + SetHearingSensitivity(7); + SetModel("monsters/gspider.mdl"); + SetDamageResistance("all", ".8"); + NPC_GIVE_EXP = 70; + } + + void debug_props() + { + SetSayTextRange(1024); + SayText(I + " cansee nme false hunt false cycl CYCLE_TIME is IS_HUNTING plr HUNTING_PLAYER"); + } + + void bite1() + { + AS_ATTACKING = GetGameTime(); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + XDoDamage(HUNT_LASTTARGET, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_ACCURACY, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bite"); + if (!(false)) return; + string L_POS = GetEntityOrigin(GetOwner()); + L_POS += /* TODO: $relpos */ $relpos(GetEntityAngles(GetOwner()), PROJ_OFS); + TossProjectile(PROJ_TYPE, L_POS, HUNT_LASTTARGET, ATTACK_SPEED, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), 2, "none"); + } + + void npc_targetsighted() + { + if (!(false)) return; + if (!(GetEntityRange(param1) > ATTACK_RANGE)) return; + PlayAnim("once", ANIM_ATTACK); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_spitting_clipped.as b/scripts/angelscript/monsters/spider_spitting_clipped.as new file mode 100644 index 00000000..82263556 --- /dev/null +++ b/scripts/angelscript/monsters/spider_spitting_clipped.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/spider_spitting.as" + +namespace MS +{ + +class SpiderSpittingClipped : CGameScript +{ + int AM_CLIPPED; + + SpiderSpittingClipped() + { + AM_CLIPPED = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_thornlands.as b/scripts/angelscript/monsters/spider_thornlands.as new file mode 100644 index 00000000..09638adc --- /dev/null +++ b/scripts/angelscript/monsters/spider_thornlands.as @@ -0,0 +1,133 @@ +#pragma context server + +#include "monsters/spider_base_new.as" + +namespace MS +{ + +class SpiderThornlands : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int MOVE_RANGE; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string PUSH_VEL; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + float SPIDER_IDLE_DELAY; + int SPIDER_IDLE_VOL; + int SPIDER_VOLUME; + + SpiderThornlands() + { + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DODGE = "dodge"; + ANIM_DEATH = "die"; + MOVE_RANGE = 50; + ATTACK_RANGE = 200; + ATTACK_HITRANGE = 250; + ATTACK_DAMAGE_LOW = 9.0; + ATTACK_DAMAGE_HIGH = 12.0; + ATTACK_ACCURACY = 0.85; + NPC_GIVE_EXP = 100; + NPC_MUST_SEE_TARGET = 0; + SPIDER_IDLE_VOL = 4; + SPIDER_IDLE_DELAY = 3.6; + SPIDER_VOLUME = 10; + } + + void OnSpawn() override + { + SetHealth(500); + SetWidth(120); + SetHeight(64); + SetName("Gigantic Cave Spider"); + SetHearingSensitivity(6); + SetModel("monsters/giant_spider.mdl"); + NPC_GIVE_EXP = 100; + SetDamageResistance("all", ".85"); + CatchSpeech("debug_props", "debug"); + } + + void debug_props() + { + SetSayTextRange(1024); + if ((false)) + { + SayText(I + "see enemy. " + GetEntityName(m_hLastSeen)); + } + if ((IS_HUNTING)) + { + SayText(I + "am hunting: " + GetEntityName(HUNT_LASTTARGET)); + } + if ((HUNTING_PLAYER)) + { + SayText(I + " am hunting a player."); + } + if (!(false)) + { + SayText(I + "see " + NO + " enemy."); + } + if (!(IS_HUNTING)) + { + SayText(I + "am " + NOT + " hunting."); + } + if (!(HUNTING_PLAYER)) + { + SayText(I + "am " + NOT + " hunting a player."); + } + SayText("My cycle time is " + CYCLE_TIME); + } + + void bite1() + { + if (RandomInt(0, 1) == 0) + { + // PlayRandomSound from: SPIDER_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SPIDER_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + PUSH_VEL = /* TODO: $relvel */ $relvel(0, 100, 0); + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), 0.85); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(PUSH_VEL != "PUSH_VEL")) return; + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_turret.as b/scripts/angelscript/monsters/spider_turret.as new file mode 100644 index 00000000..c1c4367f --- /dev/null +++ b/scripts/angelscript/monsters/spider_turret.as @@ -0,0 +1,158 @@ +#pragma context server + +#include "monsters/spider_base.as" + +namespace MS +{ + +class SpiderTurret : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + int ATTACK_RANGE; + int ATTACK_SPEED; + int FIRE_DELAY; + int MOVE_RANGE; + int NO_STEP_ADJ; + int NO_STUCK_CHECKS; + int NPC_GIVE_EXP; + string NPC_MOVE_TARGET; + string PROJ_TYPE; + float RETALIATE_CHANCE; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + float SPIDER_IDLE_DELAY; + int SPIDER_IDLE_VOL; + int SPIDER_VOLUME; + float SPIT_FREQ; + + SpiderTurret() + { + PROJ_TYPE = "proj_poison"; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DODGE = "dodge"; + ANIM_DEATH = "die"; + ATTACK_RANGE = 128; + ATTACK_SPEED = 650; + ATTACK_DAMAGE_LOW = 12; + ATTACK_DAMAGE_HIGH = 24; + ATTACK_ACCURACY = 0.6; + ATTACK_RANGE = 128; + MOVE_RANGE = 75; + SPIDER_IDLE_VOL = 3; + SPIDER_IDLE_DELAY = 3.6; + SPIDER_VOLUME = 10; + SPIT_FREQ = 1.0; + AIM_RATIO = 50; + NO_STEP_ADJ = 1; + NO_STUCK_CHECKS = 1; + NPC_MOVE_TARGET = "enemy"; + RETALIATE_CHANCE = 0.75; + } + + void OnSpawn() override + { + spider_spawn(); + } + + void spider_spawn() + { + SetHealth(150); + SetWidth(64); + SetHeight(64); + SetRoam(false); + SetMoveSpeed(0.0); + SetName("Spitting Spider"); + SetHearingSensitivity(10); + SetModel("monsters/fer_spider_large.mdl"); + SetModelBody(0, 1); + SetDamageResistance("all", ".8"); + NPC_GIVE_EXP = 80; + } + + void debug_props() + { + SetSayTextRange(1024); + if ((false)) + { + SayText(I + "see enemy: " + GetEntityName(m_hLastSeen)); + } + if ((IS_HUNTING)) + { + SayText(I + "am hunting: " + GetEntityName(ENTITY_ENEMY)); + } + if ((HUNTING_PLAYER)) + { + SayText(I + " am hunting a player."); + } + if (!(false)) + { + SayText(I + "see " + NO + " enemy."); + } + if (!(IS_HUNTING)) + { + SayText(I + "am " + NOT + " hunting."); + } + if (!(HUNTING_PLAYER)) + { + SayText(I + "am " + NOT + " hunting a player."); + } + SayText("My cycle time is " + CYCLE_TIME); + } + + void bite1() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), ATTACK_ACCURACY, "slash"); + SetMoveDest(ENTITY_ENEMY); + TossProjectile(PROJ_TYPE, /* TODO: $relpos */ $relpos(0, 48, 0), HUNT_LASTTARGET, ATTACK_SPEED, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), 2, "none"); + } + + void reset_fire_delay() + { + FIRE_DELAY = 0; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((FIRE_DELAY)) return; + FIRE_DELAY = 1; + SPIT_FREQ("reset_fire_delay"); + if (!(false)) return; + PlayAnim("once", ANIM_ATTACK); + } + +} + +} diff --git a/scripts/angelscript/monsters/spider_webber.as b/scripts/angelscript/monsters/spider_webber.as new file mode 100644 index 00000000..d02ffb4a --- /dev/null +++ b/scripts/angelscript/monsters/spider_webber.as @@ -0,0 +1,371 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SpiderWebber : CGameScript +{ + int AM_BURROWED; + int AM_FLIPPED; + string ANIM_ATTACK; + string ANIM_BURROW_IN; + string ANIM_BURROW_OUT; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BITE_ATTACK; + int CAN_FLIP; + int DEFAULT_CEILING; + int DMG_BITE; + int DOT_POISON; + float FREQ_FLIP; + float HITCHANCE_BITE; + string NEXT_FLIP; + string NEXT_QUICK_SPIT; + int NPC_GIVE_EXP; + int NPC_NO_AUTO_ACTIVATE; + float NPC_PROXACT_DELAY; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_FOV; + int NPC_PROXACT_IFSEEN; + string NPC_PROXACT_RANGE; + int NPC_PROX_ACTIVATE; + int PROJECTILE_RANGE; + int SILENT_BURROW; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_SHOOT; + string START_BURROWED; + int WEB_STRENGTH; + + SpiderWebber() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "spit"; + ANIM_JUMP = "latch_jump"; + ANIM_BURROW_IN = "BurrowIn"; + ANIM_BURROW_OUT = "BurrowOut"; + WEB_STRENGTH = 1; + ATTACK_MOVERANGE = 250; + PROJECTILE_RANGE = 400; + ATTACK_HITRANGE = 90; + ATTACK_RANGE = 70; + HITCHANCE_BITE = 0.8; + DMG_BITE = 10; + DOT_POISON = 5; + FREQ_FLIP = Random(15.0, 30.0); + SOUND_SHOOT = "bullchicken/bc_attack3.wav"; + NPC_GIVE_EXP = 80; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SND_STRUCK4 = "monsters/spider/spiderhiss.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + } + + void game_precache() + { + Precache("effects/webbed"); + } + + void OnSpawn() override + { + SetName("Constrictor Spider"); + SetHealth(100); + SetModel("monsters/spider_fuzzy.mdl"); + SetWidth(32); + SetHeight(32); + SetRace("spider"); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + if (!(true)) return; + SetHearingSensitivity(4); + ScheduleDelayedEvent(0.5, "start_ai"); + ScheduleDelayedEvent(1.5, "post_activated"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + // PlayRandomSound from: SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SND_STRUCK4 + array sounds = {SND_STRUCK1, SND_STRUCK2, SND_STRUCK3, SND_STRUCK4}; + EmitSound(GetOwner(), "game.sound.body", sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void render_normal() + { + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "rendermode", 0); + } + + void burrow_in() + { + npcatk_suspend_ai(); + PlayAnim("once", "break"); + PlayAnim("hold", ANIM_BURROW_IN); + AM_BURROWED = 1; + if (!(SILENT_BURROW)) + { + EmitSound(GetOwner(), 0, SOUND_BURROW, 10); + } + SILENT_BURROW = 0; + } + + void burrow_out() + { + if ((START_BURROWED)) + { + SetMoveDest(NPC_PROXACT_PLAYERID); + START_BURROWED = 0; + } + npcatk_resume_ai(); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_BURROW_OUT); + AM_BURROWED = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (param1 > GetEntityHealth(GetOwner())) + { + SetGravity(1); + } + if (!(AM_BURROWED)) return; + burrow_out(); + } + + void set_start_burrowed() + { + NPC_NO_AUTO_ACTIVATE = 1; + START_BURROWED = 1; + if (param2 > 32) + { + NPC_PROXACT_RANGE = param2; + } + else + { + NPC_PROXACT_RANGE = 256; + } + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_EVENT = "burrow_out"; + NPC_PROXACT_IFSEEN = 1; + NPC_PROXACT_FOV = 0; + NPC_PROXACT_DELAY = 0.5; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SILENT_BURROW = 1; + ScheduleDelayedEvent(0.01, "burrow_in"); + ScheduleDelayedEvent(1.5, "render_normal"); + } + + void set_start_ceiling() + { + DEFAULT_CEILING = 1; + AM_FLIPPED = 1; + ANIM_IDLE = "up_idle"; + ANIM_WALK = "up_walk"; + ANIM_RUN = "up_walk"; + ANIM_DEATH = "up_death"; + ANIM_ATTACK = "up_spit"; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetGravity(-1.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 10000)); + ScheduleDelayedEvent(2.0, "set_ceiling_spider"); + } + + void set_ceiling_spider() + { + AM_FLIPPED = 1; + ANIM_IDLE = "up_idle"; + ANIM_WALK = "up_walk"; + ANIM_RUN = "up_walk"; + ANIM_DEATH = "up_death"; + ANIM_ATTACK = "up_spit"; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetGravity(-1.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 10000)); + } + + void set_ground_spider() + { + AM_FLIPPED = 0; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "spit"; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetGravity(1); + } + + void set_can_flip() + { + NEXT_FLIP = GetGameTime(); + NEXT_FLIP += FREQ_FLIP; + CAN_FLIP = 1; + } + + void frame_spit() + { + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + if ((AM_FLIPPED)) + { + string L_START_OFS = /* TODO: $relpos */ $relpos(0, 32, -48); + } + else + { + string L_START_OFS = /* TODO: $relpos */ $relpos(0, 32, 0); + } + string L_END_POS = GetEntityOrigin(m_hAttackTarget); + L_END_POS += Vector3(0, 0, (GetEntityHeight(m_hAttackTarget) * 0.75)); + TossProjectile("proj_web", L_START_OFS, L_END_POS, 275, 10, 0.1, "none"); + EmitSound(GetOwner(), 0, SOUND_SHOOT, 5); + NEXT_QUICK_SPIT = GetGameTime(); + NEXT_QUICK_SPIT += 1.0; + } + else + { + BITE_ATTACK = 1; + if (!(CanAttack(m_hAttackTarget))) + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, HITCHANCE_BITE, "pierce"); + } + else + { + DoDamage(m_hAttackTarget, "direct", DMG_BITE, 1.0, GetOwner()); + } + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + int TARG_COCOONED = 0; + if (!(CanAttack(m_hAttackTarget))) + { + int TARG_COCOONED = 1; + } + if ((false)) + { + if ((TARG_COCOONED)) + { + ATTACK_MOVERANGE = 32; + } + else + { + ATTACK_MOVERANGE = 250; + } + } + else + { + ATTACK_MOVERANGE = 32; + } + if ((CAN_FLIP)) + { + if (GetGameTime() > NEXT_FLIP) + { + } + NEXT_FLIP = GetGameTime(); + NEXT_FLIP += FREQ_FLIP; + if ((AM_FLIPPED)) + { + set_ground_spider(); + } + else + { + set_ceiling_spider(); + } + } + if ((TARG_COCOONED)) + { + if (GetEntityProperty(m_hAttackTarget, "range2d") < 100) + { + } + set_ground_spider(); + } + if ((AM_FLIPPED)) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 1000)); + } + } + + void npc_targetsighted() + { + if (!(CanAttack(m_hAttackTarget))) return; + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + if (GetGameTime() > NEXT_QUICK_SPIT) + { + } + NEXT_QUICK_SPIT = GetGameTime(); + NEXT_QUICK_SPIT += 2.0; + if (GetEntityRange(m_hAttackTarget) < PROJECTILE_RANGE) + { + } + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 2.0; + PlayAnim("once", ANIM_ATTACK); + } + } + + void game_dodamage() + { + if ((param1)) + { + if ((BITE_ATTACK)) + { + } + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ApplyEffect(param2, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + BITE_ATTACK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetGravity(1); + } + + void post_activated() + { + if (NPC_ADJ_LEVEL > 0) + { + string ADD_TO_WS = NPC_ADJ_LEVEL; + ADD_TO_WS = max(1, min(7, ADD_TO_WS)); + WEB_STRENGTH += ADD_TO_WS; + } + } + + void my_target_died() + { + if (!(DEFAULT_CEILING)) return; + set_ceiling_spider(); + } + +} + +} diff --git a/scripts/angelscript/monsters/spotter_hack.as b/scripts/angelscript/monsters/spotter_hack.as new file mode 100644 index 00000000..54c3a992 --- /dev/null +++ b/scripts/angelscript/monsters/spotter_hack.as @@ -0,0 +1,49 @@ +#pragma context server + +namespace MS +{ + +class SpotterHack : CGameScript +{ + string CAN_ATTACK; + string CAN_HUNT; + string CYCLE_TIME; + string HUNT_LASTTARGET; + string NPC_ATTACK_TARGET; + string NPC_MOVE_TARGET; + + void see_enemy() + { + SetRepeatDelay(1.0); + if (HUNT_LASTTARGET != "HUNT_LASTTARGET") + { + if (HUNT_LASTTARGET != �NONE�) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if ((false)) + { + if (!(NO_ADVANCED_SEARCHES)) + { + SetFOV(359); + } + CAN_ATTACK = 1; + CAN_HUNT = 1; + NPC_MOVE_TARGET = GetEntityIndex(m_hLastSeen); + NPC_ATTACK_TARGET = NPC_MOVE_TARGET; + HUNT_LASTTARGET = m_hLastSeen; + CYCLE_TIME = CYCLE_TIME_ACTIVE; + cycle_up(); + SetMoveDest(m_hLastSeen); + if (GetEntityProperty("range", "m_hlastseen") < ATTACK_RANGE) + { + npcatk_attackenemy(); + } + } + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/acid_ball_guided.as b/scripts/angelscript/monsters/summon/acid_ball_guided.as new file mode 100644 index 00000000..8ae473f0 --- /dev/null +++ b/scripts/angelscript/monsters/summon/acid_ball_guided.as @@ -0,0 +1,204 @@ +#pragma context server + +namespace MS +{ + +class AcidBallGuided : CGameScript +{ + int COLLIDE_RANGE; + int DETECT_RANGE; + string FIRST_TARG; + float FREQ_HUNT; + float FREQ_MOVE; + int IS_ACTIVE; + string MY_AOE; + string MY_BASE_DMG; + string MY_DEST; + string MY_DOT; + string MY_DURATION; + string MY_OWNER; + int MY_SPEED; + string MY_TARGET; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string PREV_POV; + string PUSH_LIST; + string SOUND_EXPLODE; + + AcidBallGuided() + { + SOUND_EXPLODE = "bullchicken/bc_bite3.wav"; + DETECT_RANGE = 64; + COLLIDE_RANGE = 16; + MY_SPEED = 300; + FREQ_HUNT = 1.0; + FREQ_MOVE = 0.5; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_BASE_DMG = param2; + MY_DURATION = param3; + MY_AOE = param4; + FIRST_TARG = param5; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + SetRace(GetEntityRace(MY_OWNER)); + if (!(OWNER_ISPLAYER)) + { + MY_TARGET = GetEntityProperty(MY_OWNER, "scriptvar"); + } + if ((OWNER_ISPLAYER)) + { + MY_TARGET = GetEntityProperty(MY_OWNER, "target"); + } + if ((IsEntityAlive(FIRST_TARG))) + { + MY_TARGET = FIRST_TARG; + } + if (!(IsEntityAlive(MY_TARGET))) + { + find_new_target(); + } + MY_DEST = GetEntityOrigin(MY_TARGET); + MY_DURATION("go_splodie"); + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.01, "hunt_cycle"); + ScheduleDelayedEvent(0.1, "move_cycle"); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, MY_SPEED, 0)); + } + + void OnSpawn() override + { + SetName("acid ball"); + SetHealth(30); + SetFly(true); + SetWidth(32); + SetHeight(32); + SetModel("weapons/projectiles.mdl"); + PLAYING_DEAD = 1; + SetMonsterClip(0); + EmitSound(GetOwner(), 0, "bullchicken/bc_attack3.wav", 10); + SetModelBody(0, 6); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 16, -1, -1); + SetIdleAnim("idle_icebolt"); + SetSolid("none"); + SetProp(GetOwner(), "scale", 2.0); + } + + void hunt_cycle() + { + if (!(IS_ACTIVE)) return; + FREQ_HUNT("hunt_cycle"); + if (!(IsEntityAlive(MY_TARGET))) + { + find_new_target(); + } + if (!(IsEntityAlive(MY_TARGET))) + { + string OWNER_ANG = GetEntityAngles(MY_OWNER); + SetAngles("face"); + MY_DEST = /* TODO: $relpos */ $relpos(0, 1000, 0); + } + else + { + MY_DEST = GetEntityOrigin(MY_TARGET); + } + float RND_FB = Random(0, 64); + float RND_RL = Random(-64, 64); + float RND_UD = Random(0, 64); + MY_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(RND_RL, RND_FB, RND_UD)); + if (PREV_POV != "PREV_POV") + { + if (GetMonsterProperty("origin") == PREV_POV) + { + } + go_splodie("stuck"); + } + PREV_POV = GetMonsterProperty("origin"); + string HIT_WALL = TraceLine(GetMonsterProperty("origin"), MY_DEST); + if (Distance(GetMonsterProperty("origin"), HIT_WALL) < COLLIDE_RANGE) + { + go_splodie("hitwall"); + } + string FLOOR_Z = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + string FLOOR_ORG = GetMonsterProperty("origin"); + FLOOR_ORG = "z"; + if (!(Distance(GetMonsterProperty("origin"), FLOOR_ORG) < COLLIDE_RANGE)) return; + go_splodie("hitground"); + } + + void move_cycle() + { + if (!(IS_ACTIVE)) return; + FREQ_MOVE("move_cycle"); + if (GetEntityRange(MY_TARGET) < DETECT_RANGE) + { + go_splodie("hittarget"); + } + SetMoveDest(MY_DEST); + MY_DEST += /* TODO: $relvel */ $relvel(0, MY_SPEED, 0); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, MY_SPEED, 0)); + } + + void find_new_target() + { + string TARGET_LIST = FindEntitiesInSphere("enemy", 1024); + if (GetTokenCount(TARGET_LIST, ";") > 0) + { + ScrambleTokens(TARGET_LIST, ";"); + MY_TARGET = GetToken(TARGET_LIST, 0, ";"); + } + MY_DEST = GetEntityOrigin(MY_TARGET); + if ((IsEntityAlive(MY_TARGET))) return; + string OWNER_ANG = GetEntityAngles(MY_OWNER); + SetAngles("face"); + } + + void go_splodie() + { + if (MY_LIGHT_SCRIPT != "MY_LIGHT_SCRIPT") + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + } + SetModel("none"); + XDoDamage(GetMonsterProperty("origin"), MY_AOE, MY_BASE_DMG, 0.1, MY_OWNER, MY_OWNER, "spellcasting.affliction", "acid"); + MY_DOT = MY_BASE_DMG; + MY_DOT *= 0.1; + PUSH_LIST = FindEntitiesInSphere("enemy", MY_AOE); + if (PUSH_LIST != "none") + { + for (int i = 0; i < GetTokenCount(PUSH_LIST, ";"); i++) + { + push_loop(); + } + } + EmitSound(GetOwner(), 0, SOUND_EXPLODE, 10); + ClientEvent("new", "all", "effects/sfx_acid_splash", GetEntityOrigin(GetOwner())); + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void push_loop() + { + string CUR_TARG = GetToken(PUSH_LIST, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison", 5, MY_OWNER, MY_DOT); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModel("none"); + SetIdleAnim("none"); + SetAnimFrameRate(0); + SetAlive(1); + go_splodie("slain"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/affliction_lance.as b/scripts/angelscript/monsters/summon/affliction_lance.as new file mode 100644 index 00000000..2079ca15 --- /dev/null +++ b/scripts/angelscript/monsters/summon/affliction_lance.as @@ -0,0 +1,128 @@ +#pragma context server + +#include "monsters/summon/base_aoe2.as" + +namespace MS +{ + +class AfflictionLance : CGameScript +{ + string AOE_ACTIVE; + int AOE_AFFECTS_WARY; + string AOE_DURATION; + string AOE_OWNER; + int AOE_RADIUS; + float AOE_SCAN_FREQ; + int AOE_VADJ; + string CUR_PITCH; + string DOT_POISON; + string MY_END_TIME; + string MY_FX; + string MY_OWNER; + int PLAYING_DEAD; + + AfflictionLance() + { + AOE_RADIUS = 255; + AOE_SCAN_FREQ = 1.0; + AOE_VADJ = 32; + AOE_AFFECTS_WARY = 1; + } + + void OnSpawn() override + { + SetNoPush(true); + SetWidth(2); + SetHeight(96); + SetSolid("none"); + PLAYING_DEAD = 1; + SetBlind(true); + SetFly(true); + SetGravity(0); + } + + void game_dynamically_created() + { + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 70); + MY_OWNER = param1; + string SPAWN_ORG = param2; + AOE_DURATION = param4; + SPAWN_ORG += "z"; + SetEntityOrigin(GetOwner(), SPAWN_ORG); + SetIdleAnim("axis_spin"); + PlayAnim("once", "axis_spin"); + SetScriptFlags(MY_OWNER, "add", "pole_a", "Affliction Lance", GetEntityIndex(GetOwner()), AOE_DURATION); + CUR_PITCH = /* TODO: $vec.pitch */ $vec.pitch(param3); + SetAngles("face"); + if (CUR_PITCH != -90) + { + fix_pitch_loop(); + } + AOE_OWNER = param1; + DOT_POISON = GetSkillLevel(MY_OWNER, "spellcasting.affliction"); + // svplaysound: svplaysound 1 10 ambience/steamjet1.wav + EmitSound(1, 10, "ambience/steamjet1.wav"); + ClientEvent("new", "all", "monsters/summon/affliction_lance_cl", GetEntityIndex(GetOwner()), 19.0); + MY_FX = "game.script.last_sent_id"; + MY_END_TIME = (GetGameTime() + AOE_DURATION); + } + + void fix_pitch_loop() + { + if (CUR_PITCH > 270) + { + CUR_PITCH -= 4; + } + if (CUR_PITCH < 270) + { + CUR_PITCH += 4; + } + if (CUR_PITCH < 290) + { + if (CUR_PITCH > 250) + { + } + CUR_PITCH = 270; + } + string MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + string MY_ROLL = GetEntityProperty(GetOwner(), "angles.roll"); + SetAngles("face"); + LogDebug("fix_pitch_loop CUR_PITCH"); + if (!(CUR_PITCH != 270)) return; + ScheduleDelayedEvent(0.1, "fix_pitch_loop"); + } + + void aoe_affect_target() + { + ApplyEffect(param1, "effects/dot_poison", 5.0, MY_OWNER, DOT_POISON, "polearms"); + } + + void aoe_end() + { + if (GetGameTime() >= MY_END_TIME) + { + AOE_ACTIVE = 0; + // svplaysound: svplaysound 1 0 ambience/steamjet1.wav + EmitSound(1, 0, "ambience/steamjet1.wav"); + DeleteEntity(GetOwner(), true); // fade out + } + else + { + ScheduleDelayedEvent(1, "aoe_end"); + } + } + + void transfer_location() + { + string L_NEW_POS = param1; + MY_END_TIME = (GetGameTime() + AOE_DURATION); + ClientEvent("update", "all", MY_FX, "keep_on"); + L_NEW_POS += "z"; + SetEntityOrigin(GetOwner(), L_NEW_POS); + SetScriptFlags(MY_OWNER, "edit", "pole_a", "Affliction Lance", GetEntityIndex(GetOwner()), AOE_DURATION); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/affliction_lance_cl.as b/scripts/angelscript/monsters/summon/affliction_lance_cl.as new file mode 100644 index 00000000..cfd7f54d --- /dev/null +++ b/scripts/angelscript/monsters/summon/affliction_lance_cl.as @@ -0,0 +1,88 @@ +#pragma context server + +namespace MS +{ + +class AfflictionLanceCl : CGameScript +{ + string CLOUD_VEL; + string END_TIME; + int FX_ACTIVE; + int FX_ANGS; + string FX_DURATION; + string FX_OWNER; + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + FX_ANGS = 0; + END_TIME = (GetGameTime() + FX_DURATION); + fx_loop(); + } + + void end_fx() + { + SetRepeatDelay(1.0); + if (!(GetGameTime() >= END_TIME)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "fx_loop"); + string SPR_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + string VEL_PITCH = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.pitch"); + string VEL_ROLL = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.roll"); + VEL_PITCH -= 90; + SPR_POS += "z"; + CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(VEL_PITCH, FX_ANGS, VEL_ROLL), Vector3(0, 150, 0)); + ClientEffect("tempent", "sprite", "poison_cloud.spr", SPR_POS, "setup_cloud", "update_cloud"); + SPR_POS += "z"; + CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(VEL_PITCH, FX_ANGS, 0), Vector3(0, -150, 0)); + ClientEffect("tempent", "sprite", "poison_cloud.spr", SPR_POS, "setup_cloud", "update_cloud"); + FX_ANGS += 10; + if (!(FX_ANGS > 359)) return; + FX_ANGS = 0; + } + + void update_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + CUR_SCALE += 0.01; + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 150); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void keep_on() + { + END_TIME = (GetGameTime() + FX_DURATION); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/bandit_boss_fire_wall.as b/scripts/angelscript/monsters/summon/bandit_boss_fire_wall.as new file mode 100644 index 00000000..cc667dcb --- /dev/null +++ b/scripts/angelscript/monsters/summon/bandit_boss_fire_wall.as @@ -0,0 +1,169 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class BanditBossFireWall : CGameScript +{ + int FIRE_DURATION; + string FLAME_ANGLE; + string FLAME_POSITION; + int FLAMING; + int HEIGHT; + int I_DO_FIRE_DAMAGE; + string MY_BASE_DMG; + string MY_OWNER; + int PLAYING_DEAD; + int TIME_LIVE; + int WIDTH; + + BanditBossFireWall() + { + I_DO_FIRE_DAMAGE = 1; + TIME_LIVE = 30; + Precache("fire1_fixed.spr"); + HEIGHT = 60; + WIDTH = 2; + } + + void OnRepeatTimer() + { + SetRepeatDelay(6); + if ((FLAMING)) + { + } + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", 7); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(Random(0.0, 0.5)); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(Random(0.0, 0.5)); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void flames_start() + { + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", 7); + FLAMING = 1; + } + + void OnSpawn() override + { + PLAYING_DEAD = 1; + SetName("Fire Wall"); + SetHealth(1); + SetInvincible(true); + SetSolid("none"); + SetFOV(90); + SetWidth(32); + SetHeight(32); + SetRoam(false); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetBloodType("none"); + SetModel("none"); + ScheduleDelayedEvent(2, "flames_start"); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_BASE_DMG = param3; + FIRE_DURATION = 10; + FIRE_DURATION("firewall_death"); + StoreEntity("ent_expowner"); + SetAngles("face.y"); + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), param2); + } + + void flames_attack() + { + SetRepeatDelay(0.5); + if (!(FLAMING)) return; + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 96, MY_BASE_DMG, 1.0, 0); + DoDamage(/* TODO: $relpos */ $relpos(0, 96, 0), 96, MY_BASE_DMG, 1.0, 0); + DoDamage(/* TODO: $relpos */ $relpos(0, -96, 0), 96, MY_BASE_DMG, 1.0, 0); + } + + void firewall_death() + { + FLAMING = 0; + firewall_end_cl(); + SetAlive(0); + DeleteEntity(GetOwner()); + } + + void client_activate() + { + FLAME_POSITION = param1; + FLAME_ANGLE = Vector3(0, param2, 0); + ScheduleDelayedEvent(2, "flames_start"); + TIME_LIVE("firewall_end_cl"); + } + + void firewall_end_cl() + { + RemoveScript(); + } + + void flames_shoot() + { + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + int x = RandomInt(-30, 30); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + int x = RandomInt(-96, 96); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + int x = RandomInt(-192, 192); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + } + + void setup_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.6, 1.0)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.1, 1.0)); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/barrier.as b/scripts/angelscript/monsters/summon/barrier.as new file mode 100644 index 00000000..06c70ef0 --- /dev/null +++ b/scripts/angelscript/monsters/summon/barrier.as @@ -0,0 +1,150 @@ +#pragma context server + +namespace MS +{ + +class Barrier : CGameScript +{ + string ALWAYS_PUSH; + int AM_BLOCKING; + string AM_INVISIBLE; + string AM_SILENT; + string BARRIER_SCRIPT_IDX; + string CL_DURATION; + int MY_BASE_DAMAGE; + string MY_DURATION; + string MY_OWNER; + string MY_RADIUS; + int PLAYING_DEAD; + string SCAN_TARGS; + string SILENT_EXIT; + string SPRITE_COLOR; + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_RADIUS = param2; + MY_BASE_DAMAGE = 0; + if (param3 == 1) + { + AM_SILENT = 1; + } + if (param4 == 1) + { + AM_INVISIBLE = 1; + } + if (param5 == 1) + { + SILENT_EXIT = 1; + } + if (param6 != "PARAM6") + { + MY_BASE_DAMAGE = param6; + } + if (param7 == 1) + { + ALWAYS_PUSH = 1; + } + if (param8 != "PARAM8") + { + MY_DURATION = param8; + CL_DURATION = param8; + CL_DURATION += 2.0; + PARAM8("remove_barrier"); + } + if (MY_BASE_DAMAGE == 0) + { + SPRITE_COLOR = Vector3(0, 0, 255); + } + if (MY_BASE_DAMAGE > 0) + { + SPRITE_COLOR = Vector3(255, 0, 0); + } + if (!(AM_INVISIBLE)) + { + ClientEvent("new", "all", "monsters/summon/barrier_cl", GetEntityIndex(MY_OWNER), MY_RADIUS, SPRITE_COLOR, CL_DURATION); + BARRIER_SCRIPT_IDX = "game.script.last_sent_id"; + } + AM_BLOCKING = 1; + ScheduleDelayedEvent(0.25, "scan_loop"); + } + + void OnSpawn() override + { + SetName("Magical Barrier"); + SetModel("null.mdl"); + SetIdleAnim("none"); + SetNoPush(true); + SetHealth(9000); + SetInvincible(true); + SetWidth(8); + SetHeight(8); + SetSolid("none"); + SetRace("beloved"); + PLAYING_DEAD = 1; + } + + void scan_loop() + { + if (!(AM_BLOCKING)) return; + if (!(IsEntityAlive(MY_OWNER))) return; + if (!((MY_OWNER !is null))) return; + ScheduleDelayedEvent(0.5, "scan_loop"); + string SCAN_ORG = GetEntityOrigin(GetOwner()); + SCAN_ORG += "z"; + SCAN_TARGS = FindEntitiesInSphere("any", MY_RADIUS); + if (!(SCAN_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(SCAN_TARGS, ";"); i++) + { + affect_targets(); + } + } + + void affect_targets() + { + string CUR_TARG = GetToken(SCAN_TARGS, i, ";"); + int DO_PUSH = 0; + if (GetRelationship(CUR_TARG) == "enemy") + { + int DO_PUSH = 1; + } + if ((ALWAYS_PUSH)) + { + if (GetEntityIndex(CUR_TARG) != MY_OWNER) + { + } + int DO_PUSH = 1; + } + if (!(DO_PUSH)) return; + if (MY_BASE_DAMAGE > 0) + { + DoDamage(CUR_TARGET, "direct", MY_BASE_DAMAGE, 1.0, MY_OWNER); + } + string TARGET_ORG = GetEntityOrigin(CUR_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + if (!(AM_SILENT)) + { + EmitSound(GetOwner(), 0, "doors/aliendoor3.wav", 10); + } + SetVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + } + + void remove_barrier() + { + AM_BLOCKING = 0; + ClientEvent("update", "all", BARRIER_SCRIPT_IDX, "clear_sprites"); + if (!(SILENT_EXIT)) + { + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + } + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/barrier_cl.as b/scripts/angelscript/monsters/summon/barrier_cl.as new file mode 100644 index 00000000..e779b83a --- /dev/null +++ b/scripts/angelscript/monsters/summon/barrier_cl.as @@ -0,0 +1,89 @@ +#pragma context server + +namespace MS +{ + +class BarrierCl : CGameScript +{ + string CL_COLOR; + string CL_DURATION; + string CL_RADIUS; + string CYCLE_ANGLE; + int GO_AWAY; + int TOTAL_OFS; + string sfx.npcid; + + void client_activate() + { + sfx.npcid = param1; + CL_RADIUS = param2; + CL_COLOR = param3; + CL_DURATION = param4; + CL_DURATION("remove_me"); + ScheduleDelayedEvent(0.1, "spriteify"); + } + + void spriteify() + { + TOTAL_OFS = 64; + for (int i = 0; i < 36; i++) + { + createsprite(); + } + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + if (CYCLE_ANGLE == "CYCLE_ANGLE") + { + CYCLE_ANGLE = 0; + } + CYCLE_ANGLE += 10; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, CL_RADIUS, 36)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", l.pos, "setup_sprite1_sparkle", "sprite_update"); + } + + void setup_sprite1_sparkle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 90.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendercolor", CL_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void sprite_update() + { + if (!(GO_AWAY)) return; + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 400)); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", -4.0); + } + + void clear_sprites() + { + GO_AWAY = 1; + } + + void remove_me() + { + GO_AWAY = 1; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/base_aoe.as b/scripts/angelscript/monsters/summon/base_aoe.as new file mode 100644 index 00000000..05d9fe06 --- /dev/null +++ b/scripts/angelscript/monsters/summon/base_aoe.as @@ -0,0 +1,134 @@ +#pragma context server + +namespace MS +{ + +class BaseAoe : CGameScript +{ + int AOE_DMG; + int AOE_DMG_FREQ; + string AOE_DMG_TYPE; + int AOE_FREQ; + string AOE_FRIEND_FOE; + string AOE_ISPLAYER; + int AOE_RADIUS; + string AOE_TOKENS; + string GAME_PVP; + int IS_ACTIVE; + + BaseAoe() + { + AOE_RADIUS = 256; + AOE_DMG_FREQ = 0; + AOE_DMG = 10; + AOE_DMG_TYPE = "fire"; + AOE_FREQ = 0; + AOE_FRIEND_FOE = "enemy"; + } + + void OnSpawn() override + { + GAME_PVP = "game.pvp"; + IS_ACTIVE = 1; + if (AOE_FREQ > 0) + { + ScheduleDelayedEvent(0.1, "aoe_scan_loop"); + } + if (AOE_DMG_FREQ > 0) + { + ScheduleDelayedEvent(0.1, "aoe_dmg_loop"); + } + ScheduleDelayedEvent(0.1, "get_skill"); + } + + void get_skill() + { + AOE_ISPLAYER = IsValidPlayer(MY_OWNER); + if (ACTIVE_SKILL == "ACTIVE_SKILL") + { + } + } + + void aoe_scan_loop() + { + if (!(IS_ACTIVE)) return; + AOE_FREQ("aoe_scan_loop"); + aoe_applyeffect_rad(); + } + + void aoe_dmg_loop() + { + if (!(IS_ACTIVE)) return; + AOE_DMG_FREQ("aoe_dmg_loop"); + aoe_dodamage_rad(); + } + + void aoe_applyeffect_rad() + { + AOE_TOKENS = ""; + string AOE_SCAN_POS = GetEntityOrigin(GetOwner()); + AOE_SCAN_POS += "z"; + AOE_TOKENS = FindEntitiesInSphere("any", AOE_RADIUS); + if (!(AOE_TOKENS != "none")) return; + string N_TOKENS = GetTokenCount(AOE_TOKENS, ";"); + if (!(N_TOKENS > 0)) return; + if (AOE_FRIEND_FOE == "enemy") + { + for (int i = 0; i < N_TOKENS; i++) + { + aoe_apply_loop(); + } + } + if (AOE_FRIEND_FOE == "ally") + { + for (int i = 0; i < N_TOKENS; i++) + { + aoe_applyeffect_rad_check_friendly(); + } + } + } + + void aoe_apply_loop() + { + string CUR_TARGET = GetToken(AOE_TOKENS, i, ";"); + if (!(IsEntityAlive(CUR_TARGET))) return; + if (!(/* TODO: $can_damage */ $can_damage(CUR_TARGET, MY_OWNER))) return; + apply_aoe_effect(CUR_TARGET); + } + + void aoe_applyeffect_rad_check_friendly() + { + string CUR_TARGET = GetToken(AOE_TOKENS, i, ";"); + if (GetRelationship(MY_OWNER) == "ally") + { + int DO_EFFECT = 1; + } + if ((AOE_ISPLAYER)) + { + if ((IsValidPlayer(CUR_TARGET))) + { + int DO_EFFECT = 1; + } + } + if (!(DO_EFFECT)) return; + apply_aoe_effect(CUR_TARGET); + } + + void aoe_dodamage_rad() + { + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), AOE_RADIUS, AOE_DMG, 0, MY_OWNER, MY_OWNER, ACTIVE_SKILL, AOE_DMG_TYPE); + } + + void aoe_end() + { + IS_ACTIVE = 0; + if (MY_SCRIPT_IDX > 0) + { + ClientEffect("remove", "all", MY_SCRIPT_IDX); + } + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/base_aoe2.as b/scripts/angelscript/monsters/summon/base_aoe2.as new file mode 100644 index 00000000..6e49ab0e --- /dev/null +++ b/scripts/angelscript/monsters/summon/base_aoe2.as @@ -0,0 +1,159 @@ +#pragma context server + +namespace MS +{ + +class BaseAoe2 : CGameScript +{ + int AOE_ACTIVE; + int AOE_FRIENDLY; + string AOE_OWNER; + float AOE_SCAN_FREQ; + string AOE_SCAN_TYPE; + int AOE_VADJ; + int AOE_VULNERABLE; + int PLAYING_DEAD; + + BaseAoe2() + { + AOE_SCAN_TYPE = "dodamage"; + AOE_SCAN_FREQ = 0.5; + AOE_FRIENDLY = 0; + AOE_VULNERABLE = 0; + AOE_VADJ = 0; + } + + void OnSpawn() override + { + if ((AOE_VULNERABLE)) return; + SetModel("null.mdl"); + SetInvincible(true); + SetRace("beloved"); + SetNoPush(true); + SetGravity(0); + PLAYING_DEAD = 1; + } + + void game_dynamically_created() + { + ScheduleDelayedEvent(0.01, "aoe_start"); + } + + void aoe_start() + { + if ((IsEntityAlive(MY_OWNER))) + { + AOE_OWNER = MY_OWNER; + } + if (!(AOE_VULNERABLE)) + { + SetRace(GetEntityRace(AOE_OWNER)); + } + AOE_ACTIVE = 1; + aoe_scan_loop(); + AOE_DURATION("aoe_end"); + } + + void aoe_scan_loop() + { + if (!(AOE_ACTIVE)) return; + SetRepeatDelay(AOE_SCAN_FREQ); + if (AOE_SCAN_TYPE == "dodamage") + { + DoDamage(/* TODO: $relpos */ $relpos(0, 0, AOE_VADJ), AOE_RADIUS, 0, 1.0, 0); + } + if ((AOE_SCAN_TYPE).findFirst("sphere") >= 0) + { + if ((AOE_FRIENDLY)) + { + AOE_TARGET_LIST = /* TODO: $get_isphere */ $get_isphere("ally", AOE_RADIUS); + } + else + { + AOE_TARGET_LIST = /* TODO: $get_isphere */ $get_isphere("any", AOE_RADIUS); + } + if (AOE_TARGET_LIST != "none") + { + } + for (int i = 0; i < GetTokenCount(AOE_TARGET_LIST, ";"); i++) + { + aoe_affect_targets(); + } + } + } + + void aoe_affect_targets() + { + string L_TARG = GetToken(AOE_TARGET_LIST, i, ";"); + string L_TARG = /* TODO: $get_by_idx */ $get_by_idx(L_TARG, "id"); + string L_DO_EFFECT = "func_filter_targs"(L_TARG); + if (!(L_DO_EFFECT)) return; + aoe_affect_target(L_TARG); + } + + void game_dodamage() + { + string L_TARG = param2; + string L_DO_EFFECT = "func_filter_targs"(L_TARG); + if (!(L_DO_EFFECT)) return; + aoe_affect_target(L_TARG); + } + + void aoe_end() + { + AOE_ACTIVE = 0; + } + + void func_filter_targs() + { + string L_TARG = param1; + int L_DO_EFFECT = 1; + if (!(AOE_FRIENDLY)) + { + if ((IsValidPlayer(AOE_OWNER))) + { + if ((IsValidPlayer(L_TARG))) + { + if (!("game.pvp")) + { + int L_DO_EFFECT = 0; + } + } + } + string L_RELATE = GetRelationship(AOE_OWNER); + if (L_RELATE == "ally") + { + int L_DO_EFFECT = 0; + } + else + { + if (L_RELATE == "neutral") + { + int L_DO_EFFECT = 0; + } + } + if (!(AOE_AFFECTS_WARY)) + { + } + if (L_RELATE == "wary") + { + int L_DO_EFFECT = 0; + } + } + if (AOE_SCAN_TYPE == "rsphere") + { + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = GetEntityOrigin(L_TARG); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (TRACE_LINE != TRACE_END) + { + } + int L_DO_EFFECT = 0; + } + return; + return; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/base_summon.as b/scripts/angelscript/monsters/summon/base_summon.as new file mode 100644 index 00000000..1ea10d8b --- /dev/null +++ b/scripts/angelscript/monsters/summon/base_summon.as @@ -0,0 +1,688 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class BaseSummon : CGameScript +{ + string ACT_NAME; + string ANIM_RUN; + string ANIM_RUN_BASE; + string ANIM_WALK; + string ANIM_WALK_BASE; + string AS_LAST_ORIGIN; + int CAN_RETALIATE; + int CYCLED_UP; + string CYCLE_TIME; + float CYCLE_TIME_BATTLE; + float CYCLE_TIME_IDLE; + float CYCLE_TIME_NPC; + int DEFEND_MODE; + int DEFEND_RANGE; + int FOLLOW_MASTER; + int GUARD_MODE; + string GUARD_POS; + int HOVER_CLOSE; + string HOVER_DISTANCE; + int HOVER_FAR; + int IGNORE_TARGETS; + string IS_HIRED; + string I_R_PET; + int KILL_MODE; + string NAMEPREFIX; + string NO_STUCK_CHECKS; + string NPCATK_TARGET; + string NPC_ATTACK_TARGET; + int NPC_FORCED_MOVEDEST; + string NPC_MOVE_TARGET; + string OWNER_TARGET; + int STUCK_CHECKING; + int SUMMON_CIRCLE_INDEX; + string SUMMON_LAST_TARG; + string SUMMON_LAST_TARG_NOTICE; + string SUMMON_MASTER; + int SUMMON_RUN_DIST; + int SUMMON_VICINITY; + string SUM_REPORT_SUFFIX; + string SUM_SAY_ATTACK; + string SUM_SAY_COME; + string SUM_SAY_DEATH; + string SUM_SAY_DEFEND; + string SUM_SAY_GUARD; + string SUM_SAY_HUNT; + + BaseSummon() + { + SUMMON_CIRCLE_INDEX = 3; + SUMMON_RUN_DIST = 256; + SUM_SAY_COME = "Coming sir."; + SUM_SAY_ATTACK = "Attacking target."; + SUM_SAY_HUNT = "Hunting, sir."; + SUM_SAY_DEFEND = "Defending you."; + SUM_SAY_DEATH = "Arrrrrrrrgghh!"; + SUM_SAY_GUARD = "I shall guard this position with my life."; + SUM_REPORT_SUFFIX = ", sir."; + ANIM_WALK_BASE = "walk"; + ANIM_RUN_BASE = "run"; + DEFEND_RANGE = 256; + CAN_RETALIATE = 0; + HOVER_FAR = 128; + HOVER_CLOSE = 64; + Precache("xflare1.spr"); + CYCLE_TIME_BATTLE = 0.1; + CYCLE_TIME_IDLE = 0.1; + CYCLE_TIME_NPC = 0.1; + SUMMON_VICINITY = 400; + } + + void OnSpawn() override + { + SetMonsterClip(0); + if ((StringToLower(GetMapName())).findFirst("sfor") >= 0) + { + SetMonsterClip(1); + } + CatchSpeech("basesummon_say_come", "come"); + CatchSpeech("basesummon_say_defend", "defend"); + CatchSpeech("basesummon_say_attacktarget", "kill"); + CatchSpeech("basesummon_say_attackall", "attack"); + CatchSpeech("basesummon_say_report", "status"); + CatchSpeech("basesummon_say_dismiss", "dismiss"); + CatchSpeech("basesummon_say_guard", "guard"); + SetMenuAutoOpen(1); + summon_cycle(); + summon_spawn(); + } + + void OnPostSpawn() override + { + HOVER_DISTANCE = HOVER_FAR; + } + + void game_dynamically_created() + { + SUMMON_MASTER = param1; + if ((SUMMON_UNIQUE)) + { + CallExternal(SUMMON_MASTER, "ext_summon_unique", SUMMON_UNIQUE_TAG); + } + if ((IsValidPlayer(SUMMON_MASTER))) + { + IS_HIRED = 1; + I_R_PET = 1; + } + ScheduleDelayedEvent(1.0, "bs_set_defend_mode"); + pre_name_set(); + if (!(IS_COMPANION)) + { + ACT_NAME = GetEntityName(GetOwner()); + NAMEPREFIX = GetEntityName(SUMMON_MASTER); + NAMEPREFIX += "'s"; + NAMEPREFIX += " "; + NAMEPREFIX += GetEntityName(GetOwner()); + SetName(NAMEPREFIX); + } + else + { + ext_companion_update_name(); + } + ScheduleDelayedEvent(0.1, "summon_circle"); + ScheduleDelayedEvent(0.5, "basesummon_delayedspawneffect"); + string OUT_PAR1 = param1; + string OUT_PAR2 = param2; + string OUT_PAR3 = param3; + string OUT_PAR4 = param4; + string OUT_PAR5 = param5; + string OUT_PAR6 = param6; + string OUT_PAR7 = param7; + string OUT_PAR8 = param8; + string OUT_PAR9 = param9; + summon_summoned(OUT_PAR1, OUT_PAR2, OUT_PAR3, OUT_PAR4, OUT_PAR5, OUT_PAR6, OUT_PAR7, OUT_PAR8, OUT_PAR9); + STUCK_CHECKING = 1; + AS_LAST_ORIGIN = GetMonsterProperty("origin"); + } + + void summon_circle() + { + string CIRCLE_POS = GetEntityOrigin(GetOwner()); + CIRCLE_POS = "z"; + ClientEvent("new", "all", "effects/sfx_summon_circle", CIRCLE_POS, SUMMON_CIRCLE_INDEX); + } + + void summon_summoned() + { + if (!(I_R_PET)) return; + LogDebug("summon_summoned help_summons"); + string TEXT = "You've Summoned your first monster"; + TEXT += "|You can control all your summons globally with the following say commands:"; + TEXT += "|all hunt"; + TEXT += "|all follow"; + TEXT += "|all vanish"; + ShowHelpTip(SUMMON_MASTER, "help_summons", "Monster Summons", TEXT); + } + + void basesummon_say_come() + { + if (param2 != "from_menu") + { + if (GetEntityIndex("ent_lastspoke") != SUMMON_MASTER) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + SetSayTextRange(1024); + if (!(SUM_NO_TALK)) + { + SayText(SUM_SAY_COME); + } + if ((IsEntityAlive(m_hAttackTarget))) + { + SendColoredMessage(SUMMON_MASTER, ACT_NAME + " disengaging battle"); + } + else + { + SendColoredMessage(SUMMON_MASTER, ACT_NAME + " following and non-agro"); + } + summon_acknowledge("follow"); + npcatk_clear_targets(); + nocatk_suspend_ai(1.0); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(SUMMON_MASTER); + bs_set_follow_mode(); + summon_come(); + } + + void basesummon_say_attacktarget() + { + if (param2 != "from_menu") + { + if (GetEntityIndex("ent_lastspoke") != SUMMON_MASTER) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + OWNER_TARGET = GetEntityProperty(SUMMON_MASTER, "target"); + if (!((OWNER_TARGET !is null))) return; + bs_set_hunt_mode(); + KILL_MODE = 1; + npcatk_clear_targets(); + if (OWNER_TARGET != GetOwner()) + { + if (GetRelationship(GetOwner()) != "ally") + { + } + npcatk_settarget(OWNER_TARGET); + } + SetSayTextRange(1024); + if (!(SUM_NO_TALK)) + { + SayText(SUM_SAY_ATTACK); + } + SendColoredMessage(SUMMON_MASTER, ACT_NAME + " attacking target"); + summon_acknowledge("attack"); + NPC_MOVE_TARGET = OWNER_TARGET; + NPC_ATTACK_TARGET = OWNER_TARGET; + SetMoveDest(NPC_MOVE_TARGET); + } + + void basesummon_say_attackall() + { + if (param2 != "from_menu") + { + if (GetEntityIndex("ent_lastspoke") != SUMMON_MASTER) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + SetSayTextRange(1024); + if (!(SUM_NO_TALK)) + { + SayText(SUM_SAY_HUNT); + } + SendColoredMessage(SUMMON_MASTER, ACT_NAME + " seeking enemies"); + summon_acknowledge("hunt"); + PlayAnim("once", ANIM_WALK); + bs_set_hunt_mode(); + if ((false)) return; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(SUMMON_MASTER); + } + + void basesummon_say_defend() + { + if (param2 != "from_menu") + { + if (GetEntityIndex("ent_lastspoke") != SUMMON_MASTER) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + SetSayTextRange(1024); + if (!(SUM_NO_TALK)) + { + SayText(SUM_SAY_DEFEND); + } + SendColoredMessage(SUMMON_MASTER, ACT_NAME + " set defensive mode"); + summon_acknowledge("defend"); + bs_set_defend_mode(); + } + + void basesummon_say_guard() + { + if (param2 != "from_menu") + { + if (GetEntityIndex("ent_lastspoke") != SUMMON_MASTER) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + SetSayTextRange(1024); + if (!(SUM_NO_TALK)) + { + SayText(SUM_SAY_GUARD); + } + SendColoredMessage(SUMMON_MASTER, ACT_NAME + " holding location"); + summon_acknowledge("stay"); + bs_set_guard_mode(); + } + + void summon_cycle() + { + ScheduleDelayedEvent(2.0, "summon_cycle"); + if (!(IS_HIRED)) return; + if (!(NO_STUCK_CHECKS)) + { + string MIN_RANGE = GetMonsterProperty("moveprox"); + MIN_RANGE += 32; + if (GetEntityRange(SUMMON_MASTER) > MIN_RANGE) + { + } + NO_STUCK_CHECKS = 1; + } + if ((GUARD_MODE)) + { + if (Distance(GetMonsterProperty("origin"), GUARD_POS) > HOVER_CLOSE) + { + } + SetMoveAnim(ANIM_WALK); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(GUARD_POS); + } + if ((FOLLOW_MASTER)) + { + if (GetEntityRange(SUMMON_MASTER) <= SUMMON_RUN_DIST) + { + if (m_hAttackTarget == "unset") + { + SetMoveAnim(ANIM_WALK); + } + } + if (GetEntityRange(SUMMON_MASTER) > SUMMON_RUN_DIST) + { + SetMoveAnim(ANIM_RUN); + } + NPC_FORCED_MOVEDEST = 1; + if (m_hAttackTarget == "unset") + { + } + SetMoveDest(SUMMON_MASTER); + } + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (m_hAttackTarget == SUMMON_MASTER) + { + NPCATK_TARGET = "unset"; + } + if (GetEntityRace(m_hAttackTarget) == "hguard") + { + if (!(KILL_MODE)) + { + } + NPCATK_TARGET = "unset"; + } + CYCLE_TIME = CYCLE_TIME_BATTLE; + CYCLED_UP = 1; + if ((DEFEND_MODE)) + { + if (GetEntityRange(param1) > DEFEND_RANGE) + { + NPCATK_TARGET = "unset"; + } + } + if ((IGNORE_TARGETS)) + { + NPCATK_TARGET = "unset"; + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((SUMMON_UNIQUE)) + { + CallExternal(SUMMON_MASTER, "ext_unsummon_unique", SUMMON_UNIQUE_TAG); + } + if (I_R_PET == 1) + { + CURRENT_SUMMONS -= 1; + } + SetSayTextRange(1024); + if (RandomInt(1, 2) == 1) + { + if (!(SUM_NO_TALK)) + { + if (SUM_SAY_DEATH != "none") + { + } + SayText(SUM_SAY_DEATH); + } + } + SendPlayerMessage(SUMMON_MASTER, "Your " + ACT_NAME + " has been slain!"); + summon_death(); + DeleteEntity(GetOwner(), true); // fade out + } + + void basesummon_say_report() + { + if (param2 != "from_menu") + { + if (GetEntityIndex("ent_lastspoke") != SUMMON_MASTER) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + string ME_HEALTH = GetMonsterHP(); + string ME_MAX_HEALTH = GetMonsterMaxHP(); + string HEALTH_STRING = ME_HEALTH; + HEALTH_STRING += "/"; + HEALTH_STRING += ME_MAX_HEALTH; + if (!(SUM_NO_TALK)) + { + if (ATK_MIN == "ATK_MIN") + { + string ATK_MIN = DMG_MAX; + } + string ME_STRENGTH = ATK_MIN; + ME_STREGTH += "/strike"; + SetSayTextRange(1024); + SayText("My health is " + HEALTH_STRING + "and my attack strength is " + ME_STRENGTH + SUM_REPORT_SUFFIX); + } + summon_acknowledge("report"); + SendColoredMessage(SUMMON_MASTER, /* TODO: $stradd */ $stradd(ACT_NAME, ":") + "Health " + int(HEALTH_STRING) + "Attack " + int(SUMMON_DMG_BASE)); + } + + void basesummon_say_dismiss() + { + if ((I_R_COMPANION)) return; + if (!(I_R_PET)) return; + if (param2 != "from_menu") + { + if (GetEntityIndex("ent_lastspoke") != SUMMON_MASTER) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + killme(); + } + + void killme() + { + if (I_R_PET == 1) + { + CURRENT_SUMMONS -= 1; + } + summon_unsummon(); + if ((SUMMON_UNIQUE)) + { + CallExternal(SUMMON_MASTER, "ext_unsummon_unique", SUMMON_UNIQUE_TAG); + } + SetAlive(0); + DeleteEntity(GetOwner(), true); // fade out + RemoveScript(); + ClientEvent("remove", "all", GetEntityIndex(GetOwner())); + } + + void bs_set_follow_mode() + { + LogDebug("bs_set_follow_mode"); + if (!(I_R_COMPANION)) + { + SetRoam(true); + } + KILL_MODE = 0; + NO_STUCK_CHECKS = 0; + ANIM_WALK = ANIM_WALK_BASE; + ANIM_RUN = ANIM_RUN_BASE; + SetMoveAnim(ANIM_RUN); + GUARD_MODE = 0; + IGNORE_TARGETS = 1; + DEFEND_MODE = 0; + FOLLOW_MASTER = 1; + HOVER_DISTANCE = HOVER_CLOSE; + } + + void bs_set_hunt_mode() + { + LogDebug("bs_set_hunt_mode"); + if (!(I_R_COMPANION)) + { + SetRoam(true); + } + KILL_MODE = 0; + NO_STUCK_CHECKS = 0; + ANIM_WALK = ANIM_WALK_BASE; + ANIM_RUN = ANIM_RUN_BASE; + SetMoveAnim(ANIM_RUN); + GUARD_MODE = 0; + IGNORE_TARGETS = 0; + DEFEND_MODE = 0; + FOLLOW_MASTER = 0; + } + + void bs_set_defend_mode() + { + LogDebug("bs_set_defend_mode"); + SetRoam(false); + NO_STUCK_CHECKS = 0; + KILL_MODE = 0; + ANIM_WALK = ANIM_WALK_BASE; + ANIM_RUN = ANIM_RUN_BASE; + SetMoveAnim(ANIM_RUN); + GUARD_MODE = 0; + IGNORE_TARGETS = 0; + DEFEND_MODE = 1; + FOLLOW_MASTER = 1; + HOVER_DISTANCE = HOVER_FAR; + } + + void bs_set_guard_mode() + { + LogDebug("bs_set_guard_mode"); + SetRoam(false); + KILL_MODE = 0; + NO_STUCK_CHECKS = 1; + SetMoveAnim(ANIM_IDLE); + ANIM_WALK = ANIM_IDLE; + ANIM_RUN = ANIM_IDLE; + GUARD_POS = GetMonsterProperty("origin"); + GUARD_MODE = 1; + IGNORE_TARGETS = 0; + DEFEND_MODE = 0; + FOLLOW_MASTER = 0; + HOVER_DISTANCE = HOVER_FAR; + } + + void game_menu_getoptions() + { + if (!(param1 == SUMMON_MASTER)) return; + if (!(IS_HIRED)) return; + if (!(IsEntityAlive(GetOwner()))) return; + if ((COMPANION_CONFIRM_DISMISS)) + { + ShowHelpTip(param1, "generic", "DISMISS PET", "Are you sure you want to abandon your pet?|Remember, you won't be able to get the pet back again."); + SendColoredMessage(param1, "Confirm release of pet..."); + string reg.mitem.title = "Yes"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "from_menu"; + string reg.mitem.callback = "companion_release"; + string reg.mitem.title = "No"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "from_menu"; + string reg.mitem.callback = "companion_release_cancel"; + } + if ((COMPANION_CONFIRM_DISMISS)) return; + string reg.mitem.title = "Report Status"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "from_menu"; + string reg.mitem.callback = "basesummon_say_report"; + if (m_hAttackTarget == "unset") + { + string reg.mitem.title = "Follow (Do Not Engage)"; + } + else + { + string reg.mitem.title = "Disengage"; + } + string reg.mitem.type = "callback"; + string reg.mitem.data = "from_menu"; + string reg.mitem.callback = "basesummon_say_come"; + string reg.mitem.title = "Defend"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "from_menu"; + string reg.mitem.callback = "basesummon_say_defend"; + string reg.mitem.title = "Hunt"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "from_menu"; + string reg.mitem.callback = "basesummon_say_attackall"; + string reg.mitem.title = "Stay Here"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "from_menu"; + string reg.mitem.callback = "basesummon_say_guard"; + if (!(I_R_PET)) return; + if (!(I_R_COMPANION)) + { + string reg.mitem.title = "Unsummon"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "from_menu"; + string reg.mitem.callback = "basesummon_say_dismiss"; + } + else + { + string reg.mitem.title = "Unsummon"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "from_menu"; + string reg.mitem.callback = "companion_unsummon"; + string reg.mitem.title = "Abandon Pet"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "from_menu"; + string reg.mitem.callback = "companion_abandon"; + } + } + + void bs_unsolid() + { + SetSolid("none"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetAnimFrameRate(0.0); + SetAnimMoveSpeed(0.0); + SetMoveSpeed(0.0); + } + + void bs_attempt_solid() + { + string MIN_RANGE = GetMonsterProperty("moveprox"); + MIN_RANGE += 15; + if (!(GetEntityRange(SUMMON_MASTER) > MIN_RANGE)) return; + SetSolid("box"); + SetProp(GetOwner(), "rendermode", 0); + SetAnimFrameRate(1.0); + SetAnimMoveSpeed(1.0); + SetMoveSpeed(1.0); + } + + void npc_monster_stuck() + { + string MIN_RANGE = GetMonsterProperty("moveprox"); + MIN_RANGE += 15; + if (!(GetEntityRange(SUMMON_MASTER) < MIN_RANGE)) return; + bs_unsolid(); + npcatk_suspend_ai(2.0); + ScheduleDelayedEvent(2.0, "bs_attempt_solid"); + } + + void npc_found_new_target() + { + string TARG_NAME = GetEntityProperty(param1, "name.full"); + float LASTN_DIFF = GetGameTime(); + LASTN_DIFF -= SUMMON_LAST_TARG_NOTICE; + if (!(LASTN_DIFF > 5)) return; + SUMMON_LAST_TARG_NOTICE = GetGameTime(); + if (!(SUMMON_LAST_TARG != param1)) return; + if ((I_R_PET)) + { + SendPlayerMessage(SUMMON_MASTER, "Your " + ACT_NAME + "has targeted " + TARG_NAME); + } + SUMMON_LAST_TARG = param1; + } + + void my_target_died() + { + if ((KILL_MODE)) + { + KILL_MODE = 0; + bs_set_defend_mode(); + } + } + + void bs_global_command() + { + if (!(param1 == SUMMON_MASTER)) return; + string CALLER_ID = param1; + string IN_COMMAND = param2; + if (IN_COMMAND == "follow") + { + basesummon_say_come(CALLER_ID, "from_menu"); + } + if (IN_COMMAND == "defend") + { + basesummon_say_defend(CALLER_ID, "from_menu"); + } + if (IN_COMMAND == "kill") + { + basesummon_say_attacktarget(CALLER_ID, "from_menu"); + } + if (IN_COMMAND == "hunt") + { + basesummon_say_attackall(CALLER_ID, "from_menu"); + } + if (IN_COMMAND == "vanish") + { + basesummon_say_dismiss(CALLER_ID, "from_menu"); + } + if (IN_COMMAND == "stay") + { + basesummon_say_guard(CALLER_ID, "from_menu"); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (((SUMMON_MASTER !is null))) return; + if (!(I_R_PET)) return; + killme(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/bear1.as b/scripts/angelscript/monsters/summon/bear1.as new file mode 100644 index 00000000..9bc57398 --- /dev/null +++ b/scripts/angelscript/monsters/summon/bear1.as @@ -0,0 +1,466 @@ +#pragma context server + +#include "monsters/summon/base_summon.as" + +namespace MS +{ + +class Bear1 : CGameScript +{ + int AM_LEAPING; + int AM_STANDING; + string ANIM_ATTACK; + string ANIM_CLAW_NORM; + string ANIM_CLAW_STAND; + string ANIM_DEATH; + string ANIM_DEATH_NORM; + string ANIM_DEATH_STAND; + string ANIM_FLINCH; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_IDLE_NORM; + string ANIM_IDLE_STAND; + string ANIM_RUN; + string ANIM_RUN_BASE; + string ANIM_RUN_NORM; + string ANIM_STANDDOWN; + string ANIM_STANDUP; + string ANIM_WALK; + string ANIM_WALK_BASE; + string ANIM_WALK_NORM; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int DID_STUN; + string DMG_BASE; + float DMG_CLAW_NORM_ADJ; + float DMG_CLAW_STAND_ADJ; + int FLINCH_CHANCE; + int FLINCH_DELAY; + int FLINCH_HEALTH; + float FREQ_CHECK_STAND; + float FREQ_HOP; + float FREQ_STAND; + string HOVER_CLOSE; + string HOVER_FAR; + string HP_BASE; + string LAST_TIME_PLR_STRUCK; + int LEAP_DELAY; + int LEAP_RANGE; + int LEAP_RANGE_MAX; + string NEXT_STAND_CHECK; + int NO_STUCK_CHECKS; + int NPC_BASE_EXP; + int NPC_FORCED_MOVEDEST; + int NPC_MUST_SEE_TARGET; + string OWNER_SKILL; + string PLR_FRUSTRATED; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_DEATH2; + string SOUND_DISAPOINT; + string SOUND_GETDOWN; + string SOUND_GETUP; + string SOUND_GETUP_GROWL; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + string SOUND_SUMMON_ACKNOWLEDGE1; + string SOUND_SUMMON_ACKNOWLEDGE2; + string SOUND_SUMMON_ACKNOWLEDGE3; + string SOUND_UPSNARL; + string STAT_DMG_MAX; + string STAT_HP_MAX; + string SUMMON_CIRCLE_INDEX; + string SUMMON_DMG_BASE; + string SUMMON_UNIQUE; + string SUMMON_UNIQUE_TAG; + string SUM_NO_TALK; + + Bear1() + { + ANIM_WALK_BASE = "bear_walk"; + ANIM_RUN_BASE = "bear_run"; + if ((true)) + { + HOVER_FAR = 138; + HOVER_CLOSE = 138; + SUMMON_CIRCLE_INDEX = 13; + STAT_HP_MAX = 12000; + STAT_DMG_MAX = 400; + SUMMON_UNIQUE = 1; + SUMMON_UNIQUE_TAG = "bear1"; + SUM_NO_TALK = 1; + PLR_FRUSTRATED = 0; + } + ANIM_WALK = "bear_walk"; + ANIM_RUN = "bear_run"; + ANIM_IDLE = "bear_idle01"; + ANIM_FLINCH = "bear_flinch"; + ANIM_ATTACK = "bear_claw02"; + ANIM_DEATH = "bear_die02"; + ANIM_RUN_NORM = "bear_run"; + ANIM_WALK_NORM = "bear_walk"; + ANIM_HOP = "bear_pounce"; + ANIM_IDLE_NORM = "bear_idle01"; + ANIM_IDLE_STAND = "bear_standingidle01"; + ANIM_CLAW_STAND = "bear_claw"; + ANIM_CLAW_NORM = "bear_claw02"; + ANIM_DEATH_STAND = "bear_diestanding"; + ANIM_DEATH_NORM = "bear_die02"; + ANIM_STANDUP = "bear_standup"; + ANIM_STANDDOWN = "bear_standdown"; + DMG_CLAW_NORM_ADJ = 1.1; + DMG_CLAW_STAND_ADJ = 0.8; + ATTACK_MOVERANGE = 140; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 200; + CAN_FLINCH = 0; + FLINCH_CHANCE = 25; + FLINCH_HEALTH = 500; + FLINCH_DELAY = 10; + NPC_BASE_EXP = 0; + NPC_MUST_SEE_TARGET = 0; + FREQ_HOP = 5.0; + FREQ_CHECK_STAND = 1.0; + FREQ_STAND = Random(5, 10); + LEAP_RANGE = 256; + LEAP_RANGE_MAX = 512; + ATTACK_HITCHANCE = 90; + SOUND_SUMMON_ACKNOWLEDGE1 = "monsters/bear/c_bear_yes.wav"; + SOUND_SUMMON_ACKNOWLEDGE2 = "monsters/bear/c_bear_no.wav"; + SOUND_SUMMON_ACKNOWLEDGE3 = "monsters/bear/c_bear_slct.wav"; + SOUND_DISAPOINT = "monsters/bear/c_bear_no.wav"; + SOUND_DEATH = "monsters/bear/giantbeardeath.wav"; + SOUND_DEATH2 = "monsters/bear/giantbeardeath2.wav"; + SOUND_GETUP_GROWL = "monsters/bear/giantbeardeath2.wav"; + SOUND_GETUP = "monsters/troll/step1.wav"; + SOUND_GETDOWN = "monsters/troll/step2.wav"; + SOUND_UPSNARL = "monsters/bear/giantbearupsnarl.wav"; + SOUND_ATTACK1 = "monsters/bear/cubattack.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_ATTACK3 = "none"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_STRUCK4 = "monsters/bear/cubpain.wav"; + SOUND_STRUCK5 = "none"; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Bear Guardian"); + SetRace("human"); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetHealth(800); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(0, 5); + SetRoam(false); + SetProp(GetOwner(), "scale", 1.75); + SetWidth(100); + SetHeight(80); + } + + void OnPostSpawn() override + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE_NORM); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (m_hAttackTarget == "unset") + { + if ((AM_STANDING)) + { + if (GetGameTime() > NEXT_STAND_CHECK) + { + } + NEXT_STAND_CHECK = GetGameTime(); + NEXT_STAND_CHECK += FREQ_CHECK_STAND; + bear_getdown(); + } + } + if (!(m_hAttackTarget != "unset")) return; + if (!(m_hAttackTarget != SUMMON_MASTER)) return; + if ((AM_STANDING)) + { + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + } + if (GetGameTime() > NEXT_STAND_CHECK) + { + } + NEXT_STAND_CHECK = GetGameTime(); + NEXT_STAND_CHECK += FREQ_CHECK_STAND; + bear_getdown(); + } + if ((AM_STANDING)) return; + if (GetEntityRange(m_hAttackTarget) >= LEAP_RANGE) + { + if (GetEntityRange(m_hAttackTarget) <= LEAP_RANGE_MAX) + { + } + bear_leap(m_hAttackTarget); + } + if ((AM_LEAPING)) return; + if (!(GetGameTime() > NEXT_STAND_CHECK)) return; + NEXT_STAND_CHECK = GetGameTime(); + NEXT_STAND_CHECK += FREQ_CHECK_STAND; + if (GetEntityRange(m_hAttackTarget) <= ATTACK_RANGE) + { + if (!(AM_STANDING)) + { + } + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = TRACE_START; + TRACE_END += "z"; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + LogDebug("getup_test Distance(TRACE_START, TRACE_END)"); + if (Distance(TRACE_START, TRACE_LINE) > 128) + { + } + bear_getup(); + } + } + + void bear_getup() + { + LogDebug("bear_getup"); + EmitSound(GetOwner(), 0, SOUND_GETUP_GROWL, 10); + CAN_FLINCH = 0; + ANIM_ATTACK = ANIM_CLAW_STAND; + PlayAnim("critical", ANIM_STANDUP); + ANIM_RUN = ANIM_IDLE_STAND; + ANIM_WALK = ANIM_IDLE_STAND; + ANIM_IDLE = ANIM_IDLE_STAND; + SetMoveAnim(ANIM_IDLE_STAND); + SetIdleAnim(ANIM_IDLE_STAND); + NO_STUCK_CHECKS = 1; + AM_STANDING = 1; + ScheduleDelayedEvent(1.0, "resume_flinch"); + } + + void bear_getdown() + { + LogDebug("bear_getdown"); + CAN_FLINCH = 0; + AM_STANDING = 0; + ANIM_ATTACK = ANIM_CLAW_NORM; + PlayAnim("critical", ANIM_STANDDOWN); + ANIM_RUN = ANIM_RUN_NORM; + ANIM_WALK = ANIM_WALK_NORM; + ANIM_IDLE = ANIM_IDLE_NORM; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE_NORM); + AM_STANDING = 0; + ScheduleDelayedEvent(0.5, "resume_stuck"); + } + + void resume_stuck() + { + EmitSound(GetOwner(), 0, SOUND_GETDOWN, 10); + NO_STUCK_CHECKS = 0; + } + + void resume_flinch() + { + CAN_FLINCH = 1; + } + + void bear_leap() + { + if ((LEAP_DELAY)) return; + LEAP_DELAY = 1; + FREQ_HOP("reset_leap_delay"); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(param1); + EmitSound(GetOwner(), 0, SOUND_UPSNARL, 10); + PlayAnim("critical", ANIM_HOP); + AM_LEAPING = 1; + DID_STUN = 0; + ScheduleDelayedEvent(0.1, "bear_leap2"); + ScheduleDelayedEvent(0.5, "bear_leap_done"); + } + + void reset_leap_delay() + { + LEAP_DELAY = 0; + } + + void bear_leap_done() + { + AM_LEAPING = 0; + } + + void bear_leap2() + { + bear_leap_scan(); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 500, 100)); + } + + void bear_leap_scan() + { + if (!(AM_LEAPING)) return; + ScheduleDelayedEvent(0.1, "bear_leap_scan"); + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + if (!(DID_STUN)) + { + } + DID_STUN = 1; + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(0, 100, 100)); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void attack_sound() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void standclaw_1() + { + attack_sound(); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + string L_DMG = DMG_BASE; + L_DMG *= DMG_CLAW_NORM_ADJ; + npcatk_dodamage(m_hAttackTarget, "direct", L_DMG, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + } + + void standclaw_2() + { + attack_sound(); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + string L_DMG = DMG_BASE; + L_DMG *= DMG_CLAW_STAND_ADJ; + npcatk_dodamage(m_hAttackTarget, "direct", L_DMG, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + } + + void crawlclaw_1() + { + attack_sound(); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + string L_DMG = DMG_BASE; + L_DMG *= DMG_CLAW_NORM_ADJ; + npcatk_dodamage(m_hAttackTarget, "direct", L_DMG, ATTACK_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + } + + void summon_summoned() + { + OWNER_SKILL = GetSkillLevel(SUMMON_MASTER, "spellcasting"); + OWNER_SKILL *= 0.01; + LogDebug("summon_summoned OWNER_SKILL"); + DMG_BASE = /* TODO: $ratio */ $ratio(OWNER_SKILL, 1, STAT_DMG_MAX); + HP_BASE = /* TODO: $ratio */ $ratio(OWNER_SKILL, 1, STAT_HP_MAX); + SUMMON_DMG_BASE = DMG_BASE; + SetHealth(HP_BASE); + } + + void summon_acknowledge() + { + if (param1 == "stay") + { + int AM_DISAPOINT = 1; + } + if (param1 == "follow") + { + int AM_DISAPOINT = 1; + } + if (param1 == "report") + { + int ME_STRENGTH = int(SUMMON_DMG_BASE); + ME_STREGTH += "/strike"; + int ME_HEALTH = int(GetMonsterHP()); + int ME_MAX_HEALTH = int(GetMonsterMaxHP()); + string HEALTH_STRING = ME_HEALTH; + HEALTH_STRING += "/"; + HEALTH_STRING += ME_MAX_HEALTH; + SetSayTextRange(1024); + SayText("Health: " + HEALTH_STRING + "Attack: " + ME_STRENGTH); + } + if ((AM_DISAPOINT)) + { + EmitSound(GetOwner(), 0, SOUND_DISAPOINT, 10); + } + else + { + // PlayRandomSound from: SOUND_SUMMON_ACKNOWLEDGE1, SOUND_SUMMON_ACKNOWLEDGE2, SOUND_SUMMON_ACKNOWLEDGE3 + array sounds = {SOUND_SUMMON_ACKNOWLEDGE1, SOUND_SUMMON_ACKNOWLEDGE2, SOUND_SUMMON_ACKNOWLEDGE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnDamage(int damage) override + { + if (!(m_hAttackTarget == "unset")) return; + if (!(IsValidPlayer(param1))) return; + if (!(GetEntityRange(param1) < 128)) return; + SetMoveDest(GetEntityIndex(param1)); + ScheduleDelayedEvent(0.1, "run_anim"); + // PlayRandomSound from: SOUND_SUMMON_ACKNOWLEDGE1, SOUND_SUMMON_ACKNOWLEDGE2, SOUND_SUMMON_ACKNOWLEDGE3 + array sounds = {SOUND_SUMMON_ACKNOWLEDGE1, SOUND_SUMMON_ACKNOWLEDGE2, SOUND_SUMMON_ACKNOWLEDGE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(param1 != SUMMON_MASTER)) return; + if (LAST_TIME_PLR_STRUCK == "LAST_TIME_PLR_STRUCK") + { + LAST_TIME_PLR_STRUCK = GetGameTime(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + float FIVE_SECS_AGO = GetGameTime(); + FIVE_SECS_AGO -= 10.0; + LogDebug("anti-troll FIVE_SECS_AGO vs. LAST_TIME_PLR_STRUCK"); + if (LAST_TIME_PLR_STRUCK < FIVE_SECS_AGO) + { + PLR_FRUSTRATED = 0; + LogDebug("anti-troll reset frustration"); + } + if (!(LAST_TIME_PLR_STRUCK > FIVE_SECS_AGO)) return; + LAST_TIME_PLR_STRUCK = GetGameTime(); + PLR_FRUSTRATED += 1; + LogDebug("anti-troll PLR_FRUSTRATED"); + if (!(PLR_FRUSTRATED > 4)) return; + SendColoredMessage(param1, "You dismiss " + GetEntityProperty(GetOwner(), "name.full")); + killme(); + } + + void run_anim() + { + PlayAnim("once", ANIM_RUN_BASE); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((AM_STANDING)) + { + ANIM_DEATH = "bear_diestanding"; + } + else + { + ANIM_DEATH = "bear_die01"; + } + PlayAnim("critical", ANIM_DEATH); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/blast.as b/scripts/angelscript/monsters/summon/blast.as new file mode 100644 index 00000000..554a6f6e --- /dev/null +++ b/scripts/angelscript/monsters/summon/blast.as @@ -0,0 +1,28 @@ +#pragma context server + +namespace MS +{ + +class Blast : CGameScript +{ + void game_dynamically_created() + { + string MY_OWNER = param1; + StoreEntity("ent_expowner"); + string BLAST_RAD = param2; + string BLAST_DMG = param3; + string BLAST_CTH = param4; + string BLAST_FALLOFF = param5; + string DMG_TYPE = param6; + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), BLAST_RAD, BLAST_DMG, BLAST_CTH, BLAST_FALLOFF); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/blood_drinker.as b/scripts/angelscript/monsters/summon/blood_drinker.as new file mode 100644 index 00000000..48a91d1e --- /dev/null +++ b/scripts/angelscript/monsters/summon/blood_drinker.as @@ -0,0 +1,357 @@ +#pragma context server + +#include "monsters/base_propelled.as" + +namespace MS +{ + +class BloodDrinker : CGameScript +{ + int AM_HOVERING; + int AM_RETURNING; + int BEAM_BRIGHTNESS; + string BEAM_ID; + string BLADE_DURATION; + string CUR_DEST; + string CUR_TARGET; + string DMG_BASE; + string FIRST_TARGET; + float FREQ_GLOW; + float FREQ_NEW_TARGET; + float FREQ_SOUND; + int FWD_SPEED; + string GAME_PVP; + int GLOW_DELAY; + int IS_ACTIVE; + int MOVE_RANGE; + string MY_OWNER; + string MY_SKILL; + int NEW_TARG_DELAY; + string NEXT_TOUCH; + int NPC_HACKED_MOVE_SPEED; + string OWNER_HEIGHT; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string RETURN_ID; + string SOUND_SPIN; + string TARG_HEIGHT; + + BloodDrinker() + { + NPC_HACKED_MOVE_SPEED = 1; + FWD_SPEED = 20; + MOVE_RANGE = 40; + FREQ_NEW_TARGET = 5.0; + FREQ_SOUND = 0.5; + FREQ_GLOW = 1.0; + SOUND_SPIN = "zombie/claw_miss2.wav"; + BEAM_BRIGHTNESS = 50; + SetCallback("touch", "enable"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(2.0); + if ((IS_ACTIVE)) + { + } + CUR_DEST = GetEntityOrigin(CUR_TARGET); + CUR_DEST += "z"; + SetMoveDest(CUR_DEST); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.1); + if ((IS_ACTIVE)) + { + } + string MY_ORG = GetMonsterProperty("origin"); + MY_ORG += /* TODO: $relvel */ $relvel(0, FWD_SPEED, 0); + if ((IsEntityAlive(CUR_TARGET))) + { + SetEntityOrigin(GetOwner(), MY_ORG); + } + else + { + string MY_ORG = GetEntityOrigin(GetOwner()); + string DEST_DIR = (CUR_DEST - MY_ORG).Normalize(); + DEST_DIR *= 100; + SetVelocity(GetOwner(), DEST_DIR); + } + string MASTER_ORG = GetEntityOrigin(MY_OWNER); + if ((AM_RETURNING)) + { + SetMoveDest(MY_OWNER); + if (Distance(GetMonsterProperty("origin"), MASTER_ORG) < OWNER_HEIGHT) + { + } + notify_return(); + } + if (!(AM_RETURNING)) + { + } + if (Distance(GetMonsterProperty("origin"), CUR_DEST) < 64) + { + if (Distance(GetMonsterProperty("origin"), MASTER_ORG) > 1024) + { + return_to_owner("too_far"); + } + if (!(AM_RETURNING)) + { + } + MY_ORG += /* TODO: $relvel */ $relvel(0, 512, 0); + SetMoveDest(MY_ORG); + } + if (!(IsEntityAlive(CUR_TARGET))) + { + find_new_target(); + } + string CUR_TARG_ORIGIN = GetEntityOrigin(CUR_TARGET); + if (!(Distance(CUR_TARG_ORIGIN, MASTER_ORG) > 1024)) + { + find_new_target(); + } + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(FREQ_SOUND); + if ((IS_ACTIVE)) + { + } + EmitSound(GetOwner(), 0, "zombie/claw_miss2.wav", 10); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + FIRST_TARGET = param2; + DMG_BASE = param3; + BLADE_DURATION = param4; + GAME_PVP = "game.pvp"; + LogDebug("bladedur BLADE_DURATION PARAM4"); + OWNER_HEIGHT = GetEntityHeight(MY_OWNER); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + MY_SKILL = "none"; + if ((OWNER_ISPLAYER)) + { + RETURN_ID = param5; + MY_SKILL = "swordsmanship"; + } + SetRace(GetEntityRace(MY_OWNER)); + CUR_TARGET = FIRST_TARGET; + set_target(FIRST_TARGET); + SetMoveDest(CUR_TARGET); + BLADE_DURATION("return_to_owner"); + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "damage_loop"); + } + + void OnSpawn() override + { + SetName("Blood Drinker"); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 30); + SetIdleAnim("spin_horizontal_norm"); + SetMoveAnim("spin_horizontal_norm"); + SetSolid("trigger"); + SetWidth(64); + SetHeight(64); + SetFly(true); + SetBloodType("none"); + SetInvincible(true); + SetMonsterClip(0); + PLAYING_DEAD = 1; + Effect("glow", GetOwner(), Vector3(255, 0, 0), 32, -1, 0); + ScheduleDelayedEvent(0.1, "init_beam"); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("lightning", 0.0); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(GetGameTime() > NEXT_TOUCH)) return; + NEXT_TOUCH = GetGameTime(); + NEXT_TOUCH += 0.1; + if (!(GetRelationship(param1) == "enemy")) return; + XDoDamage(param1, "direct", DMG_BASE, 1.0, MY_OWNER, GetOwner(), MY_SKILL, "dark"); + if (!(GetEntityProperty(param1, "scriptvar"))) + { + if (GetEntityRace(param1) != "undead") + { + } + if ((OWNER_ISPLAYER)) + { + if (!(GAME_PVP)) + { + if ((IsValidPlayer(param1))) + { + } + SetDamage("hit"); + SetDamage("dmg"); + return; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + LogDebug("PARAM1 healowner"); + HealEntity(MY_OWNER, 4.0); + } + else + { + string DMG_DONE = param2; + HealEntity(MY_OWNER, DMG_DONE); + if (!(GLOW_DELAY)) + { + } + GLOW_DELAY = 1; + FREQ_GLOW("reset_glow_delay"); + Effect("glow", MY_OWNER, Vector3(0, 255, 0), 128, 0.25, 0.25); + } + } + if ((NEW_TARG_DELAY)) return; + if ((AM_RETURNING)) return; + if (!(param1 == CUR_TARGET)) return; + NEW_TARG_DELAY = 1; + FREQ_NEW_TARGET("reset_new_targ_delay"); + find_new_target(); + } + + void reset_new_targ_delay() + { + NEW_TARG_DELAY = 0; + } + + void game_reached_dest() + { + if ((AM_RETURNING)) return; + } + + void find_new_target() + { + if ((AM_RETURNING)) return; + if ((IsEntityAlive(CUR_TARGET))) + { + if (GetEntityRange(CUR_TARGET) < 1024) + { + set_target(CUR_TARGET); + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + string OLD_TARGET = CUR_TARGET; + string MASTER_ORG = GetEntityOrigin(MY_OWNER); + string TARGET_LIST = FindEntitiesInSphere("enemy", 1024); + if (GetTokenCount(TARGET_LIST, ";") > 0) + { + ScrambleTokens(TARGET_LIST, ";"); + set_target(GetToken(TARGET_LIST, 0, ";")); + } + } + + void set_target() + { + CUR_TARGET = param1; + if ((IsEntityAlive(CUR_TARGET))) + { + if (!(AM_RETURNING)) + { + } + if (CUR_TARGET != MY_OWNER) + { + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = GetEntityOrigin(CUR_TARGET); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (TRACE_LINE == TRACE_END) + { + Effect("beam", "update", BEAM_ID, "end_target", CUR_TARGET); + Effect("beam", "update", BEAM_ID, "brightness", BEAM_BRIGHTNESS); + } + else + { + Effect("beam", "update", BEAM_ID, "brightness", BEAM_ID, 0); + CUR_TARGET = "unset"; + } + } + } + else + { + Effect("beam", "update", BEAM_ID, "brightness", BEAM_ID, 0); + } + TARG_HEIGHT = GetEntityHeight(CUR_TARGET); + if ((IsValidPlayer(CUR_TARGET))) + { + TARG_HEIGHT /= 2; + } + CUR_DEST = GetEntityOrigin(CUR_TARGET); + CUR_DEST += "z"; + if (!(AM_RETURNING)) + { + if (!(IsEntityAlive(CUR_TARGET))) + { + } + string OWNER_YAW = GetEntityProperty(MY_OWNER, "angles.yaw"); + CUR_DEST = GetEntityOrigin(MY_OWNER); + CUR_DEST += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, 128, 64)); + } + SetMoveDest(CUR_DEST); + AM_HOVERING = 0; + } + + void return_to_owner() + { + LogDebug("return_to_owner PARAM1"); + Effect("beam", "update", BEAM_ID, "remove", 0); + AM_RETURNING = 1; + AM_HOVERING = 0; + FWD_SPEED *= 2.0; + CUR_TARGET = MY_OWNER; + set_target(MY_OWNER); + SetMoveDest(MY_OWNER); + } + + void notify_return() + { + if (!(OWNER_ISPLAYER)) + { + CallExternal(MY_OWNER, "sword_return"); + } + else + { + CallExternal(RETURN_ID, "sword_return"); + } + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", 0); + Effect("glow", GetOwner(), Vector3(0, 0, 0), 0, -1, 0); + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void reset_glow_delay() + { + GLOW_DELAY = 0; + } + + void init_beam() + { + Effect("beam", "ents", "laserbeam.spr", 300, GetOwner(), 0, CUR_TARGET, 0, Vector3(255, 0, 0), BEAM_BRIGHTNESS, 1, -1); + BEAM_ID = m_hLastCreated; + } + + void ext_remove() + { + Effect("beam", "update", BEAM_ID, "remove", 0); + ScheduleDelayedEvent(0.1, "remove_me"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/bludgeon_axe.as b/scripts/angelscript/monsters/summon/bludgeon_axe.as new file mode 100644 index 00000000..1b65fa66 --- /dev/null +++ b/scripts/angelscript/monsters/summon/bludgeon_axe.as @@ -0,0 +1,146 @@ +#pragma context server + +#include "monsters/base_noclip.as" + +namespace MS +{ + +class BludgeonAxe : CGameScript +{ + string AM_RETURNING; + int ATTACK_MOVERANGE; + string DMG_BASE; + string DMG_TYPE; + string END_FLIGHT_TIME; + float FREQ_SOUND; + int FWD_SPEED; + string GAME_PVP; + string IS_ACTIVE; + string ITEM_ID; + string MY_DEST; + string MY_OWNER; + string NPC_NOCLIP_DEST; + string OWNER_HALFHEIGHT; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + int SCAN_RAD; + string SOUND_SPIN; + + BludgeonAxe() + { + FWD_SPEED = 50; + ATTACK_MOVERANGE = 80; + SOUND_SPIN = "zombie/claw_miss2.wav"; + FREQ_SOUND = 0.3; + DMG_TYPE = "slash"; + SCAN_RAD = 72; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_SOUND); + if ((IS_ACTIVE)) + { + } + EmitSound(GetOwner(), 0, "zombie/claw_miss2.wav", 10); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.1); + if ((IS_ACTIVE)) + { + } + if (!(AM_RETURNING)) + { + if (Distance(GetMonsterProperty("origin"), NPC_NOCLIP_DEST) <= ATTACK_MOVERANGE) + { + } + AM_RETURNING = 1; + } + if ((AM_RETURNING)) + { + NPC_NOCLIP_DEST = GetEntityOrigin(MY_OWNER); + if ((IsValidPlayer(MY_OWNER))) + { + NPC_NOCLIP_DEST = GetEntityProperty(MY_OWNER, "attachpos"); + } + else + { + NPC_NOCLIP_DEST += "z"; + } + if (Distance(GetMonsterProperty("origin"), NPC_NOCLIP_DEST) <= ATTACK_MOVERANGE) + { + } + IS_ACTIVE = 0; + CallExternal(ITEM_ID, "catch_axe"); + ScheduleDelayedEvent(0.1, "remove_me"); + } + if (!(OWNER_ISPLAYER)) + { + } + if (GetGameTime() > END_FLIGHT_TIME) + { + IS_ACTIVE = 0; + CallExternal(ITEM_ID, "catch_axe"); + ScheduleDelayedEvent(0.1, "remove_me"); + } + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DEST = param2; + DMG_BASE = param3; + GAME_PVP = "game.pvp"; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + ITEM_ID = MY_OWNER; + if ((OWNER_ISPLAYER)) + { + ITEM_ID = param4; + } + OWNER_HALFHEIGHT = GetEntityHeight(MY_OWNER); + SetRace(GetEntityRace(MY_OWNER)); + if (!(OWNER_ISPLAYER)) + { + OWNER_HALFHEIGHT /= 2; + } + NPC_NOCLIP_DEST = MY_DEST; + IS_ACTIVE = 1; + StoreEntity("ent_expowner"); + ScheduleDelayedEvent(0.1, "damage_loop"); + END_FLIGHT_TIME = GetGameTime(); + END_FLIGHT_TIME += 10.0; + } + + void OnSpawn() override + { + SetName("Bludgeon Axe"); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 32); + SetIdleAnim("spin_vertical_norm"); + SetMoveAnim("spin_vertical_norm"); + SetSolid("none"); + SetWidth(32); + SetFly(true); + SetHeight(32); + SetBloodType("none"); + SetInvincible(true); + SetMonsterClip(0); + PLAYING_DEAD = 1; + } + + void damage_loop() + { + ScheduleDelayedEvent(0.1, "damage_loop"); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), SCAN_RAD, DMG_BASE, 1.0, 0.0); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/chain_scanner.as b/scripts/angelscript/monsters/summon/chain_scanner.as new file mode 100644 index 00000000..90406f2f --- /dev/null +++ b/scripts/angelscript/monsters/summon/chain_scanner.as @@ -0,0 +1,105 @@ +#pragma context server + +#include "monsters/summon/base_aoe.as" + +namespace MS +{ + +class ChainScanner : CGameScript +{ + string ACTIVE_SKILL; + int AOE_RADIUS; + float DAMAGE_ADJ; + int DAMAGE_DELAY; + int DEATH_DELAY; + string LIGHTNING_SPRITE; + string MY_BASE_DAMAGE; + string MY_OWNER; + string OWNER_ISPLAYER; + int SCAN_RANGE; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + string ZAP_SOUND_DELAY; + + ChainScanner() + { + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart15.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + SCAN_RANGE = 400; + DAMAGE_ADJ = 0.75; + LIGHTNING_SPRITE = "lgtning.spr"; + AOE_RADIUS = 400; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + MY_BASE_DAMAGE = param2; + MY_BASE_DAMAGE *= DAMAGE_ADJ; + DEATH_DELAY = 0; + ACTIVE_SKILL = "spellcasting.lightning"; + if (param3 != "PARAM3") + { + ACTIVE_SKILL = param3; + } + death_count(); + } + + void fire_bolts() + { + if ((DAMAGE_DELAY)) return; + DAMAGE_DELAY = 1; + ScheduleDelayedEvent(0.2, "reset_damage_delay"); + aoe_applyeffect_rad(); + } + + void reset_damage_delay() + { + DAMAGE_DELAY = 0; + } + + void apply_aoe_effect() + { + string TARG_ORG = GetEntityOrigin(param1); + string MY_ORG = GetEntityOrigin(MY_OWNER); + string TRACE_LINE = TraceLine(MY_ORG, TARG_ORG); + if (!(TRACE_LINE == TARG_ORG)) return; + if (!(ZAP_SOUND_DELAY)) + { + ZAP_SOUND_DELAY = 1; + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(0.25, "zap_sound_reset"); + } + ClientEvent("new", "all_in_sight", "monsters/summon/chain_scanner_cl", GetEntityIndex(MY_OWNER), GetEntityIndex(param1)); + string MY_FINAL_DAMAGE = MY_BASE_DAMAGE; + MY_FINAL_DAMAGE *= DAMAGE_ADJ; + XDoDamage(GetEntityIndex(param1), "direct", MY_BASE_DAMAGE, 100, MY_OWNER, MY_OWNER, ACTIVE_SKILL, "lightning"); + } + + void zap_sound_reset() + { + ZAP_SOUND_DELAY = 0; + } + + void heart_beat() + { + SetEntityOrigin(GetOwner(), GetEntityOrigin(MY_OWNER)); + DEATH_DELAY = 0; + } + + void death_count() + { + ScheduleDelayedEvent(1.0, "death_count"); + DEATH_DELAY += 1; + if (!(DEATH_DELAY > 10)) return; + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/chain_scanner_cl.as b/scripts/angelscript/monsters/summon/chain_scanner_cl.as new file mode 100644 index 00000000..165dfd65 --- /dev/null +++ b/scripts/angelscript/monsters/summon/chain_scanner_cl.as @@ -0,0 +1,75 @@ +#pragma context client + +namespace MS +{ + +class ChainScannerCl : CGameScript +{ + string MAGIC_HAND_IDX; + + void client_activate() + { + string CL_BEAM_START = /* TODO: $getcl */ $getcl(param1, "bonepos", 38); + string CL_BEAM_END = /* TODO: $getcl */ $getcl(param2, "bonepos", 1); + MAGIC_HAND_IDX = "game.localplayer.viewmodel.active.id"; + if (!("game.localplayer.thirdperson")) + { + if ("game.localplayer.index" == param1) + { + } + int RND_FINGER = RandomInt(1, 10); + if (RND_FINGER == 1) + { + string CL_FINGER = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 16); + } + if (RND_FINGER == 2) + { + string CL_FINGER = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 19); + } + if (RND_FINGER == 3) + { + string CL_FINGER = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 22); + } + if (RND_FINGER == 4) + { + string CL_FINGER = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 25); + } + if (RND_FINGER == 5) + { + string CL_FINGER = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 28); + } + if (RND_FINGER == 6) + { + string CL_FINGER = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 35); + } + if (RND_FINGER == 7) + { + string CL_FINGER = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 38); + } + if (RND_FINGER == 8) + { + string CL_FINGER = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 41); + } + if (RND_FINGER == 9) + { + string CL_FINGER = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 44); + } + if (RND_FINGER == 10) + { + string CL_FINGER = /* TODO: $getcl */ $getcl("game.localplayer.viewmodel.active.id", "bonepos", 47); + } + string CL_BEAM_START = CL_FINGER; + int USE_FINGERS = 1; + } + ClientEffect("beam_points", CL_BEAM_START, CL_BEAM_END, "lgtning.spr", 0.5, 5.0, 0.5, 255, 50, 30, Vector3(60, 60, 255)); + ScheduleDelayedEvent(0.5, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/circle_of_death.as b/scripts/angelscript/monsters/summon/circle_of_death.as new file mode 100644 index 00000000..d5d1aef6 --- /dev/null +++ b/scripts/angelscript/monsters/summon/circle_of_death.as @@ -0,0 +1,66 @@ +#pragma context server + +#include "monsters/summon/base_aoe2.as" + +namespace MS +{ + +class CircleOfDeath : CGameScript +{ + string ACTIVE_SKILL; + int AOE_AFFECTS_WARY; + string AOE_DURATION; + string AOE_OWNER; + string AOE_RADIUS; + int AOE_SCAN_FREQ; + string AOE_SCAN_TYPE; + string DMG_BASE; + string SOUND_PULSE; + + CircleOfDeath() + { + SOUND_PULSE = "ambience/pulsemachine.wav"; + AOE_SCAN_TYPE = "rsphere"; + AOE_SCAN_FREQ = 1; + } + + void game_precache() + { + Precache("skull.spr"); + Precache("weapons/magic/seals.mdl"); + } + + void game_dynamically_created() + { + AOE_OWNER = param1; + AOE_RADIUS = param2; + DMG_BASE = param3; + AOE_DURATION = param4; + ACTIVE_SKILL = param5; + AOE_AFFECTS_WARY = 1; + if ((ACTIVE_SKILL).findFirst(PARAM) == 0) + { + ACTIVE_SKILL = "spellcasting.affliction"; + } + EmitSound(GetOwner(), 1, SOUND_PULSE, 10); + string L_GROUND = GetEntityOrigin(GetOwner()); + L_GROUND = "z"; + SetEntityOrigin(GetOwner(), L_GROUND); + ClientEvent("new", "all", "monsters/summon/circle_of_death_cl", L_GROUND, AOE_DURATION); + } + + void aoe_affect_target() + { + string CUR_TARG = param1; + XDoDamage(CUR_TARG, "direct", DMG_BASE, 1.0, AOE_OWNER, GetOwner(), ACTIVE_SKILL, "magic_effect"); + } + + void aoe_end() + { + EmitSound(GetOwner(), 1, SOUND_PULSE, 0); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/circle_of_death_cl.as b/scripts/angelscript/monsters/summon/circle_of_death_cl.as new file mode 100644 index 00000000..fb365c9f --- /dev/null +++ b/scripts/angelscript/monsters/summon/circle_of_death_cl.as @@ -0,0 +1,88 @@ +#pragma context client + +namespace MS +{ + +class CircleOfDeathCl : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_ORIGIN; + string FX_SPRITE; + string GLOW_COLOR; + int GLOW_RAD; + string SEAL_MODEL; + int SEAL_OFS; + + CircleOfDeathCl() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + SEAL_OFS = 4; + FX_SPRITE = "skull.spr"; + GLOW_COLOR = Vector3(255, 0, 0); + GLOW_RAD = 196; + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + FX_DURATION("end_fx"); + ClientEffect("light", "new", FX_ORIGIN, GLOW_RAD, GLOW_COLOR, FX_DURATION); + ClientEffect("tempent", "model", SEAL_MODEL, FX_ORIGIN, "setup_seal"); + fx_loop(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "fx_loop"); + string SKULL_ORIGIN = FX_ORIGIN; + SKULL_ORIGIN += "z"; + ClientEffect("tempent", "sprite", FX_SPRITE, SKULL_ORIGIN, "setup_skull"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void setup_seal() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 15); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + } + + void setup_skull() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "framerate", 15); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, -1)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/circle_of_death_old.as b/scripts/angelscript/monsters/summon/circle_of_death_old.as new file mode 100644 index 00000000..670c4cbc --- /dev/null +++ b/scripts/angelscript/monsters/summon/circle_of_death_old.as @@ -0,0 +1,265 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class CircleOfDeathOld : CGameScript +{ + int CIRCLE_ON; + int CIRCLE_RADIUS; + string CIRCLE_TARGETS; + string CIRCLE_UP; + string DID_WINDUP; + string FX_SPRITE; + string GAME_PVP; + string LAST_LIGHT; + float LIGHT_DIE; + float LIGHT_DROPPED_SCALE; + float LIGHT_PLAYER_SCALE; + string MY_BASE_DAMAGE; + string MY_DURATION; + string MY_OWNER; + string MY_OWNER_RACE; + string MY_SKILL; + int OFSZ_NEG; + int OFSZ_POS; + int OFS_NEG; + int OFS_POS; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + float PULSE_PLAYTIME; + int RAIN_SPRITES; + int ROT_COUNT; + int SEAL_DROP_COUNTER; + string SEAL_MODEL; + int SEAL_OFS; + string SOUND_FADE; + string SOUND_MANIFEST; + string SOUND_PULSE; + string THIS_SCRIPT_CLIENT_ID; + string sfx.duration; + string sfx.npcid; + string sfx.radius; + + CircleOfDeathOld() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + SEAL_OFS = 4; + SOUND_MANIFEST = "magic/temple.wav"; + SOUND_PULSE = "magic/pulsemachine_noloop.wav"; + SOUND_FADE = "magic/frost_reverse.wav"; + FX_SPRITE = "skull.spr"; + PULSE_PLAYTIME = 1.7; + CIRCLE_RADIUS = 180; + LIGHT_DIE = 1.6; + Precache(FX_SPRITE); + OFS_POS = 128; + OFS_NEG = -128; + OFSZ_POS = 256; + OFSZ_NEG = -10; + LIGHT_PLAYER_SCALE = 0.3; + LIGHT_DROPPED_SCALE = 0.5; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DURATION = param2; + MY_BASE_DAMAGE = param3; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + if (!(OWNER_ISPLAYER)) + { + MY_SKILL = param4; + } + else + { + MY_SKILL = "none"; + } + GAME_PVP = "game.pvp"; + MY_OWNER_RACE = GetEntityRace(param1); + SetRace(MY_OWNER_RACE); + MY_DURATION("circle_end"); + } + + void OnSpawn() override + { + SetName("Circle of Death"); + SetHealth(10000); + SetFOV(359); + SetInvincible(true); + SetHeight(2); + SetWidth(2); + SetFly(true); + 1 = float(1); + SetDamageResistance("all", 0.0); + SetGravity(0.0); + SetBloodType("none"); + SetModel("none"); + SetSolid("none"); + SetNoPush(true); + PLAYING_DEAD = 1; + CIRCLE_ON = 1; + ScheduleDelayedEvent(0.1, "make_seal"); + ScheduleDelayedEvent(1.0, "circle_go"); + ScheduleDelayedEvent(0.1, "circle_hum"); + } + + void make_seal() + { + SetRace(MY_OWNER_RACE); + string SEAL_POS = GetEntityOrigin(GetOwner()); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(SEAL_POS); + string SEAL_Z = (SEAL_POS).z; + string GROUND_DIST = GROUND_Z; + GROUND_DIST -= SEAL_Z; + GROUND_DIST -= 2; + SEAL_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, GROUND_DIST)); + SpawnNPC("monsters/summon/seal_maker", SEAL_POS, ScriptMode::Legacy); // params: SEAL_MODEL, MY_DURATION, SEAL_OFS + } + + void circle_hum() + { + if (!(CIRCLE_UP)) + { + string CLIENT_DURATION = MY_DURATION; + CLIENT_DURATION -= 0.2; + ClientEvent("new", "all_in_sight", currentscript, CLIENT_DURATION, GetEntityIndex(GetOwner()), CIRCLE_RADIUS); + string MY_ORIGIN = GetEntityOrigin(GetOwner()); + ClientEffect("light", "new", MY_ORIGIN, CIRCLE_RADIUS, Vector3(128, 128, 255), MY_DURATION); + THIS_SCRIPT_CLIENT_ID = "game.script.last_sent_id"; + CIRCLE_UP = 1; + } + if ((DID_WINDUP)) + { + EmitSound(GetOwner(), 0, SOUND_PULSE, 10); + } + if (!(DID_WINDUP)) + { + EmitSound(GetOwner(), 0, SOUND_MANIFEST, 10); + DID_WINDUP = 1; + } + if (!(CIRCLE_ON)) return; + PULSE_PLAYTIME("circle_hum"); + } + + void circle_go() + { + if (!(CIRCLE_ON)) return; + ScheduleDelayedEvent(0.5, "circle_go"); + CIRCLE_TARGETS = FindEntitiesInSphere("enemy", CIRCLE_RADIUS); + if (!(CIRCLE_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(CIRCLE_TARGETS, ";"); i++) + { + damage_targets(); + } + } + + void damage_targets() + { + string CUR_TARG = GetToken(CIRCLE_TARGETS, i, ";"); + if ((OWNER_ISPLAYER)) + { + if (!(GAME_PVP)) + { + } + if ((IsValidPlayer(CUR_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + XDoDamage(CUR_TARG, "direct", MY_BASE_DAMAGE, 1.0, MY_OWNER, MY_OWNER, MY_SKILL, "magic"); + } + + void circle_end() + { + ClientEvent("remove", "all", THIS_SCRIPT_CLIENT_ID); + CIRCLE_ON = 0; + ClientEvent("remove", "all", currentscript); + EmitSound(GetOwner(), 0, SOUND_FADE, 10); + ScheduleDelayedEvent(0.5, "circle_remove"); + } + + void circle_remove() + { + DeleteEntity(GetOwner()); + } + + void client_activate() + { + sfx.duration = param1; + sfx.npcid = param2; + sfx.radius = param3; + SetCallback("render", "enable"); + RAIN_SPRITES = 1; + SEAL_DROP_COUNTER = 0; + ROT_COUNT = 0; + ScheduleDelayedEvent(0.1, "rain_go"); + PARAM1("effect_die"); + } + + void rain_go() + { + if (!(RAIN_SPRITES)) return; + createsprite(); + ScheduleDelayedEvent(1.0, "rain_go"); + } + + void createsprite() + { + string g.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + string SEAL_POS = g.pos; + SEAL_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, -64)); + ClientEffect("remove", LAST_LIGHT); + ClientEffect("light", "new", g.pos, 196, Vector3(255, 0, 0), 0.9); + LAST_LIGHT = "game.script.last_light_id"; + ClientEffect("tempent", "model", SEAL_MODEL, SEAL_POS, "setup_seal"); + ClientEffect("tempent", "model", FX_SPRITE, g.pos, "setup_flame"); + } + + void setup_seal() + { + ClientEffect("tempent", "set_current_prop", "death_delay", sfx.duration); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 3); + ClientEffect("tempent", "set_current_prop", "frames", 15); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", -1.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, -2)); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + } + + void setup_flame() + { + ClientEffect("tempent", "set_current_prop", "death_delay", sfx.duration); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "framerate", 15); + ClientEffect("tempent", "set_current_prop", "frames", 15); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, -1)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + } + + void effect_die() + { + ClientEffect("remove", LAST_LIGHT); + RAIN_SPRITES = 0; + RemoveScript(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetAlive(1); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/circle_of_fire.as b/scripts/angelscript/monsters/summon/circle_of_fire.as new file mode 100644 index 00000000..41d1cd02 --- /dev/null +++ b/scripts/angelscript/monsters/summon/circle_of_fire.as @@ -0,0 +1,260 @@ +#pragma context server + +namespace MS +{ + +class CircleOfFire : CGameScript +{ + string APPLY_EFFECT; + int CIRCLE_ON; + int CIRCLE_RADIUS; + string CIRCLE_UP; + string DID_WINDUP; + string FX_SPRITE; + string GAME_PVP; + float LIGHT_DROPPED_SCALE; + float LIGHT_PLAYER_SCALE; + string MAIN_SEAL; + string MY_BASE_DAMAGE; + string MY_DURATION; + string MY_OWNER; + int OFSZ_NEG; + int OFSZ_POS; + int OFS_NEG; + int OFS_POS; + string OWNER_ISPLAYER; + float PULSE_PLAYTIME; + int RAIN_SPRITES; + int ROT_COUNT; + string SCAN_TARGS; + int SEAL_DROP_COUNTER; + string SEAL_MODEL; + int SEAL_OFS; + string SOUND_FADE; + string SOUND_MANIFEST; + string SOUND_PULSE; + string THIS_SCRIPT_CLIENT_ID; + string sfx.duration; + string sfx.npcid; + string sfx.radius; + + CircleOfFire() + { + SOUND_MANIFEST = "weapons/egon_windup2.wav"; + SOUND_PULSE = "magic/egon_run3_noloop.wav"; + PULSE_PLAYTIME = 2.1; + SOUND_FADE = "weapons/egon_off1.wav"; + SEAL_MODEL = "weapons/magic/seals.mdl"; + SEAL_OFS = 1; + FX_SPRITE = "Fire2.spr"; + CIRCLE_RADIUS = 128; + APPLY_EFFECT = "effects/dot_fire"; + OFS_POS = 72; + OFS_NEG = -72; + OFSZ_POS = 256; + OFSZ_NEG = -10; + LIGHT_PLAYER_SCALE = 0.3; + LIGHT_DROPPED_SCALE = 0.5; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DURATION = param2; + MY_BASE_DAMAGE = param3; + OWNER_ISPLAYER = IsValidPlayer(param1); + GAME_PVP = "game.pvp"; + MY_DURATION("circle_end"); + } + + void OnSpawn() override + { + SetName("Circle of Fire"); + SetHealth(1); + SetFOV(359); + SetInvincible(true); + SetRace("beloved"); + SetHeight(2); + SetWidth(2); + SetFly(true); + SetGravity(0.0); + SetBloodType("none"); + SetModel("none"); + SetSolid("none"); + CIRCLE_ON = 1; + ScheduleDelayedEvent(0.1, "make_seal"); + ScheduleDelayedEvent(1.0, "circle_go"); + ScheduleDelayedEvent(0.1, "circle_hum"); + } + + void make_seal() + { + string SEAL_POS = GetEntityOrigin(GetOwner()); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(SEAL_POS); + string SEAL_Z = (SEAL_POS).z; + string GROUND_DIST = GROUND_Z; + GROUND_DIST -= SEAL_Z; + GROUND_DIST -= 2; + SEAL_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, GROUND_DIST)); + SpawnNPC("monsters/summon/seal_maker", SEAL_POS, ScriptMode::Legacy); // params: SEAL_MODEL, MY_DURATION, SEAL_OFS + } + + void circle_hum() + { + if (!(CIRCLE_UP)) + { + string CLIENT_DURATION = MY_DURATION; + CLIENT_DURATION -= 0.2; + ClientEvent("new", "all_in_sight", currentscript, CLIENT_DURATION, GetEntityIndex(GetOwner()), 128); + THIS_SCRIPT_CLIENT_ID = "game.script.last_sent_id"; + CIRCLE_UP = 1; + } + if ((DID_WINDUP)) + { + EmitSound(GetOwner(), 0, SOUND_PULSE, 5); + } + if (!(DID_WINDUP)) + { + EmitSound(GetOwner(), 0, SOUND_MANIFEST, 10); + DID_WINDUP = 1; + } + if (!(CIRCLE_ON)) return; + PULSE_PLAYTIME("circle_hum"); + } + + void circle_go() + { + if (!(CIRCLE_ON)) return; + ScheduleDelayedEvent(0.25, "circle_go"); + SCAN_TARGS = FindEntitiesInSphere("any", CIRCLE_RADIUS); + if (!(SCAN_TARGS != "none")) return; + string N_TARGS = GetTokenCount(SCAN_TARGS, ";"); + if (!(N_TARGS > 0)) return; + for (int i = 0; i < N_TARGS; i++) + { + zap_targets(); + } + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), CIRCLE_RADIUS, 0, 1.0, 0); + if (!(false)) return; + if (!(GetEntityRange(m_hLastSeen) <= CIRCLE_RADIUS)) return; + if (!(GetRelationship(m_hLastSeen) == "enemy")) return; + string DMG_SOURCE = MY_OWNER; + if ((GetEntityProperty(m_hLastSeen, "haseffect"))) return; + ApplyEffect(m_hLastSeen, APPLY_EFFECT, 1, DMG_SOURCE, MY_BASE_DAMAGE); + } + + void zap_targs() + { + string CUR_TARG = GetToken(SCAN_TARGS, i, ";"); + if (!(IsEntityAlive(CUR_TARG))) return; + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + string DMG_SOURCE = MY_OWNER; + if ((OWNER_ISPLAYER)) + { + if (!(GAME_PVP)) + { + } + if ((IsValidPlayer(CUR_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((GetEntityProperty(CUR_TARG, "haseffect"))) return; + ApplyEffect(CUR_TARG, APPLY_EFFECT, 1, DMG_SOURCE, MY_BASE_DAMAGE); + } + + void circle_end() + { + CIRCLE_ON = 0; + ClientEvent("remove", "all", THIS_SCRIPT_CLIENT_ID); + EmitSound(GetOwner(), 0, SOUND_FADE, 10); + ScheduleDelayedEvent(0.5, "circle_remove"); + } + + void circle_remove() + { + DeleteEntity(GetOwner()); + } + + void client_activate() + { + sfx.npcid = param2; + sfx.radius = param3; + sfx.duration = param1; + SetCallback("render", "enable"); + RAIN_SPRITES = 1; + SEAL_DROP_COUNTER = 0; + ROT_COUNT = 0; + ScheduleDelayedEvent(0.1, "rain_go"); + PARAM1("effect_die"); + } + + void rain_go() + { + if (!(RAIN_SPRITES)) return; + createsprite(); + ScheduleDelayedEvent(0.1, "rain_go"); + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + if (!(MAIN_SEAL)) + { + string g.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(g.pos); + string THIS_Z = (g.pos).z; + string GROUND_DIST = GROUND_Z; + GROUND_DIST -= THIS_Z; + g.pos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, GROUND_DIST)); + ClientEffect("tempent", "model", SEAL_MODEL, g.pos, "setup_main_model"); + g.pos += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 100)); + ClientEffect("tempent", "model", SEAL_MODEL, g.pos, "setup_main_model"); + MAIN_SEAL = 1; + } + if (!(ROT_COUNT <= 360)) return; + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(l.pos); + string THIS_Z = (l.pos).z; + string GROUND_DIST = GROUND_Z; + GROUND_DIST -= THIS_Z; + GROUND_DIST /= 2; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, ROT_COUNT, 0), Vector3(0, 72, GROUND_DIST)); + ROT_COUNT += 40; + ClientEffect("tempent", "sprite", FX_SPRITE, l.pos, "setup_flame"); + if ((MAIN_MODEL)) return; + } + + void setup_flame() + { + ClientEffect("tempent", "set_current_prop", "death_delay", sfx.duration); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 8); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + } + + void setup_main_model() + { + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 1); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + } + + void effect_die() + { + RAIN_SPRITES = 0; + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/circle_of_healing.as b/scripts/angelscript/monsters/summon/circle_of_healing.as new file mode 100644 index 00000000..957cc94a --- /dev/null +++ b/scripts/angelscript/monsters/summon/circle_of_healing.as @@ -0,0 +1,133 @@ +#pragma context server + +#include "monsters/summon/base_aoe.as" + +namespace MS +{ + +class CircleOfHealing : CGameScript +{ + float AOE_FREQ; + string AOE_FRIEND_FOE; + int AOE_RADIUS; + int CIRCLE_RADIUS; + string DIV_SKILL; + string HEAL_AMT; + int IS_ACTIVE; + string MY_DURATION; + string MY_OWNER; + string NEAR_SEAL; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + float PULSE_PLAYTIME; + string SEAL_MODEL; + int SEAL_OFS; + int SET_DELETE; + string SOUND_PULSE; + + CircleOfHealing() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + SEAL_OFS = 26; + SOUND_PULSE = "ambience/alien_zonerator.wav"; + CIRCLE_RADIUS = 172; + PULSE_PLAYTIME = 10.0; + AOE_RADIUS = 172; + AOE_FREQ = 1.0; + AOE_FRIEND_FOE = "ally"; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DURATION = param2; + HEAL_AMT = param3; + DIV_SKILL = GetSkillLevel(MY_OWNER, "spellcasting.divination"); + OWNER_ISPLAYER = IsValidPlayer(param1); + MY_DURATION("aoe_end"); + } + + void OnSpawn() override + { + SetName("Circle of Healing"); + SetHealth(1); + SetInvincible(true); + SetRace("beloved"); + SetGravity(0.0); + SetBloodType("none"); + SetModel(SEAL_MODEL); + SetModelBody(0, SEAL_OFS); + SetSolid("none"); + DropToFloor(); + SetNoPush(true); + PLAYING_DEAD = 1; + ScheduleDelayedEvent(0.1, "make_seal"); + // svplaysound: svplaysound 2 10 SOUND_PULSE + EmitSound(2, 10, SOUND_PULSE); + SetScriptFlags(GetEntityIndex(GetOwner()), "add", "hc", "hc"); + } + + void make_seal() + { + NEAR_SEAL = FindEntitiesInSphere("ally", AOE_RADIUS); + for (int i = 0; i < GetTokenCount(NEAR_SEAL, ";"); i++) + { + check_if_near(); + } + } + + void check_if_near() + { + string CUR_ENT = GetToken(NEAR_SEAL, i, ";"); + if (!((GetEntityName(NEAR_SEAL)).findFirst("Healing") >= 0)) return; + if ((SET_DELETE)) return; + SET_DELETE = 1; + SendColoredMessage(MY_OWNER, "Healing Circle: Cannot create one healing circle within another."); + } + + void apply_aoe_effect() + { + if ((GetEntityName(param1)).findFirst("Spell") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((GetEntityProperty(param1, "itemname")).findFirst("circle_of_heal") >= 0) + { + aoe_end(); + } + if (!(GetEntityHealth(param1) < GetEntityMaxHealth(param1))) return; + if ((GetEntityProperty(param1, "scriptvar"))) return; + ApplyEffect(param1, "effects/effect_rejuv2", 0, HEAL_AMT, MY_OWNER); + if ((IsValidPlayer(param1))) + { + int L_ADD_POINTS = 1; + } + if ((GetEntityProperty(param1, "scriptvar"))) + { + int L_ADD_POINTS = 1; + } + if ((L_ADD_POINTS)) + { + if (param1 != MY_OWNER) + { + } + CallExternal(MY_OWNER, "add_damage_points", HEAL_AMT); + } + } + + void aoe_end() + { + // svplaysound: svplaysound 2 0 SOUND_PULSE + EmitSound(2, 0, SOUND_PULSE); + IS_ACTIVE = 0; + if (MY_SCRIPT_IDX > 0) + { + ClientEffect("remove", "all", MY_SCRIPT_IDX); + } + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/circle_of_ice_greater.as b/scripts/angelscript/monsters/summon/circle_of_ice_greater.as new file mode 100644 index 00000000..cfaa6f38 --- /dev/null +++ b/scripts/angelscript/monsters/summon/circle_of_ice_greater.as @@ -0,0 +1,252 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class CircleOfIceGreater : CGameScript +{ + string APPLY_EFFECT; + int CIRCLE_ON; + int CIRCLE_RADIUS; + string CIRCLE_UP; + string DID_WINDUP; + string FREEZE_DURATION; + string FX_SPRITE; + float LIGHT_DROPPED_SCALE; + float LIGHT_PLAYER_SCALE; + string MAIN_SEAL; + string MY_DURATION; + string MY_OWNER; + string MY_OWNER_RACE; + int OFSZ_NEG; + int OFSZ_POS; + int OFS_NEG; + int OFS_POS; + float PULSE_PLAYTIME; + int RAIN_SPRITES; + int ROT_COUNT; + string SEAL_DOWN; + int SEAL_DROP_COUNTER; + string SEAL_MODEL; + int SEAL_OFS; + string SOUND_FADE; + string SOUND_MANIFEST; + string SOUND_PULSE; + string THIS_SCRIPT_CLIENT_ID; + string sfx.duration; + string sfx.npcid; + string sfx.radius; + + CircleOfIceGreater() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + SEAL_OFS = 8; + SOUND_MANIFEST = "magic/spawn_loud.wav"; + SOUND_PULSE = "magic/frost_forward.wav"; + SOUND_FADE = "magic/frost_reverse.wav"; + PULSE_PLAYTIME = 1.0; + FX_SPRITE = "firemagic.spr"; + CIRCLE_RADIUS = 172; + APPLY_EFFECT = "effects/dot_cold_freeze"; + OFS_POS = 128; + OFS_NEG = -128; + OFSZ_POS = 256; + OFSZ_NEG = -10; + LIGHT_PLAYER_SCALE = 0.3; + LIGHT_DROPPED_SCALE = 0.5; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DURATION = param2; + FREEZE_DURATION = param3; + MY_OWNER_RACE = GetEntityRace(param1); + MY_DURATION("circle_end"); + } + + void OnSpawn() override + { + SetName("Greater Circle of Ice"); + SetHealth(1); + SetFOV(359); + SetInvincible(true); + SetRace("beloved"); + SetHeight(2); + SetWidth(2); + SetFly(true); + 1 = float(1); + SetGravity(0.0); + SetBloodType("none"); + SetModel("none"); + SetSolid("none"); + CIRCLE_ON = 1; + ScheduleDelayedEvent(0.1, "make_seal"); + ScheduleDelayedEvent(1.0, "circle_go"); + ScheduleDelayedEvent(0.1, "circle_hum"); + } + + void make_seal() + { + string SEAL_POS = GetEntityOrigin(GetOwner()); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(SEAL_POS); + string SEAL_Z = (SEAL_POS).z; + string GROUND_DIST = GROUND_Z; + GROUND_DIST -= SEAL_Z; + GROUND_DIST -= 2; + SEAL_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, GROUND_DIST)); + SpawnNPC("monsters/summon/seal_maker", SEAL_POS, ScriptMode::Legacy); // params: SEAL_MODEL, MY_DURATION, SEAL_OFS + } + + void circle_hum() + { + if (!(CIRCLE_UP)) + { + string CLIENT_DURATION = MY_DURATION; + CLIENT_DURATION -= 0.2; + ClientEvent("new", "all_in_sight", currentscript, CLIENT_DURATION, GetEntityIndex(GetOwner()), CIRCLE_RADIUS); + string MY_ORIGIN = GetEntityOrigin(GetOwner()); + ClientEffect("light", "new", MY_ORIGIN, CIRCLE_RADIUS, Vector3(128, 128, 255), MY_DURATION); + THIS_SCRIPT_CLIENT_ID = "game.script.last_sent_id"; + CIRCLE_UP = 1; + } + if ((DID_WINDUP)) + { + EmitSound(GetOwner(), 0, SOUND_PULSE, 10); + } + if (!(DID_WINDUP)) + { + EmitSound(GetOwner(), 0, SOUND_MANIFEST, 10); + DID_WINDUP = 1; + } + if (!(CIRCLE_ON)) return; + PULSE_PLAYTIME("circle_hum"); + } + + void circle_go() + { + if (!(CIRCLE_ON)) return; + ScheduleDelayedEvent(0.25, "circle_go"); + if (GetEntityIndex(m_hLastSeen) == MY_OWNER) + { + LookAt(1024); + } + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), CIRCLE_RADIUS, 0, 1.0, 0); + if (!(false)) return; + if (!(GetEntityRange(m_hLastSeen) <= CIRCLE_RADIUS)) return; + if (!(GetRelationship(m_hLastSeen) == "enemy")) return; + string DMG_SOURCE = MY_OWNER; + if ((GetEntityProperty(m_hLastSeen, "haseffect"))) return; + ApplyEffect(m_hLastSeen, APPLY_EFFECT, FREEZE_DURATION, DMG_SOURCE); + } + + void game_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + string DMG_SOURCE = MY_OWNER; + ApplyEffect(m_hLastSeen, APPLY_EFFECT, FREEZE_DURATION, DMG_SOURCE); + } + + void circle_end() + { + ClientEvent("remove", "all", THIS_SCRIPT_CLIENT_ID); + CIRCLE_ON = 0; + ClientEvent("remove", "all", currentscript); + EmitSound(GetOwner(), 0, SOUND_FADE, 10); + ScheduleDelayedEvent(0.5, "circle_remove"); + } + + void circle_remove() + { + DeleteEntity(GetOwner()); + } + + void client_activate() + { + sfx.duration = param1; + sfx.npcid = param2; + sfx.radius = param3; + SetCallback("render", "enable"); + RAIN_SPRITES = 1; + SEAL_DROP_COUNTER = 0; + ROT_COUNT = 0; + ScheduleDelayedEvent(0.1, "rain_go"); + PARAM1("effect_die"); + } + + void rain_go() + { + if (!(RAIN_SPRITES)) return; + createsprite(); + ScheduleDelayedEvent(0.1, "rain_go"); + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + if (!(MAIN_SEAL)) + { + string g.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + ClientEffect("tempent", "model", SEAL_MODEL, g.pos, "setup_floatup_model"); + MAIN_SEAL = 1; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SEAL_DOWN)) + { + string g.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + ClientEffect("tempent", "model", SEAL_MODEL, g.pos, "setup_floatdown_model"); + SEAL_DOWN = 1; + } + if (ROT_COUNT >= 360) + { + ROT_COUNT = 0; + } + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, ROT_COUNT, 0), Vector3(0, CIRCLE_RADIUS, 256)); + ROT_COUNT += 40; + ClientEffect("tempent", "sprite", FX_SPRITE, l.pos, "setup_flame"); + } + + void setup_flame() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + } + + void setup_floatup_model() + { + ClientEffect("tempent", "set_current_prop", "death_delay", sfx.duration); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 1); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", -0.01); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, -0.1)); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + } + + void setup_floatdown_model() + { + ClientEffect("tempent", "set_current_prop", "death_delay", sfx.duration); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 1); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0.01); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0.1)); + ClientEffect("tempent", "set_current_prop", "body", SEAL_OFS); + } + + void effect_die() + { + RAIN_SPRITES = 0; + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/circle_of_ice_lesser.as b/scripts/angelscript/monsters/summon/circle_of_ice_lesser.as new file mode 100644 index 00000000..6eead852 --- /dev/null +++ b/scripts/angelscript/monsters/summon/circle_of_ice_lesser.as @@ -0,0 +1,214 @@ +#pragma context server + +#include "monsters/summon/base_aoe.as" + +namespace MS +{ + +class CircleOfIceLesser : CGameScript +{ + string ACTIVE_SKILL; + float AOE_FREQ; + int AOE_RADIUS; + string APPLY_EFFECT; + int CIRCLE_ON; + int CIRCLE_RADIUS; + string CIRCLE_UP; + string DID_WINDUP; + string FROST_DURATION; + string FX_SPRITE; + float LIGHT_DROPPED_SCALE; + float LIGHT_PLAYER_SCALE; + string MY_BASE_DAMAGE; + string MY_DURATION; + string MY_OWNER; + string MY_OWNER_RACE; + int OFSZ_NEG; + int OFSZ_POS; + int OFS_NEG; + int OFS_POS; + string OWNER_ISPLAYER; + float PULSE_PLAYTIME; + int RAIN_SPRITES; + int ROT_COUNT; + int SEAL_DROP_COUNTER; + string SEAL_MODEL; + int SEAL_OFS; + string SOUND_FADE; + string SOUND_MANIFEST; + string SOUND_PULSE; + string THIS_SCRIPT_CLIENT_ID; + string sfx.duration; + string sfx.npcid; + string sfx.radius; + + CircleOfIceLesser() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + SEAL_OFS = 7; + SOUND_MANIFEST = "magic/spawn.wav"; + SOUND_PULSE = "magic/frost_forward.wav"; + SOUND_FADE = "magic/frost_reverse.wav"; + PULSE_PLAYTIME = 1.0; + FX_SPRITE = "teleporter_blue_sprites.mdl"; + CIRCLE_RADIUS = 110; + APPLY_EFFECT = "effects/dot_cold"; + Precache(FX_SPRITE); + AOE_FREQ = 1.0; + AOE_RADIUS = 110; + OFS_POS = 128; + OFS_NEG = -128; + OFSZ_POS = 256; + OFSZ_NEG = -10; + LIGHT_PLAYER_SCALE = 0.3; + LIGHT_DROPPED_SCALE = 0.5; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DURATION = param2; + FROST_DURATION = param3; + MY_BASE_DAMAGE = param4; + ACTIVE_SKILL = param5; + if (ACTIVE_SKILL == "PARAM5") + { + ACTIVE_SKILL = "spellcasting.ice"; + } + MY_OWNER_RACE = GetEntityRace(param1); + OWNER_ISPLAYER = IsValidPlayer(param1); + MY_DURATION("circle_end"); + } + + void OnSpawn() override + { + SetName("Lesser Circle of Ice"); + SetHealth(10000); + SetFOV(359); + SetInvincible(true); + SetRace("beloved"); + SetHeight(2); + SetWidth(2); + SetFly(true); + 1 = float(1); + SetDamageResistance("all", 0.0); + SetGravity(0.0); + SetBloodType("none"); + SetModel("none"); + SetSolid("none"); + CIRCLE_ON = 1; + ScheduleDelayedEvent(0.1, "make_seal"); + ScheduleDelayedEvent(0.2, "circle_hum"); + } + + void make_seal() + { + string SEAL_POS = GetEntityOrigin(GetOwner()); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(SEAL_POS); + SEAL_POS = "z"; + LogDebug("make_seal SEAL_POS"); + SpawnNPC("monsters/summon/seal_maker", SEAL_POS, ScriptMode::Legacy); // params: SEAL_MODEL, MY_DURATION, SEAL_OFS + } + + void circle_hum() + { + if (!(CIRCLE_UP)) + { + string CLIENT_DURATION = MY_DURATION; + CLIENT_DURATION -= 0.2; + if (!(NO_RAIN_FX)) + { + ClientEvent("new", "all_in_sight", currentscript, CLIENT_DURATION, GetEntityIndex(GetOwner()), CIRCLE_RADIUS); + } + string MY_ORIGIN = GetEntityOrigin(GetOwner()); + ClientEffect("light", "new", MY_ORIGIN, CIRCLE_RADIUS, Vector3(128, 128, 255), MY_DURATION); + THIS_SCRIPT_CLIENT_ID = "game.script.last_sent_id"; + CIRCLE_UP = 1; + } + if ((DID_WINDUP)) + { + EmitSound(GetOwner(), 0, SOUND_PULSE, 10); + } + if (!(DID_WINDUP)) + { + EmitSound(GetOwner(), 0, SOUND_MANIFEST, 10); + DID_WINDUP = 1; + } + if (!(CIRCLE_ON)) return; + PULSE_PLAYTIME("circle_hum"); + } + + void circle_end() + { + ClientEvent("remove", "all", THIS_SCRIPT_CLIENT_ID); + CIRCLE_ON = 0; + ClientEvent("remove", "all", currentscript); + EmitSound(GetOwner(), 0, SOUND_FADE, 10); + ScheduleDelayedEvent(0.5, "circle_remove"); + } + + void circle_remove() + { + DeleteEntity(GetOwner()); + } + + void apply_aoe_effect() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + ApplyEffect(param1, "effects/dot_cold", FROST_DURATION, MY_OWNER, MY_BASE_DAMAGE, ACTIVE_SKILL); + } + + void client_activate() + { + sfx.duration = param1; + sfx.npcid = param2; + sfx.radius = param3; + SetCallback("render", "enable"); + RAIN_SPRITES = 1; + SEAL_DROP_COUNTER = 0; + ROT_COUNT = 0; + ScheduleDelayedEvent(0.1, "rain_go"); + PARAM1("effect_die"); + } + + void rain_go() + { + if (!(RAIN_SPRITES)) return; + createsprite(); + ScheduleDelayedEvent(0.1, "rain_go"); + } + + void createsprite() + { + if (ROT_COUNT >= 360) + { + ROT_COUNT = 0; + } + string SPRITE_RAD = CIRCLE_RADIUS; + SPRITE_RAD *= 0.65; + string A_POS = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + string l.pos = A_POS; + ROT_COUNT += 20; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, ROT_COUNT, 0), Vector3(0, SPRITE_RAD, 128)); + ClientEffect("tempent", "sprite", FX_SPRITE, l.pos, "setup_flame"); + string l.pos = A_POS; + ROT_COUNT += 20; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, ROT_COUNT, 0), Vector3(0, SPRITE_RAD, 128)); + ClientEffect("tempent", "sprite", FX_SPRITE, l.pos, "setup_flame"); + } + + void setup_flame() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + } + + void effect_die() + { + RAIN_SPRITES = 0; + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/circle_of_ice_player.as b/scripts/angelscript/monsters/summon/circle_of_ice_player.as new file mode 100644 index 00000000..c3db77d4 --- /dev/null +++ b/scripts/angelscript/monsters/summon/circle_of_ice_player.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "monsters/summon/circle_of_ice_lesser.as" + +namespace MS +{ + +class CircleOfIcePlayer : CGameScript +{ + string APPLY_EFFECT; + int CIRCLE_RADIUS; + string FX_SPRITE; + int NO_RAIN_FX; + float PULSE_PLAYTIME; + string SEAL_MODEL; + int SEAL_OFS; + string SOUND_FADE; + string SOUND_MANIFEST; + string SOUND_PULSE; + + CircleOfIcePlayer() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + SEAL_OFS = 7; + SOUND_MANIFEST = "magic/spawn.wav"; + SOUND_PULSE = "magic/frost_forward.wav"; + SOUND_FADE = "magic/frost_reverse.wav"; + PULSE_PLAYTIME = 1.0; + FX_SPRITE = "glassgibs.mdl"; + CIRCLE_RADIUS = 110; + NO_RAIN_FX = 1; + APPLY_EFFECT = "effects/dot_cold"; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/circle_of_ice_sword.as b/scripts/angelscript/monsters/summon/circle_of_ice_sword.as new file mode 100644 index 00000000..21826a9a --- /dev/null +++ b/scripts/angelscript/monsters/summon/circle_of_ice_sword.as @@ -0,0 +1,37 @@ +#pragma context server + +#include "monsters/summon/circle_of_ice_lesser.as" + +namespace MS +{ + +class CircleOfIceSword : CGameScript +{ + string APPLY_EFFECT; + int CIRCLE_RADIUS; + string FX_SPRITE; + int NO_RAIN_FX; + float PULSE_PLAYTIME; + string SEAL_MODEL; + int SEAL_OFS; + string SOUND_FADE; + string SOUND_MANIFEST; + string SOUND_PULSE; + + CircleOfIceSword() + { + SEAL_MODEL = "weapons/magic/seals.mdl"; + SEAL_OFS = 7; + SOUND_MANIFEST = "magic/spawn.wav"; + SOUND_PULSE = "magic/frost_forward.wav"; + SOUND_FADE = "magic/frost_reverse.wav"; + PULSE_PLAYTIME = 1.0; + FX_SPRITE = "glassgibs.mdl"; + CIRCLE_RADIUS = 110; + NO_RAIN_FX = 1; + APPLY_EFFECT = "effects/dot_cold"; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/circle_of_lolth.as b/scripts/angelscript/monsters/summon/circle_of_lolth.as new file mode 100644 index 00000000..f7c115eb --- /dev/null +++ b/scripts/angelscript/monsters/summon/circle_of_lolth.as @@ -0,0 +1,76 @@ +#pragma context server + +#include "monsters/summon/base_aoe2.as" + +namespace MS +{ + +class CircleOfLolth : CGameScript +{ + int AOE_AFFECTS_WARY; + string AOE_DURATION; + int AOE_RADIUS; + float AOE_SCAN_FREQ; + string AOE_SCAN_TYPE; + string MY_CL_IDX; + string MY_OWNER; + string MY_SKILL; + int PLAYING_DEAD; + string SOUND_PULSE; + + CircleOfLolth() + { + SOUND_PULSE = "bullchicken/bc_acid2.wav"; + AOE_SCAN_TYPE = "dodamage"; + AOE_SCAN_FREQ = 1.0; + } + + void game_precache() + { + Precache("weapons/magic/seals.mdl"); + } + + void OnSpawn() override + { + SetNoPush(true); + SetInvincible(true); + PLAYING_DEAD = 1; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + AOE_DURATION = param2; + AOE_RADIUS = 180; + AOE_AFFECTS_WARY = 1; + string MY_GROUND = GetEntityOrigin(GetOwner()); + string CUR_GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(MY_GROUND); + MY_GROUND = "z"; + SetEntityOrigin(GetOwner(), MY_GROUND); + if (!(IsValidPlayer(GetOwner()))) + { + MY_SKILL = "none"; + } + ClientEvent("new", "all", "effects/sfx_seal", GetEntityOrigin(GetOwner()), AOE_RADIUS, 36, AOE_DURATION, "spider"); + MY_CL_IDX = "game.script.last_sent_id"; + } + + void aoe_scan_loop() + { + ClientEvent("update", "all", MY_CL_IDX, "ext_spider_pulse"); + } + + void aoe_affect_target() + { + XDoDamage(param1, "direct", Random(5, 10), 100, MY_OWNER, MY_OWNER, "axehandling", "magic_effect"); + ApplyEffect(param1, "effects/webbed", 3, MY_OWNER); + } + + void aoe_end() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/client_side_fireball.as b/scripts/angelscript/monsters/summon/client_side_fireball.as new file mode 100644 index 00000000..faa93110 --- /dev/null +++ b/scripts/angelscript/monsters/summon/client_side_fireball.as @@ -0,0 +1,181 @@ +#pragma context client + +namespace MS +{ + +class ClientSideFireball : CGameScript +{ + string EMITTER_SPRITE; + string FB_ORG; + int FIREBALL_SPEED; + string FIREBALL_SPRITE; + float FREQ_LOOP_SOUND; + int IS_ACTIVE; + int IS_COLORED; + string IS_DESTROYED; + string NEW_COLOR; + int RND_FB; + string SOUND_KABOOM; + string SOUND_LOOP; + int SPRITE_FRAMES_LARGE; + int SPRITE_FRAMES_SMALL; + float SPRITE_SCALE_KABOOM; + float SPRITE_SCALE_LARGE; + float SPRITE_SCALE_SMALL; + string START_ANG; + string VEL_ANGLES; + + ClientSideFireball() + { + FIREBALL_SPEED = 120; + FIREBALL_SPRITE = "3dmflaora.spr"; + EMITTER_SPRITE = "3dmflaora.spr"; + SOUND_KABOOM = "weapons/explode3.wav"; + SOUND_LOOP = "items/torch1.wav"; + FREQ_LOOP_SOUND = 6.1; + IS_COLORED = 0; + NEW_COLOR = Vector3(255, 255, 255); + SPRITE_FRAMES_SMALL = 1; + SPRITE_FRAMES_LARGE = 1; + SPRITE_SCALE_SMALL = 0.5; + SPRITE_SCALE_LARGE = 2.0; + SPRITE_SCALE_KABOOM = 3.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.01, 0.05)); + if ((IS_ACTIVE)) + { + } + ClientEffect("tempent", "sprite", EMITTER_SPRITE, FB_ORG, "spit_flames"); + ClientEffect("tempent", "sprite", EMITTER_SPRITE, FB_ORG, "spit_flames"); + ClientEffect("tempent", "sprite", EMITTER_SPRITE, FB_ORG, "spit_flames"); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(FREQ_LOOP_SOUND); + EmitSound3D(SOUND_LOOP, 10, FB_ORG); + } + + void client_activate() + { + LogDebug("**** client_activate IS_COLORED"); + string MY_ORG = param1; + START_ANG = param2; + VEL_ANGLES = START_ANG; + IS_ACTIVE = 1; + LogDebug("client_activate MY_ORG MY_ORG"); + ClientEffect("tempent", "sprite", FIREBALL_SPRITE, MY_ORG, "setup_fireball", "update_fireball"); + EmitSound3D(SOUND_LOOP, 10, MY_ORG); + ScheduleDelayedEvent(21.0, "fireball_end"); + } + + void update_fireball() + { + if (!(IS_ACTIVE)) + { + if (!(IS_DESTROYED)) + { + } + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + IS_DESTROYED = 1; + } + if (!(IS_ACTIVE)) return; + FB_ORG = "game.tempent.origin"; + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(VEL_ANGLES, Vector3(0, FIREBALL_SPEED, 0))); + } + + void svr_update_fireball_vec() + { + VEL_ANGLES = param1; + } + + void setup_fireball() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 20.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE_LARGE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(START_ANG, Vector3(0, FIREBALL_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_FRAMES_LARGE); + ClientEffect("tempent", "set_current_prop", "update", 1); + if ((IS_COLORED)) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", NEW_COLOR); + } + } + + void spit_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "fadeout", 0.5); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(VEL_ANGLES, Vector3(Random(-120, 120), /* TODO: $neg */ $neg(FIREBALL_SPEED), RandomInt(0, 120)))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE_SMALL); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_SCALE_SMALL); + if ((IS_COLORED)) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", NEW_COLOR); + } + } + + void setup_kaboom() + { + float RND_YAW = Random(0, 359); + float RND_PITCH = Random(0, 359); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "fadeout", 0.5); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(RND_PITCH, RND_YAW, 0), Vector3(0, RND_FB, 0))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE_KABOOM); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_FRAMES_LARGE); + if ((IS_COLORED)) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", NEW_COLOR); + } + } + + void fireball_explode() + { + IS_ACTIVE = 0; + RND_FB = 1000; + ClientEffect("tempent", "sprite", FIREBALL_SPRITE, FB_ORG, "setup_kaboom"); + RND_FB = -1000; + ClientEffect("tempent", "sprite", FIREBALL_SPRITE, FB_ORG, "setup_kaboom"); + RND_FB = 1000; + ClientEffect("tempent", "sprite", FIREBALL_SPRITE, FB_ORG, "setup_kaboom"); + RND_FB = -1000; + ClientEffect("tempent", "sprite", FIREBALL_SPRITE, FB_ORG, "setup_kaboom"); + fireball_end(); + EmitSound3D(SOUND_KABOOM, 10, FB_ORG); + } + + void fireball_end() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "end_effect"); + } + + void end_effect() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/client_side_iceball.as b/scripts/angelscript/monsters/summon/client_side_iceball.as new file mode 100644 index 00000000..06358d15 --- /dev/null +++ b/scripts/angelscript/monsters/summon/client_side_iceball.as @@ -0,0 +1,43 @@ +#pragma context client + +#include "monsters/summon/client_side_fireball.as" + +namespace MS +{ + +class ClientSideIceball : CGameScript +{ + string EMITTER_SPRITE; + int FIREBALL_SPEED; + string FIREBALL_SPRITE; + float FREQ_LOOP_SOUND; + int IS_COLORED; + string NEW_COLOR; + string SOUND_KABOOM; + string SOUND_LOOP; + int SPRITE_FRAMES_LARGE; + int SPRITE_FRAMES_SMALL; + float SPRITE_SCALE_KABOOM; + float SPRITE_SCALE_LARGE; + float SPRITE_SCALE_SMALL; + + ClientSideIceball() + { + FIREBALL_SPEED = 120; + FIREBALL_SPRITE = "blueflare1.spr"; + EMITTER_SPRITE = "blueflare1.spr"; + SOUND_KABOOM = "magic/freeze.wav"; + SOUND_LOOP = "magic/pulsemachine_noloop.wav"; + FREQ_LOOP_SOUND = 1.88; + IS_COLORED = 1; + NEW_COLOR = Vector3(128, 164, 255); + SPRITE_FRAMES_SMALL = 1; + SPRITE_FRAMES_LARGE = 1; + SPRITE_SCALE_SMALL = 0.5; + SPRITE_SCALE_LARGE = 2.0; + SPRITE_SCALE_KABOOM = 3.0; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/client_side_lball.as b/scripts/angelscript/monsters/summon/client_side_lball.as new file mode 100644 index 00000000..a4d8009d --- /dev/null +++ b/scripts/angelscript/monsters/summon/client_side_lball.as @@ -0,0 +1,120 @@ +#pragma context client + +namespace MS +{ + +class ClientSideLball : CGameScript +{ + string BALL_DURATION; + string BALL_MODEL; + int BALL_MODEL_OFS; + int BALL_SPEED; + int CYCLE_ANGLE; + string FB_ORG; + float FREQ_LOOP_SOUND; + int IS_ACTIVE; + string IS_DESTROYED; + string SOUND_KABOOM; + string SOUND_LOOP; + string START_ANG; + string VEL_ANGLES; + + ClientSideLball() + { + BALL_SPEED = 120; + BALL_MODEL = "weapons/projectiles.mdl"; + BALL_MODEL_OFS = 18; + SOUND_KABOOM = "weapons/explode3.wav"; + SOUND_LOOP = "items/torch1.wav"; + FREQ_LOOP_SOUND = 6.1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_LOOP_SOUND); + EmitSound3D(SOUND_LOOP, 10, FB_ORG); + } + + void client_activate() + { + LogDebug("**** PARAM1 PARAM2"); + string MY_ORG = param1; + START_ANG = param2; + VEL_ANGLES = START_ANG; + BALL_DURATION = param3; + IS_ACTIVE = 1; + ClientEffect("tempent", "model", BALL_MODEL, MY_ORG, "setup_ball", "update_ball"); + EmitSound3D(SOUND_LOOP, 10, MY_ORG); + string L_BALL_DURATION = BALL_DURATION; + L_BALL_DURATION += 1.0; + L_BALL_DURATION("ball_end"); + } + + void update_ball() + { + if (!(IS_ACTIVE)) + { + if (!(IS_DESTROYED)) + { + } + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + IS_DESTROYED = 1; + } + if (!(IS_ACTIVE)) return; + FB_ORG = "game.tempent.origin"; + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(VEL_ANGLES, Vector3(0, BALL_SPEED, 0))); + } + + void setup_ball() + { + ClientEffect("tempent", "set_current_prop", "body", 17); + ClientEffect("tempent", "set_current_prop", "death_delay", BALL_DURATION); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(START_ANG, Vector3(0, BALL_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 6); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void ball_explode() + { + IS_ACTIVE = 0; + CYCLE_ANGLE = 0; + for (int i = 0; i < 18; i++) + { + splodie_beams(); + } + ball_end(); + EmitSound3D(SOUND_KABOOM, 10, FB_ORG); + } + + void splodie_beams() + { + string BEAM_START = FB_ORG; + string BEAM_END = BEAM_START; + float RND_UD = Random(-64.0, 64.0); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 128, RND_UD)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 1.5, 2.5, 1.5, 255, 50, 30, Vector3(255, 255, 0)); + CYCLE_ANGLE += 20; + } + + void svr_update_vec() + { + VEL_ANGLES = param1; + } + + void ball_end() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "end_effect"); + } + + void end_effect() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/doom_plant.as b/scripts/angelscript/monsters/summon/doom_plant.as new file mode 100644 index 00000000..1142a2b1 --- /dev/null +++ b/scripts/angelscript/monsters/summon/doom_plant.as @@ -0,0 +1,611 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class DoomPlant : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ATTACK_TARGET; + string BUSH_IDLE_ANIMS; + int FIRST_SET_DONE; + float FREQ_GROW; + float FREQ_SHOOT; + float FREQ_SPORE; + string GAME_PVP; + string GIB_MODEL; + int GROWING; + int IAM_SUMMONED; + int MELE_RANGE; + string MODEL_LEVEL1; + string MODEL_LEVEL2; + string MODEL_LEVEL3; + string MY_DMG; + string MY_DURATION; + string MY_OWNER; + string NEXT_GROW; + string OWNER_ISPLAYER; + int PLANT_HITCHANCE; + int PLANT_LEVEL; + int REPULSE; + int SCAN_RANGE; + int SHOOTING; + int SHOOT_DELAY; + string SHRUB_IDLE_ANIMS; + string SOUND_GIB; + string SOUND_GROW; + string SOUND_SCRATCH; + string SOUND_SLASH; + string SOUND_SPORE; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + int SPORE_DELAY; + string SPORE_POISON_DMG; + string TREE_IDLE_ANIMS; + + DoomPlant() + { + PLANT_HITCHANCE = 95; + SHRUB_IDLE_ANIMS = "thornplant2_idle1_1;thornplant2_idle1_2;thornplant2_idle3_1;thornplant2_idle3_2;"; + BUSH_IDLE_ANIMS = "thornplant2_2_idle1;thornplant2_2_idle2;thornplant2_2_idle3;thornplant2_2_idle4_1;thornplant2_2_idle4_2;"; + TREE_IDLE_ANIMS = "thornplant2_3_idle1;thornplant2_3_idle2;thornplant2_3_idle3;thornplant2_3_idle4;thornplant2_3_idle5;"; + MELE_RANGE = 96; + FREQ_GROW = 40.0; + FREQ_SHOOT = 1.0; + FREQ_SPORE = 10.0; + MODEL_LEVEL1 = "monsters/dewm_shrub.mdl"; + MODEL_LEVEL2 = "monsters/dewm_bush.mdl"; + MODEL_LEVEL3 = "monsters/dewm_tree.mdl"; + GIB_MODEL = "cactusgibs.mdl"; + SOUND_GIB = "debris/bustflesh1.wav"; + SOUND_SLASH = "zombie/claw_miss1.wav"; + SOUND_SCRATCH = "headcrab/hc_attack1.wav"; + SOUND_SPORE = "weapons/bow/crossbow.wav"; + SOUND_GROW = "weapons/bow/stretch.wav"; + SOUND_STRUCK1 = "weapons/xbow_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/xbow_hitbod2.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if (!(SHOOTING)) + { + } + if (!(GROWING)) + { + } + if (!(SHOOT_DELAY)) + { + } + int TARGET_ENT = 0; + if ((false)) + { + if (GetEntityRange(m_hLastSeen) < SCAN_RANGE) + { + } + if (!(GetEntityProperty(m_hLastSeen, "scriptvar"))) + { + } + string TARGET_ENT = GetEntityIndex(m_hLastSeen); + } + if (TARGET_ENT != 0) + { + if ((OWNER_ISPLAYER)) + { + if ((IsValidPlayer(TARGET_ENT))) + { + } + if (GAME_PVP == 0) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + attack_target(TARGET_ENT); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(3.0); + if (!(SHOOTING)) + { + } + if (!(GROWING)) + { + } + select_idle_anim(); + PlayAnim("once", ANIM_IDLE); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(5.0); + if (PLANT_LEVEL < 3) + { + } + grow_next_level(); + } + + void game_dynamically_created() + { + if (!(IsEntityAlive(param1))) + { + MY_OWNER = GetEntityIndex(GetOwner()); + MY_DMG = 20; + MY_DURATION = "PARAM3"; + OWNER_ISPLAYER = 0; + GAME_PVP = "game.pvp"; + SetRace("demon"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + IAM_SUMMONED = 1; + MY_OWNER = param1; + MY_DMG = param2; + MY_DURATION = param3; + OWNER_ISPLAYER = GetEntityIndex(param1); + GAME_PVP = "game.pvp"; + SetRace(GetEntityRace(param1)); + if (MY_DURATION != "PARAM3") + { + MY_DURATION("plant_die"); + } + } + + void OnSpawn() override + { + SetBloodType("green"); + if (!(START_STAGE)) + { + setup_plant_level1(); + } + if (START_STAGE == 2) + { + setup_plant_level2(); + } + if (START_STAGE == 3) + { + setup_plant_level3(); + } + SetDamageResistance("poison", 0.0); + SetDamageResistance("fire", 1.5); + SetDamageResistance("stun", 0); + SetWidth(40); + SetHeight(96); + SetInvincible(true); + SetHearingSensitivity(11); + GROWING = 1; + SetSolid("none"); + EmitSound(GetOwner(), 0, SOUND_GROW, 10); + if (!(START_STAGE)) + { + PlayAnim("critical", "thornplant2_grow"); + } + if (START_STAGE == 2) + { + PlayAnim("critical", "thornplant2_2_grow"); + } + if (START_STAGE == 3) + { + PlayAnim("critical", "thornplant2_3_grow"); + } + FIRST_SET_DONE = 0; + ScheduleDelayedEvent(5.0, "undo_invinc"); + REPULSE = 1; + repulse_loop(); + set_next_grow(); + SetBloodType("green"); + SpawnNPC("monsters/summon/ibarrier", GetMonsterProperty("origin"), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 60, 1, 1, 1, 0, 1 + } + + void game_postspawn() + { + if ((IAM_SUMMONED)) return; + MY_OWNER = GetEntityIndex(GetOwner()); + MY_DMG = 20; + MY_DURATION = "PARAM3"; + OWNER_ISPLAYER = 0; + GAME_PVP = "game.pvp"; + SetRace("demon"); + int EXIT_SUB = 1; + } + + void game_precache() + { + Precache("cactusgibs.mdl"); + } + + void undo_invinc() + { + end_repulse(); + SetInvincible(false); + SetSolid("box"); + FIRST_SET_DONE = 1; + } + + void repulse_loop() + { + if (!(REPULSE)) return; + ScheduleDelayedEvent(0.1, "repulse_loop"); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 96, 0.0, 1.0, 0.0); + } + + void end_repulse() + { + REPULSE = 0; + } + + void game_dodamage() + { + if (!(REPULSE)) return; + if (!(GetEntityIndex(param2) != GetEntityIndex(GetOwner()))) return; + if (!(GetEntityRange(param2) < 128)) return; + SetAngles("face"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + SetAngles("face"); + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 1000, 100)); + if (PLANT_LEVEL == 1) + { + if ((param1)) + { + } + EmitSound(GetOwner(), 0, SOUND_SCRATCH, 10); + } + if (PLANT_LEVEL == 2) + { + if ((param1)) + { + } + if ((SHOOTING)) + { + } + if (GetEntityRange(ATTACK_TARGET) < MELE_RANGE) + { + } + EmitSound(GetOwner(), 0, SOUND_SCRATCH, 10); + } + if (PLANT_LEVEL == 3) + { + if ((param1)) + { + } + if ((SHOOTING)) + { + } + if (GetEntityRange(ATTACK_TARGET) < MELE_RANGE) + { + } + EmitSound(GetOwner(), 0, SOUND_SCRATCH, 10); + } + } + + void setup_plant_level1() + { + SetName("Doom Shrub"); + string F_HP = MY_DMG; + if (MY_DMG == "MY_DMG") + { + ScheduleDelayedEvent(0.1, "setup_plant_level1"); + } + F_HP *= 2; + if (NPC_HP_MULTI > 1) + { + F_HP *= NPC_HP_MULTI; + } + SetHealth(F_HP); + SetModel(MODEL_LEVEL1); + if ((FIRST_SET_DONE)) + { + SetSolid("box"); + LogDebug("set solid"); + } + SCAN_RANGE = 96; + PLANT_LEVEL = 1; + ANIM_ATTACK = "thornplant2_attack"; + ANIM_DEATH = "thornplant2_harvest"; + select_idle_anim(); + SetIdleAnim(ANIM_IDLE); + } + + void setup_plant_level2() + { + SetName("Doom Bush"); + string F_HP = MY_DMG; + F_HP *= 10; + if (NPC_HP_MULTI > 1) + { + F_HP *= NPC_HP_MULTI; + } + SetHealth(F_HP); + SetModel(MODEL_LEVEL2); + SetSolid("box"); + SCAN_RANGE = 512; + PLANT_LEVEL = 2; + ANIM_ATTACK = "thornplant2_2_attack"; + ANIM_DEATH = "thornplant2_2_harvest"; + select_idle_anim(); + SetIdleAnim(ANIM_IDLE); + } + + void setup_plant_level3() + { + SetName("Doom Tree"); + string F_HP = MY_DMG; + F_HP *= 50; + if (NPC_HP_MULTI > 1) + { + F_HP *= NPC_HP_MULTI; + } + SetHealth(F_HP); + SetModel(MODEL_LEVEL3); + SetSolid("box"); + SCAN_RANGE = 1024; + PLANT_LEVEL = 3; + ANIM_ATTACK = "thornplant2_3_attack"; + ANIM_DEATH = "thornplant2_3_harvest"; + select_idle_anim(); + SetIdleAnim(ANIM_IDLE); + } + + void grow_done() + { + GROWING = 0; + SHOOTING = 0; + SHOOT_DELAY = 0; + SPORE_DELAY = 0; + SetSolid("box"); + } + + void grow_next_level() + { + if ((GROWING)) return; + if (!(GetGameTime() > NEXT_GROW)) return; + set_next_grow(); + if (PLANT_LEVEL == 2) + { + ScheduleDelayedEvent(0.2, "grow_level3"); + } + if (PLANT_LEVEL == 1) + { + ScheduleDelayedEvent(0.2, "grow_level2"); + } + REPULSE = 1; + repulse_loop(); + ScheduleDelayedEvent(1.0, "end_repulse"); + } + + void grow_level2() + { + SHOOTING = 0; + setup_plant_level2(); + GROWING = 1; + EmitSound(GetOwner(), 0, SOUND_GROW, 10); + PlayAnim("critical", "thornplant2_2_grow"); + } + + void grow_level3() + { + SHOOTING = 0; + setup_plant_level3(); + GROWING = 1; + EmitSound(GetOwner(), 0, SOUND_GROW, 10); + PlayAnim("critical", "thornplant2_3_grow"); + } + + void attack_done() + { + SHOOTING = 0; + if (PLANT_LEVEL == 1) + { + SHOOT_DELAY = 0; + } + if (PLANT_LEVEL > 1) + { + FREQ_SHOOT("reset_shoot_delay"); + } + } + + void attack_target() + { + if ((SHOOT_DELAY)) return; + if ((SHOOTING)) return; + if ((I_R_FROZEN)) return; + SHOOT_DELAY = 1; + ATTACK_TARGET = param1; + SetMoveDest(ATTACK_TARGET); + PlayAnim("critical", ANIM_ATTACK); + SHOOTING = 1; + attack_loop(); + if (!(PLANT_LEVEL == 3)) return; + if ((SPORE_DELAY)) return; + SPORE_DELAY = 1; + FREQ_SPORE("reset_spore_delay"); + fire_spore(ATTACK_TARGET); + } + + void attack_loop() + { + if (!(SHOOTING)) return; + ScheduleDelayedEvent(0.5, "attack_loop"); + SetMoveDest(ATTACK_TARGET); + if (!(GetEntityRange(ATTACK_TARGET) < SCAN_RANGE)) return; + if (PLANT_LEVEL == 1) + { + EmitSound(GetOwner(), 0, SOUND_SLASH, 10); + DoDamage(ATTACK_TARGET, SCAN_RANGE, MY_DMG, PLANT_HITCHANCE, "slash"); + } + if (PLANT_LEVEL == 2) + { + EmitSound(GetOwner(), 0, SOUND_SLASH, 10); + DoDamage(ATTACK_TARGET, MELE_RANGE, MY_DMG, PLANT_HITCHANCE, "slash"); + TossProjectile("proj_thorn", /* TODO: $relpos */ $relpos(0, 32, -16), ATTACK_TARGET, 1000, MY_DMG, 0.1, "none"); + } + if (PLANT_LEVEL == 3) + { + EmitSound(GetOwner(), 0, SOUND_SLASH, 10); + DoDamage(ATTACK_TARGET, MELE_RANGE, MY_DMG, PLANT_HITCHANCE, "slash"); + TossProjectile("proj_thorn", /* TODO: $relpos */ $relpos(0, 32, 16), ATTACK_TARGET, 1000, MY_DMG, 0.1, "none"); + TossProjectile("proj_thorn", /* TODO: $relpos */ $relpos(0, 32, 16), ATTACK_TARGET, 800, MY_DMG, 1, "none"); + if (GetEntityRange(ATTACK_TARGET) < MELE_RANGE) + { + if (RandomInt(1, 10) == 1) + { + } + ApplyEffect(ATTACK_TARGET, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + } + } + } + + void fire_spore() + { + EmitSound(GetOwner(), 0, SOUND_SPORE, 10); + string SPORE_DAMAGE = MY_DMG; + SPORE_DAMAGE *= 4; + SPORE_POISON_DMG = MY_DMG; + TossProjectile("proj_spore", /* TODO: $relpos */ $relpos(0, 32, 16), ATTACK_TARGET, 500, SPORE_DAMAGE, 0.1, "none"); + } + + void reset_spore_delay() + { + SPORE_DELAY = 0; + } + + void reset_shoot_delay() + { + SHOOT_DELAY = 0; + } + + void select_idle_anim() + { + if (PLANT_LEVEL == 1) + { + string IDLE_ANIMS = SHRUB_IDLE_ANIMS; + } + if (PLANT_LEVEL == 2) + { + string IDLE_ANIMS = BUSH_IDLE_ANIMS; + } + if (PLANT_LEVEL == 3) + { + string IDLE_ANIMS = TREE_IDLE_ANIMS; + } + string NIDLE_ANIMS = GetTokenCount(IDLE_ANIMS, ";"); + NIDLE_ANIMS -= 1; + int RND_IDLE = RandomInt(0, NIDLE_ANIMS); + ANIM_IDLE = GetToken(IDLE_ANIMS, RND_IDLE, ";"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetAlive(1); + GROWING = 1; + SetInvincible(true); + PlayAnim("critical", ANIM_DEATH); + set_next_grow(); + } + + void shrink_done() + { + GROWING = 0; + SHOOTING = 0; + SHOOT_DELAY = 0; + SPORE_DELAY = 0; + SetInvincible(false); + REPULSE = 1; + repulse_loop(); + ScheduleDelayedEvent(1.0, "end_repulse"); + PLANT_LEVEL -= 1; + if (PLANT_LEVEL == 2) + { + ScheduleDelayedEvent(0.1, "setup_plant_level2"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (PLANT_LEVEL == 1) + { + ScheduleDelayedEvent(0.1, "setup_plant_level1"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (PLANT_LEVEL == 0) + { + EmitSound(GetOwner(), 0, SOUND_GIB, 10); + Effect("tempent", "gibs", GIB_MODEL, /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, 100, 30, 20, 4.0); + CallExternal(MY_OWNER, "plant_died"); + LogDebug("died"); + SetSolid("none"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SetModel("none"); + DeleteEntity(GetOwner()); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void OnDamage(int damage) override + { + ATTACK_TARGET = GetEntityIndex(m_hLastStruck); + SetMoveDest(GetEntityIndex(m_hLastStruck)); + if ((SHOOTING)) return; + if (PLANT_LEVEL > 1) + { + attack_target(ATTACK_TARGET); + } + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((SHOOTING)) return; + if ((GROWING)) return; + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(LAST_HEARD) == "enemy")) return; + SetMoveDest(LAST_HEARD); + if (PLANT_LEVEL > 1) + { + attack_target(LAST_HEARD); + } + if (PLANT_LEVEL == 1) + { + if (GetEntityRange(LAST_HEARD) < MELE_RANGE) + { + } + attack_target(LAST_HEARD); + } + } + + void master_stuck() + { + if (!(GetEntityRange(MY_MASTER) < 256)) return; + SetSolid("none"); + AddVelocity(MY_OWNER, /* TODO: $relvel */ $relvel(0, 1000, 100)); + ScheduleDelayedEvent(0.2, "resume_solid"); + } + + void resume_solid() + { + SetSolid("box"); + } + + void set_next_grow() + { + NEXT_GROW = GetGameTime(); + NEXT_GROW += FREQ_GROW; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/dragonfly.as b/scripts/angelscript/monsters/summon/dragonfly.as new file mode 100644 index 00000000..e1b2fdd3 --- /dev/null +++ b/scripts/angelscript/monsters/summon/dragonfly.as @@ -0,0 +1,68 @@ +#pragma context server + +#include "monsters/dragonfly.as" + +namespace MS +{ + +class Dragonfly : CGameScript +{ + string ATTACK_DAMAGE; + string FIRST_TARGET; + string MY_DURATION; + string MY_OWNER; + int NPC_GIVE_EXP; + string SUMMON_HP; + + Dragonfly() + { + } + + void OnSpawn() override + { + SetName("Dragonfly Spawn"); + SetModel("monsters/dragonfly.mdl"); + SetFly(true); + SetRace("demon"); + SetHealth(30); + SetWidth(24); + SetHeight(24); + SetHearingSensitivity(2); + SetVolume(5); + SetRoam(true); + SetDamageResistance("pierce", 0.5); + SetMonsterClip(0); + NPC_GIVE_EXP = 10; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void OnPostSpawn() override + { + SetHealth(SUMMON_HP); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + ATTACK_DAMAGE = param2; + SUMMON_HP = param3; + MY_DURATION = param4; + FIRST_TARGET = param5; + ScheduleDelayedEvent(1.5, "set_firstarg"); + MY_DURATION("fade_out"); + } + + void set_firstarg() + { + npcatk_settarget(FIRST_TARGET); + } + + void fade_out() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/fangtooth.as b/scripts/angelscript/monsters/summon/fangtooth.as new file mode 100644 index 00000000..dc812903 --- /dev/null +++ b/scripts/angelscript/monsters/summon/fangtooth.as @@ -0,0 +1,89 @@ +#pragma context server + +#include "monsters/summon/giant_rat.as" + +namespace MS +{ + +class Fangtooth : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_RUN_BASE; + string ANIM_WALK; + string ANIM_WALK_BASE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int MOVE_RANGE; + int SUMMON_CIRCLE_INDEX; + string SUM_REPORT_SUFFIX; + string SUM_SAY_ATTACK; + string SUM_SAY_COME; + string SUM_SAY_DEATH; + string SUM_SAY_DEFEND; + string SUM_SAY_GUARD; + string SUM_SAY_HUNT; + string TRICK_ANIM; + + Fangtooth() + { + SUMMON_CIRCLE_INDEX = 12; + SUM_SAY_COME = "*squirk!*"; + SUM_SAY_ATTACK = "*squeek!* *squeek!*"; + SUM_SAY_HUNT = "*squirk...*"; + SUM_SAY_DEFEND = "*squeekie!*"; + SUM_SAY_DEATH = "*SQUEEK!*"; + SUM_SAY_GUARD = "*gasp!*"; + SUM_REPORT_SUFFIX = "..er, I mean, *squirk*!?"; + ANIM_WALK_BASE = "walk"; + ANIM_RUN_BASE = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 60; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.9; + TRICK_ANIM = "attack"; + } + + void summon_spawn() + { + SetName("Fang Tooth"); + SetFOV(359); + SetWidth(32); + SetHeight(20); + SetRoam(true); + SetHearingSensitivity(6); + SetSkillLevel(0); + SetRace("human"); + SetModel("monsters/giant_rat.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim("run"); + PlayAnim("once", "idle1"); + SetAnimMoveSpeed(2.0); + SetAnimFrameRate(2.0); + BASE_FRAMERATE = 2.0; + BASE_MOVESPEED = 2.0; + basesummon_attackall(); + CatchSpeech("rat_standup", "stand"); + CatchSpeech("rat_rollover", "rollover"); + CatchSpeech("rat_playdead", "play dead"); + } + + void bite_dodamage() + { + if (!(RandomInt(1, 3) == 1)) return; + ApplyEffect(param2, "effects/dot_poison", 10, GetEntityIndex(GetOwner()), Random(1, 10)); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/felewyn_shard.as b/scripts/angelscript/monsters/summon/felewyn_shard.as new file mode 100644 index 00000000..b98e67e0 --- /dev/null +++ b/scripts/angelscript/monsters/summon/felewyn_shard.as @@ -0,0 +1,175 @@ +#pragma context server + +namespace MS +{ + +class FelewynShard : CGameScript +{ + float CHAT_DELAY; + int CUR_ANG; + int GAVE_SWORD; + string GLOW_COLOR; + string GLOW_RAD; + string MY_SCRIPT_IDX; + string MY_TARGET; + int NPC_FWD_SPEED; + string NPC_NOCLIP_DEST; + string SKEL_ID; + string SKEL_LIGHT_ID; + + FelewynShard() + { + NPC_FWD_SPEED = 5; + CHAT_DELAY = 5.0; + } + + void game_dynamically_created() + { + MY_TARGET = param1; + } + + void OnSpawn() override + { + SetName("Shard of Felewyn"); + SetInvincible(true); + SetWidth(32); + SetHeight(128); + SetGravity(0); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 43); + SetIdleAnim("spin_horizontal_slow"); + PlayAnim("once", "spin_horizontal_slow"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetSolid("none"); + ClientEvent("new", "all", currentscript, GetEntityIndex(GetOwner()), Vector3(255, 255, 255), 255); + MY_SCRIPT_IDX = "game.script.last_sent_id"; + SetMonsterClip(0); + SetFly(true); + SetSayTextRange(2048); + ScheduleDelayedEvent(1.0, "do_intro"); + } + + void do_intro() + { + SayText(I + " am a shard of the original Felewyn Blade..."); + CHAT_DELAY("do_intro2"); + } + + void do_intro2() + { + SayText("One of five , scattered throughout the lands , when our goddess pierced the heart of the Doom Bringer with her sword."); + CHAT_DELAY("do_intro3"); + } + + void do_intro3() + { + SayText("We await that dread day when the Lor Malgoriand is destined to return. We await that day when great warriors may find us."); + CHAT_DELAY("do_intro4"); + } + + void do_intro4() + { + SayText("And lo , it has come , for you mighty warriors have defeated the mighty Undamael , a task previously believed beyond the reach of mortal hands."); + CHAT_DELAY("do_intro5"); + } + + void do_intro5() + { + SayText("Although you have all fought valiantly , " + I + "am but one shard. Thus , " + I + "offer myself to the warrior known as " + GetEntityName(MY_TARGET)); + CHAT_DELAY("do_intro6"); + SetMoveDest(MY_TARGET); + NPC_NOCLIP_DEST = MY_TARGET; + ScheduleDelayedEvent(0.1, "basenoclip_flight"); + } + + void basenoclip_flight() + { + if ((GAVE_SWORD)) return; + ScheduleDelayedEvent(0.1, "basenoclip_flight"); + string MY_ORG = GetMonsterProperty("origin"); + MY_ORG += /* TODO: $relvel */ $relvel(0, NPC_FWD_SPEED, 0); + SetEntityOrigin(GetOwner(), MY_ORG); + SetMoveDest(NPC_NOCLIP_DEST); + string TARG_ORG = GetEntityOrigin(MY_TARGET); + if (!(Distance(MY_ORG, TARG_ORG) < 30)) return; + GAVE_SWORD = 1; + SetProp(GetOwner(), "renderamt", 0); + Effect("screenfade", MY_TARGET, 3, 1, Vector3(255, 255, 255), 255, "fadein"); + int FRAG_ELM = RandomInt(1, 5); + if (FRAG_ELM == 1) + { + // TODO: offer MY_TARGET swords_fshard1 + } + if (FRAG_ELM == 2) + { + // TODO: offer MY_TARGET swords_fshard2 + } + if (FRAG_ELM == 3) + { + // TODO: offer MY_TARGET swords_fshard3 + } + if (FRAG_ELM == 4) + { + // TODO: offer MY_TARGET swords_fshard4 + } + if (FRAG_ELM == 5) + { + // TODO: offer MY_TARGET swords_fshard5 + } + SetPlayerQuestData(MY_TARGET, "f"); + ShowHelpTip(GetOwner(), "generic", "One Time Quest (Shard of Felewyn) Completed", "The Felwyn Shard has been acquired.|Quest Complete."); + SetModel("none"); + ClientEvent("remove", "all", MY_SCRIPT_IDX); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void client_activate() + { + CUR_ANG = 0; + SKEL_ID = param1; + GLOW_COLOR = param2; + GLOW_RAD = param3; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + int RND_R = RandomInt(0, 255); + int RND_G = RandomInt(0, 255); + int RND_B = RandomInt(0, 255); + Vector3 RND_COLOR = Vector3(RND_R, RND_G, RND_B); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, RND_COLOR, 1.0); + CUR_ANG += 18; + if (CUR_ANG > 359) + { + CUR_ANG -= 359; + } + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, CUR_ANG, 0), Vector3(0, 32, 0)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", L_POS, "glow_sprite"); + } + + void glow_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", -1.1); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 128, 255)); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/fire_ball_guided.as b/scripts/angelscript/monsters/summon/fire_ball_guided.as new file mode 100644 index 00000000..30ad70b5 --- /dev/null +++ b/scripts/angelscript/monsters/summon/fire_ball_guided.as @@ -0,0 +1,208 @@ +#pragma context server + +namespace MS +{ + +class FireBallGuided : CGameScript +{ + int COLLIDE_RANGE; + int DETECT_RANGE; + string FIRST_TARG; + float FREQ_HUNT; + float FREQ_MOVE; + int IS_ACTIVE; + string MY_AOE; + string MY_BASE_DMG; + string MY_DEST; + string MY_DURATION; + string MY_OWNER; + int MY_SPEED; + string MY_TARGET; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string PREV_POV; + string PUSH_LIST; + string SOUND_EXPLODE; + string SPRITE_EXPLODE; + string SPRITE_FIRE; + + FireBallGuided() + { + SPRITE_EXPLODE = "bigsmoke.spr"; + SOUND_EXPLODE = "weapons/explode3.wav"; + SPRITE_FIRE = "firemagic.spr"; + DETECT_RANGE = 64; + COLLIDE_RANGE = 16; + MY_SPEED = 300; + FREQ_HUNT = 1.0; + FREQ_MOVE = 0.5; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_BASE_DMG = param2; + MY_DURATION = param3; + MY_AOE = param4; + FIRST_TARG = param5; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + SetRace(GetEntityRace(MY_OWNER)); + if (!(OWNER_ISPLAYER)) + { + MY_TARGET = GetEntityProperty(MY_OWNER, "scriptvar"); + } + if ((OWNER_ISPLAYER)) + { + MY_TARGET = GetEntityProperty(MY_OWNER, "target"); + } + if ((IsEntityAlive(FIRST_TARG))) + { + MY_TARGET = FIRST_TARG; + } + if (!(IsEntityAlive(MY_TARGET))) + { + find_new_target(); + } + MY_DEST = GetEntityOrigin(MY_TARGET); + MY_DURATION("go_splodie"); + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.01, "hunt_cycle"); + ScheduleDelayedEvent(0.1, "move_cycle"); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, MY_SPEED, 0)); + } + + void OnSpawn() override + { + SetName("fire ball"); + SetHealth(30); + SetFly(true); + SetWidth(32); + SetHeight(32); + SetModel("weapons/projectiles.mdl"); + PLAYING_DEAD = 1; + SetMonsterClip(0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + EmitSound(GetOwner(), 0, "weapons/rocketfire1.wav", 10); + SetModelBody(0, 40); + SetIdleAnim("idle_icebolt"); + SetSolid("none"); + } + + void hunt_cycle() + { + if (!(IS_ACTIVE)) return; + FREQ_HUNT("hunt_cycle"); + if (!(IsEntityAlive(MY_TARGET))) + { + find_new_target(); + } + if (!(IsEntityAlive(MY_TARGET))) + { + string OWNER_ANG = GetEntityAngles(MY_OWNER); + SetAngles("face"); + MY_DEST = /* TODO: $relpos */ $relpos(0, 1000, 0); + } + else + { + MY_DEST = GetEntityOrigin(MY_TARGET); + } + float RND_FB = Random(0, 64); + float RND_RL = Random(-64, 64); + float RND_UD = Random(0, 64); + MY_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(RND_RL, RND_FB, RND_UD)); + if (PREV_POV != "PREV_POV") + { + if (GetMonsterProperty("origin") == PREV_POV) + { + } + go_splodie("stuck"); + } + PREV_POV = GetMonsterProperty("origin"); + string HIT_WALL = TraceLine(GetMonsterProperty("origin"), MY_DEST); + if (Distance(GetMonsterProperty("origin"), HIT_WALL) < COLLIDE_RANGE) + { + go_splodie("hitwall"); + } + string FLOOR_Z = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + string FLOOR_ORG = GetMonsterProperty("origin"); + FLOOR_ORG = "z"; + if (!(Distance(GetMonsterProperty("origin"), FLOOR_ORG) < COLLIDE_RANGE)) return; + go_splodie("hitground"); + } + + void move_cycle() + { + if (!(IS_ACTIVE)) return; + FREQ_MOVE("move_cycle"); + if (GetEntityRange(MY_TARGET) < DETECT_RANGE) + { + go_splodie("hittarget"); + } + SetMoveDest(MY_DEST); + MY_DEST += /* TODO: $relvel */ $relvel(0, MY_SPEED, 0); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, MY_SPEED, 0)); + } + + void find_new_target() + { + string TARGET_LIST = FindEntitiesInSphere("enemy", 1024); + if (GetTokenCount(TARGET_LIST, ";") > 0) + { + ScrambleTokens(TARGET_LIST, ";"); + MY_TARGET = GetToken(TARGET_LIST, 0, ";"); + } + MY_DEST = GetEntityOrigin(MY_TARGET); + if ((IsEntityAlive(MY_TARGET))) return; + string OWNER_ANG = GetEntityAngles(MY_OWNER); + SetAngles("face"); + } + + void go_splodie() + { + if (MY_LIGHT_SCRIPT != "MY_LIGHT_SCRIPT") + { + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + } + Effect("tempent", "spray", SPRITE_EXPLODE, GetMonsterProperty("origin"), 0, 1, 0, 0); + SetModel("none"); + XDoDamage(GetMonsterProperty("origin"), MY_AOE, MY_BASE_DMG, 0.1, MY_OWNER, MY_OWNER, "spellcasting.fire", "fire"); + PUSH_LIST = FindEntitiesInSphere("enemy", MY_AOE); + if (PUSH_LIST != "none") + { + for (int i = 0; i < GetTokenCount(PUSH_LIST, ";"); i++) + { + push_loop(); + } + } + EmitSound(GetOwner(), 0, SOUND_EXPLODE, 10); + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void push_loop() + { + string CUR_TARGET = GetToken(PUSH_LIST, i, ";"); + LogDebug("push_loop GetEntityName(CUR_TARGET) of PUSH_LIST"); + string TARGET_ORG = GetEntityOrigin(CUR_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + SetVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 110))); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModel("none"); + SetIdleAnim("none"); + SetAnimFrameRate(0); + SetAlive(1); + go_splodie("slain"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/fire_wave.as b/scripts/angelscript/monsters/summon/fire_wave.as new file mode 100644 index 00000000..aecfb80a --- /dev/null +++ b/scripts/angelscript/monsters/summon/fire_wave.as @@ -0,0 +1,176 @@ +#pragma context server + +namespace MS +{ + +class FireWave : CGameScript +{ + string CL_FLAME_SPRITE; + string FLAME_ANGLE; + string FLAME_OWNER; + string FLAME_POSITION; + int FLAMING; + int FWD_SPEED; + string HIT_TARGS; + int IS_ACTIVE; + string MY_CL_IDX; + string MY_DAMAGE; + string MY_DOT; + string MY_DURATION; + string MY_OWNER; + int MY_RADIUS; + string NPC_NOCLIP_DEST; + int PLAYING_DEAD; + string SOUND_BURN; + int WALL_HEIGHT; + int WALL_WIDTH; + + FireWave() + { + FWD_SPEED = 10; + MY_RADIUS = 76; + SOUND_BURN = "ambience/burning2.wav"; + WALL_HEIGHT = 32; + WALL_WIDTH = 2; + CL_FLAME_SPRITE = "fire1_fixed.spr"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.5); + if ((IS_ACTIVE)) + { + } + HIT_TARGS = /* TODO: $get_tbox */ $get_tbox("enemy", MY_RADIUS); + if (HIT_TARGS != "none") + { + } + for (int i = 0; i < GetTokenCount(HIT_TARGS, ";"); i++) + { + burn_targets(); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.1); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DAMAGE = param2; + MY_DOT = param3; + MY_DURATION = param4; + SetRace(GetEntityRace(MY_OWNER)); + string OWNER_YAW = GetEntityProperty(MY_OWNER, "angles.yaw"); + NPC_NOCLIP_DEST = GetMonsterProperty("origin"); + NPC_NOCLIP_DEST += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, 9999, 0)); + ClientEvent("new", "all", currentscript, GetEntityIndex(GetOwner()), OWNER_YAW); + MY_CL_IDX = "game.script.last_sent_id"; + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "active_loop"); + MY_DURATION("remove_me"); + } + + void remove_me() + { + IS_ACTIVE = 0; + EmitSound(GetOwner(), CHAN_ITEM, SOUND_BURN, 0); + ClientEvent("remove", "all", MY_CL_IDX); + ScheduleDelayedEvent(0.1, "remove_me2"); + } + + void remove_me2() + { + DeleteEntity(GetOwner()); + } + + void OnSpawn() override + { + SetName("Wave of Fire"); + SetWidth(32); + SetHeight(32); + SetModel("none"); + SetSolid("none"); + PLAYING_DEAD = 1; + SetInvincible(true); + EmitSound(GetOwner(), CHAN_ITEM, SOUND_BURN, 7); + } + + void active_loop() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "active_loop"); + string MY_ORG = GetMonsterProperty("origin"); + MY_ORG += /* TODO: $relvel */ $relvel(0, FWD_SPEED, 0); + MY_ORG = "z"; + MY_ORG += "z"; + SetEntityOrigin(GetOwner(), MY_ORG); + SetMoveDest(NPC_NOCLIP_DEST); + } + + void burn_targets() + { + string CUR_TARGET = GetToken(HIT_TARGS, i, ";"); + ApplyEffect(CUR_TARGET, "effects/dot_fire", 10, MY_OWNER, MY_DOT); + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(-20, 600, 30)); + } + + void client_activate() + { + FLAME_OWNER = param1; + FLAME_ANGLE = Vector3(0, param2, 0); + flames_start(); + } + + void flames_start() + { + FLAMING = 1; + } + + void flames_shoot() + { + FLAME_POSITION = /* TODO: $getcl */ $getcl(FLAME_OWNER, "origin"); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(40, 0, WALL_HEIGHT)); + L_POS += FLAME_POSITION; + ClientEffect("tempent", "sprite", CL_FLAME_SPRITE, L_POS, "setup_flames"); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(25, 0, WALL_HEIGHT)); + L_POS += FLAME_POSITION; + ClientEffect("tempent", "sprite", CL_FLAME_SPRITE, L_POS, "setup_flames"); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(10, 0, WALL_HEIGHT)); + L_POS += FLAME_POSITION; + ClientEffect("tempent", "sprite", CL_FLAME_SPRITE, L_POS, "setup_flames"); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(0, 0, WALL_HEIGHT)); + L_POS += FLAME_POSITION; + ClientEffect("tempent", "sprite", CL_FLAME_SPRITE, L_POS, "setup_flames"); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(-10, 0, WALL_HEIGHT)); + L_POS += FLAME_POSITION; + ClientEffect("tempent", "sprite", CL_FLAME_SPRITE, L_POS, "setup_flames"); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(-25, 0, WALL_HEIGHT)); + L_POS += FLAME_POSITION; + ClientEffect("tempent", "sprite", CL_FLAME_SPRITE, L_POS, "setup_flames"); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(-40, 0, WALL_HEIGHT)); + L_POS += FLAME_POSITION; + ClientEffect("tempent", "sprite", CL_FLAME_SPRITE, L_POS, "setup_flames"); + } + + void setup_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.2); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("tempent", "set_current_prop", "scale", 1.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/flame_burst.as b/scripts/angelscript/monsters/summon/flame_burst.as new file mode 100644 index 00000000..2aa41859 --- /dev/null +++ b/scripts/angelscript/monsters/summon/flame_burst.as @@ -0,0 +1,83 @@ +#pragma context server + +namespace MS +{ + +class FlameBurst : CGameScript +{ + string ACTIVE_SKILL; + string BURST_SCRIPT_IDX; + string MY_BASE_DAMAGE; + string MY_OWNER; + string ONE_SHOT; + string OWNER_ISPLAYER; + int SCAN_RANGE; + + FlameBurst() + { + SCAN_RANGE = 256; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + OWNER_ISPLAYER = IsValidPlayer(param1); + MY_BASE_DAMAGE = param2; + if (param3 != "PARAM3") + { + ONE_SHOT = param3; + } + ACTIVE_SKILL = param4; + if (ACTIVE_SKILL == "PARAM4") + { + ACTIVE_SKILL = "spellcasting.fire"; + } + ClientEvent("new", "all_in_sight", "monsters/summon/flame_burst_cl", GetEntityIndex(MY_OWNER)); + BURST_SCRIPT_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.25, "big_boom"); + ScheduleDelayedEvent(3.0, "effect_die"); + } + + void effect_die() + { + ClientEffect("remove", "all", BURST_SCRIPT_IDX); + DeleteEntity(GetOwner()); + } + + void big_boom() + { + EmitSound(GetOwner(), 0, "ambience/steamburst1.wav", 10); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, -32), SCAN_RANGE, 0.0, 1.0, 0); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + if ((OWNER_ISPLAYER)) + { + if (!("game.pvp")) + { + } + if ((IsValidPlayer(param2))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(ONE_SHOT)) + { + if (!(GetEntityProperty(param2, "haseffect"))) + { + } + ApplyEffect(param2, "effects/dot_fire", 5, MY_OWNER, MY_BASE_DAMAGE, ACTIVE_SKILL); + } + if ((ONE_SHOT)) + { + XDoDamage(GetEntityIndex(param2), "direct", MY_BASE_DAMAGE, 1.0, MY_OWNER, MY_OWNER, ACTIVE_SKILL, "fire"); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/flame_burst_cl.as b/scripts/angelscript/monsters/summon/flame_burst_cl.as new file mode 100644 index 00000000..b3b544d8 --- /dev/null +++ b/scripts/angelscript/monsters/summon/flame_burst_cl.as @@ -0,0 +1,53 @@ +#pragma context client + +namespace MS +{ + +class FlameBurstCl : CGameScript +{ + int CYCLE_ANGLE; + string OWNER_POS; + + void client_activate() + { + const string FIRE_SPRITE = "fire1_fixed.spr"; + const int TOTAL_OFS = 10; + CYCLE_ANGLE = 0; + OWNER_POS = /* TODO: $getcl */ $getcl(param1, "origin"); + for (int i = 0; i < 17; i++) + { + create_flames(); + } + ScheduleDelayedEvent(2.9, "remove_me_cl"); + EmitSound3D("ambience/steamburst1.wav", 10, OWNER_POS); + } + + void remove_me_cl() + { + RemoveScript(); + } + + void create_flames() + { + string FLAME_POS = OWNER_POS; + FLAME_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, 0)); + ClientEffect("tempent", "sprite", FIRE_SPRITE, FLAME_POS, "setup_flame"); + CYCLE_ANGLE += 20; + } + + void setup_flame() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 100, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/flame_skull.as b/scripts/angelscript/monsters/summon/flame_skull.as new file mode 100644 index 00000000..e4e59804 --- /dev/null +++ b/scripts/angelscript/monsters/summon/flame_skull.as @@ -0,0 +1,199 @@ +#pragma context server + +namespace MS +{ + +class FlameSkull : CGameScript +{ + string ACTIVE_SKILL; + string DMG_BASE; + int FLY_COUNT; + float FREQ_SOUND; + string GAME_PVP; + int IS_FLYING; + string LAST_BURNED; + string MY_OWNER; + string MY_RADIUS; + string MY_SCRIPT_ID; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + int ROT_COUNT; + string SKEL_LIGHT_ID; + string SKULL_IDX; + int SOUND_DELAY; + string SOUND_FIRE; + string SOUND_LOOP; + string SOUND_SCREAM; + string SOUND_START; + string START_POS; + + FlameSkull() + { + SetCallback("touch", "enable"); + SOUND_SCREAM = "magic/spookie1.wav"; + SOUND_FIRE = "magic/fireball_strike.wav"; + SOUND_START = "magic/volcano_start.wav"; + SOUND_LOOP = "magic/volcano_loop.wav"; + FREQ_SOUND = 3.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(4.4); + if ((IS_FLYING)) + { + } + EmitSound(GetOwner(), 1, SOUND_SCREAM, 10); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + DMG_BASE = param2; + MY_RADIUS = param3; + ACTIVE_SKILL = param4; + if (ACTIVE_SKILL == "PARAM4") + { + ACTIVE_SKILL = "spellcasting.fire"; + } + GAME_PVP = "game.pvp"; + START_POS = GetEntityOrigin(MY_OWNER); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + if (!(OWNER_ISPLAYER)) + { + string OWNER_HEIGHT = GetEntityHeight(MY_OWNER); + OWNER_HEIGHT /= 2; + START_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, OWNER_HEIGHT)); + } + StoreEntity("ent_expowner"); + FLY_COUNT = 0; + ROT_COUNT = 0; + IS_FLYING = 1; + ClientEvent("new", "all", currentscript, GetEntityIndex(GetOwner())); + MY_SCRIPT_ID = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.1, "skull_fly"); + } + + void OnSpawn() override + { + SetName("Flaming Skull"); + SetHealth(1); + SetRace("beloved"); + PLAYING_DEAD = 1; + SetInvincible(true); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 12); + SetSolid("trigger"); + SetWidth(32); + SetHeight(32); + SetGravity(0); + SetFly(true); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + // svplaysound: svplaysound 2 10 SOUND_LOOP + EmitSound(2, 10, SOUND_LOOP); + LogDebug("Spawned Flaming Skull"); + } + + void skull_fly() + { + if (!(IS_FLYING)) return; + ScheduleDelayedEvent(0.1, "skull_fly"); + FLY_COUNT += 1; + ROT_COUNT += 10; + if (FLY_COUNT >= MY_RADIUS) + { + end_flight(); + } + if (ROT_COUNT > 359) + { + ROT_COUNT -= 359; + } + string NEW_POS = START_POS; + NEW_POS += /* TODO: $relpos */ $relpos(Vector3(0, ROT_COUNT, 0), /* TODO: $vece */ $vece(0, FLY_COUNT, 0)); + SetEntityOrigin(GetOwner(), NEW_POS); + SetAngles("face"); + if ((SOUND_DELAY)) return; + SOUND_DELAY = 1; + FREQ_SOUND("sound_delay_reset"); + EmitSound(GetOwner(), 0, SOUND_START, 10); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 200, 200, 2, 128); + } + + void end_flight() + { + IS_FLYING = 0; + SetProp(GetOwner(), "renderamt", 0); + // svplaysound: svplaysound 2 0 SOUND_LOOP + EmitSound(2, 0, SOUND_LOOP); + ClientEvent("remove", "all", MY_SCRIPT_ID); + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void sound_delay_reset() + { + SOUND_DELAY = 1; + } + + void OnTouch(CBaseEntity@ other) override + { + if ((GetEntityProperty(param1, "haseffect"))) return; + if (!(param1 != LAST_BURNED)) return; + if (!(GetRelationship(param1) == "enemy")) return; + ApplyEffect(param1, "effects/dot_fire", 5.0, MY_OWNER, DMG_BASE, ACTIVE_SKILL); + LAST_BURNED = param1; + } + + void client_activate() + { + SKULL_IDX = param1; + SetCallback("render", "enable"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKULL_IDX, "origin"), 128, Vector3(255, 72, 0), 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + spit_fire(); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKULL_IDX, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, 128, Vector3(255, 72, 0), 1.0); + } + + void spit_fire() + { + SetRepeatDelay(0.25); + int RAND_ANG = RandomInt(0, 359); + string SKULL_POS = /* TODO: $getcl */ $getcl(SKULL_IDX, "origin"); + SKULL_POS += /* TODO: $relpos */ $relpos(Vector3(0, RAND_ANG, 0), Vector3(0, 30, 0)); + ClientEffect("tempent", "sprite", "rjet1.spr", SKULL_POS, "spit_fire_sprites"); + string SKULL_POS = /* TODO: $getcl */ $getcl(SKULL_IDX, "origin"); + SKULL_POS += /* TODO: $relpos */ $relpos(Vector3(0, RAND_ANG, 0), Vector3(0, 30, 0)); + ClientEffect("tempent", "sprite", "rjet1.spr", SKULL_POS, "spit_fire_sprites"); + string SKULL_POS = /* TODO: $getcl */ $getcl(SKULL_IDX, "origin"); + SKULL_POS += /* TODO: $relpos */ $relpos(Vector3(0, RAND_ANG, 0), Vector3(0, 30, 0)); + ClientEffect("tempent", "sprite", "rjet1.spr", SKULL_POS, "spit_fire_sprites"); + } + + void spit_fire_sprite() + { + Vector3 RAND_VEC = Vector3(0, 0, Random(0, 5)); + ClientEffect("tempent", "set_current_prop", "death_delay", 1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 60); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "velocity", RAND_VEC); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "frames", 4); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/fx_manabolt.as b/scripts/angelscript/monsters/summon/fx_manabolt.as new file mode 100644 index 00000000..38c49ddb --- /dev/null +++ b/scripts/angelscript/monsters/summon/fx_manabolt.as @@ -0,0 +1,64 @@ +#pragma context server + +namespace MS +{ + +class FxManabolt : CGameScript +{ + string F_BALL_SIZE; + string MY_OWNER; + + void OnSpawn() override + { + SetModel("weapons/projectiles.mdl"); + SetSolid("none"); + SetModelBody(0, 14); + SetRace("beloved"); + SetInvincible(true); + SetFly(true); + SetGravity(0); + SetMonsterClip(0); + SetProp(GetOwner(), "renderamt", 10); + SetProp(GetOwner(), "rendermode", 5); + } + + void game_dynamically_created() + { + MY_OWNER = GetEntityIndex(param1); + ScheduleDelayedEvent(0.1, "stick_to_owner"); + } + + void stick_to_owner() + { + ScheduleDelayedEvent(0.1, "stick_to_owner"); + SetProp(GetOwner(), "renderamt", 10); + SetProp(GetOwner(), "rendermode", 5); + string SET_LOC = GetEntityOrigin(MY_OWNER); + string OWNER_YAW = GetEntityProperty(MY_OWNER, "angles.yaw"); + string OWNER_PITCH = GetEntityProperty(MY_OWNER, "angles.pitch"); + string N_OWNER_PITCH = /* TODO: $neg */ $neg(OWNER_PITCH); + SET_LOC += /* TODO: $relpos */ $relpos(Vector3(N_OWNER_PITCH, OWNER_YAW, 0), Vector3(0, 20, 28)); + SetEntityOrigin(GetOwner(), SET_LOC); + F_BALL_SIZE = GetEntityProperty(MY_OWNER, "scriptvar"); + if (F_BALL_SIZE == 0) + { + DeleteEntity(GetOwner()); + } + if (!(F_BALL_SIZE > 0)) return; + int SUB_MODEL = int(F_BALL_SIZE); + SUB_MODEL += 12; + int SUB_MODEL = int(SUB_MODEL); + SetModelBody(0, SUB_MODEL); + } + + void set_size() + { + string IN_SIZE = param1; + int SUB_MODEL = int(IN_SIZE); + SUB_MODEL += 13; + SetModelBody(0, SUB_MODEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/giant_rat.as b/scripts/angelscript/monsters/summon/giant_rat.as new file mode 100644 index 00000000..824db5ee --- /dev/null +++ b/scripts/angelscript/monsters/summon/giant_rat.as @@ -0,0 +1,103 @@ +#pragma context server + +#include "monsters/summon/base_summon.as" +#include "monsters/summon/rat.as" + +namespace MS +{ + +class GiantRat : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_RUN_BASE; + string ANIM_WALK; + string ANIM_WALK_BASE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int I_R_PET; + int MOVE_RANGE; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SUMMON_CIRCLE_INDEX; + string SUM_REPORT_SUFFIX; + string SUM_SAY_ATTACK; + string SUM_SAY_COME; + string SUM_SAY_DEATH; + string SUM_SAY_DEFEND; + string SUM_SAY_GUARD; + string SUM_SAY_HUNT; + string TRICK_ANIM; + + GiantRat() + { + I_R_PET = 1; + SUMMON_CIRCLE_INDEX = 12; + SUM_SAY_COME = "*squeek!*"; + SUM_SAY_ATTACK = "*squeek!* *squeek!*"; + SUM_SAY_HUNT = "*squeek...*"; + SUM_SAY_DEFEND = "*squeekie!*"; + SUM_SAY_DEATH = "*SQUEEK!*"; + SUM_SAY_GUARD = "*squeek!*"; + SUM_REPORT_SUFFIX = "..er, I mean, *squeek*!?"; + ANIM_WALK_BASE = "walk"; + ANIM_RUN_BASE = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 60; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.9; + TRICK_ANIM = "attack"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod1.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_ATTACK1 = "monsters/rat/squeak2.wav"; + SOUND_IDLE1 = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + CAN_HUNT = 1; + CAN_HEAR = 0; + CAN_FLINCH = 0; + } + + void summon_spawn() + { + SetName("Giant Rat"); + SetFOV(359); + SetWidth(32); + SetHeight(20); + SetRoam(true); + SetHearingSensitivity(3); + SetSkillLevel(0); + SetRace("human"); + SetModel("monsters/giant_rat.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim("run"); + basesummon_attackall(); + CatchSpeech("rat_standup", "stand"); + CatchSpeech("rat_rollover", "rollover"); + CatchSpeech("rat_playdead", "play dead"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/guided_ball_cl.as b/scripts/angelscript/monsters/summon/guided_ball_cl.as new file mode 100644 index 00000000..cfe715c2 --- /dev/null +++ b/scripts/angelscript/monsters/summon/guided_ball_cl.as @@ -0,0 +1,36 @@ +#pragma context client + +namespace MS +{ + +class GuidedBallCl : CGameScript +{ + string GLOW_COLOR; + int GLOW_RAD; + string SKEL_ID; + string SKEL_LIGHT_ID; + + GuidedBallCl() + { + GLOW_RAD = 128; + } + + void client_activate() + { + SKEL_ID = param1; + GLOW_COLOR = param2; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/guided_lball_alt.as b/scripts/angelscript/monsters/summon/guided_lball_alt.as new file mode 100644 index 00000000..b5e2ca91 --- /dev/null +++ b/scripts/angelscript/monsters/summon/guided_lball_alt.as @@ -0,0 +1,171 @@ +#pragma context server + +namespace MS +{ + +class GuidedLballAlt : CGameScript +{ + string DMG_TYPE; + string DOT_DMG; + string EXPIRE_TIME; + string GAME_PVP; + int IS_ACTIVE; + string MAX_DURATION; + string MY_DMG; + string MY_OWNER; + string MY_RADIUS; + string MY_TARGET; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string SCAN_TOKENS; + string SKILL_TYPE; + string SOUND_LOOP; + int SPHERE_SPEED; + + GuidedLballAlt() + { + SPHERE_SPEED = 30; + DMG_TYPE = "lightning"; + SOUND_LOOP = "magic/bolt_loop.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.25); + if ((IS_ACTIVE)) + { + } + if (!(IsEntityAlive(MY_TARGET))) + { + pick_target(); + } + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ORG = GetEntityOrigin(MY_TARGET); + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(MY_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + string DEST_ORG = MY_ORG; + DEST_ORG += /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, SPHERE_SPEED, 0)); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, SPHERE_SPEED, 0))); + string WALL_CHECK = TraceLine(MY_ORG, DEST_ORG); + if (WALL_CHECK != DEST_ORG) + { + sphere_explode(); + } + if (GetGameTime() > EXPIRE_TIME) + { + if ((IS_ACTIVE)) + { + } + sphere_explode(); + } + if ((IS_ACTIVE)) + { + SCAN_TOKENS = FindEntitiesInSphere("enemy", 64); + if (SCAN_TOKENS != "none") + { + } + sphere_explode(); + } + if ((IS_ACTIVE)) + { + SetEntityOrigin(GetOwner(), DEST_ORG); + } + } + + void OnSpawn() override + { + SetName("Lightning Sphere"); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 18); + SetWidth(16); + SetHeight(16); + SetSolid("none"); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + SetRoam(false); + SetGravity(0); + SetIdleAnim("spin_horizontal_slow"); + SetMoveAnim("spin_horizontal_slow"); + PLAYING_DEAD = 1; + SetInvincible(true); + // svplaysound: svplaysound 1 5 SOUND_LOOP + EmitSound(1, 5, SOUND_LOOP); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DMG = param2; + MY_RADIUS = param3; + MAX_DURATION = param4; + DOT_DMG = MY_DMG; + DOT_DMG *= 0.1; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + GAME_PVP = "game.pvp"; + EXPIRE_TIME = GetGameTime(); + EXPIRE_TIME += MAX_DURATION; + SKILL_TYPE = "none"; + if ((OWNER_ISPLAYER)) + { + SKILL_TYPE = param5; + } + SetRace(GetEntityRace(MY_OWNER)); + ScheduleDelayedEvent(0.1, "pick_target"); + } + + void pick_target() + { + string NME_TOKENS = FindEntitiesInSphere("enemy", 1024); + if (NME_TOKEN != "none") + { + ScrambleTokens(NME_TOKEN, ";"); + MY_TARGET = GetToken(NME_TOKEN, 0, ";"); + } + if (!(IsEntityAlive(MY_TARGET))) + { + MY_TARGET = GetEntityProperty(MY_OWNER, "scriptvar"); + } + IS_ACTIVE = 1; + } + + void sphere_explode() + { + if (!(IS_ACTIVE)) return; + IS_ACTIVE = 0; + // svplaysound: svplaysound 1 0 SOUND_LOOP + EmitSound(1, 0, SOUND_LOOP); + ClientEvent("new", "all", "monsters/summon/guided_lball_alt_cl", GetEntityOrigin(GetOwner()), MY_RADIUS); + XDoDamage(GetEntityOrigin(GetOwner()), MY_RADIUS, MY_DMG, 0, MY_OWNER, MY_OWNER, SKILL_TYPE, DMG_TYPE); + ScheduleDelayedEvent(0.01, "remove_me"); + SCAN_TOKENS = FindEntitiesInSphere("enemy", 256); + if (!(SCAN_TOKENS != "none")) return; + for (int i = 0; i < GetTokenCount(SCAN_TOKENS, ";"); i++) + { + affect_targets(); + } + } + + void affect_targets() + { + string CUR_TARG = GetToken(SCAN_TOKENS, i, ";"); + if ((OWNER_ISPLAYER)) + { + if (!(GAME_PVP)) + { + } + if ((IsValidPlayer(CUR_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, MY_OWNER, DOT_DMG, SKILL_TYPE); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/guided_lball_alt_cl.as b/scripts/angelscript/monsters/summon/guided_lball_alt_cl.as new file mode 100644 index 00000000..149a42bc --- /dev/null +++ b/scripts/angelscript/monsters/summon/guided_lball_alt_cl.as @@ -0,0 +1,50 @@ +#pragma context client + +namespace MS +{ + +class GuidedLballAltCl : CGameScript +{ + int CYCLE_ANGLE; + string MY_ORG; + string MY_RADIUS; + string SOUND_KABOOM; + + GuidedLballAltCl() + { + SOUND_KABOOM = "weapons/explode3.wav"; + } + + void client_activate() + { + MY_ORG = param1; + MY_RADIUS = param2; + MY_RADIUS /= 2; + CYCLE_ANGLE = 0; + for (int i = 0; i < 18; i++) + { + splodie_beams(); + } + ball_end(); + EmitSound3D(SOUND_KABOOM, 10, MY_ORG); + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void splodie_beams() + { + string BEAM_START = MY_ORG; + string BEAM_END = BEAM_START; + float RND_UD = Random(-64.0, 64.0); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, MY_RADIUS, RND_UD)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 1.5, 2.5, 1.5, 255, 50, 30, Vector3(255, 255, 0)); + CYCLE_ANGLE += 20; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/guided_sphere_cl.as b/scripts/angelscript/monsters/summon/guided_sphere_cl.as new file mode 100644 index 00000000..5fc19457 --- /dev/null +++ b/scripts/angelscript/monsters/summon/guided_sphere_cl.as @@ -0,0 +1,244 @@ +#pragma context client + +namespace MS +{ + +class GuidedSphereCl : CGameScript +{ + string EMITTER_SPRITE; + string FB_ORG; + string FB_SERVER_ORG; + int FIREBALL_SPEED; + string FIREBALL_SPRITE; + int IS_ACTIVE; + int IS_COLORED; + string IS_DESTROYED; + string MY_OWNER; + string MY_TARGET; + string NEW_COLOR; + string OWNER_HANDPOS; + string OWNER_HAND_IDX; + string SOUND_UPDATE1; + string SOUND_UPDATE2; + string SOUND_UPDATE3; + int SPHERE_RADIUS; + string SPHERE_TYPE; + int SPRITE_FRAMES_LARGE; + int SPRITE_FRAMES_SMALL; + float SPRITE_SCALE_KABOOM; + float SPRITE_SCALE_LARGE; + float SPRITE_SCALE_SMALL; + string VEL_ANGLES; + + GuidedSphereCl() + { + FIREBALL_SPEED = 120; + FIREBALL_SPRITE = "3dmflaora.spr"; + EMITTER_SPRITE = "3dmflaora.spr"; + IS_COLORED = 0; + NEW_COLOR = Vector3(255, 255, 255); + SPRITE_FRAMES_SMALL = 1; + SPRITE_FRAMES_LARGE = 1; + SPRITE_SCALE_SMALL = 0.5; + SPRITE_SCALE_LARGE = 2.0; + SPRITE_SCALE_KABOOM = 3.0; + SOUND_UPDATE1 = "debris/zap1.wav"; + SOUND_UPDATE2 = "debris/zap3.wav"; + SOUND_UPDATE3 = "debris/zap3.wav"; + SPHERE_RADIUS = 64; + } + + void OnRepeatTimer() + { + SetRepeatDelay(3.0); + if ((IS_ACTIVE)) + { + } + ClientEffect("tempent", "sprite", FIREBALL_SPRITE, FB_ORG, "setup_fireball", "update_fireball"); + OWNER_HANDPOS = /* TODO: $getcl */ $getcl(MY_OWNER, OWNER_HAND_IDX); + ClientEffect("beam_points", OWNER_HANDPOS, FB_ORG, "lgtning.spr", 0.5, 3.0, 0.5, 255, 50, 30, Vector3(255, 255, 0)); + int RND_SOUND = RandomInt(1, 3); + if (RND_SOUND == 1) + { + EmitSound3D(SOUND_UPDATE1, 10, FB_ORG); + } + if (RND_SOUND == 2) + { + EmitSound3D(SOUND_UPDATE2, 10, FB_ORG); + } + if (RND_SOUND == 3) + { + EmitSound3D(SOUND_UPDATE3, 10, FB_ORG); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.30); + OWNER_HANDPOS = /* TODO: $getcl */ $getcl(MY_OWNER, OWNER_HAND_IDX); + ClientEffect("beam_points", OWNER_HANDPOS, FB_ORG, "lgtning.spr", 0.25, 1.0, 0.25, 255, 50, 30, Vector3(255, 255, 0)); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(0.5); + if ((IS_ACTIVE)) + { + } + string TARG_ORG = /* TODO: $getcl */ $getcl(MY_TARGET, "origin"); + float TARG_DIST = Distance(FB_ORG, TARG_ORG); + if (TARG_DIST > 0) + { + } + if (TARG_DIST < SPHERE_RADIUS) + { + } + EmitSound3D("magic/alien_frantic_1sec_noloop.wav", 10, FB_ORG); + } + + void OnRepeatTimer_3() + { + SetRepeatDelay(1.0); + if ((IS_ACTIVE)) + { + } + EmitSound3D("magic/alien_beacon_1sec_noloop.wav", 10, FB_ORG); + } + + void client_activate() + { + string MY_ORG = param1; + VEL_ANGLES = param2; + SPHERE_TYPE = param3; + MY_OWNER = param4; + OWNER_HAND_IDX = "attachment"; + OWNER_HAND_IDX += param5; + MY_TARGET = param6; + LogDebug("**** MY_ORG VEL_ANGLES SPHERE_TYPE"); + IS_ACTIVE = 1; + FB_SERVER_ORG = MY_ORG; + ClientEffect("tempent", "sprite", FIREBALL_SPRITE, MY_ORG, "setup_fireball", "update_fireball"); + EmitSound3D("magic/alien_beacon_noloop.wav", 10, FB_ORG); + ScheduleDelayedEvent(21.0, "fireball_end"); + } + + void update_fireball() + { + if (!(IS_ACTIVE)) + { + if (!(IS_DESTROYED)) + { + } + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + IS_DESTROYED = 1; + } + if (!(IS_ACTIVE)) return; + string F_FIREBALL_SPEED = FIREBALL_SPEED; + FB_ORG = "game.tempent.origin"; + string FB_ANGLES = "game.tempent.angles"; + float SERVER_CLIENT_DIFFERENCE = Distance(FB_ORG, FB_SERVER_ORG); + if (SERVER_CLIENT_DIFFERENCE > 128) + { + ClientEffect("tempent", "set_current_prop", "origin", FB_SERVER_ORG); + ClientEffect("beam_points", OWNER_HANDPOS, FB_ORG, "lgtning.spr", 0.25, 1.0, 0.25, 255, 50, 30, Vector3(255, 255, 0)); + EmitSound3D(SOUND_UPDATE, 10, FB_ORG); + ClientEffect("tempent", "sprite", EMITTER_SPRITE, FB_ORG, "spit_flames"); + ClientEffect("tempent", "sprite", EMITTER_SPRITE, FB_ORG, "spit_flames"); + ClientEffect("tempent", "sprite", EMITTER_SPRITE, FB_ORG, "spit_flames"); + } + else + { + string IN_CONE = /* TODO: $within_cone */ $within_cone(FB_SERVER_ORG, FB_ORG, FB_ANGLES, 10); + if ((IN_CONE)) + { + F_FIREBALL_SPEED *= 1.5; + } + else + { + F_FIREBALL_SPEED *= 0.75; + } + } + ClientEffect("tempent", "set_current_prop", "angles", VEL_ANGLES); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(VEL_ANGLES, Vector3(0, F_FIREBALL_SPEED, 0))); + } + + void svr_update_fireball_vec() + { + VEL_ANGLES = param1; + FB_SERVER_ORG = param2; + MY_TARGET = param3; + OWNER_HANDPOS = /* TODO: $getcl */ $getcl(MY_OWNER, OWNER_HAND_IDX); + } + + void setup_fireball() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE_LARGE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(VEL_ANGLES, Vector3(0, FIREBALL_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_FRAMES_LARGE); + ClientEffect("tempent", "set_current_prop", "update", 1); + if ((IS_COLORED)) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", NEW_COLOR); + } + } + + void spit_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "fadeout", 0.5); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(VEL_ANGLES, Vector3(Random(-120, 120), /* TODO: $neg */ $neg(FIREBALL_SPEED), RandomInt(0, 120)))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE_SMALL); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_SCALE_SMALL); + if ((IS_COLORED)) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", NEW_COLOR); + } + } + + void setup_kaboom() + { + float RND_YAW = Random(0, 359); + float RND_PITCH = Random(0, 359); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "fadeout", 0.5); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(RND_PITCH, RND_YAW, 0), Vector3(0, RND_FB, 0))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE_KABOOM); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_FRAMES_LARGE); + if ((IS_COLORED)) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", NEW_COLOR); + } + } + + void fireball_end() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "end_effect"); + } + + void end_effect() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/horror_egg.as b/scripts/angelscript/monsters/summon/horror_egg.as new file mode 100644 index 00000000..515cf1bd --- /dev/null +++ b/scripts/angelscript/monsters/summon/horror_egg.as @@ -0,0 +1,245 @@ +#pragma context server + +#include "monsters/externals.as" + +namespace MS +{ + +class HorrorEgg : CGameScript +{ + string EGG_SCRIPT; + int FAILED_HATCH; + string GLOW_SHELL; + int IS_UNHOLY; + string MY_OWNER; + string NPC_SPAWN_TIME; + int SCAN_SIZE; + string SOUND_HATCH; + + HorrorEgg() + { + IS_UNHOLY = 1; + SCAN_SIZE = 100; + GLOW_SHELL = Vector3(255, 0, 0); + SOUND_HATCH = "debris/bustflesh1.wav"; + EGG_SCRIPT = "monsters/horror"; + Precache("monsters/egg.mdl"); + Precache("controller/con_idle1.wav"); + Precache("controller/con_idle2.wav"); + Precache("controller/con_idle3.wav"); + Precache("controller/con_attack1.wav"); + Precache("controller/con_attack2.wav"); + Precache("controller/con_attack3.wav"); + Precache("controller/con_die1.wav"); + Precache("debris/bustflesh2.wav"); + Precache("controller/con_pain1.wav"); + Precache("controller/con_die2.wav"); + Precache("bullchicken/bc_attack3.wav"); + Precache("bullchicken/bc_attack2.wav"); + Precache("ambience/steamburst1.wav"); + Precache("monsters/bat/flap_big1.wav"); + Precache("monsters/bat/flap_big2.wav"); + Precache("player/pl_fallpain1.wav"); + Precache("monsters/edwardgorey.mdl"); + Precache("ambience/the_horror1.wav"); + Precache("ambience/the_horror2.wav"); + Precache("ambience/the_horror3.wav"); + Precache("ambience/the_horror4.wav"); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + } + + void OnSpawn() override + { + SetName("Horror Egg"); + SetHealth(50); + SetRace("demon"); + SetModel("monsters/egg.mdl"); + SetBloodType("green"); + SetWidth(64); + SetHeight(64); + SetModelBody(0, 1); + SetSkillLevel(5); + SetProp(GetOwner(), "movetype", "const.movetype.bounce"); + Effect("glow", GetOwner(), GLOW_SHELL, 128, -1, 0); + ScheduleDelayedEvent(5.0, "attempt_spawn"); + FAILED_HATCH = 0; + ScheduleDelayedEvent(0.1, "scan_bounce"); + NPC_SPAWN_TIME = GetGameTime(); + } + + void OnDamage(int damage) override + { + float SINCE_SPAWN = GetGameTime(); + SINCE_SPAWN -= NPC_SPAWN_TIME; + if (SINCE_SPAWN < 1.0) + { + if (GetRelationship(param1) == "enemy") + { + int BLOCK_PREMATURE_DAMAGE = 1; + } + if ((IsValidPlayer(param1))) + { + int BLOCK_PREMATURE_DAMAGE = 1; + } + if ((BLOCK_PREMATURE_DAMAGE)) + { + } + SetDamage("dmg"); + SetDamage("hit"); + return; + } + } + + void attempt_spawn() + { + string MY_ORG = GetMonsterProperty("origin"); + string SPAWN_ORG = MY_ORG; + SPAWN_ORG += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 20)); + int IS_ROOM = 1; + string TRACE_START = SPAWN_ORG; + string TRACE_END = SPAWN_ORG; + TRACE_START += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(/* TODO: $neg */ $neg(SCAN_SIZE), 0, 0)); + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(SCAN_SIZE, 0, 0)); + string TRACE_WORLD = TraceLine(TRACE_START, TRACE_END); + if ((G_DEVELOPER_MODE)) + { + debug_beam(TRACE_START, TRACE_END); + } + if (TRACE_END != TRACE_WORLD) + { + int IS_ROOM = 0; + } + string TRACE_START = SPAWN_ORG; + string TRACE_END = SPAWN_ORG; + TRACE_START += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, /* TODO: $neg */ $neg(SCAN_SIZE), 0)); + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, SCAN_SIZE, 0)); + string TRACE_WORLD = TraceLine(TRACE_START, TRACE_END); + if ((G_DEVELOPER_MODE)) + { + debug_beam(TRACE_START, TRACE_END); + } + if (TRACE_END != TRACE_WORLD) + { + int IS_ROOM = 0; + } + string TRACE_START = SPAWN_ORG; + string TRACE_END = SPAWN_ORG; + TRACE_START += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, -10)); + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 30)); + string TRACE_WORLD = TraceLine(TRACE_START, TRACE_END); + if ((G_DEVELOPER_MODE)) + { + debug_beam(TRACE_START, TRACE_END); + } + if (TRACE_END != TRACE_WORLD) + { + int IS_ROOM = 0; + } + string IN_SPHERE = /* TODO: $get_insphere */ $get_insphere("any", 45, SPAWN_ORG); + if ((IN_SPHERE)) + { + int IN_ROOM = 0; + } + if (!(IS_ROOM)) + { + FAILED_HATCH += 1; + if (FAILED_HATCH > 9) + { + game_death(); + } + bounce_about(); + ScheduleDelayedEvent(5.0, "attempt_spawn"); + } + if (!(IS_ROOM)) return; + hatch_egg(); + } + + void scan_bounce() + { + ScheduleDelayedEvent(0.2, "scan_bounce"); + string MY_ZVEL = (GetMonsterProperty("velocity")).z; + if (!(MY_ZVEL < 0)) return; + string TRACE_START = GetMonsterProperty("origin"); + TRACE_START += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 0)); + string TRACE_END = TRACE_START; + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, -50)); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if ((G_DEVELOPER_MODE)) + { + debug_beam(TRACE_START, TRACE_END); + } + if (TRACE_LINE != TRACE_END) + { + EmitSound(GetOwner(), 0, "weapons/g_bounce1.wav", 10); + } + } + + void bounce_about() + { + int TOSS_DIR = RandomInt(-200, 200); + int TOSS_HOR = RandomInt(-200, 200); + int TOSS_VER = RandomInt(-400, 600); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(TOSS_DIR, TOSS_HOR, TOSS_VER)); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + bounce_about(); + } + + void hatch_egg() + { + Effect("tempent", "gibs", "monsters/egg.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 0.1, 100, 30, 2, 4); + EmitSound(GetOwner(), 0, SOUND_HATCH, 10); + SpawnNPC(EGG_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 20), ScriptMode::Legacy); // params: MY_OWNER + DeleteEntity(GetOwner()); + } + + void debug_beam() + { + if (param3 == "PARAM3") + { + Vector3 BEAM_COLOR = Vector3(255, 0, 255); + } + if (param3 != "PARAM3") + { + string BEAM_COLOR = param3; + } + float BEAM_DURATION = 1.0; + string BEAM_START = param1; + if (param2 == "PARAM2") + { + string BEAM_END = BEAM_START; + } + if (param2 != "PARAM2") + { + string BEAM_END = param2; + } + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 64)); + Effect("beam", "point", "laserbeam.spr", 20, BEAM_START, BEAM_END, BEAM_COLOR, 255, 0.7, BEAM_DURATION); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(MY_OWNER, "horror_died"); + xp_send(); + Effect("tempent", "gibs", "monsters/egg.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 0.1, 100, 30, 2, 4); + EmitSound(GetOwner(), 0, SOUND_HATCH, 10); + DeleteEntity(GetOwner()); + } + + void xp_send() + { + string MON_FULL = GetMonsterProperty("name.full"); + string OUT_MSG = "You've slain "; + OUT_MSG += MON_FULL; + SendColoredMessage(GetEntityIndex(m_hLastStruck), OUT_MSG); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/horror_egg_lightning.as b/scripts/angelscript/monsters/summon/horror_egg_lightning.as new file mode 100644 index 00000000..0712f467 --- /dev/null +++ b/scripts/angelscript/monsters/summon/horror_egg_lightning.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/summon/horror_egg.as" + +namespace MS +{ + +class HorrorEggLightning : CGameScript +{ + string EGG_SCRIPT; + string GLOW_SHELL; + + HorrorEggLightning() + { + EGG_SCRIPT = "monsters/horror_lightning"; + GLOW_SHELL = Vector3(255, 255, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/ibarrier.as b/scripts/angelscript/monsters/summon/ibarrier.as new file mode 100644 index 00000000..ba7fcb61 --- /dev/null +++ b/scripts/angelscript/monsters/summon/ibarrier.as @@ -0,0 +1,233 @@ +#pragma context server + +namespace MS +{ + +class Ibarrier : CGameScript +{ + string ALWAYS_PUSH; + int AM_BLOCKING; + string AM_INVISIBLE; + string BARRIER_SCRIPT_IDX; + string CL_COLOR; + string CL_RADIUS; + string CYCLE_ANGLE; + int GO_AWAY; + int MY_BASE_DAMAGE; + string MY_DURATION; + string MY_OWNER; + string MY_RADIUS; + string NO_SOUND; + int PLAYING_DEAD; + string SOUND_PUSH; + string SPRITE_COLOR; + int TOTAL_OFS; + string sfx.npcid; + + Ibarrier() + { + SOUND_PUSH = "doors/aliendoor3.wav"; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_RADIUS = param2; + MY_DURATION = param3; + MY_BASE_DAMAGE = 0; + if (param4 == 1) + { + AM_INVISIBLE = 1; + } + if (param5 == 1) + { + NO_SOUND = 1; + } + if (param6 != "PARAM6") + { + MY_BASE_DAMAGE = param6; + } + if (param7 == 1) + { + ALWAYS_PUSH = 1; + } + MY_BASE_DAMAGE = 0; + SetRace("hated"); + if (MY_BASE_DAMAGE == 0) + { + SPRITE_COLOR = Vector3(0, 0, 255); + } + if (MY_BASE_DAMAGE > 0) + { + SPRITE_COLOR = Vector3(255, 0, 0); + } + if (!(AM_INVISIBLE)) + { + ClientEvent("new", "all", currentscript, GetEntityIndex(GetOwner()), MY_RADIUS, SPRITE_COLOR); + } + BARRIER_SCRIPT_IDX = "game.script.last_sent_id"; + MY_DURATION("remove_barrier"); + AM_BLOCKING = 1; + ScheduleDelayedEvent(0.1, "scan_loop"); + } + + void OnSpawn() override + { + SetName("Magical Barrier"); + SetModel("none"); + SetHealth(9000); + SetInvincible(true); + SetWidth(8); + SetHeight(8); + SetSolid("none"); + SetHearingSensitivity(11); + SetDamageResistance("stun", 0); + PLAYING_DEAD = 1; + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(AM_BLOCKING)) return; + string LASTHEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(GetEntityRange(LASTHEARD_ID) < MY_RADIUS)) return; + int DO_HPUSH = 0; + if (GetRelationship(LASTHEARD_ID) == "enemy") + { + int DO_HPUSH = 1; + } + if ((ALWAYS_PUSH)) + { + int DO_HPUSH = 1; + } + if (LASTHEARD_ID == MY_OWNER) + { + int DO_HPUSH = 0; + } + if (!(DO_HPUSH)) return; + push_out(LASTHEARD_ID); + } + + void scan_loop() + { + if (!(AM_BLOCKING)) return; + ScheduleDelayedEvent(0.25, "scan_loop"); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), MY_RADIUS, 0.0, 1.0, 0); + } + + void game_dodamage() + { + int DO_PUSH = 0; + if (GetRelationship(param2) == "enemy") + { + int DO_PUSH = 1; + } + if ((ALWAYS_PUSH)) + { + int DO_PUSH = 1; + } + if (!(param2 != MY_OWNER)) return; + push_out(GetEntityIndex(param2)); + } + + void push_out() + { + if (MY_BASE_DAMAGE > 0) + { + DoDamage(GetEntityIndex(param1), "direct", MY_BASE_DAMAGE, 1.0, MY_MASTER); + } + Effect("glow", GetEntityIndex(param1), Vector3(255, 255, 255), 60, 1.0, 1.0); + string TARGET_ORG = GetEntityOrigin(param1); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + if (!(AM_SILENT)) + { + EmitSound(GetOwner(), 0, SOUND_PUSH, 10); + } + SetVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + + void remove_barrier() + { + AM_BLOCKING = 0; + ClientEvent("update", "all", BARRIER_SCRIPT_IDX, "clear_sprites"); + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + if ((AM_INVISIBLE)) + { + ClientEvent("remove", "all", BARRIER_SCRIPT_IDX); + } + ScheduleDelayedEvent(0.1, "remove_me2"); + RemoveScript(); + } + + void remove_me2() + { + DeleteEntity(GetOwner()); + } + + void client_activate() + { + sfx.npcid = param1; + CL_RADIUS = param2; + CL_COLOR = param3; + DEATH_DELAY("remove_me"); + ScheduleDelayedEvent(0.1, "spriteify"); + } + + void spriteify() + { + TOTAL_OFS = 64; + for (int i = 0; i < 36; i++) + { + createsprite(); + } + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(sfx.npcid, "origin"); + if (CYCLE_ANGLE == "CYCLE_ANGLE") + { + CYCLE_ANGLE = 0; + } + CYCLE_ANGLE += 10; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, CL_RADIUS, 36)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", l.pos, "setup_sprite1_sparkle", "sprite_update"); + } + + void setup_sprite1_sparkle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 90.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendercolor", CL_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void sprite_update() + { + if (!(GO_AWAY)) return; + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 400)); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", -4.0); + } + + void clear_sprites() + { + GO_AWAY = 1; + sprite_update(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/ice_blast.as b/scripts/angelscript/monsters/summon/ice_blast.as new file mode 100644 index 00000000..9c2370f5 --- /dev/null +++ b/scripts/angelscript/monsters/summon/ice_blast.as @@ -0,0 +1,138 @@ +#pragma context server + +#include "monsters/base_noclip.as" + +namespace MS +{ + +class IceBlast : CGameScript +{ + int ATTACK_RADIUS; + int BALL_SPEED; + string BLAST_MODEL; + string FINAL_DEST; + string FREEZE_DURATION; + int FREEZING; + int FWD_SPEED; + float HUM_LENGTH; + string ICE_OLD_POS; + string IGNORE_TARGET; + string LIGHTNING_SPRITE; + int MODEL_BODY_OFS; + string MY_OWNER; + string NPC_NOCLIP_DEST; + string OWNER_ANGLES; + string PLAYER_SPAWNED; + string PROJ_ANIM_IDLE; + string SOUND_HUM; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + float STUCKCHECK_FREQ; + + IceBlast() + { + SOUND_HUM = "magic/pulsemachine_noloop.wav"; + HUM_LENGTH = 1.7; + STUCKCHECK_FREQ = 0.5; + BLAST_MODEL = "weapons/projectiles.mdl"; + MODEL_BODY_OFS = 1; + PROJ_ANIM_IDLE = "idle_iceball"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart14.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + BALL_SPEED = 100; + LIGHTNING_SPRITE = "lgtning.spr"; + ATTACK_RADIUS = 196; + FWD_SPEED = 10; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + FREEZE_DURATION = param2; + PLAYER_SPAWNED = IsValidPlayer(param1); + SetProp(GetOwner(), "movetype", "const.movetype.noclip"); + SetProp(GetOwner(), "solid", 0); + OWNER_ANGLES = GetEntityAngles(MY_OWNER); + SetAngles("face"); + FINAL_DEST = /* TODO: $relpos */ $relpos(0, 20000, 0); + if (param3 != "PARAM3") + { + FINAL_DEST = param3; + } + NPC_NOCLIP_DEST = FINAL_DEST; + } + + void OnSpawn() override + { + SetName("Freezing Sphere"); + SetHealth(1); + SetInvincible(true); + SetFly(true); + SetGravity(0.0); + SetFOV(359); + SetRace("beloved"); + SetWidth(1); + SetHeight(1); + SetMonsterClip(0); + SetModel(BLAST_MODEL); + SetModelBody(0, MODEL_BODY_OFS); + SetSolid("not"); + SetIdleAnim(PROJ_ANIM_IDLE); + SetMoveAnim(PROJ_ANIM_IDLE); + SetAnimFrameRate(2); + PlayAnim("once", "idle"); + FREEZING = 1; + ICE_OLD_POS = GetEntityOrigin(GetOwner()); + ScheduleDelayedEvent(0.1, "freeze_loop"); + ScheduleDelayedEvent(0.5, "hum_loop"); + SetProp(GetOwner(), "movetype", "const.movetype.noclip"); + SetProp(GetOwner(), "solid", 0); + ScheduleDelayedEvent(10.0, "remove_me"); + } + + void hum_loop() + { + if (!(FREEZING)) return; + HUM_LENGTH("hum_loop"); + EmitSound(GetOwner(), CHAN_BODY, SOUND_HUM, 10); + } + + void freeze_loop() + { + if (!(FREEZING)) return; + ScheduleDelayedEvent(0.1, "freeze_loop"); + if (!(false)) return; + if (!(GetEntityIndex(m_hLastSeen) != IGNORE_TARGET)) return; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + if (!(GetEntityRange(m_hLastSeen) < ATTACK_RADIUS)) return; + string TARGET_ORG = GetEntityOrigin(m_hLastSeen); + Effect("beam", "point", LIGHTNING_SPRITE, 60, /* TODO: $relpos */ $relpos(0, 0, 0), TARGET_ORG, Vector3(200, 200, 255), 150, 50, 1.0); + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (GetEntityHealth(m_hLastSeen) <= 1500) + { + ApplyEffect(m_hLastSeen, "effects/dot_cold_freeze", FREEZE_DURATION, MY_OWNER); + } + if (GetEntityHealth(m_hLastSeen) >= 1500) + { + if ((PLAYER_SPAWNED)) + { + } + string TARG_NAME = GetEntityName(m_hLastSeen); + SendPlayerMessage(MY_OWNER, TARG_NAME + " is too strong to be affected."); + } + IGNORE_TARGET = GetEntityIndex(m_hLastSeen); + } + + void remove_me() + { + FREEZING = 0; + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/ice_burst.as b/scripts/angelscript/monsters/summon/ice_burst.as new file mode 100644 index 00000000..d47a18ff --- /dev/null +++ b/scripts/angelscript/monsters/summon/ice_burst.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "monsters/summon/base_aoe.as" + +namespace MS +{ + +class IceBurst : CGameScript +{ + string ACTIVE_SKILL; + string BURST_SCRIPT_IDX; + string GAME_PVP; + string MY_BASE_DAMAGE; + string MY_OWNER; + string OWNER_ISPLAYER; + int SCAN_RANGE; + + IceBurst() + { + SCAN_RANGE = 256; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + OWNER_ISPLAYER = IsValidPlayer(param1); + GAME_PVP = "game.pvp"; + MY_BASE_DAMAGE = param2; + ACTIVE_SKILL = param3; + if (ACTIVE_SKILL == "PARAM3") + { + ACTIVE_SKILL = "spellcasting.ice"; + } + ClientEvent("new", "all_in_sight", "monsters/summon/ice_burst_cl", GetEntityIndex(MY_OWNER)); + BURST_SCRIPT_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.25, "big_boom"); + ScheduleDelayedEvent(3.0, "effect_die"); + } + + void effect_die() + { + ClientEffect("remove", "all", BURST_SCRIPT_IDX); + DeleteEntity(GetOwner()); + } + + void big_boom() + { + EmitSound(GetOwner(), 0, "ambience/steamburst1.wav", 10); + aoe_applyeffect_rad(); + } + + void apply_aoe_effect() + { + int FREEZE_ON_CHANCE = RandomInt(1, 2); + if (FREEZE_ON_CHANCE == 1) + { + ApplyEffect(param1, "effects/dot_cold", 10, MY_OWNER, RandomInt(10, MY_BASE_DAMAGE), ACTIVE_SKILL); + } + if (FREEZE_ON_CHANCE == 2) + { + if (GetEntityHealth(param1) > 1500) + { + ApplyEffect(param1, "effects/dot_cold", 10, MY_OWNER, RandomInt(10, MY_BASE_DAMAGE), ACTIVE_SKILL); + } + if (GetEntityHealth(param1) <= 1500) + { + ApplyEffect(param1, "effects/dot_cold_freeze", 5, MY_OWNER, RandomInt(10, 20)); + } + } + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/ice_burst_cl.as b/scripts/angelscript/monsters/summon/ice_burst_cl.as new file mode 100644 index 00000000..aeffd313 --- /dev/null +++ b/scripts/angelscript/monsters/summon/ice_burst_cl.as @@ -0,0 +1,54 @@ +#pragma context client + +namespace MS +{ + +class IceBurstCl : CGameScript +{ + int CYCLE_ANGLE; + string OWNER_POS; + + void client_activate() + { + const string ICE_SPRITE = "fire1_fixed.spr"; + const int TOTAL_OFS = 10; + CYCLE_ANGLE = 0; + OWNER_POS = /* TODO: $getcl */ $getcl(param1, "origin"); + for (int i = 0; i < 17; i++) + { + create_ice(); + } + ScheduleDelayedEvent(2.9, "remove_me_cl"); + EmitSound3D("ambience/steamburst1.wav", 10, OWNER_POS); + } + + void remove_me_cl() + { + RemoveScript(); + } + + void create_ice() + { + string ICE_POS = OWNER_POS; + ICE_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, 0)); + ClientEffect("tempent", "sprite", ICE_SPRITE, ICE_POS, "setup_ice"); + CYCLE_ANGLE += 20; + } + + void setup_ice() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string ICE_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 100, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", ICE_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/ice_spikes.as b/scripts/angelscript/monsters/summon/ice_spikes.as new file mode 100644 index 00000000..4befee98 --- /dev/null +++ b/scripts/angelscript/monsters/summon/ice_spikes.as @@ -0,0 +1,103 @@ +#pragma context server + +namespace MS +{ + +class IceSpikes : CGameScript +{ + string CENTER_POINT; + string CL_NSPIKES; + string CL_RADIUS; + string DMG_ICE; + string MY_OWNER; + string MY_RADIUS; + string MY_SCRIPT_ID; + string NUM_SPIKES; + int PLAYING_DEAD; + + void game_dynamically_created() + { + MY_OWNER = param1; + DMG_ICE = param2; + MY_RADIUS = param3; + NUM_SPIKES = param4; + ScheduleDelayedEvent(0.1, "apply_damage"); + } + + void OnSpawn() override + { + SetName("Ice Spikes"); + SetSolid("none"); + SetWidth(32); + SetHeight(32); + SetRace("beloved"); + PLAYING_DEAD = 1; + SetInvincible(true); + } + + void apply_damage() + { + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), MY_RADIUS, NUM_SPIKES); + MY_SCRIPT_ID = "game.script.last_sent_id"; + string DMG_POS = GetMonsterProperty("origin"); + CallExternal(MY_OWNER, "send_damage", DMG_POS, MY_RADIUS, DMG_ICE, 1.0, 0, "reflective", "pierce"); + XDoDamage(DMG_POS, MY_RADIUS, DMG_ICE, 0, MY_OWNER, MY_OWNER, "spellcasting.ice", "ice"); + EmitSound(GetOwner(), 0, "magic/freeze.wav", 10); + ScheduleDelayedEvent(5.0, "remove_me"); + } + + void remove_me() + { + ClientEvent("remove", "all", MY_SCRIPT_ID); + ScheduleDelayedEvent(1.0, "remove_me2"); + } + + void remove_me2() + { + DeleteEntity(GetOwner()); + } + + void client_activate() + { + CENTER_POINT = param1; + CL_RADIUS = param2; + CL_NSPIKES = param3; + for (int i = 0; i < CL_NSPIKES; i++) + { + spawn_spikes(); + } + } + + void spawn_spikes() + { + string SPIKE_POS = CENTER_POINT; + int F_ADJ = RandomInt(0, CL_RADIUS); + int YAW_ADJ = RandomInt(0, 359); + SPIKE_POS += /* TODO: $relpos */ $relpos(Vector3(0, YAW_ADJ, 0), Vector3(0, F_ADJ, 0)); + ClientEffect("tempent", "sprite", "glassgibs.mdl", SPIKE_POS, "setup_spike"); + } + + void setup_spike() + { + int PITCH_ADJ = 0; + int YAW_ADJ = RandomInt(0, 359); + int ROLL_ADJ = RandomInt(200, 320); + float SCALE_ADJ = Random(5.0, 20.0); + Vector3 ANGLE_ADJ = Vector3(PITCH_ADJ, YAW_ADJ, ROLL_ADJ); + int BODY_ADJ = RandomInt(0, 7); + ClientEffect("tempent", "set_current_prop", "death_delay", 4.7); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "scale", SCALE_ADJ); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", ANGLE_ADJ); + ClientEffect("tempent", "set_current_prop", "angle", ANGLE_ADJ); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", 1); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/ice_trail.as b/scripts/angelscript/monsters/summon/ice_trail.as new file mode 100644 index 00000000..5038ba81 --- /dev/null +++ b/scripts/angelscript/monsters/summon/ice_trail.as @@ -0,0 +1,25 @@ +#pragma context server + +namespace MS +{ + +class IceTrail : CGameScript +{ + string DMG_FREEZE; + string DUR_FREEZE; + string MY_OWNER; + + IceTrail() + { + } + + void game_dynamically_created() + { + MY_OWNER = param1; + DUR_FREEZE = param2; + DMG_FREEZE = param3; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/ice_wave.as b/scripts/angelscript/monsters/summon/ice_wave.as new file mode 100644 index 00000000..7f18b064 --- /dev/null +++ b/scripts/angelscript/monsters/summon/ice_wave.as @@ -0,0 +1,69 @@ +#pragma context server + +namespace MS +{ + +class IceWave : CGameScript +{ + int IR_ACTIVE; + string MY_OWNER; + + void game_dynamically_created() + { + MY_OWNER = GetEntityIndex(param2); + PARAM1("wave_die"); + IR_ACTIVE = 1; + } + + void OnSpawn() override + { + SetName("Ice Wave"); + SetHealth(10000); + SetInvincible(true); + SetRace("beloved"); + SetSolid("none"); + SetBloodType("none"); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 52); + IR_ACTIVE = 1; + snap_to(); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void snap_to() + { + if (!(IR_ACTIVE)) return; + string SEAL_POS = GetEntityOrigin(MY_OWNER); + string GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(SEAL_POS); + string SEAL_Z = (SEAL_POS).z; + string GROUND_DIST = GROUND_Z; + GROUND_DIST -= SEAL_Z; + GROUND_DIST -= 2; + SEAL_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, GROUND_DIST)); + SetEntityOrigin(GetOwner(), SEAL_POS); + string OWNER_ANGLES = GetEntityAngles(MY_OWNER); + SetAngles("face"); + ScheduleDelayedEvent(0.1, "snap_to"); + } + + void wave_die() + { + IR_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "final_bye_bye"); + } + + void final_bye_bye() + { + ClientEvent("remove", "all", currentscript); + DeleteEntity(GetOwner()); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetAlive(1); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/ice_wave_player.as b/scripts/angelscript/monsters/summon/ice_wave_player.as new file mode 100644 index 00000000..cb3b0992 --- /dev/null +++ b/scripts/angelscript/monsters/summon/ice_wave_player.as @@ -0,0 +1,88 @@ +#pragma context server + +#include "monsters/summon/base_aoe.as" +#include "monsters/base_noclip.as" + +namespace MS +{ + +class IceWavePlayer : CGameScript +{ + float AOE_FREQ; + int AOE_RADIUS; + int FADE_AMT; + string FREEZE_DURATION; + int FWD_SPEED; + int IS_FADING; + string MY_DURATION; + string MY_OWNER; + string NPC_NOCLIP_DEST; + int PLAYING_DEAD; + + IceWavePlayer() + { + AOE_FREQ = 0.1; + AOE_RADIUS = 128; + FWD_SPEED = 20; + } + + void OnSpawn() override + { + SetName("Ice Wave"); + SetHealth(1); + SetInvincible(true); + SetSolid("none"); + PLAYING_DEAD = 1; + SetNoPush(true); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 52); + DropToFloor(); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + FREEZE_DURATION = param2; + MY_DURATION = param3; + MY_DURATION("aoe_end"); + string FADE_START = MY_DURATION; + FADE_START -= 2.0; + FADE_START("begin_fade"); + ScheduleDelayedEvent(0.1, "set_angles_and_dest"); + } + + void apply_aoe_effect() + { + LogDebug("freezing GetEntityName(param1)"); + ApplyEffect(param1, "effects/dot_cold_freeze", FREEZE_DURATION, MY_OWNER); + } + + void set_angles_and_dest() + { + string OWNER_ANG = GetEntityAngles(MY_OWNER); + NPC_NOCLIP_DEST = /* TODO: $relpos */ $relpos(Vector3(0, /* TODO: $vec.yaw */ $vec.yaw(OWNER_ANG), 0), Vector3(0, 10000, 0)); + SetAngles("face"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void begin_fade() + { + IS_FADING = 1; + FADE_AMT = 255; + } + + void aoe_scan_loop() + { + if (!(IS_FADING)) return; + FADE_AMT -= 10; + if (!(FADE_AMT >= 0)) return; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", FADE_AMT); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/keledros_fire_wall.as b/scripts/angelscript/monsters/summon/keledros_fire_wall.as new file mode 100644 index 00000000..4c6bf7a1 --- /dev/null +++ b/scripts/angelscript/monsters/summon/keledros_fire_wall.as @@ -0,0 +1,171 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class KeledrosFireWall : CGameScript +{ + int FIRE_DURATION; + string FLAME_ANGLE; + string FLAME_POSITION; + int FLAMING; + int HEIGHT; + int I_DO_FIRE_DAMAGE; + string MY_BASE_DMG; + string MY_OWNER; + int PLAYING_DEAD; + int TIME_LIVE; + int WIDTH; + + KeledrosFireWall() + { + I_DO_FIRE_DAMAGE = 1; + TIME_LIVE = 10; + Precache("fire1_fixed.spr"); + HEIGHT = 60; + WIDTH = 2; + } + + void OnRepeatTimer() + { + SetRepeatDelay(6); + if ((FLAMING)) + { + } + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", 7); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(Random(0.0, 0.5)); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(Random(0.0, 0.5)); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void flames_start() + { + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", 7); + FLAMING = 1; + } + + void OnSpawn() override + { + PLAYING_DEAD = 1; + SetName("Fire Wall"); + SetHealth(1); + SetInvincible(true); + SetSolid("none"); + SetFOV(90); + SetWidth(32); + SetHeight(32); + SetRoam(false); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetBloodType("none"); + SetModel("none"); + ScheduleDelayedEvent(2, "flames_start"); + // svplaysound: emitsound ent_me $get(ent_me,origin) 192 TIME_LIVE danger 192 + EmitSound(GetOwner(), GetEntityOrigin(GetOwner()), 192, TIME_LIVE, "danger", 192); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_BASE_DMG = param3; + FIRE_DURATION = 10; + FIRE_DURATION("firewall_death"); + StoreEntity("ent_expowner"); + SetAngles("face.y"); + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), param2); + } + + void flames_attack() + { + SetRepeatDelay(0.5); + if (!(FLAMING)) return; + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 96, MY_BASE_DMG, 1.0, 0); + DoDamage(/* TODO: $relpos */ $relpos(0, 96, 0), 96, MY_BASE_DMG, 1.0, 0); + DoDamage(/* TODO: $relpos */ $relpos(0, -96, 0), 96, MY_BASE_DMG, 1.0, 0); + } + + void firewall_death() + { + FLAMING = 0; + firewall_end_cl(); + SetAlive(0); + DeleteEntity(GetOwner()); + } + + void client_activate() + { + FLAME_POSITION = param1; + FLAME_ANGLE = Vector3(0, param2, 0); + ScheduleDelayedEvent(2, "flames_start"); + TIME_LIVE("firewall_end_cl"); + } + + void firewall_end_cl() + { + RemoveScript(); + } + + void flames_shoot() + { + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + int x = RandomInt(-30, 30); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + int x = RandomInt(-96, 96); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + int x = RandomInt(-192, 192); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + } + + void setup_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.6, 1.0)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.1, 1.0)); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/lesser_wraith.as b/scripts/angelscript/monsters/summon/lesser_wraith.as new file mode 100644 index 00000000..833482b9 --- /dev/null +++ b/scripts/angelscript/monsters/summon/lesser_wraith.as @@ -0,0 +1,578 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_noclip.as" + +namespace MS +{ + +class LesserWraith : CGameScript +{ + int AM_DRAINING; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BASENOCLIP_NO_SETMOVEDEST; + string CL_SCRIPT; + float CYCLE_TIME; + int DMG_DRAIN; + string FOLLOW_MODE; + float FREQ_ROAM; + int FWD_SPEED; + int FWD_SPEED_STANDARD; + string HOLD_POS; + int IMMUNE_VAMPIRE; + string INITIAL_ORIGIN; + int IS_UNHOLY; + int I_R_PET; + string LAST_OWNER_YAW; + int MP_DRAIN_AMT; + int MY_CL_IDX; + string MY_OWNER; + string NAMEPREFIX; + string NEXT_READY; + string NEXT_SCAN; + string NPCATK_TARGET; + int NPC_BATTLE_ALLY; + int NPC_EXTRA_VALIDATIONS; + int NPC_GIVE_EXP; + string NPC_NOCLIP_DEST; + int NPC_NO_PLAYER_DMG; + string NPC_PROPELL_SUSPEND; + string OLD_WRAITH_TARG; + string OWNER_OLD_POS; + string SOUND_DEATH; + string SOUND_DRAIN_LOOP; + string SOUND_DRAIN_START; + string SOUND_HOVER_LOOP; + string SOUND_KILL; + string SOUND_MOAN; + string SOUND_TELE; + string WRAITH_OLD_TARG; + + LesserWraith() + { + ANIM_RUN = "wraith_idle"; + ANIM_IDLE = "wraith_idle"; + ANIM_WALK = "wraith_idle"; + NPC_EXTRA_VALIDATIONS = 1; + I_R_PET = 1; + NPC_NO_PLAYER_DMG = 1; + NPC_BATTLE_ALLY = 1; + ANIM_ATTACK = "wraith_attack"; + ANIM_DEATH = "wraith_idle"; + ATTACK_RANGE = 128; + ATTACK_MOVERANGE = 100; + ATTACK_HITRANGE = 150; + NPC_GIVE_EXP = 0; + BASENOCLIP_NO_SETMOVEDEST = 1; + FWD_SPEED_STANDARD = 20; + FWD_SPEED = 20; + DMG_DRAIN = 10; + MP_DRAIN_AMT = 1; + CL_SCRIPT = "monsters/summon/lesser_wraith_cl"; + FREQ_ROAM = Random(5.0, 10.0); + SOUND_MOAN = "crow/ghostwail.wav"; + SOUND_DEATH = "ichy/ichy_die2.wav"; + SOUND_DRAIN_START = "crow/Triggered/tomb5.wav"; + SOUND_DRAIN_LOOP = "x/x_teleattack1.wav"; + SOUND_HOVER_LOOP = "ambience/labdrone2.wav"; + SOUND_KILL = "houndeye/he_blast3.wav"; + SOUND_TELE = "magic/teleport.wav"; + Precache(SOUND_KILL); + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Lesser Wraith"); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 72); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + PlayAnim("once", ANIM_IDLE); + SetWidth(0); + SetHeight(0); + SetBBox(Vector3(0, 0, 0), Vector3(0, 0, 0)); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + IMMUNE_VAMPIRE = 1; + IS_UNHOLY = 1; + SetMenuAutoOpen(1); + SetBloodType("none"); + SetHealth(1000); + SetRace("human"); + SetDamageResistance("slash", 0.25); + SetDamageResistance("pierce", 0.25); + SetDamageResistance("blunt", 0.25); + SetDamageResistance("fire", 0.25); + SetDamageResistance("cold", 0.25); + SetDamageResistance("generic", 0.25); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 3.0); + SetDamageResistance("holy", 4.0); + SetDamageResistance("stun", 0); + SetSolid("none"); + SetNoPush(true); + SetGravity(0); + SetRoam(false); + SetHearingSensitivity(11); + OLD_WRAITH_TARG = "unset"; + ScheduleDelayedEvent(1.0, "sustain_renderprops"); + ScheduleDelayedEvent(0.5, "do_manual_roam"); + } + + void npc_targetvalidate() + { + if ((FOLLOW_MODE)) + { + NPCATK_TARGET = "unset"; + int EXIT_SUB = 1; + } + if (GetEntityRace(m_hAttackTarget) == "hguard") + { + string HGUARD_TARGET = GetEntityProperty(m_hAttackTarget, "scriptvar"); + if (HGUARD_TARGET == MY_OWNER) + { + int GO_HOSTILE = 1; + } + if (HGUARD_TARGET == GetEntityIndex(GetOwner())) + { + int GO_HOSTILE = 1; + } + if (GetRelationship(HGUARD_TARGET) == "ally") + { + int GO_HOSTILE = 1; + } + if (!(GO_HOSTILE)) + { + } + NPCATK_TARGET = "unset"; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(OLD_WRAITH_TARG != m_hAttackTarget)) return; + if (!(IsEntityAlive(m_hAttackTarget))) return; + string TRACE_START = GetEntityOrigin(MY_OWNER); + string TRACE_END = GetEntityOrigin(m_hAttackTarget); + string HALF_HEIGHT = GetEntityHeight(m_hAttackTarget); + HALF_HEIGHT *= 0.5; + TRACE_END += "z"; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (TRACE_LINE != TRACE_END) + { + NPCATK_TARGET = OLD_WRAITH_TARG; + } + else + { + OLD_WRAITH_TARG = m_hAttackTarget; + } + } + + void sustain_renderprops() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(5.0, "sustain_renderprops"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + // svplaysound: svplaysound 3 10 SOUND_HOVER_LOOP + EmitSound(3, 10, SOUND_HOVER_LOOP); + if (RandomInt(1, 10) == 1) + { + EmitSound(GetOwner(), 0, SOUND_MOAN, 10); + } + } + + void turn_undead() + { + if ((NOT_SUMMONED)) return; + string HOLY_CASTER = param2; + string DMG_HOLY = GetEntityMaxHealth(GetOwner()); + DMG_HOLY *= 2.0; + XDoDamage(GetOwner(), "direct", 1000, 1.0, HOLY_CASTER, HOLY_CASTER, "spellcasting.divination", "holy"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + AM_DRAINING = 0; + SetAnimFrameRate(0); + FWD_SPEED = 0; + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner()), 5, 128); + EmitSound(GetOwner(), 1, SOUND_DEATH, 10); + // svplaysound: svplaysound 2 0 SOUND_DRAIN_LOOP + EmitSound(2, 0, SOUND_DRAIN_LOOP); + // svplaysound: svplaysound 3 0 SOUND_HOVER_LOOP + EmitSound(3, 0, SOUND_HOVER_LOOP); + if (MY_CL_IDX != 0) + { + ClientEvent("update", "all", MY_CL_IDX, "end_fx"); + } + if (!(IsEntityAlive(MY_OWNER))) return; + CallExternal(MY_OWNER, "ext_wraith_active", 0); + } + + void frame_attack_start() + { + // svplaysound: svplaysound 2 10 SOUND_DRAIN_LOOP + EmitSound(2, 10, SOUND_DRAIN_LOOP); + start_drain_attack(); + } + + void frame_attack_end() + { + end_drain_attack(); + } + + void end_drain_attack() + { + // svplaysound: svplaysound 2 0 SOUND_DRAIN_LOOP + EmitSound(2, 0, SOUND_DRAIN_LOOP); + ClientEvent("update", "all", MY_CL_IDX, "end_fx"); + AM_DRAINING = 0; + MY_CL_IDX = 0; + } + + void start_drain_attack() + { + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner()), GetEntityIndex(m_hAttackTarget), ATTACK_HITRANGE); + MY_CL_IDX = "game.script.last_sent_id"; + AM_DRAINING = 1; + drain_attack_loop(); + } + + void drain_attack_loop() + { + if (!(AM_DRAINING)) return; + ScheduleDelayedEvent(0.5, "drain_attack_loop"); + if ((IsValidPlayer(m_hAttackTarget))) + { + string SEE_TARGET = false; + if ((SEE_TARGET)) + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + } + GiveMP(m_hAttackTarget); + if (GetGameTime() > LASTATK_MESSAGE) + { + LASTATK_MESSAGE = GetGameTime(); + LASTATK_MESSAGE += 2.0; + SendPlayerMessage(m_hAttackTarget, "Your soul is being drained!"); + Effect("screenfade", m_hAttackTarget, 2, 1, Vector3(0, 0, 255), 180, "fadein"); + } + if (GetEntityMP(m_hAttackTarget) <= 0) + { + } + slay_target(); + } + } + else + { + if ((false)) + { + } + DoDamage(m_hAttackTarget, "direct", DMG_DRAIN, 1.0, GetOwner()); + } + if ((IsEntityAlive(MY_OWNER))) + { + if (GetEntityMP(MY_OWNER) < GetEntityProperty(MY_OWNER, "maxmp")) + { + } + GiveMP(MY_OWNER); + } + if (!(IsEntityAlive(m_hAttackTarget))) + { + end_drain_attack(); + } + } + + void slay_target() + { + if (!(IsValidPlayer(m_hAttackTarget))) return; + end_drain_attack(); + SendPlayerMessage(m_hAttackTarget, "Your soul has been drained."); + DoDamage(m_hAttackTarget, "direct", 99999, 1.0, GetOwner()); + CallExternal(m_hAttackTarget, "ext_playsound_kiss", 1, 10, SOUND_KILL); + EmitSound(GetOwner(), 0, SOUND_MOAN, 10); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + ScheduleDelayedEvent(0.1, "circle_in"); + NEXT_READY = GetGameTime(); + NEXT_READY += 2.0; + NAMEPREFIX = GetEntityName(MY_OWNER); + NAMEPREFIX += "s"; + NAMEPREFIX += " "; + NAMEPREFIX += GetEntityName(GetOwner()); + SetName(NAMEPREFIX); + INITIAL_ORIGIN = param2; + ScheduleDelayedEvent(0.1, "set_first_origin"); + ScheduleDelayedEvent(300.0, "end_wraith"); + CallExternal(MY_OWNER, "ext_wraith_active", 1); + } + + void set_first_origin() + { + SetEntityOrigin(GetOwner(), INITIAL_ORIGIN); + } + + void ext_master_died() + { + if (!(param1 == MY_OWNER)) return; + npc_suicide(); + } + + void OnHuntTarget(CBaseEntity@ target) + { + CYCLE_TIME = 0.1; + if (!((MY_OWNER !is null))) + { + int REMOVE_ME = 1; + } + if (!(IsEntityAlive(MY_OWNER))) + { + int REMOVE_ME = 1; + } + if ((REMOVE_ME)) + { + end_wraith(); + } + if ((REMOVE_ME)) return; + FWD_SPEED = FWD_SPEED_STANDARD; + if ((IS_FLEEING)) + { + NPC_NOCLIP_DEST = GetMonsterProperty("movedest.origin"); + } + if (m_hAttackTarget != "unset") + { + if (m_hAttackTarget != WRAITH_OLD_TARG) + { + SendPlayerMessage(MY_OWNER, "Your Lesser Wraith has targeted " + GetEntityProperty(m_hAttackTarget, "name.full")); + } + WRAITH_OLD_TARG = m_hAttackTarget; + NPC_PROPELL_SUSPEND = 0; + if (GetEntityRange(m_hAttackTarget) < ATTACK_MOVERANGE) + { + FWD_SPEED = 0; + } + else + { + FWD_SPEED = FWD_SPEED_STANDARD; + } + if (GetEntityRange(m_hAttackTarget) > 1024) + { + NPCATK_TARGET = "unset"; + zap_to_owner(); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARGET_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARGET_Z -= 46; + } + string MY_ORG = GetEntityOrigin(GetOwner()); + MY_ORG = "z"; + SetEntityOrigin(GetOwner(), MY_ORG); + if (GetEntityRange(m_hAttackTarget) < 55) + { + float RND_ANG = Random(0, 359.99); + NPC_NOCLIP_DEST += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, 80, 0)); + NPC_NOCLIP_DEST = "z"; + SetEntityOrigin(GetOwner(), NPC_NOCLIP_DEST); + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + } + else + { + IS_FLEEING = 0; + NPC_NOCLIP_DEST = GetEntityOrigin(m_hAttackTarget); + NPC_NOCLIP_DEST = "z"; + } + } + if (!(m_hAttackTarget == "unset")) return; + string MY_ORG = GetEntityOrigin(GetOwner()); + HOLD_POS = GetEntityOrigin(MY_OWNER); + if (GetEntityRange(MY_OWNER) > 64) + { + LAST_OWNER_YAW = GetEntityProperty(MY_OWNER, "viewangles"); + LAST_OWNER_YAW = /* TODO: $vec.yaw */ $vec.yaw(LAST_OWNER_YAW); + } + if (OWNER_OLD_POS != GetEntityOrigin(MY_OWNER)) + { + LAST_OWNER_YAW = GetEntityProperty(MY_OWNER, "viewangles"); + LAST_OWNER_YAW = /* TODO: $vec.yaw */ $vec.yaw(LAST_OWNER_YAW); + } + HOLD_POS += /* TODO: $relpos */ $relpos(Vector3(0, LAST_OWNER_YAW, 0), Vector3(0, -48, -20)); + string OWNER_GROUND = GetEntityOrigin(MY_OWNER); + string OWNER_GROUND = /* TODO: $get_ground_height */ $get_ground_height(OWNER_GROUND); + OWNER_GROUND += 10; + HOLD_POS = "z"; + if (Distance(MY_ORG, HOLD_POS) < 64) + { + SetMoveDest("none"); + FWD_SPEED = 0; + string CUR_YAW = GetEntityProperty(MY_OWNER, "viewangles"); + string CUR_YAW = /* TODO: $vec.yaw */ $vec.yaw(CUR_YAW); + SetAngles("face"); + NPC_PROPELL_SUSPEND = 1; + SetEntityOrigin(GetOwner(), HOLD_POS); + } + else + { + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARGET_Z = (HOLD_POS).z; + MY_ORG = "z"; + SetEntityOrigin(GetOwner(), MY_ORG); + NPC_PROPELL_SUSPEND = 0; + FWD_SPEED = FWD_SPEED_STANDARD; + NPC_NOCLIP_DEST = HOLD_POS; + SetMoveDest(HOLD_POS); + } + OWNER_OLD_POS = GetEntityOrigin(MY_OWNER); + if (GetGameTime() > NEXT_SCAN) + { + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 5.0; + string OWNER_TARG = GetEntityProperty(MY_OWNER, "target"); + if (GetRelationship(OWNER_TARG) == "enemy") + { + NPCATK_TARGET = OWNER_TARG; + npcatk_targetvalidate(m_hAttackTarget); + } + if (m_hAttackTarget == "unset") + { + } + string TARG_LIST = FindEntitiesInSphere("enemy", 768); + string TARG_LIST = /* TODO: $sort_entlist */ $sort_entlist(TARG_LIST, "range"); + NPCATK_TARGET = GetToken(TARG_LIST, 0, ";"); + npcatk_targetvalidate(m_hAttackTarget); + } + } + + void delay_tele_sound() + { + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + } + + void end_wraith() + { + if ((IsEntityAlive(MY_OWNER))) + { + SendPlayerMessage(MY_OWNER, "Your wraith has vanished!"); + } + CallExternal(MY_OWNER, "ext_wraith_active", 0); + npc_suicide(); + } + + void game_menu_getoptions() + { + if (!(param1 == MY_OWNER)) return; + string reg.mitem.title = "Report Health"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "report"; + string reg.mitem.callback = "bs_global_command"; + if (!(FOLLOW_MODE)) + { + if (m_hAttackTarget == "unset") + { + string reg.mitem.title = "Don't Attack"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "follow"; + string reg.mitem.callback = "bs_global_command"; + } + else + { + string reg.mitem.title = "Disengage Enemy"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "follow"; + string reg.mitem.callback = "bs_global_command"; + } + } + else + { + string reg.mitem.title = "Attack on Sight"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "hunt"; + string reg.mitem.callback = "bs_global_command"; + } + string reg.mitem.title = "Unsummon"; + string reg.mitem.type = "callback"; + string reg.mitem.data = "vanish"; + string reg.mitem.callback = "bs_global_command"; + } + + void bs_global_command() + { + if (!(param1 == MY_OWNER)) return; + if (param2 == "vanish") + { + end_wraith(); + int ENDED_WRAITH = 1; + } + if ((ENDED_WRAITH)) return; + EmitSound(GetOwner(), 0, SOUND_KILL, 10); + if (param2 == "follow") + { + if (m_hAttackTarget == "unset") + { + SendColoredMessage(MY_OWNER, "Lesser Wraith set non agro."); + } + else + { + SendColoredMessage(MY_OWNER, "Lesser Wraith disengaging."); + } + NPCATK_TARGET = "unset"; + FOLLOW_MODE = 1; + zap_to_owner(); + } + if (param2 == "hunt") + { + SendColoredMessage(MY_OWNER, "Lesser Wraith set agro."); + FOLLOW_MODE = 0; + } + if (param2 == "defend") + { + SendColoredMessage(MY_OWNER, "Lesser Wraith set defensive."); + FOLLOW_MODE = 0; + } + if (param2 == "report") + { + int HEALTH_STRING = int(GetEntityHealth(GetOwner())); + HEALTH_STRING += "/"; + HEALTH_STRING += int(GetEntityMaxHealth(GetOwner())); + HEALTH_STRING += "hp"; + SendColoredMessage(MY_OWNER, "Lesser Wraith Reports: " + HEALTH_STRING); + } + } + + void zap_to_owner() + { + NPC_NOCLIP_DEST = GetEntityOrigin(MY_OWNER); + string OWNER_YAW = GetEntityProperty(MY_OWNER, "viewangles"); + string OWNER_YAW = (MY_OWNER).z; + OWNER_YAW += Random(-45.0, 45.0); + NPC_NOCLIP_DEST += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, -256, 0)); + SetEntityOrigin(GetOwner(), NPC_NOCLIP_DEST); + ScheduleDelayedEvent(0.1, "delay_tele_sound"); + } + + void circle_in() + { + string CIRCLE_ORG = GetEntityOrigin(GetOwner()); + CIRCLE_ORG = "z"; + ClientEvent("new", "all", "effects/sfx_summon_circle", CIRCLE_ORG, 3); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/lesser_wraith_cl.as b/scripts/angelscript/monsters/summon/lesser_wraith_cl.as new file mode 100644 index 00000000..7b07284c --- /dev/null +++ b/scripts/angelscript/monsters/summon/lesser_wraith_cl.as @@ -0,0 +1,59 @@ +#pragma context client + +namespace MS +{ + +class LesserWraithCl : CGameScript +{ + int FX_ACTIVE; + string MAX_RANGE; + string MY_OWNER; + string MY_TARGET; + + void client_activate() + { + MY_OWNER = param1; + MY_TARGET = param2; + MAX_RANGE = param3; + FX_ACTIVE = 1; + beam_loop(); + ScheduleDelayedEvent(2.0, "end_fx"); + SetCallback("render", "enable"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + string MY_ORG = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + string TARG_ORG = /* TODO: $getcl */ $getcl(MY_TARGET, "origin"); + if (!(Distance(MY_ORG, TARG_ORG) < MAX_RANGE)) return; + int RND_BONE = RandomInt(1, 15); + string BEAM1_END = /* TODO: $getcl */ $getcl(MY_TARGET, "bonepos", RND_BONE); + int RND_BONE = RandomInt(1, 15); + string BEAM2_END = /* TODO: $getcl */ $getcl(MY_TARGET, "bonepos", RND_BONE); + if ((BEAM1_END).x == 0) + { + string BEAM1_END = TARG_ORG; + } + if ((BEAM2_END).x == 0) + { + string BEAM2_END = TARG_ORG; + } + ClientEffect("beam_end", MY_OWNER, 2, BEAM1_END, "lgtning.spr", 0.001, 5.0, 0.5, 255, 50, 30, Vector3(60, 60, 255)); + ClientEffect("beam_end", MY_OWNER, 3, BEAM2_END, "lgtning.spr", 0.001, 5.0, 0.5, 255, 50, 30, Vector3(60, 60, 255)); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(0.5, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/lightning_ball_guided.as b/scripts/angelscript/monsters/summon/lightning_ball_guided.as new file mode 100644 index 00000000..c5deab84 --- /dev/null +++ b/scripts/angelscript/monsters/summon/lightning_ball_guided.as @@ -0,0 +1,82 @@ +#pragma context server + +#include "monsters/summon/fire_ball_guided.as" + +namespace MS +{ + +class LightningBallGuided : CGameScript +{ + int AM_LIGHTNING; + int IS_ACTIVE; + string MY_LIGHT_SCRIPT; + int MY_SPEED; + int PLAYING_DEAD; + string PUSH_LIST; + string SOUND_EXPLODE; + string SOUND_SPAWN; + string SPRITE_EXPLODE; + + LightningBallGuided() + { + SOUND_SPAWN = "debris/beamstart4.wav"; + SOUND_EXPLODE = "ambience/alienlaser1.wav"; + SPRITE_EXPLODE = "xfire2.spr"; + MY_SPEED = 100; + AM_LIGHTNING = 1; + } + + void OnSpawn() override + { + SetName("ball lightning"); + SetHealth(30); + SetFly(true); + SetWidth(32); + SetHeight(32); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 15); + SetInvincible(2); + PLAYING_DEAD = 1; + SetMonsterClip(0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + EmitSound(GetOwner(), 0, SOUND_SPAWN, 10); + SetIdleAnim("spin_horizontal_norm"); + SetSolid("none"); + ClientEvent("new", "all", "monsters/summon/guided_ball_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 0)); + MY_LIGHT_SCRIPT = "game.script.last_sent_id"; + } + + void go_splodie() + { + ScheduleDelayedEvent(0.1, "remove_me"); + ClientEvent("remove", "all", MY_LIGHT_SCRIPT); + SetModel("none"); + XDoDamage(GetMonsterProperty("origin"), MY_AOE, MY_BASE_DMG, 0.1, MY_OWNER, MY_OWNER, "spellcasting.lightning", "lightning"); + PUSH_LIST = FindEntitiesInSphere("enemy", MY_AOE); + if (PUSH_LIST != "none") + { + for (int i = 0; i < GetTokenCount(PUSH_LIST, ";"); i++) + { + push_loop(); + } + } + // PlayRandomSound from: SOUND_EXPLODE + array sounds = {SOUND_EXPLODE}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + IS_ACTIVE = 0; + } + + void push_loop() + { + string CUR_TARGET = GetToken(PUSH_LIST, i, ";"); + LogDebug("push_loop GetEntityName(CUR_TARGET) of PUSH_LIST"); + string TARGET_ORG = GetEntityOrigin(CUR_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + SetVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 500, 0))); + Effect("screenfade", CUR_TARGET, 3, 1, Vector3(255, 255, 255), 255, "fadein"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/lightning_repulse.as b/scripts/angelscript/monsters/summon/lightning_repulse.as new file mode 100644 index 00000000..fc3a3a22 --- /dev/null +++ b/scripts/angelscript/monsters/summon/lightning_repulse.as @@ -0,0 +1,126 @@ +#pragma context server + +namespace MS +{ + +class LightningRepulse : CGameScript +{ + string ACTIVE_SKILL; + string GAME_PVP; + int IS_ACTIVE; + string MY_BASE_DMG; + string MY_DURATION; + string MY_OWNER; + string MY_RANGE; + string OWNER_DBLHP; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + + LightningRepulse() + { + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + if ((IS_ACTIVE)) + { + } + SetEntityOrigin(GetOwner(), GetEntityOrigin(MY_OWNER)); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), MY_RANGE, 0, 1.0, 0); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_RANGE = param2; + SetRace(GetEntityRace(MY_OWNER)); + MY_DURATION = param3; + MY_BASE_DMG = param4; + OWNER_DBLHP = GetEntityMaxHealth(MY_OWNER); + OWNER_DBLHP *= 2.0; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + GAME_PVP = "game.pvp"; + IS_ACTIVE = 1; + MY_DURATION("end_summon"); + ACTIVE_SKILL = param5; + if (ACTIVE_SKILL == "PARAM5") + { + ACTIVE_SKILL = "spellcasting.lightning"; + } + } + + void OnSpawn() override + { + SetName("Static Shock"); + SetInvincible(true); + SetWidth(32); + SetHeight(32); + SetSolid("none"); + PLAYING_DEAD = 1; + } + + void game_dodamage() + { + if (!(param1)) return; + if ((OWNER_ISPLAYER)) + { + if (GAME_PVP == 0) + { + } + if ((IsValidPlayer(param2))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(param2) == "enemy")) return; + string BEAM_START = GetMonsterProperty("origin"); + Effect("beam", "end", "lgtning.spr", 30, BEAM_START, param2, 0, Vector3(200, 255, 50), 200, 30, 0.1); + string TARG_HP = GetEntityMaxHealth(param2); + if (TARG_HP > 1500) + { + if (OWNER_DBLHP < TARG_HP) + { + } + int EXIT_SUB = 1; + if ((OWNER_ISPLAYER)) + { + if (!(DID_MESSAGE)) + { + } + DID_MESSAGE = 1; + SendPlayerMessage(MY_OWNER, GetEntityName(param2) + " is too strong to be affected."); + } + } + if ((EXIT_SUB)) return; + string TARG_VEL = GetEntityAngles(MY_OWNER); + SetAngles("face"); + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 500, 10)); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(MY_BASE_DMG > 0)) return; + XDoDamage(param2, "direct", MY_BASE_DMG, 1.0, MY_OWNER, MY_OWNER, ACTIVE_SKILL, "lightning"); + } + + void end_summon() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/lstrike.as b/scripts/angelscript/monsters/summon/lstrike.as new file mode 100644 index 00000000..372c8e71 --- /dev/null +++ b/scripts/angelscript/monsters/summon/lstrike.as @@ -0,0 +1,322 @@ +#pragma context server + +namespace MS +{ + +class Lstrike : CGameScript +{ + string CENTER_POINT; + float DUR_CENTER; + float DUR_SECONDARY; + int IS_ACTIVE; + int LBLAST_CUR_TARG; + string LBLAST_LOOPCOUNT; + string LBLAST_TARG1; + string LBLAST_TARG2; + string LBLAST_TARG3; + string LBLAST_TARG4; + string LBLAST_TARG5; + string LBLAST_TARG6; + string LBLAST_TARG7; + string LBLAST_TARG8; + string LBLAST_TARG9; + string LBLAST_TARGETS; + string MAX_CHILDREN; + string MY_DMG; + string MY_OWNER; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string PVP_MODE; + int SECONDARY_BEAMS_ON; + + Lstrike() + { + DUR_CENTER = 15.0; + DUR_SECONDARY = 13.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + EmitSound(GetOwner(), 0, "magic/lightning_strike.wav", 10); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DMG = param2; + MAX_CHILDREN = param3; + StoreEntity("ent_expowner"); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + PVP_MODE = "game.pvp"; + DropToFloor(); + ScheduleDelayedEvent(0.1, "summon_start"); + } + + void OnSpawn() override + { + SetName("Lightning Strike"); + SetInvincible(true); + SetHealth(1); + PLAYING_DEAD = 1; + DropToFloor(); + } + + void summon_start() + { + string BEAP_TOP = GetMonsterProperty("origin"); + string BEAM_BOTTOM = GetMonsterProperty("origin"); + BEAM_BOTTOM = "z"; + SetEntityOrigin(GetOwner(), BEAM_BOTTOM); + string SKY_HEIGHT = /* TODO: $get_sky_height */ $get_sky_height(BEAM_TOP); + Vector3 BEAM_TOP = Vector3((GetMonsterProperty("origin")).x, (GetMonsterProperty("origin")).y, SKY_HEIGHT); + Effect("beam", "point", "lgtning.spr", 200, BEAM_BOTTOM, BEAM_TOP, Vector3(255, 255, 0), 255, 100, DUR_CENTER); + ClientEvent("new", "all", "effects/make_light", BEAM_BOTTOM, 128, Vector3(255, 255, 0), DUR_CENTER); + CENTER_POINT = BEAM_BOTTOM; + EmitSound(GetOwner(), 0, "weather/Storm_exclamation.wav", 10); + IS_ACTIVE = 1; + LBLAST_CUR_TARG = 0; + ScheduleDelayedEvent(0.1, "damage_loop"); + ScheduleDelayedEvent(2.0, "start_secondary"); + DUR_CENTER("summon_end"); + } + + void start_secondary() + { + // TODO: getents any 1024 + if (getCount > 0) + { + LBLAST_LOOPCOUNT = 0; + LBLAST_TARGETS = 0; + for (int i = 0; i < getCount; i++) + { + lblast_mark_targets(); + } + } + SECONDARY_BEAMS_ON = 1; + } + + void lblast_mark_targets() + { + LBLAST_LOOPCOUNT += 1; + if (LBLAST_LOOPCOUNT == 1) + { + string CHECK_ENT = getEnt1; + } + if (LBLAST_LOOPCOUNT == 2) + { + string CHECK_ENT = getEnt2; + } + if (LBLAST_LOOPCOUNT == 3) + { + string CHECK_ENT = getEnt3; + } + if (LBLAST_LOOPCOUNT == 4) + { + string CHECK_ENT = getEnt4; + } + if (LBLAST_LOOPCOUNT == 5) + { + string CHECK_ENT = getEnt5; + } + if (LBLAST_LOOPCOUNT == 6) + { + string CHECK_ENT = getEnt6; + } + if (LBLAST_LOOPCOUNT == 7) + { + string CHECK_ENT = getEnt7; + } + if (LBLAST_LOOPCOUNT == 8) + { + string CHECK_ENT = getEnt8; + } + if (LBLAST_LOOPCOUNT == 9) + { + string CHECK_ENT = getEnt9; + } + if (!(GetRelationship(CHECK_ENT) == "enemy")) return; + if ((OWNER_ISPLAYER)) + { + if (PVP_MODE == 0) + { + } + if ((IsValidPlayer(CHECK_ENT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + LBLAST_TARGETS += 1; + if (!(LBLAST_TARGETS <= MAX_CHILDREN)) return; + string MBEAM_TARG = GetEntityOrigin(CHECK_ENT); + string BEAM_GROUND = /* TODO: $get_ground_height */ $get_ground_height(MBEAM_TARG); + MBEAM_TARG = "z"; + if (LBLAST_TARGETS == 1) + { + LBLAST_TARG1 = MBEAM_TARG; + } + if (LBLAST_TARGETS == 2) + { + LBLAST_TARG2 = MBEAM_TARG; + } + if (LBLAST_TARGETS == 3) + { + LBLAST_TARG3 = MBEAM_TARG; + } + if (LBLAST_TARGETS == 4) + { + LBLAST_TARG4 = MBEAM_TARG; + } + if (LBLAST_TARGETS == 5) + { + LBLAST_TARG5 = MBEAM_TARG; + } + if (LBLAST_TARGETS == 6) + { + LBLAST_TARG6 = MBEAM_TARG; + } + if (LBLAST_TARGETS == 7) + { + LBLAST_TARG7 = MBEAM_TARG; + } + if (LBLAST_TARGETS == 8) + { + LBLAST_TARG8 = MBEAM_TARG; + } + if (LBLAST_TARGETS == 9) + { + LBLAST_TARG9 = MBEAM_TARG; + } + string SBEAM_SKY = /* TODO: $get_sky_height */ $get_sky_height(MBEAM_TARG); + string SBEAM_TOP = MBEAM_TARG; + SBEAM_TOP = "z"; + Effect("beam", "point", "lgtning.spr", 100, MBEAM_TARG, SBEAM_TOP, Vector3(255, 255, 0), 200, 100, DUR_SECONDARY); + ClientEvent("new", "all", "effects/make_light", MBEAM_TARG, 96, Vector3(255, 255, 0), DUR_SECONDARY); + } + + void damage_loop() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "damage_loop"); + if ((SECONDARY_BEAMS_ON)) + { + LBLAST_CUR_TARG += 1; + if (LBLAST_CUR_TARG == 1) + { + if (!((BLAST_CHILD1 !is null))) + { + } + SpawnNPC("monsters/summon/lstrike_child", LBLAST_TARG1, ScriptMode::Legacy); // params: MY_OWNER, MY_DMG, DUR_SECONDARY + BLAST_CHILD1 = GetEntityIndex(m_hLastCreated); + } + if (LBLAST_CUR_TARG == 2) + { + if (!((BLAST_CHILD2 !is null))) + { + } + SpawnNPC("monsters/summon/lstrike_child", LBLAST_TARG2, ScriptMode::Legacy); // params: MY_OWNER, MY_DMG, DUR_SECONDARY + BLAST_CHILD2 = GetEntityIndex(m_hLastCreated); + } + if (LBLAST_CUR_TARG == 3) + { + if (!((BLAST_CHILD3 !is null))) + { + } + SpawnNPC("monsters/summon/lstrike_child", LBLAST_TARG3, ScriptMode::Legacy); // params: MY_OWNER, MY_DMG, DUR_SECONDARY + BLAST_CHILD3 = GetEntityIndex(m_hLastCreated); + } + if (LBLAST_CUR_TARG == 4) + { + if (!((BLAST_CHILD4 !is null))) + { + } + SpawnNPC("monsters/summon/lstrike_child", LBLAST_TARG4, ScriptMode::Legacy); // params: MY_OWNER, MY_DMG, DUR_SECONDARY + BLAST_CHILD5 = GetEntityIndex(m_hLastCreated); + } + if (LBLAST_CUR_TARG == 5) + { + if (!((BLAST_CHILD5 !is null))) + { + } + SpawnNPC("monsters/summon/lstrike_child", LBLAST_TARG5, ScriptMode::Legacy); // params: MY_OWNER, MY_DMG, DUR_SECONDARY + BLAST_CHILD5 = GetEntityIndex(m_hLastCreated); + } + if (LBLAST_CUR_TARG == 6) + { + if (!((BLAST_CHILD6 !is null))) + { + } + SpawnNPC("monsters/summon/lstrike_child", LBLAST_TARG6, ScriptMode::Legacy); // params: MY_OWNER, MY_DMG, DUR_SECONDARY + BLAST_CHILD6 = GetEntityIndex(m_hLastCreated); + } + if (LBLAST_CUR_TARG == 7) + { + if (!((BLAST_CHILD7 !is null))) + { + } + SpawnNPC("monsters/summon/lstrike_child", LBLAST_TARG7, ScriptMode::Legacy); // params: MY_OWNER, MY_DMG, DUR_SECONDARY + BLAST_CHILD7 = GetEntityIndex(m_hLastCreated); + } + if (LBLAST_CUR_TARG == 8) + { + if (!((BLAST_CHILD8 !is null))) + { + } + SpawnNPC("monsters/summon/lstrike_child", LBLAST_TARG8, ScriptMode::Legacy); // params: MY_OWNER, MY_DMG, DUR_SECONDARY + BLAST_CHILD8 = GetEntityIndex(m_hLastCreated); + } + if (LBLAST_CUR_TARG == 9) + { + if (!((BLAST_CHILD9 !is null))) + { + } + SpawnNPC("monsters/summon/lstrike_child", LBLAST_TARG9, ScriptMode::Legacy); // params: MY_OWNER, MY_DMG, DUR_SECONDARY + BLAST_CHILD9 = GetEntityIndex(m_hLastCreated); + } + if (LBLAST_CUR_TARG > 9) + { + SECONDARY_BEAMS_ON = 0; + } + } + DoDamage(GetMonsterProperty("origin"), 128, MY_DMG, 1.0, 0.1); + } + + void summon_end() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.5, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void debug_beam() + { + if (param3 == "PARAM3") + { + Vector3 BEAM_COLOR = Vector3(255, 0, 255); + } + if (param3 != "PARAM3") + { + string BEAM_COLOR = param3; + } + float BEAM_DURATION = 1.0; + string BEAM_START = param1; + if (param2 == "PARAM2") + { + string BEAM_END = BEAM_START; + } + if (param2 != "PARAM2") + { + string BEAM_END = param2; + } + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 64)); + Effect("beam", "point", "laserbeam.spr", 20, BEAM_START, BEAM_END, BEAM_COLOR, 255, 0.7, BEAM_DURATION); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/lstrike_child.as b/scripts/angelscript/monsters/summon/lstrike_child.as new file mode 100644 index 00000000..d71884c0 --- /dev/null +++ b/scripts/angelscript/monsters/summon/lstrike_child.as @@ -0,0 +1,70 @@ +#pragma context server + +namespace MS +{ + +class LstrikeChild : CGameScript +{ + int IS_ACTIVE; + string MY_DMG; + string MY_DURATION; + string MY_OWNER; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string PVP_MODE; + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + EmitSound(GetOwner(), 0, "magic/lightning_strike.wav", 10); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DMG = param2; + MY_DURATION = param3; + StoreEntity("ent_expowner"); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + PVP_MODE = "game.pvp"; + DropToFloor(); + IS_ACTIVE = 1; + summon_start(); + MY_DURATION("summon_end"); + } + + void OnSpawn() override + { + SetName("Lightning Strike"); + SetInvincible(true); + SetHealth(1); + PLAYING_DEAD = 1; + DropToFloor(); + } + + void summon_start() + { + ScheduleDelayedEvent(0.1, "damage_loop"); + } + + void damage_loop() + { + SetRepeatDelay(0.30); + if (!(IS_ACTIVE)) return; + DoDamage(GetMonsterProperty("origin"), 96, MY_DMG, 1.0, 0.1); + } + + void summon_end() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/magic_dart.as b/scripts/angelscript/monsters/summon/magic_dart.as new file mode 100644 index 00000000..9af65736 --- /dev/null +++ b/scripts/angelscript/monsters/summon/magic_dart.as @@ -0,0 +1,260 @@ +#pragma context server + +namespace MS +{ + +class MagicDart : CGameScript +{ + int DART_ON; + string FINAL_DEST; + int FIZZING_OUT; + int HIT_SOMETHING; + int LOOP_COUNT; + string MY_OWNER; + string MY_SCRIPT_IDX; + string MY_SKILL; + string OLD_POS; + string OWNER_ANGLES; + string OWNER_ISPLAYER; + string PROJ_DEST; + string PROJ_DMG; + string PROJ_SIZE; + int PROJ_SPEED; + string SOUND_SHOOT; + string SOUND_ZAP1; + string SOUND_ZAP2; + string SOUND_ZAP3; + int STUCK_COUNT; + string WORLD_SIZE; + + MagicDart() + { + SOUND_SHOOT = "ambience/alienflyby1.wav"; + SOUND_ZAP1 = "debris/beamstart14.wav"; + SOUND_ZAP2 = "debris/beamstart14.wav"; + SOUND_ZAP3 = "debris/zap1.wav"; + } + + void game_dynamically_created() + { + MY_OWNER = GetEntityIndex(param1); + PROJ_DEST = param2; + PROJ_SIZE = param3; + PROJ_DMG = param5; + MY_SKILL = param6; + WORLD_SIZE = PROJ_SIZE; + WORLD_SIZE *= 15; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + PROJ_SPEED = 180; + string SPEED_ADJ = PROJ_SIZE; + SPEED_ADJ *= 15; + PROJ_SPEED -= SPEED_ADJ; + SetMoveDest(PROJ_DEST); + SetProp(GetOwner(), "movetype", "const.movetype.noclip"); + SetProp(GetOwner(), "solid", 0); + OWNER_ANGLES = GetEntityAngles(MY_OWNER); + SetAngles("face"); + FINAL_DEST = /* TODO: $relpos */ $relpos(0, 20000, 0); + SetMoveDest(FINAL_DEST); + string L_PROJ_SPEED = PROJ_SPEED; + L_PROJ_SPEED *= 10; + SetAnimMoveSpeed(L_PROJ_SPEED); + ClientEvent("new", "all", "monsters/summon/magic_dart_cl", GetEntityIndex(GetOwner()), PROJ_SIZE); + MY_SCRIPT_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.1, "setup_dart"); + ScheduleDelayedEvent(10.0, "fiz_out"); + } + + void OnSpawn() override + { + SetName("Mana Bolt"); + SetModel("monsters/bat.mdl"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SetWidth(32); + SetHeight(32); + SetSolid("none"); + SetBloodType("none"); + SetInvincible(true); + SetRace("beloved"); + SetMonsterClip(0); + SetFly(true); + SetGravity(0); + ScheduleDelayedEvent(10.0, "remove_me"); + } + + void setup_dart() + { + DART_ON = 1; + STUCK_COUNT = 0; + OLD_POS = GetMonsterProperty("origin"); + ScheduleDelayedEvent(0.1, "move_dart"); + int SHOOT_VOLUME = int(PROJ_SIZE); + SetMoveDest(PROJ_DEST); + EmitSound(GetOwner(), 0, SOUND_SHOOT, SHOOT_VOLUME); + } + + void move_dart() + { + if (!(DART_ON)) return; + ScheduleDelayedEvent(0.1, "move_dart"); + SetMoveDest(PROJ_DEST); + // TODO: getents any WORLD_SIZE + if (getCount > 0) + { + hit_target(); + ScheduleDelayedEvent(0.1, "fiz_out", "getents"); + } + if (Distance(GetMonsterProperty("origin"), PROJ_DEST) <= PROJ_SPEED) + { + if (!(HIT_SOMETHING)) + { + } + string NEW_DEST = PROJ_DEST; + string MY_YAW = (GetMonsterProperty("angles.yaw")).z; + NEW_DEST += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 1000, 0)); + PROJ_DEST = NEW_DEST; + } + if (GetMonsterProperty("origin") == OLD_POS) + { + if (!(HIT_SOMETHING)) + { + } + STUCK_COUNT += 1; + if (STUCK_COUNT > 3) + { + } + fiz_out("stuck"); + } + OLD_POS = GetMonsterProperty("origin"); + } + + void hit_target() + { + HIT_SOMETHING = 1; + LOOP_COUNT = 0; + for (int i = 0; i < getCount; i++) + { + dmg_target(); + } + } + + void dmg_target() + { + LOOP_COUNT += 1; + if (LOOP_COUNT == 1) + { + string CHECK_ENT = getEnt1; + } + if (LOOP_COUNT == 2) + { + string CHECK_ENT = getEnt2; + } + if (LOOP_COUNT == 3) + { + string CHECK_ENT = getEnt3; + } + if (LOOP_COUNT == 4) + { + string CHECK_ENT = getEnt4; + } + if (LOOP_COUNT == 5) + { + string CHECK_ENT = getEnt5; + } + if (LOOP_COUNT == 6) + { + string CHECK_ENT = getEnt6; + } + if (LOOP_COUNT == 7) + { + string CHECK_ENT = getEnt7; + } + if (LOOP_COUNT == 8) + { + string CHECK_ENT = getEnt8; + } + if (LOOP_COUNT == 9) + { + string CHECK_ENT = getEnt9; + } + if (!(GetRelationship(CHECK_ENT) == "enemy")) return; + if (!(GetEntityIndex(CHECK_ENT) != FIRST_TARG)) return; + if ((OWNER_ISPLAYER)) + { + if ("game.pvp" == 0) + { + } + if ((IsValidPlayer(CHECK_ENT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + XDoDamage(CHECK_ENT, "direct", PROJ_DMG, 1.0, MY_OWNER, MY_OWNER, MY_SKILL, "magic"); + Effect("screenfade", CHECK_ENT, 3, 1, Vector3(255, 255, 255), 255, "fadein"); + } + + void debug_beam() + { + if (param3 == "PARAM3") + { + Vector3 BEAM_COLOR = Vector3(255, 0, 255); + } + if (param3 != "PARAM3") + { + string BEAM_COLOR = param3; + } + float BEAM_DURATION = 1.0; + string BEAM_START = param1; + if (param2 == "PARAM2") + { + string BEAM_END = BEAM_START; + } + if (param2 != "PARAM2") + { + string BEAM_END = param2; + } + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 64)); + Effect("beam", "point", "laserbeam.spr", 20, BEAM_START, BEAM_END, BEAM_COLOR, 255, 0.7, BEAM_DURATION); + } + + void fiz_out() + { + if ((FIZZING_OUT)) return; + FIZZING_OUT = 1; + DART_ON = 0; + // PlayRandomSound from: SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3 + array sounds = {SOUND_ZAP1, SOUND_ZAP2, SOUND_ZAP3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ClientEvent("update", "all", MY_SCRIPT_IDX, "shrink_out"); + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + ScheduleDelayedEvent(0.1, "remove_me2"); + } + + void remove_me2() + { + DeleteEntity(GetOwner()); + } + + void game_reached_dest() + { + } + + void game_movingto_dest() + { + SetAnimMoveSpeed(PROJ_SPEED); + } + + void game_stopmoving() + { + SetAnimMoveSpeed(PROJ_SPEED); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/magic_dart_cl.as b/scripts/angelscript/monsters/summon/magic_dart_cl.as new file mode 100644 index 00000000..4cf5382b --- /dev/null +++ b/scripts/angelscript/monsters/summon/magic_dart_cl.as @@ -0,0 +1,80 @@ +#pragma context client + +namespace MS +{ + +class MagicDartCl : CGameScript +{ + string CALLED_REMOVE; + string CL_PROJ_SIZE; + string FADE_OUT; + float F_DEATH; + string GLUE_IDX; + int REND_AMT; + + void client_activate() + { + GLUE_IDX = param1; + CL_PROJ_SIZE = param2; + REND_AMT = 200; + SetCallback("render", "enable"); + F_DEATH = 90.0; + ClientEffect("tempent", "sprite", "nhth1.spr", "l.pos", "n_sprite", "n_sprite_update"); + } + + void game_prerender() + { + n_sprite_update(); + } + + void n_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 10); + ClientEffect("tempent", "set_current_prop", "scale", CL_PROJ_SIZE); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", REND_AMT); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void n_sprite_update() + { + string GLUE_ORG = /* TODO: $getcl */ $getcl(GLUE_IDX, "origin"); + ClientEffect("tempent", "set_current_prop", "origin", GLUE_ORG); + ClientEffect("tempent", "set_current_prop", "scale", CL_PROJ_SIZE); + ClientEffect("tempent", "set_current_prop", "renderamt", REND_AMT); + if (!(/* TODO: $getcl */ $getcl(GLUE_IDX, "exists"))) + { + FADE_OUT = 1; + } + if ((FADE_OUT)) + { + CL_PROJ_SIZE -= 0.5; + ClientEffect("tempent", "set_current_prop", "fadeout", 1); + if (!(CALLED_REMOVE)) + { + } + CALLED_REMOVE = 1; + ScheduleDelayedEvent(2.0, "remove_me"); + } + } + + void shrink_out() + { + FADE_OUT = 1; + } + + void remove_me() + { + RemoveScript(); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/meteor_deployer.as b/scripts/angelscript/monsters/summon/meteor_deployer.as new file mode 100644 index 00000000..ca3d3396 --- /dev/null +++ b/scripts/angelscript/monsters/summon/meteor_deployer.as @@ -0,0 +1,110 @@ +#pragma context server + +namespace MS +{ + +class MeteorDeployer : CGameScript +{ + string AUTO_DESTRUCT; + string GAME_PVP; + string MY_OWNER; + string OWNER_WEAPON; + int PLAYING_DEAD; + + void OnSpawn() override + { + SetName("Meteor Deployer"); + LogDebug("game_spawn"); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 22); + SetWidth(2); + SetHeight(2); + SetSolid("none"); + SetGravity(0); + SetRace("beloved"); + SetInvincible(true); + SetNoPush(true); + PLAYING_DEAD = 1; + GAME_PVP = "game.pvp"; + ScheduleDelayedEvent(0.1, "nuke_it"); + ScheduleDelayedEvent(3.0, "remove_me"); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + OWNER_WEAPON = param2; + AUTO_DESTRUCT = GetGameTime(); + AUTO_DESTRUCT += 10.0; + LogDebug("game_dynamically_created GetEntityName(MY_OWNER)"); + } + + void nuke_it() + { + LogDebug("nuke_it"); + string MY_DEST = GetEntityOrigin(GetOwner()); + MY_DEST = "z"; + SetMoveDest(MY_DEST); + TossProjectile("proj_staff_fire_bomb", /* TODO: $relpos */ $relpos(0, 0, -17), "none", 300, 0, 0, "none"); + ClientEvent("new", "all", "effects/sfx_seal", MY_DEST, 256, 2, 2.0); + ClientEvent("new", "all", "effects/sfx_sprite_in", GetEntityOrigin(GetOwner()), "xflare1.spr", 20, 4.0); + } + + void ext_fire_bomb() + { + LogDebug("ext_fire_bomb"); + if ((IsValidPlayer(MY_OWNER))) + { + string L_DMG = GetSkillLevel(MY_OWNER, "spellcasting.fire"); + L_DMG *= 4.5; + float FALL_OFF = 0.1; + } + else + { + string L_DMG = GetEntityProperty(MY_OWNER, "scriptvar"); + float FALL_OFF = 0.2; + } + if ((IsValidPlayer(MY_OWNER))) + { + XDoDamage(param1, 350, L_DMG, FALL_OFF, MY_OWNER, OWNER_WEAPON, "spellcasting.fire", "fire_effect"); + } + else + { + XDoDamage(param1, 350, L_DMG, FALL_OFF, MY_OWNER, MY_OWNER, "none", "fire_effect"); + } + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void game_dodamage() + { + LogDebug("game_dodamage PARAM1 GetEntityName(param2)"); + if ((GetEntityProperty(param2, "haseffect"))) return; + if (!(GAME_PVP)) + { + if ((IsValidPlayer(param2))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(param2) == "enemy")) return; + if ((IsValidPlayer(MY_OWNER))) + { + string DOT_FIRE = GetSkillLevel(MY_OWNER, "spellcasting.fire"); + DOT_FIRE *= 0.75; + } + else + { + string DOT_FIRE = GetEntityProperty(MY_OWNER, "scriptvar"); + } + ApplyEffect(param2, "effects/dot_fire", 5.0, MY_OWNER, DOT_FIRE); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/npc_acid_cloud.as b/scripts/angelscript/monsters/summon/npc_acid_cloud.as new file mode 100644 index 00000000..ea360b80 --- /dev/null +++ b/scripts/angelscript/monsters/summon/npc_acid_cloud.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "monsters/summon/npc_poison_cloud.as" + +namespace MS +{ + +class NpcAcidCloud : CGameScript +{ + string AOE_SCAN_TYPE; + string SPRITE_COLOR; + + NpcAcidCloud() + { + AOE_SCAN_TYPE = "noscan"; + SPRITE_COLOR = Vector3(255, 8, 30); + } + + void aoe_scan_loop() + { + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 256, MY_BASE_DAMAGE, 0, MY_OWNER, MY_OWNER, "spellcasting.affliction", "acid"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/npc_poison_cloud.as b/scripts/angelscript/monsters/summon/npc_poison_cloud.as new file mode 100644 index 00000000..8d8a0b21 --- /dev/null +++ b/scripts/angelscript/monsters/summon/npc_poison_cloud.as @@ -0,0 +1,139 @@ +#pragma context server + +#include "monsters/summon/base_aoe2.as" + +namespace MS +{ + +class NpcPoisonCloud : CGameScript +{ + string AOE_DURATION; + string AOE_OWNER; + int AOE_RADIUS; + string AOE_SCAN_TYPE; + string CHECK_EFFECT; + int CLOUD_HEIGHT; + int CLOUD_NEGWIDTH; + int CLOUD_WIDTH; + string EFFECT_SCRIPT; + int FX_ACTIVE; + string FX_ORIGIN; + string FX_SPRITE_COLOR; + string MY_BASE_DAMAGE; + string MY_DURATION; + string MY_OWNER; + string SMOKE_SPRITE; + string SPAWN_SOUND; + string SPRITE_COLOR; + + NpcPoisonCloud() + { + SMOKE_SPRITE = "poison_cloud.spr"; + SPAWN_SOUND = "ambience/steamburst1.wav"; + EFFECT_SCRIPT = "effects/dot_poison"; + AOE_RADIUS = 128; + AOE_SCAN_TYPE = "tsphere"; + SPRITE_COLOR = Vector3(0, 0, 0); + CHECK_EFFECT = "DOT_poison"; + CLOUD_HEIGHT = 40; + CLOUD_WIDTH = 96; + CLOUD_NEGWIDTH = -96; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_BASE_DAMAGE = param3; + MY_DURATION = param4; + AOE_OWNER = MY_OWNER; + AOE_DURATION = MY_DURATION; + string MY_ORG = GetEntityOrigin(GetOwner()); + string MY_GROUND = /* TODO: $get_ground_height */ $get_ground_height(MY_ORG); + if ((MY_ORG).z != MY_GROUND) + { + MY_GROUND += 20; + MY_ORG += "z"; + if ((MY_ORG).z > MY_GROUND) + { + } + LogDebug("game_dynamically_created adjusting height"); + SetEntityOrigin(GetOwner(), MY_ORG); + } + string CL_DURATION = MY_DURATION; + CL_DURATION -= 2.5; + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), SPRITE_COLOR, CL_DURATION); + } + + void OnSpawn() override + { + SetName("Poison Cloud"); + ScheduleDelayedEvent(0.1, "spawn_sound"); + } + + void spawn_sound() + { + EmitSound(GetOwner(), 0, SPAWN_SOUND, 10); + } + + void aoe_affect_target() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + ApplyEffect(param1, EFFECT_SCRIPT, 5.0, MY_OWNER, MY_BASE_DAMAGE); + } + + void aoe_end() + { + DeleteEntity(GetOwner()); + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_ACTIVE = 1; + FX_SPRITE_COLOR = param2; + fx_loop(); + PARAM3("poison_end_cl"); + } + + void poison_end_cl() + { + FX_ACTIVE = 0; + RemoveScript(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "fx_loop"); + smokes_shoot(); + } + + void smokes_shoot() + { + float x = Random(CLOUD_NEGWIDTH, CLOUD_WIDTH); + float y = Random(CLOUD_NEGWIDTH, CLOUD_WIDTH); + string SPR_POS = /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(x, y, 0)); + string SPR_GROUND = /* TODO: $get_ground_height */ $get_ground_height(SPR_POS); + string L_POS = /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(x, y, 32)); + L_POS += FX_ORIGIN; + if (!(/* TODO: $get_contents */ $get_contents(L_POS) == "empty")) return; + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + } + + void setup_smokes() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/npc_poison_cloud2.as b/scripts/angelscript/monsters/summon/npc_poison_cloud2.as new file mode 100644 index 00000000..0b613672 --- /dev/null +++ b/scripts/angelscript/monsters/summon/npc_poison_cloud2.as @@ -0,0 +1,101 @@ +#pragma context server + +namespace MS +{ + +class NpcPoisonCloud2 : CGameScript +{ + int CLOUD_RADIUS; + string CLOUD_TYPE; + string CL_ID; + string DOT_POISON; + int IS_ACTIVE; + string MY_DURATION; + string MY_OWNER; + int PLAYING_DEAD; + string SCAN_TARGS; + + NpcPoisonCloud2() + { + CLOUD_RADIUS = 256; + Precache("poison_cloud.spr"); + } + + void OnSpawn() override + { + SetName("Poisonous Cloud"); + SetNoPush(true); + SetInvincible(true); + PLAYING_DEAD = 1; + SetWidth(1); + SetHeight(1); + SetModel("null.mdl"); + SetSolid("none"); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + DOT_POISON = param2; + MY_DURATION = param3; + CLOUD_TYPE = param4; + if ((CLOUD_TYPE).findFirst("PARAM") == 0) + { + CLOUD_TYPE = 1; + } + LogDebug("game_dynamically_created Owner GetEntityName(MY_OWNER) dot DOT_POISON dur MY_DURATION type CLOUD_TYPE"); + SetRace(GetEntityRace(MY_OWNER)); + CL_ID = "game.script.last_sent_id"; + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "do_scan"); + ScheduleDelayedEvent(0.1, "cl_effects"); + MY_DURATION("remove_me"); + } + + void cl_effects() + { + string L_POS = GetEntityOrigin(GetOwner()); + L_POS = "z"; + ClientEvent("new", "all", "monsters/summon/npc_poison_cloud2_cl", L_POS, MY_DURATION, CLOUD_TYPE); + } + + void do_scan() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "do_scan"); + string L_POS = GetEntityOrigin(GetOwner()); + L_POS += "z"; + SCAN_TARGS = FindEntitiesInSphere("enemy", CLOUD_RADIUS); + if (!(SCAN_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(SCAN_TARGS, ";"); i++) + { + poison_targets(); + } + } + + void poison_targets() + { + string CUR_TARG = GetToken(SCAN_TARGS, i, ";"); + if (CLOUD_TYPE == 1) + { + ApplyEffect(CUR_TARG, "effects/dot_poison", 5.0, MY_OWNER, DOT_POISON); + } + if (CLOUD_TYPE == 2) + { + ApplyEffect(CUR_TARG, "effects/poison_spore", 5.0, MY_OWNER, DOT_POISON); + } + if (CLOUD_TYPE == 3) + { + ApplyEffect(CUR_TARG, "effects/dot_acid", 5.0, MY_OWNER, DOT_POISON, "none"); + } + } + + void remove_me() + { + IS_ACTIVE = 0; + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/npc_poison_cloud2_cl.as b/scripts/angelscript/monsters/summon/npc_poison_cloud2_cl.as new file mode 100644 index 00000000..3f87bbea --- /dev/null +++ b/scripts/angelscript/monsters/summon/npc_poison_cloud2_cl.as @@ -0,0 +1,81 @@ +#pragma context server + +namespace MS +{ + +class NpcPoisonCloud2Cl : CGameScript +{ + string FX_COLOR; + string FX_ORIGIN; + int IS_ACTIVE; + + void client_activate() + { + FX_ORIGIN = param1; + FX_ORIGIN += "z"; + string FX_DURATION = param2; + string CLOUD_VARIANT = param3; + if (CLOUD_VARIANT == 1) + { + FX_COLOR = Vector3(0, 0, 0); + } + if (CLOUD_VARIANT == 2) + { + FX_COLOR = Vector3(128, 255, 0); + } + if (CLOUD_VARIANT == 3) + { + FX_COLOR = Vector3(255, 0, 0); + } + LogDebug("*** client_activate org FX_ORIGIN dur FX_DURATION type CLOUD_VARIANT"); + IS_ACTIVE = 1; + do_smokes(); + FX_DURATION("end_fx"); + } + + void do_smokes() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "do_smokes"); + for (int i = 0; i < 3; i++) + { + do_smokes_loop(); + } + } + + void do_smokes_loop() + { + string L_POS = FX_ORIGIN; + L_POS += "x"; + L_POS += "y"; + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + } + + void end_fx() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(3.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_smokes() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", FX_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/npc_poison_cloud_old.as b/scripts/angelscript/monsters/summon/npc_poison_cloud_old.as new file mode 100644 index 00000000..dce0e2ff --- /dev/null +++ b/scripts/angelscript/monsters/summon/npc_poison_cloud_old.as @@ -0,0 +1,187 @@ +#pragma context server + +namespace MS +{ + +class NpcPoisonCloudOld : CGameScript +{ + string DAMAGE_TYPE; + string EFFECT_SCRIPT; + int HEIGHT; + string MY_BASE_DAMAGE; + string MY_DURATION; + string MY_OWNER; + string MY_OWNER_RACE; + int PLAYING_DEAD; + int POISONING; + string POISON_SPRITE; + int SCAN_RANGE; + string SMOKE_SPRITE; + string SPAWN_SOUND; + int STORMING; + string TARG_LIST; + int WIDTH; + string smoke_ANGLE; + string smoke_POSITION; + + NpcPoisonCloudOld() + { + SMOKE_SPRITE = "poison_cloud.spr"; + SPAWN_SOUND = "ambience/steamburst1.wav"; + DAMAGE_TYPE = "poison"; + EFFECT_SCRIPT = "effects/dot_poison"; + Precache(SMOKE_SPRITE); + POISONING = 1; + HEIGHT = 40; + WIDTH = 96; + SCAN_RANGE = 128; + POISON_SPRITE = "poison_cloud.spr"; + HEIGHT = 40; + WIDTH = 96; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1); + if ((STORMING)) + { + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.25); + if ((STORMING)) + { + } + smokes_shoot(); + } + + void smokes_start() + { + STORMING = 1; + STORMING = 1; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_BASE_DAMAGE = param3; + MY_DURATION = param4; + MY_OWNER_RACE = GetEntityRace(param1); + SetRace(MY_OWNER_RACE); + MY_DURATION("poisoning_end"); + ScheduleDelayedEvent(2, "smokes_start"); + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), param2, MY_DURATION); + } + + void OnSpawn() override + { + PLAYING_DEAD = 1; + SetName("Poison Cloud"); + SetHealth(1); + SetFOV(359); + SetInvincible(true); + SetHeight(32); + SetWidth(32); + SetBloodType("none"); + SetModel("none"); + SetSolid("none"); + SetGravity(0); + SetFly(true); + SetNoPush(true); + SetAngles("face"); + POISONING = 1; + ScheduleDelayedEvent(0.5, "poisoning_go"); + ScheduleDelayedEvent(0.1, "spawn_sound"); + } + + void poisoning_go() + { + if (!(POISONING)) return; + ScheduleDelayedEvent(0.5, "poisoning_go"); + TARG_LIST = FindEntitiesInSphere("enemy", SCAN_RANGE); + if (!(TARG_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(TARG_LIST, ";"); i++) + { + affect_targets(); + } + } + + void affect_targets() + { + string CHECK_ENT = GetToken(TARG_LIST, i, ";"); + if ((OWNER_ISPLAYER)) + { + if ("game.pvp" == 0) + { + } + if ((IsValidPlayer(CHECK_ENT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CHECK_ENT, EFFECT_SCRIPT, 5.0, MY_OWNER, MY_BASE_DAMAGE); + } + + void poisoning_end() + { + ClientEvent("remove", "all", currentscript); + POISONING = 0; + STORMING = 0; + ScheduleDelayedEvent(0.1, "remove_final"); + } + + void remove_final() + { + DeleteEntity(GetOwner()); + } + + void client_activate() + { + smoke_POSITION = param1; + smoke_ANGLE = Vector3(0, param2, 0); + ScheduleDelayedEvent(2, "smokes_start"); + PARAM3("poison_end_cl"); + } + + void poison_end_cl() + { + STORMING = 0; + RemoveScript(); + } + + void smokes_shoot() + { + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + int x = RandomInt(NEGWIDTH, WIDTH); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(smoke_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += smoke_POSITION; + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + } + + void setup_smokes() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + + void spawn_sound() + { + EmitSound(GetOwner(), 0, SPAWN_SOUND, 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/npc_spore_cloud.as b/scripts/angelscript/monsters/summon/npc_spore_cloud.as new file mode 100644 index 00000000..c79a9470 --- /dev/null +++ b/scripts/angelscript/monsters/summon/npc_spore_cloud.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/summon/npc_poison_cloud.as" + +namespace MS +{ + +class NpcSporeCloud : CGameScript +{ + string CHECK_EFFECT; + string EFFECT_SCRIPT; + + NpcSporeCloud() + { + EFFECT_SCRIPT = "effects/poison_spore"; + CHECK_EFFECT = "DOT_gpoison"; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/npc_volcano.as b/scripts/angelscript/monsters/summon/npc_volcano.as new file mode 100644 index 00000000..134c88a9 --- /dev/null +++ b/scripts/angelscript/monsters/summon/npc_volcano.as @@ -0,0 +1,207 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class NpcVolcano : CGameScript +{ + string ANIM_DEATH; + string DMG_HIGH; + int ERUPTING; + int I_DO_FIRE_DAMAGE; + string LIGHT_COLOR; + float LIGHT_DURATION; + int LIGHT_RADIUS; + int LOOP_DELAY; + string MODEL_WORLD; + int ROCK_START_HEIGHT; + string SOUND_LOOP; + string SOUND_START; + string SPRITE_BURN; + string TIME_LIVE; + string VOLCANO_ID; + string local.cl.gravity; + string local.cl.origin; + string local.cl.velocity; + int xangle; + int yangle; + + NpcVolcano() + { + SOUND_START = "magic/volcano_start.wav"; + SOUND_LOOP = "magic/volcano_loop.wav"; + MODEL_WORLD = "misc/volcano.mdl"; + ANIM_DEATH = "down"; + I_DO_FIRE_DAMAGE = 1; + Precache("misc/volcano.mdl"); + Precache(SOUND_START); + Precache(SOUND_LOOP); + ROCK_START_HEIGHT = 66; + // TODO: UNCONVERTED: [client] repeatdelay 6 + EmitSound(GetOwner(), CHAN_BODY, SOUND_LOOP, 7); + MODEL_WORLD = "weapons/projectiles.mdl"; + SPRITE_BURN = "fire1_fixed.spr"; + LIGHT_RADIUS = 64; + LIGHT_COLOR = Vector3(255, 0, 0); + LIGHT_DURATION = 0.8; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.0, 0.5)); + if ((ERUPTING)) + { + } + volcano_shoot(); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(Random(0.0, 0.5)); + if ((ERUPTING)) + { + } + volcano_shoot(); + } + + void OnSpawn() override + { + SetHealth(1500); + SetInvincible(true); + SetSolid("none"); + SetFOV(90); + SetWidth(32); + SetHeight(64); + SetName("A Volcano"); + SetRoam(false); + SetDamageResistance("cold", 2.0); + SetDamageResistance("fire", 0.0); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetModel(MODEL_WORLD); + SetBloodType("none"); + SetStat("spellcasting", 15); + PlayAnim("hold", "up"); + ScheduleDelayedEvent(2, "volcano_start"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 50, 10, 6, 512); + EmitSound(GetOwner(), 0, SOUND_START, 7); + } + + void game_dynamically_created() + { + DMG_HIGH = param2; + TIME_LIVE = param3; + LOOP_DELAY = 0; + TIME_LIVE("volcano_death"); + ClientEvent("persist", "all", currentscript, GetEntityOrigin(GetOwner()), TIME_LIVE); + VOLCANO_ID = "game.script.last_sent_id"; + StoreEntity("ent_expowner"); + } + + void volcano_start() + { + ERUPTING = 1; + } + + void volcano_shoot() + { + xangle = RandomInt(50, 90); + yangle = RandomInt(-180, 180); + SetAngles("view"); + float ATTACK_DAMAGE = Random(DMG_LOW, DMG_HIGH); + TossProjectile("proj_volcano", /* TODO: $relpos */ $relpos(0, 0, ROCK_START_HEIGHT), 500, ATTACK_DAMAGE, 0, "none"); + ClientEvent("update", "all_in_sight", VOLCANO_ID, "volcono_shoot_rock", GetEntityVelocity("ent_lastprojectile"), GetEntityProperty("ent_lastprojectile", "gravity")); + } + + void volcano_death() + { + ERUPTING = 0; + PlayAnim("hold", "down"); + ScheduleDelayedEvent(3, "volcano_fadeout"); + } + + void volcano_fadeout() + { + EmitSound(GetOwner(), CHAN_BODY, SOUND_LOOP, "game.sound.silentvol"); + DeleteEntity(GetOwner(), true); // fade out + } + + void client_activate() + { + local.cl.origin = param1; + local.cl.origin += "z"; + string DIE_TIME = param2; + DIE_TIME += 10; + DIE_TIME("volcano_die"); + } + + void volcano_die() + { + EmitSound(GetOwner(), CHAN_BODY, SOUND_LOOP, "game.sound.silentvol"); + RemoveScript(); + } + + void volcono_shoot_rock() + { + local.cl.velocity = param1; + local.cl.gravity = param2; + ClientEffect("tempent", "model", MODEL_WORLD, local.cl.origin, "volcano_rock_create", "volcano_rock_update", "volcano_rock_collide"); + for (int i = 0; i < 4; i++) + { + makefire_loop(local.cl.origin); + } + } + + void volcano_rock_create() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10); + ClientEffect("tempent", "set_current_prop", "velocity", local.cl.velocity); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "gravity", local.cl.gravity); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + ClientEffect("tempent", "set_current_prop", "renderfx", "glow"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("light", "new", "game.tempent.origin", LIGHT_RADIUS, LIGHT_COLOR, LIGHT_DURATION); + ClientEffect("tempent", "set_current_prop", "iuser1", "game.script.last_light_id"); + } + + void volcano_rock_update() + { + ClientEffect("light", "game.tempent.iuser1", "game.tempent.origin", LIGHT_RADIUS, LIGHT_COLOR, LIGHT_DURATION); + } + + void volcano_rock_collide() + { + ClientEffect("tempent", "set_current_prop", "sprite", SPRITE_BURN); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "death_delay", 1); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + } + + void makefire_loop() + { + ClientEffect("tempent", "sprite", SPRITE_BURN, param1, "volcano_fire_create"); + } + + void volcano_fire_create() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-200, 200), Random(-200, 200), Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.6, 1.0)); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/poison_burst.as b/scripts/angelscript/monsters/summon/poison_burst.as new file mode 100644 index 00000000..99e4364c --- /dev/null +++ b/scripts/angelscript/monsters/summon/poison_burst.as @@ -0,0 +1,96 @@ +#pragma context server + +namespace MS +{ + +class PoisonBurst : CGameScript +{ + string BURST_SCRIPT_IDX; + string MY_BASE_DAMAGE; + string MY_DOT; + string MY_OWNER; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string SCAN_RANGE; + string TARG_LIST; + string THROW_TARGETS; + + void game_dynamically_created() + { + MY_OWNER = param1; + OWNER_ISPLAYER = IsValidPlayer(param1); + SCAN_RANGE = param2; + if (param3 != "PARAM3") + { + THROW_TARGETS = param3; + } + MY_BASE_DAMAGE = param4; + MY_DOT = param5; + SetAngles("face"); + SetRace(GetEntityRace(MY_OWNER)); + ClientEvent("new", "all_in_sight", "monsters/summon/poison_burst_cl", GetEntityOrigin(GetOwner()), SCAN_RANGE); + BURST_SCRIPT_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.1, "do_aoe"); + ScheduleDelayedEvent(0.25, "set_targets"); + ScheduleDelayedEvent(3.0, "effect_die"); + } + + void do_aoe() + { + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), SCAN_RANGE, MY_BASE_DAMAGE, 0, MY_OWNER, MY_OWNER, "spellcasting.affliction", "poison"); + } + + void OnSpawn() override + { + SetFly(true); + SetGravity(0); + SetNoPush(true); + SetInvincible(true); + PLAYING_DEAD = 1; + } + + void effect_die() + { + ClientEvent("remove", "all", BURST_SCRIPT_IDX); + DeleteEntity(GetOwner()); + } + + void set_targets() + { + EmitSound(GetOwner(), 0, "ambience/steamburst1.wav", 10); + TARG_LIST = FindEntitiesInSphere("enemy", SCAN_RANGE); + if (!(TARG_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(TARG_LIST, ";"); i++) + { + affect_targets(); + } + } + + void affect_targets() + { + string CHECK_ENT = GetToken(TARG_LIST, i, ";"); + if ((OWNER_ISPLAYER)) + { + if ("game.pvp" == 0) + { + } + if ((IsValidPlayer(CHECK_ENT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityProperty(CHECK_ENT, "haseffect"))) + { + ApplyEffect(CHECK_ENT, "effects/dot_poison", 5.0, MY_OWNER, MY_DOT); + } + if (!(THROW_TARGETS)) return; + string TARGET_ORG = GetEntityOrigin(CHECK_ENT); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CHECK_ENT, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/poison_burst_cl.as b/scripts/angelscript/monsters/summon/poison_burst_cl.as new file mode 100644 index 00000000..04a54cb2 --- /dev/null +++ b/scripts/angelscript/monsters/summon/poison_burst_cl.as @@ -0,0 +1,67 @@ +#pragma context client + +namespace MS +{ + +class PoisonBurstCl : CGameScript +{ + string CL_RADIUS; + int CYCLE_ANGLE; + string OWNER_POS; + + void client_activate() + { + const string FIRE_SPRITE = "poison_cloud.spr"; + const int TOTAL_OFS = 10; + CYCLE_ANGLE = 0; + OWNER_POS = param1; + CL_RADIUS = param2; + for (int i = 0; i < 17; i++) + { + create_flames(); + } + ScheduleDelayedEvent(2.9, "remove_me_cl"); + } + + void remove_me_cl() + { + RemoveScript(); + } + + void create_flames() + { + string FLAME_POS = OWNER_POS; + FLAME_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, 0)); + ClientEffect("tempent", "sprite", FIRE_SPRITE, FLAME_POS, "setup_flame"); + CYCLE_ANGLE += 20; + } + + void setup_flame() + { + float FADE_DEL = 1.0; + if (CL_RADIUS > 128) + { + float FADE_DEL = 2.0; + } + int SPRITE_SPEED = 100; + if (CL_RADIUS > 128) + { + int SPRITE_SPEED = 400; + } + ClientEffect("tempent", "set_current_prop", "death_delay", FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/poison_cloud.as b/scripts/angelscript/monsters/summon/poison_cloud.as new file mode 100644 index 00000000..1b504eb5 --- /dev/null +++ b/scripts/angelscript/monsters/summon/poison_cloud.as @@ -0,0 +1,233 @@ +#pragma context server + +namespace MS +{ + +class PoisonCloud : CGameScript +{ + int HEIGHT; + int IN_POISON_LOOP; + int LOOP_COUNT; + string MY_BASE_DAMAGE; + string MY_DURATION; + string MY_OWNER; + string MY_OWNER_RACE; + string MY_SKILL; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + int POISONING; + string POISON_SPRITE; + string SMOKE_SPRITE; + int STORMING; + int WIDTH; + string smoke_ANGLE; + string smoke_POSITION; + + PoisonCloud() + { + SMOKE_SPRITE = "poison_cloud.spr"; + Precache(SMOKE_SPRITE); + POISONING = 1; + HEIGHT = 40; + WIDTH = 96; + POISON_SPRITE = "poison_cloud.spr"; + HEIGHT = 40; + WIDTH = 96; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1); + if ((STORMING)) + { + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(0.25); + if ((STORMING)) + { + } + smokes_shoot(); + } + + void smokes_start() + { + STORMING = 1; + STORMING = 1; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_BASE_DAMAGE = param3; + MY_DURATION = param4; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + MY_OWNER_RACE = GetEntityRace(param1); + string MY_SKILL = param5; + if ((MY_SKILL).findFirst("PARAM") == 0) + { + MY_SKILL = "spellcasting.affliction"; + } + MY_DURATION("poisoning_end"); + ScheduleDelayedEvent(2, "smokes_start"); + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), param2, MY_DURATION); + StoreEntity("ent_expowner"); + } + + void OnSpawn() override + { + PLAYING_DEAD = 1; + SetName("Poison Cloud"); + SetHealth(1); + SetInvincible(true); + SetRace("beloved"); + SetHeight(32); + SetWidth(32); + SetBloodType("none"); + SetModel("none"); + SetSolid("none"); + SetAngles("face"); + POISONING = 1; + ScheduleDelayedEvent(0.5, "poisoning_go"); + } + + void poisoning_go() + { + if (!(POISONING)) return; + ScheduleDelayedEvent(1.0, "poisoning_go"); + // TODO: getents any 256 + if (!(getCount > 0)) return; + if ((IN_POISON_LOOP)) return; + IN_POISON_LOOP = 1; + LOOP_COUNT = 0; + poison_area(); + } + + void poison_area() + { + if (!(POISONING)) return; + ScheduleDelayedEvent(0.1, "poison_area"); + LOOP_COUNT += 1; + if (LOOP_COUNT > 9) + { + LOOP_COUNT = 1; + } + if (LOOP_COUNT == 1) + { + string CHECK_ENT = getEnt1; + } + if (LOOP_COUNT == 2) + { + string CHECK_ENT = getEnt2; + } + if (LOOP_COUNT == 3) + { + string CHECK_ENT = getEnt3; + } + if (LOOP_COUNT == 4) + { + string CHECK_ENT = getEnt4; + } + if (LOOP_COUNT == 5) + { + string CHECK_ENT = getEnt5; + } + if (LOOP_COUNT == 6) + { + string CHECK_ENT = getEnt6; + } + if (LOOP_COUNT == 7) + { + string CHECK_ENT = getEnt7; + } + if (LOOP_COUNT == 8) + { + string CHECK_ENT = getEnt8; + } + if (LOOP_COUNT == 9) + { + string CHECK_ENT = getEnt9; + } + if (!(IsEntityAlive(CHECK_ENT))) return; + if (!(GetEntityRange(CHECK_ENT) < 256)) return; + if (!(GetRelationship(CHECK_ENT) == "enemy")) return; + if ("game.pvp" == 0) + { + if ((OWNER_ISPLAYER)) + { + } + if ((IsValidPlayer(CHECK_ENT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = GetEntityOrigin(CHECK_ENT); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + if ((GetEntityProperty(CHECK_ENT, "haseffect"))) return; + ApplyEffect(CHECK_ENT, "effects/dot_poison", 2.5, MY_OWNER, MY_BASE_DAMAGE); + } + + void poisoning_end() + { + ClientEvent("remove", "all", currentscript); + POISONING = 0; + STORMING = 0; + ScheduleDelayedEvent(0.1, "remove_final"); + } + + void remove_final() + { + RemoveScript(); + ClientEvent("remove", "all", currentscript); + DeleteEntity(GetOwner()); + } + + void client_activate() + { + smoke_POSITION = param1; + smoke_ANGLE = Vector3(0, param2, 0); + ScheduleDelayedEvent(2, "smokes_start"); + string CL_TIME_LIVE = param3; + CL_TIME_LIVE -= 0.5; + CL_TIME_LIVE("poison_end_cl"); + } + + void poison_end_cl() + { + STORMING = 0; + RemoveScript(); + } + + void smokes_shoot() + { + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + int x = RandomInt(NEGWIDTH, WIDTH); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(smoke_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += smoke_POSITION; + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + } + + void setup_smokes() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/poison_cloud2.as b/scripts/angelscript/monsters/summon/poison_cloud2.as new file mode 100644 index 00000000..1f98ad04 --- /dev/null +++ b/scripts/angelscript/monsters/summon/poison_cloud2.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "monsters/summon/base_aoe2.as" + +namespace MS +{ + +class PoisonCloud2 : CGameScript +{ + string ACTIVE_SKILL; + int AOE_AFFECTS_WARY; + string AOE_DURATION; + string AOE_OWNER; + string AOE_RADIUS; + string AOE_SCAN_TYPE; + string DMG_BASE; + string SOUND_SPAWN; + + PoisonCloud2() + { + AOE_SCAN_TYPE = "rsphere"; + SOUND_SPAWN = "ambience/steamburst1.wav"; + } + + void game_precache() + { + Precache("poison_cloud.spr"); + Precache(SOUND_SPAWN); + } + + void game_dynamically_created() + { + AOE_OWNER = param1; + AOE_RADIUS = param2; + DMG_BASE = param3; + AOE_DURATION = param4; + ACTIVE_SKILL = param5; + AOE_AFFECTS_WARY = 1; + if ((ACTIVE_SKILL).findFirst(PARAM) == 0) + { + ACTIVE_SKILL = "spellcasting.affliction"; + } + ClientEvent("new", "all", "effects/sfx_cloud", GetEntityOrigin(GetOwner()), AOE_DURATION, AOE_RADIUS, Vector3(0, 255, 0), "poison_cloud.spr"); + } + + void aoe_end() + { + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void aoe_affect_target() + { + ApplyEffect(param1, "effects/dot_poison", 15.0, AOE_OWNER, DMG_BASE, ACTIVE_SKILL); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/preset_volcano.as b/scripts/angelscript/monsters/summon/preset_volcano.as new file mode 100644 index 00000000..29d8366e --- /dev/null +++ b/scripts/angelscript/monsters/summon/preset_volcano.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "monsters/summon/summon_volcano.as" + +namespace MS +{ + +class PresetVolcano : CGameScript +{ + int AOE_DMG; + int FIXED_VOLCANO; + string VOLCANO_EXT_EVENT; + + PresetVolcano() + { + VOLCANO_EXT_EVENT = "ext_volcano_hit"; + AOE_DMG = 25; + FIXED_VOLCANO = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/rat.as b/scripts/angelscript/monsters/summon/rat.as new file mode 100644 index 00000000..2ec7e5d3 --- /dev/null +++ b/scripts/angelscript/monsters/summon/rat.as @@ -0,0 +1,178 @@ +#pragma context server + +#include "monsters/summon/base_summon.as" + +namespace MS +{ + +class Rat : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_RUN_BASE; + string ANIM_WALK; + string ANIM_WALK_BASE; + string ATK_MIN; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int I_R_PET; + int MOVE_RANGE; + string RAT_HP; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SUMMON_CIRCLE_INDEX; + string SUM_REPORT_SUFFIX; + string SUM_SAY_ATTACK; + string SUM_SAY_COME; + string SUM_SAY_DEATH; + string SUM_SAY_DEFEND; + string SUM_SAY_GUARD; + string SUM_SAY_HUNT; + string TRICK_ANIM; + + Rat() + { + I_R_PET = 1; + SUMMON_CIRCLE_INDEX = 12; + SUM_SAY_COME = "*squeek!*"; + SUM_SAY_ATTACK = "*squeek!* *squeek!*"; + SUM_SAY_HUNT = "*squeek...*"; + SUM_SAY_DEFEND = "*squeekie!*"; + SUM_SAY_DEATH = "*SQUEEK!*"; + SUM_SAY_GUARD = "*squeek!*"; + SUM_REPORT_SUFFIX = "..er, I mean, *squeek*!?"; + ANIM_WALK_BASE = "walk"; + ANIM_RUN_BASE = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK_BASE = "walk"; + ANIM_RUN_BASE = "run"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + MOVE_RANGE = 20; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 100; + ATTACK_HITCHANCE = 0.9; + TRICK_ANIM = "idle2"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod1.wav"; + SOUND_PAIN = "monsters/rat/squeak1.wav"; + SOUND_ATTACK1 = "monsters/rat/squeak2.wav"; + SOUND_IDLE1 = "monsters/rat/squeak2.wav"; + SOUND_DEATH = "monsters/rat/squeak3.wav"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + CAN_HUNT = 1; + CAN_HEAR = 0; + CAN_FLINCH = 0; + } + + void summon_spawn() + { + SetName("Rat"); + SetFOV(359); + SetWidth(32); + SetHeight(20); + SetRoam(true); + SetHearingSensitivity(3); + SetSkillLevel(0); + SetRace("human"); + SetModel("monsters/rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + basesummon_attackall(); + CatchSpeech("rat_standup", "stand"); + CatchSpeech("rat_rollover", "rollover"); + CatchSpeech("rat_playdead", "play dead"); + } + + void summon_summoned() + { + string TIME_LIVE = param2; + TIME_LIVE++; + ATK_MIN = param3; + RAT_HP = param2; + RAT_HP /= 2; + SetHealth(RAT_HP); + ScheduleDelayedEvent(TIME_LIVE, "killme"); + } + + void bite1() + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1 + array sounds = {SOUND_ATTACK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + XDoDamage(m_hLastSeen, ATTACK_HITRANGE, ATK_MIN, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bite"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void rat_standup() + { + if (!(GetEntityIndex("ent_lastspoke") == SUMMON_MASTER)) return; + npcatk_suspend_ai(3.0); + SetSayTextRange(1024); + SayText("*squeek!* :D"); + SetVolume(10); + EmitSound(GetOwner(), SOUND_IDLE1); + SetAngles("face"); + PlayAnim("hold", TRICK_ANIM); + } + + void rat_rollover() + { + if (!(GetEntityIndex("ent_lastspoke") == SUMMON_MASTER)) return; + npcatk_suspend_ai(3.0); + SetSayTextRange(1024); + SayText("*squeek?*"); + SetAngles("face"); + SetVolume(10); + EmitSound(GetOwner(), SOUND_IDLE1); + PlayAnim("once", TRICK_ANIM); + } + + void rat_playdead() + { + if (!(GetEntityIndex("ent_lastspoke") == SUMMON_MASTER)) return; + npcatk_suspend_ai(); + SetSayTextRange(1024); + SayText("*SQUEEK!*"); + SetVolume(10); + EmitSound(GetOwner(), SOUND_DEATH); + SetAngles("face"); + PlayAnim("hold", ANIM_DEATH); + ScheduleDelayedEvent(3, "stop_playing_dead"); + } + + void stop_playing_dead() + { + npcatk_resume_ai(); + PlayAnim("once", "run"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/rock.as b/scripts/angelscript/monsters/summon/rock.as new file mode 100644 index 00000000..826f772f --- /dev/null +++ b/scripts/angelscript/monsters/summon/rock.as @@ -0,0 +1,78 @@ +#pragma context server + +namespace MS +{ + +class Rock : CGameScript +{ + string FIRE_ROCK; + string ROCK_OWNER; + int ROCK_SPEED; + + Rock() + { + ROCK_SPEED = 1000; + } + + void OnSpawn() override + { + SetSolid("none"); + SetModel("weapons/projectiles.mdl"); + if (!(FIRE_ROCK)) + { + SetModelBody(0, 5); + } + else + { + SetModelBody(0, 67); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 64, -1, -1); + } + SetFly(true); + SetGravity(0); + SetMoveSpeed(0); + SetRoam(false); + SetInvincible(true); + } + + void game_dynamically_created() + { + SetRace(GetEntityRace(param1)); + if (!(IsValidPlayer(param1))) + { + StoreEntity("ent_expowner"); + } + ROCK_OWNER = param1; + if (param2 == 1) + { + SetModelBody(0, 67); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 64, -1, -1); + FIRE_ROCK = 1; + } + } + + void toss_rock() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + string ROCK_TARG = param1; + string ROCK_DAMAGE = param2; + if (!(FIRE_ROCK)) + { + TossProjectile("proj_troll_rock", "view", ROCK_TARG, ROCK_SPEED, ROCK_DAMAGE, 0.75, "none"); + } + else + { + TossProjectile("proj_lava_rock", "view", ROCK_TARG, ROCK_SPEED, ROCK_DAMAGE, 0.75, "none"); + } + CallExternal("ent_lastprojectile", "ext_lighten", 0); + ScheduleDelayedEvent(1.5, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/rock_storm.as b/scripts/angelscript/monsters/summon/rock_storm.as new file mode 100644 index 00000000..3d065cb0 --- /dev/null +++ b/scripts/angelscript/monsters/summon/rock_storm.as @@ -0,0 +1,496 @@ +#pragma context server + +namespace MS +{ + +class RockStorm : CGameScript +{ + string CURRENT_TARGET; + float DUR_SPIN; + int FIRE_ROCK; + string MY_BASE_DAMAGE; + string MY_DISTANCE; + string MY_JUMP_SIZE; + string MY_OWNER; + string MY_OWNER_POS; + string MY_OWNER_RACE; + string MY_VERTICAL; + string NUMBER_ROCKS; + string OWNER_GROUND; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + int RAISE_COUNT; + int RAISE_MAX; + string ROCKA_ID; + int ROCKA_OFS; + string ROCKA_START; + string ROCKB_ID; + int ROCKB_OFS; + string ROCKB_START; + string ROCKC_ID; + int ROCKC_OFS; + string ROCKC_START; + string ROCKD_ID; + int ROCKD_OFS; + string ROCKD_START; + string ROCKS_CENTER; + string ROCKS_CV; + string ROCKS_THROWN; + string ROCK_SCRIPT; + string ROCK_TARGETS; + string ROT_ADJ; + string SOUND_LEVITATE; + string SOUND_SPIN; + string SOUND_SUMMON; + string SPIN_COUNT; + + RockStorm() + { + ROCK_SCRIPT = "monsters/summon/rock"; + SOUND_LEVITATE = "fans/fan4on.wav"; + SOUND_SPIN = "magic/fan4_noloop.wav"; + DUR_SPIN = 1.74; + SOUND_SUMMON = "magic/volcano_start.wav"; + ROCKA_OFS = 0; + ROCKB_OFS = 90; + ROCKC_OFS = 180; + ROCKD_OFS = 270; + RAISE_MAX = 20; + } + + void OnSpawn() override + { + SetModel("null.mdl"); + SetInvincible(true); + SetNoPush(true); + SetWidth(1); + SetHeight(1); + SetSolid("none"); + PLAYING_DEAD = 1; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_OWNER_POS = GetEntityOrigin(MY_OWNER); + MY_OWNER_RACE = GetEntityRace(MY_OWNER); + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + NUMBER_ROCKS = param2; + OWNER_GROUND = /* TODO: $get_ground_height */ $get_ground_height(MY_OWNER_POS); + MY_BASE_DAMAGE = param3; + MY_DISTANCE = param4; + FIRE_ROCK = 0; + if (param6 != "PARAM6") + { + FIRE_ROCK = 1; + } + LogDebug("game_dynamically_created owner GetEntityName(param1) org MY_OWNER_POS race MY_OWNER_RACE #rcks NUMBER_ROCKS dmg MY_BASE_DAMAGE dist MY_DISTANCE vert PARAM5 fire FIRE_ROCK"); + SetRace(MY_OWNER_RACE); + string OWNER_X = (MY_OWNER_POS).x; + string OWNER_Y = (MY_OWNER_POS).y; + string OWNER_Z = (MY_OWNER_POS).z; + MY_VERTICAL = OWNER_GROUND; + MY_VERTICAL += param5; + Vector3 TRACE_END = Vector3(OWNER_X, OWNER_Y, MY_VERTICAL); + string TRACE_VERT = TraceLine(MY_OWNER_POS, TRACE_END); + if (Distance(TRACE_VERT, TRACE_END) > 0) + { + MY_VERTICAL = (TRACE_VERT).z; + Vector3 TRACE_END = Vector3(OWNER_X, OWNER_Y, MY_VERTICAL); + } + Vector3 MY_OWNER_GPOS = Vector3(OWNER_X, OWNER_Y, OWNER_GROUND); + float DIST_TO_HOVER = Distance(MY_OWNER_GPOS, TRACE_END); + MY_JUMP_SIZE = DIST_TO_HOVER; + MY_JUMP_SIZE /= 20; + ROCKS_CENTER = MY_OWNER_GPOS; + ScheduleDelayedEvent(0.1, "rocks_begin"); + } + + void rocks_begin() + { + if (NUMBER_ROCKS >= 1) + { + ROCKA_START = ROCKS_CENTER; + ROCKA_START += /* TODO: $relpos */ $relpos(Vector3(0, ROCKA_OFS, 0), Vector3(0, MY_DISTANCE, 0)); + SpawnNPC(ROCK_SCRIPT, ROCKA_START, ScriptMode::Legacy); // params: MY_OWNER, FIRE_ROCK + ROCKA_ID = GetEntityIndex(m_hLastCreated); + } + if (NUMBER_ROCKS >= 2) + { + ScheduleDelayedEvent(0.1, "setup_rockb"); + } + if (NUMBER_ROCKS >= 3) + { + ScheduleDelayedEvent(0.2, "setup_rockc"); + } + if (NUMBER_ROCKS >= 4) + { + ScheduleDelayedEvent(0.25, "setup_rockd"); + } + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 255, 20, 3.0, 256); + ScheduleDelayedEvent(0.2, "levitate_noise"); + RAISE_COUNT = 0; + ScheduleDelayedEvent(0.3, "rocks_raise"); + } + + void setup_rockb() + { + ROCKB_START = ROCKS_CENTER; + ROCKB_START += /* TODO: $relpos */ $relpos(Vector3(0, ROCKB_OFS, 0), Vector3(0, MY_DISTANCE, 0)); + SpawnNPC(ROCK_SCRIPT, ROCKB_START, ScriptMode::Legacy); // params: MY_OWNER, FIRE_ROCK + ROCKB_ID = GetEntityIndex(m_hLastCreated); + } + + void setup_rockc() + { + ROCKC_START = ROCKS_CENTER; + ROCKC_START += /* TODO: $relpos */ $relpos(Vector3(0, ROCKC_OFS, 0), Vector3(0, MY_DISTANCE, 0)); + SpawnNPC(ROCK_SCRIPT, ROCKC_START, ScriptMode::Legacy); // params: MY_OWNER, FIRE_ROCK + ROCKC_ID = GetEntityIndex(m_hLastCreated); + } + + void setup_rockd() + { + ROCKD_START = ROCKS_CENTER; + ROCKD_START += /* TODO: $relpos */ $relpos(Vector3(0, ROCKD_OFS, 0), Vector3(0, MY_DISTANCE, 0)); + SpawnNPC(ROCK_SCRIPT, ROCKD_START, ScriptMode::Legacy); // params: MY_OWNER, FIRE_ROCK + ROCKD_ID = GetEntityIndex(m_hLastCreated); + } + + void levitate_noise() + { + EmitSound(GetOwner(), 0, SOUND_LEVITATE, 10); + } + + void rocks_raise() + { + RAISE_COUNT += 1; + if (RAISE_COUNT == RAISE_MAX) + { + SPIN_COUNT = ROT_ADJ; + ROCKS_THROWN = 0; + rocks_spin(); + spin_noise(); + CURRENT_TARGET = "unset"; + if (NUMBER_ROCKS >= 1) + { + ScheduleDelayedEvent(4.5, "find_targets"); + } + if (NUMBER_ROCKS >= 1) + { + ScheduleDelayedEvent(5.0, "rocka_throw"); + } + CURRENT_TARGET = "unset"; + if (NUMBER_ROCKS >= 2) + { + ScheduleDelayedEvent(5.5, "find_targets"); + } + if (NUMBER_ROCKS >= 2) + { + ScheduleDelayedEvent(6.0, "rockb_throw"); + } + CURRENT_TARGET = "unset"; + if (NUMBER_ROCKS >= 3) + { + ScheduleDelayedEvent(6.5, "find_targets"); + } + if (NUMBER_ROCKS >= 3) + { + ScheduleDelayedEvent(7.0, "rockc_throw"); + } + CURRENT_TARGET = "unset"; + if (NUMBER_ROCKS >= 4) + { + ScheduleDelayedEvent(7.5, "find_targets"); + } + if (NUMBER_ROCKS >= 4) + { + ScheduleDelayedEvent(8.0, "rockd_throw"); + } + ScheduleDelayedEvent(9.5, "find_targets"); + ScheduleDelayedEvent(10.0, "force_all_rock_throw"); + } + if (!(RAISE_COUNT < RAISE_MAX)) return; + ScheduleDelayedEvent(0.1, "rocks_raise"); + ROT_ADJ = RAISE_COUNT; + ROT_ADJ *= 10; + ROCKS_CV = RAISE_COUNT; + ROCKS_CV *= MY_JUMP_SIZE; + if (NUMBER_ROCKS >= 1) + { + string ROCKA_POS = ROCKS_CENTER; + string ANG_ADJ = ROCKA_OFS; + ANG_ADJ += ROT_ADJ; + if (ANG_ADJ > 359) + { + ANG_ADJ -= 359; + } + ROCKA_POS += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, MY_DISTANCE, ROCKS_CV)); + SetEntityOrigin(ROCKA_ID, ROCKA_POS); + } + if (NUMBER_ROCKS >= 2) + { + string ROCKB_POS = ROCKS_CENTER; + string ANG_ADJ = ROCKB_OFS; + ANG_ADJ += ROT_ADJ; + if (ANG_ADJ > 359) + { + ANG_ADJ -= 359; + } + ROCKB_POS += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, MY_DISTANCE, ROCKS_CV)); + SetEntityOrigin(ROCKB_ID, ROCKB_POS); + } + if (NUMBER_ROCKS >= 3) + { + string ROCKC_POS = ROCKS_CENTER; + string ANG_ADJ = ROCKC_OFS; + ANG_ADJ += ROT_ADJ; + if (ANG_ADJ > 359) + { + ANG_ADJ -= 359; + } + ROCKC_POS += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, MY_DISTANCE, ROCKS_CV)); + SetEntityOrigin(ROCKC_ID, ROCKC_POS); + } + if (NUMBER_ROCKS >= 4) + { + string ROCKD_POS = ROCKS_CENTER; + string ANG_ADJ = ROCKD_OFS; + ANG_ADJ += ROT_ADJ; + if (ANG_ADJ > 359) + { + ANG_ADJ -= 359; + } + ROCKD_POS += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, MY_DISTANCE, ROCKS_CV)); + SetEntityOrigin(ROCKD_ID, ROCKD_POS); + } + } + + void spin_noise() + { + EmitSound(GetOwner(), 0, SOUND_SPIN, 10); + if (!(ROCKS_THROWN < NUMBER_ROCKS)) return; + DUR_SPIN("spin_noise"); + } + + void rocks_spin() + { + SPIN_COUNT += 10; + if (SPIN_COUNT > 359) + { + SPIN_COUNT = 0; + } + if (ROCKS_THROWN == NUMBER_ROCKS) + { + remove_me(); + } + if (!(ROCKS_THROWN < NUMBER_ROCKS)) return; + ScheduleDelayedEvent(0.1, "rocks_spin"); + if (((ROCKA_ID !is null))) + { + string ROCKA_POS = ROCKS_CENTER; + string ANG_ADJ = ROCKA_OFS; + ANG_ADJ += SPIN_COUNT; + if (ANG_ADJ > 359) + { + ANG_ADJ -= 359; + } + ROCKA_POS += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, MY_DISTANCE, ROCKS_CV)); + SetEntityOrigin(ROCKA_ID, ROCKA_POS); + } + if (((ROCKB_ID !is null))) + { + string ROCKB_POS = ROCKS_CENTER; + string ANG_ADJ = ROCKB_OFS; + ANG_ADJ += SPIN_COUNT; + if (ANG_ADJ > 359) + { + ANG_ADJ -= 359; + } + ROCKB_POS += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, MY_DISTANCE, ROCKS_CV)); + SetEntityOrigin(ROCKB_ID, ROCKB_POS); + } + if (((ROCKC_ID !is null))) + { + string ROCKC_POS = ROCKS_CENTER; + string ANG_ADJ = ROCKC_OFS; + ANG_ADJ += SPIN_COUNT; + if (ANG_ADJ > 359) + { + ANG_ADJ -= 359; + } + ROCKC_POS += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, MY_DISTANCE, ROCKS_CV)); + SetEntityOrigin(ROCKC_ID, ROCKC_POS); + } + if (((ROCKD_ID !is null))) + { + string ROCKD_POS = ROCKS_CENTER; + string ANG_ADJ = ROCKD_OFS; + ANG_ADJ += SPIN_COUNT; + if (ANG_ADJ > 359) + { + ANG_ADJ -= 359; + } + ROCKD_POS += /* TODO: $relpos */ $relpos(Vector3(0, ANG_ADJ, 0), Vector3(0, MY_DISTANCE, ROCKS_CV)); + SetEntityOrigin(ROCKD_ID, ROCKD_POS); + } + } + + void find_targets() + { + if ((IsEntityAlive(CURRENT_TARGET))) return; + CURRENT_TARGET = "unset"; + ROCK_TARGETS = FindEntitiesInSphere("enemy", 1024); + ScrambleTokens(ROCK_TARGETS, ";"); + for (int i = 0; i < GetTokenCount(ROCK_TARGETS, ";"); i++) + { + pick_target(); + } + } + + void pick_target() + { + string CUR_ENT = GetToken(ROCK_TARGETS, i, ";"); + if (!(IsEntityAlive(CUR_ENT))) return; + if (!(GetRelationship(CUR_ENT) == "enemy")) return; + CURRENT_TARGET = CUR_ENT; + LogDebug("Selected_Target GetEntityName(CURRENT_TARGET)"); + } + + void rocka_throw() + { + CURRENT_TARGET = "unset"; + find_targets(); + check_targ(); + string TARGET_POS = GetEntityOrigin(CURRENT_TARGET); + string ROCKA_POS = GetEntityOrigin(ROCKA_ID); + string TRACE_FIRE = TraceLine(ROCKA_POS, TARGET_POS); + if (TRACE_FIRE != TARGET_POS) + { + ScheduleDelayedEvent(0.5, "rocka_throw"); + } + else + { + ROCKS_THROWN += 1; + CallExternal(ROCKA_ID, "toss_rock", CURRENT_TARGET, MY_BASE_DAMAGE); + } + } + + void rockb_throw() + { + CURRENT_TARGET = "unset"; + find_targets(); + check_targ(); + string TARGET_POS = GetEntityOrigin(CURRENT_TARGET); + string ROCKB_POS = GetEntityOrigin(ROCKB_ID); + string TRACE_FIRE = TraceLine(ROCKB_POS, TARGET_POS); + if (TRACE_FIRE != TARGET_POS) + { + CURRENT_TARGET = "unset"; + find_targets(); + ScheduleDelayedEvent(0.5, "rockb_throw"); + } + else + { + ROCKS_THROWN += 1; + CallExternal(ROCKB_ID, "toss_rock", CURRENT_TARGET, MY_BASE_DAMAGE); + } + } + + void rockc_throw() + { + CURRENT_TARGET = "unset"; + find_targets(); + check_targ(); + string TARGET_POS = GetEntityOrigin(CURRENT_TARGET); + string ROCKC_POS = GetEntityOrigin(ROCKC_ID); + string TRACE_FIRE = TraceLine(ROCKC_POS, TARGET_POS); + if (TRACE_FIRE != TARGET_POS) + { + CURRENT_TARGET = "unset"; + find_targets(); + ScheduleDelayedEvent(0.5, "rockc_throw"); + } + else + { + ROCKS_THROWN += 1; + CallExternal(ROCKC_ID, "toss_rock", CURRENT_TARGET, MY_BASE_DAMAGE); + } + } + + void rockd_throw() + { + CURRENT_TARGET = "unset"; + find_targets(); + check_targ(); + string TARGET_POS = GetEntityOrigin(CURRENT_TARGET); + string ROCKD_POS = GetEntityOrigin(ROCKD_ID); + string TRACE_FIRE = TraceLine(ROCKD_POS, TARGET_POS); + if (TRACE_FIRE != TARGET_POS) + { + CURRENT_TARGET = "unset"; + find_targets(); + ScheduleDelayedEvent(0.5, "rockd_throw"); + } + else + { + ROCKS_THROWN += 1; + CallExternal(ROCKD_ID, "toss_rock", CURRENT_TARGET, MY_BASE_DAMAGE); + } + } + + void force_all_rock_throw() + { + check_targ(); + if (((ROCKA_ID !is null))) + { + CallExternal(ROCKA_ID, "toss_rock", CURRENT_TARGET, MY_BASE_DAMAGE); + } + if (((ROCKB_ID !is null))) + { + CallExternal(ROCKB_ID, "toss_rock", CURRENT_TARGET, MY_BASE_DAMAGE); + } + if (((ROCKC_ID !is null))) + { + CallExternal(ROCKC_ID, "toss_rock", CURRENT_TARGET, MY_BASE_DAMAGE); + } + if (((ROCKD_ID !is null))) + { + CallExternal(ROCKD_ID, "toss_rock", CURRENT_TARGET, MY_BASE_DAMAGE); + } + ROCKS_THROWN = NUMBER_ROCKS; + } + + void remove_me() + { + CallExternal(MY_OWNER, "ext_rock_storm_end"); + ScheduleDelayedEvent(0.1, "remove_me2"); + } + + void remove_me2() + { + DeleteEntity(GetOwner()); + } + + void check_targ() + { + if ((IsEntityAlive(CURRENT_TARGET))) return; + LogDebug("rock_storm check_targ GetEntityName(CURRENT_TARGET) is invalid , using alternate"); + if ((OWNER_ISPLAYER)) + { + CURRENT_TARGET = GetEntityProperty(MY_OWNER, "target"); + } + if (!(OWNER_ISPLAYER)) + { + CURRENT_TARGET = GetEntityProperty(MY_OWNER, "scriptvar"); + } + if (!(IsEntityAlive(CURRENT_TARGET))) + { + CURRENT_TARGET = GetEntityProperty(MY_OWNER, "scriptvar"); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/seal_maker.as b/scripts/angelscript/monsters/summon/seal_maker.as new file mode 100644 index 00000000..fd099716 --- /dev/null +++ b/scripts/angelscript/monsters/summon/seal_maker.as @@ -0,0 +1,73 @@ +#pragma context server + +namespace MS +{ + +class SealMaker : CGameScript +{ + int PLAYING_DEAD; + string SEAL_MODEL; + int SEAL_RUNNING; + + void game_dynamically_created() + { + SEAL_MODEL = param1; + SetModel(param1); + SetModelBody(0, param3); + PARAM2("make_go_bye_bye"); + } + + void OnSpawn() override + { + SetName("Magic Seal"); + SetHealth(10000); + SetInvincible(true); + SetDamageResistance("all", 0.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("cold", 0.0); + SetMoveSpeed(0.0); + PLAYING_DEAD = 1; + SetFly(true); + 1 = float(1); + SetGravity(0.0); + SetBloodType("none"); + if (SEAL_MODEL == "SEAL_MODEL") + { + SEAL_MODEL = "none"; + } + SetModel(SEAL_MODEL); + SetSolid("none"); + DropToFloor(); + SEAL_RUNNING = 1; + ScheduleDelayedEvent(0.5, "stay_floor"); + } + + void stay_floor() + { + if (!(SEAL_RUNNING)) return; + DropToFloor(); + ScheduleDelayedEvent(1.0, "stay_floor"); + } + + void make_go_bye_bye() + { + SEAL_RUNNING = 0; + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + ScheduleDelayedEvent(0.5, "final_remove"); + } + + void final_remove() + { + ClientEvent("remove", "all", currentscript); + DeleteEntity(GetOwner()); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetAlive(1); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/sfx_glassmaker.as b/scripts/angelscript/monsters/summon/sfx_glassmaker.as new file mode 100644 index 00000000..78c22f1b --- /dev/null +++ b/scripts/angelscript/monsters/summon/sfx_glassmaker.as @@ -0,0 +1,47 @@ +#pragma context server + +namespace MS +{ + +class SfxGlassmaker : CGameScript +{ + int DO_NADDA; + int DO_NADDA2; + + SfxGlassmaker() + { + DO_NADDA = 0; + } + + void game_dynamically_created() + { + DO_NADDA2 = 0; + } + + void OnSpawn() override + { + SetRace("beloved"); + SetInvincible(true); + ScheduleDelayedEvent(0.1, "glass_splodie"); + } + + void glass_splodie() + { + Effect("tempent", "gibs", "glassgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1, 40, 10, 100, 30); + ScheduleDelayedEvent(0.1, "glass_splodie2"); + } + + void glass_splodie2() + { + Effect("tempent", "gibs", "glassgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 128), 1, 40, 10, 100, 30); + ScheduleDelayedEvent(0.1, "remove_sploder"); + } + + void remove_sploder() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/sfx_icewave.as b/scripts/angelscript/monsters/summon/sfx_icewave.as new file mode 100644 index 00000000..e36582f3 --- /dev/null +++ b/scripts/angelscript/monsters/summon/sfx_icewave.as @@ -0,0 +1,79 @@ +#pragma context server + +namespace MS +{ + +class SfxIcewave : CGameScript +{ + int TILT_SPEED; + int rheight; + string script.owner; + int script.tilt; + + SfxIcewave() + { + TILT_SPEED = 70; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + snap_to_owner(); + } + + void game_dynamically_created() + { + script.owner = param1; + script.tilt = 1; + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 53); + SetProp(GetOwner(), "movetype", "const.movetype.noclip"); + SetProp(GetOwner(), "solid", 0); + SetAngles("angles.z"); + SetFly(true); + SetInvincible(true); + PlayAnim("once", "idle"); + SetAnimFrameRate(2); + snap_to_owner(); + set_tilt(); + PARAM2("die"); + } + + void set_tilt() + { + SetRepeatDelay(0.5); + if ((script.tilt)) + { + SetProp(GetOwner(), "avelocity", Vector3(0, 0, /* TODO: $neg */ $neg(TILT_SPEED))); + script.tilt = 0; + } + else + { + SetProp(GetOwner(), "avelocity", Vector3(0, 0, TILT_SPEED)); + script.tilt = 1; + } + } + + void snap_to_owner() + { + string l.pos = GetEntityOrigin(script.owner); + rheight = 37; + if (IsValidPlayer(script.owner) == 0) + { + rheight = GetEntityHeight(script.owner); + rheight += 15; + } + l.pos += Vector3(0, 0, rheight); + SetEntityOrigin(GetOwner(), l.pos); + if ((IsEntityAlive(script.owner))) return; + } + + void die() + { + SetProp(GetOwner(), "avelocity", Vector3(0, 0, 0)); + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/shock_beam.as b/scripts/angelscript/monsters/summon/shock_beam.as new file mode 100644 index 00000000..fbf03fe4 --- /dev/null +++ b/scripts/angelscript/monsters/summon/shock_beam.as @@ -0,0 +1,171 @@ +#pragma context server + +namespace MS +{ + +class ShockBeam : CGameScript +{ + string BEAM_COLOR; + string BEAM_DELAY; + string BEAM_END; + string BEAM_START; + string CLBEAM_COLOR; + string CLBEAM_DUR; + string CLBEAM_ORIGIN; + string CLBEAM_RADIUS; + string GAME_PVP; + int IS_ACTIVE; + string MY_DAMAGE; + string MY_DURATION; + string MY_OWNER; + string MY_RADIUS; + string MY_SCRIPT; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string SOUND_LIGHTNING; + string SOUND_THUNDER; + string SOUND_WARNING; + + ShockBeam() + { + SOUND_THUNDER = "weather/Storm_exclamation.wav"; + SOUND_LIGHTNING = "magic/lightning_strike_replica.wav"; + SOUND_WARNING = "magic/eraticlightfail.wav"; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_RADIUS = param2; + MY_DURATION = param3; + MY_DAMAGE = param4; + BEAM_COLOR = param5; + BEAM_DELAY = param6; + OWNER_ISPLAYER = IsValidPlayer(param1); + GAME_PVP = "game.pvp"; + if (BEAM_COLOR == "PARAM5") + { + BEAM_COLOR = Vector3(255, 255, 0); + } + string F_DURATION = MY_DURATION; + if (BEAM_DELAY != "PARAM6") + { + F_DURATION += BEAM_DELAY; + } + F_DURATION("end_effect"); + } + + void OnSpawn() override + { + SetInvincible(true); + PLAYING_DEAD = 1; + ScheduleDelayedEvent(0.1, "make_thunder"); + } + + void make_thunder() + { + MY_SCRIPT = "game.script.last_sent_id"; + BEAM_START = GetMonsterProperty("origin"); + BEAM_END = BEAM_START; + BEAM_END = "z"; + string CL_DURATION = MY_DURATION; + if (BEAM_DELAY != "PARAM6") + { + CL_DURATION += BEAM_DELAY; + } + if (BEAM_DELAY == "PARAM6") + { + make_lightning(); + } + if (BEAM_DELAY != "PARAM6") + { + BEAM_DELAY("make_lightning"); + EmitSound(GetOwner(), 0, SOUND_WARNING, 10); + } + ClientEvent("new", "all", currentscript, BEAM_START, BEAM_COLOR, MY_RADIUS, CL_DURATION); + } + + void make_lightning() + { + EmitSound(GetOwner(), 0, SOUND_LIGHTNING, 10); + Effect("beam", "point", "lgtning.spr", 200, BEAM_START, BEAM_END, BEAM_COLOR, 255, 100, MY_DURATION); + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "more_noise"); + damage_loop(); + } + + void more_noise() + { + EmitSound(GetOwner(), 0, SOUND_THUNDER, 10); + } + + void damage_loop() + { + if (!(IS_ACTIVE)) return; + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), MY_RADIUS, 0.0, 1.0, 0.0); + ScheduleDelayedEvent(0.25, "damage_loop"); + } + + void game_dodamage() + { + if (GAME_PVP == 0) + { + if ((OWNER_ISPLAYER)) + { + } + if ((IsValidPlayer(param2))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + if ((GetEntityProperty(param2, "haseffect"))) return; + ApplyEffect(param2, "effects/dot_lightning", 5.0, MY_OWNER, MY_DAMAGE); + } + + void end_effect() + { + IS_ACTIVE = 0; + ClientEvent("remove", "all", MY_SCRIPT); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void client_activate() + { + CLBEAM_ORIGIN = param1; + CLBEAM_COLOR = param2; + CLBEAM_RADIUS = param3; + CLBEAM_DUR = param4; + ClientEffect("light", "new", CLBEAM_ORIGIN, CLBEAM_RADIUS, CLBEAM_COLOR, CLBEAM_DUR); + ClientEffect("tempent", "sprite", "blueflare1.spr", CLBEAM_ORIGIN, "shock_beam_endsprite"); + CLBEAM_DUR("remove_cl"); + } + + void shock_beam_endsprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", CLBEAM_DUR); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 1.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", CLBEAM_COLOR); + } + + void remove_cl() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/shock_burst.as b/scripts/angelscript/monsters/summon/shock_burst.as new file mode 100644 index 00000000..b4db927d --- /dev/null +++ b/scripts/angelscript/monsters/summon/shock_burst.as @@ -0,0 +1,168 @@ +#pragma context server + +namespace MS +{ + +class ShockBurst : CGameScript +{ + int ANG_ADJ; + string BEAM_COLOR; + string BEAM_WIDTH; + int BOLTS_DEFINED; + int BOLT_HEIGHT; + int CUR_ANG; + int CUR_RAD; + string IS_ACTIVE; + int LOOP_COUNT; + string MY_DMG; + string MY_OWNER; + string MY_RADIUS; + string NUM_BOLTS; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string SOUND_THUNDER; + + ShockBurst() + { + SOUND_THUNDER = "weather/Storm_exclamation.wav"; + BOLT_HEIGHT = 512; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DMG = param2; + MY_RADIUS = param3; + NUM_BOLTS = param4; + BEAM_COLOR = param5; + BEAM_WIDTH = param6; + if (BEAM_COLOR == "PARAM5") + { + BEAM_COLOR = Vector3(255, 255, 0); + } + if (BEAM_WIDTH == "PARAM6") + { + BEAM_WIDTH = 200; + } + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + ANG_ADJ = 359; + ANG_ADJ /= NUM_BOLTS; + CUR_RAD = 5; + CUR_ANG = 0; + BOLTS_DEFINED = 0; + ScheduleDelayedEvent(0.25, "define_bolts"); + } + + void OnSpawn() override + { + SetName("Lightning Blast"); + SetRace("hated"); + SetHealth(1); + SetInvincible(true); + PLAYING_DEAD = 1; + } + + void define_bolts() + { + if (!(BOLTS_DEFINED < NUM_BOLTS)) return; + BOLTS_DEFINED += 1; + if (BOLTS_DEFINED <= NUM_BOLTS) + { + CUR_RAD += 2; + CUR_ANG += 5; + DL_ANG_ADJ += CUR_ANG; + if (DL_ANG_ADJ > 359) + { + DL_ANG_ADJ -= 359; + } + string DBOLT_START = GetMonsterProperty("origin"); + DBOLT_START += /* TODO: $relpos */ $relpos(Vector3(0, DL_ANG_ADJ, 0), Vector3(0, CUR_RAD, 0)); + SpawnNPC("monsters/summon/shock_burst_child", DBOLT_START, ScriptMode::Legacy); // params: MY_OWNER, MY_DMG, BOLTS_DEFINED + if (BOLTS_STRING != "BOLTS_STRING") + { + if (BOLTS_STRING.length() > 0) BOLTS_STRING += ";"; + BOLTS_STRING += GetEntityIndex(m_hLastCreated); + } + if (BOLTS_STRING == "BOLTS_STRING") + { + BOLTS_STRING = GetEntityIndex(m_hLastCreated); + } + ScheduleDelayedEvent(0.25, "define_bolts"); + } + if (BOLTS_DEFINED == NUM_BOLTS) + { + IS_ACTIVE = 1; + move_bolts(); + EmitSound(GetOwner(), 0, SOUND_THUNDER, 10); + } + } + + void move_bolts() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "move_bolts"); + CUR_RAD += 2; + CUR_ANG += 5; + LOOP_COUNT = 0; + for (int i = 0; i < NUM_BOLTS; i++) + { + draw_bolts(); + } + if (CUR_RAD >= MY_RADIUS) + { + end_summon(); + } + } + + void draw_bolts() + { + string L_ANG_ADJ = LOOP_COUNT; + L_ANG_ADJ *= ANG_ADJ; + L_ANG_ADJ += CUR_ANG; + if (L_ANG_ADJ > 359) + { + L_ANG_ADJ -= 359; + } + string BOLT_START = GetMonsterProperty("origin"); + BOLT_START += /* TODO: $relpos */ $relpos(Vector3(0, L_ANG_ADJ, 0), Vector3(0, CUR_RAD, 0)); + string BOLT_END = BOLT_START; + BOLT_END += "z"; + Effect("beam", "point", "lgtning.spr", BEAM_WIDTH, BOLT_START, BOLT_END, BEAM_COLOR, 255, 100, 0.1); + string BOLT_TO_MOVE = GetToken(BOLTS_STRING, LOOP_COUNT, ";"); + SetEntityOrigin(BOLT_TO_MOVE, BOLT_START); + LOOP_COUNT += 1; + } + + void end_summon() + { + IS_ACTIVE = 0; + LOOP_COUNT = 0; + remove_bolts_loop(); + } + + void remove_bolts_loop() + { + if (LOOP_COUNT < NUM_BOLTS) + { + ScheduleDelayedEvent(0.1, "remove_bolts_loop"); + } + if (LOOP_COUNT == NUM_BOLTS) + { + ScheduleDelayedEvent(1.0, "remove_me"); + } + string BOLT_TO_REMOVE = GetToken(BOLTS_STRING, LOOP_COUNT, ";"); + if (((BOLT_TO_REMOVE !is null))) + { + DeleteEntity(BOLT_TO_REMOVE); + } + LOOP_COUNT += 1; + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/shock_burst_child.as b/scripts/angelscript/monsters/summon/shock_burst_child.as new file mode 100644 index 00000000..797572b3 --- /dev/null +++ b/scripts/angelscript/monsters/summon/shock_burst_child.as @@ -0,0 +1,106 @@ +#pragma context server + +namespace MS +{ + +class ShockBurstChild : CGameScript +{ + string CMY_DMG; + string CMY_OWNER; + int DELAY_SOUND; + int IS_ACTIVE; + string N_CREATED; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string PVP_MODE; + string SOUND_SHOCK; + + ShockBurstChild() + { + SOUND_SHOCK = "debris/zap1.wav"; + } + + void game_dynamically_created() + { + CMY_OWNER = param1; + CMY_DMG = param2; + N_CREATED = param3; + PVP_MODE = "game.pvp"; + OWNER_ISPLAYER = IsValidPlayer(CMY_OWNER); + float ACTIVE_DELAY = 1.0; + ACTIVE_DELAY += N_CREATED; + IS_ACTIVE = 1; + ACTIVE_DELAY("scan_loop"); + StoreEntity("ent_expowner"); + } + + void OnSpawn() override + { + SetName("Lightning Blast Bolt"); + SetRace("hated"); + SetHealth(1); + SetInvincible(true); + PLAYING_DEAD = 1; + } + + void set_active() + { + IS_ACTIVE = 1; + } + + void scan_loop() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.23, "scan_loop"); + string HIT_TARG = /* TODO: $get_insphere */ $get_insphere("any", 64); + if (!(GetRelationship(HIT_TARG) == "enemy")) return; + if ((OWNER_ISPLAYER)) + { + if (PVP_MODE == 0) + { + } + if ((IsValidPlayer(HIT_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(HIT_TARG, "effects/dot_lightning", 5, CMY_OWNER, CMY_DMG); + if ((DELAY_SOUND)) return; + DELAY_SOUND = 1; + ScheduleDelayedEvent(2.0, "reset_delay_sound"); + EmitSound(GetOwner(), 0, SOUND_SHOCK, 10); + } + + void reset_delay_sound() + { + DELAY_SOUND = 0; + } + + void debug_beam() + { + if (param3 == "PARAM3") + { + Vector3 BEAM_COLOR = Vector3(255, 0, 255); + } + if (param3 != "PARAM3") + { + string BEAM_COLOR = param3; + } + float BEAM_DURATION = 1.0; + string BEAM_START = param1; + if (param2 == "PARAM2") + { + string BEAM_END = BEAM_START; + } + if (param2 != "PARAM2") + { + string BEAM_END = param2; + } + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 64)); + Effect("beam", "point", "laserbeam.spr", 20, BEAM_START, BEAM_END, BEAM_COLOR, 255, 0.7, BEAM_DURATION); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/shock_burst_two.as b/scripts/angelscript/monsters/summon/shock_burst_two.as new file mode 100644 index 00000000..b4a4eede --- /dev/null +++ b/scripts/angelscript/monsters/summon/shock_burst_two.as @@ -0,0 +1,161 @@ +#pragma context server + +namespace MS +{ + +class ShockBurstTwo : CGameScript +{ + int ANG_ADJ; + string BEAM_COLOR; + string BEAM_WIDTH; + int BOLTS_DEFINED; + int BOLT_ANG; + int BOLT_HEIGHT; + int BOLT_INC; + int CUR_ANG; + int CUR_RAD; + int DELAY_SOUND; + string GAME_PVP; + string HIT_TARG; + int IS_ACTIVE; + string MY_DMG; + string MY_OWNER; + string MY_RADIUS; + string NUM_BOLTS; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string SOUND_THUNDER; + + ShockBurstTwo() + { + SOUND_THUNDER = "weather/Storm_exclamation.wav"; + BOLT_HEIGHT = 512; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DMG = param2; + MY_RADIUS = param3; + NUM_BOLTS = param4; + BEAM_COLOR = param5; + BEAM_WIDTH = param6; + GAME_PVP = "game.pvp"; + if (BEAM_COLOR == "PARAM5") + { + BEAM_COLOR = Vector3(255, 255, 0); + } + if (BEAM_WIDTH == "PARAM6") + { + BEAM_WIDTH = 200; + } + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + StoreEntity("ent_expowner"); + SetRace(GetEntityRace(MY_OWNER)); + ANG_ADJ = 359; + ANG_ADJ /= NUM_BOLTS; + CUR_RAD = 5; + CUR_ANG = 0; + BOLTS_DEFINED = 0; + BOLT_INC = 359; + BOLT_INC /= NUM_BOLTS; + BOLT_ANG = 0; + for (int i = 0; i < NUM_BOLTS; i++) + { + define_bolts(); + } + IS_ACTIVE = 1; + rotate_bolts(); + } + + void OnSpawn() override + { + SetName("Lightning Blast"); + SetHealth(1); + SetInvincible(true); + PLAYING_DEAD = 1; + EmitSound(GetOwner(), 0, SOUND_THUNDER, 10); + } + + void define_bolts() + { + if (BOLT_LIST.length() > 0) BOLT_LIST += ";"; + BOLT_LIST += BOLT_ANG; + BOLT_ANG += BOLT_INC; + } + + void rotate_bolts() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "rotate_bolts"); + CUR_RAD += 2; + CUR_ANG += 5; + for (int i = 0; i < NUM_BOLTS; i++) + { + draw_bolts(); + } + if (CUR_RAD >= MY_RADIUS) + { + end_summon(); + } + } + + void draw_bolts() + { + string CUR_BOLT = i; + string L_BOLT_ANG = GetToken(BOLT_LIST, CUR_BOLT, ";"); + L_BOLT_ANG += CUR_ANG; + string BOLT_START = GetMonsterProperty("origin"); + BOLT_START += /* TODO: $relpos */ $relpos(Vector3(0, L_BOLT_ANG, 0), Vector3(0, CUR_RAD, 0)); + string BOLT_END = BOLT_START; + BOLT_END += "z"; + Effect("beam", "point", "lgtning.spr", BEAM_WIDTH, BOLT_START, BOLT_END, BEAM_COLOR, 255, 100, 0.1); + HIT_TARG = /* TODO: $get_insphere */ $get_insphere("any", 64, BOLT_START); + if (!(IsEntityAlive(HIT_TARGET) + "callevent" + "check_targ" + HIT_TARGET)) return; + } + + void end_summon() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void check_targ() + { + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + if ((OWNER_ISPLAYER)) + { + if ((IsValidPlayer(HIT_TARG))) + { + } + if (GAME_PVP < 1) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + shock_targ(); + } + + void shock_targ() + { + ApplyEffect(HIT_TARG, "effects/dot_lightning", 5, MY_OWNER, MY_DMG); + if ((DELAY_SOUND)) return; + DELAY_SOUND = 1; + ScheduleDelayedEvent(2.0, "reset_delay_sound"); + CallExternal("ext_playsound", "SOUND_SHOCK"); + } + + void reset_delay_sound() + { + DELAY_SOUND = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/skeleton.as b/scripts/angelscript/monsters/summon/skeleton.as new file mode 100644 index 00000000..ad9f2e4e --- /dev/null +++ b/scripts/angelscript/monsters/summon/skeleton.as @@ -0,0 +1,229 @@ +#pragma context server + +#include "monsters/summon/base_summon.as" + +namespace MS +{ + +class Skeleton : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_RUN_BASE; + string ANIM_WALK; + string ANIM_WALK_BASE; + string ATK_MIN; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLEE; + int CAN_FLINCH; + int CAN_HEAR; + int CAN_HUNT; + int HOVER_CLOSE; + int HOVER_FAR; + int I_R_PET; + int MOVE_RANGE; + string OWNER_SKILL; + float RETALIATE_CHANCE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + int SUMMON_CIRCLE_INDEX; + string SUM_REPORT_SUFFIX; + string SUM_SAY_ATTACK; + string SUM_SAY_COME; + string SUM_SAY_DEATH; + string SUM_SAY_DEFEND; + string SUM_SAY_GUARD; + string SUM_SAY_HUNT; + + Skeleton() + { + SUMMON_CIRCLE_INDEX = 30; + I_R_PET = 1; + SUM_SAY_COME = "Yes, my master."; + SUM_SAY_ATTACK = "It shall be more dead than I, my master."; + SUM_SAY_HUNT = "Seeking prey for my master..."; + SUM_SAY_DEFEND = "I shall defend you with my unlife, my master."; + SUM_SAY_DEATH = "No! I have failed my master!"; + SUM_SAY_GUARD = "I shall be as unmovable as the dead!"; + SUM_REPORT_SUFFIX = ", my master."; + HOVER_FAR = 128; + HOVER_CLOSE = 64; + ANIM_WALK_BASE = "walk"; + ANIM_RUN_BASE = "walk"; + ANIM_IDLE = "idle1"; + ANIM_DEATH = "dieheadshot"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_ATTACK = "attack1"; + MOVE_RANGE = 32; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 125; + ATTACK_HITCHANCE = 0.9; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_STRUCK4 = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_DEATH = "zombie/zo_pain1.wav"; + ANIM_RUN_BASE = "walk"; + RETALIATE_CHANCE = 0.75; + CAN_FLEE = 0; + CAN_HUNT = 1; + CAN_HEAR = 0; + CAN_FLINCH = 0; + } + + void summon_spawn() + { + SetName("Skeleton"); + SetFOV(359); + SetWidth(32); + SetHeight(72); + SetRoam(true); + SetHearingSensitivity(3); + SetSkillLevel(0); + SetRace("human"); + SetModel("monsters/skeleton.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetBloodType("none"); + SetDamageResistance("slash", ".7"); + SetDamageResistance("pierce", ".5"); + SetDamageResistance("blunt", 1.2); + SetDamageResistance("fire", 1.5); + SetDamageResistance("holy", 3.0); + SetDamageResistance("cold", 0.1); + SetDamageResistance("poison", 0.0); + CatchSpeech("skeleton_no", "play dead"); + CatchSpeech("skeleton_grave", "roll over"); + basesummon_attackall(); + } + + void pre_name_set() + { + OWNER_SKILL = GetSkillLevel(SUMMON_MASTER, "spellcasting"); + if (OWNER_SKILL == 8) + { + SetModelBody(0, 6); + } + if (OWNER_SKILL == 9) + { + SetModelBody(0, 6); + SetModelBody(1, 1); + } + if (OWNER_SKILL == 10) + { + SetModelBody(0, 1); + SetModelBody(1, 1); + } + if (OWNER_SKILL == 11) + { + SetModelBody(0, 1); + SetModelBody(1, 4); + } + if (OWNER_SKILL == 12) + { + SetModelBody(0, 1); + SetModelBody(1, 2); + } + if (OWNER_SKILL == 13) + { + SetModelBody(0, 5); + SetModelBody(1, 0); + } + if (OWNER_SKILL == 14) + { + SetModelBody(0, 5); + SetModelBody(1, 1); + } + if (OWNER_SKILL == 15) + { + SetModelBody(0, 3); + SetModelBody(1, 4); + } + if (OWNER_SKILL == 16) + { + SetModelBody(0, 3); + SetModelBody(1, 3); + } + if (OWNER_SKILL == 17) + { + SetModelBody(0, 4); + SetModelBody(1, 1); + } + if (OWNER_SKILL == 18) + { + SetModelBody(0, 4); + SetModelBody(1, 2); + } + if (OWNER_SKILL == 19) + { + SetModelBody(0, 4); + SetModelBody(1, 4); + } + if (OWNER_SKILL >= 20) + { + SetModelBody(0, 8); + SetModelBody(1, 0); + } + } + + void summon_summoned() + { + string TIME_LIVE = param2; + TIME_LIVE++; + ATK_MIN = param3; + SetHealth(param2); + PlayAnim("critical", "getup"); + ScheduleDelayedEvent(TIME_LIVE, "killme"); + } + + void attack_1() + { + SetVolume(5); + // PlayRandomSound from: SOUND_ATTACK1 + array sounds = {SOUND_ATTACK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hLastSeen, ATTACK_HITRANGE, ATK_MIN, ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_STRUCK4, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK4, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void skeleton_no() + { + if (!(GetEntityIndex("ent_lastspoke") == SUMMON_MASTER)) return; + npcatk_suspend_ai(3.0); + PlayAnim("once", "throw_scientist"); + SetSayTextRange(1024); + SayText("Not funny, master."); + } + + void skeleton_grave() + { + if (!(GetEntityIndex("ent_lastspoke") == SUMMON_MASTER)) return; + npcatk_suspend_ai(1.0); + SetMoveDest(SUMMON_MASTER); + SetSayTextRange(1024); + SayText("In who's grave?"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/skeleton_guard.as b/scripts/angelscript/monsters/summon/skeleton_guard.as new file mode 100644 index 00000000..bf67c9de --- /dev/null +++ b/scripts/angelscript/monsters/summon/skeleton_guard.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "monsters/summon/skeleton.as" + +namespace MS +{ + +class SkeletonGuard : CGameScript +{ + string ANIM_RUN_BASE; + string ANIM_WALK_BASE; + float BASE_FRAMERATE; + string GUARD_STRUCK1; + string GUARD_STRUCK2; + string GUARD_STRUCK3; + int SUMMON_CIRCLE_INDEX; + string SUM_REPORT_SUFFIX; + string SUM_SAY_ATTACK; + string SUM_SAY_COME; + string SUM_SAY_DEATH; + string SUM_SAY_DEFEND; + string SUM_SAY_GUARD; + string SUM_SAY_HUNT; + + SkeletonGuard() + { + SUMMON_CIRCLE_INDEX = 30; + SUM_SAY_COME = "Yes... my maaaster."; + SUM_SAY_ATTACK = "Death... Approaches..."; + SUM_SAY_HUNT = "I am... Hunt...ing..."; + SUM_SAY_DEFEND = "Your... Defense... Is all."; + SUM_SAY_DEATH = "No longer... Can I... Hold."; + SUM_SAY_GUARD = "I... Shall hold."; + SUM_REPORT_SUFFIX = ", master."; + ANIM_WALK_BASE = "walk"; + ANIM_RUN_BASE = "walk"; + GUARD_STRUCK1 = "body/armour1.wav"; + GUARD_STRUCK2 = "body/armour2.wav"; + GUARD_STRUCK3 = "body/armour3.wav"; + } + + void pre_name_set() + { + SetModelBody(0, 3); + SetModelBody(1, 3); + } + + void summon_spawn() + { + SetName("Undead Guardian"); + SetAnimMoveSpeed(0.5); + SetAnimFrameRate(0.5); + SetDamageResistance("all", 0.5); + SetBloodType("none"); + SetDamageResistance("slash", ".7"); + SetDamageResistance("pierce", ".5"); + SetDamageResistance("blunt", 1.2); + SetDamageResistance("fire", 1.5); + SetDamageResistance("holy", 3.0); + SetDamageResistance("cold", 0.1); + SetDamageResistance("poison", 0.0); + BASE_FRAMERATE = 0.5; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: GUARD_STRUCK1, GUARD_STRUCK2, GUARD_STRUCK3 + array sounds = {GUARD_STRUCK1, GUARD_STRUCK2, GUARD_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/slime_globe.as b/scripts/angelscript/monsters/summon/slime_globe.as new file mode 100644 index 00000000..1ddf6949 --- /dev/null +++ b/scripts/angelscript/monsters/summon/slime_globe.as @@ -0,0 +1,114 @@ +#pragma context server + +namespace MS +{ + +class SlimeGlobe : CGameScript +{ + string GLOB_TARG; + int IS_ACTIVE; + string MY_CL_IDX; + string MY_DMG; + string MY_OWNER; + string NEXT_ORBIT_SOUND; + string ORBIT_SOUND1; + string ORBIT_SOUND2; + int PLAYING_DEAD; + string SOUND_SHOOT; + + SlimeGlobe() + { + Precache("xfireball3.spr"); + ORBIT_SOUND1 = "tentacle/te_move1.wav"; + ORBIT_SOUND2 = "tentacle/te_move2.wav"; + SOUND_SHOOT = "magic/blackhole.wav"; + } + + void OnSpawn() override + { + SetName("Globe of Slime"); + SetInvincible(true); + SetNoPush(true); + SetGravity(0); + SetFly(true); + SetModel("null.mdl"); + SetWidth(2); + SetHeight(2); + PLAYING_DEAD = 1; + SetSolid("none"); + } + + void game_dynamically_created() + { + LogDebug("game_dynamically_created PARAM1 PARAM2 PARAM3"); + MY_OWNER = param1; + MY_DMG = param2; + SetRace(GetEntityRace(MY_OWNER)); + ScheduleDelayedEvent(0.1, "setup_cl"); + IS_ACTIVE = 1; + ScheduleDelayedEvent(3.0, "shoot_slime"); + ScheduleDelayedEvent(13.0, "end_slime"); + // PlayRandomSound from: ORBIT_SOUND1, ORBIT_SOUND2 + array sounds = {ORBIT_SOUND1, ORBIT_SOUND2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_ORBIT_SOUND = GetGameTime(); + NEXT_ORBIT_SOUND += 3.0; + } + + void setup_cl() + { + ClientEvent("new", "all", "monsters/summon/slime_globe_cl", GetEntityOrigin(GetOwner()), 13.0); + MY_CL_IDX = "game.script.last_sent_id"; + } + + void shoot_slime() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "shoot_slime"); + GLOB_TARG = "none"; + string TARG_LIST = FindEntitiesInSphere("enemy", 1200); + if (!(TARG_LIST != "none")) return; + ScrambleTokens(TARG_LIST, ";"); + string CUR_TARG = GetToken(TARG_LIST, 0, ";"); + GLOB_TARG = CUR_TARG; + SetMoveDest(CUR_TARG); + TossProjectile("proj_glob_guided", "view", CUR_TARG, 400, 0, 1, "none"); + if (!(GetGameTime() > NEXT_ORBIT_SOUND)) return; + // PlayRandomSound from: ORBIT_SOUND1, ORBIT_SOUND2 + array sounds = {ORBIT_SOUND1, ORBIT_SOUND2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + EmitSound(GetOwner(), 2, SOUND_SHOOT, 10); + NEXT_ORBIT_SOUND = GetGameTime(); + NEXT_ORBIT_SOUND += 3.0; + } + + void end_slime() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(5.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void ext_glob_landed() + { + XDoDamage(param1, 96, MY_DMG, 0.2, MY_OWNER, MY_OWNER, "none", "acid_effect", "dmgevent:glob"); + } + + void early_remove() + { + ClientEvent("update", "all", MY_CL_IDX, "early_remove"); + end_slime(); + } + + void ext_mommy_died() + { + early_remove(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/slime_globe_cl.as b/scripts/angelscript/monsters/summon/slime_globe_cl.as new file mode 100644 index 00000000..9b27b9e5 --- /dev/null +++ b/scripts/angelscript/monsters/summon/slime_globe_cl.as @@ -0,0 +1,83 @@ +#pragma context server + +namespace MS +{ + +class SlimeGlobeCl : CGameScript +{ + string FX_DURATION; + int GROW_MODE; + int SHRINK_MODE; + + void client_activate() + { + FX_DURATION = param2; + GROW_MODE = 1; + SHRINK_MODE = 0; + LogDebug("*** slime_globe_cl PARAM1 FX_DURATION GROW_MODE SHRINK_MODE"); + ClientEffect("tempent", "model", "weapons/projectiles.mdl", param1, "setup_slime_ball", "update_slime_ball"); + FX_DURATION("start_shrink"); + } + + void start_shrink() + { + LogDebug("*** slime_globe_cl start_shrink"); + if ((SHRINK_MODE)) return; + GROW_MODE = 0; + SHRINK_MODE = 1; + ScheduleDelayedEvent(2.1, "remove_me"); + } + + void early_remove() + { + start_shrink(); + } + + void remove_me() + { + RemoveScript(); + } + + void setup_slime_ball() + { + string L_FX_DURATION = FX_DURATION; + L_FX_DURATION += 2.0; + ClientEffect("tempent", "set_current_prop", "death_delay", L_FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", 68); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 9); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 16); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + } + + void update_slime_ball() + { + if ((GROW_MODE)) + { + string CUR_SIZE = "game.tempent.fuser1"; + CUR_SIZE += 0.01; + if (CUR_SIZE < 2.5) + { + } + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + if ((SHRINK_MODE)) + { + string CUR_SIZE = "game.tempent.fuser1"; + CUR_SIZE -= 0.1; + if (CUR_SIZE > 0) + { + } + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/snake_cursed.as b/scripts/angelscript/monsters/summon/snake_cursed.as new file mode 100644 index 00000000..a5cb12bf --- /dev/null +++ b/scripts/angelscript/monsters/summon/snake_cursed.as @@ -0,0 +1,174 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SnakeCursed : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BITE_SOUND; + string CYCLE_TIME; + float CYCLE_TIME_BATTLE; + float CYCLE_TIME_IDLE; + float CYCLE_TIME_NPC; + int DID_ALERT; + string MONSTER_MODEL; + string MY_OWNER; + int NO_SPAWN_STUCK_CHECK; + string NPCATK_TARGET; + int NPC_NO_PLAYER_DMG; + float POISON_DAMAGE; + int POISON_DURATION; + string SOUND_ALERT; + string SOUND_ATTACK; + string SOUND_IDLE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_POISON; + string SOUND_STRUCK; + + SnakeCursed() + { + ANIM_WALK = "snake_walk"; + ANIM_RUN = "snake_walk"; + ANIM_DEATH = "snake_diesimple"; + ANIM_IDLE = "snake_idle1"; + ANIM_ATTACK = "snake_attack1"; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 120; + ATTACK_MOVERANGE = 35; + ATTACK_HITCHANCE = 0.8; + ATTACK_DAMAGE = "$randf(5,20)"; + POISON_DAMAGE = "$randf(2,10)"; + POISON_DURATION = "$rand(10,20)"; + SOUND_ALERT = "monsters/snake_idle1.wav"; + SOUND_IDLE = "monsters/snake_idle2.wav"; + SOUND_ATTACK = "bullchicken/bc_bite2.wav"; + SOUND_PAIN1 = "monsters/snake_pain1.wav"; + SOUND_PAIN2 = "monsters/snake_pain2.wav"; + SOUND_POISON = "monsters/snakeman/sm_alert1.wav"; + SOUND_STRUCK = "debris/flesh2.wav"; + NO_SPAWN_STUCK_CHECK = 1; + MONSTER_MODEL = "monsters/giant_rat.mdl"; + CYCLE_TIME_BATTLE = 0.1; + CYCLE_TIME_IDLE = 0.1; + CYCLE_TIME_NPC = 0.1; + CYCLE_TIME = CYCLE_TIME_BATTLE; + NPC_NO_PLAYER_DMG = 1; + } + + void OnSpawn() override + { + SetName("Cursed Snake"); + SetHealth(1); + SetWidth(48); + SetHeight(32); + SetRoam(false); + SetRace("human"); + SetModel(MONSTER_MODEL); + SetModelBody(0, 6); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(4); + ScheduleDelayedEvent(1.0, "idle_sounds"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("stun", 0); + SetSolid("none"); + } + + void idle_sounds() + { + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + Random(5, 10)("idle_sounds"); + } + + void bite1() + { + BITE_SOUND = 1; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + XDoDamage(m_hAttackTarget, "direct", ATTACK_DAMAGE, ATTACK_HITCHANCE, MY_OWNER, GetOwner(), "spellcasting.affliction", "pierce", "*dmgevent:bite"); + } + + void bite_dodamage() + { + if (!(param1)) return; + LogDebug("game_dodamage GetEntityName(param2)"); + if (!(BITE_SOUND)) return; + BITE_SOUND = 0; + if (!(RandomInt(1, 5) == 1)) return; + EmitSound(GetOwner(), 0, SOUND_POISON, 10); + LogDebug("dot_poison GetEntityName(param2)"); + string L_DOT = POISON_DAMAGE; + L_DOT *= GetSkillLevel(MY_OWNER, "spellcasting.affliction"); + L_DOT *= 0.2; + ApplyEffect(param2, "effects/dot_poison", POISON_DURATION, MY_OWNER, L_DOT); + ScheduleDelayedEvent(0.1, "npc_fade_away"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK, SOUND_STRUCK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((IsValidPlayer(param1))) + { + NPCATK_TARGET = "unset"; + } + if ((DID_ALERT)) return; + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + SetRoam(true); + DID_ALERT = 1; + } + + void my_target_died() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void game_dynamically_created() + { + MY_OWNER = param1; + LogDebug("game_dynamically_created GetEntityName(param1)"); + string FIRST_TARG = GetEntityProperty(MY_OWNER, "target"); + if ((IsEntityAlive(FIRST_TARG))) + { + if (GetRelationship(FIRST_TARG) == "enemy") + { + } + npcatk_settarget(GetEntityIndex(FIRST_TARG)); + } + ScheduleDelayedEvent(30.0, "npc_fade_away"); + SetAngles("face"); + SetAnimMoveSpeed(5.0); + SetAnimFrameRate(1.5); + ScheduleDelayedEvent(0.01, "set_hp"); + if ((IsEntityAlive(FIRST_TARG))) return; + string FIRST_TARG = /* TODO: $get_insphere */ $get_insphere("monster", 1024); + if (!(IsEntityAlive(FIRST_TARG))) return; + if (!(GetRelationship(FIRST_TARG) == "enemy")) return; + npcatk_target(FIRST_TARG); + } + + void set_hp() + { + SetHealth(GetSkillLevel(MY_OWNER, "spellcasting.affliction")); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/sorc_axe.as b/scripts/angelscript/monsters/summon/sorc_axe.as new file mode 100644 index 00000000..e7e28aec --- /dev/null +++ b/scripts/angelscript/monsters/summon/sorc_axe.as @@ -0,0 +1,151 @@ +#pragma context server + +#include "monsters/summon/bludgeon_axe.as" + +namespace MS +{ + +class SorcAxe : CGameScript +{ + string BASE_DOT; + string DMG_BASE; + string DMG_TYPE; + string GAME_PVP; + int IS_ACTIVE; + string ITEM_ID; + string MY_DEST; + string MY_OWNER; + string NEXT_SCAN; + string NPC_NOCLIP_DEST; + string OWNER_HALFHEIGHT; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string TARG_LIST; + + SorcAxe() + { + DMG_TYPE = "lightning"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + } + + void OnSpawn() override + { + SetName("Thunder Axe"); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 34); + SetIdleAnim("spin_horizontal_norm"); + SetMoveAnim("spin_horizontal_norm"); + SetSolid("none"); + SetWidth(32); + SetFly(true); + SetHeight(32); + SetBloodType("none"); + SetInvincible(true); + SetMonsterClip(0); + SetRace("demon"); + PLAYING_DEAD = 1; + Effect("glow", GetOwner(), Vector3(255, 255, 0), 64, -1, 0); + LogDebug("spawned"); + } + + void do_shock() + { + if (!(GetRelationship(param1) == "enemy")) return; + if ((OWNER_ISPLAYER)) + { + if (GAME_PVP < 1) + { + } + if ((IsValidPlayer(param1))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string BEAM_START = GetMonsterProperty("origin"); + string AXE_SHOCK_DOT = param2; + Effect("beam", "end", "lgtning.spr", 30, BEAM_START, param1, 0, Vector3(255, 255, 0), 255, 30, 0.5); + ApplyEffect(param1, "effects/dot_lightning", 3, GetEntityIndex(GetOwner()), AXE_SHOCK_DOT); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DEST = param2; + DMG_BASE = param3; + GAME_PVP = "game.pvp"; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + ITEM_ID = MY_OWNER; + if ((OWNER_ISPLAYER)) + { + ITEM_ID = param4; + } + OWNER_HALFHEIGHT = GetEntityHeight(MY_OWNER); + if (!(OWNER_ISPLAYER)) + { + OWNER_HALFHEIGHT /= 2; + } + SetRace(GetEntityRace(MY_OWNER)); + NPC_NOCLIP_DEST = MY_DEST; + IS_ACTIVE = 1; + StoreEntity("ent_expowner"); + if ((OWNER_ISPLAYER)) + { + BASE_DOT = GetSkillLevel(MY_OWNER, "spellcasting.lightning"); + BASE_DOT *= 0.75; + } + ScheduleDelayedEvent(0.1, "damage_loop"); + } + + void damage_loop() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "damage_loop"); + if (!(OWNER_ISPLAYER)) + { + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), SCAN_RAD, DMG_BASE, 1.0, 0.0); + } + else + { + XDoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), SCAN_RAD, DMG_BASE, 0, MY_OWNER, MY_OWNER, "axehandling", "slash"); + if (GetGameTime() > NEXT_SCAN) + { + } + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.25; + TARG_LIST = FindEntitiesInSphere("enemy", SCAN_RAD); + if (TARG_LIST != "none") + { + } + for (int i = 0; i < GetTokenCount(TARG_LIST, ";"); i++) + { + plr_zap_targets(); + } + } + } + + void plr_zap_targets() + { + string CUR_TARG = GetToken(TARG_LIST, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (GAME_PVP < 1) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, MY_OWNER, BASE_DOT); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/spiked_ball.as b/scripts/angelscript/monsters/summon/spiked_ball.as new file mode 100644 index 00000000..50416a7b --- /dev/null +++ b/scripts/angelscript/monsters/summon/spiked_ball.as @@ -0,0 +1,156 @@ +#pragma context server + +namespace MS +{ + +class SpikedBall : CGameScript +{ + string DMG_MULTI; + int GROUND_PULSE; + int IS_ACTIVE; + string MY_OWNER; + string NEXT_DMG; + int N_DMG_TIMES; + string OLD_SPEED; + int PLAYING_DEAD; + string PUSH_LIST; + string SOUND_EXPLODE; + string SPRITE_EXPLODE; + string START_VEL; + string TOUCH_TARG; + + SpikedBall() + { + SPRITE_EXPLODE = "bigsmoke.spr"; + SOUND_EXPLODE = "weapons/explode3.wav"; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + START_VEL = param2; + DMG_MULTI = param3; + SetCallback("touch", "enable"); + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.01, "boost_and_scan"); + ScheduleDelayedEvent(10.0, "go_splodie"); + } + + void OnSpawn() override + { + SetName("Spiked Ball"); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 64); + SetWidth(48); + SetHeight(48); + SetGravity(2); + SetIdleAnim("spin_vertical_norm"); + SetProp(GetOwner(), "movetype", "const.movetype.bounce"); + SetProp(GetOwner(), "friction", 0.2); + SetInvincible(true); + SetRace("beloved"); + PLAYING_DEAD = 1; + } + + void boost_and_scan() + { + AddVelocity(GetOwner(), START_VEL); + OLD_SPEED = GetEntitySpeed(GetOwner()); + N_DMG_TIMES = 0; + GROUND_PULSE = 0; + monitor_speed(); + } + + void monitor_speed() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "monitor_speed"); + string CUR_SPEED = GetEntitySpeed(GetOwner()); + if (CUR_SPEED < 200) + { + if (OLD_SPEED < 200) + { + } + go_splodie(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string MY_GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + MY_Z -= MY_GROUND_Z; + if (MY_Z < 10) + { + GROUND_PULSE += 1; + EmitSound(GetOwner(), 0, "debris/bustmetal2.wav", 10); + if (GROUND_PULSE > 2) + { + } + go_splodie(); + } + OLD_SPEED = CUR_SPEED; + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(IS_ACTIVE)) return; + TOUCH_TARG = param1; + ScheduleDelayedEvent(0.01, "damage_touched"); + } + + void damage_touched() + { + if (!(GetGameTime() > NEXT_DMG)) return; + NEXT_DMG = GetGameTime(); + NEXT_DMG += 0.25; + N_DMG_TIMES += 1; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + string DMG_AMT = GetEntitySpeed(GetOwner()); + DMG_AMT *= DMG_MULTI; + if (GetEntityProperty(MY_OWNER, "dmgmulti") > 0) + { + DMG_SMT *= GetEntityProperty(MY_OWNER, "dmgmulti"); + } + EmitSound(GetOwner(), 0, "debris/bustmetal2.wav", 10); + XDoDamage(TOUCH_TARG, "direct", DMG_AMT, 1.0, MY_OWNER, MY_OWNER, "none", "blunt_effect"); + if (N_DMG_TIMES > 10) + { + ScheduleDelayedEvent(0.1, "go_splodie"); + } + } + + void go_splodie() + { + Effect("tempent", "spray", SPRITE_EXPLODE, GetMonsterProperty("origin"), 0, 1, 0, 0); + SetModel("none"); + string DMG_AMT = DMG_MULTI; + DMG_AMT *= 300; + XDoDamage(GetEntityOrigin(GetOwner()), 128, DMG_AMT, 0, MY_OWNER, MY_OWNER, "none", "fire_effect"); + PUSH_LIST = FindEntitiesInSphere("enemy", 128); + if (PUSH_LIST != "none") + { + for (int i = 0; i < GetTokenCount(PUSH_LIST, ";"); i++) + { + push_loop(); + } + } + EmitSound(GetOwner(), 0, SOUND_EXPLODE, 10); + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void push_loop() + { + string CUR_TARGET = GetToken(PUSH_LIST, i, ";"); + string TARGET_ORG = GetEntityOrigin(CUR_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + SetVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 110))); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/stun_burst.as b/scripts/angelscript/monsters/summon/stun_burst.as new file mode 100644 index 00000000..f61c3fb9 --- /dev/null +++ b/scripts/angelscript/monsters/summon/stun_burst.as @@ -0,0 +1,100 @@ +#pragma context server + +namespace MS +{ + +class StunBurst : CGameScript +{ + string BURST_SCRIPT_IDX; + int MY_BASE_DAMAGE; + string MY_OWNER; + string OWNER_ISPLAYER; + string SCAN_RANGE; + string SKILL_TYPE; + string TARG_LIST; + string THROW_TARGETS; + + void game_dynamically_created() + { + StoreEntity("ent_expowner"); + MY_OWNER = param1; + OWNER_ISPLAYER = IsValidPlayer(param1); + SCAN_RANGE = param2; + MY_BASE_DAMAGE = 0; + SKILL_TYPE = "none"; + if (param5 != "PARAM5") + { + SKILL_TYPE = param5; + } + SetRace(GetEntityRace(MY_OWNER)); + if (SCAN_RANGE == 0) + { + SCAN_RANGE = 96; + } + string TRACE_ORG = GetMonsterProperty("origin"); + string TRACE_END = TRACE_ORG; + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, -1000)); + string TRACE_LINE = TraceLine(TRACE_ORG, TRACE_END); + if (param3 != "PARAM3") + { + THROW_TARGETS = param3; + } + if (param4 != "PARAM4") + { + MY_BASE_DAMAGE = param4; + } + SetEntityOrigin(GetOwner(), TRACE_LINE); + SetAngles("face"); + ClientEvent("new", "all_in_sight", "monsters/summon/stun_burst_cl", TRACE_LINE, SCAN_RANGE); + BURST_SCRIPT_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.25, "big_boom"); + ScheduleDelayedEvent(3.0, "effect_die"); + } + + void effect_die() + { + ClientEvent("remove", "all", BURST_SCRIPT_IDX); + DeleteEntity(GetOwner()); + } + + void big_boom() + { + EmitSound(GetOwner(), 0, "magic/boom.wav", 10); + TARG_LIST = FindEntitiesInSphere("enemy", SCAN_RANGE); + if (!(TARG_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(TARG_LIST, ";"); i++) + { + affect_targets(); + } + } + + void affect_targets() + { + string CHECK_ENT = GetToken(TARG_LIST, i, ";"); + if (!(IsOnGround(CHECK_ENT))) return; + if ((OWNER_ISPLAYER)) + { + if ("game.pvp" == 0) + { + } + if ((IsValidPlayer(CHECK_ENT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CHECK_ENT, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + if (MY_BASE_DAMAGE > 0) + { + XDoDamage(CHECK_ENT, "direct", MY_BASE_DAMAGE, 0, MY_OWNER, MY_OWNER, SKILL_TYPE, "magic"); + } + if (!(THROW_TARGETS)) return; + string TARGET_ORG = GetEntityOrigin(CHECK_ENT); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CHECK_ENT, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/stun_burst_cl.as b/scripts/angelscript/monsters/summon/stun_burst_cl.as new file mode 100644 index 00000000..9805f09e --- /dev/null +++ b/scripts/angelscript/monsters/summon/stun_burst_cl.as @@ -0,0 +1,67 @@ +#pragma context client + +namespace MS +{ + +class StunBurstCl : CGameScript +{ + string CL_RADIUS; + int CYCLE_ANGLE; + string OWNER_POS; + + void client_activate() + { + const string FIRE_SPRITE = "fire1_fixed.spr"; + const int TOTAL_OFS = 10; + CYCLE_ANGLE = 0; + OWNER_POS = param1; + CL_RADIUS = param2; + for (int i = 0; i < 17; i++) + { + create_flames(); + } + ScheduleDelayedEvent(2.9, "remove_me_cl"); + } + + void remove_me_cl() + { + RemoveScript(); + } + + void create_flames() + { + string FLAME_POS = OWNER_POS; + FLAME_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, 0)); + ClientEffect("tempent", "sprite", FIRE_SPRITE, FLAME_POS, "setup_flame"); + CYCLE_ANGLE += 20; + } + + void setup_flame() + { + float FADE_DEL = 1.0; + if (CL_RADIUS > 128) + { + float FADE_DEL = 2.0; + } + int SPRITE_SPEED = 100; + if (CL_RADIUS > 128) + { + int SPRITE_SPEED = 400; + } + ClientEffect("tempent", "set_current_prop", "death_delay", FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/summon_blizzard.as b/scripts/angelscript/monsters/summon/summon_blizzard.as new file mode 100644 index 00000000..cc77e5cc --- /dev/null +++ b/scripts/angelscript/monsters/summon/summon_blizzard.as @@ -0,0 +1,203 @@ +#pragma context server + +#include "monsters/summon/base_aoe.as" + +namespace MS +{ + +class SummonBlizzard : CGameScript +{ + string ACTIVE_SKILL; + float AOE_FREQ; + int AOE_RADIUS; + int BLIZZARD_RANGE; + string END_POS; + string FLAKE_HEIGHT; + float FREQ_NOISE; + string GAME_PVP; + int HEIGHT; + string MY_ANGLES; + string MY_BASE_DMG; + int MY_BASE_DURATION; + string MY_OWNER; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string ROOF_HEIGHT; + float SCAN_RATE; + string SHARD_HEIGHT; + string SHARD_MODEL; + int SNOWING; + string SNOW_CENTER; + string TIME_LIVE; + int WIDTH; + int vel; + + SummonBlizzard() + { + AOE_FREQ = 2.0; + AOE_RADIUS = 172; + FREQ_NOISE = 8.0; + BLIZZARD_RANGE = 172; + SHARD_MODEL = "glassgibs.mdl"; + Precache("snow1.spr"); + Precache(SHARD_MODEL); + SCAN_RATE = 2.0; + WIDTH = 100; + HEIGHT = 200; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.12); + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + int x = RandomInt(NEGWIDTH, WIDTH); + int y = RandomInt(NEGWIDTH, WIDTH); + END_POS += SNOW_CENTER; + ClientEffect("tempent", "sprite", "snow1.spr", END_POS, "setup_blizzardflake"); + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + int x = RandomInt(NEGWIDTH, WIDTH); + int y = RandomInt(NEGWIDTH, WIDTH); + END_POS += SNOW_CENTER; + ClientEffect("tempent", "sprite", SHARD_MODEL, END_POS, "setup_hailshard"); + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + int x = RandomInt(NEGWIDTH, WIDTH); + int y = RandomInt(NEGWIDTH, WIDTH); + END_POS += SNOW_CENTER; + ClientEffect("tempent", "sprite", SHARD_MODEL, END_POS, "setup_hailshard"); + } + + void snow_start() + { + SNOWING = 1; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_ANGLES = param2; + MY_BASE_DMG = param3; + MY_BASE_DURATION = 10; + ACTIVE_SKILL = param5; + if (ACTIVE_SKILL == "PARAM5") + { + ACTIVE_SKILL = "spellcasting.ice"; + } + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + GAME_PVP = "game.pvp"; + if ((OWNER_ISPLAYER)) + { + SCAN_RATE = 1.0; + } + SetAngles("face.y"); + TIME_LIVE = MY_BASE_DURATION; + string TRACE_START = GetMonsterProperty("origin"); + string TRACE_END = TRACE_START; + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 2000)); + string ROOF_HEIGHT = TraceLine(TRACE_START, TRACE_END); + if (Distance(ROOF_HEIGHT, GetMonsterProperty("origin")) > 512) + { + string ROOF_HEIGHT = GetMonsterProperty("origin"); + ROOF_HEIGHT += "z"; + } + string MY_X = (GetMonsterProperty("origin")).x; + string MY_Y = (GetMonsterProperty("origin")).y; + string GRND_Z = (MY_OWNER).z; + Vector3 SNOWFX_SPAWN = Vector3(MY_X, MY_Y, GRND_Z); + if ((OWNER_ISPLAYER)) + { + ClientEvent("new", "all", currentscript, SNOWFX_SPAWN, TIME_LIVE, ROOF_HEIGHT); + TIME_LIVE("blizzard_death"); + snow_start(); + } + if (!(OWNER_ISPLAYER)) + { + ClientEvent("new", "all", currentscript, SNOWFX_SPAWN, TIME_LIVE, ROOF_HEIGHT); + TIME_LIVE("blizzard_death"); + snow_start(); + } + } + + void OnSpawn() override + { + SetName("Blizzard"); + SetInvincible(true); + SetRace("beloved"); + SetModel("none"); + SetSolid("none"); + PLAYING_DEAD = 1; + SetNoPush(true); + SetGravity(0); + SetRoam(false); + if (!(true)) return; + EmitSound(GetOwner(), 0, "amb/windy.wav", 10); + FREQ_NOISE("do_noise"); + } + + void do_noise() + { + if (!(IS_ACTIVE)) return; + EmitSound(GetOwner(), 0, "amb/windy.wav", 10); + FREQ_NOISE("do_noise"); + } + + void blizzard_death() + { + DeleteEntity(GetOwner()); + } + + void apply_aoe_effect() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + ApplyEffect(param1, "effects/dot_cold", 5, MY_OWNER, MY_BASE_DMG, ACTIVE_SKILL); + } + + void client_activate() + { + SNOW_CENTER = param1; + ROOF_HEIGHT = param3; + ROOF_HEIGHT = (ROOF_HEIGHT).z; + END_POS = SNOW_CENTER; + PARAM2("blizzard_end_cl"); + FLAKE_HEIGHT = (ROOF_HEIGHT).z; + SHARD_HEIGHT = (ROOF_HEIGHT).z; + SHARD_HEIGHT -= 64; + } + + void blizzard_end_cl() + { + RemoveScript(); + } + + void setup_blizzardflake() + { + vel = RandomInt(-50, 50); + float FLAKE_GRAv = Random(0.2, 2.1); + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.2); + ClientEffect("tempent", "set_current_prop", "gravity", FLAKE_GRAv); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(vel, vel, -200)); + } + + void setup_hailshard() + { + float SHARD_SIZE = Random(1.0, 3.0); + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", SHARD_SIZE); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(90, 0, 0)); + ClientEffect("tempent", "set_current_prop", "angle", Vector3(90, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 3); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(-10, -10, -100)); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/summon_fire_wall.as b/scripts/angelscript/monsters/summon/summon_fire_wall.as new file mode 100644 index 00000000..b94162a3 --- /dev/null +++ b/scripts/angelscript/monsters/summon/summon_fire_wall.as @@ -0,0 +1,205 @@ +#pragma context server + +namespace MS +{ + +class SummonFireWall : CGameScript +{ + string ACTIVE_SKILL; + string FIRE_DURATION; + string FLAME_ANGLE; + string FLAME_POSITION; + int FLAMING; + string GAME_PVP; + int HEIGHT; + int I_DO_FIRE_DAMAGE; + string MY_BASE_DMG; + string MY_OWNER; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + int SCAN_PASS; + int TIME_LIVE; + int WIDTH; + + SummonFireWall() + { + TIME_LIVE = 14; + I_DO_FIRE_DAMAGE = 1; + Precache("fire1_fixed.spr"); + HEIGHT = 60; + WIDTH = 2; + } + + void OnRepeatTimer() + { + SetRepeatDelay(6); + if ((FLAMING)) + { + } + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", 7); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(Random(0.0, 0.5)); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(Random(0.0, 0.5)); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void flames_start() + { + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", 7); + FLAMING = 1; + flames_attack(); + } + + void OnSpawn() override + { + PLAYING_DEAD = 1; + SetName("Fire Wall"); + SetHealth(1); + SetInvincible(true); + SetRoam(false); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetBloodType("none"); + ScheduleDelayedEvent(2, "flames_start"); + // svplaysound: emitsound ent_me $get(ent_me,origin) 192 TIME_LIVE danger 192 + EmitSound(GetOwner(), GetEntityOrigin(GetOwner()), 192, TIME_LIVE, "danger", 192); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + GAME_PVP = "game.pvp"; + MY_BASE_DMG = param3; + MY_BASE_DMG *= 3; + FIRE_DURATION = param4; + ACTIVE_SKILL = param5; + if (ACTIVE_SKILL == "PARAM5") + { + ACTIVE_SKILL = "spellcasting.fire"; + } + FIRE_DURATION("firewall_death"); + StoreEntity("ent_expowner"); + SetAngles("face.y"); + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), param2); + SCAN_PASS = 0; + } + + void flames_attack() + { + if (!(FLAMING)) return; + ScheduleDelayedEvent(0.1, "flames_attack"); + SCAN_PASS += 1; + if (SCAN_PASS > 3) + { + SCAN_PASS = 0; + } + if (SCAN_PASS == 1) + { + string SCAN_POS = /* TODO: $relpos */ $relpos(0, 0, 0); + } + if (SCAN_PASS == 2) + { + string SCAN_POS = /* TODO: $relpos */ $relpos(0, 96, 0); + } + if (SCAN_PASS == 3) + { + string SCAN_POS = /* TODO: $relpos */ $relpos(0, -96, 0); + } + string SCAN_RESULT = /* TODO: $get_insphere */ $get_insphere("any", 48, SCAN_POS); + if (!(GetRelationship(SCAN_RESULT) == "enemy")) return; + if ((IsValidPlayer(SCAN_RESULT))) + { + if ((OWNER_ISPLAYER)) + { + } + if (GAME_PVP < 1) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(SCAN_RESULT, "effects/dot_fire", 10, MY_OWNER, MY_BASE_DMG, ACTIVE_SKILL); + } + + void firewall_death() + { + FLAMING = 0; + firewall_end_cl(); + DeleteEntity(GetOwner()); + } + + void client_activate() + { + FLAME_POSITION = param1; + FLAME_ANGLE = Vector3(0, param2, 0); + ScheduleDelayedEvent(2, "flames_start"); + TIME_LIVE("firewall_end_cl"); + } + + void firewall_end_cl() + { + RemoveScript(); + } + + void flames_shoot() + { + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + int x = RandomInt(-30, 30); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + int x = RandomInt(-96, 96); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + int x = RandomInt(-192, 192); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + } + + void setup_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.6, 1.0)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.1, 1.0)); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/summon_ice_wall.as b/scripts/angelscript/monsters/summon/summon_ice_wall.as new file mode 100644 index 00000000..59339cda --- /dev/null +++ b/scripts/angelscript/monsters/summon/summon_ice_wall.as @@ -0,0 +1,124 @@ +#pragma context server + +namespace MS +{ + +class SummonIceWall : CGameScript +{ + string ANIM_DEATH; + int CANT_TURN; + int CAN_ATTACK; + int CAN_HUNT; + string SCANNING; + int f1; + int f2; + int r1; + int r2; + string rotate; + + SummonIceWall() + { + Precache("blueflare1.spr"); + ANIM_DEATH = ""; + CAN_ATTACK = 0; + CAN_HUNT = 0; + CANT_TURN = 1; + SetCallback("touch", "enable"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.5); + if ((SCANNING)) + { + } + // svplaysound: emitsound ent_me $relpos(0,0,0) 10 0.25 combat + EmitSound(GetOwner(), /* TODO: $relpos */ $relpos(0, 0, 0), 10, 0.25, "combat"); + string PLAYER_ABOUT = /* TODO: $get_insphere */ $get_insphere("any", 200); + CallExternal(PLAYER_ABOUT, "npcatk_settarget", GetEntityIndex(GetOwner())); + if (GetEntityProperty(PLAYER_ABOUT, "scriptvar") > 2) + { + ice_death(); + } + if ((IsValidPlayer(PLAYER_ABOUT))) + { + } + if (GetEntityRange(PLAYER_ABOUT) < 75) + { + } + ice_death(); + } + + void OnSpawn() override + { + SetHealth(15); + SetWidth(64); + SetHeight(64); + SetName("Ice Wall"); + SetRoam(false); + SetDamageResistance("fire", 10.0); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetModel("misc/icewall.mdl"); + SetBloodType("none"); + SetRace("hated"); + SetTurnRate(0.01); + ScheduleDelayedEvent(0, "icewall_up"); + ScheduleDelayedEvent(30, "ice_death"); + } + + void game_dynamically_created() + { + PARAM1++; + SetAngles("face.y"); + if (param3 > 1) + { + string FINAL_HP = param3; + FINAL_HP *= 2; + SetHealth(FINAL_HP); + } + if (!(SCANNING)) + { + SCANNING = 1; + } + if (!(param2 == "firstcast")) return; + rotate = GetEntityProperty(GetOwner(), "angles.yaw"); + rotate++; + r1 = RandomInt(50, 70); + r2 = RandomInt(50, 70); + r2 *= -1; + f1 = RandomInt(-5, 5); + f2 = RandomInt(-5, 5); + SpawnNPC("monsters/summon/summon_ice_wall", /* TODO: $relpos */ $relpos(f1, r1, 0), ScriptMode::Legacy); // params: rotate, 1 + SpawnNPC("monsters/summon/summon_ice_wall", /* TODO: $relpos */ $relpos(f2, r2, 0), ScriptMode::Legacy); // params: rotate, 1 + } + + void icewall_up() + { + PlayAnim("hold", "up"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ice_death(); + } + + void ice_death() + { + SetCallback("touch", "disable"); + Effect("tempent", "trail", "blueflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 32), 2, 0.1, 3, 30, 0); + Effect("tempent", "trail", "blueflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 32), /* TODO: $relpos */ $relpos(0, 0, 64), 2, 0.1, 3, 30, 0); + Effect("tempent", "trail", "blueflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 64), /* TODO: $relpos */ $relpos(0, 0, 96), 5, 0.1, 3, 30, 0); + DeleteEntity(GetOwner()); + } + + void OnTouch(CBaseEntity@ other) override + { + LogDebug("game_touch GetEntityName(param1)"); + if (!(IsValidPlayer(param1))) return; + ice_death(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/summon_lightning_storm.as b/scripts/angelscript/monsters/summon/summon_lightning_storm.as new file mode 100644 index 00000000..907206d6 --- /dev/null +++ b/scripts/angelscript/monsters/summon/summon_lightning_storm.as @@ -0,0 +1,184 @@ +#pragma context server + +#include "monsters/summon/base_aoe.as" + +namespace MS +{ + +class SummonLightningStorm : CGameScript +{ + string ACTIVE_SKILL; + float AOE_FREQ; + string AOE_OWNER; + int AOE_RADIUS; + string BASE_DURATION; + string CAST_BY_PLAYER; + string GROUND_Z; + string LIGHTNING_SPRITE; + string LIGHTNING_SPRITE_SPARKS; + int LOOP_SOUND; + string MY_BASE_DAMAGE; + string MY_ITEM; + string MY_OWNER; + string NEG_WIDTH; + int PLAYING_DEAD; + string SMOKE_ANGLE; + string SMOKE_POSITION; + string SMOKE_SPRITE; + string STORM_CLID; + string STORM_DURATION; + int STORM_HEIGHT; + int STORM_WIDTH; + + SummonLightningStorm() + { + STORM_HEIGHT = 260; + SMOKE_SPRITE = "bigsmoke.spr"; + LIGHTNING_SPRITE = "lgtning.spr"; + LIGHTNING_SPRITE_SPARKS = "3dmflaora.spr"; + STORM_WIDTH = 75; + AOE_FREQ = 1.0; + AOE_RADIUS = 150; + } + + void game_precache() + { + Precache(LIGHTNING_SPRITE_SPARKS); + Precache(SMOKE_SPRITE); + Precache(LIGHTNING_SPRITE); + } + + void OnSpawn() override + { + SetName("Lightning Storm"); + SetInvincible(true); + SetNoPush(true); + SetGravity(0); + PLAYING_DEAD = 1; + LOOP_SOUND = 0; + } + + void game_dynamically_created() + { + AOE_OWNER = param1; + MY_OWNER = param1; + if ((GetEntityProperty(AOE_OWNER, "is_item"))) + { + MY_ITEM = AOE_OWNER; + AOE_OWNER = GetEntityProperty(MY_ITEM, "owner"); + MY_OWNER = AOE_OWNER; + } + NEG_WIDTH = /* TODO: $neg */ $neg(STORM_WIDTH); + string L_ANGLE = param2; + SetAngles("face.y"); + MY_BASE_DAMAGE = param3; + BASE_DURATION = param4; + STORM_DURATION = (GetGameTime() + param4); + ACTIVE_SKILL = param5; + CAST_BY_PLAYER = GetEntityProperty(MY_ITEM, "is_item"); + string F_GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + LogDebug("GroundLevelSentToClient: F_GROUND_Z"); + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), L_ANGLE, F_GROUND_Z); + STORM_CLID = "game.script.last_sent_id"; + do_storm(); + check_death(); + } + + void do_storm() + { + ScheduleDelayedEvent(0.3, "do_storm"); + LOOP_SOUND += 1; + if (LOOP_SOUND >= 3) + { + EmitSound(GetOwner(), 0, "weather/lightning.wav", 6); + LOOP_SOUND = 0; + } + } + + void apply_aoe_effect() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + float EFFECT_DUR = 5.0; + string L_ENT = AOE_OWNER; + if ((GetEntityProperty(L_ENT, "is_item"))) + { + EFFECT_DUR *= 2; + string L_ENT = GetEntityProperty(L_ENT, "owner"); + } + ApplyEffect(param1, "effects/dot_lightning", EFFECT_DUR, L_ENT, MY_BASE_DAMAGE, ACTIVE_SKILL); + } + + void sustain_storm() + { + string L_POS = param1; + SetEntityOrigin(GetOwner(), L_POS); + ClientEvent("update", "all", STORM_CLID, "cl_pos_update", L_POS); + STORM_DURATION = (GetGameTime() + BASE_DURATION); + } + + void check_death() + { + SetRepeatDelay(0.5); + int L_REMOVE = 0; + if (GetGameTime() > STORM_DURATION) + { + int L_REMOVE = 1; + } + if ((L_REMOVE)) + { + ClientEvent("remove", "all", STORM_CLID); + CallExternal(MY_ITEM, "storm_ended"); + DeleteEntity(GetOwner()); + } + } + + void client_activate() + { + SMOKE_POSITION = param1; + SMOKE_ANGLE = Vector3(0, param2, 0); + GROUND_Z = param3; + } + + void smokes_shoot() + { + SetRepeatDelay(0.25); + int x = RandomInt(-64, 64); + int y = RandomInt(-64, 64); + string L_POS = /* TODO: $relpos */ $relpos(SMOKE_ANGLE, Vector3(x, y, 250)); + L_POS += SMOKE_POSITION; + cl_beam(L_POS); + ClientEffect("tempent", "sprite", SMOKE_SPRITE, L_POS, "setup_smokes"); + } + + void cl_pos_update() + { + SMOKE_POSITION = param1; + GROUND_Z = (param1).z; + GROUND_Z -= 100; + } + + void cl_beam() + { + string CL_BEAM_START = param1; + string CL_BEAM_END = CL_BEAM_START; + CL_BEAM_END = "z"; + ClientEffect("beam_points", CL_BEAM_START, CL_BEAM_END, LIGHTNING_SPRITE, 1.0, 60, 0.4, 0.5, 1, 2, Vector3(255, 255, 0)); + } + + void setup_smokes() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/summon_volcano.as b/scripts/angelscript/monsters/summon/summon_volcano.as new file mode 100644 index 00000000..7098c3c4 --- /dev/null +++ b/scripts/angelscript/monsters/summon/summon_volcano.as @@ -0,0 +1,293 @@ +#pragma context server + +namespace MS +{ + +class SummonVolcano : CGameScript +{ + int ANGLE_OFFSET; + string ANIM_DEATH; + string AOE_DMG; + int AOE_FREQ; + int AOE_RADIUS; + string CAST_BY_PLAYER; + int CHAN_VOLCANO; + string EFFECT_DURATION; + int ERUPTING; + string FIREBALL_DMG; + float FIREBALL_FREQ; + int FLAME_CIRCLE_BODY; + int FORCE_OFFSET; + string FUNC_ROCKSPAWN_ORIGIN; + int FX_ACTIVE; + float FX_DELAY; + string FX_DURATION; + string FX_IDX; + string LIGHT_COLOR; + int LIGHT_RADIUS; + string MODEL_IDX; + string MODEL_WORLD; + string MY_OWNER; + int ROCK_START_HEIGHT; + string SOUND_LOOP; + string SOUND_SHOOT; + string SOUND_START; + string SPRITE_BURN; + string SPRITE_SMOKE; + + SummonVolcano() + { + MODEL_WORLD = "misc/volcano.mdl"; + ANIM_DEATH = "down"; + SOUND_SHOOT = "magic/flamelick_cast.wav"; + FIREBALL_FREQ = 0.27; + AOE_FREQ = 1; + AOE_RADIUS = 32; + ANGLE_OFFSET = 60; + FORCE_OFFSET = 70; + ROCK_START_HEIGHT = 40; + MODEL_WORLD = "weapons/projectiles.mdl"; + SPRITE_BURN = "fire1_fixed.spr"; + SPRITE_SMOKE = "rain_mist.spr"; + FLAME_CIRCLE_BODY = 51; + CHAN_VOLCANO = 7; + SOUND_START = "magic/volcano_start.wav"; + SOUND_LOOP = "magic/volcano_loop.wav"; + LIGHT_RADIUS = 250; + LIGHT_COLOR = "(255,100,100)"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(FX_DELAY); + if ((FX_ACTIVE)) + { + func_rockspawn(); + ClientEffect("tempent", "sprite", SPRITE_BURN, FUNC_ROCKSPAWN_ORIGIN, "volcano_fire_create"); + } + else + { + func_rockspawn(); + ClientEffect("tempent", "sprite", SPRITE_SMOKE, FUNC_ROCKSPAWN_ORIGIN, "setup_smoke", "update_smoke"); + } + } + + void game_precache() + { + Precache("misc/volcano.mdl"); + } + + void OnSpawn() override + { + SetName("volcano"); + SetHealth(1500); + SetInvincible(true); + SetRace("beloved"); + SetWidth(32); + SetHeight(64); + SetSolid("none"); + SetRoam(false); + SetHearingSensitivity(0); + SetModel(MODEL_WORLD); + PlayAnim("hold", "up"); + ScheduleDelayedEvent(2, "volcano_start"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 50, 10, 6, 512); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + FIREBALL_DMG = param2; + AOE_DMG = (FIREBALL_DMG * 0.12); + EFFECT_DURATION = param3; + CAST_BY_PLAYER = IsValidPlayer(MY_OWNER); + ClientEvent("new", "all", currentscript, GetEntityIndex(GetOwner()), EFFECT_DURATION); + FX_IDX = "game.script.last_sent_id"; + EFFECT_DURATION("volcano_off"); + } + + void volcano_start() + { + ERUPTING = 1; + ClientEvent("update", "all", FX_IDX, "fx_start"); + aoe_loop(); + fireball_loop(); + } + + void aoe_loop() + { + if (!(ERUPTING)) return; + func_rockspawn(); + XDoDamage(FUNC_ROCKSPAWN_ORIGIN, 128, AOE_DMG, 0.01, MY_OWNER, GetEntityIndex(GetOwner()), "spellcasting.fire", "fire", "dmgevent:*volcano"); + AOE_FREQ("aoe_loop"); + } + + void fireball_loop() + { + if (!(ERUPTING)) return; + func_rockspawn(); + string L_ORIGIN = FUNC_ROCKSPAWN_ORIGIN; + string L_DIR = L_ORIGIN; + L_DIR += "z"; + L_DIR += "x"; + L_DIR += "y"; + int L_FORCE = 500; + L_FORCE += (FORCE_OFFSET * Random(-1, 1)); + CallExternal(MY_OWNER, "ext_tossprojectile", "proj_volcano", L_ORIGIN, L_DIR, L_FORCE, FIREBALL_DMG, 0, "spellcasting.fire"); + EmitSound(GetOwner(), CHAN_WEAPON, SOUND_SHOOT, 4); + FIREBALL_FREQ("fireball_loop"); + } + + void volcano_dodamage() + { + string L_TARGET = param2; + string L_DMG = param6; + if (!(param1)) return; + if (!(IsEntityAlive(L_TARGET))) return; + if (!(L_DMG > 0)) return; + string L_DMG_FIRE = GetSkillLevel(MY_OWNER, "spellcasting.fire"); + L_DMG_FIRE *= 0.5; + ApplyEffect(L_TARGET, "effects/dot_fire", 5, MY_OWNER, L_DMG_FIRE, "spellcasting.fire"); + } + + void volcano_off() + { + ERUPTING = 0; + PlayAnim("hold", "down"); + ScheduleDelayedEvent(4, "volcano_die"); + } + + void volcano_die() + { + ClientEvent("update", "all", FX_IDX, "fx_die"); + DeleteEntity(GetOwner(), true); // fade out + } + + void client_activate() + { + MODEL_IDX = param1; + FX_DURATION = param2; + FX_DELAY = 0.5; + FX_DURATION("fx_end"); + FX_ACTIVE = 0; + func_rockspawn(); + EmitSound3D(SOUND_START, 7, FUNC_ROCKSPAWN_ORIGIN, 0.8, CHAN_VOLCANO); + } + + void fx_start() + { + FX_ACTIVE = 1; + FX_DELAY = 0.2; + ClientEffect("tempent", "model", MODEL_WORLD, /* TODO: $getcl */ $getcl(MODEL_IDX, "origin"), "setup_flame_circle", "update_flame_circle"); + func_rockspawn(); + ClientEffect("light", "new", FUNC_ROCKSPAWN_ORIGIN, LIGHT_RADIUS, LIGHT_COLOR, FX_DURATION); + ScheduleDelayedEvent(6, "loop_sfx"); + } + + void loop_sfx() + { + if (!(FX_ACTIVE)) return; + func_rockspawn(); + EmitSound3D(SOUND_LOOP, 7, FUNC_ROCKSPAWN_ORIGIN, 0.8, CHAN_VOLCANO); + ScheduleDelayedEvent(6, "loop_sfx"); + } + + void volcano_fire_create() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.7); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-40, 40), Random(-40, 40), Random(230, 270))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0.5); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + } + + void setup_flame_circle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "body", FLAME_CIRCLE_BODY); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "scale", 7); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + } + + void update_flame_circle() + { + if ((FX_ACTIVE)) + { + ClientEffect("tempent", "set_current_prop", "origin", /* TODO: $getcl */ $getcl(MODEL_IDX, "origin")); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + } + + void setup_smoke() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 4); + ClientEffect("tempent", "set_current_prop", "framerate", RandomInt(1, 2)); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 240); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 170, 170)); + ClientEffect("tempent", "set_current_prop", "gravity", -0.055); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + } + + void update_smoke() + { + if ((GetGameTime() - "game.tempent.fuser1") >= 0.1) + { + string L_SCALE = ("game.tempent.scale" + 0.04); + string L_VEL = "game.tempent.velocity"; + L_VEL += "y"; + L_VEL += "x"; + ClientEffect("tempent", "set_current_prop", "scale", L_SCALE); + ClientEffect("tempent", "set_current_prop", "velocity", L_VEL); + ClientEffect("tempent", "set_current_prop", "fuser1", GetGameTime()); + } + } + + void fx_end() + { + FX_ACTIVE = 0; + FX_DELAY = 0.5; + func_rockspawn(); + EmitSound3D(SOUND_LOOP, 0, FUNC_ROCKSPAWN_ORIGIN, 0.8, CHAN_VOLCANO); + ScheduleDelayedEvent(6.0, "fx_die"); + } + + void fx_die() + { + RemoveScript(); + } + + void func_rockspawn() + { + if ((true)) + { + string L_ORIGIN = GetEntityOrigin(GetOwner()); + } + else + { + string L_ORIGIN = /* TODO: $getcl */ $getcl(MODEL_IDX, "origin"); + } + L_ORIGIN += "z"; + FUNC_ROCKSPAWN_ORIGIN = L_ORIGIN; + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/tnt_bomb.as b/scripts/angelscript/monsters/summon/tnt_bomb.as new file mode 100644 index 00000000..cad37b4f --- /dev/null +++ b/scripts/angelscript/monsters/summon/tnt_bomb.as @@ -0,0 +1,185 @@ +#pragma context server + +namespace MS +{ + +class TntBomb : CGameScript +{ + float BOMB_DURATION; + string CL_INDEX; + int GROUND_PULSE; + int IS_ACTIVE; + string MY_OWNER; + string NEXT_DMG; + int N_DMG_TIMES; + string OLD_SPEED; + int PLAYING_DEAD; + string SOUND_EXPLODE; + string SOUND_FUSE_LOOP; + string SPRITE_EXPLODE; + string START_VEL; + string TOUCH_TARG; + + TntBomb() + { + SPRITE_EXPLODE = "bigsmoke.spr"; + SOUND_EXPLODE = "weapons/explode3.wav"; + SOUND_FUSE_LOOP = "monsters/dwarf_bomber/fuse_loop.wav"; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + START_VEL = param2; + SetCallback("touch", "enable"); + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.01, "boost_and_scan"); + BOMB_DURATION = Random(5.0, 10.0); + Effect("beam", "follow", "lgtning.spr", GetOwner(), 1, 1, BOMB_DURATION, 200, Vector3(255, 0, 0)); + ScheduleDelayedEvent(0.01, "setup_fx"); + BOMB_DURATION("go_splodie"); + } + + void setup_fx() + { + ClientEvent("new", "all", "monsters/summon/tnt_bomb_cl", GetEntityIndex(GetOwner()), BOMB_DURATION); + LogDebug("setup_fx"); + CL_INDEX = "game.script.last_sent_id"; + SetProp(GetOwner(), "avelocity", /* TODO: $relvel */ $relvel(0, 60, 0)); + // svplaysound: svplaysound 1 5 SOUND_FUSE_LOOP + EmitSound(1, 5, SOUND_FUSE_LOOP); + } + + void OnSpawn() override + { + SetName("explosives"); + SetModel("monsters/dwarf_bomber_tnt.mdl"); + SetWidth(8); + SetHeight(8); + SetGravity(2); + SetIdleAnim("tnt_idle"); + SetProp(GetOwner(), "movetype", "const.movetype.bounce"); + SetProp(GetOwner(), "friction", 0.2); + SetInvincible(true); + SetRace("hated"); + PLAYING_DEAD = 1; + SetMonsterClip(0); + } + + void boost_and_scan() + { + AddVelocity(GetOwner(), START_VEL); + OLD_SPEED = GetEntitySpeed(GetOwner()); + N_DMG_TIMES = 0; + GROUND_PULSE = 0; + monitor_speed(); + } + + void monitor_speed() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "monitor_speed"); + string CUR_SPEED = GetEntitySpeed(GetOwner()); + if (CUR_SPEED < 200) + { + if (OLD_SPEED < 200) + { + } + go_splodie(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string MY_GROUND_Z = /* TODO: $get_ground_height */ $get_ground_height(GetMonsterProperty("origin")); + MY_Z -= MY_GROUND_Z; + if (MY_Z < 10) + { + GROUND_PULSE += 1; + EmitSound(GetOwner(), 0, "debris/bustmetal2.wav", 10); + if (GROUND_PULSE > 2) + { + } + go_splodie(); + } + OLD_SPEED = CUR_SPEED; + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(IS_ACTIVE)) return; + TOUCH_TARG = param1; + ScheduleDelayedEvent(0.01, "damage_touched"); + } + + void damage_touched() + { + if (!(GetGameTime() > NEXT_DMG)) return; + NEXT_DMG = GetGameTime(); + NEXT_DMG += 0.25; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + ScheduleDelayedEvent(0.1, "go_splodie"); + } + + void go_splodie() + { + if (CL_INDEX > 0) + { + ClientEvent("update", "all", CL_INDEX, "end_fx"); + } + // svplaysound: svplaysound 1 0 SOUND_FUSE_LOOP + EmitSound(1, 0, SOUND_FUSE_LOOP); + Effect("tempent", "spray", SPRITE_EXPLODE, GetMonsterProperty("origin"), 0, 1, 0, 0); + SetModel("none"); + string DMG_AMT = GetEntityProperty(MY_OWNER, "scriptvar"); + if (GetEntityProperty(MY_OWNER, "dmgmulti") > 0) + { + DMG_AMT *= GetEntityProperty(MY_OWNER, "dmgmulti"); + } + XDoDamage(GetEntityOrigin(GetOwner()), 128, DMG_AMT, 0, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:push_loop"); + EmitSound(GetOwner(), 0, SOUND_EXPLODE, 10); + IS_ACTIVE = 0; + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (param1 == MY_OWNER) + { + int L_REDUCE = 1; + } + if (GetRelationship(MY_OWNER) == "ally") + { + int L_REDUCE = 1; + } + if (!(L_REDUCE)) + { + if (GetRelationship(MY_OWNER) == "enemy") + { + } + CallExternal(MY_OWNER, "ext_hittarget", param1); + } + if (!(L_REDUCE)) return; + SetDamage("dmg"); + return; + } + + void push_loop_dodamage() + { + string CUR_TARGET = param2; + string TARGET_ORG = GetEntityOrigin(CUR_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + SetVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 110))); + if (param2 == MY_OWNER) + { + CallExternal(MY_OWNER, "friendly_fire"); + } + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/tnt_bomb_cl.as b/scripts/angelscript/monsters/summon/tnt_bomb_cl.as new file mode 100644 index 00000000..03562409 --- /dev/null +++ b/scripts/angelscript/monsters/summon/tnt_bomb_cl.as @@ -0,0 +1,66 @@ +#pragma context server + +namespace MS +{ + +class TntBombCl : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + string GLOW_COLOR; + int GLOW_RAD; + string LIGHT_IDX; + + TntBombCl() + { + GLOW_RAD = 64; + GLOW_COLOR = Vector3(255, 64, 0); + } + + void client_activate() + { + LogDebug("*** $currentscript PARAM1 PARAM2"); + FX_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + sparks_loop(); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), GLOW_RAD, GLOW_COLOR, FX_DURATION); + LIGHT_IDX = "game.script.last_light_id"; + SetCallback("render", "enable"); + FX_DURATION("end_fx"); + } + + void sparks_loop() + { + if (!(FX_ACTIVE)) return; + Random(0_1, 0_5)("sparks_loop"); + ClientEffect("spark", FX_OWNER, 0); + } + + void game_prerender() + { + if ((FX_ACTIVE)) + { + ClientEffect("light", LIGHT_IDX, /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), GLOW_RAD, GLOW_COLOR, 1.0); + } + else + { + ClientEffect("light", LIGHT_IDX, /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), 0, Vector3(0, 0, 0), 1.0); + } + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/tomahawk.as b/scripts/angelscript/monsters/summon/tomahawk.as new file mode 100644 index 00000000..440cd760 --- /dev/null +++ b/scripts/angelscript/monsters/summon/tomahawk.as @@ -0,0 +1,167 @@ +#pragma context server + +#include "monsters/summon/bludgeon_axe.as" + +namespace MS +{ + +class Tomahawk : CGameScript +{ + string DMG_BASE; + string GAME_PVP; + int IS_ACTIVE; + string ITEM_ID; + string MY_DEST; + string MY_OWNER; + string NPC_NOCLIP_DEST; + string OWNER_HALFHEIGHT; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string TOM_TYPE; + string T_BOX; + + void OnSpawn() override + { + SetName("Tomahawk"); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 39); + SetIdleAnim("spin_vertical_norm"); + SetMoveAnim("spin_vertical_norm"); + SetSolid("none"); + SetWidth(32); + SetFly(true); + SetHeight(32); + SetBloodType("none"); + SetInvincible(true); + SetMonsterClip(0); + SetRace("demon"); + PLAYING_DEAD = 1; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_DEST = param2; + DMG_BASE = param3; + TOM_TYPE = param5; + GAME_PVP = "game.pvp"; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + SetEntityOrigin(GetOwner(), GetEntityProperty(MY_OWNER, "attachpos")); + ITEM_ID = MY_OWNER; + if ((OWNER_ISPLAYER)) + { + ITEM_ID = param4; + string DOT_SKILL = "spellcasting."; + if (TOM_TYPE != "cold") + { + DOT_SKILL += TOM_TYPE; + } + else + { + DOT_SKILL += "ice"; + } + if (TOM_TYPE != "dark") + { + if (TOM_TYPE == "cold") + { + DOT_BASE = GetSkillLevel(MY_OWNER, "spellcasting.ice"); + DOT_BASE *= 0.5; + } + if (TOM_TYPE == "lightning") + { + DOT_BASE = GetSkillLevel(MY_OWNER, "spellcasting.lightning"); + DOT_BASE *= 0.75; + } + if (TOM_TYPE == "fire") + { + DOT_BASE = GetSkillLevel(MY_OWNER, "spellcasting.fire"); + } + if (TOM_TYPE == "poison") + { + DOT_BASE = GetSkillLevel(MY_OWNER, "spellcasting.affliction"); + } + } + } + OWNER_HALFHEIGHT = GetEntityHeight(MY_OWNER); + if (!(OWNER_ISPLAYER)) + { + OWNER_HALFHEIGHT /= 2; + } + SetRace(GetEntityRace(MY_OWNER)); + NPC_NOCLIP_DEST = MY_DEST; + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "damage_loop"); + set_skin(); + } + + void set_skin() + { + if (TOM_TYPE == "fire") + { + SetProp(GetOwner(), "skin", 0); + } + if (TOM_TYPE == "cold") + { + SetProp(GetOwner(), "skin", 1); + } + if (TOM_TYPE == "lightning") + { + SetProp(GetOwner(), "skin", 2); + } + if (TOM_TYPE == "poison") + { + SetProp(GetOwner(), "skin", 3); + } + if (TOM_TYPE == "dark") + { + SetProp(GetOwner(), "skin", 4); + } + } + + void damage_loop() + { + ScheduleDelayedEvent(0.2, "damage_loop"); + T_BOX = FindEntitiesInSphere("enemy", SCAN_RAD); + if (!(T_BOX != "none")) return; + for (int i = 0; i < GetTokenCount(T_BOX, ";"); i++) + { + damage_targets(); + } + } + + void damage_targets() + { + string CUR_TARGET = GetToken(T_BOX, i, ";"); + if ((IsValidPlayer(CUR_TARGET))) + { + if ((OWNER_ISPLAYER)) + { + } + if (GAME_PVP < 1) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + XDoDamage(CUR_TARGET, "direct", DMG_BASE, 1.0, MY_OWNER, MY_OWNER, "axehandling", TOM_TYPE); + if (TOM_TYPE == "cold") + { + ApplyEffect(CUR_TARGET, "effects/dot_cold", 5, MY_OWNER, DOT_BASE); + } + if (TOM_TYPE == "fire") + { + ApplyEffect(CUR_TARGET, "effects/dot_fire", 5, MY_OWNER, DOT_BASE); + } + if (TOM_TYPE == "lightning") + { + ApplyEffect(CUR_TARGET, "effects/dot_lightning", 5, MY_OWNER, DOT_BASE); + } + if (TOM_TYPE == "poison") + { + ApplyEffect(CUR_TARGET, "effects/dot_poison", 10.0, MY_OWNER, DOT_BASE); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/tornado.as b/scripts/angelscript/monsters/summon/tornado.as new file mode 100644 index 00000000..e30fd338 --- /dev/null +++ b/scripts/angelscript/monsters/summon/tornado.as @@ -0,0 +1,182 @@ +#pragma context server + +#include "monsters/base_propelled.as" + +namespace MS +{ + +class Tornado : CGameScript +{ + int CUR_DMGVICT; + string DMG_BASE; + string GAME_PVP; + int IS_ACTIVE; + string MONSTER_MODEL; + string MOVE_TARG; + string MY_DURATION; + string MY_OWNER; + int NPC_HACKED_MOVE_SPEED; + int N_VICTIMS; + string OWNER_ISPLAYER; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_WIND1; + string SOUND_WIND2; + string SOUND_WIND3; + + Tornado() + { + NPC_HACKED_MOVE_SPEED = 200; + MONSTER_MODEL = "weapons/magic/tornado.mdl"; + SOUND_WIND1 = "magic/vent1.wav"; + SOUND_WIND2 = "magic/vent2.wav"; + SOUND_WIND3 = "magic/vent3.wav"; + SOUND_ATTACK1 = "magic/gusts1.wav"; + SOUND_ATTACK2 = "magic/gusts2.wav"; + Precache(MONSTER_MODEL); + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.5); + if ((IS_ACTIVE)) + { + } + int RND_MOVE = RandomInt(1, 2); + if (RND_MOVE == 1) + { + if (MOVE_TARG != "unset") + { + SetMoveDest(MOVE_TARG); + } + if (MOVE_TARG == "unset") + { + int RND_MOVE = 2; + } + } + if (RND_MOVE == 2) + { + int RND_ANG = RandomInt(0, 359); + string MOVE_DEST = GetMonsterProperty("origin"); + MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(MOVE_DEST); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(Random(4, 6)); + if ((IS_ACTIVE)) + { + } + // PlayRandomSound from: SOUND_WIND1, SOUND_WIND2, SOUND_WIND3 + array sounds = {SOUND_WIND1, SOUND_WIND2, SOUND_WIND3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + DMG_BASE = param2; + MY_DURATION = param3; + GAME_PVP = "game.pvp"; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + SetRace(GetEntityRace(MY_OWNER)); + MOVE_TARG = GetEntityProperty(MY_OWNER, "scriptvar"); + IS_ACTIVE = 1; + summon_cycle(); + MY_DURATION("end_summon"); + } + + void OnSpawn() override + { + SetName("Tornado"); + SetModel(MONSTER_MODEL); + SetInvincible(true); + SetHealth(1); + SetRoam(true); + SetWidth(64); + SetHeight(128); + SetSolid("none"); + SetMonsterClip(0); + N_VICTIMS = 0; + CUR_DMGVICT = 0; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 180); + } + + void summon_cycle() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "summon_cycle"); + if (MOVE_TARG == "unset") + { + if ((false)) + { + } + check_vict(GetEntityIndex(m_hLastSeen)); + if (!(ALREADY_MINE)) + { + MOVE_TARG = GetEntityIndex(m_hLastSeen); + } + } + DoDamage(/* TODO: $relpos */ $relpos(0, 30, 0), 128, 0.0, 1.0, 0.0); + } + + void game_dodamage() + { + if (!(IS_ACTIVE)) return; + if (!(GetRelationship(MY_OWNER) == "enemy")) return; + if ((OWNER_ISPLAYER)) + { + if (GAME_PVP == 0) + { + } + if ((IsValidPlayer(param2))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + CallExternal(MY_OWNER, "ext_dodamage", param2, "direct", DMG_BASE, 1.0, MY_OWNER, "magic"); + int RND_DIR = RandomInt(1, 2); + if (RND_DIR == 1) + { + int RND_DIR = 1000; + } + if (RND_DIR == 2) + { + int RND_DIR = -1000; + } + int RND_FBDIR = RandomInt(1, 2); + if (RND_FBDIR == 1) + { + int RND_FBDIR = 1000; + } + if (RND_FBDIR == 2) + { + int RND_FBDIR = -1000; + } + int RND_LIFT = RandomInt(300, 1000); + LogDebug("temp RND_DIR RND_LIFT"); + SetVelocity(param2, /* TODO: $relvel */ $relvel(RND_DIR, RND_FBDIR, RND_LIFT)); + } + + void end_summon() + { + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", 0); + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/uber_blizzard.as b/scripts/angelscript/monsters/summon/uber_blizzard.as new file mode 100644 index 00000000..db155d11 --- /dev/null +++ b/scripts/angelscript/monsters/summon/uber_blizzard.as @@ -0,0 +1,201 @@ +#pragma context server + +namespace MS +{ + +class UberBlizzard : CGameScript +{ + string BLIZ_DENSITY; + string BLIZ_WIDTH; + string FLAKE_HEIGHT; + string FREEZE_CHANCE; + int IS_ACTIVE; + int LOOP_COUNT; + string MY_BASE_DMG; + string MY_DURATION; + string MY_OWNER; + string MY_RADIUS; + string MY_SCRIPT_IDX; + string OWNER_ISPLAYER; + int PLAYING_DEAD; + string ROOF_HEIGHT; + string SHARD_HEIGHT; + string SNOW_CENTER; + int SNOW_ON; + int vel; + + void OnRepeatTimer() + { + SetRepeatDelay(0.2); + if ((SNOW_ON)) + { + } + for (int i = 0; i < BLIZ_DENSITY; i++) + { + make_flakes(); + } + } + + void game_dynamically_created() + { + MY_OWNER = param1; + MY_BASE_DMG = param2; + MY_DURATION = param3; + MY_RADIUS = param4; + FREEZE_CHANCE = param5; + OWNER_ISPLAYER = IsValidPlayer(MY_OWNER); + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), /* TODO: $get_sky_height */ $get_sky_height(GetMonsterProperty("origin")), MY_RADIUS, 10); + MY_SCRIPT_IDX = "game.script.last_sent_id"; + IS_ACTIVE = 1; + scan_attack(); + MY_DURATION("end_summon"); + } + + void OnSpawn() override + { + SetName("Blizzard"); + SetRace("beloved"); + SetInvincible(true); + SetHealth(1); + PLAYING_DEAD = 1; + } + + void scan_attack() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(10.0, "scan_attack"); + // TODO: getents any MY_RADIUS + if (!(getCount > 0)) return; + LOOP_COUNT = 0; + if (!(IsEntityAlive(MY_OWNER))) return; + for (int i = 0; i < getCount; i++) + { + check_attack(); + } + } + + void check_attack() + { + LOOP_COUNT += 1; + if (LOOP_COUNT == 1) + { + string CHECK_ENT = getEnt1; + } + if (LOOP_COUNT == 2) + { + string CHECK_ENT = getEnt2; + } + if (LOOP_COUNT == 3) + { + string CHECK_ENT = getEnt3; + } + if (LOOP_COUNT == 4) + { + string CHECK_ENT = getEnt4; + } + if (LOOP_COUNT == 5) + { + string CHECK_ENT = getEnt5; + } + if (LOOP_COUNT == 6) + { + string CHECK_ENT = getEnt6; + } + if (LOOP_COUNT == 7) + { + string CHECK_ENT = getEnt7; + } + if (LOOP_COUNT == 8) + { + string CHECK_ENT = getEnt8; + } + if (LOOP_COUNT == 9) + { + string CHECK_ENT = getEnt9; + } + if (!(GetRelationship(CHECK_ENT) == "enemy")) return; + if ((OWNER_ISPLAYER)) + { + if ("game.pvp" == 0) + { + } + if ((IsValidPlayer(CHECK_ENT))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityRange(CHECK_ENT) < MY_RADIUS)) return; + if (!(RandomInt(1, 100) < FREEZE_CHANCE)) return; + ApplyEffect(CHECK_ENT, "effects/dot_cold", 9.5, MY_OWNER, MY_BASE_DMG); + } + + void end_summon() + { + IS_ACTIVE = 0; + ClientEvent("remove", "all", MY_SCRIPT_IDX); + ScheduleDelayedEvent(0.2, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void client_activate() + { + SNOW_CENTER = param1; + ROOF_HEIGHT = param2; + BLIZ_WIDTH = param3; + BLIZ_DENSITY = param4; + ROOF_HEIGHT = (ROOF_HEIGHT).z; + FLAKE_HEIGHT = ROOF_HEIGHT; + SHARD_HEIGHT = ROOF_HEIGHT; + SHARD_HEIGHT -= 64; + SNOW_ON = 1; + } + + void make_flakes() + { + string NEGBLIZ_WIDTH = BLIZ_WIDTH; + NEGBLIZ_WIDTH *= -1; + int x = RandomInt(NEGBLIZ_WIDTH, BLIZ_WIDTH); + int y = RandomInt(NEGBLIZ_WIDTH, BLIZ_WIDTH); + START_POS += SNOW_CENTER; + ClientEffect("tempent", "sprite", "snow1.spr", START_POS, "setup_blizzardflake"); + string NEGBLIZ_WIDTH = BLIZ_WIDTH; + NEGBLIZ_WIDTH *= -1; + int x = RandomInt(NEGBLIZ_WIDTH, BLIZ_WIDTH); + int y = RandomInt(NEGBLIZ_WIDTH, BLIZ_WIDTH); + START_POS += SNOW_CENTER; + ClientEffect("tempent", "sprite", "glassgibs.mdl", START_POS, "setup_hailshard"); + } + + void setup_blizzardflake() + { + vel = RandomInt(-50, 50); + float FLAKE_GRAv = Random(0.2, 2.1); + float FLAKE_SCALE = Random(1, 3); + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", FLAKE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", FLAKE_GRAv); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(vel, vel, -200)); + } + + void setup_hailshard() + { + float SHARD_SIZE = Random(1.0, 5.0); + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", SHARD_SIZE); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(90, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 3); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(-10, -10, -100)); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/volcano_troll.as b/scripts/angelscript/monsters/summon/volcano_troll.as new file mode 100644 index 00000000..861309cc --- /dev/null +++ b/scripts/angelscript/monsters/summon/volcano_troll.as @@ -0,0 +1,192 @@ +#pragma context server + +#include "monsters/summon/base_aoe.as" + +namespace MS +{ + +class VolcanoTroll : CGameScript +{ + string ANIM_DEATH; + int AOE_FREQ; + int AOE_RADIUS; + string CAST_BY_PLAYER; + string CLIENT_DURATION; + int EFFECT_DURATION; + int ERUPTING; + int FX_ACTIVE; + string FX_ORIGIN; + string LIGHT_COLOR; + float LIGHT_DURATION; + int LIGHT_RADIUS; + int LOOP_DELAY; + string MODEL_WORLD; + string MY_OWNER; + int PLAYING_DEAD; + int ROCK_START_HEIGHT; + string SOUND_LOOP; + string SOUND_START; + string SPRITE_BURN; + string local.cl.gravity; + string local.cl.origin; + string local.cl.velocity; + + VolcanoTroll() + { + ANIM_DEATH = "down"; + SOUND_START = "magic/volcano_start.wav"; + SOUND_LOOP = "magic/volcano_loop.wav"; + MODEL_WORLD = "misc/volcano.mdl"; + LOOP_DELAY = 0; + Precache("misc/volcano.mdl"); + Precache(SOUND_START); + Precache(SOUND_LOOP); + AOE_FREQ = 2; + AOE_RADIUS = 32; + ROCK_START_HEIGHT = 66; + // TODO: UNCONVERTED: [client] repeatdelay 6 + EmitSound(GetOwner(), CHAN_BODY, SOUND_LOOP, 7); + MODEL_WORLD = "weapons/projectiles.mdl"; + SPRITE_BURN = "fire1_fixed.spr"; + LIGHT_RADIUS = 64; + LIGHT_COLOR = Vector3(255, 0, 0); + LIGHT_DURATION = 0.8; + } + + void OnSpawn() override + { + SetHealth(1500); + SetInvincible(true); + SetSolid("none"); + SetWidth(32); + SetHeight(64); + SetName("Trollcano!"); + SetRoam(false); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetModel(MODEL_WORLD); + SetBloodType("none"); + PlayAnim("hold", "up"); + PLAYING_DEAD = 1; + ScheduleDelayedEvent(2, "volcano_start"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 50, 10, 6, 512); + EmitSound(GetOwner(), 0, SOUND_START, 7); + } + + void game_dynamically_created() + { + CAST_BY_PLAYER = IsValidPlayer(param1); + MY_OWNER = param1; + EFFECT_DURATION = 25; + CLIENT_DURATION = EFFECT_DURATION; + CLIENT_DURATION -= 1; + EFFECT_DURATION("volcano_death"); + ClientEvent("persist", "all", currentscript, GetEntityOrigin(GetOwner()), CLIENT_DURATION, GetEntityIndex(MY_OWNER)); + } + + void volcano_start() + { + ERUPTING = 1; + } + + void volcano_death() + { + ERUPTING = 0; + PlayAnim("hold", "down"); + ScheduleDelayedEvent(3, "volcano_fadeout"); + } + + void volcano_fadeout() + { + EmitSound(GetOwner(), CHAN_BODY, SOUND_LOOP, "game.sound.silentvol"); + DeleteEntity(GetOwner(), true); // fade out + } + + void client_activate() + { + local.cl.origin = param1; + local.cl.origin += "z"; + string DIE_TIME = param2; + DIE_TIME("volcano_done"); + DIE_TIME += 10; + DIE_TIME("volcano_die"); + FX_ACTIVE = 1; + FX_ORIGIN = local.cl.origin; + volcano_shoot_loop(); + } + + void volcano_shoot_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.25, "volcano_shoot_loop"); + float xangle = Random(-50, -90); + float yangle = Random(-180, 180); + Vector3 ROCK_ANGS = Vector3(xangle, yangle, 0); + string ROCK_VEL = /* TODO: $relvel */ $relvel(ROCK_ANGS, Vector3(0, 500, 0)); + volcono_shoot_rock(ROCK_VEL, Random(0.5, 0.8)); + } + + void volcano_done() + { + FX_ACTIVE = 0; + } + + void volcano_die() + { + FX_ACTIVE = 0; + EmitSound(GetOwner(), CHAN_BODY, SOUND_LOOP, "game.sound.silentvol"); + RemoveScript(); + } + + void volcono_shoot_rock() + { + local.cl.velocity = param1; + local.cl.gravity = param2; + ClientEffect("tempent", "model", MODEL_WORLD, local.cl.origin, "volcano_rock_create", "volcano_rock_update", "volcano_rock_collide"); + for (int i = 0; i < 4; i++) + { + makefire_loop(local.cl.origin); + } + } + + void volcano_rock_create() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10); + ClientEffect("tempent", "set_current_prop", "body", 69); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "velocity", local.cl.velocity); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0.4); + ClientEffect("tempent", "set_current_prop", "gravity", local.cl.gravity); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + Vector3 L_ANG = Vector3(Random(0, 359), Random(0, 359), 180); + ClientEffect("tempent", "set_current_prop", "angles", L_ANG); + ClientEffect("tempent", "set_current_prop", "framerate", 0.6); + ClientEffect("tempent", "set_current_prop", "frames", 16); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + } + + void volcano_rock_collide() + { + ClientEffect("tempent", "set_current_prop", "framerate", 0); + } + + void makefire_loop() + { + ClientEffect("tempent", "sprite", SPRITE_BURN, param1, "volcano_fire_create"); + } + + void volcano_fire_create() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-200, 200), Random(-200, 200), Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.6, 1.0)); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + } + +} + +} diff --git a/scripts/angelscript/monsters/summon/zy_eye.as b/scripts/angelscript/monsters/summon/zy_eye.as new file mode 100644 index 00000000..ff07b04b --- /dev/null +++ b/scripts/angelscript/monsters/summon/zy_eye.as @@ -0,0 +1,139 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class ZyEye : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string BEAM_DAMAGE; + int IS_UNHOLY; + string MY_OWNER; + int NPC_GIVE_EXP; + int RENDER_AMT; + int RUN_REQ; + int SHOCK_DMG; + float SHOCK_DUR; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + + ZyEye() + { + IS_UNHOLY = 1; + ANIM_DEATH = "spin_vertical_norm"; + ANIM_IDLE = "spin_horizontal_slow"; + ANIM_WALK = "spin_horizontal_slow"; + ANIM_RUN = "spin_horizontal_slow"; + ANIM_ATTACK = "spin_horizontal_slow"; + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + SHOCK_DMG = 100; + SHOCK_DUR = 5.0; + RUN_REQ = 30; + NPC_GIVE_EXP = 200; + } + + void OnRepeatTimer() + { + SetRepeatDelay(5.0); + if ((false)) + { + } + Effect("glow", GetOwner(), Vector3(128, 128, 255), 64, 3.0, 3.0); + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ApplyEffect(m_hLastSeen, "effects/dot_lightning", SHOCK_DUR, GetEntityIndex(GetOwner()), BEAM_DAMAGE); + npcatk_flee(m_hLastSeen, 9999, 10.0); + string BEAM_START = GetMonsterProperty("origin"); + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 64)); + Effect("beam", "end", "lgtning.spr", 30, BEAM_START, m_hLastSeen, 0, Vector3(255, 255, 255), 200, 30, 1.5); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(1.0); + if (RENDER_AMT == 255) + { + } + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void game_dynamically_created() + { + MY_OWNER = GetEntityIndex(param1); + SetHealth(param2); + BEAM_DAMAGE = param3; + npcatk_flee(MY_OWNER, 9999, 5.0); + } + + void OnSpawn() override + { + SetName("Eye of Zygoli"); + SetModel("weapons/projectiles.mdl"); + SetModelBody(0, 10); + SetIdleAnim("spin_horizontal_slow"); + SetMoveAnim("spin_horizontal_slow"); + SetWidth(32); + SetHeight(32); + SetRoam(true); + SetDamageResistance("holy", 2.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("pierce", 2.0); + SetRace("demon"); + SetInvincible(true); + RENDER_AMT = 1; + ScheduleDelayedEvent(0.1, "remove_invuln"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + npcatk_suspend_ai(); + } + + void remove_invuln() + { + SetInvincible(false); + fade_in(); + EmitSound(GetOwner(), 0, "magic/spawn_loud.wav", 10); + } + + void fade_in() + { + if (!(RENDER_AMT < 255)) return; + RENDER_AMT += 1; + ScheduleDelayedEvent(0.1, "fade_in"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_AMT); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (param1 > RUN_REQ) + { + npcatk_flee(m_hLastStruck, 9999, 15.0); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(MY_OWNER, "ext_eye_died"); + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner())); + } + + void zygoli_died() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/monsters/swamp_keeper.as b/scripts/angelscript/monsters/swamp_keeper.as new file mode 100644 index 00000000..15942245 --- /dev/null +++ b/scripts/angelscript/monsters/swamp_keeper.as @@ -0,0 +1,324 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SwampKeeper : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + string ANIM_ATTACK3; + string ANIM_CUST_FLINCH; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_POINT; + string ANIM_RALLY; + string ANIM_RAWR; + string ANIM_RUN; + string ANIM_THROW; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DID_ALERT; + int DMG_GLOB; + int DMG_SLASH; + float FREQ_THROW; + int GLOB_EFFECT_DOT; + float GLOB_EFFECT_DUR; + string GLOB_EFFECT_TYPE; + string HALF_HP; + string LAST_TARGET; + int MOVE_RANGE; + string NEXT_CHEER; + string NEXT_FLINCH; + string NEXT_HEARD_ALERT; + string NEXT_THROW; + int NPC_BASE_EXP; + int RUN_STEP; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWING1; + string SOUND_SWING2; + + SwampKeeper() + { + ANIM_POINT = "point"; + ANIM_RALLY = "rally"; + ANIM_RAWR = "idle_scream"; + ANIM_WALK = "walk_lx"; + ANIM_IDLE = "idle_base"; + ANIM_RUN = "run_lx"; + ANIM_ATTACK = "melee1"; + ANIM_ATTACK1 = "melee1"; + ANIM_ATTACK2 = "melee1b"; + ANIM_ATTACK3 = "melee2"; + ANIM_THROW = "throw_rock"; + ANIM_CUST_FLINCH = "duck"; + ANIM_DEATH = "death"; + NPC_BASE_EXP = 1500; + DMG_SLASH = 400; + DMG_GLOB = 400; + FREQ_THROW = 8.0; + ATTACK_MOVERANGE = 45; + MOVE_RANGE = 45; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 100; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "monsters/keeper/c_troll_hit1.wav"; + SOUND_PAIN2 = "monsters/keeper/c_troll_hit2.wav"; + SOUND_ALERT1 = "monsters/keeper/c_troll_bat1.wav"; + SOUND_ALERT2 = "monsters/keeper/c_troll_bat2.wav"; + SOUND_ALERT3 = "monsters/keeper/c_troll_bat2_rev.wav"; + SOUND_ATTACK1 = "monsters/keeper/c_troll_atk1.wav"; + SOUND_ATTACK2 = "monsters/keeper/c_troll_atk2.wav"; + SOUND_ATTACK3 = "monsters/keeper/c_troll_atk3.wav"; + SOUND_SWING1 = "zombie/claw_miss1.wav"; + SOUND_SWING2 = "zombie/claw_miss2.wav"; + SOUND_DEATH = "monsters/keeper/c_troll_dead.wav"; + GLOB_EFFECT_TYPE = "effects/dot_poison_blind"; + GLOB_EFFECT_DOT = 150; + GLOB_EFFECT_DUR = 3.0; + Precache("xfireball3.spr"); + } + + void OnSpawn() override + { + SetName("Swamp Keeper"); + SetModel("monsters/keeper.mdl"); + SetHeight(64); + SetWidth(32); + SetRoam(true); + SetHealth(4000); + SetDamageResistance("all", 0.5); + SetDamageResistance("poison", 0.5); + SetRace("demon"); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetHearingSensitivity(8); + RUN_STEP = 0; + ScheduleDelayedEvent(2.0, "finalize_me"); + } + + void finalize_me() + { + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void npc_targetsighted() + { + if ((DID_ALERT)) return; + if (!(NPC_IS_TURRET)) + { + npcatk_suspend_roam(2.0); + } + SetMoveDest(m_hAttackTarget); + DID_ALERT = 1; + G_ALERT_CYCLE += 1; + if (!(NPC_IS_TURRET)) + { + NEXT_THROW = GetGameTime(); + NEXT_THROW += FREQ_THROW; + } + if (G_ALERT_CYCLE == 1) + { + PlayAnim("critical", ANIM_POINT); + EmitSound(GetOwner(), 0, SOUND_ALERT2, 10); + } + if (G_ALERT_CYCLE == 2) + { + PlayAnim("critical", ANIM_RALLY); + EmitSound(GetOwner(), 0, SOUND_ALERT1, 10); + } + if (G_ALERT_CYCLE == 3) + { + PlayAnim("critical", ANIM_RAWR); + EmitSound(GetOwner(), 0, SOUND_ALERT3, 10); + } + if (G_ALERT_CYCLE == 3) + { + SetGlobalVar("G_ALERT_CYCLE", 0); + } + } + + void cycle_down() + { + DID_ALERT = 0; + } + + void npc_heard_player() + { + if (!(m_hAttackTarget == "unset")) return; + if (!(GetGameTime() > NEXT_HEARD_ALERT)) return; + NEXT_HEARD_ALERT = GetGameTime(); + NEXT_HEARD_ALERT += 15.0; + EmitSound(GetOwner(), 0, "monsters/keeper/c_troll_slct.wav", 10); + } + + void my_target_died() + { + if (!(param1 == LAST_TARGET)) return; + if (!(GetGameTime() > NEXT_CHEER)) return; + NEXT_CHEER = GetGameTime(); + NEXT_CHEER += 20.0; + PlayAnim("critical", "idle_hit_ground"); + EmitSound(GetOwner(), 0, "monsters/keeper/c_troll_bat2.wav", 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if ((SUSPEND_AI)) return; + if ((IS_FLEEING)) return; + if ((I_R_FROZEN)) return; + LAST_TARGET = m_hAttackTarget; + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if (TARG_RANGE > ATTACK_HITRANGE) + { + if ((false)) + { + } + if (GetGameTime() > NEXT_THROW) + { + } + NEXT_THROW = GetGameTime(); + NEXT_THROW += FREQ_THROW; + if (!(NPC_IS_TURRET)) + { + npcatk_suspend_roam(2.0); + } + PlayAnim("once", ANIM_THROW); + } + if (TARG_RANGE < ATTACK_RANGE) + { + if (TARG_RANGE < ATTACK_MOVERANGE) + { + ANIM_ATTACK = ANIM_ATTACK3; + } + else + { + int RND_ATK = RandomInt(1, 2); + if (RND_ATK == 1) + { + ANIM_ATTACK = ANIM_ATTACK1; + } + if (RND_ATK == 2) + { + ANIM_ATTACK = ANIM_ATTACK2; + } + } + } + } + + void frame_melee_start() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_melee1_strike() + { + // PlayRandomSound from: SOUND_SWING1, SOUND_SWING2 + array sounds = {SOUND_SWING1, SOUND_SWING2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SLASH, 0.8, "slash"); + } + + void frame_melee2_strike() + { + // PlayRandomSound from: SOUND_SWING1, SOUND_SWING2 + array sounds = {SOUND_SWING1, SOUND_SWING2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SLASH, 0.8, "slash"); + } + + void OnDamage(int damage) override + { + if (!(GetEntityHealth(GetOwner()) < HALF_HP)) return; + if (!(GetGameTime() > NEXT_FLINCH)) return; + NEXT_FLINCH = GetGameTime(); + NEXT_FLINCH += 20.0; + npcatk_suspend_ai(1.0); + EmitSound(GetOwner(), 0, SOUND_PAIN1, 10); + PlayAnim("critical", ANIM_CUST_FLINCH); + } + + void set_npc_turret() + { + FREQ_THROW = 2.0; + Random(10_0, 15_0)("taunt_loop"); + } + + void taunt_loop() + { + DID_ALERT = 0; + Random(10_0, 15_0)("taunt_loop"); + } + + void frame_run_step() + { + RUN_STEP += 1; + if (RUN_STEP == 1) + { + EmitSound(GetOwner(), 0, "monsters/keeper/step1.wav", 5); + } + else + { + EmitSound(GetOwner(), 0, "monsters/keeper/step2.wav", 5); + RUN_STEP = 0; + } + } + + void frame_throw_start() + { + EmitSound(GetOwner(), 0, "bullchicken/bc_attack1.wav", 10); + } + + void frame_throw1() + { + EmitSound(GetOwner(), 0, "bullchicken/bc_attack2.wav", 10); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (!(IsValidPlayer(TARG_ORG))) + { + TARG_ORG += "z"; + } + float TARG_DIST = Distance(TARG_ORG, GetMonsterProperty("origin")); + TARG_DIST /= 35; + SetAngles("add_view.pitch"); + float BOMB_SPEED = Random(400, 600); + if (GetEntityRange(m_hAttackTarget) > 800) + { + float BOMB_SPEED = Random(700, 1000); + } + NEXT_THROW = GetGameTime(); + NEXT_THROW += 5.0; + TossProjectile("proj_glob", /* TODO: $relpos */ $relpos(-10, 0, 32), "none", BOMB_SPEED, DMG_GLOB, 0.1, "none"); + } + +} + +} diff --git a/scripts/angelscript/monsters/swamp_ogre.as b/scripts/angelscript/monsters/swamp_ogre.as new file mode 100644 index 00000000..d6518536 --- /dev/null +++ b/scripts/angelscript/monsters/swamp_ogre.as @@ -0,0 +1,449 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SwampOgre : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HEADBUTT; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_RUN_DEFAULT; + string ANIM_SEARCH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WALK_DEFAULT; + string ANIM_WARCRY; + float ATTACK_HITCHANCE; + int CAN_FLINCH; + int DID_WARCRY; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + float FLINCH_CHANCE; + float FLINCH_DELAY; + int FLINCH_HEALTH; + float HEADBUTT_CHANCE; + int HEADBUTT_DAMAGE; + int HEADBUTT_DELAY; + float HEADBUTT_FREQ; + int HEADBUTT_ON; + int LEAP_AWAY_INTERVAL; + int LEAP_DAMAGE; + int LEAP_ENABLED; + int LEAP_RANGE_TOOCLOSE; + int LEAP_RANGE_TOOFAR; + float LEAP_STUNCHANCE; + string MONSTER_MODEL; + string NEXT_LEAP_AWAY; + string NEXT_LEAP_AWAY_HP; + float NPC_DELAYING_UNSTUCK; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + float ORC_HOP_DELAY; + int ORC_JUMPING; + int ORC_JUMP_THRESH; + int RUN_STEP; + int SEARCH_ANIM_DELAY; + string SOUND_DEATH; + string SOUND_FLINCH; + string SOUND_HEADBUTT; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_LEAP; + string SOUND_LEAP_LAND; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SWIPEHIT1; + string SOUND_SWIPEHIT2; + string SOUND_SWIPEMISS1; + string SOUND_SWIPEMISS2; + string SOUND_WARCRY; + string SWIPE_ATK; + int SWIPE_ATTACK; + int SWIPE_DAMAGE; + int WEAK_THRESHOLD; + + SwampOgre() + { + ORC_HOP_DELAY = 1.0; + ORC_JUMP_THRESH = 80; + NPC_GIVE_EXP = 400; + ANIM_SEARCH = "idle_look"; + ANIM_IDLE = "idle1"; + ANIM_SWIPE = "attack1"; + ANIM_HEADBUTT = "attack2"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "jump"; + ANIM_WALK_DEFAULT = "walk"; + ANIM_RUN_DEFAULT = "run1"; + ANIM_DEATH = "dieforward"; + ANIM_WARCRY = "warcry"; + ANIM_FLINCH = "bigflinch"; + ANIM_WALK = ANIM_WALK_DEFAULT; + ANIM_RUN = ANIM_RUN_DEFAULT; + ANIM_ATTACK = ANIM_SWIPE; + SOUND_IDLE1 = "bullchicken/bc_idle1.wav"; + SOUND_IDLE2 = "bullchicken/bc_idle2.wav"; + SOUND_IDLE3 = "bullchicken/bc_idle3.wav"; + SOUND_IDLE4 = "bullchicken/bc_idle4.wav"; + SOUND_IDLE5 = "bullchicken/bc_idle5.wav"; + SOUND_DEATH = "bullchicken/bc_die1.wav"; + SOUND_HEADBUTT = "bullchicken/bc_spithit1.wav"; + SOUND_SWIPEHIT1 = "zombie/claw_strike1.wav"; + SOUND_SWIPEHIT2 = "zombie/claw_strike2.wav"; + SOUND_SWIPEMISS1 = "zombie/claw_miss1.wav"; + SOUND_SWIPEMISS2 = "zombie/claw_miss2.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STEP1 = "player/pl_dirt1.wav"; + SOUND_STEP2 = "player/pl_dirt2.wav"; + SOUND_PAIN_WEAK = "bullchicken/bc_pain2.wav"; + SOUND_PAIN_STRONG = "bullchicken/bc_pain1.wav"; + SOUND_WARCRY = "bullchicken/bc_attackgrowl3.wav"; + SOUND_LEAP = "bullchicken/bc_attackgrowl2.wav"; + SOUND_LEAP_LAND = "weapons/g_bounce2.wav"; + SOUND_FLINCH = "bullchicken/bc_pain3.wav"; + Precache(SOUND_DEATH); + WEAK_THRESHOLD = 1000; + SWIPE_DAMAGE = "$rand(50,75)"; + HEADBUTT_CHANCE = 1.0; + HEADBUTT_FREQ = 7.0; + HEADBUTT_DAMAGE = "$rand(50,75)"; + LEAP_DAMAGE = "$rand(10,30)"; + LEAP_STUNCHANCE = 0.3; + LEAP_RANGE_TOOFAR = 512; + LEAP_RANGE_TOOCLOSE = 128; + LEAP_AWAY_INTERVAL = 500; + DROP_GOLD = 1; + DROP_GOLD_MIN = 30; + DROP_GOLD_MAX = 50; + ATTACK_HITCHANCE = 0.95; + CAN_FLINCH = 1; + FLINCH_CHANCE = 0.2; + FLINCH_DELAY = 10.0; + FLINCH_HEALTH = 1500; + MONSTER_MODEL = "monsters/swamp_ogre.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + SetName("Ogre"); + SetHealth(2000); + SetRace("orc"); + SetRoam(true); + SetModel(MONSTER_MODEL); + SetMoveAnim(ANIM_WALK); + SetHeight(64); + SetWidth(32); + SetHearingSensitivity(2); + SetBloodType("green"); + SetIdleAnim(ANIM_IDLE); + RUN_STEP = 0; + if (!(true)) return; + if ((G_SHAD_PRESENT)) + { + SetRace("undead"); + SetProp(GetOwner(), "skin", 2); + } + else + { + SetRace("orc"); + } + ScheduleDelayedEvent(1.0, "idle_sounds"); + } + + void npcatk_validatetarget() + { + if (!(IsValidPlayer(param1))) return; + if ((DID_WARCRY)) return; + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + } + + void my_target_died() + { + if (!(false)) + { + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 0; + ScheduleDelayedEvent(1.0, "enable_leap"); + } + if ((false)) return; + ORC_JUMPING = 0; + } + + void enable_leap() + { + LEAP_ENABLED = 1; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetMonsterHP() < GetMonsterMaxHP()) + { + HealEntity(GetOwner(), 0.1); + } + if (!(m_hAttackTarget != "unset")) return; + if (!(GetEntityRange(m_hAttackTarget) <= LEAP_RANGE_TOOFAR)) return; + if (!(GetEntityRange(m_hAttackTarget) > LEAP_RANGE_TOOCLOSE)) return; + if (!(LEAP_ENABLED)) return; + LEAP_ENABLED = 0; + ScheduleDelayedEvent(5.0, "enable_leap"); + script_leap(); + } + + void script_leap() + { + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + if ((I_R_FROZEN)) return; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 600, 100)); + } + + void npc_selectattack() + { + if ((HEADBUTT_DELAY)) + { + ANIM_ATTACK = ANIM_SWIPE; + } + else + { + if (RandomInt(1, 100) < HEADBUTT_CHANCE) + { + ANIM_ATTACK = ANIM_HEADBUTT; + HEADBUTT_DELAY = 1; + HEADBUTT_FREQ("headbutt_reset"); + } + } + } + + void headbutt_reset() + { + HEADBUTT_DELAY = 0; + } + + void attack1() + { + SWIPE_ATTACK = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, SWIPE_DAMAGE, ATTACK_HITCHANCE); + } + + void attack2() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, HEADBUTT_DAMAGE, ATTACK_HITCHANCE); + HEADBUTT_ON = 1; + } + + void game_dodamage() + { + if ((HEADBUTT_ON)) + { + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_HEADBUTT, 10); + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + ANIM_ATTACK = ANIM_SWIPE; + HEADBUTT_ON = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SWIPE_ATTACK)) return; + SWIPE_ATTACK = 0; + if ((param1)) + { + SWIPE_ATK = 0; + // PlayRandomSound from: SOUND_SWIPEHIT1, SOUND_SWIPEHIT2 + array sounds = {SOUND_SWIPEHIT1, SOUND_SWIPEHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + AddVelocity(m_hLastStruckByMe, /* TODO: $relvel */ $relvel(-100, 130, 120)); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_SWIPEMISS1, SOUND_SWIPEMISS2 + array sounds = {SOUND_SWIPEMISS1, SOUND_SWIPEMISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetMonsterHP() > WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_STRONG}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (GetMonsterHP() <= WEAK_THRESHOLD) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN_WEAK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + string L_LEAP_THRESH = GetEntityMaxHealth(GetOwner()); + L_LEAP_THRESH *= 0.1; + if (param1 > L_LEAP_THRESH) + { + if (GetGameTime() > NEXT_LEAP_AWAY) + { + } + NEXT_LEAP_AWAY = GetGameTime(); + NEXT_LEAP_AWAY += Random(8.0, 12.0); + leap_away(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (NEXT_LEAP_AWAY_HP == "NEXT_LEAP_AWAY_HP") + { + NEXT_LEAP_AWAY_HP = GetEntityMaxHealth(GetOwner()); + NEXT_LEAP_AWAY_HP *= 0.75; + } + string L_HP_AFTER = GetEntityHealth(GetOwner()); + if (!(L_HP_AFTER < NEXT_LEAP_AWAY_HP)) return; + string L_QUARTER = GetEntityMaxHealth(GetOwner()); + L_QUARTER *= 0.25; + NEXT_LEAP_AWAY_HP -= L_QUARTER; + leap_away(); + } + + void leap_away() + { + PlayAnim("critical", ANIM_LEAP); + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "leap_boost"); + npcatk_suspend_ai(3.0); + } + + void leap_attack() + { + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + if ((CanSee("enemy", 128))) + { + npcatk_dodamage(GetEntityIndex(m_hLastSeen), ATTACK_HITRANGE, LEAP_DAMAGE, ATTACK_HITCHANCE); + if (RandomInt(1, 100) < LEAP_STUNCHANCE) + { + ApplyEffect(GetEntityIndex(m_hLastSeen), "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + } + } + + void leap_done() + { + EmitSound(GetOwner(), 0, SOUND_LEAP_LAND, 10); + SetMoveAnim(ANIM_RUN); + } + + void npcatk_search_init_advanced() + { + if ((SEARCH_ANIM_DELAY)) return; + NPC_DELAYING_UNSTUCK = 10.0; + PlayAnim("critical", ANIM_SEARCH); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SEARCH_ANIM_DELAY = 1; + ScheduleDelayedEvent(5.0, "reset_search_anim"); + } + + void reset_search_anim() + { + SEARCH_ANIM_DELAY = 0; + } + + void OnFlinch() + { + EmitSound(GetOwner(), 0, SOUND_FLINCH, 10); + } + + void idle_sounds() + { + Random(3, 10)("idle_sounds"); + if (!(m_hAttackTarget == "unset")) return; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void run_step1() + { + EmitSound(GetOwner(), 0, SOUND_STEP1, 5); + } + + void run_step2() + { + EmitSound(GetOwner(), 0, SOUND_STEP2, 5); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((ORC_JUMPING)) return; + if (!(IsValidPlayer(m_hAttackTarget))) return; + ORC_JUMPING = 1; + ScheduleDelayedEvent(1.0, "orc_jump_check"); + } + + void orc_jump_check() + { + if (!(ORC_JUMPING)) return; + ORC_HOP_DELAY("orc_jump_check"); + if ((IS_FLEEING)) return; + if (!(m_hAttackTarget != "unset")) return; + if (!(false)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > ORC_JUMP_THRESH) + { + orc_hop(); + } + } + + void orc_hop() + { + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(m_hAttackTarget); + PlayAnim("critical", ANIM_LEAP); + EmitSound(GetOwner(), 0, SOUND_LEAP, 10); + int JUMP_HEIGHT = RandomInt(550, 650); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void bo_zombie_mode() + { + npc_suicide(); + } + +} + +} diff --git a/scripts/angelscript/monsters/swamp_reaver.as b/scripts/angelscript/monsters/swamp_reaver.as new file mode 100644 index 00000000..54c7b740 --- /dev/null +++ b/scripts/angelscript/monsters/swamp_reaver.as @@ -0,0 +1,845 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SwampReaver : CGameScript +{ + int ACID_BOMB_ATTACK; + string ACID_BOMB_POS; + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_BOMB; + string ANIM_BREATH; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_PROJECTILE; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_SLASH; + string ANIM_SMASH; + string ANIM_VICTORY; + string ANIM_VICTORY1; + string ANIM_VICTORY2; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BOMB_DMG_TYPE; + string BREATH_ANG; + int BREATH_COUNT; + string BREATH_TYPE; + string CLOUD_TARGS; + string CL_EFFECT_ID; + int CYCLES_ON; + int DID_WARCRY; + int DMG_ACID_BOMB; + int DMG_FIRE_BALL; + int DOES_ACID_BOMB; + int DOING_ACID_BOMB; + int DOING_BREATH; + int DOING_ERRUPT; + int DOING_FIREBALL; + int DOT_ACID_BOMB; + float DOT_DMG; + float DOT_DURATION; + string DOT_EFFECT; + string EFFECT_ACID_BOMB; + string ERRUPT_TARGS; + string ERRUPT_TYPE; + float FIREBALL1_DURATION; + string FIREBALL1_SCRIPT; + float FIREBALL2_DURATION; + string FIREBALL2_SCRIPT; + int FIRST_ATTACK; + float FREQ_ACID_BOMB; + float FREQ_BREATH; + float FREQ_ERRUPT; + float FREQ_FIRE_BALL; + string HP_STORAGE; + int IS_FIRE_BOMB; + int MIX_COUNT; + int MOVE_RANGE; + string NEXT_ACID_BOMB; + string NEXT_BREATH; + string NEXT_ERRUPT; + string NEXT_FX_REFRESH; + string NEXT_SCAN; + string NEXT_SEARCH; + string NPC_GIVE_EXP; + string PROJECTILE_SCRIPT; + int PUSH_ATTACK; + string PUSH_VEL; + int REAVER_HEIGHT; + string REAVER_LAST_FIRE_BALL; + int REAVER_MAXHP; + string REAVER_MODEL; + string REAVER_NAME; + int REAVER_SKIN; + int REAVER_WIDTH; + int REAVER_XP; + int SLASH_ATTACK; + int SLASH_COUNT; + int SLASH_DAMAGE; + float SLASH_HITCHANCE; + int SMASH_ATTACK; + int SMASH_DAMAGE; + string SOUND_ACID_BOMB_FIRE; + string SOUND_ACID_BOMB_PREP; + string SOUND_ATTACKHIT; + string SOUND_ATTACKMISS; + string SOUND_DEATH; + string SOUND_FIRE_BREATH_LOOP; + string SOUND_FIRE_BREATH_START; + string SOUND_FIRE_ERRUPT_LOOP; + string SOUND_FIRE_ERRUPT_START; + string SOUND_PAIN_NEAR_DEATH; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_POISON_BREATH_LOOP; + string SOUND_POISON_BREATH_START; + string SOUND_POISON_ERRUPT_LOOP; + string SOUND_POISON_ERRUPT_START; + string SOUND_RUN1; + string SOUND_RUN2; + string SOUND_RUN3; + string SOUND_SEARCH1; + string SOUND_SEARCH2; + string SOUND_SEARCH3; + string SOUND_SLASHHIT; + string SOUND_SLASHMISS; + string SOUND_SMASHHIT; + string SOUND_SMASHMISS; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_WALK1; + string SOUND_WALK2; + string SOUND_WALK3; + string SOUND_WALK4; + string SOUND_WARCRY; + int STUN_BURST; + string STUN_POS; + int VOLCANO_ON; + + SwampReaver() + { + REAVER_NAME = "Vitriolic Reaver"; + REAVER_MAXHP = 4000; + REAVER_XP = 2750; + REAVER_SKIN = 1; + REAVER_MODEL = "monsters/firereaver.mdl"; + REAVER_WIDTH = 72; + REAVER_HEIGHT = 64; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_SEARCH = "idle2"; + ANIM_FLINCH = "turnl"; + ANIM_SMASH = "mattack3"; + ANIM_SLASH = "mattack2"; + ANIM_PROJECTILE = "distanceattack"; + ANIM_BOMB = "bomb_attack"; + ANIM_ALERT = "distanceattack"; + ANIM_BREATH = "breath"; + ANIM_DEATH1 = "dieforward"; + ANIM_DEATH2 = "diesimple"; + ANIM_DEATH3 = "diesideways"; + ANIM_VICTORY1 = "victoryeat"; + ANIM_VICTORY2 = "victorysniff"; + ANIM_VICTORY = "victoryeat"; + ANIM_DEATH = "dieforward"; + ANIM_ATTACK = "mattack3"; + FREQ_FIRE_BALL = 10.0; + DMG_FIRE_BALL = 100; + SOUND_WALK1 = "common/npc_step1.wav"; + SOUND_WALK2 = "common/npc_step2.wav"; + SOUND_WALK3 = "common/npc_step3.wav"; + SOUND_WALK4 = "common/npc_step4.wav"; + SOUND_RUN1 = "gonarch/gon_step1.wav"; + SOUND_RUN2 = "gonarch/gon_step2.wav"; + SOUND_RUN3 = "gonarch/gon_step3.wav"; + SOUND_DEATH = "gonarch/gon_die1.wav"; + SOUND_WARCRY = "gonarch/gon_alert1.wav"; + SOUND_STRUCK1 = "gonarch/gon_sack1.wav"; + SOUND_STRUCK2 = "gonarch/gon_sack2.wav"; + SOUND_PAIN_STRONG = "gonarch/gon_pain2.wav"; + SOUND_PAIN_WEAK = "gonarch/gon_pain4.wav"; + SOUND_PAIN_NEAR_DEATH = "gonarch/gon_pain5.wav"; + SOUND_SLASHHIT = "zombie/claw_strike1.wav"; + SOUND_SMASHHIT = "zombie/claw_strike2.wav"; + SOUND_SLASHMISS = "zombie/claw_miss1.wav"; + SOUND_SMASHMISS = "zombie/claw_miss2.wav"; + SOUND_SEARCH1 = "gonarch/gon_childdie3.wav"; + SOUND_SEARCH2 = "gonarch/gon_childdie2.wav"; + SOUND_SEARCH3 = "gonarch/gon_childdie1.wav"; + SOUND_ATTACKHIT = "unset"; + SOUND_ATTACKMISS = "unset"; + Precache(SOUND_SLASHMISS); + Precache(SOUND_SLASHHIT); + Precache(SOUND_SMASHMISS); + Precache(SOUND_SMASHHIT); + Precache(SOUND_PAIN_STRONG); + Precache(SOUND_PAIN_WEAK); + Precache(SOUND_PAIN_NEAR_DEATH); + ATTACK_RANGE = 140; + ATTACK_HITRANGE = 200; + ATTACK_MOVERANGE = 100; + MOVE_RANGE = 100; + SLASH_DAMAGE = "$rand(100,200)"; + SMASH_DAMAGE = 500; + SLASH_HITCHANCE = 0.9; + Precache(SOUND_DEATH); + DOT_EFFECT = "effects/dot_poison"; + DOT_DURATION = 10.0; + DOT_DMG = 30.0; + FREQ_ERRUPT = 30.0; + ERRUPT_TYPE = "poison"; + FREQ_BREATH = Random(20.0, 30.0); + BREATH_TYPE = "poison"; + FREQ_ACID_BOMB = Random(5.0, 15.0); + DOES_ACID_BOMB = 1; + FIREBALL1_SCRIPT = "monsters/summon/acid_ball_guided"; + FIREBALL2_SCRIPT = "monsters/summon/acid_ball_guided"; + FIREBALL1_DURATION = 5.0; + FIREBALL2_DURATION = 5.0; + PROJECTILE_SCRIPT = "proj_acid_bomb"; + DMG_ACID_BOMB = 400; + DOT_ACID_BOMB = 150; + EFFECT_ACID_BOMB = "effects/dot_acid"; + SOUND_ACID_BOMB_PREP = "gonarch/gon_birth3.wav"; + SOUND_ACID_BOMB_FIRE = "gonarch/gon_birth1.wav"; + SOUND_POISON_ERRUPT_START = "monsters/mummy/c_mummycom_bat1.wav"; + SOUND_POISON_ERRUPT_LOOP = "amb/amb_spa2.wav"; + SOUND_POISON_BREATH_START = "monsters/mummy/c_mummycom_bat2.wav"; + SOUND_POISON_BREATH_LOOP = "magic/volcano_loop.wav"; + SOUND_FIRE_ERRUPT_START = "magic/volcano_start.wav"; + SOUND_FIRE_ERRUPT_LOOP = "magic/volcano_loop.wav"; + SOUND_FIRE_BREATH_START = "ambience/steamburst1.wav"; + SOUND_FIRE_BREATH_LOOP = "monsters/goblin/sps_fogfire.wav"; + BOMB_DMG_TYPE = "acid"; + } + + void game_precache() + { + Precache("monsters/summon/acid_ball_guided"); + Precache("effects/sfx_acid_splash"); + } + + void OnSpawn() override + { + SetName(REAVER_NAME); + SetHealth(REAVER_MAXHP); + SetRoam(true); + reaver_immunes(); + SetWidth(72); + SetHeight(64); + NPC_GIVE_EXP = REAVER_XP; + SetRace("demon"); + SetHearingSensitivity(3); + SetModel(REAVER_MODEL); + SetMoveAnim(ANIM_WALK); + SetProp(GetOwner(), "skin", REAVER_SKIN); + SetBloodType("green"); + SLASH_COUNT = 0; + MIX_COUNT = 0; + } + + void reaver_immunes() + { + SetDamageResistance("lightning", 2.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 0.5); + } + + void npc_targetsighted() + { + if ((DID_WARCRY)) return; + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + FIRST_ATTACK = 1; + PlayAnim("once", ANIM_ALERT); + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + float GAME_TIME = GetGameTime(); + NEXT_ERRUPT = GAME_TIME; + NEXT_ERRUPT += FREQ_ERRUPT; + NEXT_BREATH = GAME_TIME; + NEXT_BREATH += FREQ_BREATH; + NEXT_ACID_BOMB = GAME_TIME; + NEXT_ACID_BOMB += FREQ_ACID_BOMB; + if (CL_EFFECT_ID == "CL_EFFECT_ID") + { + refresh_client_fx(); + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_RANGE) + { + string LAST_FIRE = REAVER_LAST_FIRE_BALL; + LAST_FIRE += FREQ_FIRE_BALL; + if (!(DOING_BREATH)) + { + } + if (!(DOING_ACID_BOMB)) + { + } + if (GetGameTime() > LAST_FIRE) + { + do_fireballs(); + } + } + } + + void my_target_died() + { + if ((false)) return; + int RAND_VICT = RandomInt(1, 2); + if (RAND_VICT == 1) + { + ANIM_VICTORY = ANIM_VICTORY1; + } + if (RAND_VICT == 2) + { + ANIM_VICTORY = ANIM_VICTORY2; + } + PlayAnim("critical", ANIM_VICTORY); + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_mele1() + { + SLASH_ATTACK = 1; + int RANDOM_PUSH = RandomInt(100, 175); + PUSH_VEL = /* TODO: $relvel */ $relvel(-200, RANDOM_PUSH, 120); + SOUND_ATTACKHIT = SOUND_SLASHHIT; + SOUND_ATTACKMISS = SOUND_SLASHMISS; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, SLASH_DAMAGE, SLASH_HITCHANCE); + PUSH_ATTACK = 1; + SLASH_COUNT += 1; + if (SLASH_COUNT > RandomInt(9, 15)) + { + ANIM_ATTACK = ANIM_SMASH; + } + } + + void attack_mele2() + { + SMASH_ATTACK = 1; + SOUND_ATTACKHIT = SOUND_SMASHHIT; + SOUND_ATTACKMISS = SOUND_SMASHMISS; + ANIM_ATTACK = ANIM_SLASH; + ClientEvent("new", "all", "effects/sfx_stun_burst", GetEntityOrigin(GetOwner()), 256, 0); + STUN_BURST = 1; + STUN_POS = GetEntityOrigin(GetOwner()); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 256, SMASH_DAMAGE, 1.0, 0); + ScheduleDelayedEvent(0.1, "reset_stun_burst"); + SLASH_COUNT = 0; + ANIM_ATTACK = ANIM_SLASH; + } + + void reset_stun_burst() + { + STUN_BURST = 0; + } + + void npcatk_lost_sight() + { + if (!(GetGameTime() > NEXT_SEARCH)) return; + NEXT_SEARCH = GetGameTime(); + NEXT_SEARCH += 20.0; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + PlayAnim("critical", ANIM_SEARCH); + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if ((STUN_BURST)) + { + if ((param1)) + { + } + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = STUN_POS; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 200))); + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + if ((EXIT_SUB)) return; + if ((ACID_BOMB_ATTACK)) + { + int EXIT_SUB = 1; + if ((param1)) + { + } + if (GetRelationship(param2) == "enemy") + { + } + ApplyEffect(param2, EFFECT_ACID_BOMB, 5, GetEntityIndex(GetOwner()), DOT_ACID_BOMB, "none"); + if ((IS_FIRE_BOMB)) + { + } + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = ACID_BOMB_POS; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 200))); + } + if ((EXIT_SUB)) return; + if (!(param1)) + { + if (SOUND_ATTACKMISS != "unset") + { + EmitSound(GetOwner(), 0, SOUND_ATTACKMISS, 10); + } + } + if ((param1)) + { + if (SOUND_ATTACKHIT != "unset") + { + EmitSound(GetOwner(), 0, SOUND_ATTACKHIT, 10); + if ((PUSH_ATTACK)) + { + } + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + ApplyEffect(DOT_EFFECT, DOT_DURATION, GetEntityIndex(GetOwner()), DOT_DMG); + } + } + PUSH_ATTACK = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + HP_STORAGE = GetMonsterHP(); + if (GetMonsterHP() >= 1500) + { + string PAIN_SOUND = SOUND_PAIN_STRONG; + } + if (GetMonsterHP() < 1500) + { + string PAIN_SOUND = SOUND_PAIN_WEAK; + } + if (GetMonsterHP() < 500) + { + string PAIN_SOUND = SOUND_PAIN_NEAR_DEATH; + } + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, PAIN_SOUND + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, PAIN_SOUND}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void monster_walk_step() + { + // PlayRandomSound from: SOUND_WALK1, SOUND_WALK2, SOUND_WALK3, SOUND_WALK4 + array sounds = {SOUND_WALK1, SOUND_WALK2, SOUND_WALK3, SOUND_WALK4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void monster_run_step() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 64, 10, 0.5, 128); + // PlayRandomSound from: SOUND_RUN1, SOUND_RUN2, SOUND_RUN3 + array sounds = {SOUND_RUN1, SOUND_RUN2, SOUND_RUN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RAND_DEATH = RandomInt(2, 3); + if (RAND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RAND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + SetMoveDest("none"); + SetMoveAnim(ANIM_DEATH); + } + + void npcatk_clear_targets() + { + VOLCANO_ON = 0; + // svplaysound: svplaysound 2 0 magic/volcano_loop.wav + EmitSound(2, 0, "magic/volcano_loop.wav"); + } + + void do_fireballs() + { + if ((I_R_FROZEN)) return; + DOING_FIREBALL = 1; + ScheduleDelayedEvent(2.0, "fireball_release"); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + REAVER_LAST_FIRE_BALL = GetGameTime(); + PlayAnim("critical", ANIM_PROJECTILE); + SpawnNPC(FIREBALL1_SCRIPT, /* TODO: $relpos */ $relpos(-64, 96, 64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_FIRE_BALL, FIREBALL1_DURATION, 200 + ScheduleDelayedEvent(0.2, "do_fireballs2"); + } + + void do_fireballs2() + { + SpawnNPC(FIREBALL2_SCRIPT, /* TODO: $relpos */ $relpos(64, 96, 64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_FIRE_BALL, FIREBALL2_DURATION, 200 + } + + void fireball_release() + { + DOING_FIREBALL = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + float GAME_TIME = GetGameTime(); + if ((CYCLES_ON)) + { + if (GAME_TIME > NEXT_FX_REFRESH) + { + } + refresh_client_fx(); + } + if (!(m_hAttackTarget != "unset")) return; + if (GAME_TIME > NEXT_ERRUPT) + { + NEXT_ERRUPT = GAME_TIME; + NEXT_ERRUPT += FREQ_ERRUPT; + if ((MIXED_REAVER)) + { + mixed_reaver_switch(); + } + do_errupt(); + } + if (!(false)) return; + if ((DOING_FIREBALL)) return; + if (GAME_TIME > NEXT_BREATH) + { + if (!(DOING_ACID_BOMB)) + { + } + if (GetEntityRange(m_hAttackTarget) < 300) + { + } + NEXT_BREATH = GAME_TIME; + NEXT_BREATH += FREQ_BREATH; + if ((MIXED_REAVER)) + { + mixed_reaver_switch(); + } + if (!(I_R_FROZEN)) + { + } + do_breath(); + } + if (GAME_TIME > NEXT_ACID_BOMB) + { + if (!(DOING_ERRUPT)) + { + } + if (!(DOING_BREATH)) + { + } + if (GetEntityRange(m_hAttackTarget) > 275) + { + } + NEXT_ACID_BOMB = GAME_TIME; + NEXT_ACID_BOMB += FREQ_ACID_BOMB; + if ((MIXED_REAVER)) + { + mixed_reaver_switch(); + } + if (!(I_R_FROZEN)) + { + } + do_acid_bomb(); + } + } + + void refresh_client_fx() + { + NEXT_FX_REFRESH = GetGameTime(); + NEXT_FX_REFRESH += 30.0; + ClientEvent("new", "all", "monsters/reavers_cl", GetEntityIndex(GetOwner()), BREATH_TYPE, ERRUPT_TYPE, DOING_ERRUPT, DOING_BREATH); + CL_EFFECT_ID = "game.script.last_sent_id"; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(CL_EFFECT_ID != "CL_EFFECT_ID")) return; + if ((DOING_BREATH)) + { + frame_breath_end(); + } + if ((DOING_ERRUPT)) + { + end_errupt(); + } + ClientEvent("update", "all", CL_EFFECT_ID, "end_fx"); + if (StringToLower(GetMapName()) == "mscave") + { + string CHEST_ID = FindEntityByName("fire_cave_chest2"); + if (((CHEST_ID !is null))) + { + } + SpawnNPC("mscave/firecave2", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: "fire_reaver" + } + } + + void do_errupt() + { + DOING_ERRUPT = 1; + ClientEvent("update", "all", CL_EFFECT_ID, "errupt_on", ERRUPT_TYPE); + errupt_loop(); + ScheduleDelayedEvent(10.0, "end_errupt"); + if (ERRUPT_TYPE == "poison") + { + // svplaysound: svplaysound 1 10 SOUND_POISON_ERRUPT_LOOP + EmitSound(1, 10, SOUND_POISON_ERRUPT_LOOP); + EmitSound(GetOwner(), 2, SOUND_POISON_ERRUPT_START, 10); + } + else + { + // svplaysound: svplaysound 1 10 SOUND_FIRE_ERRUPT_LOOP + EmitSound(1, 10, SOUND_FIRE_ERRUPT_LOOP); + EmitSound(GetOwner(), 2, SOUND_FIRE_ERRUPT_START, 10); + } + } + + void errupt_loop() + { + if (!(DOING_ERRUPT)) return; + ScheduleDelayedEvent(0.75, "errupt_loop"); + if (ERRUPT_TYPE == "poison") + { + ERRUPT_TARGS = FindEntitiesInSphere("enemy", 160); + if (ERRUPT_TARGS != "none") + { + } + for (int i = 0; i < GetTokenCount(ERRUPT_TARGS, ";"); i++) + { + errupt_affect_targets_poison(); + } + } + else + { + ERRUPT_TARGS = FindEntitiesInSphere("enemy", 225); + if (ERRUPT_TARGS != "none") + { + } + for (int i = 0; i < GetTokenCount(ERRUPT_TARGS, ";"); i++) + { + errupt_affect_targets_fire(); + } + } + } + + void errupt_affect_targets_poison() + { + string CUR_TARG = GetToken(ERRUPT_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison_blind", 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + + void errupt_affect_targets_fire() + { + string CUR_TARG = GetToken(ERRUPT_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + + void end_errupt() + { + DOING_ERRUPT = 0; + ClientEvent("update", "all", CL_EFFECT_ID, "errupt_off"); + if (ERRUPT_TYPE == "poison") + { + // svplaysound: svplaysound 1 0 SOUND_POISON_ERRUPT_LOOP + EmitSound(1, 0, SOUND_POISON_ERRUPT_LOOP); + } + else + { + // svplaysound: svplaysound 1 0 SOUND_FIRE_ERRUPT_LOOP + EmitSound(1, 0, SOUND_FIRE_ERRUPT_LOOP); + } + } + + void do_breath() + { + SetRoam(false); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_BREATH); + npcatk_suspend_movement(ANIM_BREATH); + if (BREATH_TYPE == "poison") + { + EmitSound(GetOwner(), 1, SOUND_POISON_BREATH_START, 10); + } + else + { + EmitSound(GetOwner(), 1, SOUND_FIRE_BREATH_START, 10); + } + SetMoveDest(m_hAttackTarget); + npcatk_suspend_ai(); + BREATH_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + ScheduleDelayedEvent(1.5, "frame_breath_start"); + ScheduleDelayedEvent(15.0, "frame_breath_end"); + } + + void frame_breath_start() + { + LogDebug("frame_breath_start"); + if ((DOING_BREATH)) return; + DOING_BREATH = 1; + if (BREATH_TYPE == "poison") + { + EmitSound(GetOwner(), 2, SOUND_POISON_BREATH_LOOP, 10); + } + else + { + EmitSound(GetOwner(), 2, SOUND_FIRE_BREATH_LOOP, 10); + } + BREATH_COUNT = 0; + BREATH_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + ScheduleDelayedEvent(0.1, "breath_loop"); + ClientEvent("update", "all", CL_EFFECT_ID, "breath_on", BREATH_TYPE); + } + + void breath_loop() + { + if (!(DOING_BREATH)) return; + ScheduleDelayedEvent(0.05, "breath_loop"); + BREATH_ANG += 10; + if (BREATH_ANG > 359.99) + { + BREATH_ANG -= 359.99; + } + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_POS); + LogDebug("breath_loop BREATH_ANG"); + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.25; + string SCAN_POINT = /* TODO: $relpos */ $relpos(0, 128, 0); + CLOUD_TARGS = FindEntitiesInSphere("enemy", 256); + if (CLOUD_TARGS != "none") + { + for (int i = 0; i < GetTokenCount(CLOUD_TARGS, ";"); i++) + { + breath_affect_targets(); + } + } + } + + void breath_affect_targets() + { + string CUR_TARG = GetToken(CLOUD_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + string TARG_RANGE = GetEntityRange(CUR_TARG); + if (!(TARG_RANGE < 450)) return; + if (BREATH_TYPE == "poison") + { + ApplyEffect(CUR_TARG, "effects/dot_poison_blind", 5.0, GetEntityIndex(GetOwner()), DOT_DMG, 0, 0, "none"); + } + else + { + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + int PUSH_STR = 1000; + if (TARG_RANGE > 200) + { + PUSH_STR -= TARG_RANGE; + } + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, PUSH_STR, 120)); + } + + void frame_breath_end() + { + LogDebug("frame_breath_end"); + if (!(DOING_BREATH)) return; + DOING_BREATH = 0; + npcatk_resume_ai(); + npcatk_resume_movement(); + ClientEvent("update", "all", CL_EFFECT_ID, "breath_off"); + SetRoam(true); + NEXT_ACID_BOMB += 5.0; + } + + void do_acid_bomb() + { + LogDebug("do_acid_bomb"); + SetRoam(false); + DOING_ACID_BOMB = 1; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + EmitSound(GetOwner(), 0, SOUND_ACID_BOMB_PREP, 10); + ScheduleDelayedEvent(3.0, "doing_acid_bomb_reset"); + PlayAnim("critical", ANIM_BOMB); + } + + void doing_acid_bomb_reset() + { + DOING_ACID_BOMB = 0; + } + + void attack_ranged() + { + LogDebug("attack_ranged"); + EmitSound(GetOwner(), 0, SOUND_ACID_BOMB_FIRE, 10); + NEXT_BREATH += 5.0; + } + + void attack_bomb() + { + EmitSound(GetOwner(), 0, SOUND_ACID_BOMB_FIRE, 10); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + if (!(IsValidPlayer(TARG_ORG))) + { + TARG_ORG += "z"; + } + float TARG_DIST = Distance(TARG_ORG, GetMonsterProperty("origin")); + TARG_DIST /= 35; + SetAngles("add_view.pitch"); + LogDebug("attack_bomb GetEntityRange(m_hAttackTarget)"); + int BOMB_SPEED = 500; + if (GetEntityRange(m_hAttackTarget) > 800) + { + int BOMB_SPEED = 600; + } + TossProjectile(PROJECTILE_SCRIPT, /* TODO: $relpos */ $relpos(0, 20, 28), "none", BOMB_SPEED, DMG_BOMB, 0, "none"); + SetRoam(true); + DOING_ACID_BOMB = 0; + } + + void ext_acid_bomb() + { + ACID_BOMB_ATTACK = 1; + XDoDamage(param1, 200, DMG_ACID_BOMB, 1.0, GetOwner(), GetOwner(), "none", "acid"); + IS_FIRE_BOMB = 1; + ScheduleDelayedEvent(0.1, "acid_bomb_reset"); + } + + void acid_bomb_reset() + { + ACID_BOMB_ATTACK = 0; + } + + void ext_fire_bomb() + { + ACID_BOMB_ATTACK = 1; + ACID_BOMB_POS = param1; + IS_FIRE_BOMB = 1; + XDoDamage(ACID_BOMB_POS, 200, DMG_ACID_BOMB, 0.01, GetOwner(), GetOwner(), "none", BOMB_DMG_TYPE); + ScheduleDelayedEvent(0.1, "acid_bomb_reset"); + } + +} + +} diff --git a/scripts/angelscript/monsters/swamp_tube.as b/scripts/angelscript/monsters/swamp_tube.as new file mode 100644 index 00000000..ff452448 --- /dev/null +++ b/scripts/angelscript/monsters/swamp_tube.as @@ -0,0 +1,509 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SwampTube : CGameScript +{ + int AM_SUMMONED; + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_ATTACK_QUICK; + string ANIM_CUSTOM_FLINCH; + string ANIM_IDLE; + string ANIM_MORTAR; + string ANIM_MORTAR_READY; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BLOB_ORG; + string DEATH_GOAL; + int DID_ALERT; + int DMG_GLOB; + int DMG_NEEDLE; + int DOT_GLOB; + float FREQ_MORTAR; + string HALF_HP; + int MORTAR_ACTIVE; + string MORTAR_ANG; + int MORTAR_READY; + int MOVE_RANGE; + string MY_MASTER; + string NEEDLE_AIM_POS; + string NEEDLE_ANGLES; + string NEXT_CUST_FLINCH; + string NEXT_HEARD_ALERT; + string NEXT_IDLE; + string NEXT_MORTAR; + string NEXT_REPOS; + string NEXT_RETREAT; + string NEXT_VICTORY; + string NPC_ALT_SOUND_DEATH; + int NPC_GIVE_EXP; + int NPC_IS_RANGED; + int RUN_STEP; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_DEATH3; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_MOURN1; + string SOUND_MOURN2; + string SOUND_MOURN3; + string SOUND_PAIN; + string SOUND_SHOOT; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SUSPEND_AI; + + SwampTube() + { + ANIM_CUSTOM_FLINCH = "flinch"; + ANIM_ALERT = "arming"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_ATTACK = "qkfire"; + ANIM_ATTACK_QUICK = "qkfire"; + ANIM_MORTAR_READY = "arming"; + ANIM_MORTAR = "shoot"; + NPC_GIVE_EXP = 750; + FREQ_MORTAR = 10.0; + DMG_GLOB = 400; + DOT_GLOB = 100; + DMG_NEEDLE = 150; + NPC_IS_RANGED = 1; + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + ATTACK_MOVERANGE = 768; + MOVE_RANGE = 768; + SOUND_SHOOT = "monsters/tube/tube_fire_new.wav"; + SOUND_MOURN1 = "monsters/tube/tube_mourn1.wav"; + SOUND_MOURN2 = "monsters/tube/tube_mourn2.wav"; + SOUND_MOURN3 = "monsters/tube/tube_mourn3.wav"; + SOUND_IDLE1 = "monsters/tube/Tube_Idle.wav"; + SOUND_IDLE2 = "monsters/tube/Tube_Idle2.wav"; + SOUND_IDLE3 = "monsters/tube/Tube_Idle3.wav"; + SOUND_ALERT1 = "monsters/tube/tube_gtfo.wav"; + SOUND_ALERT2 = "monsters/tube/Tube_SeePlayer.wav"; + SOUND_STRUCK1 = "monsters/tube/TubeCritter_Hit1.wav"; + SOUND_STRUCK2 = "monsters/tube/TuberCritter_Hit2.wav"; + SOUND_STRUCK3 = "monsters/tube/TubeCritter_Hit3.wav"; + SOUND_PAIN = "monstrs/tube/Tube_Flinch.wav"; + SOUND_DEATH1 = "monsters/tube/die1.wav"; + SOUND_DEATH2 = "monsters/tube/Tube_DieBack.wav"; + SOUND_DEATH3 = "monsters/tube/Tube_DieSimple.wav"; + NPC_ALT_SOUND_DEATH = "monsters/tube/die1.wav"; + Precache(SOUND_DEATH1); + Precache(SOUND_DEATH2); + Precache(SOUND_DEATH3); + Precache("xfireball3.spr"); + } + + void OnSpawn() override + { + SetName("Oodle-Beak"); + SetRace("wildanimal"); + SetModel("monsters/tube.mdl"); + SetWidth(32); + SetHeight(64); + SetHealth(2000); + SetDamageResistance("fire", 1.5); + SetHearingSensitivity(4); + SetRoam(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + if (!(true)) return; + ScheduleDelayedEvent(2.0, "finalize_me"); + RUN_STEP = 0; + } + + void finalize_me() + { + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (m_hAttackTarget == "unset") + { + if (GetGameTime() > NEXT_IDLE) + { + } + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += Random(5.0, 10.0); + int RND_IDLE = RandomInt(1, 4); + if (RND_IDLE >= 1) + { + if (RND_IDLE <= 3) + { + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RND_IDLE == 1) + { + if (!(NPC_IS_TURRET)) + { + npcatk_suspend_roam(2.0); + } + PlayAnim("critical", "eating#idle"); + } + if (RND_IDLE == 2) + { + if (!(NPC_IS_TURRET)) + { + npcatk_suspend_roam(2.0); + } + PlayAnim("critical", "eating#hiss"); + } + } + if (RND_IDLE == 4) + { + } + PlayAnim("critical", "mourn"); + if (!(NPC_IS_TURRET)) + { + npcatk_suspend_roam(2.0); + } + // PlayRandomSound from: SOUND_MOURN1, SOUND_MOURN2, SOUND_MOURN3 + array sounds = {SOUND_MOURN1, SOUND_MOURN2, SOUND_MOURN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(m_hAttackTarget != "unset")) return; + if ((SUSPEND_AI)) return; + if ((IS_FLEEING)) return; + if ((I_R_FROZEN)) return; + if (GetGameTime() > NEXT_MORTAR) + { + if ((false)) + { + } + NEXT_MORTAR = GetGameTime(); + NEXT_MORTAR += 20.0; + do_mortar(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((NPC_IS_TURRET)) return; + if (GetGameTime() > NEXT_REPOS) + { + NEXT_REPOS = GetGameTime(); + NEXT_REPOS += 15.0; + string L_LAST_ATTACK = AS_ATTACKING; + L_LAST_ATTACK += 5.0; + if (GetGameTime() < L_LAST_ATTACK) + { + } + if (GetEntityRange(m_hAttackTarget) > 128) + { + } + SetMoveSpeed(4.0); + chicken_run(3.0); + ScheduleDelayedEvent(3.0, "normal_speed"); + } + if ((MORTAR_ACTIVE)) return; + if ((MORTAR_READY)) return; + if (!(GetEntityRange(m_hAttackTarget) < 128)) return; + if (!(GetGameTime() > NEXT_RETREAT)) return; + NEXT_RETREAT = GetGameTime(); + NEXT_RETREAT += Random(5.0, 10.0); + do_manual_flee(); + } + + void normal_speed() + { + SetMoveSpeed(1.0); + } + + void do_manual_flee() + { + npcatk_suspend_ai(3.0); + SetMoveDest(m_hAttackTarget); + SetMoveSpeed(4.0); + ScheduleDelayedEvent(3.0, "end_manual_flee"); + } + + void end_manual_flee() + { + npcatk_resume_ai(); + SetMoveSpeed(1.0); + } + + void my_target_died() + { + if (!(GetGameTime() > NEXT_VICTORY)) return; + NEXT_VICTORY = GetGameTime(); + NEXT_VICTORY += 15.0; + PlayAnim("critical", "mourn"); + if (!(NPC_IS_TURRET)) + { + npcatk_suspend_roam(2.0); + } + // PlayRandomSound from: SOUND_MOURN1, SOUND_MOURN2, SOUND_MOURN3 + array sounds = {SOUND_MOURN1, SOUND_MOURN2, SOUND_MOURN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DID_ALERT = 0; + } + + void OnDamage(int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (GetEntityHealth(GetOwner()) < HALF_HP) + { + if (GetGameTime() > NEXT_CUST_FLINCH) + { + } + NEXT_CUST_FLINCH = GetGameTime(); + NEXT_CUST_FLINCH += 10.0; + npcatk_suspend_ai(1.5); + EmitSound(GetOwner(), 2, SOUND_PAIN, 10); + PlayAnim("critical", ANIM_CUSTOM_FLINCH); + } + } + + void npc_targetsighted() + { + if ((DID_ALERT)) return; + if (!(NPC_IS_TURRET)) + { + npcatk_suspend_roam(2.0); + } + SetMoveDest(m_hAttackTarget); + DID_ALERT = 1; + NEXT_REPOS = GetGameTime(); + NEXT_REPOS += 15.0; + if (!(NPC_IS_TURRET)) + { + NEXT_MORTAR = GetGameTime(); + NEXT_MORTAR += FREQ_MORTAR; + } + if (G_ALERT_CYCLE == 1) + { + PlayAnim("critical", ANIM_ALERT); + EmitSound(GetOwner(), 0, SOUND_ALERT1, 10); + } + if (G_ALERT_CYCLE == 2) + { + PlayAnim("critical", "dropped"); + EmitSound(GetOwner(), 0, SOUND_ALERT2, 10); + } + if (G_ALERT_CYCLE == 3) + { + PlayAnim("critical", "mourn"); + // PlayRandomSound from: SOUND_MOURN1, SOUND_MOURN2, SOUND_MOURN3 + array sounds = {SOUND_MOURN1, SOUND_MOURN2, SOUND_MOURN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (G_ALERT_CYCLE == 3) + { + SetGlobalVar("G_ALERT_CYCLE", 0); + } + } + + void npc_set_turret() + { + FREQ_MORTAR = 5.0; + } + + void frame_step() + { + RUN_STEP += 1; + if (RUN_STEP == 1) + { + EmitSound(GetOwner(), 0, "monsters/tube/Tube_Footstep_Left1.wav", 5); + } + else + { + EmitSound(GetOwner(), 0, "monsters/tube/Tube_Footstep_Right1.wav", 5); + RUN_STEP = 0; + } + } + + void npc_heard_player() + { + if (!(m_hAttackTarget == "unset")) return; + if (!(GetGameTime() > NEXT_HEARD_ALERT)) return; + NEXT_HEARD_ALERT = GetGameTime(); + NEXT_HEARD_ALERT += 10.0; + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RND_DEATH = RandomInt(1, 3); + if (RND_DEATH == 1) + { + NPC_ALT_SOUND_DEATH = SOUND_DEATH1; + } + if (RND_DEATH == 2) + { + NPC_ALT_SOUND_DEATH = SOUND_DEATH2; + } + if (RND_DEATH == 3) + { + NPC_ALT_SOUND_DEATH = SOUND_DEATH3; + } + if (!(AM_SUMMONED)) return; + CallExternal(MY_MASTER, "ext_tube_died"); + } + + void do_mortar() + { + LogDebug("do_mortar"); + MORTAR_READY = 1; + EmitSound(GetOwner(), 0, "monsters/tube/Tube_Arming.wav", 10); + npcatk_suspend_ai(3.0); + PlayAnim("critical", ANIM_MORTAR_READY); + SetMoveDest(m_hAttackTarget); + ScheduleDelayedEvent(1.0, "do_mortar2"); + } + + void do_mortar2() + { + npcatk_suspend_movement(ANIM_MORTAR); + PlayAnim("critical", ANIM_MORTAR); + MORTAR_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + MORTAR_ANG -= 30; + if (MORTAR_ANG < 0) + { + MORTAR_ANG += 359; + } + MORTAR_ACTIVE = 1; + ScheduleDelayedEvent(2.0, "mortar_end"); + mortar_loop(); + } + + void mortar_loop() + { + if (!(MORTAR_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "mortar_loop"); + MORTAR_ANG += 2; + if (MORTAR_ANG > 359) + { + MORTAR_ANG -= 359; + } + string FACE_POS = GetMonsterProperty("origin"); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, MORTAR_ANG, 0), Vector3(0, 500, 0)); + SetMoveDest(FACE_POS); + } + + void mortar_end() + { + MORTAR_ACTIVE = 0; + MORTAR_READY = 0; + npcatk_resume_movement(); + NEXT_MORTAR = GetGameTime(); + NEXT_MORTAR += FREQ_MORTAR; + } + + void frame_shoot_blob() + { + EmitSound(GetOwner(), 0, "bullchicken/bc_attack2.wav", 10); + string TARG_DIST_RATIO = GetEntityRange(m_hAttackTarget); + if (TARG_DIST_RATIO > 1200) + { + int TARG_DIST_RATIO = 1200; + } + TARG_DIST_RATIO /= 1200; + string ATTACK_SPEED = /* TODO: $ratio */ $ratio(TARG_DIST_RATIO, 150, 550); + ATTACK_SPEED *= Random(0.8, 1.2); + string ANGLE_ADJ = /* TODO: $ratio */ $ratio(TARG_DIST_RATIO, 25, 45); + SetAngles("add_view.pitch"); + TossProjectile("proj_glob_dynamic", /* TODO: $relpos */ $relpos(-10, 32, 32), "none", ATTACK_SPEED, 0, 0.1, "none"); + } + + void ext_glob_landed() + { + BLOB_ORG = param1; + XDoDamage(param1, 96, DMG_GLOB, 0.2, GetOwner(), GetOwner(), "none", "acid_effect", "dmgevent:glob"); + } + + void glob_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + string TARG_ORG = GetEntityOrigin(param2); + float BLOB_DIST = Distance(BLOB_ORG, TARG_ORG); + BLOB_DIST /= 64; + int BLOB_DIST_RATIO = 1; + BLOB_DIST_RATIO -= BLOB_DIST; + string BLIND_DURATION = /* TODO: $ratio */ $ratio(BLOB_DIST_RATIO, 2.0, 6.0); + LogDebug("glob_dodamage BLIND_DURATION"); + ApplyEffect(param2, "effects/dot_poison_blind", BLIND_DURATION, GetEntityIndex(GetOwner()), DOT_GLOB); + } + + void frame_aim_needle() + { + NEEDLE_AIM_POS = GetEntityOrigin(m_hAttackTarget); + } + + void frame_shoot_needle() + { + NEEDLE_AIM_POS = GetEntityOrigin(m_hAttackTarget); + EmitSound(GetOwner(), 0, SOUND_SHOOT, 10); + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = NEEDLE_AIM_POS; + NEEDLE_ANGLES = /* TODO: $angles3d */ $angles3d(TRACE_START, NEEDLE_AIM_POS); + NEEDLE_ANGLES = "x"; + ClientEvent("new", "all", "monsters/swamp_tube_cl", GetEntityIndex(GetOwner()), NEEDLE_ANGLES); + ScheduleDelayedEvent(0.1, "do_needle_damage"); + } + + void do_needle_damage() + { + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = TRACE_START; + TRACE_END += /* TODO: $relpos */ $relpos(NEEDLE_ANGLES, Vector3(0, 2048, 0)); + XDoDamage(TRACE_START, TRACE_END, DMG_NEEDLE, 1.0, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:needle"); + } + + void needle_dodamage() + { + if (!(param1)) return; + NEXT_REPOS = GetGameTime(); + NEXT_REPOS += 15.0; + } + + void game_dynamically_created() + { + AM_SUMMONED = 1; + MY_MASTER = param1; + } + + void ext_mommy_died() + { + if (!(AM_SUMMONED)) return; + npcatk_suspend_ai(); + DEATH_GOAL = param1; + SetMoveSpeed(3.0); + PlayAnim("once", "break"); + PlayAnim("once", ANIM_RUN); + SetMoveDest(DEATH_GOAL); + death_goal_loop(); + } + + void death_goal_loop() + { + SetRoam(true); + SUSPEND_AI = 1; + ScheduleDelayedEvent(2.0, "death_goal_loop"); + SetMoveDest(DEATH_GOAL); + } + +} + +} diff --git a/scripts/angelscript/monsters/swamp_tube_cl.as b/scripts/angelscript/monsters/swamp_tube_cl.as new file mode 100644 index 00000000..c92ab78c --- /dev/null +++ b/scripts/angelscript/monsters/swamp_tube_cl.as @@ -0,0 +1,51 @@ +#pragma context server + +namespace MS +{ + +class SwampTubeCl : CGameScript +{ + string FX_OWNER; + string NEEDLE_ANGS; + + void client_activate() + { + FX_OWNER = param1; + string NEEDLE_START_POS = /* TODO: $getcl */ $getcl(param1, "attachment0"); + NEEDLE_ANGS = param2; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", NEEDLE_START_POS, "setup_needle", "do_nadda", "needle_collide"); + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void do_nadda() + { + } + + void needle_collide() + { + EmitSound3D("weapons/bow/arrowhit1.wav", 10, "game.tempent.origin"); + } + + void setup_needle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string L_NEEDLE_ANGS = NEEDLE_ANGS; + ClientEffect("tempent", "set_current_prop", "angles", L_NEEDLE_ANGS); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(NEEDLE_ANGS, Vector3(0, 1000, 0))); + ClientEffect("tempent", "set_current_prop", "body", 26); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/swamp_vile.as b/scripts/angelscript/monsters/swamp_vile.as new file mode 100644 index 00000000..81d39f4b --- /dev/null +++ b/scripts/angelscript/monsters/swamp_vile.as @@ -0,0 +1,253 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SwampVile : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + string ANIM_ATTACK3; + string ANIM_CUST_FLINCH; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_POINT; + string ANIM_RALLY; + string ANIM_RAWR; + string ANIM_RUN; + string ANIM_THROW; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DID_ALERT; + int DMG_SLASH; + float FREQ_THROW; + int GLOB_EFFECT_DOT; + float GLOB_EFFECT_DUR; + string GLOB_EFFECT_TYPE; + string HALF_HP; + int MOVE_RANGE; + string NEXT_FLINCH; + string NEXT_HEARD_ALERT; + string NEXT_THROW; + int NPC_BASE_EXP; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWING1; + string SOUND_SWING2; + + SwampVile() + { + ANIM_POINT = "point"; + ANIM_RALLY = "rally"; + ANIM_RAWR = "idle_scream"; + ANIM_WALK = "walk_lx"; + ANIM_IDLE = "idle_base"; + ANIM_RUN = "run_kx"; + ANIM_ATTACK = "melee1"; + ANIM_ATTACK1 = "melee1"; + ANIM_ATTACK2 = "melee1b"; + ANIM_ATTACK3 = "melee2"; + ANIM_THROW = "throw_rock"; + ANIM_CUST_FLINCH = "duck"; + ANIM_DEATH = "death"; + NPC_BASE_EXP = 2000; + DMG_SLASH = 400; + FREQ_THROW = 5.0; + ATTACK_MOVERANGE = 40; + MOVE_RANGE = 40; + ATTACK_RANGE = 50; + ATTACK_HITRANGE = 70; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "monsters/keeper/c_troll_hit1.wav"; + SOUND_PAIN2 = "monsters/keeper/c_troll_hit2.wav"; + SOUND_ALERT1 = "monsters/keeper/c_troll_bat1.wav"; + SOUND_ALERT2 = "monsters/keeper/c_troll_bat2.wav"; + SOUND_ALERT3 = "monsters/keeper/c_troll_bat2_rev.wav"; + SOUND_ATTACK1 = "monsters/keeper/c_lizardm_atk1.wav"; + SOUND_ATTACK2 = "monsters/keeper/c_lizardm_atk2.wav"; + SOUND_ATTACK3 = "monsters/keeper/c_lizardm_atk3.wav"; + SOUND_SWING1 = "zombie/claw_miss1.wav"; + SOUND_SWING2 = "zombie/claw_miss2.wav"; + SOUND_DEATH = "monsters/keeper/c_troll_dead.wav"; + GLOB_EFFECT_TYPE = "effects/dot_poison_blind"; + GLOB_EFFECT_DOT = 150; + GLOB_EFFECT_DUR = 3.0; + } + + void OnSpawn() override + { + SetName("Swamp Keeper"); + SetModel("monsters/keeper.mdl"); + SetHeight(64); + SetWidth(32); + SetRoam(true); + SetHealth(5000); + SetDamageResistance("all", 0.5); + SetDamageResistance("poison", 0.5); + SetRace("demon"); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + ScheduleDelayedEvent(2.0, "finalize_me"); + } + + void finalize_me() + { + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void npc_targetsighted() + { + if ((DID_ALERT)) return; + npcatk_suspend_roam(2.0); + SetMoveDest(m_hAttackTarget); + DID_ALERT = 1; + G_ALERT_CYCLE += 1; + if (!(NPC_IS_TURRET)) + { + NEXT_THROW = GetGameTime(); + NEXT_THROW += FREQ_THROW; + } + if (G_ALERT_CYCLE == 1) + { + PlayAnim("critical", ANIM_POINT); + EmitSound(GetOwner(), 0, SOUND_ALERT2, 10); + } + if (G_ALERT_CYCLE == 2) + { + PlayAnim("critical", ANIM_RALLY); + EmitSound(GetOwner(), 0, SOUND_ALERT1, 10); + } + if (G_ALERT_CYCLE == 3) + { + PlayAnim("critical", ANIM_RAWR); + EmitSound(GetOwner(), 0, SOUND_ALERT3, 10); + } + if (G_ALERT_CYCLE == 3) + { + SetGlobalVar("G_ALERT_CYCLE", 0); + } + } + + void cycle_down() + { + DID_ALERT = 0; + } + + void npc_heard_player() + { + if (!(m_hAttackTarget == "unset")) return; + if (!(GetGameTime() > NEXT_HEARD_ALERT)) return; + NEXT_HEARD_ALERT = GetGameTime(); + NEXT_HEARD_ALERT += 15.0; + EmitSound(GetOwner(), 0, "monsters/keeper/c_troll_slct.wav", 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if (TARG_RANGE > ATTACK_HITRANGE) + { + if (GetGameTime() > NEXT_THROW) + { + } + NEXT_THROW = GetGameTime(); + NEXT_THROW += FREQ_THROW; + npcatk_suspend_roam(2.0); + PlayAnim("once", ANIM_THROW); + } + if (TARG_RANGE < ATTACK_RANGE) + { + if (TARG_RANGE < ATTACK_MOVERANGE) + { + ANIM_ATTACK = ANIM_ATTACK3; + } + else + { + int RND_ATK = RandomInt(1, 2); + if (RND_ATK == 1) + { + ANIM_ATTACK = ANIM_ATTACK1; + } + if (RND_ATK == 2) + { + ANIM_ATTACK = ANIM_ATTACK2; + } + } + } + } + + void frame_melee_start() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_melee1_strike() + { + // PlayRandomSound from: SOUND_SWING1, SOUND_SWING2 + array sounds = {SOUND_SWING1, SOUND_SWING2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SLASH, 0.8, "slash"); + } + + void frame_melee2_strike() + { + // PlayRandomSound from: SOUND_SWING1, SOUND_SWING2 + array sounds = {SOUND_SWING1, SOUND_SWING2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SLASH, 0.8, "slash"); + } + + void OnDamage(int damage) override + { + if (!(GetEntityHealth(GetOwner()) < HALF_HP)) return; + if (!(GetGameTime() > NEXT_FLINCH)) return; + NEXT_FLINCH = GetGameTime(); + NEXT_FLINCH += 20.0; + npcatk_suspend_ai(1.0); + EmitSound(GetOwner(), 0, SOUND_PAIN1, 10); + PlayAnim("critical", ANIM_CUST_FLINCH); + } + + void set_npc_turret() + { + FREQ_THROW = 2.0; + Random(10_0, 15_0)("taunt_loop"); + } + + void taunt_loop() + { + DID_ALERT = 0; + Random(10_0, 15_0)("taunt_loop"); + } + +} + +} diff --git a/scripts/angelscript/monsters/swampeye.as b/scripts/angelscript/monsters/swampeye.as new file mode 100644 index 00000000..496aa3aa --- /dev/null +++ b/scripts/angelscript/monsters/swampeye.as @@ -0,0 +1,314 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Swampeye : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_BEAM; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_HIDE; + string ANIM_IDLE; + string ANIM_IDLE_NORM; + string ANIM_LOOK; + string ANIM_LOWER; + string ANIM_MELEE; + string ANIM_RISE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BEAM_ATTACK; + int BEAM_RANGE; + int DMG_BEAM; + int DMG_MELEE; + int DOT_BEAM; + int EYE_SKIN; + float FREQ_MELEE; + string GO_TO_REST; + int HIDE_MODE; + int MELEE_HITRANGE; + int MELEE_RANGE; + string MELEE_TARGET; + string MIN_FLINCH_DAMAGE; + string NEXT_FLINCH; + string NEXT_MELEE; + string NEXT_SEARCH_SOUND; + int NO_STUCK_CHECKS; + string NPCATK_TARGET; + int NPC_GIVE_EXP; + int NPC_NO_MOVE; + string SOUND_ALERT_IDLE1; + string SOUND_ALERT_IDLE2; + string SOUND_ALERT_IDLE3; + string SOUND_BEAM_CHARGE; + string SOUND_BEAM_FIRE1; + string SOUND_BEAM_FIRE2; + string SOUND_BEAM_FIRE3; + string SOUND_CLAW; + string SOUND_DEATH; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Swampeye() + { + ANIM_IDLE = "hide_idle"; + ANIM_WALK = "idle"; + ANIM_RUN = "idle"; + ANIM_FLINCH = "flinch1"; + ANIM_ATTACK = "eyeblast"; + ANIM_DEATH = "death2"; + ANIM_IDLE_NORM = "idle"; + ANIM_HIDE = "hide_idle"; + ANIM_LOOK = "idle2"; + ANIM_FLINCH1 = "flinch1"; + ANIM_FLINCH2 = "flinch2"; + ANIM_ALERT = "scream"; + ANIM_BEAM = "eyeblast"; + ANIM_MELEE = "attack"; + ANIM_RISE = "rise"; + ANIM_LOWER = "lower"; + NO_STUCK_CHECKS = 1; + NPC_GIVE_EXP = 400; + ATTACK_RANGE = 1024; + ATTACK_HITRANGE = 1024; + BEAM_RANGE = 1024; + DMG_BEAM = 300; + DOT_BEAM = 50; + MELEE_RANGE = 64; + MELEE_HITRANGE = 96; + DMG_MELEE = 100; + FREQ_MELEE = 4.0; + SOUND_BEAM_FIRE1 = "debris/beamstart14.wav"; + SOUND_BEAM_FIRE2 = "debris/beamstart15.wav"; + SOUND_BEAM_FIRE3 = "debris/beamstart9.wav"; + SOUND_BEAM_CHARGE = "debris/beamstart2.wav"; + SOUND_ALERT_IDLE1 = "controller/con_alert1.wav"; + SOUND_ALERT_IDLE2 = "controller/con_alert2.wav"; + SOUND_ALERT_IDLE3 = "controller/con_alert3.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "aslave/slv_pain1.wav"; + SOUND_PAIN2 = "aslave/slv_pain2.wav"; + SOUND_DEATH = "aslave/slv_die2.wav"; + Precache(SOUND_DEATH); + SOUND_CLAW = "zombie/claw_miss2.wav"; + NPC_NO_MOVE = 1; + } + + void OnSpawn() override + { + SetName("Swamp Eye"); + SetModel("monsters/swamp_eye.mdl"); + SetWidth(48); + SetHeight(92); + SetRace("demon"); + SetBloodType("green"); + SetHealth(1000); + SetDamageResistance("lightning", 0.25); + SetHearingSensitivity(11); + SetMoveAnim(ANIM_HIDE); + SetIdleAnim(ANIM_HIDE); + PlayAnim("hold", ANIM_HIDE); + HIDE_MODE = 1; + SetNoPush(true); + SetGravity(0); + ScheduleDelayedEvent(2.0, "final_props"); + } + + void final_props() + { + MIN_FLINCH_DAMAGE = GetEntityMaxHealth(GetOwner()); + MIN_FLINCH_DAMAGE *= 0.05; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(HIDE_MODE)) return; + rise_and_shine(); + } + + void npc_targetsighted() + { + GO_TO_REST = GetGameTime(); + GO_TO_REST += 10.0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((HIDE_MODE)) return; + if (GetGameTime() > GO_TO_REST) + { + go_to_sleep(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(m_hAttackTarget != "unset")) return; + SetMoveDest(m_hAttackTarget); + if (GetEntityRange(m_hAttackTarget) < MELEE_RANGE) + { + if (GetGameTime() > NEXT_MELEE) + { + } + NEXT_MELEE = GetGameTime(); + NEXT_MELEE += 4.0; + MELEE_TARGET = m_hAttackTarget; + npcatk_suspend_ai(1.0); + PlayAnim("critical", ANIM_MELEE); + } + if (!(false)) + { + if (GetGameTime() > NEXT_SEARCH_SOUND) + { + } + NEXT_SEARCH_SOUND = GetGameTime(); + NEXT_SEARCH_SOUND += Random(3.0, 10.0); + // PlayRandomSound from: SOUND_ALERT_IDLE1, SOUND_ALERT_IDLE2, SOUND_ALERT_IDLE3 + array sounds = {SOUND_ALERT_IDLE1, SOUND_ALERT_IDLE2, SOUND_ALERT_IDLE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("once", ANIM_LOOK); + if (RandomInt(1, 2) == 1) + { + do_blink(); + } + } + } + + void rise_and_shine() + { + HIDE_MODE = 0; + ANIM_IDLE = ANIM_IDLE_NORM; + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + PlayAnim("critical", ANIM_RISE); + GO_TO_REST = GetGameTime(); + GO_TO_REST += 20.0; + do_blink(); + } + + void go_to_sleep() + { + NPCATK_TARGET = "unset"; + ANIM_IDLE = ANIM_HIDE; + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", ANIM_LOWER); + HIDE_MODE = 1; + } + + void OnDamage(int damage) override + { + GO_TO_REST = GetGameTime(); + GO_TO_REST += 10.0; + if (!(HIDE_MODE)) return; + rise_and_shine(); + } + + void frame_beam_charge() + { + EmitSound(GetOwner(), 0, SOUND_BEAM_CHARGE, 10); + } + + void frame_beam_fire() + { + // PlayRandomSound from: SOUND_BEAM_FIRE1, SOUND_BEAM_FIRE2, SOUND_BEAM_FIRE3 + array sounds = {SOUND_BEAM_FIRE1, SOUND_BEAM_FIRE2, SOUND_BEAM_FIRE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + string BEAM_START = GetEntityProperty(GetOwner(), "attachpos"); + string BEAM_END = GetEntityOrigin(m_hAttackTarget); + if (!(IsValidPlayer(m_hAttackTarget))) + { + string HALF_TARG_HEIGHT = GetEntityHeight(m_hAttackTarget); + HALF_TARG_HEIGHT *= 0.5; + BEAM_END += "z"; + } + string TRACE_LINE = TraceLine(BEAM_START, BEAM_END); + Effect("beam", "end", "lgtning.spr", 30, TRACE_LINE, GetOwner(), 1, Vector3(255, 255, 0), 150, 30.0, 1.0); + BEAM_ATTACK = 1; + if (IsInWater(m_hAttackTarget) == 0) + { + XDoDamage(BEAM_START, BEAM_END, DMG_BEAM, 1.0, GetOwner(), GetOwner(), "none", "lightning"); + } + else + { + DoDamage(m_hAttackTarget, "direct", DMG_BEAM, 1.0, GetOwner()); + } + } + + void game_dodamage() + { + if ((BEAM_ATTACK)) + { + ApplyEffect(param2, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_BEAM); + } + BEAM_ATTACK = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + if (!(GetGameTime() > NEXT_FLINCH)) return; + if (!(param1 > MIN_FLINCH_DAMAGE)) return; + if (!(RandomInt(1, GetMonsterMaxHP()) > GetEntityHealth(GetOwner()))) return; + NEXT_FLINCH = GetGameTime(); + NEXT_FLINCH += 20.0; + npcatk_suspend_ai(1.0); + if (RandomInt(1, 2) == 1) + { + PlayAnim("critical", ANIM_FLINCH1); + do_blink(); + } + else + { + PlayAnim("critical", ANIM_FLINCH2); + do_blink(); + } + } + + void frame_claw() + { + EmitSound(GetOwner(), 0, SOUND_CLAW, 10); + DoDamage(MELEE_TARGET, MELEE_HITRANGE, DMG_MELEE, 0.9, "slash"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "skin", 3); + } + + void do_blink() + { + EYE_SKIN = 0; + do_blink2(); + } + + void do_blink2() + { + EYE_SKIN += 1; + if (EYE_SKIN < 5) + { + SetProp(GetOwner(), "skin", EYE_SKIN); + ScheduleDelayedEvent(0.1, "do_blink2"); + } + else + { + SetProp(GetOwner(), "skin", 0); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/tcadaver.as b/scripts/angelscript/monsters/tcadaver.as new file mode 100644 index 00000000..8160e51f --- /dev/null +++ b/scripts/angelscript/monsters/tcadaver.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Tcadaver : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + Tcadaver() + { + SKEL_HP = 100; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 14; + ATTACK_DAMAGE_HIGH = 17; + NPC_GIVE_EXP = 40; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 2; + DROP_GOLD_MAX = 10; + SKEL_RESPAWN_CHANCE = 0.75; + SKEL_RESPAWN_LIVES = 3; + } + + void skeleton_spawn() + { + SetName("Fragile Knight"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/tcadaver_once.as b/scripts/angelscript/monsters/tcadaver_once.as new file mode 100644 index 00000000..8567843f --- /dev/null +++ b/scripts/angelscript/monsters/tcadaver_once.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class TcadaverOnce : CGameScript +{ + int ATTACK_DAMAGE_HIGH; + int ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int NPC_GIVE_EXP; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + + TcadaverOnce() + { + SKEL_HP = 100; + ATTACK_HITCHANCE = 0.7; + ATTACK_DAMAGE_LOW = 14; + ATTACK_DAMAGE_HIGH = 17; + NPC_GIVE_EXP = 40; + DROP_GOLD = RandomInt(0, 1); + DROP_GOLD_MIN = 2; + DROP_GOLD_MAX = 10; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + } + + void skeleton_spawn() + { + SetName("Fragile Knight"); + SetRoam(true); + SetHearingSensitivity(3); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_bow.as b/scripts/angelscript/monsters/telf_warrior_bow.as new file mode 100644 index 00000000..bfc2b5d8 --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_bow.as @@ -0,0 +1,284 @@ +#pragma context server + +#include "monsters/elf_warrior_base.as" + +namespace MS +{ + +class TelfWarriorBow : CGameScript +{ + int AM_ARCHER; + string AOE_ARROW; + string ARROW_AOE; + string ARROW_CL_SCRIPT; + string ARROW_CL_SCRIPT_COLD; + string ARROW_CL_SCRIPT_FIRE; + string ARROW_DMG_AOE; + string ARROW_DMG_TYPE; + string ARROW_DOT_DMG; + string ARROW_DOT_DUR; + string ARROW_EFFECT; + string ARROW_KNOCKBACK; + string ARROW_TARGET_LIST; + string ATTACK_STANCE; + int CAN_KICK; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FREQ_KICK; + int LEAP_AFTER_KICK; + int MISS_COUNT; + int NPC_GIVE_EXP; + int NPC_RANGED; + string PROJ_TYPE; + string SOUND_BOW_SHOOT; + string SOUND_BOW_STRETCH; + string SPIRAL_DMG; + string SPIRAL_DMG_TYPE; + string SPIRAL_GLOW_COLOR; + string SPIRAL_ON; + string SPIRAL_SPIRTE_FILE; + string SPIRAL_SPRITE_COLOR; + string SPIRAL_SPRITE_FRAMES; + string SPIRAL_SPRITE_SCALE; + + TelfWarriorBow() + { + Precache("char_breath.spr"); + NPC_GIVE_EXP = 2500; + DROP_GOLD = 1; + DROP_GOLD_AMT = 500; + NPC_RANGED = 1; + AM_ARCHER = 1; + ATTACK_STANCE = "bow"; + CAN_KICK = 1; + FREQ_KICK = 8.0; + LEAP_AFTER_KICK = 1; + SOUND_BOW_STRETCH = "monsters/archer/stretch.wav"; + SOUND_BOW_SHOOT = "monsters/archer/bow.wav"; + ARROW_CL_SCRIPT_FIRE = "effects/sfx_fire_burst"; + ARROW_CL_SCRIPT_COLD = "effects/sfx_ice_burst"; + } + + void game_precache() + { + Precache(ARROW_CL_SCRIPT_FIRE); + Precache(ARROW_CL_SCRIPT_COLD); + } + + void elf_spawn() + { + SetName("Torkalath Shadowarcher"); + SetHealth(3500); + SetDamageResistance("all", 0.5); + SetRace("torkie"); + SetModelBody(1, 5); + MISS_COUNT = 0; + } + + void frame_stretch_bow() + { + EmitSound(GetOwner(), 0, SOUND_BOW_STRETCH, 10); + } + + void frame_shoot_bow() + { + EmitSound(GetOwner(), 0, SOUND_BOW_SHOOT, 10); + MISS_COUNT += 1; + int N_PROJECTILES = 3; + int RND_PROJECTILE = RandomInt(3, 5); + if (RND_PROJECTILE == 1) + { + PROJ_TYPE = "fire_aoe"; + int ARROW_SPEED = 500; + string ARROW_SCRIPT = "proj_arrow_npc_dyn"; + int ARROW_GLOW = 1; + Vector3 ARROW_GLOW_COLOR = Vector3(255, 0, 0); + AOE_ARROW = 1; + ARROW_KNOCKBACK = 800; + ARROW_AOE = 128; + ARROW_EFFECT = "effects/dot_fire"; + ARROW_DOT_DMG = 150; + ARROW_DOT_DUR = 5.0; + ARROW_CL_SCRIPT = ARROW_CL_SCRIPT_FIRE; + ARROW_DMG_AOE = 200; + ARROW_DMG_TYPE = "fire_effect"; + } + if (RND_PROJECTILE == 2) + { + PROJ_TYPE = "ice_aoe"; + int ARROW_SPEED = 500; + string ARROW_SCRIPT = "proj_arrow_npc_dyn"; + int ARROW_GLOW = 1; + Vector3 ARROW_GLOW_COLOR = Vector3(128, 128, 255); + AOE_ARROW = 1; + ARROW_KNOCKBACK = 800; + ARROW_AOE = 128; + ARROW_EFFECT = "effects/dot_cold"; + ARROW_DOT_DMG = 50; + ARROW_DOT_DUR = 5.0; + ARROW_CL_SCRIPT = ARROW_CL_SCRIPT_COLD; + ARROW_DMG_AOE = 150; + ARROW_DMG_TYPE = "cold_effect"; + } + if (RND_PROJECTILE == 3) + { + PROJ_TYPE = "spiral_fire"; + string ARROW_SCRIPT = "proj_arrow_spiral"; + int ARROW_SPEED = 200; + AOE_ARROW = 0; + ARROW_KNOCKBACK = 0; + SPIRAL_DMG_TYPE = "fire_effect"; + SPIRAL_DMG = 100; + SPIRAL_SPIRTE_FILE = "3dmflaora.spr"; + SPIRAL_SPRITE_FRAMES = 19; + SPIRAL_SPRITE_SCALE = 1.0; + SPIRAL_SPRITE_COLOR = Vector3(255, 0, 0); + SPIRAL_GLOW_COLOR = Vector3(255, 0, 0); + SPIRAL_ON = 1; + int SPIRAL_ARROW = 1; + } + if (RND_PROJECTILE == 4) + { + PROJ_TYPE = "spiral_cold"; + string ARROW_SCRIPT = "proj_arrow_spiral"; + int ARROW_SPEED = 200; + AOE_ARROW = 0; + ARROW_KNOCKBACK = 0; + SPIRAL_DMG_TYPE = "cold_effect"; + SPIRAL_DMG = 100; + SPIRAL_SPIRTE_FILE = "char_breath.spr"; + SPIRAL_SPRITE_FRAMES = 1; + SPIRAL_SPRITE_SCALE = 2.5; + SPIRAL_SPRITE_COLOR = Vector3(255, 255, 255); + SPIRAL_GLOW_COLOR = Vector3(128, 128, 255); + SPIRAL_ON = 1; + int SPIRAL_ARROW = 1; + } + if (RND_PROJECTILE == 5) + { + PROJ_TYPE = "spiral_lightning"; + string ARROW_SCRIPT = "proj_arrow_spiral"; + int ARROW_SPEED = 200; + AOE_ARROW = 0; + ARROW_KNOCKBACK = 0; + SPIRAL_DMG_TYPE = "lightning_effect"; + SPIRAL_DMG = 100; + SPIRAL_SPIRTE_FILE = "3dmflaora.spr"; + SPIRAL_SPRITE_FRAMES = 8; + SPIRAL_SPRITE_SCALE = 0.5; + SPIRAL_SPRITE_COLOR = Vector3(255, 255, 0); + SPIRAL_GLOW_COLOR = Vector3(255, 255, 0); + SPIRAL_ON = 1; + int SPIRAL_ARROW = 1; + } + if (!(AOE_ARROW)) + { + TossProjectile(ARROW_SCRIPT, /* TODO: $relpos */ $relpos(10, 0, 28), m_hAttackTarget, ARROW_SPEED, DMG_ARROW, 0, "none"); + CallExternal("ent_lastprojectile", "ext_lighten", 0, ARROW_GLOW, ARROW_GLOW_COLOR); + } + else + { + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string HALF_AOE = ARROW_AOE; + HALF_AOE /= 2; + TARG_ORG += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359.99), 0), Vector3(0, HALF_AOE, 0)); + if (!(IsValidPlayer(TARG_ORG))) + { + TARG_ORG += "z"; + } + float TARG_DIST = Distance(TARG_ORG, GetMonsterProperty("origin")); + TARG_DIST /= 25; + SetAngles("add_view.pitch"); + TossProjectile(ARROW_SCRIPT, /* TODO: $relpos */ $relpos(10, 0, 28), "none", ARROW_SPEED, DMG_ARROW, 1, "none"); + float GRAV_ADJ = 0.4; + if ((TARG_ORG).z < GetMonsterProperty("origin.z")) + { + string ADJ_RATIO = (TARG_ORG).z; + ADJ_RATIO /= GetMonsterProperty("origin.z"); + string GRAV_ADJ = /* TODO: $get_skill_ratio */ $get_skill_ratio(ADJ_RATIO, 0.4, 2.0); + LogDebug("adjusting down GRAV_ADJ ADJ_RATIO"); + } + CallExternal("ent_lastprojectile", "ext_lighten", GRAV_ADJ, ARROW_GLOW, ARROW_GLOW_COLOR); + } + if (MISS_COUNT > 4) + { + MISS_COUNT = 2; + PlayAnim("once", "break"); + chicken_run(1.5); + } + } + + void ext_arrow_hit() + { + string TARG_ALIVE = IsEntityAlive(param2); + if (GetRelationship(param2) == "enemy") + { + if ((TARG_ALIVE)) + { + } + int HIT_ENEMY = 1; + } + if (ARROW_EFFECT != "ARROW_EFFECT") + { + if ((HIT_ENEMY)) + { + } + ApplyEffect(param2, ARROW_EFFECT, ARROW_DOT_DUR, GetEntityIndex(GetOwner()), ARROW_DOT_DMG); + } + if ((AOE_ARROW)) + { + string ARROW_POS = param3; + if ((HIT_ENEMY)) + { + string ARROW_POS = GetEntityOrigin(param2); + } + ARROW_POS = "z"; + ClientEvent("new", "all", ARROW_CL_SCRIPT, ARROW_POS, 128, 1, Vector3(255, 0, 0)); + XDoDamage(ARROW_POS, ARROW_AOE, ARROW_DMG_AOE, 0, GetOwner(), GetOwner(), "none", ARROW_DMG_TYPE); + ARROW_TARGET_LIST = FindEntitiesInSphere("enemy", ARROW_AOE); + if (ARROW_TARGET_LIST != "none") + { + } + for (int i = 0; i < GetTokenCount(ARROW_TARGET_LIST, ";"); i++) + { + arrow_affect_targets(); + } + } + } + + void arrow_affect_targets() + { + string CUR_TARG = GetToken(ARROW_TARGET_LIST, i, ";"); + ApplyEffect(CUR_TARG, ARROW_EFFECT, ARROW_DOT_DUR, GetEntityIndex(GetOwner()), ARROW_DOT_DMG); + MISS_COUNT = 0; + } + + void game_dodamage() + { + if ((IsEntityAlive(param2))) + { + if (GetRelationship(param2) == "enemy") + { + } + MISS_COUNT = 0; + } + if ((SPIRAL_ON)) + { + if ((param1)) + { + } + if (GetRelationship(param2) == "enemy") + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 200, 110)); + } + } + + void ext_spiral_done() + { + SPIRAL_ON = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_bow_cl.as b/scripts/angelscript/monsters/telf_warrior_bow_cl.as new file mode 100644 index 00000000..331dd600 --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_bow_cl.as @@ -0,0 +1,121 @@ +#pragma context client + +namespace MS +{ + +class TelfWarriorBowCl : CGameScript +{ + string CL_LIGHT_ID; + int FX_ACTIVE; + string GLOW_COLOR; + int GLOW_RAD; + float MAX_DURATION; + string MY_ANG; + string MY_POS; + string MY_SPEED; + int ROT_COUNT; + string SPRITE_COLOR; + string SPRITE_FRAMES; + string SPRITE_NAME; + string SPRITE_SCALE; + + TelfWarriorBowCl() + { + GLOW_RAD = 256; + MAX_DURATION = 10.0; + } + + void client_activate() + { + SetCallback("render", "enable"); + MY_POS = param1; + SPRITE_NAME = param2; + SPRITE_FRAMES = param3; + SPRITE_SCALE = param4; + SPRITE_COLOR = param5; + GLOW_COLOR = param6; + MY_ANG = param7; + MY_SPEED = param8; + LogDebug("**** Dest MY_SPEED"); + ClientEffect("tempent", "sprite", SPRITE_NAME, MY_POS, "setup_tracker_sprite", "update_tracker_sprite", "end_tracker_sprite"); + FX_ACTIVE = 1; + ClientEffect("light", "new", MY_POS, GLOW_RAD, GLOW_COLOR, 0.25); + CL_LIGHT_ID = "game.script.last_light_id"; + ROT_COUNT = 0; + fx_loop(); + MAX_DURATION("end_fx"); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.05, "fx_loop"); + ROT_COUNT += 10; + if (ROT_COUNT > 359) + { + ROT_COUNT = 0; + } + string SPRITE_POS = MY_POS; + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(ROT_COUNT, ROT_COUNT, 0), Vector3(0, 32, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_spiral_sprite"); + string SPRITE_POS = MY_POS; + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(/* TODO: $neg */ $neg(ROT_COUNT), /* TODO: $neg */ $neg(ROT_COUNT), 0), Vector3(0, 32, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_spiral_sprite"); + } + + void end_fx() + { + if (!(FX_ACTIVE)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + ClientEffect("light", CL_LIGHT_ID, MY_POS, GLOW_RAD, GLOW_COLOR, 0.25); + } + + void end_tracker_sprite() + { + end_fx(); + } + + void update_tracker_sprite() + { + MY_POS = "game.tempent.origin"; + } + + void setup_tracker_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 20.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + string TRACKER_VEL = /* TODO: $relvel */ $relvel(MY_ANG, Vector3(0, MY_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", TRACKER_VEL); + } + + void setup_spiral_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_FRAMES); + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_bow_cl_new.as b/scripts/angelscript/monsters/telf_warrior_bow_cl_new.as new file mode 100644 index 00000000..2ae1ff65 --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_bow_cl_new.as @@ -0,0 +1,121 @@ +#pragma context client + +namespace MS +{ + +class TelfWarriorBowClNew : CGameScript +{ + string CL_LIGHT_ID; + int FX_ACTIVE; + string GLOW_COLOR; + int GLOW_RAD; + float MAX_DURATION; + string MY_ANG; + string MY_POS; + string MY_SPEED; + int ROT_COUNT; + string SPRITE_COLOR; + string SPRITE_FRAMES; + string SPRITE_NAME; + string SPRITE_SCALE; + + TelfWarriorBowClNew() + { + GLOW_RAD = 256; + MAX_DURATION = 10.0; + } + + void client_activate() + { + SetCallback("render", "enable"); + MY_POS = param1; + SPRITE_NAME = param2; + SPRITE_FRAMES = param3; + SPRITE_SCALE = param4; + SPRITE_COLOR = param5; + GLOW_COLOR = param6; + MY_ANG = param7; + MY_SPEED = param8; + LogDebug("**** Dest MY_SPEED"); + ClientEffect("tempent", "sprite", SPRITE_NAME, MY_POS, "setup_tracker_sprite", "update_tracker_sprite", "end_tracker_sprite"); + FX_ACTIVE = 1; + ClientEffect("light", "new", MY_POS, GLOW_RAD, GLOW_COLOR, 0.25); + CL_LIGHT_ID = "game.script.last_light_id"; + ROT_COUNT = 0; + fx_loop(); + MAX_DURATION("end_fx"); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.05, "fx_loop"); + ROT_COUNT += 10; + if (ROT_COUNT > 359) + { + ROT_COUNT = 0; + } + string SPRITE_POS = MY_POS; + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(ROT_COUNT, ROT_COUNT, 0), Vector3(0, 32, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_spiral_sprite"); + string SPRITE_POS = MY_POS; + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(/* TODO: $neg */ $neg(ROT_COUNT), /* TODO: $neg */ $neg(ROT_COUNT), 0), Vector3(0, 32, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_spiral_sprite"); + } + + void end_fx() + { + if (!(FX_ACTIVE)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + ClientEffect("light", CL_LIGHT_ID, MY_POS, GLOW_RAD, GLOW_COLOR, 0.25); + } + + void end_tracker_sprite() + { + end_fx(); + } + + void update_tracker_sprite() + { + MY_POS = "game.tempent.origin"; + } + + void setup_tracker_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 20.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + string TRACKER_VEL = /* TODO: $relvel */ $relvel(MY_ANG, Vector3(0, MY_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", TRACKER_VEL); + } + + void setup_spiral_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_FRAMES); + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_bow_new.as b/scripts/angelscript/monsters/telf_warrior_bow_new.as new file mode 100644 index 00000000..9dbe6945 --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_bow_new.as @@ -0,0 +1,345 @@ +#pragma context server + +#include "monsters/elf_warrior_base.as" + +namespace MS +{ + +class TelfWarriorBowNew : CGameScript +{ + int AM_ARCHER; + string ANIM_ATTACK; + string AOE_ARROW; + string ARROW_AOE; + string ARROW_CL_SCRIPT; + string ARROW_CL_SCRIPT_COLD; + string ARROW_CL_SCRIPT_FIRE; + int ARROW_CL_SPEED; + string ARROW_DMG_AOE; + string ARROW_DMG_TYPE; + string ARROW_DOT_DMG; + string ARROW_DOT_DUR; + string ARROW_EFFECT; + string ARROW_KNOCKBACK; + float ARROW_SV_SPEED; + string ARROW_TARGET_LIST; + string AS_ATTACKING; + string ATTACK_STANCE; + int CAN_KICK; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FIRE_DELAY; + float FREQ_KICK; + int LEAP_AFTER_KICK; + string MAXRANGE_RATIO; + int MISS_COUNT; + string NEXT_FIRE; + int NPC_GIVE_EXP; + int NPC_RANGED; + string PROJ_TYPE; + string SOUND_BOW_SHOOT; + string SOUND_BOW_STRETCH; + string SPIRAL_DMG; + string SPIRAL_DMG_TYPE; + string SPIRAL_GLOW_COLOR; + string SPIRAL_ON; + string SPIRAL_SPIRTE_FILE; + string SPIRAL_SPRITE_COLOR; + string SPIRAL_SPRITE_FRAMES; + string SPIRAL_SPRITE_SCALE; + string TRACK_ARROW_ACTIVE; + string TRACK_SPIRAL_ANG; + string TRACK_SPIRAL_DEST; + string TRACK_SPIRAL_ORG; + + TelfWarriorBowNew() + { + LogDebug("share_test - Shared"); + Precache("xfireball3.spr"); + Precache("char_breath.spr"); + Precache("firemagic.spr"); + LogDebug("share_test - Server"); + ARROW_CL_SPEED = 200; + ARROW_SV_SPEED = 42.5; + NPC_GIVE_EXP = 2500; + DROP_GOLD = 1; + DROP_GOLD_AMT = 500; + NPC_RANGED = 1; + AM_ARCHER = 1; + ATTACK_STANCE = "bow"; + CAN_KICK = 1; + FREQ_KICK = 8.0; + LEAP_AFTER_KICK = 1; + SOUND_BOW_STRETCH = "monsters/archer/stretch.wav"; + SOUND_BOW_SHOOT = "monsters/archer/bow.wav"; + ARROW_CL_SCRIPT_FIRE = "effects/sfx_fire_burst"; + ARROW_CL_SCRIPT_COLD = "effects/sfx_ice_burst"; + } + + void game_precache() + { + Precache(ARROW_CL_SCRIPT_FIRE); + Precache(ARROW_CL_SCRIPT_COLD); + } + + void elf_spawn() + { + SetName("Torkalath Shadowarcher"); + SetHealth(3500); + SetDamageResistance("all", 0.5); + SetRace("torkie"); + SetModelBody(1, 5); + MISS_COUNT = 0; + } + + void frame_stretch_bow() + { + EmitSound(GetOwner(), 0, SOUND_BOW_STRETCH, 10); + } + + void frame_shoot_bow() + { + EmitSound(GetOwner(), 0, SOUND_BOW_SHOOT, 10); + MISS_COUNT += 1; + int N_PROJECTILES = 3; + int RND_PROJECTILE = RandomInt(3, 5); + if (RND_PROJECTILE == 1) + { + PROJ_TYPE = "fire_aoe"; + int ARROW_SPEED = 500; + string ARROW_SCRIPT = "proj_arrow_npc_dyn"; + int ARROW_GLOW = 1; + Vector3 ARROW_GLOW_COLOR = Vector3(255, 0, 0); + AOE_ARROW = 1; + ARROW_KNOCKBACK = 800; + ARROW_AOE = 128; + ARROW_EFFECT = "effects/dot_fire"; + ARROW_DOT_DMG = 150; + ARROW_DOT_DUR = 5.0; + ARROW_CL_SCRIPT = ARROW_CL_SCRIPT_FIRE; + ARROW_DMG_AOE = 200; + ARROW_DMG_TYPE = "fire_effect"; + } + if (RND_PROJECTILE == 2) + { + PROJ_TYPE = "ice_aoe"; + int ARROW_SPEED = 500; + string ARROW_SCRIPT = "proj_arrow_npc_dyn"; + int ARROW_GLOW = 1; + Vector3 ARROW_GLOW_COLOR = Vector3(128, 128, 255); + AOE_ARROW = 1; + ARROW_KNOCKBACK = 800; + ARROW_AOE = 128; + ARROW_EFFECT = "effects/dot_cold"; + ARROW_DOT_DMG = 50; + ARROW_DOT_DUR = 5.0; + ARROW_CL_SCRIPT = ARROW_CL_SCRIPT_COLD; + ARROW_DMG_AOE = 150; + ARROW_DMG_TYPE = "cold_effect"; + } + if (RND_PROJECTILE == 3) + { + PROJ_TYPE = "spiral_fire"; + string ARROW_SCRIPT = "proj_arrow_spiral"; + int ARROW_SPEED = 200; + AOE_ARROW = 0; + ARROW_KNOCKBACK = 0; + SPIRAL_DMG_TYPE = "fire_effect"; + SPIRAL_DMG = 150; + SPIRAL_SPIRTE_FILE = "xfireball3.spr"; + SPIRAL_SPRITE_FRAMES = 19; + SPIRAL_SPRITE_SCALE = 1.0; + SPIRAL_SPRITE_COLOR = Vector3(255, 255, 255); + SPIRAL_GLOW_COLOR = Vector3(255, 0, 0); + SPIRAL_ON = 1; + int SPIRAL_ARROW = 1; + } + if (RND_PROJECTILE == 4) + { + PROJ_TYPE = "spiral_cold"; + string ARROW_SCRIPT = "proj_arrow_spiral"; + int ARROW_SPEED = 200; + AOE_ARROW = 0; + ARROW_KNOCKBACK = 0; + SPIRAL_DMG_TYPE = "cold_effect"; + SPIRAL_DMG = 150; + SPIRAL_SPIRTE_FILE = "char_breath.spr"; + SPIRAL_SPRITE_FRAMES = 1; + SPIRAL_SPRITE_SCALE = 2.5; + SPIRAL_SPRITE_COLOR = Vector3(255, 255, 255); + SPIRAL_GLOW_COLOR = Vector3(128, 128, 255); + SPIRAL_ON = 1; + int SPIRAL_ARROW = 1; + } + if (RND_PROJECTILE == 5) + { + PROJ_TYPE = "spiral_lightning"; + string ARROW_SCRIPT = "proj_arrow_spiral"; + int ARROW_SPEED = 200; + AOE_ARROW = 0; + ARROW_KNOCKBACK = 0; + SPIRAL_DMG_TYPE = "lightning_effect"; + SPIRAL_DMG = 150; + SPIRAL_SPIRTE_FILE = "firemagic.spr"; + SPIRAL_SPRITE_FRAMES = 8; + SPIRAL_SPRITE_SCALE = 0.5; + SPIRAL_SPRITE_COLOR = Vector3(255, 255, 255); + SPIRAL_GLOW_COLOR = Vector3(255, 255, 0); + SPIRAL_ON = 1; + int SPIRAL_ARROW = 1; + } + if (!(AOE_ARROW)) + { + string TRACE_START = GetEntityOrigin(GetOwner()); + TRACE_START += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 0, 64)); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string TRACE_END = TARG_ORG; + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(TRACE_START, TRACE_END); + ANG_TO_TARG = "x"; + TRACE_END += /* TODO: $relpos */ $relpos(ANG_TO_TARG, Vector3(0, 4096, 0)); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + TRACK_SPIRAL_ANG = ANG_TO_TARG; + TRACK_SPIRAL_ORG = TRACE_START; + TRACK_SPIRAL_DEST = TRACE_LINE; + ClientEvent("new", "all", "monsters/telf_warrior_bow_cl", TRACK_SPIRAL_ORG, SPIRAL_SPIRTE_FILE, SPIRAL_SPRITE_FRAMES, SPIRAL_SPRITE_SCALE, SPIRAL_SPRITE_COLOR, SPIRAL_GLOW_COLOR, ANG_TO_TARG, ARROW_CL_SPEED); + MAXRANGE_RATIO = GetEntityRange(m_hAttackTarget); + MAXRANGE_RATIO /= ATTACK_RANGE; + FIRE_DELAY = /* TODO: $get_skill_ratio */ $get_skill_ratio(MAXRANGE_RATIO, 0.25, 3.25); + LogDebug("fire_delay: FIRE_DELAY"); + NEXT_FIRE = GetGameTime(); + NEXT_FIRE += FIRE_DELAY; + if (!(TRACK_ARROW_ACTIVE)) + { + } + TRACK_ARROW_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "track_spiral_arrow"); + } + else + { + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string HALF_AOE = ARROW_AOE; + HALF_AOE /= 2; + TARG_ORG += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359.99), 0), Vector3(0, HALF_AOE, 0)); + if (!(IsValidPlayer(TARG_ORG))) + { + TARG_ORG += "z"; + } + float TARG_DIST = Distance(TARG_ORG, GetMonsterProperty("origin")); + TARG_DIST /= 25; + SetAngles("add_view.pitch"); + TossProjectile(ARROW_SCRIPT, /* TODO: $relpos */ $relpos(10, 0, 28), "none", ARROW_SPEED, DMG_ARROW, 1, "none"); + float GRAV_ADJ = 0.4; + if ((TARG_ORG).z < GetMonsterProperty("origin.z")) + { + string ADJ_RATIO = (TARG_ORG).z; + ADJ_RATIO /= GetMonsterProperty("origin.z"); + string GRAV_ADJ = /* TODO: $get_skill_ratio */ $get_skill_ratio(ADJ_RATIO, 0.4, 2.0); + LogDebug("adjusting down GRAV_ADJ ADJ_RATIO"); + } + CallExternal("ent_lastprojectile", "ext_lighten", GRAV_ADJ, ARROW_GLOW, ARROW_GLOW_COLOR); + } + if (MISS_COUNT > 4) + { + MISS_COUNT = 2; + PlayAnim("once", "break"); + chicken_run(1.5); + } + } + + void ext_arrow_hit() + { + string TARG_ALIVE = IsEntityAlive(param2); + if (GetRelationship(param2) == "enemy") + { + if ((TARG_ALIVE)) + { + } + int HIT_ENEMY = 1; + } + if (ARROW_EFFECT != "ARROW_EFFECT") + { + if ((HIT_ENEMY)) + { + } + ApplyEffect(param2, ARROW_EFFECT, ARROW_DOT_DUR, GetEntityIndex(GetOwner()), ARROW_DOT_DMG); + } + if ((AOE_ARROW)) + { + string ARROW_POS = param3; + if ((HIT_ENEMY)) + { + string ARROW_POS = GetEntityOrigin(param2); + } + ARROW_POS = "z"; + ClientEvent("new", "all", ARROW_CL_SCRIPT, ARROW_POS, 128, 1, Vector3(255, 0, 0)); + XDoDamage(ARROW_POS, ARROW_AOE, ARROW_DMG_AOE, 0, GetOwner(), GetOwner(), "none", ARROW_DMG_TYPE); + ARROW_TARGET_LIST = FindEntitiesInSphere("enemy", ARROW_AOE); + if (ARROW_TARGET_LIST != "none") + { + } + for (int i = 0; i < GetTokenCount(ARROW_TARGET_LIST, ";"); i++) + { + arrow_affect_targets(); + } + } + } + + void arrow_affect_targets() + { + string CUR_TARG = GetToken(ARROW_TARGET_LIST, i, ";"); + ApplyEffect(CUR_TARG, ARROW_EFFECT, ARROW_DOT_DUR, GetEntityIndex(GetOwner()), ARROW_DOT_DMG); + MISS_COUNT = 0; + } + + void game_dodamage() + { + if ((IsEntityAlive(param2))) + { + if (GetRelationship(param2) == "enemy") + { + } + MISS_COUNT = 0; + } + } + + void spiral_done() + { + TRACK_ARROW_ACTIVE = 0; + SPIRAL_ON = 0; + } + + void track_spiral_arrow() + { + if (!(TRACK_ARROW_ACTIVE)) return; + ScheduleDelayedEvent(0.2, "track_spiral_arrow"); + TRACK_SPIRAL_ORG += /* TODO: $relpos */ $relpos(TRACK_SPIRAL_ANG, Vector3(0, ARROW_SV_SPEED, 0)); + XDoDamage(TRACK_SPIRAL_ORG, 128, SPIRAL_DMG, 0, GetOwner(), GetOwner(), "none", SPIRAL_DMG_TYPE); + if ((G_DEVELOPER_MODE)) + { + string BEAM_START = TRACK_SPIRAL_ORG; + string BEAM_END = BEAM_START; + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 32)); + Effect("beam", "point", "lgtning.spr", 100, BEAM_START, BEAM_END, Vector3(255, 0, 255), 200, 0, 0.2); + } + } + + void npc_selectattack() + { + if (GetGameTime() < NEXT_FIRE) + { + int HOLD_ATTACK = 1; + } + if ((HOLD_ATTACK)) + { + ANIM_ATTACK = ANIM_IDLE; + AS_ATTACKING = GetGameTime(); + } + else + { + ANIM_ATTACK = "shootbow"; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_esword.as b/scripts/angelscript/monsters/telf_warrior_esword.as new file mode 100644 index 00000000..201ec473 --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_esword.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "monsters/elf_warrior_base.as" + +namespace MS +{ + +class TelfWarriorEsword : CGameScript +{ + string ANIM_ATTACK; + string ATTACK_STANCE; + int DMG_MELEE; + string DMG_TYPE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int NPC_GIVE_EXP; + + TelfWarriorEsword() + { + NPC_GIVE_EXP = 2000; + DROP_GOLD = 1; + DROP_GOLD_AMT = 500; + DMG_TYPE = "slash"; + ATTACK_STANCE = "2hsword"; + DMG_MELEE = 800; + } + + void elf_spawn() + { + SetName("Torkalath Blademistress"); + SetHealth(4000); + SetDamageResistance("all", 0.5); + SetRace("torkie"); + SetModelBody(1, 4); + } + + void OnPostSpawn() override + { + ANIM_ATTACK = "longsword_swipe_L"; + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_fmace_cl.as b/scripts/angelscript/monsters/telf_warrior_fmace_cl.as new file mode 100644 index 00000000..553b425a --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_fmace_cl.as @@ -0,0 +1,77 @@ +#pragma context client + +namespace MS +{ + +class TelfWarriorFmaceCl : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string MY_OWNER; + int ROT_CYCLE; + int ROT_DISTANCE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + + TelfWarriorFmaceCl() + { + SPRITE_NAME = "xfireball3.spr"; + SPRITE_NFRAMES = 19; + Precache("xfireball3.spr"); + } + + void client_activate() + { + MY_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + ROT_CYCLE = 0; + ROT_DISTANCE = 0; + FX_DURATION("end_fx"); + fx_loop(); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), 128, Vector3(255, 128, 64), FX_DURATION); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.05, "fx_loop"); + ROT_CYCLE += 10; + if (ROT_CYCLE > 359) + { + ROT_CYCLE = 0; + } + ROT_DISTANCE += 2; + if (ROT_DISTANCE > 128) + { + ROT_DISTANCE = 0; + } + string SPRITE_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"); + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(0, ROT_CYCLE, 0), Vector3(0, ROT_DISTANCE, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, SPRITE_POS, "setup_weapon_sprite"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(6.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void setup_weapon_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_fmace_dshield.as b/scripts/angelscript/monsters/telf_warrior_fmace_dshield.as new file mode 100644 index 00000000..de32be7f --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_fmace_dshield.as @@ -0,0 +1,75 @@ +#pragma context server + +#include "monsters/elf_warrior_base.as" + +namespace MS +{ + +class TelfWarriorFmaceDshield : CGameScript +{ + string ANIM_ATTACK; + string ATTACK_STANCE; + string ATTACK_TYPE; + int CAN_BLOCK; + float CHANCE_DOT; + float CHANCE_STUN; + int DMG_WAURA; + int DOT_WAURA; + int DROP_GOLD; + int DROP_GOLD_AMT; + float FREQ_WAURA; + int NPC_GIVE_EXP; + string SOUND_WAURA_LOOP; + string SOUND_WAURA_START; + string WAURA_DMG_TYPE; + float WAURA_DURATION; + string WAURA_EFFECT_SCRIPT; + int WAURA_RANGE; + string WAURA_TYPE; + int WEAPON_AURA; + string WEAPON_AURA_CL_SCRIPT; + + TelfWarriorFmaceDshield() + { + NPC_GIVE_EXP = 2500; + DROP_GOLD = 1; + DROP_GOLD_AMT = 500; + CHANCE_STUN = 0.2; + ATTACK_TYPE = "blunt"; + ATTACK_STANCE = "1h"; + CHANCE_DOT = 1.0; + CAN_BLOCK = 1; + WEAPON_AURA = 1; + WAURA_TYPE = "fire"; + WAURA_EFFECT_SCRIPT = "effects/dot_fire"; + WAURA_RANGE = 128; + WEAPON_AURA_CL_SCRIPT = "monsters/telf_warrior_fmace_cl"; + DMG_WAURA = 400; + DOT_WAURA = 150; + WAURA_DMG_TYPE = "fire_effect"; + FREQ_WAURA = Random(20.0, 30.0); + WAURA_DURATION = 5.0; + SOUND_WAURA_START = "monsters/goblin/sps_fogfire.wav"; + SOUND_WAURA_LOOP = "magic/volcano_loop.wav"; + Precache("xfireball3.spr"); + } + + void elf_spawn() + { + SetName("Torkalath Warrior"); + SetHealth(5000); + SetDamageResistance("all", 0.5); + ANIM_ATTACK = "swordswing1_R"; + SetRace("torkie"); + SetModelBody(1, 2); + SetModelBody(2, 1); + } + + void OnPostSpawn() override + { + ANIM_ATTACK = "swordswing1_R"; + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_idagger.as b/scripts/angelscript/monsters/telf_warrior_idagger.as new file mode 100644 index 00000000..6493bbac --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_idagger.as @@ -0,0 +1,59 @@ +#pragma context server + +#include "monsters/elf_warrior_base.as" + +namespace MS +{ + +class TelfWarriorIdagger : CGameScript +{ + string ANIM_ATTACK; + string ATTACK_STANCE; + int CAN_FREEZE_AURA; + float CHANCE_DOT; + int DMG_MELEE; + string DMG_TYPE; + int DOT_AMT; + float DOT_DURATION; + string DOT_SCRIPT; + int DROP_GOLD; + int DROP_GOLD_AMT; + int NPC_GIVE_EXP; + + TelfWarriorIdagger() + { + NPC_GIVE_EXP = 3000; + DROP_GOLD = 1; + DROP_GOLD_AMT = 500; + DMG_TYPE = "pierce"; + ATTACK_STANCE = "assasin"; + CHANCE_DOT = 1.0; + DOT_SCRIPT = "effects/dot_cold"; + DOT_AMT = 50; + DOT_DURATION = 5.0; + DMG_MELEE = 200; + CAN_FREEZE_AURA = 1; + } + + void game_precache() + { + Precache("effects/sfx_ice_burst"); + } + + void elf_spawn() + { + SetName("Torkalath Frostmistress"); + SetHealth(5000); + SetDamageResistance("all", 0.5); + SetRace("torkie"); + SetModelBody(1, 6); + } + + void OnPostSpawn() override + { + ANIM_ATTACK = "swordjab1_R"; + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_laxe.as b/scripts/angelscript/monsters/telf_warrior_laxe.as new file mode 100644 index 00000000..a8069c11 --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_laxe.as @@ -0,0 +1,70 @@ +#pragma context server + +#include "monsters/elf_warrior_base.as" + +namespace MS +{ + +class TelfWarriorLaxe : CGameScript +{ + string ANIM_ATTACK; + string ATTACK_STANCE; + float CHANCE_DOT; + string DMG_TYPE; + int DOT_AMT; + float DOT_DURATION; + string DOT_SCRIPT; + int DROP_GOLD; + int DROP_GOLD_AMT; + int NPC_GIVE_EXP; + string SOUND_SHOCKAMB1; + string SOUND_SHOCKAMB2; + string SOUND_SHOCKAMB3; + int WEAPON_AURA; + + TelfWarriorLaxe() + { + NPC_GIVE_EXP = 2500; + DROP_GOLD = 1; + DROP_GOLD_AMT = 500; + DMG_TYPE = "slash"; + ATTACK_STANCE = "2haxe"; + CHANCE_DOT = 1.0; + DOT_SCRIPT = "effects/dot_lightning"; + DOT_AMT = 50; + DOT_DURATION = 5.0; + WEAPON_AURA = 1; + SOUND_SHOCKAMB1 = "debris/zap1.wav"; + SOUND_SHOCKAMB2 = "debris/zap3.wav"; + SOUND_SHOCKAMB3 = "debris/zap8.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(5.0, 10.0)); + if ((IsEntityAlive(GetOwner()))) + { + } + // PlayRandomSound from: SOUND_SHOCKAMB1, SOUND_SHOCKAMB2, SOUND_SHOCKAMB3 + array sounds = {SOUND_SHOCKAMB1, SOUND_SHOCKAMB2, SOUND_SHOCKAMB3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + Effect("beam", "ents", "lgtning.spr", 20, GetOwner(), 1, GetOwner(), 2, Vector3(255, 255, 0), 200, 100, 1.0); + } + + void elf_spawn() + { + SetName("Torkalath Slasher"); + SetHealth(7000); + SetDamageResistance("all", 0.5); + SetRace("torkie"); + SetModelBody(1, 3); + } + + void OnPostSpawn() override + { + ANIM_ATTACK = "battleaxe_swing1_L"; + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_laxe_cl.as b/scripts/angelscript/monsters/telf_warrior_laxe_cl.as new file mode 100644 index 00000000..dc330d68 --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_laxe_cl.as @@ -0,0 +1,69 @@ +#pragma context client + +namespace MS +{ + +class TelfWarriorLaxeCl : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string MY_OWNER; + string WEAPON_POS; + + void client_activate() + { + MY_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + ClientEffect("tempent", "sprite", "3dmflaora.spr", /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"), "setup_weapon_sprite", "update_weapon_sprite"); + FX_DURATION("end_fx"); + fx_loop(); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), 128, Vector3(255, 255, 0), FX_DURATION); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.05, "fx_loop"); + WEAPON_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment0"); + string BEAM_START = WEAPON_POS; + string BEAM_END = BEAM_START; + float RND_ANG = Random(0.0, 359.99); + float RND_UD = Random(-20.0, 20.0); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, 128, RND_UD)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.1, 2, 0.1, 0.3, 0.1, 30, Vector3(2, 1.5, 0.25)); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void update_weapon_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", WEAPON_POS); + } + + void setup_weapon_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(254, 254, 1)); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_warrior_pdagger.as b/scripts/angelscript/monsters/telf_warrior_pdagger.as new file mode 100644 index 00000000..b17bbeb9 --- /dev/null +++ b/scripts/angelscript/monsters/telf_warrior_pdagger.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "monsters/elf_warrior_base.as" + +namespace MS +{ + +class TelfWarriorPdagger : CGameScript +{ + string ANIM_ATTACK; + string ATTACK_STANCE; + float BASE_MOVESPEED; + int CAN_KICK; + int CAN_THROW; + float CHANCE_DOT; + int DMG_MELEE; + string DMG_TYPE; + int DOT_AMT; + float DOT_DURATION; + string DOT_SCRIPT; + int DROP_GOLD; + int DROP_GOLD_AMT; + int LEAP_AFTER_KICK; + int NPC_GIVE_EXP; + + TelfWarriorPdagger() + { + NPC_GIVE_EXP = 3000; + DROP_GOLD = 1; + DROP_GOLD_AMT = 500; + DMG_TYPE = "pierce"; + ATTACK_STANCE = "assasin"; + CHANCE_DOT = 1.0; + DOT_SCRIPT = "effects/dot_poison"; + DOT_AMT = 40; + DOT_DURATION = 10.0; + CAN_KICK = 1; + LEAP_AFTER_KICK = 1; + CAN_THROW = 1; + DMG_MELEE = 200; + } + + void elf_spawn() + { + SetName("Torkalath Assassin"); + SetHealth(4000); + SetDamageResistance("all", 0.5); + SetRace("torkie"); + SetMoveSpeed(2.0); + BASE_MOVESPEED = 2.0; + SetModelBody(1, 1); + } + + void OnPostSpawn() override + { + ANIM_ATTACK = "swordjab1_R"; + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_wizard_novice.as b/scripts/angelscript/monsters/telf_wizard_novice.as new file mode 100644 index 00000000..048a6c51 --- /dev/null +++ b/scripts/angelscript/monsters/telf_wizard_novice.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "monsters/elf_wizard_base.as" + +namespace MS +{ + +class TelfWizardNovice : CGameScript +{ + int DROP_GOLD; + int DROP_GOLD_AMT; + int ELF_CAN_GUIDED; + string ELF_GUIDED_DMG_TYPE; + int ELF_IS_NOVICE; + int ELF_PALM_ATTACK; + int ELF_PALM_TYPE; + int NPC_GIVE_EXP; + + TelfWizardNovice() + { + NPC_GIVE_EXP = 3000; + DROP_GOLD = 1; + DROP_GOLD_AMT = 300; + ELF_IS_NOVICE = 1; + ELF_PALM_ATTACK = 1; + ELF_CAN_GUIDED = 1; + ELF_GUIDED_DMG_TYPE = "magic"; + ELF_PALM_TYPE = RandomInt(1, 3); + } + + void elf_spawn() + { + SetName("Torkalath Novice"); + SetHealth(5000); + SetRace("torkie"); + SetModelBody(1, 0); + SetProp(GetOwner(), "skin", 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/telf_wizard_xbow.as b/scripts/angelscript/monsters/telf_wizard_xbow.as new file mode 100644 index 00000000..dd22acca --- /dev/null +++ b/scripts/angelscript/monsters/telf_wizard_xbow.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "monsters/elf_wizard_base.as" + +namespace MS +{ + +class TelfWizardXbow : CGameScript +{ + int ATTACK_HITRANGE_MELEE; + int DMG_MELEE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int ELF_EXPLOSIVE_BOLTS; + int ELF_IS_ARCHER; + string ELF_MELEE_PUSH_VEL; + int NPC_GIVE_EXP; + + TelfWizardXbow() + { + NPC_GIVE_EXP = 1500; + DROP_GOLD = 1; + DROP_GOLD_AMT = 300; + ELF_IS_ARCHER = 1; + ELF_EXPLOSIVE_BOLTS = 1; + ELF_MELEE_PUSH_VEL = /* TODO: $relvel */ $relvel(10, 400, 110); + DMG_MELEE = 25; + ATTACK_HITRANGE_MELEE = 64; + } + + void elf_spawn() + { + SetName("Torkalath Apprentice"); + SetHealth(4000); + SetRace("torkie"); + SetModelBody(1, 3); + SetProp(GetOwner(), "skin", 2); + } + +} + +} diff --git a/scripts/angelscript/monsters/test_skele.as b/scripts/angelscript/monsters/test_skele.as new file mode 100644 index 00000000..f69e7fc0 --- /dev/null +++ b/scripts/angelscript/monsters/test_skele.as @@ -0,0 +1,19 @@ +#pragma context server + +namespace MS +{ + +class TestSkele : CGameScript +{ + void OnSpawn() override + { + SetHealth(1); + SetModel("monsters/skeleton3.mdl"); + SetWidth(32); + SetHeight(96); + SetRace("hated"); + } + +} + +} diff --git a/scripts/angelscript/monsters/thornlandspider.as b/scripts/angelscript/monsters/thornlandspider.as new file mode 100644 index 00000000..c3e87c3d --- /dev/null +++ b/scripts/angelscript/monsters/thornlandspider.as @@ -0,0 +1,109 @@ +#pragma context server + +#include "monsters/spider_base.as" + +namespace MS +{ + +class Thornlandspider : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_ACCURACY; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int DELETE_ON_DEATH; + int MOVE_RANGE; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + string SND_STRUCK1; + string SND_STRUCK2; + string SND_STRUCK3; + string SND_STRUCK4; + string SND_STRUCK5; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + float SPIDER_IDLE_DELAY; + int SPIDER_IDLE_VOL; + int SPIDER_VOLUME; + + Thornlandspider() + { + if (StringToLower(GetMapName()) == "thornlands") + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 200; + } + else + { + NPC_GIVE_EXP = 100; + } + DELETE_ON_DEATH = 1; + SOUND_PAIN = "monsters/spider/spiderhiss.wav"; + SOUND_IDLE1 = "monsters/spider/spideridle.wav"; + SOUND_DEATH = "monsters/spider/spiderdie.wav"; + SND_STRUCK1 = "body/flesh1.wav"; + SND_STRUCK2 = "body/flesh2.wav"; + SND_STRUCK3 = "body/flesh3.wav"; + SND_STRUCK4 = SOUND_PAIN; + SND_STRUCK5 = SOUND_PAIN; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + ANIM_IDLE = "idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DODGE = "dodge"; + ANIM_DEATH = "die"; + MOVE_RANGE = 80; + ATTACK_RANGE = 200; + ATTACK_HITRANGE = 250; + ATTACK_DAMAGE_LOW = 9.0; + ATTACK_DAMAGE_HIGH = 12.0; + ATTACK_ACCURACY = 0.85; + NPC_GIVE_EXP = 100; + SPIDER_IDLE_VOL = 4; + SPIDER_IDLE_DELAY = 3.6; + SPIDER_VOLUME = 10; + } + + void OnSpawn() override + { + SetHealth(500); + SetWidth(100); + SetHeight(64); + SetName("Timidus Textor"); + SetHearingSensitivity(6); + SetModel("monsters/giant_spider.mdl"); + SetDamageResistance("all", ".85"); + } + + void bite1() + { + if (RandomInt(0, 1) == 0) + { + // PlayRandomSound from: SPIDER_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SPIDER_VOLUME, SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + DoDamage(m_hLastSeen, ATTACK_HITRANGE, Random(ATTACK_DAMAGE_LOW, ATTACK_DAMAGE_HIGH), 0.85, "slash"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(PUSH_VEL != "PUSH_VEL")) return; + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + +} + +} diff --git a/scripts/angelscript/monsters/trencherbeak.as b/scripts/angelscript/monsters/trencherbeak.as new file mode 100644 index 00000000..0cbdd370 --- /dev/null +++ b/scripts/angelscript/monsters/trencherbeak.as @@ -0,0 +1,289 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_jumper.as" + +namespace MS +{ + +class Trencherbeak : CGameScript +{ + string ANIM_ALERT1; + string ANIM_ALERT2; + string ANIM_ATTACK; + string ANIM_CUSTOM_FLINCH1; + string ANIM_CUSTOM_FLINCH2; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_NPC_JUMP; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int COMBAT_JUMP; + string DEATH_GOAL; + int DID_ALERT; + int DMG_BITE; + float FREQ_JUMP; + string HALF_HP; + int MOMMY_ESCORT; + int MOVE_RANGE; + string NEXT_COMBAT_JUMP; + string NEXT_CUST_FLINCH; + string NEXT_HEARD_ALERT; + string NEXT_IDLE; + string NEXT_JUMP; + string NEXT_VICTORY; + int NPC_GIVE_EXP; + int NPC_JUMPER; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ALERT3; + string SOUND_ALERT4; + string SOUND_ALERT5; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_JUMP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SUSPEND_AI; + + Trencherbeak() + { + ANIM_ATTACK = "bite"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle"; + ANIM_RUN = "run"; + ANIM_SEARCH = "idlelookout"; + ANIM_ALERT1 = "roarangry"; + ANIM_ALERT2 = "hiss"; + ANIM_CUSTOM_FLINCH1 = "bigflinch"; + ANIM_CUSTOM_FLINCH2 = "smallflinch"; + ANIM_JUMP = "jumpscrape"; + ANIM_DEATH = "dietwitch"; + NPC_GIVE_EXP = 400; + ATTACK_MOVERANGE = 40; + MOVE_RANGE = 40; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 90; + DMG_BITE = 200; + FREQ_JUMP = Random(5.0, 8.0); + SOUND_ATTACK1 = "monsters/beak/attack1.wav"; + SOUND_ATTACK2 = "monsters/beak/attack2.wav"; + SOUND_STRUCK1 = "monsters/tube/TubeCritter_Hit1.wav"; + SOUND_STRUCK2 = "monsters/tube/TuberCritter_Hit2.wav"; + SOUND_STRUCK3 = "monsters/tube/TubeCritter_Hit3.wav"; + SOUND_PAIN1 = "monsters/beak/pain1.wav"; + SOUND_PAIN2 = "monsters/beak/pain2.wav"; + SOUND_PAIN3 = "monsters/beak/suffer.wav"; + SOUND_IDLE = "monsters/beak/roar.wav"; + SOUND_ALERT1 = "monsters/beak/screech2.wav"; + SOUND_ALERT2 = "monsters/beak/screech6.wav"; + SOUND_ALERT3 = "monsters/beak/beakhiss.wav"; + SOUND_ALERT4 = "monsters/beak/alert1.wav"; + SOUND_ALERT5 = "monsters/beak/alert2.wav"; + SOUND_DEATH = "monsters/beak/die1.wav"; + SOUND_JUMP = "monsters/birds/flap_small.wav"; + ANIM_NPC_JUMP = "jumpscrape"; + NPC_JUMPER = 1; + } + + void OnSpawn() override + { + SetName("Trencherbeak"); + SetModel("monsters/beak.mdl"); + SetWidth(32); + SetHeight(32); + SetRace("wildanimal"); + SetHealth(500); + SetHearingSensitivity(8); + ScheduleDelayedEvent(2.0, "finalize_me"); + SetRoam(true); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + + void finalize_me() + { + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + } + + void my_target_died() + { + if (!(GetGameTime() > NEXT_VICTORY)) return; + NEXT_VICTORY = GetGameTime(); + NEXT_VICTORY += 15.0; + PlayAnim("critical", "eating"); + npcatk_suspend_roam(2.0); + EmitSound(GetOwner(), 0, "monsters/beak/eating.wav", 10); + DID_ALERT = 0; + } + + void npc_targetsighted() + { + if ((DID_ALERT)) return; + npcatk_suspend_roam(2.0); + SetMoveDest(m_hAttackTarget); + DID_ALERT = 1; + NEXT_JUMP = GetGameTime(); + NEXT_JUMP += FREQ_JUMP; + int RND_ALERT = RandomInt(1, 2); + if (RND_ALERT == 1) + { + PlayAnim("critical", ANIM_ALERT1); + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3, SOUND_ALERT4, SOUND_ALERT5 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3, SOUND_ALERT4, SOUND_ALERT5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (RND_ALERT == 2) + { + PlayAnim("critical", ANIM_ALERT2); + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3, SOUND_ALERT4, SOUND_ALERT5 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3, SOUND_ALERT4, SOUND_ALERT5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((SUSPEND_AI)) return; + if ((IS_FLEEING)) return; + if ((I_R_FROZEN)) return; + if (m_hAttackTarget == "unset") + { + if (GetGameTime() > NEXT_IDLE) + { + } + NEXT_IDLE = GetGameTime(); + NEXT_IDLE += Random(5.0, 15.0); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + PlayAnim("once", ANIM_SEARCH); + } + if (!(m_hAttackTarget != "unset")) return; + if (!(GetGameTime() > NEXT_COMBAT_JUMP)) return; + NEXT_COMBAT_JUMP = GetGameTime(); + NEXT_COMBAT_JUMP += FREQ_JUMP; + COMBAT_JUMP = 1; + PlayAnim("critical", ANIM_JUMP); + } + + void npcatk_jump() + { + COMBAT_JUMP = 0; + NEXT_COMBAT_JUMP = GetGameTime(); + NEXT_COMBAT_JUMP += FREQ_JUMP; + } + + void frame_jump_boost() + { + EmitSound(GetOwner(), 0, SOUND_JUMP, 10); + if (!(COMBAT_JUMP)) return; + int RND_LR = RandomInt(1, 2); + if (RND_LR == 1) + { + int RND_LR = -200; + } + if (RND_LR == 2) + { + int RND_LR = 200; + } + float RND_VADJ = Random(200.0, 300.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(RND_LR, 150, RND_VADJ)); + COMBAT_JUMP = 0; + } + + void set_hunt_on_spawn() + { + DID_ALERT = 1; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3, SOUND_ALERT4, SOUND_ALERT5 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3, SOUND_ALERT4, SOUND_ALERT5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + GetAllPlayers(PLAYER_LIST); + string SORT_LIST = /* TODO: $sort_entlist */ $sort_entlist(PLAYER_LIST, "range"); + npcatk_settarget(GetToken(SORT_LIST, 0, ";")); + } + + void frame_bite_start() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void frame_bite() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, 0.8, "pierce"); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + float RND_RL = Random(-200, 200); + AddVelocity(param2, /* TODO: $relvel */ $relvel(RND_RL, 110, 120)); + } + + void OnDamage(int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(GetGameTime() > NEXT_CUST_FLINCH)) return; + NEXT_CUST_FLINCH = GetGameTime(); + NEXT_CUST_FLINCH += 5.0; + npcatk_suspend_ai(1.5); + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_CUSTOM_FLINCH); + } + + void npc_heard_player() + { + if (!(m_hAttackTarget == "unset")) return; + if (!(GetGameTime() > NEXT_HEARD_ALERT)) return; + NEXT_HEARD_ALERT = GetGameTime(); + NEXT_HEARD_ALERT += 10.0; + PlayAnim("critical", ANIM_SEARCH); + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3, SOUND_ALERT4, SOUND_ALERT5 + array sounds = {SOUND_ALERT1, SOUND_ALERT2, SOUND_ALERT3, SOUND_ALERT4, SOUND_ALERT5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void ext_mommy_died() + { + if (!(MOMMY_ESCORT)) return; + npcatk_suspend_ai(); + DEATH_GOAL = param1; + PlayAnim("once", "break"); + PlayAnim("once", ANIM_RUN); + SetMoveDest(DEATH_GOAL); + death_goal_loop(); + } + + void death_goal_loop() + { + SetRoam(true); + SUSPEND_AI = 1; + ScheduleDelayedEvent(2.0, "death_goal_loop"); + SetMoveDest(DEATH_GOAL); + } + + void set_mommy_escort() + { + MOMMY_ESCORT = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/troll.as b/scripts/angelscript/monsters/troll.as new file mode 100644 index 00000000..d02a5e89 --- /dev/null +++ b/scripts/angelscript/monsters/troll.as @@ -0,0 +1,245 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Troll : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int CAN_HUNT; + int DID_WARCRY; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int HUNT_AGRO; + string IMMUNE_VAMPIRE; + string IS_GUARDIAN; + int MOVE_RANGE; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string PUSH_VEL; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WALK1; + string SOUND_WALK2; + + Troll() + { + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod1.wav"; + SOUND_PAIN = "monsters/troll/trollpain.wav"; + SOUND_ATTACK = "monsters/troll/trollattack.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + SOUND_IDLE = "monsters/troll/trollidle2.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 35; + ANIM_IDLE = "idle0"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die_fall"; + ANIM_ATTACK = "double_punch"; + ATTACK_RANGE = 135; + ATTACK_HITRANGE = 200; + CAN_FLINCH = 0; + MOVE_RANGE = 100; + CAN_HUNT = 1; + HUNT_AGRO = 1; + NPC_GIVE_EXP = 100; + NPC_MUST_SEE_TARGET = 0; + Precache(SOUND_DEATH); + Precache("monsters/base_monster"); + Precache("monsters/base_npc_attack"); + Precache("monsters/base_npc"); + Precache("weapons/axemetal1.wav"); + Precache("weapons/axemetal2.wav"); + Precache("debris/concrete1.wav"); + Precache("weapons/cbar_hitbod1.wav"); + } + + void OnSpawn() override + { + SetHealth(300); + SetWidth(100); + SetHeight(125); + SetName("Troll"); + if (GetMapName() == "ww3d") + { + IS_GUARDIAN = 1; + } + if ((G_SHAD_PRESENT)) + { + bo_zombie_mode(); + } + if ((IS_GUARDIAN)) + { + SetName("Temple Guardian"); + SetRace("demon"); + SetProp(GetOwner(), "skin", 1); + IMMUNE_VAMPIRE = 1; + SetBloodType("none"); + ScheduleDelayedEvent(0.1, "guard_attribs"); + } + if (!(IS_GUARDIAN)) + { + SetRace("orc"); + } + SetRoam(true); + SetDamageResistance("all", ".7"); + SetDamageResistance("fire", 1.2); + SetDamageResistance("lightning", 1.1); + SetModel("monsters/troll.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetActionAnim(ANIM_ATTACK); + SetHearingSensitivity(5); + ScheduleDelayedEvent(10.0, "random_idle"); + troll_spawn(); + } + + void guard_attribs() + { + SetDamageResistance("holy", 2.0); + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + } + + void attack_1() + { + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 200, 10); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(ENTITY_ENEMY, "direct", Random(20, 30), 0.75, "blunt"); + } + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = "hit_down"; + } + } + + void attack_2() + { + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(ENTITY_ENEMY, "direct", Random(35, 45), 0.75, "blunt"); + } + ANIM_ATTACK = "double_punch"; + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = "double_punch"; + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + EmitSound(GetOwner(), 2, SOUND_PAIN, 5); + } + + void stomp_1() + { + EmitSound(GetOwner(), 2, SOUND_WALK1, 8); + } + + void stomp_2() + { + EmitSound(GetOwner(), 2, SOUND_WALK2, 8); + } + + void game_hearsound() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_IDLE); + } + + void random_idle() + { + ScheduleDelayedEvent(10.0, "random_idle"); + if ((IS_HUNTING)) return; + if ((false)) return; + if ((IS_FLEEING)) return; + int ANIM_SELECT = RandomInt(0, 3); + if (ANIM_SELECT == 0) + { + ANIM_IDLE = "idle0"; + } + if (ANIM_SELECT == 1) + { + ANIM_IDLE = "idle1"; + } + if (ANIM_SELECT == 2) + { + ANIM_IDLE = "idle2"; + } + if (ANIM_SELECT == 3) + { + ANIM_IDLE = "idle3"; + } + if ((ADVANCED_SEARCHING)) + { + ANIM_IDLE = "idle0"; + } + PlayAnim("once", ANIM_IDLE); + } + + void warcry() + { + EmitSound(GetOwner(), 2, SOUND_IDLE, 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((DID_WARCRY)) return; + if (!(IsValidPlayer(m_hLastSeen))) return; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", "idle2"); + DID_WARCRY = 1; + } + + void my_target_died() + { + DID_WARCRY = 0; + if ((false)) return; + PlayAnim("critical", "idle2"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(PUSH_VEL != "PUSH_VEL")) return; + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + + void bo_zombie_mode() + { + SetName("Petrified Troll"); + SetRace("demon"); + SetProp(GetOwner(), "skin", 1); + IMMUNE_VAMPIRE = 1; + SetBloodType("none"); + ScheduleDelayedEvent(0.1, "guard_attribs"); + } + +} + +} diff --git a/scripts/angelscript/monsters/troll2.as b/scripts/angelscript/monsters/troll2.as new file mode 100644 index 00000000..248d2327 --- /dev/null +++ b/scripts/angelscript/monsters/troll2.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "calruin/cavetroll2.as" + +namespace MS +{ + +class Troll2 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/troll_armored.as b/scripts/angelscript/monsters/troll_armored.as new file mode 100644 index 00000000..d771d908 --- /dev/null +++ b/scripts/angelscript/monsters/troll_armored.as @@ -0,0 +1,294 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class TrollArmored : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int CAN_HUNT; + int DID_WARCRY; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + float FREQ_THROW; + int HUNT_AGRO; + string IMMUNE_VAMPIRE; + int IN_THROW; + string IS_GUARDIAN; + int MOVE_RANGE; + string NEXT_THROW; + float NPC_BONUS_XP_RATIO; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string PUSH_VEL; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WALK1; + string SOUND_WALK2; + string THROW_TARGET; + + TrollArmored() + { + FREQ_THROW = Random(15.0, 30.0); + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod1.wav"; + SOUND_PAIN = "monsters/troll/trollpain.wav"; + SOUND_ATTACK = "monsters/troll/trollattack.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + SOUND_IDLE = "monsters/troll/trollidle2.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 20; + DROP_GOLD_MAX = 65; + ANIM_IDLE = "idle0"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die_fall"; + ANIM_ATTACK = "double_punch"; + ATTACK_RANGE = 75; + ATTACK_HITRANGE = 150; + CAN_FLINCH = 0; + MOVE_RANGE = 100; + CAN_HUNT = 1; + HUNT_AGRO = 1; + NPC_GIVE_EXP = 300; + NPC_MUST_SEE_TARGET = 0; + Precache(SOUND_DEATH); + Precache("monsters/base_monster"); + Precache("monsters/base_npc_attack"); + Precache("monsters/base_npc"); + Precache("weapons/axemetal1.wav"); + Precache("weapons/axemetal2.wav"); + Precache("debris/concrete1.wav"); + Precache("weapons/cbar_hitbod1.wav"); + } + + void game_precache() + { + Precache("monsters/summon/spiked_ball"); + } + + void OnSpawn() override + { + SetHealth(600); + SetDamageResistance("all", 0.25); + SetWidth(100); + SetHeight(100); + SetName("Battle Troll"); + if (GetMapName() == "ww3d") + { + IS_GUARDIAN = 1; + } + if ((G_SHAD_PRESENT)) + { + bo_zombie_mode(); + } + if ((IS_GUARDIAN)) + { + SetName("Temple Guardian"); + SetRace("demon"); + SetProp(GetOwner(), "skin", 1); + IMMUNE_VAMPIRE = 1; + SetBloodType("none"); + ScheduleDelayedEvent(0.1, "guard_attribs"); + } + if (!(IS_GUARDIAN)) + { + SetRace("orc"); + } + SetRoam(true); + SetModel("monsters/troll_armored.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetActionAnim(ANIM_ATTACK); + SetHearingSensitivity(5); + ScheduleDelayedEvent(10.0, "random_idle"); + troll_spawn(); + } + + void guard_attribs() + { + SetDamageResistance("holy", 2.0); + SOUND_STRUCK1 = "weapons/axemetal1.wav"; + SOUND_STRUCK2 = "weapons/axemetal2.wav"; + SOUND_STRUCK3 = "debris/concrete1.wav"; + } + + void attack_1() + { + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 200, 10); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(ENTITY_ENEMY, "direct", Random(30, 40), 0.75, "blunt"); + } + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = "hit_down"; + } + } + + void attack_2() + { + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(ENTITY_ENEMY, "direct", Random(55, 65), 0.75, "blunt"); + } + ANIM_ATTACK = "double_punch"; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + EmitSound(GetOwner(), 2, SOUND_PAIN, 5); + } + + void stomp_1() + { + EmitSound(GetOwner(), 2, SOUND_WALK1, 8); + } + + void stomp_2() + { + EmitSound(GetOwner(), 2, SOUND_WALK2, 8); + } + + void game_hearsound() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_IDLE); + } + + void random_idle() + { + ScheduleDelayedEvent(10.0, "random_idle"); + if ((IS_HUNTING)) return; + if ((false)) return; + if ((IS_FLEEING)) return; + int ANIM_SELECT = RandomInt(0, 3); + if (ANIM_SELECT == 0) + { + ANIM_IDLE = "idle0"; + } + if (ANIM_SELECT == 1) + { + ANIM_IDLE = "idle1"; + } + if (ANIM_SELECT == 2) + { + ANIM_IDLE = "idle2"; + } + if (ANIM_SELECT == 3) + { + ANIM_IDLE = "idle3"; + } + if ((ADVANCED_SEARCHING)) + { + ANIM_IDLE = "idle0"; + } + PlayAnim("once", ANIM_IDLE); + } + + void warcry() + { + EmitSound(GetOwner(), 2, SOUND_IDLE, 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((DID_WARCRY)) return; + if (!(IsValidPlayer(m_hLastSeen))) return; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", "idle2"); + DID_WARCRY = 1; + NEXT_THROW = GetGameTime(); + NEXT_THROW += 1.0; + } + + void my_target_died() + { + DID_WARCRY = 0; + if ((false)) return; + PlayAnim("critical", "idle2"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(PUSH_VEL != "PUSH_VEL")) return; + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + } + + void bo_zombie_mode() + { + SetName("Petrified Troll"); + SetRace("demon"); + SetProp(GetOwner(), "skin", 1); + IMMUNE_VAMPIRE = 1; + SetBloodType("none"); + ScheduleDelayedEvent(0.1, "guard_attribs"); + } + + void npc_targetsighted() + { + if (!(DID_WARCRY)) return; + if (!(GetGameTime() > NEXT_THROW)) return; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_RANGE)) return; + NEXT_THROW = GetGameTime(); + NEXT_THROW += FREQ_THROW; + SetMoveDest(m_hAttackTarget); + THROW_TARGET = m_hAttackTarget; + IN_THROW = 1; + SetRoam(false); + npcatk_suspend_ai(); + PlayAnim("critical", "throw_rock"); + ScheduleDelayedEvent(5.0, "exit_throw"); + } + + void rock_pickup() + { + SetModelBody(1, 1); + } + + void rock_throw() + { + SpawnNPC("monsters/summon/spiked_ball", /* TODO: $relpos */ $relpos(0, 64, 100), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), /* TODO: $relvel */ $relvel(0, 500, 110), 0.3 + exit_throw(); + } + + void exit_throw() + { + if (!(IN_THROW)) return; + SetModelBody(1, 0); + IN_THROW = 0; + SetRoam(true); + npcatk_resume_ai(); + } + + void set_bonus_orc_for() + { + if (!(StringToLower(GetMapName()) == "orc_for")) return; + NPC_BONUS_XP_RATIO = 3.0; + } + +} + +} diff --git a/scripts/angelscript/monsters/troll_fire.as b/scripts/angelscript/monsters/troll_fire.as new file mode 100644 index 00000000..b6654078 --- /dev/null +++ b/scripts/angelscript/monsters/troll_fire.as @@ -0,0 +1,214 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class TrollFire : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK1_DAMAGE; + float ATTACK2_DAMAGE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string DROP_ITEM1; + string DROP_ITEM1_CHANCE; + int FIRE_DAMAGE; + int HUNT_AGRO; + int I_AM_TURNABLE; + int I_R_SUMMONED; + int MOVE_RANGE; + string MY_MASTER; + int NPC_GIVE_EXP; + string PUSH_VEL; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WALK; + string SOUND_WALK1; + string SOUND_WALK2; + string STEP_COUNT; + + TrollFire() + { + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "monsters/troll/trollpain.wav"; + SOUND_STRUCK3 = "monsters/troll/trollpain.wav"; + SOUND_PAIN = "monsters/troll/trollpain.wav"; + SOUND_ATTACK1 = "monsters/troll/trollattack.wav"; + SOUND_ATTACK2 = "monsters/troll/trollattack.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK = "monsters/troll/trollidle.wav"; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + SOUND_IDLE = "monsters/troll/trollidle.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 35; + ANIM_RUN = "walk"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "dieheadshot2"; + ATTACK_RANGE = 125; + ATTACK_HITRANGE = 200; + CAN_FLINCH = 0; + MOVE_RANGE = 100; + CAN_HUNT = 1; + HUNT_AGRO = 1; + FIRE_DAMAGE = "$rand(20,100)"; + ATTACK1_DAMAGE = "$randf(30,80)"; + ATTACK2_DAMAGE = "$randf(100,300)"; + } + + void OnSpawn() override + { + I_AM_TURNABLE = 0; + SetWidth(72); + SetHeight(135); + SetRace("demon"); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetActionAnim(ANIM_ATTACK); + SetHealth(1000); + SetName("Efreeti"); + SetRoam(true); + NPC_GIVE_EXP = 200; + SetDamageResistance("all", 1.0); + SetDamageResistance("holy", 1.0); + SetDamageResistance("cold", 1.75); + SetDamageResistance("fire", 0.0); + SetHearingSensitivity(8); + SetModel("monsters/firetroll.mdl"); + if (RandomInt(1, 32) < "game.playersnb") + { + DROP_ITEM1 = "item_eh"; + DROP_ITEM1_CHANCE = 100; + } + else + { + if (StringToLower(GetMapName()) == "phlames") + { + } + DROP_ITEM1 = "item_eh"; + DROP_ITEM1_CHANCE = 100; + } + Effect("glow", GetOwner(), Vector3(255, 64, 48), 512, 3, 3); + troll_spawn(); + } + + void attack_1() + { + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 200, 10); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK1_DAMAGE, 0.75, "slash"); + if (RandomInt(0, 3) == 0) + { + ANIM_ATTACK = "attack2"; + } + if ((RandomInt(1, 8) + "=" + 1)) + { + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 10, GetEntityIndex(GetOwner()), FIRE_DAMAGE); + } + if ((RandomInt(1, 20) + "=" + 1)) + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_IDLE); + } + SetVolume(8); + EmitSound(GetOwner(), SOUND_ATTACK1); + } + + void attack_2() + { + ANIM_ATTACK = "attack1"; + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), FIRE_DAMAGE); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, ATTACK2_DAMAGE, 0.75, "slash"); + // PlayRandomSound from: SOUND_ATTACK1 + array sounds = {SOUND_ATTACK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_hearsound() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_IDLE); + } + + void game_dynamically_created() + { + SetSolid("none"); + ScheduleDelayedEvent(1, "ice_solidify"); + I_R_SUMMONED = 1; + MY_MASTER = GetEntityIndex("ent_creationowner"); + string MY_MASTER_LIVES = IsEntityAlive("ent_creationowner"); + if (!(MY_MASTER_LIVES)) return; + ScheduleDelayedEvent(2, "npcatk_flee", MY_MASTER, 275, 3); + anti_stuck_checks(); + } + + void ice_solidify() + { + string MY_LOC = GetEntityOrigin(GetOwner()); + string MY_MASTER_LOC = GetEntityOrigin("ent_creationowner"); + float MASTER_DISTANCE = Distance(MY_LOC, MY_MASTER_LOC); + if (MASTER_DISTANCE > 80) + { + SetSolid("box"); + } + if (MASTER_DISTANCE <= 80) + { + if (!(IS_FLEEING)) + { + npcatk_flee(GetEntityIndex("ent_creationowner"), 512, 3); + } + ScheduleDelayedEvent(0.25, "ice_solidify"); + } + } + + void anti_stuck_checks() + { + if (!(I_R_SUMMONED)) return; + if (!(STUCK_COUNT == 2)) return; + CallExternal(GetEntityIndex("ent_creationowner"), "my_pet_stuck"); + } + + void walk_step() + { + STEP_COUNT += 1; + if (STEP_COUNT == 1) + { + EmitSound(GetOwner(), 0, SOUND_WALK1, 10); + } + if (STEP_COUNT == 2) + { + EmitSound(GetOwner(), 0, SOUND_WALK2, 10); + STEP_COUNT = 0; + } + } + +} + +} diff --git a/scripts/angelscript/monsters/troll_ice.as b/scripts/angelscript/monsters/troll_ice.as new file mode 100644 index 00000000..d9d2b62b --- /dev/null +++ b/scripts/angelscript/monsters/troll_ice.as @@ -0,0 +1,216 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class TrollIce : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int CAN_HUNT; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + int HUNT_AGRO; + int I_R_SUMMONED; + int MOVE_RANGE; + string MY_MASTER; + int NO_SPAWN_STUCK_CHECK; + int NPC_GIVE_EXP; + int NPC_MUST_SEE_TARGET; + string PUSH_VEL; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WALK; + string SOUND_WALK1; + string SOUND_WALK2; + int TOO_CLOSE; + + TrollIce() + { + TOO_CLOSE = 100; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "monsters/troll/trollpain.wav"; + SOUND_STRUCK3 = "monsters/troll/trollpain.wav"; + SOUND_PAIN = "monsters/troll/trollpain.wav"; + SOUND_ATTACK1 = "monsters/troll/trollattack.wav"; + SOUND_ATTACK2 = "monsters/troll/trollattack.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK = "monsters/troll/trollidle.wav"; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + SOUND_IDLE = "monsters/troll/trollidle.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 10; + DROP_GOLD_MAX = 35; + ANIM_RUN = "walk"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "dieheadshot2"; + ATTACK_RANGE = 150; + ATTACK_HITRANGE = 200; + CAN_FLINCH = 0; + MOVE_RANGE = 100; + CAN_HUNT = 1; + HUNT_AGRO = 1; + NPC_MUST_SEE_TARGET = 0; + } + + void OnSpawn() override + { + SetWidth(50); + SetHeight(100); + SetRace("orc"); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetHealth(600); + SetName("Ice Troll"); + SetRoam(true); + NPC_GIVE_EXP = 200; + SetDamageResistance("all", 1.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 4.0); + SetHearingSensitivity(8); + SetModel("monsters/icetroll.mdl"); + Effect("glow", GetOwner(), Vector3(128, 128, 255), 512, 3, 3); + troll_spawn(); + } + + void attack_1() + { + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 200, 10); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + if ((RandomInt(1, 8) + "=" + 1)) + { + ApplyEffect(m_hLastStruck, "effects/dot_cold", 10, GetEntityIndex(GetOwner()), Random(5, 15), "none"); + } + npcatk_dodamage(m_hAttackTarget, "direct", Random(20, 30), 0.75, GetEntityIndex(GetOwner()), "blunt"); + } + if (RandomInt(0, 3) == 0) + { + ANIM_ATTACK = "attack2"; + } + if ((RandomInt(1, 20) + "=" + 1)) + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_IDLE); + } + SetVolume(8); + EmitSound(GetOwner(), SOUND_ATTACK1); + } + + void attack_2() + { + if (RandomInt(0, 3) == 0) + { + ANIM_ATTACK = "attack1"; + } + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + if ((RandomInt(1, 4) + "=" + 1)) + { + ApplyEffect(m_hAttackTarget, "effects/dot_cold", 5, GetEntityIndex(GetOwner()), Random(5, 15), "none"); + } + npcatk_dodamage(m_hAttackTarget, "direct", Random(35, 45), 0.75, GetEntityIndex(GetOwner()), "blunt"); + } + // PlayRandomSound from: SOUND_ATTACK1 + array sounds = {SOUND_ATTACK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3 + array sounds = {SOUND_PAIN, SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3}; + EmitSound(GetOwner(), CHAN_VOICE, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dynamically_created() + { + ScheduleDelayedEvent(1, "ice_solidify"); + I_R_SUMMONED = 1; + MY_MASTER = param1; + string MY_MASTER_LIVES = IsEntityAlive(MY_MASTER); + if (!(MY_MASTER_LIVES)) return; + NO_SPAWN_STUCK_CHECK = 1; + ScheduleDelayedEvent(0.1, "check_dist"); + } + + void check_dist() + { + if (Distance(MY_MASTER, GetMonsterProperty("origin")) < TOO_CLOSE) + { + SetSolid("none"); + ScheduleDelayedEvent(0.1, "repeat_addvel"); + npcatk_flee(MY_MASTER, 275, 3); + } + } + + void repeat_addvel() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 5)); + } + + void ice_solidify() + { + string MY_LOC = GetEntityOrigin(GetOwner()); + string MY_MASTER_LOC = GetEntityOrigin(MY_MASTER); + float MASTER_DISTANCE = Distance(MY_LOC, MY_MASTER_LOC); + if (MASTER_DISTANCE > 80) + { + SetSolid("box"); + } + if (MASTER_DISTANCE <= 80) + { + if (!(IS_FLEEING)) + { + npcatk_flee(GetEntityIndex(MY_MASTER), 512, 3); + } + ScheduleDelayedEvent(0.25, "ice_solidify"); + } + } + + void npc_monster_stuck() + { + if (!(STUCK_COUNT > 3)) return; + if ((I_R_SUMMONED)) + { + CallExternal(GetEntityIndex(MY_MASTER), "my_pet_stuck"); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(I_R_SUMMONED)) return; + string MASTER_TARGET = GetEntityProperty(MY_MASTER, "scriptvar"); + if (!(MASTER_TARGET != "unset")) return; + if (!(m_hAttackTarget != MASTER_TARGET)) return; + npcatk_settarget(MASTER_TARGET); + } + + void ext_attack_master_target() + { + if (!(m_hAttackTarget == "unset")) return; + npcatk_settarget(param1); + } + +} + +} diff --git a/scripts/angelscript/monsters/troll_ice_lobber.as b/scripts/angelscript/monsters/troll_ice_lobber.as new file mode 100644 index 00000000..b2709687 --- /dev/null +++ b/scripts/angelscript/monsters/troll_ice_lobber.as @@ -0,0 +1,312 @@ +#pragma context server + +#include "monsters/base_monster.as" +#include "monsters/base_race_cold.as" + +namespace MS +{ + +class TrollIceLobber : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + string ANIM_DBLPUNCH; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_PUNCH; + string ANIM_RUN; + string ANIM_THROW; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + string ATTACK_MOVERANGE; + int ATTACK_RANGE; + int ATTACK_SPEED; + int CAN_FLINCH; + int CAN_HUNT; + int COMBAT_REPOS; + int DID_WARCRY; + int DO_THROW; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string FLINCH_ANIM; + int FLINCH_CHANCE; + float FLINCH_DELAY; + int HUNT_AGRO; + int MELE_HITRANGE; + int MELE_RANGE; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string PUSH_VEL; + int ROCK_DAMAGE; + int ROCK_RANGE; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WALK1; + string SOUND_WALK2; + int SWING_RANGE; + + TrollIceLobber() + { + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod1.wav"; + SOUND_PAIN = "monsters/troll/trollpain.wav"; + SOUND_ATTACK = "monsters/troll/trollattack.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + SOUND_IDLE = "monsters/troll/trollidle2.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 20; + DROP_GOLD_MAX = 40; + ANIM_IDLE = "idle0"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die_fall"; + ANIM_ATTACK = "double_punch"; + ANIM_PUNCH = "hit_down"; + ANIM_DBLPUNCH = "double_punch"; + ANIM_THROW = "throw_rock"; + ROCK_RANGE = 9999; + SWING_RANGE = 130; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 300; + MOVE_RANGE = 400; + MELE_RANGE = 128; + MELE_HITRANGE = 164; + CAN_FLINCH = 1; + FLINCH_CHANCE = 33; + FLINCH_ANIM = "flinch2"; + FLINCH_DELAY = 2.0; + CAN_HUNT = 1; + HUNT_AGRO = 1; + AIM_RATIO = 25; + ATTACK_SPEED = 500; + ROCK_DAMAGE = "$rand(400,800)"; + Precache(SOUND_DEATH); + Precache("misc/glassgibs_huge.mdl"); + Precache("magic/freeze.wav"); + } + + void OnSpawn() override + { + SetHealth(2000); + SetWidth(100); + SetHeight(125); + SetRace("demon"); + SetName("Ice Troll Lobber"); + SetRoam(true); + NPC_GIVE_EXP = 150; + SetDamageResistance("all", ".7"); + SetModel("monsters/troll_ice_lobber.mdl"); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(10); + COMBAT_REPOS = 0; + ScheduleDelayedEvent(10.0, "random_idle"); + CatchSpeech("debug_props", "debug"); + troll_spawn(); + } + + void debug_props() + { + SetSayTextRange(1024); + SayText(I + "is hunting " + IS_HUNTING + "my target " + GetEntityName(HUNT_LASTTARGET)); + } + + void npc_targetsighted() + { + if (!(false)) return; + ATTACK_RANGE = SWING_RANGE; + if (GetEntityRange(param1) <= ROCK_RANGE) + { + if (GetEntityRange(param1) > ATTACK_RANGE) + { + } + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 20.0; + MOVE_RANGE = 400; + ATTACK_MOVERANGE = 400; + PlayAnim("once", ANIM_THROW); + } + else + { + MOVE_RANGE = 100; + ATTACK_MOVERANGE = 100; + } + } + + void rock_pickup() + { + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 20.0; + SetModelBody(1, 1); + npcatk_suspend_ai(2.0); + SetMoveDest(HUNT_LASTTARGET); + } + + void rock_throw() + { + string ME_POS = GetEntityOrigin(GetOwner()); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(HUNT_LASTTARGET); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + string FIN_ATTACK_SPEED = ATTACK_SPEED; + string AIM_ANGLE = GetEntityRange(HUNT_LASTTARGET); + AIM_ANGLE /= AIM_RATIO; + if (TARGET_Z_DIFFERENCE > 200) + { + TARGET_Z_DIFFERENCE /= 2; + AIM_ANGLE /= 2; + FIN_ATTACK_SPEED += TARGET_Z_DIFFERENCE; + } + SetAngles("add_view.x"); + string L_TARGET_RANGE = GetEntityRange(HUNT_LASTTARGET); + if (L_TARGET_RANGE <= 1000) + { + TossProjectile("proj_snow_ball2", /* TODO: $relpos */ $relpos(0, 0, 21), "none", FIN_ATTACK_SPEED, ROCK_DAMAGE, 0.75, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "set_dmg", 200, 100, 20, 0.4); + } + if (L_TARGET_RANGE > 1000) + { + TossProjectile("proj_snow_ball2", /* TODO: $relpos */ $relpos(0, 0, 21), HUNT_LASTTARGET, FIN_ATTACK_SPEED, ROCK_DAMAGE, 0.75, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "set_dmg", 200, 100, 20, 0.01); + } + COMBAT_REPOS += 1; + SetModelBody(1, 0); + npcatk_resume_ai(); + if (!(COMBAT_REPOS > 4)) return; + COMBAT_REPOS = 0; + chicken_run(5.0, "combat_repos"); + } + + void attack_1() + { + DO_THROW = 0; + SetModelBody(1, 0); + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 200, 10); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(20, 30), 0.75, "slash"); + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = ANIM_PUNCH; + } + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + } + + void attack_2() + { + SetModelBody(1, 0); + DO_THROW = 1; + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(35, 45), 0.75, "slash"); + ANIM_ATTACK = "double_punch"; + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = ANIM_DBLPUNCH; + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + EmitSound(GetOwner(), 2, SOUND_PAIN, 5); + if (GetEntityRange(m_hLastStruck) < MELE_RANGE) + { + ANIM_ATTACK = ANIM_DBLPUNCH; + } + } + + void stomp_1() + { + EmitSound(GetOwner(), 2, SOUND_WALK1, 8); + } + + void stomp_2() + { + EmitSound(GetOwner(), 2, SOUND_WALK2, 8); + } + + void game_hearsound() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_IDLE); + } + + void random_idle() + { + ScheduleDelayedEvent(10.0, "random_idle"); + if ((IS_HUNTING)) return; + if ((false)) return; + if ((IS_FLEEING)) return; + int ANIM_SELECT = RandomInt(0, 3); + if (ANIM_SELECT == 0) + { + ANIM_IDLE = "idle0"; + } + if (ANIM_SELECT == 1) + { + ANIM_IDLE = "idle1"; + } + if (ANIM_SELECT == 2) + { + ANIM_IDLE = "idle2"; + } + if (ANIM_SELECT == 3) + { + ANIM_IDLE = "idle3"; + } + if ((ADVANCED_SEARCHING)) + { + ANIM_IDLE = "idle0"; + } + PlayAnim("once", ANIM_IDLE); + } + + void warcry() + { + EmitSound(GetOwner(), 2, SOUND_IDLE, 10); + } + + void my_target_died() + { + DID_WARCRY = 0; + if ((false)) return; + PlayAnim("critical", "idle2"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(param1 + "is" + HUNT_LASTTARGET)) return; + if (!(param2 > 1)) return; + COMBAT_REPOS = 0; + } + + void game_dodamage() + { + if ((param1)) + { + if ((DO_THROW)) + { + ApplyEffect(param2, "effects/effect_push", 3, /* TODO: $relvel */ $relvel(0, 400, 400), 0); + } + if (PUSH_VEL != 0) + { + AddVelocity(param2, PUSH_VEL); + } + } + PUSH_VEL = 0; + DO_THROW = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/troll_ice_lobber_turret.as b/scripts/angelscript/monsters/troll_ice_lobber_turret.as new file mode 100644 index 00000000..6e84b403 --- /dev/null +++ b/scripts/angelscript/monsters/troll_ice_lobber_turret.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/troll_ice_turret.as" + +namespace MS +{ + +class TrollIceLobberTurret : CGameScript +{ +} + +} diff --git a/scripts/angelscript/monsters/troll_ice_turret.as b/scripts/angelscript/monsters/troll_ice_turret.as new file mode 100644 index 00000000..141e5820 --- /dev/null +++ b/scripts/angelscript/monsters/troll_ice_turret.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "monsters/troll_ice_lobber.as" + +namespace MS +{ + +class TrollIceTurret : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + int NO_STUCK_CHECKS; + + TrollIceTurret() + { + ANIM_WALK = "idle0"; + ANIM_RUN = "idle1"; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetRoam(false); + SetMoveSpeed(0.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/troll_lobber.as b/scripts/angelscript/monsters/troll_lobber.as new file mode 100644 index 00000000..9a2374f3 --- /dev/null +++ b/scripts/angelscript/monsters/troll_lobber.as @@ -0,0 +1,300 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class TrollLobber : CGameScript +{ + int AIM_RATIO; + string ANIM_ATTACK; + string ANIM_DBLPUNCH; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_PUNCH; + string ANIM_RUN; + string ANIM_THROW; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + string ATTACK_MOVERANGE; + string ATTACK_RANGE; + int ATTACK_SPEED; + int CAN_FLINCH; + int CAN_HUNT; + int COMBAT_REPOS; + int DID_WARCRY; + int DROP_GOLD; + int DROP_GOLD_MAX; + int DROP_GOLD_MIN; + string FLINCH_ANIM; + int FLINCH_CHANCE; + float FLINCH_DELAY; + int HUNT_AGRO; + int MELEE_RANGE; + int MELE_HITRANGE; + int MELE_RANGE; + int MOVE_RANGE; + string NPC_GIVE_EXP; + string PROJ_SCRIPT; + string PUSH_VEL; + int ROCK_DAMAGE; + int ROCK_RANGE; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WALK1; + string SOUND_WALK2; + int SWING_RANGE; + int TROLL_EXP; + string TROLL_MODEL; + string TROLL_NAME; + + TrollLobber() + { + TROLL_EXP = 150; + TROLL_NAME = "Troll"; + PROJ_SCRIPT = "proj_troll_rock"; + TROLL_MODEL = "monsters/troll.mdl"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod1.wav"; + SOUND_PAIN = "monsters/troll/trollpain.wav"; + SOUND_ATTACK = "monsters/troll/trollattack.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + SOUND_IDLE = "monsters/troll/trollidle2.wav"; + DROP_GOLD = 1; + DROP_GOLD_MIN = 20; + DROP_GOLD_MAX = 40; + ANIM_IDLE = "idle0"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_DEATH = "die_fall"; + ANIM_ATTACK = "throw_rock"; + ANIM_PUNCH = "hit_down"; + ANIM_DBLPUNCH = "double_punch"; + ANIM_THROW = "throw_rock"; + ROCK_RANGE = 800; + SWING_RANGE = 130; + MELEE_RANGE = 100; + ATTACK_RANGE = ROCK_RANGE; + ATTACK_HITRANGE = 300; + MOVE_RANGE = 400; + MELE_RANGE = 128; + MELE_HITRANGE = 164; + CAN_FLINCH = 1; + FLINCH_CHANCE = 33; + FLINCH_ANIM = "flinch2"; + FLINCH_DELAY = 2.0; + CAN_HUNT = 1; + HUNT_AGRO = 1; + AIM_RATIO = 25; + ATTACK_SPEED = 500; + ROCK_DAMAGE = "$rand(200,300)"; + Precache(SOUND_DEATH); + Precache("monsters/base_monster"); + Precache("monsters/base_npc_attack"); + Precache("monsters/base_npc"); + Precache("items/proj_troll_rock"); + } + + void OnSpawn() override + { + SetHealth(600); + SetWidth(100); + SetHeight(125); + SetRace("orc"); + SetName(TROLL_NAME); + SetRoam(true); + NPC_GIVE_EXP = TROLL_EXP; + SetDamageResistance("all", ".7"); + SetDamageResistance("fire", 1.2); + SetDamageResistance("lightning", 1.1); + SetModel(TROLL_MODEL); + SetIdleAnim("idle1"); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(10); + COMBAT_REPOS = 0; + ScheduleDelayedEvent(10.0, "random_idle"); + CatchSpeech("debug_props", "debug"); + troll_spawn(); + } + + void debug_props() + { + SetSayTextRange(1024); + SayText(I + "is hunting " + IS_HUNTING + "my target " + GetEntityName(HUNT_LASTTARGET)); + } + + void npc_targetsighted() + { + if (!(false)) return; + ANIM_ATTACK = ANIM_DBLPUNCH; + ATTACK_RANGE = SWING_RANGE; + if (GetEntityRange(HUNT_LASTTARGET) <= ROCK_RANGE) + { + if (GetEntityRange(HUNT_LASTTARGET) > SWING_RANGE) + { + } + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10; + PlayAnim("once", ANIM_THROW); + MOVE_RANGE = ROCK_RANGE; + ATTACK_MOVERANGE = ROCK_RANGE; + } + if (GetEntityRange(HUNT_LASTTARGET) <= SWING_RANGE) + { + ANIM_ATTACK = ANIM_DBLPUNCH; + MOVE_RANGE = MELEE_RANGE; + ATTACK_MOVERANGE = MELEE_RANGE; + } + } + + void rock_pickup() + { + SetModelBody(1, 1); + } + + void rock_throw() + { + string ME_POS = GetEntityOrigin(GetOwner()); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(HUNT_LASTTARGET); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + string FIN_ATTACK_SPEED = ATTACK_SPEED; + string AIM_ANGLE = GetEntityRange(HUNT_LASTTARGET); + AIM_ANGLE /= AIM_RATIO; + if (TARGET_Z_DIFFERENCE > 200) + { + TARGET_Z_DIFFERENCE /= 2; + AIM_ANGLE /= 2; + FIN_ATTACK_SPEED += TARGET_Z_DIFFERENCE; + } + SetAngles("add_view.x"); + TossProjectile("proj_troll_rock", /* TODO: $relpos */ $relpos(0, 0, 21), "none", FIN_ATTACK_SPEED, ROCK_DAMAGE, 0.75, "none"); + COMBAT_REPOS += 1; + SetModelBody(1, 0); + if (!(COMBAT_REPOS > 4)) return; + COMBAT_REPOS = 0; + chicken_run(5.0, "combat_repos"); + } + + void attack_1() + { + SetModelBody(1, 0); + PUSH_VEL = /* TODO: $relvel */ $relvel(10, 200, 10); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(20, 30), 0.75, "slash"); + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = ANIM_PUNCH; + } + if (GetEntityRange(m_hLastStruck) > MELE_RANGE) + { + ANIM_ATTACK = ANIM_THROW; + } + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + } + + void attack_2() + { + SetModelBody(1, 0); + DoDamage(ENTITY_ENEMY, ATTACK_HITRANGE, Random(35, 45), 0.75, "slash"); + ANIM_ATTACK = "double_punch"; + EmitSound(GetOwner(), 2, SOUND_ATTACK, 10); + if (RandomInt(1, 4) == 1) + { + ANIM_ATTACK = ANIM_DBLPUNCH; + } + if (GetEntityRange(m_hLastStruck) > MELE_RANGE) + { + ANIM_ATTACK = ANIM_THROW; + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + EmitSound(GetOwner(), 2, SOUND_PAIN, 5); + if (GetEntityRange(m_hLastStruck) < MELE_RANGE) + { + ANIM_ATTACK = ANIM_DBLPUNCH; + } + } + + void stomp_1() + { + EmitSound(GetOwner(), 2, SOUND_WALK1, 8); + } + + void stomp_2() + { + EmitSound(GetOwner(), 2, SOUND_WALK2, 8); + } + + void game_hearsound() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_IDLE); + } + + void random_idle() + { + ScheduleDelayedEvent(10.0, "random_idle"); + if ((IS_HUNTING)) return; + if ((false)) return; + if ((IS_FLEEING)) return; + int ANIM_SELECT = RandomInt(0, 3); + if (ANIM_SELECT == 0) + { + ANIM_IDLE = "idle0"; + } + if (ANIM_SELECT == 1) + { + ANIM_IDLE = "idle1"; + } + if (ANIM_SELECT == 2) + { + ANIM_IDLE = "idle2"; + } + if (ANIM_SELECT == 3) + { + ANIM_IDLE = "idle3"; + } + if ((ADVANCED_SEARCHING)) + { + ANIM_IDLE = "idle0"; + } + PlayAnim("once", ANIM_IDLE); + } + + void warcry() + { + EmitSound(GetOwner(), 2, SOUND_IDLE, 10); + } + + void my_target_died() + { + DID_WARCRY = 0; + if ((false)) return; + PlayAnim("critical", "idle2"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(param1 + "is" + HUNT_LASTTARGET)) return; + if (!(param2 > 1)) return; + COMBAT_REPOS = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/troll_stone.as b/scripts/angelscript/monsters/troll_stone.as new file mode 100644 index 00000000..664adac5 --- /dev/null +++ b/scripts/angelscript/monsters/troll_stone.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/troll2.as" + +namespace MS +{ + +class TrollStone : CGameScript +{ + int IS_GUARDIAN; + + TrollStone() + { + IS_GUARDIAN = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/troll_turret.as b/scripts/angelscript/monsters/troll_turret.as new file mode 100644 index 00000000..b7ce4226 --- /dev/null +++ b/scripts/angelscript/monsters/troll_turret.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "monsters/troll_lobber.as" + +namespace MS +{ + +class TrollTurret : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + int NO_STUCK_CHECKS; + + TrollTurret() + { + ANIM_WALK = "idle0"; + ANIM_RUN = "idle1"; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetRoam(false); + SetMoveSpeed(0.0); + } + +} + +} diff --git a/scripts/angelscript/monsters/uber_reaver.as b/scripts/angelscript/monsters/uber_reaver.as new file mode 100644 index 00000000..8c47a474 --- /dev/null +++ b/scripts/angelscript/monsters/uber_reaver.as @@ -0,0 +1,586 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class UberReaver : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_PROJECTILE; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_SLASH; + string ANIM_SMASH; + string ANIM_VICTORY; + string ANIM_VICTORY1; + string ANIM_VICTORY2; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BEAM_DAMAGE; + float BEAM_FREQ; + int CAN_FLINCH; + int CHANCE_FREEZE; + int DID_WARCRY; + float DMG_FROST; + float DMG_SHOCK_BURST; + float DMG_STORM; + int DOSMASH_CHANCE; + int DO_ICEBLAST; + int DO_SMASH_DELAY; + int FIRST_ATTACK; + int FLINCH_CHANCE; + int FLINCH_HEALTH; + float FREEZE_DURATION; + float FREQ_ICE_BLAST; + float FREQ_SHOCK_BURST; + float FREQ_SMASH; + int HP_STORAGE; + int IS_UNHOLY; + string LIGHTNING_SPRITE; + string LODAGOND_LOC; + int MAX_PROJECTILE_AMMO; + string MONSTER_MODEL; + int MOVE_RANGE; + int NEAR_DEATH_THRESHOLD; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + float NPC_DELAYING_UNSTUCK; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + int NPC_OVERSIZED; + int ON_LODAGOND; + int PROJECTILE_RANGE; + string PUSH_VEL; + int SEARCH_ANIM_DELAY; + int SHOCK_CONE_RANGE; + int SHOCK_DAMAGE; + int SHOCK_DURATION; + int SKELS_ON; + int SLASH_DAMAGE; + float SLASH_HITCHANCE; + int SMASH_DAMAGE; + float SMASH_HITCHANCE; + int SMASH_HITRANGE; + float SMASH_STUN_CHANCE; + string SOUND_ATTACKHIT; + string SOUND_ATTACKMISS; + string SOUND_BEAMCHARGE; + string SOUND_BEAMFIRE; + string SOUND_DEATH; + string SOUND_PAIN_NEAR_DEATH; + string SOUND_PAIN_STRONG; + string SOUND_PAIN_WEAK; + string SOUND_RUN1; + string SOUND_RUN2; + string SOUND_RUN3; + string SOUND_SEARCH1; + string SOUND_SEARCH2; + string SOUND_SEARCH3; + string SOUND_SLASHHIT; + string SOUND_SLASHMISS; + string SOUND_SMASHHIT; + string SOUND_SMASHMISS; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_WALK1; + string SOUND_WALK2; + string SOUND_WALK3; + string SOUND_WALK4; + string SOUND_WARCRY; + int STARTED_SPELLS; + float STORM_DUR; + int STORM_RAD; + int STRONG_THRESHOLD; + int STUN_ATTACK; + int SWING_ATTACK; + int WEAK_THRESHOLD; + + UberReaver() + { + IS_UNHOLY = 1; + if (StringToLower(GetMapName()) == "lodagond-1") + { + NPC_IS_BOSS = 1; + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 0.5; + FREQ_ICE_BLAST = 30.0; + FREQ_SHOCK_BURST = 45.0; + FREQ_SMASH = 10.0; + DMG_FROST = 60.0; + DMG_SHOCK_BURST = 20.0; + CHANCE_FREEZE = 2; + DMG_STORM = 20.0; + STORM_DUR = 60.0; + STORM_RAD = 800; + LODAGOND_LOC = Vector3(-1728, 2176, -576); + FREEZE_DURATION = 15.0; + SHOCK_CONE_RANGE = 1024; + SOUND_WALK1 = "common/npc_step1.wav"; + SOUND_WALK2 = "common/npc_step2.wav"; + SOUND_WALK3 = "common/npc_step3.wav"; + SOUND_WALK4 = "common/npc_step4.wav"; + SOUND_RUN1 = "gonarch/gon_step1.wav"; + SOUND_RUN2 = "gonarch/gon_step2.wav"; + SOUND_RUN3 = "gonarch/gon_step3.wav"; + SOUND_DEATH = "gonarch/gon_die1.wav"; + SOUND_WARCRY = "gonarch/gon_alert1.wav"; + SOUND_STRUCK1 = "gonarch/gon_sack1.wav"; + SOUND_STRUCK2 = "gonarch/gon_sack2.wav"; + SOUND_PAIN_STRONG = "gonarch/gon_pain2.wav"; + SOUND_PAIN_WEAK = "gonarch/gon_pain4.wav"; + SOUND_PAIN_NEAR_DEATH = "gonarch/gon_pain5.wav"; + SOUND_SLASHHIT = "zombie/claw_strike1.wav"; + SOUND_SMASHHIT = "zombie/claw_strike2.wav"; + SOUND_SLASHMISS = "zombie/claw_miss1.wav"; + SOUND_SMASHMISS = "zombie/claw_miss2.wav"; + SOUND_BEAMCHARGE = "debris/beamstart2.wav"; + SOUND_BEAMFIRE = "debris/beamstart9.wav"; + SOUND_SEARCH1 = "gonarch/gon_childdie3.wav"; + SOUND_SEARCH2 = "gonarch/gon_childdie2.wav"; + SOUND_SEARCH3 = "gonarch/gon_childdie1.wav"; + SOUND_ATTACKHIT = "unset"; + SOUND_ATTACKMISS = "unset"; + Precache(SOUND_SLASHMISS); + Precache(SOUND_SLASHHIT); + Precache(SOUND_SMASHMISS); + Precache(SOUND_SMASHHIT); + Precache(SOUND_PAIN_STRONG); + Precache(SOUND_PAIN_WEAK); + Precache(SOUND_PAIN_NEAR_DEATH); + Precache("magic/boom.wav"); + ATTACK_RANGE = 200; + ATTACK_HITRANGE = 250; + ATTACK_MOVERANGE = 150; + MOVE_RANGE = 150; + STRONG_THRESHOLD = 5000; + WEAK_THRESHOLD = 2000; + NEAR_DEATH_THRESHOLD = 1000; + PROJECTILE_RANGE = 256; + MAX_PROJECTILE_AMMO = 1; + SLASH_DAMAGE = "$rand(50,100)"; + SMASH_DAMAGE = "$rand(100,250)"; + SLASH_HITCHANCE = 0.9; + SMASH_HITCHANCE = 1.0; + SMASH_HITRANGE = 200; + SMASH_STUN_CHANCE = 0.5; + BEAM_FREQ = 45.0; + BEAM_DAMAGE = 200; + SHOCK_DAMAGE = 100; + SHOCK_DURATION = RandomInt(5, 10); + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_SEARCH = "idle2"; + ANIM_FLINCH = "turnl"; + ANIM_SMASH = "mattack3"; + ANIM_SLASH = "mattack2"; + ANIM_PROJECTILE = "distanceattack"; + ANIM_ALERT = "distanceattack"; + ANIM_DEATH1 = "dieforward"; + ANIM_DEATH2 = "diesimple"; + ANIM_DEATH3 = "diesideways"; + ANIM_VICTORY1 = "victoryeat"; + ANIM_VICTORY2 = "victorysniff"; + ANIM_VICTORY = "victoryeat"; + ANIM_DEATH = "dieforward"; + ANIM_ATTACK = "mattack3"; + CAN_FLINCH = 1; + FLINCH_HEALTH = 500; + FLINCH_CHANCE = 30; + DOSMASH_CHANCE = 20; + LIGHTNING_SPRITE = "lgtning.spr"; + MONSTER_MODEL = "monsters/abominable_huge.mdl"; + Precache(LIGHTNING_SPRITE); + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Maldora's Pet"); + SetHealth(9000); + HP_STORAGE = 9000; + SetRoam(true); + SetDamageResistance("all", 0.7); + SetDamageResistance("cold", 0.0); + SetDamageResistance("fire", 0.2); + SetDamageResistance("holy", 1.0); + SetDamageResistance("stun", 0.25); + SetWidth(200); + SetHeight(96); + NPC_GIVE_EXP = 2000; + SetRace("demon"); + SetHearingSensitivity(3); + SetModel(MONSTER_MODEL); + SetMoveAnim(ANIM_WALK); + NPC_OVERSIZED = 1; + SetNoPush(true); + } + + void OnPostSpawn() override + { + string L_MAP_NAME = StringToLower(GetMapName()); + if (!(L_MAP_NAME == "lodagond-1")) return; + ON_LODAGOND = 1; + } + + void npcatk_validatetarget() + { + if (!(IsValidPlayer(param1))) return; + if ((DID_WARCRY)) return; + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + FIRST_ATTACK = 1; + } + + void my_target_died() + { + ice_reaver_beam_reload(); + SetHealth(HP_STORAGE); + if ((false)) return; + int RAND_VICT = RandomInt(1, 2); + if (RAND_VICT == 1) + { + ANIM_VICTORY = ANIM_VICTORY1; + } + if (RAND_VICT == 2) + { + ANIM_VICTORY = ANIM_VICTORY2; + } + PlayAnim("critical", ANIM_VICTORY); + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_mele1() + { + SWING_ATTACK = 1; + int RANDOM_PUSH = RandomInt(100, 175); + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, RANDOM_PUSH, 120); + SOUND_ATTACKHIT = SOUND_SLASHHIT; + SOUND_ATTACKMISS = SOUND_SLASHMISS; + STUN_ATTACK = 0; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + npcatk_dodamage(m_hAttackTarget, "direct", SLASH_DAMAGE, SLASH_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + if ((DO_SMASH_DELAY)) return; + DO_SMASH_DELAY = 1; + FREQ_SMASH("reset_do_smash_delay"); + ANIM_ATTACK = ANIM_SMASH; + } + + void reset_do_smash_delay() + { + DO_SMASH_DELAY = 0; + } + + void attack_mele2() + { + SWING_ATTACK = 1; + SOUND_ATTACKHIT = SOUND_SMASHHIT; + SOUND_ATTACKMISS = SOUND_SMASHMISS; + int RANDOM_PUSH = RandomInt(200, 400); + PUSH_VEL = /* TODO: $relvel */ $relvel(-100, RANDOM_PUSH, 120); + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + npcatk_dodamage(m_hAttackTarget, "direct", SMASH_DAMAGE, SMASH_HITCHANCE, GetEntityIndex(GetOwner()), "slash"); + } + STUN_ATTACK = 1; + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 512, 0, SMASH_DAMAGE + ANIM_ATTACK = ANIM_SLASH; + } + + void npcatk_search_init_advanced() + { + if ((SEARCH_ANIM_DELAY)) return; + NPC_DELAYING_UNSTUCK = 10.0; + PlayAnim("critical", ANIM_SEARCH); + // PlayRandomSound from: SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3 + array sounds = {SOUND_SEARCH1, SOUND_SEARCH2, SOUND_SEARCH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SEARCH_ANIM_DELAY = 1; + ScheduleDelayedEvent(5.0, "reset_search_anim"); + } + + void reset_search_anim() + { + // TODO: setrvard SEARCH_ANIM_DELAY 0 + } + + void game_dodamage() + { + if (!(param1)) + { + if ((SWING_ATTACK)) + { + } + if (SOUND_ATTACKMISS != "unset") + { + EmitSound(GetOwner(), 0, SOUND_ATTACKMISS, 10); + } + } + if ((param1)) + { + if ((SWING_ATTACK)) + { + } + if (SOUND_ATTACKHIT != "unset") + { + EmitSound(GetOwner(), 0, SOUND_ATTACKHIT, 10); + } + AddVelocity(m_hLastStruckByMe, PUSH_VEL); + if (RandomInt(1, CHANCE_FREEZE) == 1) + { + ApplyEffect(param2, "effects/dot_cold", 5, GetEntityIndex(GetOwner()), DMG_FROST); + } + } + if ((STUN_ATTACK)) + { + STUN_ATTACK = 0; + if (RandomInt(1, 100) > SMASH_STUN_CHANCE) + { + ApplyEffect(param2, "effects/debuff_stun", 10, GetEntityIndex(GetOwner())); + } + } + SWING_ATTACK = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + HP_STORAGE = GetMonsterHP(); + if (GetMonsterHP() >= 1500) + { + string PAIN_SOUND = SOUND_PAIN_STRONG; + } + if (GetMonsterHP() < 1500) + { + string PAIN_SOUND = SOUND_PAIN_WEAK; + } + if (GetMonsterHP() < 500) + { + string PAIN_SOUND = SOUND_PAIN_NEAR_DEATH; + } + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, PAIN_SOUND + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, PAIN_SOUND}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void monster_walk_step() + { + // PlayRandomSound from: SOUND_WALK1, SOUND_WALK2, SOUND_WALK3, SOUND_WALK4 + array sounds = {SOUND_WALK1, SOUND_WALK2, SOUND_WALK3, SOUND_WALK4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void monster_run_step() + { + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 64, 10, 0.5, 128); + // PlayRandomSound from: SOUND_RUN1, SOUND_RUN2, SOUND_RUN3 + array sounds = {SOUND_RUN1, SOUND_RUN2, SOUND_RUN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RAND_DEATH = RandomInt(1, 3); + if (RAND_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (RAND_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (RAND_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if ((SKELS_ON)) + { + CallExternal("all", "ext_crystal_remove"); + } + bm_gold_spew(50, 3, 100, 4, 30); + } + + void game_reached_destination() + { + if (!(m_hAttackTarget == "unset")) return; + if (!(NPC_LOST_TARGET == "unset")) return; + if ((false)) return; + int RAND_VICT = RandomInt(1, 2); + if (RAND_VICT == 1) + { + ANIM_VICTORY = ANIM_VICTORY1; + } + if (RAND_VICT == 2) + { + ANIM_VICTORY = ANIM_VICTORY2; + } + PlayAnim("critical", ANIM_VICTORY); + } + + void cycle_up() + { + if ((STARTED_SPELLS)) return; + STARTED_SPELLS = 1; + ScheduleDelayedEvent(0.5, "ice_storm"); + FREQ_ICE_BLAST("ice_blast"); + FREQ_SHOCK_BURST("do_shock_burst"); + toggle_skeles(); + } + + void ice_storm() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + PlayAnim("critical", ANIM_PROJECTILE); + string BLIZ_LOC = /* TODO: $relpos */ $relpos(0, 0, 0); + if ((ON_LODAGOND)) + { + string BLIZ_LOC = LODAGOND_LOC; + } + SpawnNPC("monsters/summon/uber_blizzard", BLIZ_LOC, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_STORM, STORM_DUR, STORM_RAD, 0.6 + string NEXT_STORM = STORM_DUR; + NEXT_STORM += 5; + NEXT_STORM("ice_storm"); + } + + void ice_blast() + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + PlayAnim("critical", ANIM_PROJECTILE); + DO_ICEBLAST = 1; + toggle_skeles(); + FREQ_ICE_BLAST("ice_blast"); + } + + void do_shock_burst() + { + FREQ_SHOCK_BURST("do_shock_burst"); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + PlayAnim("critical", ANIM_PROJECTILE); + SetIdleAnim(ANIM_PROJECTILE); + SetMoveAnim(ANIM_PROJECTILE); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10; + npcatk_faceattacker(m_hAttackTarget); + npcatk_suspend_ai(1.0); + ScheduleDelayedEvent(1.0, "do_shock_burst2"); + } + + void do_shock_burst2() + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + EmitSound(GetOwner(), 0, SOUND_BEAMFIRE, 10); + string BEAM_START = GetMonsterProperty("origin"); + string BEAM_END = BEAM_START; + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 2000, 0)); + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(-64, 30, 64)); + Effect("beam", "point", LIGHTNING_SPRITE, 250, BEAM_START, BEAM_END, Vector3(254, 254, 254), 150, 50, 0.2); + string BEAM_START = GetMonsterProperty("origin"); + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 30, 64)); + Effect("beam", "point", LIGHTNING_SPRITE, 250, BEAM_START, BEAM_END, Vector3(254, 254, 254), 150, 50, 0.2); + string BEAM_START = GetMonsterProperty("origin"); + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(64, 30, 64)); + Effect("beam", "point", LIGHTNING_SPRITE, 250, BEAM_START, BEAM_END, Vector3(254, 254, 254), 150, 50, 0.2); + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + shock_can_see(); + } + } + + void shock_can_see() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + string CUR_ORG = GetEntityOrigin(CUR_PLAYER); + if (!(GetEntityRange(CUR_PLAYER) < SHOCK_CONE_RANGE)) return; + if (!(/* TODO: $within_cone */ $within_cone(CUR_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles"), 60))) return; + string MON_CENT = GetMonsterProperty("origin"); + MON_CENT += "z"; + Effect("beam", "point", LIGHTNING_SPRITE, 250, MON_CENT, CUR_ORG, Vector3(254, 254, 254), 150, 50, 0.2); + ApplyEffect(CUR_PLAYER, "effects/dot_lightning", SHOCK_DURATION, GetEntityIndex(GetOwner()), SHOCK_DAMAGE); + Effect("screenfade", CUR_PLAYER, 3, 1, Vector3(255, 255, 255), 255, "fadein"); + } + + void toggle_skeles() + { + if (!(SKELS_ON)) + { + summon_skeles(); + } + if ((SKELS_ON)) + { + unsummon_skeles(); + } + } + + void unsummon_skeles() + { + SKELS_ON = 0; + CallExternal("all", "ext_crystal_remove"); + ScheduleDelayedEvent(10.0, "summon_skeles"); + } + + void summon_skeles() + { + SKELS_ON = 1; + EmitSound(GetOwner(), 0, SOUND_PAIN_STRONG, 10); + UseTrigger("summon_skels"); + } + + void attack_ranged() + { + if (!(DO_ICEBLAST)) return; + DO_ICEBLAST = 0; + do_iceblast(); + } + + void do_iceblast() + { + string BALL_DEST = GetMonsterProperty("origin"); + Vector3 ANG_ADJ = Vector3(0, 0, 0); + BALL_DEST += /* TODO: $relpos */ $relpos(ANG_ADJ, Vector3(0, 2000, 64)); + string START_OFS = GetMonsterProperty("origin"); + START_OFS += /* TODO: $relpos */ $relpos(ANG_ADJ, Vector3(0, 64, 32)); + SpawnNPC("monsters/summon/ice_blast", START_OFS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 10.0, BALL_DEST + string BALL_DEST = GetMonsterProperty("origin"); + Vector3 ANG_ADJ = Vector3(0, 90, 0); + BALL_DEST += /* TODO: $relpos */ $relpos(ANG_ADJ, Vector3(0, 2000, 64)); + string START_OFS = GetMonsterProperty("origin"); + START_OFS += /* TODO: $relpos */ $relpos(ANG_ADJ, Vector3(0, 64, 32)); + SpawnNPC("monsters/summon/ice_blast", START_OFS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 10.0, BALL_DEST + string BALL_DEST = GetMonsterProperty("origin"); + Vector3 ANG_ADJ = Vector3(0, 180, 0); + BALL_DEST += /* TODO: $relpos */ $relpos(ANG_ADJ, Vector3(0, 2000, 64)); + string START_OFS = GetMonsterProperty("origin"); + START_OFS += /* TODO: $relpos */ $relpos(ANG_ADJ, Vector3(0, 64, 32)); + SpawnNPC("monsters/summon/ice_blast", START_OFS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 10.0, BALL_DEST + string BALL_DEST = GetMonsterProperty("origin"); + Vector3 ANG_ADJ = Vector3(0, 270, 0); + BALL_DEST += /* TODO: $relpos */ $relpos(ANG_ADJ, Vector3(0, 2000, 64)); + string START_OFS = GetMonsterProperty("origin"); + START_OFS += /* TODO: $relpos */ $relpos(ANG_ADJ, Vector3(0, 64, 32)); + SpawnNPC("monsters/summon/ice_blast", START_OFS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 10.0, BALL_DEST + } + + void OnDamage(int damage) override + { + } + +} + +} diff --git a/scripts/angelscript/monsters/vgoblin.as b/scripts/angelscript/monsters/vgoblin.as new file mode 100644 index 00000000..e41e71b0 --- /dev/null +++ b/scripts/angelscript/monsters/vgoblin.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class Vgoblin : CGameScript +{ + string ANIM_ATTACK; + string ATTACK_HITCHANCE; + string CAN_FIREBALL; + string CAN_POISON; + string CAN_STUN; + int DMG_AXE; + int DMG_CLUB; + int DMG_FIREBALL; + int DMG_SWORD; + int DOT_POISON; + string DROP_ITEM1; + string DROP_ITEM1_CHANCE; + string F_GOB_TYPE; + int GOB_TYPE_SET; + int NEW_MODEL; + int NPC_BASE_EXP; + string SOUND_FIREBALL; + int TOSS_FIREBALL; + + Vgoblin() + { + NEW_MODEL = 1; + NPC_BASE_EXP = 180; + DMG_CLUB = RandomInt(30, 65); + DMG_AXE = RandomInt(40, 50); + DMG_SWORD = RandomInt(20, 45); + DMG_FIREBALL = 75; + DOT_POISON = RandomInt(5, 10); + SOUND_FIREBALL = "bullchicken/bc_attack2.wav"; + } + + void goblin_spawn() + { + SetName("Vile Goblin"); + SetHealth(400); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + } + SetRace("goblin"); + SetBloodType("green"); + SetRoam(true); + SetHearingSensitivity(2); + if (!(NEW_MODEL)) + { + SetModelBody(0, 2); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 3); + } + else + { + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("poison", 0.5); + SetDamageResistance("lightning", 1.5); + ScheduleDelayedEvent(0.01, "goblin_set_weapon"); + } + + void goblin_set_weapon() + { + if ((GOB_TYPE_SET)) return; + GOB_TYPE_SET = 1; + F_GOB_TYPE = GOB_TYPE; + if ((param1).findFirst(PARAM) == 0) + { + int DO_NADDA = 1; + } + else + { + F_GOB_TYPE = param1; + } + if (F_GOB_TYPE == 1) + { + SetDamageResistance("all", 0.75); + SetModelBody(2, 7); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.75; + string MY_HP = GetEntityHealth(GetOwner()); + MY_HP *= 1.5; + SetHealth(MY_HP); + CAN_STUN = 0; + } + if (F_GOB_TYPE == 2) + { + SetDamageResistance("all", 0.75); + SetModelBody(2, 1); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.8; + string MY_HP = GetEntityHealth(GetOwner()); + MY_HP *= 1.25; + SetHealth(MY_HP); + CAN_STUN = 0; + CAN_POISON = 1; + DROP_ITEM1 = "axes_poison1"; + DROP_ITEM1_CHANCE = 0.05; + } + if (F_GOB_TYPE == 3) + { + CAN_FIREBALL = 1; + SetModelBody(0, 1); + SetModelBody(2, 4); + ANIM_ATTACK = ANIM_SWIPE; + ATTACK_HITCHANCE = 0.9; + CAN_STUN = 0; + CAN_POISON = 1; + DROP_ITEM1 = "swords_poison1"; + DROP_ITEM1_CHANCE = 0.05; + } + } + + void toss_fireball() + { + TOSS_FIREBALL = 0; + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 48, 1), m_hAttackTarget, 400, DMG_FIREBALL, 0.5, "none"); + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + } + + void swing_dodamage() + { + if (!(param1)) return; + if (!(CAN_POISON)) return; + if (!(RandomInt(1, 3) == 1)) return; + ApplyEffect(param2, "effects/dot_poison", 5, GetEntityIndex(GetOwner()), DOT_POISON); + } + +} + +} diff --git a/scripts/angelscript/monsters/vgoblin_archer.as b/scripts/angelscript/monsters/vgoblin_archer.as new file mode 100644 index 00000000..e5a529af --- /dev/null +++ b/scripts/angelscript/monsters/vgoblin_archer.as @@ -0,0 +1,170 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class VgoblinArcher : CGameScript +{ + string ANIM_ATTACK; + string ARROW_SCRIPT; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FIREBALL; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int DMG_BOW; + int DMG_KICK; + int DROPS_CONTAINER; + int DROP_GOLD_AMT; + float FREQ_KICK; + int GOB_CHARGER; + int GOB_JUMPER; + int KICK_ATTACK; + int KICK_HITCHANCE; + int KICK_RANGE; + int MOVE_RANGE; + int NEW_MODEL; + string NEXT_KICK; + int NPC_BASE_EXP; + int NPC_RANGED; + string SOUND_BOW; + + VgoblinArcher() + { + NEW_MODEL = 1; + NPC_BASE_EXP = 225; + SOUND_BOW = "weapons/bow/bow.wav"; + GOB_JUMPER = 0; + GOB_CHARGER = 0; + DMG_BOW = RandomInt(50, 100); + DMG_KICK = RandomInt(10, 20); + KICK_RANGE = 64; + KICK_HITCHANCE = 90; + FREQ_KICK = 10.0; + CAN_FIREBALL = 0; + NPC_RANGED = 1; + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 0.1; + CONTAINER_SCRIPT = "chests/quiver_of_gpoison"; + ARROW_SCRIPT = "proj_arrow_gpoison"; + ANIM_ATTACK = "shootorcbow"; + } + + void goblin_spawn() + { + SetName("Vile Goblin Needler"); + SetRace("goblin"); + SetBloodType("green"); + SetHealth(500); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + SetModelBody(0, 3); + SetModelBody(1, 4); + SetModelBody(2, 2); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 3); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetModelBody(0, 1); + SetModelBody(1, 2); + SetModelBody(2, 2); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + SetRoam(true); + SetHearingSensitivity(2); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("poison", 0.25); + SetDamageResistance("lightning", 1.25); + ScheduleDelayedEvent(0.01, "gob_extras"); + } + + void gob_extras() + { + MOVE_RANGE = 2000; + ATTACK_RANGE = 2000; + ATTACK_HITRANGE = 2000; + DROP_GOLD_AMT = RandomInt(30, 50); + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void shoot_arrow() + { + string TARGET_DIST = GetEntityRange(m_hLastSeen); + string FINAL_TARGET = GetEntityOrigin(m_hLastSeen); + FINAL_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, TARGET_DIST)); + TARGET_DIST /= 100; + SetAngles("add_view.pitch"); + TossProjectile(ARROW_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 5), "none", 900, DMG_BOW, 2, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4); + SetModelBody(3, 0); + EmitSound(GetOwner(), SOUND_BOW); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(3, 0); + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(GetEntityRange(m_hAttackTarget) < KICK_RANGE)) return; + if (!(GetGameTime() > NEXT_KICK)) return; + NEXT_KICK = GetGameTime(); + PlayAnim("once", "break"); + SetModelBody(3, 0); + NEXT_KICK += FREQ_KICK; + ANIM_ATTACK = ANIM_KICK; + } + + void kick_land() + { + DoDamage(m_hAttackTarget, KICK_RANGE, DMG_KICK, KICK_HITCHANCE, "blunt"); + KICK_ATTACK = 1; + ANIM_ATTACK = ANIM_BOW; + npcatk_flee(m_hAttackTarget, 1024, 3.0); + } + + void OnFlee() + { + SetMoveSpeed(2.0); + } + + void npcatk_stopflee() + { + SetMoveSpeed(1.0); + } + + void game_dodamage() + { + if ((KICK_ATTACK)) + { + if ((param1)) + { + } + if (GetEntityRange(param2) < KICK_RANGE) + { + } + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + KICK_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/vgoblin_chief.as b/scripts/angelscript/monsters/vgoblin_chief.as new file mode 100644 index 00000000..8417a1f0 --- /dev/null +++ b/scripts/angelscript/monsters/vgoblin_chief.as @@ -0,0 +1,371 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class VgoblinChief : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int AXE_SWING; + int CAN_STUN; + string CHEW_SKULL_SCRIPT; + float CHEW_SKULL_STR; + string CL_SCRIPT; + int DMG_AXE; + int DMG_CHARGE; + int DMG_CLOUD; + int DOT_POISON; + int DROP_GOLD; + float FREQ_CLOUD; + float FREQ_SPECIAL; + int MOVE_RANGE; + string MY_CL_SCRIPT_IDX; + int NEW_MODEL; + int NPC_BASE_EXP; + string PLANT_SCRIPT; + int PLANT_STR; + string POISON_LIST; + int RND_SPECIAL; + float SKULL_DURATION; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SPLODIE_SKULL_SCRIPT; + float SPLODIE_SKULL_STR; + int STARTED_CYCLES; + int STEP_SIZE_NORM; + string STUN_BURST_DMG; + string STUN_BURST_POS; + string STUN_BURST_RAD; + string STUN_BURST_REPEL; + string STUN_LIST; + string SUM_POS; + + VgoblinChief() + { + NEW_MODEL = 1; + NPC_BASE_EXP = 3000; + SOUND_ATTACK1 = "monsters/goblin/c_gargoyle_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_gargoyle_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_gargoyle_atk3.wav"; + STEP_SIZE_NORM = 36; + FREQ_CLOUD = 1.5; + DMG_CLOUD = 20; + CL_SCRIPT = "monsters/vgoblin_chief_cl"; + FREQ_SPECIAL = Random(10.0, 30.0); + CAN_STUN = 1; + DROP_GOLD = 0; + ANIM_ATTACK = "battleaxe_swing1_L"; + DMG_AXE = RandomInt(100, 300); + DOT_POISON = 50; + DMG_CHARGE = 50; + ATTACK_HITCHANCE = 0.9; + PLANT_SCRIPT = "monsters/summon/doom_plant"; + CHEW_SKULL_SCRIPT = "monsters/lost_soul"; + SPLODIE_SKULL_SCRIPT = "traps/splodie_skull"; + SPLODIE_SKULL_STR = 1.0; + CHEW_SKULL_STR = 1.0; + PLANT_STR = 30; + SKULL_DURATION = Random(60.0, 120.0); + } + + void game_precache() + { + Precache(PLANT_SCRIPT); + Precache(CHEW_SKULL_SCRIPT); + Precache(SPLODIE_SKULL_SCRIPT); + Precache(CL_SCRIPT); + } + + void goblin_spawn() + { + SetName("Vile Goblin Chieftain"); + SetRace("goblin"); + SetBloodType("green"); + SetHealth(5000); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2_boss.mdl"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 0); + SetModelBody(1, 3); + SetModelBody(2, 1); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 3); + } + else + { + SetModel("monsters/goblin_new_boss.mdl"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 0); + SetModelBody(1, 3); + SetModelBody(2, 1); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + SetRoam(true); + SetAnimFrameRate(1.5); + SetHearingSensitivity(4); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("all", 0.5); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 1.25); + ClientEvent("persist", "all", CL_SCRIPT, GetEntityIndex(GetOwner())); + MY_CL_SCRIPT_IDX = "game.script.last_sent_id"; + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", MY_CL_SCRIPT_IDX); + CallExternal(GAME_MASTER, "vgoblin_chief_died", GetEntityOrigin(GetOwner())); + } + + void swing_axe() + { + AXE_SWING = 1; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, "blunt"); + AXE_SWING = 1; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, "slash"); + if (!(RND_SPECIAL > 0)) return; + string BURST_POS = /* TODO: $relpos */ $relpos(0, 64, -16); + stunburst_go(BURST_POS, 256, 1, DMG_CHARGE); + if (RND_SPECIAL == 1) + { + ScheduleDelayedEvent(0.2, "summon_chew_skulls"); + } + if (RND_SPECIAL == 2) + { + ScheduleDelayedEvent(0.2, "summon_splodie_skulls"); + } + if (RND_SPECIAL == 3) + { + ScheduleDelayedEvent(0.2, "summon_dewm"); + } + RND_SPECIAL = 0; + } + + void swing_dodamage() + { + if ((param1)) + { + if ((AXE_SWING)) + { + } + ApplyEffect(param2, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + AXE_SWING = 0; + } + + void leap_stun() + { + string BURST_POS = /* TODO: $relpos */ $relpos(0, 64, 0); + stunburst_go(BURST_POS, 64, 0, DMG_CHARGE); + } + + void gob_jump_check() + { + if (!(GOB_JUMPER)) return; + if (!(GOB_JUMP_SCANNING)) return; + float GOB_HOP_DELAY = Random(2, 4); + GOB_HOP_DELAY("gob_jump_check"); + if (!(m_hAttackTarget != "unset")) return; + if ((IS_FLEEING)) return; + if ((SUSPEND_AI)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOBLIN_JUMPRANGE)) return; + string ME_Z = GetMonsterProperty("origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + if (ME_Z > TARG_Z) + { + string Z_DIFF = ME_Z; + ME_Z -= TARG_Z; + } + else + { + string Z_DIFF = TARG_Z; + Z_DIFF -= ME_Z; + } + if (Z_DIFF > ATTACK_RANGE) + { + PlayAnim("critical", ANIM_SMASH); + ScheduleDelayedEvent(0.1, "do_jump"); + } + } + + void do_jump() + { + SetStepSize(1000); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 800)); + ScheduleDelayedEvent(0.5, "push_forward"); + ScheduleDelayedEvent(1.0, "jump_done"); + } + + void push_forward() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 100)); + } + + void jump_done() + { + SetStepSize(STEP_SIZE_NORM); + SetMoveAnim(ANIM_RUN); + } + + void cycle_up() + { + if ((STARTED_CYCLES)) return; + STARTED_CYCLES = 1; + FREQ_SPECIAL("set_special"); + FREQ_CLOUD("update_cloud"); + } + + void set_special() + { + FREQ_SPECIAL("set_special"); + RND_SPECIAL = RandomInt(1, 3); + } + + void summon_chew_skulls() + { + SUM_POS = /* TODO: $relpos */ $relpos(-64, 64, -16); + summon_effect(); + SpawnNPC(CHEW_SKULL_SCRIPT, SUM_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), CHEW_SKULL_STR, SKULL_DURATION + ScheduleDelayedEvent(0.01, "summon_chew_skulls2"); + } + + void summon_chew_skulls2() + { + SUM_POS = /* TODO: $relpos */ $relpos(64, 64, -16); + summon_effect(); + SpawnNPC(CHEW_SKULL_SCRIPT, SUM_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), CHEW_SKULL_STR, SKULL_DURATION + } + + void summon_splodie_skulls() + { + SUM_POS = /* TODO: $relpos */ $relpos(-64, 64, 32); + summon_effect(); + SpawnNPC(SPLODIE_SKULL_SCRIPT, SUM_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPLODIE_SKULL_STR, SKULL_DURATION + ScheduleDelayedEvent(0.01, "summon_splodie_skulls2"); + } + + void summon_splodie_skulls2() + { + SUM_POS = /* TODO: $relpos */ $relpos(64, 64, 32); + summon_effect(); + SpawnNPC(SPLODIE_SKULL_SCRIPT, /* TODO: $relpos */ $relpos(64, 64, 32), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPLODIE_SKULL_STR, SKULL_DURATION + ScheduleDelayedEvent(0.01, "summon_splodie_skulls3"); + } + + void summon_splodie_skulls3() + { + SUM_POS = /* TODO: $relpos */ $relpos(64, 64, -16); + summon_effect(); + SpawnNPC(SPLODIE_SKULL_SCRIPT, /* TODO: $relpos */ $relpos(64, 64, -16), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPLODIE_SKULL_STR, SKULL_DURATION + ScheduleDelayedEvent(0.01, "summon_splodie_skulls4"); + } + + void summon_splodie_skulls4() + { + SUM_POS = /* TODO: $relpos */ $relpos(-64, 64, -16); + summon_effect(); + SpawnNPC(SPLODIE_SKULL_SCRIPT, /* TODO: $relpos */ $relpos(-64, 64, -16), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPLODIE_SKULL_STR, SKULL_DURATION + } + + void summon_dewm() + { + summon_plant_effect(); + string PLANT_POS = /* TODO: $relpos */ $relpos(0, 64, -32); + ClientEvent("update", "all", MY_CL_SCRIPT_IDX, "dewm_plant_fx", PLANT_POS); + SpawnNPC(PLANT_SCRIPT, PLANT_POS, ScriptMode::Legacy); // params: PLANT_STR + } + + void summon_effect() + { + string START_POS = GetEntityProperty(GetOwner(), "svbonepos"); + Effect("beam", "point", "lgtning.spr", 30, START_POS, SUM_POS, Vector3(0, 255, 0), 200, 30, 0.5); + } + + void update_cloud() + { + FREQ_CLOUD("update_cloud"); + if (!(GOB_JUMP_SCANNING)) return; + POISON_LIST = /* TODO: $get_tbox */ $get_tbox("enemy", 128, /* TODO: $relpos */ $relpos(0, 0, -32)); + if (!(POISON_LIST != "none")) return; + ScrambleTokens(POISON_LIST, ";"); + ApplyEffect(GetToken(POISON_LIST, 0, ";"), "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + + void my_target_died() + { + ScheduleDelayedEvent(1.0, "npcatk_go_home"); + } + + void stunburst_go() + { + STUN_BURST_POS = param1; + STUN_BURST_RAD = param2; + STUN_BURST_REPEL = param3; + STUN_BURST_DMG = param4; + LogDebug("stunburst_go pos: STUN_BURST_POS rad: STUN_BURST_RAD repel: STUN_BURST_REPEL dmg: STUN_BURST_DMG"); + ClientEvent("update", "all", MY_CL_SCRIPT_IDX, "stunburst_go_cl", STUN_BURST_POS, STUN_BURST_RAD); + EmitSound(GetOwner(), 0, "magic/boom.wav", 10); + ScheduleDelayedEvent(0.25, "stun_targets"); + } + + void stun_targets() + { + STUN_LIST = FindEntitiesInSphere("enemy", STUN_BURST_RAD); + LogDebug("stun_targets STUN_LIST"); + if (!(STUN_LIST != "none")) return; + if (!(GetTokenCount(STUN_LIST, ";") > 0)) return; + for (int i = 0; i < GetTokenCount(STUN_LIST, ";"); i++) + { + stunburst_affect_targets(); + } + } + + void stunburst_affect_targets() + { + string CHECK_ENT = GetToken(STUN_LIST, i, ";"); + if (!(IsOnGround(CHECK_ENT))) return; + ApplyEffect(CHECK_ENT, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + if (STUN_BURST_DMG > 0) + { + DoDamage(CHECK_ENT, "direct", STUN_BURST_DMG, 1.0, GetOwner()); + } + if (!(STUN_BURST_REPEL)) return; + string TARGET_ORG = GetEntityOrigin(CHECK_ENT); + string TARG_ANG = /* TODO: $angles */ $angles(STUN_BURST_POS, TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CHECK_ENT, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + + void goblin_pre_spawn() + { + ATTACK_RANGE = 96; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 58; + MOVE_RANGE = 58; + } + +} + +} diff --git a/scripts/angelscript/monsters/vgoblin_chief_cl.as b/scripts/angelscript/monsters/vgoblin_chief_cl.as new file mode 100644 index 00000000..94f7f1ba --- /dev/null +++ b/scripts/angelscript/monsters/vgoblin_chief_cl.as @@ -0,0 +1,152 @@ +#pragma context client + +namespace MS +{ + +class VgoblinChiefCl : CGameScript +{ + int CYCLE_ANGLE; + string GLOW_COLOR; + int GLOW_RAD; + int N_SPR_FRAMES; + string SKEL_ID; + string SKEL_LIGHT_ID; + int SMOKE_RAD; + string SPRITE_FIRE; + string STUN_POS; + string STUN_RADIUS; + string STUN_SPRITE; + + VgoblinChiefCl() + { + GLOW_RAD = 128; + GLOW_COLOR = Vector3(0, 255, 0); + SPRITE_FIRE = "poison_cloud.spr"; + N_SPR_FRAMES = 17; + SMOKE_RAD = 128; + STUN_SPRITE = "fire1_fixed.spr"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.25); + string C_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + string L_POS = C_POS; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(0, Random(-64, 64), 0)); + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + string L_POS = C_POS; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(0, Random(-64, 64), 0)); + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + string L_POS = C_POS; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(0, Random(-64, 64), 0)); + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + string L_POS = C_POS; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, Random(0, 359), 0), Vector3(0, Random(-64, 64), 0)); + ClientEffect("tempent", "sprite", "poison_cloud.spr", L_POS, "setup_smokes"); + } + + void client_activate() + { + SKEL_ID = param1; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + } + + void game_prerender() + { + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, GLOW_COLOR, 1.0); + } + + void setup_smokes() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.5); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + } + + void dewm_plant_fx() + { + string SPRITE_CENTER = param1; + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "plant_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "plant_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "plant_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "plant_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "plant_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "plant_sprite"); + } + + void plant_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 5.0); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-125, 125), Random(-125, 125), Random(-125, 125))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 2); + ClientEffect("tempent", "set_current_prop", "gravity", Random(-1.5, -1.1)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + } + + void stunburst_go_cl() + { + CYCLE_ANGLE = 0; + const int TOTAL_OFS = 10; + STUN_POS = param1; + STUN_RADIUS = param2; + string POS_GROUND = /* TODO: $get_ground_height */ $get_ground_height(STUN_POS); + STUN_POS = "z"; + for (int i = 0; i < 17; i++) + { + stun_burst_fx(); + } + } + + void stun_burst_fx() + { + string FLAME_POS = STUN_POS; + FLAME_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, TOTAL_OFS, 0)); + ClientEffect("tempent", "sprite", STUN_SPRITE, FLAME_POS, "stunburst_flame"); + CYCLE_ANGLE += 20; + } + + void stunburst_flame() + { + float FADE_DEL = 1.0; + if (STUN_RADIUS > 128) + { + float FADE_DEL = 2.0; + } + int SPRITE_SPEED = 100; + if (STUN_RADIUS > 128) + { + int SPRITE_SPEED = 400; + } + ClientEffect("tempent", "set_current_prop", "death_delay", FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + +} + +} diff --git a/scripts/angelscript/monsters/vgoblin_guard.as b/scripts/angelscript/monsters/vgoblin_guard.as new file mode 100644 index 00000000..f19ab3e5 --- /dev/null +++ b/scripts/angelscript/monsters/vgoblin_guard.as @@ -0,0 +1,138 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class VgoblinGuard : CGameScript +{ + string ANIM_ATTACK; + int ATTACK_HITCHANCE; + int AXE_SWING; + int CAN_FIREBALL; + int CAN_STUN; + int CHARGE_SPEED; + int DMG_AXE; + int DMG_SWORD; + int DOT_FIRE; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FLINCH_ANIM; + int FLINCH_HEALTH; + float FREQ_CHARGE; + string F_GOB_TYPE; + int GOB_CHARGE_MAX_DIST; + int GOB_CHARGE_MIN_DIST; + int GOB_JUMPER; + int GOB_TYPE; + int NEW_MODEL; + int NPC_BASE_EXP; + + VgoblinGuard() + { + NEW_MODEL = 1; + NPC_BASE_EXP = 500; + DOT_FIRE = 40; + CAN_FIREBALL = 0; + CAN_FIREBALL = 0; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(25, 50); + ATTACK_HITCHANCE = 80; + CAN_STUN = 1; + GOB_TYPE = RandomInt(1, 2); + DMG_AXE = RandomInt(60, 150); + DMG_SWORD = RandomInt(50, 80); + GOB_JUMPER = 0; + CHARGE_SPEED = 300; + FREQ_CHARGE = 10.0; + GOB_CHARGE_MIN_DIST = 96; + GOB_CHARGE_MAX_DIST = 128; + FLINCH_HEALTH = 300; + } + + void goblin_spawn() + { + SetName("Vile Goblin Guard"); + SetRace("goblin"); + SetBloodType("green"); + SetHealth(1500); + SetRoam(true); + SetHearingSensitivity(2); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 3); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetModelBody(0, 0); + SetModelBody(1, RandomInt(1, 2)); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("all", 0.75); + SetDamageResistance("poison", 0.25); + SetDamageResistance("cold", 1.25); + ScheduleDelayedEvent(0.01, "gob_guard_set_weapon"); + } + + void gob_guard_set_weapon() + { + F_GOB_TYPE = GOB_TYPE; + if (F_GOB_TYPE == 1) + { + SetModelBody(2, 1); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.8; + CAN_STUN = 1; + } + if (F_GOB_TYPE == 2) + { + SetModelBody(2, 6); + ANIM_ATTACK = ANIM_SWIPE; + ATTACK_HITCHANCE = 0.9; + SetStat("parry", 120); + FLINCH_ANIM = "shielddeflect1"; + CAN_STUN = 1; + } + } + + void OnParry(CBaseEntity@ attacker) override + { + PlayAnim("critical", ANIM_PARRY); + // PlayRandomSound from: SOUND_PARRY1, SOUND_PARRY2, SOUND_PARRY3 + array sounds = {SOUND_PARRY1, SOUND_PARRY2, SOUND_PARRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(0.75, "swing_sword"); + } + + void swing_axe() + { + AXE_SWING = 1; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "slash", "dmgevent:swing"); + } + + void swing_dodamage() + { + ApplyEffect(m_hAttackTarget, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + +} + +} diff --git a/scripts/angelscript/monsters/vgoblin_shaman.as b/scripts/angelscript/monsters/vgoblin_shaman.as new file mode 100644 index 00000000..9c3e574b --- /dev/null +++ b/scripts/angelscript/monsters/vgoblin_shaman.as @@ -0,0 +1,313 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class VgoblinShaman : CGameScript +{ + string ANIM_ATTACK; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_MOVERANGE; + int CAN_FIREBALL; + string CLOUD_SCRIPT; + string DEATH_SCRIPT; + int DMG_FIREBALL; + int DMG_FIREBALL_DOT; + int DMG_FIST; + int DMG_NOVA; + int DOT_FIST; + int DOT_POISON; + string FIST_SCRIPT; + float FREQ_CLOUD; + float FREQ_FIREBALL; + float FREQ_NOVA; + float FREQ_SUMMON; + int GOB_CHARGER; + int GOB_JUMPER; + int GOB_JUMP_SCANNING; + string LAST_EGG; + int MOVE_RANGE; + string MY_CL_SCRIPT_IDX; + int NEW_MODEL; + string NEXT_CLOUD; + string NEXT_FIREBALL; + string NEXT_NOVA; + string NEXT_SUMMON; + string NOVA_SCRIPT; + int NO_DEATH_HORROR; + int NPC_BASE_EXP; + int POISON_FIST; + string SOUND_FIREBALL; + int SUMMON_ALIVE; + string SUMMON_SCRIPT; + int TOSS_FIREBALL; + + VgoblinShaman() + { + NEW_MODEL = 1; + NPC_BASE_EXP = 800; + GOB_JUMPER = 0; + GOB_CHARGER = 0; + DMG_FIST = 10; + DMG_FIREBALL = 75; + DOT_POISON = RandomInt(20, 40); + CAN_FIREBALL = 1; + FREQ_FIREBALL = 2.0; + DMG_FIREBALL = 150; + DMG_FIREBALL_DOT = 25; + DMG_NOVA = 200; + DOT_FIST = 50; + FREQ_NOVA = 10.0; + FREQ_CLOUD = Random(10.0, 20.0); + FREQ_SUMMON = Random(10.0, 20.0); + ATTACK_MOVERANGE = 800; + MOVE_RANGE = 800; + ATTACK_HITCHANCE = 0.75; + ANIM_ATTACK = "swordswing1_L"; + SOUND_FIREBALL = "bullchicken/bc_attack2.wav"; + SUMMON_SCRIPT = "monsters/summon/horror_egg"; + DEATH_SCRIPT = "monsters/horror2"; + CLOUD_SCRIPT = "monsters/summon/npc_poison_cloud2"; + NOVA_SCRIPT = "monsters/summon/poison_burst"; + FIST_SCRIPT = "monsters/poison_fist_cl"; + } + + void game_precache() + { + Precache(SUMMON_SCRIPT); + Precache(DEATH_SCRIPT); + Precache(CLOUD_SCRIPT); + Precache(NOVA_SCRIPT); + Precache(FIST_SCRIPT); + } + + void goblin_spawn() + { + SetName("Vile Goblin Poisoner"); + SetRace("goblin"); + SetBloodType("green"); + SetHealth(1000); + SetWidth(32); + SetHeight(60); + SetRoam(true); + SetHearingSensitivity(2); + if (!(NEW_MODEL)) + { + SetModel("monsters/goblin2.mdl"); + SetWidth(32); + SetHeight(60); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 3); + } + else + { + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 2); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 1.5); + ClientEvent("persist", "all", FIST_SCRIPT, GetEntityIndex(GetOwner()), 19); + MY_CL_SCRIPT_IDX = "game.script.last_sent_id"; + } + + void toss_fireball() + { + TOSS_FIREBALL = 0; + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 48, 0), m_hAttackTarget, 400, DMG_FIREBALL, 0.5, "none"); + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", MY_CL_SCRIPT_IDX); + if ((NO_DEATH_HORROR)) return; + SpawnNPC(DEATH_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner()), 5); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetEntityRange(m_hAttackTarget) < 96) + { + if (GetGameTime() > NEXT_NOVA) + { + } + NEXT_NOVA = GetGameTime(); + EmitSound(GetOwner(), 0, SOUND_SHAM_ALERT, 10); + PlayAnim("critical", ANIM_WARCRY); + AS_ATTACKING = GetGameTime(); + NEXT_NOVA += FREQ_NOVA; + do_nova(); + } + } + + void do_nova() + { + SpawnNPC(NOVA_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 256, 1, DMG_NOVA, DOT_POISON + } + + void swing_sword() + { + if ((TOSS_FIREBALL)) + { + toss_fireball(); + } + if ((TOSS_FIREBALL)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + POISON_FIST = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_FIST, ATTACK_HITCHANCE, "blunt"); + } + + void game_dodamage() + { + if ((param1)) + { + if ((POISON_FIST)) + { + } + ApplyEffect(param2, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_FIST); + } + POISON_FIST = 0; + } + + void gob_cycle_up() + { + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += 3.0; + NEXT_CLOUD = GetGameTime(); + NEXT_CLOUD += Random(5.0, 10.0); + NEXT_SUMMON = GetGameTime(); + NEXT_SUMMON += Random(15.0, 20.0); + if ((GOB_JUMP_SCANNING)) return; + GOB_JUMP_SCANNING = 1; + EmitSound(GetOwner(), 0, SOUND_SHAM_ALERT, 10); + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if ((SUSPEND_AI)) return; + if ((IS_FLEEING)) return; + if (GetGameTime() > NEXT_CLOUD) + { + if ((false)) + { + } + NEXT_CLOUD = GetGameTime(); + NEXT_CLOUD += FREQ_CLOUD; + PlayAnim("critical", ANIM_WARCRY); + npcatk_suspend_ai(1.5); + EmitSound(GetOwner(), 0, SOUND_SHAM_ALERT, 10); + string CLOUD_POS = GetEntityOrigin(m_hAttackTarget); + if ((IsValidPlayer(m_hAttackTarget))) + { + CLOUD_POS += "z"; + } + SpawnNPC(CLOUD_SCRIPT, CLOUD_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_FIREBALL_DOT, 10.0, 1 + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(SUMMON_ALIVE)) + { + if (GetGameTime() > NEXT_SUMMON) + { + } + NEXT_SUMMON = GetGameTime(); + NEXT_SUMMON += FREQ_SUMMON; + PlayAnim("critical", ANIM_SMASH); + AS_ATTACKING = GetGameTime(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((CAN_FIREBALL)) + { + if (GetGameTime() > NEXT_FIREBALL) + { + } + if (GetEntityRange(m_hAttackTarget) > MIN_FIREBALL_DIST) + { + } + if ((false)) + { + } + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + TOSS_FIREBALL = 1; + PlayAnim("once", ANIM_SWIPE); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + EmitSound(GetOwner(), 0, SOUND_FIREBALL_CAST, 10); + } + if ((false)) + { + float STRUCK_CHECK = GetGameTime(); + STRUCK_CHECK -= 5.0; + if (STRUCK_CHECK > LAST_STRUCK) + { + if (!(IS_FLEEING)) + { + } + SetMoveAnim(ANIM_IDLE); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + } + else + { + SetMoveAnim(ANIM_RUN); + } + } + else + { + SetMoveAnim(ANIM_RUN); + } + } + + void swing_axe() + { + summon_horror_egg(); + } + + void summon_horror_egg() + { + SUMMON_ALIVE = 1; + SpawnNPC(SUMMON_SCRIPT, /* TODO: $relpos */ $relpos(0, 64, 16), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + LAST_EGG = GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(0.1, "boost_egg"); + } + + void boost_egg() + { + AddVelocity(LAST_EGG, /* TODO: $relvel */ $relvel(0, 130, 120)); + } + + void horror_died() + { + NEXT_SUMMON = GetGameTime(); + NEXT_SUMMON += FREQ_SUMMON; + SUMMON_ALIVE = 0; + } + + void no_death_event() + { + NO_DEATH_HORROR = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/vine_fire.as b/scripts/angelscript/monsters/vine_fire.as new file mode 100644 index 00000000..267918af --- /dev/null +++ b/scripts/angelscript/monsters/vine_fire.as @@ -0,0 +1,225 @@ +#pragma context server + +#include "monsters/base_stripped_ai.as" + +namespace MS +{ + +class VineFire : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_GROW; + string ANIM_IDLE; + int ATTACK_HITRANGE; + int DMG_ATK; + int DOT_ATK; + float FREQ_SOUND_BURN; + int IMMUNE_VAMPIRE; + string MY_MASTER; + string NEXT_BURN_SOUND; + string NPCATK_TARGET; + string NPC_DID_DEATH; + int NPC_GIVE_EXP; + string NPC_OVERRIDE_DEATH; + int PHLAMES_VINE; + int QUIET_DEATH; + string SKEL_RESPAWN_TIMES; + string SKIN_CYCLE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_BURN; + string SOUND_DEATH; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SWING_ATTACK; + int VINE_SUSPEND; + + VineFire() + { + NPC_GIVE_EXP = 200; + ANIM_IDLE = "idle"; + ANIM_ATTACK = "attack1"; + ANIM_GROW = "raise"; + ANIM_DEATH = "lower"; + ATTACK_HITRANGE = 200; + DMG_ATK = 100; + DOT_ATK = 50; + SOUND_ATTACK1 = "tentacle/te_roar1.wav"; + SOUND_ATTACK2 = "tentacle/te_roar1.wav"; + SOUND_BURN = "ambience/burning1.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STRUCK3 = "debris/flesh3.wav"; + SOUND_PAIN1 = "tentacle/te_alert1.wav"; + SOUND_PAIN2 = "tentacle/te_alert2.wav"; + SOUND_DEATH = "tentacle/te_move2.wav"; + FREQ_SOUND_BURN = 30.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + if ((IsEntityAlive(GetOwner()))) + { + } + if (!(QUIET_DEATH)) + { + } + SetProp(GetOwner(), "skin", SKIN_CYCLE); + SKIN_CYCLE += 1; + if (SKIN_CYCLE > 7) + { + SKIN_CYCLE = 0; + } + if (!(VINE_SUSPEND)) + { + } + if ((IsEntityAlive(GetOwner()))) + { + } + if (GetGameTime() > NEXT_BURN_SOUND) + { + } + NEXT_BURN_SOUND = GetGameTime(); + NEXT_BURN_SOUND += FREQ_SOUND_BURN; + // svplaysound: svplaysound 2 0 SOUND_BURN + EmitSound(2, 0, SOUND_BURN); + // svplaysound: svplaysound 2 5 SOUND_BURN + EmitSound(2, 5, SOUND_BURN); + } + + void OnSpawn() override + { + SetName("Lava Root"); + SetModel("monsters/deadlyvine.mdl"); + SetWidth(32); + SetHeight(64); + SetHealth(1000); + SetRace("demon"); + SetBloodType("none"); + SetNoPush(true); + IMMUNE_VAMPIRE = 1; + SKIN_CYCLE = 0; + SetHearingSensitivity(11); + SetIdleAnim(ANIM_GROW); + SetMoveAnim(ANIM_GROW); + PlayAnim("once", ANIM_IDLE); + VINE_SUSPEND = 1; + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", 0); + SetSkillLevel(NPC_GIVE_EXP); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 2.0); + ScheduleDelayedEvent(2.0, "grow_in"); + } + + void grow_in() + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + VINE_SUSPEND = 0; + PlayAnim("critical", ANIM_GROW); + EmitSound(GetOwner(), 1, "tentacle/te_move1.wav", 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((QUIET_DEATH)) return; + PlayAnim("critical", ANIM_DEATH); + // svplaysound: svplaysound 2 0 SOUND_BURN + EmitSound(2, 0, SOUND_BURN); + EmitSound(GetOwner(), 1, SOUND_DEATH, 10); + ClearFX(); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(IsEntityAlive(GetOwner()))) return; + if ((VINE_SUSPEND)) return; + string HEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(GetOwner()) == "enemy")) return; + NPCATK_TARGET = HEARD_ID; + SetMoveDest(m_hAttackTarget); + if (!(GetEntityRange(HEARD_ID) < ATTACK_HITRANGE)) return; + PlayAnim("once", ANIM_ATTACK); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(IsEntityAlive(GetOwner()))) return; + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 5); + if ((VINE_SUSPEND)) return; + if (!(GetEntityRange(m_hLastStruck) < ATTACK_HITRANGE)) return; + NPCATK_TARGET = GetEntityIndex(m_hLastStruck); + SetMoveDest(m_hAttackTarget); + PlayAnim("once", ANIM_ATTACK); + } + + void frame_attack() + { + SWING_ATTACK = 1; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_ATK, 1.0, "pierce"); + } + + void game_dodamage() + { + if (!(param1)) return; + if ((SWING_ATTACK)) + { + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_ATK); + AddVelocity(param2, /* TODO: $relvel */ $relvel(-200, -300, 110)); + } + SWING_ATTACK = 0; + } + + void phlames_vine() + { + PHLAMES_VINE = 1; + MY_MASTER = FindEntityByName("phlame_wiz"); + if ((GetEntityProperty(MY_MASTER, "scriptvar"))) + { + int AUTO_REMOVE = 1; + } + if (G_FLAMES_EAGLES > 0) + { + int AUTO_REMOVE = 1; + } + LogDebug("set phlames_vine GetEntityName(MY_MASTER) GetEntityProperty(MY_MASTER, "scriptvar")"); + if (!(AUTO_REMOVE)) return; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + QUIET_DEATH = 1; + npc_suicide(); + } + + void ext_summon_fade() + { + LogDebug("ext_summon_fade NPC_SUMMON G_NPC_SUMMON_COUNT"); + if ((PHLAMES_VINE)) + { + LogDebug("Birds present - fading"); + SetAnimFrameRate(0); + SetAnimMoveSpeed(0); + SetGravity(0); + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + NPC_DID_DEATH = 1; + NPC_OVERRIDE_DEATH = 1; + SKEL_RESPAWN_TIMES = 99; + QUIET_DEATH = 1; + DoDamage(GetOwner(), "direct", 99999, 100, GAME_MASTER); + DeleteEntity(GetOwner(), true); // fade out + } + } + +} + +} diff --git a/scripts/angelscript/monsters/vine_poison.as b/scripts/angelscript/monsters/vine_poison.as new file mode 100644 index 00000000..fdf3f00b --- /dev/null +++ b/scripts/angelscript/monsters/vine_poison.as @@ -0,0 +1,145 @@ +#pragma context server + +#include "monsters/base_stripped_ai.as" + +namespace MS +{ + +class VinePoison : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_GROW; + string ANIM_IDLE; + int ATTACK_HITRANGE; + int DMG_ATK; + int DOT_ATK; + int IMMUNE_VAMPIRE; + string NPCATK_TARGET; + int NPC_GIVE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SWING_ATTACK; + int VINE_SUSPEND; + + VinePoison() + { + NPC_GIVE_EXP = 200; + ANIM_IDLE = "idle"; + ANIM_ATTACK = "attack1"; + ANIM_GROW = "raise"; + ANIM_DEATH = "lower"; + ATTACK_HITRANGE = 200; + DMG_ATK = 100; + DOT_ATK = 50; + SOUND_ATTACK1 = "tentacle/te_roar1.wav"; + SOUND_ATTACK2 = "tentacle/te_roar1.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STRUCK3 = "debris/flesh3.wav"; + SOUND_PAIN1 = "tentacle/te_alert1.wav"; + SOUND_PAIN2 = "tentacle/te_alert2.wav"; + SOUND_DEATH = "tentacle/te_move2.wav"; + } + + void OnSpawn() override + { + SetName("Poison Vine"); + SetModel("monsters/deadlyvine.mdl"); + SetWidth(32); + SetHeight(64); + SetHealth(1000); + SetRace("demon"); + SetBloodType("none"); + SetNoPush(true); + IMMUNE_VAMPIRE = 1; + SetHearingSensitivity(11); + SetIdleAnim(ANIM_GROW); + SetMoveAnim(ANIM_GROW); + PlayAnim("once", ANIM_IDLE); + VINE_SUSPEND = 1; + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", 0); + SetDamageResistance("lightning", 2.0); + SetDamageResistance("poison", 0); + ScheduleDelayedEvent(2.0, "grow_in"); + SetModelBody(0, 1); + } + + void set_wallmount() + { + SetGravity(0); + SetFly(true); + } + + void grow_in() + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + VINE_SUSPEND = 0; + PlayAnim("critical", ANIM_GROW); + EmitSound(GetOwner(), 1, "tentacle/te_move1.wav", 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((QUIET_DEATH)) return; + PlayAnim("critical", ANIM_DEATH); + EmitSound(GetOwner(), 1, SOUND_DEATH, 10); + ClearFX(); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(IsEntityAlive(GetOwner()))) return; + if ((VINE_SUSPEND)) return; + string HEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(GetOwner()) == "enemy")) return; + NPCATK_TARGET = HEARD_ID; + SetMoveDest(m_hAttackTarget); + if (!(GetEntityRange(HEARD_ID) < ATTACK_HITRANGE)) return; + PlayAnim("once", ANIM_ATTACK); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(IsEntityAlive(GetOwner()))) return; + EmitSound(GetOwner(), 0, SOUND_STRUCK1, 5); + if ((VINE_SUSPEND)) return; + if (!(GetEntityRange(m_hLastStruck) < ATTACK_HITRANGE)) return; + NPCATK_TARGET = GetEntityIndex(m_hLastStruck); + SetMoveDest(m_hAttackTarget); + PlayAnim("once", ANIM_ATTACK); + } + + void frame_attack() + { + SWING_ATTACK = 1; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_ATK, 1.0, "pierce"); + } + + void game_dodamage() + { + if (!(param1)) return; + if ((SWING_ATTACK)) + { + ApplyEffect(param2, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_ATK); + AddVelocity(param2, /* TODO: $relvel */ $relvel(-200, -300, 110)); + } + SWING_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/wizard_normal.as b/scripts/angelscript/monsters/wizard_normal.as new file mode 100644 index 00000000..f2c58598 --- /dev/null +++ b/scripts/angelscript/monsters/wizard_normal.as @@ -0,0 +1,55 @@ +#pragma context server + +#include "keledrosruins/keledros.as" + +namespace MS +{ + +class WizardNormal : CGameScript +{ + int AM_GENERIC; + + WizardNormal() + { + AM_GENERIC = 1; + } + + void do_ale_intro() + { + ScheduleDelayedEvent(1.0, "do_ale_intro1"); + } + + void do_ale_intro1() + { + SetSayTextRange(2048); + SayText("Whoever you are, turn around and head back. Only death awaits further."); + ScheduleDelayedEvent(4.0, "do_ale_intro2"); + } + + void do_ale_intro2() + { + SayText("For many cycles I have guarded these canyons and will continue to do so until the great Keledros returns."); + ScheduleDelayedEvent(4.0, "do_ale_intro3"); + } + + void do_ale_intro3() + { + SayText("Keledros dead, you say!? Ha! Only time will tell if that is true or not."); + ScheduleDelayedEvent(4.0, "do_ale_intro4"); + } + + void do_ale_intro4() + { + SayText("Enough! Prepare to die at my hands!"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(AM_SKELE)) return; + if (!((StringToLower(GetMapName())).findFirst("aleyesu") >= 0)) return; + SayText("Master... Forgive me..."); + } + +} + +} diff --git a/scripts/angelscript/monsters/wizard_strong.as b/scripts/angelscript/monsters/wizard_strong.as new file mode 100644 index 00000000..b8fc6397 --- /dev/null +++ b/scripts/angelscript/monsters/wizard_strong.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "bloodrose/venevus.as" + +namespace MS +{ + +class WizardStrong : CGameScript +{ + int AM_GENERIC; + + WizardStrong() + { + AM_GENERIC = 1; + } + + void game_precache() + { + Precache("aleyesu/death_image"); + } + + void OnSpawn() override + { + SetHealth(12000); + SetDamageResistance("slash", 1); + SetDamageResistance("pierce", 1); + SetDamageResistance("blunt", 1); + SetDamageResistance("lightning", 0.25); + SetDamageResistance("cold", 0.25); + } + + void do_ale_intro() + { + ScheduleDelayedEvent(1.0, "do_ale_intro1"); + } + + void do_ale_intro1() + { + SetSayTextRange(2048); + SayText("I don't believe it! I mean of course I believe it, I did just travel forward through time."); + ScheduleDelayedEvent(4.0, "do_ale_intro2"); + } + + void do_ale_intro2() + { + SayText("Who are you?! What are you doing in my chamber?!"); + ScheduleDelayedEvent(4.0, "do_ale_intro3"); + } + + void do_ale_intro3() + { + SayText("Don't tell me you touched that dial!?"); + ScheduleDelayedEvent(4.0, "do_ale_intro4"); + } + + void do_ale_intro4() + { + SayText("Oh never mind... I'll just kill you all!"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!((StringToLower(GetMapName())).findFirst("aleyesu") >= 0)) return; + SpawnNPC("aleyesu/death_image", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: NPC_SPAWN_LOC + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + } + +} + +} diff --git a/scripts/angelscript/monsters/wolf.as b/scripts/angelscript/monsters/wolf.as new file mode 100644 index 00000000..cc4fffe3 --- /dev/null +++ b/scripts/angelscript/monsters/wolf.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "monsters/wolf_base.as" + +namespace MS +{ + +class Wolf : CGameScript +{ + int NPC_GIVE_EXP; + string NPC_PET_SCRIPT; + string NPC_PET_TYPE; + + Wolf() + { + NPC_GIVE_EXP = 30; + NPC_PET_TYPE = "wolf"; + NPC_PET_SCRIPT = "monsters/companion/pet_wolf"; + } + +} + +} diff --git a/scripts/angelscript/monsters/wolf_alpha.as b/scripts/angelscript/monsters/wolf_alpha.as new file mode 100644 index 00000000..8bea7e2e --- /dev/null +++ b/scripts/angelscript/monsters/wolf_alpha.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/wolf_base.as" + +namespace MS +{ + +class WolfAlpha : CGameScript +{ + int AM_ALPHA; + int NPC_GIVE_EXP; + + WolfAlpha() + { + AM_ALPHA = 1; + NPC_GIVE_EXP = 35; + } + +} + +} diff --git a/scripts/angelscript/monsters/wolf_base.as b/scripts/angelscript/monsters/wolf_base.as new file mode 100644 index 00000000..b4206b63 --- /dev/null +++ b/scripts/angelscript/monsters/wolf_base.as @@ -0,0 +1,412 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class WolfBase : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_BITE; + string ANIM_CLAW; + string ANIM_DEATH; + string ANIM_EAT; + string ANIM_FLINCH; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_FLINCH3; + string ANIM_HOWL; + string ANIM_IDLE; + string ANIM_IDLE_SIT; + string ANIM_IDLE_SIT2; + string ANIM_IDLE_STAND; + string ANIM_IDLE_STAND2; + string ANIM_IDLE_STAND3; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_TOSTAND; + string ANIM_WALK; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string ATTACK_TYPE; + int CAN_FLEE; + int CHANCE_CLAW; + int DID_ALLY_ALERT; + float DMG_BITE; + float DMG_CLAW; + int FLEE_CHANCE; + int FLEE_HEALTH; + string FLINCH_ANIM; + float FREQ_HOWL; + float FREQ_IDLE; + float FREQ_LOOK; + int LEAP_RANGE; + string MONSTER_MODEL; + string MY_ALPHA; + string NEXT_HOWL; + int NPC_ALLY_RESPONSE_RANGE; + int SEARCH_DELAY; + int SIT_MODE; + string SOUND_ATK1; + string SOUND_ATK2; + string SOUND_ATK3; + string SOUND_DEATH; + string SOUND_GROWL; + string SOUND_HOWL1; + string SOUND_HOWL2; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_YELP; + + WolfBase() + { + ANIM_WALK = "run"; + ANIM_RUN = "run"; + ANIM_IDLE = "standidle1"; + ANIM_DEATH = "die1"; + ANIM_ATTACK = "attack1"; + NPC_ALLY_RESPONSE_RANGE = 2048; + ANIM_FLINCH = "hopback"; + ANIM_LEAP = "attack2"; + ANIM_CLAW = "attack2"; + ANIM_HOWL = "howl"; + ANIM_ALERT = "threat"; + ANIM_IDLE_SIT = "sit_idle1"; + ANIM_IDLE_SIT2 = "sit_idle2"; + ANIM_IDLE_STAND = "standidle1"; + ANIM_IDLE_STAND2 = "standidle2"; + ANIM_IDLE_STAND3 = "guard"; + ANIM_TOSTAND = "standup"; + ANIM_BITE = "attack1"; + ANIM_CLAW = "attack2"; + ANIM_EAT = "eat"; + ANIM_FLINCH1 = "hopback"; + ANIM_FLINCH2 = "pain1"; + ANIM_FLINCH3 = "pain2"; + ATTACK_RANGE = 92; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 72; + CAN_FLEE = 1; + FLEE_HEALTH = 25; + FLEE_CHANCE = 25; + ATTACK_HITCHANCE = 70; + LEAP_RANGE = 256; + DMG_BITE = Random(2, 5); + DMG_CLAW = Random(1, 3); + FREQ_LOOK = 20.0; + FREQ_IDLE = Random(3, 20); + FREQ_HOWL = Random(20, 30); + CHANCE_CLAW = 50; + SOUND_HOWL1 = "monsters/wolves/wolf_howl1.wav"; + SOUND_HOWL2 = "monsters/wolves/wolf_howl2.wav"; + SOUND_GROWL = "monsters/wolves/wolf_alert.wav"; + SOUND_ATK1 = "monsters/wolves/wolf_atk1.wav"; + SOUND_ATK2 = "monsters/wolves/wolf_atk2.wav"; + SOUND_ATK3 = "monsters/wolves/wolf_atk3.wav"; + SOUND_PAIN = "monsters/wolves/wolf_yelp1.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_YELP = "monsters/wolves/wolf_yelp2.wav"; + SOUND_DEATH = "monsters/wolves/wolf_death.wav"; + MONSTER_MODEL = "monsters/normal_wolf.mdl"; + Precache("monsters/normal_wolf.mdl"); + Precache(SOUND_DEATH); + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_IDLE); + if (!(AM_ALPHA)) + { + if (MY_ALPHA != "unset") + { + } + npcatk_setmovedest(G_ALPHA, ATTACK_MOVERANGE); + } + if (m_hAttackTarget == "unset") + { + } + if (GetGameTime() > NEXT_HOWL) + { + LogDebug("idle howl"); + NEXT_HOWL = GetGameTime(); + NEXT_HOWL += FREQ_HOWL; + do_howl(); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if ((SIT_MODE)) + { + PlayAnim("critical", ANIM_IDLE_SIT2); + } + if (!(SIT_MODE)) + { + int RND_IDLE = RandomInt(1, 2); + if (RND_IDLE == 1) + { + atk_sound(); + PlayAnim("critical", ANIM_IDLE_STAND2); + } + if (RND_IDLE == 2) + { + EmitSound(GetOwner(), 0, SOUND_GROWL, 10); + PlayAnim("critical", ANIM_IDLE_STAND3); + } + } + if ((AM_ALPHA)) + { + } + if (RandomInt(1, 2) == 1) + { + } + if ((SIT_MODE)) + { + ScheduleDelayedEvent(0.5, "sitmode_off"); + } + if (!(SIT_MODE)) + { + ScheduleDelayedEvent(0.5, "sitmode_on"); + } + } + + void OnSpawn() override + { + SetName("Wolf"); + SetRace("rogue"); + SetModel(MONSTER_MODEL); + SetHearingSensitivity(8); + SetWidth(36); + SetHeight(48); + SetRoam(true); + if (!(AM_ALPHA)) + { + SetHealth(50); + SetModelBody(0, 0); + ScheduleDelayedEvent(3.0, "find_alpha"); + } + if ((AM_ALPHA)) + { + SetHealth(75); + SetModelBody(0, 1); + FLEE_HEALTH = 0; + } + if (StringToLower(GetMapName()) == "sfor") + { + if (RandomInt(1, 100) == 50) + { + } + GiveItem(GetOwner(), "swords_wolvesbane"); + } + NEXT_HOWL = 0; + } + + void OnPostSpawn() override + { + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + + void find_alpha() + { + CallExternal("all", "ext_wolf_setalpha"); + if ((IsEntityAlive(G_ALPHA))) + { + MY_ALPHA = G_ALPHA; + } + if (!(IsEntityAlive(G_ALPHA))) + { + MY_ALPHA = "unset"; + } + } + + void ext_wolf_setalpha() + { + if (!(AM_ALPHA)) return; + SetGlobalVar("G_ALPHA", GetEntityIndex(GetOwner())); + } + + void sitmode_off() + { + if ((SIT_MODE)) + { + PlayAnim("critical", ANIM_TOSTAND); + } + SIT_MODE = 0; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + } + + void sitmode_on() + { + SIT_MODE = 1; + SetMoveAnim(ANIM_IDLE_SIT); + SetIdleAnim(ANIM_IDLE_SIT); + } + + void npcatk_checkflee() + { + if ((CANT_FLEE)) return; + if (FLEE_HEALTH > 0) + { + if (GetMonsterHP() < FLEE_HEALTH) + { + if (RandomInt(1, 100) <= FLEE_CHANCE) + { + if (!(AM_ALPHA)) + { + } + if ((IsEntityAlive(MY_ALPHA))) + { + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(MY_ALPHA); + npcatk_suspend_ai(2.0); + } + if (!(IsEntityAlive(MY_ALPHA))) + { + npcatk_flee(GetEntityIndex(m_hLastStruck), FLEE_DISTANCE, 10.0); + } + } + } + } + } + + void bite1() + { + ATTACK_TYPE = "bite"; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "slash", "dmgevent:wolfatk"); + atk_sound(); + if (RandomInt(1, 100) < CHANCE_CLAW) + { + ANIM_ATTACK = ANIM_CLAW; + } + } + + void claw1() + { + ATTACK_TYPE = "claw"; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW, ATTACK_HITCHANCE, GetOwner(), GetOwner(), "none", "slash", "dmgevent:wolfatk"); + atk_sound(); + ANIM_ATTACK = ANIM_BITE; + } + + void OnAidingAlly(CBaseEntity@ ally, CBaseEntity@ enemy) + { + CallExternal(NPC_ALLY_TO_AID, "being_aided"); + } + + void being_aided() + { + if ((DID_ALLY_ALERT)) return; + DID_ALLY_ALERT = 1; + do_howl(); + } + + void do_howl() + { + if ((IsEntityAlive(GetOwner()))) + { + PlayAnim("critical", ANIM_HOWL); + } + // PlayRandomSound from: SOUND_HOWL1, SOUND_HOWL2 + array sounds = {SOUND_HOWL1, SOUND_HOWL2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npcatk_lost_sight() + { + if ((false)) return; + if ((SEARCH_DELAY)) return; + SEARCH_DELAY = 1; + EmitSound(GetOwner(), 0, SOUND_GROWL, 10); + FREQ_LOOK("reset_search_delay"); + do_howl(); + } + + void reset_search_delay() + { + SEARCH_DELAY = 0; + } + + void OnFlinch() + { + int RND_FLINCH = RandomInt(1, 5); + if (RND_FLINCH == 1) + { + FLINCH_ANIM = ANIM_FLINCH2; + } + if (RND_FLINCH == 2) + { + FLINCH_ANIM = ANIM_FLINCH3; + } + if (RND_FLINCH > 2) + { + FLINCH_ANIM = ANIM_FLINCH1; + } + EmitSound(GetOwner(), 0, SOUND_YELP, 10); + } + + void cycle_up() + { + if ((SIT_MODE)) + { + sitmode_off(); + } + } + + void atk_sound() + { + // PlayRandomSound from: SOUND_ATK1, SOUND_ATK2, SOUND_ATK3 + array sounds = {SOUND_ATK1, SOUND_ATK2, SOUND_ATK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_PAIN + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if (!(param1)) return; + if (ATTACK_TYPE == "bite") + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(-50, 110, 105)); + } + if (ATTACK_TYPE == "claw") + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(-100, 130, 120)); + } + ATTACK_TYPE = "none"; + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RND_DEATH = RandomInt(1, 2); + if (RND_DEATH == 1) + { + ANIM_DEATH = "die1"; + } + if (RND_DEATH == 2) + { + ANIM_DEATH = "die2"; + } + } + + void my_target_died() + { + if ((false)) return; + PlayAnim("once", ANIM_EAT); + } + +} + +} diff --git a/scripts/angelscript/monsters/wolf_ice.as b/scripts/angelscript/monsters/wolf_ice.as new file mode 100644 index 00000000..98249bb0 --- /dev/null +++ b/scripts/angelscript/monsters/wolf_ice.as @@ -0,0 +1,116 @@ +#pragma context server + +#include "monsters/wolf_base.as" + +namespace MS +{ + +class WolfIce : CGameScript +{ + int AM_ALPHA; + float CHANCE_BURN; + int CUSTOM_WOLF; + int CYCLES_STARTED; + int DMG_BITE; + int DMG_CLAW; + int DOING_HOWL; + int DOT_BURN; + float FREQ_COMBAT_HOWL; + int NEXT_HOWL; + string NPC_GIVE_EXP; + string NPC_PET_SCRIPT; + string NPC_PET_TYPE; + string SOUND_BURN; + + WolfIce() + { + NPC_PET_TYPE = "wolf_ice"; + NPC_PET_SCRIPT = "monsters/companion/pet_wolf_ice"; + if ((StringToLower(GetMapName())).findFirst("lodagond") >= 0) + { + NPC_GIVE_EXP = 800; + } + else + { + NPC_GIVE_EXP = 400; + } + CUSTOM_WOLF = 1; + AM_ALPHA = 0; + DOT_BURN = 70; + DMG_BITE = RandomInt(50, 200); + DMG_CLAW = RandomInt(50, 75); + FREQ_COMBAT_HOWL = Random(15, 20); + CHANCE_BURN = 0.3; + SOUND_BURN = "magic/frost_reverse.wav"; + } + + void OnSpawn() override + { + SetName("Winter Wolf"); + SetRace("demon"); + SetModel(MONSTER_MODEL); + SetWidth(36); + SetHeight(48); + SetRoam(true); + SetHealth(2000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 1.25); + SetDamageResistance("cold", 0.0); + SetModelBody(0, 2); + SetHearingSensitivity(8); + NEXT_HOWL = 0; + } + + void do_combat_howl() + { + if ((I_R_FROZEN)) return; + DOING_HOWL = 1; + PlayAnim("critical", ANIM_HOWL); + // PlayRandomSound from: SOUND_HOWL1, SOUND_HOWL2 + array sounds = {SOUND_HOWL1, SOUND_HOWL2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(GetEntityOrigin(GetOwner()), 200, 0, 1.0, 0.0); + ScheduleDelayedEvent(0.1, "end_combat_howl"); + } + + void end_combat_howl() + { + DOING_HOWL = 0; + FREQ_COMBAT_HOWL("do_combat_howl"); + } + + void wolfatk_dodamage() + { + if ((param1)) + { + if (RandomInt(1, 100) < CHANCE_BURN) + { + } + if (GetRelationship(param2) == "enemy") + { + } + ApplyEffect(param2, "effects/dot_cold", 10, GetEntityIndex(GetOwner()), DOT_BURN); + EmitSound(GetOwner(), 0, SOUND_BURN, 10); + Effect("glow", GetOwner(), Vector3(0, 75, 255), 128, 1, 1); + } + } + + void game_dodamage() + { + if (!(DOING_HOWL)) return; + if (!(GetRelationship(param2) == "enemy")) return; + SendPlayerMessage(param2, "You hear a chilling howl!"); + ApplyEffect(param2, "effects/dot_cold_freeze", 5, GetOwner(), 1); + DOING_HOWL = 0; + } + + void cycle_up() + { + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + FREQ_COMBAT_HOWL("do_combat_howl"); + } + +} + +} diff --git a/scripts/angelscript/monsters/wolf_ice_alpha.as b/scripts/angelscript/monsters/wolf_ice_alpha.as new file mode 100644 index 00000000..3642ea84 --- /dev/null +++ b/scripts/angelscript/monsters/wolf_ice_alpha.as @@ -0,0 +1,265 @@ +#pragma context server + +#include "monsters/wolf_base.as" + +namespace MS +{ + +class WolfIceAlpha : CGameScript +{ + int AM_ALPHA; + string ANIM_ATTACK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string ATTACK_TYPE; + float CHANCE_BURN; + int CHANCE_CLAW; + string CHARGE_ATTACK; + int CUSTOM_WOLF; + int CYCLES_STARTED; + string DID_BOOST; + int DMG_BITE; + int DMG_CLAW; + float DMG_STORM; + string DOING_HOWL; + int DOT_BURN; + float FREQ_COMBAT_HOWL; + float FREQ_LEAP; + int LEAP_DELAY; + string MONSTER_MODEL; + int NEXT_HOWL; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + string SOUND_BURN; + float STORM_DUR; + int STORM_RAD; + + WolfIceAlpha() + { + if ((StringToLower(GetMapName())).findFirst("lodagond") == 0) + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 8000; + } + else + { + NPC_GIVE_EXP = 2000; + } + NPC_BOSS_REGEN_RATE = 0.05; + NPC_BOSS_RESTORATION = 0.25; + CUSTOM_WOLF = 1; + AM_ALPHA = 1; + DOT_BURN = 70; + DMG_BITE = RandomInt(50, 200); + DMG_CLAW = RandomInt(50, 75); + FREQ_COMBAT_HOWL = 30.0; + CHANCE_BURN = 0.3; + SOUND_BURN = "magic/frost_reverse.wav"; + CHANCE_CLAW = 5; + MONSTER_MODEL = "monsters/wolf_huge.mdl"; + FREQ_LEAP = 15.0; + ATTACK_RANGE = 92; + ATTACK_HITRANGE = 128; + ATTACK_MOVERANGE = 72; + DMG_STORM = 20.0; + STORM_DUR = 20.0; + STORM_RAD = 800; + } + + void game_precache() + { + Precache("monsters/summon/uber_blizzard"); + } + + void OnSpawn() override + { + SetName("Winter Alpha Wolf"); + if ((StringToLower(GetMapName())).findFirst("aleyesu") >= 0) + { + SetRace("demon"); + } + else + { + SetRace("rogue"); + } + SetModel(MONSTER_MODEL); + SetWidth(48); + SetHeight(72); + SetRoam(true); + SetHealth(9000); + SetDamageResistance("fire", 1.25); + SetDamageResistance("cold", 0.0); + SetModelBody(0, 1); + SetHearingSensitivity(8); + NEXT_HOWL = 0; + SetGlobalVar("G_ALPHA", GetEntityIndex(GetOwner())); + } + + void do_combat_howl() + { + if ((CYCLED_UP)) + { + DOING_HOWL = 1; + PlayAnim("critical", ANIM_HOWL); + // PlayRandomSound from: SOUND_HOWL1, SOUND_HOWL2 + array sounds = {SOUND_HOWL1, SOUND_HOWL2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ice_storm(); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 512, 0, 1.0, 0.0); + ApplyEffect(GetOwner(), "effects/iceshield", 20, GetEntityIndex(GetOwner()), 0.4); + } + ScheduleDelayedEvent(0.1, "end_combat_howl"); + } + + void end_combat_howl() + { + EmitSound(GetOwner(), 0, "magic/cast.wav", 10); + DOING_HOWL = 0; + FREQ_COMBAT_HOWL("do_combat_howl"); + } + + void game_dodamage() + { + if ((param1)) + { + if (!(DOING_HOWL)) + { + } + if (!(CHARGE_ATTACK)) + { + } + if (RandomInt(1, 100) < CHANCE_BURN) + { + } + if (GetRelationship(param2) == "enemy") + { + } + ApplyEffect(param2, "effects/dot_cold", 10, GetEntityIndex(GetOwner()), DOT_BURN); + EmitSound(GetOwner(), 0, SOUND_BURN, 10); + Effect("glow", GetOwner(), Vector3(0, 75, 255), 128, 1, 1); + } + if (!(DOING_HOWL)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_cold_freeze", 5, 1, 1); + DOING_HOWL = 0; + } + + void cycle_up() + { + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + FREQ_COMBAT_HOWL("do_combat_howl"); + } + + void bite1() + { + ATTACK_TYPE = "bite"; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_BITE, ATTACK_HITCHANCE, "slash"); + atk_sound(); + if (!(RandomInt(1, 100) < CHANCE_CLAW)) return; + if ((LEAP_DELAY)) return; + LEAP_DELAY = 1; + FREQ_LEAP("reset_leap_delay"); + ANIM_ATTACK = ANIM_CLAW; + } + + void reset_leap_delay() + { + LEAP_DELAY = 0; + } + + void npcatk_attack() + { + if (ANIM_ATTACK == "attack2") + { + if (!(DID_BOOST)) + { + } + DID_BOOST = 1; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 50)); + CHARGE_ATTACK = 1; + ScheduleDelayedEvent(1.0, "reset_charge_attack"); + charge_loop(); + } + if (ANIM_ATTACK != "attack2") + { + DID_BOOST = 0; + } + } + + void reset_charge_attack() + { + CHARGE_ATTACK = 0; + } + + void charge_loop() + { + if (!(CHARGE_ATTACK)) return; + ScheduleDelayedEvent(0.1, "charge_loop"); + XDoDamage(/* TODO: $relpos */ $relpos(0, 32, 0), 96, 20, 1.0, GetOwner(), GetOwner(), "none", "target", "dmgevent:push"); + } + + void push_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 1000, 0)); + } + + void ice_storm() + { + string BLIZ_LOC = /* TODO: $relpos */ $relpos(0, 0, 0); + string SUMMON_POINT1 = FindEntityByName("summon_point1"); + if (((SUMMON_POINT1 !is null))) + { + string BLIZ_LOC = GetEntityOrigin(SUMMON_POINT1); + } + SpawnNPC("monsters/summon/uber_blizzard", BLIZ_LOC, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), DMG_STORM, STORM_DUR, STORM_RAD, 0.3 + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + fade_blue(); + } + } + + void fade_blue() + { + string CHECK_ENT = GetToken(PLAYER_LIST, i, ";"); + if (!(GetEntityRange(CHECK_ENT) < STORM_RAD)) return; + Effect("screenfade", CHECK_ENT, 5, 0, Vector3(0, 0, 192), 128, "fadein"); + } + + void npcatk_set_skill() + { + string L_MAP_NAME = StringToLower(GetMapName()); + if ((NPC_IS_BOSS)) + { + NPC_GIVE_EXP = 4000; + } + if (!(NPC_IS_BOSS)) + { + NPC_GIVE_EXP = 1000; + } + if ((L_MAP_NAME).findFirst("lodagond") >= 0) + { + NPC_GIVE_EXP *= 1.75; + } + if ((L_MAP_NAME).findFirst("old_helena") >= 0) + { + NPC_GIVE_EXP *= 0.5; + } + if ((NPC_EXP_MULTI)) + { + NPC_GIVE_EXP *= NPC_EXP_MULTI; + } + if (NPC_GIVE_EXP != 0) + { + SetSkillLevel(NPC_GIVE_EXP); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/wolf_shadow.as b/scripts/angelscript/monsters/wolf_shadow.as new file mode 100644 index 00000000..291f2345 --- /dev/null +++ b/scripts/angelscript/monsters/wolf_shadow.as @@ -0,0 +1,125 @@ +#pragma context server + +#include "monsters/wolf_base.as" + +namespace MS +{ + +class WolfShadow : CGameScript +{ + int AM_ALPHA; + int CHANCE_BURN; + float CONTAINER_DROP_CHANCE; + string CONTAINER_SCRIPT; + int CUSTOM_WOLF; + int CYCLES_STARTED; + float DMG_BITE; + float DMG_CLAW; + int DOING_HOWL; + int DOT_BURN; + int DROPS_CONTAINER; + float FREQ_COMBAT_HOWL; + int IS_UNHOLY; + int NEXT_HOWL; + int NPC_BASE_EXP; + int NPC_GIVE_EXP; + string NPC_PET_SCRIPT; + string NPC_PET_TYPE; + string SOUND_BURN; + + WolfShadow() + { + NPC_PET_TYPE = "wolf_shadow"; + NPC_PET_SCRIPT = "monsters/companion/pet_wolf_shadow"; + NPC_BASE_EXP = 300; + IS_UNHOLY = 1; + CUSTOM_WOLF = 1; + AM_ALPHA = 1; + DOT_BURN = 40; + DMG_BITE = Random(20, 50); + DMG_CLAW = Random(10, 30); + FREQ_COMBAT_HOWL = Random(15, 20); + CHANCE_BURN = 30; + SOUND_BURN = "ambience/steamburst1.wav"; + NPC_GIVE_EXP = 150; + } + + void OnSpawn() override + { + SetName("Shadow Wolf"); + SetRace("demon"); + SetModel(MONSTER_MODEL); + SetWidth(36); + SetHeight(48); + SetRoam(true); + SetHealth(900); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetDamageResistance("holy", 1.0); + NPC_GIVE_EXP = 30; + SetModelBody(0, 3); + SetHearingSensitivity(8); + NEXT_HOWL = 0; + SetGlobalVar("G_ALPHA", GetEntityIndex(GetOwner())); + } + + void do_combat_howl() + { + if ((I_R_FROZEN)) return; + DOING_HOWL = 1; + PlayAnim("critical", ANIM_HOWL); + // PlayRandomSound from: SOUND_HOWL1, SOUND_HOWL2 + array sounds = {SOUND_HOWL1, SOUND_HOWL2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(GetEntityOrigin(GetOwner()), 200, 0, 1.0, 0.0); + ScheduleDelayedEvent(0.1, "end_combat_howl"); + } + + void end_combat_howl() + { + DOING_HOWL = 0; + FREQ_COMBAT_HOWL("do_combat_howl"); + } + + void wolfatk_dodamage() + { + if ((param1)) + { + if (RandomInt(1, 100) < CHANCE_BURN) + { + } + if (GetRelationship(param2) == "enemy") + { + } + ApplyEffect(param2, "effects/dot_fire", 10, GetEntityIndex(GetOwner()), DOT_BURN); + EmitSound(GetOwner(), 0, SOUND_BURN, 10); + Effect("glow", GetOwner(), Vector3(255, 75, 0), 128, 1, 1); + } + } + + void game_dodamage() + { + if (!(DOING_HOWL)) return; + if (!(GetRelationship(param2) == "enemy")) return; + SendPlayerMessage(param2, "You hear a stunning howl!"); + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + DOING_HOWL = 0; + } + + void cycle_up() + { + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + FREQ_COMBAT_HOWL("do_combat_howl"); + } + + void sfor_extra_wolf() + { + DROPS_CONTAINER = 1; + CONTAINER_DROP_CHANCE = 1.0; + CONTAINER_SCRIPT = "chests/sfor_wolf"; + } + +} + +} diff --git a/scripts/angelscript/monsters/worm_abyssal.as b/scripts/angelscript/monsters/worm_abyssal.as new file mode 100644 index 00000000..2434c2c2 --- /dev/null +++ b/scripts/angelscript/monsters/worm_abyssal.as @@ -0,0 +1,961 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_struck.as" + +namespace MS +{ + +class WormAbyssal : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_BITE_CLOSE; + string ANIM_ATTACK_BITE_MED; + string ANIM_ATTACK_LONG; + string ANIM_ATTACK_MULTI; + string ANIM_ATTACK_SHORT; + string ANIM_ATTACK_STRONG; + string ANIM_BEAM; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_HIDE; + string ANIM_IDLE; + string ANIM_IDLE_UP; + string ANIM_LOWER; + string ANIM_RAWR; + string ANIM_RISE; + string ANIM_RUN; + string ANIM_WALK; + int AOE_BEAM; + int AOE_CLAW; + int AOE_STRONG; + int ATTACH_CLAW; + int ATTACH_EYE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BEAM_DEST; + int CL_IDX; + string CL_SCRIPT; + float CUR_HIDE_THRESH; + int CUR_RAWR; + int DMG_BITE; + int DMG_CLAW; + int DMG_MULTI; + int DMG_STRONG; + string DOING_IDLE_SOUND; + int DOT_DMG; + string DOT_EFFECT_SCRIPT; + float FREQ_CL_REFRESH; + float FREQ_EYEBEAM; + float FREQ_IDLE_SOUND; + float FREQ_TELEPORT; + string GIBBER_ACTIVE; + string GIBBER_COUNT; + string GIBBER_DELAY; + string GIBBER_DIR; + int HIDE_IN_PROGRESS; + int HIDE_MODE; + int IDLE_SOUNDS_ACTIVE; + int MAP_RMINES_KEEP_CLEAR; + string MY_HEAD; + string NEXT_CL_REFRESH; + string NEXT_EYEBEAM; + string NEXT_GIBBER; + string NEXT_IDLE_SOUND; + string NEXT_MULTI_SOUND; + string NEXT_TELEPORT; + string NEXT_UNHIDE; + string NEXT_WORM_CALM_HIDE; + int NO_STUCK_CHECKS; + int NPC_FLINCH_DISABLE; + string NPC_FLINCH_DISABLE_ONCE; + int NPC_GIVE_EXP; + string NPC_HBAR_ADJ; + int NPC_IS_BOSS; + int NPC_IS_TURRET; + string NPC_MATERIAL_TYPE; + int NPC_MUST_SEE_TARGET; + int NPC_NO_ATTACK; + int NPC_NO_VADJ; + int NPC_PITCH_FLINCH; + int NPC_PITCH_PAIN; + int NPC_RANGED; + string NPC_RANGE_TYPE; + int NPC_STRUCK_CHANNEL; + string NPC_STRUCK_SOUND_EVENT; + int NPC_USE_FLINCH; + int NPC_USE_PAIN; + string REPEL_POINT; + string REPEL_TARGS; + string SOUND_BEAM_CHARGE; + string SOUND_BEAM_FIRE; + string SOUND_BITE; + string SOUND_DEATH; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_FLINCH3; + string SOUND_GIBBER1; + string SOUND_GIBBER2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_IDLE5; + string SOUND_MULTI; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_RAWR1; + string SOUND_RAWR2; + string SOUND_RAWR3; + string WORM_REPEL; + int WORM_TELE_IDX; + string WORM_UNHIDING; + + WormAbyssal() + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 6000; + ANIM_IDLE = "hide_idle"; + ANIM_WALK = "idle"; + ANIM_RUN = "idle2"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "attacklow"; + NO_STUCK_CHECKS = 1; + NPC_HBAR_ADJ = Vector3(0, 128, 200); + ATTACK_RANGE = 628; + ATTACK_HITRANGE = 628; + ATTACK_MOVERANGE = 9999; + NPC_MUST_SEE_TARGET = 0; + NPC_RANGED = 1; + NPC_IS_TURRET = 1; + NPC_RANGE_TYPE = "range2D"; + NPC_NO_VADJ = 1; + SOUND_DEATH = "monsters/aby_worm/death.wav"; + ANIM_FLINCH = "flinch1"; + ANIM_RISE = "rise"; + ANIM_LOWER = "lower"; + ANIM_IDLE_UP = "idle2"; + ANIM_FLINCH1 = "flinch1"; + ANIM_FLINCH2 = "flinch2"; + ANIM_RAWR = "scream"; + ANIM_HIDE = "hide_idle"; + ANIM_ATTACK_LONG = "attacklow"; + ANIM_ATTACK_SHORT = "attack"; + ANIM_ATTACK_STRONG = "attack_strong_close"; + ANIM_ATTACK_BITE_MED = "attack_bite_med"; + ANIM_ATTACK_MULTI = "attack_multi_close"; + ANIM_ATTACK_BITE_CLOSE = "attack_bite_close"; + ANIM_BEAM = "eyeblast"; + ATTACH_EYE = 0; + ATTACH_CLAW = 2; + HIDE_MODE = 1; + FREQ_TELEPORT = 60.0; + FREQ_EYEBEAM = Random(30.0, 60.0); + CUR_HIDE_THRESH = 0.75; + array ARRAY_WORM_TELES; + ARRAY_WORM_TELES.insertLast("worm_telepoint1"); + ARRAY_WORM_TELES.insertLast("worm_telepoint2"); + ARRAY_WORM_TELES.insertLast("worm_telepoint3"); + ARRAY_WORM_TELES.insertLast("worm_telepoint4"); + WORM_TELE_IDX = 1; + DMG_CLAW = 100; + DMG_STRONG = 200; + DMG_BITE = 300; + DMG_MULTI = 250; + DOT_DMG = 30; + DOT_EFFECT_SCRIPT = "effects/dot_dark"; + AOE_CLAW = 200; + AOE_STRONG = 128; + AOE_BEAM = 256; + CL_IDX = -1; + CL_SCRIPT = "monsters/worm_abyssal_cl"; + FREQ_CL_REFRESH = 30.0; + SOUND_RAWR1 = "gonarch/gon_alert1.wav"; + SOUND_RAWR2 = "gonarch/gon_alert2.wav"; + SOUND_RAWR3 = "gonarch/gon_alert3.wav"; + CUR_RAWR = 0; + SOUND_MULTI = "monsters/aby_worm/multi_attack.wav"; + SOUND_BITE = "monsters/aby_worm/bite.wav"; + SOUND_BEAM_CHARGE = "monsters/aby_worm/beam_charge.wav"; + SOUND_BEAM_FIRE = "monsters/aby_worm/beam_fire.wav"; + SOUND_GIBBER1 = "monsters/aby_worm/gibber1.wav"; + SOUND_GIBBER2 = "monsters/aby_worm/gibber2.wav"; + SOUND_IDLE1 = "bullchicken/bc_idle1.wav"; + SOUND_IDLE2 = "bullchicken/bc_idle2.wav"; + SOUND_IDLE3 = "bullchicken/bc_idle3.wav"; + SOUND_IDLE4 = "bullchicken/bc_idle4.wav"; + SOUND_IDLE5 = "bullchicken/bc_idle5.wav"; + FREQ_IDLE_SOUND = Random(5.0, 10.0); + NPC_MATERIAL_TYPE = "carapace"; + NPC_USE_PAIN = 1; + NPC_USE_FLINCH = 1; + SOUND_PAIN1 = "gonarch/gon_pain2.wav"; + SOUND_PAIN2 = "gonarch/gon_pain4.wav"; + SOUND_PAIN3 = "gonarch/gon_pain5.wav"; + SOUND_FLINCH1 = "gonarch/gon_childdie1.wav"; + SOUND_FLINCH2 = "gonarch/gon_childdie2.wav"; + SOUND_FLINCH3 = "gonarch/gon_childdie3.wav"; + NPC_PITCH_PAIN = RandomInt(75, 90); + NPC_PITCH_FLINCH = RandomInt(75, 90); + NPC_STRUCK_CHANNEL = 0; + NPC_STRUCK_SOUND_EVENT = "do_playsound"; + } + + void game_precache() + { + Precache("monsters/abyssal_worm_hitbox.mdl"); + Precache("monsters/zubat_sphere.mdl"); + Precache("3dmflagry.spr"); + Precache(CL_SCRIPT); + } + + void OnSpawn() override + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + worm_spawn(); + } + + void worm_spawn() + { + SetName("Abyssal Worm"); + SetName("aby_worm"); + SetModel("monsters/abyssal_worm.mdl"); + SetWidth(128); + SetHeight(700); + SetSolid("trigger"); + SetRace("demon"); + SetHealth(8000); + SetDamageResistance("holy", 1.5); + SetHearingSensitivity(11); + npcatk_suspend_ai(); + SetInvincible(true); + } + + void OnPostSpawn() override + { + as_tele_stuck_check(); + SpawnNPC("monsters/worm_abyssal_head", GetEntityProperty(GetOwner(), "attachpos"), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + MY_HEAD = m_hLastCreated; + if (!(StringToLower(GetMapName()) == "undermines")) return; + MAP_RMINES_KEEP_CLEAR = 1; + } + + void dinner_bell() + { + NEXT_WORM_CALM_HIDE = GetGameTime(); + NEXT_WORM_CALM_HIDE += 15.0; + if ((HIDE_IN_PROGRESS)) return; + if ((HIDE_MODE)) + { + LogDebug("dinner_bell GetEntityName(param1) game.time vs. NEXT_UNHIDE"); + if (GetGameTime() > NEXT_UNHIDE) + { + } + NEXT_EYEBEAM = GetGameTime(); + NEXT_EYEBEAM += FREQ_EYEBEAM; + HIDE_MODE = 0; + WORM_UNHIDING = 1; + PlayAnim("critical", ANIM_RISE); + if ((FINAL_TELEPORT)) + { + ScheduleDelayedEvent(0.5, "brk_wall"); + } + } + else + { + worm_find_target(); + } + } + + void brk_wall() + { + UseTrigger("brk_worm"); + } + + void frame_rise_done() + { + SetInvincible(false); + NPC_NO_ATTACK = 0; + refresh_cl(); + ANIM_IDLE = ANIM_IDLE_UP; + SetIdleAnim(ANIM_IDLE_UP); + SetMoveAnim(ANIM_IDLE_UP); + ANIM_RUN = ANIM_IDLE_UP; + ANIM_WALK = ANIM_IDLE_UP; + ANIM_IDLE = ANIM_IDLE_UP; + npcatk_resume_ai(); + PlayAnim("critical", ANIM_RAWR); + worm_find_target(); + NEXT_TELEPORT = GetGameTime(); + NEXT_TELEPORT += FREQ_TELEPORT; + IDLE_SOUNDS_ACTIVE = 1; + NEXT_IDLE_SOUND = GetGameTime(); + NEXT_IDLE_SOUND += FREQ_IDLE_SOUND; + WORM_UNHIDING = 0; + Effect("screenshake", GetEntityOrigin(MY_HEAD), 400, 10, 3, 1024); + CUR_RAWR += 1; + if (CUR_RAWR == 1) + { + do_playsound(0, 10, SOUND_RAWR1, 0.8, RandomInt(30, 60)); + } + if (CUR_RAWR == 2) + { + do_playsound(0, 10, SOUND_RAWR2, 0.8, RandomInt(30, 60)); + } + if (CUR_RAWR == 3) + { + do_playsound(0, 10, SOUND_RAWR3, 0.8, RandomInt(30, 60)); + CUR_RAWR = 0; + } + } + + void worm_find_target() + { + string L_TARGS = FindEntitiesInSphere("enemy", 1024); + if (!(L_TARGS != "none")) return; + string L_TARGS = /* TODO: $sort_entlist */ $sort_entlist(L_TARGS, "range"); + npcatk_settarget(GetToken(L_TARGS, 0, ";")); + } + + void game_applyeffect() + { + LogDebug("game_applyeffect PARAM3"); + if ((HIDE_MODE)) + { + ReturnData("abort"); + } + if ((param3).findFirst("freeze_solid") >= 0) + { + if ((IsValidPlayer(param5))) + { + SendColoredMessage(param5, GetEntityProperty(GetOwner(), "name.full") + " is too large to be encased in ice."); + } + ReturnData("abort"); + } + } + + void OnDamage(int damage) override + { + if (!(IsEntityAlive(GetOwner()))) return; + if ((HIDE_MODE)) + { + SetDamage("hit"); + SetDamage("dmg"); + ReturnData(0); + } + if (m_hAttackTarget == "unset") + { + npcatk_settarget(GetEntityIndex(param1)); + } + else + { + if (!(IsValidPlayer(m_hAttackTarget))) + { + npcatk_settarget(GetEntityIndex(param1)); + } + if (GetEntityRange(m_hAttackTarget) > GetEntityRange(param1)) + { + npcatk_settarget(GetEntityIndex(param1)); + } + } + if ((param3).findFirst("dark") >= 0) + { + SetDamage("dmg"); + ReturnData(0); + string L_HEAL_AMT = param2; + L_HEAL_AMT *= 2; + HealEntity(GetOwner(), L_HEAL_AMT); + if (GetGameTime() > NEXT_GLOW) + { + NEXT_GLOW = GetGameTime(); + NEXT_GLOW += 5.0; + Effect("glow", GetOwner(), Vector3(0, 255, 0), 30, 5.0, 5.0); + } + return; + } + if ((FINAL_TELEPORT)) return; + string L_NEXT_HIDE_THRESH = GetEntityMaxHealth(GetOwner()); + L_NEXT_HIDE_THRESH *= CUR_HIDE_THRESH; + string L_CUR_HP = GetEntityHealth(GetOwner()); + L_CUR_HP -= param2; + if (L_CUR_HP <= L_NEXT_HIDE_THRESH) + { + string L_NEW_HP = L_NEXT_HIDE_THRESH; + L_NEW_HP -= 1; + SetHealth(L_NEW_HP); + SetDamage(0); + ReturnData(0); + LogDebug("game_damaged body cur L_CUR_HP hide@ L_NEXT_HIDE_THRESH thrsh CUR_HIDE_THRESH newhp L_NEW_HP"); + if (CUR_HIDE_THRESH == 0.75) + { + if ((DID_HIDE_STAGE1)) + { + } + return; + } + if (CUR_HIDE_THRESH == 0.5) + { + if ((DID_HIDE_STAGE2)) + { + } + return; + } + if (CUR_HIDE_THRESH == 0.25) + { + if ((DID_HIDE_STAGE3)) + { + } + return; + } + if (CUR_HIDE_THRESH == 0.75) + { + DID_HIDE_STAGE1 = 1; + } + else + { + if (CUR_HIDE_THRESH == 0.50) + { + DID_HIDE_STAGE2 = 1; + } + else + { + if (CUR_HIDE_THRESH == 0.25) + { + DID_HIDE_STAGE3 = 1; + } + } + } + CUR_HIDE_THRESH -= 0.25; + if (CUR_HIDE_THRESH <= 0) + { + FINAL_TELEPORT = 1; + } + do_teleport(); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetGameTime() > NEXT_CL_REFRESH) + { + refresh_cl(); + } + if ((IDLE_SOUNDS_ACTIVE)) + { + if (GetGameTime() > NEXT_IDLE_SOUND) + { + } + NEXT_IDLE_SOUND = GetGameTime(); + DOING_IDLE_SOUND = 1; + NEXT_IDLE_SOUND += FREQ_IDLE_SOUND; + int L_RND_IDLE = RandomInt(1, 5); + if (L_RND_IDLE == 1) + { + do_playsound(0, 10, SOUND_IDLE1, 0.8, Random(50, 70)); + } + else + { + if (L_RND_IDLE == 2) + { + do_playsound(0, 10, SOUND_IDLE2, 0.8, Random(50, 70)); + } + else + { + if (L_RND_IDLE == 3) + { + do_playsound(0, 10, SOUND_IDLE3, 0.8, Random(50, 70)); + } + else + { + if (L_RND_IDLE == 4) + { + do_playsound(0, 10, SOUND_IDLE4, 0.8, Random(50, 70)); + } + else + { + if (L_RND_IDLE == 5) + { + do_playsound(0, 10, SOUND_IDLE5, 0.8, Random(50, 70)); + } + } + } + } + } + } + if (!(FINAL_TELEPORT)) + { + if (!(HIDE_MODE)) + { + } + if (GetGameTime() > NEXT_WORM_CALM_HIDE) + { + } + NEXT_TELEPORT = GetGameTime(); + NEXT_TELEPORT += FREQ_TELEPORT; + do_teleport(); + } + if ((WORM_REPEL)) + { + REPEL_TARGS = FindEntitiesInSphere("any", 128); + if (REPEL_TARGS != "none") + { + } + for (int i = 0; i < GetTokenCount(REPEL_TARGS, ";"); i++) + { + repel_targets(); + } + } + if (GetGameTime() > NEXT_GIBBER) + { + NEXT_GIBBER = GetGameTime(); + NEXT_GIBBER += Random(10.0, 20.0); + GIBBER_ACTIVE = 1; + GIBBER_COUNT = 0; + GIBBER_DELAY = 0.01; + if (RandomInt(1, 2) == 1) + { + do_playsound(2, 10, SOUND_GIBBER1, 0.8, RandomInt(75, 125)); + } + else + { + do_playsound(2, 10, SOUND_GIBBER2, 0.8, RandomInt(75, 125)); + } + do_gibber(); + ScheduleDelayedEvent(5.0, "end_gibber"); + } + if ((SUSPEND_AI)) return; + if (!(FINAL_TELEPORT)) + { + if (GetGameTime() > NEXT_TELEPORT) + { + } + NEXT_TELEPORT = GetGameTime(); + NEXT_TELEPORT += FREQ_TELEPORT; + do_teleport(); + } + if (!(m_hAttackTarget != "unset")) return; + SetMoveDest(m_hAttackTarget); + if (GetEntityProperty(m_hAttackTarget, "range2d") > ATTACK_RANGE) + { + NEXT_EYEBEAM -= 1.0; + } + if (GetGameTime() > NEXT_EYEBEAM) + { + if (GetEntityProperty(m_hAttackTarget, "range2d") < 1024) + { + } + NEXT_TELEPORT = GetGameTime(); + NEXT_TELEPORT += FREQ_TELEPORT; + do_eyebeam(); + } + } + + void refresh_cl() + { + if (CL_IDX > -1) + { + ClientEvent("update", "all", CL_IDX, "end_fx"); + } + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner()), FREQ_CL_REFRESH); + CL_IDX = "game.script.last_sent_id"; + NEXT_CL_REFRESH = GetGameTime(); + NEXT_CL_REFRESH += FREQ_CL_REFRESH; + if (!(MAP_RMINES_KEEP_CLEAR)) return; + CallExternal("all", "ext_rmines_clear"); + } + + void OnFlinch() + { + if ((HIDE_MODE)) + { + NPC_FLINCH_DISABLE_ONCE = 1; + return; + } + if ((SUSPEND_AI)) + { + npcatk_resume_ai(); + } + if (RandomInt(1, 2) == 1) + { + ANIM_FLINCH = ANIM_FLINCH1; + } + else + { + ANIM_FLINCH = ANIM_FLINCH2; + } + } + + void do_eyebeam() + { + NEXT_EYEBEAM = GetGameTime(); + NEXT_EYEBEAM += FREQ_EYEBEAM; + BEAM_DEST = GetEntityOrigin(m_hAttackTarget); + if (!(SUSPEND_AI)) + { + npcatk_suspend_ai(); + } + PlayAnim("critical", ANIM_BEAM); + refresh_cl(); + } + + void frame_beam_charge() + { + do_playsound(0, 10, SOUND_BEAM_CHARGE); + ClientEvent("update", "all", CL_IDX, "beam_charge", BEAM_DEST); + } + + void frame_beam_fire() + { + npcatk_resume_ai(); + do_playsound(0, 10, SOUND_BEAM_FIRE); + ClientEvent("update", "all", CL_IDX, "beam_fire", BEAM_DEST); + XDoDamage(BEAM_DEST, AOE_BEAM, DMG_BEAM, 0.01, GetOwner(), GetOwner(), "none", "dark_effect", "dmgevent:beam"); + } + + void beam_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, DOT_EFFECT_SCRIPT, 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + ApplyEffect(param2, "effects/effect_stun", 8.0, 0, 1, GetEntityIndex(GetOwner())); + } + + void npc_selectattack() + { + string L_RANGE = GetEntityProperty(m_hAttackTarget, "range2d"); + string L_POSSIBLE_ATTACKS = ""; + if (L_RANGE > 500) + { + if (L_POSSIBLE_ATTACKS.length() > 0) L_POSSIBLE_ATTACKS += ";"; + L_POSSIBLE_ATTACKS += ANIM_ATTACK_LONG; + } + if (L_RANGE < 500) + { + if (L_RANGE > 350) + { + if (L_POSSIBLE_ATTACKS.length() > 0) L_POSSIBLE_ATTACKS += ";"; + L_POSSIBLE_ATTACKS += ANIM_ATTACK_SHORT; + } + } + if (L_RANGE < 425) + { + if (L_RANGE > 230) + { + if (L_POSSIBLE_ATTACKS.length() > 0) L_POSSIBLE_ATTACKS += ";"; + L_POSSIBLE_ATTACKS += ANIM_ATTACK_STRONG; + } + if (L_RANGE > 250) + { + if (L_RANGE < 325) + { + } + if (L_POSSIBLE_ATTACKS.length() > 0) L_POSSIBLE_ATTACKS += ";"; + L_POSSIBLE_ATTACKS += ANIM_ATTACK_BITE_MED; + } + if (L_RANGE < 280) + { + if (L_POSSIBLE_ATTACKS.length() > 0) L_POSSIBLE_ATTACKS += ";"; + L_POSSIBLE_ATTACKS += ANIM_ATTACK_MULTI; + } + if (L_RANGE < 250) + { + if (L_POSSIBLE_ATTACKS.length() > 0) L_POSSIBLE_ATTACKS += ";"; + L_POSSIBLE_ATTACKS += ANIM_ATTACK_BITE_CLOSE; + } + } + string L_NPATKS = GetTokenCount(L_POSSIBLE_ATTACKS, ";"); + L_NPATKS -= 1; + int L_RND_ATTACK = RandomInt(0, L_NPATKS); + ANIM_ATTACK = GetToken(L_POSSIBLE_ATTACKS, L_RND_ATTACK, ";"); + } + + void repel_targets() + { + string CUR_TARG = GetToken(REPEL_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 500, 0))); + } + + void frame_claw() + { + npcatk_suspend_attack(2.0); + string L_ATTACK_POS = GetEntityProperty(GetOwner(), "attachpos"); + string L_MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + L_ATTACK_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_MY_YAW, 0), Vector3(0, 64, 0)); + L_ATTACK_POS = "z"; + L_ATTACK_POS += "z"; + LogDebug("frame_claw L_ATTACK_POS"); + ClientEvent("update", "all", CL_IDX, "dark_burst", L_ATTACK_POS, AOE_CLAW); + XDoDamage(L_ATTACK_POS, AOE_CLAW, DMG_CLAW, 0.01, GetOwner(), GetOwner(), "none", "dark", "dmgevent:burst"); + } + + void frame_strong() + { + npcatk_suspend_attack(2.0); + string L_ATTACK_POS = GetEntityProperty(GetOwner(), "attachpos"); + string L_MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + L_ATTACK_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_MY_YAW, 0), Vector3(0, 64, 0)); + L_ATTACK_POS = "z"; + L_ATTACK_POS += "z"; + LogDebug("frame_strong L_ATTACK_POS"); + ClientEvent("update", "all", CL_IDX, "dark_burst", L_ATTACK_POS, AOE_STRONG); + XDoDamage(L_ATTACK_POS, AOE_STRONG, DMG_STRONG, 0.01, GetOwner(), GetOwner(), "none", "dark", "dmgevent:burst"); + } + + void burst_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, DOT_EFFECT_SCRIPT, 5.0, GetEntityIndex(GetOwner()), DOT_DMG); + } + + void frame_maw0() + { + set_maw(0); + } + + void frame_maw1() + { + set_maw(1); + } + + void frame_maw2() + { + set_maw(2); + } + + void frame_bite() + { + set_maw(3); + do_playsound(0, 10, SOUND_BITE); + XDoDamage(GetEntityProperty(GetOwner(), "attachpos"), GetEntityOrigin(m_hAttackTarget), DMG_BITE, 90, GetOwner(), GetOwner(), "none", "slash"); + } + + void frame_multi() + { + XDoDamage(GetEntityProperty(GetOwner(), "attachpos"), GetEntityOrigin(m_hAttackTarget), DMG_MULTI, 80, GetOwner(), GetOwner(), "none", "pierce"); + if (!(GetGameTime() > NEXT_MULTI_SOUND)) return; + NEXT_MULTI_SOUND = GetGameTime(); + NEXT_MULTI_SOUND += 10.0; + do_playsound(1, 10, SOUND_MULTI, 0.8, RandomInt(90, 110)); + } + + void frame_gibber_start() + { + GIBBER_ACTIVE = 1; + GIBBER_COUNT = 0; + GIBBER_DELAY = 0.01; + NEXT_GIBBER = GetGameTime(); + NEXT_GIBBER += Random(10.0, 15.0); + do_gibber(); + } + + void frame_gibber_end() + { + SetProp(GetOwner(), "skin", 0); + GIBBER_ACTIVE = 0; + } + + void set_maw() + { + GIBBER_ACTIVE = 0; + NEXT_GIBBER = GetGameTime(); + NEXT_GIBBER += Random(5.0, 10.0); + SetProp(GetOwner(), "skin", param1); + } + + void do_gibber() + { + if (!(GIBBER_ACTIVE)) return; + if (GIBBER_COUNT == 0) + { + GIBBER_DIR = 1; + } + if (GIBBER_COUNT == 3) + { + GIBBER_DIR = -1; + } + GIBBER_COUNT += GIBBER_DIR; + SetProp(GetOwner(), "skin", GIBBER_COUNT); + GIBBER_DELAY("do_gibber"); + GIBBER_DELAY += 0.01; + } + + void end_gibber() + { + SetProp(GetOwner(), "skin", 0); + GIBBER_ACTIVE = 0; + } + + void check_porters() + { + string L_PORTER = FindEntityByName("telepoint_abyssal4"); + LogDebug("check_porters L_PORTER GetEntityOrigin(L_PORTER) GetEntityAngles(L_PORTER)"); + string L_START = GetEntityOrigin(GetOwner()); + string L_END = L_START; + L_END += "z"; + Effect("beam", "point", "lgtning.spr", 30, L_START, L_END, Vector3(255, 0, 255), 200, 0, 120.0); + string L_OFS = (GetEntityWidth(GetOwner()) / 2); + string L_NEG_OFS = /* TODO: $neg */ $neg((GetEntityWidth(GetOwner()) / 2)); + LogDebug("check_porters ofs Vector3(L_NEG_OFS, L_NEG_OFS, 0) - Vector3(L_OFS, L_OFS, 0)"); + string L_START = GetEntityOrigin(GetOwner()); + L_START += Vector3(L_OFS, L_OFS, 0); + string L_END = L_START; + L_END += "z"; + Effect("beam", "point", "lgtning.spr", 5, L_START, L_END, Vector3(255, 255, 0), 200, 0, 120.0); + string L_START = GetEntityOrigin(GetOwner()); + L_START += Vector3(L_NEG_OFS, L_NEG_OFS, 0); + string L_END = L_START; + L_END += "z"; + Effect("beam", "point", "lgtning.spr", 5, L_START, L_END, Vector3(255, 255, 0), 200, 0, 120.0); + string L_START = GetEntityOrigin(GetOwner()); + L_START += Vector3(L_NEG_OFS, L_OFS, 0); + string L_END = L_START; + L_END += "z"; + Effect("beam", "point", "lgtning.spr", 5, L_START, L_END, Vector3(255, 255, 0), 200, 0, 120.0); + string L_START = GetEntityOrigin(GetOwner()); + L_START += Vector3(L_OFS, L_NEG_OFS, 0); + string L_END = L_START; + L_END += "z"; + Effect("beam", "point", "lgtning.spr", 5, L_START, L_END, Vector3(255, 255, 0), 200, 0, 120.0); + } + + void do_teleport() + { + ClearFX(); + npcatk_suspend_ai(); + HIDE_MODE = 1; + HIDE_IN_PROGRESS = 1; + SetMoveAnim(ANIM_LOWER); + SetIdleAnim(ANIM_LOWER); + ANIM_RUN = ANIM_LOWER; + ANIM_WALK = ANIM_LOWER; + ANIM_IDLE = ANIM_LOWER; + SetInvincible(true); + NEXT_UNHIDE = GetGameTime(); + NEXT_UNHIDE += 5.0; + PlayAnim("critical", ANIM_LOWER); + NEXT_TELEPORT = GetGameTime(); + NEXT_TELEPORT += FREQ_TELEPORT; + int L_RND_SOUND = RandomInt(1, 3); + if (L_RND_SOUND == 1) + { + do_playsound(0, 10, SOUND_FLINCH1, 0.8, Random(40, 60)); + } + else + { + if (L_RND_SOUND == 2) + { + do_playsound(0, 10, SOUND_FLINCH2, 0.8, Random(40, 60)); + } + else + { + if (L_RND_SOUND == 3) + { + do_playsound(0, 10, SOUND_FLINCH3, 0.8, Random(40, 60)); + } + } + } + } + + void frame_lower_done() + { + HIDE_IN_PROGRESS = 0; + SetMoveAnim(ANIM_HIDE); + SetIdleAnim(ANIM_HIDE); + ANIM_RUN = ANIM_HIDE; + ANIM_WALK = ANIM_HIDE; + ANIM_IDLE = ANIM_HIDE; + NPC_NO_ATTACK = 1; + if (!(FINAL_TELEPORT)) + { + string L_TELE_NAME = ARRAY_WORM_TELES[int(WORM_TELE_IDX)]; + } + else + { + string L_TELE_NAME = "worm_telepoint_final"; + UseTrigger("light_worm"); + string L_REPEL_POINT = FindEntityByName("worm_repel_point"); + REPEL_POINT = GetEntityOrigin(L_REPEL_POINT); + WORM_REPEL = 1; + } + string L_TELE_ID = FindEntityByName(L_TELE_NAME); + SetEntityOrigin(GetOwner(), GetEntityOrigin(L_TELE_ID)); + string L_TELE_YAW = GetEntityProperty(L_TELE_ID, "angles.yaw"); + SetAngles("face"); + WORM_TELE_IDX += 1; + int L_NTELES = int(ARRAY_WORM_TELES.length()); + L_NTELES -= 1; + if (WORM_TELE_IDX > L_NTELES) + { + WORM_TELE_IDX = 0; + } + } + + void OnSuspendAI() + { + NPC_FLINCH_DISABLE = 1; + } + + void npcatk_resume_ai() + { + NPC_FLINCH_DISABLE = 0; + } + + void do_playsound() + { + if (!(DOING_IDLE_SOUND)) + { + string L_NEXT_IDLE = NEXT_IDLE_SOUND; + L_NEXT_IDLE -= GetGameTime(); + if (L_NEXT_IDLE < 3) + { + NEXT_IDLE_SOUND += Random(2.0, 4.0); + } + } + DOING_IDLE_SOUND = 0; + string L_PASS1 = param1; + string L_PASS2 = param2; + string L_PASS3 = param3; + if ("game.event.params" > 3) + { + string L_PASS4 = param4; + } + if ("game.event.params" > 4) + { + string L_PASS5 = param5; + } + if ("game.event.params" > 3) + { + CallExternal(MY_HEAD, "ext_playsound", L_PASS1, L_PASS2, L_PASS3, L_PASS4, L_PASS5); + } + else + { + CallExternal(MY_HEAD, "ext_playsound", L_PASS1, L_PASS2, L_PASS3); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(GAME_MASTER, "gm_suspend_mob_spawns", 0); + ClientEvent("update", "all", CL_IDX, "end_fx"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (!(G_LESSER_DEV_MODE)) return; + SetDamage("dmg"); + ReturnData(0.01); + } + +} + +} diff --git a/scripts/angelscript/monsters/worm_abyssal_cl.as b/scripts/angelscript/monsters/worm_abyssal_cl.as new file mode 100644 index 00000000..40b8d1f8 --- /dev/null +++ b/scripts/angelscript/monsters/worm_abyssal_cl.as @@ -0,0 +1,347 @@ +#pragma context client + +namespace MS +{ + +class WormAbyssalCl : CGameScript +{ + string ATTACH_EYE; + string BEAM_DEST; + float BEAM_FADE_COUNT; + int BEAM_LIGHT_ACTIVE; + string BEAM_LIGHT_ID; + float BEAM_SPRITE_GROW; + int BEAM_SPRITE_ON; + int BEAM_SPRITE_START_SHRINK; + int CYCLE_ANGLE; + float EYE_BEAM_BRIGHT; + int EYE_BEAM_ROT; + int FOLLOW_BEAMS_ON; + string FOLOW_BEAM_ID1; + string FOLOW_BEAM_ID2; + int FX_ACTIVE; + string FX_CENTER; + string FX_DURATION; + float FX_MAX_SCALE; + string FX_OWNER; + string FX_RADIUS; + string POS_BEAM_LIGHT; + int POS_BEAM_RAD; + string SOUND_BURST; + int SPHERE_ACTIVE; + string SPRITE_COLOR; + int SPRITE_FRAMERATE; + string SPRITE_NAME; + int SPRITE_NFRAMES; + int SPRITE_RENDERAMT; + string SPRITE_RENDERMODE; + float SPRITE_SCALE; + string TOKEN_BEAMS; + + WormAbyssalCl() + { + ATTACH_EYE = "attachment0"; + SPRITE_NAME = "fire1_fixed.spr"; + SPRITE_COLOR = Vector3(255, 0, 255); + SPRITE_RENDERAMT = 200; + SPRITE_RENDERMODE = "add"; + SPRITE_FRAMERATE = 30; + SPRITE_NFRAMES = 23; + SPRITE_SCALE = 2.0; + SOUND_BURST = "magic/boom.wav"; + SetCallback("render", "enable"); + } + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + FX_MAX_SCALE = 10.0; + FX_DURATION("remove_fx"); + } + + void dark_burst() + { + FX_CENTER = param1; + FX_RADIUS = param2; + string L_LIGHT_RAD = FX_RADIUS; + L_LIGHT_RAD *= 1.5; + ClientEffect("light", "new", FX_CENTER, L_LIGHT_RAD, SPRITE_COLOR, 1.0); + EmitSound3D(SOUND_BURST, 10, FX_CENTER); + CYCLE_ANGLE = 0; + for (int i = 0; i < 17; i++) + { + create_sprites(); + } + } + + void create_sprites() + { + string L_SPR_POS = FX_CENTER; + L_SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, 10, 0)); + ClientEffect("tempent", "sprite", SPRITE_NAME, L_SPR_POS, "setup_ring_sprite"); + CYCLE_ANGLE += 20; + } + + void setup_ring_sprite() + { + float L_FADE_DEL = 1.0; + int L_SPRITE_SPEED = 100; + if (FX_RADIUS > 128) + { + float L_FADE_DEL = 2.0; + int L_SPRITE_SPEED = 400; + } + ClientEffect("tempent", "set_current_prop", "death_delay", L_FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "renderamt", SPRITE_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "rendermode", SPRITE_RENDERMODE); + ClientEffect("tempent", "set_current_prop", "framerate", SPRITE_FRAMERATE); + ClientEffect("tempent", "set_current_prop", "frames", SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "scale", SPRITE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, L_SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void beam_charge() + { + POS_BEAM_LIGHT = param1; + POS_BEAM_RAD = 1; + BEAM_LIGHT_ACTIVE = 1; + ClientEffect("light", "new", POS_BEAM_LIGHT, POS_BEAM_RAD, Vector3(255, 128, 255), 3.0); + BEAM_LIGHT_ID = "game.script.last_light_id"; + ClientEffect("beam_update", "removeall"); + ClientEffect("beam_follow", FX_OWNER, 1, "lgtning.spr", 10.0, 30, Vector3(1, 0, 1), 0.75); + FOLOW_BEAM_ID1 = "game.script.last_beam_id"; + ClientEffect("beam_follow", FX_OWNER, 1, "lgtning.spr", 10.0, 5, Vector3(1, 0.75, 1), 0.75); + FOLOW_BEAM_ID2 = "game.script.last_beam_id"; + FOLLOW_BEAMS_ON = 1; + BEAM_SPRITE_ON = 1; + BEAM_SPRITE_GROW = 0.02; + ClientEffect("tempent", "sprite", "3dmflaora.spr", /* TODO: $getcl */ $getcl(FX_OWNER, ATTACH_EYE), "setup_beam_sprite", "update_beam_sprite"); + } + + void game_prerender() + { + if ((BEAM_LIGHT_ACTIVE)) + { + if (POS_BEAM_RAD < 384) + { + POS_BEAM_RAD += 10; + } + ClientEffect("light", BEAM_LIGHT_ID, POS_BEAM_LIGHT, POS_BEAM_RAD, Vector3(255, 128, 255), 5.0); + } + else + { + ClientEffect("light", BEAM_LIGHT_ID, Vector3(10000, 10000, 10000), POS_BEAM_RAD, Vector3(0, 0, 0), 0.1); + } + } + + void beam_fire() + { + BEAM_SPRITE_START_SHRINK = 1; + BEAM_SPRITE_GROW = -0.04; + BEAM_FADE_COUNT = 0.75; + fade_beams_loop(); + ScheduleDelayedEvent(2.0, "beam_light_off"); + BEAM_DEST = param1; + EYE_BEAM_ROT = 0; + TOKEN_BEAMS = ""; + for (int i = 0; i < 8; i++) + { + setup_eye_beams(); + } + EYE_BEAM_BRIGHT = 1.0; + ScheduleDelayedEvent(2.0, "eye_beam_fade_cycle"); + EmitSound3D("magic/sff_explsonic.wav", 10, BEAM_DEST); + SPHERE_ACTIVE = 1; + ClientEffect("tempent", "model", "monsters/zubat_sphere.mdl", BEAM_DEST, "setup_sphere", "update_sphere"); + ScheduleDelayedEvent(5.0, "end_sphere"); + ClientEffect("tempent", "sprite", "3dmflagry.spr", BEAM_DEST, "setup_beam_end_sprite"); + } + + void setup_eye_beams() + { + string L_BEAM_END = BEAM_DEST; + L_BEAM_END += /* TODO: $relpos */ $relpos(Vector3(EYE_BEAM_ROT, 0, 0), Vector3(0, 48, 0)); + ClientEffect("beam_end", FX_OWNER, 1, L_BEAM_END, "lgtning.spr", 5.0, 30, 0, 1.0, 100, 30, Vector3(1, 0, 1)); + if (TOKEN_BEAMS.length() > 0) TOKEN_BEAMS += ";"; + TOKEN_BEAMS += "game.script.last_beam_id"; + LogDebug("*** addbeam game.script.last_beam_id"); + ClientEffect("beam_end", FX_OWNER, 1, L_BEAM_END, "lgtning.spr", 5.0, 5, 0, 1.0, 100, 30, Vector3(1, 0.5, 1)); + if (TOKEN_BEAMS.length() > 0) TOKEN_BEAMS += ";"; + TOKEN_BEAMS += "game.script.last_beam_id"; + LogDebug("*** addbeam game.script.last_beam_id"); + EYE_BEAM_ROT += 45; + } + + void eye_beam_fade_cycle() + { + EYE_BEAM_BRIGHT -= 0.05; + if (EYE_BEAM_BRIGHT >= 0) + { + LogDebug("*** eye_beam_fade_cycle [ GetTokenCount(TOKEN_BEAMS, ";") ] TOKEN_BEAMS"); + for (int i = 0; i < GetTokenCount(TOKEN_BEAMS, ";"); i++) + { + eye_beam_fade_loop(); + } + ScheduleDelayedEvent(0.01, "eye_beam_fade_cycle"); + } + } + + void eye_beam_fade_loop() + { + string CUR_BEAM = GetToken(TOKEN_BEAMS, i, ";"); + LogDebug("*** fadebeam CUR_BEAM"); + ClientEffect("beam_update", CUR_BEAM, "brightness", EYE_BEAM_BRIGHT); + } + + void beam_light_off() + { + BEAM_LIGHT_ACTIVE = 0; + } + + void fade_beams_loop() + { + BEAM_FADE_COUNT -= 0.01; + if (BEAM_FADE_COUNT > 0) + { + ClientEffect("beam_update", FOLOW_BEAM_ID1, "brightness", BEAM_FADE_COUNT); + ClientEffect("beam_update", FOLOW_BEAM_ID2, "brightness", BEAM_FADE_COUNT); + ScheduleDelayedEvent(0.1, "fade_beams_loop"); + } + else + { + ClientEffect("beam_update", FOLOW_BEAM_ID1, "remove"); + ClientEffect("beam_update", FOLOW_BEAM_ID2, "remove"); + FOLLOW_BEAMS_ON = 0; + } + } + + void setup_beam_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 20); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.5); + ClientEffect("tempent", "set_current_prop", "iuser1", 200); + ClientEffect("tempent", "set_current_prop", "follow", FX_OWNER, 0); + } + + void setup_beam_end_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 8); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "scale", 6); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void update_beam_sprite() + { + if ((BEAM_SPRITE_ON)) + { + string L_CUR_SCALE = "game.tempent.fuser1"; + L_CUR_SCALE += BEAM_SPRITE_GROW; + if ((BEAM_SPRITE_START_SHRINK)) + { + BEAM_SPRITE_START_SHRINK = 0; + ClientEffect("tempent", "set_current_prop", "fade", "lifetime"); + } + if (L_CUR_SCALE <= 0) + { + BEAM_SPRITE_ON = 0; + } + else + { + ClientEffect("tempent", "set_current_prop", "scale", L_CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", L_CUR_SCALE); + } + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 1000, 1000)); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + ClientEffect("tempent", "set_current_prop", "death_delay", 0); + } + } + + void setup_sphere() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 4.0); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 999); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(64, 64, 255)); + ClientEffect("tempent", "set_current_prop", "color", Vector3(64, 64, 255)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.25); + } + + void update_sphere() + { + if ((SPHERE_ACTIVE)) + { + string CUR_SCALE = "game.tempent.fuser1"; + if (CUR_SCALE < FX_MAX_SCALE) + { + } + CUR_SCALE += 0.05; + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + } + else + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(20000, 20000, 2000)); + } + } + + void end_sphere() + { + SPHERE_ACTIVE = 0; + } + + void end_fx() + { + FX_ACTIVE = 0; + BEAM_LIGHT_ACTIVE = 0; + BEAM_SPRITE_ON = 0; + follow_beams_off(); + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void follow_beams_off() + { + if (!(FOLLOW_BEAMS_ON)) return; + ClientEffect("beam_update", "removeall"); + FOLLOW_BEAMS_ON = 0; + } + + void remove_fx() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/worm_abyssal_head.as b/scripts/angelscript/monsters/worm_abyssal_head.as new file mode 100644 index 00000000..12ed3250 --- /dev/null +++ b/scripts/angelscript/monsters/worm_abyssal_head.as @@ -0,0 +1,110 @@ +#pragma context server + +namespace MS +{ + +class WormAbyssalHead : CGameScript +{ + int IS_ACTIVE; + string MY_OWNER; + int NPC_NO_HEALTH_BAR; + + WormAbyssalHead() + { + NPC_NO_HEALTH_BAR = 1; + } + + void game_dynamically_created() + { + MY_OWNER = param1; + SetRace(GetEntityRace(MY_OWNER)); + IS_ACTIVE = 1; + snap_loop(); + } + + void OnSpawn() override + { + SetName("Abyssal Worm"); + SetModel("monsters/abyssal_worm_hitbox.mdl"); + SetWidth(128); + SetHeight(150); + SetFly(true); + SetGravity(0); + SetHealth(999999); + } + + void debug_model() + { + SetModelBody(0, 1); + } + + void snap_loop() + { + if (!(IS_ACTIVE)) return; + string L_POS = GetEntityProperty(MY_OWNER, "attachpos"); + L_POS += "z"; + SetEntityOrigin(GetOwner(), L_POS); + if ((G_DEVELOPER_MODE)) + { + string L_BOX_MIN = GetEntityProperty(GetOwner(), "absmin"); + string L_BOX_MAX = GetEntityProperty(GetOwner(), "absmax"); + string L_BOX_EDGE1A = L_BOX_MIN; + Vector3 L_BOX_EDGE1B = Vector3((L_BOX_MIN).x, (L_BOX_MIN).y, (L_BOX_MAX).z); + string L_BOX_EDGE2A = L_BOX_MIN; + Vector3 L_BOX_EDGE2B = Vector3((L_BOX_MAX).x, (L_BOX_MIN).y, (L_BOX_MIN).z); + string L_BOX_EDGE3A = L_BOX_MIN; + Vector3 L_BOX_EDGE3B = Vector3((L_BOX_MIN).x, (L_BOX_MAX).y, (L_BOX_MIN).z); + Effect("beam", "point", "lgtning.spr", 3, L_BOX_EDGE1A, L_BOX_EDGE1B, Vector3(255, 0, 255), 200, 0, 0.1); + Effect("beam", "point", "lgtning.spr", 3, L_BOX_EDGE2A, L_BOX_EDGE2B, Vector3(255, 0, 255), 200, 0, 0.1); + Effect("beam", "point", "lgtning.spr", 3, L_BOX_EDGE3A, L_BOX_EDGE3B, Vector3(255, 0, 255), 200, 0, 0.1); + } + if (!(IsEntityAlive(MY_OWNER))) + { + IS_ACTIVE = 0; + DeleteEntity(GetOwner()); + } + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.01, "snap_loop"); + } + + void OnDamage(int damage) override + { + if (!(GetRelationship(param1) == "enemy")) return; + Bleed(GetOwner(), "yellow", RandomInt(100, 10000)); + string L_HIT_CHANCE = param4; + if ((GetEntityProperty(param6, "itemname")).findFirst("proj") == 0) + { + float L_HIT_CHANCE = 1.0; + } + XDoDamage(MY_OWNER, "direct", param2, L_HIT_CHANCE, param1, param1, "none", param3); + SetDamage("dmg"); + SetDamage("hit"); + ReturnData(0); + } + + void game_applyeffect() + { + LogDebug("game_applyeffect got PARAM1 PARAM2 PARAM3 PARAM4 PARAM5 PARAM6 PARAM7 PARAM8 PARAM9"); + LogDebug("test game.event.params"); + string L_RETURN = "redirect"; + if (L_RETURN.length() > 0) L_RETURN += ";"; + L_RETURN += MY_OWNER; + ReturnData(L_RETURN); + } + + void ext_playsound() + { + LogDebug("ext_playsound [ game.event.params ] PARAM1 PARAM2 PARAM3 PARAM4 PARAM5"); + if ("game.event.params" < 4) + { + EmitSound(GetOwner(), param1, param3, param2); + } + else + { + EmitSound(GetOwner(), param1, param3, param2); + } + } + +} + +} diff --git a/scripts/angelscript/monsters/wraith.as b/scripts/angelscript/monsters/wraith.as new file mode 100644 index 00000000..66141d1c --- /dev/null +++ b/scripts/angelscript/monsters/wraith.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "monsters/wraith_summoned.as" + +namespace MS +{ + +class Wraith : CGameScript +{ + int I_AM_TURNABLE; + int NOT_SUMMONED; + + Wraith() + { + I_AM_TURNABLE = 1; + NOT_SUMMONED = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/wraith_cl.as b/scripts/angelscript/monsters/wraith_cl.as new file mode 100644 index 00000000..fbba12f3 --- /dev/null +++ b/scripts/angelscript/monsters/wraith_cl.as @@ -0,0 +1,59 @@ +#pragma context client + +namespace MS +{ + +class WraithCl : CGameScript +{ + int FX_ACTIVE; + string MAX_RANGE; + string MY_OWNER; + string MY_TARGET; + + void client_activate() + { + MY_OWNER = param1; + MY_TARGET = param2; + MAX_RANGE = param3; + FX_ACTIVE = 1; + beam_loop(); + ScheduleDelayedEvent(2.0, "end_fx"); + SetCallback("render", "enable"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + string MY_ORG = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + string TARG_ORG = /* TODO: $getcl */ $getcl(MY_TARGET, "origin"); + if (!(Distance(MY_ORG, TARG_ORG) < MAX_RANGE)) return; + int RND_BONE = RandomInt(1, 15); + string BEAM1_END = /* TODO: $getcl */ $getcl(MY_TARGET, "bonepos", RND_BONE); + int RND_BONE = RandomInt(1, 15); + string BEAM2_END = /* TODO: $getcl */ $getcl(MY_TARGET, "bonepos", RND_BONE); + if ((BEAM1_END).x == 0) + { + string BEAM1_END = TARG_ORG; + } + if ((BEAM2_END).x == 0) + { + string BEAM2_END = TARG_ORG; + } + ClientEffect("beam_end", MY_OWNER, 1, BEAM1_END, "lgtning.spr", 0.001, 5.0, 0.5, 255, 50, 30, Vector3(60, 60, 255)); + ClientEffect("beam_end", MY_OWNER, 2, BEAM2_END, "lgtning.spr", 0.001, 5.0, 0.5, 255, 50, 30, Vector3(60, 60, 255)); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(0.5, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/monsters/wraith_summoned.as b/scripts/angelscript/monsters/wraith_summoned.as new file mode 100644 index 00000000..c08b80ef --- /dev/null +++ b/scripts/angelscript/monsters/wraith_summoned.as @@ -0,0 +1,308 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_noclip.as" + +namespace MS +{ + +class WraithSummoned : CGameScript +{ + int AM_DRAINING; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BASENOCLIP_NO_SETMOVEDEST; + string CL_SCRIPT; + int DMG_DRAIN; + float FREQ_ROAM; + int FWD_SPEED; + int FWD_SPEED_STANDARD; + string INITIAL_ORIGIN; + int MP_DRAIN_AMT; + int MY_CL_IDX; + string MY_OWNER; + int NPC_GIVE_EXP; + string NPC_NOCLIP_DEST; + string SOUND_DEATH; + string SOUND_DRAIN_LOOP; + string SOUND_DRAIN_START; + string SOUND_HOVER_LOOP; + string SOUND_KILL; + string SOUND_MOAN; + string SOUND_TELE; + + WraithSummoned() + { + ANIM_RUN = "idle"; + ANIM_IDLE = "idle"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "idle"; + ANIM_WALK = "idle"; + ATTACK_RANGE = 128; + ATTACK_MOVERANGE = 100; + ATTACK_HITRANGE = 150; + NPC_GIVE_EXP = 400; + BASENOCLIP_NO_SETMOVEDEST = 1; + FWD_SPEED_STANDARD = 20; + FWD_SPEED = 20; + DMG_DRAIN = 20; + MP_DRAIN_AMT = 1; + CL_SCRIPT = "monsters/wraith_cl"; + FREQ_ROAM = Random(5.0, 10.0); + SOUND_MOAN = "crow/ghostwail.wav"; + SOUND_DEATH = "ichy/ichy_die2.wav"; + SOUND_DRAIN_START = "crow/Triggered/tomb5.wav"; + SOUND_DRAIN_LOOP = "x/x_teleattack1.wav"; + SOUND_HOVER_LOOP = "ambience/labdrone2.wav"; + SOUND_KILL = "houndeye/he_blast3.wav"; + SOUND_TELE = "magic/teleport.wav"; + Precache(SOUND_KILL); + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetName("Wraith"); + SetModel("monsters/netherspirit.mdl"); + SetWidth(20); + SetHeight(80); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetHealth(750); + SetRace("undead"); + SetBloodType("none"); + SetDamageResistance("slash", 0.0); + SetDamageResistance("pierce", 0.0); + SetDamageResistance("blunt", 0.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("holy", 1.0); + SetDamageResistance("stun", 0); + SetSolid("slidebox"); + SetGravity(0); + SetRoam(true); + SetHearingSensitivity(11); + ScheduleDelayedEvent(1.0, "sustain_renderprops"); + ScheduleDelayedEvent(0.5, "do_manual_roam"); + } + + void OnPostSpawn() override + { + if (!(NPC_DMG_MULTI > 1)) return; + MP_DRAIN_AMT *= NPC_DMG_MULTI; + DMG_DRAIN *= NPC_DMG_MULTI; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_MOVERANGE) + { + FWD_SPEED = 0; + } + else + { + FWD_SPEED = FWD_SPEED_STANDARD; + } + if ((IS_FLEEING)) + { + NPC_NOCLIP_DEST = GetMonsterProperty("movedest.origin"); + } + if (m_hAttackTarget != "unset") + { + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARGET_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARGET_Z -= 46; + } + string MY_ORG = GetEntityOrigin(GetOwner()); + MY_ORG = "z"; + SetEntityOrigin(GetOwner(), MY_ORG); + if (GetEntityRange(m_hAttackTarget) < 55) + { + float RND_ANG = Random(0, 359.99); + NPC_NOCLIP_DEST += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, 80, 0)); + NPC_NOCLIP_DEST = "z"; + SetEntityOrigin(GetOwner(), NPC_NOCLIP_DEST); + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + } + else + { + IS_FLEEING = 0; + NPC_NOCLIP_DEST = GetEntityOrigin(m_hAttackTarget); + NPC_NOCLIP_DEST = "z"; + } + } + if (!(m_hAttackTarget == "unset")) return; + FREQ_ROAM("do_manual_roam"); + FWD_SPEED = FWD_SPEED_STANDARD; + GetAllPlayers(PLAYER_LIST); + ScrambleTokens(PLAYER_LIST, ";"); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + pick_target(); + } + } + + void pick_target() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if (!(IsEntityAlive(CUR_TARG))) return; + if (!(GetEntityRange(CUR_TARG) < 1024)) return; + npcatk_target(CUR_TARG); + } + + void do_manual_roam() + { + if (!(IsEntityAlive(GetOwner()))) return; + FREQ_ROAM("do_manual_roam"); + if (!(m_hAttackTarget == "unset")) return; + NPC_NOCLIP_DEST = NPC_HOME_LOC; + float RND_ANG = Random(0, 359.99); + NPC_NOCLIP_DEST += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, 512, 0)); + } + + void sustain_renderprops() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(5.0, "sustain_renderprops"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + // svplaysound: svplaysound 3 10 SOUND_HOVER_LOOP + EmitSound(3, 10, SOUND_HOVER_LOOP); + if (RandomInt(1, 10) == 1) + { + EmitSound(GetOwner(), 0, SOUND_MOAN, 10); + } + } + + void turn_undead() + { + if ((NOT_SUMMONED)) return; + string HOLY_CASTER = param2; + string DMG_HOLY = GetEntityMaxHealth(GetOwner()); + DMG_HOLY *= 2.0; + XDoDamage(GetOwner(), "direct", 1000, 1.0, HOLY_CASTER, HOLY_CASTER, "spellcasting.divination", "holy"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + AM_DRAINING = 0; + SetAnimFrameRate(0); + FWD_SPEED = 0; + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner()), 5, 128); + EmitSound(GetOwner(), 1, SOUND_DEATH, 10); + // svplaysound: svplaysound 2 0 SOUND_DRAIN_LOOP + EmitSound(2, 0, SOUND_DRAIN_LOOP); + // svplaysound: svplaysound 3 0 SOUND_HOVER_LOOP + EmitSound(3, 0, SOUND_HOVER_LOOP); + if (MY_CL_IDX != 0) + { + ClientEvent("update", "all", MY_CL_IDX, "end_fx"); + } + if (!(IsEntityAlive(MY_OWNER))) return; + CallExternal(MY_OWNER, "ext_wraith_died"); + } + + void frame_attack_start() + { + // svplaysound: svplaysound 2 10 SOUND_DRAIN_LOOP + EmitSound(2, 10, SOUND_DRAIN_LOOP); + start_drain_attack(); + } + + void frame_attack_end() + { + end_drain_attack(); + } + + void end_drain_attack() + { + // svplaysound: svplaysound 2 0 SOUND_DRAIN_LOOP + EmitSound(2, 0, SOUND_DRAIN_LOOP); + ClientEvent("update", "all", MY_CL_IDX, "end_fx"); + AM_DRAINING = 0; + MY_CL_IDX = 0; + } + + void start_drain_attack() + { + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner()), GetEntityIndex(m_hAttackTarget), ATTACK_HITRANGE); + MY_CL_IDX = "game.script.last_sent_id"; + AM_DRAINING = 1; + drain_attack_loop(); + } + + void drain_attack_loop() + { + if (!(AM_DRAINING)) return; + ScheduleDelayedEvent(0.1, "drain_attack_loop"); + if ((IsValidPlayer(m_hAttackTarget))) + { + string SEE_TARGET = false; + if ((SEE_TARGET)) + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE) + { + } + GiveMP(m_hAttackTarget); + if (GetGameTime() > LASTATK_MESSAGE) + { + LASTATK_MESSAGE = GetGameTime(); + LASTATK_MESSAGE += 2.0; + SendPlayerMessage(m_hAttackTarget, "Your soul is being drained!"); + Effect("screenfade", m_hAttackTarget, 2, 1, Vector3(0, 0, 255), 180, "fadein"); + } + if (GetEntityMP(m_hAttackTarget) <= 0) + { + } + slay_target(); + } + } + else + { + if ((false)) + { + } + DoDamage(m_hAttackTarget, "direct", DMG_DRAIN, 1.0, GetOwner()); + } + } + + void slay_target() + { + end_drain_attack(); + SendPlayerMessage(m_hAttackTarget, "Your soul has been drained."); + DoDamage(m_hAttackTarget, "direct", 99999, 1.0, GetOwner()); + CallExternal(m_hAttackTarget, "ext_playsound_kiss", 1, 10, SOUND_KILL); + EmitSound(GetOwner(), 0, SOUND_MOAN, 10); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + INITIAL_ORIGIN = param3; + ScheduleDelayedEvent(0.1, "set_first_origin"); + } + + void set_first_origin() + { + SetEntityOrigin(GetOwner(), INITIAL_ORIGIN); + } + + void ext_master_died() + { + if (!(param1 == MY_OWNER)) return; + npc_suicide(); + } + +} + +} diff --git a/scripts/angelscript/monsters/wyrm_fire.as b/scripts/angelscript/monsters/wyrm_fire.as new file mode 100644 index 00000000..ad0629e5 --- /dev/null +++ b/scripts/angelscript/monsters/wyrm_fire.as @@ -0,0 +1,1507 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_struck.as" + +namespace MS +{ + +class WyrmFire : CGameScript +{ + string ANIM_APPEAR; + string ANIM_ATTACK; + string ANIM_BITE1; + string ANIM_BITE2; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_HEADBUTT; + string ANIM_HIDDEN; + string ANIM_IDLE; + string ANIM_RAWR; + string ANIM_RETRACT; + string ANIM_RUN; + string ANIM_SPIT; + string ANIM_SWIPE; + string ANIM_WALK; + int AOE_HBUTT; + int AOE_SWIPE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_RANGE_BITE; + int ATTACK_RANGE_SPIT; + int ATT_MOUTH; + int CANT_FLEE; + int CANT_TURN; + int CAN_SPIT; + int CUR_PASSIVE; + int DID_BITE; + string DID_FLEE1; + string DID_FLEE2; + string DID_FLEE3; + string DID_INTRO; + int DMG_BITE; + int DMG_FROCK; + int DMG_HBUTT; + int DMG_SWIPE; + int DOT_DMG; + int DOT_DMG2; + float DOT_DUR; + float DOT_DUR2; + string DOT_EFFECTNAME; + string DOT_EFFECTNAME2; + string DOT_SCRIPT; + string DOT_SCRIPT2; + int DO_QUAKE; + float DUR_QUAKE; + string FIRE_BOMB_POS; + float FREQ_MODE_SWITCH; + float FREQ_PASSIVE; + float FREQ_PIT_SEARCH; + float FREQ_SPIT; + float FREQ_SWIPE; + float GAME_PUSH_RATIO; + int INTRO_STAGE; + int LAVA_VOLUME; + string MONSTER_MODEL; + string MOVE_TO_PIT; + string MOVE_TO_PIT_IDX; + string NEXT_GIVEUP; + string NEXT_LIGHT_REFRESH; + string NEXT_LOOP_LAVA; + string NEXT_MODE_SWITCH; + string NEXT_PASSIVE; + string NEXT_PITHUNT; + string NEXT_PIT_SEARCH; + string NEXT_SPIT; + string NEXT_SWIPE_CHECK; + string NEXT_WORM_HIDE; + int NO_QUAKES; + int NO_STUCK_CHECKS; + string NPCATK_TARGET; + int NPC_FLINCH_DISABLE; + float NPC_FLINCH_HEALTH_RATIO; + int NPC_GIVE_EXP; + string NPC_MATERIAL_TYPE; + int NPC_NO_ATTACK; + int NPC_NO_MOVE; + int NPC_USE_FLINCH; + int NPC_USE_IDLE; + int NPC_USE_PAIN; + string N_EDGE_POINTS; + string N_PIT_POINTS; + int PROJ_COF; + int PROJ_DMG; + string PROJ_LOOP_SOUND; + string PROJ_SCRIPT; + int PROJ_SPEED; + string PROJ_TARGET; + string REPELL_POS; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_BITE; + string SOUND_DEATH; + string SOUND_FLINCH1; + string SOUND_FLINCH2; + string SOUND_FLINCH3; + string SOUND_HBUTT; + string SOUND_LAVA_LOOP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_PASSIVE1; + string SOUND_PASSIVE2; + string SOUND_PASSIVE3; + string SOUND_PASSIVE4; + string SOUND_SPIT_PREP; + string SOUND_SPIT_STRIKE; + string SOUND_SPLASH_DOWN; + string SOUND_SPLASH_UP; + string SOUND_SWIPE; + string SOUND_SWIPE_LARGE; + string T_LEAST_DIST; + string T_NEAREST; + string T_SPHERE; + int WYRM_COMBAT_INITIATED; + string WYRM_CUR_PIT; + int WYRM_CUR_PIT_IDX; + string WYRM_EDGE_PREFIX; + int WYRM_FINALIZED; + string WYRM_GLOW_COLOR; + string WYRM_GOT_ALL_EDGE_POINTS; + string WYRM_GOT_ALL_PIT_POINTS; + int WYRM_HIDE_MODE; + string WYRM_LIGHT_ACTIVE; + string WYRM_LIGHT_CLIDX; + string WYRM_MMODE; + string WYRM_MOVEDEST; + string WYRM_NEXT_EDGE_IDX; + string WYRM_NO_TELEPORT_FLAG; + string WYRM_OLD_TARGET; + int WYRM_PITHUNTER; + string WYRM_PIT_PREFIX; + string WYRM_PORTING_TO; + int WYRM_SIZE; + int WYRM_SKIN; + int WYRM_SPEED; + int WYRM_SUBMERGE_GOT_ENDFRAME; + int WYRM_SUBMERGING; + int WYRM_TELEPORTING; + int WYRM_TELE_STAGE2; + string WYRM_TYPE; + int WYRM_UNHIDE_RANGE; + string WYRM_UNHIDE_TIME; + string WYRM_USE_BOTH; + string WYRM_USE_EDGES; + string WYRM_USE_PITS; + + WyrmFire() + { + WYRM_EDGE_PREFIX = "wyrm_edge"; + WYRM_PIT_PREFIX = "wyrm_pit"; + WYRM_TYPE = "fire"; + WYRM_SKIN = 0; + WYRM_SIZE = 1; + MONSTER_MODEL = "monsters/wyrms_medium.mdl"; + WYRM_SPEED = 100; + WYRM_MOVEDEST = "unset"; + ANIM_APPEAR = "anim_appear"; + ANIM_RETRACT = "anim_retract"; + ANIM_RAWR = "anim_blong"; + ANIM_BITE1 = "anim_bite1"; + ANIM_BITE2 = "anim_bite2"; + ANIM_SPIT = "anim_spit"; + ANIM_SWIPE = "anim_swipe"; + ANIM_HEADBUTT = "anim_hbutt"; + ANIM_FLINCH1 = "anim_flinch1"; + ANIM_FLINCH2 = "anim_flinch2"; + ANIM_HIDDEN = "anim_hidden"; + ATTACK_RANGE_BITE = 245; + ATTACK_RANGE_SPIT = 4096; + NPC_NO_ATTACK = 1; + FREQ_SWIPE = Random(3.0, 5.0); + FREQ_MODE_SWITCH = Random(20.0, 30.0); + FREQ_PIT_SEARCH = Random(10.0, 20.0); + PROJ_SPEED = 300; + PROJ_DMG = 50; + PROJ_COF = 5; + PROJ_SCRIPT = "proj_fire_bomb_sm"; + PROJ_LOOP_SOUND = "ambient/animals/rattle_long.wav"; + FREQ_SPIT = Random(2.0, 3.0); + ATT_MOUTH = 0; + SOUND_SPIT_PREP = "magic/fireball_large.wav"; + SOUND_SPIT_STRIKE = "weapons/rocketfire1.wav"; + SOUND_ALERT1 = "monsters/wyrm/c_x0stgwar_bat1.wav"; + SOUND_ALERT2 = "monsters/wyrm/c_x0stgwar_bat2.wav"; + SOUND_BITE = "monsters/wyrm/8bit/c_x0stgwar_atk1.wav"; + SOUND_HBUTT = "monsters/wyrm/c_x0stgwar_atk2.wav"; + SOUND_SWIPE = "monsters/wyrm/c_x0stgwar_atk3.wav"; + SOUND_SWIPE_LARGE = "weapons/swinghuge.wav"; + SOUND_SPLASH_DOWN = "monsters/wyrm/lava_splash_rev.wav"; + SOUND_SPLASH_UP = "amb/lava_splash.wav"; + SOUND_LAVA_LOOP = "amb/lava_loop.wav"; + SOUND_PASSIVE1 = "monsters/wyrm/idle1.wav"; + SOUND_PASSIVE2 = "monsters/wyrm/idle2.wav"; + SOUND_PASSIVE3 = "monsters/wyrm/idle3.wav"; + SOUND_PASSIVE4 = "monsters/wyrm/idle4.wav"; + FREQ_PASSIVE = Random(7.0, 10.0); + CUR_PASSIVE = 0; + DUR_QUAKE = 7.0; + AOE_HBUTT = 80; + AOE_SWIPE = 128; + DMG_HBUTT = 75; + DMG_BITE = 65; + DMG_FROCK = 100; + DMG_SWIPE = 50; + FREQ_SWIPE = 20.0; + DOT_SCRIPT = "effects/dot_fire"; + DOT_EFFECTNAME = "DOT_fire"; + DOT_DMG = 25; + DOT_DUR = 5.0; + DOT_SCRIPT2 = "effects/dot_fire"; + DOT_EFFECTNAME2 = "DOT_fire"; + DOT_DMG2 = 25; + DOT_DUR2 = 5.0; + WYRM_GLOW_COLOR = Vector3(64, 32, 0); + WYRM_CUR_PIT_IDX = 0; + ANIM_IDLE = "anim_idle"; + ANIM_WALK = "anim_idle"; + ANIM_RUN = "anim_idle"; + ANIM_ATTACK = ANIM_BITE1; + ANIM_DEATH = "anim_death"; + NPC_NO_MOVE = 1; + CANT_TURN = 1; + CANT_FLEE = 1; + NPC_GIVE_EXP = 1000; + NO_STUCK_CHECKS = 1; + ATTACK_RANGE = 256; + ATTACK_HITRANGE = 256; + SOUND_DEATH = "monsters/wyrm/c_x0stgwar_dead.wav"; + NPC_USE_FLINCH = 1; + NPC_USE_PAIN = 1; + NPC_USE_IDLE = 0; + NPC_FLINCH_HEALTH_RATIO = 0.5; + ANIM_FLINCH = "anim_flinch1"; + NPC_MATERIAL_TYPE = "carapace"; + SOUND_PAIN1 = "monsters/wyrm/c_x0stgwar_hit1.wav"; + SOUND_PAIN2 = "monsters/wyrm/c_x0stgwar_hit2.wav"; + SOUND_PAIN3 = "monsters/wyrm/c_x0stgwar_hit2.wav"; + SOUND_FLINCH1 = "monsters/wyrm/c_x0stgwar_hit1.wav"; + SOUND_FLINCH2 = "monsters/wyrm/c_x0stgwar_hit2.wav"; + SOUND_FLINCH3 = "monsters/wyrm/c_x0stgwar_hit2.wav"; + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 ambient/animals/rattle_long.wav + EmitSound(0, 0, "ambient/animals/rattle_long.wav"); + // svplaysound: svplaysound 0 0 monsters/wyrm/idle1.wav + EmitSound(0, 0, "monsters/wyrm/idle1.wav"); + // svplaysound: svplaysound 0 0 monsters/wyrm/idle2.wav + EmitSound(0, 0, "monsters/wyrm/idle2.wav"); + // svplaysound: svplaysound 0 0 monsters/wyrm/idle3.wav + EmitSound(0, 0, "monsters/wyrm/idle3.wav"); + // svplaysound: svplaysound 0 0 monsters/wyrm/idle4.wav + EmitSound(0, 0, "monsters/wyrm/idle4.wav"); + // svplaysound: svplaysound 0 0 amb/lava_loop.wav + EmitSound(0, 0, "amb/lava_loop.wav"); + } + + void game_precache() + { + Precache("xfire.spr"); + Precache("rockgibs.mdl"); + Precache("xfireball3.spr"); + } + + void OnSpawn() override + { + wyrm_spawn(); + if (!(true)) return; + ScheduleDelayedEvent(2.0, "wyrm_finalize"); + } + + void wyrm_spawn() + { + SetName("Lava Wyrm"); + SetModel(MONSTER_MODEL); + GAME_PUSH_RATIO = 0.1; + if (WYRM_SIZE == 1) + { + SetWidth(80); + SetHeight(256); + } + if (!(true)) return; + SetRace("demon"); + SetBloodType("red"); + SetProp(GetOwner(), "skin", WYRM_SKIN); + SetHealth(5000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + SetHearingSensitivity(11); + CAN_SPIT = 1; + SetIdleAnim(ANIM_HIDDEN); + SetMoveAnim(ANIM_HIDDEN); + WYRM_UNHIDE_RANGE = 384; + ScheduleDelayedEvent(0.1, "wyrm_hide"); + NEXT_PITHUNT = GetGameTime(); + NEXT_PITHUNT += 20.0; + } + + void wyrm_finalize() + { + if ((WYRM_FINALIZED)) return; + WYRM_FINALIZED = 1; + array ARRAY_EDGE_POINTS; + array ARRAY_PIT_POINTS; + string L_EDGE1_NAME = WYRM_EDGE_PREFIX; + L_EDGE1_NAME += 1; + string L_EDGE1 = FindEntityByName(L_EDGE1_NAME); + if (((L_EDGE1 !is null))) + { + LogDebug("wyrm_finalize found edge1"); + WYRM_USE_EDGES = 1; + N_EDGE_POINTS = 0; + for (int i = 0; i < 20; i++) + { + wyrm_get_edges_loop(); + } + } + string L_PIT1_NAME = WYRM_PIT_PREFIX; + L_PIT1_NAME += 1; + string L_PIT1 = FindEntityByName(L_PIT1_NAME); + if (((L_PIT1 !is null))) + { + LogDebug("wyrm_finalize found pit1"); + WYRM_USE_PITS = 1; + N_PIT_POINTS = 0; + for (int i = 0; i < 20; i++) + { + wyrm_get_pits_loop(); + } + } + if ((WYRM_USE_EDGES)) + { + WYRM_CUR_PIT_IDX = 0; + WYRM_CUR_PIT = ARRAY_PIT_POINTS[int(WYRM_CUR_PIT_IDX)]; + if ((WYRM_USE_PITS)) + { + } + if (WYRM_MMODE == "WYRM_MMODE") + { + WYRM_MMODE = "pits"; + } + WYRM_USE_BOTH = 1; + } + if (!(WYRM_USE_EDGES)) + { + if (!(WYRM_USE_PITS)) + { + } + WYRM_MMODE = "none"; + } + LogDebug("wyrm_finalize"); + if (WYRM_MMODE != "none") + { + wyrm_pick_movement_mode("init"); + } + else + { + string L_XP = GetXP(GetOwner()); + L_XP *= 0.5; + SetSkillLevel(L_XP); + } + } + + void wyrm_get_edges_loop() + { + if ((WYRM_GOT_ALL_EDGE_POINTS)) return; + N_EDGE_POINTS += 1; + string L_EDGE_NAME = WYRM_EDGE_PREFIX; + L_EDGE_NAME += int(N_EDGE_POINTS); + string L_EDGE_ID = FindEntityByName(L_EDGE_NAME); + if (((L_EDGE_ID !is null))) + { + ARRAY_EDGE_POINTS.insertLast(L_EDGE_ID); + LogDebug("added edge @ GetEntityOrigin(L_EDGE_ID)"); + } + else + { + WYRM_GOT_ALL_EDGE_POINTS = 1; + } + } + + void wyrm_get_pits_loop() + { + if ((WYRM_GOT_ALL_PIT_POINTS)) return; + N_PIT_POINTS += 1; + string L_PIT_NAME = WYRM_PIT_PREFIX; + L_PIT_NAME += int(N_PIT_POINTS); + string L_PIT_ID = FindEntityByName(L_PIT_NAME); + if (((L_PIT_ID !is null))) + { + ARRAY_PIT_POINTS.insertLast(L_PIT_ID); + LogDebug("added pit @ GetEntityOrigin(L_PIT_ID)"); + } + else + { + WYRM_GOT_ALL_PIT_POINTS = 1; + } + } + + void wyrm_hide() + { + glow_toggle(0); + NPCATK_TARGET = "unset"; + WYRM_OLD_TARGET = m_hAttackTarget; + WYRM_HIDE_MODE = 1; + WYRM_UNHIDE_TIME = GetGameTime(); + WYRM_UNHIDE_TIME += 5.0; + SetInvincible(true); + NPC_FLINCH_DISABLE = 1; + npcatk_suspend_movement(ANIM_HIDDEN); + if (!(SUSPEND_AI)) + { + npcatk_suspend_ai(); + } + WYRM_MOVEDEST = "unset"; + // TODO: UNCONVERTED: removefx + LAVA_VOLUME = 3; + ScheduleDelayedEvent(0.1, "loop_lava"); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(WYRM_HIDE_MODE)) return; + if (!(GetGameTime() > WYRM_UNHIDE_TIME)) return; + if ((WYRM_TELEPORTING)) return; + if ((WYRM_SUBMERGING)) return; + string L_HEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(L_HEARD_ID) == "enemy")) return; + if (!(GetEntityRange(L_HEARD_ID) < WYRM_UNHIDE_RANGE)) return; + wyrm_appear(L_HEARD_ID, "heard_sound"); + } + + void wyrm_appear() + { + LogDebug("wyrm_appear PARAM2"); + float L_GAME_TIME = GetGameTime(); + NEXT_GIVEUP = L_GAME_TIME; + NEXT_GIVEUP += 20.0; + WYRM_TELEPORTING = 0; + WYRM_SUBMERGING = 0; + LAVA_VOLUME = 10; + ScheduleDelayedEvent(0.1, "loop_lava"); + glow_toggle(1); + WYRM_HIDE_MODE = 0; + WYRM_UNHIDE_TIME = L_GAME_TIME; + WYRM_UNHIDE_TIME += 5.0; + SetInvincible(false); + NPC_FLINCH_DISABLE = 0; + npcatk_resume_movement(); + npcatk_resume_ai(); + wyrm_appear_fx(); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + PlayAnim("critical", ANIM_APPEAR); + NEXT_SWIPE_CHECK = L_GAME_TIME; + NEXT_SWIPE_CHECK += FREQ_SWIPE; + NEXT_MODE_SWITCH = L_GAME_TIME; + NEXT_MODE_SWITCH += FREQ_MODE_SWITCH; + NEXT_PIT_SEARCH = L_GAME_TIME; + NEXT_PIT_SEARCH += FREQ_PIT_SEARCH; + if ((IsEntityAlive(WYRM_OLD_TARGET))) + { + if (GetEntityRange(WYRM_OLD_TARGET) < GetEntityRange(param1)) + { + npcatk_settarget(WYRM_OLD_TARGET); + } + else + { + npcatk_settarget(GetEntityIndex(param1)); + } + } + else + { + npcatk_settarget(GetEntityIndex(param1)); + } + } + + void intro_done() + { + INTRO_STAGE = 2; + if ((WYRM_HIDE_MODE)) return; + NPC_FLINCH_DISABLE = 0; + } + + void npc_found_new_target() + { + WYRM_COMBAT_INITIATED = 1; + } + + void OnHuntTarget(CBaseEntity@ target) + { + float L_GAME_TIME = GetGameTime(); + if (L_GAME_TIME > NEXT_PASSIVE) + { + CUR_PASSIVE += 1; + if (CUR_PASSIVE == 1) + { + // svplaysound: if ( CUR_PASSIVE == 1 ) svplaysound 2 10 SOUND_PASSIVE1 + EmitSound(2, 10, SOUND_PASSIVE1); + } + if (CUR_PASSIVE == 2) + { + // svplaysound: if ( CUR_PASSIVE == 2 ) svplaysound 2 10 SOUND_PASSIVE2 + EmitSound(2, 10, SOUND_PASSIVE2); + } + if (CUR_PASSIVE == 3) + { + // svplaysound: if ( CUR_PASSIVE == 3 ) svplaysound 2 10 SOUND_PASSIVE3 + EmitSound(2, 10, SOUND_PASSIVE3); + } + if (CUR_PASSIVE == 4) + { + // svplaysound: svplaysound 2 10 SOUND_PASSIVE4 + EmitSound(2, 10, SOUND_PASSIVE4); + CUR_PASSIVE = 0; + } + NEXT_PASSIVE = L_GAME_TIME; + NEXT_PASSIVE += FREQ_PASSIVE; + } + if (L_GAME_TIME > NEXT_LOOP_LAVA) + { + if ((WYRM_HIDE_MODE)) + { + LAVA_VOLUME = 3; + loop_lava(); + } + else + { + LAVA_VOLUME = 10; + loop_lava(); + } + } + if (m_hAttackTarget == "unset") + { + if (!(WYRM_HIDE_MODE)) + { + if (L_GAME_TIME > NEXT_WORM_HIDE) + { + } + NEXT_WORM_HIDE = 99999; + do_submerge(1, "lack_of_target"); + LogDebug("hiding from lack of target"); + } + else + { + if (L_GAME_TIME > NEXT_LOCAL_SCAN) + { + if (L_GAME_TIME > WYRM_UNHIDE_TIME) + { + } + NEXT_LOCAL_SCAN = L_GAME_TIME; + NEXT_LOCAL_SCAN += 0.5; + string L_SPHERE = FindEntitiesInSphere("enemy", 512); + if (L_SPHERE != "none") + { + } + wyrm_appear(GetToken(L_SPHERE, 0, ";"), "local_scan"); + return; + } + if ((WYRM_PITHUNTER)) + { + } + if (L_GAME_TIME > NEXT_PITHUNT) + { + } + NEXT_PITHUNT = L_GAME_TIME; + NEXT_PITHUNT += 10.0; + WYRM_PORTING_TO = "pit"; + find_next_pit("randomtarg"); + wyrm_teleport("pit_hunt"); + } + } + if ((WYRM_LIGHT_ACTIVE)) + { + if (L_GAME_TIME > NEXT_LIGHT_REFRESH) + { + } + glow_toggle(1); + } + if (!(WYRM_HIDE_MODE)) + { + if (WYRM_MOVEDEST != "unset") + { + } + string L_MY_ORG = GetEntityOrigin(GetOwner()); + string L_YAW = /* TODO: $angles */ $angles(L_MY_ORG, WYRM_MOVEDEST); + string L_YAW = /* TODO: $vec.yaw */ $vec.yaw(L_YAW); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, L_YAW, 0), Vector3(0, WYRM_SPEED, 0))); + } + if ((WYRM_HIDE_MODE)) return; + if (!(m_hAttackTarget != "unset")) return; + if (L_GAME_TIME > NEXT_GIVEUP) + { + LogDebug("idle too long , giving up target..."); + NPCATK_TARGET = "unset"; + } + SetMoveDest(m_hAttackTarget); + string L_GAME_TIME = L_GAME_TIME; + NEXT_WORM_HIDE = L_GAME_TIME; + NEXT_WORM_HIDE += 20.0; + if ((WYRM_USE_BOTH)) + { + if (L_GAME_TIME > NEXT_MODE_SWITCH) + { + } + NEXT_MODE_SWITCH = FREQ_MODE_SWITCH; + NEXT_MODE_SWITCH += L_GAME_TIME; + if (!(WYRM_HIDE_MODE)) + { + } + LogDebug("picking new movement mode"); + wyrm_pick_movement_mode("npcatk_hunt"); + } + if (WYRM_MMODE == "edges") + { + string L_EDGE_ORG = ARRAY_EDGE_POINTS[int(WYRM_NEXT_EDGE_IDX)]; + WYRM_MOVEDEST = GetEntityOrigin(L_EDGE_ORG); + string L_MY_POS = GetEntityOrigin(GetOwner()); + if (Distance(L_MY_POS, WYRM_MOVEDEST) < 16) + { + find_next_edge(); + } + } + if (WYRM_MMODE == "pits") + { + string L_PIT_ORG = ARRAY_PIT_POINTS[int(WYRM_CUR_PIT)]; + WYRM_MOVEDEST = GetEntityOrigin(L_PIT_ORG); + } + if (WYRM_MMODE == "none") + { + if (L_GAME_TIME > NEXT_WYRM_FLOAT) + { + NEXT_WYRM_FLOAT = L_GAME_TIME; + NEXT_WYRM_FLOAT += Random(3.0, 7.0); + float L_MOVE_YAW = Random(0, 359.99); + string L_MOVE_TO = GetEntityOrigin(GetOwner()); + L_MOVE_TO += /* TODO: $relpos */ $relpos(Vector3(0, L_MOVE_YAW, 0), Vector3(0, 256, 0)); + WYRM_SPEED = 20; + WYRM_MOVEDEST = L_MOVE_TO; + } + } + } + + void bs_global_command() + { + LogDebug("bs_global_command GetEntityName(param1) PARAM2 PARAM3"); + if (!(param1 == m_hAttackTarget)) return; + NPCATK_TARGET = "unset"; + if (!(param3 == "death")) return; + ScheduleDelayedEvent(3.0, "anger_sated"); + } + + void anger_sated() + { + LogDebug("anger_sated"); + if (!(m_hAttackTarget == "unset")) return; + if ((WYRM_HIDE_MODE)) return; + if ((WYRM_TELEPORTING)) return; + if (!(WYRM_MMODE != "edges")) return; + do_submerge(1, "anger_sated"); + } + + void npc_targetsighted() + { + if (!(DID_INTRO)) + { + DID_INTRO = 1; + NPC_FLINCH_DISABLE = 1; + INTRO_STAGE = 1; + PlayAnim("critical", ANIM_RAWR); + ScheduleDelayedEvent(3.0, "intro_done"); + } + if (!(INTRO_STAGE > 1)) return; + float L_GAME_TIME = GetGameTime(); + if (GetEntityRange(m_hAttackTarget) <= ATTACK_RANGE_BITE) + { + PlayAnim("once", ANIM_ATTACK); + } + else + { + if (L_GAME_TIME > NEXT_SPIT) + { + } + NEXT_SPIT = GetGameTime(); + NEXT_SPIT += FREQ_SPIT; + WYRM_SPIT_COUNT += 1; + if (WYRM_SPIT_COUNT >= 5) + { + NEXT_SPIT += 10.0; + WYRM_SPIT_COUNT = 0; + DO_QUAKE = 1; + PlayAnim("critical", ANIM_RAWR); + return; + } + PlayAnim("once", ANIM_SPIT); + } + } + + void wyrm_pick_movement_mode() + { + LogDebug("wyrm_pick_movement_mode was WYRM_MMODE PARAM1"); + if (WYRM_MMODE == "pits") + { + if ((WYRM_USE_EDGES)) + { + } + WYRM_MMODE = "edges"; + find_next_edge(); + WYRM_PORTING_TO = "edge"; + wyrm_teleport("switch_modes_to_edge"); + } + else + { + if ((WYRM_USE_PITS)) + { + } + WYRM_MMODE = "pits"; + find_next_pit(); + WYRM_PORTING_TO = "pit"; + wyrm_teleport("switch_modes_to_pits"); + } + LogDebug("wyrm_pick_movement_mode is WYRM_MMODE PARAM1"); + } + + void find_next_edge() + { + if (!(WYRM_EDGE_INIT)) + { + WYRM_EDGE_INIT += 1; + T_NEAREST = 9999; + for (int i = 0; i < int(ARRAY_EDGE_POINTS.length()); i++) + { + find_nearest_edge(); + } + LogDebug("nearest edge WYRM_NEXT_EDGE_IDX"); + string L_EDGE_ORG = ARRAY_EDGE_POINTS[int(WYRM_NEXT_EDGE_IDX)]; + string L_EDGE_ORG = GetEntityOrigin(L_EDGE_ORG); + LogDebug("find_next_edge init"); + SetEntityOrigin(GetOwner(), L_EDGE_ORG); + } + else + { + WYRM_NEXT_EDGE_IDX += 1; + if (WYRM_NEXT_EDGE_IDX >= (int(ARRAY_EDGE_POINTS.length()) - 1)) + { + LogDebug("find_next_edge hit last edge"); + WYRM_NEXT_EDGE_IDX = 0; + } + } + } + + void find_nearest_edge() + { + string L_CUR_EDGE = ARRAY_EDGE_POINTS[int(i)]; + string L_CUR_EDGE_ORG = GetEntityOrigin(L_CUR_EDGE); + string L_MY_POS = GetEntityOrigin(GetOwner()); + float L_DIST = Distance(L_MY_POS, L_CUR_EDGE_ORG); + LogDebug("find_nearest_edge # game.script.iteration @ L_DIST vs T_NEAREST"); + if (!(L_DIST < T_NEAREST)) return; + WYRM_NEXT_EDGE_IDX = i; + T_NEAREST = L_DIST; + } + + void find_next_pit() + { + LogDebug("find_next_pit PARAM1"); + if (param1 != "flee") + { + if (m_hAttackTarget == "unset") + { + LogDebug("find_next_pit no target , choosing..."); + if (GetPlayerCount() > 0) + { + LogDebug("find_next_pit getplayers..."); + GetAllPlayers(PIT_TARGET); + LogDebug("find_next_pit sort by range..."); + PIT_TARGET = /* TODO: $sort_entlist */ $sort_entlist(PIT_TARGET, "range"); + LogDebug("find_next_pit survived sort by range..."); + if (param2 == "randomtarg") + { + LogDebug("find_next_pit PARAM2 picking random..."); + PIT_TARGET = GetToken(PIT_TARGET, RandomInt(0, (GetTokenCount(PIT_TARGET, ";") - 1)), ";"); + } + else + { + LogDebug("find_next_pit picking nearest..."); + PIT_TARGET = GetToken(PIT_TARGET, 0, ";"); + } + if (RandomInt(1, 5) == 1) + { + if (!(WYRM_PITHUNTER)) + { + } + int L_PICK_RANDOM = 1; + } + LogDebug("find_next_pit target GetEntityName(PIT_TARGET) rnd L_PICK_RANDOM typ PARAM2"); + } + else + { + LogDebug("find_next_pit Ain t no one here,"); + int L_PICK_RANDOM = 1; + } + } + else + { + PIT_TARGET = m_hAttackTarget; + if (RandomInt(1, 5) == 1) + { + int L_PICK_RANDOM = 1; + } + LogDebug("find_next_pit curtarget GetEntityName(PIT_TARGET) rnd L_PICK_RANDOM"); + } + } + else + { + int L_PICK_RANDOM = 1; + } + if ((L_PICK_RANDOM)) + { + LogDebug("find_next_pit picking random..."); + MOVE_TO_PIT_IDX = RandomInt(0, (int(ARRAY_PIT_POINTS.length()) - 1)); + MOVE_TO_PIT = ARRAY_PIT_POINTS[int(MOVE_TO_PIT_IDX)]; + if (MOVE_TO_PIT_IDX == WYRM_CUR_PIT_IDX) + { + MOVE_TO_PIT_IDX += 1; + if (MOVE_TO_PIT_IDX >= (int(ARRAY_PIT_POINTS.length()) - 1)) + { + MOVE_TO_PIT_IDX = 0; + } + MOVE_TO_PIT = ARRAY_PIT_POINTS[int(MOVE_TO_PIT_IDX)]; + } + WYRM_CUR_PIT_IDX = MOVE_TO_PIT_IDX; + LogDebug("find_next_pit random WYRM_CUR_PIT_IDX [ MOVE_TO_PIT ]"); + } + else + { + T_LEAST_DIST = 9999; + for (int i = 0; i < int(ARRAY_PIT_POINTS.length()); i++) + { + find_pit_nearest_target(); + } + LogDebug("find_next_pit nearest2targ to GetEntityName(PIT_TARGET) GetEntityOrigin(PIT_TARGET) MOVE_TO_PIT_IDX [ MOVE_TO_PIT ]"); + } + } + + void find_pit_nearest_target() + { + string L_CUR_PIT = ARRAY_PIT_POINTS[int(i)]; + string L_CUT_PIT_ORG = GetEntityOrigin(L_CUR_PIT); + string L_PIT_TARG_ORG = GetEntityOrigin(PIT_TARGET); + float L_PIT_DIST_FROM_TARG = Distance(L_CUT_PIT_ORG, L_PIT_TARG_ORG); + LogDebug("find_pit_nearest_target # game.script.iteration dist L_PIT_DIST_FROM_TARG"); + if (!(L_PIT_DIST_FROM_TARG < T_LEAST_DIST)) return; + T_LEAST_DIST = L_PIT_DIST_FROM_TARG; + MOVE_TO_PIT_IDX = i; + MOVE_TO_PIT = ARRAY_PIT_POINTS[int(MOVE_TO_PIT_IDX)]; + } + + void wyrm_teleport() + { + LogDebug("wyrm_teleport PARAM1"); + WYRM_TELEPORTING = 1; + WYRM_TELE_STAGE2 = 1; + if (!(WYRM_HIDE_MODE)) + { + do_submerge(0, "teleporting"); + } + else + { + wyrm_teleport2(); + } + } + + void wyrm_teleport2() + { + if (!(WYRM_TELE_STAGE2)) return; + WYRM_TELE_STAGE2 = 0; + LogDebug("wyrm_teleport2 WYRM_TELEPORTING WYRM_PORTING_TO"); + string L_WIDTH = GetEntityWidth(GetOwner()); + L_WIDTH *= 1.5; + LogDebug("wyrm_teleport2 width L_WIDTH"); + if (WYRM_PORTING_TO == "pit") + { + REPELL_POS = GetEntityOrigin(MOVE_TO_PIT); + } + if (WYRM_PORTING_TO == "edge") + { + string L_EDGE_ORG = ARRAY_EDGE_POINTS[int(WYRM_NEXT_EDGE_IDX)]; + REPELL_POS = GetEntityOrigin(L_EDGE_ORG); + } + LogDebug("wyrm_teleport2 repellpos REPELL_POS"); + REPELL_POS += "z"; + T_SPHERE = FindEntitiesInSphere("any", L_WIDTH); + if (T_SPHERE != "none") + { + for (int i = 0; i < GetTokenCount(T_SPHERE, ";"); i++) + { + pitrepell_affect_targets(); + } + } + LogDebug("wyrm_teleport2 nextstage..."); + ScheduleDelayedEvent(0.5, "wyrm_teleport3"); + } + + void pitrepell_affect_targets() + { + string L_CUR_TARG = GetToken(T_SPHERE, i, ";"); + string L_TARG_ORG = GetEntityOrigin(L_CUR_TARG); + string L_MY_ORG = GetEntityOrigin(REPELL_POS); + string L_REPEL_YAW = /* TODO: $angles */ $angles(L_MY_ORG, L_TARG_ORG); + SetVelocity(L_CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, L_REPEL_YAW, 0), Vector3(200, 1000, 200))); + } + + void wyrm_teleport3() + { + LogDebug("wyrm_teleport3 WYRM_PORTING_TO"); + WYRM_TELEPORTING = 0; + if (WYRM_PORTING_TO == "pit") + { + SetEntityOrigin(GetOwner(), GetEntityOrigin(MOVE_TO_PIT)); + WYRM_CUR_PIT = MOVE_TO_PIT; + WYRM_CUR_PIT_IDX = MOVE_TO_PIT_IDX; + if ((WYRM_PITHUNTER)) + { + } + GetAllPlayers(TARGET_LIST); + string L_TARGET = /* TODO: $sort_entlist */ $sort_entlist(TARGET_LIST, "range"); + string L_TARGET = GetToken(L_TARGET, 0, ";"); + wyrm_appear(L_TARGET, "teleport2pit"); + } + if (WYRM_PORTING_TO == "edge") + { + string L_EDGE_ORG = ARRAY_EDGE_POINTS[int(WYRM_NEXT_EDGE_IDX)]; + string L_EDGE_ORG = GetEntityOrigin(L_EDGE_ORG); + LogDebug("wyrm_teleport3 WYRM_PORTING_TO WYRM_NEXT_EDGE_IDX L_EDGE_ORG"); + SetEntityOrigin(GetOwner(), L_EDGE_ORG); + GetAllPlayers(TARGET_LIST); + string L_TARGET = /* TODO: $sort_entlist */ $sort_entlist(TARGET_LIST, "range"); + string L_TARGET = GetToken(L_TARGET, 0, ";"); + wyrm_appear(L_TARGET, "teleport2edge"); + } + } + + void frame_spit_start() + { + EmitSound(GetOwner(), 1, SOUND_SPIT_PREP, 10); + EmitSound(GetOwner(), 2, "monsters/wyrm/8bit/c_x0stgwar_hit2.wav", 10); + } + + void frame_spit_strike() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + EmitSound(GetOwner(), 0, SOUND_SPIT_STRIKE, 10); + string L_TARG_ORG = GetEntityOrigin(m_hAttackTarget); + L_TARG_ORG = "z"; + if (RandomInt(1, 2) == 1) + { + PROJ_TARGET = m_hAttackTarget; + } + else + { + PROJ_TARGET = "unset"; + } + TossProjectile(PROJ_SCRIPT, GetEntityProperty(GetOwner(), "attachpos"), L_TARG_ORG, PROJ_SPEED, PROJ_DMG, PROJ_COF, "none"); + } + + void frame_blong_start() + { + if (!(DO_QUAKE)) + { + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + EmitSound(GetOwner(), 0, "monsters/wyrm/quake_rawr.wav", 10); + } + if (!(DO_QUAKE)) return; + start_quake(); + } + + void frame_blong_end() + { + if (INTRO_STAGE < 2) + { + intro_done(); + return; + } + } + + void frame_hbutt_start() + { + EmitSound(GetOwner(), 0, SOUND_HBUTT, 10); + } + + void frame_hbutt_strike() + { + ANIM_ATTACK = ANIM_BITE1; + DID_BITE = 0; + EmitSound(GetOwner(), 0, SOUND_SWIPE_LARGE, 10); + string L_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + string L_BURST_POS = GetEntityOrigin(GetOwner()); + L_BURST_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_YAW, 0), Vector3(0, (AOE_HBUTT * 0.95), 0)); + L_BURST_POS = "z"; + L_BURST_POS += "z"; + XDoDamage(L_BURST_POS, AOE_HBUTT, DMG_HBUTT, 0.1, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:hbutt"); + LogDebug("frame_hbutt_strike yaw L_YAW org L_BURST_POS"); + } + + void frame_swipe_start() + { + EmitSound(GetOwner(), 0, SOUND_SWIPE, 10); + } + + void frame_swipe_strike() + { + ANIM_ATTACK = ANIM_BITE2; + DID_BITE = 0; + EmitSound(GetOwner(), 0, SOUND_SWIPE_LARGE, 10); + string L_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + string L_BURST_POS = GetEntityOrigin(GetOwner()); + L_BURST_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_YAW, 0), Vector3(0, (AOE_SWIPE * 0.5), 0)); + L_BURST_POS = "z"; + L_BURST_POS += "z"; + XDoDamage(L_BURST_POS, AOE_SWIPE, DMG_SWIPE, 0.1, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:bigswipe"); + LogDebug("frame_swipe_strike yaw L_YAW org L_BURST_POS"); + } + + void frame_retract_start() + { + EmitSound(GetOwner(), 0, SOUND_SPLASH_DOWN, 10); + } + + void submerge_failsafe() + { + if ((WYRM_SUBMERGE_GOT_ENDFRAME)) return; + LogDebug("submerge_failsafe"); + frame_retract_end(); + } + + void frame_retract_end() + { + LogDebug("frame_retract_end notep WYRM_NO_TELEPORT_FLAG"); + WYRM_SUBMERGE_GOT_ENDFRAME = 1; + WYRM_SUBMERGING = 0; + wyrm_hide(); + if ((WYRM_NO_TELEPORT_FLAG)) + { + WYRM_NO_TELEPORT_FLAG = 0; + return; + } + wyrm_teleport2(); + } + + void frame_bite1_start() + { + EmitSound(GetOwner(), 0, SOUND_BITE, 10); + } + + void frame_bite2_start() + { + EmitSound(GetOwner(), 0, SOUND_BITE, 10); + } + + void frame_bite1_strike() + { + string L_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + string L_BURST_POS = GetEntityOrigin(GetOwner()); + L_BURST_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_YAW, 0), Vector3(0, (AOE_HBUTT * 0.95), 0)); + L_BURST_POS = "z"; + L_BURST_POS += "z"; + XDoDamage(L_BURST_POS, AOE_HBUTT, DMG_BITE, 0.1, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bite1"); + select_melee(); + } + + void frame_bite2_strike() + { + string L_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + string L_BURST_POS = GetEntityOrigin(GetOwner()); + L_BURST_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_YAW, 0), Vector3(0, (AOE_HBUTT * 0.95), 0)); + L_BURST_POS = "z"; + L_BURST_POS += "z"; + XDoDamage(L_BURST_POS, AOE_HBUTT, DMG_BITE, 0.1, GetOwner(), GetOwner(), "none", "pierce", "dmgevent:bite2"); + select_melee(); + } + + void select_melee() + { + DID_BITE += 1; + if (DID_BITE > RandomInt(3, 4)) + { + if (RandomInt(1, 3) == 1) + { + ANIM_ATTACK = ANIM_SWIPE; + } + else + { + ANIM_ATTACK = ANIM_HBUTT; + } + } + } + + void frame_appear_start() + { + EmitSound(GetOwner(), 0, SOUND_SPLASH_UP, 10); + } + + void hbutt_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(400, 0, 300)); + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + + void bite1_dodamage() + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(100, 0, 200)); + } + + void bite2_dodamage() + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(-100, 0, 200)); + } + + void hbutt_damaged_other() + { + LogDebug("hbutt_damaged_other GetEntityName(param1)"); + } + + void bigswipe_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + string L_TARG_ORG = GetEntityOrigin(param2); + string L_MY_ORG = GetEntityOrigin(GetOwner()); + string L_REPEL_YAW = /* TODO: $angles */ $angles(L_MY_ORG, L_TARG_ORG); + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, L_REPEL_YAW, 0), Vector3(-800, 1000, 200))); + } + + void swipe_damaged_other() + { + LogDebug("swipe_damaged_other GetEntityName(param1)"); + } + + void ext_fire_bomb() + { + LogDebug("ext_fire_bomb PARAM1"); + FIRE_BOMB_POS = param1; + XDoDamage(FIRE_BOMB_POS, 128, DMG_PROJ_RAPID, 0.1, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:spit"); + } + + void spit_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + if ((IsValidPlayer(param2))) + { + if (!(IsOnGround(param2))) + { + } + return; + } + apply_dot1(GetEntityIndex(param2)); + string L_TARG_ORG = GetEntityOrigin(L_TARG_ORG); + string L_MY_ORG = FIRE_BOMB_POS; + string L_REPEL_YAW = /* TODO: $angles */ $angles(L_MY_ORG, L_TARG_ORG); + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, L_REPEL_YAW, 0), Vector3(0, 500, 100))); + } + + void apply_dot1() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + ApplyEffect(param1, DOT_SCRIPT, DOT_DUR, GetEntityIndex(GetOwner()), DOT_DMG); + } + + void apply_dot2() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + ApplyEffect(param1, DOT_SCRIPT2, DOT_DUR2, GetEntityIndex(GetOwner()), DOT_DMG2); + } + + void frock_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + apply_dot1(GetEntityIndex(param2)); + LogDebug("frock_dodamage GetEntityName(param2)"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + NEXT_GIVEUP = GetGameTime(); + NEXT_GIVEUP += 20.0; + if ((GetEntityProperty(param1, "nopush"))) + { + int L_INC_DMG = 1; + } + if ((L_INC_DMG)) + { + string L_FIN_DMG = param2; + L_FIN_DMG *= 4.0; + SetDamage("dmg"); + return; + if ((IsValidPlayer(param1))) + { + NEXT_PUSH_ALERT = 10.0; + NEXT_PUSH_ALERT += GetGameTime(); + SendColoredMessage(param1, "Your push immunity causes you to absorb the " + GetEntityName(GetOwner()) + " 's sheer strength as extra damage!"); + } + } + } + + void OnDamage(int damage) override + { + if ((WYRM_PITHUNTER)) + { + if (GetEntityHealth(GetOwner()) >= (GetEntityMaxHealth(GetOwner()) * 0.75)) + { + DID_FLEE1 = 0; + } + if (GetEntityHealth(GetOwner()) >= (GetEntityMaxHealth(GetOwner()) * 0.50)) + { + DID_FLEE2 = 0; + } + if (GetEntityHealth(GetOwner()) >= (GetEntityMaxHealth(GetOwner()) * 0.25)) + { + DID_FLEE3 = 0; + } + } + if (GetEntityHealth(GetOwner()) < (GetEntityMaxHealth(GetOwner()) * 0.75)) + { + if (!(DID_FLEE1)) + { + } + DID_FLEE1 = 1; + NEXT_PITHUNT = GetGameTime(); + NEXT_PITHUNT += 20.0; + do_flee(); + } + if (GetEntityHealth(GetOwner()) < (GetEntityMaxHealth(GetOwner()) * 0.5)) + { + if (!(DID_FLEE2)) + { + } + DID_FLEE2 = 1; + NEXT_PITHUNT = GetGameTime(); + NEXT_PITHUNT += 20.0; + do_flee(); + } + if (GetEntityHealth(GetOwner()) < (GetEntityMaxHealth(GetOwner()) * 0.25)) + { + if (!(DID_FLEE3)) + { + } + DID_FLEE3 = 1; + NEXT_PITHUNT = GetGameTime(); + NEXT_PITHUNT += 20.0; + do_flee(); + } + } + + void wyrm_appear_fx() + { + if (WYRM_TYPE == "fire") + { + ClientEvent("new", "all", "effects/sfx_sprite", GetEntityOrigin(GetOwner()), "xfire.spr", "0;5.0;100;add;(255,255,255);20;20", "once"); + Bleed(GetOwner(), "yellow", RandomInt(100, 10000)); + Bleed(GetOwner(), "yellow", RandomInt(100, 10000)); + Bleed(GetOwner(), "yellow", RandomInt(100, 10000)); + Bleed(GetOwner(), "yellow", RandomInt(100, 10000)); + Bleed(GetOwner(), "yellow", RandomInt(100, 10000)); + Bleed(GetOwner(), "yellow", RandomInt(100, 10000)); + } + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void loop_lava() + { + // svplaysound: svplaysound 3 0 SOUND_LAVA_LOOP + EmitSound(3, 0, SOUND_LAVA_LOOP); + ScheduleDelayedEvent(0.1, "loop_lava_act"); + NEXT_LOOP_LAVA = GetGameTime(); + NEXT_LOOP_LAVA += RandomInt(20, 75.0); + } + + void loop_lava_act() + { + // svplaysound: svplaysound 3 LAVA_VOLUME SOUND_LAVA_LOOP + EmitSound(3, LAVA_VOLUME, SOUND_LAVA_LOOP); + } + + void start_quake() + { + Effect("glow", GetOwner(), Vector3(255, 128, 64), 128, DUR_QUAKE, DUR_QUAKE); + DO_QUAKE = 0; + GetAllPlayers(TARGET_LIST); + for (int i = 0; i < GetTokenCount(TARGET_LIST, ";"); i++) + { + quake_filter_range(); + } + LogDebug("start_quake targetlist TARGET_LIST"); + for (int i = 0; i < GetTokenCount(TARGET_LIST, ";"); i++) + { + quake_apply(); + } + } + + void quake_filter_range() + { + string L_CUR_PLR = GetToken(TARGET_LIST, i, ";"); + string L_PLR_ORG = GetEntityOrigin(L_CUR_PLR); + string L_MY_ORG = GetEntityOrigin(GetOwner()); + if (!(Distance(L_MY_ORG, L_PLR_ORG) > 1024)) return; + SetToken(TARGET_LIST, i, 0, ";"); + } + + void quake_apply() + { + string L_CUR_PLR = GetToken(TARGET_LIST, i, ";"); + if (!(L_CUR_PLR != 0)) return; + LogDebug("quake_apply GetEntityName(L_CUR_PLR)"); + CallExternal(L_CUR_PLR, "ext_quake_fx_volc", DUR_QUAKE, GetEntityIndex(GetOwner())); + } + + void ext_frock_hit() + { + string L_PLR = /* TODO: $get_by_idx */ $get_by_idx(param1, "id"); + LogDebug("ext_frock_hit PARAM1 GetEntityName(L_PLR)"); + XDoDamage(L_PLR, "direct", DMG_FROCK, 1.0, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:frock"); + } + + void glow_toggle() + { + if ((param1)) + { + if (WYRM_LIGHT_CLIDX != "WYRM_LIGHT_CLIDX") + { + ClientEvent("update", "all", WYRM_LIGHT_CLIDX, "remove_light"); + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), WYRM_GLOW_COLOR, 32, 30.0); + WYRM_LIGHT_CLIDX = "game.script.last_sent_id"; + NEXT_LIGHT_REFRESH = GetGameTime(); + NEXT_LIGHT_REFRESH += 30.0; + WYRM_LIGHT_ACTIVE = 1; + } + else + { + if (WYRM_LIGHT_CLIDX != "WYRM_LIGHT_CLIDX") + { + ClientEvent("update", "all", WYRM_LIGHT_CLIDX, "remove_light"); + WYRM_LIGHT_CLIDX = "WYRM_LIGHT_CLIDX"; + WYRM_LIGHT_ACTIVE = 0; + } + } + } + + void mmode_switch() + { + NEXT_MODE_SWITCH = 0; + } + + void do_flee() + { + NPCATK_TARGET = "unset"; + if (!(SUSPEND_AI)) + { + npcatk_suspend_ai(); + } + LogDebug("do_flee WYRM_MMODE"); + if ((WYRM_USE_BOTH)) + { + NEXT_MODE_SWITCH = FREQ_MODE_SWITCH; + NEXT_MODE_SWITCH += GetGameTime(); + wyrm_pick_movement_mode("flee"); + return; + } + if (WYRM_MMODE == "pits") + { + PlayAnim("once", "break"); + WYRM_PORTING_TO = "pit"; + find_next_pit("flee"); + wyrm_teleport("pitflee"); + } + if (WYRM_MMODE == "edges") + { + WYRM_NEXT_EDGE_IDX = RandomInt(0, (int(ARRAY_EDGE_POINTS.length()) - 1)); + WYRM_PORTING_TO = "edge"; + do_submerge(0, "flee"); + } + } + + void set_mmode() + { + if (!((param1).findFirst(PARAM) == 0)) return; + LogDebug("set_mmode PARAM1"); + WYRM_MMODE = param1; + if (WYRM_MMODE == "pits") + { + int L_PARAM_CORRECT = 1; + find_next_pit(); + } + if (WYRM_MMODE == "edges") + { + int L_PARAM_CORRECT = 1; + find_next_edge(); + } + if (WYRM_MMODE == "none") + { + int L_PARAM_CORRECT = 1; + if (NPC_HOME_LOC != "NPC_HOME_LOC") + { + SetEntityOrigin(GetOwner(), NPC_HOME_LOC); + } + } + ScheduleDelayedEvent(0.1, "wyrm_hide"); + LogDebug("set_mmode WYRM_MMODE"); + if ((L_PARAM_CORRECT)) return; + string L_OUTSG = GetEntityProperty(GetOwner(), "itemname"); + L_OUTSG += ": addparam set_mmode - must be pits, edges, or none"; + SendInfoMsg("all", "MAP ERROR " + L_OUTSG); + // TODO: chatlog GetTimestamp() MAP ERROR: L_OUTSG + } + + void set_noquakes() + { + NO_QUAKES = 1; + } + + void set_pithunt() + { + WYRM_PITHUNTER = 1; + } + + void set_endpithunt() + { + WYRM_PITHUNTER = 0; + } + + void set_edge_prefix() + { + if (!((param1).findFirst(PARAM) == 0)) return; + WYRM_EDGE_PREFIX = param1; + } + + void set_pit_prefix() + { + if (!((param1).findFirst(PARAM) == 0)) return; + WYRM_PIT_PREFIX = param1; + } + + void npc_targetvalidate() + { + if ((WYRM_TELEPORTING)) + { + NPCATK_TARGET = "unset"; + } + if ((WYRM_SUBMERGING)) + { + NPCATK_TARGET = "unset"; + } + if (m_hAttackTarget == "unset") + { + LogDebug("targetinvalidcuz: tele WYRM_TELEPORTING sub WYRM_SUBMERGING"); + } + if (!(WYRM_HIDE_MODE)) return; + if (!(GetEntityRange(m_hAttackTarget) > 256)) return; + NPCATK_TARGET = "unset"; + } + + void do_submerge() + { + LogDebug("do_submerge PARAM1 PARAM2"); + WYRM_SUBMERGING = 1; + WYRM_SUBMERGE_GOT_ENDFRAME = 0; + NPC_FLINCH_DISABLE = 1; + WYRM_NO_TELEPORT_FLAG = param1; + SetInvincible(true); + if ((WYRM_HIDE_MODE)) return; + NPCATK_TARGET = "unset"; + if (!(SUSPEND_AI)) + { + npcatk_suspend_ai(); + } + PlayAnim("critical", ANIM_RETRACT); + ScheduleDelayedEvent(3.0, "submerge_failsafe"); + } + +} + +} diff --git a/scripts/angelscript/monsters/zombie.as b/scripts/angelscript/monsters/zombie.as new file mode 100644 index 00000000..aaa7c159 --- /dev/null +++ b/scripts/angelscript/monsters/zombie.as @@ -0,0 +1,329 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Zombie : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DISEASE; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SWIPE; + string ANIM_WALK; + float ATTACK_DAMAGE; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int DID_WARCRY; + int DISEASE_DELAY; + float DISEASE_DMG; + int DISEASE_DUR; + float DISEASE_FREQ; + int FLINCH_CHANCE; + int I_ATTACKING; + int I_DISEASE; + string MONSTER_MODEL; + int NPC_GIVE_EXP; + int PAIN_DELAY; + string SOUND_DEATH; + string SOUND_HIT1; + string SOUND_HIT2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_MISS1; + string SOUND_MISS2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_RAGE1; + string SOUND_RAGE2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + string SOUND_WARCRY3; + string ZOMBIE_NAME; + + Zombie() + { + ZOMBIE_NAME = "Zombie"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_SWIPE = "attack1"; + ANIM_DISEASE = "attack2"; + ANIM_ATTACK = ANIM_SWIPE; + ANIM_DEATH = "diesimple"; + ANIM_IDLE = "idle1"; + ANIM_DEATH1 = "diesimple"; + ANIM_DEATH2 = "diebackward"; + ANIM_DEATH3 = "dieheadshot"; + ANIM_DEATH4 = "dieheadshot2"; + ANIM_DEATH5 = "dieforward"; + ANIM_DEATH = "diesimple"; + ANIM_FLINCH = "llflinch"; + CAN_FLINCH = 1; + FLINCH_CHANCE = 30; + SOUND_IDLE1 = "monsters/zombie1/zo_idle1.wav"; + SOUND_IDLE2 = "monsters/zombie1/zo_idle2.wav"; + SOUND_IDLE3 = "monsters/zombie1/zo_idle3.wav"; + SOUND_IDLE4 = "monsters/zombie1/zo_idle4.wav"; + SOUND_PAIN1 = "monsters/zombie1/zo_pain1.wav"; + SOUND_PAIN2 = "monsters/zombie1/zo_pain2.wav"; + SOUND_PAIN3 = "monsters/zombie1/zo_pain3.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_WARCRY1 = "monsters/zombie1/zo_alert10.wav"; + SOUND_WARCRY2 = "monsters/zombie1/zo_alert20.wav"; + SOUND_WARCRY3 = "monsters/zombie1/zo_alert30.wav"; + SOUND_RAGE1 = "monsters/zombie1/zo_attack1.wav"; + SOUND_RAGE2 = "monsters/zombie1/zo_attack2.wav"; + SOUND_DEATH = "monsters/zombie1/hitground.wav"; + SOUND_MISS1 = "zombie/claw_miss1.wav"; + SOUND_MISS2 = "zombie/claw_miss2.wav"; + SOUND_HIT1 = "zombie/claw_strike1.wav"; + SOUND_HIT2 = "zombie/claw_strike2.wav"; + Precache(SOUND_DEATH); + ATTACK_DAMAGE = Random(13, 25); + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 130; + ATTACK_HITCHANCE = 70; + ATTACK_MOVERANGE = 50; + DISEASE_FREQ = 10.0; + DISEASE_DMG = Random(3, 6); + DISEASE_DUR = RandomInt(20, 25); + NPC_GIVE_EXP = 60; + MONSTER_MODEL = "monsters/zombie_medium.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + SetName(ZOMBIE_NAME); + SetModel(MONSTER_MODEL); + int MAX_HP = RandomInt(100, 400); + SetHealth(MAX_HP); + SetWidth(25); + SetHeight(80); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetRace("undead"); + SetHearingSensitivity(7); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetGold(RandomInt(5, 15)); + SetDamageResistance("holy", 2.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("fire", 2.0); + SetDamageResistance("cold", 0.25); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("slash", 1.25); + ScheduleDelayedEvent(1.0, "idle_sounds"); + int PICK_DEATH = RandomInt(1, 5); + if (PICK_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (PICK_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (PICK_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (PICK_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (PICK_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + CatchSpeech("debug_props", "debug"); + } + + void debug_props() + { + SayText("My Atkrange " + ATTACK_RANGE + "vs. " + MIN_ATTACK_RANGE + " against game.monster.height"); + } + + void npc_selectattack() + { + if ((DISEASE_DELAY)) return; + DISEASE_DELAY = 1; + DISEASE_FREQ("reset_disease_delay"); + ANIM_ATTACK = ANIM_DISEASE; + } + + void reset_disease_delay() + { + DISEASE_DELAY = 0; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + DISEASE_DELAY = 1; + DISEASE_FREQ("reset_disease_delay"); + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2, SOUND_WARCRY3 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2, SOUND_WARCRY3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_1() + { + I_ATTACKING = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "blunt"); + } + + void attack_2() + { + I_ATTACKING = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "blunt"); + I_DISEASE = 1; + ANIM_ATTACK = ANIM_SWIPE; + } + + void game_dodamage() + { + if (!(I_ATTACKING)) return; + I_ATTACKING = 0; + if ((param1)) + { + // PlayRandomSound from: SOUND_HIT1, SOUND_HIT2 + array sounds = {SOUND_HIT1, SOUND_HIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_MISS1, SOUND_MISS2 + array sounds = {SOUND_MISS1, SOUND_MISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(I_DISEASE)) return; + I_DISEASE = 0; + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_poison", DISEASE_DUR, GetEntityIndex(GetOwner()), DISEASE_DMG, "none"); + } + + void idle_sounds() + { + if (m_hAttackTarget == "unset") + { + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (m_hAttackTarget != "unset") + { + // PlayRandomSound from: SOUND_RAGE1, SOUND_RAGE2 + array sounds = {SOUND_RAGE1, SOUND_RAGE2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + float NEXT_SOUND = Random(4, 15); + NEXT_SOUND("idle_sounds"); + } + + void walk_step1() + { + EmitSound(GetOwner(), 0, "common/npc_step1.wav", 10); + } + + void walk_step2() + { + EmitSound(GetOwner(), 0, "common/npc_step3.wav", 10); + } + + void walk_step3() + { + EmitSound(GetOwner(), 0, "common/npc_step2.wav", 10); + } + + void walk_step4() + { + EmitSound(GetOwner(), 0, "common/npc_step4.wav", 10); + } + + void walk_step5() + { + EmitSound(GetOwner(), 0, "common/npc_step1.wav", 10); + } + + void walk_step6() + { + EmitSound(GetOwner(), 0, "common/npc_step3.wav", 10); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + + void cycle_down() + { + DID_WARCRY = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(PAIN_DELAY)) + { + ScheduleDelayedEvent(0.1, "pain_sound"); + } + } + + void pain_sound() + { + PAIN_DELAY = 1; + string Random(5, 10) = NEXT_PAIN; + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_PAIN("pain_delay_reset"); + } + + void pain_delay_reset() + { + PAIN_DELAY = 0; + } + + void OnFlinch() + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/zombie_bile.as b/scripts/angelscript/monsters/zombie_bile.as new file mode 100644 index 00000000..3939c9d5 --- /dev/null +++ b/scripts/angelscript/monsters/zombie_bile.as @@ -0,0 +1,72 @@ +#pragma context server + +#include "monsters/zombie.as" + +namespace MS +{ + +class ZombieBile : CGameScript +{ + string ANIM_ATTACK; + string AS_ATTACKING; + int DMG_PROJECTILE; + int DOING_PROJECTILE; + int I_ATTACKING; + string I_DISEASE; + string NEXT_BILE; + int NPC_BASE_EXP; + string SOUND_SHOOT1; + string SOUND_SHOOT2; + string ZOMBIE_NAME; + + ZombieBile() + { + DMG_PROJECTILE = 20; + NPC_BASE_EXP = 80; + ZOMBIE_NAME = "Byle Zombie"; + SOUND_SHOOT1 = "bullchicken/bc_attack2.wav"; + SOUND_SHOOT2 = "bullchicken/bc_attack3.wav"; + } + + void npc_targetsighted() + { + if (!(GetGameTime() > NEXT_BILE)) return; + NEXT_BILE = GetGameTime(); + NEXT_BILE += 3.0; + if (!(GetEntityRange(m_hAttackTarget) > 256)) return; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("critical", ANIM_DISEASE); + DOING_PROJECTILE = 1; + } + + void attack_2() + { + I_ATTACKING = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "blunt"); + if ((DOING_PROJECTILE)) + { + // PlayRandomSound from: SOUND_SHOOT1, SOUND_SHOOT2 + array sounds = {SOUND_SHOOT1, SOUND_SHOOT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (RandomInt(1, 5) == 1) + { + TossProjectile("proj_poison_spit2", /* TODO: $relpos */ $relpos(0, 10, 24), m_hAttackTarget, 300, DMG_PROJECTILE, 2, "none"); + Effect("glow", "ent_lastprojectile", Vector3(0, 255, 0), 64, -1, 0); + } + else + { + TossProjectile("proj_poison", /* TODO: $relpos */ $relpos(0, 10, 24), m_hAttackTarget, 300, DMG_PROJECTILE, 2, "none"); + } + } + if (!(DOING_PROJECTILE)) + { + I_DISEASE = 1; + ANIM_ATTACK = ANIM_SWIPE; + } + DOING_PROJECTILE = 0; + } + +} + +} diff --git a/scripts/angelscript/monsters/zombie_decayed.as b/scripts/angelscript/monsters/zombie_decayed.as new file mode 100644 index 00000000..1f0102d9 --- /dev/null +++ b/scripts/angelscript/monsters/zombie_decayed.as @@ -0,0 +1,326 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class ZombieDecayed : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DISEASE; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SWIPE; + string ANIM_WALK; + float ATTACK_DAMAGE; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int DID_WARCRY; + int DISEASE_DELAY; + float DISEASE_DMG; + int DISEASE_DUR; + float DISEASE_FREQ; + int FLINCH_CHANCE; + int I_ATTACKING; + int I_DISEASE; + string MONSTER_MODEL; + int NPC_GIVE_EXP; + int PAIN_DELAY; + string SOUND_DEATH; + string SOUND_HIT1; + string SOUND_HIT2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_MISS1; + string SOUND_MISS2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_RAGE1; + string SOUND_RAGE2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + string SOUND_WARCRY3; + + ZombieDecayed() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_SWIPE = "attack1"; + ANIM_DISEASE = "attack2"; + ANIM_ATTACK = ANIM_SWIPE; + ANIM_IDLE = "idle1"; + ANIM_DEATH1 = "diesimple"; + ANIM_DEATH2 = "diebackward"; + ANIM_DEATH3 = "dieheadshot"; + ANIM_DEATH4 = "dieheadshot2"; + ANIM_DEATH5 = "dieforward"; + ANIM_DEATH = ANIM_DEATH1; + ANIM_FLINCH = "llflinch"; + CAN_FLINCH = 1; + FLINCH_CHANCE = 30; + SOUND_IDLE1 = "monsters/zombie1/zo_idle1.wav"; + SOUND_IDLE2 = "monsters/zombie1/zo_idle2.wav"; + SOUND_IDLE3 = "monsters/zombie1/zo_idle3.wav"; + SOUND_IDLE4 = "monsters/zombie1/zo_idle4.wav"; + SOUND_PAIN1 = "monsters/zombie1/zo_pain1.wav"; + SOUND_PAIN2 = "monsters/zombie1/zo_pain2.wav"; + SOUND_PAIN3 = "monsters/zombie1/zo_pain3.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_WARCRY1 = "monsters/zombie1/zo_alert10.wav"; + SOUND_WARCRY2 = "monsters/zombie1/zo_alert20.wav"; + SOUND_WARCRY3 = "monsters/zombie1/zo_alert30.wav"; + SOUND_RAGE1 = "monsters/zombie1/zo_attack1.wav"; + SOUND_RAGE2 = "monsters/zombie1/zo_attack2.wav"; + SOUND_DEATH = "monsters/zombie1/hitground.wav"; + SOUND_MISS1 = "zombie/claw_miss1.wav"; + SOUND_MISS2 = "zombie/claw_miss2.wav"; + SOUND_HIT1 = "zombie/claw_strike1.wav"; + SOUND_HIT2 = "zombie/claw_strike2.wav"; + Precache(SOUND_DEATH); + ATTACK_DAMAGE = Random(3, 5); + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 130; + ATTACK_HITCHANCE = 60; + ATTACK_MOVERANGE = 40; + DISEASE_FREQ = 10.0; + DISEASE_DMG = Random(0.25, 2); + DISEASE_DUR = RandomInt(10, 20); + NPC_GIVE_EXP = 20; + MONSTER_MODEL = "monsters/decayed_zombie.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + SetName("Decayed Zombie"); + SetModel(MONSTER_MODEL); + int MAX_HP = RandomInt(30, 100); + SetHealth(MAX_HP); + SetWidth(20); + SetHeight(60); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetRace("undead"); + SetHearingSensitivity(7); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetGold(RandomInt(0, 3)); + SetDamageResistance("holy", 4.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("fire", 2.0); + SetDamageResistance("cold", 0.25); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("slash", 1.25); + int PICK_DEATH = RandomInt(1, 5); + if (PICK_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (PICK_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (PICK_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (PICK_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (PICK_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + ScheduleDelayedEvent(1.0, "idle_sounds"); + CatchSpeech("debug_props", "debug"); + } + + void debug_props() + { + SayText("My Atkrange " + ATTACK_RANGE + "vs. " + MIN_ATTACK_RANGE + " against game.monster.height"); + } + + void npc_selectattack() + { + if ((DISEASE_DELAY)) return; + DISEASE_DELAY = 1; + DISEASE_FREQ("reset_disease_delay"); + ANIM_ATTACK = ANIM_DISEASE; + } + + void reset_disease_delay() + { + DISEASE_DELAY = 0; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + DISEASE_DELAY = 1; + DISEASE_FREQ("reset_disease_delay"); + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2, SOUND_WARCRY3 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2, SOUND_WARCRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_1() + { + I_ATTACKING = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "blunt"); + } + + void attack_2() + { + I_ATTACKING = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "blunt"); + I_DISEASE = 1; + ANIM_ATTACK = ANIM_SWIPE; + } + + void game_dodamage() + { + if (!(I_ATTACKING)) return; + I_ATTACKING = 0; + if ((param1)) + { + // PlayRandomSound from: SOUND_HIT1, SOUND_HIT2 + array sounds = {SOUND_HIT1, SOUND_HIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_MISS1, SOUND_MISS2 + array sounds = {SOUND_MISS1, SOUND_MISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(I_DISEASE)) return; + I_DISEASE = 0; + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_poison", DISEASE_DUR, GetEntityIndex(GetOwner()), DISEASE_DMG, "none"); + } + + void idle_sounds() + { + if (m_hAttackTarget == "unset") + { + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (m_hAttackTarget != "unset") + { + // PlayRandomSound from: SOUND_RAGE1, SOUND_RAGE2 + array sounds = {SOUND_RAGE1, SOUND_RAGE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + float NEXT_SOUND = Random(4, 15); + NEXT_SOUND("idle_sounds"); + } + + void walk_step1() + { + EmitSound(GetOwner(), 0, "common/npc_step1.wav", 10); + } + + void walk_step2() + { + EmitSound(GetOwner(), 0, "common/npc_step3.wav", 10); + } + + void walk_step3() + { + EmitSound(GetOwner(), 0, "common/npc_step2.wav", 10); + } + + void walk_step4() + { + EmitSound(GetOwner(), 0, "common/npc_step4.wav", 10); + } + + void walk_step5() + { + EmitSound(GetOwner(), 0, "common/npc_step1.wav", 10); + } + + void walk_step6() + { + EmitSound(GetOwner(), 0, "common/npc_step3.wav", 10); + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + + void cycle_down() + { + DID_WARCRY = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(PAIN_DELAY)) + { + ScheduleDelayedEvent(0.1, "pain_sound"); + } + } + + void pain_sound() + { + PAIN_DELAY = 1; + string Random(5, 10) = NEXT_PAIN; + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_PAIN("pain_delay_reset"); + } + + void pain_delay_reset() + { + PAIN_DELAY = 0; + } + + void OnFlinch() + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/zombie_decayed_nr.as b/scripts/angelscript/monsters/zombie_decayed_nr.as new file mode 100644 index 00000000..139453d5 --- /dev/null +++ b/scripts/angelscript/monsters/zombie_decayed_nr.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/zombie_decayed.as" + +namespace MS +{ + +class ZombieDecayedNr : CGameScript +{ + int ME_NO_WANDER; + + ZombieDecayedNr() + { + ME_NO_WANDER = 1; + } + +} + +} diff --git a/scripts/angelscript/monsters/zombie_huge.as b/scripts/angelscript/monsters/zombie_huge.as new file mode 100644 index 00000000..213fc961 --- /dev/null +++ b/scripts/angelscript/monsters/zombie_huge.as @@ -0,0 +1,378 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class ZombieHuge : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DISEASE; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SWIPE; + string ANIM_WALK; + float ATTACK_DAMAGE; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int DID_WARCRY; + int DISEASE_DELAY; + float DISEASE_DMG; + int DISEASE_DUR; + float DISEASE_FREQ; + string FLINCH_ANIM; + int FLINCH_CHANCE; + int HEAR_RANGE_MAX; + int HEAR_RANGE_PLAYER; + int I_ATTACKING; + int I_DISEASE; + int ME_NO_WANDER; + string MONSTER_MODEL; + int NPC_GIVE_EXP; + int PAIN_DELAY; + string SOUND_DEATH; + string SOUND_HIT1; + string SOUND_HIT2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_MISS1; + string SOUND_MISS2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_RAGE1; + string SOUND_RAGE2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + string SOUND_WARCRY3; + + ZombieHuge() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_SWIPE = "attack1"; + ANIM_DISEASE = "attack2"; + ANIM_ATTACK = ANIM_SWIPE; + ANIM_DEATH = "diesimple"; + ANIM_IDLE = "idle1"; + ANIM_DEATH1 = "diesimple"; + ANIM_DEATH2 = "diebackward"; + ANIM_DEATH3 = "dieheadshot"; + ANIM_DEATH4 = "dieheadshot2"; + ANIM_DEATH5 = "dieforward"; + ANIM_DEATH = ANIM_DEATH1; + CAN_FLINCH = 1; + FLINCH_CHANCE = 10; + SOUND_IDLE1 = "garg/gar_breathe1.wav"; + SOUND_IDLE2 = "garg/gar_breathe2.wav"; + SOUND_IDLE3 = "garg/gar_breathe3.wav"; + SOUND_IDLE4 = "garg/gar_idle4.wav"; + SOUND_PAIN1 = "garg/gar_idle1.wav"; + SOUND_PAIN2 = "garg/gar_idle2.wav"; + SOUND_PAIN3 = "garg/gar_idle3.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_WARCRY1 = "garg/gar_alert1.wav"; + SOUND_WARCRY2 = "garg/gar_alert2.wav"; + SOUND_WARCRY3 = "garg/gar_alert3.wav"; + SOUND_RAGE1 = "garg/gar_attack1.wav"; + SOUND_RAGE2 = "garg/gar_attack2.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_MISS1 = "zombie/claw_miss1.wav"; + SOUND_MISS2 = "zombie/claw_miss2.wav"; + SOUND_HIT1 = "zombie/claw_strike1.wav"; + SOUND_HIT2 = "zombie/claw_strike2.wav"; + Precache(SOUND_DEATH); + ATTACK_DAMAGE = Random(50, 80); + ATTACK_RANGE = 120; + ATTACK_HITRANGE = 150; + ATTACK_HITCHANCE = 80; + ATTACK_MOVERANGE = 80; + DISEASE_FREQ = 5.0; + DISEASE_DMG = Random(13, 16); + DISEASE_DUR = RandomInt(20, 25); + NPC_GIVE_EXP = 150; + MONSTER_MODEL = "monsters/zombie_huge.mdl"; + Precache(MONSTER_MODEL); + ME_NO_WANDER = 1; + HEAR_RANGE_MAX = 200; + HEAR_RANGE_PLAYER = 200; + } + + void game_precache() + { + Precache("chests/islesofdread1"); + } + + void OnSpawn() override + { + SetName("Giant Zombie"); + SetModel(MONSTER_MODEL); + int MAX_HP = RandomInt(2000, 4000); + SetHealth(MAX_HP); + SetWidth(50); + if (StringToLower(GetMapName()) != "challs") + { + SetHeight(110); + } + else + { + SetHeight(72); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + PlayAnim("once", ANIM_IDLE); + SetRace("undead"); + SetHearingSensitivity(3); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetGold(RandomInt(40, 100)); + if (GetMapName() == "challs") + { + SetName("Iuluz the Giant"); + if (RandomInt(1, 5) == 1) + { + } + GiveItem(GetOwner(), "mana_vampire"); + } + SetDamageResistance("holy", 1.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("fire", 2.0); + SetDamageResistance("cold", 0.25); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("slash", 1.25); + ScheduleDelayedEvent(1.0, "idle_sounds"); + CatchSpeech("debug_props", "debug"); + } + + void debug_props() + { + SayText("My Atkrange " + ATTACK_RANGE + "vs. " + MIN_ATTACK_RANGE + " against game.monster.height"); + } + + void npc_selectattack() + { + if ((DISEASE_DELAY)) return; + DISEASE_DELAY = 1; + DISEASE_FREQ("reset_disease_delay"); + ANIM_ATTACK = ANIM_DISEASE; + } + + void reset_disease_delay() + { + DISEASE_DELAY = 0; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + DISEASE_DELAY = 1; + DISEASE_FREQ("reset_disease_delay"); + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2, SOUND_WARCRY3 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2, SOUND_WARCRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_1() + { + I_ATTACKING = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "blunt"); + } + + void attack_2() + { + I_ATTACKING = 1; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "blunt"); + I_DISEASE = 1; + ANIM_ATTACK = ANIM_SWIPE; + } + + void game_dodamage() + { + if (!(I_ATTACKING)) return; + I_ATTACKING = 0; + if ((param1)) + { + // PlayRandomSound from: SOUND_HIT1, SOUND_HIT2 + array sounds = {SOUND_HIT1, SOUND_HIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_MISS1, SOUND_MISS2 + array sounds = {SOUND_MISS1, SOUND_MISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(I_DISEASE)) return; + I_DISEASE = 0; + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_poison", DISEASE_DUR, GetEntityIndex(GetOwner()), DISEASE_DMG, "none"); + } + + void idle_sounds() + { + if (m_hAttackTarget == "unset") + { + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (m_hAttackTarget != "unset") + { + // PlayRandomSound from: SOUND_RAGE1, SOUND_RAGE2 + array sounds = {SOUND_RAGE1, SOUND_RAGE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + float NEXT_SOUND = Random(4, 15); + NEXT_SOUND("idle_sounds"); + } + + void walk_step1() + { + EmitSound(GetOwner(), 0, "garg/gar_step1.wav", 10); + } + + void walk_step2() + { + EmitSound(GetOwner(), 0, "garg/gar_step2.wav", 10); + } + + void walk_step3() + { + EmitSound(GetOwner(), 0, "garg/gar_step1.wav", 10); + } + + void walk_step4() + { + EmitSound(GetOwner(), 0, "garg/gar_step2.wav", 10); + } + + void walk_step5() + { + EmitSound(GetOwner(), 0, "garg/gar_step1.wav", 10); + } + + void walk_step6() + { + EmitSound(GetOwner(), 0, "garg/gar_step2.wav", 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int PICK_DEATH = RandomInt(1, 5); + if (PICK_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (PICK_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (PICK_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (PICK_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (PICK_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + if ((StringToLower(GetMapName())).findFirst("islesofdread1") >= 0) + { + SpawnNPC("chests/islesofdread1", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); + } + } + + void cycle_up() + { + if ((ME_NO_WANDER)) + { + SetRoam(true); + } + } + + void cycle_down() + { + DID_WARCRY = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(PAIN_DELAY)) + { + ScheduleDelayedEvent(0.1, "pain_sound"); + } + } + + void pain_sound() + { + PAIN_DELAY = 1; + string Random(5, 10) = NEXT_PAIN; + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_PAIN("pain_delay_reset"); + } + + void pain_delay_reset() + { + PAIN_DELAY = 0; + } + + void OnFlinch() + { + int R_FLINCH = RandomInt(1, 4); + if (R_FLINCH == 1) + { + FLINCH_ANIM = "flinchsmall"; + } + if (R_FLINCH == 2) + { + FLINCH_ANIM = "flinch"; + } + if (R_FLINCH == 3) + { + FLINCH_ANIM = "bigflinch"; + } + if (R_FLINCH == 4) + { + FLINCH_ANIM = "llflinch"; + } + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/monsters/zombie_zygol.as b/scripts/angelscript/monsters/zombie_zygol.as new file mode 100644 index 00000000..9fcbdcc0 --- /dev/null +++ b/scripts/angelscript/monsters/zombie_zygol.as @@ -0,0 +1,506 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class ZombieZygol : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEATH1; + string ANIM_DEATH2; + string ANIM_DEATH3; + string ANIM_DEATH4; + string ANIM_DEATH5; + string ANIM_DISEASE; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SWIPE; + string ANIM_WALK; + float ATTACK_DAMAGE; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float BASE_FRAMERATE; + float BASE_MOVERATE; + float BEAM_DUR; + int CAN_FLINCH; + int DID_WARCRY; + int DISEASE_DELAY; + float DISEASE_DMG; + int DISEASE_DUR; + float DISEASE_FREQ; + int EYE_HP; + int EYE_POWER; + string FLINCH_ANIM; + int FLINCH_CHANCE; + float FREQ_TBEAM; + int HEAR_RANGE_MAX; + int HEAR_RANGE_PLAYER; + int I_ATTACKING; + int I_DISEASE; + int ME_NO_WANDER; + string MONSTER_MODEL; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_GIVE_EXP; + string NPC_IS_BOSS; + int N_EYES; + int PAIN_DELAY; + string SOUND_DEATH; + string SOUND_HIT1; + string SOUND_HIT2; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_MISS1; + string SOUND_MISS2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_RAGE1; + string SOUND_RAGE2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_WARCRY1; + string SOUND_WARCRY2; + string SOUND_WARCRY3; + int TBEAM_DELAY; + string TBEAM_IDX; + string TBEAM_LASTFX; + int TBEAM_ON; + string TBEAM_TARG; + int TBEAM_VIS; + + ZombieZygol() + { + if (StringToLower(GetMapName()) == "lostcaverns") + { + NPC_IS_BOSS = 1; + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 0.5; + FREQ_TBEAM = 30.0; + BEAM_DUR = 15.0; + EYE_HP = 1000; + EYE_POWER = 50; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_SWIPE = "attack1"; + ANIM_DISEASE = "attack2"; + ANIM_ATTACK = ANIM_SWIPE; + ANIM_DEATH = "diesimple"; + ANIM_IDLE = "idle1"; + ANIM_DEATH1 = "diesimple"; + ANIM_DEATH2 = "diebackward"; + ANIM_DEATH3 = "dieheadshot"; + ANIM_DEATH4 = "dieheadshot2"; + ANIM_DEATH5 = "dieforward"; + ANIM_DEATH = ANIM_DEATH1; + CAN_FLINCH = 1; + FLINCH_CHANCE = 30; + SOUND_IDLE1 = "garg/gar_breathe1.wav"; + SOUND_IDLE2 = "garg/gar_breathe2.wav"; + SOUND_IDLE3 = "garg/gar_breathe3.wav"; + SOUND_IDLE4 = "garg/gar_idle4.wav"; + SOUND_PAIN1 = "garg/gar_idle1.wav"; + SOUND_PAIN2 = "garg/gar_idle2.wav"; + SOUND_PAIN3 = "garg/gar_idle3.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_WARCRY1 = "garg/gar_alert1.wav"; + SOUND_WARCRY2 = "garg/gar_alert2.wav"; + SOUND_WARCRY3 = "garg/gar_alert3.wav"; + SOUND_RAGE1 = "garg/gar_attack1.wav"; + SOUND_RAGE2 = "garg/gar_attack2.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_MISS1 = "zombie/claw_miss1.wav"; + SOUND_MISS2 = "zombie/claw_miss2.wav"; + SOUND_HIT1 = "zombie/claw_strike1.wav"; + SOUND_HIT2 = "zombie/claw_strike2.wav"; + Precache(SOUND_DEATH); + ATTACK_DAMAGE = Random(100, 200); + ATTACK_RANGE = 120; + ATTACK_HITRANGE = 150; + ATTACK_HITCHANCE = 80; + ATTACK_MOVERANGE = 80; + DISEASE_FREQ = 5.0; + DISEASE_DMG = Random(13, 16); + DISEASE_DUR = RandomInt(20, 25); + NPC_GIVE_EXP = 1000; + MONSTER_MODEL = "monsters/zombie_huge.mdl"; + Precache(MONSTER_MODEL); + ME_NO_WANDER = 1; + HEAR_RANGE_MAX = 200; + HEAR_RANGE_PLAYER = 200; + } + + void OnSpawn() override + { + SetName("Zygoli , The All Seeing"); + SetModel(MONSTER_MODEL); + SetHealth(6000); + SetWidth(50); + SetHeight(110); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + PlayAnim("once", ANIM_IDLE); + SetRace("undead"); + SetHearingSensitivity(3); + SetRoam(true); + SetDamageResistance("holy", 1.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("fire", 2.0); + SetDamageResistance("cold", 0.25); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("slash", 1.0); + BASE_MOVERATE = 1.5; + BASE_FRAMERATE = 1.5; + SetMoveSpeed(1.5); + SetAnimMoveSpeed(1.5); + SetAnimFrameRate(1.5); + ScheduleDelayedEvent(1.0, "idle_sounds"); + ScheduleDelayedEvent(0.1, "setup_eyes"); + } + + void setup_eyes() + { + N_EYES = 4; + update_eyes(); + string EYE_POS = GetEntityOrigin(GetOwner()); + EYE_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 64, 100)); + SpawnNPC("monsters/summon/zy_eye", EYE_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), EYE_HP, EYE_POWER + ScheduleDelayedEvent(0.1, "setup_eye2"); + } + + void setup_eye2() + { + string EYE_POS = GetEntityOrigin(GetOwner()); + EYE_POS += /* TODO: $relpos */ $relpos(Vector3(0, 90, 0), Vector3(0, 64, 100)); + SpawnNPC("monsters/summon/zy_eye", EYE_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), EYE_HP, EYE_POWER + ScheduleDelayedEvent(0.1, "setup_eye3"); + } + + void setup_eye3() + { + string EYE_POS = GetEntityOrigin(GetOwner()); + EYE_POS += /* TODO: $relpos */ $relpos(Vector3(0, 180, 0), Vector3(0, 64, 100)); + SpawnNPC("monsters/summon/zy_eye", EYE_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), EYE_HP, EYE_POWER + ScheduleDelayedEvent(0.1, "setup_eye4"); + } + + void setup_eye4() + { + string EYE_POS = GetEntityOrigin(GetOwner()); + EYE_POS += /* TODO: $relpos */ $relpos(Vector3(0, 270, 0), Vector3(0, 64, 100)); + SpawnNPC("monsters/summon/zy_eye", EYE_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), EYE_HP, EYE_POWER + } + + void respawn_eye() + { + SendInfoMsg("all", "ZYGOLI THE ALL SEEING Has summoned a new eye."); + N_EYES += 1; + SpawnNPC("monsters/summon/zy_eye", /* TODO: $relpos */ $relpos(0, 0, 150), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), EYE_HP, EYE_POWER + ScheduleDelayedEvent(0.1, "update_eyes"); + } + + void ext_eye_died() + { + N_EYES -= 1; + npc_flinch(); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 200, 1.0, 1.0); + ScheduleDelayedEvent(0.1, "update_eyes"); + ScheduleDelayedEvent(120.0, "respawn_eye"); + } + + void update_eyes() + { + if (N_EYES == 0) + { + SetDamageResistance("all", 1.0); + } + if (N_EYES == 1) + { + SetDamageResistance("all", 0.5); + } + if (N_EYES == 2) + { + SetDamageResistance("all", 0.3); + } + if (N_EYES == 3) + { + SetDamageResistance("all", 0.1); + } + if (N_EYES < 4) + { + SetInvincible(false); + } + if (N_EYES == 4) + { + SetDamageResistance("all", 0.0); + SetInvincible(true); + } + } + + void idle_sounds() + { + if (m_hAttackTarget == "unset") + { + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (m_hAttackTarget != "unset") + { + // PlayRandomSound from: SOUND_RAGE1, SOUND_RAGE2 + array sounds = {SOUND_RAGE1, SOUND_RAGE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + float NEXT_SOUND = Random(4, 15); + NEXT_SOUND("idle_sounds"); + } + + void walk_step1() + { + EmitSound(GetOwner(), 0, "garg/gar_step1.wav", 10); + } + + void walk_step2() + { + EmitSound(GetOwner(), 0, "garg/gar_step2.wav", 10); + } + + void walk_step3() + { + EmitSound(GetOwner(), 0, "garg/gar_step1.wav", 10); + } + + void walk_step4() + { + EmitSound(GetOwner(), 0, "garg/gar_step2.wav", 10); + } + + void walk_step5() + { + EmitSound(GetOwner(), 0, "garg/gar_step1.wav", 10); + } + + void walk_step6() + { + EmitSound(GetOwner(), 0, "garg/gar_step2.wav", 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + int PICK_DEATH = RandomInt(1, 5); + if (PICK_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (PICK_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (PICK_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (PICK_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (PICK_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(PAIN_DELAY)) + { + ScheduleDelayedEvent(0.1, "pain_sound"); + } + } + + void pain_sound() + { + PAIN_DELAY = 1; + string Random(5, 10) = NEXT_PAIN; + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_PAIN("pain_delay_reset"); + } + + void pain_delay_reset() + { + PAIN_DELAY = 0; + } + + void OnFlinch() + { + int R_FLINCH = RandomInt(1, 4); + if (R_FLINCH == 1) + { + FLINCH_ANIM = "flinchsmall"; + } + if (R_FLINCH == 2) + { + FLINCH_ANIM = "flinch"; + } + if (R_FLINCH == 3) + { + FLINCH_ANIM = "bigflinch"; + } + if (R_FLINCH == 4) + { + FLINCH_ANIM = "llflinch"; + } + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void attack_1() + { + I_ATTACKING = 1; + string F_ATTACK_DAMAGE = ATTACK_DAMAGE; + F_ATTACK_DAMAGE *= N_EYES; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, F_ATTACK_DAMAGE, ATTACK_HITCHANCE, "blunt"); + } + + void attack_2() + { + I_ATTACKING = 1; + string F_ATTACK_DAMAGE = ATTACK_DAMAGE; + F_ATTACK_DAMAGE *= N_EYES; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, F_ATTACK_DAMAGE, ATTACK_HITCHANCE, "blunt"); + I_DISEASE = 1; + ANIM_ATTACK = ANIM_SWIPE; + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + DISEASE_DELAY = 1; + DISEASE_FREQ("reset_disease_delay"); + // PlayRandomSound from: SOUND_WARCRY1, SOUND_WARCRY2, SOUND_WARCRY3 + array sounds = {SOUND_WARCRY1, SOUND_WARCRY2, SOUND_WARCRY3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + FREQ_TBEAM("do_tbeam"); + } + + void npc_selectattack() + { + if ((DISEASE_DELAY)) return; + DISEASE_DELAY = 1; + DISEASE_FREQ("reset_disease_delay"); + ANIM_ATTACK = ANIM_DISEASE; + } + + void game_dodamage() + { + if (!(I_ATTACKING)) return; + I_ATTACKING = 0; + if ((param1)) + { + // PlayRandomSound from: SOUND_HIT1, SOUND_HIT2 + array sounds = {SOUND_HIT1, SOUND_HIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(param1)) + { + // PlayRandomSound from: SOUND_MISS1, SOUND_MISS2 + array sounds = {SOUND_MISS1, SOUND_MISS2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (!(I_DISEASE)) return; + I_DISEASE = 0; + if (!(param1)) return; + ApplyEffect(param2, "effects/dot_poison", DISEASE_DUR, GetEntityIndex(GetOwner()), DISEASE_DMG, "none"); + } + + void reset_tbeam_delay() + { + TBEAM_DELAY = 0; + } + + void do_tbeam() + { + FREQ_TBEAM("do_tbeam"); + if (!(false)) return; + TBEAM_TARG = GetEntityIndex(m_hLastSeen); + TBEAM_ON = 1; + TBEAM_VIS = 0; + tbeam_loop(); + BEAM_DUR("end_tbeam"); + } + + void end_tbeam() + { + ClientEvent("update", "all", TBEAM_IDX, "dbeam_off"); + TBEAM_ON = 0; + TBEAM_VIS = 0; + } + + void tbeam_loop() + { + if (!(TBEAM_ON)) return; + ScheduleDelayedEvent(0.2, "tbeam_loop"); + string CAN_SEE_BTARG = false; + if ((CAN_SEE_BTARG)) + { + AddVelocity(TBEAM_TARG, /* TODO: $relvel */ $relvel(10, -300, 10)); + if (GetEntityRange(TBEAM_TARG) > ATTACK_RANGE) + { + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(TBEAM_TARG); + } + if (!(TBEAM_VIS)) + { + TBEAM_VIS = 1; + ClientEvent("update", "all", TBEAM_IDX, "dbeam_target", GetEntityIndex(TBEAM_TARG)); + } + float DIFF_TIME = GetGameTime(); + DIFF_TIME -= TBEAM_LASTFX; + if (DIFF_TIME > 5.0) + { + } + TBEAM_LASTFX = GetGameTime(); + DoDamage(TBEAM_TARG, "direct", 10.0, 1.0, GetOwner()); + EmitSound(GetOwner(), 0, "magic/pulsemachine_noloop.wav", 5); + } + if (!(CAN_SEE_BTARG)) + { + TBEAM_VIS = 0; + ClientEvent("update", "all", TBEAM_IDX, "dbeam_off"); + } + } + + void OnPostSpawn() override + { + ClientEvent("new", "all", "effects/dynamic_beam_cl", GetEntityIndex(GetOwner()), Vector3(255, 0, 0), 100); + TBEAM_IDX = "game.script.last_sent_id"; + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("update", "all", TBEAM_IDX, "effect_die"); + CallExternal("all", "zygoli_died"); + } + +} + +} diff --git a/scripts/angelscript/monsters/zorc_archer1.as b/scripts/angelscript/monsters/zorc_archer1.as new file mode 100644 index 00000000..eba7694b --- /dev/null +++ b/scripts/angelscript/monsters/zorc_archer1.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "monsters/orc_sniper.as" + +namespace MS +{ + +class ZorcArcher1 : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + string ARROW_TYPE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int BO_ZOMBIE_MODE; + int DMG_BOW; + int DMG_KICK; + int DMG_SMASH; + int DMG_SWIPE; + int DOING_KICK; + int KICK_TYPE; + int NO_STUCK_CHECKS; + int NPC_BASE_EXP; + string SOUND_BOW; + + ZorcArcher1() + { + NPC_BASE_EXP = 200; + DMG_BOW = 400; + DMG_SMASH = 200; + DMG_SWIPE = 100; + DMG_KICK = 100; + BO_ZOMBIE_MODE = 1; + ARROW_TYPE = "proj_arrow_npc_dyn"; + SOUND_BOW = "monsters/archer/bow.wav"; + } + + void orc_spawn() + { + SetHealth(3000); + SetName("Undead Orc Archer"); + SetHearingSensitivity(2); + SetDamageResistance("all", ".8"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("cold", 0.25); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("fire", 1.25); + SetAnimFrameRate(0.75); + BASE_FRAMERATE = 0.75; + SetRace("undead"); + DOING_KICK = 0; + KICK_TYPE = 1; + SetModelBody(0, 3); + SetModelBody(1, 0); + SetModelBody(2, 3); + SetProp(GetOwner(), "skin", 1); + } + + void ext_arrow_hit() + { + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 200, 110)); + } + + void set_turret() + { + if (!(NO_STUCK_CHECKS)) + { + ScheduleDelayedEvent(0.1, "set_turret"); + } + SetMoveSpeed(0.0); + BASE_MOVESPEED = 0.0; + SetMoveAnim(ANIM_IDLE); + SetRoam(false); + NO_STUCK_CHECKS = 1; + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + } + +} + +} diff --git a/scripts/angelscript/monsters/zorc_archer2.as b/scripts/angelscript/monsters/zorc_archer2.as new file mode 100644 index 00000000..eff06ccc --- /dev/null +++ b/scripts/angelscript/monsters/zorc_archer2.as @@ -0,0 +1,84 @@ +#pragma context server + +#include "monsters/orc_sniper.as" + +namespace MS +{ + +class ZorcArcher2 : CGameScript +{ + string ANIM_RUN; + string ANIM_WALK; + string ARROW_TYPE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int BO_ZOMBIE_MODE; + int DMG_BOW; + int DMG_KICK; + int DMG_SMASH; + int DMG_SWIPE; + int DOING_KICK; + int KICK_TYPE; + int NO_STUCK_CHECKS; + int NPC_BASE_EXP; + string SOUND_BOW; + + ZorcArcher2() + { + NPC_BASE_EXP = 600; + DMG_BOW = 800; + DMG_SMASH = 400; + DMG_SWIPE = 200; + DMG_KICK = 200; + ARROW_TYPE = "proj_arrow_npc_dyn"; + BO_ZOMBIE_MODE = 1; + SOUND_BOW = "monsters/archer/bow.wav"; + } + + void orc_spawn() + { + SetHealth(6000); + SetName("Undead Orc Archer"); + SetHearingSensitivity(2); + SetDamageResistance("all", ".8"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("cold", 0.25); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("fire", 1.25); + SetAnimFrameRate(0.75); + BASE_FRAMERATE = 0.75; + SetRace("undead"); + DOING_KICK = 0; + KICK_TYPE = 1; + SetModelBody(0, 3); + SetModelBody(1, 3); + SetModelBody(2, 3); + SetProp(GetOwner(), "skin", 1); + } + + void ext_arrow_hit() + { + if (!(GetRelationship(param2) == "enemy")) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 800, 110)); + } + + void set_turret() + { + if (!(NO_STUCK_CHECKS)) + { + ScheduleDelayedEvent(0.1, "set_turret"); + } + SetMoveSpeed(0.0); + BASE_MOVESPEED = 0.0; + SetMoveAnim(ANIM_IDLE); + SetRoam(false); + NO_STUCK_CHECKS = 1; + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + } + +} + +} diff --git a/scripts/angelscript/monsters/zorc_warrior1.as b/scripts/angelscript/monsters/zorc_warrior1.as new file mode 100644 index 00000000..191ef8ca --- /dev/null +++ b/scripts/angelscript/monsters/zorc_warrior1.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class ZorcWarrior1 : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + float BASE_FRAMERATE; + int BO_ZOMBIE_MODE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int NPC_GIVE_EXP; + + ZorcWarrior1() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = 50; + NPC_GIVE_EXP = 200; + ANIM_ATTACK = "swordswing1_L"; + ATTACK_ACCURACY = 0.8; + ATTACK_DMG_LOW = 50; + ATTACK_DMG_HIGH = 100; + BO_ZOMBIE_MODE = 1; + } + + void orc_spawn() + { + SetHealth(2000); + SetName("Undead Orc"); + SetHearingSensitivity(5); + SetDamageResistance("all", ".8"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("cold", 0.25); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("fire", 1.25); + SetAnimFrameRate(0.5); + BASE_FRAMERATE = 0.5; + SetRace("undead"); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetModelBody(2, 4); + SetProp(GetOwner(), "skin", 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/zorc_warrior2.as b/scripts/angelscript/monsters/zorc_warrior2.as new file mode 100644 index 00000000..5ed67b2d --- /dev/null +++ b/scripts/angelscript/monsters/zorc_warrior2.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class ZorcWarrior2 : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + float BASE_FRAMERATE; + int BO_ZOMBIE_MODE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int NPC_GIVE_EXP; + + ZorcWarrior2() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = 50; + NPC_GIVE_EXP = 400; + ANIM_ATTACK = "swordswing1_L"; + ATTACK_ACCURACY = 0.8; + ATTACK_DMG_LOW = 100; + ATTACK_DMG_HIGH = 200; + BO_ZOMBIE_MODE = 1; + } + + void orc_spawn() + { + SetHealth(5000); + SetName("Undead Orc"); + SetHearingSensitivity(5); + SetDamageResistance("all", ".8"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("cold", 0.25); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("fire", 1.25); + SetAnimFrameRate(0.5); + BASE_FRAMERATE = 0.5; + SetRace("undead"); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 4); + SetProp(GetOwner(), "skin", 1); + } + +} + +} diff --git a/scripts/angelscript/monsters/zorc_warrior3.as b/scripts/angelscript/monsters/zorc_warrior3.as new file mode 100644 index 00000000..30210526 --- /dev/null +++ b/scripts/angelscript/monsters/zorc_warrior3.as @@ -0,0 +1,56 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/orc_base.as" + +namespace MS +{ + +class ZorcWarrior3 : CGameScript +{ + string ANIM_ATTACK; + float ATTACK_ACCURACY; + int ATTACK_DMG_HIGH; + int ATTACK_DMG_LOW; + float BASE_FRAMERATE; + int BO_ZOMBIE_MODE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int NPC_GIVE_EXP; + + ZorcWarrior3() + { + DROP_GOLD = 1; + DROP_GOLD_AMT = 75; + NPC_GIVE_EXP = 600; + ANIM_ATTACK = "battleaxe_swing1_L"; + ATTACK_ACCURACY = 0.8; + ATTACK_DMG_LOW = 200; + ATTACK_DMG_HIGH = 500; + BO_ZOMBIE_MODE = 1; + } + + void orc_spawn() + { + SetHealth(8000); + SetName("Undead Orc"); + SetHearingSensitivity(5); + SetDamageResistance("all", ".8"); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("cold", 0.25); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("fire", 1.25); + SetAnimFrameRate(0.5); + BASE_FRAMERATE = 0.5; + SetRace("undead"); + SetModelBody(0, 2); + SetModelBody(1, 1); + SetModelBody(2, 1); + SetProp(GetOwner(), "skin", 1); + } + +} + +} diff --git a/scripts/angelscript/ms_snow/map_startup.as b/scripts/angelscript/ms_snow/map_startup.as new file mode 100644 index 00000000..95fee1f3 --- /dev/null +++ b/scripts/angelscript/ms_snow/map_startup.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "ms_snow"; + MAP_WEATHER = "snow;snow;snow"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "The Frozen Summit by Avoozl & P.Barnum"); + SetGlobalVar("G_MAP_DESC", "Great evil lies in the frozen North. Its cold tendrils have sapped this once rich land."); + SetGlobalVar("G_MAP_DIFF", "Levels 25-35 / 400-700hp"); + SetGlobalVar("G_WARN_HP", 400); + SetGlobalVar("G_NO_STEP_ADJ", 1); + } + +} + +} diff --git a/scripts/angelscript/ms_soccer/base_soccer.as b/scripts/angelscript/ms_soccer/base_soccer.as new file mode 100644 index 00000000..1b23dd09 --- /dev/null +++ b/scripts/angelscript/ms_soccer/base_soccer.as @@ -0,0 +1,893 @@ +#pragma context server + +namespace MS +{ + +class BaseSoccer : CGameScript +{ + int AM_DEFENSE; + int AM_TEAM; + string BALL_HOME; + string BALL_ID; + int BALL_OOMF; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + string BLUE_GOAL_LOC; + int CHASE_RANGE; + string DEF_MOVE_RANGE; + int DRIBBLE_COUNT; + int GOAL_RAD; + string LAST_ON_GROUND; + string NEXT_REGEN; + string NME_GOAL_LOC; + int NPC_CHASE_RANGE; + int NPC_EXTRA_VALIDATIONS; + int NPC_NO_MOVE; + int NPC_RANGED; + string OLD_BALL_ORG; + string RED_GOAL_LOC; + string SET_FINAL; + int SPEED_DECREASED; + int SPEED_INCREASED; + string SUSPEND_AI; + string TEAM_NAME; + + BaseSoccer() + { + BALL_ID = FindEntityByName("soccer_ball"); + if ((GetEntityProperty(BALL_ID, "scriptvar"))) + { + SUSPEND_AI = 1; + } + NPC_EXTRA_VALIDATIONS = 1; + GOAL_RAD = 124; + CHASE_RANGE = 8000; + NPC_CHASE_RANGE = 8000; + } + + void OnSpawn() override + { + ScheduleDelayedEvent(2.0, "soccer_finalize"); + ScheduleDelayedEvent(0.5, "soc_spawn_stuck_check"); + SPEED_INCREASED = 0; + SPEED_DECREASED = 0; + } + + void soccer_finalize() + { + BALL_ID = FindEntityByName("soccer_ball"); + BALL_HOME = GetEntityProperty(BALL_ID, "scriptvar"); + BLUE_GOAL_LOC = FindEntityByName("blue_goal_ref"); + BLUE_GOAL_LOC = GetEntityOrigin(BLUE_GOAL_LOC); + RED_GOAL_LOC = FindEntityByName("red_goal_ref"); + RED_GOAL_LOC = GetEntityOrigin(RED_GOAL_LOC); + DEF_MOVE_RANGE = ATTACK_MOVERANGE; + BALL_OOMF = 0; + if (AM_TEAM == 1) + { + NME_GOAL_LOC = BLUE_GOAL_LOC; + } + else + { + NME_GOAL_LOC = RED_GOAL_LOC; + } + DRIBBLE_COUNT = 0; + NPC_RANGED = 0; + NPC_NO_MOVE = 1; + if (AM_TEAM == 1) + { + string MY_NAME = "Red "; + } + else + { + string MY_NAME = "Blue "; + } + string NAME_SUFFIX = "Wingman"; + if ((AM_DEFENSE)) + { + string NAME_SUFFIX = "Defender"; + } + if ((AM_LEADER)) + { + string NAME_SUFFIX = "Leader"; + } + if ((AM_GOALIE)) + { + string NAME_SUFFIX = "Goalkeeper"; + } + MY_NAME += NAME_SUFFIX; + SetName(MY_NAME); + SetMenuAutoOpen(1); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Remove "; + reg.mitem.title += GetEntityName(GetOwner()); + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_remove"; + int RESTORE_NORM_OPTION = 0; + if ((SPEED_INCREASED)) + { + int RESTORE_NORM_OPTION = 1; + } + if ((SPEED_DECREASED)) + { + int RESTORE_NORM_OPTION = 1; + } + if ((RESTORE_NORM_OPTION)) + { + string reg.mitem.title = "Restore Normal Speed"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_normal"; + string reg.mitem.title = "Set all "; + reg.mitem.title += TEAM_NAME; + reg.mitem.title += " Team Normal Speed"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_normal_all"; + } + if (!(SPEED_INCREASED)) + { + string reg.mitem.title = "Make Faster"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_faster"; + string reg.mitem.title = "Make All "; + reg.mitem.title += TEAM_NAME; + reg.mitem.title += " Team Faster"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_faster_all"; + } + if (!(SPEED_DECREASED)) + { + string reg.mitem.title = "Make Slower"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_slower"; + string reg.mitem.title = "Make All "; + reg.mitem.title += TEAM_NAME; + reg.mitem.title += " Team Slower"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_slower_all"; + } + } + + void menu_faster() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " increased speed on a "; + OUT_MSG += GetEntityName(GetOwner()); + SendInfoMsg("all", "ORC SPEED INCREASED " + OUT_MSG); + make_faster(); + } + + void menu_faster_all() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " increased speed on all "; + OUT_MSG += TEAM_NAME; + OUT_MSG += " Team orcs"; + SendInfoMsg("all", "TEAM SPEED INCREASED " + OUT_MSG); + make_faster(); + CallExternal("all", "extsorc_make_team_faster", AM_TEAM); + } + + void extsorc_make_team_faster() + { + if (!(AM_TEAM == param1)) return; + make_faster(); + } + + void make_faster() + { + PlayAnim("critical", ANIM_IDLE); + SPEED_INCREASED = 1; + SPEED_DECREASED = 0; + SetAnimMoveSpeed(1.5); + SetAnimFrameRate(1.5); + BASE_MOVESPEED = 1.5; + BASE_FRAMERATE = 1.5; + } + + void menu_slower() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " reduced speed on a "; + OUT_MSG += GetEntityName(GetOwner()); + SendInfoMsg("all", "ORC SPEED DECREASED " + OUT_MSG); + make_slower(); + } + + void menu_slower_all() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " reduced speed on all "; + OUT_MSG += TEAM_NAME; + OUT_MSG += " Team orcs"; + SendInfoMsg("all", "TEAM SPEED DECREASED " + OUT_MSG); + make_slower(); + CallExternal("all", "extsorc_make_team_slower", AM_TEAM); + } + + void extsorc_make_team_slower() + { + if (!(AM_TEAM == param1)) return; + make_slower(); + } + + void make_slower() + { + PlayAnim("critical", ANIM_IDLE); + SPEED_INCREASED = 0; + SPEED_DECREASED = 1; + SetAnimMoveSpeed(0.5); + SetAnimFrameRate(0.5); + BASE_MOVESPEED = 0.5; + BASE_FRAMERATE = 0.5; + } + + void menu_remove() + { + SetEntityOrigin(GetOwner(), Vector3(20000, -20000, -10000)); + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " removed a "; + OUT_MSG += GetEntityName(GetOwner()); + OUT_MSG += " from the field."; + SendInfoMsg("all", "ORC REMOVED FROM FIELD " + OUT_MSG); + ScheduleDelayedEvent(0.1, "npc_suicide"); + } + + void menu_normal() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " restored normal speed on a "; + OUT_MSG += GetEntityName(GetOwner()); + SendInfoMsg("all", "ORC SPEED DECREASED " + OUT_MSG); + make_normal(); + } + + void menu_normal_all() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " restored normal speed on all "; + OUT_MSG += TEAM_NAME; + OUT_MSG += " Team orcs"; + SendInfoMsg("all", "TEAM SPEED DECREASED " + OUT_MSG); + make_normal(); + CallExternal("all", "extsorc_make_team_normal", AM_TEAM); + } + + void extsorc_make_team_normal() + { + if (!(AM_TEAM == param1)) return; + make_normal(); + } + + void make_normal() + { + PlayAnim("critical", ANIM_IDLE); + SPEED_INCREASED = 0; + SPEED_DECREASED = 0; + SetAnimMoveSpeed(1.0); + SetAnimFrameRate(1.0); + BASE_MOVESPEED = 1.0; + BASE_FRAMERATE = 1.0; + } + + void soc_spawn_stuck_check() + { + SetEntityOrigin(GetOwner(), NPC_HOME_LOC); + string reg.npcmove.endpos = NPC_HOME_LOC; + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 0, 16)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), m_hAttackTarget); + if ("game.ret.npcmove.dist" <= 0) + { + LogDebug("soc_spawn_stuck_check blocked"); + SetEntityOrigin(GetOwner(), Vector3(5000, -5000, -5000)); + ScheduleDelayedEvent(1.0, "soc_spawn_stuck_check"); + if (GetGameTime() > NEXT_BALL_BLOCK_WARN) + { + SendInfoMsg("all", "ORC BLOCKED An orc is blocked..."); + NEXT_BALL_BLOCK_WARN = GetGameTime(); + NEXT_BALL_BLOCK_WARN += 10.0; + } + } + } + + void setsoc_blue() + { + AM_TEAM = 2; + SetProp(GetOwner(), "skin", 1); + TEAM_NAME = "Blue"; + } + + void setsoc_red() + { + AM_TEAM = 1; + SetProp(GetOwner(), "skin", 0); + TEAM_NAME = "Red"; + } + + void setsoc_goalrad() + { + GOAL_RAD = param1; + } + + void ext_soc_blue_remove() + { + if (!(AM_TEAM == 2)) return; + npc_suicide(); + } + + void ext_soc_red_remove() + { + if (!(AM_TEAM == 1)) return; + npc_suicide(); + } + + void setsoc_def() + { + AM_DEFENSE = 1; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (GetGameTime() > NEXT_REGEN) + { + NEXT_REGEN = GetGameTime(); + NEXT_REGEN += 1.0; + if (GetEntityHealth(GetOwner()) < GetEntityMaxHealth(GetOwner())) + { + } + string GIVE_AMT = GetEntityMaxHealth(GetOwner()); + GIVE_AMT *= 0.05; + HealEntity(GetOwner(), GIVE_AMT); + } + if ((IS_FLEEING)) return; + if ((SUSPEND_AI)) return; + if ((GetEntityProperty(BALL_ID, "scriptvar"))) + { + SUSPEND_AI = 1; + } + else + { + string LAST_SUSPEND_PLUS5 = NPC_LAST_SUSPEND_AI; + LAST_SUSPEND_PLUS5 += 5.0; + if (GetGameTime() > LAST_SUSPEND_PLUS5) + { + npcatk_resume_ai(); + } + } + if ((GetEntityProperty(BALL_ID, "scriptvar"))) return; + if (m_hAttackTarget == "unset") + { + if (!(AM_DEFENSE)) + { + npcatk_settarget(BALL_ID); + } + } + if ((IsOnGround(GetOwner()))) + { + LAST_ON_GROUND = GetGameTime(); + } + else + { + string LAST_ON_GROUND_PLUS = LAST_ON_GROUND; + LAST_ON_GROUND_PLUS += 5.0; + if (GetGameTime() > LAST_ON_GROUND_PLUS) + { + LAST_ON_GROUND = GetGameTime(); + LogDebug("in_air_too_long chicken_run"); + chicken_run(Random(3.0, 5.0)); + } + } + string BALL_ORG = GetEntityOrigin(BALL_ID); + if ((AM_DEFENSE)) + { + string BALL_HOME_X = (BALL_HOME).x; + string DEST_X = (GetMonsterProperty("movedest.origin")).x; + if (AM_TEAM == 1) + { + if (DEST_X > BALL_HOME_X) + { + ATTACK_MOVERANGE = 9999; + MOVE_RANGE = 9999; + } + else + { + ATTACK_MOVERANGE = DEF_MOVE_RANGE; + MOVE_RANGE = DEF_MOVE_RANGE; + } + } + else + { + if (DEST_X < BALL_HOME_X) + { + ATTACK_MOVERANGE = 9999; + MOVE_RANGE = 9999; + } + else + { + ATTACK_MOVERANGE = DEF_MOVE_RANGE; + MOVE_RANGE = DEF_MOVE_RANGE; + } + } + } + if ((AM_GOALIE)) + { + if (Distance(NPC_HOME_LOC, BALL_ORG) > GOAL_RAD) + { + string BALL_DIR = (BALL_ORG - NPC_HOME_LOC).Normalize(); + BALL_DIR *= GOAL_RAD; + string MOVE_DEST = NPC_HOME_LOC; + MOVE_DEST += BALL_DIR; + MOVE_DEST = "z"; + SetMoveDest(MOVE_DEST); + } + else + { + SetMoveDest(BALL_ORG); + } + string MY_ORG = GetEntityOrigin(GetOwner()); + string DEST_ORG = GetMonsterProperty("movedest.origin"); + if (Distance(MY_ORG, DEST_ORG) < ATTACK_MOVERANGE) + { + string ANG_TO_BALL = /* TODO: $angles3d */ $angles3d(MY_ORG, BALL_ORG); + SetAngles("face"); + } + } + } + + void soc_kickball() + { + if (AM_TEAM == 1) + { + string TARG_ORG = BLUE_GOAL_LOC; + string MY_GOAL_LOC = RED_GOAL_LOC; + } + else + { + string TARG_ORG = RED_GOAL_LOC; + string MY_GOAL_LOC = BLUE_GOAL_LOC; + } + string BALL_ORG = GetEntityOrigin(BALL_ID); + string MY_ORG = GetEntityOrigin(GetOwner()); + if (!(AM_GOALIE)) + { + float BALL_FROM_GOAL = Distance(BALL_ORG, TARG_ORG); + float MY_FROM_GOAL = Distance(MY_ORG, TARG_ORG); + if (MY_FROM_GOAL < BALL_FROM_GOAL) + { + if ((IsOnGround(BALL_ID))) + { + if (GetGameTime() > NEXT_JUMP) + { + } + NEXT_JUMP = GetGameTime(); + NEXT_JUMP += Random(1.0, 3.0); + soc_jump_over_ball(); + int EXIT_SUB = 1; + } + } + } + else + { + float MY_FROM_MY_GOAL = Distance(MY_ORG, MY_GOAL_LOC); + float BALL_FROM_MY_GOAL = Distance(BALL_ORG, MY_GOAL_LOC); + if (BALL_FROM_MY_GOAL < MY_FROM_MY_GOAL) + { + } + LogDebug("soc_kickball am_goalie break"); + PlayAnim("once", "break"); + PlayAnim("once", ANIM_SCOOP_BALL); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TARG_ANG = /* TODO: $angles */ $angles(BALL_ORG, TARG_ORG); + if (!(AM_GOALIE)) + { + string TRACE_START = BALL_ORG; + TRACE_START += "z"; + string TRACE_END = TARG_ORG; + TRACE_END += "z"; + string TRACE_DIR = (TRACE_END - TRACE_START).Normalize(); + TRACE_DIR *= 64; + TRACE_START += TRACE_DIR; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + int DRIBBLE_CHANCE = 10; + if ((IsEntityAlive(TRACE_LINE))) + { + int DRIBBLE_CHANCE = 75; + LogDebug("dribble_check GetEntityName(TRACE_LINE)"); + } + if (RandomInt(1, 100) < DRIBBLE_CHANCE) + { + int DO_DRIBBLE = 1; + } + } + float RND_F = Random(200, 400); + float RND_V = Random(110, 200); + int RND_LR = 0; + if ((AM_LEADER)) + { + RND_F *= 1.5; + RND_V *= 1.5; + } + if ((DO_DRIBBLE)) + { + DRIBBLE_COUNT += 1; + if (DRIBBLE_COUNT == 1) + { + float RND_LR = Random(-300.0, -100.0); + } + if (DRIBBLE_COUNT == 2) + { + float RND_LR = Random(100, 300); + DRIBBLE_COUNT = 0; + } + LogDebug("doing_dribble RND_LR"); + } + string L_HITRANGE = ATTACK_RANGE; + if ((NPC_VADJSTING)) + { + int L_HITRANGE = 9999; + } + if (!(GetEntityRange(BALL_ID) < L_HITRANGE)) return; + if (Distance(OLD_BALL_ORG, BALL_ORG) < 50) + { + if (!(AM_GOALIE)) + { + } + if (BALL_OOMF < 1) + { + BALL_OOMF = 1.0; + } + BALL_OOMF += 0.2; + LogDebug("oomf_ball BALL_OOMF"); + RND_V *= BALL_OOMF; + if (BALL_OOMF > 5) + { + LogDebug("ZOMGWTF oomf_ball"); + BALL_OOMF = 0; + npcatk_flee(BALL_ID, 640, Random(3.5, 6.0)); + } + } + else + { + BALL_OOMF = 0; + } + OLD_BALL_ORG = BALL_ORG; + CallExternal(BALL_ID, "ext_kicked"); + AddVelocity(BALL_ID, /* TODO: $relvel */ $relvel(Vector3(0, /* TODO: $vec.yaw */ $vec.yaw(TARG_ANG), 0), Vector3(RND_LR, RND_F, RND_V))); + } + + void npc_selectattack() + { + string BALL_ORG = GetEntityOrigin(BALL_ID); + string MY_ORG = GetEntityOrigin(GetOwner()); + if (AM_TEAM == 1) + { + string TARG_ORG = BLUE_GOAL_LOC; + string MY_GOAL_LOC = RED_GOAL_LOC; + } + else + { + string TARG_ORG = RED_GOAL_LOC; + string MY_GOAL_LOC = BLUE_GOAL_LOC; + } + if ((AM_GOALIE)) + { + float BALL_FROM_MY_GOAL = Distance(BALL_ORG, MY_GOAL_LOC); + float MY_FROM_MY_GOAL = Distance(MY_ORG, MY_GOAL_LOC); + if (BALL_FROM_MY_GOAL < MY_FROM_MY_GOAL) + { + if (Distance(NPC_HOME_LOC, MY_ORG) < GOAL_RAD) + { + if ((IsOnGround(BALL_ID))) + { + ANIM_ATTACK = ANIM_SCOOP_BALL; + } + else + { + ANIM_ATTACK = ANIM_KICK; + } + } + else + { + ANIM_ATTACK = ANIM_KICK; + } + } + else + { + ANIM_ATTACK = ANIM_KICK; + } + } + else + { + float BALL_FROM_GOAL = Distance(BALL_ORG, TARG_ORG); + float MY_FROM_GOAL = Distance(MY_ORG, TARG_ORG); + if (MY_FROM_GOAL < BALL_FROM_GOAL) + { + if ((IsOnGround(BALL_ID))) + { + soc_jump_over_ball(); + int EXIT_SUB = 1; + } + } + } + } + + void extsoc_game_start() + { + if ((SET_FINAL)) + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + SET_FINAL = 0; + } + npcatk_resume_ai(); + if ((AM_DEFENSE)) return; + if ((AM_GOALIE)) return; + npcatk_settarget(BALL_ID); + } + + void extsoc_reset() + { + soc_stop_movement(); + npcatk_suspend_ai(); + extsoc_reset_loop(); + } + + void extsoc_reset_loop() + { + string CUR_POS = GetEntityOrigin(GetOwner()); + SetEntityOrigin(GetOwner(), NPC_HOME_LOC); + SetAngles("face"); + string reg.npcmove.endpos = NPC_HOME_LOC; + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 0, 16)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), m_hAttackTarget); + if ("game.ret.npcmove.dist" <= 0) + { + LogDebug("extsoc_reset blocked"); + SetEntityOrigin(GetOwner(), CUR_POS); + ScheduleDelayedEvent(0.1, "extsoc_reset_loop"); + } + } + + void extsoc_pause_game() + { + soc_stop_movement(); + npcatk_suspend_ai(); + } + + void extsoc_unpause_game() + { + extsoc_game_start(); + } + + void extsoc_score() + { + soc_stop_movement(); + if (GetEntityProperty(BALL_ID, "scriptvar") == 5) + { + int GAME_OVER = 1; + } + if (GetEntityProperty(BALL_ID, "scriptvar") == 5) + { + int GAME_OVER = 1; + } + if ((GAME_OVER)) + { + SET_FINAL = 1; + } + else + { + SET_FINAL = 0; + } + if (param1 == "red") + { + if (AM_TEAM == 1) + { + soc_round_win(); + } + else + { + soc_round_lose(); + } + } + else + { + if (AM_TEAM == 2) + { + soc_round_win(); + } + else + { + soc_round_lose(); + } + } + } + + void soc_round_win() + { + soc_stop_movement(); + if (RandomInt(1, 2) == 1) + { + PlayAnim("critical", ANIM_ROUND_WIN1); + if ((SET_FINAL)) + { + SetIdleAnim(ANIM_ROUND_WIN1); + SetMoveAnim(ANIM_ROUND_WIN1); + } + } + else + { + PlayAnim("critical", ANIM_ROUND_WIN2); + if ((SET_FINAL)) + { + SetIdleAnim(ANIM_ROUND_WIN2); + SetMoveAnim(ANIM_ROUND_WIN2); + } + } + } + + void soc_round_lose() + { + soc_stop_movement(); + if (RandomInt(1, 2) == 1) + { + PlayAnim("critical", ANIM_ROUND_LOST1); + if ((SET_FINAL)) + { + SetIdleAnim(ANIM_ROUND_LOST1); + SetMoveAnim(ANIM_ROUND_LOST1); + } + } + else + { + PlayAnim("critical", ANIM_ROUND_LOST2); + if ((SET_FINAL)) + { + SetIdleAnim(ANIM_ROUND_LOST2); + SetMoveAnim(ANIM_ROUND_LOST2); + } + } + } + + void soc_jump_over_ball() + { + PlayAnim("once", "break"); + npcatk_suspend_ai(1.0); + SetMoveDest(BALL_ID); + PlayAnim("critical", ANIM_JUMP); + } + + void soc_stop_movement() + { + SetMoveDest("none"); + SetRoam(false); + } + + void npcatk_setmovedest() + { + if ((IS_FLEEING)) + { + SetMoveDest(param1); + } + if ((IS_FLEEING)) return; + if ((AM_GOALIE)) return; + if ((IsEntityAlive(param1))) + { + if (param1 == BALL_ID) + { + } + int L_IS_BALL = 1; + string PARAM1 = GetEntityOrigin(param1); + } + if ((L_IS_BALL)) + { + if (AM_TEAM == 1) + { + PARAM1 += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, -40, 0)); + } + else + { + PARAM1 += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 40, 0)); + } + } + if ((AM_DEFENSE)) + { + string BALL_HOME_X = (BALL_HOME).x; + if ((IsEntityAlive(param1))) + { + string DEST_X = GetEntityProperty(param1, "origin.x"); + } + else + { + string DEST_X = (param1).x; + } + if (AM_TEAM == 1) + { + if (DEST_X > BALL_HOME_X) + { + if (GetEntityProperty(BALL_ID, "range2d") < 256) + { + int PARAM2 = 9999; + } + else + { + if (Distance(GetMonsterProperty("origin"), NPC_HOME_LOC) > 32) + { + string PARAM1 = NPC_HOME_LOC; + int PARAM2 = 16; + } + else + { + string PARAM1 = BALL_ID; + int PARAM2 = 9999; + } + } + } + } + else + { + if (DEST_X < BALL_HOME_X) + { + if (GetEntityProperty(BALL_ID, "range2d") < 256) + { + int PARAM2 = 9999; + } + else + { + if (Distance(GetMonsterProperty("origin"), NPC_HOME_LOC) > 32) + { + string PARAM1 = NPC_HOME_LOC; + int PARAM2 = 16; + } + else + { + string PARAM1 = BALL_ID; + int PARAM2 = 9999; + } + } + } + } + } + SetMoveDest(param1); + } + + void soc_ball_scoop() + { + int MADE_GRAB = 0; + if (GetEntityRange(BALL_ID) < ATTACK_RANGE) + { + if ((IsOnGround(BALL_ID))) + { + } + SetEntityOrigin(BALL_ID, /* TODO: $relpos */ $relpos(0, 0, -400)); + SetModelBody(1, 1); + int MADE_GRAB = 1; + SetMoveDest(NME_GOAL_LOC); + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_SCOOP_BALL); + } + if ((MADE_GRAB)) return; + PlayAnim("once", "break"); + } + + void soc_ball_release() + { + npcatk_resume_movement(); + SetMoveDest(NME_GOAL_LOC); + SetModelBody(1, 0); + string BALL_RETURN_ORG = GetEntityOrigin(GetOwner()); + string MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + BALL_RETURN_ORG += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, NPC_HALF_WIDTH, NPC_HEIGHT)); + SetEntityOrigin(BALL_ID, BALL_RETURN_ORG); + SetVelocity(BALL_ID, /* TODO: $relvel */ $relvel(Vector3(0, MY_YAW, 0), Vector3(0, 300, 200))); + npcatk_resume_ai(); + } + +} + +} diff --git a/scripts/angelscript/ms_soccer/game_master.as b/scripts/angelscript/ms_soccer/game_master.as new file mode 100644 index 00000000..2b39c32e --- /dev/null +++ b/scripts/angelscript/ms_soccer/game_master.as @@ -0,0 +1,57 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + string GMSOC_BLUE_TEAM_ACTIVE; + string GMSOC_RED_TEAM_ACTIVE; + + void gm_soccer_blue_toggle() + { + LogDebug("Blue Team Toggle"); + if (!(GMSOC_BLUE_TEAM_ACTIVE)) + { + CallExternal("all", "extsoc_del_blue_pushgoal"); + GMSOC_BLUE_TEAM_ACTIVE = 1; + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " added blue team orcs"; + SendInfoMsg("all", "BLUE TEAM ACTIVE " + OUT_MSG); + UseTrigger("spawn_blue_team"); + } + else + { + GMSOC_BLUE_TEAM_ACTIVE = 0; + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " removed blue team orcs"; + SendInfoMsg("all", "BLUE TEAM REMOVED " + OUT_MSG); + CallExternal("all", "ext_soc_blue_remove"); + } + } + + void gm_soccer_red_toggle() + { + LogDebug("Red Team Toggle"); + if (!(GMSOC_RED_TEAM_ACTIVE)) + { + CallExternal("all", "extsoc_del_red_pushgoal"); + GMSOC_RED_TEAM_ACTIVE = 1; + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " added red team orcs"; + SendInfoMsg("all", "RED TEAM ACTIVE " + OUT_MSG); + UseTrigger("spawn_red_team"); + } + else + { + GMSOC_RED_TEAM_ACTIVE = 0; + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " removed red team orcs"; + SendInfoMsg("all", "BLUE TEAM REMOVED " + OUT_MSG); + CallExternal("all", "ext_soc_red_remove"); + } + } + +} + +} diff --git a/scripts/angelscript/ms_soccer/goal_blue_ref.as b/scripts/angelscript/ms_soccer/goal_blue_ref.as new file mode 100644 index 00000000..9a44b134 --- /dev/null +++ b/scripts/angelscript/ms_soccer/goal_blue_ref.as @@ -0,0 +1,21 @@ +#pragma context server + +namespace MS +{ + +class GoalBlueRef : CGameScript +{ + void OnSpawn() override + { + SetModel("null.mdl"); + SetWidth(3); + SetHeight(3); + SetGravity(0); + SetNoPush(true); + SetInvincible(true); + SetName("blue_goal_ref"); + } + +} + +} diff --git a/scripts/angelscript/ms_soccer/goal_red_ref.as b/scripts/angelscript/ms_soccer/goal_red_ref.as new file mode 100644 index 00000000..a931f2bc --- /dev/null +++ b/scripts/angelscript/ms_soccer/goal_red_ref.as @@ -0,0 +1,21 @@ +#pragma context server + +namespace MS +{ + +class GoalRedRef : CGameScript +{ + void OnSpawn() override + { + SetModel("null.mdl"); + SetWidth(3); + SetHeight(3); + SetGravity(0); + SetNoPush(true); + SetInvincible(true); + SetName("red_goal_ref"); + } + +} + +} diff --git a/scripts/angelscript/ms_soccer/map_startup.as b/scripts/angelscript/ms_soccer/map_startup.as new file mode 100644 index 00000000..da87b8a6 --- /dev/null +++ b/scripts/angelscript/ms_soccer/map_startup.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "ms_soccer"; + MAP_WEATHER = "clear;clear;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "MSC Soccer by Caluminium"); + SetGlobalVar("G_MAP_DESC", "MSC Science - We do what we must because we can."); + SetGlobalVar("G_MAP_DIFF", "(Safe Area - Relatively Speaking)"); + SetGlobalVar("G_WARN_HP", 0); + SetGlobalVar("G_SPECIAL_COMMANDS", 1); + } + +} + +} diff --git a/scripts/angelscript/ms_soccer/push_goalie_blue.as b/scripts/angelscript/ms_soccer/push_goalie_blue.as new file mode 100644 index 00000000..d092e687 --- /dev/null +++ b/scripts/angelscript/ms_soccer/push_goalie_blue.as @@ -0,0 +1,27 @@ +#pragma context server + +namespace MS +{ + +class PushGoalieBlue : CGameScript +{ + string NPC_HOME_LOC; + + void OnSpawn() override + { + SetName("blue_goalie"); + NPC_HOME_LOC = GetEntityOrigin(GetOwner()); + LogDebug("blue_goalie spawn"); + SetAlive(1); + SetCallback("think", "enable"); + } + + void extsoc_del_blue_pushgoal() + { + DeleteEntity(GetOwner()); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/ms_soccer/push_goalie_red.as b/scripts/angelscript/ms_soccer/push_goalie_red.as new file mode 100644 index 00000000..a91c76f3 --- /dev/null +++ b/scripts/angelscript/ms_soccer/push_goalie_red.as @@ -0,0 +1,27 @@ +#pragma context server + +namespace MS +{ + +class PushGoalieRed : CGameScript +{ + string NPC_HOME_LOC; + + void OnSpawn() override + { + SetName("red_goalie"); + NPC_HOME_LOC = GetEntityOrigin(GetOwner()); + LogDebug("red_goalie spawn"); + SetAlive(1); + SetCallback("think", "enable"); + } + + void extsoc_del_red_pushgoal() + { + DeleteEntity(GetOwner()); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/ms_soccer/soccer_ball.as b/scripts/angelscript/ms_soccer/soccer_ball.as new file mode 100644 index 00000000..c7d4292a --- /dev/null +++ b/scripts/angelscript/ms_soccer/soccer_ball.as @@ -0,0 +1,654 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class SoccerBall : CGameScript +{ + string ADJ_PITCH; + string AM_BOUNCY; + int AM_HOME; + string ATK_ANG; + string ATK_ID; + string BALL_WEIGHTS; + string BLUE_SCORE_TOKENS; + int COUNT_DOWN; + string COUNT_DOWN_ABORT; + string COUNT_DOWN_EVENT; + string CUR_TOKEN_LIST; + string DEST_POINTS; + int GAME_PAUSED; + int GAME_STARTED; + string GAME_WON; + int HOME_REPEAT; + int IS_SOCCER_BALL; + int NEXT_BALL_WEIGHT; + string NEXT_IDLE_SOUND; + int NPC_ATTACK_INVULN; + string NPC_HOME_LOC; + int POINTS_BLUE; + int POINTS_RED; + string RED_SCORE_TOKENS; + int SB_BLUE0; + int SB_BLUE1; + int SB_BLUE2; + int SB_BLUE3; + int SB_BLUE4; + int SB_BLUE5; + int SB_RED0; + int SB_RED1; + int SB_RED2; + int SB_RED3; + int SB_RED4; + int SB_RED5; + int SENSE_RANGE; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + string SOUND_STRUCK6; + string TRACK_TARGET; + string TWAL_TEAM_SUFFIX; + + SoccerBall() + { + NPC_ATTACK_INVULN = 1; + POINTS_RED = 0; + POINTS_BLUE = 0; + BALL_WEIGHTS = "0.1;0.25;0.5;1.0;2.0"; + NEXT_BALL_WEIGHT = 4; + IS_SOCCER_BALL = 1; + SENSE_RANGE = 128; + SB_BLUE0 = 0; + SB_BLUE1 = 0; + SB_BLUE2 = 0; + SB_BLUE3 = 0; + SB_BLUE4 = 0; + SB_BLUE5 = 0; + BLUE_SCORE_TOKENS = "0;0;0;0;0;0"; + RED_SCORE_TOKENS = "0;0;0;0;0;0"; + SB_RED0 = 0; + SB_RED1 = 0; + SB_RED2 = 0; + SB_RED3 = 0; + SB_RED4 = 0; + SB_RED5 = 0; + SOUND_IDLE1 = "houndeye/he_idle4.wav"; + SOUND_IDLE2 = "houndeye/he_pain1.wav"; + SOUND_IDLE3 = "houndeye/he_pain3.wav"; + SOUND_IDLE4 = "houndeye/he_alert2.wav"; + SOUND_STRUCK1 = "houndeye/he_die1.wav"; + SOUND_STRUCK2 = "houndeye/he_die2.wav"; + SOUND_STRUCK3 = "houndeye/he_pain2.wav"; + SOUND_STRUCK4 = "houndeye/he_pain4.wav"; + SOUND_STRUCK5 = "houndeye/he_pain5.wav"; + SOUND_STRUCK6 = "houndeye/he_alert3.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + if (GetEntitySpeed(GetOwner()) > 50) + { + PlayAnim("once", "spin_horizontal_slow"); + } + if (GetEntitySpeed(GetOwner()) > 200) + { + PlayAnim("once", "spin_horizontal_fast"); + } + if ((IsEntityAlive(TRACK_TARGET))) + { + } + if (GetEntityRange(TRACK_TARGET) < SENSE_RANGE) + { + if (GetEntitySpeed(GetOwner()) > 0) + { + ADJ_PITCH = -1.1; + SetProp(GetOwner(), "controller0", ADJ_PITCH); + } + if (GetEntitySpeed(GetOwner()) == 0) + { + } + SetMoveDest(TRACK_TARGET); + string TARG_ORG = GetEntityOrigin(TRACK_TARGET); + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(GetMonsterProperty("origin"), TARG_ORG); + ANG_TO_TARG = "x"; + ADJ_PITCH = (ANG_TO_TARG).x; + ADJ_PITCH += 20; + if (ADJ_PITCH > -1.1) + { + ADJ_PITCH = -1.1; + } + SetProp(GetOwner(), "controller0", ADJ_PITCH); + if (GetGameTime() > NEXT_IDLE_SOUND) + { + } + NEXT_IDLE_SOUND = GetGameTime(); + NEXT_IDLE_SOUND += Random(20.0, 30.0); + PlayAnim("once", "idle_scared"); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4}; + EmitSound(GetOwner(), 4, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (ADJ_PITCH > -1.1) + { + ADJ_PITCH -= 0.1; + } + if (ADJ_PITCH < -1.1) + { + ADJ_PITCH += 0.1; + } + if (GetEntitySpeed(GetOwner()) > 0) + { + ADJ_PITCH = -1.1; + } + SetProp(GetOwner(), "controller0", ADJ_PITCH); + } + } + + void OnSpawn() override + { + SetName("Soccer Ball"); + SetModel("soccer/soccer_ball.mdl"); + SetWidth(32); + SetHeight(38); + SetName("soccer_ball"); + SetHearingSensitivity(2); + SetGravity(1.0); + if (!(true)) return; + SetRace("hated"); + SetHealth(1); + ADJ_PITCH = -1.1; + SetIdleAnim("idle_standard"); + SetMoveAnim("idle_standard"); + SetSayTextRange(4096); + SetMonsterClip(1); + SetMenuAutoOpen(1); + GAME_PAUSED = 1; + SetNoPush(true); + ScheduleDelayedEvent(0.1, "get_home_pos"); + ScheduleDelayedEvent(1.0, "update_scoreboards"); + } + + void get_home_pos() + { + SetGlobalVar("G_CHRISTMAS_MODE", 0); + NPC_HOME_LOC = GetEntityOrigin(GetOwner()); + PlayAnim("critical", "idle_standard"); + NEXT_IDLE_SOUND = GetGameTime(); + NEXT_IDLE_SOUND += Random(20.0, 30.0); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if (!(GetEntityRange(LAST_HEARD) < SENSE_RANGE)) return; + TRACK_TARGET = LAST_HEARD; + } + + void OnDamage(int damage) override + { + if ((GAME_PAUSED)) + { + if (!(GAME_STARTED)) + { + SendInfoMsg(param1, "CLICK THE BALL TO BEGIN Click USE on the ball to begin the game..."); + } + SendColoredMessage(param1, "Ball not yet in play..."); + } + AM_HOME = 0; + SetDamage("hit"); + SetDamage("dmg"); + return; + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5, SOUND_STRUCK6 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5, SOUND_STRUCK6}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + ATK_ID = param1; + ATK_ANG = GetEntityProperty(param1, "viewangles"); + ScheduleDelayedEvent(0.1, "adj_vel"); + } + + void ext_kicked() + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5, SOUND_STRUCK6 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5, SOUND_STRUCK6}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void adj_vel() + { + if (!(IsValidPlayer(param1))) return; + string MY_VEL = GetEntityVelocity(GetOwner()); + ATK_ANG = "x"; + MY_VEL = /* TODO: $relvel */ $relvel(ATK_ANG, MY_VEL); + SetVelocity(GetOwner(), MY_VEL); + } + + void game_menu_getoptions() + { + if (!(GAME_STARTED)) + { + string reg.mitem.title = "BEGIN GAME!"; + string reg.mitem.type = "callback"; + int reg.mitem.data = 1; + string reg.mitem.callback = "soc_game_begin"; + } + string BALL_WEIGHT_MENU = "Set ball weight to "; + BALL_WEIGHT_MENU += GetToken(BALL_WEIGHTS, NEXT_BALL_WEIGHT, ";"); + string reg.mitem.title = BALL_WEIGHT_MENU; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_weight"; + if (!(AM_BOUNCY)) + { + string reg.mitem.title = "Bouncy Ball"; + string reg.mitem.type = "callback"; + int reg.mitem.data = 1; + string reg.mitem.callback = "set_bouncy"; + } + else + { + string reg.mitem.title = "Less Bouncy"; + string reg.mitem.type = "callback"; + int reg.mitem.data = 0; + string reg.mitem.callback = "set_bouncy"; + } + string reg.mitem.title = "Move Ball Home"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "reset_ball"; + if (POINTS_RED != 0) + { + int OPT_RESET_SCORES = 1; + } + if (POINTS_BLUE != 0) + { + int OPT_RESET_SCORES = 1; + } + if ((OPT_RESET_SCORES)) + { + string reg.mitem.title = "Reset Scores"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "reset_scores"; + } + if ((G_DEVELOPER_MODE)) + { + string reg.mitem.title = "DELETE BALL"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_dev_delete"; + } + if (!(GAME_STARTED)) return; + if (!(GAME_PAUSED)) + { + string reg.mitem.title = "Call Timeout"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "call_timeout"; + } + else + { + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + int SORCS_ACTIVE = 1; + } + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + int SORCS_ACTIVE = 1; + } + if ((SORCS_ACTIVE)) + { + string reg.mitem.title = "Reset Positions"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "reset_sorcs"; + } + string reg.mitem.title = "Call Time In"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "call_timein"; + } + } + + void menu_dev_delete() + { + DeleteEntity(GetOwner()); + } + + void reset_sorcs() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " reset sorc positions"; + SendInfoMsg("all", "SORCS RESET " + OUT_MSG); + CallExternal("all", "extsoc_reset"); + } + + void call_timeout() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " called time out"; + SendInfoMsg("all", "TIME OUT! " + OUT_MSG); + CallExternal("all", "ext_soccer_timeout"); + pause_game(); + } + + void call_timein() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " called time in"; + SendInfoMsg("all", "TIME IN! " + OUT_MSG); + CallExternal("all", "ext_soccer_timein"); + unpause_game(); + } + + void reset_ball() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " sent the ball home"; + SendInfoMsg("all", "BALL RESET " + OUT_MSG); + AM_HOME = 0; + SetEntityOrigin(GetOwner(), Vector3(5000, 5000, -5000)); + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + SetProp(GetOwner(), "velocity", Vector3(0, 0, 0)); + HOME_REPEAT = 1; + move_ball_home(); + } + + void reset_scores() + { + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " reset the scores"; + SendInfoMsg("all", "SCORES RESET " + OUT_MSG); + POINTS_BLUE = 0; + POINTS_RED = 0; + update_scoreboards(); + } + + void set_weight() + { + SetGravity(GetToken(BALL_WEIGHTS, NEXT_BALL_WEIGHT, ";")); + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " changed ball weight to "; + OUT_MSG += GetToken(BALL_WEIGHTS, NEXT_BALL_WEIGHT, ";"); + SendInfoMsg("all", "BALL WEIGHT CHANGE " + OUT_MSG); + NEXT_BALL_WEIGHT += 1; + if (NEXT_BALL_WEIGHT >= GetTokenCount(BALL_WEIGHTS, ";")) + { + NEXT_BALL_WEIGHT = 0; + } + } + + void set_bouncy() + { + string BOUNCY_ON = param2; + if ((BOUNCY_ON)) + { + AM_BOUNCY = 1; + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " made the ball bouncier!"; + SendInfoMsg("all", "BOUNCY BALL " + OUT_MSG); + SetProp(GetOwner(), "movetype", 10); + } + else + { + AM_BOUNCY = 0; + string OUT_MSG = GetEntityName(param1); + OUT_MSG += " restored the ball to normal."; + SendInfoMsg("all", "NOT SO BOUNCY BALL " + OUT_MSG); + SetProp(GetOwner(), "movetype", 4); + } + } + + void ext_blue_scores_goal() + { + POINTS_BLUE += 1; + update_scoreboards(); + CallExternal("players", "extsoc_show_scores", POINTS_RED, POINTS_BLUE); + do_goal("blue"); + } + + void ext_red_scores_goal() + { + POINTS_RED += 1; + update_scoreboards(); + CallExternal("players", "extsoc_show_scores", POINTS_RED, POINTS_BLUE); + do_goal("red"); + } + + void do_goal() + { + SetEntityOrigin(GetOwner(), Vector3(5000, 5000, -5000)); + pause_game(); + CallExternal("all", "extsoc_score", StringToLower(param1)); + string OUT_MSG = "RED: "; + OUT_MSG += int(POINTS_RED); + OUT_MSG += " BLUE: "; + OUT_MSG += int(POINTS_BLUE); + if (param1 == "red") + { + SendInfoMsg("all", "RED SCORES " + OUT_MSG); + } + if (param1 == "blue") + { + SendInfoMsg("all", "BLUE SCORES " + OUT_MSG); + } + if (POINTS_RED == 5) + { + do_game_win(1); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (POINTS_BLUE == 5) + { + do_game_win(2); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ScheduleDelayedEvent(3.0, "resume_after_score1"); + } + + void resume_after_score1() + { + CallExternal("all", "extsoc_reset"); + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + UseTrigger("spawn_red_team"); + } + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + UseTrigger("spawn_blue_team"); + } + ScheduleDelayedEvent(5.0, "resume_after_score2"); + COUNT_DOWN = 5; + COUNT_DOWN_EVENT = "unpause_game"; + do_countdown(); + AM_HOME = 0; + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + SetProp(GetOwner(), "velocity", Vector3(0, 0, 0)); + move_ball_home(); + } + + void do_countdown() + { + if (COUNT_DOWN > 1) + { + ScheduleDelayedEvent(1.0, "do_countdown"); + } + if (!(AM_HOME)) + { + move_ball_home(); + COUNT_DOWN_ABORT = 1; + COUNT_DOWN = 5; + } + else + { + COUNT_DOWN_ABORT = 0; + } + if ((COUNT_DOWN_ABORT)) return; + CallExternal("players", "ext_hud_icon", int(COUNT_DOWN), "cnt", 40, 0, 20, 30, 0.75); + int OUT_MSG = int(COUNT_DOWN); + OUT_MSG += "..."; + SendInfoMessageToAll("green " + OUT_MSG); + COUNT_DOWN -= 1; + if (COUNT_DOWN <= 0) + { + COUNT_DOWN_EVENT(); + } + } + + void resume_after_score2() + { + if ((AM_HOME)) + { + COUNT_DOWN_ABORT = 0; + } + else + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + SetProp(GetOwner(), "velocity", Vector3(0, 0, 0)); + move_ball_home(); + COUNT_DOWN_ABORT = 1; + COUNT_DOWN = 5; + ScheduleDelayedEvent(0.1, "resume_after_score2"); + } + } + + void move_ball_home() + { + string CUR_POS = GetEntityOrigin(GetOwner()); + SetEntityOrigin(GetOwner(), NPC_HOME_LOC); + string reg.npcmove.endpos = NPC_HOME_LOC; + reg.npcmove.endpos += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 0, 16)); + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), m_hAttackTarget); + if ("game.ret.npcmove.dist" <= 0) + { + LogDebug("extsoc_reset blocked"); + SetEntityOrigin(GetOwner(), CUR_POS); + if ((HOME_REPEAT)) + { + ScheduleDelayedEvent(0.1, "move_ball_home"); + } + if (GetGameTime() > NEXT_BALL_BLOCK_WARN) + { + SendInfoMsg("all", "BALL BLOCKED Please step away from the ball spawn..."); + NEXT_BALL_BLOCK_WARN = GetGameTime(); + NEXT_BALL_BLOCK_WARN += 10.0; + } + } + else + { + HOME_REPEAT = 0; + AM_HOME = 1; + } + } + + void pause_game() + { + GAME_PAUSED = 1; + SetNoPush(true); + CallExternal("all", "extsoc_pause_game"); + } + + void unpause_game() + { + GAME_PAUSED = 0; + SetNoPush(false); + CallExternal("all", "extsoc_unpause_game"); + } + + void soc_game_begin() + { + POINTS_RED = 0; + POINTS_BLUE = 0; + update_scoreboards(); + if ((GAME_WON)) + { + CallExternal("all", "extsoc_reset"); + GAME_WON = 0; + } + GAME_STARTED = 1; + ScheduleDelayedEvent(1.0, "soc_game_begin2"); + } + + void soc_game_begin2() + { + COUNT_DOWN = 5; + COUNT_DOWN_EVENT = "unpause_game"; + do_countdown(); + } + + void do_game_win() + { + GAME_STARTED = 0; + GAME_WON = 1; + HOME_REPEAT = 1; + move_ball_home(); + } + + void ext_say_scores() + { + CallExternal("players", "extsoc_show_scores", POINTS_RED, POINTS_BLUE); + } + + void ext_send_menu() + { + OpenMenu(param1); + } + + void update_scoreboards() + { + LogDebug("update_scoreboards blue_before: BLUE_SCORE_TOKENS"); + TWAL_TEAM_SUFFIX = "blue"; + DEST_POINTS = POINTS_BLUE; + CUR_TOKEN_LIST = BLUE_SCORE_TOKENS; + for (int i = 0; i < GetTokenCount(BLUE_SCORE_TOKENS, ";"); i++) + { + update_twals(); + } + BLUE_SCORE_TOKENS = CUR_TOKEN_LIST; + LogDebug("update_scoreboards blue_after: BLUE_SCORE_TOKENS"); + LogDebug("update_scoreboards red_before: RED_SCORE_TOKENS"); + TWAL_TEAM_SUFFIX = "red"; + DEST_POINTS = POINTS_RED; + CUR_TOKEN_LIST = RED_SCORE_TOKENS; + for (int i = 0; i < GetTokenCount(RED_SCORE_TOKENS, ";"); i++) + { + update_twals(); + } + RED_SCORE_TOKENS = CUR_TOKEN_LIST; + LogDebug("update_scoreboards red_after: RED_SCORE_TOKENS"); + } + + void update_twals() + { + int CUR_IDX = int(i); + string TWAL_NAME = "twal_score_"; + TWAL_NAME += TWAL_TEAM_SUFFIX; + TWAL_NAME += CUR_IDX; + if (CUR_IDX == DEST_POINTS) + { + if (GetToken(CUR_TOKEN_LIST, CUR_IDX, ";") == 0) + { + SetToken(CUR_TOKEN_LIST, CUR_IDX, 1, ";"); + UseTrigger(TWAL_NAME); + LogDebug("turning TWAL_NAME on [ CUR_TOKEN_LIST ]"); + } + } + else + { + if (GetToken(CUR_TOKEN_LIST, CUR_IDX, ";") == 1) + { + SetToken(CUR_TOKEN_LIST, CUR_IDX, 0, ";"); + UseTrigger(TWAL_NAME); + LogDebug("turning TWAL_NAME off [ CUR_TOKEN_LIST ]"); + } + } + } + +} + +} diff --git a/scripts/angelscript/ms_soccer/sorc1.as b/scripts/angelscript/ms_soccer/sorc1.as new file mode 100644 index 00000000..65447006 --- /dev/null +++ b/scripts/angelscript/ms_soccer/sorc1.as @@ -0,0 +1,131 @@ +#pragma context server + +#include "ms_soccer/base_soccer.as" +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Sorc1 : CGameScript +{ + int AM_LEADER; + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_KICK; + string ANIM_ROUND_LOST1; + string ANIM_ROUND_LOST2; + string ANIM_ROUND_WIN1; + string ANIM_ROUND_WIN2; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DOING_JUMP; + int MOVE_RANGE; + int NPC_FIGHTS_NPCS; + string SOUND_DEATH; + + Sorc1() + { + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_JUMP = "jump_hop"; + ANIM_KICK = "kick"; + ANIM_ATTACK = "kick"; + ANIM_ROUND_WIN1 = "warcry"; + ANIM_ROUND_WIN2 = "nod_yes"; + ANIM_ROUND_LOST1 = "neigh"; + ANIM_ROUND_LOST2 = "kneel"; + ATTACK_MOVERANGE = 20; + MOVE_RANGE = 20; + ATTACK_RANGE = 30; + ATTACK_HITRANGE = 48; + SOUND_DEATH = "voices/orc/die.wav"; + NPC_FIGHTS_NPCS = 1; + } + + void OnSpawn() override + { + SetName("Soccer Sorc"); + SetModel("soccer/sorc_soccer1.mdl"); + SetWidth(32); + SetHeight(72); + SetHealth(400); + SetRace("human"); + SetRoam(false); + SetHearingSensitivity(0); + SetModelBody(0, 3); + SetModelBody(1, 1); + SetModelBody(2, 0); + } + + void setsoc_leader() + { + SetModelBody(0, 0); + SetModelBody(1, 2); + SetHealth(800); + AM_LEADER = 1; + } + + void setsoc_def() + { + SetModelBody(1, 4); + } + + void jump_start() + { + } + + void jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 200, 400)); + DOING_JUMP = 1; + ScheduleDelayedEvent(0.2, "check_boost2"); + ScheduleDelayedEvent(0.4, "check_boost2"); + ScheduleDelayedEvent(0.6, "check_boost2"); + ScheduleDelayedEvent(0.8, "check_boost2"); + } + + void check_boost2() + { + if (!(DOING_JUMP)) return; + string BALL_ORG = GetEntityOrigin(BALL_ID); + string MY_ORG = GetEntityOrigin(GetOwner()); + float BALL_FROM_GOAL = Distance(BALL_ORG, NME_GOAL_LOC); + int KEEP_GOING = 0; + float MY_FROM_GOAL = Distance(MY_ORG, NME_GOAL_LOC); + if (MY_FROM_GOAL < BALL_FROM_GOAL) + { + int KEEP_GOING = 1; + } + if (GetEntityProperty(BALL_ID, "range2d") < 30) + { + int KEEP_GOING = 1; + } + if ((KEEP_GOING)) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 100, 0)); + } + else + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 0)); + } + } + + void jump_land() + { + DOING_JUMP = 0; + npcatk_resume_ai(); + } + + void kick_land() + { + soc_kickball(); + } + +} + +} diff --git a/scripts/angelscript/ms_soccer/troll1.as b/scripts/angelscript/ms_soccer/troll1.as new file mode 100644 index 00000000..10ef7a7c --- /dev/null +++ b/scripts/angelscript/ms_soccer/troll1.as @@ -0,0 +1,91 @@ +#pragma context server + +#include "ms_soccer/base_soccer.as" +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Troll1 : CGameScript +{ + int AM_GOALIE; + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_ROUND_LOST1; + string ANIM_ROUND_LOST2; + string ANIM_ROUND_WIN1; + string ANIM_ROUND_WIN2; + string ANIM_RUN; + string ANIM_SCOOP_BALL; + string ANIM_WALK; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int MOVE_RANGE; + int NPC_FIGHTS_NPCS; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_STRUCK; + string SOUND_WALK1; + string SOUND_WALK2; + + Troll1() + { + ANIM_IDLE = "idle0"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_KICK = "kick_ball"; + ANIM_ATTACK = "kick_ball"; + ANIM_SCOOP_BALL = "throw_rock"; + ANIM_ROUND_WIN1 = "idle2"; + ANIM_ROUND_WIN2 = "idle2"; + ANIM_ROUND_LOST1 = "idle3"; + ANIM_ROUND_LOST2 = "idle3"; + ATTACK_MOVERANGE = 20; + MOVE_RANGE = 20; + ATTACK_RANGE = 38; + ATTACK_HITRANGE = 56; + SOUND_STRUCK = "weapons/cbar_hitbod1.wav"; + SOUND_PAIN = "monsters/troll/trollpain.wav"; + SOUND_ATTACK = "monsters/troll/trollattack.wav"; + SOUND_DEATH = "monsters/troll/trolldeath.wav"; + SOUND_WALK1 = "monsters/troll/step1.wav"; + SOUND_WALK2 = "monsters/troll/step2.wav"; + SOUND_IDLE = "monsters/troll/trollidle2.wav"; + NPC_FIGHTS_NPCS = 1; + AM_GOALIE = 1; + } + + void OnSpawn() override + { + SetName("Soccer Troll"); + SetModel("soccer/soccer_troll.mdl"); + SetWidth(72); + SetHeight(100); + SetHealth(1000); + SetRace("human"); + SetRoam(false); + SetHearingSensitivity(0); + } + + void frame_kick_land() + { + soc_kickball(); + } + + void rock_pickup() + { + soc_ball_scoop(); + } + + void rock_throw() + { + soc_ball_release(); + } + +} + +} diff --git a/scripts/angelscript/ms_underworldv2/map_startup.as b/scripts/angelscript/ms_underworldv2/map_startup.as new file mode 100644 index 00000000..34f72b58 --- /dev/null +++ b/scripts/angelscript/ms_underworldv2/map_startup.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "ms_underworldv2"; + MAP_WEATHER = "fog_red;fog_red;fog_red;fog_red;fog_red;fog_red"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Underworld"); + SetGlobalVar("G_MAP_DESC", "An old MS 1.35 map, converted for MS:C"); + SetGlobalVar("G_MAP_DIFF", "Levels 15-20 / 200-400hp"); + SetGlobalVar("G_WARN_HP", 200); + SetGlobalVar("G_FORCE_SPAWN_WEATHER", "fog_red"); + } + +} + +} diff --git a/scripts/angelscript/ms_wicardoven/chest_maldora.as b/scripts/angelscript/ms_wicardoven/chest_maldora.as new file mode 100644 index 00000000..ddc38354 --- /dev/null +++ b/scripts/angelscript/ms_wicardoven/chest_maldora.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ChestMaldora : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("armor_fireliz", 10); + tc_add_artifact("scroll2_summon_guard", 4); + tc_add_artifact("armor_pheonix55", 4); + } + + void chest_additems() + { + add_gold(RandomInt(100, 1000)); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "mana_vampire", 1, 0); + AddStoreItem(STORENAME, "mana_protection", 1, 0); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "mana_speed", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + add_great_item(); + } + if (RandomInt(1, 3) == 1) + { + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/ms_wicardoven/chest_voldar.as b/scripts/angelscript/ms_wicardoven/chest_voldar.as new file mode 100644 index 00000000..eacdaae8 --- /dev/null +++ b/scripts/angelscript/ms_wicardoven/chest_voldar.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ChestVoldar : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("armor_salamander", 10); + tc_add_artifact("scroll2_summon_fangtooth", 10); + tc_add_artifact("swords_rune_green", 10); + } + + void chest_additems() + { + add_gold(RandomInt(20, 200)); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "swords_liceblade", 1, 0); + AddStoreItem(STORENAME, "swords_poison1", 1, 0); + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/ms_wicardoven/game_master.as b/scripts/angelscript/ms_wicardoven/game_master.as new file mode 100644 index 00000000..bda4e0ba --- /dev/null +++ b/scripts/angelscript/ms_wicardoven/game_master.as @@ -0,0 +1,29 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + void game_triggered() + { + if (param1 == "music_voldar_dead") + { + ScheduleDelayedEvent(2.5, "sailor_moon"); + } + } + + void sailor_moon() + { + // TODO: playmp3 all combat sailormoon_victory.mp3 + ScheduleDelayedEvent(7.5, "end_music"); + } + + void end_music() + { + // TODO: playmp3 all stop + } + +} + +} diff --git a/scripts/angelscript/ms_wicardoven/maldora.as b/scripts/angelscript/ms_wicardoven/maldora.as new file mode 100644 index 00000000..ac0b3120 --- /dev/null +++ b/scripts/angelscript/ms_wicardoven/maldora.as @@ -0,0 +1,1012 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Maldora : CGameScript +{ + string ANIM_BOLT; + string ANIM_CAST; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LEAP; + string ANIM_LOOK; + string ANIM_ROCK; + string ANIM_RUN; + string ANIM_RUN_NORM; + string ANIM_WALK; + string ANIM_WALK_NORM; + string ANIM_WAND; + string APPLIED_BEAM; + string AS_ATTACKING; + string BARRIER_COLOR; + int BARRIER_DELAY; + float BARRIER_FREQ; + string BARRIER_IDX; + int BARRIER_ON; + string BARRIER_TARGS; + string BEAM_COUNT; + string BEAM_ON; + string BEAM_TARGET; + string CHAIN_COUNT; + int CHAIN_COUNT_LIMIT; + string CHAIN_LIST; + string CHAIN_ON; + int COMBAT_ON; + int DMG_BARRIER; + float DMG_CHAIN; + float DMG_PUSH_BEAM; + int DMG_ROCKS; + float DMG_SHOCK; + float DMG_WAND; + string FINGER_ADJ; + int GAVE_WARNING; + string G_DEVELOPER; + int IMAGES_ALIVE; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + float LAVA_FREQ; + int MINIONS_ALIVE; + int MINION_LIMIT; + string MINION_SCRIPT; + string MONSTER_MODEL; + string NEXT_MINION; + int NO_MOVE; + int NO_SPAWN_STUCK_CHECK; + int NO_STUCK_CHECKS; + int NPC_BASE_EXP; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_FORCED_MOVEDEST; + string NPC_IS_BOSS; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_IFSEEN; + int NPC_PROXACT_RANGE; + int NPC_PROX_ACTIVATE; + int NUM_SPELLS; + string ORC_A_ID; + string ORC_B_ID; + string PRO_NOUN; + string PUSH_BEAM_ID; + string PUSH_BEAM_VISIBLE; + int REPULSE_ON; + string SHADOW_SCRIPT; + string SOUND_BEAM; + string SOUND_SHOCK1; + string SOUND_SHOCK2; + string SOUND_SHOCK3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + int SPELL_CHOICE; + float SPELL_FREQ; + string SPELL_TARGET; + string WAND_ATK; + string WAND_TARGET; + string XSOUND_LEVITATE; + string XSOUND_SPIN; + string XSOUND_SUMMON; + + Maldora() + { + CHAIN_COUNT_LIMIT = 20; + if (StringToLower(GetMapName()) == "ms_wicardoven") + { + NPC_IS_BOSS = 1; + } + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_RESTORATION = 0.25; + IS_UNHOLY = 1; + NUM_SPELLS = 6; + MINION_LIMIT = 2; + FINGER_ADJ = "$relpos($vec(0,MY_YAW,0),$vec(0,30,54))"; + SHADOW_SCRIPT = "ms_wicardoven/maldora_image"; + MINION_SCRIPT = "monsters/maldora_minion_random"; + NPC_BASE_EXP = 2000; + ANIM_IDLE = "idle"; + ANIM_LOOK = "look_idle"; + ANIM_RUN_NORM = "run2"; + ANIM_WALK_NORM = "walk2handed"; + ANIM_JUMP = "jump"; + ANIM_LEAP = "long_jump"; + ANIM_DEATH = "look_idle"; + ANIM_RUN = "run2"; + ANIM_WALK = "walk2handed"; + ANIM_CAST = "ref_shoot_trip"; + ANIM_ROCK = "ref_shoot_squeak"; + ANIM_BOLT = "shoot_1"; + ANIM_WAND = "ref_shoot_crowbar"; + LAVA_FREQ = Random(20.0, 40.0); + SPELL_FREQ = 9.0; + BARRIER_FREQ = 30.0; + DMG_PUSH_BEAM = Random(2, 6); + DMG_CHAIN = Random(2, 6); + DMG_SHOCK = 10.0; + DMG_ROCKS = RandomInt(50, 200); + DMG_WAND = Random(10, 20); + SOUND_SHOCK1 = "debris/zap8.wav"; + SOUND_SHOCK2 = "debris/zap3.wav"; + SOUND_SHOCK3 = "debris/zap4.wav"; + SOUND_BEAM = "weather/Storm_exclamation.wav"; + SOUND_STRUCK1 = "voices/human/male_hit2.wav"; + SOUND_STRUCK2 = "voices/human/male_hit1.wav"; + SOUND_STRUCK3 = "voices/human/male_hit3.wav"; + SOUND_STRUCK4 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK5 = "weapons/cbar_hitbod1.wav"; + NO_SPAWN_STUCK_CHECK = 1; + IMMUNE_VAMPIRE = 1; + MONSTER_MODEL = "monsters/maldora.mdl"; + Precache(MONSTER_MODEL); + Precache("ambience/the_horror1.wav"); + Precache("ambience/the_horror2.wav"); + Precache("ambience/the_horror3.wav"); + Precache("ambience/the_horror4.wav"); + Precache("monsters/skeleton_boss1.mdl"); + Precache("weapons/cbar_hitbod1.wav"); + Precache("weapons/cbar_hitbod2.wav"); + Precache("weapons/cbar_hitbod3.wav"); + Precache("zombie/zo_pain2.wav"); + Precache("zombie/zo_pain2.wav"); + Precache("zombie/claw_miss1.wav"); + Precache("zombie/claw_miss2.wav"); + Precache("null.wav"); + Precache("zombie/zo_pain1.wav"); + Precache("doors/aliendoor1.wav"); + Precache("debris/bustconcrete1.wav"); + Precache("debris/bustconcrete2.wav"); + Precache("debris/concrete3.wav"); + Precache("rockgibs.mdl"); + Precache("doors/aliendoor3.wav"); + Precache("magic/spawn.wav"); + Precache("monsters/orc.mdl"); + Precache("voices/orc/die.wav"); + XSOUND_LEVITATE = "fans/fan4on.wav"; + XSOUND_SPIN = "magic/fan4_noloop.wav"; + XSOUND_SUMMON = "magic/volcano_start.wav"; + Precache(XSOUND_LEVITATE); + Precache(XSOUND_SPIN); + Precache(XSOUND_SUMMON); + Precache("ambience/alienvoices1.wav"); + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 640; + NPC_PROXACT_IFSEEN = 1; + NPC_PROXACT_EVENT = "start_convo"; + BARRIER_COLOR = Vector3(0, 0, 255); + DMG_BARRIER = 0; + } + + void OnSpawn() override + { + if ((NOT_FRAGMENT)) return; + SetName("Fragment of Maldora"); + SetHealth(4000); + SetRace("demon"); + SetWidth(32); + SetHeight(86); + SetBloodType("white"); + SetRoam(false); + WAND_TARGET = "unset"; + SetHearingSensitivity(11); + SetInvincible(true); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("magic", 0.0); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("stun", 0); + SetDamageResistance("holy", 0.25); + SetModel(MONSTER_MODEL); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "skin", 5); + npcatk_suspend_ai(); + IMAGES_ALIVE = 0; + MINIONS_ALIVE = 0; + SetSayTextRange(2048); + if (!(NO_INTRO)) + { + SpawnNPC("ms_wicardoven/orc_archer_image", /* TODO: $relpos */ $relpos(20, 64, 0), ScriptMode::Legacy); + SpawnNPC("ms_wicardoven/orc_champion_image", /* TODO: $relpos */ $relpos(-20, 64, 0), ScriptMode::Legacy); + } + if ((NO_INTRO)) + { + combat_go(); + } + if ((NO_INTRO)) return; + ScheduleDelayedEvent(0.1, "make_barrier"); + ScheduleDelayedEvent(5.0, "reset_props"); + } + + void make_barrier() + { + ClientEvent("new", "all", "effects/sfx_barrier", GetEntityIndex(GetOwner()), 128, BARRIER_COLOR, 30.0, 0, 1); + BARRIER_IDX = "game.script.last_sent_id"; + BARRIER_ON = 1; + barrier_loop(); + ScheduleDelayedEvent(0.25, "get_orc_ids"); + } + + void get_orc_ids() + { + string ORC_A_NAME = FindEntityByName("orc_a"); + string ORC_B_NAME = FindEntityByName("orc_b"); + ORC_A_ID = GetEntityIndex(ORC_A_NAME); + ORC_B_ID = GetEntityIndex(ORC_B_NAME); + ScheduleDelayedEvent(0.1, "face_orcs"); + } + + void face_orcs() + { + CallExternal(ORC_A_ID, "face_me", GetEntityIndex(GetOwner())); + ScheduleDelayedEvent(0.2, "face_orcs2"); + } + + void face_orcs2() + { + CallExternal(ORC_B_ID, "face_me", GetEntityIndex(GetOwner())); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((COMBAT_ON)) + { + if ((IsValidPlayer("ent_lastheard"))) + { + } + SPELL_TARGET = GetEntityIndex("ent_lastheard"); + } + } + + void start_convo() + { + PlayAnim("critical", ANIM_WAND); + if (GetPlayerCount() == 1) + { + PRO_NOUN = "him"; + } + if (GetPlayerCount() > 1) + { + PRO_NOUN = "them"; + } + SayText("You incompetent fools! How could you let " + PRO_NOUN + " get this far!?"); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_orc_convo1.wav", 10); + ScheduleDelayedEvent(4.6, "orc_talk1"); + ScheduleDelayedEvent(7.0, "orc_talk2"); + ScheduleDelayedEvent(9.55, "orc_talk3"); + ScheduleDelayedEvent(11.25, "say_excuse_are_like_assholes"); + } + + void orc_talk1() + { + CallExternal(ORC_A_ID, "say_excuse1"); + } + + void orc_talk2() + { + CallExternal(ORC_B_ID, "say_minions"); + } + + void orc_talk3() + { + CallExternal(ORC_A_ID, "say_whadup"); + } + + void say_excuse_are_like_assholes() + { + PlayAnim("critical", ANIM_WAND); + SayText("Enough!"); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_orc_convo2.wav", 10); + ScheduleDelayedEvent(1.64, "say_amulet"); + } + + void say_amulet() + { + SayText("I told you! You cannot control the minions until I have Lor Malgoriand's amulet of..."); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_orc_convo3.wav", 10); + ScheduleDelayedEvent(5.5, "look_around"); + } + + void look_around() + { + PlayAnim("critical", ANIM_LOOK); + ScheduleDelayedEvent(1.0, "say_deal_with"); + } + + void say_deal_with() + { + SayText("Nevermind! I'll deal with " + PRO_NOUN + " myself!"); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_orc_convo4.wav", 10); + PlayAnim("critical", ANIM_BOLT); + EmitSound(GetOwner(), 0, "debris/beamstart14.wav", 10); + ScheduleDelayedEvent(0.1, "shock_ambience"); + string ORC_A_LOC = GetEntityOrigin(ORC_A_ID); + ORC_A_LOC += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 32)); + string ORC_B_LOC = GetEntityOrigin(ORC_B_ID); + ORC_B_LOC += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 32)); + string MY_LOC = GetMonsterProperty("origin"); + MY_LOC += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 10, 72)); + Effect("beam", "point", "lgtning.spr", 30, MY_LOC, ORC_A_LOC, Vector3(255, 255, 255), 255, 10, 0.5); + Effect("beam", "point", "lgtning.spr", 30, MY_LOC, ORC_B_LOC, Vector3(255, 255, 255), 255, 10, 0.5); + CallExternal(ORC_A_ID, "die"); + CallExternal(ORC_B_ID, "die"); + ScheduleDelayedEvent(3.1, "lets_play"); + } + + void shock_ambience() + { + EmitSound(GetOwner(), 0, "magic/shock_noloop.wav", 10); + } + + void lets_play() + { + face_target(NPC_PROXACT_PLAYERID); + WAND_TARGET = NPC_PROXACT_PLAYERID; + PlayAnim("critical", ANIM_ROCK); + SayText("Now... Let us end this..."); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_orc_convo5.wav", 10); + ScheduleDelayedEvent(0.5, "combat_go"); + } + + void combat_go() + { + if (!(NO_INTRO)) + { + BARRIER_ON = 0; + ClientEvent("update", "all", BARRIER_IDX, "clear_sprites"); + UseTrigger("maldora_seal"); + } + SetInvincible(false); + SetMoveAnim(ANIM_RUN); + COMBAT_ON = 1; + cycle_up(); + BARRIER_DELAY = 1; + BARRIER_FREQ("reset_barrier_delay"); + pick_spell(); + ScheduleDelayedEvent(1.0, "movement_cycle"); + LAVA_FREQ("raise_lava"); + } + + void reset_barrier_delay() + { + BARRIER_DELAY = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(COMBAT_ON)) return; + if (!(false)) return; + SPELL_TARGET = GetEntityIndex(m_hLastSeen); + } + + void movement_cycle() + { + ScheduleDelayedEvent(0.5, "movement_cycle"); + if ((NO_MOVE)) return; + if ((SUSPEND_AI)) + { + npcatk_go_movedest(); + } + if (!(false)) + { + SetMoveAnim(ANIM_WALK); + } + if ((false)) + { + SetMoveAnim(ANIM_RUN); + } + if ((IsEntityAlive(WAND_TARGET))) + { + if (GetEntityRange(WAND_TARGET) < 1024) + { + } + npcatk_setmovedest(WAND_TARGET, MOVE_RANGE); + if (GetEntityRange(WAND_TARGET) < ATTACK_RANGE) + { + } + swing_fist(WAND_TARGET); + } + if ((IsEntityAlive(WAND_TARGET))) + { + if (GetEntityRange(WAND_TARGET) >= 1024) + { + } + WAND_TARGET = "unset"; + } + if (WAND_TARGET == "unset") + { + if (RandomInt(1, 20) == 1) + { + string NEW_WAND = SPELL_TARGET; + if (GetEntityRange(SPELL_TARGET) > 640) + { + if ((false)) + { + } + string NEW_WAND = GetEntityIndex(m_hLastSeen); + } + if (!(IsEntityAlive(SPELL_TARGET))) + { + if ((false)) + { + } + string NEW_WAND = GetEntityIndex(m_hLastSeen); + } + swing_fist(NEW_WAND); + } + } + if (WAND_TARGET != "unset") + { + int DISENGAGE = RandomInt(1, 10); + if (DISENGAGE == 1) + { + leap_away(WAND_TARGET); + WAND_TARGET = "unset"; + } + if (DISENGAGE > 1) + { + npcatk_setmovedest(WAND_TARGET, MOVE_RANGE); + } + } + if (!(IsEntityAlive(WAND_TARGET))) + { + if (RandomInt(1, 5) == 1) + { + } + int RAND_ANG = RandomInt(0, 359); + string TRACE_START = GetMonsterProperty("origin"); + string TRACE_END = TRACE_START; + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, RAND_ANG, 0), Vector3(0, 1000, 0)); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + npcatk_setmovedest(TRACE_LINE, MOVE_RANGE); + } + } + + void reset_props() + { + SetRepeatDelay(10.0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void thrash_strike() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, 0.8); + } + + void pick_spell() + { + SPELL_CHOICE = RandomInt(1, NUM_SPELLS); + if (G_DEVELOPER > 0) + { + SPELL_CHOICE = G_DEVELOPER; + G_DEVELOPER = 0; + } + if (GetEntityRange(SPELL_TARGET) > 2048) + { + SPELL_CHOICE = 0; + } + if (!(IsEntityAlive(SPELL_TARGET))) + { + SPELL_CHOICE = 0; + } + if (GetRelationship(SPELL_TARGET) == "ally") + { + SPELL_CHOICE = 0; + } + if (SPELL_CHOICE == 0) + { + if (!(BARRIER_ON)) + { + } + if ((NO_MOVE)) + { + resume_moving(); + } + } + if (SPELL_CHOICE == 1) + { + if ((BARRIER_DELAY)) + { + SPELL_CHOICE = RandomInt(2, NUM_SPELLS); + } + if (!(BARRIER_DELAY)) + { + } + BARRIER_DELAY = 1; + BARRIER_FREQ("reset_barrier_delay"); + ScheduleDelayedEvent(0.1, "raise_barrier"); + } + if (SPELL_CHOICE == 2) + { + BEAM_ON = 1; + face_target(SPELL_TARGET); + PlayAnim("critical", ANIM_BOLT); + BEAM_COUNT = 0; + APPLIED_BEAM = 0; + BEAM_TARGET = SPELL_TARGET; + ScheduleDelayedEvent(0.1, "beam_push"); + } + if (SPELL_CHOICE == 3) + { + CHAIN_ON = 1; + face_target(SPELL_TARGET); + PlayAnim("critical", ANIM_CAST); + CHAIN_COUNT = 0; + ScheduleDelayedEvent(0.1, "chain_lightning"); + } + if (SPELL_CHOICE == 4) + { + PlayAnim("critical", ANIM_CAST); + string NUM_ROCKS = GetPlayerCount(); + if (NUM_ROCKS > 4) + { + int NUM_RUCKS = 4; + } + SpawnNPC("monsters/summon/rock_storm", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), NUM_ROCKS, DMG_ROCKS, 64, 90 + } + if (SPELL_CHOICE == 5) + { + if (IMAGES_ALIVE >= 1) + { + SPELL_CHOICE = RandomInt(6, NUM_SPELLS); + } + if (IMAGES_ALIVE == 0) + { + } + if (RandomInt(1, 3) == 1) + { + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_summon.wav", 10); + SayText("Shadows , of shadows , of shadows..."); + } + ScheduleDelayedEvent(0.1, "laugh_it_up"); + stop_moving(); + PlayAnim("critical", ANIM_CAST); + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 128, 2, 2); + SetSolid("none"); + SpawnNPC(SHADOW_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, -35), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET, 45 + ScheduleDelayedEvent(0.1, "make_shadow2"); + ScheduleDelayedEvent(0.2, "make_shadow3"); + ScheduleDelayedEvent(0.4, "make_shadow4"); + IMAGES_ALIVE = 4; + repulse_blast(); + ScheduleDelayedEvent(1.0, "resume_solid"); + ScheduleDelayedEvent(3.0, "resume_moving"); + } + if (SPELL_CHOICE == 6) + { + if (MINIONS_ALIVE >= MINION_LIMIT) + { + SPELL_CHOICE = RandomInt(7, NUM_SPELLS); + } + if (GetGameTime() <= NEXT_MINION) + { + SPELL_CHOICE = RandomInt(7, NUM_SPELLS); + } + if (GetGameTime() > NEXT_MINION) + { + } + NEXT_MINION = GetGameTime(); + NEXT_MINION += 5.0; + if (MINIONS_ALIVE < MINION_LIMIT) + { + } + MINIONS_ALIVE += 1; + PlayAnim("critical", ANIM_CAST); + EmitSound(GetOwner(), 0, "monsters/skeleton/calrain3.wav", 10); + // TODO: UNCONVERTED: effects glow ent_me (255,255,255) 128 2 2 + SpawnNPC(MINION_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, -64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET + stop_moving(0.9); + ScheduleDelayedEvent(1.0, "leap_away"); + } + if (SPELL_CHOICE == 1) + { + ScheduleDelayedEvent(2.0, "pick_spell"); + int EXIT_SUB = 1; + } + if (SPELL_CHOICE == 7) + { + ScheduleDelayedEvent(0.2, "pick_spell"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SPELL_FREQ("pick_spell"); + } + + void make_shadow2() + { + SpawnNPC(SHADOW_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, -35), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET, 135 + } + + void make_shadow3() + { + SpawnNPC(SHADOW_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, -35), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET, 225 + } + + void make_shadow4() + { + SpawnNPC(SHADOW_SCRIPT, /* TODO: $relpos */ $relpos(0, 0, -35), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), SPELL_TARGET, 315 + } + + void repulse_blast() + { + REPULSE_ON = 1; + ScheduleDelayedEvent(1.0, "reset_repulse"); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 96, 0.0, 1.0, 0.0); + } + + void reset_repulse() + { + REPULSE_ON = 0; + } + + void laugh_it_up() + { + EmitSound(GetOwner(), 0, "monsters/skeleton/cal_laugh.wav", 10); + } + + void image_died() + { + IMAGES_ALIVE -= 1; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(NO_MOVE)) + { + if (GetEntityRange(m_hLastStruck) < ATTACK_RANGE) + { + } + swing_fist(GetEntityIndex(m_hLastStruck)); + } + if ((IsValidPlayer(m_hLastStruck))) + { + if (RandomInt(1, 2) == 1) + { + } + SPELL_TARGET = GetEntityIndex(m_hLastStruck); + } + if (!(param1 > 20)) return; + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (!(param1 > 50)) return; + leap_away(GetEntityIndex(m_hLastStruck)); + } + + void leap_away() + { + if ((CHAIN_ON)) return; + if ((BEAM_ON)) return; + if ((BARRIER_ON)) return; + if ((NO_MOVE)) return; + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_away2"); + } + + void leap_away2() + { + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 50)); + } + + void swing_fist() + { + if ((CHAIN_ON)) return; + if ((BEAM_ON)) return; + if ((BARRIER_ON)) return; + if ((NO_MOVE)) return; + WAND_TARGET = param1; + npcatk_setmovedest(WAND_TARGET, MOVE_RANGE); + if (!(GetEntityRange(WAND_TARGET) < ATTACK_RANGE)) return; + PlayAnim("once", ANIM_WAND); + } + + void stop_moving() + { + SetRoam(false); + NO_STUCK_CHECKS = 1; + NO_MOVE = 1; + SetMoveAnim(ANIM_IDLE); + ANIM_RUN = ANIM_IDLE; + ANIM_WALK = ANIM_IDLE; + face_target(SPELL_TARGET); + PARAM1("resume_moving"); + } + + void resume_solid() + { + SetSolid("box"); + } + + void resume_moving() + { + SetRoam(true); + NO_STUCK_CHECKS = 0; + NO_MOVE = 0; + SetMoveAnim(ANIM_RUN); + ANIM_RUN = ANIM_RUN_NORM; + ANIM_WALK = ANIM_WALK_NORM; + } + + void raise_barrier() + { + LogDebug("raise_barrier BARRIER_COLOR DMG_BARRIER"); + stop_moving(); + BARRIER_ON = 1; + PlayAnim("critical", ANIM_CAST); + ClientEvent("new", "all", "effects/sfx_barrier", GetEntityIndex(GetOwner()), 128, BARRIER_COLOR, 10.0, 1, 1); + EmitSound(GetOwner(), 0, "magic/spawn_loud.wav", 10); + barrier_loop(); + ScheduleDelayedEvent(10.0, "lower_barrier"); + } + + void barrier_loop() + { + if (!(BARRIER_ON)) return; + ScheduleDelayedEvent(0.5, "barrier_loop"); + string SCAN_POINT = GetEntityOrigin(GetOwner()); + SCAN_POINT += "z"; + BARRIER_TARGS = FindEntitiesInSphere("enemy", 128); + if (!(BARRIER_TARGS != "none")) return; + EmitSound(GetOwner(), 0, "doors/aliendoor1.wav", 10); + for (int i = 0; i < GetTokenCount(BARRIER_TARGS, ";"); i++) + { + barrier_affect_targets(); + } + } + + void barrier_affect_targets() + { + string CUR_TARG = GetToken(BARRIER_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(0, 1000, 110))); + } + + void lower_barrier() + { + BARRIER_ON = 0; + resume_moving(); + CallExternal(BARRIER_ID, "remove_barrier"); + } + + void beam_push() + { + BEAM_COUNT += 1; + if (BEAM_COUNT == 1) + { + init_beam_push(); + Effect("beam", "update", PUSH_BEAM_ID, "brightness", 255); + } + if (BEAM_COUNT < 30) + { + SetIdleAnim(ANIM_BOLT); + SetMoveAnim(ANIM_WALK); + } + if (BEAM_COUNT == 30) + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + swing_fist(GetEntityIndex(m_hLastStruck)); + BEAM_ON = 0; + SetGlobalVar("G_MALDORA_SPELLING", 0); + Effect("beam", "update", PUSH_BEAM_ID, "brightness", 0); + } + if (!(BEAM_COUNT < 30)) return; + ScheduleDelayedEvent(0.1, "beam_push"); + if (!(IsEntityAlive(BEAM_TARGET))) return; + face_target(BEAM_TARGET); + string BEAM_START = GetMonsterProperty("origin"); + string SEE_BTARGET = false; + if (!(SEE_BTARGET)) + { + PUSH_BEAM_VISIBLE = 0; + Effect("beam", "update", PUSH_BEAM_ID, "brightness", 0); + } + if (!(SEE_BTARGET)) return; + if (!(PUSH_BEAM_VISIBLE)) + { + Effect("beam", "update", PUSH_BEAM_ID, "brightness", 255); + } + PUSH_BEAM_VISIBLE = 1; + PlayAnim("once", ANIM_BOLT); + EmitSound(GetOwner(), 0, SOUND_BEAM, 10); + Effect("beam", "update", PUSH_BEAM_ID, "end_target", BEAM_TARGET, 0); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("angles")); + MY_YAW += BEAM_COUNT; + if (MY_YAW > 359) + { + MY_YAW -= 359; + } + string VEL_SET = /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(500, 1000, 30)); + SetVelocity(BEAM_TARGET, VEL_SET); + DoDamage(BEAM_TARGET, "direct", DMG_PUSH_BEAM, 1.0, GetEntityIndex(GetOwner())); + if (!(APPLIED_BEAM)) + { + if ((/* TODO: $get_takedmg */ $get_takedmg(BEAM_TARGET, "stun"))) + { + } + ApplyEffect(BEAM_TARGET, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DMG_SHOCK); + APPLIED_BEAM = 1; + } + } + + void my_target_died() + { + if (param1 == WAND_TARGET) + { + WAND_TARGET = "unset"; + } + SPELL_TARGET = "unset"; + if ((GAVE_WARNING)) return; + GAVE_WARNING = 1; + SendInfoMsg(param1, "Beware! The Fragment of Malodra is immune to magic!"); + } + + void chain_lightning() + { + CHAIN_COUNT += 1; + if (CHAIN_COUNT == 1) + { + string SCAN_POINT = GetEntityOrigin(GetOwner()); + SCAN_POINT += "z"; + CHAIN_LIST = FindEntitiesInSphere("enemy", 1024); + } + if (CHAIN_COUNT < CHAIN_COUNT_LIMIT) + { + SetIdleAnim(ANIM_CAST); + SetMoveAnim(ANIM_WALK); + face_target(SPELL_TARGET); + } + if (CHAIN_COUNT == CHAIN_COUNT_LIMIT) + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + npcatk_flee(GetEntityIndex(m_hLastStruck), 800, 3.0); + CHAIN_ON = 0; + SetGlobalVar("G_MALDORA_SPELLING", 0); + } + if (!(CHAIN_COUNT < CHAIN_COUNT_LIMIT)) return; + ScheduleDelayedEvent(0.25, "chain_lightning"); + if (!(CHAIN_LIST != "none")) return; + PlayAnim("once", ANIM_CAST); + for (int i = 0; i < GetTokenCount(CHAIN_LIST, ";"); i++) + { + chain_affect_targets(); + } + } + + void chain_affect_targets() + { + string CUR_TARG = GetToken(CHAIN_LIST, i, ";"); + string TARG_RANGE = GetEntityRange(CUR_TARG); + TARG_RANGE *= 1.5; + DoDamage(CUR_TARG, TARG_RANGE, DMG_CHAIN, 1.0, GetOwner()); + } + + void game_dodamage() + { + if (!(param1)) + { + WAND_ATK = 0; + } + if ((REPULSE_ON)) + { + if (GetEntityRange(param2) < 128) + { + string INC_VEL = /* TODO: $vec.yaw */ $vec.yaw(GetEntityAngles(param2)); + INC_VEL -= 180; + if (INC_VEL < 0) + { + INC_VEL += 359; + } + string OUT_VEL = /* TODO: $relvel */ $relvel(Vector3(0, INC_VEL, 0), Vector3(0, 2000, 0)); + AddVelocity(GetEntityIndex(param2), OUT_VEL); + } + } + if (!(param1)) return; + if ((CHAIN_ON)) + { + if (GetGameTime() > NEXT_CHAIN_SOUND) + { + NEXT_CHAIN_SOUND = GetGameTime(); + NEXT_CHAIN_SOUND += 0.5; + // PlayRandomSound from: SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3 + array sounds = {SOUND_SHOCK1, SOUND_SHOCK2, SOUND_SHOCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(0, 300, 0))); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, param2, 1, Vector3(255, 255, 255), 255, 10, 1.0); + if (GetGameTime() > NEXT_CHAIN_SHOCK) + { + NEXT_CHAIN_SHOCK = GetGameTime(); + NEXT_CHAIN_SHOCK += 1.0; + ApplyEffect(param2, "effects/dot_lightning", 3.0, GetEntityIndex(GetOwner()), DMG_SHOCK); + } + } + if ((WAND_ATK)) + { + WAND_ATK = 0; + if (RandomInt(1, 5) == 1) + { + } + ApplyEffect(param2, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + } + } + + void strike_wand() + { + AS_ATTACKING = GetGameTime(); + if (!(GetEntityRange(WAND_TARGET) < ATTACK_HITRANGE)) return; + WAND_ATK = 1; + DoDamage(WAND_TARGET, ATTACK_HITRANGE, DMG_WAND, 0.8, "blunt"); + } + + void quick_spell() + { + AS_ATTACKING = GetGameTime(); + } + + void quick_bolt() + { + AS_ATTACKING = GetGameTime(); + } + + void raise_lava() + { + PlayAnim("critical", ANIM_CAST); + UseTrigger("multilava"); + LAVA_FREQ("raise_lava"); + } + + void face_target() + { + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(param1); + } + + void skele_died() + { + MINIONS_ALIVE -= 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((NO_INTRO)) return; + CallExternal("all", "maldora_died"); + SetProp(GetOwner(), "renderamt", 0); + SpawnNPC("ms_wicardoven/maldora_dead", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: "death" + SetSolid("none"); + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + } + + void init_beam_push() + { + Effect("beam", "ents", "lgtning.spr", 200, GetEntityIndex(GetOwner()), 2, GetEntityIndex(GetOwner()), 0, Vector3(255, 255, 0), 0, 20, 30.0); + PUSH_BEAM_ID = GetEntityIndex(m_hLastCreated); + } + +} + +} diff --git a/scripts/angelscript/ms_wicardoven/maldora_dead.as b/scripts/angelscript/ms_wicardoven/maldora_dead.as new file mode 100644 index 00000000..c9a17f95 --- /dev/null +++ b/scripts/angelscript/ms_wicardoven/maldora_dead.as @@ -0,0 +1,259 @@ +#pragma context server + +namespace MS +{ + +class MaldoraDead : CGameScript +{ + string ANIM_IDLE; + string AXE_ITEM; + string AXE_TYPE; + string BARRIER_ID; + int DEATH_ACCEL; + int FLY_COUNT; + int I_AM_TURNABLE; + string MONSTER_MODEL; + string MY_Z; + int NO_SPAWN_STUCK_CHECK; + string ROOF_HEIGHT; + string SOUND_LAUGH; + + MaldoraDead() + { + ANIM_IDLE = "idle"; + SOUND_LAUGH = "monsters/skeleton/cal_laugh.wav"; + MONSTER_MODEL = "monsters/maldora.mdl"; + Precache(MONSTER_MODEL); + NO_SPAWN_STUCK_CHECK = 1; + I_AM_TURNABLE = 0; + Precache("doors/aliendoor3.wav"); + Precache("magic/spawn.wav"); + } + + void OnSpawn() override + { + SetName("Fragment of Maldora"); + SetHealth(3000); + SetRace("demon"); + SetInvincible(true); + SetModel(MONSTER_MODEL); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetSolid("none"); + SetWidth(32); + SetHeight(86); + SetBloodType("none"); + SetRoam(false); + SetSayTextRange(2048); + SetName("dead_maldora"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + } + + void game_precache() + { + Precache("monsters/summon/barrier"); + } + + void make_barrier() + { + SpawnNPC("monsters/summon/barrier", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 128, 1, 0 + BARRIER_ID = GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(0.25, "get_orc_ids"); + } + + void game_dynamically_created() + { + DEATH_ACCEL = 20; + if (param1 != "crow") + { + if (param1 != "crow_final") + { + } + ScheduleDelayedEvent(0.1, "make_barrier"); + } + if (param1 == "death") + { + DEATH_ACCEL = 10; + death_exit(); + } + if (param1 == "crow") + { + DEATH_ACCEL = 10; + fly_out(); + } + if (param1 == "crow_final") + { + DEATH_ACCEL = 10; + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + fly_out(); + LogDebug("drop_axe PARAM2"); + if (param2 > -1) + { + } + ScheduleDelayedEvent(0.5, "spawn_axe"); + AXE_TYPE = param2; + } + } + + void spawn_axe() + { + SayText("Here fools, you've earned a gift..."); + EmitSound(GetOwner(), 0, "voices/lodagond-4/maldora_reward.wav", 10); + if (AXE_TYPE == 0) + { + AXE_ITEM = "axes_tf"; + } + if (AXE_TYPE == 1) + { + AXE_ITEM = "axes_td"; + } + if (AXE_TYPE == 2) + { + AXE_ITEM = "axes_ti"; + } + if (AXE_TYPE == 3) + { + AXE_ITEM = "axes_tp"; + } + if (AXE_TYPE == 4) + { + AXE_ITEM = "axes_tl"; + } + SetProp(GetOwner(), "skin", 5); + CallExternal(GAME_MASTER, "gm_drop_item", 1.0, AXE_ITEM, GetEntityOrigin(GetOwner()), 1); + } + + void say_gaveyou1() + { + PlayAnim("critical", "ref_shoot_squeak"); + SayText(I + " ve empowered your shamans. I ve given your troops all the poison they could ever use..."); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_2voldar1.wav", 10); + } + + void say_gaveyou2() + { + SayText("...and " + I + " ve granted you your own magical powers... Just as we agreed."); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_2voldar2.wav", 10); + } + + void say_gaveyou3() + { + PlayAnim("critical", "look_idle"); + if (GetPlayerCount() == 1) + { + SayText("But if you can t stop one pathetic human, with all of that power..."); + } + if (GetPlayerCount() == 2) + { + SayText("But if you can t stop a pair of puny humans, with all of that power..."); + } + if (GetPlayerCount() == 3) + { + SayText("But if you can t stop a three puny humans, with all of that power..."); + } + if (GetPlayerCount() == 4) + { + SayText("But if you can t stop a four puny humans, with all of that power..."); + } + if (GetPlayerCount() == 5) + { + SayText("But if you can t stop a five puny humans, with all of that power..."); + } + if (GetPlayerCount() == 6) + { + SayText("But if you can t stop a six puny humans, with all of that power..."); + } + if (GetPlayerCount() > 6) + { + SayText("But if you can t stop a couple of puny humans, with all of that power..."); + } + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_2voldar3.wav", 10); + } + + void say_gaveyou4() + { + SayText("...then you aren t of much use to me, are you?"); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_2voldar4.wav", 10); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void face_me() + { + SetAngles("face_origin"); + ScheduleDelayedEvent(0.1, "straighten_up"); + } + + void straighten_up() + { + SetAngles("face"); + } + + void fly_out() + { + CallExternal(BARRIER_ID, "remove_barrier"); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_exit4.wav", 10); + SetFly(true); + FLY_COUNT = 0; + string TRACE_ORG = GetMonsterProperty("origin"); + string TRACE_END = /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 2000)); + string TRACE_LINE = TraceLine(TRACE_ORG, TRACE_END); + ROOF_HEIGHT = (TRACE_LINE).z; + ROOF_HEIGHT += 128; + ScheduleDelayedEvent(0.1, "fly_out_loop"); + } + + void fly_out_loop() + { + string MY_X = (GetMonsterProperty("origin")).x; + string MY_Y = (GetMonsterProperty("origin")).y; + MY_Z = (GetMonsterProperty("origin")).z; + MY_Z += DEATH_ACCEL; + SetEntityOrigin(GetOwner(), Vector3(MY_X, MY_Y, MY_Z)); + if (MY_Z > ROOF_HEIGHT) + { + remove_me(); + } + if (MY_Z <= ROOF_HEIGHT) + { + ScheduleDelayedEvent(0.1, "fly_out_loop"); + } + } + + void death_exit() + { + SayText("Well , it seems what my master said maybe true... Maybe you are amongst the chosen ones."); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_exit1.wav", 10); + ScheduleDelayedEvent(5.7, "death_exit2"); + } + + void death_exit2() + { + SayText("If so , you maybe useful. We will meet again one day , to put that to the test."); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_exit2.wav", 10); + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "ms_wicardoven") + { + ScheduleDelayedEvent(5.9, "death_exit3"); + } + if (L_MAP_NAME != "ms_wicardoven") + { + ScheduleDelayedEvent(1.0, "fly_out"); + } + } + + void death_exit3() + { + SayText("That is , if you even survive the desert beyond."); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/fmaldora_exit3.wav", 10); + ScheduleDelayedEvent(3.9, "fly_out"); + } + +} + +} diff --git a/scripts/angelscript/ms_wicardoven/maldora_image.as b/scripts/angelscript/ms_wicardoven/maldora_image.as new file mode 100644 index 00000000..4a4a9487 --- /dev/null +++ b/scripts/angelscript/ms_wicardoven/maldora_image.as @@ -0,0 +1,270 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class MaldoraImage : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_LEAP; + string ANIM_RUN; + string ANIM_WALK; + string ANIM_WAND; + float DMG_WAND; + string FIRST_TARGET; + int I_AM_TURNABLE; + int LEAP_DELAY; + float LEAP_FREQ; + string MONSTER_MODEL; + string MY_MASTER; + int NO_SPAWN_STUCK_CHECK; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int SLIDE_COUNT; + string SLIDE_DIR; + string SOUND_DEATH; + float SPELL_FREQ; + string UBER_MODE; + + MaldoraImage() + { + ANIM_IDLE = "idle"; + ANIM_ATTACK = "treadwater"; + ANIM_LEAP = "long_jump"; + ANIM_RUN = "run2"; + ANIM_WALK = "walk2handed"; + ANIM_DEATH = "die_backwards1"; + ANIM_WAND = "ref_shoot_crowbar"; + SPELL_FREQ = 7.0; + DMG_WAND = Random(10, 20); + LEAP_FREQ = 2.0; + SOUND_DEATH = "null.wav"; + MONSTER_MODEL = "monsters/maldora.mdl"; + Precache(MONSTER_MODEL); + NO_SPAWN_STUCK_CHECK = 1; + I_AM_TURNABLE = 0; + } + + void OnSpawn() override + { + SetName("Image of Maldora"); + SetHealth(200); + SetRace("demon"); + SetWidth(32); + SetHeight(86); + SetBloodType("none"); + NPC_GIVE_EXP = 60; + SetRoam(true); + SetHearingSensitivity(10); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + SetDamageResistance("holy", 3.0); + SetModel(MONSTER_MODEL); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "skin", 5); + reset_props(); + } + + void game_dynamically_created() + { + npcatk_suspend_ai(); + MY_MASTER = param1; + FIRST_TARGET = param2; + SLIDE_DIR = param3; + UBER_MODE = param4; + SetSolid("none"); + LogDebug("game_dynamically_created PARAM1 PARAM2 PARAM3 PARAM4"); + if (UBER_MODE == 1) + { + NPC_GIVE_EXP *= 10; + SetHealth(800); + SetDamageMultiplier(3.0); + LogDebug("game_dynamically_created Uber mode activated"); + } + SLIDE_COUNT = 0; + ScheduleDelayedEvent(0.1, "slide_in"); + ScheduleDelayedEvent(2.0, "npcatk_resume_ai"); + ScheduleDelayedEvent(2.1, "set_target"); + ScheduleDelayedEvent(4.0, "flank_loop"); + ScheduleDelayedEvent(120.0, "me_expire"); + } + + void slide_in() + { + string LEAP_TARG = /* TODO: $relpos */ $relpos(Vector3(0, SLIDE_DIR, 0), Vector3(0, 1000, 0)); + leap_at(LEAP_TARG); + } + + void set_target() + { + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + npcatk_settarget(FIRST_TARGET); + } + + void npc_targetsighted() + { + if (!(GetEntityRange(param1) > 100)) return; + leap_at(m_hAttackTarget); + } + + void leap_at() + { + if ((LEAP_DELAY)) return; + LEAP_DELAY = 1; + LEAP_FREQ("reset_leap_delay"); + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_at2"); + } + + void leap_at2() + { + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void leap_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 50)); + } + + void reset_leap_delay() + { + LEAP_DELAY = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + int RAND_DEATH = RandomInt(1, 7); + if (RAND_DEATH == 1) + { + ANIM_DEATH = "die_simple"; + } + if (RAND_DEATH == 2) + { + ANIM_DEATH = "die_backwards1"; + } + if (RAND_DEATH == 3) + { + ANIM_DEATH = "die_backwards"; + } + if (RAND_DEATH == 4) + { + ANIM_DEATH = "die_forwards"; + } + if (RAND_DEATH == 5) + { + ANIM_DEATH = "headshot"; + } + if (RAND_DEATH == 6) + { + ANIM_DEATH = "die_spin"; + } + if (RAND_DEATH == 7) + { + ANIM_DEATH = "gutshot"; + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetProp(GetOwner(), "renderamt", 80); + CallExternal(MY_MASTER, "image_died"); + } + + void reset_props() + { + SetRepeatDelay(5.3); + if (!(GetMonsterProperty("isalive"))) return; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void OnHuntTarget(CBaseEntity@ target) + { + string MASTER_ORG = GetEntityOrigin(MY_MASTER); + if (!(Distance(GetMonsterProperty("origin"), MASTER_ORG) < 64)) return; + leap_away(MY_MASTER); + } + + void leap_away() + { + NPC_FORCED_MOVEDEST = 1; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "leap_away2"); + } + + void leap_away2() + { + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "leap_boost"); + } + + void thrash_strike() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_WAND, 0.8, "blunt"); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(RandomInt(1, 5) == 1)) return; + ApplyEffect(param2, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + } + + void flank_loop() + { + ScheduleDelayedEvent(4.0, "flank_loop"); + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_RANGE)) return; + if (!(RandomInt(1, 2) == 1)) return; + string DEST_POS = GetEntityOrigin(m_hAttackTarget); + int RND_ANG = RandomInt(0, 359); + DEST_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, ATTACK_RANGE, 0)); + leap_at(DEST_POS); + } + + void maldora_died() + { + DeleteEntity(GetOwner()); + } + + void maldoraf_died() + { + ScheduleDelayedEvent(1.0, "check_owner"); + if (!(param1 == MY_MASTER)) return; + DeleteEntity(GetOwner()); + } + + void check_owner() + { + if ((IsEntityAlive(MY_MASTER))) return; + DeleteEntity(GetOwner()); + } + + void me_expire() + { + SetProp(GetOwner(), "renderamt", 0); + CallExternal(MY_MASTER, "image_died"); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void maldora_final_died() + { + if (!(param1 == MY_MASTER)) return; + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/ms_wicardoven/map_startup.as b/scripts/angelscript/ms_wicardoven/map_startup.as new file mode 100644 index 00000000..206c5b34 --- /dev/null +++ b/scripts/angelscript/ms_wicardoven/map_startup.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "ms_wicardoven"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Wicard Oven"); + SetGlobalVar("G_MAP_DESC", "This ancient orc stronghold has recently seen its masters return."); + SetGlobalVar("G_MAP_DIFF", "Levels 20-30 / HP 300-600"); + SetGlobalVar("G_WARN_HP", 300); + } + + void game_newlevel() + { + string reg.texture.name = "reflective"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.2"; + int reg.texture.reflect.range = 256; + int reg.texture.reflect.world = 1; + int reg.texture.water = 0; + // TODO: registertexture + } + +} + +} diff --git a/scripts/angelscript/ms_wicardoven/orc_archer_image.as b/scripts/angelscript/ms_wicardoven/orc_archer_image.as new file mode 100644 index 00000000..eac8e302 --- /dev/null +++ b/scripts/angelscript/ms_wicardoven/orc_archer_image.as @@ -0,0 +1,72 @@ +#pragma context server + +namespace MS +{ + +class OrcArcherImage : CGameScript +{ + void OnSpawn() override + { + SetName("Orc Lieutenant Shagul"); + SetRace("orc"); + SetInvincible(true); + SetName("orc_a"); + SetModel("monsters/orc.mdl"); + SetSolid("none"); + SetSayTextRange(2048); + SetModelBody(0, 3); + SetModelBody(1, 3); + SetModelBody(2, 3); + } + + void say_excuse1() + { + PlayAnim("critical", "warcry"); + if (GetPlayerCount() == 1) + { + string PRO_NOUN = "He was"; + } + if (GetPlayerCount() > 1) + { + string PRO_NOUN = "They were"; + } + SayText(PRO_NOUN + " too powerful for us!"); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/orca_2fmaldora1.wav", 10); + } + + void say_whadup() + { + PlayAnim("hold", "deflectcounter"); + SayText("Yeah , what s up with that!?"); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/orca_2fmaldora2.wav", 10); + } + + void die() + { + SetIdleAnim("die_fallback"); + SetMoveAnim("die_fallback"); + EmitSound(GetOwner(), 0, "voices/orc/die.wav", 10); + PlayAnim("hold", "die_fallback"); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 200, 3, 3); + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void face_me() + { + SetAngles("face_origin"); + ScheduleDelayedEvent(0.1, "straighten_up"); + } + + void straighten_up() + { + SetAngles("face"); + } + +} + +} diff --git a/scripts/angelscript/ms_wicardoven/orc_champion_image.as b/scripts/angelscript/ms_wicardoven/orc_champion_image.as new file mode 100644 index 00000000..4f187db3 --- /dev/null +++ b/scripts/angelscript/ms_wicardoven/orc_champion_image.as @@ -0,0 +1,57 @@ +#pragma context server + +namespace MS +{ + +class OrcChampionImage : CGameScript +{ + void OnSpawn() override + { + SetName("Orc Lieutenant Veral"); + SetRace("orc"); + SetInvincible(true); + SetName("orc_b"); + SetModel("monsters/orc.mdl"); + SetSolid("none"); + SetSayTextRange(2048); + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 1); + } + + void say_minions() + { + PlayAnim("critical", "shielddeflect1"); + SayText("...And we couldn t control your minions! They kept attacking us!"); + EmitSound(GetOwner(), 0, "voices/ms_wicardoven/orcb_2fmaldora.wav", 10); + } + + void die() + { + SetIdleAnim("die_fallback"); + SetMoveAnim("die_fallback"); + EmitSound(GetOwner(), 0, "voices/orc/die.wav", 10); + PlayAnim("hold", "die_fallback"); + Effect("glow", GetOwner(), Vector3(255, 255, 255), 200, 3, 3); + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void face_me() + { + SetAngles("face_origin"); + ScheduleDelayedEvent(0.1, "straighten_up"); + } + + void straighten_up() + { + SetAngles("face"); + } + +} + +} diff --git a/scripts/angelscript/msc_tutorial/map_startup.as b/scripts/angelscript/msc_tutorial/map_startup.as new file mode 100644 index 00000000..a5461c5e --- /dev/null +++ b/scripts/angelscript/msc_tutorial/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "tutorial"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Tutorial map by Dridje"); + SetGlobalVar("G_MAP_DESC", "A quick tutorial map for new MSC players."); + SetGlobalVar("G_MAP_DIFF", "(Easy)"); + SetGlobalVar("G_WARN_HP", 0); + } + +} + +} diff --git a/scripts/angelscript/mscave/Shadahar.as b/scripts/angelscript/mscave/Shadahar.as new file mode 100644 index 00000000..dec979d9 --- /dev/null +++ b/scripts/angelscript/mscave/Shadahar.as @@ -0,0 +1,175 @@ +#pragma context server + +#include "monsters/skeleton_base.as" + +namespace MS +{ + +class Shadahar : CGameScript +{ + string ANIM_BLAST; + string ANIM_CIRCLE; + string AS_ATTACKING; + float ATTACK_DAMAGE_HIGH; + float ATTACK_DAMAGE_LOW; + float ATTACK_HITCHANCE; + float CIRCLE_FREQ; + int CIRCLE_ON; + string DID_WARCRY; + int NPC_GIVE_EXP; + int PURE_FLEE; + int SKEL_HP; + float SKEL_RESPAWN_CHANCE; + int SKEL_RESPAWN_LIVES; + string SOUND_BOLT; + string SOUND_LAUGH; + string SOUND_WARCRY; + + Shadahar() + { + SKEL_HP = 1000; + ATTACK_HITCHANCE = 0.85; + ATTACK_DAMAGE_LOW = 15.5; + ATTACK_DAMAGE_HIGH = 25.5; + NPC_GIVE_EXP = 150; + ANIM_CIRCLE = "throw_scientist"; + SKEL_RESPAWN_CHANCE = 0.0; + SKEL_RESPAWN_LIVES = 0; + ANIM_BLAST = "rlflinch"; + SOUND_BOLT = "magic/ice_strike.wav"; + CIRCLE_FREQ = 30.0; + SOUND_LAUGH = "monsters/skeleton/cal_laugh.wav"; + SOUND_WARCRY = "monsters/skeleton/calrain3.wav"; + Precache("weapons/magic/seals.mdl"); + Precache("magic/temple.wav"); + Precache("magic/pulsemachine_noloop.wav"); + Precache("magic/frost_reverse.wav"); + Precache("skull.spr"); + } + + void skeleton_spawn() + { + if ((LIGHTNING_SKELE)) return; + SetName("Shadahar"); + if (GetMapName() != "mscave") + { + SetGold(RandomInt(25, 75)); + SetName("Gold Forged Skeleton"); + NPC_GIVE_EXP = 150; + } + if (GetMapName() == "mscave") + { + NPC_GIVE_EXP = 4000; + SetGold(RandomInt(80, 150)); + if (RandomInt(1, 100) == 1) + { + int PIC_THREE = RandomInt(1, 3); + if (PIC_THREE == 1) + { + GiveItem(GetOwner(), "scroll2_poison_cloud"); + } + if (PIC_THREE == 2) + { + GiveItem(GetOwner(), "mana_forget"); + } + if (PIC_THREE == 3) + { + GiveItem(GetOwner(), "armor_helm_gaz1"); + } + } + } + if ((LIGHTNING_SKELE)) + { + SetName("Lightning Forged Skeleton"); + } + SetRace("undead"); + SetRoam(true); + SetDamageResistance("all", ".7"); + SetModel("monsters/skeleton.mdl"); + SetHearingSensitivity(8); + SetModelBody(0, 8); + SetModelBody(1, 0); + string MY_SKY = GetMonsterProperty("origin"); + MY_SKY += Vector3(0, 0, 4096); + string MY_CENTER = GetEntityOrigin(GetOwner()); + MY_CENTER += Vector3(0, 0, -48); + ClientEvent("new", "all_in_sight", "effects/sfx_lightning", MY_CENTER, MY_SKY, 1, 1); + ScheduleDelayedEvent(10.0, "circle_check"); + } + + void circle_check() + { + if (!(false)) + { + ScheduleDelayedEvent(5.0, "circle_check"); + } + if (!(false)) return; + CIRCLE_FREQ("circle_check"); + if ((I_R_FROZEN)) return; + if (!(CYCLED_UP)) return; + circle_prep(); + } + + void circle_prep() + { + if ((CIRCLE_ON)) return; + ScheduleDelayedEvent(15.0, "circle_reset"); + CIRCLE_ON = 1; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10; + PlayAnim("critical", ANIM_CIRCLE); + if ((LIGHTNING_SKELE)) + { + SetModelBody(1, 9); + } + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + can_reach_nme(); + ScheduleDelayedEvent(2.0, "circle_spawn"); + } + + void circle_spawn() + { + if ((LIGHTNING_SKELE)) + { + do_lightning(); + } + if (!(LIGHTNING_SKELE)) + { + SpawnNPC("monsters/summon/circle_of_death", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 100, 200, 10.0 + ScheduleDelayedEvent(1.0, "circle_bait"); + } + } + + void circle_bait() + { + PURE_FLEE = 1; + npcatk_flee(GetEntityIndex(m_hLastSeen), 500, 5.0); + } + + void circle_reset() + { + CIRCLE_ON = 0; + } + + void circle_kill() + { + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + } + + void skel_death() + { + UseTrigger("beam11"); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest1.as b/scripts/angelscript/mscave/cavechest1.as new file mode 100644 index 00000000..c39770ce --- /dev/null +++ b/scripts/angelscript/mscave/cavechest1.as @@ -0,0 +1,22 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest1 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "scroll2_glow", 1, 0); + } + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest10.as b/scripts/angelscript/mscave/cavechest10.as new file mode 100644 index 00000000..812e4920 --- /dev/null +++ b/scripts/angelscript/mscave/cavechest10.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest10 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "proj_arrow_broadhead", 60, 0, 0, 15); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + if ((RandomInt(1, 10))) + { + AddStoreItem(STORENAME, "proj_arrow_poison", 30, 0, 0, 30); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest11.as b/scripts/angelscript/mscave/cavechest11.as new file mode 100644 index 00000000..56c44eba --- /dev/null +++ b/scripts/angelscript/mscave/cavechest11.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest11 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + AddStoreItem(STORENAME, "smallarms_dirk", 1, 0); + if (RandomInt(1, 30) == 1) + { + AddStoreItem(STORENAME, "scroll2_summon_rat", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest12.as b/scripts/angelscript/mscave/cavechest12.as new file mode 100644 index 00000000..453beb58 --- /dev/null +++ b/scripts/angelscript/mscave/cavechest12.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest12 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest13.as b/scripts/angelscript/mscave/cavechest13.as new file mode 100644 index 00000000..0875cdea --- /dev/null +++ b/scripts/angelscript/mscave/cavechest13.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest13 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "item_torch", 1, 0); + AddStoreItem(STORENAME, "axes_battleaxe", 1, 0); + AddStoreItem(STORENAME, "blunt_hammer1", 1, 0); + AddStoreItem(STORENAME, "shields_buckler", 1, 0); + if ((RandomInt(1, 10))) + { + AddStoreItem(STORENAME, "shields_lironshield", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest2.as b/scripts/angelscript/mscave/cavechest2.as new file mode 100644 index 00000000..199ab634 --- /dev/null +++ b/scripts/angelscript/mscave/cavechest2.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest2 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "sheath_belt", 1, 0); + AddStoreItem(STORENAME, "smallarms_dagger", 1, 0); + if (!(RandomInt(1, 3) == 1)) return; + AddStoreItem(STORENAME, "sheath_spellbook", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest3.as b/scripts/angelscript/mscave/cavechest3.as new file mode 100644 index 00000000..ea1ba9ba --- /dev/null +++ b/scripts/angelscript/mscave/cavechest3.as @@ -0,0 +1,22 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest3 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + if (RandomInt(1, 50) == 1) + { + AddStoreItem(STORENAME, "armor_helm_dark", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest4.as b/scripts/angelscript/mscave/cavechest4.as new file mode 100644 index 00000000..0aca87ae --- /dev/null +++ b/scripts/angelscript/mscave/cavechest4.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest4 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "swords_shortsword", 1, 0); + } + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "axes_axe", 1, 0); + } + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "axes_battleaxe", 1, 0); + } + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "smallarms_dagger", 1, 0); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "swords_katana", 1, 0); + } + else + { + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "swords_katana2", 1, 0); + } + else + { + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "swords_katana3", 1, 0); + } + } + } + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest5.as b/scripts/angelscript/mscave/cavechest5.as new file mode 100644 index 00000000..bf952ea7 --- /dev/null +++ b/scripts/angelscript/mscave/cavechest5.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest5 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "swords_longsword", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "axes_smallaxe", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "blunt_maul", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "pack_archersquiver", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "bows_longbow", 1, 0); + } + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "bows_swiftbow", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest6.as b/scripts/angelscript/mscave/cavechest6.as new file mode 100644 index 00000000..80928dae --- /dev/null +++ b/scripts/angelscript/mscave/cavechest6.as @@ -0,0 +1,34 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest6 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "smallarms_craftedknife2", 1, 0); + } + if (RandomInt(1, 20) == 1) + { + AddStoreItem(STORENAME, "smallarms_craftedknife4", 1, 0); + } + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "smallarms_craftedknife3", 1, 0); + } + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORENAME, "smallarms_craftedknife", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest7.as b/scripts/angelscript/mscave/cavechest7.as new file mode 100644 index 00000000..b0bf49b3 --- /dev/null +++ b/scripts/angelscript/mscave/cavechest7.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest7 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest8.as b/scripts/angelscript/mscave/cavechest8.as new file mode 100644 index 00000000..b56ed216 --- /dev/null +++ b/scripts/angelscript/mscave/cavechest8.as @@ -0,0 +1,43 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest8 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + if (RandomInt(1, 15) == 1) + { + AddStoreItem(STORENAME, "swords_nkatana", 1, 0); + } + AddStoreItem(STORENAME, "item_log", 1, 0); + if (RandomInt(1, 25) == 1) + { + add_great_item(); + } + if (RandomInt(1, 50) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 50) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 50) == 1) + { + add_epic_arrows(); + } + if (RandomInt(1, 50) == 1) + { + add_epic_arrows(); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/cavechest9.as b/scripts/angelscript/mscave/cavechest9.as new file mode 100644 index 00000000..648b69f6 --- /dev/null +++ b/scripts/angelscript/mscave/cavechest9.as @@ -0,0 +1,41 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Cavechest9 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 20)); + AddStoreItem(STORENAME, "health_mpotion", 1, 0); + AddStoreItem(STORENAME, "blunt_hammer2", 1, 0); + AddStoreItem(STORENAME, "proj_arrow_wooden", 120, 0, 0, 60); + get_chance(5, 10, 100, 50); + if (RandomInt(1, 100) <= 5) + { + AddStoreItem(STORENAME, "proj_arrow_broadhead", 120, 0, 0, 60); + } + if (RandomInt(1, 100) <= 5) + { + AddStoreItem(STORENAME, "proj_arrow_poison", 120, 0, 0, 60); + } + if (RandomInt(1, 100) <= 5) + { + AddStoreItem(STORENAME, "proj_arrow_jagged", 120, 0, 0, 60); + } + if (RandomInt(1, 50) == 1) + { + AddStoreItem(STORENAME, "armor_helm_golden", 1, 0); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "pack_archersquiver", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/darrelin-npc.as b/scripts/angelscript/mscave/darrelin-npc.as new file mode 100644 index 00000000..58ea6a80 --- /dev/null +++ b/scripts/angelscript/mscave/darrelin-npc.as @@ -0,0 +1,327 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class DarrelinNpc : CGameScript +{ + string ANIM_STEP1; + string ANIM_STEP3; + string ANIM_STEP5; + int CANCHAT; + float CHAT_DELAY_STEP1; + float CHAT_DELAY_STEP2; + float CHAT_DELAY_STEP3; + float CHAT_DELAY_STEP4; + float CHAT_DELAY_STEP5; + float CHAT_DELAY_STEP6; + float CHAT_DELAY_STEP7; + float CHAT_DELAY_STEP8; + float CHAT_DELAY_STEP9; + string CHAT_EVENT_STEP2; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEP7; + string CHAT_STEP8; + string CHAT_STEP9; + int CHAT_STEPS; + string NEXT_CHAT_WARN; + int NO_HAIL; + int NO_JOB; + int NO_MOUTH_MOVE; + int NO_RUMOR; + string QUEST_COMPLETER; + int REQ_QUEST_NOTDONE; + + DarrelinNpc() + { + NO_JOB = 1; + NO_RUMOR = 1; + NO_HAIL = 1; + } + + void OnSpawn() override + { + REQ_QUEST_NOTDONE = 1; + SetHealth(20); + SetMaxHealth(20); + SetGold(3); + SetName("Darrelin"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetMoveAnim("walk"); + SetInvincible(true); + CANCHAT = 1; + CatchSpeech("say_hi", "hello"); + CatchSpeech("say_orc", "orc"); + CatchSpeech("say_myth", "myth"); + CatchSpeech("say_acting", "act"); + CatchSpeech("say_orc", "orc"); + CatchSpeech("say_myth", "myth"); + CatchSpeech("say_acting", "act"); + CatchSpeech("say_name", "name"); + CatchSpeech("say_goblins", "goblin"); + CatchSpeech("say_river", "river"); + } + + void say_hi() + { + if ((IsValidPlayer(param1))) + { + string L_LAST_SPOKE = param1; + } + else + { + string L_LAST_SPOKE = GetEntityIndex("ent_lastspoke"); + } + if ((BUSY_CHATTING)) + { + chat_warning(L_LAST_SPOKE); + } + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, "voices/mscave/actor-say_hi.wav", 10); + NO_MOUTH_MOVE = 1; + Say("[.3] [.1] [.1] [.3] [.02] [.2] [.1] [.3] [.3] [.3] [.1] [.1] [.1] [.1] [.1] [.1] [.1] [.1]"); + CHAT_STEP1 = "Hail Traveller! Welcome to... THE DARK CAVES......!"; + ANIM_STEP1 = "studycart"; + CHAT_DELAY_STEP1 = 9.4; + ScheduleDelayedEvent(9.3, "restore_mouth_move"); + CHAT_STEP2 = "Sorry about that, I used to be an [actor]... I still am, in a way."; + CHAT_DELAY_STEP2 = 4.7; + CHAT_STEP3 = "Anyway, the [Orcs] have taken over the caves, so be careful if you plan on going through them."; + CHAT_DELAY_STEP3 = 7.0; + CHAT_STEP4 = "You may also be interested to hear about a [goblin] town near here."; + CHAT_DELAY_STEP4 = 3.0; + CHAT_STEPS = 4; + chat_loop(); + } + + void restore_mouth_move() + { + NO_MOUTH_MOVE = 0; + bchat_auto_mouth_move(4.7); + } + + void say_orc() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_orc"); + chat_warning(GetEntityIndex("ent_lastspoke")); + } + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, "voices/mscave/actor-say_orc.wav", 10); + CHAT_STEP1 = "Well, as you probably know, the Orcs have been growing in number faster than usual."; + CHAT_DELAY_STEP1 = 5.4; + CHAT_STEP2 = "Since they therefor need more land they use shamans to come in and lock down an area using magic."; + CHAT_DELAY_STEP2 = 5.0; + CHAT_STEP3 = "This allows their warriors to march in and absolutely massacre all the men, women, and children of entire towns. It's terribly frightful!"; + CHAT_DELAY_STEP3 = 8.6; + CHAT_STEP4 = "Unfortunately for us, this is a rather successful tactic, except... Eh, there is one thing..."; + CHAT_DELAY_STEP4 = 7.6; + CHAT_STEP5 = "Theres a [myth] of sorts surrounding these caves, and I don't think the orcs are using the caves just to store their loot."; + ANIM_STEP5 = "pondering"; + CHAT_DELAY_STEP5 = 6.3; + CHAT_STEPS = 5; + chat_loop(); + } + + void say_myth() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_myth"); + chat_warning(GetEntityIndex("ent_lastspoke")); + } + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, "voices/mscave/actor-say_myth.wav", 10); + CHAT_STEP1 = "Well, theres supposed to be some kind of building that's tucked away deep inside the caverns."; + CHAT_DELAY_STEP1 = 6.3; + CHAT_STEP2 = "It's probably ancient history now, but it was a fortress literally powered by magic itself, except..."; + CHAT_DELAY_STEP2 = 5.7; + CHAT_STEP3 = "I can't help wondering why it isn't active... Nobody seems to know why..."; + CHAT_DELAY_STEP3 = 4.9; + CHAT_STEP4 = "Though the path to the fort is clear, its silent, closed, so I guess whatever's in there, we're doomed to it... I guess."; + CHAT_DELAY_STEP4 = 6.4; + CHAT_STEPS = 4; + chat_loop(); + } + + void say_acting() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_acting"); + chat_warning(GetEntityIndex("ent_lastspoke")); + } + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, "voices/mscave/actor-say_acting.wav", 10); + CHAT_STEP1 = "Oh I'm sure you must've heard the [name] of Darrelino the Greatest Actor in ALL of Daragoth, nay the WORLD!"; + ANIM_STEP1 = "converse1"; + CHAT_DELAY_STEP1 = 5.5; + CHAT_STEP2 = "You haven't!?!..."; + CHAT_DELAY_STEP2 = 2.5; + CHAT_STEP3 = "Oh well, that's your loss then."; + ANIM_STEP3 = "no"; + CHAT_DELAY_STEP3 = 2.8; + CHAT_STEPS = 3; + chat_loop(); + } + + void say_name() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_name"); + chat_warning(GetEntityIndex("ent_lastspoke")); + } + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, "voices/mscave/actor-say_name-say_script.wav", 10); + CHAT_STEP1 = "Well, my stage name is Darrelino Var and I happen to think it's a very good name, thank you very much!"; + CHAT_DELAY_STEP1 = 5.6; + CHAT_STEP2 = "Too bad I can't practice for the big performance! I don't have my script anymore! I used to go practice my lines in the forest, you see."; + CHAT_DELAY_STEP2 = 8.4; + CHAT_STEP3 = "...and then one night, as I was practicing my lines... Something attacked me!"; + CHAT_DELAY_STEP3 = 4.3; + CHAT_STEP4 = "It lunged at me! I had no idea what it was. I thought it was a thief, maybe waiting in the shadows to steal all my belongings!"; + CHAT_DELAY_STEP4 = 5.9; + CHAT_STEP5 = "So I managed to run, away from it, but then I heard all kinds of sounds rustling behind me in the bushes."; + CHAT_DELAY_STEP5 = 5.4; + CHAT_STEP6 = "So did the first thing that came to mind: I hid all my belongings in a hollow tree, and covered it with some leaves."; + CHAT_DELAY_STEP6 = 6.1; + CHAT_STEP7 = "But, on the way out, nobody came and attacked me! I turned around to look, and I could swear I saw pale figures walking in the forest. So I turned and ran away."; + CHAT_DELAY_STEP7 = 9.2; + CHAT_STEP8 = "I hear it's really dangerous in the forest now. It turns out that what attacked me wasn't actually a thief, but the living dead itself!"; + CHAT_DELAY_STEP8 = 12.3; + CHAT_STEP9 = "Oh do you think you could find my manuscript for me? I'm sure it's still in that hollow tree covered by the leaves."; + CHAT_DELAY_STEP9 = 10.1; + CHAT_STEPS = 9; + chat_loop(); + } + + void say_goblins() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_goblins"); + chat_warning(GetEntityIndex("ent_lastspoke")); + } + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, "voices/mscave/actor-say_goblins.wav", 10); + CHAT_STEP1 = "The Goblins have a town carved into the mountains through the caves, near a [river] dried up by a dam."; + CHAT_DELAY_STEP1 = 6.0; + CHAT_STEP2 = "You'll find one of the goblins to be an extremely tough opponent.... He seems to be their leader, of sorts"; + CHAT_DELAY_STEP2 = 5.8; + CHAT_STEP3 = "It wouldn't be so bad but they like attacking in large groups! So, do be careful."; + CHAT_DELAY_STEP3 = 6.4; + CHAT_STEPS = 3; + chat_loop(); + } + + void say_river() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_river"); + chat_warning(GetEntityIndex("ent_lastspoke")); + } + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, "voices/mscave/actor-say_river.wav", 10); + CHAT_STEP1 = "I learnt recently that the Orcs have decided to block the river. It's a prelude to invading the Goblins to weaken them."; + CHAT_DELAY_STEP1 = 5.4; + CHAT_STEP2 = "I don't know which is worse... Those damned Goblins or the Orcs!"; + CHAT_DELAY_STEP2 = 3.0; + CHAT_STEPS = 2; + chat_loop(); + } + + void give_manuscript() + { + if ((IsEntityAlive(param1))) + { + QUEST_COMPLETER = param1; + REQ_QUEST_NOTDONE = 0; + } + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "give_manuscript"); + chat_warning(GetEntityIndex(param1)); + } + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 0, "voices/mscave/actor-give_manuscript.wav", 10); + CHAT_STEP1 = "You found my manuscript! Thank you so much, "; + CHAT_STEP1 += GetEntityName(QUEST_COMPLETER); + CHAT_STEP1 += ", I can continue practicing!"; + ANIM_STEP1 = "eye_wipe"; + CHAT_DELAY_STEP1 = 4.5; + CHAT_STEP2 = "Oh, I should reward you... Wait... Here, take this... It's a gold pouch. It's not much, but it's the best I can do."; + CHAT_DELAY_STEP2 = 6.4; + CHAT_EVENT_STEP2 = "give_manuscript_reward"; + CHAT_STEPS = 2; + chat_loop(); + } + + void give_manuscript_reward() + { + // TODO: offer QUEST_COMPLETER gold RandomInt(30, 60) + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Say Hello"; + string reg.mitem.type = "say"; + int l.say = RandomInt(1, 4); + if (l.say == 1) + { + string reg.mitem.data = "Hello"; + } + else + { + if (l.say == 2) + { + string reg.mitem.data = "Hi"; + } + else + { + if (l.say == 3) + { + string reg.mitem.data = "Hail"; + } + else + { + if (l.say == 4) + { + string reg.mitem.data = "Greetings!"; + } + } + } + } + if ((ItemExists(param1, "item_manuscript"))) + { + string reg.mitem.title = "Return manuscript"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_manuscript"; + string reg.mitem.callback = "give_manuscript"; + } + } + + void chat_warning() + { + if (!(GetGameTime() > NEXT_CHAT_WARN)) return; + NEXT_CHAT_WARN = GetGameTime(); + NEXT_CHAT_WARN += 20.0; + SendColoredMessage(param1, "Darrelin is still chatting about something else..."); + } + +} + +} diff --git a/scripts/angelscript/mscave/extra15a.as b/scripts/angelscript/mscave/extra15a.as new file mode 100644 index 00000000..b5cef105 --- /dev/null +++ b/scripts/angelscript/mscave/extra15a.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Extra15a : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(50, 80)); + add_great_item(); + if (RandomInt(1, 3) == 1) + { + add_great_item(); + } + if (RandomInt(1, 3) == 1) + { + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/extra15b.as b/scripts/angelscript/mscave/extra15b.as new file mode 100644 index 00000000..6917ac48 --- /dev/null +++ b/scripts/angelscript/mscave/extra15b.as @@ -0,0 +1,30 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Extra15b : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(150, 300)); + add_great_item(); + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + } + if (RandomInt(1, 5) == 1) + { + add_epic_item(); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/extra16.as b/scripts/angelscript/mscave/extra16.as new file mode 100644 index 00000000..36ed53e5 --- /dev/null +++ b/scripts/angelscript/mscave/extra16.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Extra16 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(50, 80)); + add_great_item(); + if (RandomInt(1, 3) == 1) + { + add_great_item(); + } + if (RandomInt(1, 3) == 1) + { + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/mscave/firecave.as b/scripts/angelscript/mscave/firecave.as new file mode 100644 index 00000000..86b74bc7 --- /dev/null +++ b/scripts/angelscript/mscave/firecave.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Firecave : CGameScript +{ + void chest_additems() + { + add_gold(1000); + add_great_item(); + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/mscave/map_startup.as b/scripts/angelscript/mscave/map_startup.as new file mode 100644 index 00000000..3f0d08e7 --- /dev/null +++ b/scripts/angelscript/mscave/map_startup.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "mscave"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + SetGlobalVar("global.map.allownight", 0); + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Dark Caves"); + SetGlobalVar("G_MAP_DESC", "These caves are infested with orcs, although there are rumors that they hide yet a greater evil."); + SetGlobalVar("G_MAP_DIFF", "Levels 5-20 / 50-300hp"); + SetGlobalVar("G_WARN_HP", 50); + SetGlobalVar("G_NO_STEP_ADJ", 1); + } + +} + +} diff --git a/scripts/angelscript/mscave/pillar.as b/scripts/angelscript/mscave/pillar.as new file mode 100644 index 00000000..9dc56878 --- /dev/null +++ b/scripts/angelscript/mscave/pillar.as @@ -0,0 +1,119 @@ +#pragma context server + +namespace MS +{ + +class Pillar : CGameScript +{ + int CANCHAT; + int GOT_RING; + int SHAD_SPAWN; + + Pillar() + { + Precache("monsters/skeleton.mdl"); + Precache("mscave/Shadahar"); + Precache("weapons/magic/seals.mdl"); + Precache("magic/temple.wav"); + Precache("magic/pulsemachine_noloop.wav"); + Precache("magic/frost_reverse.wav"); + Precache("skull.spr"); + Precache("monsters/skeleton/cal_laugh.wav"); + Precache("monsters/skeleton/calrain3.wav"); + } + + void OnSpawn() override + { + SetHealth(1); + SetName("The Enchanted Pillar"); + SetWidth(32); + SetHeight(32); + SetRoam(false); + SetRace("neutral"); + SetModel("props/skullprop.mdl"); + CANCHAT = 1; + SetInvincible(true); + CatchSpeech("say_release", "erste"); + CatchSpeech("say_hail", "hail"); + SetMenuAutoOpen(1); + } + + void say_release() + { + SayText("The name is not what " + I + "require , but the light of the ring , this is what " + I + " desire!"); + } + + void say_hail() + { + if ((ItemExists("ent_lastspoke", "item_runicsymbol2"))) + { + SayText("Come hither , closer to me! You have that which will set me free!"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((ItemExists("ent_lastspoke", "item_runicsymbol"))) + { + SayText("Too soon , you have come , your journey , it is not done."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SayText("Mortal , speak warily unto me , you have not that which sets me free."); + } + + void game_menu_getoptions() + { + if ((GOT_RING)) return; + SetSayTextRange(1024); + if ((G_DEVELOPER_MODE)) + { + ScheduleDelayedEvent(5.0, "gave_ring"); + } + if ((G_DEVELOPER_MODE)) return; + if ((ItemExists(param1, "item_runicsymbol2"))) + { + string reg.mitem.title = "Insert the Urdualian Ring"; + string reg.mitem.type = "payment_silent"; + string reg.mitem.data = "item_runicsymbol2"; + string reg.mitem.callback = "gave_ring"; + } + if ((ItemExists(param1, "item_runicsymbol"))) + { + string reg.mitem.title = "Insert the Expended Ring"; + string reg.mitem.type = "payment_silent"; + string reg.mitem.data = "item_runicsymbol"; + string reg.mitem.callback = "wrong_ring"; + } + } + + void wrong_ring() + { + SayText("This ring , it shines not , therefore no evil , shall it wrought."); + // TODO: offer PARAM1 item_runicsymbol + } + + void gave_ring() + { + SetModelBody(0, 1); + GOT_RING = 1; + UseTrigger("mm_shad"); + ScheduleDelayedEvent(4, "spawnage"); + SayText("At last! " + I + "shall be freed! ...and upon you , first shall " + I + " feed!"); + } + + void spawnage() + { + if ((SHAD_SPAWN)) return; + UseTrigger("spawn_shad"); + ScheduleDelayedEvent(2, "gobyebye"); + SHAD_SPAWN = 1; + } + + void gobyebye() + { + UseTrigger("pillar_removed"); + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/mscave/shad_eye.as b/scripts/angelscript/mscave/shad_eye.as new file mode 100644 index 00000000..e72a65ab --- /dev/null +++ b/scripts/angelscript/mscave/shad_eye.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class ShadEye : CGameScript +{ +} + +} diff --git a/scripts/angelscript/mscave/shad_taunter.as b/scripts/angelscript/mscave/shad_taunter.as new file mode 100644 index 00000000..9aea4896 --- /dev/null +++ b/scripts/angelscript/mscave/shad_taunter.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class ShadTaunter : CGameScript +{ +} + +} diff --git a/scripts/angelscript/mscave/shad_tele1.as b/scripts/angelscript/mscave/shad_tele1.as new file mode 100644 index 00000000..89f54a94 --- /dev/null +++ b/scripts/angelscript/mscave/shad_tele1.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "mscave/shad_tele_base.as" + +namespace MS +{ + +class ShadTele1 : CGameScript +{ + int MY_INDEX; + + ShadTele1() + { + MY_INDEX = 1; + } + +} + +} diff --git a/scripts/angelscript/mscave/shad_tele2.as b/scripts/angelscript/mscave/shad_tele2.as new file mode 100644 index 00000000..e41c89ac --- /dev/null +++ b/scripts/angelscript/mscave/shad_tele2.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "mscave/shad_tele_base.as" + +namespace MS +{ + +class ShadTele2 : CGameScript +{ + int MY_INDEX; + + ShadTele2() + { + MY_INDEX = 2; + } + +} + +} diff --git a/scripts/angelscript/mscave/shad_tele3.as b/scripts/angelscript/mscave/shad_tele3.as new file mode 100644 index 00000000..7283b84c --- /dev/null +++ b/scripts/angelscript/mscave/shad_tele3.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "mscave/shad_tele_base.as" + +namespace MS +{ + +class ShadTele3 : CGameScript +{ + int MY_INDEX; + + ShadTele3() + { + MY_INDEX = 3; + } + +} + +} diff --git a/scripts/angelscript/mscave/shad_tele4.as b/scripts/angelscript/mscave/shad_tele4.as new file mode 100644 index 00000000..5d7ea710 --- /dev/null +++ b/scripts/angelscript/mscave/shad_tele4.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "mscave/shad_tele_base.as" + +namespace MS +{ + +class ShadTele4 : CGameScript +{ + int MY_INDEX; + + ShadTele4() + { + MY_INDEX = 4; + } + +} + +} diff --git a/scripts/angelscript/mscave/shad_tele5.as b/scripts/angelscript/mscave/shad_tele5.as new file mode 100644 index 00000000..2c8d6be7 --- /dev/null +++ b/scripts/angelscript/mscave/shad_tele5.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "mscave/shad_tele_base.as" + +namespace MS +{ + +class ShadTele5 : CGameScript +{ + int MY_INDEX; + + ShadTele5() + { + MY_INDEX = 5; + } + +} + +} diff --git a/scripts/angelscript/mscave/shad_tele6.as b/scripts/angelscript/mscave/shad_tele6.as new file mode 100644 index 00000000..df54fe81 --- /dev/null +++ b/scripts/angelscript/mscave/shad_tele6.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "mscave/shad_tele_base.as" + +namespace MS +{ + +class ShadTele6 : CGameScript +{ + int MY_INDEX; + + ShadTele6() + { + MY_INDEX = 6; + } + +} + +} diff --git a/scripts/angelscript/mscave/shad_tele7.as b/scripts/angelscript/mscave/shad_tele7.as new file mode 100644 index 00000000..2cdc6c42 --- /dev/null +++ b/scripts/angelscript/mscave/shad_tele7.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "mscave/shad_tele_base.as" + +namespace MS +{ + +class ShadTele7 : CGameScript +{ + int MY_INDEX; + + ShadTele7() + { + MY_INDEX = 7; + } + +} + +} diff --git a/scripts/angelscript/mscave/shad_tele_base.as b/scripts/angelscript/mscave/shad_tele_base.as new file mode 100644 index 00000000..ead5ae8c --- /dev/null +++ b/scripts/angelscript/mscave/shad_tele_base.as @@ -0,0 +1,30 @@ +#pragma context server + +namespace MS +{ + +class ShadTeleBase : CGameScript +{ + void OnSpawn() override + { + SetFly(true); + SetRoam(false); + SetGravity(0); + } + + void game_postspawn() + { + string TOKEN_PARAMS = param4; + string MY_LOC = GetEntityOrigin(GetOwner()); + CallExternal(GAME_MASTER, "set_shad_tele_point", MY_LOC, GetToken(TOKEN_PARAMS, 0, ";"), GetToken(TOKEN_PARAMS, 1, ";")); + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/mscave/shadahar2.as b/scripts/angelscript/mscave/shadahar2.as new file mode 100644 index 00000000..65dd8d71 --- /dev/null +++ b/scripts/angelscript/mscave/shadahar2.as @@ -0,0 +1,735 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Shadahar2 : CGameScript +{ + int AM_MOBILE; + string ANIM_ATTACK; + string ANIM_CAST; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_MOVE; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SWIPE; + string ANIM_WALK; + int ATTACH_IDX_EYE1; + int ATTACH_IDX_EYE2; + int ATTACH_IDX_WAND; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + string ATTACK_PUSH; + int ATTACK_RANGE; + int BEAM_COUNT; + string BEAM_EYE1; + string BEAM_EYE2; + int CIRCLES_ON; + int CIRC_PLAYER_IDX; + int CUR_TELE_POINT; + string CUR_TRIG; + string DID_ORC_COMMENT; + string DID_WARCRY; + int DMG_BEAM; + int DMG_FIRE_BOLT; + int DMG_SMASH; + int DMG_SWIPE; + int DOING_SPECIAL; + int EYE_BEAM_WARMUP; + float FREQ_SPECIAL; + int IS_UNHOLY; + string LAST_RETURN_TIME; + int MAX_EYES; + int MOVE_RANGE; + string MY_CL_IDX; + string MY_TELE_POINTS; + string MY_TRIGGERS; + string MY_YAW; + int NO_STUCK_CHECKS; + string NPC_GIVE_EXP; + int NPC_IS_BOSS; + string N_CIRC_PLAYERS; + string N_TELE_POINTS; + string PLAYER_ORGS; + int SET_TELE_POINTS; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_BEAM_FIRE; + string SOUND_DEATH; + string SOUND_HOLY_STRIKE; + string SOUND_LAUGH; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + string SOUND_STUN; + string SOUND_TURNED1; + string SOUND_TURNED2; + string SOUND_TURNED3; + string SOUND_TURNED4; + string SOUND_WARCRY; + string STARTED_CYCLES; + string STAY_NEAR_HOME; + int STUN_ATTACK; + string SUMMON_POS; + int SUMMON_WARMUP; + int SWIPE_ATTACK; + int TELEPORT_SEQUENCE; + int WAND_LIT; + int WAND_UNLIT; + + Shadahar2() + { + NPC_IS_BOSS = 1; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "dieheadshot"; + MOVE_RANGE = 32; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 127; + IS_UNHOLY = 1; + NO_STUCK_CHECKS = 1; + ANIM_SWIPE = "attack1"; + ANIM_SMASH = "attack3"; + ANIM_CAST = "castspell"; + ANIM_MOVE = "walk"; + ATTACK_HITCHANCE = 70; + DMG_SWIPE = RandomInt(100, 150); + DMG_SMASH = RandomInt(75, 100); + DMG_FIRE_BOLT = RandomInt(50, 100); + ATTACH_IDX_WAND = 0; + ATTACH_IDX_EYE1 = 1; + ATTACH_IDX_EYE2 = 2; + DMG_BEAM = 300; + WAND_UNLIT = 8; + WAND_LIT = 9; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_STRUCK4 = "zombie/zo_pain2.wav"; + SOUND_STRUCK5 = "zombie/zo_pain2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_DEATH = "zombie/zo_pain1.wav"; + SOUND_STUN = "debris/glass2.wav"; + SOUND_BEAM_FIRE = "debris/beamstart1.wav"; + SOUND_TURNED1 = "ambience/the_horror1.wav"; + SOUND_TURNED2 = "ambience/the_horror2.wav"; + SOUND_TURNED3 = "ambience/the_horror3.wav"; + SOUND_TURNED4 = "ambience/the_horror4.wav"; + SOUND_HOLY_STRIKE = "doors/aliendoor1.wav"; + SOUND_LAUGH = "monsters/skeleton/cal_laugh.wav"; + SOUND_WARCRY = "monsters/skeleton/calrain3.wav"; + FREQ_SPECIAL = Random(10, 15); + Precache("bonegibs.mdl"); + } + + void game_precache() + { + Precache("monsters/summon/circle_of_death"); + Precache("monsters/eye_drainer"); + } + + void OnSpawn() override + { + if (StringToLower(GetMapName()) == "mscave") + { + NPC_GIVE_EXP = 10000; + } + else + { + DeleteEntity(GetOwner()); + } + if ((G_SHAD_PRESENT)) + { + DeleteEntity(GetOwner()); + } + SetName("Remains of Shadahar"); + SetModel("monsters/skeleton_enraged.mdl"); + SetModelBody(0, 6); + SetModelBody(1, WAND_UNLIT); + SetWidth(32); + SetHeight(80); + if (!(true)) return; + SetRace("undead"); + SetHealth(6000); + SetRoam(true); + SetHearingSensitivity(4); + SetNoPush(true); + SetDamageResistance("all", ".7"); + SetDamageResistance("slash", ".7"); + SetDamageResistance("pierce", ".5"); + SetDamageResistance("blunt", 1.2); + SetDamageResistance("holy", 2.0); + SetDamageResistance("cold", 0.1); + SetDamageResistance("poison", 0.0); + SetSayTextRange(1024); + string MY_SKY = GetMonsterProperty("origin"); + MY_SKY += Vector3(0, 0, 4096); + string MY_CENTER = GetEntityOrigin(GetOwner()); + MY_CENTER += Vector3(0, 0, -48); + ClientEvent("new", "all_in_sight", "effects/sfx_lightning", MY_CENTER, MY_SKY, 1, 1); + SetGlobalVar("G_SHAD_PRESENT", 1); + MAX_EYES = 2; + if (GetPlayerCount() >= 4) + { + MAX_EYES = 4; + } + ScheduleDelayedEvent(0.1, "init_beam1"); + } + + void init_beam1() + { + Effect("beam", "vector", "laserbeam.spr", 30, GetEntityProperty(GetOwner(), "attachpos"), GetEntityOrigin(GetOwner()), Vector3(255, 0, 255), 0, 10, -1); + BEAM_EYE1 = GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(1.0, "init_beam2"); + } + + void init_beam2() + { + Effect("beam", "vector", "laserbeam.spr", 30, GetEntityProperty(GetOwner(), "attachpos"), GetEntityOrigin(GetOwner()), Vector3(255, 0, 255), 0, 10, -1); + BEAM_EYE2 = GetEntityIndex(m_hLastCreated); + } + + void attack_1() + { + ATTACK_PUSH = /* TODO: $relvel */ $relvel(-100, 130, 120); + SWIPE_ATTACK = 1; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 5); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, ATTACK_HITCHANCE, "slash"); + if (!(RandomInt(1, 30) == 1)) return; + ANIM_ATTACK = ANIM_SMASH; + } + + void attack_3() + { + STUN_ATTACK = 1; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 5); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = ANIM_SWIPE; + } + + void game_dodamage() + { + if ((param1)) + { + if ((SWIPE_ATTACK)) + { + AddVelocity(m_hLastStruckByMe, ATTACK_PUSH); + } + SWIPE_ATTACK = 0; + if ((STUN_ATTACK)) + { + } + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + ApplyEffect(param2, "effects/debuff_stun", Random(5, 10), GetEntityIndex(GetOwner())); + } + STUN_ATTACK = 0; + } + + void OnPostSpawn() override + { + SetGlobalVar("global.map.weather", "fog_black;fog_black;flog_black"); + SetGlobalVar("G_WEATHER_LOCK", "fog_black"); + CallExternal("players", "ext_weather_change", G_WEATHER_LOCK); + ScheduleDelayedEvent(8.0, "get_tele_points"); + CallExternal("all", "bo_zombie_mode"); + ClientEvent("new", "all", "mscave/shadahar_cl"); + MY_CL_IDX = "game.script.last_sent_id"; + } + + void get_tele_points() + { + MY_TELE_POINTS = GetEntityProperty(GAME_MASTER, "scriptvar"); + MY_TRIGGERS = GetEntityProperty(GAME_MASTER, "scriptvar"); + if (MY_TELE_POINTS.length() > 0) MY_TELE_POINTS += ";"; + MY_TELE_POINTS += NPC_HOME_LOC; + if (MY_TRIGGERS.length() > 0) MY_TRIGGERS += ";"; + MY_TRIGGERS += "none"; + N_TELE_POINTS = GetTokenCount(MY_TELE_POINTS, ";"); + N_TELE_POINTS -= 1; + CUR_TELE_POINT = -1; + SET_TELE_POINTS = 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + Effect("beam", "update", BEAM_EYE1, "brightness", 0); + Effect("beam", "update", BEAM_EYE2, "brightness", 0); + Effect("beam", "update", BEAM_EYE1, "remove", 0.1); + Effect("beam", "update", BEAM_EYE2, "remove", 0.1); + UseTrigger("door_palace"); + ClientEvent("remove", "all", MY_CL_IDX); + bm_gold_spew(500, 1, 32, 2, 4); + SetGlobalVar("G_WEATHER_LOCK", 0); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if (!(DID_WARCRY)) + { + DID_WARCRY = 1; + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + } + if (!(STARTED_CYCLES)) + { + STARTED_CYCLES = 1; + FREQ_SPECIAL("do_special"); + } + } + + void OnDamage(int damage) override + { + if ((TELEPORT_SEQUENCE)) return; + if (CUR_TELE_POINT < N_TELE_POINTS) + { + if (GetEntityHealth(GetOwner()) <= 3000) + { + } + teleport_next_point(); + } + if ((TELEPORT_SEQUENCE)) + { + SetDamage("dmg"); + SetDamage("hit"); + return; + } + if ((TELEPORT_SEQUENCE)) return; + if (param3 != "holy") + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK4, SOUND_STRUCK5}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_HOLY_STRIKE + array sounds = {SOUND_HOLY_STRIKE}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void teleport_next_point() + { + TELEPORT_SEQUENCE = 1; + if (CUR_TELE_POINT == -1) + { + SayText("Let s see just how well you know these caves..."); + } + if (CUR_TELE_POINT == 0) + { + SayText("Time for more hide and seek..."); + } + if (CUR_TELE_POINT == 1) + { + SayText("You seem to know these caves pretty well."); + } + if (CUR_TELE_POINT == 2) + { + SayText(I + " m sure you can find me again..."); + } + if (CUR_TELE_POINT == 3) + { + SayText("My my , such a persistant seeker."); + } + if (CUR_TELE_POINT == 4) + { + SayText("Such fun! But can you find me again?"); + } + if (CUR_TELE_POINT == 5) + { + SayText("Come find me on the bridge of fire..."); + } + if (CUR_TELE_POINT == 6) + { + SayText("My defeat shall not come about so easily as this..."); + } + EmitSound(GetOwner(), 0, "ambience/particle_suck2.wav", 10); + npcatk_clear_targets(); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_CAST); + SetIdleAnim(ANIM_CAST); + SetMoveAnim(ANIM_CAST); + Effect("screenfade", "all", 2, 1, Vector3(255, 255, 255), 255, "fadeout"); + ScheduleDelayedEvent(2.0, "teleport_fx_fadein"); + CUR_TELE_POINT += 1; + SetAnimFrameRate(0.5); + SetGravity(0); + ScheduleDelayedEvent(0.01, "float_up"); + ScheduleDelayedEvent(2.01, "teleport_next_point2"); + } + + void teleport_fx_fadein() + { + Effect("screenfade", "all", 2, 1, Vector3(255, 255, 255), 255, "fadein"); + } + + void float_up() + { + if (!(TELEPORT_SEQUENCE)) return; + ScheduleDelayedEvent(0.1, "float_up"); + string CUR_POS = GetEntityOrigin(GetOwner()); + CUR_POS += "z"; + SetEntityOrigin(GetOwner(), CUR_POS); + } + + void teleport_next_point2() + { + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + SetAnimFrameRate(1); + TELEPORT_SEQUENCE = 0; + SetEntityOrigin(GetOwner(), GetToken(MY_TELE_POINTS, CUR_TELE_POINT, ";")); + SetHealth(6000); + SetBlind(false); + npcatk_resume_ai(); + npcatk_clear_targets(); + SetGravity(1); + stay_still(); + CUR_TRIG = GetToken(MY_TRIGGERS, CUR_TELE_POINT, ";"); + UseTrigger(CUR_TRIG); + if (CUR_TRIG == "spawn_firereaver") + { + do_fireballs(); + ANIM_WALK = "idle1"; + ANIM_RUN = "idle1"; + stay_still(); + SetGlobalVar("global.map.weather", "fog_red;fog_red;fog_red"); + SetGlobalVar("G_WEATHER_LOCK", "fog_red"); + CallExternal("players", "ext_weather_change", G_WEATHER_LOCK); + } + if (CUR_TELE_POINT == N_TELE_POINTS) + { + STAY_NEAR_HOME = 1; + ANIM_MOVE = "run"; + ANIM_RUN = ANIM_MOVE; + ANIM_WALK = "walk"; + SetGlobalVar("global.map.weather", "clear;clear;clear"); + SetGlobalVar("G_WEATHER_LOCK", 0); + CallExternal("players", "ext_weather_change", "clear"); + } + } + + void do_special() + { + if (!(IsEntityAlive(GetOwner()))) return; + FREQ_SPECIAL("do_special"); + if ((DOING_SPECIAL)) return; + if ((TELEPORT_SEQUENCE)) return; + if (!(IsEntityAlive(m_hAttackTarget))) return; + int PICK_SPECIAL = RandomInt(1, 2); + if (N_EYES < MAX_EYES) + { + int PICK_SPECIAL = RandomInt(1, 3); + } + if (PICK_SPECIAL == 1) + { + do_circles(); + } + if (PICK_SPECIAL == 2) + { + do_eyebeams(); + } + if (PICK_SPECIAL == 3) + { + do_summon_eye(); + } + } + + void do_circles() + { + DOING_SPECIAL = 1; + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + PlayAnim("critical", ANIM_CAST); + GetAllPlayers(PLAYER_LIST); + N_CIRC_PLAYERS = GetTokenCount(PLAYER_LIST, ";"); + PLAYER_ORGS = ""; + for (int i = 0; i < N_CIRC_PLAYERS; i++) + { + ids_to_pos(); + } + N_CIRC_PLAYERS -= 1; + CIRCLES_ON = 0; + wand_sparkles(); + ScheduleDelayedEvent(1.0, "do_circles2"); + } + + void wand_sparkles() + { + if ((CIRCLES_ON)) return; + ScheduleDelayedEvent(0.1, "wand_sparkles"); + ClientEvent("update", "all", MY_CL_IDX, "wand_prep_cl", GetEntityProperty(GetOwner(), "attachpos"), Vector3(255, 0, 0)); + } + + void do_circles2() + { + CIRCLES_ON = 1; + CIRC_PLAYER_IDX = 0; + DOING_SPECIAL = 0; + seal_players(); + } + + void ids_to_pos() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + string CUR_PLAYER_ORG = GetEntityOrigin(CUR_PLAYER); + if (PLAYER_ORGS.length() > 0) PLAYER_ORGS += ";"; + PLAYER_ORGS += CUR_PLAYER_ORG; + } + + void seal_players() + { + string CUR_PLAYER_ORG = GetToken(PLAYER_ORGS, CIRC_PLAYER_IDX, ";"); + if (Distance(GetMonsterProperty("origin"), PLAYER_ORGS) < 800) + { + SpawnNPC("monsters/summon/circle_of_death", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 100, 100, 10.0 + } + if (!(CIRC_PLAYER_IDX < N_CIRC_PLAYERS)) return; + CIRC_PLAYER_IDX += 1; + ScheduleDelayedEvent(0.1, "seal_players"); + } + + void do_eyebeams() + { + DOING_SPECIAL = 1; + PlayAnim("critical", ANIM_CAST); + SetMoveDest("none"); + npcatk_suspend_ai(); + SetIdleAnim(ANIM_CAST); + SetMoveAnim(ANIM_CAST); + NO_STUCK_CHECKS = 1; + SetBlind(true); + SetRoam(false); + EYE_BEAM_WARMUP = 1; + MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + eye_warmup_loop(); + ScheduleDelayedEvent(2.0, "do_eyebeams2"); + } + + void eye_warmup_loop() + { + if (!(EYE_BEAM_WARMUP)) return; + ScheduleDelayedEvent(0.1, "eye_warmup_loop"); + MY_YAW -= 1; + if (MY_YAW < 0) + { + float MY_YAW = 359.99; + } + SetAngles("face"); + ClientEvent("update", "all", MY_CL_IDX, "eye_beam_prep_cl", GetEntityProperty(GetOwner(), "attachpos"), GetEntityProperty(GetOwner(), "attachpos")); + } + + void do_eyebeams2() + { + EYE_BEAM_WARMUP = 0; + EmitSound(GetOwner(), 0, SOUND_BEAM_FIRE, 10); + // svplaysound: svplaysound 1 10 ambience/zapmachine.wav + EmitSound(1, 10, "ambience/zapmachine.wav"); + Effect("beam", "update", BEAM_EYE1, "brightness", 128); + Effect("beam", "update", BEAM_EYE2, "brightness", 128); + SetAnimFrameRate(0); + BEAM_COUNT = 0; + MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + ScheduleDelayedEvent(0.1, "do_eyebeam_cycle"); + } + + void do_eyebeam_cycle() + { + if (!(IsEntityAlive(GetOwner()))) return; + MY_YAW += 1; + if (MY_YAW > 359.99) + { + MY_YAW -= 359.99; + } + SetAngles("face"); + LogDebug("do_eyebeam_cycle MY_YAW"); + string BEAM1_START = GetEntityProperty(GetOwner(), "attachpos"); + string BEAM2_START = GetEntityProperty(GetOwner(), "attachpos"); + string BEAM1_END = BEAM1_START; + string BEAM2_END = BEAM2_START; + BEAM1_END += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 1000, -200)); + BEAM2_END += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 1000, -200)); + string BEAM1_END = TraceLine(BEAM1_START, BEAM1_END); + string BEAM2_END = TraceLine(BEAM2_START, BEAM2_END); + Effect("beam", "update", BEAM_EYE1, "points", BEAM1_START, BEAM1_END); + Effect("beam", "update", BEAM_EYE2, "points", BEAM2_START, BEAM2_END); + XDoDamage(BEAM1_START, BEAM1_END, DMG_BEAM, 1.0, GetOwner(), GetOwner(), "none", "dark"); + XDoDamage(BEAM2_START, BEAM2_END, DMG_BEAM, 1.0, GetOwner(), GetOwner(), "none", "dark"); + BEAM_COUNT += 1; + if ((TELEPORT_SEQUENCE)) + { + BEAM_COUNT = 120; + } + if (BEAM_COUNT == 120) + { + do_eyebeam_end(); + } + else + { + ScheduleDelayedEvent(0.1, "do_eyebeam_cycle"); + } + } + + void do_eyebeam_end() + { + if (!(TELEPORT_SEQUENCE)) + { + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_MOVE); + } + if ((AM_MOBILE)) + { + SetRoam(true); + } + SetAnimFrameRate(1.0); + // svplaysound: svplaysound 1 0 ambience/zapmachine.wav + EmitSound(1, 0, "ambience/zapmachine.wav"); + npcatk_resume_ai(); + Effect("beam", "update", BEAM_EYE1, "brightness", 0); + Effect("beam", "update", BEAM_EYE2, "brightness", 0); + DOING_SPECIAL = 0; + if ((TELEPORT_SEQUENCE)) + { + PlayAnim("critical", ANIM_CAST); + SetIdleAnim(ANIM_CAST); + SetMoveAnim(ANIM_CAST); + } + } + + void do_summon_eye() + { + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_CAST); + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + SetModelBody(1, WAND_LIT); + float RND_ANG = Random(0, 359); + string SUMMON_ADJ = /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, 64, 32)); + SUMMON_POS = GetMonsterProperty("origin"); + SUMMON_POS += SUMMON_ADJ; + string BEAM_TOP = SUMMON_POS; + string BEAM_BOTTOM = SUMMON_POS; + BEAM_BOTTOM = "z"; + BEAM_TOP += "z"; + Effect("beam", "vector", "lgtning.spr", 200, BEAM_BOTTOM, BEAM_TOP, Vector3(64, 64, 255), 200, 50, 3.0); + ScheduleDelayedEvent(1.5, "do_summon_eye2"); + SUMMON_WARMUP = 1; + ScheduleDelayedEvent(0.01, "summon_warmup_loop"); + } + + void summon_warmup_loop() + { + if (!(SUMMON_WARMUP)) return; + ScheduleDelayedEvent(0.1, "summon_warmup_loop"); + ClientEvent("update", "all", MY_CL_IDX, "wand_prep_cl", GetEntityProperty(GetOwner(), "attachpos"), Vector3(0, 0, 255)); + } + + void do_summon_eye2() + { + SUMMON_WARMUP = 0; + SetModelBody(1, WAND_UNLIT); + npcatk_resume_ai(); + LogDebug("do_summon_eye2 SUMMON_POS"); + SpawnNPC("monsters/eye_drainer", SUMMON_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + N_EYES += 1; + } + + void eye_died() + { + N_EYES -= 1; + } + + void do_fireballs() + { + if (!(CUR_TRIG == "spawn_firereaver")) return; + ScheduleDelayedEvent(1.0, "do_fireballs"); + SetMoveSpeed(0.0); + SetMoveAnim("idle1"); + SetIdleAnim("idle1"); + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(GetEntityRange(m_hAttackTarget) < 800)) return; + TossProjectile("proj_fire_xolt", /* TODO: $relpos */ $relpos(0, 8, 32), m_hAttackTarget, 400, DMG_FIRE_BOLT, 2, "none"); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if ((STAY_NEAR_HOME)) + { + if (!(IsEntityAlive(m_hAttackTarget))) + { + } + if (GetGameTime() > LAST_RETURN_TIME) + { + } + SetMoveDest(NPC_HOME_LOC); + LAST_RETURN_TIME = GetGameTime(); + LAST_RETURN_TIME += 2.0; + } + if ((STAY_NEAR_HOME)) return; + if ((IsEntityAlive(m_hAttackTarget))) return; + if (!(AM_MOBILE)) return; + stay_still(); + } + + void npcatk_clear_targets() + { + stay_still(); + } + + void npc_targetsighted() + { + if (!(DID_ORC_COMMENT)) + { + if ((SET_TELE_POINTS)) + { + } + if (CUR_TELE_POINT == 0) + { + } + if (GetEntityRange(m_hAttackTarget) < 768) + { + } + DID_ORC_COMMENT = 1; + if (GetPlayerCount() > 1) + { + string PRO_NOUN = "yourselves."; + } + if (GetPlayerCount() == 1) + { + string PRO_NOUN = "yourself."; + } + SayText("Filthy Orcs! More useful dead than alive. Much like " + PRO_NOUN); + } + if ((AM_MOBILE)) return; + resume_movement(); + } + + void stay_still() + { + SetRoam(false); + AM_MOBILE = 0; + SetMoveAnim("idle1"); + SetIdleAnim("idle1"); + SetMoveSpeed(0.0); + } + + void resume_movement() + { + SetRoam(true); + AM_MOBILE = 1; + SetMoveAnim(ANIM_MOVE); + SetIdleAnim("idle1"); + SetMoveSpeed(1.0); + } + +} + +} diff --git a/scripts/angelscript/mscave/shadahar_cl.as b/scripts/angelscript/mscave/shadahar_cl.as new file mode 100644 index 00000000..dbe80829 --- /dev/null +++ b/scripts/angelscript/mscave/shadahar_cl.as @@ -0,0 +1,49 @@ +#pragma context client + +namespace MS +{ + +class ShadaharCl : CGameScript +{ + string WAND_COLOR; + + void client_activate() + { + int DO_NADDA = 1; + } + + void eye_beam_prep_cl() + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", param1, "setup_eye_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", param2, "setup_eye_sprite"); + } + + void wand_prep_cl() + { + WAND_COLOR = param2; + ClientEffect("tempent", "sprite", "3dmflaora.spr", param1, "setup_wand_sprite"); + } + + void setup_eye_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0.1); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.2, 0.1)); + ClientEffect("tempent", "set_current_prop", "collide", "world|die"); + } + + void setup_wand_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0.1); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "rendercolor", WAND_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.2, 0.1)); + ClientEffect("tempent", "set_current_prop", "collide", "world|die"); + } + +} + +} diff --git a/scripts/angelscript/mscave/skeleton2.as b/scripts/angelscript/mscave/skeleton2.as new file mode 100644 index 00000000..c812c737 --- /dev/null +++ b/scripts/angelscript/mscave/skeleton2.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "monsters/skeleton2.as" + +namespace MS +{ + +class Skeleton2 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/nashalrath/base_pillar_check.as b/scripts/angelscript/nashalrath/base_pillar_check.as new file mode 100644 index 00000000..bcfcda8a --- /dev/null +++ b/scripts/angelscript/nashalrath/base_pillar_check.as @@ -0,0 +1,44 @@ +#pragma context server + +namespace MS +{ + +class BasePillarCheck : CGameScript +{ + int PLAYING_DEAD; + string TARGET_CHECK; + + void OnSpawn() override + { + SetInvincible(true); + SetNoPush(true); + PLAYING_DEAD = 1; + SetSolid("none"); + SetModel("null.mdl"); + } + + void ext_check_targets() + { + TARGET_CHECK = FindEntitiesInSphere("player", 256); + } + + void ext_do_shake() + { + TARGET_CHECK = "none"; + Effect("screenshake", GetEntityOrigin(GetOwner()), 300, 30, 10.0, 384); + EmitSound(GetOwner(), 0, "magic/volcano_start.wav", 10); + } + + void ext_do_boom() + { + ScheduleDelayedEvent(1.5, "ext_do_boom2"); + } + + void ext_do_boom2() + { + EmitSound(GetOwner(), 0, "magic/boom.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/base_storm_brush.as b/scripts/angelscript/nashalrath/base_storm_brush.as new file mode 100644 index 00000000..a43cf7f9 --- /dev/null +++ b/scripts/angelscript/nashalrath/base_storm_brush.as @@ -0,0 +1,83 @@ +#pragma context server + +namespace MS +{ + +class BaseStormBrush : CGameScript +{ + int BASE_RENDERAMT; + int BASE_RENDERMODE; + int RND_AMT; + + BaseStormBrush() + { + BASE_RENDERAMT = 255; + BASE_RENDERMODE = 5; + } + + void OnSpawn() override + { + SetProp(GetOwner(), "rendermode", BASE_RENDERMODE); + SetProp(GetOwner(), "renderamt", 0); + } + + void storm_show() + { + SetProp(GetOwner(), "rendermode", BASE_RENDERMODE); + SetProp(GetOwner(), "renderamt", BASE_RENDERAMT); + } + + void storm_hide() + { + SetProp(GetOwner(), "rendermode", BASE_RENDERMODE); + SetProp(GetOwner(), "renderamt", 0); + } + + void storm_change_speed() + { + SetProp(GetOwner(), "avelocity", Vector3(0, param1, 0)); + } + + void storm_fade_in() + { + RND_AMT = 0; + storm_fade_in_loop(); + } + + void storm_fade_in_loop() + { + if (!(RND_AMT < BASE_RENDERAMT)) return; + RND_AMT += 4; + if (RND_AMT > BASE_RENDERAMT) + { + RND_AMT = BASE_RENDERAMT; + } + SetProp(GetOwner(), "rendermode", BASE_RENDERMODE); + SetProp(GetOwner(), "renderamt", RND_AMT); + if (!(RND_AMT < BASE_RENDERAMT)) return; + ScheduleDelayedEvent(0.1, "storm_fade_in_loop"); + } + + void storm_fade_out() + { + RND_AMT = BASE_RENDERAMT; + storm_fade_out_loop(); + } + + void storm_fade_out_loop() + { + if (!(RND_AMT > 0)) return; + RND_AMT -= 4; + if (RND_AMT < 0) + { + RND_AMT = 0; + } + SetProp(GetOwner(), "rendermode", BASE_RENDERMODE); + SetProp(GetOwner(), "renderamt", RND_AMT); + if (!(RND_AMT > 0)) return; + ScheduleDelayedEvent(0.1, "storm_fade_out_loop"); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/brush_storm_cold.as b/scripts/angelscript/nashalrath/brush_storm_cold.as new file mode 100644 index 00000000..df0b5c50 --- /dev/null +++ b/scripts/angelscript/nashalrath/brush_storm_cold.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "nashalrath/base_storm_brush.as" + +namespace MS +{ + +class BrushStormCold : CGameScript +{ + BrushStormCold() + { + SetName("brush_storm_cold"); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/brush_storm_fire.as b/scripts/angelscript/nashalrath/brush_storm_fire.as new file mode 100644 index 00000000..23803f62 --- /dev/null +++ b/scripts/angelscript/nashalrath/brush_storm_fire.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "nashalrath/base_storm_brush.as" + +namespace MS +{ + +class BrushStormFire : CGameScript +{ + BrushStormFire() + { + SetName("brush_storm_fire"); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/brush_storm_lightning1.as b/scripts/angelscript/nashalrath/brush_storm_lightning1.as new file mode 100644 index 00000000..9f344e14 --- /dev/null +++ b/scripts/angelscript/nashalrath/brush_storm_lightning1.as @@ -0,0 +1,22 @@ +#pragma context server + +#include "nashalrath/base_storm_brush.as" + +namespace MS +{ + +class BrushStormLightning1 : CGameScript +{ + int BASE_RENDERAMT; + int BASE_RENDERMODE; + + BrushStormLightning1() + { + SetName("brush_storm_lightning1"); + BASE_RENDERMODE = 5; + BASE_RENDERAMT = 180; + } + +} + +} diff --git a/scripts/angelscript/nashalrath/brush_storm_lightning2.as b/scripts/angelscript/nashalrath/brush_storm_lightning2.as new file mode 100644 index 00000000..6dc53135 --- /dev/null +++ b/scripts/angelscript/nashalrath/brush_storm_lightning2.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "nashalrath/base_storm_brush.as" + +namespace MS +{ + +class BrushStormLightning2 : CGameScript +{ + int BASE_RENDERAMT; + int BASE_RENDERMODE; + + BrushStormLightning2() + { + SetName("brush_storm_lightning2"); + BASE_RENDERMODE = 5; + BASE_RENDERAMT = 255; + } + + void do_flicker() + { + storm_show(); + Random(0_1, 0_5)("callevent", "storm_hide"); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/dragon_green_img.as b/scripts/angelscript/nashalrath/dragon_green_img.as new file mode 100644 index 00000000..7663fc8f --- /dev/null +++ b/scripts/angelscript/nashalrath/dragon_green_img.as @@ -0,0 +1,1000 @@ +#pragma context server + +#include "monsters/base_chat_array.as" +#include "monsters/debug.as" + +namespace MS +{ + +class DragonGreenImg : CGameScript +{ + int AM_BREATHING; + int AM_LIFTING; + string ANIM_BREATH_STORM; + string ANIM_CONVO1; + string ANIM_CONVO2; + string ANIM_IDLE; + string ANIM_IDLE_LOOK; + string ANIM_LAUGH; + string ANIM_LAUGH_CONVO; + string ANIM_LEAVE; + string ANIM_LIFT_LEFT; + string ANIM_LIFT_RIGHT; + string ANIM_SUMMON; + string ANIM_TALK; + string ASPECT_ID; + string ATK_POINTS; + float ATTN_VOICE; + int BATTLE_ACTIVE; + int BREATH_CYCLE; + string BUSY_TALKING; + int CHAT_AUTO_FACE; + string CHAT_CURRENT_SPEAKER; + int CHAT_FACE_ON_USE; + int CHAT_MENU_ENABLE; + int CHAT_MOVE_MOUTH; + string CHAT_PLAYANIM_STYLE; + string CL_BREATH_IDX; + string CL_STORM_IDX; + int CURRENT_NECK_ANG; + int DEST_NECK_ANG; + int DG_BASE_RENDERAMT; + string DG_PULSE_COUNT; + int DG_PULSE_DIR; + int DG_PULSE_LOOP; + int DID_INTRO; + string DID_MINIONS; + int DMG_ICE_SHARD; + int DMG_LIGHTNING_STRIKE; + int DMG_METEOR; + int DOT_COLD; + int DOT_FIRE; + int DOT_LIGHTNING; + float DUR_STORM; + int FADE_COUNT; + string FLICKER_BRUSH_ID; + string FLICKER_BRUSH_ON; + string FLICKER_COUNT; + float FREQ_BALLS; + float FREQ_BOLTS; + float FREQ_BREATH; + int GLOAT_COUNT; + string HALF_ASPECT_HEALTH; + int HAZARD_STRUCK; + int HEAD_FOLLOW; + string HEAD_TARGET; + string HEAD_TRACKING; + int LIFT_COUNT; + string LIGHTNING_FLICKERING; + int NECK_MAX_ANG; + int NECK_MIN_ANG; + string NEXT_BALLS; + string NEXT_BOLTS; + string NEXT_BREATH; + string NEXT_LIFT_CHECK; + string NEXT_PULSE; + string NEXT_WING_BEAT; + string PILLAR_CHECK_ID; + string PILLAR_NAME; + int PITCH_VOICE; + string PLAYER_LIST; + int PLAYING_DEAD; + string RACE_TEXT; + string RACE_VOICE; + string SOUND_BREATH_IN; + string SOUND_BREATH_OUT; + string STORM_BRUSH_ID; + string STORM_CENTER; + int STORM_ON; + int STORM_RAD; + + DragonGreenImg() + { + ANIM_IDLE = "anim_img_idle2"; + ANIM_IDLE_LOOK = "anim_img_idle2_look"; + ANIM_TALK = "anim_img_idle2_talk"; + ANIM_LEAVE = "anim_img_flyout"; + ANIM_LIFT_LEFT = "anim_img_lift_left"; + ANIM_LIFT_RIGHT = "anim_img_lift_right"; + ANIM_BREATH_STORM = "anim_img_breath_storm"; + ANIM_SUMMON = "anim_img_idle2_look"; + ANIM_LAUGH = "anim_img_idle2_talk"; + ANIM_LAUGH_CONVO = "anim_img_idle2_talk"; + ANIM_CONVO1 = "anim_img_idle2_talk"; + ANIM_CONVO2 = "anim_img_idle2_look"; + ATTN_VOICE = 0.01; + PITCH_VOICE = 50; + CHAT_MOVE_MOUTH = 0; + CHAT_AUTO_FACE = 0; + CHAT_FACE_ON_USE = 0; + CHAT_MENU_ENABLE = 0; + CHAT_PLAYANIM_STYLE = "once"; + STORM_CENTER = Vector3(2496, -2608, -2024); + STORM_RAD = 768; + FREQ_BREATH = 120.0; + DUR_STORM = 60.0; + FREQ_BOLTS = Random(3.0, 7.0); + FREQ_BALLS = Random(5.0, 10.0); + DMG_ICE_SHARD = RandomInt(100, 200); + DOT_COLD = 50; + DMG_LIGHTNING_STRIKE = RandomInt(400, 800); + DOT_LIGHTNING = 150; + ATK_POINTS = ""; + DOT_FIRE = 100; + DMG_METEOR = 800; + NECK_MAX_ANG = 30; + NECK_MIN_ANG = -30; + DEST_NECK_ANG = 0; + CURRENT_NECK_ANG = 0; + SOUND_BREATH_IN = "magic/spookie1.wav"; + SOUND_BREATH_OUT = "monsters/goblin/sps_fogfire.wav"; + Precache("weather/Storm_exclamation.wav"); + DG_BASE_RENDERAMT = 100; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if ((HEAD_FOLLOW)) + { + } + if (!(IsEntityAlive(HEAD_TARGET))) + { + SetProp(GetOwner(), "controller0", 0); + SetProp(GetOwner(), "controller1", 0); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (!(IsEntityAlive(HEAD_TARGET))) + { + DEST_NECK_ANG = 0; + if (!(HEAD_TRACKING)) + { + } + HEAD_TRACKING = 1; + head_track(); + } + if ((IsEntityAlive(HEAD_TARGET))) + { + } + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_RANGE = GetEntityRange(HEAD_TARGET); + if (TARG_RANGE > 128) + { + string TARG_ORG = GetEntityOrigin(HEAD_TARGET); + string ANG_TO_TARG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + ANG_TO_TARG *= 0.25; + string ANG_TO_TARG = /* TODO: $neg */ $neg(ANG_TO_TARG); + DEST_NECK_ANG = ANG_TO_TARG; + } + else + { + DEST_NECK_ANG = 0; + } + if (DEST_NECK_ANG > NECK_MAX_ANG) + { + DEST_NECK_ANG = NECK_MAX_ANG; + } + if (DEST_NECK_ANG < NECK_MIN_ANG) + { + DEST_NECK_ANG = NECK_MIN_ANG; + } + if (!(HEAD_TRACKING)) + { + string DEST_ANG_P = DEST_NECK_ANG; + string DEST_ANG_M = DEST_NECK_ANG; + DEST_ANG_P += 2; + DEST_ANG_M -= 2; + int L_CLOSE = 0; + if (CURRENT_NECK_ANG < DEST_ANG_P) + { + int L_CLOSE = 1; + } + if (CURRENT_NECK_ANG > DEST_ANG_M) + { + L_CLOSE += 1; + } + if (L_CLOSE == 2) + { + HEAD_TRACKING = 0; + } + else + { + HEAD_TRACKING = 1; + head_track(); + } + } + if (GetGameTime() > NEXT_PULSE) + { + NEXT_PULSE = GetGameTime(); + NEXT_PULSE += Random(30.0, 60.0); + do_pulse(); + } + } + + void fake_precache() + { + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_hide1.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_hide1.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_hide2.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_hide2.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_hide3.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_hide3.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_intro01.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_intro01.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_intro02.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_intro02.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_intro03.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_intro03.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_intro04.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_intro04.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_laugh1.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_laugh1.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_laugh2.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_laugh2.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_minions01.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_minions01.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_minions02.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_minions02.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_minions03.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_minions03.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_player_human.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_player_human.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_player_multirace.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_player_multirace.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_players_human.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_players_human.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_win01.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_win01.wav"); + // svplaysound: svplaysound 1 0 voices/dragons/Jaminporlants_win02.wav + EmitSound(1, 0, "voices/dragons/Jaminporlants_win02.wav"); + } + + void OnSpawn() override + { + SetName("Jaminporlants"); + SetModel("monsters/dragon_green_img.mdl"); + SetName("gdragon_img"); + SetRace("demon"); + SetHealth(99999); + SetInvincible(true); + PLAYING_DEAD = 1; + SetNoPush(true); + SetWidth(1); + SetHeight(1); + SetFly(true); + SetGravity(0); + SetProp(GetOwner(), "movetype", 0); + SetSayTextRange(2048); + ScheduleDelayedEvent(0.1, "scan_for_players"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", DG_BASE_RENDERAMT); + } + + void scan_for_players() + { + if ((DID_INTRO)) return; + PLAYER_LIST = ""; + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + check_players(); + } + if ((DID_INTRO)) return; + ScheduleDelayedEvent(1.0, "scan_for_players"); + } + + void check_players() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if ((DID_INTRO)) return; + if (!(GetEntityRange(CUR_TARG) < 768)) return; + DID_INTRO = 1; + CHAT_CURRENT_SPEAKER = CUR_TARG; + ScheduleDelayedEvent(1.0, "do_intro"); + } + + void do_intro() + { + FLICKER_BRUSH_ID = FindEntityByName("brush_storm_lightning2"); + GLOAT_COUNT = 0; + if ((L_RACE_MULTI)) + { + RACE_VOICE = "voices/dragons/Jaminporlants_player_multirace.wav"; + RACE_TEXT = "Children of the Triad...?"; + } + else + { + if (GetPlayerCount() > 1) + { + RACE_VOICE = "voices/dragons/Jaminporlants_players_human.wav"; + RACE_TEXT = "Children of Torkalath...?"; + } + else + { + if (GetPlayerCount() == 1) + { + RACE_VOICE = "voices/dragons/Jaminporlants_player_human.wav"; + RACE_TEXT = "A child of Torkalath...?"; + } + } + } + CallExternal("players", "ext_svplaysound_kiss", 2, 10, RACE_VOICE, 0.8, 100); + SetIdleAnim(ANIM_CONVO1); + chat_now(RACE_TEXT, 2.6, ANIM_IDLE_LOOK, "do_intro2", "add_to_que"); + } + + void do_intro2() + { + HEAD_TARGET = CHAT_CURRENT_SPEAKER; + HEAD_FOLLOW = 1; + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_intro01.wav", ATTN_VOICE, PITCH_VOICE); + chat_now("Creatures forged by, single, pitiful gods... Dare to seek out me?", 7.9, ANIM_CONVO1, "none", "add_to_que"); + chat_now("...a being who was forged at the dawn of time by thousands of gods!?", 6.91, ANIM_CONVO1, "do_intro3", "add_to_que"); + } + + void do_intro3() + { + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_intro02.wav", ATTN_VOICE, PITCH_VOICE); + chat_now("...but I'm afraid your efforts, are in vain.", 3.86, ANIM_CONVO2, "do_intro4", "add_to_que"); + } + + void do_intro4() + { + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_intro03.wav", ATTN_VOICE, PITCH_VOICE); + chat_now("I have long since moved on from this place...", 4.10, ANIM_CONVO1, "none", "add_to_que"); + chat_now("...And have merely left this image here to 'entertain' belated guests.", 6.2, ANIM_CONVO1, "do_intro5", "add_to_que"); + } + + void do_intro5() + { + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_intro04.wav", ATTN_VOICE, PITCH_VOICE); + chat_now("But fear not... It is not all I have left behind... ", 5.23, ANIM_CONVO1, "none", "add_to_que"); + chat_now("Behold...", 2.2, "none", "none", "add_to_que"); + ScheduleDelayedEvent(4.5, "do_intro6"); + } + + void do_intro6() + { + SetIdleAnim(ANIM_IDLE); + PlayAnim("critical", ANIM_SUMMON); + ScheduleDelayedEvent(1.0, "start_battle"); + ScheduleDelayedEvent(3.0, "ext_gloat"); + } + + void head_track() + { + if (!(HEAD_FOLLOW)) return; + if (!(HEAD_TRACKING)) return; + if (CURRENT_NECK_ANG < DEST_NECK_ANG) + { + CURRENT_NECK_ANG += 1; + } + if (CURRENT_NECK_ANG > DEST_NECK_ANG) + { + CURRENT_NECK_ANG -= 1; + } + string DEST_ANG_P = DEST_NECK_ANG; + string DEST_ANG_M = DEST_NECK_ANG; + DEST_ANG_P += 2; + DEST_ANG_M -= 2; + int L_CLOSE = 0; + if (CURRENT_NECK_ANG < DEST_ANG_P) + { + int L_CLOSE = 1; + } + if (CURRENT_NECK_ANG > DEST_ANG_M) + { + L_CLOSE += 1; + } + if (L_CLOSE == 2) + { + HEAD_TRACKING = 0; + } + SetProp(GetOwner(), "controller0", CURRENT_NECK_ANG); + if (!(HEAD_TRACKING)) return; + if (!(IsEntityAlive(HEAD_TARGET))) + { + int L_HEAD_ADJ = 0; + } + else + { + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_RANGE = GetEntityRange(HEAD_TARGET); + string L_RANGE_RATIO = TARG_RANGE; + L_RANGE_RATIO /= 1000; + string L_HEAD_ADJ = /* TODO: $ratio */ $ratio(L_RANGE_RATIO, -10, 18); + } + SetProp(GetOwner(), "controller1", L_HEAD_ADJ); + ScheduleDelayedEvent(0.01, "head_track"); + } + + void suspend_head_tracking() + { + SetProp(GetOwner(), "controller0", 0); + SetProp(GetOwner(), "controller1", 0); + HEAD_TRACKING = 0; + HEAD_FOLLOW = 0; + DEST_NECK_ANG = 0; + CURRENT_NECK_ANG = 0; + } + + void resume_head_tracking() + { + HEAD_FOLLOW = 1; + } + + void start_battle() + { + UseTrigger("spawn_dragon"); + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + NEXT_LIFT_CHECK = GetGameTime(); + NEXT_LIFT_CHECK += 20.0; + BATTLE_ACTIVE = 1; + BREATH_CYCLE = 0; + LIFT_COUNT = 0; + battle_loop(); + } + + void battle_loop() + { + if (!(BATTLE_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "battle_loop"); + if (!(IsEntityAlive(ASPECT_ID))) + { + ASPECT_ID = FindEntityByName("gdragon_aspect"); + if ((IsEntityAlive(ASPECT_ID))) + { + } + HALF_ASPECT_HEALTH = GetEntityMaxHealth(ASPECT_ID); + HALF_ASPECT_HEALTH *= 0.5; + } + else + { + HEAD_TARGET = GetEntityProperty(ASPECT_ID, "scriptvar"); + if (!(IsEntityAlive(HEAD_TARGET))) + { + HEAD_TARGET = ASPECT_ID; + } + } + if (GetEntityHealth(ASPECT_ID) < HALF_ASPECT_HEALTH) + { + if (!(DID_MINIONS)) + { + } + DID_MINIONS = 1; + BUSY_TALKING = 1; + do_minions(); + } + if ((STORM_ON)) + { + if (BREATH_CYCLE == 1) + { + if (GetGameTime() > NEXT_BALLS) + { + } + NEXT_BALLS = GetGameTime(); + NEXT_BALLS += FREQ_BALLS; + drop_meteor(); + if (RandomInt(1, 2) == 1) + { + } + Random(0_5, 2_0)("drop_meteor"); + if (RandomInt(1, 4) < 4) + { + } + Random(2_1, 4_0)("drop_meteor"); + } + if (BREATH_CYCLE == 2) + { + if (GetGameTime() > NEXT_BOLTS) + { + } + NEXT_BOLTS = GetGameTime(); + NEXT_BOLTS += FREQ_BOLTS; + do_lightning_bolt(); + if (RandomInt(1, 2) == 1) + { + } + Random(0_5, 2_0)("do_lightning_bolt"); + } + if (BREATH_CYCLE == 3) + { + if (GetGameTime() > NEXT_BALLS) + { + } + NEXT_BALLS = GetGameTime(); + NEXT_BALLS += FREQ_BALLS; + do_ice_bolt(); + if (RandomInt(1, 2) == 1) + { + } + Random(0_5, 2_0)("do_ice_bolt"); + } + } + if (GetGameTime() > NEXT_BREATH) + { + if (!(AM_BREATHING)) + { + } + if ((BUSY_TALKING)) + { + int EXIT_SUB = 1; + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += 20.0; + } + if ((AM_LIFTING)) + { + int EXIT_SUB = 1; + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += 10.0; + } + if (!(EXIT_SUB)) + { + } + do_breath(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetGameTime() > NEXT_LIFT_CHECK) + { + if (!(AM_LIFTING)) + { + } + NEXT_LIFT_CHECK = GetGameTime(); + NEXT_LIFT_CHECK += 20.0; + if ((BUSY_TALKING)) + { + int EXIT_SUB = 1; + NEXT_LIFT = GetGameTime(); + NEXT_LIFT += 20.0; + } + if (!(EXIT_SUB)) + { + } + if ((AM_BREATHING)) + { + int EXIT_SUB = 1; + NEXT_LIFT = GetGameTime(); + NEXT_LIFT += 20.0; + } + if (!(EXIT_SUB)) + { + } + string PILLAR_ID = FindEntityByName("lift_pillar_left"); + CallExternal(PILLAR_ID, "ext_check_targets"); + if (GetEntityProperty(PILLAR_ID, "scriptvar") != "none") + { + do_lift("left", PILLAR_ID); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string PILLAR_ID = FindEntityByName("lift_pillar_right"); + CallExternal(PILLAR_ID, "ext_check_targets"); + if (GetEntityProperty(PILLAR_ID, "scriptvar") != "none") + { + do_lift("right", PILLAR_ID); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + } + } + + void ext_breath_now() + { + NEXT_BREATH = 0; + } + + void ext_lift_now() + { + NEXT_LIFT_CHECK = 0; + } + + void do_lift() + { + NEXT_LIFT_CHECK = GetGameTime(); + NEXT_LIFT_CHECK += 60.0; + PILLAR_NAME = param1; + PILLAR_CHECK_ID = param2; + string L_ANIM_NAME = "anim_img_lift_"; + L_ANIM_NAME += PILLAR_NAME; + PlayAnim("critical", L_ANIM_NAME); + suspend_head_tracking(); + LogDebug("do_lift anim L_ANIM_NAME"); + LIFT_COUNT += 1; + AM_LIFTING = 1; + if (LIFT_COUNT == 1) + { + chat_now("Hiding already?", 3.0, "none", "none", "add_to_que"); + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_hide1.wav", ATTN_VOICE, PITCH_VOICE); + } + else + { + if (LIFT_COUNT == 2) + { + chat_now("What are you doing over there? ...Trying to hide?", 3.0, "none", "none", "add_to_que"); + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_hide2.wav", ATTN_VOICE, PITCH_VOICE); + } + else + { + if (LIFT_COUNT == 3) + { + chat_now("Hiding again, I see...", 3.0, "none", "none", "add_to_que"); + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_hide3.wav", ATTN_VOICE, PITCH_VOICE); + LIFT_COUNT = 0; + } + } + } + } + + void frame_lift() + { + string L_TRIGGER_NAME = "door_lift_"; + L_TRIGGER_NAME += PILLAR_NAME; + UseTrigger(L_TRIGGER_NAME); + CallExternal(PILLAR_CHECK_ID, "ext_do_shake"); + } + + void frame_release() + { + ScheduleDelayedEvent(2.0, "resume_head_tracking"); + AM_LIFTING = 0; + string L_TRIGGER_NAME = "door_lift_"; + L_TRIGGER_NAME += PILLAR_NAME; + UseTrigger(L_TRIGGER_NAME); + CallExternal(PILLAR_CHECK_ID, "ext_do_boom"); + NEXT_LIFT_CHECK = GetGameTime(); + NEXT_LIFT_CHECK += 30.0; + } + + void do_breath() + { + suspend_head_tracking(); + AM_BREATHING = 1; + BREATH_CYCLE += 1; + if (BREATH_CYCLE > 3) + { + BREATH_CYCLE = 1; + } + PlayAnim("critical", ANIM_BREATH_STORM); + } + + void frame_storm_prep() + { + EmitSound(GetOwner(), 0, SOUND_BREATH_IN, 10); + } + + void frame_storm_breath_start() + { + EmitSound(GetOwner(), 0, SOUND_BREATH_OUT, 10); + ClientEvent("new", "all", "nashalrath/dragon_green_img_cl", GetEntityIndex(GetOwner()), BREATH_CYCLE); + CL_BREATH_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(2.0, "setup_storm"); + } + + void frame_storm_breath_stop() + { + ClientEvent("update", "all", CL_BREATH_IDX, "ext_breath_stop"); + } + + void frame_storm_breath_done() + { + AM_BREATHING = 0; + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + resume_head_tracking(); + } + + void setup_storm() + { + STORM_ON = 1; + if (BREATH_CYCLE == 1) + { + UseTrigger("light_storm_fire"); + CallExternal(GAME_MASTER, "gm_set_weather", "fog_dragon_red", 1); + STORM_BRUSH_ID = FindEntityByName("brush_storm_fire"); + NEXT_BALLS = GetGameTime(); + NEXT_BALLS += FREQ_BALLS; + } + if (BREATH_CYCLE == 2) + { + CallExternal(GAME_MASTER, "gm_set_weather", "fog_dragon_black", 1); + STORM_BRUSH_ID = FindEntityByName("brush_storm_lightning1"); + NEXT_BOLTS = GetGameTime(); + NEXT_BOLTS += FREQ_BOLTS; + } + if (BREATH_CYCLE == 3) + { + UseTrigger("light_storm_cold"); + CallExternal(GAME_MASTER, "gm_set_weather", "fog_dragon_white", 1); + STORM_BRUSH_ID = FindEntityByName("brush_storm_cold"); + ClientEvent("new", "all", "nashalrath/dragon_ice_storm_cl", STORM_CENTER); + CL_STORM_IDX = "game.script.last_sent_id"; + } + CallExternal(STORM_BRUSH_ID, "storm_fade_in"); + DUR_STORM("end_storm"); + } + + void end_storm() + { + if (!(STORM_ON)) return; + STORM_ON = 0; + SetGlobalVar("G_WEATHER_LOCK", 0); + SetGlobalVar("G_CURRENT_WEATHER", "clear"); + CallExternal(GAME_MASTER, "gm_start_weather", "clear"); + CallExternal(STORM_BRUSH_ID, "storm_fade_out"); + if (BREATH_CYCLE == 1) + { + UseTrigger("light_storm_fire"); + } + if (BREATH_CYCLE == 3) + { + UseTrigger("light_storm_cold"); + ClientEvent("update", "all", CL_STORM_IDX, "end_fx"); + } + } + + void do_lightning_bolt() + { + if (!(LIGHTNING_FLICKERING)) + { + LIGHTNING_FLICKERING = 1; + FLICKER_COUNT = 0; + lightning_flicker(); + ScheduleDelayedEvent(5.0, "lightning_flicker_end"); + } + string L_POS = STORM_CENTER; + float RND_ANG = Random(0, 359.99); + float RND_DIST = Random(0, STORM_RAD); + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, RND_DIST, 0)); + string L_GROUND = L_POS; + L_GROUND = "z"; + int L_STRIKE_TIME = 0; + if ((L_GROUND).z > -3000) + { + int L_STRIKE_TIME = 3; + if (ATK_POINTS.length() > 0) ATK_POINTS += ";"; + ATK_POINTS += L_GROUND; + L_STRIKE_TIME("lightning_strike"); + } + ClientEvent("new", "all", "nashalrath/lightning_strike_cl", L_POS, L_STRIKE_TIME); + } + + void lightning_strike() + { + string L_POS = GetToken(ATK_POINTS, 0, ";"); + RemoveToken(ATK_POINTS, 0, ";"); + HAZARD_STRUCK = 1; + XDoDamage(L_POS, 128, DMG_LIGHTNING_STRIKE, 0.1, GetOwner(), GetOwner(), "none", "lightning_effect"); + } + + void lightning_flicker() + { + FLICKER_COUNT += 1; + if (!(FLICKER_COUNT < 7)) return; + LogDebug("lightning_flicker"); + Random(0_1, 0_2)("lightning_flicker"); + if (!(FLICKER_BRUSH_ON)) + { + FLICKER_BRUSH_ON = 1; + UseTrigger("light_storm_lightning"); + CallExternal(FLICKER_BRUSH_ID, "storm_show"); + } + else + { + FLICKER_BRUSH_ON = 0; + UseTrigger("light_storm_lightning"); + CallExternal(FLICKER_BRUSH_ID, "storm_hide"); + } + } + + void lightning_flicker_end() + { + if ((FLICKER_BRUSH_ON)) + { + FLICKER_BRUSH_ON = 0; + UseTrigger("light_storm_lightning"); + CallExternal(FLICKER_BRUSH_ID, "storm_hide"); + } + LIGHTNING_FLICKERING = 0; + } + + void do_ice_bolt() + { + string L_POS = STORM_CENTER; + float RND_ANG = Random(0, 359.99); + float RND_DIST = Random(0, STORM_RAD); + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, RND_DIST, 0)); + string L_DEST = L_POS; + L_DEST += "z"; + TossProjectile("proj_ice_bolt", L_POS, L_DEST, 450, DMG_ICE_SHARD, 0, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_scale", 4); + } + + void drop_meteor() + { + string L_POS = STORM_CENTER; + float RND_ANG = Random(0, 359.99); + float RND_DIST = Random(0, STORM_RAD); + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, RND_DIST, 0)); + string L_DEST = /* TODO: $relpos */ $relpos(L_POS, Vector3(-10, -10, -100)); + TossProjectile("proj_staff_fire_bomb", L_POS, L_DEST, 120, DMG_METEOR, 0, "none"); + } + + void ext_fire_bomb() + { + HAZARD_STRUCK = 1; + } + + void game_dodamage() + { + if (!(HAZARD_STRUCK)) return; + HAZARD_STRUCK = 0; + if (!(param1)) return; + if (!(int(param6))) return; + if (!(GetRelationship(GetOwner()) == "enemy")) return; + if (BREATH_CYCLE == 1) + { + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + else + { + if (BREATH_CYCLE == 2) + { + ApplyEffect(param2, "effects/dot_lightning", 10.0, GetEntityIndex(GetOwner()), DOT_LIGHTNING); + } + } + } + + void do_minions() + { + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_minions01.wav", ATTN_VOICE, PITCH_VOICE); + chat_now("Did you enjoy my minions?", 3.3, ANIM_CONVO1, "do_minions2", "add_to_que"); + } + + void do_minions2() + { + UseTrigger("spawn_minions"); + CallExternal("players", "ext_play_music_me", "dream_battle.mp3"); + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_minions02.wav", ATTN_VOICE, PITCH_VOICE); + chat_now("Their creation was inspired by Kharaztorant's pitiful attempts at immortality...", 7.5, ANIM_CONVO1, "do_minions3", "add_to_que"); + } + + void do_minions3() + { + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_minions03.wav", ATTN_VOICE, PITCH_VOICE); + chat_now("But they are well suited for menial tasks...", 4.1, ANIM_CONVO1, "none", "add_to_que"); + chat_now("...such as crushing insects!", 3.5, ANIM_CONVO1, "do_minions4", "add_to_que"); + } + + void do_minions4() + { + BUSY_TALKING = 0; + } + + void ext_gloat() + { + if ((AM_BREATHING)) return; + if ((BUSY_TALKING)) return; + if ((AM_LIFTING)) return; + GLOAT_COUNT += 1; + if (GLOAT_COUNT == 1) + { + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_laugh1.wav", ATTN_VOICE, PITCH_VOICE); + } + else + { + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_laugh2.wav", ATTN_VOICE, PITCH_VOICE); + GLOAT_COUNT = 0; + } + } + + void ext_image_died() + { + BATTLE_ACTIVE = 0; + if ((STORM_ON)) + { + end_storm(); + } + ScheduleDelayedEvent(2.0, "win_sequence1"); + } + + void win_sequence1() + { + CallExternal("players", "ext_play_music_me", "Nashalrath.mp3"); + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_win01.wav", ATTN_VOICE, PITCH_VOICE); + chat_now("Impressive... Most impressive...", 3.81, ANIM_LAUGH, "none", "add_to_que"); + chat_now("When you die, for the final time, should you be fortunate enough to see your god Torkalath...", 9.52, ANIM_CONVO1, "none", "add_to_que"); + chat_now("Remind him... That I still believe in rewarding strength!", 7.02, ANIM_SUMMON, "win_sequence2", "add_to_que"); + } + + void win_sequence2() + { + UseTrigger("spawn_dragon_chest"); + } + + void ext_exit_sequence() + { + CallExternal("players", "ext_svplaysound_kiss", 2, 10, "voices/dragons/Jaminporlants_win02.wav", ATTN_VOICE, PITCH_VOICE); + chat_now("Should your efforts continue to be so fruitful...", 7.0, ANIM_CONVO1, "none", "add_to_que"); + chat_now("We may one day, meet in person!", 2.58, "none", "do_exit", "add_to_que"); + } + + void do_exit() + { + PlayAnim("hold", ANIM_LEAVE); + FADE_COUNT = 255; + DG_PULSE_LOOP = 0; + drag_fade_out(); + } + + void drag_fade_out() + { + if (GetGameTime() > NEXT_WING_BEAT) + { + NEXT_WING_BEAT = GetGameTime(); + NEXT_WING_BEAT += 0.75; + EmitSound(GetOwner(), 0, "weapons/swinghuge.wav", 10); + } + FADE_COUNT -= 5; + if (FADE_COUNT < 0) + { + FADE_COUNT = 0; + DeleteEntity(GetOwner()); + } + SetProp(GetOwner(), "renderamt", FADE_COUNT); + if (!(FADE_COUNT > 0)) return; + ScheduleDelayedEvent(0.1, "drag_fade_out"); + } + + void do_pulse() + { + if ((DG_PULSE_LOOP)) return; + DG_PULSE_COUNT = DG_BASE_RENDERAMT; + DG_PULSE_LOOP = 1; + DG_PULSE_DIR = 1; + do_dgpulse_loop(); + } + + void do_dgpulse_loop() + { + if (!(DG_PULSE_LOOP)) return; + ScheduleDelayedEvent(0.1, "do_dgpulse_loop"); + LogDebug("do_dgpulse_loop DG_PULSE_COUNT"); + if (DG_PULSE_DIR == 1) + { + if (DG_PULSE_COUNT < 255) + { + DG_PULSE_COUNT += 1; + SetProp(GetOwner(), "renderamt", DG_PULSE_COUNT); + } + else + { + DG_PULSE_DIR = -1; + } + } + else + { + if (DG_PULSE_COUNT > DG_BASE_RENDERAMT) + { + DG_PULSE_COUNT -= 1; + SetProp(GetOwner(), "renderamt", DG_PULSE_COUNT); + } + else + { + SetProp(GetOwner(), "renderamt", DG_BASE_RENDERAMT); + DG_PULSE_LOOP = 0; + } + } + } + +} + +} diff --git a/scripts/angelscript/nashalrath/dragon_green_img_cl.as b/scripts/angelscript/nashalrath/dragon_green_img_cl.as new file mode 100644 index 00000000..d5b40adb --- /dev/null +++ b/scripts/angelscript/nashalrath/dragon_green_img_cl.as @@ -0,0 +1,102 @@ +#pragma context server + +namespace MS +{ + +class DragonGreenImgCl : CGameScript +{ + string BREATH_COLOR; + string BREATH_TYPE; + string BREATH_YAW; + int FX_ACTIVE; + string FX_OWNER; + + DragonGreenImgCl() + { + } + + void client_activate() + { + FX_OWNER = param1; + BREATH_TYPE = param2; + BREATH_YAW = /* TODO: $getcl */ $getcl(FX_OWNER, "angles"); + BREATH_YAW = /* TODO: $vec.yaw */ $vec.yaw(BREATH_YAW); + if (BREATH_TYPE == 1) + { + BREATH_COLOR = Vector3(255, 128, 0); + } + if (BREATH_TYPE == 2) + { + BREATH_COLOR = Vector3(255, 255, 0); + } + if (BREATH_TYPE == 3) + { + BREATH_COLOR = Vector3(64, 64, 255); + } + FX_ACTIVE = 1; + breath_loop(); + } + + void breath_loop() + { + if (!(FX_ACTIVE)) return; + Random(0_1, 0_2)("breath_loop"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "setup_breath_sprite", "update_breath_sprite"); + } + + void ext_breath_stop() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(8.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_breath_sprite() + { + if (!(FX_ACTIVE)) return; + if (("game.tempent.origin").z > -2100) + { + ClientEffect("tempent", "set_current_prop", "gravity", 2); + ClientEffect("tempent", "set_current_prop", "fuser2", 1); + LogDebug("update_breath_sprite adjust_down"); + } + else + { + if ("game.tempent.fuser2" == 1) + { + } + ClientEffect("tempent", "set_current_prop", "gravity", -2); + } + string CUR_SCALE = "game.tempent.fuser1"; + if (!(CUR_SCALE < 20)) return; + CUR_SCALE += 0.1; + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + } + + void setup_breath_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 6.0); + string L_BREATH_YAW = BREATH_YAW; + L_BREATH_YAW += Random(-30.00, 30.00); + float RND_F = Random(100.00, 300.00); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relpos */ $relpos(Vector3(0, L_BREATH_YAW, 0), Vector3(0, RND_F, 0))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 2); + ClientEffect("tempent", "set_current_prop", "scale", 1); + ClientEffect("tempent", "set_current_prop", "gravity", Random(-3.0, -2.0)); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "fuser1", 1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", BREATH_COLOR); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/dragon_green_mini.as b/scripts/angelscript/nashalrath/dragon_green_mini.as new file mode 100644 index 00000000..f9283f2e --- /dev/null +++ b/scripts/angelscript/nashalrath/dragon_green_mini.as @@ -0,0 +1,837 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class DragonGreenMini : CGameScript +{ + string ANIMSET_ATK_CLOSE; + string ANIMSET_ATK_FAR; + string ANIM_ATTACK; + string ANIM_BREATH_CLOSE; + string ANIM_BREATH_FAR; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SPIT; + string ANIM_WALK; + int AOE_BITE; + int AOE_CLAW; + int AOE_STOMP; + string AS_ATTACKING; + int ATK_SOUND_IDX; + int ATTACK_ANIM_IDX; + int ATTACK_HITRANGE; + string ATTACK_MODE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BLOB_ORG; + int BONE_LEFT_CLAW; + int BONE_LEFT_FOOT; + int BONE_RIGHT_CLAW; + string BREATH_CURRENT_YAW; + string BREATH_FWD_OFS; + int BREATH_HOVER; + int BREATH_IDX; + int BREATH_LOOP_SOUND; + int BREATH_ON; + string BREATH_TARGET; + string CL_BREATH_IDX; + string CL_WIND_IDX; + string CUR_SPIT_TARG_IDX; + string DEBUG_BEAM_END; + string DEBUG_BEAM_RADIUS; + int DEBUG_BEAM_ROT; + string DEBUG_BEAM_START; + int DID_INTRO; + int DMG_BITE; + int DMG_BREATH; + int DMG_CLAW; + string DMG_GLOB; + int DMG_STOMP; + int DOT_BREATH; + float FALLOFF_BITE; + float FALLOFF_CLAW; + int FALLOFF_STOMP; + int FORCE_BREATH; + float FREQ_BREATH; + string GLOB_TARG; + string HALF_HEALTH; + float HOVER_DURATION; + string MASTER_ID; + int MAX_BREATH_RANGE; + int MOVE_RANGE; + string NEXT_BREATH; + string NEXT_BREATH_DEBUG_CIRC; + string NEXT_BREATH_DMG; + string NEXT_GLOAT; + string NEXT_STANCE_SHIFT; + int NO_SPAWN_STUCK_CHECK; + int NO_STEP_ADJ; + float NPC_BOSS_REGEN_FREQ; + float NPC_BOSS_REGEN_RATE; + float NPC_DELAY_RETALITATE; + int NPC_GIVE_EXP; + int NPC_IS_BOSS; + int NPC_MUST_SEE_TARGET; + string PROJ_LAND_ORG; + string PROJ_NME_TARGS; + string SLAM_ORG; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BREATH; + string SOUND_BREATH_LOOP; + string SOUND_BREATH_START; + string SOUND_DEATH; + string SOUND_FLAP; + string SOUND_IDLE; + string SOUND_INTRO; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_STEP1; + string SOUND_STEP2; + string SOUND_STEP3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWING; + + DragonGreenMini() + { + ANIMSET_ATK_CLOSE = "anim_atk_close1;anim_atk_close2;anim_atk_close2;anim_atk_close1;anim_atk_close2;anim_atk_close3;anim_atk_close1;anim_atk_close2;anim_atk_close4"; + ANIMSET_ATK_FAR = "anim_atk_far1"; + ANIM_BREATH_CLOSE = "anim_breath_close"; + ANIM_BREATH_FAR = "anim_breath_far"; + ANIM_ATTACK = "anim_atk_far1"; + ANIM_RUN = "anim_lx_leap"; + ANIM_WALK = "anim_lx_leap"; + ANIM_IDLE = "anim_idle_deep"; + ANIM_SPIT = "anim_atk_fireball"; + ANIM_BREATH_FAR = "anim_breath_far"; + ANIM_BREATH_CLOSE = "anim_breath_close"; + NO_SPAWN_STUCK_CHECK = 1; + NO_STEP_ADJ = 1; + NPC_MUST_SEE_TARGET = 0; + ATTACK_MOVERANGE = 256; + MOVE_RANGE = 256; + ATTACK_RANGE = 265; + ATTACK_HITRANGE = 265; + NPC_IS_BOSS = 1; + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_REGEN_FREQ = 120.0; + NPC_GIVE_EXP = 20000; + MAX_BREATH_RANGE = 384; + ATTACK_MODE = "close"; + BONE_RIGHT_CLAW = 35; + BONE_LEFT_CLAW = 30; + BONE_LEFT_FOOT = 72; + DMG_CLAW = 400; + AOE_CLAW = 128; + FALLOFF_CLAW = 0.01; + DMG_BITE = 600; + AOE_BITE = 96; + FALLOFF_BITE = 0.01; + DMG_STOMP = 800; + AOE_STOMP = 256; + FALLOFF_STOMP = 0; + SOUND_INTRO = "monsters/dragons/c_dragnold_bat2.wav"; + SOUND_ALERT1 = "monsters/dragons/c_dragnold_bat1.wav"; + SOUND_ALERT2 = "monsters/dragons/c_dragnold_bat2.wav"; + SOUND_ATTACK1 = "monsters/dragons/c_dragnold_atk1.wav"; + SOUND_ATTACK2 = "monsters/dragons/c_dragnold_atk2.wav"; + SOUND_ATTACK3 = "monsters/dragons/c_dragnold_atk3.wav"; + SOUND_DEATH = "monsters/dragons/c_dragnold_dead.wav"; + SOUND_PAIN1 = "monsters/dragons/c_dragnold_hit1.wav"; + SOUND_PAIN2 = "monsters/dragons/c_dragnold_hit2.wav"; + SOUND_PAIN3 = "monsters/dragons/c_dragonold_hit2.wav"; + SOUND_IDLE = "monsters/dragons/c_dragnold_slct.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_SWING = "weapons/swinghuge.wav"; + SOUND_STEP1 = "monsters/dragons/fs_x0snw_drg1.wav"; + SOUND_STEP2 = "monsters/dragons/fs_x0snw_drg2.wav"; + SOUND_STEP3 = "monsters/dragons/fs_x0snw_drg3.wav"; + SOUND_BREATH = "magic/spookie1.wav"; + SOUND_BREATH_START = "magic/flame_loop_start.wav"; + SOUND_BREATH_LOOP = "magic/flame_loop.wav"; + SOUND_FLAP = "monsters/bat/flap_big.wav"; + FREQ_BREATH = Random(60.0, 120.0); + BREATH_IDX = 0; + HOVER_DURATION = 15.0; + ATK_SOUND_IDX = 0; + DMG_BREATH = 75; + DOT_BREATH = 100; + NPC_DELAY_RETALITATE = Random(10.0, 20.0); + Precache("monsters/monster_extras.mdl"); + } + + void game_precache() + { + Precache("nashalrath/dragon_green_mini_cl"); + Precache("nashalrath/wind_cl"); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 monsters/bat/flap_big.wav + EmitSound(0, 0, "monsters/bat/flap_big.wav"); + } + + void OnSpawn() override + { + SetName("Aspect of Jaminporlants"); + SetName("gdragon_aspect"); + SetModel("monsters/dragon_green_mini.mdl"); + SetRace("demon"); + SetWidth(256); + SetHeight(256); + SetHealth(40000); + SetNoPush(true); + SetDamageResistance("all", 0.25); + SetDamageResistance("cold", 0.75); + SetDamageResistance("holy", 0.0); + SetDamageResistance("stun", 0); + SetHearingSensitivity(11); + SetIdleAnim("anim_intro"); + SetMoveAnim("anim_intro"); + ATTACK_ANIM_IDX = 0; + SetTurnRate(0.1); + SetStepSize(0); + ScheduleDelayedEvent(2.0, "get_final_props"); + } + + void get_final_props() + { + HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + HALF_HEALTH *= 0.5; + MASTER_ID = FindEntityByName("gdragon_img"); + string MASTER_TARG = GetEntityProperty(MASTER_ID, "scriptvar"); + npcatk_settarget(MASTER_TARG); + } + + void npc_targetsighted() + { + if ((DID_INTRO)) return; + DID_INTRO = 1; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + PlayAnim("critical", "anim_intro"); + EmitSound(GetOwner(), 0, SOUND_INTRO, 10); + CallExternal("players", "ext_play_music_me", "tikal.mp3"); + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + } + + void npc_selectattack() + { + if (GetGameTime() > NEXT_STANCE_SHIFT) + { + NEXT_STANCE_SHIFT = GetGameTime(); + NEXT_STANCE_SHIFT += Random(4.0, 6.0); + if (GetEntityRange(m_hAttackTarget) < 128) + { + if (ATTACK_MODE != "close") + { + } + ANIM_ATTACK = "anim_far2close"; + } + else + { + if (ATTACK_MODE != "far") + { + } + ANIM_ATTACK = "anim_close2far"; + } + } + } + + void frame_far2close_done() + { + ATTACK_MODE = "close"; + ANIM_IDLE = "anim_idle_close"; + SetIdleAnim(ANIM_IDLE); + dist_select_attack(); + } + + void frame_close2far_done() + { + ATTACK_MODE = "far"; + ANIM_IDLE = "anim_idle_far"; + SetIdleAnim(ANIM_IDLE); + dist_select_attack(); + } + + void frame_slct_next_attack() + { + dist_select_attack(); + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + } + + void dist_select_attack() + { + if (ATTACK_MODE == "close") + { + if (ATTACK_ANIM_IDX >= GetTokenCount(ANIMSET_ATK_CLOSE, ";")) + { + ATTACK_ANIM_IDX = 0; + } + ANIM_ATTACK = GetToken(ANIMSET_ATK_CLOSE, ATTACK_ANIM_IDX, ";"); + ATTACK_ANIM_IDX += 1; + } + if (ATTACK_MODE == "far") + { + if (ATTACK_ANIM_IDX >= GetTokenCount(ANIMSET_ATK_FAR, ";")) + { + ATTACK_ANIM_IDX = 0; + } + ANIM_ATTACK = GetToken(ANIMSET_ATK_FAR, ATTACK_ANIM_IDX, ";"); + ATTACK_ANIM_IDX += 1; + } + } + + void frame_claw_right() + { + attack_sound(); + string L_POS = GetEntityProperty(GetOwner(), "svbonepos"); + L_POS = "z"; + if ((G_DEVELOPER_MODE)) + { + debug_circle(L_POS, AOE_CLAW); + } + XDoDamage(L_POS, AOE_CLAW, DMG_CLAW, FALLOFF_CLAW, GetOwner(), GetOwner(), "none", "slash"); + } + + void frame_claw_left() + { + attack_sound(); + string L_POS = GetEntityProperty(GetOwner(), "svbonepos"); + L_POS = "z"; + if ((G_DEVELOPER_MODE)) + { + debug_circle(L_POS, AOE_CLAW); + } + XDoDamage(L_POS, AOE_CLAW, DMG_CLAW, FALLOFF_CLAW, GetOwner(), GetOwner(), "none", "slash"); + } + + void frame_bite() + { + attack_sound(); + string L_POS = GetEntityProperty(GetOwner(), "attachpos"); + L_POS = "z"; + if ((G_DEVELOPER_MODE)) + { + debug_circle(L_POS, AOE_BITE); + } + XDoDamage(L_POS, AOE_BITE, DMG_BITE, FALLOFF_BITE, GetOwner(), GetOwner(), "none", "pierce"); + } + + void frame_knock_left() + { + attack_sound(); + string L_POS = GetEntityProperty(GetOwner(), "svbonepos"); + L_POS = "z"; + if ((G_DEVELOPER_MODE)) + { + debug_circle(L_POS, AOE_CLAW); + } + string L_DMG = DMG_CLAW; + L_DMG *= 1.5; + XDoDamage(L_POS, AOE_CLAW, L_DMG, FALLOFF_CLAW, GetOwner(), GetOwner(), "none", "slash_effect", "dmgevent:knockleft"); + } + + void knockleft_dodamage() + { + if (!(param1)) return; + AddVelocity(param2, /* TODO: $relvel */ $relvel(-800, 100, 120)); + } + + void frame_stomp() + { + string L_POS = GetEntityProperty(GetOwner(), "svbonepos"); + L_POS = "z"; + if ((G_DEVELOPER_MODE)) + { + debug_circle(L_POS, AOE_STOMP); + } + ClientEvent("new", "all", "effects/sfx_stun_burst", L_POS, 256, 1, Vector3(0, 0, 255)); + SLAM_ORG = L_POS; + XDoDamage(L_POS, AOE_STOMP, DMG_STOMP, FALLOFF_STOMP, GetOwner(), GetOwner(), "none", "blunt_effect", "dmgevent:stomp"); + } + + void stomp_dodamage() + { + if (!(GetRelationship(param2) == "enemy")) return; + if (!(IsOnGround(param2))) return; + ApplyEffect(param2, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = SLAM_ORG; + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 500, 110))); + } + + void debug_circle() + { + DEBUG_BEAM_START = param1; + DEBUG_BEAM_END = DEBUG_BEAM_START; + DEBUG_BEAM_END += "z"; + DEBUG_BEAM_RADIUS = param2; + Effect("beam", "point", "lgtning.spr", 20, DEBUG_BEAM_START, DEBUG_BEAM_END, Vector3(255, 0, 255), 200, 0, 1.0); + DEBUG_BEAM_ROT = 0; + for (int i = 0; i < 16; i++) + { + debug_circle_loop(); + } + } + + void debug_circle_loop() + { + string BEAM_START = DEBUG_BEAM_START; + string BEAM_END = DEBUG_BEAM_START; + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, DEBUG_BEAM_ROT, 0), Vector3(0, DEBUG_BEAM_RADIUS, 32)); + DEBUG_BEAM_ROT += 22.5; + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, DEBUG_BEAM_ROT, 0), Vector3(0, DEBUG_BEAM_RADIUS, 32)); + Effect("beam", "point", "lgtning.spr", 20, BEAM_START, BEAM_END, Vector3(255, 0, 255), 200, 0, 1.0); + } + + void my_target_died() + { + if (!(GetGameTime() > NEXT_GLOAT)) return; + NEXT_GLOAT = GetGameTime(); + NEXT_GLOAT += Random(20.0, 60.0); + CallExternal(MASTER_ID, "ext_gloat"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(MASTER_ID, "ext_image_died"); + ANIM_DEATH = "anim_die_far"; + if (ATTACK_MODE == "close") + { + ANIM_DEATH = "anim_die_close"; + } + if (ATTACK_MODE == "far") + { + ANIM_DEATH = "anim_die_far"; + } + if (GetEntityRange(m_hLastStruck) > 384) + { + ANIM_DEATH = "anim_die_vfar"; + } + if ((BREATH_ON)) + { + ClientEvent("update", "all", CL_BREATH_IDX, "end_fx"); + if ((BREATH_HOVER)) + { + ClientEvent("update", "all", CL_WIND_IDX, "end_fx"); + } + if ((BREATH_LOOP_SOUND)) + { + EmitSound(GetOwner(), 4, SOUND_BREATH_LOOP, 0); + } + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetEntityHealth(GetOwner()) > HALF_HP) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void attack_sound() + { + ATK_SOUND_IDX += 1; + if (ATK_SOUND_IDX == 2) + { + EmitSound(GetOwner(), 0, SOUND_ATTACK1, 10); + } + if (ATK_SOUND_IDX == 4) + { + EmitSound(GetOwner(), 0, SOUND_ATTACK2, 10); + } + if (ATK_SOUND_IDX == 6) + { + EmitSound(GetOwner(), 0, SOUND_ATTACK3, 10); + ATK_SOUND_IDX = 0; + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(GetGameTime() > NEXT_BREATH)) return; + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += FREQ_BREATH; + if (!(m_hAttackTarget != "unset")) return; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 15.0; + do_breath(); + } + + void do_breath() + { + LogDebug("do_breath BREATH_IDX FORCE_BREATH"); + int VFAR_BREATH = 0; + if (GetEntityRange(m_hAttackTarget) > MAX_BREATH_RANGE) + { + int VFAR_BREATH = 1; + } + if (FORCE_BREATH == "vfar") + { + int VFAR_BREATH = 1; + } + if ((VFAR_BREATH)) + { + BREATH_TARGET = m_hAttackTarget; + npcatk_suspend_movement(ANIM_SPIT); + npcatk_suspend_ai(5.0); + PlayAnim("critical", ANIM_SPIT); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + BREATH_IDX += 1; + if (FORCE_BREATH == "hover") + { + BREATH_IDX = 6; + } + if (BREATH_IDX < 5) + { + BREATH_FWD_OFS = 64; + string L_ATTACK_MODE = ATTACK_MODE; + if (FORCE_BREATH == "close") + { + string L_ATTACK_MODE = FORCE_BREATH; + } + if (FORCE_BREATH == "far") + { + string L_ATTACK_MODE = FORCE_BREATH; + } + if (L_ATTACK_MODE == "close") + { + PlayAnim("critical", ANIM_BREATH_CLOSE); + BREATH_TARGET = m_hAttackTarget; + BREATH_FORWARD = 100; + npcatk_suspend_ai(5.0); + npcatk_suspend_movement(ANIM_BREATH_CLOSE); + } + else + { + PlayAnim("critical", ANIM_BREATH_FAR); + BREATH_TARGET = m_hAttackTarget; + BREATH_FORWARD = 200; + npcatk_suspend_ai(5.0); + npcatk_suspend_movement(ANIM_BREATH_FAR); + } + } + if (BREATH_IDX == 6) + { + BREATH_IDX = 0; + npcatk_suspend_ai(25.0); + BREATH_FWD_OFS = 128; + if (ATTACK_MODE == "close") + { + PlayAnim("critical", "anim_close2hover"); + } + if (ATTACK_MODE == "far") + { + PlayAnim("critical", "anim_far2hover"); + } + string WIND_ORG = GetEntityOrigin(GetOwner()); + string L_HOVER_DURATION = HOVER_DURATION; + L_HOVER_DURATION += 1.0; + ClientEvent("new", "all", "nashalrath/wind_cl", WIND_ORG, 1.0, L_HOVER_DURATION); + CL_WIND_IDX = "game.script.last_sent_id"; + } + FORCE_BREATH = 0; + } + + void frame_launch() + { + EmitSound(GetOwner(), 0, SOUND_FLAP, 10); + } + + void frame_launch_done() + { + npcatk_suspend_movement("anim_hover_breath"); + PlayAnim("critical", "anim_hover_breath"); + EmitSound(GetOwner(), 0, SOUND_BREATH_START, 10); + ClientEvent("new", "all", "nashalrath/dragon_green_mini_cl", GetEntityIndex(GetOwner()), "breath"); + CL_BREATH_IDX = "game.script.last_sent_id"; + BREATH_CURRENT_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + BREATH_ON = 1; + BREATH_HOVER = 1; + breath_loop(); + HOVER_DURATION("breath_end"); + } + + void frame_breath_prep() + { + EmitSound(GetOwner(), 0, SOUND_BREATH, 10); + SetMoveDest(BREATH_TARGET); + } + + void frame_breath_far_start() + { + breath_start(); + } + + void frame_breath_close_start() + { + breath_start(); + } + + void frame_breath_close_end() + { + breath_end(); + } + + void frame_breath_far_end() + { + breath_end(); + } + + void breath_start() + { + EmitSound(GetOwner(), 1, SOUND_BREATH_START, 10); + ScheduleDelayedEvent(1.5, "breath_loop_sound"); + ClientEvent("new", "all", "nashalrath/dragon_green_mini_cl", GetEntityIndex(GetOwner()), "breath"); + CL_BREATH_IDX = "game.script.last_sent_id"; + BREATH_CURRENT_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + BREATH_ON = 1; + breath_loop(); + } + + void breath_loop_sound() + { + if (!(BREATH_ON)) return; + BREATH_LOOP_SOUND = 1; + EmitSound(GetOwner(), 4, SOUND_BREATH_LOOP, 10); + } + + void breath_loop() + { + if (!(BREATH_ON)) return; + ScheduleDelayedEvent(0.1, "breath_loop"); + if (!(BREATH_HOVER)) + { + if (GetGameTime() > NEXT_BREATH_ANG_ADJ) + { + NEXT_BREATH_ANG_ADJ = GetGameTime(); + NEXT_BREATH_ANG_ADJ += 1.0; + if ((IsEntityAlive(BREATH_TARGET))) + { + } + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ORG = GetEntityOrigin(BREATH_TARGET); + string ANG_TO_TARG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + BREATH_DEST_YAW = ANG_TO_TARG; + } + string MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + if (BREATH_CURRENT_YAW != BREATH_DEST_YAW) + { + if (BREATH_DEST_YAW < MY_YAW) + { + BREATH_ROT_DIR = -1; + } + else + { + BREATH_ROT_DIR = 1; + } + BREATH_CURRENT_YAW += BREATH_ROT_DIR; + if (/* TODO: $anglediff */ $anglediff(BREATH_DEST_YAW, BREATH_CURRENT_YAW) < 10) + { + BREATH_CURRENT_YAW = BREATH_DEST_YAW; + } + string L_BREATH_FACE_ORG = GetEntityOrigin(GetOwner()); + L_BREATH_FACE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_CURRENT_YAW, 0), Vector3(0, 500, 0)); + SetMoveDest(L_BREATH_FACE_ORG); + } + } + else + { + BREATH_CURRENT_YAW += 2; + if (BREATH_CURRENT_YAW > 359.99) + { + BREATH_CURRENT_YAW = 0; + } + string L_BREATH_FACE_ORG = GetEntityOrigin(GetOwner()); + L_BREATH_FACE_ORG += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_CURRENT_YAW, 0), Vector3(0, 500, 0)); + SetMoveDest(L_BREATH_FACE_ORG); + if (GetGameTime() > NEXT_FLAP_SOUND) + { + NEXT_FLAP_SOUND = GetGameTime(); + NEXT_FLAP_SOUND += 1.0; + EmitSound3D(SOUND_FLAP, 10, GetEntityProperty(GetOwner(), "attachpos")); + } + } + if (!(GetGameTime() > NEXT_BREATH_DMG)) return; + NEXT_BREATH_DMG = GetGameTime(); + NEXT_BREATH_DMG += Random(0.2, 0.5); + string L_BREATH_POS = GetEntityProperty(GetOwner(), "attachpos"); + L_BREATH_POS = "z"; + L_BREATH_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_CURRENT_YAW, 0), Vector3(0, BREATH_FWD_OFS, 0)); + XDoDamage(L_BREATH_POS, 128, DMG_BREATH, 0.1, GetOwner(), GetOwner(), "none", "blunt", "dmgevent:breath"); + if ((G_DEVELOPER_MODE)) + { + if (GetGameTime() > NEXT_BREATH_DEBUG_CIRC) + { + } + NEXT_BREATH_DEBUG_CIRC = GetGameTime(); + NEXT_BREATH_DEBUG_CIRC += 1; + debug_circle(L_BREATH_POS, 128); + } + } + + void breath_dodamage() + { + if (!(param1)) return; + if (!(GetEntityProperty(param2, "haseffect"))) + { + ApplyEffect(param2, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_BREATH); + } + ApplyEffect(param2, "effects/dot_acid", 5.0, GetEntityIndex(GetOwner()), DOT_BREATH, "none"); + } + + void breath_end() + { + BREATH_ON = 0; + ClientEvent("update", "all", CL_BREATH_IDX, "end_fx"); + EmitSound(GetOwner(), 4, SOUND_BREATH_LOOP, 0); + BREATH_LOOP_SOUND = 0; + if ((BREATH_HOVER)) + { + if (ATTACK_MODE == "close") + { + PlayAnim("critical", "anim_hover2close"); + } + else + { + PlayAnim("critical", "anim_hover2far"); + } + EmitSound(GetOwner(), 0, SOUND_FLAP, 10); + } + if ((BREATH_HOVER)) return; + npcatk_resume_movement(); + npcatk_resume_ai(); + } + + void frame_land() + { + BREATH_HOVER = 0; + npcatk_resume_ai(); + npcatk_resume_movement(); + ClientEvent("update", "all", CL_WIND_IDX, "end_fx"); + } + + void frame_vfar_breath_start() + { + EmitSound(GetOwner(), 0, SOUND_BREATH, 10); + SetMoveDest(BREATH_TARGET); + } + + void frame_vfar_breath_fire() + { + EmitSound(GetOwner(), 0, SOUND_SPIT, 10); + string SPIT_DEST = GetEntityProperty(GetOwner(), "attachpos"); + string SPIT_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + SPIT_DEST += /* TODO: $relpos */ $relpos(Vector3(0, SPIT_YAW, 0), Vector3(0, 512, 0)); + TossProjectile("proj_gdragon_spit", GetEntityProperty(GetOwner(), "attachpos"), SPIT_DEST, 400, 0, 0, "none"); + npcatk_resume_movement(); + npcatk_resume_ai(); + } + + void ext_proj_touch() + { + string L_DOT_BREATH = DOT_BREATH; + L_DOT_BREATH *= 0.5; + ApplyEffect(param1, "effects/dot_poison_blind", 5.0, GetEntityIndex(GetOwner()), L_DOT_BREATH); + } + + void ext_proj_landed() + { + PROJ_LAND_ORG = param1; + PROJ_NME_TARGS = FindEntitiesInSphere("enemy", 1024); + if (PROJ_NME_TARGS != "none") + { + CUR_SPIT_TARG_IDX = 0; + guided_slime_ball(); + ScheduleDelayedEvent(0.4, "guided_slime_ball"); + if (GetTokenCount(PROJ_NME_TARGS, ";") > 1) + { + ScheduleDelayedEvent(0.6, "guided_slime_ball"); + } + if (GetTokenCount(PROJ_NME_TARGS, ";") > 2) + { + ScheduleDelayedEvent(0.8, "guided_slime_ball"); + } + } + } + + void guided_slime_ball() + { + string CUR_TARG = GetToken(PROJ_NME_TARGS, CUR_SPIT_TARG_IDX, ";"); + CUR_SPIT_TARG_IDX += 1; + if (CUR_SPIT_TARG_IDX > GetTokenCount(PROJ_NME_TARGS, ";")) + { + CUR_SPIT_TARG_IDX = 0; + } + GLOB_TARG = CUR_TARG; + TossProjectile("proj_glob_guided", PROJ_LAND_ORG, CUR_TARG, 200, 0, 0, "none"); + } + + void ext_glob_landed() + { + BLOB_ORG = param1; + DMG_GLOB = DOT_BREATH; + DMG_GLOB *= 0.5; + XDoDamage(param1, 96, DMG_GLOB, 0.2, GetOwner(), GetOwner(), "none", "acid_effect", "dmgevent:glob"); + } + + void glob_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + string TARG_ORG = GetEntityOrigin(param2); + float BLOB_DIST = Distance(BLOB_ORG, TARG_ORG); + BLOB_DIST /= 64; + int BLOB_DIST_RATIO = 1; + BLOB_DIST_RATIO -= BLOB_DIST; + string BLIND_DURATION = /* TODO: $ratio */ $ratio(BLOB_DIST_RATIO, 2.0, 6.0); + ApplyEffect(param2, "effects/dot_poison_blind", BLIND_DURATION, GetEntityIndex(GetOwner()), DMG_GLOB); + } + + void ext_abreath_now() + { + LogDebug("ext_abreath_now PARAM1"); + NEXT_BREATH = 0; + if ((param1).findFirst(PARAM) == 0) + { + int DO_NADDA = 1; + } + else + { + FORCE_BREATH = param1; + } + } + +} + +} diff --git a/scripts/angelscript/nashalrath/dragon_green_mini_cl.as b/scripts/angelscript/nashalrath/dragon_green_mini_cl.as new file mode 100644 index 00000000..2db49e57 --- /dev/null +++ b/scripts/angelscript/nashalrath/dragon_green_mini_cl.as @@ -0,0 +1,100 @@ +#pragma context server + +namespace MS +{ + +class DragonGreenMiniCl : CGameScript +{ + string CLOUD_ANG; + string CLOUD_ORG; + string FX_ACTIVE; + string FX_OWNER; + + void client_activate() + { + FX_OWNER = param1; + if (param2 == "breath") + { + FX_ACTIVE = 1; + breath_loop(); + } + } + + void breath_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "breath_loop"); + CLOUD_ANG = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + LogDebug("breath_loop CLOUD_ANG"); + CLOUD_ORG = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud"); + ClientEffect("tempent", "sprite", "poison_cloud.spr", CLOUD_ORG, "setup_cloud"); + for (int i = 0; i < RandomInt(1, 3); i++) + { + spit_rocks(); + } + } + + void spit_rocks() + { + ClientEffect("tempent", "sprite", "rockgibs.mdl", CLOUD_ORG, "setup_rock"); + ClientEffect("tempent", "sprite", "rockgibs.mdl", CLOUD_ORG, "setup_rock"); + ClientEffect("tempent", "sprite", "rockgibs.mdl", CLOUD_ORG, "setup_rock"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_cloud() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 17); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + float RND_RL = Random(-10, 10); + float RND_UD = Random(-420, -280); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(20, CLOUD_ANG, 0), Vector3(RND_RL, 400, RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void setup_rock() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.75); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 3.0)); + float RND_RL = Random(-30, 30); + float RND_UD = Random(-420, -280); + float RND_PITCH = Random(20.0, 45.0); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(RND_PITCH, CLOUD_ANG, 0), Vector3(RND_RL, 1000, RND_UD)); + ClientEffect("tempent", "set_current_prop", "gravity", 1.0); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 50); + ClientEffect("tempent", "set_current_prop", "body", RandomInt(0, 2)); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "texture"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + float RND_PITCH = Random(0.0, 359.99); + float RND_YAW = Random(0.0, 359.99); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(RND_PITCH, RND_YAW, 0)); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/dragon_ice_storm_cl.as b/scripts/angelscript/nashalrath/dragon_ice_storm_cl.as new file mode 100644 index 00000000..166ed434 --- /dev/null +++ b/scripts/angelscript/nashalrath/dragon_ice_storm_cl.as @@ -0,0 +1,99 @@ +#pragma context server + +namespace MS +{ + +class DragonIceStormCl : CGameScript +{ + int FX_ACTIVE; + string FX_GROUND; + string FX_ORIGIN; + float MAX_SCALE; + float MIN_SCALE; + string SHARD_ORIGIN; + string SOUND_BREAK1; + string SOUND_BREAK2; + int STORM_RAD; + + DragonIceStormCl() + { + STORM_RAD = 768; + MIN_SCALE = 2.0; + MAX_SCALE = 3.0; + SOUND_BREAK1 = "debris/glass1.wav"; + SOUND_BREAK2 = "debris/glass2.wav"; + } + + void client_activate() + { + FX_ORIGIN = param1; + FX_ACTIVE = 1; + FX_GROUND = FX_ORIGIN; + FX_GROUND = "z"; + fx_loop(); + } + + void fx_loop() + { + if (!(FX_ACTIVE)) return; + Random(0_2, 0_5)("fx_loop"); + string L_POS = FX_ORIGIN; + float RND_ANG = Random(0, 359.99); + float RND_DIST = Random(0, STORM_RAD); + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, RND_DIST, 0)); + ClientEffect("tempent", "model", "glassgibs.mdl", L_POS, "setup_ice_spike"); + } + + void shard_land() + { + SHARD_ORIGIN = "game.tempent.origin"; + string SHARD_SIZE = "game.tempent.fuser1"; + int SHARD_VOLUME = 5; + int RND_SOUND = RandomInt(1, 2); + if (RND_SOUND == 1) + { + EmitSound3D(SOUND_BREAK1, SHARD_VOLUME, SHARD_ORIGIN); + } + else + { + if (RND_SOUND == 2) + { + EmitSound3D(SOUND_BREAK2, SHARD_VOLUME, SHARD_ORIGIN); + } + } + } + + void setup_ice_spike() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "body", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "cb_collide", "shard_land"); + ClientEffect("tempent", "set_current_prop", "frames", 1); + float RND_SCALE = Random(MIN_SCALE, MAX_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", RND_SCALE); + ClientEffect("tempent", "set_current_prop", "fuser1", RND_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", Random(1.0, 2.0)); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(90, 0, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(-10, -10, -200)); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(3.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/game_master.as b/scripts/angelscript/nashalrath/game_master.as new file mode 100644 index 00000000..0e0685da --- /dev/null +++ b/scripts/angelscript/nashalrath/game_master.as @@ -0,0 +1,115 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + string GM_LAST_PLAYER; + string GM_NASH_KEYS; + string GM_NASH_KEYS_DONE; + string GM_NEXT_NASH_MSG; + string GM_TEAR_TRACKER; + + void gm_nash_tear() + { + CallExternal(FindEntityByName("metal_cave"), "ext_refresh_cl_fx"); + if (GM_TEAR_TRACKER == "GM_TEAR_TRACKER") + { + GM_TEAR_TRACKER = ""; + } + if ((GM_TEAR_TRACKER).findFirst(param1) >= 0) + { + SendColoredMessage(param1, "Exiting reality tear..."); + string L_TOKEN_IDX = FindToken(GM_TEAR_TRACKER, param1, ";"); + RemoveToken(GM_TEAR_TRACKER, L_TOKEN_IDX, ";"); + int EXIT_SUB = 1; + } + else + { + SendColoredMessage(param1, "Entering reality tear..."); + } + if ((EXIT_SUB)) return; + if (GM_TEAR_TRACKER.length() > 0) GM_TEAR_TRACKER += ";"; + GM_TEAR_TRACKER += param1; + SendInfoMsg(param1, "TEAR IN REALITY A tear in reality from the Wars of Fate. Apparently, the Lost Loreldians here never mended this one."); + } + + void gm_nash_cryskey_found() + { + if (GM_NASH_KEYS == "GM_NASH_KEYS") + { + GM_NASH_KEYS = 0; + } + GM_NASH_KEYS += 1; + SendInfoMsg(param1, "ARTIFACT FOUND You've found an ancient Loreldian crystal key."); + } + + void gm_crys_key_activate() + { + LogDebug("gm_crys_key_activate PARAM2"); + if ((GM_NASH_KEYS_DONE)) return; + string L_KEY_IDX = param2; + if (L_KEY_IDX == 1) + { + if ((GM_NASH_KEY1_USED)) + { + } + int EXIT_SUB = 1; + } + if (L_KEY_IDX == 2) + { + if ((GM_NASH_KEY2_USED)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GM_NASH_KEYS == 0) + { + if (param1 == GM_LAST_PLAYER) + { + if (GetGameTime() < GM_NEXT_NASH_MSG) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + GM_NEXT_NASH_MSG = GetGameTime(); + GM_NEXT_NASH_MSG += 10.0; + GM_LAST_PLAYER = param1; + SendInfoMsg(param1, "CRYSTAL SOCKET KEYHOLE This appears to be a crystal shaped socket."); + } + else + { + if (GM_NASH_KEYS_USED == "GM_NASH_KEYS_USED") + { + GM_NASH_KEYS_USED = 0; + } + GM_NASH_KEYS_USED += 1; + GM_NASH_KEYS -= 1; + if (L_KEY_IDX == 1) + { + UseTrigger("rend_key1_on"); + GM_NASH_KEY1_USED = 1; + } + if (L_KEY_IDX == 2) + { + UseTrigger("rend_key2_on"); + GM_NASH_KEY2_USED = 1; + } + SendColoredMessage(param1, "You insert the Loreldian crystal into the socket."); + if (GM_NASH_KEYS_USED == 2) + { + } + UseTrigger("brk_lordoor"); + GM_NASH_KEYS_DONE = 1; + CallExternal(FindEntityByName("metal_cave"), "ext_clearout"); + } + } + +} + +} diff --git a/scripts/angelscript/nashalrath/kayrath.as b/scripts/angelscript/nashalrath/kayrath.as new file mode 100644 index 00000000..1c70cb61 --- /dev/null +++ b/scripts/angelscript/nashalrath/kayrath.as @@ -0,0 +1,529 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Kayrath : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FIRE_HOLD; + string ANIM_FIRE_PREP; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_PIERCE; + string ANIM_RAWR; + string ANIM_RUN; + string ANIM_SEARCH; + string ANIM_SMASH; + string ANIM_STOMP; + string ANIM_SWING; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACH_HORN; + int ATTACH_LEFT; + int ATTACH_RIGHT; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BONEIDX_STOMPFOOT; + float CUSTOM_FLINCH_CHANCE; + int CYCLES_ON; + int DMG_SMASH; + int DMG_STOMP; + int DMG_SWING; + int DOT_FIRE; + int DOT_POISON; + string FIRE_CLSCRIPT; + float FIRE_DURATION; + int FIRE_ON; + int FIRE_PREPPING; + string FIRE_ROT; + int FIRE_ROTATE; + string FIRE_TARGS; + int FIRE_TYPE; + float FREQ_FIRE; + float FREQ_KICK; + float FREQ_RANDRAWR; + float FREQ_SEARCH; + float FREQ_SMASH; + float FREQ_STOMP; + string HALF_HEALTH; + int IS_UNHOLY; + int KICK_RANGE; + int MOVERANGE_NORMAL; + string NEXT_KICK; + string NEXT_SCAN; + string NEXT_SEARCH; + string NEXT_SMASH; + string NEXT_STOMP; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int NPC_MUST_SEE_TARGET; + int SMASH_RANGE; + string SOUND_DEATH; + string SOUND_FIRE_END; + string SOUND_FIRE_LOOP; + string SOUND_FIRE_PREP; + string SOUND_KICK; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_RANDRAWR1; + string SOUND_RANDRAWR2; + string SOUND_RANDRAWR3; + string SOUND_RAWR; + string SOUND_RUNSTEP1; + string SOUND_RUNSTEP2; + string SOUND_SEARCH; + string SOUND_STOMP; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWING; + string SOUND_WALKSTEP1; + string SOUND_WALKSTEP2; + string SOUND_YAWN1; + string SOUND_YAWN2; + string SOUND_YAWN3; + string STUN_BURST_DMG; + string STUN_BURST_POS; + string STUN_BURST_RAD; + string STUN_BURST_REPEL; + string STUN_LIST; + int SWING_RANGE; + + Kayrath() + { + ANIM_WALK = "walk"; + ANIM_IDLE = "idle3"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack"; + ANIM_DEATH = "die"; + ANIM_FLINCH = "Flinchheavy"; + ANIM_SWING = "attack"; + ANIM_SMASH = "smash"; + ANIM_STOMP = "stomp"; + ANIM_KICK = "kickcar"; + ANIM_PIERCE = "bitehead"; + ANIM_FIRE_PREP = "shootflames1"; + ANIM_FIRE_HOLD = "shootflames2"; + ANIM_RAWR = "idle2"; + ANIM_SEARCH = "idle4"; + ATTACK_RANGE = 200; + ATTACK_MOVERANGE = 100; + ATTACK_HITRANGE = 250; + IS_UNHOLY = 1; + NPC_MUST_SEE_TARGET = 0; + MOVERANGE_NORMAL = 100; + SMASH_RANGE = 150; + SWING_RANGE = 200; + KICK_RANGE = 150; + ATTACH_HORN = 0; + ATTACH_RIGHT = 1; + ATTACH_LEFT = 2; + DMG_SWING = 200; + DMG_SMASH = 400; + DMG_STOMP = 400; + DOT_FIRE = 150; + DOT_POISON = 75; + FIRE_DURATION = 6.0; + CUSTOM_FLINCH_CHANCE = 0.25; + FREQ_STOMP = Random(20.0, 30.0); + FREQ_KICK = Random(20.0, 30.0); + FREQ_SMASH = Random(20.0, 30.0); + FREQ_FIRE = Random(30.0, 40.0); + FREQ_SEARCH = 20.0; + FREQ_RANDRAWR = Random(20.0, 40.0); + BONEIDX_STOMPFOOT = 6; + SOUND_YAWN1 = "garg/gar_breathe1.wav"; + SOUND_YAWN2 = "garg/gar_breathe2.wav"; + SOUND_YAWN3 = "garg/gar_breathe3.wav"; + SOUND_RAWR = "garg/gar_alert2.wav"; + SOUND_RUNSTEP1 = "garg/gar_step1.wav"; + SOUND_RUNSTEP2 = "garg/gar_step2.wav"; + SOUND_WALKSTEP1 = "player/pl_grate1.wav"; + SOUND_WALKSTEP2 = "player/pl_grate2.wav"; + SOUND_SWING = "weapons/swinghuge.wav"; + SOUND_KICK = "weapons/swinghuge.wav"; + SOUND_STOMP = "magic/boom.wav"; + SOUND_DEATH = "garg/gar_die1.wav"; + SOUND_FIRE_PREP = "garg/gar_flameon1.wav"; + SOUND_FIRE_LOOP = "garg/gar_flamerun1.wav"; + SOUND_FIRE_END = "garg/gar_flameoff1.wav"; + SOUND_RANDRAWR1 = "garg/gar_attack1.wav"; + SOUND_RANDRAWR2 = "garg/gar_attack2.wav"; + SOUND_RANDRAWR3 = "garg/gar_attack3.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "debris/bustflesh2.wav"; + SOUND_PAIN1 = "garg/gar_pain1.wav"; + SOUND_PAIN2 = "garg/gar_pain2.wav"; + SOUND_PAIN3 = "garg/gar_pain3.wav"; + SOUND_SEARCH = "garg/gar_alert1.wav"; + FIRE_CLSCRIPT = "nashalrath/kayrath_cl"; + if ((StringToLower(GetMapName())).findFirst("nashalrath") >= 0) + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 8000; + } + else + { + NPC_GIVE_EXP = 1000; + } + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_RANDRAWR); + if (m_hAttackTarget != "unset") + { + } + if (!(FIRE_PREPPING)) + { + } + if (!(FIRE_ON)) + { + } + // PlayRandomSound from: SOUND_RANDRAWR1, SOUND_RANDRAWR2, SOUND_RANDRAWR3 + array sounds = {SOUND_RANDRAWR1, SOUND_RANDRAWR2, SOUND_RANDRAWR3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_precache() + { + Precache(SOUND_STOMP); + Precache("poison_cloud.spr"); + Precache("explode1.spr"); + Precache("3dmflaora.spr"); + Precache(FIRE_CLSCRIPT); + } + + void OnSpawn() override + { + SetName("Kay'rath"); + SetModel("monsters/kayrath.mdl"); + SetWidth(75); + SetHeight(200); + SetHealth(15000); + SetDamageResistance("all", 0.5); + SetDamageResistance("cold", 0.5); + SetDamageResistance("holy", 1.25); + SetDamageResistance("stun", 0); + SetRace("demon"); + SetRoam(false); + SetHearingSensitivity(4); + if (!(true)) return; + HALF_HEALTH = GetEntityMaxHealth(GetOwner()); + HALF_HEALTH *= 0.5; + npcatk_suspend_ai(); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 15.0; + FREQ_FIRE("do_fire"); + CallExternal(GAME_MASTER, "gm_fade_in", GetEntityIndex(GetOwner()), 5); + } + + void fade_in_done() + { + npcatk_resume_ai(); + SetRoam(true); + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + + void cycle_up() + { + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + PlayAnim("critical", ANIM_RAWR); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 15.0; + EmitSound(GetOwner(), 0, SOUND_RAWR, 10); + float GAME_TIME = GetGameTime(); + NEXT_KICK = GAME_TIME; + NEXT_KICK += FREQ_KICK; + NEXT_SMASH = GAME_TIME; + NEXT_SMASH += FREQ_SMASH; + NEXT_STOMP = GAME_TIME; + NEXT_STOMP += FREQ_STOMP; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (param1 > 250) + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + int EXIT_SUB = 1; + if (!(FIRE_PREPPING)) + { + } + if (!(FIRE_ON)) + { + } + if (RandomInt(1, 100) <= CUSTOM_FLINCH_CHANCE) + { + } + PlayAnim("critical", ANIM_FLINCH); + } + if ((EXIT_SUB)) return; + if (GetEntityHealth(GetOwner()) > HALF_HEALTH) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void frame_swing() + { + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + string LOC_DMG = GetEntityProperty(GetOwner(), "attachpos"); + LOC_DMG += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 100, -32)); + XDoDamage(LOC_DMG, 200, DMG_SWING, 0, GetOwner(), GetOwner(), "none", "blunt"); + float GAME_TIME = GetGameTime(); + if (GAME_TIME > NEXT_STOMP) + { + ANIM_ATTACK = ANIM_STOMP; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_SMASH) + { + ANIM_ATTACK = ANIM_SMASH; + ATTACK_RANGE = SMASH_RANGE; + string NEW_MOVE_RANGE = SMASH_RANGE; + NEW_MOVE_RANGE /= 2; + ATTACK_MOVERANGE = NEW_MOVE_RANGE; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_KICK) + { + ANIM_ATTACK = ANIM_KICK; + ATTACK_RANGE = KICK_RANGE; + string NEW_MOVE_RANGE = KICK_RANGE; + NEW_MOVE_RANGE /= 2; + ATTACK_MOVERANGE = NEW_MOVE_RANGE; + } + } + + void frame_stomp() + { + ANIM_ATTACK = ANIM_SWING; + string BURST_POS = GetEntityProperty(GetOwner(), "svbonepos"); + string GRND_BURST = /* TODO: $get_ground_height */ $get_ground_height(BURST_POS); + BURST_POS = "z"; + stunburst_go(BURST_POS, 256, 1, DMG_STOMP); + NEXT_STOMP = GetGameTime(); + NEXT_STOMP += FREQ_STOMP; + } + + void frame_smash() + { + ANIM_ATTACK = ANIM_SWING; + ATTACK_RANGE = SWING_RANGE; + ATTACK_MOVERANGE = MOVERANGE_NORMAL; + string BURST_POS = GetEntityProperty(GetOwner(), "attachpos"); + string GRND_BURST = /* TODO: $get_ground_height */ $get_ground_height(BURST_POS); + BURST_POS = "z"; + stunburst_go(BURST_POS, 128, 0, DMG_SMASH); + NEXT_SMASH = GetGameTime(); + NEXT_SMASH += FREQ_SMASH; + } + + void frame_kick() + { + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + ANIM_ATTACK = ANIM_SWING; + ATTACK_RANGE = SWING_RANGE; + ATTACK_MOVERANGE = MOVERANGE_NORMAL; + DoDamage(m_hAttackTarget, KICK_RANGE, DMG_KICK, 1.0, "blunt"); + NEXT_KICK = GetGameTime(); + NEXT_KICK += FREQ_KICK; + if (!(GetEntityRange(m_hAttackTarget) < KICK_RANGE)) return; + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, 1000, 110)); + } + + void frame_fire_prep_done() + { + if ((FIRE_ON)) return; + fire_start(); + } + + void frame_walkstep1() + { + EmitSound(GetOwner(), 0, SOUND_WALKSTEP1, 10); + } + + void frame_walkstep2() + { + EmitSound(GetOwner(), 0, SOUND_WALKSTEP2, 10); + } + + void frame_runstep1() + { + EmitSound(GetOwner(), 0, SOUND_RUNSTEP1, 10); + } + + void frame_runstep2() + { + EmitSound(GetOwner(), 0, SOUND_RUNSTEP2, 10); + } + + void stunburst_go() + { + STUN_BURST_POS = param1; + STUN_BURST_RAD = param2; + STUN_BURST_REPEL = param3; + STUN_BURST_DMG = param4; + LogDebug("stunburst_go pos: STUN_BURST_POS rad: STUN_BURST_RAD repel: STUN_BURST_REPEL dmg: STUN_BURST_DMG"); + DoDamage(STUN_BURST_POS, STUN_BURST_RAD, STUN_BURST_DMG, 1.0, 0); + ClientEvent("new", "all", "effects/sfx_stun_burst", STUN_BURST_POS, STUN_BURST_RAD, 0, Vector3(0, 0, 0)); + ScheduleDelayedEvent(0.25, "stun_targets"); + } + + void stun_targets() + { + STUN_LIST = FindEntitiesInSphere("enemy", STUN_BURST_RAD); + LogDebug("stun_targets STUN_LIST"); + if (!(STUN_LIST != "none")) return; + if (!(GetTokenCount(STUN_LIST, ";") > 0)) return; + for (int i = 0; i < GetTokenCount(STUN_LIST, ";"); i++) + { + stunburst_affect_targets(); + } + } + + void stunburst_affect_targets() + { + string CHECK_ENT = GetToken(STUN_LIST, i, ";"); + if (!(IsOnGround(CHECK_ENT))) return; + ApplyEffect(CHECK_ENT, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + if (!(STUN_BURST_REPEL)) return; + string TARGET_ORG = GetEntityOrigin(CHECK_ENT); + string TARG_ANG = /* TODO: $angles */ $angles(STUN_BURST_POS, TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CHECK_ENT, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + + void do_fire() + { + SetRepeatDelay(FREQ_FIRE); + if ((SUSPEND_AI)) return; + if (!(m_hAttackTarget != "unset")) return; + FIRE_PREPPING = 1; + PlayAnim("critical", ANIM_FIRE_PREP); + EmitSound(GetOwner(), 0, SOUND_FIRE_PREP, 10); + npcatk_suspend_ai(FIRE_DURATION); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + SetMoveAnim(ANIM_FIRE_HOLD); + SetIdleAnim(ANIM_FIRE_HOLD); + SetRoam(false); + ScheduleDelayedEvent(1.0, "fire_start"); + } + + void fire_start() + { + if ((FIRE_ON)) return; + // svplaysound: svplaysound 1 10 SOUND_FIRE_LOOP + EmitSound(1, 10, SOUND_FIRE_LOOP); + FIRE_ON = 1; + FIRE_PREPPING = 0; + FIRE_DURATION("fire_end"); + FIRE_TYPE = RandomInt(1, 2); + FIRE_ROTATE = RandomInt(0, 1); + if ((FIRE_ROTATE)) + { + string START_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + START_YAW -= 45; + if (START_YAW < 0) + { + START_YAW += 359; + } + SetAngles("face"); + FIRE_ROT = START_YAW; + } + ClientEvent("new", "all", FIRE_CLSCRIPT, GetEntityIndex(GetOwner()), FIRE_TYPE, FIRE_DURATION); + fire_loop(); + } + + void fire_loop() + { + if (!(FIRE_ON)) return; + ScheduleDelayedEvent(0.1, "fire_loop"); + if ((FIRE_ROTATE)) + { + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, FIRE_ROT, 0), Vector3(0, 500, 0)); + SetMoveDest(FACE_POS); + FIRE_ROT += 1; + if (FIRE_ROT > 359) + { + FIRE_ROT -= 359; + } + } + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 0.5; + FIRE_TARGS = /* TODO: $get_tbox */ $get_tbox("enemy", 512); + if (!(FIRE_TARGS != "none")) return; + GetTokenCount(FIRE_TARGS, ";")("fire_affect_targets"); + } + + void fire_affect_targets() + { + string CUR_TARG = GetToken(FIRE_TARGS, i, ";"); + if (!(IsEntityAlive(CUR_TARG))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string IN_CONE = WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")); + LogDebug("fire_affect_targets GetEntityName(CUR_TARG) incone IN_CONE rng GetEntityRange(CUR_TARG)"); + if (!(IN_CONE)) return; + if (!(GetEntityRange(CUR_TARG) < 512)) return; + if (FIRE_TYPE == 1) + { + ApplyEffect(CUR_TARG, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + if (FIRE_TYPE == 2) + { + ApplyEffect(CUR_TARG, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + } + + void fire_end() + { + // svplaysound: svplaysound 1 0 SOUND_FIRE_LOOP + EmitSound(1, 0, SOUND_FIRE_LOOP); + EmitSound(GetOwner(), 2, SOUND_FIRE_END, 10); + FIRE_ON = 0; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + SetRoam(true); + } + + void npcatk_lost_sight() + { + if (!(GetGameTime() > NEXT_SEARCH)) return; + if ((FLAME_ON)) return; + if ((FLAME_PREPPING)) return; + EmitSound(GetOwner(), 0, SOUND_SEARCH, 10); + PlayAnim("critical", ANIM_SEARCH); + NEXT_SEARCH = GetGameTime(); + NEXT_SEARCH += FREQ_SEARCH; + } + +} + +} diff --git a/scripts/angelscript/nashalrath/kayrath_cl.as b/scripts/angelscript/nashalrath/kayrath_cl.as new file mode 100644 index 00000000..d49baf34 --- /dev/null +++ b/scripts/angelscript/nashalrath/kayrath_cl.as @@ -0,0 +1,163 @@ +#pragma context client + +namespace MS +{ + +class KayrathCl : CGameScript +{ + string ATTACH_LHAND; + string ATTACH_RHAND; + string FIRE_SPRITE; + int FIRE_SPRITE_NFRAMES; + int FX_ACTIVE; + string FX_DURATION; + string MY_OWNER; + string OWNER_ANGLES; + string POISON_SPRITE; + int POISON_SPRITE_NFRAMES; + string SOURCE_SPRITE; + string SPRAY_TYPE; + + KayrathCl() + { + POISON_SPRITE = "poison_cloud.spr"; + FIRE_SPRITE = "explode1.spr"; + FIRE_SPRITE_NFRAMES = 9; + POISON_SPRITE_NFRAMES = 17; + SOURCE_SPRITE = "3dmflaora.spr"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + if ((FX_ACIVE)) + { + } + ATTACH_RHAND = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment1"); + ATTACH_LHAND = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment2"); + } + + void client_activate() + { + MY_OWNER = param1; + SPRAY_TYPE = param2; + FX_DURATION = param3; + FX_ACTIVE = 1; + spray_loop(); + FX_DURATION("end_fx"); + LogDebug("**** Owner MY_OWNER type SPRAY_TYPE durat FX_DURATION"); + SetCallback("render", "enable"); + ATTACH_RHAND = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment1"); + ATTACH_LHAND = /* TODO: $getcl */ $getcl(MY_OWNER, "attachment2"); + if (SPRAY_TYPE == 1) + { + ClientEffect("tempent", "sprite", SOURCE_SPRITE, ATTACH_RHAND, "setup_fire_source", "update_source_rhand"); + ClientEffect("tempent", "sprite", SOURCE_SPRITE, ATTACH_LHAND, "setup_fire_source", "update_source_lhand"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), 512, Vector3(255, 128, 64), FX_DURATION); + } + else + { + ClientEffect("tempent", "sprite", SOURCE_SPRITE, ATTACH_RHAND, "setup_poison_source", "update_source_rhand"); + ClientEffect("tempent", "sprite", SOURCE_SPRITE, ATTACH_LHAND, "setup_poison_source", "update_source_lhand"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), 512, Vector3(0, 255, 0), FX_DURATION); + } + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + } + + void spray_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.1, "spray_loop"); + OWNER_ANGLES = /* TODO: $getcl */ $getcl(MY_OWNER, "angles"); + if (SPRAY_TYPE == 1) + { + ClientEffect("tempent", "sprite", FIRE_SPRITE, ATTACH_RHAND, "setup_fire_sprite", "update_spray_sprite"); + ClientEffect("tempent", "sprite", FIRE_SPRITE, ATTACH_LHAND, "setup_fire_sprite", "update_spray_sprite"); + } + else + { + ClientEffect("tempent", "sprite", POISON_SPRITE, ATTACH_RHAND, "setup_poison_sprite", "update_spray_sprite"); + ClientEffect("tempent", "sprite", POISON_SPRITE, ATTACH_LHAND, "setup_poison_sprite", "update_spray_sprite"); + } + } + + void setup_poison_source() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", 5); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void setup_fire_source() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + } + + void update_source_rhand() + { + ClientEffect("tempent", "set_current_prop", "origin", ATTACH_RHAND); + ClientEffect("tempent", "set_current_prop", "origin", ATTACH_LHAND); + } + + void setup_poison_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", POISON_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(OWNER_ANGLES, Vector3(0, 300, 0))); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.25); + } + + void setup_fire_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", FIRE_SPRITE_NFRAMES); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(OWNER_ANGLES, Vector3(0, 300, 0))); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.3); + } + + void update_spray_sprite() + { + string CUR_SCALE = "game.tempent.fuser1"; + CUR_SCALE += 0.02; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/lift_check_left.as b/scripts/angelscript/nashalrath/lift_check_left.as new file mode 100644 index 00000000..f1abb1f2 --- /dev/null +++ b/scripts/angelscript/nashalrath/lift_check_left.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "nashalrath/base_pillar_check.as" + +namespace MS +{ + +class LiftCheckLeft : CGameScript +{ + LiftCheckLeft() + { + SetName("lift_pillar_left"); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/lift_check_right.as b/scripts/angelscript/nashalrath/lift_check_right.as new file mode 100644 index 00000000..a5a7b352 --- /dev/null +++ b/scripts/angelscript/nashalrath/lift_check_right.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "nashalrath/base_pillar_check.as" + +namespace MS +{ + +class LiftCheckRight : CGameScript +{ + LiftCheckRight() + { + SetName("lift_pillar_right"); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/lightning_strike_cl.as b/scripts/angelscript/nashalrath/lightning_strike_cl.as new file mode 100644 index 00000000..78527b4b --- /dev/null +++ b/scripts/angelscript/nashalrath/lightning_strike_cl.as @@ -0,0 +1,102 @@ +#pragma context server + +namespace MS +{ + +class LightningStrikeCl : CGameScript +{ + int FX_ACTIVE; + string FX_GROUND; + string FX_ORIGIN; + string FX_STRIKE_TIME; + int GLOW_SIZE; + string LIGHT_ID; + + void client_activate() + { + FX_ORIGIN = param1; + FX_STRIKE_TIME = param2; + FX_GROUND = FX_ORIGIN; + FX_GROUND = "z"; + FX_STRIKE_TIME("do_strike"); + if (!(FX_STRIKE_TIME > 0)) return; + GLOW_SIZE = 1; + ClientEffect("light", "new", FX_GROUND, 1, Vector3(255, 255, 0), 5.0); + LIGHT_ID = "game.script.last_light_id"; + SetCallback("render", "enable"); + EmitSound3D("magic/bolt_start.wav", 10, FX_GROUND); + FX_ACTIVE = 1; + ClientEffect("tempent", "sprite", "3dmflaora.spr", FX_GROUND, "setup_glow_sprite", "update_glow_sprite"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + if (GLOW_SIZE < 255) + { + GLOW_SIZE += 1; + } + ClientEffect("light", LIGHT_ID, FX_GROUND, GLOW_SIZE, Vector3(255, 255, 0), 1.0); + } + + void do_strike() + { + ClientEffect("beam_points", FX_ORIGIN, FX_GROUND, "lgtning.spr", 2.0, 30, 1, 0.8, 0.5, 30, Vector3(255, 255, 0)); + SetSoundVolume(5); + EmitSound(GetOwner(), 5, "weather/Storm_exclamation.wav", 10); + ScheduleDelayedEvent(3.0, "remove_fx"); + if (!(FX_STRIKE_TIME > 0)) return; + EmitSound3D("weather/lightning.wav", 10, FX_GROUND); + ClientEffect("tempent", "sprite", "3dmflaora.spr", FX_GROUND, "setup_spit_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", FX_GROUND, "setup_spit_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", FX_GROUND, "setup_spit_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", FX_GROUND, "setup_spit_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", FX_GROUND, "setup_spit_sprite"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_glow_sprite() + { + if (!(FX_ACTIVE)) return; + string CUR_SCALE = "game.tempent.fuser1"; + if (!(CUR_SCALE < 6)) return; + CUR_SCALE += 0.01; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + + void setup_glow_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 128); + } + + void setup_spit_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + float RND_ANG = Random(0, 359.99); + float RND_VEL = Random(100, 200); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, RND_VEL, RND_VEL))); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/map_startup.as b/scripts/angelscript/nashalrath/map_startup.as new file mode 100644 index 00000000..a4c588cf --- /dev/null +++ b/scripts/angelscript/nashalrath/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "nashalrath"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Temple of Nashalrath"); + SetGlobalVar("G_MAP_DESC", "An ancient labrynth once belonging to The Lost."); + SetGlobalVar("G_MAP_DIFF", "Levels 30-40 / 500-800hp"); + SetGlobalVar("G_WARN_HP", 500); + } + +} + +} diff --git a/scripts/angelscript/nashalrath/wind_cl.as b/scripts/angelscript/nashalrath/wind_cl.as new file mode 100644 index 00000000..b7552483 --- /dev/null +++ b/scripts/angelscript/nashalrath/wind_cl.as @@ -0,0 +1,68 @@ +#pragma context server + +namespace MS +{ + +class WindCl : CGameScript +{ + int FX_ACTIVE; + string FX_DURATION; + string FX_ORIGIN; + string FX_SCALE; + + void OnRepeatTimer() + { + SetRepeatDelay(9.0); + if ((FX_ACTIVE)) + { + } + EmitSound3D("magic/vent1.wav", 10, FX_ORIGIN); + } + + void client_activate() + { + LogDebug("****** wind client_activate"); + FX_ORIGIN = param1; + FX_SCALE = param2; + FX_DURATION = param3; + FX_ACTIVE = 1; + EmitSound3D("magic/vent1.wav", 10, FX_ORIGIN); + ClientEffect("tempent", "model", "monsters/monster_extras.mdl", FX_ORIGIN, "setup_wind", "update_wind"); + FX_DURATION("end_fx"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_wind() + { + if ((FX_ACTIVE)) return; + ClientEffect("tempent", "set_current_prop", "origin", Vector3(9999, 9999, 9999)); + } + + void setup_wind() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "scale", FX_SCALE); + ClientEffect("tempent", "set_current_prop", "body", 0); + ClientEffect("tempent", "set_current_prop", "sequence", 2); + ClientEffect("tempent", "set_current_prop", "frames", 255); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + +} + +} diff --git a/scripts/angelscript/nightmare/bonus_item.as b/scripts/angelscript/nightmare/bonus_item.as new file mode 100644 index 00000000..a3020a63 --- /dev/null +++ b/scripts/angelscript/nightmare/bonus_item.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class BonusItem : CGameScript +{ +} + +} diff --git a/scripts/angelscript/nightmare/edanateller.as b/scripts/angelscript/nightmare/edanateller.as new file mode 100644 index 00000000..9c018e94 --- /dev/null +++ b/scripts/angelscript/nightmare/edanateller.as @@ -0,0 +1,288 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "NPCs/base_storage.as" + +namespace MS +{ + +class Edanateller : CGameScript +{ + string ANIM_CHAT; + string ANIM_NO; + string ANIM_STORE; + float CHAT_DELAY_STEP1; + float CHAT_DELAY_STEP2; + float CHAT_DELAY_STEP3; + float CHAT_DELAY_STEP4; + string CHAT_SOUND1; + string CHAT_SOUND2; + string CHAT_SOUND3; + string CHAT_SOUND4; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + int CHAT_STEPS; + string CONV_ANIMS; + int DID_HELLO; + string GALA_CHEST_POS; + string NEXT_TALK; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int PLACEHOLDER; + int PLAYING_DEAD; + string SAYTEXT_BANKOPEN; + string SAYTEXT_BANK_NOTE; + string SAYTEXT_GIVETICKET; + string SAYTEXT_HAND_WARN; + string SAYTEXT_ITEMS_HANDS; + string SAYTEXT_NOITEM; + string SAYTEXT_NOSTORABLES; + string SAYTEXT_NOTICKET; + string SAYTEXT_REDEEMTICKET; + string SAYTEXT_REFUND; + string SAYTEXT_SELECT_CAT; + string SAYTEXT_SELECT_ITEM; + string SAYTEXT_SELECT_TICKET; + string SAYTEXT_wondrous_NOFUNDS; + string SAYTEXT_wondrous_PURCHASED; + + Edanateller() + { + PLACEHOLDER = 0; + GALA_CHEST_POS = /* TODO: $relpos */ $relpos(55, 8, 0); + NO_HAIL = 1; + NO_JOB = 1; + NO_RUMOR = 0; + CONV_ANIMS = "idle1;flinch;laflinch;raflinch;llflinch;rlflinch"; + SAYTEXT_wondrous_NOFUNDS = "Need, more, flesh. I mean gold... Need more golds..."; + SAYTEXT_wondrous_PURCHASED = "One scroll... Use... Wisely."; + SAYTEXT_BANKOPEN = "Behold... Your shinies."; + SAYTEXT_REFUND = "Fee... Returned."; + SAYTEXT_SELECT_ITEM = "Choose... Item."; + SAYTEXT_SELECT_CAT = SAYTEXT_SELECT_ITEM; + SAYTEXT_NOITEM = "Item, not, received."; + SAYTEXT_NOTICKET = "Ticket, needs ticket."; + SAYTEXT_NOSTORABLES = "Cannot, store."; + SAYTEXT_GIVETICKET = "Ticket, I gives ticket to fleshling."; + SAYTEXT_SELECT_TICKET = "Please choose ticket, fleshling."; + SAYTEXT_HAND_WARN = "Tickets, in delicious meat hands, please."; + SAYTEXT_REDEEMTICKET = "Fleshling... Transaction, complete."; + SAYTEXT_ITEMS_HANDS = "Items to store, in delicious meat hands, please."; + SAYTEXT_BANK_NOTE = "Give note, in exchange, golds."; + ANIM_CHAT = "idle1"; + ANIM_NO = "llflinch"; + ANIM_STORE = "raflinch"; + } + + void OnSpawn() override + { + SetName("Deadric of Galat s Storage"); + SetHealth(1); + SetInvincible(true); + SetRace("beloved"); + SetWidth(16); + SetHeight(72); + SetModel("monsters/skeleton.mdl"); + SetModelBody(0, 8); + SetRoam(false); + PLAYING_DEAD = 1; + SetSayTextRange(1024); + CatchSpeech("heard_hi", "hail"); + CatchSpeech("say_rumor", "job"); + CatchSpeech("heard_store", "shop"); + } + + void heard_hi() + { + DID_HELLO = 1; + NEXT_TALK = GetGameTime(); + NEXT_TALK += 6.0; + PlayAnim("critical", "idle1"); + SayText("Welcome , fleshlings , to Galat s Weapon and Armor Storage, Edeadna branch..."); + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_hail1.wav", 10); + ScheduleDelayedEvent(6.5, "heard_hi2"); + } + + void heard_hi2() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_hail2.wav", 10); + SayText("Galat Storage , we re eveeerryyywheeeereee..."); + } + + void say_rumor() + { + PlayAnim("critical", "rlflinch"); + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_rumors.wav", 10); + SayText("The rumor mill here... Is kinda dead."); + } + + void heard_store() + { + OpenMenu(GetEntityIndex("ent_lastheard")); + } + + void game_menu_getoptions() + { + if (!(DID_HELLO)) + { + DID_HELLO = 1; + SayText("Welcome , fleshlings , to Galat s Weapon and Armor Storage, Edeadna branch..."); + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_hail1.wav", 10); + NEXT_TALK = GetGameTime(); + NEXT_TALK += 6.0; + } + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "heard_hi"; + } + + void say_storage_chest() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_storage_chest"); + } + if ((BUSY_CHATTING)) return; + convo_anim(); + CHAT_STEPS = 4; + CHAT_STEP1 = "Galat chest..."; + CHAT_DELAY_STEP1 = 1.5; + CHAT_SOUND1 = "voices/nightmare_edana/teller_gchest1.wav"; + CHAT_STEP2 = "Put items to store in your, delicious, meat hands..."; + CHAT_DELAY_STEP2 = 4.25; + CHAT_SOUND2 = "voices/nightmare_edana/teller_gchest2.wav"; + CHAT_STEP3 = "Then use chest..."; + CHAT_DELAY_STEP3 = 2.0; + CHAT_SOUND3 = "voices/nightmare_edana/teller_gchest3.wav"; + CHAT_STEP4 = "Stores stuff..."; + CHAT_DELAY_STEP4 = 2.0; + CHAT_SOUND4 = "voices/nightmare_edana/teller_gchest4.wav"; + chat_loop(); + } + + void say_wondrous() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "say_wondrous"); + } + if ((BUSY_CHATTING)) return; + convo_anim(); + CHAT_STEPS = 4; + CHAT_STEP1 = "Wondrous Scroll of Galat's Storage..."; + CHAT_DELAY_STEP1 = 3.0; + CHAT_SOUND1 = "voices/nightmare_edana/teller_wscroll1.wav"; + CHAT_STEP2 = "Summons chests with demonic magicks."; + CHAT_DELAY_STEP2 = 3.5; + CHAT_SOUND2 = "voices/nightmare_edana/teller_wscroll2.wav"; + CHAT_STEP3 = "Use anywhere."; + CHAT_DELAY_STEP3 = 1.5; + CHAT_SOUND3 = "voices/nightmare_edana/teller_wscroll3.wav"; + CHAT_STEP4 = "Exchange is "; + CHAT_STEP4 += GALA_SCROLL_PRICE; + CHAT_STEP4 += " golds. ...or one soul."; + CHAT_DELAY_STEP4 = 4.0; + if (RandomInt(1, 2) == 1) + { + CHAT_SOUND4 = "voices/nightmare_edana/teller_wscroll4a.wav"; + } + else + { + CHAT_SOUND4 = "voices/nightmare_edana/teller_wscroll4b.wav"; + } + chat_loop(); + } + + void say_wondrous_cant_afford() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_wscroll_nofunds.wav", 10); + } + + void buy_scroll() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_wscroll_purchased.wav", 10); + } + + void open_betabank() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_return_fee1.wav", 10); + } + + void cancel_trade() + { + if (RandomInt(1, 2) == 1) + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_return_fee1.wav", 10); + } + else + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_return_fee2.wav", 10); + } + } + + void say_select_item() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_choose_item.wav", 10); + } + + void activate_storage() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_choose_item.wav", 10); + } + + void bteller_error_no_item() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_store_error.wav", 10); + } + + void bteller_error_no_ticket() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_ticket_error.wav", 10); + } + + void bteller_store_error() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_store_error.wav", 10); + } + + void bteller_give_ticket() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_ticket_purchased.wav", 10); + } + + void bteller_select_ticket() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_choose_item.wav", 10); + } + + void bteller_ticket_warn() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_ticket_detect.wav", 10); + } + + void bteller_ticket_redeemed() + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_store_success.wav", 10); + } + + void bteller_hand_warn() + { + if (!(DID_HELLO)) return; + if (!(GetGameTime() > NEXT_TALK)) return; + if (RandomInt(1, 2) == 1) + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_items_in_hands1.wav", 10); + } + else + { + EmitSound(GetOwner(), 0, "voices/nightmare_edana/teller_items_in_hands2.wav", 10); + } + } + +} + +} diff --git a/scripts/angelscript/nightmare/monsters/deadboar.as b/scripts/angelscript/nightmare/monsters/deadboar.as new file mode 100644 index 00000000..bdf8a602 --- /dev/null +++ b/scripts/angelscript/nightmare/monsters/deadboar.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "monsters/boar_base_remake.as" + +namespace MS +{ + +class Deadboar : CGameScript +{ + float ATTACK_HITCHANCE; + string BOAR_MODEL; + int BOAR_SIZE; + int DMG_CHARGE; + float DMG_GORE_FORWARD; + float DMG_GORE_LEFT; + float DMG_GORE_RIGHT; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int NPC_GIVE_EXP; + + Deadboar() + { + BOAR_SIZE = 1; + BOAR_MODEL = "nightmare/monsters/skeleboar.mdl"; + NPC_GIVE_EXP = 35; + DMG_GORE_FORWARD = Random(4.0, 6.0); + DMG_GORE_LEFT = Random(5.0, 7.0); + DMG_GORE_RIGHT = Random(5.0, 7.0); + DMG_CHARGE = RandomInt(5, 8); + ATTACK_HITCHANCE = 0.7; + FLEE_CHANCE = 0.1; + } + + void boar_spawn() + { + SetName("Skeleton Boar"); + SetHealth(100); + SetHearingSensitivity(2); + SetRoam(true); + SetRace("undead"); + SetWidth(24); + SetHeight(24); + SetDamageResistance("holy", 1.5); + SetDamageResistance("poison", 0.01); + SetDamageResistance("fire", 1.2); + SetDamageResistance("cold", 0.25); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("blunt", 1.25); + SetDamageResistance("slash", 0.5); + } + + void OnPostSpawn() override + { + DROP_ITEM1 = "skin_boar_heavy"; + DROP_ITEM1_CHANCE = 0.0; + } + +} + +} diff --git a/scripts/angelscript/nightmare/monsters/ghostrat.as b/scripts/angelscript/nightmare/monsters/ghostrat.as new file mode 100644 index 00000000..2dc80c24 --- /dev/null +++ b/scripts/angelscript/nightmare/monsters/ghostrat.as @@ -0,0 +1,127 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Ghostrat : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_RANGE; + int CAN_FLEE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int FLEE_HEALTH; + int HUNT_AGRO; + int NO_EXP_MULTI; + int NPC_GIVE_EXP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Ghostrat() + { + NO_EXP_MULTI = 1; + HUNT_AGRO = 0; + ANIM_DEATH = "die"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "attack"; + ATTACK_DAMAGE = 4.0; + ATTACK_RANGE = 68; + ATTACK_HITCHANCE = 0.6; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "nightmare/monsters/ghostrat/squeak1.wav"; + SOUND_ATTACK1 = "nightmare/monsters/ghostrat/squeak2.wav"; + SOUND_ATTACK2 = "monsters/orc/attack2.wav"; + SOUND_ATTACK3 = "monsters/orc/attack3.wav"; + SOUND_IDLE1 = "nightmare/monsters/ghostrat/squeak2.wav"; + SOUND_DEATH = "nightmare/monsters/ghostrat/squeak3.wav"; + CAN_FLEE = 1; + FLEE_HEALTH = 2; + FLEE_CHANCE = 0.3; + DROP_ITEM1 = "skin_ratpelt"; + DROP_ITEM1_CHANCE = 0.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(10.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(0, 128, 128), 128, 10.0); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(10); + if (!(IS_HUNTING)) + { + } + if ((RandomInt(0, 1))) + { + } + PlayAnim("once", "idle2"); + } + + void OnSpawn() override + { + SetHealth(40); + SetWidth(24); + SetHeight(24); + SetName("Ghostly Rat"); + SetRoam(true); + SetHearingSensitivity(0); + NPC_GIVE_EXP = 30; + SetRace("undead"); + SetModel("nightmare/monsters/ghost_rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim("idle"); + SetMoveAnim(ANIM_WALK); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "renderfx", 16); + } + + void OnPostSpawn() override + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(0, 128, 128), 128, 10.0); + } + + void bite1() + { + // PlayRandomSound from: SOUND_ATTACK1 + array sounds = {SOUND_ATTACK1}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hLastSeen, ATTACK_RANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN + array sounds = {SOUND_PAIN, SOUND_STRUCK2, SOUND_STRUCK1, SOUND_STRUCK3, SOUND_PAIN}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/nightmare/monsters/zombie.as b/scripts/angelscript/nightmare/monsters/zombie.as new file mode 100644 index 00000000..64de4707 --- /dev/null +++ b/scripts/angelscript/nightmare/monsters/zombie.as @@ -0,0 +1,126 @@ +#pragma context server + +#include "monsters/zombie.as" + +namespace MS +{ + +class Zombie : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DISEASE; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SWIPE; + string ANIM_WALK; + float AS_STUCK_FREQ; + float ATTACK_DAMAGE; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DISEASE_DELAY; + float DISEASE_DMG; + int DISEASE_DUR; + float DISEASE_FREQ; + float FLINCH_HEALTH_RATIO; + string MODEL; + int NPC_GIVE_EXP; + + Zombie() + { + ANIM_WALK = "walkb1"; + ANIM_RUN = "walkb1"; + ANIM_IDLE = "idle1"; + ANIM_SWIPE = "stab1"; + ANIM_DISEASE = "slash"; + ANIM_ATTACK = ANIM_SWIPE; + NPC_GIVE_EXP = 75; + ANIM_WALK = "walkb1"; + ANIM_RUN = "walkb1"; + ANIM_IDLE = "idle1"; + ANIM_SWIPE = "stab1"; + ANIM_DISEASE = "slash"; + FLINCH_HEALTH_RATIO = 0.3; + AS_STUCK_FREQ = 0.6; + ATTACK_DAMAGE = Random(12.5, 25.0); + ATTACK_HITCHANCE = 25; + ATTACK_RANGE = 100; + ATTACK_HITRANGE = 130; + ATTACK_MOVERANGE = 50; + DISEASE_FREQ = 10.0; + DISEASE_DMG = Random(5, 8); + DISEASE_DUR = RandomInt(20, 25); + MODEL = "nightmare/monsters/fzombie.mdl"; + Precache(MODEL); + } + + void OnSpawn() override + { + SetName("Zombified Commoner"); + SetHealth(200); + SetModel(MODEL); + int RAND_EYES = RandomInt(0, 3); + SetModelBody(0, RAND_EYES); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetRace("undead"); + SetWidth(25); + SetHeight(80); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(7); + if (!(ME_NO_WANDER)) + { + SetRoam(true); + } + if ((ME_NO_WANDER)) + { + SetRoam(false); + } + SetGold(RandomInt(50, 100)); + SetDamageResistance("holy", 2.0); + SetDamageResistance("poison", 0.01); + SetDamageResistance("fire", 1.5); + SetDamageResistance("cold", 0.25); + SetDamageResistance("pierce", 0.5); + SetDamageResistance("blunt", 1.0); + SetDamageResistance("slash", 1.25); + ScheduleDelayedEvent(1.0, "idle_sounds"); + int PICK_DEATH = RandomInt(1, 5); + if (PICK_DEATH == 1) + { + ANIM_DEATH = ANIM_DEATH1; + } + if (PICK_DEATH == 2) + { + ANIM_DEATH = ANIM_DEATH2; + } + if (PICK_DEATH == 3) + { + ANIM_DEATH = ANIM_DEATH3; + } + if (PICK_DEATH == 4) + { + ANIM_DEATH = ANIM_DEATH4; + } + if (PICK_DEATH == 5) + { + ANIM_DEATH = ANIM_DEATH5; + } + CatchSpeech("debug_props", "debug"); + } + + void npc_selectattack() + { + if ((DISEASE_DELAY)) return; + DISEASE_DELAY = 1; + DISEASE_FREQ("reset_disease_delay"); + ANIM_ATTACK = ANIM_DISEASE; + } + +} + +} diff --git a/scripts/angelscript/nightmare_thornlands/map_startup.as b/scripts/angelscript/nightmare_thornlands/map_startup.as new file mode 100644 index 00000000..94c0661c --- /dev/null +++ b/scripts/angelscript/nightmare_thornlands/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "nightmare_thornlands"; + MAP_WEATHER = "clear;clear;clear;snow;clear;snow"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "Nightmare Thornlands"); + SetGlobalVar("G_MAP_DESC", "This is the realm of Thornlands as it will be if Lor Malgorand is not stopped."); + SetGlobalVar("G_MAP_DIFF", "Levels 30-35 / 400-700hp"); + SetGlobalVar("G_WARN_HP", 400); + } + +} + +} diff --git a/scripts/angelscript/oc/bandit_chest.as b/scripts/angelscript/oc/bandit_chest.as new file mode 100644 index 00000000..a23e96a9 --- /dev/null +++ b/scripts/angelscript/oc/bandit_chest.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class BanditChest : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("polearms_har", 6.5); + } + + void chest_additems() + { + add_gold(RandomInt(20, 200)); + add_good_item(); + add_good_item(); + if (!("game.playersnb" >= 2)) return; + add_great_item(); + if (!("game.playersnb" >= 3)) return; + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/oc/captians_chest.as b/scripts/angelscript/oc/captians_chest.as new file mode 100644 index 00000000..2d615704 --- /dev/null +++ b/scripts/angelscript/oc/captians_chest.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class CaptiansChest : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("polearms_har", 2); + } + + void chest_additems() + { + add_gold(RandomInt(10, 50)); + add_noob_item(); + add_good_item(); + if (!("game.playersnb" >= 2)) return; + add_good_item(); + if (!("game.playersnb" >= 3)) return; + add_good_item(); + } + +} + +} diff --git a/scripts/angelscript/oc/iceorcs_chest.as b/scripts/angelscript/oc/iceorcs_chest.as new file mode 100644 index 00000000..f5a14961 --- /dev/null +++ b/scripts/angelscript/oc/iceorcs_chest.as @@ -0,0 +1,33 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class IceorcsChest : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("polearms_har", 6.5); + } + + void chest_additems() + { + add_gold(RandomInt(30, 300)); + add_good_item(); + add_good_item(); + AddStoreItem(STORENAME, "swords_liceblade", 1, 0); + AddStoreItem(STORENAME, "proj_arrow_frost", 15, 0, 0, 15); + if (!("game.playersnb" >= 2)) return; + add_good_item(); + add_great_item(); + AddStoreItem(STORENAME, "proj_arrow_frost", 15, 0, 0, 15); + if (!("game.playersnb" >= 3)) return; + add_great_item(); + AddStoreItem(STORENAME, "proj_arrow_frost", 15, 0, 0, 15); + } + +} + +} diff --git a/scripts/angelscript/oc/ron.as b/scripts/angelscript/oc/ron.as new file mode 100644 index 00000000..d2097eb0 --- /dev/null +++ b/scripts/angelscript/oc/ron.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "monsters/base_npc_vendor.as" + +namespace MS +{ + +class Ron : CGameScript +{ + string ANIM_DEATH; + int MENU_OPEN; + int NO_JOB; + int NO_RUMOR; + int NO_SPAWN_STUCK_CHECK; + int NPC_NO_PLAYER_DMG; + int SAY_SO; + int SET_DESTINATION; + string SOUND_DEATH; + string STORE_NAME; + string STORE_TRIGGERTEXT; + string TRIGGER_OUT; + int VENDOR_NOT_ON_USE; + + Ron() + { + SOUND_DEATH = "none"; + ANIM_DEATH = "diesimple"; + STORE_NAME = "rons_shop"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + SAY_SO = 0; + NO_JOB = 1; + NO_RUMOR = 1; + NO_SPAWN_STUCK_CHECK = 1; + VENDOR_NOT_ON_USE = 1; + NPC_NO_PLAYER_DMG = 1; + } + + void OnSpawn() override + { + SetHealth(100); + SetName("Captain Ron"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(1, 1); + SetNoPush(true); + SetDamageResistance("holy", 0); + CatchSpeech("say_hi", "hi"); + SetMenuAutoOpen(1); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_apple", 15, 100); + AddStoreItem(STORE_NAME, "health_mpotion", 20, 100, 0); + AddStoreItem(STORE_NAME, "mana_mpotion", 20, 100, 0); + AddStoreItem(STORE_NAME, "drink_mead", 20, 100); + AddStoreItem(STORE_NAME, "drink_ale", 20, 100); + AddStoreItem(STORE_NAME, "drink_wine", 20, 100); + } + + void say_hi() + { + if ((SET_DESTINATION)) return; + if ((MENU_OPEN)) return; + OpenMenu(GetEntityIndex("ent_lastspoke")); + } + + void game_menu_getoptions() + { + MENU_OPEN = 1; + if (!(SET_DESTINATION)) + { + PlayAnim("once", "converse1"); + if (!(GAVE_INTRO)) + { + SayText("Ahoy there! Welcome to Captain Ron's pleasure cruise slash high seas adventure! Where be ye travelin' lad?"); + GAVE_INTRO = 1; + } + string reg.mitem.title = "To Deralia"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_sail"; + string reg.mitem.data = "deralia"; + string reg.mitem.title = "To Port Ara"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_sail"; + string reg.mitem.data = "ara"; + string reg.mitem.title = "To The Isles of Dread"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_sail"; + string reg.mitem.data = "isles"; + string reg.mitem.title = "To The Tundra"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "set_sail"; + string reg.mitem.data = "tundra"; + } + } + + void set_sail() + { + if ((SET_DESTINATION)) return; + SET_DESTINATION = 1; + VENDOR_NOT_ON_USE = 0; + TRIGGER_OUT = param2; + TRIGGER_OUT += "_start"; + PlayAnim("once", "converse2"); + if (param2 == "deralia") + { + SayText("Ah yes, Deralia, jewel of Daragoth, ne're a safer port there be. Off we go!"); + } + if (param2 == "ara") + { + SayText("Hmm... I think I saw some orcs rowin' towards Ara. Don't be too surprised if we catch up with 'em."); + } + if (param2 == "isles") + { + SayText("Isles of Dread? I'd charge extra for that, were I not already on the King's commission."); + } + if (param2 == "tundra") + { + SayText("Brrrr... cold up there. Alright - just mind the orca when you step off!"); + } + Effect("screenfade", "all", 4, 10, Vector3(1, 1, 1), 255, "fadeout"); + ScheduleDelayedEvent(10, "delay_sailing"); + } + + void delay_sailing() + { + Effect("screenfade", "all", 4, 0, Vector3(1, 1, 1), 255, "fadein"); + UseTrigger(TRIGGER_OUT); + } + + void game_menu_cancel() + { + SetMenuAutoOpen(1); + MENU_OPEN = 0; + } + + void OnDamage(int damage) override + { + if ((IsValidPlayer(param1))) + { + SetDamage("dmg"); + SetDamage("hit"); + return; + } + } + +} + +} diff --git a/scripts/angelscript/oc/shunk_chest.as b/scripts/angelscript/oc/shunk_chest.as new file mode 100644 index 00000000..c5665d75 --- /dev/null +++ b/scripts/angelscript/oc/shunk_chest.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class ShunkChest : CGameScript +{ + void OnSpawn() override + { + tc_add_artifact("polearms_har", 6.5); + } + + void chest_additems() + { + add_gold(RandomInt(30, 300)); + add_good_item(); + add_good_item(); + if (!("game.playersnb" >= 2)) return; + add_good_item(); + add_great_item(); + if (!("game.playersnb" >= 3)) return; + add_great_item(); + } + +} + +} diff --git a/scripts/angelscript/oceancrossing/game_master.as b/scripts/angelscript/oceancrossing/game_master.as new file mode 100644 index 00000000..a16651b3 --- /dev/null +++ b/scripts/angelscript/oceancrossing/game_master.as @@ -0,0 +1,84 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + void OnSpawn() override + { + string L_SKY = FindEntityByName("skybox"); + SetProp(L_SKY, "setbody", 0); + ScheduleDelayedEvent(0.01, "game_think"); + } + + void game_triggered() + { + string L_OCEAN = FindEntityByName("ocean"); + string L_SKY = FindEntityByName("skybox"); + if (param1 == "deralia_start") + { + SetProp(L_OCEAN, "skin", 2); + SetProp(L_SKY, "setbody", 0); + UseTrigger("relay_envlightnight"); + } + else + { + if (param1 == "ara_start") + { + SetProp(L_SKY, "setbody", 0); + UseTrigger("relay_envlightsunset"); + } + else + { + if (param1 == "isles_start") + { + SetProp(L_OCEAN, "skin", 3); + } + else + { + if (param1 == "tundra_start") + { + SetGlobalVar("G_WEATHER_LOCK", "snow"); + CallExternal("players", "ext_weather_change", "snow"); + SetProp(L_OCEAN, "skin", 1); + SetProp(L_OCEAN, "sequence", 1); + } + } + } + } + if (param1 == "cannon_fired") + { + SetProp(L_OCEAN, "sequence", 1); + CallExternal("players", "ext_weather_change", "clear"); + } + } + + void player_joined() + { + if ((LOCK_TO_NIGHT)) + { + CallExternal(param1, "ext_environment_change", "night"); + } + if (LOCK_SKY != "LOCK_SKY") + { + CallExternal(param1, "ext_change_sky", LOCK_SKY); + } + } + + void game_think() + { + string L_SKY = FindEntityByName("skybox"); + string L_NUM = RUN_NUM; + L_NUM %= 50; + L_NUM /= 50; + L_NUM *= 6.28; + string L_ANG = sin(L_NUM); + SetProp(L_SKY, "angles", Vector3(L_ANG, 0, 0)); + RUN_NUM += 1; + ScheduleDelayedEvent(0.01, "game_think"); + } + +} + +} diff --git a/scripts/angelscript/old_helena/base_old_helena_npc.as b/scripts/angelscript/old_helena/base_old_helena_npc.as new file mode 100644 index 00000000..38ffcbb4 --- /dev/null +++ b/scripts/angelscript/old_helena/base_old_helena_npc.as @@ -0,0 +1,118 @@ +#pragma context server + +namespace MS +{ + +class BaseOldHelenaNpc : CGameScript +{ + string ANIM_DEATH; + float FREQ_WARN; + string LAST_STRUCK_TIME; + int NPC_REPORT_ITEMS; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_DEATH3; + string SOUND_DEATH4; + string SOUND_HELP1; + string SOUND_HELP2; + string SOUND_HELP3; + string SOUND_HELP4; + string SOUND_HELP5; + string SOUND_HELP6; + string SOUND_HELP7; + string SOUND_HELP8; + string SOUND_HELP9; + int WARN_DELAY; + + BaseOldHelenaNpc() + { + SOUND_HELP1 = "scientist/sci_fear1.wav"; + SOUND_HELP2 = "scientist/sci_fear2.wav"; + SOUND_HELP3 = "scientist/sci_fear3.wav"; + SOUND_HELP4 = "scientist/sci_fear4.wav"; + SOUND_HELP5 = "scientist/sci_pain1.wav"; + SOUND_HELP6 = "scientist/sci_pain2.wav"; + SOUND_HELP7 = "scientist/sci_pain3.wav"; + SOUND_HELP8 = "scientist/sci_pain4.wav"; + SOUND_HELP9 = "scientist/sci_pain5.wav"; + SOUND_DEATH1 = "scientist/scream1.wav"; + SOUND_DEATH2 = "scientist/scream2.wav"; + SOUND_DEATH3 = "scientist/scream3.wav"; + SOUND_DEATH4 = "scientist/scream4.wav"; + FREQ_WARN = 5.0; + ANIM_DEATH = "death"; + } + + void OnSpawn() override + { + SetNoPush(true); + SetSayTextRange(1024); + ScheduleDelayedEvent(0.1, "critical_npc"); + } + + void reset_warn_delay() + { + WARN_DELAY = 0; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + SetIdleAnim("crouch_idle"); + PlayAnim("critical", "crouch_idle"); + LAST_STRUCK_TIME = GetGameTime(); + LAST_STRUCK_TIME += 9.0; + ScheduleDelayedEvent(10.0, "check_unfear"); + // PlayRandomSound from: SOUND_HELP1, SOUND_HELP2, SOUND_HELP3, SOUND_HELP4, SOUND_HELP5, SOUND_HELP6, SOUND_HELP7, SOUND_HELP8, SOUND_HELP9 + array sounds = {SOUND_HELP1, SOUND_HELP2, SOUND_HELP3, SOUND_HELP4, SOUND_HELP5, SOUND_HELP6, SOUND_HELP7, SOUND_HELP8, SOUND_HELP9}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + int RAND_SCREAM = RandomInt(1, 4); + if (RAND_SCREAM == 1) + { + SayText("Help! Help!"); + } + if (RAND_SCREAM == 2) + { + SayText("Over here!"); + } + if (RAND_SCREAM == 3) + { + SayText("Save me!"); + } + if (RAND_SCREAM == 4) + { + SayText("The orcs! Save me from the orcs!"); + } + } + + void check_unfear() + { + if (!(GetGameTime() > LAST_STRUCK_TIME)) return; + SetIdleAnim("idle1"); + PlayAnim("critical", "idle1"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_DEATH1, SOUND_DEATH2, SOUND_DEATH3 + array sounds = {SOUND_DEATH1, SOUND_DEATH2, SOUND_DEATH3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void old_helena_warboss_died() + { + NPC_REPORT_ITEMS = 1; + SetInvincible(true); + SetIdleAnim("idle1"); + } + + void OnDamage(int damage) override + { + if (!(IsValidPlayer(param1))) return; + SetDamage("dmg"); + SetDamage("hit"); + return; + } + +} + +} diff --git a/scripts/angelscript/old_helena/dorfgan.as b/scripts/angelscript/old_helena/dorfgan.as new file mode 100644 index 00000000..73d2297d --- /dev/null +++ b/scripts/angelscript/old_helena/dorfgan.as @@ -0,0 +1,291 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "old_helena/base_old_helena_npc.as" + +namespace MS +{ + +class Dorfgan : CGameScript +{ + string ANIM_ATTACK; + int ATTACK1_DAMAGE; + int ATTACK_RANGE; + int CANCHAT; + int CAN_RUN; + int CAN_SCREAM; + string CHAT_STEP1; + string CHAT_STEP2; + int CHAT_STEPS; + string CUR_PLAYER; + int DID_CATA_COMMENT; + int EXPLAINING_QUEST; + int FIXING_DAGGER; + int HELENA_SAVED; + int MENTIONED_DAGGER; + string NPCATK_TARGET; + int OFFER_ITEMS; + int QUEST_1; + int QUEST_2; + string REPAIR_QUEST_WINNER; + int REPAIR_STEP; + int SAY_SO; + int SEE_ENEMY; + string SOUND_PAIN; + string SOUND_PAIN2; + string STORE_NAME; + + Dorfgan() + { + ATTACK_RANGE = 64; + ANIM_ATTACK = "beatdoor"; + STORE_NAME = "dorfgans_blacksmith"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.5); + string TARGETS_NEAR = FindEntitiesInSphere("enemy", 128); + if (TARGETS_NEAR >= 1) + { + PlayAnim("once", ANIM_ATTACK); + DoDamage(GetToken(TARGETS_NEAR, 0, ";"), ATTACK_RANGE, 20.0, 0.9, "blunt"); + } + } + + void OnSpawn() override + { + SetHealth(1200); + SetGold(25); + SetName("Dorfgan"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/blacksmith.mdl"); + SOUND_PAIN = "player/chesthit1.wav"; + SOUND_PAIN2 = "player/armhit1.wav"; + ATTACK1_DAMAGE = 3; + ATTACK_RANGE = 90; + SAY_SO = 0; + EXPLAINING_QUEST = 0; + QUEST_1 = 0; + QUEST_2 = 0; + OFFER_ITEMS = 1; + CANCHAT = 1; + CAN_SCREAM = 1; + CAN_RUN = 1; + SEE_ENEMY = 0; + createmystore(); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_hi", "hello"); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_hi", "greet"); + CatchSpeech("say_quest", "attack"); + CatchSpeech("say_quest", "orc"); + CatchSpeech("say_dagger", "dagger"); + NPCATK_TARGET = "unset"; + SetMenuAutoOpen(1); + ScheduleDelayedEvent(260.0, "add_moar_stuff"); + } + + void say_hi() + { + SayText("Adventurer! We're under [attack]!"); + ScheduleDelayedEvent(3, "say_hi2test"); + } + + void say_hi2test() + { + if (!(SAY_SO == 0)) return; + SayText("I'm Dorfgan, the blacksmith."); + setsayso(); + } + + void setsayso() + { + SAY_SO = 1; + } + + void say_quest() + { + if (!(EXPLAINING_QUEST == 0)) return; + SayText("Our village is being ransacked by those blasted Orcs!"); + EXPLAINING_QUEST = 1; + ScheduleDelayedEvent(2, "say_quest_2"); + } + + void struck() + { + SetVolume(10); + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("once", "raflinch"); + flee(); + } + + void resetoffer() + { + OFFER_ITEMS = 1; + } + + void playerused() + { + if ((HELENA_SAVED)) + { + SayText("I've also an item or two for exclusive sale to our brave saviors here."); + } + if (!(OFFER_ITEMS == 1)) return; + // TODO: offerstore STORE_NAME buysell trade + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + SayText("We're low on supplies, so I don't have much to offer..."); + CANCHAT = 0; + ScheduleDelayedEvent(10, "resetchat"); + } + + void resetchat() + { + CANCHAT = 1; + } + + void vendor_addstoreitems() + { + // TODO: createstore STORE_NAME + AddStoreItem(STORE_NAME, "swords_shortsword", 1, 100); + AddStoreItem(STORE_NAME, "swords_bastardsword", 1, 100); + AddStoreItem(STORE_NAME, "axes_doubleaxe", 2, 100); + AddStoreItem(STORE_NAME, "shields_ironshield", 2, 100); + AddStoreItem(STORE_NAME, "shields_lironshield", 2, 100); + AddStoreItem(STORE_NAME, "proj_bolt_wooden", 100, 100, 0, 25); + AddStoreItem(STORE_NAME, "proj_bolt_fire", 100, 100, 0, 25); + AddStoreItem(STORE_NAME, "proj_bolt_iron", 100, 100, 0, 25); + AddStoreItem(STORE_NAME, "proj_bolt_steel", 75, 800, 0, 25); + AddStoreItem(STORE_NAME, "proj_bolt_silver", 25, 800, 0, 25); + addrandomitems(); + } + + void addrandomitems() + { + if (!(RandomInt(1, 2) == 1)) return; + AddStoreItem(STORE_NAME, "swords_longsword", 1, 200); + if (!(RandomInt(1, 2) == 1)) return; + AddStoreItem(STORE_NAME, "swords_scimitar", 1, 100); + if (!(RandomInt(1, 2) == 1)) return; + AddStoreItem(STORE_NAME, "axes_battleaxe", 1, 200); + } + + void old_helena_warboss_died() + { + HELENA_SAVED = 1; + AddStoreItem(STORE_NAME, "blunt_northmaul972", 1, 200, 0); + AddStoreItem(STORE_NAME, "bows_crossbow_heavy33", 1, 100, 0); + } + + void basevendor_offerstore() + { + if (!(HELENA_SAVED)) return; + SayText("I've got a few unusual items just for those who rescued Helena."); + bchat_mouth_move(); + } + + void catapults_fire() + { + if ((DID_CATA_COMMENT)) return; + CATAPULT_COMMENT += 1; + if (!(CATAPULT_COMMENT > 3)) return; + SayText("Catapults!? May the gods save us! They've brought catapults!"); + DID_CATA_COMMENT = 1; + } + + void say_dagger() + { + if (!(ItemExists(param1, "smallarms_rd"))) return; + if (!(HELENA_SAVED)) + { + SayText("Is now really the time to talk about this? We're under attack!"); + } + if (!(HELENA_SAVED)) return; + if ((FIXING_DAGGER)) return; + CUR_PLAYER = param1; + SayText("I always hate to see adventurers who can't properly take care of their equipment."); + ScheduleDelayedEvent(1.0, "say_dagger2"); + } + + void say_dagger2() + { + SayText("I can fix that up for you, for a nominal fee, of course."); + OpenMenu(CUR_PLAYER); + } + + void not_enough_repair_dagger() + { + SayText("You travellers have to learn somehow."); + } + + void start_repair_dagger() + { + REPAIR_QUEST_WINNER = param1; + FIXING_DAGGER = 1; + REPAIR_STEP = 0; + repair_dagger(); + } + + void repair_dagger() + { + REPAIR_STEP += 1; + if (REPAIR_STEP == 1) + { + PlayAnim("once", "portal"); + SayText("This'll be no trouble at all."); + } + if (REPAIR_STEP == 2) + { + PlayAnim("once", "panic"); + SayText("*Crunch* Ow!"); + } + if (REPAIR_STEP == 3) + { + PlayAnim("once", "push_button"); + SayText("Sorry, I broke your dagger. Strange thing is, I think it cut me AFTER it shattered..."); + // TODO: offer REPAIR_QUEST_WINNER smallarms_eth + FIXING_DAGGER = 0; + } + if (!(REPAIR_STEP < 3)) return; + ScheduleDelayedEvent(2.0, "repair_dagger"); + } + + void OnUse(CBaseEntity@ activator, CBaseEntity@ caller, int useType) override + { + if (!(HELENA_SAVED)) return; + if (!(ItemExists(param1, "smallarms_rd"))) return; + CHAT_STEP1 = "Hey, that's a mighty interesting looking hunk of rust you have there."; + CHAT_STEP2 = "I might be able to clean it up into something even more interesting, for a price."; + CHAT_STEPS = 2; + chat_loop(); + MENTIONED_DAGGER = 1; + } + + void game_menu_getoptions() + { + if (!(HELENA_SAVED)) return; + if ((ItemExists(param1, "smallarms_rd"))) + { + string reg.mitem.title = "Repair rusted dagger (10,000 gold)"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "smallarms_rd;gold:10000"; + string reg.mitem.callback = "start_repair_dagger"; + string reg.mitem.cb_failed = "not_enough_repair_dagger"; + } + } + +} + +} diff --git a/scripts/angelscript/old_helena/dr_who1.as b/scripts/angelscript/old_helena/dr_who1.as new file mode 100644 index 00000000..fb0d2475 --- /dev/null +++ b/scripts/angelscript/old_helena/dr_who1.as @@ -0,0 +1,237 @@ +#pragma context server + +#include "monsters/base_npc_vendor.as" + +namespace MS +{ + +class DrWho1 : CGameScript +{ + string ANIM_STEP2; + string ANIM_STEP3; + int BUSY_CHATTING; + float CHAT_DELAY; + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + int CHAT_STEPS; + int DID_INTRO; + int DOING_VOTE; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int NO_TALKIE; + int STORE_CLOSED; + string STORE_NAME; + int TALLY_NO_VOTES; + int TALLY_VOTES; + int TALLY_YES_VOTES; + int VENDOR_MENU_OFF; + int VENDOR_NOT_ON_USE; + int VEND_INDIVIDUAL; + + DrWho1() + { + NO_JOB = 1; + NO_RUMOR = 1; + CHAT_DELAY = 4.0; + STORE_NAME = "tom_bakers_shop"; + VEND_INDIVIDUAL = 1; + VENDOR_NOT_ON_USE = 1; + } + + void OnSpawn() override + { + SetName("Torwhodoc Sa thraz, Keeper of Time"); + SetHealth(1); + SetInvincible(true); + SetRace("human"); + SetRoam(false); + SetModel("npc/balancepriest2.mdl"); + SetWidth(32); + SetHeight(72); + SetIdleAnim("idle1"); + SetSayTextRange(512); + CatchSpeech("say_hi", "hail"); + CatchSpeech("start_helena_vote", "helena"); + SetMenuAutoOpen(1); + ScheduleDelayedEvent(1.0, "scan_for_ally"); + } + + void scan_for_ally() + { + if ((DID_INTRO)) return; + ScheduleDelayedEvent(2.0, "scan_for_ally"); + if (!(false)) return; + if (!(GetEntityRange(m_hLastSeen) < 512)) return; + DID_INTRO = 1; + say_hi(); + } + + void say_hi() + { + if ((BUSY_CHATTING)) return; + CHAT_STEPS = 4; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Excellent work! Gave those orcs what for, you did! Just like last time!"; + CHAT_STEP2 = "...although, not like that one other time, but, that's no longer an issue, I suppose."; + ANIM_STEP2 = "lean"; + CHAT_STEP3 = "In anycase, I've those items I told you about, for that fee I told you about. Feel free to pick!"; + CHAT_STEP4 = "When you're ready to go back to the fut... [Helena], just say so."; + chat_loop(); + } + + void game_menu_getoptions() + { + if ((NO_TALKIE)) return; + if (!(DOING_VOTE)) + { + string reg.mitem.title = "Return to the Future"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "start_helena_vote"; + } + if ((DOING_VOTE)) + { + string reg.mitem.title = "VOTE: Return to the Future?"; + string reg.mitem.type = "disabled"; + string reg.mitem.title = "Yes!"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "wtf_vote_yes"; + string reg.mitem.title = "No!"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "wtf_vote_no"; + } + } + + void payment_failed() + { + PlayAnim("critical", "no"); + SayText("Come now , the last of the time wizards deserves better food than that will buy."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "mana_forget", 2, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_speed", 1, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_gprotection", 1, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_protection", 1, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_resist_cold", 1, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_immune_cold", 1, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_resist_fire", 1, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_immune_fire", 1, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_immune_poison", 1, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_demon_blood", 1, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_vampire", 1, 100, 0.0); + AddStoreItem(STORE_NAME, "mana_prot_spiders", 1, 100, 0.0); + } + + void start_helena_vote() + { + NO_HAIL = 1; + VENDOR_MENU_OFF = 1; + GetAllPlayers(PLAYER_LIST); + DOING_VOTE = 1; + SayText("Just a moment , while we get a consensus amongst our heros."); + TALLY_VOTES = 0; + TALLY_YES_VOTES = 0; + TALLY_NO_VOTES = 0; + ScheduleDelayedEvent(3.0, "zomg_stupid_error"); + } + + void zomg_stupid_error() + { + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + wtf_ask_players(); + } + float WTF_VOTE_DELAY = 10.0; + if (GetPlayerCount() > 1) + { + float WTF_VOTE_DELAY = 20.0; + } + WTF_VOTE_DELAY("wtf_count_votes"); + } + + void wtf_ask_players() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + OpenMenu(CUR_PLAYER); + } + + void wtf_vote_yes() + { + LogDebug("GetEntityName(param1) voted yes"); + TALLY_YES_VOTES += 1; + TALLY_VOTES += 1; + PlayAnim("critical", "yes"); + SayText(GetEntityName(param1) + " seems ready to go."); + } + + void wtf_vote_no() + { + LogDebug("GetEntityName(param1) voted no"); + TALLY_NO_VOTES += 1; + TALLY_VOTES += 1; + PlayAnim("critical", "no"); + SayText(GetEntityName(param1) + " seems to still be shopping , or... Looting corpses."); + } + + void wtf_count_votes() + { + if (TALLY_NO_VOTES > 0) + { + int WTF_VOTE_FAIL = 1; + } + if (TALLY_VOTES == 0) + { + int WTF_VOTE_FAIL = 1; + } + if (WTF_VOTE_FAIL == 1) + { + NO_HAIL = 0; + VENDOR_MENU_OFF = 0; + DOING_VOTE = 0; + CHAT_STEPS = 3; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Seems some people want to look around before we leave."; + CHAT_STEP2 = "It's not a problem. The temporal stasus feild prevents you from interfering with events beyond this area."; + CHAT_STEP3 = "So it's not as if you can get into any real trouble... This time."; + ANIM_STEP3 = "lean"; + chat_loop(); + } + if (!(WTF_VOTE_FAIL == 0)) return; + STORE_CLOSED = 1; + NO_HAIL = 1; + VENDOR_MENU_OFF = 1; + SetSayTextRange(9999); + CHAT_STEPS = 3; + CHAT_STEP = 0; + BUSY_CHATTING = 1; + CHAT_STEP1 = "Alright, get into the blue box and hold onto your hats! We're going home!"; + CHAT_STEP2 = "It's an old type 40 I just borrowed... Give it a bit to warm up."; + CHAT_STEP3 = "Kick that flux capacitor over there and we'll be on our way."; + chat_loop(); + PlayAnim("critical", "studycart"); + NO_TALKIE = 1; + UseTrigger("engine_tardis"); + ScheduleDelayedEvent(4.0, "amx_mapchange"); + ScheduleDelayedEvent(10.0, "manual_mapchange"); + } + + void amx_mapchange() + { + UseTrigger("force_map_helena"); + } + + void manual_mapchange() + { + CallExternal(GAME_MASTER, "gm_manual_map_change", "helena"); + } + +} + +} diff --git a/scripts/angelscript/old_helena/erkold.as b/scripts/angelscript/old_helena/erkold.as new file mode 100644 index 00000000..6a292cc4 --- /dev/null +++ b/scripts/angelscript/old_helena/erkold.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "monsters/base_npc.as" +#include "old_helena/base_old_helena_npc.as" + +namespace MS +{ + +class Erkold : CGameScript +{ + int GAVE_REWARD; + int HELENA_SAVED; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + + Erkold() + { + NO_HAIL = 1; + NO_RUMOR = 1; + NO_JOB = 1; + } + + void OnSpawn() override + { + SetHealth(1000); + SetGold(0); + SetName("Erkold"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(1, 2); + SetBloodType("red"); + } + + void old_helena_warboss_died() + { + SetMenuAutoOpen(1); + HELENA_SAVED = 1; + } + + void game_menu_getoptions() + { + if (!(HELENA_SAVED)) return; + if ((GAVE_REWARD)) return; + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_reward"; + } + + void give_reward() + { + if ((GAVE_REWARD)) + { + PlayAnim("critical", "lean"); + bchat_mouth_move(); + SayText(I + "wish " + I + " had more to give , but most of my belongings went up with the flames."); + } + if ((GAVE_REWARD)) return; + GAVE_REWARD = 1; + bchat_mouth_move(); + SayText("Thank the gods you saved us! Here! Take this as a reward!"); + // TODO: offer PARAM1 GetRandomToken("scroll2_healing_circle_920;scroll_healing_circle", ";") + } + +} + +} diff --git a/scripts/angelscript/old_helena/game_master.as b/scripts/angelscript/old_helena/game_master.as new file mode 100644 index 00000000..23d9b82b --- /dev/null +++ b/scripts/angelscript/old_helena/game_master.as @@ -0,0 +1,18 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + void old_helena_warboss_died() + { + gold_spew(25, 2, 64, 8, 24, G_WARBOSS_ORIGIN); + SendInfoMsg("all", "Old Helena has been saved! Click use on NPCs to purchase rewards."); + SpawnItem("axes_greataxe", G_WARBOSS_ORIGIN); + ApplyEffect(GetEntityIndex(m_hLastCreated), "old_helena/track_gaxe_pickup"); + } + +} + +} diff --git a/scripts/angelscript/old_helena/genstore.as b/scripts/angelscript/old_helena/genstore.as new file mode 100644 index 00000000..76ef25ab --- /dev/null +++ b/scripts/angelscript/old_helena/genstore.as @@ -0,0 +1,138 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_npc_vendor.as" +#include "old_helena/base_old_helena_npc.as" + +namespace MS +{ + +class Genstore : CGameScript +{ + string ANIM_DEATH; + int CANCHAT; + int HELENA_SAVED; + int NO_CHAT; + float OVERCHARGE; + int SELL_WEAPON_LEVEL; + string SOUND_DEATH; + string STORE_NAME; + string STORE_TRIGGERTEXT; + + Genstore() + { + SOUND_DEATH = "none"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_NAME = "helena_general_store"; + CANCHAT = 1; + OVERCHARGE = 1.5; + ANIM_DEATH = "dieforward"; + NO_CHAT = 1; + SELL_WEAPON_LEVEL = 6; + } + + void OnSpawn() override + { + SetHealth(800); + SetName("Arthur"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + ScheduleDelayedEvent(120.0, "add_moar_stuff"); + } + + void trade_success() + { + if (!(CANCHAT == 1)) return; + Say("goods[.56] [.4] [.58] [.66]"); + CANCHAT = 0; + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "item_torch", RandomInt(1, 3), 110); + AddStoreItem(STORE_NAME, "pack_heavybackpack", 1, 115); + AddStoreItem(STORE_NAME, "smallarms_dagger", 1, 105); + AddStoreItem(STORE_NAME, "health_mpotion", RandomInt(10, 20), 115, 0.2); + AddStoreItem(STORE_NAME, "pack_heavybackpack", 2, OVERCHARGE, SELL_RATIO); + AddStoreItem(STORE_NAME, "pack_bigsack", 2, OVERCHARGE, SELL_RATIO); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "sheath_back", 1, 95); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "sheath_belt_holster", 1, 95); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "blunt_maul", RandomInt(1, 3), 95); + } + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORE_NAME, "armor_leather_studded", 1, 95); + } + } + + void add_moar_stuff() + { + MOAR_SUFF += 1; + if (MOAR_STUFF == 1) + { + AddStoreItem(STORE_NAME, "proj_arrow_broadhead", 120, 100, 0, 60); + } + if (MOAR_STUFF == 2) + { + AddStoreItem(STORE_NAME, "proj_arrow_silvertipped", 120, 100, 0, 60); + } + if (MOAR_STUFF == 3) + { + AddStoreItem(STORE_NAME, "proj_arrow_jagged", 120, 100, 0, 60); + } + if (MOAR_STUFF == 4) + { + AddStoreItem(STORE_NAME, "proj_arrow_fire", 120, 100, 0, 60); + } + if (MOAR_STUFF == 5) + { + AddStoreItem(STORE_NAME, "proj_arrow_frost", 120, 800, 0, 30); + } + if (MOAR_STUFF == 6) + { + AddStoreItem(STORE_NAME, "proj_arrow_holy", 120, 800, 0, 30); + } + if (MOAR_STUFF == 7) + { + AddStoreItem(STORE_NAME, "proj_poison", 120, 100, 0, 60); + } + if (MOAR_STUFF == 8) + { + AddStoreItem(STORE_NAME, "proj_arrow_gpoison", 120, 800, 0, 30); + } + if (MOAR_STUFF == 9) + { + AddStoreItem(STORE_NAME, "proj_arrow_lightning", 120, 800, 0, 30); + } + if (!(MOAR_STUFF < 9)) return; + ScheduleDelayedEvent(120.0, "add_moar_stuff"); + } + + void old_helena_warboss_died() + { + AddStoreItem(STORE_NAME, "item_gwond", 1, 0); + HELENA_SAVED = 1; + SpawnNPC("chests/bank1", /* TODO: $relpos */ $relpos(80, 30, 50), ScriptMode::Legacy); + } + + void basevendor_offerstore() + { + if (!(HELENA_SAVED)) return; + SayText("Just for you , " + I + " ve these old galat storage notes you can use to trade gold with your friends."); + bchat_mouth_move(); + } + +} + +} diff --git a/scripts/angelscript/old_helena/harry.as b/scripts/angelscript/old_helena/harry.as new file mode 100644 index 00000000..49b30a38 --- /dev/null +++ b/scripts/angelscript/old_helena/harry.as @@ -0,0 +1,132 @@ +#pragma context server + +#include "old_helena/base_old_helena_npc.as" +#include "monsters/base_npc.as" +#include "monsters/base_npc_vendor.as" + +namespace MS +{ + +class Harry : CGameScript +{ + string ANIM_DEATH; + string MY_RAID_POS; + int NO_JOB; + int NO_RUMOR; + int SAY_SO; + string SOUND_DEATH; + string STORE_NAME; + string STORE_TRIGGERTEXT; + + Harry() + { + SOUND_DEATH = "none"; + ANIM_DEATH = "diesimple"; + STORE_NAME = "harrys_inn"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + SAY_SO = 0; + NO_JOB = 1; + NO_RUMOR = 1; + MY_RAID_POS = Vector3(-592, 383, 36); + } + + void OnSpawn() override + { + SetHealth(800); + SetName("Harry"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(1, 1); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_quiet", "quiet"); + CatchSpeech("say_orcs", "orcs"); + CatchSpeech("say_dorfgan", "dorfgan"); + CatchSpeech("say_erkold", "erkold"); + CatchSpeech("say_serrold", "serrold"); + CatchSpeech("say_inn", "inn"); + CatchSpeech("say_thanks", "ok"); + } + + void say_hi() + { + PlayAnim("once", "pondering3"); + SayText("Greetings to you adventurer!"); + ScheduleDelayedEvent(3, "say_hi2test"); + } + + void say_hi2test() + { + if (!(SAY_SO == 0)) return; + SayText(I + " am Harry , your humble innkeeper."); + setsayso(); + } + + void satsayso() + { + SAY_SO = 1; + } + + void say_orcs() + { + SayText("They disappear after 10 drinks!"); + } + + void say_dorfgan() + { + PlayAnim("once", "yes"); + SayText("Nice guy , he keeps order when my customers get a little fuzzy"); + } + + void say_erkold() + { + PlayAnim("once", "yes"); + SayText("Poor man.. Lost everything..."); + } + + void say_serrold() + { + SayText("Serrold? He was our village leader...until the attacks."); + ScheduleDelayedEvent(3, "say_serrold2"); + } + + void say_serrold2() + { + SayText("He wasn t paying attention and an arrow ran him through..."); + } + + void say_inn() + { + SayText("Yes , " + I + " own the inn over there. It s free to anyone passing through, but donations are welcome."); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_apple", 15, 100); + AddStoreItem(STORE_NAME, "health_mpotion", 20, 100, 0); + AddStoreItem(STORE_NAME, "mana_mpotion", 20, 100, 0); + AddStoreItem(STORE_NAME, "drink_mead", 20, 100); + AddStoreItem(STORE_NAME, "drink_ale", 20, 100); + AddStoreItem(STORE_NAME, "drink_wine", 20, 100); + } + + void old_helena_warboss_died() + { + AddStoreItem(STORE_NAME, "mana_regen", 2, 100, 0); + AddStoreItem(STORE_NAME, "item_light_crystal", "game.playersnb", 100, 0); + AddStoreItem(STORE_NAME, "mana_leadfoot", 4, 100, 0); + } + + void basevendor_offerstore() + { + if (!(HELENA_SAVED)) return; + SayText("For you , " + I + " ll break out the rare stock! I almost never sell this stuff."); + PlayAnim("critical", "lean"); + bchat_mouth_move(); + } + +} + +} diff --git a/scripts/angelscript/old_helena/map_startup.as b/scripts/angelscript/old_helena/map_startup.as new file mode 100644 index 00000000..3e702a67 --- /dev/null +++ b/scripts/angelscript/old_helena/map_startup.as @@ -0,0 +1,17 @@ +#pragma context server + +namespace MS +{ + +class MapStartup : CGameScript +{ + MapStartup() + { + SetGlobalVar("G_NO_DROP", 1); + SetGlobalVar("G_EXP_MULTI", 1); + SetGlobalVar("G_SIEGE_MAP", 1); + } + +} + +} diff --git a/scripts/angelscript/old_helena/serrold.as b/scripts/angelscript/old_helena/serrold.as new file mode 100644 index 00000000..4bb9a970 --- /dev/null +++ b/scripts/angelscript/old_helena/serrold.as @@ -0,0 +1,229 @@ +#pragma context server + +#include "monsters/base_chat.as" +#include "monsters/base_npc.as" +#include "old_helena/base_old_helena_npc.as" + +namespace MS +{ + +class Serrold : CGameScript +{ + int CAN_RUN; + int CAN_SCREAM; + int DID_CATAPULT_COMMENT; + int DID_GREET; + int GAVE_MONEY; + int GAVE_REWARD; + int HELENA_SAVED; + int INN_CLOSED; + int NO_JOB; + string PREF_LOCATION; + int RETURN_PREF; + int SEE_ENEMY; + + Serrold() + { + NO_JOB = 1; + PREF_LOCATION = Vector3(64, 176, 0); + } + + void OnRepeatTimer() + { + SetRepeatDelay(20.0); + if (!(DID_GREET)) + { + if ((false)) + { + } + SetMoveDest(m_hLastSeen); + ScheduleDelayedEvent(1.0, "greet_players"); + } + if ((RETURN_PREF)) + { + } + if (!(HELENA_SAVED)) + { + } + LogDebug("moving to PREF_LOCATION"); + SetMoveAnim("run1"); + SetIdleAnim("crouch_idle"); + SetMoveDest(PREF_LOCATION); + } + + void OnSpawn() override + { + SetHealth(800); + SetGold(2); + SetName("Serrold"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetModelBody(1, 0); + INN_CLOSED = 0; + SEE_ENEMY = 0; + CAN_SCREAM = 1; + CAN_RUN = 1; + GAVE_MONEY = 0; + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_hi", "hello"); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_hi", "greet"); + CatchSpeech("say_orcs", "orcs"); + CatchSpeech("say_rumor", "people"); + CatchSpeech("say_dorfgan", "dorfgan"); + CatchSpeech("say_erkold", "erkold"); + CatchSpeech("say_serrold", "serrold"); + CatchSpeech("say_harry", "harry"); + CatchSpeech("say_thanks", "ok"); + CatchSpeech("say_thanks", "okay"); + CatchSpeech("say_thanks", "sure"); + } + + void game_postspawn() + { + SetGlobalVar("G_SIEGE_MAP", 1); + SetGlobalVar("G_NPC_REMAIN", 5); + } + + void greet_players() + { + DID_GREET = 1; + SetVolume(10); + ScheduleDelayedEvent(0.1, "bchat_mouth_move"); + ScheduleDelayedEvent(1.0, "bchat_mouth_move"); + ScheduleDelayedEvent(4.0, "bchat_mouth_move"); + ScheduleDelayedEvent(6.0, "bchat_mouth_move"); + ScheduleDelayedEvent(8.0, "bchat_mouth_move"); + ScheduleDelayedEvent(10.0, "goto_pref"); + ScheduleDelayedEvent(5.0, "map_go"); + } + + void map_go() + { + UseTrigger("MSmm"); + } + + void goto_pref() + { + RETURN_PREF = 1; + SetMoveAnim("run1"); + SetIdleAnim("crouch_idle"); + ScheduleDelayedEvent(20.0, "tele_pref"); + } + + void talksound1() + { + EmitSound(GetOwner(), 0, "npc/oldvillager1.wav", 10); + } + + void say_hi() + { + if ((HELENA_SAVED)) return; + PlayAnim("once", "panic"); + SayText("Please help our town! The [orcs] are attacking!"); + ScheduleDelayedEvent(2, "say_hi2"); + } + + void say_hi2() + { + SayText("Even if we survive the attack , we still need [people] to keep order in the town!"); + } + + void say_orcs() + { + PlayAnim("once", "fear1"); + SayText("Evil creatures spawned from hell!"); + } + + void say_rumor() + { + if ((HELENA_SAVED)) return; + PlayAnim("once", "idle3"); + SayText("[dorfgan] , [erkold] , and myself are the only ones who can run this village! If we all die , the village will die with us!"); + } + + void say_dorfgan() + { + PlayAnim("once", "yes"); + SayText("The blacksmith. He is a good man , not even in times like this does he stop forgeing!"); + } + + void say_erkold() + { + PlayAnim("once", "yes"); + SayText("The man at the burnt down house. He and his family used to supply the village with food , but " + I + " am not sure how it will go now when the family has been kidnapped.."); + } + + void say_serrold() + { + PlayAnim("once", "yes"); + SayText(I + " am Serrold , the town elder."); + } + + void say_harry() + { + PlayAnim("once", "no"); + SayText("That man is good for nothing. " + I + "closed down his Inn but " + I + " still get the feeling that something is going on in there.."); + } + + void say_thanks() + { + PlayAnim("once", "yes"); + SayText("Thank you! Now go out and kick some green butt!"); + } + + void old_helena_warboss_died() + { + SetMenuAutoOpen(1); + HELENA_SAVED = 1; + SetIdleAnim("idle1"); + } + + void game_menu_getoptions() + { + if (!(HELENA_SAVED)) return; + if ((GAVE_REWARD)) return; + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_reward"; + } + + void give_reward() + { + if ((GAVE_REWARD)) + { + PlayAnim("critical", "lean"); + bchat_mouth_move(); + SayText(I + "wish " + I + "had more to give , but " + I + " ll need what s left to help rebuild the town."); + } + if ((GAVE_REWARD)) return; + GAVE_REWARD = 1; + bchat_mouth_move(); + SayText(I + " can t believe it! You saved us! Take this as a reward!"); + // TODO: offer PARAM1 pack_boh_lesser + } + + void catapults_fire() + { + if (!(DID_CATAPULT_COMMENT)) return; + DID_CATAPULT_COMMENT = 1; + SayText("By the gods! They ve brought siege weapons!"); + } + + void game_reached_dest() + { + SetAngles("face"); + } + + void tele_pref() + { + SetEntityOrigin(GetOwner(), PREF_LOCATION); + SetIdleAnim("crouch_idle"); + } + +} + +} diff --git a/scripts/angelscript/old_helena/track_gaxe_pickup.as b/scripts/angelscript/old_helena/track_gaxe_pickup.as new file mode 100644 index 00000000..370f1e69 --- /dev/null +++ b/scripts/angelscript/old_helena/track_gaxe_pickup.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "effects/base_effect.as" + +namespace MS +{ + +class TrackGaxePickup : CGameScript +{ + string EFFECT_ID; + string EFFECT_SCRIPT; + + TrackGaxePickup() + { + EFFECT_ID = "track_gaxe"; + EFFECT_SCRIPT = currentscript; + } + + void game_removefromowner() + { + SetGlobalVar("G_OLDHELENA_AXE_PICKED", 1); + } + + void game_fall() + { + SetGlobalVar("G_OLDHELENA_AXE_PICKED", 0); + } + +} + +} diff --git a/scripts/angelscript/orc_for/abomination_bone_sa.as b/scripts/angelscript/orc_for/abomination_bone_sa.as new file mode 100644 index 00000000..e65ce086 --- /dev/null +++ b/scripts/angelscript/orc_for/abomination_bone_sa.as @@ -0,0 +1,140 @@ +#pragma context server + +#include "monsters/abomination_bone.as" + +namespace MS +{ + +class AbominationBoneSa : CGameScript +{ + int DMG_BITE_LONG; + int DMG_BITE_SHORT; + int DMG_LSHIELD; + int DOT_BREATH; + string FLING_IDX; + int INTRO_DONE; + int MONSTER_HP; + int NO_SPAWN_STUCK_CHECK; + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_BASE_EXP; + float NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_SELF_ADJUST; + int START_SUSPEND; + + AbominationBoneSa() + { + MONSTER_HP = 20000; + NPC_BASE_EXP = 7000; + DOT_BREATH = 100; + DMG_BITE_SHORT = 150; + DMG_BITE_LONG = 350; + DMG_LSHIELD = 150; + NPC_SELF_ADJUST = 1; + NPC_ADJ_TIERS = "0;500;1000;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.0;1.0;1.0;1.25;2.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;1.0;1.0;1.0;1.5;2.0;"; + START_SUSPEND = 1; + NO_SPAWN_STUCK_CHECK = 1; + NPC_BOSS_REGEN_RATE = 0.03; + NPC_BOSS_RESTORATION = 0.25; + } + + void game_precache() + { + Precache("monsters/abomination_bone"); + Precache("monsters/Orc.mdl"); + } + + void OnSpawn() override + { + SetName("bone_abomination"); + } + + void final_adj() + { + if (NPC_ADJ_LEVEL < 5) + { + SetName("Lesser Bone Abomination"); + } + else + { + SetName("Bone Abomination"); + } + } + + void eat_me() + { + PlayAnim("critical", "grab_fling"); + } + + void frame_grab() + { + DeleteEntity(FindEntityByName("orc_summoner")); + ClientEvent("new", "all", "orc_for/orc_summoner_slaughter_cl", GetEntityIndex(GetOwner())); + FLING_IDX = "game.script.last_sent_id"; + EmitSound(GetOwner(), 0, "debris/bustflesh1.wav", 10); + } + + void frame_fling() + { + UseTrigger("twal_shaman_block"); + string FLING_VEL = /* TODO: $relvel */ $relvel(-400, 400, 110); + ClientEvent("update", "all", FLING_IDX, "do_fling", FLING_VEL); + ScheduleDelayedEvent(1.0, "intro_done"); + EmitSound(GetOwner(), 0, "debris/bustflesh2.wav", 10); + } + + void intro_done() + { + npcatk_resume_ai(); + SetRoam(true); + SetInvincible(false); + INTRO_DONE = 1; + ScheduleDelayedEvent(4.0, "start_da_musak"); + } + + void start_da_musak() + { + GetAllPlayers(PLAYER_LIST); + GetTokenCount(PLAYER_LIST, ";")("start_musak"); + ScheduleDelayedEvent(45.0, "start_da_musak2"); + } + + void start_musak() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if (GetEntityRange(CUR_TARG) < 768) + { + CallExternal(CUR_TARG, "ext_orcfor_boss_musak", 1); + } + } + + void start_da_musak2() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(80.0, "start_da_musak2"); + if (!(m_hAttackTarget != "unset")) return; + GetAllPlayers(PLAYER_LIST); + GetTokenCount(PLAYER_LIST, ";")("start_musak2"); + } + + void start_musak2() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if (GetEntityRange(CUR_TARG) < 768) + { + CallExternal(CUR_TARG, "ext_orcfor_boss_musak", 2); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal("players", "ext_orcfor_boss_musak", 3, GetEntityOrigin(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/orc_for/bgoblin_archer_sa.as b/scripts/angelscript/orc_for/bgoblin_archer_sa.as new file mode 100644 index 00000000..2afe1eed --- /dev/null +++ b/scripts/angelscript/orc_for/bgoblin_archer_sa.as @@ -0,0 +1,186 @@ +#pragma context server + +#include "orc_for/tiers2.as" +#include "orc_for/goblin_base.as" + +namespace MS +{ + +class BgoblinArcherSa : CGameScript +{ + string ANIM_ATTACK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FIREBALL; + int DMG_AOE; + int DMG_BOW; + int DMG_KICK; + int DOT_FIRE; + int DROP_GOLD_AMT; + float FREQ_KICK; + int GOB_CHARGER; + int GOB_JUMPER; + int KICK_ATTACK; + int KICK_HITCHANCE; + int KICK_RANGE; + int MOVE_RANGE; + string NEXT_KICK; + int NPC_BASE_EXP; + int NPC_CAP_EXP; + int NPC_RANGED; + string SOUND_BOW; + + BgoblinArcherSa() + { + NPC_BASE_EXP = 75; + NPC_CAP_EXP = 2000; + SOUND_BOW = "weapons/bow/bow.wav"; + GOB_JUMPER = 0; + GOB_CHARGER = 0; + DMG_BOW = 20; + DMG_KICK = 10; + DOT_FIRE = 10; + DMG_AOE = 40; + KICK_RANGE = 64; + KICK_HITCHANCE = 90; + FREQ_KICK = 10.0; + CAN_FIREBALL = 0; + NPC_RANGED = 1; + ANIM_ATTACK = "shootorcbow"; + } + + void goblin_spawn() + { + SetName("Blood Goblin Needler"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(125); + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetProp(GetOwner(), "skin", 1); + SetModelBody(0, 1); + SetModelBody(1, 2); + SetModelBody(2, 2); + SetModelBody(3, 0); + SetRoam(true); + SetHearingSensitivity(2); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(0.01, "gob_extras"); + } + + void gob_extras() + { + MOVE_RANGE = 2000; + ATTACK_RANGE = 2000; + ATTACK_HITRANGE = 2000; + DROP_GOLD_AMT = RandomInt(30, 50); + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void shoot_arrow() + { + string TARGET_DIST = GetEntityRange(m_hLastSeen); + string FINAL_TARGET = GetEntityOrigin(m_hLastSeen); + FINAL_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, TARGET_DIST)); + TARGET_DIST /= 100; + SetAngles("add_view.pitch"); + TossProjectile("proj_arrow_npc_dyn", /* TODO: $relpos */ $relpos(0, 0, 7), "none", 900, DMG_BOW, 2, "none"); + CallExternal("ent_lastprojectile", "ext_lighten", 0.4, 1, Vector3(255, 0, 0)); + SetModelBody(3, 0); + EmitSound(GetOwner(), SOUND_BOW); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(3, 0); + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(GetEntityRange(m_hAttackTarget) < KICK_RANGE)) return; + if (!(GetGameTime() > NEXT_KICK)) return; + NEXT_KICK = GetGameTime(); + PlayAnim("once", "break"); + SetModelBody(3, 0); + NEXT_KICK += FREQ_KICK; + ANIM_ATTACK = ANIM_KICK; + } + + void kick_land() + { + DoDamage(m_hAttackTarget, KICK_RANGE, DMG_KICK, KICK_HITCHANCE, "blunt"); + KICK_ATTACK = 1; + ANIM_ATTACK = ANIM_BOW; + npcatk_flee(m_hAttackTarget, 1024, 3.0); + } + + void OnFlee() + { + SetMoveSpeed(2.0); + } + + void npcatk_stopflee() + { + SetMoveSpeed(1.0); + } + + void game_dodamage() + { + if ((KICK_ATTACK)) + { + if ((param1)) + { + } + if (GetEntityRange(param2) < KICK_RANGE) + { + } + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + if (NPC_ADJ_LEVEL > 2) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 600, 110)); + } + } + KICK_ATTACK = 0; + } + + void ext_arrow_hit() + { + if (NPC_ADJ_LEVEL > 2) + { + if (GetRelationship(GetOwner()) == "enemy") + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 600, 110)); + } + if (NPC_ADJ_LEVEL < 3) + { + if (GetRelationship(GetOwner()) == "enemy") + { + } + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + else + { + string ARROW_POS = param3; + if ((IsEntityAlive(param2))) + { + string ARROW_POS = GetEntityOrigin(param2); + } + ARROW_POS = "z"; + ClientEvent("new", "all", "effects/sfx_fire_burst", ARROW_POS, 128, 1, Vector3(255, 0, 0)); + XDoDamage(ARROW_POS, 128, DMG_AOE, 0, GetOwner(), GetOwner(), "none", "fire_effect"); + } + } + +} + +} diff --git a/scripts/angelscript/orc_for/boar2.as b/scripts/angelscript/orc_for/boar2.as new file mode 100644 index 00000000..44389ace --- /dev/null +++ b/scripts/angelscript/orc_for/boar2.as @@ -0,0 +1,53 @@ +#pragma context server + +#include "monsters/boar2.as" + +namespace MS +{ + +class Boar2 : CGameScript +{ + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BOAR_HEIGHT2; + string BOAR_MODEL; + int BOAR_SIZE; + int BOAR_SKIN; + int BOAR_WIDTH2; + int DMG_CHARGE; + int DMG_GORE1; + float DMG_GORE2; + float DMG_GORE3; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + float FLEE_CHANCE; + int NPC_GIVE_EXP; + + Boar2() + { + BOAR_WIDTH2 = 32; + BOAR_HEIGHT2 = 75; + BOAR_SIZE = 2; + BOAR_SKIN = 0; + BOAR_MODEL = "monsters/boar2.mdl"; + NPC_GIVE_EXP = 125; + DMG_GORE1 = 60; + DMG_GORE2 = Random(10.0, 15.0); + DMG_GORE3 = Random(10.0, 15.0); + DMG_CHARGE = RandomInt(50, 100); + ATTACK_HITCHANCE = 0.7; + FLEE_CHANCE = 0.1; + } + + void OnPostSpawn() override + { + DROP_ITEM1 = "skin_boar_heavy"; + DROP_ITEM1_CHANCE = 0.5; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 100; + } + +} + +} diff --git a/scripts/angelscript/orc_for/djinn_ogre_fire_sa.as b/scripts/angelscript/orc_for/djinn_ogre_fire_sa.as new file mode 100644 index 00000000..88627d74 --- /dev/null +++ b/scripts/angelscript/orc_for/djinn_ogre_fire_sa.as @@ -0,0 +1,115 @@ +#pragma context server + +#include "monsters/djinn_ogre_fire.as" + +namespace MS +{ + +class DjinnOgreFireSa : CGameScript +{ + string ANIM_WARCRY; + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_BASE_EXP; + int NPC_SELF_ADJUST; + string SOUND_WARCRY; + int START_SUSPEND; + + DjinnOgreFireSa() + { + NPC_BASE_EXP = 4000; + NPC_SELF_ADJUST = 1; + NPC_ADJ_TIERS = "0;500;1000;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.0;1.5;2.0;5.0;7.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;1.0;1.25;2.0;5.0;7.0;"; + START_SUSPEND = 1; + SOUND_WARCRY = "bullchicken/bc_attackgrowl3.wav"; + ANIM_WARCRY = "warcry"; + } + + void game_precache() + { + Precache("monsters/djinn_ogre_fire"); + } + + void OnSpawn() override + { + SetName("fire_djinn"); + SetInvincible(true); + npcatk_suspend_ai(); + } + + void final_postspawn() + { + npcatk_suspend_ai(); + } + + void kill_zugdah() + { + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + ScheduleDelayedEvent(1.0, "kill_summoner"); + } + + void kill_summoner() + { + PlayAnim("critical", "attack1"); + CallExternal(FindEntityByName("orc_summoner"), "ext_me_die"); + // PlayRandomSound from: SOUND_SWIPEHIT1, SOUND_SWIPEHIT2 + array sounds = {SOUND_SWIPEHIT1, SOUND_SWIPEHIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(1.0, "bring_the_pain"); + } + + void bring_the_pain() + { + UseTrigger("twal_shaman_block"); + SetRoam(true); + SetInvincible(false); + npcatk_resume_ai(); + ScheduleDelayedEvent(4.0, "start_da_musak"); + } + + void start_da_musak() + { + GetAllPlayers(PLAYER_LIST); + GetTokenCount(PLAYER_LIST, ";")("start_musak"); + ScheduleDelayedEvent(45.0, "start_da_musak2"); + } + + void start_musak() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if (GetEntityRange(CUR_TARG) < 768) + { + CallExternal(CUR_TARG, "ext_orcfor_boss_musak", 1); + } + } + + void start_da_musak2() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(80.0, "start_da_musak2"); + if (!(m_hAttackTarget != "unset")) return; + GetAllPlayers(PLAYER_LIST); + GetTokenCount(PLAYER_LIST, ";")("start_musak2"); + } + + void start_musak2() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if (GetEntityRange(CUR_TARG) < 768) + { + CallExternal(CUR_TARG, "ext_orcfor_boss_musak", 2); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal("players", "ext_orcfor_boss_musak", 3, GetEntityOrigin(GetOwner())); + } + +} + +} diff --git a/scripts/angelscript/orc_for/game_master.as b/scripts/angelscript/orc_for/game_master.as new file mode 100644 index 00000000..fce2f201 --- /dev/null +++ b/scripts/angelscript/orc_for/game_master.as @@ -0,0 +1,17 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + void gm_orcfor_sham_start() + { + LogDebug("gm_orcfor_sham_start by GetEntityName(param1)"); + string SUMMONER_ID = FindEntityByName("orc_summoner"); + CallExternal(SUMMONER_ID, "ext_players_r_here"); + } + +} + +} diff --git a/scripts/angelscript/orc_for/goblin_archer_sa.as b/scripts/angelscript/orc_for/goblin_archer_sa.as new file mode 100644 index 00000000..9a0ff040 --- /dev/null +++ b/scripts/angelscript/orc_for/goblin_archer_sa.as @@ -0,0 +1,161 @@ +#pragma context server + +#include "orc_for/tiers2.as" +#include "orc_for/goblin_base.as" + +namespace MS +{ + +class GoblinArcherSa : CGameScript +{ + string ANIM_ATTACK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FIREBALL; + int DMG_BOW; + int DMG_KICK; + int DROP_GOLD_AMT; + float FREQ_KICK; + int GOB_CHARGER; + int GOB_JUMPER; + int KICK_ATTACK; + int KICK_HITCHANCE; + int KICK_RANGE; + int MOVE_RANGE; + string NEXT_KICK; + int NPC_BASE_EXP; + int NPC_CAP_EXP; + int NPC_RANGED; + string SOUND_BOW; + + GoblinArcherSa() + { + NPC_CAP_EXP = 500; + NPC_BASE_EXP = 50; + SOUND_BOW = "weapons/bow/bow.wav"; + GOB_JUMPER = 0; + GOB_CHARGER = 0; + DMG_BOW = 20; + DMG_KICK = 10; + KICK_RANGE = 64; + KICK_HITCHANCE = 90; + FREQ_KICK = 10.0; + CAN_FIREBALL = 0; + NPC_RANGED = 1; + ANIM_ATTACK = "shootorcbow"; + } + + void goblin_spawn() + { + SetName("Goblin Needler"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(75); + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetModelBody(0, 1); + SetModelBody(1, 2); + SetModelBody(2, 2); + SetModelBody(3, 0); + SetRoam(true); + SetHearingSensitivity(2); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(0.01, "gob_extras"); + } + + void gob_extras() + { + MOVE_RANGE = 2000; + ATTACK_RANGE = 2000; + ATTACK_HITRANGE = 2000; + DROP_GOLD_AMT = RandomInt(30, 50); + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void shoot_arrow() + { + string TARGET_DIST = GetEntityRange(m_hLastSeen); + string FINAL_TARGET = GetEntityOrigin(m_hLastSeen); + FINAL_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, TARGET_DIST)); + TARGET_DIST /= 100; + SetAngles("add_view.pitch"); + TossProjectile("proj_arrow_npc_dyn", /* TODO: $relpos */ $relpos(0, 0, 7), "none", 900, DMG_BOW, 2, "none"); + CallExternal(GetEntityIndex("ent_lastprojectile"), "ext_lighten", 0.4, 0, 0, 0.5); + SetModelBody(3, 0); + EmitSound(GetOwner(), SOUND_BOW); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(3, 0); + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(GetEntityRange(m_hAttackTarget) < KICK_RANGE)) return; + if (!(GetGameTime() > NEXT_KICK)) return; + NEXT_KICK = GetGameTime(); + PlayAnim("once", "break"); + SetModelBody(3, 0); + NEXT_KICK += FREQ_KICK; + ANIM_ATTACK = ANIM_KICK; + } + + void kick_land() + { + DoDamage(m_hAttackTarget, KICK_RANGE, DMG_KICK, KICK_HITCHANCE, "blunt"); + KICK_ATTACK = 1; + ANIM_ATTACK = ANIM_BOW; + npcatk_flee(m_hAttackTarget, 1024, 3.0); + } + + void OnFlee() + { + SetMoveSpeed(2.0); + } + + void npcatk_stopflee() + { + SetMoveSpeed(1.0); + } + + void game_dodamage() + { + if ((KICK_ATTACK)) + { + if ((param1)) + { + } + if (GetEntityRange(param2) < KICK_RANGE) + { + } + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + if (NPC_ADJ_LEVEL > 2) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 600, 110)); + } + } + KICK_ATTACK = 0; + } + + void ext_arrow_hit() + { + if (NPC_ADJ_LEVEL > 2) + { + if (GetRelationship(GetOwner()) == "enemy") + { + } + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 600, 110)); + } + } + +} + +} diff --git a/scripts/angelscript/orc_for/goblin_base.as b/scripts/angelscript/orc_for/goblin_base.as new file mode 100644 index 00000000..81fa7181 --- /dev/null +++ b/scripts/angelscript/orc_for/goblin_base.as @@ -0,0 +1,525 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class GoblinBase : CGameScript +{ + string ANIM_BOW; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_PARRY; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WARCRY; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int CHARGE_SPEED; + int CYCLES_STARTED; + string DBL_JUMP; + int DMG_AXE; + int DMG_CLUB; + int DMG_FIREBALL; + int DMG_FIREBALL_DOT; + int DMG_SWORD; + int DROP_GOLD; + int DROP_GOLD_AMT; + string FLINCH_ANIM; + float FLINCH_CHANCE; + int FLINCH_HEALTH; + float FREQ_CHARGE; + float FREQ_FIREBALL; + float FREQ_GOB_JUMP; + float FREQ_LEAP_AWAY; + float FREQ_ZDIFF_JUMP; + string FWD_JUMP_STR; + int GOBLIN_JUMPRANGE; + int GOB_CHARGER; + int GOB_CHARGE_MAX_DIST; + int GOB_CHARGE_MIN_DIST; + int GOB_JUMPER; + int GOB_JUMP_SCANNING; + string GOB_LEAP_AWAY_THRESHOLD; + int GOB_MAX_ZDIFF_JUMP_RANGE; + string GOB_NEXT_JUMP; + int GOB_TYPE; + int MIN_FIREBALL_DIST; + int MOVE_RANGE; + int NEW_MODEL; + string NEXT_CHARGE; + string NEXT_FIREBALL; + string NEXT_GOB_HOP; + string NEXT_LEAP_AWAY; + string NEXT_ZDIFF_JUMP; + int NPC_ALLY_RESPONSE_RANGE; + int NPC_GIVE_EXP; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_CHIEF_ALERT; + string SOUND_DEATH; + string SOUND_FIREBALL; + string SOUND_FIREBALL_CAST; + string SOUND_IDLE; + string SOUND_JUMP1; + string SOUND_JUMP2; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PARRY1; + string SOUND_PARRY2; + string SOUND_PARRY3; + string SOUND_SHAM_ALERT; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string STUN_LIST; + int TOSS_FIREBALL; + string UP_JUMP_STR; + + GoblinBase() + { + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 120; + ATTACK_MOVERANGE = 48; + MOVE_RANGE = 48; + NPC_GIVE_EXP = 200; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(10, 15); + NPC_ALLY_RESPONSE_RANGE = 4096; + ANIM_DEATH = "die_fallback"; + CAN_FLINCH = 1; + FLINCH_ANIM = "flinch"; + FLINCH_CHANCE = 0.25; + FLINCH_HEALTH = 100; + ANIM_SMASH = "battleaxe_swing1_L"; + ANIM_SWIPE = "swordswing1_L"; + ANIM_WARCRY = "warcry"; + ANIM_KICK = "kick"; + ANIM_BOW = "shootorcbow"; + DMG_CLUB = RandomInt(40, 75); + DMG_AXE = RandomInt(50, 60); + DMG_SWORD = RandomInt(25, 50); + GOB_TYPE = RandomInt(1, 3); + GOBLIN_JUMPRANGE = 512; + DMG_FIREBALL = 50; + DMG_FIREBALL_DOT = 10; + FREQ_FIREBALL = Random(20.0, 30.0); + GOB_JUMPER = 1; + ANIM_PARRY = "deflectcounter"; + CHARGE_SPEED = 600; + FREQ_CHARGE = 10.0; + GOB_CHARGER = 1; + GOB_CHARGE_MIN_DIST = 128; + GOB_CHARGE_MAX_DIST = 256; + MIN_FIREBALL_DIST = 96; + FREQ_LEAP_AWAY = Random(5.0, 10.0); + FREQ_GOB_JUMP = Random(3.0, 8.0); + NEW_MODEL = 1; + FREQ_ZDIFF_JUMP = Random(2.0, 4.0); + GOB_MAX_ZDIFF_JUMP_RANGE = 600; + SOUND_STRUCK1 = "body/flesh1.wav"; + SOUND_STRUCK2 = "body/flesh2.wav"; + SOUND_STRUCK3 = "body/flesh3.wav"; + SOUND_PAIN1 = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_PAIN2 = "monsters/goblin/c_gargoyle_hit2.wav"; + SOUND_ALERT1 = "monsters/goblin/c_goblin_bat1.wav"; + SOUND_ALERT2 = "monsters/goblin/c_goblin_bat2.wav"; + SOUND_IDLE = "monsters/goblin/c_goblin_slct.wav"; + SOUND_ATTACK1 = "monsters/goblin/c_goblin_atk1.wav"; + SOUND_ATTACK2 = "monsters/goblin/c_goblin_atk2.wav"; + SOUND_ATTACK3 = "monsters/goblin/c_goblin_atk3.wav"; + SOUND_FIREBALL_CAST = "monsters/goblin/c_gargoyle_slct.wav"; + SOUND_FIREBALL = "magic/fireball_strike.wav"; + SOUND_IDLE = "monsters/goblin/c_goblin_slct.wav"; + SOUND_JUMP1 = "monsters/goblin/c_goblin_hit1.wav"; + SOUND_JUMP2 = "monsters/goblin/c_goblin_hit2.wav"; + SOUND_PARRY1 = "body/armour1.wav"; + SOUND_PARRY2 = "body/armour2.wav"; + SOUND_PARRY3 = "body/armour3.wav"; + SOUND_CHIEF_ALERT = "monsters/goblin/c_goblinchf_bat1.wav"; + SOUND_SHAM_ALERT = "monsters/goblin/c_goblinwiz_bat1.wav"; + SOUND_DEATH = "monsters/goblin/c_goblin_dead.wav"; + Precache(SOUND_DEATH); + } + + void OnSpawn() override + { + SetBloodType("red"); + SetRoam(true); + SetHearingSensitivity(2); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + goblin_spawn(); + ScheduleDelayedEvent(2.0, "final_post_spawn_checks"); + ScheduleDelayedEvent(1.0, "idle_mode"); + ScheduleDelayedEvent(0.01, "goblin_pre_spawn"); + } + + void goblin_pre_spawn() + { + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 120; + ATTACK_MOVERANGE = 48; + MOVE_RANGE = 48; + } + + void goblin_spawn() + { + ScheduleDelayedEvent(0.01, "goblin_set_weapon"); + } + + void final_post_spawn_checks() + { + GOB_LEAP_AWAY_THRESHOLD = GetEntityMaxHealth(GetOwner()); + GOB_LEAP_AWAY_THRESHOLD *= 0.05; + } + + void swing_axe() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (F_GOB_TYPE == 1) + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLUB, ATTACK_HITCHANCE, "blunt"); + } + if (F_GOB_TYPE == 2) + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, "slash"); + } + } + + void swing_sword() + { + if ((TOSS_FIREBALL)) + { + toss_fireball(); + } + if ((TOSS_FIREBALL)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWORD, ATTACK_HITCHANCE, "slash"); + } + + void toss_fireball() + { + TOSS_FIREBALL = 0; + string L_POS = GetEntityOrigin(GetOwner()); + L_POS += /* TODO: $relpos */ $relpos(GetEntityAngles(GetOwner()), Vector3(0, 48, 28)); + TossProjectile("proj_fire_ball", L_POS, m_hAttackTarget, 400, DMG_FIREBALL, 0.5, "none"); + CallExternal("ent_lastprojectile", "lighten", DMG_FIREBALL_DOT, 0.01); + EmitSound(GetOwner(), 0, SOUND_FIREBALL, 10); + } + + void OnHuntTarget(CBaseEntity@ target) + { + gob_hunt(); + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if ((SUSPEND_AI)) return; + if ((I_R_FROZEN)) return; + if ((CAN_FIREBALL)) + { + if (!(IS_FLEEING)) + { + } + if (GetGameTime() > NEXT_FIREBALL) + { + } + prep_fireball(); + } + if (!(GOB_CHARGER)) return; + if ((I_R_FROZEN)) return; + if ((IS_FLEEING)) return; + if ((AM_LATCHED)) return; + if ((IN_LEAP)) return; + if ((LEAP_MODE)) return; + if (GetGameTime() > NEXT_ZDIFF_JUMP) + { + if ((GOB_JUMPER)) + { + } + if (GetEntityRange(m_hAttackTarget) < GOB_MAX_ZDIFF_JUMP_RANGE) + { + if (GetGameTime() > NEXT_ZDIFF_JUMP) + { + } + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + string TARG_Z = GetEntityProperty(m_hAttackTarget, "origin.z"); + if ((IsValidPlayer(m_hAttackTarget))) + { + TARG_Z -= 38; + } + string Z_DIFF = TARG_Z; + Z_DIFF -= MY_Z; + if (Z_DIFF > ATTACK_RANGE) + { + gob_hop_zdiff(Z_DIFF); + int EXIT_SUB = 1; + NEXT_ZDIFF_JUMP = GetGameTime(); + NEXT_ZDIFF_JUMP += FREQ_ZDIFF_JUMP; + GOB_NEXT_JUMP = GetGameTime(); + GOB_NEXT_JUMP += FREQ_GOB_JUMP; + } + } + if (!(EXIT_SUB + 1)) + { + } + if (GetEntityRange(m_hAttackTarget) > GOB_CHARGE_MIN_DIST) + { + } + if (GetEntityRange(m_hAttackTarget) < GOB_CHARGE_MAX_DIST) + { + } + } + if ((EXIT_SUB + 1)) return; + if ((GOB_JUMPER)) + { + if (GetGameTime() > GOB_NEXT_JUMP) + { + } + if (GetEntityRange(m_hAttackTarget) < GOBLIN_JUMPRANGE) + { + } + if (GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE) + { + } + GOB_NEXT_JUMP = GetGameTime(); + GOB_NEXT_JUMP += FREQ_GOB_JUMP; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE < 500) + { + } + PlayAnim("critical", ANIM_SMASH); + ScheduleDelayedEvent(0.1, "gob_hop"); + NEXT_ZDIFF_JUMP = GetGameTime(); + NEXT_ZDIFF_JUMP += FREQ_ZDIFF_JUMP; + } + if (GetGameTime() > NEXT_CHARGE) + { + leap_forward(); + } + } + + void prep_fireball() + { + if (!(GetEntityRange(m_hAttackTarget) > MIN_FIREBALL_DIST)) return; + if (!(false)) return; + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + TOSS_FIREBALL = 1; + PlayAnim("critical", ANIM_SWIPE); + EmitSound(GetOwner(), 0, SOUND_FIREBALL_CAST, 10); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 10.0; + } + + void leap_forward() + { + NEXT_CHARGE = GetGameTime(); + NEXT_CHARGE += FREQ_CHARGE; + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2 + array sounds = {SOUND_JUMP1, SOUND_JUMP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_SMASH); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, CHARGE_SPEED, 100)); + ScheduleDelayedEvent(0.5, "leap_stun"); + } + + void leap_stun() + { + STUN_LIST = FindEntitiesInSphere("enemy", 64); + if (!(STUN_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(STUN_LIST, ";"); i++) + { + stun_targets(); + } + } + + void stun_targets() + { + string CUR_TARGET = GetToken(STUN_LIST, i, ";"); + AddVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(0, 200, 120)); + if ((CAN_STUN)) + { + ApplyEffect(CUR_TARGET, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + } + } + + void cycle_up() + { + gob_cycle_up(); + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + jump_check(); + } + + void gob_cycle_up() + { + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += Random(10, 30); + if ((GOB_JUMP_SCANNING)) return; + GOB_JUMP_SCANNING = 1; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void cycle_down() + { + GOB_JUMP_SCANNING = 0; + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(1.0, "idle_mode"); + } + + void gob_hop() + { + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2 + array sounds = {SOUND_JUMP1, SOUND_JUMP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + int JUMP_HEIGHT = RandomInt(350, 550); + if ((DBL_JUMP)) + { + JUMP_HEIGHT *= 2.0; + DBL_JUMP = 0; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 250, JUMP_HEIGHT)); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(2, 0); + } + + void idle_mode() + { + if (!(m_hAttackTarget == "unset")) return; + if (!(false)) return; + SetMoveDest(m_hLastSeen); + PlayAnim("once", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_IDLE, 10); + Random(10, 20)("idle_mode"); + CallExternal(m_hLastSeen, "ext_faceme", GetEntityIndex(GetOwner())); + } + + void ext_faceme() + { + if (!(m_hAttackTarget == "unset")) return; + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "reply_anim"); + } + + void reply_anim() + { + PlayAnim("once", ANIM_WARCRY); + } + + void OnDamage(int damage) override + { + if (!(AM_LATCHED)) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + else + { + CallExternal(LATCH_TARGET, "ext_playrandomsound", 0, 5, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2); + } + if (param2 > GOB_LEAP_AWAY_THRESHOLD) + { + if (!(AIMING_CAGE)) + { + } + if (GetGameTime() > NEXT_LEAP_AWAY) + { + } + if (GetEntityRange(param1) < 150) + { + } + NEXT_LEAP_AWAY = GetGameTime(); + NEXT_LEAP_AWAY += FREQ_LEAP_AWAY; + if (!(AM_LATCHED)) + { + } + if (!(IN_LEAP)) + { + } + if (!(LEAP_MODE)) + { + } + gob_leap_away(GetEntityIndex(param1)); + } + } + + void gob_leap_away() + { + npcatk_flee(GetEntityIndex(param1), 512, 1.0); + ScheduleDelayedEvent(0.1, "gob_leap_away2"); + } + + void gob_leap_away2() + { + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2 + array sounds = {SOUND_JUMP1, SOUND_JUMP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_SMASH); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, CHARGE_SPEED, 100)); + } + + void npc_selectattack() + { + string L_NEXT_GOB_HOP = NEXT_GOB_HOP; + L_NEXT_GOB_HOP += 1.0; + if (!(GetGameTime() > L_NEXT_GOB_HOP)) return; + NEXT_GOB_HOP = GetGameTime(); + NEXT_GOB_HOP += 2.0; + } + + void gob_hop_zdiff() + { + PlayAnim("critical", ANIM_SMASH); + // PlayRandomSound from: SOUND_JUMP1, SOUND_JUMP2 + array sounds = {SOUND_JUMP1, SOUND_JUMP2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + UP_JUMP_STR = param1; + UP_JUMP_STR *= 5; + SetMoveDest(m_hAttackTarget); + if (!(SUSPEND_AI)) + { + npcatk_suspend_ai(1.0); + } + FWD_JUMP_STR = GetEntityRange(m_hAttackTarget); + ScheduleDelayedEvent(0.1, "gob_hop_zdiff_boost"); + } + + void gob_hop_zdiff_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, FWD_JUMP_STR, UP_JUMP_STR)); + } + +} + +} diff --git a/scripts/angelscript/orc_for/goblin_pouncer_sa.as b/scripts/angelscript/orc_for/goblin_pouncer_sa.as new file mode 100644 index 00000000..160d9a74 --- /dev/null +++ b/scripts/angelscript/orc_for/goblin_pouncer_sa.as @@ -0,0 +1,424 @@ +#pragma context server + +#include "orc_for/goblin_base.as" + +namespace MS +{ + +class GoblinPouncerSa : CGameScript +{ + int AM_LATCHED; + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_LEAP; + string ANIM_LEAP_READY; + string ANIM_LEAP_RIDE; + string ANIM_RUN; + string ANIM_WALK; + int AS_CUSTOM_UNSTUCK; + float ATTACK_HITCHANCE; + string DID_WARNING; + int DMG_POUND; + int DMG_SWORD; + float FREQ_LAUGH; + float FREQ_LEAP; + int GOBLIN_SELF_ADJUST; + int IN_LEAP; + string LATCH_END; + string LATCH_TARGET; + int LEAP_MODE; + int LEAP_RANGE; + string LEAP_TARGET; + string NEXT_LATCH_ATTEMPT; + string NEXT_LAUGH; + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_BASE_EXP; + int NPC_FORCED_MOVEDEST; + string NPC_SELF_ADJUST; + int PICKED_RANDOM; + string SOUND_LAUGH; + string SOUND_LEAP_GO; + string SOUND_LEAP_READY; + int WAS_LATCHED; + + GoblinPouncerSa() + { + ANIM_LEAP_READY = "pounce_ready"; + ANIM_LEAP = "pounce_fly"; + ANIM_LEAP_RIDE = "pounce_latch"; + ANIM_ATTACK = "swordswing1_L"; + AS_CUSTOM_UNSTUCK = 1; + GOBLIN_SELF_ADJUST = 1; + NPC_SELF_ADJUST = GOBLIN_SELF_ADJUST; + NPC_ADJ_TIERS = "0;750;1500;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.5;2.0;5.0;7.5;10.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;2.0;3.0;5.0;7.5;10.0;"; + NPC_BASE_EXP = 200; + ATTACK_HITCHANCE = 0.9; + LEAP_RANGE = 500; + FREQ_LEAP = 15.0; + DMG_SWORD = 15; + DMG_POUND = 5; + FREQ_LAUGH = Random(5.0, 10.0); + SOUND_LEAP_READY = "monsters/goblin/c_gargoyle_bat1.wav"; + SOUND_LEAP_GO = "monsters/goblin/c_gargoyle_atk3.wav"; + SOUND_LAUGH = "monsters/goblin/c_gargoyle_bat2.wav"; + } + + void goblin_spawn() + { + SetName("Goblin Pouncer"); + SetModel("monsters/goblin_new.mdl"); + SetHealth(50); + SetWidth(24); + SetHeight(50); + SetRace("goblin"); + SetBloodType("red"); + SetRoam(true); + SetHearingSensitivity(2); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 3); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void npc_targetsighted() + { + if ((LEAP_MODE)) return; + if (!(GetGameTime() > NEXT_LATCH_ATTEMPT)) return; + if (!(GetEntityRange(m_hAttackTarget) < LEAP_RANGE)) return; + if ((GetEntityProperty(m_hAttackTarget, "haseffect"))) return; + LEAP_MODE = 1; + NEXT_LATCH_ATTEMPT = GetGameTime(); + NEXT_LATCH_ATTEMPT += FREQ_LEAP; + leap_ready(); + } + + void leap_ready() + { + EmitSound(GetOwner(), 0, SOUND_LEAP_READY, 10); + LEAP_TARGET = m_hAttackTarget; + if (!(DID_WARNING)) + { + DID_WARNING = 1; + SendInfoMsg(LEAP_TARGET, "Beware the Goblin Pouncer If he pounces you, you'll have to be rescued by another player!"); + } + ready_leap_mode(); + leap_target_loop(); + ScheduleDelayedEvent(3.0, "do_leap"); + } + + void leap_target_loop() + { + LogDebug("leap_target_loop"); + if (!(LEAP_MODE)) return; + if ((IN_LEAP)) return; + SetMoveDest(LEAP_TARGET); + ScheduleDelayedEvent(0.1, "leap_target_loop"); + } + + void do_leap() + { + LogDebug("do_leap"); + if ((false)) + { + if ((GetEntityProperty(LEAP_TARGET, "scriptvar"))) + { + exit_leap_mode(); + NEXT_LATCH_ATTEMPT = GetGameTime(); + NEXT_LATCH_ATTEMPT += 2.0; + LEAP_MODE = 0; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetEntityRange(LEAP_TARGET) < LEAP_RANGE) + { + EmitSound(GetOwner(), 0, SOUND_LEAP_GO, 10); + PlayAnim("hold", ANIM_LEAP); + if (!(I_R_FROZEN)) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 1000, 200)); + } + IN_LEAP = 1; + ScheduleDelayedEvent(1.0, "end_leap_scan"); + leap_scan(); + } + else + { + exit_leap_mode(); + NEXT_LATCH_ATTEMPT = GetGameTime(); + NEXT_LATCH_ATTEMPT += 2.0; + LEAP_MODE = 0; + } + } + else + { + exit_leap_mode(); + NEXT_LATCH_ATTEMPT = GetGameTime(); + NEXT_LATCH_ATTEMPT += 5.0; + LEAP_MODE = 0; + } + } + + void leap_scan() + { + if (!(IN_LEAP)) return; + LogDebug("leap_scan"); + if (GetEntityRange(LEAP_TARGET) < 64) + { + if (!(I_R_FROZEN)) + { + } + latch_target(LEAP_TARGET); + } + else + { + string SCAN_TOKENS = FindEntitiesInSphere("enemy", 64); + if (SCAN_TOKENS != "none") + { + } + string SCAN_NME = GetToken(SCAN_TOKENS, 0, ";"); + if ((IsEntityAlive(SCAN_NME))) + { + } + LEAP_TARGET = SCAN_NME; + latch_target(LEAP_TARGET); + } + if ((AM_LATCHED)) return; + if (!(IN_LEAP)) return; + ScheduleDelayedEvent(0.1, "leap_scan"); + } + + void end_leap_scan() + { + LogDebug("end_leap_scan"); + IN_LEAP = 0; + if ((AM_LATCHED)) return; + LEAP_MODE = 0; + exit_leap_mode(); + NEXT_LATCH_ATTEMPT = GetGameTime(); + NEXT_LATCH_ATTEMPT += FREQ_LEAP; + } + + void latch_target() + { + if ((GetEntityProperty(param1, "haseffect"))) return; + LogDebug("latch_target"); + AM_LATCHED = 1; + LATCH_TARGET = param1; + PlayAnim("once", "break"); + ride_mode(); + string LATCH_POS = GetEntityOrigin(LATCH_TARGET); + string TARG_YAW = GetEntityProperty(LATCH_TARGET, "angles.yaw"); + LATCH_POS += /* TODO: $relpos */ $relpos(Vector3(0, TARG_YAW, 0), Vector3(0, -16, 32)); + SetEntityOrigin(GetOwner(), LATCH_POS); + SetAngles("face"); + SetFollow(LATCH_TARGET); + LATCH_END = GetGameTime(); + LATCH_END += 20.0; + latch_think(); + ApplyEffect(LATCH_TARGET, "effects/goblin_latch", 20, GetEntityIndex(GetOwner())); + if (!(IsValidPlayer(LATCH_TARGET))) return; + string OUT_TITLE = GetEntityName(LATCH_TARGET); + string OUT_MSG = "Has been pounced!"; + SendInfoMsg("all", OUT_TITLE + OUT_MSG); + } + + void player_left() + { + if (!(AM_LATCHED)) return; + if (!(param1 == LATCH_TARGET)) return; + end_latch(); + } + + void latch_think() + { + LogDebug("latch_think"); + if (!(AM_LATCHED)) return; + ScheduleDelayedEvent(0.25, "latch_think"); + if (!(IsEntityAlive(LATCH_TARGET))) + { + end_latch(); + } + if (!(AM_LATCHED)) return; + if (GetGameTime() > LATCH_END) + { + end_latch(); + } + } + + void end_latch() + { + LogDebug("end_latch"); + WAS_LATCHED = 1; + PICKED_RANDOM = 0; + AM_LATCHED = 0; + LEAP_MODE = 0; + IN_LEAP = 0; + SetFollow("none"); + NEXT_LATCH_ATTEMPT = GetGameTime(); + NEXT_LATCH_ATTEMPT += FREQ_LEAP; + exit_ride_mode(); + EmitSound(GetOwner(), 0, SOUND_LAUGH, 10); + if ((IsEntityAlive(LATCH_TARGET))) + { + npcatk_flee(LATCH_TARGET, 1024, 3.0); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -600, 110)); + } + } + + void bs_global_command() + { + if (!(AM_LATCHED)) return; + if (!(param1 == LATCH_TARGET)) return; + if (!(param3 == "death")) return; + end_latch(); + } + + void OnDamage(int damage) override + { + if (!(AM_LATCHED)) return; + LogDebug("game_damaged AM_LATCHED by GetEntityName(param1) vs GetEntityName(LATCH_TARGET)"); + if (!(IsEntityAlive(LATCH_TARGET))) return; + if (!(param1 == LATCH_TARGET)) return; + if (!((param3).findFirst("effect") >= 0)) return; + SetDamage("hit"); + SetDamage("dmg"); + return; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((AM_LATCHED)) + { + SetFollow("none"); + if ((IsValidPlayer(m_hLastStruck))) + { + } + if ((IsValidPlayer(LATCH_TARGET))) + { + } + if (GetEntityIndex(m_hLastStruck) != LATCH_TARGET) + { + } + string BONUS_MSG = "for rescuing "; + BONUS_MSG += GetEntityName(LATCH_TARGET); + CallExternal(m_hLastStruck, "ext_dmgpoint_bonus", 1000, BONUS_MSG); + CallExternal(LATCH_TARGET, "ext_goblin_died"); + } + } + + void ride_mode() + { + ANIM_RUN = ANIM_LEAP_RIDE; + ANIM_WALK = ANIM_LEAP_RIDE; + ANIM_IDLE = ANIM_LEAP_RIDE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + PlayAnim("critical", ANIM_LEAP_RIDE); + npcatk_suspend_ai(); + } + + void ready_leap_mode() + { + ANIM_RUN = ANIM_LEAP_READY; + ANIM_WALK = ANIM_LEAP_READY; + ANIM_IDLE = ANIM_LEAP_READY; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + PlayAnim("hold", ANIM_LEAP_READY); + npcatk_suspend_ai(); + } + + void exit_leap_mode() + { + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_RUN); + npcatk_resume_ai(); + } + + void exit_ride_mode() + { + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_RUN); + npcatk_resume_ai(); + } + + void frame_pounce_pound() + { + if (!(AM_LATCHED)) return; + if (!(IsEntityAlive(LATCH_TARGET))) return; + DoDamage(LATCH_TARGET, "direct", DMG_POUND, 1.0, GetOwner()); + if (GetGameTime() > NEXT_LAUGH) + { + NEXT_LAUGH = GetGameTime(); + NEXT_LAUGH += FREQ_LAUGH; + int DO_LAUGH = 1; + } + if (!(DO_LAUGH)) + { + CallExternal(LATCH_TARGET, "ext_playrandomsound", 2, 5, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3); + } + else + { + CallExternal(LATCH_TARGET, "ext_playsound_kiss", 1, 10, SOUND_LAUGH); + } + } + + void npc_stuck() + { + if (!(SUSPEND_AI)) + { + as_npcatk_suspend_ai(AS_WIGGLE_DURATION); + } + NPC_FORCED_MOVEDEST = 1; + string MOVE_DEST = MY_ORG; + AS_UNSTUCK_ANG += 36; + if (AS_UNSTUCK_ANG > 359) + { + AS_UNSTUCK_ANG -= 359; + } + MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, AS_UNSTUCK_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(MOVE_DEST); + PlayAnim("once", ANIM_RUN); + LogDebug("npc_stuck STUCK_COUNT"); + if (!(WAS_LATCHED)) return; + if (!(STUCK_COUNT > 3)) return; + ext_wink_out(NPC_SPAWN_LOC, 1.0); + WAS_LATCHED = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget == "unset")) return; + if ((PICKED_RANDOM)) return; + if (!(WAS_LATCHED)) return; + if ((HUNTING_PLAYER)) return; + GetAllPlayers(TARG_LIST); + ScrambleTokens(TARG_LIST, ";"); + string RND_PLR = GetToken(TARG_LIST, 0, ";"); + if (!(IsEntityAlive(RND_PLR))) return; + PICKED_RANDOM = 1; + npcatk_settarget(RND_PLR, "random_select"); + } + +} + +} diff --git a/scripts/angelscript/orc_for/goblin_sa.as b/scripts/angelscript/orc_for/goblin_sa.as new file mode 100644 index 00000000..1cf828fe --- /dev/null +++ b/scripts/angelscript/orc_for/goblin_sa.as @@ -0,0 +1,129 @@ +#pragma context server + +#include "orc_for/tiers1.as" +#include "orc_for/goblin_base.as" + +namespace MS +{ + +class GoblinSa : CGameScript +{ + string ANIM_ATTACK; + string ATTACK_HITCHANCE; + int DMG_AXE; + int DMG_CLUB; + int DMG_SWORD; + string F_GOB_TYPE; + int GOB_TYPE_SET; + int NPC_BASE_EXP; + int NPC_CAP_EXP; + string STUN_ATTACK; + string STUN_CHANCE; + + GoblinSa() + { + NPC_BASE_EXP = 75; + NPC_CAP_EXP = 750; + DMG_CLUB = 20; + DMG_AXE = 30; + DMG_SWORD = 15; + } + + void goblin_spawn() + { + SetName("Goblin Warrior"); + SetModel("monsters/goblin_new.mdl"); + SetHealth(100); + SetWidth(24); + SetHeight(50); + SetRace("goblin"); + SetBloodType("red"); + SetRoam(true); + SetHearingSensitivity(2); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(0.01, "goblin_set_weapon"); + } + + void goblin_set_weapon() + { + if ((GOB_TYPE_SET)) return; + GOB_TYPE_SET = 1; + F_GOB_TYPE = GOB_TYPE; + if ((param1).findFirst(PARAM) == 0) + { + int DO_NADDA = 1; + } + else + { + F_GOB_TYPE = param1; + } + if (F_GOB_TYPE == 1) + { + SetModelBody(2, 7); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.7; + STUN_CHANCE = 0.25; + string MY_HP = GetEntityMaxHealth(GetOwner()); + MY_HP *= 1.5; + SetHealth(MY_HP); + } + if (F_GOB_TYPE == 2) + { + SetModelBody(2, 1); + ANIM_ATTACK = ANIM_SMASH; + ATTACK_HITCHANCE = 0.75; + string MY_HP = GetEntityMaxHealth(GetOwner()); + MY_HP *= 1.25; + SetHealth(MY_HP); + } + if (F_GOB_TYPE == 3) + { + SetModelBody(0, 0); + SetModelBody(2, 4); + ANIM_ATTACK = ANIM_SWIPE; + ATTACK_HITCHANCE = 0.8; + } + } + + void swing_axe() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if (F_GOB_TYPE == 1) + { + STUN_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLUB, ATTACK_HITCHANCE, "blunt"); + } + if (F_GOB_TYPE == 2) + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_AXE, ATTACK_HITCHANCE, "slash"); + } + } + + void game_dodamage() + { + if ((param1)) + { + if ((STUN_ATTACK)) + { + } + if (RandomInt(1, 100) < STUN_CHANCE) + { + } + if ((CAN_STUN)) + { + ApplyEffect(param2, "effects/debuff_stun", 3.0, GetEntityIndex(GetOwner())); + } + } + STUN_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/orc_for/hgoblin_lshaman_sa.as b/scripts/angelscript/orc_for/hgoblin_lshaman_sa.as new file mode 100644 index 00000000..7eaeec02 --- /dev/null +++ b/scripts/angelscript/orc_for/hgoblin_lshaman_sa.as @@ -0,0 +1,409 @@ +#pragma context server + +#include "orc_for/goblin_base.as" + +namespace MS +{ + +class HgoblinLshamanSa : CGameScript +{ + int AIMING_CAGE; + string ANIM_AIM; + string ANIM_ATTACK; + string ANIM_CAGE_SUSTAIN; + int AOE_ZAP; + int ATTACH_HAND; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string CAGE_TARGET; + string CL_IDX_ZAP_AURA; + string CL_SCRIPT; + string CL_SCRIPT_IDX; + string CUR_BEAM; + string DID_INIT; + string DID_WARN; + int DMG_AXE; + int DMG_CLUB; + int DMG_SWORD; + float DMG_ZAP; + string DOING_REPEL; + int DOT_CAGE; + float DUR_ZAP; + float FREQ_CAGE; + float FREQ_FX_REFRESH; + float FREQ_REPEL; + int GOB_CHARGER; + int GOB_JUMPER; + int MOVE_RANGE; + string NEXT_CAGE; + string NEXT_CL_REFRESH; + string NEXT_REPEL; + string NEXT_UPDATE_LOOP_SOUND; + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_BASE_EXP; + int NPC_SELF_ADJUST; + string SOUND_BEAM_LOOP; + string SOUND_BEAM_START; + string SOUND_CAGE_PREP; + string SOUND_GIGGLE; + string SUSTAINING_CAGE; + int SWIPE_ATTACK; + string ZAP_TARGS; + + HgoblinLshamanSa() + { + ANIM_AIM = "zap_aim"; + ANIM_CAGE_SUSTAIN = "zap_cycle"; + ANIM_ATTACK = "swordswing1_L"; + NPC_SELF_ADJUST = 1; + NPC_ADJ_TIERS = "0;750;1500;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.5;2.0;5.0;7.5;10.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;2.0;3.0;5.0;7.5;10.0;"; + NPC_BASE_EXP = 300; + DMG_CLUB = 20; + DMG_AXE = 30; + DMG_SWORD = 15; + GOB_JUMPER = 0; + GOB_CHARGER = 0; + FREQ_CAGE = 30.0; + DOT_CAGE = 60; + FREQ_REPEL = Random(30.0, 40.0); + ATTACK_HITCHANCE = 0.9; + AOE_ZAP = 128; + DUR_ZAP = 10.0; + DMG_ZAP = 40.0; + ATTACH_HAND = 0; + CL_SCRIPT = "monsters/djinn_lightning_lesser_cl"; + FREQ_FX_REFRESH = 15.0; + SOUND_BEAM_START = "magic/bolt_start.wav"; + SOUND_BEAM_LOOP = "magic/bolt_loop.wav"; + SOUND_CAGE_PREP = "magic/lightning_powerup.wav"; + SOUND_GIGGLE = "monsters/goblin/c_goblinwiz_bat1.wav"; + } + + void goblin_spawn() + { + SetName("Hobgoblin Lightning Shaman"); + SetModel("monsters/goblin_new.mdl"); + SetHealth(400); + SetWidth(24); + SetHeight(50); + SetRace("goblin"); + SetBloodType("green"); + SetRoam(true); + SetHearingSensitivity(2); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 4); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("acid", 2.0); + SetDamageResistance("poison", 1.25); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void goblin_pre_spawn() + { + ATTACK_RANGE = 128; + ATTACK_HITRANGE = 256; + ATTACK_MOVERANGE = 96; + MOVE_RANGE = 96; + } + + void npc_targetsighted() + { + if (!(DID_INIT)) + { + DID_INIT = 1; + NEXT_REPEL = GetGameTime(); + NEXT_REPEL += FREQ_REPEL; + NEXT_CAGE = GetGameTime(); + NEXT_CAGE += 10.0; + } + if (GetGameTime() > NEXT_CL_REFRESH) + { + if (CL_SCRIPT_IDX != "CL_SCRIPT_IDX") + { + ClientEvent("update", "all", CL_SCRIPT_IDX, "remove_fx"); + } + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner()), FREQ_FX_REFRESH); + CL_SCRIPT_IDX = "game.script.last_sent_id"; + NEXT_CL_REFRESH = GetGameTime(); + NEXT_CL_REFRESH += FREQ_FX_REFRESH; + } + if ((AIMING_CAGE)) return; + if ((SUSTAINING_CAGE)) return; + if ((DOING_REPEL)) return; + if (GetGameTime() > NEXT_REPEL) + { + if ((IsEntityAlive(m_hLastStruck))) + { + if (GetEntityRange(m_hLastStruck) < 128) + { + int WILL_DO_REPEL = 1; + } + } + if (GetEntityRange(m_hAttackTarget) < 128) + { + int WILL_DO_REPEL = 1; + } + if ((WILL_DO_REPEL)) + { + } + NEXT_REPEL = GetGameTime(); + NEXT_REPEL += FREQ_REPEL; + DOING_REPEL = 1; + do_repel(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetGameTime() > NEXT_CAGE)) return; + NEXT_CAGE = GetGameTime(); + NEXT_CAGE += FREQ_CAGE; + CAGE_TARGET = m_hAttackTarget; + AIMING_CAGE = 1; + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_AIM); + tracking_loop(); + ScheduleDelayedEvent(3.0, "do_cage"); + EmitSound(GetOwner(), 2, SOUND_CAGE_PREP, 10); + EmitSound(GetOwner(), 1, SOUND_GIGGLE, 10); + ClientEvent("update", "all", CL_SCRIPT_IDX, "hand_powerup", 0); + if (!(DID_WARN)) + { + DID_WARN = 1; + SendInfoMsg(CAGE_TARGET, "Goblin Lightning Shaman Beware, if the shaman traps you in a force cage, you'll have to be rescued!"); + } + } + + void tracking_loop() + { + if (!(AIMING_CAGE)) return; + SetMoveDest(CAGE_TARGET); + ScheduleDelayedEvent(0.1, "tracking_loop"); + } + + void do_cage() + { + if ((GetEntityProperty(CAGE_TARGET, "scriptvar"))) + { + AIMING_CAGE = 0; + NEXT_CAGE = GetGameTime(); + NEXT_CAGE += 10.0; + npcatk_resume_ai(); + npcatk_resume_movement(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((false)) + { + AIMING_CAGE = 0; + SUSTAINING_CAGE = 1; + do_cage2(); + } + else + { + AIMING_CAGE = 0; + NEXT_CAGE = GetGameTime(); + NEXT_CAGE += 10.0; + npcatk_resume_ai(); + npcatk_resume_movement(); + } + } + + void do_cage2() + { + // svplaysound: svplaysound 2 10 SOUND_BEAM_LOOP + EmitSound(2, 10, SOUND_BEAM_LOOP); + NEXT_UPDATE_LOOP_SOUND = GetGameTime(); + NEXT_UPDATE_LOOP_SOUND += 10.0; + ApplyEffect(CAGE_TARGET, "effects/dot_lightning_cage", 0, GetEntityIndex(GetOwner()), DOT_CAGE); + SendInfoMsg("all", GetEntityName(CAGE_TARGET) + " Has been trapped by a Lightning Shaman!"); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 1, CAGE_TARGET, 0, Vector3(255, 255, 0), 200, 20, -1); + CUR_BEAM = GetEntityIndex(m_hLastCreated); + npcatk_resume_movement(); + npcatk_suspend_movement(ANIM_CAGE_SUSTAIN); + PlayAnim("critical", ANIM_CAGE_SUSTAIN); + sustain_cage(); + } + + void sustain_cage() + { + if (!(GetEntityProperty(CAGE_TARGET, "haseffect"))) + { + ext_end_cage(); + return; + } + PlayAnim("once", ANIM_CAGE_SUSTAIN); + ScheduleDelayedEvent(1.0, "sustain_cage"); + if (!(GetGameTime() > NEXT_UPDATE_LOOP_SOUND)) return; + NEXT_UPDATE_LOOP_SOUND = GetGameTime(); + NEXT_UPDATE_LOOP_SOUND += 10.0; + // svplaysound: svplaysound 2 10 SOUND_BEAM_LOOP + EmitSound(2, 10, SOUND_BEAM_LOOP); + } + + void ext_end_cage() + { + // svplaysound: svplaysound 2 0 SOUND_BEAM_LOOP + EmitSound(2, 0, SOUND_BEAM_LOOP); + SUSTAINING_CAGE = 0; + Effect("beam", "update", CUR_BEAM, "remove", 0.1); + npcatk_resume_movement(); + npcatk_resume_ai(); + NEXT_CAGE = GetGameTime(); + NEXT_CAGE += FREQ_CAGE; + leap_forward(); + } + + void do_repel() + { + // svplaysound: svplaysound 2 10 SOUND_BEAM_LOOP + EmitSound(2, 10, SOUND_BEAM_LOOP); + EmitSound(GetOwner(), 1, SOUND_BEAM_START, 10); + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_WARCRY); + string ZAP_AURA_ORG = GetEntityOrigin(GetOwner()); + ZAP_AURA_ORG += "z"; + ClientEvent("new", "all", "effects/sfx_zap_aura", GetEntityIndex(GetOwner()), AOE_ZAP, DUR_ZAP); + CL_IDX_ZAP_AURA = "game.script.last_sent_id"; + do_repel_loop(); + DUR_ZAP("end_repel"); + } + + void do_repel_loop() + { + if (!(DOING_REPEL)) return; + PlayAnim("once", ANIM_WARCRY); + ScheduleDelayedEvent(0.25, "do_repel_loop"); + ZAP_TARGS = FindEntitiesInSphere("enemy", AOE_ZAP); + if (!(ZAP_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(ZAP_TARGS, ";"); i++) + { + repel_affect_targets(); + } + } + + void repel_affect_targets() + { + string CUR_TARG = GetToken(ZAP_TARGS, i, ";"); + DoDamage(CUR_TARG, "direct", DMG_ZAP, 1.0, GetOwner()); + string TARGET_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 800, 110))); + } + + void end_repel() + { + // svplaysound: svplaysound 2 0 SOUND_BEAM_LOOP + EmitSound(2, 0, SOUND_BEAM_LOOP); + npcatk_resume_ai(); + npcatk_resume_movement(); + DOING_REPEL = 0; + leap_forward(); + NEXT_REPEL = GetGameTime(); + NEXT_REPEL += FREQ_REPEL; + if (!(GetGameTime() > NEXT_CAGE)) return; + NEXT_CAGE = GetGameTime(); + NEXT_CAGE += 5.0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (CL_SCRIPT_IDX != "CL_SCRIPT_IDX") + { + ClientEvent("update", "all", CL_SCRIPT_IDX, "remove_fx"); + } + if ((SUSTAINING_CAGE)) + { + if ((GetEntityProperty(CAGE_TARGET, "haseffect"))) + { + RemoveEffect(CAGE_TARGET, "dot_lightning_cage"); + } + Effect("beam", "update", CUR_BEAM, "remove", 0.1); + // svplaysound: svplaysound 2 0 SOUND_BEAM_LOOP + EmitSound(2, 0, SOUND_BEAM_LOOP); + string THE_RESCUER = GetEntityIndex(m_hLastStruck); + LogDebug("rescuer_name GetEntityName(THE_RESCUER)"); + if (THE_RESCUER != CAGE_TARGET) + { + if ((IsValidPlayer(CAGE_TARGET))) + { + } + if ((IsValidPlayer(THE_RESCUER))) + { + } + LogDebug("sending_bonus"); + string BONUS_MSG = "for freeing "; + BONUS_MSG += GetEntityName(CAGE_TARGET); + CallExternal(THE_RESCUER, "ext_dmgpoint_bonus", 1000, BONUS_MSG); + } + } + if ((DOING_REPEL)) + { + ClientEvent("update", "all", CL_IDX_ZAP_AURA, "end_fx"); + // svplaysound: svplaysound 2 0 SOUND_BEAM_LOOP + EmitSound(2, 0, SOUND_BEAM_LOOP); + } + } + + void swing_sword() + { + string ATTACK_START = GetEntityProperty(GetOwner(), "attachpos"); + string TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(ATTACK_START, TARG_ORG); + ANG_TO_TARG = "x"; + ClientEvent("update", "all", CL_SCRIPT_IDX, "hand_sprite", ANG_TO_TARG, ATTACH_HAND); + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if (!(TARG_RANGE < ATTACK_HITRANGE)) return; + TARG_RANGE /= ATTACK_HITRANGE; + string DELAY_DMG = /* TODO: $ratio */ $ratio(TARG_RANGE, 0.1, 1.0); + DELAY_DMG("swing_sword_delay_dmg"); + } + + void swing_sword_delay_dmg() + { + SWIPE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_ZAP, ATTACK_HITCHANCE, "lightning_effect"); + } + + void game_dodamage() + { + if ((SWIPE_ATTACK)) + { + if ((param1)) + { + } + LogDebug("game_dodamage DMG_ZAP"); + ApplyEffect(param2, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DMG_ZAP); + } + SWIPE_ATTACK = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(SUSPEND_AI)) return; + if (!(IsEntityAlive(GetOwner()))) return; + if (GetGameTime() > NEXT_CL_REFRESH) + { + if (CL_SCRIPT_IDX != "CL_SCRIPT_IDX") + { + ClientEvent("update", "all", CL_SCRIPT_IDX, "remove_fx"); + } + ClientEvent("new", "all", CL_SCRIPT, GetEntityIndex(GetOwner()), FREQ_FX_REFRESH); + CL_SCRIPT_IDX = "game.script.last_sent_id"; + NEXT_CL_REFRESH = GetGameTime(); + NEXT_CL_REFRESH += FREQ_FX_REFRESH; + } + } + +} + +} diff --git a/scripts/angelscript/orc_for/orc_archer_sa.as b/scripts/angelscript/orc_for/orc_archer_sa.as new file mode 100644 index 00000000..75eef729 --- /dev/null +++ b/scripts/angelscript/orc_for/orc_archer_sa.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "monsters/orc_archer.as" + +namespace MS +{ + +class OrcArcherSa : CGameScript +{ + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_SELF_ADJUST; + + OrcArcherSa() + { + NPC_SELF_ADJUST = 1; + NPC_ADJ_TIERS = "0;750;1500;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.5;2.0;5.0;7.5;10.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;2.0;3.0;5.0;7.5;10.0;"; + } + +} + +} diff --git a/scripts/angelscript/orc_for/orc_demonic_sa.as b/scripts/angelscript/orc_for/orc_demonic_sa.as new file mode 100644 index 00000000..721d0e76 --- /dev/null +++ b/scripts/angelscript/orc_for/orc_demonic_sa.as @@ -0,0 +1,120 @@ +#pragma context server + +#include "orc_for/tiers1.as" +#include "monsters/orc_flayer.as" + +namespace MS +{ + +class OrcDemonicSa : CGameScript +{ + string AS_ATTACKING; + float ATTACK_ACCURACY; + float DOT_FIRE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + string FIRE_BALL_DAMAGE; + int FIRE_BALL_DAMAGE_ALT; + int FIRE_BALL_DAMAGE_NORM; + float FREQ_FIREBALL; + int IS_UNHOLY; + int MELEE_ATTACK; + string NEXT_FIREBALL; + int NPC_BASE_EXP; + int ORC_JUMPER; + string SAY_SUMMONER; + string SOUND_FIRECHARGE; + string SOUND_FIRESHOOT; + + OrcDemonicSa() + { + NPC_BASE_EXP = 200; + ATTACK_ACCURACY = 0.8; + FREQ_FIREBALL = Random(5.0, 10.0); + FIRE_BALL_DAMAGE_NORM = "$rand(75,100)"; + FIRE_BALL_DAMAGE_ALT = "$rand(25,50)"; + DOT_FIRE = 10.0; + SOUND_FIRECHARGE = "magic/fireball_powerup.wav"; + SOUND_FIRESHOOT = "magic/fireball_strike.wav"; + ORC_JUMPER = 1; + IS_UNHOLY = 1; + } + + void orc_spawn() + { + SetHealth(500); + SetName("Demonic Blackhand"); + SetProp(GetOwner(), "skin", 2); + SetHearingSensitivity(2); + SetStat("parry", 50); + SetDamageResistance("all", ".5"); + SetDamageResistance("holy", 0.5); + SetDamageResistance("fire", 0.0); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 5); + if (!(true)) return; + ScheduleDelayedEvent(2.0, "final_adjstments"); + } + + void final_adjstments() + { + DROP_ITEM1 = "none"; + DROP_ITEM1_CHANCE = 0.0; + if (!(NPC_ADJ_LEVEL < 2)) return; + FIRE_BALL_DAMAGE = FIRE_BALL_DAMAGE_ALT; + } + + void cycle_up() + { + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + if (!(SAY_SUMMONER)) return; + SetSayTextRange(4096); + } + + void npc_targetsighted() + { + if ((SAY_SUMMONER)) + { + SetSayTextRange(4096); + SayText("The enemy must not reach the summoner! STOP THEM!"); + SAY_SUMMONER = 0; + } + if (!(GetGameTime() > NEXT_FIREBALL)) return; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE)) return; + NEXT_FIREBALL = GetGameTime(); + NEXT_FIREBALL += FREQ_FIREBALL; + EmitSound(GetOwner(), 0, SOUND_FIRESHOOT, 10); + PlayAnim("critical", ANIM_ATTACK); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 2.0; + TossProjectile("proj_fire_ball", /* TODO: $relpos */ $relpos(0, 48, 12), m_hAttackTarget, 400, FIRE_BALL_DAMAGE, 2, "none"); + CallExternal("ent_lastprojectile", "lighten", DOT_FIRE, 0.0); + } + + void set_summoner_comment() + { + SAY_SUMMONER = 1; + } + + void swing_sword() + { + MELEE_ATTACK = 1; + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + MELEE_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/orc_for/orc_flayer_sa.as b/scripts/angelscript/orc_for/orc_flayer_sa.as new file mode 100644 index 00000000..d34eee5d --- /dev/null +++ b/scripts/angelscript/orc_for/orc_flayer_sa.as @@ -0,0 +1,13 @@ +#pragma context server + +#include "orc_for/tiers1.as" +#include "monsters/orc_flayer.as" + +namespace MS +{ + +class OrcFlayerSa : CGameScript +{ +} + +} diff --git a/scripts/angelscript/orc_for/orc_fshaman_sa.as b/scripts/angelscript/orc_for/orc_fshaman_sa.as new file mode 100644 index 00000000..75051413 --- /dev/null +++ b/scripts/angelscript/orc_for/orc_fshaman_sa.as @@ -0,0 +1,38 @@ +#pragma context server + +#include "orc_for/tiers1.as" +#include "monsters/orc_shaman_fire.as" + +namespace MS +{ + +class OrcFshamanSa : CGameScript +{ + string FIRE_BALL_DAMAGE; + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_SELF_ADJUST; + + OrcFshamanSa() + { + NPC_SELF_ADJUST = 1; + NPC_ADJ_TIERS = "0;750;1500;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.5;2.0;5.0;7.5;10.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;1.5;2.0;3.0;5.0;7.5;"; + } + + void OnSpawn() override + { + ScheduleDelayedEvent(2.0, "final_adjstments"); + } + + void final_adjstments() + { + if (!(NPC_ADJ_LEVEL < 2)) return; + FIRE_BALL_DAMAGE = FIRE_BALL_DAMAGE_ALT; + } + +} + +} diff --git a/scripts/angelscript/orc_for/orc_poisoner.as b/scripts/angelscript/orc_for/orc_poisoner.as new file mode 100644 index 00000000..74706137 --- /dev/null +++ b/scripts/angelscript/orc_for/orc_poisoner.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "dq/voldar.as" + +namespace MS +{ + +class OrcPoisoner : CGameScript +{ + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_SELF_ADJUST; + + OrcPoisoner() + { + NPC_SELF_ADJUST = 1; + NPC_ADJ_TIERS = "0;750;1500;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.0;1.5;2.0;2.5;3.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;1.0;1.5;2.0;4.0;5.0;"; + } + +} + +} diff --git a/scripts/angelscript/orc_for/orc_pshaman_sa.as b/scripts/angelscript/orc_for/orc_pshaman_sa.as new file mode 100644 index 00000000..da12de09 --- /dev/null +++ b/scripts/angelscript/orc_for/orc_pshaman_sa.as @@ -0,0 +1,42 @@ +#pragma context server + +#include "dq/voldarshaman.as" + +namespace MS +{ + +class OrcPshamanSa : CGameScript +{ + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_SELF_ADJUST; + + OrcPshamanSa() + { + NPC_SELF_ADJUST = 1; + NPC_ADJ_TIERS = "0;750;1500;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.5;2.0;5.0;7.5;10.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;1.5;2.0;3.0;5.0;7.5;"; + } + + void orc_spawn() + { + SetProp(GetOwner(), "skin", 3); + SetHealth(220); + SetName("Orc Venom Shaman"); + SetHearingSensitivity(8); + SetStat("parry", 30); + SetDamageResistance("all", ".8"); + SetDamageResistance("lightning", 3.0); + SetDamageResistance("acid", 0.0); + SetDamageResistance("poison", 0.0); + SetStat("spellcasting", 30); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/orc_for/orc_sniper_sa.as b/scripts/angelscript/orc_for/orc_sniper_sa.as new file mode 100644 index 00000000..3e40597b --- /dev/null +++ b/scripts/angelscript/orc_for/orc_sniper_sa.as @@ -0,0 +1,20 @@ +#pragma context server + +#include "orc_for/tiers2.as" +#include "monsters/orc_sniper.as" + +namespace MS +{ + +class OrcSniperSa : CGameScript +{ + string ARROW_PUSH_VEL; + + OrcSniperSa() + { + ARROW_PUSH_VEL = /* TODO: $relvel */ $relvel(0, 400, 110); + } + +} + +} diff --git a/scripts/angelscript/orc_for/orc_summoner.as b/scripts/angelscript/orc_for/orc_summoner.as new file mode 100644 index 00000000..10867cfa --- /dev/null +++ b/scripts/angelscript/orc_for/orc_summoner.as @@ -0,0 +1,73 @@ +#pragma context server + +namespace MS +{ + +class OrcSummoner : CGameScript +{ + int NO_SPAWN_STUCK_CHECK; + + void OnSpawn() override + { + SetName("orc_summoner"); + SetName("Blackhand Summoner"); + SetInvincible(true); + SetRace("orc"); + SetModel("monsters/Orc.mdl"); + SetProp(GetOwner(), "skin", 2); + SetWidth(5); + SetHeight(5); + SetHealth(9999); + SetBloodType("red"); + SetIdleAnim("kneel"); + SetMoveAnim("kneel"); + PlayAnim("once", "kneel"); + NO_SPAWN_STUCK_CHECK = 1; + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetSayTextRange(4096); + } + + void ext_players_r_here() + { + SayText("No! The binding is not yet complete!"); + ScheduleDelayedEvent(2.0, "summon_fail"); + } + + void summon_fail() + { + // TODO: playmp3 all combat media/Suspense07.mp3 + string BONE_ABOM = FindEntityByName("bone_abomination"); + string FIRE_DJINN = FindEntityByName("fire_djinn"); + if ((IsEntityAlive(FIRE_DJINN))) + { + CallExternal(FIRE_DJINN, "kill_zugdah"); + } + if ((IsEntityAlive(BONE_ABOM))) + { + EmitSound(GetOwner(), 0, "voices/orc/die.wav", 10); + CallExternal(BONE_ABOM, "eat_me"); + } + UseTrigger("mm_circle_fade"); + } + + void ext_me_die() + { + SetInvincible(false); + DoDamage(GetOwner(), "direct", 2000, 100, GAME_MASTER); + EmitSound(GetOwner(), 0, "voices/orc/die.wav", 10); + PlayAnim("once", "break"); + PlayAnim("hold", "die_fallback"); + SetSolid("none"); + ScheduleDelayedEvent(5.0, "fade_out"); + } + + void fade_out() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/orc_for/orc_summoner_slaughter_cl.as b/scripts/angelscript/orc_for/orc_summoner_slaughter_cl.as new file mode 100644 index 00000000..079aff93 --- /dev/null +++ b/scripts/angelscript/orc_for/orc_summoner_slaughter_cl.as @@ -0,0 +1,123 @@ +#pragma context server + +namespace MS +{ + +class OrcSummonerSlaughterCl : CGameScript +{ + string ATTACH_POS; + string FINAL_ORG; + int FINAL_ORG_SET; + string FLING_VEL; + int FX_ACTIVE; + string FX_OWNER; + int FX_STAGE; + string MAX_Z; + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + ATTACH_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + if ((ATTACH_POS).z < MAX_Z) + { + ATTACH_POS = "z"; + } + if (FX_STAGE == 1) + { + string BLOOD_POS = ATTACH_POS; + BLOOD_POS += "z"; + ClientEffect("tempent", "sprite", "bloodspray.spr", BLOOD_POS, "setup_blood_spray"); + } + } + + void client_activate() + { + FX_OWNER = param1; + MAX_Z = /* TODO: $getcl */ $getcl(param1, "origin"); + MAX_Z = (MAX_Z).z; + FX_ACTIVE = 1; + FX_STAGE = 1; + ATTACH_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"); + if ((ATTACH_POS).z < MAX_Z) + { + ATTACH_POS = "z"; + } + ClientEffect("tempent", "model", "monsters/Orc.mdl", ATTACH_POS, "setup_orc_corpse", "update_orc_corpse"); + SetCallback("render", "enable"); + } + + void update_orc_corpse() + { + if (!(FX_ACTIVE)) return; + if (FX_STAGE == 1) + { + ClientEffect("tempent", "set_current_prop", "origin", ATTACH_POS); + } + if (FX_STAGE == 2) + { + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "cb_collide", "collide_corpse"); + ClientEffect("tempent", "set_current_prop", "velocity", FLING_VEL); + FX_STAGE = 3; + } + if (!(FINAL_ORG_SET)) return; + ClientEffect("tempent", "set_current_prop", "origin", FINAL_ORG); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + } + + void collide_corpse() + { + LogDebug("***** collide_corpse game.tempent.origin"); + if ((FINAL_ORG_SET)) return; + FINAL_ORG = "game.tempent.origin"; + FINAL_ORG += "z"; + FINAL_ORG_SET = 1; + ClientEffect("tempent", "set_current_prop", "origin", FINAL_ORG); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + } + + void do_fling() + { + FX_STAGE = 2; + FLING_VEL = param1; + ScheduleDelayedEvent(10.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_orc_corpse() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 30.0); + ClientEffect("tempent", "set_current_prop", "body", 16); + ClientEffect("tempent", "set_current_prop", "skin", 2); + ClientEffect("tempent", "set_current_prop", "framerate", 1); + ClientEffect("tempent", "set_current_prop", "frames", 44); + ClientEffect("tempent", "set_current_prop", "sequence", 6); + ClientEffect("tempent", "set_current_prop", "bouncefactor", -20); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "scale", 1); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void setup_blood_spray() + { + ClientEffect("tempent", "set_current_prop", "death_delay", Random(1, 2)); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 10); + ClientEffect("tempent", "set_current_prop", "rendermode", "alpha"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "collide", "world;die"); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.1, 1.0)); + float RND_UP = Random(50, 100); + float RND_ANG = Random(0, 359.99); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relpos */ $relpos(Vector3(0, RND_ANG, 0), Vector3(0, 0, RND_UP))); + } + +} + +} diff --git a/scripts/angelscript/orc_for/orc_warrior_sa.as b/scripts/angelscript/orc_for/orc_warrior_sa.as new file mode 100644 index 00000000..c68c4c77 --- /dev/null +++ b/scripts/angelscript/orc_for/orc_warrior_sa.as @@ -0,0 +1,20 @@ +#pragma context server + +#include "orc_for/tiers1.as" +#include "monsters/orc_warrior.as" + +namespace MS +{ + +class OrcWarriorSa : CGameScript +{ + float ATTACK_ACCURACY; + + OrcWarriorSa() + { + ATTACK_ACCURACY = 0.8; + } + +} + +} diff --git a/scripts/angelscript/orc_for/sgoblin_sa.as b/scripts/angelscript/orc_for/sgoblin_sa.as new file mode 100644 index 00000000..c886297f --- /dev/null +++ b/scripts/angelscript/orc_for/sgoblin_sa.as @@ -0,0 +1,306 @@ +#pragma context server + +#include "monsters/bgoblin.as" + +namespace MS +{ + +class SgoblinSa : CGameScript +{ + int AM_INVISIBLE; + string ANIM_ATTACK; + int ATTACK_HITCHANCE; + float BASE_FRAMERATE; + string BLEED_STEPS; + int CAN_FIREBALL; + int CAN_STUN; + string CL_IDX; + string CL_SCRIPT; + int DMG_KNIFE; + int DROP_GOLD; + int DROP_GOLD_AMT; + int FIRST_ALERT; + int FLINCH_HEALTH; + float FREQ_INVISIBLE; + int INVISIBLE_MODE; + string NEXT_INVISIBLE; + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_BASE_EXP; + int NPC_SELF_ADJUST; + int ORG_BODY; + int OVERHEAD_SMASH; + int SGOBLIN_TRAINEE; + string SOUND_APPEAR; + string SOUND_FADE; + int SWING_COUNT; + + SgoblinSa() + { + NPC_SELF_ADJUST = 1; + NPC_ADJ_TIERS = "0;500;1000;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.5;2.0;5.0;7.5;10.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;1.5;2.0;3.0;5.0;7.5;"; + NPC_BASE_EXP = 150; + CAN_FIREBALL = 0; + DROP_GOLD = 1; + DROP_GOLD_AMT = RandomInt(40, 50); + DMG_KNIFE = RandomInt(10, 30); + BASE_FRAMERATE = 2.0; + ATTACK_HITCHANCE = 80; + FREQ_INVISIBLE = Random(7.0, 10.0); + CAN_STUN = 0; + FLINCH_HEALTH = 200; + CL_SCRIPT = "monsters/sgoblin_cl"; + ORG_BODY = 0; + SOUND_FADE = "monsters/gonome/gonome_melee2.wav"; + SOUND_APPEAR = "ambience/alien_humongo.wav"; + } + + void game_precache() + { + Precache(CL_SCRIPT); + } + + void goblin_spawn() + { + SetName("Shadow Goblin"); + SetRace("demon"); + SetBloodType("red"); + SetHealth(200); + SetRoam(true); + SetHearingSensitivity(4); + SetAnimFrameRate(2.0); + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 8); + SetModelBody(3, 0); + SetProp(GetOwner(), "skin", 3); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ANIM_ATTACK = "swordswing1_L"; + ClientEvent("new", "all", CL_SCRIPT); + CL_IDX = "game.script.last_sent_id"; + SWING_COUNT = 0; + NEXT_INVISIBLE = GetGameTime(); + NEXT_INVISIBLE += FREQ_INVISIBLE; + ScheduleDelayedEvent(2.0, "final_adj"); + } + + void final_adj() + { + if (!(NPC_ADJ_LEVEL <= 1)) return; + SGOBLIN_TRAINEE = 1; + SetName("Shadow Goblin Novice"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("remove", "all", CL_IDX); + if (!(AM_INVISIBLE)) return; + go_visible(); + } + + void swing_axe() + { + normal_immunes(); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KNIFE, ATTACK_HITCHANCE, "slash"); + OVERHEAD_SMASH = 1; + } + + void swing_sword() + { + normal_immunes(); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KNIFE, ATTACK_HITCHANCE, "pierce"); + SWING_COUNT += 1; + if (!(SWING_COUNT > 5)) return; + SWING_COUNT = 0; + fade_and_flee(); + } + + void npc_selectattack() + { + if ((AM_INVISIBLE)) + { + fade_in(); + } + } + + void gob_jump_check() + { + if (!(GOB_JUMP_SCANNING)) return; + float GOB_HOP_DELAY = Random(2, 4); + GOB_HOP_DELAY("gob_jump_check"); + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE)) return; + if (!(m_hAttackTarget != "unset")) return; + if ((I_R_FROZEN)) return; + if ((IS_FLEEING)) return; + if (!(GetEntityRange(m_hAttackTarget) < GOBLIN_JUMPRANGE)) return; + string ME_POS = GetMonsterProperty("origin"); + string MY_Z = (ME_POS).z; + string TARGET_POS = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_POS).z; + string TARGET_Z_DIFFERENCE = TARGET_Z; + TARGET_Z_DIFFERENCE -= MY_Z; + if (TARGET_Z_DIFFERENCE > GOB_JUMP_THRESH) + { + if (TARGET_Z_DIFFERENCE < 500) + { + } + PlayAnim("critical", ANIM_SMASH); + ScheduleDelayedEvent(0.1, "gob_hop"); + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((AM_INVISIBLE)) + { + jump_away(); + } + if ((SGOBLIN_TRAINEE)) + { + BLEED_STEPS = 1; + } + if (!(param1 > 200)) return; + if (!(RandomInt(1, 2) == 1)) return; + jump_away(); + } + + void jump_away() + { + if (!(IS_FLEEING)) + { + npcatk_flee(GetEntityIndex(m_hLastStruck), 100, 3.0); + } + ScheduleDelayedEvent(0.1, "gob_hop"); + } + + void fade_and_flee() + { + ClientEvent("update", "all", CL_IDX, "poof_fx", GetEntityOrigin(GetOwner())); + jump_away(); + ScheduleDelayedEvent(0.25, "go_invisible"); + } + + void go_invisible() + { + if (!(IsEntityAlive(GetOwner()))) return; + LogDebug("*** GOING INVISIBLE ***"); + AM_INVISIBLE = 1; + if ((SGOBLIN_TRAINEE)) + { + if ((BLEED_STEPS)) + { + } + blood_steps(); + } + EmitSound(GetOwner(), 0, SOUND_FADE, 10); + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", 0); + SetModelBody(0, 2); + SetModelBody(1, 0); + SetModelBody(2, 0); + SetModelBody(3, 0); + etherial_immunes(); + } + + void blood_steps() + { + if (!(AM_INVISIBLE)) return; + Random(0_1, 0_3)("blood_steps"); + LogDebug("bloodystep AM_INVISIBLE SGOBLIN_TRAINEE BLEED_STEPS WALK_COUNT"); + Effect("decal", GetEntityOrigin(GetOwner()), RandomInt(31, 34)); + } + + void go_visible() + { + LogDebug("*** GOING VISIBLE ***"); + AM_INVISIBLE = 0; + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + normal_immunes(); + SetModelBody(0, 0); + SetModelBody(1, 0); + SetModelBody(2, 8); + SetModelBody(3, 0); + } + + void fade_in() + { + if (!(IsEntityAlive(GetOwner()))) return; + EmitSound(GetOwner(), 0, SOUND_APPEAR, 10); + ClientEvent("update", "all", CL_IDX, "unpoof_fx", GetEntityOrigin(GetOwner())); + go_visible(); + } + + void npc_targetsighted() + { + if ((FIRST_ALERT)) return; + if ((AM_INVISIBLE)) return; + if (!(GetGameTime() > NEXT_INVISIBLE)) return; + NEXT_INVISIBLE = GetGameTime(); + NEXT_INVISIBLE += FREQ_INVISIBLE; + FIRST_ALERT = 1; + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_HITRANGE)) return; + fade_and_flee(); + } + + void my_target_died() + { + FIRST_ALERT = 0; + if (!(AM_INVISIBLE)) return; + fade_in(); + } + + void etherial_immunes() + { + if ((SGOBLIN_TRAINEE)) return; + ClearFX(); + INVISIBLE_MODE = 1; + SetInvincible(true); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + } + + void normal_immunes() + { + SetInvincible(false); + INVISIBLE_MODE = 0; + SetDamageResistance("fire", 1.0); + SetDamageResistance("cold", 1.0); + SetDamageResistance("poison", 1.0); + SetDamageResistance("holy", 0.0); + } + + void game_dodamage() + { + if ((INVISIBLE_MODE)) + { + normal_immunes(); + } + if ((OVERHEAD_SMASH)) + { + if ((AM_INVISIBLE)) + { + } + fade_in(); + } + OVERHEAD_SMASH = 0; + } + +} + +} diff --git a/scripts/angelscript/orc_for/skeleton_archer_fire2.as b/scripts/angelscript/orc_for/skeleton_archer_fire2.as new file mode 100644 index 00000000..544a05df --- /dev/null +++ b/scripts/angelscript/orc_for/skeleton_archer_fire2.as @@ -0,0 +1,107 @@ +#pragma context server + +#include "monsters/skeleton_archer_base.as" + +namespace MS +{ + +class SkeletonArcherFire2 : CGameScript +{ + string ARROW_CL_SCRIPT; + int C_SKELE_PUSH_STRENGTH; + string DMG_AOE; + int DMG_ARROW; + int DMG_SWIPE; + int NPC_GIVE_EXP; + int SKELE_ARROW_AOE; + int SKELE_ARROW_ARC; + string SKELE_ARROW_EFFECT; + int SKELE_ARROW_GLOW; + string SKELE_ARROW_GLOW_COLOR; + int SKELE_ARROW_KNOCKBACK; + string SKELE_ARROW_SCRIPT; + int SKELE_ARROW_SPEED; + string SKELE_CONTAINER_SCRIPT; + int SKELE_DOT_DMG; + float SKELE_DOT_DUR; + int SKELE_DROPS_CONTAINER; + float SKELE_DROPS_CONTAINER_CHANCE; + int SKELE_GOLD; + int SKELE_START_LIVES; + + SkeletonArcherFire2() + { + NPC_GIVE_EXP = 650; + DMG_ARROW = 400; + DMG_SWIPE = 80; + C_SKELE_PUSH_STRENGTH = 400; + SKELE_GOLD = 100; + SKELE_ARROW_EFFECT = "effects/dot_fire"; + SKELE_ARROW_AOE = 128; + SKELE_DOT_DMG = 75; + SKELE_DOT_DUR = 5.0; + SKELE_ARROW_GLOW = 1; + SKELE_ARROW_GLOW_COLOR = Vector3(255, 255, 128); + SKELE_ARROW_SCRIPT = "proj_arrow_npc_dyn"; + SKELE_ARROW_KNOCKBACK = 800; + SKELE_DROPS_CONTAINER = 1; + SKELE_CONTAINER_SCRIPT = "chests/quiver_of_fire"; + SKELE_DROPS_CONTAINER_CHANCE = 1.0; + SKELE_START_LIVES = 1; + SKELE_ARROW_ARC = 1; + SKELE_ARROW_SPEED = 500; + ARROW_CL_SCRIPT = "effects/sfx_fire_burst"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(15.1); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 0, 0), 128, 15.0); + } + + void skele_spawn() + { + SetName("Demonic Archer"); + SetHealth(3000); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 1.5); + SetDamageResistance("holy", 0.75); + SetModel("monsters/skeleton_boss1.mdl"); + SetWidth(32); + SetHeight(80); + SetModelBody(0, 9); + SetModelBody(1, 10); + SetModelBody(2, 0); + ScheduleDelayedEvent(2.0, "final_adj"); + } + + void skele_arrow_fx() + { + string ARROW_ORG = param1; + ClientEvent("new", "all", ARROW_CL_SCRIPT, ARROW_ORG, 128, 1, Vector3(255, 0, 0)); + XDoDamage(ARROW_ORG, SKELE_ARROW_AOE, DMG_AOE, 0, GetOwner(), GetOwner(), "none", "fire_effect"); + } + + void OnPostSpawn() override + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 0, 0), 128, 15.0); + } + + void final_adj() + { + if (NPC_ADJ_LEVEL < 2) + { + DMG_AOE = 100; + } + else + { + DMG_AOE = 400; + } + } + +} + +} diff --git a/scripts/angelscript/orc_for/test.as b/scripts/angelscript/orc_for/test.as new file mode 100644 index 00000000..594fc610 --- /dev/null +++ b/scripts/angelscript/orc_for/test.as @@ -0,0 +1,105 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class Test : CGameScript +{ + string NEXT_PUSH; + string PUSH_TARG; + + Test() + { + SetCallback("touch", "enable"); + } + + void OnSpawn() override + { + SetModel("misc/treasure.mdl"); + SetWidth(32); + SetHeight(32); + SetHealth(1000); + SetRace("hated"); + SetProp(GetOwner(), "movetype", 7); + SetProp(GetOwner(), "solid", 2); + SetGravity(0); + if (!(true)) return; + ScheduleDelayedEvent(0.25, "snap_to_ground"); + } + + void snap_to_ground() + { + string MY_POS = GetEntityOrigin(GetOwner()); + MY_POS = "z"; + SetEntityOrigin(GetOwner(), MY_POS); + } + + void ext_forward() + { + SetProp(GetOwner(), "movetype", 7); + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 1000, 0))); + } + + void ext_backwards() + { + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, -1000, 0))); + SetProp(GetOwner(), "movetype", 7); + } + + void ext_reset() + { + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, 0))); + SetEntityOrigin(GetOwner(), Vector3(0, 0, 0)); + SetProp(GetOwner(), "solid", 2); + SetProp(GetOwner(), "movetype", 7); + } + + void ext_down() + { + SetProp(GetOwner(), "solid", 2); + SetProp(GetOwner(), "movetype", 7); + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, -100))); + SetProp(GetOwner(), "solid", 2); + SetProp(GetOwner(), "movetype", 7); + } + + void ext_up() + { + SetProp(GetOwner(), "solid", 2); + SetProp(GetOwner(), "movetype", 7); + SetProp(GetOwner(), "velocity", /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, 100))); + SetProp(GetOwner(), "solid", 2); + SetProp(GetOwner(), "movetype", 7); + } + + void OnTouch(CBaseEntity@ other) override + { + PUSH_TARG = param1; + ScheduleDelayedEvent(0.1, "do_repel", GetEntityIndex(param1)); + } + + void do_repel() + { + if (!(GetGameTime() > NEXT_PUSH)) return; + NEXT_PUSH = GetGameTime(); + NEXT_PUSH += 0.25; + LogDebug("do_repel GetEntityName(param1) GetEntityOrigin(GetOwner())"); + string CUR_TARG = PUSH_TARG; + DoDamage(CUR_TARG, "direct", 0.1, 1.0, GetOwner()); + string TARGET_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 800, 110))); + } + + void game_blocked() + { + LogDebug("game_blocked GetEntityName(param1)"); + do_repel(GetEntityIndex(param1)); + } + +} + +} diff --git a/scripts/angelscript/orc_for/tiers1.as b/scripts/angelscript/orc_for/tiers1.as new file mode 100644 index 00000000..d5c3d86e --- /dev/null +++ b/scripts/angelscript/orc_for/tiers1.as @@ -0,0 +1,23 @@ +#pragma context server + +namespace MS +{ + +class Tiers1 : CGameScript +{ + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_SELF_ADJUST; + + Tiers1() + { + NPC_SELF_ADJUST = 1; + NPC_ADJ_TIERS = "0;500;1000;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.5;2.0;5.0;7.5;10.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;2.0;3.0;5.0;7.5;10.0;"; + } + +} + +} diff --git a/scripts/angelscript/orc_for/tiers2.as b/scripts/angelscript/orc_for/tiers2.as new file mode 100644 index 00000000..751e02df --- /dev/null +++ b/scripts/angelscript/orc_for/tiers2.as @@ -0,0 +1,23 @@ +#pragma context server + +namespace MS +{ + +class Tiers2 : CGameScript +{ + string NPC_ADJ_DMG_MUTLI_TOKENS; + string NPC_ADJ_HP_MUTLI_TOKENS; + string NPC_ADJ_TIERS; + int NPC_SELF_ADJUST; + + Tiers2() + { + NPC_SELF_ADJUST = 1; + NPC_ADJ_TIERS = "0;750;1500;2000;3000;5000"; + NPC_ADJ_DMG_MUTLI_TOKENS = "1.0;1.5;2.0;5.0;7.5;15.0;"; + NPC_ADJ_HP_MUTLI_TOKENS = "1.0;2.0;3.0;5.0;7.5;10.0;"; + } + +} + +} diff --git a/scripts/angelscript/orc_for/vgoblin_archer_sa.as b/scripts/angelscript/orc_for/vgoblin_archer_sa.as new file mode 100644 index 00000000..e9c4afcf --- /dev/null +++ b/scripts/angelscript/orc_for/vgoblin_archer_sa.as @@ -0,0 +1,165 @@ +#pragma context server + +#include "orc_for/tiers2.as" +#include "orc_for/goblin_base.as" + +namespace MS +{ + +class VgoblinArcherSa : CGameScript +{ + string ANIM_ATTACK; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FIREBALL; + int DMG_BOW; + int DMG_KICK; + int DOT_POISON; + int DROP_GOLD_AMT; + float FREQ_KICK; + int GOB_CHARGER; + int GOB_JUMPER; + int KICK_ATTACK; + int KICK_HITCHANCE; + int KICK_RANGE; + int MOVE_RANGE; + string NEXT_KICK; + int NPC_BASE_EXP; + int NPC_CAP_EXP; + int NPC_RANGED; + string SOUND_BOW; + + VgoblinArcherSa() + { + NPC_BASE_EXP = 75; + NPC_CAP_EXP = 1000; + SOUND_BOW = "weapons/bow/bow.wav"; + GOB_JUMPER = 0; + GOB_CHARGER = 0; + DMG_BOW = 20; + DMG_KICK = 10; + DOT_POISON = 5; + KICK_RANGE = 64; + KICK_HITCHANCE = 90; + FREQ_KICK = 10.0; + CAN_FIREBALL = 0; + NPC_RANGED = 1; + ANIM_ATTACK = "shootorcbow"; + } + + void goblin_spawn() + { + SetName("Vile Goblin Needler"); + SetRace("goblin"); + SetBloodType("red"); + SetHealth(125); + SetModel("monsters/goblin_new.mdl"); + SetWidth(24); + SetHeight(50); + SetProp(GetOwner(), "skin", 2); + SetModelBody(0, 1); + SetModelBody(1, 2); + SetModelBody(2, 2); + SetModelBody(3, 0); + SetRoam(true); + SetHearingSensitivity(2); + SetDamageResistance("poison", 0.0); + SetDamageResistance("lightning", 1.25); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(0.01, "gob_extras"); + } + + void gob_extras() + { + MOVE_RANGE = 2000; + ATTACK_RANGE = 2000; + ATTACK_HITRANGE = 2000; + DROP_GOLD_AMT = RandomInt(30, 50); + } + + void grab_arrow() + { + SetModelBody(3, 1); + } + + void shoot_arrow() + { + string TARGET_DIST = GetEntityRange(m_hLastSeen); + string FINAL_TARGET = GetEntityOrigin(m_hLastSeen); + FINAL_TARGET += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, TARGET_DIST)); + TARGET_DIST /= 100; + SetAngles("add_view.pitch"); + TossProjectile("proj_arrow_npc_dyn", /* TODO: $relpos */ $relpos(0, 0, 7), "none", 900, DMG_BOW, 2, "none"); + CallExternal("ent_lastprojectile", "ext_lighten", 0.4, 1, Vector3(0, 255, 0)); + SetModelBody(3, 0); + EmitSound(GetOwner(), SOUND_BOW); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetModelBody(3, 0); + } + + void gob_hunt() + { + if (!(IsEntityAlive(m_hAttackTarget))) return; + if (!(GetEntityRange(m_hAttackTarget) < KICK_RANGE)) return; + if (!(GetGameTime() > NEXT_KICK)) return; + NEXT_KICK = GetGameTime(); + PlayAnim("once", "break"); + SetModelBody(3, 0); + NEXT_KICK += FREQ_KICK; + ANIM_ATTACK = ANIM_KICK; + } + + void kick_land() + { + DoDamage(m_hAttackTarget, KICK_RANGE, DMG_KICK, KICK_HITCHANCE, "blunt"); + KICK_ATTACK = 1; + ANIM_ATTACK = ANIM_BOW; + npcatk_flee(m_hAttackTarget, 1024, 3.0); + } + + void OnFlee() + { + SetMoveSpeed(2.0); + } + + void npcatk_stopflee() + { + SetMoveSpeed(1.0); + } + + void game_dodamage() + { + if ((KICK_ATTACK)) + { + if ((param1)) + { + } + if (GetEntityRange(param2) < KICK_RANGE) + { + } + ApplyEffect(param2, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + if (NPC_ADJ_LEVEL > 2) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 600, 110)); + } + } + KICK_ATTACK = 0; + } + + void ext_arrow_hit() + { + if (!(GetRelationship(GetOwner()) == "enemy")) return; + if (NPC_ADJ_LEVEL > 2) + { + AddVelocity(param2, /* TODO: $relvel */ $relvel(0, 600, 110)); + } + ApplyEffect(param2, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DOT_POISON); + } + +} + +} diff --git a/scripts/angelscript/orcplace2_beta/map_startup.as b/scripts/angelscript/orcplace2_beta/map_startup.as new file mode 100644 index 00000000..766f0984 --- /dev/null +++ b/scripts/angelscript/orcplace2_beta/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "orcplace_msc"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Curse of the Bear Gods: Orc Place"); + SetGlobalVar("G_MAP_DESC", "This is a secret orcish stronghold"); + SetGlobalVar("G_MAP_DIFF", "Levels 20-30 / 300-500hp"); + SetGlobalVar("G_WARN_HP", 300); + } + +} + +} diff --git a/scripts/angelscript/other/base_item_detect.as b/scripts/angelscript/other/base_item_detect.as new file mode 100644 index 00000000..602401e3 --- /dev/null +++ b/scripts/angelscript/other/base_item_detect.as @@ -0,0 +1,73 @@ +#pragma context server + +namespace MS +{ + +class BaseItemDetect : CGameScript +{ + string HOME_LOC; + int PLAYING_DEAD; + int SCAN_RANGE; + string SEARCH_ITEM; + + BaseItemDetect() + { + SEARCH_ITEM = "health_apple"; + SCAN_RANGE = 64; + } + + void OnRepeatTimer() + { + SetRepeatDelay(3.0); + GetAllPlayers(L_PLAYERS); + for (int i = 0; i < GetTokenCount(L_PLAYERS, ";"); i++) + { + check_near(); + } + } + + void OnSpawn() override + { + SetRace("beloved"); + SetBloodType("none"); + SetModel("none"); + SetInvincible(true); + SetHealth(1); + SetFly(true); + SetWidth(32); + SetHeight(32); + SetSolid("none"); + SetHearingSensitivity(8); + SetRoam(false); + SetMoveSpeed(0.0); + SetNoPush(true); + SetIdleAnim(""); + SetMoveAnim(""); + PLAYING_DEAD = 1; + ScheduleDelayedEvent(0.5, "post_spawn"); + } + + void post_spawn() + { + HOME_LOC = GetMonsterProperty("origin"); + ScheduleDelayedEvent(20.7, "reset_pos"); + } + + void reset_pos() + { + if (!(GetMonsterProperty("isalive"))) return; + SetEntityOrigin(GetOwner(), HOME_LOC); + ScheduleDelayedEvent(20.7, "reset_pos"); + } + + void check_near() + { + string CUR_PLAYER = GetToken(L_PLAYERS, i, ";"); + if (!(GetEntityRange(CUR_PLAYER) < SCAN_RANGE)) return; + if (!(ItemExists(CUR_PLAYER, SEARCH_ITEM))) return; + item_detected(CUR_PLAYER); + } + +} + +} diff --git a/scripts/angelscript/other/base_keyhole.as b/scripts/angelscript/other/base_keyhole.as new file mode 100644 index 00000000..6aa062be --- /dev/null +++ b/scripts/angelscript/other/base_keyhole.as @@ -0,0 +1,52 @@ +#pragma context server + +namespace MS +{ + +class BaseKeyhole : CGameScript +{ + int RETURN_KEY; + + void OnSpawn() override + { + SetName(KEYHOLE_NAME); + SetWidth(5); + SetHeight(16); + SetRoam(false); + SetModel("misc/keyhole.mdl"); + SetInvincible(true); + SetFly(true); + 1 = float(1); + SetSolid("none"); + SetNoPush(true); + SetMenuAutoOpen(1); + } + + void game_menu_getoptions() + { + if ((ItemExists(param1, KEY_NAME))) + { + string reg.mitem.title = KEYHOLE_TITLE; + string reg.mitem.type = "payment"; + string reg.mitem.data = KEY_NAME; + string reg.mitem.callback = "key_used"; + } + } + + void key_used() + { + UseTrigger(KEY_NAME); + if ((RETURN_KEY)) + { + // TODO: offer PARAM1 KEY_NAME + } + } + + void return_keys() + { + RETURN_KEY = 1; + } + +} + +} diff --git a/scripts/angelscript/other/beta_date.as b/scripts/angelscript/other/beta_date.as new file mode 100644 index 00000000..b8c60c2b --- /dev/null +++ b/scripts/angelscript/other/beta_date.as @@ -0,0 +1,14 @@ +#pragma context server + +namespace MS +{ + +class BetaDate : CGameScript +{ + void BETA_TIMESTAMP() + { + } + +} + +} diff --git a/scripts/angelscript/other/boom_block.as b/scripts/angelscript/other/boom_block.as new file mode 100644 index 00000000..abefee36 --- /dev/null +++ b/scripts/angelscript/other/boom_block.as @@ -0,0 +1,65 @@ +#pragma context server + +namespace MS +{ + +class BoomBlock : CGameScript +{ + int EFFECT_DIST; + string NPC_HOME_LOC; + int PLAYING_DEAD; + + BoomBlock() + { + EFFECT_DIST = 1024; + } + + void OnSpawn() override + { + SetInvincible(true); + SetRace("beloved"); + PLAYING_DEAD = 1; + SetSolid("none"); + SetNoPush(true); + ScheduleDelayedEvent(0.1, "get_home_loc"); + } + + void get_home_loc() + { + NPC_HOME_LOC = GetEntityOrigin(GetOwner()); + } + + void do_boom() + { + string BOOM_SOURCE = param1; + LogDebug("do_boom GetEntityRange(BOOM_SOURCE)"); + if (!(GetEntityRange(BOOM_SOURCE) < EFFECT_DIST)) return; + string DIST_RATIO = GetEntityRange(BOOM_SOURCE); + DIST_RATIO /= EFFECT_DIST; + string BOOM_DELAY = /* TODO: $ratio */ $ratio(DIST_RATIO, 0.1, 1.0); + LogDebug("do_boom BOOM_DELAY"); + BOOM_DELAY("do_bob"); + } + + void do_bob() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 200)); + } + + void reset_block() + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + SetEntityOrigin(GetOwner(), NPC_HOME_LOC); + } + + void bury_block() + { + SetSolid("none"); + string DOWN_16 = NPC_HOME_LOC; + DOWN_16 += "z"; + SetEntityOrigin(GetOwner(), DOWN_16); + } + +} + +} diff --git a/scripts/angelscript/other/burn_1000.as b/scripts/angelscript/other/burn_1000.as new file mode 100644 index 00000000..0bd34166 --- /dev/null +++ b/scripts/angelscript/other/burn_1000.as @@ -0,0 +1,35 @@ +#pragma context server + +namespace MS +{ + +class Burn1000 : CGameScript +{ + int PLAYING_DEAD; + + Burn1000() + { + SetCallback("touch", "enable"); + SetProp(GetOwner(), "solid", 1); + } + + void OnTouch(CBaseEntity@ other) override + { + SetName("Hot lava"); + SetRace("hated"); + PLAYING_DEAD = 1; + SetInvincible(true); + SetRoam(false); + string OUT_NAME = param2; + string BURN_DAMAGE = param3; + if ((BURN_DAMAGE).findFirst("PARAM") == 0) + { + int BURN_DAMAGE = 1000; + } + CallExternal(GAME_MASTER, "gm_setname", OUT_NAME); + ApplyEffect(param1, "effects/dot_fire", 2, GAME_MASTER, BURN_DAMAGE); + } + +} + +} diff --git a/scripts/angelscript/other/cannon_manned.as b/scripts/angelscript/other/cannon_manned.as new file mode 100644 index 00000000..8c3a3ac5 --- /dev/null +++ b/scripts/angelscript/other/cannon_manned.as @@ -0,0 +1,147 @@ +#pragma context server + +namespace MS +{ + +class CannonManned : CGameScript +{ + string AIMER_ID; + int AM_AIMING; + int DMG_CANNON; + int FIRE_DELAY; + float FREQ_FIRE; + string SOUND_CANNON; + string SPRITE_EXPLODE; + string SRC_YAW; + + CannonManned() + { + SPRITE_EXPLODE = "bigsmoke.spr"; + SOUND_CANNON = "weapons/explode3.wav"; + FREQ_FIRE = 30.0; + DMG_CANNON = 1000; + } + + void OnSpawn() override + { + SetName("Cannon"); + SetModel("props/cannon.mdl"); + SetInvincible(true); + SetBloodType("none"); + SetWidth(32); + SetHeight(48); + SetHealth(20); + SetRoam(false); + SetMenuAutoOpen(1); + SetNoPush(true); + ScheduleDelayedEvent(0.1, "get_src_yaw"); + } + + void get_src_yaw() + { + SRC_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + } + + void game_menu_getoptions() + { + if (!(IsEntityAlive(GetOwner()))) return; + SRC_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + if (!(FIRE_DELAY)) + { + if (!(AM_AIMING)) + { + AM_AIMING = 1; + aim_loop(); + AIMER_ID = param1; + } + string reg.mitem.title = "Fire!"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "fire_cannon"; + string reg.mitem.title = "Aim"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "aim_cannon"; + } + if ((FIRE_DELAY)) + { + string reg.mitem.title = "Reloading..."; + string reg.mitem.type = "disabled"; + string reg.mitem.callback = "none"; + } + } + + void game_menu_cancel() + { + AM_AIMING = 0; + } + + void aim_cannon() + { + AM_AIMING = 1; + AIMER_ID = param1; + aim_loop(); + } + + void aim_loop() + { + if (!(AM_AIMING)) return; + if (GetEntityRange(AIMER_ID) > 64) + { + int EXIT_SUB = 1; + AM_AIMING = 0; + } + if ((EXIT_LOOP)) return; + ScheduleDelayedEvent(0.1, "aim_loop"); + string AIMER_YAW = GetEntityProperty(AIMER_ID, "angles.yaw"); + string ANG_DIFF = /* TODO: $anglediff */ $anglediff(AIMER_YAW, SRC_YAW); + LogDebug("aim_loop ANG_DIFF"); + int AIM_OKAY = 0; + if (ANG_DIFF >= -45) + { + if (ANG_DIFF <= 45) + { + } + int AIM_OKAY = 1; + } + if (!(AIM_OKAY)) return; + SetAngles("face"); + } + + void fire_cannon() + { + AM_AIMING = 0; + EmitSound(GetOwner(), 0, SOUND_CANNON, 10); + if (StringToLower(GetMapName()) != "oceancrossing") + { + SetAngles("add_view.x"); + } + TossProjectile("proj_cannon_ball", /* TODO: $relpos */ $relpos(0, 32, 32), "none", 400, DMG_CANNON, 0, "none"); + Effect("tempent", "spray", SPRITE_EXPLODE, /* TODO: $relpos */ $relpos(0, 0, 0), 0, 1, 0, 0); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 380, 20, 1, 512); + FIRE_DELAY = 1; + FREQ_FIRE("reset_fire_delay"); + UseTrigger("cannon_fired"); + PlayAnim("critical", "shoot"); + } + + void reset_fire_delay() + { + FIRE_DELAY = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetMenuAutoOpen(0); + EmitSound(GetOwner(), 0, "debris/bustcrate3.wav", 10); + PlayAnim("critical", "die"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: "debris/wood1.wav", "debris/wood2.wav" + array sounds = {"debris/wood1.wav", "debris/wood2.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/other/cannon_manned_fixed.as b/scripts/angelscript/other/cannon_manned_fixed.as new file mode 100644 index 00000000..d29ac51f --- /dev/null +++ b/scripts/angelscript/other/cannon_manned_fixed.as @@ -0,0 +1,120 @@ +#pragma context server + +namespace MS +{ + +class CannonMannedFixed : CGameScript +{ + int AM_AIMING; + int AM_LOADED; + int DMG_CANNON; + int FIRE_DELAY; + float FREQ_FIRE; + string SOUND_CANNON; + string SPRITE_EXPLODE; + string SRC_YAW; + + CannonMannedFixed() + { + SPRITE_EXPLODE = "bigsmoke.spr"; + SOUND_CANNON = "weapons/explode3.wav"; + FREQ_FIRE = 30.0; + DMG_CANNON = 1000; + } + + void OnSpawn() override + { + SetName("Cannon"); + SetModel("props/cannon.mdl"); + SetBloodType("none"); + SetWidth(32); + SetHeight(48); + SetHealth(20); + SetRace("human"); + SetRoam(false); + SetMenuAutoOpen(1); + SetDamageResistance("stun", 0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 0.0); + SetDamageResistance("lightning", 0.5); + SetNoPush(true); + ScheduleDelayedEvent(0.1, "get_src_yaw"); + } + + void get_src_yaw() + { + SRC_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + } + + void game_menu_getoptions() + { + if (!(IsEntityAlive(GetOwner()))) return; + if (!(AM_LOADED)) + { + if (!(ItemExists(param1, "item_cannon_ball"))) + { + string reg.mitem.title = "Load Cannon"; + string reg.mitem.type = "disabled"; + } + else + { + string reg.mitem.title = "Load Cannon"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_cannon_ball"; + string reg.mitem.cb_failed = "no_balls"; + string reg.mitem.callback = "load_cannon"; + } + } + else + { + string reg.mitem.title = "Fire!"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "fire_cannon"; + } + } + + void no_balls() + { + SendColoredMessage(param1, "You need a cannon ball to load this weapon."); + } + + void load_cannon() + { + AM_LOADED = 1; + } + + void game_menu_cancel() + { + AM_AIMING = 0; + } + + void fire_cannon() + { + AM_LOADED = 0; + EmitSound(GetOwner(), 0, SOUND_CANNON, 10); + SetAngles("view"); + TossProjectile("proj_cannon_ball", /* TODO: $relpos */ $relpos(0, 16, -16), "none", 400, DMG_CANNON, 0, "none"); + Effect("tempent", "spray", SPRITE_EXPLODE, /* TODO: $relpos */ $relpos(0, 0, 0), 0, 1, 0, 0); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 380, 20, 1, 512); + FIRE_DELAY = 1; + UseTrigger("cannon_fired"); + PlayAnim("critical", "shoot"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetMenuAutoOpen(0); + EmitSound(GetOwner(), 0, "debris/bustcrate3.wav", 10); + PlayAnim("critical", "die"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + // PlayRandomSound from: "debris/wood1.wav", "debris/wood2.wav" + array sounds = {"debris/wood1.wav", "debris/wood2.wav"}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + +} + +} diff --git a/scripts/angelscript/other/catapault.as b/scripts/angelscript/other/catapault.as new file mode 100644 index 00000000..c8994720 --- /dev/null +++ b/scripts/angelscript/other/catapault.as @@ -0,0 +1,65 @@ +#pragma context server + +namespace MS +{ + +class Catapault : CGameScript +{ + int PLAYING_DEAD; + + void OnSpawn() override + { + SetName("catapault"); + SetFly(true); + SetGravity(0); + SetInvincible(true); + SetNoPush(true); + SetRace("orc"); + SetWidth(1); + SetHeight(1); + PLAYING_DEAD = 1; + SetIdleAnim("none"); + SetMoveAnim("none"); + } + + void OneBall() + { + Catapaults(1); + } + + void FiveBalls() + { + Catapaults(5); + } + + void Catapaults() + { + for (int i = 0; i < param1; i++) + { + FireCatapault(); + } + CallExternal("all", "CatapaultsIncoming"); + } + + void FireCatapault() + { + ScheduleDelayedEvent(Random(0.0, 1.5), "CatapaultShoot"); + } + + void CatapaultShoot() + { + if ((StringToLower(GetMapName())).findFirst("helena") >= 0) + { + CallExternal("all", "catapults_fire"); + SetAngles("view"); + } + else + { + SetAngles("view"); + } + TossProjectile("proj_catapaultball", /* TODO: $relpos */ $relpos("z", "x", "y"), "none", 1000, 1000, 30, "none"); + } + +} + +} diff --git a/scripts/angelscript/other/conflict_test.as b/scripts/angelscript/other/conflict_test.as new file mode 100644 index 00000000..3d576c82 --- /dev/null +++ b/scripts/angelscript/other/conflict_test.as @@ -0,0 +1,36 @@ +#pragma context server + +#include "monsters/externals.as" +#include "monsters/debug.as" + +namespace MS +{ + +class ConflictTest : CGameScript +{ + int CHECK_CONFLICTS; + int NOTICE_THIS_CONFLICT; + + ConflictTest() + { + CHECK_CONFLICTS = 1; + NOTICE_THIS_CONFLICT = 1; + NOTICE_THIS_CONFLICT = 2; + } + + void OnSpawn() override + { + SetName("Conflict Checker"); + SetModel("monsters/skeleton.mdl"); + SetWidth(32); + SetHeight(32); + SetHealth(10); + SetRace("beloved"); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + PlayAnim("once", "idle1"); + } + +} + +} diff --git a/scripts/angelscript/other/const_test.as b/scripts/angelscript/other/const_test.as new file mode 100644 index 00000000..8623bde4 --- /dev/null +++ b/scripts/angelscript/other/const_test.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "other/const_test_inc.as" + +namespace MS +{ + +class ConstTest : CGameScript +{ + int TOP_CONST; + + ConstTest() + { + TOP_CONST = 1; + Precache("dwarf/male1.mdl"); + } + + void OnSpawn() override + { + ScheduleDelayedEvent(0.1, "say_const"); + ScheduleDelayedEvent(1.0, "ext_change_const"); + } + + void say_const() + { + SayText("The constants are top " + TOP_CONST + "and bottom " + BOTTOM_CONST); + } + + void ext_change_const() + { + // TODO: UNCONVERTED: const_ovrd TOP_CONST A + // TODO: UNCONVERTED: const_ovrd BOTTOM_CONST B + SayText("The changed to top " + TOP_CONST + "and bottom " + BOTTOM_CONST); + SayText("Scriptvar top " + GetEntityProperty(GetOwner(), "scriptvar") + "and bottom " + GetEntityProperty(GetOwner(), "scriptvar")); + } + +} + +} diff --git a/scripts/angelscript/other/const_test_inc.as b/scripts/angelscript/other/const_test_inc.as new file mode 100644 index 00000000..eebfe961 --- /dev/null +++ b/scripts/angelscript/other/const_test_inc.as @@ -0,0 +1,17 @@ +#pragma context server + +namespace MS +{ + +class ConstTestInc : CGameScript +{ + int BOTTOM_CONST; + + ConstTestInc() + { + BOTTOM_CONST = 2; + } + +} + +} diff --git a/scripts/angelscript/other/end_siege.as b/scripts/angelscript/other/end_siege.as new file mode 100644 index 00000000..77207232 --- /dev/null +++ b/scripts/angelscript/other/end_siege.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class EndSiege : CGameScript +{ + int G_SIEGE_MAP; + + EndSiege() + { + } + + void OnSpawn() override + { + SetGlobalVar("G_CRITICAL_NPCS", ""); + G_SIEGE_MAP = 0; + } + +} + +} diff --git a/scripts/angelscript/other/grave_watcher.as b/scripts/angelscript/other/grave_watcher.as new file mode 100644 index 00000000..ca0f0f35 --- /dev/null +++ b/scripts/angelscript/other/grave_watcher.as @@ -0,0 +1,74 @@ +#pragma context server + +#include "other/base_item_detect.as" +#include "monsters/debug.as" + +namespace MS +{ + +class GraveWatcher : CGameScript +{ + int ITEM_FOUND; + int SCAN_RANGE; + string SEARCH_ITEM; + + GraveWatcher() + { + SEARCH_ITEM = "item_fstatue"; + SCAN_RANGE = 64; + } + + void item_detected() + { + if ((ITEM_FOUND)) return; + SetName("Feldar s Grave"); + ITEM_FOUND = 1; + OpenMenu(param1); + } + + void game_menu_getoptions() + { + if (!(ITEM_FOUND)) return; + if (!(ItemExists(param1, SEARCH_ITEM))) return; + string reg.mitem.title = "Place the Statuette"; + string reg.mitem.type = "payment"; + string reg.mitem.cb_failed = "payment_failed"; + string reg.mitem.data = SEARCH_ITEM; + string reg.mitem.callback = "statue_return"; + string reg.mitem.title = "Leave"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "player_opted_out"; + } + + void statue_return() + { + UseTrigger("got_statue"); + string KEEPER_ID = FindEntityByName("lkeeper"); + CallExternal(KEEPER_ID, "quest_done_grave"); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void player_opted_out() + { + UseTrigger("player_refused"); + ScheduleDelayedEvent(3.0, "reset_scan"); + } + + void payment_failed() + { + ScheduleDelayedEvent(3.0, "reset_scan"); + } + + void reset_scan() + { + ITEM_FOUND = 0; + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/other/hp_trigger_1000.as b/scripts/angelscript/other/hp_trigger_1000.as new file mode 100644 index 00000000..12efd656 --- /dev/null +++ b/scripts/angelscript/other/hp_trigger_1000.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "other/hp_trigger_base.as" + +namespace MS +{ + +class HpTrigger1000 : CGameScript +{ + string EVENT_NAME; + int TRIGGER_RANGE; + int TRIGGER_REQ; + + HpTrigger1000() + { + TRIGGER_RANGE = 512; + TRIGGER_REQ = 1000; + EVENT_NAME = "found_1000"; + } + +} + +} diff --git a/scripts/angelscript/other/hp_trigger_200.as b/scripts/angelscript/other/hp_trigger_200.as new file mode 100644 index 00000000..d846f542 --- /dev/null +++ b/scripts/angelscript/other/hp_trigger_200.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "other/hp_trigger_base.as" + +namespace MS +{ + +class HpTrigger200 : CGameScript +{ + string EVENT_NAME; + int TRIGGER_RANGE; + int TRIGGER_REQ; + + HpTrigger200() + { + TRIGGER_RANGE = 256; + TRIGGER_REQ = 200; + EVENT_NAME = "found_200"; + } + +} + +} diff --git a/scripts/angelscript/other/hp_trigger_300.as b/scripts/angelscript/other/hp_trigger_300.as new file mode 100644 index 00000000..6d623099 --- /dev/null +++ b/scripts/angelscript/other/hp_trigger_300.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "other/hp_trigger_base.as" + +namespace MS +{ + +class HpTrigger300 : CGameScript +{ + string EVENT_NAME; + int TRIGGER_RANGE; + int TRIGGER_REQ; + + HpTrigger300() + { + TRIGGER_RANGE = 256; + TRIGGER_REQ = 300; + EVENT_NAME = "found_300"; + } + +} + +} diff --git a/scripts/angelscript/other/hp_trigger_base.as b/scripts/angelscript/other/hp_trigger_base.as new file mode 100644 index 00000000..b5cc7089 --- /dev/null +++ b/scripts/angelscript/other/hp_trigger_base.as @@ -0,0 +1,108 @@ +#pragma context server + +namespace MS +{ + +class HpTriggerBase : CGameScript +{ + string EVENT_NAME; + int FOUND_ONE; + string HOME_LOC; + int TRIGGER_RANGE; + int TRIGGER_REQ; + + HpTriggerBase() + { + TRIGGER_RANGE = 256; + TRIGGER_REQ = 300; + EVENT_NAME = "found_300"; + } + + void OnSpawn() override + { + SetRace("beloved"); + SetBloodType("none"); + SetModel("none"); + SetInvincible(true); + SetHealth(1); + SetFly(true); + SetWidth(32); + SetHeight(32); + SetSolid("none"); + SetHearingSensitivity(8); + SetRoam(false); + SetMoveSpeed(0.0); + SetIdleAnim(""); + SetMoveAnim(""); + ScheduleDelayedEvent(0.5, "post_spawn"); + ScheduleDelayedEvent(0.1, "scan_for_players"); + } + + void post_spawn() + { + HOME_LOC = GetMonsterProperty("origin"); + ScheduleDelayedEvent(20.7, "reset_pos"); + } + + void scan_for_players() + { + if ((FOUND_ONE)) return; + ScheduleDelayedEvent(1.0, "scan_for_players"); + string PLAYER_ID = /* TODO: $get_insphere */ $get_insphere("player", TRIGGER_RANGE); + if ((IsValidPlayer(PLAYER_ID))) + { + if (GetEntityMaxHealth(PLAYER_ID) >= TRIGGER_REQ) + { + } + found_worthy(); + } + if (!(CanSee("player", TRIGGER_RANGE))) return; + if (!(GetEntityMaxHealth(m_hLastSeen) >= TRIGGER_REQ)) return; + found_worthy(); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((FOUND_ONE)) return; + if (!(IsValidPlayer("ent_lastheard"))) return; + if (!(GetEntityRange("ent_lastheard") < TRIGGER_RANGE)) return; + if (!(GetEntityMaxHealth("ent_lastheard") >= TRIGGER_REQ)) return; + found_worthy(); + } + + void found_worthy() + { + if ((FOUND_ONE)) return; + FOUND_ONE = 1; + UseTrigger(EVENT_NAME); + ScheduleDelayedEvent(1.0, "clear_out"); + } + + void clear_out() + { + ScheduleDelayedEvent(0.1, "suicide_debug"); + SetInvincible(false); + SetRace("hated"); + ScheduleDelayedEvent(0.2, "clear_out2"); + } + + void clear_out2() + { + DoDamage(GetEntityIndex(GetOwner()), "direct", 1000, 1.0, GetEntityIndex(GetOwner())); + } + + void suicide_debug() + { + ScheduleDelayedEvent(2.0, "suicide_debug"); + } + + void reset_pos() + { + if (!(GetMonsterProperty("isalive"))) return; + SetEntityOrigin(GetOwner(), HOME_LOC); + ScheduleDelayedEvent(20.7, "reset_pos"); + } + +} + +} diff --git a/scripts/angelscript/other/ice_wall.as b/scripts/angelscript/other/ice_wall.as new file mode 100644 index 00000000..8da9e19a --- /dev/null +++ b/scripts/angelscript/other/ice_wall.as @@ -0,0 +1,53 @@ +#pragma context server + +namespace MS +{ + +class IceWall : CGameScript +{ + int IS_ACTIVE; + int ROT_COUNT; + + void OnSpawn() override + { + SetInvincible(true); + } + + void activate_wall() + { + LogDebug("activate_wall GetEntityOrigin(param1)"); + SetEntityOrigin(GetOwner(), GetEntityOrigin(param1)); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + if ((IS_ACTIVE)) return; + ROT_COUNT = 0; + IS_ACTIVE = 1; + spin_loop(); + } + + void spin_loop() + { + if (!(IS_ACTIVE)) return; + ROT_COUNT += 1; + if (ROT_COUNT > 359) + { + ROT_COUNT = 0; + } + SetAngles("face"); + ScheduleDelayedEvent(0.1, "spin_loop"); + } + + void deactivate_wall() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "hide_wall"); + } + + void hide_wall() + { + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + } + +} + +} diff --git a/scripts/angelscript/other/idle_lure.as b/scripts/angelscript/other/idle_lure.as new file mode 100644 index 00000000..abc540c0 --- /dev/null +++ b/scripts/angelscript/other/idle_lure.as @@ -0,0 +1,61 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class IdleLure : CGameScript +{ + string LURE_RACE; + string PAR_STR; + int PLAYING_DEAD; + string RUN_WALK; + + void OnRepeatTimer() + { + SetRepeatDelay(10.0); + if (LURE_RACE == "none") + { + LURE_RACE = "all"; + } + CallExternal("all", "ext_super_lure", GetEntityIndex(GetOwner()), LURE_RACE, RUN_WALK); + } + + void OnSpawn() override + { + SetInvincible(true); + SetFly(true); + SetNoPush(true); + PLAYING_DEAD = 1; + } + + void game_postspawn() + { + PAR_STR = param4; + LURE_RACE = "all"; + RUN_WALK = "walk"; + string N_PARS = GetTokenCount(param4, ";"); + if (!(N_PARS > 0)) return; + for (int i = 0; i < N_PARS; i++) + { + parse_params(); + } + } + + void parse_params() + { + string CUR_PARAM = GetToken(PAR_STR, i, ";"); + if (CUR_PARAM == "run") + { + RUN_WALK = "run"; + } + if (CUR_PARAM != "run") + { + LURE_RACE = CUR_PARAM; + } + } + +} + +} diff --git a/scripts/angelscript/other/keyhole.as b/scripts/angelscript/other/keyhole.as new file mode 100644 index 00000000..6de60973 --- /dev/null +++ b/scripts/angelscript/other/keyhole.as @@ -0,0 +1,173 @@ +#pragma context server + +namespace MS +{ + +class Keyhole : CGameScript +{ + int KEY_USED; + + void OnSpawn() override + { + SetName("keyhole"); + SetWidth(2); + SetHeight(16); + SetRoam(false); + SetModel("misc/keyhole.mdl"); + SetInvincible(2); + KEY_USED = 0; + SetFly(true); + 1 = float(1); + SetMenuAutoOpen(1); + } + + void rusty_use_the_key() + { + ReceiveOffer("accept"); + UseTrigger("item_key_rusty"); + } + + void storage_use_the_key() + { + ReceiveOffer("accept"); + UseTrigger("item_storageroomkey"); + } + + void game_menu_getoptions() + { + if ((ItemExists(param1, "item_key_rusty"))) + { + string reg.mitem.title = "Use the rusty key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_key_rusty"; + string reg.mitem.callback = "rusty_use_the_key"; + } + if ((ItemExists(param1, "item_storageroomkey"))) + { + string reg.mitem.title = "Use the storage key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_storageroomkey"; + string reg.mitem.callback = "storage_use_the_key"; + } + if ((ItemExists(param1, "key_red"))) + { + string reg.mitem.title = "Use the crimson key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_red"; + string reg.mitem.callback = "key_red"; + } + if ((ItemExists(param1, "key_blue"))) + { + string reg.mitem.title = "Use the sapphire key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_blue"; + string reg.mitem.callback = "key_blue"; + } + if ((ItemExists(param1, "key_green"))) + { + string reg.mitem.title = "Use the emerald key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_green"; + string reg.mitem.callback = "key_green"; + } + if ((ItemExists(param1, "key_skeleton"))) + { + string reg.mitem.title = "Use the skeleton key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_skeleton"; + string reg.mitem.callback = "key_skeleton"; + } + if ((ItemExists(param1, "key_brass"))) + { + string reg.mitem.title = "Use the brass key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_brass"; + string reg.mitem.callback = "key_brass"; + } + if ((ItemExists(param1, "key_gold"))) + { + string reg.mitem.title = "Use the gold key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_gold"; + string reg.mitem.callback = "key_gold"; + } + if ((ItemExists(param1, "key_treasury"))) + { + string reg.mitem.title = "Use the treasury key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_treasury"; + string reg.mitem.callback = "key_treasury"; + } + if ((ItemExists(param1, "key_forged"))) + { + string reg.mitem.title = "Use the forged key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_forged"; + string reg.mitem.callback = "key_forged"; + } + if ((ItemExists(param1, "key_ice"))) + { + string reg.mitem.title = "Use the ice key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_ice"; + string reg.mitem.callback = "key_ice"; + } + } + + void key_red() + { + ReceiveOffer("accept"); + UseTrigger("key_red"); + } + + void key_blue() + { + ReceiveOffer("accept"); + UseTrigger("key_blue"); + } + + void key_green() + { + ReceiveOffer("accept"); + UseTrigger("key_green"); + } + + void key_skeleton() + { + ReceiveOffer("accept"); + UseTrigger("key_skeleton"); + } + + void key_brass() + { + ReceiveOffer("accept"); + UseTrigger("key_brass"); + } + + void key_gold() + { + ReceiveOffer("accept"); + UseTrigger("key_gold"); + } + + void key_treasury() + { + ReceiveOffer("accept"); + UseTrigger("key_treasury"); + } + + void key_forged() + { + ReceiveOffer("accept"); + UseTrigger("key_forged"); + } + + void key_ice() + { + ReceiveOffer("accept"); + UseTrigger("key_forged"); + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_blue.as b/scripts/angelscript/other/keyhole_blue.as new file mode 100644 index 00000000..e43dcff3 --- /dev/null +++ b/scripts/angelscript/other/keyhole_blue.as @@ -0,0 +1,30 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeBlue : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeBlue() + { + KEY_NAME = "key_blue"; + KEYHOLE_NAME = "Blue Keyhole"; + KEYHOLE_TITLE = "Use the sapphire key"; + RETURN_KEY = 0; + } + + void key_used() + { + UseTrigger("ustart"); + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_brass.as b/scripts/angelscript/other/keyhole_brass.as new file mode 100644 index 00000000..34722910 --- /dev/null +++ b/scripts/angelscript/other/keyhole_brass.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeBrass : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeBrass() + { + KEY_NAME = "key_brass"; + KEYHOLE_NAME = "Brass Keyhole"; + KEYHOLE_TITLE = "Use the brass key"; + RETURN_KEY = 0; + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_crystal.as b/scripts/angelscript/other/keyhole_crystal.as new file mode 100644 index 00000000..552e7d48 --- /dev/null +++ b/scripts/angelscript/other/keyhole_crystal.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeCrystal : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeCrystal() + { + KEY_NAME = "key_crystal"; + KEYHOLE_NAME = "Crystal Keyhole."; + KEYHOLE_TITLE = "Use the crystal key."; + RETURN_KEY = 1; + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_forged.as b/scripts/angelscript/other/keyhole_forged.as new file mode 100644 index 00000000..5d60b44c --- /dev/null +++ b/scripts/angelscript/other/keyhole_forged.as @@ -0,0 +1,51 @@ +#pragma context server + +namespace MS +{ + +class KeyholeForged : CGameScript +{ + string KEYHOLE_TITLE; + string KEY_NAME; + + KeyholeForged() + { + KEY_NAME = "key_forged"; + KEYHOLE_TITLE = "Use the forged key"; + } + + void OnSpawn() override + { + SetName("Ornate Keyhole"); + SetWidth(2); + SetHeight(16); + SetRoam(false); + SetModel("props/skullprop.mdl"); + SetModelBody(0, 0); + SetInvincible(2); + SetFly(true); + 1 = float(1); + SetMenuAutoOpen(1); + } + + void game_menu_getoptions() + { + if ((ItemExists(param1, KEY_NAME))) + { + string reg.mitem.title = KEYHOLE_TITLE; + string reg.mitem.type = "payment"; + string reg.mitem.data = KEY_NAME; + string reg.mitem.callback = "key_used"; + } + } + + void key_used() + { + ReceiveOffer("accept"); + SetModelBody(0, 1); + UseTrigger(KEY_NAME); + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_gold.as b/scripts/angelscript/other/keyhole_gold.as new file mode 100644 index 00000000..84823eb5 --- /dev/null +++ b/scripts/angelscript/other/keyhole_gold.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeGold : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeGold() + { + KEY_NAME = "key_gold"; + KEYHOLE_NAME = "Golden Keyhole"; + KEYHOLE_TITLE = "Use the gold key"; + RETURN_KEY = 0; + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_green.as b/scripts/angelscript/other/keyhole_green.as new file mode 100644 index 00000000..098a625b --- /dev/null +++ b/scripts/angelscript/other/keyhole_green.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeGreen : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeGreen() + { + KEY_NAME = "key_green"; + KEYHOLE_NAME = "Jade Keyhole"; + KEYHOLE_TITLE = "Use the jade key"; + RETURN_KEY = 0; + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_ice.as b/scripts/angelscript/other/keyhole_ice.as new file mode 100644 index 00000000..91fbc3e9 --- /dev/null +++ b/scripts/angelscript/other/keyhole_ice.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeIce : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeIce() + { + KEY_NAME = "key_blue"; + KEYHOLE_NAME = "Ice Encrusted Keyhole"; + KEYHOLE_TITLE = "Use the Ice key"; + RETURN_KEY = 0; + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_red.as b/scripts/angelscript/other/keyhole_red.as new file mode 100644 index 00000000..87cf1c1b --- /dev/null +++ b/scripts/angelscript/other/keyhole_red.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeRed : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeRed() + { + KEY_NAME = "key_red"; + KEYHOLE_NAME = "Blood Stained Keyhole"; + KEYHOLE_TITLE = "Use the crimson key"; + RETURN_KEY = 0; + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_return.as b/scripts/angelscript/other/keyhole_return.as new file mode 100644 index 00000000..4f97456e --- /dev/null +++ b/scripts/angelscript/other/keyhole_return.as @@ -0,0 +1,189 @@ +#pragma context server + +namespace MS +{ + +class KeyholeReturn : CGameScript +{ + int KEY_USED; + + void OnSpawn() override + { + SetName("keyhole"); + SetWidth(8); + SetHeight(32); + SetRoam(false); + SetModel("props/skullprop.mdl"); + SetInvincible(2); + KEY_USED = 0; + SetFly(true); + 1 = float(1); + SetMenuAutoOpen(1); + } + + void rusty_use_the_key() + { + ReceiveOffer("accept"); + UseTrigger("item_key_rusty"); + // TODO: offer KEY_MASTAH item_key_rusty + } + + void storage_use_the_key() + { + ReceiveOffer("accept"); + UseTrigger("item_storageroomkey"); + // TODO: offer KEY_MASTAH item_storageroomkey + } + + void game_menu_getoptions() + { + if ((ItemExists(param1, "item_key_rusty"))) + { + string reg.mitem.title = "Use the rusty key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_key_rusty"; + string reg.mitem.callback = "rusty_use_the_key"; + } + if ((ItemExists(param1, "item_storageroomkey"))) + { + string reg.mitem.title = "Use the storage key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_storageroomkey"; + string reg.mitem.callback = "storage_use_the_key"; + } + if ((ItemExists(param1, "key_red"))) + { + string reg.mitem.title = "Use the crimson key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_red"; + string reg.mitem.callback = "key_red"; + } + if ((ItemExists(param1, "key_blue"))) + { + string reg.mitem.title = "Use the saphire key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_blue"; + string reg.mitem.callback = "key_blue"; + } + if ((ItemExists(param1, "key_green"))) + { + string reg.mitem.title = "Use the emerald key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_green"; + string reg.mitem.callback = "key_green"; + } + if ((ItemExists(param1, "key_skeleton"))) + { + string reg.mitem.title = "Use the skeleton key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_skeleton"; + string reg.mitem.callback = "key_skeleton"; + } + if ((ItemExists(param1, "key_brass"))) + { + string reg.mitem.title = "Use the brass key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_brass"; + string reg.mitem.callback = "key_brass"; + } + if ((ItemExists(param1, "key_gold"))) + { + string reg.mitem.title = "Use the gold key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_gold"; + string reg.mitem.callback = "key_gold"; + } + if ((ItemExists(param1, "key_treasury"))) + { + string reg.mitem.title = "Use the treasury key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_treasury"; + string reg.mitem.callback = "key_treasury"; + } + if ((ItemExists(param1, "key_forged"))) + { + string reg.mitem.title = "Use the forged key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_forged"; + string reg.mitem.callback = "key_forged"; + } + if ((ItemExists(param1, "key_ice"))) + { + string reg.mitem.title = "Use the ice key"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "key_ice"; + string reg.mitem.callback = "key_ice"; + } + } + + void game_recvoffer_item() + { + SetModelBody(0, 1); + } + + void key_red() + { + ReceiveOffer("accept"); + UseTrigger("key_red"); + // TODO: offer PARAM1 key_red + } + + void key_blue() + { + ReceiveOffer("accept"); + UseTrigger("key_blue"); + // TODO: offer PARAM1 key_blue + } + + void key_green() + { + ReceiveOffer("accept"); + UseTrigger("key_green"); + // TODO: offer PARAM1 key_green + } + + void key_skeleton() + { + ReceiveOffer("accept"); + UseTrigger("key_skeleton"); + // TODO: offer PARAM1 key_skeleton + } + + void key_brass() + { + ReceiveOffer("accept"); + UseTrigger("key_brass"); + // TODO: offer PARAM1 key_brass + } + + void key_gold() + { + ReceiveOffer("accept"); + UseTrigger("key_gold"); + // TODO: offer PARAM1 key_gold + } + + void key_treasury() + { + ReceiveOffer("accept"); + UseTrigger("key_treasury"); + // TODO: offer PARAM1 key_treasury + } + + void key_forged() + { + ReceiveOffer("accept"); + UseTrigger("key_forged"); + // TODO: offer PARAM1 key_forged + } + + void key_ice() + { + ReceiveOffer("accept"); + UseTrigger("key_forged"); + // TODO: offer PARAM1 key_ice + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_rusty.as b/scripts/angelscript/other/keyhole_rusty.as new file mode 100644 index 00000000..7edede81 --- /dev/null +++ b/scripts/angelscript/other/keyhole_rusty.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeRusty : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeRusty() + { + KEY_NAME = "item_key_rusty"; + KEYHOLE_NAME = "Rusty Keyhole"; + KEYHOLE_TITLE = "Use the rusty key"; + RETURN_KEY = 0; + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_sewer.as b/scripts/angelscript/other/keyhole_sewer.as new file mode 100644 index 00000000..dda61eff --- /dev/null +++ b/scripts/angelscript/other/keyhole_sewer.as @@ -0,0 +1,30 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeSewer : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeSewer() + { + KEY_NAME = "item_key_sewer"; + KEYHOLE_NAME = "Sewer Maintenance Keyhole"; + KEYHOLE_TITLE = "Use the maintenance key"; + RETURN_KEY = 0; + } + + void key_used() + { + UseTrigger("ustart"); + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_skeleton.as b/scripts/angelscript/other/keyhole_skeleton.as new file mode 100644 index 00000000..841f82ac --- /dev/null +++ b/scripts/angelscript/other/keyhole_skeleton.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeSkeleton : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeSkeleton() + { + KEY_NAME = "key_skeleton"; + KEYHOLE_NAME = "Keyhole carved from bones"; + KEYHOLE_TITLE = "Use the skeleton key"; + RETURN_KEY = 0; + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_storageroomkey.as b/scripts/angelscript/other/keyhole_storageroomkey.as new file mode 100644 index 00000000..7e068596 --- /dev/null +++ b/scripts/angelscript/other/keyhole_storageroomkey.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeStorageroomkey : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeStorageroomkey() + { + KEY_NAME = "item_storageroomkey"; + KEYHOLE_NAME = "Storageroom Keyhole"; + KEYHOLE_TITLE = "Use the Storageroom key"; + RETURN_KEY = 0; + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_summon.as b/scripts/angelscript/other/keyhole_summon.as new file mode 100644 index 00000000..c664c3c7 --- /dev/null +++ b/scripts/angelscript/other/keyhole_summon.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeSummon : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeSummon() + { + KEY_NAME = "item_summon_crystal"; + KEYHOLE_NAME = "Crystal Holder"; + KEYHOLE_TITLE = "Place the Summoning Crystal"; + RETURN_KEY = 0; + } + + void OnSpawn() override + { + SetName(KEYHOLE_NAME); + SetWidth(2); + SetHeight(16); + SetRoam(false); + SetModel("npc/human1.mdl"); + SetInvincible(2); + SetFly(true); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SetMenuAutoOpen(1); + } + +} + +} diff --git a/scripts/angelscript/other/keyhole_treasury.as b/scripts/angelscript/other/keyhole_treasury.as new file mode 100644 index 00000000..bca10182 --- /dev/null +++ b/scripts/angelscript/other/keyhole_treasury.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class KeyholeTreasury : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + KeyholeTreasury() + { + KEY_NAME = "key_treasury"; + KEYHOLE_NAME = "Keyhole for the Treasury"; + KEYHOLE_TITLE = "Use the treasury key"; + RETURN_KEY = 0; + } + +} + +} diff --git a/scripts/angelscript/other/kill_all_monsters.as b/scripts/angelscript/other/kill_all_monsters.as new file mode 100644 index 00000000..ef869822 --- /dev/null +++ b/scripts/angelscript/other/kill_all_monsters.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class KillAllMonsters : CGameScript +{ + void OnSpawn() override + { + CallExternal("all", "npc_suicide", "no_pets"); + } + +} + +} diff --git a/scripts/angelscript/other/lure.as b/scripts/angelscript/other/lure.as new file mode 100644 index 00000000..7ff1729e --- /dev/null +++ b/scripts/angelscript/other/lure.as @@ -0,0 +1,160 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/debug.as" + +namespace MS +{ + +class Lure : CGameScript +{ + string LURE_HOME_POS; + string NEW_NAME; + int NPC_CRITICAL; + int NPC_CRIT_WARN_DELAY; + int NPC_DMG_MULTI; + string NPC_DO_EVENTS; + int NPC_HP_MULTI; + + void OnSpawn() override + { + SetHealth(1); + SetRoam(false); + SetRace("human"); + SetBloodType("none"); + SetSkillLevel(0); + SetWidth(32); + SetHeight(32); + SetModel("null.mdl"); + SetNoPush(true); + SetSolid("trigger"); + ScheduleDelayedEvent(1.0, "get_pos"); + } + + void get_pos() + { + LURE_HOME_POS = GetMonsterProperty("origin"); + ScheduleDelayedEvent(20.0, "maintain_pos"); + } + + void OnSpawn() override + { + SetBloodType("none"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + UseTrigger("lure_died"); + if (!(NPC_CRITICAL)) return; + string INFO_TITLE = "A CRITICAL OBJECT HAS BEEN DESTROYED!"; + string INFO_MSG = GetEntityName(GetOwner()); + INFO_MSG += " has been destroyed! "; + SendInfoMsg("all", INFO_TITLE + INFO_MSG); + CallExternal(GAME_MASTER, "gm_crit_npc_died", GetEntityIndex(GetOwner()), GetEntityIndex(m_hLastStruck)); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + SetEntityOrigin(GetOwner(), LURE_HOME_POS); + if (!(IsValidPlayer(m_hLastStruck) == 1)) return; + HealEntity(GetOwner(), param1); + if ((NPC_CRITICAL)) + { + if (!(NPC_CRIT_WARN_DELAY)) + { + NPC_CRIT_WARN_DELAY = 1; + NPC_FREQ_WARN("npcatk_reset_warn_delay"); + string INFO_TITLE = "Critical Object Under Attack!"; + string INFO_MSG = GetEntityName(GetOwner()); + INFO_MSG += " is under attack!"; + SendInfoMsg("all", INFO_TITLE + INFO_MSG); + } + } + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + LogDebug("game_takedamage GetEntityName(param1) GetEntityName(param2) PARAM3 PARAM4"); + if ((IsValidPlayer(param1))) + { + SetDamage("dmg"); + return; + } + if ((IsValidPlayer(param2))) + { + SetDamage("dmg"); + return; + } + } + + void OnDamage(int damage) override + { + LogDebug("game_takedamage GetEntityName(param1)"); + if (!(IsValidPlayer(param1))) return; + SetDamage("dmg"); + SetDamage("hit"); + return; + } + + void maintain_pos() + { + SetEntityOrigin(GetOwner(), LURE_HOME_POS); + ScheduleDelayedEvent(20.0, "maintain_pos"); + } + + void make_sun() + { + SetName("The sun"); + SetInvincible(true); + SetRace("hated"); + } + + void game_postspawn() + { + LogDebug("game_postspawn got name PARAM1 dmg PARAM2 hp PARAM3 PARAMS: PARAM4"); + NEW_NAME = param1; + if (NEW_NAME != "default") + { + SetName(NEW_NAME); + } + NPC_DMG_MULTI = 1; + if (param2 > 1) + { + NPC_DMG_MULTI += param2; + SetDamageMultiplier(param2); + } + NPC_HP_MULTI = 1; + if (param3 > 1) + { + NPC_HP_MULTI = param3; + } + NPC_DO_EVENTS = param4; + if (!(param4 != "none")) return; + for (int i = 0; i < GetTokenCount(NPC_DO_EVENTS, ";"); i++) + { + npcatk_do_events(); + } + } + + void critical_npc() + { + SetInvincible(false); + NPC_CRITICAL = 1; + if (G_CRITICAL_NPCS.length() > 0) G_CRITICAL_NPCS += ";"; + G_CRITICAL_NPCS += GetEntityIndex(GetOwner()); + SetGlobalVar("G_SIEGE_MAP", 1); + string FIRST_TOKEN = GetToken(G_CRITICAL_NPCS, 0, ";"); + if (!(IsEntityAlive(FIRST_TOKEN))) + { + RemoveToken(G_CRITICAL_NPCS, 0, ";"); + } + } + + void npcatk_reset_warn_delay() + { + NPC_CRIT_WARN_DELAY = 0; + } + +} + +} diff --git a/scripts/angelscript/other/make_glow.as b/scripts/angelscript/other/make_glow.as new file mode 100644 index 00000000..d5aa85cc --- /dev/null +++ b/scripts/angelscript/other/make_glow.as @@ -0,0 +1,146 @@ +#pragma context server + +#include "monsters/base_flyer_grav.as" +#include "monsters/externals.as" + +namespace MS +{ + +class MakeGlow : CGameScript +{ + float CYCLE_RATE; + string NPCATK_TARGET; + int SUSPEND_AI; + + void OnSpawn() override + { + SetName("Killer Map Brush"); + SetRace("hated"); + SetHealth(1000); + SetHearingSensitivity(11); + NPCATK_TARGET = "unset"; + SetMenuAutoOpen(1); + SUSPEND_AI = 1; + SetGravity(0); + CYCLE_RATE = 1.0; + ScheduleDelayedEvent(1.0, "npcatk_hunt"); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + string HEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(GetRelationship(GetOwner()) == "enemy")) return; + NPCATK_TARGET = HEARD_ID; + Effect("glow", GetOwner(), Vector3(255, 255, 0), 64, 30, 30); + } + + void OnDamage(int damage) override + { + if (!(GetRelationship(param1) == "enemy")) return; + NPCATK_TARGET = HEARD_ID; + Effect("glow", GetOwner(), Vector3(255, 0, 0), 64, 30, 30); + } + + void OnDeath(CBaseEntity@ attacker) override + { + EmitSound(GetOwner(), 0, "voices/human/male_die.wav", 10); + DeleteEntity(GetOwner(), true); // fade out + } + + void OnHuntTarget(CBaseEntity@ target) + { + CYCLE_RATE("npcatk_hunt"); + if ((SUSPEND_AI)) return; + LogDebug("Hunting GetEntityName(m_hAttackTarget) [ GetEntityRange(m_hAttackTarget) ]"); + EmitSound(GetOwner(), 2, "magic/energy1.wav", 10); + if (!(IsEntityAlive(m_hAttackTarget))) + { + NPCATK_TARGET = "unset"; + } + if (!(m_hAttackTarget != "unset")) return; + SetMoveDest(m_hAttackTarget); + if ((false)) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 50, 0)); + } + if (GetEntityRange(m_hAttackTarget) < 64) + { + DoDamage(m_hAttackTarget, 64, 5, 50, "slash"); + } + } + + void npcatk_resume_ai() + { + CYCLE_RATE = 0.1; + NPCATK_TARGET = param1; + SUSPEND_AI = 0; + } + + void OnSuspendAI() + { + CYCLE_RATE = 1.0; + SUSPEND_AI = 1; + } + + void menu_hunt() + { + npcatk_resume_ai(GetEntityIndex(param1)); + } + + void menu_stop() + { + npcatk_suspend_ai(); + } + + void menu_glow() + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 255, 0), 128, 30.0); + } + + void game_menu_getoptions() + { + if ((SUSPEND_AI)) + { + string reg.mitem.title = "Hunt"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_hunt"; + } + else + { + string reg.mitem.title = "Stop"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_stop"; + } + string reg.mitem.title = "Glow"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_glow"; + string reg.mitem.title = "Additive"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_additive"; + string reg.mitem.title = "Spin"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "menu_spin"; + } + + void menu_fly() + { + SetGravity(0); + SetSayTextRange(1024); + SayText("Weeee!"); + } + + void menu_additive() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + } + + void menu_spin() + { + SetProp(GetOwner(), "avelocity", Vector3(50, 50, 0)); + ScheduleDelayedEvent(0.1, "menu_spin"); + } + +} + +} diff --git a/scripts/angelscript/other/make_mons_dumb.as b/scripts/angelscript/other/make_mons_dumb.as new file mode 100644 index 00000000..e9733565 --- /dev/null +++ b/scripts/angelscript/other/make_mons_dumb.as @@ -0,0 +1,15 @@ +#pragma context server + +namespace MS +{ + +class MakeMonsDumb : CGameScript +{ + void OnSpawn() override + { + SetGlobalVar("NO_ADVANCED_SEARCHES", 1); + } + +} + +} diff --git a/scripts/angelscript/other/make_mons_smart.as b/scripts/angelscript/other/make_mons_smart.as new file mode 100644 index 00000000..01b52a4e --- /dev/null +++ b/scripts/angelscript/other/make_mons_smart.as @@ -0,0 +1,15 @@ +#pragma context server + +namespace MS +{ + +class MakeMonsSmart : CGameScript +{ + void OnSpawn() override + { + SetGlobalVar("NO_ADVANCED_SEARCHES", 0); + } + +} + +} diff --git a/scripts/angelscript/other/metal_cave.as b/scripts/angelscript/other/metal_cave.as new file mode 100644 index 00000000..59e00c82 --- /dev/null +++ b/scripts/angelscript/other/metal_cave.as @@ -0,0 +1,70 @@ +#pragma context server + +namespace MS +{ + +class MetalCave : CGameScript +{ + int DEBUG_ANG; + int PLAYING_DEAD; + + void OnSpawn() override + { + SetModel("terrain/metal_caverns_01b.mdl"); + SetName("metal_cave"); + SetSolid("none"); + SetInvincible(true); + SetNoPush(true); + SetGravity(0); + SetFly(true); + SetName(""); + SetRoam(false); + PLAYING_DEAD = 1; + DEBUG_ANG = 0; + SetAngles("face"); + ScheduleDelayedEvent(0.5, "refresh_cl_fx"); + } + + void refresh_cl_fx() + { + ClientEvent("update", "all", "const.localplayer.scriptID", "cl_metal_cave_light", GetEntityIndex(GetOwner())); + } + + void ext_refresh_cl_fx() + { + refresh_cl_fx(); + } + + void ext_turn() + { + if (param1 == "PARAM1") + { + DEBUG_ANG += 5; + string PARAM1 = DEBUG_ANG; + } + SetAngles("face"); + LogDebug("ext_turn PARAM1"); + } + + void ext_clearout() + { + ClientEvent("update", "all", "const.localplayer.scriptID", "cl_metal_cave_light_end", GetEntityIndex(GetOwner())); + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + tele_players(); + } + } + + void tele_players() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if (GetEntityProperty(CUR_TARG, "range2d") < 896) + { + // TODO: tospawn CUR_TARG from_tear + } + } + +} + +} diff --git a/scripts/angelscript/other/metal_cave_cl.as b/scripts/angelscript/other/metal_cave_cl.as new file mode 100644 index 00000000..5f36a848 --- /dev/null +++ b/scripts/angelscript/other/metal_cave_cl.as @@ -0,0 +1,90 @@ +#pragma context client + +namespace MS +{ + +class MetalCaveCl : CGameScript +{ + int B_CYCLE; + float B_CYCLE_PM; + string GLOW_COLOR; + string GLOW_RAD; + int G_CYCLE; + float G_CYCLE_PM; + int R_CYCLE; + float R_CYCLE_PM; + string SKEL_ID; + string SKEL_LIGHT_ID; + + void client_activate() + { + SKEL_ID = param1; + GLOW_COLOR = param2; + GLOW_RAD = param3; + if (!(SKEL_LIGHT_ID == "SKEL_LIGHT_ID")) return; + R_CYCLE = RandomInt(0, 255); + G_CYCLE = RandomInt(0, 255); + B_CYCLE = RandomInt(0, 255); + R_CYCLE_PM = 0.01; + G_CYCLE_PM = -0.01; + B_CYCLE_PM = 0.01; + SetCallback("render", "enable"); + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SKEL_ID, "origin"), GLOW_RAD, GLOW_COLOR, 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + PARAM4("remove_light"); + } + + void game_prerender() + { + string L_CYCLE = R_CYCLE_PM; + L_CYCLE *= Random(1, 2); + R_CYCLE += L_CYCLE; + if (R_CYCLE < 0) + { + R_CYCLE_PM *= -1; + R_CYCLE = 0; + } + if (R_CYCLE > 255) + { + R_CYCLE_PM *= -1; + R_CYCLE = 255; + } + string L_CYCLE = G_CYCLE_PM; + L_CYCLE *= Random(1, 2); + G_CYCLE += L_CYCLE; + if (G_CYCLE < 0) + { + G_CYCLE_PM *= -1; + G_CYCLE = 0; + } + if (G_CYCLE > 255) + { + G_CYCLE_PM *= -1; + G_CYCLE = 255; + } + string L_CYCLE = B_CYCLE_PM; + L_CYCLE *= Random(1, 2); + B_CYCLE += L_CYCLE; + if (B_CYCLE < 0) + { + B_CYCLE_PM *= -1; + B_CYCLE = 0; + } + if (B_CYCLE > 255) + { + B_CYCLE_PM *= -1; + B_CYCLE = 255; + } + Vector3 L_COLOR = Vector3(int(R_CYCLE), int(G_CYCLE), int(B_CYCLE)); + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, GLOW_RAD, L_COLOR, 1.0); + } + + void remove_light() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/other/mons_hate_me.as b/scripts/angelscript/other/mons_hate_me.as new file mode 100644 index 00000000..05eede10 --- /dev/null +++ b/scripts/angelscript/other/mons_hate_me.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class MonsHateMe : CGameScript +{ + void OnSpawn() override + { + SetHealth(1); + SetRoam(false); + SetWidth(128); + SetHeight(128); + SetModel("none"); + SetName("Structure"); + SetRace("hated"); + SetBloodType("none"); + SetSkillLevel(0); + Precache("woodgibs.mdl"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + UseTrigger("tower_fall"); + Effect("tempent", "gibs", "woodgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1, 5, 15, 20, 5); + } + +} + +} diff --git a/scripts/angelscript/other/monster_lure.as b/scripts/angelscript/other/monster_lure.as new file mode 100644 index 00000000..89faabd9 --- /dev/null +++ b/scripts/angelscript/other/monster_lure.as @@ -0,0 +1,35 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class MonsterLure : CGameScript +{ + void OnSpawn() override + { + SetHealth(1); + SetRoam(false); + SetName("Structure"); + SetRace("human"); + SetBloodType("none"); + SetSkillLevel(0); + Precache("woodgibs.mdl"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + UseTrigger("tower_fall"); + ScheduleDelayedEvent(0.1, "remove_me"); + Effect("tempent", "gibs", "woodgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1, 5, 15, 20, 5); + } + + void remove_me() + { + DeleteEntity("me"); + } + +} + +} diff --git a/scripts/angelscript/other/no_extra_exp.as b/scripts/angelscript/other/no_extra_exp.as new file mode 100644 index 00000000..816bf7fb --- /dev/null +++ b/scripts/angelscript/other/no_extra_exp.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class NoExtraExp : CGameScript +{ + NoExtraExp() + { + } + + void OnSpawn() override + { + if (!(GetCvar("ms_difficulty"))) return; + SetGlobalVar("G_PLAYER_RAMP", 0); + SendInfoMsg("all", "NO BONUS XP Bonus experience is blocked on this map. Monsters will not scale per player on server."); + } + +} + +} diff --git a/scripts/angelscript/other/oyster_breakable.as b/scripts/angelscript/other/oyster_breakable.as new file mode 100644 index 00000000..5ac9fa97 --- /dev/null +++ b/scripts/angelscript/other/oyster_breakable.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class OysterBreakable : CGameScript +{ + int DAMAGE_THRESHOLD; + string INC_DAMAGE_TYPE; + string MAP_TRIGGER; + string NEXT_IMMUNE_WARN; + string OBJECT_NAME; + int PLAYING_DEAD; + string SOUND_BREAK; + string SOUND_RESIST1; + string SOUND_RESIST2; + string SOUND_RESIST3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int VALID_DAMAGE; + string VALID_DAMAGE_TYPES; + + OysterBreakable() + { + VALID_DAMAGE_TYPES = "blunt;fire"; + OBJECT_NAME = "web"; + MAP_TRIGGER = "break_web1"; + DAMAGE_THRESHOLD = 100; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STRUCK3 = "debris/flesh3.wav"; + SOUND_RESIST1 = "weapons/bullet_hit1.wav"; + SOUND_RESIST2 = "weapons/bullet_hit2.wav"; + SOUND_RESIST3 = "weapons/ric1.wav"; + SOUND_BREAK = "debris/bustflesh1.wav"; + } + + void OnSpawn() override + { + SetHealth(99999); + SetName(OBJECT_NAME); + PLAYING_DEAD = 1; + } + + void OnDamage(int damage) override + { + if ((AM_BROKE)) return; + VALID_DAMAGE = 0; + INC_DAMAGE_TYPE = param3; + for (int i = 0; i < GetTokenCount(VALID_DAMAGE_TYPES, ";"); i++) + { + check_type(); + } + if (!(VALID_DAMAGE)) + { + if (GetGameTime() > NEXT_IMMUNE_WARN) + { + } + NEXT_IMMUNE_WARN = GetGameTime(); + NEXT_IMMUNE_WARN += 5.0; + SendColoredMessage(param1, "The " + GetEntityName(GetOwner()) + " seems resistant to this weapon."); + // PlayRandomSound from: SOUND_RESIST1, SOUND_RESIST2, SOUND_RESIST3 + array sounds = {SOUND_RESIST1, SOUND_RESIST2, SOUND_RESIST3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((VALID_DAMAGE)) + { + if (param2 >= DAMAGE_THRESHOLD) + { + EmitSound(GetOwner(), 0, SOUND_BREAK, 10); + UseTrigger(MAP_TRIGGER); + SetInvincible(true); + AM_BROKE = 1; + ScheduleDelayedEvent(0.1, "remove_me"); + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SendColoredMessage(param1, "The " + GetEntityName(GetOwner()) + " budges , but it seems it must be struck with more force. int(param2) of DAMAGE_THRESHOLD"); + SetDamage("dmg"); + SetHealth(9999); + } + } + } + + void check_type() + { + string CUR_TYPE = GetToken(VALID_DAMAGE_TYPES, i, ";"); + if (!((INC_DAMAGE_TYPE).findFirst(CUR_TYPE) == 0)) return; + VALID_DAMAGE = 1; + } + + void remove_me() + { + DeleteEntity(GetOwner()); + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/other/qitem.as b/scripts/angelscript/other/qitem.as new file mode 100644 index 00000000..0fda6478 --- /dev/null +++ b/scripts/angelscript/other/qitem.as @@ -0,0 +1,158 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class Qitem : CGameScript +{ + int AM_SUMMONED; + string GLOW_COLOR; + int IS_ACTIVE; + string ITEM_TYPE; + string NEXT_TOUCH; + int PLAYING_DEAD; + string QUEST_PLAYER; + string SLOW_COUNT; + string TNT_MODEL; + + Qitem() + { + GLOW_COLOR = Vector3(255, 200, 0); + SetCallback("touch", "enable"); + } + + void OnSpawn() override + { + SetModel("misc/sylphiels_stuff.mdl"); + SetWidth(16); + SetHeight(16); + SetSolid("trigger"); + SetInvincible(true); + SetNoPush(true); + PLAYING_DEAD = 1; + ScheduleDelayedEvent(1.0, "glow_loop"); + } + + void glow_loop() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(10.0, "glow_loop"); + Effect("glow", GetOwner(), GLOW_COLOR, 16.0, 9.0, -1); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(IS_ACTIVE)) return; + if (!(GetGameTime() > NEXT_TOUCH)) return; + NEXT_TOUCH = GetGameTime(); + NEXT_TOUCH += 1.0; + if (!(IsValidPlayer(param1))) return; + QUEST_PLAYER = param1; + found_item(); + } + + void found_item() + { + if (!(IS_ACTIVE)) return; + IS_ACTIVE = 0; + EmitSound(GetOwner(), 0, "items/ammopickup1.wav", 10); + string OUT_MSG = "You find "; + OUT_MSG += GetEntityProperty(GetOwner(), "name.full"); + SendColoredMessage(QUEST_PLAYER, "You acquire " + GetEntityProperty(GetOwner(), "name.full")); + SendInfoMsg("all", "QUEST ITEM FOUND " + OUT_MSG); + ShowHelpTip(QUEST_PLAYER, "questitem", "QUEST ITEM", "This is a special quest item that will not appear in your inventory."); + CallExternal(GAME_MASTER, "ext_got_quest_item", ITEM_TYPE); + ScheduleDelayedEvent(0.5, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + + void game_postspawn() + { + string L_PARAM = StringToLower(GetToken(param4, 0, ";")); + if (L_PARAM != "none") + { + set_item_type(L_PARAM); + } + } + + void set_item_type() + { + IS_ACTIVE = 1; + ITEM_TYPE = param1; + if (ITEM_TYPE == "ap") + { + SetName("Golden Apple"); + SetModelBody(0, 0); + int L_DID_INIT = 1; + } + if (ITEM_TYPE == "bs") + { + SetName("Bag of Salt"); + SetModelBody(0, 1); + int L_DID_INIT = 1; + } + if (ITEM_TYPE == "bp") + { + SetName("Bag of Pepper"); + SetModelBody(0, 2); + int L_DID_INIT = 1; + } + if (ITEM_TYPE == "km") + { + SetName("Barrel of Mead"); + SetModelBody(0, 3); + int L_DID_INIT = 1; + } + if (ITEM_TYPE == "la") + { + SetName("Sylphiel's Ladel"); + SetModelBody(0, 4); + int L_DID_INIT = 1; + } + if (ITEM_TYPE == "tnt") + { + SetName("a stick of|Dwarven Explosives"); + GLOW_COLOR = Vector3(0, 255, 0); + SetProp(GetOwner(), "movetype", "const.movetype.bounce"); + TNT_MODEL = "monsters/dwarf_bomber_tnt.mdl"; + SLOW_COUNT = 0; + ScheduleDelayedEvent(0.1, "slow_down_loop"); + SetModel(TNT_MODEL); + int L_DID_INIT = 1; + SetMonsterClip(0); + } + if ((L_DID_INIT)) return; + string OUT_MSG = "m2_quest/sylphiels_stuff cannot find type: "; + OUT_MSG += ITEM_TYPE; + SendInfoMsg("all", "MAPPING ERROR " + OUT_MSG); + } + + void slow_down_loop() + { + string CUR_VEL = GetEntityVelocity(GetOwner()); + CUR_VEL *= Vector3(0.5, 0.5, 0.5); + SLOW_COUNT += 1; + if (SLOW_COUNT >= 20) + { + Vector3 CUR_VEL = Vector3(0, 0, 0); + } + SetVelocity(GetOwner(), CUR_VEL); + if (!(CUR_VEL != Vector3(0, 0, 0))) return; + ScheduleDelayedEvent(0.5, "slow_down_loop"); + } + + void game_dynamically_created() + { + AM_SUMMONED = 1; + set_item_type(StringToLower(param1)); + } + +} + +} diff --git a/scripts/angelscript/other/qitem_barrel.as b/scripts/angelscript/other/qitem_barrel.as new file mode 100644 index 00000000..d144f510 --- /dev/null +++ b/scripts/angelscript/other/qitem_barrel.as @@ -0,0 +1,267 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class QitemBarrel : CGameScript +{ + int AM_SUMMONED; + int BARREL_CLOSED_IDX; + string BARREL_DONE; + string BARREL_EVENT; + string BARREL_EXPLODES; + string BARREL_PLR; + string BARREL_SUBMODEL_GROUP; + string BARREL_SUBMODEL_IDX_MAX; + string BARREL_SUBMODEL_IDX_MIN; + string BARREL_USE_SUBMODELS; + int ITEMS_TO_TURN_IN; + int ITEM_COUNT; + string ITEM_NAME; + string ITEM_REQ; + string ITEM_TYPE; + string MAIN_NAME; + string MENU_ADD; + int PLAYING_DEAD; + string SOUND_EXPLODE; + string SPRITE_EXPLODE; + + QitemBarrel() + { + SPRITE_EXPLODE = "bigsmoke.spr"; + SOUND_EXPLODE = "weapons/explode3.wav"; + BARREL_CLOSED_IDX = 6; + ITEMS_TO_TURN_IN = 0; + } + + void OnSpawn() override + { + SetModel("props/tnt_barrel.mdl"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 0); + SetProp(GetOwner(), "skin", 0); + SetNoPush(true); + SetInvincible(true); + PLAYING_DEAD = 1; + SetName("Barrel"); + MAIN_NAME = "Barrel of Stuff"; + SetMenuAutoOpen(1); + ITEM_COUNT = 0; + } + + void game_postspawn() + { + if ((AM_SUMMONED)) return; + string PARAM_OUT1 = param4; + setup_barrel(PARAM_OUT1); + } + + void game_dynamically_created() + { + AM_SUMMONED = 1; + string PARAM_OUT1 = param1; + setup_barrel(PARAM_OUT1); + } + + void setup_barrel() + { + if (!(ITEM_TYPE == "ITEM_TYPE")) return; + LogDebug("setup_barrel PARAM1"); + ITEM_TYPE = GetToken(param1, 0, ";"); + ITEM_REQ = GetToken(param1, 1, ";"); + BARREL_EVENT = GetToken(param1, 2, ";"); + if (GetTokenCount(param1, ";") >= 4) + { + if (GetToken(param1, 3, ";") == "repeat") + { + BARREL_REPEATS = 1; + } + } + if ((ITEM_TYPE).findFirst("tnt") >= 0) + { + MAIN_NAME = "Barrel of Explosives "; + SetName("a"); + SetProp(GetOwner(), "skin", 0); + MENU_ADD = "Add Explosives "; + ITEM_NAME = "explosives"; + BARREL_EXPLODES = 1; + BARREL_USE_SUBMODELS = 1; + BARREL_SUBMODEL_GROUP = 0; + BARREL_SUBMODEL_IDX_MIN = 1; + BARREL_SUBMODEL_IDX_MAX = 5; + update_name(); + int L_TYPE_HANDLED = 1; + } + if (!(L_TYPE_HANDLED)) + { + LogDebug("$currentscript - Warning! Type ITEM_TYPE not handled!"); + } + } + + void update_name() + { + string L_NAME = MAIN_NAME; + L_NAME += "()"; + L_NAME += int(ITEM_COUNT); + L_NAME += "/"; + L_NAME += int(ITEM_REQ); + L_NAME += ")"; + SetName(L_NAME); + } + + void ext_receive_quest_item() + { + ITEMS_TO_TURN_IN += 1; + ITEMS_TO_TURN_IN = int(ITEMS_TO_TURN_IN); + } + + void game_menu_getoptions() + { + if ((BARREL_DONE)) return; + CallExternal(GAME_MASTER, "ext_check_quest_item", ITEM_TYPE, GetEntityIndex(GetOwner())); + if (ITEMS_TO_TURN_IN > 0) + { + string reg.mitem.title = MENU_ADD; + reg.mitem.title += "()"; + reg.mitem.title += ITEMS_TO_TURN_IN; + reg.mitem.title += ")"; + string reg.mitem.type = "callback"; + string reg.mitem.data = ITEMS_TO_TURN_IN; + string reg.mitem.callback = "add_items"; + } + else + { + string L_OUT_MSG = "You have no "; + L_OUT_MSG += ITEM_NAME; + L_OUT_MSG += " to add to the "; + L_OUT_MSG += MAIN_NAME; + SendInfoMsg(param1, "Quest item required " + L_OUT_MSG); + string reg.mitem.title = MENU_ADD; + string reg.mitem.type = "disabled"; + } + } + + void add_items() + { + ITEM_COUNT += param2; + ITEMS_TO_TURN_IN -= int(ITEM_COUNT); + if (ITEMS_TO_TURN_IN < 0) + { + ITEMS_TO_TURN_IN = 0; + } + if (param2 != 0) + { + EmitSound(GetOwner(), 0, "items/ammopickup1.wav", 10); + } + update_name(); + if ((BARREL_USE_SUBMODELS)) + { + string L_FULL_RATIO = ITEM_COUNT; + L_FULL_RATIO /= ITEM_REQ; + string L_BODY = /* TODO: $ratio */ $ratio(L_FULL_RATIO, BARREL_SUBMODEL_IDX_MIN, BARREL_SUBMODEL_IDX_MAX); + int L_BODY = int(L_BODY); + SetModelBody(BARREL_SUBMODEL_GROUP, L_BODY); + } + if ((IsValidPlayer(param1))) + { + BARREL_PLR = param1; + } + if (!(ITEM_COUNT >= ITEM_REQ)) return; + if ((BARREL_USE_SUBMODELS)) + { + SetModelBody(BARREL_SUBMODEL_GROUP, BARREL_SUBMODEL_IDX_MAX); + } + string L_OUT_MSG = MAIN_NAME; + L_OUT_MSG += "is full!"; + ShowHelpTip(BARREL_PLR, "generic", L_OUT_MSG, " "); + do_event(); + } + + void ext_setbody() + { + LogDebug("ext_setbody PARAM1 PARAM2"); + SetModelBody(param1, param2); + } + + void do_event() + { + if (!(BARREL_EXPLODES)) + { + UseTrigger(BARREL_EVENT); + } + else + { + SetMenuAutoOpen(0); + BARREL_DONE = 1; + do_explode(); + } + if ((BARREL_REPEATS)) + { + ITEM_COUNT -= ITEM_REQ; + if (ITEM_COUNT >= 0) + { + add_items(0, 0); + } + } + else + { + SetMenuAutoOpen(0); + BARREL_DONE = 1; + if (!(BARREL_EXPLODES)) + { + SetModelBody(0, BARREL_CLOSED_IDX); + } + } + } + + void do_explode() + { + EmitSound(GetOwner(), 0, "monsters/dwarf_bomber/fuse_lit.wav", 10); + ClientEvent("new", "all", "monsters/summon/tnt_bomb_cl", GetEntityIndex(GetOwner()), 5.0); + ScheduleDelayedEvent(5.0, "do_explode2"); + } + + void do_explode2() + { + UseTrigger(BARREL_EVENT); + EmitSound(GetOwner(), 0, SOUND_EXPLODE, 10); + Effect("tempent", "spray", SPRITE_EXPLODE, GetMonsterProperty("origin"), 0, 1, 0, 0); + SetModel("none"); + XDoDamage(GetEntityOrigin(GetOwner()), 256, 2000, 0.9, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:push_loop"); + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void push_loop_dodamage() + { + string CUR_TARGET = param2; + string TARGET_ORG = GetEntityOrigin(CUR_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + SetVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 110))); + } + + void remove_me() + { + SetEntityOrigin(GetOwner(), Vector3(20000, 0, 0)); + SetInvincible(false); + SetRace("hated"); + DoDamage(GetOwner(), "direct", 99999, 100, GAME_MASTER); + } + + void set_scale() + { + if (!(param1 > 0)) return; + SetProp(GetOwner(), "scale", param1); + string MY_WIDTH = GetEntityWidth(GetOwner()); + string MY_HEIGHT = GetEntityHeight(GetOwner()); + MY_WIDTH *= param1; + MY_HEIGHT *= param1; + SetWidth(MY_WIDTH); + SetHeight(MY_WIDTH); + } + +} + +} diff --git a/scripts/angelscript/other/quest_item.as b/scripts/angelscript/other/quest_item.as new file mode 100644 index 00000000..00e8920a --- /dev/null +++ b/scripts/angelscript/other/quest_item.as @@ -0,0 +1,150 @@ +#pragma context server + +namespace MS +{ + +class QuestItem : CGameScript +{ + string CUR_QUEST_BANK; + string FINAL_NAME; + string IN_NAME; + string IN_PARAMS; + string IS_UNIQUE; + string MAP_TRIGGER; + int MODEL_BODY; + string MODEL_NAME; + string NEXT_TOUCH; + int PLAYING_DEAD; + string QUEST_ITEM_ADDED; + string QUEST_ITEM_FOUND; + string QUEST_PLAYER; + string QUEST_TAG; + + QuestItem() + { + SetCallback("touch", "enable"); + } + + void OnSpawn() override + { + SetWidth(16); + SetHeight(16); + SetSolid("trigger"); + SetInvincible(true); + SetNoPush(true); + PLAYING_DEAD = 1; + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(GetGameTime() > NEXT_TOUCH)) return; + NEXT_TOUCH = GetGameTime(); + NEXT_TOUCH += 0.1; + if (!(IsValidPlayer(param1))) return; + QUEST_PLAYER = param1; + if ((IS_UNIQUE)) + { + QUEST_ITEM_FOUND = 0; + for (int i = 0; i < 9; i++) + { + check_quest_data(); + } + if ((QUEST_ITEM_FOUND)) + { + } + if (GetGameTime() > NEXT_QUEST_ERROR) + { + NEXT_QUEST_ERROR = GetGameTime(); + NEXT_QUEST_ERROR += 5.0; + SendColoredMessage(QUEST_PLAYER, "You already have this unique quest item."); + } + } + if ((QUEST_ITEM_FOUND)) return; + EmitSound(GetOwner(), 0, "items/ammopickup1.wav", 10); + string OUT_MSG = "You find "; + OUT_MSG += GetEntityProperty(GetOwner(), "name.full"); + SendColoredMessage(QUEST_PLAYER, "You acquire " + GetEntityProperty(GetOwner(), "name.full")); + SendInfoMsg(QUEST_PLAYER, "QUEST ITEM FOUND " + OUT_MSG); + ShowHelpTip(QUEST_PLAYER, "questitem", "QUEST ITEM", "This is a special quest item that will not appear in your inventory."); + for (int i = 0; i < 9; i++) + { + add_quest_item(); + } + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + SetInvincible(false); + SetRace("hated"); + DoDamage(GetOwner(), "direct", 99999, 100, GAME_MASTER); + } + + void check_quest_data() + { + if ((QUEST_ITEM_FOUND)) return; + string QUEST_BANK = "q"; + QUEST_BANK += int(i); + CUR_QUEST_BANK = GetPlayerQuestData(QUEST_PLAYER, QUEST_BANK); + if (!(CUR_QUEST_BANK != 0)) return; + for (int i = 0; i < GetTokenCount(CUR_QUEST_BANK, ";"); i++) + { + check_quest_bank(); + } + } + + void check_quest_bank() + { + string CUR_ITEM = GetToken(CUR_QUEST_BANK, i, ";"); + if (CUR_ITEM == QUEST_TAG) + { + QUEST_ITEM_FOUND = 1; + } + } + + void add_quest_item() + { + if ((QUEST_ITEM_ADDED)) return; + string QUEST_BANK = "q"; + QUEST_BANK += int(i); + CUR_QUEST_BANK = GetPlayerQuestData(QUEST_PLAYER, QUEST_BANK); + if ((CUR_QUEST_BANK).length() < 200) + { + QUEST_ITEM_ADDED = 1; + if (CUR_QUEST_BANK == 0) + { + SetPlayerQuestData(QUEST_PLAYER, QUEST_BANK); + } + else + { + if (CUR_QUEST_BANK.length() > 0) CUR_QUEST_BANK += ";"; + CUR_QUEST_BANK += QUEST_TAG; + SetPlayerQuestData(QUEST_PLAYER, QUEST_BANK); + } + } + } + + void game_postspawn() + { + IN_NAME = param1; + IN_PARAMS = param4; + FINAL_NAME = "QUEST ITEM: "; + FINAL_NAME += IN_NAME; + QUEST_TAG = GetToken(IN_PARAMS, 0, ";"); + MODEL_NAME = "misc/p_misc.mdl"; + MODEL_BODY = 2; + SetIdleAnim("apple_floor_idle"); + MAP_TRIGGER = GetToken(IN_PARAMS, 3, ";"); + if (GetToken(IN_PARAMS, 4, ";") == "unique") + { + IS_UNIQUE = 1; + FINAL_NAME += "unique"; + } + SetModel(MODEL_NAME); + SetModelBody(0, MODEL_BODY); + SetName(FINAL_NAME); + } + +} + +} diff --git a/scripts/angelscript/other/rock.as b/scripts/angelscript/other/rock.as new file mode 100644 index 00000000..c971daee --- /dev/null +++ b/scripts/angelscript/other/rock.as @@ -0,0 +1,29 @@ +#pragma context server + +namespace MS +{ + +class Rock : CGameScript +{ + void OnSpawn() override + { + SetHealth(150); + SetWidth(128); + SetHeight(64); + SetRoam(false); + SetRace("nothing"); + SetName("large rock"); + SetBloodType("none"); + SetIdleAnim("seq-name"); + SetModel("props/rock1.mdl"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + Effect("tempent", "gibs", "rockgibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 1.0, /* TODO: $relvel */ $relvel(0, 0, 10), 20, 10, 1); + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, 20000)); + } + +} + +} diff --git a/scripts/angelscript/other/sfx_orbiting_light.as b/scripts/angelscript/other/sfx_orbiting_light.as new file mode 100644 index 00000000..8b5181a2 --- /dev/null +++ b/scripts/angelscript/other/sfx_orbiting_light.as @@ -0,0 +1,49 @@ +#pragma context server + +namespace MS +{ + +class SfxOrbitingLight : CGameScript +{ + int PLAYING_DEAD; + + void OnRepeatTimer() + { + SetRepeatDelay(60.0); + refresh_sound(); + ClientEvent("new", "all", "other/sfx_orbiting_light_cl", GetEntityOrigin(GetOwner()), 60.0, 96, 256, Vector3(128, 128, 0), 0.8); + } + + void OnSpawn() override + { + SetWidth(1); + SetHeight(1); + SetRace("beloved"); + SetHealth(1); + SetInvincible(true); + PLAYING_DEAD = 1; + SetNoPush(true); + SetSolid("none"); + SetGravity(0); + SetProp(GetOwner(), "movetype", 0); + ClientEvent("new", "all", "other/sfx_orbiting_light_cl", GetEntityOrigin(GetOwner()), 60.0, 96, 256, Vector3(128, 128, 0), 0.8); + // svplaysound: svplaysound 1 10 ambience/alien_creeper.wav + EmitSound(1, 10, "ambience/alien_creeper.wav"); + } + + void refresh_sound() + { + // svplaysound: svplaysound 1 0 ambience/alien_creeper.wav + EmitSound(1, 0, "ambience/alien_creeper.wav"); + ScheduleDelayedEvent(0.1, "refresh_sound2"); + } + + void refresh_sound2() + { + // svplaysound: svplaysound 1 10 ambience/alien_creeper.wav + EmitSound(1, 10, "ambience/alien_creeper.wav"); + } + +} + +} diff --git a/scripts/angelscript/other/sfx_orbiting_light_cl.as b/scripts/angelscript/other/sfx_orbiting_light_cl.as new file mode 100644 index 00000000..a42b1db7 --- /dev/null +++ b/scripts/angelscript/other/sfx_orbiting_light_cl.as @@ -0,0 +1,78 @@ +#pragma context client + +namespace MS +{ + +class SfxOrbitingLightCl : CGameScript +{ + string CUR_POS; + int CYCLE_ANGLE; + int FX_ACTIVE; + string FX_DURATION; + string FX_ORIGIN; + string FX_RADIUS; + string FX_ROT_SPEED; + string GLOW_COLOR; + string GLOW_RADIUS; + int IS_ACTIVE; + string LIGHT_ID; + + void client_activate() + { + FX_ORIGIN = param1; + FX_DURATION = param2; + FX_RADIUS = param3; + GLOW_RADIUS = param4; + GLOW_COLOR = param5; + FX_ROT_SPEED = param6; + SetCallback("render", "enable"); + FX_ACTIVE = 1; + CYCLE_ANGLE = 0; + FX_DURATION("end_fx"); + ClientEffect("light", "new", FX_ORIGIN, GLOW_RADIUS, GLOW_COLOR, 1.0); + LIGHT_ID = "game.script.last_light_id"; + ClientEffect("tempent", "sprite", "3dmflaora.spr", FX_ORIGIN, "setup_sprite", "update_sprite"); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + CYCLE_ANGLE += FX_ROT_SPEED; + if (CYCLE_ANGLE > 359.99) + { + CYCLE_ANGLE = 0; + } + CUR_POS = FX_ORIGIN; + CUR_POS += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, FX_RADIUS, 0)); + ClientEffect("light", LIGHT_ID, CUR_POS, GLOW_RADIUS, GLOW_COLOR, 1.0); + } + + void update_sprite() + { + ClientEffect("tempent", "set_current_prop", "origin", CUR_POS); + } + + void end_fx() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void setup_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", FX_DURATION); + ClientEffect("tempent", "set_current_prop", "scale", 1); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + +} + +} diff --git a/scripts/angelscript/other/sorc_telepoint.as b/scripts/angelscript/other/sorc_telepoint.as new file mode 100644 index 00000000..15aae4fc --- /dev/null +++ b/scripts/angelscript/other/sorc_telepoint.as @@ -0,0 +1,35 @@ +#pragma context server + +namespace MS +{ + +class SorcTelepoint : CGameScript +{ + void OnSpawn() override + { + set_point(); + SetGravity(0); + SetModel("none"); + SetInvincible(true); + SetRace("beloved"); + } + + void set_point() + { + if (!(IsEntityAlive(GAME_MASTER))) + { + Random(1_0, 2_0)("set_point"); + } + if (!(IsEntityAlive(GAME_MASTER))) return; + CallExternal(GAME_MASTER, "gm_set_sorc_point", GetEntityOrigin(GetOwner())); + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/other/spawn_point.as b/scripts/angelscript/other/spawn_point.as new file mode 100644 index 00000000..ba470d90 --- /dev/null +++ b/scripts/angelscript/other/spawn_point.as @@ -0,0 +1,31 @@ +#pragma context server + +namespace MS +{ + +class SpawnPoint : CGameScript +{ + void OnSpawn() override + { + ScheduleDelayedEvent(1.0, "set_spawn_point"); + SetFly(true); + SetGravity(0); + } + + void set_spawn_point() + { + SetGlobalVar("G_RANDOM_SPAWN", 1); + string MY_LOC = GetEntityOrigin(GetOwner()); + MY_LOC += "z"; + CallExternal(GAME_MASTER, "set_spawn_point", MY_LOC); + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/other/summon_point1.as b/scripts/angelscript/other/summon_point1.as new file mode 100644 index 00000000..292168e9 --- /dev/null +++ b/scripts/angelscript/other/summon_point1.as @@ -0,0 +1,37 @@ +#pragma context server + +namespace MS +{ + +class SummonPoint1 : CGameScript +{ + int IN_USE; + int PLAYING_DEAD; + + void OnSpawn() override + { + SetName("summon_point1"); + SetFly(true); + SetGravity(0); + SetInvincible(true); + SetRace("beloved"); + IN_USE = 0; + SetSolid("none"); + SetNoPush(true); + PLAYING_DEAD = 1; + } + + void summon_used() + { + IN_USE = 1; + ScheduleDelayedEvent(2.0, "summon_reset"); + } + + void summon_reset() + { + IN_USE = 0; + } + +} + +} diff --git a/scripts/angelscript/other/totalhp_trigger.as b/scripts/angelscript/other/totalhp_trigger.as new file mode 100644 index 00000000..b0c8c17b --- /dev/null +++ b/scripts/angelscript/other/totalhp_trigger.as @@ -0,0 +1,41 @@ +#pragma context server + +namespace MS +{ + +class TotalhpTrigger : CGameScript +{ + TotalhpTrigger() + { + SetCallback("touch", "enable"); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(IsValidPlayer(param1))) return; + string HP_MIN = GetToken(param2, 0, ";"); + string HP_MAX = GetToken(param2, 1, ";"); + string HP_PRESENT = "game.players.totalhp"; + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green " + HP_PRESENT + "vs " + HP_MIN + "- " + HP_MAX); + } + if (HP_PRESENT >= HP_MIN) + { + if (HP_PRESENT <= HP_MAX) + { + } + int DO_TRIGGER = 1; + } + if ((DO_TRIGGER)) + { + UseTrigger(param3); + } + RemoveScript(); + DeleteEntity(GetOwner()); + SetCallback("touch", "disable"); + } + +} + +} diff --git a/scripts/angelscript/other/touch_test.as b/scripts/angelscript/other/touch_test.as new file mode 100644 index 00000000..e767f84b --- /dev/null +++ b/scripts/angelscript/other/touch_test.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class TouchTest : CGameScript +{ + TouchTest() + { + SetCallback("touch", "enable"); + SetProp(GetOwner(), "solid", 1); + } + + void OnTouch(CBaseEntity@ other) override + { + } + + void game_used() + { + LogDebug("used by GetEntityName(param1) GetEntityName(param2) PARAM3 PARAM4"); + } + +} + +} diff --git a/scripts/angelscript/other/trigger_avghp.as b/scripts/angelscript/other/trigger_avghp.as new file mode 100644 index 00000000..75d38443 --- /dev/null +++ b/scripts/angelscript/other/trigger_avghp.as @@ -0,0 +1,43 @@ +#pragma context server + +namespace MS +{ + +class TriggerAvghp : CGameScript +{ + TriggerAvghp() + { + SetCallback("touch", "enable"); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(IsValidPlayer(param1))) return; + string HP_MIN = GetToken(param2, 0, ";"); + string HP_MAX = GetToken(param2, 1, ";"); + string HP_PRESENT = "game.players.totalhp"; + HP_PRESENT /= GetPlayerCount(); + LogDebug("HP_PRESENT vs HP_MIN to HP_MAX"); + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green " + HP_PRESENT + "vs " + HP_MIN + "- " + HP_MAX); + } + if (HP_PRESENT >= HP_MIN) + { + if (HP_PRESENT <= HP_MAX) + { + } + int DO_TRIGGER = 1; + } + if ((DO_TRIGGER)) + { + UseTrigger(param3); + } + SetCallback("touch", "disable"); + RemoveScript(); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/other/trigger_base.as b/scripts/angelscript/other/trigger_base.as new file mode 100644 index 00000000..2af2e1fb --- /dev/null +++ b/scripts/angelscript/other/trigger_base.as @@ -0,0 +1,53 @@ +#pragma context server + +namespace MS +{ + +class TriggerBase : CGameScript +{ + string EFFECT_DAMAGE; + int EFFECT_TIME; + string LAST_DMG; + + TriggerBase() + { + SetCallback("touch", "enable"); + SetProp(GetOwner(), "solid", 1); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(GetGameTime() > LAST_DMG)) return; + string OUT_NAME = param2; + EFFECT_DAMAGE = param3; + if ((EFFECT_DAMAGE).findFirst("PARAM") == 0) + { + int BURN_DAMAGE = 1000; + } + EFFECT_TIME = 2; + if ((EFFECT_DAMAGE).findFirst(";") >= 0) + { + EFFECT_DAMAGE = GetToken(param3, 0, ";"); + EFFECT_TIME = GetToken(param3, 1, ";"); + if ((param3).findFirst("no_monsters") >= 0) + { + int PLAYER_ONLY = 1; + } + } + CallExternal(GAME_MASTER, "gm_setname", OUT_NAME); + if ((PLAYER_ONLY)) + { + if (!(IsValidPlayer(param1))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + LAST_DMG = GetGameTime(); + LAST_DMG += EFFECT_TIME; + apply_damage(GetEntityIndex(param1)); + } + +} + +} diff --git a/scripts/angelscript/other/trigger_burn.as b/scripts/angelscript/other/trigger_burn.as new file mode 100644 index 00000000..a566acab --- /dev/null +++ b/scripts/angelscript/other/trigger_burn.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "other/trigger_base.as" + +namespace MS +{ + +class TriggerBurn : CGameScript +{ + void apply_damage() + { + LogDebug("apply_damage tim EFFECT_TIME dmg EFFECT_DAMAGE"); + ApplyEffect(param1, "effects/dot_fire", EFFECT_TIME, GAME_MASTER, EFFECT_DAMAGE); + } + +} + +} diff --git a/scripts/angelscript/other/trigger_cannon.as b/scripts/angelscript/other/trigger_cannon.as new file mode 100644 index 00000000..51add132 --- /dev/null +++ b/scripts/angelscript/other/trigger_cannon.as @@ -0,0 +1,28 @@ +#pragma context server + +namespace MS +{ + +class TriggerCannon : CGameScript +{ + int USED_TRIGGER; + + TriggerCannon() + { + SetCallback("touch", "enable"); + SetProp(GetOwner(), "solid", 1); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!((GetEntityName(param1)).findFirst("Cannon") >= 0)) return; + if ((USED_TRIGGER)) return; + USED_TRIGGER = 1; + UseTrigger(param3); + SetCallback("touch", "disable"); + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/other/trigger_damaged.as b/scripts/angelscript/other/trigger_damaged.as new file mode 100644 index 00000000..3ec22376 --- /dev/null +++ b/scripts/angelscript/other/trigger_damaged.as @@ -0,0 +1,45 @@ +#pragma context server + +namespace MS +{ + +class TriggerDamaged : CGameScript +{ + void OnDamage(int damage) override + { + LogDebug("game_damaged PARAM1 PARAM2 PARAM3 PARAM4"); + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + LogDebug("game_takedamage PARAM1 PARAM2 PARAM3 PARAM4"); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + LogDebug("game_struck PARAM1 PARAM2 PARAM3 PARAM4"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + LogDebug("game_death PARAM1 PARAM2 PARAM3 PARAM4"); + } + + void ext_test() + { + LogDebug("ext_test PARAM1 PARAM2 PARAM3 PARAM4"); + } + + void ext_report() + { + LogDebug("game.monster.origin"); + } + + void ext_follow() + { + SetFollow(param1); + } + +} + +} diff --git a/scripts/angelscript/other/trigger_if_evil.as b/scripts/angelscript/other/trigger_if_evil.as new file mode 100644 index 00000000..329a79d9 --- /dev/null +++ b/scripts/angelscript/other/trigger_if_evil.as @@ -0,0 +1,29 @@ +#pragma context server + +namespace MS +{ + +class TriggerIfEvil : CGameScript +{ + TriggerIfEvil() + { + SetCallback("touch", "enable"); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(GetEntityRace(param1) != "human")) return; + if (!(GetEntityRace(param1) != "hguard")) return; + UseTrigger(param3); + SetCallback("touch", "disable"); + RemoveScript(); + } + + void game_used() + { + LogDebug("used by GetEntityName(param1)"); + } + +} + +} diff --git a/scripts/angelscript/other/trigger_poison.as b/scripts/angelscript/other/trigger_poison.as new file mode 100644 index 00000000..5ecf0272 --- /dev/null +++ b/scripts/angelscript/other/trigger_poison.as @@ -0,0 +1,18 @@ +#pragma context server + +#include "other/trigger_base.as" + +namespace MS +{ + +class TriggerPoison : CGameScript +{ + void apply_damage() + { + LogDebug("apply_damage tim EFFECT_TIME dmg EFFECT_DAMAGE"); + ApplyEffect(param1, "effects/dot_poison", EFFECT_TIME, GAME_MASTER, EFFECT_DAMAGE); + } + +} + +} diff --git a/scripts/angelscript/other/trigger_web.as b/scripts/angelscript/other/trigger_web.as new file mode 100644 index 00000000..36ab9a08 --- /dev/null +++ b/scripts/angelscript/other/trigger_web.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/web.as" + +namespace MS +{ + +class TriggerWeb : CGameScript +{ +} + +} diff --git a/scripts/angelscript/other/undamael_break.as b/scripts/angelscript/other/undamael_break.as new file mode 100644 index 00000000..2a0a93ae --- /dev/null +++ b/scripts/angelscript/other/undamael_break.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class UndamaelBreak : CGameScript +{ + int DID_TRIGGER; + string RAND_ID; + string UNDAMAEL_ID; + + UndamaelBreak() + { + SetCallback("touch", "enable"); + } + + void OnTouch(CBaseEntity@ other) override + { + if ((DID_TRIGGER)) return; + if (!(param1 == UNDAMAEL_ID)) return; + if ((IsValidPlayer(param1))) return; + UseTrigger(param3); + DID_TRIGGER = 1; + ScheduleDelayedEvent(0.1, "remove_me"); + } + + void remove_me() + { + RemoveScript(); + DeleteEntity(GetOwner()); + } + + void undamael_spawn() + { + UNDAMAEL_ID = FindEntityByName("undamael"); + } + + void bd_debug() + { + if (RAND_ID == "RAND_ID") + { + SetName("pitbreak1"); + RAND_ID = RandomInt(1000, 9999); + } + } + +} + +} diff --git a/scripts/angelscript/other/undamael_hurt.as b/scripts/angelscript/other/undamael_hurt.as new file mode 100644 index 00000000..e3ff3b0d --- /dev/null +++ b/scripts/angelscript/other/undamael_hurt.as @@ -0,0 +1,65 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class UndamaelHurt : CGameScript +{ + string LAST_TOUCH; + string RAND_ID; + string UNDAMAEL_ID; + + UndamaelHurt() + { + SetCallback("touch", "enable"); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(param1 != UNDAMAEL_ID)) return; + LogDebug("touching something not undamael!"); + if (!(GetGameTime() > LAST_TOUCH)) return; + LAST_TOUCH = GetGameTime(); + LAST_TOUCH += 0.5; + if (!(IsEntityAlive(param1))) return; + if ((IsEntityAlive(UNDAMAEL_ID))) + { + ShowHelpTip(param1, "generic", "BEWARE", "The lava Undmael rests in acts as his digestive system. Undamael has gained", GetEntityHealth(param1), "health."); + HealEntity(UNDAMAEL_ID, GetEntityHealth(param1)); + } + if ("UNDAMAEL_ID" != UNDAMAEL_ID) + { + XDoDamage(param1, "direct", 10000, 1.0, UNDAMAEL_ID, UNDAMAEL_ID, "none", "target"); + } + else + { + if ((IsValidPlayer(param1))) + { + KillEntity(param1); + } + else + { + XDoDamage(param1, "direct", 10000, 1.0, GAME_MASTER, GAME_MASTER, "none", "target"); + } + } + } + + void undamael_spawn() + { + UNDAMAEL_ID = FindEntityByName("undamael"); + } + + void bd_debug() + { + if (RAND_ID == "RAND_ID") + { + SetName("pitedge"); + RAND_ID = RandomInt(1000, 9999); + } + } + +} + +} diff --git a/scripts/angelscript/other/undamael_pitedge.as b/scripts/angelscript/other/undamael_pitedge.as new file mode 100644 index 00000000..b747fded --- /dev/null +++ b/scripts/angelscript/other/undamael_pitedge.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class UndamaelPitedge : CGameScript +{ + string LAST_TOUCH; + string RAND_ID; + string UNDAMAEL_ID; + + UndamaelPitedge() + { + SetCallback("touch", "enable"); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(param1 == UNDAMAEL_ID)) return; + if (!(GetGameTime() > LAST_TOUCH)) return; + CallExternal(UNDAMAEL_ID, "ext_pitedge_touch"); + LAST_TOUCH = GetGameTime(); + LAST_TOUCH += 0.1; + } + + void undamael_spawn() + { + UNDAMAEL_ID = FindEntityByName("undamael"); + } + + void bd_debug() + { + if (RAND_ID == "RAND_ID") + { + SetName("pitedge"); + RAND_ID = RandomInt(1000, 9999); + } + } + +} + +} diff --git a/scripts/angelscript/other/web.as b/scripts/angelscript/other/web.as new file mode 100644 index 00000000..f6e53fb3 --- /dev/null +++ b/scripts/angelscript/other/web.as @@ -0,0 +1,27 @@ +#pragma context server + +namespace MS +{ + +class Web : CGameScript +{ + Web() + { + SetCallback("touch", "enable"); + SetProp(GetOwner(), "solid", 1); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(GetEntityRace(param1) != "spider")) return; + UseTrigger("web_touched"); + SendPlayerMessage(param1, "You have been webbed!"); + EmitSound(GetOwner(), 0, "barnacle/bcl_chew2.wav", 10); + ApplyEffect(param1, "effects/webbed", 10.0, GAME_MASTER); + SetCallback("touch", "disable"); + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/outpost/final_chest.as b/scripts/angelscript/outpost/final_chest.as new file mode 100644 index 00000000..026c0073 --- /dev/null +++ b/scripts/angelscript/outpost/final_chest.as @@ -0,0 +1,47 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class FinalChest : CGameScript +{ + void OnSpawn() override + { + string SUPER_ID = FindEntityByName("outpost_super"); + if (!((SUPER_ID !is null))) + { + DeleteEntity(GetOwner()); + return; + } + tc_add_artifact("scroll_lightning_chain", 15); + tc_add_artifact("scroll2_lightning_chain", 15); + tc_add_artifact("mana_forget", 15); + } + + void chest_additems() + { + add_gold(RandomInt(200, 1000)); + AddStoreItem(STORENAME, "mana_demon_blood", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "item_log", 1, 0); + AddStoreItem(STORENAME, "proj_arrow_silvertipped", 30, 0, 0, 30); + AddStoreItem(STORENAME, "proj_arrow_jagged", 30, 0, 0, 30); + AddStoreItem(STORENAME, "proj_arrow_fire", 60, 0, 0, 30); + AddStoreItem(STORENAME, "proj_arrow_poison", 30, 0, 0, 30); + AddStoreItem(STORENAME, "proj_arrow_frost", 60, 0, 0, 30); + AddStoreItem(STORENAME, "proj_arrow_holy", 30, 0, 0, 30); + if (RandomInt(1, 2) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_gholy", 30, 0, 0, 30); + } + AddStoreItem(STORENAME, "proj_bolt_fire", 50, 0, 0, 50); + AddStoreItem(STORENAME, "proj_bolt_iron", 100, 0, 0, 50); + AddStoreItem(STORENAME, "proj_bolt_silver", 25, 0, 0, 25); + } + +} + +} diff --git a/scripts/angelscript/outpost/super.as b/scripts/angelscript/outpost/super.as new file mode 100644 index 00000000..f95dcdc9 --- /dev/null +++ b/scripts/angelscript/outpost/super.as @@ -0,0 +1,411 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_guard_friendly_new.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Super : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string ATTACK_ALERT; + int ATTACK_DAMAGE; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BG_ROAM; + int CAN_TALK; + string DID_PAINCRY; + string DID_WARCRY; + string GAVE_INTRO; + int GIVE_INTRO_STEP; + int GOING_HOME; + string MADE_IT_HOME; + int MOVE_RANGE; + string NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int NO_STUCK_CHECKS; + string NPCATK_TARGET; + int OH_IT_IS_ON; + int PATROL_RANGE; + string QUEST_WINNER; + int RECIEVED_HEAD; + int REQ_QUEST_NOTDONE; + int REWARD_STEP; + string SOUND_ATTACK; + string SOUND_DEATH; + string SOUND_PAINCRY1; + string SOUND_PAINCRY2; + string SOUND_PAINCRY3; + string SOUND_PAINCRY4; + string SOUND_PAINCRY5; + string SOUND_WARCRY; + int WAR_INPROGRESS; + + Super() + { + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_ATTACK = "swordswing1_L"; + SOUND_ATTACK = "weapons/cbar_miss1.wav"; + ANIM_DEATH = "dieforward"; + ATTACK_RANGE = 85; + MOVE_RANGE = 75; + ATTACK_HITRANGE = 150; + ATTACK_HITCHANCE = 0.9; + ATTACK_DAMAGE = 35; + SOUND_WARCRY = "scientist/cough.wav"; + SOUND_DEATH = "scientist/scream21.wav"; + SOUND_PAINCRY1 = "scientist/sci_fear7.wav"; + SOUND_PAINCRY2 = "scientist/sci_fear11.wav"; + SOUND_PAINCRY3 = "scientist/sci_fear5.wav"; + SOUND_PAINCRY4 = "scientist/scream01.wav"; + SOUND_PAINCRY5 = "scientist/canttakemore.wav"; + PATROL_RANGE = 384; + BG_ROAM = 0; + Precache(SOUND_DEATH); + NO_RUMOR = 1; + NO_JOB = 1; + CAN_TALK = 1; + GIVE_INTRO_STEP = 0; + NO_STUCK_CHECKS = 1; + } + + void OnSpawn() override + { + SetName("outpost_super"); + SetNoPush(true); + SetHealth(600); + SetGold(10); + SetName("Vadrel , the outpost supervisor"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/guard2.mdl"); + SetModelBody(1, 2); + SetMoveAnim("walk"); + SetSkillLevel(0); + SetStepSize(0); + // TODO: maxslope 10 + SetDamageResistance("all", 0.5); + REQ_QUEST_NOTDONE = 1; + SetGlobalVar("WARBOSS_DEAD", 0); + WAR_INPROGRESS = 0; + ScheduleDelayedEvent(1.0, "stay_home"); + SetInvincible(true); + SetDamageResistance("stun", 0); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_yes", "yes"); + CatchSpeech("say_no", "no"); + } + + void say_job() + { + say_hi(); + } + + void stay_home() + { + if (Distance(GetMonsterProperty("origin"), NPC_SPAWN_LOC) > 384) + { + npcatk_clear_targets(); + if (!(GOING_HOME)) + { + force_go_home(); + } + SetMoveDest(NPC_SPAWN_LOC); + npcatk_suspend_ai(2.0); + } + ScheduleDelayedEvent(1.0, "stay_home"); + } + + void attack_1() + { + EmitSound(GetOwner(), 0, SOUND_ATTACK, 10); + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, ATTACK_DAMAGE, ATTACK_HITCHANCE); + } + + void say_hi() + { + if (!(CAN_TALK)) return; + npcatk_setmovedest("ent_lastspoke", 9999); + if ((WARBOSS_DEAD)) + { + PlayAnim("once", "yes"); + SayText("Thank you again for your help... Travel safely."); + } + if ((WARBOSS_DEAD)) return; + if ((WAR_INPROGRESS)) + { + PlayAnim("once", "fear1"); + SayText("What are you doing here? Protect the outpost!"); + } + if ((WAR_INPROGRESS)) return; + if (GIVE_INTRO_STEP == 7) + { + GIVE_INTRO_STEP = 0; + } + if (!(GIVE_INTRO_STEP == 0)) return; + give_intro(); + PlayAnim("once", "lean"); + } + + void give_intro() + { + if (!(CAN_TALK)) return; + GIVE_INTRO_STEP += 1; + if (GIVE_INTRO_STEP == 1) + { + NO_HAIL = 1; + GAVE_INTRO = 1; + float L_STEP_DELAY = 0.1; + } + if (GIVE_INTRO_STEP == 2) + { + SayText("Hail. For the longest time , we have struggled here against the Orcish invaders from the south."); + EmitSound(GetOwner(), 0, "voices/foutpost/Vadrel_1.wav", 10); + float L_STEP_DELAY = 4.51; + } + if (GIVE_INTRO_STEP == 3) + { + PlayAnim("once", "whiteboard"); + SayText("King Ardelleron just recently allowed us the materials for the wall."); + EmitSound(GetOwner(), 0, "voices/foutpost/Vadrel_2.wav", 10); + float L_STEP_DELAY = 4.07; + } + if (GIVE_INTRO_STEP == 4) + { + SayText("However , even with the wall , our numbers are diminishing and the King has yet to send more troops."); + EmitSound(GetOwner(), 0, "voices/foutpost/Vadrel_3.wav", 10); + float L_STEP_DELAY = 4.7; + } + if (GIVE_INTRO_STEP == 5) + { + SayText("We can't hold this position any longer... or at least... not without help..."); + EmitSound(GetOwner(), 0, "voices/foutpost/Vadrel_4.wav", 10); + float L_STEP_DELAY = 4.04; + } + if (GIVE_INTRO_STEP == 6) + { + SayText("If you help us to stop this invasion, I will reward you most graciously."); + EmitSound(GetOwner(), 0, "voices/foutpost/Vadrel_5.wav", 10); + float L_STEP_DELAY = 3.60; + } + if (GIVE_INTRO_STEP == 7) + { + PlayAnim("critical", "converse2"); + SayText("Do you accept?"); + EmitSound(GetOwner(), 0, "voices/foutpost/Vadrel_6.wav", 10); + } + if (!(GIVE_INTRO_STEP < 7)) return; + L_STEP_DELAY("give_intro"); + } + + void say_no() + { + if (!(CAN_TALK)) return; + if ((WAR_INPROGRESS)) return; + PlayAnim("once", "pull_needle"); + SayText("Then begone from our lands , as another attack is imminent!"); + EmitSound(GetOwner(), 0, "voices/foutpost/Vadrel_7.wav", 10); + UseTrigger("player_refused"); + } + + void say_yes() + { + if (!(CAN_TALK)) return; + if ((WAR_INPROGRESS)) return; + GIVE_INTRO_STEP = 8; + UseTrigger("player_accepted"); + SetInvincible(false); + WAR_INPROGRESS = 1; + ScheduleDelayedEvent(10.0, "i_r_super_lure"); + PlayAnim("once", "pondering2"); + SayText("Ah! Wonderful. If you would , there is a guard tower where you can watch for them coming."); + EmitSound(GetOwner(), 0, "voices/foutpost/Vadrel_8.wav", 10); + } + + void game_menu_getoptions() + { + if ((GAVE_INTRO)) + { + if (!(WAR_INPROGRESS)) + { + } + string reg.mitem.title = "Accept"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_yes"; + } + if (!(WARBOSS_DEAD)) return; + if ((RECIEVED_HEAD)) return; + if ((ItemExists(param1, "item_warbosshead"))) + { + string reg.mitem.title = "Offer Graznux's Head"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_warbosshead"; + string reg.mitem.callback = "gave_head"; + } + } + + void gave_head() + { + REQ_QUEST_NOTDONE = 0; + ReceiveOffer("accept"); + QUEST_WINNER = param1; + REWARD_STEP = 0; + if (!(WARBOSS_DEAD)) return; + if ((RECIEVED_HEAD)) return; + UseTrigger("gave_head"); + SetInvincible(true); + REWARD_STEP = 0; + ScheduleDelayedEvent(0.1, "reward_intro"); + } + + void reward_intro() + { + RECIEVED_HEAD = 1; + REWARD_STEP += 1; + if (REWARD_STEP == 1) + { + PlayAnim("once", "dryhands"); + SayText("Well done , travellers. Please , take a look around the armory and take what you wish."); + EmitSound(GetOwner(), 0, "voices/foutpost/Vadrel_9.wav", 10); + float L_STEP_DELAY = 4.15; + } + if (REWARD_STEP == 2) + { + SayText("No shoving now! There's enough for everyone!"); + EmitSound(GetOwner(), 0, "voices/foutpost/Vadrel_10.wav", 10); + } + if (!(REWARD_STEP < 2)) return; + L_STEP_DELAY("reward_intro"); + } + + void npcatk_settarget() + { + CAN_TALK = 0; + if (!(DID_WARCRY)) + { + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + DID_WARCRY = 1; + } + } + + void my_target_died() + { + CAN_TALK = 1; + } + + void force_go_home() + { + if ((MADE_IT_HOME)) return; + GOING_HOME = 1; + ScheduleDelayedEvent(1.0, "force_go_home"); + string MY_POS = GetEntityOrigin(GetOwner()); + if (GetMonsterProperty("movedest.origin") != MY_GUARD_POST) + { + npcatk_setmovedest(MY_GUARD_POST, 1); + } + if (Distance(MY_POS, MY_GUARD_POST) < 10) + { + if (!(OH_IT_IS_ON)) + { + } + string MY_POS = GetEntityOrigin(GetOwner()); + SetMoveDest("none"); + SetRoam(BG_ROAM); + SetMoveSpeed(BG_ROAM); + SetMoveAnim(ANIM_IDLE); + SetActionAnim(ANIM_IDLE); + SetAngles("face"); + MADE_IT_HOME = 1; + GOING_HOME = 0; + } + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + string HURT_THRESHOLD = GetMonsterMaxHP(); + HURT_THRESHOLD *= 0.75; + if (!(ATTACK_ALERT)) + { + SendInfoMsg("all", CRITICAL_NPC + " The outpost supervisor is under attack! Save him!"); + ATTACK_ALERT = 1; + ScheduleDelayedEvent(5.0, "reset_attack_alert"); + } + if (!(GetMonsterHP() < HURT_THRESHOLD)) return; + if (!(DID_PAINCRY)) + { + // PlayRandomSound from: SOUND_PAINCRY1, SOUND_PAINCRY2, SOUND_PAINCRY3, SOUND_PAINCRY4, SOUND_PAINCRY5 + array sounds = {SOUND_PAINCRY1, SOUND_PAINCRY2, SOUND_PAINCRY3, SOUND_PAINCRY4, SOUND_PAINCRY5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DID_PAINCRY = 1; + ScheduleDelayedEvent(5.0, "reset_paincry"); + } + } + + void reset_attack_alert() + { + ATTACK_ALERT = 0; + } + + void reset_paincry() + { + DID_PAINCRY = 0; + } + + void baseguard_clear_targs() + { + OH_IT_IS_ON = 0; + if (!(BG_NO_GO_HOME)) + { + SetAngles("face_origin"); + npcatk_setmovedest(MY_GUARD_POST, 1); + } + MADE_IT_HOME = 0; + going_home(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SendInfoMsg("all", FAILURE! + THE + OUTPOST + SUPERVISOR + HAS + DIED! + " You will not be allowed to proceed to the next area."); + } + + void npcatk_clear_targets() + { + CAN_TALK = 1; + } + + void OnTargetValidate(CBaseEntity@ target) + { + string TARGET_ORG = GetEntityOrigin(param1); + if (!(Distance(TARGET_ORG, NPC_SPAWN_LOC) >= PATROL_RANGE)) return; + NPCATK_TARGET = "unset"; + } + + void i_r_super_lure() + { + CallExternal("all", "super_lure", GetEntityIndex(GetOwner()), "orc"); + ScheduleDelayedEvent(5.0, "i_r_super_lure"); + } + + void OnDamage(int damage) override + { + if (!(IsValidPlayer(param1))) return; + SetDamage("dmg"); + SetDamage("hit"); + return; + } + +} + +} diff --git a/scripts/angelscript/phlames/corrupted_reaver.as b/scripts/angelscript/phlames/corrupted_reaver.as new file mode 100644 index 00000000..cc34c6b3 --- /dev/null +++ b/scripts/angelscript/phlames/corrupted_reaver.as @@ -0,0 +1,98 @@ +#pragma context server + +#include "monsters/swamp_reaver.as" + +namespace MS +{ + +class CorruptedReaver : CGameScript +{ + string BREATH_TYPE; + string DOT_ACID_BOMB; + string DOT_DMG; + string DOT_DURATION; + string DOT_EFFECT; + string EFFECT_ACID_BOMB; + string ERRUPT_TYPE; + float FIREBALL1_DURATION; + string FIREBALL1_SCRIPT; + float FIREBALL2_DURATION; + string FIREBALL2_SCRIPT; + int MIXED_REAVER; + string MIX_COUNT; + string PROJECTILE_SCRIPT; + int REAVER_HEIGHT; + int REAVER_MAXHP; + string REAVER_MODEL; + string REAVER_NAME; + int REAVER_SKIN; + int REAVER_WIDTH; + int REAVER_XP; + + CorruptedReaver() + { + REAVER_NAME = "Corrupted Reaver"; + REAVER_MAXHP = 5000; + REAVER_XP = 3750; + REAVER_SKIN = 2; + REAVER_MODEL = "monsters/firereaver2.mdl"; + REAVER_WIDTH = 90; + REAVER_HEIGHT = 72; + FIREBALL1_SCRIPT = "monsters/summon/fire_ball_guided"; + FIREBALL2_SCRIPT = "monsters/summon/acid_ball_guided"; + FIREBALL1_DURATION = 15.0; + FIREBALL2_DURATION = 8.0; + MIXED_REAVER = 1; + } + + void game_precache() + { + Precache("monsters/summon/fire_ball_guided"); + Precache("monsters/summon/acid_ball_guided"); + Precache("effects/sfx_acid_splash"); + Precache("xfireball3.spr"); + } + + void mixed_reaver_switch() + { + MIX_COUNT += 1; + if (MIX_COUNT == 1) + { + DOT_EFFECT = "effects/dot_fire"; + DOT_DURATION = 5.0; + DOT_DMG = 60.0; + ERRUPT_TYPE = "fire"; + BREATH_TYPE = "fire"; + PROJECTILE_SCRIPT = "proj_fire_bomb"; + DOT_ACID_BOMB = 200; + EFFECT_ACID_BOMB = "effects/dot_fire"; + SetBloodType("red"); + } + if (MIX_COUNT == 2) + { + DOT_EFFECT = "effects/dot_poison"; + DOT_DURATION = 10.0; + DOT_DMG = 30.0; + ERRUPT_TYPE = "poison"; + BREATH_TYPE = "poison"; + PROJECTILE_SCRIPT = "proj_acid_bomb"; + DOT_ACID_BOMB = 150; + EFFECT_ACID_BOMB = "effects/dot_acid"; + SetBloodType("green"); + MIX_COUNT = 0; + } + } + + void reaver_immunes() + { + SetDamageResistance("lightning", 1.25); + SetDamageResistance("cold", 1.25); + SetDamageResistance("acid", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("holy", 0.5); + } + +} + +} diff --git a/scripts/angelscript/phlames/map_startup.as b/scripts/angelscript/phlames/map_startup.as new file mode 100644 index 00000000..e1ad08d5 --- /dev/null +++ b/scripts/angelscript/phlames/map_startup.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + Precache("fire1_fixed2.spr"); + Precache("fire1_fixed.spr"); + MAP_NAME = "phlames"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Phlames Fortress by Caluminium"); + SetGlobalVar("G_MAP_DESC", "The occupants of this Fortress make great use of the fire influence within."); + SetGlobalVar("G_MAP_DIFF", "Levels 35-45 / HP 800+"); + SetGlobalVar("G_WARN_HP", 800); + } + +} + +} diff --git a/scripts/angelscript/phlames/phlame.as b/scripts/angelscript/phlames/phlame.as new file mode 100644 index 00000000..f670b162 --- /dev/null +++ b/scripts/angelscript/phlames/phlame.as @@ -0,0 +1,958 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Phlame : CGameScript +{ + int AM_TRANSFORMED; + string ANIM_ATTACK; + string ANIM_BEAM; + string ANIM_BOULDERS; + string ANIM_DODGE; + string ANIM_FIRE_BREATH; + string ANIM_GUIDED_BURST; + string ANIM_IDLE; + string ANIM_IDLE_DEF; + string ANIM_LEAP; + string ANIM_LOOK; + string ANIM_METEOR; + string ANIM_MODE; + string ANIM_REPULSE; + string ANIM_RUN; + string ANIM_RUN_DEF; + string ANIM_SEARCH; + string ANIM_SUMMON; + string ANIM_TRANSFORM; + string ANIM_WALK; + string ANIM_WALK_DEF; + int ATTACH_EYE; + int ATTACH_HAND; + int ATTACH_STAFF; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BIRD_SCRIPT; + string BREATH_TARGS; + string BREATH_YAW; + int CAN_HEAR; + string CL_EFFECT_ID; + int CL_FX_ON; + string CREATE_POINT; + int DID_SUMMON; + int DMG_EYE_BEAM; + int DMG_REPULSE; + int DMG_ROCKS; + int DMG_STAFF; + int DOT_FIRE; + string EYE_BEAM_ID; + int EYE_BEAM_ON; + string EYE_BEAM_TARGET; + int FIRE_BREATH_ON; + string FIRST_SUMMON; + float FREQ_CL_REFRESH; + float FREQ_GLOAT; + float FREQ_LOOK; + float FREQ_PAIN; + float FREQ_REPELL; + float FREQ_SPECIAL; + string HEALTH_25; + string HEALTH_50; + string HEALTH_75; + int IMMUNE_VAMPIRE; + int IS_ACTIVE; + int IS_UNHOLY; + string IS_WEAK; + int IT_HATH_BEGUN; + int MOVE_RANGE; + string MY_ANGLES; + string MY_ORG; + string NEXT_EYE_TRACE; + string NEXT_FX_REFRESH; + string NEXT_GLOAT; + string NEXT_GLOBAL_GLOAT; + string NEXT_LEAP_AWAY; + string NEXT_LOOK; + string NEXT_PAIN; + string NEXT_REPELL; + string NEXT_SCAN; + string NEXT_SPECIAL; + int NO_SPAWN_STUCK_CHECK; + int NO_STUCK_CHECKS; + float NPC_BOSS_REGEN_FREQ; + float NPC_BOSS_REGEN_RATE; + int NPC_GIVE_EXP; + int NPC_IS_BOSS; + int NPC_NO_AUTO_ACTIVATE; + int RENDER_AMT; + string REPULSE_ATTACK; + int REPULSE_ATTACK_MODE; + string SOUND_BREATH_START; + string SOUND_DEATH; + string SOUND_EYE_BEAM_FIRE; + string SOUND_EYE_BEAM_LOOP; + string SOUND_EYE_BEAM_OFF; + string SOUND_EYE_BEAM_PREP; + string SOUND_GLOAT1; + string SOUND_GLOAT2; + string SOUND_GLOAT3; + string SOUND_GLOAT4; + string SOUND_PAIN1; + string SOUND_PAIN_HEALTHY; + string SOUND_PAIN_WEAK; + string SOUND_STRONG_SWING1; + string SOUND_STRONG_SWING2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SUMMON; + string SOUND_SWING1; + string SOUND_SWING2; + int SPECIAL_ATTACK; + int STAFF_STRIKE; + int SUMMON_CYCLE; + int SUSPEND_CL_FX; + int TRANSFORM_COUNT; + string TRANSFORM_VALID; + + Phlame() + { + ANIM_IDLE = "idle"; + ANIM_WALK = "walk2handed"; + ANIM_RUN = "run2"; + ANIM_ATTACK = "staff_strike"; + ANIM_RUN_DEF = "run2"; + ANIM_WALK_DEF = "walk2handed"; + ANIM_IDLE_DEF = "idle"; + ANIM_TRANSFORM = "crouch_aim_dualmagicmissile"; + ANIM_SEARCH = "look_idle"; + ANIM_LOOK = "look_idle"; + ANIM_SUMMON = "summon"; + ANIM_METEOR = "cieling_strike"; + ANIM_BOULDERS = "cieling_strike"; + ANIM_REPULSE = "fdeploy_strike"; + ANIM_DODGE = "staff_aim"; + ANIM_BEAM = "staff_aim"; + ANIM_FIRE_BREATH = "aim_1"; + ANIM_GUIDED_BURST = "shoot_1"; + ANIM_LEAP = "long_jump"; + NPC_IS_BOSS = 1; + NPC_BOSS_REGEN_RATE = 0.1; + NPC_BOSS_REGEN_FREQ = 40.0; + NPC_GIVE_EXP = 15000; + MOVE_RANGE = 512; + ATTACK_MOVERANGE = 512; + ATTACK_RANGE = 200; + ATTACK_HITRANGE = 250; + FREQ_LOOK = 15.0; + FREQ_GLOAT = Random(30.0, 60.0); + FREQ_PAIN = Random(20.0, 30.0); + FREQ_SPECIAL = 15.0; + FREQ_CL_REFRESH = 30.0; + FREQ_REPELL = 20.0; + DMG_STAFF = 100; + DOT_FIRE = 100; + DMG_ROCKS = 400; + DMG_EYE_BEAM = 200; + DMG_REPULSE = 100; + ATTACH_HAND = 1; + ATTACH_STAFF = 2; + ATTACH_EYE = 3; + BIRD_SCRIPT = "phlames/phlame_bird"; + SOUND_GLOAT1 = "voices/phlame/vs_nx0headm_haha.wav"; + SOUND_GLOAT2 = "voices/phlame/vs_nx0headm_attk.wav"; + SOUND_GLOAT3 = "voices/phlame/vs_nx0headm_bat1.wav"; + SOUND_GLOAT4 = "voices/phlame/vs_nx0headm_bat3.wav"; + SOUND_SUMMON = "voices/phlame/vs_nx0headm_bat2.wav"; + SOUND_PAIN1 = "voices/phlame/vs_nx0headm_atk1.wav"; + SOUND_PAIN_HEALTHY = "voices/phlame/vs_nx0headm_yes.wav"; + SOUND_PAIN_WEAK = "voices/phlame/vs_nx0headm_no.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_SWING1 = "zombie/claw_miss1.wav"; + SOUND_SWING2 = "zombie/claw_miss2.wav"; + SOUND_STRONG_SWING1 = "zombie/claw_strike1.wav"; + SOUND_STRONG_SWING2 = "zombie/claw_strike2.wav"; + SOUND_EYE_BEAM_PREP = "weapons/egon_windup2.wav"; + SOUND_EYE_BEAM_LOOP = "weapons/egon_run3.wav"; + SOUND_EYE_BEAM_FIRE = "debris/beamstart1.wav"; + SOUND_EYE_BEAM_OFF = "debris/beamstart1.wav"; + SOUND_BREATH_START = "monsters/goblin/sps_fogfire.wav"; + SOUND_DEATH = "voices/phlame/vs_nx0headm_hit1.wav"; + Precache("c-tele1.spr"); + Precache("firemagic_8bit.spr"); + Precache("laserbeam.spr"); + Precache("red_aura_8bit.spr"); + Precache("3dmflaora.spr"); + Precache("calflame.spr"); + Precache("monsters/demonwing/demonwing_huge.wav"); + } + + void game_precache() + { + Precache("monsters/summon/rock_storm"); + Precache("phlames/phlame_cl"); + Precache(BIRD_SCRIPT); + } + + void OnSpawn() override + { + SetName("Phlame the Ever Burning"); + SetRace("demon"); + SetHealth(17500); + SetModel("monsters/phlame.mdl"); + SetWidth(32); + SetHeight(90); + SetRace("demon"); + SetHearingSensitivity(5); + SetName("phlame_wiz"); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetDamageResistance("lightning", 0.5); + SetDamageResistance("poison", 0.25); + SetDamageResistance("acid", 0.5); + SetDamageResistance("holy", 1.25); + IMMUNE_VAMPIRE = 1; + IS_UNHOLY = 1; + SetMoveAnim(ANIM_LOOK); + SetIdleAnim(ANIM_LOOK); + PlayAnim("once", ANIM_LOOK); + SetMoveSpeed(0); + SetInvincible(true); + SetRoam(false); + CatchSpeech("do_anime", "hentai"); + SetSayTextRange(1024); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 128, 20, 25); + ScheduleDelayedEvent(35.0, "start_vines"); + npcatk_suspend_ai(); + CAN_HEAR = 0; + NO_SPAWN_STUCK_CHECK = 1; + NPC_NO_AUTO_ACTIVATE = 1; + NO_STUCK_CHECKS = 1; + SPECIAL_ATTACK = 0; + TRANSFORM_COUNT = 0; + SUMMON_CYCLE = 0; + ScheduleDelayedEvent(3.0, "speak_begin"); + ScheduleDelayedEvent(20.0, "let_us_begin"); + ScheduleDelayedEvent(2.0, "final_props"); + } + + void do_anime() + { + if (!(ANIME_MODE)) + { + ANIM_MODE = 1; + SetModelBody(0, 1); + } + else + { + ANIM_MODE = 0; + SetModelBody(0, 0); + } + } + + void OnPostSpawn() override + { + CL_FX_ON = 1; + PlayAnim("once", ANIM_LOOK); + } + + void final_props() + { + HEALTH_75 = GetEntityMaxHealth(GetOwner()); + HEALTH_50 = GetEntityMaxHealth(GetOwner()); + HEALTH_25 = GetEntityMaxHealth(GetOwner()); + HEALTH_75 *= 0.75; + HEALTH_50 *= 0.5; + HEALTH_25 *= 0.25; + } + + void speak_begin() + { + SayText("Then... Let us... Begin..."); + } + + void let_us_begin() + { + if ((IT_HATH_BEGUN)) return; + IT_HATH_BEGUN = 1; + SetInvincible(false); + ANIM_RUN = ANIM_WALK_DEF; + ANIM_IDLE = ANIM_IDLE_DEF; + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + npcatk_resume_ai(); + NO_STUCK_CHECKS = 0; + IS_ACTIVE = 1; + NEXT_GLOAT = GetGameTime(); + NEXT_GLOAT += FREQ_GLOAT; + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 5.0; + FIRST_SUMMON = NEXT_SPECIAL; + FIRST_SUMMON += 10.0; + SetMoveSpeed(1); + CAN_HEAR = 1; + } + + void bs_global_command() + { + if (!(param3 == "death")) return; + if (!(IsEntityAlive(GetOwner()))) return; + if (!(GetGameTime() > NEXT_GLOBAL_GLOAT)) return; + NEXT_GLOBAL_GLOAT = GetGameTime(); + NEXT_GLOBAL_GLOAT += 15.0; + int RND_GLOAT = RandomInt(1, 4); + if (RND_GLOAT == 1) + { + UseTrigger("snd_gloat1"); + } + if (RND_GLOAT == 2) + { + UseTrigger("snd_gloat2"); + } + if (RND_GLOAT == 3) + { + UseTrigger("snd_gloat3"); + } + if (RND_GLOAT == 4) + { + UseTrigger("snd_gloat4"); + } + } + + void do_gloat() + { + // PlayRandomSound from: SOUND_GLOAT1, SOUND_GLOAT2, SOUND_GLOAT3, SOUND_GLOAT4 + array sounds = {SOUND_GLOAT1, SOUND_GLOAT2, SOUND_GLOAT3, SOUND_GLOAT4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((EYE_BEAM_ON)) + { + if (GetEntityRange(m_hLastStruck) < GetEntityRange(EYE_BEAM_TARGET)) + { + } + eye_beam_switchtargets(GetEntityIndex(m_hLastStruck)); + } + if (GetEntityHealth(GetOwner()) < HEALTH_50) + { + IS_WEAK = 1; + } + else + { + IS_WEAK = 0; + } + if (GetGameTime() > NEXT_PAIN) + { + NEXT_PAIN = GetGameTime(); + NEXT_PAIN += FREQ_PAIN; + if (!(IS_WEAK)) + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN_HEALTHY + array sounds = {SOUND_PAIN1, SOUND_PAIN_HEALTHY}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN_WEAK + array sounds = {SOUND_PAIN1, SOUND_PAIN_WEAK}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + else + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + if ((IS_WEAK)) + { + ANIM_RUN = ANIM_RUN_DEF; + SetMoveAnim(ANIM_RUN); + } + else + { + ANIM_RUN = ANIM_WALK_DEF; + SetMoveAnim(ANIM_RUN); + } + if (!(IS_WEAK)) return; + if ((BUSY_CASTING)) return; + if (GetEntityRange(m_hLastStruck) < 200) + { + if (GetGameTime() > NEXT_LEAP_AWAY) + { + } + NEXT_LEAP_AWAY = GetGameTime(); + NEXT_LEAP_AWAY += FREQ_LEAP_AWAY; + do_leap_away(); + } + } + + void game_dodamage() + { + if ((STAFF_STRIKE)) + { + if ((param1)) + { + } + if (!(REPULSE_ATTACK)) + { + } + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + if ((REPULSE_ATTACK)) + { + if ((param1)) + { + } + string CUR_TARG = param2; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 3000, 600))); + } + STAFF_STRIKE = 0; + } + + void frame_staff_strike() + { + int RND_STRENGTH = RandomInt(1, 2); + if (RND_STRENGTH == 1) + { + // PlayRandomSound from: SOUND_SWING1, SOUND_SWING2 + array sounds = {SOUND_SWING1, SOUND_SWING2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_STRONG_SWING1, SOUND_STRONG_SWING2 + array sounds = {SOUND_STRONG_SWING1, SOUND_STRONG_SWING2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + string L_DMG = DMG_STAFF; + if (RND_STRENGTH == 2) + { + L_DMG *= 4; + } + STAFF_STRIKE = 1; + if (REPULSE_ATTACK_MODE > 0) + { + ClientEvent("update", "all", CL_EFFECT_ID, "repulse_attack"); + REPULSE_ATTACK = 1; + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 32), 512, DMG_REPULSE, 1.0, 0); + REPULSE_ATTACK_MODE -= 1; + ScheduleDelayedEvent(0.1, "repulse_reset"); + } + else + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, L_DMG, 0.9, "blunt"); + } + } + + void repulse_reset() + { + REPULSE_ATTACK = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + float GAME_TIME = GetGameTime(); + if ((CL_FX_ON)) + { + if (!(SUSPEND_CL_FX)) + { + } + if (GAME_TIME > NEXT_FX_REFRESH) + { + } + NEXT_FX_REFRESH = GAME_TIME; + NEXT_FX_REFRESH += FREQ_CL_REFRESH; + refresh_client_fx(); + } + if (!(m_hAttackTarget != "unset")) return; + if ((SUSPEND_AI)) return; + if (REPULSE_ATTACK_MODE > 0) + { + PlayAnim("once", ANIM_ATTACK); + } + if (!(IS_ACTIVE)) return; + if (GAME_TIME > NEXT_GLOAT) + { + NEXT_GLOAT = GAME_TIME; + NEXT_GLOAT += FREQ_GLOAT; + do_gloat(); + } + if (GAME_TIME > NEXT_SPECIAL) + { + NEXT_SPECIAL = GAME_TIME; + NEXT_SPECIAL += FREQ_SPECIAL; + SPECIAL_ATTACK += 1; + if (SPECIAL_ATTACK > 4) + { + SPECIAL_ATTACK = 0; + } + if (TRANSFORM_COUNT == 0) + { + if (GetEntityHealth(GetOwner()) < HEALTH_75) + { + do_transform(); + int EXIT_SUB = 1; + } + } + if (!(EXIT_SUB)) + { + } + if (TRANSFORM_COUNT == 1) + { + if (GetEntityHealth(GetOwner()) < HEALTH_25) + { + do_transform(); + int EXIT_SUB = 1; + } + } + if (!(EXIT_SUB)) + { + } + if (GAME_TIME > FIRST_SUMMON) + { + do_summon(); + if ((DID_SUMMON)) + { + } + DID_SUMMON = 0; + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (SPECIAL_ATTACK == 1) + { + PlayAnim("critical", ANIM_REPULSE); + SpawnNPC("monsters/summon/rock_storm", /* TODO: $relpos */ $relpos(0, 0, 32), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 4, DMG_ROCKS, 64, 120, 1 + } + if (SPECIAL_ATTACK == 2) + { + do_eye_beam(); + } + if (SPECIAL_ATTACK == 3) + { + if (GetEntityRange(m_hAttackTarget) < 512) + { + do_fire_breath(); + } + else + { + SPECIAL_ATTACK += 1; + } + } + if (SPECIAL_ATTACK == 4) + { + if (GetEntityRange(m_hAttackTarget) < 128) + { + do_repulse(); + } + else + { + NEXT_SPECIAL = GetGameTime(); + } + SPECIAL_ATTACK = 0; + } + } + if (GAME_TIME > NEXT_REPELL) + { + if (REPULSE_ATTACK_MODE <= 0) + { + } + if (!(SUSPEND_AI)) + { + } + NEXT_REPELL = GAME_TIME; + NEXT_REPELL += FREQ_REPELL; + string NEARBY_NMES = FindEntitiesInSphere("enemy", 256); + if (NEARBY_NMES != "none") + { + } + string N_NEARBY_NMES = GetTokenCount(NEARBY_NMES, ";"); + int DO_REPULSE_CHANCE = RandomInt(1, 3); + LogDebug("repulse_check nmes N_NEARBY_NMES vs DO_REPULSE_CHANCE"); + if (DO_REPULSE_CHANCE < N_NEARBY_NMES) + { + } + REPULSE_ATTACK_MODE += 1; + PlayAnim("once", ANIM_ATTACK); + } + } + + void npcatk_lost_sight() + { + if (!(GetGameTime() > NEXT_LOOK)) return; + NEXT_LOOK = GetGameTime(); + NEXT_LOOK += FREQ_LOOK; + PlayAnim("once", ANIM_SEARCH); + } + + void refresh_client_fx() + { + ClientEvent("new", "all", "phlames/phlame_cl", GetEntityIndex(GetOwner()), EYE_BEAM_ON, FIRE_BREATH_ON); + CL_EFFECT_ID = "game.script.last_sent_id"; + } + + void do_eye_beam() + { + EYE_BEAM_TARGET = m_hAttackTarget; + PlayAnim("once", "break"); + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_BEAM); + EmitSound(GetOwner(), 0, SOUND_EYE_BEAM_PREP, 10); + EYE_BEAM_ON = 1; + ClientEvent("update", "all", CL_EFFECT_ID, "eye_beam_on"); + ScheduleDelayedEvent(1.0, "do_eye_beam2"); + } + + void do_eye_beam2() + { + Effect("beam", "ents", "laserbeam.spr", 30, GetOwner(), ATTACH_EYE, EYE_BEAM_TARGET, 1, Vector3(255, 0, 255), 255, 10, EYE_BEAM_DURATION); + EYE_BEAM_ID = m_hLastCreated; + EmitSound(GetOwner(), 0, SOUND_EYE_BEAM_FIRE, 10); + // svplaysound: svplaysound 1 10 SOUND_EYE_BEAM_LOOP + EmitSound(1, 10, SOUND_EYE_BEAM_LOOP); + eye_beam_loop(); + ScheduleDelayedEvent(10.0, "end_eye_beam"); + EYE_BEAM_DURATION("end_eye_beam"); + } + + void eye_beam_loop() + { + if (!(EYE_BEAM_ON)) return; + ScheduleDelayedEvent(0.1, "eye_beam_loop"); + SetMoveDest(EYE_BEAM_TARGET); + if (!(GetGameTime() > NEXT_EYE_TRACE)) return; + NEXT_EYE_TRACE = GetGameTime(); + NEXT_EYE_TRACE += 0.5; + if (!(IsEntityAlive(EYE_BEAM_TARGET))) + { + int GET_NEW_TARGET = 1; + } + else + { + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = GetEntityOrigin(EYE_BEAM_TARGET); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + } + if (TRACE_LINE != TRACE_END) + { + int GET_NEW_TARGET = 1; + } + else + { + if (!(GET_NEW_TARGET)) + { + } + DoDamage(EYE_BEAM_TARGET, "direct", DMG_EYE_BEAM, 1.0, GetOwner()); + AddVelocity(EYE_BEAM_TARGET, /* TODO: $relvel */ $relvel(0, 250, 110)); + ClientEvent("update", "all", CL_EFFECT_ID, "eye_beam_contact", GetEntityOrigin(EYE_BEAM_TARGET)); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string CAN_SEE_NME = false; + if ((CAN_SEE_NME)) + { + // TODO: UNCONVERTED: if ( CAN_SEE_NME) ) + } + LogDebug("eye_beam_loop see_nme CAN_SEE_NME GetEntityName(m_hLastSeen)"); + if (GetEntityRange(m_hLastSeen) < GetEntityRange(EYE_BEAM_TARGET)) + { + int GET_NEW_TARGET = 1; + } + if (!(GET_NEW_TARGET)) return; + eye_beam_switchtargets(GetEntityIndex(m_hLastSeen)); + int GOT_NEW_TARGET = 1; + if ((GOT_NEW_TARGET)) return; + end_eye_beam(); + } + + void eye_beam_switchtargets() + { + EYE_BEAM_TARGET = param1; + Effect("beam", "update", EYE_BEAM_ID, "end_target", EYE_BEAM_TARGET); + } + + void end_eye_beam() + { + if (!(EYE_BEAM_ON)) return; + EYE_BEAM_ON = 0; + npcatk_resume_movement(); + npcatk_resume_ai(); + Effect("beam", "update", EYE_BEAM_ID, "brightness", 0); + ClientEvent("update", "all", CL_EFFECT_ID, "eye_beam_off"); + // svplaysound: svplaysound 1 0 SOUND_EYE_BEAM_LOOP + EmitSound(1, 0, SOUND_EYE_BEAM_LOOP); + EmitSound(GetOwner(), 0, SOUND_EYE_BEAM_OFF, 10); + ScheduleDelayedEvent(0.1, "end_eye_beam2"); + } + + void end_eye_beam2() + { + ClientEvent("update", "all", CL_EFFECT_ID, "eye_beam_off"); + } + + void do_summon() + { + LogDebug("do_summon G_NPC_SUMMON_COUNT MAX_SUMMON_COUNT"); + int MAX_SUMMON_COUNT = 2; + if (GetPlayerCount() > 5) + { + int MAX_SUMMON_COUNT = 4; + } + if (G_NPC_SUMMON_COUNT <= MAX_SUMMON_COUNT) + { + int CLEARED_FOR_SUMMON = 1; + } + if (!(CLEARED_FOR_SUMMON)) return; + DID_SUMMON = 1; + SUMMON_CYCLE += 1; + if (SUMMON_CYCLE == 3) + { + string SCORP_POS = NPC_HOME_LOC; + SCORP_POS = "z"; + string MY_POS = GetEntityOrigin(GetOwner()); + if (Distance(MY_POS, SCORP_POS) > 128) + { + PlayAnim("critical", ANIM_SUMMON); + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + UseTrigger("spawn_fboss_scorps"); + } + else + { + SUMMON_CYCLE = RandomInt(1, 2); + } + } + if (SUMMON_CYCLE == 1) + { + SetMoveDest(NPC_HOME_LOC); + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_METEOR, 1.0); + PlayAnim("hold", ANIM_METEOR); + ScheduleDelayedEvent(1.5, "break_summon_anim"); + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + UseTrigger("spawn_fboss_birds"); + } + if (SUMMON_CYCLE == 2) + { + PlayAnim("critical", ANIM_SUMMON); + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + UseTrigger("spawn_fboss_boars"); + } + if (!(SUMMON_CYCLE > 3)) return; + SUMMON_CYCLE = 0; + } + + void break_summon_anim() + { + npcatk_resume_ai(); + PlayAnim("once", "break"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClientEvent("update", "all", CL_EFFECT_ID, "end_fx"); + if ((EYE_BEAM_ON)) + { + Effect("beam", "update", EYE_BEAM_ID, "brightness", 0); + // svplaysound: svplaysound 1 0 SOUND_EYE_BEAM_LOOP + EmitSound(1, 0, SOUND_EYE_BEAM_LOOP); + } + UseTrigger("snd_fboss_death"); + CallExternal("all", "ext_summon_fade"); + } + + void do_fire_breath() + { + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_FIRE_BREATH); + ClientEvent("update", "all", CL_EFFECT_ID, "fire_breath_on"); + EmitSound(GetOwner(), 1, SOUND_BREATH_START, 10); + PlayAnim("once", "break"); + PlayAnim("hold", ANIM_FIRE_BREATH); + SetMoveDest(m_hAttackTarget); + BREATH_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + FIRE_BREATH_ON = 1; + ScheduleDelayedEvent(10.0, "end_fire_breath"); + fire_breath_loop(); + } + + void fire_breath_loop() + { + if (!(FIRE_BREATH_ON)) return; + ScheduleDelayedEvent(0.1, "fire_breath_loop"); + BREATH_YAW += 1; + if (BREATH_YAW > 359.99) + { + BREATH_YAW -= 359.99; + } + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_YAW, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_POS); + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 1.0; + BREATH_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(BREATH_TARGS != "none")) return; + MY_ORG = GetEntityOrigin(GetOwner()); + MY_ANGLES = GetEntityAngles(GetOwner()); + for (int i = 0; i < GetTokenCount(BREATH_TARGS, ";"); i++) + { + breath_affect_targets(); + } + } + + void breath_affect_targets() + { + string CUR_TARG = GetToken(BREATH_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, 2000, 110)); + } + + void end_fire_breath() + { + FIRE_BREATH_ON = 0; + npcatk_resume_movement(); + npcatk_resume_ai(); + ClientEvent("update", "all", CL_EFFECT_ID, "fire_breath_off"); + PlayAnim("critical", ANIM_ATTACK); + } + + void do_repulse() + { + PlayAnim("critical", ANIM_ATTACK); + REPULSE_ATTACK_MODE = 3; + } + + void transform_check() + { + string CENTER_POINT = NPC_HOME_LOC; + CENTER_POINT = "z"; + string MY_POS = GetEntityOrigin(GetOwner()); + if (Distance(MY_POS, CENTER_POINT) <= 200) + { + TRANSFORM_VALID = 1; + } + else + { + LogDebug("transform_check no_room"); + npcatk_suspend_ai(2.0); + SetMoveAnim(ANIM_RUN_DEF); + string MOVE_DEST = NPC_HOME_LOC; + MOVE_DEST = "z"; + SetMoveDest(NPC_HOME_LOC); + PlayAnim("critical", ANIM_LEAP); + ScheduleDelayedEvent(0.1, "leap_forward_boost"); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 2.0; + } + } + + void leap_forward_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 300, 110)); + } + + void do_transform() + { + TRANSFORM_VALID = 0; + transform_check(); + if (!(TRANSFORM_VALID)) return; + TRANSFORM_COUNT += 1; + AM_TRANSFORMED = 1; + npcatk_suspend_ai(); + SetInvincible(true); + npcatk_suspend_movement(ANIM_TRANSFORM); + ClientEvent("update", "all", CL_EFFECT_ID, "do_transform", GetEntityOrigin(GetOwner())); + SetProp(GetOwner(), "rendermode", 2); + RENDER_AMT = 255; + do_fade_out(); + // svplaysound: svplaysound 1 10 ambience/alienfazzle1.wav + EmitSound(1, 10, "ambience/alienfazzle1.wav"); + EmitSound(GetOwner(), 2, "ambience/blackhole.wav", 10); + CREATE_POINT = GetEntityOrigin(GetOwner()); + CREATE_POINT += "z"; + SetGravity(0); + ClearFX(); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 100)); + SetNoPush(true); + ScheduleDelayedEvent(2.0, "transform_finalize"); + CallExternal("all", "ext_summon_fade"); + } + + void do_fade_out() + { + RENDER_AMT -= 5; + if (!(RENDER_AMT > 0)) return; + ScheduleDelayedEvent(0.1, "do_fade_out"); + SetProp(GetOwner(), "renderamt", RENDER_AMT); + } + + void transform_finalize() + { + UseTrigger("snd_phlame_bird_spawn"); + // svplaysound: svplaysound 1 0 ambience/alienfazzle1.wav + EmitSound(1, 0, "ambience/alienfazzle1.wav"); + ClientEvent("update", "all", CL_EFFECT_ID, "transform_finalize", CREATE_POINT); + ScheduleDelayedEvent(0.5, "remove_cl_fx"); + SUSPEND_CL_FX = 1; + SetEntityOrigin(GetOwner(), Vector3(20000, -20000, -20000)); + SpawnNPC(BIRD_SCRIPT, CREATE_POINT, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), "phlame" + } + + void remove_cl_fx() + { + ClientEvent("update", "all", CL_EFFECT_ID, "end_fx"); + } + + void transform_return() + { + AM_TRANSFORMED = 0; + SetNoPush(false); + SetInvincible(false); + SetGravity(1); + string RETURN_POINT = NPC_HOME_LOC; + string ORG_RETURN_POINT = param1; + RETURN_POINT = "z"; + RETURN_POINT += "z"; + SetEntityOrigin(GetOwner(), RETURN_POINT); + SUSPEND_CL_FX = 0; + NEXT_FX_REFRESH = GAME_TIME; + NEXT_FX_REFRESH += FREQ_CL_REFRESH; + refresh_client_fx(); + ClientEvent("update", "all", CL_EFFECT_ID, "transform_return", ORG_RETURN_POINT, RETURN_POINT); + set_fade_in(); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + npcatk_resume_movement(); + ANIM_WALK = ANIM_WALK_DEF; + ANIM_IDLE = ANIM_IDLE_DEF; + ANIM_RUN = ANIM_WALK_DEF; + SetMoveAnim(ANIM_WALK_DEF); + SetIdleAnim(ANIM_IDLE_DEF); + PlayAnim("critical", ANIM_TRANSFORM); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 128, 1, 1); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 3.0; + FIRST_SUMMON = NEXT_SPECIAL; + FIRST_SUMMON += 10.0; + } + + void start_vines() + { + UseTrigger("spawn_fboss_vines"); + } + +} + +} diff --git a/scripts/angelscript/phlames/phlame_bird.as b/scripts/angelscript/phlames/phlame_bird.as new file mode 100644 index 00000000..992e4dbb --- /dev/null +++ b/scripts/angelscript/phlames/phlame_bird.as @@ -0,0 +1,683 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_flyer_grav.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class PhlameBird : CGameScript +{ + string ANIM_ATTACK; + string ANIM_BOOST; + string ANIM_CEILING_DETATCH; + string ANIM_CEILING_IDLE1; + string ANIM_CEILING_IDLE2; + string ANIM_CEILING_IDLE3; + string ANIM_CEILING_LAND; + string ANIM_DEATH; + string ANIM_DIVE; + string ANIM_FLINCH1; + string ANIM_FLINCH2; + string ANIM_FLY; + string ANIM_HOVER; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + string AS_ATTACKING; + int AS_CUSTOM_UNSTUCK; + string ATTACK_BOMB; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BFLY_SUSPEND_FLY; + string BOMB_TARGET; + string BREATH_TARGS; + string BREATH_YAW; + int CANT_TURN; + int CIELING_MODE; + int CLAW_ATTACK; + int DMG_BOMB; + int DMG_CLAW; + int DMG_SPIT; + int DOT_FIRE; + string FB_CL_SCRIPT_ID; + int FIRE_BOMB_ATTACK; + string FIRE_BOMB_POS; + string FIRE_BREATH_ON; + int FLAP_STEP; + float FREQ_BOMB; + float FREQ_BOMB_CHECK; + float FREQ_HORROR_BOOST; + float FREQ_SPIT_CYCLE; + float FREQ_SWITCH_GROUND_MODE; + string GO_TO_SLEEP; + int GROUND_MODE; + int IS_FIRE_BOMB; + int IS_UNHOLY; + string MIN_FLINCH_DAMAGE; + string MY_ANGLES; + string MY_ORG; + string MY_OWNER; + string NEXT_BOMB; + string NEXT_BOMB_SCAN; + string NEXT_CIELING_FIDGET; + string NEXT_FLINCH; + string NEXT_GROUND_MODE; + string NEXT_HORROR_BOOST; + string NEXT_SCAN; + string NEXT_SPIT_CYCLE; + int NO_CIELING_IDLE; + int NO_STUCK_CHECKS; + int NPC_DID_DEATH; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + int NPC_NO_MOVE; + int NPC_PROPELL_SUSPEND; + string PHLAME_BIRD; + string SOUND_ALERT1; + string SOUND_ALERT2; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_CIELING_FIDGET; + string SOUND_DEATH; + string SOUND_FIRE_BREATH; + string SOUND_FLAP1; + string SOUND_FLAP2; + string SOUND_HOVER; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SPIT; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SPIT_FIRE_CYCLE; + string SPIT_MODE; + int SPIT_TARGET; + string TARGET_LIST; + + PhlameBird() + { + ANIM_WALK = "Flying_cycler"; + ANIM_IDLE = "Hover_slow"; + ANIM_ATTACK = "Attack_claw"; + ANIM_CEILING_LAND = "Land_ceiling"; + ANIM_CEILING_DETATCH = "ceiling_detatch"; + ANIM_CEILING_IDLE1 = "Subtle_fidget"; + ANIM_CEILING_IDLE2 = "Preen_fidget"; + ANIM_CEILING_IDLE3 = "Swing_fidget"; + ANIM_FLY = "Flying_cycler"; + ANIM_HOVER = "Hover_slow"; + ANIM_BOOST = "Dive_cycler"; + FREQ_SPIT_CYCLE = 30.0; + ANIM_DEATH = "Hover_slow"; + ANIM_FLINCH1 = "Flinch_big"; + ANIM_FLINCH2 = "Flinch_small"; + AS_CUSTOM_UNSTUCK = 1; + ATTACK_BOMB = "Attack_bomb"; + ANIM_DIVE = "Dive_cycler"; + NPC_GIVE_EXP = 5000; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 180; + DMG_CLAW = 250; + DOT_FIRE = 40; + FREQ_HORROR_BOOST = Random(3.0, 6.0); + DMG_SPIT = 100; + DMG_BOMB = 400; + FREQ_SWITCH_GROUND_MODE = 60.0; + SOUND_FLAP1 = "monsters/bat/flap_big1.wav"; + SOUND_FLAP2 = "monsters/bat/flap_big2.wav"; + SOUND_HOVER = "monsters/bat/flap_big.wav"; + SOUND_ATTACK1 = "monsters/demonwing/demonwing_atk1.wav"; + SOUND_ATTACK2 = "monsters/demonwing/demonwing_atk2.wav"; + SOUND_ATTACK3 = "monsters/demonwing/demonwing_atk3.wav"; + SOUND_ALERT1 = "monsters/demonwing/demonwing_bat1.wav"; + SOUND_ALERT2 = "monsters/demonwing/demonwing_bat2.wav"; + SOUND_ALERT1 = "monsters/demonwing/demonwing_bat1.wav"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN1 = "monsters/demonwing/demonwing_hit1.wav"; + SOUND_PAIN2 = "monsters/demonwing/demonwing_hit2.wav"; + SOUND_DEATH = "monsters/demonwing/demonwing_dead.wav"; + SOUND_SPIT = ""; + Precache(SOUND_DEATH); + SOUND_CIELING_FIDGET = "monsters/demonwing/demonwing_slct.wav"; + FREQ_BOMB = 10.0; + FREQ_BOMB_CHECK = 1.0; + SOUND_FIRE_BREATH = "monsters/goblin/sps_fogfire.wav"; + NO_CIELING_IDLE = 1; + NPC_HACKED_MOVE_SPEED = 400; + } + + void OnSpawn() override + { + SetName("Phlame Transformed"); + SetModel("monsters/demonwing_large.mdl"); + SetHealth(10000); + SetWidth(64); + SetHeight(96); + SetRoam(true); + SetRace("demon"); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetHearingSensitivity(4); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.5); + SetDamageResistance("holy", 1.5); + IS_UNHOLY = 1; + if (!(true)) return; + FLAP_STEP = 0; + ScheduleDelayedEvent(2.0, "final_props"); + if ((NO_CIELING_IDLE)) + { + SetHearingSensitivity(8); + } + SPIT_FIRE_CYCLE = 0; + if ((NO_CIELING_IDLE)) return; + npcatk_suspend_ai(2.0); + CIELING_MODE = 1; + ScheduleDelayedEvent(0.1, "stick_ceiling"); + } + + void final_props() + { + MIN_FLINCH_DAMAGE = GetEntityMaxHealth(GetOwner()); + MIN_FLINCH_DAMAGE *= 0.05; + NPC_DID_DEATH = 1; + } + + void stick_ceiling() + { + SetRoam(false); + NO_STUCK_CHECKS = 1; + NPC_PROPELL_SUSPEND = 1; + CANT_TURN = 1; + NPC_NO_MOVE = 1; + SetGravity(0); + SetHearingSensitivity(4); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 800)); + BFLY_SUSPEND_FLY = 1; + CIELING_MODE = 1; + GROUND_MODE = 0; + PlayAnim("critical", ANIM_CEILING_LAND); + ANIM_IDLE = ANIM_CEILING_IDLE1; + ANIM_WALK = ANIM_CEILING_IDLE1; + ANIM_RUN = ANIM_CEILING_IDLE1; + SetMoveAnim(ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + NEXT_CIELING_FIDGET = GetGameTime(); + NEXT_CIELING_FIDGET += Random(3.0, 6.0); + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (m_hAttackTarget == "unset") + { + if ((CIELING_MODE)) + { + SetGravity(0); + SetVelocity(GetOwner(), Vector3(0, 0, 800)); + if (GetGameTime() > NEXT_CIELING_FIDGET) + { + } + NEXT_CIELING_FIDGET = GetGameTime(); + NEXT_CIELING_FIDGET += Random(3.0, 6.0); + int RND_IDLE = RandomInt(1, 2); + if (RND_IDLE == 1) + { + PlayAnim("once", ANIM_CEILING_IDLE2); + EmitSound(GetOwner(), 0, SOUND_CIELING_FIDGET, 10); + } + if (RND_IDLE == 2) + { + PlayAnim("once", ANIM_CEILING_IDLE3); + } + } + if (!(CIELING_MODE)) + { + if (!(NO_CIELING_IDLE)) + { + } + if (GetGameTime() > GO_TO_SLEEP) + { + } + stick_ceiling(); + } + } + if (!(m_hAttackTarget != "unset")) return; + GO_TO_SLEEP = GetGameTime(); + GO_TO_SLEEP += 10.0; + if ((I_R_FROZEN)) return; + if ((CIELING_MODE)) + { + detatch_from_cieling(); + } + if (GetGameTime() > NEXT_SPIT_CYCLE) + { + if ((false)) + { + } + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + do_spit_cycle(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetGameTime() > NEXT_BOMB_SCAN) + { + if (!(SPIT_MODE)) + { + } + NEXT_BOMB_SCAN = GetGameTime(); + NEXT_BOMB_SCAN += FREQ_BOMB_SCAN; + string BOMB_POINT = GetEntityOrigin(GetOwner()); + BOMB_POINT = "z"; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + if (MY_Z > (BOMB_POINT).z) + { + MY_Z -= (BOMB_POINT).z; + if (MY_Z < 100) + { + } + int EXIT_SUB = 1; + } + else + { + string BOMB_Z = (BOMB_POINT).z; + BOMB_Z -= MY_Z; + if (MY_Z < 100) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + BOMB_TARGET = FindEntitiesInSphere("enemy", 128); + if (BOMB_TARGET != "none") + { + } + BOMB_TARGET = GetToken(BOMB_TARGET, 0, ";"); + if (GetGameTime() > NEXT_BOMB) + { + } + NEXT_BOMB = GetGameTime(); + NEXT_BOMB += FREQ_BOMB; + PlayAnim("critical", ATTACK_BOMB); + } + if (!(GetEntityRange(m_hAttackTarget) > ATTACK_RANGE)) return; + if ((SPIT_MODE)) return; + if (!(GetGameTime() > NEXT_HORROR_BOOST)) return; + NEXT_HORROR_BOOST = GetGameTime(); + NEXT_HORROR_BOOST += FREQ_HORROR_BOOST; + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + EmitSound(GetOwner(), 0, SOUND_HOVER, 10); + PlayAnim("once", ANIM_BOOST); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 0)); + } + + void detatch_from_cieling() + { + NEXT_HORROR_BOOST = GetGameTime(); + NEXT_HORROR_BOOST += 6.0; + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + SetHearingSensitivity(8); + CANT_TURN = 0; + NPC_NO_MOVE = 0; + SetMoveDest(m_hAttackTarget); + SetGravity(0); + ScheduleDelayedEvent(3.0, "frame_detatch_done"); + npcatk_suspend_ai(1.0); + fly_mode(); + PlayAnim("critical", ANIM_CEILING_DETATCH); + // PlayRandomSound from: SOUND_ALERT1, SOUND_ALERT2 + array sounds = {SOUND_ALERT1, SOUND_ALERT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + CIELING_MODE = 0; + NEXT_GROUND_MODE = GetGameTime(); + NEXT_GROUND_MODE += FREQ_SWITCH_GROUND_MODE; + } + + void frame_detatch_done() + { + BFLY_SUSPEND_FLY = 0; + NO_STUCK_CHECKS = 0; + NPC_PROPELL_SUSPEND = 0; + SetRoam(true); + } + + void fly_mode() + { + SetGravity(0); + ANIM_IDLE = ANIM_HOVER; + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + SetMoveAnim(ANIM_FLY); + SetIdleAnim(ANIM_HOVER); + } + + void set_no_ceiling_idle() + { + NO_CIELING_IDLE = 1; + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetGameTime() > NEXT_FLINCH) + { + if (param1 > MIN_FLINCH_DAMAGE) + { + } + NEXT_FLINCH = GetGameTime(); + NEXT_FLINCH += Random(10.0, 20.0); + npcatk_suspend_ai(1.0); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + if (RandomInt(1, 2) == 1) + { + PlayAnim("critical", ANIM_FLINCH1); + } + else + { + PlayAnim("critical", ANIM_FLINCH2); + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -300, 0)); + int EXIT_SUB = 1; + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((EXIT_SUB)) return; + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 5); + } + + void frame_flap() + { + FLAP_STEP += 1; + if (FLAP_STEP == 1) + { + EmitSound(GetOwner(), 0, SOUND_FLAP1, 10); + } + else + { + EmitSound(GetOwner(), 0, SOUND_FLAP2, 10); + FLAP_STEP = 0; + } + } + + void frame_attack_claw() + { + if ((SPIT_MODE)) return; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + CLAW_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_CLAW, 0.9, "slash"); + } + + void game_dodamage() + { + if ((CLAW_ATTACK)) + { + if (RandomInt(1, 4) == 1) + { + } + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + } + CLAW_ATTACK = 0; + if ((FIRE_BOMB_ATTACK)) + { + if ((param1)) + { + } + if (GetRelationship(param2) == "enemy") + { + } + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = FIRE_BOMB_POS; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 200))); + } + } + + void npc_stuck() + { + if (!(SUSPEND_AI)) + { + as_npcatk_suspend_ai(AS_WIGGLE_DURATION); + } + NPC_FORCED_MOVEDEST = 1; + string MOVE_DEST = MY_ORG; + AS_UNSTUCK_ANG += 36; + if (AS_UNSTUCK_ANG > 359) + { + AS_UNSTUCK_ANG -= 359; + } + MOVE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, AS_UNSTUCK_ANG, 0), Vector3(0, 1000, 0)); + SetMoveDest(MOVE_DEST); + PlayAnim("once", ANIM_RUN); + float RND_UD = Random(-200, 200); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, RND_UD)); + } + + void do_spit_cycle() + { + npcatk_suspend_ai(); + NPC_PROPELL_SUSPEND = 1; + ANIM_WALK = ANIM_HOVER; + ANIM_RUN = ANIM_HOVER; + ANIM_IDLE = ANIM_HOVER; + SetMoveAnim(ANIM_HOVER); + SetIdleAnim(ANIM_HOVER); + SPIT_FIRE_CYCLE += 1; + if (SPIT_FIRE_CYCLE == 1) + { + SPIT_MODE = 1; + do_spit_cycle_loop(); + ScheduleDelayedEvent(5.0, "end_spit_cycle"); + } + else + { + SPIT_MODE = 1; + do_fire_breath_loop(); + FIRE_BREATH_ON = 1; + ClientEvent("new", "all", "phlames/phlame_bird_cl", GetEntityIndex(GetOwner()), 10.0); + FB_CL_SCRIPT_ID = "game.script.last_sent_id"; + EmitSound(GetOwner(), 0, SOUND_FIRE_BREATH, 10); + BREATH_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + fire_breath_loop(); + ScheduleDelayedEvent(10.0, "end_fire_breath"); + SPIT_FIRE_CYCLE = 0; + } + } + + void do_spit_cycle_loop() + { + if (!(SPIT_MODE)) return; + ScheduleDelayedEvent(2.0, "do_spit_cycle_loop"); + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + TARGET_LIST = FindEntitiesInSphere("enemy", 2048); + if (!(TARGET_LIST != "none")) return; + ScrambleTokens(TARGET_LIST, ";"); + SPIT_TARGET = 0; + for (int i = 0; i < GetTokenCount(TARGET_LIST, ";"); i++) + { + pick_target(); + } + if (!(IsEntityAlive(SPIT_TARGET))) return; + SetMoveDest(SPIT_TARGET); + EmitSound(GetOwner(), 0, SOUND_SPIT, 10); + PlayAnim("once", ANIM_ATTACK); + TossProjectile("proj_fire_bomb", /* TODO: $relpos */ $relpos(0, 0, -16), SPIT_TARGET, 300, DMG_BOMB, 1, "none"); + CallExternal("ent_lastprojectile", "ext_lighten", 0.0); + } + + void pick_target() + { + if ((IsEntityAlive(SPIT_TARGET))) return; + string CUR_TARG = GetToken(TARGET_LIST, i, ";"); + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = GetEntityOrigin(CUR_TARG); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + SPIT_TARGET = CUR_TARG; + } + + void end_spit_cycle() + { + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + NPC_PROPELL_SUSPEND = 0; + SPIT_MODE = 0; + ANIM_IDLE = ANIM_HOVER; + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + SetMoveAnim(ANIM_FLY); + SetIdleAnim(ANIM_HOVER); + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + NEXT_BOMB_SCAN = GetGameTime(); + NEXT_BOMB_SCAN += FREQ_BOMB_SCAN; + center_dash(); + } + + void game_dynamically_created() + { + if (param2 == "phlame") + { + PHLAME_BIRD = 1; + } + MY_OWNER = param1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((FIRE_BREATH_ON)) + { + ClientEvent("update", "all", FB_CL_SCRIPT_ID, "end_fx"); + } + if (!(PHLAME_BIRD)) return; + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + SetAnimFrameRate(0); + SetAnimMoveSpeed(0); + SetMoveSpeed(0); + CallExternal(MY_OWNER, "transform_return", GetEntityOrigin(GetOwner())); + DeleteEntity(GetOwner()); + } + + void frame_attack_bomb() + { + TossProjectile("proj_fire_bomb", /* TODO: $relpos */ $relpos(0, 0, -16), BOMB_TARGET, 300, DMG_BOMB, 1, "none"); + } + + void fire_breath_loop() + { + if (!(FIRE_BREATH_ON)) return; + ScheduleDelayedEvent(0.1, "fire_breath_loop"); + BREATH_YAW += 4; + if (BREATH_YAW > 359.99) + { + BREATH_YAW -= 359.99; + } + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, BREATH_YAW, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_POS); + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + if (!(GetGameTime() > NEXT_SCAN)) return; + NEXT_SCAN = GetGameTime(); + NEXT_SCAN += 1.0; + BREATH_TARGS = FindEntitiesInSphere("enemy", 512); + if (!(BREATH_TARGS != "none")) return; + MY_ORG = GetEntityOrigin(GetOwner()); + MY_ANGLES = GetEntityAngles(GetOwner()); + for (int i = 0; i < GetTokenCount(BREATH_TARGS, ";"); i++) + { + breath_affect_targets(); + } + } + + void breath_affect_targets() + { + string CUR_TARG = GetToken(BREATH_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FIRE); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, 1000, 110)); + } + + void end_fire_breath() + { + FIRE_BREATH_ON = 0; + NPC_PROPELL_SUSPEND = 0; + SPIT_MODE = 0; + ANIM_IDLE = ANIM_HOVER; + ANIM_WALK = ANIM_FLY; + ANIM_RUN = ANIM_FLY; + SetMoveAnim(ANIM_FLY); + SetIdleAnim(ANIM_HOVER); + NEXT_SPIT_CYCLE = GetGameTime(); + NEXT_SPIT_CYCLE += FREQ_SPIT_CYCLE; + PlayAnim("once", "break"); + ScheduleDelayedEvent(1.0, "npcatk_resume_ai"); + center_dash(); + } + + void center_dash() + { + SetRoam(false); + PlayAnim("critical", ANIM_DIVE); + string CENTER_POINT = GetEntityProperty(MY_OWNER, "scriptvar"); + SetMoveDest(CENTER_POINT); + LogDebug("center_dash CENTER_POINT"); + EmitSound(GetOwner(), 0, SOUND_FLAP2, 10); + ScheduleDelayedEvent(0.1, "center_dash_boost"); + ScheduleDelayedEvent(1.5, "center_dash_stop"); + } + + void center_dash_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 1000, 300)); + } + + void center_dash_stop() + { + SetRoam(true); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, 0))); + } + + void ext_fire_bomb() + { + FIRE_BOMB_ATTACK = 1; + FIRE_BOMB_POS = param1; + IS_FIRE_BOMB = 1; + XDoDamage(FIRE_BOMB_POS, 250, DMG_BOMB, 0.1, GetOwner(), GetOwner(), "none", "blunt"); + ScheduleDelayedEvent(0.1, "fire_bomb_reset"); + } + + void fire_bomb_reset() + { + FIRE_BOMB_ATTACK = 0; + } + + void frame_flap_panic() + { + EmitSound(GetOwner(), 0, SOUND_HOVER, 10); + ScheduleDelayedEvent(0.1, "frame_flap_panic2"); + } + + void frame_flap_panic2() + { + EmitSound(GetOwner(), 0, SOUND_HOVER, 10); + } + +} + +} diff --git a/scripts/angelscript/phlames/phlame_bird_cl.as b/scripts/angelscript/phlames/phlame_bird_cl.as new file mode 100644 index 00000000..9a2ea14b --- /dev/null +++ b/scripts/angelscript/phlames/phlame_bird_cl.as @@ -0,0 +1,78 @@ +#pragma context server + +namespace MS +{ + +class PhlameBirdCl : CGameScript +{ + string CLOUD_YAW; + int FX_ACTIVE; + string FX_DURATION; + string FX_OWNER; + + void client_activate() + { + FX_OWNER = param1; + FX_DURATION = param2; + FX_ACTIVE = 1; + fire_breath_loop(); + FX_DURATION("end_fx"); + } + + void fire_breath_loop() + { + if (!(FX_ACTIVE)) return; + ScheduleDelayedEvent(0.2, "fire_breath_loop"); + CLOUD_YAW = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + ClientEffect("tempent", "sprite", "explode1.spr", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "setup_fire_cloud", "update_fire_cloud"); + ClientEffect("tempent", "sprite", "explode1.spr", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "setup_fire_cloud", "update_fire_cloud"); + ClientEffect("tempent", "sprite", "explode1.spr", /* TODO: $getcl */ $getcl(FX_OWNER, "attachment0"), "setup_fire_cloud", "update_fire_cloud"); + } + + void end_fx() + { + FX_ACTIVE = 0; + ScheduleDelayedEvent(1.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void update_fire_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (!(CUR_SCALE < 2)) return; + CUR_SCALE += 0.05; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + + void setup_fire_cloud() + { + float START_SCALE = Random(0.25, 0.5); + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", START_SCALE); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + if (RandomInt(1, 3) == 1) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 0)); + } + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", START_SCALE); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-50, -100); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(20, CLOUD_YAW, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/phlames/phlame_cl.as b/scripts/angelscript/phlames/phlame_cl.as new file mode 100644 index 00000000..1aa8d319 --- /dev/null +++ b/scripts/angelscript/phlames/phlame_cl.as @@ -0,0 +1,410 @@ +#pragma context client + +namespace MS +{ + +class PhlameCl : CGameScript +{ + string ATTACH_EYE; + string ATTACH_HAND; + string ATTACH_STAFF; + string CLOUD_YAW; + string CONTACT_SPRITE; + string EYEBEAM_ON; + string EYE_POS; + string EYE_SPRITE; + string FIREBREATH_ON; + int FUNNEL_ON; + int FUNNEL_SPRITE_START_DIST; + int FX_ACTIVE; + string FX_DELAY_REMOVE; + string FX_OWNER; + int LIGHT_B; + int LIGHT_G; + int LIGHT_R; + int ROT_POINT; + string SKEL_LIGHT_ID; + string STAFF_POS; + string STAFF_SPRITE; + string TRANSFORM_CENTER; + + PhlameCl() + { + ATTACH_HAND = "attachment0"; + ATTACH_STAFF = "attachment1"; + ATTACH_EYE = "attachment2"; + EYE_SPRITE = "red_aura_8bit.spr"; + STAFF_SPRITE = "firemagic_8bit.spr"; + CONTACT_SPRITE = "3dmflaora.spr"; + FUNNEL_SPRITE_START_DIST = 250; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + STAFF_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"); + EYE_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "attachment2"); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(10.0); + if ((FX_ACTIVE)) + { + } + ClientEffect("tempent", "sprite", STAFF_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"), "setup_staff_sprite", "update_staff_sprite"); + } + + void client_activate() + { + SetCallback("render", "enable"); + FX_OWNER = param1; + EYEBEAM_ON = param2; + FIREBREATH_ON = param3; + if ((EYEBEAM_ON)) + { + eye_beam_on(); + } + if ((FIREBREATH_ON)) + { + fire_breath_on(); + } + LIGHT_R = 128; + LIGHT_G = 16; + LIGHT_B = 0; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(FX_OWNER, "origin"), 128, Vector3(LIGHT_R, LIGHT_G, LIGHT_B), 5.0); + SKEL_LIGHT_ID = "game.script.last_light_id"; + FX_ACTIVE = 1; + ScheduleDelayedEvent(0.1, "start_staff_sprite"); + ScheduleDelayedEvent(30.0, "end_fx"); + } + + void start_staff_sprite() + { + ClientEffect("tempent", "sprite", STAFF_SPRITE, /* TODO: $getcl */ $getcl(FX_OWNER, "attachment1"), "setup_staff_sprite", "update_staff_sprite"); + } + + void end_fx() + { + if ((FX_DELAY_REMOVE)) + { + FX_DELAY_REMOVE = 0; + ScheduleDelayedEvent(10.0, "end_fx"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + FX_ACTIVE = 0; + ScheduleDelayedEvent(2.0, "remove_fx"); + } + + void remove_fx() + { + RemoveScript(); + } + + void game_prerender() + { + if (!(FX_ACTIVE)) return; + string L_POS = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + int INT_LIGHT_B = int(LIGHT_B); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, 128, Vector3(LIGHT_R, LIGHT_G, INT_LIGHT_B), 1.0); + LIGHT_R += 1; + LIGHT_G += 1; + LIGHT_B += 0.25; + if (LIGHT_R > 255) + { + LIGHT_R = 255; + } + if (LIGHT_G > 128) + { + LIGHT_R = 128; + LIGHT_G = 16; + LIGHT_B = 0; + } + } + + void eye_beam_on() + { + if (!(FX_ACTIVE)) return; + EYEBEAM_ON = 1; + string ATTACH_EYE_ORG = EYE_POS; + ClientEffect("tempent", "sprite", EYE_SPRITE, ATTACH_EYE_ORG, "setup_eye_sprite", "update_eye_sprite"); + } + + void eye_beam_off() + { + EYEBEAM_ON = 0; + } + + void update_eye_sprite() + { + string ATTACH_EYE_ORG = EYE_POS; + ClientEffect("tempent", "set_current_prop", "origin", ATTACH_EYE_ORG); + if ((EYEBEAM_ON)) + { + string CUR_SIZE = "game.tempent.fuser1"; + CUR_SIZE += 0.01; + if (CUR_SIZE < 0.20) + { + } + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + if (!(EYEBEAM_ON)) + { + string CUR_SIZE = "game.tempent.fuser1"; + CUR_SIZE -= 0.01; + if (CUR_SIZE > 0.01) + { + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + } + } + + void eye_beam_contact() + { + string SPAWN_POS = param1; + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPAWN_POS, "setup_beam_contact"); + } + + void fire_breath_on() + { + if (!(FX_ACTIVE)) return; + FIREBREATH_ON = 1; + fire_breath_loop(); + } + + void fire_breath_off() + { + FIREBREATH_ON = 0; + } + + void fire_breath_loop() + { + if (!(FIREBREATH_ON)) return; + ScheduleDelayedEvent(0.2, "fire_breath_loop"); + CLOUD_YAW = /* TODO: $getcl */ $getcl(FX_OWNER, "angles.yaw"); + ClientEffect("tempent", "sprite", "explode1.spr", STAFF_POS, "setup_fire_cloud", "update_fire_cloud"); + ClientEffect("tempent", "sprite", "explode1.spr", STAFF_POS, "setup_fire_cloud", "update_fire_cloud"); + ClientEffect("tempent", "sprite", "explode1.spr", STAFF_POS, "setup_fire_cloud", "update_fire_cloud"); + } + + void repulse_attack() + { + string FX_CENTER = /* TODO: $getcl */ $getcl(FX_OWNER, "origin"); + ClientEffect("light", "new", FX_CENTER, 768, Vector3(255, 128, 64), 1.0); + ClientEffect("tempent", "sprite", "weapons/projectiles.mdl", FX_CENTER, "setup_repulse_burst", "update_repulse_burst"); + EmitSound3D("magic/boom.wav", 10, FX_CENTER); + } + + void do_transform() + { + FX_DELAY_REMOVE = 1; + TRANSFORM_CENTER = param1; + FUNNEL_ON = 1; + transform_funnel_loop(); + } + + void transform_funnel_loop() + { + if (!(FUNNEL_ON)) return; + ScheduleDelayedEvent(0.2, "transform_funnel_loop"); + ROT_POINT = 0; + for (int i = 0; i < 12; i++) + { + transform_funnel_make_sprite(); + } + } + + void transform_funnel_make_sprite() + { + string SPR_POS = TRANSFORM_CENTER; + SPR_POS += /* TODO: $relpos */ $relpos(Vector3(0, ROT_POINT, 0), Vector3(0, FUNNEL_SPRITE_START_DIST, 0)); + ClientEffect("tempent", "sprite", "calflame.spr", SPR_POS, "setup_funnel_sprite", "update_funnel_sprite"); + ROT_POINT += 30; + } + + void transform_finalize() + { + FX_DELAY_REMOVE = 0; + FUNNEL_ON = 0; + string BIRD_POS = param1; + ClientEffect("tempent", "sprite", "c-tele1.spr", BIRD_POS, "setup_bird_sprite"); + EmitSound3D("monsters/demonwing/demonwing_huge.wav", 10, BIRD_POS); + } + + void transform_return() + { + FX_DELAY_REMOVE = 0; + FUNNEL_ON = 0; + string SPRITE_POS1 = param1; + string SPRITE_POS2 = param2; + ClientEffect("tempent", "sprite", "c-tele1.spr", SPRITE_POS1, "setup_bird_sprite"); + ClientEffect("tempent", "sprite", "c-tele1.spr", SPRITE_POS2, "setup_bird_sprite"); + EmitSound3D("magic/spawn_loud.wav", 10, SPRITE_POS2); + } + + void setup_bird_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(200, 0, 0)); + ClientEffect("tempent", "set_current_prop", "framerate", 20); + ClientEffect("tempent", "set_current_prop", "frames", 25); + ClientEffect("tempent", "set_current_prop", "scale", 6.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + + void update_funnel_sprite() + { + string CUR_ROT = "game.tempent.fuser1"; + string CUR_DIST = "game.tempent.fuser2"; + CUR_ROT += 1; + CUR_DIST -= 2; + if (CUR_ROT > 359.99) + { + int CUR_ROT = 0; + } + if (CUR_DIST <= 5) + { + int CUR_DIST = 5; + } + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_ROT); + ClientEffect("tempent", "set_current_prop", "fuser2", CUR_DIST); + string CUR_ORG = "game.tempent.origin"; + string CUR_Z = (CUR_ORG).z; + string NEW_ORG = TRANSFORM_CENTER; + NEW_ORG = "z"; + NEW_ORG += /* TODO: $relpos */ $relpos(Vector3(0, CUR_ROT, 0), Vector3(0, CUR_DIST, 0)); + ClientEffect("tempent", "set_current_prop", "origin", NEW_ORG); + } + + void setup_funnel_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 16); + ClientEffect("tempent", "set_current_prop", "scale", 1.5); + ClientEffect("tempent", "set_current_prop", "gravity", -2.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", ROT_POINT); + ClientEffect("tempent", "set_current_prop", "fuser2", FUNNEL_SPRITE_START_DIST); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void update_repulse_burst() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (!(CUR_SCALE < 30)) return; + CUR_SCALE += 0.5; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + + void setup_repulse_burst() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.5); + ClientEffect("tempent", "set_current_prop", "body", 51); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + } + + void update_staff_sprite() + { + string ATTACH_STAFF_ORG = STAFF_POS; + ClientEffect("tempent", "set_current_prop", "origin", ATTACH_STAFF_ORG); + } + + void setup_staff_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 8); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void setup_eye_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 20); + ClientEffect("tempent", "set_current_prop", "frames", 8); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + ClientEffect("tempent", "set_current_prop", "fuser2", 255); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void setup_beam_contact() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(128, 0, 255)); + ClientEffect("tempent", "set_current_prop", "scale", Random(1.0, 3.0)); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + float RND_ROT = Random(0, 359.99); + float RND_FWD = Random(0, 100.0); + float RND_UD = Random(0, 600); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, RND_ROT, 0), Vector3(0, RND_FWD, RND_UD))); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + + void update_fire_cloud() + { + string CUR_SCALE = "game.tempent.fuser1"; + if (!(CUR_SCALE < 2)) return; + CUR_SCALE += 0.05; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SCALE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SCALE); + } + + void setup_fire_cloud() + { + float START_SCALE = Random(0.25, 0.5); + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", START_SCALE); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 0)); + if (RandomInt(1, 3) == 1) + { + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 0)); + } + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fuser1", START_SCALE); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-50, -100); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(Vector3(20, CLOUD_YAW, 0), Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + +} + +} diff --git a/scripts/angelscript/phobia/betor_ally.as b/scripts/angelscript/phobia/betor_ally.as new file mode 100644 index 00000000..87df4f40 --- /dev/null +++ b/scripts/angelscript/phobia/betor_ally.as @@ -0,0 +1,236 @@ +#pragma context server + +#include "monsters/base_battle_ally.as" +#include "monsters/bandit_elite_mace.as" + +namespace MS +{ + +class BetorAlly : CGameScript +{ + string AI_NO_TARGET_STRING; + int ALLY_FOLLOW_ON; + int ALLY_JUMP_THRESHOLD; + string ANIM_ALLY_JUMP; + string ANIM_ATTACK; + float ATTACK1_DAMAGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + string BANDIT_TYPE; + int HOSTILE_MODE; + int MADE_DEAL; + int MOVE_RANGE; + string MY_SKILL; + string NO_STUCK_CHECKS; + int NPC_BATTLE_ALLY; + int NPC_NO_PLAYER_DMG; + string ORIG_ATTACK; + int OVERRIDE_BANDIT_SPAWN; + int REWARD_MODE; + string SOUND_ALLY_JUMP; + int TC_AVG_DMG_PTS; + string TC_HALF_AVG_DMG_PTS; + int TC_QUAL_PLAYERS; + int USER_QUALIFIES; + int WEAPON; + + BetorAlly() + { + MY_SKILL = "bluntarms"; + WEAPON = 5; + OVERRIDE_BANDIT_SPAWN = 1; + AI_NO_TARGET_STRING = �NONE�; + ANIM_ALLY_JUMP = "long_jump"; + SOUND_ALLY_JUMP = "player/shout1.wav"; + ALLY_JUMP_THRESHOLD = 150; + } + + void game_precache() + { + Precache("monsters/bandit_elite"); + } + + void OnSpawn() override + { + BANDIT_TYPE = "mace"; + SetName("|Betor the Strong"); + SetName("bandit_betor"); + SetMonsterClip(0); + SetModel("npc/rogue_1337.mdl"); + SetGold(RandomInt(30, 40)); + SetWidth(32); + SetHeight(92); + SetRace("human"); + SetDamageResistance("all", 0.6); + SetHearingSensitivity(10); + SetRoam(false); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(0.1, "custom_bandit"); + } + + void custom_bandit() + { + SetHealth(1750); + MOVE_RANGE = 80; + ATTACK_RANGE = 100; + ATTACK1_DAMAGE = Random(30, 60); + ATTACK_PERCENTAGE = 0.85; + ANIM_ATTACK = "battleaxe_swing1_R"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 2); + BANDIT_TYPE = "mace"; + } + + void bandit_ally_start_follow() + { + PlayAnim("once", "break"); + ALLY_FOLLOW_ON = 1; + MADE_DEAL = 1; + } + + void bandit_ally_go_hostile() + { + HOSTILE_MODE = 1; + NPC_NO_PLAYER_DMG = 0; + NPC_BATTLE_ALLY = 0; + ALLY_FOLLOW_ON = 0; + SetRace("rogue"); + SetRoam(true); + if (BANDIT_TYPE != "bow") + { + NO_STUCK_CHECKS = 0; + } + } + + void bandit_ally_drinkup() + { + PlayAnim("critical", "aim_punch1"); + string MY_HP = GetEntityHealth(GetOwner()); + string MY_MAXHP = GetEntityMaxHealth(GetOwner()); + if (MY_HP < MY_MAXHP) + { + string HEAL_AMT = MY_MAXHP; + HEAL_AMT -= MY_HP; + HealEntity(GetOwner(), HEAL_AMT); + } + string OUT_TITLE = GetEntityName(GetOwner()); + OUT_TITLE += " has quaffed a potion of fire resistance."; + SendInfoMsg("all", OUT_TITLE + " "); + SetDamageResistance("fire", 0.25); + SetDamageResistance("all", 0.4); + EmitSound(GetOwner(), 0, "items/drink.wav", 10); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 64, 2, 2); + } + + void bandit_ally_boss_dead() + { + npcatk_suspend_ai(); + npcatk_suspend_movement("deep_idle"); + SetMoveDest("none"); + check_qualify(); + ALLY_FOLLOW_ON = 0; + REWARD_MODE = 1; + SetMenuAutoOpen(1); + } + + void check_qualify() + { + TC_QUAL_PLAYERS = 0; + GetAllPlayers(TC_QUAL_PLAYERS); + TC_AVG_DMG_PTS = 0; + for (int i = 0; i < GetTokenCount(TC_QUAL_PLAYERS, ";"); i++) + { + tc_get_averages(); + } + TC_AVG_DMG_PTS /= GetPlayerCount(); + TC_HALF_AVG_DMG_PTS = TC_AVG_DMG_PTS; + TC_HALF_AVG_DMG_PTS *= 0.5; + } + + void tc_get_averages() + { + string CUR_PLAYER = GetToken(TC_QUAL_PLAYERS, i, ";"); + TC_AVG_DMG_PTS += GetEntityProperty(CUR_PLAYER, "scriptvar"); + } + + void say_reward() + { + string USER_PTS = GetEntityProperty(param1, "scriptvar"); + USER_QUALIFIES = 0; + if (USER_PTS >= TC_HALF_AVG_DMG_PTS) + { + USER_QUALIFIES = 1; + } + if (!(USER_QUALIFIES)) + { + PlayAnim("critical", "look_idle"); + SayText("Judging by your performance out there , or rather the lack there of , " + I + "don t think you re ready for what " + I + " could teach you."); + } + if (!(USER_QUALIFIES)) return; + string USER_STEAM = GetPlayerAuthId(param1); + USER_STEAM += GetEntityProperty(param1, "slot"); + if ((G_REWARD_LIST).findFirst(USER_STEAM) >= 0) + { + PlayAnim("critical", "look_idle"); + SayText("Sorry , the deal was you could train once from one of us. Thanks for the assist though. We should be fine from here."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string RALION_ID = FindEntityByName("bandit_ralion"); + if (!(IsEntityAlive(RALION_ID))) + { + PlayAnim("critical", "look_idle"); + SayText("Ralion maybe dead , but " + I + "ll stick to his deal... I ll show you what " + I + " know."); + } + else + { + PlayAnim("critical", "look_idle"); + SayText("Alright... " + I + " ll show you what I know."); + } + int XP_GAIN = 20000; + string PLR_ADJ = GetPlayerCount(); + PLR_ADJ -= 1; + PLR_ADJ *= 0.25; + PLR_ADJ += 1; + XP_GAIN *= PLR_ADJ; + GiveExp(param1, MY_SKILL, int(XP_GAIN)); + SendColoredMessage(param1, "* " + int(XP_GAIN) + XP + "Awarded " + MY_SKILL); + if (G_REWARD_LIST.length() > 0) G_REWARD_LIST += ";"; + G_REWARD_LIST += USER_STEAM; + string OUT_MSG = "You recieve "; + OUT_MSG += MY_SKILL; + OUT_MSG += " from "; + OUT_MSG += GetEntityName(GetOwner()); + SendInfoMsg(param1, "Training Recieved " + OUT_MSG); + } + + void game_menu_getoptions() + { + if ((HOSTILE_MODE)) return; + if (!(MADE_DEAL)) return; + if ((REWARD_MODE)) + { + SendInfoMsg(param1, "Training with bandits You may only train with one bandit, so choose wisely."); + string reg.mitem.title = "Bluntarms Training..."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_reward"; + } + } + + void bandits_remove() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void bandit_ally_lights() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(10.0, "bandit_ally_lights"); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 64, 0), 64, 9.9); + } + +} + +} diff --git a/scripts/angelscript/phobia/game_master.as b/scripts/angelscript/phobia/game_master.as new file mode 100644 index 00000000..b86a878d --- /dev/null +++ b/scripts/angelscript/phobia/game_master.as @@ -0,0 +1,34 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + void gm_phobia_tele_bandits() + { + string BANDIT_ID = FindEntityByName("bandit_ralion"); + if ((IsEntityAlive(BANDIT_ID))) + { + SetEntityOrigin(BANDIT_ID, Vector3(328, 2432, -272)); + } + string BANDIT_ID = FindEntityByName("bandit_betor"); + if ((IsEntityAlive(BANDIT_ID))) + { + SetEntityOrigin(BANDIT_ID, Vector3(448, 2560, -272)); + } + string BANDIT_ID = FindEntityByName("bandit_skelr"); + if ((IsEntityAlive(BANDIT_ID))) + { + SetEntityOrigin(BANDIT_ID, Vector3(208, 2560, -272)); + } + } + + void gm_phobia_bandit_lights() + { + CallExternal("all", "bandit_ally_lights"); + } + +} + +} diff --git a/scripts/angelscript/phobia/ralion_ally.as b/scripts/angelscript/phobia/ralion_ally.as new file mode 100644 index 00000000..ba0230c6 --- /dev/null +++ b/scripts/angelscript/phobia/ralion_ally.as @@ -0,0 +1,394 @@ +#pragma context server + +#include "monsters/base_battle_ally.as" +#include "monsters/bandit_elite_archer.as" +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class RalionAlly : CGameScript +{ + string AI_NO_TARGET_STRING; + int ALLY_FOLLOW_ON; + int ALLY_JUMP_THRESHOLD; + string ANIM_ALLY_JUMP; + string ANIM_ATTACK; + string ANIM_IDLE; + int ATTACK_COF; + string ATTACK_RANGE; + int ATTACK_SPEED; + string BANDIT_TYPE; + string CHAT_CURRENT_SPEAKER; + int CHAT_MOVE_MOUTH; + int CHAT_TEMP_NO_AUTO_FACE; + int DROPS_CONTAINER; + int HOSTILE_MODE; + int MADE_DEAL; + string MOVE_RANGE; + string MY_SKILL; + int NO_STUCK_CHECKS; + int NPC_BATTLE_ALLY; + string NPC_HBAR_ADJ; + int NPC_NO_PLAYER_DMG; + int NPC_PROXACT_DELAY; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_FOV; + int NPC_PROXACT_IFSEEN; + int NPC_PROXACT_RANGE; + int NPC_PROX_ACTIVATE; + int OVERRIDE_BANDIT_SPAWN; + int REWARD_MODE; + string SOUND_ALLY_JUMP; + int TC_AVG_DMG_PTS; + string TC_HALF_AVG_DMG_PTS; + int TC_QUAL_PLAYERS; + int TOO_CLOSE; + int USER_QUALIFIES; + int WEAPON; + + RalionAlly() + { + MY_SKILL = "archery"; + NPC_HBAR_ADJ = Vector3(0, 0, 32); + WEAPON = 0; + OVERRIDE_BANDIT_SPAWN = 1; + AI_NO_TARGET_STRING = �NONE�; + ANIM_ALLY_JUMP = "long_jump"; + SOUND_ALLY_JUMP = "player/shout1.wav"; + ALLY_JUMP_THRESHOLD = 150; + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 512; + NPC_PROXACT_EVENT = "do_intro"; + NPC_PROXACT_DELAY = 0; + NPC_PROXACT_IFSEEN = 0; + NPC_PROXACT_FOV = 0; + CHAT_MOVE_MOUTH = 0; + } + + void game_precache() + { + Precache("monsters/bandit_elite"); + } + + void OnSpawn() override + { + BANDIT_TYPE = "bow"; + SetName("|Ralion"); + SetName("bandit_ralion"); + SetMonsterClip(0); + SetModel("npc/rogue_1337.mdl"); + SetProp(GetOwner(), "scale", 1.5); + SetGold(RandomInt(30, 40)); + SetWidth(32); + SetHeight(92); + SetRace("human"); + SetDamageResistance("all", 0.6); + SetHearingSensitivity(10); + SetRoam(false); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetMenuAutoOpen(1); + ScheduleDelayedEvent(0.1, "custom_bowey"); + } + + void custom_bowey() + { + SetHealth(800); + ATTACK_SPEED = 1200; + MOVE_RANGE = ATTACK_SPEED; + ATTACK_RANGE = ATTACK_SPEED; + ATTACK_COF = 0; + ANIM_ATTACK = "shootbow"; + SetModelBody(1, 5); + TOO_CLOSE = 0; + DROPS_CONTAINER = 1; + NO_STUCK_CHECKS = 1; + BANDIT_TYPE = "bow"; + ScheduleDelayedEvent(300.0, "bandit_remove_delay"); + } + + void bandit_remove_delay() + { + if ((HOSTILE_MODE)) return; + if ((MADE_DEAL)) return; + CallExternal("all", "bandits_remove"); + } + + void bandits_remove() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void game_menu_getoptions() + { + if ((HOSTILE_MODE)) return; + if ((REWARD_MODE)) + { + if ((MADE_DEAL)) + { + } + SendInfoMsg(param1, "Training with bandits You may only train with one bandit, so choose wisely."); + string reg.mitem.title = "Bow Training..."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_reward"; + } + if (!(MADE_DEAL)) + { + SetGlobalVar("G_REWARD_LIST", ""); + string reg.mitem.title = "Deal."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_deal"; + string reg.mitem.title = "No Deal."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_no_deal"; + } + if (!(G_DEVELOPER_MODE)) return; + if (!(ALLY_FOLLOW_ON)) + { + string reg.mitem.title = "Dev:Follow."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "bandit_ally_start_follow"; + } + else + { + string reg.mitem.title = "Dev:Stay here."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "stop_follow"; + } + string reg.mitem.title = "Dev:Go hostile."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "bandit_ally_go_hostile"; + } + + void bandit_ally_start_follow() + { + PlayAnim("once", "break"); + ALLY_FOLLOW_ON = 1; + } + + void stop_follow() + { + SayText("Stopping..."); + PlayAnim("once", "break"); + ALLY_FOLLOW_ON = 0; + } + + void bandit_ally_go_hostile() + { + HOSTILE_MODE = 1; + NPC_NO_PLAYER_DMG = 0; + NPC_BATTLE_ALLY = 0; + ALLY_FOLLOW_ON = 0; + SetRace("rogue"); + SetRoam(true); + if (BANDIT_TYPE != "bow") + { + NO_STUCK_CHECKS = 0; + } + SetMenuAutoOpen(0); + } + + void do_intro() + { + SetMoveDest(NPC_PROXACT_PLAYERID); + CHAT_CURRENT_SPEAKER = NPC_PROXACT_PLAYERID; + EmitSound(GetOwner(), 0, "voices\phobia\ralion01.wav", 10); + npcatk_resume_ai(); + CHAT_TEMP_NO_AUTO_FACE = 1; + chat_now("Woah there! Hold a sec! Truce! Truce!", 2.0, "none", "do_intro2", "add_to_que"); + } + + void do_intro2() + { + CHAT_TEMP_NO_AUTO_FACE = 0; + chat_now("I saw you tear through those orcs, and our would-be rescuers, like so much butter, and have no desire to put your steel to the test further.", 4.0, "look_idle", "play_line2", "add_to_que"); + chat_now("Not that it matters. Even without that display, the fort we escaped belongs to Graznux's horde, and the only way out, without going through it, is through this forest.", 6.0, "deep_idle", "play_line3", "add_to_que"); + chat_now("But there's angry spirits in this forest, and I'd rather not tangle with such a beasts alone, or with just my two men here.", 5.0, "deep_idle", "play_line4", "add_to_que"); + chat_now("I'd offer you gold for your help, but I'm sure you'd just as soon take it off our corpses. So let me offer you something that you can't acquire so easily...", 6.0, "look_idle", "play_line5", "add_to_que"); + chat_now("We three know our stuff. We can teach you a few tricks. I know my bows... Betor there knows his hammers. ...And Skelr sleeps with that damned dagger like it was a teddy.", 7.0, "aim_fireball_R", "play_line6", "add_to_que"); + chat_now("Help us escape this mess, and we'll teach you what we know... One lesson for each of you. Whaddaya say, deal?", 3.0, "look_idle", "set_deal_idle", "add_to_que"); + } + + void set_deal_idle() + { + OpenMenu(NPC_PROXACT_PLAYERID); + ANIM_IDLE = "aim_fireball_R"; + SetIdleAnim(ANIM_IDLE); + } + + void play_line2() + { + EmitSound(GetOwner(), 0, "voices\phobia\ralion02.wav", 10); + } + + void play_line3() + { + EmitSound(GetOwner(), 0, "voices\phobia\ralion03.wav", 10); + } + + void play_line4() + { + EmitSound(GetOwner(), 0, "voices\phobia\ralion04.wav", 10); + } + + void play_line5() + { + EmitSound(GetOwner(), 0, "voices\phobia\ralion05.wav", 10); + } + + void play_line6() + { + EmitSound(GetOwner(), 0, "voices\phobia\ralion06.wav", 10); + } + + void say_deal() + { + chat_clear_que(); + MADE_DEAL = 1; + SetMenuAutoOpen(0); + ANIM_IDLE = "deep_idle"; + SetIdleAnim(ANIM_IDLE); + EmitSound(GetOwner(), 0, "voices\phobia\ralion_deal.wav", 10); + chat_now("Alright, we may make it out of this alive yet. Lead on, we'll follow.", 2.0, "aim_fireball_R", "none", "clear_que"); + CallExternal("all", "bandit_ally_start_follow"); + } + + void say_no_deal() + { + chat_clear_que(); + ANIM_IDLE = "deep_idle"; + MADE_DEAL = 1; + SetMenuAutoOpen(0); + SetIdleAnim(ANIM_IDLE); + EmitSound(GetOwner(), 0, "voices\phobia\ralion_no_deal.wav", 10); + chat_now("Well, I suppose we can always train you in the more direct way then.", 2.0, "none", "none", "clear_que"); + ScheduleDelayedEvent(1.0, "say_no_deal2"); + } + + void say_no_deal2() + { + CallExternal("all", "bandit_ally_go_hostile"); + } + + void OnSuspendAI() + { + LogDebug("npcatk_suspend_ai PARAM1 PARAM2"); + } + + void bandit_ally_fire_spawn() + { + ScheduleDelayedEvent(5.0, "bandit_ally_fire_spawn2"); + chat_now("Oh, I was afraid Cethin would show her ugly self after we killed that damned bear of hers...", 3.0, "none", "aim_punch1", "clear_que"); + chat_now("You know the plan men, drink up!", 2.0, "none", "none", "clear_que"); + ScheduleDelayedEvent(5.0, "bandit_ally_fire_spawn3"); + } + + void bandit_ally_fire_spawn3() + { + CallExternal("all", "bandit_ally_drinkup"); + } + + void bandit_ally_drinkup() + { + PlayAnim("critical", "aim_punch1"); + string MY_HP = GetEntityHealth(GetOwner()); + string MY_MAXHP = GetEntityMaxHealth(GetOwner()); + if (MY_HP < MY_MAXHP) + { + string HEAL_AMT = MY_MAXHP; + HEAL_AMT -= MY_HP; + HealEntity(GetOwner(), HEAL_AMT); + } + string OUT_TITLE = GetEntityName(GetOwner()); + OUT_TITLE += " has quaffed a potion of fire resistance."; + SendInfoMsg("all", OUT_TITLE + " "); + SetDamageResistance("fire", 0.25); + SetDamageResistance("all", 0.4); + EmitSound(GetOwner(), 0, "items/drink.wav", 10); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 64, 2, 2); + } + + void bandit_ally_boss_dead() + { + npcatk_suspend_ai(); + npcatk_suspend_movement("deep_idle"); + SetMoveDest("none"); + check_qualify(); + ALLY_FOLLOW_ON = 0; + REWARD_MODE = 1; + SetMenuAutoOpen(1); + } + + void check_qualify() + { + TC_QUAL_PLAYERS = 0; + GetAllPlayers(TC_QUAL_PLAYERS); + TC_AVG_DMG_PTS = 0; + for (int i = 0; i < GetTokenCount(TC_QUAL_PLAYERS, ";"); i++) + { + tc_get_averages(); + } + TC_AVG_DMG_PTS /= GetPlayerCount(); + TC_HALF_AVG_DMG_PTS = TC_AVG_DMG_PTS; + TC_HALF_AVG_DMG_PTS *= 0.5; + } + + void tc_get_averages() + { + string CUR_PLAYER = GetToken(TC_QUAL_PLAYERS, i, ";"); + TC_AVG_DMG_PTS += GetEntityProperty(CUR_PLAYER, "scriptvar"); + } + + void say_reward() + { + string USER_PTS = GetEntityProperty(param1, "scriptvar"); + USER_QUALIFIES = 0; + if (USER_PTS >= TC_HALF_AVG_DMG_PTS) + { + USER_QUALIFIES = 1; + } + if (!(USER_QUALIFIES)) + { + PlayAnim("critical", "look_idle"); + SayText("Judging by your performance out there , or rather the lack there of , " + I + "don t think you re ready for what " + I + " could teach you."); + } + if (!(USER_QUALIFIES)) return; + string USER_STEAM = GetPlayerAuthId(param1); + USER_STEAM += GetEntityProperty(param1, "slot"); + if ((G_REWARD_LIST).findFirst(USER_STEAM) >= 0) + { + PlayAnim("critical", "look_idle"); + SayText("Sorry , only one training session per customer. Thanks for helping us out of this mess though."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + PlayAnim("critical", "look_idle"); + SayText("Alright , here s a few tricks that ll let you show your enemies what-for."); + int XP_GAIN = 20000; + string PLR_ADJ = GetPlayerCount(); + PLR_ADJ -= 1; + PLR_ADJ *= 0.25; + PLR_ADJ += 1; + XP_GAIN *= PLR_ADJ; + GiveExp(param1, MY_SKILL, int(XP_GAIN)); + SendColoredMessage(param1, "* " + int(XP_GAIN) + XP + "Awarded " + MY_SKILL); + if (G_REWARD_LIST.length() > 0) G_REWARD_LIST += ";"; + G_REWARD_LIST += USER_STEAM; + string OUT_MSG = "You recieve "; + OUT_MSG += MY_SKILL; + OUT_MSG += " from "; + OUT_MSG += GetEntityName(GetOwner()); + SendInfoMsg(param1, "Training Recieved " + OUT_MSG); + } + + void bandit_ally_lights() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(10.0, "bandit_ally_lights"); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 64, 0), 64, 9.9); + } + +} + +} diff --git a/scripts/angelscript/phobia/skelr_ally.as b/scripts/angelscript/phobia/skelr_ally.as new file mode 100644 index 00000000..901026d2 --- /dev/null +++ b/scripts/angelscript/phobia/skelr_ally.as @@ -0,0 +1,240 @@ +#pragma context server + +#include "monsters/base_battle_ally.as" +#include "monsters/bandit_elite_dagger.as" + +namespace MS +{ + +class SkelrAlly : CGameScript +{ + string AI_NO_TARGET_STRING; + int ALLY_FOLLOW_ON; + int ALLY_JUMP_THRESHOLD; + string ANIM_ALLY_JUMP; + string ANIM_ATTACK; + string ATTACK1_DAMAGE; + float ATTACK_PERCENTAGE; + int ATTACK_RANGE; + string BANDIT_TYPE; + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int HOSTILE_MODE; + int MADE_DEAL; + int MOVE_RANGE; + string MY_SKILL; + string NO_STUCK_CHECKS; + int NPC_BATTLE_ALLY; + int NPC_NO_PLAYER_DMG; + string ORIG_ATTACK; + int OVERRIDE_BANDIT_SPAWN; + int REWARD_MODE; + string SOUND_ALLY_JUMP; + int TC_AVG_DMG_PTS; + string TC_HALF_AVG_DMG_PTS; + int TC_QUAL_PLAYERS; + int USER_QUALIFIES; + int WEAPON; + + SkelrAlly() + { + MY_SKILL = "smallarms"; + WEAPON = 1; + OVERRIDE_BANDIT_SPAWN = 1; + AI_NO_TARGET_STRING = �NONE�; + ANIM_ALLY_JUMP = "long_jump"; + SOUND_ALLY_JUMP = "player/shout1.wav"; + ALLY_JUMP_THRESHOLD = 150; + } + + void game_precache() + { + Precache("monsters/bandit_elite"); + } + + void OnSpawn() override + { + BANDIT_TYPE = "dagger"; + SetName("|Skelr the Swift"); + SetName("bandit_skelr"); + SetMonsterClip(0); + SetModel("npc/rogue_1337.mdl"); + SetGold(RandomInt(30, 40)); + SetWidth(32); + SetHeight(92); + SetRace("human"); + SetDamageResistance("all", 0.6); + SetHearingSensitivity(10); + SetRoam(false); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(0.1, "custom_bandit"); + } + + void custom_bandit() + { + SetHealth(800); + MOVE_RANGE = 30; + ATTACK_RANGE = 90; + ATTACK1_DAMAGE = DMG_DAGGER; + ATTACK_PERCENTAGE = 0.8; + ANIM_ATTACK = "swordjab1_R"; + ORIG_ATTACK = ANIM_ATTACK; + SetActionAnim(ANIM_ATTACK); + SetModelBody(1, 1); + DROP_ITEM1 = "smallarms_fangstooth"; + DROP_ITEM1_CHANCE = 0.05; + BANDIT_TYPE = "dagger"; + } + + void bandit_ally_start_follow() + { + PlayAnim("once", "break"); + ALLY_FOLLOW_ON = 1; + MADE_DEAL = 1; + } + + void bandit_ally_go_hostile() + { + HOSTILE_MODE = 1; + NPC_NO_PLAYER_DMG = 0; + NPC_BATTLE_ALLY = 0; + ALLY_FOLLOW_ON = 0; + SetRace("rogue"); + SetRoam(true); + if (BANDIT_TYPE != "bow") + { + NO_STUCK_CHECKS = 0; + } + } + + void bandit_ally_drinkup() + { + PlayAnim("critical", "aim_punch1"); + string MY_HP = GetEntityHealth(GetOwner()); + string MY_MAXHP = GetEntityMaxHealth(GetOwner()); + if (MY_HP < MY_MAXHP) + { + string HEAL_AMT = MY_MAXHP; + HEAL_AMT -= MY_HP; + HealEntity(GetOwner(), HEAL_AMT); + } + string OUT_TITLE = GetEntityName(GetOwner()); + OUT_TITLE += " has quaffed a potion of fire resistance."; + SendInfoMsg("all", OUT_TITLE + " "); + SetDamageResistance("fire", 0.25); + SetDamageResistance("all", 0.4); + EmitSound(GetOwner(), 0, "items/drink.wav", 10); + Effect("glow", GetOwner(), Vector3(255, 0, 0), 64, 2, 2); + } + + void bandit_ally_boss_dead() + { + npcatk_suspend_ai(); + npcatk_suspend_movement("deep_idle"); + SetMoveDest("none"); + check_qualify(); + ALLY_FOLLOW_ON = 0; + REWARD_MODE = 1; + SetMenuAutoOpen(1); + } + + void check_qualify() + { + TC_QUAL_PLAYERS = 0; + GetAllPlayers(TC_QUAL_PLAYERS); + TC_AVG_DMG_PTS = 0; + for (int i = 0; i < GetTokenCount(TC_QUAL_PLAYERS, ";"); i++) + { + tc_get_averages(); + } + TC_AVG_DMG_PTS /= GetPlayerCount(); + TC_HALF_AVG_DMG_PTS = TC_AVG_DMG_PTS; + TC_HALF_AVG_DMG_PTS *= 0.5; + } + + void tc_get_averages() + { + string CUR_PLAYER = GetToken(TC_QUAL_PLAYERS, i, ";"); + TC_AVG_DMG_PTS += GetEntityProperty(CUR_PLAYER, "scriptvar"); + } + + void say_reward() + { + string USER_PTS = GetEntityProperty(param1, "scriptvar"); + USER_QUALIFIES = 0; + if (USER_PTS >= TC_HALF_AVG_DMG_PTS) + { + USER_QUALIFIES = 1; + } + if (!(USER_QUALIFIES)) + { + PlayAnim("critical", "look_idle"); + SayText("Judging by your performance out there , or rather the lack there of , " + I + "don t think you re ready for what " + I + " could teach you."); + } + if (!(USER_QUALIFIES)) return; + string USER_STEAM = GetPlayerAuthId(param1); + USER_STEAM += GetEntityProperty(param1, "slot"); + if ((G_REWARD_LIST).findFirst(USER_STEAM) >= 0) + { + PlayAnim("critical", "look_idle"); + SayText("Sorry , the deal was you could train once from one of us. Thanks for the assist though. We should be fine from here."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string RALION_ID = FindEntityByName("bandit_ralion"); + if (!(IsEntityAlive(RALION_ID))) + { + PlayAnim("critical", "look_idle"); + SayText("Ralion maybe dead , but " + I + "ll stick to his deal... I ll show you what " + I + " know."); + } + else + { + PlayAnim("critical", "look_idle"); + SayText("Alright... " + I + " ll show you what I know."); + } + int XP_GAIN = 20000; + string PLR_ADJ = GetPlayerCount(); + PLR_ADJ -= 1; + PLR_ADJ *= 0.25; + PLR_ADJ += 1; + XP_GAIN *= PLR_ADJ; + GiveExp(param1, MY_SKILL, int(XP_GAIN)); + SendColoredMessage(param1, "* " + int(XP_GAIN) + XP + "Awarded " + MY_SKILL); + if (G_REWARD_LIST.length() > 0) G_REWARD_LIST += ";"; + G_REWARD_LIST += USER_STEAM; + string OUT_MSG = "You recieve "; + OUT_MSG += MY_SKILL; + OUT_MSG += " from "; + OUT_MSG += GetEntityName(GetOwner()); + SendInfoMsg(param1, "Training Recieved " + OUT_MSG); + } + + void game_menu_getoptions() + { + if ((HOSTILE_MODE)) return; + if (!(MADE_DEAL)) return; + if ((REWARD_MODE)) + { + SendInfoMsg(param1, "Training with bandits You may only train with one bandit, so choose wisely."); + string reg.mitem.title = "Smallarms Training..."; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_reward"; + } + } + + void bandits_remove() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void bandit_ally_lights() + { + if (!(IsEntityAlive(GetOwner()))) return; + ScheduleDelayedEvent(10.0, "bandit_ally_lights"); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 64, 0), 64, 9.9); + } + +} + +} diff --git a/scripts/angelscript/player/body.as b/scripts/angelscript/player/body.as new file mode 100644 index 00000000..612c8a4d --- /dev/null +++ b/scripts/angelscript/player/body.as @@ -0,0 +1,63 @@ +#pragma context server + +namespace MS +{ + +class Body : CGameScript +{ + string MY_OWNER; + int PLAYING_DEAD; + + Body() + { + } + + void OnSpawn() override + { + SetModel("armor/p_armorvest.mdl"); + SetName("Player Body"); + SetWidth(32); + SetHeight(72); + SetModelBody(0, 1); + SetModelBody(1, 1); + SetModelBody(2, 0); + SetModelBody(3, 1); + SetModelBody(4, 9); + SetRace("beloved"); + PLAYING_DEAD = 1; + SetInvincible(true); + SetProp(GetOwner(), "skin", 0); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + SetName("GetEntityName(MY_OWNER) body"); + ScheduleDelayedEvent(0.1, "do_latch"); + } + + void do_latch() + { + Effect("beam", "update", GetOwner(), "start_target", MY_OWNER, 0); + Effect("beam", "update", GetOwner(), "end_target", MY_OWNER, 0); + SetProp(MY_OWNER, "rendermode", 5); + SetProp(MY_OWNER, "renderamt", 0); + } + + void ext_bodyparts() + { + SetModelBody(0, param1); + SetModelBody(1, param2); + SetModelBody(2, param3); + SetModelBody(3, param4); + SetModelBody(4, param5); + } + + void ext_skin() + { + SetProp(GetOwner(), "skin", param1); + } + +} + +} diff --git a/scripts/angelscript/player/client/halos.as b/scripts/angelscript/player/client/halos.as new file mode 100644 index 00000000..b1cb69d6 --- /dev/null +++ b/scripts/angelscript/player/client/halos.as @@ -0,0 +1,131 @@ +#pragma context client + +namespace MS +{ + +class Halos : CGameScript +{ + string SFX_DUMMIES_FOR_DUMB_PEOPLE; + int SFX_HALO_FRAME; + string SFX_HALO_LIST; + int SFX_TRACKING_HALOS; + + Halos() + { + SFX_HALO_LIST = ""; + SFX_DUMMIES_FOR_DUMB_PEOPLE = ""; + SFX_HALO_FRAME = 0; + SFX_TRACKING_HALOS = 0; + } + + void game_prerender() + { + if ((SFX_TRACKING_HALOS)) + { + if (SFX_HALO_FRAME > 1000) + { + SFX_HALO_FRAME = 0; + } + for (int i = 0; i < GetTokenCount(SFX_HALO_LIST, ";"); i++) + { + cl_track_halos(); + } + SFX_HALO_FRAME += 1; + } + } + + void cl_set_halo() + { + if (param1 == 2) + { + SFX_TRACKING_HALOS = 1; + if (FindToken(SFX_DUMMIES_FOR_DUMB_PEOPLE, param2, ";") > -1) + { + return; + } + if (SFX_DUMMIES_FOR_DUMB_PEOPLE.length() > 0) SFX_DUMMIES_FOR_DUMB_PEOPLE += ";"; + SFX_DUMMIES_FOR_DUMB_PEOPLE += param2; + if (FindToken(SFX_HALO_LIST, param2, ";") > -1) + { + return; + } + if (SFX_HALO_LIST.length() > 0) SFX_HALO_LIST += ";"; + SFX_HALO_LIST += param2; + } + if (param1 == 1) + { + SFX_TRACKING_HALOS = 1; + if (FindToken(SFX_HALO_LIST, param2, ";") > -1) + { + return; + } + if (SFX_HALO_LIST.length() > 0) SFX_HALO_LIST += ";"; + SFX_HALO_LIST += param2; + if (FindToken(SFX_DUMMIES_FOR_DUMB_PEOPLE, param2, ";") > -1) + { + RemoveToken(SFX_DUMMIES_FOR_DUMB_PEOPLE, FindToken(SFX_DUMMIES_FOR_DUMB_PEOPLE, param2, ";"), ";"); + } + } + if (param1 == 0) + { + string L_HALO_TO_REMOVE = FindToken(SFX_HALO_LIST, param2, ";"); + if (L_HALO_TO_REMOVE > -1) + { + RemoveToken(SFX_HALO_LIST, L_HALO_TO_REMOVE, ";"); + if (GetTokenCount(SFX_HALO_LIST, ";") == 0) + { + } + SFX_TRACKING_HALOS = 0; + } + string L_HALO_TO_REMOVE = FindToken(SFX_DUMMIES_FOR_DUMB_PEOPLE, param2, ";"); + if (L_HALO_TO_REMOVE > -1) + { + RemoveToken(SFX_DUMMIES_FOR_DUMB_PEOPLE, L_HALO_TO_REMOVE, ";"); + } + } + if (GetTokenCount(SFX_HALO_LIST, ";") > 0) + { + SFX_TRACKING_HALOS = 1; + } + } + + void cl_track_halos() + { + string CUR_HALO = GetToken(SFX_HALO_LIST, i, ";"); + if (CUR_HALO == "game.localplayer.index") + { + if (!("game.localplayer.thirdperson")) + { + } + return; + } + string L_HALO_ORG = /* TODO: $getcl */ $getcl(CUR_HALO, "bonepos", 14); + L_HALO_ORG += "z"; + if (FindToken(SFX_DUMMIES_FOR_DUMB_PEOPLE, CUR_HALO, ";") > -1) + { + ClientEffect("frameent", "sprite", "weapons/magic/seals.mdl", L_HALO_ORG, "setup_cool"); + } + else + { + ClientEffect("frameent", "sprite", "weapons/magic/seals.mdl", L_HALO_ORG, "setup_halo"); + } + } + + void setup_cool() + { + ClientEffect("frameent", "set_current_prop", "frame", SFX_HALO_FRAME); + ClientEffect("frameent", "set_current_prop", "body", 37); + ClientEffect("frameent", "set_current_prop", "scale", 2.0); + ClientEffect("frameent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + } + + void setup_halo() + { + ClientEffect("frameent", "set_current_prop", "frame", SFX_HALO_FRAME); + ClientEffect("frameent", "set_current_prop", "body", 31); + ClientEffect("frameent", "set_current_prop", "scale", 2.0); + } + +} + +} diff --git a/scripts/angelscript/player/emote_idle.as b/scripts/angelscript/player/emote_idle.as new file mode 100644 index 00000000..c5821a30 --- /dev/null +++ b/scripts/angelscript/player/emote_idle.as @@ -0,0 +1,70 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EmoteIdle : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string TEXT_IDLE; + string TEXT_NORMAL; + string game.effect.displayname; + int game.effect.removeondeath; + string game.effect.updateplayer; + int local.idling; + + EmoteIdle() + { + EFFECT_ID = "player_standidle"; + EFFECT_FLAGS = "player_action"; + EFFECT_SCRIPT = currentscript; + game.effect.removeondeath = 0; + TEXT_IDLE = #ACTION_STAND_IDLE; + TEXT_NORMAL = #ACTION_STAND_NORMAL; + game.effect.displayname = TEXT_IDLE; + local.idling = 0; + } + + void game_player_activate() + { + if (!(local.idling)) + { + CallExternal(GetOwner(), "emote_stop"); + PlayAnim("hold", "attention"); + local.idling = 1; + game.effect.displayname = TEXT_NORMAL; + game.effect.updateplayer = 1; + } + else + { + idle_stop(); + } + } + + void idle_stop() + { + PlayAnim("once", "break"); + local.idling = 0; + game.effect.displayname = TEXT_IDLE; + game.effect.updateplayer = 1; + } + + void game_animate() + { + if (!(local.idling)) return; + if (!("game.player.speed")) return; + idle_stop(); + } + + void emote_stop() + { + idle_stop(); + } + +} + +} diff --git a/scripts/angelscript/player/emote_no.as b/scripts/angelscript/player/emote_no.as new file mode 100644 index 00000000..25ab8d60 --- /dev/null +++ b/scripts/angelscript/player/emote_no.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EmoteNo : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string TEXT_NOD; + string game.effect.displayname; + int game.effect.removeondeath; + int local.idling; + string local.noding; + + EmoteNo() + { + EFFECT_ID = "player_nodno"; + EFFECT_FLAGS = "player_action"; + EFFECT_SCRIPT = currentscript; + game.effect.removeondeath = 0; + TEXT_NOD = #ACTION_NOD_NO; + game.effect.displayname = TEXT_NOD; + local.idling = 0; + } + + void game_player_activate() + { + if (!(local.idling)) + { + CallExternal(GetOwner(), "emote_stop"); + PlayAnim("once", "nod_no"); + local.noding = 1; + } + else + { + idle_stop(); + } + } + + void idle_stop() + { + PlayAnim("once", "break"); + local.noding = 0; + } + + void game_animate() + { + if (!(local.noding)) return; + if (!("game.player.speed")) return; + idle_stop(); + } + + void emote_stop() + { + idle_stop(); + } + +} + +} diff --git a/scripts/angelscript/player/emote_sit&stand.as b/scripts/angelscript/player/emote_sit&stand.as new file mode 100644 index 00000000..6aa54225 --- /dev/null +++ b/scripts/angelscript/player/emote_sit&stand.as @@ -0,0 +1,326 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EmoteSit&stand : CGameScript +{ + int AM_SITTING; + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + int FULL_ALERT; + string L_HEIGHTOFS; + float PLR_SPEED_SPEED_RATIO; + string SCRIPT_ID; + string STRUCK_TIME; + string TEXT_SIT; + string TEXT_STAND; + string VIEW_DIRECTION; + int VIEW_LOWERTIME; + int VIEW_RAISETIME; + string VIEW_STARTTIME; + string game.cleffect.move_scale.forward; + string game.cleffect.move_scale.right; + string game.cleffect.view_ofs.z; + string game.cleffect.viewmodel_ofs.z; + string game.effect.anim.framerate; + string game.effect.canattack; + string game.effect.canduck; + string game.effect.canjump; + string game.effect.canmove; + string game.effect.canrun; + string game.effect.displayname; + string game.effect.movespeed; + int game.effect.removeondeath; + string game.effect.updateplayer; + int regen.hp.amt; + + EmoteSit&stand() + { + EFFECT_ID = "player_sitstand"; + EFFECT_FLAGS = "player_action"; + EFFECT_SCRIPT = currentscript; + game.effect.removeondeath = 0; + TEXT_SIT = #ACTION_SIT; + TEXT_STAND = #ACTION_STAND; + game.effect.displayname = TEXT_SIT; + AM_SITTING = 0; + FULL_ALERT = 0; + PLR_SPEED_SPEED_RATIO = 1.0; + VIEW_LOWERTIME = 1; + VIEW_RAISETIME = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(5); + if (STRUCK_TIME > 0) + { + STRUCK_TIME -= 1; + } + if (STRUCK_TIME == "STRUCK_TIME") + { + STRUCK_TIME = 1; + } + if (STRUCK_TIME <= 1) + { + if ((AM_SITTING)) + { + string DEMON_ON = GetEntityProperty(GetOwner(), "scriptvar"); + if (!(DEMON_ON)) + { + } + MAX_HEALTH = GetEntityMaxHealth(GetOwner()); + REGEN_RATE = 0.05; + REGEN_RATE *= MAX_HEALTH; + REGEN_INT = int(REGEN_RATE); + if (REGEN_INT < 2) + { + REGEN_INT = 2; + } + regen.hp.amt += REGEN_INT; + HealEntity(GetOwner(), regen.hp.amt); + DrainStamina(GetOwner()); + string SHOWIT_ON = GetEntityProperty(GetOwner(), "scriptvar"); + if ((SHOWIT_ON)) + { + } + string MY_HP = GetEntityHealth(GetOwner()); + string MY_MAXHP = GetEntityMaxHealth(GetOwner()); + int MY_HP = int(MY_HP); + int MY_MAXHP = int(MY_MAXHP); + } + else + { + regen.hp.amt = 1; + } + if ((AM_SITTING)) + { + MAX_MANA = GetEntityProperty(GetOwner(), "maxmp"); + MANA_RATE = 0.20; + MANA_RATE *= MAX_MANA; + MANA_INT = int(MANA_RATE); + if (MANA_INT < 4) + { + MANA_INT = 4; + } + regen.mp.amt += MANA_INT; + GiveMP(GetOwner()); + if ((SHOWIT_ON)) + { + } + string MY_MP = GetEntityMP(GetOwner()); + string MY_MAXMP = GetEntityProperty(GetOwner(), "maxmp"); + int MY_MP = int(MY_MP); + int MY_MAXMP = int(MY_MAXMP); + FULL_ALERT += 1; + if (GetEntityMP(GetOwner()) == GetEntityProperty(GetOwner(), "maxmp")) + { + string MY_MP = "MAX"; + } + if (GetEntityHealth(GetOwner()) == GetEntityMaxHealth(GetOwner())) + { + string MY_HP = "MAX"; + } + if (GetEntityMP(GetOwner()) < GetEntityProperty(GetOwner(), "maxmp")) + { + FULL_ALERT = 0; + } + if (GetEntityHealth(GetOwner()) < GetEntityMaxHealth(GetOwner())) + { + FULL_ALERT = 0; + } + if (FULL_ALERT == 1) + { + SendColoredMessage(GetOwner(), "You are fully rested."); + } + if (FULL_ALERT == 0) + { + SendColoredMessage(GetOwner(), "Resting... " + HP: + "MY_HP / MY_MAXHP " + MANA: + " MY_MP / MY_MAXMP"); + } + } + else + { + regen.mp.amt = 1; + } + } + } + + void game_activate() + { + ScheduleDelayedEvent(0.5, "send_emote"); + } + + void send_emote() + { + ClientEvent("new", GetOwner(), currentscript); + SCRIPT_ID = "game.script.last_sent_id"; + } + + void game_player_activate() + { + if (!(AM_SITTING)) + { + if (!(CanAttack(GetOwner()))) + { + SendColoredMessage(GetOwner(), "Can't use this emote while unable to attack."); + return; + } + CallExternal(GetOwner(), "emote_stop"); + PlayAnim("hold", "sitdown"); + CallExternal(GetEntityProperty(GetOwner(), "scriptvar"), "ext_player_sit"); + game.effect.canmove = 0; + game.effect.canattack = 0; + game.effect.canrun = 0; + game.effect.canjump = 0; + game.effect.canduck = 0; + // TODO: setstatus add sitting + AM_SITTING = 1; + ClientEvent("update", GetOwner(), SCRIPT_ID, "view_change", 1); + game.effect.displayname = TEXT_STAND; + game.effect.updateplayer = 1; + } + else + { + ClientEvent("update", GetOwner(), SCRIPT_ID, "view_change", 0); + VIEW_RAISETIME("player_sit_freedom"); + // TODO: setstatus remove sitting + } + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + STRUCK_TIME = 5; + regen.hp.amt = 0; + } + + void player_sit_freedom() + { + PlayAnim("once", "break"); + game.effect.canmove = 1; + game.effect.canattack = 1; + game.effect.canrun = 1; + game.effect.canjump = 1; + game.effect.canduck = 1; + AM_SITTING = 0; + game.effect.displayname = TEXT_SIT; + game.effect.updateplayer = 1; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(AM_SITTING)) return; + ClientEvent("update", GetOwner(), SCRIPT_ID, "view_change", 0); + } + + void view_change() + { + const int VIEW_LOWERHEIGHT = -28; + VIEW_DIRECTION = param1; + VIEW_STARTTIME = GetGameTime(); + view_update(); + } + + void view_update() + { + float L_TIMEDELTA = GetGameTime(); + L_TIMEDELTA -= VIEW_STARTTIME; + string L_RATIO = L_TIMEDELTA; + L_RATIO /= VIEW_LOWERTIME; + L_RATIO = max(0, min(1, L_RATIO)); + string L_HEIGHTOFS = L_RATIO; + if (!(VIEW_DIRECTION)) + { + string L_RATIO_OLD = L_RATIO; + L_HEIGHTOFS = 1; + L_HEIGHTOFS -= L_RATIO_OLD; + } + L_HEIGHTOFS *= VIEW_LOWERHEIGHT; + game.cleffect.view_ofs.z = L_HEIGHTOFS; + game.cleffect.viewmodel_ofs.z = L_HEIGHTOFS; + if (!(L_RATIO < 1)) return; + ScheduleDelayedEvent(0.01, "view_update"); + } + + void plr_change_speed() + { + LogDebug("$currentscript plr_change_speed PARAM1 PARAM2 PARAM3"); + if (param1 == "normal") + { + PLR_SPEED_SPEED_RATIO = 1.0; + ClientEvent("update", GetOwner(), SCRIPT_ID, "plr_update_speed_client", PLR_SPEED_SPEED_RATIO); + game.effect.movespeed = (PLR_SPEED_SPEED_RATIO * 100); + game.effect.anim.framerate = PLR_SPEED_SPEED_RATIO; + SetScriptFlags(GetOwner(), "cleartype", "speed"); + return; + } + string L_ESPEED_DURATION = param1; + string L_ESPEED_SPEED_RATIO = param2; + string L_ESPEED_TAG = param3; + string L_ACTION = "add"; + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), L_ESPEED_TAG, "name_exists"))) + { + string L_ACTION = "edit"; + } + SetScriptFlags(GetOwner(), L_ACTION, L_ESPEED_TAG, "speed", L_ESPEED_SPEED_RATIO, L_ESPEED_DURATION); + plr_get_total_speed(); + } + + void plr_update_speed_effects() + { + string L_ACTION = param1; + string L_TAG = param2; + LogDebug("plr_update_speed_effects PARAM1 PARAM2"); + if (L_ACTION == "remove") + { + LogDebug("$currentscript - plr_update_speed_effects remove PARAM2"); + SetScriptFlags(GetOwner(), "remove", L_TAG); + } + plr_get_total_speed(); + } + + void ext_scriptflag_expired() + { + if (!(PLR_SPEED_SPEED_RATIO != 1.0)) return; + ScheduleDelayedEvent(0.1, "plr_get_total_speed"); + } + + void plr_update_speed_client() + { + game.cleffect.move_scale.forward = param1; + game.cleffect.move_scale.right = param1; + } + + void plr_get_total_speed() + { + if (!(/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "speed", "type_exists"))) + { + plr_change_speed("normal"); + return; + } + string L_SPEED_FLAG_TOTAL = /* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "speed", "type_value"); + string L_SPEED_FLAG_COUNT = /* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "speed", "type_count"); + string L_NEW_SPEED = (L_SPEED_FLAG_TOTAL / L_SPEED_FLAG_COUNT); + PLR_SPEED_SPEED_RATIO = L_NEW_SPEED; + plr_apply_speed(); + LogDebug("$currentscript plr_get_total_speed - tot L_SPEED_FLAG_TOTAL count L_SPEED_FLAG_COUNT new PLR_SPEED_SPEED_RATIO / (PLR_SPEED_SPEED_RATIO * 100)"); + } + + void plr_apply_speed() + { + if (SCRIPT_ID == "SCRIPT_ID") + { + ClientEvent("new", GetOwner(), currentscript); + SCRIPT_ID = "game.script.last_sent_id"; + } + ClientEvent("update", GetOwner(), SCRIPT_ID, "plr_update_speed_client", PLR_SPEED_SPEED_RATIO); + game.effect.anim.framerate = PLR_SPEED_SPEED_RATIO; + game.effect.movespeed = (PLR_SPEED_SPEED_RATIO * 100); + } + +} + +} diff --git a/scripts/angelscript/player/emote_yes.as b/scripts/angelscript/player/emote_yes.as new file mode 100644 index 00000000..82869ce2 --- /dev/null +++ b/scripts/angelscript/player/emote_yes.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "effects/base_effect allowduplicate.as" + +namespace MS +{ + +class EmoteYes : CGameScript +{ + string EFFECT_FLAGS; + string EFFECT_ID; + string EFFECT_SCRIPT; + string TEXT_NOD; + string game.effect.displayname; + int game.effect.removeondeath; + int local.idling; + string local.noding; + + EmoteYes() + { + EFFECT_ID = "player_nodyes"; + EFFECT_FLAGS = "player_action"; + EFFECT_SCRIPT = currentscript; + game.effect.removeondeath = 0; + TEXT_NOD = #ACTION_NOD_YES; + game.effect.displayname = TEXT_NOD; + local.idling = 0; + } + + void game_player_activate() + { + if (!(local.idling)) + { + CallExternal(GetOwner(), "emote_stop"); + PlayAnim("once", "nod_yes"); + local.noding = 1; + } + else + { + idle_stop(); + } + } + + void idle_stop() + { + PlayAnim("once", "break"); + local.noding = 0; + } + + void game_animate() + { + if (!(local.noding)) return; + if (!("game.player.speed")) return; + idle_stop(); + } + + void emote_stop() + { + idle_stop(); + } + +} + +} diff --git a/scripts/angelscript/player/externals.as b/scripts/angelscript/player/externals.as new file mode 100644 index 00000000..beb9b144 --- /dev/null +++ b/scripts/angelscript/player/externals.as @@ -0,0 +1,3626 @@ +#pragma context server + +#include "test_scripts/player_externals.as" +#include "developer/player/externals.as" +#include "$currentmap_player_externals.as" +#include "items/base_vampire.as" + +namespace MS +{ + +class Externals : CGameScript +{ + string AFL_BURST_DOT; + string ALCO_SPAWN_ITEM; + string ALCO_TYPE; + string ARMOR_EQUIPED; + string ARMOR_OFS; + string ARMOR_TYPE; + string EXTPLAY_SOUND; + int EXT_EFFECT_LIST; + string EXT_REMOVE_EFFECT; + int FISSURE_ACTIVE; + int FISSURE_COUNT; + string FISSURE_DIR; + string FISSURE_DMG; + string FISSURE_END; + float FISSURE_LENGTH; + string FISSURE_MAX_COUNT; + string FISSURE_ORG; + string FISSURE_START; + string FISSURE_YAW; + string FLOAT_RETURN; + string GAME_PVP; + int HIDE_ARMS; + int HIDE_CHEST; + int HIDE_HEAD; + int HIDE_LEGS; + int IAM_PLAYER; + int IMMUNE_VAMPIRE; + string IR_GLOWING; + int IS_AFK; + int I_R_FROZEN; + string MY_BODY; + string MY_CL_BODY; + string MY_GLOW_ID; + string NEW_SPAWN_POS; + string NEXT_HAURA_SOUND; + string NEXT_PLSHIELD_SOUND; + string NEXT_REPEL_SHIELD_SOUND; + string OWNER_POS; + string OWNER_YAW; + string PLAYING_DEAD; + float PLR_2HPEN_HEAVY; + float PLR_2HPEN_HEAVY_REPORT; + float PLR_2HPEN_LIGHT; + float PLR_2HPEN_LIGHT_REPORT; + string PLR_2H_REDUCT; + string PLR_ACTIVE_PETS; + string PLR_ACTIVE_PET_TYPES; + string PLR_ACTIVE_VIEWMODEL; + string PLR_ACTIVE_WEAPON; + string PLR_ADD_FIRE_DOT; + string PLR_ARMOR_ID; + string PLR_BEAR_IMAGE_ID; + int PLR_BEAR_MODE; + string PLR_BODY_TYPE; + int PLR_BRAVERY; + string PLR_COMBAT_ICON; + string PLR_CORRODE_DURATION; + string PLR_CRE_HAND; + string PLR_CRE_TYPE; + string PLR_CUR_TRANS; + string PLR_DARK_LEVEL; + string PLR_DAURA_CL_IDX; + string PLR_DBURST_AOE; + string PLR_DBURST_DMG; + string PLR_DBURST_DOT; + string PLR_DBURST_MAXPUSH; + string PLR_DBURST_ORG; + string PLR_DBURST_PUSH; + string PLR_DBURST_SKILL; + int PLR_DEBUG_ARRAY_ACTIVE; + string PLR_DEL_PLAYSOUND_CHAN; + string PLR_DEL_PLAYSOUND_VOL; + string PLR_DEL_PLAYSOUND_WAV; + string PLR_DID_SHENDER_EVENT; + string PLR_DMG_ADJUST_FIRE; + int PLR_EPILEPSY_ACTIVE; + int PLR_EPILEPSY_COUNT; + float PLR_EPILEPSY_DELAY; + int PLR_FAURA; + string PLR_FAURA_AOE; + string PLR_FAURA_CLIDX; + float PLR_FAURA_CL_RATE; + string PLR_FAURA_DOT; + string PLR_FAURA_NEXT_CL; + string PLR_FAURA_SCAN; + int PLR_FEAURA; + string PLR_FEAURA_AOE; + string PLR_FEAURA_CLIDX; + string PLR_FEAURA_DOT; + string PLR_FEAURA_NEXT_CL; + string PLR_FEAURA_SCAN; + string PLR_FISTS_ID; + string PLR_FOUND_PET; + int PLR_GCOD_ACTIVE; + int PLR_GCOD_AOE; + string PLR_GCOD_DMG; + string PLR_GCOD_DUR; + string PLR_GCOD_POS; + string PLR_GENDER; + string PLR_GLOW_BLOCK; + string PLR_GOT_REWARD; + int PLR_HAND_SET; + string PLR_HAS_GLOW; + int PLR_HAS_MATCHED_SET; + int PLR_HAURA_ACTIVE; + string PLR_HAURA_CL_ID; + string PLR_HAURA_POWER; + string PLR_HAURA_RADIUS; + string PLR_HAURA_TARGETS; + string PLR_HELM_ID; + int PLR_IN_COMBAT; + string PLR_LAST_ATK_TIME; + string PLR_LAST_PROJECTILE; + string PLR_LAST_WORN_ARMOR; + int PLR_LCOD_ACTIVE; + int PLR_LCOD_AOE; + string PLR_LCOD_DMG; + string PLR_LCOD_DUR; + string PLR_LCOD_POS; + string PLR_LEFT_HAND; + int PLR_LESSER_LEADFOOT; + string PLR_LESSER_LEADFOOT_STUN; + string PLR_LOCAL_TRANS; + int PLR_LOCK_CLEAR; + string PLR_LTRAN_MAXS; + string PLR_LTRAN_MINS; + string PLR_LTRAN_ORG; + string PLR_NEXT_FSAURA_SOUND; + string PLR_NEXT_GCOD_SOUND; + string PLR_NEXT_HASTE; + string PLR_NEXT_LCOD_SOUND; + string PLR_NEXT_SCROLL; + string PLR_NEXT_STUCK_ADJ; + string PLR_NEXT_TRANS; + string PLR_N_ACTIVE_PETS; + string PLR_OLOF_STATUS; + string PLR_ORCFOR_MUSIC; + int PLR_PAURA; + string PLR_PAURA_AOE; + string PLR_PAURA_CLIDX; + float PLR_PAURA_CL_RATE; + string PLR_PAURA_DOT; + string PLR_PAURA_NEXT_CL; + string PLR_PAURA_SCAN; + int PLR_PBOLT_ACTIVE; + int PLR_PBOLT_AOE; + string PLR_PBOLT_ARRAY; + int PLR_PBOLT_COUNTER; + string PLR_PBOLT_DOT; + string PLR_PBOLT_ORG; + string PLR_PBOLT_TARGS; + string PLR_PET_IDS; + string PLR_PET_TYPES; + int PLR_PLSHIELD_ACTIVE; + string PLR_PLSHIELD_CL_IDX; + string PLR_PLSHIELD_DOT; + int PLR_PLSHIELD_PUSH; + string PLR_PLSHIELD_TARGETS; + string PLR_PREV_BODY_TYPE; + string PLR_REPEL_MAX_HP; + string PLR_REPEL_ORG; + string PLR_REPEL_PUSH_STR; + int PLR_REPEL_SHIELD_ACTIVE; + string PLR_REPEL_SHIELD_RADIUS; + string PLR_REPEL_SHIELD_SPECIAL; + string PLR_REPEL_SHIELD_TARGETS; + string PLR_RESET_BANK; + string PLR_SCAN_TOKEN; + string PLR_SCAN_TOKEN_SORTED; + int PLR_SFAURA_ACTIVE; + string PLR_SFAURA_CL_IDX; + string PLR_SFAURA_DOT; + int PLR_SFAURA_GROWTH_RATE; + string PLR_SFAURA_ITEM; + string PLR_SFAURA_MAXPUSH; + int PLR_SFAURA_MAXSIZE; + int PLR_SFAURA_MP_COST; + int PLR_SFAURA_SIZE; + string PLR_SFAURA_TARGS; + string PLR_SHIELD_UP; + string PLR_SOUND_ARMHIT1; + string PLR_SOUND_BREATHFAST1; + string PLR_SOUND_BREATHFAST2; + string PLR_SOUND_BREATHFAST3; + string PLR_SOUND_CHESTHIT1; + string PLR_SOUND_DEATH; + string PLR_SOUND_FALLPAIN1; + string PLR_SOUND_FALLPAIN2; + string PLR_SOUND_FALLPAIN3; + string PLR_SOUND_FALLPAIN4; + string PLR_SOUND_JAB1; + string PLR_SOUND_JAB2; + string PLR_SOUND_LEGHIT1; + string PLR_SOUND_SHOUT1; + string PLR_SOUND_STOMACHHIT1; + string PLR_SOUND_SWORDREADY; + string PLR_SPEAR_CHARGE_LEVEL; + string PLR_SPECIAL_WEAPON; + string PLR_SPIDER_AMT; + int PLR_SPIDER_PROT; + string PLR_SUMMON_MENU_DISABLE; + string PLR_SWIFT_BLADE; + string PLR_TOD_LOCK; + string PLR_UNIQUE_SUMMONS; + string PLR_URDUAL_RELEASE_TIME; + string PLR_WEATHER; + string PLR_WEATHER_BLOCK; + string PLR_WRAITH_ACTIVE; + int PL_I_R_FROZEN; + string PL_PARRY; + int REGEN_ON; + int REGEN_RATE; + int SCROLL_WARNING_LEVEL; + string SOUNDSET_HF_ARMHIT1; + string SOUNDSET_HF_BREATHFAST1; + string SOUNDSET_HF_BREATHFAST2; + string SOUNDSET_HF_BREATHFAST3; + string SOUNDSET_HF_CHESTHIT1; + string SOUNDSET_HF_DEATH; + string SOUNDSET_HF_FALLPAIN1; + string SOUNDSET_HF_FALLPAIN2; + string SOUNDSET_HF_FALLPAIN3; + string SOUNDSET_HF_FALLPAIN4; + string SOUNDSET_HF_JAB1; + string SOUNDSET_HF_JAB2; + string SOUNDSET_HF_LEGHIT1; + string SOUNDSET_HF_SHOUT1; + string SOUNDSET_HF_STOMACHHIT1; + string SOUNDSET_HF_SWORDREADY; + string SOUNDSET_HM_ARMHIT1; + string SOUNDSET_HM_BREATHFAST1; + string SOUNDSET_HM_BREATHFAST2; + string SOUNDSET_HM_BREATHFAST3; + string SOUNDSET_HM_CHESTHIT1; + string SOUNDSET_HM_DEATH; + string SOUNDSET_HM_FALLPAIN1; + string SOUNDSET_HM_FALLPAIN2; + string SOUNDSET_HM_FALLPAIN3; + string SOUNDSET_HM_FALLPAIN4; + string SOUNDSET_HM_JAB1; + string SOUNDSET_HM_JAB2; + string SOUNDSET_HM_LEGHIT1; + string SOUNDSET_HM_SHOUT1; + string SOUNDSET_HM_STOMACHHIT1; + string SOUNDSET_HM_SWORDREADY; + string SPIRAL_DMG; + string SPIRAL_DMG_TYPE; + string SPIRAL_GLOW_COLOR; + string SPIRAL_SKILL; + string SPIRAL_SPIRTE_FILE; + string SPIRAL_SPRITE_COLOR; + string SPIRAL_SPRITE_FRAMES; + string SPIRAL_SPRITE_SCALE; + string TARGET_PET_TYPE; + string T_SPHERE; + float VAMPIRE_MULTI; + int VAMPIRE_ON; + int VOTE_DISABLED; + + Externals() + { + PLR_COMBAT_ICON = "hud/status/alpha_poison_immune"; + PLR_HAND_SET = 0; + PLR_UNIQUE_SUMMONS = ""; + PLR_LCOD_AOE = 90; + PLR_GCOD_AOE = 180; + PLR_2HPEN_LIGHT = 0.7; + PLR_2HPEN_LIGHT_REPORT = 0.3; + PLR_2HPEN_HEAVY = 0.6; + PLR_2HPEN_HEAVY_REPORT = 0.4; + SCROLL_WARNING_LEVEL = 0; + PLR_PET_TYPES = ""; + PLR_PET_IDS = ""; + EXT_EFFECT_LIST = 0; + VAMPIRE_MULTI = 0.35; + PLR_FAURA_CL_RATE = 10.0; + PLR_PAURA_CL_RATE = 30.0; + PLR_SFAURA_MP_COST = 2; + PLR_SFAURA_MAXSIZE = 175; + PLR_SFAURA_GROWTH_RATE = 2; + IAM_PLAYER = 1; + array ARRAY_JUMP_BEAM_IDS; + array ARRAY_JUMP_BEAM_TARGS; + SOUNDSET_HM_SWORDREADY = "player/swordready.wav"; + SOUNDSET_HM_SHOUT1 = "player/shout1.wav"; + SOUNDSET_HM_JAB1 = "player/jab1.wav"; + SOUNDSET_HM_JAB2 = "player/jab2.wav"; + SOUNDSET_HM_BREATHFAST1 = "player/breathe_fast1.wav"; + SOUNDSET_HM_BREATHFAST2 = "player/breathe_fast2.wav"; + SOUNDSET_HM_BREATHFAST3 = "player/breathe_fast3.wav"; + SOUNDSET_HM_DEATH = "player/death.wav"; + SOUNDSET_HM_CHESTHIT1 = "player/chesthit1.wav"; + SOUNDSET_HM_STOMACHHIT1 = "player/stomachhit1.wav"; + SOUNDSET_HM_ARMHIT1 = "player/armhit1.wav"; + SOUNDSET_HM_LEGHIT1 = "player/leghit1.wav"; + SOUNDSET_HM_FALLPAIN1 = "player/fallpain1.wav"; + SOUNDSET_HM_FALLPAIN2 = "player/fallpain2.wav"; + SOUNDSET_HM_FALLPAIN3 = "player/fallpain3.wav"; + SOUNDSET_HM_FALLPAIN4 = "player/fallpain4.wav"; + SOUNDSET_HF_SWORDREADY = "player/Femaleswordready.wav"; + SOUNDSET_HF_SHOUT1 = "player/Femaleshout1.wav"; + SOUNDSET_HF_JAB1 = "player/Femalejab1.wav"; + SOUNDSET_HF_JAB2 = "player/Femalejab2.wav"; + SOUNDSET_HF_BREATHFAST1 = "player/Femalebreathe_fast1.wav"; + SOUNDSET_HF_BREATHFAST2 = "player/Femalebreathe_fast2.wav"; + SOUNDSET_HF_BREATHFAST3 = "player/Femalebreathe_fast3.wav"; + SOUNDSET_HF_DEATH = "player/FemaleDeath.wav"; + SOUNDSET_HF_CHESTHIT1 = "player/Femalechesthit1.wav"; + SOUNDSET_HF_STOMACHHIT1 = "player/Femalestomachhit1.wav"; + SOUNDSET_HF_ARMHIT1 = "player/Femalearmhit1.wav"; + SOUNDSET_HF_LEGHIT1 = "player/Femaleleghit1.wav"; + SOUNDSET_HF_FALLPAIN1 = "player/Femalefallpain1.wav"; + SOUNDSET_HF_FALLPAIN2 = "player/Femalefallpain2.wav"; + SOUNDSET_HF_FALLPAIN3 = "player/Femalefallpain3.wav"; + SOUNDSET_HF_FALLPAIN4 = "player/Femalefallpain4.wav"; + Precache(SOUNDSET_HM_SWORDREADY); + Precache(SOUNDSET_HM_SHOUT1); + Precache(SOUNDSET_HM_JAB1); + Precache(SOUNDSET_HM_JAB2); + Precache(SOUNDSET_HM_BREATHFAST1); + Precache(SOUNDSET_HM_BREATHFAST2); + Precache(SOUNDSET_HM_BREATHFAST3); + Precache(SOUNDSET_HM_DEATH); + Precache(SOUNDSET_HM_CHESTHIT1); + Precache(SOUNDSET_HM_STOMACHHIT1); + Precache(SOUNDSET_HM_ARMHIT1); + Precache(SOUNDSET_HM_LEGHIT1); + Precache(SOUNDSET_HM_FALLPAIN1); + Precache(SOUNDSET_HM_FALLPAIN2); + Precache(SOUNDSET_HM_FALLPAIN3); + Precache(SOUNDSET_HM_FALLPAIN4); + Precache(SOUNDSET_HF_SWORDREADY); + Precache(SOUNDSET_HF_SHOUT1); + Precache(SOUNDSET_HF_JAB1); + Precache(SOUNDSET_HF_JAB2); + Precache(SOUNDSET_HF_BREATHFAST1); + Precache(SOUNDSET_HF_BREATHFAST2); + Precache(SOUNDSET_HF_BREATHFAST3); + Precache(SOUNDSET_HF_DEATH); + Precache(SOUNDSET_HF_CHESTHIT1); + Precache(SOUNDSET_HF_STOMACHHIT1); + Precache(SOUNDSET_HF_ARMHIT1); + Precache(SOUNDSET_HF_LEGHIT1); + Precache(SOUNDSET_HF_FALLPAIN1); + Precache(SOUNDSET_HF_FALLPAIN2); + Precache(SOUNDSET_HF_FALLPAIN3); + Precache(SOUNDSET_HF_FALLPAIN4); + } + + void fake_sound_precache() + { + // svplaysound: svplaysound 1 0 magic/volcano_loop.wav + EmitSound(1, 0, "magic/volcano_loop.wav"); + // svplaysound: svplaysound 1 0 weapons/polearm_spin.wav + EmitSound(1, 0, "weapons/polearm_spin.wav"); + // svplaysound: svplaysound 1 0 ambience/pulsemachine.wav + EmitSound(1, 0, "ambience/pulsemachine.wav"); + // svplaysound: svplaysound 1 0 ambience/dronemachine1.wav + EmitSound(1, 0, "ambience/dronemachine1.wav"); + // svplaysound: svplaysound 1 0 monsters/bear/c_beardire_bat1.wav + EmitSound(1, 0, "monsters/bear/c_beardire_bat1.wav"); + // svplaysound: svplaysound 1 0 monsters/goblin/sps_fogfire.wav + EmitSound(1, 0, "monsters/goblin/sps_fogfire.wav"); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_SWORDREADY + EmitSound(1, 0, SOUNDSET_HM_SWORDREADY); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_SHOUT1 + EmitSound(1, 0, SOUNDSET_HM_SHOUT1); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_JAB1 + EmitSound(1, 0, SOUNDSET_HM_JAB1); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_JAB2 + EmitSound(1, 0, SOUNDSET_HM_JAB2); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_BREATHFAST1 + EmitSound(1, 0, SOUNDSET_HM_BREATHFAST1); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_BREATHFAST2 + EmitSound(1, 0, SOUNDSET_HM_BREATHFAST2); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_BREATHFAST3 + EmitSound(1, 0, SOUNDSET_HM_BREATHFAST3); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_DEATH + EmitSound(1, 0, SOUNDSET_HM_DEATH); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_CHESTHIT1 + EmitSound(1, 0, SOUNDSET_HM_CHESTHIT1); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_STOMACHHIT1 + EmitSound(1, 0, SOUNDSET_HM_STOMACHHIT1); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_ARMHIT1 + EmitSound(1, 0, SOUNDSET_HM_ARMHIT1); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_LEGHIT1 + EmitSound(1, 0, SOUNDSET_HM_LEGHIT1); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_FALLPAIN1 + EmitSound(1, 0, SOUNDSET_HM_FALLPAIN1); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_FALLPAIN2 + EmitSound(1, 0, SOUNDSET_HM_FALLPAIN2); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_FALLPAIN3 + EmitSound(1, 0, SOUNDSET_HM_FALLPAIN3); + // svplaysound: svplaysound 1 0 SOUNDSET_HM_FALLPAIN4 + EmitSound(1, 0, SOUNDSET_HM_FALLPAIN4); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_SWORDREADY + EmitSound(1, 0, SOUNDSET_HF_SWORDREADY); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_SHOUT1 + EmitSound(1, 0, SOUNDSET_HF_SHOUT1); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_JAB1 + EmitSound(1, 0, SOUNDSET_HF_JAB1); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_JAB2 + EmitSound(1, 0, SOUNDSET_HF_JAB2); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_BREATHFAST1 + EmitSound(1, 0, SOUNDSET_HF_BREATHFAST1); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_BREATHFAST2 + EmitSound(1, 0, SOUNDSET_HF_BREATHFAST2); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_BREATHFAST3 + EmitSound(1, 0, SOUNDSET_HF_BREATHFAST3); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_DEATH + EmitSound(1, 0, SOUNDSET_HF_DEATH); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_CHESTHIT1 + EmitSound(1, 0, SOUNDSET_HF_CHESTHIT1); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_STOMACHHIT1 + EmitSound(1, 0, SOUNDSET_HF_STOMACHHIT1); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_ARMHIT1 + EmitSound(1, 0, SOUNDSET_HF_ARMHIT1); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_LEGHIT1 + EmitSound(1, 0, SOUNDSET_HF_LEGHIT1); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_FALLPAIN1 + EmitSound(1, 0, SOUNDSET_HF_FALLPAIN1); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_FALLPAIN2 + EmitSound(1, 0, SOUNDSET_HF_FALLPAIN2); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_FALLPAIN3 + EmitSound(1, 0, SOUNDSET_HF_FALLPAIN3); + // svplaysound: svplaysound 1 0 SOUNDSET_HF_FALLPAIN4 + EmitSound(1, 0, SOUNDSET_HF_FALLPAIN4); + } + + void game_scriptflag_update() + { + LogDebug("game_scriptflag_update PARAM1 PARAM2 PARAM3 PARAM4 PARAM5"); + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "nopush", "type_exists"))) + { + SetNoPush(true); + } + else + { + SetNoPush(false); + } + if (param1 == "add") + { + int L_CHECK_EXPIRE = 1; + } + if (param1 == "edit") + { + int L_CHECK_EXPIRE = 1; + } + if (!(L_CHECK_EXPIRE)) return; + string L_CHECK_EXPTIME = param5; + if (L_CHECK_EXPTIME > -1) + { + L_CHECK_EXPTIME += 0.1; + L_CHECK_EXPTIME("check_flags_expired"); + } + } + + void ext_set_status_flag() + { + SetScriptFlags(GetOwner(), "add", param1, param2, param3, param4, param5); + check_flags(); + } + + void check_flags() + { + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "mana_regen", "type_exists"))) + { + ext_mana_regen_loop(); + } + } + + void check_flags_expired() + { + LogDebug("check_flags_expired"); + SetScriptFlags(GetOwner(), "remove_expired"); + CallExternal(GetOwner(), "ext_scriptflag_expired"); + } + + void ext_remove_status_flag() + { + SetScriptFlags(GetOwner(), "remove", param1); + } + + void ext_remove_status_flags_type() + { + LogDebug("ext_remove_status_flags_type PARAM1"); + SetScriptFlags(GetOwner(), "cleartype", param1); + } + + void game_hitbodypart() + { + LogDebug("game_hitbodypart PARAM1"); + if (!(RandomInt(1, 5) == 1)) return; + if (param1 == "chest") + { + // svplaysound: if ( PARAM1 equals chest ) svplaysound 2 10 PLR_SOUND_CHESTHIT1 + EmitSound(2, 10, PLR_SOUND_CHESTHIT1); + } + if (param1 == "stomach") + { + // svplaysound: if ( PARAM1 equals stomach ) svplaysound 2 10 PLR_SOUND_STOMACHHIT1 + EmitSound(2, 10, PLR_SOUND_STOMACHHIT1); + } + if (param1 == "larm") + { + // svplaysound: if ( PARAM1 equals larm ) svplaysound 2 10 PLR_SOUND_ARMHIT1 + EmitSound(2, 10, PLR_SOUND_ARMHIT1); + } + if (param1 == "rarm") + { + // svplaysound: if ( PARAM1 equals rarm ) svplaysound 2 10 PLR_SOUND_ARMHIT1 + EmitSound(2, 10, PLR_SOUND_ARMHIT1); + } + if (param1 == "rleg") + { + // svplaysound: if ( PARAM1 equals rleg ) svplaysound 2 10 PLR_SOUND_LEGHIT1 + EmitSound(2, 10, PLR_SOUND_LEGHIT1); + } + if (param1 == "lleg") + { + // svplaysound: if ( PARAM1 equals lleg ) svplaysound 2 10 PLR_SOUND_LEGHIT1 + EmitSound(2, 10, PLR_SOUND_LEGHIT1); + } + } + + void game_fall() + { + // PlayRandomSound from: PLR_SOUND_FALLPAIN1, PLR_SOUND_FALLPAIN2, PLR_SOUND_FALLPAIN3, PLR_SOUND_FALLPAIN4 + array sounds = {PLR_SOUND_FALLPAIN1, PLR_SOUND_FALLPAIN2, PLR_SOUND_FALLPAIN3, PLR_SOUND_FALLPAIN4}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void set_glow_id() + { + MY_GLOW_ID = param1; + } + + void set_stun_prot() + { + SetDamageResistance("stun", param1); + } + + void set_spawn_point() + { + NEW_SPAWN_POS = param1; + } + + void register_body() + { + MY_BODY = param1; + MY_CL_BODY = param2; + } + + void hide_body_parts() + { + HIDE_LEGS = 0; + HIDE_HEAD = 0; + HIDE_CHEST = 0; + HIDE_ARMS = 0; + if (GetToken(param1, 0, ";") == "legs") + { + HIDE_LEGS = 1; + } + if (GetToken(param1, 0, ";") == "head") + { + HIDE_HEAD = 1; + } + if (GetToken(param1, 0, ";") == "chest") + { + HIDE_CHEST = 1; + } + if (GetToken(param1, 0, ";") == "arms") + { + HIDE_ARMS = 1; + } + if (GetToken(param1, 1, ";") == "legs") + { + HIDE_LEGS = 1; + } + if (GetToken(param1, 1, ";") == "head") + { + HIDE_HEAD = 1; + } + if (GetToken(param1, 1, ";") == "chest") + { + HIDE_CHEST = 1; + } + if (GetToken(param1, 1, ";") == "arms") + { + HIDE_ARMS = 1; + } + if (GetToken(param1, 2, ";") == "legs") + { + HIDE_LEGS = 1; + } + if (GetToken(param1, 2, ";") == "head") + { + HIDE_HEAD = 1; + } + if (GetToken(param1, 2, ";") == "chest") + { + HIDE_CHEST = 1; + } + if (GetToken(param1, 2, ";") == "arms") + { + HIDE_ARMS = 1; + } + if (GetToken(param1, 3, ";") == "legs") + { + HIDE_LEGS = 1; + } + if (GetToken(param1, 3, ";") == "head") + { + HIDE_HEAD = 1; + } + if (GetToken(param1, 3, ";") == "chest") + { + HIDE_CHEST = 1; + } + if (GetToken(param1, 3, ";") == "arms") + { + HIDE_ARMS = 1; + } + if (GetToken(param1, 4, ";") == "legs") + { + HIDE_LEGS = 1; + } + if (GetToken(param1, 4, ";") == "head") + { + HIDE_HEAD = 1; + } + if (GetToken(param1, 4, ";") == "chest") + { + HIDE_CHEST = 1; + } + if (GetToken(param1, 4, ";") == "arms") + { + HIDE_ARMS = 1; + } + CallExternal(MY_BODY, "hide_parts", HIDE_LEGS, HIDE_HEAD, HIDE_CHEST, HIDE_ARMS); + } + + void wearing_armor() + { + ARMOR_EQUIPED = param1; + if (param1 == 0) + { + ARMOR_TYPE = "none"; + ARMOR_OFS = 0; + } + else + { + ARMOR_TYPE = param2; + string INC_OFS = param3; + INC_OFS += 1; + ARMOR_OFS = param3; + } + } + + void potion_regen() + { + if ((REGEN_ON)) return; + if ((VAMPIRE_ON)) + { + SendColoredMessage(GetOwner(), "Vampire blood and regeneration potions do not mix."); + KillEntity(GetOwner()); + } + REGEN_ON = 1; + REGEN_RATE = 5; + PARAM1("regen_end"); + regen_start(); + } + + void regen_start() + { + if (!(REGEN_ON)) return; + string MY_MAX_HEALTH = GetEntityMaxHealth(GetOwner()); + string MY_CUR_HEALTH = GetEntityHealth(GetOwner()); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + if (MY_CUR_HEALTH < MY_MAX_HEALTH) + { + HealEntity(GetOwner(), REGEN_RATE); + } + ScheduleDelayedEvent(1.0, "regen_start"); + } + + void regen_end() + { + if (!(REGEN_ON)) return; + SendPlayerMessage(GetOwner(), "The regenerative magic fades."); + REGEN_ON = 0; + } + + void potion_vampire() + { + if ((VAMPIRE_ON)) return; + VAMPIRE_ON = 1; + IMMUNE_VAMPIRE = 1; + vampire_suncheck(); + PARAM1("vampire_off"); + } + + void vampire_suncheck() + { + if (!(VAMPIRE_ON)) return; + if (CURRENT_TIME_HOUR < 19) + { + if (CURRENT_TIME_HOUR > 5) + { + } + string MY_POS = GetEntityOrigin(GetOwner()); + if ((/* TODO: $get_under_sky */ $get_under_sky(MY_POS))) + { + } + if (GetMapName() != "sfor") + { + } + int SUN_DAMAGE = 100; + if (CURRENT_TIME_HOUR > 16) + { + int SUN_DAMAGE = 50; + } + CallExternal(GAME_MASTER, "gm_setname", "The light of the sun"); + XDoDamage(GetOwner(), "direct", SUN_DAMAGE, 1.0, GAME_MASTER, GAME_MASTER, "none", "magic_effect"); + } + ScheduleDelayedEvent(5.1, "vampire_suncheck"); + } + + void vampire_off() + { + IMMUNE_VAMPIRE = 0; + VAMPIRE_ON = 0; + SendPlayerMessage(GetOwner(), "The effects of the vampire blood fade."); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if ((VAMPIRE_ON)) + { + string DMG_INFLICTED = param2; + DMG_INFLICTED *= VAMPIRE_MULTI; + HealEntity(GetOwner(), DMG_INFLICTED); + try_vampire_target(GetEntityIndex(GetOwner()), GetEntityIndex(param1), DMG_INFLICTED); + } + } + + void ext_playsound_kiss() + { + EmitSound(GetOwner(), param1, param3, param2); + } + + void ext_playsound() + { + if (param3 != "PARAM3") + { + string SOURCE_ORG = param2; + if (Distance(GetMonsterProperty("origin"), SOURCE_ORG) > param3) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + EXTPLAY_SOUND = param1; + ScheduleDelayedEvent(0.1, "ext_playsound2"); + } + + void ext_playsound2() + { + EmitSound(GetOwner(), 0, EXTPLAY_SOUND, 10); + } + + void ext_rename_me() + { + SetName(param1); + } + + void ext_play_music() + { + // TODO: playmp3 ent_me combat PARAM1 + } + + void ext_play_music_me() + { + // TODO: playmp3 ent_me combat PARAM1 + } + + void ext_setangle() + { + SetAngles(param1); + } + + void ext_quest() + { + SetPlayerQuestData(GetOwner(), param1); + } + + void ext_addgold() + { + // TODO: UNCONVERTED: addgold PARAM1 + } + + void ext_setgold() + { + SetGold(param1); + } + + void send_damage() + { + DoDamage(param1, param2, param3, param4, param5); + } + + void give_hp() + { + HealEntity(GetOwner(), param1); + } + + void give_mp() + { + GiveMP(param1); + } + + void ext_invalidate() + { + PLAYING_DEAD = param1; + } + + void ext_dodamage() + { + DoDamage(param1, param2, param3, param4, param5); + } + + void freeze_solid_start() + { + I_R_FROZEN = 1; + PL_I_R_FROZEN = 1; + PARAM1("freeze_solid_end"); + } + + void freeze_solid_end() + { + I_R_FROZEN = 0; + PL_I_R_FROZEN = 0; + } + + void ext_removed_effects() + { + EXT_REMOVE_EFFECT = "unset"; + } + + void ext_spider_protect() + { + string L_DUR = param1; + string L_AMT = param2; + string L_TAG = param3; + PLR_SPIDER_PROT = 1; + PLR_SPIDER_AMT = L_AMT; + L_DUR("spider_protect_end"); + float_to_percent(PLR_SPIDER_AMT); + SendColoredMessage(GetOwner(), "You are now protected from spiders " + FLOAT_RETURN); + SetScriptFlags(GetOwner(), "add", L_TAG, "spider_resist", L_AMT, L_DUR); + } + + void spider_protect_end() + { + if (!(PLR_SPIDER_PROT)) return; + PLR_SPIDER_PROT = 0; + SendPlayerMessage(GetOwner(), "The protection from spider magic fades."); + } + + void float_to_percent() + { + if (param1 == 0) + { + FLOAT_RETURN = "100%"; + } + if (param1 == 1) + { + FLOAT_RETURN = "100%"; + } + if (!(param1 != 0)) return; + FLOAT_RETURN = 100; + string INC_FLOAT = param1; + INC_FLOAT *= 100; + FLOAT_RETURN -= INC_FLOAT; + int FLOAT_RETURN = int(FLOAT_RETURN); + FLOAT_RETURN += "%"; + } + + void ext_set_alco_type() + { + ALCO_TYPE = param1; + ALCO_SPAWN_ITEM = param2; + } + + void ext_flash_bang() + { + if (!(Distance(GetMonsterProperty("origin"), param1) < param2)) return; + Effect("screenfade", GetOwner(), 3, 1, Vector3(255, 255, 255), 255, "fadein"); + } + + void ext_set_swift_blade() + { + PLR_SWIFT_BLADE = param1; + } + + void game_equipped() + { + ext_set_hand_id(GetEntityProperty(param1, "hand_index"), GetEntityIndex(param1)); + } + + void ext_set_hand_id() + { + string L_HAND_DEST = param1; + string L_ITEM_ID = param2; + string L_HANDPREF = GetEntityProperty(L_ITEM_ID, "handpref"); + if (L_HAND_DEST == 0) + { + PLR_LEFT_HAND = L_ITEM_ID; + } + else + { + if (L_HAND_DEST == 1) + { + PLR_RIGHT_HAND = L_ITEM_ID; + if (L_HANDPREF == 4) + { + PLR_LEFT_HAND = 0; + } + } + else + { + if (L_HAND_DEST == 2) + { + PLR_LEFT_HAND = L_ITEM_ID; + PLR_RIGHT_HAND = L_ITEM_ID; + } + } + } + PLR_ACTIVE_WEAPON = L_ITEM_ID; + if ((GetEntityProperty(PLR_ACTIVE_WEAPON, "scriptvar"))) + { + PLR_SPECIAL_WEAPON = 1; + } + else + { + PLR_SPECIAL_WEAPON = 0; + } + update_parry(); + set_two_hand(); + ScheduleDelayedEvent(0.25, "set_swift_blade"); + } + + void update_parry() + { + float PARRY_MULTI = 1.0; + string LEFT_PARRY_SKILL = "skill."; + LEFT_PARRY_SKILL += GetEntityProperty(PLR_LEFT_HAND, "scriptvar"); + string LEFT_PARRY = GetEntityProperty(GetOwner(), "left_parry_skill"); + if (GetEntityProperty(PLR_LEFT_HAND, "handpref") == 2) + { + int LEFT_PARRY = 0; + } + if (GetEntityProperty(PLR_LEFT_HAND, "handpref") == 4) + { + if (LEFT_PARRY_SKILL != "skill.martialarts") + { + } + LEFT_PARRY *= 1.5; + } + if ((GetEntityProperty(PLR_LEFT_HAND, "scriptvar"))) + { + int LEFT_PARRY = 0; + string LEFT_PARRY_MULTI = GetEntityProperty(PLR_LEFT_HAND, "scriptvar"); + if (LEFT_PARRY_MULTI != "not_equipped") + { + PARRY_MULTI += LEFT_PARRY_MULTI; + } + } + string RIGHT_PARRY_SKILL = "skill."; + RIGHT_PARRY_SKILL += GetEntityProperty(PLR_RIGHT_HAND, "scriptvar"); + string RIGHT_PARRY = GetEntityProperty(GetOwner(), "right_parry_skill"); + if (GetEntityProperty(PLR_RIGHT_HAND, "handpref") == 2) + { + int RIGHT_PARRY = 0; + } + if (GetEntityProperty(PLR_RIGHT_HAND, "handpref") == 4) + { + if (RIGHT_PARRY_SKILL != "skill.martialarts") + { + } + RIGHT_PARRY *= 1.5; + } + if ((GetEntityProperty(PLR_RIGHT_HAND, "scriptvar"))) + { + int RIGHT_PARRY = 0; + string RIGHT_PARRY_MULTI = GetEntityProperty(PLR_RIGHT_HAND, "scriptvar"); + if (RIGHT_PARRY_MULTI != "not_equipped") + { + PARRY_MULTI += RIGHT_PARRY_MULTI; + } + } + string TOTAL_PARRY = RIGHT_PARRY; + TOTAL_PARRY += LEFT_PARRY; + if (PARRY_MULTI > 1.0) + { + PARRY_MULTI -= 1.0; + } + if (TOTAL_PARRY == 0) + { + if (PARRY_MULTI > 1.0) + { + } + string TOTAL_PARRY = GetSkillLevel(GetOwner(), "martialarts"); + } + TOTAL_PARRY *= PARRY_MULTI; + int TOTAL_PARRY = int(TOTAL_PARRY); + string OLD_PARRY = PL_PARRY; + PL_PARRY = TOTAL_PARRY; + if (OLD_PARRY != PL_PARRY) + { + SendColoredMessage(GetOwner(), "Your Parry value is now " + TOTAL_PARRY); + } + SetStat("parry", TOTAL_PARRY); + } + + void set_two_hand() + { + string PLR_LEFT_HAND_TYPE = GetEntityProperty(PLR_LEFT_HAND, "itemname"); + string PLR_RIGHT_HAND_TYPE = GetEntityProperty(PLR_RIGHT_HAND, "itemname"); + string L_NO_REDUCT = "func_get_dualwield_reduct"(PLR_LEFT_HAND_TYPE); + if (!(L_NO_REDUCT)) + { + string L_NO_REDUCT = "func_get_dualwield_reduct"(PLR_RIGHT_HAND_TYPE); + } + PLR_HAS_MATCHED_SET = 0; + if ((GetEntityProperty(PLR_RIGHT_HAND, "scriptvar"))) + { + string L_MATCHED_SET_TYPE = GetEntityProperty(PLR_RIGHT_HAND, "scriptvar"); + if (GetEntityProperty(PLR_LEFT_HAND, "scriptvar") == L_MATCHED_SET_TYPE) + { + int L_NO_REDUCT = 1; + PLR_HAS_MATCHED_SET = 1; + } + } + if (!(L_NO_REDUCT)) + { + string OLD_REDUCT = PLR_2H_REDUCT; + if ((PLR_LEFT_HAND_TYPE).findFirst("smallarms_") >= 0) + { + int SA_REDUCT = 1; + } + if ((PLR_RIGHT_HAND_TYPE).findFirst("smallarms_") >= 0) + { + int SA_REDUCT = 1; + } + if (PLR_LEFT_HAND_TYPE == PLR_RIGHT_HAND_TYPE) + { + int SA_REDUCT = 1; + } + if ((SA_REDUCT)) + { + PLR_2H_REDUCT = PLR_2HPEN_LIGHT; + if (OLD_REDUCT != PLR_2H_REDUCT) + { + SendColoredMessage(GetOwner(), "Dual-wield penalty: " + PLR_2HPEN_LIGHT_REPORT + " off-hand is light or matches"); + } + } + else + { + PLR_2H_REDUCT = PLR_2HPEN_HEAVY; + if (OLD_REDUCT != PLR_2H_REDUCT) + { + SendColoredMessage(GetOwner(), "Dual-wield penalty: " + PLR_2HPEN_HEAVY_REPORT); + } + } + } + else + { + string OLD_REDUCT = PLR_2H_REDUCT; + PLR_2H_REDUCT = 1.0; + if (OLD_REDUCT != PLR_2H_REDUCT) + { + if (!(PLR_HAS_MATCHED_SET)) + { + SendColoredMessage(GetOwner(), "No dual-wield penalty."); + } + } + if ((PLR_HAS_MATCHED_SET)) + { + if (!(PLR_HAD_MATCHED_SET)) + { + } + SendColoredMessage(GetOwner(), "No dual-wield penalty due to matched set!"); + PLR_HAD_MATCHED_SET = 1; + } + else + { + PLR_HAD_MATCHED_SET = 0; + } + } + } + + void func_get_dualwield_reduct() + { + string L_ITEM = param1; + int L_NO_REDUCT = 0; + if ((L_ITEM).findFirst("bows_") == 0) + { + int L_NO_REDUCT = 1; + } + else + { + if ((L_ITEM).findFirst("shield") == 0) + { + int L_NO_REDUCT = 1; + } + else + { + if ((L_ITEM).findFirst("armor_") == 0) + { + int L_NO_REDUCT = 1; + } + else + { + if ((L_ITEM).findFirst("magic_hand_") == 0) + { + int L_NO_REDUCT = 1; + } + else + { + if ((L_ITEM).findFirst("fist_") == 0) + { + int L_NO_REDUCT = 1; + } + else + { + if ((L_ITEM).findFirst("gauntlet") >= 0) + { + int L_NO_REDUCT = 1; + } + else + { + if (L_ITEM == "0") + { + int L_NO_REDUCT = 1; + } + else + { + if ((L_ITEM).findFirst("item") == 0) + { + int L_NO_REDUCT = 1; + } + else + { + if ((L_ITEM).findFirst("mana") == 0) + { + int L_NO_REDUCT = 1; + } + else + { + if ((L_ITEM).findFirst("health") == 0) + { + int L_NO_REDUCT = 1; + } + else + { + if ((L_ITEM).findFirst("skin") == 0) + { + int L_NO_REDUCT = 1; + } + } + } + } + } + } + } + } + } + } + } + return; + return; + } + + void set_swift_blade() + { + string ACTIVE_WEAPON = GetActiveItem(GetOwner()); + string ACTIVE_SCRIPT = GetEntityProperty(ACTIVE_WEAPON, "itemname"); + if ((ACTIVE_SCRIPT).findFirst("bows_") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((ACTIVE_SCRIPT).findFirst("magic_hand_") >= 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (PLR_SWIFT_BLADE == 0) + { + if ((GetEntityProperty(ACTIVE_WEAPON, "scriptvar"))) + { + CallExternal(ACTIVE_WEAPON, "ext_item_swift_blade", "remove"); + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityProperty(ACTIVE_WEAPON, "scriptvar"))) + { + string CUR_SPEED = /* TODO: $get_attackprop */ $get_attackprop(ACTIVE_WEAPON, 0, "delay.end"); + string CUR_STRIKE = /* TODO: $get_attackprop */ $get_attackprop(ACTIVE_WEAPON, 0, "delay.strike"); + } + else + { + string CUR_SPEED = GetEntityProperty(ACTIVE_WEAPON, "scriptvar"); + string CUR_STRIKE = GetEntityProperty(ACTIVE_WEAPON, "scriptvar"); + } + CallExternal(ACTIVE_WEAPON, "ext_item_swift_blade", CUR_SPEED, CUR_STRIKE); + CUR_SPEED *= PLR_SWIFT_BLADE; + CUR_STRIKE *= PLR_SWIFT_BLADE; + CUR_STRIKE *= 0.75; + string VIEWANIM_SPEED = GetEntityProperty(ACTIVE_WEAPON, "scriptvar"); + if (CUR_SPEED > 0) + { + VIEWANIM_SPEED /= CUR_SPEED; + } + // TODO: setviewmodelprop ACTIVE_WEAPON animspeed VIEWANIM_SPEED + SetAttackProp("ACTIVE_WEAPON", 0); + SetAttackProp("ACTIVE_WEAPON", 0); + } + + void ext_sphere_token_x() + { + PLR_SCAN_TOKEN = FindEntitiesInSphere(param1, param2); + } + + void ext_sphere_token() + { + PLR_SCAN_TOKEN = FindEntitiesInSphere(param1, param2); + } + + void ext_sphere_token_byrange() + { + PLR_SCAN_TOKEN = FindEntitiesInSphere(param1, param2); + if (!(PLR_SCAN_TOKEN != "none")) return; + PLR_SCAN_TOKEN = /* TODO: $sort_entlist */ $sort_entlist(PLR_SCAN_TOKEN, "range"); + } + + void ext_box_token() + { + PLR_SCAN_TOKEN = /* TODO: $get_tbox */ $get_tbox(param1, param2, param3); + } + + void ext_set_vote_delay() + { + VOTE_DISABLED = 1; + ScheduleDelayedEvent(20.0, "reset_vote_delay"); + } + + void reset_vote_delay() + { + VOTE_DISABLED = 0; + } + + void ext_reset_names() + { + SetPlayerQuestData(GetOwner(), "n"); + } + + void ext_send_tele_point() + { + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + SetEntityOrigin(GetEntityIndex(GetOwner()), param1); + if ((G_DEVELOPER_MODE)) + { + SendColoredMessage(GetOwner(), "ext_send_tele_point " + param1); + } + OWNER_POS = param1; + for (int i = 0; i < 18; i++) + { + beam_fx2(); + } + } + + void beam_fx2() + { + string BEAM_START = OWNER_POS; + string BEAM_END = OWNER_POS; + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, BEAM_ROT, 0), Vector3(0, 32, -32)); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, BEAM_ROT, 0), Vector3(0, 32, 128)); + Effect("beam", "point", "lgtning.spr", 100, BEAM_START, BEAM_END, Vector3(255, 0, 255), 200, 16, 3); + BEAM_ROT += 20; + } + + void ext_set_next_scroll() + { + PLR_NEXT_SCROLL = GetGameTime(); + PLR_NEXT_SCROLL += 5.0; + } + + void ext_set_reward() + { + PLR_GOT_REWARD = param1; + } + + void game_drain_death() + { + DoDamage(GetOwner(), "direct", 100, 1.0, param1); + } + + void ext_set_map() + { + SetPlayerQuestData(GetOwner(), "m"); + SetPlayerQuestData(GetOwner(), "d"); + SetTransition(GetOwner(), param2); + PLR_CUR_TRANS = param2; + PLR_NEXT_TRANS = param3; + ScheduleDelayedEvent(0.1, "ext_set_transitions"); + } + + void ext_setspawn() + { + LogDebug("ext_setspawn PARAM1"); + SetTransition(GetOwner(), param1); + SetPlayerQuestData(GetOwner(), "d"); + LogDebug("ext_setspawn PARAM1"); + SetTransition(GetOwner(), param1); + SetPlayerQuestData(GetOwner(), "d"); + } + + void ext_set_transitions() + { + if (!(PLR_IN_WORLD)) return; + SetTransition(GetOwner(), PLR_CUR_TRANS); + } + + void ext_scan_pet() + { + T_SPHERE = FindEntitiesInSphere("enemy", 512); + TARGET_PET_TYPE = param1; + if (!(T_SPHERE != "none")) return; + for (int i = 0; i < GetTokenCount(T_SPHERE, ";"); i++) + { + ext_scan_pet_loop(); + } + } + + void ext_scan_pet_loop() + { + string CUR_TARGET = GetToken(T_SPHERE, i, ";"); + string PET_TYPE = GetEntityProperty(CUR_TARGET, "scriptvar"); + if (!(PET_TYPE == TARGET_PET_TYPE)) return; + PLR_FOUND_PET = CUR_TARGET; + } + + void ext_set_frozen() + { + I_R_FROZEN = 1; + SetScriptFlags(GetOwner(), "add", "ext_set_frozen", "nopush", 1, param1, "none"); + PARAM1("ext_set_unfrozen"); + } + + void ext_set_unfrozen() + { + I_R_FROZEN = 0; + } + + void ext_glow_block() + { + PLR_GLOW_BLOCK = param1; + if ((PLR_GLOW_BLOCK)) + { + if ((PLR_HAS_GLOW)) + { + } + EmitSound(GetOwner(), 2, "magic/elecidlepop.wav", 10); + SendPlayerMessage(GetOwner(), "Your light is snuffed out!"); + CallExternal(GAME_MASTER, "gm_light_update", "remove", GetEntityIndex(GetOwner()), Vector3(COLOR_RATIO_R, COLOR_RATIO_G, COLOR_RATIO_B), RAD_RATIO); + ext_set_glow(0); + } + else + { + SendPlayerMessage(GetOwner(), "You have left the influence of the dark force."); + } + } + + void ext_ent_list_sort() + { + string SCAN_TYPE = param1; + string SCAN_RANGE = param2; + string SCAN_ORIGIN = param3; + string SORT_TYPE = param4; + ext_sphere_token(SCAN_TYPE, SCAN_RANGE, SCAN_ORIGIN); + PLR_SCAN_TOKEN_SORTED = /* TODO: $sort_entlist */ $sort_entlist(PLR_SCAN_TOKEN, SORT_TYPE); + } + + void ext_fire_aura_activate() + { + if ((PLR_FAURA)) return; + PLR_FAURA = 1; + PLR_FAURA_DOT = param1; + PLR_FAURA_AOE = param2; + GAME_PVP = "game.pvp"; + ClientEvent("new", "all", "items/armor_faura_cl", GetEntityIndex(GetOwner()), PLR_FAURA_AOE, PLR_FAURA_CL_RATE); + PLR_FAURA_CLIDX = "game.script.last_sent_id"; + PLR_FAURA_NEXT_CL = GetGameTime(); + PLR_FAURA_NEXT_CL += PLR_FAURA_CL_RATE; + fire_aura_loop(); + } + + void fire_aura_loop() + { + if (!(PLR_FAURA)) return; + ScheduleDelayedEvent(1.0, "fire_aura_loop"); + float GAME_TIME = GetGameTime(); + if (GAME_TIME > PLR_FAURA_NEXT_CL) + { + ClientEvent("new", "all", "items/armor_faura_cl", GetEntityIndex(GetOwner()), PLR_FAURA_AOE, PLR_FAURA_CL_RATE); + PLR_FAURA_CLIDX = "game.script.last_sent_id"; + PLR_FAURA_NEXT_CL = GAME_TIME; + PLR_FAURA_NEXT_CL += PLR_FAURA_CL_RATE; + } + if (!(IsEntityAlive(GetOwner()))) return; + string SCAN_AOE = PLR_FAURA_AOE; + SCAN_AOE *= 3; + PLR_FAURA_SCAN = FindEntitiesInSphere("enemy", SCAN_AOE); + if (!(PLR_FAURA_SCAN != "none")) return; + for (int i = 0; i < GetTokenCount(PLR_FAURA_SCAN, ";"); i++) + { + fire_aura_burn(); + } + } + + void fire_aura_burn() + { + string CUR_TARG = GetToken(PLR_FAURA_SCAN, i, ";"); + if (!(GetEntityRange(CUR_TARG) < PLR_FAURA_AOE)) return; + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + if (!(GAME_PVP)) + { + if ((IsValidPlayer(CUR_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IS_AFK)) + { + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), PLR_FAURA_DOT, "spellcasting.fire"); + } + } + + void ext_fire_aura_remove() + { + PLR_FAURA = 0; + ClientEvent("update", "all", PLR_FAURA_CLIDX, "remove_me"); + } + + void ext_poison_aura_activate() + { + if ((PLR_PAURA)) return; + PLR_PAURA = 1; + PLR_PAURA_DOT = param1; + PLR_PAURA_AOE = param2; + GAME_PVP = "game.pvp"; + ClientEvent("new", "all", "effects/sfx_poison_aura", GetEntityIndex(GetOwner()), PLR_PAURA_AOE, PLR_PAURA_CL_RATE); + PLR_PAURA_CLIDX = "game.script.last_sent_id"; + PLR_PAURA_NEXT_CL = GetGameTime(); + PLR_PAURA_NEXT_CL += PLR_PAURA_CL_RATE; + poison_aura_loop(); + } + + void poison_aura_loop() + { + if (!(PLR_PAURA)) return; + ScheduleDelayedEvent(1.0, "poison_aura_loop"); + float GAME_TIME = GetGameTime(); + if (GAME_TIME > PLR_PAURA_NEXT_CL) + { + ClientEvent("new", "all", "effects/sfx_poison_aura", GetEntityIndex(GetOwner()), PLR_PAURA_AOE, PLR_PAURA_CL_RATE); + PLR_PAURA_CLIDX = "game.script.last_sent_id"; + PLR_PAURA_NEXT_CL = GAME_TIME; + PLR_PAURA_NEXT_CL += PLR_PAURA_CL_RATE; + } + if (!(IsEntityAlive(GetOwner()))) return; + PLR_PAURA_SCAN = FindEntitiesInSphere("enemy", PLR_PAURA_AOE); + if (!(PLR_PAURA_SCAN != "none")) return; + for (int i = 0; i < GetTokenCount(PLR_PAURA_SCAN, ";"); i++) + { + poison_aura_burn(); + } + } + + void poison_aura_burn() + { + string CUR_TARG = GetToken(PLR_PAURA_SCAN, i, ";"); + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + if (!(GAME_PVP)) + { + if ((IsValidPlayer(CUR_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IS_AFK)) + { + ApplyEffect(CUR_TARG, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), PLR_PAURA_DOT, 1, "spellcasting.affliction"); + } + } + + void ext_poison_aura_remove() + { + PLR_PAURA = 0; + ClientEvent("update", "all", PLR_PAURA_CLIDX, "remove_me"); + } + + void ext_setmodelbody() + { + SetModelBody(param1, param2); + } + + void ext_setbodytype() + { + PLR_PREV_BODY_TYPE = PLR_BODY_TYPE; + PLR_BODY_TYPE = param1; + if (param2 != "remove") + { + PLR_LAST_WORN_ARMOR = param2; + } + int GENDER_ADJ = 1; + if (PLR_GENDER == "female") + { + if (GetEntityRace(GetOwner()) == "human") + { + GENDER_ADJ += 1; + } + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green ext_setbodytype is_female"); + } + LogDebug("ext_setbodytype Set female bodytype"); + } + if ((param1).findFirst("PARAM") == 0) + { + PLR_BODY_TYPE = PLR_PREV_BODY_TYPE; + } + else + { + PLR_PREV_BODY_TYPE = PLR_BODY_TYPE; + } + if (PLR_BODY_TYPE == "normal") + { + SetModelBody(0, GENDER_ADJ); + SetModelBody(1, GENDER_ADJ); + SetModelBody(2, GENDER_ADJ); + SetModelBody(3, GENDER_ADJ); + } + if (PLR_BODY_TYPE == "leather") + { + SetModelBody(0, GENDER_ADJ); + SetModelBody(1, GENDER_ADJ); + SetModelBody(2, 0); + SetModelBody(3, GENDER_ADJ); + } + if (PLR_BODY_TYPE == "platemail") + { + SetModelBody(0, 0); + SetModelBody(1, GENDER_ADJ); + SetModelBody(2, 0); + SetModelBody(3, 0); + } + } + + void ext_register_helm() + { + PLR_HELM_ID = param1; + if (!(PLR_HELM_ID != "none")) return; + CallClientItemEvent(PLR_HELM_ID, "game_show", GetEntityRace(GetOwner()), GetGender(GetOwner()), "ext_register_helm"); + } + + void ext_register_armor() + { + PLR_ARMOR_ID = param1; + if (!(PLR_ARMOR_ID != "none")) return; + CallClientItemEvent(PLR_ARMOR_ID, "barmor_update_vest", GetEntityRace(GetOwner()), GetGender(GetOwner()), "ext_register_armor"); + } + + void ext_dwarf_test() + { + SetModelBody(0, 1); + SetModelBody(1, 2); + SetModelBody(2, 1); + ext_hide_armor(); + } + + void ext_hide_armor() + { + CallExternal(PLR_HELM_ID, "ext_hide"); + } + + void ext_setheadtype() + { + int GENDER_ADJ = 0; + if (PLR_GENDER == "female") + { + if (GetEntityRace(GetOwner()) == "human") + { + GENDER_ADJ += 2; + } + } + PARAM1 += GENDER_ADJ; + SetModelBody(0, param1); + } + + void ext_setmodel() + { + SetModel("dwarf/reference.mdl"); + } + + void ext_setrender() + { + // TODO: setrender PARAM1 + } + + void ext_tod_lock() + { + PLR_TOD_LOCK = param1; + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "lock_tod", PLR_TOD_LOCK); + } + + void ext_viewdist() + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "set_view_dist", param1); + } + + void ext_urdual_slow() + { + PLR_URDUAL_RELEASE_TIME = param1; + } + + void ext_set_gender() + { + PLR_GENDER = GetGender(GetOwner()); + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "set_cl_gender_race", GetGender(GetOwner()), GetEntityRace(GetOwner())); + if (PLR_GENDER == "female") + { + ClientCommand(GetOwner(), "ms_clgender 1"); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 2); + SetModelBody(3, 2); + PLR_SOUND_SWORDREADY = SOUNDSET_HF_SWORDREADY; + PLR_SOUND_SHOUT1 = SOUNDSET_HF_SHOUT1; + PLR_SOUND_JAB1 = SOUNDSET_HF_JAB1; + PLR_SOUND_JAB2 = SOUNDSET_HF_JAB2; + PLR_SOUND_BREATHFAST1 = SOUNDSET_HF_BREATHFAST1; + PLR_SOUND_BREATHFAST2 = SOUNDSET_HF_BREATHFAST2; + PLR_SOUND_BREATHFAST3 = SOUNDSET_HF_BREATHFAST3; + PLR_SOUND_DEATH = SOUNDSET_HF_DEATH; + PLR_SOUND_CHESTHIT1 = SOUNDSET_HF_CHESTHIT1; + PLR_SOUND_STOMACHHIT1 = SOUNDSET_HF_STOMACHHIT1; + PLR_SOUND_ARMHIT1 = SOUNDSET_HF_ARMHIT1; + PLR_SOUND_LEGHIT1 = SOUNDSET_HF_LEGHIT1; + PLR_SOUND_FALLPAIN1 = SOUNDSET_HF_FALLPAIN1; + PLR_SOUND_FALLPAIN2 = SOUNDSET_HF_FALLPAIN2; + PLR_SOUND_FALLPAIN3 = SOUNDSET_HF_FALLPAIN3; + PLR_SOUND_FALLPAIN4 = SOUNDSET_HF_FALLPAIN4; + } + else + { + ClientCommand(GetOwner(), "ms_clgender 0"); + SetModelBody(0, 1); + SetModelBody(1, 1); + SetModelBody(2, 1); + SetModelBody(3, 1); + PLR_SOUND_SWORDREADY = SOUNDSET_HM_SWORDREADY; + PLR_SOUND_SHOUT1 = SOUNDSET_HM_SHOUT1; + PLR_SOUND_JAB1 = SOUNDSET_HM_JAB1; + PLR_SOUND_JAB2 = SOUNDSET_HM_JAB2; + PLR_SOUND_BREATHFAST1 = SOUNDSET_HM_BREATHFAST1; + PLR_SOUND_BREATHFAST2 = SOUNDSET_HM_BREATHFAST2; + PLR_SOUND_BREATHFAST3 = SOUNDSET_HM_BREATHFAST3; + PLR_SOUND_DEATH = SOUNDSET_HM_DEATH; + PLR_SOUND_CHESTHIT1 = SOUNDSET_HM_CHESTHIT1; + PLR_SOUND_STOMACHHIT1 = SOUNDSET_HM_STOMACHHIT1; + PLR_SOUND_ARMHIT1 = SOUNDSET_HM_ARMHIT1; + PLR_SOUND_LEGHIT1 = SOUNDSET_HM_LEGHIT1; + PLR_SOUND_FALLPAIN1 = SOUNDSET_HM_FALLPAIN1; + PLR_SOUND_FALLPAIN2 = SOUNDSET_HM_FALLPAIN2; + PLR_SOUND_FALLPAIN3 = SOUNDSET_HM_FALLPAIN3; + PLR_SOUND_FALLPAIN4 = SOUNDSET_HM_FALLPAIN4; + } + } + + void ext_helm_expar() + { + ClientEvent("update", GetOwner(), GetEntityIndex(PLR_HELM_ID), "game_show", GetEntityRace(GetOwner()), GetGender(GetOwner()), "ext_helm_expar"); + } + + void ext_set_spiral() + { + string SPIRAL_TYPE = param1; + SPIRAL_DMG = param2; + SPIRAL_SKILL = "archery"; + if (SPIRAL_TYPE == "fire") + { + SPIRAL_DMG_TYPE = "fire_effect"; + SPIRAL_SPIRTE_FILE = "rjet1.spr"; + SPIRAL_SPRITE_FRAMES = 5; + SPIRAL_SPRITE_SCALE = 0.75; + SPIRAL_SPRITE_COLOR = Vector3(255, 255, 255); + SPIRAL_GLOW_COLOR = Vector3(255, 0, 0); + } + if (SPIRAL_TYPE == "cold") + { + SPIRAL_DMG_TYPE = "cold_effect"; + SPIRAL_SPIRTE_FILE = "char_breath.spr"; + SPIRAL_SPRITE_FRAMES = 1; + SPIRAL_SPRITE_SCALE = 2.5; + SPIRAL_SPRITE_COLOR = Vector3(255, 255, 255); + SPIRAL_GLOW_COLOR = Vector3(128, 128, 255); + } + if (SPIRAL_TYPE == "lightning") + { + SPIRAL_DMG_TYPE = "lightning_effect"; + SPIRAL_SPIRTE_FILE = "3dmflaora.spr"; + SPIRAL_SPRITE_FRAMES = 1; + SPIRAL_SPRITE_SCALE = 0.5; + SPIRAL_SPRITE_COLOR = Vector3(255, 255, 0); + SPIRAL_GLOW_COLOR = Vector3(255, 255, 0); + } + } + + void ext_bear_mode() + { + if ((PLR_BEAR_MODE)) return; + PLR_BEAR_IMAGE_ID = param1; + PLR_BEAR_MODE = 1; + ext_invis(); + SetScriptFlags(GetOwner(), "add", "bear", "nopush", 1, -1, "none"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 256, 10, 1, 256); + } + + void ext_bear_mode_end() + { + if (!(PLR_BEAR_MODE)) return; + PLR_BEAR_MODE = 0; + ext_visible(); + SetScriptFlags(GetOwner(), "remove", "bear"); + } + + void ext_test() + { + LogDebug("test vent PARAM1 PARAM2 PARAM3 PARAM4"); + } + + void ext_block_weather() + { + PLR_WEATHER_BLOCK = param1; + } + + void ext_stam() + { + DrainStamina(GetOwner()); + } + + void ext_stuck_adj() + { + if (!(GetGameTime() > PLR_NEXT_STUCK_ADJ)) return; + PLR_NEXT_STUCK_ADJ = GetGameTime(); + PLR_NEXT_STUCK_ADJ += 5.0; + string ADJ_ORG = GetEntityOrigin(GetOwner()); + ADJ_ORG += "z"; + string TRACE_START = ADJ_ORG; + string TRACE_END = ADJ_ORG; + TRACE_END += "z"; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (TRACE_LINE != TRACE_END) + { + SendColoredMessage(GetOwner(), "[/STUCK]: Not enough head room to adjust up."); + } + else + { + SetEntityOrigin(GetOwner(), ADJ_ORG); + } + } + + void ext_olof_setstatus() + { + PLR_OLOF_STATUS = param1; + if (param1 == "reset") + { + PLR_OLOF_STATUS = "PLR_OLOF_STATUS"; + } + } + + void ext_reset_model() + { + ext_set_gender(); + ScheduleDelayedEvent(0.1, "ext_setbodytype"); + } + + void ext_invis() + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 1); + CallExternal("all", "ext_render_items", GetEntityIndex(GetOwner()), 5, 0); + } + + void ext_visible() + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + CallExternal("all", "ext_render_items", GetEntityIndex(GetOwner()), 0, 255); + } + + void ext_acid_feaura_activate() + { + if ((PLR_FEAURA)) return; + PLR_FEAURA = 1; + PLR_FEAURA_DOT = param1; + PLR_FEAURA_AOE = param2; + GAME_PVP = "game.pvp"; + ClientEvent("new", "all", "effects/sfx_poison_aura", GetEntityIndex(GetOwner()), PLR_FEAURA_AOE, PLR_PAURA_CL_RATE); + PLR_FEAURA_CLIDX = "game.script.last_sent_id"; + PLR_FEAURA_NEXT_CL = GetGameTime(); + PLR_FEAURA_NEXT_CL += PLR_PAURA_CL_RATE; + acid_feaura_loop(); + } + + void acid_feaura_loop() + { + if (!(PLR_FEAURA)) return; + ScheduleDelayedEvent(1.0, "acid_feaura_loop"); + float GAME_TIME = GetGameTime(); + if (GAME_TIME > PLR_FEAURA_NEXT_CL) + { + ClientEvent("new", "all", "effects/sfx_poison_aura", GetEntityIndex(GetOwner()), PLR_FEAURA_AOE, PLR_PAURA_CL_RATE); + PLR_FEAURA_CLIDX = "game.script.last_sent_id"; + PLR_FEAURA_NEXT_CL = GAME_TIME; + PLR_FEAURA_NEXT_CL += PLR_PAURA_CL_RATE; + } + if (!(IsEntityAlive(GetOwner()))) return; + PLR_FEAURA_SCAN = FindEntitiesInSphere("enemy", PLR_FEAURA_AOE); + if (!(PLR_FEAURA_SCAN != "none")) return; + for (int i = 0; i < GetTokenCount(PLR_FEAURA_SCAN, ";"); i++) + { + acid_feaura_burn(); + } + } + + void acid_feaura_burn() + { + string CUR_TARG = GetToken(PLR_FEAURA_SCAN, i, ";"); + if (!(GetRelationship(CUR_TARG) == "enemy")) return; + if (!(GAME_PVP)) + { + if ((IsValidPlayer(CUR_TARG))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(IS_AFK)) + { + ApplyEffect(CUR_TARG, "effects/dot_acid", 5.0, GetEntityIndex(GetOwner()), PLR_FEAURA_DOT, "spellcasting.affliction"); + } + } + + void ext_acid_feaura_remove() + { + PLR_FEAURA = 0; + ClientEvent("update", "all", PLR_FEAURA_CLIDX, "remove_me"); + } + + void ext_weather_change() + { + if (!(PLR_IN_WORLD)) return; + PLR_WEATHER = param1; + if (G_WEATHER_LOCK != 0) + { + PLR_WEATHER = G_WEATHER_LOCK; + } + else + { + if ((PLR_LOCK_CLEAR)) + { + } + PLR_WEATHER = "clear"; + } + if (PLR_WEATHER == "storm") + { + PLR_WEATHER = "rain_storm"; + } + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "weather_change", PLR_WEATHER); + } + + void ext_weather_force_change() + { + PLR_WEATHER = param1; + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "weather_force_change", param1); + } + + void ext_repel_shield() + { + string L_DUR = param1; + L_DUR("ext_end_repel_shield"); + PLR_REPEL_SHIELD_ACTIVE = 1; + PLR_REPEL_SHIELD_RADIUS = param2; + PLR_REPEL_SHIELD_SPECIAL = param3; + GAME_PVP = "game.pvp"; + loop_repel_shield(); + if (PLR_REPEL_SHIELD_SPECIAL == "darkfire") + { + ClientEvent("new", "all", "effects/sfx_raura", GetEntityIndex(GetOwner()), L_DUR); + PLR_DAURA_CL_IDX = "game.script.last_sent_id"; + // svplaysound: svplaysound 1 10 magic/chant_loop.wav + EmitSound(1, 10, "magic/chant_loop.wav"); + } + } + + void loop_repel_shield() + { + if (!(PLR_REPEL_SHIELD_ACTIVE)) return; + ScheduleDelayedEvent(0.2, "loop_repel_shield"); + PLR_REPEL_SHIELD_TARGETS = FindEntitiesInSphere("enemy", PLR_REPEL_SHIELD_RADIUS); + if (!(PLR_REPEL_SHIELD_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(PLR_REPEL_SHIELD_TARGETS, ";"); i++) + { + affect_targets_repel_shield(); + } + } + + void affect_targets_repel_shield() + { + string CUR_TARG = GetToken(PLR_REPEL_SHIELD_TARGETS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (PLR_REPEL_SHIELD_SPECIAL == "darkfire") + { + string SHADOW_DMG = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + ApplyEffect(CUR_TARG, "effects/dot_dark", 5, GetEntityIndex(GetOwner()), SHADOW_DMG, "swordsmanship"); + } + string TARG_HP = GetEntityHealth(CUR_TARG); + string MY_HP_X = GetEntityMaxHealth(GetOwner()); + MY_HP_X *= 4; + if (TARG_HP < 1500) + { + int DO_PUSH = 1; + } + if (TARG_HP < MY_HP_X) + { + int DO_PUSH = 1; + } + if (!(DO_PUSH)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + if (GetGameTime() > NEXT_REPEL_SHIELD_SOUND) + { + NEXT_REPEL_SHIELD_SOUND = GetGameTime(); + NEXT_REPEL_SHIELD_SOUND += 0.5; + EmitSound(GetOwner(), 0, "doors/aliendoor3.wav", 5); + } + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + + void ext_end_repel_shield() + { + if (PLR_REPEL_SHIELD_SPECIAL == "darkfire") + { + ClientEvent("update", "all", PLR_DAURA_CL_IDX, "remove_fx"); + // svplaysound: svplaysound 1 0 magic/chant_loop.wav + EmitSound(1, 0, "magic/chant_loop.wav"); + } + PLR_REPEL_SHIELD_ACTIVE = 0; + } + + void ext_set_dark_level() + { + PLR_DARK_LEVEL = param1; + SetPlayerQuestData(GetOwner(), "dl"); + CallExternal(GetOwner(), "player_calc_holy_resistance"); + } + + void ext_tossprojectile() + { + TossProjectile(param1, param2, param3, param4, param5, param6, param7, param8, param9); + PLR_LAST_PROJECTILE = GetEntityIndex("ent_lastprojectile"); + } + + void ext_sfaura_start() + { + PLR_SFAURA_SIZE = 65; + PLR_SFAURA_ITEM = param1; + GAME_PVP = "game.pvp"; + PLR_SFAURA_DOT = GetSkillLevel(GetOwner(), "spellcasting.fire"); + PLR_SFAURA_DOT *= 0.5; + PLR_SFAURA_MAXPUSH = GetEntityMaxHealth(GetOwner()); + PLR_SFAURA_MAXPUSH *= 4; + string SIZE_RATIO = PLR_SFAURA_SIZE; + SIZE_RATIO /= PLR_SFAURA_MAXSIZE; + ClientEvent("new", "all", "effects/sfx_sfaura", GetEntityIndex(GetOwner()), SIZE_RATIO, 20.0); + PLR_SFAURA_CL_IDX = "game.script.last_sent_id"; + // svplaysound: svplaysound 1 10 ambience/rocketrumble1.wav + EmitSound(1, 10, "ambience/rocketrumble1.wav"); + PLR_SFAURA_ACTIVE = 1; + sfaura_loop(); + ScheduleDelayedEvent(20.0, "sfaura_fx_refresh"); + } + + void sfaura_loop() + { + if (!(PLR_SFAURA_ACTIVE)) return; + if (GetEntityMP(GetOwner()) <= 10) + { + SendColoredMessage(GetOwner(), "Shadowfire Blade: Insufficient mana for Shadowfire Aura"); + ext_sfaura_end(); + } + if ((EXIT_SUB)) return; + ScheduleDelayedEvent(0.2, "sfaura_loop"); + GiveMP(GetOwner()); + if (PLR_SFAURA_SIZE < PLR_SFAURA_MAXSIZE) + { + PLR_SFAURA_SIZE += PLR_SFAURA_GROWTH_RATE; + } + if (PLR_SFAURA_SIZE > PLR_SFAURA_MAXSIZE) + { + PLR_SFAURA_SIZE = PLR_SFAURA_MAXSIZE; + } + PLR_SFAURA_TARGS = FindEntitiesInSphere("enemy", PLR_SFAURA_SIZE); + if (!(PLR_SFAURA_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(PLR_SFAURA_TARGS, ";"); i++) + { + sfaura_affect_targets(); + } + } + + void sfaura_affect_targets() + { + string CUR_TARG = GetToken(PLR_SFAURA_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = GetEntityOrigin(CUR_TARG); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (!(TRACE_LINE == TRACE_END)) return; + ApplyEffect(CUR_TARG, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), PLR_SFAURA_DOT, "swordsmanship"); + float RESIST_ROLL = 1.0; + RESIST_ROLL -= Random(0, 1.0); + string FIRE_RESIST = /* TODO: $get_takedmg */ $get_takedmg(CUR_TARG, "fire"); + if (!(RESIST_ROLL < FIRE_RESIST)) return; + if (GetGameTime() > PLR_NEXT_FSAURA_SOUND) + { + PLR_NEXT_FSAURA_SOUND = GetGameTime(); + PLR_NEXT_FSAURA_SOUND += 1.0; + EmitSound(GetOwner(), 0, "ambience/flameburst1.wav", 5); + } + if (GetEntityHealth(CUR_TARG) < 1500) + { + int DO_PUSH = 1; + } + if (GetEntityHealth(CUR_TARG) < PLR_SFAURA_MAXPUSH) + { + int DO_PUSH = 1; + } + if (!(DO_PUSH)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + + void sfaura_fx_refresh() + { + if (!(PLR_SFAURA_ACTIVE)) return; + string SIZE_RATIO = PLR_SFAURA_SIZE; + SIZE_RATIO /= PLR_SFAURA_MAXSIZE; + // svplaysound: svplaysound 1 10 ambience/rocketrumble1.wav + EmitSound(1, 10, "ambience/rocketrumble1.wav"); + ClientEvent("new", "all", "effects/sfx_sfaura", GetEntityIndex(GetOwner()), SIZE_RATIO, 20.0); + PLR_SFAURA_CL_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(20.0, "sfaura_fx_refresh"); + } + + void ext_sfaura_end() + { + // svplaysound: svplaysound 1 0 ambience/rocketrumble1.wav + EmitSound(1, 0, "ambience/rocketrumble1.wav"); + PLR_SFAURA_ACTIVE = 0; + ClientEvent("update", "all", PLR_SFAURA_CL_IDX, "remove_fx"); + if (param1 != "remote") + { + CallExternal(PLR_SFAURA_ITEM, "ext_faura_ended"); + } + } + + void ext_toss_spear() + { + PLR_SPEAR_CHARGE_LEVEL = param1; + TossProjectile(param2, param3, param4, param5, param6, param7, param8); + PLR_LAST_PROJECTILE = GetEntityIndex("ent_lastprojectile"); + } + + void ext_holy_aura() + { + if ((PLR_HAURA_ACTIVE)) return; + string L_DUR = param1; + L_DUR("ext_end_holy_aura"); + PLR_HAURA_ACTIVE = 1; + PLR_HAURA_RADIUS = param2; + PLR_HAURA_POWER = param3; + loop_holy_aura(); + // svplaysound: svplaysound 2 10 ambience/alien_powernode.wav + EmitSound(2, 10, "ambience/alien_powernode.wav"); + string L_AURA_SIZE = PLR_HAURA_RADIUS; + L_AURA_SIZE *= 1.5; + int L_AURA_MDL_OFS = 25; + if (PLR_HAURA_RADIUS > 256) + { + L_AURA_MDL_OFS += 1; + } + ClientEvent("new", "all", "effects/sfx_seal_follow", GetEntityIndex(GetOwner()), 10.0, L_AURA_MDL_OFS, 1, Vector3(255, 200, 0), L_AURA_SIZE); + PLR_HAURA_CL_ID = "game.script.last_sent_id"; + ScheduleDelayedEvent(10.0, "holy_aura_refresh"); + } + + void holy_aura_refresh() + { + if (!(PLR_HAURA_ACTIVE)) return; + string L_AURA_SIZE = PLR_HAURA_RADIUS; + L_AURA_SIZE *= 1.5; + int L_AURA_MDL_OFS = 25; + if (PLR_HAURA_RADIUS > 256) + { + L_AURA_MDL_OFS += 1; + } + ClientEvent("new", "all", "effects/sfx_seal_follow", GetEntityIndex(GetOwner()), 10.0, L_AURA_MDL_OFS, 1, Vector3(255, 200, 0), L_AURA_SIZE); + PLR_HAURA_CL_ID = "game.script.last_sent_id"; + ScheduleDelayedEvent(10.0, "holy_aura_refresh"); + } + + void loop_holy_aura() + { + if (!(PLR_HAURA_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "loop_holy_aura"); + PLR_HAURA_TARGETS = FindEntitiesInSphere("any", PLR_HAURA_RADIUS); + if (!(PLR_HAURA_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(PLR_HAURA_TARGETS, ";"); i++) + { + affect_targets_holy_aura(); + } + } + + void affect_targets_holy_aura() + { + string CUR_TARG = GetToken(PLR_HAURA_TARGETS, i, ";"); + if (GetRelationship(CUR_TARG) == "ally") + { + int HEAL_TARGET = 1; + } + if ((IsValidPlayer(CUR_TARG))) + { + int HEAL_TARGET = 1; + } + if ((GetEntityProperty(CUR_TARG, "scriptvar"))) + { + if (!(IsValidPlayer(CUR_TARG))) + { + } + int HEAL_TARGET = 0; + } + if ((HEAL_TARGET)) + { + ApplyEffect(CUR_TARG, "effects/effect_rejuv2", 0, PLR_HAURA_POWER, GetEntityIndex(GetOwner())); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string NME_UNHOLY = /* TODO: $get_takedmg */ $get_takedmg(CUR_TARG, "holy"); + if (!(NME_UNHOLY > 0)) return; + if (!(/* TODO: $can_damage */ $can_damage(CUR_TARG, GetOwner()))) return; + string TARG_HP = GetEntityHealth(CUR_TARG); + string MY_HP_X = GetSkillLevel(GetOwner(), "spellcasting.divination"); + MY_HP_X *= 100; + if (TARG_HP < 1500) + { + int DO_PUSH = 1; + } + if (TARG_HP < MY_HP_X) + { + int DO_PUSH = 1; + } + if (!(DO_PUSH)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + if (GetGameTime() > NEXT_HAURA_SOUND) + { + NEXT_HAURA_SOUND = GetGameTime(); + NEXT_HAURA_SOUND += 0.5; + EmitSound(GetOwner(), 0, "doors/aliendoor3.wav", 5); + } + int PUSH_STR = 300; + PUSH_STR *= NME_UNHOLY; + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, PUSH_STR, 0))); + } + + void ext_end_holy_aura() + { + if ((PLR_HAURA_ACTIVE)) + { + // svplaysound: svplaysound 2 0 ambience/alien_powernode.wav + EmitSound(2, 0, "ambience/alien_powernode.wav"); + ClientEvent("update", "all", PLR_HAURA_CL_ID, "remove_fx"); + } + PLR_HAURA_ACTIVE = 0; + } + + void ext_setskin() + { + SetProp(GetOwner(), "skin", param1); + } + + void ext_pole_lshield() + { + if ((PLR_PLSHIELD_ACTIVE)) return; + PLR_PLSHIELD_ACTIVE = 1; + PLR_PLSHIELD_DOT = GetSkillLevel(GetOwner(), "spellcasting.lightning"); + PLR_PLSHIELD_DOT *= 0.25; + PLR_PLSHIELD_PUSH = 500; + GAME_PVP = "game.pvp"; + ClientEvent("new", "all", "items/polearms_ph_spin_cl", GetEntityIndex(GetOwner())); + PLR_PLSHIELD_CL_IDX = "game.script.last_sent_id"; + // svplaysound: svplaysound 1 10 magic/bolt_loop.wav + EmitSound(1, 10, "magic/bolt_loop.wav"); + pole_lshield_loop(); + } + + void pole_lshield_loop() + { + if (!(PLR_PLSHIELD_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "pole_lshield_loop"); + GiveMP(GetOwner()); + if (GetEntityMP(GetOwner()) <= 1) + { + SendColoredMessage(GetOwner(), "Stormpharaoh's Lance: Insufficient mana for Lightning Shield"); + ext_pole_lshield_end("mana"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string SCAN_LOC = GetEntityOrigin(GetOwner()); + OWNER_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + SCAN_LOC += /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, 64, 0)); + PLR_PLSHIELD_TARGETS = FindEntitiesInSphere("enemy", 64); + if (!(PLR_PLSHIELD_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(PLR_PLSHIELD_TARGETS, ";"); i++) + { + pole_lshield_affect_targets(); + } + } + + void pole_lshield_affect_targets() + { + string CUR_TARGET = GetToken(PLR_PLSHIELD_TARGETS, i, ";"); + if (!(GAME_PVP)) + { + if ((IsValidPlayer(CUR_TARGET))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string PUSH_STR = PLR_PLSHIELD_PUSH; + PUSH_STR *= /* TODO: $get_takedmg */ $get_takedmg(CUR_TARGET, "lightning"); + AddVelocity(CUR_TARGET, /* TODO: $relpos */ $relpos(Vector3(0, OWNER_YAW, 0), Vector3(0, PUSH_STR, 10))); + ApplyEffect(CUR_TARGET, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), PLR_PLSHIELD_DOT); + if (GetGameTime() > NEXT_PLSHIELD_SOUND) + { + NEXT_PLSHIELD_SOUND = GetGameTime(); + NEXT_PLSHIELD_SOUND += 0.5; + EmitSound(GetOwner(), 2, "magic/bolt_end.wav", 5); + } + } + + void ext_pole_lshield_end() + { + if ((PLR_PLSHIELD_ACTIVE)) + { + // svplaysound: svplaysound 1 0 magic/bolt_loop.wav + EmitSound(1, 0, "magic/bolt_loop.wav"); + ClientEvent("update", "all", PLR_PLSHIELD_CL_IDX, "end_fx"); + } + PLR_PLSHIELD_ACTIVE = 0; + } + + void svilla_music() + { + LogDebug("svilla_music G_SORCV_FRIENDLY"); + if ((G_SORCV_FRIENDLY)) + { + // TODO: playmp3 ent_me combat PathAnubis.mp3 + } + else + { + // TODO: playmp3 ent_me combat crimson_field.mp3 + } + } + + void svilla_music2() + { + LogDebug("svilla_music2 G_SORCV_FRIENDLY"); + if ((G_SORCV_FRIENDLY)) + { + // TODO: playmp3 ent_me combat haunted_desert.mp3 + } + else + { + // TODO: playmp3 ent_me combat crimson_field.mp3 + } + } + + void ext_stop_music() + { + // TODO: playmp3 ent_me stop + } + + void ext_svilla_hostile() + { + SetGlobalVar("G_SORCV_FRIENDLY", 0); + } + + void ext_weather_set_clear() + { + PLR_LOCK_CLEAR = 1; + ext_weather_change("clear"); + } + + void ext_weather_manual_change() + { + PLR_LOCK_CLEAR = 0; + string NEW_WEATHER = param1; + ext_weather_change(NEW_WEATHER); + } + + void trig_srocv_player_on_shelf() + { + string ALCH_ID = FindEntityByName("sorc_alchie"); + CallExternal(ALCH_ID, "ext_player_on_shelf"); + } + + void trig_srocv_player_on_table() + { + string ALCH_ID = FindEntityByName("sorc_alchie"); + CallExternal(ALCH_ID, "ext_player_on_table"); + } + + void ext_bravery() + { + SendColoredMessage(GetOwner(), "You will take no penalty for your next death"); + PLR_BRAVERY = 1; + EmitSound(GetOwner(), 0, "voices/human/male_guard_hail.wav", 10); + } + + void ext_dmg_adjust() + { + if (param1 == "fire") + { + PLR_DMG_ADJUST_FIRE = param2; + } + } + + void ext_dmg_add_dot() + { + if (param1 == "fire") + { + PLR_ADD_FIRE_DOT = param2; + } + } + + void trig_damage() + { + string TRIG_NAME = param1; + string TRIG_DMG = param2; + string TRIG_DMG_TYPE = param3; + TRIG_DMG_TYPE += "_effect"; + CallExternal(GAME_MASTER, "gm_setname", TRIG_NAME); + XDoDamage(GetOwner(), "direct", TRIG_DMG, 1.0, GAME_MASTER, GAME_MASTER, "none", TRIG_DMG_TYPE); + } + + void ext_playrandomsound() + { + if (param5 == "PARAM5") + { + // PlayRandomSound from: param2, param3, param4 + array sounds = {param2, param3, param4}; + EmitSound(GetOwner(), param1, sounds[RandomInt(0, sounds.length() - 1)], 10); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (param6 == "PARAM6") + { + // PlayRandomSound from: param2, param3, param4, param5 + array sounds = {param2, param3, param4, param5}; + EmitSound(GetOwner(), param1, sounds[RandomInt(0, sounds.length() - 1)], 10); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (param7 == "PARAM7") + { + // PlayRandomSound from: param2, param3, param4, param5, param6 + array sounds = {param2, param3, param4, param5, param6}; + EmitSound(GetOwner(), param1, sounds[RandomInt(0, sounds.length() - 1)], 10); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (param8 == "PARAM8") + { + // PlayRandomSound from: param2, param3, param4, param5, param6, param7 + array sounds = {param2, param3, param4, param5, param6, param7}; + EmitSound(GetOwner(), param1, sounds[RandomInt(0, sounds.length() - 1)], 10); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (param9 == "PARAM9") + { + // PlayRandomSound from: param2, param3, param4, param5, param6, param7, param8 + array sounds = {param2, param3, param4, param5, param6, param7, param8}; + EmitSound(GetOwner(), param1, sounds[RandomInt(0, sounds.length() - 1)], 10); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + // PlayRandomSound from: param2, param3, param4, param5, param6, param7, param8, param9 + array sounds = {param2, param3, param4, param5, param6, param7, param8, param9}; + EmitSound(GetOwner(), param1, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void ext_orcfor_boss_musak() + { + if (param1 == 1) + { + PLR_ORCFOR_MUSIC = 1; + // TODO: playmp3 ent_me combat seruboss1.mp3 + } + if (param1 == 2) + { + if (PLR_ORCFOR_MUSIC != 2) + { + } + PLR_ORCFOR_MUSIC = 2; + // TODO: playmp3 ent_me combat seruboss2.mp3 + } + if (param1 == 3) + { + string MY_ORG = GetEntityOrigin(GetOwner()); + string BOSS_ORG = param2; + if (Distance(MY_ORG, BOSS_ORG) < 768) + { + } + // TODO: playmp3 ent_me stop + } + } + + void ext_gabe_musak() + { + if (param1 == "stop") + { + // TODO: playmp3 ent_me stop + } + else + { + // TODO: playmp3 ent_me combat gabe1.mp3 + } + } + + void ext_changelevel_prep() + { + ext_weather_force_change("clear"); + } + + void ext_bank_lock() + { + ApplyEffect(GetOwner(), "effects/effect_templock"); + ScheduleDelayedEvent(1.0, "ext_bank_lock_release"); + } + + void ext_bank_lock_release() + { + CallExternal(GetOwner(), "ext_end_templock"); + } + + void ext_alance_init() + { + GAME_PVP = "game.pvp"; + AFL_BURST_DOT = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + AFL_BURST_DOT *= 0.75; + } + + void alance_dodamage() + { + if (!(param1)) return; + if (!(GAME_PVP)) + { + if ((IsValidPlayer(param2))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(param2, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), AFL_BURST_DOT); + string TARG_HP = GetEntityHealth(param2); + string MY_HP_X = GetEntityMaxHealth(GetOwner()); + MY_HP_X *= 4; + if (TARG_HP < 1500) + { + int DO_PUSH = 1; + } + if (TARG_HP < MY_HP_X) + { + int DO_PUSH = 1; + } + if (!(DO_PUSH)) return; + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + } + + void ext_drainstamina() + { + DrainStamina(GetOwner()); + } + + void ext_clbeam() + { + string BEAM_TARG = FindEntitiesInSphere("enemy", 1024); + string BEAM_TARG = GetToken(BEAM_TARG, 0, ";"); + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "set_test_beam", GetEntityIndex(GetOwner()), GetEntityIndex(BEAM_TARG)); + } + + void ext_repel_burst() + { + string AOE_DMG = param1; + string AOE_RAD = param2; + string AOE_FAL = param3; + string DMG_TYPE = param4; + string DMG_SKILL = param5; + PLR_REPEL_PUSH_STR = param6; + PLR_REPEL_MAX_HP = param7; + PLR_REPEL_ORG = param8; + if ((PLR_REPEL_ORG).findFirst("(") == 0) + { + PLR_REPEL_ORG = GetEntityOrigin(GetOwner()); + } + XDoDamage(PLR_REPEL_ORG, AOE_RAD, AOE_DMG, AOE_FAL, GetOwner(), GetOwner(), DMG_SKILL, DMG_TYPE, "dmgevent:repel"); + } + + void repel_dodamage() + { + if (!(param1)) return; + ext_repel(param2, PLR_REPEL_ORG, PLR_REPEL_PUSH_STR, 110, PLR_REPEL_MAX_HP, 0); + } + + void ext_repel() + { + string L_TARG = param1; + string L_TARG_ORG = GetEntityOrigin(param1); + string L_ORG = param2; + string L_PUSHVEL = param3; + string L_VPUSHVEL = param4; + string L_MAXHP = param5; + string L_OVERRIDE = param6; + LogDebug("ext_repel vel L_PUSHVEL max L_MAXHP vs. GetEntityHealth(L_TARG) [ GetEntityName(L_TARG) ]"); + if (L_MAXHP > 0) + { + string L_TARG_HP = GetEntityHealth(L_TARG); + if (L_TARG_HP > L_MAXHP) + { + return; + } + if (L_TARG_HP > (L_MAXHP * 0.5)) + { + } + int L_RATIO = 1; + L_RATIO -= (L_TARG_HP / L_MAXHP); + L_PUSHVEL *= L_RATIO; + } + LogDebug("ext_repel fvel L_PUSHVEL"); + string L_NEW_ANG = /* TODO: $angles */ $angles(L_ORG, L_TARG_ORG); + if ((L_OVERRIDE)) + { + AddVelocity(L_TARG, /* TODO: $relvel */ $relvel(Vector3(0, L_NEW_ANG, 0), Vector3(0, L_PUSHVEL, L_VPUSHVEL))); + } + else + { + AddVelocity(L_TARG, /* TODO: $relvel */ $relvel(Vector3(0, L_NEW_ANG, 0), Vector3(0, L_PUSHVEL, L_VPUSHVEL))); + } + } + + void ext_lcod() + { + PLR_LCOD_POS = param1; + PLR_LCOD_DMG = param2; + PLR_LCOD_DUR = param3; + string CL_POS = PLR_LCOD_POS; + CL_POS = "z"; + EmitSound3D("magic/pulsemachine_noloop.wav", 8, PLR_LCOD_POS, 0.8, 5, 100); + PLR_NEXT_LCOD_SOUND = GetGameTime(); + PLR_NEXT_LCOD_SOUND += 1.88; + ClientEvent("new", "all", "effects/sfx_cod", CL_POS, PLR_LCOD_DUR, 3, 98); + PLR_LCOD_ACTIVE = 1; + lcod_loop(); + PLR_LCOD_DUR("lcod_end"); + } + + void lcod_loop() + { + if (!(PLR_LCOD_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "lcod_loop"); + XDoDamage(PLR_LCOD_POS, PLR_LCOD_AOE, PLR_LCOD_DMG, 0, GetOwner(), GetOwner(), "spellcasting.affliction", "dark_effect"); + if (!(GetGameTime() > PLR_NEXT_LCOD_SOUND)) return; + EmitSound3D("magic/pulsemachine_noloop.wav", 8, PLR_LCOD_POS, 0.8, 5, 100); + PLR_NEXT_LCOD_SOUND = GetGameTime(); + PLR_NEXT_LCOD_SOUND += 1.88; + } + + void lcod_end() + { + PLR_LCOD_ACTIVE = 0; + } + + void ext_gcod() + { + PLR_GCOD_POS = param1; + PLR_GCOD_DMG = param2; + PLR_GCOD_DUR = param3; + string CL_POS = PLR_GCOD_POS; + CL_POS = "z"; + EmitSound3D("magic/pulsemachine_noloop.wav", 10, PLR_GCOD_POS, 0.8, 3, 100); + PLR_NEXT_GCOD_SOUND = GetGameTime(); + PLR_NEXT_GCOD_SOUND += 1.88; + ClientEvent("new", "all", "effects/sfx_cod", CL_POS, PLR_GCOD_DUR, 5, 196); + PLR_GCOD_ACTIVE = 1; + gcod_loop(); + PLR_GCOD_DUR("gcod_end"); + } + + void gcod_loop() + { + if (!(PLR_GCOD_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "gcod_loop"); + XDoDamage(PLR_GCOD_POS, PLR_GCOD_AOE, PLR_GCOD_DMG, 0, GetOwner(), GetOwner(), "spellcasting.affliction", "dark_effect"); + if (!(GetGameTime() > PLR_NEXT_GCOD_SOUND)) return; + EmitSound3D("magic/pulsemachine_noloop.wav", 10, PLR_GCOD_POS, 0.8, 3, 100); + PLR_NEXT_GCOD_SOUND = GetGameTime(); + PLR_NEXT_GCOD_SOUND += 1.88; + } + + void gcod_end() + { + PLR_GCOD_ACTIVE = 0; + } + + void ext_wraith_active() + { + PLR_WRAITH_ACTIVE = param1; + } + + void ext_fissure() + { + string MY_YAW = GetEntityProperty(GetOwner(), "viewangles"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_YAW); + FISSURE_YAW = MY_YAW; + FISSURE_START = GetEntityOrigin(GetOwner()); + FISSURE_END = FISSURE_START; + FISSURE_END += /* TODO: $relpos */ $relpos(Vector3(0, FISSURE_YAW, 0), Vector3(0, 768, 0)); + FISSURE_END = "z"; + FISSURE_END += "z"; + string TRACE_LINE = TraceLine(FISSURE_START, FISSURE_END); + if ((G_DEVELOPER_MODE)) + { + Effect("beam", "point", "lgtning.spr", 10, FISSURE_START, FISSURE_END, Vector3(255, 0, 255), 255, 0, 10); + } + FISSURE_LENGTH = Distance(FISSURE_START, FISSURE_END); + FISSURE_COUNT = 0; + FISSURE_ACTIVE = 1; + FISSURE_DMG = GetSkillLevel(GetOwner(), "spellcasting.fire"); + int NO_ROCKS = 0; + if (G_FISSURES == "G_FISSURES") + { + SetGlobalVar("G_FISSURES", 0); + } + G_FISSURES += 1; + if (G_FISSURES > 1) + { + int NO_ROCKS = 1; + } + ClientEvent("new", "all", "effects/sfx_fissure", FISSURE_START, FISSURE_YAW, FISSURE_END, FISSURE_LENGTH, NO_ROCKS); + FISSURE_COUNT = 0; + FISSURE_MAX_COUNT = (FISSURE_LENGTH / 78); + if (FISSURE_MAX_COUNT < 1) + { + FISSURE_MAX_COUNT = 1; + } + FISSURE_ORG = FISSURE_START; + FISSURE_DIR = (FISSURE_END - FISSURE_ORG).Normalize(); + fissure_loop(); + } + + void fissure_loop() + { + FISSURE_COUNT += 1; + string L_FISSURE_CHECK_POS = FISSURE_ORG; + string L_FISSURE_MOVEAMT = FISSURE_DIR; + L_FISSURE_MOVEAMT *= (78 * FISSURE_COUNT); + L_FISSURE_CHECK_POS += L_FISSURE_MOVEAMT; + L_FISSURE_CHECK_POS += "z"; + L_FISSURE_CHECK_POS = "z"; + XDoDamage(L_FISSURE_CHECK_POS, 78, FISSURE_DMG, 1.0, GetOwner(), GetOwner(), "spellcasting.fire", "fire_effect", "dmgevent:fissure"); + if (FISSURE_COUNT < FISSURE_MAX_COUNT) + { + ScheduleDelayedEvent(0.20, "fissure_loop"); + } + else + { + G_FISSURES -= 1; + } + if ((G_DEVELOPER_MODE)) + { + string L_VEC_UP = L_FISSURE_CHECK_POS; + L_VEC_UP += "z"; + Effect("beam", "point", "lgtning.spr", 10, L_FISSURE_CHECK_POS, L_VEC_UP, Vector3(255, 0, 255), 255, 0, 5); + } + } + + void fissure_dodamage() + { + if (!(param1)) return; + if (!(GAME_PVP)) + { + if ((IsValidPlayer(param2))) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetRelationship(GetOwner()) == "enemy")) return; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), FISSURE_DMG); + string TARG_HP = GetEntityHealth(param2); + string MAX_HP_PUSH = GetEntityMaxHealth(GetOwner()); + MAX_HP_PUSH *= 3; + if (MAX_HP_PUSH < 2000) + { + int MAX_HP_PUSH = 2000; + } + if (!(TARG_HP < MAX_HP_PUSH)) return; + int RND_RL = RandomInt(1, 2); + if (RND_RL == 1) + { + int RND_RL = 400; + } + if (RND_RL == 2) + { + int RND_RL = -400; + } + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, FISSURE_YAW, 0), Vector3(RND_RL, 0, 110))); + } + + void ext_summon_unique() + { + if (PLR_UNIQUE_SUMMONS.length() > 0) PLR_UNIQUE_SUMMONS += ";"; + PLR_UNIQUE_SUMMONS += param1; + } + + void ext_unsummon_unique() + { + string TOKEN_IDX = FindToken(PLR_UNIQUE_SUMMONS, param1, ";"); + RemoveToken(PLR_UNIQUE_SUMMONS, TOKEN_IDX, ";"); + } + + void ext_epilepsy_time_begin() + { + // TODO: hud.addimgicon ent_me bepilepsy2 bepilepsy2 15 20 75 60 0.25 + PLR_EPILEPSY_ACTIVE = 1; + PLR_EPILEPSY_COUNT = 0; + PLR_EPILEPSY_DELAY = 0.5; + // TODO: playmp3 ent_me combat b-b-b-beetlejuice.mp3 + ScheduleDelayedEvent(0.25, "epilepsy_loop"); + // TODO: hud.addimgicon ent_me bepilepsy1 bepilepsy1 15 20 75 60 4.0 + } + + void epilepsy_loop() + { + if (!(PLR_EPILEPSY_ACTIVE)) return; + PLR_EPILEPSY_DELAY("epilepsy_loop"); + string L_DUR = PLR_EPILEPSY_DELAY; + L_DUR *= 0.5; + // TODO: hud.addimgicon ent_me bepilepsy2 bepilepsy2 15 20 75 60 L_DUR + PLR_EPILEPSY_COUNT += 0.5; + if (PLR_EPILEPSY_COUNT > 4) + { + // TODO: hud.addimgicon ent_me bepilepsy1 bepilepsy1 15 20 75 60 1.0 + PLR_EPILEPSY_DELAY = 0.05; + } + if (PLR_EPILEPSY_COUNT > 25) + { + PLR_EPILEPSY_ACTIVE = 0; + } + } + + void ext_epilepsy_time_end() + { + // TODO: playmp3 ent_me combat UndeadX1Fortress.mp3 + } + + void ext_summon_register_pet() + { + if (PLR_ACTIVE_PETS == "PLR_ACTIVE_PETS") + { + PLR_ACTIVE_PETS = ""; + } + if (PLR_ACTIVE_PET_TYPES == "PLR_ACTIVE_PET_TYPES") + { + PLR_ACTIVE_PET_TYPES = ""; + } + if (PLR_ACTIVE_PETS.length() > 0) PLR_ACTIVE_PETS += ";"; + PLR_ACTIVE_PETS += GetEntityIndex(param1); + if (PLR_ACTIVE_PET_TYPES.length() > 0) PLR_ACTIVE_PET_TYPES += ";"; + PLR_ACTIVE_PET_TYPES += GetEntityProperty(param1, "scriptvar"); + if (PLR_N_ACTIVE_PETS == "PLR_N_ACTIVE_PETS") + { + PLR_N_ACTIVE_PETS = 1; + } + else + { + PLR_N_ACTIVE_PETS += 1; + } + } + + void ext_summon_pets_new() + { + PLR_SUMMON_MENU_DISABLE = GetGameTime(); + PLR_SUMMON_MENU_DISABLE += 5.0; + if (PLR_ACTIVE_PETS == "PLR_ACTIVE_PETS") + { + PLR_ACTIVE_PETS = ""; + } + if (PLR_ACTIVE_PET_TYPES == "PLR_ACTIVE_PET_TYPES") + { + PLR_ACTIVE_PET_TYPES = ""; + } + string SUMMON_SCRIPT = "monsters/companion/"; + SUMMON_SCRIPT += param2; + string MY_YAW = GetEntityProperty(GetOwner(), "viewangles"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_YAW); + string SUMMON_POS = GetEntityOrigin(GetOwner()); + SUMMON_POS += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 128, 0)); + SUMMON_POS = "z"; + SpawnNPC(SUMMON_SCRIPT, SUMMON_POS, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + string reg.npcmove.endpos = SUMMON_POS; + reg.npcmove.endpos += "z"; + int reg.npcmove.testonly = 0; + NpcMove(m_hLastCreated, "none"); + if ("game.ret.npcmove.dist" <= 0) + { + PLR_SUMMON_MENU_DISABLE = GetGameTime(); + SendColoredMessage(GetOwner(), "You cannot summon pet here"); + DeleteEntity(m_hLastCreated); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (PLR_ACTIVE_PETS.length() > 0) PLR_ACTIVE_PETS += ";"; + PLR_ACTIVE_PETS += GetEntityIndex(m_hLastCreated); + if (PLR_ACTIVE_PET_TYPES.length() > 0) PLR_ACTIVE_PET_TYPES += ";"; + PLR_ACTIVE_PET_TYPES += GetEntityProperty(m_hLastCreated, "scriptvar"); + if (PLR_N_ACTIVE_PETS == "PLR_N_ACTIVE_PETS") + { + PLR_N_ACTIVE_PETS = 1; + } + else + { + PLR_N_ACTIVE_PETS += 1; + } + } + + void ext_unsummon_pets_new() + { + PLR_SUMMON_MENU_DISABLE = GetGameTime(); + PLR_SUMMON_MENU_DISABLE += 5.0; + string PET_ID = param2; + string PET_IDX = FindToken(PLR_ACTIVE_PETS, PET_ID, ";"); + RemoveToken(PLR_ACTIVE_PETS, PET_IDX, ";"); + string PET_TYPE = GetEntityProperty(PET_ID, "scriptvar"); + string PET_TYPE_IDX = FindToken(PLR_ACTIVE_PET_TYPES, PET_TYPE, ";"); + RemoveToken(PLR_ACTIVE_PET_TYPES, PET_TYPE_IDX, ";"); + PLR_N_ACTIVE_PETS -= 1; + if ((param3)) return; + CallExternal(PET_ID, "companion_unsummon"); + } + + void ext_ice_staff_on() + { + // svplaysound: svplaysound 2 10 magic/freezeray_loop.wav + EmitSound(2, 10, "magic/freezeray_loop.wav"); + } + + void ext_ice_staff_off() + { + // svplaysound: svplaysound 2 0 magic/freezeray_loop.wav + EmitSound(2, 0, "magic/freezeray_loop.wav"); + } + + void ext_register_fists() + { + LogDebug("ext_register_fists"); + PLR_FISTS_ID = param1; + } + + void ext_lesser_leadfoot() + { + SetDamageResistance("stun", param1); + PLR_LESSER_LEADFOOT = 1; + PLR_LESSER_LEADFOOT_STUN = param1; + string L_STR = (PLR_LESSER_LEADFOOT_STUN * 100); + int L_STR = int((100 - L_STR)); + if (!(GetEntityProperty(GetOwner(), "nopush"))) + { + SendColoredMessage(GetOwner(), "Your stun resistance is now " + L_STR); + } + } + + void ext_delay_playsound() + { + PLR_DEL_PLAYSOUND_CHAN = param2; + PLR_DEL_PLAYSOUND_VOL = param3; + PLR_DEL_PLAYSOUND_WAV = param4; + PARAM1("ext_delay_playsound2"); + } + + void ext_delay_playsound2() + { + EmitSound(GetOwner(), PLR_DEL_PLAYSOUND_CHAN, PLR_DEL_PLAYSOUND_WAV, PLR_DEL_PLAYSOUND_VOL); + } + + void ext_tosscre() + { + PLR_CRE_HAND = param1; + PLR_CRE_TYPE = param2; + if (PLR_CRE_HAND == 1) + { + string L_OFS = /* TODO: $relpos */ $relpos(20, 20, 18); + } + else + { + string L_OFS = /* TODO: $relpos */ $relpos(-20, 20, 18); + } + TossProjectile("proj_crescent", L_OFS, "none", 200, 0, 0, "none"); + PLR_LAST_PROJECTILE = GetEntityIndex("ent_lastprojectile"); + } + + void ext_set_glow() + { + PLR_HAS_GLOW = param1; + IR_GLOWING = param1; + if ((PLR_HAS_GLOW)) return; + ScheduleDelayedEvent(0.1, "restore_item_lights"); + } + + void restore_item_lights() + { + CallExternal("all", "ext_restore_item_lights"); + } + + void ext_teleportfx1() + { + ScheduleDelayedEvent(0.1, "ext_teleportfx1_delay"); + } + + void ext_teleportfx1_delay() + { + string MY_FEET = GetEntityOrigin(GetOwner()); + MY_FEET = "z"; + ClientEvent("update", "all", "const.localplayer.scriptID", "cl_tele1_fx", MY_FEET); + } + + void ext_teleportfx2() + { + EmitSound(GetOwner(), 0, "debris/beamstart8.wav", 10); + } + + void extsoc_show_scores() + { + LogDebug("extsoc_show_scores"); + string L_POINTS_RED = param1; + string L_POINTS_BLUE = param2; + float L_SPR_DUR = 3.0; + if (L_POINTS_RED == 5) + { + int L_GAME_WON = 1; + } + if (L_POINTS_BLUE == 5) + { + int L_GAME_WON = 2; + } + if (L_GAME_WON > 0) + { + float L_SPR_DUR = 10.0; + } + string L_SCORE_SPRITE = L_POINTS_RED; + int L_SCORE_SPRITE = int(L_SCORE_SPRITE); + L_SCORE_SPRITE += "_red"; + // TODO: hud.addimgicon ent_me L_SCORE_SPRITE sc1 20 10 20 30 L_SPR_DUR + string L_SCORE_SPRITE = L_POINTS_BLUE; + int L_SCORE_SPRITE = int(L_SCORE_SPRITE); + L_SCORE_SPRITE += "_blue"; + // TODO: hud.addimgicon ent_me L_SCORE_SPRITE sc2 60 10 20 30 L_SPR_DUR + // TODO: hud.addimgicon ent_me red sc3 20 0 20 10 L_SPR_DUR + // TODO: hud.addimgicon ent_me vs sc4 40 0 20 10 L_SPR_DUR + // TODO: hud.addimgicon ent_me blue sc5 60 0 20 10 L_SPR_DUR + if (L_GAME_WON > 0) + { + if (L_GAME_WON == 1) + { + // TODO: hud.addimgicon ent_me red_wins sc6 25 40 50 25 1.0 + PLR_SOCCER_TEAMSPR = "red_wins"; + ScheduleDelayedEvent(2.0, "extsoc_flash_win"); + ScheduleDelayedEvent(4.0, "extsoc_flash_win"); + ScheduleDelayedEvent(6.0, "extsoc_flash_win"); + ScheduleDelayedEvent(8.0, "extsoc_flash_win"); + } + else + { + // TODO: hud.addimgicon ent_me blue_wins sc6 25 40 50 25 1.0 + PLR_SOCCER_TEAMSPR = "blue_wins"; + ScheduleDelayedEvent(2.0, "extsoc_flash_win"); + ScheduleDelayedEvent(4.0, "extsoc_flash_win"); + ScheduleDelayedEvent(6.0, "extsoc_flash_win"); + ScheduleDelayedEvent(8.0, "extsoc_flash_win"); + } + } + } + + void extsoc_flash_win() + { + // TODO: hud.addimgicon ent_me PLR_SOCCER_TEAMSPR sc6 25 40 50 25 1.5 + } + + void ext_hud_icon() + { + // TODO: hud.addimgicon ent_me PARAM1 PARAM2 PARAM3 PARAM4 PARAM5 PARAM6 PARAM7 + } + + void ext_shender_telfdoor() + { + LogDebug("ext_shender_telfdoor PLR_DID_SHENDER_EVENT"); + ext_darkenbloom(2); + if ((PLR_DID_SHENDER_EVENT)) return; + string WIN_ELF = FindEntityByName("telf_win"); + if ((IsEntityAlive(WIN_ELF))) + { + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + } + PLR_DID_SHENDER_EVENT = 1; + CallExternal(WIN_ELF, "ext_bunny_comment"); + } + } + + void ext_conflict() + { + } + + void ext_dumpvars() + { + } + + void ext_showflags() + { + string L_TEST = /* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "listall"); + } + + void ext_svplaysound_kiss() + { + LogDebug("ext_svplaysound_kiss PARAM1 PARAM2 PARAM3 PARAM4 PARAM5"); + // svplaysound: svplaysound PARAM1 PARAM2 PARAM3 PARAM4 PARAM5 + EmitSound(param1, param2, param3, param4, param5); + } + + void ext_clear_valid_gauntlets() + { + SetPlayerQuestData(GetOwner(), "mv"); + SetPlayerQuestData(GetOwner(), "m"); + } + + void ext_haste_cooldown() + { + PLR_NEXT_HASTE = GetGameTime(); + PLR_NEXT_HASTE += param1; + } + + void ext_register_corrode() + { + PLR_CORRODE_DURATION = param1; + } + + void ext_clevent_me() + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", param1, param2, param3, param4, param5, param6, param7, param8); + } + + void ext_clevent_all() + { + ClientEvent("update", "all", "const.localplayer.scriptID", param1, param2, param3, param4, param5, param6, param7, param8); + } + + void ext_mana_regen_loop() + { + if (!(/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "mana_regen", "type_exists"))) return; + ScheduleDelayedEvent(1.0, "ext_mana_regen_loop"); + string L_CUR_MP = GetEntityMP(GetOwner()); + string L_MAX_MP = GetEntityProperty(GetOwner(), "maxmp"); + if (L_CUR_MP < L_MAX_MP) + { + L_MAX_MP -= L_CUR_MP; + GiveMP(L_MAX_MP); + } + } + + void ext_arrow_hit() + { + if (param1 != "world") + { + string L_TARG_ID = /* TODO: $get_by_idx */ $get_by_idx(param1, "id"); + string L_BASE_DMG = GetToken(param2, 0, ";"); + string L_BASE_DMG_TYPE = GetToken(param2, 1, ";"); + string L_WEAPON_IDX = GetToken(param2, 2, ";"); + string L_PROJ_NAME = GetToken(param2, 3, ";"); + string L_WEAPON_ID = /* TODO: $get_by_idx */ $get_by_idx(L_WEAPON_IDX, "id"); + string L_FINAL_DMG = L_BASE_DMG; + string L_STAT = "skill."; + string L_BASE_STAT = GetEntityProperty(L_WEAPON_ID, "scriptvar"); + L_STAT += L_BASE_STAT; + L_STAT += ".power.ratio"; + L_FINAL_DMG *= GetEntityProperty(GetOwner(), "l_stat"); + string L_DMG_MULTI = GetEntityProperty(L_WEAPON_ID, "scriptvar"); + if (L_DMG_MULTI > 0) + { + L_FINAL_DMG *= L_DMG_MULTI; + } + int L_SPECIAL_DMG = 0; + if (L_PROJ_NAME == "proj_arrow_gholy") + { + string L_HOLY_DMG = GetSkillLevel(GetOwner(), "spellcasting.divination"); + L_HOLY_DMG += 5; + CallExternal(L_TARG_ID, "turn_undead", L_HOLY_DMG, GetEntityIndex(GetOwner())); + } + else + { + if (L_PROJ_NAME == "proj_arrow_fbow") + { + int L_FREEZE_MANA_COST = 10; + string L_CDOT_DMG = GetSkillLevel(GetOwner(), "spellcasting.ice"); + string L_FDOT_DMG = CDOT_DMG; + L_CDOT_DMG /= 1.8; + L_FDOT_DMG /= 2; + int L_PROJ_TYPE = 0; + if (GetEntityMP(GetOwner()) >= L_FREEZE_MANA_COST) + { + int L_PROJ_TYPE = RandomInt(0, 1); + } + if (!(L_PROJ_TYPE)) + { + ApplyEffect(L_TARG_ID, "effects/dot_cold", Random(5, 10), GetEntityIndex(GetOwner()), L_CDOT_DMG, "spellcasting.ice"); + } + else + { + GiveMP(GetOwner()); + ApplyEffect(L_TARG_ID, "effects/dot_cold_freeze", 8.0, GetEntityIndex(GetOwner()), L_FDOT_DMG, "spellcasting.ice"); + } + } + else + { + if (L_PROJ_NAME == "proj_arrow_frost") + { + ApplyEffect(L_TARG_ID, "effects/dot_cold", RandomInt(5, 10), GetEntityIndex(GetOwner()), 5, "archery"); + } + else + { + if (L_PROJ_NAME == "proj_arrow_gpoison") + { + ApplyEffect(L_TARG_ID, "effects/dot_poison", RandomInt(5, 10), GetEntityIndex(GetOwner()), Random(12, 33), "archery"); + } + else + { + if (L_PROJ_NAME == "proj_arrow_lightning") + { + ApplyEffect(L_TARG_ID, "effects/dot_lightning", RandomInt(5, 10), GetEntityIndex(GetOwner()), Random(10, 25), "archery"); + } + else + { + if (L_PROJ_NAME == "proj_arrow_poison") + { + ApplyEffect(L_TARG_ID, "effects/dot_poison", 15, GetEntityIndex(GetOwner()), Random(2, 3), 0, "archery"); + } + } + } + } + } + } + if (!(L_SPECIAL_DMG)) + { + } + XDoDamage(L_TARG_ID, "direct", L_FINAL_DMG, 1.0, GetOwner(), L_WEAPON_ID, L_BASE_STAT, L_BASE_DMG_TYPE); + } + else + { + LogDebug("ext_arrow_hit hit world @ PARAM3"); + } + } + + void ext_reset_bank() + { + PLR_RESET_BANK += 1; + if (PLR_RESET_BANK == 1) + { + LogMessage("ent_me " + WARNING: + "This will delete " + ALL + " items in your Galat chest and cannot be undone!"); + LogMessage("ent_me Type resetbank again to confirm!"); + } + else + { + PLR_RESET_BANK = 0; + SetPlayerQuestData(GetOwner(), "b0"); + SetPlayerQuestData(GetOwner(), "b1"); + SetPlayerQuestData(GetOwner(), "b2"); + SetPlayerQuestData(GetOwner(), "b3"); + SetPlayerQuestData(GetOwner(), "b4"); + SetPlayerQuestData(GetOwner(), "b5"); + SetPlayerQuestData(GetOwner(), "b6"); + SetPlayerQuestData(GetOwner(), "b7"); + SetPlayerQuestData(GetOwner(), "b8"); + SetPlayerQuestData(GetOwner(), "b9"); + LogMessage("ent_me Your Galat Chest bank strings have been reset."); + } + } + + void ext_targeted_by_mob() + { + string L_NPC = param1; + if (!(IsEntityAlive(L_NPC))) return; + string L_COMBAT_TAG = "combat"; + L_COMBAT_TAG += int(GetEntityIndex(L_NPC)); + SetScriptFlags(GetOwner(), "add", L_COMBAT_TAG, "combat"); + if ((G_DEVELOPER_MODE)) + { + if (!(PLR_IN_COMBAT)) + { + } + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "combat", "type_exists"))) + { + } + // TODO: hud.addstatusicon ent_me PLR_COMBAT_ICON combat 9999 + SendColoredMessage(GetOwner(), "!!!!!! entered combat !!!!!!"); + } + PLR_IN_COMBAT = 1; + } + + void ext_untargeted_by_mob() + { + string L_NPC = param1; + string L_COMBAT_TAG = "combat"; + L_COMBAT_TAG += int(GetEntityIndex(L_NPC)); + SetScriptFlags(GetOwner(), "remove", L_COMBAT_TAG); + if (!(/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "combat", "type_exists"))) + { + if ((G_DEVELOPER_MODE)) + { + if ((PLR_IN_COMBAT)) + { + } + SendColoredMessage(GetOwner(), "====== exited combat ======"); + // TODO: hud.killstatusicon ent_me combat + } + PLR_IN_COMBAT = 0; + } + } + + void game_touched_local_trans() + { + if (!(PLR_LOCAL_TRANS != param2)) return; + LogDebug("game_touched_local_trans PARAM1 PARAM2 PARAM3 PARAM4 PARAM5"); + if ((param1).findFirst("_") == 0) + { + string L_TITLE = "Local transition to "; + L_TITLE += param1; + } + else + { + string L_TITLE = /* TODO: $string_from */ $string_from(L_TITLE, _); + } + string L_DESC = "Push (Enter) to activate."; + if ((param3)) + { + L_DESC += " Requires all active players be present."; + } + SendInfoMsg(GetOwner(), L_TITLE + L_DESC); + PLR_LOCAL_TRANS = param2; + PLR_LTRAN_ORG = GetEntityOrigin(GetOwner()); + PLR_LTRAN_MINS = param4; + PLR_LTRAN_MAXS = param5; + string L_NEW_SPAWN = param6; + if (L_NEW_SPAWN != "none") + { + ext_setspawn(L_NEW_SPAWN); + } + loop_check_local_trans(); + } + + void loop_check_local_trans() + { + if (!(PLR_LOCAL_TRANS != "none")) return; + if (!(/* TODO: $within_box */ $within_box(GetOwner(), Vector3(0, 0, 0), PLR_LTRAN_MINS, PLR_LTRAN_MAXS))) + { + PLR_LOCAL_TRANS = "none"; + LogDebug("loop_check_local_trans EXITED LTRANS"); + } + else + { + ScheduleDelayedEvent(1.0, "loop_check_local_trans"); + } + } + + void ext_remove_afk() + { + if ((G_DEVELOPER_MODE)) + { + if ((IS_AFK)) + { + } + SendColoredMessage(GetOwner(), "====== No longer afk"); + } + IS_AFK = 0; + PLR_LAST_ATK_TIME = GetGameTime(); + } + + void ext_poison_bolt() + { + LogDebug("ext_poison_bolt PARAM1"); + float L_PBOLT_DURATION = 15.0; + PLR_PBOLT_AOE = 64; + string L_PBOLT_LOC = param1; + SetScriptFlags(GetOwner(), "add", "stack_pbolt", "pbolt", L_PBOLT_LOC, L_PBOLT_DURATION); + ClientEvent("new", "all", "effects/sfx_poison_cloud", L_PBOLT_LOC, PLR_PBOLT_AOE, L_PBOLT_DURATION); + if ((PLR_PBOLT_ACTIVE)) return; + GAME_PVP = "game.pvp"; + PLR_PBOLT_ACTIVE = 1; + PLR_PBOLT_COUNTER = 0; + PLR_PBOLT_DOT = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + ext_poison_bolt_loop(); + } + + void ext_poison_bolt_loop() + { + if (!(PLR_PBOLT_ACTIVE)) return; + PLR_PBOLT_ARRAY = /* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "pbolt", "type_array"); + if (PLR_PBOLT_ARRAY != "none") + { + int L_NBOLTS = int(PLR_PBOLT_ARRAY.length()); + L_NBOLTS -= 1; + if (PLR_PBOLT_COUNTER > L_NBOLTS) + { + PLR_PBOLT_COUNTER = 0; + } + PLR_PBOLT_ORG = PLR_PBOLT_ARRAY[int(PLR_PBOLT_COUNTER)]; + ext_poison_bolt_dmg(); + float L_BOLT_SCAN_SPEED = 1.0; + if (L_NBOLTS > 0) + { + L_BOLT_SCAN_SPEED /= L_NBOLTS; + } + if (L_BOLT_SCAN_SPEED < 0.1) + { + float L_BOLT_SCAN_SPEED = 0.2; + } + PLR_PBOLT_COUNTER += 1; + L_BOLT_SCAN_SPEED("ext_poison_bolt_loop"); + } + else + { + PLR_PBOLT_ACTIVE = 0; + } + } + + void ext_poison_bolt_dmg() + { + string L_SCAN_POINT = PLR_PBOLT_ORG; + L_SCAN_POINT += "z"; + PLR_PBOLT_TARGS = FindEntitiesInSphere("enemy", PLR_PBOLT_AOE); + if (!(PLR_PBOLT_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(PLR_PBOLT_TARGS, ";"); i++) + { + ext_poison_bolt_affect(); + } + } + + void ext_poison_bolt_affect() + { + string CUR_TARG = GetToken(PLR_PBOLT_TARGS, i, ";"); + if ((IsValidPlayer(CUR_TARG))) + { + if (!(GAME_PVP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ApplyEffect(CUR_TARG, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), PLR_PBOLT_DOT, "spellcasting.affliction"); + } + + void ext_speak() + { + SayText(param1); + } + + void ext_saytextrange() + { + SetSayTextRange(param1); + } + + void ext_req_viewmodel_idx() + { + LogDebug("requesting viewmodel idx..."); + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "ext_svreq_viewmodel_idx"); + } + + void ext_rec_viewmodel_idx() + { + PLR_ACTIVE_VIEWMODEL = param1; + string L_VIEWMODEL_ID = /* TODO: $get_by_idx */ $get_by_idx(PLR_ACTIVE_VIEWMODEL, "id"); + LogDebug("Got viewmodelidx PLR_ACTIVE_VIEWMODEL [ L_VIEWMODEL_ID ]"); + Effect("beam", "follow", "lgtning.spr", L_VIEWMODEL_ID, 1, 30, 30.0, 200, Vector3(255, 0, 0)); + SetProp(L_VIEWMODEL_ID, "rendermode", 5); + SetProp(L_VIEWMODEL_ID, "renderamt", 255); + } + + void ext_remove_effect() + { + LogDebug("ext_remove_effect PARAM1"); + RemoveEffect(GetOwner(), param1); + } + + void ext_clientcmd() + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "ext_cl_clientcmd", param1); + } + + void ext_set_fquest() + { + string L_FEL_QUEST = GetPlayerQuestData(GetOwner(), "f"); + if (L_FEL_QUEST == "complete") + { + ShowHelpTip(GetOwner(), "generic", "One Time Quest Already Completed", "You cannot obtain another Felewyn Shard by completing this quest again."); + } + else + { + if (GetToken(L_FEL_QUEST, 0, ";") != 1) + { + ShowHelpTip(GetOwner(), "generic", "One Time Quest Acquired", "The Felwyn Shard quest can only be completed one time per character.|The quest is completed upon acquisition of one of the Shards of the Felewyn Blade."); + SetPlayerQuestData(GetOwner(), "f"); + } + } + } + + void ext_debug_que() + { + if (!(ARRAY_DEBUG[int("exists")])) + { + array ARRAY_DEBUG; + } + ARRAY_DEBUG.insertLast(param1); + if ((PLR_DEBUG_ARRAY_ACTIVE)) return; + PLR_DEBUG_ARRAY_ACTIVE = 1; + ext_debug_que_loop(); + } + + void ext_debug_que_loop() + { + if (!(PLR_DEBUG_ARRAY_ACTIVE)) return; + string L_OUT = ARRAY_DEBUG[int(0)]; + if ((L_OUT).length() > 100) + { + string L_LOUT = (L_OUT).substr(0, 100); + L_LOUT += "*"; + } + LogMessage("ent_me " + L_OUT); + ARRAY_DEBUG.removeAt(0); + if (int(ARRAY_DEBUG.length()) > 0) + { + ScheduleDelayedEvent(0.1, "ext_debug_que_loop"); + } + else + { + PLR_DEBUG_ARRAY_ACTIVE = 0; + } + } + + void ext_quake_fx() + { + string L_DUR = param1; + EmitSound(GetOwner(), 1, "magic/volcano_start.wav", 10); + // svplaysound: svplaysound 2 10 magic/volcano_loop.wav 0.8 60 + EmitSound(2, 10, "magic/volcano_loop.wav", 0.8, 60); + ClientEvent("new", GetOwner(), "effects/sfx_quake", GetEntityIndex(GetOwner()), 1, 256, L_DUR); + Effect("screenshake", GetEntityOrigin(GetOwner()), 50, 10, L_DUR, 512); + L_DUR("ext_quake_fx_end"); + } + + void ext_quake_fx_end() + { + // svplaysound: svplaysound 2 0 magic/volcano_loop.wav + EmitSound(2, 0, "magic/volcano_loop.wav"); + } + + void ext_iexist_test() + { + LogMessage("ent_me item_exist_test " + ItemExists(GetOwner(), param1)); + } + + void ext_shield_up() + { + if ((param1)) + { + PLR_SHIELD_UP = 1; + SetScriptFlags(GetOwner(), "add", "shieldnp", "nopush", 1, -1, "none"); + } + else + { + PLR_SHIELD_UP = 0; + SetScriptFlags(GetOwner(), "remove", "shieldnp"); + } + } + + void ext_dburst() + { + PLR_DBURST_ORG = param1; + PLR_DBURST_AOE = param2; + PLR_DBURST_PUSH = param3; + string L_USE_SOUND = param4; + GAME_PVP = "game.pvp"; + PLR_DBURST_SKILL = GetSkillLevel(GetOwner(), "spellcasting.affliction"); + PLR_DBURST_DMG = PLR_DBURST_SKILL; + PLR_DBURST_DMG *= 3; + PLR_DBURST_DOT = PLR_DBURST_SKILL; + PLR_DBURST_DOT *= 0.5; + PLR_DBURST_MAXPUSH = GetEntityMaxHealth(GetOwner()); + PLR_DBURST_MAXPUSH *= 4; + ClientEvent("new", "all", "effects/sfx_dburst", PLR_DBURST_ORG, PLR_DBURST_AOE, L_USE_SOUND); + XDoDamage(PLR_DBURST_ORG, PLR_DBURST_AOE, PLR_DBURST_DMG, 0.1, GetOwner(), GetOwner(), "spellcasting.affliction", "dark_effect", "dmgevent:dburst"); + } + + void dburst_dodamage() + { + if (!(param1)) return; + if ((IsValidPlayer(param2))) + { + if (!(GAME_PVP)) + { + } + return; + } + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_dark", 15.0, GetEntityIndex(GetOwner()), PLR_DBURST_DOT, "spellcasting.affliction"); + if (!(PLR_DBURST_PUSH)) return; + string CUR_TARG = param2; + string TARG_HP = GetEntityHealth(CUR_TARG); + if (TARG_HP < PLR_DBURST_MAXPUSH) + { + int DO_PUSH = 1; + } + if (!(DO_PUSH)) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(PLR_DBURST_ORG, TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(0, 1000, 0))); + } + + void ext_environment_change() + { + ext_tod_lock(param1); + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "environment_change", param1); + } + + void ext_change_sky() + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "change_sky", param1); + } + +} + +} diff --git a/scripts/angelscript/player/health_bar.as b/scripts/angelscript/player/health_bar.as new file mode 100644 index 00000000..d30e83f6 --- /dev/null +++ b/scripts/angelscript/player/health_bar.as @@ -0,0 +1,10 @@ +#pragma context server + +namespace MS +{ + +class HealthBar : CGameScript +{ +} + +} diff --git a/scripts/angelscript/player/player.as b/scripts/angelscript/player/player.as new file mode 100644 index 00000000..2842ae46 --- /dev/null +++ b/scripts/angelscript/player/player.as @@ -0,0 +1,44 @@ +#pragma context server + +#include "player/player_sound.as" +#include "player/player_animation.as" +#include "player/player_main.as" +#include "player/server/meta_perks.as" +#include "player/player_sv_menu.as" +#include "player/player_sv_regen.as" +#include "help/first_transition.as" +#include "help/first_party.as" +#include "help/first_skillgain.as" +#include "help/first_death.as" +#include "player/player_cl_main.as" +#include "player/player_cl_effects.as" +#include "player/player_cl_effects_world.as" +#include "player/player_cl_effects_water.as" +#include "player/client/halos.as" +#include "player/player_sh_stats.as" +#include "player/externals.as" + +namespace MS +{ + +class Player : CGameScript +{ + void game_precache() + { + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("[full]"); + Precache("player/player_cl_effects"); + Precache("player/player_cl_effects_water"); + Precache("lgtning.spr"); + } + + void client_activate() + { + SetCallback("render", "enable"); + } + +} + +} diff --git a/scripts/angelscript/player/player_animation.as b/scripts/angelscript/player/player_animation.as new file mode 100644 index 00000000..205fa461 --- /dev/null +++ b/scripts/angelscript/player/player_animation.as @@ -0,0 +1,297 @@ +#pragma context server + +namespace MS +{ + +class PlayerAnimation : CGameScript +{ + string ANIM_CROUCH; + string ANIM_CROUCHMOVE; + string ANIM_DEATH; + string ANIM_DEATH2; + string ANIM_JUMP; + string ANIM_RUN; + string ANIM_STAND; + string ANIM_STAND_IDLE; + string ANIM_SWIM; + string ANIM_TREAD; + int ANIM_TYPE_HOLD; + int ANIM_TYPE_ONCE; + int ANIM_TYPE_WALK; + string ANIM_WALK; + string CURRENT_DEATH_ANIM; + string LEGS_ANIM; + string TORSO_ANIM; + int anim.underwater; + + PlayerAnimation() + { + ANIM_STAND = "stand"; + ANIM_STAND_IDLE = "idle"; + ANIM_CROUCH = "crouch_idle"; + ANIM_CROUCHMOVE = "crawl"; + ANIM_WALK = "walk_slow"; + ANIM_RUN = "run"; + ANIM_JUMP = "jump"; + ANIM_TREAD = "treadwater"; + ANIM_SWIM = "swim"; + ANIM_DEATH = "die_simple"; + ANIM_DEATH2 = "die_forwards"; + ANIM_TYPE_WALK = 0; + ANIM_TYPE_ONCE = 1; + ANIM_TYPE_HOLD = 2; + anim.underwater = 0; + } + + void game_animate() + { + // TODO: setstatus remove swimming + string L_WATERLEVEL = GetMonsterProperty("waterlevel"); + if (L_WATERLEVEL == 0) + { + anim.underwater = 0; + } + else + { + if (L_WATERLEVEL < 2) + { + if ((GetMonsterProperty("onground"))) + { + anim.underwater = 0; + } + else + { + anim.underwater = 1; + } + } + else + { + if (L_WATERLEVEL >= 2) + { + anim.underwater = 1; + } + } + } + if ((anim.underwater)) + { + // TODO: setstatus add swimming + } + SetGaitFrameRate(GetOwner(), 0); + if (GetMonsterProperty("anim.type") == ANIM_TYPE_WALK) + { + walk_animate(); + } + else + { + if (GetMonsterProperty("anim.type") == ANIM_TYPE_ONCE) + { + once_animate(); + } + else + { + if (GetMonsterProperty("anim.type") == ANIM_TYPE_HOLD) + { + hold_animate(); + } + } + } + } + + void walk_animate() + { + if (!(GetMonsterProperty("in_attack_stance"))) + { + TORSO_ANIM = 0; + float LEGS_FRAMERATE = 1.0; + string L_CURRENT_SPEED = GetMonsterProperty("speed2D"); + string SPEED_SHOW_RUN_ANIM = GetMonsterProperty("walkspeed"); + SPEED_SHOW_RUN_ANIM += 60; + if (!(anim.underwater)) + { + int l.onground = 1; + if ((l.onground)) + { + if ((GetMonsterProperty("ducking"))) + { + if (!(L_CURRENT_SPEED)) + { + TORSO_ANIM = ANIM_CROUCH; + } + else + { + TORSO_ANIM = ANIM_CROUCHMOVE; + } + LEGS_ANIM = TORSO_ANIM; + } + else + { + if (L_CURRENT_SPEED == 0) + { + if ((GetMonsterProperty("currentitem"))) + { + TORSO_ANIM = ANIM_STAND; + } + else + { + TORSO_ANIM = ANIM_STAND_IDLE; + } + LEGS_ANIM = TORSO_ANIM; + } + else + { + if (L_CURRENT_SPEED <= SPEED_SHOW_RUN_ANIM) + { + TORSO_ANIM = ANIM_WALK; + LEGS_ANIM = TORSO_ANIM; + // TODO: setgaitspeed game.monster.walkspeed + } + else + { + TORSO_ANIM = ANIM_RUN; + LEGS_ANIM = 0; + // TODO: setgaitspeed SPEED_SHOW_RUN_ANIM + } + } + } + } + else + { + TORSO_ANIM = ANIM_JUMP; + LEGS_ANIM = 0; + } + } + else + { + if (GetMonsterProperty("forwardspeed") <= 75) + { + TORSO_ANIM = ANIM_TREAD; + LEGS_ANIM = 0; + } + else + { + TORSO_ANIM = ANIM_SWIM; + LEGS_ANIM = 0; + // TODO: setstatus add swimming + } + } + } + else + { + TORSO_ANIM += "aim_"; + int L_USELEGS = 0; + if ((GetMonsterProperty("ducking"))) + { + L_USELEGS = 1; + } + if ((GetMonsterProperty("speed2D"))) + { + L_USELEGS = 1; + } + if ((L_USELEGS)) + { + legs_animate(); + } + else + { + LEGS_ANIM = 0; + } + } + // TODO: UNCONVERTED: setanimtorso TORSO_ANIM + SetAnimLegs(GetOwner(), LEGS_ANIM); + } + + void once_animate() + { + if ((GetMonsterProperty("anim.uselegs"))) + { + legs_animate(); + SetAnimLegs(GetOwner(), LEGS_ANIM); + } + if (GetMonsterProperty("anim.current_frame") >= GetMonsterProperty("anim.max_frames")) + { + PlayAnim("once", "break"); + walk_animate(); + } + } + + void hold_animate() + { + } + + void legs_animate() + { + int CUSTOM_LEGS_ANIM = 0; + int CUSTOM_EXT = 0; + float LEGS_FRAMERATE = 2.3; + LEGS_ANIM = "game.player.currentitem.anim_legs"; + if ((GetMonsterProperty("ducking"))) + { + if (!(GetMonsterProperty("speed2D"))) + { + LEGS_ANIM = ANIM_CROUCHMOVE; + CUSTOM_EXT = "crouchidle_"; + } + else + { + LEGS_ANIM = ANIM_CROUCHMOVE; + CUSTOM_EXT = "crouchwalk_"; + } + } + else + { + string SPEED_SHOW_RUN_ANIM = GetMonsterProperty("walkspeed"); + SPEED_SHOW_RUN_ANIM++; + if (!(anim.underwater)) + { + if (!(GetMonsterProperty("speed2D"))) + { + LEGS_ANIM = ANIM_STAND; + CUSTOM_EXT = "stand_"; + } + else + { + if (GetMonsterProperty("speed2D") <= SPEED_SHOW_RUN_ANIM) + { + LEGS_ANIM = ANIM_WALK; + CUSTOM_EXT = "walk_"; + } + else + { + if (GetMonsterProperty("speed2D") > SPEED_SHOW_RUN_ANIM) + { + LEGS_ANIM = ANIM_RUN; + CUSTOM_EXT = "run_"; + } + } + } + } + else + { + LEGS_ANIM = ANIM_TREAD; + CUSTOM_EXT = "tread_"; + SetGaitFrameRate(GetOwner(), -0.1); + } + } + CUSTOM_LEGS_ANIM += CUSTOM_EXT; + if (/* TODO: $anim_exists */ $anim_exists(CUSTOM_LEGS_ANIM) > -1) + { + LEGS_ANIM = CUSTOM_LEGS_ANIM; + } + } + + void animate_death() + { + if (RandomInt(0, 1) == 0) + { + CURRENT_DEATH_ANIM = ANIM_DEATH; + } + else + { + CURRENT_DEATH_ANIM = ANIM_DEATH2; + } + PlayAnim("critical", CURRENT_DEATH_ANIM); + } + +} + +} diff --git a/scripts/angelscript/player/player_cl_effects.as b/scripts/angelscript/player/player_cl_effects.as new file mode 100644 index 00000000..679dd94b --- /dev/null +++ b/scripts/angelscript/player/player_cl_effects.as @@ -0,0 +1,96 @@ +#pragma context server + +namespace MS +{ + +class PlayerClEffects : CGameScript +{ + int BREATHE_PLAYING; + string GROUNDBOB_DIP; + string GROUNDBOB_DURATION; + string GROUNDBOB_STARTTIME; + int MAX_BOB_DIP; + int MAX_BOB_DURATION; + string game.cleffect.view_ofs.z; + string game.cleffect.viewmodel_ofs.z; + + PlayerClEffects() + { + MAX_BOB_DURATION = 3; + MAX_BOB_DIP = 20; + } + + void player_hitgroundhard() + { + string L_DIP = param1; + L_DIP *= 0.05; + if (!(L_DIP >= 12)) return; + GROUNDBOB_DURATION = param1; + GROUNDBOB_DURATION *= 0.001; + GROUNDBOB_DIP = L_DIP; + GROUNDBOB_STARTTIME = GetGameTime(); + if (!(GROUNDBOB_DIP >= 12)) return; + GROUNDBOB_DURATION = max(0, min(MAX_BOB_DURATION, GROUNDBOB_DURATION)); + GROUNDBOB_DIP = max(0, min(MAX_BOB_DIP, GROUNDBOB_DIP)); + player_hitground_adjview(); + GROUNDBOB_DURATION("player_hitground_fixview"); + } + + void player_hitground_adjview() + { + if (!(GROUNDBOB_STARTTIME)) return; + float LCL_BOBTIME = GetGameTime(); + LCL_BOBTIME -= GROUNDBOB_STARTTIME; + LCL_BOBTIME = max(0, min(MAX_BOB_DURATION, LCL_BOBTIME)); + if (!(LCL_BOBAMT <= GROUNDBOB_DURATION)) return; + string LCL_BOBAMT = LCL_BOBTIME; + int LCL_TIMESCALE = 2; + LCL_TIMESCALE /= GROUNDBOB_DURATION; + LCL_BOBAMT *= LCL_TIMESCALE; + LCL_BOBAMT -= 1; + LCL_BOBAMT *= LCL_BOBAMT; + LCL_BOBAMT *= GROUNDBOB_DIP; + LCL_BOBAMT -= GROUNDBOB_DIP; + game.cleffect.view_ofs.z = LCL_BOBAMT; + LCL_BOBAMT *= 1.01; + game.cleffect.viewmodel_ofs.z = LCL_BOBAMT; + ScheduleDelayedEvent(0.01, "player_hitground_adjview"); + } + + void player_hitground_fixview() + { + GROUNDBOB_STARTTIME = 0; + game.cleffect.view_ofs.z = 0; + game.cleffect.viewmodel_ofs.z = LCL_BOBAMT; + } + + void player_breathe() + { + if (!("game.player.stamina.ratio" < 0.05)) return; + if ((BREATHE_PLAYING)) return; + if (PLR_RACE == "human") + { + if (PLR_GENDER == "male") + { + string LCL_BREATHESOUND = "player/breathe_fast"; + } + else + { + string LCL_BREATHESOUND = "player/Femalebreathe_fast"; + } + } + LCL_BREATHESOUND += RandomInt(1, 3); + LCL_BREATHESOUND += ".wav"; + EmitSound(GetOwner(), CHAN_VOICE, LCL_BREATHESOUND, "game.sound.maxvol"); + BREATHE_PLAYING = 1; + ScheduleDelayedEvent(6, "player_breathe_done"); + } + + void player_breathe_done() + { + BREATHE_PLAYING = 0; + } + +} + +} diff --git a/scripts/angelscript/player/player_cl_effects_levelup.as b/scripts/angelscript/player/player_cl_effects_levelup.as new file mode 100644 index 00000000..2338edec --- /dev/null +++ b/scripts/angelscript/player/player_cl_effects_levelup.as @@ -0,0 +1,99 @@ +#pragma context server + +namespace MS +{ + +class PlayerClEffectsLevelup : CGameScript +{ + int DIST; + string MY_OWNER; + int OFSZ_NEG; + int OFSZ_POS; + int OFS_NEG; + int OFS_POS; + string THIS_LIGHT; + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + levelup_createsprite(); + } + + void client_activate() + { + MY_OWNER = param1; + OFSZ_POS = 96; + OFSZ_NEG = -96; + OFS_POS = 72; + OFS_NEG = -72; + DIST = 32; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), 200, Vector3(0, 255, 0), 3.0); + THIS_LIGHT = "game.script.last_light_id"; + ScheduleDelayedEvent(4.0, "end_effect"); + } + + void end_effect() + { + RemoveScript(); + } + + void levelup_createsprite() + { + float RND_LEFT = Random(-20, 20); + float RND_RIGHT = Random(-20, 20); + Vector3 SPRITE_VEL = Vector3(RND_LEFT, RND_RIGHT, 0); + int COLOR_R = RandomInt(0, 255); + int COLOR_G = RandomInt(0, 255); + int COLOR_B = RandomInt(0, 255); + string COLOR_STRING = "("; + COLOR_STRING += COLOR_R; + COLOR_STRING += ","; + COLOR_STRING += COLOR_G; + COLOR_STRING += ","; + COLOR_STRING += COLOR_B; + COLOR_STRING += ")"; + ClientEffect("light", THIS_LIGHT, /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), 200, COLOR_STRING, 0.09); + string START_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + int RND_RAD = RandomInt(0, 359); + START_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_RAD, 0), Vector3(0, DIST, -32)); + ClientEffect("tempent", "sprite", "xflare1.spr", START_POS, "setup_levelup_sprite"); + string START_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + int RND_RAD = RandomInt(0, 359); + START_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_RAD, 0), Vector3(0, DIST, -32)); + ClientEffect("tempent", "sprite", "xflare1.spr", START_POS, "setup_levelup_sprite"); + string START_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + int RND_RAD = RandomInt(0, 359); + START_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_RAD, 0), Vector3(0, DIST, -32)); + ClientEffect("tempent", "sprite", "xflare1.spr", START_POS, "setup_levelup_sprite"); + } + + void setup_levelup_sprite() + { + float RND_LEFT = Random(-20, 20); + float RND_RIGHT = Random(-20, 20); + Vector3 SPRITE_VEL = Vector3(RND_LEFT, RND_RIGHT, 0); + int COLOR_R = RandomInt(0, 255); + int COLOR_G = RandomInt(0, 255); + int COLOR_B = RandomInt(0, 255); + string COLOR_STRING = "("; + COLOR_STRING += COLOR_R; + COLOR_STRING += ","; + COLOR_STRING += COLOR_G; + COLOR_STRING += ","; + COLOR_STRING += COLOR_B; + COLOR_STRING += ")"; + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 20); + ClientEffect("tempent", "set_current_prop", "velocity", SPRITE_VEL); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", COLOR_STRING); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/player/player_cl_effects_special.as b/scripts/angelscript/player/player_cl_effects_special.as new file mode 100644 index 00000000..5b3d5e35 --- /dev/null +++ b/scripts/angelscript/player/player_cl_effects_special.as @@ -0,0 +1,1557 @@ +#pragma context server + +#include "player/client/halos.as" +#include "player/player_cl_effects_weather.as" + +namespace MS +{ + +class PlayerClEffectsSpecial : CGameScript +{ + string CL_HBAR_FRAME; + string CL_HBAR_INDEX; + string CL_HBAR_POS; + string CL_HBAR_SCALE; + string CL_HBAR_SPRITE; + string CL_TELE1_ORG; + string CORPSE_ANG; + string CORPSE_ANIM_IDX; + string CORPSE_BODY_IDX; + string CORPSE_RENDERAMT; + string CORPSE_RENDERMODE; + string CORPSE_SCALE; + string CORPSE_SKIN; + string CYCLE_BEAM; + string FX_SMITH_EFFECTS; + string FX_SMITH_ICESPRITE; + string FX_SMITH_SPRITE; + string FX_SMITH_TYPE; + string KH_BREATH_COLOR; + int KH_DRAG_COUNT; + string KH_DRAG_PAT01; + string KH_DRAG_PAT02; + string KH_DRAG_PAT03; + string KH_DRAG_PAT04; + string KH_DRAG_PAT05; + string KH_DRAG_PAT06; + string KH_DRAG_PAT07; + string KH_DRAG_PAT08; + string KH_DRAG_PAT09; + string KH_DRAG_PAT10; + string KH_DRAG_PAT11; + string KH_DRAG_PAT12; + string KH_DRAG_PAT13; + string KH_DRAG_PAT14; + string KH_DRAG_PAT15; + string KH_DRAG_PAT16; + string KH_DRAG_POS; + string KH_DRAINER_ANGS; + int KH_DRAINER_SPEED; + int KH_FIRE_BREATH; + string KH_FLAME_SPRITE; + int KH_FLIGHT_SPRITES_ON; + string KH_FS_ANG_COUNT; + string KH_FS_ROT_COUNT; + string KH_GLOW_SPRITE; + int KH_HAND_SPRITES_ON; + string KH_HAND_SPRITE_COLOR; + string KH_SKEL; + string KH_SPRITE_DRAINER; + string KH_TEMP_ROW; + int KH_X_COUNT; + string KH_ZAP_NERF; + int KH_ZAP_ON; + string KH_ZAP_TARGET; + string LIGHTSYS_ANY_VALID; + int LIGHTSYS_N_LIGHTS; + string LIGHTSYS_TRACK_LIGHTS; + string L_INRENDER; + int MIRRORS_ON; + string MIRROR_ANGLES; + int MIRROR_ANGLE_COUNTER; + int MIRROR_MODE; + string MIRROR_MODEL; + int MIRROR_RENDERAMT; + string MIRROR_VEL; + string NEXT_LIGHT_DEBUG; + string PHL_HIDE; + string PHL_NEXT_SEAL; + int PHL_ON; + string PHL_OWNER; + string PHL_POS; + string PLAYER_MODEL; + int SB_CYCLE_ANGLE; + string SB_STUN_POS; + string SB_STUN_RADIUS; + string SETUP_TEST_ARRAY; + int SFX_B_CYCLE; + float SFX_B_CYCLE_PM; + int SFX_G_CYCLE; + float SFX_G_CYCLE_PM; + string SFX_METAL_CAVE_LIGHT; + int SFX_METAL_CAVE_LIGHT_ACTIVE; + string SFX_METAL_CAVE_MDL; + int SFX_R_CYCLE; + float SFX_R_CYCLE_PM; + string TN_GLOW_SPR; + string TN_IDX; + int TN_SPRITE_LOOP; + string TN_TELE_SPR; + string game.cleffect.view_ofs.z; + + PlayerClEffectsSpecial() + { + LIGHTSYS_N_LIGHTS = 16; + PLAYER_MODEL = "human/reference.mdl"; + CL_HBAR_SPRITE = "health_bar.spr"; + array ARRAY_LIGHT_COLOR; + array ARRAY_LIGHT_RAD; + array ARRAY_LIGHT_IDLIST; + KH_SPRITE_DRAINER = "fire1_fixed.spr"; + KH_DRAINER_SPEED = 30; + KH_GLOW_SPRITE = "3dmflaora.spr"; + } + + void ext_cl_clientcmd() + { + LogDebug("*** ext_cl_clientcmd /* TODO: $quote */ $quote(param1)"); + ClientEffect("clientcmd", param1); + } + + void game_prerender() + { + if ((LIGHTSYS_TRACK_LIGHTS)) + { + for (int i = 0; i < LIGHTSYS_N_LIGHTS; i++) + { + lightsys_render_lights(); + } + } + if ((SFX_METAL_CAVE_LIGHT_ACTIVE)) + { + cl_metal_cave_cycle(); + } + } + + void cl_error() + { + LogError(param1); + } + + void kh_setup() + { + KH_SKEL = param1; + } + + void kh_make_drain_sprite() + { + string SPAWN_LOC = param1; + KH_DRAINER_ANGS = param3; + ClientEffect("tempent", "sprite", KH_SPRITE_DRAINER, SPAWN_LOC, "kh_setup_drainer"); + if ((param4)) + { + EmitSound3D("magic/energy1_loud.wav", 10, SPAWN_LOC); + } + } + + void kh_sprite_splode() + { + string SPARK_ORG = param1; + ClientEffect("tempent", "sprite", KH_GLOW_SPRITE, SPARK_ORG, "kh_setup_spark"); + ClientEffect("tempent", "sprite", KH_GLOW_SPRITE, SPARK_ORG, "kh_setup_spark"); + ClientEffect("tempent", "sprite", KH_GLOW_SPRITE, SPARK_ORG, "kh_setup_spark"); + ClientEffect("tempent", "sprite", KH_GLOW_SPRITE, SPARK_ORG, "kh_setup_spark"); + EmitSound3D("turret/tu_die2.wav", 10, SPARK_ORG); + } + + void kh_setup_drainer() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.1); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", KH_DRAINER_ANGS); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(KH_DRAINER_ANGS, Vector3(0, KH_DRAINER_SPEED, 0))); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + + void kh_setup_spark() + { + float L_RND_ANG = Random(0, 359); + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, L_RND_ANG, 0), Vector3(0, 120, 110))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", 0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void kh_setup_hand_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(Random(-20, 20), 0, 0))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", KH_HAND_SPRITE_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void kh_end_effects() + { + MIRRORS_ON = 0; + KH_FIRE_BREATH = 0; + KH_FLIGHT_SPRITES_ON = 0; + } + + void kh_hand_sprites() + { + string SPRITE_DURATION = param1; + KH_HAND_SPRITE_COLOR = param2; + KH_HAND_SPRITES_ON = 1; + SPRITE_DURATION("kh_end_hand_sprites"); + kh_hand_sprite_loop(); + } + + void kh_hand_sprite_loop() + { + if (!(KH_HAND_SPRITES_ON)) return; + ScheduleDelayedEvent(0.1, "kh_hand_sprite_loop"); + string SPAWN_POS = /* TODO: $getcl */ $getcl(KH_SKEL, "bonepos", 20); + ClientEffect("tempent", "sprite", KH_GLOW_SPRITE, SPAWN_POS, "kh_setup_hand_sprite"); + string SPAWN_POS = /* TODO: $getcl */ $getcl(KH_SKEL, "bonepos", 16); + ClientEffect("tempent", "sprite", KH_GLOW_SPRITE, SPAWN_POS, "kh_setup_hand_sprite"); + } + + void kh_end_hand_sprites() + { + KH_HAND_SPRITES_ON = 0; + } + + void kh_spawn_mirrors() + { + MIRROR_MODEL = param1; + string MIRROR_START = param2; + MIRROR_ANGLES = param3; + const int MIRROR_DIST = 96; + const float MIRROR_LIFE = 5.0; + MIRROR_ANGLE_COUNTER = 0; + MIRRORS_ON = 1; + MIRROR_MODE = 1; + MIRROR_RENDERAMT = 0; + int MIRROR_START_SPEED = 5; + int MIRROR_SANG = 0; + MIRROR_VEL = /* TODO: $relvel */ $relvel(Vector3(0, MIRROR_SANG, 0), Vector3(0, MIRROR_START_SPEED, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, MIRROR_START, "kh_setup_mirror", "kh_update_mirror0"); + MIRROR_SANG += 72; + MIRROR_VEL = /* TODO: $relvel */ $relvel(Vector3(0, MIRROR_SANG, 0), Vector3(0, MIRROR_START_SPEED, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, MIRROR_START, "kh_setup_mirror", "kh_update_mirror1"); + MIRROR_SANG += 72; + MIRROR_VEL = /* TODO: $relvel */ $relvel(Vector3(0, MIRROR_SANG, 0), Vector3(0, MIRROR_START_SPEED, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, MIRROR_START, "kh_setup_mirror", "kh_update_mirror2"); + MIRROR_SANG += 72; + MIRROR_VEL = /* TODO: $relvel */ $relvel(Vector3(0, MIRROR_SANG, 0), Vector3(0, MIRROR_START_SPEED, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, MIRROR_START, "kh_setup_mirror", "kh_update_mirror3"); + MIRROR_SANG += 72; + MIRROR_VEL = /* TODO: $relvel */ $relvel(Vector3(0, MIRROR_SANG, 0), Vector3(0, MIRROR_START_SPEED, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, MIRROR_START, "kh_setup_mirror", "kh_update_mirror4"); + MIRROR_LIFE("kh_refresh_mirrors"); + } + + void kh_update_mirror0() + { + kh_mirror_update(0); + } + + void kh_update_mirror1() + { + kh_mirror_update(72); + } + + void kh_update_mirror2() + { + kh_mirror_update(144); + } + + void kh_update_mirror3() + { + kh_mirror_update(216); + } + + void kh_update_mirror4() + { + kh_mirror_update(288); + MIRROR_ANGLE_COUNTER += 1; + if (MIRROR_ANGLE_COUNTER > 359) + { + MIRROR_ANGLE_COUNTER -= 359; + } + } + + void kh_mirror_update() + { + if (!(MIRRORS_ON)) + { + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.1); + } + if (!(MIRRORS_ON)) return; + if (MIRROR_MODE == 1) + { + MIRROR_RENDERAMT += 5; + if (MIRROR_RENDERAMT >= 255) + { + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + MIRROR_MODE = 2; + } + else + { + ClientEffect("tempent", "set_current_prop", "renderamt", MIRROR_RENDERAMT); + } + } + if (MIRROR_MODE == 2) + { + string ANG_ADJ = param1; + string L_ANG = MIRROR_ANGLE_COUNTER; + L_ANG += ANG_ADJ; + if (L_ANG > 359) + { + L_ANG -= 359; + } + string MIRROR_POS = /* TODO: $getcl */ $getcl(KH_SKEL, "origin"); + string DBG_POS = MIRROR_POS; + MIRROR_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "angles", /* TODO: $getcl */ $getcl(KH_SKEL, "angles")); + ClientEffect("tempent", "set_current_prop", "origin", MIRROR_POS); + ClientEffect("tempent", "set_current_prop", "velocity", 0); + } + } + + void kh_refresh_mirrors() + { + LogDebug("**** kh_refresh_mirrors"); + if (!(MIRRORS_ON)) return; + MIRROR_ANGLES = /* TODO: $getcl */ $getcl(KH_SKEL, "angles"); + string L_MIRROR_ANG = MIRROR_ANGLE_COUNTER; + if (L_MIRROR_ANG > 359) + { + L_MIRROR_ANG -= 359; + } + string L_MIRROR_POS = /* TODO: $relpos */ $relpos(Vector3(0, POOF_POS_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, L_MIRROR_POS, "kh_setup_mirror", "kh_update_mirror0"); + string L_MIRROR_ANG = MIRROR_ANGLE_COUNTER; + L_MIRROR_ANG += 72; + if (L_MIRROR_ANG > 359) + { + L_MIRROR_ANG -= 359; + } + string L_MIRROR_POS = /* TODO: $relpos */ $relpos(Vector3(0, POOF_POS_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, L_MIRROR_POS, "kh_setup_mirror", "kh_update_mirror1"); + string L_MIRROR_ANG = MIRROR_ANGLE_COUNTER; + L_MIRROR_ANG += 144; + if (L_MIRROR_ANG > 359) + { + L_MIRROR_ANG -= 359; + } + string L_MIRROR_POS = /* TODO: $relpos */ $relpos(Vector3(0, POOF_POS_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, L_MIRROR_POS, "kh_setup_mirror", "kh_update_mirror2"); + string L_MIRROR_ANG = MIRROR_ANGLE_COUNTER; + L_MIRROR_ANG += 216; + if (L_MIRROR_ANG > 359) + { + L_MIRROR_ANG -= 359; + } + string L_MIRROR_POS = /* TODO: $relpos */ $relpos(Vector3(0, POOF_POS_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, L_MIRROR_POS, "kh_setup_mirror", "kh_update_mirror3"); + string L_MIRROR_ANG = MIRROR_ANGLE_COUNTER; + L_MIRROR_ANG += 288; + if (L_MIRROR_ANG > 359) + { + L_MIRROR_ANG -= 359; + } + string L_MIRROR_POS = /* TODO: $relpos */ $relpos(Vector3(0, POOF_POS_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, L_MIRROR_POS, "kh_setup_mirror", "kh_update_mirror4"); + MIRROR_LIFE("kh_refresh_mirrors"); + } + + void kh_setup_mirror() + { + ClientEffect("tempent", "set_current_prop", "death_delay", MIRROR_LIFE); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "angles", /* TODO: $getcl */ $getcl(KH_SKEL, "angles")); + ClientEffect("tempent", "set_current_prop", "velocity", MIRROR_VEL); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 999); + } + + void kh_mirror_poof() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", -0.25); + ClientEffect("tempent", "set_current_prop", "angles", /* TODO: $getcl */ $getcl(KH_SKEL, "angles")); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 999); + } + + void kh_mirrors_off() + { + MIRRORS_ON = 0; + string POOF_POS_ANG = MIRROR_ANGLE_COUNTER; + string POOF_POS = /* TODO: $relpos */ $relpos(Vector3(0, POOF_POS_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, POOF_POS, "kh_mirror_poof"); + string POOF_POS_ANG = MIRROR_ANGLE_COUNTER; + POOF_POS_ANG += 72; + if (POOF_POS_ANG > 359) + { + POOF_POS_ANG -= 359; + } + string POOF_POS = /* TODO: $relpos */ $relpos(Vector3(0, POOF_POS_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, POOF_POS, "kh_mirror_poof"); + string POOF_POS_ANG = MIRROR_ANGLE_COUNTER; + POOF_POS_ANG += 144; + if (POOF_POS_ANG > 359) + { + POOF_POS_ANG -= 359; + } + string POOF_POS = /* TODO: $relpos */ $relpos(Vector3(0, POOF_POS_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, POOF_POS, "kh_mirror_poof"); + string POOF_POS_ANG = MIRROR_ANGLE_COUNTER; + POOF_POS_ANG += 216; + if (POOF_POS_ANG > 359) + { + POOF_POS_ANG -= 359; + } + string POOF_POS = /* TODO: $relpos */ $relpos(Vector3(0, POOF_POS_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, POOF_POS, "kh_mirror_poof"); + string POOF_POS_ANG = MIRROR_ANGLE_COUNTER; + POOF_POS_ANG += 288; + if (POOF_POS_ANG > 359) + { + POOF_POS_ANG -= 359; + } + string POOF_POS = /* TODO: $relpos */ $relpos(Vector3(0, POOF_POS_ANG, 0), Vector3(0, MIRROR_DIST, 0)); + ClientEffect("tempent", "model", MIRROR_MODEL, POOF_POS, "kh_mirror_poof"); + } + + void kh_ice_spikes() + { + const string SOUND_FREEZE = "magic/freeze.wav"; + string SPAWN_POS = param1; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", SPAWN_POS, "kh_setup_ice_spikes", "kh_update_ice_spikes"); + EmitSound3D(SOUND_FREEZE, 10, SPAWN_POS); + } + + void kh_update_ice_spikes() + { + if (!("game.tempent.fuser2" != 1)) return; + string CUR_ANIM = "game.tempent.anim"; + string CUR_FRAME = "game.tempent.frame"; + if (CUR_ANIM == 17) + { + string RAISE_TIME = "game.tempent.fuser1"; + RAISE_TIME += 0.5; + if (GetGameTime() > RAISE_TIME) + { + ClientEffect("tempent", "set_current_prop", "sequence", 18); + ClientEffect("tempent", "set_current_prop", "framerate", 0.1); + ClientEffect("tempent", "set_current_prop", "frame", 0); + ClientEffect("tempent", "set_current_prop", "fuser2", 1); + } + } + } + + void kh_setup_ice_spikes() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 2.0); + ClientEffect("tempent", "set_current_prop", "frames", 999); + ClientEffect("tempent", "set_current_prop", "body", 45); + ClientEffect("tempent", "set_current_prop", "sequence", 17); + ClientEffect("tempent", "set_current_prop", "fuser1", GetGameTime()); + ClientEffect("tempent", "set_current_prop", "fuser2", 69); + } + + void kh_fire_breath_on() + { + KH_FIRE_BREATH = 1; + KH_BREATH_COLOR = Vector3(0, 0, 0); + KH_FLAME_SPRITE = param1; + LogDebug("**** kh_fire_breath_on KH_FLAME_SPRITE at /* TODO: $getcl */ $getcl(KH_SKEL, "attachment2") ang /* TODO: $getcl */ $getcl(KH_SKEL, "angles.yaw")"); + kh_fire_breath_loop(); + } + + void kh_fire_breath_loop() + { + if (!(KH_FIRE_BREATH)) return; + ScheduleDelayedEvent(0.01, "kh_fire_breath_loop"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(KH_SKEL, "attachment2"); + ClientEffect("tempent", "sprite", KH_FLAME_SPRITE, CLOUD_ORG, "setup_fire_breath"); + ClientEffect("tempent", "sprite", KH_FLAME_SPRITE, CLOUD_ORG, "setup_fire_breath"); + } + + void kh_fire_breath_off() + { + KH_FIRE_BREATH = 0; + } + + void kh_poison_breath_on() + { + KH_FIRE_BREATH = 1; + KH_BREATH_COLOR = Vector3(0, 255, 0); + KH_FLAME_SPRITE = param1; + kh_fire_breath_loop(); + } + + void kh_poison_breath_loop() + { + if (!(KH_FIRE_BREATH)) return; + ScheduleDelayedEvent(0.01, "kh_poison_breath_loop"); + string CLOUD_ORG = /* TODO: $getcl */ $getcl(KH_SKEL, "attachment2"); + ClientEffect("tempent", "sprite", KH_FLAME_SPRITE, CLOUD_ORG, "setup_fire_breath"); + ClientEffect("tempent", "sprite", KH_FLAME_SPRITE, CLOUD_ORG, "setup_fire_breath"); + } + + void kh_poison_breath_off() + { + KH_FIRE_BREATH = 0; + } + + void setup_fire_breath() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 9); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.5, 1.0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendercolor", KH_BREATH_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", ".005"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + float RND_RL = Random(-20, 20); + float RND_UD = Random(-20, 20); + string MY_ANG = /* TODO: $getcl */ $getcl(KH_SKEL, "angles"); + string CLOUD_VEL = /* TODO: $relvel */ $relvel(MY_ANG, Vector3(RND_RL, Random(300, 400), RND_UD)); + ClientEffect("tempent", "set_current_prop", "velocity", CLOUD_VEL); + } + + void kh_zap_target_on() + { + KH_ZAP_ON = 1; + KH_ZAP_TARGET = param1; + kh_zap_target_loop(); + KH_ZAP_NERF = GetGameTime(); + KH_ZAP_NERF += 1.0; + } + + void kh_zap_target_loop() + { + if (!(KH_ZAP_ON)) return; + ScheduleDelayedEvent(0.1, "kh_zap_target_loop"); + if (GetGameTime() > KH_ZAP_NERF) + { + int EXIT_SUB = RandomInt(0, 1); + } + if ((EXIT_SUB)) return; + string BEAM_START = /* TODO: $getcl */ $getcl(KH_SKEL, "origin"); + string BEAM_END = /* TODO: $getcl */ $getcl(KH_SKEL, "origin"); + BEAM_START += "z"; + float RND_PITCH = Random(0, 359); + float RND_YAW = Random(0, 359); + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(RND_PITCH, RND_YAW, 0), Vector3(0, 32, 0)); + float RND_PITCH = Random(0, 359); + float RND_YAW = Random(0, 359); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(RND_PITCH, RND_YAW, 0), Vector3(0, 32, 0)); + ClientEffect("beam_points", BEAM_START, BEAM_END, "lgtning.spr", 0.2, 2, 9, 0.3, 0.1, 30, Vector3(2, 1.5, 0.25)); + } + + void kh_zap_target_off() + { + KH_ZAP_ON = 0; + } + + void kh_flight_sprites() + { + if ((param1)) + { + KH_FLIGHT_SPRITES_ON = 1; + KH_FS_ROT_COUNT = 0; + KH_FS_ANG_COUNT = 0; + for (int i = 0; i < 18; i++) + { + kh_spawn_flight_sprites(); + } + ScheduleDelayedEvent(10.0, "kh_refresh_flight_sprites"); + } + else + { + KH_FLIGHT_SPRITES_ON = 0; + } + } + + void kh_spawn_flight_sprites() + { + string SPAWN_POS = /* TODO: $getcl */ $getcl(KH_SKEL, "origin"); + SPAWN_POS += /* TODO: $relpos */ $relpos(Vector3(0, KH_FS_ANG_COUNT, 0), Vector3(0, 64, 0)); + ClientEffect("tempent", "sprite", KH_GLOW_SPRITE, SPAWN_POS, "kh_setup_flight_sprite", "kh_update_flight_sprite"); + KH_FS_ANG_COUNT += 40; + } + + void kh_refresh_flight_sprites() + { + if (!(KH_FLIGHT_SPRITES_ON)) return; + KH_FS_ANG_COUNT = 0; + for (int i = 0; i < 9; i++) + { + kh_spawn_flight_sprites(); + } + ScheduleDelayedEvent(10.0, "kh_refresh_flight_sprites"); + } + + void kh_update_flight_sprite() + { + if ((KH_FLIGHT_SPRITES_ON)) + { + if ("game.tempent.fuser1" == 0) + { + KH_FS_ROT_COUNT += 1; + if (KH_FS_ROT_COUNT > 359) + { + } + KH_FS_ROT_COUNT -= 359; + } + string MY_ROT = KH_FS_ROT_COUNT; + MY_ROT += "game.tempent.fuser1"; + if (MY_ROT > 359) + { + MY_ROT -= 359; + } + string MY_POS = /* TODO: $getcl */ $getcl(KH_SKEL, "origin"); + MY_POS += /* TODO: $relpos */ $relpos(Vector3(0, MY_ROT, 0), Vector3(0, 64, 0)); + ClientEffect("tempent", "set_current_prop", "origin", MY_POS); + } + else + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.01); + ClientEffect("tempent", "set_current_prop", "renderamt", 0); + } + } + + void kh_setup_flight_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "velocity", /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(Random(-20, 20), 0, 0))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "update", 1); + ClientEffect("tempent", "set_current_prop", "fuser1", KH_FS_ANG_COUNT); + } + + void kh_dragon_death() + { + KH_DRAG_POS = param1; + KH_DRAG_POS = "z"; + KH_DRAG_PAT01 = "0;0;0;1;0;1;0;1;0;0;0;0"; + KH_DRAG_PAT02 = "0;1;0;0;1;1;1;0;0;0;1;0"; + KH_DRAG_PAT03 = "1;0;0;0;1;1;1;0;0;0;0;1"; + KH_DRAG_PAT04 = "1;1;0;0;0;1;0;0;0;0;1;1"; + KH_DRAG_PAT05 = "0;1;1;0;0;1;0;0;1;1;1;0"; + KH_DRAG_PAT06 = "0;0;1;1;1;1;1;1;1;1;0;0"; + KH_DRAG_PAT07 = "0;0;0;1;1;1;1;1;1;0;0;0"; + KH_DRAG_PAT08 = "0;0;0;0;1;1;1;0;0;0;0;0"; + KH_DRAG_PAT09 = "0;0;0;0;0;1;0;0;0;0;0;0"; + KH_DRAG_PAT10 = "0;0;0;0;0;1;0;0;0;0;0;0"; + KH_DRAG_PAT11 = "0;0;0;0;0;1;0;0;0;0;0;0"; + KH_DRAG_PAT12 = "0;0;0;0;0;1;0;0;0;0;0;0"; + KH_DRAG_PAT13 = "0;0;0;0;0;1;0;0;0;0;0;0"; + KH_DRAG_PAT14 = "0;0;0;0;0;0;0;0;0;0;0;0"; + KH_DRAG_PAT15 = "0;0;0;0;0;0;1;0;0;0;0;0"; + KH_DRAG_PAT16 = "0;0;0;0;0;0;0;1;0;0;0;0"; + KH_DRAG_COUNT = 0; + kh_dragon_death_loop(); + } + + void kh_dragon_death_loop() + { + if (KH_DRAG_COUNT < 16) + { + ScheduleDelayedEvent(0.2, "kh_dragon_death_loop"); + } + KH_DRAG_COUNT += 1; + if (KH_DRAG_COUNT == 1) + { + kh_make_row(KH_DRAG_PAT01); + } + if (KH_DRAG_COUNT == 2) + { + kh_make_row(KH_DRAG_PAT02); + } + if (KH_DRAG_COUNT == 3) + { + kh_make_row(KH_DRAG_PAT03); + } + if (KH_DRAG_COUNT == 4) + { + kh_make_row(KH_DRAG_PAT04); + } + if (KH_DRAG_COUNT == 5) + { + kh_make_row(KH_DRAG_PAT05); + } + if (KH_DRAG_COUNT == 6) + { + kh_make_row(KH_DRAG_PAT06); + } + if (KH_DRAG_COUNT == 7) + { + kh_make_row(KH_DRAG_PAT07); + } + if (KH_DRAG_COUNT == 8) + { + kh_make_row(KH_DRAG_PAT08); + } + if (KH_DRAG_COUNT == 9) + { + kh_make_row(KH_DRAG_PAT09); + } + if (KH_DRAG_COUNT == 10) + { + kh_make_row(KH_DRAG_PAT10); + } + if (KH_DRAG_COUNT == 11) + { + kh_make_row(KH_DRAG_PAT11); + } + if (KH_DRAG_COUNT == 12) + { + kh_make_row(KH_DRAG_PAT12); + } + if (KH_DRAG_COUNT == 13) + { + kh_make_row(KH_DRAG_PAT13); + } + if (KH_DRAG_COUNT == 14) + { + kh_make_row(KH_DRAG_PAT14); + } + if (KH_DRAG_COUNT == 15) + { + kh_make_row(KH_DRAG_PAT15); + } + if (KH_DRAG_COUNT == 16) + { + kh_make_row(KH_DRAG_PAT16); + } + } + + void kh_make_row() + { + KH_TEMP_ROW = param1; + KH_X_COUNT = 8; + for (int i = 0; i < GetTokenCount(KH_TEMP_ROW, ";"); i++) + { + kh_make_row_loop(); + } + } + + void kh_make_row_loop() + { + string CUR_IDX = i; + if (!(GetToken(KH_TEMP_ROW, CUR_IDX, ";") == 1)) return; + int KH_X_COUNT = 16; + KH_X_COUNT *= CUR_IDX; + KH_X_COUNT -= 96; + string SPRITE_POS = KH_DRAG_POS; + SPRITE_POS += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(KH_X_COUNT, 0, 0)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_POS, "kh_dragon_sprite"); + } + + void kh_dragon_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 5.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", -0.05); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void titan_setup() + { + TN_IDX = param1; + TN_TELE_SPR = param2; + const int TN_TELE_FRAMES = 25; + TN_GLOW_SPR = param3; + } + + void titan_summon_sprite() + { + ClientEffect("tempent", "sprite", TN_TELE_SPR, param1, "titan_tele_sprite"); + if ((TN_SPRITE_LOOP)) return; + TN_SPRITE_LOOP = 1; + titan_sprite_loop(); + ScheduleDelayedEvent(2.5, "titan_end_sprite_loop"); + } + + void titan_sprite_loop() + { + if (!(TN_SPRITE_LOOP)) return; + ScheduleDelayedEvent(0.25, "titan_sprite_loop"); + ClientEffect("tempent", "sprite", TN_GLOW_SPR, /* TODO: $getcl */ $getcl(TN_IDX, "attachment1"), "titan_hand_sprite_setup"); + ClientEffect("tempent", "sprite", TN_GLOW_SPR, /* TODO: $getcl */ $getcl(TN_IDX, "attachment2"), "titan_hand_sprite_setup"); + } + + void titan_end_sprite_loop() + { + TN_SPRITE_LOOP = 0; + } + + void titan_tele_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "scale", 3.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", TN_TELE_FRAMES); + } + + void titan_hand_sprite_setup() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "fadeout", 0.5); + ClientEffect("tempent", "set_current_prop", "scale", 2.0); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 1.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void fx_stunburst_go_cl() + { + const string SB_STUN_SPRITE = "fire1_fixed.spr"; + SB_CYCLE_ANGLE = 0; + const int SB_TOTAL_OFS = 10; + SB_STUN_POS = param1; + SB_STUN_RADIUS = param2; + EmitSound3D("magic/boom.wav", 10, SB_STUN_POS); + string POS_GROUND = /* TODO: $get_ground_height */ $get_ground_height(SB_STUN_POS); + STUN_POS = "z"; + for (int i = 0; i < 17; i++) + { + fx_stun_burst_fx(); + } + } + + void fx_stun_burst_fx() + { + string FLAME_POS = SB_STUN_POS; + FLAME_POS += /* TODO: $relpos */ $relpos(Vector3(0, SB_CYCLE_ANGLE, 0), Vector3(0, SB_TOTAL_OFS, 0)); + ClientEffect("tempent", "sprite", SB_STUN_SPRITE, FLAME_POS, "fx_stunburst_flame"); + SB_CYCLE_ANGLE += 20; + } + + void fx_stunburst_flame() + { + float SB_FADE_DEL = 1.0; + int SB_SPRITE_SPEED = 100; + if (SB_STUN_RADIUS > 128) + { + float SB_FADE_DEL = 2.0; + int SB_SPRITE_SPEED = 400; + } + ClientEffect("tempent", "set_current_prop", "death_delay", SB_FADE_DEL); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 200); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + string SB_FLAME_TURN = /* TODO: $relvel */ $relvel(Vector3(0, SB_CYCLE_ANGLE, 0), Vector3(0, SB_SPRITE_SPEED, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", SB_FLAME_TURN); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + } + + void set_view_dist() + { + SetEnvironment("maxviewdist", param1); + } + + void fx_spark() + { + ClientEffect("spark", param1); + if (!(FX_SMITH_EFFECTS)) return; + if ((FX_SMITH_TYPE).findFirst("dark") >= 0) + { + string SPR_POS = param1; + SPR_POS += "z"; + ClientEffect("tempent", "sprite", FX_SMITH_SPRITE, SPR_POS, "fx_smith_setup_dark_sprite"); + EmitSound3D("magic/spookie1.wav", 10, param1); + } + if ((FX_SMITH_TYPE).findFirst("fire") >= 0) + { + string SPR_POS = param1; + SPR_POS += "z"; + ClientEffect("tempent", "model", "weapons/projectiles.mdl", SPR_POS, "fx_smith_setup_fire_sprite", "fx_smith_update_fire_sprite"); + EmitSound3D("magic/volcano_start.wav", 10, param1); + } + if ((FX_SMITH_TYPE).findFirst("ice") >= 0) + { + string SPR_POS = param1; + SPR_POS += "z"; + ClientEffect("tempent", "sprite", FX_SMITH_ICESPRITE, SPR_POS, "fx_smith_setup_ice_sprite"); + EmitSound3D("magic/freeze.wav", 10, param1); + } + } + + void fx_smith_effect() + { + if (param1 == "end") + { + FX_SMITH_EFFECTS = 0; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + FX_SMITH_EFFECTS = 1; + FX_SMITH_TYPE = param1; + FX_SMITH_SPRITE = param2; + FX_SMITH_ICESPRITE = param3; + } + + void fx_smith_setup_fire_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "body", 51); + ClientEffect("tempent", "set_current_prop", "framerate", 0.5); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + ClientEffect("tempent", "set_current_prop", "scale", 1.25); + ClientEffect("tempent", "set_current_prop", "fuser1", 1.25); + } + + void fx_smith_update_fire_sprite() + { + string CUR_SIZE = "game.tempent.fuser1"; + CUR_SIZE -= 0.01; + if (!(CUR_SIZE > 0)) return; + ClientEffect("tempent", "set_current_prop", "fuser1", CUR_SIZE); + ClientEffect("tempent", "set_current_prop", "scale", CUR_SIZE); + } + + void fx_smith_setup_dark_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "scale", 0.75); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 17); + } + + void fx_smith_setup_ice_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "scale", 0.25); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + } + + void phlames_viewfinder_on() + { + PHL_OWNER = param1; + if ((PHL_ON)) return; + PHL_ON = 1; + phlames_viewfinder_locator(); + } + + void phlames_viewfinder_off() + { + PHL_ON = 0; + } + + void phlames_viewfinder_locator() + { + if (!(PHL_ON)) return; + ScheduleDelayedEvent(0.01, "phlames_viewfinder_locator"); + string L_OWNER_VIEW = /* TODO: $getcl */ $getcl(PHL_OWNER, "viewangles"); + string L_SEAL_POS = /* TODO: $getcl */ $getcl(PHL_OWNER, "origin"); + string TRACE_START = L_SEAL_POS; + string TRACE_END = L_SEAL_POS; + TRACE_END += /* TODO: $relpos */ $relpos(L_OWNER_VIEW, Vector3(0, 1000, 0)); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + TRACE_LINE = "z"; + PHL_POS = TRACE_LINE; + if (Distance(L_SEAL_POS, PHL_POS) > 1024) + { + PHL_HIDE = 1; + } + else + { + PHL_HIDE = 0; + } + if (!(GetGameTime() > PHL_NEXT_SEAL)) return; + PHL_NEXT_SEAL = GetGameTime(); + PHL_NEXT_SEAL += 10.0; + ClientEffect("tempent", "model", "weapons/magic/seals.mdl", PHL_POS, "phlames_setup_seal", "phlames_update_seal"); + } + + void phlames_update_seal() + { + if (!(PHL_ON)) + { + ClientEffect("tempent", "set_current_prop", "origin", Vector3(10000, 10000, 10000)); + } + if (!(PHL_ON)) return; + ClientEffect("tempent", "set_current_prop", "origin", PHL_POS); + string L_OWNER_ORG = /* TODO: $getcl */ $getcl(PHL_OWNER, "origin"); + if ((PHL_HIDE)) + { + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 1); + } + else + { + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + } + } + + void phlames_setup_seal() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10.0); + ClientEffect("tempent", "set_current_prop", "fade", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "normal"); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "body", 1); + ClientEffect("tempent", "set_current_prop", "frames", 39); + } + + void cl_playsound() + { + EmitSound(GetOwner(), 0, param1, 10); + EmitSound3D(param1, param2, param3); + } + + void show_hbar() + { + if ((param2).findFirst("PARAM") == 0) + { + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + CL_HBAR_POS = param1; + CL_HBAR_FRAME = param2; + CL_HBAR_FRAME -= 22; + CL_HBAR_SCALE = param3; + CL_HBAR_INDEX = param4; + if ((/* TODO: $getcl */ $getcl(CL_HBAR_INDEX, "isplayer"))) + { + if (!("game.localplayer.thirdperson")) + { + } + if ("game.localplayer.index" == CL_HBAR_INDEX) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ClientEffect("tempent", "sprite", CL_HBAR_SPRITE, CL_HBAR_POS, "setup_hbar"); + } + + void setup_hbar() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 0.9); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "frame", CL_HBAR_FRAME); + ClientEffect("tempent", "set_current_prop", "scale", CL_HBAR_SCALE); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + + void set_test_beam() + { + ClientEffect("beam_ents", param1, 1, param2, 1, "lgtning.spr", 60.0, 10, 0.1, 0.3, 0.1, 30, Vector3(2, 1.5, 0.25)); + } + + void cl_svplaysound() + { + EmitSound3D(param3, param2, param4, param1); + } + + void game_cl_playsound() + { + LogDebug("*** game_cl_playsound PARAM3 PARAM2 PARAM4 PARAM1"); + EmitSound3D(param3, param2, param4, param1); + } + + void lightsys_render_lights() + { + string L_CUR_LIGHT_COLOR = ARRAY_LIGHT_COLOR[int(i)]; + if (!(L_CUR_LIGHT_COLOR != -1)) return; + int L_CUR_LIGHT_OWNER = int(i); + string L_CUR_LIGHT_RAD = ARRAY_LIGHT_RAD[int(i)]; + string L_CUR_LIGHT_POS = /* TODO: $getcl */ $getcl(L_CUR_LIGHT_OWNER, "origin"); + string L_CUR_LIGHT_ID = ARRAY_LIGHT_IDLIST[int(i)]; + ClientEffect("light", L_CUR_LIGHT_ID, L_CUR_LIGHT_POS, L_CUR_LIGHT_RAD, L_CUR_LIGHT_COLOR, 1.0); + if (GetGameTime() > NEXT_LIGHT_DEBUG) + { + NEXT_LIGHT_DEBUG = GetGameTime(); + NEXT_LIGHT_DEBUG += 5.0; + } + } + + void cl_light_update() + { + string L_ACTION = param1; + string L_OWNER = param2; + string L_COLOR = param3; + string L_RAD = param4; + if (!(GetCvar("ms_showotherglow"))) + { + if (L_OWNER != "game.localplayer.index") + { + return; + } + } + string L_PLAYER_IDX = L_OWNER; + if (L_ACTION == "new") + { + LIGHTSYS_TRACK_LIGHTS = 1; + if (!(LIGHTSYS_INITIALIZED)) + { + for (int i = 0; i < LIGHTSYS_N_LIGHTS; i++) + { + lightsys_make_lights(); + } + LIGHTSYS_INITIALIZED = 1; + } + if (ARRAY_LIGHT_COLOR[int(L_PLAYER_IDX)] == -1) + { + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(L_OWNER, "origin"), L_COLOR, L_RAD, 5.0); + string L_LIGHT_ID = "game.script.last_light_id"; + ARRAY_LIGHT_IDLIST[L_PLAYER_IDX] = L_LIGHT_ID; + ARRAY_LIGHT_COLOR[L_PLAYER_IDX] = L_COLOR; + ARRAY_LIGHT_RAD[L_PLAYER_IDX] = L_RAD; + } + else + { + string L_ACTION = "update"; + } + } + if (L_ACTION == "update") + { + ARRAY_LIGHT_COLOR[L_PLAYER_IDX] = L_COLOR; + ARRAY_LIGHT_RAD[L_PLAYER_IDX] = L_RAD; + LIGHTSYS_TRACK_LIGHTS = 1; + } + if (L_ACTION == "remove") + { + ARRAY_LIGHT_COLOR[L_PLAYER_IDX] = -1; + ARRAY_LIGHT_IDLIST[L_PLAYER_IDX] = -1; + ARRAY_LIGHT_RAD[L_PLAYER_IDX] = -1; + LIGHTSYS_ANY_VALID = 0; + for (int i = 0; i < LIGHTSYS_N_LIGHTS; i++) + { + lightsys_check_valid_lights(); + } + if (!(LIGHTSYS_ANY_VALID)) + { + LIGHTSYS_TRACK_LIGHTS = 0; + } + } + if (L_ACTION == "clear") + { + for (int i = 0; i < LIGHTSYS_N_LIGHTS; i++) + { + lightsys_light_remove(); + } + } + } + + void lightsys_dumplights() + { + for (int i = 0; i < LIGHTSYS_N_LIGHTS; i++) + { + lightsys_dumplights_loop(); + } + } + + void lightsys_dumplights_loop() + { + string CUR_IDX = i; + LogDebug("int(CUR_IDX) ARRAY_LIGHT_IDLIST[int(CUR_IDX)] ARRAY_LIGHT_COLOR[int(CUR_IDX)] ARRAY_LIGHT_RAD[int(CUR_IDX)]"); + } + + void lightsys_make_lights() + { + ARRAY_LIGHT_IDLIST.insertLast(-1); + ARRAY_LIGHT_COLOR.insertLast(-1); + ARRAY_LIGHT_RAD.insertLast(-1); + } + + void lightsys_check_valid_lights() + { + string L_CUR_LIGHT = ARRAY_LIGHT_COLOR[int(i)]; + if (!(L_CUR_LIGHT != -1)) return; + LIGHTSYS_ANY_VALID = 1; + } + + void lightsys_light_remove() + { + string CUR_IDX = i; + ARRAY_LIGHT_COLOR[CUR_IDX] = -1; + ARRAY_LIGHT_RAD[CUR_IDX] = 0; + ARRAY_LIGHT_IDLIST[CUR_IDX] = 0; + } + + void cl_tele1_fx() + { + CL_TELE1_ORG = param1; + EmitSound3D("debris/beamstart1.wav", 10, CL_TELE1_ORG); + cl_tele1_fx_go(); + ScheduleDelayedEvent(0.2, "cl_tele1_fx_go"); + ScheduleDelayedEvent(0.4, "cl_tele1_fx_go"); + ClientEffect("light", "new", CL_TELE1_ORG, 128, Vector3(255, 0, 0), 2.0); + } + + void cl_tele1_fx_go() + { + ClientEffect("tempent", "model", "weapons/projectiles.mdl", CL_TELE1_ORG, "cl_tele1_fx_sprite"); + } + + void cl_tele1_fx_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1.0); + ClientEffect("tempent", "set_current_prop", "body", 54); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "sequence", 8); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 255)); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + ClientEffect("tempent", "set_current_prop", "fuser1", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", -0.3); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "frames", 11); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, 90, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "movetype", 0); + } + + void cl_metal_cave_light() + { + if ((SFX_METAL_CAVE_LIGHT_ACTIVE)) return; + SFX_METAL_CAVE_MDL = param1; + SFX_R_CYCLE = 254; + SFX_G_CYCLE = 1; + SFX_B_CYCLE = 254; + SFX_R_CYCLE_PM = 0.02; + SFX_G_CYCLE_PM = -0.02; + SFX_B_CYCLE_PM = 0.02; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(SFX_METAL_CAVE_MDL, "origin"), 768, Vector3(255, 0, 255), 5.0); + SFX_METAL_CAVE_LIGHT = "game.script.last_light_id"; + SFX_METAL_CAVE_LIGHT_ACTIVE = 1; + } + + void cl_metal_cave_light_end() + { + SFX_METAL_CAVE_LIGHT_ACTIVE = 0; + } + + void cl_metal_cave_cycle() + { + string L_CYCLE = SFX_R_CYCLE_PM; + L_CYCLE *= Random(1, 2); + SFX_R_CYCLE += L_CYCLE; + if (SFX_R_CYCLE < 0) + { + SFX_R_CYCLE_PM *= -1; + SFX_R_CYCLE = 0; + } + if (SFX_R_CYCLE > 255) + { + SFX_R_CYCLE_PM *= -1; + SFX_R_CYCLE = 255; + } + string L_CYCLE = SFX_G_CYCLE_PM; + L_CYCLE *= Random(1, 2); + SFX_G_CYCLE += L_CYCLE; + if (SFX_G_CYCLE < 0) + { + SFX_G_CYCLE_PM *= -1; + SFX_G_CYCLE = 0; + } + if (SFX_G_CYCLE > 255) + { + SFX_G_CYCLE_PM *= -1; + SFX_G_CYCLE = 255; + } + string L_CYCLE = SFX_B_CYCLE_PM; + L_CYCLE *= Random(1, 2); + SFX_B_CYCLE += L_CYCLE; + if (SFX_B_CYCLE < 0) + { + SFX_B_CYCLE_PM *= -1; + SFX_B_CYCLE = 0; + } + if (SFX_B_CYCLE > 255) + { + SFX_B_CYCLE_PM *= -1; + SFX_B_CYCLE = 255; + } + Vector3 L_COLOR = Vector3(int(SFX_R_CYCLE), int(SFX_G_CYCLE), int(SFX_B_CYCLE)); + ClientEffect("light", SFX_METAL_CAVE_LIGHT, /* TODO: $getcl */ $getcl(SFX_METAL_CAVE_MDL, "origin"), 768, L_COLOR, 1.0); + } + + void s_test() + { + string L_PLR = "game.localplayer.index"; + string L_PLR_ORG = /* TODO: $getcl */ $getcl(L_PLR, "origin"); + string L_SCAN_RAD = param1; + if ((param2).findFirst(PARAM) == 0) + { + string SCAN_FLAGS = param2; + } + string SCAN_RESULT = /* TODO: $getcl_tsphere */ $getcl_tsphere(L_PLR_ORG, L_SCAN_RAD, SCAN_FLAGS); + LogDebug("s_test SCAN_RESULT"); + } + + void cl_set_height() + { + LogDebug("cl_set_height PARAM1"); + game.cleffect.view_ofs.z = param1; + } + + void ext_sbfollow() + { + string L_VIEWMODEL_IDX = "game.localplayer.viewmodel.active.id"; + int L_ATTACH = 1; + if ((param1).findFirst(PARAM) == 0) + { + string L_VIEWMODEL_IDX = param1; + } + if ((param2).findFirst(PARAM) == 0) + { + string L_ATTACH = param2; + } + ClientEffect("beam_follow", L_VIEWMODEL_IDX, L_ATTACH, "lgtning.spr", 20.0, 30, Vector3(1, 0, 0), 1); + LogDebug("*** ext_sbfollow PARAM1 PARAM2 [ game.script.last_beam_id ]"); + CYCLE_BEAM = "game.script.last_beam_id"; + } + + void ext_sbent() + { + string L_VIEWMODEL_IDX = "game.localplayer.viewmodel.active.id"; + int L_ATTACH1 = 1; + int L_ATTACH2 = 2; + if ((param1).findFirst(PARAM) == 0) + { + string L_VIEWMODEL_IDX = param1; + } + if ((param2).findFirst(PARAM) == 0) + { + string L_ATTACH1 = param2; + } + if ((param3).findFirst(PARAM) == 0) + { + string L_ATTACH2 = param3; + } + ClientEffect("beam_ents", L_VIEWMODEL_IDX, L_ATTACH1, L_VIEWMODEL_IDX, L_ATTACH2, "lgtning.spr", 20.0, 5, 1, 0.5, 100, 30, Vector3(1, 0, 1)); + LogDebug("*** ext_sbent PARAM1 PARAM2 PARAM3 [ game.script.last_beam_id ]"); + CYCLE_BEAM = "game.script.last_beam_id"; + } + + void ext_sbents() + { + string L_ENT1 = param1; + string L_ENT2 = param2; + ClientEffect("beam_ents", L_ENT1, 0, L_ENT2, 0, "lgtning.spr", 120.0, 5, 1, 255, 100, 30, Vector3(255, 0, 255)); + LogDebug("*** ext_sbent PARAM1 PARAM2 [ game.script.last_beam_id ] [ GAME_BULLSHIT ]"); + CYCLE_BEAM = "game.script.last_beam_id"; + } + + void edit_beam() + { + ClientEffect("beam_update", CYCLE_BEAM, param1, param2); + } + + void get_beam() + { + LogDebug("*** beamprop PARAM1 is /* TODO: $getcl_beam */ $getcl_beam(CYCLE_BEAM, param1)"); + } + + void clear_beams() + { + LogDebug("*** clear_beams"); + ClientEffect("beam_update", "removeall"); + } + + void change_sky() + { + SetEnvironment("sky.texture", param1); + } + + void cl_show_text() + { + // TODO: localmenu.reset + string reg.local.menu.title = "Test title"; + // TODO: registerlocal.menu + string reg.local.button.text = "Button1"; + int reg.local.button.closeonclick = 0; + int reg.local.button.enabled = 1; + int reg.local.button.docallback = 1; + string reg.local.button.callback = "cb_test1"; + // TODO: registerlocal.button + string reg.local.button.text = "Button2"; + int reg.local.button.closeonclick = 1; + int reg.local.button.enabled = 0; + int reg.local.button.docallback = 0; + string reg.local.button.callback = "cb_test1"; + // TODO: registerlocal.button + string reg.local.button.text = "Button3"; + int reg.local.button.closeonclick = 1; + int reg.local.button.enabled = 1; + int reg.local.button.docallback = 0; + // TODO: registerlocal.button + string reg.local.paragraph.source.type = "local"; + string reg.local.paragraph.source = "#LOCALPAGE_TEST1"; + // TODO: registerlocal.paragraph + LogMessage("ent_me OPENING"); + // TODO: localmenu.open + } + + void cb_test1() + { + // TODO: localmenu.close + } + + void cb_test2() + { + } + + void spawn_corpse() + { + CORPSE_ANG = /* TODO: $getcl */ $getcl(param1, "angles"); + CORPSE_ANIM_IDX = param2; + CORPSE_SCALE = GetToken(param3, 0, ";"); + if (CORPSE_SCALE == 0) + { + CORPSE_SCALE = 1; + } + L_INRENDER = GetToken(param3, 1, ";"); + CORPSE_RENDERMODE = "normal"; + if (L_INRENDER == 2) + { + CORPSE_RENDERMODE = "texture"; + } + if (L_INRENDER == 5) + { + CORPSE_RENDERMODE = "add"; + } + CORPSE_RENDERAMT = GetToken(param3, 2, ";"); + if (CORPSE_RENDERAMT == 0) + { + CORPSE_RENDERAMT = 255; + } + CORPSE_BODY_IDX = GetToken(param3, 3, ";"); + CORPSE_SKIN = GetToken(param3, 4, ";"); + LogDebug("*** clplayer spawn_corpse PARAM1 PARAM2 model: /* TODO: $getcl */ $getcl(param1, "model") scale: CORPSE_SCALE rmode: CORPSE_RENDERMODE ramt: CORPSE_RENDERAMT bodyidx: CORPSE_BODY_IDX origin: /* TODO: $getcl */ $getcl(param1, "origin")"); + ClientEffect("tempent", "model", /* TODO: $getcl */ $getcl(param1, "model"), /* TODO: $getcl */ $getcl(param1, "origin"), "setup_corpse"); + } + + void setup_corpse() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 20.0); + ClientEffect("tempent", "set_current_prop", "scale", CORPSE_SCALE); + ClientEffect("tempent", "set_current_prop", "gravity", 1); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, -50)); + ClientEffect("tempent", "set_current_prop", "collide", "world"); + ClientEffect("tempent", "set_current_prop", "framerate", 1.0); + ClientEffect("tempent", "set_current_prop", "frames", 50); + ClientEffect("tempent", "set_current_prop", "body", CORPSE_BODY_IDX); + ClientEffect("tempent", "set_current_prop", "sequence", CORPSE_ANIM_IDX); + ClientEffect("tempent", "set_current_prop", "angles", CORPSE_ANG); + ClientEffect("tempent", "set_current_prop", "rendermode", CORPSE_RENDERMODE); + ClientEffect("tempent", "set_current_prop", "renderamt", CORPSE_RENDERAMT); + ClientEffect("tempent", "set_current_prop", "skin", CORPSE_SKIN); + } + + void cl_array_test() + { + if (!(SETUP_TEST_ARRAY)) + { + array ARRAY_TEST; + SETUP_TEST_ARRAY = 1; + } + ARRAY_TEST.insertLast("yes"); + } + +} + +} diff --git a/scripts/angelscript/player/player_cl_effects_water.as b/scripts/angelscript/player/player_cl_effects_water.as new file mode 100644 index 00000000..7f244f6c --- /dev/null +++ b/scripts/angelscript/player/player_cl_effects_water.as @@ -0,0 +1,83 @@ +#pragma context server + +namespace MS +{ + +class PlayerClEffectsWater : CGameScript +{ + string BIG_SPLASH_SND; + int BIG_SPLASH_SPEED; + int OFS_NEG; + int OFS_NEG2; + int OFS_POS; + int OFS_POS2; + string SPRITE_1; + string water.snd; + float water.splashscale; + + PlayerClEffectsWater() + { + SPRITE_1 = "wsplash3.spr"; + Precache(SPRITE_1); + OFS_POS = 5; + OFS_NEG = -5; + OFS_POS2 = 15; + OFS_NEG2 = -15; + BIG_SPLASH_SPEED = 300; + BIG_SPLASH_SND = "body/splash1.wav"; + Precache(BIG_SPLASH_SND); + } + + void game_playermove() + { + if ("game.pmove.oldwaterlevel" == 0) + { + if (("game.pmove.waterlevel")) + { + } + if ("game.pmove.fallvelocity" < BIG_SPLASH_SPEED) + { + water_getsnd_wade(); + } + else + { + water.snd = BIG_SPLASH_SND; + } + EmitSound3D(water.snd, "game.sound.maxvol", "const.snd.voice"); + } + } + + void water_createsplash() + { + PARAM1 += Vector3(RandomInt(OFS_NEG, OFS_POS), RandomInt(OFS_NEG, OFS_POS), RandomInt(0, 1.5)); + water.splashscale = 0.2; + ClientEffect("tempent", "sprite", SPRITE_1, param1, "setup_sprite1_splash"); + } + + void water_createsplash_big() + { + PARAM1 += Vector3(RandomInt(OFS_NEG2, OFS_POS2), RandomInt(OFS_NEG2, OFS_POS2), RandomInt(-3, 0)); + water.splashscale = 1; + ClientEffect("tempent", "sprite", SPRITE_1, param1, "setup_sprite1_splash"); + } + + void water_getsnd_wade() + { + water.snd = "player/pl_wade"; + water.snd += RandomInt(1, 4); + water.snd += ".wav"; + } + + void setup_sprite1_splash() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "framerate", 20); + ClientEffect("tempent", "set_current_prop", "frames", 14); + ClientEffect("tempent", "set_current_prop", "scale", water.splashscale); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/player/player_cl_effects_weather.as b/scripts/angelscript/player/player_cl_effects_weather.as new file mode 100644 index 00000000..bf6565c2 --- /dev/null +++ b/scripts/angelscript/player/player_cl_effects_weather.as @@ -0,0 +1,994 @@ +#pragma context client + +namespace MS +{ + +class PlayerClEffectsWeather : CGameScript +{ + string CUR_WEATHER_RAIN_DROP_RATE; + string CUR_WEATHER_RAIN_VOL; + string CUR_WEATHER_SNOW_DROP_RATE; + string DEST_WEATHER_FOG_COLOR; + int DEST_WEATHER_FOG_DENSITY; + int DEST_WEATHER_FOG_END; + int DEST_WEATHER_FOG_START; + int DEST_WEATHER_FOG_UNDERGROUND; + int DEST_WEATHER_RAIN_DROP_RATE; + int DEST_WEATHER_RAIN_VOL; + int DEST_WEATHER_SNOW_DROP_RATE; + string DEST_WEATHER_TINT; + int DEST_WEATHER_TINT_UNDERGROUND; + float FREQ_SNOW_CHAR_BREATH; + float FREQ_STORM_LIGHTNING; + float FREQ_WEATHER_RAIN_SOUND; + float FREQ_WEATHER_SNOW_SOUND; + string PREV_WEATHER; + string SOUND_DAY; + string SOUND_NIGHT; + string SOUND_RAIN; + string SOUND_RAIN_START; + string SOUND_SNOW; + string TOD_STATE; + int WEATHER_CHANNEL; + int WEATHER_CURRENT_AMB_VOL; + string WEATHER_FOG_COLOR; + int WEATHER_FOG_DENSITY; + int WEATHER_FOG_END; + int WEATHER_FOG_NIGHT; + int WEATHER_FOG_ON; + int WEATHER_FOG_START; + int WEATHER_FOG_UNDERGROUND; + string WEATHER_FORCE_CHANGE_TYPE; + string WEATHER_IN_TRANSITION; + int WEATHER_LIGHTNING_ON; + int WEATHER_LOOP_ON; + string WEATHER_PARAM; + string WEATHER_PLAYER_UNDERGROUND; + string WEATHER_PLAYER_UNDERGROUND_COUNT; + int WEATHER_RAIN_DROP_MAXRATE; + int WEATHER_RAIN_DROP_RATE; + string WEATHER_RAIN_EVENT; + string WEATHER_RAIN_FOG_COLOR; + float WEATHER_RAIN_FOG_DENSITY; + int WEATHER_RAIN_FOG_END; + int WEATHER_RAIN_FOG_ON; + int WEATHER_RAIN_FOG_START; + int WEATHER_RAIN_FOG_UNDERGROUND; + int WEATHER_RAIN_MAXVOL; + int WEATHER_RAIN_MIST; + int WEATHER_RAIN_ON; + int WEATHER_RAIN_RADIUS; + string WEATHER_RAIN_TINT_DAY; + string WEATHER_RAIN_TINT_DUSK; + string WEATHER_RAIN_TINT_NIGHT; + int WEATHER_RAIN_VOL; + string WEATHER_RAIN_ZVELOCITY; + int WEATHER_SNOW_DROP_RATE; + string WEATHER_SNOW_EVENT; + string WEATHER_SNOW_FOG_COLOR; + string WEATHER_SNOW_FOG_COLOR_DUSK; + string WEATHER_SNOW_FOG_COLOR_NIGHT; + float WEATHER_SNOW_FOG_DENSITY; + int WEATHER_SNOW_FOG_END; + int WEATHER_SNOW_FOG_ON; + int WEATHER_SNOW_FOG_START; + int WEATHER_SNOW_FOG_UNDERGROUND; + string WEATHER_SNOW_NEXT_SOUND; + int WEATHER_SNOW_ON; + int WEATHER_SNOW_RADIUS; + int WEATHER_SNOW_RATE; + string WEATHER_SNOW_TINT; + int WEATHER_SPIN_RATIO; + string WEATHER_SPRITE_BREATH; + string WEATHER_SPRITE_RAIN; + string WEATHER_SPRITE_RAIN_MIST; + string WEATHER_SPRITE_RAIN_RIPPLE; + string WEATHER_SPRITE_RAIN_SPLASH; + string WEATHER_SPRITE_SNOW; + int WEATHER_STORM_DROP_MAXRATE; + int WEATHER_STORM_MAXVOL; + string WEATHER_TINT; + int WEATHER_TINT_ON; + int WEATHER_TINT_UNDERGROUND; + float WEATHER_TOD_DAY_LIGHTGAMMA; + string WEATHER_TOD_DAY_TINT; + string WEATHER_TOD_DUSK_TINT; + float WEATHER_TOD_LIGHTGAMMA; + string WEATHER_TOD_NIGHT_FOG_COLOR; + float WEATHER_TOD_NIGHT_FOG_DENSITY; + int WEATHER_TOD_NIGHT_FOG_END; + int WEATHER_TOD_NIGHT_FOG_START; + float WEATHER_TOD_NIGHT_LIGHTGAMMA; + string WEATHER_TOD_NIGHT_TINT; + string WEATHER_TO_FORCE; + string WEATHER_TYPE; + string WEATHER_VOL_SPIN_POINT; + int WEATHER_WAS_RAIN; + int WEATHER_WAS_SNOW; + string WEATHER_WIND_STRENGTH; + + PlayerClEffectsWeather() + { + WEATHER_CHANNEL = 5; + SOUND_RAIN = "weather/rain.wav"; + SOUND_RAIN_START = "weather/rain_start.wav"; + SOUND_DAY = "amb/birds01.wav"; + SOUND_NIGHT = "amb/wolf01.wav"; + SOUND_SNOW = "amb/wind.wav"; + FREQ_WEATHER_SNOW_SOUND = 7.0; + FREQ_WEATHER_RAIN_SOUND = 14.6; + Precache(SOUND_RAIN); + WEATHER_SPRITE_RAIN = "rain.spr"; + WEATHER_SPRITE_RAIN_SPLASH = "rain_splash.spr"; + WEATHER_SPRITE_RAIN_MIST = "rain_mist.spr"; + WEATHER_SPRITE_RAIN_RIPPLE = "rain_ripple.spr"; + WEATHER_SPRITE_SNOW = "snow1.spr"; + WEATHER_SPRITE_BREATH = "char_breath.spr"; + WEATHER_RAIN_DROP_MAXRATE = 10; + WEATHER_RAIN_MAXVOL = 5; + WEATHER_RAIN_TINT_NIGHT = 0.1 + "," + 0.1 + "," + 0.1 + "," + 0.3; + WEATHER_RAIN_TINT_DAY = 0.1 + "," + 0.1 + "," + 0.1 + "," + 0.3; + WEATHER_RAIN_TINT_DUSK = 0.1 + "," + 0.1 + "," + 0.1 + "," + 0.3; + WEATHER_RAIN_FOG_COLOR = Vector3(0.4, 0.4, 0.5); + WEATHER_RAIN_FOG_DENSITY = 0.0007; + WEATHER_RAIN_FOG_START = 0; + WEATHER_RAIN_FOG_END = 4000; + WEATHER_RAIN_FOG_ON = 1; + WEATHER_RAIN_FOG_UNDERGROUND = 0; + WEATHER_RAIN_RADIUS = 1024; + WEATHER_STORM_DROP_MAXRATE = 20; + WEATHER_STORM_MAXVOL = 10; + FREQ_STORM_LIGHTNING = Random(20.0, 30.0); + WEATHER_SNOW_DROP_RATE = 5; + WEATHER_SNOW_TINT = 0 + "," + 0 + "," + 0 + "," + 0; + WEATHER_SNOW_FOG_COLOR = Vector3(1, 1, 1); + WEATHER_SNOW_FOG_DENSITY = 0.4; + WEATHER_SNOW_FOG_START = 64; + WEATHER_SNOW_FOG_END = 2048; + WEATHER_SNOW_FOG_ON = 1; + WEATHER_SNOW_FOG_COLOR_NIGHT = Vector3(0.8, 0.8, 0.8); + WEATHER_SNOW_FOG_COLOR_DUSK = Vector3(0.9, 0.8, 0.8); + WEATHER_SNOW_FOG_UNDERGROUND = 0; + WEATHER_SNOW_RATE = 4; + FREQ_SNOW_CHAR_BREATH = Random(10.0, 30.0); + WEATHER_SNOW_RADIUS = 1024; + WEATHER_TOD_DAY_TINT = 0 + "," + 0 + "," + 0 + "," + 0; + WEATHER_TOD_DAY_LIGHTGAMMA = 2.5; + WEATHER_TOD_DUSK_TINT = 0.8156 + "," + 0.368627 + "," + 0.007843 + "," + 0.1; + WEATHER_TOD_LIGHTGAMMA = 5.0; + WEATHER_TOD_NIGHT_TINT = 0.02 + "," + 0.02 + "," + 0.3 + "," + 0.1; + WEATHER_TOD_NIGHT_LIGHTGAMMA = 4.0; + WEATHER_TOD_NIGHT_FOG_COLOR = Vector3(0, 0, 0); + WEATHER_TOD_NIGHT_FOG_DENSITY = 0.05; + WEATHER_TOD_NIGHT_FOG_START = 256; + WEATHER_TOD_NIGHT_FOG_END = 1024; + TOD_STATE = "day"; + WEATHER_TYPE = "clear"; + WEATHER_IN_TRANSITION = ""; + WEATHER_TYPE = "clear"; + WEATHER_LOOP_ON = 0; + WEATHER_SNOW_ON = 0; + WEATHER_RAIN_ON = 0; + WEATHER_LIGHTNING_ON = 0; + WEATHER_RAIN_EVENT = "weather_rain_makesprite"; + WEATHER_SNOW_EVENT = "weather_snow_makesprite"; + WEATHER_SNOW_DROP_RATE = 0; + WEATHER_RAIN_DROP_RATE = 0; + DEST_WEATHER_SNOW_DROP_RATE = 0; + DEST_WEATHER_RAIN_DROP_RATE = 0; + WEATHER_RAIN_VOL = 0; + DEST_WEATHER_RAIN_VOL = 0; + WEATHER_TINT_ON = 0; + WEATHER_TINT = 0 + "," + 0 + "," + 0 + "," + 0; + DEST_WEATHER_TINT = 0 + "," + 0 + "," + 0 + "," + 0; + WEATHER_FOG_ON = 0; + WEATHER_FOG_COLOR = Vector3(0, 0, 0); + WEATHER_FOG_DENSITY = 0; + WEATHER_FOG_START = 0; + WEATHER_FOG_END = 0; + DEST_WEATHER_FOG_COLOR = Vector3(0, 0, 0); + DEST_WEATHER_FOG_DENSITY = 0; + DEST_WEATHER_FOG_START = 0; + DEST_WEATHER_FOG_END = 0; + WEATHER_FOG_NIGHT = 0; + WEATHER_FOG_UNDERGROUND = 0; + DEST_WEATHER_FOG_UNDERGROUND = 0; + WEATHER_TINT_UNDERGROUND = 0; + DEST_WEATHER_TINT_UNDERGROUND = 0; + WEATHER_RAIN_MIST = 0; + WEATHER_FORCE_CHANGE_TYPE = "none"; + WEATHER_CURRENT_AMB_VOL = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + if (!(WEATHER_FOG_UNDERGROUND)) + { + if ((WEATHER_FOG_ON)) + { + } + weather_check_sky(); + int DID_SKY_CHECK = 1; + if ((WEATHER_PLAYER_UNDERGROUND)) + { + SetEnvironment("fog.enabled", 0); + } + else + { + SetEnvironment("fog.enabled", 1); + } + } + if (!(WEATHER_TINT_UNDERGROUND)) + { + if ((WEATHER_TINT_ON)) + { + } + if (!(DID_SKY_CHECK)) + { + weather_check_sky(); + } + if ((WEATHER_PLAYER_UNDERGROUND)) + { + SetEnvironment("screen.tint", 0 + "," + 0 + "," + 0 + "," + 0); + } + else + { + SetEnvironment("screen.tint", WEATHER_TINT); + } + } + } + + void tod_change() + { + } + + void weather_force_change() + { + if (param1 == "storm") + { + string PARAM1 = "rain_storm"; + } + WEATHER_IN_TRANSITION = 0; + weather_clear("abort"); + WEATHER_TO_FORCE = param1; + ScheduleDelayedEvent(0.5, "weather_force_change2"); + } + + void weather_force_change2() + { + weather_finalize(WEATHER_TO_FORCE); + } + + void weather_change() + { + string L_WEATHER = param1; + if (L_WEATHER == "storm") + { + string L_WEATHER = "rain_storm"; + } + PREV_WEATHER = WEATHER_TYPE; + WEATHER_TYPE = L_WEATHER; + WEATHER_PARAM = param2; + if (!(PREV_WEATHER != WEATHER_TYPE)) return; + if ((WEATHER_TYPE).findFirst("fog") >= 0) + { + weather_find_dest_fog(); + } + weather_start_transition(); + } + + void weather_find_dest_fog() + { + if (WEATHER_TYPE == "fog_white") + { + weather_dest_fog("(1,1,1)", 1.4, 32, 2048, 1); + } + if (WEATHER_TYPE == "fog_thick") + { + weather_dest_fog("(0.9,0.9,0.9)", 5.4, 50, 500, 1); + } + if (WEATHER_TYPE == "fog_green") + { + weather_dest_fog("(0,1,0)", 1.4, 32, 2048, 1); + } + if (WEATHER_TYPE == "fog_red") + { + weather_dest_fog("(1,0,0)", 1.4, 32, 2048, 1); + } + if (WEATHER_TYPE == "fog_blue") + { + weather_dest_fog("(0.8,0.8,1.0)", 1.4, 32, 2048, 1); + } + if (WEATHER_TYPE == "fog_brown") + { + weather_dest_fog("(0.6,0.5,0.2)", 5.4, 50, 500, 1); + } + if (WEATHER_TYPE == "fog_black") + { + weather_dest_fog("(0.0,0,0.0,0.599)", 1.5, 50, 500, 1); + } + if (WEATHER_TYPE == "fog_custom") + { + weather_dest_fog(WEATHER_PARAM, 1.4, 32, 2048, 1); + } + if (WEATHER_TYPE == "fog_dragon_red") + { + weather_dest_fog("(1,0,0)", 0.4, 512, 2048, 1); + } + if (WEATHER_TYPE == "fog_dragon_black") + { + weather_dest_fog("(0.0,0,0.0,0.599)", 0.4, 512, 2048, 1); + } + if (WEATHER_TYPE == "fog_dragon_white") + { + WEATHER_SNOW_ON = 1; + weather_dest_fog("(0.25,0.25,0.5)", 0.4, 512, 2048, 1); + } + } + + void weather_clear() + { + WEATHER_WAS_SNOW = 0; + WEATHER_WAS_RAIN = 0; + if ((WEATHER_SNOW_ON)) + { + int DO_SPIN_DOWN = 1; + WEATHER_WAS_SNOW = 1; + } + if ((WEATHER_RAIN_ON)) + { + int DO_SPIN_DOWN = 1; + WEATHER_WAS_RAIN = 1; + } + if ((DO_SPIN_DOWN)) + { + WEATHER_VOL_SPIN_POINT = WEATHER_CURRENT_AMB_VOL; + weather_spin_down_sound(); + } + else + { + SetSoundVolume(WEATHER_CHANNEL); + } + WEATHER_CURRENT_AMB_VOL = 0; + WEATHER_LOOP_ON = 0; + WEATHER_IN_TRANSITION = 0; + WEATHER_RAIN_ON = 0; + WEATHER_SNOW_ON = 0; + WEATHER_LIGHTNING_ON = 0; + WEATHER_FOG_ON = 0; + WEATHER_TINT_ON = 0; + WEATHER_TINT = 0 + "," + 0 + "," + 0 + "," + 0; + WEATHER_FOG_COLOR = Vector3(0, 0, 0); + WEATHER_FOG_DENSITY = 0; + if (TOD_STATE != "night") + { + int CLEAR_FOG = 1; + } + if (param1 == "abort") + { + int CLEAR_FOG = 1; + } + if ((CLEAR_FOG)) + { + SetEnvironment("fog.enabled", 0); + SetEnvironment("fog.color", 0); + SetEnvironment("fog.density", 0); + SetEnvironment("fog.start", 0); + SetEnvironment("fog.end", 0); + SetEnvironment("fog.type", "linear"); + } + if (TOD_STATE == "day") + { + int CLEAR_TINT = 1; + } + if (param1 == "abort") + { + int CLEAR_TINT = 1; + } + if ((CLEAR_TINT)) + { + SetEnvironment("screen.tint", 0 + "," + 0 + "," + 0 + "," + 0); + } + } + + void weather_spin_down_sound() + { + WEATHER_VOL_SPIN_POINT -= 0.1; + if (WEATHER_VOL_SPIN_POINT == 0) + { + if ((WEATHER_WAS_RAIN)) + { + SetSoundVolume(WEATHER_CHANNEL); + } + if ((WEATHER_WAS_SNOW)) + { + SetSoundVolume(WEATHER_CHANNEL); + } + } + if (WEATHER_VOL_SPIN_POINT > 0) + { + ScheduleDelayedEvent(0.1, "weather_spin_down_sound"); + } + if ((WEATHER_WAS_RAIN)) + { + SetSoundVolume(WEATHER_CHANNEL); + } + if ((WEATHER_WAS_SNOW)) + { + SetSoundVolume(WEATHER_CHANNEL); + } + } + + void weather_dest_fog() + { + DEST_WEATHER_FOG_COLOR = param1; + DEST_WEATHER_FOG_DENSITY = param2; + DEST_WEATHER_FOG_START = param3; + DEST_WEATHER_FOG_END = param4; + WEATHER_FOG_UNDERGROUND = param5; + } + + void weather_set_fog() + { + WEATHER_FOG_COLOR = param1; + WEATHER_FOG_DENSITY = param2; + WEATHER_FOG_START = param3; + WEATHER_FOG_END = param4; + WEATHER_FOG_UNDERGROUND = param5; + if (!(WEATHER_FOG_UNDERGROUND)) + { + if ((WEATHER_PLAYER_UNDERGROUND)) + { + } + int DELAY_FOG = 1; + } + if (!(DELAY_FOG)) + { + SetEnvironment("fog.enabled", 1); + } + SetEnvironment("fog.color", WEATHER_FOG_COLOR); + SetEnvironment("fog.density", WEATHER_FOG_DENSITY); + SetEnvironment("fog.start", WEATHER_FOG_START); + SetEnvironment("fog.end", WEATHER_FOG_END); + if ((WEATHER_TYPE).findFirst("rain") >= 0) + { + SetEnvironment("fog.type", "exp"); + } + else + { + SetEnvironment("fog.type", "linear"); + } + WEATHER_FOG_ON = 1; + } + + void weather_start_transition() + { + if ((WEATHER_IN_TRANSITION)) + { + weather_force_change(WEATHER_TYPE); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((TOD_IN_TRANSITION)) + { + weather_force_change(WEATHER_TYPE); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((WEATHER_IN_TRANSITION)) return; + WEATHER_IN_TRANSITION = 1; + if (WEATHER_TYPE == "clear") + { + DEST_WEATHER_FOG_COLOR = Vector3(0, 0, 0); + DEST_WEATHER_FOG_DENSITY = 0; + DEST_WEATHER_FOG_START = 0; + DEST_WEATHER_FOG_END = 10000; + DEST_WEATHER_SNOW_DROP_RATE = 0; + DEST_WEATHER_RAIN_DROP_RATE = 0; + DEST_WEATHER_RAIN_VOL = 0; + DEST_WEATHER_TINT = 0 + "," + 0 + "," + 0 + "," + 0; + } + if ((WEATHER_TYPE).findFirst("fog") >= 0) + { + DEST_WEATHER_RAIN_VOL = 0; + } + if (WEATHER_TYPE == "rain") + { + EmitSound(GetOwner(), WEATHER_CHANNEL, SOUND_RAIN_START, 6); + DEST_WEATHER_FOG_COLOR = WEATHER_RAIN_FOG_COLOR; + DEST_WEATHER_FOG_DENSITY = WEATHER_RAIN_FOG_DENSITY; + DEST_WEATHER_FOG_START = WEATHER_RAIN_FOG_START; + DEST_WEATHER_FOG_END = WEATHER_RAIN_FOG_END; + DEST_WEATHER_SNOW_DROP_RATE = 0; + DEST_WEATHER_RAIN_DROP_RATE = WEATHER_RAIN_DROP_MAXRATE; + DEST_WEATHER_RAIN_VOL = WEATHER_RAIN_MAXVOL; + WEATHER_RAIN_ZVELOCITY = Random(-500, -200); + int DEST_FOG_ON = 1; + if (TOD_STATE == "day") + { + DEST_WEATHER_TINT = WEATHER_RAIN_TINT_DAY; + } + if (TOD_STATE == "dusk") + { + DEST_WEATHER_TINT = WEATHER_RAIN_TINT_DUSK; + } + if (TOD_STATE == "night") + { + DEST_WEATHER_TINT = WEATHER_RAIN_TINT_NIGHT; + } + if (!(WEATHER_LOOP_ON)) + { + } + weather_loop_start(); + } + if (WEATHER_TYPE == "rain_storm") + { + EmitSound(GetOwner(), WEATHER_CHANNEL, SOUND_RAIN_START, 10); + DEST_WEATHER_FOG_COLOR = WEATHER_RAIN_FOG_COLOR; + DEST_WEATHER_FOG_DENSITY = WEATHER_RAIN_FOG_DENSITY; + DEST_WEATHER_FOG_START = WEATHER_RAIN_FOG_START; + DEST_WEATHER_FOG_END = WEATHER_RAIN_FOG_END; + DEST_WEATHER_SNOW_DROP_RATE = 0; + DEST_WEATHER_RAIN_DROP_RATE = WEATHER_STORM_DROP_MAXRATE; + DEST_WEATHER_RAIN_VOL = WEATHER_STORM_MAXVOL; + WEATHER_RAIN_ZVELOCITY = Random(-1000, -900); + WEATHER_LIGHTNING_ON = 1; + int DEST_FOG_ON = 1; + if (TOD_STATE == "day") + { + DEST_WEATHER_TINT = WEATHER_RAIN_TINT_DAY; + } + if (TOD_STATE == "dusk") + { + DEST_WEATHER_TINT = WEATHER_RAIN_TINT_DUSK; + } + if (TOD_STATE == "night") + { + DEST_WEATHER_TINT = WEATHER_RAIN_TINT_NIGHT; + } + if (!(WEATHER_LOOP_ON)) + { + } + weather_loop_start(); + } + if (WEATHER_TYPE == "snow") + { + DEST_WEATHER_FOG_COLOR = WEATHER_SNOW_FOG_COLOR; + WEATHER_SNOW_FOG_DENSITY = 0.4; + WEATHER_SNOW_FOG_START = 64; + DEST_WEATHER_FOG_DENSITY = WEATHER_SNOW_FOG_DENSITY; + DEST_WEATHER_FOG_START = WEATHER_SNOW_FOG_START; + DEST_WEATHER_FOG_END = WEATHER_SNOW_FOG_END; + DEST_WEATHER_SNOW_DROP_RATE = WEATHER_SNOW_DROP_RATE; + DEST_WEATHER_RAIN_DROP_RATE = 0; + DEST_WEATHER_RAIN_VOL = 0; + DEST_WEATHER_TINT = WEATHER_SNOW_TINT; + WEATHER_SNOW_ON = 1; + WEATHER_LIGHTNING_ON = 0; + int DEST_FOG_ON = 1; + if (!(WEATHER_LOOP_ON)) + { + } + weather_loop_start(); + } + if (WEATHER_RAIN_VOL == 0) + { + if (DEST_WEATHER_RAIN_VOL > 0) + { + } + EmitSound(GetOwner(), WEATHER_CHANNEL, SOUND_RAIN, 0.001); + WEATHER_RAIN_ON = 1; + } + if ((DEST_FOG_ON)) + { + if (!(WEATHER_FOG_ON)) + { + } + SetEnvironment("fog.enabled", 1); + SetEnvironment("fog.color", 0); + SetEnvironment("fog.density", 0); + SetEnvironment("fog.start", 0); + SetEnvironment("fog.end", 10000); + SetEnvironment("fog.type", "linear"); + WEATHER_FOG_ON = 1; + } + CUR_WEATHER_SNOW_DROP_RATE = WEATHER_SNOW_DROP_RATE; + CUR_WEATHER_RAIN_DROP_RATE = WEATHER_RAIN_DROP_RATE; + CUR_WEATHER_RAIN_VOL = WEATHER_RAIN_VOL; + WEATHER_SPIN_RATIO = 0; + weather_transition_loop(); + } + + void weather_transition_loop() + { + if (!(WEATHER_IN_TRANSITION)) return; + WEATHER_SPIN_RATIO += 0.1; + if (WEATHER_SPIN_RATIO == 1.0) + { + weather_finalize(WEATHER_TYPE); + int EXIT_SUB = 1; + } + else + { + ScheduleDelayedEvent(0.1, "weather_transition_loop"); + } + if ((EXIT_SUB)) return; + string W_RATIO = WEATHER_SPIN_RATIO; + if (WEATHER_TINT != DEST_WEATHER_TINT) + { + string C_R = (WEATHER_TINT).x; + string C_G = (WEATHER_TINT).z; + string C_B = (WEATHER_TINT).y; + string D_R = (DEST_WEATHER_TINT).x; + string D_G = (DEST_WEATHER_TINT).z; + string D_B = (DEST_WEATHER_TINT).y; + string T_R = /* TODO: $ratio */ $ratio(W_RATIO, C_R, D_R); + string T_G = /* TODO: $ratio */ $ratio(W_RATIO, C_G, D_G); + string T_B = /* TODO: $ratio */ $ratio(W_RATIO, C_B, D_B); + SetEnvironment("screen.tint", Vector3(T_R, T_G, T_B)); + } + if ((WEATHER_RAIN_ON)) + { + if (DEST_WEATHER_RAIN_DROP_RATE != CUR_WEATHER_RAIN_DROP_RATE) + { + WEATHER_RAIN_DROP_RATE = /* TODO: $ratio */ $ratio(W_RATIO, CUR_WEATHER_RAIN_DROP_RATE, DEST_WEATHER_RAIN_DROP_RATE); + } + } + if ((WEATHER_SNOW_ON)) + { + if (DEST_WEATHER_SNOW_DROP_RATE != CUR_WEATHER_SNOW_DROP_RATE) + { + WEATHER_SNOW_DROP_RATE = /* TODO: $ratio */ $ratio(W_RATIO, CUR_WEATHER_SNOW_DROP_RATE, DEST_WEATHER_SNOW_DROP_RATE); + } + } + if (DEST_WEATHER_RAIN_VOL > 0) + { + SetSoundVolume(WEATHER_CHANNEL); + } + if (!(WEATHER_FOG_ON)) return; + if (WEATHER_FOG_COLOR != DEST_WEATHER_FOG_COLOR) + { + string C_R = (WEATHER_FOG_COLOR).x; + string C_G = (WEATHER_FOG_COLOR).z; + string C_B = (WEATHER_FOG_COLOR).y; + string D_R = (DEST_WEATHER_FOG_COLOR).x; + string D_G = (DEST_WEATHER_FOG_COLOR).z; + string D_B = (DEST_WEATHER_FOG_COLOR).y; + string T_R = /* TODO: $ratio */ $ratio(W_RATIO, C_R, D_R); + string T_G = /* TODO: $ratio */ $ratio(W_RATIO, C_G, D_G); + string T_B = /* TODO: $ratio */ $ratio(W_RATIO, C_B, D_B); + SetEnvironment("fog.color", Vector3(T_R, T_G, T_B)); + } + if (WEATHER_FOG_DENSITY != DEST_WEATHER_FOG_DENSITY) + { + SetEnvironment("fog.density", /* TODO: $ratio */ $ratio(W_RATIO, WEATHER_FOG_DENSITY, DEST_WEATHER_FOG_DENSITY)); + } + if (WEATHER_FOG_START != DEST_WEATHER_FOG_START) + { + SetEnvironment("fog.start", /* TODO: $ratio */ $ratio(W_RATIO, WEATHER_FOG_START, DEST_WEATHER_FOG_START)); + } + if (WEATHER_FOG_END != DEST_WEATHER_FOG_END) + { + SetEnvironment("fog.end", /* TODO: $ratio */ $ratio(W_RATIO, WEATHER_FOG_END, DEST_WEATHER_FOG_END)); + } + } + + void weather_finalize() + { + WEATHER_IN_TRANSITION = 0; + if (param1 != WEATHER_TYPE) + { + WEATHER_TYPE = param1; + } + if (WEATHER_TYPE == "clear") + { + weather_clear(); + } + if (WEATHER_TYPE == "rain") + { + WEATHER_FOG_COLOR = WEATHER_RAIN_FOG_COLOR; + WEATHER_FOG_DENSITY = WEATHER_RAIN_FOG_DENSITY; + WEATHER_FOG_START = WEATHER_RAIN_FOG_START; + WEATHER_FOG_END = WEATHER_RAIN_FOG_END; + WEATHER_SNOW_DROP_RATE = 0; + WEATHER_RAIN_DROP_RATE = WEATHER_RAIN_DROP_MAXRATE; + WEATHER_RAIN_VOL = WEATHER_RAIN_MAXVOL; + WEATHER_FOG_ON = 1; + WEATHER_FOG_UNDERGROUND = 0; + WEATHER_TINT_ON = 1; + WEATHER_TINT_UNDERGROUND = 0; + WEATHER_WIND_STRENGTH = 0; + WEATHER_RAIN_ZVELOCITY = Random(-500, -200); + WEATHER_CURRENT_AMB_VOL = 6; + EmitSound(GetOwner(), WEATHER_CHANNEL, SOUND_RAIN, WEATHER_RAIN_MAXVOL); + SetSoundVolume(WEATHER_CHANNEL); + WEATHER_LIGHTNING_ON = 0; + WEATHER_SNOW_ON = 0; + WEATHER_RAIN_ON = 1; + if (TOD_STATE == "day") + { + WEATHER_TINT = WEATHER_RAIN_TINT_DAY; + } + if (TOD_STATE == "dusk") + { + WEATHER_TINT = WEATHER_RAIN_TINT_DUSK; + } + if (TOD_STATE == "night") + { + WEATHER_TINT = WEATHER_RAIN_TINT_NIGHT; + } + weather_loop_start(); + } + if (WEATHER_TYPE == "rain_storm") + { + WEATHER_FOG_COLOR = WEATHER_RAIN_FOG_COLOR; + WEATHER_FOG_DENSITY = WEATHER_RAIN_FOG_DENSITY; + WEATHER_FOG_START = WEATHER_RAIN_FOG_START; + WEATHER_FOG_END = WEATHER_RAIN_FOG_END; + WEATHER_SNOW_DROP_RATE = 0; + WEATHER_RAIN_DROP_RATE = WEATHER_STORM_DROP_MAXRATE; + WEATHER_RAIN_VOL = WEATHER_RAIN_MAXVOL; + WEATHER_FOG_ON = 1; + WEATHER_FOG_UNDERGROUND = 0; + WEATHER_TINT_ON = 1; + WEATHER_TINT_UNDERGROUND = 0; + WEATHER_WIND_STRENGTH = Random(0, 200); + WEATHER_RAIN_ZVELOCITY = Random(-1000, -900); + WEATHER_CURRENT_AMB_VOL = 10; + EmitSound(GetOwner(), WEATHER_CHANNEL, SOUND_RAIN, WEATHER_STORM_MAXVOL); + SetSoundVolume(WEATHER_CHANNEL); + WEATHER_LIGHTNING_ON = 1; + WEATHER_SNOW_ON = 0; + WEATHER_RAIN_ON = 1; + if (TOD_STATE == "day") + { + WEATHER_TINT = WEATHER_RAIN_TINT_DAY; + } + if (TOD_STATE == "dusk") + { + WEATHER_TINT = WEATHER_RAIN_TINT_DUSK; + } + if (TOD_STATE == "night") + { + WEATHER_TINT = WEATHER_RAIN_TINT_NIGHT; + } + weather_loop_start(); + } + if (WEATHER_TYPE == "snow") + { + WEATHER_FOG_COLOR = WEATHER_SNOW_FOG_COLOR; + WEATHER_FOG_DENSITY = WEATHER_SNOW_FOG_DENSITY; + WEATHER_FOG_START = WEATHER_SNOW_FOG_START; + WEATHER_FOG_END = WEATHER_SNOW_FOG_END; + WEATHER_SNOW_DROP_RATE = 5; + WEATHER_RAIN_DROP_RATE = 0; + WEATHER_RAIN_VOL = 0; + WEATHER_FOG_ON = 1; + WEATHER_FOG_UNDERGROUND = 0; + WEATHER_TINT_ON = 0; + WEATHER_TINT = 0 + "," + 0 + "," + 0 + "," + 0; + WEATHER_TINT_UNDERGROUND = 0; + WEATHER_CURRENT_AMB_VOL = 10; + WEATHER_SNOW_NEXT_SOUND = GetGameTime(); + WEATHER_SNOW_NEXT_SOUND += FREQ_WEATHER_SNOW_SOUND; + WEATHER_LIGHTNING_ON = 0; + WEATHER_SNOW_ON = 1; + WEATHER_RAIN_ON = 0; + weather_loop_start(); + int WEATHER_CYCLES = 1; + } + if ((WEATHER_TYPE).findFirst("fog") >= 0) + { + WEATHER_FOG_ON = 1; + WEATHER_FOG_UNDERGROUND = 1; + WEATHER_TINT_ON = 0; + WEATHER_TINT_UNDERGROUND = 0; + WEATHER_FOG_ON = 1; + WEATHER_LIGHTNING_ON = 0; + WEATHER_SNOW_ON = 0; + WEATHER_RAIN_ON = 0; + WEATHER_LOOP_ON = 0; + weather_find_dest_fog(); + int DID_FOG_SETUP = 1; + weather_set_fog(DEST_WEATHER_FOG_COLOR, DEST_WEATHER_FOG_DENSITY, DEST_WEATHER_FOG_START, DEST_WEATHER_FOG_END, WEATHER_FOG_UNDERGROUND); + } + if ((WEATHER_FOG_ON)) + { + if (!(DID_FOG_SETUP)) + { + } + weather_set_fog(WEATHER_FOG_COLOR, WEATHER_FOG_DENSITY, WEATHER_FOG_START, WEATHER_FOG_END, WEATHER_FOG_UNDERGROUND); + } + SetEnvironment("screen.tint", WEATHER_TINT); + } + + void weather_loop_start() + { + if ((WEATHER_LOOP_ON)) return; + WEATHER_LOOP_ON = 1; + weather_loop(); + } + + void weather_loop() + { + if (!(WEATHER_LOOP_ON)) return; + ScheduleDelayedEvent(0.1, "weather_loop"); + if ((WEATHER_RAIN_ON)) + { + if (!(WEATHER_PLAYER_UNDERGROUND)) + { + } + for (int i = 0; i < int(WEATHER_RAIN_DROP_RATE); i++) + { + weather_make_rain(); + } + if (GetGameTime() > NEXT_RAIN_SOUND) + { + NEXT_RAIN_SOUND = GetGameTime(); + NEXT_RAIN_SOUND += FREQ_WEATHER_RAIN_SOUND; + EmitSound(GetOwner(), WEATHER_CHANNEL, SOUND_RAIN, WEATHER_CURRENT_AMB_VOL); + } + } + if ((WEATHER_SNOW_ON)) + { + if (!(WEATHER_PLAYER_UNDERGROUND)) + { + } + for (int i = 0; i < WEATHER_SNOW_RATE; i++) + { + weather_make_snow(); + } + if (GetGameTime() > NEXT_SNOW_SOUND) + { + NEXT_SNOW_SOUND = GetGameTime(); + NEXT_SNOW_SOUND += FREQ_WEATHER_SNOW_SOUND; + EmitSound(GetOwner(), WEATHER_CHANNEL, SOUND_SNOW, "const.snd.maxvol"); + } + } + } + + void weather_make_rain() + { + string DROP_POS = /* TODO: $getcl */ $getcl("game.localplayer.index", "origin"); + float DROP_X_ADJ = Random(/* TODO: $neg */ $neg(WEATHER_RAIN_RADIUS), WEATHER_RAIN_RADIUS); + float DROP_Y_ADJ = Random(/* TODO: $neg */ $neg(WEATHER_RAIN_RADIUS), WEATHER_RAIN_RADIUS); + DROP_POS += "x"; + DROP_POS += "y"; + DROP_POS = "z"; + if (!(/* TODO: $get_under_sky */ $get_under_sky(DROP_POS))) return; + ClientEffect("tempent", "sprite", WEATHER_SPRITE_RAIN, DROP_POS, WEATHER_RAIN_EVENT, "none", "weather_drop_splash"); + } + + void weather_make_snow() + { + string DROP_POS = /* TODO: $getcl */ $getcl("game.localplayer.index", "origin"); + float DROP_X_ADJ = Random(/* TODO: $neg */ $neg(WEATHER_SNOW_RADIUS), WEATHER_SNOW_RADIUS); + float DROP_Y_ADJ = Random(/* TODO: $neg */ $neg(WEATHER_SNOW_RADIUS), WEATHER_SNOW_RADIUS); + DROP_POS += "x"; + DROP_POS += "y"; + DROP_POS = "z"; + if (!(/* TODO: $get_under_sky */ $get_under_sky(DROP_POS))) return; + ClientEffect("tempent", "sprite", WEATHER_SPRITE_SNOW, DROP_POS, "weather_make_snowflake"); + } + + void weather_check_sky() + { + string MY_ID = "game.localplayer.index"; + string MY_ORG = /* TODO: $getcl */ $getcl(MY_ID, "origin"); + int PLAYER_UNDER_SKY = 0; + PLAYER_UNDER_SKY += /* TODO: $get_under_sky */ $get_under_sky(MY_ORG); + string MY_ANG = /* TODO: $getcl */ $getcl(MY_ID, "viewangles"); + MY_ORG += "z"; + string TRACE_START = MY_ORG; + string TRACE_END = MY_ORG; + TRACE_END += /* TODO: $relpos */ $relpos(MY_ANG, Vector3(0, 100, 0)); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + PLAYER_UNDER_SKY += /* TODO: $get_under_sky */ $get_under_sky(TRACE_LINE); + if (PLAYER_UNDER_SKY == 0) + { + WEATHER_PLAYER_UNDERGROUND_COUNT += 1; + if (WEATHER_PLAYER_UNDERGROUND_COUNT >= 10) + { + WEATHER_PLAYER_UNDERGROUND = 1; + WEATHER_PLAYER_UNDERGROUND_COUNT = 10; + } + } + else + { + WEATHER_PLAYER_UNDERGROUND_COUNT = 0; + WEATHER_PLAYER_UNDERGROUND = 0; + } + } + + void weather_rain_makesprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 0.2); + ClientEffect("tempent", "set_current_prop", "gravity", Random(1.0, 1.5)); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "cb_hitwater", "weather_drop_splash_Water"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 50); + if (WEATHER_TYPE == "rain_storm") + { + if (WEATHER_WIND_STRENGTH > 0) + { + } + string L_WIND_DIR = WEATHER_WIND_DIR; + L_WIND_DIR *= WEATHER_WIND_DIR; + ClientEffect("tempent", "set_current_prop", "velocity", L_WIND_DIR); + } + ClientEffect("tempent", "set_current_prop", "velocity.z", WEATHER_RAIN_ZVELOCITY); + } + + void weather_drop_splash_Water() + { + ClientEffect("tempent", "set_current_prop", "angles", Vector3(90, 0, 0)); + ClientEffect("tempent", "set_current_prop", "sprite", WEATHER_SPRITE_RAIN_RIPPLE); + ClientEffect("tempent", "set_current_prop", "maxs", Vector3(0, 0, 128)); + ClientEffect("tempent", "set_current_prop", "origin", "game.tempent.waterorigin"); + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "framerate", 8); + ClientEffect("tempent", "set_current_prop", "frames", 15); + ClientEffect("tempent", "set_current_prop", "scale", 1); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 50); + } + + void weather_drop_splash() + { + ClientEffect("tempent", "set_current_prop", "sprite", SPRITE_SPLASH); + ClientEffect("tempent", "set_current_prop", "death_delay", 0.8); + ClientEffect("tempent", "set_current_prop", "framerate", 6); + ClientEffect("tempent", "set_current_prop", "frames", 3); + ClientEffect("tempent", "set_current_prop", "scale", 0.3); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + WEATHER_RAIN_MIST += 1; + if (!(WEATHER_RAIN_MIST > 4)) return; + WEATHER_RAIN_MIST = 0; + string L_POS = "game.tempent.origin"; + ClientEffect("tempent", "sprite", WEATHER_SPRITE_RAIN_MIST, L_POS, "weather_create_drop_mist"); + } + + void weather_create_drop_mist() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3); + ClientEffect("tempent", "set_current_prop", "framerate", 10); + ClientEffect("tempent", "set_current_prop", "frames", 12); + ClientEffect("tempent", "set_current_prop", "scale", 10); + ClientEffect("tempent", "set_current_prop", "gravity", -0.00105); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-15, 15), Random(-15, 15), 0)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 10); + } + + void weather_make_snowflake() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.1, 0.2)); + ClientEffect("tempent", "set_current_prop", "velocity.z", -100); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.1, 0.3)); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + } + + void weather_snow_breath() + { + ClientEffect("tempent", "set_current_prop", "death_delay", "last_frame"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 30); + ClientEffect("tempent", "set_current_prop", "scale", 0.1); + ClientEffect("tempent", "set_current_prop", "gravity", -0.01); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 30); + } + +} + +} diff --git a/scripts/angelscript/player/player_cl_effects_world.as b/scripts/angelscript/player/player_cl_effects_world.as new file mode 100644 index 00000000..b006d9c3 --- /dev/null +++ b/scripts/angelscript/player/player_cl_effects_world.as @@ -0,0 +1,393 @@ +#pragma context server + +#include "player/player_cl_effects_special.as" + +namespace MS +{ + +class PlayerClEffectsWorld : CGameScript +{ + string AFT_SKYNAME; + string AFT_SOUND; + int AFT_START_HOUR; + string AFT_STATE; + int AM_FADING; + string CLPLR_TOD_STATE; + string CL_TOD_LOCK; + string CURRENT_TOD_STATE; + string DAY_SKYNAME; + string DAY_SOUND; + int DAY_START_HOUR; + string DAY_STATE; + int DUSK_FADE_COUNT; + int FADE_COUNT; + int NIGHT_FADE_COUNT; + string NIGHT_SKYNAME; + string NIGHT_SOUND; + int NIGHT_START_HOUR; + string NIGHT_STATE; + string PREV_STATE; + + PlayerClEffectsWorld() + { + DAY_SKYNAME = "game.map.skyname"; + DAY_SOUND = "amb/birds01.wav"; + DAY_START_HOUR = 6; + DAY_STATE = "day"; + AFT_SKYNAME = DAY_SKYNAME; + AFT_SOUND = "none"; + AFT_START_HOUR = 17; + AFT_STATE = "aft"; + NIGHT_SKYNAME = "space"; + NIGHT_SOUND = "amb/wolf01.wav"; + NIGHT_START_HOUR = 20; + NIGHT_STATE = "night"; + SetGlobalVar("clglobal.daystate", DAY_STATE); + } + + void recv_time_initial() + { + if (!("clglobal.time.hour" >= NIGHT_START_HOUR)) return; + SetGlobalVar("clglobal.daystate", NIGHT_STATE); + } + + void recv_time() + { + string l.olddaytime = "clglobal.daystate"; + SetGlobalVar("clglobal.time.hour", param1); + SetGlobalVar("clglobal.time.min", param2); + SetGlobalVar("clglobal.time.text", param3); + PREV_STATE = "clglobal.daystate"; + if ("clglobal.time.hour" < NIGHT_START_HOUR) + { + if ("clglobal.time.hour" >= AFT_START_HOUR) + { + change_to_aft(); + } + else + { + if ("clglobal.time.hour" >= DAY_START_HOUR) + { + CallExternal("all", "environment_change", DAY_STATE); + } + else + { + change_to_night(); + } + } + } + else + { + change_to_night(); + } + time_change(l.olddaytime, "clglobal.daystate"); + } + + void change_to_night() + { + if (!("global.map.allownight")) + { + CallExternal("all", "environment_change", DAY_STATE); + } + else + { + CallExternal("all", "environment_change", NIGHT_STATE); + } + } + + void change_to_aft() + { + if (!("global.map.allownight")) + { + CallExternal("environment_change", "DAY_STATE"); + } + else + { + CallExternal("all", "environment_change", AFT_STATE); + } + } + + void environment_change() + { + if (CL_TOD_LOCK != "none") + { + if (param1 != CL_TOD_LOCK) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + CURRENT_TOD_STATE = param1; + if (param1 == DAY_STATE) + { + if ((AM_FADING)) + { + finalize_state(DAY_STATE); + } + if (!(AM_FADING)) + { + } + if (PREV_STATE == NIGHT_STATE) + { + if (!(AM_FADING)) + { + } + AM_FADING = 1; + FADE_COUNT = 1000; + fade_to_day(); + } + else + { + finalize_state(DAY_STATE); + } + } + else + { + if (param1 == AFT_STATE) + { + if ((AM_FADING)) + { + finalize_state(AFT_STATE); + } + if (!(AM_FADING)) + { + } + if (PREV_STATE == DAY_STATE) + { + if (!(AM_FADING)) + { + } + AM_FADING = 1; + DUSK_FADE_COUNT = 1000; + fade_to_dusk(); + } + else + { + SetGlobalVar("clglobal.daystate", AFT_STATE); + SetEnvironment("sky.texture", AFT_SKYNAME); + SetEnvironment("lightgamma", 5); + SetEnvironment("fog.enabled", 0); + SetEnvironment("screen.tint", 0.8156 + "," + 0.368627 + "," + 0.007843 + "," + 0.1); + } + } + else + { + if (param1 == NIGHT_STATE) + { + if ((AM_FADING)) + { + finalize_state(NIGHT_STATE); + } + if (!(AM_FADING)) + { + } + if (PREV_STATE == AFT_STATE) + { + if (!(AM_FADING)) + { + } + AM_FADING = 1; + SetEnvironment("fog.density", 0.05); + SetEnvironment("fog.color", Vector3(0, 0, 0)); + SetEnvironment("fog.start", 4096); + SetEnvironment("fog.end", 4864); + SetEnvironment("fog.type", "linear"); + SetEnvironment("fog.enabled", 1); + NIGHT_FADE_COUNT = 1000; + fade_to_night(); + } + else + { + finalize_state(NIGHT_STATE); + } + } + } + } + } + + void finalize_state() + { + LogDebug("**** finalize_state PARAM1"); + AM_FADING = 0; + NIGHT_FADE_COUNT = -1; + FADE_COUNT = -1; + DUSK_FADE_COUNT = -1; + CLPLR_TOD_STATE = param1; + if (param1 == DAY_STATE) + { + SetGlobalVar("clglobal.daystate", DAY_STATE); + SetEnvironment("sky.texture", DAY_SKYNAME); + SetEnvironment("lightgamma", 2.5); + SetEnvironment("fog.enabled", 0); + SetEnvironment("screen.tint", 0 + "," + 0 + "," + 0 + "," + 0); + } + else + { + if (param1 == AFT_STATE) + { + SetGlobalVar("clglobal.daystate", AFT_STATE); + SetEnvironment("sky.texture", AFT_SKYNAME); + SetEnvironment("lightgamma", 5); + SetEnvironment("fog.enabled", 0); + SetEnvironment("screen.tint", 0.8156 + "," + 0.368627 + "," + 0.007843 + "," + 0.1); + } + else + { + if (param1 == NIGHT_STATE) + { + SetGlobalVar("clglobal.daystate", NIGHT_STATE); + SetEnvironment("fog.enabled", 1); + SetEnvironment("fog.density", 0.05); + SetEnvironment("fog.start", 256); + SetEnvironment("fog.end", 1024); + SetEnvironment("fog.type", "linear"); + SetEnvironment("fog.color", Vector3(0, 0, 0)); + SetEnvironment("screen.tint", 0.0200 + "," + 0.020000 + "," + 0.300000 + "," + 0.1); + SetEnvironment("lightgamma", 4); + } + } + } + } + + void fade_to_night() + { + if (NIGHT_FADE_COUNT == 0) + { + finalize_state(NIGHT_STATE); + EmitSound(GetOwner(), "const.snd.static", NIGHT_SOUND, "const.snd.maxvol"); + } + if (!(NIGHT_FADE_COUNT > 0)) return; + ScheduleDelayedEvent(0.01, "fade_to_night"); + NIGHT_FADE_COUNT -= 1; + string PROGRESS_RATIO = NIGHT_FADE_COUNT; + PROGRESS_RATIO /= 1000; + string FOG_START = /* TODO: $get_skill_ratio */ $get_skill_ratio(PROGRESS_RATIO, 256, 4096); + int FOG_END = 768; + FOG_END += FOG_START; + string TINT_R = /* TODO: $get_skill_ratio */ $get_skill_ratio(PROGRESS_RATIO, 0.02, 0.8156); + string TINT_G = /* TODO: $get_skill_ratio */ $get_skill_ratio(PROGRESS_RATIO, 0.02, 0.368627); + string TINT_B = /* TODO: $get_skill_ratio */ $get_skill_ratio(PROGRESS_RATIO, 0.3, 0.007843); + string TINT_STR = "("; + TINT_STR += TINT_R; + TINT_STR += ","; + TINT_STR += TINT_B; + TINT_STR += ","; + TINT_STR += TINT_G; + TINT_STR += ",0.1)"; + SetEnvironment("fog.start", FOG_START); + SetEnvironment("fog.end", FOG_END); + SetWorldLightGamma(LIGHT_GAMMA); + SetEnvironment("screen.tint", TINT_STR); + } + + void fade_to_dusk() + { + DUSK_FADE_COUNT = 0; + if (DUSK_FADE_COUNT == 0) + { + finalize_state(AFT_STATE); + } + if (!(DUSK_FADE_COUNT > 0)) return; + ScheduleDelayedEvent(0.01, "fade_to_dusk"); + DUSK_FADE_COUNT -= 1; + string PROGRESS_RATIO = DUSK_FADE_COUNT; + PROGRESS_RATIO /= 1000; + string LIGHT_GAMMA = /* TODO: $get_skill_ratio */ $get_skill_ratio(PROGRESS_RATIO, 4.0, 2.5); + string TINT_ALPHA = /* TODO: $get_skill_ratio */ $get_skill_ratio(PROGRESS_RATIO, 0.1, 0); + SetEnvironment("lightgamma", LIGHT_GAMMA); + string SCREEN_STR = "(0.8156,0.368627,0.007843,"; + SCREEN_STR += TINT_ALPHA; + SCREEN_STR += ")"; + SetEnvironment("screen.tint", SCREEN_STR); + SetWorldLightGamma(LIGHT_GAMMA); + } + + void fade_to_day() + { + if (FADE_COUNT == 0) + { + finalize_state(DAY_STATE); + EmitSound(GetOwner(), "const.snd.static", DAY_SOUND, "const.snd.maxvol"); + } + if (!(FADE_COUNT > 0)) return; + ScheduleDelayedEvent(0.01, "fade_to_day"); + FADE_COUNT -= 1; + string PROGRESS_RATIO = FADE_COUNT; + PROGRESS_RATIO /= 1000; + string LIGHT_GAMMA = /* TODO: $get_skill_ratio */ $get_skill_ratio(PROGRESS_RATIO, 2.5, 4.0); + string FOG_DENSI = /* TODO: $get_skill_ratio */ $get_skill_ratio(PROGRESS_RATIO, 0.0, 0.1); + string FOG_START = /* TODO: $get_skill_ratio */ $get_skill_ratio(PROGRESS_RATIO, 4096, 256); + string TINT_ALPHA = /* TODO: $get_skill_ratio */ $get_skill_ratio(PROGRESS_RATIO, 0, 0.1); + string SCREEN_STR = "(0.0200,0.020000,0.300000,"; + SCREEN_STR += TINT_ALPHA; + SCREEN_STR += ")"; + int FOG_END = 1024; + FOG_END += FOG_START; + SetEnvironment("fog.density", FOG_DENSI); + SetEnvironment("fog.start", FOG_START); + SetEnvironment("fog.end", FOG_END); + SetEnvironment("screen.tint", SCREEN_STR); + SetWorldLightGamma(LIGHT_GAMMA); + } + + void time_change() + { + if (!(param1 != param2)) return; + string l.daytime = param2; + if (l.daytime == DAY_STATE) + { + EmitSound(GetOwner(), "const.snd.static", DAY_SOUND, "const.snd.maxvol"); + } + else + { + if (l.daytime == AFT_STATE) + { + } + else + { + if (l.daytime == NIGHT_STATE) + { + EmitSound(GetOwner(), "const.snd.static", NIGHT_SOUND, "const.snd.maxvol"); + } + } + } + } + + void lock_tod() + { + CL_TOD_LOCK = param1; + } + + void reset_tod() + { + SetEnvironment("sky.texture", DAY_SKYNAME); + SetEnvironment("lightgamma", 2.5); + SetEnvironment("fog.enabled", 0); + SetEnvironment("fog.density", 0); + SetEnvironment("screen.tint", 0 + "," + 0 + "," + 0 + "," + 0); + string L_CURRENT_TOD_STATE = CURRENT_TOD_STATE; + if (L_CURRENT_TOD_STATE == "CURRENT_TOD_STATE") + { + string L_CURRENT_TOD_STATE = "day"; + } + finalize_state(L_CURRENT_TOD_STATE); + } + + void clear_weather() + { + SetEnvironment("sky.texture", DAY_SKYNAME); + SetEnvironment("lightgamma", 2.5); + SetEnvironment("fog.enabled", 0); + SetEnvironment("screen.tint", 0 + "," + 0 + "," + 0 + "," + 0); + finalize_state(CLPLR_TOD_STATE); + } + + void change_sky() + { + SetEnvironment("sky.texture", param1); + SendInfoMsg("all", param1 + " game.map.skyname"); + } + +} + +} diff --git a/scripts/angelscript/player/player_cl_main.as b/scripts/angelscript/player/player_cl_main.as new file mode 100644 index 00000000..7fa11f8f --- /dev/null +++ b/scripts/angelscript/player/player_cl_main.as @@ -0,0 +1,50 @@ +#pragma context server + +namespace MS +{ + +class PlayerClMain : CGameScript +{ + string NEXT_BREATH; + string PLR_GENDER; + string PLR_RACE; + + PlayerClMain() + { + } + + void game_think() + { + if (!(GetGameTime() > NEXT_BREATH)) return; + NEXT_BREATH = GetGameTime(); + NEXT_BREATH += 0.1; + player_breathe(); + } + + void game_jump() + { + } + + void game_jump_land() + { + } + + void game_hitground() + { + player_hitgroundhard(param1); + } + + void OnDeath(CBaseEntity@ attacker) override + { + } + + void set_cl_gender_race() + { + PLR_GENDER = param1; + PLR_RACE = param2; + LogDebug("set_cl_gender_race PLR_GENDER PLR_RACE"); + } + +} + +} diff --git a/scripts/angelscript/player/player_conartist.as b/scripts/angelscript/player/player_conartist.as new file mode 100644 index 00000000..4c602f0b --- /dev/null +++ b/scripts/angelscript/player/player_conartist.as @@ -0,0 +1,149 @@ +#pragma context client + +namespace MS +{ + +class PlayerConartist : CGameScript +{ + string DISCO_MODE; + string DIST; + string LEVELUP_SPRITES; + string LIGHT_RAD; + string LVL_LIGHT; + string MY_OWNER; + string OFSZ_NEG; + string OFSZ_POS; + string OFS_NEG; + string OFS_POS; + + void client_activate() + { + if (param1 == "glow") + { + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(param2, "origin"), param3, param4, param5); + } + if (param1 == "levelup") + { + MY_OWNER = param2; + OFSZ_POS = 96; + OFSZ_NEG = -96; + OFS_POS = 72; + OFS_NEG = -72; + DIST = 32; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), 200, Vector3(0, 255, 0), 3.0); + LVL_LIGHT = "game.script.last_light_id"; + LEVELUP_SPRITES = 1; + LIGHT_RAD = 200; + sprite_spoog(); + ScheduleDelayedEvent(4.0, "end_fx_levelup"); + } + if (param1 == "disco") + { + MY_OWNER = param2; + OFSZ_POS = 96; + OFSZ_NEG = -96; + OFS_POS = 72; + OFS_NEG = -72; + DIST = 32; + DISCO_MODE = 1; + ClientEffect("light", "new", /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), 255, Vector3(0, 255, 0), 3.0); + LVL_LIGHT = "game.script.last_light_id"; + LIGHT_RAD = 512; + LEVELUP_SPRITES = 1; + sprite_spoog(); + } + } + + void game_prerender() + { + if (!(GetMonsterProperty("isalive") == 1)) return; + string L_POS = /* TODO: $getcl */ $getcl(SKEL_ID, "origin"); + ClientEffect("light", SKEL_LIGHT_ID, L_POS, 256, Vector3(0, 255, 0), 5.0); + } + + void sprite_spoog() + { + if (!(LEVELUP_SPRITES)) return; + levelup_createsprite(); + ScheduleDelayedEvent(0.1, "sprite_spoog"); + } + + void end_fx_levelup() + { + RemoveScript(); + } + + void levelup_createsprite() + { + float RND_LEFT = Random(-20, 20); + float RND_RIGHT = Random(-20, 20); + Vector3 SPRITE_VEL = Vector3(RND_LEFT, RND_RIGHT, 0); + int COLOR_R = RandomInt(0, 255); + int COLOR_G = RandomInt(0, 255); + int COLOR_B = RandomInt(0, 255); + string COLOR_STRING = "("; + COLOR_STRING += COLOR_R; + COLOR_STRING += ","; + COLOR_STRING += COLOR_G; + COLOR_STRING += ","; + COLOR_STRING += COLOR_B; + COLOR_STRING += ")"; + ClientEffect("light", LVL_LIGHT, /* TODO: $getcl */ $getcl(MY_OWNER, "origin"), LIGHT_RAD, COLOR_STRING, 0.1); + if ((DISCO_MODE)) + { + DIST = RandomInt(16, 128); + } + string START_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + int RND_RAD = RandomInt(0, 359); + START_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_RAD, 0), Vector3(0, DIST, -32)); + ClientEffect("tempent", "sprite", "xflare1.spr", START_POS, "setup_levelup_sprite"); + string START_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + int RND_RAD = RandomInt(0, 359); + START_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_RAD, 0), Vector3(0, DIST, -32)); + ClientEffect("tempent", "sprite", "xflare1.spr", START_POS, "setup_levelup_sprite"); + string START_POS = /* TODO: $getcl */ $getcl(MY_OWNER, "origin"); + int RND_RAD = RandomInt(0, 359); + START_POS += /* TODO: $relpos */ $relpos(Vector3(0, RND_RAD, 0), Vector3(0, DIST, -32)); + ClientEffect("tempent", "sprite", "xflare1.spr", START_POS, "setup_levelup_sprite"); + } + + void setup_levelup_sprite() + { + float RND_LEFT = Random(-20, 20); + float RND_RIGHT = Random(-20, 20); + Vector3 SPRITE_VEL = Vector3(RND_LEFT, RND_RIGHT, 0); + int COLOR_R = RandomInt(0, 255); + int COLOR_G = RandomInt(0, 255); + int COLOR_B = RandomInt(0, 255); + string COLOR_STRING = "("; + COLOR_STRING += COLOR_R; + COLOR_STRING += ","; + COLOR_STRING += COLOR_G; + COLOR_STRING += ","; + COLOR_STRING += COLOR_B; + COLOR_STRING += ")"; + float SCALE_SIZE = 0.25; + if ((DISCO_MODE)) + { + float SCALE_SIZE = Random(0.25, 1.0); + } + float DEATH_DELAY = 1.0; + if ((DISCO_MODE)) + { + float DEATH_DELAY = 2.5; + } + ClientEffect("tempent", "set_current_prop", "death_delay", DEATH_DELAY); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 20); + ClientEffect("tempent", "set_current_prop", "velocity", SPRITE_VEL); + ClientEffect("tempent", "set_current_prop", "scale", SCALE_SIZE); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "rendercolor", COLOR_STRING); + ClientEffect("tempent", "set_current_prop", "gravity", -0.5); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + } + +} + +} diff --git a/scripts/angelscript/player/player_corpse.as b/scripts/angelscript/player/player_corpse.as new file mode 100644 index 00000000..323a6866 --- /dev/null +++ b/scripts/angelscript/player/player_corpse.as @@ -0,0 +1,17 @@ +#pragma context server + +namespace MS +{ + +class PlayerCorpse : CGameScript +{ + int DO_NADDA; + + PlayerCorpse() + { + DO_NADDA = 1; + } + +} + +} diff --git a/scripts/angelscript/player/player_main.as b/scripts/angelscript/player/player_main.as new file mode 100644 index 00000000..44f97b29 --- /dev/null +++ b/scripts/angelscript/player/player_main.as @@ -0,0 +1,1336 @@ +#pragma context server + +#include "player/valid_spawn_new.as" +#include "player/server/dmgpoints.as" +#include "player/server/element_resist.as" + +namespace MS +{ + +class PlayerMain : CGameScript +{ + int AFK_DID_FIRST_PULSE; + string AFK_OLD_POS; + string AFK_TIME; + string BAR_STRING; + int BUILD_BAR_COUNT; + string CVAR_HP_LIMIT; + string DEMON_BLOOD_END_TIME; + int DISPLAY_HBAR_DELAY; + int DISPLAY_PBAR_DELAY; + int DISPLAY_PLAYER_HP; + int DISPLAY_TARG_HP; + int ELM_REGISTER_SILENT; + string FIRST_PARTY_MSG; + float FREQ_AFK_CHECK; + string GAVE_MAP_INTRO; + string HAD_FIRST_SPAWN; + int HBAR_FRAMES; + string HBAR_TARGET; + int IR_GLOWING; + string IS_AFK; + string LAST_STRUCK_FOR; + int LEAP_BACK_DRAIN; + int LEAP_SIDE_DRAIN; + string LEVELUP_SCRIPT; + string LEVEL_UP_SCRIPT; + string MOTD_TXT1; + string MOTD_TXT2; + string MOTD_TXT3; + string MOTD_TXT4; + string MOTD_TXT5; + string MOTD_TXT6; + string MOTD_TXT7; + int MSC_PUSH_RESIST; + string MY_SPAWN_TIME; + float NEXT_DODGE; + string NEXT_LEAPBACK; + string NEXT_LEAPLEFT; + string NEXT_LEAPRIGHT; + string OWNER_POS; + int PLAYING_DEAD; + int PLR_2H_REDUCT; + int PLR_ADD_FIRE_DOT; + string PLR_ARROW_ID; + string PLR_ARROW_MENU; + int PLR_BRAVERY; + int PLR_CORRODE_DURATION; + string PLR_DARK_LEVEL; + int PLR_DARK_LEVEL_LOSS_RATE; + int PLR_DID_MOTD; + string PLR_DMG; + int PLR_DMG_ADJUST_FIRE; + string PLR_GENDER; + string PLR_IN_WORLD; + string PLR_LAST_ATK_TIME; + string PLR_LAST_HBAR_SHOW; + int PLR_LESSER_LEADFOOT; + string PLR_LIGHTS_SYNCED; + int PLR_MANA_FONT; + int PLR_MAX_DARK_LEVEL; + int PLR_SPEED; + string PLR_STARTED_AFK_CHECKS; + int PLR_SWIFT_BLADE; + int PL_BEEN_ATTACKED; + int SCARABS_ATTACHED; + int SEND_DMG_DELAY; + string SHOW_HEALTH; + int SIZE_IDX; + string SOUND_BEAR_STRUCK1; + string SOUND_BEAR_STRUCK2; + string SOUND_BEAR_STRUCK3; + string SOUND_LEVELUP1; + + PlayerMain() + { + FREQ_AFK_CHECK = 60.0; + PLR_2H_REDUCT = 1; + LEAP_SIDE_DRAIN = 30; + LEAP_BACK_DRAIN = 60; + HBAR_FRAMES = 12; + DISPLAY_TARG_HP = 1; + DISPLAY_PLAYER_HP = 1; + SOUND_LEVELUP1 = "magic/converted_EnchP01.wav"; + LEVELUP_SCRIPT = "player/player_cl_effects_levelup"; + PLR_DARK_LEVEL_LOSS_RATE = 50; + PLR_MAX_DARK_LEVEL = 50000; + SetGlobalVar("PLR_DARK_UNHOLY_LEVEL", 20000); + Precache("health_bar.spr"); + Precache("human/reference.mdl"); + Precache("magic/converted_magic13.wav"); + SOUND_BEAR_STRUCK1 = "monsters/bear/c_bear_hit1.wav"; + SOUND_BEAR_STRUCK2 = "monsters/bear/c_bear_hit2.wav"; + SOUND_BEAR_STRUCK3 = "monsters/bear/c_bear_no.wav"; + Precache("dwarf/reference.mdl"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(FREQ_AFK_CHECK); + if ((PLR_STARTED_AFK_CHECKS)) + { + } + string CUR_POS = GetEntityOrigin(GetOwner()); + if (Distance(AFK_OLD_POS, CUR_POS) <= 128) + { + if ((AFK_DID_FIRST_PULSE)) + { + } + string L_LAST_ATK_TIME = PLR_LAST_ATK_TIME; + L_LAST_ATK_TIME += 60.0; + if (GetGameTime() > L_LAST_ATK_TIME) + { + } + if ((G_DEVELOPER_MODE)) + { + if (!(IS_AFK)) + { + } + SendColoredMessage(GetOwner(), "====== FLAGGED AFK!"); + } + IS_AFK = 1; + FREQ_AFK_CHECK = 5.0; + } + else + { + if ((G_DEVELOPER_MODE)) + { + if ((IS_AFK)) + { + } + SendColoredMessage(GetOwner(), "====== No longer afk"); + } + FREQ_AFK_CHECK = 60.0; + IS_AFK = 0; + } + if ((IS_AFK)) + { + AFK_TIME += 1; + } + if ((PLR_IN_WORLD)) + { + PL_TIME += 1; + if (PLR_DARK_LEVEL > 0) + { + if (!(IS_AFK)) + { + } + PLR_DARK_LEVEL -= PLR_DARK_LEVEL_LOSS_RATE; + if (PLR_DARK_LEVEL < 0) + { + PLR_DARK_LEVEL = 0; + } + SetPlayerQuestData(GetOwner(), "dl"); + player_calc_holy_resistance(); + } + } + AFK_OLD_POS = GetMonsterProperty("origin"); + AFK_DID_FIRST_PULSE = 1; + } + + void OnSpawn() override + { + LogDebug("game_spawn GetEntityHealth(GetOwner())"); + if (!(PLR_STARTED_AFK_CHECKS)) + { + PLR_STARTED_AFK_CHECKS = 1; + } + // TODO: hud.killicons ent_me + if ((DEMON_BLOOD)) + { + end_demon_blood(); + } + PLR_SPEED = 100; + PLAYING_DEAD = 0; + if (GetPlayerQuestData(GetOwner(), "h") == 1) + { + console_health_toggle(1); + } + SetRace("human"); + if (!(HAD_FIRST_SPAWN)) + { + SetGlobalVar("global.mstime.updateall", 0); + if ((true)) + { + } + PLR_DMG = 0; + if ((GetCvar("ms_chatlog"))) + { + // TODO: chatlog GetTimestamp() PLAYER_JOIN: GetEntityName(GetOwner()) [ GetPlayerAuthId(GetOwner()) ] ip: GetPlayerClientAddress(GetOwner()) + } + HAD_FIRST_SPAWN = 1; + IS_AFK = 0; + AFK_TIME = 0; + MY_SPAWN_TIME = GetGameTime(); + FIRST_PARTY_MSG = GetGameTime(); + CVAR_HP_LIMIT = GetCvar("ms_hp_limit"); + FIRST_PARTY_MSG += 60.0; + } + SetVolume(10); + } + + void random_spawn() + { + CallExternal(GAME_MASTER, "find_spawn_point", GetEntityIndex(GetOwner())); + } + + void activate_stuff() + { + if (!(PLR_LIGHTS_SYNCED)) + { + CallExternal("all", "player_joined", GetEntityIndex(GetOwner())); + UseTrigger("player_joined"); + PLR_LIGHTS_SYNCED = 1; + } + if (GetEntityProperty(GetOwner(), "companions") > 0) + { + // TODO: UNCONVERTED: if ( $get(ent_me,companions) > 0 ) summonpets ent_me + } + DrainStamina(GetOwner()); + ClientCommand(GetOwner(), "room_type 0;wait;switchhand 1;wait;switchhand 1"); + LogDebug("activate_stuff"); + if (CVAR_HP_LIMIT > 0) + { + if (GetEntityMaxHealth(GetOwner()) >= CVAR_HP_LIMIT) + { + } + ScheduleDelayedEvent(1.0, "hp_max_warn"); + } + CallExternal("all", "ext_activate_items", GetEntityIndex(GetOwner())); + } + + void tele_spawn() + { + EmitSound(GetOwner(), 0, "magic/spawn.wav", 10); + SetEntityOrigin(GetOwner(), NEW_SPAWN_POS); + OWNER_POS = NEW_SPAWN_POS; + for (int i = 0; i < 18; i++) + { + beam_fx(); + } + } + + void beam_fx() + { + string BEAM_START = OWNER_POS; + string BEAM_END = OWNER_POS; + BEAM_START += /* TODO: $relpos */ $relpos(Vector3(0, BEAM_ROT, 0), Vector3(0, 32, -32)); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, BEAM_ROT, 0), Vector3(0, 32, 128)); + Effect("beam", "point", "lgtning.spr", 100, BEAM_START, BEAM_END, Vector3(255, 0, 255), 200, 16, 3); + BEAM_ROT += 20; + } + + void game_think() + { + } + + void game_jump() + { + PlayAnim("once", ANIM_JUMP); + } + + void game_jump_land() + { + PlayAnim("once", "break"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ClearFX(); + PLR_CORRODE_DURATION = 0; + PLR_SWIFT_BLADE = 0; + MSC_PUSH_RESIST = 0; + PLR_LESSER_LEADFOOT = 0; + // TODO: hud.killicons ent_me + PLR_BRAVERY = 0; + PLR_DMG_ADJUST_FIRE = 0; + PLR_ADD_FIRE_DOT = 0; + if ((DEMON_BLOOD)) + { + DEMON_BLOOD_END_TIME = GetGameTime(); + } + ext_setbodytype("normal"); + if ((PLR_FAURA)) + { + CallExternal(GetOwner(), "ext_fire_aura_remove"); + } + if ((PLR_PAURA)) + { + CallExternal(GetOwner(), "ext_poison_aura_remove"); + } + PLR_MANA_FONT = 0; + CallExternal("all", "bs_global_command", GetEntityIndex(GetOwner()), "vanish", "death"); + IR_GLOWING = 0; + if ((REGEN_ON)) + { + CallExternal(GetOwner(), "regen_end"); + } + if ((VAMPIRE_ON)) + { + CallExternal(GetOwner(), "vampire_off"); + } + if ((DEMON_BLOOD)) + { + CallExternal(GetOwner(), "end_demon_blood"); + } + if ((PLR_FAURA)) + { + CallExternal(GetOwner(), "ext_fire_aura_remove"); + } + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + CallExternal(GetOwner(), "ext_shield_up", 0); + } + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + CallExternal(GetOwner(), "ext_sfaura_end"); + } + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + CallExternal(GetOwner(), "ext_end_holy_aura"); + } + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + CallExternal(GetOwner(), "ext_end_repel_shield"); + } + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + CallExternal(GetOwner(), "ext_pole_lshield_end"); + } + if ((GetEntityProperty(GetOwner(), "scriptvar"))) + { + LogDebug("player died in bear mode PLR_BEAR_IMAGE_ID"); + CallExternal(PLR_BEAR_IMAGE_ID, "ext_bear_die", "from_player_main"); + CallExternal(GetOwner(), "ext_bear_mode_end"); + } + else + { + EmitSound(GetOwner(), 0, SOUND_DEATH, 10); + } + if (((PLR_BEAR_IMAGE_ID !is null))) + { + DeleteEntity(PLR_BEAR_IMAGE_ID, true); // fade out + } + SetScriptFlags(GetOwner(), "cleartype", "nopush"); + SetScriptFlags(GetOwner(), "cleartype", "mana_regen"); + SetScriptFlags(GetOwner(), "cleartype", "combat"); + SetScriptFlags(GetOwner(), "cleartype", "speed"); + SetScriptFlags(GetOwner(), "cleartype", "atkspeed"); + SetScriptFlags(GetOwner(), "cleartype", "spider_resist"); + spider_protect_end(); + CallExternal(GetOwner(), "plr_change_speed", "normal"); + animate_death(); + UseTrigger("player_died"); + ScheduleDelayedEvent(0.1, "warp_out"); + } + + void warp_out() + { + SetEntityOrigin(GetOwner(), Vector3(20000, 20000, -20000)); + } + + void OnParry(CBaseEntity@ attacker) override + { + int PARRY_ROLL = int(param4); + int ACCU_ROLL = int(param5); + LogDebug("game_parry PARAM6"); + SendPlayerMessage(GetOwner(), "You parry the attack! PARRY_ROLL vs. ACCU_ROLL"); + } + + void OnDamage(int damage) override + { + PL_BEEN_ATTACKED = 1; + LAST_STRUCK_FOR = param2; + if ((PLR_BEAR_MODE)) + { + if (RandomInt(1, 3) == 1) + { + // PlayRandomSound from: SOUND_BEAR_STRUCK1, SOUND_BEAR_STRUCK2, SOUND_BEAR_STRUCK3 + array sounds = {SOUND_BEAR_STRUCK1, SOUND_BEAR_STRUCK2, SOUND_BEAR_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + if (!(param2 > 0)) return; + display_health(); + } + + void display_health() + { + CallExternal("players", "show_hbar_player", GetEntityIndex(GetOwner())); + if (!(SHOW_HEALTH)) return; + string MY_HP = GetEntityHealth(GetOwner()); + string MY_MAXHP = GetEntityMaxHealth(GetOwner()); + int MY_HP = int(MY_HP); + int MY_MAXHP = int(MY_MAXHP); + string PERCENT = MY_HP; + PERCENT /= MY_MAXHP; + PERCENT *= 100; + int PERCENT = int(PERCENT); + string FILL_POS = PERCENT; + FILL_POS /= 10; + int FILL_POS = int(FILL_POS); + BUILD_BAR_COUNT = 0; + BAR_STRING = "{"; + for (int i = 0; i < 10; i++) + { + build_bar(FILL_POS); + } + BAR_STRING += "}"; + PERCENT += "%"; + SendColoredMessage(GetOwner(), HP: + BAR_STRING + PERCENT + " MY_HP / MY_MAXHP"); + } + + void console_health_toggle() + { + if (param1 == "toggle") + { + if ((SHOW_HEALTH)) + { + SHOW_HEALTH = 0; + } + else + { + SHOW_HEALTH = 1; + } + } + if (param1 != "toggle") + { + SHOW_HEALTH = param1; + } + if ((SHOW_HEALTH)) + { + SetPlayerQuestData(GetOwner(), "h"); + SendPlayerMessage(GetOwner(), "Your health will now be displayed in the combat hud when you are struck"); + LogMessage("ent_me Your health will now be displayed in the combat hud when you are struck"); + } + if (!(SHOW_HEALTH)) + { + SetPlayerQuestData(GetOwner(), "h"); + SendPlayerMessage(GetOwner(), "Your health will no longer be displayed in the combat hud"); + LogMessage("ent_me Your health will no longer be displayed in the combat hud"); + } + } + + void healthbar_toggle() + { + if (param1 == "toggle") + { + if ((DISPLAY_PLAYER_HP)) + { + DISPLAY_PLAYER_HP = 0; + } + else + { + DISPLAY_PLAYER_HP = 1; + } + } + if (param1 != "toggle") + { + DISPLAY_PLAYER_HP = param1; + } + if ((DISPLAY_PLAYER_HP)) + { + SetPlayerQuestData(GetOwner(), "p"); + SendPlayerMessage(GetOwner(), "Player health bars are enabled."); + LogMessage("ent_me Player health bars are enabled."); + } + if (!(DISPLAY_PLAYER_HP)) + { + SetPlayerQuestData(GetOwner(), "p"); + SendPlayerMessage(GetOwner(), "Player health bars are disabled."); + LogMessage("ent_me Player health bars are disabled."); + } + } + + void mana_drain() + { + if (!(SHOW_HEALTH)) return; + string MY_MP = GetEntityMP(GetOwner()); + string MY_MAXMP = GetEntityProperty(GetOwner(), "maxmp"); + int MY_MP = int(MY_MP); + int MY_MAXMP = int(MY_MAXMP); + string PERCENT = MY_MP; + PERCENT /= MY_MAXMP; + PERCENT *= 100; + int PERCENT = int(PERCENT); + string FILL_POS = PERCENT; + FILL_POS /= 10; + int FILL_POS = int(FILL_POS); + BUILD_BAR_COUNT = 0; + BAR_STRING = "{"; + for (int i = 0; i < 10; i++) + { + build_bar(FILL_POS); + } + BAR_STRING += "}"; + PERCENT += "%"; + SendColoredMessage(GetOwner(), MANA: + BAR_STRING + PERCENT + " MY_MP / MY_MAXMP"); + } + + void build_bar() + { + BUILD_BAR_COUNT += 1; + if (BUILD_BAR_COUNT <= param1) + { + BAR_STRING += "|"; + } + if (BUILD_BAR_COUNT > param1) + { + BAR_STRING += " "; + } + } + + void game_learnskill() + { + SendColoredMessage(GetOwner(), "Level awarded to " + param1 + param2); + if ((GetEntityProperty(GetOwner(), "isbot"))) return; + string TITLE_STRING = GetEntityName(GetOwner()); + TITLE_STRING += " has gained a level!"; + string MESSAGE_STRING = "has gained experience in "; + MESSAGE_STRING += param1; + if ((param1).findFirst("Spell") == 0) + { + MESSAGE_STRING += " "; + MESSAGE_STRING += param2; + } + SendInfoMsg("all", TITLE_STRING + MESSAGE_STRING); + EmitSound(GetOwner(), 0, SOUND_LEVELUP1, 10); + ClientEvent("new", "all", "player/player_conartist", "levelup", GetEntityIndex(GetOwner())); + LEVEL_UP_SCRIPT = "game.script.last_sent_id"; + } + + void reset_send_dmg_delay() + { + SEND_DMG_DELAY = 0; + } + + void game_transition_entered() + { + } + + void game_xpgain() + { + int XP_GAIN = int(param1); + SendColoredMessage(GetOwner(), "* " + XP_GAIN + XP + " Awarded"); + } + + void give_map_intro() + { + SendInfoMsg(GetOwner(), G_MAP_NAME + G_MAP_DESC); + string L_PET_LIST = GetPlayerQuestData(GetOwner(), "pets"); + if (L_PET_LIST != 0) + { + ScheduleDelayedEvent(0.1, "pet_notice"); + } + ScheduleDelayedEvent(3.0, "give_map_diff"); + } + + void pet_notice() + { + string L_PET_LIST = GetPlayerQuestData(GetOwner(), "pets"); + if (L_PET_LIST != 0) + { + if (GetTokenCount(L_PET_LIST, ";") > 1) + { + ShowHelpTip(GetOwner(), "generic", "You have Pets!", "You can summon your pets via the Player Menu (defaultkey: F)"); + } + else + { + ShowHelpTip(GetOwner(), "generic", "You have a Pet!", "You can summon your pet via the Player Menu (defaultkey: F)"); + } + } + } + + void give_map_diff() + { + if (G_MAP_DIFF != "G_MAP_DIFF") + { + SendInfoMsg(GetOwner(), "Intended Difficulty " + G_MAP_DIFF); + } + if (!(GetMonsterMaxHP() >= 5)) return; + if (GetMonsterMaxHP() < G_WARN_HP) + { + SendInfoMsg(GetOwner(), "WARNING This area maybe too difficult at your level!"); + } + } + + void help_toggle() + { + if (!(G_HELP_ON)) + { + SetGlobalVar("G_HELP_ON", 1); + LogMessage("ent_me Be sure to get more info at: www.msremake.com/forums"); + UseTrigger("help_spr"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((G_HELP_ON)) + { + SetGlobalVar("G_HELP_ON", 0); + LogMessage("ent_me Be sure to get more info at: www.msremake.com/forums"); + SendColoredMessage(GetOwner(), "You can type help again to restore the help panels"); + UseTrigger("help_spr"); + int EXIT_SUB = 1; + } + } + + void game_dodamage() + { + if (param5 == "dark") + { + plr_add_dark(int(param6)); + } + } + + void plr_add_dark() + { + string OLD_PLR_DARK_LEVEL = PLR_DARK_LEVEL; + PLR_DARK_LEVEL += param1; + if (PLR_DARK_LEVEL > PLR_MAX_DARK_LEVEL) + { + PLR_DARK_LEVEL = PLR_MAX_DARK_LEVEL; + } + if (OLD_PLR_DARK_LEVEL < PLR_DARK_UNHOLY_LEVEL) + { + if (PLR_DARK_LEVEL > PLR_DARK_UNHOLY_LEVEL) + { + } + player_calc_holy_resistance(); + } + } + + void game_helptip() + { + EmitSound(GetOwner(), 0, "magic/converted_magic13.wav", 10); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + IS_AFK = 0; + PLR_LAST_ATK_TIME = GetGameTime(); + if (PLR_2H_REDUCT < 1) + { + if ((param3).findFirst("effect") >= 0) + { + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string IN_DMG = param2; + IN_DMG *= PLR_2H_REDUCT; + // TODO: UNCONVERTED: set dmg IN_DMG + LogDebug("2hreduct PARAM2 to IN_DMG"); + return; + } + if (GetEntityProperty(GetOwner(), "scriptvar") > 0) + { + if ((param3).findFirst("fire") >= 0) + { + } + string ADJ_RATIO = GetEntityProperty(GetOwner(), "scriptvar"); + return; + string IN_DMG = param2; + IN_DMG *= ADJ_RATIO; + // TODO: UNCONVERTED: set dmg IN_DMG + LogDebug("Adjusted fire dmg PARAM2 to IN_DMG"); + } + if (GetEntityProperty(GetOwner(), "scriptvar") > 0) + { + string DOT_RATIO = GetEntityProperty(GetOwner(), "scriptvar"); + string OWNER_SKILL = GetSkillLevel(GetOwner(), "spellcasting.fire"); + OWNER_SKILL *= DOT_RATIO; + string L_DOT_FLAG_NAME = "fire_effect;"; + string L_VALUE = /* TODO: $get_scriptflag */ $get_scriptflag(param1, L_DOT_FLAG_NAME, "name_value"); + if (L_VALUE == "none") + { + ApplyEffect(param1, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), OWNER_SKILL, "spellcasting.fire"); + } + } + if (!(DISPLAY_TARG_HP)) return; + HBAR_TARGET = param1; + ScheduleDelayedEvent(0.1, "ext_show_hbar_monster", GetEntityIndex(param1)); + if (!(PLR_SPECIAL_WEAPON)) return; + if (GetEntityProperty(PLR_ACTIVE_WEAPON, "scriptvar") == "wolf") + { + string TARG_NAME = GetEntityName(param1); + string TARG_NAME = StringToLower(TARG_NAME); + if ((TARG_NAME).findFirst("wolf") >= 0) + { + } + return; + LogDebug("multi x2"); + } + } + + void ext_show_hbar_monster() + { + if (!(param2)) + { + if (!(DISPLAY_TARG_HP)) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((param1).findFirst(PARAM) == 0) + { + HBAR_TARGET = param1; + } + if (!(GetGameTime() > PLR_LAST_HBAR_SHOW)) return; + DISPLAY_HBAR_DELAY = 1; + PLR_LAST_HBAR_SHOW = GetGameTime(); + PLR_LAST_HBAR_SHOW += 0.5; + string TARG_HIT = HBAR_TARGET; + string TARG_HP = GetEntityHealth(TARG_HIT); + string TARG_MAXHP = GetEntityMaxHealth(TARG_HIT); + string PERC_HP = TARG_HP; + PERC_HP /= TARG_MAXHP; + string HBAR_FRAME = HBAR_FRAMES; + HBAR_FRAME *= PERC_HP; + int HBAR_FRAME = int(HBAR_FRAME); + string HBAR_HEIGHT = GetEntityHeight(TARG_HIT); + HBAR_HEIGHT = max(32, min(512, HBAR_HEIGHT)); + string HBAR_POS = GetEntityOrigin(TARG_HIT); + HBAR_POS += "z"; + string HBAR_SCALE = TARG_MAXHP; + HBAR_SCALE /= 4000; + HBAR_SCALE = max(0.05, min(0.75, HBAR_SCALE)); + if (!(IsEntityAlive(TARG_HIT))) + { + int HBAR_FRAME = 0; + } + string HBAR_ADJ_POS = GetEntityProperty(TARG_HIT, "scriptvar"); + if (HBAR_ADJ_POS != "NPC_HBAR_ADJ") + { + string TARG_YAW = GetEntityProperty(TARG_HIT, "angles.yaw"); + HBAR_POS += /* TODO: $relpos */ $relpos(Vector3(0, TARG_YAW, 0), HBAR_ADJ_POS); + } + string WAGARO_WTF = HBAR_FRAME; + LogDebug("ext_show_hbar_monster HBAR_FRAME WAGARO_WTF"); + WAGARO_WTF += 22; + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "show_hbar", HBAR_POS, WAGARO_WTF, HBAR_SCALE, GetEntityIndex(TARG_HIT)); + } + + void show_hbar_player() + { + if (!(DISPLAY_PLAYER_HP)) return; + if ((DISPLAY_PBAR_DELAY)) return; + DISPLAY_PBAR_DELAY = 1; + ScheduleDelayedEvent(0.5, "reset_display_pbar_delay"); + string TARG_HIT = GetEntityIndex(GetOwner()); + string TARG_HP = GetEntityHealth(TARG_HIT); + string TARG_MAXHP = GetEntityMaxHealth(TARG_HIT); + string PERC_HP = TARG_HP; + PERC_HP /= TARG_MAXHP; + string HBAR_FRAME = HBAR_FRAMES; + HBAR_FRAME *= PERC_HP; + int HBAR_FRAME = int(HBAR_FRAME); + string HBAR_HEIGHT = GetEntityHeight(TARG_HIT); + HBAR_HEIGHT -= 20; + string HBAR_POS = GetEntityOrigin(TARG_HIT); + HBAR_POS += "z"; + string HBAR_SCALE = TARG_MAXHP; + if (!(IsEntityAlive(TARG_HIT))) + { + int HBAR_FRAME = 0; + } + string WAGARO_WTF = HBAR_FRAME; + WAGARO_WTF += 22; + if (param1 == GetEntityIndex(GetOwner())) + { + ClientEvent("update", "all", "const.localplayer.scriptID", "show_hbar", HBAR_POS, WAGARO_WTF, 0.125, GetEntityIndex(GetOwner())); + } + if (param1 != GetEntityIndex(GetOwner())) + { + ClientEvent("update", param1, "const.localplayer.scriptID", "show_hbar", HBAR_POS, WAGARO_WTF, 0.125, GetEntityIndex(GetOwner())); + } + } + + void reset_display_pbar_delay() + { + DISPLAY_PBAR_DELAY = 0; + } + + void game_targeted_by_player() + { + string VIEWER = param1; + show_hbar_player(VIEWER); + } + + void reset_hbar_delay() + { + DISPLAY_HBAR_DELAY = 0; + } + + void game_party_join() + { + if (!(FIRST_PARTY_MSG > 0)) return; + if (!(GetGameTime() > FIRST_PARTY_MSG)) return; + string TITLE_STR = GetEntityName(GetOwner()); + TITLE_STR += " has joined "; + TITLE_STR += param1; + string OUT_STR = GetEntityName(GetOwner()); + OUT_STR += " has joined the party of "; + OUT_STR += param1; + SendInfoMessageToAll("green " + OUT_STR); + } + + void game_party_leave() + { + } + + void christmas_mode() + { + CallExternal(GetOwner(), "ext_weather_manual_change", "snow"); + // TODO: playmp3 all system xmass.mp3 + SetGlobalVar("global.map.weather", "snow;snow;snow"); + } + + void game_player_got_from_store() + { + LogDebug("game_player_got_from_store PARAM1 PARAM2"); + if ((GetEntityProperty(param1, "itemname")).findFirst("gold_pouch_") == 0) + { + CallExternal(GetOwner(), "ext_addgold", GetEntityProperty(param1, "scriptvar")); + RemoveItem(param1); + DeleteEntity(param1); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((GetEntityProperty(param2, "scriptvar"))) + { + CallExternal(param2, "ext_player_got_item", GetEntityIndex(param1), GetEntityIndex(GetOwner())); + } + if (GetEntityProperty(param1, "value") > 500) + { + if (!(GetEntityProperty(param2, "scriptvar"))) + { + } + string VENDOR_NAME = GetEntityName(param2); + if ((StringToLower(VENDOR_NAME)).findFirst("chest") >= 0) + { + int REPORT_ITEM = 1; + } + if ((GetEntityProperty(param2, "scriptvar"))) + { + int REPORT_ITEM = 1; + } + if ((GetEntityProperty(param2, "scriptvar"))) + { + int REPORT_ITEM = 0; + } + if ((G_DEVELOPER_MODE)) + { + SendColoredMessage(GetOwner(), "report_item: " + REPORT_ITEM + "[ " + StringToLower(VENDOR_NAME) + "] " + GetEntityProperty(param2, "scriptvar")); + } + if ((REPORT_ITEM)) + { + } + string OUT_MSG = ""; + OUT_MSG = GetEntityName(GetOwner()) + "recieved" + GetEntityName(param1) + "from" + VENDOR_NAME; + SendInfoMsg("all", OUT_MSG + " "); + } + if (!(G_DEVELOPER_MODE)) return; + SendInfoMessageToAll("green fromstore: " + GetEntityName(param1) + GetEntityProperty(param1, "value")); + } + + void hp_max_warn() + { + string MSG_TITLE = "HP LIMIT is "; + MSG_TITLE = int(CVAR_HP_LIMIT) + "hp"; + SendInfoMsg(GetOwner(), MSG_TITLE + " Your current character is too powerful for this server."); + ScheduleDelayedEvent(2.0, "hp_max_warn2"); + } + + void hp_max_warn2() + { + string MSG_TITLE = "HP LIMIT is "; + MSG_TITLE = int(CVAR_HP_LIMIT) + "hp"; + SendInfoMsg(GetOwner(), MSG_TITLE + " You will be disconnected in 10 seconds."); + ScheduleDelayedEvent(5.0, "hp_max_warn3"); + } + + void hp_max_warn3() + { + string MSG_TITLE = "HP LIMIT is "; + MSG_TITLE = int(CVAR_HP_LIMIT) + "hp"; + SendInfoMsg(GetOwner(), MSG_TITLE + " Your current character is too powerful for this server."); + ScheduleDelayedEvent(1.0, "hp_max_warn4"); + } + + void hp_max_warn4() + { + string MSG_TITLE = "HP LIMIT is "; + MSG_TITLE = int(CVAR_HP_LIMIT) + "hp"; + SendInfoMsg(GetOwner(), MSG_TITLE + " You will be disconnected in 5 seconds."); + ScheduleDelayedEvent(4.0, "hp_max_warn5"); + } + + void hp_max_warn5() + { + string CL_CMD = "toggleconsole;clear;echo This server does not allow characters with more than "; + CL_CMD = int(CVAR_HP_LIMIT) + "hp;echo ===;disconnect"; + ClientCommand(GetOwner(), CL_CMD); + } + + void game_respawn() + { + LogDebug("game_respawn"); + } + + void game_player_putinworld() + { + if ((G_CHRISTMAS_MODE)) + { + string L_MAP_NAME = StringToLower(GetMapName()); + if (L_MAP_NAME == "edana") + { + ScheduleDelayedEvent(1.0, "christmas_mode"); + } + if (L_MAP_NAME == "deralia") + { + ScheduleDelayedEvent(1.0, "christmas_mode"); + } + if (L_MAP_NAME == "helena") + { + ScheduleDelayedEvent(1.0, "christmas_mode"); + } + } + // TODO: UNCONVERTED: noxploss ent_me 0 + if (!(true)) return; + if (!(PLR_IN_WORLD)) + { + CallExternal("players", "ext_reset_model"); + PLR_IN_WORLD = 1; + } + if (!(GetEntityProperty(GetOwner(), "haseffect"))) + { + ApplyEffect(GetOwner(), "player/emote_sit&stand"); + } + validate_spawn(LAST_SPAWN, /* TODO: $get_map_legit */ $get_map_legit(GetOwner())); + PLR_DARK_LEVEL = GetPlayerQuestData(GetOwner(), "dl"); + PLR_GENDER = GetGender(GetOwner()); + CallExternal(GetOwner(), "ext_set_gender"); + string MAX_VIEW_DIST = "game.map.maxviewdistance"; + LogDebug("map_maxviewdistance MAX_VIEW_DIST"); + if (MAX_VIEW_DIST > 512) + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "set_view_dist", MAX_VIEW_DIST); + } + else + { + ClientEvent("update", GetOwner(), "const.localplayer.scriptID", "set_view_dist", 16384); + } + if (!(GAVE_MAP_INTRO)) + { + if (G_MAP_NAME != "G_MAP_NAME") + { + } + GAVE_MAP_INTRO = 1; + ScheduleDelayedEvent(10.0, "give_map_intro"); + } + if (G_FORCE_SPAWN_WEATHER != "G_FORCE_SPAWN_WEATHER") + { + CallExternal(GetOwner(), "ext_weather_change", G_FORCE_SPAWN_WEATHER); + } + player_calc_holy_resistance(); + SCARABS_ATTACHED = 0; + ScheduleDelayedEvent(1.0, "activate_stuff"); + if (GetMonsterMaxHP() < 100) + { + if (GetMonsterHP() > 0) + { + } + if (!(G_HELP_ON)) + { + } + help_toggle(); + } + if ((G_RANDOM_SPAWN)) + { + ScheduleDelayedEvent(0.1, "random_spawn"); + } + if (NEW_SPAWN_POS != "NEW_SPAWN_POS") + { + ScheduleDelayedEvent(0.1, "tele_spawn"); + } + } + + void setup_weather() + { + if (!(G_CURRENT_WEATHER != 0)) return; + if (!(GetEntityProperty(GetOwner(), "scriptvar") != G_CURRENT_WEATHER)) return; + CallExternal(GetOwner(), "ext_weather_change", G_CURRENT_WEATHER); + } + + void do_motd() + { + MOTD_TXT1 = ""; + MOTD_TXT2 = ""; + MOTD_TXT3 = ""; + MOTD_TXT4 = ""; + MOTD_TXT5 = ""; + MOTD_TXT6 = ""; + MOTD_TXT7 = ""; + SIZE_IDX = 0; + LogMessage("ent_me game.cvar.hostname " + MESSAGE + OF + THE + DAY + " == == == == == ="); + do_motd_loop(); + } + + void force_motd() + { + PLR_DID_MOTD = 0; + do_motd(); + } + + void do_motd_loop() + { + if ((PLR_DID_MOTD)) return; + string MOTD_LINE = /* TODO: $get_fileline */ $get_fileline("motd.txt"); + if (MOTD_LINE == "[eof]") + { + PLR_DID_MOTD = 1; + ShowHelpTip(GetOwner(), "generic", "MESSAGE OF THE DAY", MOTD_TXT1, MOTD_TXT2, MOTD_TXT3); + } + if (!(MOTD_LINE != "[eof]")) return; + LogMessage("ent_me " + SIZE_IDX + "- " + MOTD_LINE); + string NEW_LEN = (MOTD_LINE).length(); + if (SIZE_IDX == 0) + { + NEW_LEN += (MOTD_TXT1).length(); + } + if (SIZE_IDX == 1) + { + NEW_LEN += (MOTD_TXT2).length(); + } + if (SIZE_IDX == 2) + { + NEW_LEN += (MOTD_TXT3).length(); + } + if (SIZE_IDX == 3) + { + NEW_LEN += (MOTD_TXT4).length(); + } + if (SIZE_IDX == 4) + { + NEW_LEN += (MOTD_TXT5).length(); + } + if (SIZE_IDX == 5) + { + NEW_LEN += (MOTD_TXT6).length(); + } + if (SIZE_IDX == 6) + { + NEW_LEN += (MOTD_TXT7).length(); + } + if (NEW_LEN > 180) + { + SIZE_IDX += 1; + } + if (SIZE_IDX == 0) + { + MOTD_TXT1 = (MOTD_LINE).substr(0, 180) + "|"; + } + if (SIZE_IDX == 1) + { + MOTD_TXT2 = (MOTD_LINE).substr(0, 180) + "|"; + } + if (SIZE_IDX == 2) + { + MOTD_TXT3 = (MOTD_LINE).substr(0, 180) + "|"; + } + if (SIZE_IDX == 3) + { + MOTD_TXT4 = (MOTD_LINE).substr(0, 180) + "|"; + } + if (SIZE_IDX == 4) + { + MOTD_TXT5 = (MOTD_LINE).substr(0, 180) + "|"; + } + if (SIZE_IDX == 5) + { + MOTD_TXT6 = (MOTD_LINE).substr(0, 180) + "|"; + } + if (SIZE_IDX == 6) + { + MOTD_TXT7 = (MOTD_LINE).substr(0, 180) + "|"; + } + ScheduleDelayedEvent(0.01, "do_motd_loop"); + } + + void delay_to_ms_player_spawn() + { + // TODO: torandomspawn ent_me + } + + void find_ms_player_spawn() + { + // TODO: torandomspawn ent_me + } + + void player_calc_holy_resistance() + { + int NORM_LEVEL = 100; + string DARK_RATIO = PLR_DARK_LEVEL; + DARK_RATIO /= PLR_DARK_UNHOLY_LEVEL; + NORM_LEVEL *= /* TODO: $ratio */ $ratio(DARK_RATIO, 1.0, 0); + if (PLR_DARK_LEVEL > PLR_DARK_UNHOLY_LEVEL) + { + int NORM_LEVEL = 0; + SetProp(GetOwner(), "skin", 2); + } + else + { + SetProp(GetOwner(), "skin", 1); + } + if ((PLR_UNHOLY)) + { + int NORM_LEVEL = 0; + } + ELM_REGISTER_SILENT = 1; + CallExternal(GetOwner(), "ext_register_element", "playr", "holy", NORM_LEVEL, "player_main"); + } + + void game_arrowmenu() + { + LogDebug("game_arrowmenu PARAM1 PARAM2"); + PLR_ARROW_MENU = param1; + if ((param2)) + { + PLR_ARROW_ID = param2; + } + else + { + if ((G_DEVELOPER_MODE)) + { + } + SendPlayerMessage(GetOwner(), "Selecting ammo..."); + } + } + + void game_leapback() + { + if (!(GetGameTime() > NEXT_DODGE)) return; + if ((IsKeyDown(GetOwner(), "forward"))) return; + if (!(GetGameTime() > NEXT_LEAPBACK)) return; + if ((GetEntityProperty(GetOwner(), "scriptvar"))) return; + if (!(GetSkillLevel(GetOwner(), "martialarts") > 15)) return; + if (param1 <= LEAP_BACK_DRAIN) + { + SendColoredMessage(GetOwner(), "Not enough stamina remaing to dodge."); + } + if (!(param1 > LEAP_BACK_DRAIN)) return; + if (!(IsOnGround(GetOwner()))) + { + SendColoredMessage(GetOwner(), "Can't dodge in mid-air..."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityProperty(GetOwner(), "canrun"))) + { + int NOT_NOW = 1; + } + if (!(CanAttack(GetOwner()))) + { + int NOT_NOW = 1; + } + if (!(GetEntityProperty(GetOwner(), "canjump"))) + { + int NOT_NOW = 1; + } + if (!(GetEntityProperty(GetOwner(), "canmove"))) + { + int NOT_NOW = 1; + } + if ((NOT_NOW)) + { + SendColoredMessage(GetOwner(), "Can't dodge now..."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((IsDucking(GetOwner()))) return; + ShowHelpTip(GetOwner(), "firstleapback", "Congratulations! You can dodge!", "From Martialarts 15+, you can make short backwards dodges by holding shift and the back key."); + NEXT_DODGE = 0.25; + NEXT_DODGE += GetGameTime(); + NEXT_LEAPBACK = GetGameTime(); + NEXT_LEAPBACK += 3.0; + DrainStamina(GetOwner()); + string VIEW_YAW = GetEntityProperty(GetOwner(), "viewangles"); + string VIEW_YAW = /* TODO: $vec.yaw */ $vec.yaw(VIEW_YAW); + AddVelocity(GetOwner(), /* TODO: $relpos */ $relpos(Vector3(0, VIEW_YAW, 0), Vector3(0, -600, 150))); + // svplaysound: svplaysound 4 10 PLR_SOUND_JAB1 + EmitSound(4, 10, PLR_SOUND_JAB1); + } + + void game_leapleft() + { + if (!(GetGameTime() > NEXT_DODGE)) return; + if ((IsKeyDown(GetOwner(), "forward"))) return; + if (!(GetGameTime() > NEXT_LEAPLEFT)) return; + if ((GetEntityProperty(GetOwner(), "scriptvar"))) return; + if (!(GetSkillLevel(GetOwner(), "martialarts") > 10)) return; + if (param1 <= LEAP_SIDE_DRAIN) + { + SendColoredMessage(GetOwner(), "Not enough stamina remaing to dodge."); + } + if (!(param1 > LEAP_SIDE_DRAIN)) return; + if (!(IsOnGround(GetOwner()))) + { + SendColoredMessage(GetOwner(), "Can't dodge in mid-air..."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityProperty(GetOwner(), "canrun"))) + { + int NOT_NOW = 1; + } + if (!(CanAttack(GetOwner()))) + { + int NOT_NOW = 1; + } + if (!(GetEntityProperty(GetOwner(), "canjump"))) + { + int NOT_NOW = 1; + } + if (!(GetEntityProperty(GetOwner(), "canmove"))) + { + int NOT_NOW = 1; + } + if ((NOT_NOW)) + { + SendColoredMessage(GetOwner(), "ent_me Can't dodge now..."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((IsDucking(GetOwner()))) return; + ShowHelpTip(GetOwner(), "firstleap", "Congratulations! You can dodge!", "From Martialarts 10+, you can make short dodges to the left or right by holding shift with a strafe key.|At 15, you'll be able to leap backwards."); + NEXT_DODGE = 0.25; + NEXT_DODGE += GetGameTime(); + NEXT_LEAPLEFT = GetGameTime(); + NEXT_LEAPLEFT += 3.0; + DrainStamina(GetOwner()); + string VIEW_YAW = GetEntityProperty(GetOwner(), "viewangles"); + string VIEW_YAW = /* TODO: $vec.yaw */ $vec.yaw(VIEW_YAW); + AddVelocity(GetOwner(), /* TODO: $relpos */ $relpos(Vector3(0, VIEW_YAW, 0), Vector3(-600, 0, 180))); + // svplaysound: svplaysound 4 10 player/hitground1.wav + EmitSound(4, 10, "player/hitground1.wav"); + } + + void game_leapright() + { + if (!(GetGameTime() > NEXT_DODGE)) return; + if ((IsKeyDown(GetOwner(), "forward"))) return; + if (!(GetGameTime() > NEXT_LEAPRIGHT)) return; + if ((GetEntityProperty(GetOwner(), "scriptvar"))) return; + if (!(GetSkillLevel(GetOwner(), "martialarts") > 10)) return; + if (param1 <= LEAP_SIDE_DRAIN) + { + SendColoredMessage(GetOwner(), "Not enough stamina remaing to dodge."); + } + if (!(param1 > LEAP_SIDE_DRAIN)) return; + if (!(IsOnGround(GetOwner()))) + { + SendColoredMessage(GetOwner(), "Can't dodge in mid-air..."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(GetEntityProperty(GetOwner(), "canrun"))) + { + int NOT_NOW = 1; + } + if (!(CanAttack(GetOwner()))) + { + int NOT_NOW = 1; + } + if (!(GetEntityProperty(GetOwner(), "canjump"))) + { + int NOT_NOW = 1; + } + if (!(GetEntityProperty(GetOwner(), "canmove"))) + { + int NOT_NOW = 1; + } + if ((NOT_NOW)) + { + SendColoredMessage(GetOwner(), "Can't dodge now..."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((IsDucking(GetOwner()))) return; + ShowHelpTip(GetOwner(), "firstleap", "Congratulations! You can dodge!", "From Martialarts 10+, you can make short dodges to the left or right by holding shift with a strafe key.|At 15, you'll be able to leap backwards."); + NEXT_DODGE = 0.25; + NEXT_DODGE += GetGameTime(); + NEXT_LEAPRIGHT = GetGameTime(); + NEXT_LEAPRIGHT += 3.0; + DrainStamina(GetOwner()); + string VIEW_YAW = GetEntityProperty(GetOwner(), "viewangles"); + string VIEW_YAW = /* TODO: $vec.yaw */ $vec.yaw(VIEW_YAW); + AddVelocity(GetOwner(), /* TODO: $relpos */ $relpos(Vector3(0, VIEW_YAW, 0), Vector3(600, 0, 180))); + // svplaysound: svplaysound 4 10 player/hitground1.wav + EmitSound(4, 10, "player/hitground1.wav"); + } + + void game_applyeffect() + { + if ((/* TODO: $get_scriptflag */ $get_scriptflag(GetOwner(), "spider_resist", "type_exists"))) + { + if ((GetEntityProperty(param5, "itemname")).findFirst("spid") >= 0) + { + int L_ABORT = 1; + } + if ((GetEntityProperty(param2, "itemname")).findFirst("spid") >= 0) + { + int L_ABORT = 1; + } + if ((L_ABORT)) + { + } + return; + int L_DID_ABORT = 1; + } + } + +} + +} diff --git a/scripts/angelscript/player/player_sh_stats.as b/scripts/angelscript/player/player_sh_stats.as new file mode 100644 index 00000000..700667d8 --- /dev/null +++ b/scripts/angelscript/player/player_sh_stats.as @@ -0,0 +1,36 @@ +#pragma context server + +namespace MS +{ + +class PlayerShStats : CGameScript +{ + void game_reset_wear_positions() + { + // TODO: setwearpos clearall + // TODO: setwearpos head 1 + // TODO: setwearpos neck 1 + // TODO: setwearpos chest 1 + // TODO: setwearpos back 3 + // TODO: setwearpos shoulder 1 + // TODO: setwearpos bow 2 + // TODO: setwearpos arms 2 + // TODO: setwearpos rightarm 1 + // TODO: setwearpos leftarm 1 + // TODO: setwearpos righthand 1 + // TODO: setwearpos lefthand 1 + // TODO: setwearpos rightfinger 10 + // TODO: setwearpos leftfinger 10 + // TODO: setwearpos waist 2 + // TODO: setwearpos belt 8 + // TODO: setwearpos hip 2 + // TODO: setwearpos legs 1 + // TODO: setwearpos rightthigh 1 + // TODO: setwearpos leftthigh 1 + // TODO: setwearpos rightfoot 1 + // TODO: setwearpos leftfoot 1 + } + +} + +} diff --git a/scripts/angelscript/player/player_sound.as b/scripts/angelscript/player/player_sound.as new file mode 100644 index 00000000..8e27d4fe --- /dev/null +++ b/scripts/angelscript/player/player_sound.as @@ -0,0 +1,17 @@ +#pragma context server + +namespace MS +{ + +class PlayerSound : CGameScript +{ + string SOUND_DEATH; + + PlayerSound() + { + SOUND_DEATH = GetEntityProperty(GetOwner(), "scriptvar"); + } + +} + +} diff --git a/scripts/angelscript/player/player_statusflags.as b/scripts/angelscript/player/player_statusflags.as new file mode 100644 index 00000000..8c05391d --- /dev/null +++ b/scripts/angelscript/player/player_statusflags.as @@ -0,0 +1,59 @@ +#pragma context server + +namespace MS +{ + +class PlayerStatusflags : CGameScript +{ + int game.effect.canattack; + int game.effect.canduck; + int game.effect.canjump; + int game.effect.canmove; + int game.effect.canrun; + + PlayerStatusflags() + { + game.effect.canmove = 1; + game.effect.canrun = 1; + game.effect.canjump = 1; + game.effect.canduck = 1; + game.effect.canattack = 1; + } + + void set_status_flags() + { + game.effect.canmove = param1; + game.effect.canrun = param2; + game.effect.canjump = param3; + game.effect.canduck = param4; + game.effect.canattack = param5; + } + + void set_status_canmove() + { + game.effect.canmove = param1; + } + + void set_status_canrun() + { + game.effect.canrun = param1; + } + + void set_status_canjump() + { + game.effect.canjump = param1; + } + + void set_status_canduck() + { + game.effect.canduck = param1; + } + + void set_status_canattack() + { + game.effect.canattack = param1; + } + +} + +} diff --git a/scripts/angelscript/player/player_sv_menu.as b/scripts/angelscript/player/player_sv_menu.as new file mode 100644 index 00000000..1ba0fe2e --- /dev/null +++ b/scripts/angelscript/player/player_sv_menu.as @@ -0,0 +1,158 @@ +#pragma context server + +namespace MS +{ + +class PlayerSvMenu : CGameScript +{ + int PLR_CHECK_SUMMON_ACTIVE; + string PLR_CHECK_SUMMON_ACTIVE_TYPE; + string PLR_PET_LIST; + + void OnSpawn() override + { + SetMenuAutoOpen(1); + } + + void game_menu_getoptions() + { + if (GetEntityIndex(GetOwner()) == param1) + { + menu_self(); + } + else + { + menu_other(param1); + } + } + + void menu_self() + { + if (!(GetEntityProperty(GetOwner(), "sitting"))) + { + string reg.mitem.title = "Sit Down (Rest)"; + } + else + { + string reg.mitem.title = "Stand Up"; + } + string reg.mitem.type = "callback"; + string reg.mitem.callback = "plr_menu_emote"; + string reg.mitem.data = "player_sitstand"; + if (!(GetEntityProperty(GetOwner(), "sitting"))) + { + string reg.mitem.title = "Emote: Nod Yes"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "plr_menu_emote"; + string reg.mitem.data = "player_nodyes"; + string reg.mitem.title = "Emote: Nod No"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "plr_menu_emote"; + string reg.mitem.data = "player_nodno"; + string reg.mitem.title = "Emote: Stand At Attention"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "plr_menu_emote"; + string reg.mitem.data = "player_standidle"; + } + string reg.mitem.id = "itemdesc"; + string reg.mitem.title = "Item Desc"; + string reg.mitem.type = "itemdesc"; + string reg.mitem.id = "forgive"; + string reg.mitem.title = "Forgive Last PK"; + string reg.mitem.type = "forgive"; + PLR_PET_LIST = GetPlayerQuestData(GetOwner(), "pets"); + if (PLR_PET_LIST != 0) + { + for (int i = 0; i < GetTokenCount(PLR_PET_LIST, ";"); i++) + { + list_summons(); + } + } + if (GetTokenCount(PLR_ACTIVE_PETS, ";") > 0) + { + for (int i = 0; i < GetTokenCount(PLR_ACTIVE_PETS, ";"); i++) + { + list_unsummons(); + } + } + } + + void menu_other() + { + if (!(G_DEVELOPER_MODE)) return; + } + + void menu_give_item() + { + } + + void list_summons() + { + string PET_TYPE = GetToken(PLR_PET_LIST, i, ";"); + PLR_CHECK_SUMMON_ACTIVE = 0; + PLR_CHECK_SUMMON_ACTIVE_TYPE = PET_TYPE; + for (int i = 0; i < GetTokenCount(PLR_ACTIVE_PET_TYPES, ";"); i++) + { + list_summons_check_active(); + } + if ((PLR_CHECK_SUMMON_ACTIVE)) return; + string reg.mitem.title = "Summon pet "; + if (PET_TYPE == "pet_wolf") + { + string PET_NAME = "wolf"; + } + if (PET_TYPE == "pet_wolf_ice") + { + string PET_NAME = "ice wolf"; + } + if (PET_TYPE == "pet_wolf_shadow") + { + string PET_NAME = "shadow wolf"; + } + reg.mitem.title += PET_NAME; + string reg.mitem.type = "callback"; + string reg.mitem.data = PET_TYPE; + string reg.mitem.callback = "ext_summon_pets_new"; + if (GetGameTime() < PLR_SUMMON_MENU_DISABLE) + { + string reg.mitem.title = "(5 Second Pet Summon Delay)"; + string reg.mitem.type = "disabled"; + } + } + + void list_summons_check_active() + { + string CUR_SUMMON = GetToken(PLR_ACTIVE_PET_TYPES, i, ";"); + if ((PLR_CHECK_SUMMON_ACTIVE_TYPE).findFirst(CUR_SUMMON) >= 0) + { + PLR_CHECK_SUMMON_ACTIVE = 1; + } + } + + void list_unsummons() + { + LogDebug("PLR_ACTIVE_PETS"); + string PET_ID = GetToken(PLR_ACTIVE_PETS, i, ";"); + if (!(IsEntityAlive(PET_ID))) return; + string reg.mitem.title = "Unsummon "; + reg.mitem.title += GetEntityProperty(PET_ID, "scriptvar"); + string reg.mitem.type = "callback"; + string reg.mitem.data = PET_ID; + string reg.mitem.callback = "ext_unsummon_pets_new"; + if (GetGameTime() < PLR_SUMMON_MENU_DISABLE) + { + string reg.mitem.title = "(5 Second Pet Summon Delay)"; + string reg.mitem.type = "disabled"; + } + } + + void plr_menu_emote() + { + string CMD_STRING = "action "; + CMD_STRING += param2; + ClientCommand(GetOwner(), CMD_STRING); + } + +} + +} diff --git a/scripts/angelscript/player/player_sv_regen.as b/scripts/angelscript/player/player_sv_regen.as new file mode 100644 index 00000000..b7dd8d2f --- /dev/null +++ b/scripts/angelscript/player/player_sv_regen.as @@ -0,0 +1,88 @@ +#pragma context server + +namespace MS +{ + +class PlayerSvRegen : CGameScript +{ + int BASE_REGEN_HP; + int BASE_REGEN_MP; + float BASE_REGEN_RATE; + float BLOODSTONE_BONUS_RATE; + int BLOODSTONE_EQUIPPED; + string FINAL_REGEN_HP; + string FINAL_REGEN_MP; + string FINAL_REGEN_RATE_HP; + string FINAL_REGEN_RATE_MP; + float MANARING_BONUS_RATE; + int MANARING_EQUIPPED; + + PlayerSvRegen() + { + BASE_REGEN_RATE = 12.0; + BASE_REGEN_HP = 1; + BASE_REGEN_MP = 1; + BLOODSTONE_EQUIPPED = 0; + BLOODSTONE_BONUS_RATE = 6.0; + MANARING_EQUIPPED = 0; + MANARING_BONUS_RATE = 6.0; + calculate_new_regen(); + } + + void calculate_new_regen() + { + FINAL_REGEN_RATE_HP = BASE_REGEN_RATE; + FINAL_REGEN_HP = BASE_REGEN_HP; + FINAL_REGEN_RATE_MP = BASE_REGEN_RATE; + FINAL_REGEN_MP = BASE_REGEN_MP; + if ((BLOODSTONE_EQUIPPED)) + { + calculate_bloodstone_bonus(); + } + if ((MANARING_EQUIPPED)) + { + calculate_manaring_bonus(); + } + } + + void calculate_manaring_bonus() + { + string L_MANARING_BONUS_MP = (GetEntityProperty(GetOwner(), "maxmp") / 100); + FINAL_REGEN_RATE_MP -= MANARING_BONUS_RATE; + FINAL_REGEN_MP += L_MANARING_BONUS_MP; + } + + void calculate_bloodstone_bonus() + { + string L_BLOODSTONE_BONUS_HP = (GetEntityMaxHealth(GetOwner()) / 100); + FINAL_REGEN_RATE_HP -= BLOODSTONE_BONUS_RATE; + FINAL_REGEN_HP += L_BLOODSTONE_BONUS_HP; + } + + void player_regen_hp() + { + SetRepeatDelay(FINAL_REGEN_RATE_HP); + HealEntity(GetOwner(), FINAL_REGEN_HP); + } + + void player_regen_mp() + { + SetRepeatDelay(FINAL_REGEN_RATE_MP); + GiveMP(GetOwner()); + } + + void bloodstone_toggle() + { + BLOODSTONE_EQUIPPED = param1; + calculate_new_regen(); + } + + void manaring_toggle() + { + MANARING_EQUIPPED = param1; + calculate_new_regen(); + } + +} + +} diff --git a/scripts/angelscript/player/server/dmgpoints.as b/scripts/angelscript/player/server/dmgpoints.as new file mode 100644 index 00000000..a29dc321 --- /dev/null +++ b/scripts/angelscript/player/server/dmgpoints.as @@ -0,0 +1,153 @@ +#pragma context server + +namespace MS +{ + +class Dmgpoints : CGameScript +{ + string EXT_DMGPOINTS; + int INIT_DMGPOINTS; + string PLR_DMG; + int PLR_TOTAL_DMG; + + Dmgpoints() + { + PLR_TOTAL_DMG = 0; + } + + void activate_stuff() + { + if ((INIT_DMGPOINTS)) + { + return; + } + INIT_DMGPOINTS = 1; + if (G_DM_CODE == GetPlayerQuestData(GetOwner(), "dm")) + { + restore_dmg_points(); + } + else + { + SetPlayerQuestData(GetOwner(), "dm"); + store_dmg_points(); + string L_MAP_NAME = StringToLower(GetMapName()); + if (FindToken(MAPS_GAUNTLET_START, L_MAP_NAME, ";") == -1) + { + return; + } + if (GetGameTime() < 180) + { + PLR_TOTAL_DMG = 10; + SendColoredMessage(GetOwner(), "Bonus 10 , 000 damage points for starting gauntlet."); + store_dmg_points(); + } + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (PLR_TOTAL_DMG > 1) + { + PLR_TOTAL_DMG -= 1; + PLR_DMG = 0; + store_dmg_points(); + } + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if (GetRelationship(param1) == "enemy") + { + int L_IS_ENEMY = 1; + } + if (GetRelationship(param1) == "wary") + { + int L_IS_ENEMY = 1; + } + string L_DAMAGE_TYPE = param3; + if ((L_DAMAGE_TYPE).findFirst("_effect") >= 0) + { + string L_DAMAGE_TYPE = /* TODO: $string_upto */ $string_upto(L_DAMAGE_TYPE, "_effect"); + } + if (L_DAMAGE_TYPE == "holy") + { + if (GetEntityRace(param1) == "undead") + { + int L_CAN_DAMAGE = 1; + } + if (GetEntityRace(param1) == "demon") + { + int L_CAN_DAMAGE = 1; + } + if (!(L_CAN_DAMAGE)) + { + return; + } + } + if ((L_IS_ENEMY)) + { + if (!(GetEntityProperty(param1, "scriptvar"))) + { + } + if (!(IsValidPlayer(param1))) + { + } + string L_DMG_DONE = param2; + string L_NME_HP = GetEntityHealth(param1); + string L_NME_ARMOR = GetEntityProperty(param1, "scriptvar"); + L_DMG_DONE *= /* TODO: $get_takedmg */ $get_takedmg(param1, L_DAMAGE_TYPE); + if (L_NME_ARMOR > 0) + { + L_DMG_DONE *= L_NME_ARMOR; + } + if (L_NME_HP < L_DMG_DONE) + { + string L_DMG_DONE = L_NME_HP; + } + add_dmg_points(L_DMG_DONE); + } + } + + void restore_dmg_points() + { + PLR_TOTAL_DMG = GetPlayerQuestData(GetOwner(), "dp"); + if (!(PLR_TOTAL_DMG > 0)) return; + int L_OUT_MSG = int(PLR_TOTAL_DMG); + SendColoredMessage(GetOwner(), "Restored " + L_OUT_MSG + " damage points."); + } + + void store_dmg_points() + { + SetPlayerQuestData(GetOwner(), "dp"); + } + + void add_dmg_points() + { + PLR_DMG += param1; + if (PLR_DMG >= 1000) + { + PLR_TOTAL_DMG += int((PLR_DMG / 1000)); + PLR_DMG %= 1000; + store_dmg_points(); + } + } + + void ext_dmgpoint_bonus() + { + add_dmg_points(int(param1)); + string OUT_MSG = "+"; + OUT_MSG += int(param1); + OUT_MSG += " damage points "; + OUT_MSG += param2; + SendColoredMessage(GetOwner(), OUT_MSG); + } + + void ext_get_dmgpoints() + { + EXT_DMGPOINTS = PLR_TOTAL_DMG; + EXT_DMGPOINTS += (PLR_DMG * 0.001); + } + +} + +} diff --git a/scripts/angelscript/player/server/element_resist.as b/scripts/angelscript/player/server/element_resist.as new file mode 100644 index 00000000..a02055eb --- /dev/null +++ b/scripts/angelscript/player/server/element_resist.as @@ -0,0 +1,207 @@ +#pragma context server + +namespace MS +{ + +class ElementResist : CGameScript +{ + string ELM_REGISTER_SILENT; + string OLD_RESISTANCES; + int PLR_CHECK_WEAPON_RESIST; + string PLR_RESIST_ELEMENTS; + string PLR_RESIST_RESET; + int PLR_RESIST_UPDATE_FLAG; + string PLR_RESIST_VALUES; + + ElementResist() + { + if (!((PLR_RESIST_NAMES.length() >= 0))) + { + array PLR_RESIST_NAMES; + array PLR_RESIST_TYPES; + array PLR_RESIST_AMTS; + array PLR_RESIST_WEAPON_IDS; + array PLR_RESIST_WEAPON_TAGS; + } + PLR_RESIST_ELEMENTS = "fire;lightning;cold;earth;poison;acid;holy;dark;magic;slash;blunt;pierce;all"; + PLR_RESIST_VALUES = "1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0"; + PLR_CHECK_WEAPON_RESIST = 0; + PLR_RESIST_RESET = "1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0;1.0"; + } + + void ext_register_element() + { + string RESIST_NAME = param1; + string RESIST_TYPE = param2; + string RESIST_AMT = param3; + string FIND_NAME = ArrayFind(PLR_RESIST_NAMES, RESIST_NAME, 0); + if (RESIST_TYPE == "remove") + { + if (FIND_NAME != -1) + { + PLR_RESIST_NAMES.removeAt(FIND_NAME); + PLR_RESIST_TYPES.removeAt(FIND_NAME); + PLR_RESIST_AMTS.removeAt(FIND_NAME); + update_resistances(); + } + } + else + { + RESIST_AMT *= 0.01; + if (FIND_NAME != -1) + { + string OLD_VALUE = ArrayFind(PLR_RESIST_AMTS, FIND_NAME, 0); + if (OLD_VALUE != RESIST_AMT) + { + PLR_RESIST_AMTS[FIND_NAME] = RESIST_AMT; + } + } + else + { + PLR_RESIST_NAMES.insertLast(RESIST_NAME); + PLR_RESIST_TYPES.insertLast(RESIST_TYPE); + PLR_RESIST_AMTS.insertLast(RESIST_AMT); + } + update_resistances(); + } + } + + void update_resistances() + { + PLR_RESIST_UPDATE_FLAG = 0; + OLD_RESISTANCES = PLR_RESIST_VALUES; + PLR_RESIST_VALUES = PLR_RESIST_RESET; + for (int i = 0; i < int(PLR_RESIST_NAMES.length()); i++) + { + cat_resistances(); + } + for (int i = 0; i < GetTokenCount(PLR_RESIST_VALUES, ";"); i++) + { + apply_resistances(); + } + } + + void cat_resistances() + { + string CUR_IDX = i; + string ITEM_RESIST_TYPE = PLR_RESIST_TYPES[int(CUR_IDX)]; + string ITEM_RESIST_AMT = PLR_RESIST_AMTS[int(CUR_IDX)]; + string ITEM_RESIST_AMT = /* TODO: $neg */ $neg(ITEM_RESIST_AMT); + string CUR_RESIST_IDX = FindToken(PLR_RESIST_ELEMENTS, ITEM_RESIST_TYPE, ";"); + string CUR_RESIST_AMT = GetToken(PLR_RESIST_VALUES, CUR_RESIST_IDX, ";"); + CUR_RESIST_AMT += ITEM_RESIST_AMT; + if (CUR_RESIST_AMT < 0) + { + int CUR_RESIST_AMT = 0; + } + SetToken(PLR_RESIST_VALUES, CUR_RESIST_IDX, CUR_RESIST_AMT, ";"); + } + + void apply_resistances() + { + string CUR_IDX = i; + string CUR_RESIST_TYPE = GetToken(PLR_RESIST_ELEMENTS, CUR_IDX, ";"); + string CUR_RESIST_AMT = GetToken(PLR_RESIST_VALUES, CUR_IDX, ";"); + SetDamageResistance(CUR_RESIST_TYPE, CUR_RESIST_AMT); + string OLD_RESIST_AMT = GetToken(OLD_RESISTANCES, CUR_IDX, ";"); + if (CUR_RESIST_AMT != OLD_RESIST_AMT) + { + CUR_RESIST_AMT *= 100; + CUR_RESIST_AMT -= 100; + string CUR_RESIST_AMT = /* TODO: $neg */ $neg(CUR_RESIST_AMT); + int CUR_RESIST_AMT = int(CUR_RESIST_AMT); + CUR_RESIST_AMT += "%"; + if (!(ELM_REGISTER_SILENT)) + { + SendColoredMessage(GetOwner(), "Your resistance to " + CUR_RESIST_TYPE + "is now " + CUR_RESIST_AMT); + } + ELM_REGISTER_SILENT = 0; + } + } + + void ext_register_weapon() + { + string WEAPON_ID = param1; + string OUT_TAG = param2; + string OUT_ELM = param3; + string OUT_AMT = param4; + if (param3 != "remove") + { + if (ArrayFind(PLR_RESIST_WEAPON_IDS, param1, 0) == -1) + { + ext_register_element(OUT_TAG, OUT_ELM, OUT_AMT); + PLR_RESIST_WEAPON_IDS.insertLast(WEAPON_ID); + PLR_RESIST_WEAPON_TAGS.insertLast(OUT_TAG); + } + } + else + { + ext_register_element(OUT_TAG, "remove"); + string WEAPON_IDX = ArrayFind(PLR_RESIST_WEAPON_IDS, param1, 0); + PLR_RESIST_WEAPON_IDS.removeAt(WEAPON_IDX); + PLR_RESIST_WEAPON_TAGS.removeAt(WEAPON_IDX); + } + if ((PLR_RESIST_WEAPON_IDS).length() >= 3) + { + if (!(PLR_CHECK_WEAPON_RESIST)) + { + } + PLR_CHECK_WEAPON_RESIST = 1; + check_weapons_loop(); + } + else + { + PLR_CHECK_WEAPON_RESIST = 0; + } + } + + void check_weapons_loop() + { + if (!(PLR_CHECK_WEAPON_RESIST)) return; + ScheduleDelayedEvent(5.0, "check_weapons_loop"); + if (!(PLR_IN_WORLD)) return; + if (!(IsEntityAlive(GetOwner()))) return; + int N_RESIST_WEAPONS = int(PLR_RESIST_WEAPON_IDS.length()); + if (N_RESIST_WEAPONS > 0) + { + for (int i = 0; i < int(PLR_RESIST_WEAPON_IDS.length()); i++) + { + check_weapons(); + } + } + if ((PLR_RESIST_WEAPON_IDS).length() < 3) + { + PLR_CHECK_WEAPON_RESIST = 0; + } + } + + void check_weapons() + { + string CUR_WEAPON = PLR_RESIST_WEAPON_IDS[int(i)]; + if (CUR_WEAPON == PLR_LEFT_HAND) + { + int NO_REMOVE = 1; + } + if (CUR_WEAPON == PLR_RIGHT_HAND) + { + int NO_REMOVE = 1; + } + if ((NO_REMOVE)) return; + ext_register_element(PLR_RESIST_WEAPON_TAGS[int(CUR_WEAPON)], "remove"); + PLR_RESIST_WEAPON_IDS.removeAt(CUR_WEAPON); + PLR_RESIST_WEAPON_TAGS.removeAt(CUR_WEAPON); + } + + void OnDeath(CBaseEntity@ attacker) override + { + ext_register_element("firep", "remove"); + ext_register_element("coldp", "remove"); + ext_register_element("ligip", "remove"); + ext_register_element("firip", "remove"); + ext_register_element("colip", "remove"); + ext_register_element("poiip", "remove"); + } + +} + +} diff --git a/scripts/angelscript/player/server/meta_perks.as b/scripts/angelscript/player/server/meta_perks.as new file mode 100644 index 00000000..5afac467 --- /dev/null +++ b/scripts/angelscript/player/server/meta_perks.as @@ -0,0 +1,108 @@ +#pragma context server + +namespace MS +{ + +class MetaPerks : CGameScript +{ + string PLR_DEVELOPER; + string PLR_DONATOR; + string PLR_HAS_TROLLCANO; + + MetaPerks() + { + PLR_DONATOR = "func_donator"(); + PLR_DEVELOPER = "func_developer"(); + PLR_HAS_TROLLCANO = "func_troll"(); + } + + void list_cheaters() + { + if ((PLR_HAS_TROLLCANO)) + { + ScheduleDelayedEvent(20.0, "ext_keldorn_troll"); + } + } + + void ext_keldorn_troll() + { + if ((ItemExists(GetOwner(), "scroll2_trollcano"))) return; + CallExternal(GAME_MASTER, "gm_keldorn_troll", GetEntityIndex(GetOwner())); + } + + void game_player_putinworld() + { + ScheduleDelayedEvent(2.0, "list_cheaters"); + toggle_halo(); + toggle_dev_halo(); + } + + void toggle_halo() + { + if (!(PLR_DONATOR)) return; + if (GetPlayerQuestData(GetOwner(), "dhal") == 0) + { + SetPlayerQuestData(GetOwner(), "dhal"); + ClientEvent("update", "all", "const.localplayer.scriptID", "cl_set_halo", 0, GetEntityIndex(GetOwner())); + } + else + { + SetPlayerQuestData(GetOwner(), "dhal"); + ClientEvent("update", "all", "const.localplayer.scriptID", "cl_set_halo", 1, GetEntityIndex(GetOwner())); + } + } + + void toggle_dev_halo() + { + if (!(PLR_DEVELOPER)) return; + if (GetPlayerQuestData(GetOwner(), "dhal") != 2) + { + SetPlayerQuestData(GetOwner(), "dhal"); + ClientEvent("update", "all", "const.localplayer.scriptID", "cl_set_halo", 2, GetEntityIndex(GetOwner())); + } + else + { + SetPlayerQuestData(GetOwner(), "dhal"); + ClientEvent("update", "all", "const.localplayer.scriptID", "cl_set_halo", 0, GetEntityIndex(GetOwner())); + } + } + + void func_donator() + { + int L_DONATED = 0; + string L_STEAM = GetPlayerAuthId(GetOwner()); + if (FindInGlobalArray(G_ARRAY_DONATORS, L_STEAM, 0) > -1) + { + int L_DONATED = 1; + } + return; + return; + } + + void func_developer() + { + int L_DEV = 0; + string L_STEAM = GetPlayerAuthId(GetOwner()); + if (FindInGlobalArray(G_ARRAY_DEVELOPERS, L_STEAM, 0) > -1) + { + int L_DEV = 1; + } + return; + return; + } + + void func_troll() + { + int L_TROLL = 0; + string L_STEAM = GetPlayerAuthId(GetOwner()); + if ((G_TROLLCANO_OWNERS).findFirst(L_STEAM) >= 0) + { + int L_TROLL = 1; + } + return; + return; + } + +} + +} diff --git a/scripts/angelscript/player/sfx_viewheight.as b/scripts/angelscript/player/sfx_viewheight.as new file mode 100644 index 00000000..f7c66c5f --- /dev/null +++ b/scripts/angelscript/player/sfx_viewheight.as @@ -0,0 +1,103 @@ +#pragma context server + +namespace MS +{ + +class SfxViewheight : CGameScript +{ + string FX_CUR_V; + string FX_DEST_V; + string FX_DRIFTING; + string FX_SPEED; + string game.cleffect.view_ofs.z; + + void client_activate() + { + LogDebug("*** $currentscript client_activate PARAM1 PARAM2 PARAM3"); + if (param1 != "remove") + { + FX_SPEED = param2; + if (FX_SPEED != 0) + { + FX_DEST_V = param1; + LogDebug("*** $currentscript adjust to FX_DEST_V @ FX_SPEED"); + FX_DRIFTING = 1; + drift_to_new_view(); + } + else + { + FX_CUR_V = param1; + LogDebug("*** $currentscript set to FX_DEST_V"); + set_view(FX_CUR_V); + } + } + else + { + LogDebug("*** $currentscript remove effect"); + RemoveScript(); + } + } + + void set_view() + { + LogDebug("*** $currentscript set_view PARAM1"); + game.cleffect.view_ofs.z = param1; + } + + void update_view() + { + LogDebug("*** $currentscript update_view PARAM1 PARAM2 PARAM3"); + FX_SPEED = param2; + if (FX_SPEED != 0) + { + FX_DEST_V = param1; + LogDebug("*** $currentscript update_view bdrift: FX_DRIFTING spd FX_SPEED"); + if (!(FX_DRIFTING)) + { + } + FX_DRIFTING = 1; + drift_to_new_view(); + } + else + { + FX_CUR_V = param1; + LogDebug("*** $currentscript update_view set FX_CUR_V"); + set_view(FX_CUR_V); + } + } + + void drift_to_new_view() + { + if (!(FX_DRIFTING)) return; + FX_CUR_V += FX_SPEED; + LogDebug("*** $currentscript drift_to_new_view spd FX_SPEED dest FX_CUR_V"); + if (FX_SPEED < 0) + { + if (FX_CUR_V < FX_DEST_V) + { + } + FX_CUR_V = FX_DEST_V; + FX_DRIFTING = 0; + } + else + { + if (FX_CUR_V > FX_DEST_V) + { + } + FX_CUR_V = FX_DEST_V; + FX_DRIFTING = 0; + } + set_view(FX_CUR_V); + if (!(FX_DRIFTING)) return; + ScheduleDelayedEvent(0.01, "drift_to_new_view"); + } + + void remove_fx() + { + LogDebug("*** $currentscript remove_fx"); + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/player/valid_spawn_new.as b/scripts/angelscript/player/valid_spawn_new.as new file mode 100644 index 00000000..d5b33d23 --- /dev/null +++ b/scripts/angelscript/player/valid_spawn_new.as @@ -0,0 +1,250 @@ +#pragma context server + +namespace MS +{ + +class ValidSpawnNew : CGameScript +{ + int GAUNTLET_MAP; + string L_VOTE_TRIG; + int MSG_COUNTER; + string MSG_TEXT; + string MSG_TITLE; + string N_RMAP_VALIDS; + string PLR_PRECHEAT_POS; + string RMAP_TYPE; + int RMAP_VALIDATED_GAUNTLET; + string RMAP_VALID_FROM; + int STARTED_VOTE; + string THIS_MAP; + string VALID_MAP_LIST_ENGLISH; + string VALID_START_MAP; + + void validate_spawn() + { + LogDebug("validate_spawn enter inworld PLR_IN_WORLD map StringToLower(GetMapName())"); + if (!(GetEntityProperty(GetOwner(), "scriptvar"))) return; + THIS_MAP = StringToLower(GetMapName()); + if (!(THIS_MAP != "")) return; + GAUNTLET_MAP = 0; + string L_RMAP_IDX = FindInGlobalArray(G_ARRAY_RMAPS, THIS_MAP, 0); + if (L_RMAP_IDX > -1) + { + GAUNTLET_MAP = 1; + RMAP_VALID_FROM = GetGlobalArray(G_ARRAY_RMAPS_CONNECTORS, int(L_RMAP_IDX)); + string L_RMAP_TYPE = GetGlobalArray(G_ARRAY_RMAPS_TYPES, int(L_RMAP_IDX)); + RMAP_TYPE = GetToken(L_RMAP_TYPE, 0, ";"); + if (RMAP_TYPE == "series") + { + RMAP_SERIES_START = GetToken(L_RMAP_TYPE, 1, ";"); + RMAP_SERIES_TITLE = GetToken(L_RMAP_TYPE, 2, ";"); + } + } + LogDebug("validate_spawn gidx L_RMAP_IDX g GAUNTLET_MAP t THIS_MAP m GetPlayerQuestData(GetOwner(), "m") mv GetPlayerQuestData(GetOwner(), "mv")"); + if (!(GAUNTLET_MAP)) return; + RMAP_VALIDATED_GAUNTLET = 0; + if ((G_VALID_SPAWN)) + { + map_validated("other_player"); + return; + } + if (GetPlayerQuestData(GetOwner(), "m") == THIS_MAP) + { + map_validated("m_validated_destmap_is_thismap"); + return; + } + if (GetPlayerQuestData(GetOwner(), "mv") == THIS_MAP) + { + map_validated("mv_validated_lastgaunt_is_thismap"); + return; + } + if (GetCvar("msvote_map_type") == "nonfn") + { + map_validated("nonfn"); + return; + } + if ((G_VALID_SPAWN)) return; + if (RMAP_TYPE == "hidden") + { + MSG_TITLE = "HIDDEN MAP"; + MSG_TEXT = "The entrance to this hidden map must be reached from "; + VALID_MAP_LIST_ENGLISH = ""; + N_RMAP_VALIDS = GetTokenCount(RMAP_VALID_FROM, ";"); + N_RMAP_VALIDS -= 1; + for (int i = 0; i < GetTokenCount(RMAP_VALID_FROM, ";"); i++) + { + make_valid_map_list_english(); + } + MSG_TEXT += VALID_MAP_LIST_ENGLISH; + MSG_TEXT += "."; + } + if (RMAP_TYPE == "series") + { + MSG_TITLE = "GAUNTLET MAP"; + MSG_TEXT = "Series "; + MSG_TEXT += RMAP_SERIES_TITLE; + MSG_TEXT += " begins at "; + MSG_TEXT += RMAP_SERIES_START; + MSG_TEXT += "|"; + MSG_TEXT += THIS_MAP; + MSG_TEXT += " must be reached from "; + N_RMAP_VALIDS = GetTokenCount(RMAP_VALID_FROM, ";"); + N_RMAP_VALIDS -= 1; + VALID_MAP_LIST_ENGLISH = ""; + for (int i = 0; i < GetTokenCount(RMAP_VALID_FROM, ";"); i++) + { + make_valid_map_list_english(); + } + MSG_TEXT += VALID_MAP_LIST_ENGLISH; + MSG_TEXT += "."; + } + LogDebug("map_failed_validate RMAP_VALID_FROM"); + MSG_COUNTER = 0; + PLR_PRECHEAT_POS = GetEntityOrigin(GetOwner()); + gauntlet_invalid_loop(); + ScheduleDelayedEvent(0.1, "premt_black"); + ScheduleDelayedEvent(300.0, "reset_server"); + } + + void premt_black() + { + Effect("screenfade", GetOwner(), 0.9, 5.0, Vector3(10, 10, 10), 255, "noblend"); + } + + void gauntlet_invalid_loop() + { + LogDebug("gauntlet_invalid_loop"); + if ((G_DEVELOPER_MODE)) + { + SetGlobalVar("G_VALID_SPAWN", 1); + } + if ((G_VALID_SPAWN)) + { + SendInfoMsg(GetOwner(), "Redeemed " + A + " player who traveled to this map legally has joined."); + map_validated("redeemed"); + SetEntityOrigin(GetOwner(), PLR_PRECHEAT_POS); + return; + } + ApplyEffect(GetOwner(), "effects/gauntlet_invalid", 4.9); + Effect("screenfade", GetOwner(), 0.9, 5.0, Vector3(10, 10, 10), 255, "noblend"); + SetEntityOrigin(GetOwner(), Vector3(-20000, -20000, -20000)); + MSG_COUNTER += 1; + if (MSG_COUNTER == 1) + { + if (RMAP_TYPE == "hidden") + { + SendPlayerMessage(GetOwner(), "Hidden Map: you cannot warp here. You must discover the entrance in:"); + } + if (RMAP_TYPE == "series") + { + SendPlayerMessage(GetOwner(), "Gauntlet Series: " + RMAP_SERIES_TITLE + "begins at " + RMAP_SERIES_START); + } + ShowHelpTip(GetOwner(), "generic", MSG_TITLE, MSG_TEXT); + } + if (MSG_COUNTER == 2) + { + MSG_COUNTER = 0; + if (RMAP_TYPE == "hidden") + { + SendPlayerMessage(GetOwner(), VALID_MAP_LIST_ENGLISH); + } + if (RMAP_TYPE == "series") + { + SendPlayerMessage(GetOwner(), "You must begin this series at " + RMAP_SERIES_START); + } + ShowHelpTip(GetOwner(), "generic", MSG_TITLE, MSG_TEXT); + if (!(STARTED_VOTE)) + { + ScheduleDelayedEvent(5.0, "start_vote"); + } + } + if ((G_VALID_SPAWN)) return; + ScheduleDelayedEvent(5.0, "gauntlet_invalid_loop"); + } + + void start_vote() + { + if ((G_VALID_SPAWN)) return; + STARTED_VOTE = 1; + L_VOTE_TRIG = "touch_trans_"; + if (RMAP_TYPE == "hidden") + { + VALID_START_MAP = GetToken(RMAP_VALID_FROM, 0, ";"); + } + if (RMAP_TYPE == "series") + { + VALID_START_MAP = RMAP_SERIES_START; + } + string L_VOTE_SUFFIX = VALID_START_MAP; + L_VOTE_TRIG += L_VOTE_SUFFIX; + UseTrigger(L_VOTE_TRIG); + ScheduleDelayedEvent(60.0, "reset_vote"); + } + + void reset_vote() + { + STARTED_VOTE = 0; + } + + void reset_server() + { + if ((G_VALID_SPAWN)) return; + UseTrigger("force_map_edana"); + ScheduleDelayedEvent(10.0, "manual_changelevel"); + } + + void manual_changelevel() + { + if ((G_VALID_SPAWN)) return; + CallExternal(GAME_MASTER, "gm_manual_map_change", "edana"); + } + + void check_from_valid() + { + string CUR_MAP = GetToken(RMAP_VALID_FROM, i, ";"); + if (!(CUR_MAP == QUEST_LASTGAUNTLET)) return; + RMAP_VALIDATED_GAUNTLET = 1; + } + + void make_valid_map_list_english() + { + string L_CUR_IDX = i; + string L_CUR_VMAP = GetToken(RMAP_VALID_FROM, L_CUR_IDX, ";"); + VALID_MAP_LIST_ENGLISH += L_CUR_VMAP; + if (!(N_RMAP_VALIDS > 0)) return; + if (N_RMAP_VALIDS > 2) + { + if (L_CUR_IDX < (N_RMAP_VALIDS - 1)) + { + VALID_MAP_LIST_ENGLISH += ", "; + } + else + { + if (L_CUR_IDX != N_RMAP_VALIDS) + { + } + VALID_MAP_LIST_ENGLISH += ", or "; + } + } + else + { + if (N_RMAP_VALIDS == 1) + { + if (L_CUR_IDX == 0) + { + } + VALID_MAP_LIST_ENGLISH += " or "; + } + } + } + + void map_validated() + { + LogDebug("map_validated PARAM1"); + SetGlobalVar("G_VALID_SPAWN", 1); + SetPlayerQuestData(GetOwner(), "mv"); + } + +} + +} diff --git a/scripts/angelscript/races.as b/scripts/angelscript/races.as new file mode 100644 index 00000000..f6915c07 --- /dev/null +++ b/scripts/angelscript/races.as @@ -0,0 +1,144 @@ +#pragma context server + +namespace MS +{ + +class Races : CGameScript +{ + Races() + { + string reg.race.name = "human"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "human;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "hguard"; + string reg.race.enemies = "orc;goblin;undead;rogue;hated;evil;demon;torkie"; + string reg.race.allies = "hguard;beloved"; + string reg.race.wary = "human"; + // TODO: registerrace + string reg.race.name = "wildanimal"; + string reg.race.enemies = "orc;spider;hated;evil;human"; + string reg.race.allies = "wildanimal;vermin;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "undead"; + string reg.race.enemies = "human;orc;goblin;good;hated;rogue;hguard"; + string reg.race.allies = "undead;spider;vermin;beloved;demon;evil"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "vermin"; + string reg.race.enemies = "orc;goblin;hated"; + string reg.race.allies = "vermin;undead;spider;wildanimal;beloved;evil"; + string reg.race.wary = "human"; + // TODO: registerrace + string reg.race.name = "spider"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "undead;spider;beloved;evil;demon"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "orc"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "goblin;orc;beloved;demon;evil"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "goblin"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "goblin;orc;beloved;demon;evil"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "rogue"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "rogue;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "giant"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "giant;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "demon"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "undead;demon;goblin;orc;evil;vermin;spider;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "torkie"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "torkie;necro;wildanimal;vermin;demon;evil;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "necro"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "necro;undead;torkie;wildanimal;vermin;demon;evil;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "ant_red"; + string reg.race.enemies = "all;hated;ant_black"; + string reg.race.allies = "ant_red;demon;evil;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "ant_black"; + string reg.race.enemies = "all;hated;ant_red"; + string reg.race.allies = "ant_black;demon;evil;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "evil"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "evil;demon;goblin;orc;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "good"; + string reg.race.enemies = "hated;evil;demon;orc;goblin;undead"; + string reg.race.allies = "beloved;human;good;hguard"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "nothing"; + string reg.race.enemies = "none;hated"; + string reg.race.allies = "none;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "hated"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "none"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "beloved"; + string reg.race.enemies = "none"; + string reg.race.allies = "all;beloved"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "neutral"; + string reg.race.enemies = "none"; + string reg.race.allies = "none"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "hostile1"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "hostile1;beloved;evil"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "hostile2"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "hostile2;beloved;evil"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "hostile3"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "hostile3;beloved;evil"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "hostile4"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "hostile4;beloved;evil"; + string reg.race.wary = "none"; + // TODO: registerrace + string reg.race.name = "hostile5"; + string reg.race.enemies = "all;hated"; + string reg.race.allies = "hostile5;beloved;evil"; + string reg.race.wary = "none"; + // TODO: registerrace + } + +} + +} diff --git a/scripts/angelscript/regorty/fmines_merchant.as b/scripts/angelscript/regorty/fmines_merchant.as new file mode 100644 index 00000000..76764329 --- /dev/null +++ b/scripts/angelscript/regorty/fmines_merchant.as @@ -0,0 +1,118 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "monsters/base_civilian.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class FminesMerchant : CGameScript +{ + int ASKED_APPLE; + int NO_JOB; + int NPC_NO_PLAYER_DMG; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string STORE_NAME; + string STORE_TRIGGERTEXT; + + FminesMerchant() + { + SOUND_IDLE1 = "voices/human/male_idle4.wav"; + SOUND_IDLE2 = "voices/human/male_idle5.wav"; + SOUND_IDLE3 = "voices/human/male_idle6.wav"; + SOUND_DEATH = "none"; + STORE_NAME = "deralia_grocer"; + STORE_TRIGGERTEXT = "store"; + NO_JOB = 1; + NPC_NO_PLAYER_DMG = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(60); + CanSee("player"); + SayText("These apples are normally only sold to Regorty , but today is your lucky day!"); + } + + void OnSpawn() override + { + SetHealth(1); + SetMaxHealth(1); + SetGold(30); + SetName("Friendly grocer"); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetModelBody(1, 3); + SetRoam(false); + SetModel("npc/human1.mdl"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_apple", "apple"); + CatchSpeech("say_rumour", "rumours"); + ScheduleDelayedEvent(10, "idle"); + } + + void say_rumor() + { + say_rumour(); + } + + void idle() + { + SetRepeatDelay(35); + SetVolume(3); + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void say_hi() + { + SayText("Hey there buddy , " + I + " got something to help take the edge off."); + ASKED_APPLE = 1; + } + + void gossip_1() + { + SayText(I + " heard that there are going to be more variety of apples coming soon."); + } + + void trade_done() + { + SayText("Enjoy and praise the Apple Lord!"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_apple", 420, 100); + } + + void say_rumour() + { + PlayAnim("once", "pondering"); + SayText("Regorty loves us this " + I + " know , for the apples tell me so."); + } + + void OnDamage(int damage) override + { + if ((NPC_NO_PLAYER_DMG)) + { + if ((IsValidPlayer(param1))) + { + } + SetDamage("dmg"); + SetDamage("hit"); + ReturnData(0); + } + } + +} + +} diff --git a/scripts/angelscript/roghan/crystal.as b/scripts/angelscript/roghan/crystal.as new file mode 100644 index 00000000..63118ef1 --- /dev/null +++ b/scripts/angelscript/roghan/crystal.as @@ -0,0 +1,69 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class Crystal : CGameScript +{ + int CAN_FLINCH; + string MONSTER_MODEL; + string PLAYER_LIST; + string SOUND_DEATH; + + Crystal() + { + CAN_FLINCH = 0; + SOUND_DEATH = "monsters/abomination/die.wav"; + Precache(SOUND_DEATH); + MONSTER_MODEL = "nimble/crystal.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + SetName("a Fire Crystal"); + SetRace("evil"); + SetHealth(100); + SetModel(MONSTER_MODEL); + SetWidth(32); + SetHeight(72); + SetDamageResistance("all", ".5"); + ScheduleDelayedEvent(5.0, "ice_shatter"); + SetBloodType("none"); + } + + void OnDamage(int damage) override + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void ice_shatter() + { + PLAYER_LIST = ""; + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + remove_ice(); + } + ScheduleDelayedEvent(5.0, "ice_shatter"); + } + + void remove_ice() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + string TARG_POS = GetEntityOrigin(CUR_TARG); + if ((GetEntityProperty(CUR_TARG, "haseffect"))) + { + RemoveEffect(CUR_TARG, "iceshield"); + XDoDamage(TARG_POS, 100, 5, 0, GetOwner(), GetOwner(), "none", "cold_effect"); + SendColoredMessage(CUR_TARG, "It found the shield."); + } + } + +} + +} diff --git a/scripts/angelscript/roghan/slow_walk.as b/scripts/angelscript/roghan/slow_walk.as new file mode 100644 index 00000000..aedc89aa --- /dev/null +++ b/scripts/angelscript/roghan/slow_walk.as @@ -0,0 +1,104 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class SlowWalk : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + int CAN_FLINCH; + string CUR_PLAYERS; + int DMG_KICK; + int DROP_GOLD; + string MONSTER_MODEL; + int MOVE_RANGE; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int TIMES_HIT; + + SlowWalk() + { + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_KICK = "kick"; + ANIM_ATTACK = ANIM_KICK; + ANIM_DEATH = "die_fallback"; + ANIM_IDLE = "idle1"; + CAN_FLINCH = 0; + DROP_GOLD = 0; + SOUND_DEATH = "voices/orc/die.wav"; + Precache(SOUND_DEATH); + SOUND_ATTACK1 = "voices/orc/attack.wav"; + SOUND_ATTACK2 = "voices/orc/attack2.wav"; + SOUND_ATTACK3 = "voices/orc/attack3.wav"; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_PAIN = "monsters/orc/pain.wav"; + MOVE_RANGE = 64; + ATTACK_RANGE = 90; + ATTACK_HITRANGE = 120; + ATTACK_HITCHANCE = 100; + DMG_KICK = RandomInt(0, 1); + MONSTER_MODEL = "monsters/Orc.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + SetName("Frozen Spirit"); + SetRace("evil"); + SetHealth(10000); + SetModel(MONSTER_MODEL); + SetWidth(32); + SetHeight(72); + SetDamageResistance("all", 0.5); + CUR_PLAYERS = GetPlayerCount(); + CUR_PLAYERS *= 4; + TIMES_HIT = 0; + SetAnimMoveSpeed(0.5); + SetAnimFrameRate(0.5); + BASE_MOVESPEED = 0.5; + BASE_FRAMERATE = 0.5; + SetHearingSensitivity(15); + // TODO: UNCONVERTED: hearingsensitivity + } + + void OnDamage(int damage) override + { + TIMES_HIT += 1; + if (TIMES_HIT == CUR_PLAYERS) + { + SetHealth(0); + } + // PlayRandomSound from: SOUND_PAIN + array sounds = {SOUND_PAIN}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void kick_land() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, ATTACK_HITCHANCE, "slash"); + } + +} + +} diff --git a/scripts/angelscript/roghan/test_boss.as b/scripts/angelscript/roghan/test_boss.as new file mode 100644 index 00000000..3e825a4a --- /dev/null +++ b/scripts/angelscript/roghan/test_boss.as @@ -0,0 +1,189 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class TestBoss : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_SMASH; + string ANIM_SWING; + string ANIM_WALK; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int BOB_UP; + int DMG_SMASH; + int DMG_SWING; + int MAX_SPIRITS; + string MONSTER_MODEL; + int MOVE_RANGE; + int PHASE_NUM; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + int SPIRIT_SIDE; + int SUM_SPIRITS; + + TestBoss() + { + ANIM_ATTACK = "attack1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + MOVE_RANGE = 64; + ATTACK_RANGE = 80; + ATTACK_HITRANGE = 120; + SOUND_DEATH = "voices/orc/die.wav"; + Precache(SOUND_DEATH); + ANIM_SWING = "swordswing1_L"; + ANIM_SMASH = "battleaxe_swing1_L"; + DMG_SWING = RandomInt(20, 40); + DMG_SMASH = RandomInt(30, 50); + ATTACK_HITCHANCE = 80; + SOUND_ATTACK1 = "voices/orc/attack.wav"; + SOUND_ATTACK2 = "voices/orc/attack2.wav"; + SOUND_ATTACK3 = "voices/orc/attack3.wav"; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_PAIN = "monsters/orc/pain.wav"; + MONSTER_MODEL = "monsters/Orc.mdl"; + Precache(MONSTER_MODEL); + Precache("nimble/crystal.mdl"); + Precache("npc/balancepriest1.mdl"); + } + + void OnSpawn() override + { + SetName("Elemental Master"); + SetRace("evil"); + SetHealth(1000); + SetModel(MONSTER_MODEL); + SetWidth(32); + SetHeight(72); + SetSayTextRange(10000); + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + SetDamageResistance("all", 0.7); + SetDamageResistance("fire", 1.25); + SetDamageResistance("cold", 0.25); + SetInvincible(true); + MAX_SPIRITS = 6; + SUM_SPIRITS = 0; + PHASE_NUM = 1; + SPIRIT_SIDE = 1; + BOB_UP = 0; + SpawnNPC("roghan/test_npc", /* TODO: $relpos */ $relpos(45, -1000, 0), ScriptMode::Legacy); + SetAngles("face"); + npcatk_suspend_ai(); + } + + void OnDamage(int damage) override + { + // PlayRandomSound from: SOUND_PAIN, SOUND_PAIN2 + array sounds = {SOUND_PAIN, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 8); + } + + void swing_sword() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWIPE, ATTACK_HITCHANCE, "slash"); + } + + void swing_axe() + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SMASH, ATTACK_HITCHANCE, "slash"); + } + + void begin_float() + { + npcatk_suspend_ai(); + PlayAnim("once", "break"); + npcatk_clear_targets(); + SetGravity(0); + SpawnNPC("roghan/crystal", /* TODO: $relpos */ $relpos(0, -150, 0), ScriptMode::Legacy); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 100)); + ScheduleDelayedEvent(2.0, "bob_float"); + ScheduleDelayedEvent(1.0, "phase_choose"); + } + + void bob_float() + { + if (BOB_UP == 0) + { + SetVelocity(GetOwner(), Vector3(0, 0, 5)); + BOB_UP += 1; + } + else + { + SetVelocity(GetOwner(), Vector3(0, 0, -2.5)); + BOB_UP = 0; + } + if (PHASE_NUM == 1) + { + ScheduleDelayedEvent(3, "bob_float"); + } + else + { + SetGravity(1); + } + } + + void phase_choose() + { + if (PHASE_NUM == 1) + { + SayText("Fools! Now feel the power of my Ice Spirits!"); + spirit_summon(); + ice_pulse(); + } + } + + void spirit_summon() + { + if (SUM_SPIRITS < MAX_SPIRITS) + { + if (SPIRIT_SIDE == 1) + { + SpawnNPC("roghan/slow_walk", /* TODO: $relpos */ $relpos(150, 0, 0), ScriptMode::Legacy); + SPIRIT_SIDE = 0; + SUM_SPIRITS += 1; + ScheduleDelayedEvent(5.0, "spirit_summon"); + } + else + { + SpawnNPC("roghan/slow_walk", /* TODO: $relpos */ $relpos(-150, 0, 0), ScriptMode::Legacy); + SPIRIT_SIDE = 1; + SUM_SPIRITS += 1; + ScheduleDelayedEvent(5.0, "spirit_summon"); + } + } + else + { + PHASE_NUM += 1; + } + } + + void ice_pulse() + { + string MY_POS = GetEntityOrigin(GetOwner()); + if (PHASE_NUM == 1) + { + XDoDamage(MY_POS, 100000, ".5", 0, GetOwner(), GetOwner(), "none", "cold_effect"); + ScheduleDelayedEvent(3.0, "ice_pulse"); + } + } + +} + +} diff --git a/scripts/angelscript/roghan/test_npc.as b/scripts/angelscript/roghan/test_npc.as new file mode 100644 index 00000000..6de54906 --- /dev/null +++ b/scripts/angelscript/roghan/test_npc.as @@ -0,0 +1,94 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class TestNpc : CGameScript +{ + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int FIGHT_STARTED; + int KEEP_PLAYERS_WARM_ACTIVE; + string MY_LOC; + string NPC_MODEL; + string PLAYER_LIST; + + TestNpc() + { + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_IDLE = "idle1"; + NPC_MODEL = "npc/balancepriest1.mdl"; + Precache(NPC_MODEL); + } + + void OnSpawn() override + { + SetName("Ancient Jailer"); + SetRace("beloved"); + SetHealth(1000); + SetModel(NPC_MODEL); + SetWidth(32); + SetHeight(72); + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + SetInvincible(true); + npcatk_suspend_ai(); + FIGHT_STARTED = 0; + KEEP_PLAYERS_WARM_ACTIVE = 1; + CatchSpeech("begin_fight", "start"); + } + + void begin_fight() + { + if (FIGHT_STARTED == 0) + { + MY_LOC = GetEntityOrigin(GetOwner()); + CallExternal("ent_creationowner", "begin_float"); + FIGHT_STARTED += 1; + keep_players_warm_loop(); + SayText("Heroes! Stay near me and " + I + " will protect you from his ice!"); + } + } + + void res_circle() + { + ClientEvent("new", "all", "effects/sfx_seal", MY_LOC, 172, 26, 3); + string L_FX_ORIGIN = MY_LOC; + L_FX_ORIGIN = "z"; + } + + void keep_players_warm_loop() + { + if (!(KEEP_PLAYERS_WARM_ACTIVE)) return; + ScheduleDelayedEvent(3.0, "keep_players_warm_loop"); + PLAYER_LIST = ""; + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + check_can_warm_players(); + } + res_circle(); + } + + void check_can_warm_players() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if (GetEntityRange(CUR_TARG) < 256) + { + CallExternal(CUR_TARG, "ext_register_element", "warm", "cold", 99); + SendColoredMessage(CUR_TARG, "You are now protected from " + ICE!); + } + else + { + CallExternal(CUR_TARG, "ext_register_element", "warm", "remove"); + SendColoredMessage(CUR_TARG, "You are no longer protected from " + ICE!); + } + } + +} + +} diff --git a/scripts/angelscript/sfor/Copy of undamael.as b/scripts/angelscript/sfor/Copy of undamael.as new file mode 100644 index 00000000..29c56417 --- /dev/null +++ b/scripts/angelscript/sfor/Copy of undamael.as @@ -0,0 +1,51 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Copy of undamael : CGameScript +{ + string ANIM_IDLE; + int CAN_FLINCH; + int IGNORE_ENEMY; + int MOVE_RANGE; + int SEE_ENEMY; + + Copy of undamael() + { + ANIM_IDLE = "idle1"; + MOVE_RANGE = 0; + SEE_ENEMY = 0; + IGNORE_ENEMY = 1; + CAN_FLINCH = 0; + Precache("lgtning.spr"); + } + + void OnSpawn() override + { + SetName("|Lord Undamael"); + SetInvincible(true); + SetHealth(2900); + SetGold(RandomInt(100, 400)); + SetFOV(359); + SetWidth(50); + SetHeight(128); + SetRace("undead"); + SetRoam(false); + SetHearingSensitivity(0); + SetSkillLevel(400); + SetModel("monsters/skeleton_hood.mdl"); + SetModelBody(0, 0); + SetIdleAnim(ANIM_IDLE); + } + + void fade_away() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/sfor/atholo.as b/scripts/angelscript/sfor/atholo.as new file mode 100644 index 00000000..e98f470c --- /dev/null +++ b/scripts/angelscript/sfor/atholo.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "sfor/undamael.as" + +namespace MS +{ + +class Atholo : CGameScript +{ +} + +} diff --git a/scripts/angelscript/sfor/game_master.as b/scripts/angelscript/sfor/game_master.as new file mode 100644 index 00000000..654a2ee4 --- /dev/null +++ b/scripts/angelscript/sfor/game_master.as @@ -0,0 +1,48 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + string GM_TEMP_SWORD_LOC; + + void undamael_reward_victor() + { + gm_find_strongest_player(); + string SWORD_LOC = param1; + if (GetPlayerQuestData(THE_CHOSEN_ONE, "f") == "complete") + { + int L_INVALID = 1; + } + if (GetEntityMaxHealth(THE_CHOSEN_ONE) < 700) + { + int L_INVALID = 1; + } + if ((L_INVALID)) + { + if (GetTokenCount(STRONGEST_PLAYER_LIST, ";") == 1) + { + SendInfoMsg("all", "One Time Quest All valid players present have completed this quest."); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + gm_find_strongest_player(); + GM_TEMP_SWORD_LOC = SWORD_LOC; + ScheduleDelayedEvent(0.1, "undamael_reward_victor2"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SpawnNPC("monsters/summon/felewyn_shard", SWORD_LOC, ScriptMode::Legacy); // params: THE_CHOSEN_ONE + } + + void undamael_reward_victor2() + { + undamael_reward_victor(GM_TEMP_SWORD_LOC); + } + +} + +} diff --git a/scripts/angelscript/sfor/keyhole_1.as b/scripts/angelscript/sfor/keyhole_1.as new file mode 100644 index 00000000..84618e23 --- /dev/null +++ b/scripts/angelscript/sfor/keyhole_1.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/keyhole.as" + +namespace MS +{ + +class Keyhole1 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/sfor/map_startup.as b/scripts/angelscript/sfor/map_startup.as new file mode 100644 index 00000000..fa9c4400 --- /dev/null +++ b/scripts/angelscript/sfor/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "sfor"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Dark Forest"); + SetGlobalVar("G_MAP_DESC", "This forest remains cursed by the power of the fallen Lord Undamael"); + SetGlobalVar("G_MAP_DIFF", "Levels 10-15 / 75-200hp"); + SetGlobalVar("G_WARN_HP", 75); + } + +} + +} diff --git a/scripts/angelscript/sfor/sforTC1.as b/scripts/angelscript/sfor/sforTC1.as new file mode 100644 index 00000000..e0de1645 --- /dev/null +++ b/scripts/angelscript/sfor/sforTC1.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Sfortc1 : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(5, 50)); + AddStoreItem(STORENAME, "item_ring", 1, 0); + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + if (RandomInt(1, 4) == 1) + { + add_good_item(); + } + if (RandomInt(1, 4) == 1) + { + add_great_item(); + } + if (RandomInt(1, 8) == 1) + { + AddStoreItem(STORENAME, "proj_bolt_steel", 25, 0, 0, 25); + } + } + +} + +} diff --git a/scripts/angelscript/sfor/sforTC2.as b/scripts/angelscript/sfor/sforTC2.as new file mode 100644 index 00000000..87c3a4ea --- /dev/null +++ b/scripts/angelscript/sfor/sforTC2.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Sfortc2 : CGameScript +{ + void chest_additems() + { + string L_MAP_NAME = StringToLower(GetMapName()); + add_gold(RandomInt(5, 25)); + if (L_MAP_NAME == "sfor") + { + AddStoreItem(STORENAME, "item_manuscript", 1, 0); + } + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + AddStoreItem(STORENAME, "health_lpotion", 1, 0); + if (RandomInt(1, 5) == 1) + { + AddStoreItem(STORENAME, "shields_buckler", 1, 0); + } + } + +} + +} diff --git a/scripts/angelscript/sfor/undamael.as b/scripts/angelscript/sfor/undamael.as new file mode 100644 index 00000000..3d704c68 --- /dev/null +++ b/scripts/angelscript/sfor/undamael.as @@ -0,0 +1,185 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Undamael : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int CAN_FLINCH; + int DAMAGE_ATTACK1; + int DAMAGE_ATTACK2; + int DID_WARCRY; + int FLINCH_DELAY; + int IGNORE_ENEMY; + string MONSTER_MODEL; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string NPC_MOVE_TARGET; + int SEE_ENEMY; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE; + string SOUND_PAIN; + string SOUND_PISSED; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_TAUNT; + int SWIPES; + + Undamael() + { + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "controller/con_pain2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_TAUNT = "nihilanth/nil_die.wav"; + SOUND_IDLE = "garg/gar_idle2.wav"; + SOUND_DEATH = "nihilanth/nil_done.wav"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ATTACK_HITRANGE = 600; + ATTACK_RANGE = 120; + ANIM_ATTACK = ""; + ATTACK_HITCHANCE = 0.9; + DAMAGE_ATTACK1 = RandomInt(40, 60); + DAMAGE_ATTACK2 = RandomInt(60, 100); + MOVE_RANGE = 100; + SEE_ENEMY = 0; + IGNORE_ENEMY = 0; + CAN_FLINCH = 0; + FLINCH_DELAY = 12; + NPC_MOVE_TARGET = "enemy"; + GiveItem(GetOwner(), "ring_light2"); + Precache(SOUND_DEATH); + SOUND_PISSED = "garg/gar_die1.wav"; + Precache(SOUND_PISSED); + Precache(SOUND_IDLE); + MONSTER_MODEL = "monsters/skeleton_boss2.mdl"; + Precache(MONSTER_MODEL); + Precache("lgtning.spr"); + } + + void OnSpawn() override + { + SetName("boss_atholo"); + SetName("Atholo"); + SetInvincible(true); + SetHealth(2200); + SetGold(250); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 2.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.1); + SetDamageResistance("lightning", 0.5); + SetWidth(40); + SetHeight(128); + SetRace("undead"); + SetRoam(false); + SetHearingSensitivity(6); + NPC_GIVE_EXP = 400; + SetModelBody(1, 4); + SetModel(MONSTER_MODEL); + SetModelBody(0, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + ANIM_ATTACK = "attack1"; + SetVolume(10); + EmitSound(GetOwner(), SOUND_TAUNT); + SWIPES = 0; + } + + void attack_1() + { + DoDamage(m_hLastSeen, 600, DAMAGE_ATTACK1, 0.75, "slash"); + ApplyEffect(m_hLastStruckByMe, "effects/dot_fire", 5, GetEntityIndex(GetOwner()), RandomInt(50, 100)); + SWIPES += 1; + if (!(SWIPES > 10)) return; + SWIPES = 0; + ANIM_ATTACK = "attack2"; + } + + void attack_2() + { + DoDamage(m_hLastSeen, ATTACK2_RANGE, DAMAGE_ATTACK2, 1.0, "slash"); + ApplyEffect(m_hLastStruckByMe, "effects/dot_cold_freeze", 5, GetEntityIndex(GetOwner()), RandomInt(25, 50)); + ANIM_ATTACK = "attack1"; + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void OnTargetValidate(CBaseEntity@ target) + { + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + SetRoam(true); + } + + void death() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_DEATH); + } + + void wander() + { + SetRepeatDelay(15); + SetVolume(10); + EmitSound(GetOwner(), SOUND_TAUNT); + SetMoveAnim(ANIM_WALK); + SEE_ENEMY = 0; + } + + void vulnerable() + { + SetInvincible(false); + SetVolume(10); + EmitSound(GetOwner(), SOUND_PISSED); + SetSayTextRange(1024); + SetAnimMoveSpeed(2.0); + SetAnimFrameRate(1.5); + CAN_FLINCH = 1; + SayText("Fools! " + I + " shall destroy you all!"); + } + + void turn_undead() + { + string INC_HOLY_DMG = param1; + string THE_EXCORCIST = param2; + string ME_ME = GetEntityIndex(GetOwner()); + DoDamage(ME_ME, "direct", INC_HOLY_DMG, 100, THE_EXCORCIST); + Effect("glow", GetOwner(), Vector3(255, 255, 0), 512, 1, 1); + } + + void my_target_died() + { + EmitSound(GetOwner(), 0, SOUND_TAUNT, 10); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // TODO: UNCONVERTED: usertrigger atholo_died + } + +} + +} diff --git a/scripts/angelscript/sfor/undamael2.as b/scripts/angelscript/sfor/undamael2.as new file mode 100644 index 00000000..4ba780f2 --- /dev/null +++ b/scripts/angelscript/sfor/undamael2.as @@ -0,0 +1,163 @@ +#pragma context server + +#include "monsters/base_monster.as" + +namespace MS +{ + +class Undamael2 : CGameScript +{ + string ANIM_ATTACK; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ATTACK1_RANGE; + int ATTACK2_RANGE; + string ATTACK_RANGE; + int CAN_FLINCH; + int FLINCH_DELAY; + int IGNORE_ENEMY; + int I_AM_TURNABLE; + int MOVE_RANGE; + int NPC_GIVE_EXP; + string NPC_MOVE_TARGET; + int SEE_ENEMY; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_PAIN; + string SOUND_PISSED; + string SOUND_REGEN; + string SOUND_SPAWN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + Undamael2() + { + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_PAIN = "controller/con_pain2.wav"; + SOUND_ATTACK1 = "zombie/claw_miss1.wav"; + SOUND_ATTACK2 = "zombie/claw_miss2.wav"; + SOUND_DEATH = "npc/undamael2.wav"; + SOUND_SPAWN = "npc/undamael1.wav"; + ANIM_RUN = "walk"; + ANIM_IDLE = "idle1"; + ANIM_WALK = "walk"; + ANIM_ATTACK = "attack1"; + ATTACK1_RANGE = 600; + ATTACK2_RANGE = 200; + MOVE_RANGE = 500; + SEE_ENEMY = 0; + IGNORE_ENEMY = 0; + CAN_FLINCH = 0; + FLINCH_DELAY = 12; + NPC_MOVE_TARGET = "enemy"; + SetVolume(10); + EmitSound(GetOwner(), SOUND_SPAWN); + Precache(SOUND_DEATH); + Precache("lgtning.spr"); + SOUND_PISSED = "nihilanth/nil_done.wav"; + SOUND_REGEN = "x/x_laugh1.wav"; + I_AM_TURNABLE = 0; + } + + void OnSpawn() override + { + SetName("Lord Undamael"); + SetInvincible(true); + SetHealth(9000); + SetGold(RandomInt(100, 400)); + SetWidth(50); + SetHeight(128); + SetRace("undead"); + SetRoam(false); + SetHearingSensitivity(10); + NPC_GIVE_EXP = 400; + SetModel("monsters/skeleton_hood.mdl"); + SetModelBody(0, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + SetActionAnim(ANIM_ATTACK); + SetDamageResistance("all", 0.25); + SetDamageResistance("holy", 2.0); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 0.1); + SetDamageResistance("lightning", 0.1); + SetVolume(10); + EmitSound(GetOwner(), SOUND_SPAWN); + } + + void attack_1() + { + DoDamage(m_hLastSeen, 600, Random(20.0, 150.0), 0.75, "slash"); + } + + void attack_2() + { + DoDamage(m_hLastSeen, ATTACK2_RANGE, Random(10.0, 100.0), 1.0, "slash"); + DoDamage(m_hLastSeen, ATTACK2_RANGE, Random(10.0, 100.0), 1.0, "slash"); + } + + void OnStruck(CBaseEntity@ attacker, int damage) + { + SetVolume(5); + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npc_attack() + { + if (RandomInt(0, 10) > 9) + { + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = 600; + MOVE_RANGE = 500; + } + else + { + ANIM_ATTACK = "attack2"; + ATTACK_RANGE = 160; + MOVE_RANGE = 130; + } + } + + void death() + { + SetVolume(10); + EmitSound(GetOwner(), SOUND_DEATH); + GiveItem(GetOwner(), "bows_swiftbow"); + GiveItem(GetOwner(), "smallarms_huggerdagger3"); + } + + void vulnerable() + { + SetInvincible(false); + EmitSound(GetOwner(), 0, SOUND_PISSED, 10); + SetSayTextRange(1024); + SayText("No! What have you done!?"); + } + + void OnDamage(int damage) override + { + // TODO: UNCONVERTED: 'reflect attacks >100dmg + if (param2 > 100) + { + DoDamage(param1, "direct", 1.0, param2, GetOwner()); + } + } + + void my_target_died() + { + // TODO: UNCONVERTED: 'regen all health on kill + EmitSound(GetOwner(), 0, SOUND_REGEN, 10); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 128, 2, 2); + SetHealth(GetMonsterMaxHP()); + } + +} + +} diff --git a/scripts/angelscript/sfor/undamael_head.as b/scripts/angelscript/sfor/undamael_head.as new file mode 100644 index 00000000..115d3f05 --- /dev/null +++ b/scripts/angelscript/sfor/undamael_head.as @@ -0,0 +1,153 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class UndamaelHead : CGameScript +{ + int IMMUNE_VAMPIRE; + string LAST_PLR_TOUCH; + string MY_OWNER; + int NO_SOLID; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string VULNERABLE; + + UndamaelHead() + { + SetCallback("touch", "enable"); + NPC_HACKED_MOVE_SPEED = 100; + NPC_GIVE_EXP = 15000; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.01); + string DEST_LOC = GetEntityProperty(MY_OWNER, "attachpos"); + SetEntityOrigin(GetOwner(), DEST_LOC); + if (GetGameTime() < LAST_PLR_TOUCH) + { + SetSolid("trigger"); + } + else + { + SetSolid("slidebox"); + } + } + + void OnSpawn() override + { + SetName("head_undi"); + SetName("Undamael"); + SetRace("undead"); + SetHealth(20000); + SetModel("monsters/undamael_hitbox.mdl"); + SetBloodType("red"); + SetWidth(128); + SetHeight(128); + SetRoam(false); + SetFly(true); + SetSolid("box"); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 2.0); + SetModelBody(0, 0); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + IMMUNE_VAMPIRE = 1; + SetNoPush(true); + npcatk_suspend_ai(); + ScheduleDelayedEvent(1.0, "check_vulnerable"); + } + + void game_dynamically_created() + { + MY_OWNER = param1; + } + + void OnDamage(int damage) override + { + if ((VULNERABLE)) return; + SetHealth(GetEntityMaxHealth(GetOwner())); + DoDamage(param1, "direct", param2, 1.0, param3); + SetDamage("dmg"); + SetDamage("hit"); + return; + } + + void OnHuntTarget(CBaseEntity@ target) + { + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + LogDebug("head struck"); + if (GetEntityProperty(MY_OWNER, "scriptvar") == "unset") + { + CallExternal(MY_OWNER, "npcatk_settarget", GetEntityIndex(m_hLastStruck), "struck"); + } + else + { + if (RandomInt(1, 100) < 50) + { + } + CallExternal(MY_OWNER, "npcatk_settarget", GetEntityIndex(m_hLastStruck), "struck"); + } + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(IsValidPlayer(param1))) return; + LAST_PLR_TOUCH = GetGameTime(); + LAST_PLR_TOUCH += 0.25; + } + + void ext_solid_on() + { + NO_SOLID = 0; + SetSolid("slidebox"); + } + + void ext_show_head() + { + SetModelBody(0, 1); + SetProp(GetOwner(), "renderamt", 64); + } + + void ext_unsolid() + { + LAST_PLR_TOUCH = GetGameTime(); + LAST_PLR_TOUCH += param1; + SetSolid("trigger"); + } + + void ext_vulnerable() + { + VULNERABLE = param1; + } + + void do_nuke() + { + LogDebug("doing nuke"); + string L_DMG = param2; + TossProjectile("proj_meteor", /* TODO: $relpos */ $relpos(0, 0, 0), GetEntityIndex(param1), 150, L_DMG, 2, "none"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(MY_OWNER, "death_sequence"); + } + + void check_vulnerable() + { + if (!(G_UNDAMAEL_VULNERABLE)) return; + VULNERABLE = 1; + } + +} + +} diff --git a/scripts/angelscript/sfor/undamael_msc.as b/scripts/angelscript/sfor/undamael_msc.as new file mode 100644 index 00000000..45aa5a50 --- /dev/null +++ b/scripts/angelscript/sfor/undamael_msc.as @@ -0,0 +1,1115 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class UndamaelMsc : CGameScript +{ + int AM_EATING; + string ANIM_ATTACK; + string ANIM_BREATH; + int ATTACK_HITRANGE; + int ATTACK_RANGE; + int ATTACK_ZRANGE; + int BEAM2_ON; + int BEAM_ATT1; + int BEAM_COUNT; + string BEAM_ENT; + string BEAM_EYE1; + string BEAM_EYE1_SEC; + string BEAM_EYE2; + string BEAM_EYE2_SEC; + int BEAM_SOUND_ON; + string BEAM_TARGET; + int BEAM_VOL; + int BEAM_WARM_UP; + string BREATH_ORG; + int BREATH_VOL; + string BURN_BOX; + string CUR_SPEED; + int CYCLES_STARTED; + int DETECT_RANGE; + int DMG_BEAM1; + int DMG_BEAM2; + int DMG_BITE; + int DMG_NUKE; + int DOT_BREATH; + int DOT_NUKE; + string EAT_TARGET; + int FB_COUNT; + string FIRE_ANG; + float FIRE_VEL; + float FREQ_SPECIAL; + string HEAD_ID; + int HORRORS_UP; + string IN_PIT_EDGE; + string LAST_SAW_TARGET; + string LAST_TARGET_SWITCH; + string LAST_TOUCHED_EDGE; + int MOVE_RANGE; + string MY_CL_IDX; + string NO_TURN; + int NPC_CAN_ATTACK; + string NPC_FWD_SPEED; + int NPC_HACKED_MOVE_SPEED; + string NPC_HOME_LOC; + int NPC_IS_BOSS; + string NPC_START_Z; + int RAISED_LEVEL; + string SMOKE_SPRITE; + string SOUND_BEAM1_FIRE; + string SOUND_BEAM1_WARMUP; + string SOUND_BEAM2_FIRE; + string SOUND_BEAM2_WARMUP; + string SOUND_BITE_HIT1; + string SOUND_BITE_HIT2; + string SOUND_BREATH_LOOP; + string SOUND_BREATH_START; + string SOUND_HITEDGE1; + string SOUND_HITEDGE2; + string SOUND_HITEDGE3; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_NUKE_WARMUP; + string SOUND_PRE_BITE1; + string SOUND_PRE_BITE2; + int SPEED_NORMAL; + string UNDI_ATTACK_TARGET; + int UNDI_MAX_HEIGHT; + string UNDI_MOVE_DEST; + + UndamaelMsc() + { + NPC_IS_BOSS = 1; + DMG_NUKE = 800; + DOT_BREATH = 40; + DOT_NUKE = 80; + DMG_BEAM1 = 1000; + DMG_BEAM2 = 100; + DMG_BITE = 80; + SPEED_NORMAL = 10; + FREQ_SPECIAL = 20.0; + SMOKE_SPRITE = "bigsmoke.spr"; + ANIM_BREATH = "Floor_Fidget_Pissed"; + DETECT_RANGE = 1024; + ATTACK_RANGE = 360; + ATTACK_ZRANGE = 80; + ATTACK_HITRANGE = 390; + MOVE_RANGE = 300; + ANIM_ATTACK = "Floor_Strike"; + SOUND_HITEDGE1 = "doors/doorstop5.wav"; + SOUND_HITEDGE2 = "doors/doorstop5.wav"; + SOUND_HITEDGE3 = "doors/doorstop5.wav"; + SOUND_BITE_HIT1 = "tentacle/te_strike1.wav"; + SOUND_BITE_HIT2 = "tentacle/te_strike2.wav"; + SOUND_BEAM1_WARMUP = "ambience/alienfazzle1.wav"; + SOUND_BEAM2_WARMUP = "x/x_teleattack1.wav"; + SOUND_PRE_BITE1 = "x/x_recharge1.wav"; + SOUND_PRE_BITE2 = "x/x_recharge2.wav"; + SOUND_IDLE1 = "tentacle/te_move1.wav"; + SOUND_IDLE2 = "tentacle/te_move2.wav"; + SOUND_BEAM1_FIRE = "x/x_ballattack1.wav"; + SOUND_BEAM2_FIRE = "debris/beamstart1.wav"; + SOUND_NUKE_WARMUP = "magic/spookie1.wav"; + SOUND_BREATH_LOOP = "magic/flame_loop.wav"; + SOUND_BREATH_START = "magic/flame_loop_start.wav"; + Precache("debris/pushbox1.wav"); + Precache("debris/pushbox2.wav"); + Precache("debris/pushbox3.wav"); + Precache("doors/doorstop5.wav"); + Precache("tentacle/te_strike1.wav"); + Precache("tentacle/te_strike2.wav"); + NPC_CAN_ATTACK = 0; + UNDI_MAX_HEIGHT = 600; + NPC_HACKED_MOVE_SPEED = 50; + } + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + if (!(NO_TURN)) + { + } + if (BEAM_WARM_UP == 1) + { + ClientEvent("update", "all", MY_CL_IDX, "eye_beam_prep_cl", GetEntityProperty(GetOwner(), "attachpos"), GetEntityProperty(GetOwner(), "attachpos")); + } + if (BEAM_WARM_UP == 2) + { + ClientEvent("update", "all", MY_CL_IDX, "eye_beam_prep_cl2", GetEntityProperty(GetOwner(), "attachpos"), GetEntityProperty(GetOwner(), "attachpos")); + } + if (BEAM_ENT != "BEAM_ENT") + { + Effect("beam", "update", BEAM_ENT, "color", Vector3(RandomInt(0, 255), RandomInt(0, 255), RandomInt(0, 255))); + } + if (UNDI_ATTACK_TARGET == "unset") + { + if (!(BEAM2_ON)) + { + } + string BOX_SCAN = /* TODO: $get_tbox */ $get_tbox("enemy", 1024, GetMonsterProperty("origin")); + LogDebug("scan_targets: BOX_SCAN"); + if (BOX_SCAN != "none") + { + string BOX_SCAN = /* TODO: $sort_entlist */ $sort_entlist(BOX_SCAN, "range"); + npcatk_settarget(GetToken(BOX_SCAN, 0, ";"), "scanned"); + } + if (UNDI_ATTACK_TARGET == "unset") + { + } + GetAllPlayers(PLAYER_LIST); + ScrambleTokens(PLAYER_LIST, ";"); + string TARG_ID = GetToken(PLAYER_LIST, 0, ";"); + string TARG_ORG = GetEntityOrigin(TARG_ID); + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_ORG = TraceLine(TRACE_START, TARG_ORG); + if (TRACE_ORG == TARG_ORG) + { + } + npcatk_settarget(TARG_ID, "scanned"); + } + if (UNDI_ATTACK_TARGET != "unset") + { + } + if (!(IsEntityAlive(UNDI_ATTACK_TARGET))) + { + my_target_died(); + } + string TARG_RANGE = GetEntityRange(UNDI_ATTACK_TARGET); + if (TARG_RANGE > DETECT_RANGE) + { + my_target_died(); + } + string CAN_SEE_TARG = CanSee(UNDI_ATTACK_TARGET, 1024); + if ((CAN_SET_TARG)) + { + LAST_SAW_TARGET = GetGameTime(); + LAST_SAW_TARGET += 10.0; + } + if (!(CAN_SEE_TARG)) + { + if (!(BEAM2_ON)) + { + } + string BOX_SCAN = /* TODO: $get_tbox */ $get_tbox("enemy", 1024); + if (BOX_SCAN != "none") + { + } + ScrambleTokens(BOX_SCAN, ";"); + npcatk_settarget(GetToken(BOX_SCAN, 0, ";"), "cant see"); + } + if (UNDI_ATTACK_TARGET != "unset") + { + } + string MY_ORG = GetMonsterProperty("origin"); + if (UNDI_MOVE_DEST == "unset") + { + string TARGET_ORG = GetEntityOrigin(UNDI_ATTACK_TARGET); + } + else + { + string TARGET_ORG = UNDI_MOVE_DEST; + } + string ANGLE_TO = /* TODO: $angles */ $angles(MY_ORG, TARGET_ORG); + if (UNDI_MOVE_DEST == "unset") + { + SetAngles("face"); + } + else + { + if (!(BEAM2_ON)) + { + } + string ATKTARGET_ORG = GetEntityOrigin(UNDI_ATTACK_TARGET); + string F_ANGLE = /* TODO: $angles */ $angles(MY_ORG, ATKTARGET_ORG); + SetAngles("face"); + } + string DEST_DIR = (TARGET_ORG - MY_ORG).Normalize(); + string V_SPEED = (DEST_DIR).z; + V_SPEED *= 8; + if ((BEAM2_ON)) + { + int V_SPEED = 0; + } + string DEST_LOC = MY_ORG; + string MY_FOOT_ORG = MY_ORG; + MY_FOOT_ORG = "z"; + float MY_DIST_2D = Distance(MY_FOOT_ORG, NPC_HOME_LOC); + string MY_YAW = GetMonsterProperty("angles.yaw"); + if ((MY_ORG).z > UNDI_MAX_HEIGHT) + { + if (V_SPEED > 0) + { + } + LogDebug("Too high!"); + int V_SPEED = -1; + } + if (!(IN_PIT_EDGE)) + { + DEST_LOC += /* TODO: $relpos */ $relpos(Vector3(0, ANGLE_TO, 0), Vector3(0, NPC_FWD_SPEED, V_SPEED)); + } + if ((IN_PIT_EDGE)) + { + string ANGLE_TO = /* TODO: $angles */ $angles(MY_FOOT_ORG, NPC_HOME_LOC); + DEST_LOC += /* TODO: $relpos */ $relpos(Vector3(0, ANGLE_TO, 0), Vector3(0, 5, V_SPEED)); + } + string TARGET_ORG_XY = TARGET_ORG; + TARGET_ORG_XY = "z"; + float TARG_DIST = Distance(MY_FOOT_ORG, TARGET_ORG_XY); + if (TARG_DIST > MOVE_RANGE) + { + NPC_FWD_SPEED = CUR_SPEED; + } + else + { + NPC_FWD_SPEED = -1; + } + if (GetGameTime() > LAST_TOUCHED_EDGE) + { + IN_PIT_EDGE = 0; + } + SetEntityOrigin(GetOwner(), DEST_LOC); + if ((NPC_CAN_ATTACK)) + { + } + if (GetEntityRange(UNDI_ATTACK_TARGET) < ATTACK_RANGE) + { + if (UNDI_MOVE_DEST == "unset") + { + } + string Z_DIFF = GetMonsterProperty("origin.z"); + string TARG_Z = GetEntityProperty(UNDI_ATTACK_TARGET, "origin.z"); + TARG_Z -= 38; + if (Z_DIFF >= TARG_Z) + { + } + Z_DIFF -= TARG_Z; + if (Z_DIFF < ATTACK_ZRANGE) + { + } + PlayAnim("once", ANIM_ATTACK); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(Random(1, 2)); + if (!(BEAM_SOUND_ON)) + { + } + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2 + array sounds = {SOUND_IDLE1, SOUND_IDLE2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_precache() + { + Precache("sfor/undamael_head"); + Precache("monsters/horror_fire"); + } + + void OnSpawn() override + { + SetName("undamael"); + SetName("Undamael"); + SetRace("undead"); + SetHealth(20000); + SetModel("monsters/undamael.mdl"); + SetIdleAnim("Pit_Idle"); + SetHearingSensitivity(11); + SetWidth(64); + SetHeight(64); + SetTurnRate(0.01); + SetSolid("trigger"); + SetRoam(false); + SetFly(true); + SetInvincible(true); + SetNoPush(true); + SetDamageResistance("fire", 0.0); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 3.0); + HORRORS_UP = 0; + ScheduleDelayedEvent(0.1, "init_beams"); + ClientEvent("new", "all", currentscript); + MY_CL_IDX = "game.script.last_sent_id"; + UNDI_ATTACK_TARGET = "unset"; + UNDI_MOVE_DEST = "unset"; + CUR_SPEED = SPEED_NORMAL; + ScheduleDelayedEvent(0.1, "npc_post_spawn"); + } + + void OnPostSpawn() override + { + adjust_footprint(); + CallExternal("all", "undamael_spawn"); + } + + void adjust_footprint() + { + string START_LOC = GetMonsterProperty("origin"); + START_LOC += "z"; + SetEntityOrigin(GetOwner(), START_LOC); + NPC_HOME_LOC = START_LOC; + NPC_START_Z = (NPC_HOME_LOC).z; + UNDI_MAX_HEIGHT += NPC_START_Z; + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (UNDI_ATTACK_TARGET == "unset") + { + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if (!(IsEntityAlive(UNDI_ATTACK_TARGET))) + { + npcatk_settarget(GetEntityIndex(LAST_HEARD), "heard"); + } + } + if (!(RAISED_LEVEL == 0)) return; + RAISED_LEVEL = 1; + ScheduleDelayedEvent(2.0, "raise_to_one"); + } + + void raise_to_one() + { + PlayAnim("critical", "rise_to_Temp1"); + } + + void mdl_rising() + { + if (!(RAISED_LEVEL == 1)) return; + PlayAnim("critical", "Temp1_to_Floor"); + SetIdleAnim("Floor_Idle"); + } + + void my_target_died() + { + EmitSound(GetOwner(), 0, "x/x_attack1.wav", 10); + UNDI_ATTACK_TARGET = "unset"; + } + + void mdl_pre_attack() + { + // PlayRandomSound from: SOUND_PRE_BITE1, SOUND_PRE_BITE2 + array sounds = {SOUND_PRE_BITE1, SOUND_PRE_BITE2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void mdl_attack() + { + if (GetEntityRange(UNDI_ATTACK_TARGET) < ATTACK_HITRANGE) + { + string TARG_ORG = GetEntityOrigin(UNDI_ATTACK_TARGET); + if ((IsValidPlayer(UNDI_ATTACK_TARGET))) + { + TARG_ORG += "z"; + } + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_TARG = TraceLine(TRACE_START, TARG_ORG); + DoDamage(TRACE_TARG, 384, DMG_BITE, 0.9, 0.5); + } + Effect("screenshake", GetEntityOrigin(GetOwner()), 256, 10, 1, 384); + // PlayRandomSound from: SOUND_BITE_HIT1, SOUND_BITE_HIT2, SOUND_BITE_HIT2, SOUND_BITE_HIT2, SOUND_BITE_HIT2 + array sounds = {SOUND_BITE_HIT1, SOUND_BITE_HIT2, SOUND_BITE_HIT2, SOUND_BITE_HIT2, SOUND_BITE_HIT2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + CallExternal(HEAD_ID, "ext_unsolid", 1.0); + if (!(EAT_ENABLED)) return; + if (!(GetGameTime() > NEXT_EAT)) return; + do_eat(); + } + + void ext_pitedge_touch() + { + LAST_TOUCHED_EDGE = GetGameTime(); + LAST_TOUCHED_EDGE += 1; + if (!(IN_PIT_EDGE)) + { + // PlayRandomSound from: SOUND_HITEDGE1, SOUND_HITEDGE2, SOUND_HITEDGE3 + array sounds = {SOUND_HITEDGE1, SOUND_HITEDGE2, SOUND_HITEDGE3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + IN_PIT_EDGE = 1; + LogDebug("pitedge_set_topuch game.time"); + } + + void mdl_raise_done() + { + NPC_CAN_ATTACK = 1; + } + + void npcatk_settarget() + { + LogDebug("npcatk_settarget GetEntityName(param1) PARAM2"); + if (!((HEAD_ID !is null))) + { + SpawnNPC("sfor/undamael_head", /* TODO: $relpos */ $relpos(0, 0, 64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + HEAD_ID = GetEntityIndex(m_hLastCreated); + start_cycles(); + } + if ((IsEntityAlive(UNDI_ATTACK_TARGET))) + { + if (param2 != "struck") + { + } + if (GetGameTime() < LAST_SAW_TARGET) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (UNDI_ATTACK_TARGET != "unset") + { + int EXIT_SUB = 1; + if (GetGameTime() > LAST_TARGET_SWITCH) + { + } + LAST_TARGET_SWITCH = GetGameTime(); + LAST_TARGET_SWITCH += 10.0; + int EXIT_SUB = 0; + } + if ((EXIT_SUB)) return; + if ((GetEntityProperty(param1, "scriptvar"))) return; + if (!(GetRelationship(param1) != "ally")) return; + if (!(IsEntityAlive(param1))) return; + if (!(GetRelationship(param1) == "enemy")) return; + if (!(GetEntityIndex(param1) != GetEntityIndex(GetOwner()))) return; + if (!(GetEntityIndex(param1) != HEAD_ID)) return; + if (!(GetEntityProperty(param1, "origin.z") > (NPC_HOME_LOC).z)) return; + UNDI_ATTACK_TARGET = param1; + } + + void ext_playanim() + { + PlayAnim("critical", param1); + SetIdleAnim(param1); + } + + void ext_noturn() + { + LogDebug("no_turn_set"); + if (!(NO_TURN)) + { + NO_TURN = 1; + } + else + { + NO_TURN = 0; + } + } + + void ext_test() + { + string Z_DIFF = GetMonsterProperty("origin.z"); + Z_DIFF -= GetEntityProperty(UNDI_ATTACK_TARGET, "origin.z"); + LogDebug("targz GetEntityProperty(UNDI_ATTACK_TARGET, "origin.z") vs. game.monster.origin.z = Z_DIFF"); + string Z_LEVEL = NPC_HOME_LOC; + string Z_DIFF = NPC_HOME_LOC; + Z_DIFF = "z"; + LogDebug("ver_height_from_home Distance(Z_LEVEL, Z_DIFF)"); + } + + void ext_beam_relink() + { + string NEAR_FOLK = FindEntitiesInSphere("enemy", 2048); + string N_FOLK = GetTokenCount(NEAR_FOLK, ";"); + N_FOLK -= 1; + int RND_TARG = RandomInt(0, N_FOLK); + string NEW_TARG = GetToken(NEAR_FOLK, RND_TARG, ";"); + Effect("beam", "update", BEAM_ENT, "start_target", NEW_TARG); + } + + void ext_beam_att() + { + BEAM_TARGET = param1; + BEAM_ATT1 = RandomInt(1, 3); + Effect("beam", "update", BEAM_EYE1, "brightness", 200); + Effect("beam", "update", BEAM_EYE1, "start_target", GetOwner(), BEAM_ATT1); + Effect("beam", "update", BEAM_EYE1, "end_target", BEAM_TARGET, 0); + ScheduleDelayedEvent(0.1, "ext_beam_att2"); + } + + void ext_beam_att2() + { + int BEAM_ATT2 = RandomInt(1, 3); + LogMessage(BEAM_TARGET + "ext_beam_att " + BEAM_ATT1 + BEAM_ATT2); + Effect("beam", "update", BEAM_EYE2, "brightness", 200); + Effect("beam", "update", BEAM_EYE2, "start_target", GetOwner(), BEAM_ATT2); + Effect("beam", "update", BEAM_EYE2, "end_target", BEAM_TARGET, 0); + } + + void ext_beam_remove() + { + Effect("beam", "update", BEAM_ENT, "remove", 0); + } + + void ext_beam_new() + { + Effect("beam", "ents", "blueflare1.spr", 10, UNDI_ATTACK_TARGET, 0, GetEntityIndex(GetOwner()), 2, Vector3(0, 0, 255), 200, 0, 1000); + BEAM_ENT = GetEntityIndex(m_hLastCreated); + } + + void start_cycles() + { + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + FREQ_SPECIAL("do_special"); + } + + void do_beam1() + { + if (GetEntityRange(UNDI_ATTACK_TARGET) < ATTACK_HITRANGE) + { + string TARGET_ORG = GetEntityOrigin(UNDI_ATTACK_TARGET); + UNDI_MOVE_DEST = /* TODO: $relpos */ $relpos(Vector3(0, TARG_ANG, 0), Vector3(0, 1000, 0)); + ScheduleDelayedEvent(5.0, "do_beam1_2"); + } + else + { + do_beam1_2(); + } + } + + void do_beam1_2() + { + UNDI_MOVE_DEST = "unset"; + CUR_SPEED = 1; + Effect("beam", "update", BEAM_EYE1, "noise", 60); + Effect("beam", "update", BEAM_EYE1, "color", Vector3(255, 255, 255)); + Effect("beam", "update", BEAM_EYE2, "noise", 60); + Effect("beam", "update", BEAM_EYE2, "color", Vector3(255, 255, 255)); + PlayAnim("critical", "Floor_Fidget_SmallRise"); + BEAM_WARM_UP = 1; + BEAM_SOUND_ON = 1; + EmitSound(GetOwner(), 1, SOUND_BEAM1_WARMUP, 10); + ScheduleDelayedEvent(2.0, "do_beam1_3"); + } + + void do_beam1_3() + { + BEAM_WARM_UP = 0; + BEAM_VOL = 10; + beam_sound_fade(); + string TARG_ORG = GetEntityOrigin(UNDI_ATTACK_TARGET); + string EYE_POS1 = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_TARG = TraceLine(EYE_POS1, TARG_ORG); + if (TRACE_TARG == TARG_ORG) + { + EmitSound(GetOwner(), 0, SOUND_BEAM1_FIRE, 10); + Effect("beam", "update", BEAM_EYE1, "end_target", UNDI_ATTACK_TARGET, 0); + Effect("beam", "update", BEAM_EYE2, "end_target", UNDI_ATTACK_TARGET, 0); + Effect("beam", "update", BEAM_EYE1, "brightness", 200); + Effect("beam", "update", BEAM_EYE2, "brightness", 200); + DoDamage(UNDI_ATTACK_TARGET, "direct", DMG_BEAM1, 1.0, GetOwner()); + AddVelocity(UNDI_ATTACK_TARGET, /* TODO: $relvel */ $relvel(-20, 800, 150)); + ScheduleDelayedEvent(2.0, "beams_off"); + } + CUR_SPEED = SPEED_NORMAL; + } + + void beam_sound_fade() + { + BEAM_VOL -= 1; + if (BEAM_VOL == 0) + { + BEAM_SOUND_ON = 0; + } + EmitSound(GetOwner(), 1, SOUND_BEAM1_WARMUP, BEAM_VOL); + if (BEAM_VOL > 0) + { + ScheduleDelayedEvent(0.2, "beam_sound_fade"); + } + } + + void beams_off() + { + Effect("beam", "update", BEAM_EYE1, "brightness", 0); + Effect("beam", "update", BEAM_EYE2, "brightness", 0); + } + + void init_beams() + { + Effect("beam", "ents", "blueflare1.spr", 100, GetOwner(), 2, GetOwner(), 2, Vector3(255, 255, 255), 0, 60, -1); + BEAM_EYE1 = GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(1.0, "init_beam2"); + } + + void init_beam2() + { + Effect("beam", "ents", "blueflare1.spr", 100, GetOwner(), 3, GetOwner(), 3, Vector3(255, 255, 255), 0, 60, -1); + BEAM_EYE2 = GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(1.0, "init_beam3"); + } + + void init_beam3() + { + Effect("beam", "vector", "laserbeam.spr", 30, GetEntityOrigin(GetOwner()), GetEntityOrigin(GetOwner()), Vector3(255, 0, 255), 0, 10, -1); + BEAM_EYE1_SEC = GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(1.0, "init_beam4"); + } + + void init_beam4() + { + Effect("beam", "vector", "laserbeam.spr", 30, GetEntityOrigin(GetOwner()), GetEntityOrigin(GetOwner()), Vector3(255, 0, 255), 0, 10, -1); + BEAM_EYE2_SEC = GetEntityIndex(m_hLastCreated); + } + + void client_activate() + { + int DO_NADDA = 1; + } + + void eye_beam_prep_cl() + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", param1, "setup_eye_sprite"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", param2, "setup_eye_sprite"); + } + + void eye_beam_prep_cl2() + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", param1, "setup_eye_sprite2"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", param2, "setup_eye_sprite2"); + } + + void eye_beam_fire() + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", param1, "setup_eye_fire"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", param2, "setup_eye_fire"); + } + + void eye_beam_green() + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", param1, "setup_eye_green"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", param2, "setup_eye_green"); + } + + void eye_breath_fire() + { + FIRE_ANG = param2; + ClientEffect("tempent", "sprite", "3dmflaora.spr", param1, "setup_fire_breath"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", param1, "setup_fire_breath"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", param1, "setup_fire_breath"); + ClientEffect("tempent", "sprite", "3dmflaora.spr", param1, "setup_fire_breath"); + } + + void setup_eye_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0.1); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 255, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.2, 0.1)); + ClientEffect("tempent", "set_current_prop", "collide", "world|die"); + } + + void setup_eye_sprite2() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 3); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0.1); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 255)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.2, 0.1)); + ClientEffect("tempent", "set_current_prop", "collide", "world|die"); + } + + void setup_eye_fire() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0.1); + ClientEffect("tempent", "set_current_prop", "scale", 3); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 0.01); + ClientEffect("tempent", "set_current_prop", "collide", "world|die"); + } + + void setup_eye_green() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 1); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0.1); + ClientEffect("tempent", "set_current_prop", "scale", 3); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(0, 255, 0)); + ClientEffect("tempent", "set_current_prop", "gravity", 0.01); + ClientEffect("tempent", "set_current_prop", "collide", "world|die"); + } + + void setup_fire_breath() + { + FIRE_VEL = Random(100, 500); + if (FIRE_ANG < 0) + { + if (FIRE_VEL > -179) + { + } + FIRE_VEL = Random(-500, -100); + } + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "angles", Vector3(0, FIRE_ANG, 0)); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-100, 100), FIRE_VEL, Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "fadeout", "lifetime"); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0.1); + ClientEffect("tempent", "set_current_prop", "scale", 3); + ClientEffect("tempent", "set_current_prop", "gravity", 0.01); + ClientEffect("tempent", "set_current_prop", "collide", "world|die"); + } + + void do_special() + { + int RND_SPECIAL = RandomInt(2, 6); + if (UNDI_ATTACK_TARGET == "unset") + { + int RND_SPECIAL = 0; + FREQ_SPECIAL = 10.0; + } + if ((AM_EATING)) + { + int RND_SPECIAL = 1; + FREQ_SPECIAL = 40.0; + } + if (RND_SPECIAL == 2) + { + if (HORRORS_UP >= 4) + { + FREQ_SPECIAL = 1.0; + } + if (HORRORS_UP < 4) + { + } + HORRORS_UP += 2; + FREQ_SPECIAL = 20.0; + do_horrors(); + } + if (RND_SPECIAL == 3) + { + do_beam1(); + FREQ_SPECIAL = 20.0; + } + if (RND_SPECIAL == 4) + { + do_beam2(); + FREQ_SPECIAL = 40.0; + } + if (RND_SPECIAL == 5) + { + do_nuke(); + FREQ_SPECIAL = 20.0; + } + if (RND_SPECIAL == 6) + { + do_breath_fire(); + FREQ_SPECIAL = 20.0; + } + FREQ_SPECIAL("do_special"); + } + + void do_beam2() + { + if (GetEntityRange(UNDI_ATTACK_TARGET) < 512) + { + string TARGET_ORG = GetEntityOrigin(UNDI_ATTACK_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + UNDI_MOVE_DEST = /* TODO: $relpos */ $relpos(Vector3(0, TARG_ANG, 0), Vector3(0, -1000, -256)); + ScheduleDelayedEvent(5.0, "do_beam2_2"); + } + else + { + do_beam2_2(); + } + } + + void do_beam2_2() + { + UNDI_MOVE_DEST = GetEntityOrigin(GetOwner()); + CUR_SPEED = 1; + PlayAnim("critical", "Floor_Fidget_SmallRise"); + BEAM_WARM_UP = 2; + BEAM_SOUND_ON = 1; + // svplaysound: svplaysound 1 10 SOUND_BEAM2_WARMUP + EmitSound(1, 10, SOUND_BEAM2_WARMUP); + ScheduleDelayedEvent(2.0, "do_beam2_init"); + } + + void do_beam2_init() + { + BEAM_WARM_UP = 0; + BEAM_COUNT = 0; + EmitSound(GetOwner(), 0, SOUND_BEAM2_FIRE, 10); + Effect("beam", "update", BEAM_EYE1_SEC, "brightness", 128); + Effect("beam", "update", BEAM_EYE2_SEC, "brightness", 128); + string MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + MY_YAW -= 35; + if (MY_YAW < 0) + { + MY_YAW += 359.99; + } + SetAngles("face"); + BEAM2_ON = 1; + ScheduleDelayedEvent(0.01, "do_beam2_cycle"); + } + + void do_beam2_cycle() + { + string MY_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + MY_YAW += 0.5; + if (MY_YAW > 359.99) + { + MY_YAW -= 359.99; + } + SetAngles("face"); + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + MY_Z += 64; + string HIS_Z = GetEntityProperty(UNDI_ATTACK_TARGET, "origin.z"); + string MY_ORG = GetEntityOrigin(GetOwner()); + if (MY_Z >= HIS_Z) + { + MY_ORG += "z"; + SetEntityOrigin(GetOwner(), MY_ORG); + } + else + { + if ((MY_ORG).z < UNDI_MAX_HEIGHT) + { + } + MY_ORG += "z"; + SetEntityOrigin(GetOwner(), MY_ORG); + } + string BEAM1_START = GetEntityProperty(GetOwner(), "attachpos"); + string BEAM2_START = GetEntityProperty(GetOwner(), "attachpos"); + string BEAM1_END = BEAM1_START; + string BEAM2_END = BEAM2_START; + BEAM1_END += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 1000, 0)); + BEAM2_END += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 1000, 0)); + string BEAM1_END = TraceLine(BEAM1_START, BEAM1_END); + string BEAM2_END = TraceLine(BEAM2_START, BEAM2_END); + Effect("beam", "update", BEAM_EYE1_SEC, "points", BEAM1_START, BEAM1_END); + Effect("beam", "update", BEAM_EYE2_SEC, "points", BEAM2_START, BEAM2_END); + XDoDamage(BEAM1_START, BEAM1_END, DMG_BEAM2, 1.0, GetOwner(), GetOwner(), "none", "dark"); + XDoDamage(BEAM2_START, BEAM2_END, DMG_BEAM2, 1.0, GetOwner(), GetOwner(), "none", "dark"); + BEAM_COUNT += 1; + if (BEAM_COUNT == 120) + { + do_beam2_end(); + } + else + { + ScheduleDelayedEvent(0.1, "do_beam2_cycle"); + } + } + + void do_beam2_end() + { + BEAM2_ON = 0; + UNDI_MOVE_DEST = "unset"; + CUR_SPEED = SPEED_NORMAL; + Effect("beam", "update", BEAM_EYE1_SEC, "brightness", 0); + Effect("beam", "update", BEAM_EYE2_SEC, "brightness", 0); + // svplaysound: svplaysound 1 0 SOUND_BEAM2_WARMUP + EmitSound(1, 0, SOUND_BEAM2_WARMUP); + } + + void do_nuke() + { + if (GetEntityRange(UNDI_ATTACK_TARGET) < 512) + { + string TARGET_ORG = GetEntityOrigin(UNDI_ATTACK_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + UNDI_MOVE_DEST = /* TODO: $relpos */ $relpos(Vector3(0, TARG_ANG, 0), Vector3(0, -1000, -256)); + ScheduleDelayedEvent(5.0, "do_nuke_warmup"); + EmitSound(GetOwner(), 0, SOUND_NUKE_WARMUP, 10); + } + else + { + do_nuke_warmup(); + } + } + + void do_nuke_warmup() + { + UNDI_MOVE_DEST = GetEntityOrigin(GetOwner()); + PlayAnim("critical", "Floor_Fidget_SmallRise"); + ClientEvent("update", "all", MY_CL_IDX, "eye_beam_fire", GetEntityProperty(GetOwner(), "attachpos"), GetEntityProperty(GetOwner(), "attachpos")); + EmitSound(GetOwner(), 0, SOUND_NUKE_WARMUP, 10); + ScheduleDelayedEvent(2.0, "do_nuke_fire"); + } + + void do_nuke_fire() + { + UNDI_MOVE_DEST = "unset"; + CallExternal(FindEntityByName("head_undi"), "do_nuke", UNDI_ATTACK_TARGET, DMG_NUKE); + } + + void do_breath_fire() + { + UNDI_MOVE_DEST = GetEntityOrigin(GetOwner()); + PlayAnim("critical", ANIM_BREATH); + FB_COUNT = 0; + ScheduleDelayedEvent(0.1, "do_breath_fire_loop"); + BREATH_VOL = 10; + EmitSound(GetOwner(), 1, SOUND_BREATH_LOOP, 10); + EmitSound(GetOwner(), 0, SOUND_BREATH_START, 10); + } + + void do_breath_fire_loop() + { + FB_COUNT += 1; + if (FB_COUNT == 60) + { + breath_sound_fade(); + UNDI_MOVE_DEST = "unset"; + } + if (!(FB_COUNT < 60)) return; + ScheduleDelayedEvent(0.1, "do_breath_fire_loop"); + PlayAnim("once", ANIM_BREATH); + BREATH_ORG = GetEntityProperty(GetOwner(), "attachpos"); + ClientEvent("update", "all", MY_CL_IDX, "eye_breath_fire", BREATH_ORG, GetEntityProperty(GetOwner(), "angles.yaw")); + if (FB_COUNT == 5) + { + burn_inbox(); + } + if (FB_COUNT == 25) + { + burn_inbox(); + } + if (FB_COUNT == 45) + { + burn_inbox(); + } + if (FB_COUNT == 55) + { + burn_inbox(); + } + } + + void burn_inbox() + { + BURN_BOX = /* TODO: $get_tbox */ $get_tbox("enemy", 512, BREATH_ORG); + LogDebug("burn_inbox BURN_BOX"); + if (!(BURN_BOX != "none")) return; + for (int i = 0; i < GetTokenCount(BURN_BOX, ";"); i++) + { + burn_targets_in_cone(); + } + } + + void burn_targets_in_cone() + { + string BURN_TARG = GetToken(BURN_BOX, i, ";"); + string TARG_ORG = GetEntityOrigin(BURN_TARG); + string MY_ANG = GetEntityAngles(GetOwner()); + string IN_CONE = /* TODO: $within_cone */ $within_cone(TARG_ORG, BREATH_ORG, MY_ANG, 45); + if (!(IN_CONE)) return; + if (!(Distance(BREATH_ORG, TARG_ORG) < 512)) return; + if (!(TraceLine(BREATH_ORG, TARG_ORG) == TARG_ORG)) return; + ApplyEffect(BURN_TARG, "effects/dot_fire", 10, GetEntityIndex(GetOwner()), DOT_BREATH); + } + + void breath_sound_fade() + { + BREATH_VOL -= 1; + EmitSound(GetOwner(), 1, SOUND_BREATH_LOOP, BREATH_VOL); + if (BREATH_VOL > 0) + { + ScheduleDelayedEvent(0.2, "breath_sound_fade"); + } + } + + void horror_died() + { + HORRORS_UP -= 1; + LogDebug("horror_died HORRORS_UP"); + } + + void do_horrors() + { + if (GetEntityRange(UNDI_ATTACK_TARGET) < 512) + { + string TARGET_ORG = GetEntityOrigin(UNDI_ATTACK_TARGET); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + UNDI_MOVE_DEST = /* TODO: $relpos */ $relpos(Vector3(0, TARG_ANG, 0), Vector3(0, -1000, -256)); + ScheduleDelayedEvent(5.0, "do_horrors_summon"); + } + else + { + do_horrors_summon(); + } + } + + void do_horrors_summon() + { + PlayAnim("critical", "Engine_Idle"); + EmitSound(GetOwner(), 0, SOUND_PRE_SUMMON, 10); + ClientEvent("update", "all", MY_CL_IDX, "eye_beam_green", GetEntityProperty(GetOwner(), "attachpos"), GetEntityProperty(GetOwner(), "attachpos")); + ScheduleDelayedEvent(1.0, "make_horror1"); + ScheduleDelayedEvent(1.1, "make_horror2"); + } + + void make_horror1() + { + SpawnNPC("monsters/horror_fire", /* TODO: $relpos */ $relpos(-100, 0, 64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + + void make_horror2() + { + UNDI_MOVE_DEST = "unset"; + SpawnNPC("monsters/horror_fire", /* TODO: $relpos */ $relpos(100, 0, 64), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + } + + void do_eat() + { + UNDI_MOVE_DEST = START_LOC; + PlayAnim("critical", "tentacle_grab"); + EAT_TARGET = UNDI_ATTACK_TARGET; + AM_EATING = 1; + EmitSound(GetOwner(), 0, "barnacle/bcl_chew1.wav", 10); + ScheduleDelayedEvent(0.1, "eat_loop"); + ScheduleDelayedEvent(3.0, "eat_sound"); + ScheduleDelayedEvent(6.0, "eat_done"); + } + + void eat_sound() + { + EmitSound(GetOwner(), 0, "barnacle/bcl_chew2.wav", 10); + } + + void eat_loop() + { + if (!(AM_EATING)) return; + SetEntityOrigin(EAT_TARGET, GetEntityProperty(GetOwner(), "attachpos")); + PlayAnim("once", "tentacle_grab"); + ScheduleDelayedEvent(0.1, "eat_loop"); + } + + void eat_done() + { + UNDI_MOVE_DEST = "unset"; + AM_EATING = 0; + PlayAnim("critical", "rise_to_Temp1"); + } + + void death_sequence() + { + SetIdleAnim("Engine_death2"); + PlayAnim("critical", "Engine_death2"); + EmitSound(GetOwner(), 0, SOUND_DEATH, 10); + Effect("screenshake", GetEntityOrigin(GetOwner()), 256, 10, 20.0, 1024); + ScheduleDelayedEvent(1.0, "reward_victor"); + ScheduleDelayedEvent(5.0, "remove_me"); + } + + void reward_victor() + { + if (!(StringToLower(GetMapName()) == "sfor")) return; + string SWORD_ORIGIN = GetEntityOrigin(GetOwner()); + z += SWORD_ORIGIN; + CallExternal(GAME_MASTER, "undamael_reward_victor", SWORD_ORIGIN); + } + + void remove_me() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/sfor/wizard1.as b/scripts/angelscript/sfor/wizard1.as new file mode 100644 index 00000000..3422347c --- /dev/null +++ b/scripts/angelscript/sfor/wizard1.as @@ -0,0 +1,474 @@ +#pragma context server + +#include "monsters/base_chat.as" + +namespace MS +{ + +class Wizard1 : CGameScript +{ + string BEAM_SET; + float CHAT_DELAY; + float CHAT_DELAY_LONG; + float CHAT_DELAY_SHORT; + string CONV_ANIMS; + int DID_INTRO; + int DID_WARN; + int HAS_SYMBOL; + string MY_CL_IDX; + int NO_JOB; + int NO_RUMOR; + string N_PLAYERS; + int N_SYMBOLS; + int OMG_WTF; + float REMOVE_DELAY; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_DEATH3; + string SOUND_DEATH4; + string SYMB_ITEM; + string SYM_QUEST_NAME; + int UNDI_SPAWN; + string WIZARD2_ID; + string WIZARD3_ID; + string WIZARD4_ID; + string WIZARD5_ID; + + Wizard1() + { + CONV_ANIMS = "converse2;converse1;talkleft;talkright;lean;pondering;pondering2;pondering3;"; + SYM_QUEST_NAME = "sym1"; + CHAT_DELAY = 5.0; + CHAT_DELAY_SHORT = 3.0; + CHAT_DELAY_LONG = 7.0; + NO_RUMOR = 1; + NO_JOB = 1; + SYMB_ITEM = "item_s1"; + SOUND_DEATH1 = "scientist/scream1.wav"; + SOUND_DEATH2 = "scientist/scream2.wav"; + SOUND_DEATH3 = "scientist/scream3.wav"; + SOUND_DEATH4 = "scientist/scream4.wav"; + } + + void OnSpawn() override + { + SetName("wizard1"); + SetName("Brother Unum"); + SetRace("human"); + SetHealth(60); + SetModel("npc/balancepriest2.mdl"); + SetWidth(32); + SetHeight(48); + SetSayTextRange(1024); + SetIdleAnim("idle1"); + PlayAnim("once", "idle1"); + SetBlind(true); + CatchSpeech("say_hi", "Hail"); + N_SYMBOLS = 0; + BEAM_SET = ""; + ScheduleDelayedEvent(4.0, "scan_for_players"); + ScheduleDelayedEvent(3.0, "gather_wizard_ids"); + } + + void gather_wizard_ids() + { + WIZARD2_ID = FindEntityByName("wizard2"); + WIZARD3_ID = FindEntityByName("wizard3"); + WIZARD4_ID = FindEntityByName("wizard4"); + WIZARD5_ID = FindEntityByName("wizard5"); + ScheduleDelayedEvent(0.1, "init_beams"); + } + + void scan_for_players() + { + if ((DID_INTRO)) return; + ScheduleDelayedEvent(1.0, "scan_for_players"); + string T_BOX = /* TODO: $get_tbox */ $get_tbox("player", 512); + if (!(T_BOX != "none")) return; + string T_BOX = /* TODO: $sort_entlist */ $sort_entlist(T_BOX, "range"); + string TARG_ID = GetToken(T_BOX, 0, ";"); + string TARG_ORG = GetEntityOrigin(TARG_ID); + string TARG_TRACE = TraceLine(GetMonsterProperty("origin"), TARG_ORG); + if (!(TARG_TRACE == TARG_ORG)) return; + DID_INTRO = 1; + do_intro(); + } + + void do_intro() + { + if (!(DID_INTRO < 2)) return; + DID_INTRO = 2; + N_PLAYERS = GetPlayerCount(); + if (N_PLAYERS > 1) + { + SayText("By the... How d they d get in here?"); + } + else + { + SayText("By the beard of Urdual... How d he get in here?"); + } + convo_anim(); + CHAT_DELAY("do_intro2"); + } + + void do_intro2() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD2_ID, "anim_text", "I warned you the seals were failing."); + CHAT_DELAY_SHORT("do_intro3"); + } + + void do_intro3() + { + if ((OMG_WTF)) return; + SayText("Brother Tress, did not you destroy the bridge?"); + convo_anim(); + CHAT_DELAY_SHORT("do_intro4"); + } + + void do_intro4() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD3_ID, "anim_text", "Yes, but that alone would hardly stop an intrepid explorer who could brave The Dark Forest."); + CHAT_DELAY("do_intro5"); + } + + void do_intro5() + { + if ((OMG_WTF)) return; + SayText("...then what of the door?"); + convo_anim(); + CHAT_DELAY_SHORT("do_intro6"); + } + + void do_intro6() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD4_ID, "anim_text", "May I remind you, brother Unum, we've been here, maintaining this seal, for over two hundred years now?"); + CHAT_DELAY("do_intro7"); + } + + void do_intro7() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD5_ID, "anim_text", "Yes, between the negative energy of the forest, and the rust... I'd surprised if it were still there."); + CHAT_DELAY("do_intro8"); + } + + void do_intro8() + { + if ((OMG_WTF)) return; + if (N_PLAYERS > 1) + { + SayText("Well , none of them appear to be our apprentices. Perhaps they bring news?"); + } + else + { + SayText("Well , he doesn t appear to be one of our apprentices. Perhaps he brings news?"); + } + convo_anim(); + } + + void say_hi() + { + OMG_WTF = 0; + if ((UNDI_SPAWN)) return; + SayText("Umm... Hello young lad. We five wizards are The Bretheren of Zahlon."); + convo_anim(); + CHAT_DELAY("say_hi2"); + CallExternal("players", "ext_set_fquest"); + } + + void say_hi2() + { + if ((OMG_WTF)) return; + SayText("This chamber was once the meeting place of Undamael and his minions."); + convo_anim(); + CHAT_DELAY("say_hi3"); + } + + void say_hi3() + { + if ((OMG_WTF)) return; + SayText("It was an arena of sorts , where Undamael would judge enemies which his forces had captured."); + convo_anim(); + CHAT_DELAY("say_hi4"); + } + + void say_hi4() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD4_ID, "anim_text", "You mean where he would EAT them, as his minions looked on."); + CHAT_DELAY("say_hi5"); + } + + void say_hi5() + { + if ((OMG_WTF)) return; + SayText("Umm , yes , quite , brother Quatra. *cough* In anycase , while the armies of elvenkind were combatting Lor Malgoriand s forces outside..."); + convo_anim(); + CHAT_DELAY_LONG("say_hi6"); + } + + void say_hi6() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD3_ID, "anim_text", "We were here, sealing Undamael, the right hand of Lor Malgoriand, in his pit."); + CHAT_DELAY("say_hi7"); + } + + void say_hi7() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD2_ID, "anim_text", "Unfortunately, we could only seal him, not defeat him, with what power we have."); + CHAT_DELAY("say_hi8"); + } + + void say_hi8() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD5_ID, "anim_text", "Even then, we cannot hold him forever."); + CHAT_DELAY_SHORT("say_hi9"); + } + + void say_hi9() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD4_ID, "anim_text", "You see, our apprentices were supposed to bring us five symbols of power, forged by the Felewyn priestesses."); + CHAT_DELAY_LONG("say_hi10"); + } + + void say_hi10() + { + if ((OMG_WTF)) return; + SayText("Sadly, we can only assume our apprentices were slain during the war."); + convo_anim(); + CHAT_DELAY("say_hi11"); + } + + void say_hi11() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD3_ID, "anim_text", "In which case, the symbols would now be in the hands of the remains of Lor Malgoriand's armies."); + CHAT_DELAY_LONG("say_hi12"); + } + + void say_hi12() + { + if ((OMG_WTF)) return; + if (GetPlayerCount() > 1) + { + SayText("You seem strong warriors. If you could bring us those symbols, we could put an end to Lord Undamael's evil once and for all."); + } + if (GetPlayerCount() == 1) + { + SayText("You seem a strong warrior. If you could bring us those symbols, we could put an end to Lord Undamael's evil once and for all."); + } + convo_anim(); + CHAT_DELAY_LONG("say_hi13"); + } + + void say_hi13() + { + if ((OMG_WTF)) return; + SayText("Even weakened by the power of the symbols, Lord Undamael will still be a force to be feared."); + convo_anim(); + CHAT_DELAY("say_hi14"); + } + + void say_hi14() + { + if ((OMG_WTF)) return; + CallExternal(WIZARD5_ID, "anim_text", "Indeed, it will take the most powerful warriors in the land to defeat him, even in his weakened state."); + CHAT_DELAY_LONG("say_hi15"); + } + + void say_hi15() + { + if ((OMG_WTF)) return; + SayText("Please, go forth and seek - return to us the symbols of Felewyn and bring great warriors, that we may bring an end to this evil!"); + convo_anim(); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((UNDI_SPAWN)) return; + OMG_WTF = 1; + if ((DID_WARN)) return; + DID_WARN = 1; + SayText("What sort of maniac are you!? If any one of us dies Undamael will be freed!"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_DEATH1, SOUND_DEATH2, SOUND_DEATH3, SOUND_DEATH4 + array sounds = {SOUND_DEATH1, SOUND_DEATH2, SOUND_DEATH3, SOUND_DEATH4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((UNDI_SPAWN)) return; + UseTrigger("mm_undi_spawn"); + UNDI_SPAWN = 1; + REMOVE_DELAY = 0.5; + remove_beams(); + CallExternal(WIZARD2_ID, "do_oshi"); + CallExternal(WIZARD3_ID, "do_oshi"); + CallExternal(WIZARD4_ID, "do_oshi"); + CallExternal(WIZARD5_ID, "do_oshi"); + SetIdleAnim("crouch_idle"); + PlayAnim("once", "crouch_idle"); + } + + void wizard_died() + { + if ((UNDI_SPAWN)) return; + UseTrigger("mm_undi_spawn"); + UNDI_SPAWN = 1; + REMOVE_DELAY = 0.5; + remove_beams(); + CallExternal(WIZARD2_ID, "do_oshi"); + CallExternal(WIZARD3_ID, "do_oshi"); + CallExternal(WIZARD4_ID, "do_oshi"); + CallExternal(WIZARD5_ID, "do_oshi"); + SetIdleAnim("crouch_idle"); + PlayAnim("once", "crouch_idle"); + } + + void game_menu_getoptions() + { + if ((HAS_SYMBOL)) return; + if (!(/* TODO: $get_scriptflag */ $get_scriptflag(param1, "fwarn", "type_exists"))) + { + SetScriptFlags(param1, "add", "fwarn", "fwarn"); + ShowHelpTip(param1, "generic", "One Time Quest", "The Felwyn Shard quest can only be completed one time per character."); + } + if ((ItemExists(param1, SYMB_ITEM))) + { + string reg.mitem.title = "Offer the first symbol"; + string reg.mitem.type = "payment"; + string reg.mitem.data = SYMB_ITEM; + string reg.mitem.callback = "add_symbol_me"; + } + else + { + string reg.mitem.title = "Offer the first symbol"; + string reg.mitem.type = "disabled"; + string reg.mitem.callback = "none"; + } + } + + void add_symbol_me() + { + SayText("Thank you. Remember we ll need all five at the same time."); + HAS_SYMBOL = 1; + add_symbol(); + SetIdleAnim("kneel_idle"); + SetMoveAnim("kneel_idle"); + PlayAnim("critical", "kneel"); + } + + void add_symbol() + { + N_SYMBOLS += 1; + if (!(N_SYMBOLS == 5)) return; + start_spell(); + } + + void init_beams() + { + Effect("beam", "ents", "lgtning.spr", 100, GetEntityIndex(GetOwner()), 1, WIZARD3_ID, 1, Vector3(255, 0, 0), 200, 10, -1); + if (BEAM_SET.length() > 0) BEAM_SET += ";"; + BEAM_SET += GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(0.5, "init_beam2"); + } + + void init_beam2() + { + Effect("beam", "ents", "lgtning.spr", 100, WIZARD3_ID, 1, WIZARD5_ID, 1, Vector3(255, 0, 0), 200, 10, -1); + if (BEAM_SET.length() > 0) BEAM_SET += ";"; + BEAM_SET += GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(0.5, "init_beam3"); + } + + void init_beam3() + { + Effect("beam", "ents", "lgtning.spr", 100, WIZARD5_ID, 1, WIZARD2_ID, 1, Vector3(255, 0, 0), 200, 10, -1); + if (BEAM_SET.length() > 0) BEAM_SET += ";"; + BEAM_SET += GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(0.5, "init_beam4"); + } + + void init_beam4() + { + Effect("beam", "ents", "lgtning.spr", 100, WIZARD2_ID, 1, WIZARD4_ID, 1, Vector3(255, 0, 0), 200, 10, -1); + if (BEAM_SET.length() > 0) BEAM_SET += ";"; + BEAM_SET += GetEntityIndex(m_hLastCreated); + ScheduleDelayedEvent(0.5, "init_beam5"); + } + + void init_beam5() + { + Effect("beam", "ents", "lgtning.spr", 100, WIZARD4_ID, 0, GetEntityIndex(GetOwner()), 1, Vector3(255, 0, 0), 200, 10, -1); + if (BEAM_SET.length() > 0) BEAM_SET += ";"; + BEAM_SET += GetEntityIndex(m_hLastCreated); + } + + void remove_beams() + { + for (int i = 0; i < GetTokenCount(BEAM_SET, ";"); i++) + { + remove_beams_loop(); + } + } + + void remove_beams_loop() + { + Effect("beam", "update", GetToken(BEAM_SET, i, ";"), "remove", REMOVE_DELAY); + } + + void start_spell() + { + MY_CL_IDX = "game.script.last_sent_id"; + SetGlobalVar("G_UNDAMAEL_VULNERABLE", 1); + ScheduleDelayedEvent(0.1, "color_beams"); + UNDI_SPAWN = 1; + ScheduleDelayedEvent(1.0, "splodie_fx"); + UseTrigger("mm_undi_fx"); + } + + void color_beams() + { + for (int i = 0; i < GetTokenCount(BEAM_SET, ";"); i++) + { + color_beams_loop(); + } + } + + void color_beams_loop() + { + Effect("beam", "update", GetToken(BEAM_SET, i, ";"), "color", Vector3(0, 255, 0)); + Effect("beam", "update", GetToken(BEAM_SET, i, ";"), "remove", 10.0); + } + + void splodie_fx() + { + UseTrigger("mm_undi_spawn"); + ScheduleDelayedEvent(0.1, "remove_us"); + } + + void remove_us() + { + CallExternal(WIZARD2_ID, "fade_away"); + CallExternal(WIZARD3_ID, "fade_away"); + CallExternal(WIZARD4_ID, "fade_away"); + CallExternal(WIZARD5_ID, "fade_away"); + SayText("That s the last of our power - it is up to you to defeat him now. Aim for the horn atop his head! That s his weak point!"); + ScheduleDelayedEvent(0.1, "fade_away"); + } + + void fade_away() + { + DeleteEntity(GetOwner(), true); // fade out + } + +} + +} diff --git a/scripts/angelscript/sfor/wizard2.as b/scripts/angelscript/sfor/wizard2.as new file mode 100644 index 00000000..b3c7aa02 --- /dev/null +++ b/scripts/angelscript/sfor/wizard2.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "sfor/wizard_base.as" + +namespace MS +{ + +class Wizard2 : CGameScript +{ + string SAYTEXT_GOT_SYMBOL; + string SYMB_ITEM; + string SYMB_ITEM_NAME; + string SYM_QUEST_NAME; + + Wizard2() + { + SetName("Brother Duae"); + SetName("wizard2"); + SYMB_ITEM = "item_s2"; + SYMB_ITEM_NAME = "the second symbol"; + SAYTEXT_GOT_SYMBOL = "Thank you, there may yet be hope to end this."; + SYM_QUEST_NAME = "sym2"; + } + +} + +} diff --git a/scripts/angelscript/sfor/wizard3.as b/scripts/angelscript/sfor/wizard3.as new file mode 100644 index 00000000..b0e59c76 --- /dev/null +++ b/scripts/angelscript/sfor/wizard3.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "sfor/wizard_base.as" + +namespace MS +{ + +class Wizard3 : CGameScript +{ + string SAYTEXT_GOT_SYMBOL; + string SYMB_ITEM; + string SYMB_ITEM_NAME; + string SYM_QUEST_NAME; + + Wizard3() + { + SetName("Brother Tress"); + SetName("wizard3"); + SYMB_ITEM = "item_s3"; + SYMB_ITEM_NAME = "the third symbol"; + SAYTEXT_GOT_SYMBOL = "Remember, it will take the last of our energies to cast this spell, when the dark one comes we will not be here to assist you."; + SYM_QUEST_NAME = "sym3"; + } + +} + +} diff --git a/scripts/angelscript/sfor/wizard4.as b/scripts/angelscript/sfor/wizard4.as new file mode 100644 index 00000000..64f96334 --- /dev/null +++ b/scripts/angelscript/sfor/wizard4.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "sfor/wizard_base.as" + +namespace MS +{ + +class Wizard4 : CGameScript +{ + string SAYTEXT_GOT_SYMBOL; + string SYMB_ITEM; + string SYMB_ITEM_NAME; + string SYM_QUEST_NAME; + + Wizard4() + { + SetName("Brother Quatra"); + SetName("wizard4"); + SYMB_ITEM = "item_s4"; + SYMB_ITEM_NAME = "the forth symbol"; + SAYTEXT_GOT_SYMBOL = "When the beast comes, aim for the horn atop his head."; + SYM_QUEST_NAME = "sym4"; + } + +} + +} diff --git a/scripts/angelscript/sfor/wizard5.as b/scripts/angelscript/sfor/wizard5.as new file mode 100644 index 00000000..7ede0119 --- /dev/null +++ b/scripts/angelscript/sfor/wizard5.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "sfor/wizard_base.as" + +namespace MS +{ + +class Wizard5 : CGameScript +{ + string SAYTEXT_GOT_SYMBOL; + string SYMB_ITEM; + string SYMB_ITEM_NAME; + string SYM_QUEST_NAME; + + Wizard5() + { + SetName("Brother Quinas"); + SetName("wizard5"); + SYMB_ITEM = "item_s5"; + SYMB_ITEM_NAME = "the fifth symbol"; + SAYTEXT_GOT_SYMBOL = "It is good you arrived when you did, I've my doubts we could hold this gate shut much longer."; + SYM_QUEST_NAME = "sym5"; + } + +} + +} diff --git a/scripts/angelscript/sfor/wizard_base.as b/scripts/angelscript/sfor/wizard_base.as new file mode 100644 index 00000000..4fc122b4 --- /dev/null +++ b/scripts/angelscript/sfor/wizard_base.as @@ -0,0 +1,116 @@ +#pragma context server + +namespace MS +{ + +class WizardBase : CGameScript +{ + string CONV_ANIMS; + int DID_WARN; + int HAS_SYMBOL; + string SOUND_DEATH1; + string SOUND_DEATH2; + string SOUND_DEATH3; + string SOUND_DEATH4; + + WizardBase() + { + CONV_ANIMS = "converse2;converse1;talkleft;talkright;lean;pondering;pondering2;pondering3;"; + SOUND_DEATH1 = "scientist/scream1.wav"; + SOUND_DEATH2 = "scientist/scream2.wav"; + SOUND_DEATH3 = "scientist/scream3.wav"; + SOUND_DEATH4 = "scientist/scream4.wav"; + } + + void OnSpawn() override + { + SetRace("human"); + SetHealth(60); + SetModel("npc/balancepriest2.mdl"); + SetWidth(32); + SetHeight(72); + SetSayTextRange(1024); + SetIdleAnim("idle1"); + PlayAnim("once", "idle1"); + SetBlind(true); + SetMenuAutoOpen(1); + } + + void anim_text() + { + if (!(AM_KNEELING)) + { + string N_ANIMS = GetTokenCount(CONV_ANIMS, ";"); + N_ANIMS -= 1; + int RND_ANIM = RandomInt(0, N_ANIMS); + PlayAnim("critical", GetToken(CONV_ANIMS, RND_ANIM, ";")); + } + SayText(param1); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (!(IsValidPlayer(m_hLastStruck))) return; + if ((DID_WARN)) return; + DID_WARN = 1; + SayText("What sort of maniac are you!? If any one of us dies Undamael will be freed!"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_DEATH1, SOUND_DEATH2, SOUND_DEATH3, SOUND_DEATH4 + array sounds = {SOUND_DEATH1, SOUND_DEATH2, SOUND_DEATH3, SOUND_DEATH4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + CallExternal(FindEntityByName("wizard1"), "wizard_died"); + } + + void game_menu_getoptions() + { + if ((HAS_SYMBOL)) return; + if ((ItemExists(param1, SYMB_ITEM))) + { + string reg.mitem.title = "Offer "; + string reg.mitem.type = "payment"; + string reg.mitem.data = SYMB_ITEM; + string reg.mitem.callback = "got_symbol"; + } + else + { + string reg.mitem.title = "Offer "; + string reg.mitem.type = "disabled"; + } + } + + void got_symbol() + { + HAS_SYMBOL = 1; + string WIZ_ID = FindEntityByName("wizard1"); + if (GetEntityProperty(WIZ_ID, "scriptvar") < 1) + { + SayText("Thank you. Remember we ll need all five at the same time."); + } + else + { + SayText(SAYTEXT_GOT_SYMBOL); + } + SetIdleAnim("kneel_idle"); + SetMoveAnim("kneel_idle"); + PlayAnim("critical", "kneel"); + CallExternal(WIZ_ID, "add_symbol"); + } + + void fade_away() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void do_oshi() + { + if (!(IsEntityAlive(GetOwner()))) return; + SetIdleAnim("crouch_idle"); + PlayAnim("once", "crouch_idle"); + } + +} + +} diff --git a/scripts/angelscript/sfor/wizard_center.as b/scripts/angelscript/sfor/wizard_center.as new file mode 100644 index 00000000..c479fa02 --- /dev/null +++ b/scripts/angelscript/sfor/wizard_center.as @@ -0,0 +1,30 @@ +#pragma context server + +namespace MS +{ + +class WizardCenter : CGameScript +{ + void OnSpawn() override + { + ScheduleDelayedEvent(1.0, "set_spawn_point"); + SetFly(true); + SetGravity(0); + } + + void set_center_point() + { + string MY_LOC = GetEntityOrigin(GetOwner()); + MY_LOC = "z"; + CallExternal(GAME_MASTER, "set_wizard_center", MY_LOC); + ScheduleDelayedEvent(1.0, "remove_me"); + } + + void remove_me() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/sfor/wizard_cl.as b/scripts/angelscript/sfor/wizard_cl.as new file mode 100644 index 00000000..c311e91b --- /dev/null +++ b/scripts/angelscript/sfor/wizard_cl.as @@ -0,0 +1,77 @@ +#pragma context client + +namespace MS +{ + +class WizardCl : CGameScript +{ + int FOUNTAIN_ACTIVE; + int FOUNTAIN_MODE; + string SPRITE_CENTER; + + void OnRepeatTimer() + { + SetRepeatDelay(0.1); + if ((FOUNTAIN_ACTIVE)) + { + } + if (FOUNTAIN_MODE == 1) + { + ClientEffect("tempent", "sprite", "3dmflaora.spr", SPRITE_CENTER, "glow_sprite"); + } + if (FOUNTAIN_MODE == 2) + { + ClientEffect("tempent", "sprite", "glow01.spr", SPRITE_CENTER, "explode_sprite"); + ClientEffect("tempent", "sprite", "glow01.spr", SPRITE_CENTER, "explode_sprite"); + ClientEffect("tempent", "sprite", "glow01.spr", SPRITE_CENTER, "explode_sprite"); + } + } + + void client_activate() + { + SPRITE_CENTER = param1; + FOUNTAIN_ACTIVE = 1; + FOUNTAIN_MODE = 1; + } + + void do_explode() + { + FOUNTAIN_MODE = 2; + ScheduleDelayedEvent(3.0, "remove_script"); + } + + void glow_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-200, 200), Random(-200, 200), Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 1); + ClientEffect("tempent", "set_current_prop", "gravity", Random(-1.1, -1.6)); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 128, 128)); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + } + + void explode_sprite() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 20); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-200, 200), Random(-200, 200), Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", 3); + ClientEffect("tempent", "set_current_prop", "gravity", 0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "color", Vector3(255, 255, 255)); + } + + void remove_script() + { + RemoveScript(); + } + +} + +} diff --git a/scripts/angelscript/shender_east/burning_one.as b/scripts/angelscript/shender_east/burning_one.as new file mode 100644 index 00000000..bce280db --- /dev/null +++ b/scripts/angelscript/shender_east/burning_one.as @@ -0,0 +1,816 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_lightning_shield.as" + +namespace MS +{ + +class BurningOne : CGameScript +{ + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_DEPLOY; + string ANIM_DUCK_ATTACK; + string ANIM_DUCK_BEAM; + string ANIM_DUCK_IDLE; + string ANIM_DUCK_MOVE; + string ANIM_DUCK_RPG; + string ANIM_DUCK_SPELL; + string ANIM_DUCK_THROW; + string ANIM_ICE_BREATH; + string ANIM_ICE_SPIRAL; + string ANIM_IDLE; + string ANIM_JUMP; + string ANIM_LIMP_WRIST; + string ANIM_LONG_JUMP; + string ANIM_MIRROR_PREP; + string ANIM_PREP_DEPLOY; + string ANIM_RELEASE_DEPLOY; + string ANIM_RUN; + string ANIM_RUN_SKELE_MODE; + string ANIM_SHOOT; + string ANIM_SKELE_DUCK_SWIPE; + string ANIM_SKELE_SWIPE; + string ANIM_THROW; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_HITRANGE_MELEE; + int ATTACK_MOVERANGE; + int ATTACK_MOVERANGE_LONG; + int ATTACK_MOVERANGE_MELEE; + int ATTACK_RANGE; + int ATTACK_RANGE_MELEE; + string BALL_TYPE; + string CFB_EST_ANG; + string CFB_EST_ORG; + int CFB_FIREBALL_ACTIVE; + string CFB_FIREBALL_IDX; + int CFB_FIRST_TARGET_FOUND; + string CFB_FORCE_END; + string CFB_LIST; + string CFB_NEXT_SCAN; + string CL_PRIMARY_SCRIPT; + string DEF_ANIM_IDLE; + string DEF_ANIM_RUN; + string DEF_ANIM_WALK; + string DID_INTRO; + string DID_SUMMONS; + int DMG_ICE_BALL; + int DMG_PALPATINE; + int DMG_SWIPE; + int DOT_FROST; + int DOT_ICE_BALL; + int DOT_ICE_CAGE; + string DUCK_MODE; + string FREEZE_LIST; + string FREEZE_SCRIPT_IDX; + float FREQ_DODGE; + float FREQ_DUCK_SWITCH; + float FREQ_JUMP; + string HALF_HP; + int ICE_BREATH_ON; + int IS_UNHOLY; + int LHAND_ATCH; + string LSHIELD_CLFX_SCRIPT; + int LSHIELD_RADIUS; + string LSHIELD_TARGET; + int MOUTH_ATCH; + string NEXT_DODGE; + string NEXT_FREEZE; + string NEXT_SPECIAL; + string NEXT_TOUCH_ZAP; + int NPC_FORCED_MOVEDEST; + int NPC_GIVE_EXP; + int NPC_NO_ATTACK; + int N_SPECIALS; + int PALPATINE_ON; + string PALPATINE_TARGETS; + float PROJ_HOLD_DURATION; + string REPULSE_LIST; + int RHAND_ATCH; + string SHENDER_MAP; + string SOUND_BREATH; + string SOUND_DEATH; + string SOUND_DODGE; + string SOUND_FREEZE_SLAP; + string SOUND_ICEBALL_RELEASE; + string SOUND_ICE_PREP; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_SCREAM; + string SOUND_SKELE_LAUGH1; + string SOUND_SKELE_LAUGH2; + string SOUND_SWIPE1; + string SOUND_SWIPE2; + string SOUND_SWIPE3; + string SOUND_SWIPE4; + string SOUND_ZAP_LOOP; + string SOUND_ZAP_START; + int SPECIAL_CYCLE; + string SPECIAL_OVERRIDE; + string SPIN_ANG; + int SPIN_ON; + int SWIPE_ATTACK; + + BurningOne() + { + ANIM_WALK = "walk"; + ANIM_RUN = "walk"; + ANIM_IDLE = "idle"; + ANIM_DEATH = "die_forwards2"; + ANIM_RUN_SKELE_MODE = "run"; + ANIM_JUMP = "jump"; + ANIM_LONG_JUMP = "long_jump"; + ANIM_THROW = "ref_shoot_crowbar"; + ANIM_SHOOT = "ref_shoot_smartgun"; + ANIM_DEPLOY = "ref_shoot_grenade"; + ANIM_SKELE_SWIPE = "ref_shoot_crowbar"; + ANIM_SKELE_DUCK_SWIPE = "crouch_shoot_crowbar"; + ANIM_LIMP_WRIST = "ref_aim_crowbar"; + ANIM_PREP_DEPLOY = "ref_aim_trip"; + ANIM_RELEASE_DEPLOY = "ref_shoot_trip"; + ANIM_MIRROR_PREP = "ref_aim_grenade"; + ANIM_ICE_SPIRAL = "ref_shoot_smartgun"; + ANIM_ICE_BREATH = "float"; + ANIM_DUCK_IDLE = "crouch_idle"; + ANIM_DUCK_MOVE = "crawl"; + ANIM_DUCK_BEAM = "crouch_shoot_smartgun"; + ANIM_DUCK_THROW = "crouch_shoot_grenade"; + ANIM_DUCK_ATTACK = "crouch_shoot_crowbar"; + ANIM_DUCK_RPG = "crouch_shoot_rpg"; + ANIM_DUCK_SPELL = "crouch_shoot_trip"; + IS_UNHOLY = 1; + ATTACK_RANGE = 256; + ATTACK_MOVERANGE = 256; + ATTACK_HITRANGE = 256; + NPC_NO_ATTACK = 1; + NPC_GIVE_EXP = 3000; + LSHIELD_CLFX_SCRIPT = "monsters/burning_one_lshield_cl"; + LSHIELD_RADIUS = 64; + SPECIAL_CYCLE = 0; + N_SPECIALS = 4; + PROJ_HOLD_DURATION = 20.0; + CL_PRIMARY_SCRIPT = "monsters/burning_one_cl"; + ATTACK_RANGE_MELEE = 96; + ATTACK_HITRANGE_MELEE = 160; + ATTACK_MOVERANGE_MELEE = 64; + ATTACK_MOVERANGE_LONG = 256; + LHAND_ATCH = 1; + RHAND_ATCH = 2; + MOUTH_ATCH = 3; + FREQ_DODGE = 4.0; + DOT_ICE_BALL = 100; + DMG_ICE_BALL = 400; + DOT_ICE_CAGE = 100; + DMG_PALPATINE = 25; + DMG_SWIPE = 100; + DOT_FROST = 100; + FREQ_JUMP = Random(5.0, 15.0); + FREQ_DUCK_SWITCH = Random(10.0, 20.0); + SOUND_ICEBALL_RELEASE = "ambience/alienflyby1.wav"; + SOUND_ICE_PREP = "magic/spookie1.wav"; + SOUND_DODGE = "magic/frost_reverse.wav"; + SOUND_BREATH = "monsters/goblin/sps_fogfire.wav"; + SOUND_ZAP_LOOP = "magic/bolt_loop.wav"; + SOUND_ZAP_START = "magic/bolt_end.wav"; + SOUND_SCREAM = "monsters/spooky_scream.wav"; + SOUND_SWIPE1 = "zombie/claw_miss1.wav"; + SOUND_SWIPE2 = "zombie/claw_miss2.wav"; + SOUND_SWIPE3 = "monsters/goblin/c_gargoyle_atk1.wav"; + SOUND_SWIPE4 = "monsters/goblin/c_gargoyle_atk2.wav"; + SOUND_DEATH = "monsters/goblin/c_gargoyle_dead.wav"; + SOUND_PAIN1 = "monsters/goblin/c_gargoyle_hit1.wav"; + SOUND_PAIN2 = "monsters/goblin/c_gargoyle_hit2.wav"; + SOUND_SKELE_LAUGH1 = "monsters/goblin/c_gargoyle_bat1.wav"; + SOUND_SKELE_LAUGH2 = "monsters/goblin/c_gargoyle_bat2.wav"; + SOUND_FREEZE_SLAP = "monsters/goblin/c_gargoyle_atk3.wav"; + SetCallback("touch", "enable"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(20.0); + if ((IsEntityAlive(GetOwner()))) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 128, 0), 256, 20.0); + } + + void game_precache() + { + Precache("monsters/summon/client_side_fireball"); + Precache("effects/sfx_motionblur_perm"); + Precache("monsters/burning_one_cl"); + } + + void OnSpawn() override + { + SetName("Lesser Burning One"); + SetRace("demon"); + SetWidth(32); + SetHeight(80); + SetModel("monsters/hollow_one.mdl"); + SetRoam(false); + SetHealth(4000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.0); + SetDamageResistance("cold", 1.25); + SetDamageResistance("poison", 0.0); + SetDamageResistance("holy", 1.0); + SetProp(GetOwner(), "skin", 0); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetHearingSensitivity(10); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + } + + void cycle_up() + { + if (!(DID_INTRO)) + { + DID_INTRO = 1; + if (StringToLower(GetMapName()) == "shender_east") + { + } + SHENDER_MAP = 1; + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + UseTrigger("spawn_ruins_escort"); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(255, 128, 0), 256, 20.0); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (GetGameTime() > NEXT_SPECIAL) + { + do_special(); + } + if (GetGameTime() > NEXT_DODGE) + { + if (GetEntityRange(m_hAttackTarget) < 96) + { + } + shadow_shift(); + } + } + + void resume_movement() + { + if (!(FLIGHT_MODE)) + { + ANIM_WALK = DEF_ANIM_WALK; + ANIM_RUN = DEF_ANIM_RUN; + ANIM_IDLE = DEF_ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + SetRoam(true); + } + else + { + SetMoveAnim(ANIM_FLOAT); + SetIdleAnim(ANIM_FLOAT); + } + } + + void suspend_movement() + { + if (!(FLIGHT_MODE)) + { + ANIM_WALK = param1; + ANIM_RUN = param1; + ANIM_IDLE = param1; + SetMoveAnim(param1); + SetIdleAnim(param1); + SetRoam(false); + } + } + + void do_special() + { + if (!(IsEntityAlive(GetOwner()))) return; + SPECIAL_CYCLE += 1; + if (SPECIAL_CYCLE > N_SPECIALS) + { + SPECIAL_CYCLE = 1; + } + if ((G_DEVELOPER_MODE)) + { + if (SPECIAL_OVERRIDE > 0) + { + } + SPECIAL_CYCLE = SPECIAL_OVERRIDE; + } + if (SPECIAL_CYCLE == 1) + { + LogDebug("do_special: iceball"); + prep_iceball(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 25.0; + } + if (SPECIAL_CYCLE == 2) + { + do_ice_breath(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + if (SPECIAL_CYCLE == 3) + { + prep_hold_person(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 5.0; + } + if (SPECIAL_CYCLE == 4) + { + if (!(DUCK_MODE)) + { + } + do_palpatine(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 10.0; + } + } + + void prep_iceball() + { + ScheduleDelayedEvent(2.0, "prep_iceball2"); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_PREP_DEPLOY); + SetIdleAnim(ANIM_PREP_DEPLOY); + SetMoveAnim(ANIM_PREP_DEPLOY); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), LHAND_ATCH, GetOwner(), RHAND_ATCH, Vector3(255, 128, 0), 200, 200, 2.0); + EmitSound(GetOwner(), 0, SOUND_ICE_PREP, 10); + } + + void prep_iceball2() + { + PlayAnim("critical", ANIM_RELEASE_DEPLOY); + EmitSound(GetOwner(), 0, SOUND_ICEBALL_RELEASE, 10); + npcatk_resume_ai(); + resume_movement(); + BALL_TYPE = "ice"; + start_ball(); + } + + void start_ball() + { + if ((CFB_FIREBALL_ACTIVE)) return; + CFB_FIREBALL_ACTIVE = 1; + CFB_FIRST_TARGET_FOUND = 0; + CFB_EST_ORG = /* TODO: $relpos */ $relpos(0, 32, 0); + string START_ANGS = GetEntityAngles(GetOwner()); + CFB_EST_ANG = START_ANGS; + ClientEvent("new", "all", "monsters/summon/client_side_fireball", CFB_EST_ORG, START_ANGS); + CFB_FIREBALL_IDX = "game.script.last_sent_id"; + ScheduleDelayedEvent(0.1, "cfb_fireball_loop"); + CFB_FORCE_END = GetGameTime(); + CFB_FORCE_END += 20.0; + } + + void cfb_fireball_loop() + { + if (!(CFB_FIREBALL_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "cfb_fireball_loop"); + if (GetGameTime() > CFB_NEXT_SCAN) + { + CFB_NEXT_SCAN = GetGameTime(); + CFB_NEXT_SCAN += 2.0; + if (!(IsEntityAlive(CFB_TARGET))) + { + string OWNER_ORG = GetEntityOrigin(GetOwner()); + string TARGET_TOKENS = FindEntitiesInSphere("enemy", 512); + if (TARGET_TOKENS != "none") + { + } + if (GetTokenCount(TARGET_TOKENS, ";") > 1) + { + ScrambleTokens(TARGET_TOKENS, ";"); + } + string TEST_TARG = GetToken(TARGET_TOKENS, 0, ";"); + if ((IsEntityAlive(TEST_TARG))) + { + } + if (!(GetEntityProperty(TEST_TARG, "scriptvar"))) + { + } + CFB_TARGET = TEST_TARG; + if (!(CFB_FIRST_TARGET_FOUND)) + { + } + CFB_FIRST_TARGET_FOUND = 1; + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(CFB_EST_ORG, TARG_ORG); + } + else + { + string SCAN_DOWN = CFB_EST_ORG; + string TARGET_TOKENS = FindEntitiesInSphere("enemy", 96); + if (TARGET_TOKENS != "none") + { + } + cfb_explode("hit_nme"); + } + } + if (!(CFB_FIREBALL_ACTIVE)) return; + if ((IsEntityAlive(CFB_TARGET))) + { + string TARG_ORG = GetEntityOrigin(CFB_TARGET); + if (!(IsValidPlayer(CFB_TARGET))) + { + TARG_ORG += "z"; + } + string ANG_TO_TARG = /* TODO: $angles3d */ $angles3d(CFB_EST_ORG, TARG_ORG); + ANG_TO_TARG = "x"; + ClientEvent("update", "all", CFB_FIREBALL_IDX, "svr_update_fireball_vec", ANG_TO_TARG, CFB_EST_ORG); + CFB_EST_ANG = ANG_TO_TARG; + CFB_EST_ORG += /* TODO: $relvel */ $relvel(ANG_TO_TARG, Vector3(0, 60, 0)); + } + else + { + CFB_EST_ORG += /* TODO: $relvel */ $relvel(CFB_EST_ANG, Vector3(0, 60, 0)); + } + string TRACE_DEST = CFB_EST_ORG; + TRACE_DEST += /* TODO: $relvel */ $relvel(CFB_EST_ANG, Vector3(0, 60, 0)); + string TRACE_RESULT = TraceLine(CFB_EST_ORG, TRACE_DEST); + if (TRACE_RESULT != TRACE_DEST) + { + cfb_explode("hitwall"); + } + if (!(CFB_FIREBALL_ACTIVE)) return; + if (!(GetGameTime() > CFB_FORCE_END)) return; + cfb_explode("time_out"); + } + + void cfb_explode() + { + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + CFB_FIREBALL_ACTIVE = 0; + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_explode"); + ScheduleDelayedEvent(0.1, "cfb_fireball_release"); + CFB_LIST = FindEntitiesInSphere("enemy", 128); + if (!(CFB_LIST != "none")) return; + if (!(GetTokenCount(CFB_LIST, ";") > 0)) return; + XDoDamage(CFB_EST_ORG, 128, DMG_ICE_BALL, 0, GetOwner(), GetOwner(), "none", "fire_effect"); + for (int i = 0; i < GetTokenCount(CFB_LIST, ";"); i++) + { + cfb_affect_targets(); + } + } + + void cfb_affect_targets() + { + string CHECK_ENT = GetToken(CFB_LIST, i, ";"); + string TARGET_ORG = GetEntityOrigin(CHECK_ENT); + string TARG_ANG = /* TODO: $angles */ $angles(CFB_EST_ORG, TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(CHECK_ENT, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + ApplyEffect(CHECK_ENT, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_ICE_BALL); + } + + void cfb_fireball_end() + { + LogDebug("cfb_fireball_end"); + ClientEvent("update", "all", CFB_FIREBALL_IDX, "fireball_end"); + ScheduleDelayedEvent(0.1, "cfb_fireball_release"); + } + + void cfb_fireball_release() + { + LogDebug("cfb_fireball_release"); + CFB_FIREBALL_ACTIVE = 0; + } + + void prep_hold_person() + { + ScheduleDelayedEvent(2.0, "prep_hold_person2"); + npcatk_suspend_ai(); + PlayAnim("critical", ANIM_PREP_DEPLOY); + SetIdleAnim(ANIM_PREP_DEPLOY); + SetMoveAnim(ANIM_PREP_DEPLOY); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "hand_sprites", GetEntityIndex(GetOwner()), 2.0, Vector3(64, 64, 255)); + EmitSound(GetOwner(), 0, SOUND_ICE_PREP, 10); + } + + void prep_hold_person2() + { + PlayAnim("critical", ANIM_RELEASE_DEPLOY); + EmitSound(GetOwner(), 0, SOUND_ICEBALL_RELEASE, 10); + npcatk_resume_ai(); + resume_movement(); + TossProjectile("proj_hold_person", /* TODO: $relpos */ $relpos(0, 0, 24), m_hAttackTarget, 50, 0, 0, "none"); + } + + void shadow_shift() + { + if (!(GetGameTime() > NEXT_DODGE)) return; + NEXT_DODGE = GetGameTime(); + NEXT_DODGE += FREQ_DODGE; + ClientEvent("persist", "all", "effects/sfx_motionblur_temp", GetEntityIndex(GetOwner()), 0, 1, 3.0); + float RND_ANG = Random(0, 359); + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, RND_ANG, 0), Vector3(0, 1000, 0))); + EmitSound(GetOwner(), 0, SOUND_DODGE, 10); + ScheduleDelayedEvent(0.25, "stop_shadow_shift"); + } + + void stop_shadow_shift() + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, 0)); + } + + void OnDamage(int damage) override + { + LogDebug("game_damaged stg1 STAGE_ONE_DONE stg2 STAGE_TWO_DONE hp GetEntityHealth(GetOwner()) vs STAGE_TWO_THRESH"); + if ((SHENDER_MAP)) + { + if (GetEntityHealth(GetOwner()) < HALF_HP) + { + } + if (!(DID_SUMMONS)) + { + } + DID_SUMMONS = 1; + UseTrigger("spawn_ruins_summons"); + } + if ((PALPATINE_ON)) + { + if (GetEntityRange(param1) < 256) + { + } + SetMoveDest(param1); + } + if ((PALPATINE_ON)) return; + if (!(GetEntityRange(param1) > 128)) return; + if (!(param2 > 75)) return; + shadow_shift(); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(LSHIELD_PASSIVE_ENABLE)) return; + if (!(GetGameTime() > NEXT_TOUCH_ZAP)) return; + NEXT_TOUCH_ZAP = GetGameTime(); + NEXT_TOUCH_ZAP += 0.1; + if (!(GetRelationship(GetOwner()) == "enemy")) return; + LSHIELD_TARGET = param1; + lshield_passive_zap_target(); + } + + void do_ice_breath() + { + npcatk_suspend_ai(); + suspend_movement(ANIM_ICE_BREATH); + PlayAnim("critical", ANIM_ICE_BREATH); + SPIN_ANG = GetEntityProperty(GetOwner(), "angles.yaw"); + SPIN_ON = 1; + SPIN_ANG -= 45; + if (SPIN_ANG < 0) + { + SPIN_ANG += 359; + } + // svplaysound: svplaysound 1 10 SOUND_BREATH + EmitSound(1, 10, SOUND_BREATH); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "ice_breath", GetEntityIndex(GetOwner()), 8.0); + FREEZE_SCRIPT_IDX = "game.script.last_sent_id"; + ice_breath_spin(); + ScheduleDelayedEvent(8.0, "stop_ice_breath_spin"); + ICE_BREATH_ON = 1; + } + + void stop_ice_breath_spin() + { + // svplaysound: svplaysound 1 0 SOUND_BREATH + EmitSound(1, 0, SOUND_BREATH); + ClientEvent("update", "all", FREEZE_SCRIPT_IDX, "ice_breath_off"); + SPIN_ON = 0; + resume_movement(); + npcatk_resume_ai(); + NEXT_SPECIAL = GetGameTime(); + NEXT_SPECIAL += 1.0; + ICE_BREATH_ON = 0; + } + + void ice_breath_spin() + { + if (!(SPIN_ON)) return; + ScheduleDelayedEvent(0.05, "ice_breath_spin"); + string FACE_POS = GetEntityOrigin(GetOwner()); + FACE_POS += /* TODO: $relpos */ $relpos(Vector3(0, SPIN_ANG, 0), Vector3(0, 100, 0)); + SetMoveDest(FACE_POS); + if (GetGameTime() > NEXT_FREEZE) + { + NEXT_FREEZE = GetGameTime(); + NEXT_FREEZE += 0.5; + FREEZE_LIST = FindEntitiesInSphere("enemy", 512); + if (FREEZE_LIST != "none") + { + } + for (int i = 0; i < GetTokenCount(FREEZE_LIST, ";"); i++) + { + freeze_targets(); + } + } + SPIN_ANG += 10; + if (SPIN_ANG > 359) + { + SPIN_ANG -= 359; + } + } + + void freeze_targets() + { + string CUR_TARGET = GetToken(FREEZE_LIST, i, ";"); + if (!(IsEntityAlive(CUR_TARGET))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARGET); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityRange(CUR_TARGET) < 256)) return; + if (!(GetEntityHeight(CUR_TARGET) > 36)) return; + LogDebug("freeze_targets GetEntityName(CUR_TARGET)"); + ApplyEffect(CUR_TARGET, "effects/dot_fire", 10.0, GetEntityIndex(GetOwner()), DOT_ICE_CAGE); + string MY_ORG = GetEntityOrigin(GetOwner()); + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + SetVelocity(CUR_TARGET, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(0, 500, 0))); + } + + void do_palpatine() + { + ATTACK_MOVERANGE = ATTACK_MOVERANGE_LONG; + SetMoveDest(m_hAttackTarget); + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(); + suspend_movement(ANIM_PREP_DEPLOY); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "palpatine", GetEntityIndex(GetOwner()), 8.0); + EmitSound(GetOwner(), 0, SOUND_ZAP_START, 10); + // svplaysound: svplaysound 1 10 SOUND_ZAP_LOOP + EmitSound(1, 10, SOUND_ZAP_LOOP); + PALPATINE_ON = 1; + ScheduleDelayedEvent(8.0, "palpatine_end"); + palpatine_loop(); + } + + void palpatine_end() + { + PALPATINE_ON = 0; + npcatk_resume_ai(); + resume_movement(); + // svplaysound: svplaysound 1 0 SOUND_ZAP_LOOP + EmitSound(1, 0, SOUND_ZAP_LOOP); + } + + void palpatine_loop() + { + if (!(PALPATINE_ON)) return; + ScheduleDelayedEvent(0.1, "palpatine_loop"); + PALPATINE_TARGETS = FindEntitiesInSphere("enemy", 256); + if (!(PALPATINE_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(PALPATINE_TARGETS, ";"); i++) + { + palpatine_shock_targs(); + } + } + + void palpatine_shock_targs() + { + string CUR_TARG = GetToken(PALPATINE_TARGETS, i, ";"); + if (!(IsEntityAlive(CUR_TARG))) return; + string TARG_ORG = GetEntityOrigin(CUR_TARG); + if (!(WithinCone2D(TARG_ORG, GetMonsterProperty("origin"), GetMonsterProperty("angles")))) return; + if (!(GetEntityHeight(CUR_TARG) > 36)) return; + DoDamage(CUR_TARG, "direct", DMG_PALPATINE, 1.0, GetOwner()); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(0, 200, 110)); + } + + void game_dynamically_created() + { + if (!(param1 > 0)) return; + SPECIAL_OVERRIDE = param1; + } + + void toggle_duck_mode() + { + if ((DUCK_MODE)) + { + DUCK_MODE = 1; + ANIM_ATTACK = ANIM_SKELE_DUCK_SWIPE; + ANIM_WALK = ANIM_DUCK_MOVE; + ANIM_RUN = ANIM_DUCK_MOVE; + ANIM_IDLE = ANIM_DUCK_IDLE; + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(DUCK_MODE)) + { + DUCK_MODE = 0; + ANIM_ATTACK = ANIM_SKELE_SWIPE; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_IDLE = "idle"; + DEF_ANIM_WALK = ANIM_WALK; + DEF_ANIM_RUN = ANIM_RUN; + DEF_ANIM_IDLE = ANIM_IDLE; + SetMoveAnim(ANIM_RUN); + SetIdleAnim(ANIM_IDLE); + } + } + + void leap_away() + { + npcatk_suspend_ai(2.0); + ScheduleDelayedEvent(2.0, "force_leap_end"); + suspend_movement(ANIM_LONG_JUMP); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + if (!(IsEntityAlive(param1))) + { + SetMoveDest(m_hAttackTarget); + } + else + { + SetMoveDest(param1); + } + NPC_FORCED_MOVEDEST = 1; + PlayAnim("critical", ANIM_LONG_JUMP); + repulse_area(GetEntityOrigin(GetOwner())); + ScheduleDelayedEvent(0.1, "leap_away_boost"); + } + + void leap_away_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 1000, 800)); + } + + void frame_long_jump_land() + { + npcatk_resume_ai(); + resume_movement(); + } + + void force_leap_end() + { + npcatk_resume_ai(); + resume_movement(); + } + + void repulse_area() + { + EmitSound(GetOwner(), 0, "magic/boom.wav", 10); + ClientEvent("new", "all", CL_PRIMARY_SCRIPT, "repulse", GetEntityOrigin(GetOwner()), 128); + REPULSE_LIST = FindEntitiesInSphere("any", 128); + if (!(REPULSE_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(REPULSE_LIST, ";"); i++) + { + repulse_targets(); + } + } + + void repulse_targets() + { + string CUR_TARG = GetToken(REPULSE_LIST, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 10))); + } + + void my_target_died() + { + // PlayRandomSound from: SOUND_SKELE_LAUGH1, SOUND_SKELE_LAUGH2 + array sounds = {SOUND_SKELE_LAUGH1, SOUND_SKELE_LAUGH2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void game_dodamage() + { + if ((SWIPE_ATTACK)) + { + if (RandomInt(1, 3) == 1) + { + } + if ((param1)) + { + } + if (GetRelationship(param2) == "enemy") + { + } + // PlayRandomSound from: SOUND_FREEZE_SLAP + array sounds = {SOUND_FREEZE_SLAP}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + SWIPE_ATTACK = 0; + } + +} + +} diff --git a/scripts/angelscript/shender_east/elemental_fire_guardian.as b/scripts/angelscript/shender_east/elemental_fire_guardian.as new file mode 100644 index 00000000..88c257e1 --- /dev/null +++ b/scripts/angelscript/shender_east/elemental_fire_guardian.as @@ -0,0 +1,45 @@ +#pragma context server + +#include "shender_east/elemental_ice_guardian.as" + +namespace MS +{ + +class ElementalFireGuardian : CGameScript +{ + int DOT_FROST; + string GUARD_ELEMENT; + string ICE_GUARD_DOT_EFFECT; + float ICE_GUARD_FIRE_VULN; + int ICE_GUARD_HEIGHT; + float ICE_GUARD_ICE_VULN; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int NPC_BASE_EXP; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + ElementalFireGuardian() + { + ICE_GUARD_NAME = "Lesser Nightmare of Fire"; + ICE_GUARD_MODEL = "monsters/fire_guardian.mdl"; + ICE_GUARD_LEVEL = 1; + ICE_GUARD_WIDTH = 32; + ICE_GUARD_HEIGHT = 96; + NPC_BASE_EXP = 500; + GUARD_ELEMENT = "fire"; + ICE_GUARD_ICE_VULN = 1.5; + ICE_GUARD_FIRE_VULN = 0.0; + ICE_GUARD_DOT_EFFECT = "effects/dot_fire"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + DOT_FROST = 60; + } + +} + +} diff --git a/scripts/angelscript/shender_east/elemental_fire_guardian2.as b/scripts/angelscript/shender_east/elemental_fire_guardian2.as new file mode 100644 index 00000000..faf59230 --- /dev/null +++ b/scripts/angelscript/shender_east/elemental_fire_guardian2.as @@ -0,0 +1,80 @@ +#pragma context server + +#include "shender_east/elemental_ice_guardian.as" + +namespace MS +{ + +class ElementalFireGuardian2 : CGameScript +{ + int ATTACK_MOVERANGE_DEF; + int BE_AGRESSIVE; + string CL_FX_SCRIPT; + int DMG_BURST; + int DMG_FIRE_BURST; + int DMG_LUNGE; + int DMG_STAFF; + int DOT_FROST; + int FLAME_JET_DMG; + int FLAME_JET_DOT; + float FREQ_ICE_BALL; + float FREQ_PROJECTILE; + string GUARD_ELEMENT; + string ICE_GUARD_DOT_EFFECT; + float ICE_GUARD_FIRE_VULN; + int ICE_GUARD_HEIGHT; + int ICE_GUARD_HP; + float ICE_GUARD_ICE_VULN; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int NPC_BASE_EXP; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + + ElementalFireGuardian2() + { + ICE_GUARD_NAME = "Nightmare of Fire"; + ICE_GUARD_HP = 3000; + ICE_GUARD_ICE_VULN = 0.5; + ICE_GUARD_FIRE_VULN = 0.0; + ICE_GUARD_LEVEL = 2; + ICE_GUARD_MODEL = "monsters/fire_guardian.mdl"; + ICE_GUARD_WIDTH = 32; + ICE_GUARD_HEIGHT = 96; + NPC_BASE_EXP = 1000; + DMG_BURST = 100; + DMG_LUNGE = 125; + DMG_STAFF = 75; + DOT_FROST = 75; + DMG_FIRE_BURST = 200; + FLAME_JET_DMG = 100; + FLAME_JET_DOT = 50; + FREQ_ICE_BALL = Random(10.0, 20.0); + GUARD_ELEMENT = "fire"; + ICE_GUARD_DOT_EFFECT = "effects/dot_fire"; + ATTACK_MOVERANGE_DEF = 200; + FREQ_PROJECTILE = 3.0; + CL_FX_SCRIPT = "monsters/elemental_fire_guardian_cl"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + Precache("explode1.spr"); + Precache("xfireball3.spr"); + if (StringToLower(GetMapName()) == "shender_east") + { + } + BE_AGRESSIVE = 1; + } + + void game_precache() + { + Precache("effects/sfx_seal"); + Precache("firemagic_8bit.spr"); + } + +} + +} diff --git a/scripts/angelscript/shender_east/elemental_fire_guardian3.as b/scripts/angelscript/shender_east/elemental_fire_guardian3.as new file mode 100644 index 00000000..f2c94a80 --- /dev/null +++ b/scripts/angelscript/shender_east/elemental_fire_guardian3.as @@ -0,0 +1,135 @@ +#pragma context server + +#include "shender_east/elemental_ice_guardian.as" + +namespace MS +{ + +class ElementalFireGuardian3 : CGameScript +{ + int ATTACK_HITRANGE_DEF; + int ATTACK_MOVERANGE_AGRO; + int ATTACK_MOVERANGE_DEF; + int ATTACK_RANGE_DEF; + int BE_AGRESSIVE; + string CL_FX_SCRIPT; + int DMG_BURST; + int DMG_LUNGE; + int DMG_METEOR; + int DMG_STAFF; + int DOT_FROST; + int DOT_METEOR; + int DOT_SHOCK; + int FLAME_JET_DMG; + int FLAME_JET_DOT; + float FREQ_ICE_BALL; + float FREQ_METEOR; + float FREQ_PROJECTILE; + float FREQ_SHOCK_STORM; + string GUARD_ELEMENT; + string ICE_GUARD_DOT_EFFECT; + int ICE_GUARD_FIRE_VULN; + int ICE_GUARD_HEIGHT; + int ICE_GUARD_HP; + float ICE_GUARD_ICE_VULN; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int LUNGE_RANGE_MAX; + int LUNGE_RANGE_MAX_HITRANGE; + int LUNGE_RANGE_MIN; + int NPC_BASE_EXP; + string NPC_IS_BOSS; + string SOUND_SHOCK_HIT; + string SOUND_SHOCK_LOOP; + string SOUND_SHOCK_START; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string STAFF_ALT_EFFECT; + string STAFF_BEAM_COLOR; + + ElementalFireGuardian3() + { + ICE_GUARD_NAME = "Fell Nightmare of Flame"; + ICE_GUARD_HP = 4000; + ICE_GUARD_FIRE_VULN = 0; + ICE_GUARD_LEVEL = 3; + ICE_GUARD_MODEL = "monsters/fire_guardian2.mdl"; + ICE_GUARD_WIDTH = 48; + ICE_GUARD_HEIGHT = 120; + if (StringToLower(GetMapName()) == "phobia") + { + NPC_IS_BOSS = 1; + } + NPC_BASE_EXP = 3500; + SetDamageResistance("acid", 0.0); + SetDamageResistance("poison", 0.0); + DMG_BURST = 150; + DMG_LUNGE = 150; + DMG_STAFF = 100; + DOT_FROST = 100; + DOT_SHOCK = 100; + FLAME_JET_DMG = 150; + FLAME_JET_DOT = 50; + GUARD_ELEMENT = "fire"; + ICE_GUARD_ICE_VULN = 0.0; + ICE_GUARD_FIRE_VULN = 0.0; + ICE_GUARD_DOT_EFFECT = "effects/dot_fire"; + ATTACK_MOVERANGE_DEF = 256; + ATTACK_MOVERANGE_AGRO = 70; + ATTACK_RANGE_DEF = 90; + ATTACK_HITRANGE_DEF = 120; + LUNGE_RANGE_MIN = 100; + LUNGE_RANGE_MAX = 225; + LUNGE_RANGE_MAX_HITRANGE = 175; + FREQ_SHOCK_STORM = 20.0; + FREQ_PROJECTILE = Random(5.0, 10.0); + FREQ_ICE_BALL = Random(5.0, 10.0); + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + STAFF_ALT_EFFECT = "effects/dot_poison_blind"; + CL_FX_SCRIPT = "monsters/elemental_fire_guardian_cl"; + STAFF_BEAM_COLOR = Vector3(0, 255, 0); + SOUND_SHOCK_LOOP = "magic/blackhole.wav"; + SOUND_SHOCK_START = "magic/spookie1.wav"; + SOUND_SHOCK_HIT = "bullchicken/bc_bite2.wav"; + FREQ_METEOR = 20.0; + DMG_METEOR = 750; + DOT_METEOR = 200; + if (StringToLower(GetMapName()) == "shender_east") + { + } + BE_AGRESSIVE = 1; + } + + void game_precache() + { + Precache("effects/sfx_seal"); + Precache("firemagic_8bit.spr"); + Precache(SOUND_SHOCK_LOOP); + } + + void OnPostSpawn() override + { + if (!(StringToLower(GetMapName()) == "phobia")) return; + CallExternal("all", "bandit_ally_fire_spawn"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (StringToLower(GetMapName()) == "phobia") + { + CallExternal("all", "bandit_ally_boss_dead"); + } + if (StringToLower(GetMapName()) == "shender_east") + { + CallExternal(GAME_MASTER, "map_shender_east_dream_win"); + } + } + +} + +} diff --git a/scripts/angelscript/shender_east/elemental_ice_guardian.as b/scripts/angelscript/shender_east/elemental_ice_guardian.as new file mode 100644 index 00000000..ace0aae5 --- /dev/null +++ b/scripts/angelscript/shender_east/elemental_ice_guardian.as @@ -0,0 +1,1385 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_flyer_grav.as" +#include "monsters/base_propelled.as" + +namespace MS +{ + +class ElementalIceGuardian : CGameScript +{ + string ANIM_ALERT; + string ANIM_ATTACK; + string ANIM_ATTACK1; + string ANIM_ATTACK2; + string ANIM_BREATH_LOOP; + string ANIM_BREATH_START; + string ANIM_DEATH; + string ANIM_DODGE; + string ANIM_FAKE_DEATH; + string ANIM_FAKE_DEATH_IDLE; + string ANIM_FLINCH_CUSTOM; + string ANIM_ICE_BALL; + string ANIM_IDLE; + string ANIM_LUNGE; + string ANIM_MULTI_PROJECTILE; + string ANIM_PROJECTILE; + string ANIM_PUSH; + string ANIM_PUSHL; + string ANIM_RESSURECT; + string ANIM_RUN; + string ANIM_SPELL_LOOP; + string ANIM_STUN_BURST; + string ANIM_SUMMON; + string ANIM_TAUNT; + string ANIM_THROW; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_COUNT; + int ATTACK_HITRANGE; + int ATTACK_HITRANGE_DEF; + int ATTACK_MOVERANGE; + int ATTACK_MOVERANGE_AGRO; + int ATTACK_MOVERANGE_DEF; + int ATTACK_RANGE; + int ATTACK_RANGE_DEF; + int BE_AGGRESSIVE; + int BFLY_VSPEED_DOWN; + int BFLY_VSPEED_UP; + string BURST_START; + string BURST_TARGS; + string CIRCLE_TARGS; + string CL_FX_INDEX; + string CL_FX_SCRIPT; + string CUR_SHOCK_TARG_IDX; + int DID_WARCRY; + int DMG_BURST; + int DMG_LUNGE; + int DMG_STAFF; + string DODGE_TARGET; + int DOT_FROST; + int DOT_SHOCK; + string FLIGHT_HEIGHT; + float FREQ_CHANGE_STANCE; + float FREQ_CHARGE; + float FREQ_DODGE; + float FREQ_FLINCH; + float FREQ_ICE_BALL; + float FREQ_ICE_CIRCLE; + float FREQ_LUNGE; + float FREQ_PROJECTILE; + float FREQ_SHOCK_STORM; + float FREQ_STAFF_MODE_CHANGE; + float FREQ_STUN_BURST; + float FREQ_TAUNT; + float FREQ_THROW; + string GUARD_ELEMENT; + string HALF_HP; + float HIT_DELAY; + int ICE_CIRCLE_ACTIVE; + int ICE_CIRCLE_FXRAD; + string ICE_CIRCLE_ORIGIN; + int ICE_CIRCLE_RAD; + string ICE_GUARD_DOT_EFFECT; + float ICE_GUARD_FIRE_VULN; + int ICE_GUARD_HEIGHT; + int ICE_GUARD_HP; + float ICE_GUARD_ICE_VULN; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int IMMUNE_VAMPIRE; + int IN_STANCE; + int IS_UNHOLY; + int LUNGE_RANGE_MAX; + int LUNGE_RANGE_MAX_HITRANGE; + int LUNGE_RANGE_MIN; + int MELEE_ATTACK; + string METEOR_MODE; + int MOVE_RANGE; + string NEXT_CALM; + string NEXT_CHARGE; + string NEXT_CL_REFRESH; + string NEXT_DODGE; + string NEXT_FLINCH; + string NEXT_ICE_BALL; + string NEXT_ICE_CIRCLE; + string NEXT_LUNGE; + string NEXT_METEOR; + string NEXT_PROJECTILE; + string NEXT_SHOCK_STORM; + string NEXT_STAFF_MODE_CHANGE; + string NEXT_STANCE_CHANGE; + string NEXT_STUN_BURST; + string NEXT_TARG_CHECK; + string NEXT_TAUNT; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string PROJECTILE_LOOP_ON; + int PROJ_SPEED; + string SHOCK_MODE; + string SHOCK_STORM_BEAM_ID; + int SHOCK_STORM_ON; + string SHOCK_TARGS; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_DODGE; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PROJECTILE; + string SOUND_SHOCK_HIT; + string SOUND_SHOCK_LOOP; + string SOUND_SHOCK_START; + string SOUND_STAFF_ON; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SUMMON; + string SOUND_SWIPE1; + string SOUND_SWIPE2; + string SOUND_SWIPE_STRONG1; + string SOUND_SWIPE_STRONG2; + string SOUND_SWIPE_STRONG3; + string SOUND_TAUNT; + int SPEED_FAST; + int SPEED_SLOW; + string STAFF_ALT_EFFECT; + string STAFF_BEAM_COLOR; + int STAFF_ON; + string STORM_TARGS; + int VEL_BURST_F; + int VEL_BURST_U; + int VEL_DODGE_F; + int VEL_DODGE_L; + int VEL_FBURST_F; + int VEL_LONG_F; + int VEL_PUSH_ATK_F; + int VEL_SHOCK_F; + int VEL_THROW_ATK_F; + int VEL_THROW_ATK_L; + + ElementalIceGuardian() + { + ICE_GUARD_NAME = "Lesser Nightmare of Ice"; + ICE_GUARD_HP = 1000; + ICE_GUARD_FIRE_VULN = 1.5; + ICE_GUARD_LEVEL = 1; + ICE_GUARD_MODEL = "monsters/ice_guardian.mdl"; + ICE_GUARD_WIDTH = 32; + ICE_GUARD_HEIGHT = 96; + ICE_GUARD_ICE_VULN = 0.0; + GUARD_ELEMENT = "ice"; + ICE_GUARD_DOT_EFFECT = "effects/dot_cold"; + ANIM_IDLE = "idle_ready"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + ANIM_ATTACK = "attack1"; + ANIM_DEATH = "explode"; + ANIM_ATTACK1 = "attack1"; + ANIM_ATTACK2 = "attack2"; + ANIM_STUN_BURST = "attack_smash"; + ANIM_THROW = "attack_throw"; + ANIM_PUSH = "attack_push"; + ANIM_LUNGE = "attack_long"; + ANIM_ICE_BALL = "release_spell"; + ANIM_SPELL_LOOP = "spell_loop"; + ANIM_SUMMON = "summon"; + ANIM_ALERT = "alert"; + ANIM_FLINCH_CUSTOM = "flinch"; + ANIM_TAUNT = "taunt"; + ANIM_PROJECTILE = "projectile"; + ANIM_MULTI_PROJECTILE = "multi_projectile"; + ANIM_DODGE = "attack_pushr"; + ANIM_PUSHL = "attack_pushl"; + ANIM_BREATH_START = "ccastout"; + ANIM_BREATH_LOOP = "ccastoutlp"; + ANIM_FAKE_DEATH = "long_death"; + ANIM_RESSURECT = "ressurect"; + ANIM_FAKE_DEATH_IDLE = "dead_idle"; + VEL_PUSH_ATK_F = 400; + VEL_THROW_ATK_L = -400; + VEL_THROW_ATK_F = 400; + VEL_BURST_F = 500; + VEL_FBURST_F = 800; + VEL_BURST_U = 100; + VEL_LONG_F = 300; + VEL_DODGE_F = 300; + VEL_DODGE_L = 300; + VEL_SHOCK_F = 600; + if (StringToLower(GetMapName()) != "shender_east") + { + VEL_PUSH_ATK_F *= 1.25; + VEL_THROW_ATK_L = -600; + VEL_THROW_ATK_F *= 1.25; + VEL_BURST_F *= 1.25; + VEL_FBURST_F *= 1.25; + VEL_BURST_U *= 1.25; + VEL_LONG_F *= 1.25; + VEL_DODGE_F *= 1.25; + VEL_DODGE_L *= 1.25; + VEL_SHOCK_F *= 1.25; + } + IS_UNHOLY = 1; + NPC_HACKED_MOVE_SPEED = 100; + IMMUNE_VAMPIRE = 1; + SPEED_SLOW = 100; + SPEED_FAST = 200; + BFLY_VSPEED_UP = 5; + BFLY_VSPEED_DOWN = -50; + MOVE_RANGE = 50; + ATTACK_MOVERANGE = 50; + ATTACK_MOVERANGE_DEF = 50; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 75; + ATTACK_RANGE_DEF = 60; + ATTACK_HITRANGE_DEF = 75; + ATTACK_MOVERANGE_AGRO = 60; + LUNGE_RANGE_MIN = 75; + LUNGE_RANGE_MAX = 175; + LUNGE_RANGE_MAX_HITRANGE = 125; + STAFF_BEAM_COLOR = Vector3(128, 128, 255); + STAFF_ALT_EFFECT = "effects/dot_lightning"; + NPC_GIVE_EXP = 750; + FREQ_STUN_BURST = Random(20.0, 30.0); + FREQ_ICE_BALL = Random(20.0, 30.0); + FREQ_ICE_CIRCLE = Random(20.0, 30.0); + FREQ_THROW = Random(10.0, 20.0); + FREQ_STAFF_MODE_CHANGE = 20.0; + FREQ_LUNGE = 5.0; + FREQ_DODGE = Random(8.0, 12.0); + FREQ_FLINCH = 20.0; + FREQ_CHANGE_STANCE = 20.0; + FREQ_TAUNT = 20.0; + FREQ_CHARGE = 20.0; + FREQ_PROJECTILE = 3.0; + FREQ_SHOCK_STORM = 30.0; + DMG_BURST = 50; + DMG_LUNGE = 100; + DMG_STAFF = 50; + DOT_FROST = 15; + DOT_SHOCK = 30; + ICE_CIRCLE_RAD = 172; + ICE_CIRCLE_FXRAD = 172; + CL_FX_SCRIPT = "monsters/elemental_ice_guardian_cl"; + SOUND_PROJECTILE = "magic/ice_strike.wav"; + SOUND_STAFF_ON = "magic/elecidle.wav"; + SOUND_SHOCK_LOOP = "magic/bolt_loop.wav"; + SOUND_SHOCK_START = "magic/bolt_start.wav"; + SOUND_SHOCK_HIT = "magic/bolt_end.wav"; + SOUND_STRUCK1 = "debris/glass1.wav"; + SOUND_STRUCK2 = "debris/glass2.wav"; + SOUND_STRUCK3 = "debris/glass3.wav"; + SOUND_SWIPE1 = "zombie/claw_miss1.wav"; + SOUND_SWIPE2 = "zombie/claw_miss2.wav"; + SOUND_SWIPE_STRONG1 = "zombie/claw_strike1.wav"; + SOUND_SWIPE_STRONG2 = "zombie/claw_strike2.wav"; + SOUND_SWIPE_STRONG3 = "zombie/claw_strike3.wav"; + SOUND_ATTACK1 = "monsters/ice_guardian/c_elemwatr_atk1.wav"; + SOUND_ATTACK2 = "monsters/ice_guardian/c_elemwatr_atk2.wav"; + SOUND_ATTACK3 = "monsters/ice_guardian/c_elemwatr_atk3.wav"; + SOUND_TAUNT = "monsters/ice_guardian/c_elemwatr_bat1.wav"; + SOUND_ALERT = "monsters/ice_guardian/c_elemwatr_slct.wav"; + SOUND_SUMMON = "monsters/ice_guardian/c_elemwatr_bat2.wav"; + SOUND_DODGE = "monsters/ice_guardian/c_elemwatr_slct.wav"; + SOUND_PAIN1 = "monsters/ice_guardian/c_elemwatr_hit1.wav"; + SOUND_PAIN2 = "monsters/ice_guardian/c_elemwatr_hit2.wav"; + SOUND_DEATH = "monsters/ice_guardian/c_elemwatr_dead.wav"; + } + + void OnSpawn() override + { + SetName(ICE_GUARD_NAME); + SetHealth(ICE_GUARD_HP); + SetRace("demon"); + SetModel(ICE_GUARD_MODEL); + SetWidth(ICE_GUARD_WIDTH); + SetHeight(ICE_GUARD_HEIGHT); + SetRoam(true); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SetDamageResistance("all", 0.5); + SetDamageResistance("cold", ICE_GUARD_ICE_VULN); + SetDamageResistance("fire", ICE_GUARD_FIRE_VULN); + SetDamageResistance("holy", 1.5); + SetBloodType("none"); + SetHearingSensitivity(6); + PlayAnim("once", ANIM_IDLE); + if (!(true)) return; + ATTACK_COUNT = 0; + STAFF_ON = 0; + IN_STANCE = 0; + NEXT_STANCE_CHANGE = GetGameTime(); + NEXT_STANCE_CHANGE += 20.0; + ScheduleDelayedEvent(0.1, "refresh_client_fx"); + ScheduleDelayedEvent(2.0, "finalize_npc"); + } + + void finalize_npc() + { + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + ATTACK_MOVERANGE = ATTACK_MOVERANGE_DEF; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + } + + void refresh_client_fx() + { + if (!(ICE_GUARD_LEVEL > 1)) return; + if (!(IsEntityAlive(GetOwner()))) return; + if (CL_FX_INDEX != "CL_FX_INDEX") + { + ClientEvent("update", "all", CL_FX_INDEX, "end_fx"); + } + ClientEvent("new", "all", CL_FX_SCRIPT, GetEntityIndex(GetOwner()), STAFF_ON); + CL_FX_INDEX = "game.script.last_sent_id"; + NEXT_CL_REFRESH = GetGameTime(); + NEXT_CL_REFRESH += 45.0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(Vector3(0, 0, 0), Vector3(0, 0, 0))); + SetGravity(1); + ClientEvent("update", "all", CL_FX_INDEX, "guardian_death"); + CallExternal(GAME_MASTER, "gm_vanish_que", GetEntityIndex(GetOwner()), 3.0); + if ((SHOCK_STORM_ON)) + { + // svplaysound: svplaysound 3 0 SOUND_SHOCK_LOOP + EmitSound(3, 0, SOUND_SHOCK_LOOP); + Effect("beam", "update", SHOCK_STORM_BEAM_ID, "brightness", 0); + } + } + + void game_stopmoving() + { + SetVelocity(GetOwner(), Vector3(0, 0, 0)); + } + + void npc_targetsighted() + { + if ((DID_WARCRY)) return; + DID_WARCRY = 1; + refresh_client_fx(); + float GAME_TIME = GetGameTime(); + int RND_WARCRY = RandomInt(1, 2); + AS_ATTACKING = GAME_TIME; + AS_ATTACKING += 5.0; + SetRoam(false); + ScheduleDelayedEvent(2.0, "restore_roam"); + SetMoveDest(m_hAttackTarget); + if (RND_WARCRY == 1) + { + PlayAnim("critical", ANIM_ALERT); + } + if (RND_WARCRY == 2) + { + PlayAnim("critical", ANIM_TAUNT); + } + NEXT_STUN_BURST = GAME_TIME; + NEXT_STUN_BURST += FREQ_STUN_BURST; + NEXT_LUNGE = GAME_TIME; + NEXT_LUNGE += 1.0; + NEXT_CHARGE = GAME_TIME; + NEXT_CHARGE += FREQ_CHARGE; + NEXT_ICE_BALL = GAME_TIME; + NEXT_ICE_BALL += FREQ_ICE_BALL; + NEXT_ICE_CIRCLE = GAME_TIME; + NEXT_ICE_CIRCLE += FREQ_ICE_CIRCLE; + NEXT_STAFF_MODE_CHANGE = GAME_TIME; + NEXT_STAFF_MODE_CHANGE += FREQ_STAFF_MODE_CHANGE; + NEXT_METEOR = GAME_TIME; + NEXT_METEOR += FREQ_METEOR; + } + + void restore_roam() + { + SetRoam(true); + } + + void frame_alert() + { + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + } + + void frame_taunt() + { + EmitSound(GetOwner(), 0, SOUND_TAUNT, 10); + } + + void cycle_down() + { + DID_WARCRY = 0; + } + + void OnHuntTarget(CBaseEntity@ target) + { + float GAME_TIME = GetGameTime(); + if (m_hAttackTarget == "unset") + { + if (GAME_TIME > NEXT_TARG_CHECK) + { + } + NEXT_TARG_CHECK = GAME_TIME; + NEXT_TARG_CHECK += Random(5.0, 20.0); + if (StringToLower(GetMapName()) == "shender_east") + { + } + Vector3 CHECK_POINT = Vector3(0, 0, -3760); + string CHECK_TARGS = FindEntitiesInSphere("player", 1024); + if (CHECK_TARGS != "none") + { + } + string CHECK_TARGS = /* TODO: $sort_entlist */ $sort_entlist(CHECK_TARGS, "range"); + string NEW_TARGET = GetToken(CHECK_TARGS, 0, ";"); + npcatk_settarget(NEW_TARGET); + } + if (ICE_GUARD_LEVEL > 1) + { + if (GAME_TIME > NEXT_CL_REFRESH) + { + } + refresh_client_fx(); + } + if (GAME_TIME > NEXT_STANCE_CHANGE) + { + NEXT_STANCE_CHANGE = GAME_TIME; + NEXT_STANCE_CHANGE += FREQ_STANCE_CHANGE; + IN_STANCE += 1; + if (IN_STANCE == 1) + { + ANIM_WALK = "run"; + ANIM_RUN = "walk"; + NPC_HACKED_MOVE_SPEED = SPEED_SLOW; + } + else + { + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + NPC_HACKED_MOVE_SPEED = SPEED_FAST; + IN_STANCE = 0; + } + } + if ((SUSPEND_AI)) return; + if (!(m_hAttackTarget != "unset")) return; + string TARG_RANGE = GetEntityRange(m_hAttackTarget); + if (TARG_RANGE < ATTACK_HITRANGE) + { + string L_TARG_ORG = GetEntityOrigin(m_hAttackTarget); + string L_MY_ORG = GetEntityOrigin(GetOwner()); + string L_Z_DIFF = (L_MY_ORG).z; + L_Z_DIFF -= (L_TARG_ORG).z; + if (L_Z_DIFF > ATTACK_RANGE) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 0, -100)); + SetGravity(1); + } + else + { + if (L_Z_DIFF > 0) + { + } + SetGravity(0.5); + } + } + else + { + SetGravity(0); + } + string MY_POS = GetEntityOrigin(GetOwner()); + string GROUND_HEIGHT = /* TODO: $get_ground_height */ $get_ground_height(MY_POS); + FLIGHT_HEIGHT = (MY_POS).z; + if (FLIGHT_HEIGHT > GROUND_HEIGHT) + { + FLIGHT_HEIGHT -= GROUND_HEIGHT; + } + else + { + GROUND_HEIGHT -= FLIGHT_HEIGHT; + FLIGHT_HEIGHT = GROUND_HEIGHT; + } + if (ICE_GUARD_LEVEL >= 2) + { + if (GAME_TIME > NEXT_CALM) + { + if ((BE_AGGRESSIVE)) + { + ATTACK_MOVERANGE = ATTACK_MOVERANGE_AGRO; + NPC_HACKED_MOVE_SPEED = SPEED_FAST; + } + else + { + ATTACK_MOVERANGE = ATTACK_MOVERANGE_DEF; + } + } + else + { + ATTACK_MOVERANGE = ATTACK_MOVERANGE_AGRO; + NPC_HACKED_MOVE_SPEED = SPEED_FAST; + } + } + if (TARG_RANGE > LUNGE_RANGE_MIN) + { + if (TARG_RANGE < LUNGE_RANGE_MAX) + { + } + if (GAME_TIME > NEXT_LUNGE) + { + } + ATTACK_HITRANGE = LUNGE_RANGE_MAX_HITRANGE; + ATTACK_RANGE = LUNGE_RANGE_MAX; + ANIM_ATTACK = ANIM_LUNGE; + } + if (GAME_TIME > NEXT_STUN_BURST) + { + if (FLIGHT_HEIGHT < 30) + { + } + ANIM_ATTACK = ANIM_STUN_BURST; + } + if (GAME_TIME > NEXT_CHARGE) + { + if (ICE_GUARD_LEVEL == 1) + { + } + if (TARG_RANGE > 300) + { + } + NEXT_CHARGE = GAME_TIME; + NEXT_CHARGE += FREQ_CHARGE; + PlayAnim("critical", ANIM_LUNGE); + PROJECTILE_LOOP_ON = 0; + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 800, 0)); + } + if (!(ICE_GUARD_LEVEL >= 2)) return; + if (ICE_GUARD_LEVEL == 3) + { + if (GAME_TIME > NEXT_STAFF_MODE_CHANGE) + { + } + NEXT_STAFF_MODE_CHANGE = GAME_TIME; + NEXT_STAFF_MODE_CHANGE += FREQ_STAFF_MODE_CHANGE; + staff_mode_switch(); + } + if (GAME_TIME > NEXT_ICE_BALL) + { + if (TARG_RANGE < 300) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + if ((BE_AGGRESSIVE)) + { + ATTACK_RANGE = 768; + ATTACK_HITRANGE = 768; + } + ANIM_ATTACK = ANIM_ICE_BALL; + if (!(CIRCLE_POS_SET)) + { + FIRE_CIRCLE_POS = NPC_LASTSEEN_POS; + CIRCLE_POS_SET = 1; + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_ICE_CIRCLE) + { + if (GUARD_TYPE == "ice") + { + if ((false)) + { + } + if (!(ICE_CIRCLE_ACTIVE)) + { + } + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + if ((BE_AGGRESSIVE)) + { + ATTACK_RANGE = 768; + } + ANIM_ATTACK = ANIM_SUMMON; + SUMMON_TYPE = "circle"; + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (ICE_GUARD_LEVEL == 2) + { + if (GAME_TIME > NEXT_PROJECTILE) + { + } + if ((false)) + { + } + if (TARG_RANGE > LUNGE_RANGE_MAX) + { + } + if (TARG_RANGE < 300) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + if ((BE_AGGRESSIVE)) + { + ATTACK_RANGE = 768; + ATTACK_HITRANGE = 768; + } + ANIM_ATTACK = ANIM_PROJECTILE; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (ICE_GUARD_LEVEL == 3) + { + if (GUARD_ELEMENT == "ice") + { + if (GAME_TIME > NEXT_PROJECTILE) + { + } + if ((false)) + { + } + if (TARG_RANGE > LUNGE_RANGE_MAX) + { + } + if (TARG_RANGE < 300) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + if ((BE_AGGRESSIVE)) + { + ATTACK_RANGE = 768; + ATTACK_HITRANGE = 768; + } + ANIM_ATTACK = ANIM_MULTI_PROJECTILE; + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (GAME_TIME > NEXT_METEOR) + { + if (GUARD_ELEMENT == "fire") + { + NEXT_METEOR = GAME_TIME; + NEXT_METEOR += FREQ_METEOR; + if (TARG_RANGE < 300) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + ATTACK_RANGE = 2048; + ATTACK_HITRANGE = 2048; + if ((BE_AGGRESSIVE)) + { + ATTACK_RANGE = 768; + ATTACK_HITRANGE = 768; + } + METEOR_MODE = 1; + ANIM_ATTACK = ANIM_ICE_BALL; + int EXIT_SUB = 1; + delay_specials(); + } + if (!(EXIT_SUB)) + { + } + } + if (ICE_GUARD_LEVEL == 3) + { + if (GAME_TIME > NEXT_SHOCK_STORM) + { + } + NEXT_SHOCK_STORM = GAME_TIME; + NEXT_SHOCK_STORM += FREQ_SHOCK_STORM; + if ((SHOCK_MODE)) + { + } + if (TARG_RANGE < 300) + { + if (GUARD_ELEMENT == "ice") + { + } + if (!(BE_AGGRESSIVE)) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + } + PROJECTILE_LOOP_ON = 0; + PlayAnim("critical", ANIM_SPELL_LOOP); + npcatk_suspend_ai(10.0); + npcatk_suspend_movement(ANIM_SPELL_LOOP, 10.0); + do_shock_storm(); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + } + + void frame_multi_projectile_start() + { + NEXT_PROJECTILE = GetGameTime(); + NEXT_PROJECTILE += FREQ_PROJECTILE; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + PROJ_SPEED = 1500; + HIT_DELAY = 0.2; + PROJECTILE_LOOP_ON = 1; + ScheduleDelayedEvent(5.0, "frame_multi_projectile_end"); + projectile_loop(); + } + + void frame_multi_projectile_end() + { + if (!(PROJECTILE_LOOP_ON)) return; + PROJECTILE_LOOP_ON = 0; + } + + void projectile_loop() + { + if (!(PROJECTILE_LOOP_ON)) return; + do_projectile(); + ScheduleDelayedEvent(0.3, "projectile_loop"); + } + + void frame_projectile() + { + NEXT_PROJECTILE = GetGameTime(); + NEXT_PROJECTILE += FREQ_PROJECTILE; + PROJ_SPEED = 800; + HIT_DELAY = 0.5; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + do_projectile(); + } + + void do_projectile() + { + if (GUARD_ELEMENT == "ice") + { + EmitSound(GetOwner(), 0, SOUND_PROJECTILE, 10); + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = GetEntityOrigin(m_hAttackTarget); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + string TARG_ANG = /* TODO: $angles3d */ $angles3d(TRACE_START, TRACE_LINE); + TARG_ANG = "x"; + if (GetEntityRange(m_hAttackTarget) < 200) + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -200, 110)); + } + if (TRACE_LINE == TRACE_END) + { + int HIT_TARGET = 1; + } + ClientEvent("update", "all", CL_FX_INDEX, "fire_projectile", TARG_ANG, TRACE_END, HIT_TARGET, PROJ_SPEED); + if ((HIT_TARGET)) + { + } + HIT_DELAY("projectile_strike"); + } + if (GUARD_ELEMENT == "fire") + { + TossProjectile("proj_flame_jet2", /* TODO: $relpos */ $relpos(0, 16, 16), m_hAttackTarget, 300, DMG_SPIT, 2, "none"); + ClientEvent("update", "all", CL_FX_INDEX, "staff_glow"); + } + } + + void projectile_strike() + { + DoDamage(m_hAttackTarget, "direct", DMG_STAFF, 1.0, GetOwner()); + if (ICE_GUARD_LEVEL == 2) + { + if (RandomInt(1, 3) == 1) + { + ApplyEffect(m_hAttackTarget, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + } + if (GUARD_ELEMENT == "ice") + { + if (ICE_GUARD_LEVEL == 3) + { + if (RandomInt(1, 5) == 1) + { + ApplyEffect(m_hAttackTarget, "effects/dot_cold_freeze", 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + else + { + ApplyEffect(m_hAttackTarget, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + } + } + } + + void frame_summon() + { + NEXT_ICE_CIRCLE = GetGameTime(); + NEXT_ICE_CIRCLE += FREQ_ICE_CIRCLE; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + if (SUMMON_TYPE == "circle") + { + if ((IsEntityAlive(m_hAttackTarget))) + { + } + if ((false)) + { + } + do_ice_circle(GetEntityOrigin(m_hAttackTarget)); + delay_specials(); + } + } + + void frame_spell() + { + NEXT_ICE_BALL = GetGameTime(); + NEXT_ICE_BALL += FREQ_ICE_BALL; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((METEOR_MODE)) + { + METEOR_MODE = 0; + int EXIT_SUB = 1; + string SPELL_POS = GetEntityOrigin(m_hAttackTarget); + string TRACE_START = SPELL_POS; + string TRACE_END = SPELL_POS; + TRACE_END += "z"; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + string METEOR_SPAWN = TRACE_LINE; + METEOR_SPAWN += "z"; + SpawnNPC("monsters/summon/meteor_deployer", METEOR_SPAWN, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()) + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + } + if ((EXIT_SUB)) return; + if (GUARD_ELEMENT == "ice") + { + if (FLIGHT_HEIGHT > 100) + { + TossProjectile("proj_freezing_sphere", /* TODO: $relpos */ $relpos(0, 16, 64), m_hAttackTarget, 100, 0, 0, "none"); + } + else + { + PASS_FREEZE_DMG = DOT_FROST; + PASS_FREEZE_DUR = 8.0; + SetMoveDest(m_hAttackTarget); + SetAngles("view.pitch"); + SetAngles("view.roll"); + SetAngles("view.yaw"); + TossProjectile("proj_freezing_sphere", /* TODO: $relpos */ $relpos(0, 16, 64), "none", 100, 0, 0, "none"); + } + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + } + if (GUARD_ELEMENT == "fire") + { + if (FIRE_CIRCLE_POS == "unset") + { + CIRCLE_POS_SET = 0; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + } + else + { + BURST_POS = FIRE_CIRCLE_POS; + BURST_POS = "z"; + ClientEvent("new", "all", "effects/sfx_fire_staff", BURST_POS); + BURST_POS += "z"; + XDoDamage(BURST_POS, 96, DMG_FIRE_BURST, 0.01, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:burst"); + CIRCLE_POS_SET = 0; + ANIM_ATTACK = "attack1"; + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + delay_specials(); + } + } + } + + void burst_dodamage() + { + if (!(param1)) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + string TARG_ORG = GetEntityOrigin(param2); + string MY_ORG = BURST_POS; + string TARG_ANG = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, VEL_FBURST_F, 110))); + } + + void flamejet_dodamage() + { + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + + void frame_attack() + { + // PlayRandomSound from: SOUND_SWIPE1, SOUND_SWIPE2 + array sounds = {SOUND_SWIPE1, SOUND_SWIPE2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + MELEE_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_STAFF, 0.9, "slash"); + ATTACK_COUNT += 1; + string DIV_ATTACK_COUNT = ATTACK_COUNT; + DIV_ATTACK_COUNT /= 2; + LogDebug("DIV_ATTACK_COUNT vs. int(DIV_ATTACK_COUNT) [ FLIGHT_HEIGHT ]"); + if (DIV_ATTACK_COUNT == int(DIV_ATTACK_COUNT)) + { + ANIM_ATTACK = ANIM_ATTACK1; + } + else + { + ANIM_ATTACK = ANIM_ATTACK2; + } + if (ATTACK_COUNT == 5) + { + ATTACK_COUNT += 1; + ANIM_ATTACK = ANIM_PUSH; + } + if (ATTACK_COUNT >= 10) + { + ATTACK_COUNT = 0; + ANIM_ATTACK = ANIM_THROW; + } + } + + void frame_attack_push() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + // PlayRandomSound from: SOUND_SWIPE1, SOUND_SWIPE2 + array sounds = {SOUND_SWIPE1, SOUND_SWIPE2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + ANIM_ATTACK = "attack1"; + MELEE_ATTACK = 1; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_LUNGE, 1.0, GetOwner(), GetOwner(), "blunt", "none", "dmgevent:pushatk"); + } + + void pushatk_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (!(SHOCK_MODE)) + { + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + else + { + ApplyEffect(param2, STAFF_ALT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + } + MELEE_ATTACK = 0; + if (!(param1)) return; + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(0, VEL_PUSH_ATK_F, 110)); + } + + void frame_attack_throw() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + // PlayRandomSound from: SOUND_SWIPE_STRONG1, SOUND_SWIPE_STRONG2, SOUND_SWIPE_STRONG3 + array sounds = {SOUND_SWIPE_STRONG1, SOUND_SWIPE_STRONG2, SOUND_SWIPE_STRONG3}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 5); + ANIM_ATTACK = "attack1"; + ATTACK_COUNT += 1; + MELEE_ATTACK = 1; + XDoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_LUNGE, 1.0, GetOwner(), GetOwner(), "blunt", "none", "dmgevent:throwatk"); + } + + void throwatk_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (!(SHOCK_MODE)) + { + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + else + { + ApplyEffect(param2, STAFF_ALT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + } + MELEE_ATTACK = 0; + if (!(param1)) return; + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(VEL_THROW_ATK_L, VEL_THROW_ATK_F, 200)); + ApplyEffect(CUR_TARG, "effects/debuff_stun", 5.0, GetEntityIndex(GetOwner())); + } + + void frame_smash() + { + NEXT_STUN_BURST = GetGameTime(); + NEXT_STUN_BURST += FREQ_STUN_BURST; + delay_specials(); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + ANIM_ATTACK = "attack1"; + BURST_START = /* TODO: $relpos */ $relpos(0, 64, 0); + ClientEvent("new", "all", "effects/sfx_stun_burst", BURST_START, 256, 0); + BURST_TARGS = FindEntitiesInSphere("enemy", 256); + if (!(BURST_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(BURST_TARGS, ";"); i++) + { + burst_affect_targets(); + } + } + + void burst_affect_targets() + { + string CUR_TARG = GetToken(BURST_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/debuff_stun", 8.0, GetEntityIndex(GetOwner())); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = BURST_START; + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + XDoDamage(CUR_TARG, "direct", DMG_BURST, 1.0, GetOwner(), GetOwner(), "none", "blunt"); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, VEL_BURST_F, VEL_BURST_U))); + } + + void frame_long_attack() + { + NEXT_LUNGE = GetGameTime(); + NEXT_LUNGE += FREQ_LUNGE; + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + // PlayRandomSound from: SOUND_SWIPE1, SOUND_SWIPE2 + array sounds = {SOUND_SWIPE1, SOUND_SWIPE2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + ATTACK_RANGE = ATTACK_RANGE_DEF; + ATTACK_HITRANGE = ATTACK_HITRANGE_DEF; + ANIM_ATTACK = "attack1"; + MELEE_ATTACK = 1; + XDoDamage(m_hAttackTarget, LUNGE_RANGE_MAX, DMG_LUNGE, 0.9, GetOwner(), GetOwner(), "slash", "none", "dmgevent:longatk"); + } + + void longatk_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (!(SHOCK_MODE)) + { + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + else + { + ApplyEffect(param2, STAFF_ALT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + } + MELEE_ATTACK = 0; + if (!(param1)) return; + float RND_RL = Random(-200.0, 100.0); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(RND_RL, VEL_LONG_F, 110)); + } + + void game_dodamage() + { + if ((MELEE_ATTACK)) + { + if ((param1)) + { + } + if (!(SHOCK_MODE)) + { + ApplyEffect(param2, ICE_GUARD_DOT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + else + { + ApplyEffect(param2, STAFF_ALT_EFFECT, 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + } + } + MELEE_ATTACK = 0; + } + + void delay_specials() + { + float GAME_TIME = GetGameTime(); + string TIME_PLUS5 = GAME_TIME; + TIME_PLUS5 += 5.0; + if (TIME_PLUS5 > NEXT_STUN_BURST) + { + NEXT_STUN_BURST = GAME_TIME; + NEXT_STUN_BURST += Random(1.0, 5.0); + } + if (TIME_PLUS5 > NEXT_CHARGE) + { + NEXT_CHARGE = GAME_TIME; + NEXT_CHARGE += Random(1.0, 5.0); + } + if (TIME_PLUS5 > NEXT_ICE_BALL) + { + NEXT_ICE_BALL = GAME_TIME; + NEXT_ICE_BALL += Random(1.0, 5.0); + } + if (TIME_PLUS5 > NEXT_ICE_CIRCLE) + { + NEXT_ICE_CIRCLE = GAME_TIME; + NEXT_ICE_CIRCLE += Random(1.0, 5.0); + } + if (TIME_PLUS5 > NEXT_PROJECTILE) + { + NEXT_PROJECTILE = GAME_TIME; + NEXT_PROJECTILE += Random(1.0, 5.0); + } + if (TIME_PLUS5 > NEXT_METEOR) + { + NEXT_METEOR = GAME_TIME; + NEXT_METEOR += Random(1.0, 5.0); + } + } + + void OnDamage(int damage) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 1, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_CALM = GetGameTime(); + NEXT_CALM += 5.0; + if (GetGameTime() > NEXT_DODGE) + { + NEXT_DODGE = GetGameTime(); + NEXT_DODGE += FREQ_DODGE; + PlayAnim("critical", ANIM_DODGE); + PROJECTILE_LOOP_ON = 0; + DODGE_TARGET = param1; + } + if (GetEntityHealth(GetOwner()) < HALF_HP) + { + if (GetGameTime() > NEXT_FLINCH) + { + } + NEXT_FLINCH = GetGameTime(); + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 2, sounds[RandomInt(0, sounds.length() - 1)], 10); + NEXT_FLINCH += FREQ_FLINCH; + ANIM_IDLE = "idle_scared"; + SetIdleAnim("idle_scared"); + PlayAnim("critical", ANIM_FLINCH_CUSTOM); + PROJECTILE_LOOP_ON = 0; + if (!(BE_AGGRESSIVE)) + { + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, -600, 150)); + } + } + } + + void frame_attack_pushr() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(-300, -100, 0)); + EmitSound(GetOwner(), 0, SOUND_DODGE, 10); + if (!(IsEntityAlive(DODGE_TARGET))) return; + if (GetEntityRange(DODGE_TARGET) < 200) + { + AddVelocity(DODGE_TARGET, /* TODO: $relvel */ $relvel(VEL_DODGE_L, VEL_DODGE_F, 110)); + } + } + + void my_target_died() + { + if (!(GetGameTime() > NEXT_TAUNT)) return; + NEXT_TAUNT = GetGameTime(); + NEXT_TAUNT += FREQ_TAUNT; + PlayAnim("critical", ANIM_TAUNT); + PROJECTILE_LOOP_ON = 0; + } + + void do_ice_circle() + { + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + ICE_CIRCLE_ACTIVE = 1; + ICE_CIRCLE_ORIGIN = param1; + ICE_CIRCLE_ORIGIN = "z"; + ClientEvent("new", "all", "effects/sfx_seal", ICE_CIRCLE_ORIGIN, ICE_CIRCLE_FXRAD, 8, 15.0, "freeze_solid"); + ScheduleDelayedEvent(1.0, "ice_circle_loop"); + ScheduleDelayedEvent(15.0, "ice_circle_end"); + } + + void ice_circle_end() + { + ICE_CIRCLE_ACTIVE = 0; + } + + void ice_circle_loop() + { + if (!(ICE_CIRCLE_ACTIVE)) return; + ScheduleDelayedEvent(0.5, "ice_circle_loop"); + CIRCLE_TARGS = FindEntitiesInSphere("enemy", ICE_CIRCLE_RAD); + if (!(CIRCLE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(CIRCLE_TARGS, ";"); i++) + { + circle_affect_targets(); + } + } + + void circle_affect_targets() + { + string CUR_TARG = GetToken(CIRCLE_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_cold_freeze", 8.0, GetEntityIndex(GetOwner()), DOT_FROST); + } + + void staff_mode_switch() + { + if (!(SHOCK_MODE)) + { + SHOCK_MODE = 1; + EmitSound(GetOwner(), 0, SOUND_STAFF_ON, 10); + Effect("beam", "ents", "lgtning.spr", 30, GetOwner(), 2, GetOwner(), 3, STAFF_BEAM_COLOR, 200, 10, FREQ_STAFF_MODE_CHANGE); + } + else + { + SHOCK_MODE = 0; + } + } + + void do_shock_storm() + { + delay_specials(); + SHOCK_STORM_ON = 1; + if (GUARD_ELEMENT == "ice") + { + ClientEvent("update", "all", CL_FX_INDEX, "shock_storm_on"); + shock_storm_loop(); + ScheduleDelayedEvent(10.0, "shock_storm_end"); + Effect("beam", "ents", "lgtning.spr", 60, GetOwner(), 2, GetOwner(), 4, Vector3(128, 128, 255), 200, 60, 10.0); + SHOCK_STORM_BEAM_ID = GetEntityIndex(m_hLastCreated); + SHOCK_TARGS = FindEntitiesInSphere("enemy", 1024); + EmitSound(GetOwner(), 1, SOUND_SHOCK_START, 10); + // svplaysound: svplaysound 3 10 SOUND_SHOCK_LOOP + EmitSound(3, 10, SOUND_SHOCK_LOOP); + CUR_SHOCK_TARG_IDX = 0; + } + if (GUARD_ELEMENT == "fire") + { + npcatk_suspend_roam(10.0); + SetNoPush(true); + string TRACE_START = GetEntityOrigin(GetOwner()); + string TRACE_END = TRACE_START; + TRACE_END += "z"; + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + ClientEvent("update", "all", CL_FX_INDEX, "poison_storm_on", (TRACE_LINE).z); + poison_storm_loop(); + ScheduleDelayedEvent(10.0, "poison_storm_end"); + Effect("beam", "ents", "lgtning.spr", 60, GetOwner(), 2, GetOwner(), 4, STAFF_BEAM_COLOR, 200, 60, 10.0); + SHOCK_STORM_BEAM_ID = GetEntityIndex(m_hLastCreated); + EmitSound(GetOwner(), 1, SOUND_SHOCK_START, 10); + CUR_SHOCK_TARG_IDX = 0; + } + } + + void poison_storm_loop() + { + if (!(SHOCK_STORM_ON)) return; + ScheduleDelayedEvent(0.5, "poison_storm_loop"); + STORM_TARGS = FindEntitiesInSphere("enemy", 768); + if (!(STORM_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(STORM_TARGS, ";"); i++) + { + poison_storm_affect_targets(); + } + } + + void poison_storm_affect_targets() + { + string CUR_TARG = GetToken(STORM_TARGS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), FLAME_JET_DOT); + } + + void poison_storm_end() + { + SetNoPush(false); + SHOCK_STORM_ON = 0; + // svplaysound: svplaysound 3 0 SOUND_SHOCK_LOOP + EmitSound(3, 0, SOUND_SHOCK_LOOP); + ClientEvent("update", "all", CL_FX_INDEX, "poison_storm_end"); + delay_specials(); + } + + void shock_storm_loop() + { + if (!(SHOCK_STORM_ON)) return; + ScheduleDelayedEvent(0.5, "shock_storm_loop"); + if (!(SHOCK_TARGS != "none")) return; + string N_SHOCK_TARGS_M1 = GetTokenCount(SHOCK_TARGS, ";"); + N_SHOCK_TARGS_M1 -= 1; + if (CUR_SHOCK_TARG_IDX > N_SHOCK_TARGS_M1) + { + CUR_SHOCK_TARG_IDX = 0; + } + string CUR_TARG = GetToken(SHOCK_TARGS, CUR_SHOCK_TARG_IDX, ";"); + string TRACE_START = GetEntityProperty(GetOwner(), "attachpos"); + string TRACE_END = GetEntityOrigin(CUR_TARG); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (TRACE_LINE == TRACE_END) + { + EmitSound(GetOwner(), 0, SOUND_SHOCK_HIT, 10); + string L_DOT_SHOCK = DOT_SHOCK; + L_DOT_SHOCK *= 2; + XDoDamage(CUR_TARG, "direct", L_DOT_SHOCK, 1.0, GetOwner(), GetOwner(), "none", "lightning"); + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_SHOCK); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string MY_ORG = GetEntityOrigin(GetOwner()); + string NEW_YAW = /* TODO: $angles */ $angles(MY_ORG, TARG_ORG); + AddVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, VEL_SHOCK_F, 110))); + Effect("beam", "update", SHOCK_STORM_BEAM_ID, "end_target", CUR_TARG); + Effect("beam", "update", SHOCK_STORM_BEAM_ID, "brightness", 200); + } + else + { + Effect("beam", "update", SHOCK_STORM_BEAM_ID, "end_target", GetOwner()); + Effect("beam", "update", SHOCK_STORM_BEAM_ID, "brightness", 0); + } + CUR_SHOCK_TARG_IDX += 1; + } + + void shock_storm_end() + { + SHOCK_STORM_ON = 0; + // svplaysound: svplaysound 3 0 SOUND_SHOCK_LOOP + EmitSound(3, 0, SOUND_SHOCK_LOOP); + ClientEvent("update", "all", CL_FX_INDEX, "shock_storm_end"); + delay_specials(); + } + + void ext_shender_fail() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void set_agro() + { + BE_AGGRESSIVE = 1; + } + +} + +} diff --git a/scripts/angelscript/shender_east/elemental_ice_guardian2.as b/scripts/angelscript/shender_east/elemental_ice_guardian2.as new file mode 100644 index 00000000..fb998dc0 --- /dev/null +++ b/scripts/angelscript/shender_east/elemental_ice_guardian2.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "shender_east/elemental_ice_guardian.as" + +namespace MS +{ + +class ElementalIceGuardian2 : CGameScript +{ + int ATTACK_MOVERANGE_DEF; + int BE_AGRESSIVE; + int DMG_BURST; + int DMG_LUNGE; + int DMG_STAFF; + int DOT_FROST; + float FREQ_PROJECTILE; + float ICE_GUARD_FIRE_VULN; + int ICE_GUARD_HEIGHT; + int ICE_GUARD_HP; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int NPC_BASE_EXP; + string NPC_EXP_REDUCT; + string NPC_IS_BOSS; + + ElementalIceGuardian2() + { + ICE_GUARD_NAME = "Nightmare of Ice"; + ICE_GUARD_HP = 3000; + ICE_GUARD_FIRE_VULN = 0.5; + ICE_GUARD_LEVEL = 2; + ICE_GUARD_MODEL = "monsters/ice_guardian.mdl"; + ICE_GUARD_WIDTH = 32; + ICE_GUARD_HEIGHT = 96; + NPC_BASE_EXP = 1500; + if (StringToLower(GetMapName()) == "tundra") + { + NPC_IS_BOSS = 1; + NPC_EXP_REDUCT = 1.5; + } + DMG_BURST = 100; + DMG_LUNGE = 125; + DMG_STAFF = 75; + DOT_FROST = 35; + ATTACK_MOVERANGE_DEF = 200; + FREQ_PROJECTILE = 3.0; + if (StringToLower(GetMapName()) == "shender_east") + { + } + BE_AGRESSIVE = 1; + } + + void game_precache() + { + Precache("effects/sfx_seal"); + Precache("firemagic_8bit.spr"); + } + +} + +} diff --git a/scripts/angelscript/shender_east/elemental_ice_guardian3.as b/scripts/angelscript/shender_east/elemental_ice_guardian3.as new file mode 100644 index 00000000..390bdd6a --- /dev/null +++ b/scripts/angelscript/shender_east/elemental_ice_guardian3.as @@ -0,0 +1,87 @@ +#pragma context server + +#include "shender_east/elemental_ice_guardian.as" + +namespace MS +{ + +class ElementalIceGuardian3 : CGameScript +{ + int ATTACK_HITRANGE_DEF; + int ATTACK_MOVERANGE_AGRO; + int ATTACK_MOVERANGE_DEF; + int ATTACK_RANGE_DEF; + int BE_AGRESSIVE; + int DMG_BURST; + int DMG_LUNGE; + int DMG_STAFF; + int DOT_FROST; + int DOT_SHOCK; + float FREQ_PROJECTILE; + int ICE_GUARD_FIRE_VULN; + int ICE_GUARD_HEIGHT; + int ICE_GUARD_HP; + int ICE_GUARD_LEVEL; + string ICE_GUARD_MODEL; + string ICE_GUARD_NAME; + int ICE_GUARD_WIDTH; + int LUNGE_RANGE_MAX; + int LUNGE_RANGE_MAX_HITRANGE; + int LUNGE_RANGE_MIN; + int NPC_BASE_EXP; + string NPC_EXP_REDUCT; + string NPC_IS_BOSS; + string OFS_ICE_BALL; + + ElementalIceGuardian3() + { + ICE_GUARD_NAME = "Fell Nightmare of Frost"; + ICE_GUARD_HP = 4000; + ICE_GUARD_FIRE_VULN = 0; + ICE_GUARD_LEVEL = 3; + ICE_GUARD_MODEL = "monsters/ice_guardian2.mdl"; + ICE_GUARD_WIDTH = 48; + ICE_GUARD_HEIGHT = 120; + NPC_BASE_EXP = 5000; + if (StringToLower(GetMapName()) == "tundra") + { + NPC_IS_BOSS = 1; + NPC_EXP_REDUCT = 1.5; + } + SetDamageResistance("lightning", 0.0); + DMG_BURST = 150; + DMG_LUNGE = 150; + DMG_STAFF = 100; + DOT_FROST = 50; + DOT_SHOCK = 75; + ATTACK_MOVERANGE_DEF = 256; + ATTACK_MOVERANGE_AGRO = 70; + ATTACK_RANGE_DEF = 90; + ATTACK_HITRANGE_DEF = 120; + LUNGE_RANGE_MIN = 100; + LUNGE_RANGE_MAX = 225; + LUNGE_RANGE_MAX_HITRANGE = 175; + FREQ_PROJECTILE = Random(8.0, 12.0); + OFS_ICE_BALL = Vector3(0, 16, 80); + if (StringToLower(GetMapName()) == "shender_east") + { + } + BE_AGRESSIVE = 1; + } + + void game_precache() + { + Precache("effects/sfx_seal"); + Precache("firemagic_8bit.spr"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if (!(StringToLower(GetMapName()) == "shender_east")) return; + if (!("game.players.totalhp" < 3000)) return; + CallExternal(GAME_MASTER, "map_shender_east_dream_win"); + } + +} + +} diff --git a/scripts/angelscript/shender_east/fish_killie.as b/scripts/angelscript/shender_east/fish_killie.as new file mode 100644 index 00000000..96d9d374 --- /dev/null +++ b/scripts/angelscript/shender_east/fish_killie.as @@ -0,0 +1,180 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_propelled.as" +#include "monsters/base_fish2.as" + +namespace MS +{ + +class FishKillie : CGameScript +{ + string ANIM_ATK_BIG; + string ANIM_ATK_LEFT; + string ANIM_ATK_RIGHT; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + float ATK_DMG_HIGH; + float ATK_DMG_LOW; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int DELETE_ON_DEATH; + string NPCATK_TARGET; + int NPC_EXTRA_VALIDATIONS; + int NPC_GIVE_EXP; + int NPC_HACKED_MOVE_SPEED; + string PLAYER_LIST; + int PLAYING_DEAD; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_STRUCK4; + string SOUND_STRUCK5; + + FishKillie() + { + NPC_EXTRA_VALIDATIONS = 1; + PLAYING_DEAD = 1; + DELETE_ON_DEATH = 1; + ANIM_IDLE = "idle"; + ANIM_WALK = "swim"; + ANIM_RUN = "thrust"; + ANIM_DEATH = "die1"; + ANIM_ATK_BIG = "srattack1"; + ANIM_ATK_RIGHT = "bite_r"; + ANIM_ATK_LEFT = "bite_l"; + ANIM_FLINCH = "bgflinch"; + SOUND_IDLE1 = "ichy/ichy_idle1.wav"; + SOUND_IDLE2 = "ichy/ichy_idle2.wav"; + SOUND_ATTACK1 = "ichy/ichy_bite1.wav"; + SOUND_ATTACK2 = "ichy/ichy_bite2.wav"; + SOUND_STRUCK1 = "ichy/ichy_pain2.wav"; + SOUND_STRUCK2 = "ichy/ichy_pain3.wav"; + SOUND_STRUCK3 = "ichy/ichy_pain5.wav"; + SOUND_STRUCK4 = "ichy/ichy_pain3.wav"; + SOUND_STRUCK5 = "ichy/ichy_pain5.wav"; + SOUND_DEATH = "ichy/ichy_die2.wav"; + ATTACK_MOVERANGE = 64; + ATTACK_RANGE = 120; + ATTACK_HITRANGE = 180; + ATTACK_HITCHANCE = 0.75; + NPC_HACKED_MOVE_SPEED = 250; + NPC_GIVE_EXP = 1000; + ATK_DMG_LOW = 200.0; + ATK_DMG_HIGH = 500.0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(1.0); + PLAYER_LIST = ""; + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + water_check(); + } + if (m_hAttackTarget == "unset") + { + } + if (Distance(GetMonsterProperty("origin"), NPC_HOME_LOC) > 512) + { + } + npcatk_setmovedest(NPC_HOME_LOC, 32); + } + + void OnSpawn() override + { + SetHealth(2000); + SetWidth(64); + SetHeight(32); + SetName("Nightmare Orca"); + SetHearingSensitivity(10); + SetRoam(true); + SetRace("demon"); + SetInvincible(true); + SetNoPush(true); + SetModel("monsters/killie.mdl"); + } + + void npc_selectattack() + { + int NEXT_ATTACK = RandomInt(0, 2); + if (NEXT_ATTACK == 0) + { + ANIM_ATTACK = ANIM_ATK_BIG; + } + else + { + if (NEXT_ATTACK == 1) + { + ANIM_ATTACK = ANIM_ATK_LEFT; + } + else + { + if (NEXT_ATTACK == 2) + { + ANIM_ATTACK = ANIM_ATK_RIGHT; + } + } + } + } + + void frame_attack() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, Random(ATK_DMG_LOW, ATK_DMG_HIGH), ATTACK_HITCHANCE, "slash"); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + Effect("screenfade", param1, 5, 1, Vector3(255, 0, 0), 255); + string SPAWN_NAME = GetPlayerQuestData(param1, "d"); + // TODO: tospawn PARAM1 SPAWN_NAME + NPCATK_TARGET = "unset"; + } + + void npc_targetvalidate() + { + if (!(IsValidPlayer(m_hAttackTarget))) + { + NPCATK_TARGET = "unset"; + } + if (IsInWater(m_hAttackTarget) < 1) + { + NPCATK_TARGET = "unset"; + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + if (!(m_hAttackTarget != "unset")) return; + if (IsInWater(m_hAttackTarget) == 0) + { + NPCATK_TARGET = "unset"; + } + } + + void water_check() + { + if (!(m_hAttackTarget == "unset")) return; + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if (!(IsInWater(CUR_TARG) > 0)) return; + npcatk_settarget(CUR_TARG); + } + +} + +} diff --git a/scripts/angelscript/shender_east/game_master.as b/scripts/angelscript/shender_east/game_master.as new file mode 100644 index 00000000..bd7233c4 --- /dev/null +++ b/scripts/angelscript/shender_east/game_master.as @@ -0,0 +1,84 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + int GM_BUNNY_KILLED; + string GM_SE_PLAYER_LIST; + int GM_SHENDER_EAST_TELECOUNT; + + void map_shender_east_dream_win() + { + string SLEEP_ELF_ID = FindEntityByName("sleep_elf"); + CallExternal(SLEEP_ELF_ID, "ext_quest_win"); + string QUEST_ELF_ID = FindEntityByName("telf_quest"); + CallExternal(QUEST_ELF_ID, "ext_quest_win"); + UseTrigger("spawn_win_elf"); + GM_SE_PLAYER_LIST = ""; + GetAllPlayers(GM_SE_PLAYER_LIST); + GM_SHENDER_EAST_TELECOUNT = 0; + ScheduleDelayedEvent(1.0, "map_shender_east_win2"); + for (int i = 0; i < GetTokenCount(GM_SE_PLAYER_LIST, ";"); i++) + { + map_shender_east_prepret(); + } + } + + void map_shender_east_win2() + { + for (int i = 0; i < GetTokenCount(GM_SE_PLAYER_LIST, ";"); i++) + { + map_shender_east_return(); + } + } + + void map_shender_east_prepret() + { + string CUR_TARG = GetToken(GM_SE_PLAYER_LIST, i, ";"); + if (!(GetEntityProperty(CUR_TARG, "origin.z") < -3168)) return; + Effect("screenfade", CUR_TARG, 3.0, 1.0, Vector3(255, 255, 255), 255, "fadein"); + } + + void map_shender_east_return() + { + string CUR_TARG = GetToken(GM_SE_PLAYER_LIST, i, ";"); + if (!(GetEntityProperty(CUR_TARG, "origin.z") < -3168)) return; + if (GM_SHENDER_EAST_TELECOUNT > 5) + { + GM_SHENDER_EAST_TELECOUNT = 0; + } + GM_SHENDER_EAST_TELECOUNT += 1; + if (GM_SHENDER_EAST_TELECOUNT == 1) + { + SetEntityOrigin(CUR_TARG, Vector3(1784, -3568, 296)); + } + if (GM_SHENDER_EAST_TELECOUNT == 2) + { + SetEntityOrigin(CUR_TARG, Vector3(1744, -3568, 296)); + } + if (GM_SHENDER_EAST_TELECOUNT == 3) + { + SetEntityOrigin(CUR_TARG, Vector3(1704, -3568, 296)); + } + if (GM_SHENDER_EAST_TELECOUNT == 4) + { + SetEntityOrigin(CUR_TARG, Vector3(1656, -3568, 296)); + } + if (GM_SHENDER_EAST_TELECOUNT == 5) + { + SetEntityOrigin(CUR_TARG, Vector3(1640, -3616, 296)); + } + } + + void gm_shender_east_bunny() + { + SendInfoMsg(param1, "HOW COULD YOU! Poor bunny!"); + GM_BUNNY_KILLED = 1; + ClientEvent("new", param1, "effects/sfx_bunny"); + } + +} + +} diff --git a/scripts/angelscript/shender_east/map_startup.as b/scripts/angelscript/shender_east/map_startup.as new file mode 100644 index 00000000..37848c2c --- /dev/null +++ b/scripts/angelscript/shender_east/map_startup.as @@ -0,0 +1,28 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "shender_east"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "East Shender"); + SetGlobalVar("G_MAP_DESC", "A frozen wasteland that borders The Wall."); + SetGlobalVar("G_MAP_DIFF", "Levels 25-40 / 500-1250hp"); + SetGlobalVar("G_WARN_HP", 500); + SetGlobalVar("G_MORC_CHESTS", 0); + } + +} + +} diff --git a/scripts/angelscript/shender_east/telf_quest.as b/scripts/angelscript/shender_east/telf_quest.as new file mode 100644 index 00000000..0f8752cd --- /dev/null +++ b/scripts/angelscript/shender_east/telf_quest.as @@ -0,0 +1,176 @@ +#pragma context server + +#include "monsters/base_chat_array.as" +#include "monsters/base_npc.as" + +namespace MS +{ + +class TelfQuest : CGameScript +{ + string CHAT_CURRENT_SPEAKER; + int CHAT_USE_CONV_ANIMS; + int DID_INTRO; + string HALF_HP; + string HBAR_ADJ_POS; + int MISSION_COMPLETE; + string NEXT_WARN; + int NPC_BATTLE_ALLY; + int NPC_NO_PLAYER_DMG; + string PLAYER_LIST; + string SOUND_PAIN1; + string SOUND_PAIN2; + + TelfQuest() + { + HBAR_ADJ_POS = Vector3(0, 0, -32); + NPC_NO_PLAYER_DMG = 1; + NPC_BATTLE_ALLY = 1; + CHAT_USE_CONV_ANIMS = 0; + SOUND_PAIN1 = "scientist/getoutalive.wav"; + SOUND_PAIN2 = "scientist/iwoundedbad.wav"; + } + + void OnSpawn() override + { + SetName("Fedrosh the Rammata"); + SetModel("npc/elf_m_wizard.mdl"); + SetWidth(32); + SetHeight(96); + SetIdleAnim("deep_idle"); + SetMoveAnim("deep_idle"); + SetRace("human"); + SetHealth(5000); + SetDamageResistance("all", 0.5); + SetNoPush(true); + if (!(true)) return; + SetName("telf_quest"); + ScheduleDelayedEvent(0.1, "scan_for_players"); + ScheduleDelayedEvent(2.0, "finalize_npc"); + } + + void finalize_npc() + { + HALF_HP = GetEntityMaxHealth(GetOwner()); + HALF_HP *= 0.5; + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((MISSION_COMPLETE)) return; + CallExternal("all", "ext_shender_fail"); + UseTrigger("sound_nightmare_fail"); + PLAYER_LIST = ""; + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + respawn_players(); + } + SendInfoMsg("all", "A CRITIAL NPC HAS DIED! Fedrosh the Rammata is dead."); + ClientCommand("all", "cd fadeout"); + } + + void respawn_players() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + string SPAWN_NAME = GetPlayerQuestData(CUR_TARG, "d"); + // TODO: tospawn CUR_TARG SPAWN_NAME + } + + void scan_for_players() + { + if ((DID_INTRO)) return; + PLAYER_LIST = ""; + GetAllPlayers(PLAYER_LIST); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + check_players(); + } + if ((DID_INTRO)) return; + ScheduleDelayedEvent(1.0, "scan_for_players"); + } + + void check_players() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if ((DID_INTRO)) return; + if (!(GetEntityRange(CUR_TARG) < 256)) return; + DID_INTRO = 1; + CHAT_CURRENT_SPEAKER = CUR_TARG; + ScheduleDelayedEvent(2.0, "do_intro"); + } + + void do_intro() + { + if (GetEntityRace(CHAT_CURRENT_SPEAKER) == "human") + { + if (GetPlayerCount() > 1) + { + chat_now("Children of Torkalath!?", 1.0, "convo_unarmed_norm", "none", "add_to_que"); + } + else + { + chat_now("A child of Torkalath!?", 1.0, "convo_unarmed_norm", "none", "add_to_que"); + } + } + chat_now("Surely the Lord of Might has sent you to save me!", 2.0, "none", "none", "add_to_que"); + chat_now("I am Fedrosh, a Ramatta refugee. I was attacked by Seekers after the location of our stronghold.", 5.0, "none", "none", "add_to_que"); + chat_now("I drove them off, but not before one muttered a curse against me.", 4.0, "none", "none", "add_to_que"); + chat_now("Nothing happened, so I thought it was a bluff. But when I slept that eve, I awoke here.", 5.0, "none", "none", "add_to_que"); + chat_now("Now, each day, nightmarish servants of Felewyn appear and tear me apart!", 5.0, "convo_unarmed_norm", "none", "add_to_que"); + chat_now("My magic does not work here, so I cannot defend myself... But maybe yours will!", 5.0, "none", "nightmare_start", "add_to_que"); + chat_now("By Torkalath! They are coming! Prepare yourselves!", 3.0, "convo_unarmed_panic", "none", "add_to_que"); + } + + void nightmare_start() + { + ScheduleDelayedEvent(1.0, "nightmare_start2"); + } + + void nightmare_start2() + { + SetIdleAnim("cower_idle"); + SetMoveAnim("cower_idle"); + UseTrigger("mm_nightmare_begin"); + } + + void game_targeted_by_player() + { + CallExternal(param1, "ext_show_hbar_monster", GetEntityIndex(GetOwner()), 1); + } + + void OnDamage(int damage) override + { + if ((IsValidPlayer(param1))) + { + SetDamage("dmg"); + SetDamage("hit"); + return; + } + else + { + if (GetGameTime() > NEXT_WARN) + { + } + NEXT_WARN = GetGameTime(); + NEXT_WARN += 30.0; + SendInfoMsg("all", "CRITICAL NPC UNDER ATTACK Fedrosh is under attack!"); + if (GetEntityHealth(GetOwner()) < HALF_HP) + { + } + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void ext_quest_win() + { + MISSION_COMPLETE = 1; + SetInvincible(true); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/shender_east/telf_sleeping.as b/scripts/angelscript/shender_east/telf_sleeping.as new file mode 100644 index 00000000..bd62aec5 --- /dev/null +++ b/scripts/angelscript/shender_east/telf_sleeping.as @@ -0,0 +1,175 @@ +#pragma context server + +namespace MS +{ + +class TelfSleeping : CGameScript +{ + int DOING_LEV; + string PLAYER_LIST; + int QUEST_FAILED; + int TELE_COUNT; + + TelfSleeping() + { + } + + void OnRepeatTimer() + { + SetRepeatDelay(5.0); + if (!(QUEST_FAILED)) + { + } + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 128, 255), 64, 4.9); + } + + void OnSpawn() override + { + SetName("sleep_elf"); + SetName("Sleeping Elf"); + SetModel("npc/elf_m_wizard.mdl"); + SetWidth(32); + SetHeight(32); + SetHealth(1); + SetInvincible(true); + SetIdleAnim("sleep_idle"); + SetMoveAnim("sleep_idle"); + PlayAnim("once", "sleep_idle"); + SetMenuAutoOpen(1); + TELE_COUNT = 0; + SetProp(GetOwner(), "skin", 8); + } + + void game_precache() + { + Precache("bunny.spr"); + Precache("debris/beamstart7.wav"); + } + + void game_menu_getoptions() + { + if ((QUEST_FAILED)) return; + if ((DOING_LEV)) return; + string reg.mitem.title = "Wake Sleeping Elf"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "wake_elf"; + } + + void wake_elf() + { + DOING_LEV = 1; + PlayAnim("hold", "lev"); + EmitSound(GetOwner(), 1, "scientist/sci_fear4.wav", 10); + EmitSound(GetOwner(), 2, "ambience/particle_suck2.wav", 10); + ScheduleDelayedEvent(2.0, "fade_players"); + ScheduleDelayedEvent(3.0, "tele_players"); + PLAYER_LIST = ""; + GetAllPlayers(PLAYER_LIST); + SetProp(GetOwner(), "skin", 9); + } + + void fade_players() + { + EmitSound(GetOwner(), 0, "scientist/scream1.wav", 10); + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + fade_players_go(); + } + } + + void fade_players_go() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if (!(GetEntityRange(CUR_TARG) < 128)) return; + Effect("screenfade", CUR_TARG, 3.0, 1.0, Vector3(255, 255, 255), 255, "fadein"); + } + + void tele_players() + { + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + tele_players_go(); + } + ScheduleDelayedEvent(1.0, "resume_idle"); + } + + void resume_idle() + { + PlayAnim("critical", "sleep_idle"); + SetProp(GetOwner(), "skin", 8); + DOING_LEV = 0; + } + + void tele_players_go() + { + string CUR_TARG = GetToken(PLAYER_LIST, i, ";"); + if (!(GetEntityRange(CUR_TARG) < 384)) return; + if (TELE_COUNT >= 8) + { + TELE_COUNT = 0; + } + if (GetPlayerCount() < 5) + { + if (TELE_COUNT >= 4) + { + TELE_COUNT = 0; + } + } + TELE_COUNT += 1; + if (TELE_COUNT == 1) + { + SetEntityOrigin(CUR_TARG, Vector3(-272, -8, -3720)); + } + if (TELE_COUNT == 2) + { + SetEntityOrigin(CUR_TARG, Vector3(240, -8, -3720)); + } + if (TELE_COUNT == 3) + { + SetEntityOrigin(CUR_TARG, Vector3(-16, -264, -3720)); + } + if (TELE_COUNT == 4) + { + SetEntityOrigin(CUR_TARG, Vector3(-8, -240, -3720)); + } + if (TELE_COUNT == 5) + { + SetEntityOrigin(CUR_TARG, Vector3(-232, -8, -3720)); + } + if (TELE_COUNT == 6) + { + SetEntityOrigin(CUR_TARG, Vector3(220, -8, -3720)); + } + if (TELE_COUNT == 7) + { + SetEntityOrigin(CUR_TARG, Vector3(-16, -234, -3720)); + } + if (TELE_COUNT == 8) + { + SetEntityOrigin(CUR_TARG, Vector3(-8, -210, -3720)); + } + CallExternal(CUR_TARG, "ext_delay_playsound", 0.5, 4, 10, "debris/beamstart7.wav"); + } + + void quest_fail() + { + QUEST_FAILED = 1; + PlayAnim("hold", "deadback"); + SetIdleAnim("deadback"); + SetMoveAnim("deadback"); + SetName("Dead Elf"); + } + + void ext_quest_win() + { + DeleteEntity(GetOwner()); + } + + void ext_shender_fail() + { + quest_fail(); + } + +} + +} diff --git a/scripts/angelscript/shender_east/telf_win.as b/scripts/angelscript/shender_east/telf_win.as new file mode 100644 index 00000000..ce15b914 --- /dev/null +++ b/scripts/angelscript/shender_east/telf_win.as @@ -0,0 +1,141 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class TelfWin : CGameScript +{ + int ATTACH_LHAND; + int ATTACH_RHAND; + int CHAT_USE_CONV_ANIMS; + int MENTIONED_SEEKERS; + + TelfWin() + { + CHAT_USE_CONV_ANIMS = 0; + ATTACH_LHAND = 3; + ATTACH_RHAND = 0; + } + + void OnRepeatTimer() + { + SetRepeatDelay(10.0); + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 128, 255), 32, 9.9); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(90.0); + CallExternal(FindEntityByName("telf_chest"), "chest_glow"); + } + + void OnSpawn() override + { + SetName("Fedrosh the Rammata"); + SetRace("human"); + SetHealth(2000); + SetWidth(32); + SetHeight(96); + SetModel("npc/elf_m_wizard.mdl"); + SetIdleAnim("deep_idle"); + SetMoveAnim("deep_idle"); + SetNoPush(true); + SetInvincible(true); + SetMenuAutoOpen(1); + SetSayTextRange(640); + if (!(true)) return; + SetName("telf_win"); + ScheduleDelayedEvent(2.0, "win_speech"); + ScheduleDelayedEvent(0.1, "pre_glow"); + } + + void pre_glow() + { + ClientEvent("new", "all", "effects/sfx_follow_glow_cl", GetEntityIndex(GetOwner()), Vector3(128, 128, 255), 32, 9.9); + } + + void win_speech() + { + CallExternal(FindEntityByName("telf_chest"), "ext_unlock"); + chat_now("By Torkalath! You did it! You broke the curse!", 3.0, "convo_unarmed_norm", "none", "add_to_que"); + chat_now("Please, take anything from my lock box over there, it's all yours.", 5.0, "none", "none", "add_to_que"); + chat_now("Be sure to take the amulet. With that, you can enter our Melanion enclave.", 5.0, "convo_unarmed_norm", "none", "add_to_que"); + chat_now("I can't promise how hospitable the refugees there will be, to anyone without one.", 5.0, "none", "none", "add_to_que"); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Who are you, exactly?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + string reg.mitem.title = "What do you know of this place?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_detail"; + string reg.mitem.title = "Where is the enclave?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_stronghold"; + if ((MENTIONED_SEEKERS)) + { + string reg.mitem.title = "Seekers?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_seeker"; + } + } + + void say_hi() + { + MENTIONED_SEEKERS = 1; + chat_now("Sorry, my introduction in the dream was a bit rushed, I suppose...", 4.0, "convo_unarmed_norm", "clear_que", "add_to_que"); + chat_now("I am Fedrosh, a follower of Torkalath. I watch over this particular Melenion entrance to the enclave, to keep it safe.", 5.0, "none", "none", "add_to_que"); + chat_now("A few moons ago, I caught a group of Seekers, searching for the entrance.", 3.0, "convo_unarmed_norm", "none", "add_to_que"); + chat_now("I drove them off, but not before one of them placed that nightmare curse on me.", 4.0, "none", "none", "add_to_que"); + chat_now("It seems your efforts broke that curse. My magic is restored, so I should be fine now.", 4.0, "none", "do_spell_trick", "add_to_que"); + } + + void do_spell_trick() + { + PlayAnim("critical", "ref_aim_trip"); + ClientEvent("new", "all", "effects/sfx_beam_sparks", GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()), ATTACH_LHAND, Vector3(255, 255, 0), 1.0); + EmitSound(GetOwner(), 0, "debris/zap1.wav", 5); + } + + void say_seeker() + { + chat_now("I suppose we elves have been isolated for quite some time, so you may not aware of our... Political situation.", 4.0, "convo_unarmed_norm", "clear_que", "add_to_que"); + chat_now("The elven empire, or rather, what remains of it, is essentially divided into three factions:", 4.0, "none", "none", "add_to_que"); + chat_now("The Felewyn elves, who maintain the old traditions, and retain exclusive control over the capital city and the military...", 5.0, "none", "none", "add_to_que"); + chat_now("Those that follow Urdual, also known as the Eshu, who are still somewhat tollerated, and live in the surrounding forests...", 5.0, "none", "none", "add_to_que"); + chat_now("And those such as myself, who follow the God of Strength, Torkalath, also known as the Ramatta.", 4.0, "convo_unarmed_norm", "none", "add_to_que"); + chat_now("Elves from the capital revile Ramatta. They send murderous squads of Seekers: wizards, warriors, and priests, trained to hunt us down.", 5.0, "none", "none", "add_to_que"); + chat_now("They've been seeking our enclave for quite some time. But thus far, I've kept this entrance secure.", 5.0, "none", "none", "add_to_que"); + chat_now("We've children and elderly housed there, but the Seekers are relentless, and would murder them, one and all.", 5.0, "convo_unarmed_panic", "none", "add_to_que"); + } + + void say_stronghold() + { + chat_now("Grateful as I am for your assistance, I'm afraid I'm under an oath, and cannot be very specific about that.", 5.0, "convo_unarmed_norm", "clear_que", "add_to_que"); + chat_now("I can only go so far as to say that one entrance is nearby, and no, it is not inside this house.", 4.0, "none", "none", "add_to_que"); + } + + void say_detail() + { + chat_now("We're fairly close to the south side of The Wall...", 3.0, "convo_unarmed_norm", "clear_que", "add_to_que"); + chat_now("I'm afraid you can't pass beyond it, without going through it - which is quite dangerous, of course.", 5.0, "none", "none", "add_to_que"); + chat_now("Additionally, there are tribes of ice orcs, Marogar, wandering about, no doubt attempting to probe the fortresses for a safe path.", 5.0, "convo_unarmed_norm", "none", "add_to_que"); + chat_now("Oh! And there's also a giant ice construct, of some sort, wandering about the western lake!", 5.0, "convo_unarmed_panic", "none", "add_to_que"); + chat_now("However, it seems it will not accost you, provided you don't wander too close.", 5.0, "none", "none", "add_to_que"); + chat_now("No doubt, it's some ancient creation of a previous age, set to guard something that has long since sunk beneath the ice.", 5.0, "convo_unarmed_norm", "none", "add_to_que"); + chat_now("If you are unfortunate enough to accidentally gain the thing's attention, just keep running. It will tire of chasing you, eventually.", 5.0, "none", "none", "add_to_que"); + } + + void ext_bunny_comment() + { + chat_now("Now... Where has my bunny Hazel run off to?", 5.0, "convo_unarmed_norm", "none", "add_to_que"); + EmitSound(GetOwner(), 0, "scientist/cough.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/shops/base_magic.as b/scripts/angelscript/shops/base_magic.as new file mode 100644 index 00000000..dda45592 --- /dev/null +++ b/scripts/angelscript/shops/base_magic.as @@ -0,0 +1,81 @@ +#pragma context server + +namespace MS +{ + +class BaseMagic : CGameScript +{ + int B_OVERCHARGE; + float B_SELL_RATIO; + string MAGIC_SHOP; + float MICRO_RATIO; + + BaseMagic() + { + MICRO_RATIO = 0.01; + B_SELL_RATIO = 0.25; + B_OVERCHARGE = 200; + } + + void vendor_addstoreitems() + { + ScheduleDelayedEvent(0.1, "bs_supplement"); + } + + void bs_supplement() + { + if (MAGIC_SHOP == "MAGIC_SHOP") + { + MAGIC_SHOP = 1; + } + if (!(MAGIC_SHOP)) return; + if (!(ItemExists(GetOwner(), "sheath_spellbook"))) + { + AddStoreItem(STORE_NAME, "sheath_spellbook", RandomInt(3, 6), B_OVERCHARGE, B_SELL_RATIO); + } + bs_epic_item(); + if (!(OVERCHARGE != "OVERCHARGE")) return; + AddStoreItem(STORE_NAME, "scroll_fire_ball", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_fire_dart", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_fire_wall", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_glow", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_ice_shield", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_ice_wall", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_lightning_chain", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_lightning_storm", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_lightning_weak", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_poison", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_rejuvenate", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_summon_rat", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_summon_undead", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll_volcano", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_acid_xolt", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_blizzard", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_fire_ball", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_fire_dart", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_fire_wall", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_frost_bolt", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_frost_xolt", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_glow", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_ice_blast", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_ice_shield", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_ice_wall", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_lightning_chain", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_lightning_storm", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_lightning_weak", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_poison", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_poison_cloud", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_rejuvenate", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_summon_rat", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_summon_undead", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_turn_undead", 0, B_OVERCHARGE, B_SELL_RATIO); + AddStoreItem(STORE_NAME, "scroll2_volcano", 0, B_OVERCHARGE, B_SELL_RATIO); + } + + void bs_epic_item() + { + } + +} + +} diff --git a/scripts/angelscript/skycastle/game_master.as b/scripts/angelscript/skycastle/game_master.as new file mode 100644 index 00000000..8e4e428c --- /dev/null +++ b/scripts/angelscript/skycastle/game_master.as @@ -0,0 +1,20 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + void gm_bear_god_death() + { + ScheduleDelayedEvent(1.0, "gm_bear_god_death2"); + } + + void gm_bear_god_death2() + { + SpawnNPC("monsters/summon/stun_burst", /* TODO: $relpos */ $relpos(0, 0, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 512, 0, 150 + } + +} + +} diff --git a/scripts/angelscript/skycastle/map_startup.as b/scripts/angelscript/skycastle/map_startup.as new file mode 100644 index 00000000..7449d37c --- /dev/null +++ b/scripts/angelscript/skycastle/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "skycastle"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "Curse of the Bear Gods: Sky Castle by Crow"); + SetGlobalVar("G_MAP_DESC", "The once hollowed home of the fallen Bear Gods."); + SetGlobalVar("G_MAP_DIFF", "Levels 20-35 / 300-500hp"); + SetGlobalVar("G_WARN_HP", 300); + } + +} + +} diff --git a/scripts/angelscript/slithar/lure.as b/scripts/angelscript/slithar/lure.as new file mode 100644 index 00000000..658b5212 --- /dev/null +++ b/scripts/angelscript/slithar/lure.as @@ -0,0 +1,40 @@ +#pragma context server + +namespace MS +{ + +class Lure : CGameScript +{ + int MADE_IT; + + void OnSpawn() override + { + SetModel("null.mdl"); + SetSolid("none"); + SetInvincible(true); + SetRace("beloved"); + ScheduleDelayedEvent(0.1, "slithar_run_loop"); + } + + void slithar_run_loop() + { + if ((MADE_IT)) return; + ScheduleDelayedEvent(0.5, "slithar_run_loop"); + string SLITHAR_ID = FindEntityByName("snake_lord"); + string SLITHAR_RANGE = GetEntityRange(SLITHAR_ID); + string MY_POS = GetMonsterProperty("origin"); + string MY_ID = GetEntityIndex(GetOwner()); + if ((MADE_IT)) return; + CallExternal(SLITHAR_ID, "slithar_to_me", MY_POS, SLITHAR_RANGE, MY_ID); + } + + void slithar_made_it() + { + MADE_IT = 1; + SetAlive(0); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/slithar/lure_tele.as b/scripts/angelscript/slithar/lure_tele.as new file mode 100644 index 00000000..cb7d3fb8 --- /dev/null +++ b/scripts/angelscript/slithar/lure_tele.as @@ -0,0 +1,56 @@ +#pragma context server + +namespace MS +{ + +class LureTele : CGameScript +{ + int MADE_IT; + + void OnSpawn() override + { + SetModel("null.mdl"); + SetSolid("none"); + SetInvincible(true); + SetRace("beloved"); + ScheduleDelayedEvent(0.1, "slithar_run_loop"); + ScheduleDelayedEvent(10.0, "slithar_cant_make_it"); + } + + void slithar_run_loop() + { + if ((MADE_IT)) return; + ScheduleDelayedEvent(0.5, "slithar_run_loop"); + string SLITHAR_ID = FindEntityByName("snake_lord"); + string SLITHAR_RANGE = GetEntityRange(SLITHAR_ID); + string MY_POS = GetMonsterProperty("origin"); + string MY_ID = GetEntityIndex(GetOwner()); + if ((MADE_IT)) return; + CallExternal(SLITHAR_ID, "slithar_to_me", MY_POS, SLITHAR_RANGE, MY_ID); + } + + void slithar_made_it() + { + MADE_IT = 1; + SetAlive(0); + DeleteEntity(GetOwner()); + } + + void slithar_cant_make_it() + { + if ((MADE_IT)) return; + MADE_IT = 1; + tele_slithar(); + } + + void tele_slithar() + { + SetName("slithar_lure"); + string SLITHAR_NAME = FindEntityByName("snake_lord"); + string SLITHAR_ID = GetEntityIndex(SLITHAR_NAME); + CallExternal(SLITHAR_ID, "slithar_escape"); + } + +} + +} diff --git a/scripts/angelscript/slithar/resume.as b/scripts/angelscript/slithar/resume.as new file mode 100644 index 00000000..fbbf6cc3 --- /dev/null +++ b/scripts/angelscript/slithar/resume.as @@ -0,0 +1,32 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class Resume : CGameScript +{ + float DEATH_DELAY; + int PLAYING_DEAD; + + Resume() + { + DEATH_DELAY = 10.0; + PLAYING_DEAD = 1; + } + + void OnSpawn() override + { + ScheduleDelayedEvent(0.1, "send_resume"); + } + + void send_resume() + { + string SLITHAR_ID = FindEntityByName("snake_lord"); + CallExternal(SLITHAR_ID, "slithar_resume"); + } + +} + +} diff --git a/scripts/angelscript/slithar/slithar.as b/scripts/angelscript/slithar/slithar.as new file mode 100644 index 00000000..341bb738 --- /dev/null +++ b/scripts/angelscript/slithar/slithar.as @@ -0,0 +1,962 @@ +#pragma context server + +#include "monsters/base_monster_new.as" + +namespace MS +{ + +class Slithar : CGameScript +{ + string ANIM_ATTACK; + string ANIM_ATTACK_CROUCH; + string ANIM_ATTACK_STAND; + string ANIM_CRAWL; + string ANIM_DEATH; + int ANIM_HITRANGE; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_IDLE_CROUCH; + string ANIM_IDLE_NORM; + string ANIM_JUMP; + int ANIM_MOVERANGE; + int ANIM_RANGE; + string ANIM_RUN; + string ANIM_RUNFAST; + string ANIM_SEARCH; + string ANIM_SUMMON; + string ANIM_WALK; + string ANIM_WALKSLOW; + float ATTACK_HITCHANCE; + int BEAM_STAGE; + string CKN_MY_OLD_POS; + string CYCLE_TIME; + string DID_ESCAPE; + int DID_INTRO; + int ESCAPE_SCENE; + string ESCAPE_START; + int FADE_COUNT; + int FADE_OUT_COUNT; + string FIRST_VICTIM; + string FLEE_DIR; + int IS_UNHOLY; + int I_AM_TURNABLE; + int JUMP_AWAY_RANGE; + float JUMP_FREQ; + int LOOKING_FOR_PLAYERS; + string LURE_ANG; + string LURE_ID; + string LURE_JUMP_DELAY; + string LURE_NAME; + string LURE_YAW; + string MONSTER_MODEL; + string MY_SKELETON; + float NPC_BOSS_RESTORATION; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + float POISON_DAMAGE; + float POISON_DURATION; + string SAID_ESCAPE; + string SKELETON_SCRIPT; + string SNAKE_SCRIPT; + int SNAKE_SLOT; + string SOUND_ALERT; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_CHANT; + string SOUND_DEATH; + string SOUND_IDLE1; + string SOUND_IDLE2; + string SOUND_IDLE3; + string SOUND_IDLE4; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN_WEAK1; + string SOUND_PAIN_WEAK2; + string SOUND_STAFF_HIT; + string SOUND_STAFF_MISS; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_SUMMON; + int STAFF_DAMAGE; + int STAFF_STRIKE; + string STRIKE_STUN; + string SUMMONING; + int SUMMON_SKELETON; + float SUMMON_SKEL_FREQ; + int SUMMON_SNAKE; + float SUMMON_SNAKE_FREQ; + int SUSPEND_AI; + int TELED_OUT; + + Slithar() + { + IS_UNHOLY = 1; + if (StringToLower(GetMapName()) == "bloodrose") + { + NPC_GIVE_EXP = 1500; + NPC_IS_BOSS = 1; + } + else + { + NPC_GIVE_EXP = 400; + } + NPC_BOSS_RESTORATION = 1.0; + precache_summons(); + JUMP_FREQ = 3.0; + ANIM_IDLE = "deep_idle"; + ANIM_IDLE_NORM = "deep_idle"; + ANIM_CRAWL = "crawl"; + ANIM_IDLE_CROUCH = "crouch_aim_serpentstaff"; + ANIM_SEARCH = "looK_idle"; + ANIM_HOP = "jump"; + ANIM_JUMP = "long_jump"; + JUMP_AWAY_RANGE = 160; + ANIM_DEATH = "headshot"; + ANIM_MOVERANGE = 30; + ANIM_HITRANGE = 120; + ANIM_RANGE = 80; + ANIM_WALK = "walk2handed"; + ANIM_RUN = "walk2handed"; + ANIM_WALKSLOW = "walk2handed"; + ANIM_RUNFAST = "run2"; + ATTACK_HITCHANCE = 0.8; + ANIM_ATTACK = "ref_shoot_serpentstaff"; + ANIM_ATTACK_STAND = "ref_shoot_serpentstaff"; + ANIM_ATTACK_CROUCH = "crouch_shoot_serpentstaff"; + ANIM_SUMMON = "cast_serpentstaff"; + STAFF_DAMAGE = "$rand(10,30)"; + POISON_DAMAGE = "$randf(20,30)"; + POISON_DURATION = "$randf(3,8)"; + SKELETON_SCRIPT = "monsters/skeleton_poison_random"; + SNAKE_SCRIPT = "monsters/snake_cursed"; + SOUND_ALERT = "monsters/snakeman/sm_alert2.wav"; + SOUND_ATTACK1 = "monsters/snakeman/sm_attack1.wav"; + SOUND_ATTACK2 = "monsters/snakeman/sm_attack2.wav"; + SOUND_ATTACK3 = "monsters/snakeman/sm_attack3.wav"; + SOUND_IDLE1 = "monsters/snakeman/sm_idle1.wav"; + SOUND_IDLE2 = "monsters/snakeman/sm_idle2.wav"; + SOUND_IDLE3 = "monsters/snakeman/sm_idle3.wav"; + SOUND_IDLE4 = "monsters/snakeman/sm_alert3.wav"; + SOUND_PAIN1 = "monsters/snakeman/sm_pain1.wav"; + SOUND_PAIN2 = "monsters/snakeman/sm_pain2.wav"; + SOUND_PAIN_WEAK1 = "monsters/snakeman/sm_pain3.wav"; + SOUND_PAIN_WEAK2 = "monsters/snakeman/sm_die2.wav"; + SOUND_CHANT = "monsters/snakeman/sm_summon.wav"; + SOUND_DEATH = "monsters/snakeman/sm_die1.wav"; + Precache(SOUND_DEATH); + SOUND_SUMMON = "magic/spawn.wav"; + SOUND_STRUCK1 = "debris/flesh1.wav"; + SOUND_STRUCK2 = "debris/flesh2.wav"; + SOUND_STAFF_MISS = "zombie/claw_miss1.wav"; + SOUND_STAFF_HIT = "zombie/claw_strike1.wav"; + SUMMON_SKEL_FREQ = 90.0; + SUMMON_SNAKE_FREQ = 7.0; + I_AM_TURNABLE = 0; + MONSTER_MODEL = "monsters/snakeman.mdl"; + Precache(MONSTER_MODEL); + } + + void OnSpawn() override + { + if ((GENERIC_LORD)) return; + SetName("snake_lord"); + SetName("Slithar , the Snake Lord"); + SetRace("demon"); + SetHealth(3000); + if (GetMapName() == "slithar_test") + { + SetHealth(1501); + } + SetWidth(32); + SetHeight(84); + SetRoam(false); + Precache(MONSTER_MODEL); + SetModel(MONSTER_MODEL); + SetIdleAnim(ANIM_IDLE_CROUCH); + SetHearingSensitivity(10); + SetInvincible(true); + SetDamageResistance("poison", 0.0); + SetDamageResistance("cold", 1.25); + SetDamageResistance("fire", 0.5); + SetDamageResistance("holy", 1.5); + if (GetMapName() != "slithar_test") + { + GiveItem(GetOwner(), "blunt_snake_staff"); + } + npcatk_suspend_ai(param1, "start"); + LOOKING_FOR_PLAYERS = 1; + look_for_players(); + SNAKE_SLOT = 0; + } + + void look_for_players() + { + if (!(LOOKING_FOR_PLAYERS)) return; + if (!(DID_INTRO)) + { + if ((CanSee("enemy", 300))) + { + } + me_pouncie(GetEntityIndex(m_hLastSeen)); + int EXIT_SUB = 1; + } + ScheduleDelayedEvent(1.0, "look_for_players"); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if ((GENERIC_LORD)) return; + if (!(LOOKING_FOR_PLAYERS)) return; + string LASTHEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(IsValidPlayer(LASTHEARD_ID))) return; + if (!(GetEntityRange(LASTHEARD_ID) < 300)) return; + me_pouncie(LASTHEARD_ID); + } + + void me_pouncie() + { + if (!(LOOKING_FOR_PLAYERS)) return; + LOOKING_FOR_PLAYERS = 0; + SetMoveDest(param1); + EmitSound(GetOwner(), 0, SOUND_ALERT, 10); + SetSayTextRange(2048); + SayText("Ahhhh my childrensss you have come to die, yessss?"); + ScheduleDelayedEvent(3.0, "intro_jump_down"); + FIRST_VICTIM = param1; + } + + void intro_jump_down() + { + SetMoveAnim(ANIM_HOP); + SetIdleAnim(ANIM_IDLE); + EmitSound(GetOwner(), 0, SOUND_IDLE2, 10); + SetMoveDest(/* TODO: $relpos */ $relpos(0, 128, 0)); + ScheduleDelayedEvent(0.1, "hop_boost"); + PlayAnim("critical", ANIM_HOP); + } + + void hop_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 300, 40)); + } + + void jump_done() + { + if ((DID_INTRO)) return; + go_stand(); + ANIM_RUN = ANIM_RUNFAST; + SetMoveAnim(ANIM_RUNFAST); + DID_INTRO = 1; + SetSayTextRange(2048); + SayText("Thissss can be arranged. Yessss...."); + SetInvincible(false); + SetRoam(true); + CYCLE_TIME = CYCLE_TIME_BATTLE; + npcatk_resume_ai(param1, "intro_jump_done"); + npcatk_settarget(FIRST_VICTIM); + SUMMON_SNAKE_FREQ = 2.0; + ScheduleDelayedEvent(25.0, "snake_slowdown"); + ScheduleDelayedEvent(30.0, "summon_skeleton"); + ScheduleDelayedEvent(5.0, "summon_snake"); + idle_sounds(); + } + + void snake_slowdown() + { + ANIM_WALK = ANIM_WALKSLOW; + ANIM_RUN = ANIM_WALKSLOW; + if (!(ESCAPE_SCENE)) + { + SetMoveAnim(ANIM_WALK); + } + SUMMON_SNAKE_FREQ = 5.0; + } + + void idle_sounds() + { + Random(5, 10)("idle_sounds"); + if (!(false)) + { + // PlayRandomSound from: SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE1, SOUND_IDLE3, SOUND_IDLE4 + array sounds = {SOUND_IDLE1, SOUND_IDLE2, SOUND_IDLE3, SOUND_IDLE4, SOUND_IDLE1, SOUND_IDLE3, SOUND_IDLE4}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + + void summon_snake() + { + go_stand(); + if ((CanSee("enemy", JUMP_AWAY_RANGE))) + { + if (!(SUMMON_SKELETON)) + { + } + jump_away(); + STRIKE_STUN = 1; + ScheduleDelayedEvent(1.0, "summon_snake"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + STRIKE_STUN = 0; + SUMMON_SNAKE_FREQ("summon_snake"); + if (m_hAttackTarget == "unset") + { + int TOTAL_SNAKES = 0; + if ((IsEntityAlive(SNAKE_SLOT1))) + { + TOTAL_SNAKES += 1; + } + if ((IsEntityAlive(SNAKE_SLOT2))) + { + TOTAL_SNAKES += 1; + } + if ((IsEntityAlive(SNAKE_SLOT3))) + { + TOTAL_SNAKES += 1; + } + if ((IsEntityAlive(SNAKE_SLOT4))) + { + TOTAL_SNAKES += 1; + } + if ((IsEntityAlive(SNAKE_SLOT5))) + { + TOTAL_SNAKES += 1; + } + if (TOTAL_SNAKES >= 5) + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if ((SUMMON_SKELETON)) return; + if ((SUMMONING)) return; + if ((ESCAPE_SCENE)) return; + SUMMON_SNAKE = 1; + EmitSound(GetOwner(), 0, SOUND_CHANT, 10); + PlayAnim("critical", ANIM_SUMMON); + } + + void summon_skeleton() + { + go_stand(); + if ((CanSee("enemy", JUMP_AWAY_RANGE))) + { + jump_away(); + STRIKE_STUN = 1; + ScheduleDelayedEvent(1.0, "summon_skeleton"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + STRIKE_STUN = 0; + SUMMON_SKEL_FREQ("summon_skeleton"); + SUMMON_SNAKE = 0; + SUMMON_SKELETON = 1; + if ((ESCAPE_SCENE)) return; + EmitSound(GetOwner(), 0, SOUND_CHANT, 10); + PlayAnim("critical", ANIM_SUMMON); + } + + void spell_strike() + { + if ((ESCAPE_SCENE)) return; + if ((SUMMON_SKELETON)) + { + SUMMON_SKELETON = 0; + SUMMONING = 1; + ScheduleDelayedEvent(3.0, "reset_summoning"); + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + if ((IsEntityAlive(MY_SKELETON))) + { + CallExternal(MY_SKELETON, "npc_fade_away"); + } + SpawnNPC(SKELETON_SCRIPT, /* TODO: $relpos */ $relpos(0, 48, 5), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + Effect("glow", m_hLastCreated, Vector3(0, 255, 0), 200, 2, 2); + MY_SKELETON = GetEntityIndex(m_hLastCreated); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((SUMMON_SNAKE)) + { + SUMMON_SNAKE = 0; + SUMMONING = 1; + ScheduleDelayedEvent(3.0, "reset_summoning"); + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + SNAKE_SLOT += 1; + if (SNAKE_SLOT > 5) + { + SNAKE_SLOT = 1; + } + if (SNAKE_SLOT == 1) + { + if ((IsEntityAlive(SNAKE_SLOT1))) + { + CallExternal(SNAKE_SLOT1, "npc_fade_away"); + } + } + if (SNAKE_SLOT == 2) + { + if ((IsEntityAlive(SNAKE_SLOT2))) + { + CallExternal(SNAKE_SLOT2, "npc_fade_away"); + } + } + if (SNAKE_SLOT == 3) + { + if ((IsEntityAlive(SNAKE_SLOT3))) + { + CallExternal(SNAKE_SLOT3, "npc_fade_away"); + } + } + if (SNAKE_SLOT == 4) + { + if ((IsEntityAlive(SNAKE_SLOT4))) + { + CallExternal(SNAKE_SLOT4, "npc_fade_away"); + } + } + if (SNAKE_SLOT == 5) + { + if ((IsEntityAlive(SNAKE_SLOT5))) + { + CallExternal(SNAKE_SLOT5, "npc_fade_away"); + } + } + SpawnNPC(SNAKE_SCRIPT, /* TODO: $relpos */ $relpos(0, 64, 5), ScriptMode::Legacy); + Effect("glow", m_hLastCreated, Vector3(0, 255, 0), 100, 1, 1); + CallExternal(m_hLastCreated, "npcatk_settarget", m_hAttackTarget, "my_master"); + if (SNAKE_SLOT == 1) + { + SNAKE_SLOT1 = GetEntityIndex(m_hLastCreated); + } + if (SNAKE_SLOT == 2) + { + SNAKE_SLOT2 = GetEntityIndex(m_hLastCreated); + } + if (SNAKE_SLOT == 3) + { + SNAKE_SLOT3 = GetEntityIndex(m_hLastCreated); + } + if (SNAKE_SLOT == 4) + { + SNAKE_SLOT4 = GetEntityIndex(m_hLastCreated); + } + if (SNAKE_SLOT == 5) + { + SNAKE_SLOT5 = GetEntityIndex(m_hLastCreated); + } + } + if (RandomInt(1, 2) == 1) + { + go_crawl(); + } + } + + void reset_summoning() + { + SUMMONING = 0; + } + + void jump_away() + { + if ((ESCAPE_SCENE)) return; + go_stand(); + SetMoveAnim(ANIM_JUMP); + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + SetMoveDest(GetEntityIndex(m_hAttackTarget)); + ScheduleDelayedEvent(0.1, "long_jump_boost"); + npcatk_suspend_ai(1.5, "jump_away"); + } + + void long_jump_boost() + { + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, 400, 50)); + } + + void long_jump_done() + { + npcatk_resume_ai(param1, "long_jump_done"); + npcatk_settarget(m_hAttackTarget); + } + + void skeleton_died() + { + EmitSound(GetOwner(), 0, "monsters/snakeman/sm_alert4.wav", 10); + SetSayTextRange(2048); + SayText("Curse you!"); + } + + void skeleton_stuck() + { + summon_skeleton(); + } + + void staff_strike() + { + npcatk_dodamage(NPCATK_ATARGET, ATTACK_HITRANGE, STAFF_DAMAGE, ATTACK_HITCHANCE, GetOwner()); + STAFF_STRIKE = 1; + if (RandomInt(1, 10) == 1) + { + go_crawl(); + } + } + + void crouch_strike() + { + npcatk_dodamage(NPCATK_ATARGET, ATTACK_HITRANGE, STAFF_DAMAGE, ATTACK_HITCHANCE, GetOwner()); + STAFF_STRIKE = 1; + if (RandomInt(1, 5) == 1) + { + go_stand(); + } + } + + void game_dodamage() + { + if (!(STAFF_STRIKE)) return; + if ((param1)) + { + EmitSound(GetOwner(), 0, SOUND_STAFF_HIT, 10); + if (!(STRIKE_STUN)) + { + ApplyEffect(m_hAttackTarget, "effects/dot_poison", POISON_DURATION, GetEntityIndex(GetOwner()), POISON_DAMAGE); + } + if ((STRIKE_STUN)) + { + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 5, GetEntityIndex(GetOwner())); + } + } + if (!(param1)) + { + EmitSound(GetOwner(), 0, SOUND_STAFF_MISS, 10); + } + STAFF_STRIKE = 0; + } + + void go_crawl() + { + ANIM_ATTACK = ANIM_ATTACK_CROUCH; + ANIM_WALK = ANIM_WALKSLOW; + ANIM_RUN = ANIM_CRAWL; + ANIM_IDLE = ANIM_IDLE_CROUCH; + if (!(ESCAPE_SCENE)) + { + SetMoveAnim(ANIM_WALK); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + } + + void go_stand() + { + ANIM_ATTACK = ANIM_ATTACK_STAND; + ANIM_WALK = ANIM_WALKSLOW; + ANIM_RUN = ANIM_WALKSLOW; + if (GetMonsterHP() < 2000) + { + ANIM_RUN = ANIM_RUNFAST; + } + ANIM_IDLE = ANIM_IDLE_NORM; + if (!(ESCAPE_SCENE)) + { + SetMoveAnim(ANIM_WALK); + } + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_RUN); + } + + void npc_pre_flee() + { + go_stand(); + ANIM_RUN = ANIM_RUNFAST; + } + + void npcatk_stopflee() + { + ANIM_RUN = ANIM_WALKSLOW; + if (!(ESCAPE_SCENE)) + { + SetMoveAnim(ANIM_WALK); + } + go_stand(); + } + + void chicken_run_end() + { + ANIM_RUN = ANIM_WALKSLOW; + if (!(ESCAPE_SCENE)) + { + SetMoveAnim(ANIM_WALK); + } + go_stand(); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if (GetMonsterHP() < 1500) + { + if (!(GENERIC_LORD)) + { + } + if (!(DID_ESCAPE)) + { + } + DID_ESCAPE = 1; + SetInvincible(true); + if (!(GENERIC_LORD)) + { + UseTrigger("slithar_half"); + } + } + if (!(param1 > 30)) return; + if (param1 < 100) + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK1, SOUND_STRUCK2 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_STRUCK1, SOUND_STRUCK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if (param1 >= 100) + { + // PlayRandomSound from: SOUND_PAIN_WEAK1, SOUND_PAIN_WEAK2 + array sounds = {SOUND_PAIN_WEAK1, SOUND_PAIN_WEAK2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + ScheduleDelayedEvent(1.0, "jump_away"); + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetSayTextRange(2048); + if (!(GENERIC_LORD)) + { + UseTrigger("flesheater_door"); + } + string FINDLE = FindEntityByName("npc_findlebind"); + if (((FINDLE !is null))) + { + CallExternal(FINDLE, "slithar_died"); + } + CallExternal(SNAKE_SLOT1, "npc_fade_away"); + CallExternal(SNAKE_SLOT2, "npc_fade_away"); + CallExternal(SNAKE_SLOT3, "npc_fade_away"); + CallExternal(SNAKE_SLOT4, "npc_fade_away"); + CallExternal(SNAKE_SLOT5, "npc_fade_away"); + CallExternal(MY_SKELETON, "npc_fade_away"); + } + + void precache_summons() + { + Precache("debris/bustflesh1.wav"); + Precache("monsters/snake_idle1.wav"); + Precache("monsters/snake_idle2.wav"); + Precache("bullchicken/bc_bite2.wav"); + Precache("monsters/snake_pain1.wav"); + Precache("monsters/snake_pain2.wav"); + Precache("monsters/snakeman/sm_alert1.wav"); + Precache("debris/flesh2.wav"); + Precache("monsters/csnake.mdl"); + Precache("body/armour1.wav"); + Precache("body/armour2.wav"); + Precache("body/armour3.wav"); + Precache("bullchicken/bc_attack1.wav"); + Precache("bullchicken/bc_attack2.wav"); + Precache("bullchicken/bc_attack3.wav"); + Precache("ambience/steamburst1.wav"); + Precache("player/heartbeat_noloop.wav"); + Precache("monsters/skeleton_enraged.mdl"); + Precache("monsters/skeleton.mdl"); + Precache("poison_cloud.spr"); + Precache("cactusgibs.mdl"); + Precache("weapons/cbar_hitbod1.wav"); + Precache("weapons/cbar_hitbod2.wav"); + Precache("weapons/cbar_hitbod3.wav"); + Precache("zombie/zo_pain2.wav"); + Precache("zombie/zo_pain2.wav"); + Precache("zombie/claw_miss1.wav"); + Precache("zombie/claw_miss2.wav"); + Precache("zombie/zo_pain1.wav"); + Precache("ambience/the_horror1.wav"); + Precache("ambience/the_horror2.wav"); + Precache("ambience/the_horror3.wav"); + Precache("ambience/the_horror4.wav"); + Precache("doors/aliendoor1.wav"); + } + + void slithar_escape() + { + TELED_OUT = 1; + LURE_NAME = FindEntityByName("slithar_lure"); + LURE_ID = GetEntityIndex(LURE_NAME); + LURE_ANG = GetEntityAngles(LURE_ID); + LURE_YAW = /* TODO: $vec.yaw */ $vec.yaw(LURE_ANG); + if (!(SAID_ESCAPE)) + { + SAID_ESCAPE = 1; + SayText("I'll not make it that eassssy for you..."); + } + npcatk_suspend_ai(param1, "escape1"); + ESCAPE_SCENE = 1; + SetInvincible(true); + FADE_OUT_COUNT = 200; + slithar_fade_out(); + SetMoveAnim(ANIM_IDLE_NORM); + SetIdleAnim(ANIM_IDLE_NORM); + ANIM_RUN = ANIM_IDLE_NORM; + ANIM_WALK = ANIM_IDLE_NORM; + ANIM_IDLE = ANIM_IDLE_NORM; + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_SUMMON); + BEAM_STAGE = 0; + ESCAPE_START = GetMonsterProperty("origin"); + slithar_beam_cycle(); + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + SetMoveAnim(ANIM_SUMMON); + SetIdleAnim(ANIM_SUMMON); + SetMoveDest(LURE_ID); + ScheduleDelayedEvent(0.25, "slithar_beams"); + } + + void slithar_beams() + { + string BEAM_SPRITE = "lgtning.spr"; + string START_X = (ESCAPE_START).x; + string START_Y = (ESCAPE_START).y; + string START_Z = (ESCAPE_START).z; + START_Z -= 64; + int BEAM_WIDTH = 200; + Vector3 BEAM_START = Vector3(START_X, START_Y, START_Z); + string BEAM_END = BEAM_START; + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 256)); + Vector3 BEAM_COLOR = Vector3(255, 255, 255); + int BEAM_BRIGHTNESS = 200; + int BEAM_NOISE = 30; + float BEAM_DURATION = 4.0; + Effect("beam", "point", BEAM_SPRITE, BEAM_WIDTH, BEAM_START, BEAM_END, BEAM_COLOR, BEAM_BRIGHTNESS, BEAM_NOISE, BEAM_DURATION); + string END_POS = GetEntityOrigin(LURE_ID); + string START_X = (END_POS).x; + string START_Y = (END_POS).y; + string START_Z = (END_POS).z; + START_Z -= 64; + int BEAM_WIDTH = 200; + Vector3 BEAM_START = Vector3(START_X, START_Y, START_Z); + string BEAM_END = BEAM_START; + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 256)); + Vector3 BEAM_COLOR = Vector3(255, 255, 255); + int BEAM_BRIGHTNESS = 200; + int BEAM_NOISE = 30; + float BEAM_DURATION = 4.0; + Effect("beam", "point", BEAM_SPRITE, BEAM_WIDTH, BEAM_START, BEAM_END, BEAM_COLOR, BEAM_BRIGHTNESS, BEAM_NOISE, BEAM_DURATION); + } + + void slithar_beam_cycle() + { + if (!(BEAM_STAGE < 6)) return; + BEAM_STAGE += 1; + ScheduleDelayedEvent(0.4, "slithar_beam_cycle"); + string BEAM_SPRITE = "lgtning.spr"; + int BEAM_WIDTH = 200; + string BEAM_START = ESCAPE_START; + string BEAM_END = GetEntityOrigin(LURE_ID); + BEAM_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 32)); + Vector3 BEAM_COLOR = Vector3(0, 255, 0); + if (BEAM_STAGE == 1) + { + int BEAM_BRIGHTNESS = 20; + } + if (BEAM_STAGE == 2) + { + int BEAM_BRIGHTNESS = 100; + } + if (BEAM_STAGE == 3) + { + int BEAM_BRIGHTNESS = 255; + } + if (BEAM_STAGE == 4) + { + int BEAM_BRIGHTNESS = 100; + } + if (BEAM_STAGE == 5) + { + int BEAM_BRIGHTNESS = 50; + } + int BEAM_NOISE = 5; + float BEAM_DURATION = 0.5; + Effect("beam", "point", BEAM_SPRITE, BEAM_WIDTH, BEAM_START, BEAM_END, BEAM_COLOR, BEAM_BRIGHTNESS, BEAM_NOISE, BEAM_DURATION); + Effect("tempent", "trail", "poison.spr", /* TODO: $relpos */ $relpos(0, 0, 64), /* TODO: $relpos */ $relpos(0, 0, 96), 20, 1, 1, 20, 5); + } + + void slithar_fade_out() + { + if (FADE_OUT_COUNT <= 0) + { + SetMoveAnim(ANIM_IDLE_NORM); + SetIdleAnim(ANIM_IDLE_NORM); + slithar_escape_tele(); + } + if (!(FADE_OUT_COUNT > 0)) return; + ScheduleDelayedEvent(0.1, "slithar_fade_out"); + FADE_OUT_COUNT -= 10; + SetProp(GetOwner(), "rendermode", 2); + SetProp(GetOwner(), "renderamt", FADE_OUT_COUNT); + } + + void slithar_escape_tele() + { + SetMoveAnim(ANIM_IDLE_NORM); + SetIdleAnim(ANIM_IDLE_NORM); + ANIM_RUN = ANIM_IDLE_NORM; + ANIM_WALK = ANIM_IDLE_NORM; + ANIM_IDLE = ANIM_IDLE_NORM; + PlayAnim("once", "break"); + PlayAnim("once", ANIM_IDLE_NORM); + stop_moving_damnit(); + SetMoveSpeed(0.0); + SetRoam(false); + SetEntityOrigin(GetOwner(), GetEntityOrigin(LURE_ID)); + SetAngles("face"); + FADE_COUNT = 0; + EmitSound(GetOwner(), 0, SOUND_SUMMON, 10); + slithar_fade_in(); + string SPLUGE_START = GetEntityOrigin(LURE_ID); + string SPLUGE_DEST = SPLUGE_START; + SPLUGE_DEST += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 200)); + Effect("tempent", "trail", "poison.spr", SPLUGE_START, SPLUGE_DEST, 20, 1, 5, 20, 5); + UseTrigger("slithar_escaped"); + DeleteEntity(LURE_ID); + } + + void stop_moving_damnit() + { + if (!(ESCAPE_SCENE)) return; + SetAngles("face"); + ScheduleDelayedEvent(1.0, "stop_moving_damnit"); + SetMoveAnim(ANIM_IDLE_NORM); + SetIdleAnim(ANIM_IDLE_NORM); + ANIM_RUN = ANIM_IDLE_NORM; + ANIM_WALK = ANIM_IDLE_NORM; + ANIM_IDLE = ANIM_IDLE_NORM; + PlayAnim("once", ANIM_IDLE_NORM); + } + + void slithar_fade_in() + { + if (FADE_COUNT >= 250) + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 0); + } + if (!(FADE_COUNT < 250)) return; + ScheduleDelayedEvent(0.1, "slithar_fade_in"); + FADE_COUNT += 10; + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", FADE_COUNT); + } + + void slithar_resume() + { + SetInvincible(false); + ESCAPE_SCENE = 0; + npcatk_resume_ai(); + SetMoveAnim(ANIM_RUNFAST); + SetIdleAnim(ANIM_IDLE_NORM); + SetMoveSpeed(1.0); + SetRoam(true); + ANIM_RUN = ANIM_RUNFAST; + ANIM_WALK = ANIM_WALKSLOW; + ANIM_IDLE = ANIM_IDLE_NORM; + SUMMON_SKELETON = 0; + SUMMON_SNAKE = 0; + SUMMONING = 0; + ScheduleDelayedEvent(3.0, "reset_summoning"); + } + + void OnSuspendAI() + { + } + + void npcatk_resume_ai() + { + if ((ESCAPE_SCENE)) return; + if (!(SUSPEND_AI)) return; + if (NPC_STORE_TARGET != "unset") + { + npcatk_restore_target(); + } + SUSPEND_AI = 0; + } + + void slithar_to_me() + { + if ((TELED_OUT)) return; + if (!(SUSPEND_AI)) + { + npcatk_suspend_ai(); + } + if (!(ESCAPE_SCENE)) + { + CKN_MY_OLD_POS = GetEntityOrigin(GetOwner()); + ESCAPE_SCENE = 1; + ScheduleDelayedEvent(0.1, "lure_stuck_check"); + } + SetMoveAnim(ANIM_RUNFAST); + if (!(LURE_JUMP_DELAY)) + { + PlayAnim("critical", ANIM_JUMP); + LURE_JUMP_DELAY = 1; + ScheduleDelayedEvent(0.1, "long_jump_boost"); + JUMP_FREQ("reset_lure_jump_delay"); + } + SetMoveDest(param1); + if (param2 < MOVE_RANGE) + { + int REACHED_LURE = 1; + } + if (Distance(param1, GetMonsterProperty("origin")) < MOVE_RANGE) + { + int REACHED_LURE = 1; + } + if (!(REACHED_LURE)) return; + ESCAPE_SCENE = 0; + npcatk_resume_ai(); + CallExternal(param3, "slithar_made_it"); + UseTrigger("slithar_escaped"); + slithar_resume(); + } + + void reset_lure_jump_delay() + { + LURE_JUMP_DELAY = 0; + } + + void lure_stuck_check() + { + if ((TELED_OUT)) return; + if (!(ESCAPE_SCENE)) return; + float CKN_MOVE_DIST = Distance(GetMonsterProperty("origin"), CKN_MY_OLD_POS); + if (CKN_MOVE_DIST == 0) + { + FLEE_DIR = RandomInt(1, 359); + SetMoveDest(/* TODO: $relpos */ $relpos(Vector3(0, FLEE_DIR, 0), Vector3(0, 500, 0))); + PlayAnim("loop", ANIM_RUNFAST); + } + CKN_MY_OLD_POS = GetMonsterProperty("origin"); + ScheduleDelayedEvent(0.25, "lure_stuck_check"); + } + + void slithar_stop() + { + ESCAPE_SCENE = 1; + SetInvincible(true); + LURE_YAW = param1; + stop_moving_damnit(); + } + + void npc_suicide() + { + } + +} + +} diff --git a/scripts/angelscript/slithar/stop.as b/scripts/angelscript/slithar/stop.as new file mode 100644 index 00000000..7b2ed4ba --- /dev/null +++ b/scripts/angelscript/slithar/stop.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "monsters/base_temporary.as" + +namespace MS +{ + +class Stop : CGameScript +{ + void OnSpawn() override + { + string SLITHAR_ID = FindEntityByName("snake_lord"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(GetMonsterProperty("origin")); + CallExternal(SLITHAR_ID, "slithar_stop", MY_YAW); + } + +} + +} diff --git a/scripts/angelscript/slithar/teleport.as b/scripts/angelscript/slithar/teleport.as new file mode 100644 index 00000000..f35f86b5 --- /dev/null +++ b/scripts/angelscript/slithar/teleport.as @@ -0,0 +1,28 @@ +#pragma context server + +namespace MS +{ + +class Teleport : CGameScript +{ + void OnSpawn() override + { + SetName("slithar_lure"); + SetModel("null.mdl"); + SetInvincible(true); + SetRace("beloved"); + SetFly(true); + 1 = float(1); + SetGravity(0); + ScheduleDelayedEvent(0.1, "lure_slithar"); + } + + void lure_slithar() + { + string SLITHAR_ID = FindEntityByName("snake_lord"); + CallExternal(SLITHAR_ID, "slithar_escape"); + } + +} + +} diff --git a/scripts/angelscript/smugglers/orc_chest.as b/scripts/angelscript/smugglers/orc_chest.as new file mode 100644 index 00000000..d62e9480 --- /dev/null +++ b/scripts/angelscript/smugglers/orc_chest.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class OrcChest : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 50)); + add_great_item(); + add_good_item(); + add_good_item(); + add_good_item(); + } + +} + +} diff --git a/scripts/angelscript/smugglers/orc_chest_rare.as b/scripts/angelscript/smugglers/orc_chest_rare.as new file mode 100644 index 00000000..7ee05be6 --- /dev/null +++ b/scripts/angelscript/smugglers/orc_chest_rare.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class OrcChestRare : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(25, 100)); + add_great_item(); + add_great_item(); + add_great_item(); + add_great_item(); + if (!(RandomInt(1, 10) == 1)) return; + add_epic_item(); + } + +} + +} diff --git a/scripts/angelscript/smugglers/shark_chest.as b/scripts/angelscript/smugglers/shark_chest.as new file mode 100644 index 00000000..14caa22d --- /dev/null +++ b/scripts/angelscript/smugglers/shark_chest.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class SharkChest : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(10, 100)); + add_great_item(); + add_good_item(); + add_good_item(); + add_good_item(); + } + +} + +} diff --git a/scripts/angelscript/sorc_palace/sorc_chief.as b/scripts/angelscript/sorc_palace/sorc_chief.as new file mode 100644 index 00000000..13ae030f --- /dev/null +++ b/scripts/angelscript/sorc_palace/sorc_chief.as @@ -0,0 +1,1368 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class SorcChief : CGameScript +{ + int AM_LEAPING; + int AM_STANDING; + int AM_UNARMED; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_FLINCH; + string ANIM_HOP; + string ANIM_IDLE; + string ANIM_KICK; + string ANIM_PARRY; + string ANIM_RUN; + string ANIM_SIT; + string ANIM_SMASH; + string ANIM_SWIPE; + string ANIM_WALK; + string ANIM_WARCRY; + string AS_ATTACKING; + float ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string BARRIER_IDX; + string BARRIER_NEXT_REFRESH; + int BARRIER_ON; + int BARRIER_RAD; + float BASE_FRAMERATE; + float BASE_MOVESPEED; + string BLOOD_DRINKER_ID; + string BURST_ORIGIN; + string BURST_OVERRIDE; + int CAN_FLINCH; + float CHAT_DELAY; + string CHAT_MODE; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + int CHAT_STEPS; + string CHIEF_SPAWN; + int COMBAT_MODE; + int CUR_SPECIAL; + int CYCLES_STARTED; + string DEFAULT_TELE_POINT; + int DMG_BARRIER; + float DMG_KICK; + int DMG_LBLAST; + int DMG_LSTORM; + int DMG_SLASH; + int DMG_SMACK; + int DMG_SMASH; + string DOUBLE_FOR; + string DOUBLE_UP; + int DUR_LSTORM; + int ESCORT_ACTIVE; + string FACE_PLAYERS; + string FOUND_NEAR_TARGET; + float FREQ_KICK; + int FREQ_LBLAST; + float FREQ_LEAP; + int FREQ_LSTORM; + int FREQ_SPECIAL; + int FREQ_TELEPORT; + int FREQ_TELEPORT_FAST; + int FREQ_THROW; + int FREQ_TORNADO; + int FRIEND_FOE_ANSWERED; + string HALF_HEALTH; + string ID_LSTORM1; + string ID_LSTORM2; + int JUMP_FWD_DIST; + int KICK_DELAY; + string LAST_SWORD_HIT; + string LAST_TELE; + string LEAP_DELAY; + int LOC_LSTORM1; + int LOC_LSTORM2; + int LSTORM_LOOPCOUNT; + string LSTORM_TARGS; + float MIN_TELEPORT_DELAY; + int MOVE_RANGE; + string MOVE_TARG; + string MREPELL_LIST; + string NEW_TARGET; + int NO_CHAT; + int NO_CLOSE_MOUTH; + int NPC_BOSS_REGEN_RATE; + float NPC_BOSS_RESTORATION; + int NPC_FORCED_MOVEDEST; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + string NPC_PROXACT_EVENT; + string NPC_PROXACT_FOV; + string NPC_PROXACT_IFSEEN; + string NPC_PROXACT_RANGE; + int NPC_PROX_ACTIVATE; + int NPC_USES_LIGHTS; + int N_BLOOD_DRINKERS; + int N_STORMS; + int N_TELES; + int ON_LODAGOND; + int PLAYERS_INRANGE; + int PLAYERS_NEAR; + int PNEAR_LOOP_COUNT; + int RENDER_COUNT; + string REPULSE_LIST; + string SEARCH_RAD; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_DEATH; + string SOUND_DRAW_WEAPON; + string SOUND_HELP; + string SOUND_HIT; + string SOUND_HIT2; + string SOUND_HIT3; + string SOUND_PAIN; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_TELE; + string SOUND_WARCRY; + string SOUND_WARCRY1; + int SWORD_ATTACK; + string TELE_ANGS; + string TELE_DEST; + string TELE_ID1; + string TELE_ID2; + string TELE_ID3; + string TELE_ID4; + float VAMPIRE_RATIO; + + SorcChief() + { + ANIM_SIT = "on_chair"; + NO_CLOSE_MOUTH = 1; + CHAT_DELAY = 6.0; + NO_CHAT = 1; + COMBAT_MODE = 0; + BARRIER_RAD = 64; + DMG_BARRIER = 100; + SOUND_DRAW_WEAPON = "weapons/swords/sworddraw.wav"; + NPC_PROX_ACTIVATE = 1; + MIN_TELEPORT_DELAY = 15.0; + NPC_BOSS_REGEN_RATE = 0; + NPC_BOSS_RESTORATION = 0.3; + NPC_USES_LIGHTS = 1; + if (StringToLower(GetMapName()) == "shad_palace") + { + NPC_GIVE_EXP = 10000; + NPC_IS_BOSS = 1; + } + ANIM_WARCRY = "warcry"; + ANIM_IDLE = "idle1"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + ANIM_FLINCH = "flinch"; + ANIM_ATTACK = "swordswing1_L"; + ANIM_SWIPE = "swordswing1_L"; + ANIM_SMASH = "battleaxe_swing1_L"; + ANIM_KICK = "kick"; + ANIM_PARRY = "shielddeflect1"; + ANIM_DEATH = "die_fallback"; + ANIM_HOP = "battleaxe_swing1_L"; + CAN_FLINCH = 1; + ATTACK_HITCHANCE = 0.9; + ATTACK_MOVERANGE = 32; + MOVE_RANGE = 32; + ATTACK_RANGE = 60; + ATTACK_HITRANGE = 120; + DMG_SLASH = RandomInt(100, 200); + DMG_SMACK = RandomInt(25, 50); + DMG_SMASH = RandomInt(150, 400); + DMG_KICK = Random(25, 100); + DMG_LBLAST = 100; + DMG_LSTORM = 100; + DUR_LSTORM = 30; + FREQ_TORNADO = RandomInt(15, 30); + FREQ_LSTORM = RandomInt(30, 45); + FREQ_LBLAST = RandomInt(15, 30); + FREQ_THROW = RandomInt(10, 30); + FREQ_SPECIAL = RandomInt(10, 15); + FREQ_TELEPORT = RandomInt(20, 140); + FREQ_TELEPORT_FAST = RandomInt(20, 40); + FREQ_KICK = 10.0; + FREQ_LEAP = 5.0; + SOUND_WARCRY = "monsters/troll/trollidle.wav"; + SOUND_STRUCK1 = "body/armour1.wav"; + SOUND_STRUCK2 = "body/armour2.wav"; + SOUND_STRUCK3 = "body/armour3.wav"; + SOUND_HIT = "voices/orc/hit.wav"; + SOUND_HIT2 = "voices/orc/hit2.wav"; + SOUND_HIT3 = "voices/orc/hit3.wav"; + SOUND_PAIN = "monsters/orc/pain.wav"; + SOUND_WARCRY1 = "monsters/orc/battlecry.wav"; + SOUND_ATTACK1 = "voices/orc/attack.wav"; + SOUND_ATTACK2 = "voices/orc/attack2.wav"; + SOUND_ATTACK3 = "voices/orc/attack3.wav"; + SOUND_DEATH = "voices/orc/die.wav"; + SOUND_HELP = "voices/orc/help.wav"; + SOUND_TELE = "magic/teleport.wav"; + VAMPIRE_RATIO = 0.1; + Precache(SOUND_DEATH); + Precache("weapons/magic/tornado.mdl"); + Precache("magic/vent1.wav"); + Precache("magic/vent2.wav"); + Precache("magic/vent3.wav"); + Precache("magic/gusts1.wav"); + Precache("magic/gusts2.wav"); + Precache("weather/Storm_exclamation.wav"); + Precache("magic/lightning_strike.wav"); + Precache("doors/aliendoor3.wav"); + Precache("magic/spawn.wav"); + Precache("zombie/claw_miss2.wav"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(8, 15)); + if (!(SUSPEND_AI)) + { + } + if (m_hAttackTarget != "unset") + { + } + int LEAP_TYPE = RandomInt(1, 4); + if (LEAP_TYPE < 4) + { + leap_at(m_hAttackTarget, "random"); + } + if (LEAP_TYPE == 4) + { + leap_random(); + } + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(1.1); + if (STUCK_COUNT > 4) + { + } + do_teleport("stuck_count"); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(20.0); + if ((COMBAT_MODE)) + { + } + if (GetEntityRange(m_hAttackTarget) > 256) + { + } + float LAST_TELE_DIFF = GetGameTime(); + LAST_TELE_DIFF -= LAST_TELE; + if (LAST_TELE_DIFF > 5.0) + { + } + float LAST_HIT_DIFF = GetGameTime(); + LAST_HIT_DIFF -= LAST_SWORD_HIT; + if (LAST_HIT_DIFF > 20.0) + { + } + do_teleport("stuck_count", "no_hits"); + } + + void OnRepeatTimer_3() + { + SetRepeatDelay(1.0); + if (!(AM_STANDING)) + { + } + if (GetEntityOrigin(GetOwner()) != CHIEF_SPAWN) + { + } + SetEntityOrigin(GetOwner(), CHIEF_SPAWN); + SetGravity(0); + } + + void OnSpawn() override + { + SetName("the_warchief"); + SetName("Runegahr the Warchief"); + SetRace("orc"); + SetHealth(18000); + SetDamageResistance("all", 0.5); + SetDamageResistance("fire", 0.5); + SetDamageResistance("cold", 0.25); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("stun", 0.25); + SetHearingSensitivity(10); + SetInvincible(2); + SetModel("monsters/sorc.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 0); + SetStat("parry", 150); + SetWidth(32); + SetHeight(96); + SetIdleAnim(ANIM_SIT); + SetMoveAnim(ANIM_SIT); + SetMenuAutoOpen(0); + SetRoam(false); + SetGravity(0); + SetFly(true); + SetSayTextRange(4096); + SWORD_ATTACK = 0; + JUMP_FWD_DIST = 250; + CUR_SPECIAL = 0; + ScheduleDelayedEvent(1.0, "get_teleporters"); + ScheduleDelayedEvent(0.1, "check_for_blood"); + npcatk_suspend_ai(); + if (!(true)) return; + CHIEF_SPAWN = GetEntityOrigin(GetOwner()); + } + + void ext_nudge() + { + MOVE_TARG = param1; + SetMoveDest(param1); + string NEW_ORG = GetEntityOrigin(GetOwner()); + NEW_ORG += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 4, 0)); + SetEntityOrigin(GetOwner(), NEW_ORG); + LogDebug("ext_nudge GetEntityName(param1) GetEntityOrigin(GetOwner())"); + } + + void OnPostSpawn() override + { + SetMenuAutoOpen(0); + string NEW_ORG = GetEntityOrigin(GetOwner()); + NEW_ORG += /* TODO: $relpos */ $relpos(Vector3(0, GetMonsterProperty("angles.yaw"), 0), Vector3(0, 4, 0)); + SetMoveDest(NEW_ORG); + SetEntityOrigin(GetOwner(), NEW_ORG); + HALF_HEALTH = GetMonsterMaxHP(); + HALF_HEALTH /= 2; + string L_MAP_NAME = StringToLower(GetMapName()); + if (!(L_MAP_NAME == "lodagond-1")) return; + ON_LODAGOND = 1; + } + + void check_for_blood() + { + GetAllPlayers(BD_PLAYER_LIST); + N_BLOOD_DRINKERS = 0; + for (int i = 0; i < GetTokenCount(BD_PLAYER_LIST, ";"); i++) + { + check_inventories(); + } + if (N_BLOOD_DRINKERS != 0) + { + SetGlobalVar("G_SORC_CHIEF_PRESENT", 1); + NPC_PROXACT_RANGE = 256; + NPC_PROXACT_EVENT = "player_nears"; + NPC_PROXACT_IFSEEN = 0; + NPC_PROXACT_FOV = 0; + } + } + + void check_inventories() + { + string CUR_TARG = GetToken(BD_PLAYER_LIST, i, ";"); + if ((ItemExists(CUR_TARG, "swords_blood_drinker"))) + { + N_BLOOD_DRINKERS += 1; + if (N_BLOOD_DRINKERS == 1) + { + BLOOD_ID = CUR_TARG; + } + } + if ((ItemExists(CUR_TARG, "item_tk_swords_blood_drinker"))) + { + N_BLOOD_DRINKERS += 1; + if (N_BLOOD_DRINKERS == 1) + { + BLOOD_ID = CUR_TARG; + } + } + } + + void player_nears() + { + CHAT_STEP1 = "I remember "; + if (N_BLOOD_DRINKERS > 1) + { + string REF_RESCUE = "some of you"; + } + else + { + if (GetPlayerCount() == 1) + { + string REF_RESCUE = "you"; + } + else + { + if (N_BLOOD_DRINKERS == 1) + { + string REF_RESCUE = GetEntityName(BLOOD_ID); + } + } + } + REF_RESCUE += "... Aiding... In my escape from Lodagond."; + CHAT_STEP1 += REF_RESCUE; + CHAT_STEP2 = "So, before I decide whether or not to slay you here and now."; + CHAT_STEP3 = "I ask you, have you come as [friend] or [foe]?"; + CHAT_STEPS = 3; + chat_loop(); + FRIEND_FOE_ANSWERED = 0; + string CHAT_DELAY_TOTAL = CHAT_STEPS; + CHAT_DELAY_TOTAL -= 1; + CHAT_DELAY_TOTAL *= CHAT_DELAY; + CHAT_DELAY_TOTAL += 1.0; + LogDebug("player_nears cdt CHAT_DELAY_TOTAL"); + CHAT_DELAY_TOTAL("send_ff_menu"); + CatchSpeech("say_friend", "friend"); + CatchSpeech("say_foe", "foe"); + } + + void send_ff_menu() + { + SetMenuAutoOpen(1); + CHAT_MODE = "friend_foe"; + OpenMenu(NPC_PROXACT_PLAYERID); + } + + void game_menu_getoptions() + { + if (CHAT_MODE == "friend_foe") + { + string reg.mitem.title = "Friend"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_friend"; + string reg.mitem.title = "Foe"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_foe"; + } + } + + void game_menu_cancel() + { + if (!(CHAT_MODE == "friend_foe")) return; + ScheduleDelayedEvent(1.0, "resend_menu"); + } + + void resend_menu() + { + if ((FRIEND_FOE_ANSWERED)) return; + OpenMenu(NPC_PROXACT_PLAYERID); + } + + void say_friend() + { + if (CHAT_MODE == "in_combat") + { + SayText("Too late now , coward."); + } + LogDebug("was busy chatting BUSY_CHATTING"); + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(0.1, "say_friend"); + } + if ((BUSY_CHATTING)) return; + if ((FRIEND_FOE_ANSWERED)) return; + if (!(CHAT_MODE == "friend_foe")) return; + CHAT_MODE = "friend"; + UseTrigger("towndoors01"); + SetGlobalVar("G_SORCV_FRIENDLY", 1); + FRIEND_FOE_ANSWERED = 1; + CHAT_STEP1 = "Very well then..."; + CHAT_STEP2 = "I suppose I should be upset that you slaughtered the palace guard..."; + CHAT_STEP3 = "But, if they couldn't stop you, I suppose they weren't up to the job."; + CHAT_STEP4 = "I've some more promising recruits lined up in the villa anyways."; + CHAT_STEPS = 4; + chat_loop(); + string CHAT_DELAY_TOTAL = CHAT_STEPS; + CHAT_DELAY_TOTAL -= 1; + CHAT_DELAY_TOTAL *= CHAT_DELAY; + CHAT_DELAY_TOTAL += 4.0; + CHAT_DELAY_TOTAL("announce_visitors"); + } + + void announce_visitors() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(0.1, "announce_visitors"); + } + if ((BUSY_CHATTING)) return; + // TODO: playmp3 all combat haunted_desert.mp3 + stand_up(); + CHAT_STEP1 = "Let it be known that "; + if (GetPlayerCount() > 1) + { + CHAT_STEP1 += "these humans are my guests."; + CHAT_STEP2 = "They are under MY protection. And you are to treat them as if they were our own."; + CHAT_STEP3 = "The gates to the villa are to be opened to them..."; + CHAT_STEP4 = "...and I expect them to be allowed to partake in what 'hospitality' we provide therein."; + } + if (GetPlayerCount() == 1) + { + CHAT_STEP1 += GetEntityName(NPC_PROXACT_PLAYERID); + CHAT_STEP1 += " is my guest."; + CHAT_STEP2 = "He is under my protection. And you are to treat him as if he was one of us."; + CHAT_STEP3 = "The gates to the villa are to be opened to him..."; + CHAT_STEP4 = "...and I expect him to be allowed to partake in whatever 'hospitality' we provide therein."; + } + CHAT_STEPS = 4; + chat_loop(); + string CHAT_DELAY_TOTAL = CHAT_STEPS; + CHAT_DELAY_TOTAL -= 1; + CHAT_DELAY_TOTAL *= CHAT_DELAY; + CHAT_DELAY_TOTAL += 3.0; + CHAT_DELAY_TOTAL("get_reply"); + } + + void get_reply() + { + CallExternal("all", "sorcs_confirm_order"); + } + + void OnDamage(int damage) override + { + if ((COMBAT_MODE)) return; + SetDamage("dmg"); + SetDamage("hit"); + return; + if (!(COMBAT_MODE)) return; + if (GetMonsterHP() < HALF_HEALTH) + { + JUMP_FWD_DIST = 500; + FREQ_LEAP = 0.1; + } + string HIT_BY = GetEntityIndex(param1); + if (param2 > 30) + { + if (GetEntityRange(HIT_BY) < ATTACK_HITRANGE) + { + } + if (RandomInt(1, 3) == 1) + { + } + if (!(LEAP_DELAY)) + { + } + LEAP_DELAY = 1; + FREQ_LEAP("leap_delay_reset"); + leap_away(HIT_BY); + } + } + + void ext_tell_approach() + { + if (!(N_BLOOD_DRINKERS > 0)) return; + if (GetPlayerCount() > 1) + { + SayText("Humans! Approach the throne of Runegahr. " + I + " wish to speak with thee."); + } + else + { + SayText("Human! You may approach the throne of Runegahr. " + I + " wish to speak with thee."); + } + } + + void say_foe() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(0.1, "say_foe"); + } + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "So be it."; + CHAT_STEP2 = "Thuldahr, it is as you hoped. They are yours."; + CHAT_STEPS = 2; + chat_loop(); + ESCORT_ACTIVE = 1; + CHAT_MODE = "in_combat"; + string CHAT_DELAY_TOTAL = CHAT_STEPS; + CHAT_DELAY_TOTAL *= CHAT_DELAY; + CHAT_DELAY_TOTAL += 1.0; + CHAT_DELAY_TOTAL("begin_the_attack"); + } + + void begin_the_attack() + { + CallExternal("all", "ext_chief_orders_attack"); + shield_up(); + } + + void shield_up() + { + BARRIER_ON = 1; + BARRIER_NEXT_REFRESH = GetGameTime(); + BARRIER_NEXT_REFRESH += 20.0; + ClientEvent("new", "all", "sorc_palace/sorc_chief_cl", GetEntityIndex(GetOwner()), BARRIER_RAD, Vector3(255, 0, 0), 20.0); + BARRIER_IDX = "game.script.last_sent_id"; + barrier_loop(); + } + + void barrier_loop() + { + if (!(BARRIER_ON)) return; + ScheduleDelayedEvent(0.5, "barrier_loop"); + if (GetGameTime() > BARRIER_NEXT_REFRESH) + { + ClientEvent("update", "all", BARRIER_IDX, "remove_me"); + ClientEvent("new", "all", "sorc_palace/sorc_chief_cl", GetEntityIndex(GetOwner()), BARRIER_RAD, Vector3(255, 0, 0), 20.0); + BARRIER_IDX = "game.script.last_sent_id"; + BARRIER_NEXT_REFRESH = GetGameTime(); + BARRIER_NEXT_REFRESH += 20.0; + } + repell_burst(GetEntityOrigin(GetOwner()), BARRIER_RAD, 0); + } + + void barrier_off() + { + BARRIER_ON = 0; + ClientEvent("update", "all", BARRIER_IDX, "clear_sprites"); + } + + void repell_burst() + { + BURST_ORIGIN = param1; + string BURST_RAD = param2; + BURST_OVERRIDE = param3; + REPULSE_LIST = FindEntitiesInSphere("enemy", BURST_RAD); + if (!(REPULSE_LIST != "none")) return; + EmitSound(GetOwner(), 0, "doors/aliendoor3.wav", 10); + for (int i = 0; i < GetTokenCount(REPULSE_LIST, ";"); i++) + { + repulse_targets(); + } + DoDamage(BURST_ORIGIN, BURST_RAD, DMG_BARRIER, 1.0, 0); + } + + void repulse_targets() + { + string CUR_TARG = GetToken(REPULSE_LIST, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(BURST_ORIGIN, TARG_ORG); + if (!(BURST_OVERRIDE)) + { + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 2000, 110))); + } + else + { + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 2000, 110))); + } + } + + void mild_repell_loop() + { + MREPELL_LIST = FindEntitiesInSphere("any", 64); + ScheduleDelayedEvent(0.5, "mild_repell_loop"); + if (!(MREPELL_LIST != "none")) return; + for (int i = 0; i < GetTokenCount(MREPELL_LIST, ";"); i++) + { + mrepell_targets(); + } + } + + void mrepell_targets() + { + string CUR_TARG = GetToken(MREPELL_LIST, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(0, 400, 110))); + } + + void thuld_died() + { + combat_mode_go(); + } + + void combat_mode_go() + { + barrier_off(); + COMBAT_MODE = 1; + SetMenuAutoOpen(0); + repell_burst(/* TODO: $relpos */ $relpos(0, 64, 0), 128, 1); + ScheduleDelayedEvent(0.5, "stand_up"); + } + + void stand_up() + { + SetGravity(1); + SetFly(false); + AM_STANDING = 1; + UseTrigger("chief_stand"); + if (!(COMBAT_MODE)) + { + mild_repell_loop(); + } + SetEntityOrigin(GetOwner(), /* TODO: $relpos */ $relpos(0, 64, 0)); + SetIdleAnim(ANIM_IDLE); + if ((COMBAT_MODE)) + { + SetMoveAnim(ANIM_WALK); + ScheduleDelayedEvent(0.1, "combat_mode_go2"); + } + else + { + SetMoveAnim(ANIM_IDLE); + SetSolid("none"); + FACE_PLAYERS = 1; + } + } + + void combat_mode_go2() + { + DEFAULT_TELE_POINT = GetEntityOrigin(GetOwner()); + PlayAnim("critical", ANIM_WARCRY); + npcatk_resume_ai(); + SetInvincible(false); + EmitSound(GetOwner(), 0, SOUND_WARCY, 10); + SayText("NOW IT'S MY TURN!"); + SetMoveSpeed(1.5); + SetAnimMoveSpeed(1.5); + SetAnimFrameRate(1.5); + BASE_MOVESPEED = 1.5; + BASE_FRAMERATE = 1.5; + UseTrigger("spawn_throne_escort"); + SetGlobalVar("G_SORCV_FRIENDLY", 0); + } + + void warcry_done() + { + if ((SWORD_DRAWN)) return; + SetModelBody(2, 8); + EmitSound(GetOwner(), 0, SOUND_DRAW_WEAPON, 10); + CAN_FLINCH = 1; + if ((SUSPEND_AI)) + { + npcatk_resume_ai(); + } + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(FACE_PLAYERS)) return; + string HEARD_ID = GetEntityIndex("ent_lastheard"); + if (!(IsValidPlayer(HEARD_ID))) return; + if (!(GetEntityRange(HEARD_ID) < 128)) return; + SetMoveDest(HEARD_ID); + } + + void OnDamagedOther(CBaseEntity@ victim, int damage) override + { + if ((SWORD_ATTACK)) + { + SWORD_ATTACK = 0; + AddVelocity(param1, /* TODO: $relvel */ $relvel(-100, 130, 120)); + if (GetMonsterHP() < GetMonsterMaxHP()) + { + string HP_TO_GIVE = param2; + HP_TO_GIVE *= VAMPIRE_RATIO; + HealEntity(GetOwner(), VAMPIRE_RATIO); + Effect("glow", GetOwner(), Vector3(0, 255, 0), 96, 0.5, 0.5); + EmitSound(GetOwner(), 0, "player/heartbeat_noloop.wav", 10); + } + } + } + + void cycle_up() + { + if ((CYCLES_STARTED)) return; + CYCLES_STARTED = 1; + FREQ_SPECIAL("do_special"); + ScheduleDelayedEvent(60.0, "do_teleport"); + SetRoam(true); + } + + void swing_axe() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + LAST_SWORD_HIT = GetGameTime(); + } + sorc_yell(); + SWORD_ATTACK = 1; + if (!(AM_UNARMED)) + { + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SMASH, ATTACK_HITCHANCE, "slash"); + } + if ((AM_UNARMED)) + { + SWORD_ATTACK = 0; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SMACK, ATTACK_HITCHANCE, "blunt"); + } + ANIM_ATTACK = ANIM_SWIPE; + check_kick(); + } + + void swing_sword() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + LAST_SWORD_HIT = GetGameTime(); + } + sorc_yell(); + if (!(AM_UNARMED)) + { + SWORD_ATTACK = 1; + } + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SLASH, ATTACK_HITCHANCE, "slash"); + if ((AM_UNARMED)) + { + SWORD_ATTACK = 0; + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SMACK, ATTACK_HITCHANCE, "blunt"); + } + if (RandomInt(1, 5) == 1) + { + ANIM_ATTACK = ANIM_SMASH; + } + check_kick(); + } + + void check_kick() + { + if ((KICK_DELAY)) return; + if (!(AM_UNARMED)) + { + if (RandomInt(1, 5) != 1) + { + } + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + ANIM_ATTACK = ANIM_KICK; + KICK_DELAY = 1; + if (!(AM_UNARMED)) + { + FREQ_KICK("reset_kick_delay"); + } + if ((AM_UNARMED)) + { + ScheduleDelayedEvent(1.0, "reset_kick_delay"); + } + } + + void kick_land() + { + if (GetEntityRange(m_hAttackTarget) < ATTACK_RANGE) + { + LAST_SWORD_HIT = GetGameTime(); + } + npcatk_dodamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = ANIM_SWIPE; + if (!(GetEntityRange(m_hAttackTarget) < ATTACK_HITRANGE)) return; + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", Random(5, 10), GetEntityIndex(GetOwner())); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(-100, 200, 150)); + } + + void reset_kick_delay() + { + KICK_DELAY = 0; + } + + void sorc_yell() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void leap_delay_reset() + { + LEAP_DELAY = 0; + } + + void orc_hop() + { + EmitSound(GetOwner(), 0, "monsters/orc/attack1.wav", 10); + if (GetMonsterHP() > HALF_HEALTH) + { + int JUMP_HEIGHT = RandomInt(350, 450); + } + if (GetMonsterHP() <= HALF_HEALTH) + { + int JUMP_HEIGHT = RandomInt(350, 950); + } + string L_JUMP_FWD_DIST = JUMP_FWD_DIST; + string L_JUMP_HEIGHT = JUMP_HEIGHT; + if ((DOUBLE_FOR)) + { + DOUBLE_FOR = 0; + L_JUMP_FWD_DIST *= 2; + } + if ((DOUBLE_UP)) + { + DOUBLE_UP = 0; + L_JUMP_HEIGHT *= 2; + } + AddVelocity(GetOwner(), /* TODO: $relvel */ $relvel(0, L_JUMP_FWD_DIST, L_JUMP_HEIGHT)); + } + + void leap_away() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "do_leap"); + } + + void leap_random() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + int RND_ROT = RandomInt(0, 359); + string LEAP_DEST = GetMonsterProperty("origin"); + LEAP_DEST += /* TODO: $relpos */ $relpos(Vector3(0, RND_ROT, 0), Vector3(0, 400, 0)); + SetMoveDest(LEAP_DEST); + ScheduleDelayedEvent(0.1, "do_leap"); + } + + void leap_at() + { + if ((AM_LEAPING)) return; + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + if ((IsEntityAlive(m_hAttackTarget))) + { + string TARGET_ORG = GetEntityOrigin(m_hAttackTarget); + string TARGET_Z = (TARGET_ORG).z; + string MY_Z = GetMonsterProperty("origin.z"); + if (TARGET_Z > MY_Z) + { + string V_DEST = GetMonsterProperty("origin"); + V_DEST = "z"; + if (Distance(GetMonsterProperty("origin"), V_DEST) > 96) + { + } + DOUBLE_UP = 1; + } + if (GetEntityProperty(m_hAttackTarget, "range2d") > 1600) + { + DOUBLE_FOR = 1; + } + } + npcatk_suspend_ai(1.0); + SetMoveDest(param1); + ScheduleDelayedEvent(0.1, "do_leap"); + } + + void do_leap() + { + // PlayRandomSound from: SOUND_HIT, SOUND_HIT2, SOUND_HIT3 + array sounds = {SOUND_HIT, SOUND_HIT2, SOUND_HIT3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + PlayAnim("critical", ANIM_HOP); + ScheduleDelayedEvent(0.1, "orc_hop"); + ScheduleDelayedEvent(1.0, "reset_leaping"); + } + + void reset_leaping() + { + AM_LEAPING = 0; + } + + void do_lstorm() + { + CAN_FLINCH = 0; + AS_ATTACKING = GetGameTime(); + PlayAnim("critical", ANIM_WARCRY); + EmitSound(GetOwner(), 0, SOUND_WARCRY, 10); + npcatk_suspend_ai(2.0); + LSTORM_TARGS = "placeholder"; + GetAllPlayers(LSTORM_TARGS); + string N_LSTORM_TARGS = GetTokenCount(LSTORM_TARGS, ";"); + N_STORMS = 0; + LOC_LSTORM1 = 0; + LOC_LSTORM2 = 0; + LSTORM_LOOPCOUNT = 0; + if (N_LSTORM_TARGS > 0) + { + for (int i = 0; i < N_LSTORM_TARGS; i++) + { + do_lstorm_loop(); + } + } + if (!(N_STORMS > 0)) return; + ScheduleDelayedEvent(0.1, "do_lstorm2"); + if (N_STORMS > 1) + { + ScheduleDelayedEvent(0.5, "do_lstorm3"); + } + } + + void do_lstorm2() + { + SpawnNPC("monsters/summon/summon_lightning_storm", LOC_LSTORM1, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), DMG_LSTORM, DUR_LSTORM + ID_LSTORM1 = GetEntityIndex(m_hLastCreated); + } + + void do_lstorm3() + { + SpawnNPC("monsters/summon/summon_lightning_storm", LOC_LSTORM2, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityProperty(GetOwner(), "angles.y"), DMG_LSTORM, DUR_LSTORM + ID_LSTORM2 = GetEntityIndex(m_hLastCreated); + } + + void do_lstorm_loop() + { + string CUR_PLAYER = GetToken(LSTORM_TARGS, LSTORM_LOOPCOUNT, ";"); + LSTORM_LOOPCOUNT += 1; + if (GetEntityRange(CUR_PLAYER) < 1024) + { + if (N_STORMS < 2) + { + } + N_STORMS += 1; + string TARG_ORG = GetEntityOrigin(CUR_PLAYER); + if (N_STORMS == 2) + { + if (Distance(TARG_ORG, LOC_LSTORM1) < 256) + { + } + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + string STORM_GRNDPOS = /* TODO: $get_ground_height */ $get_ground_height(TARG_ORG); + TARG_ORG = "z"; + if (N_STORMS == 1) + { + LOC_LSTORM1 = TARG_ORG; + } + if (N_STORMS == 2) + { + LOC_LSTORM2 = TARG_ORG; + } + } + } + + void OnParry(CBaseEntity@ attacker) override + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + if ((SUSPEND_AI)) return; + if (RandomInt(1, 3) == 1) + { + PlayAnim("critical", "shielddeflect1"); + } + } + + void get_teleporters() + { + N_TELES = 0; + TELE_ID1 = GetToken(G_RUNE_POINTS, 0, ";"); + TELE_ID2 = GetToken(G_RUNE_POINTS, 1, ";"); + TELE_ID3 = GetToken(G_RUNE_POINTS, 2, ";"); + TELE_ID4 = GetToken(G_RUNE_POINTS, 3, ";"); + N_TELES = 3; + } + + void do_teleport() + { + if (!(N_TELES > 0)) return; + if (param1 != "stuck_count") + { + if (GetMonsterHP() > HALF_HEALTH) + { + int TELEPORT_FAST = 0; + } + if (GetMonsterHP() <= HALF_HEALTH) + { + int TELEPORT_FAST = 1; + } + if (!(TELEPORT_FAST)) + { + FREQ_TELEPORT("do_teleport"); + } + if ((TELEPORT_FAST)) + { + FREQ_TELEPORT_FAST("do_teleport"); + } + } + float LAST_TELE_DIFF = GetGameTime(); + LAST_TELE_DIFF -= LAST_TELE; + if (!(LAST_TELE_DIFF > MIN_TELEPORT_DELAY)) return; + LogDebug("game.time secs: do_teleport PARAM1 PARAM2"); + LAST_TELE = GetGameTime(); + string TOTAL_TELES = N_TELES; + TOTAL_TELES += 1; + int PICK_TELE = RandomInt(1, TOTAL_TELES); + if (param2 == "no_hits") + { + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green no_hits teleport"); + } + GetAllPlayers(PLAYER_LIST); + ScrambleTokens(PLAYER_LIST, ";"); + FOUND_NEAR_TARGET = 0; + SEARCH_RAD = 512; + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + find_near_teleporter(); + } + if (FOUND_NEAR_TARGET > 0) + { + npcatk_settarget(NEW_TARGET); + if ((G_DEVELOPER_MODE)) + { + SendInfoMessageToAll("green " + SORC_CHIEF: + "found " + GetEntityName(NEW_TARGET) + "near " + FOUND_NEAR_TARGET); + } + string PICK_TELE = FOUND_NEAR_TARGET; + } + } + if (PICK_TELE == 1) + { + TELE_DEST = TELE_ID1; + } + if (PICK_TELE == 2) + { + TELE_DEST = TELE_ID2; + } + if (PICK_TELE == 3) + { + TELE_DEST = TELE_ID3; + } + if (PICK_TELE == 4) + { + TELE_DEST = TELE_ID4; + } + if (PICK_TELE > N_TELES) + { + TELE_DEST = DEFAULT_TELE_POINT; + TELE_ANGS = NPC_SPAWN_ANGLES; + } + SpawnNPC("monsters/summon/ibarrier", TELE_DEST, ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 64, 2, 0, 0, 0, 1 + leap_tele(); + } + + void find_near_teleporter() + { + string CUR_PLAYER = GetToken(PLAYER_LIST, i, ";"); + string PLAYER_ORG = GetEntityOrigin(CUR_PLAYER); + if (!(FOUND_NEAR_TARGET == 0)) return; + if (!(N_TELES >= 1)) return; + string TEST_TELE = TELE_ID1; + TEST_TELE = "z"; + float TELE_DIST = Distance(PLAYER_ORG, TEST_TELE); + if (TELE_DIST < SEARCH_RAD) + { + FOUND_NEAR_TARGET = 1; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 2)) return; + string TEST_TELE = TELE_ID2; + TEST_TELE = "z"; + string OLD_TELE_DIST = TELE_DIST; + float TELE_DIST = Distance(PLAYER_ORG, TEST_TELE); + if (TELE_DIST < SEARCH_RAD) + { + if (OLD_TELE_DIST > TELE_DIST) + { + } + FOUND_NEAR_TARGET = 2; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 3)) return; + string TEST_TELE = TELE_ID3; + TEST_TELE = "z"; + string OLD_TELE_DIST = TELE_DIST; + float TELE_DIST = Distance(PLAYER_ORG, TEST_TELE); + if (TELE_DIST < SEARCH_RAD) + { + if (OLD_TELE_DIST > TELE_DIST) + { + } + FOUND_NEAR_TARGET = 3; + NEW_TARGET = CUR_PLAYER; + } + if (!(N_TELES >= 4)) return; + string TEST_TELE = TELE_ID4; + TEST_TELE = "z"; + string OLD_TELE_DIST = TELE_DIST; + float TELE_DIST = Distance(PLAYER_ORG, TEST_TELE); + if (TELE_DIST < SEARCH_RAD) + { + if (OLD_TELE_DIST > TELE_DIST) + { + } + FOUND_NEAR_TARGET = 4; + NEW_TARGET = CUR_PLAYER; + } + string TEST_TELE = NPC_SPAWN_LOC; + TEST_TELE = "z"; + string OLD_TELE_DIST = TELE_DIST; + float TELE_DIST = Distance(PLAYER_ORG, TEST_TELE); + if (TELE_DIST < SEARCH_RAD) + { + if (OLD_TELE_DIST > TELE_DIST) + { + } + FOUND_NEAR_TARGET = 5; + NEW_TARGET = CUR_PLAYER; + } + } + + void leap_tele() + { + AM_LEAPING = 1; + NPC_FORCED_MOVEDEST = 1; + npcatk_suspend_ai(1.0); + SetMoveDest(/* TODO: $relpos */ $relpos(0, 1000, 0)); + ScheduleDelayedEvent(0.1, "do_leap"); + RENDER_COUNT = 255; + ScheduleDelayedEvent(0.25, "flicker_out"); + ScheduleDelayedEvent(0.75, "tele_out"); + ScheduleDelayedEvent(1.0, "tele_in"); + } + + void flicker_out() + { + RENDER_COUNT -= 50; + if (!(RENDER_COUNT > 0)) return; + ScheduleDelayedEvent(0.1, "flicker_out"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_COUNT); + } + + void tele_out() + { + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + SetEntityOrigin(GetOwner(), Vector3(-20000, 10000, -20000)); + } + + void tele_in() + { + SetEntityOrigin(GetOwner(), TELE_DEST); + EmitSound(GetOwner(), 0, SOUND_TELE, 10); + RENDER_COUNT = 0; + flicker_in(); + LAST_TELE = GetGameTime(); + } + + void flicker_in() + { + RENDER_COUNT += 50; + if (RENDER_COUNT >= 255) + { + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + if (!(RENDER_COUNT < 255)) return; + ScheduleDelayedEvent(0.1, "flicker_in"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", RENDER_COUNT); + } + + void do_tornado() + { + PlayAnim("critical", ANIM_SWIPE); + SpawnNPC("monsters/summon/tornado", /* TODO: $relpos */ $relpos(0, 72, 0), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), 200, 20.0 + } + + void OnTakeDamage(CBaseEntity@ inflictor, CBaseEntity@ attacker, int damage, int damageType) override + { + if ((ATTACK_PARRY)) + { + SetDamage("hit"); + SetDamage("dmg"); + } + } + + void do_throw() + { + if ((AM_UNARMED)) return; + PLAYERS_NEAR = 0; + PLAYERS_INRANGE = 0; + GetAllPlayers(SORC_LPLAYERS); + PNEAR_LOOP_COUNT = 0; + for (int i = 0; i < GetTokenCount(SORC_LPLAYERS, ";"); i++) + { + any_players_near(); + } + if ((PLAYERS_NEAR)) return; + if (!(PLAYERS_INRANGE)) return; + do_throw2(); + } + + void do_throw2() + { + SetModelBody(2, 0); + AM_UNARMED = 1; + PlayAnim("critical", ANIM_SWIPE); + SpawnNPC("monsters/summon/blood_drinker", /* TODO: $relpos */ $relpos(0, 48, 48), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()), GetEntityIndex(m_hLastStruck), 100, 30.0 + BLOOD_DRINKER_ID = GetEntityIndex(m_hLastCreated); + } + + void any_players_near() + { + string CUR_PLAYER = GetToken(SORC_LPLAYERS, PNEAR_LOOP_COUNT, ";"); + if (GetEntityRange(CUR_PLAYER) < ATTACK_RANGE) + { + PLAYERS_NEAR = 1; + } + if (GetEntityRange(CUR_PLAYER) < 2048) + { + PLAYERS_INRANGE = 1; + } + PNEAR_LOOP_COUNT += 1; + } + + void do_special() + { + string NEXT_TRY = FREQ_SPECIAL; + if ((SUSPEND_AI)) + { + float NEXT_TRY = 5.0; + int ABORT_SPECIAL = 1; + } + NEXT_TRY("do_special"); + if ((ABORT_SPECIAL)) return; + CUR_SPECIAL += 1; + if (CUR_SPECIAL > 3) + { + CUR_SPECIAL = 1; + } + if (CUR_SPECIAL == 1) + { + do_tornado(); + } + if (CUR_SPECIAL == 2) + { + do_lstorm(); + } + if (CUR_SPECIAL == 3) + { + do_throw(); + } + } + + void sword_return() + { + SetModelBody(2, 8); + AM_UNARMED = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + UseTrigger("towndoors01"); + if (((BLOOD_DRINKER_ID !is null))) + { + CallExternal(BLOOD_DRINKER_ID, "ext_remove"); + } + SetModelBody(2, 0); + CallExternal(GAME_MASTER, "gm_fade", GetEntityIndex(GetOwner())); + repell_burst(GetEntityOrigin(GetOwner()), BARRIER_RAD, 0); + ClientEvent("new", "all", "sorc_palace/sorc_chief_cl", GetEntityIndex(GetOwner()), 128, Vector3(255, 0, 0), 3.0, 1); + } + +} + +} diff --git a/scripts/angelscript/sorc_palace/sorc_chief_cl.as b/scripts/angelscript/sorc_palace/sorc_chief_cl.as new file mode 100644 index 00000000..b8dd673e --- /dev/null +++ b/scripts/angelscript/sorc_palace/sorc_chief_cl.as @@ -0,0 +1,94 @@ +#pragma context client + +namespace MS +{ + +class SorcChiefCl : CGameScript +{ + string CL_AUTO_LIFT; + string CL_COLOR; + string CL_DURATION; + string CL_RADIUS; + string CYCLE_ANGLE; + int GO_AWAY; + string OWNER_IDX; + int TOTAL_OFS; + + void client_activate() + { + OWNER_IDX = param1; + CL_RADIUS = param2; + CL_COLOR = param3; + CL_DURATION = param4; + CL_AUTO_LIFT = param5; + CL_DURATION("remove_me"); + ScheduleDelayedEvent(0.1, "spriteify"); + } + + void spriteify() + { + TOTAL_OFS = 64; + for (int i = 0; i < 18; i++) + { + createsprite(); + } + } + + void createsprite() + { + string l.pos = /* TODO: $getcl */ $getcl(OWNER_IDX, "origin"); + if (CYCLE_ANGLE == "CYCLE_ANGLE") + { + CYCLE_ANGLE = 0; + } + CYCLE_ANGLE += 20; + l.pos += /* TODO: $relpos */ $relpos(Vector3(0, CYCLE_ANGLE, 0), Vector3(0, CL_RADIUS, 36)); + ClientEffect("tempent", "sprite", "3dmflaora.spr", l.pos, "setup_sprite1_sparkle", "sprite_update"); + } + + void setup_sprite1_sparkle() + { + ClientEffect("tempent", "set_current_prop", "death_delay", CL_DURATION); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 1); + ClientEffect("tempent", "set_current_prop", "scale", 1.0); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 180); + ClientEffect("tempent", "set_current_prop", "rendercolor", CL_COLOR); + ClientEffect("tempent", "set_current_prop", "gravity", 0.0); + ClientEffect("tempent", "set_current_prop", "collide", "none"); + ClientEffect("tempent", "set_current_prop", "update", 1); + } + + void sprite_update() + { + if (!(GO_AWAY)) return; + ClientEffect("tempent", "set_current_prop", "death_delay", 2.0); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(0, 0, 400)); + ClientEffect("tempent", "set_current_prop", "fadeout", 2.0); + ClientEffect("tempent", "set_current_prop", "gravity", -4.0); + } + + void clear_sprites() + { + GO_AWAY = 1; + sprite_update(); + ScheduleDelayedEvent(5.0, "remove_me"); + } + + void remove_me() + { + if ((CL_AUTO_LIFT)) + { + CL_AUTO_LIFT = 0; + clear_sprites(); + } + else + { + RemoveScript(); + } + } + +} + +} diff --git a/scripts/angelscript/sorc_palace/thuldahr.as b/scripts/angelscript/sorc_palace/thuldahr.as new file mode 100644 index 00000000..396e0a48 --- /dev/null +++ b/scripts/angelscript/sorc_palace/thuldahr.as @@ -0,0 +1,267 @@ +#pragma context server + +#include "monsters/orc_base_melee.as" +#include "monsters/sorc_base.as" + +namespace MS +{ + +class Thuldahr : CGameScript +{ + string ANIM_ATTACK; + string ANIM_KICK; + string ANIM_KNEEL; + string ANIM_SWING; + int ATTACH_IDX_AXE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + string CHIEF_ID; + int CONFIRMED_ORDER; + int CYCLES_ON; + int DMG_SWING; + int DMG_ZAP; + int DOT_ZAP; + int DOUBLE_REDUNDANT; + float FREQ_KICK; + float FREQ_SPECIAL; + int KICK_ATTACK; + string KNEEL_MODE; + string NEXT_KICK; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int N_SPECIALS; + string REPULSE_TARGETS; + int SORC_NO_TELE; + string SOUND_DRAW_WEAPON; + string SOUND_SWING; + string SPECIAL_DURATION; + string ZAP_INDEXES; + string ZAP_TARGETS; + + Thuldahr() + { + ANIM_KNEEL = "kneel"; + ANIM_SWING = "gglowswing"; + ANIM_KICK = "kick"; + ANIM_ATTACK = "gglowswing"; + Precache("weather/lightning.wav"); + ATTACH_IDX_AXE = 2; + FREQ_SPECIAL = Random(10.0, 20.0); + N_SPECIALS = 3; + FREQ_KICK = Random(10.0, 20.0); + DMG_SWING = 400; + DMG_ZAP = 300; + DOT_ZAP = 100; + if (StringToLower(GetMapName()) == "shad_palace") + { + NPC_IS_BOSS = 1; + NPC_GIVE_EXP = 10000; + GiveItem(GetOwner(), "axes_gthunder11"); + } + else + { + NPC_GIVE_EXP = 1000; + } + SORC_NO_TELE = 1; + SOUND_DRAW_WEAPON = "weapons/swords/sworddraw.wav"; + SOUND_SWING = "weapons/swinghuge.wav"; + } + + void orc_spawn() + { + SetModel("monsters/thuldahr.mdl"); + SetModelBody(2, 1); + SetName("Thuldahr"); + SetHealth(15000); + SetRace("orc"); + SetDamageResistance("all", 0.5); + SetDamageResistance("lightning", 0.0); + SetDamageResistance("poison", 1.2); + SetDamageResistance("acid", 1.5); + SetWidth(48); + SetHeight(128); + if (!(true)) return; + CHIEF_ID = FindEntityByName("the_warchief"); + if ((G_SORC_CHIEF_PRESENT)) + { + KNEEL_MODE = 1; + SetIdleAnim(ANIM_KNEEL); + SetMoveAnim(ANIM_KNEEL); + npcatk_suspend_ai(); + SetRoam(false); + SetInvincible(2); + } + else + { + SetRoam(true); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + } + } + + void OnPostSpawn() override + { + ATTACK_MOVERANGE = 96; + ATTACK_RANGE = 128; + ATTACK_HITRANGE = 200; + } + + void OnDamage(int damage) override + { + if (!(KNEEL_MODE)) return; + SetDamage("dmg"); + SetDamage("hit"); + return; + } + + void ext_chief_orders_attack() + { + SetSayTextRange(1024); + SetModelBody(2, 0); + SetMoveAnim(ANIM_WALK); + SetIdleAnim(ANIM_IDLE); + SayText("Yes , warchief! They shall die like dogs!"); + Say("[.16] [.32] [.32] [.16]"); + PlayAnim("critical", "nod_yes"); + Random(1_0, 2_0)("combat_mode_go"); + } + + void combat_mode_go() + { + KNEEL_MODE = 0; + npcatk_resume_ai(); + SetRoam(true); + SetModelBody(2, 1); + EmitSound(GetOwner(), 0, SOUND_DRAW_WEAPON, 10); + SetInvincible(false); + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + FREQ_SPECIAL("do_special"); + } + + void do_special() + { + int RND_SPECIAL = RandomInt(1, N_SPECIALS); + if (RND_SPECIAL == 1) + { + lstrikes_go(); + SPECIAL_DURATION = 5.0; + } + if (RND_SPECIAL == 2) + { + repulse_go(); + SPECIAL_DURATION = 5.0; + } + string SPECIAL_DELAY = FREQ_SPECIAL; + SPECIAL_DELAY += SPECIAL_DURATION; + SPECIAL_DELAY("do_special"); + } + + void lstrikes_go() + { + PlayAnim("critical", "warcry"); + npcatk_suspend_ai(); + ScheduleDelayedEvent(3.0, "npcatk_resume_ai"); + ZAP_TARGETS = FindEntitiesInSphere("enemy", 1024); + if (!(ZAP_TARGETS != "none")) return; + ZAP_INDEXES = ""; + string N_ZAP_TARGETS = GetTokenCount(ZAP_TARGETS, ";"); + for (int i = 0; i < N_ZAP_TARGETS; i++) + { + lstrikes_affect_targets(); + } + ClientEvent("new", "all", "effects/sfx_multi_lightning", ZAP_INDEXES); + } + + void lstrikes_affect_targets() + { + string CUR_TARG = GetToken(ZAP_TARGETS, i, ";"); + if (ZAP_INDEXES.length() > 0) ZAP_INDEXES += ";"; + ZAP_INDEXES += GetEntityIndex(CUR_TARG); + DoDamage(CUR_TARG, "direct", DMG_ZAP, 1.0, GetOwner()); + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_ZAP); + } + + void repulse_go() + { + PlayAnim("critical", "warcry"); + npcatk_suspend_ai(); + ScheduleDelayedEvent(3.0, "npcatk_resume_ai"); + ClientEvent("new", "all", "effects/sfx_shock_burst", GetEntityOrigin(GetOwner()), 256, 1, Vector3(255, 255, 0)); + REPULSE_TARGETS = FindEntitiesInSphere("enemy", 512); + if (!(REPULSE_TARGETS != "none")) return; + for (int i = 0; i < GetTokenCount(REPULSE_TARGETS, ";"); i++) + { + repulse_affect_targets(); + } + } + + void repulse_affect_targets() + { + string CUR_TARG = GetToken(REPULSE_TARGETS, i, ";"); + ApplyEffect(CUR_TARG, "effects/dot_lightning", 5.0, GetEntityIndex(GetOwner()), DOT_ZAP); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 2000, 110))); + } + + void frame_swing() + { + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + string AXE_POS = GetEntityProperty(GetOwner(), "attachpos"); + XDoDamage(AXE_POS, 200, DMG_SWING, 0, GetOwner(), GetOwner(), "none", "slash"); + if (!(GetGameTime() > NEXT_KICK)) return; + ANIM_ATTACK = ANIM_KICK; + } + + void frame_kick_start() + { + baseorc_yell(); + } + + void frame_kick_land() + { + EmitSound(GetOwner(), 0, SOUND_KICK, 10); + KICK_ATTACK = 1; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_KICK, 1.0, "blunt"); + ANIM_ATTACK = ANIM_SWING; + NEXT_KICK = GetGameTime(); + NEXT_KICK += FREQ_KICK; + } + + void game_dodamage() + { + if ((KICK_ATTACK)) + { + if ((param1)) + { + } + ApplyEffect(param2, "effects/debuff_stun", 8.0, GetEntityIndex(GetOwner())); + } + KICK_ATTACK = 0; + } + + void OnDeath(CBaseEntity@ attacker) override + { + CallExternal(CHIEF_ID, "thuld_died"); + } + + void sorcs_confirm_order() + { + if ((CONFIRMED_ORDER)) return; + CONFIRMED_ORDER = 1; + ScheduleDelayedEvent(1.0, "thuld_confirm"); + } + + void thuld_confirm() + { + if ((DOUBLE_REDUNDANT)) return; + DOUBLE_REDUNDANT = 1; + SayText("Yes , warchief."); + Say("[.16] [.32] [.32] [.16]"); + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/finven.as b/scripts/angelscript/sorc_villa/finven.as new file mode 100644 index 00000000..b8d627b3 --- /dev/null +++ b/scripts/angelscript/sorc_villa/finven.as @@ -0,0 +1,260 @@ +#pragma context server + +#include "monsters/base_npc_vendor.as" +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class Finven : CGameScript +{ + string ARCHER_ID; + int CHAT_AUTO_HAIL; + int CHAT_NEVER_INTERRUPT; + int DID_INTRO; + int NPC_CHECK_LEVEL; + string PLAYER_ID; + string STORE_NAME; + string STORE_TRIGGERTEXT; + int VENDOR_MENU_OFF; + int VENDOR_NOT_ON_USE; + + Finven() + { + STORE_NAME = "finven"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + CHAT_AUTO_HAIL = 1; + NPC_CHECK_LEVEL = 1; + CHAT_NEVER_INTERRUPT = 1; + } + + void OnSpawn() override + { + SetName("Finven"); + SetName("human_vendor"); + SetHealth(1); + SetInvincible(true); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetModel("npc/human1.mdl"); + SetModelBody(0, 3); + SetNoPush(true); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + SetSayTextRange(768); + VENDOR_MENU_OFF = 1; + VENDOR_NOT_ON_USE = 1; + if (!(true)) return; + scan_for_players(); + chat_add_text("the_elf", "Oh, the elf, just outside the villa, his name's Varondo... He's with Galat.", 6.2, "none", !"voice_galat1"); + chat_add_text("the_elf", "They won't let him in, but seem fine with setting up shop there. They haven't killed him yet, at least.", 6.4, "talkleft", !"voice_galat2"); + chat_add_text("the_elf", "Leave it to Galat to have a representative, even way out here in this gods foresaken place, eh?", 5.2, "none", !"voice_galat3"); + chat_add_text("say_hi", "Hi there, I'm the merchant. The only one in town - or at least, the only one without tusks.", 5.9, "none", !"voice_hail1"); + chat_add_text("say_hi", "The orcs used to raid our village all the time, but then Chief Runegahr got it into his head we'd be more useful alive than dead.", 7.5, "none", !"voice_hail2"); + chat_add_text("say_hi", "So here I am, selling stuff in a town... Full of orcs... Heh... It's a funny thing, really...", 7.1, "panic", !"voice_hail3"); + chat_add_text("intro_talk", "*cough* Sorry... We don't get many humans in these parts...", 4.3, "none", !"voice_intro1"); + chat_add_text("intro_talk", "Especially not ones carrying swords... It's just, me, really.", 3.8, "none", !"voice_intro2"); + chat_add_text("intro_talk", "I'm Finven, the merchant. The orcs they, umm... Let me sell my wares here, at a discount...", 7.1, "none", !"voice_intro3"); + chat_add_text("intro_talk", "Our village, Sunden-dal, lies deep in the desert. We produce several, commodities, there, that the orcs cannot.", 6.9, "none", !"voice_intro4"); + chat_add_text("intro_talk", "So, in exchange for my services, they allow the village to survive. They even help us out from time to time.", 6.5, "none", !"voice_intro5"); + chat_add_text("intro_talk", "It's hard, maintaining such a small community in such a dangerous place, you see...", 4.4, "none", !"voice_intro6"); + chat_add_text("intro_talk", "Now, let's see what I can do for you.", 1.8, "none", !"voice_intro7"); + CatchSpeech("say_hi", "hi"); + CatchSpeech("say_elf", "elf"); + } + + void game_menu_getoptions() + { + if (!(G_GAVE_DIRECTIONS)) + { + string reg.mitem.title = "Rumors"; + } + else + { + string reg.mitem.title = "About the Elf"; + } + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_elf"; + } + + void say_hi() + { + if (!(DID_INTRO)) return; + chat_start_sequence("say_hi"); + } + + void say_elf() + { + if (!(DID_INTRO)) return; + chat_start_sequence("the_elf"); + } + + void scan_for_players() + { + if ((DID_INTRO)) return; + ScheduleDelayedEvent(1.0, "scan_for_players"); + if (!(CanSee("player", 128))) return; + DID_INTRO = 1; + PLAYER_ID = GetEntityIndex(m_hLastSeen); + do_intro(); + } + + void do_intro() + { + PlayAnim("critical", "fear1"); + SetIdleAnim("crouch_idle"); + chat_now("By the gods, HUMANS! WE'RE UNDER ATTACK!!!", 3.0, "fear1", "clear_que"); + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_startle1.wav", 10); + ScheduleDelayedEvent(3.3, "do_intro2"); + } + + void do_intro2() + { + ARCHER_ID = FindEntityByName("roof_archer"); + CallExternal(ARCHER_ID, "ext_under_attack1", GetEntityIndex(GetOwner())); + ScheduleDelayedEvent(4.0, "do_intro3"); + } + + void do_intro3() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_startle2.wav", 10); + chat_now("Oh... Yes... Silly me... Eh, greetings, great travelers.", "add_to_que"); + SetIdleAnim("idle1"); + PlayAnim("critical", "crouch_idle2"); + ScheduleDelayedEvent(4.3, "do_intro4"); + } + + void do_intro4() + { + CallExternal(ARCHER_ID, "ext_under_attack2"); + ScheduleDelayedEvent(2.0, "do_intro5"); + } + + void do_intro5() + { + open_store(); + chat_start_sequence("intro_talk", "prioritize", "add_to_que"); + } + + void open_store() + { + VENDOR_MENU_OFF = 0; + VENDOR_NOT_ON_USE = 0; + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_apple", 15, 0.5); + AddStoreItem(STORE_NAME, "health_mpotion", 4, 0.5); + AddStoreItem(STORE_NAME, "health_spotion", 4, 0.5); + AddStoreItem(STORE_NAME, "mana_mpotion", 4, 0.5); + AddStoreItem(STORE_NAME, "drink_mead", 20, 0.5); + AddStoreItem(STORE_NAME, "drink_ale", 20, 0.5); + AddStoreItem(STORE_NAME, "scroll2_summon_rat", 2, 0.5); + AddStoreItem(STORE_NAME, "scroll2_rejuvenate", 2, 0.5); + AddStoreItem(STORE_NAME, "scroll2_glow", 5, 0.5); + AddStoreItem(STORE_NAME, "scroll2_fire_ball", 1, 0.5); + AddStoreItem(STORE_NAME, "scroll2_poison", 1, 0.5); + AddStoreItem(STORE_NAME, "armor_mongol", 1, 0.5); + AddStoreItem(STORE_NAME, "armor_helm_golden", 1, 3.0); + AddStoreItem(STORE_NAME, "armor_salamander", 1, 30.0); + AddStoreItem(STORE_NAME, "shields_lironshield", 3, 0.5); + AddStoreItem(STORE_NAME, "pack_heavybackpack", 5, 0.5); + AddStoreItem(STORE_NAME, "pack_archersquiver", 5, 1.0); + AddStoreItem(STORE_NAME, "sheath_back_holster", 1, 0.5); + AddStoreItem(STORE_NAME, "sheath_spellbook", 3, 0.5); + AddStoreItem(STORE_NAME, "swords_iceblade", 1, 0.5); + AddStoreItem(STORE_NAME, "axes_poison1", 1, 1.0); + AddStoreItem(STORE_NAME, "smallarms_huggerdagger4", 1, 0.5); + AddStoreItem(STORE_NAME, "smallarms_craftedknife4", 1, 0.5); + AddStoreItem(STORE_NAME, "blunt_granitemace", 1, 1.0); + AddStoreItem(STORE_NAME, "blunt_granitemaul", 1, 1.0); + AddStoreItem(STORE_NAME, "bows_swiftbow", 1, 0.5); + AddStoreItem(STORE_NAME, "item_light_crystal", 10, 1.0); + AddStoreItem(STORE_NAME, "item_charm_w1", 1, 3.0); + AddStoreItem(STORE_NAME, "polearms_qs", 5, 1.0); + AddStoreItem(STORE_NAME, "polearms_sp", 2, 1.0); + AddStoreItem(STORE_NAME, "polearms_tri", 1, 1.0); + if (RandomInt(1, 16) == 16) + { + AddStoreItem(STORE_NAME, "polearms_nag", 1, 5.0); + } + } + + void ext_player_got_item() + { + string L_INAME = GetEntityName(param1); + string L_INAME = StringToLower(L_INAME); + if (!((L_INAME).findFirst("ice") >= 0)) return; + chat_now("Those are good for keeping you cool, if you are, ummm, very, careful with them.", 4.0, "add_to_que"); + } + + void voice_galat1() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_galat1.wav", 10); + } + + void voice_galat2() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_galat2.wav", 10); + } + + void voice_galat3() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_galat3.wav", 10); + } + + void voice_hail1() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_hail1.wav", 10); + } + + void voice_hail2() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_hail2.wav", 10); + } + + void voice_hail3() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_hail3.wav", 10); + } + + void voice_intro1() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_intro1.wav", 10); + } + + void voice_intro2() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_intro2.wav", 10); + } + + void voice_intro3() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_intro3.wav", 10); + } + + void voice_intro4() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_intro4.wav", 10); + } + + void voice_intro5() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_intro5.wav", 10); + } + + void voice_intro6() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_intro6.wav", 10); + } + + void voice_intro7() + { + EmitSound(GetOwner(), 0, "voices/sorc_villa/finven_intro7.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/game_master.as b/scripts/angelscript/sorc_villa/game_master.as new file mode 100644 index 00000000..3d7bb47f --- /dev/null +++ b/scripts/angelscript/sorc_villa/game_master.as @@ -0,0 +1,245 @@ +#pragma context server + +namespace MS +{ + +class GameMaster : CGameScript +{ + int GM_ACHIEVE_LEVEL; + string GM_ACHIEVE_NAMES; + int GM_MEDAL_COUNT; + int SORCV_CHALLENGE_STARTED; + string SORCV_FRIENDLY; + string SORCV_PLAYER_NAMES; + + void gm_sorcv_init() + { + SORCV_FRIENDLY = G_SORCV_FRIENDLY; + if (!(true)) return; + SetGlobalVar("G_SORCV_SETUP", 1); + LogDebug("gm_sorcv_init friend SORCV_FRIENDLY setup G_SORCV_SETUP"); + if ((SORCV_FRIENDLY)) + { + UseTrigger("spawn_guard1_friendly"); + SetGlobalVar("G_SORCV_FRIENDLY", 0); + } + else + { + UseTrigger("setup_hostile"); + SetGlobalVar("G_TRACK_DEATHS", 1); + SetGlobalVar("G_TRACK_DEATHS_TRIGGER", 10); + SetGlobalVar("G_TRACK_DEATHS_EVENT", "gm_sorcv_start_challenge"); + } + } + + void gm_sorcv_ogers() + { + string IN_DA_HOLE = param1; + CallExternal("all", "player_ogre_hole", IN_DA_HOLE); + } + + void gm_sorcv_a1() + { + if ((SORCV_FRIENDLY)) + { + UseTrigger("spawn_f1"); + } + else + { + UseTrigger("spawn_h1"); + } + } + + void gm_sorcv_a2() + { + if ((SORCV_FRIENDLY)) + { + UseTrigger("spawn_f2"); + } + else + { + UseTrigger("spawn_h2"); + } + } + + void gm_sorcv_a3() + { + if (!(SORCV_FRIENDLY)) + { + UseTrigger("spawn_h3"); + } + } + + void gm_sorcv_shop1() + { + if ((SORCV_FRIENDLY)) + { + UseTrigger("spawn_shop_f1"); + } + else + { + UseTrigger("spawn_shop_h1"); + } + } + + void gm_sorcv_smith() + { + if ((SORCV_FRIENDLY)) + { + UseTrigger("spawn_smith_f1"); + } + else + { + UseTrigger("spawn_smith_h1"); + } + } + + void gm_sorcv_horrors1() + { + if (!(SORCV_FRIENDLY)) + { + UseTrigger("s_horrors"); + } + } + + void gm_sorcv_horrors2() + { + if (!(SORCV_FRIENDLY)) + { + UseTrigger("s_horrors2"); + } + } + + void gm_sorv_north() + { + if (!(SORCV_FRIENDLY)) + { + UseTrigger("spawn_archers_north"); + } + } + + void gm_sorcv_shaman1() + { + if (!(SORCV_FRIENDLY)) + { + UseTrigger("spawn_shaman1"); + } + } + + void gm_sorcv_give_medal() + { + LogDebug("gm_sorcv_give_medal GetEntityName(param1)"); + if ((ItemExists(param1, "item_sorcv"))) return; + // TODO: offer PARAM1 item_sorcv + CallExternal(m_hLastCreated, "ext_set_owner", param1); + string CUR_ACHIEVEMENTS = GetPlayerQuestData(param1, "a"); + string CUR_ALEVEL = GetToken(CUR_ACHIEVEMENTS, 0, ";"); + if (CUR_ALEVEL < 1) + { + SetToken(CUR_ACHIEVEMENTS, 0, 1, ";"); + SetPlayerQuestData(param1, "a"); + } + } + + void gm_sorcv_start_challenge() + { + LogDebug("gm_sorcv_start_challenge"); + if ((SORCV_CHALLENGE_STARTED)) return; + SORCV_CHALLENGE_STARTED = 1; + SetGlobalVar("G_TRACK_DEATHS_EVENT", "gm_sorcv_achieve"); + SetGlobalVar("G_TRACK_DEATHS_TRIGGER", 50); + GetAllPlayers(SORCV_PLAYERS); + GM_MEDAL_COUNT = 0; + GM_ACHIEVE_LEVEL = 1; + GM_ACHIEVE_NAMES = "null;Tin;Bronze;Silver;Gold;Platinum;Diamond;LORELDIAN"; + SORCV_PLAYER_NAMES = "Participating Players:|"; + for (int i = 0; i < int(SORCV_PLAYERS.length()); i++) + { + gm_sorcv_make_player_list(); + } + gm_sorcv_handle_medals(); + } + + void gm_sorcv_make_player_list() + { + string CUR_PLAYER = SORCV_PLAYERS[int(i)]; + SORCV_PLAYER_NAMES += GetEntityName(CUR_PLAYER); + SORCV_PLAYER_NAMES += "|"; + } + + void gm_sorcv_handle_medals() + { + string CUR_PLAYER = SORCV_PLAYERS[int(GM_MEDAL_COUNT)]; + LogDebug("gm_sorcv_handle_medals GetEntityName(CUR_PLAYER)"); + SORCV_PLAYER_NAMES += "Player list is now locked!"; + gm_sorcv_give_medal(CUR_PLAYER); + GM_MEDAL_COUNT += 1; + if (GM_MEDAL_COUNT < int(SORCV_PLAYERS.length())) + { + ScheduleDelayedEvent(1.0, "gm_sorcv_handle_medals"); + } + ShowHelpTip(CUR_PLAYER, "generic", "Shadahar Village Challenge Has Begun!", SORCV_PLAYER_NAMES); + } + + void gm_sorcv_achieve() + { + LogDebug("gm_sorcv_achieve GM_ACHIEVE_LEVEL"); + if (!(GM_ACHIEVE_LEVEL < 7)) return; + GM_ACHIEVE_LEVEL += 1; + G_TRACK_DEATHS_TRIGGER += 50; + if (GM_ACHIEVE_LEVEL == 7) + { + SetGlobalVar("G_TRACK_DEATHS", 0); + ScheduleDelayedEvent(10.0, "gm_sorcv_end_challenge"); + } + for (int i = 0; i < int(SORCV_PLAYERS.length()); i++) + { + gm_sorcv_update_achievements(); + } + } + + void gm_sorcv_update_achievements() + { + string CUR_PLAYER = SORCV_PLAYERS[int(i)]; + if (!(GetPlayerClientAddress(CUR_PLAYER) != 0)) return; + string CUR_ACHIEVEMENTS = GetPlayerQuestData(CUR_PLAYER, "a"); + string CUR_ALEVEL = GetToken(CUR_ACHIEVEMENTS, 0, ";"); + if (CUR_ALEVEL < GM_ACHIEVE_LEVEL) + { + SetToken(CUR_ACHIEVEMENTS, 0, GM_ACHIEVE_LEVEL, ";"); + SetPlayerQuestData(CUR_PLAYER, "a"); + string MSG_OUT = "You now have achieved "; + MSG_OUT = GetToken(GM_ACHIEVE_NAMES, GM_ACHIEVE_LEVEL, ";") + "Status for the Shadahar Village Challenge"; + SendInfoMsg(CUR_PLAYER, "ACHIEVEMENT LEVEL INCREASED! " + MSG_OUT); + } + else + { + string MSG_OUT = "Your team has achieved "; + if (CUR_ALEVEL == GM_ACHIEVE_LEVEL) + { + string MSG_REASON = "They are now on your level."; + } + if (CUR_ALEVEL > GM_ACHIEVE_LEVEL) + { + string MSG_REASON = "You have already gone beyond this level."; + } + MSG_OUT = GetToken(GM_ACHIEVE_NAMES, GM_ACHIEVE_LEVEL, ";") + "Status for the Shadahar Village Challenge." + MSG_REASON; + SendInfoMsg(CUR_PLAYER, "ACHIEVEMENT PROGRESS! " + MSG_OUT); + } + } + + void gm_sorcv_end_challenge() + { + UseTrigger("end_challenge"); + ScheduleDelayedEvent(1.0, "gm_sorcv_end_challenge2"); + } + + void gm_sorcv_end_challenge2() + { + CallExternal("all", "npc_suicide", "override"); + SendInfoMsg("all", "CHALLENGE COMPLETE The village has been cleared!"); + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/sfx_blacksmith.as b/scripts/angelscript/sorc_villa/sfx_blacksmith.as new file mode 100644 index 00000000..27f80ae7 --- /dev/null +++ b/scripts/angelscript/sorc_villa/sfx_blacksmith.as @@ -0,0 +1,101 @@ +#pragma context server + +namespace MS +{ + +class SfxBlacksmith : CGameScript +{ + string SOUND_ANVIL; + + SfxBlacksmith() + { + SOUND_ANVIL = "amb/fx_anvil.wav"; + } + + void OnSpawn() override + { + SetName("sfx_blacksmith"); + SetModel("weapons/p_weapons2.mdl"); + SetIdleAnim("dagger_floor_idle"); + SetModelBody(0, 79); + SetInvincible(true); + SetNoPush(true); + SetAngles("face"); + } + + void do_spark() + { + string SPARK_LOC = GetEntityOrigin(GetOwner()); + EmitSound(GetOwner(), 0, SOUND_ANVIL, 5); + ClientEvent("update", "all", "const.localplayer.scriptID", "fx_spark", SPARK_LOC); + } + + void do_forge_fx() + { + string SMITH_TYPE = param1; + string WEAPON_SCRIPT = param2; + string FX_LOC = GetEntityOrigin(GetOwner()); + ScheduleDelayedEvent(6.0, "do_forge_fx_end"); + Precache("skull.spr"); + Precache("ice_icon.spr"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 255); + if (WEAPON_SCRIPT == "swords_ub") + { + SetModel("weapons/p_weapons3.mdl"); + SetIdleAnim("standard_floor_idle"); + SetModelBody(0, 65); + } + if (WEAPON_SCRIPT == "swords_sf") + { + SetModel("weapons/p_weapons3.mdl"); + SetIdleAnim("standard_floor_idle"); + SetModelBody(0, 86); + } + if (WEAPON_SCRIPT == "axes_df") + { + SetModel("weapons/p_weapons3.mdl"); + SetIdleAnim("standard_floor_idle"); + SetModelBody(0, 79); + } + if (WEAPON_SCRIPT == "blunt_db") + { + SetModel("weapons/p_weapons3.mdl"); + SetIdleAnim("standard_floor_idle"); + SetModelBody(0, 73); + } + if (WEAPON_SCRIPT == "axes_ss") + { + SetModel("weapons/p_weapons3.mdl"); + SetIdleAnim("standard_floor_idle"); + SetModelBody(0, 76); + } + if (WEAPON_SCRIPT == "smallarms_vt") + { + SetModel("weapons/p_weapons3.mdl"); + SetIdleAnim("standard_floor_idle"); + SetModelBody(0, 68); + } + if (WEAPON_SCRIPT == "blunt_gauntlets_ic") + { + SetModel("weapons/p_weapons3.mdl"); + SetIdleAnim("standard_floor_idle"); + SetModelBody(0, 70); + } + ClientEvent("update", "all", "const.localplayer.scriptID", "fx_smith_effect", SMITH_TYPE, "skull.spr", "ice_icon.spr"); + } + + void do_forge_fx_end() + { + ClientEvent("update", "all", "const.localplayer.scriptID", "fx_smith_effect", "none"); + SetModel("weapons/p_weapons2.mdl"); + SetIdleAnim("dagger_floor_idle"); + SetModelBody(0, 79); + SetAngles("face"); + SetProp(GetOwner(), "rendermode", 0); + SetProp(GetOwner(), "renderamt", 255); + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/sorc_alchemist.as b/scripts/angelscript/sorc_villa/sorc_alchemist.as new file mode 100644 index 00000000..4ef849af --- /dev/null +++ b/scripts/angelscript/sorc_villa/sorc_alchemist.as @@ -0,0 +1,206 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class SorcAlchemist : CGameScript +{ + string BUSY_COMMENT; + int CHAT_NEVER_INTERRUPT; + int CHAT_NO_CLOSE_MOUTH; + int CHAT_TEMP_NO_AUTO_FACE; + int CHAT_USE_CONV_ANIMS; + int CHIEF_GONE; + int DID_INTRO; + int PLAYING_DEAD; + string PLR_INTRO; + string SORC_CHIEF_ID; + string STORE_NAME; + int VEND_INDIVIDUAL; + + SorcAlchemist() + { + CHAT_USE_CONV_ANIMS = 0; + CHAT_NO_CLOSE_MOUTH = 1; + CHAT_NEVER_INTERRUPT = 1; + STORE_NAME = "sorc_pots"; + VEND_INDIVIDUAL = 1; + BUSY_COMMENT = "Stupid impatient humans... One at a time!"; + } + + void OnSpawn() override + { + SetName("Easkhar"); + SetName("sorc_alchie"); + SetModel("monsters/sorc.mdl"); + SetHealth(5000); + SetRace("beloved"); + SetInvincible(true); + PLAYING_DEAD = 1; + SetNoPush(true); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + SetWidth(32); + SetHeight(96); + SetHearingSensitivity(11); + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 0); + SetSayTextRange(1024); + ScheduleDelayedEvent(0.1, "crystal_complain"); + npcatk_suspend_ai(); + ScheduleDelayedEvent(0.1, "scan_for_players"); + } + + void crystal_complain() + { + SayText("*sigh* Just because I make the glue, they want *me* to fix the damned crystals when *they* break them..."); + } + + void OnPostSpawn() override + { + SetMenuAutoOpen(0); + } + + void scan_for_players() + { + if ((DID_INTRO)) return; + ScheduleDelayedEvent(0.5, "scan_for_players"); + if (!(false)) return; + DID_INTRO = 1; + PLR_INTRO = GetEntityIndex(m_hLastSeen); + do_intro(); + } + + void do_intro() + { + chat_add_text("intro_chat", "Humans!? I care not what Chief Runeghar says, I am NOT selling to humans!", 5.0, "neigh"); + chat_add_text("intro_chat", "Go! Be gone with thee!", 2.0, "swordswing1_L"); + chat_start_sequence("intro_chat", "add_to_que"); + ScheduleDelayedEvent(7.0, "do_intro2"); + } + + void do_intro2() + { + SpawnNPC("sorc_villa/sorc_chief_image", Vector3(-1952, -3120, 48), ScriptMode::Legacy); // params: GetEntityIndex(GetOwner()) + SORC_CHIEF_ID = GetEntityIndex(m_hLastCreated); + } + + void ext_face_chief() + { + SetMoveDest(SORC_CHIEF_ID); + PlayAnim("critical", "flinch"); + ScheduleDelayedEvent(1.0, "ext_face_chief2"); + } + + void ext_face_chief2() + { + SetMoveDest(SORC_CHIEF_ID); + PlayAnim("critical", "kneeling"); + ScheduleDelayedEvent(0.5, "ext_face_chief3"); + } + + void ext_face_chief3() + { + SetMoveDest(SORC_CHIEF_ID); + PlayAnim("once", "break"); + PlayAnim("hold", "kneel"); + SetIdleAnim("kneel"); + SetMoveAnim("kneel"); + } + + void ext_chief_done_berating() + { + if ((CHAT_BUSY)) + { + ScheduleDelayedEvent(0.1, "ext_chief_done_berating"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + CHAT_TEMP_NO_AUTO_FACE = 1; + chat_add_text("sry_chief", "I... I am sorry, warchief! I... I understand.", 3.0); + chat_add_text("sry_chief", "I will do as you say.", 3.0); + chat_start_sequence("sry_chief", "add_to_que"); + } + + void ext_chief_gone() + { + CHAT_TEMP_NO_AUTO_FACE = 0; + UseTrigger("twal_pot_block"); + CHIEF_GONE = 1; + chat_add_text("chief_gone", "Bah, I still don't like it.", 3.0, "neigh"); + chat_add_text("chief_gone", "But fine, I will do business with you.", 3.0); + chat_add_text("chief_gone", "I warn you, however, it won't be cheap.", 3.0, "nod_yes"); + chat_start_sequence("chief_gone", "add_to_que"); + string NEAR_PLAYER = FindEntitiesInSphere("players", 128); + string NEAR_PLAYER = GetToken(NEAR_PLAYER, 0, ";"); + if (GetEntityRange(NEAR_PLAYER) < GetEntityRange(PLR_INTRO)) + { + PLR_INTRO = NEAR_PLAYER; + } + SetMoveDest(PLR_INTRO); + SetMoveAnim("idle1"); + SetIdleAnim("idle1"); + SetMenuAutoOpen(1); + } + + void vendor_addstoreitems() + { + LogDebug("vendor_addstoreitems"); + AddStoreItem(STORE_NAME, "health_mpotion", 30, 400, 0.0); + AddStoreItem(STORE_NAME, "health_lpotion", 30, 400, 0.0); + AddStoreItem(STORE_NAME, "mana_speed", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_gprotection", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_protection", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_resist_cold", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_immune_cold", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_resist_fire", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_immune_fire", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_immune_poison", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_vampire", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_forget", 5, 300, 0.0); + AddStoreItem(STORE_NAME, "mana_demon_blood", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_bravery", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_fbrand", 1, 500, 0.0); + AddStoreItem(STORE_NAME, "mana_faura", 1, 300, 0.0); + AddStoreItem(STORE_NAME, "mana_paura", 1, 300, 0.0); + AddStoreItem(STORE_NAME, "mana_font", 1, 500, 0.0); + } + + void OnHeardSound(CBaseEntity@ source, Vector3 origin) override + { + if (!(CHIEF_GONE)) return; + if ((VENDOR_STORE_ACTIVE)) return; + string LAST_HEARD = GetEntityIndex("ent_lastheard"); + if (!(IsValidPlayer(LAST_HEARD))) return; + if (!(GetEntityRange(LAST_HEARD) < 256)) return; + SetMoveDest(LAST_HEARD); + } + + void ext_player_on_shelf() + { + if ((CHAT_BUSY)) return; + PlayAnim("once", "warcry"); + chat_now("By the mighty Torkalath, you humans are like monkeys! GET OFF MY SHELVES!", 6.0, "add_to_que"); + } + + void ext_player_on_table() + { + if (!(CHIEF_GONE)) return; + if ((CHAT_BUSY)) + { + chat_now("...and could you, please, *try* not standing on my table...", 4.0, "add_to_que"); + } + else + { + chat_now("Could you, please, try *not* standing on my table...", 4.0, "add_to_que"); + } + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/sorc_blacksmith.as b/scripts/angelscript/sorc_villa/sorc_blacksmith.as new file mode 100644 index 00000000..de7d44e9 --- /dev/null +++ b/scripts/angelscript/sorc_villa/sorc_blacksmith.as @@ -0,0 +1,635 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class SorcBlacksmith : CGameScript +{ + int AM_HAMMERING; + string ANIM_HAMMER; + string ANIM_IDLE; + string ANIM_STEP3; + string ANIM_STEP4; + string ANIM_YES; + string BLACKSMITH_FX_ID; + string BUSY_COMMENT; + string CHAT_EVENT_STEP2; + string CHAT_EVENT_STEP4; + string CHAT_EVENT_STEP5; + string CHAT_EVENT_STEP6; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEPS; + int CHAT_USE_CONV_ANIMS; + string DID_INTRO; + string FINAL_GOLD_REQ; + string FORGE_MENU_TARGET; + string HAMMER_YAW; + string LAST_PLAYER_FORGE_ID; + string MENU_TYPE; + int NO_CLOSE_MOUTH; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + int PLAYING_DEAD; + string RESUME_HAMMERING; + string SMITH_CL_TYPE; + string SMITH_CUSTOMER; + int SMITH_GOLD_REQ; + string SMITH_REQ; + string SMITH_TYPE; + string STORE_NAME; + int VENDOR_MENU_OFF; + int VENDOR_NOT_ON_USE; + + SorcBlacksmith() + { + ANIM_HAMMER = "hammering"; + ANIM_YES = "nod_yes"; + ANIM_IDLE = "idle1"; + SMITH_GOLD_REQ = 50000; + VENDOR_MENU_OFF = 1; + VENDOR_NOT_ON_USE = 1; + NO_JOB = 1; + NO_HAIL = 1; + NO_RUMOR = 1; + STORE_NAME = "sorc_blacksmith"; + CHAT_USE_CONV_ANIMS = 0; + NO_CLOSE_MOUTH = 1; + BUSY_COMMENT = "Patients little pink one... Busy with this other wee one right now."; + } + + void OnRepeatTimer() + { + SetRepeatDelay(10.0); + if (GetGameTime() > RESUME_HAMMERING) + { + } + SetAngles("face"); + if (!(AM_HAMMERING)) + { + } + start_hammering(); + } + + void OnSpawn() override + { + SetName("Irunthar"); + SetModel("monsters/sorc.mdl"); + SetHealth(8000); + SetDamageResistance("all", 0.5); + SetStat("parry", 110); + SetRace("beloved"); + SetInvincible(true); + PLAYING_DEAD = 1; + SetNoPush(true); + SetWidth(32); + SetHeight(96); + SetModelBody(0, 4); + SetModelBody(1, 0); + SetModelBody(2, 10); + CatchSpeech("say_forge", "forg"); + CatchSpeech("say_shop", "shop"); + AM_HAMMERING = 1; + MENU_TYPE = "normal"; + SetIdleAnim(ANIM_HAMMER); + SetMoveAnim(ANIM_HAMMER); + SetMenuAutoOpen(1); + ScheduleDelayedEvent(0.1, "get_yaw"); + npcatk_suspend_ai(); + } + + void get_yaw() + { + HAMMER_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + } + + void say_shop() + { + if (!(MENU_TYPE == "normal")) return; + vendor_offerstore(GetEntityIndex("ent_lastspoke")); + } + + void game_menu_getoptions() + { + if ((G_SORCS_HOSTILE)) return; + if (MENU_TYPE == "normal") + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + string reg.mitem.title = "Browse Wares"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "vendor_offerstore"; + string reg.mitem.title = "Forge Item"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_forge"; + string reg.mitem.title = "Ask about Rumors"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_rumor"; + if ((ItemExists(param1, "smallarms_rd"))) + { + } + string reg.mitem.title = "Ask about rusty dagger"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_rdagger_excuse"; + } + if (MENU_TYPE == "forge_type") + { + string reg.mitem.title = "Weapons"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_forge_weapons"; + } + if (MENU_TYPE == "forge_weapon") + { + string reg.mitem.title = "Shadowfire Blade"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_swords_sf"; + string reg.mitem.title = "Winter Cleaver"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_axes_df"; + string reg.mitem.title = "Unholy Blade"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_swords_ub"; + string reg.mitem.title = "Skull Scythe"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_axes_ss"; + string reg.mitem.title = "Vorpal Tongue"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_smallarms_vt"; + string reg.mitem.title = "Demon Bludgeon Hammer"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_blunt_db"; + string reg.mitem.title = "Infernal Claws"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_blunt_gauntlet_ic"; + } + if (MENU_TYPE == "smith_confirm") + { + string reg.mitem.title = "Yes"; + string reg.mitem.type = "payment"; + string reg.mitem.data = SMITH_REQ; + string reg.mitem.callback = "do_smithing"; + string reg.mitem.cb_failed = "smithing_fail_payment"; + string reg.mitem.title = "No"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "smithing_cancel"; + } + } + + void smithing_cancel() + { + MENU_TYPE = "normal"; + SetMenuAutoOpen(1); + SayText("Very well then, perhaps meez can interest you in something else?"); + ScheduleDelayedEvent(1.0, "start_hammering"); + } + + void smithing_fail_payment() + { + MENU_TYPE = "normal"; + SetMenuAutoOpen(1); + SayText("Bah, come back when yoos has the gold and ingredients I need."); + ScheduleDelayedEvent(1.0, "start_hammering"); + } + + void game_menu_cancel() + { + MENU_TYPE = "normal"; + SetMenuAutoOpen(1); + } + + void say_hi() + { + if ((BUSY_CHATTING)) return; + stop_hammering(); + if ((IsValidPlayer(param1))) + { + string CURRENT_SPEAKER = GetEntityIndex(param1); + } + else + { + string CURRENT_SPEAKER = GetEntityIndex("ent_lastspoke"); + } + face_speaker(CURRENT_SPEAKER); + if (!(DID_INTRO)) + { + DID_INTRO = 1; + CHAT_STEP1 = "Hail! If it isn't our honored guests!"; + CHAT_STEP2 = "And what pretty shinies they bring!"; + CHAT_STEP3 = "We don't often see humans with pretty shinies in the villa - not breathing humans, anyways."; + CHAT_STEP4 = "And meez must say, not often with so many pretty shinies either!"; + ANIM_STEP4 = ANIM_YES; + CHAT_STEP5 = "Come, take a look at my wares. Maybe we can also work out a deal for use of the services of meez [forge]!"; + CHAT_STEPS = 5; + chat_loop(); + } + else + { + SayText("Back again? Perhaps yoos want more of my wares, or perhaps meez [forging] something new for yas."); + PlayAnim("critical", ANIM_YES); + } + } + + void stop_hammering() + { + AM_HAMMERING = 0; + RESUME_HAMMERING = GetGameTime(); + RESUME_HAMMERING += 50.0; + PlayAnim("once", "break"); + PlayAnim("critical", ANIM_IDLE); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_IDLE); + } + + void start_hammering() + { + AM_HAMMERING = 1; + SetAngles("face"); + SetIdleAnim(ANIM_HAMMER); + SetMoveAnim(ANIM_HAMMER); + PlayAnim("critical", ANIM_HAMMER); + } + + void say_forge() + { + if ((BUSY_CHATTING)) return; + if ((AM_HAMMERING)) + { + stop_hammering(); + } + if ((IsValidPlayer(param1))) + { + string CURRENT_SPEAKER = GetEntityIndex(param1); + } + else + { + string CURRENT_SPEAKER = GetEntityIndex("ent_lastspoke"); + } + face_speaker(CURRENT_SPEAKER); + FORGE_MENU_TARGET = CURRENT_SPEAKER; + CHAT_STEP1 = "Well, well, well... My forging services are not for the faint of heart, nor the faint of coin..."; + if (LAST_PLAYER_FORGE_ID != CURRENT_SPEAKER) + { + CHAT_STEP2 = "But fear not, I'll not beez chargein yas anymores than I charges anyones elses."; + CHAT_STEP3 = "Unlike some of my brothers, I care not of the color of my customer's skin - only of that of their coin! Hahaha!"; + ANIM_STEP3 = ANIM_YES; + CHAT_STEP4 = "What mighty smithing feat doos yous wants to sees meez performs?"; + CHAT_EVENT_STEP4 = "give_forge_menu"; + MENU_TYPE = "forge_type"; + CHAT_STEPS = 4; + chat_loop(); + } + else + { + CHAT_STEP2 = "What mighty smithing feat doos yous wants to sees meez performs?"; + CHAT_EVENT_STEP2 = "give_forge_menu"; + MENU_TYPE = "forge_type"; + CHAT_STEPS = 2; + chat_loop(); + } + LAST_PLAYER_FORGE_ID = CURRENT_SPEAKER; + } + + void give_forge_menu() + { + OpenMenu(FORGE_MENU_TARGET); + } + + void say_forge_weapons() + { + SayText("And which of my mighty shinies might yeez beez wanting to knows of?"); + FORGE_MENU_TARGET = param1; + MENU_TYPE = "forge_weapon"; + ScheduleDelayedEvent(0.1, "give_forge_menu"); + } + + void smith_confirm() + { + MENU_TYPE = "smith_confirm"; + OpenMenu(SMITH_CUSTOMER); + } + + void do_smithing() + { + MENU_TYPE = "suspend"; + start_hammering(); + CHAT_STEP1 = "Alright then! Just a moment while I put da magic hammer to works..."; + CHAT_STEP2 = "Here we go..."; + CHAT_STEP3 = "There, alls done."; + CHAT_STEPS = 3; + chat_loop(); + // TODO: UNCONVERTED: savenow SMITH_CUSTOMER + ScheduleDelayedEvent(2.0, "smithing_cl_effects"); + ScheduleDelayedEvent(8.0, "smith_finalize"); + } + + void smith_finalize() + { + MENU_TYPE = "normal"; + face_speaker(SMITH_CUSTOMER); + // TODO: offer SMITH_CUSTOMER SMITH_TYPE + if (SMITH_TYPE == "swords_ub") + { + string QUEST_IDX = FindToken(QUEST_CAT_DATA, "sym1", ";"); + if (QUEST_IDX > -1) + { + RemoveToken(QUEST_CAT_DATA, QUEST_IDX, ";"); + } + string QUEST_IDX = FindToken(QUEST_CAT_DATA, "sym2", ";"); + if (QUEST_IDX > -1) + { + RemoveToken(QUEST_CAT_DATA, QUEST_IDX, ";"); + } + string QUEST_IDX = FindToken(QUEST_CAT_DATA, "sym3", ";"); + if (QUEST_IDX > -1) + { + RemoveToken(QUEST_CAT_DATA, QUEST_IDX, ";"); + } + string QUEST_IDX = FindToken(QUEST_CAT_DATA, "sym4", ";"); + if (QUEST_IDX > -1) + { + RemoveToken(QUEST_CAT_DATA, QUEST_IDX, ";"); + } + string QUEST_IDX = FindToken(QUEST_CAT_DATA, "sym5", ";"); + if (QUEST_IDX > -1) + { + RemoveToken(QUEST_CAT_DATA, QUEST_IDX, ";"); + } + SetPlayerQuestData(SMITH_CUSTOMER, "f"); + } + SetMenuAutoOpen(1); + } + + void say_swords_sf() + { + FINAL_GOLD_REQ = SMITH_GOLD_REQ; + float SMITH_RATIO = 1.0; + FINAL_GOLD_REQ *= SMITH_RATIO; + FINAL_GOLD_REQ = int(FINAL_GOLD_REQ); + CHAT_STEP1 = "The Shadowfire Blade has the dark energy of the Blood Drinker, and new enhanced fire storms and stuffs."; + CHAT_STEP2 = "To forge it, I needs a Blood Drinker, a Nova Blade, and three Fire Tomahawks."; + CHAT_STEP3 = "I also charge a workmanship fee of "; + CHAT_STEP3 += FINAL_GOLD_REQ; + CHAT_STEP3 += " gold."; + CHAT_STEP4 = "Do you wish meez to attempt this smithing feat for yoos?"; + CHAT_EVENT_STEP4 = "say_smith_confirm"; + CHAT_STEPS = 4; + SetMenuAutoOpen(0); + SMITH_CUSTOMER = param1; + SMITH_TYPE = "swords_sf"; + SMITH_CL_TYPE = "dark;fire"; + SMITH_REQ = "swords_blood_drinker;swords_novablade12;axes_tf:3;gold:"; + SMITH_REQ += FINAL_GOLD_REQ; + chat_loop(); + string MENU_DELAY = CHAT_STEPS; + MENU_DELAY *= CHAT_DELAY; + MENU_DELAY("smith_confirm"); + } + + void say_axes_df() + { + FINAL_GOLD_REQ = SMITH_GOLD_REQ; + float SMITH_RATIO = 1.0; + FINAL_GOLD_REQ *= SMITH_RATIO; + FINAL_GOLD_REQ = int(FINAL_GOLD_REQ); + CHAT_STEP1 = "For the Wintercleaver axe, we take the ice-metal of the Tomahawks and balance the beast with the Torkalath steel."; + CHAT_STEP2 = "This makes for a beast of an axe that can create icy storms, yet is still light enough for humans to easily land blows with."; + CHAT_STEP3 = "So, I needs two ice Tomahawks and two Torkalath Shortswords to slam one together."; + CHAT_STEP4 = "I also charge a workmanship fee of "; + CHAT_STEP4 += FINAL_GOLD_REQ; + CHAT_STEP4 += " gold."; + CHAT_STEP5 = "Do you wish meez to attempt this smithing feat for yoos?"; + CHAT_EVENT_STEP5 = "say_smith_confirm"; + CHAT_STEPS = 5; + SetMenuAutoOpen(0); + SMITH_CUSTOMER = param1; + SMITH_TYPE = "axes_df"; + SMITH_CL_TYPE = "ice"; + SMITH_REQ = "swords_katana4:2;axes_ti:2;gold:"; + SMITH_REQ += FINAL_GOLD_REQ; + chat_loop(); + string MENU_DELAY = CHAT_STEPS; + MENU_DELAY *= CHAT_DELAY; + MENU_DELAY("smith_confirm"); + } + + void say_swords_ub() + { + FINAL_GOLD_REQ = SMITH_GOLD_REQ; + float SMITH_RATIO = 2.0; + FINAL_GOLD_REQ *= SMITH_RATIO; + FINAL_GOLD_REQ = int(FINAL_GOLD_REQ); + CHAT_STEP1 = "Ah, the Unholy Blade... I've been wanting to make one of these for a long time now!"; + CHAT_STEP2 = "Sadly, no one seems to be able to bring me the materials I need. Namely, five seperate shards of the legendary Felewyn Blade."; + CHAT_STEP3 = "On top of that, I'll need two Blood Drinkers. Oh, but what a beast this sword will be..."; + CHAT_STEP4 = "I also charge a workmanship fee of "; + CHAT_STEP4 += FINAL_GOLD_REQ; + CHAT_STEP4 += " gold."; + CHAT_STEP5 = "Do you wish meez to attempt this smithing feat for yoos?"; + CHAT_EVENT_STEP5 = "say_smith_confirm"; + CHAT_STEPS = 5; + SetMenuAutoOpen(0); + SMITH_CUSTOMER = param1; + SMITH_TYPE = "swords_ub"; + SMITH_CL_TYPE = "dark"; + SMITH_REQ = "swords_fshard1;swords_fshard2;swords_fshard3;swords_fshard4;swords_fshard5;swords_blood_drinker:2;gold:"; + SMITH_REQ += FINAL_GOLD_REQ; + chat_loop(); + string MENU_DELAY = CHAT_STEPS; + MENU_DELAY *= CHAT_DELAY; + MENU_DELAY("smith_confirm"); + } + + void say_blunt_db() + { + FINAL_GOLD_REQ = SMITH_GOLD_REQ; + float SMITH_RATIO = 0.5; + FINAL_GOLD_REQ *= SMITH_RATIO; + FINAL_GOLD_REQ = int(FINAL_GOLD_REQ); + CHAT_STEP1 = "Ah, now this be pretty simple: we take the fire magic from two Tomahawks, two dark Tomahawks,"; + CHAT_STEP2 = "and two shortswords worth of Torkalath steel to hold it all together with. We work this all into your Bludgeon Hammer."; + CHAT_STEP3 = "Only sticky bit is keeping the Bludgeon soul locked in there during the whole process."; + CHAT_STEP4 = "I also charge a workmanship fee of "; + CHAT_STEP4 += FINAL_GOLD_REQ; + CHAT_STEP4 += " gold."; + CHAT_STEP5 = "Do you wish meez to attempt this smithing feat for yoos?"; + CHAT_EVENT_STEP5 = "say_smith_confirm"; + CHAT_STEPS = 5; + SetMenuAutoOpen(0); + SMITH_CUSTOMER = param1; + SMITH_TYPE = "blunt_db"; + SMITH_CL_TYPE = "fire"; + SMITH_REQ = "axes_tf:2;axes_td:2;swords_katana4:2;blunt_mithral;gold:"; + SMITH_REQ += FINAL_GOLD_REQ; + chat_loop(); + string MENU_DELAY = CHAT_STEPS; + MENU_DELAY *= CHAT_DELAY; + MENU_DELAY("smith_confirm"); + } + + void say_axes_ss() + { + FINAL_GOLD_REQ = SMITH_GOLD_REQ; + float SMITH_RATIO = 2.0; + FINAL_GOLD_REQ *= SMITH_RATIO; + FINAL_GOLD_REQ = int(FINAL_GOLD_REQ); + CHAT_STEP1 = "The Skull Scythe. Inspired by the Torkalath Scythe. It may even make a worthy sacrifice to the Father of Chaos himself!"; + CHAT_STEP2 = "This sweeping axe blade can lop off heads at a fair distance, drink the blood of your enemies, yet is light enough to throw."; + CHAT_STEP3 = "To forge one, I need two dark tomahawks, two balanced axes, and two Torkalath short swords.... And one petrified human head."; + CHAT_STEP4 = "Eh... Don't worry about the head... I got one... or three... I'll throw one in free of charge."; + CHAT_STEP5 = "The workmanship fee comes to "; + CHAT_STEP5 += FINAL_GOLD_REQ; + CHAT_STEP5 += " gold."; + CHAT_STEP6 = "Do you wish meez to attempt this smithing feat for yoos?"; + CHAT_EVENT_STEP6 = "say_smith_confirm"; + CHAT_STEPS = 6; + SetMenuAutoOpen(0); + SMITH_CUSTOMER = param1; + SMITH_TYPE = "axes_ss"; + SMITH_CL_TYPE = "dark"; + SMITH_REQ = "axes_b:2;swords_katana4:2;axes_td:2;gold:"; + SMITH_REQ += FINAL_GOLD_REQ; + chat_loop(); + string MENU_DELAY = CHAT_STEPS; + MENU_DELAY *= CHAT_DELAY; + MENU_DELAY("smith_confirm"); + } + + void say_smallarms_vt() + { + FINAL_GOLD_REQ = SMITH_GOLD_REQ; + float SMITH_RATIO = 2.0; + FINAL_GOLD_REQ *= SMITH_RATIO; + FINAL_GOLD_REQ = int(FINAL_GOLD_REQ); + CHAT_STEP1 = "Ah, the Vorpal Tongue, not had a chance to make one of these in a long time."; + CHAT_STEP2 = "I'd need an ethereal dagger, two actually, and really no one knows how to properly forge those anymore."; + CHAT_STEP3 = "Then two Efreeti hearts, and Efreeti are very rare, for there aren't many wizards left who know how to make those either."; + CHAT_STEP4 = "Combine all that with a pair of litchtounges, and we have a rare weapon indeed."; + CHAT_STEP5 = "One capable of holding the magic of two elements: fire and ice, in one blade, thanks to the ethereal metal."; + CHAT_STEP6 = "Price comes to "; + CHAT_STEP6 += FINAL_GOLD_REQ; + CHAT_STEP6 += " gold. I'll I have a go at it, should you have the ingredients."; + CHAT_EVENT_STEP6 = "say_smith_confirm"; + CHAT_STEPS = 6; + SetMenuAutoOpen(0); + SMITH_CUSTOMER = param1; + SMITH_TYPE = "smallarms_vt"; + SMITH_CL_TYPE = "fire;ice"; + SMITH_REQ = "item_eh:2;smallarms_eth:2;smallarms_frozentongueonflagpole:2;gold:"; + SMITH_REQ += FINAL_GOLD_REQ; + chat_loop(); + string MENU_DELAY = CHAT_STEPS; + MENU_DELAY *= CHAT_DELAY; + MENU_DELAY("smith_confirm"); + } + + void say_blunt_gauntlet_ic() + { + FINAL_GOLD_REQ = SMITH_GOLD_REQ; + float SMITH_RATIO = 1.0; + FINAL_GOLD_REQ *= SMITH_RATIO; + FINAL_GOLD_REQ = int(FINAL_GOLD_REQ); + CHAT_STEP1 = "Infernal claws. Vicious little things. A bit delicate for orc hands, but fine for the likes of yoos."; + CHAT_STEP2 = "Pretty simple formula. Three fire Tomahawks, and two pair demon claws."; + CHAT_STEP3 = "Final result is a set of claws coupled with various fire enchantments."; + CHAT_STEP4 = "Price comes to "; + CHAT_STEP4 += FINAL_GOLD_REQ; + CHAT_STEP4 += " gold. I'll I have a go at it, should you have the ingredients."; + CHAT_EVENT_STEP6 = "say_smith_confirm"; + CHAT_STEPS = 4; + SetMenuAutoOpen(0); + SMITH_CUSTOMER = param1; + SMITH_TYPE = "blunt_gauntlets_ic"; + SMITH_CL_TYPE = "fire"; + SMITH_REQ = "blunt_gauntlets_demon:2;axes_tf:3;gold:"; + SMITH_REQ += FINAL_GOLD_REQ; + chat_loop(); + string MENU_DELAY = CHAT_STEPS; + MENU_DELAY *= CHAT_DELAY; + MENU_DELAY("smith_confirm"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "armor_dark", RandomInt(0, 2), 400, 0); + AddStoreItem(STORE_NAME, "armor_helm_dark", RandomInt(0, 2), 400, 0); + AddStoreItem(STORE_NAME, "armor_helm_golden", RandomInt(0, 2), 400, 0); + AddStoreItem(STORE_NAME, "axes_thunder11", 5, 600, 0); + AddStoreItem(STORE_NAME, "smallarms_k_fire", 1, 400, 0); + AddStoreItem(STORE_NAME, "blunt_gauntlets_fire", 1, 600, 0); + AddStoreItem(STORE_NAME, "blunt_darkmaul", 5, 600, 0); + AddStoreItem(STORE_NAME, "smallarms_craftedknife4", 5, 200, 0); + AddStoreItem(STORE_NAME, "smallarms_fangstooth", 5, 200, 0); + AddStoreItem(STORE_NAME, "blunt_granitemace", 5, 200, 0); + AddStoreItem(STORE_NAME, "blunt_granitemaul", 5, 200, 0); + AddStoreItem(STORE_NAME, "shields_lironshield", 5, 100, 0); + AddStoreItem(STORE_NAME, "axes_gthunder11", 1, 30.0, 0); + AddStoreItem(STORE_NAME, "axes_greataxe", 1, 3.0, 0); + AddStoreItem(STORE_NAME, "axes_scythe", 1, 3.0, 0); + AddStoreItem(STORE_NAME, "armor_helm_dark", 1, 3.0, 0); + if (RandomInt(1, 40) <= "game.playersnb") + { + AddStoreItem(STORE_NAME, "shields_rf", 1, 500, 0); + AddStoreItem(STORE_NAME, "shields_rl", 1, 500, 0); + } + } + + void say_rdagger_excuse() + { + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Oh wow... I knows what this is! That's an ethereal blade under all that rust!"; + CHAT_STEP2 = "Ones this old tend to get rusties - hides the blade, but restoring it is... Very delicate work."; + CHAT_STEP3 = "I'm afraid meez hands are just too rough for that kind of jeweler's task."; + CHAT_STEP4 = "Probably needs a human or elf smith. I know not where you'd find one who could handle that these days though."; + CHAT_STEPS = 4; + chat_loop(); + } + + void say_rumor() + { + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "I hear that Runegahr and Thuldahr have been going at it again..."; + CHAT_STEP2 = "Thuldahr doesn't likes Runegahr's plans, being nice to the humans and all. Letting em keeps a village so close."; + CHAT_STEP3 = "I tries not to thinks about politics much though. Too much smithings to doos."; + CHAT_STEPS = 3; + chat_loop(); + } + + void frame_hammer() + { + if (!(IsEntityAlive(BLACKSMITH_FX_ID))) + { + get_blacksmith_fx_id(); + } + else + { + CallExternal(BLACKSMITH_FX_ID, "do_spark"); + } + } + + void get_blacksmith_fx_id() + { + BLACKSMITH_FX_ID = FindEntityByName("sfx_blacksmith"); + } + + void smithing_cl_effects() + { + if (!(IsEntityAlive(BLACKSMITH_FX_ID))) + { + get_blacksmith_fx_id(); + } + CallExternal(BLACKSMITH_FX_ID, "do_forge_fx", SMITH_CL_TYPE, SMITH_TYPE); + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/sorc_chief_image.as b/scripts/angelscript/sorc_villa/sorc_chief_image.as new file mode 100644 index 00000000..25ab93c9 --- /dev/null +++ b/scripts/angelscript/sorc_villa/sorc_chief_image.as @@ -0,0 +1,142 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class SorcChiefImage : CGameScript +{ + int CHAT_AUTO_FACE; + int CHAT_MENU_ON; + int CHAT_NO_CLOSE_MOUTH; + int CHAT_USE_CONV_ANIMS; + int FADE_COUNT; + string NEAREST_PLAYER; + string POT_GUY_ID; + + SorcChiefImage() + { + CHAT_USE_CONV_ANIMS = 0; + CHAT_MENU_ON = 0; + CHAT_AUTO_FACE = 0; + CHAT_NO_CLOSE_MOUTH = 1; + } + + void OnSpawn() override + { + SetName("Runegahr the Warchief"); + SetRace("orc"); + SetNoPush(true); + SetInvincible(true); + SetModel("monsters/sorc.mdl"); + SetModelBody(0, 2); + SetModelBody(1, 3); + SetModelBody(2, 0); + SetStat("parry", 150); + SetWidth(32); + SetHeight(96); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + SetRoam(false); + SetSayTextRange(1024); + } + + void game_dynamically_created() + { + POT_GUY_ID = GetEntityIndex(param1); + CallExternal(POT_GUY_ID, "ext_face_chief"); + ScheduleDelayedEvent(0.01, "tele_in"); + } + + void tele_in() + { + ClientEvent("new", "all", "effects/sfx_repulse_burst", GetEntityOrigin(GetOwner()), 64, 1.0); + EmitSound(GetOwner(), 1, "weather/Storm_exclamation.wav", 10); + SetMoveDest(POT_GUY_ID); + FADE_COUNT = 0; + fade_in(); + ScheduleDelayedEvent(0.5, "do_rant"); + } + + void fade_in() + { + if (FADE_COUNT <= 255) + { + FADE_COUNT += 25; + SetProp(GetOwner(), "renderamt", FADE_COUNT); + ScheduleDelayedEvent(0.1, "fade_in"); + } + else + { + SetProp(GetOwner(), "renderamt", 255); + SetProp(GetOwner(), "rendermode", 1); + } + } + + void do_rant() + { + SetMoveDest(POT_GUY_ID); + ScheduleDelayedEvent(1.0, "do_rant2"); + } + + void do_rant2() + { + SetMoveDest(POT_GUY_ID); + chat_now("Easkhar! You sniveling swine! These are MY guests, and you WILL treat them as such!", 3.0, "swordswing1_L"); + ScheduleDelayedEvent(3.0, "get_response"); + } + + void get_response() + { + CallExternal(POT_GUY_ID, "ext_chief_done_berating"); + ScheduleDelayedEvent(8.0, "says_sorries"); + } + + void says_sorries() + { + NEAREST_PLAYER = /* TODO: $get_insphere */ $get_insphere("player", 512); + SetMoveDest(NEAREST_PLAYER); + chat_now("My apologies, this unenlightened thakwaw will aid you now, should you wish it.", 3.0, "nod_yes"); + ScheduleDelayedEvent(3.0, "tele_out1"); + } + + void tele_out1() + { + ClientEvent("new", "all", "effects/sfx_repulse_burst", GetEntityOrigin(GetOwner()), 64, 1.0); + SetProp(GetOwner(), "rendermode", 5); + fade_out(); + ScheduleDelayedEvent(3.5, "tele_out_done"); + } + + void tele_out_done() + { + LogDebug("tele_out2 sending event to GetEntityName(POT_GUY_ID)"); + CallExternal(POT_GUY_ID, "ext_chief_gone"); + } + + void fade_out() + { + if (FADE_COUNT > 0) + { + FADE_COUNT -= 25; + SetProp(GetOwner(), "renderamt", FADE_COUNT); + ScheduleDelayedEvent(0.1, "fade_out"); + } + else + { + SetProp(GetOwner(), "renderamt", 0); + ScheduleDelayedEvent(5.0, "remove_script"); + } + } + + void remove_script() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/sorc_guard_friendly.as b/scripts/angelscript/sorc_villa/sorc_guard_friendly.as new file mode 100644 index 00000000..cb51c9ce --- /dev/null +++ b/scripts/angelscript/sorc_villa/sorc_guard_friendly.as @@ -0,0 +1,342 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class SorcGuardFriendly : CGameScript +{ + string ANIM_NO; + string ANIM_RAND_IDLE; + string ANIM_YES; + int CHAT_NO_CLOSE_MOUTH; + int CHAT_USE_CONV_ANIMS; + string CUR_SPEAKER; + int GOT_RING; + string NPC_DO_EVENTS; + string QUEST_WINNER; + string SCAN_COMMENT; + string SORC_TYPE; + int SPOTTED_PLAYER; + int VENDOR_ALERT; + string VEND_ID; + + SorcGuardFriendly() + { + CHAT_USE_CONV_ANIMS = 0; + CHAT_NO_CLOSE_MOUTH = 1; + ANIM_NO = "neigh"; + ANIM_YES = "nod_yes"; + } + + void OnSpawn() override + { + SetName("Shadahar Guard"); + SetModel("monsters/sorc.mdl"); + SetHealth(2000); + SetDamageResistance("all", 0.7); + SetStat("parry", 110); + SetInvincible(true); + SetRace("beloved"); + SetNoPush(true); + SetWidth(32); + SetHeight(96); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + PlayAnim("once", "idle1"); + SetModelBody(0, 2); + SetModelBody(1, 2); + SetModelBody(2, 7); + SetSayTextRange(1024); + CatchSpeech("say_hi", "hail"); + SetMenuAutoOpen(1); + if (!(true)) return; + SetGlobalVar("G_GAVE_DIRECTIONS", 0); + } + + void game_postspawn() + { + NPC_DO_EVENTS = param4; + if (!(param4 != "none")) return; + for (int i = 0; i < GetTokenCount(NPC_DO_EVENTS, ";"); i++) + { + npcatk_do_events(); + } + } + + void npcatk_do_events() + { + string N_EVENT = i; + string EVENT_NAME = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + N_EVENT += 1; + if (N_EVENT <= GetTokenCount(NPC_DO_EVENTS, ";")) + { + string NEXT_EVENT = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + } + LogDebug("doing token event EVENT_NAME"); + EVENT_NAME(NEXT_EVENT); + } + + void check_face() + { + if ((IsEntityAlive(param1))) + { + SetMoveDest(param1); + CUR_SPEAKER = param1; + } + else + { + if ((IsEntityAlive("ent_lastspoke"))) + { + } + SetMoveDest("ent_lastspoke"); + CUR_SPEAKER = GetEntityIndex("ent_lastspoke"); + } + } + + void say_hi() + { + check_face(GetEntityIndex(param1)); + if (SORC_TYPE == "firstguard") + { + SayText("You be guests of the Warchief, but don't overstay your welcome."); + } + if (SORC_TYPE == "caveguard") + { + SayText("Move along. This cave is closed, for the moment."); + } + if (SORC_TYPE == "archer") + { + if ((IsEntityAlive(CUR_SPEAKER))) + { + } + if (GetEntityRange(CUR_SPEAKER) < 256) + { + } + SayText("Please don't be up heres. As a guest of the Warchief, I'm not supposeds to shoots yous, but it makes it looks like meez not doing meez job."); + } + if (SORC_TYPE == "guard2") + { + SayText("Nuttin to see up here, move along."); + } + if (SORC_TYPE == "troll1") + { + SayText("Hiyaz, humans who be guests of Runegahr who me no supposed to kills."); + PlayAnim("critical", "idle3"); + } + } + + void say_town() + { + check_face(GetEntityIndex(param1)); + chat_start_sequence("guard_direct"); + SetGlobalVar("G_GAVE_DIRECTIONS", 1); + } + + void say_well() + { + chat_start_sequence("guard_well"); + } + + void say_apple() + { + SayText("No thanks. Not while I'm on duty."); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + if (SORC_TYPE == "well") + { + string reg.mitem.callback = "say_well"; + } + if (SORC_TYPE == "firstguard") + { + string reg.mitem.title = "Directions"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_town"; + } + if (SORC_TYPE == "well") + { + string reg.mitem.title = "About the well"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_well"; + } + if (SORC_TYPE == "troll1") + { + if (!(GOT_RING)) + { + } + string reg.mitem.title = "Ask About Rumors"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_troll_rumors"; + if ((ItemExists(param1, "item_bulge"))) + { + } + chat_now("You have Bulge's ring?"); + string reg.mitem.title = "Give Ring"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_bulge"; + string reg.mitem.callback = "troll_got_ring"; + } + } + + void scan_players() + { + if ((SPOTTED_PLAYER)) return; + ScheduleDelayedEvent(1.0, "scan_players"); + if (!(CanSee("player", 256))) return; + SPOTTED_PLAYER = 1; + PlayAnim("once", "nod_yes"); + SayText(SCAN_COMMENT); + } + + void player_ogre_hole() + { + if (SORC_TYPE == "firstguard") + { + int WELL_COMMENT = 1; + } + if (SORC_TYPE == "caveguard") + { + int WELL_COMMENT = 1; + } + if ((WELL_COMMENT)) + { + SPOTTED_PLAYER = 0; + SCAN_COMMENT = "Silly human jumped down the ogre well, did he? Hahahaha!"; + ScheduleDelayedEvent(0.1, "scan_players"); + } + } + + void set_first_guard() + { + chat_add_text("guard_direct", "Huh? Umm... Most of the shops are downstairs. Smith is at the front of town - opposite of here.", 4.0, "nod_yes"); + chat_add_text("guard_direct", "Alchemist has a shop near the exit to the desert... There's an... Elf... Out there too. He's with Galat.", 5.0); + chat_add_text("guard_direct", "We, tollerate, having him there - but not in town.", 3.0); + chat_add_text("guard_direct", "Oh yeah, speaking of tollerate... Above and across from the Alchemist there's a human...", 4.0); + chat_add_text("guard_direct", "He's here a lot - sells yummy apples. You might wanna meet him. He's very... Nervous... *chuckle*", 4.0); + CatchSpeech("say_apple", "apple"); + SCAN_COMMENT = "Stay out of trouble and we'll have no problems..."; + SORC_TYPE = "firstguard"; + ScheduleDelayedEvent(0.1, "scan_players"); + } + + void set_cave_guard() + { + SORC_TYPE = "caveguard"; + } + + void set_archer_roam() + { + SetName("Shadahar Archer"); + SetModelBody(0, 3); + SetModelBody(1, 2); + SetModelBody(2, 2); + SORC_TYPE = "archer"; + SetRoam(true); + SetMoveAnim("walk"); + SetStepSize(1); + SetName("roof_archer"); + } + + void set_well_guard1() + { + chat_add_text("guard_well", "I knows how yous humans likes to explore, but don't be thinking about going down this well.", 4.0, ANIM_NO); + chat_add_text("guard_well", "We keeps the ogre-djinn down there, until they be old enough to train. Eat yous alive, they will.", 4.0); + CatchSpeech("say_well", "well"); + SetModelBody(1, 1); + SetModelBody(2, 6); + SORC_TYPE = "well"; + } + + void set_guard2() + { + SORC_TYPE = "guard2"; + } + + void ext_under_attack1() + { + SetSayTextRange(1024); + SetMoveAnim("run"); + VENDOR_ALERT = 1; + VEND_ID = param1; + SetMoveDest(VEND_ID); + EmitSound(GetOwner(), 0, "monsters/orc/attack3.wav", 10); + EmitSound(GetOwner(), 1, "voices/sorc_villa/archer_response1.wav", 10); + SayText("Those are Runegahr's guests, you stupid human, remember!?"); + } + + void game_reached_destination() + { + if (!(VENDOR_ALERT)) return; + LogDebug("game_reached_destination"); + VENDOR_ALERT = 0; + SetMoveDest(VEND_ID); + SetRoam(false); + SetMoveAnim("walk"); + PlayAnim("critical", "warcry"); + } + + void ext_under_attack2() + { + PlayAnim("critical", ANIM_NO); + SetMoveDest(param1); + SetMoveAnim("walk"); + SetRoam(true); + EmitSound(GetOwner(), 0, "voices/sorc_villa/archer_response2.wav", 10); + SayText("Stupid... Cowardly... Son of a boar..."); + } + + void set_troll1() + { + SetName("Shadahar Lightning Djinn"); + SetModel("monsters/troll_shad.mdl"); + SetWidth(36); + SetHeight(92); + SORC_TYPE = "troll1"; + SetIdleAnim("idle0"); + SetMoveAnim("idle0"); + SetRoam(false); + ANIM_RAND_IDLE = "idle1"; + Random(20_0, 30_0)("rand_idle"); + } + + void rand_idle() + { + Random(20_0, 30_0)("rand_idle"); + PlayAnim("once", ANIM_RAND_IDLE); + } + + void say_troll_rumors() + { + if ((CHAT_BUSY)) return; + SetName("Lighting Bulge"); + chat_now("Hmmm... Maybe yoos humans can helps me with somethings...", 4.0, "idle1", "add_to_que"); + chat_now("The call me Bulge - Lighting Bulge... Or at least meez friends do.", "add_to_que"); + chat_now("Some mean orcees, who are not friends, stole Bulge's ring.", 5.0, "idle3", "add_to_que"); + chat_now("Buldge get ring for pretty girl - who live in that Sun place...", "add_to_que"); + chat_now("But mean orcees throw down well.", "add_to_que"); + chat_now("Bulge too big to go in well... Maybe you help Bulge get ring? Maybe Bulge gives you somethings he finds.", "add_to_que"); + } + + void troll_got_ring() + { + GOT_RING = 1; + chat_now("Yes! You got me ring back! Haha! Stupid mean orcees no count on skinny humans helpings meez!", 4.0, "idle2", "clear_que"); + chat_now("Okies, me give you somethings me find. Weird green-skull thingie. Me no knows what is.", 4.0, "idle1", "give_skull", "add_to_que"); + chat_now("Kinda purty, but too spooky for girl. You take, maybe find use for.", "add_to_que"); + QUEST_WINNER = param1; + } + + void give_skull() + { + // TODO: offer QUEST_WINNER item_js + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/sorc_idle.as b/scripts/angelscript/sorc_villa/sorc_idle.as new file mode 100644 index 00000000..6574a5c4 --- /dev/null +++ b/scripts/angelscript/sorc_villa/sorc_idle.as @@ -0,0 +1,103 @@ +#pragma context server + +namespace MS +{ + +class SorcIdle : CGameScript +{ + string ANIM_ACHE; + string ANIM_DRINK; + string ANIM_EAT; + string ANIM_RECLINE_IDLE; + string ANIM_SIT_IDLE; + string ANIM_WAVE; + string NPC_DO_EVENTS; + string SORC_TYPE; + + SorcIdle() + { + ANIM_RECLINE_IDLE = "on_chair2"; + ANIM_SIT_IDLE = "on_chair"; + ANIM_DRINK = "drink"; + ANIM_EAT = "eat"; + ANIM_ACHE = "sit_ground"; + ANIM_WAVE = "waving"; + } + + void OnSpawn() override + { + SetName("Shadahar Orc"); + SetModel("monsters/sorc.mdl"); + SetHealth(2000); + SetDamageResistance("all", 0.7); + SetStat("parry", 110); + SetInvincible(true); + SetRace("beloved"); + SetNoPush(true); + SetRoam(false); + SetWidth(32); + SetHeight(96); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + PlayAnim("once", "idle1"); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + CatchSpeech("say_hi", "hail"); + SetMenuAutoOpen(1); + SetSayTextRange(1024); + } + + void game_postspawn() + { + NPC_DO_EVENTS = param4; + if (!(param4 != "none")) return; + for (int i = 0; i < GetTokenCount(NPC_DO_EVENTS, ";"); i++) + { + npcatk_do_events(); + } + } + + void npcatk_do_events() + { + string N_EVENT = i; + string EVENT_NAME = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + N_EVENT += 1; + if (N_EVENT <= GetTokenCount(NPC_DO_EVENTS, ";")) + { + string NEXT_EVENT = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + } + LogDebug("doing token event EVENT_NAME"); + EVENT_NAME(NEXT_EVENT); + } + + void set_recline1() + { + SORC_TYPE = "recline1"; + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetIdleAnim("on_chair2"); + SetMoveAnim("on_chair2"); + PlayAnim("once", "on_chair2"); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + } + + void say_hi() + { + if (SORC_TYPE == "recline1") + { + PlayAnim("critical", "on_chair2"); + SayText("Oh, it's Runegahr's 'guests'. Don't mind meez, I is just sunnings."); + } + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/sorc_jugger_patrol.as b/scripts/angelscript/sorc_villa/sorc_jugger_patrol.as new file mode 100644 index 00000000..ecd89713 --- /dev/null +++ b/scripts/angelscript/sorc_villa/sorc_jugger_patrol.as @@ -0,0 +1,83 @@ +#pragma context server + +namespace MS +{ + +class SorcJuggerPatrol : CGameScript +{ + string CUR_SPEAKER; + string NPC_DO_EVENTS; + + void OnSpawn() override + { + SetName("Shadahar Brawler"); + SetModel("monsters/sorc_big.mdl"); + SetHealth(5000); + SetDamageResistance("all", 0.5); + SetStat("parry", 110); + SetWidth(48); + SetHeight(128); + SetNoPush(true); + SetRoam(true); + SetRace("beloved"); + SetInvincible(true); + SetStepSize(1); + SetMoveAnim("walk"); + SetIdleAnim("idle1"); + SetModelBody(0, 0); + SetModelBody(1, 1); + SetModelBody(2, 0); + CatchSpeech("say_hi", "hail"); + SetMenuAutoOpen(1); + } + + void game_menu_getoptions() + { + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + } + + void game_postspawn() + { + NPC_DO_EVENTS = param4; + if (!(param4 != "none")) return; + for (int i = 0; i < GetTokenCount(NPC_DO_EVENTS, ";"); i++) + { + npcatk_do_events(); + } + } + + void npcatk_do_events() + { + string N_EVENT = i; + string EVENT_NAME = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + N_EVENT += 1; + if (N_EVENT <= GetTokenCount(NPC_DO_EVENTS, ";")) + { + string NEXT_EVENT = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + } + LogDebug("doing token event EVENT_NAME"); + EVENT_NAME(NEXT_EVENT); + } + + void say_hi() + { + if ((IsEntityAlive(param1))) + { + SetMoveDest(param1); + CUR_SPEAKER = param1; + } + else + { + if ((IsEntityAlive("ent_lastspoke"))) + { + } + SetMoveDest("ent_lastspoke"); + } + SayText("Ungg... Humans is guests... Jugga no kills."); + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/sorc_merc.as b/scripts/angelscript/sorc_villa/sorc_merc.as new file mode 100644 index 00000000..de89f4c5 --- /dev/null +++ b/scripts/angelscript/sorc_villa/sorc_merc.as @@ -0,0 +1,181 @@ +#pragma context server + +#include "monsters/base_npc_vendor.as" +#include "monsters/base_chat_array.as" +#include "monsters/debug.as" + +namespace MS +{ + +class SorcMerc : CGameScript +{ + string LAST_PLAYER_USED; + string NEXT_YAW_RESET; + int SORC_STORE_STOCKED; + string START_YAW; + string STORE_NAME; + string STORE_TRIGGERTEXT; + int VENDOR_MENU_OFF; + int VENDOR_NOT_ON_USE; + + SorcMerc() + { + STORE_NAME = "sorc_merc_"; + STORE_NAME += Random(-10000.00, 10000.00); + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(60.0); + if (GetGameTime() > NEXT_YAW_RESET) + { + } + SetAngles("face"); + } + + void OnSpawn() override + { + SetName("Shadahar Merchant"); + SetModel("monsters/sorc.mdl"); + SetHealth(1); + SetInvincible(true); + SetWidth(32); + SetHeight(72); + SetRace("beloved"); + SetNoPush(true); + SetIdleAnim("idle1"); + SetMoveAnim("idle1"); + PlayAnim("once", "idle1"); + if (RandomInt(1, 2) == 1) + { + SetModelBody(0, 1); + SetModelBody(1, 4); + SetModelBody(2, 0); + } + else + { + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + } + SetSayTextRange(1024); + VENDOR_MENU_OFF = 0; + VENDOR_NOT_ON_USE = 0; + SetMenuAutoOpen(1); + ScheduleDelayedEvent(0.1, "get_yaw"); + } + + void get_yaw() + { + START_YAW = GetEntityProperty(GetOwner(), "angles.yaw"); + } + + void game_menu_getoptions() + { + if (LAST_PLAYER_USED != param1) + { + int RND_COMMENT = RandomInt(1, 4); + if (RND_COMMENT == 1) + { + SayText("Runegahr says we sells to you, so we sells to you."); + } + if (RND_COMMENT == 2) + { + SayText("Me have many things skinny humans maybe interested in."); + } + if (RND_COMMENT == 3) + { + SayText("First time me getting gold from a human without killing him first."); + } + if (RND_COMMENT == 4) + { + SayText("Some of my stuff maybe too heavy for skinny human arms."); + } + Random(30_0, 60_0)("reset_comment_target"); + } + LAST_PLAYER_USED = param1; + NEXT_YAW_RESET = GetGameTime(); + NEXT_YAW_RESET += 30.0; + } + + void reset_comment_target() + { + LAST_PLAYER_USED = -1; + } + + void vendor_addstoreitems() + { + if ((SORC_STORE_STOCKED)) return; + SORC_STORE_STOCKED = 1; + AddStoreItem(STORE_NAME, "health_mpotion", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "health_spotion", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "mana_mpotion", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "drink_mead", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "drink_ale", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "shields_lironshield", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "pack_heavybackpack", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "pack_archersquiver", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "sheath_back_holster", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "swords_iceblade", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "axes_poison1", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "blunt_granitemace", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "blunt_granitemaul", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "bows_swiftbow", RandomInt(0, 1), 1.5, 0); + AddStoreItem(STORE_NAME, "axes_thunder11", 1, 10.0, 0); + AddStoreItem(STORE_NAME, "axes_gthunder11", RandomInt(0, 1), 50.0, 0); + AddStoreItem(STORE_NAME, "axes_greataxe", RandomInt(0, 1), 3.0, 0); + AddStoreItem(STORE_NAME, "axes_scythe", RandomInt(0, 1), 3.0, 0); + AddStoreItem(STORE_NAME, "bows_orcbow", RandomInt(0, 1), 0.5, 0); + AddStoreItem(STORE_NAME, "armor_helm_dark", RandomInt(0, 1), 3.0, 0); + AddStoreItem(STORE_NAME, "mana_demon_blood", RandomInt(0, 1), 10.0, 0); + AddStoreItem(STORE_NAME, "mana_vampire", RandomInt(0, 1), 10.0, 0); + AddStoreItem(STORE_NAME, "mana_regen", RandomInt(0, 1), 10.0, 0); + AddStoreItem(STORE_NAME, "armor_helm_bronze", RandomInt(0, 1), 3.0, 0); + AddStoreItem(STORE_NAME, "blunt_gauntlets_serpant", RandomInt(0, 1), 10.0, 0); + if (RandomInt(1, 5) == 4) + { + AddStoreItem(STORE_NAME, "axes_tl", RandomInt(0, 1), 100.0, 0); + } + if (RandomInt(1, 20) == 20) + { + AddStoreItem(STORE_NAME, "shields_rune", 1, 50.0, 0); + } + if (RandomInt(1, 20) == 20) + { + AddStoreItem(STORE_NAME, "armor_helm_gaz1", 1, 30.0, 0); + } + if (RandomInt(1, 20) == 20) + { + AddStoreItem(STORE_NAME, "armor_helm_gaz2", 1, 30.0, 0); + } + if (RandomInt(1, 20) == 20) + { + AddStoreItem(STORE_NAME, "armor_fireliz", 1, 30.0, 0); + } + if (RandomInt(1, 20) == 20) + { + AddStoreItem(STORE_NAME, "axes_vaxe", 1, 30.0, 0); + } + if (RandomInt(1, 4) == 2) + { + AddStoreItem(STORE_NAME, "mana_leadfoot", 1, 50.0, 0); + } + if (RandomInt(1, 20) == 20) + { + AddStoreItem(STORE_NAME, "swords_wolvesbane", 1, 100.0, 0); + } + if (RandomInt(1, 10) == 2) + { + AddStoreItem(STORE_NAME, "axes_tl", 1, 100.0, 0); + } + } + + void game_confirm_buy() + { + LogDebug("PARAM1 PARAM2 PARAM3 PARAM4"); + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/sorc_sitting.as b/scripts/angelscript/sorc_villa/sorc_sitting.as new file mode 100644 index 00000000..ac7ee321 --- /dev/null +++ b/scripts/angelscript/sorc_villa/sorc_sitting.as @@ -0,0 +1,78 @@ +#pragma context server + +namespace MS +{ + +class SorcSitting : CGameScript +{ + string ANIM_ACTION; + string NPC_DO_EVENTS; + + void OnRepeatTimer() + { + SetRepeatDelay(Random(10.0, 20.0)); + PlayAnim("once", ANIM_ACTION); + } + + void OnSpawn() override + { + SetName("Shadahar Orc"); + SetModel("monsters/sorc.mdl"); + SetHealth(2000); + SetDamageResistance("all", 0.7); + SetStat("parry", 110); + SetInvincible(true); + SetRace("beloved"); + SetNoPush(true); + SetRoam(false); + SetWidth(32); + SetHeight(96); + SetIdleAnim("on_chair"); + SetMoveAnim("on_chair"); + PlayAnim("critical", "on_chair"); + SetModelBody(0, 0); + SetModelBody(1, 4); + SetModelBody(2, 0); + SetSayTextRange(1024); + } + + void game_postspawn() + { + NPC_DO_EVENTS = param4; + if (!(param4 != "none")) return; + for (int i = 0; i < GetTokenCount(NPC_DO_EVENTS, ";"); i++) + { + npcatk_do_events(); + } + } + + void npcatk_do_events() + { + string N_EVENT = i; + string EVENT_NAME = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + N_EVENT += 1; + if (N_EVENT <= GetTokenCount(NPC_DO_EVENTS, ";")) + { + string NEXT_EVENT = GetToken(NPC_DO_EVENTS, N_EVENT, ";"); + } + LogDebug("doing token event EVENT_NAME"); + EVENT_NAME(NEXT_EVENT); + } + + void set_eating() + { + ANIM_ACTION = "eat"; + SetModelBody(2, 9); + } + + void set_drinking() + { + ANIM_ACTION = "drink"; + SetModelBody(2, 11); + SetModelBody(0, 2); + SetModelBody(1, 0); + } + +} + +} diff --git a/scripts/angelscript/sorc_villa/storage.as b/scripts/angelscript/sorc_villa/storage.as new file mode 100644 index 00000000..abf4eeea --- /dev/null +++ b/scripts/angelscript/sorc_villa/storage.as @@ -0,0 +1,296 @@ +#pragma context server + +#include "monsters/base_chat_array.as" +#include "NPCs/base_storage.as" + +namespace MS +{ + +class Storage : CGameScript +{ + string ANIM_CHAT; + string ANIM_IDLE; + string ANIM_NO; + string ANIM_STORE; + string CHAT_CONV_ANIMS; + int CHAT_NEVER_INTERRUPT; + int DID_HELLO; + string DID_INTRO; + int DID_SNIDE; + string GALA_CHEST_POS; + string PLAYER_SPOTTED; + string SAYTEXT_GIVETICKET; + string SAYTEXT_HAND_WARN; + string SAYTEXT_ITEMS_HANDS; + string SAYTEXT_NOITEM; + string SAYTEXT_NOSTORABLES; + string SAYTEXT_NOTICKET; + string SAYTEXT_REDEEMTICKET; + string SAYTEXT_REFUND; + string SAYTEXT_SELECT_ITEM; + string SAYTEXT_SELECT_TICKET; + string SAYTEXT_wondrous_NOFUNDS; + string SAYTEXT_wondrous_PURCHASED; + + Storage() + { + GALA_CHEST_POS = /* TODO: $relpos */ $relpos(0, 64, 0); + CHAT_NEVER_INTERRUPT = 1; + CHAT_CONV_ANIMS = "look_idle;deep_idle;ref_aim_egon;ref_aim_squeek"; + ANIM_CHAT = "look_idle"; + ANIM_NO = "look_idle"; + ANIM_STORE = "ref_shoot_trip"; + ANIM_IDLE = "idle"; + SAYTEXT_REFUND = "Very well, I shall refund your fee then."; + SAYTEXT_SELECT_ITEM = "Which item would you like us to store?"; + SAYTEXT_NOITEM = "I apologize, but I did not receive the item you wished to store."; + SAYTEXT_NOTICKET = "It seems that I did not receive your ticket."; + SAYTEXT_NOSTORABLES = "I fear that you have no items which we can store for you."; + SAYTEXT_GIVETICKET = "Very good then, here is your ticket. Remember, as always, you may redeem such tickets at any Galat outlet."; + SAYTEXT_SELECT_TICKET = "Very well then, which ticket would do you like to redeem?"; + SAYTEXT_HAND_WARN = "Please, for the love of Felewyn, remember to place the tickets you wish to redeem in your in your hands."; + SAYTEXT_REDEEMTICKET = "We of Galat appreciate your business."; + SAYTEXT_ITEMS_HANDS = "Please hold forth any items you wish to store in your hands."; + SAYTEXT_wondrous_NOFUNDS = "I'm afraid you lack sufficient funds for this service."; + SAYTEXT_wondrous_PURCHASED = "One scroll it is. Please be careful as to its usage, as we cannot provide refunds should you be foolish enough to summon the chest into a wall."; + } + + void OnSpawn() override + { + SetName("Magi Varondo"); + SetHealth(30); + SetInvincible(true); + SetNoPush(true); + SetGold(0); + SetRace("beloved"); + SetWidth(28); + SetHeight(96); + SetModel("npc/elf_m_wizard.mdl"); + SetIdleAnim("idle"); + SetMoveAnim("idle"); + SetRoam(false); + PlayAnim("once", "idle"); + SetModelBody(1, 2); + SetProp(GetOwner(), "skin", 7); + SetSayTextRange(512); + CatchSpeech("heard_hi", "hail"); + CatchSpeech("say_rumor", "job"); + CatchSpeech("heard_store", "shop"); + if (!(true)) return; + ScheduleDelayedEvent(1.0, "scan_for_players"); + chat_add_text("introf_text", "Ah, salutations to the young adventurers. I had overheard there were some honored guests in the villa, but I knew not whether to believe my elven ears.", 7.6, "sound:voices/sorc_villa/varondo/villa_friendly_greeting_part_1.wav"); + chat_add_text("introf_text", "Greetings. I am Vorondo, stationed here by Galat to provide services to those unfortunate enough to pass though these orc infested lands.", 8.1, "sound:voices/sorc_villa/varondo/villa_friendly_greeting_part_2.wav"); + chat_add_text("introh_text", "Salutations, young adventurers. I would not venture further, for the villa just beyond this bend belongs to Runegahr and the Shadahar Orcs.", 7.1, "sound:voices/sorc_villa/varondo/villa_enemy_greeting_part_1.wav"); + chat_add_text("introh_text", "They tolerate my presence here, but would no doubt attempt to slay me were I to move closer, and they'll treat you no better, no doubt.", 7.3, "sound:voices/sorc_villa/varondo/villa_enemy_greeting_part_2.wav"); + chat_add_text("introh_text", "Should you choose to enter the villa, and are attacked - and mark my words, you will be - I fear I will not be able to assist you.", 7.1, "sound:voices/sorc_villa/varondo/villa_enemy_greeting_part_3.wav"); + chat_add_text("introh_text", "Galat wishes to maintain peaceful relations with this particular orc tribe, and thus I am forbade to interfere save in self-defense...", 7.4, "sound:voices/sorc_villa/varondo/villa_enemy_greeting_part_4.wav"); + chat_add_text("introh_text", "...and even then, I am under strict orders to favor discretion over valor.", 4.5, "sound:voices/sorc_villa/varondo/villa_enemy_greeting_part_5.wav"); + chat_add_text("hail_text", "I am Vorondo, stationed in this gods forsaken land to provide Galat services to those few who can make use of them.", 6.1, "sound:voices/sorc_villa/varondo/hailed.wav"); + chat_add_text("hail_text", "The orcs, savages though they maybe, tollerate my presense, so long as I setup shop no closer to their stronghold than this.", 7.1, "sound:voices/sorc_villa/varondo/hailed_2.wav"); + chat_add_text("hail_text", "I would have prefered, of course, to be stationed in Eswen Sylen, or someplace closer to my homeland - anywhere but here, really...", 8.0, "sound:voices/sorc_villa/varondo/hailed_3.wav"); + chat_add_text("hail_text", "But alas, as one of the few who can both defend themselves, and dependably provide Galat services, I drew the short straw, and wound up out... Here.", 9.5, "sound:voices/sorc_villa/varondo/hailed_4.wav"); + chat_add_text("hail_text", "It could be worse, I suppose. One does grow accustom to the smell of orc, over time. Now what services may I offer one of my rare customers?", 5.5, "sound:voices/sorc_villa/varondo/hailed_5.wav"); + chat_add_text("rumor_text", "Fear not for me. I am quite capable of defending myself. Not that I would attempt to move closer to the villa, for fear of the bloodbath that would ensue.", 8.5, "sound:voices/sorc_villa/varondo/rumours_or_survival_1.wav"); + chat_add_text("rumor_text", "I suppose, the high bankers of Galat had hoped to extend a hand of friendship to these orcs, for while they are still savages, they are more civil than most...", 7.7, "sound:voices/sorc_villa/varondo/rumours_or_survival_2.wav"); + chat_add_text("rumor_text", "I fear the effort has been ill-fated, however, for thus far, only two orcs have dared to use my services, and the rest have only agreed to stop trying to devour me.", 8.4, "sound:voices/sorc_villa/varondo/rumours_or_survival_3.wav"); + chat_add_text("rumor_text", "The human merchant from Sunden-dal uses my services, at least, so it isn't a total waste of my time - though I could surely think of more pleasant ways to spend it.", 9.2, "sound:voices/sorc_villa/varondo/rumours_or_survival_4.wav"); + chat_add_text("rumor_text", "It would be only slightly safer to setup in Sunden-dal, to the south, for it has problems of its own, though, unquestionably, the odor would be more pleasant.", 8.3, "sound:voices/sorc_villa/varondo/rumours_or_survival_5.wav"); + chat_add_text("rumor_text", "But alas, the Galat management has deemed the place too small to bother with, I suppose.", 5.2, "sound:voices/sorc_villa/varondo/rumours_or_survival_6.wav"); + chat_add_text("rumor_text", "...And thus, by cruel twist of fate, here I am.", 4.2, "sound:voices/sorc_villa/varondo/rumours_or_survival_7.wav"); + chat_add_text("storage_chest", "This, as I am sure you already know, is the enchanted Galat Storage Chest.", 5.7, "sound:voices/sorc_villa/varondo/asked_about_chest_1.wav"); + chat_add_text("storage_chest", "You may place items held in your hands into the chest with relative ease.", 4.6, "sound:voices/sorc_villa/varondo/asked_about_chest_2.wav"); + chat_add_text("storage_chest", "To withdraw items, simply open the chest and remove the items you desire.", 4.3, "sound:voices/sorc_villa/varondo/asked_about_chest_3.wav"); + chat_add_text("storage_chest", "The chest employs a dimensional pocket system, and thus will display an inventory unique to each customer's account.", 5.9, "sound:voices/sorc_villa/varondo/asked_about_chest_4.wav"); + chat_add_text("storage_chest", "The chest can hold a limited number of items for each customer, and it cannot store every type of item, so please be aware of its limitations.", 6.9, "sound:voices/sorc_villa/varondo/asked_about_chest_5.wav"); + chat_add_text("scroll_text", "The Wondrous Scroll allows you to summon a Galat Storage Chest anywhere you may happen to be at the time.", 5.2, "sound:voices/sorc_villa/varondo/asked_about_scroll_1.wav"); + chat_add_text("scroll_text", "Needless to say, this is quite useful for adventurers such as yourself, who often find themselves in, shall we say, out of the way places.", 9.1, "sound:voices/sorc_villa/varondo/asked_about_scroll_2.wav"); + chat_add_text("scroll_text", "Though it requires no magical skill, per say, one must be careful, when employing the scroll, not to summon the chest inside a wall or other obstacle.", 7.6, "sound:voices/sorc_villa/varondo/asked_about_scroll_3.wav"); + string SCROLL_LINE = "The scroll is not for the faint of fortune, however. It currently sells for "; + SCROLL_LINE += GALA_SCROLL_PRICE; + SCROLL_LINE += " gold."; + chat_add_text("scroll_text", SCROLL_LINE, 5.2, "sound:voices/sorc_villa/varondo/asked_about_scroll_4.wav"); + } + + void scan_for_players() + { + if ((DID_INTRO)) return; + if ((CanSee("player", 256))) + { + DID_INTRO = 1; + PLAYER_SPOTTED = GetEntityIndex(m_hLastSeen); + do_intro(); + } + else + { + ScheduleDelayedEvent(1.0, "scan_for_players"); + } + } + + void do_intro() + { + if ((G_SORCV_FRIENDLY)) + { + do_intro_friendly(); + } + else + { + do_intro_hostile(); + } + } + + void do_intro_friendly() + { + SetMoveDest(PLAYER_SPOTTED); + chat_start_sequence("introf_text"); + } + + void do_intro_hostile() + { + SetMoveDest(PLAYER_SPOTTED); + chat_start_sequence("introh_text"); + } + + void heard_hi() + { + DID_HELLO = 1; + chat_start_sequence("hail_text"); + } + + void say_rumor() + { + DID_HELLO = 1; + chat_start_sequence("rumor_text"); + } + + void heard_store() + { + OpenMenu(GetEntityIndex("ent_lastheard")); + } + + void reset_side() + { + DID_SNIDE = 0; + } + + void game_menu_getoptions() + { + SetMoveDest(param1); + if (!(DID_HELLO)) + { + if (!(DID_SNIDE)) + { + } + DID_SNIDE = 1; + ScheduleDelayedEvent(60.0, "reset_side"); + if (!(CHAT_BUSY)) + { + } + chat_now("Welcome to Galat's Weapon and Armor Storage. We're everywhere, apparently.", 3.8, "sound:voices/sorc_villa/varondo/idle_gripe.wav"); + } + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "heard_hi"; + string reg.mitem.title = "A lone elf?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_rumor"; + } + + void say_storage_chest() + { + chat_start_sequence("storage_chest"); + } + + void say_wondrous() + { + chat_start_sequence("scroll_text"); + } + + void say_wondrous_cant_afford() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/failure_no_money.wav", 10); + } + + void buy_scroll() + { + chat_move_mouth(4.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/scroll_bought.wav", 10); + } + + void open_betabank() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/cancelled_transaction.wav", 10); + } + + void cancel_trade() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/cancelled_transaction.wav", 10); + } + + void say_select_item() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/store_item.wav", 10); + } + + void activate_storage() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/store_item.wav", 10); + } + + void bteller_error_no_item() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/failed_itemget.wav", 10); + } + + void bteller_error_no_ticket() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/failed_ticketget.wav", 10); + } + + void bteller_store_error() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/no_storables.wav", 10); + } + + void bteller_give_ticket() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/storage_success.wav", 10); + } + + void bteller_select_ticket() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/request_redeem_ticket.wav", 10); + } + + void bteller_ticket_warn() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/no_ticket_in_hands.wav", 10); + } + + void bteller_ticket_redeemed() + { + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/success_other.wav", 10); + } + + void bteller_hand_warn() + { + if (!(DID_HELLO)) return; + if (!(GetGameTime() > NEXT_TALK)) return; + chat_move_mouth(3.0); + EmitSound(GetOwner(), 0, "voices/sorc_villa/varondo/please_hold_forth_items.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/test_scripts/test_angelscript_integration.as b/scripts/angelscript/test_scripts/test_angelscript_integration.as new file mode 100644 index 00000000..2ffe7ec9 --- /dev/null +++ b/scripts/angelscript/test_scripts/test_angelscript_integration.as @@ -0,0 +1,110 @@ +#pragma context server + +namespace MS +{ + +class TestAngelscriptIntegration : CGameScript +{ + int AS_TEST_STAGE; + + void OnSpawn() override + { + AS_TEST_STAGE = 0; + ScheduleDelayedEvent(1.0, "test_angelscript_init"); + SetName("AS Integration Tester"); + SetHealth(1); + SetRace("beloved"); + SetWidth(1); + SetHeight(1); + SetGravity(0); + SetInvincible(true); + SetInvisible(true); + SendInfoMsg("all", "Testing AngelScript Integration..."); + } + + void test_angelscript_init() + { + AS_TEST_STAGE = 1; + ServerCommand("echo === Testing AngelScript Module System ==="); + if (("game.script.angelscript_initialized")) + { + ServerCommand("echo [PASS] AngelScript engine is initialized"); + test_modules(); + } + else + { + ServerCommand("echo [FAIL] AngelScript engine NOT initialized!"); + ServerCommand("echo Please ensure ASBindings::RegisterAll() was called during server startup"); + } + } + + void test_modules() + { + AS_TEST_STAGE = 2; + ServerCommand("echo === Testing AngelScript Modules ==="); + as_load_module("GameMaster.as"); + ScheduleDelayedEvent(0.5, "as_load_module", "PlayerManager.as"); + ScheduleDelayedEvent(1.0, "as_load_module", "MagicSystem.as"); + ScheduleDelayedEvent(1.5, "as_load_module", "WorldSystem.as"); + ScheduleDelayedEvent(3.0, "test_functions"); + } + + void as_load_module() + { + string L_MODULE_NAME = param1; + ServerCommand("echo Testing module: L_MODULE_NAME"); + if (("game.script.module_exists" + L_MODULE_NAME)) + { + ServerCommand("echo [PASS] Module found: L_MODULE_NAME"); + } + else + { + ServerCommand("echo [FAIL] Module NOT found: L_MODULE_NAME"); + } + } + + void test_functions() + { + AS_TEST_STAGE = 3; + ServerCommand("echo === Testing AngelScript Functions ==="); + ServerCommand("echo Testing MS::InitializeGameMaster()..."); + as_call_function("MS::InitializeGameMaster"); + ServerCommand("echo Testing MS::GetMagicHandScripts()..."); + ScheduleDelayedEvent(0.5, "as_call_function", "MS::GetMagicHandScripts", 1); + ScheduleDelayedEvent(2.0, "test_complete"); + } + + void as_call_function() + { + string L_FUNC_NAME = param1; + string L_PARAM = param2; + ServerCommand("echo Calling AngelScript function: L_FUNC_NAME"); + if ((L_FUNC_NAME).findFirst("Initialize") >= 0) + { + ServerCommand("echo [SIMULATED] Function would initialize system"); + } + else + { + if ((L_FUNC_NAME).findFirst("GetMagic") >= 0) + { + ServerCommand("echo [SIMULATED] Function would return magic hand scripts"); + } + } + } + + void test_complete() + { + ServerCommand("echo === AngelScript Integration Test Complete ==="); + ServerCommand("echo Test stages completed: AS_TEST_STAGE / 3"); + SendInfoMsg("all", "AngelScript test complete - check server console for results"); + ScheduleDelayedEvent(2.0, "removeme"); + } + + void removeme() + { + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/the_keep/boss_chest.as b/scripts/angelscript/the_keep/boss_chest.as new file mode 100644 index 00000000..07dc9ff6 --- /dev/null +++ b/scripts/angelscript/the_keep/boss_chest.as @@ -0,0 +1,130 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class BossChest : CGameScript +{ + void OnSpawn() override + { + if (G_BANDIT_BOSS_TYPE == 1) + { + tc_add_artifact("smallarms_flamelick", 20); + tc_add_artifact("smallarms_bone_blade", 20); + } + else + { + if (G_BANDIT_BOSS_TYPE == 2) + { + tc_add_artifact("blunt_darkmaul", 20); + tc_add_artifact("blunt_ms1", 100); + } + else + { + if (G_BANDIT_BOSS_TYPE == 3) + { + tc_add_artifact("axes_runeaxe", 20); + tc_add_artifact("axes_greataxe", 30); + } + else + { + if (G_BANDIT_BOSS_TYPE == 4) + { + tc_add_artifact("swords_liceblade", 100); + tc_add_artifact("swords_iceblade", 30); + tc_add_artifact("swords_giceblade", 20); + } + else + { + if (G_BANDIT_BOSS_TYPE == 5) + { + tc_add_artifact("bows_crossbow_light", 30); + tc_add_artifact("bows_swiftbow", 100); + tc_add_artifact("bows_orion1", 20); + } + else + { + if (G_BANDIT_BOSS_TYPE == 6) + { + tc_add_artifact("swords_novablade12", 20); + tc_add_artifact("swords_skullblade4", 40); + } + } + } + } + } + } + } + + void chest_additems() + { + add_gold(RandomInt(250, 400)); + if (G_BANDIT_BOSS_TYPE == 1) + { + AddStoreItem(STORENAME, "smallarms_dagger", 1, 0); + AddStoreItem(STORENAME, "smallarms_huggerdagger4", 1, 0); + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "smallarms_craftedknife4", 1, 0); + } + } + else + { + if (G_BANDIT_BOSS_TYPE == 2) + { + AddStoreItem(STORENAME, "blunt_mace", 1, 0); + AddStoreItem(STORENAME, "blunt_granitemaul", 1, 0); + } + else + { + if (G_BANDIT_BOSS_TYPE == 3) + { + AddStoreItem(STORENAME, "axes_rsmallaxe", 1, 0); + AddStoreItem(STORENAME, "axes_doubleaxe", 1, 0); + } + else + { + if (G_BANDIT_BOSS_TYPE == 4) + { + AddStoreItem(STORENAME, "swords_katana3", 1, 0); + AddStoreItem(STORENAME, "swords_poison1", 1, 0); + } + else + { + if (G_BANDIT_BOSS_TYPE == 5) + { + AddStoreItem(STORENAME, "bows_treebow", 1, 0); + } + else + { + if (G_BANDIT_BOSS_TYPE == 6) + { + AddStoreItem(STORENAME, "swords_bastardsword", 1, 0); + AddStoreItem(STORENAME, "mana_resist_fire", TC_NPLAYERS_QUART, 0); + if ((RandomInt(0, 1))) + { + AddStoreItem(STORENAME, "mana_immune_fire", 1, 0); + } + } + } + } + } + } + } + AddStoreItem(STORENAME, "health_spotion", 1, 0); + AddStoreItem(STORENAME, "mana_mpotion", 1, 0); + if (RandomInt(1, 3) == 1) + { + add_good_item(); + } + if (RandomInt(1, 3) == 1) + { + add_great_item(); + } + } + +} + +} diff --git a/scripts/angelscript/the_keep/map_startup.as b/scripts/angelscript/the_keep/map_startup.as new file mode 100644 index 00000000..7aeef805 --- /dev/null +++ b/scripts/angelscript/the_keep/map_startup.as @@ -0,0 +1,39 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "the_keep"; + MAP_WEATHER = "clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Keep"); + SetGlobalVar("G_MAP_DESC", "The stronghold has been taken over by hearty adventurers that now terrorize the countryside as bandits."); + SetGlobalVar("G_MAP_DIFF", "Levels 25-30 / HP 400-600"); + SetGlobalVar("G_WARN_HP", 400); + } + + void game_newlevel() + { + string reg.texture.name = "reflective"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.2"; + int reg.texture.reflect.range = 256; + int reg.texture.reflect.world = 1; + int reg.texture.water = 0; + // TODO: registertexture + } + +} + +} diff --git a/scripts/angelscript/the_wall/elf_warrior_guard1.as b/scripts/angelscript/the_wall/elf_warrior_guard1.as new file mode 100644 index 00000000..e0493dc4 --- /dev/null +++ b/scripts/angelscript/the_wall/elf_warrior_guard1.as @@ -0,0 +1,101 @@ +#pragma context server + +#include "monsters/elf_warrior_base.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class ElfWarriorGuard1 : CGameScript +{ + string ANIM_ATTACK; + string CHAT_STEP1; + string CHAT_STEPS; + int DMG_MELEE; + string DMG_TYPE; + int NO_CHAT; + int NPC_BATTLE_ALLY; + int NPC_GIVE_EXP; + int NPC_NO_PLAYER_DMG; + int NPC_RETURN_HOME; + string SOUND_HELLO; + string SOUND_VELEND; + + ElfWarriorGuard1() + { + NPC_GIVE_EXP = 0; + DMG_TYPE = "pierce"; + DMG_MELEE = 800; + NPC_NO_PLAYER_DMG = 1; + NPC_RETURN_HOME = 1; + NO_CHAT = 1; + NPC_BATTLE_ALLY = 1; + SOUND_HELLO = "npc/elvenfemale/vs_nnwnobf1_hi.wav"; + SOUND_VELEND = "npc/elvenfemale/vs_nnwnobf1_warn.wav"; + } + + void elf_spawn() + { + SetName("Elven Warrior"); + SetHealth(2000); + SetDamageResistance("all", 0.5); + SetRace("human"); + SetRoam(false); + SetProp(GetOwner(), "skin", 1); + SetModelBody(1, 4); + SetModelBody(2, 3); + SetMenuAutoOpen(1); + } + + void OnPostSpawn() override + { + ANIM_ATTACK = "swordjab1_R"; + } + + void game_menu_getoptions() + { + if (m_hAttackTarget != "unset") + { + string reg.mitem.title = "(In combat...)"; + string reg.mitem.type = "disabled"; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SetMoveDest(param1); + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, SOUND_HELLO, 10); + Say("[0.1] [0.3]"); + ScheduleDelayedEvent(0.6, "bchat_close_mouth"); + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + } + + void say_hi() + { + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, SOUND_VELEND, 10); + string LEADER_ID = FindEntityByName("elf_leader"); + if ((IsEntityAlive(LEADER_ID))) + { + CHAT_STEP1 = "Velend Varon speaks for us."; + if (GetEntityRace(param1) == "human") + { + CHAT_STEP2 = "Address any questions you have to him, child of Torkaloth."; + } + else + { + CHAT_STEP2 = "Address any questions you have to him."; + } + CHAT_STEPS = 2; + chat_loop(); + } + else + { + SayText("Seeker Varon maybe dead , but " + I + "must still stand guard , as " + I + " await our reinforcements."); + } + } + +} + +} diff --git a/scripts/angelscript/the_wall/elf_warrior_guard2.as b/scripts/angelscript/the_wall/elf_warrior_guard2.as new file mode 100644 index 00000000..a0fcff93 --- /dev/null +++ b/scripts/angelscript/the_wall/elf_warrior_guard2.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "monsters/elf_warrior_base.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class ElfWarriorGuard2 : CGameScript +{ + string ANIM_ATTACK; + string ATTACK_STANCE; + string ATTACK_TYPE; + int CAN_BLOCK; + float CHANCE_STUN; + string CHAT_STEP1; + string CHAT_STEPS; + int DMG_MELEE; + int NO_CHAT; + int NPC_BATTLE_ALLY; + int NPC_GIVE_EXP; + int NPC_NO_PLAYER_DMG; + int NPC_RETURN_HOME; + string SOUND_HELLO; + string SOUND_VELEND; + + ElfWarriorGuard2() + { + NPC_GIVE_EXP = 0; + CHANCE_STUN = 0.2; + ATTACK_TYPE = "blunt"; + ATTACK_STANCE = "1h"; + DMG_MELEE = 800; + CAN_BLOCK = 1; + NPC_NO_PLAYER_DMG = 1; + NPC_RETURN_HOME = 1; + NO_CHAT = 1; + NPC_BATTLE_ALLY = 1; + SOUND_HELLO = "npc/elvenfemale/vs_nnwnobf1_hi.wav"; + SOUND_VELEND = "npc/elvenfemale/vs_nnwnobf1_warn.wav"; + } + + void elf_spawn() + { + SetName("Elven Warrior"); + SetHealth(2000); + SetDamageResistance("all", 0.5); + SetRace("human"); + SetRoam(false); + SetProp(GetOwner(), "skin", 1); + SetModelBody(1, 11); + SetModelBody(2, 3); + } + + void OnPostSpawn() override + { + ANIM_ATTACK = "swordswing1_R"; + } + + void game_menu_getoptions() + { + if (m_hAttackTarget != "unset") + { + string reg.mitem.title = "(In combat...)"; + string reg.mitem.type = "disabled"; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SetMoveDest(param1); + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, SOUND_HELLO, 10); + Say("[0.1] [0.3]"); + ScheduleDelayedEvent(0.6, "bchat_close_mouth"); + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + } + + void say_hi() + { + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, SOUND_VELEND, 10); + string LEADER_ID = FindEntityByName("elf_leader"); + if ((IsEntityAlive(LEADER_ID))) + { + CHAT_STEP1 = "Velend Varon speaks for us."; + if (GetEntityRace(param1) == "human") + { + CHAT_STEP2 = "Address any questions you have to him, child of Torkaloth."; + } + else + { + CHAT_STEP2 = "Address any questions you have to him."; + } + CHAT_STEPS = 2; + chat_loop(); + } + else + { + SayText("Seeker Varon maybe dead , but " + I + "must still stand guard , as " + I + " await our reinforcements."); + } + } + +} + +} diff --git a/scripts/angelscript/the_wall/elf_wizard_guard.as b/scripts/angelscript/the_wall/elf_wizard_guard.as new file mode 100644 index 00000000..5e036a60 --- /dev/null +++ b/scripts/angelscript/the_wall/elf_wizard_guard.as @@ -0,0 +1,690 @@ +#pragma context server + +#include "monsters/elf_wizard_base.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class ElfWizardGuard : CGameScript +{ + string ANIM_ATTACK; + string ANIM_STEP1; + string ANIM_STEP3; + int ATTACK_HITRANGE; + int ATTACK_HITRANGE_MELEE; + int ATTACK_RANGE; + float CHAT_DELAY_STEP1; + float CHAT_DELAY_STEP2; + float CHAT_DELAY_STEP3; + float CHAT_DELAY_STEP4; + float CHAT_DELAY_STEP5; + float CHAT_DELAY_STEP6; + float CHAT_DELAY_STEP7; + float CHAT_DELAY_STEP8; + float CHAT_DELAY_STEP9; + string CHAT_MODE; + string CHAT_SOUND1; + string CHAT_SOUND2; + string CHAT_SOUND3; + string CHAT_SOUND4; + string CHAT_SOUND5; + string CHAT_SOUND6; + string CHAT_SOUND7; + string CHAT_SOUND8; + string CHAT_SOUND9; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEP7; + string CHAT_STEP8; + string CHAT_STEP9; + int CHAT_STEPS; + int DMG_MELEE; + int DMG_SHOCK; + int DOT_SHOCK; + int ELF_LIGHTNING_WIZARD; + string INTRO_ID; + string NEXT_DMG_ALERT; + int NO_CHAT; + int NPC_BATTLE_ALLY; + int NPC_NO_PLAYER_DMG; + string NPC_PROXACT_EVENT; + int NPC_PROXACT_IFSEEN; + int NPC_PROXACT_RANGE; + int NPC_PROX_ACTIVATE; + int NPC_RETURN_HOME; + int ON_SECOND_SPAWN; + int PLAYERS_REWARDED; + string PLAYERS_TO_REWARD; + string QUEST_WINNER; + string REWARD_LIST; + string REWARD_LIST1; + string REWARD_LIST2; + string REWARD_LIST3; + string REWARD_LIST4; + string REWARD_NAMES4; + string REWARED_SYMBOL; + string SOUND_ELF_BEAM_LOOP; + string SOUND_ELF_BEAM_START; + + ElfWizardGuard() + { + REWARD_LIST1 = "scroll_volcano;armor_helm_gaz2;mana_immune_cold;mana_gprotection;swords_giceblade;shields_rune;scroll2_frost_xolt;scroll_ice_wall"; + REWARD_LIST2 = "scroll2_lightning_chain;scroll2_lightning_storm;mana_leadfoot;mana_demon_blood;mana_immune_lightning"; + REWARD_LIST3 = "armor_helm_gaz1;mana_immune_fire;mana_vampire;item_gwond;axes_dragon;scroll_fire_wall;swords_novablade12;blunt_gauntlets_fire"; + REWARD_LIST4 = "mana_leadfoot;axes_gthunder11;axes_vaxe;blunt_gauntlets_demon;mana_forget;mana_speed;mana_regen;polearms_nag"; + REWARD_NAMES4 = "Leadfoot Potion;Greater Thunderaxe;Blood Axe;Demon Gauntlets;Forgetfulness Potion;Speed Potion;Regeneration Potion;Elven Glaive"; + ELF_LIGHTNING_WIZARD = 1; + DMG_SHOCK = 100; + DOT_SHOCK = 50; + DMG_MELEE = 300; + NO_CHAT = 1; + NPC_NO_PLAYER_DMG = 1; + NPC_RETURN_HOME = 1; + NPC_PROX_ACTIVATE = 1; + NPC_PROXACT_RANGE = 256; + NPC_PROXACT_EVENT = "do_intro"; + NPC_PROXACT_IFSEEN = 0; + SOUND_ELF_BEAM_LOOP = "magic/bolt_loop.wav"; + SOUND_ELF_BEAM_START = "magic/bolt_start.wav"; + NPC_BATTLE_ALLY = 1; + ATTACK_HITRANGE_MELEE = 128; + } + + void game_precache() + { + Precache(SOUND_ELF_BEAM_LOOP); + Precache(SOUND_ELF_BEAM_START); + Precache("voices/the_wall/vv_azura_dead.wav"); + Precache("voices/the_wall/vv_azura1.wav"); + Precache("voices/the_wall/vv_azura2.wav"); + Precache("voices/the_wall/vv_azura3.wav"); + Precache("voices/the_wall/vv_givereward.wav"); + Precache("voices/the_wall/vv_hi1.wav"); + Precache("voices/the_wall/vv_hi2.wav"); + Precache("voices/the_wall/vv_hi3.wav"); + Precache("voices/the_wall/vv_holdthere1.wav"); + Precache("voices/the_wall/vv_holdthere2.wav"); + Precache("voices/the_wall/vv_holdthere3.wav"); + Precache("voices/the_wall/vv_ihotohr_dead1.wav"); + Precache("voices/the_wall/vv_ihotohr_dead2.wav"); + Precache("voices/the_wall/vv_ihotohr_dead2_solo.wav"); + Precache("voices/the_wall/vv_ihotohr_dead3.wav"); + Precache("voices/the_wall/vv_ihotohr_dead3_solo.wav"); + Precache("voices/the_wall/vv_ihotohr1.wav"); + Precache("voices/the_wall/vv_ihotohr2.wav"); + Precache("voices/the_wall/vv_ihotohr3.wav"); + Precache("voices/the_wall/vv_ihotohr4.wav"); + Precache("voices/the_wall/vv_ihotohr5.wav"); + Precache("voices/the_wall/vv_ivicta_dead.wav"); + Precache("voices/the_wall/vv_ivicta1.wav"); + Precache("voices/the_wall/vv_ivicta2.wav"); + Precache("voices/the_wall/vv_ivicta3.wav"); + Precache("voices/the_wall/vv_melanion.wav"); + Precache("voices/the_wall/vv_playersrewarded.wav"); + Precache("voices/the_wall/vv_thewall1-2.wav"); + Precache("voices/the_wall/vv_thewall3.wav"); + Precache("voices/the_wall/vv_thewall4.wav"); + Precache("voices/the_wall/vv_token.wav"); + Precache("voices/the_wall/vv_traitors1.wav"); + Precache("voices/the_wall/vv_traitors2.wav"); + Precache("voices/the_wall/vv_traitors3.wav"); + Precache("voices/the_wall/vv_traitors4.wav"); + Precache("voices/the_wall/vv_traitors5.wav"); + Precache("voices/the_wall/vv_traitors6.wav"); + Precache("voices/the_wall/vv_traitors7.wav"); + Precache("voices/the_wall/vv_traitors8.wav"); + Precache("voices/the_wall/vv_traitors9.wav"); + Precache("voices/the_wall/vv_ulectrath_dead.wav"); + Precache("voices/the_wall/vv_ulectrath1.wav"); + } + + void elf_spawn() + { + SetName("Velend Varon"); + SetHealth(3500); + SetRace("human"); + SetName("elf_leader"); + SetModelBody(1, 2); + SetModelBody(2, 0); + SetProp(GetOwner(), "skin", 6); + SetRoam(false); + SetSayTextRange(1024); + CatchSpeech("say_hi", "hail"); + CatchSpeech("say_the_wall", "wall"); + CatchSpeech("say_traitors", "ram"); + CatchSpeech("say_azura", "azur"); + CatchSpeech("say_ulectrath", "ulec"); + CatchSpeech("say_ivicta", "ivict"); + CatchSpeech("say_ihotohr", "iho"); + CatchSpeech("say_melanion", "mel"); + SetHearingSensitivity(10); + SetMenuAutoOpen(0); + npcatk_suspend_ai(); + } + + void OnPostSpawn() override + { + SetModelBody(2, 0); + ANIM_ATTACK = "ref_shoot_crowbar"; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 120; + if (!(StringToLower(GetMapName()) + "the_wall2")) return; + ON_SECOND_SPAWN = 1; + } + + void do_intro() + { + INTRO_ID = NPC_PROXACT_PLAYERID; + SetModelBody(2, 0); + npcatk_resume_ai(); + SetMoveDest(INTRO_ID); + if ((ON_SECOND_SPAWN)) return; + SayText("Hold there!"); + EmitSound(GetOwner(), 2, "voices/the_wall/vv_holdthere.wav", 10); + Say("[0.2] [0.4]"); + PlayAnim("critical", "look_idle"); + CHAT_STEP1 = "Several [Rammata] have escaped us by traveling into the fortresses."; + CHAT_DELAY_STEP1 = 3.4; + CHAT_SOUND1 = "voices/the_wall/vv_holdthere1.wav"; + CHAT_STEP2 = "I'm afraid we three aren't enough to dare try to flush them out."; + CHAT_DELAY_STEP2 = 4.0; + CHAT_SOUND2 = "voices/the_wall/vv_holdthere2.wav"; + CHAT_STEP3 = "There's too many powerful undead occupying [The Wall] for us to go in."; + CHAT_DELAY_STEP3 = 4.4; + CHAT_SOUND3 = "voices/the_wall/vv_holdthere3.wav"; + CHAT_STEPS = 3; + ScheduleDelayedEvent(3.0, "chat_loop"); + } + + void say_the_wall() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(5.0, "say_the_wall"); + } + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "The Wall is a series of elven fortresses that once stood as the last line of defense"; + CHAT_DELAY_STEP1 = 4.6; + CHAT_SOUND1 = "voices/the_wall/vv_thewall1-2.wav"; + CHAT_STEP2 = "against Lor Malgoriand's armies during the Age of Blood."; + CHAT_DELAY_STEP2 = 3.2; + CHAT_STEP3 = "The former Eswen Empire no longer has the forces to maintain the lines."; + CHAT_DELAY_STEP3 = 5.1; + CHAT_SOUND3 = "voices/the_wall/vv_thewall3.wav"; + CHAT_STEP4 = "As a result, the remains of the dark one's armies moved into the ruins."; + CHAT_SOUND4 = "voices/the_wall/vv_thewall4.wav"; + CHAT_DELAY_STEP4 = 4.5; + CHAT_STEPS = 4; + ScheduleDelayedEvent(20.0, "enable_menu"); + chat_loop(); + } + + void enable_menu() + { + SetMenuAutoOpen(1); + } + + void say_traitors() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(5.0, "say_traitors"); + } + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Rammata te Mal are elven worshippers of Torkalath."; + CHAT_SOUND1 = "voices/the_wall/vv_traitors1.wav"; + CHAT_DELAY_STEP1 = 3.0; + CHAT_STEP2 = "They're insane, evil. They'll show no mercy, even to you, a legitmate child of their god."; + CHAT_SOUND2 = "voices/the_wall/vv_traitors2.wav"; + CHAT_DELAY_STEP2 = 5.5; + CHAT_STEP3 = "We cannot allow traitors of Felewyn to escape justice."; + CHAT_SOUND3 = "voices/the_wall/vv_traitors3.wav"; + CHAT_DELAY_STEP3 = 4.0; + CHAT_STEP4 = "This pack's leaders are named [Azura], [Ulectrath], and [Ivicta]."; + CHAT_SOUND4 = "voices/the_wall/vv_traitors4.wav"; + CHAT_DELAY_STEP4 = 4.0; + CHAT_STEP5 = "They've also several acolytes with them we've no records of."; + CHAT_SOUND5 = "voices/the_wall/vv_traitors5.wav"; + CHAT_DELAY_STEP5 = 4.5; + CHAT_STEP6 = "They are all likely seeking the protection of the Rammata [necromancer], Ihotohr, who dwells within."; + CHAT_SOUND6 = "voices/the_wall/vv_traitors6.wav"; + CHAT_DELAY_STEP6 = 6.2; + CHAT_STEP7 = "He's insane, and likely not be anymore pleased to see them than will the undead he masters."; + CHAT_SOUND7 = "voices/the_wall/vv_traitors7.wav"; + CHAT_DELAY_STEP7 = 6.0; + CHAT_STEP8 = "We don't have authority to enter the ruins, but if you can bring us proof of their deaths..."; + CHAT_SOUND8 = "voices/the_wall/vv_traitors8.wav"; + CHAT_DELAY_STEP8 = 3.5; + CHAT_STEP9 = "I do have the authority to reward you for each head retrieved."; + CHAT_SOUND9 = "voices/the_wall/vv_traitors9.wav"; + CHAT_DELAY_STEP9 = 5.7; + CHAT_STEPS = 9; + chat_loop(); + } + + void say_azura() + { + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Azura is actually from north of The Wall, living among the undead around The Bleak."; + CHAT_DELAY_STEP1 = 4.7; + CHAT_SOUND1 = "voices/the_wall/vv_azura1.wav"; + CHAT_STEP2 = "She journeyed down from the frozen wastelands to join up with the other two in their effort to assassinate Magistrate Tal'san."; + CHAT_DELAY_STEP2 = 6.5; + CHAT_SOUND2 = "voices/the_wall/vv_azura2.wav"; + CHAT_STEP3 = "Apprarently, part of a vendetta, to avenge the slaughter of a coven of Rammata found hiding in [Melanion]."; + CHAT_DELAY_STEP3 = 7.3; + CHAT_SOUND3 = "voices/the_wall/vv_azura3.wav"; + CHAT_STEPS = 3; + chat_loop(); + } + + void say_ulectrath() + { + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 2, "voices/the_wall/vv_ulectrath1.wav", 10); + SayText("Ulectrath the Storm hails from Aluhandra where it is rumored she either bargained for or stole magical powers from the desert orc clans."); + bchat_auto_mouth_move(7.0); + } + + void say_ivicta() + { + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Ivicta was the sole survivor of a [Melanion] cult, subsequently forced into the Badlands."; + CHAT_DELAY_STEP1 = 6.0; + CHAT_SOUND1 = "voices/the_wall/vv_ivicta1.wav"; + CHAT_STEP2 = "The slaughter of the cult was ordered by Magistrate Tal'san, so it is likely she who began this mad quest to assassinate him. "; + CHAT_DELAY_STEP2 = 7.0; + CHAT_SOUND2 = "voices/the_wall/vv_ivicta2.wav"; + CHAT_STEP3 = "However, how she contacted or organized the other two women is beyond the scope of our knowledge."; + CHAT_DELAY_STEP3 = 5.5; + CHAT_SOUND3 = "voices/the_wall/vv_ivicta3.wav"; + CHAT_STEPS = 3; + chat_loop(); + } + + void say_melanion() + { + SayText("The Melanion Ruins lie beneath and around the new elven capital of Kray Eldorad and run all the way to Blood Rose valley."); + EmitSound(GetOwner(), 2, "voices/the_wall/vv_melanion.wav", 10); + bchat_auto_mouth_move(7.0); + } + + void say_ihotohr() + { + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Ihotohr brought an army of the undead to the elven capital of Kray Eldorad nearly a century ago."; + CHAT_DELAY_STEP1 = 5.2; + CHAT_SOUND1 = "voices/the_wall/vv_ihotohr1.wav"; + CHAT_STEP2 = "He was soundly defeated, and has been biding his time in the maze of fortresses that make up The Wall ever since."; + CHAT_DELAY_STEP2 = 6.7; + CHAT_SOUND2 = "voices/the_wall/vv_ihotohr2.wav"; + CHAT_STEP3 = "Rammata have sought him out to form alliances before, but none have returned.."; + CHAT_DELAY_STEP3 = 4.3; + CHAT_SOUND3 = "voices/the_wall/vv_ihotohr3.wav"; + CHAT_STEP4 = "I fear that desperation and fear have driven this trio and their cohorts to attempt it."; + CHAT_DELAY_STEP4 = 4.5; + CHAT_SOUND4 = "voices/the_wall/vv_ihotohr4.wav"; + CHAT_STEP5 = "We cannot depend on the necromancer to dispatch our foes for us though. Sooner or later, we must pursue them."; + CHAT_DELAY_STEP5 = 6.0; + CHAT_SOUND5 = "voices/the_wall/vv_ihotohr5.wav"; + CHAT_STEPS = 5; + chat_loop(); + } + + void say_hi() + { + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Hail, child of Torkaloth..."; + CHAT_DELAY_STEP1 = 1.5; + CHAT_SOUND1 = "voices/the_wall/vv_hi1.wav"; + CHAT_STEP2 = "As I explained, serveral [Rammata] have escaped into the fortresses."; + CHAT_DELAY_STEP2 = 4.5; + CHAT_SOUND2 = "voices/the_wall/vv_hi2.wav"; + CHAT_STEP3 = "Bring us proof of their demise, and I shall reward you."; + CHAT_DELAY_STEP3 = 3.0; + CHAT_SOUND3 = "voices/the_wall/vv_hi3.wav"; + CHAT_STEPS = 3; + chat_loop(); + } + + void game_menu_getoptions() + { + SetMoveDest(param1); + if ((BUSY_CHATTING)) + { + if (CHAT_MODE != "final_reward") + { + } + string reg.mitem.title = "(Talking...)"; + string reg.mitem.type = "disabled"; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (m_hAttackTarget != "unset") + { + string reg.mitem.title = "(In combat...)"; + string reg.mitem.type = "disabled"; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + SetMoveDest(param1); + int HAS_HEAD = 0; + if ((ItemExists(param1, "item_telfh1"))) + { + int HAS_HEAD = 1; + string reg.mitem.title = "Give Azura's Head"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_telfh1"; + string reg.mitem.callback = "got_head1"; + } + if ((ItemExists(param1, "item_telfh2"))) + { + int HAS_HEAD = 1; + string reg.mitem.title = "Give Ulectrath's Head"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_telfh2"; + string reg.mitem.callback = "got_head2"; + } + if ((ItemExists(param1, "item_telfh3"))) + { + int HAS_HEAD = 1; + string reg.mitem.title = "Give Ivicta's Head"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_telfh3"; + string reg.mitem.callback = "got_head3"; + } + if ((ItemExists(param1, "item_telfh4"))) + { + int HAS_HEAD = 1; + string reg.mitem.title = "Give Ihotohr's Head"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_telfh4"; + string reg.mitem.callback = "got_head4"; + } + if (!(HAS_HEAD)) + { + if (CHAT_MODE != "final_reward") + { + } + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + string reg.mitem.title = "About The Wall"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_the_wall"; + string reg.mitem.title = "About Rammata"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_traitors"; + string reg.mitem.title = "About Azura"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_azura"; + string reg.mitem.title = "About Ulectrath"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_ulectrath"; + string reg.mitem.title = "About Ivicta"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_ivicta"; + string reg.mitem.title = "About Ihotohr"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_ihotohr"; + } + if (!(CHAT_MODE == "final_reward")) return; + if (GetEntityMaxHealth(param1) < 200) + { + SayText("Yes... You're cute, but you couldn't have possibly had anything to do with this."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((PLAYERS_TO_REWARD).findFirst(param1) >= 0) + { + int GIVE_REWARD = 1; + } + if (!(GIVE_REWARD)) + { + SayText("Thank you again, for all you have done for us, child of Torkalath."); + EmitSound(GetOwner(), 2, "voices/the_wall/vv_givereward.wav", 10); + bchat_mouth_move(); + } + if (!(GIVE_REWARD)) return; + if (PLAYERS_REWARDED > 1) + { + EmitSound(GetOwner(), 2, "voices/the_wall/vv_playersrewarded.wav", 10); + SayText("Please, select a reward for the part you played in the defeat of Ihotohr."); + bchat_mouth_move(); + } + for (int i = 0; i < GetTokenCount(REWARD_LIST4, ";"); i++) + { + build_reward_list(); + } + if (!(REWARED_SYMBOL)) + { + if ((GetPlayerQuestData(param1, "f")).findFirst("sym") >= 0) + { + int NO_SYMB = 1; + } + if (!(NO_SYMB)) + { + } + REWARED_SYMBOL = 1; + string CUR_ITEM_NAME = "Symbol of Felewyn "; + string CUR_ITEM = "item_s"; + int RAND_SYMB = RandomInt(1, 5); + if (RAND_SYMB == 1) + { + string NAME_ADD = "I"; + string ITEM_ADD = "1"; + } + if (RAND_SYMB == 2) + { + string NAME_ADD = "II"; + string ITEM_ADD = "2"; + } + if (RAND_SYMB == 3) + { + string NAME_ADD = "III"; + string ITEM_ADD = "3"; + } + if (RAND_SYMB == 4) + { + string NAME_ADD = "IV"; + string ITEM_ADD = "4"; + } + if (RAND_SYMB == 5) + { + string NAME_ADD = "V"; + string ITEM_ADD = "5"; + } + CUR_ITEM_NAME += NAME_ADD; + CUR_ITEM += ITEM_ADD; + string reg.mitem.title = CUR_ITEM_NAME; + string reg.mitem.data = CUR_ITEM; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_reward_final"; + } + } + + void build_reward_list() + { + string CUR_IDX = i; + string CUR_ITEM = GetToken(REWARD_LIST4, CUR_IDX, ";"); + string CUR_ITEM_NAME = GetToken(REWARD_NAMES4, CUR_IDX, ";"); + string reg.mitem.title = CUR_ITEM_NAME; + string reg.mitem.data = CUR_ITEM; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_reward_final"; + } + + void give_reward_final() + { + string PLR_IDX = FindToken(PLAYERS_TO_REWARD, param1, ";"); + RemoveToken(PLAYERS_TO_REWARD, PLR_IDX, ";"); + PLAYERS_REWARDED += 1; + LogDebug("give_reward_final GetEntityName(param1) PARAM2"); + // TODO: offer PARAM1 PARAM2 + } + + void frame_melee() + { + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_MELEE, 0.9, "blunt"); + AddVelocity(m_hAttackTarget, /* TODO: $relvel */ $relvel(10, 800, 110)); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + if ((IsValidPlayer(m_hLastStruck))) return; + if (!(param1 > 0)) return; + if (!(GetGameTime() > NEXT_DMG_ALERT)) return; + NEXT_DMG_ALERT = GetGameTime(); + NEXT_DMG_ALERT += 10.0; + SendInfoMsg("all", "CRITICAL NPC UNDER ATTACK Velend Varon is under attack!"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SendInfoMsg("all", "A CRITICAL NPC HAS BEEN SLAIN! Velend Varon is dead!"); + } + + void got_head1() + { + LogDebug("got_head1 step 1"); + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "got_head1"); + } + LogDebug("got_head1 step 2"); + if ((BUSY_CHATTING)) return; + LogDebug("got_head1 step 3"); + CHAT_STEP1 = "Ah yes, the head of Azura. Finally her cold soul can be brought to rest."; + CHAT_DELAY_STEP1 = 5.3; + CHAT_SOUND1 = "voices/the_wall/vv_azura_dead.wav"; + CHAT_STEP2 = "Please take token of gratitude from the faithful of the Empire of Eswen."; + CHAT_DELAY_STEP2 = 4.3; + CHAT_SOUND2 = "voices/the_wall/vv_token.wav"; + CHAT_STEPS = 2; + chat_loop(); + LogDebug("got_head1 step 4"); + REWARD_LIST = REWARD_LIST1; + string QUEST_WINNER = param1; + reward_random_item(QUEST_WINNER); + } + + void got_head2() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "got_head2"); + } + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Ulectrath made many shake with fear, like thunder in the night. They may sleep easy, knowing that you have defeated her at last."; + CHAT_SOUND1 = "voices/the_wall/vv_ulectrath_dead.wav"; + CHAT_DELAY_STEP1 = 5.9; + CHAT_STEP2 = "Please take token of gratitude from the faithful of the Empire of Eswen."; + CHAT_DELAY_STEP2 = 4.3; + CHAT_SOUND2 = "voices/the_wall/vv_token.wav"; + CHAT_STEPS = 2; + chat_loop(); + REWARD_LIST = REWARD_LIST2; + string QUEST_WINNER = param1; + reward_random_item(QUEST_WINNER); + } + + void got_head3() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "got_head3"); + } + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Ivicta hatred was not without reason, but it was beyond it. We can only pray that she may now finally be free of it."; + CHAT_SOUND1 = "voices/the_wall/vv_ivicta_dead.wav"; + CHAT_DELAY_STEP1 = 8.5; + CHAT_STEP2 = "Please take token of gratitude from the faithful of the Empire of Eswen."; + CHAT_DELAY_STEP2 = 4.3; + CHAT_SOUND2 = "voices/the_wall/vv_token.wav"; + CHAT_STEPS = 2; + chat_loop(); + REWARD_LIST = REWARD_LIST3; + string QUEST_WINNER = param1; + reward_random_item(QUEST_WINNER); + } + + void got_head4() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "got_head4"); + } + if ((BUSY_CHATTING)) return; + int CHAT_DELAY_TOTAL = 0; + CHAT_STEP1 = "You... You slew Ihotohr himself!? This is more than I ever dared even hope for, let alone ask!"; + CHAT_SOUND1 = "voices/the_wall/vv_ihotohr_dead1.wav"; + CHAT_DELAY_STEP1 = 8.5; + CHAT_DELAY_TOTAL += 8.5; + ANIM_STEP1 = "ref_aim_squeak"; + if (GetPlayerCount() > 1) + { + CHAT_STEP2 = "All of you must be rewarded! Please, choose from among any of these, each of you!"; + CHAT_SOUND2 = "voices/the_wall/vv_ihotohr_dead2.wav"; + CHAT_DELAY_STEP2 = 5.5; + CHAT_DELAY_TOTAL += 5.5; + CHAT_STEP3 = "Tell your allys to come forth! I shall reward each of them in turn."; + CHAT_SOUND3 = "voices/the_wall/vv_ihotohr_dead3.wav"; + CHAT_DELAY_STEP3 = 3.5; + } + else + { + CHAT_STEP2 = "And on your own no less? I truly underestimated you. Without doubt Felewyn walks by your side!"; + CHAT_SOUND2 = "voices/the_wall/vv_ihotohr_dead2_solo.wav"; + CHAT_DELAY_STEP2 = 7.9; + CHAT_DELAY_TOTAL += 7.9; + CHAT_STEP3 = "Please, select from any of these items."; + CHAT_SOUND3 = "voices/the_wall/vv_ihotohr_dead3_solo.wav"; + CHAT_DELAY_STEP3 = 2.3; + } + ANIM_STEP3 = "deep_idle"; + CHAT_STEPS = 3; + chat_loop(); + SendInfoMsg("all", "QUEST REWARD Velend Varon has a gift waiting for you, please see him."); + PLAYERS_TO_REWARD = ""; + GetAllPlayers(PLAYERS_TO_REWARD); + PLAYERS_REWARDED = 1; + QUEST_WINNER = param1; + CHAT_DELAY_TOTAL("reward_final_items"); + } + + void reward_random_item() + { + LogDebug("reward_random_item step1"); + string N_REWARDS = GetTokenCount(REWARD_LIST, ";"); + N_REWARDS -= 1; + int RND_REWARD = RandomInt(0, N_REWARDS); + LogDebug("reward_random_item step2"); + string RND_ITEM = GetToken(REWARD_LIST, RND_REWARD, ";"); + LogDebug("reward_random_item step3"); + // TODO: offer PARAM1 RND_ITEM + } + + void reward_final_items() + { + CHAT_MODE = "final_reward"; + ScheduleDelayedEvent(0.1, "resend_menu"); + } + + void resend_menu() + { + OpenMenu(QUEST_WINNER); + } + + void second_spawn() + { + ON_SECOND_SPAWN = 1; + } + +} + +} diff --git a/scripts/angelscript/the_wall/forsuth.as b/scripts/angelscript/the_wall/forsuth.as new file mode 100644 index 00000000..82a11e7d --- /dev/null +++ b/scripts/angelscript/the_wall/forsuth.as @@ -0,0 +1,995 @@ +#pragma context server + +#include "monsters/base_monster_new.as" +#include "monsters/base_chat.as" +#include "monsters/base_battle_ally.as" +#include "NPCs/dwarf_lantern_base.as" + +namespace MS +{ + +class Forsuth : CGameScript +{ + string ALLY_FOLLOW_ON; + string ALLY_FOLLOW_PLR_ID; + string ALLY_NEXT_FAS_CHECK; + string ANIM_ATTACK; + string ANIM_DEATH; + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_STEP1; + string ANIM_STEP9; + string ANIM_WALK; + string AS_ATTACKING; + int ATTACK_HITCHANCE; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + float BASE_MOVESPEED; + int BUSY_CHATTING; + float CHAT_DELAY; + float CHAT_DELAY_STEP1; + float CHAT_DELAY_STEP2; + float CHAT_DELAY_STEP3; + float CHAT_DELAY_STEP4; + float CHAT_DELAY_STEP5; + float CHAT_DELAY_STEP6; + float CHAT_DELAY_STEP7; + float CHAT_DELAY_STEP8; + float CHAT_DELAY_STEP9; + string CHAT_EVENT_STEP2; + string CHAT_OVERRIDE_TIME; + string CHAT_SOUND1; + string CHAT_SOUND2; + string CHAT_SOUND3; + string CHAT_SOUND4; + string CHAT_SOUND5; + string CHAT_SOUND6; + string CHAT_SOUND7; + string CHAT_SOUND9; + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEP7; + string CHAT_STEP8; + string CHAT_STEP9; + int CHAT_STEPS; + string COMPANION_LR; + float CYCLCE_TIME; + int DID_END_EVENT; + string DID_FF_WARN; + string DID_INTRO; + int DID_MOUNTAIN_COMMENT; + int DID_STAIRS_COMMENT; + int DID_UNDEAD_COMMENT; + int DID_WRAITH_COMMENT; + int DMG_SWING; + int FACE_PLAYERS; + int FOLLOW_RANGE_MAX; + int FOLLOW_RANGE_MIN; + int FORSUTH_CRITICAL; + float FREQ_ALERT; + float FREQ_CRITICAL; + float FREQ_HEALER; + float FREQ_VICTORY; + int GAVE_FIRST_POT; + string GAVE_POT_LIST; + int GAVE_REWARD; + int HALF_HP; + string MAX_CHAT_TIME; + int MY_HP; + string NEXT_ALERT; + string NEXT_CRITICAL; + string NEXT_HEALER; + string NEXT_REGEN; + string NEXT_TELEPORT; + string NEXT_VICTORY; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + string NO_STUCK_CHECKS; + int NPC_BATTLE_ALLY; + int NPC_GIVE_EXP; + int NPC_NO_PLAYER_DMG; + string PLAT_SUSPEND_MODE; + string PLAYER_CHAT; + string PLAYER_FOLLOW; + string QUEST_WINNER; + int REACHED_TOP; + string REWARD_LIST; + string SOUND_ALLY_JUMP; + string SOUND_ATTACK1; + string SOUND_ATTACK2; + string SOUND_ATTACK3; + string SOUND_BATTLE_CRY1; + string SOUND_BATTLE_CRY2; + string SOUND_BATTLE_CRY3; + string SOUND_BATTLE_CRY4; + string SOUND_BATTLE_CRY5; + string SOUND_BYE; + string SOUND_COME_HERE; + string SOUND_DEATH; + string SOUND_HEALER1; + string SOUND_HEALER2; + string SOUND_HI; + string SOUND_HI_ALT; + string SOUND_LAUGH; + string SOUND_NO; + string SOUND_PAIN1; + string SOUND_PAIN2; + string SOUND_PAIN3; + string SOUND_STRUCK1; + string SOUND_STRUCK2; + string SOUND_STRUCK3; + string SOUND_SWING; + string SOUND_VICTORY1; + string SOUND_VICTORY2; + string SOUND_YES; + float STAIR_TOP_Z; + string TELEPORT_CHEAT; + + Forsuth() + { + ANIM_IDLE = "idle"; + ANIM_DEATH = "death"; + ANIM_ATTACK = "attack"; + ANIM_RUN = "run"; + ANIM_WALK = "walk"; + STAIR_TOP_Z = -1519.97; + ATTACK_RANGE = 50; + ATTACK_MOVERANGE = 32; + ATTACK_HITRANGE = 100; + NPC_GIVE_EXP = 0; + NPC_BATTLE_ALLY = 1; + NPC_NO_PLAYER_DMG = 1; + NO_RUMOR = 1; + NO_HAIL = 1; + NO_JOB = 1; + DMG_SWING = 200; + ATTACK_HITCHANCE = 90; + REWARD_LIST = "bows_telf1;bows_telf2;bows_telf3;bows_telf4;axes_b;smallarms_rd;blunt_gauntlets_bear;polearms_h"; + SOUND_STRUCK1 = "weapons/cbar_hitbod1.wav"; + SOUND_STRUCK2 = "weapons/cbar_hitbod2.wav"; + SOUND_STRUCK3 = "weapons/cbar_hitbod3.wav"; + SOUND_SWING = "weapons/swingsmall.wav"; + SOUND_BATTLE_CRY1 = "none"; + SOUND_BATTLE_CRY2 = "none"; + SOUND_BATTLE_CRY3 = "none"; + SOUND_BATTLE_CRY4 = "none"; + SOUND_BATTLE_CRY5 = "none"; + SOUND_VICTORY1 = "none"; + SOUND_VICTORY2 = "none"; + SOUND_PAIN1 = "none"; + SOUND_PAIN2 = "none"; + SOUND_PAIN3 = "none"; + SOUND_COME_HERE = "none"; + SOUND_HEALER1 = "none"; + SOUND_HEALER2 = "none"; + SOUND_HI = "none"; + SOUND_HI_ALT = "none"; + SOUND_BYE = "none"; + SOUND_DEATH = "none"; + SOUND_YES = "none"; + SOUND_NO = "none"; + SOUND_LAUGH = "none"; + SOUND_ATTACK1 = "none"; + SOUND_ATTACK2 = "none"; + SOUND_ATTACK3 = "none"; + FREQ_ALERT = 120.0; + FREQ_VICTORY = 120.0; + FREQ_HEALER = 30.0; + FREQ_CRITICAL = 60.0; + MY_HP = 5000; + HALF_HP = 2500; + CHAT_DELAY = 4.0; + SOUND_ALLY_JUMP = "none"; + FOLLOW_RANGE_MIN = 64; + FOLLOW_RANGE_MAX = 256; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(15.0, 60.0)); + if ((GAVE_FIRST_POT)) + { + } + if ((false)) + { + int CANT_SHIELD_TARGET = 0; + if ((GetEntityProperty(m_hLastSeen, "haseffect"))) + { + int CANT_SHIELD_TARGET = 1; + } + if ((GetEntityProperty(m_hLastSeen, "scriptvar"))) + { + int CANT_SHIELD_TARGET = 1; + } + if (!(CANT_SHIELD_TARGET)) + { + SetMoveDest(m_hLastSeen); + PlayAnim("critical", "nod"); + ApplyEffect(m_hLastSeen, "effects/iceshield", 360, GetEntityIndex(GetOwner()), 0.5); + SendColoredMessage(m_hLastSeen, "Forsuth casts Ice Shield upon you."); + } + else + { + PlayAnim("critical", "nod"); + ApplyEffect(GetOwner(), "effects/iceshield", 360, GetEntityIndex(GetOwner()), 0.5); + } + } + else + { + PlayAnim("critical", "nod"); + ApplyEffect(GetOwner(), "effects/iceshield", 360, GetEntityIndex(GetOwner()), 0.5); + } + EmitSound(GetOwner(), 0, "magic/cast.wav", 10); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(10.0); + if ((BUSY_CHATTING)) + { + } + if (GetGameTime() > CHAT_OVERRIDE_TIME) + { + } + BUSY_CHATTING = 0; + CHAT_STEP = 0; + CHAT_STEPS = 0; + } + + void OnSpawn() override + { + SetName("Forsuth the Frosty"); + SetName("forsuth_frost"); + SetModel("dwarf/male1.mdl"); + SetHealth(MY_HP); + SetDamageResistance("all", 0.5); + SetDamageResistance("cold", 0.0); + SetWidth(32); + SetHeight(72); + SetHearingSensitivity(8); + SetRace("human"); + SetRoam(false); + SetSayTextRange(2048); + SetNoPush(true); + SetMoveSpeed(3.0); + SetAnimMoveSpeed(3.0); + BASE_MOVESPEED = 4.0; + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + CatchSpeech("say_seekers", "seekers"); + CatchSpeech("say_stairs", "card"); + SetModelBody(0, 0); + SetModelBody(1, 2); + SetModelBody(2, 1); + set_lantern(); + if (!(true)) return; + GAVE_POT_LIST = ""; + ScheduleDelayedEvent(90.0, "set_critical"); + NEXT_VICTORY = GetGameTime(); + NEXT_VICTORY += FREQ_VICTORY; + } + + void OnPostSpawn() override + { + SetStepSize(32); + } + + void set_critical() + { + FORSUTH_CRITICAL = 1; + } + + void OnDamage(int damage) override + { + if (!(DID_WRAITH_COMMENT)) + { + if ((GetEntityName(param1)).findFirst("Wrait") >= 0) + { + } + do_wraith_comment(); + } + if (GetEntityHealth(GetOwner()) < HALF_HP) + { + if (!(IsValidPlayer(param1))) + { + } + if (GetGameTime() > NEXT_HEALER) + { + } + NEXT_HEALER = GetGameTime(); + NEXT_HEALER += FREQ_HEALER; + int REQUESTED_HEALER = 1; + // PlayRandomSound from: SOUND_HEALER1, SOUND_HEALER2 + array sounds = {SOUND_HEALER1, SOUND_HEALER2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + if ((IsValidPlayer(param1))) + { + if (!(DID_FF_WARN)) + { + } + DID_FF_WARN = 1; + SayText("Woah there! Friendly dwarf comin' through!"); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/woah_there_friendly.wav", 10); + } + else + { + string MAX_HP = GetEntityMaxHealth(GetOwner()); + int RND_PAIN = RandomInt(1, MAX_HP); + if (RND_PAIN > MAX_HP) + { + if (!(REQUESTED_HEALER)) + { + } + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + if (!(REQUESTED_HEALER)) + { + } + if (RandomInt(1, 5) != 1) + { + // PlayRandomSound from: SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3 + array sounds = {SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3, SOUND_STRUCK1, SOUND_STRUCK2, SOUND_STRUCK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + else + { + // PlayRandomSound from: SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3 + array sounds = {SOUND_PAIN1, SOUND_PAIN2, SOUND_PAIN3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + } + NEXT_REGEN = GetGameTime(); + NEXT_REGEN += 10.0; + if ((FORSUTH_CRITICAL)) + { + } + if (GetGameTime() > NEXT_CRITICAL) + { + } + NEXT_CRITICAL = GetGameTime(); + NEXT_CRITICAL += FREQ_CRITICAL; + SendInfoMsg("all", "CRITICAL NPC UNDER ATTACK Forsuth the Frosty is under attack!"); + } + } + + void OnHuntTarget(CBaseEntity@ target) + { + CYCLCE_TIME = 0.1; + if (!(IsEntityAlive(PLAYER_FOLLOW))) + { + if ((IsEntityAlive(ALLY_FOLLOW_PLR_ID))) + { + } + PLAYER_FOLLOW = ALLY_FOLLOW_PLR_ID; + } + if (!(IsEntityAlive(ALLY_FOLLOW_PLR_ID))) + { + if ((IsEntityAlive(PLAYER_FOLLOW))) + { + } + ALLY_FOLLOW_PLR_ID = PLAYER_FOLLOW; + } + if ((TELEPORT_CHEAT)) + { + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + if (MY_Z < STAIR_TOP_Z) + { + } + if (GetGameTime() > NEXT_TELEPORT) + { + } + if (!(BUSY_CHATTING)) + { + } + if ((DID_INTRO)) + { + } + if (!(DID_END_EVENT)) + { + } + if (m_hAttackTarget == "unset") + { + } + if ((IsEntityAlive(PLAYER_FOLLOW))) + { + } + string L_PLR_ORG = GetEntityOrigin(PLAYER_FOLLOW); + string L_MY_ORG = GetEntityOrigin(GetOwner()); + if (Distance(L_MY_ORG, L_PLR_ORG) > 300) + { + } + basecompanion_catchup(); + } + if (!(DID_INTRO)) + { + if (m_hAttackTarget == "unset") + { + } + string NEAR_PLAYER = FindEntitiesInSphere("player", 256); + SetRoam(false); + NO_STUCK_CHECKS = 1; + if (NEAR_PLAYER != "none") + { + } + string NEAR_PLAYER = /* TODO: $sort_entlist */ $sort_entlist(NEAR_PLAYER, "range"); + PLAYER_CHAT = GetToken(NEAR_PLAYER, 0, ";"); + SetMoveDest(PLAYER_CHAT); + DID_INTRO = 1; + TELEPORT_CHEAT = 1; + do_intro(); + ALLY_FOLLOW_ON = 1; + } + if ((SUSPEND_AI)) return; + } + + void do_intro() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "do_intro"); + } + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Hail thar! I heard you were spotted goin into The Wall, so I took the shortcut from my house and wandered on down here."; + CHAT_SOUND1 = "voices/the_wall/forsuth/hail_there_i_heard_you.wav"; + CHAT_DELAY_STEP1 = 5.9; + CHAT_STEP2 = "Wanted to make sure ya'll were alright. Dangerous in here, but I guess you already figured that out, from the look of ye."; + CHAT_SOUND2 = "voices/the_wall/forsuth/wanted_to_make_sure.wav"; + CHAT_DELAY_STEP2 = 6.5; + CHAT_STEP3 = "Take this, it'll keep ya warm. Though, judging by the frost on yer armor, I think it might have done ya more good earlier."; + CHAT_SOUND3 = "voices/the_wall/forsuth/take_this_itll_keep_you.wav"; + CHAT_DELAY_STEP3 = 5.8; + CHAT_STEPS = 3; + CHAT_EVENT_STEP2 = "give_pot"; + string L_TOTAL_CHAT_TIME = CHAT_STEPS; + L_TOTAL_CHAT_TIME += 1; + L_TOTAL_CHAT_TIME *= CHAT_DELAY; + MAX_CHAT_TIME = L_TOTAL_CHAT_TIME; + chat_loop(); + } + + void give_pot() + { + GAVE_FIRST_POT = 1; + // TODO: offer PLAYER_CHAT drink_forsuth + GAVE_POT_LIST += PLAYER_CHAT; + CHAT_DELAY_STEP3("do_intro2"); + } + + void do_intro2() + { + SayText("Now, let's be gettin' out of here before anything too troublesome comes our way."); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/now_lets_be_getting.wav", 10); + PlayAnim("critical", "nod"); + SetRoam(false); + PLAYER_FOLLOW = PLAYER_CHAT; + } + + void game_menu_getoptions() + { + if ((PLAT_SUSPEND_MODE)) + { + npcatk_resume_ai(); + npcatk_resume_movement(); + SayText("Oh , sorry. Dozed off for a sec there."); + PLAT_SUSPEND_MODE = 0; + } + if (m_hAttackTarget != "unset") + { + string reg.mitem.title = "(In combat...)"; + string reg.mitem.type = "disabled"; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((BUSY_CHATTING)) + { + string reg.mitem.title = "(Talking...)"; + string reg.mitem.type = "disabled"; + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + EmitSound(GetOwner(), 0, SOUND_YES, 10); + PLAYER_FOLLOW = param1; + SetMoveDest(param1); + string reg.mitem.title = "Hail"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_hi"; + string reg.mitem.title = "Ask for Ale"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_ale"; + string reg.mitem.title = "About Seekers"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_seekers"; + if (param1 == QUEST_WINNER) + { + if (!(GAVE_REWARD)) + { + } + string SAYTEXT_STR = "Thar ye be, "; + SAYTEXT_STR += GetEntityName(QUEST_WINNER); + bchat_mouth_move(); + ScheduleDelayedEvent(3.0, "bchat_close_mouth"); + SayText(SAYTEXT_STR); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/there_ye_be_i_have.wav", 10); + string reg.mitem.title = "Get Reward"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "give_reward"; + } + } + + void give_reward() + { + GAVE_REWARD = 1; + string N_REWARDS_M1 = GetTokenCount(REWARD_LIST, ";"); + N_REWARDS_M1 -= 1; + int REWARD_IDX = RandomInt(0, N_REWARDS_M1); + string REWARD_ITEM = GetToken(REWARD_LIST, REWARD_IDX, ";"); + // TODO: offer PARAM1 REWARD_ITEM + if (REWARD_ITEM != "smallarms_rd") + { + SayText("Thar ya go! Somethin' for a fine warrior. Use it wisely."); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/there_you_go_something.wav", 10); + } + else + { + CHAT_STEP1 = "This here may not look like much, but I've a feeling it be special."; + CHAT_SOUND1 = "voices/the_wall/forsuth/now_this_here_might.wav"; + CHAT_DELAY_STEP1 = 4.5; + CHAT_STEP2 = "You'll be needin a more experienced smith than I to figure it out though."; + CHAT_SOUND2 = "voices/the_wall/forsuth/youll_be_needing.wav"; + CHAT_DELAY_STEP2 = 4.2; + CHAT_STEPS = 2; + string L_TOTAL_CHAT_TIME = CHAT_STEPS; + L_TOTAL_CHAT_TIME += 1; + L_TOTAL_CHAT_TIME *= CHAT_DELAY; + MAX_CHAT_TIME = L_TOTAL_CHAT_TIME; + chat_loop(); + } + bchat_mouth_move(); + ScheduleDelayedEvent(3.0, "bchat_close_mouth"); + } + + void say_hi() + { + if ((BUSY_CHATTING)) return; + EmitSound(GetOwner(), 0, SOUND_HI_ALT, 10); + CHAT_STEP1 = "Ya remember me, surely! Good ol' Forsuth the frosty, who lives up on the Frozen Summit!"; + ANIM_STEP1 = "nod"; + CHAT_SOUND1 = "voices/the_wall/forsuth/you_remember_me_surely.wav"; + CHAT_DELAY_STEP1 = 4.7; + CHAT_STEP2 = "Word got to me that you got hired by some [Seekers] at the entrance to The Wall."; + CHAT_SOUND2 = "voices/the_wall/forsuth/word_got_to_me_that.wav"; + CHAT_DELAY_STEP2 = 4.3; + CHAT_STEP3 = "Got me worried. So I came runnin just as fast as my stubby dwarf legs would carry me."; + CHAT_SOUND3 = "voices/the_wall/forsuth/got_me_worried_so.wav"; + CHAT_DELAY_STEP3 = 5.1; + CHAT_STEP4 = "Not that it looks as though you really need the help, mind ye."; + CHAT_SOUND4 = "voices/the_wall/forsuth/not_as_if_you_need_the.wav"; + CHAT_DELAY_STEP4 = 3.3; + CHAT_STEP5 = "But it never hurts to have an extra pair of hands on your side. Especially if those hands can wield some dwarven steel!"; + CHAT_SOUND5 = "voices/the_wall/forsuth/but_it_never_hurts_to.wav"; + CHAT_DELAY_STEP5 = 6.2; + CHAT_STEPS = 5; + string L_TOTAL_CHAT_TIME = CHAT_STEPS; + L_TOTAL_CHAT_TIME += 1; + L_TOTAL_CHAT_TIME *= CHAT_DELAY; + MAX_CHAT_TIME = L_TOTAL_CHAT_TIME; + chat_loop(); + } + + void say_ale() + { + if ((GAVE_POT_LIST).findFirst(param1) >= 0) + { + if (GetPlayerCount() > 1) + { + SayText("Sorry, I only brought enough for one for each of ye."); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/sorry_only_brought.wav", 10); + } + else + { + SayText("I brought more, actually, but me throte got parched along the way here and..."); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/i_brought_more_but_my.wav", 10); + } + } + else + { + // TODO: offer PARAM1 drink_forsuth + if (GAVE_POT_LIST.length() > 0) GAVE_POT_LIST += ";"; + GAVE_POT_LIST += param1; + SayText("Thar ya go, that'll keep you warm through narely anything."); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/there_ya_go_thatll_keep.wav", 10); + PlayAnim("critical", "nod"); + } + } + + void say_seekers() + { + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Those elves who hired you outside. Seekers they are. Bad news they can be."; + CHAT_SOUND1 = "voices/the_wall/forsuth/those_elves_that_hired.wav"; + CHAT_DELAY_STEP1 = 4.5; + CHAT_STEP2 = "They ain't evil, per-say, but they are rather... Methodical."; + CHAT_SOUND2 = "voices/the_wall/forsuth/they_aint_evil_per_se.wav"; + CHAT_DELAY_STEP2 = 4.2; + CHAT_STEP3 = "They believe in executing the letter of the law, but compassion and mercy ne'er enter into it."; + CHAT_SOUND3 = "voices/the_wall/forsuth/they_believe_in_executing.wav"; + CHAT_DELAY_STEP3 = 6.0; + CHAT_STEP4 = "Sometimes that makes them lose sight of the bigger picture, if you get my meaning."; + CHAT_SOUND4 = "voices/the_wall/forsuth/sometimes_that_makes.wav"; + CHAT_DELAY_STEP4 = 4.5; + CHAT_STEP5 = "Although I'm a dwarf, born of Urdual, and sworn to Him, first are foremost, I understand Torkalath."; + CHAT_SOUND5 = "voices/the_wall/forsuth/although_im_a_dwarf.wav"; + CHAT_DELAY_STEP5 = 6.8; + CHAT_STEP6 = "He values freedom, strength, and independence... And I've always been a bit too independent meself."; + CHAT_SOUND6 = "voices/the_wall/forsuth/he_values_freedom.wav"; + CHAT_DELAY_STEP6 = 5.9; + CHAT_STEP7 = "So, I kinda feel sorry for these 'Rammata' those zealots hunt so fanatically. Not that this lot wasn't mad..."; + CHAT_SOUND7 = "voices/the_wall/forsuth/so_i_kind_of_feel_sorry.wav"; + CHAT_DELAY_STEP7 = 7.2; + CHAT_STEP8 = "But if the Seekers showed some tolerance, they likely would not have become so."; + CHAT_DELAY_STEP8 = 5.0; + CHAT_STEP9 = "Anyways, I don't want to go near those Seekers, for fear they might catch onto me disposition, if ya catch me drift."; + CHAT_SOUND9 = "voices/the_wall/forsuth/anyway_i_dont_want_to.wav"; + CHAT_DELAY_STEP9 = 5.9; + CHAT_DELAY_STEP9 = ""; + ANIM_STEP9 = "nod"; + CHAT_STEPS = 9; + string L_TOTAL_CHAT_TIME = CHAT_STEPS; + L_TOTAL_CHAT_TIME += 1; + L_TOTAL_CHAT_TIME *= CHAT_DELAY; + MAX_CHAT_TIME = L_TOTAL_CHAT_TIME; + chat_loop(); + } + + void attack_1() + { + EmitSound(GetOwner(), 0, SOUND_SWING, 10); + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, DMG_SWING, ATTACK_HITCHANCE, "slash"); + if (!(RandomInt(1, 5) == 1)) return; + ANIM_ATTACK = "attack2"; + } + + void attack_2() + { + // PlayRandomSound from: SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3 + array sounds = {SOUND_ATTACK1, SOUND_ATTACK2, SOUND_ATTACK3}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + string L_DMG = DMG_SWING; + L_DMG *= 2; + DoDamage(m_hAttackTarget, ATTACK_HITRANGE, L_DMG, ATTACK_HITCHANCE, "slash"); + ANIM_ATTACK = "attack"; + ApplyEffect(m_hAttackTarget, "effects/debuff_stun", 10.0, GetEntityIndex(GetOwner())); + } + + void npcatk_clear_targets() + { + if (!(GetGameTime() > NEXT_VICTORY)) return; + NEXT_VICTORY = GetGameTime(); + NEXT_VICTORY += FREQ_VICTORY; + // PlayRandomSound from: SOUND_VICTORY1, SOUND_VICTORY2 + array sounds = {SOUND_VICTORY1, SOUND_VICTORY2}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void npc_targetsighted() + { + if (!(GetGameTime() > NEXT_ALERT)) return; + NEXT_ALERT = GetGameTime(); + NEXT_ALERT += FREQ_ALERT; + // PlayRandomSound from: SOUND_BATTLE_CRY1, SOUND_BATTLE_CRY2, SOUND_BATTLE_CRY3, SOUND_BATTLE_CRY4, SOUND_BATTLE_CRY5 + array sounds = {SOUND_BATTLE_CRY1, SOUND_BATTLE_CRY2, SOUND_BATTLE_CRY3, SOUND_BATTLE_CRY4, SOUND_BATTLE_CRY5}; + EmitSound(GetOwner(), 0, sounds[RandomInt(0, sounds.length() - 1)], 10); + } + + void ext_forsuth_mountain() + { + if ((DID_MOUNTAIN_COMMENT)) return; + DID_MOUNTAIN_COMMENT = 1; + ScheduleDelayedEvent(5.0, "ext_forsuth_mountain2"); + string FACE_TO = GetEntityOrigin(GetOwner()); + FACE_TO += /* TODO: $relpos */ $relpos(Vector3(0, 90, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_TO); + npcatk_suspend_ai(8.0); + npcatk_suspend_movement(ANIM_IDLE); + CHAT_STEP1 = "Them be the mountains surrounding The Bleak. Pretty they are... though deadly"; + ANIM_STEP1 = "nod"; + CHAT_SOUND1 = "voices/the_wall/forsuth/them_be_the_mountains.wav"; + CHAT_DELAY_STEP1 = 4.2; + CHAT_STEPS = 1; + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 15.0; + ALLY_NEXT_FAS_CHECK = GetGameTime(); + ALLY_NEXT_FAS_CHECK += 15.0; + string L_TOTAL_CHAT_TIME = CHAT_STEPS; + L_TOTAL_CHAT_TIME += 1; + L_TOTAL_CHAT_TIME *= CHAT_DELAY; + MAX_CHAT_TIME = L_TOTAL_CHAT_TIME; + chat_loop(); + } + + void ext_forsuth_mountain2() + { + npcatk_resume_movement(); + SayText("Oh well, enough gawkin' - let's be movin'."); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/enough_gawking.wav", 10); + } + + void ext_forsuth_morc() + { + CHAT_STEP1 = "Stupid bleedin Marogar orcs come down here, lookin' for lost elven treasure."; + CHAT_SOUND1 = "voices/the_wall/forsuth/stupid_bleedin_marogar.wav"; + CHAT_DELAY_STEP1 = 4.9; + CHAT_STEP2 = "Half of them wind up like that poor bloke there - rotting zombies."; + CHAT_SOUND2 = "voices/the_wall/forsuth/half_of_them_end_up_like.wav"; + CHAT_DELAY_STEP2 = 3.8; + CHAT_STEPS = 2; + string L_TOTAL_CHAT_TIME = CHAT_STEPS; + L_TOTAL_CHAT_TIME += 1; + L_TOTAL_CHAT_TIME *= CHAT_DELAY; + MAX_CHAT_TIME = L_TOTAL_CHAT_TIME; + chat_loop(); + } + + void ext_forsuth_undead() + { + if ((DID_UNDEAD_COMMENT)) return; + DID_UNDEAD_COMMENT = 1; + CHAT_STEP1 = "Well, will ye be lookin' at that! Orcs and undead, livin' together in harmony!"; + CHAT_SOUND1 = "voices/the_wall/forsuth/orcs_and_undead.wav"; + CHAT_DELAY_STEP1 = 4.8; + CHAT_STEP2 = "Well... Together, anyways..."; + CHAT_SOUND2 = "voices/the_wall/forsuth/well_together_anyways.wav"; + CHAT_DELAY_STEP2 = 2.4; + CHAT_STEPS = 2; + string L_TOTAL_CHAT_TIME = CHAT_STEPS; + L_TOTAL_CHAT_TIME += 1; + L_TOTAL_CHAT_TIME *= CHAT_DELAY; + MAX_CHAT_TIME = L_TOTAL_CHAT_TIME; + chat_loop(); + } + + void ext_forsuth_stairs() + { + if ((DID_STAIRS_COMMENT)) return; + DID_STAIRS_COMMENT = 1; + CHAT_STEP1 = "By Urdual's Beard! My poor stubby dwarven legs!"; + CHAT_SOUND1 = "voices/the_wall/forsuth/by_urduals_beard.wav"; + CHAT_DELAY_STEP1 = 5.1; + CHAT_STEP2 = "Ya'd think... The elves... Such skinny legged folk they be..."; + CHAT_SOUND2 = "voices/the_wall/forsuth/youd_think.wav"; + CHAT_DELAY_STEP2 = 6.2; + CHAT_STEP3 = "Would be less prone to building endless flights of stairs!"; + CHAT_SOUND3 = "voices/the_wall/forsuth/less_prone_to_building.wav"; + CHAT_DELAY_STEP3 = 6.1; + CHAT_STEPS = 3; + string L_TOTAL_CHAT_TIME = CHAT_STEPS; + L_TOTAL_CHAT_TIME += 1; + L_TOTAL_CHAT_TIME *= CHAT_DELAY; + MAX_CHAT_TIME = L_TOTAL_CHAT_TIME; + chat_loop(); + } + + void say_stairs() + { + if (!(DID_STAIRS_COMMENT)) return; + SayText("We got enough zombies to deal with without draggin' Bill and Francis into this!"); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/enough_zombies_to.wav", 10); + PlayAnim("critical", "nod"); + } + + void ext_forsuth_paint() + { + ScheduleDelayedEvent(3.0, "ext_forsuth_paint2"); + string FACE_TO = GetEntityOrigin(GetOwner()); + FACE_TO += /* TODO: $relpos */ $relpos(Vector3(0, 270, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_TO); + npcatk_suspend_ai(3.0); + npcatk_suspend_movement(ANIM_IDLE); + AS_ATTACKING = GetGameTime(); + AS_ATTACKING += 5.0; + ALLY_NEXT_FAS_CHECK = GetGameTime(); + ALLY_NEXT_FAS_CHECK += 5.0; + SayText("Now who'd go ruinin' a perflectly good paintin' of Felewyn like that?"); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/now_whod_go_ruining.wav", 10); + PlayAnim("critical", "nod"); + } + + void ext_forsuth_paint2() + { + npcatk_resume_movement(); + } + + void ext_forsuth_plat() + { + ScheduleDelayedEvent(40.0, "forsuth_plat_abort"); + ScheduleDelayedEvent(1.0, "forsuth_plat_loop"); + forsuth_plat_chatter(); + string FACE_TO = GetEntityOrigin(GetOwner()); + FACE_TO += /* TODO: $relpos */ $relpos(Vector3(0, 270, 0), Vector3(0, 1000, 0)); + SetMoveDest(FACE_TO); + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_IDLE); + } + + void forsuth_plat_loop() + { + if ((REACHED_TOP)) return; + ScheduleDelayedEvent(1.0, "forsuth_plat_loop"); + string ADJ_ORG = GetEntityOrigin(GetOwner()); + ADJ_ORG += "z"; + SetEntityOrigin(GetOwner(), ADJ_ORG); + } + + void forsuth_plat_chatter() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(1.0, "ext_forsuth_plat_chatter"); + } + if ((BUSY_CHATTING)) return; + CHAT_STEP1 = "Alright, here's the pullyworks..."; + CHAT_SOUND1 = "voices/the_wall/forsuth/alright_heres_the_pulleyworks.wav"; + CHAT_DELAY_STEP1 = 2.2; + CHAT_STEP2 = "Turn that wheel there, and it'll take us up the mountain to the surface."; + CHAT_SOUND2 = "voices/the_wall/forsuth/turn_that_wheel_there.wav"; + CHAT_DELAY_STEP2 = 3.5; + CHAT_STEPS = 2; + string L_TOTAL_CHAT_TIME = CHAT_STEPS; + L_TOTAL_CHAT_TIME += 1; + L_TOTAL_CHAT_TIME *= CHAT_DELAY; + MAX_CHAT_TIME = L_TOTAL_CHAT_TIME; + chat_loop(); + } + + void reached_top() + { + REACHED_TOP = 1; + } + + void forsuth_plat_abort() + { + UseTrigger("spawn_forsuth_extras"); + if ((REACHED_TOP)) return; + string L_TELEPORT_DEST = FindEntityByName("forsuth_teleport"); + string L_TELEPORT_DEST = GetEntityOrigin(L_TELEPORT_DEST); + SetEntityOrigin(GetOwner(), L_TELEPORT_DEST); + SayText("Don t ask me how I did that."); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/dont_ask_me_how.wav", 10); + REACHED_TOP = 1; + PLAT_SUSPEND_MODE = 1; + ScheduleDelayedEvent(120.0, "ext_forsuth_bye"); + } + + void ext_forsuth_reached_top() + { + ScheduleDelayedEvent(1.5, "reached_top"); + SayText("Top floor: seekers, undead elves, and lovely mountain vistas."); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/top_floor_seekers.wav", 10); + npcatk_resume_ai(); + npcatk_resume_movement(); + } + + void ext_forsuth_bye() + { + ALLY_FOLLOW_ON = 0; + TELEPORT_CHEAT = 0; + if ((DID_END_EVENT)) return; + DID_END_EVENT = 1; + CallExternal("players", "ext_clear_valid_gauntlets"); + npcatk_suspend_ai(); + npcatk_suspend_movement(ANIM_IDLE); + CHAT_STEP1 = "Alright, this is as far as I go."; + CHAT_SOUND1 = "voices/the_wall/forsuth/alright_this_is_as_far_as_i_go.wav"; + CHAT_DELAY_STEP1 = 2.5; + CHAT_STEP2 = "I don't blame you for working for the [Seekers]. They pay well..."; + CHAT_SOUND2 = "voices/the_wall/forsuth/i_dont_blame_you_for.wav"; + CHAT_DELAY_STEP2 = 3.8; + CHAT_STEP3 = "...but I don't want to be goin' anywhere near 'em, meself."; + CHAT_SOUND3 = "voices/the_wall/forsuth/but_i_dont_want_to_go.wav"; + CHAT_DELAY_STEP3 = 2.7; + CallExternal(GAME_MASTER, "gm_find_strongest_reset"); + QUEST_WINNER = GetEntityProperty(GAME_MASTER, "scriptvar"); + CHAT_STEP4 = "Send "; + CHAT_STEP4 += GetEntityName(QUEST_WINNER); + if (GetGender(QUEST_WINNER) == "male") + { + CHAT_STEP4 += " over yonder. He's done more than his share, and I've a reward for him."; + CHAT_SOUND4 = "voices/the_wall/forsuth/reward_reminder_male.wav"; + CHAT_DELAY_STEP4 = 4.5; + } + else + { + CHAT_STEP4 += " over yonder. The lass has done more than her share, and I've a reward for her."; + CHAT_SOUND4 = "voices/the_wall/forsuth/reward_reminder_female.wav"; + CHAT_DELAY_STEP4 = 5.1; + } + CHAT_STEPS = 4; + FACE_PLAYERS = 1; + string L_TOTAL_CHAT_TIME = CHAT_STEPS; + L_TOTAL_CHAT_TIME += 1; + L_TOTAL_CHAT_TIME *= CHAT_DELAY; + MAX_CHAT_TIME = L_TOTAL_CHAT_TIME; + chat_loop(); + SetSolid("none"); + } + + void ext_forsuth_follow_close() + { + LogDebug("ext_forsuth_follow_close"); + if ((TELEPORT_CHEAT)) return; + TELEPORT_CHEAT = 1; + teleport_cheat_loop(); + NO_STUCK_CHECKS = 1; + FOLLOW_RANGE_MIN = 48; + FOLLOW_RANGE_MAX = 64; + } + + void ext_forsuth_follow_norm() + { + TELEPORT_CHEAT = 0; + NO_STUCK_CHECKS = 0; + FOLLOW_RANGE_MIN = 64; + FOLLOW_RANGE_MAX = 256; + } + + void ext_unsolid() + { + SetSolid("none"); + } + + void chat_loop() + { + CHAT_OVERRIDE_TIME = GetGameTime(); + CHAT_OVERRIDE_TIME += MAX_CHAT_TIME; + } + + void basecompanion_catchup() + { + string L_POS = GetEntityOrigin(PLAYER_FOLLOW); + COMPANION_LR = GetEntityProperty(PLAYER_FOLLOW, "viewangles"); + string L_ANG = (COMPANION_LR).y; + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, L_ANG, 0), Vector3(0, -48, 0)); + string OLD_POS = GetEntityOrigin(GetOwner()); + SetEntityOrigin(GetOwner(), L_POS); + L_POS += /* TODO: $relpos */ $relpos(Vector3(0, 90, 0), Vector3(0, 16, 0)); + string reg.npcmove.endpos = L_POS; + int reg.npcmove.testonly = 1; + NpcMove(GetOwner(), PLAYER_FOLLOW); + NEXT_TELEPORT = GetGameTime(); + NEXT_TELEPORT += 3.0; + if (!("game.ret.npcmove.dist" <= 0)) return; + SetEntityOrigin(GetOwner(), OLD_POS); + NEXT_TELEPORT = 0; + } + + void do_wraith_comment() + { + DID_WRAITH_COMMENT = 1; + SayText("Blast! Wraiths! You ll need a holy weapon to even hit em!"); + EmitSound(GetOwner(), 0, "voices/the_wall/forsuth/blast_wraiths.wav", 10); + } + + void npcatk_settarget() + { + if (!((GetEntityName(m_hAttackTarget)).findFirst("Wraith") >= 0)) return; + if (!(DID_WRAITH_COMMENT)) + { + do_wraith_comment(); + } + } + +} + +} diff --git a/scripts/angelscript/the_wall/map_startup.as b/scripts/angelscript/the_wall/map_startup.as new file mode 100644 index 00000000..3054df96 --- /dev/null +++ b/scripts/angelscript/the_wall/map_startup.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "the_wall"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Wall by Skillasaur"); + SetGlobalVar("G_MAP_DESC", "Abandoned by the elves, this fortress is now a bastion for the undead."); + SetGlobalVar("G_MAP_DIFF", "Levels 40+ / 700+hp"); + SetGlobalVar("G_WARN_HP", 700); + } + + void game_newlevel() + { + string reg.texture.name = "reflective"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 0; + string reg.texture.reflect.color = "1;1;1;0.2"; + int reg.texture.reflect.range = 256; + int reg.texture.reflect.world = 1; + int reg.texture.reflect.ents = 1; + int reg.texture.water = 0; + // TODO: registertexture + } + +} + +} diff --git a/scripts/angelscript/the_wall/telf_leader1.as b/scripts/angelscript/the_wall/telf_leader1.as new file mode 100644 index 00000000..3c465909 --- /dev/null +++ b/scripts/angelscript/the_wall/telf_leader1.as @@ -0,0 +1,64 @@ +#pragma context server + +#include "monsters/telf_warrior_idagger.as" + +namespace MS +{ + +class TelfLeader1 : CGameScript +{ + int DID_INTRO; + int NPC_BASE_EXP; + int NPC_IS_BOSS; + int OVR_DROP_GOLD_AMT; + + TelfLeader1() + { + NPC_IS_BOSS = 1; + NPC_BASE_EXP = 5000; + OVR_DROP_GOLD_AMT = 5000; + SetGlobalVar("G_DID_ESCORT_ALERT", 0); + SetGlobalVar("G_ESCORT_ALERT_SAYTEXT", "Azura! The Felewyn seekers have sent humans after us!"); + } + + void elf_spawn() + { + SetName("Frostmistress Azura"); + SetHealth(6000); + SetDamageResistance("all", 0.5); + SetRace("torkie"); + SetModelBody(1, 6); + GiveItem(GetOwner(), "item_telfh1"); + SetSayTextRange(1024); + CatchSpeech("say_no", "elf"); + G_TELF_LEADER_COUNTER += 1; + } + + void say_no() + { + if (G_TELF_ESCORTS > 1) + { + SayText("Lies! Kill them! " + KILL + THEM + NOW!); + } + else + { + SayText("Lies! You'll not take any of us alive!"); + } + } + + void npc_targetsighted() + { + if (!(IsValidPlayer(m_hAttackTarget))) return; + if ((DID_INTRO)) return; + DID_INTRO = 1; + SayText("No! I'll not be taken back! Not even by humans!"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetGlobalVar("G_ESCORT_ALERT_SAYTEXT", "G_ESCORT_ALERT_SAYTEXT"); + } + +} + +} diff --git a/scripts/angelscript/the_wall/telf_leader2.as b/scripts/angelscript/the_wall/telf_leader2.as new file mode 100644 index 00000000..d6da83b7 --- /dev/null +++ b/scripts/angelscript/the_wall/telf_leader2.as @@ -0,0 +1,65 @@ +#pragma context server + +#include "monsters/telf_warrior_laxe.as" + +namespace MS +{ + +class TelfLeader2 : CGameScript +{ + int DID_INTRO; + int NPC_BASE_EXP; + int NPC_IS_BOSS; + int OVR_DROP_GOLD_AMT; + + TelfLeader2() + { + NPC_IS_BOSS = 1; + OVR_DROP_GOLD_AMT = 5000; + NPC_BASE_EXP = 5000; + SetGlobalVar("G_DID_ESCORT_ALERT", 0); + SetGlobalVar("G_ORC_ALERT", 1); + SetGlobalVar("G_ESCORT_ALERT_SAYTEXT", "Humans! Those fiends sent humans in after us!"); + } + + void elf_spawn() + { + SetName("Ulectrath the Storm"); + SetHealth(8000); + SetDamageResistance("all", 0.5); + SetRace("torkie"); + SetModelBody(1, 3); + GiveItem(GetOwner(), "item_telfh2"); + SetSayTextRange(1024); + CatchSpeech("say_no", "elf"); + G_TELF_LEADER_COUNTER += 1; + } + + void say_no() + { + if (G_TELF_ESCORTS > 1) + { + SayText("Lies! Kill them! " + KILL + THEM + NOW!); + } + else + { + SayText("Lies! You'll not take any of us alive!"); + } + } + + void npc_targetsighted() + { + if (!(IsValidPlayer(m_hAttackTarget))) return; + if ((DID_INTRO)) return; + DID_INTRO = 1; + SayText("How dare you betray your father Torkalath with the stench of Felewyn!"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetGlobalVar("G_ESCORT_ALERT_SAYTEXT", "G_ESCORT_ALERT_SAYTEXT"); + } + +} + +} diff --git a/scripts/angelscript/the_wall/telf_leader3.as b/scripts/angelscript/the_wall/telf_leader3.as new file mode 100644 index 00000000..886d57b2 --- /dev/null +++ b/scripts/angelscript/the_wall/telf_leader3.as @@ -0,0 +1,71 @@ +#pragma context server + +#include "monsters/telf_warrior_fmace_dshield.as" + +namespace MS +{ + +class TelfLeader3 : CGameScript +{ + string ANIM_ATTACK; + int DID_INTRO; + int NPC_BASE_EXP; + int NPC_IS_BOSS; + int OVR_DROP_GOLD_AMT; + + TelfLeader3() + { + NPC_IS_BOSS = 1; + OVR_DROP_GOLD_AMT = 5000; + NPC_BASE_EXP = 5000; + SetGlobalVar("G_DID_ESCORT_ALERT", 0); + SetGlobalVar("G_ESCORT_ALERT_SAYTEXT", "Treachery! Children of Torkalath slaved to the will of Felewyn!"); + } + + void elf_spawn() + { + SetName("Ivicta of the Hammer"); + SetHealth(8000); + SetDamageResistance("all", 0.5); + SetRace("torkie"); + SetModelBody(1, 2); + SetModelBody(2, 1); + GiveItem(GetOwner(), "item_telfh3"); + SetSayTextRange(1024); + CatchSpeech("say_no", "elf"); + G_TELF_LEADER_COUNTER += 1; + } + + void OnPostSpawn() override + { + ANIM_ATTACK = "swordswing1_R"; + } + + void say_no() + { + if (G_TELF_ESCORTS > 1) + { + SayText("Lies! Kill them! " + KILL + THEM + NOW!); + } + else + { + SayText("Lies! You'll not take any of us alive!"); + } + } + + void npc_targetsighted() + { + if (!(IsValidPlayer(m_hAttackTarget))) return; + if ((DID_INTRO)) return; + DID_INTRO = 1; + SayText("Kray Eldorad shall fall!"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SetGlobalVar("G_ESCORT_ALERT_SAYTEXT", "G_ESCORT_ALERT_SAYTEXT"); + } + +} + +} diff --git a/scripts/angelscript/the_wall/telf_necro.as b/scripts/angelscript/the_wall/telf_necro.as new file mode 100644 index 00000000..990f6578 --- /dev/null +++ b/scripts/angelscript/the_wall/telf_necro.as @@ -0,0 +1,224 @@ +#pragma context server + +#include "monsters/elf_wizard_base.as" + +namespace MS +{ + +class TelfNecro : CGameScript +{ + string ANIM_ATTACK; + string AS_ATTACKING; + int ATTACK_HITRANGE; + int ATTACK_MOVERANGE; + int ATTACK_RANGE; + int BARRIER_ON; + int BARRIER_RAD; + string BARRIER_TARGS; + int CYCLES_ON; + int DMG_BARRIER; + int ELF_BEAM_ATTACK; + string ELF_BEAM_COLOR; + int ELF_BEAM_DMG; + string ELF_BEAM_DMG_TYPE; + int ELF_BEAM_DOT; + float ELF_BEAM_DUR; + string ELF_BEAM_EFFECT; + string ELF_BEAM_PUSH_VEL; + int ELF_BEAM_RANGE; + float FREQ_BARRIER; + float FREQ_BEAM_CHANGE; + string NEXT_BARRIER; + string NExT_BEAM_CHANGE; + string NPC_GIVE_EXP; + string NPC_IS_BOSS; + int NPC_RETURN_HOME; + float RETALIATE_CHANCE; + string SOUND_BARRIER_RAISE; + string SOUND_BARRIER_REPELL; + string SOUND_BEAM_LOOP_FROST; + string SOUND_BEAM_LOOP_HOLD; + string SOUND_BEAM_LOOP_LIGHTNING; + + TelfNecro() + { + FREQ_BARRIER = 30.0; + DMG_BARRIER = 200; + BARRIER_RAD = 96; + FREQ_BEAM_CHANGE = Random(10.0, 20.0); + ELF_BEAM_RANGE = 1024; + RETALIATE_CHANCE = 0.1; + if (StringToLower(GetMapName()) == "the_wall") + { + NPC_GIVE_EXP = 15000; + NPC_IS_BOSS = 1; + } + else + { + NPC_GIVE_EXP = 5000; + } + NPC_RETURN_HOME = 1; + SOUND_BEAM_LOOP_HOLD = "ambience/dronemachine1.wav"; + SOUND_BEAM_LOOP_LIGHTNING = "magic/bolt_loop.wav"; + SOUND_BEAM_LOOP_FROST = "magic/freezeray_loop.wav"; + SOUND_BARRIER_RAISE = "magic/spawn.wav"; + SOUND_BARRIER_REPELL = "doors/aliendoor3.wav"; + } + + void game_precache() + { + Precache(SOUND_BEAM_LOOP_HOLD); + Precache(SOUND_BEAM_LOOP_LIGHTNING); + Precache(SOUND_BEAM_LOOP_FROST); + } + + void elf_spawn() + { + GiveItem(GetOwner(), "item_telfh4"); + SetName("Ihotohr"); + SetHealth(10000); + SetRace("necro"); + SetDamageResistance("all", 0.5); + SetDamageResistance("holy", 1.0); + SetSayTextRange(2048); + SetModelBody(1, 1); + SetProp(GetOwner(), "skin", 5); + } + + void OnPostSpawn() override + { + ELF_BEAM_DMG = 300; + ELF_BEAM_DOT = 100; + ELF_BEAM_DMG_TYPE = "lightning"; + ELF_BEAM_PUSH_VEL = /* TODO: $relvel */ $relvel(0, 300, 110); + ELF_BEAM_DUR = 5.0; + ELF_BEAM_ATTACK = 1; + ELF_BEAM_COLOR = Vector3(255, 255, 0); + ELF_BEAM_EFFECT = "effects/dot_lightning"; + ANIM_ATTACK = "ref_shoot_crowbar"; + ATTACK_RANGE = 64; + ATTACK_HITRANGE = 120; + ATTACK_MOVERANGE = 512; + } + + void cycle_up() + { + if ((CYCLES_ON)) return; + CYCLES_ON = 1; + SayText("Ah , fresh corpses..."); + PlayAnim("critical", "ref_shoot_trip"); + UseTrigger("spawn_aod"); + AS_ATTACKING = GetGameTime(); + float GAME_TIME = GetGameTime(); + NEXT_BARRIER = GAME_TIME; + NEXT_BARRIER += FREQ_BARRIER; + NExT_BEAM_CHANGE = GAME_TIME; + NEXT_BEAM_CHANGE += FREQ_BEAM_CHANGE; + } + + void OnHuntTarget(CBaseEntity@ target) + { + float GAME_TIME = GetGameTime(); + if (GAME_TIME > NEXT_BEAM_CHANGE) + { + if (!(ELF_BEAM_ON)) + { + } + RND_BEAM += 1; + if (RND_BEAM > 3) + { + RND_BEAM = 1; + } + if (RND_BEAM == 1) + { + ELF_BEAM_COLOR = Vector3(255, 255, 0); + ELF_BEAM_SPECIAL = "none"; + ELF_BEAM_DMG_TYPE = "lightning"; + ELF_BEAM_EFFECT = "effects/dot_lightning"; + ELF_BEAM_PUSH_VEL = /* TODO: $relvel */ $relvel(0, 400, 110); + ELF_BEAM_DMG = 300; + ELF_BEAM_DOT = 100; + SOUND_ELF_BEAM_LOOP = SOUND_BEAM_LOOP_LIGHTNING; + } + if (RND_BEAM == 2) + { + ELF_BEAM_COLOR = Vector3(128, 128, 255); + ELF_BEAM_SPECIAL = "none"; + ELF_BEAM_DMG_TYPE = "cold"; + ELF_BEAM_EFFECT = "effects/dot_cold"; + ELF_BEAM_PUSH_VEL = /* TODO: $relvel */ $relvel(0, 400, 110); + ELF_BEAM_DMG = 100; + ELF_BEAM_DOT = 50; + SOUND_ELF_BEAM_LOOP = SOUND_BEAM_LOOP_FROST; + } + if (RND_BEAM == 3) + { + ELF_BEAM_COLOR = Vector3(255, 0, 0); + ELF_BEAM_SPECIAL = "hold_person"; + ELF_BEAM_DMG_TYPE = "magic"; + ELF_BEAM_EFFECT = "effects/debuff_hold"; + ELF_BEAM_PUSH_VEL = /* TODO: $relvel */ $relvel(0, 0, 0); + ELF_BEAM_DMG = 50; + ELF_BEAM_DOT = 0; + SOUND_ELF_BEAM_LOOP = SOUND_BEAM_LOOP_HOLD; + } + } + if (!(m_hAttackTarget != "unset")) return; + if (!(GAME_TIME > NEXT_BARRIER)) return; + NEXT_BARRIER = GAME_TIME; + NEXT_BARRIER += FREQ_BARRIER; + do_barrier(); + } + + void elf_beam_special() + { + ApplyEffect(param1, "effects/debuff_hold", 10.0); + } + + void do_barrier() + { + EmitSound(GetOwner(), 0, SOUND_BARRIER_RAISE, 10); + SetModelBody(2, 1); + BARRIER_ON = 1; + ScheduleDelayedEvent(20.0, "end_barrier"); + barrier_loop(); + } + + void end_barrier() + { + BARRIER_ON = 0; + SetModelBody(2, 0); + EmitSound(GetOwner(), 0, SOUND_BARRIER_RAISE, 10); + } + + void barrier_loop() + { + if (!(BARRIER_ON)) return; + ScheduleDelayedEvent(0.5, "barrier_loop"); + BARRIER_TARGS = FindEntitiesInSphere("enemy", BARRIER_RAD); + if (!(BARRIER_TARGS != "none")) return; + EmitSound(GetOwner(), 0, SOUND_BARRIER_REPELL, 10); + for (int i = 0; i < GetTokenCount(BARRIER_TARGS, ";"); i++) + { + barrier_affect_targets(); + } + } + + void barrier_affect_targets() + { + string CUR_TARG = GetToken(BARRIER_TARGS, i, ";"); + string TARG_ORG = GetEntityOrigin(CUR_TARG); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARG_ORG); + SetVelocity(CUR_TARG, /* TODO: $relvel */ $relvel(Vector3(0, TARG_ANG, 0), Vector3(10, 1000, 0))); + DoDamage(CUR_TARG, "direct", DMG_BARRIER, 1.0, GetOwner()); + } + + void OnDeath(CBaseEntity@ attacker) override + { + SayText("Death... Awaits you... Beyond the door..."); + SetModelBody(2, 0); + } + +} + +} diff --git a/scripts/angelscript/the_wall/trigger_forsuth_mountains.as b/scripts/angelscript/the_wall/trigger_forsuth_mountains.as new file mode 100644 index 00000000..1f138c7a --- /dev/null +++ b/scripts/angelscript/the_wall/trigger_forsuth_mountains.as @@ -0,0 +1,25 @@ +#pragma context server + +namespace MS +{ + +class TriggerForsuthMountains : CGameScript +{ + TriggerForsuthMountains() + { + SetCallback("touch", "enable"); + } + + void OnTouch(CBaseEntity@ other) override + { + string FROSTY_ID = FindEntityByName("forsuth_frosty"); + LogDebug("forsuth_trigger FROSTY_ID vs PARAM1"); + if (!(GetEntityIndex(param1) == FindEntityByName("forsuth_frosty"))) return; + LogDebug("forsuth_trigger Go frosty!"); + CallExternal(param1, "ext_mountain_comment"); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/the_wall2/map_startup.as b/scripts/angelscript/the_wall2/map_startup.as new file mode 100644 index 00000000..096cd283 --- /dev/null +++ b/scripts/angelscript/the_wall2/map_startup.as @@ -0,0 +1,40 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "the_wall2"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "The Wall by Skillasaur"); + SetGlobalVar("G_MAP_DESC", "Abandoned by the elves, this fortress is now a bastion for the undead."); + SetGlobalVar("G_MAP_DIFF", "Levels 40+ / 700+hp"); + SetGlobalVar("G_WARN_HP", 700); + } + + void game_newlevel() + { + string reg.texture.name = "reflective"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 0; + string reg.texture.reflect.color = "1;1;1;0.2"; + int reg.texture.reflect.range = 256; + int reg.texture.reflect.world = 1; + int reg.texture.reflect.ents = 1; + int reg.texture.water = 0; + // TODO: registertexture + } + +} + +} diff --git a/scripts/angelscript/thornlands/map_startup.as b/scripts/angelscript/thornlands/map_startup.as new file mode 100644 index 00000000..c9b7d31e --- /dev/null +++ b/scripts/angelscript/thornlands/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "thornlands"; + MAP_WEATHER = "clear;clear;clear;storm;clear;rain"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "The Thornlands"); + SetGlobalVar("G_MAP_DESC", "These untamed plains and mesas form crossroads to many lands"); + SetGlobalVar("G_MAP_DIFF", "Levels 5-10 / 35-150hp"); + SetGlobalVar("G_WARN_HP", 35); + } + +} + +} diff --git a/scripts/angelscript/thornlands_north/amaex.as b/scripts/angelscript/thornlands_north/amaex.as new file mode 100644 index 00000000..4a34e5ae --- /dev/null +++ b/scripts/angelscript/thornlands_north/amaex.as @@ -0,0 +1,88 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat_array.as" +#include "monsters/base_npc_vendor.as" +#include "monsters/base_npc_vendor_confirm.as" +#include "monsters/base_xmass.as" + +namespace MS +{ + +class Amaex : CGameScript +{ + int NO_HAIL; + int NO_JOB; + int SPOKE; + string STORE_NAME; + int STORE_SELLMENU; + string STORE_TRIGGERTEXT; + int XMASS_OLD_GUY; + + Amaex() + { + STORE_NAME = "healer2"; + STORE_TRIGGERTEXT = "store trade buy sell purchase sale offer"; + STORE_SELLMENU = 1; + NO_JOB = 1; + NO_HAIL = 1; + XMASS_OLD_GUY = 1; + } + + void OnRepeatTimer() + { + SetRepeatDelay(25); + CanSee("player"); + chat_now("Greetings, need healing?", 1.0); + } + + void OnSpawn() override + { + SetName("Amaex the Mage"); + SetHealth(100); + SetWidth(32); + SetHeight(72); + SetRace("human"); + SetRoam(false); + SetModel("npc/balancepriest1.mdl"); + SetInvincible(true); + CatchSpeech("say_island", "island"); + } + + void vendor_addstoreitems() + { + AddStoreItem(STORE_NAME, "health_mpotion", 30, 100); + AddStoreItem(STORE_NAME, "health_lpotion", 30, 100); + if (RandomInt(1, 10) == 1) + { + AddStoreItem(STORE_NAME, "mana_protection", 2, 150, 0.1); + } + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORE_NAME, "health_spotion", 3, 100); + AddStoreItem(STORE_NAME, "scroll2_fire_dart", 1, 200); + AddStoreItem(STORE_NAME, "scroll2_lightning_weak", 1, 200); + } + AddStoreItem(STORE_NAME, "scroll2_rejuvenate", 1, 400); + AddStoreItem(STORE_NAME, "item_crystal_return", 1, RandomInt(100, 200), 0.3); + bs_epic_item(); + } + + void speech_nightmare_thornlands() + { + if ((SPOKE)) return; + chat_now("Hail Adventurer! Welcome to my... eh- failed experiment.", 7, "sound:voices/thornlands_north/amaex1.wav"); + chat_now("I've been attempting to discover a better method of teleportation.", 5, "sound:voices/thornlands_north/amaex2.wav"); + chat_now("It's gone wrong however. And I cannot seem to dispel it.", 5, "sound:voices/thornlands_north/amaex3.wav"); + chat_now("I'll try and tell you to stay away, but I know how you adventurers think.", 6.0, "sound:voices/thornlands_north/amaex4.wav", "open_portal"); + SPOKE = 1; + } + + void open_portal() + { + UseTrigger("Nightmare_Wall"); + } + +} + +} diff --git a/scripts/angelscript/thornlands_north/bandit_trap_disarmed.as b/scripts/angelscript/thornlands_north/bandit_trap_disarmed.as new file mode 100644 index 00000000..3b2e0265 --- /dev/null +++ b/scripts/angelscript/thornlands_north/bandit_trap_disarmed.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "monsters/bandit_hard_random.as" + +namespace MS +{ + +class BanditTrapDisarmed : CGameScript +{ + void OnSpawn() override + { + ScheduleDelayedEvent(0.1, "thorny"); + SetSayTextRange(500); + } + + void thorny() + { + SetName("Thornlands Bandit"); + SayText("The traps been disarmed? How?!"); + EmitSound(GetOwner(), 0, "voices/thornlands_north/shifty4.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/thornlands_north/bgoblin_apple.as b/scripts/angelscript/thornlands_north/bgoblin_apple.as new file mode 100644 index 00000000..7d89a1f2 --- /dev/null +++ b/scripts/angelscript/thornlands_north/bgoblin_apple.as @@ -0,0 +1,68 @@ +#pragma context server + +#include "m2_quest/bgoblin_weak.as" + +namespace MS +{ + +class BgoblinApple : CGameScript +{ + void OnSpawn() override + { + ScheduleDelayedEvent(2.0, "start_apple_chatter"); + SetSayTextRange(900); + } + + void start_apple_chatter() + { + if (!(APPLE_CHATTER)) + { + SetName("Blood Goblin"); + SayText("You took an apple?? Apple is worthless!"); + EmitSound(GetOwner(), 0, "voices/thornlands_north/gobapple1.wav", 10); + ScheduleDelayedEvent(4, "start_apple_chatter"); + } + else + { + if (APPLE_CHATTER == 1) + { + SetName("Goblin Needler"); + SayText("A human had this apple, it must be valuable."); + EmitSound(GetOwner(), 0, "voices/thornlands_north/gobapple2.wav", 10); + ScheduleDelayedEvent(4, "start_apple_chatter"); + } + else + { + if (APPLE_CHATTER == 2) + { + SetName("Blood Goblin"); + SayText("A human picked this apple from a TREE!"); + EmitSound(GetOwner(), 0, "voices/thornlands_north/gobapple3.wav", 10); + ScheduleDelayedEvent(3, "start_apple_chatter"); + } + else + { + if (APPLE_CHATTER == 3) + { + SetName("Goblin Needler"); + SayText("Show me trees with apples. I've seen none!"); + EmitSound(GetOwner(), 0, "voices/thornlands_north/gobapple4.wav", 10); + ScheduleDelayedEvent(4, "start_apple_chatter"); + } + else + { + if (APPLE_CHATTER == 4) + { + SetName("Blood Goblin"); + UseTrigger("gobwall2stop"); + } + } + } + } + } + APPLE_CHATTER += 1; + } + +} + +} diff --git a/scripts/angelscript/thornlands_north/orcboss.as b/scripts/angelscript/thornlands_north/orcboss.as new file mode 100644 index 00000000..32ae6425 --- /dev/null +++ b/scripts/angelscript/thornlands_north/orcboss.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "monsters/orcflayer.as" + +namespace MS +{ + +class Orcboss : CGameScript +{ + void OnSpawn() override + { + ScheduleDelayedEvent(0.1, "thorny"); + SetSayTextRange(1000); + } + + void thorny() + { + SetName("|Vakgar the Guardian"); + SayText("What's going on here? Humans!? Destroy them!"); + EmitSound(GetOwner(), 0, "voices/thornlands_north/orcforboss.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/thornlands_north/shifty_commoner.as b/scripts/angelscript/thornlands_north/shifty_commoner.as new file mode 100644 index 00000000..30aacd23 --- /dev/null +++ b/scripts/angelscript/thornlands_north/shifty_commoner.as @@ -0,0 +1,55 @@ +#pragma context server + +#include "deralia/commoner.as" + +namespace MS +{ + +class ShiftyCommoner : CGameScript +{ + void OnSpawn() override + { + ScheduleDelayedEvent(2.0, "start_shifty"); + SetSayTextRange(900); + } + + void start_shifty() + { + SetRoam(false); + if (!(CHATTER)) + { + SayText("Hey, you look like an adventurer. Come here."); + EmitSound(GetOwner(), 0, "voices/thornlands_north/shifty1.wav", 10); + ScheduleDelayedEvent(4.5, "start_shifty"); + } + else + { + if (CHATTER == 1) + { + SayText("I left some... valuable... items in a secret cave near those bears."); + EmitSound(GetOwner(), 0, "voices/thornlands_north/shifty2.wav", 10); + ScheduleDelayedEvent(5.7, "start_shifty"); + } + else + { + if (CHATTER == 2) + { + SayText("You NEED to help me get them back. You will be... well rewarded."); + EmitSound(GetOwner(), 0, "voices/thornlands_north/shifty3.wav", 10); + ScheduleDelayedEvent(8, "start_shifty"); + } + else + { + if (CHATTER == 3) + { + UseTrigger("WallBlock11"); + } + } + } + } + CHATTER += 1; + } + +} + +} diff --git a/scripts/angelscript/thornlands_north/tomb_guardian.as b/scripts/angelscript/thornlands_north/tomb_guardian.as new file mode 100644 index 00000000..37b25b96 --- /dev/null +++ b/scripts/angelscript/thornlands_north/tomb_guardian.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "calruin/corpse_once.as" + +namespace MS +{ + +class TombGuardian : CGameScript +{ + void OnSpawn() override + { + ScheduleDelayedEvent(0.1, "thorny"); + SetSayTextRange(1000); + } + + void thorny() + { + SetName("Guardian of the Tomb"); + SayText("We protect our Master with our unlives, you shall not disturb his torpor."); + EmitSound(GetOwner(), 0, "voices/thornlands_north/wwprotector.wav", 10); + } + +} + +} diff --git a/scripts/angelscript/titles.as b/scripts/angelscript/titles.as new file mode 100644 index 00000000..62417313 --- /dev/null +++ b/scripts/angelscript/titles.as @@ -0,0 +1,68 @@ +#pragma context server + +namespace MS +{ + +class Titles : CGameScript +{ + int SK_LVL1_MIN; + int SK_LVL2_MIN; + string TITLE_MINSKILL; + + Titles() + { + SK_LVL1_MIN = 4; + SK_LVL2_MIN = 10; + // TODO: registertitle Adventurer + TITLE_MINSKILL = SK_LVL1_MIN; + // TODO: registertitle Swordsman swordsmanship + // TODO: registertitle Martial Artist martialarts + // TODO: registertitle Rogue smallarms + // TODO: registertitle Barbarian axehandling + // TODO: registertitle Basher bluntarms + // TODO: registertitle Marksman archery + // TODO: registertitle Caster spellcasting + // TODO: registertitle Lineman polearms + TITLE_MINSKILL = SK_LVL2_MIN; + // TODO: registertitle Sword Master swordsmanship + // TODO: registertitle Kickboxer martialarts + // TODO: registertitle Thief smallarms + // TODO: registertitle Titan axehandling + // TODO: registertitle Basher bluntarms + // TODO: registertitle Marksman archery + // TODO: registertitle Mage spellcasting + // TODO: registertitle Pikeman polearms + TITLE_MINSKILL = SK_LVL1_MIN; + // TODO: registertitle Assassin swordsmanship;martialarts + // TODO: registertitle Blademaster swordsmanship;smallarms + // TODO: registertitle Knight swordsmanship;axehandling + // TODO: registertitle Cavalier swordsmanship;bluntarms + // TODO: registertitle Ranger swordsmanship;archery + // TODO: registertitle Blade Caster swordsmanship;spellcasting + // TODO: registertitle Line Defender swordsmanship;polearms + // TODO: registertitle Mercenary martialarts;smallarms + // TODO: registertitle Punisher martialarts;axehandling + // TODO: registertitle Mercenary martialarts;bluntarms + // TODO: registertitle Archer martialarts;archery + // TODO: registertitle Aikido Master martialarts;spellcasting + // TODO: registertitle Monk martialarts;polearms + // TODO: registertitle Thrasher smallarms;axehandling + // TODO: registertitle Thug smallarms;bluntarms + // TODO: registertitle Shadow Archer smallarms;archery + // TODO: registertitle Shadow Weaver smallarms;spellcasting + // TODO: registertitle Shadow Hand smallarms;polearms + // TODO: registertitle Berserker axehandling;bluntarms + // TODO: registertitle Hatcheteer axehandling;archery + // TODO: registertitle Battlemage axehandling;spellcasting + // TODO: registertitle Reaper axehandling;polearms + // TODO: registertitle Hardy Archer bluntarms;archery + // TODO: registertitle Zauberei Basher bluntarms;spellcasting + // TODO: registertitle Titan bluntarms;polearms + // TODO: registertitle Archer Arcana archery;spellcasting + // TODO: registertitle Line Archer archery;polearms + // TODO: registertitle Magic Staff spellcasting;polearms + } + +} + +} diff --git a/scripts/angelscript/traps/circle_of_death1.as b/scripts/angelscript/traps/circle_of_death1.as new file mode 100644 index 00000000..8eaa7d62 --- /dev/null +++ b/scripts/angelscript/traps/circle_of_death1.as @@ -0,0 +1,184 @@ +#pragma context server + +#include "monsters/debug.as" + +namespace MS +{ + +class CircleOfDeath1 : CGameScript +{ + string CIRCLE_DMG_TYPE; + string CIRCLE_END; + int CIRCLE_RAD; + int CL_BODY; + string CL_DUR; + int CL_RAD; + string DMG_PULSE; + int IS_ACTIVE; + int NPC_DIE_ON_SPAWN_REMOVAL; + int PLAYING_DEAD; + int SKEL_RESPAWN_TIMES; + string SOUND_LOOP; + + CircleOfDeath1() + { + CIRCLE_RAD = 90; + CL_BODY = 3; + CL_RAD = 98; + CIRCLE_DMG_TYPE = "dark_effect"; + SOUND_LOOP = "ambience/pulsemachine.wav"; + } + + void OnSpawn() override + { + SetName("Circle of Death"); + SetInvincible(true); + SetNoPush(true); + SetSolid("none"); + SetRace("undead"); + PLAYING_DEAD = 1; + IS_ACTIVE = 1; + ScheduleDelayedEvent(0.5, "circle_loop"); + } + + void game_postspawn() + { + if ((param4).length() < 2) + { + int L_AUTO_SET = 1; + } + if (param4 == "PARAM4") + { + int L_AUTO_SET = 1; + } + if ((L_AUTO_SET)) + { + DMG_PULSE = "auto"; + CIRCLE_END = 10.0; + } + else + { + DMG_PULSE = GetToken(param4, 0, ";"); + CIRCLE_END = GetToken(param4, 1, ";"); + } + LogDebug("game_postspawn L_AUTO_SET DMG_PULSE CIRCLE_END"); + if (CIRCLE_END <= 0) + { + CIRCLE_END = 9999; + } + CL_DUR = CIRCLE_END; + CIRCLE_END += GetGameTime(); + NPC_DIE_ON_SPAWN_REMOVAL = 1; + } + + void game_dynamically_created() + { + DMG_PULSE = "auto"; + CIRCLE_END = 10.0; + CL_DUR = CIRCLE_END; + CIRCLE_END += GetGameTime(); + } + + void circle_loop() + { + if ((IS_ACTIVE)) + { + ScheduleDelayedEvent(1.0, "circle_loop"); + } + if (!(IsEntityAlive(GetOwner()))) return; + string L_DMG_PULSE = DMG_PULSE; + if (DMG_PULSE == "auto") + { + string L_DMG_PULSE = "game.players.totalhp"; + L_DMG_PULSE /= GetPlayerCount(); + L_DMG_PULSE *= 0.1; + LogDebug("circle_loop auto L_DMG_PULSE CIRCLE_POS"); + } + string L_DMG_POINT = CIRCLE_POS; + L_DMG_POINT += "z"; + XDoDamage(L_DMG_POINT, CIRCLE_RAD, L_DMG_PULSE, 0, GetOwner(), GetOwner(), "none", CIRCLE_DMG_TYPE); + if (GetGameTime() > CIRCLE_END) + { + npc_suicide(); + } + else + { + if (GetGameTime() > NEXT_CL_UPDATE) + { + // svplaysound: svplaysound 1 10 SOUND_LOOP + EmitSound(1, 10, SOUND_LOOP); + CIRCLE_POS = GetEntityOrigin(GetOwner()); + CIRCLE_POS = "z"; + ClientEvent("persist", "all", "effects/sfx_cod", CIRCLE_POS, CL_DUR, CL_BODY, CL_RAD); + CL_IDX = "game.script.last_sent_id"; + NEXT_CL_UPDATE = GetGameTime(); + NEXT_CL_UPDATE += CL_DUR; + } + } + } + + void OnDeath(CBaseEntity@ attacker) override + { + IS_ACTIVE = 0; + ClientEvent("update", "all", CL_IDX, "end_fx"); + // svplaysound: svplaysound 1 0 SOUND_LOOP + EmitSound(1, 0, SOUND_LOOP); + } + + void npc_suicide() + { + if (!(IsEntityAlive(GetOwner()))) return; + if ((I_R_COMPANION)) return; + float SINCE_SPAWN = GetGameTime(); + SINCE_SPAWN -= NPC_SPAWN_TIME; + if (SINCE_SPAWN < 2.0) + { + if (param1 == "dienow") + { + SetAnimFrameRate(0); + SetAnimMoveSpeed(0); + NPC_OVERRIDE_DEATH = 1; + DeleteEntity(GetOwner(), true); // fade out + int EXIT_SUB = 1; + } + else + { + NPC_QUED_FOR_DEATH = 1; + ScheduleDelayedEvent(2.1, "npc_suicide"); + LogDebug("npc_suicide - not_ready_to_die - qued for death"); + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (param1 == "no_pets") + { + if ((I_R_PET)) + { + } + int EXIT_SUB = 1; + } + if (param1 == "only_bad") + { + if (GetEntityRace(GetOwner()) == "human") + { + int EXIT_SUB = 1; + } + if (GetEntityRace(GetOwner()) == "hguard") + { + int EXIT_SUB = 1; + } + if (GetEntityRace(GetOwner()) == "beloved") + { + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + SetInvincible(false); + SetRace("hated"); + SKEL_RESPAWN_TIMES = 99; + DoDamage(GetOwner(), "direct", 99999, 100, GAME_MASTER); + } + +} + +} diff --git a/scripts/angelscript/traps/circle_of_death2.as b/scripts/angelscript/traps/circle_of_death2.as new file mode 100644 index 00000000..0076ac01 --- /dev/null +++ b/scripts/angelscript/traps/circle_of_death2.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "traps/circle_of_death1.as" + +namespace MS +{ + +class CircleOfDeath2 : CGameScript +{ + int CIRCLE_RAD; + int CL_BODY; + int CL_RAD; + + CircleOfDeath2() + { + CIRCLE_RAD = 140; + CL_BODY = 4; + CL_RAD = 156; + } + +} + +} diff --git a/scripts/angelscript/traps/circle_of_death3.as b/scripts/angelscript/traps/circle_of_death3.as new file mode 100644 index 00000000..23a35522 --- /dev/null +++ b/scripts/angelscript/traps/circle_of_death3.as @@ -0,0 +1,23 @@ +#pragma context server + +#include "traps/circle_of_death1.as" + +namespace MS +{ + +class CircleOfDeath3 : CGameScript +{ + int CIRCLE_RAD; + int CL_BODY; + int CL_RAD; + + CircleOfDeath3() + { + CIRCLE_RAD = 180; + CL_BODY = 5; + CL_RAD = 200; + } + +} + +} diff --git a/scripts/angelscript/traps/fire_burst.as b/scripts/angelscript/traps/fire_burst.as new file mode 100644 index 00000000..555040da --- /dev/null +++ b/scripts/angelscript/traps/fire_burst.as @@ -0,0 +1,99 @@ +#pragma context server + +namespace MS +{ + +class FireBurst : CGameScript +{ + int PLAYING_DEAD; + string TRAP_AOE; + + void OnSpawn() override + { + SetName("Exploding Fire Trap"); + SetModel("null.mdl"); + SetHealth(1); + SetWidth(1); + SetHeight(1); + SetInvincible(true); + SetGravity(0); + SetFly(true); + SetBloodType("none"); + SetRace("hated"); + PLAYING_DEAD = 1; + SetNoPush(true); + ScheduleDelayedEvent(0.1, "do_explode"); + } + + void game_postspawn() + { + if ((param4).findFirst("set_") == 0) + { + set_aoe(GetToken(param4, 1, ";")); + } + if (!(param2 > 1)) return; + SetDamageMultiplier(param2); + } + + void do_explode() + { + if (TRAP_AOE == "TRAP_AOE") + { + TRAP_AOE = 256; + } + string L_BURST_POS = GetEntityOrigin(GetOwner()); + L_BURST_POS = "z"; + XDoDamage(L_BURST_POS, TRAP_AOE, "game.players.avghp", 0, GetOwner(), GetOwner(), "none", "fire_effect", "dmgevent:explode"); + ClientEvent("new", "all", "effects/sfx_fire_burst", L_BURST_POS, TRAP_AOE, 1, Vector3(255, 64, 0)); + ScheduleDelayedEvent(6.0, "npc_suicide"); + } + + void explode_dodamage() + { + if (!(param1)) return; + string L_TARG_MAXHP = GetEntityMaxHealth(param2); + string L_BLAST_DMG = L_TARG_HP; + if (L_TARG_HP >= 100) + { + string L_BLAST_RATIO = (100 / L_TARG_HP); + } + else + { + string L_BLAST_RATIO = (L_TARG_HP / 100); + } + return; + string L_DOT = GetEntityMaxHealth(param2); + L_DOT *= 0.05; + ApplyEffect(param2, "effects/dot_fire", 5.0, GetEntityIndex(GetOwner()), L_DOT); + repel_target(GetEntityIndex(param2), 1000, GetEntityOrigin(GetOwner())); + } + + void repel_target() + { + string L_TARG_ORG = GetEntityOrigin(param1); + string L_MY_ORG = param3; + string L_TARG_ANG = /* TODO: $angles */ $angles(L_MY_ORG, L_TARG_ORG); + string L_NEW_YAW = L_TARG_ANG; + SetVelocity(param1, /* TODO: $relvel */ $relvel(Vector3(0, L_NEW_YAW, 0), Vector3(0, param2, 0))); + } + + void npc_suicide() + { + SetEntityOrigin(GetOwner(), Vector3(20000, 10000, 30000)); + SetInvincible(false); + DoDamage(GetOwner(), "direct", 99999, 100, GAME_MASTER); + } + + void game_dynamically_created() + { + TRAP_AOE = param1; + } + + void set_aoe() + { + TRAP_AOE = param1; + } + +} + +} diff --git a/scripts/angelscript/traps/fire_wall.as b/scripts/angelscript/traps/fire_wall.as new file mode 100644 index 00000000..154ec640 --- /dev/null +++ b/scripts/angelscript/traps/fire_wall.as @@ -0,0 +1,190 @@ +#pragma context server + +namespace MS +{ + +class FireWall : CGameScript +{ + string ANIM_DEATH; + float FIRE_DURATION; + string FLAME_ANGLE; + string FLAME_ID; + string FLAME_POSITION; + int FLAMING; + int HEIGHT; + int MY_BASE_DMG; + string MY_OWNER; + int PLAYING_DEAD; + int TIME_LIVE; + int WIDTH; + + FireWall() + { + ANIM_DEATH = ""; + TIME_LIVE = 14; + FIRE_DURATION = 15.0; + Precache("fire1_fixed.spr"); + HEIGHT = 60; + WIDTH = 2; + } + + void OnRepeatTimer() + { + SetRepeatDelay(6); + if ((FLAMING)) + { + } + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", 7); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(Random(0.25, 0.5)); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(Random(0.25, 0.5)); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void flames_start() + { + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", 7); + FLAMING = 1; + } + + void OnSpawn() override + { + PLAYING_DEAD = 1; + SetName("Fire Wall Trap"); + SetHealth(1); + SetInvincible(true); + SetRoam(false); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetModel("null.mdl"); + PLAYING_DEAD = 1; + ScheduleDelayedEvent(0.1, "flames_start"); + // svplaysound: emitsound ent_me $get(ent_me,origin) 192 TIME_LIVE danger 192 + EmitSound(GetOwner(), GetEntityOrigin(GetOwner()), 192, TIME_LIVE, "danger", 192); + MY_OWNER = GetEntityIndex(GetOwner()); + MY_BASE_DMG = 300; + FIRE_DURATION("firewall_death"); + string REMOVE_TIME = FIRE_DURATION; + REMOVE_TIME -= 0.2; + REMOVE_TIME("remove_invul"); + SetAngles("face.y"); + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), GetEntityProperty(GetOwner(), "angles.y")); + FLAME_ID = "game.script.last_sent_id"; + } + + void remove_invul() + { + SetRace("hated"); + SetInvincible(false); + } + + void game_dynamically_created() + { + } + + void flames_attack() + { + SetRepeatDelay(0.5); + if (!(FLAMING)) return; + string ATTACK_DAMAGE = MY_BASE_DMG; + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 96, 0, 1.0, 0); + DoDamage(/* TODO: $relpos */ $relpos(0, 96, 0), 96, 0, 1.0, 0); + DoDamage(/* TODO: $relpos */ $relpos(0, -96, 0), 96, 0, 1.0, 0); + } + + void game_dodamage() + { + if ((IsValidPlayer(param2))) + { + ApplyEffect(param2, "effects/dot_fire", 2, GetEntityIndex(GetOwner()), MY_BASE_DMG); + } + if ((GetEntityProperty(param2, "alive"))) + { + ApplyEffect(param2, "effects/dot_fire", 2, GetEntityIndex(GetOwner()), MY_BASE_DMG); + } + } + + void firewall_death() + { + FLAMING = 0; + firewall_end_cl(); + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", "game.sound.silentvol"); + ClientEvent("remove", "all", FLAME_ID); + DoDamage(GetOwner(), "direct", 6000, 100, GetOwner()); + SetAlive(0); + } + + void client_activate() + { + FLAME_POSITION = param1; + FLAME_ANGLE = Vector3(0, param2, 0); + ScheduleDelayedEvent(2, "flames_start"); + TIME_LIVE("firewall_end_cl"); + } + + void firewall_end_cl() + { + RemoveScript(); + } + + void flames_shoot() + { + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + int x = RandomInt(-30, 30); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + int x = RandomInt(-96, 96); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + int x = RandomInt(-192, 192); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + } + + void setup_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.6, 1.0)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.1, 1.0)); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + } + +} + +} diff --git a/scripts/angelscript/traps/fire_wall2.as b/scripts/angelscript/traps/fire_wall2.as new file mode 100644 index 00000000..3e0265bd --- /dev/null +++ b/scripts/angelscript/traps/fire_wall2.as @@ -0,0 +1,212 @@ +#pragma context server + +namespace MS +{ + +class FireWall2 : CGameScript +{ + int AM_SUMMONED; + int DMG_STEP; + string FLAME_ANGLE; + string FLAME_POSITION; + int FLAMING; + int HEIGHT; + int IS_ACTIVE; + string MY_ANGLES; + string MY_BASE_DMG; + string MY_CL_IDX; + float MY_DURATION; + string MY_OWNER; + int PLAYING_DEAD; + string SCAN_TARGETS; + int TIME_LIVE; + int WIDTH; + + FireWall2() + { + MY_DURATION = 15.0; + HEIGHT = 60; + WIDTH = 2; + TIME_LIVE = 14; + } + + void OnRepeatTimer() + { + SetRepeatDelay(6); + if ((FLAMING)) + { + } + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", 7); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(Random(0.25, 0.5)); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void OnRepeatTimer_2() + { + SetRepeatDelay(Random(0.25, 0.5)); + if ((FLAMING)) + { + } + flames_shoot(); + } + + void game_dynamically_created() + { + AM_SUMMONED = 1; + MY_OWNER = param1; + MY_ANGLES = param2; + SetAngles("face.y"); + MY_BASE_DMG = param3; + if ((param3).findFirst("PARAM") == 0) + { + MY_BASE_DMG = 300; + } + StoreEntity("ent_expowner"); + SetRace(GetEntityRace(MY_OWNER)); + } + + void OnSpawn() override + { + SetName("Fire Wall Trap"); + SetHealth(1); + SetInvincible(true); + PLAYING_DEAD = 1; + SetNoPush(true); + SetModel("null.mdl"); + ScheduleDelayedEvent(0.1, "define_vars"); + MY_DURATION("end_effect"); + } + + void define_vars() + { + if (!(AM_SUMMONED)) + { + SetRace("hated"); + MY_OWNER = GetEntityIndex(GetOwner()); + MY_BASE_DMG = 300; + MY_ANGLES = GetEntityProperty(GetOwner(), "angles.y"); + } + ScheduleDelayedEvent(0.1, "activate_effect"); + } + + void activate_effect() + { + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), MY_ANGLES); + MY_CL_IDX = "game.script.last_sent_id"; + IS_ACTIVE = 1; + DMG_STEP = 0; + ScheduleDelayedEvent(2.0, "damage_cycle"); + } + + void damage_cycle() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(0.2, "damage_cycle"); + if (DMG_STEP == 3) + { + DMG_STEP = 0; + } + DMG_STEP += 1; + if (DMG_STEP == 1) + { + string SCAN_POS = /* TODO: $relpos */ $relpos(0, 0, 0); + } + if (DMG_STEP == 2) + { + string SCAN_POS = /* TODO: $relpos */ $relpos(0, 96, 0); + } + if (DMG_STEP == 3) + { + string SCAN_POS = /* TODO: $relpos */ $relpos(0, -96, 0); + } + SCAN_TARGETS = FindEntitiesInSphere("enemy", 96); + if (!(SCAN_TARGETS != "none")) return; + GetTokenCount(SCAN_TARGETS, ";")("apply_aoe_effect"); + } + + void apply_aoe_effect() + { + string CUR_TARGET = GetToken(SCAN_TARGETS, i, ";"); + ApplyEffect(CUR_TARGET, "effects/dot_fire", 2, MY_OWNER, MY_BASE_DMG); + } + + void end_effect() + { + IS_ACTIVE = 0; + ClientEvent("remove", "all", MY_CL_IDX); + ScheduleDelayedEvent(0.1, "final_remove"); + } + + void final_remove() + { + RemoveScript(); + DeleteEntity(GetOwner()); + } + + void client_activate() + { + FLAME_POSITION = param1; + FLAME_ANGLE = Vector3(0, param2, 0); + ScheduleDelayedEvent(2, "flames_start"); + } + + void flames_start() + { + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", 7); + FLAMING = 1; + } + + void flames_shoot() + { + string NEGWIDTH = WIDTH; + NEGWIDTH *= -1; + int x = RandomInt(-30, 30); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + int x = RandomInt(-96, 96); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + int x = RandomInt(-192, 192); + int y = RandomInt(NEGWIDTH, WIDTH); + string L_POS = /* TODO: $relpos */ $relpos(FLAME_ANGLE, Vector3(x, y, HEIGHT)); + L_POS += FLAME_POSITION; + int yar = RandomInt(1, 0); + if ((yar)) + { + ClientEffect("tempent", "sprite", "fire1_fixed.spr", L_POS, "setup_flames"); + } + } + + void setup_flames() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "scale", Random(0.6, 1.0)); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.1, 1.0)); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + } + +} + +} diff --git a/scripts/angelscript/traps/ice_wall.as b/scripts/angelscript/traps/ice_wall.as new file mode 100644 index 00000000..f59ea24b --- /dev/null +++ b/scripts/angelscript/traps/ice_wall.as @@ -0,0 +1,76 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_npc_attack.as" + +namespace MS +{ + +class IceWall : CGameScript +{ + string ANIM_DEATH; + int CAN_ATTACK; + int CAN_HUNT; + int f1; + int f2; + int r1; + int r2; + string rotate; + + IceWall() + { + ANIM_DEATH = ""; + CAN_ATTACK = 0; + CAN_HUNT = 0; + } + + void OnSpawn() override + { + SetHealth(30); + SetWidth(64); + SetHeight(64); + SetName("Ice Wall"); + SetRoam(false); + SetDamageResistance("fire", 10.0); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetModel("misc/icewall.mdl"); + SetBloodType("none"); + SetRace("hated"); + ScheduleDelayedEvent(0, "icewall_up"); + } + + void game_dynamically_created() + { + PARAM1++; + SetAngles("face.y"); + if (!(param2 == "PARAM2")) return; + rotate = GetEntityProperty(GetOwner(), "angles.yaw"); + rotate++; + r1 = RandomInt(50, 70); + r2 = RandomInt(50, 70); + r2 *= -1; + f1 = RandomInt(-5, 5); + f2 = RandomInt(-5, 5); + SpawnNPC("traps/ice_wall", /* TODO: $relpos */ $relpos(f1, r1, 0), ScriptMode::Legacy); // params: rotate, 1 + SpawnNPC("traps/ice_wall", /* TODO: $relpos */ $relpos(f2, r2, 0), ScriptMode::Legacy); // params: rotate, 1 + SpawnNPC("traps/ice_wall", /* TODO: $relpos */ $relpos(f1, f1, 0), ScriptMode::Legacy); // params: rotate, 1 + SpawnNPC("traps/ice_wall", /* TODO: $relpos */ $relpos(r2, r2, 0), ScriptMode::Legacy); // params: rotate, 1 + } + + void icewall_up() + { + PlayAnim("hold", "up"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + Effect("tempent", "trail", "blueflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 0), /* TODO: $relpos */ $relpos(0, 0, 32), 2, 0.1, 3, 30, 0); + Effect("tempent", "trail", "blueflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 32), /* TODO: $relpos */ $relpos(0, 0, 64), 2, 0.1, 3, 30, 0); + Effect("tempent", "trail", "blueflare1.spr", /* TODO: $relpos */ $relpos(0, 0, 64), /* TODO: $relpos */ $relpos(0, 0, 96), 5, 0.1, 3, 30, 0); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/traps/orc_fire_wall.as b/scripts/angelscript/traps/orc_fire_wall.as new file mode 100644 index 00000000..f765ddd5 --- /dev/null +++ b/scripts/angelscript/traps/orc_fire_wall.as @@ -0,0 +1,63 @@ +#pragma context server + +#include "traps/fire_wall.as" + +namespace MS +{ + +class OrcFireWall : CGameScript +{ + string FLAME_ID; + int FLAMING; + int MY_BASE_DMG; + string MY_OWNER; + int PLAYING_DEAD; + + void OnSpawn() override + { + PLAYING_DEAD = 1; + SetName("Fire Wall Trap"); + SetHealth(5); + SetRace("orc"); + SetInvincible(true); + SetRoam(false); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetModel("null.mdl"); + PLAYING_DEAD = 1; + ScheduleDelayedEvent(0.1, "flames_start"); + MY_OWNER = GetEntityIndex(GetOwner()); + MY_BASE_DMG = 120; + string REMOVE_TIME = FIRE_DURATION; + REMOVE_TIME -= 0.5; + REMOVE_TIME("remove_invul"); + FIRE_DURATION("firewall_death"); + SetAngles("face.y"); + ClientEvent("new", "all", currentscript, GetEntityOrigin(GetOwner()), GetEntityProperty(GetOwner(), "angles.y")); + FLAME_ID = "game.script.last_sent_id"; + } + + void game_dodamage() + { + if ((IsEntityAlive(param2))) + { + if (GetRelationship(GetOwner()) != "ally") + { + ApplyEffect(param2, "effects/dot_fire", 2, GetEntityIndex(GetOwner()), MY_BASE_DMG); + } + } + } + + void firewall_death() + { + FLAMING = 0; + firewall_end_cl(); + EmitSound(GetOwner(), CHAN_ITEM, "items/torch1.wav", "game.sound.silentvol"); + ClientEvent("remove", "all", FLAME_ID); + RemoveScript(); + DeleteEntity(GetOwner()); + } + +} + +} diff --git a/scripts/angelscript/traps/poison_gas.as b/scripts/angelscript/traps/poison_gas.as new file mode 100644 index 00000000..8c050f54 --- /dev/null +++ b/scripts/angelscript/traps/poison_gas.as @@ -0,0 +1,98 @@ +#pragma context server + +namespace MS +{ + +class PoisonGas : CGameScript +{ + string DOT_ORG; + int IS_ACTIVE; + int PLAYING_DEAD; + string TRAP_AOE; + + PoisonGas() + { + } + + void OnSpawn() override + { + SetName("Poison Gas Trap"); + SetModel("null.mdl"); + SetHealth(1); + SetWidth(1); + SetHeight(1); + SetInvincible(true); + SetGravity(0); + SetFly(true); + SetBloodType("none"); + SetRace("hated"); + PLAYING_DEAD = 1; + SetNoPush(true); + ScheduleDelayedEvent(0.1, "start_dot"); + } + + void game_postspawn() + { + if ((param4).findFirst("set_") == 0) + { + set_aoe(GetToken(param4, 1, ";")); + } + if (!(param2 > 1)) return; + SetDamageMultiplier(param2); + } + + void start_dot() + { + if (TRAP_AOE == "TRAP_AOE") + { + TRAP_AOE = 256; + } + DOT_ORG = GetEntityOrigin(GetOwner()); + DOT_ORG = "z"; + ClientEvent("new", "all", "effects/sfx_poison_cloud", DOT_ORG, TRAP_AOE, 20.0); + IS_ACTIVE = 1; + dot_loop(); + ScheduleDelayedEvent(20.0, "dot_end"); + } + + void dot_loop() + { + if (!(IS_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "dot_loop"); + XDoDamage(DOT_ORG, TRAP_AOE, 0, 0, GetOwner(), GetOwner(), "none", "target", "dmgevent:dot"); + } + + void dot_dodamage() + { + if (!(param1)) return; + string L_DOT = GetEntityMaxHealth(param2); + L_DOT *= 0.1; + ApplyEffect(param2, "effects/dot_poison", 10.0, GetEntityIndex(GetOwner()), L_DOT); + } + + void dot_end() + { + IS_ACTIVE = 0; + ScheduleDelayedEvent(11.0, "npc_suicide"); + } + + void npc_suicide() + { + SetEntityOrigin(GetOwner(), Vector3(20000, 10000, 30000)); + SetInvincible(false); + DoDamage(GetOwner(), "direct", 99999, 100, GAME_MASTER); + } + + void game_dynamically_created() + { + TRAP_AOE = param1; + } + + void set_aoe() + { + TRAP_AOE = param1; + } + +} + +} diff --git a/scripts/angelscript/traps/quake.as b/scripts/angelscript/traps/quake.as new file mode 100644 index 00000000..70b118fd --- /dev/null +++ b/scripts/angelscript/traps/quake.as @@ -0,0 +1,230 @@ +#pragma context server + +namespace MS +{ + +class Quake : CGameScript +{ + string DMG_OWNER; + string DO_EVENTS; + string NO_DAMAGE; + int NO_SLOW; + int PLAYING_DEAD; + int QUAKE_ACTIVE; + int QUAKE_AOE; + float QUAKE_DURATION; + string QUAKE_END_TIME; + int QUAKE_GLOBAL; + string QUAKE_TARGS; + string SOUND_QUAKE_LOOP; + string SOUND_QUAKE_START; + + Quake() + { + QUAKE_AOE = 512; + QUAKE_DURATION = 10.0; + SOUND_QUAKE_START = "magic/volcano_start.wav"; + SOUND_QUAKE_LOOP = "magic/volcano_loop.wav"; + } + + void game_precache() + { + Precache("rockgibs.mdl"); + } + + void fake_precache() + { + // svplaysound: svplaysound 0 0 SOUND_QUAKE_START + EmitSound(0, 0, SOUND_QUAKE_START); + // svplaysound: svplaysound 0 0 SOUND_QUAKE_LOOP + EmitSound(0, 0, SOUND_QUAKE_LOOP); + } + + void OnSpawn() override + { + SetName("Earthquake"); + SetModel("null.mdl"); + SetHealth(1); + SetWidth(1); + SetHeight(1); + SetInvincible(true); + SetGravity(0); + SetFly(true); + SetBloodType("none"); + SetRace("hated"); + PLAYING_DEAD = 1; + SetNoPush(true); + ScheduleDelayedEvent(0.2, "do_quake"); + } + + void game_postspawn() + { + DO_EVENTS = param4; + if (DO_EVENTS != "none") + { + handle_events(); + } + if (param2 == 0) + { + NO_DAMAGE = 1; + } + else + { + SetDamageMultiplier(param2); + } + } + + void game_dynamically_created() + { + LogDebug("game_dynamically_created PARAM1 PARAM2 PARAM3 PARAM4"); + if (param1 == "events") + { + DO_EVENTS = param2; + ScheduleDelayedEvent(0.1, "handle_events"); + } + else + { + if ((IsEntityAlive(param1))) + { + } + DMG_OWNER = param1; + SetRace(GetEntityRace(DMG_OWNER)); + } + } + + void handle_events() + { + for (int i = 0; i < GetTokenCount(DO_EVENTS, ";"); i++) + { + handle_events_loop(); + } + } + + void handle_events_loop() + { + string CUR_IDX = i; + string CUR_EVENT = GetToken(DO_EVENTS, CUR_IDX, ";"); + if (CUR_IDX < (GetTokenCount(DO_EVENTS, ";") - 1)) + { + string PARAM_OUT = GetToken(DO_EVENTS, (CUR_IDX + 1), ";"); + } + CUR_EVENT(PARAM_OUT); + } + + void set_aoe() + { + LogDebug("set_aoe PARAM1"); + if (!((param1).findFirst(PARAM) == 0)) return; + QUAKE_AOE = param1; + } + + void set_dur() + { + if (!((param1).findFirst(PARAM) == 0)) return; + QUAKE_DURATION = param1; + LogDebug("set_dur PARAM1 [ QUAKE_DURATION ]"); + } + + void set_global() + { + LogDebug("set_global"); + QUAKE_GLOBAL = 1; + } + + void set_noslow() + { + NO_SLOW = 1; + } + + void set_nodamage() + { + NO_DAMAGE = 1; + } + + void do_quake() + { + QUAKE_ACTIVE = 1; + LogDebug("do_quake QUAKE_DURATION"); + if (!(QUAKE_GLOBAL)) + { + // svplaysound: svplaysound 1 10 SOUND_QUAKE_START 0.8 60 + EmitSound(1, 10, SOUND_QUAKE_START, 0.8, 60); + // svplaysound: svplaysound 2 10 SOUND_QUAKE_LOOP 0.8 60 + EmitSound(2, 10, SOUND_QUAKE_LOOP, 0.8, 60); + QUAKE_AOE = 256; + } + QUAKE_END_TIME = GetGameTime(); + QUAKE_END_TIME += QUAKE_DURATION; + QUAKE_DURATION("quake_end"); + if (!(QUAKE_GLOBAL)) + { + ScheduleDelayedEvent(0.1, "quake_loop"); + Effect("screenshake", GetEntityOrigin(GetOwner()), 50, 10, QUAKE_DURATION, (QUAKE_AOE * 1.5)); + ClientEvent("new", "all", "effects/sfx_quake", GetEntityIndex(GetOwner()), 1, QUAKE_AOE, QUAKE_DURATION); + } + else + { + CallExternal("players", "ext_quake_fx", QUAKE_DURATION, SOUND_QUAKE_START, SOUND_QUAKE_LOOP); + ScheduleDelayedEvent(0.1, "global_quake_loop"); + } + } + + void quake_loop() + { + if (!(QUAKE_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "quake_loop"); + QUAKE_TARGS = FindEntitiesInSphere("enemy", QUAKE_AOE); + if (!(QUAKE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(QUAKE_TARGS, ";"); i++) + { + quake_applyeffect(); + } + } + + void global_quake_loop() + { + if (!(QUAKE_ACTIVE)) return; + ScheduleDelayedEvent(1.0, "quake_loop"); + if (!(GetPlayerCount() > 0)) return; + GetAllPlayers(QUAKE_TARGS); + if (!(QUAKE_TARGS != "none")) return; + for (int i = 0; i < GetTokenCount(QUAKE_TARGS, ";"); i++) + { + quake_applyeffect(); + } + } + + void quake_applyeffect() + { + string CUR_TARG = GetToken(QUAKE_TARGS, i, ";"); + if (!(IsOnGround(CUR_TARG))) return; + string L_DMG = GetEntityMaxHealth(CUR_TARG); + L_DMG *= 0.01; + if ((NO_DAMAGE)) + { + int L_DMG = 0; + } + if ((NO_SLOW)) return; + if (!(QUAKE_GLOBAL)) + { + ApplyEffect(CUR_TARG, "effects/effect_quake", GetEntityIndex(GetOwner()), GetEntityIndex(GetOwner()), QUAKE_AOE, L_DMG, QUAKE_END_TIME, 0); + } + else + { + ApplyEffect(CUR_TARG, "effects/effect_quake", CUR_TARG, GetEntityIndex(GetOwner()), QUAKE_AOE, L_DMG, QUAKE_END_TIME, 0); + } + } + + void quake_end() + { + if (!(QUAKE_GLOBAL)) + { + // svplaysound: if ( !QUAKE_GLOBAL ) svplaysound 2 0 SOUND_QUAKE_LOOP + EmitSound(2, 0, SOUND_QUAKE_LOOP); + } + QUAKE_ACTIVE = 0; + } + +} + +} diff --git a/scripts/angelscript/traps/splodie_skull.as b/scripts/angelscript/traps/splodie_skull.as new file mode 100644 index 00000000..0e22f2cf --- /dev/null +++ b/scripts/angelscript/traps/splodie_skull.as @@ -0,0 +1,186 @@ +#pragma context server + +#include "monsters/externals.as" + +namespace MS +{ + +class SplodieSkull : CGameScript +{ + string DEATH_TIME; + int DMG_POISON; + int DMG_SPLODE; + string GLOW_SHELL; + int IMMUNE_VAMPIRE; + int IS_UNHOLY; + int MONSTER_HP; + string MY_OWNER; + string NPC_DO_EVENTS; + int NPC_GIVE_EXP; + int SCAN_SIZE; + string SOUND_HATCH; + + SplodieSkull() + { + IS_UNHOLY = 1; + SCAN_SIZE = 100; + GLOW_SHELL = Vector3(0, 255, 0); + SOUND_HATCH = "debris/bustflesh1.wav"; + DMG_SPLODE = 200; + DMG_POISON = 75; + MONSTER_HP = 50; + NPC_GIVE_EXP = 30; + Precache("bonegibs.mdl"); + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(1.0, 5.0)); + bounce_about(); + } + + void game_dynamically_created() + { + SetMonsterClip(0); + MY_OWNER = param1; + SetRace(GetEntityRace(MY_OWNER)); + if (param2 != "PARAM2") + { + SetDamageMultiplier(param2); + MONSTER_HP *= param2; + SetHealth(MONSTER_HP); + } + } + + void OnSpawn() override + { + skull_spawn(); + } + + void skull_spawn() + { + SetName("Green Goblin Skull"); + if (MONSTER_HP == "MONSTER_HP") + { + SetHealth(50); + } + else + { + SetHealth(MONSTER_HP); + } + SetRace("demon"); + SetModel("monsters/skull.mdl"); + SetBloodType("none"); + SetWidth(16); + SetHeight(16); + SetModelBody(0, 1); + SetBloodType("none"); + IMMUNE_VAMPIRE = 1; + SetProp(GetOwner(), "movetype", "const.movetype.bounce"); + Effect("glow", GetOwner(), GLOW_SHELL, 128, -1, 0); + ScheduleDelayedEvent(0.1, "scan_bounce"); + Random(10_0, 20_0)("self_destruct"); + ScheduleDelayedEvent(0.01, "bounce_about"); + } + + void game_postspawn() + { + int TOTAL_ADJ = 0; + if (param3 != "PARAM2") + { + SetDamageMultiplier(param3); + TOTAL_ADJ += param3; + } + if (param4 != "PARAM3") + { + MONSTER_HP *= param2; + SetHealth(MONSTER_HP); + TOTAL_ADJ += param3; + } + NPC_DO_EVENTS = param4; + if (TOTAL_ADJ != 0) + { + TOTAL_ADJ /= 2; + NPC_GIVE_EXP *= TOTAL_ADJ; + } + SetSkillLevel(NPC_GIVE_EXP); + if (!(param4 != "none")) return; + for (int i = 0; i < GetTokenCount(NPC_DO_EVENTS, ";"); i++) + { + npcatk_do_events(); + } + } + + void scan_bounce() + { + ScheduleDelayedEvent(0.2, "scan_bounce"); + string MY_ZVEL = (GetMonsterProperty("velocity")).z; + if (!(MY_ZVEL < 0)) return; + string TRACE_START = GetMonsterProperty("origin"); + TRACE_START += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, 0)); + string TRACE_END = TRACE_START; + TRACE_END += /* TODO: $relpos */ $relpos(Vector3(0, 0, 0), Vector3(0, 0, -50)); + string TRACE_LINE = TraceLine(TRACE_START, TRACE_END); + if (TRACE_LINE != TRACE_END) + { + EmitSound(GetOwner(), 0, "weapons/g_bounce1.wav", 10); + } + } + + void bounce_about() + { + int TOSS_DIR = RandomInt(-200, 200); + int TOSS_HOR = RandomInt(-200, 200); + int TOSS_VER = RandomInt(-400, 600); + SetVelocity(GetOwner(), /* TODO: $relvel */ $relvel(TOSS_DIR, TOSS_HOR, TOSS_VER)); + } + + void OnHitByAttack(CBaseEntity@ attacker, int damage) override + { + bounce_about(); + } + + void self_destruct() + { + npc_suicide(); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((CUSTOM_DEATH)) return; + CallExternal(MY_OWNER, "skull_died"); + xp_send(); + DEATH_TIME = GetGameTime(); + DEATH_TIME += 0.2; + Effect("tempent", "gibs", "bonegibs.mdl", /* TODO: $relpos */ $relpos(0, 0, 0), 0.1, 100, 30, 2, 4); + EmitSound(GetOwner(), 0, SOUND_HATCH, 10); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + string SPLODE_POS = /* TODO: $relpos */ $relpos(0, 0, 0); + ClientEvent("new", "all", "effects/sfx_splodie", SPLODE_POS, Vector3(0, 255, 0)); + XDoDamage(SPLODE_POS, 128, DMG_SPLODE, 0, GetOwner(), GetOwner(), "none", "blunt"); + } + + void xp_send() + { + string MON_FULL = GetMonsterProperty("name.full"); + string OUT_MSG = "You've slain "; + OUT_MSG += MON_FULL; + SendColoredMessage(GetEntityIndex(m_hLastStruck), OUT_MSG); + } + + void game_dodamage() + { + if (!(GetGameTime() < DEATH_TIME)) return; + if (!(IsEntityAlive(param2))) return; + if (!(GetRelationship(param2) == "enemy")) return; + string TARGET_ORG = GetEntityOrigin(param2); + string TARG_ANG = /* TODO: $angles */ $angles(GetMonsterProperty("origin"), TARGET_ORG); + string NEW_YAW = TARG_ANG; + SetVelocity(param2, /* TODO: $relvel */ $relvel(Vector3(0, NEW_YAW, 0), Vector3(0, 1000, 0))); + ApplyEffect(m_hLastStruck, "effects/dot_poison", 5.0, GetEntityIndex(GetOwner()), DMG_POISON); + } + +} + +} diff --git a/scripts/angelscript/traps/splodie_skull_ice.as b/scripts/angelscript/traps/splodie_skull_ice.as new file mode 100644 index 00000000..8ffc6e5b --- /dev/null +++ b/scripts/angelscript/traps/splodie_skull_ice.as @@ -0,0 +1,76 @@ +#pragma context server + +#include "traps/splodie_skull.as" + +namespace MS +{ + +class SplodieSkullIce : CGameScript +{ + int CUSTOM_DEATH; + string DEATH_TIME; + int IMMUNE_VAMPIRE; + string SOUND_HATCH; + + SplodieSkullIce() + { + CUSTOM_DEATH = 1; + SOUND_HATCH = "debris/bustflesh1.wav"; + } + + void skull_spawn() + { + SetName("Icey Skull"); + if (MONSTER_HP == "MONSTER_HP") + { + SetHealth(50); + } + else + { + SetHealth(MONSTER_HP); + } + SetRace("demon"); + SetModel("monsters/skull.mdl"); + SetProp(GetOwner(), "skin", 1); + SetBloodType("none"); + SetWidth(16); + SetHeight(16); + SetModelBody(0, 1); + SetBloodType("none"); + IMMUNE_VAMPIRE = 1; + SetProp(GetOwner(), "movetype", "const.movetype.bounce"); + Effect("glow", GetOwner(), Vector3(128, 128, 255), 128, -1, 0); + IMMUNE_VAMPIRE = 1; + ScheduleDelayedEvent(0.1, "scan_bounce"); + Random(10_0, 20_0)("self_destruct"); + ScheduleDelayedEvent(0.01, "bounce_about"); + } + + void OnDeath(CBaseEntity@ attacker) override + { + if ((IsEntityAlive(MY_OWNER))) + { + CallExternal(MY_OWNER, "skull_died"); + } + xp_send(); + DEATH_TIME = GetGameTime(); + DEATH_TIME += 0.2; + EmitSound(GetOwner(), 0, SOUND_HATCH, 10); + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + string SPLODE_POS = /* TODO: $relpos */ $relpos(0, 0, 0); + ClientEvent("new", "all", "effects/sfx_splodie", SPLODE_POS, Vector3(128, 128, 255)); + XDoDamage(SPLODE_POS, 128, DMG_SPLODE, 0, GetOwner(), GetOwner(), "none", "blunt"); + } + + void game_dodamage() + { + if (!(param1)) return; + if (!(IsEntityAlive(param2))) return; + if (!(GetRelationship(param2) == "enemy")) return; + ApplyEffect(param2, "effects/dot_cold", 5.0, GetEntityIndex(GetOwner()), DOT_COLD); + } + +} + +} diff --git a/scripts/angelscript/traps/volcano.as b/scripts/angelscript/traps/volcano.as new file mode 100644 index 00000000..5659373a --- /dev/null +++ b/scripts/angelscript/traps/volcano.as @@ -0,0 +1,205 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class Volcano : CGameScript +{ + string ANIM_DEATH; + int DMG_HIGH; + int DMG_LOW; + int ERUPTING; + string LIGHT_COLOR; + float LIGHT_DURATION; + int LIGHT_RADIUS; + int LOOP_DELAY; + string MODEL_WORLD; + int ROCK_START_HEIGHT; + string SOUND_LOOP; + string SOUND_START; + string SPRITE_BURN; + int TIME_LIVE; + string VOLCANO_ID; + string local.cl.gravity; + string local.cl.origin; + string local.cl.velocity; + int xangle; + int yangle; + + Volcano() + { + DMG_HIGH = 100; + DMG_LOW = 50; + ANIM_DEATH = "down"; + TIME_LIVE = 30; + SOUND_START = "magic/volcano_start.wav"; + SOUND_LOOP = "magic/volcano_loop.wav"; + MODEL_WORLD = "misc/volcano.mdl"; + LOOP_DELAY = 0; + Precache("misc/volcano.mdl"); + Precache(SOUND_START); + Precache(SOUND_LOOP); + ROCK_START_HEIGHT = 66; + // TODO: UNCONVERTED: [client] repeatdelay 7 + EmitSound(GetOwner(), CHAN_BODY, SOUND_LOOP, 7); + MODEL_WORLD = "weapons/projectiles.mdl"; + SPRITE_BURN = "fire1.spr"; + LIGHT_RADIUS = 64; + LIGHT_COLOR = Vector3(255, 0, 0); + LIGHT_DURATION = 0.8; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(0.0, 0.5)); + if ((ERUPTING)) + { + } + volcano_shoot(); + } + + void OnRepeatTimer_1() + { + SetRepeatDelay(Random(0.0, 0.5)); + if ((ERUPTING)) + { + } + volcano_shoot(); + } + + void OnSpawn() override + { + SetHealth(1500); + SetRace("hated"); + SetInvincible(true); + SetSolid("none"); + SetWidth(32); + SetHeight(64); + SetName("A Volcano"); + SetRoam(false); + SetDamageResistance("cold", 2.0); + SetDamageResistance("fire", 0.0); + SetSkillLevel(0); + SetHearingSensitivity(0); + SetModel(MODEL_WORLD); + SetBloodType("none"); + SetStat("spellcasting", 40); + PlayAnim("hold", "up"); + ScheduleDelayedEvent(2, "volcano_start"); + TIME_LIVE("volcano_death"); + Effect("screenshake", /* TODO: $relpos */ $relpos(0, 0, 0), 50, 10, 6, 512); + // svplaysound: emitsound ent_me $get(ent_me,origin) 512 TIME_LIVE danger 512 + EmitSound(GetOwner(), GetEntityOrigin(GetOwner()), 512, TIME_LIVE, "danger", 512); + EmitSound(GetOwner(), 0, SOUND_START, 7); + ClientEvent("persist", "all", currentscript, GetEntityOrigin(GetOwner()), TIME_LIVE); + VOLCANO_ID = "game.script.last_sent_id"; + } + + void volcano_start() + { + ERUPTING = 1; + } + + void volcano_shoot() + { + xangle = RandomInt(50, 90); + yangle = RandomInt(-180, 180); + SetAngles("view"); + float ATTACK_DAMAGE = Random(DMG_LOW, DMG_HIGH); + DoDamage(/* TODO: $relpos */ $relpos(0, 0, 0), 128, ATTACK_DAMAGE, 1.0, 0); + TossProjectile("proj_volcano", /* TODO: $relpos */ $relpos(0, 0, ROCK_START_HEIGHT), "none", 500, ATTACK_DAMAGE, 0, "none"); + ClientEvent("update", "all_in_sight", VOLCANO_ID, "volcono_shoot_rock", GetEntityVelocity("ent_lastprojectile"), GetEntityProperty("ent_lastprojectile", "gravity")); + } + + void volcano_death() + { + ERUPTING = 0; + ScheduleDelayedEvent(3, "volcano_fadeout"); + } + + void volcano_fadeout() + { + EmitSound(GetOwner(), CHAN_BODY, SOUND_LOOP, "game.sound.silentvol"); + SetInvincible(false); + DoDamage(GetOwner(), "direct", 6000, 100, GetOwner()); + } + + void client_activate() + { + local.cl.origin = param1; + local.cl.origin += "z"; + string DIE_TIME = param2; + DIE_TIME += 10; + DIE_TIME("volcano_die"); + } + + void volcano_die() + { + EmitSound(GetOwner(), CHAN_BODY, SOUND_LOOP, "game.sound.silentvol"); + RemoveScript(); + } + + void volcono_shoot_rock() + { + local.cl.velocity = param1; + local.cl.gravity = param2; + ClientEffect("tempent", "model", MODEL_WORLD, local.cl.origin, "volcano_rock_create", "volcano_rock_update", "volcano_rock_collide"); + for (int i = 0; i < 4; i++) + { + makefire_loop(local.cl.origin); + } + } + + void volcano_rock_create() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 10); + ClientEffect("tempent", "set_current_prop", "velocity", local.cl.velocity); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 0); + ClientEffect("tempent", "set_current_prop", "gravity", local.cl.gravity); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + ClientEffect("tempent", "set_current_prop", "renderfx", "glow"); + ClientEffect("tempent", "set_current_prop", "renderamt", 100); + ClientEffect("tempent", "set_current_prop", "rendercolor", Vector3(255, 0, 0)); + ClientEffect("light", "new", "game.tempent.origin", LIGHT_RADIUS, LIGHT_COLOR, LIGHT_DURATION); + ClientEffect("tempent", "set_current_prop", "iuser1", "game.script.last_light_id"); + } + + void volcano_rock_update() + { + ClientEffect("light", "game.tempent.iuser1", "game.tempent.origin", LIGHT_RADIUS, LIGHT_COLOR, LIGHT_DURATION); + } + + void volcano_rock_collide() + { + ClientEffect("tempent", "set_current_prop", "sprite", SPRITE_BURN); + ClientEffect("tempent", "set_current_prop", "rendermode", "add"); + ClientEffect("tempent", "set_current_prop", "renderamt", 255); + ClientEffect("tempent", "set_current_prop", "death_delay", 1); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "collide", "all"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + } + + void makefire_loop() + { + ClientEffect("tempent", "sprite", SPRITE_BURN, param1, "volcano_fire_create"); + } + + void volcano_fire_create() + { + ClientEffect("tempent", "set_current_prop", "death_delay", 2); + ClientEffect("tempent", "set_current_prop", "velocity", Vector3(Random(-200, 200), Random(-200, 200), Random(-200, 200))); + ClientEffect("tempent", "set_current_prop", "bouncefactor", 5); + ClientEffect("tempent", "set_current_prop", "scale", 0.5); + ClientEffect("tempent", "set_current_prop", "gravity", Random(0.6, 1.0)); + ClientEffect("tempent", "set_current_prop", "collide", "all;die"); + ClientEffect("tempent", "set_current_prop", "framerate", 30); + ClientEffect("tempent", "set_current_prop", "frames", 23); + } + +} + +} diff --git a/scripts/angelscript/triggers/burn_1000.as b/scripts/angelscript/triggers/burn_1000.as new file mode 100644 index 00000000..7e1e11fb --- /dev/null +++ b/scripts/angelscript/triggers/burn_1000.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/burn_1000.as" + +namespace MS +{ + +class Burn1000 : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/glow_block.as b/scripts/angelscript/triggers/glow_block.as new file mode 100644 index 00000000..e14767a7 --- /dev/null +++ b/scripts/angelscript/triggers/glow_block.as @@ -0,0 +1,27 @@ +#pragma context server + +namespace MS +{ + +class GlowBlock : CGameScript +{ + GlowBlock() + { + SetCallback("touch", "enable"); + } + + void OnTouch(CBaseEntity@ other) override + { + if (!(GetEntityProperty(param1, "scriptvar"))) + { + CallExternal(param1, "ext_glow_block", 1); + } + if ((GetEntityProperty(param1, "scriptvar"))) + { + CallExternal("ext_glow_block", "1"); + } + } + +} + +} diff --git a/scripts/angelscript/triggers/glow_unblock.as b/scripts/angelscript/triggers/glow_unblock.as new file mode 100644 index 00000000..612e7b93 --- /dev/null +++ b/scripts/angelscript/triggers/glow_unblock.as @@ -0,0 +1,23 @@ +#pragma context server + +namespace MS +{ + +class GlowUnblock : CGameScript +{ + GlowUnblock() + { + SetCallback("touch", "enable"); + } + + void OnTouch(CBaseEntity@ other) override + { + if ((GetEntityProperty(param1, "scriptvar"))) + { + CallExternal(param1, "ext_glow_block", 0); + } + } + +} + +} diff --git a/scripts/angelscript/triggers/totalhp_trigger.as b/scripts/angelscript/triggers/totalhp_trigger.as new file mode 100644 index 00000000..977a57de --- /dev/null +++ b/scripts/angelscript/triggers/totalhp_trigger.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/totalhp_trigger.as" + +namespace MS +{ + +class TotalhpTrigger : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/touch_test.as b/scripts/angelscript/triggers/touch_test.as new file mode 100644 index 00000000..ad23a04b --- /dev/null +++ b/scripts/angelscript/triggers/touch_test.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/touch_test.as" + +namespace MS +{ + +class TouchTest : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/trigger_avghp.as b/scripts/angelscript/triggers/trigger_avghp.as new file mode 100644 index 00000000..04384a4f --- /dev/null +++ b/scripts/angelscript/triggers/trigger_avghp.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/trigger_avghp.as" + +namespace MS +{ + +class TriggerAvghp : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/trigger_base.as b/scripts/angelscript/triggers/trigger_base.as new file mode 100644 index 00000000..f2ea5d89 --- /dev/null +++ b/scripts/angelscript/triggers/trigger_base.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/trigger_base.as" + +namespace MS +{ + +class TriggerBase : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/trigger_burn.as b/scripts/angelscript/triggers/trigger_burn.as new file mode 100644 index 00000000..3bcaa1f5 --- /dev/null +++ b/scripts/angelscript/triggers/trigger_burn.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/trigger_burn.as" + +namespace MS +{ + +class TriggerBurn : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/trigger_cannon.as b/scripts/angelscript/triggers/trigger_cannon.as new file mode 100644 index 00000000..2219c17b --- /dev/null +++ b/scripts/angelscript/triggers/trigger_cannon.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/trigger_cannon.as" + +namespace MS +{ + +class TriggerCannon : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/trigger_if_evil.as b/scripts/angelscript/triggers/trigger_if_evil.as new file mode 100644 index 00000000..8fbd02fb --- /dev/null +++ b/scripts/angelscript/triggers/trigger_if_evil.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/trigger_if_evil.as" + +namespace MS +{ + +class TriggerIfEvil : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/trigger_poison.as b/scripts/angelscript/triggers/trigger_poison.as new file mode 100644 index 00000000..195a4780 --- /dev/null +++ b/scripts/angelscript/triggers/trigger_poison.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/trigger_poison.as" + +namespace MS +{ + +class TriggerPoison : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/trigger_web.as b/scripts/angelscript/triggers/trigger_web.as new file mode 100644 index 00000000..36ab9a08 --- /dev/null +++ b/scripts/angelscript/triggers/trigger_web.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/web.as" + +namespace MS +{ + +class TriggerWeb : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/trigger_zap.as b/scripts/angelscript/triggers/trigger_zap.as new file mode 100644 index 00000000..3aca1189 --- /dev/null +++ b/scripts/angelscript/triggers/trigger_zap.as @@ -0,0 +1,19 @@ +#pragma context server + +#include "other/trigger_base.as" + +namespace MS +{ + +class TriggerZap : CGameScript +{ + void apply_damage() + { + if (!(IsValidPlayer(param1))) return; + LogDebug("apply_damage tim EFFECT_TIME dmg EFFECT_DAMAGE"); + XDoDamage(param1, "direct", EFFECT_DAMAGE, 1.0, GAME_MASTER, GAME_MASTER, "none", "lightning"); + } + +} + +} diff --git a/scripts/angelscript/triggers/undamael_break.as b/scripts/angelscript/triggers/undamael_break.as new file mode 100644 index 00000000..118022a0 --- /dev/null +++ b/scripts/angelscript/triggers/undamael_break.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/undamael_break.as" + +namespace MS +{ + +class UndamaelBreak : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/undamael_hurt.as b/scripts/angelscript/triggers/undamael_hurt.as new file mode 100644 index 00000000..ff0d3612 --- /dev/null +++ b/scripts/angelscript/triggers/undamael_hurt.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/undamael_hurt.as" + +namespace MS +{ + +class UndamaelHurt : CGameScript +{ +} + +} diff --git a/scripts/angelscript/triggers/undamael_pitedge.as b/scripts/angelscript/triggers/undamael_pitedge.as new file mode 100644 index 00000000..b6897c88 --- /dev/null +++ b/scripts/angelscript/triggers/undamael_pitedge.as @@ -0,0 +1,12 @@ +#pragma context server + +#include "other/undamael_pitedge.as" + +namespace MS +{ + +class UndamaelPitedge : CGameScript +{ +} + +} diff --git a/scripts/angelscript/tundra/base_firepit.as b/scripts/angelscript/tundra/base_firepit.as new file mode 100644 index 00000000..e9efddfa --- /dev/null +++ b/scripts/angelscript/tundra/base_firepit.as @@ -0,0 +1,49 @@ +#pragma context server + +#include "monsters/base_npc.as" + +namespace MS +{ + +class BaseFirepit : CGameScript +{ + string TORCH_LIGHT_SCRIPT; + + BaseFirepit() + { + TORCH_LIGHT_SCRIPT = "items/item_torch_light"; + Precache(TORCH_LIGHT_SCRIPT); + } + + void OnSpawn() override + { + SetHealth(1); + SetWidth(40); + SetHeight(64); + SetName("fire pit"); + SetRoam(false); + SetInvincible(2); + SetModel("misc/item_log.mdl"); + } + + void give_torch() + { + ReceiveOffer("accept"); + ClientEvent("persist", "all", TORCH_LIGHT_SCRIPT, GetEntityIndex(GetOwner()), 1); + gave_torch(); + } + + void game_menu_getoptions() + { + if ((ItemExists(param1, "item_torch"))) + { + string reg.mitem.title = "Light with torch"; + string reg.mitem.type = "payment"; + string reg.mitem.data = "item_torch"; + string reg.mitem.callback = "give_torch"; + } + } + +} + +} diff --git a/scripts/angelscript/tundra/firepit1.as b/scripts/angelscript/tundra/firepit1.as new file mode 100644 index 00000000..166aad8e --- /dev/null +++ b/scripts/angelscript/tundra/firepit1.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "tundra/base_firepit.as" + +namespace MS +{ + +class Firepit1 : CGameScript +{ + void gave_torch() + { + UseTrigger("fire1"); + } + +} + +} diff --git a/scripts/angelscript/tundra/firepit2.as b/scripts/angelscript/tundra/firepit2.as new file mode 100644 index 00000000..9da7c7f9 --- /dev/null +++ b/scripts/angelscript/tundra/firepit2.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "tundra/base_firepit.as" + +namespace MS +{ + +class Firepit2 : CGameScript +{ + void gave_torch() + { + UseTrigger("fire2"); + } + +} + +} diff --git a/scripts/angelscript/tundra/firepit3.as b/scripts/angelscript/tundra/firepit3.as new file mode 100644 index 00000000..28c27306 --- /dev/null +++ b/scripts/angelscript/tundra/firepit3.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "tundra/base_firepit.as" + +namespace MS +{ + +class Firepit3 : CGameScript +{ + void gave_torch() + { + UseTrigger("fire3"); + } + +} + +} diff --git a/scripts/angelscript/tundra/firepit4.as b/scripts/angelscript/tundra/firepit4.as new file mode 100644 index 00000000..817b40be --- /dev/null +++ b/scripts/angelscript/tundra/firepit4.as @@ -0,0 +1,17 @@ +#pragma context server + +#include "tundra/base_firepit.as" + +namespace MS +{ + +class Firepit4 : CGameScript +{ + void gave_torch() + { + UseTrigger("fire4"); + } + +} + +} diff --git a/scripts/angelscript/tundra/map_startup.as b/scripts/angelscript/tundra/map_startup.as new file mode 100644 index 00000000..6e75ca2d --- /dev/null +++ b/scripts/angelscript/tundra/map_startup.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "tundra"; + MAP_WEATHER = "clear;snow;snow;snow;snow;clear"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_DIFF", "Levels 30-35 / 700-900hp"); + } + +} + +} diff --git a/scripts/angelscript/tutorial/chest.as b/scripts/angelscript/tutorial/chest.as new file mode 100644 index 00000000..2b96a4f7 --- /dev/null +++ b/scripts/angelscript/tutorial/chest.as @@ -0,0 +1,95 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Chest : CGameScript +{ + int DOOR_OPENED; + int NO_ORE; + int NPC_ECHO_ITEMS; + int WEPS_ATTAINED; + + Chest() + { + WEPS_ATTAINED = 0; + NO_ORE = 1; + NPC_ECHO_ITEMS = 1; + } + + void chest_additems() + { + AddStoreItem(STORENAME, "axes_rsmallaxe", 1, 0); + AddStoreItem(STORENAME, "swords_rsword", 1, 0); + AddStoreItem(STORENAME, "smallarms_rknife", 1, 0); + AddStoreItem(STORENAME, "blunt_hammer1", 1, 0); + AddStoreItem(STORENAME, "bows_treebow", 1, 0); + AddStoreItem(STORENAME, "blunt_gauntlets_leather", 1, 0); + } + + void ext_player_got_item() + { + LogDebug("ext_player_got_item PARAM1 [ GetEntityProperty(param1, "itemname") ] GetEntityName(param2)"); + if ((GetEntityProperty(param1, "itemname")).findFirst("axes_rsmallaxe") >= 0) + { + ShowHelpTip(param2, "generic", "Axe Handling", "Axes are slow, but powerful. They also have|a higher chance to miss than most weapons.|At higher levels, and with two-handed axes, you can|perform a leap attack, hitting all enemies|in an area in front of you for lower damage."); + WEPS_ATTAINED += 1; + ScheduleDelayedEvent(0.1, "axes_msg"); + } + if ((GetEntityProperty(param1, "itemname")).findFirst("swords_rsword") >= 0) + { + ShowHelpTip(param2, "generic", "Swordsmanship", "Swords are the most balanced of melee weapons,|providing average speed, damage, and hit chance.|Swordsmanship increases Strength, Fitness, and,|to a lower degree, agility and awareness."); + WEPS_ATTAINED += 1; + } + if ((GetEntityProperty(param1, "itemname")).findFirst("smallarms_rknife") >= 0) + { + ShowHelpTip(param2, "generic", "Small Arms", "Daggers are fast and accurate, at the cost of damage.|Higher levels allow for a speed burst, enhancing|attack and run speed for a time. Small Arms|increases Strength, Agility, Fitness, and Awareness."); + WEPS_ATTAINED += 1; + } + if ((GetEntityProperty(param1, "itemname")).findFirst("blunt_hammer1") >= 0) + { + ShowHelpTip(param2, "generic", "Blunt Arms", "Blunt arms, like this hammer, are slow, but powerful.|Higher levels allow for a stun attack.|Blunt Arms increases Strength heavily, Fitness moderately|and Agility and Awareness minimally."); + WEPS_ATTAINED += 1; + } + if ((GetEntityProperty(param1, "itemname")).findFirst("bows_treebow") >= 0) + { + ShowHelpTip(param2, "generic", "Archery", "Bows and crossbows allow you to attack your enemy|at range. Better bows allow for more accuracy, range,|and slightly more damage."); + ScheduleDelayedEvent(0.1, "bows_msg"); + WEPS_ATTAINED += 1; + } + if ((GetEntityProperty(param1, "itemname")).findFirst("blunt_gauntlets_leather") >= 0) + { + ShowHelpTip(param2, "generic", "Martial Arts", "Martial Arts uses your fists and feet to deal damage to foes.|Kicking is gained at higher levels, and as you level your martial|arts stat, you will be able to kick enemies away from you and even stun."); + WEPS_ATTAINED += 1; + ScheduleDelayedEvent(0.1, "marts_msg"); + } + ScheduleDelayedEvent(7.0, "trigger_door"); + } + + void trigger_door() + { + if ((DOOR_OPENED)) return; + DOOR_OPENED = 1; + UseTrigger("chest_door"); + } + + void axes_msg() + { + ShowHelpTip(CHEST_USER, "generic", " ", "Axe Handling increases Strength heavily, Fitness|moderately, and Agility and Awareness minimally."); + } + + void bows_msg() + { + ShowHelpTip(CHEST_USER, "generic", " ", "You have an unlimited supply of basic arrows and bolts,|though better ammunition can be bought from vendors,dropped|from monsters, or found in chests around the world of Daragoth.|Crossbows shoots with much higher accuracy, but take longer|to reload. Archery increases Concentration heavily, Strength,|Agility, and Awareness moderately, and Fitness minimally."); + } + + void marts_msg() + { + ShowHelpTip(CHEST_USER, "generic", " ", "Martial Arts increases Strength, Agility, Awareness and Fitness."); + } + +} + +} diff --git a/scripts/angelscript/tutorial/key_chest.as b/scripts/angelscript/tutorial/key_chest.as new file mode 100644 index 00000000..a0160f54 --- /dev/null +++ b/scripts/angelscript/tutorial/key_chest.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class KeyChest : CGameScript +{ + int NO_ORE; + + KeyChest() + { + NO_ORE = 1; + } + + void chest_additems() + { + AddStoreItem(STORENAME, "tutorial_key", 1, 0); + } + +} + +} diff --git a/scripts/angelscript/tutorial/keyhole.as b/scripts/angelscript/tutorial/keyhole.as new file mode 100644 index 00000000..79a4d865 --- /dev/null +++ b/scripts/angelscript/tutorial/keyhole.as @@ -0,0 +1,31 @@ +#pragma context server + +#include "other/base_keyhole.as" + +namespace MS +{ + +class Keyhole : CGameScript +{ + string KEYHOLE_NAME; + string KEYHOLE_TITLE; + string KEY_NAME; + int RETURN_KEY; + + Keyhole() + { + KEY_NAME = "tutorial_key"; + KEYHOLE_NAME = "keyhole"; + KEYHOLE_TITLE = "Use Key"; + RETURN_KEY = 0; + } + + void OnSpawn() override + { + SetProp(GetOwner(), "rendermode", 5); + SetProp(GetOwner(), "renderamt", 0); + } + +} + +} diff --git a/scripts/angelscript/tutorial/map_startup.as b/scripts/angelscript/tutorial/map_startup.as new file mode 100644 index 00000000..e114237a --- /dev/null +++ b/scripts/angelscript/tutorial/map_startup.as @@ -0,0 +1,25 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "tutorial"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + SetGlobalVar("global.map.allownight", 0); + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_NO_STEP_ADJ", 1); + } + +} + +} diff --git a/scripts/angelscript/tutorial/prisoner.as b/scripts/angelscript/tutorial/prisoner.as new file mode 100644 index 00000000..ce0f9131 --- /dev/null +++ b/scripts/angelscript/tutorial/prisoner.as @@ -0,0 +1,223 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Prisoner : CGameScript +{ + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + string CHAT_STEP6; + string CHAT_STEP7; + string CHAT_STEP8; + string CHAT_STEP9; + int CHAT_STEPS; + int DID_ORC_REACTION; + int GET_YE_TORCH; + int GOT_YE_TORCH; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + string NPC_MODEL; + string PLAYER_ID; + int PLAYING_DEAD; + int SAID_GREETING; + int SAID_WALL; + string SOUND_BECKON; + string SOUND_HI; + int WALL_BROKEN; + + Prisoner() + { + NPC_MODEL = "npc/femhuman2.mdl"; + NO_JOB = 1; + NO_RUMOR = 1; + NO_HAIL = 1; + SOUND_BECKON = "npc/vs_nwncomf4_say.wav"; + SOUND_HI = "npc/vs_nwncomf4_hi.wav"; + } + + void OnRepeatTimer() + { + SetRepeatDelay(Random(5.0, 10.0)); + if (!(SAID_GREETING)) + { + EmitSound(GetOwner(), 0, SOUND_BECKON, 10); + bchat_mouth_move(); + } + if (!(BUSY_CHATTING)) + { + } + string CHECK_ORCS = FindEntitiesInSphere("enemy", 256); + if (CHECK_ORCS != "none") + { + } + string NEAREST_NME = GetToken(CHECK_ORCS, 0, ";"); + if (GetEntityRace(NEAREST_NME) == "orc") + { + } + SetMoveDest(NEAREST_NME); + } + + void OnSpawn() override + { + SetName("Kyra"); + SetHealth(1); + SetInvincible(true); + SetNoPush(true); + SetRace("human"); + PLAYING_DEAD = 1; + SetModel(NPC_MODEL); + SetModelBody(0, 0); + SetIdleAnim("idle1"); + SetWidth(30); + SetHeight(96); + SetSayTextRange(1024); + CatchSpeech("say_hi", "hail"); + // TODO: menu.autopen 1 + if (!(true)) return; + ScheduleDelayedEvent(0.1, "face_player"); + } + + void face_player() + { + ScheduleDelayedEvent(1.0, "face_player"); + GetAllPlayers(TOKEN_LIST); + PLAYER_ID = GetToken(TOKEN_LIST, 0, ";"); + if ((IsEntityAlive(PLAYER_ID))) + { + face_speaker(PLAYER_ID); + } + if (GetEntityRange(PLAYER_ID) < 96) + { + if (!(SAID_GREETING)) + { + } + player_greeting(); + } + } + + void game_menu_getoptions() + { + if ((BUSY_CHATTING)) return; + if (!(GET_YE_TORCH)) return; + if ((GOT_YE_TORCH)) return; + string reg.mitem.title = "Ask for torch"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_torch"; + face_speaker(GetEntityIndex(param1)); + } + + void say_torch() + { + string TORCH_RECIPIENT = param1; + if (!(IsValidPlayer(param1))) + { + string PARAM1 = GetEntityIndex("ent_lastspoke"); + } + PlayAnim("critical", "give_shot"); + // TODO: offer TORCH_RECIPIENT item_torch + GOT_YE_TORCH = 1; + CHAT_STEPS = 5; + CHAT_STEP = 0; + CHAT_STEP1 = "Here, you can have it. Maybe you can light it."; + CHAT_STEP2 = "Great! That's better."; + CHAT_STEP3 = "I was feeling around the walls here"; + CHAT_STEP4 = "One area was missing a stone, and made a hollow noise when I knocked on it."; + CHAT_STEP5 = "Find it, and give it a whack with that torch!"; + chat_loop(); + NO_HAIL = 0; + } + + void say_hi() + { + if (!(WALL_BROKEN)) + { + SayText("You have the torch , Adventurer. Find the weak spot."); + } + else + { + SayText("Hurry! They will notice soon!"); + } + } + + void player_greeting() + { + CHAT_STEPS = 9; + CHAT_STEP = 0; + CHAT_STEP1 = "Hello, Adventurer!"; + CHAT_STEP2 = "You've been out for quite a while."; + CHAT_STEP3 = "I woke up a few minutes ago, with you on the other side of the cell."; + CHAT_STEP4 = "We're in a holding cell, as you can see."; + CHAT_STEP5 = "Last I saw were bandits before I was clocked on the head."; + CHAT_STEP6 = "I overheard the guards speaking about an Orc invasion."; + CHAT_STEP7 = "It's the perfect time to escape!"; + CHAT_STEP8 = "It's so dark in here!"; + CHAT_STEP9 = "I found this torch in a corner, but I can't seem to light it!"; + chat_loop(); + CatchSpeech("say_torch", "torch"); + GET_YE_TORCH = 1; + SAID_GREETING = 1; + EmitSound(GetOwner(), 0, SOUND_HI, 10); + } + + void chat_loop() + { + convo_anim(); + if (CHAT_STEP == 9) + { + SendInfoMsg("all", "Communication Press the use key (Default e) on Kyra to bring up her chat menu."); + ScheduleDelayedEvent(10.0, "summon_orcs"); + } + } + + void summon_orcs() + { + UseTrigger("orc_attack"); + ScheduleDelayedEvent(1.0, "orc_reaction"); + } + + void wall_broken() + { + WALL_BROKEN = 1; + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(5.0, "wall_broken"); + } + if ((BUSY_CHATTING)) return; + if ((SAID_WALL)) return; + CHAT_STEPS = 4; + CHAT_STEP = 0; + CHAT_STEP1 = "Great job! Now we can get out of here."; + CHAT_STEP2 = "Though I think I'll hold back for now"; + CHAT_STEP3 = "I'll distract them so you can escape."; + CHAT_STEP4 = "Go on! I'll be fine!"; + chat_loop(); + SAID_WALL = 1; + } + + void orc_reaction() + { + if ((BUSY_CHATTING)) + { + ScheduleDelayedEvent(5.0, "orc_reaction"); + } + if ((BUSY_CHATTING)) return; + if ((DID_ORC_REACTION)) return; + DID_ORC_REACTION = 1; + string MY_Z = GetEntityProperty(GetOwner(), "origin.z"); + SetMoveDest(Vector3(2300, 3360, MY_Z)); + PlayAnim("critical", "fear1"); + SayText("By the gods! The orcs are attacking!"); + } + +} + +} diff --git a/scripts/angelscript/tutorial/rat.as b/scripts/angelscript/tutorial/rat.as new file mode 100644 index 00000000..630e7f97 --- /dev/null +++ b/scripts/angelscript/tutorial/rat.as @@ -0,0 +1,46 @@ +#pragma context server + +#include "monsters/giantrat.as" + +namespace MS +{ + +class Rat : CGameScript +{ + string DROP_ITEM1; + float DROP_ITEM1_CHANCE; + int HUNT_AGRO; + int NPC_GIVE_EXP; + int ORIG_HUNT_AGRO; + + Rat() + { + } + + void OnSpawn() override + { + SetHealth(4); + SetWidth(32); + SetHeight(32); + SetName("Angry Giant Rat"); + SetRoam(true); + SetHearingSensitivity(10); + NPC_GIVE_EXP = 3; + SetRace("demon"); + SetModel("monsters/giant_rat.mdl"); + SetModelBody(1, 0); + SetIdleAnim(ANIM_IDLE); + SetMoveAnim(ANIM_WALK); + } + + void OnPostSpawn() override + { + HUNT_AGRO = 1; + ORIG_HUNT_AGRO = 1; + DROP_ITEM1 = DROP_ITEM1; + DROP_ITEM1_CHANCE = 0.0; + } + +} + +} diff --git a/scripts/angelscript/tutorial/slave.as b/scripts/angelscript/tutorial/slave.as new file mode 100644 index 00000000..8d4ca334 --- /dev/null +++ b/scripts/angelscript/tutorial/slave.as @@ -0,0 +1,106 @@ +#pragma context server + +#include "monsters/base_npc.as" +#include "monsters/base_chat.as" + +namespace MS +{ + +class Slave : CGameScript +{ + string ANIM_IDLE; + string ANIM_RUN; + string ANIM_WALK; + int ASKED_OK; + int CHAT_STEP; + string CHAT_STEP1; + string CHAT_STEP2; + string CHAT_STEP3; + string CHAT_STEP4; + string CHAT_STEP5; + int CHAT_STEPS; + int DEAD_MASTER; + int NO_HAIL; + int NO_JOB; + int NO_RUMOR; + string NPC_MODEL; + + Slave() + { + NPC_MODEL = "npc/human1.mdl"; + ANIM_IDLE = "crouch_idle"; + ANIM_WALK = "walk"; + ANIM_RUN = "run"; + Precache(NPC_MODEL); + NO_JOB = 1; + NO_RUMOR = 1; + ASKED_OK = 0; + NO_HAIL = 1; + } + + void OnSpawn() override + { + SetName("Doran"); + SetHealth(1); + SetInvincible(true); + SetNoPush(true); + SetRace("beloved"); + SetModel(NPC_MODEL); + SetModelBody(0, 4); + SetModelBody(1, 5); + SetWidth(30); + SetHeight(96); + SetSayTextRange(1024); + // TODO: menu.autopen 1 + ScheduleDelayedEvent(0.1, "be_scared"); + } + + void be_scared() + { + SetIdleAnim(ANIM_IDLE); + PlayAnim("once", ANIM_IDLE); + } + + void game_menu_getoptions() + { + if ((ASKED_OK)) return; + if ((DEAD_MASTER)) + { + string reg.mitem.title = "Are you okay?"; + string reg.mitem.type = "callback"; + string reg.mitem.callback = "say_ok"; + } + } + + void say_ok() + { + ANIM_IDLE = "idle1"; + SetIdleAnim(ANIM_IDLE); + PlayAnim("critical", ANIM_IDLE); + if ((IsValidPlayer(param1))) + { + face_speaker(GetEntityIndex(param1)); + } + if ((IsValidPlayer("ent_lastspoke"))) + { + face_speaker(GetEntityIndex("ent_lastspoke")); + } + CHAT_STEPS = 5; + CHAT_STEP = 0; + CHAT_STEP1 = "Yes, I'm fine now, adventurer."; + CHAT_STEP2 = "Thanks to you."; + CHAT_STEP3 = "...There is way out of here."; + CHAT_STEP4 = "I believe there is a secret passage in the, er, LATE slave master's hut."; + CHAT_STEP5 = "There's a cage in there I've never seen him use, and a cool wind that blows from it."; + chat_loop(); + ASKED_OK = 1; + } + + void slavemaster_dies() + { + DEAD_MASTER = 1; + } + +} + +} diff --git a/scripts/angelscript/tutorial/slavemaster.as b/scripts/angelscript/tutorial/slavemaster.as new file mode 100644 index 00000000..ab1b411e --- /dev/null +++ b/scripts/angelscript/tutorial/slavemaster.as @@ -0,0 +1,29 @@ +#pragma context server + +#include "monsters/bandit.as" + +namespace MS +{ + +class Slavemaster : CGameScript +{ + int ATTACK1_DAMAGE; + int NPC_GIVE_EXP; + int WEAPON; + + Slavemaster() + { + WEAPON = 3; + } + + void swordey() + { + if (!(WEAPON == 3)) return; + SetName("Slave Master"); + ATTACK1_DAMAGE = 1; + NPC_GIVE_EXP = 0; + } + +} + +} diff --git a/scripts/angelscript/undercrypts/dq_undercrypts_tnt.as b/scripts/angelscript/undercrypts/dq_undercrypts_tnt.as new file mode 100644 index 00000000..051aa2cd --- /dev/null +++ b/scripts/angelscript/undercrypts/dq_undercrypts_tnt.as @@ -0,0 +1,174 @@ +#pragma context server + +#include "dq/quest_dwarf.as" +#include "dq/quests/dq_fetch_items.as" +#include "dq/dq_base_menus.as" + +namespace MS +{ + +class DqUndercryptsTnt : CGameScript +{ + int AM_INVINCIBLE; + int CHAT_AUTO_FACE; + string CHAT_CONV_ANIMS; + int CHAT_FACE_ON_USE; + int CHAT_NEVER_INTERRUPT; + int CHAT_USE_CONV_ANIMS; + int DID_TNT_COMMENT; + string INIT_IDLE_MODE; + int IS_LEADER; + string LANTERN_COLOR; + int MONSTER_MODEL; + int NEW_HEIGHT; + string NEW_RACE; + int NEW_WIDTH; + int QUEST_ACTIVE_COMBATANT; + string QUEST_ACTIVE_TEXT; + string QUEST_ASKING_TEXT; + int QUEST_COMBATANT; + string QUEST_COMPLETE_TEXT; + string QUEST_DATA1; + string QUEST_DATA2; + int QUEST_DATA3; + int QUEST_EXPERT_COMBATANT; + string QUEST_FADE_ON_COMPLETE; + int QUEST_FOLLOWER; + string QUEST_GIVER_NAME; + int QUEST_REWARD_ALL; + string QUEST_REWARD_EVENT; + string QUEST_REWARD_TYPE; + string QUEST_TYPE; + string QUEST_WAITING_TEXT; + int SET_SIEGE_MODE; + string SUBMODEL_GROUPS; + int USE_LANTERN; + int USE_SKIN; + + DqUndercryptsTnt() + { + QUEST_TYPE = "fetch_items"; + QUEST_DATA1 = "qst_tnt_"; + QUEST_DATA2 = "tnt;Blasted Blasting Sticks"; + QUEST_DATA3 = 0; + QUEST_REWARD_TYPE = "script"; + QUEST_REWARD_EVENT = "quest_tnt_complete"; + QUEST_REWARD_ALL = 0; + QUEST_WAITING_TEXT = "Hail."; + QUEST_ASKING_TEXT = "I will find those explosives."; + QUEST_ACTIVE_TEXT = "(Explosives found: %n/%r)"; + QUEST_COMPLETE_TEXT = "(Collect Reward)"; + QUEST_FADE_ON_COMPLETE = "fade"; + QUEST_GIVER_NAME = "Halsof"; + NEW_RACE = "beloved"; + AM_INVINCIBLE = 1; + NEW_WIDTH = 32; + NEW_HEIGHT = 32; + MONSTER_MODEL = 0; + SUBMODEL_GROUPS = "0;0;1"; + USE_SKIN = 4; + SET_SIEGE_MODE = 0; + QUEST_COMBATANT = 0; + QUEST_ACTIVE_COMBATANT = 0; + QUEST_FOLLOWER = 0; + IS_LEADER = 0; + USE_LANTERN = 1; + LANTERN_COLOR = "(128,64,0)"; + INIT_IDLE_MODE = "sitting"; + QUEST_EXPERT_COMBATANT = 0; + CHAT_AUTO_FACE = 0; + CHAT_FACE_ON_USE = 0; + CHAT_NEVER_INTERRUPT = 1; + CHAT_CONV_ANIMS = "anim_sit_convo;anim_sit_idle_lantern"; + CHAT_USE_CONV_ANIMS = 1; + QUEST_REWARD_ALL = 1; + } + + void OnSpawn() override + { + SetNoPush(true); + SetInvincible(true); + SetRace("beloved"); + SetMonsterClip(0); + SetName("halsof"); + SetModelBody(2, 1); + } + + void quest_intro() + { + chat_now("Ooohh... Hail there yourself. Finally, something that isn't bleedin' mad or undead."); + chat_now("The three of us apparently dug a wrong path, fell, and got outselves stuck down here."); + chat_now("Well, the two of us now... We woulda blown our way out through that old cart tunnel and been half way back to Gate City by now, but..."); + chat_now("...our 'explosives expert' Brynkahd, bloody blast powder sniffer that he is, just came apart after seeing all the horrors lurking around here."); + chat_now("Thought he was workin on setting the bombs up, but apparently he was just sniffing powder until he finally blew his brains out!"); + chat_now("He attacked me, and Gesoth over there, and then ran off with all the blasted blasting sticks."); + chat_now("Tried to chase him, but the beasts got between him and us, and... We had to run back here for cover."); + chat_now("If ya find his corpse, or our explosives out there, maybe ya could bring em back to us?"); + chat_now("I mean just the boom sticks - Brynkahd can rot out there for all I care.", 3.0, "anim_sit_convo", "resend_menu"); + EmitSound(GetOwner(), 2, "voices/dwarf/vs_nx0drogm_hi.wav", 10); + } + + void resend_menu() + { + OpenMenu(OFFER_MENU_ID); + } + + void quest_activate() + { + chat_now("Thanks. Think we'll be fine waitin here for awhile, got this place borded up pretty good."); + EmitSound(GetOwner(), 2, "voices/dwarf/vs_nx0drogm_yes.wav", 10); + } + + void quest_complete() + { + chat_now("Thank ye! That'll do us just fine. Take this for yer troubles..."); + EmitSound(GetOwner(), 2, "voices/dwarf/vs_nx0drogm_vict.wav", 10); + custom_quest_complete(); + } + + void do_chat_ext_recieve_quest_item() + { + if (QUEST_MODE == "active") + { + if (!(CHAT_BUSY)) + { + chat_now("Yup, that's what we're lookin for. Keep em coming! We'll need at least a dozen bundles."); + EmitSound(GetOwner(), 2, "none", 10); + } + } + } + + void ext_receive_quest_item() + { + ScheduleDelayedEvent(0.1, "do_chat_ext_recieve_quest_item"); + } + + void custom_quest_complete() + { + UseTrigger("mm_qminers_done"); + CallExternal(FindEntityByName("gesoth"), "ext_remove"); + } + + void ext_found_nearby_tnt() + { + if ((DID_TNT_COMMENT)) return; + DID_TNT_COMMENT = 1; + EmitSound(GetOwner(), 2, "voices/dwarf/vs_nx0drogm_haha.wav", 10); + chat_now("By Urdual's left nostril! How'd we miss that one!?"); + ScheduleDelayedEvent(3.0, "found_nearby_tnt2"); + } + + void found_nearby_tnt2() + { + CallExternal(FindEntityByName("gesoth"), "ext_found_tnt"); + ScheduleDelayedEvent(3.0, "found_nearby_tnt3"); + } + + void found_nearby_tnt3() + { + chat_now("Bloody... Bah. Bring it down and I'll add it to the collection."); + } + +} + +} diff --git a/scripts/angelscript/undercrypts/gesoth.as b/scripts/angelscript/undercrypts/gesoth.as new file mode 100644 index 00000000..e74cb5f9 --- /dev/null +++ b/scripts/angelscript/undercrypts/gesoth.as @@ -0,0 +1,83 @@ +#pragma context server + +#include "monsters/base_chat_array.as" + +namespace MS +{ + +class Gesoth : CGameScript +{ + int CHAT_AUTO_FACE; + string CHAT_CONV_ANIMS; + int CHAT_FACE_ON_USE; + int CHAT_NEVER_INTERRUPT; + int CHAT_USE_CONV_ANIMS; + string CONVO_IDX; + string NEXT_NAY; + int PLAYING_DEAD; + int QUEST_REWARD_ALL; + + Gesoth() + { + CHAT_AUTO_FACE = 0; + CHAT_FACE_ON_USE = 0; + CHAT_NEVER_INTERRUPT = 1; + CHAT_CONV_ANIMS = "anim_sit_convo;anim_sit_idle_lantern"; + CHAT_USE_CONV_ANIMS = 1; + QUEST_REWARD_ALL = 1; + } + + void OnSpawn() override + { + SetName("Gesoth"); + SetName("gesoth"); + SetModel("dwarf/male1.mdl"); + SetWidth(32); + SetHeight(48); + SetRoam(false); + SetHealth(1000); + SetHearingSensitivity(0); + SetRace("beloved"); + SetSayTextRange(1024); + SetNoPush(true); + SetInvincible(true); + PLAYING_DEAD = 1; + SetIdleAnim("anim_sit_idle_nolantern"); + SetProp(GetOwner(), "skin", 1); + SetMenuAutoOpen(1); + SetMonsterClip(0); + } + + void game_menu_getoptions() + { + ReturnData("abortmenu"); + PlayAnim("critical", "anim_sit_idle_nolantern"); + if (CONVO_IDX == 0) + { + chat_now("Uggh... Talk to Halsof, he's the brains of this doomed outfit."); + } + if (CONVO_IDX == 1) + { + CONVO_IDX = 0; + chat_now("Leave me alone... Talk to Halsof."); + } + CONVO_IDX += 1; + if (!(GetGameTime() > NEXT_NAY)) return; + NEXT_NAY = GetGameTime(); + NEXT_NAY += 3.0; + EmitSound(GetOwner(), 2, "voices/dwarf/vs_ndwarfm1_no.wav", 10); + } + + void ext_remove() + { + DeleteEntity(GetOwner(), true); // fade out + } + + void ext_found_tnt() + { + chat_now("Eh, it may have been me who left that there."); + } + +} + +} diff --git a/scripts/angelscript/world.as b/scripts/angelscript/world.as new file mode 100644 index 00000000..40ebe0fd --- /dev/null +++ b/scripts/angelscript/world.as @@ -0,0 +1,26 @@ +#pragma context server + +#include "beta_date.as" +#include "world/sv_world.as" +#include "world/server/commands.as" +#include "world/server/time.as" +#include "world/server/time_vote.as" +#include "world/server/player_vote.as" +#include "world/server/help.as" +#include "world/server/maps.as" +#include "$currentmapscript.as" +#include "world/cl_world.as" + +namespace MS +{ + +class World : CGameScript +{ + World() + { + SetName("msworld"); + } + +} + +} diff --git a/scripts/angelscript/world/cl_world.as b/scripts/angelscript/world/cl_world.as new file mode 100644 index 00000000..1a800ff9 --- /dev/null +++ b/scripts/angelscript/world/cl_world.as @@ -0,0 +1,64 @@ +#pragma context server + +namespace MS +{ + +class ClWorld : CGameScript +{ + void game_newlevel() + { + SetGlobalVar("global.map.allownight", 1); + testmap_newlevel(param1); + } + + void testmap_newlevel() + { + if (param1 == "test") + { + string reg.texture.name = "black"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.1"; + int reg.texture.reflect.range = 300; + int reg.texture.water = 1; + // TODO: registertexture + string reg.texture.name = "Drapery2"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.8"; + int reg.texture.reflect.range = 512; + int reg.texture.water = 0; + int reg.texture.reflect.world = 1; + // TODO: registertexture + } + if (param1 == "simple") + { + string reg.texture.name = "black"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.8"; + int reg.texture.reflect.range = 512; + int reg.texture.water = 0; + // TODO: registertexture + } + string reg.texture.name = "reflect_full"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.5"; + int reg.texture.reflect.range = 1024; + int reg.texture.reflect.world = 1; + int reg.texture.water = 1; + // TODO: registertexture + string reg.texture.name = "reflective"; + int reg.texture.reflect = 1; + int reg.texture.reflect.blend = 1; + string reg.texture.reflect.color = "1;1;1;0.8"; + int reg.texture.reflect.range = 512; + int reg.texture.reflect.world = 0; + int reg.texture.water = 0; + // TODO: registertexture + } + +} + +} diff --git a/scripts/angelscript/world/server/commands.as b/scripts/angelscript/world/server/commands.as new file mode 100644 index 00000000..f4c0407e --- /dev/null +++ b/scripts/angelscript/world/server/commands.as @@ -0,0 +1,775 @@ +#pragma context server + +#include "developer/devcmds.as" + +namespace MS +{ + +class Commands : CGameScript +{ + int CAN_VOTE; + string CREST_SELECTION; + float FREQ_WEATHER; + int HIGH_IDX; + int HIGH_SCORE; + int LEADING_GUILDS; + string LTNG_SND; + string POINTS_NLIST; + string POINTS_PLIST; + string POINTS_TNLIST; + string POINTS_TPLIST; + string RESIST_NAMES; + string RESIST_VALUES; + string SCRIPT_SFX1; + string SOUND_RAIN; + string SPRITE_MIST; + string SPRITE_RIPPLE; + string SPRITE_SPLASH; + string TEST_PLR; + int TIMESET_DELAY; + string TIP_TEXT; + int WEATHERSET_DELAY; + string WEATHER_SPRITE; + int l.daystart.secs; + + Commands() + { + TIMESET_DELAY = 0; + WEATHERSET_DELAY = 0; + FREQ_WEATHER = 10.0; + WEATHER_SPRITE = "rain.spr"; + SPRITE_SPLASH = "rain_splash.spr"; + SPRITE_MIST = "rain_mist.spr"; + SPRITE_RIPPLE = "rain_ripple.spr"; + SOUND_RAIN = "weather/rain.wav"; + SCRIPT_SFX1 = "effects/sfx_lightning"; + LTNG_SND = "weather/Storm_exclamation.wav"; + Precache(SCRIPT_SFX1); + Precache(LTNG_SND); + Precache(WEATHER_SPRITE); + Precache(SPRITE_SPLASH); + Precache(SPRITE_MIST); + Precache(SPRITE_RIPPLE); + Precache(SOUND_RAIN); + Precache("snow1.spr"); + Precache("amb/wind.wav"); + Precache("char_breath.spr"); + } + + void game_precache() + { + if (!(SCRIPT_TOKENS != "SCRIPT_TOKENS")) return; + for (int i = 0; i < GetTokenCount(SCRIPT_TOKENS, ";"); i++) + { + dev_precache(); + } + } + + void dev_precache() + { + string SCRIPT_FILE = GetToken(SCRIPT_TOKENS, i, ";"); + Precache(SCRIPT_FILE); + } + + void game_playercmd() + { + if ((G_SPECIAL_COMMANDS)) + { + if (StringToLower(GetMapName()) == "ms_soccer") + { + if ((param3).findFirst("score") == 0) + { + CallExternal(FindEntityByName("soccer_ball"), "ext_say_scores"); + return; + } + if ((param3).findFirst("ball") == 0) + { + CallExternal(FindEntityByName("soccer_ball"), "ext_send_menu", GetEntityIndex("ent_currentplayer")); + return; + } + } + } + if ((param1).findFirst("/") == 0) + { + int IS_SLASH = 1; + string SLASH_COMMAND = StringToLower(param1); + } + if ((IS_SLASH)) + { + if (SLASH_COMMAND == "/stuck") + { + string SPAWN_POINT = GetEntityProperty("ent_currentplayer", "scriptvar"); + string CUR_LOC = GetEntityOrigin("ent_currentplayer"); + if (Distance(CUR_LOC, SPAWN_POINT) > 256) + { + SendColoredMessage("ent_currentplayer", "[/STUCK]: You are too far from your spawn point to use /stuck."); + LogMessage("ent_currentplayer [/STUCK]: You are too far from your spawn point to use /stuck."); + CallExternal("ent_currentplayer", "ext_stuck_adj"); + } + else + { + string SPAWN_NAME = GetPlayerQuestData("ent_currentplayer", "d"); + // TODO: tospawn ent_currentplayer SPAWN_NAME + SendPlayerMessage("ent_currentplayer", "Moving you to another spawn point..."); + LogMessage("ent_currentplayer Moving you to another spawn point..."); + CallExternal("ent_currentplayer", "delay_to_ms_player_spawn"); + } + } + if (SLASH_COMMAND == "/halo") + { + CallExternal("ent_currentplayer", "toggle_halo"); + } + if (SLASH_COMMAND == "/devlo") + { + CallExternal("ent_currentplayer", "toggle_dev_halo"); + } + return; + } + if (StringToLower(param1) == "motd") + { + CallExternal("ent_currentplayer", "force_motd"); + } + else + { + if (param1 == "resetbank") + { + LogMessage("ent_currentplayer Reset bank command recieved..."); + CallExternal("ent_currentplayer", "ext_reset_bank"); + } + else + { + if (param1 == "petname") + { + string PET_TYPES = GetPlayerQuestData("ent_currentplayer", "pets"); + if (PET_TYPES == 0) + { + LogMessage("ent_currentplayer " + PETNAME: + " You have no pets."); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if ((param2).findFirst("PARAM") == 0) + { + LogMessage("ent_currentplayer " + PETNAME: + " Usage1: petname < name>"); + LogMessage("ent_currentplayer " + PETNAME: + " Usage2: petname < pet_type> < name>"); + LogMessage("ent_currentplayer " + PETNAME: + "Available Pet Types: " + PET_TYPES); + LogMessage("ent_currentplayer " + PETNAME: + " - Use alphanumerics only!"); + LogMessage("ent_currentplayer " + PETNAME: + "- If desired name requires spaces , use " + /* TODO: $quote */ $quote("quotes")); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if ((param3).findFirst("PARAM") == 0) + { + string L_NEW_NAME = param2; + string PET_TYPE_TO_NAME = GetToken(PET_TYPES, 0, ";"); + } + else + { + string PET_TYPE_TO_NAME = param2; + string L_NEW_NAME = param3; + } + if ((PET_TYPES).findFirst(PET_TYPE_TO_NAME) >= 0) + { + int L_TYPE_VALID = 1; + } + if (!(L_TYPE_VALID)) + { + LogMessage("ent_currentplayer " + PETNAME: + "You have no pets of this type. " + PET_TYPE_TO_NAME); + LogMessage("ent_currentplayer " + PETNAME: + "Available Pet Types: " + PET_TYPES); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if ((L_NEW_NAME).findFirst("%") >= 0) + { + int L_INVALID_NAME = 1; + } + if ((L_NEW_NAME).findFirst("/") >= 0) + { + int L_INVALID_NAME = 1; + } + if ((L_NEW_NAME).findFirst("\") >= 0) + { + int L_INVALID_NAME = 1; + } + if ((L_INVALID_NAME)) + { + LogMessage("ent_currentplayer " + PETNAME: + " Inavalid name - alphanumerics and spaces only , please"); + } + if (!(L_INVALID_NAME)) + { + } + string Q_NAME = PET_TYPE_TO_NAME; + Q_NAME += "_name"; + SetPlayerQuestData("ent_currentplayer", Q_NAME); + LogMessage("ent_currentplayer " + PETNAME: + PET_TYPE_TO_NAME + "new name is: " + L_NEW_NAME); + CallExternal("all", "ext_companion_update_name"); + } + else + { + if (param1 == "listpoints") + { + CALLING_PLAYER = GetEntityIndex("ent_currentplayer"); + do_list_points(); + } + else + { + if (param1 == "listresist") + { + CALLING_PLAYER = GetEntityIndex("ent_currentplayer"); + do_list_resists(); + } + else + { + if (param1 == "flip") + { + string MY_NAME = GetEntityName("ent_currentplayer"); + MY_NAME += " Flips a Gold Piece"; + int DIE_ROLL = RandomInt(1, 2); + if (DIE_ROLL == 1) + { + SendInfoMsg("all", MY_NAME + " It comes up HEADS"); + LogMessage("ent_currentplayer Your coin comes up " + HEADS); + } + if (DIE_ROLL == 2) + { + SendInfoMsg("all", MY_NAME + " It comes up TAILS"); + LogMessage("ent_currentplayer Your coin comes up " + TAILS); + } + } + else + { + if (param1 == "roll") + { + string D_SIDES = param2; + if (D_SIDES == "PARAM2") + { + int D_SIDES = 20; + } + roll_die(D_SIDES); + } + else + { + if (param1 == "day") + { + CallExternal("ent_currentplayer", "ext_tod_lock", "day"); + LogMessage("ent_currentplayer Shifting your time of day effects to day."); + LogMessage("ent_currentplayer This does not affect world time nor other players."); + ClientEvent("update", "ent_currentplayer", "const.localplayer.scriptID", "environment_change", "day"); + } + else + { + if (param1 == "help") + { + if (param2 == "PARAM2") + { + } + CallExternal("ent_currentplayer", "help_toggle"); + } + else + { + if (param1 == "dusk") + { + CallExternal("ent_currentplayer", "ext_tod_lock", "aft"); + LogMessage("ent_currentplayer Shifting your time of day effects to dusk."); + LogMessage("ent_currentplayer This does not affect world time nor other players."); + ClientEvent("update", "ent_currentplayer", "const.localplayer.scriptID", "environment_change", "aft"); + } + else + { + if (param1 == "night") + { + CallExternal("ent_currentplayer", "ext_tod_lock", "night"); + LogMessage("ent_currentplayer Shifting your time of day effects to night."); + LogMessage("ent_currentplayer This does not affect world time nor other players."); + ClientEvent("update", "ent_currentplayer", "const.localplayer.scriptID", "environment_change", "night"); + } + else + { + if (param1 == "clearsky") + { + if (G_WEATHER_LOCK != 0) + { + LogMessage("ent_currentplayer Weather is currently locked."); + } + if (G_WEATHER_LOCK == 0) + { + } + CallExternal("ent_currentplayer", "ext_weather_set_clear"); + } + else + { + if (param1 == "setweather") + { + if (G_WEATHER_LOCK != 0) + { + LogMessage("ent_currentplayer Weather is currently locked."); + } + if (G_WEATHER_LOCK == 0) + { + } + CallExternal("ent_currentplayer", "ext_weather_manual_change", param2); + } + else + { + if (param1 == "time") + { + LogMessage("ent_currentplayer == " + TIME: + CURRENT_TIME + " =="); + SendPlayerMessage("ent_currentplayer", "== " + TIME: + CURRENT_TIME + " =="); + if ((G_DEVELOPER_MODE)) + { + int L_DO_FN_TIME = 1; + } + if (("game.central")) + { + int L_DO_FN_TIME = 1; + } + if ((L_DO_FN_TIME)) + { + } + string L_MONTH = "game.time.month"; + string L_DAY = "game.time.day"; + string L_YEAR = "game.time.year"; + string L_HOUR = "game.time.hour"; + string L_MIN = "game.time.minute"; + string L_OUT_MSG = "(FN Time: "; + L_OUT_MSG += GetToken("???;JAN;FEB;MAR;APR;MAY;JUN;JUL;AUG;SEP;OCT;NOV;DEC", L_MONTH, ";"); + L_OUT_MSG += L_YEAR; + L_OUT_MSG += _; + L_OUT_MSG += L_DAY; + L_OUT_MSG += " "; + L_OUT_MSG += L_HOUR; + L_OUT_MSG += ":"; + L_OUT_MSG += L_MIN; + L_OUT_MSG += ")"; + LogMessage("ent_currentplayer " + L_OUT_MSG); + } + else + { + if (param1 == "xyz") + { + string P_LOC = GetEntityOrigin("ent_currentplayer"); + string P_X = (P_LOC).x; + string P_Y = (P_LOC).y; + string P_TZ = (P_LOC).z; + int P_TZ = int(P_TZ); + string P_Z = /* TODO: $get_ground_height */ $get_ground_height(P_LOC); + string P_ANG = GetEntityAngles("ent_currentplayer"); + string P_PITCH = /* TODO: $vec.pitch */ $vec.pitch(P_ANG); + string P_YAW = /* TODO: $vec.yaw */ $vec.yaw(P_ANG); + string P_ROLL = /* TODO: $vec.roll */ $vec.roll(P_ANG); + int P_X = int(P_X); + int P_Y = int(P_Y); + int P_Z = int(P_Z); + int P_PITCH = int(P_PITCH); + int P_YAW = int(P_YAW); + int P_ROLL = int(P_ROLL); + LogMessage("ent_currentplayer Floor: P_X P_Y P_Z Center: P_X P_Y P_TZ angles: P_PITCH P_YAW P_ROLL"); + SendPlayerMessage("ent_currentplayer", "Floor: P_X P_Y P_Z Center: P_X P_Y P_TZ angles: P_PITCH P_YAW P_ROLL"); + } + else + { + if (param1 == "betadate") + { + give_timestamp(); + } + else + { + if (param1 == "settime") + { + if ((G_DEVELOPER_MODE)) + { + TIMESET_DELAY = 0; + } + if ((TIMESET_DELAY)) + { + LogMessage("ent_currentplayer You must wait a bit before changing the time again."); + } + if (!(TIMESET_DELAY)) + { + } + TIMESET_DELAY = 1; + FREQ_WEATHER("reset_timeset_delay"); + set_time(param2, param3); + CallExternal("ent_currentplayer", "ext_tod_lock", "none"); + } + else + { + if (param1 == "show_health") + { + string TOGGLE_MODE = param2; + if (TOGGLE_MODE != "0") + { + if (TOGGLE_MODE != "1") + { + string TOGGLE_MODE = "toggle"; + } + } + CallExternal(GetEntityIndex("ent_currentplayer"), "console_health_toggle", TOGGLE_MODE); + } + else + { + if (param1 == "wallpapercrest") + { + if (GetPlayerAuthId("ent_currentplayer") == "STEAM_0:0:15435276") + { + string CREST_NAME = "crest_w_1"; + if ((ItemExists("ent_currentplayer", CREST_NAME))) + { + LogMessage("ent_currentplayer You already have your wallpaper crest."); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + LogMessage("ent_currentplayer Granting Avocado's wallpaper crest"); + CallExternal(GAME_MASTER, "give_item", GetEntityIndex("ent_currentplayer"), CREST_NAME); + } + if (GetPlayerAuthId("ent_currentplayer") == "STEAM_0:1:7087443") + { + string CREST_NAME = "crest_w_2"; + if ((ItemExists("ent_currentplayer", CREST_NAME))) + { + LogMessage("ent_currentplayer You already have your wallpaper crest."); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + LogMessage("ent_currentplayer Granting Lockdown's wallpaper crest"); + CallExternal(GAME_MASTER, "give_item", GetEntityIndex("ent_currentplayer"), CREST_NAME); + } + } + else + { + if (param1 == "health_bars") + { + string TOGGLE_MODE = param2; + if (TOGGLE_MODE != "0") + { + if (TOGGLE_MODE != "1") + { + string TOGGLE_MODE = "toggle"; + } + } + CallExternal(GetEntityIndex("ent_currentplayer"), "healthbar_toggle", TOGGLE_MODE); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + if (param1 == "dridje_sphere") + { + if (GetPlayerAuthId("ent_currentplayer") == "STEAM_0:1:4985228") + { + } + string L_SPHERE = FindEntityByName("dridje_sphere"); + if (((L_SPHERE !is null))) + { + if (!(WARNED_DRIDJE)) + { + WARNED_DRIDJE = 1; + LogMessage("ent_currentplayer One sphere at a time , please. ; )"); + return; + } + else + { + WARNED_DRIDJE = 0; + LogMessage("ent_currentplayer " + I + "said... " + ONE + "at a " + TIME.); + XDoDamage("ent_currentplayer", "direct", 42069, 100, GAME_MASTER, GAME_MASTER, "none", "apostle_effect"); + return; + } + } + string SPAWN_POINT = GetEntityOrigin("ent_currentplayer"); + string MY_ANGLES = GetEntityAngles("ent_currentplayer"); + string MY_YAW = /* TODO: $vec.yaw */ $vec.yaw(MY_ANGLES); + SPAWN_POINT += /* TODO: $relpos */ $relpos(Vector3(0, MY_YAW, 0), Vector3(0, 64, 0)); + SpawnNPC("monsters/companion/dridje", SPAWN_POINT, ScriptMode::Legacy); // params: GetEntityIndex("ent_currentplayer") + } + else + { + if (param1 == "msversion") + { + LogMessage("ent_currentplayer " + MS.DLL + " reports version game.revision central game.central"); + } + } + if (param1 == "gimmecrest") + { + do_crest(GetEntityIndex("ent_currentplayer")); + } + else + { + if (param1 == "gimmestaff") + { + if (("game.central")) + { + string L_ME = GetPlayerAuthId("ent_currentplayer"); + if ((G_DEVSTAFF_OWNERS).findFirst(L_ME) >= 0) + { + return; + } + } + CallExternal(GAME_MASTER, "give_item", GetEntityIndex("ent_currentplayer"), "dev_staff"); + } + } + if (param1 == ".") + { + string OUT_PAR1 = param2; + string OUT_PAR2 = param3; + string OUT_PAR3 = param4; + string OUT_PAR4 = param5; + string OUT_PAR5 = param6; + string OUT_PAR6 = param7; + string OUT_PAR7 = param8; + string OUT_PAR8 = param9; + dev_command(OUT_PAR1, OUT_PAR2, OUT_PAR3, OUT_PAR4, OUT_PAR5, OUT_PAR6, OUT_PAR7, OUT_PAR8, OUT_PAR9); + } + } + + void reset_timeset_delay() + { + TIMESET_DELAY = 0; + } + + void reset_weatherset_delay() + { + WEATHERSET_DELAY = 0; + } + + void give_timestamp() + { + LogMessage("ent_currentplayer " + SC.DLL + "date " + BETA_TIMESTAMP + MS.DLL + " version game.revision"); + SendPlayerMessage("ent_currentplayer", SC.DLL + "timestamp is " + BETA_TIMESTAMP + MS.DLL + " version game.revision"); + } + + void set_time() + { + if (!("game.event.params" >= 2)) return; + PARAM1 %= 24; + PARAM2 %= 60; + time_getseconds(); + string local.mstime.secs = "global.mstime.secs"; + int l.secs = int(param1); + l.secs *= 3600; + int l.mins_to_secs = int(param2); + l.mins_to_secs *= 60; + l.secs += l.mins_to_secs; + string l.daystart.secs = "global.mstime.secs"; + l.daystart.secs /= 86400; + l.daystart.secs = int(l.daystart.secs); + l.daystart.secs *= 86400; + string l.timefromdaystart = "global.mstime.secs"; + l.timefromdaystart -= l.daystart.secs; + if (l.secs < l.timefromdaystart) + { + l.secs += 86400; + } + string l.newtime = l.daystart.secs; + l.newtime += l.secs; + SetGlobalVar("global.mstime.secs", l.newtime); + SetGlobalVar("global.mstime.updateall", 0); + } + + void roll_die() + { + string MY_NAME = GetEntityName("ent_currentplayer"); + string N_SIDES = /* TODO: $alphanum */ $alphanum(param1); + MY_NAME += " Rolls a "; + MY_NAME += N_SIDES; + MY_NAME += " Sided Die!"; + int DIE_ROLL = RandomInt(1, N_SIDES); + string MSG_STRING = "It comes up "; + MSG_STRING += DIE_ROLL; + SendInfoMsg("all", MY_NAME + MSG_STRING); + LogMessage("ent_currentplayer You rolled " + DIE_ROLL + "on your " + N_SIDES + " sided die."); + } + + void check_can_vote() + { + string VOTE_DELAY = GetEntityProperty(param1, "scriptvar"); + if ((VOTE_DELAY)) + { + SendColoredMessage(param1, VOTE + SYSTEM: + " You cannot start another vote so soon."); + LogMessage(param1 + " You cannot start another vote so soon."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + CAN_VOTE = 1; + } + + void loop_get_points() + { + string CUR_IDX = i; + string CUR_PLAYER = GetToken(PLAYER_LIST, CUR_IDX, ";"); + string PLAYER_STAT = GetEntityProperty(CUR_PLAYER, "scriptvar"); + string PLAYER_SUB_STAT = GetEntityProperty(CUR_PLAYER, "scriptvar"); + PLAYER_SUB_STAT *= 0.001; + PLAYER_STAT += PLAYER_SUB_STAT; + if (POINTS_TNLIST.length() > 0) POINTS_TNLIST += ";"; + POINTS_TNLIST += GetEntityName(CUR_PLAYER); + if (POINTS_TPLIST.length() > 0) POINTS_TPLIST += ";"; + POINTS_TPLIST += PLAYER_STAT; + } + + void loop_sort_points() + { + string CUR_IDX = i; + TEST_PLR = CUR_IDX; + HIGH_IDX = 0; + HIGH_SCORE = 0; + for (int i = 0; i < GetTokenCount(POINTS_TPLIST, ";"); i++) + { + loop_find_highest(); + } + if (POINTS_PLIST.length() > 0) POINTS_PLIST += ";"; + POINTS_PLIST += GetToken(POINTS_TPLIST, HIGH_IDX, ";"); + if (POINTS_NLIST.length() > 0) POINTS_NLIST += ";"; + POINTS_NLIST += GetToken(POINTS_TNLIST, HIGH_IDX, ";"); + RemoveToken(POINTS_TPLIST, HIGH_IDX, ";"); + RemoveToken(POINTS_TNLIST, HIGH_IDX, ";"); + } + + void loop_find_highest() + { + string CUR_IDX = i; + string CUR_SCORE = GetToken(POINTS_TPLIST, CUR_IDX, ";"); + if (CUR_SCORE > HIGH_SCORE) + { + HIGH_SCORE = CUR_SCORE; + HIGH_IDX = CUR_IDX; + } + } + + void loop_show_points() + { + string CUR_IDX = i; + string CUR_N = GetToken(POINTS_NLIST, CUR_IDX, ";"); + string CUR_P = GetToken(POINTS_PLIST, CUR_IDX, ";"); + CUR_P *= 1000; + string OUT_MSG = CUR_N; + OUT_MSG = " has" + int(CUR_P) + "damage" + "points"; + LogMessage(CALLING_PLAYER + OUT_MSG); + SendColoredMessage(CALLING_PLAYER, OUT_MSG); + TIP_TEXT = OUT_MSG + "|"; + } + + void do_list_points() + { + GetAllPlayers(PLAYER_LIST); + POINTS_TNLIST = ""; + POINTS_TPLIST = ""; + for (int i = 0; i < GetTokenCount(PLAYER_LIST, ";"); i++) + { + loop_get_points(); + } + POINTS_NLIST = ""; + POINTS_PLIST = ""; + for (int i = 0; i < GetTokenCount(POINTS_TPLIST, ";"); i++) + { + loop_sort_points(); + } + LogMessage(CALLING_PLAYER + " Damage Point Listings:"); + SendColoredMessage(CALLING_PLAYER, "Damage Point Listings:"); + TIP_TEXT = ""; + for (int i = 0; i < GetTokenCount(POINTS_NLIST, ";"); i++) + { + loop_show_points(); + } + LogMessage(CALLING_PLAYER + " Damage points are acquire by harming monsters and aiding allies"); + LogMessage(CALLING_PLAYER + " The player with the highest dmg point score has contributed the most to your victory"); + ShowHelpTip(CALLING_PLAYER, "generic", "Damage Point Listings", TIP_TEXT); + } + + void do_list_resists() + { + RESIST_NAMES = GetEntityProperty(CALLING_PLAYER, "scriptvar"); + RESIST_VALUES = GetEntityProperty(CALLING_PLAYER, "scriptvar"); + LogMessage(CALLING_PLAYER + " Resistance ratios (lower = more resistant, 1.0 = normal, 0.0 = immune)"); + TIP_TEXT = ""; + for (int i = 0; i < GetTokenCount(RESIST_NAMES, ";"); i++) + { + list_resist_loop(); + } + string STUN_VALUE = /* TODO: $get_takedmg */ $get_takedmg(CALLING_PLAYER, "stun"); + STUN_VALUE *= 100; + int STUN_VALUE = int((100 - STUN_VALUE)); + STUN_VALUE += "%"; + TIP_TEXT = "Stun" + "=" + STUN_VALUE + "||"; + string DARK_LEVEL = GetEntityProperty(CALLING_PLAYER, "scriptvar"); + TIP_TEXT = "Darkness" + "Level" + "=" + int(DARK_LEVEL) + "|"; + ShowHelpTip(CALLING_PLAYER, "generic", "Resistance Listings", TIP_TEXT); + } + + void list_resist_loop() + { + string CUR_IDX = i; + LogMessage(CALLING_PLAYER + GetToken(RESIST_NAMES, CUR_IDX, ";") + "= " + GetToken(RESIST_VALUES, CUR_IDX, ";")); + string RESIST_VAL = GetToken(RESIST_VALUES, CUR_IDX, ";"); + RESIST_VAL *= 100; + int OUT_VAL = 100; + OUT_VAL -= RESIST_VAL; + int OUT_VAL = int(OUT_VAL); + OUT_VAL += "%"; + TIP_TEXT = GetToken(RESIST_NAMES, CUR_IDX, ";") + "=" + OUT_VAL + "|"; + } + + void do_crest() + { + CREST_SELECTION = "func_guilds_leading"(GetEntityIndex(param1)); + if (CREST_SELECTION != "0") + { + SpawnNPC("crest_dealer", Vector3(10000, 10000, 10000), ScriptMode::Legacy); // params: GetEntityIndex(param1), CREST_SELECTION + } + } + + void func_guilds_leading() + { + LEADING_GUILDS = 0; + string L_STEAM_ID = GetPlayerAuthId(param1); + for (int i = 0; i < GetGlobalArrayLength(ARRAY_CRESTS); i++) + { + loop_guilds_leading(L_STEAM_ID); + } + return; + return; + } + + void loop_guilds_leading() + { + string L_LEADERS = GetGlobalArray(ARRAY_CREST_OWNERS, int(i)); + if ((L_LEADERS).findFirst(param1) >= 0) + { + if (LEADING_GUILDS == "0") + { + LEADING_GUILDS = GetGlobalArray(ARRAY_CRESTS, int(i)); + } + else + { + if (LEADING_GUILDS.length() > 0) LEADING_GUILDS += ";"; + LEADING_GUILDS += GetGlobalArray(ARRAY_CRESTS, int(i)); + } + } + } + +} + +} diff --git a/scripts/angelscript/world/server/help.as b/scripts/angelscript/world/server/help.as new file mode 100644 index 00000000..49f66105 --- /dev/null +++ b/scripts/angelscript/world/server/help.as @@ -0,0 +1,425 @@ +#pragma context server + +namespace MS +{ + +class Help : CGameScript +{ + int LISTMAPS_COUNT; + string LISTMAPS_MSG_EPC; + string LISTMAPS_MSG_HAR; + string LISTMAPS_MSG_LOW; + string LISTMAPS_MSG_MED; + string LISTMAPS_MSG_VHR; + string LISTMAPS_TARGET; + + Help() + { + LISTMAPS_MSG_LOW = "=========== Low level maps (up to ~200hp) ==========="; + LISTMAPS_MSG_MED = "=========== Medium level maps (~150hp-600hp) ==========="; + LISTMAPS_MSG_HAR = "=========== Hard level maps (~600hp-1000hp) ==========="; + LISTMAPS_MSG_VHR = "=========== Very Hard level maps (~1000hp-1500hp) ==========="; + LISTMAPS_MSG_EPC = "=========== Epic level maps (>1500hp + Apostle) ==========="; + array ARRAY_MAPLIST_LOW; + ARRAY_MAPLIST_LOW.insertLast("deralia (safe)"); + ARRAY_MAPLIST_LOW.insertLast("edana (safe)"); + ARRAY_MAPLIST_LOW.insertLast("ms_town (safe)"); + ARRAY_MAPLIST_LOW.insertLast("helena (safe, except during raids, where it can self-adjust up to medium)"); + ARRAY_MAPLIST_LOW.insertLast("ms_quest (almost safe)"); + ARRAY_MAPLIST_LOW.insertLast("msc_tutorial (can technically complete without combat)"); + ARRAY_MAPLIST_LOW.insertLast("edanasewers"); + ARRAY_MAPLIST_LOW.insertLast("thornlands (spitting spiders can be a bit mean)"); + ARRAY_MAPLIST_LOW.insertLast("ms_caves (empty, save for a thornlands boss spider)"); + ARRAY_MAPLIST_LOW.insertLast("gertenheld_cape"); + ARRAY_MAPLIST_LOW.insertLast("chapel (beware under the church floorboards)"); + ARRAY_MAPLIST_LOW.insertLast("mines"); + ARRAY_MAPLIST_LOW.insertLast("ms_swamp (empty, save for a few skeletons)"); + ARRAY_MAPLIST_LOW.insertLast("challs"); + ARRAY_MAPLIST_LOW.insertLast("goblintown (hidden)"); + ARRAY_MAPLIST_LOW.insertLast("island1"); + ARRAY_MAPLIST_LOW.insertLast("m2_quest"); + ARRAY_MAPLIST_LOW.insertLast("gertenheld_forest (beware of goblin cheif)"); + ARRAY_MAPLIST_LOW.insertLast("heras (beware of lobbing troll)"); + ARRAY_MAPLIST_LOW.insertLast("sfor (up to glowing slime forest area)"); + ARRAY_MAPLIST_LOW.insertLast("gatecity (above dzombie area) (hidden)"); + ARRAY_MAPLIST_LOW.insertLast("mscave (beware fire shamans)"); + ARRAY_MAPLIST_LOW.insertLast("isle (beware lobbing trolls and hidden brawler)"); + ARRAY_MAPLIST_LOW.insertLast("lowlands (start of 'Curse of the Bear Gods' series)"); + array ARRAY_MAPLIST_MEDIUM; + ARRAY_MAPLIST_MEDIUM.insertLast("keledrosprelude2 (Beware the Ice Troll)"); + ARRAY_MAPLIST_MEDIUM.insertLast("orcplace2_beta ('Curse of the Bear Gods', starts at lowlands)"); + ARRAY_MAPLIST_MEDIUM.insertLast("smugglers_cove"); + ARRAY_MAPLIST_MEDIUM.insertLast("daragoth (beware trolls)"); + ARRAY_MAPLIST_MEDIUM.insertLast("sfor (beyond slime forest area)"); + ARRAY_MAPLIST_MEDIUM.insertLast("orc_for (self-adjusted low)"); + ARRAY_MAPLIST_MEDIUM.insertLast("ms_underworldv2 (crappy throw-back map)"); + ARRAY_MAPLIST_MEDIUM.insertLast("ww1 (Start of 'World Walker' series)"); + ARRAY_MAPLIST_MEDIUM.insertLast("ww2b ('World Walker', starts at ww1)"); + ARRAY_MAPLIST_MEDIUM.insertLast("keledrosruins (hidden)"); + ARRAY_MAPLIST_MEDIUM.insertLast("unrest"); + ARRAY_MAPLIST_MEDIUM.insertLast("unrest2_beta1"); + ARRAY_MAPLIST_MEDIUM.insertLast("calruin2"); + ARRAY_MAPLIST_MEDIUM.insertLast("highlands_msc ('Curse of the Bear Gods', starts at lowlands)"); + ARRAY_MAPLIST_MEDIUM.insertLast("lostcastle_msc ('Curse of the Bear Gods', starts at lowlands)"); + ARRAY_MAPLIST_MEDIUM.insertLast("keledrosprelude2 (Ice Troll Battle)"); + ARRAY_MAPLIST_MEDIUM.insertLast("b_castle"); + ARRAY_MAPLIST_MEDIUM.insertLast("gatecity (dzombie area) (hidden)"); + ARRAY_MAPLIST_MEDIUM.insertLast("lostcaverns"); + ARRAY_MAPLIST_MEDIUM.insertLast("ara (long siege is long)"); + ARRAY_MAPLIST_MEDIUM.insertLast("bloodrose (up through Slithar)"); + ARRAY_MAPLIST_MEDIUM.insertLast("Cleicert"); + ARRAY_MAPLIST_MEDIUM.insertLast("ww3d ('World Walker', starts at ww1)"); + ARRAY_MAPLIST_MEDIUM.insertLast("idemarks_tower"); + ARRAY_MAPLIST_MEDIUM.insertLast("skycastle ('Curse of the Bear Gods', starts at lowlands)"); + ARRAY_MAPLIST_MEDIUM.insertLast("demontemple"); + ARRAY_MAPLIST_MEDIUM.insertLast("the_keep (random final boss maybe mean though)"); + ARRAY_MAPLIST_MEDIUM.insertLast("ms_snow"); + ARRAY_MAPLIST_MEDIUM.insertLast("foutpost"); + ARRAY_MAPLIST_MEDIUM.insertLast("oceancrossing"); + ARRAY_MAPLIST_MEDIUM.insertLast("ms_wicardoven"); + ARRAY_MAPLIST_MEDIUM.insertLast("islesofdread1"); + ARRAY_MAPLIST_MEDIUM.insertLast("islesofdread2_old"); + ARRAY_MAPLIST_MEDIUM.insertLast("nightmare_edana (self-adjusts medium-hard)"); + ARRAY_MAPLIST_MEDIUM.insertLast("catacombs (self-adjusts medium-hard)"); + ARRAY_MAPLIST_MEDIUM.insertLast("dragooncaves"); + ARRAY_MAPLIST_MEDIUM.insertLast("islesofdread2"); + ARRAY_MAPLIST_MEDIUM.insertLast("bloodrose (after Slithar)"); + ARRAY_MAPLIST_MEDIUM.insertLast("underpath (self adjusted low)"); + ARRAY_MAPLIST_MEDIUM.insertLast("undermines"); + ARRAY_MAPLIST_MEDIUM.insertLast("thanatos"); + ARRAY_MAPLIST_MEDIUM.insertLast("lodagond-2 ('Lodagond' series, starts at Lodagond-1)"); + ARRAY_MAPLIST_MEDIUM.insertLast("nightmare_thornlands"); + ARRAY_MAPLIST_MEDIUM.insertLast("phobia (beware final boss)"); + array ARRAY_MAPLIST_HARD; + ARRAY_MAPLIST_HARD.insertLast("aleyesu"); + ARRAY_MAPLIST_HARD.insertLast("lodagond-3 ('Lodagond' series, starts at Lodagond-1)"); + ARRAY_MAPLIST_HARD.insertLast("old_helena"); + ARRAY_MAPLIST_HARD.insertLast("aluhandra2"); + ARRAY_MAPLIST_HARD.insertLast("gertenheld_cave"); + ARRAY_MAPLIST_HARD.insertLast("lodagond-1 (start of 'Lodagond' series)"); + ARRAY_MAPLIST_HARD.insertLast("deraliasewers"); + ARRAY_MAPLIST_HARD.insertLast("catacombs (self-adjusts medium-hard)"); + ARRAY_MAPLIST_HARD.insertLast("tundra"); + ARRAY_MAPLIST_HARD.insertLast("umulak"); + ARRAY_MAPLIST_HARD.insertLast("kfortress"); + ARRAY_MAPLIST_HARD.insertLast("gertenhell"); + ARRAY_MAPLIST_HARD.insertLast("orc_for (self-adjusted high)"); + ARRAY_MAPLIST_HARD.insertLast("lodagond-4 ('Lodagond' series, starts at Lodagond-1)"); + ARRAY_MAPLIST_HARD.insertLast("undercliffs (self adjusted low)"); + ARRAY_MAPLIST_HARD.insertLast("underpath (self adjusted high)"); + ARRAY_MAPLIST_HARD.insertLast("sorc_villa (though safe, in some conditions)"); + array ARRAY_MAPLIST_VHARD; + ARRAY_MAPLIST_VHARD.insertLast("shad_palace"); + ARRAY_MAPLIST_VHARD.insertLast("bloodshrine"); + ARRAY_MAPLIST_VHARD.insertLast("undermines (self adjusted high)"); + ARRAY_MAPLIST_VHARD.insertLast("shender_east (self-adjusted min)"); + ARRAY_MAPLIST_VHARD.insertLast("hunderswamp_north"); + ARRAY_MAPLIST_VHARD.insertLast("the_wall"); + ARRAY_MAPLIST_VHARD.insertLast("the_wall2"); + ARRAY_MAPLIST_VHARD.insertLast("phlames"); + ARRAY_MAPLIST_VHARD.insertLast("undercliffs (self adjusted high)"); + ARRAY_MAPLIST_VHARD.insertLast("nashalrath (hidden)"); + ARRAY_MAPLIST_VHARD.insertLast("shender_east (self-adjusted max, nightmare battle self-adjusts near-epic)"); + array ARRAY_MAPLIST_EPIC; + ARRAY_MAPLIST_EPIC.insertLast("(none available as of yet)"); + } + + void game_playercmd() + { + if (param1 == "listmaps") + { + if (LISTMAPS_TARGET != "LISTMAPS_TARGET") + { + if (LISTMAPS_TARGET != GetEntityIndex("ent_currentplayer")) + { + } + LogMessage("ent_currentplayer One moment , listmaps system is helping " + GetEntityName(LISTMAPS_TARGET)); + } + if ((param2).findFirst(PARAM) == 0) + { + string L_HP = GetEntityMaxHealth("ent_currentplayer"); + if (L_HP <= 150) + { + LISTMAPS_START = "low"; + LISTMAPS_STOP = "low"; + } + else + { + if (L_HP > 150) + { + if (L_HP > 200) + { + LISTMAPS_START = "low"; + LISTMAPS_STOP = "medium"; + } + if (L_HP >= 600) + { + LISTMAPS_START = "hard"; + LISTMAPS_STOP = "hard"; + } + if (L_HP >= 800) + { + LISTMAPS_START = "hard"; + LISTMAPS_STOP = "vhard"; + } + if (L_HP >= 1500) + { + LISTMAPS_START = "vhard"; + LISTMAPS_STOP = "epic"; + } + } + } + int L_LISTING_CUSTOM = 1; + LogMessage("ent_currentplayer Listing maps recommended for your character level: " + LISTMAPS_START + "to " + LISTMAPS_STOP); + LogMessage("ent_currentplayer To list more maps , try listmaps [difficulty] or listmaps all"); + } + else + { + LISTMAPS_START = "none"; + LISTMAPS_STOP = "none"; + if (param2 == "low") + { + LISTMAPS_START = "low"; + LISTMAPS_STOP = "low"; + } + if (param2 == "medium") + { + LISTMAPS_START = "medium"; + LISTMAPS_STOP = "medium"; + } + if (param2 == "hard") + { + LISTMAPS_START = "hard"; + LISTMAPS_STOP = "hard"; + } + if (param2 == "vhard") + { + LISTMAPS_START = "vhard"; + LISTMAPS_STOP = "vhard"; + } + if (param2 == "epic") + { + LISTMAPS_START = "epic"; + LISTMAPS_STOP = "epic"; + } + if (param2 == "all") + { + LISTMAPS_START = "low"; + LISTMAPS_STOP = "epic"; + } + } + if (LISTMAPS_START != "none") + { + if (!(L_LISTING_CUSTOM)) + { + if (param2 == "all") + { + LogMessage("ent_currentplayer Listing maps recomended for " + LISTMAPS_START + " levels"); + } + else + { + LogMessage("ent_currentplayer Listing all maps by difficulty"); + } + } + LISTMAPS_TARGET = GetEntityIndex("ent_currentplayer"); + do_listmaps(); + } + else + { + LISTMAPS_TARGET = "LISTMAPS_TARGET"; + LogMessage("ent_currentplayer listmaps , unrecognized parameter: " + param2); + LogMessage("ent_currentplayer listmaps [low|medium|hard|vhard|epic|all]"); + } + } + else + { + if (param1 == "summon_help") + { + LogMessage("ent_currentplayer SUMMON CHAT COMMANDS"); + LogMessage("ent_currentplayer follow - disengage and follow you"); + LogMessage("ent_currentplayer defend - stay near, engage nearby enemies"); + LogMessage("ent_currentplayer kill - attack your current target"); + LogMessage("ent_currentplayer hunt - roam away and attack any enemies"); + LogMessage("ent_currentplayer vanish - unsummon"); + LogMessage("ent_currentplayer stay - guard position"); + LogMessage("ent_currentplayer * Prefix any of the above commands with all [command] to affect all your summons"); + return; + } + else + { + if (param1 == "mapinfo") + { + LogMessage("ent_currentplayer Map Title: game.map.title"); + LogMessage("ent_currentplayer Map Desc: game.map.desc"); + LogMessage("ent_currentplayer HPWarn: game.map.hpwarn"); + LogMessage("ent_currentplayer Weather: game.map.weather"); + return; + } + } + } + } + + void do_listmaps() + { + LISTMAPS_COUNT = 0; + if (LISTMAPS_START == "low") + { + LogMessage(LISTMAPS_TARGET + LISTMAPS_MSG_LOW); + ScheduleDelayedEvent(0.1, "do_listmaps_low"); + } + if (LISTMAPS_START == "medium") + { + LogMessage(LISTMAPS_TARGET + LISTMAPS_MSG_MED); + ScheduleDelayedEvent(0.1, "do_listmaps_medium"); + } + if (LISTMAPS_START == "hard") + { + LogMessage(LISTMAPS_TARGET + LISTMAPS_MSG_HAR); + ScheduleDelayedEvent(0.1, "do_listmaps_hard"); + } + if (LISTMAPS_START == "vhard") + { + LogMessage(LISTMAPS_TARGET + LISTMAPS_MSG_VHR); + ScheduleDelayedEvent(0.1, "do_listmaps_vhard"); + } + if (LISTMAPS_START == "epic") + { + LogMessage(LISTMAPS_TARGET + LISTMAPS_MSG_EPC); + ScheduleDelayedEvent(0.1, "do_listmaps_epic"); + } + } + + void do_listmaps_low() + { + if (!(LISTMAPS_COUNT < int(ARRAY_MAPLIST_LOW.length()))) return; + LogMessage(LISTMAPS_TARGET + ARRAY_MAPLIST_LOW[int(LISTMAPS_COUNT)]); + LISTMAPS_COUNT += 1; + if (LISTMAPS_COUNT < int(ARRAY_MAPLIST_LOW.length())) + { + ScheduleDelayedEvent(0.1, "do_listmaps_low"); + } + else + { + if (LISTMAPS_STOP != "low") + { + LISTMAPS_COUNT = 0; + LogMessage(LISTMAPS_TARGET + LISTMAPS_MSG_MED); + do_listmaps_medium(); + } + else + { + LISTMAPS_TARGET = "LISTMAPS_TARGET"; + } + } + } + + void do_listmaps_medium() + { + if (!(LISTMAPS_COUNT < int(ARRAY_MAPLIST_MEDIUM.length()))) return; + LogMessage(LISTMAPS_TARGET + ARRAY_MAPLIST_MEDIUM[int(LISTMAPS_COUNT)]); + LISTMAPS_COUNT += 1; + if (LISTMAPS_COUNT < int(ARRAY_MAPLIST_MEDIUM.length())) + { + ScheduleDelayedEvent(0.1, "do_listmaps_medium"); + } + else + { + if (LISTMAPS_STOP != "medium") + { + LISTMAPS_COUNT = 0; + LogMessage(LISTMAPS_TARGET + LISTMAPS_MSG_HAR); + do_listmaps_hard(); + } + else + { + LISTMAPS_TARGET = "LISTMAPS_TARGET"; + } + } + } + + void do_listmaps_hard() + { + if (!(LISTMAPS_COUNT < int(ARRAY_MAPLIST_HARD.length()))) return; + LogMessage(LISTMAPS_TARGET + ARRAY_MAPLIST_HARD[int(LISTMAPS_COUNT)]); + LISTMAPS_COUNT += 1; + if (LISTMAPS_COUNT < int(ARRAY_MAPLIST_HARD.length())) + { + ScheduleDelayedEvent(0.1, "do_listmaps_hard"); + } + else + { + if (LISTMAPS_STOP != "hard") + { + LISTMAPS_COUNT = 0; + LogMessage(LISTMAPS_TARGET + LISTMAPS_MSG_VHR); + do_listmaps_vhard(); + } + else + { + LISTMAPS_TARGET = "LISTMAPS_TARGET"; + } + } + } + + void do_listmaps_vhard() + { + if (!(LISTMAPS_COUNT < int(ARRAY_MAPLIST_VHARD.length()))) return; + LogMessage(LISTMAPS_TARGET + ARRAY_MAPLIST_VHARD[int(LISTMAPS_COUNT)]); + LISTMAPS_COUNT += 1; + if (LISTMAPS_COUNT < int(ARRAY_MAPLIST_VHARD.length())) + { + ScheduleDelayedEvent(0.1, "do_listmaps_vhard"); + } + else + { + if (LISTMAPS_STOP != "vhard") + { + LISTMAPS_COUNT = 0; + LogMessage(LISTMAPS_TARGET + LISTMAPS_MSG_EPC); + do_listmaps_epic(); + } + else + { + LISTMAPS_TARGET = "LISTMAPS_TARGET"; + } + } + } + + void do_listmaps_epic() + { + if (!(LISTMAPS_COUNT < int(ARRAY_MAPLIST_EPIC.length()))) return; + LogMessage(LISTMAPS_TARGET + ARRAY_MAPLIST_EPIC[int(LISTMAPS_COUNT)]); + LISTMAPS_COUNT += 1; + if (LISTMAPS_COUNT < int(ARRAY_MAPLIST_EPIC.length())) + { + ScheduleDelayedEvent(0.1, "do_listmaps_epic"); + } + else + { + LISTMAPS_TARGET = "LISTMAPS_TARGET"; + } + } + + void list_custom_maps2() + { + string TOTAL_MAPS = GetTokenCount(MAPS_UNCONNECTED2, ";"); + TOTAL_MAPS -= 1; + if (!(CUSTOM_COUNT <= TOTAL_MAPS)) return; + string CUST_MAP = GetToken(MAPS_UNCONNECTED2, CUSTOM_COUNT, ";"); + if ((ValidateMapName(CUST_MAP))) + { + LogMessage(L_VOTE_CALLER + CUST_MAP); + } + if (CUSTOM_COUNT == TOTAL_MAPS) + { + LogMessage(L_VOTE_CALLER + " == == == == == == == == == == == == == == == == == ="); + LogMessage(L_VOTE_CALLER + " Type listmaps for a listing of maps by difficulty"); + LogMessage(L_VOTE_CALLER + " Or type maps * for a listing of all maps on your client"); + } + CUSTOM_COUNT += 1; + ScheduleDelayedEvent(0.1, "list_custom_maps2"); + } + +} + +} diff --git a/scripts/angelscript/world/server/maps.as b/scripts/angelscript/world/server/maps.as new file mode 100644 index 00000000..18be6a3b --- /dev/null +++ b/scripts/angelscript/world/server/maps.as @@ -0,0 +1,82 @@ +#pragma context server + +namespace MS +{ + +class Maps : CGameScript +{ + Maps() + { + SetGlobalVar("MAPS_HIDDEN", "challs;keledrosruins;nashalrath;undermines;underpath;undercliffs"); + SetGlobalVar("MAPS_MAZE", "goblintown"); + SetGlobalVar("MAPS_GAUNTLET", "highlands_msc;lostcastle_msc;skycastle;orcplace2_beta;ww2b;ww3d;old_helena;lodagond-2;lodagond-3;lodagond-4;nashalrath;the_wall2"); + SetGlobalVar("MAPS_GAUNTLET_START", "lowlands;lodagond-1;ww1;the_wall;old_helena;nashalrath"); + SetGlobalVar("MAPS_UNCONNECTEDS", 2); + SetGlobalVar("MAPS_UNCONNECTED1", "ms_quest;char_recover;guildmaster;cleicert;foutpost;lodagond-1;island1;lostcaverns;ms_underworldv2;orc_arena;pvp_archery;pvp_arena;unrest;unrest2;unrest2_beta1;ww1;pvp_canyons;canyons;ocean_crossing;smugglers_cove;isles_dread1;"); + SetGlobalVar("MAPS_UNCONNECTED2", "kfortress;gertenheld_cave;islesofdread2_old;the_wall;catacombs;bloodshrine;ms_soccer;shender_east;nightmare_edana;m2_quest;gertenhell"); + SetGlobalVar("G_NOT_ON_FN", "test_scripts"); + if (GetGlobalArrayLength(G_ARRAY_RMAPS) == -1) + { + CreateGlobalArray("G_ARRAY_RMAPS"); + CreateGlobalArray("G_ARRAY_RMAPS_TYPES"); + CreateGlobalArray("G_ARRAY_RMAPS_CONNECTORS"); + GlobalArrayAdd("G_ARRAY_RMAPS", "highlands_msc"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "series;lowlands;Curse of the Bear Gods"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "lostcastle_msc;lowlands"); + GlobalArrayAdd("G_ARRAY_RMAPS", "lostcastle_msc"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "series;lowlands"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "highlands_msc;skycastle;orcplace2_beta"); + GlobalArrayAdd("G_ARRAY_RMAPS", "skycastle"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "series;lowlands;Curse of the Bear Gods"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "lostcastle_msc"); + GlobalArrayAdd("G_ARRAY_RMAPS", "orcplace2_beta"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "series;lowlands;Curse of the Bear Gods"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "lostcastle_msc"); + GlobalArrayAdd("G_ARRAY_RMAPS", "ww2b"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "series;ww1;World Walker"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "ww1"); + GlobalArrayAdd("G_ARRAY_RMAPS", "ww3d"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "series;ww1;World Walker"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "ww2b"); + GlobalArrayAdd("G_ARRAY_RMAPS", "old_helena"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "hidden"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "helena"); + GlobalArrayAdd("G_ARRAY_RMAPS", "lodagond-2"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "series;lodagond-1;The Lodagond Skyfortress"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "lodagond-1"); + GlobalArrayAdd("G_ARRAY_RMAPS", "lodagond-3"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "series;lodagond-1;The Lodagond Skyfortress"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "lodagond-2"); + GlobalArrayAdd("G_ARRAY_RMAPS", "lodagond-4"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "series;lodagond-1;The Lodagond Skyfortress"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "lodagond-3"); + GlobalArrayAdd("G_ARRAY_RMAPS", "challs"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "hidden"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "sfor;ms_wicardoven"); + GlobalArrayAdd("G_ARRAY_RMAPS", "keledrosruins"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "hidden"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "keledrosprelude2"); + GlobalArrayAdd("G_ARRAY_RMAPS", "nashalrath"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "hidden"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "daragoth"); + GlobalArrayAdd("G_ARRAY_RMAPS", "goblintown"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "hidden"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "mscave"); + GlobalArrayAdd("G_ARRAY_RMAPS", "the_wall2"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "series;the_wall;The Wall (West)"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "the_wall;fcaverns"); + GlobalArrayAdd("G_ARRAY_RMAPS", "undermines"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "hidden"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "underpath;underkeep;undercrypt"); + GlobalArrayAdd("G_ARRAY_RMAPS", "underpath"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "hidden"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "undercliffs;gatecity;undercaves;undermines;underkeep;understream"); + GlobalArrayAdd("G_ARRAY_RMAPS", "undercliffs"); + GlobalArrayAdd("G_ARRAY_RMAPS_TYPES", "hidden"); + GlobalArrayAdd("G_ARRAY_RMAPS_CONNECTORS", "underpath;underkeep;bloodrose"); + } + } + +} + +} diff --git a/scripts/angelscript/world/server/player_vote.as b/scripts/angelscript/world/server/player_vote.as new file mode 100644 index 00000000..83e9553f --- /dev/null +++ b/scripts/angelscript/world/server/player_vote.as @@ -0,0 +1,374 @@ +#pragma context server + +namespace MS +{ + +class PlayerVote : CGameScript +{ + int CAN_VOTE; + string CUSTOM_COUNT; + string L_VOTE_CALLER; + int MAP_VOTE_DELAY; + + PlayerVote() + { + MAP_VOTE_DELAY = 20; + } + + void game_playercmd() + { + string VOTE_PARAM1 = param1; + string VOTE_PARAM2 = param2; + string VOTE_PARAM3 = param3; + string VOTE_PARAM4 = param4; + string VOTE_PARAM5 = param5; + if (VOTE_PARAM1 == "say_text") + { + string VOTE_PARAM1 = param3; + string VOTE_PARAM2 = param4; + string VOTE_PARAM3 = param5; + string VOTE_PARAM4 = param6; + string VOTE_PARAM5 = param7; + } + if ((VOTE_PARAM1).findFirst("vote") == 0) + { + check_vote_options(VOTE_PARAM1, VOTE_PARAM2, VOTE_PARAM3, VOTE_PARAM4, VOTE_PARAM5, VOTE_PARAM6, VOTE_PARAM7); + } + } + + void check_vote_options() + { + CAN_VOTE = 0; + check_can_vote(GetEntityIndex("ent_currentplayer")); + if (!(CAN_VOTE)) return; + if (param1 == "votemap") + { + string ALLOW_MAPVOTE = GetCvar("msvote_map_enable"); + if (!(ALLOW_MAPVOTE)) + { + string OUT_MSG = "VOTEMAP: This server does not allow map votes."; + LogMessage("ent_currentplayer " + OUT_MSG); + SendColoredMessage("ent_currentplayer", OUT_MSG); + } + if ((ALLOW_MAPVOTE)) + { + } + string MAP_TO_VOTE = param2; + player_votemap(GetEntityIndex("ent_currentplayer"), MAP_TO_VOTE); + } + if (param1 == "votepvp") + { + string ALLOW_PVPVOTE = GetCvar("msvote_pvp_enable"); + if (!(ALLOW_PVPVOTE)) + { + string OUT_MSG = "VOTEPVP: This server does not allow PVP votes."; + LogMessage("ent_currentplayer " + OUT_MSG); + SendColoredMessage("ent_currentplayer", OUT_MSG); + } + if ((ALLOW_PVPVOTE)) + { + } + if (GetPlayerCount() < 2) + { + if (!(G_DEVELOPER_MODE)) + { + } + string OUT_MSG = "VOTEPVP: Requires at least 2 players to vote for PVP."; + LogMessage("ent_currentplayer " + OUT_MSG); + SendColoredMessage("ent_currentplayer", OUT_MSG); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + player_votepvp(GetEntityIndex("ent_currentplayer")); + } + if (param1 == "votelock") + { + if ((G_SERVER_LOCKED)) + { + SendColoredMessage("ent_currentplayer", "Server is already vote locked. Password: game.cvar.sv_password"); + LogMessage("ent_currentplayer Server is already vote locked. Password: game.cvar.sv_password"); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (!(GetCvar("msvote_lock_enable"))) + { + SendColoredMessage("ent_currentplayer", "This server does not allow votes to lock the server."); + LogMessage("ent_currentplayer This server does not allow votes to lock the server."); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + if (GetPlayerCount() < 3) + { + if (!(G_DEVELOPER_MODE)) + { + } + SendColoredMessage("ent_currentplayer", "Need at least three players to start a vote to lock the server."); + LogMessage("ent_currentplayer Need at least three players to start a vote to lock the server."); + int EXIT_SUB = 1; + } + if (!(EXIT_SUB)) + { + } + player_votelock(GetEntityIndex("ent_currentplayer")); + } + } + + void player_votemap() + { + string L_VOTE_CALLER = param1; + string L_MAP_TO_VOTE = StringToLower(param2); + string VOTE_TYPE_CVAR = GetCvar("msvote_map_type"); + string L_VOTE_BUSY = GetEntityProperty(GAME_MASTER, "scriptvar"); + if ((L_VOTE_BUSY)) + { + LogMessage(L_VOTE_CALLER + " Votemap: Vote system is busy."); + SendColoredMessage(L_VOTE_CALLER, "Votemap: Vote system is busy."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (GetGameTime() < MAP_VOTE_DELAY) + { + if (!(G_DEVELOPER_MODE)) + { + } + SendColoredMessage(L_VOTE_CALLER, "Votemap: You cannot start a map vote for the first " + int(MAP_VOTE_DELAY) + " seconds, except by transition."); + LogMessage(L_VOTE_CALLER + "Votemap: You cannot start a map vote for the first " + int(MAP_VOTE_DELAY) + " seconds, except by transition."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if ((L_MAP_TO_VOTE).findFirst("param") == 0) + { + SendColoredMessage(L_VOTE_CALLER, "Votemap: You can vote for specific maps by typing votemap [mapname] in main chat."); + SendColoredMessage(L_VOTE_CALLER, "Check your console (~) for a list of maps not connected to the world."); + LogMessage(L_VOTE_CALLER + " Votemap: You can vote for specific maps by typing votemap [mapname] in main chat."); + LogMessage(L_VOTE_CALLER + " Here's a list of maps you may vote for that are not otherwise reachable:"); + CUSTOM_COUNT = 0; + LogMessage(L_VOTE_CALLER + " =========== DISCONNECTED MAPS ==========="); + ScheduleDelayedEvent(0.1, "list_custom_maps"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + int LEGAL_FN_MAP = 0; + string SEARCH_SET = MAPS_FN1; + string SEARCH_IDX = FindToken(SEARCH_SET, L_MAP_TO_VOTE, ";"); + if (SEARCH_IDX > -1) + { + if (GetToken(SEARCH_SET, SEARCH_IDX, ";") == L_MAP_TO_VOTE) + { + } + int LEGAL_FN_MAP = 1; + } + string SEARCH_SET = MAPS_FN2; + string SEARCH_IDX = FindToken(SEARCH_SET, L_MAP_TO_VOTE, ";"); + if (SEARCH_IDX > -1) + { + if (GetToken(SEARCH_SET, SEARCH_IDX, ";") == L_MAP_TO_VOTE) + { + } + int LEGAL_FN_MAP = 1; + } + string SEARCH_SET = MAPS_FN3; + string SEARCH_IDX = FindToken(SEARCH_SET, L_MAP_TO_VOTE, ";"); + if (SEARCH_IDX > -1) + { + if (GetToken(SEARCH_SET, SEARCH_IDX, ";") == L_MAP_TO_VOTE) + { + } + int LEGAL_FN_MAP = 1; + } + string SEARCH_SET = MAPS_FN4; + string SEARCH_IDX = FindToken(SEARCH_SET, L_MAP_TO_VOTE, ";"); + if (SEARCH_IDX > -1) + { + if (GetToken(SEARCH_SET, SEARCH_IDX, ";") == L_MAP_TO_VOTE) + { + } + int LEGAL_FN_MAP = 1; + } + if (("game.central")) + { + if (FindToken(G_NOT_ON_FN, L_MAP_TO_VOTE, ";") > -1) + { + } + int LEGAL_FN_MAP = 0; + SendColoredMessage(L_VOTE_CALLER, "Votemap: " + L_MAP_TO_VOTE + " is a special utility map that cannot be used on [FN]"); + LogMessage(L_VOTE_CALLER + "Votemap: " + L_MAP_TO_VOTE + " is a special utility map that cannot be used on [FN]"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (VOTE_TYPE_CVAR == "root") + { + int ALLOW_VOTE = 0; + if (L_MAP_TO_VOTE == "edana") + { + int ALLOW_VOTE = 1; + } + if (L_MAP_TO_VOTE == "deralia") + { + int ALLOW_VOTE = 1; + } + if (L_MAP_TO_VOTE == "helena") + { + int ALLOW_VOTE = 1; + } + if (FindToken(MAPS_UNCONNECTED1, L_MAP_TO_VOTE, ";") > -1) + { + int ALLOW_VOTE = 1; + } + if (!(ALLOW_VOTE)) + { + } + SendColoredMessage(L_VOTE_CALLER, "Votemap: You may only vote for root towns (edana, deralia, helena) and disconnected maps on this server."); + LogMessage(L_VOTE_CALLER + " You may only vote for root towns (edana, deralia, helena) and disconnected maps on this server."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (FindToken(MAPS_HIDDEN, L_MAP_TO_VOTE, ";") > -1) + { + if (StringToLower(GetMapName()) != StringToLower(L_MAP_TO_VOTE)) + { + } + SendColoredMessage(L_VOTE_CALLER, "Votemap: " + L_MAP_TO_VOTE + " is a hidden map, you must find the entrance."); + LogMessage(L_VOTE_CALLER + L_MAP_TO_VOTE + " is a hidden map, you must find the entrance."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (FindToken(MAPS_MAZE, L_MAP_TO_VOTE, ";") > -1) + { + if (GetPlayerQuestData(L_VOTE_CALLER, "m") == L_MAP_TO_VOTE) + { + int L_NO_GAUNLET_MESSAGE = 1; + SendColoredMessage(L_VOTE_CALLER, "Votemap: You can vote for this hidden map as you still qualify."); + } + else + { + SendColoredMessage(L_VOTE_CALLER, "Votemap: " + L_MAP_TO_VOTE + " is hidden within a maze, you must navigate the maze to find its entrance."); + LogMessage(L_VOTE_CALLER + L_MAP_TO_VOTE + " is hidden within a maze, you must navigate the maze to find its entrance."); + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (FindToken(MAPS_GAUNTLET, L_MAP_TO_VOTE, ";") > -1) + { + if (GetPlayerQuestData(L_VOTE_CALLER, "m") == L_MAP_TO_VOTE) + { + if (!(L_NO_GAUNLET_MESSAGE)) + { + } + if (GetPlayerQuestData(L_VOTE_CALLER, "mv") == L_MAP_TO_VOTE) + { + } + SendColoredMessage(L_VOTE_CALLER, "Votemap: You can vote for this gauntlet map as you still qualify."); + } + else + { + SendColoredMessage(L_VOTE_CALLER, "Votemap: " + L_MAP_TO_VOTE + " is part of a gauntlet series, you must begin at the start of the series."); + LogMessage(L_VOTE_CALLER + "Votemap: " + L_MAP_TO_VOTE + " is part of a gauntlet series, you must begin at the start of the series."); + int EXIT_SUB = 1; + } + } + if ((EXIT_SUB)) return; + if (!(ValidateMapName(L_MAP_TO_VOTE))) + { + SendColoredMessage(L_VOTE_CALLER, "Votemap: " + L_MAP_TO_VOTE + " is not found on this server."); + LogMessage(L_VOTE_CALLER + L_MAP_TO_VOTE + " is not found on this server."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (StringToLower(GetMapName()) == L_MAP_TO_VOTE) + { + if (!(GetCvar("msvote_farm_all_day"))) + { + } + SendColoredMessage(L_VOTE_CALLER, "Votemap: You cannot vote for the map you are currently on."); + LogMessage(L_VOTE_CALLER + " You cannot vote for the map you are currently on."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + string VOTE_TITLE = "Change to "; + VOTE_TITLE += L_MAP_TO_VOTE; + VOTE_TITLE += "?"; + string L_OPTIONS = "Yes!:"; + CallExternal(GAME_MASTER, "gm_create_vote", "gm_votemap", L_OPTIONS, VOTE_TITLE, "Voting begins now!", 0); + } + + void list_custom_maps() + { + string TOTAL_MAPS = GetTokenCount(MAPS_UNCONNECTED1, ";"); + TOTAL_MAPS -= 1; + if (CUSTOM_COUNT == TOTAL_MAPS) + { + if (MAPS_UNCONNECTEDS > 1) + { + } + CUSTOM_COUNT = 0; + ScheduleDelayedEvent(0.1, "list_custom_maps2"); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + if (!(CUSTOM_COUNT <= TOTAL_MAPS)) return; + string CUST_MAP = GetToken(MAPS_UNCONNECTED1, CUSTOM_COUNT, ";"); + if ((ValidateMapName(CUST_MAP))) + { + LogMessage(L_VOTE_CALLER + CUST_MAP); + } + CUSTOM_COUNT += 1; + ScheduleDelayedEvent(0.1, "list_custom_maps"); + } + + void player_votepvp() + { + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + LogMessage(param1 + " votepvp - Vote system is busy."); + SendColoredMessage(param1, "votepvp - Vote system is busy."); + int EXIT_SUB = 1; + } + if ((EXIT_SUB)) return; + L_VOTE_CALLER = param1; + if (!("game.pvp")) + { + string L_TITLE = "ACTIVATE PVP MODE"; + string L_OPTIONS = "Yes!:1;No!:0"; + string L_DESCRIPT = GetEntityName(L_VOTE_CALLER); + } + else + { + string L_TITLE = "DEACTIVATE PVP MODE"; + string L_OPTIONS = "Yes!:0;No!:1"; + string L_DESCRIPT = GetEntityName(L_VOTE_CALLER); + } + CallExternal(GAME_MASTER, "gm_create_vote", "gm_votepvp", L_OPTIONS, L_TITLE, L_DESCRIPT, 0); + } + + void player_votelock() + { + if ("game.playersnb" < 3) + { + string L_MSG = "Votelock not allowed with less than 3 players on the server!"; + LogMessage(param1 + L_MSG); + SendColoredMessage(param1, L_MSG); + return; + } + if ((GetEntityProperty(GAME_MASTER, "scriptvar"))) + { + string L_MSG = "Vote system is busy."; + LogMessage(param1 + L_MSG); + SendColoredMessage(param1, L_MSG); + return; + } + string L_LOCKER = param1; + string L_TITLE = "Lock the server?"; + string L_DESC = GetEntityName(L_LOCKER); + CallExternal(GAME_MASTER, "gm_create_vote", "gm_votelock", "Yes!:1;No!:0", L_TITLE, L_DESC, 0); + } + +} + +} diff --git a/scripts/angelscript/world/server/time.as b/scripts/angelscript/world/server/time.as new file mode 100644 index 00000000..c4f481d4 --- /dev/null +++ b/scripts/angelscript/world/server/time.as @@ -0,0 +1,111 @@ +#pragma context server + +namespace MS +{ + +class Time : CGameScript +{ + int TIME_UPDATE_INTERVAL; + int local.lastupdatetime; + + Time() + { + SetGlobalVar("TIME_RATIO", 20); + TIME_UPDATE_INTERVAL = 30; + if (CURRENT_TIME == "CURRENT_TIME") + { + } + SetGlobalVar("CURRENT_TIME_HOUR", 0); + SetGlobalVar("CURRENT_TIME_MIN", 0); + SetGlobalVar("global.mstime.secs", 0); + SetGlobalVar("global.mstime.lastupdate", 0); + SetGlobalVar("global.mstime.updateall", 0); + SetGlobalVar("global.mstime.secs", 215940); + } + + void OnRepeatTimer() + { + SetRepeatDelay(1); + global_time_update(); + string l.dayofs.secs = "global.mstime.secs"; + l.dayofs.secs %= 86400; + SetGlobalVar("CURRENT_TIME_HOUR", l.dayofs.secs); + CURRENT_TIME_HOUR /= 3600; + SetGlobalVar("CURRENT_TIME_HOUR", int(CURRENT_TIME_HOUR)); + SetGlobalVar("CURRENT_TIME_MIN", l.dayofs.secs); + CURRENT_TIME_MIN %= 3600; + CURRENT_TIME_MIN /= 60; + SetGlobalVar("CURRENT_TIME_MIN", int(CURRENT_TIME_MIN)); + format_time(CURRENT_TIME_HOUR, CURRENT_TIME_MIN); + if ("global.mstime.secs" >= "global.mstime.updateall") + { + } + CallExternal("all", "worldevent_time", CURRENT_TIME_HOUR, CURRENT_TIME_MIN, TIME_RATIO); + string l.intervalsecs = TIME_UPDATE_INTERVAL; + l.intervalsecs *= 60; + string local.lastupdatetime = "global.mstime.secs"; + local.lastupdatetime /= l.intervalsecs; + local.lastupdatetime = int(local.lastupdatetime); + local.lastupdatetime *= l.intervalsecs; + SetGlobalVar("global.mstime.updateall", local.lastupdatetime); + global.mstime.updateall += l.intervalsecs; + } + + void global_time_update() + { + float l.time_elapsed = GetGameTime(); + l.time_elapsed -= "global.mstime.lastupdate"; + string l.secs = l.time_elapsed; + l.secs *= TIME_RATIO; + global.mstime.secs += l.secs; + SetGlobalVar("global.mstime.lastupdate", GetGameTime()); + } + + void format_time() + { + SetGlobalVar("CURRENT_TIME", ""); + if (param1 < 10) + { + SetGlobalVar("CURRENT_TIME", "0"); + } + CURRENT_TIME += int(param1); + if (param2 < 10) + { + string local.mins = "0"; + } + else + { + string local.mins = ""; + } + local.mins += int(param2); + CURRENT_TIME += ":"; + CURRENT_TIME += local.mins; + } + + void OnSpawn() override + { + SetGlobalVar("global.mstime.lastupdate", 0); + if ("game.time.month" == 12) + { + SetGlobalVar("G_CHRISTMAS_MODE", 1); + } + } + + void game_playerjoin() + { + world_updateplayertime(); + } + + void worldevent_time() + { + world_updateplayertime(); + } + + void world_updateplayertime() + { + ClientEvent("update", "all", "const.localplayer.scriptID", "recv_time", CURRENT_TIME_HOUR, CURRENT_TIME_MIN, TIME_RATIO, "global.map.allownight"); + } + +} + +} diff --git a/scripts/angelscript/world/server/time_vote.as b/scripts/angelscript/world/server/time_vote.as new file mode 100644 index 00000000..08bf3450 --- /dev/null +++ b/scripts/angelscript/world/server/time_vote.as @@ -0,0 +1,55 @@ +#pragma context server + +namespace MS +{ + +class TimeVote : CGameScript +{ + string script.newhour; + + void game_vote_end() + { + if (param1 == "advtime") + { + if (param3 == "success") + { + } + script.newhour = CURRENT_TIME_HOUR; + if (param4 == 0) + { + script.newhour += 3; + } + else + { + if (param4 == 1) + { + script.newhour += 6; + } + else + { + if (param4 == 2) + { + script.newhour += 12; + } + } + } + Effect("screenfade", "all", 0.5, 10, Vector3(0, 0, 0), 255, "fadeout"); + ScheduleDelayedEvent(4, "adv_time"); + ScheduleDelayedEvent(5, "adv_fadin"); + } + } + + void adv_time() + { + set_time(script.newhour, CURRENT_TIME_MIN); + SendInfoMsg("all", "Time Change Later that day..."); + } + + void adv_fadin() + { + Effect("screenfade", "all", 2, 3, Vector3(0, 0, 0), 255, "fadein"); + } + +} + +} diff --git a/scripts/angelscript/world/sv_world.as b/scripts/angelscript/world/sv_world.as new file mode 100644 index 00000000..f6282117 --- /dev/null +++ b/scripts/angelscript/world/sv_world.as @@ -0,0 +1,68 @@ +#pragma context server + +namespace MS +{ + +class SvWorld : CGameScript +{ + SvWorld() + { + SetGlobalVar("G_MAP_NAME", "game.map.title"); + SetGlobalVar("G_MAP_DESC", "game.map.desc"); + SetGlobalVar("G_WARN_HP", "game.map.hpwarn"); + } + + void OnSpawn() override + { + if (G_OVERRIDE_WEATHER_CODE != "0") + { + int OVERRIDE_WEATHER = 1; + } + if (G_OVERRIDE_WEATHER_CODE == "G_OVERRIDE_WEATHER_CODE") + { + int OVERRIDE_WEATHER = 0; + } + if ((OVERRIDE_WEATHER)) + { + SetGlobalVar("global.map.weather", G_OVERRIDE_WEATHER_CODE); + } + else + { + SetGlobalVar("global.map.weather", "game.map.weather"); + } + string L_MAP_NAME = StringToLower(GetMapName()); + if ((L_MAP_NAME).findFirst("pvp") == 0) + { + ScheduleDelayedEvent(5.0, "set_pvp"); + } + } + + void set_pvp() + { + LogDebug("set_pvp 1"); + SetCvar("ms_pklevel", 1); + SetPvP(1); + } + + void game_playerjoin() + { + string HP_TICK = G_WARN_HP; + if (G_WARN_HP == 0) + { + int HP_TICK = 400; + } + string TOTAL_HP = "game.players.totalhp"; + TOTAL_HP /= HP_TICK; + SetGlobalVar("G_HP_RAMP", int(TOTAL_HP)); + LogDebug("GetEntityName(param1) joined , HP total is now TOTAL_HP ramp G_HP_RAMP"); + } + + void game_playerleave() + { + LogDebug("sv_world game_playerleave GetEntityName(param1)"); + CallExternal("all", "player_left", GetEntityIndex(param1)); + } + +} + +} diff --git a/scripts/angelscript/worlditems/TC_sewer.as b/scripts/angelscript/worlditems/TC_sewer.as new file mode 100644 index 00000000..71889aee --- /dev/null +++ b/scripts/angelscript/worlditems/TC_sewer.as @@ -0,0 +1,24 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class TcSewer : CGameScript +{ + void chest_additems() + { + add_gold(RandomInt(3, 20)); + add_noob_item(); + AddStoreItem(STORENAME, "blunt_maul", RandomInt(0, 1), 0); + AddStoreItem(STORENAME, "bows_shortbow", RandomInt(0, 1), 0); + if (RandomInt(1, 3) == 1) + { + AddStoreItem(STORENAME, "proj_arrow_broadhead", 60, 0, 0, 60); + } + } + +} + +} diff --git a/scripts/angelscript/worlditems/clock_base.as b/scripts/angelscript/worlditems/clock_base.as new file mode 100644 index 00000000..719d9e73 --- /dev/null +++ b/scripts/angelscript/worlditems/clock_base.as @@ -0,0 +1,67 @@ +#pragma context server + +namespace MS +{ + +class ClockBase : CGameScript +{ + int local.lasthour; + int local.lastminute; + + void OnSpawn() override + { + SetAngles("face.x"); + SetProp(GetOwner(), "speed", 0); + local.lasthour = -1; + local.lastminute = -1; + } + + void worldevent_time() + { + if (("local.updatehourhand")) + { + set_hour_hand(param1, param3); + } + if (("local.updateminutehand")) + { + set_minute_hand(param2, param3); + } + } + + void set_hour_hand() + { + if (!(param1 != local.lasthour)) return; + string L_HOUR_POSITION = param1; + L_HOUR_POSITION *= 30; + string L_MIN_OFFSET = param1; + L_MIN_OFFSET /= 60; + L_MIN_OFFSET *= 30; + string L_HAND_POSITION = L_HOUR_POSITION; + L_HAND_POSITION += L_MIN_OFFSET; + L_HAND_POSITION *= -1; + SetAngles("face.x"); + local.lasthour = param1; + int L_HAND_SPEED = -3220; + L_HAND_SPEED /= 43200; + L_HAND_SPEED *= param2; + SetProp(GetOwner(), "avelocity", Vector3(L_HAND_SPEED, 0, 0)); + } + + void set_minute_hand() + { + if (!(param1 != local.lastminute)) return; + string L_HAND_POSITION = param1; + L_HAND_POSITION /= 60; + L_HAND_POSITION *= 360; + L_HAND_POSITION *= -1; + SetAngles("face.x"); + local.lastminute = param2; + int L_HAND_SPEED = -3220; + L_HAND_SPEED /= 3600; + L_HAND_SPEED *= param2; + SetProp(GetOwner(), "avelocity", Vector3(L_HAND_SPEED, 0, 0)); + } + +} + +} diff --git a/scripts/angelscript/worlditems/map_startup.as b/scripts/angelscript/worlditems/map_startup.as new file mode 100644 index 00000000..e8458b94 --- /dev/null +++ b/scripts/angelscript/worlditems/map_startup.as @@ -0,0 +1,69 @@ +#pragma context server + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + + MapStartup() + { + MAP_ALLOWNIGHT = 1; + if (MAP_WEATHER != "MAP_WEATHER") + { + SetGlobalVar("global.map.weather", MAP_WEATHER); + } + string L_MAP_NAME = GetMapName(); + game_newlevel(L_MAP_NAME); + if ((true)) + { + } + SetGlobalVar("G_RAN_STARTUP_SCRIPT", 1); + if (MAP_WEATHER == "MAP_WEATHER") + { + int DEFAULT_WEATHER = 1; + } + if ((MAP_WEATHER).length() < 3) + { + int DEFAULT_WEATHER = 1; + } + if ((DEFAULT_WEATHER)) + { + LogDebug("base_map_startup Set default weather"); + SetGlobalVar("global.map.weather", "clear;clear;clear"); + } + } + + void game_newlevel() + { + if (G_RAN_STARTUP_SCRIPT == "G_RAN_STARTUP_SCRIPT") + { + SetGlobalVar("G_RAN_STARTUP_SCRIPT", 1); + } + G_RAN_STARTUP_SCRIPT += 1; + if (MAP_WEATHER != "MAP_WEATHER") + { + SetGlobalVar("G_OVERRIDE_WEATHER_CODE", MAP_WEATHER); + } + else + { + SetGlobalVar("G_OVERRIDE_WEATHER_CODE", 0); + } + SetGlobalVar("global.map.weather", MAP_WEATHER); + SetGlobalVar("global.map.allownight", MAP_ALLOWNIGHT); + if (!(MAP_ALLOWNIGHT)) + { + SetGlobalVar("ALWAYS_DAY", 1); + SetGlobalVar("global.mstime.secs", 215940); + SetGlobalVar("global.mstime.updateall", 0); + } + LogDebug("game_newlevel PARAM1 MAP_ALLOWNIGHT MAP_WEATHER"); + if (!(param1 == MAP_NAME)) return; + SetGlobalVar("global.map.allownight", MAP_ALLOWNIGHT); + LogDebug("***** game_newlevel PARAM1 MAP_ALLOWNIGHT"); + } + +} + +} diff --git a/scripts/angelscript/worlditems/treasurechest.as b/scripts/angelscript/worlditems/treasurechest.as new file mode 100644 index 00000000..0ee0215b --- /dev/null +++ b/scripts/angelscript/worlditems/treasurechest.as @@ -0,0 +1,21 @@ +#pragma context server + +#include "chests/base_treasurechest.as" + +namespace MS +{ + +class Treasurechest : CGameScript +{ + void chest_additems() + { + add_gold(420); + add_noob_pot(); + add_good_pot(); + add_great_pot(); + add_epic_pot(); + } + +} + +} diff --git a/scripts/angelscript/ww1/map_startup.as b/scripts/angelscript/ww1/map_startup.as new file mode 100644 index 00000000..9a811726 --- /dev/null +++ b/scripts/angelscript/ww1/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "ww1"; + MAP_WEATHER = "clear;clear;rain;clear;clear;rain"; + MAP_ALLOWNIGHT = 1; + SetGlobalVar("G_MAP_NAME", "World Walker - Series One, Part I by Crow"); + SetGlobalVar("G_MAP_DESC", "The First of three gauntlet maps: Entrance to the tomb of Sir Geric"); + SetGlobalVar("G_MAP_DIFF", "Levels 15-25 / 200-500hp"); + SetGlobalVar("G_WARN_HP", 200); + } + +} + +} diff --git a/scripts/angelscript/ww2b/map_startup.as b/scripts/angelscript/ww2b/map_startup.as new file mode 100644 index 00000000..cefe7274 --- /dev/null +++ b/scripts/angelscript/ww2b/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "ww2b"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "World Walker - Series One, Part II by Crow"); + SetGlobalVar("G_MAP_DESC", "The upper catacombs of an ancient tomb."); + SetGlobalVar("G_MAP_DIFF", "Levels 15-25 / 200-500hp"); + SetGlobalVar("G_WARN_HP", 200); + } + +} + +} diff --git a/scripts/angelscript/ww3d/map_startup.as b/scripts/angelscript/ww3d/map_startup.as new file mode 100644 index 00000000..eff8603b --- /dev/null +++ b/scripts/angelscript/ww3d/map_startup.as @@ -0,0 +1,27 @@ +#pragma context server + +#include "worlditems/map_startup.as" + +namespace MS +{ + +class MapStartup : CGameScript +{ + int MAP_ALLOWNIGHT; + string MAP_NAME; + string MAP_WEATHER; + + MapStartup() + { + MAP_NAME = "ww3d"; + MAP_WEATHER = "clear;clear;clear;clear;clear;clear"; + MAP_ALLOWNIGHT = 0; + SetGlobalVar("G_MAP_NAME", "World Walker - Series One, Finale by Crow"); + SetGlobalVar("G_MAP_DESC", "The lower catacombs and the tomb Sir Geric."); + SetGlobalVar("G_MAP_DIFF", "Levels 15-30 / 200-600hp"); + SetGlobalVar("G_WARN_HP", 200); + } + +} + +} diff --git a/transpiler_errors.log b/transpiler_errors.log new file mode 100644 index 00000000..db2efabd --- /dev/null +++ b/transpiler_errors.log @@ -0,0 +1,380 @@ +[INFO] scripts\a3\olof.script:560: Empty event block 'npcatk_settarget' +[WARNING] scripts\a3\rudolf.script:3: Line outside event block: include a3/olof +[WARNING] scripts\badlands\djinn_fire.script:32: No translator for command 'moveanim' +[WARNING] scripts\bloodrose\atholo.script:124: No translator for command 'maxslope' +[WARNING] scripts\bloodshrine\base_sorc_friendly.script:207: Duplicate event name 'game_damaged' +[WARNING] scripts\chests\base_treasurechest.script:555: Duplicate event name 'game_dynamically_created' +[WARNING] scripts\deralia\innkeeper.script:254: Duplicate event name 'say_rumour' +[WARNING] scripts\deralia\thief.script:193: No translator for command 'STEAL' +[WARNING] scripts\deralia\Willem.script:5: No translator for command 'cosnt' +[WARNING] scripts\desert_temple\orc_chatter1.script:155: Duplicate event name 'npcatk_hunt' +[INFO] scripts\desert_temple\orc_chatter2.script:21: Empty event block 'start_combat' +[WARNING] scripts\desert_temple\orc_chatter2.script:76: Duplicate event name 'start_combat' +[WARNING] scripts\desert_temple\orc_chatter2.script:128: Duplicate event name 'npcatk_hunt' +[INFO] scripts\dq\voldar.script:318: Empty event block 'game_hitground' +[INFO] scripts\dq\voldararcher_turret.script:17: Empty event block 'back_off' +[WARNING] scripts\dq\voldaraxer.script:57: Duplicate event name 'orc_spawn' +[WARNING] scripts\dq\voldarwarrior.script:56: Duplicate event name 'orc_spawn' +[WARNING] scripts\dridje\gloam_slayer.script:516: Duplicate event name 'game_menu_cancel' +[INFO] scripts\dridje\gloam_slayer.script:600: Empty event block 'npc_suicide' +[WARNING] scripts\dridmars_scripts_WIP\deralia\innkeeper.script:254: Duplicate event name 'say_rumour' +[WARNING] scripts\dridmars_scripts_WIP\mines\rudolf.script:94: Duplicate event name 'say_where' +[WARNING] scripts\edana\barwench.script:143: Duplicate event name 'say_job' +[WARNING] scripts\edana\barwench.script:174: Duplicate event name 'say_cider' +[WARNING] scripts\edana\barwench.script:185: Duplicate event name 'say_cider' +[WARNING] scripts\edana\barwench.script:227: Duplicate event name 'say_reward' +[WARNING] scripts\edana\bryan.script:256: Duplicate event name 'say_cider' +[WARNING] scripts\edana\bryan.script:264: Duplicate event name 'say_cider' +[WARNING] scripts\edana\edrin.script:238: Duplicate event name 'say_thief' +[WARNING] scripts\edana\masterp.script:1103: No translator for command 'savenow' +[WARNING] scripts\edana\mayorguard.script:144: Duplicate event name 'say_thief' +[WARNING] scripts\edana\msqguard.script:70: Duplicate event name 'say_mayor' +[WARNING] scripts\edana\msqguard.script:195: Duplicate event name 'say_thief' +[WARNING] scripts\edana\suliban.script:72: Duplicate event name 'say_mayor' +[WARNING] scripts\edana\suliban.script:108: No translator for command 'say_mayor2' +[INFO] scripts\effects\base_dot.script:56: Empty event block 'dot_start' +[INFO] scripts\effects\base_effect.script:99: Empty event block 'effect_die' +[INFO] scripts\effects\base_effect.script:104: Empty event block 'game_duplicated' +[INFO] scripts\effects\sfx_bunny.script:15: Empty event block 'game_prerender' +[INFO] scripts\effects\sfx_gib_burst.script:90: Empty event block 'update_gib' +[INFO] scripts\effects\sfx_whipflash.script:29: Empty event block 'do_whip' +[WARNING] scripts\effects\specialattack_haste.script:42: Duplicate event name 'effect_die' +[WARNING] scripts\furion\dragoons\dragoon_elite.script:317: Duplicate event name 'npc_struck' +[WARNING] scripts\furion\dragoons\dragoon_elite.script:836: Duplicate event name 'npc_targetsighted' +[WARNING] scripts\game_master\vote_generic.script:68: No translator for command 'array.remove' +[WARNING] scripts\game_master\vote_generic.script:116: No translator for command 'array.remove' +[WARNING] scripts\game_master.script:1012: No translator for command 'timestamp' +[WARNING] scripts\gatecity\vendor.script:198: Duplicate event name 'game_spawn' +[INFO] scripts\helena\blacksmith.script:114: Empty event block 'helena_flee' +[INFO] scripts\helena\blacksmith.script:225: Empty event block 'npcatk_ally_alert' +[WARNING] scripts\helena\helena_npc.script:141: Duplicate event name 'game_struck' +[WARNING] scripts\helena\old_harry.script:132: No translator for command 'DLLFunc' +[WARNING] scripts\helena\old_harry.script:141: No translator for command 'DLLFunc' +[WARNING] scripts\helena\orcwarboss_ghost.script:67: No translator for command 'rendermode' +[WARNING] scripts\helena\orcwarboss_ghost.script:68: No translator for command 'renderamt' +[WARNING] scripts\helena\serrold.script:151: No translator for command 'DLLFunc' +[WARNING] scripts\helena\serrold.script:160: No translator for command 'DLLFunc' +[WARNING] scripts\helena\vendor.script:1: Line outside event block: f +[INFO] scripts\help\first_transition.script:54: Empty event block 'game_transition_exited' +[INFO] scripts\help\first_transition.script:103: Empty event block 'game_map_change' +[WARNING] scripts\items\armor_base.script:169: Duplicate event name 'barmor_effect_activate' +[WARNING] scripts\items\armor_base.script:41: No translator for command 'registerarmor' +[WARNING] scripts\items\armor_base.script:93: No translator for command 'playermessagecl' +[WARNING] scripts\items\armor_base_helmet.script:129: No translator for command 'setrender' +[INFO] scripts\items\armor_base_hybrid.script:151: Empty event block 'game_remove' +[INFO] scripts\items\armor_base_hybrid.script:206: Empty event block 'armor_spec_effect' +[WARNING] scripts\items\armor_base_hybrid.script:134: No translator for command 'playermessagecl' +[WARNING] scripts\items\armor_base_new.script:30: No translator for command 'registerarmor' +[WARNING] scripts\items\armor_base_new.script:69: No translator for command 'playermessagecl' +[WARNING] scripts\items\axes_base_twohanded.script:58: Duplicate event name 'game_spawn' +[INFO] scripts\items\axes_dragon_cl.script:10: Empty event block 'client_activate' +[WARNING] scripts\items\axes_td.script:65: No translator for command 'setmodelskin' +[WARNING] scripts\items\base_crest.script:72: No translator for command 'registerarmor' +[WARNING] scripts\items\base_crest.script:147: No translator for command 'playermessagecl' +[INFO] scripts\items\base_elemental_resist.script:104: Empty event block 'elm_get_resist' +[WARNING] scripts\items\base_item_extras.script:111: Duplicate event name 'game_deploy' +[WARNING] scripts\items\base_item_extras.script:202: Duplicate event name 'game_deploy' +[WARNING] scripts\items\base_item_extras.script:210: Duplicate event name 'game_fall' +[WARNING] scripts\items\base_item_extras.script:218: Duplicate event name 'game_restricted' +[INFO] scripts\items\base_item_extras.script:227: Empty event block 'bweapon_effect_activate' +[WARNING] scripts\items\base_lighted.script:93: No translator for command 'if' +[INFO] scripts\items\base_ranged.script:49: Empty event block 'game_dodamage' +[INFO] scripts\items\base_scan_area.script:19: Empty event block 'bscan_start_scan' +[WARNING] scripts\items\base_sheath.script:26: No translator for command 'registercontainer' +[WARNING] scripts\items\base_tome.script:101: Duplicate event name 'game_deploy' +[WARNING] scripts\items\base_tome.script:78: No translator for command 'learnspell' +[WARNING] scripts\items\base_weapon.script:80: Duplicate event name 'game_deploy' +[WARNING] scripts\items\blunt_gauntlets_fe1.script:152: Duplicate event name 'weapon_spawn' +[WARNING] scripts\items\blunt_gauntlets_fe1.script:97: No translator for command 'registerspell' +[INFO] scripts\items\blunt_gauntlets_fire.script:120: Empty event block 'item_idle' +[WARNING] scripts\items\blunt_gauntlets_fire.script:144: Duplicate event name 'gaunt_damaged_other' +[WARNING] scripts\items\blunt_lightning.script:2: Line outside event block: deleteent ent_me +[WARNING] scripts\items\blunt_lrod11.script:155: Duplicate event name 'repulse_start' +[WARNING] scripts\items\blunt_northmaul972.script:281: Duplicate event name 'game_deploy' +[INFO] scripts\items\blunt_northmaul972.script:290: Empty event block 'game_switchhands' +[WARNING] scripts\items\blunt_ravenmace.script:127: Duplicate event name 'weapon_spawn' +[INFO] scripts\items\bows_crossbow_heavy33.script:143: Empty event block 'ranged_noammo' +[INFO] scripts\items\bows_crossbow_light.script:136: Empty event block 'ranged_noammo' +[WARNING] scripts\items\crossbow_heavy.script:43: No translator for command 'setholdmodel' +[INFO] scripts\items\dev_staff\physgun.script:45: Empty event block 'target_freeze' +[WARNING] scripts\items\dev_staff.script:165: Duplicate event name 'game_attack1_down' +[INFO] scripts\items\dev_staff.script:187: Empty event block 'wmodel_me_baby' +[WARNING] scripts\items\item_djinn_fire.script:75: No translator for command 'if' +[WARNING] scripts\items\item_djinn_light.script:78: No translator for command 'if' +[INFO] scripts\items\item_precache.script:82: Empty event block 'fake_caches' +[INFO] scripts\items\magic_hand_base.script:178: Empty event block 'spell_prepare_success' +[INFO] scripts\items\magic_hand_base.script:202: Empty event block 'cast_end' +[WARNING] scripts\items\magic_hand_base.script:160: No translator for command 'registerspell' +[WARNING] scripts\items\magic_hand_holy_hammer.script:33: No translator for command 'registerspell' +[WARNING] scripts\items\mana_forget.script:97: Duplicate event name 'game_deploy' +[WARNING] scripts\items\pack_bank.script:82: No translator for command 'registercontainer' +[WARNING] scripts\items\pack_base.script:42: No translator for command 'registercontainer' +[WARNING] scripts\items\pack_base.script:138: No translator for command 'setlock' +[WARNING] scripts\items\pack_base.script:144: No translator for command 'setlock' +[WARNING] scripts\items\pack_sack.script:40: No translator for command 'playermessagecl' +[WARNING] scripts\items\polearms_base.script:1068: Duplicate event name 'game_drop' +[WARNING] scripts\items\polearms_base.script:1091: Duplicate event name 'attack_poke1_damaged_other' +[INFO] scripts\items\polearms_test.script:344: Empty event block 'item_idle' +[INFO] scripts\items\proj_arrow_phx_cl.script:63: Empty event block 'update_flame_burst' +[INFO] scripts\items\proj_arrow_spiral.script:51: Empty event block 'game_fall' +[INFO] scripts\items\proj_arrow_spiral.script:54: Empty event block 'game_projectile_hitnpc' +[WARNING] scripts\items\proj_arrow_spiral.script:103: Duplicate event name 'game_projectile_hitwall' +[WARNING] scripts\items\proj_base.script:128: No translator for command 'solidifyprojectile' +[WARNING] scripts\items\proj_bolt_fire.script:111: No translator for command 'attachlight' +[WARNING] scripts\items\proj_bolt_fire.script:112: No translator for command 'attachsprite' +[WARNING] scripts\items\proj_crescent.script:110: No translator for command 'projectiletouch' +[INFO] scripts\items\proj_fire_dart_cl.script:29: Empty event block 'effect_die' +[INFO] scripts\items\proj_flame_jet.script:52: Empty event block 'game_fall' +[WARNING] scripts\items\proj_flame_jet.script:102: Duplicate event name 'game_projectile_hitwall' +[INFO] scripts\items\proj_flame_jet2.script:52: Empty event block 'game_fall' +[WARNING] scripts\items\proj_flame_jet2.script:96: Duplicate event name 'game_projectile_hitwall' +[INFO] scripts\items\proj_freezing_sphere.script:58: Empty event block 'game_fall' +[INFO] scripts\items\proj_freezing_sphere.script:61: Empty event block 'game_projectile_hitnpc' +[WARNING] scripts\items\proj_freezing_sphere.script:84: Duplicate event name 'game_projectile_hitwall' +[WARNING] scripts\items\proj_gdragon_spit.script:47: No translator for command 'projectiletouch' +[INFO] scripts\items\proj_hold_person.script:59: Empty event block 'game_fall' +[WARNING] scripts\items\proj_k_knife.script:108: No translator for command 'solidifyprojectile' +[INFO] scripts\items\proj_lightning_ball.script:55: Empty event block 'game_fall' +[INFO] scripts\items\proj_lightning_ball_simple.script:47: Empty event block 'game_fall' +[WARNING] scripts\items\proj_mana.script:300: Duplicate event name 'game_projectile_hitwall' +[WARNING] scripts\items\proj_mana.script:49: No translator for command 'projectiletouch' +[INFO] scripts\items\proj_mana_drainer.script:14: Empty event block 'game_precache' +[WARNING] scripts\items\proj_mana_drainer.script:52: No translator for command 'usable' +[INFO] scripts\items\proj_poison.script:38: Empty event block 'game_fall' +[INFO] scripts\items\proj_poison_spit2.script:36: Empty event block 'game_fall' +[WARNING] scripts\items\proj_pole_sl.script:45: No translator for command 'projectiletouch' +[WARNING] scripts\items\proj_server_arrow.script:107: Duplicate event name 'game_tossprojectile' +[INFO] scripts\items\proj_ss.script:50: Empty event block 'game_fall' +[INFO] scripts\items\proj_ss.script:53: Empty event block 'game_projectile_hitnpc' +[WARNING] scripts\items\proj_ss.script:97: Duplicate event name 'game_projectile_hitwall' +[INFO] scripts\items\proj_ub.script:49: Empty event block 'game_fall' +[INFO] scripts\items\proj_ub.script:52: Empty event block 'game_projectile_hitnpc' +[WARNING] scripts\items\proj_ub.script:94: Duplicate event name 'game_projectile_hitwall' +[WARNING] scripts\items\proj_volcano_svr.script:95: Duplicate event name 'projectile_spawn' +[INFO] scripts\items\shields_base.script:301: Empty event block 'game_pickup' +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:141: Line outside event block: else { +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:142: Line outside event block: playsound 0 10 magic/frost_reverse.wav +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:143: Line outside event block: clientevent new all monsters/summon/ice_burst_cl $get(ent_owner,index) +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:146: Line outside event block: if ( $get(ent_me,hand_index) == 1 ) hud.addstatusicon ent_owner hud/status/alpha_specialcooldownright litchcooldownright 20 +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:147: Line outside event block: else hud.addstatusicon ent_owner hud/status/alpha_specialcooldownleft litchcooldownleft 20 +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:150: Line outside event block: setvard BURST_DAMAGE $math(multiply,$math(add,$math(multiply,$get(ent_owner,skill.smallarms),0.60),$math(multiply,$get(ent_owner,skill.spellcasting.ice),0.40)),2.5) +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:152: Line outside event block: setvard NEXT_LITCH_BURST game.time +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:154: Line outside event block: add NEXT_LITCH_BURST 20.0 +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:155: Line outside event block: setvard TARG_LIST $sort_entlist(TARG_LIST,range,$get(ent_owner,origin)) +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:156: Line outside event block: setvard TARGETS_AFFECTED 0 +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:157: Line outside event block: calleventloop $get_token_amt(TARG_LIST) burst_affect_targets +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:158: Line outside event block: } +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:159: Line outside event block: } +[WARNING] scripts\items\smallarms_frozentongueonflagpole.script:137: No translator for command '{' +[INFO] scripts\items\swords_dynamic.script:30: Empty event block 'register_normal' +[WARNING] scripts\items\swords_m2sword.script:131: No translator for command 'playrandomsoundcl' +[WARNING] scripts\items\swords_rune_green.script:74: Duplicate event name 'weapon_spawn' +[WARNING] scripts\items\swords_sf.script:322: Duplicate event name 'bweapon_effect_remove' +[WARNING] scripts\items\swords_testskin.script:51: No translator for command 'setmodelskin' +[WARNING] scripts\items\swords_testsub.script:52: No translator for command 'setviewmodelbody' +[WARNING] scripts\littleg\melanion.script:21: Command 'setmodelbody' translator returned False +[WARNING] scripts\littleg\salandria.script:18: Command 'setmodelbody' translator returned False +[WARNING] scripts\mercenaries\archer.script:201: Duplicate event name 'dropstuff' +[WARNING] scripts\mercenaries\archer.script:97: No translator for command 'attack' +[WARNING] scripts\mines\rudolf.script:94: Duplicate event name 'say_where' +[INFO] scripts\minibosses\flesheater.script:98: Empty event block 'game_postspawn' +[WARNING] scripts\minibosses\flesheater.script:277: Duplicate event name 'npcatk_targetvalidate' +[WARNING] scripts\monsters\anim_archer.script:109: Duplicate event name 'npc_targetsighted' +[WARNING] scripts\monsters\anim_archer.script:172: Duplicate event name 'two_was_summoned' +[INFO] scripts\monsters\attack_hack.script:41: Empty event block 'do_stuff' +[INFO] scripts\monsters\bandit_boss.script:1563: Empty event block 'do_invis' +[WARNING] scripts\monsters\bandit_elite.script:240: Duplicate event name 'npc_struck' +[WARNING] scripts\monsters\bandit_elite.script:684: Duplicate event name 'npc_targetsighted' +[WARNING] scripts\monsters\bandit_hard.script:248: Duplicate event name 'npc_struck' +[WARNING] scripts\monsters\base_anti_stuck.script:495: Duplicate event name 'game_dynamically_created' +[INFO] scripts\monsters\base_chat.script:120: Empty event block 'say_rumor' +[WARNING] scripts\monsters\base_chat_array.script:415: No translator for command 'L_LINE_LENGTH' +[WARNING] scripts\monsters\base_flyer.script:108: Duplicate event name 'do_one_eighty2' +[WARNING] scripts\monsters\base_glow.script:40: Duplicate event name 'game_death' +[WARNING] scripts\monsters\base_monster_shared.script:993: Duplicate event name 'game_damaged' +[WARNING] scripts\monsters\base_monster_shared.script:1374: Duplicate event name 'npcatk_clear_targets' +[WARNING] scripts\monsters\base_monster_shared.script:1406: Duplicate event name 'npcatk_resume_ai' +[WARNING] scripts\monsters\base_monster_shared.script:1457: Duplicate event name 'cycle_down' +[WARNING] scripts\monsters\base_monster_shared.script:360: No translator for command 'maxslope' +[WARNING] scripts\monsters\base_monster_shared.script:713: No translator for command 'get' +[WARNING] scripts\monsters\base_script_skills.script:202: No translator for command 'learnskill' +[WARNING] scripts\monsters\base_self_adjust.script:503: Duplicate event name 'game_dynamically_created' +[INFO] scripts\monsters\bat_summon.script:38: Empty event block 'bat_hang' +[WARNING] scripts\monsters\bear_base_giant.script:38: No translator for command 'removesetvar' +[WARNING] scripts\monsters\bear_base_giant.script:39: No translator for command 'removesetvar' +[WARNING] scripts\monsters\bear_base_giant.script:40: No translator for command 'removesetvar' +[WARNING] scripts\monsters\bear_base_giant.script:41: No translator for command 'removesetvard' +[WARNING] scripts\monsters\bear_god_random.script:290: Duplicate event name 'frame_attack1' +[WARNING] scripts\monsters\bear_god_random.script:294: Duplicate event name 'bear_stomp' +[WARNING] scripts\monsters\beetle_base.script:476: Duplicate event name 'npcatk_hunt' +[INFO] scripts\monsters\bludgeon_gaz_base.script:471: Empty event block 'walk_step' +[INFO] scripts\monsters\boar1.script:41: Empty event block 'npc_attack' +[WARNING] scripts\monsters\boar1.script:32: No translator for command 'setskin' +[WARNING] scripts\monsters\boar_base.script:63: No translator for command 'setskin' +[WARNING] scripts\monsters\borc.script:96: No translator for command 'layrandomsound' +[INFO] scripts\monsters\cold_lady.script:76: Empty event block 'npcatk_hunt' +[WARNING] scripts\monsters\companion\base_companion.script:255: No translator for command 'quest.set' +[INFO] scripts\monsters\companion\body_maker.script:2: Empty event block 'game_dynamically_created' +[WARNING] scripts\monsters\companion\pet_wolf.script:343: Duplicate event name 'bs_set_hunt_mode' +[INFO] scripts\monsters\companion\pet_wolf.script:439: Empty event block 'summon_cycle' +[INFO] scripts\monsters\companion\spell_maker_lightning.script:17: Empty event block 'game_spawn' +[WARNING] scripts\monsters\demonwing_giant_ice.script:756: Duplicate event name 'npc_stuck' +[WARNING] scripts\monsters\djinn_lightning_lesser.script:396: Duplicate event name 'my_target_died' +[WARNING] scripts\monsters\djinn_lightning_lesser.script:330: No translator for command 'setrvard' +[WARNING] scripts\monsters\djinn_lightning_troll.script:462: Duplicate event name 'warcry' +[WARNING] scripts\monsters\djinn_lightning_troll.script:479: Duplicate event name 'cycle_up' +[WARNING] scripts\monsters\djinn_ogre_fire.script:386: Duplicate event name 'my_target_died' +[WARNING] scripts\monsters\djinn_ogre_fire.script:568: Duplicate event name 'cycle_up' +[INFO] scripts\monsters\doom_plant_new.script:63: Empty event block 'set_final_params' +[INFO] scripts\monsters\dwarf_bomber.script:509: Empty event block 'frame_explode_land' +[INFO] scripts\monsters\dwarf_bomber.script:513: Empty event block 'frame_explode_prep' +[WARNING] scripts\monsters\dwarf_zombie_bloat.script:261: No translator for command 'vectorset.yaw' +[WARNING] scripts\monsters\dwarf_zombie_random.script:473: No translator for command 'usetrig' +[INFO] scripts\monsters\elf_wizard_cl.script:4: Empty event block 'client_activate' +[WARNING] scripts\monsters\externals.script:1064: Duplicate event name 'npc_post_spawn' +[WARNING] scripts\monsters\externals.script:1501: Duplicate event name 'npc_post_spawn' +[WARNING] scripts\monsters\externals.script:914: No translator for command 'setrender' +[INFO] scripts\monsters\fallen_armor_triggered.script:34: Empty event block 'armor_heardsound' +[INFO] scripts\monsters\fire_reaver_mini.script:291: Empty event block 'game_death' +[WARNING] scripts\monsters\fish_base.script:44: No translator for command 'roamdelay' +[WARNING] scripts\monsters\fish_base.script:82: No translator for command 'roamdelay' +[WARNING] scripts\monsters\fish_leech.script:80: Duplicate event name 'npc_spawn' +[WARNING] scripts\monsters\fish_leech.script:107: No translator for command 'roamdelay' +[WARNING] scripts\monsters\horror.script:384: Duplicate event name 'game_death' +[WARNING] scripts\monsters\ice_mage.script:212: Duplicate event name 'npcatk_hunt' +[WARNING] scripts\monsters\ice_mage.script:259: Duplicate event name 'npc_post_spawn' +[WARNING] scripts\monsters\ice_mage.script:264: Duplicate event name 'game_death' +[WARNING] scripts\monsters\ice_reaver.script:279: Duplicate event name 'slash_dodamage' +[WARNING] scripts\monsters\ice_reaver.script:304: No translator for command 'setrvard' +[WARNING] scripts\monsters\k_childre_boss_jelly.script:110: No translator for command 'taledmg' +[WARNING] scripts\monsters\k_hollow_one.script:107: Duplicate event name 'game_precache' +[INFO] scripts\monsters\k_hollow_one.script:439: Empty event block 'stop_movement' +[WARNING] scripts\monsters\k_hollow_one.script:919: Duplicate event name 'npcatk_hunt' +[WARNING] scripts\monsters\k_hollow_one.script:1151: Duplicate event name 'npcatk_hunt' +[INFO] scripts\monsters\lightning_worm.script:97: Empty event block 'npcatk_hunt' +[WARNING] scripts\monsters\maldora_gminion_random.script:312: Duplicate event name 'game_death' +[WARNING] scripts\monsters\maldora_minion_random.script:301: Duplicate event name 'game_death' +[INFO] scripts\monsters\morc_chief.script:200: Empty event block 'baseorc_yell' +[INFO] scripts\monsters\morc_shaman_ice_noblizz.script:3: Empty event block 'make_blizzard' +[WARNING] scripts\monsters\ogre_cave.script:352: Duplicate event name 'my_target_died' +[WARNING] scripts\monsters\ogre_cave_welp.script:350: Duplicate event name 'my_target_died' +[WARNING] scripts\monsters\orc_sniper.script:232: Duplicate event name 'npc_post_spawn' +[INFO] scripts\monsters\rabid_skele_base.script:156: Empty event block 'check_projectile' +[INFO] scripts\monsters\rabid_skele_base.script:160: Empty event block 'npc_death' +[INFO] scripts\monsters\sgoblin_cl.script:3: Empty event block 'client_activate' +[WARNING] scripts\monsters\skeleton_base.script:313: Duplicate event name 'game_heardsound' +[WARNING] scripts\monsters\skeleton_base.script:347: Duplicate event name 'make_deep_sleeper' +[WARNING] scripts\monsters\skeleton_ice.script:160: No translator for command 'setvarad' +[WARNING] scripts\monsters\skeleton_ice_lord.script:477: No translator for command 'setanim' +[WARNING] scripts\monsters\skeleton_ice_lord.script:569: No translator for command 'animspeed' +[WARNING] scripts\monsters\skeleton_poison_random.script:310: Duplicate event name 'game_damaged_other' +[WARNING] scripts\monsters\skeleton_poison_random.script:336: Duplicate event name 'attack_2' +[WARNING] scripts\monsters\skeleton_poison_random.script:406: Duplicate event name 'game_damaged_other' +[INFO] scripts\monsters\snake_cobra_boss_cl.script:3: Empty event block 'client_activate' +[WARNING] scripts\monsters\snake_gcobra_metal.script:238: No translator for command ']' +[INFO] scripts\monsters\snake_lord.script:56: Empty event block 'me_pouncie' +[WARNING] scripts\monsters\sorc_base.script:553: Duplicate event name 'npc_post_spawn' +[INFO] scripts\monsters\sorc_chief1.script:831: Empty event block 'do_nadda' +[INFO] scripts\monsters\sorc_chief2.script:494: Empty event block 'do_nadda' +[WARNING] scripts\monsters\sorc_juggernaut.script:139: Duplicate event name 'swing_axe' +[WARNING] scripts\monsters\summon\circle_of_death_old.script:93: No translator for command 'subract' +[WARNING] scripts\monsters\summon\circle_of_fire.script:70: No translator for command 'subract' +[WARNING] scripts\monsters\summon\circle_of_ice_greater.script:68: No translator for command 'subract' +[WARNING] scripts\monsters\summon\doom_plant.script:341: Duplicate event name 'game_dodamage' +[WARNING] scripts\monsters\summon\flame_burst.script:26: No translator for command 'clienteffect' +[WARNING] scripts\monsters\summon\ibarrier.script:193: Duplicate event name 'remove_me' +[WARNING] scripts\monsters\summon\ice_burst.script:28: No translator for command 'clienteffect' +[WARNING] scripts\monsters\summon\ice_wave.script:37: No translator for command 'subract' +[INFO] scripts\monsters\summon\magic_dart.script:203: Empty event block 'game_reached_dest' +[WARNING] scripts\monsters\summon\npc_poison_cloud_old.script:147: Duplicate event name 'smokes_start' +[WARNING] scripts\monsters\summon\npc_volcano.script:78: No translator for command 'client' +[WARNING] scripts\monsters\summon\poison_cloud.script:182: Duplicate event name 'smokes_start' +[WARNING] scripts\monsters\summon\volcano_troll.script:68: No translator for command 'client' +[WARNING] scripts\monsters\swamp_ogre.script:364: Duplicate event name 'my_target_died' +[WARNING] scripts\monsters\swamp_reaver.script:203: Duplicate event name 'npc_targetsighted' +[INFO] scripts\monsters\swamp_tube_cl.script:13: Empty event block 'do_nadda' +[INFO] scripts\monsters\uber_reaver.script:452: Empty event block 'game_damaged' +[WARNING] scripts\monsters\uber_reaver.script:229: No translator for command 'setrvard' +[WARNING] scripts\monsters\vgoblin_chief.script:214: Duplicate event name 'swing_axe' +[WARNING] scripts\monsters\wyrm_fire.script:351: No translator for command 'removefx' +[INFO] scripts\ms_soccer\sorc1.script:67: Empty event block 'jump_start' +[WARNING] scripts\ms_wicardoven\maldora.script:543: No translator for command 'effects' +[WARNING] scripts\ms_wicardoven\maldora_image.script:223: Duplicate event name 'maldoraf_died' +[WARNING] scripts\nashalrath\brush_storm_lightning1.script:1: Line outside event block: scope server +[WARNING] scripts\nashalrath\dragon_green_mini.script:325: Duplicate event name 'frame_slct_next_attack' +[WARNING] scripts\nashalrath\dragon_green_mini.script:676: Duplicate event name 'game_death' +[WARNING] scripts\nashalrath\kayrath_cl.script:101: Duplicate event name 'update_source_rhand' +[WARNING] scripts\NPCs\base_arrow_storage.script:97: No translator for command 'addstr' +[WARNING] scripts\NPCs\default_human.script:48: No translator for command 'hearingsensitivty' +[WARNING] scripts\NPCs\forsuth.script:570: Duplicate event name 'npcatk_targetvalidate' +[WARNING] scripts\NPCs\thief.script:178: Duplicate event name 'say_gold' +[WARNING] scripts\NPCs\tutorial_prisoner.script:34: No translator for command 'menu.autopen' +[WARNING] scripts\old_helena\dorfgan.script:243: Duplicate event name 'addrandomitems' +[WARNING] scripts\old_helena\dorfgan.script:248: Duplicate event name 'addrandomitems' +[WARNING] scripts\orc_for\goblin_base.script:381: Duplicate event name 'cycle_up' +[WARNING] scripts\other\beta_date.script:1: Unclosed event block starting at line 1 +[INFO] scripts\other\beta_date.script:1: Empty event block 'BETA_TIMESTAMP' +[WARNING] scripts\other\const_test.script:22: No translator for command 'const_ovrd' +[WARNING] scripts\other\const_test.script:23: No translator for command 'const_ovrd' +[WARNING] scripts\other\keyhole.script:51: Duplicate event name 'game_menu_getoptions' +[WARNING] scripts\other\keyhole_return.script:56: Duplicate event name 'game_menu_getoptions' +[WARNING] scripts\other\lure.script:110: Duplicate event name 'game_death' +[WARNING] scripts\other\lure.script:121: Duplicate event name 'game_struck' +[INFO] scripts\other\touch_test.script:7: Empty event block 'game_touch' +[WARNING] scripts\outpost\super.script:51: No translator for command 'maxslope' +[WARNING] scripts\phlames\phlame.script:573: No translator for command ')' +[WARNING] scripts\phobia\ralion_ally.script:244: Duplicate event name 'bandit_ally_fire_spawn' +[WARNING] scripts\player\emote_sit&stand.script:64: No translator for command 'setstatus' +[WARNING] scripts\player\emote_sit&stand.script:76: No translator for command 'setstatus' +[WARNING] scripts\player\externals.script:3179: Duplicate event name 'ext_setspawn' +[WARNING] scripts\player\externals.script:472: No translator for command 'addgold' +[WARNING] scripts\player\externals.script:1437: No translator for command 'setrender' +[INFO] scripts\player\player_animation.script:198: Empty event block 'hold_animate' +[WARNING] scripts\player\player_animation.script:26: No translator for command 'setstatus' +[WARNING] scripts\player\player_animation.script:37: No translator for command 'setstatus' +[WARNING] scripts\player\player_animation.script:39: No translator for command 'gaitframerate' +[WARNING] scripts\player\player_animation.script:119: No translator for command 'setstatus' +[WARNING] scripts\player\player_animation.script:163: No translator for command 'setanimtorso' +[WARNING] scripts\player\player_animation.script:164: No translator for command 'setanimlegs' +[WARNING] scripts\player\player_animation.script:186: No translator for command 'setanimlegs' +[WARNING] scripts\player\player_animation.script:256: No translator for command 'gaitframerate' +[WARNING] scripts\player\player_cl_effects_special.script:1040: Duplicate event name 'cl_playsound' +[INFO] scripts\player\player_cl_effects_special.script:1392: Empty event block 'cb_test2' +[INFO] scripts\player\player_cl_effects_weather.script:134: Empty event block 'tod_change' +[WARNING] scripts\player\player_cl_effects_world.script:233: No translator for command 'lightgamma' +[WARNING] scripts\player\player_cl_effects_world.script:263: No translator for command 'lightgamma' +[WARNING] scripts\player\player_cl_effects_world.script:299: No translator for command 'lightgamma' +[INFO] scripts\player\player_cl_main.script:27: Empty event block 'game_jump' +[INFO] scripts\player\player_cl_main.script:31: Empty event block 'game_jump_land' +[INFO] scripts\player\player_cl_main.script:44: Empty event block 'game_death' +[INFO] scripts\player\player_main.script:190: Empty event block 'game_think' +[INFO] scripts\player\player_main.script:514: Empty event block 'game_transition_entered' +[INFO] scripts\player\player_main.script:865: Empty event block 'game_party_leave' +[WARNING] scripts\player\player_main.script:1117: Duplicate event name 'game_damaged_other' +[WARNING] scripts\player\player_main.script:145: No translator for command 'summonpets' +[WARNING] scripts\player\player_main.script:619: No translator for command 'set' +[WARNING] scripts\player\player_main.script:631: No translator for command 'set' +[WARNING] scripts\player\player_main.script:986: No translator for command 'noxploss' +[WARNING] scripts\player\player_sv_menu.script:2: Line outside event block: / +[INFO] scripts\player\player_sv_menu.script:93: Empty event block 'menu_give_item' +[WARNING] scripts\roghan\slow_walk.script:60: No translator for command 'hearingsensetivity' +[WARNING] scripts\roghan\slow_walk.script:61: Command 'hearingsensitivity' translator returned False +[WARNING] scripts\sfor\undamael.script:190: No translator for command 'usertrigger' +[WARNING] scripts\sfor\undamael2.script:137: No translator for command 'reflect attacks >100dmg' +[WARNING] scripts\sfor\undamael2.script:142: No translator for command 'regen all health on kill' +[INFO] scripts\sfor\undamael_head.script:57: Empty event block 'npcatk_hunt' +[INFO] scripts\shops\base_magic.script:76: Empty event block 'bs_epic_item' +[INFO] scripts\slithar\slithar.script:737: Empty event block 'npcatk_suspend_ai' +[INFO] scripts\slithar\slithar.script:822: Empty event block 'npc_suicide' +[WARNING] scripts\sorc_palace\sorc_chief.script:645: Duplicate event name 'game_damaged' +[WARNING] scripts\sorc_palace\sorc_chief.script:835: Duplicate event name 'warcry_done' +[WARNING] scripts\sorc_palace\sorc_chief.script:1063: Duplicate event name 'npc_post_spawn' +[WARNING] scripts\sorc_villa\sorc_blacksmith.script:342: No translator for command 'savenow' +[WARNING] scripts\test_scripts\test_angelscript_integration.script:10: Duplicate event name 'game_spawn' +[WARNING] scripts\test_scripts\test_angelscript_integration.script:20: No translator for command 'infomessage' +[WARNING] scripts\test_scripts\test_angelscript_integration.script:106: No translator for command 'infomessage' +[INFO] scripts\traps\fire_wall.script:64: Empty event block 'game_dynamically_created' +[WARNING] scripts\traps\volcano.script:66: No translator for command 'client' +[WARNING] scripts\tutorial\prisoner.script:41: No translator for command 'menu.autopen' +[WARNING] scripts\tutorial\slave.script:37: No translator for command 'menu.autopen' +[WARNING] scripts\worlditems\map_startup.script:49: Duplicate event name 'game_newlevel' \ No newline at end of file